All files / frontend/.next/static/chunks main-app.js

0% Statements 0/2654
100% Branches 1/1
100% Functions 1/1
0% Lines 0/2654

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
/*
 * ATTENTION: An "eval-source-map" devtool has been used.
 * This devtool is neither made for production nor for readable output files.
 * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
 * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
 * or disable the default devtool with "devtool: false".
 * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
 */
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["main-app"],{
 
/***/ "(app-pages-browser)/./instrumentation-client.ts":
/*!***********************************!*\
  !*** ./instrumentation-client.ts ***!
  \***********************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _sentry_nextjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/nextjs */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/index.client.js\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js\");\nglobalThis[\"_sentryRewritesTunnelPath\"] = \"/monitoring\";\nglobalThis[\"SENTRY_RELEASE\"] = undefined;\nglobalThis[\"_sentryBasePath\"] = undefined;\nglobalThis[\"_sentryRewriteFramesAssetPrefixPath\"] = \"\";\nglobalThis[\"_sentryAssetPrefix\"] = undefined;\nglobalThis[\"_sentryExperimentalThirdPartyOriginStackFrames\"] = undefined;\nglobalThis[\"_sentryRouteManifest\"] = \"{\\\"dynamicRoutes\\\":[{\\\"path\\\":\\\"/assessments/:id\\\",\\\"regex\\\":\\\"^/assessments/([^/]+)$\\\",\\\"paramNames\\\":[\\\"id\\\"]},{\\\"path\\\":\\\"/assessments/:id/results\\\",\\\"regex\\\":\\\"^/assessments/([^/]+)/results$\\\",\\\"paramNames\\\":[\\\"id\\\"]},{\\\"path\\\":\\\"/assessment/results/:token\\\",\\\"regex\\\":\\\"^/assessment/results/([^/]+)$\\\",\\\"paramNames\\\":[\\\"token\\\"]}],\\\"staticRoutes\\\":[{\\\"path\\\":\\\"/\\\"},{\\\"path\\\":\\\"/forgot-password\\\"},{\\\"path\\\":\\\"/login\\\"},{\\\"path\\\":\\\"/onboarding\\\"},{\\\"path\\\":\\\"/register\\\"},{\\\"path\\\":\\\"/reset-password\\\"},{\\\"path\\\":\\\"/signup\\\"},{\\\"path\\\":\\\"/signup-traditional\\\"},{\\\"path\\\":\\\"/analytics\\\"},{\\\"path\\\":\\\"/assessments\\\"},{\\\"path\\\":\\\"/assessments/new\\\"},{\\\"path\\\":\\\"/business-profile\\\"},{\\\"path\\\":\\\"/chat\\\"},{\\\"path\\\":\\\"/chat-test\\\"},{\\\"path\\\":\\\"/checkout\\\"},{\\\"path\\\":\\\"/compliance-wizard\\\"},{\\\"path\\\":\\\"/components\\\"},{\\\"path\\\":\\\"/dashboard\\\"},{\\\"path\\\":\\\"/dashboard-custom\\\"},{\\\"path\\\":\\\"/data-export-demo\\\"},{\\\"path\\\":\\\"/debug\\\"},{\\\"path\\\":\\\"/evidence\\\"},{\\\"path\\\":\\\"/forms\\\"},{\\\"path\\\":\\\"/loading-states\\\"},{\\\"path\\\":\\\"/modals\\\"},{\\\"path\\\":\\\"/policies\\\"},{\\\"path\\\":\\\"/policies/new\\\"},{\\\"path\\\":\\\"/pricing\\\"},{\\\"path\\\":\\\"/reports\\\"},{\\\"path\\\":\\\"/risks\\\"},{\\\"path\\\":\\\"/settings/billing\\\"},{\\\"path\\\":\\\"/settings/integrations\\\"},{\\\"path\\\":\\\"/settings/team\\\"},{\\\"path\\\":\\\"/test-quick-actions\\\"},{\\\"path\\\":\\\"/freemium\\\"},{\\\"path\\\":\\\"/freemium/assessment\\\"},{\\\"path\\\":\\\"/freemium/results\\\"},{\\\"path\\\":\\\"/assessment\\\"},{\\\"path\\\":\\\"/auth/callback\\\"},{\\\"path\\\":\\\"/demo/error-boundary\\\"},{\\\"path\\\":\\\"/demo/file-upload\\\"},{\\\"path\\\":\\\"/demo/loading-states\\\"},{\\\"path\\\":\\\"/design-system\\\"},{\\\"path\\\":\\\"/editor\\\"},{\\\"path\\\":\\\"/marketing\\\"},{\\\"path\\\":\\\"/monitoring/test-error\\\"},{\\\"path\\\":\\\"/showcase/components\\\"},{\\\"path\\\":\\\"/test-theme\\\"}]}\";\n\n// Only initialize Sentry if a valid DSN is provided\nconst sentryDsn = process.env['NEXT_PUBLIC_SENTRY_DSN'];\nconst isValidDsn = sentryDsn && sentryDsn !== 'https://your-dsn@sentry.io/project-id' && sentryDsn.startsWith('https://') && sentryDsn.includes('@sentry.io');\nif (isValidDsn) {\n    _sentry_nextjs__WEBPACK_IMPORTED_MODULE_0__.init({\n        dsn: sentryDsn,\n        // Adjust this value in production, or use tracesSampler for greater control\n        tracesSampleRate:  false ? 0 : 1.0,\n        // Configure browser tracing\n        integrations: [\n            _sentry_nextjs__WEBPACK_IMPORTED_MODULE_0__.browserTracingIntegration({\n                // Set up automatic route change tracking in Next.js App Router\n                instrumentNavigation: true,\n                instrumentPageLoad: true\n            }),\n            _sentry_nextjs__WEBPACK_IMPORTED_MODULE_0__.replayIntegration({\n                // Capture 10% of the sessions in production\n                replaysSessionSampleRate:  false ? 0 : 1.0,\n                // Of those, capture 100% of error sessions\n                replaysOnErrorSampleRate: 1.0\n            })\n        ],\n        // Environment configuration\n        environment: \"development\",\n        // Release tracking\n        release: process.env['NEXT_PUBLIC_SENTRY_DSN'] || 'ruleiq-frontend@unknown',\n        // Performance Monitoring\n        tracesSampler: (samplingContext)=>{\n            var _location_pathname;\n            // Adjust sample rates based on context\n            const { location } = samplingContext;\n            if ((location === null || location === void 0 ? void 0 : location.pathname) === '/api/health') {\n                return 0.1; // Lower sampling for health checks\n            }\n            if (location === null || location === void 0 ? void 0 : (_location_pathname = location.pathname) === null || _location_pathname === void 0 ? void 0 : _location_pathname.startsWith('/api/')) {\n                return 0.5; // Moderate sampling for API routes\n            }\n            if (false) {}\n            return 1.0; // Full sampling in development\n        },\n        // Error filtering\n        beforeSend (event) {\n            // Filter out development-only errors\n            if (true) {\n                var _event_exception_values__value, _event_exception_values_, _event_exception_values, _event_exception;\n                // Filter out some common development errors\n                if ((_event_exception = event.exception) === null || _event_exception === void 0 ? void 0 : (_event_exception_values = _event_exception.values) === null || _event_exception_values === void 0 ? void 0 : (_event_exception_values_ = _event_exception_values[0]) === null || _event_exception_values_ === void 0 ? void 0 : (_event_exception_values__value = _event_exception_values_.value) === null || _event_exception_values__value === void 0 ? void 0 : _event_exception_values__value.includes('ResizeObserver loop limit exceeded')) {\n                    return null;\n                }\n            }\n            return event;\n        },\n        // User context\n        beforeSendTransaction (event) {\n            // You can modify the transaction before it's sent\n            return event;\n        },\n        // Additional context\n        initialScope: {\n            tags: {\n                component: 'frontend'\n            }\n        }\n    });\n} else {\n// TODO: Replace with proper logging\n}\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2luc3RydW1lbnRhdGlvbi1jbGllbnQudHMiLCJtYXBwaW5ncyI6Ijs7O0FBQUNBLFVBQVUsQ0FBQyw0QkFBNEIsR0FBRztBQUFjQSxVQUFVLENBQUMsaUJBQWlCLEdBQUdDO0FBQVVELFVBQVUsQ0FBQyxrQkFBa0IsR0FBR0M7QUFBVUQsVUFBVSxDQUFDLHNDQUFzQyxHQUFHO0FBQUdBLFVBQVUsQ0FBQyxxQkFBcUIsR0FBR0M7QUFBVUQsVUFBVSxDQUFDLGlEQUFpRCxHQUFHQztBQUFVRCxVQUFVLENBQUMsdUJBQXVCLEdBQUc7QUFBOHVEO0FBRTVrRSxvREFBb0Q7QUFDcEQsTUFBTUcsWUFBWUMsT0FBT0EsQ0FBQ0MsR0FBRyxDQUFDLHlCQUF5QjtBQUN2RCxNQUFNQyxhQUNKSCxhQUNBQSxjQUFjLDJDQUNkQSxVQUFVSSxVQUFVLENBQUMsZUFDckJKLFVBQVVLLFFBQVEsQ0FBQztBQUVyQixJQUFJRixZQUFZO0lBQ2RKLGdEQUFXLENBQUM7UUFDVlEsS0FBS1A7UUFFTCw0RUFBNEU7UUFDNUVRLGtCQUFrQlAsTUFBcUMsR0FBRyxDQUFHLEdBQUc7UUFFaEUsNEJBQTRCO1FBQzVCUSxjQUFjO1lBQ1pWLHFFQUFnQyxDQUFDO2dCQUMvQiwrREFBK0Q7Z0JBQy9EWSxzQkFBc0I7Z0JBQ3RCQyxvQkFBb0I7WUFDdEI7WUFDQWIsNkRBQXdCLENBQUM7Z0JBQ3ZCLDRDQUE0QztnQkFDNUNlLDBCQUEwQmIsTUFBcUMsR0FBRyxDQUFHLEdBQUc7Z0JBQ3hFLDJDQUEyQztnQkFDM0NjLDBCQUEwQjtZQUM1QjtTQUNEO1FBRUQsNEJBQTRCO1FBQzVCQyxhQWpDNndCO1FBbUM3d0IsbUJBQW1CO1FBQ25CQyxTQUFTaEIsT0FBT0EsQ0FBQ0MsR0FBRyxDQUFDLHlCQUF5QixJQUFJO1FBRWxELHlCQUF5QjtRQUN6QmdCLGVBQWUsQ0FBQ0M7Z0JBUVZDO1lBUEosdUNBQXVDO1lBQ3ZDLE1BQU0sRUFBRUEsUUFBUSxFQUFFLEdBQUdEO1lBRXJCLElBQUlDLENBQUFBLHFCQUFBQSwrQkFBQUEsU0FBVUMsUUFBUSxNQUFLLGVBQWU7Z0JBQ3hDLE9BQU8sS0FBSyxtQ0FBbUM7WUFDakQ7WUFFQSxJQUFJRCxxQkFBQUEsZ0NBQUFBLHFCQUFBQSxTQUFVQyxRQUFRLGNBQWxCRCx5Q0FBQUEsbUJBQW9CaEIsVUFBVSxDQUFDLFVBQVU7Z0JBQzNDLE9BQU8sS0FBSyxtQ0FBbUM7WUFDakQ7WUFFQSxJQUFJSCxLQUFxQyxFQUFFLEVBRTFDO1lBRUQsT0FBTyxLQUFLLCtCQUErQjtRQUM3QztRQUVBLGtCQUFrQjtRQUNsQnFCLFlBQVdDLEtBQUs7WUFDZCxxQ0FBcUM7WUFDckMsSUFBSXRCLElBQXNDLEVBQUU7b0JBRXRDc0IsZ0NBQUFBLDBCQUFBQSx5QkFBQUE7Z0JBREosNENBQTRDO2dCQUM1QyxLQUFJQSxtQkFBQUEsTUFBTUMsU0FBUyxjQUFmRCx3Q0FBQUEsMEJBQUFBLGlCQUFpQkUsTUFBTSxjQUF2QkYsK0NBQUFBLDJCQUFBQSx1QkFBeUIsQ0FBQyxFQUFFLGNBQTVCQSxnREFBQUEsaUNBQUFBLHlCQUE4QkcsS0FBSyxjQUFuQ0gscURBQUFBLCtCQUFxQ2xCLFFBQVEsQ0FBQyx1Q0FBdUM7b0JBQ3ZGLE9BQU87Z0JBQ1Q7WUFDRjtZQUVBLE9BQU9rQjtRQUNUO1FBRUEsZUFBZTtRQUNmSSx1QkFBc0JKLEtBQUs7WUFDekIsa0RBQWtEO1lBQ2xELE9BQU9BO1FBQ1Q7UUFFQSxxQkFBcUI7UUFDckJLLGNBQWM7WUFDWkMsTUFBTTtnQkFDSkMsV0FBVztZQUNiO1FBQ0Y7SUFDRjtBQUNGLE9BQU87QUFDTCxvQ0FBb0M7QUFDdEMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9pbnN0cnVtZW50YXRpb24tY2xpZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIjtnbG9iYWxUaGlzW1wiX3NlbnRyeVJld3JpdGVzVHVubmVsUGF0aFwiXSA9IFwiL21vbml0b3JpbmdcIjtnbG9iYWxUaGlzW1wiU0VOVFJZX1JFTEVBU0VcIl0gPSB1bmRlZmluZWQ7Z2xvYmFsVGhpc1tcIl9zZW50cnlCYXNlUGF0aFwiXSA9IHVuZGVmaW5lZDtnbG9iYWxUaGlzW1wiX3NlbnRyeVJld3JpdGVGcmFtZXNBc3NldFByZWZpeFBhdGhcIl0gPSBcIlwiO2dsb2JhbFRoaXNbXCJfc2VudHJ5QXNzZXRQcmVmaXhcIl0gPSB1bmRlZmluZWQ7Z2xvYmFsVGhpc1tcIl9zZW50cnlFeHBlcmltZW50YWxUaGlyZFBhcnR5T3JpZ2luU3RhY2tGcmFtZXNcIl0gPSB1bmRlZmluZWQ7Z2xvYmFsVGhpc1tcIl9zZW50cnlSb3V0ZU1hbmlmZXN0XCJdID0gXCJ7XFxcImR5bmFtaWNSb3V0ZXNcXFwiOlt7XFxcInBhdGhcXFwiOlxcXCIvYXNzZXNzbWVudHMvOmlkXFxcIixcXFwicmVnZXhcXFwiOlxcXCJeL2Fzc2Vzc21lbnRzLyhbXi9dKykkXFxcIixcXFwicGFyYW1OYW1lc1xcXCI6W1xcXCJpZFxcXCJdfSx7XFxcInBhdGhcXFwiOlxcXCIvYXNzZXNzbWVudHMvOmlkL3Jlc3VsdHNcXFwiLFxcXCJyZWdleFxcXCI6XFxcIl4vYXNzZXNzbWVudHMvKFteL10rKS9yZXN1bHRzJFxcXCIsXFxcInBhcmFtTmFtZXNcXFwiOltcXFwiaWRcXFwiXX0se1xcXCJwYXRoXFxcIjpcXFwiL2Fzc2Vzc21lbnQvcmVzdWx0cy86dG9rZW5cXFwiLFxcXCJyZWdleFxcXCI6XFxcIl4vYXNzZXNzbWVudC9yZXN1bHRzLyhbXi9dKykkXFxcIixcXFwicGFyYW1OYW1lc1xcXCI6W1xcXCJ0b2tlblxcXCJdfV0sXFxcInN0YXRpY1JvdXRlc1xcXCI6W3tcXFwicGF0aFxcXCI6XFxcIi9cXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvZm9yZ290LXBhc3N3b3JkXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2xvZ2luXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL29uYm9hcmRpbmdcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvcmVnaXN0ZXJcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvcmVzZXQtcGFzc3dvcmRcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvc2lnbnVwXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL3NpZ251cC10cmFkaXRpb25hbFxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9hbmFseXRpY3NcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvYXNzZXNzbWVudHNcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvYXNzZXNzbWVudHMvbmV3XFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2J1c2luZXNzLXByb2ZpbGVcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvY2hhdFxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9jaGF0LXRlc3RcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvY2hlY2tvdXRcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvY29tcGxpYW5jZS13aXphcmRcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvY29tcG9uZW50c1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9kYXNoYm9hcmRcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvZGFzaGJvYXJkLWN1c3RvbVxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9kYXRhLWV4cG9ydC1kZW1vXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2RlYnVnXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2V2aWRlbmNlXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2Zvcm1zXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2xvYWRpbmctc3RhdGVzXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL21vZGFsc1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9wb2xpY2llc1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9wb2xpY2llcy9uZXdcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvcHJpY2luZ1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9yZXBvcnRzXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL3Jpc2tzXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL3NldHRpbmdzL2JpbGxpbmdcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvc2V0dGluZ3MvaW50ZWdyYXRpb25zXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL3NldHRpbmdzL3RlYW1cXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvdGVzdC1xdWljay1hY3Rpb25zXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2ZyZWVtaXVtXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2ZyZWVtaXVtL2Fzc2Vzc21lbnRcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvZnJlZW1pdW0vcmVzdWx0c1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9hc3Nlc3NtZW50XFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2F1dGgvY2FsbGJhY2tcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvZGVtby9lcnJvci1ib3VuZGFyeVxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9kZW1vL2ZpbGUtdXBsb2FkXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2RlbW8vbG9hZGluZy1zdGF0ZXNcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvZGVzaWduLXN5c3RlbVxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9lZGl0b3JcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvbWFya2V0aW5nXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL21vbml0b3JpbmcvdGVzdC1lcnJvclxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9zaG93Y2FzZS9jb21wb25lbnRzXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL3Rlc3QtdGhlbWVcXFwifV19XCI7aW1wb3J0ICogYXMgU2VudHJ5IGZyb20gJ0BzZW50cnkvbmV4dGpzJztcblxuLy8gT25seSBpbml0aWFsaXplIFNlbnRyeSBpZiBhIHZhbGlkIERTTiBpcyBwcm92aWRlZFxuY29uc3Qgc2VudHJ5RHNuID0gcHJvY2Vzcy5lbnZbJ05FWFRfUFVCTElDX1NFTlRSWV9EU04nXTtcbmNvbnN0IGlzVmFsaWREc24gPVxuICBzZW50cnlEc24gJiZcbiAgc2VudHJ5RHNuICE9PSAnaHR0cHM6Ly95b3VyLWRzbkBzZW50cnkuaW8vcHJvamVjdC1pZCcgJiZcbiAgc2VudHJ5RHNuLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgJiZcbiAgc2VudHJ5RHNuLmluY2x1ZGVzKCdAc2VudHJ5LmlvJyk7XG5cbmlmIChpc1ZhbGlkRHNuKSB7XG4gIFNlbnRyeS5pbml0KHtcbiAgICBkc246IHNlbnRyeURzbixcblxuICAgIC8vIEFkanVzdCB0aGlzIHZhbHVlIGluIHByb2R1Y3Rpb24sIG9yIHVzZSB0cmFjZXNTYW1wbGVyIGZvciBncmVhdGVyIGNvbnRyb2xcbiAgICB0cmFjZXNTYW1wbGVSYXRlOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nID8gMC4xIDogMS4wLFxuXG4gICAgLy8gQ29uZmlndXJlIGJyb3dzZXIgdHJhY2luZ1xuICAgIGludGVncmF0aW9uczogW1xuICAgICAgU2VudHJ5LmJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24oe1xuICAgICAgICAvLyBTZXQgdXAgYXV0b21hdGljIHJvdXRlIGNoYW5nZSB0cmFja2luZyBpbiBOZXh0LmpzIEFwcCBSb3V0ZXJcbiAgICAgICAgaW5zdHJ1bWVudE5hdmlnYXRpb246IHRydWUsXG4gICAgICAgIGluc3RydW1lbnRQYWdlTG9hZDogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICAgU2VudHJ5LnJlcGxheUludGVncmF0aW9uKHtcbiAgICAgICAgLy8gQ2FwdHVyZSAxMCUgb2YgdGhlIHNlc3Npb25zIGluIHByb2R1Y3Rpb25cbiAgICAgICAgcmVwbGF5c1Nlc3Npb25TYW1wbGVSYXRlOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nID8gMC4xIDogMS4wLFxuICAgICAgICAvLyBPZiB0aG9zZSwgY2FwdHVyZSAxMDAlIG9mIGVycm9yIHNlc3Npb25zXG4gICAgICAgIHJlcGxheXNPbkVycm9yU2FtcGxlUmF0ZTogMS4wLFxuICAgICAgfSBhcyBhbnkpLCAvLyBUeXBlIGNhc3RpbmcgZm9yIGNvbXBhdGliaWxpdHlcbiAgICBdLFxuXG4gICAgLy8gRW52aXJvbm1lbnQgY29uZmlndXJhdGlvblxuICAgIGVudmlyb25tZW50OiBwcm9jZXNzLmVudi5OT0RFX0VOVixcblxuICAgIC8vIFJlbGVhc2UgdHJhY2tpbmdcbiAgICByZWxlYXNlOiBwcm9jZXNzLmVudlsnTkVYVF9QVUJMSUNfU0VOVFJZX0RTTiddIHx8ICdydWxlaXEtZnJvbnRlbmRAdW5rbm93bicsXG5cbiAgICAvLyBQZXJmb3JtYW5jZSBNb25pdG9yaW5nXG4gICAgdHJhY2VzU2FtcGxlcjogKHNhbXBsaW5nQ29udGV4dCkgPT4ge1xuICAgICAgLy8gQWRqdXN0IHNhbXBsZSByYXRlcyBiYXNlZCBvbiBjb250ZXh0XG4gICAgICBjb25zdCB7IGxvY2F0aW9uIH0gPSBzYW1wbGluZ0NvbnRleHQ7XG5cbiAgICAgIGlmIChsb2NhdGlvbj8ucGF0aG5hbWUgPT09ICcvYXBpL2hlYWx0aCcpIHtcbiAgICAgICAgcmV0dXJuIDAuMTsgLy8gTG93ZXIgc2FtcGxpbmcgZm9yIGhlYWx0aCBjaGVja3NcbiAgICAgIH1cblxuICAgICAgaWYgKGxvY2F0aW9uPy5wYXRobmFtZT8uc3RhcnRzV2l0aCgnL2FwaS8nKSkge1xuICAgICAgICByZXR1cm4gMC41OyAvLyBNb2RlcmF0ZSBzYW1wbGluZyBmb3IgQVBJIHJvdXRlc1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICByZXR1cm4gMC4xOyAvLyBMb3dlciBzYW1wbGluZyBpbiBwcm9kdWN0aW9uXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAxLjA7IC8vIEZ1bGwgc2FtcGxpbmcgaW4gZGV2ZWxvcG1lbnRcbiAgICB9LFxuXG4gICAgLy8gRXJyb3IgZmlsdGVyaW5nXG4gICAgYmVmb3JlU2VuZChldmVudCkge1xuICAgICAgLy8gRmlsdGVyIG91dCBkZXZlbG9wbWVudC1vbmx5IGVycm9yc1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgIC8vIEZpbHRlciBvdXQgc29tZSBjb21tb24gZGV2ZWxvcG1lbnQgZXJyb3JzXG4gICAgICAgIGlmIChldmVudC5leGNlcHRpb24/LnZhbHVlcz8uWzBdPy52YWx1ZT8uaW5jbHVkZXMoJ1Jlc2l6ZU9ic2VydmVyIGxvb3AgbGltaXQgZXhjZWVkZWQnKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9LFxuXG4gICAgLy8gVXNlciBjb250ZXh0XG4gICAgYmVmb3JlU2VuZFRyYW5zYWN0aW9uKGV2ZW50KSB7XG4gICAgICAvLyBZb3UgY2FuIG1vZGlmeSB0aGUgdHJhbnNhY3Rpb24gYmVmb3JlIGl0J3Mgc2VudFxuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH0sXG5cbiAgICAvLyBBZGRpdGlvbmFsIGNvbnRleHRcbiAgICBpbml0aWFsU2NvcGU6IHtcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgY29tcG9uZW50OiAnZnJvbnRlbmQnLFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbn0gZWxzZSB7XG4gIC8vIFRPRE86IFJlcGxhY2Ugd2l0aCBwcm9wZXIgbG9nZ2luZ1xufVxuIl0sIm5hbWVzIjpbImdsb2JhbFRoaXMiLCJ1bmRlZmluZWQiLCJTZW50cnkiLCJzZW50cnlEc24iLCJwcm9jZXNzIiwiZW52IiwiaXNWYWxpZERzbiIsInN0YXJ0c1dpdGgiLCJpbmNsdWRlcyIsImluaXQiLCJkc24iLCJ0cmFjZXNTYW1wbGVSYXRlIiwiaW50ZWdyYXRpb25zIiwiYnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbiIsImluc3RydW1lbnROYXZpZ2F0aW9uIiwiaW5zdHJ1bWVudFBhZ2VMb2FkIiwicmVwbGF5SW50ZWdyYXRpb24iLCJyZXBsYXlzU2Vzc2lvblNhbXBsZVJhdGUiLCJyZXBsYXlzT25FcnJvclNhbXBsZVJhdGUiLCJlbnZpcm9ubWVudCIsInJlbGVhc2UiLCJ0cmFjZXNTYW1wbGVyIiwic2FtcGxpbmdDb250ZXh0IiwibG9jYXRpb24iLCJwYXRobmFtZSIsImJlZm9yZVNlbmQiLCJldmVudCIsImV4Y2VwdGlvbiIsInZhbHVlcyIsInZhbHVlIiwiYmVmb3JlU2VuZFRyYW5zYWN0aW9uIiwiaW5pdGlhbFNjb3BlIiwidGFncyIsImNvbXBvbmVudCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./instrumentation-client.ts\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/client.js":
/*!********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/client.js ***!
  \********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   BrowserClient: () => (/* binding */ BrowserClient),\n/* harmony export */   applyDefaultOptions: () => (/* binding */ applyDefaultOptions)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _eventbuilder_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./eventbuilder.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/eventbuilder.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\");\n\n\n\n\n/**\n * A magic string that build tooling can leverage in order to inject a release value into the SDK.\n */\n\nconst DEFAULT_FLUSH_INTERVAL = 5000;\n\n/**\n * The Sentry Browser SDK Client.\n *\n * @see BrowserOptions for documentation on configuration options.\n * @see SentryClient for usage documentation.\n */\nclass BrowserClient extends _sentry_core__WEBPACK_IMPORTED_MODULE_0__.Client {\n\n  /**\n   * Creates a new Browser SDK instance.\n   *\n   * @param options Configuration options for this SDK.\n   */\n   constructor(options) {\n    const opts = applyDefaultOptions(options);\n    const sdkSource = _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.SENTRY_SDK_SOURCE || (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getSDKSource)();\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.applySdkMetadata)(opts, 'browser', ['browser'], sdkSource);\n\n    super(opts);\n\n    const { sendDefaultPii, sendClientReports, enableLogs, _experiments } = this._options;\n    // eslint-disable-next-line deprecation/deprecation\n    const shouldEnableLogs = enableLogs ?? _experiments?.enableLogs;\n\n    if (_helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.document && (sendClientReports || shouldEnableLogs)) {\n      _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.document.addEventListener('visibilitychange', () => {\n        if (_helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.document.visibilityState === 'hidden') {\n          if (sendClientReports) {\n            this._flushOutcomes();\n          }\n          if (shouldEnableLogs) {\n            (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__._INTERNAL_flushLogsBuffer)(this);\n          }\n        }\n      });\n    }\n\n    if (shouldEnableLogs) {\n      this.on('flush', () => {\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__._INTERNAL_flushLogsBuffer)(this);\n      });\n\n      this.on('afterCaptureLog', () => {\n        if (this._logFlushIdleTimeout) {\n          clearTimeout(this._logFlushIdleTimeout);\n        }\n\n        this._logFlushIdleTimeout = setTimeout(() => {\n          (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__._INTERNAL_flushLogsBuffer)(this);\n        }, DEFAULT_FLUSH_INTERVAL);\n      });\n    }\n\n    if (sendDefaultPii) {\n      this.on('postprocessEvent', _sentry_core__WEBPACK_IMPORTED_MODULE_0__.addAutoIpAddressToUser);\n      this.on('beforeSendSession', _sentry_core__WEBPACK_IMPORTED_MODULE_0__.addAutoIpAddressToSession);\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   eventFromException(exception, hint) {\n    return (0,_eventbuilder_js__WEBPACK_IMPORTED_MODULE_1__.eventFromException)(this._options.stackParser, exception, hint, this._options.attachStacktrace);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   eventFromMessage(\n    message,\n    level = 'info',\n    hint,\n  ) {\n    return (0,_eventbuilder_js__WEBPACK_IMPORTED_MODULE_1__.eventFromMessage)(this._options.stackParser, message, level, hint, this._options.attachStacktrace);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   _prepareEvent(\n    event,\n    hint,\n    currentScope,\n    isolationScope,\n  ) {\n    event.platform = event.platform || 'javascript';\n\n    return super._prepareEvent(event, hint, currentScope, isolationScope);\n  }\n}\n\n/** Exported only for tests. */\nfunction applyDefaultOptions(optionsArg) {\n  return {\n    release:\n      typeof __SENTRY_RELEASE__ === 'string' // This allows build tooling to find-and-replace __SENTRY_RELEASE__ to inject a release value\n        ? __SENTRY_RELEASE__\n        : _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.SENTRY_RELEASE?.id, // This supports the variable that sentry-webpack-plugin injects\n    sendClientReports: true,\n    // We default this to true, as it is the safer scenario\n    parentSpanIsAlwaysRootSpan: true,\n    ...optionsArg,\n  };\n}\n\n\n//# sourceMappingURL=client.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9jbGllbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBb0o7QUFDM0U7QUFDbkM7O0FBRXRDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsZ0RBQU07O0FBRWxDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLCtDQUFNLHNCQUFzQiwwREFBWTtBQUM5RCxJQUFJLDhEQUFnQjs7QUFFcEI7O0FBRUEsWUFBWSw4REFBOEQ7QUFDMUU7QUFDQTs7QUFFQSxRQUFRLCtDQUFNO0FBQ2QsTUFBTSwrQ0FBTTtBQUNaLFlBQVksK0NBQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHVFQUF5QjtBQUNyQztBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQSxRQUFRLHVFQUF5QjtBQUNqQyxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVSx1RUFBeUI7QUFDbkMsU0FBUztBQUNULE9BQU87QUFDUDs7QUFFQTtBQUNBLGtDQUFrQyxnRUFBc0I7QUFDeEQsbUNBQW1DLG1FQUF5QjtBQUM1RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvRUFBa0I7QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsa0VBQWdCO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLCtDQUFNO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFOEM7QUFDOUMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vY2xpZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaWVudCwgZ2V0U0RLU291cmNlLCBhcHBseVNka01ldGFkYXRhLCBfSU5URVJOQUxfZmx1c2hMb2dzQnVmZmVyLCBhZGRBdXRvSXBBZGRyZXNzVG9Vc2VyLCBhZGRBdXRvSXBBZGRyZXNzVG9TZXNzaW9uIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGV2ZW50RnJvbUV4Y2VwdGlvbiwgZXZlbnRGcm9tTWVzc2FnZSB9IGZyb20gJy4vZXZlbnRidWlsZGVyLmpzJztcbmltcG9ydCB7IFdJTkRPVyB9IGZyb20gJy4vaGVscGVycy5qcyc7XG5cbi8qKlxuICogQSBtYWdpYyBzdHJpbmcgdGhhdCBidWlsZCB0b29saW5nIGNhbiBsZXZlcmFnZSBpbiBvcmRlciB0byBpbmplY3QgYSByZWxlYXNlIHZhbHVlIGludG8gdGhlIFNESy5cbiAqL1xuXG5jb25zdCBERUZBVUxUX0ZMVVNIX0lOVEVSVkFMID0gNTAwMDtcblxuLyoqXG4gKiBUaGUgU2VudHJ5IEJyb3dzZXIgU0RLIENsaWVudC5cbiAqXG4gKiBAc2VlIEJyb3dzZXJPcHRpb25zIGZvciBkb2N1bWVudGF0aW9uIG9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEBzZWUgU2VudHJ5Q2xpZW50IGZvciB1c2FnZSBkb2N1bWVudGF0aW9uLlxuICovXG5jbGFzcyBCcm93c2VyQ2xpZW50IGV4dGVuZHMgQ2xpZW50IHtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBCcm93c2VyIFNESyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIFNESy5cbiAgICovXG4gICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgY29uc3Qgb3B0cyA9IGFwcGx5RGVmYXVsdE9wdGlvbnMob3B0aW9ucyk7XG4gICAgY29uc3Qgc2RrU291cmNlID0gV0lORE9XLlNFTlRSWV9TREtfU09VUkNFIHx8IGdldFNES1NvdXJjZSgpO1xuICAgIGFwcGx5U2RrTWV0YWRhdGEob3B0cywgJ2Jyb3dzZXInLCBbJ2Jyb3dzZXInXSwgc2RrU291cmNlKTtcblxuICAgIHN1cGVyKG9wdHMpO1xuXG4gICAgY29uc3QgeyBzZW5kRGVmYXVsdFBpaSwgc2VuZENsaWVudFJlcG9ydHMsIGVuYWJsZUxvZ3MsIF9leHBlcmltZW50cyB9ID0gdGhpcy5fb3B0aW9ucztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBjb25zdCBzaG91bGRFbmFibGVMb2dzID0gZW5hYmxlTG9ncyA/PyBfZXhwZXJpbWVudHM/LmVuYWJsZUxvZ3M7XG5cbiAgICBpZiAoV0lORE9XLmRvY3VtZW50ICYmIChzZW5kQ2xpZW50UmVwb3J0cyB8fCBzaG91bGRFbmFibGVMb2dzKSkge1xuICAgICAgV0lORE9XLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgIGlmIChXSU5ET1cuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJykge1xuICAgICAgICAgIGlmIChzZW5kQ2xpZW50UmVwb3J0cykge1xuICAgICAgICAgICAgdGhpcy5fZmx1c2hPdXRjb21lcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2hvdWxkRW5hYmxlTG9ncykge1xuICAgICAgICAgICAgX0lOVEVSTkFMX2ZsdXNoTG9nc0J1ZmZlcih0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzaG91bGRFbmFibGVMb2dzKSB7XG4gICAgICB0aGlzLm9uKCdmbHVzaCcsICgpID0+IHtcbiAgICAgICAgX0lOVEVSTkFMX2ZsdXNoTG9nc0J1ZmZlcih0aGlzKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm9uKCdhZnRlckNhcHR1cmVMb2cnLCAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9sb2dGbHVzaElkbGVUaW1lb3V0KSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvZ0ZsdXNoSWRsZVRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9nRmx1c2hJZGxlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIF9JTlRFUk5BTF9mbHVzaExvZ3NCdWZmZXIodGhpcyk7XG4gICAgICAgIH0sIERFRkFVTFRfRkxVU0hfSU5URVJWQUwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHNlbmREZWZhdWx0UGlpKSB7XG4gICAgICB0aGlzLm9uKCdwb3N0cHJvY2Vzc0V2ZW50JywgYWRkQXV0b0lwQWRkcmVzc1RvVXNlcik7XG4gICAgICB0aGlzLm9uKCdiZWZvcmVTZW5kU2Vzc2lvbicsIGFkZEF1dG9JcEFkZHJlc3NUb1Nlc3Npb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIGV2ZW50RnJvbUV4Y2VwdGlvbihleGNlcHRpb24sIGhpbnQpIHtcbiAgICByZXR1cm4gZXZlbnRGcm9tRXhjZXB0aW9uKHRoaXMuX29wdGlvbnMuc3RhY2tQYXJzZXIsIGV4Y2VwdGlvbiwgaGludCwgdGhpcy5fb3B0aW9ucy5hdHRhY2hTdGFja3RyYWNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIGV2ZW50RnJvbU1lc3NhZ2UoXG4gICAgbWVzc2FnZSxcbiAgICBsZXZlbCA9ICdpbmZvJyxcbiAgICBoaW50LFxuICApIHtcbiAgICByZXR1cm4gZXZlbnRGcm9tTWVzc2FnZSh0aGlzLl9vcHRpb25zLnN0YWNrUGFyc2VyLCBtZXNzYWdlLCBsZXZlbCwgaGludCwgdGhpcy5fb3B0aW9ucy5hdHRhY2hTdGFja3RyYWNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIF9wcmVwYXJlRXZlbnQoXG4gICAgZXZlbnQsXG4gICAgaGludCxcbiAgICBjdXJyZW50U2NvcGUsXG4gICAgaXNvbGF0aW9uU2NvcGUsXG4gICkge1xuICAgIGV2ZW50LnBsYXRmb3JtID0gZXZlbnQucGxhdGZvcm0gfHwgJ2phdmFzY3JpcHQnO1xuXG4gICAgcmV0dXJuIHN1cGVyLl9wcmVwYXJlRXZlbnQoZXZlbnQsIGhpbnQsIGN1cnJlbnRTY29wZSwgaXNvbGF0aW9uU2NvcGUpO1xuICB9XG59XG5cbi8qKiBFeHBvcnRlZCBvbmx5IGZvciB0ZXN0cy4gKi9cbmZ1bmN0aW9uIGFwcGx5RGVmYXVsdE9wdGlvbnMob3B0aW9uc0FyZykge1xuICByZXR1cm4ge1xuICAgIHJlbGVhc2U6XG4gICAgICB0eXBlb2YgX19TRU5UUllfUkVMRUFTRV9fID09PSAnc3RyaW5nJyAvLyBUaGlzIGFsbG93cyBidWlsZCB0b29saW5nIHRvIGZpbmQtYW5kLXJlcGxhY2UgX19TRU5UUllfUkVMRUFTRV9fIHRvIGluamVjdCBhIHJlbGVhc2UgdmFsdWVcbiAgICAgICAgPyBfX1NFTlRSWV9SRUxFQVNFX19cbiAgICAgICAgOiBXSU5ET1cuU0VOVFJZX1JFTEVBU0U/LmlkLCAvLyBUaGlzIHN1cHBvcnRzIHRoZSB2YXJpYWJsZSB0aGF0IHNlbnRyeS13ZWJwYWNrLXBsdWdpbiBpbmplY3RzXG4gICAgc2VuZENsaWVudFJlcG9ydHM6IHRydWUsXG4gICAgLy8gV2UgZGVmYXVsdCB0aGlzIHRvIHRydWUsIGFzIGl0IGlzIHRoZSBzYWZlciBzY2VuYXJpb1xuICAgIHBhcmVudFNwYW5Jc0Fsd2F5c1Jvb3RTcGFuOiB0cnVlLFxuICAgIC4uLm9wdGlvbnNBcmcsXG4gIH07XG59XG5cbmV4cG9ydCB7IEJyb3dzZXJDbGllbnQsIGFwcGx5RGVmYXVsdE9wdGlvbnMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNsaWVudC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/client.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/debug-build.js":
/*!*************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/debug-build.js ***!
  \*************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   DEBUG_BUILD: () => (/* binding */ DEBUG_BUILD)\n/* harmony export */ });\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = ( false || false);\n\n\n//# sourceMappingURL=debug-build.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9kZWJ1Zy1idWlsZC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixNQUF1QyxJQUFJLEtBQWdCOztBQUV6RDtBQUN2QiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9kZWJ1Zy1idWlsZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgc2VydmVzIGFzIGEgYnVpbGQgdGltZSBmbGFnIHRoYXQgd2lsbCBiZSB0cnVlIGJ5IGRlZmF1bHQsIGJ1dCBmYWxzZSBpbiBub24tZGVidWcgYnVpbGRzIG9yIGlmIHVzZXJzIHJlcGxhY2UgYF9fU0VOVFJZX0RFQlVHX19gIGluIHRoZWlyIGdlbmVyYXRlZCBjb2RlLlxuICpcbiAqIEFUVEVOVElPTjogVGhpcyBjb25zdGFudCBtdXN0IG5ldmVyIGNyb3NzIHBhY2thZ2UgYm91bmRhcmllcyAoaS5lLiBiZSBleHBvcnRlZCkgdG8gZ3VhcmFudGVlIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHRyZWUgc2hha2luZy5cbiAqL1xuY29uc3QgREVCVUdfQlVJTEQgPSAodHlwZW9mIF9fU0VOVFJZX0RFQlVHX18gPT09ICd1bmRlZmluZWQnIHx8IF9fU0VOVFJZX0RFQlVHX18pO1xuXG5leHBvcnQgeyBERUJVR19CVUlMRCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVidWctYnVpbGQuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/debug-build.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/diagnose-sdk.js":
/*!**************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/diagnose-sdk.js ***!
  \**************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   diagnoseSdkConnectivity: () => (/* binding */ diagnoseSdkConnectivity)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\n/**\n * A function to diagnose why the SDK might not be successfully sending data.\n *\n * Possible return values wrapped in a Promise:\n * - `\"no-client-active\"` - There was no active client when the function was called. This possibly means that the SDK was not initialized yet.\n * - `\"sentry-unreachable\"` - The Sentry SaaS servers were not reachable. This likely means that there is an ad blocker active on the page or that there are other connection issues.\n *\n * If the function doesn't detect an issue it resolves to `undefined`.\n */\nasync function diagnoseSdkConnectivity()\n\n {\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n\n  if (!client) {\n    return 'no-client-active';\n  }\n\n  if (!client.getDsn()) {\n    return 'no-dsn-configured';\n  }\n\n  try {\n    // If fetch throws, there is likely an ad blocker active or there are other connective issues.\n    await fetch(\n      // We are using the\n      // - \"sentry-sdks\" org with id 447951 not to pollute any actual organizations.\n      // - \"diagnose-sdk-connectivity\" project with id 4509632503087104\n      // - the public key of said org/project, which is disabled in the project settings\n      // => this DSN: https://c1dfb07d783ad5325c245c1fd3725390@o447951.ingest.us.sentry.io/4509632503087104 (i.e. disabled)\n      'https://o447951.ingest.sentry.io/api/4509632503087104/envelope/?sentry_version=7&sentry_key=c1dfb07d783ad5325c245c1fd3725390&sentry_client=sentry.javascript.browser%2F1.33.7',\n      {\n        body: '{}',\n        method: 'POST',\n        mode: 'cors',\n        credentials: 'omit',\n      },\n    );\n  } catch {\n    return 'sentry-unreachable';\n  }\n}\n\n\n//# sourceMappingURL=diagnose-sdk.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9kaWFnbm9zZS1zZGsuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBeUM7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLHVEQUFTOztBQUUxQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRW1DO0FBQ25DIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrYnJvd3NlckA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9idWlsZC9ucG0vZXNtL2RpYWdub3NlLXNkay5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDbGllbnQgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdG8gZGlhZ25vc2Ugd2h5IHRoZSBTREsgbWlnaHQgbm90IGJlIHN1Y2Nlc3NmdWxseSBzZW5kaW5nIGRhdGEuXG4gKlxuICogUG9zc2libGUgcmV0dXJuIHZhbHVlcyB3cmFwcGVkIGluIGEgUHJvbWlzZTpcbiAqIC0gYFwibm8tY2xpZW50LWFjdGl2ZVwiYCAtIFRoZXJlIHdhcyBubyBhY3RpdmUgY2xpZW50IHdoZW4gdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQuIFRoaXMgcG9zc2libHkgbWVhbnMgdGhhdCB0aGUgU0RLIHdhcyBub3QgaW5pdGlhbGl6ZWQgeWV0LlxuICogLSBgXCJzZW50cnktdW5yZWFjaGFibGVcImAgLSBUaGUgU2VudHJ5IFNhYVMgc2VydmVycyB3ZXJlIG5vdCByZWFjaGFibGUuIFRoaXMgbGlrZWx5IG1lYW5zIHRoYXQgdGhlcmUgaXMgYW4gYWQgYmxvY2tlciBhY3RpdmUgb24gdGhlIHBhZ2Ugb3IgdGhhdCB0aGVyZSBhcmUgb3RoZXIgY29ubmVjdGlvbiBpc3N1ZXMuXG4gKlxuICogSWYgdGhlIGZ1bmN0aW9uIGRvZXNuJ3QgZGV0ZWN0IGFuIGlzc3VlIGl0IHJlc29sdmVzIHRvIGB1bmRlZmluZWRgLlxuICovXG5hc3luYyBmdW5jdGlvbiBkaWFnbm9zZVNka0Nvbm5lY3Rpdml0eSgpXG5cbiB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuXG4gIGlmICghY2xpZW50KSB7XG4gICAgcmV0dXJuICduby1jbGllbnQtYWN0aXZlJztcbiAgfVxuXG4gIGlmICghY2xpZW50LmdldERzbigpKSB7XG4gICAgcmV0dXJuICduby1kc24tY29uZmlndXJlZCc7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIElmIGZldGNoIHRocm93cywgdGhlcmUgaXMgbGlrZWx5IGFuIGFkIGJsb2NrZXIgYWN0aXZlIG9yIHRoZXJlIGFyZSBvdGhlciBjb25uZWN0aXZlIGlzc3Vlcy5cbiAgICBhd2FpdCBmZXRjaChcbiAgICAgIC8vIFdlIGFyZSB1c2luZyB0aGVcbiAgICAgIC8vIC0gXCJzZW50cnktc2Rrc1wiIG9yZyB3aXRoIGlkIDQ0Nzk1MSBub3QgdG8gcG9sbHV0ZSBhbnkgYWN0dWFsIG9yZ2FuaXphdGlvbnMuXG4gICAgICAvLyAtIFwiZGlhZ25vc2Utc2RrLWNvbm5lY3Rpdml0eVwiIHByb2plY3Qgd2l0aCBpZCA0NTA5NjMyNTAzMDg3MTA0XG4gICAgICAvLyAtIHRoZSBwdWJsaWMga2V5IG9mIHNhaWQgb3JnL3Byb2plY3QsIHdoaWNoIGlzIGRpc2FibGVkIGluIHRoZSBwcm9qZWN0IHNldHRpbmdzXG4gICAgICAvLyA9PiB0aGlzIERTTjogaHR0cHM6Ly9jMWRmYjA3ZDc4M2FkNTMyNWMyNDVjMWZkMzcyNTM5MEBvNDQ3OTUxLmluZ2VzdC51cy5zZW50cnkuaW8vNDUwOTYzMjUwMzA4NzEwNCAoaS5lLiBkaXNhYmxlZClcbiAgICAgICdodHRwczovL280NDc5NTEuaW5nZXN0LnNlbnRyeS5pby9hcGkvNDUwOTYzMjUwMzA4NzEwNC9lbnZlbG9wZS8/c2VudHJ5X3ZlcnNpb249NyZzZW50cnlfa2V5PWMxZGZiMDdkNzgzYWQ1MzI1YzI0NWMxZmQzNzI1MzkwJnNlbnRyeV9jbGllbnQ9c2VudHJ5LmphdmFzY3JpcHQuYnJvd3NlciUyRjEuMzMuNycsXG4gICAgICB7XG4gICAgICAgIGJvZHk6ICd7fScsXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBtb2RlOiAnY29ycycsXG4gICAgICAgIGNyZWRlbnRpYWxzOiAnb21pdCcsXG4gICAgICB9LFxuICAgICk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnc2VudHJ5LXVucmVhY2hhYmxlJztcbiAgfVxufVxuXG5leHBvcnQgeyBkaWFnbm9zZVNka0Nvbm5lY3Rpdml0eSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGlhZ25vc2Utc2RrLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/diagnose-sdk.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/eventbuilder.js":
/*!**************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/eventbuilder.js ***!
  \**************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   eventFromException: () => (/* binding */ eventFromException),\n/* harmony export */   eventFromMessage: () => (/* binding */ eventFromMessage),\n/* harmony export */   eventFromUnknownInput: () => (/* binding */ eventFromUnknownInput),\n/* harmony export */   exceptionFromError: () => (/* binding */ exceptionFromError),\n/* harmony export */   extractMessage: () => (/* binding */ extractMessage),\n/* harmony export */   extractType: () => (/* binding */ extractType)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nfunction exceptionFromError(stackParser, ex) {\n  // Get the frames first since Opera can lose the stack if we touch anything else first\n  const frames = parseStackFrames(stackParser, ex);\n\n  const exception = {\n    type: extractType(ex),\n    value: extractMessage(ex),\n  };\n\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n\n  if (exception.type === undefined && exception.value === '') {\n    exception.value = 'Unrecoverable error caught';\n  }\n\n  return exception;\n}\n\nfunction eventFromPlainObject(\n  stackParser,\n  exception,\n  syntheticException,\n  isUnhandledRejection,\n) {\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  const normalizeDepth = client?.getOptions().normalizeDepth;\n\n  // If we can, we extract an exception from the object properties\n  const errorFromProp = getErrorPropertyFromObject(exception);\n\n  const extra = {\n    __serialized__: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.normalizeToSize)(exception, normalizeDepth),\n  };\n\n  if (errorFromProp) {\n    return {\n      exception: {\n        values: [exceptionFromError(stackParser, errorFromProp)],\n      },\n      extra,\n    };\n  }\n\n  const event = {\n    exception: {\n      values: [\n        {\n          type: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isEvent)(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n          value: getNonErrorObjectExceptionValue(exception, { isUnhandledRejection }),\n        } ,\n      ],\n    },\n    extra,\n  } ;\n\n  if (syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      // event.exception.values[0] has been set above\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      event.exception.values[0].stacktrace = { frames };\n    }\n  }\n\n  return event;\n}\n\nfunction eventFromError(stackParser, ex) {\n  return {\n    exception: {\n      values: [exceptionFromError(stackParser, ex)],\n    },\n  };\n}\n\n/** Parses stack frames from an error */\nfunction parseStackFrames(\n  stackParser,\n  ex,\n) {\n  // Access and store the stacktrace property before doing ANYTHING\n  // else to it because Opera is not very good at providing it\n  // reliably in other circumstances.\n  const stacktrace = ex.stacktrace || ex.stack || '';\n\n  const skipLines = getSkipFirstStackStringLines(ex);\n  const framesToPop = getPopFirstTopFrames(ex);\n\n  try {\n    return stackParser(stacktrace, skipLines, framesToPop);\n  } catch {\n    // no-empty\n  }\n\n  return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\n/**\n * Certain known React errors contain links that would be falsely\n * parsed as frames. This function check for these errors and\n * returns number of the stack string lines to skip.\n */\nfunction getSkipFirstStackStringLines(ex) {\n  if (ex && reactMinifiedRegexp.test(ex.message)) {\n    return 1;\n  }\n\n  return 0;\n}\n\n/**\n * If error has `framesToPop` property, it means that the\n * creator tells us the first x frames will be useless\n * and should be discarded. Typically error from wrapper function\n * which don't point to the actual location in the developer's code.\n *\n * Example: https://github.com/zertosh/invariant/blob/master/invariant.js#L46\n */\nfunction getPopFirstTopFrames(ex) {\n  if (typeof ex.framesToPop === 'number') {\n    return ex.framesToPop;\n  }\n\n  return 0;\n}\n\n// https://developer.mozilla.org/en-US/docs/WebAssembly/JavaScript_interface/Exception\n// @ts-expect-error - WebAssembly.Exception is a valid class\nfunction isWebAssemblyException(exception) {\n  // Check for support\n  // @ts-expect-error - WebAssembly.Exception is a valid class\n  if (typeof WebAssembly !== 'undefined' && typeof WebAssembly.Exception !== 'undefined') {\n    // @ts-expect-error - WebAssembly.Exception is a valid class\n    return exception instanceof WebAssembly.Exception;\n  } else {\n    return false;\n  }\n}\n\n/**\n * Extracts from errors what we use as the exception `type` in error events.\n *\n * Usually, this is the `name` property on Error objects but WASM errors need to be treated differently.\n */\nfunction extractType(ex) {\n  const name = ex?.name;\n\n  // The name for WebAssembly.Exception Errors needs to be extracted differently.\n  // Context: https://github.com/getsentry/sentry-javascript/issues/13787\n  if (!name && isWebAssemblyException(ex)) {\n    // Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n    const hasTypeInMessage = ex.message && Array.isArray(ex.message) && ex.message.length == 2;\n    return hasTypeInMessage ? ex.message[0] : 'WebAssembly.Exception';\n  }\n\n  return name;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nfunction extractMessage(ex) {\n  const message = ex?.message;\n\n  if (isWebAssemblyException(ex)) {\n    // For Node 18, Emscripten sets array[type, message] to the \"message\" property on the WebAssembly.Exception object\n    if (Array.isArray(ex.message) && ex.message.length == 2) {\n      return ex.message[1];\n    }\n    return 'wasm exception';\n  }\n\n  if (!message) {\n    return 'No error message';\n  }\n\n  if (message.error && typeof message.error.message === 'string') {\n    return message.error.message;\n  }\n\n  return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nfunction eventFromException(\n  stackParser,\n  exception,\n  hint,\n  attachStacktrace,\n) {\n  const syntheticException = hint?.syntheticException || undefined;\n  const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addExceptionMechanism)(event); // defaults to { type: 'generic', handled: true }\n  event.level = 'error';\n  if (hint?.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.resolvedSyncPromise)(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nfunction eventFromMessage(\n  stackParser,\n  message,\n  level = 'info',\n  hint,\n  attachStacktrace,\n) {\n  const syntheticException = hint?.syntheticException || undefined;\n  const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n  event.level = level;\n  if (hint?.event_id) {\n    event.event_id = hint.event_id;\n  }\n  return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.resolvedSyncPromise)(event);\n}\n\n/**\n * @hidden\n */\nfunction eventFromUnknownInput(\n  stackParser,\n  exception,\n  syntheticException,\n  attachStacktrace,\n  isUnhandledRejection,\n) {\n  let event;\n\n  if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isErrorEvent)(exception ) && (exception ).error) {\n    // If it is an ErrorEvent with `error` property, extract it to get actual Error\n    const errorEvent = exception ;\n    return eventFromError(stackParser, errorEvent.error );\n  }\n\n  // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n  // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n  // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n  //\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n  // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n  if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isDOMError)(exception) || (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isDOMException)(exception )) {\n    const domException = exception ;\n\n    if ('stack' in (exception )) {\n      event = eventFromError(stackParser, exception );\n    } else {\n      const name = domException.name || ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isDOMError)(domException) ? 'DOMError' : 'DOMException');\n      const message = domException.message ? `${name}: ${domException.message}` : name;\n      event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addExceptionTypeValue)(event, message);\n    }\n    if ('code' in domException) {\n      // eslint-disable-next-line deprecation/deprecation\n      event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n    }\n\n    return event;\n  }\n  if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isError)(exception)) {\n    // we have a real Error object, do nothing\n    return eventFromError(stackParser, exception);\n  }\n  if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isPlainObject)(exception) || (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isEvent)(exception)) {\n    // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n    // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n    // group on any key/value change.\n    const objectException = exception ;\n    event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addExceptionMechanism)(event, {\n      synthetic: true,\n    });\n    return event;\n  }\n\n  // If none of previous checks were valid, then it means that it's not:\n  // - an instance of DOMError\n  // - an instance of DOMException\n  // - an instance of Event\n  // - an instance of Error\n  // - a valid ErrorEvent (one with an error property)\n  // - a plain Object\n  //\n  // So bail out and capture it as a simple message:\n  event = eventFromString(stackParser, exception , syntheticException, attachStacktrace);\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addExceptionTypeValue)(event, `${exception}`, undefined);\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addExceptionMechanism)(event, {\n    synthetic: true,\n  });\n\n  return event;\n}\n\nfunction eventFromString(\n  stackParser,\n  message,\n  syntheticException,\n  attachStacktrace,\n) {\n  const event = {};\n\n  if (attachStacktrace && syntheticException) {\n    const frames = parseStackFrames(stackParser, syntheticException);\n    if (frames.length) {\n      event.exception = {\n        values: [{ value: message, stacktrace: { frames } }],\n      };\n    }\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addExceptionMechanism)(event, { synthetic: true });\n  }\n\n  if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isParameterizedString)(message)) {\n    const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n    event.logentry = {\n      message: __sentry_template_string__,\n      params: __sentry_template_values__,\n    };\n    return event;\n  }\n\n  event.message = message;\n  return event;\n}\n\nfunction getNonErrorObjectExceptionValue(\n  exception,\n  { isUnhandledRejection },\n) {\n  const keys = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.extractExceptionKeysForMessage)(exception);\n  const captureType = isUnhandledRejection ? 'promise rejection' : 'exception';\n\n  // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n  // We still want to try to get a decent message for these cases\n  if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isErrorEvent)(exception)) {\n    return `Event \\`ErrorEvent\\` captured as ${captureType} with message \\`${exception.message}\\``;\n  }\n\n  if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isEvent)(exception)) {\n    const className = getObjectClassName(exception);\n    return `Event \\`${className}\\` (type=${exception.type}) captured as ${captureType}`;\n  }\n\n  return `Object captured as ${captureType} with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj) {\n  try {\n    const prototype = Object.getPrototypeOf(obj);\n    return prototype ? prototype.constructor.name : undefined;\n  } catch {\n    // ignore errors here\n  }\n}\n\n/** If a plain object has a property that is an `Error`, return this error. */\nfunction getErrorPropertyFromObject(obj) {\n  for (const prop in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n      const value = obj[prop];\n      if (value instanceof Error) {\n        return value;\n      }\n    }\n  }\n\n  return undefined;\n}\n\n\n//# sourceMappingURL=eventbuilder.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9ldmVudGJ1aWxkZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUErUDs7QUFFL1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkJBQTZCO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix1REFBUztBQUMxQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLDZEQUFlO0FBQ25DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixxREFBTztBQUN2Qiw4REFBOEQsc0JBQXNCO0FBQ3BGLFVBQVU7QUFDVjtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx1REFBdUQ7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSxhQUFhO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxtRUFBcUIsU0FBUyxpQkFBaUI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGlFQUFtQjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxpRUFBbUI7QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLDBEQUFZO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSx3REFBVSxlQUFlLDREQUFjO0FBQzdDOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ04seUNBQXlDLHdEQUFVO0FBQ25ELGdEQUFnRCxLQUFLLElBQUkscUJBQXFCO0FBQzlFO0FBQ0EsTUFBTSxtRUFBcUI7QUFDM0I7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHVDQUF1QyxrQkFBa0I7QUFDOUU7O0FBRUE7QUFDQTtBQUNBLE1BQU0scURBQU87QUFDYjtBQUNBO0FBQ0E7QUFDQSxNQUFNLDJEQUFhLGVBQWUscURBQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksbUVBQXFCO0FBQ3pCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG1FQUFxQixXQUFXLFVBQVU7QUFDNUMsRUFBRSxtRUFBcUI7QUFDdkI7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsOEJBQThCLFVBQVU7QUFDM0Q7QUFDQTtBQUNBLElBQUksbUVBQXFCLFVBQVUsaUJBQWlCO0FBQ3BEOztBQUVBLE1BQU0sbUVBQXFCO0FBQzNCLFlBQVkseURBQXlEOztBQUVyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLHNCQUFzQjtBQUMxQjtBQUNBLGVBQWUsNEVBQThCO0FBQzdDOztBQUVBO0FBQ0E7QUFDQSxNQUFNLDBEQUFZO0FBQ2xCLCtDQUErQyxhQUFhLGlCQUFpQixrQkFBa0I7QUFDL0Y7O0FBRUEsTUFBTSxxREFBTztBQUNiO0FBQ0Esc0JBQXNCLFVBQVUsV0FBVyxlQUFlLGdCQUFnQixZQUFZO0FBQ3RGOztBQUVBLCtCQUErQixhQUFhLGFBQWEsS0FBSztBQUM5RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFd0g7QUFDeEgiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vZXZlbnRidWlsZGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRXJyb3JFdmVudCwgaXNET01FcnJvciwgaXNET01FeGNlcHRpb24sIGFkZEV4Y2VwdGlvblR5cGVWYWx1ZSwgaXNFcnJvciwgaXNQbGFpbk9iamVjdCwgaXNFdmVudCwgYWRkRXhjZXB0aW9uTWVjaGFuaXNtLCBpc1BhcmFtZXRlcml6ZWRTdHJpbmcsIGdldENsaWVudCwgbm9ybWFsaXplVG9TaXplLCBleHRyYWN0RXhjZXB0aW9uS2V5c0Zvck1lc3NhZ2UsIHJlc29sdmVkU3luY1Byb21pc2UgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBleGNlcHRpb24gZnJvbSBhIEphdmFTY3JpcHQgRXJyb3JcbiAqL1xuZnVuY3Rpb24gZXhjZXB0aW9uRnJvbUVycm9yKHN0YWNrUGFyc2VyLCBleCkge1xuICAvLyBHZXQgdGhlIGZyYW1lcyBmaXJzdCBzaW5jZSBPcGVyYSBjYW4gbG9zZSB0aGUgc3RhY2sgaWYgd2UgdG91Y2ggYW55dGhpbmcgZWxzZSBmaXJzdFxuICBjb25zdCBmcmFtZXMgPSBwYXJzZVN0YWNrRnJhbWVzKHN0YWNrUGFyc2VyLCBleCk7XG5cbiAgY29uc3QgZXhjZXB0aW9uID0ge1xuICAgIHR5cGU6IGV4dHJhY3RUeXBlKGV4KSxcbiAgICB2YWx1ZTogZXh0cmFjdE1lc3NhZ2UoZXgpLFxuICB9O1xuXG4gIGlmIChmcmFtZXMubGVuZ3RoKSB7XG4gICAgZXhjZXB0aW9uLnN0YWNrdHJhY2UgPSB7IGZyYW1lcyB9O1xuICB9XG5cbiAgaWYgKGV4Y2VwdGlvbi50eXBlID09PSB1bmRlZmluZWQgJiYgZXhjZXB0aW9uLnZhbHVlID09PSAnJykge1xuICAgIGV4Y2VwdGlvbi52YWx1ZSA9ICdVbnJlY292ZXJhYmxlIGVycm9yIGNhdWdodCc7XG4gIH1cblxuICByZXR1cm4gZXhjZXB0aW9uO1xufVxuXG5mdW5jdGlvbiBldmVudEZyb21QbGFpbk9iamVjdChcbiAgc3RhY2tQYXJzZXIsXG4gIGV4Y2VwdGlvbixcbiAgc3ludGhldGljRXhjZXB0aW9uLFxuICBpc1VuaGFuZGxlZFJlamVjdGlvbixcbikge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcbiAgY29uc3Qgbm9ybWFsaXplRGVwdGggPSBjbGllbnQ/LmdldE9wdGlvbnMoKS5ub3JtYWxpemVEZXB0aDtcblxuICAvLyBJZiB3ZSBjYW4sIHdlIGV4dHJhY3QgYW4gZXhjZXB0aW9uIGZyb20gdGhlIG9iamVjdCBwcm9wZXJ0aWVzXG4gIGNvbnN0IGVycm9yRnJvbVByb3AgPSBnZXRFcnJvclByb3BlcnR5RnJvbU9iamVjdChleGNlcHRpb24pO1xuXG4gIGNvbnN0IGV4dHJhID0ge1xuICAgIF9fc2VyaWFsaXplZF9fOiBub3JtYWxpemVUb1NpemUoZXhjZXB0aW9uLCBub3JtYWxpemVEZXB0aCksXG4gIH07XG5cbiAgaWYgKGVycm9yRnJvbVByb3ApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXhjZXB0aW9uOiB7XG4gICAgICAgIHZhbHVlczogW2V4Y2VwdGlvbkZyb21FcnJvcihzdGFja1BhcnNlciwgZXJyb3JGcm9tUHJvcCldLFxuICAgICAgfSxcbiAgICAgIGV4dHJhLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBldmVudCA9IHtcbiAgICBleGNlcHRpb246IHtcbiAgICAgIHZhbHVlczogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogaXNFdmVudChleGNlcHRpb24pID8gZXhjZXB0aW9uLmNvbnN0cnVjdG9yLm5hbWUgOiBpc1VuaGFuZGxlZFJlamVjdGlvbiA/ICdVbmhhbmRsZWRSZWplY3Rpb24nIDogJ0Vycm9yJyxcbiAgICAgICAgICB2YWx1ZTogZ2V0Tm9uRXJyb3JPYmplY3RFeGNlcHRpb25WYWx1ZShleGNlcHRpb24sIHsgaXNVbmhhbmRsZWRSZWplY3Rpb24gfSksXG4gICAgICAgIH0gLFxuICAgICAgXSxcbiAgICB9LFxuICAgIGV4dHJhLFxuICB9IDtcblxuICBpZiAoc3ludGhldGljRXhjZXB0aW9uKSB7XG4gICAgY29uc3QgZnJhbWVzID0gcGFyc2VTdGFja0ZyYW1lcyhzdGFja1BhcnNlciwgc3ludGhldGljRXhjZXB0aW9uKTtcbiAgICBpZiAoZnJhbWVzLmxlbmd0aCkge1xuICAgICAgLy8gZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXSBoYXMgYmVlbiBzZXQgYWJvdmVcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICBldmVudC5leGNlcHRpb24udmFsdWVzWzBdLnN0YWNrdHJhY2UgPSB7IGZyYW1lcyB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBldmVudDtcbn1cblxuZnVuY3Rpb24gZXZlbnRGcm9tRXJyb3Ioc3RhY2tQYXJzZXIsIGV4KSB7XG4gIHJldHVybiB7XG4gICAgZXhjZXB0aW9uOiB7XG4gICAgICB2YWx1ZXM6IFtleGNlcHRpb25Gcm9tRXJyb3Ioc3RhY2tQYXJzZXIsIGV4KV0sXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqIFBhcnNlcyBzdGFjayBmcmFtZXMgZnJvbSBhbiBlcnJvciAqL1xuZnVuY3Rpb24gcGFyc2VTdGFja0ZyYW1lcyhcbiAgc3RhY2tQYXJzZXIsXG4gIGV4LFxuKSB7XG4gIC8vIEFjY2VzcyBhbmQgc3RvcmUgdGhlIHN0YWNrdHJhY2UgcHJvcGVydHkgYmVmb3JlIGRvaW5nIEFOWVRISU5HXG4gIC8vIGVsc2UgdG8gaXQgYmVjYXVzZSBPcGVyYSBpcyBub3QgdmVyeSBnb29kIGF0IHByb3ZpZGluZyBpdFxuICAvLyByZWxpYWJseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLlxuICBjb25zdCBzdGFja3RyYWNlID0gZXguc3RhY2t0cmFjZSB8fCBleC5zdGFjayB8fCAnJztcblxuICBjb25zdCBza2lwTGluZXMgPSBnZXRTa2lwRmlyc3RTdGFja1N0cmluZ0xpbmVzKGV4KTtcbiAgY29uc3QgZnJhbWVzVG9Qb3AgPSBnZXRQb3BGaXJzdFRvcEZyYW1lcyhleCk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gc3RhY2tQYXJzZXIoc3RhY2t0cmFjZSwgc2tpcExpbmVzLCBmcmFtZXNUb1BvcCk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIG5vLWVtcHR5XG4gIH1cblxuICByZXR1cm4gW107XG59XG5cbi8vIEJhc2VkIG9uIG91ciBvd24gbWFwcGluZyBwYXR0ZXJuIC0gaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnkvYmxvYi85ZjA4MzA1ZTA5ODY2YzhiZDZkMGMyNGY1YjBhYWJkZDdkZDZjNTljL3NyYy9zZW50cnkvbGFuZy9qYXZhc2NyaXB0L2Vycm9ybWFwcGluZy5weSNMODMtTDEwOFxuY29uc3QgcmVhY3RNaW5pZmllZFJlZ2V4cCA9IC9NaW5pZmllZCBSZWFjdCBlcnJvciAjXFxkKzsvaTtcblxuLyoqXG4gKiBDZXJ0YWluIGtub3duIFJlYWN0IGVycm9ycyBjb250YWluIGxpbmtzIHRoYXQgd291bGQgYmUgZmFsc2VseVxuICogcGFyc2VkIGFzIGZyYW1lcy4gVGhpcyBmdW5jdGlvbiBjaGVjayBmb3IgdGhlc2UgZXJyb3JzIGFuZFxuICogcmV0dXJucyBudW1iZXIgb2YgdGhlIHN0YWNrIHN0cmluZyBsaW5lcyB0byBza2lwLlxuICovXG5mdW5jdGlvbiBnZXRTa2lwRmlyc3RTdGFja1N0cmluZ0xpbmVzKGV4KSB7XG4gIGlmIChleCAmJiByZWFjdE1pbmlmaWVkUmVnZXhwLnRlc3QoZXgubWVzc2FnZSkpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG4vKipcbiAqIElmIGVycm9yIGhhcyBgZnJhbWVzVG9Qb3BgIHByb3BlcnR5LCBpdCBtZWFucyB0aGF0IHRoZVxuICogY3JlYXRvciB0ZWxscyB1cyB0aGUgZmlyc3QgeCBmcmFtZXMgd2lsbCBiZSB1c2VsZXNzXG4gKiBhbmQgc2hvdWxkIGJlIGRpc2NhcmRlZC4gVHlwaWNhbGx5IGVycm9yIGZyb20gd3JhcHBlciBmdW5jdGlvblxuICogd2hpY2ggZG9uJ3QgcG9pbnQgdG8gdGhlIGFjdHVhbCBsb2NhdGlvbiBpbiB0aGUgZGV2ZWxvcGVyJ3MgY29kZS5cbiAqXG4gKiBFeGFtcGxlOiBodHRwczovL2dpdGh1Yi5jb20vemVydG9zaC9pbnZhcmlhbnQvYmxvYi9tYXN0ZXIvaW52YXJpYW50LmpzI0w0NlxuICovXG5mdW5jdGlvbiBnZXRQb3BGaXJzdFRvcEZyYW1lcyhleCkge1xuICBpZiAodHlwZW9mIGV4LmZyYW1lc1RvUG9wID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBleC5mcmFtZXNUb1BvcDtcbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYkFzc2VtYmx5L0phdmFTY3JpcHRfaW50ZXJmYWNlL0V4Y2VwdGlvblxuLy8gQHRzLWV4cGVjdC1lcnJvciAtIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbiBpcyBhIHZhbGlkIGNsYXNzXG5mdW5jdGlvbiBpc1dlYkFzc2VtYmx5RXhjZXB0aW9uKGV4Y2VwdGlvbikge1xuICAvLyBDaGVjayBmb3Igc3VwcG9ydFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gV2ViQXNzZW1ibHkuRXhjZXB0aW9uIGlzIGEgdmFsaWQgY2xhc3NcbiAgaWYgKHR5cGVvZiBXZWJBc3NlbWJseSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gV2ViQXNzZW1ibHkuRXhjZXB0aW9uIGlzIGEgdmFsaWQgY2xhc3NcbiAgICByZXR1cm4gZXhjZXB0aW9uIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuRXhjZXB0aW9uO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEV4dHJhY3RzIGZyb20gZXJyb3JzIHdoYXQgd2UgdXNlIGFzIHRoZSBleGNlcHRpb24gYHR5cGVgIGluIGVycm9yIGV2ZW50cy5cbiAqXG4gKiBVc3VhbGx5LCB0aGlzIGlzIHRoZSBgbmFtZWAgcHJvcGVydHkgb24gRXJyb3Igb2JqZWN0cyBidXQgV0FTTSBlcnJvcnMgbmVlZCB0byBiZSB0cmVhdGVkIGRpZmZlcmVudGx5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0VHlwZShleCkge1xuICBjb25zdCBuYW1lID0gZXg/Lm5hbWU7XG5cbiAgLy8gVGhlIG5hbWUgZm9yIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbiBFcnJvcnMgbmVlZHMgdG8gYmUgZXh0cmFjdGVkIGRpZmZlcmVudGx5LlxuICAvLyBDb250ZXh0OiBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8xMzc4N1xuICBpZiAoIW5hbWUgJiYgaXNXZWJBc3NlbWJseUV4Y2VwdGlvbihleCkpIHtcbiAgICAvLyBFbXNjcmlwdGVuIHNldHMgYXJyYXlbdHlwZSwgbWVzc2FnZV0gdG8gdGhlIFwibWVzc2FnZVwiIHByb3BlcnR5IG9uIHRoZSBXZWJBc3NlbWJseS5FeGNlcHRpb24gb2JqZWN0XG4gICAgY29uc3QgaGFzVHlwZUluTWVzc2FnZSA9IGV4Lm1lc3NhZ2UgJiYgQXJyYXkuaXNBcnJheShleC5tZXNzYWdlKSAmJiBleC5tZXNzYWdlLmxlbmd0aCA9PSAyO1xuICAgIHJldHVybiBoYXNUeXBlSW5NZXNzYWdlID8gZXgubWVzc2FnZVswXSA6ICdXZWJBc3NlbWJseS5FeGNlcHRpb24nO1xuICB9XG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbi8qKlxuICogVGhlcmUgYXJlIGNhc2VzIHdoZXJlIHN0YWNrdHJhY2UubWVzc2FnZSBpcyBhbiBFdmVudCBvYmplY3RcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzE5NDlcbiAqIEluIHRoaXMgc3BlY2lmaWMgY2FzZSB3ZSB0cnkgdG8gZXh0cmFjdCBzdGFja3RyYWNlLm1lc3NhZ2UuZXJyb3IubWVzc2FnZVxuICovXG5mdW5jdGlvbiBleHRyYWN0TWVzc2FnZShleCkge1xuICBjb25zdCBtZXNzYWdlID0gZXg/Lm1lc3NhZ2U7XG5cbiAgaWYgKGlzV2ViQXNzZW1ibHlFeGNlcHRpb24oZXgpKSB7XG4gICAgLy8gRm9yIE5vZGUgMTgsIEVtc2NyaXB0ZW4gc2V0cyBhcnJheVt0eXBlLCBtZXNzYWdlXSB0byB0aGUgXCJtZXNzYWdlXCIgcHJvcGVydHkgb24gdGhlIFdlYkFzc2VtYmx5LkV4Y2VwdGlvbiBvYmplY3RcbiAgICBpZiAoQXJyYXkuaXNBcnJheShleC5tZXNzYWdlKSAmJiBleC5tZXNzYWdlLmxlbmd0aCA9PSAyKSB7XG4gICAgICByZXR1cm4gZXgubWVzc2FnZVsxXTtcbiAgICB9XG4gICAgcmV0dXJuICd3YXNtIGV4Y2VwdGlvbic7XG4gIH1cblxuICBpZiAoIW1lc3NhZ2UpIHtcbiAgICByZXR1cm4gJ05vIGVycm9yIG1lc3NhZ2UnO1xuICB9XG5cbiAgaWYgKG1lc3NhZ2UuZXJyb3IgJiYgdHlwZW9mIG1lc3NhZ2UuZXJyb3IubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbWVzc2FnZS5lcnJvci5tZXNzYWdlO1xuICB9XG5cbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiB7QGxpbmsgRXZlbnR9IGZyb20gYWxsIGlucHV0cyB0byBgY2FwdHVyZUV4Y2VwdGlvbmAgYW5kIG5vbi1wcmltaXRpdmUgaW5wdXRzIHRvIGBjYXB0dXJlTWVzc2FnZWAuXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGV2ZW50RnJvbUV4Y2VwdGlvbihcbiAgc3RhY2tQYXJzZXIsXG4gIGV4Y2VwdGlvbixcbiAgaGludCxcbiAgYXR0YWNoU3RhY2t0cmFjZSxcbikge1xuICBjb25zdCBzeW50aGV0aWNFeGNlcHRpb24gPSBoaW50Py5zeW50aGV0aWNFeGNlcHRpb24gfHwgdW5kZWZpbmVkO1xuICBjb25zdCBldmVudCA9IGV2ZW50RnJvbVVua25vd25JbnB1dChzdGFja1BhcnNlciwgZXhjZXB0aW9uLCBzeW50aGV0aWNFeGNlcHRpb24sIGF0dGFjaFN0YWNrdHJhY2UpO1xuICBhZGRFeGNlcHRpb25NZWNoYW5pc20oZXZlbnQpOyAvLyBkZWZhdWx0cyB0byB7IHR5cGU6ICdnZW5lcmljJywgaGFuZGxlZDogdHJ1ZSB9XG4gIGV2ZW50LmxldmVsID0gJ2Vycm9yJztcbiAgaWYgKGhpbnQ/LmV2ZW50X2lkKSB7XG4gICAgZXZlbnQuZXZlbnRfaWQgPSBoaW50LmV2ZW50X2lkO1xuICB9XG4gIHJldHVybiByZXNvbHZlZFN5bmNQcm9taXNlKGV2ZW50KTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW5kIEV2ZW50IGZyb20gYSBNZXNzYWdlXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGV2ZW50RnJvbU1lc3NhZ2UoXG4gIHN0YWNrUGFyc2VyLFxuICBtZXNzYWdlLFxuICBsZXZlbCA9ICdpbmZvJyxcbiAgaGludCxcbiAgYXR0YWNoU3RhY2t0cmFjZSxcbikge1xuICBjb25zdCBzeW50aGV0aWNFeGNlcHRpb24gPSBoaW50Py5zeW50aGV0aWNFeGNlcHRpb24gfHwgdW5kZWZpbmVkO1xuICBjb25zdCBldmVudCA9IGV2ZW50RnJvbVN0cmluZyhzdGFja1BhcnNlciwgbWVzc2FnZSwgc3ludGhldGljRXhjZXB0aW9uLCBhdHRhY2hTdGFja3RyYWNlKTtcbiAgZXZlbnQubGV2ZWwgPSBsZXZlbDtcbiAgaWYgKGhpbnQ/LmV2ZW50X2lkKSB7XG4gICAgZXZlbnQuZXZlbnRfaWQgPSBoaW50LmV2ZW50X2lkO1xuICB9XG4gIHJldHVybiByZXNvbHZlZFN5bmNQcm9taXNlKGV2ZW50KTtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGV2ZW50RnJvbVVua25vd25JbnB1dChcbiAgc3RhY2tQYXJzZXIsXG4gIGV4Y2VwdGlvbixcbiAgc3ludGhldGljRXhjZXB0aW9uLFxuICBhdHRhY2hTdGFja3RyYWNlLFxuICBpc1VuaGFuZGxlZFJlamVjdGlvbixcbikge1xuICBsZXQgZXZlbnQ7XG5cbiAgaWYgKGlzRXJyb3JFdmVudChleGNlcHRpb24gKSAmJiAoZXhjZXB0aW9uICkuZXJyb3IpIHtcbiAgICAvLyBJZiBpdCBpcyBhbiBFcnJvckV2ZW50IHdpdGggYGVycm9yYCBwcm9wZXJ0eSwgZXh0cmFjdCBpdCB0byBnZXQgYWN0dWFsIEVycm9yXG4gICAgY29uc3QgZXJyb3JFdmVudCA9IGV4Y2VwdGlvbiA7XG4gICAgcmV0dXJuIGV2ZW50RnJvbUVycm9yKHN0YWNrUGFyc2VyLCBlcnJvckV2ZW50LmVycm9yICk7XG4gIH1cblxuICAvLyBJZiBpdCBpcyBhIGBET01FcnJvcmAgKHdoaWNoIGlzIGEgbGVnYWN5IEFQSSwgYnV0IHN0aWxsIHN1cHBvcnRlZCBpbiBzb21lIGJyb3dzZXJzKSB0aGVuIHdlIGp1c3QgZXh0cmFjdCB0aGUgbmFtZVxuICAvLyBhbmQgbWVzc2FnZSwgYXMgaXQgZG9lc24ndCBwcm92aWRlIGFueXRoaW5nIGVsc2UuIEFjY29yZGluZyB0byB0aGUgc3BlYywgYWxsIGBET01FeGNlcHRpb25zYCBzaG91bGQgYWxzbyBiZVxuICAvLyBgRXJyb3JgcywgYnV0IHRoYXQncyBub3QgdGhlIGNhc2UgaW4gSUUxMSwgc28gaW4gdGhhdCBjYXNlIHdlIHRyZWF0IGl0IHRoZSBzYW1lIGFzIHdlIGRvIGEgYERPTUVycm9yYC5cbiAgLy9cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RPTUVycm9yXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9ET01FeGNlcHRpb25cbiAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1ET01FeGNlcHRpb24tc3BlY2lhbG5lc3NcbiAgaWYgKGlzRE9NRXJyb3IoZXhjZXB0aW9uKSB8fCBpc0RPTUV4Y2VwdGlvbihleGNlcHRpb24gKSkge1xuICAgIGNvbnN0IGRvbUV4Y2VwdGlvbiA9IGV4Y2VwdGlvbiA7XG5cbiAgICBpZiAoJ3N0YWNrJyBpbiAoZXhjZXB0aW9uICkpIHtcbiAgICAgIGV2ZW50ID0gZXZlbnRGcm9tRXJyb3Ioc3RhY2tQYXJzZXIsIGV4Y2VwdGlvbiApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuYW1lID0gZG9tRXhjZXB0aW9uLm5hbWUgfHwgKGlzRE9NRXJyb3IoZG9tRXhjZXB0aW9uKSA/ICdET01FcnJvcicgOiAnRE9NRXhjZXB0aW9uJyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZG9tRXhjZXB0aW9uLm1lc3NhZ2UgPyBgJHtuYW1lfTogJHtkb21FeGNlcHRpb24ubWVzc2FnZX1gIDogbmFtZTtcbiAgICAgIGV2ZW50ID0gZXZlbnRGcm9tU3RyaW5nKHN0YWNrUGFyc2VyLCBtZXNzYWdlLCBzeW50aGV0aWNFeGNlcHRpb24sIGF0dGFjaFN0YWNrdHJhY2UpO1xuICAgICAgYWRkRXhjZXB0aW9uVHlwZVZhbHVlKGV2ZW50LCBtZXNzYWdlKTtcbiAgICB9XG4gICAgaWYgKCdjb2RlJyBpbiBkb21FeGNlcHRpb24pIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgZXZlbnQudGFncyA9IHsgLi4uZXZlbnQudGFncywgJ0RPTUV4Y2VwdGlvbi5jb2RlJzogYCR7ZG9tRXhjZXB0aW9uLmNvZGV9YCB9O1xuICAgIH1cblxuICAgIHJldHVybiBldmVudDtcbiAgfVxuICBpZiAoaXNFcnJvcihleGNlcHRpb24pKSB7XG4gICAgLy8gd2UgaGF2ZSBhIHJlYWwgRXJyb3Igb2JqZWN0LCBkbyBub3RoaW5nXG4gICAgcmV0dXJuIGV2ZW50RnJvbUVycm9yKHN0YWNrUGFyc2VyLCBleGNlcHRpb24pO1xuICB9XG4gIGlmIChpc1BsYWluT2JqZWN0KGV4Y2VwdGlvbikgfHwgaXNFdmVudChleGNlcHRpb24pKSB7XG4gICAgLy8gSWYgaXQncyBhIHBsYWluIG9iamVjdCBvciBhbiBpbnN0YW5jZSBvZiBgRXZlbnRgICh0aGUgYnVpbHQtaW4gSlMga2luZCwgbm90IHRoaXMgU0RLJ3MgYEV2ZW50YCB0eXBlKSwgc2VyaWFsaXplXG4gICAgLy8gaXQgbWFudWFsbHkuIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBncm91cCBldmVudHMgYmFzZWQgb24gdG9wLWxldmVsIGtleXMgd2hpY2ggaXMgbXVjaCBiZXR0ZXIgdGhhbiBjcmVhdGluZyBhIG5ld1xuICAgIC8vIGdyb3VwIG9uIGFueSBrZXkvdmFsdWUgY2hhbmdlLlxuICAgIGNvbnN0IG9iamVjdEV4Y2VwdGlvbiA9IGV4Y2VwdGlvbiA7XG4gICAgZXZlbnQgPSBldmVudEZyb21QbGFpbk9iamVjdChzdGFja1BhcnNlciwgb2JqZWN0RXhjZXB0aW9uLCBzeW50aGV0aWNFeGNlcHRpb24sIGlzVW5oYW5kbGVkUmVqZWN0aW9uKTtcbiAgICBhZGRFeGNlcHRpb25NZWNoYW5pc20oZXZlbnQsIHtcbiAgICAgIHN5bnRoZXRpYzogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cblxuICAvLyBJZiBub25lIG9mIHByZXZpb3VzIGNoZWNrcyB3ZXJlIHZhbGlkLCB0aGVuIGl0IG1lYW5zIHRoYXQgaXQncyBub3Q6XG4gIC8vIC0gYW4gaW5zdGFuY2Ugb2YgRE9NRXJyb3JcbiAgLy8gLSBhbiBpbnN0YW5jZSBvZiBET01FeGNlcHRpb25cbiAgLy8gLSBhbiBpbnN0YW5jZSBvZiBFdmVudFxuICAvLyAtIGFuIGluc3RhbmNlIG9mIEVycm9yXG4gIC8vIC0gYSB2YWxpZCBFcnJvckV2ZW50IChvbmUgd2l0aCBhbiBlcnJvciBwcm9wZXJ0eSlcbiAgLy8gLSBhIHBsYWluIE9iamVjdFxuICAvL1xuICAvLyBTbyBiYWlsIG91dCBhbmQgY2FwdHVyZSBpdCBhcyBhIHNpbXBsZSBtZXNzYWdlOlxuICBldmVudCA9IGV2ZW50RnJvbVN0cmluZyhzdGFja1BhcnNlciwgZXhjZXB0aW9uICwgc3ludGhldGljRXhjZXB0aW9uLCBhdHRhY2hTdGFja3RyYWNlKTtcbiAgYWRkRXhjZXB0aW9uVHlwZVZhbHVlKGV2ZW50LCBgJHtleGNlcHRpb259YCwgdW5kZWZpbmVkKTtcbiAgYWRkRXhjZXB0aW9uTWVjaGFuaXNtKGV2ZW50LCB7XG4gICAgc3ludGhldGljOiB0cnVlLFxuICB9KTtcblxuICByZXR1cm4gZXZlbnQ7XG59XG5cbmZ1bmN0aW9uIGV2ZW50RnJvbVN0cmluZyhcbiAgc3RhY2tQYXJzZXIsXG4gIG1lc3NhZ2UsXG4gIHN5bnRoZXRpY0V4Y2VwdGlvbixcbiAgYXR0YWNoU3RhY2t0cmFjZSxcbikge1xuICBjb25zdCBldmVudCA9IHt9O1xuXG4gIGlmIChhdHRhY2hTdGFja3RyYWNlICYmIHN5bnRoZXRpY0V4Y2VwdGlvbikge1xuICAgIGNvbnN0IGZyYW1lcyA9IHBhcnNlU3RhY2tGcmFtZXMoc3RhY2tQYXJzZXIsIHN5bnRoZXRpY0V4Y2VwdGlvbik7XG4gICAgaWYgKGZyYW1lcy5sZW5ndGgpIHtcbiAgICAgIGV2ZW50LmV4Y2VwdGlvbiA9IHtcbiAgICAgICAgdmFsdWVzOiBbeyB2YWx1ZTogbWVzc2FnZSwgc3RhY2t0cmFjZTogeyBmcmFtZXMgfSB9XSxcbiAgICAgIH07XG4gICAgfVxuICAgIGFkZEV4Y2VwdGlvbk1lY2hhbmlzbShldmVudCwgeyBzeW50aGV0aWM6IHRydWUgfSk7XG4gIH1cblxuICBpZiAoaXNQYXJhbWV0ZXJpemVkU3RyaW5nKG1lc3NhZ2UpKSB7XG4gICAgY29uc3QgeyBfX3NlbnRyeV90ZW1wbGF0ZV9zdHJpbmdfXywgX19zZW50cnlfdGVtcGxhdGVfdmFsdWVzX18gfSA9IG1lc3NhZ2U7XG5cbiAgICBldmVudC5sb2dlbnRyeSA9IHtcbiAgICAgIG1lc3NhZ2U6IF9fc2VudHJ5X3RlbXBsYXRlX3N0cmluZ19fLFxuICAgICAgcGFyYW1zOiBfX3NlbnRyeV90ZW1wbGF0ZV92YWx1ZXNfXyxcbiAgICB9O1xuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG4gIGV2ZW50Lm1lc3NhZ2UgPSBtZXNzYWdlO1xuICByZXR1cm4gZXZlbnQ7XG59XG5cbmZ1bmN0aW9uIGdldE5vbkVycm9yT2JqZWN0RXhjZXB0aW9uVmFsdWUoXG4gIGV4Y2VwdGlvbixcbiAgeyBpc1VuaGFuZGxlZFJlamVjdGlvbiB9LFxuKSB7XG4gIGNvbnN0IGtleXMgPSBleHRyYWN0RXhjZXB0aW9uS2V5c0Zvck1lc3NhZ2UoZXhjZXB0aW9uKTtcbiAgY29uc3QgY2FwdHVyZVR5cGUgPSBpc1VuaGFuZGxlZFJlamVjdGlvbiA/ICdwcm9taXNlIHJlamVjdGlvbicgOiAnZXhjZXB0aW9uJztcblxuICAvLyBTb21lIEVycm9yRXZlbnQgaW5zdGFuY2VzIGRvIG5vdCBoYXZlIGFuIGBlcnJvcmAgcHJvcGVydHksIHdoaWNoIGlzIHdoeSB0aGV5IGFyZSBub3QgaGFuZGxlZCBiZWZvcmVcbiAgLy8gV2Ugc3RpbGwgd2FudCB0byB0cnkgdG8gZ2V0IGEgZGVjZW50IG1lc3NhZ2UgZm9yIHRoZXNlIGNhc2VzXG4gIGlmIChpc0Vycm9yRXZlbnQoZXhjZXB0aW9uKSkge1xuICAgIHJldHVybiBgRXZlbnQgXFxgRXJyb3JFdmVudFxcYCBjYXB0dXJlZCBhcyAke2NhcHR1cmVUeXBlfSB3aXRoIG1lc3NhZ2UgXFxgJHtleGNlcHRpb24ubWVzc2FnZX1cXGBgO1xuICB9XG5cbiAgaWYgKGlzRXZlbnQoZXhjZXB0aW9uKSkge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IGdldE9iamVjdENsYXNzTmFtZShleGNlcHRpb24pO1xuICAgIHJldHVybiBgRXZlbnQgXFxgJHtjbGFzc05hbWV9XFxgICh0eXBlPSR7ZXhjZXB0aW9uLnR5cGV9KSBjYXB0dXJlZCBhcyAke2NhcHR1cmVUeXBlfWA7XG4gIH1cblxuICByZXR1cm4gYE9iamVjdCBjYXB0dXJlZCBhcyAke2NhcHR1cmVUeXBlfSB3aXRoIGtleXM6ICR7a2V5c31gO1xufVxuXG5mdW5jdGlvbiBnZXRPYmplY3RDbGFzc05hbWUob2JqKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG4gICAgcmV0dXJuIHByb3RvdHlwZSA/IHByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIHtcbiAgICAvLyBpZ25vcmUgZXJyb3JzIGhlcmVcbiAgfVxufVxuXG4vKiogSWYgYSBwbGFpbiBvYmplY3QgaGFzIGEgcHJvcGVydHkgdGhhdCBpcyBhbiBgRXJyb3JgLCByZXR1cm4gdGhpcyBlcnJvci4gKi9cbmZ1bmN0aW9uIGdldEVycm9yUHJvcGVydHlGcm9tT2JqZWN0KG9iaikge1xuICBmb3IgKGNvbnN0IHByb3AgaW4gb2JqKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9ialtwcm9wXTtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgeyBldmVudEZyb21FeGNlcHRpb24sIGV2ZW50RnJvbU1lc3NhZ2UsIGV2ZW50RnJvbVVua25vd25JbnB1dCwgZXhjZXB0aW9uRnJvbUVycm9yLCBleHRyYWN0TWVzc2FnZSwgZXh0cmFjdFR5cGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV2ZW50YnVpbGRlci5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/eventbuilder.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/feedbackAsync.js":
/*!***************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/feedbackAsync.js ***!
  \***************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   feedbackAsyncIntegration: () => (/* binding */ feedbackAsyncIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_internal_feedback__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry-internal/feedback */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+feedback@9.46.0/node_modules/@sentry-internal/feedback/build/npm/esm/index.js\");\n/* harmony import */ var _utils_lazyLoadIntegration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/lazyLoadIntegration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/utils/lazyLoadIntegration.js\");\n\n\n\n/**\n * An integration to add user feedback to your application,\n * while loading most of the code lazily only when it's needed.\n */\nconst feedbackAsyncIntegration = (0,_sentry_internal_feedback__WEBPACK_IMPORTED_MODULE_0__.buildFeedbackIntegration)({\n  lazyLoadIntegration: _utils_lazyLoadIntegration_js__WEBPACK_IMPORTED_MODULE_1__.lazyLoadIntegration,\n});\n\n\n//# sourceMappingURL=feedbackAsync.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9mZWVkYmFja0FzeW5jLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFxRTtBQUNBOztBQUVyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxtRkFBd0I7QUFDekQscUJBQXFCO0FBQ3JCLENBQUM7O0FBRW1DO0FBQ3BDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrYnJvd3NlckA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9idWlsZC9ucG0vZXNtL2ZlZWRiYWNrQXN5bmMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYnVpbGRGZWVkYmFja0ludGVncmF0aW9uIH0gZnJvbSAnQHNlbnRyeS1pbnRlcm5hbC9mZWVkYmFjayc7XG5pbXBvcnQgeyBsYXp5TG9hZEludGVncmF0aW9uIH0gZnJvbSAnLi91dGlscy9sYXp5TG9hZEludGVncmF0aW9uLmpzJztcblxuLyoqXG4gKiBBbiBpbnRlZ3JhdGlvbiB0byBhZGQgdXNlciBmZWVkYmFjayB0byB5b3VyIGFwcGxpY2F0aW9uLFxuICogd2hpbGUgbG9hZGluZyBtb3N0IG9mIHRoZSBjb2RlIGxhemlseSBvbmx5IHdoZW4gaXQncyBuZWVkZWQuXG4gKi9cbmNvbnN0IGZlZWRiYWNrQXN5bmNJbnRlZ3JhdGlvbiA9IGJ1aWxkRmVlZGJhY2tJbnRlZ3JhdGlvbih7XG4gIGxhenlMb2FkSW50ZWdyYXRpb24sXG59KTtcblxuZXhwb3J0IHsgZmVlZGJhY2tBc3luY0ludGVncmF0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mZWVkYmFja0FzeW5jLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/feedbackAsync.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/feedbackSync.js":
/*!**************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/feedbackSync.js ***!
  \**************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   feedbackSyncIntegration: () => (/* binding */ feedbackSyncIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_internal_feedback__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry-internal/feedback */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+feedback@9.46.0/node_modules/@sentry-internal/feedback/build/npm/esm/index.js\");\n\n\n/** Add a widget to capture user feedback to your application. */\nconst feedbackSyncIntegration = (0,_sentry_internal_feedback__WEBPACK_IMPORTED_MODULE_0__.buildFeedbackIntegration)({\n  getModalIntegration: () => _sentry_internal_feedback__WEBPACK_IMPORTED_MODULE_0__.feedbackModalIntegration,\n  getScreenshotIntegration: () => _sentry_internal_feedback__WEBPACK_IMPORTED_MODULE_0__.feedbackScreenshotIntegration,\n});\n\n\n//# sourceMappingURL=feedbackSync.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9mZWVkYmFja1N5bmMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBOEg7O0FBRTlIO0FBQ0EsZ0NBQWdDLG1GQUF3QjtBQUN4RCw2QkFBNkIsK0VBQXdCO0FBQ3JELGtDQUFrQyxvRkFBNkI7QUFDL0QsQ0FBQzs7QUFFa0M7QUFDbkMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vZmVlZGJhY2tTeW5jLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJ1aWxkRmVlZGJhY2tJbnRlZ3JhdGlvbiwgZmVlZGJhY2tTY3JlZW5zaG90SW50ZWdyYXRpb24sIGZlZWRiYWNrTW9kYWxJbnRlZ3JhdGlvbiB9IGZyb20gJ0BzZW50cnktaW50ZXJuYWwvZmVlZGJhY2snO1xuXG4vKiogQWRkIGEgd2lkZ2V0IHRvIGNhcHR1cmUgdXNlciBmZWVkYmFjayB0byB5b3VyIGFwcGxpY2F0aW9uLiAqL1xuY29uc3QgZmVlZGJhY2tTeW5jSW50ZWdyYXRpb24gPSBidWlsZEZlZWRiYWNrSW50ZWdyYXRpb24oe1xuICBnZXRNb2RhbEludGVncmF0aW9uOiAoKSA9PiBmZWVkYmFja01vZGFsSW50ZWdyYXRpb24sXG4gIGdldFNjcmVlbnNob3RJbnRlZ3JhdGlvbjogKCkgPT4gZmVlZGJhY2tTY3JlZW5zaG90SW50ZWdyYXRpb24sXG59KTtcblxuZXhwb3J0IHsgZmVlZGJhY2tTeW5jSW50ZWdyYXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZlZWRiYWNrU3luYy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/feedbackSync.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js":
/*!*********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js ***!
  \*********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   WINDOW: () => (/* binding */ WINDOW),\n/* harmony export */   getHttpRequestData: () => (/* binding */ getHttpRequestData),\n/* harmony export */   ignoreNextOnError: () => (/* binding */ ignoreNextOnError),\n/* harmony export */   shouldIgnoreOnError: () => (/* binding */ shouldIgnoreOnError),\n/* harmony export */   wrap: () => (/* binding */ wrap)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\nconst WINDOW = _sentry_core__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ ;\n\nlet ignoreOnError = 0;\n\n/**\n * @hidden\n */\nfunction shouldIgnoreOnError() {\n  return ignoreOnError > 0;\n}\n\n/**\n * @hidden\n */\nfunction ignoreNextOnError() {\n  // onerror should trigger before setTimeout\n  ignoreOnError++;\n  setTimeout(() => {\n    ignoreOnError--;\n  });\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\n\n/**\n * Instruments the given function and sends an event to Sentry every time the\n * function throws an exception.\n *\n * @param fn A function to wrap. It is generally safe to pass an unbound function, because the returned wrapper always\n * has a correct `this` context.\n * @returns The wrapped function.\n * @hidden\n */\nfunction wrap(\n  fn,\n  options\n\n = {},\n) {\n  // for future readers what this does is wrap a function and then create\n  // a bi-directional wrapping between them.\n  //\n  // example: wrapped = wrap(original);\n  //  original.__sentry_wrapped__ -> wrapped\n  //  wrapped.__sentry_original__ -> original\n\n  function isFunction(fn) {\n    return typeof fn === 'function';\n  }\n\n  if (!isFunction(fn)) {\n    return fn;\n  }\n\n  try {\n    // if we're dealing with a function that was previously wrapped, return\n    // the original wrapper.\n    const wrapper = (fn ).__sentry_wrapped__;\n    if (wrapper) {\n      if (typeof wrapper === 'function') {\n        return wrapper;\n      } else {\n        // If we find that the `__sentry_wrapped__` function is not a function at the time of accessing it, it means\n        // that something messed with it. In that case we want to return the originally passed function.\n        return fn;\n      }\n    }\n\n    // We don't wanna wrap it twice\n    if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getOriginalFunction)(fn)) {\n      return fn;\n    }\n  } catch {\n    // Just accessing custom props in some Selenium environments\n    // can cause a \"Permission denied\" exception (see raven-js#495).\n    // Bail on wrapping and return the function as-is (defers to window.onerror).\n    return fn;\n  }\n\n  // Wrap the function itself\n  // It is important that `sentryWrapped` is not an arrow function to preserve the context of `this`\n  const sentryWrapped = function ( ...args) {\n    try {\n      // Also wrap arguments that are themselves functions\n      const wrappedArguments = args.map(arg => wrap(arg, options));\n\n      // Attempt to invoke user-land function\n      // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n      //       means the sentry.javascript SDK caught an error invoking your application code. This\n      //       is expected behavior and NOT indicative of a bug with sentry.javascript.\n      return fn.apply(this, wrappedArguments);\n    } catch (ex) {\n      ignoreNextOnError();\n\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.withScope)(scope => {\n        scope.addEventProcessor(event => {\n          if (options.mechanism) {\n            (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addExceptionTypeValue)(event, undefined, undefined);\n            (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addExceptionMechanism)(event, options.mechanism);\n          }\n\n          event.extra = {\n            ...event.extra,\n            arguments: args,\n          };\n\n          return event;\n        });\n\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureException)(ex);\n      });\n\n      throw ex;\n    }\n  } ;\n\n  // Wrap the wrapped function in a proxy, to ensure any other properties of the original function remain available\n  try {\n    for (const property in fn) {\n      if (Object.prototype.hasOwnProperty.call(fn, property)) {\n        sentryWrapped[property ] = fn[property ];\n      }\n    }\n  } catch {\n    // Accessing some objects may throw\n    // ref: https://github.com/getsentry/sentry-javascript/issues/1168\n  }\n\n  // Signal that this function has been wrapped/filled already\n  // for both debugging and to prevent it to being wrapped/filled twice\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.markFunctionWrapped)(sentryWrapped, fn);\n\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addNonEnumerableProperty)(fn, '__sentry_wrapped__', sentryWrapped);\n\n  // Restore original function name (not all browsers allow that)\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const descriptor = Object.getOwnPropertyDescriptor(sentryWrapped, 'name');\n    if (descriptor.configurable) {\n      Object.defineProperty(sentryWrapped, 'name', {\n        get() {\n          return fn.name;\n        },\n      });\n    }\n  } catch {\n    // This may throw if e.g. the descriptor does not exist, or a browser does not allow redefining `name`.\n    // to save some bytes we simply try-catch this\n  }\n\n  return sentryWrapped;\n}\n\n/**\n * Get HTTP request data from the current page.\n */\nfunction getHttpRequestData() {\n  // grab as much info as exists and add it to the event\n  const url = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getLocationHref)();\n  const { referrer } = WINDOW.document || {};\n  const { userAgent } = WINDOW.navigator || {};\n\n  const headers = {\n    ...(referrer && { Referer: referrer }),\n    ...(userAgent && { 'User-Agent': userAgent }),\n  };\n  const request = {\n    url,\n    headers,\n  };\n\n  return request;\n}\n\n\n//# sourceMappingURL=helpers.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9oZWxwZXJzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUEwTTs7QUFFMU0sZUFBZSxvREFBVTs7QUFFekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLGlFQUFtQjtBQUMzQjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUEsTUFBTSx1REFBUztBQUNmO0FBQ0E7QUFDQSxZQUFZLG1FQUFxQjtBQUNqQyxZQUFZLG1FQUFxQjtBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQsUUFBUSw4REFBZ0I7QUFDeEIsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFLGlFQUFtQjs7QUFFckIsRUFBRSxzRUFBd0I7O0FBRTFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLDZEQUFlO0FBQzdCLFVBQVUsV0FBVztBQUNyQixVQUFVLFlBQVk7O0FBRXRCO0FBQ0Esc0JBQXNCLG1CQUFtQjtBQUN6Qyx1QkFBdUIseUJBQXlCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFb0Y7QUFDcEYiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vaGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHTE9CQUxfT0JKLCBnZXRPcmlnaW5hbEZ1bmN0aW9uLCBtYXJrRnVuY3Rpb25XcmFwcGVkLCBhZGROb25FbnVtZXJhYmxlUHJvcGVydHksIHdpdGhTY29wZSwgYWRkRXhjZXB0aW9uVHlwZVZhbHVlLCBhZGRFeGNlcHRpb25NZWNoYW5pc20sIGNhcHR1cmVFeGNlcHRpb24sIGdldExvY2F0aW9uSHJlZiB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5cbmNvbnN0IFdJTkRPVyA9IEdMT0JBTF9PQkogO1xuXG5sZXQgaWdub3JlT25FcnJvciA9IDA7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBzaG91bGRJZ25vcmVPbkVycm9yKCkge1xuICByZXR1cm4gaWdub3JlT25FcnJvciA+IDA7XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBpZ25vcmVOZXh0T25FcnJvcigpIHtcbiAgLy8gb25lcnJvciBzaG91bGQgdHJpZ2dlciBiZWZvcmUgc2V0VGltZW91dFxuICBpZ25vcmVPbkVycm9yKys7XG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGlnbm9yZU9uRXJyb3ItLTtcbiAgfSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG5cbi8qKlxuICogSW5zdHJ1bWVudHMgdGhlIGdpdmVuIGZ1bmN0aW9uIGFuZCBzZW5kcyBhbiBldmVudCB0byBTZW50cnkgZXZlcnkgdGltZSB0aGVcbiAqIGZ1bmN0aW9uIHRocm93cyBhbiBleGNlcHRpb24uXG4gKlxuICogQHBhcmFtIGZuIEEgZnVuY3Rpb24gdG8gd3JhcC4gSXQgaXMgZ2VuZXJhbGx5IHNhZmUgdG8gcGFzcyBhbiB1bmJvdW5kIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSByZXR1cm5lZCB3cmFwcGVyIGFsd2F5c1xuICogaGFzIGEgY29ycmVjdCBgdGhpc2AgY29udGV4dC5cbiAqIEByZXR1cm5zIFRoZSB3cmFwcGVkIGZ1bmN0aW9uLlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiB3cmFwKFxuICBmbixcbiAgb3B0aW9uc1xuXG4gPSB7fSxcbikge1xuICAvLyBmb3IgZnV0dXJlIHJlYWRlcnMgd2hhdCB0aGlzIGRvZXMgaXMgd3JhcCBhIGZ1bmN0aW9uIGFuZCB0aGVuIGNyZWF0ZVxuICAvLyBhIGJpLWRpcmVjdGlvbmFsIHdyYXBwaW5nIGJldHdlZW4gdGhlbS5cbiAgLy9cbiAgLy8gZXhhbXBsZTogd3JhcHBlZCA9IHdyYXAob3JpZ2luYWwpO1xuICAvLyAgb3JpZ2luYWwuX19zZW50cnlfd3JhcHBlZF9fIC0+IHdyYXBwZWRcbiAgLy8gIHdyYXBwZWQuX19zZW50cnlfb3JpZ2luYWxfXyAtPiBvcmlnaW5hbFxuXG4gIGZ1bmN0aW9uIGlzRnVuY3Rpb24oZm4pIHtcbiAgICByZXR1cm4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgaWYgKCFpc0Z1bmN0aW9uKGZuKSkge1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgZnVuY3Rpb24gdGhhdCB3YXMgcHJldmlvdXNseSB3cmFwcGVkLCByZXR1cm5cbiAgICAvLyB0aGUgb3JpZ2luYWwgd3JhcHBlci5cbiAgICBjb25zdCB3cmFwcGVyID0gKGZuICkuX19zZW50cnlfd3JhcHBlZF9fO1xuICAgIGlmICh3cmFwcGVyKSB7XG4gICAgICBpZiAodHlwZW9mIHdyYXBwZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiB3ZSBmaW5kIHRoYXQgdGhlIGBfX3NlbnRyeV93cmFwcGVkX19gIGZ1bmN0aW9uIGlzIG5vdCBhIGZ1bmN0aW9uIGF0IHRoZSB0aW1lIG9mIGFjY2Vzc2luZyBpdCwgaXQgbWVhbnNcbiAgICAgICAgLy8gdGhhdCBzb21ldGhpbmcgbWVzc2VkIHdpdGggaXQuIEluIHRoYXQgY2FzZSB3ZSB3YW50IHRvIHJldHVybiB0aGUgb3JpZ2luYWxseSBwYXNzZWQgZnVuY3Rpb24uXG4gICAgICAgIHJldHVybiBmbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXZSBkb24ndCB3YW5uYSB3cmFwIGl0IHR3aWNlXG4gICAgaWYgKGdldE9yaWdpbmFsRnVuY3Rpb24oZm4pKSB7XG4gICAgICByZXR1cm4gZm47XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBKdXN0IGFjY2Vzc2luZyBjdXN0b20gcHJvcHMgaW4gc29tZSBTZWxlbml1bSBlbnZpcm9ubWVudHNcbiAgICAvLyBjYW4gY2F1c2UgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXhjZXB0aW9uIChzZWUgcmF2ZW4tanMjNDk1KS5cbiAgICAvLyBCYWlsIG9uIHdyYXBwaW5nIGFuZCByZXR1cm4gdGhlIGZ1bmN0aW9uIGFzLWlzIChkZWZlcnMgdG8gd2luZG93Lm9uZXJyb3IpLlxuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIC8vIFdyYXAgdGhlIGZ1bmN0aW9uIGl0c2VsZlxuICAvLyBJdCBpcyBpbXBvcnRhbnQgdGhhdCBgc2VudHJ5V3JhcHBlZGAgaXMgbm90IGFuIGFycm93IGZ1bmN0aW9uIHRvIHByZXNlcnZlIHRoZSBjb250ZXh0IG9mIGB0aGlzYFxuICBjb25zdCBzZW50cnlXcmFwcGVkID0gZnVuY3Rpb24gKCAuLi5hcmdzKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEFsc28gd3JhcCBhcmd1bWVudHMgdGhhdCBhcmUgdGhlbXNlbHZlcyBmdW5jdGlvbnNcbiAgICAgIGNvbnN0IHdyYXBwZWRBcmd1bWVudHMgPSBhcmdzLm1hcChhcmcgPT4gd3JhcChhcmcsIG9wdGlvbnMpKTtcblxuICAgICAgLy8gQXR0ZW1wdCB0byBpbnZva2UgdXNlci1sYW5kIGZ1bmN0aW9uXG4gICAgICAvLyBOT1RFOiBJZiB5b3UgYXJlIGEgU2VudHJ5IHVzZXIsIGFuZCB5b3UgYXJlIHNlZWluZyB0aGlzIHN0YWNrIGZyYW1lLCBpdFxuICAgICAgLy8gICAgICAgbWVhbnMgdGhlIHNlbnRyeS5qYXZhc2NyaXB0IFNESyBjYXVnaHQgYW4gZXJyb3IgaW52b2tpbmcgeW91ciBhcHBsaWNhdGlvbiBjb2RlLiBUaGlzXG4gICAgICAvLyAgICAgICBpcyBleHBlY3RlZCBiZWhhdmlvciBhbmQgTk9UIGluZGljYXRpdmUgb2YgYSBidWcgd2l0aCBzZW50cnkuamF2YXNjcmlwdC5cbiAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCB3cmFwcGVkQXJndW1lbnRzKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWdub3JlTmV4dE9uRXJyb3IoKTtcblxuICAgICAgd2l0aFNjb3BlKHNjb3BlID0+IHtcbiAgICAgICAgc2NvcGUuYWRkRXZlbnRQcm9jZXNzb3IoZXZlbnQgPT4ge1xuICAgICAgICAgIGlmIChvcHRpb25zLm1lY2hhbmlzbSkge1xuICAgICAgICAgICAgYWRkRXhjZXB0aW9uVHlwZVZhbHVlKGV2ZW50LCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBhZGRFeGNlcHRpb25NZWNoYW5pc20oZXZlbnQsIG9wdGlvbnMubWVjaGFuaXNtKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBldmVudC5leHRyYSA9IHtcbiAgICAgICAgICAgIC4uLmV2ZW50LmV4dHJhLFxuICAgICAgICAgICAgYXJndW1lbnRzOiBhcmdzLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNhcHR1cmVFeGNlcHRpb24oZXgpO1xuICAgICAgfSk7XG5cbiAgICAgIHRocm93IGV4O1xuICAgIH1cbiAgfSA7XG5cbiAgLy8gV3JhcCB0aGUgd3JhcHBlZCBmdW5jdGlvbiBpbiBhIHByb3h5LCB0byBlbnN1cmUgYW55IG90aGVyIHByb3BlcnRpZXMgb2YgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHJlbWFpbiBhdmFpbGFibGVcbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGZuKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZuLCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgc2VudHJ5V3JhcHBlZFtwcm9wZXJ0eSBdID0gZm5bcHJvcGVydHkgXTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIEFjY2Vzc2luZyBzb21lIG9iamVjdHMgbWF5IHRocm93XG4gICAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8xMTY4XG4gIH1cblxuICAvLyBTaWduYWwgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIHdyYXBwZWQvZmlsbGVkIGFscmVhZHlcbiAgLy8gZm9yIGJvdGggZGVidWdnaW5nIGFuZCB0byBwcmV2ZW50IGl0IHRvIGJlaW5nIHdyYXBwZWQvZmlsbGVkIHR3aWNlXG4gIG1hcmtGdW5jdGlvbldyYXBwZWQoc2VudHJ5V3JhcHBlZCwgZm4pO1xuXG4gIGFkZE5vbkVudW1lcmFibGVQcm9wZXJ0eShmbiwgJ19fc2VudHJ5X3dyYXBwZWRfXycsIHNlbnRyeVdyYXBwZWQpO1xuXG4gIC8vIFJlc3RvcmUgb3JpZ2luYWwgZnVuY3Rpb24gbmFtZSAobm90IGFsbCBicm93c2VycyBhbGxvdyB0aGF0KVxuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc2VudHJ5V3JhcHBlZCwgJ25hbWUnKTtcbiAgICBpZiAoZGVzY3JpcHRvci5jb25maWd1cmFibGUpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZW50cnlXcmFwcGVkLCAnbmFtZScsIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIHJldHVybiBmbi5uYW1lO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBUaGlzIG1heSB0aHJvdyBpZiBlLmcuIHRoZSBkZXNjcmlwdG9yIGRvZXMgbm90IGV4aXN0LCBvciBhIGJyb3dzZXIgZG9lcyBub3QgYWxsb3cgcmVkZWZpbmluZyBgbmFtZWAuXG4gICAgLy8gdG8gc2F2ZSBzb21lIGJ5dGVzIHdlIHNpbXBseSB0cnktY2F0Y2ggdGhpc1xuICB9XG5cbiAgcmV0dXJuIHNlbnRyeVdyYXBwZWQ7XG59XG5cbi8qKlxuICogR2V0IEhUVFAgcmVxdWVzdCBkYXRhIGZyb20gdGhlIGN1cnJlbnQgcGFnZS5cbiAqL1xuZnVuY3Rpb24gZ2V0SHR0cFJlcXVlc3REYXRhKCkge1xuICAvLyBncmFiIGFzIG11Y2ggaW5mbyBhcyBleGlzdHMgYW5kIGFkZCBpdCB0byB0aGUgZXZlbnRcbiAgY29uc3QgdXJsID0gZ2V0TG9jYXRpb25IcmVmKCk7XG4gIGNvbnN0IHsgcmVmZXJyZXIgfSA9IFdJTkRPVy5kb2N1bWVudCB8fCB7fTtcbiAgY29uc3QgeyB1c2VyQWdlbnQgfSA9IFdJTkRPVy5uYXZpZ2F0b3IgfHwge307XG5cbiAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAuLi4ocmVmZXJyZXIgJiYgeyBSZWZlcmVyOiByZWZlcnJlciB9KSxcbiAgICAuLi4odXNlckFnZW50ICYmIHsgJ1VzZXItQWdlbnQnOiB1c2VyQWdlbnQgfSksXG4gIH07XG4gIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgdXJsLFxuICAgIGhlYWRlcnMsXG4gIH07XG5cbiAgcmV0dXJuIHJlcXVlc3Q7XG59XG5cbmV4cG9ydCB7IFdJTkRPVywgZ2V0SHR0cFJlcXVlc3REYXRhLCBpZ25vcmVOZXh0T25FcnJvciwgc2hvdWxkSWdub3JlT25FcnJvciwgd3JhcCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGVscGVycy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/index.js":
/*!*******************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/index.js ***!
  \*******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   BrowserClient: () => (/* reexport safe */ _client_js__WEBPACK_IMPORTED_MODULE_5__.BrowserClient),\n/* harmony export */   OpenFeatureIntegrationHook: () => (/* reexport safe */ _integrations_featureFlags_openfeature_integration_js__WEBPACK_IMPORTED_MODULE_32__.OpenFeatureIntegrationHook),\n/* harmony export */   SDK_VERSION: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.SDK_VERSION),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_OP: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.SEMANTIC_ATTRIBUTE_SENTRY_OP),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_SOURCE: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE),\n/* harmony export */   Scope: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.Scope),\n/* harmony export */   WINDOW: () => (/* reexport safe */ _helpers_js__WEBPACK_IMPORTED_MODULE_4__.WINDOW),\n/* harmony export */   addBreadcrumb: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.addBreadcrumb),\n/* harmony export */   addEventProcessor: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.addEventProcessor),\n/* harmony export */   addIntegration: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.addIntegration),\n/* harmony export */   breadcrumbsIntegration: () => (/* reexport safe */ _integrations_breadcrumbs_js__WEBPACK_IMPORTED_MODULE_12__.breadcrumbsIntegration),\n/* harmony export */   browserApiErrorsIntegration: () => (/* reexport safe */ _integrations_browserapierrors_js__WEBPACK_IMPORTED_MODULE_16__.browserApiErrorsIntegration),\n/* harmony export */   browserProfilingIntegration: () => (/* reexport safe */ _profiling_integration_js__WEBPACK_IMPORTED_MODULE_28__.browserProfilingIntegration),\n/* harmony export */   browserSessionIntegration: () => (/* reexport safe */ _integrations_browsersession_js__WEBPACK_IMPORTED_MODULE_30__.browserSessionIntegration),\n/* harmony export */   browserTracingIntegration: () => (/* reexport safe */ _tracing_browserTracingIntegration_js__WEBPACK_IMPORTED_MODULE_26__.browserTracingIntegration),\n/* harmony export */   buildLaunchDarklyFlagUsedHandler: () => (/* reexport safe */ _integrations_featureFlags_launchdarkly_integration_js__WEBPACK_IMPORTED_MODULE_31__.buildLaunchDarklyFlagUsedHandler),\n/* harmony export */   captureConsoleIntegration: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.captureConsoleIntegration),\n/* harmony export */   captureEvent: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.captureEvent),\n/* harmony export */   captureException: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.captureException),\n/* harmony export */   captureFeedback: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.captureFeedback),\n/* harmony export */   captureMessage: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.captureMessage),\n/* harmony export */   captureSession: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.captureSession),\n/* harmony export */   chromeStackLineParser: () => (/* reexport safe */ _stack_parsers_js__WEBPACK_IMPORTED_MODULE_7__.chromeStackLineParser),\n/* harmony export */   close: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.close),\n/* harmony export */   consoleLoggingIntegration: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.consoleLoggingIntegration),\n/* harmony export */   contextLinesIntegration: () => (/* reexport safe */ _integrations_contextlines_js__WEBPACK_IMPORTED_MODULE_20__.contextLinesIntegration),\n/* harmony export */   continueTrace: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.continueTrace),\n/* harmony export */   createTransport: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.createTransport),\n/* harmony export */   createUserFeedbackEnvelope: () => (/* reexport safe */ _userfeedback_js__WEBPACK_IMPORTED_MODULE_9__.createUserFeedbackEnvelope),\n/* harmony export */   dedupeIntegration: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.dedupeIntegration),\n/* harmony export */   defaultRequestInstrumentationOptions: () => (/* reexport safe */ _tracing_request_js__WEBPACK_IMPORTED_MODULE_25__.defaultRequestInstrumentationOptions),\n/* harmony export */   defaultStackLineParsers: () => (/* reexport safe */ _stack_parsers_js__WEBPACK_IMPORTED_MODULE_7__.defaultStackLineParsers),\n/* harmony export */   defaultStackParser: () => (/* reexport safe */ _stack_parsers_js__WEBPACK_IMPORTED_MODULE_7__.defaultStackParser),\n/* harmony export */   diagnoseSdkConnectivity: () => (/* reexport safe */ _diagnose_sdk_js__WEBPACK_IMPORTED_MODULE_35__.diagnoseSdkConnectivity),\n/* harmony export */   endSession: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.endSession),\n/* harmony export */   eventFiltersIntegration: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.eventFiltersIntegration),\n/* harmony export */   eventFromException: () => (/* reexport safe */ _eventbuilder_js__WEBPACK_IMPORTED_MODULE_8__.eventFromException),\n/* harmony export */   eventFromMessage: () => (/* reexport safe */ _eventbuilder_js__WEBPACK_IMPORTED_MODULE_8__.eventFromMessage),\n/* harmony export */   exceptionFromError: () => (/* reexport safe */ _eventbuilder_js__WEBPACK_IMPORTED_MODULE_8__.exceptionFromError),\n/* harmony export */   extraErrorDataIntegration: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.extraErrorDataIntegration),\n/* harmony export */   featureFlagsIntegration: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.featureFlagsIntegration),\n/* harmony export */   feedbackAsyncIntegration: () => (/* reexport safe */ _feedbackAsync_js__WEBPACK_IMPORTED_MODULE_0__.feedbackAsyncIntegration),\n/* harmony export */   feedbackIntegration: () => (/* reexport safe */ _feedbackSync_js__WEBPACK_IMPORTED_MODULE_1__.feedbackSyncIntegration),\n/* harmony export */   feedbackSyncIntegration: () => (/* reexport safe */ _feedbackSync_js__WEBPACK_IMPORTED_MODULE_1__.feedbackSyncIntegration),\n/* harmony export */   flush: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.flush),\n/* harmony export */   forceLoad: () => (/* reexport safe */ _sdk_js__WEBPACK_IMPORTED_MODULE_10__.forceLoad),\n/* harmony export */   functionToStringIntegration: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.functionToStringIntegration),\n/* harmony export */   geckoStackLineParser: () => (/* reexport safe */ _stack_parsers_js__WEBPACK_IMPORTED_MODULE_7__.geckoStackLineParser),\n/* harmony export */   getActiveSpan: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.getActiveSpan),\n/* harmony export */   getClient: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.getClient),\n/* harmony export */   getCurrentScope: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.getCurrentScope),\n/* harmony export */   getDefaultIntegrations: () => (/* reexport safe */ _sdk_js__WEBPACK_IMPORTED_MODULE_10__.getDefaultIntegrations),\n/* harmony export */   getFeedback: () => (/* reexport safe */ _sentry_internal_feedback__WEBPACK_IMPORTED_MODULE_24__.getFeedback),\n/* harmony export */   getGlobalScope: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.getGlobalScope),\n/* harmony export */   getIsolationScope: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.getIsolationScope),\n/* harmony export */   getReplay: () => (/* reexport safe */ _sentry_internal_replay__WEBPACK_IMPORTED_MODULE_22__.getReplay),\n/* harmony export */   getRootSpan: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.getRootSpan),\n/* harmony export */   getSpanDescendants: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.getSpanDescendants),\n/* harmony export */   getSpanStatusFromHttpCode: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.getSpanStatusFromHttpCode),\n/* harmony export */   getTraceData: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.getTraceData),\n/* harmony export */   globalHandlersIntegration: () => (/* reexport safe */ _integrations_globalhandlers_js__WEBPACK_IMPORTED_MODULE_13__.globalHandlersIntegration),\n/* harmony export */   graphqlClientIntegration: () => (/* reexport safe */ _integrations_graphqlClient_js__WEBPACK_IMPORTED_MODULE_21__.graphqlClientIntegration),\n/* harmony export */   httpClientIntegration: () => (/* reexport safe */ _integrations_httpclient_js__WEBPACK_IMPORTED_MODULE_19__.httpClientIntegration),\n/* harmony export */   httpContextIntegration: () => (/* reexport safe */ _integrations_httpcontext_js__WEBPACK_IMPORTED_MODULE_14__.httpContextIntegration),\n/* harmony export */   inboundFiltersIntegration: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.inboundFiltersIntegration),\n/* harmony export */   init: () => (/* reexport safe */ _sdk_js__WEBPACK_IMPORTED_MODULE_10__.init),\n/* harmony export */   instrumentOutgoingRequests: () => (/* reexport safe */ _tracing_request_js__WEBPACK_IMPORTED_MODULE_25__.instrumentOutgoingRequests),\n/* harmony export */   instrumentSupabaseClient: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.instrumentSupabaseClient),\n/* harmony export */   isEnabled: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.isEnabled),\n/* harmony export */   isInitialized: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.isInitialized),\n/* harmony export */   lastEventId: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.lastEventId),\n/* harmony export */   launchDarklyIntegration: () => (/* reexport safe */ _integrations_featureFlags_launchdarkly_integration_js__WEBPACK_IMPORTED_MODULE_31__.launchDarklyIntegration),\n/* harmony export */   lazyLoadIntegration: () => (/* reexport safe */ _utils_lazyLoadIntegration_js__WEBPACK_IMPORTED_MODULE_17__.lazyLoadIntegration),\n/* harmony export */   linkedErrorsIntegration: () => (/* reexport safe */ _integrations_linkederrors_js__WEBPACK_IMPORTED_MODULE_15__.linkedErrorsIntegration),\n/* harmony export */   logger: () => (/* reexport module object */ _log_js__WEBPACK_IMPORTED_MODULE_2__),\n/* harmony export */   makeBrowserOfflineTransport: () => (/* reexport safe */ _transports_offline_js__WEBPACK_IMPORTED_MODULE_27__.makeBrowserOfflineTransport),\n/* harmony export */   makeFetchTransport: () => (/* reexport safe */ _transports_fetch_js__WEBPACK_IMPORTED_MODULE_6__.makeFetchTransport),\n/* harmony export */   makeMultiplexedTransport: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.makeMultiplexedTransport),\n/* harmony export */   moduleMetadataIntegration: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.moduleMetadataIntegration),\n/* harmony export */   onLoad: () => (/* reexport safe */ _sdk_js__WEBPACK_IMPORTED_MODULE_10__.onLoad),\n/* harmony export */   openFeatureIntegration: () => (/* reexport safe */ _integrations_featureFlags_openfeature_integration_js__WEBPACK_IMPORTED_MODULE_32__.openFeatureIntegration),\n/* harmony export */   opera10StackLineParser: () => (/* reexport safe */ _stack_parsers_js__WEBPACK_IMPORTED_MODULE_7__.opera10StackLineParser),\n/* harmony export */   opera11StackLineParser: () => (/* reexport safe */ _stack_parsers_js__WEBPACK_IMPORTED_MODULE_7__.opera11StackLineParser),\n/* harmony export */   parameterize: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.parameterize),\n/* harmony export */   registerSpanErrorInstrumentation: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.registerSpanErrorInstrumentation),\n/* harmony export */   registerWebWorker: () => (/* reexport safe */ _integrations_webWorker_js__WEBPACK_IMPORTED_MODULE_36__.registerWebWorker),\n/* harmony export */   replayCanvasIntegration: () => (/* reexport safe */ _sentry_internal_replay_canvas__WEBPACK_IMPORTED_MODULE_23__.replayCanvasIntegration),\n/* harmony export */   replayIntegration: () => (/* reexport safe */ _sentry_internal_replay__WEBPACK_IMPORTED_MODULE_22__.replayIntegration),\n/* harmony export */   reportingObserverIntegration: () => (/* reexport safe */ _integrations_reportingobserver_js__WEBPACK_IMPORTED_MODULE_18__.reportingObserverIntegration),\n/* harmony export */   rewriteFramesIntegration: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.rewriteFramesIntegration),\n/* harmony export */   sendFeedback: () => (/* reexport safe */ _sentry_internal_feedback__WEBPACK_IMPORTED_MODULE_24__.sendFeedback),\n/* harmony export */   setContext: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.setContext),\n/* harmony export */   setCurrentClient: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.setCurrentClient),\n/* harmony export */   setExtra: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.setExtra),\n/* harmony export */   setExtras: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.setExtras),\n/* harmony export */   setHttpStatus: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.setHttpStatus),\n/* harmony export */   setMeasurement: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.setMeasurement),\n/* harmony export */   setTag: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.setTag),\n/* harmony export */   setTags: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.setTags),\n/* harmony export */   setUser: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.setUser),\n/* harmony export */   showReportDialog: () => (/* reexport safe */ _report_dialog_js__WEBPACK_IMPORTED_MODULE_11__.showReportDialog),\n/* harmony export */   spanToBaggageHeader: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.spanToBaggageHeader),\n/* harmony export */   spanToJSON: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.spanToJSON),\n/* harmony export */   spanToTraceHeader: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.spanToTraceHeader),\n/* harmony export */   spotlightBrowserIntegration: () => (/* reexport safe */ _integrations_spotlight_js__WEBPACK_IMPORTED_MODULE_29__.spotlightBrowserIntegration),\n/* harmony export */   startBrowserTracingNavigationSpan: () => (/* reexport safe */ _tracing_browserTracingIntegration_js__WEBPACK_IMPORTED_MODULE_26__.startBrowserTracingNavigationSpan),\n/* harmony export */   startBrowserTracingPageLoadSpan: () => (/* reexport safe */ _tracing_browserTracingIntegration_js__WEBPACK_IMPORTED_MODULE_26__.startBrowserTracingPageLoadSpan),\n/* harmony export */   startInactiveSpan: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.startInactiveSpan),\n/* harmony export */   startNewTrace: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.startNewTrace),\n/* harmony export */   startSession: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.startSession),\n/* harmony export */   startSpan: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.startSpan),\n/* harmony export */   startSpanManual: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.startSpanManual),\n/* harmony export */   statsigIntegration: () => (/* reexport safe */ _integrations_featureFlags_statsig_integration_js__WEBPACK_IMPORTED_MODULE_34__.statsigIntegration),\n/* harmony export */   supabaseIntegration: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.supabaseIntegration),\n/* harmony export */   suppressTracing: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.suppressTracing),\n/* harmony export */   thirdPartyErrorFilterIntegration: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.thirdPartyErrorFilterIntegration),\n/* harmony export */   unleashIntegration: () => (/* reexport safe */ _integrations_featureFlags_unleash_integration_js__WEBPACK_IMPORTED_MODULE_33__.unleashIntegration),\n/* harmony export */   updateSpanName: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.updateSpanName),\n/* harmony export */   webWorkerIntegration: () => (/* reexport safe */ _integrations_webWorker_js__WEBPACK_IMPORTED_MODULE_36__.webWorkerIntegration),\n/* harmony export */   winjsStackLineParser: () => (/* reexport safe */ _stack_parsers_js__WEBPACK_IMPORTED_MODULE_7__.winjsStackLineParser),\n/* harmony export */   withActiveSpan: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.withActiveSpan),\n/* harmony export */   withIsolationScope: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.withIsolationScope),\n/* harmony export */   withScope: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.withScope),\n/* harmony export */   zodErrorsIntegration: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_3__.zodErrorsIntegration)\n/* harmony export */ });\n/* harmony import */ var _feedbackAsync_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./feedbackAsync.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/feedbackAsync.js\");\n/* harmony import */ var _feedbackSync_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./feedbackSync.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/feedbackSync.js\");\n/* harmony import */ var _log_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./log.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/log.js\");\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./helpers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\");\n/* harmony import */ var _client_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./client.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/client.js\");\n/* harmony import */ var _transports_fetch_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./transports/fetch.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/transports/fetch.js\");\n/* harmony import */ var _stack_parsers_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./stack-parsers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/stack-parsers.js\");\n/* harmony import */ var _eventbuilder_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./eventbuilder.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/eventbuilder.js\");\n/* harmony import */ var _userfeedback_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./userfeedback.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/userfeedback.js\");\n/* harmony import */ var _sdk_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./sdk.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/sdk.js\");\n/* harmony import */ var _report_dialog_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./report-dialog.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/report-dialog.js\");\n/* harmony import */ var _integrations_breadcrumbs_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./integrations/breadcrumbs.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/breadcrumbs.js\");\n/* harmony import */ var _integrations_globalhandlers_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./integrations/globalhandlers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/globalhandlers.js\");\n/* harmony import */ var _integrations_httpcontext_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./integrations/httpcontext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/httpcontext.js\");\n/* harmony import */ var _integrations_linkederrors_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./integrations/linkederrors.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/linkederrors.js\");\n/* harmony import */ var _integrations_browserapierrors_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./integrations/browserapierrors.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/browserapierrors.js\");\n/* harmony import */ var _utils_lazyLoadIntegration_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./utils/lazyLoadIntegration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/utils/lazyLoadIntegration.js\");\n/* harmony import */ var _integrations_reportingobserver_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./integrations/reportingobserver.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/reportingobserver.js\");\n/* harmony import */ var _integrations_httpclient_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./integrations/httpclient.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/httpclient.js\");\n/* harmony import */ var _integrations_contextlines_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./integrations/contextlines.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/contextlines.js\");\n/* harmony import */ var _integrations_graphqlClient_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./integrations/graphqlClient.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/graphqlClient.js\");\n/* harmony import */ var _sentry_internal_replay__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @sentry-internal/replay */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+replay@9.46.0/node_modules/@sentry-internal/replay/build/npm/esm/index.js\");\n/* harmony import */ var _sentry_internal_replay_canvas__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @sentry-internal/replay-canvas */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+replay-canvas@9.46.0/node_modules/@sentry-internal/replay-canvas/build/npm/esm/index.js\");\n/* harmony import */ var _sentry_internal_feedback__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @sentry-internal/feedback */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+feedback@9.46.0/node_modules/@sentry-internal/feedback/build/npm/esm/index.js\");\n/* harmony import */ var _tracing_request_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./tracing/request.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/request.js\");\n/* harmony import */ var _tracing_browserTracingIntegration_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./tracing/browserTracingIntegration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/browserTracingIntegration.js\");\n/* harmony import */ var _transports_offline_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./transports/offline.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/transports/offline.js\");\n/* harmony import */ var _profiling_integration_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./profiling/integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/profiling/integration.js\");\n/* harmony import */ var _integrations_spotlight_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./integrations/spotlight.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/spotlight.js\");\n/* harmony import */ var _integrations_browsersession_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./integrations/browsersession.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/browsersession.js\");\n/* harmony import */ var _integrations_featureFlags_launchdarkly_integration_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./integrations/featureFlags/launchdarkly/integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/launchdarkly/integration.js\");\n/* harmony import */ var _integrations_featureFlags_openfeature_integration_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./integrations/featureFlags/openfeature/integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/openfeature/integration.js\");\n/* harmony import */ var _integrations_featureFlags_unleash_integration_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./integrations/featureFlags/unleash/integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/unleash/integration.js\");\n/* harmony import */ var _integrations_featureFlags_statsig_integration_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./integrations/featureFlags/statsig/integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/statsig/integration.js\");\n/* harmony import */ var _diagnose_sdk_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./diagnose-sdk.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/diagnose-sdk.js\");\n/* harmony import */ var _integrations_webWorker_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./integrations/webWorker.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/webWorker.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQThEO0FBQzhDO0FBQzVFO0FBQ1A7QUFDOHdDO0FBQ2p3QztBQUNNO0FBQ2U7QUFDeUk7QUFDdkc7QUFDOUI7QUFDWTtBQUNyQjtBQUNpQjtBQUNNO0FBQ047QUFDRTtBQUNRO0FBQ1o7QUFDYztBQUNkO0FBQ0k7QUFDRTtBQUNKO0FBQ0U7QUFDSDtBQUNrQztBQUMrQztBQUNqRjtBQUNHO0FBQ0M7QUFDRztBQUN1RDtBQUNSO0FBQ3BDO0FBQ0E7QUFDNUI7QUFDMEI7QUFDdEYiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZmVlZGJhY2tBc3luY0ludGVncmF0aW9uIH0gZnJvbSAnLi9mZWVkYmFja0FzeW5jLmpzJztcbmV4cG9ydCB7IGZlZWRiYWNrU3luY0ludGVncmF0aW9uIGFzIGZlZWRiYWNrSW50ZWdyYXRpb24sIGZlZWRiYWNrU3luY0ludGVncmF0aW9uIH0gZnJvbSAnLi9mZWVkYmFja1N5bmMuanMnO1xuaW1wb3J0ICogYXMgbG9nIGZyb20gJy4vbG9nLmpzJztcbmV4cG9ydCB7IGxvZyBhcyBsb2dnZXIgfTtcbmV4cG9ydCB7IFNES19WRVJTSU9OLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTiwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TQU1QTEVfUkFURSwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0UsIFNjb3BlLCBhZGRCcmVhZGNydW1iLCBhZGRFdmVudFByb2Nlc3NvciwgYWRkSW50ZWdyYXRpb24sIGNhcHR1cmVDb25zb2xlSW50ZWdyYXRpb24sIGNhcHR1cmVFdmVudCwgY2FwdHVyZUV4Y2VwdGlvbiwgY2FwdHVyZUZlZWRiYWNrLCBjYXB0dXJlTWVzc2FnZSwgY2FwdHVyZVNlc3Npb24sIGNsb3NlLCBjb25zb2xlTG9nZ2luZ0ludGVncmF0aW9uLCBjb250aW51ZVRyYWNlLCBjcmVhdGVUcmFuc3BvcnQsIGRlZHVwZUludGVncmF0aW9uLCBlbmRTZXNzaW9uLCBldmVudEZpbHRlcnNJbnRlZ3JhdGlvbiwgZXh0cmFFcnJvckRhdGFJbnRlZ3JhdGlvbiwgZmVhdHVyZUZsYWdzSW50ZWdyYXRpb24sIGZsdXNoLCBmdW5jdGlvblRvU3RyaW5nSW50ZWdyYXRpb24sIGdldEFjdGl2ZVNwYW4sIGdldENsaWVudCwgZ2V0Q3VycmVudFNjb3BlLCBnZXRHbG9iYWxTY29wZSwgZ2V0SXNvbGF0aW9uU2NvcGUsIGdldFJvb3RTcGFuLCBnZXRTcGFuRGVzY2VuZGFudHMsIGdldFNwYW5TdGF0dXNGcm9tSHR0cENvZGUsIGdldFRyYWNlRGF0YSwgaW5ib3VuZEZpbHRlcnNJbnRlZ3JhdGlvbiwgaW5zdHJ1bWVudFN1cGFiYXNlQ2xpZW50LCBpc0VuYWJsZWQsIGlzSW5pdGlhbGl6ZWQsIGxhc3RFdmVudElkLCBtYWtlTXVsdGlwbGV4ZWRUcmFuc3BvcnQsIG1vZHVsZU1ldGFkYXRhSW50ZWdyYXRpb24sIHBhcmFtZXRlcml6ZSwgcmVnaXN0ZXJTcGFuRXJyb3JJbnN0cnVtZW50YXRpb24sIHJld3JpdGVGcmFtZXNJbnRlZ3JhdGlvbiwgc2V0Q29udGV4dCwgc2V0Q3VycmVudENsaWVudCwgc2V0RXh0cmEsIHNldEV4dHJhcywgc2V0SHR0cFN0YXR1cywgc2V0TWVhc3VyZW1lbnQsIHNldFRhZywgc2V0VGFncywgc2V0VXNlciwgc3BhblRvQmFnZ2FnZUhlYWRlciwgc3BhblRvSlNPTiwgc3BhblRvVHJhY2VIZWFkZXIsIHN0YXJ0SW5hY3RpdmVTcGFuLCBzdGFydE5ld1RyYWNlLCBzdGFydFNlc3Npb24sIHN0YXJ0U3Bhbiwgc3RhcnRTcGFuTWFudWFsLCBzdXBhYmFzZUludGVncmF0aW9uLCBzdXBwcmVzc1RyYWNpbmcsIHRoaXJkUGFydHlFcnJvckZpbHRlckludGVncmF0aW9uLCB1cGRhdGVTcGFuTmFtZSwgd2l0aEFjdGl2ZVNwYW4sIHdpdGhJc29sYXRpb25TY29wZSwgd2l0aFNjb3BlLCB6b2RFcnJvcnNJbnRlZ3JhdGlvbiB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5leHBvcnQgeyBXSU5ET1cgfSBmcm9tICcuL2hlbHBlcnMuanMnO1xuZXhwb3J0IHsgQnJvd3NlckNsaWVudCB9IGZyb20gJy4vY2xpZW50LmpzJztcbmV4cG9ydCB7IG1ha2VGZXRjaFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0cy9mZXRjaC5qcyc7XG5leHBvcnQgeyBjaHJvbWVTdGFja0xpbmVQYXJzZXIsIGRlZmF1bHRTdGFja0xpbmVQYXJzZXJzLCBkZWZhdWx0U3RhY2tQYXJzZXIsIGdlY2tvU3RhY2tMaW5lUGFyc2VyLCBvcGVyYTEwU3RhY2tMaW5lUGFyc2VyLCBvcGVyYTExU3RhY2tMaW5lUGFyc2VyLCB3aW5qc1N0YWNrTGluZVBhcnNlciB9IGZyb20gJy4vc3RhY2stcGFyc2Vycy5qcyc7XG5leHBvcnQgeyBldmVudEZyb21FeGNlcHRpb24sIGV2ZW50RnJvbU1lc3NhZ2UsIGV4Y2VwdGlvbkZyb21FcnJvciB9IGZyb20gJy4vZXZlbnRidWlsZGVyLmpzJztcbmV4cG9ydCB7IGNyZWF0ZVVzZXJGZWVkYmFja0VudmVsb3BlIH0gZnJvbSAnLi91c2VyZmVlZGJhY2suanMnO1xuZXhwb3J0IHsgZm9yY2VMb2FkLCBnZXREZWZhdWx0SW50ZWdyYXRpb25zLCBpbml0LCBvbkxvYWQgfSBmcm9tICcuL3Nkay5qcyc7XG5leHBvcnQgeyBzaG93UmVwb3J0RGlhbG9nIH0gZnJvbSAnLi9yZXBvcnQtZGlhbG9nLmpzJztcbmV4cG9ydCB7IGJyZWFkY3J1bWJzSW50ZWdyYXRpb24gfSBmcm9tICcuL2ludGVncmF0aW9ucy9icmVhZGNydW1icy5qcyc7XG5leHBvcnQgeyBnbG9iYWxIYW5kbGVyc0ludGVncmF0aW9uIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbnMvZ2xvYmFsaGFuZGxlcnMuanMnO1xuZXhwb3J0IHsgaHR0cENvbnRleHRJbnRlZ3JhdGlvbiB9IGZyb20gJy4vaW50ZWdyYXRpb25zL2h0dHBjb250ZXh0LmpzJztcbmV4cG9ydCB7IGxpbmtlZEVycm9yc0ludGVncmF0aW9uIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbnMvbGlua2VkZXJyb3JzLmpzJztcbmV4cG9ydCB7IGJyb3dzZXJBcGlFcnJvcnNJbnRlZ3JhdGlvbiB9IGZyb20gJy4vaW50ZWdyYXRpb25zL2Jyb3dzZXJhcGllcnJvcnMuanMnO1xuZXhwb3J0IHsgbGF6eUxvYWRJbnRlZ3JhdGlvbiB9IGZyb20gJy4vdXRpbHMvbGF6eUxvYWRJbnRlZ3JhdGlvbi5qcyc7XG5leHBvcnQgeyByZXBvcnRpbmdPYnNlcnZlckludGVncmF0aW9uIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbnMvcmVwb3J0aW5nb2JzZXJ2ZXIuanMnO1xuZXhwb3J0IHsgaHR0cENsaWVudEludGVncmF0aW9uIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbnMvaHR0cGNsaWVudC5qcyc7XG5leHBvcnQgeyBjb250ZXh0TGluZXNJbnRlZ3JhdGlvbiB9IGZyb20gJy4vaW50ZWdyYXRpb25zL2NvbnRleHRsaW5lcy5qcyc7XG5leHBvcnQgeyBncmFwaHFsQ2xpZW50SW50ZWdyYXRpb24gfSBmcm9tICcuL2ludGVncmF0aW9ucy9ncmFwaHFsQ2xpZW50LmpzJztcbmV4cG9ydCB7IGdldFJlcGxheSwgcmVwbGF5SW50ZWdyYXRpb24gfSBmcm9tICdAc2VudHJ5LWludGVybmFsL3JlcGxheSc7XG5leHBvcnQgeyByZXBsYXlDYW52YXNJbnRlZ3JhdGlvbiB9IGZyb20gJ0BzZW50cnktaW50ZXJuYWwvcmVwbGF5LWNhbnZhcyc7XG5leHBvcnQgeyBnZXRGZWVkYmFjaywgc2VuZEZlZWRiYWNrIH0gZnJvbSAnQHNlbnRyeS1pbnRlcm5hbC9mZWVkYmFjayc7XG5leHBvcnQgeyBkZWZhdWx0UmVxdWVzdEluc3RydW1lbnRhdGlvbk9wdGlvbnMsIGluc3RydW1lbnRPdXRnb2luZ1JlcXVlc3RzIH0gZnJvbSAnLi90cmFjaW5nL3JlcXVlc3QuanMnO1xuZXhwb3J0IHsgYnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbiwgc3RhcnRCcm93c2VyVHJhY2luZ05hdmlnYXRpb25TcGFuLCBzdGFydEJyb3dzZXJUcmFjaW5nUGFnZUxvYWRTcGFuIH0gZnJvbSAnLi90cmFjaW5nL2Jyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24uanMnO1xuZXhwb3J0IHsgbWFrZUJyb3dzZXJPZmZsaW5lVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnRzL29mZmxpbmUuanMnO1xuZXhwb3J0IHsgYnJvd3NlclByb2ZpbGluZ0ludGVncmF0aW9uIH0gZnJvbSAnLi9wcm9maWxpbmcvaW50ZWdyYXRpb24uanMnO1xuZXhwb3J0IHsgc3BvdGxpZ2h0QnJvd3NlckludGVncmF0aW9uIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbnMvc3BvdGxpZ2h0LmpzJztcbmV4cG9ydCB7IGJyb3dzZXJTZXNzaW9uSW50ZWdyYXRpb24gfSBmcm9tICcuL2ludGVncmF0aW9ucy9icm93c2Vyc2Vzc2lvbi5qcyc7XG5leHBvcnQgeyBidWlsZExhdW5jaERhcmtseUZsYWdVc2VkSGFuZGxlciwgbGF1bmNoRGFya2x5SW50ZWdyYXRpb24gfSBmcm9tICcuL2ludGVncmF0aW9ucy9mZWF0dXJlRmxhZ3MvbGF1bmNoZGFya2x5L2ludGVncmF0aW9uLmpzJztcbmV4cG9ydCB7IE9wZW5GZWF0dXJlSW50ZWdyYXRpb25Ib29rLCBvcGVuRmVhdHVyZUludGVncmF0aW9uIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbnMvZmVhdHVyZUZsYWdzL29wZW5mZWF0dXJlL2ludGVncmF0aW9uLmpzJztcbmV4cG9ydCB7IHVubGVhc2hJbnRlZ3JhdGlvbiB9IGZyb20gJy4vaW50ZWdyYXRpb25zL2ZlYXR1cmVGbGFncy91bmxlYXNoL2ludGVncmF0aW9uLmpzJztcbmV4cG9ydCB7IHN0YXRzaWdJbnRlZ3JhdGlvbiB9IGZyb20gJy4vaW50ZWdyYXRpb25zL2ZlYXR1cmVGbGFncy9zdGF0c2lnL2ludGVncmF0aW9uLmpzJztcbmV4cG9ydCB7IGRpYWdub3NlU2RrQ29ubmVjdGl2aXR5IH0gZnJvbSAnLi9kaWFnbm9zZS1zZGsuanMnO1xuZXhwb3J0IHsgcmVnaXN0ZXJXZWJXb3JrZXIsIHdlYldvcmtlckludGVncmF0aW9uIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbnMvd2ViV29ya2VyLmpzJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/breadcrumbs.js":
/*!**************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/breadcrumbs.js ***!
  \**************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   breadcrumbsIntegration: () => (/* binding */ breadcrumbsIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry-internal/browser-utils */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/debug-build.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../helpers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\");\n\n\n\n\n\n/** maxStringLength gets capped to prevent 100 breadcrumbs exceeding 1MB event payload size */\nconst MAX_ALLOWED_STRING_LENGTH = 1024;\n\nconst INTEGRATION_NAME = 'Breadcrumbs';\n\nconst _breadcrumbsIntegration = ((options = {}) => {\n  const _options = {\n    console: true,\n    dom: true,\n    fetch: true,\n    history: true,\n    sentry: true,\n    xhr: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      // TODO(v10): Remove this functionality and use `consoleIntegration` from @sentry/core instead.\n      if (_options.console) {\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addConsoleInstrumentationHandler)(_getConsoleBreadcrumbHandler(client));\n      }\n      if (_options.dom) {\n        (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.addClickKeypressInstrumentationHandler)(_getDomBreadcrumbHandler(client, _options.dom));\n      }\n      if (_options.xhr) {\n        (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.addXhrInstrumentationHandler)(_getXhrBreadcrumbHandler(client));\n      }\n      if (_options.fetch) {\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addFetchInstrumentationHandler)(_getFetchBreadcrumbHandler(client));\n      }\n      if (_options.history) {\n        (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.addHistoryInstrumentationHandler)(_getHistoryBreadcrumbHandler(client));\n      }\n      if (_options.sentry) {\n        client.on('beforeSendEvent', _getSentryBreadcrumbHandler(client));\n      }\n    },\n  };\n}) ;\n\nconst breadcrumbsIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(_breadcrumbsIntegration);\n\n/**\n * Adds a breadcrumb for Sentry events or transactions if this option is enabled.\n */\nfunction _getSentryBreadcrumbHandler(client) {\n  return function addSentryBreadcrumb(event) {\n    if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)() !== client) {\n      return;\n    }\n\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addBreadcrumb)(\n      {\n        category: `sentry.${event.type === 'transaction' ? 'transaction' : 'event'}`,\n        event_id: event.event_id,\n        level: event.level,\n        message: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getEventDescription)(event),\n      },\n      {\n        event,\n      },\n    );\n  };\n}\n\n/**\n * A HOC that creates a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\nfunction _getDomBreadcrumbHandler(\n  client,\n  dom,\n) {\n  return function _innerDomBreadcrumb(handlerData) {\n    if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)() !== client) {\n      return;\n    }\n\n    let target;\n    let componentName;\n    let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\n\n    let maxStringLength =\n      typeof dom === 'object' && typeof dom.maxStringLength === 'number' ? dom.maxStringLength : undefined;\n    if (maxStringLength && maxStringLength > MAX_ALLOWED_STRING_LENGTH) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_2__.DEBUG_BUILD &&\n        _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn(\n          `\\`dom.maxStringLength\\` cannot exceed ${MAX_ALLOWED_STRING_LENGTH}, but a value of ${maxStringLength} was configured. Sentry will use ${MAX_ALLOWED_STRING_LENGTH} instead.`,\n        );\n      maxStringLength = MAX_ALLOWED_STRING_LENGTH;\n    }\n\n    if (typeof keyAttrs === 'string') {\n      keyAttrs = [keyAttrs];\n    }\n\n    // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n    try {\n      const event = handlerData.event ;\n      const element = _isEvent(event) ? event.target : event;\n\n      target = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.htmlTreeAsString)(element, { keyAttrs, maxStringLength });\n      componentName = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getComponentName)(element);\n    } catch {\n      target = '<unknown>';\n    }\n\n    if (target.length === 0) {\n      return;\n    }\n\n    const breadcrumb = {\n      category: `ui.${handlerData.name}`,\n      message: target,\n    };\n\n    if (componentName) {\n      breadcrumb.data = { 'ui.component_name': componentName };\n    }\n\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addBreadcrumb)(breadcrumb, {\n      event: handlerData.event,\n      name: handlerData.name,\n      global: handlerData.global,\n    });\n  };\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\nfunction _getConsoleBreadcrumbHandler(client) {\n  return function _consoleBreadcrumb(handlerData) {\n    if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)() !== client) {\n      return;\n    }\n\n    const breadcrumb = {\n      category: 'console',\n      data: {\n        arguments: handlerData.args,\n        logger: 'console',\n      },\n      level: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.severityLevelFromString)(handlerData.level),\n      message: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.safeJoin)(handlerData.args, ' '),\n    };\n\n    if (handlerData.level === 'assert') {\n      if (handlerData.args[0] === false) {\n        breadcrumb.message = `Assertion failed: ${(0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.safeJoin)(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n        breadcrumb.data.arguments = handlerData.args.slice(1);\n      } else {\n        // Don't capture a breadcrumb for passed assertions\n        return;\n      }\n    }\n\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addBreadcrumb)(breadcrumb, {\n      input: handlerData.args,\n      level: handlerData.level,\n    });\n  };\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\nfunction _getXhrBreadcrumbHandler(client) {\n  return function _xhrBreadcrumb(handlerData) {\n    if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)() !== client) {\n      return;\n    }\n\n    const { startTimestamp, endTimestamp } = handlerData;\n\n    const sentryXhrData = handlerData.xhr[_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.SENTRY_XHR_DATA_KEY];\n\n    // We only capture complete, non-sentry requests\n    if (!startTimestamp || !endTimestamp || !sentryXhrData) {\n      return;\n    }\n\n    const { method, url, status_code, body } = sentryXhrData;\n\n    const data = {\n      method,\n      url,\n      status_code,\n    };\n\n    const hint = {\n      xhr: handlerData.xhr,\n      input: body,\n      startTimestamp,\n      endTimestamp,\n    };\n\n    const breadcrumb = {\n      category: 'xhr',\n      data,\n      type: 'http',\n      level: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getBreadcrumbLogLevelFromHttpStatusCode)(status_code),\n    };\n\n    client.emit('beforeOutgoingRequestBreadcrumb', breadcrumb, hint );\n\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addBreadcrumb)(breadcrumb, hint);\n  };\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\nfunction _getFetchBreadcrumbHandler(client) {\n  return function _fetchBreadcrumb(handlerData) {\n    if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)() !== client) {\n      return;\n    }\n\n    const { startTimestamp, endTimestamp } = handlerData;\n\n    // We only capture complete fetch requests\n    if (!endTimestamp) {\n      return;\n    }\n\n    if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n      // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n      return;\n    }\n\n    ({\n      method: handlerData.fetchData.method,\n      url: handlerData.fetchData.url,\n    });\n\n    if (handlerData.error) {\n      const data = handlerData.fetchData;\n      const hint = {\n        data: handlerData.error,\n        input: handlerData.args,\n        startTimestamp,\n        endTimestamp,\n      };\n\n      const breadcrumb = {\n        category: 'fetch',\n        data,\n        level: 'error',\n        type: 'http',\n      } ;\n\n      client.emit('beforeOutgoingRequestBreadcrumb', breadcrumb, hint );\n\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addBreadcrumb)(breadcrumb, hint);\n    } else {\n      const response = handlerData.response ;\n      const data = {\n        ...handlerData.fetchData,\n        status_code: response?.status,\n      };\n\n      handlerData.fetchData.request_body_size;\n      handlerData.fetchData.response_body_size;\n      response?.status;\n\n      const hint = {\n        input: handlerData.args,\n        response,\n        startTimestamp,\n        endTimestamp,\n      };\n\n      const breadcrumb = {\n        category: 'fetch',\n        data,\n        type: 'http',\n        level: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getBreadcrumbLogLevelFromHttpStatusCode)(data.status_code),\n      };\n\n      client.emit('beforeOutgoingRequestBreadcrumb', breadcrumb, hint );\n\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addBreadcrumb)(breadcrumb, hint);\n    }\n  };\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\nfunction _getHistoryBreadcrumbHandler(client) {\n  return function _historyBreadcrumb(handlerData) {\n    if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)() !== client) {\n      return;\n    }\n\n    let from = handlerData.from;\n    let to = handlerData.to;\n    const parsedLoc = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.parseUrl)(_helpers_js__WEBPACK_IMPORTED_MODULE_3__.WINDOW.location.href);\n    let parsedFrom = from ? (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.parseUrl)(from) : undefined;\n    const parsedTo = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.parseUrl)(to);\n\n    // Initial pushState doesn't provide `from` information\n    if (!parsedFrom?.path) {\n      parsedFrom = parsedLoc;\n    }\n\n    // Use only the path component of the URL if the URL matches the current\n    // document (almost all the time when using pushState)\n    if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n      to = parsedTo.relative;\n    }\n    if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n      from = parsedFrom.relative;\n    }\n\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addBreadcrumb)({\n      category: 'navigation',\n      data: {\n        from,\n        to,\n      },\n    });\n  };\n}\n\nfunction _isEvent(event) {\n  return !!event && !!(event ).target;\n}\n\n\n//# sourceMappingURL=breadcrumbs.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbnRlZ3JhdGlvbnMvYnJlYWRjcnVtYnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBbVM7QUFDdEg7QUFDN0g7QUFDVDs7QUFFdkM7QUFDQTs7QUFFQTs7QUFFQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDhFQUFnQztBQUN4QztBQUNBO0FBQ0EsUUFBUSxzR0FBc0M7QUFDOUM7QUFDQTtBQUNBLFFBQVEsNEZBQTRCO0FBQ3BDO0FBQ0E7QUFDQSxRQUFRLDRFQUE4QjtBQUN0QztBQUNBO0FBQ0EsUUFBUSxnR0FBZ0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVELCtCQUErQiwrREFBaUI7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHVEQUFTO0FBQ2pCO0FBQ0E7O0FBRUEsSUFBSSwyREFBYTtBQUNqQjtBQUNBLDRCQUE0Qix1REFBdUQ7QUFDbkY7QUFDQTtBQUNBLGlCQUFpQixpRUFBbUI7QUFDcEMsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsdURBQVM7QUFDakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTSx3REFBVztBQUNqQixRQUFRLCtDQUFLO0FBQ2IsbURBQW1ELDBCQUEwQixtQkFBbUIsaUJBQWlCLGtDQUFrQywyQkFBMkI7QUFDOUs7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLDhEQUFnQixZQUFZLDJCQUEyQjtBQUN0RSxzQkFBc0IsOERBQWdCO0FBQ3RDLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQixpQkFBaUI7QUFDdkM7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjtBQUMxQjs7QUFFQSxJQUFJLDJEQUFhO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHVEQUFTO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxhQUFhLHFFQUF1QjtBQUNwQyxlQUFlLHNEQUFRO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQSxrREFBa0Qsc0RBQVEscURBQXFEO0FBQy9HO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksMkRBQWE7QUFDakI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHVEQUFTO0FBQ2pCO0FBQ0E7O0FBRUEsWUFBWSwrQkFBK0I7O0FBRTNDLDBDQUEwQywrRUFBbUI7O0FBRTdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFlBQVksaUNBQWlDOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEscUZBQXVDO0FBQ3BEOztBQUVBOztBQUVBLElBQUksMkRBQWE7QUFDakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSx1REFBUztBQUNqQjtBQUNBOztBQUVBLFlBQVksK0JBQStCOztBQUUzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE1BQU0sMkRBQWE7QUFDbkIsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUscUZBQXVDO0FBQ3REOztBQUVBOztBQUVBLE1BQU0sMkRBQWE7QUFDbkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHVEQUFTO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQixzREFBUSxDQUFDLCtDQUFNO0FBQ3JDLDRCQUE0QixzREFBUTtBQUNwQyxxQkFBcUIsc0RBQVE7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSSwyREFBYTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWtDO0FBQ2xDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrYnJvd3NlckA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9idWlsZC9ucG0vZXNtL2ludGVncmF0aW9ucy9icmVhZGNydW1icy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZpbmVJbnRlZ3JhdGlvbiwgYWRkQ29uc29sZUluc3RydW1lbnRhdGlvbkhhbmRsZXIsIGFkZEZldGNoSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgZ2V0Q2xpZW50LCBzYWZlSm9pbiwgc2V2ZXJpdHlMZXZlbEZyb21TdHJpbmcsIGFkZEJyZWFkY3J1bWIsIGRlYnVnLCBodG1sVHJlZUFzU3RyaW5nLCBnZXRDb21wb25lbnROYW1lLCBnZXRCcmVhZGNydW1iTG9nTGV2ZWxGcm9tSHR0cFN0YXR1c0NvZGUsIHBhcnNlVXJsLCBnZXRFdmVudERlc2NyaXB0aW9uIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGFkZENsaWNrS2V5cHJlc3NJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBhZGRYaHJJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBhZGRIaXN0b3J5SW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgU0VOVFJZX1hIUl9EQVRBX0tFWSB9IGZyb20gJ0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscyc7XG5pbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4uL2RlYnVnLWJ1aWxkLmpzJztcbmltcG9ydCB7IFdJTkRPVyB9IGZyb20gJy4uL2hlbHBlcnMuanMnO1xuXG4vKiogbWF4U3RyaW5nTGVuZ3RoIGdldHMgY2FwcGVkIHRvIHByZXZlbnQgMTAwIGJyZWFkY3J1bWJzIGV4Y2VlZGluZyAxTUIgZXZlbnQgcGF5bG9hZCBzaXplICovXG5jb25zdCBNQVhfQUxMT1dFRF9TVFJJTkdfTEVOR1RIID0gMTAyNDtcblxuY29uc3QgSU5URUdSQVRJT05fTkFNRSA9ICdCcmVhZGNydW1icyc7XG5cbmNvbnN0IF9icmVhZGNydW1ic0ludGVncmF0aW9uID0gKChvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgX29wdGlvbnMgPSB7XG4gICAgY29uc29sZTogdHJ1ZSxcbiAgICBkb206IHRydWUsXG4gICAgZmV0Y2g6IHRydWUsXG4gICAgaGlzdG9yeTogdHJ1ZSxcbiAgICBzZW50cnk6IHRydWUsXG4gICAgeGhyOiB0cnVlLFxuICAgIC4uLm9wdGlvbnMsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBJTlRFR1JBVElPTl9OQU1FLFxuICAgIHNldHVwKGNsaWVudCkge1xuICAgICAgLy8gVE9ETyh2MTApOiBSZW1vdmUgdGhpcyBmdW5jdGlvbmFsaXR5IGFuZCB1c2UgYGNvbnNvbGVJbnRlZ3JhdGlvbmAgZnJvbSBAc2VudHJ5L2NvcmUgaW5zdGVhZC5cbiAgICAgIGlmIChfb3B0aW9ucy5jb25zb2xlKSB7XG4gICAgICAgIGFkZENvbnNvbGVJbnN0cnVtZW50YXRpb25IYW5kbGVyKF9nZXRDb25zb2xlQnJlYWRjcnVtYkhhbmRsZXIoY2xpZW50KSk7XG4gICAgICB9XG4gICAgICBpZiAoX29wdGlvbnMuZG9tKSB7XG4gICAgICAgIGFkZENsaWNrS2V5cHJlc3NJbnN0cnVtZW50YXRpb25IYW5kbGVyKF9nZXREb21CcmVhZGNydW1iSGFuZGxlcihjbGllbnQsIF9vcHRpb25zLmRvbSkpO1xuICAgICAgfVxuICAgICAgaWYgKF9vcHRpb25zLnhocikge1xuICAgICAgICBhZGRYaHJJbnN0cnVtZW50YXRpb25IYW5kbGVyKF9nZXRYaHJCcmVhZGNydW1iSGFuZGxlcihjbGllbnQpKTtcbiAgICAgIH1cbiAgICAgIGlmIChfb3B0aW9ucy5mZXRjaCkge1xuICAgICAgICBhZGRGZXRjaEluc3RydW1lbnRhdGlvbkhhbmRsZXIoX2dldEZldGNoQnJlYWRjcnVtYkhhbmRsZXIoY2xpZW50KSk7XG4gICAgICB9XG4gICAgICBpZiAoX29wdGlvbnMuaGlzdG9yeSkge1xuICAgICAgICBhZGRIaXN0b3J5SW5zdHJ1bWVudGF0aW9uSGFuZGxlcihfZ2V0SGlzdG9yeUJyZWFkY3J1bWJIYW5kbGVyKGNsaWVudCkpO1xuICAgICAgfVxuICAgICAgaWYgKF9vcHRpb25zLnNlbnRyeSkge1xuICAgICAgICBjbGllbnQub24oJ2JlZm9yZVNlbmRFdmVudCcsIF9nZXRTZW50cnlCcmVhZGNydW1iSGFuZGxlcihjbGllbnQpKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufSkgO1xuXG5jb25zdCBicmVhZGNydW1ic0ludGVncmF0aW9uID0gZGVmaW5lSW50ZWdyYXRpb24oX2JyZWFkY3J1bWJzSW50ZWdyYXRpb24pO1xuXG4vKipcbiAqIEFkZHMgYSBicmVhZGNydW1iIGZvciBTZW50cnkgZXZlbnRzIG9yIHRyYW5zYWN0aW9ucyBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLlxuICovXG5mdW5jdGlvbiBfZ2V0U2VudHJ5QnJlYWRjcnVtYkhhbmRsZXIoY2xpZW50KSB7XG4gIHJldHVybiBmdW5jdGlvbiBhZGRTZW50cnlCcmVhZGNydW1iKGV2ZW50KSB7XG4gICAgaWYgKGdldENsaWVudCgpICE9PSBjbGllbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhZGRCcmVhZGNydW1iKFxuICAgICAge1xuICAgICAgICBjYXRlZ29yeTogYHNlbnRyeS4ke2V2ZW50LnR5cGUgPT09ICd0cmFuc2FjdGlvbicgPyAndHJhbnNhY3Rpb24nIDogJ2V2ZW50J31gLFxuICAgICAgICBldmVudF9pZDogZXZlbnQuZXZlbnRfaWQsXG4gICAgICAgIGxldmVsOiBldmVudC5sZXZlbCxcbiAgICAgICAgbWVzc2FnZTogZ2V0RXZlbnREZXNjcmlwdGlvbihldmVudCksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBldmVudCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBBIEhPQyB0aGF0IGNyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYnJlYWRjcnVtYnMgZnJvbSBET00gQVBJIGNhbGxzLlxuICogVGhpcyBpcyBhIEhPQyBzbyB0aGF0IHdlIGdldCBhY2Nlc3MgdG8gZG9tIG9wdGlvbnMgaW4gdGhlIGNsb3N1cmUuXG4gKi9cbmZ1bmN0aW9uIF9nZXREb21CcmVhZGNydW1iSGFuZGxlcihcbiAgY2xpZW50LFxuICBkb20sXG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIF9pbm5lckRvbUJyZWFkY3J1bWIoaGFuZGxlckRhdGEpIHtcbiAgICBpZiAoZ2V0Q2xpZW50KCkgIT09IGNsaWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCB0YXJnZXQ7XG4gICAgbGV0IGNvbXBvbmVudE5hbWU7XG4gICAgbGV0IGtleUF0dHJzID0gdHlwZW9mIGRvbSA9PT0gJ29iamVjdCcgPyBkb20uc2VyaWFsaXplQXR0cmlidXRlIDogdW5kZWZpbmVkO1xuXG4gICAgbGV0IG1heFN0cmluZ0xlbmd0aCA9XG4gICAgICB0eXBlb2YgZG9tID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9tLm1heFN0cmluZ0xlbmd0aCA9PT0gJ251bWJlcicgPyBkb20ubWF4U3RyaW5nTGVuZ3RoIDogdW5kZWZpbmVkO1xuICAgIGlmIChtYXhTdHJpbmdMZW5ndGggJiYgbWF4U3RyaW5nTGVuZ3RoID4gTUFYX0FMTE9XRURfU1RSSU5HX0xFTkdUSCkge1xuICAgICAgREVCVUdfQlVJTEQgJiZcbiAgICAgICAgZGVidWcud2FybihcbiAgICAgICAgICBgXFxgZG9tLm1heFN0cmluZ0xlbmd0aFxcYCBjYW5ub3QgZXhjZWVkICR7TUFYX0FMTE9XRURfU1RSSU5HX0xFTkdUSH0sIGJ1dCBhIHZhbHVlIG9mICR7bWF4U3RyaW5nTGVuZ3RofSB3YXMgY29uZmlndXJlZC4gU2VudHJ5IHdpbGwgdXNlICR7TUFYX0FMTE9XRURfU1RSSU5HX0xFTkdUSH0gaW5zdGVhZC5gLFxuICAgICAgICApO1xuICAgICAgbWF4U3RyaW5nTGVuZ3RoID0gTUFYX0FMTE9XRURfU1RSSU5HX0xFTkdUSDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGtleUF0dHJzID09PSAnc3RyaW5nJykge1xuICAgICAga2V5QXR0cnMgPSBba2V5QXR0cnNdO1xuICAgIH1cblxuICAgIC8vIEFjY2Vzc2luZyBldmVudC50YXJnZXQgY2FuIHRocm93IChzZWUgZ2V0c2VudHJ5L3JhdmVuLWpzIzgzOCwgIzc2OClcbiAgICB0cnkge1xuICAgICAgY29uc3QgZXZlbnQgPSBoYW5kbGVyRGF0YS5ldmVudCA7XG4gICAgICBjb25zdCBlbGVtZW50ID0gX2lzRXZlbnQoZXZlbnQpID8gZXZlbnQudGFyZ2V0IDogZXZlbnQ7XG5cbiAgICAgIHRhcmdldCA9IGh0bWxUcmVlQXNTdHJpbmcoZWxlbWVudCwgeyBrZXlBdHRycywgbWF4U3RyaW5nTGVuZ3RoIH0pO1xuICAgICAgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZWxlbWVudCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0YXJnZXQgPSAnPHVua25vd24+JztcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJyZWFkY3J1bWIgPSB7XG4gICAgICBjYXRlZ29yeTogYHVpLiR7aGFuZGxlckRhdGEubmFtZX1gLFxuICAgICAgbWVzc2FnZTogdGFyZ2V0LFxuICAgIH07XG5cbiAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgYnJlYWRjcnVtYi5kYXRhID0geyAndWkuY29tcG9uZW50X25hbWUnOiBjb21wb25lbnROYW1lIH07XG4gICAgfVxuXG4gICAgYWRkQnJlYWRjcnVtYihicmVhZGNydW1iLCB7XG4gICAgICBldmVudDogaGFuZGxlckRhdGEuZXZlbnQsXG4gICAgICBuYW1lOiBoYW5kbGVyRGF0YS5uYW1lLFxuICAgICAgZ2xvYmFsOiBoYW5kbGVyRGF0YS5nbG9iYWwsXG4gICAgfSk7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBicmVhZGNydW1icyBmcm9tIGNvbnNvbGUgQVBJIGNhbGxzXG4gKi9cbmZ1bmN0aW9uIF9nZXRDb25zb2xlQnJlYWRjcnVtYkhhbmRsZXIoY2xpZW50KSB7XG4gIHJldHVybiBmdW5jdGlvbiBfY29uc29sZUJyZWFkY3J1bWIoaGFuZGxlckRhdGEpIHtcbiAgICBpZiAoZ2V0Q2xpZW50KCkgIT09IGNsaWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJyZWFkY3J1bWIgPSB7XG4gICAgICBjYXRlZ29yeTogJ2NvbnNvbGUnLFxuICAgICAgZGF0YToge1xuICAgICAgICBhcmd1bWVudHM6IGhhbmRsZXJEYXRhLmFyZ3MsXG4gICAgICAgIGxvZ2dlcjogJ2NvbnNvbGUnLFxuICAgICAgfSxcbiAgICAgIGxldmVsOiBzZXZlcml0eUxldmVsRnJvbVN0cmluZyhoYW5kbGVyRGF0YS5sZXZlbCksXG4gICAgICBtZXNzYWdlOiBzYWZlSm9pbihoYW5kbGVyRGF0YS5hcmdzLCAnICcpLFxuICAgIH07XG5cbiAgICBpZiAoaGFuZGxlckRhdGEubGV2ZWwgPT09ICdhc3NlcnQnKSB7XG4gICAgICBpZiAoaGFuZGxlckRhdGEuYXJnc1swXSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWRjcnVtYi5tZXNzYWdlID0gYEFzc2VydGlvbiBmYWlsZWQ6ICR7c2FmZUpvaW4oaGFuZGxlckRhdGEuYXJncy5zbGljZSgxKSwgJyAnKSB8fCAnY29uc29sZS5hc3NlcnQnfWA7XG4gICAgICAgIGJyZWFkY3J1bWIuZGF0YS5hcmd1bWVudHMgPSBoYW5kbGVyRGF0YS5hcmdzLnNsaWNlKDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRG9uJ3QgY2FwdHVyZSBhIGJyZWFkY3J1bWIgZm9yIHBhc3NlZCBhc3NlcnRpb25zXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRCcmVhZGNydW1iKGJyZWFkY3J1bWIsIHtcbiAgICAgIGlucHV0OiBoYW5kbGVyRGF0YS5hcmdzLFxuICAgICAgbGV2ZWw6IGhhbmRsZXJEYXRhLmxldmVsLFxuICAgIH0pO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYnJlYWRjcnVtYnMgZnJvbSBYSFIgQVBJIGNhbGxzXG4gKi9cbmZ1bmN0aW9uIF9nZXRYaHJCcmVhZGNydW1iSGFuZGxlcihjbGllbnQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIF94aHJCcmVhZGNydW1iKGhhbmRsZXJEYXRhKSB7XG4gICAgaWYgKGdldENsaWVudCgpICE9PSBjbGllbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHN0YXJ0VGltZXN0YW1wLCBlbmRUaW1lc3RhbXAgfSA9IGhhbmRsZXJEYXRhO1xuXG4gICAgY29uc3Qgc2VudHJ5WGhyRGF0YSA9IGhhbmRsZXJEYXRhLnhocltTRU5UUllfWEhSX0RBVEFfS0VZXTtcblxuICAgIC8vIFdlIG9ubHkgY2FwdHVyZSBjb21wbGV0ZSwgbm9uLXNlbnRyeSByZXF1ZXN0c1xuICAgIGlmICghc3RhcnRUaW1lc3RhbXAgfHwgIWVuZFRpbWVzdGFtcCB8fCAhc2VudHJ5WGhyRGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgbWV0aG9kLCB1cmwsIHN0YXR1c19jb2RlLCBib2R5IH0gPSBzZW50cnlYaHJEYXRhO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHN0YXR1c19jb2RlLFxuICAgIH07XG5cbiAgICBjb25zdCBoaW50ID0ge1xuICAgICAgeGhyOiBoYW5kbGVyRGF0YS54aHIsXG4gICAgICBpbnB1dDogYm9keSxcbiAgICAgIHN0YXJ0VGltZXN0YW1wLFxuICAgICAgZW5kVGltZXN0YW1wLFxuICAgIH07XG5cbiAgICBjb25zdCBicmVhZGNydW1iID0ge1xuICAgICAgY2F0ZWdvcnk6ICd4aHInLFxuICAgICAgZGF0YSxcbiAgICAgIHR5cGU6ICdodHRwJyxcbiAgICAgIGxldmVsOiBnZXRCcmVhZGNydW1iTG9nTGV2ZWxGcm9tSHR0cFN0YXR1c0NvZGUoc3RhdHVzX2NvZGUpLFxuICAgIH07XG5cbiAgICBjbGllbnQuZW1pdCgnYmVmb3JlT3V0Z29pbmdSZXF1ZXN0QnJlYWRjcnVtYicsIGJyZWFkY3J1bWIsIGhpbnQgKTtcblxuICAgIGFkZEJyZWFkY3J1bWIoYnJlYWRjcnVtYiwgaGludCk7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBicmVhZGNydW1icyBmcm9tIGZldGNoIEFQSSBjYWxsc1xuICovXG5mdW5jdGlvbiBfZ2V0RmV0Y2hCcmVhZGNydW1iSGFuZGxlcihjbGllbnQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIF9mZXRjaEJyZWFkY3J1bWIoaGFuZGxlckRhdGEpIHtcbiAgICBpZiAoZ2V0Q2xpZW50KCkgIT09IGNsaWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc3RhcnRUaW1lc3RhbXAsIGVuZFRpbWVzdGFtcCB9ID0gaGFuZGxlckRhdGE7XG5cbiAgICAvLyBXZSBvbmx5IGNhcHR1cmUgY29tcGxldGUgZmV0Y2ggcmVxdWVzdHNcbiAgICBpZiAoIWVuZFRpbWVzdGFtcCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChoYW5kbGVyRGF0YS5mZXRjaERhdGEudXJsLm1hdGNoKC9zZW50cnlfa2V5LykgJiYgaGFuZGxlckRhdGEuZmV0Y2hEYXRhLm1ldGhvZCA9PT0gJ1BPU1QnKSB7XG4gICAgICAvLyBXZSB3aWxsIG5vdCBjcmVhdGUgYnJlYWRjcnVtYnMgZm9yIGZldGNoIHJlcXVlc3RzIHRoYXQgY29udGFpbiBgc2VudHJ5X2tleWAgKGludGVybmFsIHNlbnRyeSByZXF1ZXN0cylcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAoe1xuICAgICAgbWV0aG9kOiBoYW5kbGVyRGF0YS5mZXRjaERhdGEubWV0aG9kLFxuICAgICAgdXJsOiBoYW5kbGVyRGF0YS5mZXRjaERhdGEudXJsLFxuICAgIH0pO1xuXG4gICAgaWYgKGhhbmRsZXJEYXRhLmVycm9yKSB7XG4gICAgICBjb25zdCBkYXRhID0gaGFuZGxlckRhdGEuZmV0Y2hEYXRhO1xuICAgICAgY29uc3QgaGludCA9IHtcbiAgICAgICAgZGF0YTogaGFuZGxlckRhdGEuZXJyb3IsXG4gICAgICAgIGlucHV0OiBoYW5kbGVyRGF0YS5hcmdzLFxuICAgICAgICBzdGFydFRpbWVzdGFtcCxcbiAgICAgICAgZW5kVGltZXN0YW1wLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgYnJlYWRjcnVtYiA9IHtcbiAgICAgICAgY2F0ZWdvcnk6ICdmZXRjaCcsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICB0eXBlOiAnaHR0cCcsXG4gICAgICB9IDtcblxuICAgICAgY2xpZW50LmVtaXQoJ2JlZm9yZU91dGdvaW5nUmVxdWVzdEJyZWFkY3J1bWInLCBicmVhZGNydW1iLCBoaW50ICk7XG5cbiAgICAgIGFkZEJyZWFkY3J1bWIoYnJlYWRjcnVtYiwgaGludCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gaGFuZGxlckRhdGEucmVzcG9uc2UgO1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgLi4uaGFuZGxlckRhdGEuZmV0Y2hEYXRhLFxuICAgICAgICBzdGF0dXNfY29kZTogcmVzcG9uc2U/LnN0YXR1cyxcbiAgICAgIH07XG5cbiAgICAgIGhhbmRsZXJEYXRhLmZldGNoRGF0YS5yZXF1ZXN0X2JvZHlfc2l6ZTtcbiAgICAgIGhhbmRsZXJEYXRhLmZldGNoRGF0YS5yZXNwb25zZV9ib2R5X3NpemU7XG4gICAgICByZXNwb25zZT8uc3RhdHVzO1xuXG4gICAgICBjb25zdCBoaW50ID0ge1xuICAgICAgICBpbnB1dDogaGFuZGxlckRhdGEuYXJncyxcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgIHN0YXJ0VGltZXN0YW1wLFxuICAgICAgICBlbmRUaW1lc3RhbXAsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBicmVhZGNydW1iID0ge1xuICAgICAgICBjYXRlZ29yeTogJ2ZldGNoJyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgdHlwZTogJ2h0dHAnLFxuICAgICAgICBsZXZlbDogZ2V0QnJlYWRjcnVtYkxvZ0xldmVsRnJvbUh0dHBTdGF0dXNDb2RlKGRhdGEuc3RhdHVzX2NvZGUpLFxuICAgICAgfTtcblxuICAgICAgY2xpZW50LmVtaXQoJ2JlZm9yZU91dGdvaW5nUmVxdWVzdEJyZWFkY3J1bWInLCBicmVhZGNydW1iLCBoaW50ICk7XG5cbiAgICAgIGFkZEJyZWFkY3J1bWIoYnJlYWRjcnVtYiwgaGludCk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYnJlYWRjcnVtYnMgZnJvbSBoaXN0b3J5IEFQSSBjYWxsc1xuICovXG5mdW5jdGlvbiBfZ2V0SGlzdG9yeUJyZWFkY3J1bWJIYW5kbGVyKGNsaWVudCkge1xuICByZXR1cm4gZnVuY3Rpb24gX2hpc3RvcnlCcmVhZGNydW1iKGhhbmRsZXJEYXRhKSB7XG4gICAgaWYgKGdldENsaWVudCgpICE9PSBjbGllbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZnJvbSA9IGhhbmRsZXJEYXRhLmZyb207XG4gICAgbGV0IHRvID0gaGFuZGxlckRhdGEudG87XG4gICAgY29uc3QgcGFyc2VkTG9jID0gcGFyc2VVcmwoV0lORE9XLmxvY2F0aW9uLmhyZWYpO1xuICAgIGxldCBwYXJzZWRGcm9tID0gZnJvbSA/IHBhcnNlVXJsKGZyb20pIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBhcnNlZFRvID0gcGFyc2VVcmwodG8pO1xuXG4gICAgLy8gSW5pdGlhbCBwdXNoU3RhdGUgZG9lc24ndCBwcm92aWRlIGBmcm9tYCBpbmZvcm1hdGlvblxuICAgIGlmICghcGFyc2VkRnJvbT8ucGF0aCkge1xuICAgICAgcGFyc2VkRnJvbSA9IHBhcnNlZExvYztcbiAgICB9XG5cbiAgICAvLyBVc2Ugb25seSB0aGUgcGF0aCBjb21wb25lbnQgb2YgdGhlIFVSTCBpZiB0aGUgVVJMIG1hdGNoZXMgdGhlIGN1cnJlbnRcbiAgICAvLyBkb2N1bWVudCAoYWxtb3N0IGFsbCB0aGUgdGltZSB3aGVuIHVzaW5nIHB1c2hTdGF0ZSlcbiAgICBpZiAocGFyc2VkTG9jLnByb3RvY29sID09PSBwYXJzZWRUby5wcm90b2NvbCAmJiBwYXJzZWRMb2MuaG9zdCA9PT0gcGFyc2VkVG8uaG9zdCkge1xuICAgICAgdG8gPSBwYXJzZWRUby5yZWxhdGl2ZTtcbiAgICB9XG4gICAgaWYgKHBhcnNlZExvYy5wcm90b2NvbCA9PT0gcGFyc2VkRnJvbS5wcm90b2NvbCAmJiBwYXJzZWRMb2MuaG9zdCA9PT0gcGFyc2VkRnJvbS5ob3N0KSB7XG4gICAgICBmcm9tID0gcGFyc2VkRnJvbS5yZWxhdGl2ZTtcbiAgICB9XG5cbiAgICBhZGRCcmVhZGNydW1iKHtcbiAgICAgIGNhdGVnb3J5OiAnbmF2aWdhdGlvbicsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGZyb20sXG4gICAgICAgIHRvLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gX2lzRXZlbnQoZXZlbnQpIHtcbiAgcmV0dXJuICEhZXZlbnQgJiYgISEoZXZlbnQgKS50YXJnZXQ7XG59XG5cbmV4cG9ydCB7IGJyZWFkY3J1bWJzSW50ZWdyYXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJyZWFkY3J1bWJzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/breadcrumbs.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/browserapierrors.js":
/*!*******************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/browserapierrors.js ***!
  \*******************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   browserApiErrorsIntegration: () => (/* binding */ browserApiErrorsIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\");\n\n\n\nconst DEFAULT_EVENT_TARGET = [\n  'EventTarget',\n  'Window',\n  'Node',\n  'ApplicationCache',\n  'AudioTrackList',\n  'BroadcastChannel',\n  'ChannelMergerNode',\n  'CryptoOperation',\n  'EventSource',\n  'FileReader',\n  'HTMLUnknownElement',\n  'IDBDatabase',\n  'IDBRequest',\n  'IDBTransaction',\n  'KeyOperation',\n  'MediaController',\n  'MessagePort',\n  'ModalWindow',\n  'Notification',\n  'SVGElementInstance',\n  'Screen',\n  'SharedWorker',\n  'TextTrack',\n  'TextTrackCue',\n  'TextTrackList',\n  'WebSocket',\n  'WebSocketWorker',\n  'Worker',\n  'XMLHttpRequest',\n  'XMLHttpRequestEventTarget',\n  'XMLHttpRequestUpload',\n];\n\nconst INTEGRATION_NAME = 'BrowserApiErrors';\n\nconst _browserApiErrorsIntegration = ((options = {}) => {\n  const _options = {\n    XMLHttpRequest: true,\n    eventTarget: true,\n    requestAnimationFrame: true,\n    setInterval: true,\n    setTimeout: true,\n    unregisterOriginalCallbacks: false,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    // TODO: This currently only works for the first client this is setup\n    // We may want to adjust this to check for client etc.\n    setupOnce() {\n      if (_options.setTimeout) {\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.fill)(_helpers_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW, 'setTimeout', _wrapTimeFunction);\n      }\n\n      if (_options.setInterval) {\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.fill)(_helpers_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW, 'setInterval', _wrapTimeFunction);\n      }\n\n      if (_options.requestAnimationFrame) {\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.fill)(_helpers_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW, 'requestAnimationFrame', _wrapRAF);\n      }\n\n      if (_options.XMLHttpRequest && \"XMLHttpRequest\" in _helpers_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW) {\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.fill)(XMLHttpRequest.prototype, 'send', _wrapXHR);\n      }\n\n      const eventTargetOption = _options.eventTarget;\n      if (eventTargetOption) {\n        const eventTarget = Array.isArray(eventTargetOption) ? eventTargetOption : DEFAULT_EVENT_TARGET;\n        eventTarget.forEach(target => _wrapEventTarget(target, _options));\n      }\n    },\n  };\n}) ;\n\n/**\n * Wrap timer functions and event targets to catch errors and provide better meta data.\n */\nconst browserApiErrorsIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(_browserApiErrorsIntegration);\n\nfunction _wrapTimeFunction(original) {\n  return function ( ...args) {\n    const originalCallback = args[0];\n    args[0] = (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.wrap)(originalCallback, {\n      mechanism: {\n        data: { function: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getFunctionName)(original) },\n        handled: false,\n        type: 'instrument',\n      },\n    });\n    return original.apply(this, args);\n  };\n}\n\nfunction _wrapRAF(original) {\n  return function ( callback) {\n    return original.apply(this, [\n      (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.wrap)(callback, {\n        mechanism: {\n          data: {\n            function: 'requestAnimationFrame',\n            handler: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getFunctionName)(original),\n          },\n          handled: false,\n          type: 'instrument',\n        },\n      }),\n    ]);\n  };\n}\n\nfunction _wrapXHR(originalSend) {\n  return function ( ...args) {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    const xhr = this;\n    const xmlHttpRequestProps = ['onload', 'onerror', 'onprogress', 'onreadystatechange'];\n\n    xmlHttpRequestProps.forEach(prop => {\n      if (prop in xhr && typeof xhr[prop] === 'function') {\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.fill)(xhr, prop, function (original) {\n          const wrapOptions = {\n            mechanism: {\n              data: {\n                function: prop,\n                handler: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getFunctionName)(original),\n              },\n              handled: false,\n              type: 'instrument',\n            },\n          };\n\n          // If Instrument integration has been called before BrowserApiErrors, get the name of original function\n          const originalFunction = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getOriginalFunction)(original);\n          if (originalFunction) {\n            wrapOptions.mechanism.data.handler = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getFunctionName)(originalFunction);\n          }\n\n          // Otherwise wrap directly\n          return (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.wrap)(original, wrapOptions);\n        });\n      }\n    });\n\n    return originalSend.apply(this, args);\n  };\n}\n\nfunction _wrapEventTarget(target, integrationOptions) {\n  const globalObject = _helpers_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW ;\n  const proto = globalObject[target]?.prototype;\n\n  // eslint-disable-next-line no-prototype-builtins\n  if (!proto?.hasOwnProperty?.('addEventListener')) {\n    return;\n  }\n\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.fill)(proto, 'addEventListener', function (original)\n\n {\n    return function ( eventName, fn, options) {\n      try {\n        if (isEventListenerObject(fn)) {\n          // ESlint disable explanation:\n          //  First, it is generally safe to call `wrap` with an unbound function. Furthermore, using `.bind()` would\n          //  introduce a bug here, because bind returns a new function that doesn't have our\n          //  flags(like __sentry_original__) attached. `wrap` checks for those flags to avoid unnecessary wrapping.\n          //  Without those flags, every call to addEventListener wraps the function again, causing a memory leak.\n          // eslint-disable-next-line @typescript-eslint/unbound-method\n          fn.handleEvent = (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.wrap)(fn.handleEvent, {\n            mechanism: {\n              data: {\n                function: 'handleEvent',\n                handler: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getFunctionName)(fn),\n                target,\n              },\n              handled: false,\n              type: 'instrument',\n            },\n          });\n        }\n      } catch {\n        // can sometimes get 'Permission denied to access property \"handle Event'\n      }\n\n      if (integrationOptions.unregisterOriginalCallbacks) {\n        unregisterOriginalCallback(this, eventName, fn);\n      }\n\n      return original.apply(this, [\n        eventName,\n        (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.wrap)(fn, {\n          mechanism: {\n            data: {\n              function: 'addEventListener',\n              handler: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getFunctionName)(fn),\n              target,\n            },\n            handled: false,\n            type: 'instrument',\n          },\n        }),\n        options,\n      ]);\n    };\n  });\n\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.fill)(proto, 'removeEventListener', function (originalRemoveEventListener)\n\n {\n    return function ( eventName, fn, options) {\n      /**\n       * There are 2 possible scenarios here:\n       *\n       * 1. Someone passes a callback, which was attached prior to Sentry initialization, or by using unmodified\n       * method, eg. `document.addEventListener.call(el, name, handler). In this case, we treat this function\n       * as a pass-through, and call original `removeEventListener` with it.\n       *\n       * 2. Someone passes a callback, which was attached after Sentry was initialized, which means that it was using\n       * our wrapped version of `addEventListener`, which internally calls `wrap` helper.\n       * This helper \"wraps\" whole callback inside a try/catch statement, and attached appropriate metadata to it,\n       * in order for us to make a distinction between wrapped/non-wrapped functions possible.\n       * If a function was wrapped, it has additional property of `__sentry_wrapped__`, holding the handler.\n       *\n       * When someone adds a handler prior to initialization, and then do it again, but after,\n       * then we have to detach both of them. Otherwise, if we'd detach only wrapped one, it'd be impossible\n       * to get rid of the initial handler and it'd stick there forever.\n       */\n      try {\n        const originalEventHandler = (fn ).__sentry_wrapped__;\n        if (originalEventHandler) {\n          originalRemoveEventListener.call(this, eventName, originalEventHandler, options);\n        }\n      } catch {\n        // ignore, accessing __sentry_wrapped__ will throw in some Selenium environments\n      }\n      return originalRemoveEventListener.call(this, eventName, fn, options);\n    };\n  });\n}\n\nfunction isEventListenerObject(obj) {\n  return typeof (obj ).handleEvent === 'function';\n}\n\nfunction unregisterOriginalCallback(target, eventName, fn) {\n  if (\n    target &&\n    typeof target === 'object' &&\n    'removeEventListener' in target &&\n    typeof target.removeEventListener === 'function'\n  ) {\n    target.removeEventListener(eventName, fn);\n  }\n}\n\n\n//# sourceMappingURL=browserapierrors.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbnRlZ3JhdGlvbnMvYnJvd3NlcmFwaWVycm9ycy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBNkY7QUFDaEQ7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsa0RBQUksQ0FBQywrQ0FBTTtBQUNuQjs7QUFFQTtBQUNBLFFBQVEsa0RBQUksQ0FBQywrQ0FBTTtBQUNuQjs7QUFFQTtBQUNBLFFBQVEsa0RBQUksQ0FBQywrQ0FBTTtBQUNuQjs7QUFFQSxxQ0FBcUMsbUVBQTBCO0FBQy9ELFFBQVEsa0RBQUk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsK0RBQWlCOztBQUVyRDtBQUNBO0FBQ0E7QUFDQSxjQUFjLGlEQUFJO0FBQ2xCO0FBQ0EsZ0JBQWdCLFVBQVUsNkRBQWUsWUFBWTtBQUNyRDtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTSxpREFBSTtBQUNWO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiw2REFBZTtBQUNwQyxXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVEsa0RBQUk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qiw2REFBZTtBQUN4QyxlQUFlO0FBQ2Y7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBLG1DQUFtQyxpRUFBbUI7QUFDdEQ7QUFDQSxpREFBaUQsNkRBQWU7QUFDaEU7O0FBRUE7QUFDQSxpQkFBaUIsaURBQUk7QUFDckIsU0FBUztBQUNUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsK0NBQU07QUFDN0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsRUFBRSxrREFBSTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixpREFBSTtBQUMvQjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsNkRBQWU7QUFDeEM7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVEsaURBQUk7QUFDWjtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsNkRBQWU7QUFDdEM7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCxFQUFFLGtEQUFJOztBQUVOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRXVDO0FBQ3ZDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrYnJvd3NlckA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9idWlsZC9ucG0vZXNtL2ludGVncmF0aW9ucy9icm93c2VyYXBpZXJyb3JzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmluZUludGVncmF0aW9uLCBmaWxsLCBnZXRGdW5jdGlvbk5hbWUsIGdldE9yaWdpbmFsRnVuY3Rpb24gfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgV0lORE9XLCB3cmFwIH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5cbmNvbnN0IERFRkFVTFRfRVZFTlRfVEFSR0VUID0gW1xuICAnRXZlbnRUYXJnZXQnLFxuICAnV2luZG93JyxcbiAgJ05vZGUnLFxuICAnQXBwbGljYXRpb25DYWNoZScsXG4gICdBdWRpb1RyYWNrTGlzdCcsXG4gICdCcm9hZGNhc3RDaGFubmVsJyxcbiAgJ0NoYW5uZWxNZXJnZXJOb2RlJyxcbiAgJ0NyeXB0b09wZXJhdGlvbicsXG4gICdFdmVudFNvdXJjZScsXG4gICdGaWxlUmVhZGVyJyxcbiAgJ0hUTUxVbmtub3duRWxlbWVudCcsXG4gICdJREJEYXRhYmFzZScsXG4gICdJREJSZXF1ZXN0JyxcbiAgJ0lEQlRyYW5zYWN0aW9uJyxcbiAgJ0tleU9wZXJhdGlvbicsXG4gICdNZWRpYUNvbnRyb2xsZXInLFxuICAnTWVzc2FnZVBvcnQnLFxuICAnTW9kYWxXaW5kb3cnLFxuICAnTm90aWZpY2F0aW9uJyxcbiAgJ1NWR0VsZW1lbnRJbnN0YW5jZScsXG4gICdTY3JlZW4nLFxuICAnU2hhcmVkV29ya2VyJyxcbiAgJ1RleHRUcmFjaycsXG4gICdUZXh0VHJhY2tDdWUnLFxuICAnVGV4dFRyYWNrTGlzdCcsXG4gICdXZWJTb2NrZXQnLFxuICAnV2ViU29ja2V0V29ya2VyJyxcbiAgJ1dvcmtlcicsXG4gICdYTUxIdHRwUmVxdWVzdCcsXG4gICdYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0JyxcbiAgJ1hNTEh0dHBSZXF1ZXN0VXBsb2FkJyxcbl07XG5cbmNvbnN0IElOVEVHUkFUSU9OX05BTUUgPSAnQnJvd3NlckFwaUVycm9ycyc7XG5cbmNvbnN0IF9icm93c2VyQXBpRXJyb3JzSW50ZWdyYXRpb24gPSAoKG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBfb3B0aW9ucyA9IHtcbiAgICBYTUxIdHRwUmVxdWVzdDogdHJ1ZSxcbiAgICBldmVudFRhcmdldDogdHJ1ZSxcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IHRydWUsXG4gICAgc2V0SW50ZXJ2YWw6IHRydWUsXG4gICAgc2V0VGltZW91dDogdHJ1ZSxcbiAgICB1bnJlZ2lzdGVyT3JpZ2luYWxDYWxsYmFja3M6IGZhbHNlLFxuICAgIC4uLm9wdGlvbnMsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBJTlRFR1JBVElPTl9OQU1FLFxuICAgIC8vIFRPRE86IFRoaXMgY3VycmVudGx5IG9ubHkgd29ya3MgZm9yIHRoZSBmaXJzdCBjbGllbnQgdGhpcyBpcyBzZXR1cFxuICAgIC8vIFdlIG1heSB3YW50IHRvIGFkanVzdCB0aGlzIHRvIGNoZWNrIGZvciBjbGllbnQgZXRjLlxuICAgIHNldHVwT25jZSgpIHtcbiAgICAgIGlmIChfb3B0aW9ucy5zZXRUaW1lb3V0KSB7XG4gICAgICAgIGZpbGwoV0lORE9XLCAnc2V0VGltZW91dCcsIF93cmFwVGltZUZ1bmN0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9vcHRpb25zLnNldEludGVydmFsKSB7XG4gICAgICAgIGZpbGwoV0lORE9XLCAnc2V0SW50ZXJ2YWwnLCBfd3JhcFRpbWVGdW5jdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChfb3B0aW9ucy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgZmlsbChXSU5ET1csICdyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnLCBfd3JhcFJBRik7XG4gICAgICB9XG5cbiAgICAgIGlmIChfb3B0aW9ucy5YTUxIdHRwUmVxdWVzdCAmJiAnWE1MSHR0cFJlcXVlc3QnIGluIFdJTkRPVykge1xuICAgICAgICBmaWxsKFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwgJ3NlbmQnLCBfd3JhcFhIUik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV2ZW50VGFyZ2V0T3B0aW9uID0gX29wdGlvbnMuZXZlbnRUYXJnZXQ7XG4gICAgICBpZiAoZXZlbnRUYXJnZXRPcHRpb24pIHtcbiAgICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPSBBcnJheS5pc0FycmF5KGV2ZW50VGFyZ2V0T3B0aW9uKSA/IGV2ZW50VGFyZ2V0T3B0aW9uIDogREVGQVVMVF9FVkVOVF9UQVJHRVQ7XG4gICAgICAgIGV2ZW50VGFyZ2V0LmZvckVhY2godGFyZ2V0ID0+IF93cmFwRXZlbnRUYXJnZXQodGFyZ2V0LCBfb3B0aW9ucykpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59KSA7XG5cbi8qKlxuICogV3JhcCB0aW1lciBmdW5jdGlvbnMgYW5kIGV2ZW50IHRhcmdldHMgdG8gY2F0Y2ggZXJyb3JzIGFuZCBwcm92aWRlIGJldHRlciBtZXRhIGRhdGEuXG4gKi9cbmNvbnN0IGJyb3dzZXJBcGlFcnJvcnNJbnRlZ3JhdGlvbiA9IGRlZmluZUludGVncmF0aW9uKF9icm93c2VyQXBpRXJyb3JzSW50ZWdyYXRpb24pO1xuXG5mdW5jdGlvbiBfd3JhcFRpbWVGdW5jdGlvbihvcmlnaW5hbCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCAuLi5hcmdzKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxDYWxsYmFjayA9IGFyZ3NbMF07XG4gICAgYXJnc1swXSA9IHdyYXAob3JpZ2luYWxDYWxsYmFjaywge1xuICAgICAgbWVjaGFuaXNtOiB7XG4gICAgICAgIGRhdGE6IHsgZnVuY3Rpb246IGdldEZ1bmN0aW9uTmFtZShvcmlnaW5hbCkgfSxcbiAgICAgICAgaGFuZGxlZDogZmFsc2UsXG4gICAgICAgIHR5cGU6ICdpbnN0cnVtZW50JyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBfd3JhcFJBRihvcmlnaW5hbCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCBjYWxsYmFjaykge1xuICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBbXG4gICAgICB3cmFwKGNhbGxiYWNrLCB7XG4gICAgICAgIG1lY2hhbmlzbToge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiAncmVxdWVzdEFuaW1hdGlvbkZyYW1lJyxcbiAgICAgICAgICAgIGhhbmRsZXI6IGdldEZ1bmN0aW9uTmFtZShvcmlnaW5hbCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBoYW5kbGVkOiBmYWxzZSxcbiAgICAgICAgICB0eXBlOiAnaW5zdHJ1bWVudCcsXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICBdKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gX3dyYXBYSFIob3JpZ2luYWxTZW5kKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoIC4uLmFyZ3MpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICBjb25zdCB4aHIgPSB0aGlzO1xuICAgIGNvbnN0IHhtbEh0dHBSZXF1ZXN0UHJvcHMgPSBbJ29ubG9hZCcsICdvbmVycm9yJywgJ29ucHJvZ3Jlc3MnLCAnb25yZWFkeXN0YXRlY2hhbmdlJ107XG5cbiAgICB4bWxIdHRwUmVxdWVzdFByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBpZiAocHJvcCBpbiB4aHIgJiYgdHlwZW9mIHhocltwcm9wXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmaWxsKHhociwgcHJvcCwgZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gICAgICAgICAgY29uc3Qgd3JhcE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBtZWNoYW5pc206IHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uOiBwcm9wLFxuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGdldEZ1bmN0aW9uTmFtZShvcmlnaW5hbCksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGhhbmRsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICB0eXBlOiAnaW5zdHJ1bWVudCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICAvLyBJZiBJbnN0cnVtZW50IGludGVncmF0aW9uIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUgQnJvd3NlckFwaUVycm9ycywgZ2V0IHRoZSBuYW1lIG9mIG9yaWdpbmFsIGZ1bmN0aW9uXG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxGdW5jdGlvbiA9IGdldE9yaWdpbmFsRnVuY3Rpb24ob3JpZ2luYWwpO1xuICAgICAgICAgIGlmIChvcmlnaW5hbEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICB3cmFwT3B0aW9ucy5tZWNoYW5pc20uZGF0YS5oYW5kbGVyID0gZ2V0RnVuY3Rpb25OYW1lKG9yaWdpbmFsRnVuY3Rpb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE90aGVyd2lzZSB3cmFwIGRpcmVjdGx5XG4gICAgICAgICAgcmV0dXJuIHdyYXAob3JpZ2luYWwsIHdyYXBPcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb3JpZ2luYWxTZW5kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBfd3JhcEV2ZW50VGFyZ2V0KHRhcmdldCwgaW50ZWdyYXRpb25PcHRpb25zKSB7XG4gIGNvbnN0IGdsb2JhbE9iamVjdCA9IFdJTkRPVyA7XG4gIGNvbnN0IHByb3RvID0gZ2xvYmFsT2JqZWN0W3RhcmdldF0/LnByb3RvdHlwZTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIGlmICghcHJvdG8/Lmhhc093blByb3BlcnR5Py4oJ2FkZEV2ZW50TGlzdGVuZXInKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZpbGwocHJvdG8sICdhZGRFdmVudExpc3RlbmVyJywgZnVuY3Rpb24gKG9yaWdpbmFsKVxuXG4ge1xuICAgIHJldHVybiBmdW5jdGlvbiAoIGV2ZW50TmFtZSwgZm4sIG9wdGlvbnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChpc0V2ZW50TGlzdGVuZXJPYmplY3QoZm4pKSB7XG4gICAgICAgICAgLy8gRVNsaW50IGRpc2FibGUgZXhwbGFuYXRpb246XG4gICAgICAgICAgLy8gIEZpcnN0LCBpdCBpcyBnZW5lcmFsbHkgc2FmZSB0byBjYWxsIGB3cmFwYCB3aXRoIGFuIHVuYm91bmQgZnVuY3Rpb24uIEZ1cnRoZXJtb3JlLCB1c2luZyBgLmJpbmQoKWAgd291bGRcbiAgICAgICAgICAvLyAgaW50cm9kdWNlIGEgYnVnIGhlcmUsIGJlY2F1c2UgYmluZCByZXR1cm5zIGEgbmV3IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCBoYXZlIG91clxuICAgICAgICAgIC8vICBmbGFncyhsaWtlIF9fc2VudHJ5X29yaWdpbmFsX18pIGF0dGFjaGVkLiBgd3JhcGAgY2hlY2tzIGZvciB0aG9zZSBmbGFncyB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3cmFwcGluZy5cbiAgICAgICAgICAvLyAgV2l0aG91dCB0aG9zZSBmbGFncywgZXZlcnkgY2FsbCB0byBhZGRFdmVudExpc3RlbmVyIHdyYXBzIHRoZSBmdW5jdGlvbiBhZ2FpbiwgY2F1c2luZyBhIG1lbW9yeSBsZWFrLlxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgICAgICBmbi5oYW5kbGVFdmVudCA9IHdyYXAoZm4uaGFuZGxlRXZlbnQsIHtcbiAgICAgICAgICAgIG1lY2hhbmlzbToge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb246ICdoYW5kbGVFdmVudCcsXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogZ2V0RnVuY3Rpb25OYW1lKGZuKSxcbiAgICAgICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGhhbmRsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICB0eXBlOiAnaW5zdHJ1bWVudCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gY2FuIHNvbWV0aW1lcyBnZXQgJ1Blcm1pc3Npb24gZGVuaWVkIHRvIGFjY2VzcyBwcm9wZXJ0eSBcImhhbmRsZSBFdmVudCdcbiAgICAgIH1cblxuICAgICAgaWYgKGludGVncmF0aW9uT3B0aW9ucy51bnJlZ2lzdGVyT3JpZ2luYWxDYWxsYmFja3MpIHtcbiAgICAgICAgdW5yZWdpc3Rlck9yaWdpbmFsQ2FsbGJhY2sodGhpcywgZXZlbnROYW1lLCBmbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBbXG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgd3JhcChmbiwge1xuICAgICAgICAgIG1lY2hhbmlzbToge1xuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBmdW5jdGlvbjogJ2FkZEV2ZW50TGlzdGVuZXInLFxuICAgICAgICAgICAgICBoYW5kbGVyOiBnZXRGdW5jdGlvbk5hbWUoZm4pLFxuICAgICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFuZGxlZDogZmFsc2UsXG4gICAgICAgICAgICB0eXBlOiAnaW5zdHJ1bWVudCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICBdKTtcbiAgICB9O1xuICB9KTtcblxuICBmaWxsKHByb3RvLCAncmVtb3ZlRXZlbnRMaXN0ZW5lcicsIGZ1bmN0aW9uIChvcmlnaW5hbFJlbW92ZUV2ZW50TGlzdGVuZXIpXG5cbiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICggZXZlbnROYW1lLCBmbiwgb3B0aW9ucykge1xuICAgICAgLyoqXG4gICAgICAgKiBUaGVyZSBhcmUgMiBwb3NzaWJsZSBzY2VuYXJpb3MgaGVyZTpcbiAgICAgICAqXG4gICAgICAgKiAxLiBTb21lb25lIHBhc3NlcyBhIGNhbGxiYWNrLCB3aGljaCB3YXMgYXR0YWNoZWQgcHJpb3IgdG8gU2VudHJ5IGluaXRpYWxpemF0aW9uLCBvciBieSB1c2luZyB1bm1vZGlmaWVkXG4gICAgICAgKiBtZXRob2QsIGVnLiBgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lci5jYWxsKGVsLCBuYW1lLCBoYW5kbGVyKS4gSW4gdGhpcyBjYXNlLCB3ZSB0cmVhdCB0aGlzIGZ1bmN0aW9uXG4gICAgICAgKiBhcyBhIHBhc3MtdGhyb3VnaCwgYW5kIGNhbGwgb3JpZ2luYWwgYHJlbW92ZUV2ZW50TGlzdGVuZXJgIHdpdGggaXQuXG4gICAgICAgKlxuICAgICAgICogMi4gU29tZW9uZSBwYXNzZXMgYSBjYWxsYmFjaywgd2hpY2ggd2FzIGF0dGFjaGVkIGFmdGVyIFNlbnRyeSB3YXMgaW5pdGlhbGl6ZWQsIHdoaWNoIG1lYW5zIHRoYXQgaXQgd2FzIHVzaW5nXG4gICAgICAgKiBvdXIgd3JhcHBlZCB2ZXJzaW9uIG9mIGBhZGRFdmVudExpc3RlbmVyYCwgd2hpY2ggaW50ZXJuYWxseSBjYWxscyBgd3JhcGAgaGVscGVyLlxuICAgICAgICogVGhpcyBoZWxwZXIgXCJ3cmFwc1wiIHdob2xlIGNhbGxiYWNrIGluc2lkZSBhIHRyeS9jYXRjaCBzdGF0ZW1lbnQsIGFuZCBhdHRhY2hlZCBhcHByb3ByaWF0ZSBtZXRhZGF0YSB0byBpdCxcbiAgICAgICAqIGluIG9yZGVyIGZvciB1cyB0byBtYWtlIGEgZGlzdGluY3Rpb24gYmV0d2VlbiB3cmFwcGVkL25vbi13cmFwcGVkIGZ1bmN0aW9ucyBwb3NzaWJsZS5cbiAgICAgICAqIElmIGEgZnVuY3Rpb24gd2FzIHdyYXBwZWQsIGl0IGhhcyBhZGRpdGlvbmFsIHByb3BlcnR5IG9mIGBfX3NlbnRyeV93cmFwcGVkX19gLCBob2xkaW5nIHRoZSBoYW5kbGVyLlxuICAgICAgICpcbiAgICAgICAqIFdoZW4gc29tZW9uZSBhZGRzIGEgaGFuZGxlciBwcmlvciB0byBpbml0aWFsaXphdGlvbiwgYW5kIHRoZW4gZG8gaXQgYWdhaW4sIGJ1dCBhZnRlcixcbiAgICAgICAqIHRoZW4gd2UgaGF2ZSB0byBkZXRhY2ggYm90aCBvZiB0aGVtLiBPdGhlcndpc2UsIGlmIHdlJ2QgZGV0YWNoIG9ubHkgd3JhcHBlZCBvbmUsIGl0J2QgYmUgaW1wb3NzaWJsZVxuICAgICAgICogdG8gZ2V0IHJpZCBvZiB0aGUgaW5pdGlhbCBoYW5kbGVyIGFuZCBpdCdkIHN0aWNrIHRoZXJlIGZvcmV2ZXIuXG4gICAgICAgKi9cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRXZlbnRIYW5kbGVyID0gKGZuICkuX19zZW50cnlfd3JhcHBlZF9fO1xuICAgICAgICBpZiAob3JpZ2luYWxFdmVudEhhbmRsZXIpIHtcbiAgICAgICAgICBvcmlnaW5hbFJlbW92ZUV2ZW50TGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudE5hbWUsIG9yaWdpbmFsRXZlbnRIYW5kbGVyLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIGlnbm9yZSwgYWNjZXNzaW5nIF9fc2VudHJ5X3dyYXBwZWRfXyB3aWxsIHRocm93IGluIHNvbWUgU2VsZW5pdW0gZW52aXJvbm1lbnRzXG4gICAgICB9XG4gICAgICByZXR1cm4gb3JpZ2luYWxSZW1vdmVFdmVudExpc3RlbmVyLmNhbGwodGhpcywgZXZlbnROYW1lLCBmbiwgb3B0aW9ucyk7XG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzRXZlbnRMaXN0ZW5lck9iamVjdChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiAob2JqICkuaGFuZGxlRXZlbnQgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIHVucmVnaXN0ZXJPcmlnaW5hbENhbGxiYWNrKHRhcmdldCwgZXZlbnROYW1lLCBmbikge1xuICBpZiAoXG4gICAgdGFyZ2V0ICYmXG4gICAgdHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcgJiZcbiAgICAncmVtb3ZlRXZlbnRMaXN0ZW5lcicgaW4gdGFyZ2V0ICYmXG4gICAgdHlwZW9mIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZm4pO1xuICB9XG59XG5cbmV4cG9ydCB7IGJyb3dzZXJBcGlFcnJvcnNJbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnJvd3NlcmFwaWVycm9ycy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/browserapierrors.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/browsersession.js":
/*!*****************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/browsersession.js ***!
  \*****************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   browserSessionIntegration: () => (/* binding */ browserSessionIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry-internal/browser-utils */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/debug-build.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../helpers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\");\n\n\n\n\n\n/**\n * When added, automatically creates sessions which allow you to track adoption and crashes (crash free rate) in your Releases in Sentry.\n * More information: https://docs.sentry.io/product/releases/health/\n *\n * Note: In order for session tracking to work, you need to set up Releases: https://docs.sentry.io/product/releases/\n */\nconst browserSessionIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(() => {\n  return {\n    name: 'BrowserSession',\n    setupOnce() {\n      if (typeof _helpers_js__WEBPACK_IMPORTED_MODULE_3__.WINDOW.document === 'undefined') {\n        _debug_build_js__WEBPACK_IMPORTED_MODULE_2__.DEBUG_BUILD &&\n          _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn('Using the `browserSessionIntegration` in non-browser environments is not supported.');\n        return;\n      }\n\n      // The session duration for browser sessions does not track a meaningful\n      // concept that can be used as a metric.\n      // Automatically captured sessions are akin to page views, and thus we\n      // discard their duration.\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.startSession)({ ignoreDuration: true });\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureSession)();\n\n      // We want to create a session for every navigation as well\n      (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.addHistoryInstrumentationHandler)(({ from, to }) => {\n        // Don't create an additional session for the initial route or if the location did not change\n        if (from !== undefined && from !== to) {\n          (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.startSession)({ ignoreDuration: true });\n          (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureSession)();\n        }\n      });\n    },\n  };\n});\n\n\n//# sourceMappingURL=browsersession.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbnRlZ3JhdGlvbnMvYnJvd3NlcnNlc3Npb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBc0Y7QUFDSjtBQUNsQztBQUNUOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsK0RBQWlCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiwrQ0FBTTtBQUN2QixRQUFRLHdEQUFXO0FBQ25CLFVBQVUsK0NBQUs7QUFDZjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSwwREFBWSxHQUFHLHNCQUFzQjtBQUMzQyxNQUFNLDREQUFjOztBQUVwQjtBQUNBLE1BQU0sZ0dBQWdDLElBQUksVUFBVTtBQUNwRDtBQUNBO0FBQ0EsVUFBVSwwREFBWSxHQUFHLHNCQUFzQjtBQUMvQyxVQUFVLDREQUFjO0FBQ3hCO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRW9DO0FBQ3JDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrYnJvd3NlckA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9idWlsZC9ucG0vZXNtL2ludGVncmF0aW9ucy9icm93c2Vyc2Vzc2lvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZpbmVJbnRlZ3JhdGlvbiwgZGVidWcsIHN0YXJ0U2Vzc2lvbiwgY2FwdHVyZVNlc3Npb24gfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgYWRkSGlzdG9yeUluc3RydW1lbnRhdGlvbkhhbmRsZXIgfSBmcm9tICdAc2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMnO1xuaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBXSU5ET1cgfSBmcm9tICcuLi9oZWxwZXJzLmpzJztcblxuLyoqXG4gKiBXaGVuIGFkZGVkLCBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgc2Vzc2lvbnMgd2hpY2ggYWxsb3cgeW91IHRvIHRyYWNrIGFkb3B0aW9uIGFuZCBjcmFzaGVzIChjcmFzaCBmcmVlIHJhdGUpIGluIHlvdXIgUmVsZWFzZXMgaW4gU2VudHJ5LlxuICogTW9yZSBpbmZvcm1hdGlvbjogaHR0cHM6Ly9kb2NzLnNlbnRyeS5pby9wcm9kdWN0L3JlbGVhc2VzL2hlYWx0aC9cbiAqXG4gKiBOb3RlOiBJbiBvcmRlciBmb3Igc2Vzc2lvbiB0cmFja2luZyB0byB3b3JrLCB5b3UgbmVlZCB0byBzZXQgdXAgUmVsZWFzZXM6IGh0dHBzOi8vZG9jcy5zZW50cnkuaW8vcHJvZHVjdC9yZWxlYXNlcy9cbiAqL1xuY29uc3QgYnJvd3NlclNlc3Npb25JbnRlZ3JhdGlvbiA9IGRlZmluZUludGVncmF0aW9uKCgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnQnJvd3NlclNlc3Npb24nLFxuICAgIHNldHVwT25jZSgpIHtcbiAgICAgIGlmICh0eXBlb2YgV0lORE9XLmRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBERUJVR19CVUlMRCAmJlxuICAgICAgICAgIGRlYnVnLndhcm4oJ1VzaW5nIHRoZSBgYnJvd3NlclNlc3Npb25JbnRlZ3JhdGlvbmAgaW4gbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRzIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIHNlc3Npb24gZHVyYXRpb24gZm9yIGJyb3dzZXIgc2Vzc2lvbnMgZG9lcyBub3QgdHJhY2sgYSBtZWFuaW5nZnVsXG4gICAgICAvLyBjb25jZXB0IHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBtZXRyaWMuXG4gICAgICAvLyBBdXRvbWF0aWNhbGx5IGNhcHR1cmVkIHNlc3Npb25zIGFyZSBha2luIHRvIHBhZ2Ugdmlld3MsIGFuZCB0aHVzIHdlXG4gICAgICAvLyBkaXNjYXJkIHRoZWlyIGR1cmF0aW9uLlxuICAgICAgc3RhcnRTZXNzaW9uKHsgaWdub3JlRHVyYXRpb246IHRydWUgfSk7XG4gICAgICBjYXB0dXJlU2Vzc2lvbigpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIGNyZWF0ZSBhIHNlc3Npb24gZm9yIGV2ZXJ5IG5hdmlnYXRpb24gYXMgd2VsbFxuICAgICAgYWRkSGlzdG9yeUluc3RydW1lbnRhdGlvbkhhbmRsZXIoKHsgZnJvbSwgdG8gfSkgPT4ge1xuICAgICAgICAvLyBEb24ndCBjcmVhdGUgYW4gYWRkaXRpb25hbCBzZXNzaW9uIGZvciB0aGUgaW5pdGlhbCByb3V0ZSBvciBpZiB0aGUgbG9jYXRpb24gZGlkIG5vdCBjaGFuZ2VcbiAgICAgICAgaWYgKGZyb20gIT09IHVuZGVmaW5lZCAmJiBmcm9tICE9PSB0bykge1xuICAgICAgICAgIHN0YXJ0U2Vzc2lvbih7IGlnbm9yZUR1cmF0aW9uOiB0cnVlIH0pO1xuICAgICAgICAgIGNhcHR1cmVTZXNzaW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59KTtcblxuZXhwb3J0IHsgYnJvd3NlclNlc3Npb25JbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnJvd3NlcnNlc3Npb24uanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/browsersession.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/contextlines.js":
/*!***************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/contextlines.js ***!
  \***************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   applySourceContextToFrame: () => (/* binding */ applySourceContextToFrame),\n/* harmony export */   contextLinesIntegration: () => (/* binding */ contextLinesIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\nconst WINDOW = _sentry_core__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ ;\n\nconst DEFAULT_LINES_OF_CONTEXT = 7;\n\nconst INTEGRATION_NAME = 'ContextLines';\n\nconst _contextLinesIntegration = ((options = {}) => {\n  const contextLines = options.frameContextLines != null ? options.frameContextLines : DEFAULT_LINES_OF_CONTEXT;\n\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(event) {\n      return addSourceContext(event, contextLines);\n    },\n  };\n}) ;\n\n/**\n * Collects source context lines around the lines of stackframes pointing to JS embedded in\n * the current page's HTML.\n *\n * This integration DOES NOT work for stack frames pointing to JS files that are loaded by the browser.\n * For frames pointing to files, context lines are added during ingestion and symbolication\n * by attempting to download the JS files to the Sentry backend.\n *\n * Use this integration if you have inline JS code in HTML pages that can't be accessed\n * by our backend (e.g. due to a login-protected page).\n */\nconst contextLinesIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(_contextLinesIntegration);\n\n/**\n * Processes an event and adds context lines.\n */\nfunction addSourceContext(event, contextLines) {\n  const doc = WINDOW.document;\n  const htmlFilename = WINDOW.location && (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.stripUrlQueryAndFragment)(WINDOW.location.href);\n  if (!doc || !htmlFilename) {\n    return event;\n  }\n\n  const exceptions = event.exception?.values;\n  if (!exceptions?.length) {\n    return event;\n  }\n\n  const html = doc.documentElement.innerHTML;\n  if (!html) {\n    return event;\n  }\n\n  const htmlLines = ['<!DOCTYPE html>', '<html>', ...html.split('\\n'), '</html>'];\n\n  exceptions.forEach(exception => {\n    const stacktrace = exception.stacktrace;\n    if (stacktrace?.frames) {\n      stacktrace.frames = stacktrace.frames.map(frame =>\n        applySourceContextToFrame(frame, htmlLines, htmlFilename, contextLines),\n      );\n    }\n  });\n\n  return event;\n}\n\n/**\n * Only exported for testing\n */\nfunction applySourceContextToFrame(\n  frame,\n  htmlLines,\n  htmlFilename,\n  linesOfContext,\n) {\n  if (frame.filename !== htmlFilename || !frame.lineno || !htmlLines.length) {\n    return frame;\n  }\n\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addContextToFrame)(htmlLines, frame, linesOfContext);\n\n  return frame;\n}\n\n\n//# sourceMappingURL=contextlines.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbnRlZ3JhdGlvbnMvY29udGV4dGxpbmVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUEwRzs7QUFFMUcsZUFBZSxvREFBVTs7QUFFekI7O0FBRUE7O0FBRUEsK0NBQStDO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLCtEQUFpQjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxzRUFBd0I7QUFDbEU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLCtEQUFpQjs7QUFFbkI7QUFDQTs7QUFFOEQ7QUFDOUQiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vaW50ZWdyYXRpb25zL2NvbnRleHRsaW5lcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZpbmVJbnRlZ3JhdGlvbiwgR0xPQkFMX09CSiwgc3RyaXBVcmxRdWVyeUFuZEZyYWdtZW50LCBhZGRDb250ZXh0VG9GcmFtZSB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5cbmNvbnN0IFdJTkRPVyA9IEdMT0JBTF9PQkogO1xuXG5jb25zdCBERUZBVUxUX0xJTkVTX09GX0NPTlRFWFQgPSA3O1xuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ0NvbnRleHRMaW5lcyc7XG5cbmNvbnN0IF9jb250ZXh0TGluZXNJbnRlZ3JhdGlvbiA9ICgob3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IGNvbnRleHRMaW5lcyA9IG9wdGlvbnMuZnJhbWVDb250ZXh0TGluZXMgIT0gbnVsbCA/IG9wdGlvbnMuZnJhbWVDb250ZXh0TGluZXMgOiBERUZBVUxUX0xJTkVTX09GX0NPTlRFWFQ7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBJTlRFR1JBVElPTl9OQU1FLFxuICAgIHByb2Nlc3NFdmVudChldmVudCkge1xuICAgICAgcmV0dXJuIGFkZFNvdXJjZUNvbnRleHQoZXZlbnQsIGNvbnRleHRMaW5lcyk7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuLyoqXG4gKiBDb2xsZWN0cyBzb3VyY2UgY29udGV4dCBsaW5lcyBhcm91bmQgdGhlIGxpbmVzIG9mIHN0YWNrZnJhbWVzIHBvaW50aW5nIHRvIEpTIGVtYmVkZGVkIGluXG4gKiB0aGUgY3VycmVudCBwYWdlJ3MgSFRNTC5cbiAqXG4gKiBUaGlzIGludGVncmF0aW9uIERPRVMgTk9UIHdvcmsgZm9yIHN0YWNrIGZyYW1lcyBwb2ludGluZyB0byBKUyBmaWxlcyB0aGF0IGFyZSBsb2FkZWQgYnkgdGhlIGJyb3dzZXIuXG4gKiBGb3IgZnJhbWVzIHBvaW50aW5nIHRvIGZpbGVzLCBjb250ZXh0IGxpbmVzIGFyZSBhZGRlZCBkdXJpbmcgaW5nZXN0aW9uIGFuZCBzeW1ib2xpY2F0aW9uXG4gKiBieSBhdHRlbXB0aW5nIHRvIGRvd25sb2FkIHRoZSBKUyBmaWxlcyB0byB0aGUgU2VudHJ5IGJhY2tlbmQuXG4gKlxuICogVXNlIHRoaXMgaW50ZWdyYXRpb24gaWYgeW91IGhhdmUgaW5saW5lIEpTIGNvZGUgaW4gSFRNTCBwYWdlcyB0aGF0IGNhbid0IGJlIGFjY2Vzc2VkXG4gKiBieSBvdXIgYmFja2VuZCAoZS5nLiBkdWUgdG8gYSBsb2dpbi1wcm90ZWN0ZWQgcGFnZSkuXG4gKi9cbmNvbnN0IGNvbnRleHRMaW5lc0ludGVncmF0aW9uID0gZGVmaW5lSW50ZWdyYXRpb24oX2NvbnRleHRMaW5lc0ludGVncmF0aW9uKTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgYW4gZXZlbnQgYW5kIGFkZHMgY29udGV4dCBsaW5lcy5cbiAqL1xuZnVuY3Rpb24gYWRkU291cmNlQ29udGV4dChldmVudCwgY29udGV4dExpbmVzKSB7XG4gIGNvbnN0IGRvYyA9IFdJTkRPVy5kb2N1bWVudDtcbiAgY29uc3QgaHRtbEZpbGVuYW1lID0gV0lORE9XLmxvY2F0aW9uICYmIHN0cmlwVXJsUXVlcnlBbmRGcmFnbWVudChXSU5ET1cubG9jYXRpb24uaHJlZik7XG4gIGlmICghZG9jIHx8ICFodG1sRmlsZW5hbWUpIHtcbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cblxuICBjb25zdCBleGNlcHRpb25zID0gZXZlbnQuZXhjZXB0aW9uPy52YWx1ZXM7XG4gIGlmICghZXhjZXB0aW9ucz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgY29uc3QgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MO1xuICBpZiAoIWh0bWwpIHtcbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cblxuICBjb25zdCBodG1sTGluZXMgPSBbJzwhRE9DVFlQRSBodG1sPicsICc8aHRtbD4nLCAuLi5odG1sLnNwbGl0KCdcXG4nKSwgJzwvaHRtbD4nXTtcblxuICBleGNlcHRpb25zLmZvckVhY2goZXhjZXB0aW9uID0+IHtcbiAgICBjb25zdCBzdGFja3RyYWNlID0gZXhjZXB0aW9uLnN0YWNrdHJhY2U7XG4gICAgaWYgKHN0YWNrdHJhY2U/LmZyYW1lcykge1xuICAgICAgc3RhY2t0cmFjZS5mcmFtZXMgPSBzdGFja3RyYWNlLmZyYW1lcy5tYXAoZnJhbWUgPT5cbiAgICAgICAgYXBwbHlTb3VyY2VDb250ZXh0VG9GcmFtZShmcmFtZSwgaHRtbExpbmVzLCBodG1sRmlsZW5hbWUsIGNvbnRleHRMaW5lcyksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGV2ZW50O1xufVxuXG4vKipcbiAqIE9ubHkgZXhwb3J0ZWQgZm9yIHRlc3RpbmdcbiAqL1xuZnVuY3Rpb24gYXBwbHlTb3VyY2VDb250ZXh0VG9GcmFtZShcbiAgZnJhbWUsXG4gIGh0bWxMaW5lcyxcbiAgaHRtbEZpbGVuYW1lLFxuICBsaW5lc09mQ29udGV4dCxcbikge1xuICBpZiAoZnJhbWUuZmlsZW5hbWUgIT09IGh0bWxGaWxlbmFtZSB8fCAhZnJhbWUubGluZW5vIHx8ICFodG1sTGluZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgYWRkQ29udGV4dFRvRnJhbWUoaHRtbExpbmVzLCBmcmFtZSwgbGluZXNPZkNvbnRleHQpO1xuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IHsgYXBwbHlTb3VyY2VDb250ZXh0VG9GcmFtZSwgY29udGV4dExpbmVzSW50ZWdyYXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnRleHRsaW5lcy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/contextlines.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/launchdarkly/integration.js":
/*!****************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/launchdarkly/integration.js ***!
  \****************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   buildLaunchDarklyFlagUsedHandler: () => (/* binding */ buildLaunchDarklyFlagUsedHandler),\n/* harmony export */   launchDarklyIntegration: () => (/* binding */ launchDarklyIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\n/**\n * Sentry integration for capturing feature flag evaluations from LaunchDarkly.\n *\n * See the [feature flag documentation](https://develop.sentry.dev/sdk/expected-features/#feature-flags) for more information.\n *\n * @example\n * ```\n * import * as Sentry from '@sentry/browser';\n * import {launchDarklyIntegration, buildLaunchDarklyFlagUsedInspector} from '@sentry/browser';\n * import * as LaunchDarkly from 'launchdarkly-js-client-sdk';\n *\n * Sentry.init(..., integrations: [launchDarklyIntegration()])\n * const ldClient = LaunchDarkly.initialize(..., {inspectors: [buildLaunchDarklyFlagUsedHandler()]});\n * ```\n */\nconst launchDarklyIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(() => {\n  return {\n    name: 'LaunchDarkly',\n\n    processEvent(event, _hint, _client) {\n      return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__._INTERNAL_copyFlagsFromScopeToEvent)(event);\n    },\n  };\n}) ;\n\n/**\n * LaunchDarkly hook to listen for and buffer flag evaluations. This needs to\n * be registered as an 'inspector' in LaunchDarkly initialize() options,\n * separately from `launchDarklyIntegration`. Both the hook and the integration\n * are needed to capture LaunchDarkly flags.\n */\nfunction buildLaunchDarklyFlagUsedHandler() {\n  return {\n    name: 'sentry-flag-auditor',\n    type: 'flag-used',\n\n    synchronous: true,\n\n    /**\n     * Handle a flag evaluation by storing its name and value on the current scope.\n     */\n    method: (flagKey, flagDetail, _context) => {\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__._INTERNAL_insertFlagToScope)(flagKey, flagDetail.value);\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__._INTERNAL_addFeatureFlagToActiveSpan)(flagKey, flagDetail.value);\n    },\n  };\n}\n\n\n//# sourceMappingURL=integration.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbnRlZ3JhdGlvbnMvZmVhdHVyZUZsYWdzL2xhdW5jaGRhcmtseS9pbnRlZ3JhdGlvbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBeUo7O0FBRXpKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDZEQUE2RDtBQUN4RTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsaURBQWlEO0FBQ25HO0FBQ0E7QUFDQSxnQ0FBZ0MsK0RBQWlCO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLGlGQUFtQztBQUNoRCxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSx5RUFBMkI7QUFDakMsTUFBTSxrRkFBb0M7QUFDMUMsS0FBSztBQUNMO0FBQ0E7O0FBRXFFO0FBQ3JFIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrYnJvd3NlckA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9idWlsZC9ucG0vZXNtL2ludGVncmF0aW9ucy9mZWF0dXJlRmxhZ3MvbGF1bmNoZGFya2x5L2ludGVncmF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmluZUludGVncmF0aW9uLCBfSU5URVJOQUxfY29weUZsYWdzRnJvbVNjb3BlVG9FdmVudCwgX0lOVEVSTkFMX2luc2VydEZsYWdUb1Njb3BlLCBfSU5URVJOQUxfYWRkRmVhdHVyZUZsYWdUb0FjdGl2ZVNwYW4gfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuXG4vKipcbiAqIFNlbnRyeSBpbnRlZ3JhdGlvbiBmb3IgY2FwdHVyaW5nIGZlYXR1cmUgZmxhZyBldmFsdWF0aW9ucyBmcm9tIExhdW5jaERhcmtseS5cbiAqXG4gKiBTZWUgdGhlIFtmZWF0dXJlIGZsYWcgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kZXZlbG9wLnNlbnRyeS5kZXYvc2RrL2V4cGVjdGVkLWZlYXR1cmVzLyNmZWF0dXJlLWZsYWdzKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgXG4gKiBpbXBvcnQgKiBhcyBTZW50cnkgZnJvbSAnQHNlbnRyeS9icm93c2VyJztcbiAqIGltcG9ydCB7bGF1bmNoRGFya2x5SW50ZWdyYXRpb24sIGJ1aWxkTGF1bmNoRGFya2x5RmxhZ1VzZWRJbnNwZWN0b3J9IGZyb20gJ0BzZW50cnkvYnJvd3Nlcic7XG4gKiBpbXBvcnQgKiBhcyBMYXVuY2hEYXJrbHkgZnJvbSAnbGF1bmNoZGFya2x5LWpzLWNsaWVudC1zZGsnO1xuICpcbiAqIFNlbnRyeS5pbml0KC4uLiwgaW50ZWdyYXRpb25zOiBbbGF1bmNoRGFya2x5SW50ZWdyYXRpb24oKV0pXG4gKiBjb25zdCBsZENsaWVudCA9IExhdW5jaERhcmtseS5pbml0aWFsaXplKC4uLiwge2luc3BlY3RvcnM6IFtidWlsZExhdW5jaERhcmtseUZsYWdVc2VkSGFuZGxlcigpXX0pO1xuICogYGBgXG4gKi9cbmNvbnN0IGxhdW5jaERhcmtseUludGVncmF0aW9uID0gZGVmaW5lSW50ZWdyYXRpb24oKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdMYXVuY2hEYXJrbHknLFxuXG4gICAgcHJvY2Vzc0V2ZW50KGV2ZW50LCBfaGludCwgX2NsaWVudCkge1xuICAgICAgcmV0dXJuIF9JTlRFUk5BTF9jb3B5RmxhZ3NGcm9tU2NvcGVUb0V2ZW50KGV2ZW50KTtcbiAgICB9LFxuICB9O1xufSkgO1xuXG4vKipcbiAqIExhdW5jaERhcmtseSBob29rIHRvIGxpc3RlbiBmb3IgYW5kIGJ1ZmZlciBmbGFnIGV2YWx1YXRpb25zLiBUaGlzIG5lZWRzIHRvXG4gKiBiZSByZWdpc3RlcmVkIGFzIGFuICdpbnNwZWN0b3InIGluIExhdW5jaERhcmtseSBpbml0aWFsaXplKCkgb3B0aW9ucyxcbiAqIHNlcGFyYXRlbHkgZnJvbSBgbGF1bmNoRGFya2x5SW50ZWdyYXRpb25gLiBCb3RoIHRoZSBob29rIGFuZCB0aGUgaW50ZWdyYXRpb25cbiAqIGFyZSBuZWVkZWQgdG8gY2FwdHVyZSBMYXVuY2hEYXJrbHkgZmxhZ3MuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTGF1bmNoRGFya2x5RmxhZ1VzZWRIYW5kbGVyKCkge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzZW50cnktZmxhZy1hdWRpdG9yJyxcbiAgICB0eXBlOiAnZmxhZy11c2VkJyxcblxuICAgIHN5bmNocm9ub3VzOiB0cnVlLFxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGEgZmxhZyBldmFsdWF0aW9uIGJ5IHN0b3JpbmcgaXRzIG5hbWUgYW5kIHZhbHVlIG9uIHRoZSBjdXJyZW50IHNjb3BlLlxuICAgICAqL1xuICAgIG1ldGhvZDogKGZsYWdLZXksIGZsYWdEZXRhaWwsIF9jb250ZXh0KSA9PiB7XG4gICAgICBfSU5URVJOQUxfaW5zZXJ0RmxhZ1RvU2NvcGUoZmxhZ0tleSwgZmxhZ0RldGFpbC52YWx1ZSk7XG4gICAgICBfSU5URVJOQUxfYWRkRmVhdHVyZUZsYWdUb0FjdGl2ZVNwYW4oZmxhZ0tleSwgZmxhZ0RldGFpbC52YWx1ZSk7XG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IHsgYnVpbGRMYXVuY2hEYXJrbHlGbGFnVXNlZEhhbmRsZXIsIGxhdW5jaERhcmtseUludGVncmF0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlZ3JhdGlvbi5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/launchdarkly/integration.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/openfeature/integration.js":
/*!***************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/openfeature/integration.js ***!
  \***************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   OpenFeatureIntegrationHook: () => (/* binding */ OpenFeatureIntegrationHook),\n/* harmony export */   openFeatureIntegration: () => (/* binding */ openFeatureIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\nconst openFeatureIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(() => {\n  return {\n    name: 'OpenFeature',\n\n    processEvent(event, _hint, _client) {\n      return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__._INTERNAL_copyFlagsFromScopeToEvent)(event);\n    },\n  };\n}) ;\n\n/**\n * OpenFeature Hook class implementation.\n */\nclass OpenFeatureIntegrationHook  {\n  /**\n   * Successful evaluation result.\n   */\n   after(_hookContext, evaluationDetails) {\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__._INTERNAL_insertFlagToScope)(evaluationDetails.flagKey, evaluationDetails.value);\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__._INTERNAL_addFeatureFlagToActiveSpan)(evaluationDetails.flagKey, evaluationDetails.value);\n  }\n\n  /**\n   * On error evaluation result.\n   */\n   error(hookContext, _error, _hookHints) {\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__._INTERNAL_insertFlagToScope)(hookContext.flagKey, hookContext.defaultValue);\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__._INTERNAL_addFeatureFlagToActiveSpan)(hookContext.flagKey, hookContext.defaultValue);\n  }\n}\n\n\n//# sourceMappingURL=integration.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbnRlZ3JhdGlvbnMvZmVhdHVyZUZsYWdzL29wZW5mZWF0dXJlL2ludGVncmF0aW9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF5Sjs7QUFFekosK0JBQStCLCtEQUFpQjtBQUNoRDtBQUNBOztBQUVBO0FBQ0EsYUFBYSxpRkFBbUM7QUFDaEQsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSx5RUFBMkI7QUFDL0IsSUFBSSxrRkFBb0M7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHlFQUEyQjtBQUMvQixJQUFJLGtGQUFvQztBQUN4QztBQUNBOztBQUU4RDtBQUM5RCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbnRlZ3JhdGlvbnMvZmVhdHVyZUZsYWdzL29wZW5mZWF0dXJlL2ludGVncmF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmluZUludGVncmF0aW9uLCBfSU5URVJOQUxfY29weUZsYWdzRnJvbVNjb3BlVG9FdmVudCwgX0lOVEVSTkFMX2luc2VydEZsYWdUb1Njb3BlLCBfSU5URVJOQUxfYWRkRmVhdHVyZUZsYWdUb0FjdGl2ZVNwYW4gfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuXG5jb25zdCBvcGVuRmVhdHVyZUludGVncmF0aW9uID0gZGVmaW5lSW50ZWdyYXRpb24oKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdPcGVuRmVhdHVyZScsXG5cbiAgICBwcm9jZXNzRXZlbnQoZXZlbnQsIF9oaW50LCBfY2xpZW50KSB7XG4gICAgICByZXR1cm4gX0lOVEVSTkFMX2NvcHlGbGFnc0Zyb21TY29wZVRvRXZlbnQoZXZlbnQpO1xuICAgIH0sXG4gIH07XG59KSA7XG5cbi8qKlxuICogT3BlbkZlYXR1cmUgSG9vayBjbGFzcyBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuY2xhc3MgT3BlbkZlYXR1cmVJbnRlZ3JhdGlvbkhvb2sgIHtcbiAgLyoqXG4gICAqIFN1Y2Nlc3NmdWwgZXZhbHVhdGlvbiByZXN1bHQuXG4gICAqL1xuICAgYWZ0ZXIoX2hvb2tDb250ZXh0LCBldmFsdWF0aW9uRGV0YWlscykge1xuICAgIF9JTlRFUk5BTF9pbnNlcnRGbGFnVG9TY29wZShldmFsdWF0aW9uRGV0YWlscy5mbGFnS2V5LCBldmFsdWF0aW9uRGV0YWlscy52YWx1ZSk7XG4gICAgX0lOVEVSTkFMX2FkZEZlYXR1cmVGbGFnVG9BY3RpdmVTcGFuKGV2YWx1YXRpb25EZXRhaWxzLmZsYWdLZXksIGV2YWx1YXRpb25EZXRhaWxzLnZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBlcnJvciBldmFsdWF0aW9uIHJlc3VsdC5cbiAgICovXG4gICBlcnJvcihob29rQ29udGV4dCwgX2Vycm9yLCBfaG9va0hpbnRzKSB7XG4gICAgX0lOVEVSTkFMX2luc2VydEZsYWdUb1Njb3BlKGhvb2tDb250ZXh0LmZsYWdLZXksIGhvb2tDb250ZXh0LmRlZmF1bHRWYWx1ZSk7XG4gICAgX0lOVEVSTkFMX2FkZEZlYXR1cmVGbGFnVG9BY3RpdmVTcGFuKGhvb2tDb250ZXh0LmZsYWdLZXksIGhvb2tDb250ZXh0LmRlZmF1bHRWYWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgT3BlbkZlYXR1cmVJbnRlZ3JhdGlvbkhvb2ssIG9wZW5GZWF0dXJlSW50ZWdyYXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVncmF0aW9uLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/openfeature/integration.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/statsig/integration.js":
/*!***********************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/statsig/integration.js ***!
  \***********************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   statsigIntegration: () => (/* binding */ statsigIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\n/**\n * Sentry integration for capturing feature flag evaluations from the Statsig js-client SDK.\n *\n * See the [feature flag documentation](https://develop.sentry.dev/sdk/expected-features/#feature-flags) for more information.\n *\n * @example\n * ```\n * import { StatsigClient } from '@statsig/js-client';\n * import * as Sentry from '@sentry/browser';\n *\n * const statsigClient = new StatsigClient();\n *\n * Sentry.init({\n *   dsn: '___PUBLIC_DSN___',\n *   integrations: [Sentry.statsigIntegration({featureFlagClient: statsigClient})],\n * });\n *\n * await statsigClient.initializeAsync();  // or statsigClient.initializeSync();\n *\n * const result = statsigClient.checkGate('my-feature-gate');\n * Sentry.captureException(new Error('something went wrong'));\n * ```\n */\nconst statsigIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(\n  ({ featureFlagClient: statsigClient }) => {\n    return {\n      name: 'Statsig',\n\n      setup(_client) {\n        statsigClient.on('gate_evaluation', (event) => {\n          (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__._INTERNAL_insertFlagToScope)(event.gate.name, event.gate.value);\n          (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__._INTERNAL_addFeatureFlagToActiveSpan)(event.gate.name, event.gate.value);\n        });\n      },\n\n      processEvent(event, _hint, _client) {\n        return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__._INTERNAL_copyFlagsFromScopeToEvent)(event);\n      },\n    };\n  },\n) ;\n\n\n//# sourceMappingURL=integration.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbnRlZ3JhdGlvbnMvZmVhdHVyZUZsYWdzL3N0YXRzaWcvaW50ZWdyYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBeUo7O0FBRXpKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxnQkFBZ0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLGlDQUFpQztBQUNoRixJQUFJO0FBQ0o7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiwrREFBaUI7QUFDNUMsS0FBSyxrQ0FBa0M7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSx5RUFBMkI7QUFDckMsVUFBVSxrRkFBb0M7QUFDOUMsU0FBUztBQUNULE9BQU87O0FBRVA7QUFDQSxlQUFlLGlGQUFtQztBQUNsRCxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7O0FBRThCO0FBQzlCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrYnJvd3NlckA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9idWlsZC9ucG0vZXNtL2ludGVncmF0aW9ucy9mZWF0dXJlRmxhZ3Mvc3RhdHNpZy9pbnRlZ3JhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZpbmVJbnRlZ3JhdGlvbiwgX0lOVEVSTkFMX2NvcHlGbGFnc0Zyb21TY29wZVRvRXZlbnQsIF9JTlRFUk5BTF9pbnNlcnRGbGFnVG9TY29wZSwgX0lOVEVSTkFMX2FkZEZlYXR1cmVGbGFnVG9BY3RpdmVTcGFuIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcblxuLyoqXG4gKiBTZW50cnkgaW50ZWdyYXRpb24gZm9yIGNhcHR1cmluZyBmZWF0dXJlIGZsYWcgZXZhbHVhdGlvbnMgZnJvbSB0aGUgU3RhdHNpZyBqcy1jbGllbnQgU0RLLlxuICpcbiAqIFNlZSB0aGUgW2ZlYXR1cmUgZmxhZyBkb2N1bWVudGF0aW9uXShodHRwczovL2RldmVsb3Auc2VudHJ5LmRldi9zZGsvZXhwZWN0ZWQtZmVhdHVyZXMvI2ZlYXR1cmUtZmxhZ3MpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGltcG9ydCB7IFN0YXRzaWdDbGllbnQgfSBmcm9tICdAc3RhdHNpZy9qcy1jbGllbnQnO1xuICogaW1wb3J0ICogYXMgU2VudHJ5IGZyb20gJ0BzZW50cnkvYnJvd3Nlcic7XG4gKlxuICogY29uc3Qgc3RhdHNpZ0NsaWVudCA9IG5ldyBTdGF0c2lnQ2xpZW50KCk7XG4gKlxuICogU2VudHJ5LmluaXQoe1xuICogICBkc246ICdfX19QVUJMSUNfRFNOX19fJyxcbiAqICAgaW50ZWdyYXRpb25zOiBbU2VudHJ5LnN0YXRzaWdJbnRlZ3JhdGlvbih7ZmVhdHVyZUZsYWdDbGllbnQ6IHN0YXRzaWdDbGllbnR9KV0sXG4gKiB9KTtcbiAqXG4gKiBhd2FpdCBzdGF0c2lnQ2xpZW50LmluaXRpYWxpemVBc3luYygpOyAgLy8gb3Igc3RhdHNpZ0NsaWVudC5pbml0aWFsaXplU3luYygpO1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXRzaWdDbGllbnQuY2hlY2tHYXRlKCdteS1mZWF0dXJlLWdhdGUnKTtcbiAqIFNlbnRyeS5jYXB0dXJlRXhjZXB0aW9uKG5ldyBFcnJvcignc29tZXRoaW5nIHdlbnQgd3JvbmcnKSk7XG4gKiBgYGBcbiAqL1xuY29uc3Qgc3RhdHNpZ0ludGVncmF0aW9uID0gZGVmaW5lSW50ZWdyYXRpb24oXG4gICh7IGZlYXR1cmVGbGFnQ2xpZW50OiBzdGF0c2lnQ2xpZW50IH0pID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ1N0YXRzaWcnLFxuXG4gICAgICBzZXR1cChfY2xpZW50KSB7XG4gICAgICAgIHN0YXRzaWdDbGllbnQub24oJ2dhdGVfZXZhbHVhdGlvbicsIChldmVudCkgPT4ge1xuICAgICAgICAgIF9JTlRFUk5BTF9pbnNlcnRGbGFnVG9TY29wZShldmVudC5nYXRlLm5hbWUsIGV2ZW50LmdhdGUudmFsdWUpO1xuICAgICAgICAgIF9JTlRFUk5BTF9hZGRGZWF0dXJlRmxhZ1RvQWN0aXZlU3BhbihldmVudC5nYXRlLm5hbWUsIGV2ZW50LmdhdGUudmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG5cbiAgICAgIHByb2Nlc3NFdmVudChldmVudCwgX2hpbnQsIF9jbGllbnQpIHtcbiAgICAgICAgcmV0dXJuIF9JTlRFUk5BTF9jb3B5RmxhZ3NGcm9tU2NvcGVUb0V2ZW50KGV2ZW50KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbikgO1xuXG5leHBvcnQgeyBzdGF0c2lnSW50ZWdyYXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVncmF0aW9uLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/statsig/integration.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/unleash/integration.js":
/*!***********************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/unleash/integration.js ***!
  \***********************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   unleashIntegration: () => (/* binding */ unleashIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/debug-build.js\");\n\n\n\n/**\n * Sentry integration for capturing feature flag evaluations from the Unleash SDK.\n *\n * See the [feature flag documentation](https://develop.sentry.dev/sdk/expected-features/#feature-flags) for more information.\n *\n * @example\n * ```\n * import { UnleashClient } from 'unleash-proxy-client';\n * import * as Sentry from '@sentry/browser';\n *\n * Sentry.init({\n *   dsn: '___PUBLIC_DSN___',\n *   integrations: [Sentry.unleashIntegration({featureFlagClientClass: UnleashClient})],\n * });\n *\n * const unleash = new UnleashClient(...);\n * unleash.start();\n *\n * unleash.isEnabled('my-feature');\n * Sentry.captureException(new Error('something went wrong'));\n * ```\n */\nconst unleashIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(\n  ({ featureFlagClientClass: unleashClientClass }) => {\n    return {\n      name: 'Unleash',\n\n      setupOnce() {\n        const unleashClientPrototype = unleashClientClass.prototype ;\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.fill)(unleashClientPrototype, 'isEnabled', _wrappedIsEnabled);\n      },\n\n      processEvent(event, _hint, _client) {\n        return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__._INTERNAL_copyFlagsFromScopeToEvent)(event);\n      },\n    };\n  },\n) ;\n\n/**\n * Wraps the UnleashClient.isEnabled method to capture feature flag evaluations. Its only side effect is writing to Sentry scope.\n *\n * This wrapper is safe for all isEnabled signatures. If the signature does not match (this: UnleashClient, toggleName: string, ...args: unknown[]) => boolean,\n * we log an error and return the original result.\n *\n * @param original - The original method.\n * @returns Wrapped method. Results should match the original.\n */\nfunction _wrappedIsEnabled(\n  original,\n) {\n  return function ( ...args) {\n    const toggleName = args[0];\n    const result = original.apply(this, args);\n\n    if (typeof toggleName === 'string' && typeof result === 'boolean') {\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__._INTERNAL_insertFlagToScope)(toggleName, result);\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__._INTERNAL_addFeatureFlagToActiveSpan)(toggleName, result);\n    } else if (_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n      _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.error(\n        `[Feature Flags] UnleashClient.isEnabled does not match expected signature. arg0: ${toggleName} (${typeof toggleName}), result: ${result} (${typeof result})`,\n      );\n    }\n    return result;\n  };\n}\n\n\n//# sourceMappingURL=integration.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbnRlZ3JhdGlvbnMvZmVhdHVyZUZsYWdzL3VubGVhc2gvaW50ZWdyYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXNLO0FBQ2hIOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksZ0JBQWdCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLHNDQUFzQztBQUNyRixJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiwrREFBaUI7QUFDNUMsS0FBSyw0Q0FBNEM7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUSxrREFBSTtBQUNaLE9BQU87O0FBRVA7QUFDQSxlQUFlLGlGQUFtQztBQUNsRCxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSx5RUFBMkI7QUFDakMsTUFBTSxrRkFBb0M7QUFDMUMsTUFBTSxTQUFTLHdEQUFXO0FBQzFCLE1BQU0sK0NBQUs7QUFDWCw0RkFBNEYsWUFBWSxHQUFHLGtCQUFrQixhQUFhLFFBQVEsR0FBRyxjQUFjO0FBQ25LO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRThCO0FBQzlCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrYnJvd3NlckA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9idWlsZC9ucG0vZXNtL2ludGVncmF0aW9ucy9mZWF0dXJlRmxhZ3MvdW5sZWFzaC9pbnRlZ3JhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZpbmVJbnRlZ3JhdGlvbiwgX0lOVEVSTkFMX2NvcHlGbGFnc0Zyb21TY29wZVRvRXZlbnQsIGZpbGwsIF9JTlRFUk5BTF9pbnNlcnRGbGFnVG9TY29wZSwgX0lOVEVSTkFMX2FkZEZlYXR1cmVGbGFnVG9BY3RpdmVTcGFuLCBkZWJ1ZyB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4uLy4uLy4uL2RlYnVnLWJ1aWxkLmpzJztcblxuLyoqXG4gKiBTZW50cnkgaW50ZWdyYXRpb24gZm9yIGNhcHR1cmluZyBmZWF0dXJlIGZsYWcgZXZhbHVhdGlvbnMgZnJvbSB0aGUgVW5sZWFzaCBTREsuXG4gKlxuICogU2VlIHRoZSBbZmVhdHVyZSBmbGFnIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZGV2ZWxvcC5zZW50cnkuZGV2L3Nkay9leHBlY3RlZC1mZWF0dXJlcy8jZmVhdHVyZS1mbGFncykgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogaW1wb3J0IHsgVW5sZWFzaENsaWVudCB9IGZyb20gJ3VubGVhc2gtcHJveHktY2xpZW50JztcbiAqIGltcG9ydCAqIGFzIFNlbnRyeSBmcm9tICdAc2VudHJ5L2Jyb3dzZXInO1xuICpcbiAqIFNlbnRyeS5pbml0KHtcbiAqICAgZHNuOiAnX19fUFVCTElDX0RTTl9fXycsXG4gKiAgIGludGVncmF0aW9uczogW1NlbnRyeS51bmxlYXNoSW50ZWdyYXRpb24oe2ZlYXR1cmVGbGFnQ2xpZW50Q2xhc3M6IFVubGVhc2hDbGllbnR9KV0sXG4gKiB9KTtcbiAqXG4gKiBjb25zdCB1bmxlYXNoID0gbmV3IFVubGVhc2hDbGllbnQoLi4uKTtcbiAqIHVubGVhc2guc3RhcnQoKTtcbiAqXG4gKiB1bmxlYXNoLmlzRW5hYmxlZCgnbXktZmVhdHVyZScpO1xuICogU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24obmV3IEVycm9yKCdzb21ldGhpbmcgd2VudCB3cm9uZycpKTtcbiAqIGBgYFxuICovXG5jb25zdCB1bmxlYXNoSW50ZWdyYXRpb24gPSBkZWZpbmVJbnRlZ3JhdGlvbihcbiAgKHsgZmVhdHVyZUZsYWdDbGllbnRDbGFzczogdW5sZWFzaENsaWVudENsYXNzIH0pID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ1VubGVhc2gnLFxuXG4gICAgICBzZXR1cE9uY2UoKSB7XG4gICAgICAgIGNvbnN0IHVubGVhc2hDbGllbnRQcm90b3R5cGUgPSB1bmxlYXNoQ2xpZW50Q2xhc3MucHJvdG90eXBlIDtcbiAgICAgICAgZmlsbCh1bmxlYXNoQ2xpZW50UHJvdG90eXBlLCAnaXNFbmFibGVkJywgX3dyYXBwZWRJc0VuYWJsZWQpO1xuICAgICAgfSxcblxuICAgICAgcHJvY2Vzc0V2ZW50KGV2ZW50LCBfaGludCwgX2NsaWVudCkge1xuICAgICAgICByZXR1cm4gX0lOVEVSTkFMX2NvcHlGbGFnc0Zyb21TY29wZVRvRXZlbnQoZXZlbnQpO1xuICAgICAgfSxcbiAgICB9O1xuICB9LFxuKSA7XG5cbi8qKlxuICogV3JhcHMgdGhlIFVubGVhc2hDbGllbnQuaXNFbmFibGVkIG1ldGhvZCB0byBjYXB0dXJlIGZlYXR1cmUgZmxhZyBldmFsdWF0aW9ucy4gSXRzIG9ubHkgc2lkZSBlZmZlY3QgaXMgd3JpdGluZyB0byBTZW50cnkgc2NvcGUuXG4gKlxuICogVGhpcyB3cmFwcGVyIGlzIHNhZmUgZm9yIGFsbCBpc0VuYWJsZWQgc2lnbmF0dXJlcy4gSWYgdGhlIHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaCAodGhpczogVW5sZWFzaENsaWVudCwgdG9nZ2xlTmFtZTogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pID0+IGJvb2xlYW4sXG4gKiB3ZSBsb2cgYW4gZXJyb3IgYW5kIHJldHVybiB0aGUgb3JpZ2luYWwgcmVzdWx0LlxuICpcbiAqIEBwYXJhbSBvcmlnaW5hbCAtIFRoZSBvcmlnaW5hbCBtZXRob2QuXG4gKiBAcmV0dXJucyBXcmFwcGVkIG1ldGhvZC4gUmVzdWx0cyBzaG91bGQgbWF0Y2ggdGhlIG9yaWdpbmFsLlxuICovXG5mdW5jdGlvbiBfd3JhcHBlZElzRW5hYmxlZChcbiAgb3JpZ2luYWwsXG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICggLi4uYXJncykge1xuICAgIGNvbnN0IHRvZ2dsZU5hbWUgPSBhcmdzWzBdO1xuICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXG4gICAgaWYgKHR5cGVvZiB0b2dnbGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgcmVzdWx0ID09PSAnYm9vbGVhbicpIHtcbiAgICAgIF9JTlRFUk5BTF9pbnNlcnRGbGFnVG9TY29wZSh0b2dnbGVOYW1lLCByZXN1bHQpO1xuICAgICAgX0lOVEVSTkFMX2FkZEZlYXR1cmVGbGFnVG9BY3RpdmVTcGFuKHRvZ2dsZU5hbWUsIHJlc3VsdCk7XG4gICAgfSBlbHNlIGlmIChERUJVR19CVUlMRCkge1xuICAgICAgZGVidWcuZXJyb3IoXG4gICAgICAgIGBbRmVhdHVyZSBGbGFnc10gVW5sZWFzaENsaWVudC5pc0VuYWJsZWQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgc2lnbmF0dXJlLiBhcmcwOiAke3RvZ2dsZU5hbWV9ICgke3R5cGVvZiB0b2dnbGVOYW1lfSksIHJlc3VsdDogJHtyZXN1bHR9ICgke3R5cGVvZiByZXN1bHR9KWAsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5leHBvcnQgeyB1bmxlYXNoSW50ZWdyYXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVncmF0aW9uLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/featureFlags/unleash/integration.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/globalhandlers.js":
/*!*****************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/globalhandlers.js ***!
  \*****************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   globalHandlersIntegration: () => (/* binding */ globalHandlersIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/debug-build.js\");\n/* harmony import */ var _eventbuilder_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../eventbuilder.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/eventbuilder.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../helpers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\");\n\n\n\n\n\nconst INTEGRATION_NAME = 'GlobalHandlers';\n\nconst _globalHandlersIntegration = ((options = {}) => {\n  const _options = {\n    onerror: true,\n    onunhandledrejection: true,\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      Error.stackTraceLimit = 50;\n    },\n    setup(client) {\n      if (_options.onerror) {\n        _installGlobalOnErrorHandler(client);\n        globalHandlerLog('onerror');\n      }\n      if (_options.onunhandledrejection) {\n        _installGlobalOnUnhandledRejectionHandler(client);\n        globalHandlerLog('onunhandledrejection');\n      }\n    },\n  };\n}) ;\n\nconst globalHandlersIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(_globalHandlersIntegration);\n\nfunction _installGlobalOnErrorHandler(client) {\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addGlobalErrorInstrumentationHandler)(data => {\n    const { stackParser, attachStacktrace } = getOptions();\n\n    if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)() !== client || (0,_helpers_js__WEBPACK_IMPORTED_MODULE_3__.shouldIgnoreOnError)()) {\n      return;\n    }\n\n    const { msg, url, line, column, error } = data;\n\n    const event = _enhanceEventWithInitialFrame(\n      (0,_eventbuilder_js__WEBPACK_IMPORTED_MODULE_2__.eventFromUnknownInput)(stackParser, error || msg, undefined, attachStacktrace, false),\n      url,\n      line,\n      column,\n    );\n\n    event.level = 'error';\n\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureEvent)(event, {\n      originalException: error,\n      mechanism: {\n        handled: false,\n        type: 'onerror',\n      },\n    });\n  });\n}\n\nfunction _installGlobalOnUnhandledRejectionHandler(client) {\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addGlobalUnhandledRejectionInstrumentationHandler)(e => {\n    const { stackParser, attachStacktrace } = getOptions();\n\n    if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)() !== client || (0,_helpers_js__WEBPACK_IMPORTED_MODULE_3__.shouldIgnoreOnError)()) {\n      return;\n    }\n\n    const error = _getUnhandledRejectionError(e );\n\n    const event = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isPrimitive)(error)\n      ? _eventFromRejectionWithPrimitive(error)\n      : (0,_eventbuilder_js__WEBPACK_IMPORTED_MODULE_2__.eventFromUnknownInput)(stackParser, error, undefined, attachStacktrace, true);\n\n    event.level = 'error';\n\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureEvent)(event, {\n      originalException: error,\n      mechanism: {\n        handled: false,\n        type: 'onunhandledrejection',\n      },\n    });\n  });\n}\n\nfunction _getUnhandledRejectionError(error) {\n  if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isPrimitive)(error)) {\n    return error;\n  }\n\n  // dig the object of the rejection out of known event types\n  try {\n\n    // PromiseRejectionEvents store the object of the rejection under 'reason'\n    // see https://developer.mozilla.org/en-US/docs/Web/API/PromiseRejectionEvent\n    if ('reason' in (error )) {\n      return (error ).reason;\n    }\n\n    // something, somewhere, (likely a browser extension) effectively casts PromiseRejectionEvents\n    // to CustomEvents, moving the `promise` and `reason` attributes of the PRE into\n    // the CustomEvent's `detail` attribute, since they're not part of CustomEvent's spec\n    // see https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent and\n    // https://github.com/getsentry/sentry-javascript/issues/2380\n    if ('detail' in (error ) && 'reason' in (error ).detail) {\n      return (error ).detail.reason;\n    }\n  } catch {} // eslint-disable-line no-empty\n\n  return error;\n}\n\n/**\n * Create an event from a promise rejection where the `reason` is a primitive.\n *\n * @param reason: The `reason` property of the promise rejection\n * @returns An Event object with an appropriate `exception` value\n */\nfunction _eventFromRejectionWithPrimitive(reason) {\n  return {\n    exception: {\n      values: [\n        {\n          type: 'UnhandledRejection',\n          // String() is needed because the Primitive type includes symbols (which can't be automatically stringified)\n          value: `Non-Error promise rejection captured with value: ${String(reason)}`,\n        },\n      ],\n    },\n  };\n}\n\nfunction _enhanceEventWithInitialFrame(\n  event,\n  url,\n  line,\n  column,\n) {\n  // event.exception\n  const e = (event.exception = event.exception || {});\n  // event.exception.values\n  const ev = (e.values = e.values || []);\n  // event.exception.values[0]\n  const ev0 = (ev[0] = ev[0] || {});\n  // event.exception.values[0].stacktrace\n  const ev0s = (ev0.stacktrace = ev0.stacktrace || {});\n  // event.exception.values[0].stacktrace.frames\n  const ev0sf = (ev0s.frames = ev0s.frames || []);\n\n  const colno = column;\n  const lineno = line;\n  const filename = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isString)(url) && url.length > 0 ? url : (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getLocationHref)();\n\n  // event.exception.values[0].stacktrace.frames\n  if (ev0sf.length === 0) {\n    ev0sf.push({\n      colno,\n      filename,\n      function: _sentry_core__WEBPACK_IMPORTED_MODULE_0__.UNKNOWN_FUNCTION,\n      in_app: true,\n      lineno,\n    });\n  }\n\n  return event;\n}\n\nfunction globalHandlerLog(type) {\n  _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log(`Global Handler attached: ${type}`);\n}\n\nfunction getOptions() {\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  const options = client?.getOptions() || {\n    stackParser: () => [],\n    attachStacktrace: false,\n  };\n  return options;\n}\n\n\n//# sourceMappingURL=globalhandlers.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbnRlZ3JhdGlvbnMvZ2xvYmFsaGFuZGxlcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBb087QUFDcEw7QUFDVztBQUNQOztBQUVwRDs7QUFFQSxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVELGtDQUFrQywrREFBaUI7O0FBRW5EO0FBQ0EsRUFBRSxrRkFBb0M7QUFDdEMsWUFBWSxnQ0FBZ0M7O0FBRTVDLFFBQVEsdURBQVMsaUJBQWlCLGdFQUFtQjtBQUNyRDtBQUNBOztBQUVBLFlBQVksZ0NBQWdDOztBQUU1QztBQUNBLE1BQU0sdUVBQXFCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLElBQUksMERBQVk7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBLEVBQUUsK0ZBQWlEO0FBQ25ELFlBQVksZ0NBQWdDOztBQUU1QyxRQUFRLHVEQUFTLGlCQUFpQixnRUFBbUI7QUFDckQ7QUFDQTs7QUFFQTs7QUFFQSxrQkFBa0IseURBQVc7QUFDN0I7QUFDQSxRQUFRLHVFQUFxQjs7QUFFN0I7O0FBRUEsSUFBSSwwREFBWTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0EsTUFBTSx5REFBVztBQUNqQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTOztBQUViO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUUsZUFBZTtBQUNwRixTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQSxxREFBcUQ7QUFDckQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLHNEQUFRLGdDQUFnQyw2REFBZTs7QUFFMUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiwwREFBZ0I7QUFDaEM7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsRUFBRSx3REFBVyxJQUFJLCtDQUFLLGlDQUFpQyxLQUFLO0FBQzVEOztBQUVBO0FBQ0EsaUJBQWlCLHVEQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFcUM7QUFDckMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vaW50ZWdyYXRpb25zL2dsb2JhbGhhbmRsZXJzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmluZUludGVncmF0aW9uLCBhZGRHbG9iYWxFcnJvckluc3RydW1lbnRhdGlvbkhhbmRsZXIsIGdldENsaWVudCwgY2FwdHVyZUV2ZW50LCBkZWJ1ZywgYWRkR2xvYmFsVW5oYW5kbGVkUmVqZWN0aW9uSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgaXNQcmltaXRpdmUsIGlzU3RyaW5nLCBnZXRMb2NhdGlvbkhyZWYsIFVOS05PV05fRlVOQ1RJT04gfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBldmVudEZyb21Vbmtub3duSW5wdXQgfSBmcm9tICcuLi9ldmVudGJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgc2hvdWxkSWdub3JlT25FcnJvciB9IGZyb20gJy4uL2hlbHBlcnMuanMnO1xuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ0dsb2JhbEhhbmRsZXJzJztcblxuY29uc3QgX2dsb2JhbEhhbmRsZXJzSW50ZWdyYXRpb24gPSAoKG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBfb3B0aW9ucyA9IHtcbiAgICBvbmVycm9yOiB0cnVlLFxuICAgIG9udW5oYW5kbGVkcmVqZWN0aW9uOiB0cnVlLFxuICAgIC4uLm9wdGlvbnMsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBJTlRFR1JBVElPTl9OQU1FLFxuICAgIHNldHVwT25jZSgpIHtcbiAgICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IDUwO1xuICAgIH0sXG4gICAgc2V0dXAoY2xpZW50KSB7XG4gICAgICBpZiAoX29wdGlvbnMub25lcnJvcikge1xuICAgICAgICBfaW5zdGFsbEdsb2JhbE9uRXJyb3JIYW5kbGVyKGNsaWVudCk7XG4gICAgICAgIGdsb2JhbEhhbmRsZXJMb2coJ29uZXJyb3InKTtcbiAgICAgIH1cbiAgICAgIGlmIChfb3B0aW9ucy5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICBfaW5zdGFsbEdsb2JhbE9uVW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlcihjbGllbnQpO1xuICAgICAgICBnbG9iYWxIYW5kbGVyTG9nKCdvbnVuaGFuZGxlZHJlamVjdGlvbicpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59KSA7XG5cbmNvbnN0IGdsb2JhbEhhbmRsZXJzSW50ZWdyYXRpb24gPSBkZWZpbmVJbnRlZ3JhdGlvbihfZ2xvYmFsSGFuZGxlcnNJbnRlZ3JhdGlvbik7XG5cbmZ1bmN0aW9uIF9pbnN0YWxsR2xvYmFsT25FcnJvckhhbmRsZXIoY2xpZW50KSB7XG4gIGFkZEdsb2JhbEVycm9ySW5zdHJ1bWVudGF0aW9uSGFuZGxlcihkYXRhID0+IHtcbiAgICBjb25zdCB7IHN0YWNrUGFyc2VyLCBhdHRhY2hTdGFja3RyYWNlIH0gPSBnZXRPcHRpb25zKCk7XG5cbiAgICBpZiAoZ2V0Q2xpZW50KCkgIT09IGNsaWVudCB8fCBzaG91bGRJZ25vcmVPbkVycm9yKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IG1zZywgdXJsLCBsaW5lLCBjb2x1bW4sIGVycm9yIH0gPSBkYXRhO1xuXG4gICAgY29uc3QgZXZlbnQgPSBfZW5oYW5jZUV2ZW50V2l0aEluaXRpYWxGcmFtZShcbiAgICAgIGV2ZW50RnJvbVVua25vd25JbnB1dChzdGFja1BhcnNlciwgZXJyb3IgfHwgbXNnLCB1bmRlZmluZWQsIGF0dGFjaFN0YWNrdHJhY2UsIGZhbHNlKSxcbiAgICAgIHVybCxcbiAgICAgIGxpbmUsXG4gICAgICBjb2x1bW4sXG4gICAgKTtcblxuICAgIGV2ZW50LmxldmVsID0gJ2Vycm9yJztcblxuICAgIGNhcHR1cmVFdmVudChldmVudCwge1xuICAgICAgb3JpZ2luYWxFeGNlcHRpb246IGVycm9yLFxuICAgICAgbWVjaGFuaXNtOiB7XG4gICAgICAgIGhhbmRsZWQ6IGZhbHNlLFxuICAgICAgICB0eXBlOiAnb25lcnJvcicsXG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX2luc3RhbGxHbG9iYWxPblVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZXIoY2xpZW50KSB7XG4gIGFkZEdsb2JhbFVuaGFuZGxlZFJlamVjdGlvbkluc3RydW1lbnRhdGlvbkhhbmRsZXIoZSA9PiB7XG4gICAgY29uc3QgeyBzdGFja1BhcnNlciwgYXR0YWNoU3RhY2t0cmFjZSB9ID0gZ2V0T3B0aW9ucygpO1xuXG4gICAgaWYgKGdldENsaWVudCgpICE9PSBjbGllbnQgfHwgc2hvdWxkSWdub3JlT25FcnJvcigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3IgPSBfZ2V0VW5oYW5kbGVkUmVqZWN0aW9uRXJyb3IoZSApO1xuXG4gICAgY29uc3QgZXZlbnQgPSBpc1ByaW1pdGl2ZShlcnJvcilcbiAgICAgID8gX2V2ZW50RnJvbVJlamVjdGlvbldpdGhQcmltaXRpdmUoZXJyb3IpXG4gICAgICA6IGV2ZW50RnJvbVVua25vd25JbnB1dChzdGFja1BhcnNlciwgZXJyb3IsIHVuZGVmaW5lZCwgYXR0YWNoU3RhY2t0cmFjZSwgdHJ1ZSk7XG5cbiAgICBldmVudC5sZXZlbCA9ICdlcnJvcic7XG5cbiAgICBjYXB0dXJlRXZlbnQoZXZlbnQsIHtcbiAgICAgIG9yaWdpbmFsRXhjZXB0aW9uOiBlcnJvcixcbiAgICAgIG1lY2hhbmlzbToge1xuICAgICAgICBoYW5kbGVkOiBmYWxzZSxcbiAgICAgICAgdHlwZTogJ29udW5oYW5kbGVkcmVqZWN0aW9uJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfZ2V0VW5oYW5kbGVkUmVqZWN0aW9uRXJyb3IoZXJyb3IpIHtcbiAgaWYgKGlzUHJpbWl0aXZlKGVycm9yKSkge1xuICAgIHJldHVybiBlcnJvcjtcbiAgfVxuXG4gIC8vIGRpZyB0aGUgb2JqZWN0IG9mIHRoZSByZWplY3Rpb24gb3V0IG9mIGtub3duIGV2ZW50IHR5cGVzXG4gIHRyeSB7XG5cbiAgICAvLyBQcm9taXNlUmVqZWN0aW9uRXZlbnRzIHN0b3JlIHRoZSBvYmplY3Qgb2YgdGhlIHJlamVjdGlvbiB1bmRlciAncmVhc29uJ1xuICAgIC8vIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUHJvbWlzZVJlamVjdGlvbkV2ZW50XG4gICAgaWYgKCdyZWFzb24nIGluIChlcnJvciApKSB7XG4gICAgICByZXR1cm4gKGVycm9yICkucmVhc29uO1xuICAgIH1cblxuICAgIC8vIHNvbWV0aGluZywgc29tZXdoZXJlLCAobGlrZWx5IGEgYnJvd3NlciBleHRlbnNpb24pIGVmZmVjdGl2ZWx5IGNhc3RzIFByb21pc2VSZWplY3Rpb25FdmVudHNcbiAgICAvLyB0byBDdXN0b21FdmVudHMsIG1vdmluZyB0aGUgYHByb21pc2VgIGFuZCBgcmVhc29uYCBhdHRyaWJ1dGVzIG9mIHRoZSBQUkUgaW50b1xuICAgIC8vIHRoZSBDdXN0b21FdmVudCdzIGBkZXRhaWxgIGF0dHJpYnV0ZSwgc2luY2UgdGhleSdyZSBub3QgcGFydCBvZiBDdXN0b21FdmVudCdzIHNwZWNcbiAgICAvLyBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0N1c3RvbUV2ZW50IGFuZFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzIzODBcbiAgICBpZiAoJ2RldGFpbCcgaW4gKGVycm9yICkgJiYgJ3JlYXNvbicgaW4gKGVycm9yICkuZGV0YWlsKSB7XG4gICAgICByZXR1cm4gKGVycm9yICkuZGV0YWlsLnJlYXNvbjtcbiAgICB9XG4gIH0gY2F0Y2gge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG4gIHJldHVybiBlcnJvcjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gZXZlbnQgZnJvbSBhIHByb21pc2UgcmVqZWN0aW9uIHdoZXJlIHRoZSBgcmVhc29uYCBpcyBhIHByaW1pdGl2ZS5cbiAqXG4gKiBAcGFyYW0gcmVhc29uOiBUaGUgYHJlYXNvbmAgcHJvcGVydHkgb2YgdGhlIHByb21pc2UgcmVqZWN0aW9uXG4gKiBAcmV0dXJucyBBbiBFdmVudCBvYmplY3Qgd2l0aCBhbiBhcHByb3ByaWF0ZSBgZXhjZXB0aW9uYCB2YWx1ZVxuICovXG5mdW5jdGlvbiBfZXZlbnRGcm9tUmVqZWN0aW9uV2l0aFByaW1pdGl2ZShyZWFzb24pIHtcbiAgcmV0dXJuIHtcbiAgICBleGNlcHRpb246IHtcbiAgICAgIHZhbHVlczogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ1VuaGFuZGxlZFJlamVjdGlvbicsXG4gICAgICAgICAgLy8gU3RyaW5nKCkgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIFByaW1pdGl2ZSB0eXBlIGluY2x1ZGVzIHN5bWJvbHMgKHdoaWNoIGNhbid0IGJlIGF1dG9tYXRpY2FsbHkgc3RyaW5naWZpZWQpXG4gICAgICAgICAgdmFsdWU6IGBOb24tRXJyb3IgcHJvbWlzZSByZWplY3Rpb24gY2FwdHVyZWQgd2l0aCB2YWx1ZTogJHtTdHJpbmcocmVhc29uKX1gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBfZW5oYW5jZUV2ZW50V2l0aEluaXRpYWxGcmFtZShcbiAgZXZlbnQsXG4gIHVybCxcbiAgbGluZSxcbiAgY29sdW1uLFxuKSB7XG4gIC8vIGV2ZW50LmV4Y2VwdGlvblxuICBjb25zdCBlID0gKGV2ZW50LmV4Y2VwdGlvbiA9IGV2ZW50LmV4Y2VwdGlvbiB8fCB7fSk7XG4gIC8vIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNcbiAgY29uc3QgZXYgPSAoZS52YWx1ZXMgPSBlLnZhbHVlcyB8fCBbXSk7XG4gIC8vIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF1cbiAgY29uc3QgZXYwID0gKGV2WzBdID0gZXZbMF0gfHwge30pO1xuICAvLyBldmVudC5leGNlcHRpb24udmFsdWVzWzBdLnN0YWNrdHJhY2VcbiAgY29uc3QgZXYwcyA9IChldjAuc3RhY2t0cmFjZSA9IGV2MC5zdGFja3RyYWNlIHx8IHt9KTtcbiAgLy8gZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS5zdGFja3RyYWNlLmZyYW1lc1xuICBjb25zdCBldjBzZiA9IChldjBzLmZyYW1lcyA9IGV2MHMuZnJhbWVzIHx8IFtdKTtcblxuICBjb25zdCBjb2xubyA9IGNvbHVtbjtcbiAgY29uc3QgbGluZW5vID0gbGluZTtcbiAgY29uc3QgZmlsZW5hbWUgPSBpc1N0cmluZyh1cmwpICYmIHVybC5sZW5ndGggPiAwID8gdXJsIDogZ2V0TG9jYXRpb25IcmVmKCk7XG5cbiAgLy8gZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS5zdGFja3RyYWNlLmZyYW1lc1xuICBpZiAoZXYwc2YubGVuZ3RoID09PSAwKSB7XG4gICAgZXYwc2YucHVzaCh7XG4gICAgICBjb2xubyxcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgZnVuY3Rpb246IFVOS05PV05fRlVOQ1RJT04sXG4gICAgICBpbl9hcHA6IHRydWUsXG4gICAgICBsaW5lbm8sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZXZlbnQ7XG59XG5cbmZ1bmN0aW9uIGdsb2JhbEhhbmRsZXJMb2codHlwZSkge1xuICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5sb2coYEdsb2JhbCBIYW5kbGVyIGF0dGFjaGVkOiAke3R5cGV9YCk7XG59XG5cbmZ1bmN0aW9uIGdldE9wdGlvbnMoKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuICBjb25zdCBvcHRpb25zID0gY2xpZW50Py5nZXRPcHRpb25zKCkgfHwge1xuICAgIHN0YWNrUGFyc2VyOiAoKSA9PiBbXSxcbiAgICBhdHRhY2hTdGFja3RyYWNlOiBmYWxzZSxcbiAgfTtcbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmV4cG9ydCB7IGdsb2JhbEhhbmRsZXJzSW50ZWdyYXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdsb2JhbGhhbmRsZXJzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/globalhandlers.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/graphqlClient.js":
/*!****************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/graphqlClient.js ***!
  \****************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getGraphQLRequestPayload: () => (/* binding */ getGraphQLRequestPayload),\n/* harmony export */   getRequestPayloadXhrOrFetch: () => (/* binding */ getRequestPayloadXhrOrFetch),\n/* harmony export */   graphqlClientIntegration: () => (/* binding */ graphqlClientIntegration),\n/* harmony export */   parseGraphQLQuery: () => (/* binding */ parseGraphQLQuery)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry-internal/browser-utils */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/index.js\");\n\n\n\nconst INTEGRATION_NAME = 'GraphQLClient';\n\nconst _graphqlClientIntegration = ((options) => {\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      _updateSpanWithGraphQLData(client, options);\n      _updateBreadcrumbWithGraphQLData(client, options);\n    },\n  };\n}) ;\n\nfunction _updateSpanWithGraphQLData(client, options) {\n  client.on('beforeOutgoingRequestSpan', (span, hint) => {\n    const spanJSON = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(span);\n\n    const spanAttributes = spanJSON.data || {};\n    const spanOp = spanAttributes[_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP];\n\n    const isHttpClientSpan = spanOp === 'http.client';\n\n    if (!isHttpClientSpan) {\n      return;\n    }\n\n    const httpUrl = spanAttributes[_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_URL_FULL] || spanAttributes['http.url'];\n    const httpMethod = spanAttributes[_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD] || spanAttributes['http.method'];\n\n    if (!(0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isString)(httpUrl) || !(0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isString)(httpMethod)) {\n      return;\n    }\n\n    const { endpoints } = options;\n    const isTracedGraphqlEndpoint = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.stringMatchesSomePattern)(httpUrl, endpoints);\n    const payload = getRequestPayloadXhrOrFetch(hint );\n\n    if (isTracedGraphqlEndpoint && payload) {\n      const graphqlBody = getGraphQLRequestPayload(payload);\n\n      if (graphqlBody) {\n        const operationInfo = _getGraphQLOperation(graphqlBody);\n        span.updateName(`${httpMethod} ${httpUrl} (${operationInfo})`);\n        span.setAttribute('graphql.document', payload);\n      }\n    }\n  });\n}\n\nfunction _updateBreadcrumbWithGraphQLData(client, options) {\n  client.on('beforeOutgoingRequestBreadcrumb', (breadcrumb, handlerData) => {\n    const { category, type, data } = breadcrumb;\n\n    const isFetch = category === 'fetch';\n    const isXhr = category === 'xhr';\n    const isHttpBreadcrumb = type === 'http';\n\n    if (isHttpBreadcrumb && (isFetch || isXhr)) {\n      const httpUrl = data?.url;\n      const { endpoints } = options;\n\n      const isTracedGraphqlEndpoint = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.stringMatchesSomePattern)(httpUrl, endpoints);\n      const payload = getRequestPayloadXhrOrFetch(handlerData );\n\n      if (isTracedGraphqlEndpoint && data && payload) {\n        const graphqlBody = getGraphQLRequestPayload(payload);\n\n        if (!data.graphql && graphqlBody) {\n          const operationInfo = _getGraphQLOperation(graphqlBody);\n          data['graphql.document'] = graphqlBody.query;\n          data['graphql.operation'] = operationInfo;\n        }\n      }\n    }\n  });\n}\n\n/**\n * @param requestBody - GraphQL request\n * @returns A formatted version of the request: 'TYPE NAME' or 'TYPE'\n */\nfunction _getGraphQLOperation(requestBody) {\n  const { query: graphqlQuery, operationName: graphqlOperationName } = requestBody;\n\n  const { operationName = graphqlOperationName, operationType } = parseGraphQLQuery(graphqlQuery);\n  const operationInfo = operationName ? `${operationType} ${operationName}` : `${operationType}`;\n\n  return operationInfo;\n}\n\n/**\n * Get the request body/payload based on the shape of the hint.\n *\n * Exported for tests only.\n */\nfunction getRequestPayloadXhrOrFetch(hint) {\n  const isXhr = 'xhr' in hint;\n\n  let body;\n\n  if (isXhr) {\n    const sentryXhrData = hint.xhr[_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.SENTRY_XHR_DATA_KEY];\n    body = sentryXhrData && (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.getBodyString)(sentryXhrData.body)[0];\n  } else {\n    const sentryFetchData = (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.getFetchRequestArgBody)(hint.input);\n    body = (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.getBodyString)(sentryFetchData)[0];\n  }\n\n  return body;\n}\n\n/**\n * Extract the name and type of the operation from the GraphQL query.\n *\n * Exported for tests only.\n */\nfunction parseGraphQLQuery(query) {\n  const namedQueryRe = /^(?:\\s*)(query|mutation|subscription)(?:\\s*)(\\w+)(?:\\s*)[{(]/;\n  const unnamedQueryRe = /^(?:\\s*)(query|mutation|subscription)(?:\\s*)[{(]/;\n\n  const namedMatch = query.match(namedQueryRe);\n  if (namedMatch) {\n    return {\n      operationType: namedMatch[1],\n      operationName: namedMatch[2],\n    };\n  }\n\n  const unnamedMatch = query.match(unnamedQueryRe);\n  if (unnamedMatch) {\n    return {\n      operationType: unnamedMatch[1],\n      operationName: undefined,\n    };\n  }\n  return {\n    operationType: undefined,\n    operationName: undefined,\n  };\n}\n\n/**\n * Extract the payload of a request if it's GraphQL.\n * Exported for tests only.\n * @param payload - A valid JSON string\n * @returns A POJO or undefined\n */\nfunction getGraphQLRequestPayload(payload) {\n  let graphqlBody = undefined;\n  try {\n    const requestBody = JSON.parse(payload) ;\n\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n    const isGraphQLRequest = !!requestBody['query'];\n    if (isGraphQLRequest) {\n      graphqlBody = requestBody;\n    }\n  } finally {\n    // Fallback to undefined if payload is an invalid JSON (SyntaxError)\n\n    /* eslint-disable no-unsafe-finally */\n    return graphqlBody;\n  }\n}\n\n/**\n * This integration ensures that GraphQL requests made in the browser\n * have their GraphQL-specific data captured and attached to spans and breadcrumbs.\n */\nconst graphqlClientIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(_graphqlClientIntegration);\n\n\n//# sourceMappingURL=graphqlClient.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbnRlZ3JhdGlvbnMvZ3JhcGhxbENsaWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBb007QUFDeEY7O0FBRTVHOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLHFCQUFxQix3REFBVTs7QUFFL0I7QUFDQSxrQ0FBa0Msc0VBQTRCOztBQUU5RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DLHFFQUEyQjtBQUM5RCxzQ0FBc0MsZ0ZBQXNDOztBQUU1RSxTQUFTLHNEQUFRLGNBQWMsc0RBQVE7QUFDdkM7QUFDQTs7QUFFQSxZQUFZLFlBQVk7QUFDeEIsb0NBQW9DLHNFQUF3QjtBQUM1RDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsWUFBWSxFQUFFLFNBQVMsR0FBRyxjQUFjO0FBQ25FO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EsWUFBWSx1QkFBdUI7O0FBRW5DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYyxZQUFZOztBQUUxQixzQ0FBc0Msc0VBQXdCO0FBQzlEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsMkRBQTJEOztBQUVyRSxVQUFVLHNEQUFzRDtBQUNoRSwyQ0FBMkMsZUFBZSxFQUFFLGNBQWMsT0FBTyxjQUFjOztBQUUvRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsbUNBQW1DLCtFQUFtQjtBQUN0RCw0QkFBNEIsNkVBQWE7QUFDekMsSUFBSTtBQUNKLDRCQUE0QixzRkFBc0I7QUFDbEQsV0FBVyw2RUFBYTtBQUN4Qjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtGQUFrRjtBQUNsRix3RUFBd0U7O0FBRXhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLCtEQUFpQjs7QUFFNEQ7QUFDOUciLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vaW50ZWdyYXRpb25zL2dyYXBocWxDbGllbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lSW50ZWdyYXRpb24sIHNwYW5Ub0pTT04sIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1AsIFNFTUFOVElDX0FUVFJJQlVURV9VUkxfRlVMTCwgU0VNQU5USUNfQVRUUklCVVRFX0hUVFBfUkVRVUVTVF9NRVRIT0QsIGlzU3RyaW5nLCBzdHJpbmdNYXRjaGVzU29tZVBhdHRlcm4gfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgU0VOVFJZX1hIUl9EQVRBX0tFWSwgZ2V0Qm9keVN0cmluZywgZ2V0RmV0Y2hSZXF1ZXN0QXJnQm9keSB9IGZyb20gJ0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscyc7XG5cbmNvbnN0IElOVEVHUkFUSU9OX05BTUUgPSAnR3JhcGhRTENsaWVudCc7XG5cbmNvbnN0IF9ncmFwaHFsQ2xpZW50SW50ZWdyYXRpb24gPSAoKG9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBJTlRFR1JBVElPTl9OQU1FLFxuICAgIHNldHVwKGNsaWVudCkge1xuICAgICAgX3VwZGF0ZVNwYW5XaXRoR3JhcGhRTERhdGEoY2xpZW50LCBvcHRpb25zKTtcbiAgICAgIF91cGRhdGVCcmVhZGNydW1iV2l0aEdyYXBoUUxEYXRhKGNsaWVudCwgb3B0aW9ucyk7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuZnVuY3Rpb24gX3VwZGF0ZVNwYW5XaXRoR3JhcGhRTERhdGEoY2xpZW50LCBvcHRpb25zKSB7XG4gIGNsaWVudC5vbignYmVmb3JlT3V0Z29pbmdSZXF1ZXN0U3BhbicsIChzcGFuLCBoaW50KSA9PiB7XG4gICAgY29uc3Qgc3BhbkpTT04gPSBzcGFuVG9KU09OKHNwYW4pO1xuXG4gICAgY29uc3Qgc3BhbkF0dHJpYnV0ZXMgPSBzcGFuSlNPTi5kYXRhIHx8IHt9O1xuICAgIGNvbnN0IHNwYW5PcCA9IHNwYW5BdHRyaWJ1dGVzW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1BdO1xuXG4gICAgY29uc3QgaXNIdHRwQ2xpZW50U3BhbiA9IHNwYW5PcCA9PT0gJ2h0dHAuY2xpZW50JztcblxuICAgIGlmICghaXNIdHRwQ2xpZW50U3Bhbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGh0dHBVcmwgPSBzcGFuQXR0cmlidXRlc1tTRU1BTlRJQ19BVFRSSUJVVEVfVVJMX0ZVTExdIHx8IHNwYW5BdHRyaWJ1dGVzWydodHRwLnVybCddO1xuICAgIGNvbnN0IGh0dHBNZXRob2QgPSBzcGFuQXR0cmlidXRlc1tTRU1BTlRJQ19BVFRSSUJVVEVfSFRUUF9SRVFVRVNUX01FVEhPRF0gfHwgc3BhbkF0dHJpYnV0ZXNbJ2h0dHAubWV0aG9kJ107XG5cbiAgICBpZiAoIWlzU3RyaW5nKGh0dHBVcmwpIHx8ICFpc1N0cmluZyhodHRwTWV0aG9kKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZW5kcG9pbnRzIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGlzVHJhY2VkR3JhcGhxbEVuZHBvaW50ID0gc3RyaW5nTWF0Y2hlc1NvbWVQYXR0ZXJuKGh0dHBVcmwsIGVuZHBvaW50cyk7XG4gICAgY29uc3QgcGF5bG9hZCA9IGdldFJlcXVlc3RQYXlsb2FkWGhyT3JGZXRjaChoaW50ICk7XG5cbiAgICBpZiAoaXNUcmFjZWRHcmFwaHFsRW5kcG9pbnQgJiYgcGF5bG9hZCkge1xuICAgICAgY29uc3QgZ3JhcGhxbEJvZHkgPSBnZXRHcmFwaFFMUmVxdWVzdFBheWxvYWQocGF5bG9hZCk7XG5cbiAgICAgIGlmIChncmFwaHFsQm9keSkge1xuICAgICAgICBjb25zdCBvcGVyYXRpb25JbmZvID0gX2dldEdyYXBoUUxPcGVyYXRpb24oZ3JhcGhxbEJvZHkpO1xuICAgICAgICBzcGFuLnVwZGF0ZU5hbWUoYCR7aHR0cE1ldGhvZH0gJHtodHRwVXJsfSAoJHtvcGVyYXRpb25JbmZvfSlgKTtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2dyYXBocWwuZG9jdW1lbnQnLCBwYXlsb2FkKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfdXBkYXRlQnJlYWRjcnVtYldpdGhHcmFwaFFMRGF0YShjbGllbnQsIG9wdGlvbnMpIHtcbiAgY2xpZW50Lm9uKCdiZWZvcmVPdXRnb2luZ1JlcXVlc3RCcmVhZGNydW1iJywgKGJyZWFkY3J1bWIsIGhhbmRsZXJEYXRhKSA9PiB7XG4gICAgY29uc3QgeyBjYXRlZ29yeSwgdHlwZSwgZGF0YSB9ID0gYnJlYWRjcnVtYjtcblxuICAgIGNvbnN0IGlzRmV0Y2ggPSBjYXRlZ29yeSA9PT0gJ2ZldGNoJztcbiAgICBjb25zdCBpc1hociA9IGNhdGVnb3J5ID09PSAneGhyJztcbiAgICBjb25zdCBpc0h0dHBCcmVhZGNydW1iID0gdHlwZSA9PT0gJ2h0dHAnO1xuXG4gICAgaWYgKGlzSHR0cEJyZWFkY3J1bWIgJiYgKGlzRmV0Y2ggfHwgaXNYaHIpKSB7XG4gICAgICBjb25zdCBodHRwVXJsID0gZGF0YT8udXJsO1xuICAgICAgY29uc3QgeyBlbmRwb2ludHMgfSA9IG9wdGlvbnM7XG5cbiAgICAgIGNvbnN0IGlzVHJhY2VkR3JhcGhxbEVuZHBvaW50ID0gc3RyaW5nTWF0Y2hlc1NvbWVQYXR0ZXJuKGh0dHBVcmwsIGVuZHBvaW50cyk7XG4gICAgICBjb25zdCBwYXlsb2FkID0gZ2V0UmVxdWVzdFBheWxvYWRYaHJPckZldGNoKGhhbmRsZXJEYXRhICk7XG5cbiAgICAgIGlmIChpc1RyYWNlZEdyYXBocWxFbmRwb2ludCAmJiBkYXRhICYmIHBheWxvYWQpIHtcbiAgICAgICAgY29uc3QgZ3JhcGhxbEJvZHkgPSBnZXRHcmFwaFFMUmVxdWVzdFBheWxvYWQocGF5bG9hZCk7XG5cbiAgICAgICAgaWYgKCFkYXRhLmdyYXBocWwgJiYgZ3JhcGhxbEJvZHkpIHtcbiAgICAgICAgICBjb25zdCBvcGVyYXRpb25JbmZvID0gX2dldEdyYXBoUUxPcGVyYXRpb24oZ3JhcGhxbEJvZHkpO1xuICAgICAgICAgIGRhdGFbJ2dyYXBocWwuZG9jdW1lbnQnXSA9IGdyYXBocWxCb2R5LnF1ZXJ5O1xuICAgICAgICAgIGRhdGFbJ2dyYXBocWwub3BlcmF0aW9uJ10gPSBvcGVyYXRpb25JbmZvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gcmVxdWVzdEJvZHkgLSBHcmFwaFFMIHJlcXVlc3RcbiAqIEByZXR1cm5zIEEgZm9ybWF0dGVkIHZlcnNpb24gb2YgdGhlIHJlcXVlc3Q6ICdUWVBFIE5BTUUnIG9yICdUWVBFJ1xuICovXG5mdW5jdGlvbiBfZ2V0R3JhcGhRTE9wZXJhdGlvbihyZXF1ZXN0Qm9keSkge1xuICBjb25zdCB7IHF1ZXJ5OiBncmFwaHFsUXVlcnksIG9wZXJhdGlvbk5hbWU6IGdyYXBocWxPcGVyYXRpb25OYW1lIH0gPSByZXF1ZXN0Qm9keTtcblxuICBjb25zdCB7IG9wZXJhdGlvbk5hbWUgPSBncmFwaHFsT3BlcmF0aW9uTmFtZSwgb3BlcmF0aW9uVHlwZSB9ID0gcGFyc2VHcmFwaFFMUXVlcnkoZ3JhcGhxbFF1ZXJ5KTtcbiAgY29uc3Qgb3BlcmF0aW9uSW5mbyA9IG9wZXJhdGlvbk5hbWUgPyBgJHtvcGVyYXRpb25UeXBlfSAke29wZXJhdGlvbk5hbWV9YCA6IGAke29wZXJhdGlvblR5cGV9YDtcblxuICByZXR1cm4gb3BlcmF0aW9uSW5mbztcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHJlcXVlc3QgYm9keS9wYXlsb2FkIGJhc2VkIG9uIHRoZSBzaGFwZSBvZiB0aGUgaGludC5cbiAqXG4gKiBFeHBvcnRlZCBmb3IgdGVzdHMgb25seS5cbiAqL1xuZnVuY3Rpb24gZ2V0UmVxdWVzdFBheWxvYWRYaHJPckZldGNoKGhpbnQpIHtcbiAgY29uc3QgaXNYaHIgPSAneGhyJyBpbiBoaW50O1xuXG4gIGxldCBib2R5O1xuXG4gIGlmIChpc1hocikge1xuICAgIGNvbnN0IHNlbnRyeVhockRhdGEgPSBoaW50LnhocltTRU5UUllfWEhSX0RBVEFfS0VZXTtcbiAgICBib2R5ID0gc2VudHJ5WGhyRGF0YSAmJiBnZXRCb2R5U3RyaW5nKHNlbnRyeVhockRhdGEuYm9keSlbMF07XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc2VudHJ5RmV0Y2hEYXRhID0gZ2V0RmV0Y2hSZXF1ZXN0QXJnQm9keShoaW50LmlucHV0KTtcbiAgICBib2R5ID0gZ2V0Qm9keVN0cmluZyhzZW50cnlGZXRjaERhdGEpWzBdO1xuICB9XG5cbiAgcmV0dXJuIGJvZHk7XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgbmFtZSBhbmQgdHlwZSBvZiB0aGUgb3BlcmF0aW9uIGZyb20gdGhlIEdyYXBoUUwgcXVlcnkuXG4gKlxuICogRXhwb3J0ZWQgZm9yIHRlc3RzIG9ubHkuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlR3JhcGhRTFF1ZXJ5KHF1ZXJ5KSB7XG4gIGNvbnN0IG5hbWVkUXVlcnlSZSA9IC9eKD86XFxzKikocXVlcnl8bXV0YXRpb258c3Vic2NyaXB0aW9uKSg/OlxccyopKFxcdyspKD86XFxzKilbeyhdLztcbiAgY29uc3QgdW5uYW1lZFF1ZXJ5UmUgPSAvXig/OlxccyopKHF1ZXJ5fG11dGF0aW9ufHN1YnNjcmlwdGlvbikoPzpcXHMqKVt7KF0vO1xuXG4gIGNvbnN0IG5hbWVkTWF0Y2ggPSBxdWVyeS5tYXRjaChuYW1lZFF1ZXJ5UmUpO1xuICBpZiAobmFtZWRNYXRjaCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVyYXRpb25UeXBlOiBuYW1lZE1hdGNoWzFdLFxuICAgICAgb3BlcmF0aW9uTmFtZTogbmFtZWRNYXRjaFsyXSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgdW5uYW1lZE1hdGNoID0gcXVlcnkubWF0Y2godW5uYW1lZFF1ZXJ5UmUpO1xuICBpZiAodW5uYW1lZE1hdGNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdGlvblR5cGU6IHVubmFtZWRNYXRjaFsxXSxcbiAgICAgIG9wZXJhdGlvbk5hbWU6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgb3BlcmF0aW9uVHlwZTogdW5kZWZpbmVkLFxuICAgIG9wZXJhdGlvbk5hbWU6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBwYXlsb2FkIG9mIGEgcmVxdWVzdCBpZiBpdCdzIEdyYXBoUUwuXG4gKiBFeHBvcnRlZCBmb3IgdGVzdHMgb25seS5cbiAqIEBwYXJhbSBwYXlsb2FkIC0gQSB2YWxpZCBKU09OIHN0cmluZ1xuICogQHJldHVybnMgQSBQT0pPIG9yIHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBnZXRHcmFwaFFMUmVxdWVzdFBheWxvYWQocGF5bG9hZCkge1xuICBsZXQgZ3JhcGhxbEJvZHkgPSB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSBKU09OLnBhcnNlKHBheWxvYWQpIDtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICBjb25zdCBpc0dyYXBoUUxSZXF1ZXN0ID0gISFyZXF1ZXN0Qm9keVsncXVlcnknXTtcbiAgICBpZiAoaXNHcmFwaFFMUmVxdWVzdCkge1xuICAgICAgZ3JhcGhxbEJvZHkgPSByZXF1ZXN0Qm9keTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgLy8gRmFsbGJhY2sgdG8gdW5kZWZpbmVkIGlmIHBheWxvYWQgaXMgYW4gaW52YWxpZCBKU09OIChTeW50YXhFcnJvcilcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuc2FmZS1maW5hbGx5ICovXG4gICAgcmV0dXJuIGdyYXBocWxCb2R5O1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBpbnRlZ3JhdGlvbiBlbnN1cmVzIHRoYXQgR3JhcGhRTCByZXF1ZXN0cyBtYWRlIGluIHRoZSBicm93c2VyXG4gKiBoYXZlIHRoZWlyIEdyYXBoUUwtc3BlY2lmaWMgZGF0YSBjYXB0dXJlZCBhbmQgYXR0YWNoZWQgdG8gc3BhbnMgYW5kIGJyZWFkY3J1bWJzLlxuICovXG5jb25zdCBncmFwaHFsQ2xpZW50SW50ZWdyYXRpb24gPSBkZWZpbmVJbnRlZ3JhdGlvbihfZ3JhcGhxbENsaWVudEludGVncmF0aW9uKTtcblxuZXhwb3J0IHsgZ2V0R3JhcGhRTFJlcXVlc3RQYXlsb2FkLCBnZXRSZXF1ZXN0UGF5bG9hZFhock9yRmV0Y2gsIGdyYXBocWxDbGllbnRJbnRlZ3JhdGlvbiwgcGFyc2VHcmFwaFFMUXVlcnkgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdyYXBocWxDbGllbnQuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/graphqlClient.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/httpclient.js":
/*!*************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/httpclient.js ***!
  \*************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   httpClientIntegration: () => (/* binding */ httpClientIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry-internal/browser-utils */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/debug-build.js\");\n\n\n\n\nconst INTEGRATION_NAME = 'HttpClient';\n\nconst _httpClientIntegration = ((options = {}) => {\n  const _options = {\n    failedRequestStatusCodes: [[500, 599]],\n    failedRequestTargets: [/.*/],\n    ...options,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      _wrapFetch(client, _options);\n      _wrapXHR(client, _options);\n    },\n  };\n}) ;\n\n/**\n * Create events for failed client side HTTP requests.\n */\nconst httpClientIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(_httpClientIntegration);\n\n/**\n * Interceptor function for fetch requests\n *\n * @param requestInfo The Fetch API request info\n * @param response The Fetch API response\n * @param requestInit The request init object\n */\nfunction _fetchResponseHandler(\n  options,\n  requestInfo,\n  response,\n  requestInit,\n  error,\n) {\n  if (_shouldCaptureResponse(options, response.status, response.url)) {\n    const request = _getRequest(requestInfo, requestInit);\n\n    let requestHeaders, responseHeaders, requestCookies, responseCookies;\n\n    if (_shouldSendDefaultPii()) {\n      [requestHeaders, requestCookies] = _parseCookieHeaders('Cookie', request);\n      [responseHeaders, responseCookies] = _parseCookieHeaders('Set-Cookie', response);\n    }\n\n    const event = _createEvent({\n      url: request.url,\n      method: request.method,\n      status: response.status,\n      requestHeaders,\n      responseHeaders,\n      requestCookies,\n      responseCookies,\n      error,\n    });\n\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureEvent)(event);\n  }\n}\n\nfunction _parseCookieHeaders(\n  cookieHeader,\n  obj,\n) {\n  const headers = _extractFetchHeaders(obj.headers);\n  let cookies;\n\n  try {\n    const cookieString = headers[cookieHeader] || headers[cookieHeader.toLowerCase()] || undefined;\n\n    if (cookieString) {\n      cookies = _parseCookieString(cookieString);\n    }\n  } catch {\n    // ignore it if parsing fails\n  }\n\n  return [headers, cookies];\n}\n\n/**\n * Interceptor function for XHR requests\n *\n * @param xhr The XHR request\n * @param method The HTTP method\n * @param headers The HTTP headers\n */\nfunction _xhrResponseHandler(\n  options,\n  xhr,\n  method,\n  headers,\n  error,\n) {\n  if (_shouldCaptureResponse(options, xhr.status, xhr.responseURL)) {\n    let requestHeaders, responseCookies, responseHeaders;\n\n    if (_shouldSendDefaultPii()) {\n      try {\n        const cookieString = xhr.getResponseHeader('Set-Cookie') || xhr.getResponseHeader('set-cookie') || undefined;\n\n        if (cookieString) {\n          responseCookies = _parseCookieString(cookieString);\n        }\n      } catch {\n        // ignore it if parsing fails\n      }\n\n      try {\n        responseHeaders = _getXHRResponseHeaders(xhr);\n      } catch {\n        // ignore it if parsing fails\n      }\n\n      requestHeaders = headers;\n    }\n\n    const event = _createEvent({\n      url: xhr.responseURL,\n      method,\n      status: xhr.status,\n      requestHeaders,\n      // Can't access request cookies from XHR\n      responseHeaders,\n      responseCookies,\n      error,\n    });\n\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureEvent)(event);\n  }\n}\n\n/**\n * Extracts response size from `Content-Length` header when possible\n *\n * @param headers\n * @returns The response size in bytes or undefined\n */\nfunction _getResponseSizeFromHeaders(headers) {\n  if (headers) {\n    const contentLength = headers['Content-Length'] || headers['content-length'];\n\n    if (contentLength) {\n      return parseInt(contentLength, 10);\n    }\n  }\n\n  return undefined;\n}\n\n/**\n * Creates an object containing cookies from the given cookie string\n *\n * @param cookieString The cookie string to parse\n * @returns The parsed cookies\n */\nfunction _parseCookieString(cookieString) {\n  return cookieString.split('; ').reduce((acc, cookie) => {\n    const [key, value] = cookie.split('=');\n    if (key && value) {\n      acc[key] = value;\n    }\n    return acc;\n  }, {});\n}\n\n/**\n * Extracts the headers as an object from the given Fetch API request or response object\n *\n * @param headers The headers to extract\n * @returns The extracted headers as an object\n */\nfunction _extractFetchHeaders(headers) {\n  const result = {};\n\n  headers.forEach((value, key) => {\n    result[key] = value;\n  });\n\n  return result;\n}\n\n/**\n * Extracts the response headers as an object from the given XHR object\n *\n * @param xhr The XHR object to extract the response headers from\n * @returns The response headers as an object\n */\nfunction _getXHRResponseHeaders(xhr) {\n  const headers = xhr.getAllResponseHeaders();\n\n  if (!headers) {\n    return {};\n  }\n\n  return headers.split('\\r\\n').reduce((acc, line) => {\n    const [key, value] = line.split(': ');\n    if (key && value) {\n      acc[key] = value;\n    }\n    return acc;\n  }, {});\n}\n\n/**\n * Checks if the given target url is in the given list of targets\n *\n * @param target The target url to check\n * @returns true if the target url is in the given list of targets, false otherwise\n */\nfunction _isInGivenRequestTargets(\n  failedRequestTargets,\n  target,\n) {\n  return failedRequestTargets.some((givenRequestTarget) => {\n    if (typeof givenRequestTarget === 'string') {\n      return target.includes(givenRequestTarget);\n    }\n\n    return givenRequestTarget.test(target);\n  });\n}\n\n/**\n * Checks if the given status code is in the given range\n *\n * @param status The status code to check\n * @returns true if the status code is in the given range, false otherwise\n */\nfunction _isInGivenStatusRanges(\n  failedRequestStatusCodes,\n  status,\n) {\n  return failedRequestStatusCodes.some((range) => {\n    if (typeof range === 'number') {\n      return range === status;\n    }\n\n    return status >= range[0] && status <= range[1];\n  });\n}\n\n/**\n * Wraps `fetch` function to capture request and response data\n */\nfunction _wrapFetch(client, options) {\n  if (!(0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.supportsNativeFetch)()) {\n    return;\n  }\n\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addFetchInstrumentationHandler)(handlerData => {\n    if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)() !== client) {\n      return;\n    }\n\n    const { response, args, error, virtualError } = handlerData;\n    const [requestInfo, requestInit] = args ;\n\n    if (!response) {\n      return;\n    }\n\n    _fetchResponseHandler(options, requestInfo, response , requestInit, error || virtualError);\n  }, false);\n}\n\n/**\n * Wraps XMLHttpRequest to capture request and response data\n */\nfunction _wrapXHR(client, options) {\n  if (!(\"XMLHttpRequest\" in _sentry_core__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ)) {\n    return;\n  }\n\n  (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.addXhrInstrumentationHandler)(handlerData => {\n    if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)() !== client) {\n      return;\n    }\n\n    const { error, virtualError } = handlerData;\n\n    const xhr = handlerData.xhr ;\n\n    const sentryXhrData = xhr[_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.SENTRY_XHR_DATA_KEY];\n\n    if (!sentryXhrData) {\n      return;\n    }\n\n    const { method, request_headers: headers } = sentryXhrData;\n\n    try {\n      _xhrResponseHandler(options, xhr, method, headers, error || virtualError);\n    } catch (e) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_2__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn('Error while extracting response event form XHR response', e);\n    }\n  });\n}\n\n/**\n * Checks whether to capture given response as an event\n *\n * @param status response status code\n * @param url response url\n */\nfunction _shouldCaptureResponse(options, status, url) {\n  return (\n    _isInGivenStatusRanges(options.failedRequestStatusCodes, status) &&\n    _isInGivenRequestTargets(options.failedRequestTargets, url) &&\n    !(0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isSentryRequestUrl)(url, (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)())\n  );\n}\n\n/**\n * Creates a synthetic Sentry event from given response data\n *\n * @param data response data\n * @returns event\n */\nfunction _createEvent(data\n\n) {\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  const virtualStackTrace = client && data.error && data.error instanceof Error ? data.error.stack : undefined;\n  // Remove the first frame from the stack as it's the HttpClient call\n  const stack = virtualStackTrace && client ? client.getOptions().stackParser(virtualStackTrace, 0, 1) : undefined;\n  const message = `HTTP Client Error with status code: ${data.status}`;\n\n  const event = {\n    message,\n    exception: {\n      values: [\n        {\n          type: 'Error',\n          value: message,\n          stacktrace: stack ? { frames: stack } : undefined,\n        },\n      ],\n    },\n    request: {\n      url: data.url,\n      method: data.method,\n      headers: data.requestHeaders,\n      cookies: data.requestCookies,\n    },\n    contexts: {\n      response: {\n        status_code: data.status,\n        headers: data.responseHeaders,\n        cookies: data.responseCookies,\n        body_size: _getResponseSizeFromHeaders(data.responseHeaders),\n      },\n    },\n  };\n\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addExceptionMechanism)(event, {\n    type: 'http.client',\n    handled: false,\n  });\n\n  return event;\n}\n\nfunction _getRequest(requestInfo, requestInit) {\n  if (!requestInit && requestInfo instanceof Request) {\n    return requestInfo;\n  }\n\n  // If both are set, we try to construct a new Request with the given arguments\n  // However, if e.g. the original request has a `body`, this will throw an error because it was already accessed\n  // In this case, as a fallback, we just use the original request - using both is rather an edge case\n  if (requestInfo instanceof Request && requestInfo.bodyUsed) {\n    return requestInfo;\n  }\n\n  return new Request(requestInfo, requestInit);\n}\n\nfunction _shouldSendDefaultPii() {\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  return client ? Boolean(client.getOptions().sendDefaultPii) : false;\n}\n\n\n//# sourceMappingURL=httpclient.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbnRlZ3JhdGlvbnMvaHR0cGNsaWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTZMO0FBQzFGO0FBQ25EOztBQUVoRDs7QUFFQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsK0RBQWlCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMLElBQUksMERBQVk7QUFDaEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMLElBQUksMERBQVk7QUFDaEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxJQUFJO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsSUFBSTtBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8saUVBQW1CO0FBQzFCO0FBQ0E7O0FBRUEsRUFBRSw0RUFBOEI7QUFDaEMsUUFBUSx1REFBUztBQUNqQjtBQUNBOztBQUVBLFlBQVksc0NBQXNDO0FBQ2xEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsd0VBQThCO0FBQ3RDO0FBQ0E7O0FBRUEsRUFBRSw0RkFBNEI7QUFDOUIsUUFBUSx1REFBUztBQUNqQjtBQUNBOztBQUVBLFlBQVksc0JBQXNCOztBQUVsQzs7QUFFQSw4QkFBOEIsK0VBQW1COztBQUVqRDtBQUNBO0FBQ0E7O0FBRUEsWUFBWSxtQ0FBbUM7O0FBRS9DO0FBQ0E7QUFDQSxNQUFNO0FBQ04sTUFBTSx3REFBVyxJQUFJLCtDQUFLO0FBQzFCO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxnRUFBa0IsTUFBTSx1REFBUztBQUN0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLHVEQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxZQUFZOztBQUVyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxnQkFBZ0I7QUFDaEQsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQSxFQUFFLG1FQUFxQjtBQUN2QjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLHVEQUFTO0FBQzFCO0FBQ0E7O0FBRWlDO0FBQ2pDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrYnJvd3NlckA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9idWlsZC9ucG0vZXNtL2ludGVncmF0aW9ucy9odHRwY2xpZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmluZUludGVncmF0aW9uLCBzdXBwb3J0c05hdGl2ZUZldGNoLCBhZGRGZXRjaEluc3RydW1lbnRhdGlvbkhhbmRsZXIsIGdldENsaWVudCwgR0xPQkFMX09CSiwgZGVidWcsIGNhcHR1cmVFdmVudCwgaXNTZW50cnlSZXF1ZXN0VXJsLCBhZGRFeGNlcHRpb25NZWNoYW5pc20gfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgYWRkWGhySW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgU0VOVFJZX1hIUl9EQVRBX0tFWSB9IGZyb20gJ0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscyc7XG5pbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4uL2RlYnVnLWJ1aWxkLmpzJztcblxuY29uc3QgSU5URUdSQVRJT05fTkFNRSA9ICdIdHRwQ2xpZW50JztcblxuY29uc3QgX2h0dHBDbGllbnRJbnRlZ3JhdGlvbiA9ICgob3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IF9vcHRpb25zID0ge1xuICAgIGZhaWxlZFJlcXVlc3RTdGF0dXNDb2RlczogW1s1MDAsIDU5OV1dLFxuICAgIGZhaWxlZFJlcXVlc3RUYXJnZXRzOiBbLy4qL10sXG4gICAgLi4ub3B0aW9ucyxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IElOVEVHUkFUSU9OX05BTUUsXG4gICAgc2V0dXAoY2xpZW50KSB7XG4gICAgICBfd3JhcEZldGNoKGNsaWVudCwgX29wdGlvbnMpO1xuICAgICAgX3dyYXBYSFIoY2xpZW50LCBfb3B0aW9ucyk7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuLyoqXG4gKiBDcmVhdGUgZXZlbnRzIGZvciBmYWlsZWQgY2xpZW50IHNpZGUgSFRUUCByZXF1ZXN0cy5cbiAqL1xuY29uc3QgaHR0cENsaWVudEludGVncmF0aW9uID0gZGVmaW5lSW50ZWdyYXRpb24oX2h0dHBDbGllbnRJbnRlZ3JhdGlvbik7XG5cbi8qKlxuICogSW50ZXJjZXB0b3IgZnVuY3Rpb24gZm9yIGZldGNoIHJlcXVlc3RzXG4gKlxuICogQHBhcmFtIHJlcXVlc3RJbmZvIFRoZSBGZXRjaCBBUEkgcmVxdWVzdCBpbmZvXG4gKiBAcGFyYW0gcmVzcG9uc2UgVGhlIEZldGNoIEFQSSByZXNwb25zZVxuICogQHBhcmFtIHJlcXVlc3RJbml0IFRoZSByZXF1ZXN0IGluaXQgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIF9mZXRjaFJlc3BvbnNlSGFuZGxlcihcbiAgb3B0aW9ucyxcbiAgcmVxdWVzdEluZm8sXG4gIHJlc3BvbnNlLFxuICByZXF1ZXN0SW5pdCxcbiAgZXJyb3IsXG4pIHtcbiAgaWYgKF9zaG91bGRDYXB0dXJlUmVzcG9uc2Uob3B0aW9ucywgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS51cmwpKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IF9nZXRSZXF1ZXN0KHJlcXVlc3RJbmZvLCByZXF1ZXN0SW5pdCk7XG5cbiAgICBsZXQgcmVxdWVzdEhlYWRlcnMsIHJlc3BvbnNlSGVhZGVycywgcmVxdWVzdENvb2tpZXMsIHJlc3BvbnNlQ29va2llcztcblxuICAgIGlmIChfc2hvdWxkU2VuZERlZmF1bHRQaWkoKSkge1xuICAgICAgW3JlcXVlc3RIZWFkZXJzLCByZXF1ZXN0Q29va2llc10gPSBfcGFyc2VDb29raWVIZWFkZXJzKCdDb29raWUnLCByZXF1ZXN0KTtcbiAgICAgIFtyZXNwb25zZUhlYWRlcnMsIHJlc3BvbnNlQ29va2llc10gPSBfcGFyc2VDb29raWVIZWFkZXJzKCdTZXQtQ29va2llJywgcmVzcG9uc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50ID0gX2NyZWF0ZUV2ZW50KHtcbiAgICAgIHVybDogcmVxdWVzdC51cmwsXG4gICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICByZXF1ZXN0SGVhZGVycyxcbiAgICAgIHJlc3BvbnNlSGVhZGVycyxcbiAgICAgIHJlcXVlc3RDb29raWVzLFxuICAgICAgcmVzcG9uc2VDb29raWVzLFxuICAgICAgZXJyb3IsXG4gICAgfSk7XG5cbiAgICBjYXB0dXJlRXZlbnQoZXZlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9wYXJzZUNvb2tpZUhlYWRlcnMoXG4gIGNvb2tpZUhlYWRlcixcbiAgb2JqLFxuKSB7XG4gIGNvbnN0IGhlYWRlcnMgPSBfZXh0cmFjdEZldGNoSGVhZGVycyhvYmouaGVhZGVycyk7XG4gIGxldCBjb29raWVzO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgY29va2llU3RyaW5nID0gaGVhZGVyc1tjb29raWVIZWFkZXJdIHx8IGhlYWRlcnNbY29va2llSGVhZGVyLnRvTG93ZXJDYXNlKCldIHx8IHVuZGVmaW5lZDtcblxuICAgIGlmIChjb29raWVTdHJpbmcpIHtcbiAgICAgIGNvb2tpZXMgPSBfcGFyc2VDb29raWVTdHJpbmcoY29va2llU3RyaW5nKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZSBpdCBpZiBwYXJzaW5nIGZhaWxzXG4gIH1cblxuICByZXR1cm4gW2hlYWRlcnMsIGNvb2tpZXNdO1xufVxuXG4vKipcbiAqIEludGVyY2VwdG9yIGZ1bmN0aW9uIGZvciBYSFIgcmVxdWVzdHNcbiAqXG4gKiBAcGFyYW0geGhyIFRoZSBYSFIgcmVxdWVzdFxuICogQHBhcmFtIG1ldGhvZCBUaGUgSFRUUCBtZXRob2RcbiAqIEBwYXJhbSBoZWFkZXJzIFRoZSBIVFRQIGhlYWRlcnNcbiAqL1xuZnVuY3Rpb24gX3hoclJlc3BvbnNlSGFuZGxlcihcbiAgb3B0aW9ucyxcbiAgeGhyLFxuICBtZXRob2QsXG4gIGhlYWRlcnMsXG4gIGVycm9yLFxuKSB7XG4gIGlmIChfc2hvdWxkQ2FwdHVyZVJlc3BvbnNlKG9wdGlvbnMsIHhoci5zdGF0dXMsIHhoci5yZXNwb25zZVVSTCkpIHtcbiAgICBsZXQgcmVxdWVzdEhlYWRlcnMsIHJlc3BvbnNlQ29va2llcywgcmVzcG9uc2VIZWFkZXJzO1xuXG4gICAgaWYgKF9zaG91bGRTZW5kRGVmYXVsdFBpaSgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb29raWVTdHJpbmcgPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ1NldC1Db29raWUnKSB8fCB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ3NldC1jb29raWUnKSB8fCB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKGNvb2tpZVN0cmluZykge1xuICAgICAgICAgIHJlc3BvbnNlQ29va2llcyA9IF9wYXJzZUNvb2tpZVN0cmluZyhjb29raWVTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlIGl0IGlmIHBhcnNpbmcgZmFpbHNcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzcG9uc2VIZWFkZXJzID0gX2dldFhIUlJlc3BvbnNlSGVhZGVycyh4aHIpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIGlnbm9yZSBpdCBpZiBwYXJzaW5nIGZhaWxzXG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3RIZWFkZXJzID0gaGVhZGVycztcbiAgICB9XG5cbiAgICBjb25zdCBldmVudCA9IF9jcmVhdGVFdmVudCh7XG4gICAgICB1cmw6IHhoci5yZXNwb25zZVVSTCxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgIHJlcXVlc3RIZWFkZXJzLFxuICAgICAgLy8gQ2FuJ3QgYWNjZXNzIHJlcXVlc3QgY29va2llcyBmcm9tIFhIUlxuICAgICAgcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgcmVzcG9uc2VDb29raWVzLFxuICAgICAgZXJyb3IsXG4gICAgfSk7XG5cbiAgICBjYXB0dXJlRXZlbnQoZXZlbnQpO1xuICB9XG59XG5cbi8qKlxuICogRXh0cmFjdHMgcmVzcG9uc2Ugc2l6ZSBmcm9tIGBDb250ZW50LUxlbmd0aGAgaGVhZGVyIHdoZW4gcG9zc2libGVcbiAqXG4gKiBAcGFyYW0gaGVhZGVyc1xuICogQHJldHVybnMgVGhlIHJlc3BvbnNlIHNpemUgaW4gYnl0ZXMgb3IgdW5kZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIF9nZXRSZXNwb25zZVNpemVGcm9tSGVhZGVycyhoZWFkZXJzKSB7XG4gIGlmIChoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gfHwgaGVhZGVyc1snY29udGVudC1sZW5ndGgnXTtcblxuICAgIGlmIChjb250ZW50TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQoY29udGVudExlbmd0aCwgMTApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgY29udGFpbmluZyBjb29raWVzIGZyb20gdGhlIGdpdmVuIGNvb2tpZSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0gY29va2llU3RyaW5nIFRoZSBjb29raWUgc3RyaW5nIHRvIHBhcnNlXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIGNvb2tpZXNcbiAqL1xuZnVuY3Rpb24gX3BhcnNlQ29va2llU3RyaW5nKGNvb2tpZVN0cmluZykge1xuICByZXR1cm4gY29va2llU3RyaW5nLnNwbGl0KCc7ICcpLnJlZHVjZSgoYWNjLCBjb29raWUpID0+IHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBjb29raWUuc3BsaXQoJz0nKTtcbiAgICBpZiAoa2V5ICYmIHZhbHVlKSB7XG4gICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIGhlYWRlcnMgYXMgYW4gb2JqZWN0IGZyb20gdGhlIGdpdmVuIEZldGNoIEFQSSByZXF1ZXN0IG9yIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEBwYXJhbSBoZWFkZXJzIFRoZSBoZWFkZXJzIHRvIGV4dHJhY3RcbiAqIEByZXR1cm5zIFRoZSBleHRyYWN0ZWQgaGVhZGVycyBhcyBhbiBvYmplY3RcbiAqL1xuZnVuY3Rpb24gX2V4dHJhY3RGZXRjaEhlYWRlcnMoaGVhZGVycykge1xuICBjb25zdCByZXN1bHQgPSB7fTtcblxuICBoZWFkZXJzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSByZXNwb25zZSBoZWFkZXJzIGFzIGFuIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBYSFIgb2JqZWN0XG4gKlxuICogQHBhcmFtIHhociBUaGUgWEhSIG9iamVjdCB0byBleHRyYWN0IHRoZSByZXNwb25zZSBoZWFkZXJzIGZyb21cbiAqIEByZXR1cm5zIFRoZSByZXNwb25zZSBoZWFkZXJzIGFzIGFuIG9iamVjdFxuICovXG5mdW5jdGlvbiBfZ2V0WEhSUmVzcG9uc2VIZWFkZXJzKHhocikge1xuICBjb25zdCBoZWFkZXJzID0geGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpO1xuXG4gIGlmICghaGVhZGVycykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiBoZWFkZXJzLnNwbGl0KCdcXHJcXG4nKS5yZWR1Y2UoKGFjYywgbGluZSkgPT4ge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGxpbmUuc3BsaXQoJzogJyk7XG4gICAgaWYgKGtleSAmJiB2YWx1ZSkge1xuICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdGFyZ2V0IHVybCBpcyBpbiB0aGUgZ2l2ZW4gbGlzdCBvZiB0YXJnZXRzXG4gKlxuICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHVybCB0byBjaGVja1xuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdGFyZ2V0IHVybCBpcyBpbiB0aGUgZ2l2ZW4gbGlzdCBvZiB0YXJnZXRzLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gX2lzSW5HaXZlblJlcXVlc3RUYXJnZXRzKFxuICBmYWlsZWRSZXF1ZXN0VGFyZ2V0cyxcbiAgdGFyZ2V0LFxuKSB7XG4gIHJldHVybiBmYWlsZWRSZXF1ZXN0VGFyZ2V0cy5zb21lKChnaXZlblJlcXVlc3RUYXJnZXQpID0+IHtcbiAgICBpZiAodHlwZW9mIGdpdmVuUmVxdWVzdFRhcmdldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0YXJnZXQuaW5jbHVkZXMoZ2l2ZW5SZXF1ZXN0VGFyZ2V0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2l2ZW5SZXF1ZXN0VGFyZ2V0LnRlc3QodGFyZ2V0KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBzdGF0dXMgY29kZSBpcyBpbiB0aGUgZ2l2ZW4gcmFuZ2VcbiAqXG4gKiBAcGFyYW0gc3RhdHVzIFRoZSBzdGF0dXMgY29kZSB0byBjaGVja1xuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgc3RhdHVzIGNvZGUgaXMgaW4gdGhlIGdpdmVuIHJhbmdlLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gX2lzSW5HaXZlblN0YXR1c1JhbmdlcyhcbiAgZmFpbGVkUmVxdWVzdFN0YXR1c0NvZGVzLFxuICBzdGF0dXMsXG4pIHtcbiAgcmV0dXJuIGZhaWxlZFJlcXVlc3RTdGF0dXNDb2Rlcy5zb21lKChyYW5nZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgcmFuZ2UgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gcmFuZ2UgPT09IHN0YXR1cztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdHVzID49IHJhbmdlWzBdICYmIHN0YXR1cyA8PSByYW5nZVsxXTtcbiAgfSk7XG59XG5cbi8qKlxuICogV3JhcHMgYGZldGNoYCBmdW5jdGlvbiB0byBjYXB0dXJlIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGRhdGFcbiAqL1xuZnVuY3Rpb24gX3dyYXBGZXRjaChjbGllbnQsIG9wdGlvbnMpIHtcbiAgaWYgKCFzdXBwb3J0c05hdGl2ZUZldGNoKCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhZGRGZXRjaEluc3RydW1lbnRhdGlvbkhhbmRsZXIoaGFuZGxlckRhdGEgPT4ge1xuICAgIGlmIChnZXRDbGllbnQoKSAhPT0gY2xpZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyByZXNwb25zZSwgYXJncywgZXJyb3IsIHZpcnR1YWxFcnJvciB9ID0gaGFuZGxlckRhdGE7XG4gICAgY29uc3QgW3JlcXVlc3RJbmZvLCByZXF1ZXN0SW5pdF0gPSBhcmdzIDtcblxuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBfZmV0Y2hSZXNwb25zZUhhbmRsZXIob3B0aW9ucywgcmVxdWVzdEluZm8sIHJlc3BvbnNlICwgcmVxdWVzdEluaXQsIGVycm9yIHx8IHZpcnR1YWxFcnJvcik7XG4gIH0sIGZhbHNlKTtcbn1cblxuLyoqXG4gKiBXcmFwcyBYTUxIdHRwUmVxdWVzdCB0byBjYXB0dXJlIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGRhdGFcbiAqL1xuZnVuY3Rpb24gX3dyYXBYSFIoY2xpZW50LCBvcHRpb25zKSB7XG4gIGlmICghKCdYTUxIdHRwUmVxdWVzdCcgaW4gR0xPQkFMX09CSikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhZGRYaHJJbnN0cnVtZW50YXRpb25IYW5kbGVyKGhhbmRsZXJEYXRhID0+IHtcbiAgICBpZiAoZ2V0Q2xpZW50KCkgIT09IGNsaWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZXJyb3IsIHZpcnR1YWxFcnJvciB9ID0gaGFuZGxlckRhdGE7XG5cbiAgICBjb25zdCB4aHIgPSBoYW5kbGVyRGF0YS54aHIgO1xuXG4gICAgY29uc3Qgc2VudHJ5WGhyRGF0YSA9IHhocltTRU5UUllfWEhSX0RBVEFfS0VZXTtcblxuICAgIGlmICghc2VudHJ5WGhyRGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgbWV0aG9kLCByZXF1ZXN0X2hlYWRlcnM6IGhlYWRlcnMgfSA9IHNlbnRyeVhockRhdGE7XG5cbiAgICB0cnkge1xuICAgICAgX3hoclJlc3BvbnNlSGFuZGxlcihvcHRpb25zLCB4aHIsIG1ldGhvZCwgaGVhZGVycywgZXJyb3IgfHwgdmlydHVhbEVycm9yKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy53YXJuKCdFcnJvciB3aGlsZSBleHRyYWN0aW5nIHJlc3BvbnNlIGV2ZW50IGZvcm0gWEhSIHJlc3BvbnNlJywgZSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0byBjYXB0dXJlIGdpdmVuIHJlc3BvbnNlIGFzIGFuIGV2ZW50XG4gKlxuICogQHBhcmFtIHN0YXR1cyByZXNwb25zZSBzdGF0dXMgY29kZVxuICogQHBhcmFtIHVybCByZXNwb25zZSB1cmxcbiAqL1xuZnVuY3Rpb24gX3Nob3VsZENhcHR1cmVSZXNwb25zZShvcHRpb25zLCBzdGF0dXMsIHVybCkge1xuICByZXR1cm4gKFxuICAgIF9pc0luR2l2ZW5TdGF0dXNSYW5nZXMob3B0aW9ucy5mYWlsZWRSZXF1ZXN0U3RhdHVzQ29kZXMsIHN0YXR1cykgJiZcbiAgICBfaXNJbkdpdmVuUmVxdWVzdFRhcmdldHMob3B0aW9ucy5mYWlsZWRSZXF1ZXN0VGFyZ2V0cywgdXJsKSAmJlxuICAgICFpc1NlbnRyeVJlcXVlc3RVcmwodXJsLCBnZXRDbGllbnQoKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3ludGhldGljIFNlbnRyeSBldmVudCBmcm9tIGdpdmVuIHJlc3BvbnNlIGRhdGFcbiAqXG4gKiBAcGFyYW0gZGF0YSByZXNwb25zZSBkYXRhXG4gKiBAcmV0dXJucyBldmVudFxuICovXG5mdW5jdGlvbiBfY3JlYXRlRXZlbnQoZGF0YVxuXG4pIHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7XG4gIGNvbnN0IHZpcnR1YWxTdGFja1RyYWNlID0gY2xpZW50ICYmIGRhdGEuZXJyb3IgJiYgZGF0YS5lcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZGF0YS5lcnJvci5zdGFjayA6IHVuZGVmaW5lZDtcbiAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzdGFjayBhcyBpdCdzIHRoZSBIdHRwQ2xpZW50IGNhbGxcbiAgY29uc3Qgc3RhY2sgPSB2aXJ0dWFsU3RhY2tUcmFjZSAmJiBjbGllbnQgPyBjbGllbnQuZ2V0T3B0aW9ucygpLnN0YWNrUGFyc2VyKHZpcnR1YWxTdGFja1RyYWNlLCAwLCAxKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgbWVzc2FnZSA9IGBIVFRQIENsaWVudCBFcnJvciB3aXRoIHN0YXR1cyBjb2RlOiAke2RhdGEuc3RhdHVzfWA7XG5cbiAgY29uc3QgZXZlbnQgPSB7XG4gICAgbWVzc2FnZSxcbiAgICBleGNlcHRpb246IHtcbiAgICAgIHZhbHVlczogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ0Vycm9yJyxcbiAgICAgICAgICB2YWx1ZTogbWVzc2FnZSxcbiAgICAgICAgICBzdGFja3RyYWNlOiBzdGFjayA/IHsgZnJhbWVzOiBzdGFjayB9IDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHJlcXVlc3Q6IHtcbiAgICAgIHVybDogZGF0YS51cmwsXG4gICAgICBtZXRob2Q6IGRhdGEubWV0aG9kLFxuICAgICAgaGVhZGVyczogZGF0YS5yZXF1ZXN0SGVhZGVycyxcbiAgICAgIGNvb2tpZXM6IGRhdGEucmVxdWVzdENvb2tpZXMsXG4gICAgfSxcbiAgICBjb250ZXh0czoge1xuICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgc3RhdHVzX2NvZGU6IGRhdGEuc3RhdHVzLFxuICAgICAgICBoZWFkZXJzOiBkYXRhLnJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29va2llczogZGF0YS5yZXNwb25zZUNvb2tpZXMsXG4gICAgICAgIGJvZHlfc2l6ZTogX2dldFJlc3BvbnNlU2l6ZUZyb21IZWFkZXJzKGRhdGEucmVzcG9uc2VIZWFkZXJzKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICBhZGRFeGNlcHRpb25NZWNoYW5pc20oZXZlbnQsIHtcbiAgICB0eXBlOiAnaHR0cC5jbGllbnQnLFxuICAgIGhhbmRsZWQ6IGZhbHNlLFxuICB9KTtcblxuICByZXR1cm4gZXZlbnQ7XG59XG5cbmZ1bmN0aW9uIF9nZXRSZXF1ZXN0KHJlcXVlc3RJbmZvLCByZXF1ZXN0SW5pdCkge1xuICBpZiAoIXJlcXVlc3RJbml0ICYmIHJlcXVlc3RJbmZvIGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIHJldHVybiByZXF1ZXN0SW5mbztcbiAgfVxuXG4gIC8vIElmIGJvdGggYXJlIHNldCwgd2UgdHJ5IHRvIGNvbnN0cnVjdCBhIG5ldyBSZXF1ZXN0IHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50c1xuICAvLyBIb3dldmVyLCBpZiBlLmcuIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGhhcyBhIGBib2R5YCwgdGhpcyB3aWxsIHRocm93IGFuIGVycm9yIGJlY2F1c2UgaXQgd2FzIGFscmVhZHkgYWNjZXNzZWRcbiAgLy8gSW4gdGhpcyBjYXNlLCBhcyBhIGZhbGxiYWNrLCB3ZSBqdXN0IHVzZSB0aGUgb3JpZ2luYWwgcmVxdWVzdCAtIHVzaW5nIGJvdGggaXMgcmF0aGVyIGFuIGVkZ2UgY2FzZVxuICBpZiAocmVxdWVzdEluZm8gaW5zdGFuY2VvZiBSZXF1ZXN0ICYmIHJlcXVlc3RJbmZvLmJvZHlVc2VkKSB7XG4gICAgcmV0dXJuIHJlcXVlc3RJbmZvO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXF1ZXN0KHJlcXVlc3RJbmZvLCByZXF1ZXN0SW5pdCk7XG59XG5cbmZ1bmN0aW9uIF9zaG91bGRTZW5kRGVmYXVsdFBpaSgpIHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7XG4gIHJldHVybiBjbGllbnQgPyBCb29sZWFuKGNsaWVudC5nZXRPcHRpb25zKCkuc2VuZERlZmF1bHRQaWkpIDogZmFsc2U7XG59XG5cbmV4cG9ydCB7IGh0dHBDbGllbnRJbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aHR0cGNsaWVudC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/httpclient.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/httpcontext.js":
/*!**************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/httpcontext.js ***!
  \**************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   httpContextIntegration: () => (/* binding */ httpContextIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\");\n\n\n\n/**\n * Collects information about HTTP request headers and\n * attaches them to the event.\n */\nconst httpContextIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(() => {\n  return {\n    name: 'HttpContext',\n    preprocessEvent(event) {\n      // if none of the information we want exists, don't bother\n      if (!_helpers_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.navigator && !_helpers_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.location && !_helpers_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.document) {\n        return;\n      }\n\n      const reqData = (0,_helpers_js__WEBPACK_IMPORTED_MODULE_1__.getHttpRequestData)();\n      const headers = {\n        ...reqData.headers,\n        ...event.request?.headers,\n      };\n\n      event.request = {\n        ...reqData,\n        ...event.request,\n        headers,\n      };\n    },\n  };\n});\n\n\n//# sourceMappingURL=httpcontext.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbnRlZ3JhdGlvbnMvaHR0cGNvbnRleHQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWlEO0FBQ1U7O0FBRTNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLCtEQUFpQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsK0NBQU0sZUFBZSwrQ0FBTSxjQUFjLCtDQUFNO0FBQzFEO0FBQ0E7O0FBRUEsc0JBQXNCLCtEQUFrQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFaUM7QUFDbEMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vaW50ZWdyYXRpb25zL2h0dHBjb250ZXh0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmluZUludGVncmF0aW9uIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IFdJTkRPVywgZ2V0SHR0cFJlcXVlc3REYXRhIH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5cbi8qKlxuICogQ29sbGVjdHMgaW5mb3JtYXRpb24gYWJvdXQgSFRUUCByZXF1ZXN0IGhlYWRlcnMgYW5kXG4gKiBhdHRhY2hlcyB0aGVtIHRvIHRoZSBldmVudC5cbiAqL1xuY29uc3QgaHR0cENvbnRleHRJbnRlZ3JhdGlvbiA9IGRlZmluZUludGVncmF0aW9uKCgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnSHR0cENvbnRleHQnLFxuICAgIHByZXByb2Nlc3NFdmVudChldmVudCkge1xuICAgICAgLy8gaWYgbm9uZSBvZiB0aGUgaW5mb3JtYXRpb24gd2Ugd2FudCBleGlzdHMsIGRvbid0IGJvdGhlclxuICAgICAgaWYgKCFXSU5ET1cubmF2aWdhdG9yICYmICFXSU5ET1cubG9jYXRpb24gJiYgIVdJTkRPVy5kb2N1bWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcURhdGEgPSBnZXRIdHRwUmVxdWVzdERhdGEoKTtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgIC4uLnJlcURhdGEuaGVhZGVycyxcbiAgICAgICAgLi4uZXZlbnQucmVxdWVzdD8uaGVhZGVycyxcbiAgICAgIH07XG5cbiAgICAgIGV2ZW50LnJlcXVlc3QgPSB7XG4gICAgICAgIC4uLnJlcURhdGEsXG4gICAgICAgIC4uLmV2ZW50LnJlcXVlc3QsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICB9O1xuICAgIH0sXG4gIH07XG59KTtcblxuZXhwb3J0IHsgaHR0cENvbnRleHRJbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aHR0cGNvbnRleHQuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/httpcontext.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/linkederrors.js":
/*!***************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/linkederrors.js ***!
  \***************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   linkedErrorsIntegration: () => (/* binding */ linkedErrorsIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _eventbuilder_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../eventbuilder.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/eventbuilder.js\");\n\n\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors';\n\nconst _linkedErrorsIntegration = ((options = {}) => {\n  const limit = options.limit || DEFAULT_LIMIT;\n  const key = options.key || DEFAULT_KEY;\n\n  return {\n    name: INTEGRATION_NAME,\n    preprocessEvent(event, hint, client) {\n      const options = client.getOptions();\n\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.applyAggregateErrorsToEvent)(\n        // This differs from the LinkedErrors integration in core by using a different exceptionFromError function\n        _eventbuilder_js__WEBPACK_IMPORTED_MODULE_1__.exceptionFromError,\n        options.stackParser,\n        key,\n        limit,\n        event,\n        hint,\n      );\n    },\n  };\n}) ;\n\n/**\n * Aggregrate linked errors in an event.\n */\nconst linkedErrorsIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(_linkedErrorsIntegration);\n\n\n//# sourceMappingURL=linkederrors.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbnRlZ3JhdGlvbnMvbGlua2VkZXJyb3JzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUE4RTtBQUN0Qjs7QUFFeEQ7QUFDQTs7QUFFQTs7QUFFQSwrQ0FBK0M7QUFDL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLHlFQUEyQjtBQUNqQztBQUNBLFFBQVEsZ0VBQWtCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLCtEQUFpQjs7QUFFZDtBQUNuQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbnRlZ3JhdGlvbnMvbGlua2VkZXJyb3JzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmluZUludGVncmF0aW9uLCBhcHBseUFnZ3JlZ2F0ZUVycm9yc1RvRXZlbnQgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgZXhjZXB0aW9uRnJvbUVycm9yIH0gZnJvbSAnLi4vZXZlbnRidWlsZGVyLmpzJztcblxuY29uc3QgREVGQVVMVF9LRVkgPSAnY2F1c2UnO1xuY29uc3QgREVGQVVMVF9MSU1JVCA9IDU7XG5cbmNvbnN0IElOVEVHUkFUSU9OX05BTUUgPSAnTGlua2VkRXJyb3JzJztcblxuY29uc3QgX2xpbmtlZEVycm9yc0ludGVncmF0aW9uID0gKChvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgbGltaXQgPSBvcHRpb25zLmxpbWl0IHx8IERFRkFVTFRfTElNSVQ7XG4gIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5IHx8IERFRkFVTFRfS0VZO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogSU5URUdSQVRJT05fTkFNRSxcbiAgICBwcmVwcm9jZXNzRXZlbnQoZXZlbnQsIGhpbnQsIGNsaWVudCkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGNsaWVudC5nZXRPcHRpb25zKCk7XG5cbiAgICAgIGFwcGx5QWdncmVnYXRlRXJyb3JzVG9FdmVudChcbiAgICAgICAgLy8gVGhpcyBkaWZmZXJzIGZyb20gdGhlIExpbmtlZEVycm9ycyBpbnRlZ3JhdGlvbiBpbiBjb3JlIGJ5IHVzaW5nIGEgZGlmZmVyZW50IGV4Y2VwdGlvbkZyb21FcnJvciBmdW5jdGlvblxuICAgICAgICBleGNlcHRpb25Gcm9tRXJyb3IsXG4gICAgICAgIG9wdGlvbnMuc3RhY2tQYXJzZXIsXG4gICAgICAgIGtleSxcbiAgICAgICAgbGltaXQsXG4gICAgICAgIGV2ZW50LFxuICAgICAgICBoaW50LFxuICAgICAgKTtcbiAgICB9LFxuICB9O1xufSkgO1xuXG4vKipcbiAqIEFnZ3JlZ3JhdGUgbGlua2VkIGVycm9ycyBpbiBhbiBldmVudC5cbiAqL1xuY29uc3QgbGlua2VkRXJyb3JzSW50ZWdyYXRpb24gPSBkZWZpbmVJbnRlZ3JhdGlvbihfbGlua2VkRXJyb3JzSW50ZWdyYXRpb24pO1xuXG5leHBvcnQgeyBsaW5rZWRFcnJvcnNJbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGlua2VkZXJyb3JzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/linkederrors.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/reportingobserver.js":
/*!********************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/reportingobserver.js ***!
  \********************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   reportingObserverIntegration: () => (/* binding */ reportingObserverIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\nconst WINDOW = _sentry_core__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ ;\n\nconst INTEGRATION_NAME = 'ReportingObserver';\n\nconst SETUP_CLIENTS = new WeakMap();\n\nconst _reportingObserverIntegration = ((options = {}) => {\n  const types = options.types || ['crash', 'deprecation', 'intervention'];\n\n  /** Handler for the reporting observer. */\n  function handler(reports) {\n    if (!SETUP_CLIENTS.has((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)() )) {\n      return;\n    }\n\n    for (const report of reports) {\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.withScope)(scope => {\n        scope.setExtra('url', report.url);\n\n        const label = `ReportingObserver [${report.type}]`;\n        let details = 'No details available';\n\n        if (report.body) {\n          // Object.keys doesn't work on ReportBody, as all properties are inherited\n          const plainBody\n\n = {};\n\n          // eslint-disable-next-line guard-for-in\n          for (const prop in report.body) {\n            plainBody[prop] = report.body[prop];\n          }\n\n          scope.setExtra('body', plainBody);\n\n          if (report.type === 'crash') {\n            const body = report.body ;\n            // A fancy way to create a message out of crashId OR reason OR both OR fallback\n            details = [body.crashId || '', body.reason || ''].join(' ').trim() || details;\n          } else {\n            const body = report.body ;\n            details = body.message || details;\n          }\n        }\n\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureMessage)(`${label}: ${details}`);\n      });\n    }\n  }\n\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      if (!(0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.supportsReportingObserver)()) {\n        return;\n      }\n\n      const observer = new (WINDOW ).ReportingObserver(\n        handler,\n        {\n          buffered: true,\n          types,\n        },\n      );\n\n      observer.observe();\n    },\n\n    setup(client) {\n      SETUP_CLIENTS.set(client, true);\n    },\n  };\n}) ;\n\n/**\n * Reporting API integration - https://w3c.github.io/reporting/\n */\nconst reportingObserverIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(_reportingObserverIntegration);\n\n\n//# sourceMappingURL=reportingobserver.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbnRlZ3JhdGlvbnMvcmVwb3J0aW5nb2JzZXJ2ZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBOEg7O0FBRTlILGVBQWUsb0RBQVU7O0FBRXpCOztBQUVBOztBQUVBLG9EQUFvRDtBQUNwRDs7QUFFQTtBQUNBO0FBQ0EsMkJBQTJCLHVEQUFTO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLHVEQUFTO0FBQ2Y7O0FBRUEsNENBQTRDLFlBQVk7QUFDeEQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsNERBQWMsSUFBSSxNQUFNLElBQUksUUFBUTtBQUM1QyxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVFQUF5QjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQywrREFBaUI7O0FBRWQ7QUFDeEMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vaW50ZWdyYXRpb25zL3JlcG9ydGluZ29ic2VydmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmluZUludGVncmF0aW9uLCBzdXBwb3J0c1JlcG9ydGluZ09ic2VydmVyLCBHTE9CQUxfT0JKLCBnZXRDbGllbnQsIHdpdGhTY29wZSwgY2FwdHVyZU1lc3NhZ2UgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuXG5jb25zdCBXSU5ET1cgPSBHTE9CQUxfT0JKIDtcblxuY29uc3QgSU5URUdSQVRJT05fTkFNRSA9ICdSZXBvcnRpbmdPYnNlcnZlcic7XG5cbmNvbnN0IFNFVFVQX0NMSUVOVFMgPSBuZXcgV2Vha01hcCgpO1xuXG5jb25zdCBfcmVwb3J0aW5nT2JzZXJ2ZXJJbnRlZ3JhdGlvbiA9ICgob3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHR5cGVzID0gb3B0aW9ucy50eXBlcyB8fCBbJ2NyYXNoJywgJ2RlcHJlY2F0aW9uJywgJ2ludGVydmVudGlvbiddO1xuXG4gIC8qKiBIYW5kbGVyIGZvciB0aGUgcmVwb3J0aW5nIG9ic2VydmVyLiAqL1xuICBmdW5jdGlvbiBoYW5kbGVyKHJlcG9ydHMpIHtcbiAgICBpZiAoIVNFVFVQX0NMSUVOVFMuaGFzKGdldENsaWVudCgpICkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlcG9ydCBvZiByZXBvcnRzKSB7XG4gICAgICB3aXRoU2NvcGUoc2NvcGUgPT4ge1xuICAgICAgICBzY29wZS5zZXRFeHRyYSgndXJsJywgcmVwb3J0LnVybCk7XG5cbiAgICAgICAgY29uc3QgbGFiZWwgPSBgUmVwb3J0aW5nT2JzZXJ2ZXIgWyR7cmVwb3J0LnR5cGV9XWA7XG4gICAgICAgIGxldCBkZXRhaWxzID0gJ05vIGRldGFpbHMgYXZhaWxhYmxlJztcblxuICAgICAgICBpZiAocmVwb3J0LmJvZHkpIHtcbiAgICAgICAgICAvLyBPYmplY3Qua2V5cyBkb2Vzbid0IHdvcmsgb24gUmVwb3J0Qm9keSwgYXMgYWxsIHByb3BlcnRpZXMgYXJlIGluaGVyaXRlZFxuICAgICAgICAgIGNvbnN0IHBsYWluQm9keVxuXG4gPSB7fTtcblxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBndWFyZC1mb3ItaW5cbiAgICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gcmVwb3J0LmJvZHkpIHtcbiAgICAgICAgICAgIHBsYWluQm9keVtwcm9wXSA9IHJlcG9ydC5ib2R5W3Byb3BdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNjb3BlLnNldEV4dHJhKCdib2R5JywgcGxhaW5Cb2R5KTtcblxuICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NyYXNoJykge1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IHJlcG9ydC5ib2R5IDtcbiAgICAgICAgICAgIC8vIEEgZmFuY3kgd2F5IHRvIGNyZWF0ZSBhIG1lc3NhZ2Ugb3V0IG9mIGNyYXNoSWQgT1IgcmVhc29uIE9SIGJvdGggT1IgZmFsbGJhY2tcbiAgICAgICAgICAgIGRldGFpbHMgPSBbYm9keS5jcmFzaElkIHx8ICcnLCBib2R5LnJlYXNvbiB8fCAnJ10uam9pbignICcpLnRyaW0oKSB8fCBkZXRhaWxzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gcmVwb3J0LmJvZHkgO1xuICAgICAgICAgICAgZGV0YWlscyA9IGJvZHkubWVzc2FnZSB8fCBkZXRhaWxzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNhcHR1cmVNZXNzYWdlKGAke2xhYmVsfTogJHtkZXRhaWxzfWApO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBJTlRFR1JBVElPTl9OQU1FLFxuICAgIHNldHVwT25jZSgpIHtcbiAgICAgIGlmICghc3VwcG9ydHNSZXBvcnRpbmdPYnNlcnZlcigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgKFdJTkRPVyApLlJlcG9ydGluZ09ic2VydmVyKFxuICAgICAgICBoYW5kbGVyLFxuICAgICAgICB7XG4gICAgICAgICAgYnVmZmVyZWQ6IHRydWUsXG4gICAgICAgICAgdHlwZXMsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKCk7XG4gICAgfSxcblxuICAgIHNldHVwKGNsaWVudCkge1xuICAgICAgU0VUVVBfQ0xJRU5UUy5zZXQoY2xpZW50LCB0cnVlKTtcbiAgICB9LFxuICB9O1xufSkgO1xuXG4vKipcbiAqIFJlcG9ydGluZyBBUEkgaW50ZWdyYXRpb24gLSBodHRwczovL3czYy5naXRodWIuaW8vcmVwb3J0aW5nL1xuICovXG5jb25zdCByZXBvcnRpbmdPYnNlcnZlckludGVncmF0aW9uID0gZGVmaW5lSW50ZWdyYXRpb24oX3JlcG9ydGluZ09ic2VydmVySW50ZWdyYXRpb24pO1xuXG5leHBvcnQgeyByZXBvcnRpbmdPYnNlcnZlckludGVncmF0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXBvcnRpbmdvYnNlcnZlci5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/reportingobserver.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/spotlight.js":
/*!************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/spotlight.js ***!
  \************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   INTEGRATION_NAME: () => (/* binding */ INTEGRATION_NAME),\n/* harmony export */   isSpotlightInteraction: () => (/* binding */ isSpotlightInteraction),\n/* harmony export */   spotlightBrowserIntegration: () => (/* binding */ spotlightBrowserIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry-internal/browser-utils */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/debug-build.js\");\n\n\n\n\nconst INTEGRATION_NAME = 'SpotlightBrowser';\n\nconst _spotlightIntegration = ((options = {}) => {\n  const sidecarUrl = options.sidecarUrl || 'http://localhost:8969/stream';\n\n  return {\n    name: INTEGRATION_NAME,\n    setup: () => {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_2__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log('Using Sidecar URL', sidecarUrl);\n    },\n    // We don't want to send interaction transactions/root spans created from\n    // clicks within Spotlight to Sentry. Neither do we want them to be sent to\n    // spotlight.\n    processEvent: event => (isSpotlightInteraction(event) ? null : event),\n    afterAllSetup: (client) => {\n      setupSidecarForwarding(client, sidecarUrl);\n    },\n  };\n}) ;\n\nfunction setupSidecarForwarding(client, sidecarUrl) {\n  const makeFetch = (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.getNativeImplementation)('fetch');\n  let failCount = 0;\n\n  client.on('beforeEnvelope', (envelope) => {\n    if (failCount > 3) {\n      _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn('[Spotlight] Disabled Sentry -> Spotlight integration due to too many failed requests:', failCount);\n      return;\n    }\n\n    makeFetch(sidecarUrl, {\n      method: 'POST',\n      body: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.serializeEnvelope)(envelope),\n      headers: {\n        'Content-Type': 'application/x-sentry-envelope',\n      },\n      mode: 'cors',\n    }).then(\n      res => {\n        if (res.status >= 200 && res.status < 400) {\n          // Reset failed requests counter on success\n          failCount = 0;\n        }\n      },\n      err => {\n        failCount++;\n        _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.error(\n          \"Sentry SDK can't connect to Sidecar is it running? See: https://spotlightjs.com/sidecar/npx/\",\n          err,\n        );\n      },\n    );\n  });\n}\n\n/**\n * Use this integration to send errors and transactions to Spotlight.\n *\n * Learn more about spotlight at https://spotlightjs.com\n */\nconst spotlightBrowserIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(_spotlightIntegration);\n\n/**\n * Flags if the event is a transaction created from an interaction with the spotlight UI.\n */\nfunction isSpotlightInteraction(event) {\n  return Boolean(\n    event.type === 'transaction' &&\n      event.spans &&\n      event.contexts?.trace &&\n      event.contexts.trace.op === 'ui.action.click' &&\n      event.spans.some(({ description }) => description?.includes('#sentry-spotlight')),\n  );\n}\n\n\n//# sourceMappingURL=spotlight.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbnRlZ3JhdGlvbnMvc3BvdGxpZ2h0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUEyRTtBQUNGO0FBQ3pCOztBQUVoRDs7QUFFQSw0Q0FBNEM7QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTSx3REFBVyxJQUFJLCtDQUFLO0FBQzFCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVEO0FBQ0Esb0JBQW9CLHVGQUF1QjtBQUMzQzs7QUFFQTtBQUNBO0FBQ0EsTUFBTSwrQ0FBSztBQUNYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVksK0RBQWlCO0FBQzdCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsUUFBUSwrQ0FBSztBQUNiO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLCtEQUFpQjs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLGFBQWE7QUFDdkM7QUFDQTs7QUFFaUY7QUFDakYiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vaW50ZWdyYXRpb25zL3Nwb3RsaWdodC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZpbmVJbnRlZ3JhdGlvbiwgZGVidWcsIHNlcmlhbGl6ZUVudmVsb3BlIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGdldE5hdGl2ZUltcGxlbWVudGF0aW9uIH0gZnJvbSAnQHNlbnRyeS1pbnRlcm5hbC9icm93c2VyLXV0aWxzJztcbmltcG9ydCB7IERFQlVHX0JVSUxEIH0gZnJvbSAnLi4vZGVidWctYnVpbGQuanMnO1xuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ1Nwb3RsaWdodEJyb3dzZXInO1xuXG5jb25zdCBfc3BvdGxpZ2h0SW50ZWdyYXRpb24gPSAoKG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBzaWRlY2FyVXJsID0gb3B0aW9ucy5zaWRlY2FyVXJsIHx8ICdodHRwOi8vbG9jYWxob3N0Ojg5Njkvc3RyZWFtJztcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IElOVEVHUkFUSU9OX05BTUUsXG4gICAgc2V0dXA6ICgpID0+IHtcbiAgICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLmxvZygnVXNpbmcgU2lkZWNhciBVUkwnLCBzaWRlY2FyVXJsKTtcbiAgICB9LFxuICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc2VuZCBpbnRlcmFjdGlvbiB0cmFuc2FjdGlvbnMvcm9vdCBzcGFucyBjcmVhdGVkIGZyb21cbiAgICAvLyBjbGlja3Mgd2l0aGluIFNwb3RsaWdodCB0byBTZW50cnkuIE5laXRoZXIgZG8gd2Ugd2FudCB0aGVtIHRvIGJlIHNlbnQgdG9cbiAgICAvLyBzcG90bGlnaHQuXG4gICAgcHJvY2Vzc0V2ZW50OiBldmVudCA9PiAoaXNTcG90bGlnaHRJbnRlcmFjdGlvbihldmVudCkgPyBudWxsIDogZXZlbnQpLFxuICAgIGFmdGVyQWxsU2V0dXA6IChjbGllbnQpID0+IHtcbiAgICAgIHNldHVwU2lkZWNhckZvcndhcmRpbmcoY2xpZW50LCBzaWRlY2FyVXJsKTtcbiAgICB9LFxuICB9O1xufSkgO1xuXG5mdW5jdGlvbiBzZXR1cFNpZGVjYXJGb3J3YXJkaW5nKGNsaWVudCwgc2lkZWNhclVybCkge1xuICBjb25zdCBtYWtlRmV0Y2ggPSBnZXROYXRpdmVJbXBsZW1lbnRhdGlvbignZmV0Y2gnKTtcbiAgbGV0IGZhaWxDb3VudCA9IDA7XG5cbiAgY2xpZW50Lm9uKCdiZWZvcmVFbnZlbG9wZScsIChlbnZlbG9wZSkgPT4ge1xuICAgIGlmIChmYWlsQ291bnQgPiAzKSB7XG4gICAgICBkZWJ1Zy53YXJuKCdbU3BvdGxpZ2h0XSBEaXNhYmxlZCBTZW50cnkgLT4gU3BvdGxpZ2h0IGludGVncmF0aW9uIGR1ZSB0byB0b28gbWFueSBmYWlsZWQgcmVxdWVzdHM6JywgZmFpbENvdW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtYWtlRmV0Y2goc2lkZWNhclVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBzZXJpYWxpemVFbnZlbG9wZShlbnZlbG9wZSksXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC1zZW50cnktZW52ZWxvcGUnLFxuICAgICAgfSxcbiAgICAgIG1vZGU6ICdjb3JzJyxcbiAgICB9KS50aGVuKFxuICAgICAgcmVzID0+IHtcbiAgICAgICAgaWYgKHJlcy5zdGF0dXMgPj0gMjAwICYmIHJlcy5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgICAvLyBSZXNldCBmYWlsZWQgcmVxdWVzdHMgY291bnRlciBvbiBzdWNjZXNzXG4gICAgICAgICAgZmFpbENvdW50ID0gMDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIGZhaWxDb3VudCsrO1xuICAgICAgICBkZWJ1Zy5lcnJvcihcbiAgICAgICAgICBcIlNlbnRyeSBTREsgY2FuJ3QgY29ubmVjdCB0byBTaWRlY2FyIGlzIGl0IHJ1bm5pbmc/IFNlZTogaHR0cHM6Ly9zcG90bGlnaHRqcy5jb20vc2lkZWNhci9ucHgvXCIsXG4gICAgICAgICAgZXJyLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICApO1xuICB9KTtcbn1cblxuLyoqXG4gKiBVc2UgdGhpcyBpbnRlZ3JhdGlvbiB0byBzZW5kIGVycm9ycyBhbmQgdHJhbnNhY3Rpb25zIHRvIFNwb3RsaWdodC5cbiAqXG4gKiBMZWFybiBtb3JlIGFib3V0IHNwb3RsaWdodCBhdCBodHRwczovL3Nwb3RsaWdodGpzLmNvbVxuICovXG5jb25zdCBzcG90bGlnaHRCcm93c2VySW50ZWdyYXRpb24gPSBkZWZpbmVJbnRlZ3JhdGlvbihfc3BvdGxpZ2h0SW50ZWdyYXRpb24pO1xuXG4vKipcbiAqIEZsYWdzIGlmIHRoZSBldmVudCBpcyBhIHRyYW5zYWN0aW9uIGNyZWF0ZWQgZnJvbSBhbiBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzcG90bGlnaHQgVUkuXG4gKi9cbmZ1bmN0aW9uIGlzU3BvdGxpZ2h0SW50ZXJhY3Rpb24oZXZlbnQpIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgZXZlbnQudHlwZSA9PT0gJ3RyYW5zYWN0aW9uJyAmJlxuICAgICAgZXZlbnQuc3BhbnMgJiZcbiAgICAgIGV2ZW50LmNvbnRleHRzPy50cmFjZSAmJlxuICAgICAgZXZlbnQuY29udGV4dHMudHJhY2Uub3AgPT09ICd1aS5hY3Rpb24uY2xpY2snICYmXG4gICAgICBldmVudC5zcGFucy5zb21lKCh7IGRlc2NyaXB0aW9uIH0pID0+IGRlc2NyaXB0aW9uPy5pbmNsdWRlcygnI3NlbnRyeS1zcG90bGlnaHQnKSksXG4gICk7XG59XG5cbmV4cG9ydCB7IElOVEVHUkFUSU9OX05BTUUsIGlzU3BvdGxpZ2h0SW50ZXJhY3Rpb24sIHNwb3RsaWdodEJyb3dzZXJJbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3BvdGxpZ2h0LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/spotlight.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/webWorker.js":
/*!************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/webWorker.js ***!
  \************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   INTEGRATION_NAME: () => (/* binding */ INTEGRATION_NAME),\n/* harmony export */   registerWebWorker: () => (/* binding */ registerWebWorker),\n/* harmony export */   webWorkerIntegration: () => (/* binding */ webWorkerIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/debug-build.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../helpers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\");\n\n\n\n\nconst INTEGRATION_NAME = 'WebWorker';\n\n/**\n * Use this integration to set up Sentry with web workers.\n *\n * IMPORTANT: This integration must be added **before** you start listening to\n * any messages from the worker. Otherwise, your message handlers will receive\n * messages from the Sentry SDK which you need to ignore.\n *\n * This integration only has an effect, if you call `Sentry.registerWorker(self)`\n * from within the worker(s) you're adding to the integration.\n *\n * Given that you want to initialize the SDK as early as possible, you most likely\n * want to add this integration **after** initializing the SDK:\n *\n * @example:\n * ```ts filename={main.js}\n * import * as Sentry from '@sentry/<your-sdk>';\n *\n * // some time earlier:\n * Sentry.init(...)\n *\n * // 1. Initialize the worker\n * const worker = new Worker(new URL('./worker.ts', import.meta.url));\n *\n * // 2. Add the integration\n * const webWorkerIntegration = Sentry.webWorkerIntegration({ worker });\n * Sentry.addIntegration(webWorkerIntegration);\n *\n * // 3. Register message listeners on the worker\n * worker.addEventListener('message', event => {\n *  // ...\n * });\n * ```\n *\n * If you initialize multiple workers at the same time, you can also pass an array of workers\n * to the integration:\n *\n * ```ts filename={main.js}\n * const webWorkerIntegration = Sentry.webWorkerIntegration({ worker: [worker1, worker2] });\n * Sentry.addIntegration(webWorkerIntegration);\n * ```\n *\n * If you have any additional workers that you initialize at a later point,\n * you can add them to the integration as follows:\n *\n * ```ts filename={main.js}\n * const webWorkerIntegration = Sentry.webWorkerIntegration({ worker: worker1 });\n * Sentry.addIntegration(webWorkerIntegration);\n *\n * // sometime later:\n * webWorkerIntegration.addWorker(worker2);\n * ```\n *\n * Of course, you can also directly add the integration in Sentry.init:\n * ```ts filename={main.js}\n * import * as Sentry from '@sentry/<your-sdk>';\n *\n * // 1. Initialize the worker\n * const worker = new Worker(new URL('./worker.ts', import.meta.url));\n *\n * // 2. Initialize the SDK\n * Sentry.init({\n *  integrations: [Sentry.webWorkerIntegration({ worker })]\n * });\n *\n * // 3. Register message listeners on the worker\n * worker.addEventListener('message', event => {\n *  // ...\n * });\n * ```\n *\n * @param options {WebWorkerIntegrationOptions} Integration options:\n *   - `worker`: The worker instance.\n */\nconst webWorkerIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(({ worker }) => ({\n  name: INTEGRATION_NAME,\n  setupOnce: () => {\n    (Array.isArray(worker) ? worker : [worker]).forEach(w => listenForSentryDebugIdMessages(w));\n  },\n  addWorker: (worker) => listenForSentryDebugIdMessages(worker),\n})) ;\n\nfunction listenForSentryDebugIdMessages(worker) {\n  worker.addEventListener('message', event => {\n    if (isSentryDebugIdMessage(event.data)) {\n      event.stopImmediatePropagation(); // other listeners should not receive this message\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log('Sentry debugId web worker message received', event.data);\n      _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW._sentryDebugIds = {\n        ...event.data._sentryDebugIds,\n        // debugIds of the main thread have precedence over the worker's in case of a collision.\n        ..._helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW._sentryDebugIds,\n      };\n    }\n  });\n}\n\n/**\n * Use this function to register the worker with the Sentry SDK.\n *\n * @example\n * ```ts filename={worker.js}\n * import * as Sentry from '@sentry/<your-sdk>';\n *\n * // Do this as early as possible in your worker.\n * Sentry.registerWorker({ self });\n *\n * // continue setting up your worker\n * self.postMessage(...)\n * ```\n * @param options {RegisterWebWorkerOptions} Integration options:\n *   - `self`: The worker instance you're calling this function from (self).\n */\nfunction registerWebWorker({ self }) {\n  self.postMessage({\n    _sentryMessage: true,\n    _sentryDebugIds: self._sentryDebugIds ?? undefined,\n  });\n}\n\nfunction isSentryDebugIdMessage(eventData) {\n  return (\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isPlainObject)(eventData) &&\n    eventData._sentryMessage === true &&\n    '_sentryDebugIds' in eventData &&\n    ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isPlainObject)(eventData._sentryDebugIds) || eventData._sentryDebugIds === undefined)\n  );\n}\n\n\n//# sourceMappingURL=webWorker.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9pbnRlZ3JhdGlvbnMvd2ViV29ya2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUF1RTtBQUN2QjtBQUNUOztBQUV2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RCxRQUFRO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQiw4REFBOEQsNEJBQTRCO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQiw4REFBOEQsaUJBQWlCO0FBQy9FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELFFBQVE7QUFDekQsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxtQkFBbUIsNkJBQTZCO0FBQ2hEO0FBQ0E7QUFDQSw2QkFBNkIsK0RBQWlCLElBQUksUUFBUTtBQUMxRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QyxNQUFNLHdEQUFXLElBQUksK0NBQUs7QUFDMUIsTUFBTSwrQ0FBTTtBQUNaO0FBQ0E7QUFDQSxXQUFXLCtDQUFNO0FBQ2pCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLE1BQU07QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsMEJBQTBCO0FBQzdDO0FBQ0E7QUFDQSw2QkFBNkIsTUFBTTtBQUNuQztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBLElBQUksMkRBQWE7QUFDakI7QUFDQTtBQUNBLEtBQUssMkRBQWE7QUFDbEI7QUFDQTs7QUFFcUU7QUFDckUiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vaW50ZWdyYXRpb25zL3dlYldvcmtlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZpbmVJbnRlZ3JhdGlvbiwgZGVidWcsIGlzUGxhaW5PYmplY3QgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBXSU5ET1cgfSBmcm9tICcuLi9oZWxwZXJzLmpzJztcblxuY29uc3QgSU5URUdSQVRJT05fTkFNRSA9ICdXZWJXb3JrZXInO1xuXG4vKipcbiAqIFVzZSB0aGlzIGludGVncmF0aW9uIHRvIHNldCB1cCBTZW50cnkgd2l0aCB3ZWIgd29ya2Vycy5cbiAqXG4gKiBJTVBPUlRBTlQ6IFRoaXMgaW50ZWdyYXRpb24gbXVzdCBiZSBhZGRlZCAqKmJlZm9yZSoqIHlvdSBzdGFydCBsaXN0ZW5pbmcgdG9cbiAqIGFueSBtZXNzYWdlcyBmcm9tIHRoZSB3b3JrZXIuIE90aGVyd2lzZSwgeW91ciBtZXNzYWdlIGhhbmRsZXJzIHdpbGwgcmVjZWl2ZVxuICogbWVzc2FnZXMgZnJvbSB0aGUgU2VudHJ5IFNESyB3aGljaCB5b3UgbmVlZCB0byBpZ25vcmUuXG4gKlxuICogVGhpcyBpbnRlZ3JhdGlvbiBvbmx5IGhhcyBhbiBlZmZlY3QsIGlmIHlvdSBjYWxsIGBTZW50cnkucmVnaXN0ZXJXb3JrZXIoc2VsZilgXG4gKiBmcm9tIHdpdGhpbiB0aGUgd29ya2VyKHMpIHlvdSdyZSBhZGRpbmcgdG8gdGhlIGludGVncmF0aW9uLlxuICpcbiAqIEdpdmVuIHRoYXQgeW91IHdhbnQgdG8gaW5pdGlhbGl6ZSB0aGUgU0RLIGFzIGVhcmx5IGFzIHBvc3NpYmxlLCB5b3UgbW9zdCBsaWtlbHlcbiAqIHdhbnQgdG8gYWRkIHRoaXMgaW50ZWdyYXRpb24gKiphZnRlcioqIGluaXRpYWxpemluZyB0aGUgU0RLOlxuICpcbiAqIEBleGFtcGxlOlxuICogYGBgdHMgZmlsZW5hbWU9e21haW4uanN9XG4gKiBpbXBvcnQgKiBhcyBTZW50cnkgZnJvbSAnQHNlbnRyeS88eW91ci1zZGs+JztcbiAqXG4gKiAvLyBzb21lIHRpbWUgZWFybGllcjpcbiAqIFNlbnRyeS5pbml0KC4uLilcbiAqXG4gKiAvLyAxLiBJbml0aWFsaXplIHRoZSB3b3JrZXJcbiAqIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi93b3JrZXIudHMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAqXG4gKiAvLyAyLiBBZGQgdGhlIGludGVncmF0aW9uXG4gKiBjb25zdCB3ZWJXb3JrZXJJbnRlZ3JhdGlvbiA9IFNlbnRyeS53ZWJXb3JrZXJJbnRlZ3JhdGlvbih7IHdvcmtlciB9KTtcbiAqIFNlbnRyeS5hZGRJbnRlZ3JhdGlvbih3ZWJXb3JrZXJJbnRlZ3JhdGlvbik7XG4gKlxuICogLy8gMy4gUmVnaXN0ZXIgbWVzc2FnZSBsaXN0ZW5lcnMgb24gdGhlIHdvcmtlclxuICogd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBldmVudCA9PiB7XG4gKiAgLy8gLi4uXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIElmIHlvdSBpbml0aWFsaXplIG11bHRpcGxlIHdvcmtlcnMgYXQgdGhlIHNhbWUgdGltZSwgeW91IGNhbiBhbHNvIHBhc3MgYW4gYXJyYXkgb2Ygd29ya2Vyc1xuICogdG8gdGhlIGludGVncmF0aW9uOlxuICpcbiAqIGBgYHRzIGZpbGVuYW1lPXttYWluLmpzfVxuICogY29uc3Qgd2ViV29ya2VySW50ZWdyYXRpb24gPSBTZW50cnkud2ViV29ya2VySW50ZWdyYXRpb24oeyB3b3JrZXI6IFt3b3JrZXIxLCB3b3JrZXIyXSB9KTtcbiAqIFNlbnRyeS5hZGRJbnRlZ3JhdGlvbih3ZWJXb3JrZXJJbnRlZ3JhdGlvbik7XG4gKiBgYGBcbiAqXG4gKiBJZiB5b3UgaGF2ZSBhbnkgYWRkaXRpb25hbCB3b3JrZXJzIHRoYXQgeW91IGluaXRpYWxpemUgYXQgYSBsYXRlciBwb2ludCxcbiAqIHlvdSBjYW4gYWRkIHRoZW0gdG8gdGhlIGludGVncmF0aW9uIGFzIGZvbGxvd3M6XG4gKlxuICogYGBgdHMgZmlsZW5hbWU9e21haW4uanN9XG4gKiBjb25zdCB3ZWJXb3JrZXJJbnRlZ3JhdGlvbiA9IFNlbnRyeS53ZWJXb3JrZXJJbnRlZ3JhdGlvbih7IHdvcmtlcjogd29ya2VyMSB9KTtcbiAqIFNlbnRyeS5hZGRJbnRlZ3JhdGlvbih3ZWJXb3JrZXJJbnRlZ3JhdGlvbik7XG4gKlxuICogLy8gc29tZXRpbWUgbGF0ZXI6XG4gKiB3ZWJXb3JrZXJJbnRlZ3JhdGlvbi5hZGRXb3JrZXIod29ya2VyMik7XG4gKiBgYGBcbiAqXG4gKiBPZiBjb3Vyc2UsIHlvdSBjYW4gYWxzbyBkaXJlY3RseSBhZGQgdGhlIGludGVncmF0aW9uIGluIFNlbnRyeS5pbml0OlxuICogYGBgdHMgZmlsZW5hbWU9e21haW4uanN9XG4gKiBpbXBvcnQgKiBhcyBTZW50cnkgZnJvbSAnQHNlbnRyeS88eW91ci1zZGs+JztcbiAqXG4gKiAvLyAxLiBJbml0aWFsaXplIHRoZSB3b3JrZXJcbiAqIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi93b3JrZXIudHMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAqXG4gKiAvLyAyLiBJbml0aWFsaXplIHRoZSBTREtcbiAqIFNlbnRyeS5pbml0KHtcbiAqICBpbnRlZ3JhdGlvbnM6IFtTZW50cnkud2ViV29ya2VySW50ZWdyYXRpb24oeyB3b3JrZXIgfSldXG4gKiB9KTtcbiAqXG4gKiAvLyAzLiBSZWdpc3RlciBtZXNzYWdlIGxpc3RlbmVycyBvbiB0aGUgd29ya2VyXG4gKiB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGV2ZW50ID0+IHtcbiAqICAvLyAuLi5cbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIG9wdGlvbnMge1dlYldvcmtlckludGVncmF0aW9uT3B0aW9uc30gSW50ZWdyYXRpb24gb3B0aW9uczpcbiAqICAgLSBgd29ya2VyYDogVGhlIHdvcmtlciBpbnN0YW5jZS5cbiAqL1xuY29uc3Qgd2ViV29ya2VySW50ZWdyYXRpb24gPSBkZWZpbmVJbnRlZ3JhdGlvbigoeyB3b3JrZXIgfSkgPT4gKHtcbiAgbmFtZTogSU5URUdSQVRJT05fTkFNRSxcbiAgc2V0dXBPbmNlOiAoKSA9PiB7XG4gICAgKEFycmF5LmlzQXJyYXkod29ya2VyKSA/IHdvcmtlciA6IFt3b3JrZXJdKS5mb3JFYWNoKHcgPT4gbGlzdGVuRm9yU2VudHJ5RGVidWdJZE1lc3NhZ2VzKHcpKTtcbiAgfSxcbiAgYWRkV29ya2VyOiAod29ya2VyKSA9PiBsaXN0ZW5Gb3JTZW50cnlEZWJ1Z0lkTWVzc2FnZXMod29ya2VyKSxcbn0pKSA7XG5cbmZ1bmN0aW9uIGxpc3RlbkZvclNlbnRyeURlYnVnSWRNZXNzYWdlcyh3b3JrZXIpIHtcbiAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBldmVudCA9PiB7XG4gICAgaWYgKGlzU2VudHJ5RGVidWdJZE1lc3NhZ2UoZXZlbnQuZGF0YSkpIHtcbiAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOyAvLyBvdGhlciBsaXN0ZW5lcnMgc2hvdWxkIG5vdCByZWNlaXZlIHRoaXMgbWVzc2FnZVxuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKCdTZW50cnkgZGVidWdJZCB3ZWIgd29ya2VyIG1lc3NhZ2UgcmVjZWl2ZWQnLCBldmVudC5kYXRhKTtcbiAgICAgIFdJTkRPVy5fc2VudHJ5RGVidWdJZHMgPSB7XG4gICAgICAgIC4uLmV2ZW50LmRhdGEuX3NlbnRyeURlYnVnSWRzLFxuICAgICAgICAvLyBkZWJ1Z0lkcyBvZiB0aGUgbWFpbiB0aHJlYWQgaGF2ZSBwcmVjZWRlbmNlIG92ZXIgdGhlIHdvcmtlcidzIGluIGNhc2Ugb2YgYSBjb2xsaXNpb24uXG4gICAgICAgIC4uLldJTkRPVy5fc2VudHJ5RGVidWdJZHMsXG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgdGhlIHdvcmtlciB3aXRoIHRoZSBTZW50cnkgU0RLLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cyBmaWxlbmFtZT17d29ya2VyLmpzfVxuICogaW1wb3J0ICogYXMgU2VudHJ5IGZyb20gJ0BzZW50cnkvPHlvdXItc2RrPic7XG4gKlxuICogLy8gRG8gdGhpcyBhcyBlYXJseSBhcyBwb3NzaWJsZSBpbiB5b3VyIHdvcmtlci5cbiAqIFNlbnRyeS5yZWdpc3Rlcldvcmtlcih7IHNlbGYgfSk7XG4gKlxuICogLy8gY29udGludWUgc2V0dGluZyB1cCB5b3VyIHdvcmtlclxuICogc2VsZi5wb3N0TWVzc2FnZSguLi4pXG4gKiBgYGBcbiAqIEBwYXJhbSBvcHRpb25zIHtSZWdpc3RlcldlYldvcmtlck9wdGlvbnN9IEludGVncmF0aW9uIG9wdGlvbnM6XG4gKiAgIC0gYHNlbGZgOiBUaGUgd29ya2VyIGluc3RhbmNlIHlvdSdyZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gZnJvbSAoc2VsZikuXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyV2ViV29ya2VyKHsgc2VsZiB9KSB7XG4gIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgIF9zZW50cnlNZXNzYWdlOiB0cnVlLFxuICAgIF9zZW50cnlEZWJ1Z0lkczogc2VsZi5fc2VudHJ5RGVidWdJZHMgPz8gdW5kZWZpbmVkLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNTZW50cnlEZWJ1Z0lkTWVzc2FnZShldmVudERhdGEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1BsYWluT2JqZWN0KGV2ZW50RGF0YSkgJiZcbiAgICBldmVudERhdGEuX3NlbnRyeU1lc3NhZ2UgPT09IHRydWUgJiZcbiAgICAnX3NlbnRyeURlYnVnSWRzJyBpbiBldmVudERhdGEgJiZcbiAgICAoaXNQbGFpbk9iamVjdChldmVudERhdGEuX3NlbnRyeURlYnVnSWRzKSB8fCBldmVudERhdGEuX3NlbnRyeURlYnVnSWRzID09PSB1bmRlZmluZWQpXG4gICk7XG59XG5cbmV4cG9ydCB7IElOVEVHUkFUSU9OX05BTUUsIHJlZ2lzdGVyV2ViV29ya2VyLCB3ZWJXb3JrZXJJbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2ViV29ya2VyLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/webWorker.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/log.js":
/*!*****************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/log.js ***!
  \*****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   debug: () => (/* binding */ debug),\n/* harmony export */   error: () => (/* binding */ error),\n/* harmony export */   fatal: () => (/* binding */ fatal),\n/* harmony export */   fmt: () => (/* reexport safe */ _sentry_core__WEBPACK_IMPORTED_MODULE_0__.fmt),\n/* harmony export */   info: () => (/* binding */ info),\n/* harmony export */   trace: () => (/* binding */ trace),\n/* harmony export */   warn: () => (/* binding */ warn)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\n\n/**\n * Capture a log with the given level.\n *\n * @param level - The level of the log.\n * @param message - The message to log.\n * @param attributes - Arbitrary structured data that stores information about the log - e.g., userId: 100.\n * @param severityNumber - The severity number of the log.\n */\nfunction captureLog(\n  level,\n  message,\n  attributes,\n  severityNumber,\n) {\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__._INTERNAL_captureLog)({ level, message, attributes, severityNumber });\n}\n\n/**\n * @summary Capture a log with the `trace` level. Requires the `enableLogs` option to be enabled.\n *\n * @param message - The message to log.\n * @param attributes - Arbitrary structured data that stores information about the log - e.g., { userId: 100, route: '/dashboard' }.\n *\n * @example\n *\n * ```\n * Sentry.logger.trace('User clicked submit button', {\n *   buttonId: 'submit-form',\n *   formId: 'user-profile',\n *   timestamp: Date.now()\n * });\n * ```\n *\n * @example With template strings\n *\n * ```\n * Sentry.logger.trace(Sentry.logger.fmt`User ${user} navigated to ${page}`, {\n *   userId: '123',\n *   sessionId: 'abc-xyz'\n * });\n * ```\n */\nfunction trace(message, attributes) {\n  captureLog('trace', message, attributes);\n}\n\n/**\n * @summary Capture a log with the `debug` level. Requires the `enableLogs` option to be enabled.\n *\n * @param message - The message to log.\n * @param attributes - Arbitrary structured data that stores information about the log - e.g., { component: 'Header', state: 'loading' }.\n *\n * @example\n *\n * ```\n * Sentry.logger.debug('Component mounted', {\n *   component: 'UserProfile',\n *   props: { userId: 123 },\n *   renderTime: 150\n * });\n * ```\n *\n * @example With template strings\n *\n * ```\n * Sentry.logger.debug(Sentry.logger.fmt`API request to ${endpoint} failed`, {\n *   statusCode: 404,\n *   requestId: 'req-123',\n *   duration: 250\n * });\n * ```\n */\nfunction debug(message, attributes) {\n  captureLog('debug', message, attributes);\n}\n\n/**\n * @summary Capture a log with the `info` level. Requires the `enableLogs` option to be enabled.\n *\n * @param message - The message to log.\n * @param attributes - Arbitrary structured data that stores information about the log - e.g., { feature: 'checkout', status: 'completed' }.\n *\n * @example\n *\n * ```\n * Sentry.logger.info('User completed checkout', {\n *   orderId: 'order-123',\n *   amount: 99.99,\n *   paymentMethod: 'credit_card'\n * });\n * ```\n *\n * @example With template strings\n *\n * ```\n * Sentry.logger.info(Sentry.logger.fmt`User ${user} updated profile picture`, {\n *   userId: 'user-123',\n *   imageSize: '2.5MB',\n *   timestamp: Date.now()\n * });\n * ```\n */\nfunction info(message, attributes) {\n  captureLog('info', message, attributes);\n}\n\n/**\n * @summary Capture a log with the `warn` level. Requires the `enableLogs` option to be enabled.\n *\n * @param message - The message to log.\n * @param attributes - Arbitrary structured data that stores information about the log - e.g., { browser: 'Chrome', version: '91.0' }.\n *\n * @example\n *\n * ```\n * Sentry.logger.warn('Browser compatibility issue detected', {\n *   browser: 'Safari',\n *   version: '14.0',\n *   feature: 'WebRTC',\n *   fallback: 'enabled'\n * });\n * ```\n *\n * @example With template strings\n *\n * ```\n * Sentry.logger.warn(Sentry.logger.fmt`API endpoint ${endpoint} is deprecated`, {\n *   recommendedEndpoint: '/api/v2/users',\n *   sunsetDate: '2024-12-31',\n *   clientVersion: '1.2.3'\n * });\n * ```\n */\nfunction warn(message, attributes) {\n  captureLog('warn', message, attributes);\n}\n\n/**\n * @summary Capture a log with the `error` level. Requires the `enableLogs` option to be enabled.\n *\n * @param message - The message to log.\n * @param attributes - Arbitrary structured data that stores information about the log - e.g., { error: 'NetworkError', url: '/api/data' }.\n *\n * @example\n *\n * ```\n * Sentry.logger.error('Failed to load user data', {\n *   error: 'NetworkError',\n *   url: '/api/users/123',\n *   statusCode: 500,\n *   retryCount: 3\n * });\n * ```\n *\n * @example With template strings\n *\n * ```\n * Sentry.logger.error(Sentry.logger.fmt`Payment processing failed for order ${orderId}`, {\n *   error: 'InsufficientFunds',\n *   amount: 100.00,\n *   currency: 'USD',\n *   userId: 'user-456'\n * });\n * ```\n */\nfunction error(message, attributes) {\n  captureLog('error', message, attributes);\n}\n\n/**\n * @summary Capture a log with the `fatal` level. Requires the `enableLogs` option to be enabled.\n *\n * @param message - The message to log.\n * @param attributes - Arbitrary structured data that stores information about the log - e.g., { appState: 'corrupted', sessionId: 'abc-123' }.\n *\n * @example\n *\n * ```\n * Sentry.logger.fatal('Application state corrupted', {\n *   lastKnownState: 'authenticated',\n *   sessionId: 'session-123',\n *   timestamp: Date.now(),\n *   recoveryAttempted: true\n * });\n * ```\n *\n * @example With template strings\n *\n * ```\n * Sentry.logger.fatal(Sentry.logger.fmt`Critical system failure in ${service}`, {\n *   service: 'payment-processor',\n *   errorCode: 'CRITICAL_FAILURE',\n *   affectedUsers: 150,\n *   timestamp: Date.now()\n * });\n * ```\n */\nfunction fatal(message, attributes) {\n  captureLog('fatal', message, attributes);\n}\n\n\n//# sourceMappingURL=log.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9sb2cuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBb0Q7QUFDakI7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLGtFQUFvQixHQUFHLDRDQUE0QztBQUNyRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlHQUFpRyxrQ0FBa0M7QUFDbkk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELE1BQU0sZUFBZSxLQUFLO0FBQzFFO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlHQUFpRyx1Q0FBdUM7QUFDeEk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxhQUFhO0FBQzNCO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsVUFBVTtBQUNwRTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlHQUFpRywwQ0FBMEM7QUFDM0k7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLE1BQU07QUFDckQ7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpR0FBaUcsb0NBQW9DO0FBQ3JJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELFVBQVU7QUFDakU7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpR0FBaUcseUNBQXlDO0FBQzFJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFLFFBQVE7QUFDdkY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlHQUFpRyw2Q0FBNkM7QUFDOUk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRUFBc0UsUUFBUTtBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVrRDtBQUNsRCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9sb2cuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX0lOVEVSTkFMX2NhcHR1cmVMb2cgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuZXhwb3J0IHsgZm10IH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcblxuLyoqXG4gKiBDYXB0dXJlIGEgbG9nIHdpdGggdGhlIGdpdmVuIGxldmVsLlxuICpcbiAqIEBwYXJhbSBsZXZlbCAtIFRoZSBsZXZlbCBvZiB0aGUgbG9nLlxuICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBsb2cuXG4gKiBAcGFyYW0gYXR0cmlidXRlcyAtIEFyYml0cmFyeSBzdHJ1Y3R1cmVkIGRhdGEgdGhhdCBzdG9yZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvZyAtIGUuZy4sIHVzZXJJZDogMTAwLlxuICogQHBhcmFtIHNldmVyaXR5TnVtYmVyIC0gVGhlIHNldmVyaXR5IG51bWJlciBvZiB0aGUgbG9nLlxuICovXG5mdW5jdGlvbiBjYXB0dXJlTG9nKFxuICBsZXZlbCxcbiAgbWVzc2FnZSxcbiAgYXR0cmlidXRlcyxcbiAgc2V2ZXJpdHlOdW1iZXIsXG4pIHtcbiAgX0lOVEVSTkFMX2NhcHR1cmVMb2coeyBsZXZlbCwgbWVzc2FnZSwgYXR0cmlidXRlcywgc2V2ZXJpdHlOdW1iZXIgfSk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgQ2FwdHVyZSBhIGxvZyB3aXRoIHRoZSBgdHJhY2VgIGxldmVsLiBSZXF1aXJlcyB0aGUgYGVuYWJsZUxvZ3NgIG9wdGlvbiB0byBiZSBlbmFibGVkLlxuICpcbiAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gbG9nLlxuICogQHBhcmFtIGF0dHJpYnV0ZXMgLSBBcmJpdHJhcnkgc3RydWN0dXJlZCBkYXRhIHRoYXQgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2cgLSBlLmcuLCB7IHVzZXJJZDogMTAwLCByb3V0ZTogJy9kYXNoYm9hcmQnIH0uXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBcbiAqIFNlbnRyeS5sb2dnZXIudHJhY2UoJ1VzZXIgY2xpY2tlZCBzdWJtaXQgYnV0dG9uJywge1xuICogICBidXR0b25JZDogJ3N1Ym1pdC1mb3JtJyxcbiAqICAgZm9ybUlkOiAndXNlci1wcm9maWxlJyxcbiAqICAgdGltZXN0YW1wOiBEYXRlLm5vdygpXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFdpdGggdGVtcGxhdGUgc3RyaW5nc1xuICpcbiAqIGBgYFxuICogU2VudHJ5LmxvZ2dlci50cmFjZShTZW50cnkubG9nZ2VyLmZtdGBVc2VyICR7dXNlcn0gbmF2aWdhdGVkIHRvICR7cGFnZX1gLCB7XG4gKiAgIHVzZXJJZDogJzEyMycsXG4gKiAgIHNlc3Npb25JZDogJ2FiYy14eXonXG4gKiB9KTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiB0cmFjZShtZXNzYWdlLCBhdHRyaWJ1dGVzKSB7XG4gIGNhcHR1cmVMb2coJ3RyYWNlJywgbWVzc2FnZSwgYXR0cmlidXRlcyk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgQ2FwdHVyZSBhIGxvZyB3aXRoIHRoZSBgZGVidWdgIGxldmVsLiBSZXF1aXJlcyB0aGUgYGVuYWJsZUxvZ3NgIG9wdGlvbiB0byBiZSBlbmFibGVkLlxuICpcbiAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gbG9nLlxuICogQHBhcmFtIGF0dHJpYnV0ZXMgLSBBcmJpdHJhcnkgc3RydWN0dXJlZCBkYXRhIHRoYXQgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2cgLSBlLmcuLCB7IGNvbXBvbmVudDogJ0hlYWRlcicsIHN0YXRlOiAnbG9hZGluZycgfS5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYFxuICogU2VudHJ5LmxvZ2dlci5kZWJ1ZygnQ29tcG9uZW50IG1vdW50ZWQnLCB7XG4gKiAgIGNvbXBvbmVudDogJ1VzZXJQcm9maWxlJyxcbiAqICAgcHJvcHM6IHsgdXNlcklkOiAxMjMgfSxcbiAqICAgcmVuZGVyVGltZTogMTUwXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFdpdGggdGVtcGxhdGUgc3RyaW5nc1xuICpcbiAqIGBgYFxuICogU2VudHJ5LmxvZ2dlci5kZWJ1ZyhTZW50cnkubG9nZ2VyLmZtdGBBUEkgcmVxdWVzdCB0byAke2VuZHBvaW50fSBmYWlsZWRgLCB7XG4gKiAgIHN0YXR1c0NvZGU6IDQwNCxcbiAqICAgcmVxdWVzdElkOiAncmVxLTEyMycsXG4gKiAgIGR1cmF0aW9uOiAyNTBcbiAqIH0pO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGRlYnVnKG1lc3NhZ2UsIGF0dHJpYnV0ZXMpIHtcbiAgY2FwdHVyZUxvZygnZGVidWcnLCBtZXNzYWdlLCBhdHRyaWJ1dGVzKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBDYXB0dXJlIGEgbG9nIHdpdGggdGhlIGBpbmZvYCBsZXZlbC4gUmVxdWlyZXMgdGhlIGBlbmFibGVMb2dzYCBvcHRpb24gdG8gYmUgZW5hYmxlZC5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGxvZy5cbiAqIEBwYXJhbSBhdHRyaWJ1dGVzIC0gQXJiaXRyYXJ5IHN0cnVjdHVyZWQgZGF0YSB0aGF0IHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbG9nIC0gZS5nLiwgeyBmZWF0dXJlOiAnY2hlY2tvdXQnLCBzdGF0dXM6ICdjb21wbGV0ZWQnIH0uXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBcbiAqIFNlbnRyeS5sb2dnZXIuaW5mbygnVXNlciBjb21wbGV0ZWQgY2hlY2tvdXQnLCB7XG4gKiAgIG9yZGVySWQ6ICdvcmRlci0xMjMnLFxuICogICBhbW91bnQ6IDk5Ljk5LFxuICogICBwYXltZW50TWV0aG9kOiAnY3JlZGl0X2NhcmQnXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFdpdGggdGVtcGxhdGUgc3RyaW5nc1xuICpcbiAqIGBgYFxuICogU2VudHJ5LmxvZ2dlci5pbmZvKFNlbnRyeS5sb2dnZXIuZm10YFVzZXIgJHt1c2VyfSB1cGRhdGVkIHByb2ZpbGUgcGljdHVyZWAsIHtcbiAqICAgdXNlcklkOiAndXNlci0xMjMnLFxuICogICBpbWFnZVNpemU6ICcyLjVNQicsXG4gKiAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gaW5mbyhtZXNzYWdlLCBhdHRyaWJ1dGVzKSB7XG4gIGNhcHR1cmVMb2coJ2luZm8nLCBtZXNzYWdlLCBhdHRyaWJ1dGVzKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBDYXB0dXJlIGEgbG9nIHdpdGggdGhlIGB3YXJuYCBsZXZlbC4gUmVxdWlyZXMgdGhlIGBlbmFibGVMb2dzYCBvcHRpb24gdG8gYmUgZW5hYmxlZC5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGxvZy5cbiAqIEBwYXJhbSBhdHRyaWJ1dGVzIC0gQXJiaXRyYXJ5IHN0cnVjdHVyZWQgZGF0YSB0aGF0IHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbG9nIC0gZS5nLiwgeyBicm93c2VyOiAnQ2hyb21lJywgdmVyc2lvbjogJzkxLjAnIH0uXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBcbiAqIFNlbnRyeS5sb2dnZXIud2FybignQnJvd3NlciBjb21wYXRpYmlsaXR5IGlzc3VlIGRldGVjdGVkJywge1xuICogICBicm93c2VyOiAnU2FmYXJpJyxcbiAqICAgdmVyc2lvbjogJzE0LjAnLFxuICogICBmZWF0dXJlOiAnV2ViUlRDJyxcbiAqICAgZmFsbGJhY2s6ICdlbmFibGVkJ1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBXaXRoIHRlbXBsYXRlIHN0cmluZ3NcbiAqXG4gKiBgYGBcbiAqIFNlbnRyeS5sb2dnZXIud2FybihTZW50cnkubG9nZ2VyLmZtdGBBUEkgZW5kcG9pbnQgJHtlbmRwb2ludH0gaXMgZGVwcmVjYXRlZGAsIHtcbiAqICAgcmVjb21tZW5kZWRFbmRwb2ludDogJy9hcGkvdjIvdXNlcnMnLFxuICogICBzdW5zZXREYXRlOiAnMjAyNC0xMi0zMScsXG4gKiAgIGNsaWVudFZlcnNpb246ICcxLjIuMydcbiAqIH0pO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHdhcm4obWVzc2FnZSwgYXR0cmlidXRlcykge1xuICBjYXB0dXJlTG9nKCd3YXJuJywgbWVzc2FnZSwgYXR0cmlidXRlcyk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgQ2FwdHVyZSBhIGxvZyB3aXRoIHRoZSBgZXJyb3JgIGxldmVsLiBSZXF1aXJlcyB0aGUgYGVuYWJsZUxvZ3NgIG9wdGlvbiB0byBiZSBlbmFibGVkLlxuICpcbiAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gbG9nLlxuICogQHBhcmFtIGF0dHJpYnV0ZXMgLSBBcmJpdHJhcnkgc3RydWN0dXJlZCBkYXRhIHRoYXQgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2cgLSBlLmcuLCB7IGVycm9yOiAnTmV0d29ya0Vycm9yJywgdXJsOiAnL2FwaS9kYXRhJyB9LlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgXG4gKiBTZW50cnkubG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gbG9hZCB1c2VyIGRhdGEnLCB7XG4gKiAgIGVycm9yOiAnTmV0d29ya0Vycm9yJyxcbiAqICAgdXJsOiAnL2FwaS91c2Vycy8xMjMnLFxuICogICBzdGF0dXNDb2RlOiA1MDAsXG4gKiAgIHJldHJ5Q291bnQ6IDNcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgV2l0aCB0ZW1wbGF0ZSBzdHJpbmdzXG4gKlxuICogYGBgXG4gKiBTZW50cnkubG9nZ2VyLmVycm9yKFNlbnRyeS5sb2dnZXIuZm10YFBheW1lbnQgcHJvY2Vzc2luZyBmYWlsZWQgZm9yIG9yZGVyICR7b3JkZXJJZH1gLCB7XG4gKiAgIGVycm9yOiAnSW5zdWZmaWNpZW50RnVuZHMnLFxuICogICBhbW91bnQ6IDEwMC4wMCxcbiAqICAgY3VycmVuY3k6ICdVU0QnLFxuICogICB1c2VySWQ6ICd1c2VyLTQ1NidcbiAqIH0pO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGVycm9yKG1lc3NhZ2UsIGF0dHJpYnV0ZXMpIHtcbiAgY2FwdHVyZUxvZygnZXJyb3InLCBtZXNzYWdlLCBhdHRyaWJ1dGVzKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBDYXB0dXJlIGEgbG9nIHdpdGggdGhlIGBmYXRhbGAgbGV2ZWwuIFJlcXVpcmVzIHRoZSBgZW5hYmxlTG9nc2Agb3B0aW9uIHRvIGJlIGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBsb2cuXG4gKiBAcGFyYW0gYXR0cmlidXRlcyAtIEFyYml0cmFyeSBzdHJ1Y3R1cmVkIGRhdGEgdGhhdCBzdG9yZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvZyAtIGUuZy4sIHsgYXBwU3RhdGU6ICdjb3JydXB0ZWQnLCBzZXNzaW9uSWQ6ICdhYmMtMTIzJyB9LlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgXG4gKiBTZW50cnkubG9nZ2VyLmZhdGFsKCdBcHBsaWNhdGlvbiBzdGF0ZSBjb3JydXB0ZWQnLCB7XG4gKiAgIGxhc3RLbm93blN0YXRlOiAnYXV0aGVudGljYXRlZCcsXG4gKiAgIHNlc3Npb25JZDogJ3Nlc3Npb24tMTIzJyxcbiAqICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICogICByZWNvdmVyeUF0dGVtcHRlZDogdHJ1ZVxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBXaXRoIHRlbXBsYXRlIHN0cmluZ3NcbiAqXG4gKiBgYGBcbiAqIFNlbnRyeS5sb2dnZXIuZmF0YWwoU2VudHJ5LmxvZ2dlci5mbXRgQ3JpdGljYWwgc3lzdGVtIGZhaWx1cmUgaW4gJHtzZXJ2aWNlfWAsIHtcbiAqICAgc2VydmljZTogJ3BheW1lbnQtcHJvY2Vzc29yJyxcbiAqICAgZXJyb3JDb2RlOiAnQ1JJVElDQUxfRkFJTFVSRScsXG4gKiAgIGFmZmVjdGVkVXNlcnM6IDE1MCxcbiAqICAgdGltZXN0YW1wOiBEYXRlLm5vdygpXG4gKiB9KTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBmYXRhbChtZXNzYWdlLCBhdHRyaWJ1dGVzKSB7XG4gIGNhcHR1cmVMb2coJ2ZhdGFsJywgbWVzc2FnZSwgYXR0cmlidXRlcyk7XG59XG5cbmV4cG9ydCB7IGRlYnVnLCBlcnJvciwgZmF0YWwsIGluZm8sIHRyYWNlLCB3YXJuIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2cuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/log.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/profiling/integration.js":
/*!***********************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/profiling/integration.js ***!
  \***********************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   browserProfilingIntegration: () => (/* binding */ browserProfilingIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/debug-build.js\");\n/* harmony import */ var _startProfileForSpan_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./startProfileForSpan.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/profiling/startProfileForSpan.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/profiling/utils.js\");\n\n\n\n\n\nconst INTEGRATION_NAME = 'BrowserProfiling';\n\nconst _browserProfilingIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      const activeSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n      const rootSpan = activeSpan && (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(activeSpan);\n\n      if (rootSpan && (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.isAutomatedPageLoadSpan)(rootSpan)) {\n        if ((0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.shouldProfileSpan)(rootSpan)) {\n          (0,_startProfileForSpan_js__WEBPACK_IMPORTED_MODULE_2__.startProfileForSpan)(rootSpan);\n        }\n      }\n\n      client.on('spanStart', (span) => {\n        if (span === (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(span) && (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.shouldProfileSpan)(span)) {\n          (0,_startProfileForSpan_js__WEBPACK_IMPORTED_MODULE_2__.startProfileForSpan)(span);\n        }\n      });\n\n      client.on('beforeEnvelope', (envelope) => {\n        // if not profiles are in queue, there is nothing to add to the envelope.\n        if (!(0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.getActiveProfilesCount)()) {\n          return;\n        }\n\n        const profiledTransactionEvents = (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.findProfiledTransactionsFromEnvelope)(envelope);\n        if (!profiledTransactionEvents.length) {\n          return;\n        }\n\n        const profilesToAddToEnvelope = [];\n\n        for (const profiledTransaction of profiledTransactionEvents) {\n          const context = profiledTransaction?.contexts;\n          const profile_id = context?.profile?.['profile_id'];\n          const start_timestamp = context?.profile?.['start_timestamp'];\n\n          if (typeof profile_id !== 'string') {\n            _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log('[Profiling] cannot find profile for a span without a profile context');\n            continue;\n          }\n\n          if (!profile_id) {\n            _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log('[Profiling] cannot find profile for a span without a profile context');\n            continue;\n          }\n\n          // Remove the profile from the span context before sending, relay will take care of the rest.\n          if (context?.profile) {\n            delete context.profile;\n          }\n\n          const profile = (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.takeProfileFromGlobalCache)(profile_id);\n          if (!profile) {\n            _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log(`[Profiling] Could not retrieve profile for span: ${profile_id}`);\n            continue;\n          }\n\n          const profileEvent = (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.createProfilingEvent)(\n            profile_id,\n            start_timestamp ,\n            profile,\n            profiledTransaction ,\n          );\n          if (profileEvent) {\n            profilesToAddToEnvelope.push(profileEvent);\n          }\n        }\n\n        (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.addProfilesToEnvelope)(envelope , profilesToAddToEnvelope);\n      });\n    },\n  };\n}) ;\n\nconst browserProfilingIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(_browserProfilingIntegration);\n\n\n//# sourceMappingURL=integration.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9wcm9maWxpbmcvaW50ZWdyYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBb0Y7QUFDcEM7QUFDZTtBQUNnSjs7QUFFL007O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsMkRBQWE7QUFDdEMscUNBQXFDLHlEQUFXOztBQUVoRCxzQkFBc0Isa0VBQXVCO0FBQzdDLFlBQVksNERBQWlCO0FBQzdCLFVBQVUsNEVBQW1CO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIseURBQVcsVUFBVSw0REFBaUI7QUFDM0QsVUFBVSw0RUFBbUI7QUFDN0I7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSxhQUFhLGlFQUFzQjtBQUNuQztBQUNBOztBQUVBLDBDQUEwQywrRUFBb0M7QUFDOUU7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWSx3REFBVyxJQUFJLCtDQUFLO0FBQ2hDO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLHdEQUFXLElBQUksK0NBQUs7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQkFBMEIscUVBQTBCO0FBQ3BEO0FBQ0EsWUFBWSx3REFBVyxJQUFJLCtDQUFLLHlEQUF5RCxXQUFXO0FBQ3BHO0FBQ0E7O0FBRUEsK0JBQStCLCtEQUFvQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxnRUFBcUI7QUFDN0IsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQsb0NBQW9DLCtEQUFpQjs7QUFFZDtBQUN2QyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9wcm9maWxpbmcvaW50ZWdyYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lSW50ZWdyYXRpb24sIGdldEFjdGl2ZVNwYW4sIGdldFJvb3RTcGFuLCBkZWJ1ZyB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4uL2RlYnVnLWJ1aWxkLmpzJztcbmltcG9ydCB7IHN0YXJ0UHJvZmlsZUZvclNwYW4gfSBmcm9tICcuL3N0YXJ0UHJvZmlsZUZvclNwYW4uanMnO1xuaW1wb3J0IHsgaXNBdXRvbWF0ZWRQYWdlTG9hZFNwYW4sIHNob3VsZFByb2ZpbGVTcGFuLCBnZXRBY3RpdmVQcm9maWxlc0NvdW50LCBmaW5kUHJvZmlsZWRUcmFuc2FjdGlvbnNGcm9tRW52ZWxvcGUsIHRha2VQcm9maWxlRnJvbUdsb2JhbENhY2hlLCBjcmVhdGVQcm9maWxpbmdFdmVudCwgYWRkUHJvZmlsZXNUb0VudmVsb3BlIH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbmNvbnN0IElOVEVHUkFUSU9OX05BTUUgPSAnQnJvd3NlclByb2ZpbGluZyc7XG5cbmNvbnN0IF9icm93c2VyUHJvZmlsaW5nSW50ZWdyYXRpb24gPSAoKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IElOVEVHUkFUSU9OX05BTUUsXG4gICAgc2V0dXAoY2xpZW50KSB7XG4gICAgICBjb25zdCBhY3RpdmVTcGFuID0gZ2V0QWN0aXZlU3BhbigpO1xuICAgICAgY29uc3Qgcm9vdFNwYW4gPSBhY3RpdmVTcGFuICYmIGdldFJvb3RTcGFuKGFjdGl2ZVNwYW4pO1xuXG4gICAgICBpZiAocm9vdFNwYW4gJiYgaXNBdXRvbWF0ZWRQYWdlTG9hZFNwYW4ocm9vdFNwYW4pKSB7XG4gICAgICAgIGlmIChzaG91bGRQcm9maWxlU3Bhbihyb290U3BhbikpIHtcbiAgICAgICAgICBzdGFydFByb2ZpbGVGb3JTcGFuKHJvb3RTcGFuKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjbGllbnQub24oJ3NwYW5TdGFydCcsIChzcGFuKSA9PiB7XG4gICAgICAgIGlmIChzcGFuID09PSBnZXRSb290U3BhbihzcGFuKSAmJiBzaG91bGRQcm9maWxlU3BhbihzcGFuKSkge1xuICAgICAgICAgIHN0YXJ0UHJvZmlsZUZvclNwYW4oc3Bhbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjbGllbnQub24oJ2JlZm9yZUVudmVsb3BlJywgKGVudmVsb3BlKSA9PiB7XG4gICAgICAgIC8vIGlmIG5vdCBwcm9maWxlcyBhcmUgaW4gcXVldWUsIHRoZXJlIGlzIG5vdGhpbmcgdG8gYWRkIHRvIHRoZSBlbnZlbG9wZS5cbiAgICAgICAgaWYgKCFnZXRBY3RpdmVQcm9maWxlc0NvdW50KCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9maWxlZFRyYW5zYWN0aW9uRXZlbnRzID0gZmluZFByb2ZpbGVkVHJhbnNhY3Rpb25zRnJvbUVudmVsb3BlKGVudmVsb3BlKTtcbiAgICAgICAgaWYgKCFwcm9maWxlZFRyYW5zYWN0aW9uRXZlbnRzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByb2ZpbGVzVG9BZGRUb0VudmVsb3BlID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9maWxlZFRyYW5zYWN0aW9uIG9mIHByb2ZpbGVkVHJhbnNhY3Rpb25FdmVudHMpIHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gcHJvZmlsZWRUcmFuc2FjdGlvbj8uY29udGV4dHM7XG4gICAgICAgICAgY29uc3QgcHJvZmlsZV9pZCA9IGNvbnRleHQ/LnByb2ZpbGU/LlsncHJvZmlsZV9pZCddO1xuICAgICAgICAgIGNvbnN0IHN0YXJ0X3RpbWVzdGFtcCA9IGNvbnRleHQ/LnByb2ZpbGU/Llsnc3RhcnRfdGltZXN0YW1wJ107XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHByb2ZpbGVfaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5sb2coJ1tQcm9maWxpbmddIGNhbm5vdCBmaW5kIHByb2ZpbGUgZm9yIGEgc3BhbiB3aXRob3V0IGEgcHJvZmlsZSBjb250ZXh0Jyk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXByb2ZpbGVfaWQpIHtcbiAgICAgICAgICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLmxvZygnW1Byb2ZpbGluZ10gY2Fubm90IGZpbmQgcHJvZmlsZSBmb3IgYSBzcGFuIHdpdGhvdXQgYSBwcm9maWxlIGNvbnRleHQnKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFJlbW92ZSB0aGUgcHJvZmlsZSBmcm9tIHRoZSBzcGFuIGNvbnRleHQgYmVmb3JlIHNlbmRpbmcsIHJlbGF5IHdpbGwgdGFrZSBjYXJlIG9mIHRoZSByZXN0LlxuICAgICAgICAgIGlmIChjb250ZXh0Py5wcm9maWxlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29udGV4dC5wcm9maWxlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHByb2ZpbGUgPSB0YWtlUHJvZmlsZUZyb21HbG9iYWxDYWNoZShwcm9maWxlX2lkKTtcbiAgICAgICAgICBpZiAoIXByb2ZpbGUpIHtcbiAgICAgICAgICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLmxvZyhgW1Byb2ZpbGluZ10gQ291bGQgbm90IHJldHJpZXZlIHByb2ZpbGUgZm9yIHNwYW46ICR7cHJvZmlsZV9pZH1gKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHByb2ZpbGVFdmVudCA9IGNyZWF0ZVByb2ZpbGluZ0V2ZW50KFxuICAgICAgICAgICAgcHJvZmlsZV9pZCxcbiAgICAgICAgICAgIHN0YXJ0X3RpbWVzdGFtcCAsXG4gICAgICAgICAgICBwcm9maWxlLFxuICAgICAgICAgICAgcHJvZmlsZWRUcmFuc2FjdGlvbiAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAocHJvZmlsZUV2ZW50KSB7XG4gICAgICAgICAgICBwcm9maWxlc1RvQWRkVG9FbnZlbG9wZS5wdXNoKHByb2ZpbGVFdmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYWRkUHJvZmlsZXNUb0VudmVsb3BlKGVudmVsb3BlICwgcHJvZmlsZXNUb0FkZFRvRW52ZWxvcGUpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuY29uc3QgYnJvd3NlclByb2ZpbGluZ0ludGVncmF0aW9uID0gZGVmaW5lSW50ZWdyYXRpb24oX2Jyb3dzZXJQcm9maWxpbmdJbnRlZ3JhdGlvbik7XG5cbmV4cG9ydCB7IGJyb3dzZXJQcm9maWxpbmdJbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZWdyYXRpb24uanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/profiling/integration.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/profiling/startProfileForSpan.js":
/*!*******************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/profiling/startProfileForSpan.js ***!
  \*******************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   startProfileForSpan: () => (/* binding */ startProfileForSpan)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/debug-build.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../helpers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/profiling/utils.js\");\n\n\n\n\n\n/**\n * Wraps startTransaction and stopTransaction with profiling related logic.\n * startProfileForTransaction is called after the call to startTransaction in order to avoid our own code from\n * being profiled. Because of that same reason, stopProfiling is called before the call to stopTransaction.\n */\nfunction startProfileForSpan(span) {\n  // Start the profiler and get the profiler instance.\n  let startTimestamp;\n  if ((0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.isAutomatedPageLoadSpan)(span)) {\n    startTimestamp = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.timestampInSeconds)() * 1000;\n  }\n\n  const profiler = (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.startJSSelfProfile)();\n\n  // We failed to construct the profiler, so we skip.\n  // No need to log anything as this has already been logged in startProfile.\n  if (!profiler) {\n    return;\n  }\n\n  if (_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n    _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log(`[Profiling] started profiling span: ${(0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(span).description}`);\n  }\n\n  // We create \"unique\" span names to avoid concurrent spans with same names\n  // from being ignored by the profiler. From here on, only this span name should be used when\n  // calling the profiler methods. Note: we log the original name to the user to avoid confusion.\n  const profileId = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.uuid4)();\n\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)().setContext('profile', {\n    profile_id: profileId,\n    start_timestamp: startTimestamp,\n  });\n\n  /**\n   * Idempotent handler for profile stop\n   */\n  async function onProfileHandler() {\n    // Check if the profile exists and return it the behavior has to be idempotent as users may call span.finish multiple times.\n    if (!span) {\n      return;\n    }\n    // Satisfy the type checker, but profiler will always be defined here.\n    if (!profiler) {\n      return;\n    }\n\n    return profiler\n      .stop()\n      .then((profile) => {\n        if (maxDurationTimeoutID) {\n          _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.clearTimeout(maxDurationTimeoutID);\n          maxDurationTimeoutID = undefined;\n        }\n\n        if (_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n          _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log(`[Profiling] stopped profiling of span: ${(0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(span).description}`);\n        }\n\n        // In case of an overlapping span, stopProfiling may return null and silently ignore the overlapping profile.\n        if (!profile) {\n          if (_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n            _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log(\n              `[Profiling] profiler returned null profile for: ${(0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(span).description}`,\n              'this may indicate an overlapping span or a call to stopProfiling with a profile title that was never started',\n            );\n          }\n          return;\n        }\n\n        (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.addProfileToGlobalCache)(profileId, profile);\n      })\n      .catch(error => {\n        if (_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n          _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log('[Profiling] error while stopping profiler:', error);\n        }\n      });\n  }\n\n  // Enqueue a timeout to prevent profiles from running over max duration.\n  let maxDurationTimeoutID = _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.setTimeout(() => {\n    if (_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n      _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log('[Profiling] max profile duration elapsed, stopping profiling for:', (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(span).description);\n    }\n    // If the timeout exceeds, we want to stop profiling, but not finish the span\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    onProfileHandler();\n  }, _utils_js__WEBPACK_IMPORTED_MODULE_3__.MAX_PROFILE_DURATION_MS);\n\n  // We need to reference the original end call to avoid creating an infinite loop\n  const originalEnd = span.end.bind(span);\n\n  /**\n   * Wraps span `end()` with profiling related logic.\n   * startProfiling is called after the call to spanStart in order to avoid our own code from\n   * being profiled. Because of that same reason, stopProfiling is called before the call to spanEnd.\n   */\n  function profilingWrappedSpanEnd() {\n    if (!span) {\n      return originalEnd();\n    }\n    // onProfileHandler should always return the same profile even if this is called multiple times.\n    // Always call onProfileHandler to ensure stopProfiling is called and the timeout is cleared.\n    void onProfileHandler().then(\n      () => {\n        originalEnd();\n      },\n      () => {\n        // If onProfileHandler fails, we still want to call the original finish method.\n        originalEnd();\n      },\n    );\n\n    return span;\n  }\n\n  span.end = profilingWrappedSpanEnd;\n}\n\n\n//# sourceMappingURL=startProfileForSpan.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9wcm9maWxpbmcvc3RhcnRQcm9maWxlRm9yU3Bhbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUE2RjtBQUM3QztBQUNUO0FBQ29GOztBQUUzSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxrRUFBdUI7QUFDN0IscUJBQXFCLGdFQUFrQjtBQUN2Qzs7QUFFQSxtQkFBbUIsNkRBQWtCOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU0sd0RBQVc7QUFDakIsSUFBSSwrQ0FBSyw0Q0FBNEMsd0RBQVUsbUJBQW1CO0FBQ2xGOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixtREFBSzs7QUFFekIsRUFBRSw2REFBZTtBQUNqQjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLCtDQUFNO0FBQ2hCO0FBQ0E7O0FBRUEsWUFBWSx3REFBVztBQUN2QixVQUFVLCtDQUFLLCtDQUErQyx3REFBVSxtQkFBbUI7QUFDM0Y7O0FBRUE7QUFDQTtBQUNBLGNBQWMsd0RBQVc7QUFDekIsWUFBWSwrQ0FBSztBQUNqQixpRUFBaUUsd0RBQVUsbUJBQW1CO0FBQzlGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxrRUFBdUI7QUFDL0IsT0FBTztBQUNQO0FBQ0EsWUFBWSx3REFBVztBQUN2QixVQUFVLCtDQUFLO0FBQ2Y7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSw2QkFBNkIsK0NBQU07QUFDbkMsUUFBUSx3REFBVztBQUNuQixNQUFNLCtDQUFLLDBFQUEwRSx3REFBVTtBQUMvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRSw4REFBdUI7O0FBRTVCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUUrQjtBQUMvQiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9wcm9maWxpbmcvc3RhcnRQcm9maWxlRm9yU3Bhbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0aW1lc3RhbXBJblNlY29uZHMsIGRlYnVnLCBzcGFuVG9KU09OLCB1dWlkNCwgZ2V0Q3VycmVudFNjb3BlIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IERFQlVHX0JVSUxEIH0gZnJvbSAnLi4vZGVidWctYnVpbGQuanMnO1xuaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgeyBpc0F1dG9tYXRlZFBhZ2VMb2FkU3Bhbiwgc3RhcnRKU1NlbGZQcm9maWxlLCBNQVhfUFJPRklMRV9EVVJBVElPTl9NUywgYWRkUHJvZmlsZVRvR2xvYmFsQ2FjaGUgfSBmcm9tICcuL3V0aWxzLmpzJztcblxuLyoqXG4gKiBXcmFwcyBzdGFydFRyYW5zYWN0aW9uIGFuZCBzdG9wVHJhbnNhY3Rpb24gd2l0aCBwcm9maWxpbmcgcmVsYXRlZCBsb2dpYy5cbiAqIHN0YXJ0UHJvZmlsZUZvclRyYW5zYWN0aW9uIGlzIGNhbGxlZCBhZnRlciB0aGUgY2FsbCB0byBzdGFydFRyYW5zYWN0aW9uIGluIG9yZGVyIHRvIGF2b2lkIG91ciBvd24gY29kZSBmcm9tXG4gKiBiZWluZyBwcm9maWxlZC4gQmVjYXVzZSBvZiB0aGF0IHNhbWUgcmVhc29uLCBzdG9wUHJvZmlsaW5nIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGNhbGwgdG8gc3RvcFRyYW5zYWN0aW9uLlxuICovXG5mdW5jdGlvbiBzdGFydFByb2ZpbGVGb3JTcGFuKHNwYW4pIHtcbiAgLy8gU3RhcnQgdGhlIHByb2ZpbGVyIGFuZCBnZXQgdGhlIHByb2ZpbGVyIGluc3RhbmNlLlxuICBsZXQgc3RhcnRUaW1lc3RhbXA7XG4gIGlmIChpc0F1dG9tYXRlZFBhZ2VMb2FkU3BhbihzcGFuKSkge1xuICAgIHN0YXJ0VGltZXN0YW1wID0gdGltZXN0YW1wSW5TZWNvbmRzKCkgKiAxMDAwO1xuICB9XG5cbiAgY29uc3QgcHJvZmlsZXIgPSBzdGFydEpTU2VsZlByb2ZpbGUoKTtcblxuICAvLyBXZSBmYWlsZWQgdG8gY29uc3RydWN0IHRoZSBwcm9maWxlciwgc28gd2Ugc2tpcC5cbiAgLy8gTm8gbmVlZCB0byBsb2cgYW55dGhpbmcgYXMgdGhpcyBoYXMgYWxyZWFkeSBiZWVuIGxvZ2dlZCBpbiBzdGFydFByb2ZpbGUuXG4gIGlmICghcHJvZmlsZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoREVCVUdfQlVJTEQpIHtcbiAgICBkZWJ1Zy5sb2coYFtQcm9maWxpbmddIHN0YXJ0ZWQgcHJvZmlsaW5nIHNwYW46ICR7c3BhblRvSlNPTihzcGFuKS5kZXNjcmlwdGlvbn1gKTtcbiAgfVxuXG4gIC8vIFdlIGNyZWF0ZSBcInVuaXF1ZVwiIHNwYW4gbmFtZXMgdG8gYXZvaWQgY29uY3VycmVudCBzcGFucyB3aXRoIHNhbWUgbmFtZXNcbiAgLy8gZnJvbSBiZWluZyBpZ25vcmVkIGJ5IHRoZSBwcm9maWxlci4gRnJvbSBoZXJlIG9uLCBvbmx5IHRoaXMgc3BhbiBuYW1lIHNob3VsZCBiZSB1c2VkIHdoZW5cbiAgLy8gY2FsbGluZyB0aGUgcHJvZmlsZXIgbWV0aG9kcy4gTm90ZTogd2UgbG9nIHRoZSBvcmlnaW5hbCBuYW1lIHRvIHRoZSB1c2VyIHRvIGF2b2lkIGNvbmZ1c2lvbi5cbiAgY29uc3QgcHJvZmlsZUlkID0gdXVpZDQoKTtcblxuICBnZXRDdXJyZW50U2NvcGUoKS5zZXRDb250ZXh0KCdwcm9maWxlJywge1xuICAgIHByb2ZpbGVfaWQ6IHByb2ZpbGVJZCxcbiAgICBzdGFydF90aW1lc3RhbXA6IHN0YXJ0VGltZXN0YW1wLFxuICB9KTtcblxuICAvKipcbiAgICogSWRlbXBvdGVudCBoYW5kbGVyIGZvciBwcm9maWxlIHN0b3BcbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIG9uUHJvZmlsZUhhbmRsZXIoKSB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHByb2ZpbGUgZXhpc3RzIGFuZCByZXR1cm4gaXQgdGhlIGJlaGF2aW9yIGhhcyB0byBiZSBpZGVtcG90ZW50IGFzIHVzZXJzIG1heSBjYWxsIHNwYW4uZmluaXNoIG11bHRpcGxlIHRpbWVzLlxuICAgIGlmICghc3Bhbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBTYXRpc2Z5IHRoZSB0eXBlIGNoZWNrZXIsIGJ1dCBwcm9maWxlciB3aWxsIGFsd2F5cyBiZSBkZWZpbmVkIGhlcmUuXG4gICAgaWYgKCFwcm9maWxlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9maWxlclxuICAgICAgLnN0b3AoKVxuICAgICAgLnRoZW4oKHByb2ZpbGUpID0+IHtcbiAgICAgICAgaWYgKG1heER1cmF0aW9uVGltZW91dElEKSB7XG4gICAgICAgICAgV0lORE9XLmNsZWFyVGltZW91dChtYXhEdXJhdGlvblRpbWVvdXRJRCk7XG4gICAgICAgICAgbWF4RHVyYXRpb25UaW1lb3V0SUQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoREVCVUdfQlVJTEQpIHtcbiAgICAgICAgICBkZWJ1Zy5sb2coYFtQcm9maWxpbmddIHN0b3BwZWQgcHJvZmlsaW5nIG9mIHNwYW46ICR7c3BhblRvSlNPTihzcGFuKS5kZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluIGNhc2Ugb2YgYW4gb3ZlcmxhcHBpbmcgc3Bhbiwgc3RvcFByb2ZpbGluZyBtYXkgcmV0dXJuIG51bGwgYW5kIHNpbGVudGx5IGlnbm9yZSB0aGUgb3ZlcmxhcHBpbmcgcHJvZmlsZS5cbiAgICAgICAgaWYgKCFwcm9maWxlKSB7XG4gICAgICAgICAgaWYgKERFQlVHX0JVSUxEKSB7XG4gICAgICAgICAgICBkZWJ1Zy5sb2coXG4gICAgICAgICAgICAgIGBbUHJvZmlsaW5nXSBwcm9maWxlciByZXR1cm5lZCBudWxsIHByb2ZpbGUgZm9yOiAke3NwYW5Ub0pTT04oc3BhbikuZGVzY3JpcHRpb259YCxcbiAgICAgICAgICAgICAgJ3RoaXMgbWF5IGluZGljYXRlIGFuIG92ZXJsYXBwaW5nIHNwYW4gb3IgYSBjYWxsIHRvIHN0b3BQcm9maWxpbmcgd2l0aCBhIHByb2ZpbGUgdGl0bGUgdGhhdCB3YXMgbmV2ZXIgc3RhcnRlZCcsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhZGRQcm9maWxlVG9HbG9iYWxDYWNoZShwcm9maWxlSWQsIHByb2ZpbGUpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGlmIChERUJVR19CVUlMRCkge1xuICAgICAgICAgIGRlYnVnLmxvZygnW1Byb2ZpbGluZ10gZXJyb3Igd2hpbGUgc3RvcHBpbmcgcHJvZmlsZXI6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIEVucXVldWUgYSB0aW1lb3V0IHRvIHByZXZlbnQgcHJvZmlsZXMgZnJvbSBydW5uaW5nIG92ZXIgbWF4IGR1cmF0aW9uLlxuICBsZXQgbWF4RHVyYXRpb25UaW1lb3V0SUQgPSBXSU5ET1cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgaWYgKERFQlVHX0JVSUxEKSB7XG4gICAgICBkZWJ1Zy5sb2coJ1tQcm9maWxpbmddIG1heCBwcm9maWxlIGR1cmF0aW9uIGVsYXBzZWQsIHN0b3BwaW5nIHByb2ZpbGluZyBmb3I6Jywgc3BhblRvSlNPTihzcGFuKS5kZXNjcmlwdGlvbik7XG4gICAgfVxuICAgIC8vIElmIHRoZSB0aW1lb3V0IGV4Y2VlZHMsIHdlIHdhbnQgdG8gc3RvcCBwcm9maWxpbmcsIGJ1dCBub3QgZmluaXNoIHRoZSBzcGFuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgIG9uUHJvZmlsZUhhbmRsZXIoKTtcbiAgfSwgTUFYX1BST0ZJTEVfRFVSQVRJT05fTVMpO1xuXG4gIC8vIFdlIG5lZWQgdG8gcmVmZXJlbmNlIHRoZSBvcmlnaW5hbCBlbmQgY2FsbCB0byBhdm9pZCBjcmVhdGluZyBhbiBpbmZpbml0ZSBsb29wXG4gIGNvbnN0IG9yaWdpbmFsRW5kID0gc3Bhbi5lbmQuYmluZChzcGFuKTtcblxuICAvKipcbiAgICogV3JhcHMgc3BhbiBgZW5kKClgIHdpdGggcHJvZmlsaW5nIHJlbGF0ZWQgbG9naWMuXG4gICAqIHN0YXJ0UHJvZmlsaW5nIGlzIGNhbGxlZCBhZnRlciB0aGUgY2FsbCB0byBzcGFuU3RhcnQgaW4gb3JkZXIgdG8gYXZvaWQgb3VyIG93biBjb2RlIGZyb21cbiAgICogYmVpbmcgcHJvZmlsZWQuIEJlY2F1c2Ugb2YgdGhhdCBzYW1lIHJlYXNvbiwgc3RvcFByb2ZpbGluZyBpcyBjYWxsZWQgYmVmb3JlIHRoZSBjYWxsIHRvIHNwYW5FbmQuXG4gICAqL1xuICBmdW5jdGlvbiBwcm9maWxpbmdXcmFwcGVkU3BhbkVuZCgpIHtcbiAgICBpZiAoIXNwYW4pIHtcbiAgICAgIHJldHVybiBvcmlnaW5hbEVuZCgpO1xuICAgIH1cbiAgICAvLyBvblByb2ZpbGVIYW5kbGVyIHNob3VsZCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIHByb2ZpbGUgZXZlbiBpZiB0aGlzIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy5cbiAgICAvLyBBbHdheXMgY2FsbCBvblByb2ZpbGVIYW5kbGVyIHRvIGVuc3VyZSBzdG9wUHJvZmlsaW5nIGlzIGNhbGxlZCBhbmQgdGhlIHRpbWVvdXQgaXMgY2xlYXJlZC5cbiAgICB2b2lkIG9uUHJvZmlsZUhhbmRsZXIoKS50aGVuKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBvcmlnaW5hbEVuZCgpO1xuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgLy8gSWYgb25Qcm9maWxlSGFuZGxlciBmYWlscywgd2Ugc3RpbGwgd2FudCB0byBjYWxsIHRoZSBvcmlnaW5hbCBmaW5pc2ggbWV0aG9kLlxuICAgICAgICBvcmlnaW5hbEVuZCgpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHNwYW47XG4gIH1cblxuICBzcGFuLmVuZCA9IHByb2ZpbGluZ1dyYXBwZWRTcGFuRW5kO1xufVxuXG5leHBvcnQgeyBzdGFydFByb2ZpbGVGb3JTcGFuIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGFydFByb2ZpbGVGb3JTcGFuLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/profiling/startProfileForSpan.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/profiling/utils.js":
/*!*****************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/profiling/utils.js ***!
  \*****************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   MAX_PROFILE_DURATION_MS: () => (/* binding */ MAX_PROFILE_DURATION_MS),\n/* harmony export */   addProfileToGlobalCache: () => (/* binding */ addProfileToGlobalCache),\n/* harmony export */   addProfilesToEnvelope: () => (/* binding */ addProfilesToEnvelope),\n/* harmony export */   applyDebugMetadata: () => (/* binding */ applyDebugMetadata),\n/* harmony export */   convertJSSelfProfileToSampledFormat: () => (/* binding */ convertJSSelfProfileToSampledFormat),\n/* harmony export */   createProfilePayload: () => (/* binding */ createProfilePayload),\n/* harmony export */   createProfilingEvent: () => (/* binding */ createProfilingEvent),\n/* harmony export */   enrichWithThreadInformation: () => (/* binding */ enrichWithThreadInformation),\n/* harmony export */   findProfiledTransactionsFromEnvelope: () => (/* binding */ findProfiledTransactionsFromEnvelope),\n/* harmony export */   getActiveProfilesCount: () => (/* binding */ getActiveProfilesCount),\n/* harmony export */   isAutomatedPageLoadSpan: () => (/* binding */ isAutomatedPageLoadSpan),\n/* harmony export */   isValidSampleRate: () => (/* binding */ isValidSampleRate),\n/* harmony export */   shouldProfileSpan: () => (/* binding */ shouldProfileSpan),\n/* harmony export */   startJSSelfProfile: () => (/* binding */ startJSSelfProfile),\n/* harmony export */   takeProfileFromGlobalCache: () => (/* binding */ takeProfileFromGlobalCache)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/debug-build.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../helpers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\");\n\n\n\n\nconst MS_TO_NS = 1e6;\n// Use 0 as main thread id which is identical to threadId in node:worker_threads\n// where main logs 0 and workers seem to log in increments of 1\nconst THREAD_ID_STRING = String(0);\nconst THREAD_NAME = 'main';\n\n// We force make this optional to be on the safe side...\nconst navigator = _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.navigator ;\n\n// Machine properties (eval only once)\nlet OS_PLATFORM = '';\nlet OS_PLATFORM_VERSION = '';\nlet OS_ARCH = '';\nlet OS_BROWSER = navigator?.userAgent || '';\nlet OS_MODEL = '';\nconst OS_LOCALE = navigator?.language || navigator?.languages?.[0] || '';\n\nfunction isUserAgentData(data) {\n  return typeof data === 'object' && data !== null && 'getHighEntropyValues' in data;\n}\n\n// @ts-expect-error userAgentData is not part of the navigator interface yet\nconst userAgentData = navigator?.userAgentData;\n\nif (isUserAgentData(userAgentData)) {\n  userAgentData\n    .getHighEntropyValues(['architecture', 'model', 'platform', 'platformVersion', 'fullVersionList'])\n    .then((ua) => {\n      OS_PLATFORM = ua.platform || '';\n      OS_ARCH = ua.architecture || '';\n      OS_MODEL = ua.model || '';\n      OS_PLATFORM_VERSION = ua.platformVersion || '';\n\n      if (ua.fullVersionList?.length) {\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        const firstUa = ua.fullVersionList[ua.fullVersionList.length - 1];\n        OS_BROWSER = `${firstUa.brand} ${firstUa.version}`;\n      }\n    })\n    .catch(e => void 0);\n}\n\nfunction isProcessedJSSelfProfile(profile) {\n  return !('thread_metadata' in profile);\n}\n\n// Enriches the profile with threadId of the current thread.\n// This is done in node as we seem to not be able to get the info from C native code.\n/**\n *\n */\nfunction enrichWithThreadInformation(profile) {\n  if (!isProcessedJSSelfProfile(profile)) {\n    return profile;\n  }\n\n  return convertJSSelfProfileToSampledFormat(profile);\n}\n\n// Profile is marked as optional because it is deleted from the metadata\n// by the integration before the event is processed by other integrations.\n\nfunction getTraceId(event) {\n  const traceId = event.contexts?.trace?.trace_id;\n  // Log a warning if the profile has an invalid traceId (should be uuidv4).\n  // All profiles and transactions are rejected if this is the case and we want to\n  // warn users that this is happening if they enable debug flag\n  if (typeof traceId === 'string' && traceId.length !== 32) {\n    if (_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n      _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log(`[Profiling] Invalid traceId: ${traceId} on profiled event`);\n    }\n  }\n  if (typeof traceId !== 'string') {\n    return '';\n  }\n\n  return traceId;\n}\n/**\n * Creates a profiling event envelope from a Sentry event. If profile does not pass\n * validation, returns null.\n * @param event\n * @param dsn\n * @param metadata\n * @param tunnel\n * @returns {EventEnvelope | null}\n */\n\n/**\n * Creates a profiling event envelope from a Sentry event.\n */\nfunction createProfilePayload(\n  profile_id,\n  start_timestamp,\n  processed_profile,\n  event,\n) {\n  if (event.type !== 'transaction') {\n    // createProfilingEventEnvelope should only be called for transactions,\n    // we type guard this behavior with isProfiledTransactionEvent.\n    throw new TypeError('Profiling events may only be attached to transactions, this should never occur.');\n  }\n\n  if (processed_profile === undefined || processed_profile === null) {\n    throw new TypeError(\n      `Cannot construct profiling event envelope without a valid profile. Got ${processed_profile} instead.`,\n    );\n  }\n\n  const traceId = getTraceId(event);\n  const enrichedThreadProfile = enrichWithThreadInformation(processed_profile);\n  const transactionStartMs = start_timestamp\n    ? start_timestamp\n    : typeof event.start_timestamp === 'number'\n      ? event.start_timestamp * 1000\n      : (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.timestampInSeconds)() * 1000;\n  const transactionEndMs = typeof event.timestamp === 'number' ? event.timestamp * 1000 : (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.timestampInSeconds)() * 1000;\n\n  const profile = {\n    event_id: profile_id,\n    timestamp: new Date(transactionStartMs).toISOString(),\n    platform: 'javascript',\n    version: '1',\n    release: event.release || '',\n    environment: event.environment || _sentry_core__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_ENVIRONMENT,\n    runtime: {\n      name: 'javascript',\n      version: _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.navigator.userAgent,\n    },\n    os: {\n      name: OS_PLATFORM,\n      version: OS_PLATFORM_VERSION,\n      build_number: OS_BROWSER,\n    },\n    device: {\n      locale: OS_LOCALE,\n      model: OS_MODEL,\n      manufacturer: OS_BROWSER,\n      architecture: OS_ARCH,\n      is_emulator: false,\n    },\n    debug_meta: {\n      images: applyDebugMetadata(processed_profile.resources),\n    },\n    profile: enrichedThreadProfile,\n    transactions: [\n      {\n        name: event.transaction || '',\n        id: event.event_id || (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.uuid4)(),\n        trace_id: traceId,\n        active_thread_id: THREAD_ID_STRING,\n        relative_start_ns: '0',\n        relative_end_ns: ((transactionEndMs - transactionStartMs) * 1e6).toFixed(0),\n      },\n    ],\n  };\n\n  return profile;\n}\n\n/*\n  See packages/browser-utils/src/browser/router.ts\n*/\n/**\n *\n */\nfunction isAutomatedPageLoadSpan(span) {\n  return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(span).op === 'pageload';\n}\n\n/**\n * Converts a JSSelfProfile to a our sampled format.\n * Does not currently perform stack indexing.\n */\nfunction convertJSSelfProfileToSampledFormat(input) {\n  let EMPTY_STACK_ID = undefined;\n  let STACK_ID = 0;\n\n  // Initialize the profile that we will fill with data\n  const profile = {\n    samples: [],\n    stacks: [],\n    frames: [],\n    thread_metadata: {\n      [THREAD_ID_STRING]: { name: THREAD_NAME },\n    },\n  };\n\n  const firstSample = input.samples[0];\n  if (!firstSample) {\n    return profile;\n  }\n\n  // We assert samples.length > 0 above and timestamp should always be present\n  const start = firstSample.timestamp;\n  // The JS SDK might change it's time origin based on some heuristic (see See packages/utils/src/time.ts)\n  // when that happens, we need to ensure we are correcting the profile timings so the two timelines stay in sync.\n  // Since JS self profiling time origin is always initialized to performance.timeOrigin, we need to adjust for\n  // the drift between the SDK selected value and our profile time origin.\n  const perfOrigin = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.browserPerformanceTimeOrigin)();\n  const origin = typeof performance.timeOrigin === 'number' ? performance.timeOrigin : perfOrigin || 0;\n  const adjustForOriginChange = origin - (perfOrigin || origin);\n\n  input.samples.forEach((jsSample, i) => {\n    // If sample has no stack, add an empty sample\n    if (jsSample.stackId === undefined) {\n      if (EMPTY_STACK_ID === undefined) {\n        EMPTY_STACK_ID = STACK_ID;\n        profile.stacks[EMPTY_STACK_ID] = [];\n        STACK_ID++;\n      }\n\n      profile['samples'][i] = {\n        // convert ms timestamp to ns\n        elapsed_since_start_ns: ((jsSample.timestamp + adjustForOriginChange - start) * MS_TO_NS).toFixed(0),\n        stack_id: EMPTY_STACK_ID,\n        thread_id: THREAD_ID_STRING,\n      };\n      return;\n    }\n\n    let stackTop = input.stacks[jsSample.stackId];\n\n    // Functions in top->down order (root is last)\n    // We follow the stackTop.parentId trail and collect each visited frameId\n    const stack = [];\n\n    while (stackTop) {\n      stack.push(stackTop.frameId);\n\n      const frame = input.frames[stackTop.frameId];\n\n      // If our frame has not been indexed yet, index it\n      if (frame && profile.frames[stackTop.frameId] === undefined) {\n        profile.frames[stackTop.frameId] = {\n          function: frame.name,\n          abs_path: typeof frame.resourceId === 'number' ? input.resources[frame.resourceId] : undefined,\n          lineno: frame.line,\n          colno: frame.column,\n        };\n      }\n\n      stackTop = stackTop.parentId === undefined ? undefined : input.stacks[stackTop.parentId];\n    }\n\n    const sample = {\n      // convert ms timestamp to ns\n      elapsed_since_start_ns: ((jsSample.timestamp + adjustForOriginChange - start) * MS_TO_NS).toFixed(0),\n      stack_id: STACK_ID,\n      thread_id: THREAD_ID_STRING,\n    };\n\n    profile['stacks'][STACK_ID] = stack;\n    profile['samples'][i] = sample;\n    STACK_ID++;\n  });\n\n  return profile;\n}\n\n/**\n * Adds items to envelope if they are not already present - mutates the envelope.\n * @param envelope\n */\nfunction addProfilesToEnvelope(envelope, profiles) {\n  if (!profiles.length) {\n    return envelope;\n  }\n\n  for (const profile of profiles) {\n    envelope[1].push([{ type: 'profile' }, profile]);\n  }\n  return envelope;\n}\n\n/**\n * Finds transactions with profile_id context in the envelope\n * @param envelope\n * @returns\n */\nfunction findProfiledTransactionsFromEnvelope(envelope) {\n  const events = [];\n\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.forEachEnvelopeItem)(envelope, (item, type) => {\n    if (type !== 'transaction') {\n      return;\n    }\n\n    for (let j = 1; j < item.length; j++) {\n      const event = item[j] ;\n\n      if (event?.contexts?.profile?.profile_id) {\n        events.push(item[j] );\n      }\n    }\n  });\n\n  return events;\n}\n\n/**\n * Applies debug meta data to an event from a list of paths to resources (sourcemaps)\n */\nfunction applyDebugMetadata(resource_paths) {\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  const options = client?.getOptions();\n  const stackParser = options?.stackParser;\n\n  if (!stackParser) {\n    return [];\n  }\n\n  return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getDebugImagesForResources)(stackParser, resource_paths);\n}\n\n/**\n * Checks the given sample rate to make sure it is valid type and value (a boolean, or a number between 0 and 1).\n */\nfunction isValidSampleRate(rate) {\n  // we need to check NaN explicitly because it's of type 'number' and therefore wouldn't get caught by this typecheck\n  if ((typeof rate !== 'number' && typeof rate !== 'boolean') || (typeof rate === 'number' && isNaN(rate))) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD &&\n      _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn(\n        `[Profiling] Invalid sample rate. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n          rate,\n        )} of type ${JSON.stringify(typeof rate)}.`,\n      );\n    return false;\n  }\n\n  // Boolean sample rates are always valid\n  if (rate === true || rate === false) {\n    return true;\n  }\n\n  // in case sampleRate is a boolean, it will get automatically cast to 1 if it's true and 0 if it's false\n  if (rate < 0 || rate > 1) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn(`[Profiling] Invalid sample rate. Sample rate must be between 0 and 1. Got ${rate}.`);\n    return false;\n  }\n  return true;\n}\n\nfunction isValidProfile(profile) {\n  if (profile.samples.length < 2) {\n    if (_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n      // Log a warning if the profile has less than 2 samples so users can know why\n      // they are not seeing any profiling data and we cant avoid the back and forth\n      // of asking them to provide us with a dump of the profile data.\n      _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log('[Profiling] Discarding profile because it contains less than 2 samples');\n    }\n    return false;\n  }\n\n  if (!profile.frames.length) {\n    if (_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n      _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log('[Profiling] Discarding profile because it contains no frames');\n    }\n    return false;\n  }\n\n  return true;\n}\n\n// Keep a flag value to avoid re-initializing the profiler constructor. If it fails\n// once, it will always fail and this allows us to early return.\nlet PROFILING_CONSTRUCTOR_FAILED = false;\nconst MAX_PROFILE_DURATION_MS = 30000;\n\n/**\n * Check if profiler constructor is available.\n * @param maybeProfiler\n */\nfunction isJSProfilerSupported(maybeProfiler) {\n  return typeof maybeProfiler === 'function';\n}\n\n/**\n * Starts the profiler and returns the profiler instance.\n */\nfunction startJSSelfProfile() {\n  // Feature support check first\n  const JSProfilerConstructor = _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.Profiler;\n\n  if (!isJSProfilerSupported(JSProfilerConstructor)) {\n    if (_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n      _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log('[Profiling] Profiling is not supported by this browser, Profiler interface missing on window object.');\n    }\n    return;\n  }\n\n  // From initial testing, it seems that the minimum value for sampleInterval is 10ms.\n  const samplingIntervalMS = 10;\n  // Start the profiler\n  const maxSamples = Math.floor(MAX_PROFILE_DURATION_MS / samplingIntervalMS);\n\n  // Attempt to initialize the profiler constructor, if it fails, we disable profiling for the current user session.\n  // This is likely due to a missing 'Document-Policy': 'js-profiling' header. We do not want to throw an error if this happens\n  // as we risk breaking the user's application, so just disable profiling and log an error.\n  try {\n    return new JSProfilerConstructor({ sampleInterval: samplingIntervalMS, maxBufferSize: maxSamples });\n  } catch (e) {\n    if (_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n      _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log(\n        \"[Profiling] Failed to initialize the Profiling constructor, this is likely due to a missing 'Document-Policy': 'js-profiling' header.\",\n      );\n      _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log('[Profiling] Disabling profiling for current user session.');\n    }\n    PROFILING_CONSTRUCTOR_FAILED = true;\n  }\n\n  return;\n}\n\n/**\n * Determine if a profile should be profiled.\n */\nfunction shouldProfileSpan(span) {\n  // If constructor failed once, it will always fail, so we can early return.\n  if (PROFILING_CONSTRUCTOR_FAILED) {\n    if (_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n      _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log('[Profiling] Profiling has been disabled for the duration of the current user session.');\n    }\n    return false;\n  }\n\n  if (!span.isRecording()) {\n    if (_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n      _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log('[Profiling] Discarding profile because transaction was not sampled.');\n    }\n    return false;\n  }\n\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  const options = client?.getOptions();\n  if (!options) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log('[Profiling] Profiling disabled, no options found.');\n    return false;\n  }\n\n  // @ts-expect-error profilesSampleRate is not part of the browser options yet\n  const profilesSampleRate = options.profilesSampleRate;\n\n  // Since this is coming from the user (or from a function provided by the user), who knows what we might get. (The\n  // only valid values are booleans or numbers between 0 and 1.)\n  if (!isValidSampleRate(profilesSampleRate)) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn('[Profiling] Discarding profile because of invalid sample rate.');\n    return false;\n  }\n\n  // if the function returned 0 (or false), or if `profileSampleRate` is 0, it's a sign the profile should be dropped\n  if (!profilesSampleRate) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD &&\n      _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log(\n        '[Profiling] Discarding profile because a negative sampling decision was inherited or profileSampleRate is set to 0',\n      );\n    return false;\n  }\n\n  // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is\n  // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false.\n  const sampled = profilesSampleRate === true ? true : Math.random() < profilesSampleRate;\n  // Check if we should sample this profile\n  if (!sampled) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD &&\n      _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log(\n        `[Profiling] Discarding profile because it's not included in the random sample (sampling rate = ${Number(\n          profilesSampleRate,\n        )})`,\n      );\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Creates a profiling envelope item, if the profile does not pass validation, returns null.\n * @param event\n * @returns {Profile | null}\n */\nfunction createProfilingEvent(\n  profile_id,\n  start_timestamp,\n  profile,\n  event,\n) {\n  if (!isValidProfile(profile)) {\n    return null;\n  }\n\n  return createProfilePayload(profile_id, start_timestamp, profile, event);\n}\n\n// TODO (v8): We need to obtain profile ids in @sentry-internal/tracing,\n// but we don't have access to this map because importing this map would\n// cause a circular dependency. We need to resolve this in v8.\nconst PROFILE_MAP = new Map();\n/**\n *\n */\nfunction getActiveProfilesCount() {\n  return PROFILE_MAP.size;\n}\n\n/**\n * Retrieves profile from global cache and removes it.\n */\nfunction takeProfileFromGlobalCache(profile_id) {\n  const profile = PROFILE_MAP.get(profile_id);\n  if (profile) {\n    PROFILE_MAP.delete(profile_id);\n  }\n  return profile;\n}\n/**\n * Adds profile to global cache and evicts the oldest profile if the cache is full.\n */\nfunction addProfileToGlobalCache(profile_id, profile) {\n  PROFILE_MAP.set(profile_id, profile);\n\n  if (PROFILE_MAP.size > 30) {\n    const last = PROFILE_MAP.keys().next().value;\n    PROFILE_MAP.delete(last);\n  }\n}\n\n\n//# sourceMappingURL=utils.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9wcm9maWxpbmcvdXRpbHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQTJMO0FBQzNJO0FBQ1Q7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsK0NBQU07O0FBRXhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGVBQWUsRUFBRSxnQkFBZ0I7QUFDekQ7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHdEQUFXO0FBQ25CLE1BQU0sK0NBQUsscUNBQXFDLFNBQVM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0ZBQWdGLG1CQUFtQjtBQUNuRztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsZ0VBQWtCO0FBQzFCLDBGQUEwRixnRUFBa0I7O0FBRTVHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyw2REFBbUI7QUFDekQ7QUFDQTtBQUNBLGVBQWUsK0NBQU07QUFDckIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLG1EQUFLO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsd0RBQVU7QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG1CQUFtQjtBQUMvQyxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLDBFQUE0QjtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLGlFQUFtQjtBQUNyQjtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLGlCQUFpQjtBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix1REFBUztBQUMxQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLHdFQUEwQjtBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHdEQUFXO0FBQ2YsTUFBTSwrQ0FBSztBQUNYLDJHQUEyRztBQUMzRztBQUNBLFdBQVcsVUFBVSw0QkFBNEI7QUFDakQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLHdEQUFXLElBQUksK0NBQUssbUZBQW1GLEtBQUs7QUFDaEg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVEsd0RBQVc7QUFDbkI7QUFDQTtBQUNBO0FBQ0EsTUFBTSwrQ0FBSztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsd0RBQVc7QUFDbkIsTUFBTSwrQ0FBSztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsK0NBQU07O0FBRXRDO0FBQ0EsUUFBUSx3REFBVztBQUNuQixNQUFNLCtDQUFLO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLCtEQUErRDtBQUN0RyxJQUFJO0FBQ0osUUFBUSx3REFBVztBQUNuQixNQUFNLCtDQUFLO0FBQ1g7QUFDQTtBQUNBLE1BQU0sK0NBQUs7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHdEQUFXO0FBQ25CLE1BQU0sK0NBQUs7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLHdEQUFXO0FBQ25CLE1BQU0sK0NBQUs7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHVEQUFTO0FBQzFCO0FBQ0E7QUFDQSxJQUFJLHdEQUFXLElBQUksK0NBQUs7QUFDeEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUksd0RBQVcsSUFBSSwrQ0FBSztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLHdEQUFXO0FBQ2YsTUFBTSwrQ0FBSztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHdEQUFXO0FBQ2YsTUFBTSwrQ0FBSztBQUNYLDBHQUEwRztBQUMxRztBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFa1k7QUFDbFkiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vcHJvZmlsaW5nL3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYW5Ub0pTT04sIGRlYnVnLCBnZXRDbGllbnQsIGZvckVhY2hFbnZlbG9wZUl0ZW0sIHRpbWVzdGFtcEluU2Vjb25kcywgdXVpZDQsIERFRkFVTFRfRU5WSVJPTk1FTlQsIGdldERlYnVnSW1hZ2VzRm9yUmVzb3VyY2VzLCBicm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IERFQlVHX0JVSUxEIH0gZnJvbSAnLi4vZGVidWctYnVpbGQuanMnO1xuaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5cbmNvbnN0IE1TX1RPX05TID0gMWU2O1xuLy8gVXNlIDAgYXMgbWFpbiB0aHJlYWQgaWQgd2hpY2ggaXMgaWRlbnRpY2FsIHRvIHRocmVhZElkIGluIG5vZGU6d29ya2VyX3RocmVhZHNcbi8vIHdoZXJlIG1haW4gbG9ncyAwIGFuZCB3b3JrZXJzIHNlZW0gdG8gbG9nIGluIGluY3JlbWVudHMgb2YgMVxuY29uc3QgVEhSRUFEX0lEX1NUUklORyA9IFN0cmluZygwKTtcbmNvbnN0IFRIUkVBRF9OQU1FID0gJ21haW4nO1xuXG4vLyBXZSBmb3JjZSBtYWtlIHRoaXMgb3B0aW9uYWwgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4uLlxuY29uc3QgbmF2aWdhdG9yID0gV0lORE9XLm5hdmlnYXRvciA7XG5cbi8vIE1hY2hpbmUgcHJvcGVydGllcyAoZXZhbCBvbmx5IG9uY2UpXG5sZXQgT1NfUExBVEZPUk0gPSAnJztcbmxldCBPU19QTEFURk9STV9WRVJTSU9OID0gJyc7XG5sZXQgT1NfQVJDSCA9ICcnO1xubGV0IE9TX0JST1dTRVIgPSBuYXZpZ2F0b3I/LnVzZXJBZ2VudCB8fCAnJztcbmxldCBPU19NT0RFTCA9ICcnO1xuY29uc3QgT1NfTE9DQUxFID0gbmF2aWdhdG9yPy5sYW5ndWFnZSB8fCBuYXZpZ2F0b3I/Lmxhbmd1YWdlcz8uWzBdIHx8ICcnO1xuXG5mdW5jdGlvbiBpc1VzZXJBZ2VudERhdGEoZGF0YSkge1xuICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIGRhdGEgIT09IG51bGwgJiYgJ2dldEhpZ2hFbnRyb3B5VmFsdWVzJyBpbiBkYXRhO1xufVxuXG4vLyBAdHMtZXhwZWN0LWVycm9yIHVzZXJBZ2VudERhdGEgaXMgbm90IHBhcnQgb2YgdGhlIG5hdmlnYXRvciBpbnRlcmZhY2UgeWV0XG5jb25zdCB1c2VyQWdlbnREYXRhID0gbmF2aWdhdG9yPy51c2VyQWdlbnREYXRhO1xuXG5pZiAoaXNVc2VyQWdlbnREYXRhKHVzZXJBZ2VudERhdGEpKSB7XG4gIHVzZXJBZ2VudERhdGFcbiAgICAuZ2V0SGlnaEVudHJvcHlWYWx1ZXMoWydhcmNoaXRlY3R1cmUnLCAnbW9kZWwnLCAncGxhdGZvcm0nLCAncGxhdGZvcm1WZXJzaW9uJywgJ2Z1bGxWZXJzaW9uTGlzdCddKVxuICAgIC50aGVuKCh1YSkgPT4ge1xuICAgICAgT1NfUExBVEZPUk0gPSB1YS5wbGF0Zm9ybSB8fCAnJztcbiAgICAgIE9TX0FSQ0ggPSB1YS5hcmNoaXRlY3R1cmUgfHwgJyc7XG4gICAgICBPU19NT0RFTCA9IHVhLm1vZGVsIHx8ICcnO1xuICAgICAgT1NfUExBVEZPUk1fVkVSU0lPTiA9IHVhLnBsYXRmb3JtVmVyc2lvbiB8fCAnJztcblxuICAgICAgaWYgKHVhLmZ1bGxWZXJzaW9uTGlzdD8ubGVuZ3RoKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgIGNvbnN0IGZpcnN0VWEgPSB1YS5mdWxsVmVyc2lvbkxpc3RbdWEuZnVsbFZlcnNpb25MaXN0Lmxlbmd0aCAtIDFdO1xuICAgICAgICBPU19CUk9XU0VSID0gYCR7Zmlyc3RVYS5icmFuZH0gJHtmaXJzdFVhLnZlcnNpb259YDtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5jYXRjaChlID0+IHZvaWQgMCk7XG59XG5cbmZ1bmN0aW9uIGlzUHJvY2Vzc2VkSlNTZWxmUHJvZmlsZShwcm9maWxlKSB7XG4gIHJldHVybiAhKCd0aHJlYWRfbWV0YWRhdGEnIGluIHByb2ZpbGUpO1xufVxuXG4vLyBFbnJpY2hlcyB0aGUgcHJvZmlsZSB3aXRoIHRocmVhZElkIG9mIHRoZSBjdXJyZW50IHRocmVhZC5cbi8vIFRoaXMgaXMgZG9uZSBpbiBub2RlIGFzIHdlIHNlZW0gdG8gbm90IGJlIGFibGUgdG8gZ2V0IHRoZSBpbmZvIGZyb20gQyBuYXRpdmUgY29kZS5cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gZW5yaWNoV2l0aFRocmVhZEluZm9ybWF0aW9uKHByb2ZpbGUpIHtcbiAgaWYgKCFpc1Byb2Nlc3NlZEpTU2VsZlByb2ZpbGUocHJvZmlsZSkpIHtcbiAgICByZXR1cm4gcHJvZmlsZTtcbiAgfVxuXG4gIHJldHVybiBjb252ZXJ0SlNTZWxmUHJvZmlsZVRvU2FtcGxlZEZvcm1hdChwcm9maWxlKTtcbn1cblxuLy8gUHJvZmlsZSBpcyBtYXJrZWQgYXMgb3B0aW9uYWwgYmVjYXVzZSBpdCBpcyBkZWxldGVkIGZyb20gdGhlIG1ldGFkYXRhXG4vLyBieSB0aGUgaW50ZWdyYXRpb24gYmVmb3JlIHRoZSBldmVudCBpcyBwcm9jZXNzZWQgYnkgb3RoZXIgaW50ZWdyYXRpb25zLlxuXG5mdW5jdGlvbiBnZXRUcmFjZUlkKGV2ZW50KSB7XG4gIGNvbnN0IHRyYWNlSWQgPSBldmVudC5jb250ZXh0cz8udHJhY2U/LnRyYWNlX2lkO1xuICAvLyBMb2cgYSB3YXJuaW5nIGlmIHRoZSBwcm9maWxlIGhhcyBhbiBpbnZhbGlkIHRyYWNlSWQgKHNob3VsZCBiZSB1dWlkdjQpLlxuICAvLyBBbGwgcHJvZmlsZXMgYW5kIHRyYW5zYWN0aW9ucyBhcmUgcmVqZWN0ZWQgaWYgdGhpcyBpcyB0aGUgY2FzZSBhbmQgd2Ugd2FudCB0b1xuICAvLyB3YXJuIHVzZXJzIHRoYXQgdGhpcyBpcyBoYXBwZW5pbmcgaWYgdGhleSBlbmFibGUgZGVidWcgZmxhZ1xuICBpZiAodHlwZW9mIHRyYWNlSWQgPT09ICdzdHJpbmcnICYmIHRyYWNlSWQubGVuZ3RoICE9PSAzMikge1xuICAgIGlmIChERUJVR19CVUlMRCkge1xuICAgICAgZGVidWcubG9nKGBbUHJvZmlsaW5nXSBJbnZhbGlkIHRyYWNlSWQ6ICR7dHJhY2VJZH0gb24gcHJvZmlsZWQgZXZlbnRgKTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiB0cmFjZUlkICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJldHVybiB0cmFjZUlkO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgcHJvZmlsaW5nIGV2ZW50IGVudmVsb3BlIGZyb20gYSBTZW50cnkgZXZlbnQuIElmIHByb2ZpbGUgZG9lcyBub3QgcGFzc1xuICogdmFsaWRhdGlvbiwgcmV0dXJucyBudWxsLlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcGFyYW0gZHNuXG4gKiBAcGFyYW0gbWV0YWRhdGFcbiAqIEBwYXJhbSB0dW5uZWxcbiAqIEByZXR1cm5zIHtFdmVudEVudmVsb3BlIHwgbnVsbH1cbiAqL1xuXG4vKipcbiAqIENyZWF0ZXMgYSBwcm9maWxpbmcgZXZlbnQgZW52ZWxvcGUgZnJvbSBhIFNlbnRyeSBldmVudC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUHJvZmlsZVBheWxvYWQoXG4gIHByb2ZpbGVfaWQsXG4gIHN0YXJ0X3RpbWVzdGFtcCxcbiAgcHJvY2Vzc2VkX3Byb2ZpbGUsXG4gIGV2ZW50LFxuKSB7XG4gIGlmIChldmVudC50eXBlICE9PSAndHJhbnNhY3Rpb24nKSB7XG4gICAgLy8gY3JlYXRlUHJvZmlsaW5nRXZlbnRFbnZlbG9wZSBzaG91bGQgb25seSBiZSBjYWxsZWQgZm9yIHRyYW5zYWN0aW9ucyxcbiAgICAvLyB3ZSB0eXBlIGd1YXJkIHRoaXMgYmVoYXZpb3Igd2l0aCBpc1Byb2ZpbGVkVHJhbnNhY3Rpb25FdmVudC5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9maWxpbmcgZXZlbnRzIG1heSBvbmx5IGJlIGF0dGFjaGVkIHRvIHRyYW5zYWN0aW9ucywgdGhpcyBzaG91bGQgbmV2ZXIgb2NjdXIuJyk7XG4gIH1cblxuICBpZiAocHJvY2Vzc2VkX3Byb2ZpbGUgPT09IHVuZGVmaW5lZCB8fCBwcm9jZXNzZWRfcHJvZmlsZSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBgQ2Fubm90IGNvbnN0cnVjdCBwcm9maWxpbmcgZXZlbnQgZW52ZWxvcGUgd2l0aG91dCBhIHZhbGlkIHByb2ZpbGUuIEdvdCAke3Byb2Nlc3NlZF9wcm9maWxlfSBpbnN0ZWFkLmAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHRyYWNlSWQgPSBnZXRUcmFjZUlkKGV2ZW50KTtcbiAgY29uc3QgZW5yaWNoZWRUaHJlYWRQcm9maWxlID0gZW5yaWNoV2l0aFRocmVhZEluZm9ybWF0aW9uKHByb2Nlc3NlZF9wcm9maWxlKTtcbiAgY29uc3QgdHJhbnNhY3Rpb25TdGFydE1zID0gc3RhcnRfdGltZXN0YW1wXG4gICAgPyBzdGFydF90aW1lc3RhbXBcbiAgICA6IHR5cGVvZiBldmVudC5zdGFydF90aW1lc3RhbXAgPT09ICdudW1iZXInXG4gICAgICA/IGV2ZW50LnN0YXJ0X3RpbWVzdGFtcCAqIDEwMDBcbiAgICAgIDogdGltZXN0YW1wSW5TZWNvbmRzKCkgKiAxMDAwO1xuICBjb25zdCB0cmFuc2FjdGlvbkVuZE1zID0gdHlwZW9mIGV2ZW50LnRpbWVzdGFtcCA9PT0gJ251bWJlcicgPyBldmVudC50aW1lc3RhbXAgKiAxMDAwIDogdGltZXN0YW1wSW5TZWNvbmRzKCkgKiAxMDAwO1xuXG4gIGNvbnN0IHByb2ZpbGUgPSB7XG4gICAgZXZlbnRfaWQ6IHByb2ZpbGVfaWQsXG4gICAgdGltZXN0YW1wOiBuZXcgRGF0ZSh0cmFuc2FjdGlvblN0YXJ0TXMpLnRvSVNPU3RyaW5nKCksXG4gICAgcGxhdGZvcm06ICdqYXZhc2NyaXB0JyxcbiAgICB2ZXJzaW9uOiAnMScsXG4gICAgcmVsZWFzZTogZXZlbnQucmVsZWFzZSB8fCAnJyxcbiAgICBlbnZpcm9ubWVudDogZXZlbnQuZW52aXJvbm1lbnQgfHwgREVGQVVMVF9FTlZJUk9OTUVOVCxcbiAgICBydW50aW1lOiB7XG4gICAgICBuYW1lOiAnamF2YXNjcmlwdCcsXG4gICAgICB2ZXJzaW9uOiBXSU5ET1cubmF2aWdhdG9yLnVzZXJBZ2VudCxcbiAgICB9LFxuICAgIG9zOiB7XG4gICAgICBuYW1lOiBPU19QTEFURk9STSxcbiAgICAgIHZlcnNpb246IE9TX1BMQVRGT1JNX1ZFUlNJT04sXG4gICAgICBidWlsZF9udW1iZXI6IE9TX0JST1dTRVIsXG4gICAgfSxcbiAgICBkZXZpY2U6IHtcbiAgICAgIGxvY2FsZTogT1NfTE9DQUxFLFxuICAgICAgbW9kZWw6IE9TX01PREVMLFxuICAgICAgbWFudWZhY3R1cmVyOiBPU19CUk9XU0VSLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBPU19BUkNILFxuICAgICAgaXNfZW11bGF0b3I6IGZhbHNlLFxuICAgIH0sXG4gICAgZGVidWdfbWV0YToge1xuICAgICAgaW1hZ2VzOiBhcHBseURlYnVnTWV0YWRhdGEocHJvY2Vzc2VkX3Byb2ZpbGUucmVzb3VyY2VzKSxcbiAgICB9LFxuICAgIHByb2ZpbGU6IGVucmljaGVkVGhyZWFkUHJvZmlsZSxcbiAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogZXZlbnQudHJhbnNhY3Rpb24gfHwgJycsXG4gICAgICAgIGlkOiBldmVudC5ldmVudF9pZCB8fCB1dWlkNCgpLFxuICAgICAgICB0cmFjZV9pZDogdHJhY2VJZCxcbiAgICAgICAgYWN0aXZlX3RocmVhZF9pZDogVEhSRUFEX0lEX1NUUklORyxcbiAgICAgICAgcmVsYXRpdmVfc3RhcnRfbnM6ICcwJyxcbiAgICAgICAgcmVsYXRpdmVfZW5kX25zOiAoKHRyYW5zYWN0aW9uRW5kTXMgLSB0cmFuc2FjdGlvblN0YXJ0TXMpICogMWU2KS50b0ZpeGVkKDApLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIHJldHVybiBwcm9maWxlO1xufVxuXG4vKlxuICBTZWUgcGFja2FnZXMvYnJvd3Nlci11dGlscy9zcmMvYnJvd3Nlci9yb3V0ZXIudHNcbiovXG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIGlzQXV0b21hdGVkUGFnZUxvYWRTcGFuKHNwYW4pIHtcbiAgcmV0dXJuIHNwYW5Ub0pTT04oc3Bhbikub3AgPT09ICdwYWdlbG9hZCc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBKU1NlbGZQcm9maWxlIHRvIGEgb3VyIHNhbXBsZWQgZm9ybWF0LlxuICogRG9lcyBub3QgY3VycmVudGx5IHBlcmZvcm0gc3RhY2sgaW5kZXhpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRKU1NlbGZQcm9maWxlVG9TYW1wbGVkRm9ybWF0KGlucHV0KSB7XG4gIGxldCBFTVBUWV9TVEFDS19JRCA9IHVuZGVmaW5lZDtcbiAgbGV0IFNUQUNLX0lEID0gMDtcblxuICAvLyBJbml0aWFsaXplIHRoZSBwcm9maWxlIHRoYXQgd2Ugd2lsbCBmaWxsIHdpdGggZGF0YVxuICBjb25zdCBwcm9maWxlID0ge1xuICAgIHNhbXBsZXM6IFtdLFxuICAgIHN0YWNrczogW10sXG4gICAgZnJhbWVzOiBbXSxcbiAgICB0aHJlYWRfbWV0YWRhdGE6IHtcbiAgICAgIFtUSFJFQURfSURfU1RSSU5HXTogeyBuYW1lOiBUSFJFQURfTkFNRSB9LFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgZmlyc3RTYW1wbGUgPSBpbnB1dC5zYW1wbGVzWzBdO1xuICBpZiAoIWZpcnN0U2FtcGxlKSB7XG4gICAgcmV0dXJuIHByb2ZpbGU7XG4gIH1cblxuICAvLyBXZSBhc3NlcnQgc2FtcGxlcy5sZW5ndGggPiAwIGFib3ZlIGFuZCB0aW1lc3RhbXAgc2hvdWxkIGFsd2F5cyBiZSBwcmVzZW50XG4gIGNvbnN0IHN0YXJ0ID0gZmlyc3RTYW1wbGUudGltZXN0YW1wO1xuICAvLyBUaGUgSlMgU0RLIG1pZ2h0IGNoYW5nZSBpdCdzIHRpbWUgb3JpZ2luIGJhc2VkIG9uIHNvbWUgaGV1cmlzdGljIChzZWUgU2VlIHBhY2thZ2VzL3V0aWxzL3NyYy90aW1lLnRzKVxuICAvLyB3aGVuIHRoYXQgaGFwcGVucywgd2UgbmVlZCB0byBlbnN1cmUgd2UgYXJlIGNvcnJlY3RpbmcgdGhlIHByb2ZpbGUgdGltaW5ncyBzbyB0aGUgdHdvIHRpbWVsaW5lcyBzdGF5IGluIHN5bmMuXG4gIC8vIFNpbmNlIEpTIHNlbGYgcHJvZmlsaW5nIHRpbWUgb3JpZ2luIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byBwZXJmb3JtYW5jZS50aW1lT3JpZ2luLCB3ZSBuZWVkIHRvIGFkanVzdCBmb3JcbiAgLy8gdGhlIGRyaWZ0IGJldHdlZW4gdGhlIFNESyBzZWxlY3RlZCB2YWx1ZSBhbmQgb3VyIHByb2ZpbGUgdGltZSBvcmlnaW4uXG4gIGNvbnN0IHBlcmZPcmlnaW4gPSBicm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luKCk7XG4gIGNvbnN0IG9yaWdpbiA9IHR5cGVvZiBwZXJmb3JtYW5jZS50aW1lT3JpZ2luID09PSAnbnVtYmVyJyA/IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gOiBwZXJmT3JpZ2luIHx8IDA7XG4gIGNvbnN0IGFkanVzdEZvck9yaWdpbkNoYW5nZSA9IG9yaWdpbiAtIChwZXJmT3JpZ2luIHx8IG9yaWdpbik7XG5cbiAgaW5wdXQuc2FtcGxlcy5mb3JFYWNoKChqc1NhbXBsZSwgaSkgPT4ge1xuICAgIC8vIElmIHNhbXBsZSBoYXMgbm8gc3RhY2ssIGFkZCBhbiBlbXB0eSBzYW1wbGVcbiAgICBpZiAoanNTYW1wbGUuc3RhY2tJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoRU1QVFlfU1RBQ0tfSUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBFTVBUWV9TVEFDS19JRCA9IFNUQUNLX0lEO1xuICAgICAgICBwcm9maWxlLnN0YWNrc1tFTVBUWV9TVEFDS19JRF0gPSBbXTtcbiAgICAgICAgU1RBQ0tfSUQrKztcbiAgICAgIH1cblxuICAgICAgcHJvZmlsZVsnc2FtcGxlcyddW2ldID0ge1xuICAgICAgICAvLyBjb252ZXJ0IG1zIHRpbWVzdGFtcCB0byBuc1xuICAgICAgICBlbGFwc2VkX3NpbmNlX3N0YXJ0X25zOiAoKGpzU2FtcGxlLnRpbWVzdGFtcCArIGFkanVzdEZvck9yaWdpbkNoYW5nZSAtIHN0YXJ0KSAqIE1TX1RPX05TKS50b0ZpeGVkKDApLFxuICAgICAgICBzdGFja19pZDogRU1QVFlfU1RBQ0tfSUQsXG4gICAgICAgIHRocmVhZF9pZDogVEhSRUFEX0lEX1NUUklORyxcbiAgICAgIH07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHN0YWNrVG9wID0gaW5wdXQuc3RhY2tzW2pzU2FtcGxlLnN0YWNrSWRdO1xuXG4gICAgLy8gRnVuY3Rpb25zIGluIHRvcC0+ZG93biBvcmRlciAocm9vdCBpcyBsYXN0KVxuICAgIC8vIFdlIGZvbGxvdyB0aGUgc3RhY2tUb3AucGFyZW50SWQgdHJhaWwgYW5kIGNvbGxlY3QgZWFjaCB2aXNpdGVkIGZyYW1lSWRcbiAgICBjb25zdCBzdGFjayA9IFtdO1xuXG4gICAgd2hpbGUgKHN0YWNrVG9wKSB7XG4gICAgICBzdGFjay5wdXNoKHN0YWNrVG9wLmZyYW1lSWQpO1xuXG4gICAgICBjb25zdCBmcmFtZSA9IGlucHV0LmZyYW1lc1tzdGFja1RvcC5mcmFtZUlkXTtcblxuICAgICAgLy8gSWYgb3VyIGZyYW1lIGhhcyBub3QgYmVlbiBpbmRleGVkIHlldCwgaW5kZXggaXRcbiAgICAgIGlmIChmcmFtZSAmJiBwcm9maWxlLmZyYW1lc1tzdGFja1RvcC5mcmFtZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb2ZpbGUuZnJhbWVzW3N0YWNrVG9wLmZyYW1lSWRdID0ge1xuICAgICAgICAgIGZ1bmN0aW9uOiBmcmFtZS5uYW1lLFxuICAgICAgICAgIGFic19wYXRoOiB0eXBlb2YgZnJhbWUucmVzb3VyY2VJZCA9PT0gJ251bWJlcicgPyBpbnB1dC5yZXNvdXJjZXNbZnJhbWUucmVzb3VyY2VJZF0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgbGluZW5vOiBmcmFtZS5saW5lLFxuICAgICAgICAgIGNvbG5vOiBmcmFtZS5jb2x1bW4sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN0YWNrVG9wID0gc3RhY2tUb3AucGFyZW50SWQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGlucHV0LnN0YWNrc1tzdGFja1RvcC5wYXJlbnRJZF07XG4gICAgfVxuXG4gICAgY29uc3Qgc2FtcGxlID0ge1xuICAgICAgLy8gY29udmVydCBtcyB0aW1lc3RhbXAgdG8gbnNcbiAgICAgIGVsYXBzZWRfc2luY2Vfc3RhcnRfbnM6ICgoanNTYW1wbGUudGltZXN0YW1wICsgYWRqdXN0Rm9yT3JpZ2luQ2hhbmdlIC0gc3RhcnQpICogTVNfVE9fTlMpLnRvRml4ZWQoMCksXG4gICAgICBzdGFja19pZDogU1RBQ0tfSUQsXG4gICAgICB0aHJlYWRfaWQ6IFRIUkVBRF9JRF9TVFJJTkcsXG4gICAgfTtcblxuICAgIHByb2ZpbGVbJ3N0YWNrcyddW1NUQUNLX0lEXSA9IHN0YWNrO1xuICAgIHByb2ZpbGVbJ3NhbXBsZXMnXVtpXSA9IHNhbXBsZTtcbiAgICBTVEFDS19JRCsrO1xuICB9KTtcblxuICByZXR1cm4gcHJvZmlsZTtcbn1cblxuLyoqXG4gKiBBZGRzIGl0ZW1zIHRvIGVudmVsb3BlIGlmIHRoZXkgYXJlIG5vdCBhbHJlYWR5IHByZXNlbnQgLSBtdXRhdGVzIHRoZSBlbnZlbG9wZS5cbiAqIEBwYXJhbSBlbnZlbG9wZVxuICovXG5mdW5jdGlvbiBhZGRQcm9maWxlc1RvRW52ZWxvcGUoZW52ZWxvcGUsIHByb2ZpbGVzKSB7XG4gIGlmICghcHJvZmlsZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGVudmVsb3BlO1xuICB9XG5cbiAgZm9yIChjb25zdCBwcm9maWxlIG9mIHByb2ZpbGVzKSB7XG4gICAgZW52ZWxvcGVbMV0ucHVzaChbeyB0eXBlOiAncHJvZmlsZScgfSwgcHJvZmlsZV0pO1xuICB9XG4gIHJldHVybiBlbnZlbG9wZTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0cmFuc2FjdGlvbnMgd2l0aCBwcm9maWxlX2lkIGNvbnRleHQgaW4gdGhlIGVudmVsb3BlXG4gKiBAcGFyYW0gZW52ZWxvcGVcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIGZpbmRQcm9maWxlZFRyYW5zYWN0aW9uc0Zyb21FbnZlbG9wZShlbnZlbG9wZSkge1xuICBjb25zdCBldmVudHMgPSBbXTtcblxuICBmb3JFYWNoRW52ZWxvcGVJdGVtKGVudmVsb3BlLCAoaXRlbSwgdHlwZSkgPT4ge1xuICAgIGlmICh0eXBlICE9PSAndHJhbnNhY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaiA9IDE7IGogPCBpdGVtLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCBldmVudCA9IGl0ZW1bal0gO1xuXG4gICAgICBpZiAoZXZlbnQ/LmNvbnRleHRzPy5wcm9maWxlPy5wcm9maWxlX2lkKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGl0ZW1bal0gKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBldmVudHM7XG59XG5cbi8qKlxuICogQXBwbGllcyBkZWJ1ZyBtZXRhIGRhdGEgdG8gYW4gZXZlbnQgZnJvbSBhIGxpc3Qgb2YgcGF0aHMgdG8gcmVzb3VyY2VzIChzb3VyY2VtYXBzKVxuICovXG5mdW5jdGlvbiBhcHBseURlYnVnTWV0YWRhdGEocmVzb3VyY2VfcGF0aHMpIHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7XG4gIGNvbnN0IG9wdGlvbnMgPSBjbGllbnQ/LmdldE9wdGlvbnMoKTtcbiAgY29uc3Qgc3RhY2tQYXJzZXIgPSBvcHRpb25zPy5zdGFja1BhcnNlcjtcblxuICBpZiAoIXN0YWNrUGFyc2VyKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIGdldERlYnVnSW1hZ2VzRm9yUmVzb3VyY2VzKHN0YWNrUGFyc2VyLCByZXNvdXJjZV9wYXRocyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHRoZSBnaXZlbiBzYW1wbGUgcmF0ZSB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQgdHlwZSBhbmQgdmFsdWUgKGEgYm9vbGVhbiwgb3IgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxKS5cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFNhbXBsZVJhdGUocmF0ZSkge1xuICAvLyB3ZSBuZWVkIHRvIGNoZWNrIE5hTiBleHBsaWNpdGx5IGJlY2F1c2UgaXQncyBvZiB0eXBlICdudW1iZXInIGFuZCB0aGVyZWZvcmUgd291bGRuJ3QgZ2V0IGNhdWdodCBieSB0aGlzIHR5cGVjaGVja1xuICBpZiAoKHR5cGVvZiByYXRlICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgcmF0ZSAhPT0gJ2Jvb2xlYW4nKSB8fCAodHlwZW9mIHJhdGUgPT09ICdudW1iZXInICYmIGlzTmFOKHJhdGUpKSkge1xuICAgIERFQlVHX0JVSUxEICYmXG4gICAgICBkZWJ1Zy53YXJuKFxuICAgICAgICBgW1Byb2ZpbGluZ10gSW52YWxpZCBzYW1wbGUgcmF0ZS4gU2FtcGxlIHJhdGUgbXVzdCBiZSBhIGJvb2xlYW4gb3IgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxLiBHb3QgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICByYXRlLFxuICAgICAgICApfSBvZiB0eXBlICR7SlNPTi5zdHJpbmdpZnkodHlwZW9mIHJhdGUpfS5gLFxuICAgICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBCb29sZWFuIHNhbXBsZSByYXRlcyBhcmUgYWx3YXlzIHZhbGlkXG4gIGlmIChyYXRlID09PSB0cnVlIHx8IHJhdGUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBpbiBjYXNlIHNhbXBsZVJhdGUgaXMgYSBib29sZWFuLCBpdCB3aWxsIGdldCBhdXRvbWF0aWNhbGx5IGNhc3QgdG8gMSBpZiBpdCdzIHRydWUgYW5kIDAgaWYgaXQncyBmYWxzZVxuICBpZiAocmF0ZSA8IDAgfHwgcmF0ZSA+IDEpIHtcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy53YXJuKGBbUHJvZmlsaW5nXSBJbnZhbGlkIHNhbXBsZSByYXRlLiBTYW1wbGUgcmF0ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4gR290ICR7cmF0ZX0uYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkUHJvZmlsZShwcm9maWxlKSB7XG4gIGlmIChwcm9maWxlLnNhbXBsZXMubGVuZ3RoIDwgMikge1xuICAgIGlmIChERUJVR19CVUlMRCkge1xuICAgICAgLy8gTG9nIGEgd2FybmluZyBpZiB0aGUgcHJvZmlsZSBoYXMgbGVzcyB0aGFuIDIgc2FtcGxlcyBzbyB1c2VycyBjYW4ga25vdyB3aHlcbiAgICAgIC8vIHRoZXkgYXJlIG5vdCBzZWVpbmcgYW55IHByb2ZpbGluZyBkYXRhIGFuZCB3ZSBjYW50IGF2b2lkIHRoZSBiYWNrIGFuZCBmb3J0aFxuICAgICAgLy8gb2YgYXNraW5nIHRoZW0gdG8gcHJvdmlkZSB1cyB3aXRoIGEgZHVtcCBvZiB0aGUgcHJvZmlsZSBkYXRhLlxuICAgICAgZGVidWcubG9nKCdbUHJvZmlsaW5nXSBEaXNjYXJkaW5nIHByb2ZpbGUgYmVjYXVzZSBpdCBjb250YWlucyBsZXNzIHRoYW4gMiBzYW1wbGVzJyk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghcHJvZmlsZS5mcmFtZXMubGVuZ3RoKSB7XG4gICAgaWYgKERFQlVHX0JVSUxEKSB7XG4gICAgICBkZWJ1Zy5sb2coJ1tQcm9maWxpbmddIERpc2NhcmRpbmcgcHJvZmlsZSBiZWNhdXNlIGl0IGNvbnRhaW5zIG5vIGZyYW1lcycpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gS2VlcCBhIGZsYWcgdmFsdWUgdG8gYXZvaWQgcmUtaW5pdGlhbGl6aW5nIHRoZSBwcm9maWxlciBjb25zdHJ1Y3Rvci4gSWYgaXQgZmFpbHNcbi8vIG9uY2UsIGl0IHdpbGwgYWx3YXlzIGZhaWwgYW5kIHRoaXMgYWxsb3dzIHVzIHRvIGVhcmx5IHJldHVybi5cbmxldCBQUk9GSUxJTkdfQ09OU1RSVUNUT1JfRkFJTEVEID0gZmFsc2U7XG5jb25zdCBNQVhfUFJPRklMRV9EVVJBVElPTl9NUyA9IDMwMDAwO1xuXG4vKipcbiAqIENoZWNrIGlmIHByb2ZpbGVyIGNvbnN0cnVjdG9yIGlzIGF2YWlsYWJsZS5cbiAqIEBwYXJhbSBtYXliZVByb2ZpbGVyXG4gKi9cbmZ1bmN0aW9uIGlzSlNQcm9maWxlclN1cHBvcnRlZChtYXliZVByb2ZpbGVyKSB7XG4gIHJldHVybiB0eXBlb2YgbWF5YmVQcm9maWxlciA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBTdGFydHMgdGhlIHByb2ZpbGVyIGFuZCByZXR1cm5zIHRoZSBwcm9maWxlciBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhcnRKU1NlbGZQcm9maWxlKCkge1xuICAvLyBGZWF0dXJlIHN1cHBvcnQgY2hlY2sgZmlyc3RcbiAgY29uc3QgSlNQcm9maWxlckNvbnN0cnVjdG9yID0gV0lORE9XLlByb2ZpbGVyO1xuXG4gIGlmICghaXNKU1Byb2ZpbGVyU3VwcG9ydGVkKEpTUHJvZmlsZXJDb25zdHJ1Y3RvcikpIHtcbiAgICBpZiAoREVCVUdfQlVJTEQpIHtcbiAgICAgIGRlYnVnLmxvZygnW1Byb2ZpbGluZ10gUHJvZmlsaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLCBQcm9maWxlciBpbnRlcmZhY2UgbWlzc2luZyBvbiB3aW5kb3cgb2JqZWN0LicpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGcm9tIGluaXRpYWwgdGVzdGluZywgaXQgc2VlbXMgdGhhdCB0aGUgbWluaW11bSB2YWx1ZSBmb3Igc2FtcGxlSW50ZXJ2YWwgaXMgMTBtcy5cbiAgY29uc3Qgc2FtcGxpbmdJbnRlcnZhbE1TID0gMTA7XG4gIC8vIFN0YXJ0IHRoZSBwcm9maWxlclxuICBjb25zdCBtYXhTYW1wbGVzID0gTWF0aC5mbG9vcihNQVhfUFJPRklMRV9EVVJBVElPTl9NUyAvIHNhbXBsaW5nSW50ZXJ2YWxNUyk7XG5cbiAgLy8gQXR0ZW1wdCB0byBpbml0aWFsaXplIHRoZSBwcm9maWxlciBjb25zdHJ1Y3RvciwgaWYgaXQgZmFpbHMsIHdlIGRpc2FibGUgcHJvZmlsaW5nIGZvciB0aGUgY3VycmVudCB1c2VyIHNlc3Npb24uXG4gIC8vIFRoaXMgaXMgbGlrZWx5IGR1ZSB0byBhIG1pc3NpbmcgJ0RvY3VtZW50LVBvbGljeSc6ICdqcy1wcm9maWxpbmcnIGhlYWRlci4gV2UgZG8gbm90IHdhbnQgdG8gdGhyb3cgYW4gZXJyb3IgaWYgdGhpcyBoYXBwZW5zXG4gIC8vIGFzIHdlIHJpc2sgYnJlYWtpbmcgdGhlIHVzZXIncyBhcHBsaWNhdGlvbiwgc28ganVzdCBkaXNhYmxlIHByb2ZpbGluZyBhbmQgbG9nIGFuIGVycm9yLlxuICB0cnkge1xuICAgIHJldHVybiBuZXcgSlNQcm9maWxlckNvbnN0cnVjdG9yKHsgc2FtcGxlSW50ZXJ2YWw6IHNhbXBsaW5nSW50ZXJ2YWxNUywgbWF4QnVmZmVyU2l6ZTogbWF4U2FtcGxlcyB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChERUJVR19CVUlMRCkge1xuICAgICAgZGVidWcubG9nKFxuICAgICAgICBcIltQcm9maWxpbmddIEZhaWxlZCB0byBpbml0aWFsaXplIHRoZSBQcm9maWxpbmcgY29uc3RydWN0b3IsIHRoaXMgaXMgbGlrZWx5IGR1ZSB0byBhIG1pc3NpbmcgJ0RvY3VtZW50LVBvbGljeSc6ICdqcy1wcm9maWxpbmcnIGhlYWRlci5cIixcbiAgICAgICk7XG4gICAgICBkZWJ1Zy5sb2coJ1tQcm9maWxpbmddIERpc2FibGluZyBwcm9maWxpbmcgZm9yIGN1cnJlbnQgdXNlciBzZXNzaW9uLicpO1xuICAgIH1cbiAgICBQUk9GSUxJTkdfQ09OU1RSVUNUT1JfRkFJTEVEID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybjtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSBwcm9maWxlIHNob3VsZCBiZSBwcm9maWxlZC5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkUHJvZmlsZVNwYW4oc3Bhbikge1xuICAvLyBJZiBjb25zdHJ1Y3RvciBmYWlsZWQgb25jZSwgaXQgd2lsbCBhbHdheXMgZmFpbCwgc28gd2UgY2FuIGVhcmx5IHJldHVybi5cbiAgaWYgKFBST0ZJTElOR19DT05TVFJVQ1RPUl9GQUlMRUQpIHtcbiAgICBpZiAoREVCVUdfQlVJTEQpIHtcbiAgICAgIGRlYnVnLmxvZygnW1Byb2ZpbGluZ10gUHJvZmlsaW5nIGhhcyBiZWVuIGRpc2FibGVkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGN1cnJlbnQgdXNlciBzZXNzaW9uLicpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIXNwYW4uaXNSZWNvcmRpbmcoKSkge1xuICAgIGlmIChERUJVR19CVUlMRCkge1xuICAgICAgZGVidWcubG9nKCdbUHJvZmlsaW5nXSBEaXNjYXJkaW5nIHByb2ZpbGUgYmVjYXVzZSB0cmFuc2FjdGlvbiB3YXMgbm90IHNhbXBsZWQuJyk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuICBjb25zdCBvcHRpb25zID0gY2xpZW50Py5nZXRPcHRpb25zKCk7XG4gIGlmICghb3B0aW9ucykge1xuICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLmxvZygnW1Byb2ZpbGluZ10gUHJvZmlsaW5nIGRpc2FibGVkLCBubyBvcHRpb25zIGZvdW5kLicpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgcHJvZmlsZXNTYW1wbGVSYXRlIGlzIG5vdCBwYXJ0IG9mIHRoZSBicm93c2VyIG9wdGlvbnMgeWV0XG4gIGNvbnN0IHByb2ZpbGVzU2FtcGxlUmF0ZSA9IG9wdGlvbnMucHJvZmlsZXNTYW1wbGVSYXRlO1xuXG4gIC8vIFNpbmNlIHRoaXMgaXMgY29taW5nIGZyb20gdGhlIHVzZXIgKG9yIGZyb20gYSBmdW5jdGlvbiBwcm92aWRlZCBieSB0aGUgdXNlciksIHdobyBrbm93cyB3aGF0IHdlIG1pZ2h0IGdldC4gKFRoZVxuICAvLyBvbmx5IHZhbGlkIHZhbHVlcyBhcmUgYm9vbGVhbnMgb3IgbnVtYmVycyBiZXR3ZWVuIDAgYW5kIDEuKVxuICBpZiAoIWlzVmFsaWRTYW1wbGVSYXRlKHByb2ZpbGVzU2FtcGxlUmF0ZSkpIHtcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy53YXJuKCdbUHJvZmlsaW5nXSBEaXNjYXJkaW5nIHByb2ZpbGUgYmVjYXVzZSBvZiBpbnZhbGlkIHNhbXBsZSByYXRlLicpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5lZCAwIChvciBmYWxzZSksIG9yIGlmIGBwcm9maWxlU2FtcGxlUmF0ZWAgaXMgMCwgaXQncyBhIHNpZ24gdGhlIHByb2ZpbGUgc2hvdWxkIGJlIGRyb3BwZWRcbiAgaWYgKCFwcm9maWxlc1NhbXBsZVJhdGUpIHtcbiAgICBERUJVR19CVUlMRCAmJlxuICAgICAgZGVidWcubG9nKFxuICAgICAgICAnW1Byb2ZpbGluZ10gRGlzY2FyZGluZyBwcm9maWxlIGJlY2F1c2UgYSBuZWdhdGl2ZSBzYW1wbGluZyBkZWNpc2lvbiB3YXMgaW5oZXJpdGVkIG9yIHByb2ZpbGVTYW1wbGVSYXRlIGlzIHNldCB0byAwJyxcbiAgICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gTm93IHdlIHJvbGwgdGhlIGRpY2UuIE1hdGgucmFuZG9tIGlzIGluY2x1c2l2ZSBvZiAwLCBidXQgbm90IG9mIDEsIHNvIHN0cmljdCA8IGlzIHNhZmUgaGVyZS4gSW4gY2FzZSBzYW1wbGVSYXRlIGlzXG4gIC8vIGEgYm9vbGVhbiwgdGhlIDwgY29tcGFyaXNvbiB3aWxsIGNhdXNlIGl0IHRvIGJlIGF1dG9tYXRpY2FsbHkgY2FzdCB0byAxIGlmIGl0J3MgdHJ1ZSBhbmQgMCBpZiBpdCdzIGZhbHNlLlxuICBjb25zdCBzYW1wbGVkID0gcHJvZmlsZXNTYW1wbGVSYXRlID09PSB0cnVlID8gdHJ1ZSA6IE1hdGgucmFuZG9tKCkgPCBwcm9maWxlc1NhbXBsZVJhdGU7XG4gIC8vIENoZWNrIGlmIHdlIHNob3VsZCBzYW1wbGUgdGhpcyBwcm9maWxlXG4gIGlmICghc2FtcGxlZCkge1xuICAgIERFQlVHX0JVSUxEICYmXG4gICAgICBkZWJ1Zy5sb2coXG4gICAgICAgIGBbUHJvZmlsaW5nXSBEaXNjYXJkaW5nIHByb2ZpbGUgYmVjYXVzZSBpdCdzIG5vdCBpbmNsdWRlZCBpbiB0aGUgcmFuZG9tIHNhbXBsZSAoc2FtcGxpbmcgcmF0ZSA9ICR7TnVtYmVyKFxuICAgICAgICAgIHByb2ZpbGVzU2FtcGxlUmF0ZSxcbiAgICAgICAgKX0pYCxcbiAgICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHByb2ZpbGluZyBlbnZlbG9wZSBpdGVtLCBpZiB0aGUgcHJvZmlsZSBkb2VzIG5vdCBwYXNzIHZhbGlkYXRpb24sIHJldHVybnMgbnVsbC5cbiAqIEBwYXJhbSBldmVudFxuICogQHJldHVybnMge1Byb2ZpbGUgfCBudWxsfVxuICovXG5mdW5jdGlvbiBjcmVhdGVQcm9maWxpbmdFdmVudChcbiAgcHJvZmlsZV9pZCxcbiAgc3RhcnRfdGltZXN0YW1wLFxuICBwcm9maWxlLFxuICBldmVudCxcbikge1xuICBpZiAoIWlzVmFsaWRQcm9maWxlKHByb2ZpbGUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlUHJvZmlsZVBheWxvYWQocHJvZmlsZV9pZCwgc3RhcnRfdGltZXN0YW1wLCBwcm9maWxlLCBldmVudCk7XG59XG5cbi8vIFRPRE8gKHY4KTogV2UgbmVlZCB0byBvYnRhaW4gcHJvZmlsZSBpZHMgaW4gQHNlbnRyeS1pbnRlcm5hbC90cmFjaW5nLFxuLy8gYnV0IHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoaXMgbWFwIGJlY2F1c2UgaW1wb3J0aW5nIHRoaXMgbWFwIHdvdWxkXG4vLyBjYXVzZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuIFdlIG5lZWQgdG8gcmVzb2x2ZSB0aGlzIGluIHY4LlxuY29uc3QgUFJPRklMRV9NQVAgPSBuZXcgTWFwKCk7XG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIGdldEFjdGl2ZVByb2ZpbGVzQ291bnQoKSB7XG4gIHJldHVybiBQUk9GSUxFX01BUC5zaXplO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBwcm9maWxlIGZyb20gZ2xvYmFsIGNhY2hlIGFuZCByZW1vdmVzIGl0LlxuICovXG5mdW5jdGlvbiB0YWtlUHJvZmlsZUZyb21HbG9iYWxDYWNoZShwcm9maWxlX2lkKSB7XG4gIGNvbnN0IHByb2ZpbGUgPSBQUk9GSUxFX01BUC5nZXQocHJvZmlsZV9pZCk7XG4gIGlmIChwcm9maWxlKSB7XG4gICAgUFJPRklMRV9NQVAuZGVsZXRlKHByb2ZpbGVfaWQpO1xuICB9XG4gIHJldHVybiBwcm9maWxlO1xufVxuLyoqXG4gKiBBZGRzIHByb2ZpbGUgdG8gZ2xvYmFsIGNhY2hlIGFuZCBldmljdHMgdGhlIG9sZGVzdCBwcm9maWxlIGlmIHRoZSBjYWNoZSBpcyBmdWxsLlxuICovXG5mdW5jdGlvbiBhZGRQcm9maWxlVG9HbG9iYWxDYWNoZShwcm9maWxlX2lkLCBwcm9maWxlKSB7XG4gIFBST0ZJTEVfTUFQLnNldChwcm9maWxlX2lkLCBwcm9maWxlKTtcblxuICBpZiAoUFJPRklMRV9NQVAuc2l6ZSA+IDMwKSB7XG4gICAgY29uc3QgbGFzdCA9IFBST0ZJTEVfTUFQLmtleXMoKS5uZXh0KCkudmFsdWU7XG4gICAgUFJPRklMRV9NQVAuZGVsZXRlKGxhc3QpO1xuICB9XG59XG5cbmV4cG9ydCB7IE1BWF9QUk9GSUxFX0RVUkFUSU9OX01TLCBhZGRQcm9maWxlVG9HbG9iYWxDYWNoZSwgYWRkUHJvZmlsZXNUb0VudmVsb3BlLCBhcHBseURlYnVnTWV0YWRhdGEsIGNvbnZlcnRKU1NlbGZQcm9maWxlVG9TYW1wbGVkRm9ybWF0LCBjcmVhdGVQcm9maWxlUGF5bG9hZCwgY3JlYXRlUHJvZmlsaW5nRXZlbnQsIGVucmljaFdpdGhUaHJlYWRJbmZvcm1hdGlvbiwgZmluZFByb2ZpbGVkVHJhbnNhY3Rpb25zRnJvbUVudmVsb3BlLCBnZXRBY3RpdmVQcm9maWxlc0NvdW50LCBpc0F1dG9tYXRlZFBhZ2VMb2FkU3BhbiwgaXNWYWxpZFNhbXBsZVJhdGUsIHNob3VsZFByb2ZpbGVTcGFuLCBzdGFydEpTU2VsZlByb2ZpbGUsIHRha2VQcm9maWxlRnJvbUdsb2JhbENhY2hlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/profiling/utils.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/report-dialog.js":
/*!***************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/report-dialog.js ***!
  \***************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   showReportDialog: () => (/* binding */ showReportDialog)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/debug-build.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\");\n\n\n\n\n/**\n * Present the user with a report dialog.\n *\n * @param options Everything is optional, we try to fetch all info need from the current scope.\n */\nfunction showReportDialog(options = {}) {\n  const optionalDocument = _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.document ;\n  const injectionPoint = optionalDocument?.head || optionalDocument?.body;\n\n  // doesn't work without a document (React Native)\n  if (!injectionPoint) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.error('[showReportDialog] Global document not defined');\n    return;\n  }\n\n  const scope = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  const dsn = client?.getDsn();\n\n  if (!dsn) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.error('[showReportDialog] DSN not configured');\n    return;\n  }\n\n  const mergedOptions = {\n    ...options,\n    user: {\n      ...scope.getUser(),\n      ...options.user,\n    },\n    eventId: options.eventId || (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.lastEventId)(),\n  };\n\n  const script = _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.document.createElement('script');\n  script.async = true;\n  script.crossOrigin = 'anonymous';\n  script.src = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getReportDialogEndpoint)(dsn, mergedOptions);\n\n  const { onLoad, onClose } = mergedOptions;\n\n  if (onLoad) {\n    script.onload = onLoad;\n  }\n\n  if (onClose) {\n    const reportDialogClosedMessageHandler = (event) => {\n      if (event.data === '__sentry_reportdialog_closed__') {\n        try {\n          onClose();\n        } finally {\n          _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.removeEventListener('message', reportDialogClosedMessageHandler);\n        }\n      }\n    };\n    _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.addEventListener('message', reportDialogClosedMessageHandler);\n  }\n\n  injectionPoint.appendChild(script);\n}\n\n\n//# sourceMappingURL=report-dialog.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9yZXBvcnQtZGlhbG9nLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBdUc7QUFDeEQ7QUFDVDs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QywyQkFBMkIsK0NBQU07QUFDakM7O0FBRUE7QUFDQTtBQUNBLElBQUksd0RBQVcsSUFBSSwrQ0FBSztBQUN4QjtBQUNBOztBQUVBLGdCQUFnQiw2REFBZTtBQUMvQixpQkFBaUIsdURBQVM7QUFDMUI7O0FBRUE7QUFDQSxJQUFJLHdEQUFXLElBQUksK0NBQUs7QUFDeEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyx5REFBVztBQUMzQzs7QUFFQSxpQkFBaUIsK0NBQU07QUFDdkI7QUFDQTtBQUNBLGVBQWUscUVBQXVCOztBQUV0QyxVQUFVLGtCQUFrQjs7QUFFNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsVUFBVSwrQ0FBTTtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxJQUFJLCtDQUFNO0FBQ1Y7O0FBRUE7QUFDQTs7QUFFNEI7QUFDNUIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vcmVwb3J0LWRpYWxvZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWJ1ZywgZ2V0Q3VycmVudFNjb3BlLCBnZXRDbGllbnQsIGxhc3RFdmVudElkLCBnZXRSZXBvcnREaWFsb2dFbmRwb2ludCB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4vZGVidWctYnVpbGQuanMnO1xuaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnLi9oZWxwZXJzLmpzJztcblxuLyoqXG4gKiBQcmVzZW50IHRoZSB1c2VyIHdpdGggYSByZXBvcnQgZGlhbG9nLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIEV2ZXJ5dGhpbmcgaXMgb3B0aW9uYWwsIHdlIHRyeSB0byBmZXRjaCBhbGwgaW5mbyBuZWVkIGZyb20gdGhlIGN1cnJlbnQgc2NvcGUuXG4gKi9cbmZ1bmN0aW9uIHNob3dSZXBvcnREaWFsb2cob3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbmFsRG9jdW1lbnQgPSBXSU5ET1cuZG9jdW1lbnQgO1xuICBjb25zdCBpbmplY3Rpb25Qb2ludCA9IG9wdGlvbmFsRG9jdW1lbnQ/LmhlYWQgfHwgb3B0aW9uYWxEb2N1bWVudD8uYm9keTtcblxuICAvLyBkb2Vzbid0IHdvcmsgd2l0aG91dCBhIGRvY3VtZW50IChSZWFjdCBOYXRpdmUpXG4gIGlmICghaW5qZWN0aW9uUG9pbnQpIHtcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5lcnJvcignW3Nob3dSZXBvcnREaWFsb2ddIEdsb2JhbCBkb2N1bWVudCBub3QgZGVmaW5lZCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNjb3BlID0gZ2V0Q3VycmVudFNjb3BlKCk7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuICBjb25zdCBkc24gPSBjbGllbnQ/LmdldERzbigpO1xuXG4gIGlmICghZHNuKSB7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcuZXJyb3IoJ1tzaG93UmVwb3J0RGlhbG9nXSBEU04gbm90IGNvbmZpZ3VyZWQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgdXNlcjoge1xuICAgICAgLi4uc2NvcGUuZ2V0VXNlcigpLFxuICAgICAgLi4ub3B0aW9ucy51c2VyLFxuICAgIH0sXG4gICAgZXZlbnRJZDogb3B0aW9ucy5ldmVudElkIHx8IGxhc3RFdmVudElkKCksXG4gIH07XG5cbiAgY29uc3Qgc2NyaXB0ID0gV0lORE9XLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuICBzY3JpcHQuY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJztcbiAgc2NyaXB0LnNyYyA9IGdldFJlcG9ydERpYWxvZ0VuZHBvaW50KGRzbiwgbWVyZ2VkT3B0aW9ucyk7XG5cbiAgY29uc3QgeyBvbkxvYWQsIG9uQ2xvc2UgfSA9IG1lcmdlZE9wdGlvbnM7XG5cbiAgaWYgKG9uTG9hZCkge1xuICAgIHNjcmlwdC5vbmxvYWQgPSBvbkxvYWQ7XG4gIH1cblxuICBpZiAob25DbG9zZSkge1xuICAgIGNvbnN0IHJlcG9ydERpYWxvZ0Nsb3NlZE1lc3NhZ2VIYW5kbGVyID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQuZGF0YSA9PT0gJ19fc2VudHJ5X3JlcG9ydGRpYWxvZ19jbG9zZWRfXycpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvbkNsb3NlKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgV0lORE9XLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCByZXBvcnREaWFsb2dDbG9zZWRNZXNzYWdlSGFuZGxlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIFdJTkRPVy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgcmVwb3J0RGlhbG9nQ2xvc2VkTWVzc2FnZUhhbmRsZXIpO1xuICB9XG5cbiAgaW5qZWN0aW9uUG9pbnQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbn1cblxuZXhwb3J0IHsgc2hvd1JlcG9ydERpYWxvZyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVwb3J0LWRpYWxvZy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/report-dialog.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/sdk.js":
/*!*****************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/sdk.js ***!
  \*****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   forceLoad: () => (/* binding */ forceLoad),\n/* harmony export */   getDefaultIntegrations: () => (/* binding */ getDefaultIntegrations),\n/* harmony export */   init: () => (/* binding */ init),\n/* harmony export */   onLoad: () => (/* binding */ onLoad)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _client_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./client.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/client.js\");\n/* harmony import */ var _integrations_breadcrumbs_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./integrations/breadcrumbs.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/breadcrumbs.js\");\n/* harmony import */ var _integrations_browserapierrors_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./integrations/browserapierrors.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/browserapierrors.js\");\n/* harmony import */ var _integrations_browsersession_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./integrations/browsersession.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/browsersession.js\");\n/* harmony import */ var _integrations_globalhandlers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./integrations/globalhandlers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/globalhandlers.js\");\n/* harmony import */ var _integrations_httpcontext_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./integrations/httpcontext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/httpcontext.js\");\n/* harmony import */ var _integrations_linkederrors_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./integrations/linkederrors.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/linkederrors.js\");\n/* harmony import */ var _stack_parsers_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./stack-parsers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/stack-parsers.js\");\n/* harmony import */ var _transports_fetch_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./transports/fetch.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/transports/fetch.js\");\n/* harmony import */ var _utils_detectBrowserExtension_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utils/detectBrowserExtension.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/utils/detectBrowserExtension.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n/** Get the default integrations for the browser SDK. */\nfunction getDefaultIntegrations(_options) {\n  /**\n   * Note: Please make sure this stays in sync with Angular SDK, which re-exports\n   * `getDefaultIntegrations` but with an adjusted set of integrations.\n   */\n  return [\n    // TODO(v10): Replace with `eventFiltersIntegration` once we remove the deprecated `inboundFiltersIntegration`\n    // eslint-disable-next-line deprecation/deprecation\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.inboundFiltersIntegration)(),\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.functionToStringIntegration)(),\n    (0,_integrations_browserapierrors_js__WEBPACK_IMPORTED_MODULE_3__.browserApiErrorsIntegration)(),\n    (0,_integrations_breadcrumbs_js__WEBPACK_IMPORTED_MODULE_2__.breadcrumbsIntegration)(),\n    (0,_integrations_globalhandlers_js__WEBPACK_IMPORTED_MODULE_5__.globalHandlersIntegration)(),\n    (0,_integrations_linkederrors_js__WEBPACK_IMPORTED_MODULE_7__.linkedErrorsIntegration)(),\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.dedupeIntegration)(),\n    (0,_integrations_httpcontext_js__WEBPACK_IMPORTED_MODULE_6__.httpContextIntegration)(),\n    (0,_integrations_browsersession_js__WEBPACK_IMPORTED_MODULE_4__.browserSessionIntegration)(),\n  ];\n}\n\n/**\n * The Sentry Browser SDK Client.\n *\n * To use this SDK, call the {@link init} function as early as possible when\n * loading the web page. To set context information or send manual events, use\n * the provided methods.\n *\n * @example\n *\n * ```\n *\n * import { init } from '@sentry/browser';\n *\n * init({\n *   dsn: '__DSN__',\n *   // ...\n * });\n * ```\n *\n * @example\n * ```\n *\n * import { addBreadcrumb } from '@sentry/browser';\n * addBreadcrumb({\n *   message: 'My Breadcrumb',\n *   // ...\n * });\n * ```\n *\n * @example\n *\n * ```\n *\n * import * as Sentry from '@sentry/browser';\n * Sentry.captureMessage('Hello, world!');\n * Sentry.captureException(new Error('Good bye'));\n * Sentry.captureEvent({\n *   message: 'Manual',\n *   stacktrace: [\n *     // ...\n *   ],\n * });\n * ```\n *\n * @see {@link BrowserOptions} for documentation on configuration options.\n */\nfunction init(options = {}) {\n  const shouldDisableBecauseIsBrowserExtenstion =\n    !options.skipBrowserExtensionCheck && (0,_utils_detectBrowserExtension_js__WEBPACK_IMPORTED_MODULE_10__.checkAndWarnIfIsEmbeddedBrowserExtension)();\n\n  const clientOptions = {\n    ...options,\n    enabled: shouldDisableBecauseIsBrowserExtenstion ? false : options.enabled,\n    stackParser: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.stackParserFromStackParserOptions)(options.stackParser || _stack_parsers_js__WEBPACK_IMPORTED_MODULE_8__.defaultStackParser),\n    integrations: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getIntegrationsToSetup)({\n      integrations: options.integrations,\n      defaultIntegrations:\n        options.defaultIntegrations == null ? getDefaultIntegrations() : options.defaultIntegrations,\n    }),\n    transport: options.transport || _transports_fetch_js__WEBPACK_IMPORTED_MODULE_9__.makeFetchTransport,\n  };\n  return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.initAndBind)(_client_js__WEBPACK_IMPORTED_MODULE_1__.BrowserClient, clientOptions);\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nfunction forceLoad() {\n  // Noop\n}\n\n/**\n * This function is here to be API compatible with the loader.\n * @hidden\n */\nfunction onLoad(callback) {\n  callback();\n}\n\n\n//# sourceMappingURL=sdk.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9zZGsuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQWlMO0FBQ3JJO0FBQzJCO0FBQ1U7QUFDSjtBQUNBO0FBQ047QUFDRTtBQUNqQjtBQUNHO0FBQ2tDOztBQUU3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHVFQUF5QjtBQUM3QixJQUFJLHlFQUEyQjtBQUMvQixJQUFJLDhGQUEyQjtBQUMvQixJQUFJLG9GQUFzQjtBQUMxQixJQUFJLDBGQUF5QjtBQUM3QixJQUFJLHNGQUF1QjtBQUMzQixJQUFJLCtEQUFpQjtBQUNyQixJQUFJLG9GQUFzQjtBQUMxQixJQUFJLDBGQUF5QjtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixZQUFZO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGdCQUFnQjtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsU0FBUyxzQkFBc0I7QUFDL0I7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQSwwQ0FBMEMsMkdBQXdDOztBQUVsRjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsK0VBQWlDLHdCQUF3QixpRUFBa0I7QUFDNUYsa0JBQWtCLG9FQUFzQjtBQUN4QztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsb0NBQW9DLG9FQUFrQjtBQUN0RDtBQUNBLFNBQVMseURBQVcsQ0FBQyxxREFBYTtBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFMkQ7QUFDM0QiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vc2RrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluYm91bmRGaWx0ZXJzSW50ZWdyYXRpb24sIGZ1bmN0aW9uVG9TdHJpbmdJbnRlZ3JhdGlvbiwgZGVkdXBlSW50ZWdyYXRpb24sIGdldEludGVncmF0aW9uc1RvU2V0dXAsIHN0YWNrUGFyc2VyRnJvbVN0YWNrUGFyc2VyT3B0aW9ucywgaW5pdEFuZEJpbmQgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgQnJvd3NlckNsaWVudCB9IGZyb20gJy4vY2xpZW50LmpzJztcbmltcG9ydCB7IGJyZWFkY3J1bWJzSW50ZWdyYXRpb24gfSBmcm9tICcuL2ludGVncmF0aW9ucy9icmVhZGNydW1icy5qcyc7XG5pbXBvcnQgeyBicm93c2VyQXBpRXJyb3JzSW50ZWdyYXRpb24gfSBmcm9tICcuL2ludGVncmF0aW9ucy9icm93c2VyYXBpZXJyb3JzLmpzJztcbmltcG9ydCB7IGJyb3dzZXJTZXNzaW9uSW50ZWdyYXRpb24gfSBmcm9tICcuL2ludGVncmF0aW9ucy9icm93c2Vyc2Vzc2lvbi5qcyc7XG5pbXBvcnQgeyBnbG9iYWxIYW5kbGVyc0ludGVncmF0aW9uIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbnMvZ2xvYmFsaGFuZGxlcnMuanMnO1xuaW1wb3J0IHsgaHR0cENvbnRleHRJbnRlZ3JhdGlvbiB9IGZyb20gJy4vaW50ZWdyYXRpb25zL2h0dHBjb250ZXh0LmpzJztcbmltcG9ydCB7IGxpbmtlZEVycm9yc0ludGVncmF0aW9uIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbnMvbGlua2VkZXJyb3JzLmpzJztcbmltcG9ydCB7IGRlZmF1bHRTdGFja1BhcnNlciB9IGZyb20gJy4vc3RhY2stcGFyc2Vycy5qcyc7XG5pbXBvcnQgeyBtYWtlRmV0Y2hUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydHMvZmV0Y2guanMnO1xuaW1wb3J0IHsgY2hlY2tBbmRXYXJuSWZJc0VtYmVkZGVkQnJvd3NlckV4dGVuc2lvbiB9IGZyb20gJy4vdXRpbHMvZGV0ZWN0QnJvd3NlckV4dGVuc2lvbi5qcyc7XG5cbi8qKiBHZXQgdGhlIGRlZmF1bHQgaW50ZWdyYXRpb25zIGZvciB0aGUgYnJvd3NlciBTREsuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0SW50ZWdyYXRpb25zKF9vcHRpb25zKSB7XG4gIC8qKlxuICAgKiBOb3RlOiBQbGVhc2UgbWFrZSBzdXJlIHRoaXMgc3RheXMgaW4gc3luYyB3aXRoIEFuZ3VsYXIgU0RLLCB3aGljaCByZS1leHBvcnRzXG4gICAqIGBnZXREZWZhdWx0SW50ZWdyYXRpb25zYCBidXQgd2l0aCBhbiBhZGp1c3RlZCBzZXQgb2YgaW50ZWdyYXRpb25zLlxuICAgKi9cbiAgcmV0dXJuIFtcbiAgICAvLyBUT0RPKHYxMCk6IFJlcGxhY2Ugd2l0aCBgZXZlbnRGaWx0ZXJzSW50ZWdyYXRpb25gIG9uY2Ugd2UgcmVtb3ZlIHRoZSBkZXByZWNhdGVkIGBpbmJvdW5kRmlsdGVyc0ludGVncmF0aW9uYFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIGluYm91bmRGaWx0ZXJzSW50ZWdyYXRpb24oKSxcbiAgICBmdW5jdGlvblRvU3RyaW5nSW50ZWdyYXRpb24oKSxcbiAgICBicm93c2VyQXBpRXJyb3JzSW50ZWdyYXRpb24oKSxcbiAgICBicmVhZGNydW1ic0ludGVncmF0aW9uKCksXG4gICAgZ2xvYmFsSGFuZGxlcnNJbnRlZ3JhdGlvbigpLFxuICAgIGxpbmtlZEVycm9yc0ludGVncmF0aW9uKCksXG4gICAgZGVkdXBlSW50ZWdyYXRpb24oKSxcbiAgICBodHRwQ29udGV4dEludGVncmF0aW9uKCksXG4gICAgYnJvd3NlclNlc3Npb25JbnRlZ3JhdGlvbigpLFxuICBdO1xufVxuXG4vKipcbiAqIFRoZSBTZW50cnkgQnJvd3NlciBTREsgQ2xpZW50LlxuICpcbiAqIFRvIHVzZSB0aGlzIFNESywgY2FsbCB0aGUge0BsaW5rIGluaXR9IGZ1bmN0aW9uIGFzIGVhcmx5IGFzIHBvc3NpYmxlIHdoZW5cbiAqIGxvYWRpbmcgdGhlIHdlYiBwYWdlLiBUbyBzZXQgY29udGV4dCBpbmZvcm1hdGlvbiBvciBzZW5kIG1hbnVhbCBldmVudHMsIHVzZVxuICogdGhlIHByb3ZpZGVkIG1ldGhvZHMuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBcbiAqXG4gKiBpbXBvcnQgeyBpbml0IH0gZnJvbSAnQHNlbnRyeS9icm93c2VyJztcbiAqXG4gKiBpbml0KHtcbiAqICAgZHNuOiAnX19EU05fXycsXG4gKiAgIC8vIC4uLlxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgXG4gKlxuICogaW1wb3J0IHsgYWRkQnJlYWRjcnVtYiB9IGZyb20gJ0BzZW50cnkvYnJvd3Nlcic7XG4gKiBhZGRCcmVhZGNydW1iKHtcbiAqICAgbWVzc2FnZTogJ015IEJyZWFkY3J1bWInLFxuICogICAvLyAuLi5cbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBcbiAqXG4gKiBpbXBvcnQgKiBhcyBTZW50cnkgZnJvbSAnQHNlbnRyeS9icm93c2VyJztcbiAqIFNlbnRyeS5jYXB0dXJlTWVzc2FnZSgnSGVsbG8sIHdvcmxkIScpO1xuICogU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24obmV3IEVycm9yKCdHb29kIGJ5ZScpKTtcbiAqIFNlbnRyeS5jYXB0dXJlRXZlbnQoe1xuICogICBtZXNzYWdlOiAnTWFudWFsJyxcbiAqICAgc3RhY2t0cmFjZTogW1xuICogICAgIC8vIC4uLlxuICogICBdLFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBCcm93c2VyT3B0aW9uc30gZm9yIGRvY3VtZW50YXRpb24gb24gY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICovXG5mdW5jdGlvbiBpbml0KG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBzaG91bGREaXNhYmxlQmVjYXVzZUlzQnJvd3NlckV4dGVuc3Rpb24gPVxuICAgICFvcHRpb25zLnNraXBCcm93c2VyRXh0ZW5zaW9uQ2hlY2sgJiYgY2hlY2tBbmRXYXJuSWZJc0VtYmVkZGVkQnJvd3NlckV4dGVuc2lvbigpO1xuXG4gIGNvbnN0IGNsaWVudE9wdGlvbnMgPSB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbmFibGVkOiBzaG91bGREaXNhYmxlQmVjYXVzZUlzQnJvd3NlckV4dGVuc3Rpb24gPyBmYWxzZSA6IG9wdGlvbnMuZW5hYmxlZCxcbiAgICBzdGFja1BhcnNlcjogc3RhY2tQYXJzZXJGcm9tU3RhY2tQYXJzZXJPcHRpb25zKG9wdGlvbnMuc3RhY2tQYXJzZXIgfHwgZGVmYXVsdFN0YWNrUGFyc2VyKSxcbiAgICBpbnRlZ3JhdGlvbnM6IGdldEludGVncmF0aW9uc1RvU2V0dXAoe1xuICAgICAgaW50ZWdyYXRpb25zOiBvcHRpb25zLmludGVncmF0aW9ucyxcbiAgICAgIGRlZmF1bHRJbnRlZ3JhdGlvbnM6XG4gICAgICAgIG9wdGlvbnMuZGVmYXVsdEludGVncmF0aW9ucyA9PSBudWxsID8gZ2V0RGVmYXVsdEludGVncmF0aW9ucygpIDogb3B0aW9ucy5kZWZhdWx0SW50ZWdyYXRpb25zLFxuICAgIH0pLFxuICAgIHRyYW5zcG9ydDogb3B0aW9ucy50cmFuc3BvcnQgfHwgbWFrZUZldGNoVHJhbnNwb3J0LFxuICB9O1xuICByZXR1cm4gaW5pdEFuZEJpbmQoQnJvd3NlckNsaWVudCwgY2xpZW50T3B0aW9ucyk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBoZXJlIHRvIGJlIEFQSSBjb21wYXRpYmxlIHdpdGggdGhlIGxvYWRlci5cbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gZm9yY2VMb2FkKCkge1xuICAvLyBOb29wXG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBoZXJlIHRvIGJlIEFQSSBjb21wYXRpYmxlIHdpdGggdGhlIGxvYWRlci5cbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gb25Mb2FkKGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrKCk7XG59XG5cbmV4cG9ydCB7IGZvcmNlTG9hZCwgZ2V0RGVmYXVsdEludGVncmF0aW9ucywgaW5pdCwgb25Mb2FkIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZGsuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/sdk.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/stack-parsers.js":
/*!***************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/stack-parsers.js ***!
  \***************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   chromeStackLineParser: () => (/* binding */ chromeStackLineParser),\n/* harmony export */   defaultStackLineParsers: () => (/* binding */ defaultStackLineParsers),\n/* harmony export */   defaultStackParser: () => (/* binding */ defaultStackParser),\n/* harmony export */   geckoStackLineParser: () => (/* binding */ geckoStackLineParser),\n/* harmony export */   opera10StackLineParser: () => (/* binding */ opera10StackLineParser),\n/* harmony export */   opera11StackLineParser: () => (/* binding */ opera11StackLineParser),\n/* harmony export */   winjsStackLineParser: () => (/* binding */ winjsStackLineParser)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\nconst OPERA10_PRIORITY = 10;\nconst OPERA11_PRIORITY = 20;\nconst CHROME_PRIORITY = 30;\nconst WINJS_PRIORITY = 40;\nconst GECKO_PRIORITY = 50;\n\nfunction createFrame(filename, func, lineno, colno) {\n  const frame = {\n    filename,\n    function: func === '<anonymous>' ? _sentry_core__WEBPACK_IMPORTED_MODULE_0__.UNKNOWN_FUNCTION : func,\n    in_app: true, // All browser frames are considered in_app\n  };\n\n  if (lineno !== undefined) {\n    frame.lineno = lineno;\n  }\n\n  if (colno !== undefined) {\n    frame.colno = colno;\n  }\n\n  return frame;\n}\n\n// This regex matches frames that have no function name (ie. are at the top level of a module).\n// For example \"at http://localhost:5000//script.js:1:126\"\n// Frames _with_ function names usually look as follows: \"at commitLayoutEffects (react-dom.development.js:23426:1)\"\nconst chromeRegexNoFnName = /^\\s*at (\\S+?)(?::(\\d+))(?::(\\d+))\\s*$/i;\n\n// This regex matches all the frames that have a function name.\nconst chromeRegex =\n  /^\\s*at (?:(.+?\\)(?: \\[.+\\])?|.*?) ?\\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n\nconst chromeEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\n// Chromium based browsers: Chrome, Brave, new Opera, new Edge\n// We cannot call this variable `chrome` because it can conflict with global `chrome` variable in certain environments\n// See: https://github.com/getsentry/sentry-javascript/issues/6880\nconst chromeStackParserFn = line => {\n  // If the stack line has no function name, we need to parse it differently\n  const noFnParts = chromeRegexNoFnName.exec(line) ;\n\n  if (noFnParts) {\n    const [, filename, line, col] = noFnParts;\n    return createFrame(filename, _sentry_core__WEBPACK_IMPORTED_MODULE_0__.UNKNOWN_FUNCTION, +line, +col);\n  }\n\n  const parts = chromeRegex.exec(line) ;\n\n  if (parts) {\n    const isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n    if (isEval) {\n      const subMatch = chromeEvalRegex.exec(parts[2]) ;\n\n      if (subMatch) {\n        // throw out eval line/column and use top-most line/column number\n        parts[2] = subMatch[1]; // url\n        parts[3] = subMatch[2]; // line\n        parts[4] = subMatch[3]; // column\n      }\n    }\n\n    // Kamil: One more hack won't hurt us right? Understanding and adding more rules on top of these regexps right now\n    // would be way too time consuming. (TODO: Rewrite whole RegExp to be more readable)\n    const [func, filename] = extractSafariExtensionDetails(parts[1] || _sentry_core__WEBPACK_IMPORTED_MODULE_0__.UNKNOWN_FUNCTION, parts[2]);\n\n    return createFrame(filename, func, parts[3] ? +parts[3] : undefined, parts[4] ? +parts[4] : undefined);\n  }\n\n  return;\n};\n\nconst chromeStackLineParser = [CHROME_PRIORITY, chromeStackParserFn];\n\n// gecko regex: `(?:bundle|\\d+\\.js)`: `bundle` is for react native, `\\d+\\.js` also but specifically for ram bundles because it\n// generates filenames without a prefix like `file://` the filenames in the stacktrace are just 42.js\n// We need this specific case for now because we want no other regex to match.\nconst geckoREgex =\n  /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:[-a-z]+)?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nconst geckoEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nconst gecko = line => {\n  const parts = geckoREgex.exec(line) ;\n\n  if (parts) {\n    const isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n    if (isEval) {\n      const subMatch = geckoEvalRegex.exec(parts[3]) ;\n\n      if (subMatch) {\n        // throw out eval line/column and use top-most line number\n        parts[1] = parts[1] || 'eval';\n        parts[3] = subMatch[1];\n        parts[4] = subMatch[2];\n        parts[5] = ''; // no column when eval\n      }\n    }\n\n    let filename = parts[3];\n    let func = parts[1] || _sentry_core__WEBPACK_IMPORTED_MODULE_0__.UNKNOWN_FUNCTION;\n    [func, filename] = extractSafariExtensionDetails(func, filename);\n\n    return createFrame(filename, func, parts[4] ? +parts[4] : undefined, parts[5] ? +parts[5] : undefined);\n  }\n\n  return;\n};\n\nconst geckoStackLineParser = [GECKO_PRIORITY, gecko];\n\nconst winjsRegex = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:[-a-z]+):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nconst winjs = line => {\n  const parts = winjsRegex.exec(line) ;\n\n  return parts\n    ? createFrame(parts[2], parts[1] || _sentry_core__WEBPACK_IMPORTED_MODULE_0__.UNKNOWN_FUNCTION, +parts[3], parts[4] ? +parts[4] : undefined)\n    : undefined;\n};\n\nconst winjsStackLineParser = [WINJS_PRIORITY, winjs];\n\nconst opera10Regex = / line (\\d+).*script (?:in )?(\\S+)(?:: in function (\\S+))?$/i;\n\nconst opera10 = line => {\n  const parts = opera10Regex.exec(line) ;\n  return parts ? createFrame(parts[2], parts[3] || _sentry_core__WEBPACK_IMPORTED_MODULE_0__.UNKNOWN_FUNCTION, +parts[1]) : undefined;\n};\n\nconst opera10StackLineParser = [OPERA10_PRIORITY, opera10];\n\nconst opera11Regex =\n  / line (\\d+), column (\\d+)\\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\\(.*\\))? in (.*):\\s*$/i;\n\nconst opera11 = line => {\n  const parts = opera11Regex.exec(line) ;\n  return parts ? createFrame(parts[5], parts[3] || parts[4] || _sentry_core__WEBPACK_IMPORTED_MODULE_0__.UNKNOWN_FUNCTION, +parts[1], +parts[2]) : undefined;\n};\n\nconst opera11StackLineParser = [OPERA11_PRIORITY, opera11];\n\nconst defaultStackLineParsers = [chromeStackLineParser, geckoStackLineParser];\n\nconst defaultStackParser = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.createStackParser)(...defaultStackLineParsers);\n\n/**\n * Safari web extensions, starting version unknown, can produce \"frames-only\" stacktraces.\n * What it means, is that instead of format like:\n *\n * Error: wat\n *   at function@url:row:col\n *   at function@url:row:col\n *   at function@url:row:col\n *\n * it produces something like:\n *\n *   function@url:row:col\n *   function@url:row:col\n *   function@url:row:col\n *\n * Because of that, it won't be captured by `chrome` RegExp and will fall into `Gecko` branch.\n * This function is extracted so that we can use it in both places without duplicating the logic.\n * Unfortunately \"just\" changing RegExp is too complicated now and making it pass all tests\n * and fix this case seems like an impossible, or at least way too time-consuming task.\n */\nconst extractSafariExtensionDetails = (func, filename) => {\n  const isSafariExtension = func.indexOf('safari-extension') !== -1;\n  const isSafariWebExtension = func.indexOf('safari-web-extension') !== -1;\n\n  return isSafariExtension || isSafariWebExtension\n    ? [\n        func.indexOf('@') !== -1 ? (func.split('@')[0] ) : _sentry_core__WEBPACK_IMPORTED_MODULE_0__.UNKNOWN_FUNCTION,\n        isSafariExtension ? `safari-extension:${filename}` : `safari-web-extension:${filename}`,\n      ]\n    : [func, filename];\n};\n\n\n//# sourceMappingURL=stack-parsers.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS9zdGFjay1wYXJzZXJzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQW1FOztBQUVuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QywwREFBZ0I7QUFDdkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUNBQWlDLDBEQUFnQjtBQUNqRDs7QUFFQTs7QUFFQTtBQUNBLCtEQUErRDs7QUFFL0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDLGdDQUFnQztBQUNoQyxnQ0FBZ0M7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUVBQXVFLDBEQUFnQjs7QUFFdkY7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQiwwREFBZ0I7QUFDM0M7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx3Q0FBd0MsMERBQWdCO0FBQ3hEO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLG1EQUFtRCwwREFBZ0I7QUFDbkU7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0RBQStELDBEQUFnQjtBQUMvRTs7QUFFQTs7QUFFQTs7QUFFQSwyQkFBMkIsK0RBQWlCOztBQUU1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyREFBMkQsMERBQWdCO0FBQzNFLGdEQUFnRCxTQUFTLDRCQUE0QixTQUFTO0FBQzlGO0FBQ0E7QUFDQTs7QUFFMEs7QUFDMUsiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vc3RhY2stcGFyc2Vycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVTdGFja1BhcnNlciwgVU5LTk9XTl9GVU5DVElPTiB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5cbmNvbnN0IE9QRVJBMTBfUFJJT1JJVFkgPSAxMDtcbmNvbnN0IE9QRVJBMTFfUFJJT1JJVFkgPSAyMDtcbmNvbnN0IENIUk9NRV9QUklPUklUWSA9IDMwO1xuY29uc3QgV0lOSlNfUFJJT1JJVFkgPSA0MDtcbmNvbnN0IEdFQ0tPX1BSSU9SSVRZID0gNTA7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZyYW1lKGZpbGVuYW1lLCBmdW5jLCBsaW5lbm8sIGNvbG5vKSB7XG4gIGNvbnN0IGZyYW1lID0ge1xuICAgIGZpbGVuYW1lLFxuICAgIGZ1bmN0aW9uOiBmdW5jID09PSAnPGFub255bW91cz4nID8gVU5LTk9XTl9GVU5DVElPTiA6IGZ1bmMsXG4gICAgaW5fYXBwOiB0cnVlLCAvLyBBbGwgYnJvd3NlciBmcmFtZXMgYXJlIGNvbnNpZGVyZWQgaW5fYXBwXG4gIH07XG5cbiAgaWYgKGxpbmVubyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZnJhbWUubGluZW5vID0gbGluZW5vO1xuICB9XG5cbiAgaWYgKGNvbG5vICE9PSB1bmRlZmluZWQpIHtcbiAgICBmcmFtZS5jb2xubyA9IGNvbG5vO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG4vLyBUaGlzIHJlZ2V4IG1hdGNoZXMgZnJhbWVzIHRoYXQgaGF2ZSBubyBmdW5jdGlvbiBuYW1lIChpZS4gYXJlIGF0IHRoZSB0b3AgbGV2ZWwgb2YgYSBtb2R1bGUpLlxuLy8gRm9yIGV4YW1wbGUgXCJhdCBodHRwOi8vbG9jYWxob3N0OjUwMDAvL3NjcmlwdC5qczoxOjEyNlwiXG4vLyBGcmFtZXMgX3dpdGhfIGZ1bmN0aW9uIG5hbWVzIHVzdWFsbHkgbG9vayBhcyBmb2xsb3dzOiBcImF0IGNvbW1pdExheW91dEVmZmVjdHMgKHJlYWN0LWRvbS5kZXZlbG9wbWVudC5qczoyMzQyNjoxKVwiXG5jb25zdCBjaHJvbWVSZWdleE5vRm5OYW1lID0gL15cXHMqYXQgKFxcUys/KSg/OjooXFxkKykpKD86OihcXGQrKSlcXHMqJC9pO1xuXG4vLyBUaGlzIHJlZ2V4IG1hdGNoZXMgYWxsIHRoZSBmcmFtZXMgdGhhdCBoYXZlIGEgZnVuY3Rpb24gbmFtZS5cbmNvbnN0IGNocm9tZVJlZ2V4ID1cbiAgL15cXHMqYXQgKD86KC4rP1xcKSg/OiBcXFsuK1xcXSk/fC4qPykgP1xcKCg/OmFkZHJlc3MgYXQgKT8pPyg/OmFzeW5jICk/KCg/Ojxhbm9ueW1vdXM+fFstYS16XSs6fC4qYnVuZGxlfFxcLyk/Lio/KSg/OjooXFxkKykpPyg/OjooXFxkKykpP1xcKT9cXHMqJC9pO1xuXG5jb25zdCBjaHJvbWVFdmFsUmVnZXggPSAvXFwoKFxcUyopKD86OihcXGQrKSkoPzo6KFxcZCspKVxcKS87XG5cbi8vIENocm9taXVtIGJhc2VkIGJyb3dzZXJzOiBDaHJvbWUsIEJyYXZlLCBuZXcgT3BlcmEsIG5ldyBFZGdlXG4vLyBXZSBjYW5ub3QgY2FsbCB0aGlzIHZhcmlhYmxlIGBjaHJvbWVgIGJlY2F1c2UgaXQgY2FuIGNvbmZsaWN0IHdpdGggZ2xvYmFsIGBjaHJvbWVgIHZhcmlhYmxlIGluIGNlcnRhaW4gZW52aXJvbm1lbnRzXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzY4ODBcbmNvbnN0IGNocm9tZVN0YWNrUGFyc2VyRm4gPSBsaW5lID0+IHtcbiAgLy8gSWYgdGhlIHN0YWNrIGxpbmUgaGFzIG5vIGZ1bmN0aW9uIG5hbWUsIHdlIG5lZWQgdG8gcGFyc2UgaXQgZGlmZmVyZW50bHlcbiAgY29uc3Qgbm9GblBhcnRzID0gY2hyb21lUmVnZXhOb0ZuTmFtZS5leGVjKGxpbmUpIDtcblxuICBpZiAobm9GblBhcnRzKSB7XG4gICAgY29uc3QgWywgZmlsZW5hbWUsIGxpbmUsIGNvbF0gPSBub0ZuUGFydHM7XG4gICAgcmV0dXJuIGNyZWF0ZUZyYW1lKGZpbGVuYW1lLCBVTktOT1dOX0ZVTkNUSU9OLCArbGluZSwgK2NvbCk7XG4gIH1cblxuICBjb25zdCBwYXJ0cyA9IGNocm9tZVJlZ2V4LmV4ZWMobGluZSkgO1xuXG4gIGlmIChwYXJ0cykge1xuICAgIGNvbnN0IGlzRXZhbCA9IHBhcnRzWzJdICYmIHBhcnRzWzJdLmluZGV4T2YoJ2V2YWwnKSA9PT0gMDsgLy8gc3RhcnQgb2YgbGluZVxuXG4gICAgaWYgKGlzRXZhbCkge1xuICAgICAgY29uc3Qgc3ViTWF0Y2ggPSBjaHJvbWVFdmFsUmVnZXguZXhlYyhwYXJ0c1syXSkgO1xuXG4gICAgICBpZiAoc3ViTWF0Y2gpIHtcbiAgICAgICAgLy8gdGhyb3cgb3V0IGV2YWwgbGluZS9jb2x1bW4gYW5kIHVzZSB0b3AtbW9zdCBsaW5lL2NvbHVtbiBudW1iZXJcbiAgICAgICAgcGFydHNbMl0gPSBzdWJNYXRjaFsxXTsgLy8gdXJsXG4gICAgICAgIHBhcnRzWzNdID0gc3ViTWF0Y2hbMl07IC8vIGxpbmVcbiAgICAgICAgcGFydHNbNF0gPSBzdWJNYXRjaFszXTsgLy8gY29sdW1uXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gS2FtaWw6IE9uZSBtb3JlIGhhY2sgd29uJ3QgaHVydCB1cyByaWdodD8gVW5kZXJzdGFuZGluZyBhbmQgYWRkaW5nIG1vcmUgcnVsZXMgb24gdG9wIG9mIHRoZXNlIHJlZ2V4cHMgcmlnaHQgbm93XG4gICAgLy8gd291bGQgYmUgd2F5IHRvbyB0aW1lIGNvbnN1bWluZy4gKFRPRE86IFJld3JpdGUgd2hvbGUgUmVnRXhwIHRvIGJlIG1vcmUgcmVhZGFibGUpXG4gICAgY29uc3QgW2Z1bmMsIGZpbGVuYW1lXSA9IGV4dHJhY3RTYWZhcmlFeHRlbnNpb25EZXRhaWxzKHBhcnRzWzFdIHx8IFVOS05PV05fRlVOQ1RJT04sIHBhcnRzWzJdKTtcblxuICAgIHJldHVybiBjcmVhdGVGcmFtZShmaWxlbmFtZSwgZnVuYywgcGFydHNbM10gPyArcGFydHNbM10gOiB1bmRlZmluZWQsIHBhcnRzWzRdID8gK3BhcnRzWzRdIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHJldHVybjtcbn07XG5cbmNvbnN0IGNocm9tZVN0YWNrTGluZVBhcnNlciA9IFtDSFJPTUVfUFJJT1JJVFksIGNocm9tZVN0YWNrUGFyc2VyRm5dO1xuXG4vLyBnZWNrbyByZWdleDogYCg/OmJ1bmRsZXxcXGQrXFwuanMpYDogYGJ1bmRsZWAgaXMgZm9yIHJlYWN0IG5hdGl2ZSwgYFxcZCtcXC5qc2AgYWxzbyBidXQgc3BlY2lmaWNhbGx5IGZvciByYW0gYnVuZGxlcyBiZWNhdXNlIGl0XG4vLyBnZW5lcmF0ZXMgZmlsZW5hbWVzIHdpdGhvdXQgYSBwcmVmaXggbGlrZSBgZmlsZTovL2AgdGhlIGZpbGVuYW1lcyBpbiB0aGUgc3RhY2t0cmFjZSBhcmUganVzdCA0Mi5qc1xuLy8gV2UgbmVlZCB0aGlzIHNwZWNpZmljIGNhc2UgZm9yIG5vdyBiZWNhdXNlIHdlIHdhbnQgbm8gb3RoZXIgcmVnZXggdG8gbWF0Y2guXG5jb25zdCBnZWNrb1JFZ2V4ID1cbiAgL15cXHMqKC4qPykoPzpcXCgoLio/KVxcKSk/KD86XnxAKT8oKD86Wy1hLXpdKyk/OlxcLy4qP3xcXFtuYXRpdmUgY29kZVxcXXxbXkBdKig/OmJ1bmRsZXxcXGQrXFwuanMpfFxcL1tcXHdcXC0uIC89XSspKD86OihcXGQrKSk/KD86OihcXGQrKSk/XFxzKiQvaTtcbmNvbnN0IGdlY2tvRXZhbFJlZ2V4ID0gLyhcXFMrKSBsaW5lIChcXGQrKSg/OiA+IGV2YWwgbGluZSBcXGQrKSogPiBldmFsL2k7XG5cbmNvbnN0IGdlY2tvID0gbGluZSA9PiB7XG4gIGNvbnN0IHBhcnRzID0gZ2Vja29SRWdleC5leGVjKGxpbmUpIDtcblxuICBpZiAocGFydHMpIHtcbiAgICBjb25zdCBpc0V2YWwgPSBwYXJ0c1szXSAmJiBwYXJ0c1szXS5pbmRleE9mKCcgPiBldmFsJykgPiAtMTtcbiAgICBpZiAoaXNFdmFsKSB7XG4gICAgICBjb25zdCBzdWJNYXRjaCA9IGdlY2tvRXZhbFJlZ2V4LmV4ZWMocGFydHNbM10pIDtcblxuICAgICAgaWYgKHN1Yk1hdGNoKSB7XG4gICAgICAgIC8vIHRocm93IG91dCBldmFsIGxpbmUvY29sdW1uIGFuZCB1c2UgdG9wLW1vc3QgbGluZSBudW1iZXJcbiAgICAgICAgcGFydHNbMV0gPSBwYXJ0c1sxXSB8fCAnZXZhbCc7XG4gICAgICAgIHBhcnRzWzNdID0gc3ViTWF0Y2hbMV07XG4gICAgICAgIHBhcnRzWzRdID0gc3ViTWF0Y2hbMl07XG4gICAgICAgIHBhcnRzWzVdID0gJyc7IC8vIG5vIGNvbHVtbiB3aGVuIGV2YWxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZmlsZW5hbWUgPSBwYXJ0c1szXTtcbiAgICBsZXQgZnVuYyA9IHBhcnRzWzFdIHx8IFVOS05PV05fRlVOQ1RJT047XG4gICAgW2Z1bmMsIGZpbGVuYW1lXSA9IGV4dHJhY3RTYWZhcmlFeHRlbnNpb25EZXRhaWxzKGZ1bmMsIGZpbGVuYW1lKTtcblxuICAgIHJldHVybiBjcmVhdGVGcmFtZShmaWxlbmFtZSwgZnVuYywgcGFydHNbNF0gPyArcGFydHNbNF0gOiB1bmRlZmluZWQsIHBhcnRzWzVdID8gK3BhcnRzWzVdIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHJldHVybjtcbn07XG5cbmNvbnN0IGdlY2tvU3RhY2tMaW5lUGFyc2VyID0gW0dFQ0tPX1BSSU9SSVRZLCBnZWNrb107XG5cbmNvbnN0IHdpbmpzUmVnZXggPSAvXlxccyphdCAoPzooKD86XFxbb2JqZWN0IG9iamVjdFxcXSk/LispICk/XFwoPygoPzpbLWEtel0rKTouKj8pOihcXGQrKSg/OjooXFxkKykpP1xcKT9cXHMqJC9pO1xuXG5jb25zdCB3aW5qcyA9IGxpbmUgPT4ge1xuICBjb25zdCBwYXJ0cyA9IHdpbmpzUmVnZXguZXhlYyhsaW5lKSA7XG5cbiAgcmV0dXJuIHBhcnRzXG4gICAgPyBjcmVhdGVGcmFtZShwYXJ0c1syXSwgcGFydHNbMV0gfHwgVU5LTk9XTl9GVU5DVElPTiwgK3BhcnRzWzNdLCBwYXJ0c1s0XSA/ICtwYXJ0c1s0XSA6IHVuZGVmaW5lZClcbiAgICA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IHdpbmpzU3RhY2tMaW5lUGFyc2VyID0gW1dJTkpTX1BSSU9SSVRZLCB3aW5qc107XG5cbmNvbnN0IG9wZXJhMTBSZWdleCA9IC8gbGluZSAoXFxkKykuKnNjcmlwdCAoPzppbiApPyhcXFMrKSg/OjogaW4gZnVuY3Rpb24gKFxcUyspKT8kL2k7XG5cbmNvbnN0IG9wZXJhMTAgPSBsaW5lID0+IHtcbiAgY29uc3QgcGFydHMgPSBvcGVyYTEwUmVnZXguZXhlYyhsaW5lKSA7XG4gIHJldHVybiBwYXJ0cyA/IGNyZWF0ZUZyYW1lKHBhcnRzWzJdLCBwYXJ0c1szXSB8fCBVTktOT1dOX0ZVTkNUSU9OLCArcGFydHNbMV0pIDogdW5kZWZpbmVkO1xufTtcblxuY29uc3Qgb3BlcmExMFN0YWNrTGluZVBhcnNlciA9IFtPUEVSQTEwX1BSSU9SSVRZLCBvcGVyYTEwXTtcblxuY29uc3Qgb3BlcmExMVJlZ2V4ID1cbiAgLyBsaW5lIChcXGQrKSwgY29sdW1uIChcXGQrKVxccyooPzppbiAoPzo8YW5vbnltb3VzIGZ1bmN0aW9uOiAoW14+XSspPnwoW14pXSspKVxcKC4qXFwpKT8gaW4gKC4qKTpcXHMqJC9pO1xuXG5jb25zdCBvcGVyYTExID0gbGluZSA9PiB7XG4gIGNvbnN0IHBhcnRzID0gb3BlcmExMVJlZ2V4LmV4ZWMobGluZSkgO1xuICByZXR1cm4gcGFydHMgPyBjcmVhdGVGcmFtZShwYXJ0c1s1XSwgcGFydHNbM10gfHwgcGFydHNbNF0gfHwgVU5LTk9XTl9GVU5DVElPTiwgK3BhcnRzWzFdLCArcGFydHNbMl0pIDogdW5kZWZpbmVkO1xufTtcblxuY29uc3Qgb3BlcmExMVN0YWNrTGluZVBhcnNlciA9IFtPUEVSQTExX1BSSU9SSVRZLCBvcGVyYTExXTtcblxuY29uc3QgZGVmYXVsdFN0YWNrTGluZVBhcnNlcnMgPSBbY2hyb21lU3RhY2tMaW5lUGFyc2VyLCBnZWNrb1N0YWNrTGluZVBhcnNlcl07XG5cbmNvbnN0IGRlZmF1bHRTdGFja1BhcnNlciA9IGNyZWF0ZVN0YWNrUGFyc2VyKC4uLmRlZmF1bHRTdGFja0xpbmVQYXJzZXJzKTtcblxuLyoqXG4gKiBTYWZhcmkgd2ViIGV4dGVuc2lvbnMsIHN0YXJ0aW5nIHZlcnNpb24gdW5rbm93biwgY2FuIHByb2R1Y2UgXCJmcmFtZXMtb25seVwiIHN0YWNrdHJhY2VzLlxuICogV2hhdCBpdCBtZWFucywgaXMgdGhhdCBpbnN0ZWFkIG9mIGZvcm1hdCBsaWtlOlxuICpcbiAqIEVycm9yOiB3YXRcbiAqICAgYXQgZnVuY3Rpb25AdXJsOnJvdzpjb2xcbiAqICAgYXQgZnVuY3Rpb25AdXJsOnJvdzpjb2xcbiAqICAgYXQgZnVuY3Rpb25AdXJsOnJvdzpjb2xcbiAqXG4gKiBpdCBwcm9kdWNlcyBzb21ldGhpbmcgbGlrZTpcbiAqXG4gKiAgIGZ1bmN0aW9uQHVybDpyb3c6Y29sXG4gKiAgIGZ1bmN0aW9uQHVybDpyb3c6Y29sXG4gKiAgIGZ1bmN0aW9uQHVybDpyb3c6Y29sXG4gKlxuICogQmVjYXVzZSBvZiB0aGF0LCBpdCB3b24ndCBiZSBjYXB0dXJlZCBieSBgY2hyb21lYCBSZWdFeHAgYW5kIHdpbGwgZmFsbCBpbnRvIGBHZWNrb2AgYnJhbmNoLlxuICogVGhpcyBmdW5jdGlvbiBpcyBleHRyYWN0ZWQgc28gdGhhdCB3ZSBjYW4gdXNlIGl0IGluIGJvdGggcGxhY2VzIHdpdGhvdXQgZHVwbGljYXRpbmcgdGhlIGxvZ2ljLlxuICogVW5mb3J0dW5hdGVseSBcImp1c3RcIiBjaGFuZ2luZyBSZWdFeHAgaXMgdG9vIGNvbXBsaWNhdGVkIG5vdyBhbmQgbWFraW5nIGl0IHBhc3MgYWxsIHRlc3RzXG4gKiBhbmQgZml4IHRoaXMgY2FzZSBzZWVtcyBsaWtlIGFuIGltcG9zc2libGUsIG9yIGF0IGxlYXN0IHdheSB0b28gdGltZS1jb25zdW1pbmcgdGFzay5cbiAqL1xuY29uc3QgZXh0cmFjdFNhZmFyaUV4dGVuc2lvbkRldGFpbHMgPSAoZnVuYywgZmlsZW5hbWUpID0+IHtcbiAgY29uc3QgaXNTYWZhcmlFeHRlbnNpb24gPSBmdW5jLmluZGV4T2YoJ3NhZmFyaS1leHRlbnNpb24nKSAhPT0gLTE7XG4gIGNvbnN0IGlzU2FmYXJpV2ViRXh0ZW5zaW9uID0gZnVuYy5pbmRleE9mKCdzYWZhcmktd2ViLWV4dGVuc2lvbicpICE9PSAtMTtcblxuICByZXR1cm4gaXNTYWZhcmlFeHRlbnNpb24gfHwgaXNTYWZhcmlXZWJFeHRlbnNpb25cbiAgICA/IFtcbiAgICAgICAgZnVuYy5pbmRleE9mKCdAJykgIT09IC0xID8gKGZ1bmMuc3BsaXQoJ0AnKVswXSApIDogVU5LTk9XTl9GVU5DVElPTixcbiAgICAgICAgaXNTYWZhcmlFeHRlbnNpb24gPyBgc2FmYXJpLWV4dGVuc2lvbjoke2ZpbGVuYW1lfWAgOiBgc2FmYXJpLXdlYi1leHRlbnNpb246JHtmaWxlbmFtZX1gLFxuICAgICAgXVxuICAgIDogW2Z1bmMsIGZpbGVuYW1lXTtcbn07XG5cbmV4cG9ydCB7IGNocm9tZVN0YWNrTGluZVBhcnNlciwgZGVmYXVsdFN0YWNrTGluZVBhcnNlcnMsIGRlZmF1bHRTdGFja1BhcnNlciwgZ2Vja29TdGFja0xpbmVQYXJzZXIsIG9wZXJhMTBTdGFja0xpbmVQYXJzZXIsIG9wZXJhMTFTdGFja0xpbmVQYXJzZXIsIHdpbmpzU3RhY2tMaW5lUGFyc2VyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGFjay1wYXJzZXJzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/stack-parsers.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/backgroundtab.js":
/*!***********************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/backgroundtab.js ***!
  \***********************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   registerBackgroundTabDetection: () => (/* binding */ registerBackgroundTabDetection)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/debug-build.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../helpers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\");\n\n\n\n\n/**\n * Add a listener that cancels and finishes a transaction when the global\n * document is hidden.\n */\nfunction registerBackgroundTabDetection() {\n  if (_helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.document) {\n    _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.document.addEventListener('visibilitychange', () => {\n      const activeSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n      if (!activeSpan) {\n        return;\n      }\n\n      const rootSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(activeSpan);\n\n      if (_helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.document.hidden && rootSpan) {\n        const cancelledStatus = 'cancelled';\n\n        const { op, status } = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(rootSpan);\n\n        if (_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n          _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log(`[Tracing] Transaction: ${cancelledStatus} -> since tab moved to the background, op: ${op}`);\n        }\n\n        // We should not set status if it is already set, this prevent important statuses like\n        // error or data loss from being overwritten on transaction.\n        if (!status) {\n          rootSpan.setStatus({ code: _sentry_core__WEBPACK_IMPORTED_MODULE_0__.SPAN_STATUS_ERROR, message: cancelledStatus });\n        }\n\n        rootSpan.setAttribute('sentry.cancellation_reason', 'document.hidden');\n        rootSpan.end();\n      }\n    });\n  } else {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn('[Tracing] Could not set up background tab detection due to lack of global document');\n  }\n}\n\n\n//# sourceMappingURL=backgroundtab.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS90cmFjaW5nL2JhY2tncm91bmR0YWIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFnRztBQUNoRDtBQUNUOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSwrQ0FBTTtBQUNaLElBQUksK0NBQU07QUFDVix5QkFBeUIsMkRBQWE7QUFDdEM7QUFDQTtBQUNBOztBQUVBLHVCQUF1Qix5REFBVzs7QUFFbEMsVUFBVSwrQ0FBTTtBQUNoQjs7QUFFQSxnQkFBZ0IsYUFBYSxFQUFFLHdEQUFVOztBQUV6QyxZQUFZLHdEQUFXO0FBQ3ZCLFVBQVUsK0NBQUssK0JBQStCLGlCQUFpQiw0Q0FBNEMsR0FBRztBQUM5Rzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsTUFBTSwyREFBaUIsNEJBQTRCO0FBQ2xGOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0osSUFBSSx3REFBVyxJQUFJLCtDQUFLO0FBQ3hCO0FBQ0E7O0FBRTBDO0FBQzFDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrYnJvd3NlckA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9idWlsZC9ucG0vZXNtL3RyYWNpbmcvYmFja2dyb3VuZHRhYi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRBY3RpdmVTcGFuLCBnZXRSb290U3Bhbiwgc3BhblRvSlNPTiwgZGVidWcsIFNQQU5fU1RBVFVTX0VSUk9SIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IERFQlVHX0JVSUxEIH0gZnJvbSAnLi4vZGVidWctYnVpbGQuanMnO1xuaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgdGhhdCBjYW5jZWxzIGFuZCBmaW5pc2hlcyBhIHRyYW5zYWN0aW9uIHdoZW4gdGhlIGdsb2JhbFxuICogZG9jdW1lbnQgaXMgaGlkZGVuLlxuICovXG5mdW5jdGlvbiByZWdpc3RlckJhY2tncm91bmRUYWJEZXRlY3Rpb24oKSB7XG4gIGlmIChXSU5ET1cuZG9jdW1lbnQpIHtcbiAgICBXSU5ET1cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFjdGl2ZVNwYW4gPSBnZXRBY3RpdmVTcGFuKCk7XG4gICAgICBpZiAoIWFjdGl2ZVNwYW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByb290U3BhbiA9IGdldFJvb3RTcGFuKGFjdGl2ZVNwYW4pO1xuXG4gICAgICBpZiAoV0lORE9XLmRvY3VtZW50LmhpZGRlbiAmJiByb290U3Bhbikge1xuICAgICAgICBjb25zdCBjYW5jZWxsZWRTdGF0dXMgPSAnY2FuY2VsbGVkJztcblxuICAgICAgICBjb25zdCB7IG9wLCBzdGF0dXMgfSA9IHNwYW5Ub0pTT04ocm9vdFNwYW4pO1xuXG4gICAgICAgIGlmIChERUJVR19CVUlMRCkge1xuICAgICAgICAgIGRlYnVnLmxvZyhgW1RyYWNpbmddIFRyYW5zYWN0aW9uOiAke2NhbmNlbGxlZFN0YXR1c30gLT4gc2luY2UgdGFiIG1vdmVkIHRvIHRoZSBiYWNrZ3JvdW5kLCBvcDogJHtvcH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIHNob3VsZCBub3Qgc2V0IHN0YXR1cyBpZiBpdCBpcyBhbHJlYWR5IHNldCwgdGhpcyBwcmV2ZW50IGltcG9ydGFudCBzdGF0dXNlcyBsaWtlXG4gICAgICAgIC8vIGVycm9yIG9yIGRhdGEgbG9zcyBmcm9tIGJlaW5nIG92ZXJ3cml0dGVuIG9uIHRyYW5zYWN0aW9uLlxuICAgICAgICBpZiAoIXN0YXR1cykge1xuICAgICAgICAgIHJvb3RTcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNQQU5fU1RBVFVTX0VSUk9SLCBtZXNzYWdlOiBjYW5jZWxsZWRTdGF0dXMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByb290U3Bhbi5zZXRBdHRyaWJ1dGUoJ3NlbnRyeS5jYW5jZWxsYXRpb25fcmVhc29uJywgJ2RvY3VtZW50LmhpZGRlbicpO1xuICAgICAgICByb290U3Bhbi5lbmQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy53YXJuKCdbVHJhY2luZ10gQ291bGQgbm90IHNldCB1cCBiYWNrZ3JvdW5kIHRhYiBkZXRlY3Rpb24gZHVlIHRvIGxhY2sgb2YgZ2xvYmFsIGRvY3VtZW50Jyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgcmVnaXN0ZXJCYWNrZ3JvdW5kVGFiRGV0ZWN0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYWNrZ3JvdW5kdGFiLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/backgroundtab.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/browserTracingIntegration.js":
/*!***********************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/browserTracingIntegration.js ***!
  \***********************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   BROWSER_TRACING_INTEGRATION_ID: () => (/* binding */ BROWSER_TRACING_INTEGRATION_ID),\n/* harmony export */   browserTracingIntegration: () => (/* binding */ browserTracingIntegration),\n/* harmony export */   getMetaContent: () => (/* binding */ getMetaContent),\n/* harmony export */   startBrowserTracingNavigationSpan: () => (/* binding */ startBrowserTracingNavigationSpan),\n/* harmony export */   startBrowserTracingPageLoadSpan: () => (/* binding */ startBrowserTracingPageLoadSpan)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry-internal/browser-utils */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/debug-build.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../helpers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\");\n/* harmony import */ var _backgroundtab_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./backgroundtab.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/backgroundtab.js\");\n/* harmony import */ var _linkedTraces_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./linkedTraces.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/linkedTraces.js\");\n/* harmony import */ var _request_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./request.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/request.js\");\n\n\n\n\n\n\n\n\nconst BROWSER_TRACING_INTEGRATION_ID = 'BrowserTracing';\n\nconst DEFAULT_BROWSER_TRACING_OPTIONS = {\n  ..._sentry_core__WEBPACK_IMPORTED_MODULE_0__.TRACING_DEFAULTS,\n  instrumentNavigation: true,\n  instrumentPageLoad: true,\n  markBackgroundSpan: true,\n  enableLongTask: true,\n  enableLongAnimationFrame: true,\n  enableInp: true,\n  enableElementTiming: true,\n  ignoreResourceSpans: [],\n  ignorePerformanceApiSpans: [],\n  detectRedirects: true,\n  linkPreviousTrace: 'in-memory',\n  consistentTraceSampling: false,\n  _experiments: {},\n  ..._request_js__WEBPACK_IMPORTED_MODULE_6__.defaultRequestInstrumentationOptions,\n};\n\n/**\n * The Browser Tracing integration automatically instruments browser pageload/navigation\n * actions as transactions, and captures requests, metrics and errors as spans.\n *\n * The integration can be configured with a variety of options, and can be extended to use\n * any routing library.\n *\n * We explicitly export the proper type here, as this has to be extended in some cases.\n */\nconst browserTracingIntegration = ((_options = {}) => {\n  const latestRoute = {\n    name: undefined,\n    source: undefined,\n  };\n\n  /**\n   * This is just a small wrapper that makes `document` optional.\n   * We want to be extra-safe and always check that this exists, to ensure weird environments do not blow up.\n   */\n  const optionalWindowDocument = _helpers_js__WEBPACK_IMPORTED_MODULE_3__.WINDOW.document ;\n\n  const {\n    enableInp,\n    enableElementTiming,\n    enableLongTask,\n    enableLongAnimationFrame,\n    _experiments: { enableInteractions, enableStandaloneClsSpans, enableStandaloneLcpSpans },\n    beforeStartSpan,\n    idleTimeout,\n    finalTimeout,\n    childSpanTimeout,\n    markBackgroundSpan,\n    traceFetch,\n    traceXHR,\n    trackFetchStreamPerformance,\n    shouldCreateSpanForRequest,\n    enableHTTPTimings,\n    ignoreResourceSpans,\n    ignorePerformanceApiSpans,\n    instrumentPageLoad,\n    instrumentNavigation,\n    detectRedirects,\n    linkPreviousTrace,\n    consistentTraceSampling,\n    onRequestSpanStart,\n  } = {\n    ...DEFAULT_BROWSER_TRACING_OPTIONS,\n    ..._options,\n  };\n\n  let _collectWebVitals;\n  let lastInteractionTimestamp;\n\n  /** Create routing idle transaction. */\n  function _createRouteSpan(client, startSpanOptions, makeActive = true) {\n    const isPageloadTransaction = startSpanOptions.op === 'pageload';\n\n    const finalStartSpanOptions = beforeStartSpan\n      ? beforeStartSpan(startSpanOptions)\n      : startSpanOptions;\n\n    const attributes = finalStartSpanOptions.attributes || {};\n\n    // If `finalStartSpanOptions.name` is different than `startSpanOptions.name`\n    // it is because `beforeStartSpan` set a custom name. Therefore we set the source to 'custom'.\n    if (startSpanOptions.name !== finalStartSpanOptions.name) {\n      attributes[_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] = 'custom';\n      finalStartSpanOptions.attributes = attributes;\n    }\n\n    if (!makeActive) {\n      // We want to ensure this has 0s duration\n      const now = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.dateTimestampInSeconds)();\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.startInactiveSpan)({\n        ...finalStartSpanOptions,\n        startTime: now,\n      }).end(now);\n      return;\n    }\n\n    latestRoute.name = finalStartSpanOptions.name;\n    latestRoute.source = attributes[_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n    const idleSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.startIdleSpan)(finalStartSpanOptions, {\n      idleTimeout,\n      finalTimeout,\n      childSpanTimeout,\n      // should wait for finish signal if it's a pageload transaction\n      disableAutoFinish: isPageloadTransaction,\n      beforeSpanEnd: span => {\n        // This will generally always be defined here, because it is set in `setup()` of the integration\n        // but technically, it is optional, so we guard here to be extra safe\n        _collectWebVitals?.();\n        (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.addPerformanceEntries)(span, {\n          recordClsOnPageloadSpan: !enableStandaloneClsSpans,\n          recordLcpOnPageloadSpan: !enableStandaloneLcpSpans,\n          ignoreResourceSpans,\n          ignorePerformanceApiSpans,\n        });\n        setActiveIdleSpan(client, undefined);\n\n        // A trace should stay consistent over the entire timespan of one route - even after the pageload/navigation ended.\n        // Only when another navigation happens, we want to create a new trace.\n        // This way, e.g. errors that occur after the pageload span ended are still associated to the pageload trace.\n        const scope = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n        const oldPropagationContext = scope.getPropagationContext();\n\n        scope.setPropagationContext({\n          ...oldPropagationContext,\n          traceId: idleSpan.spanContext().traceId,\n          sampled: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanIsSampled)(idleSpan),\n          dsc: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getDynamicSamplingContextFromSpan)(span),\n        });\n      },\n    });\n\n    setActiveIdleSpan(client, idleSpan);\n\n    function emitFinish() {\n      if (optionalWindowDocument && ['interactive', 'complete'].includes(optionalWindowDocument.readyState)) {\n        client.emit('idleSpanEnableAutoFinish', idleSpan);\n      }\n    }\n\n    if (isPageloadTransaction && optionalWindowDocument) {\n      optionalWindowDocument.addEventListener('readystatechange', () => {\n        emitFinish();\n      });\n\n      emitFinish();\n    }\n  }\n\n  return {\n    name: BROWSER_TRACING_INTEGRATION_ID,\n    setup(client) {\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.registerSpanErrorInstrumentation)();\n\n      _collectWebVitals = (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.startTrackingWebVitals)({\n        recordClsStandaloneSpans: enableStandaloneClsSpans || false,\n        recordLcpStandaloneSpans: enableStandaloneLcpSpans || false,\n        client,\n      });\n\n      if (enableInp) {\n        (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.startTrackingINP)();\n      }\n\n      if (enableElementTiming) {\n        (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.startTrackingElementTiming)();\n      }\n\n      if (\n        enableLongAnimationFrame &&\n        _sentry_core__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ.PerformanceObserver &&\n        PerformanceObserver.supportedEntryTypes &&\n        PerformanceObserver.supportedEntryTypes.includes('long-animation-frame')\n      ) {\n        (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.startTrackingLongAnimationFrames)();\n      } else if (enableLongTask) {\n        (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.startTrackingLongTasks)();\n      }\n\n      if (enableInteractions) {\n        (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.startTrackingInteractions)();\n      }\n\n      if (detectRedirects && optionalWindowDocument) {\n        const interactionHandler = () => {\n          lastInteractionTimestamp = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.timestampInSeconds)();\n        };\n        addEventListener('click', interactionHandler, { capture: true });\n        addEventListener('keydown', interactionHandler, { capture: true, passive: true });\n      }\n\n      function maybeEndActiveSpan() {\n        const activeSpan = getActiveIdleSpan(client);\n\n        if (activeSpan && !(0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(activeSpan).timestamp) {\n          _debug_build_js__WEBPACK_IMPORTED_MODULE_2__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log(`[Tracing] Finishing current active span with op: ${(0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(activeSpan).op}`);\n          // If there's an open active span, we need to finish it before creating an new one.\n          activeSpan.setAttribute(_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, 'cancelled');\n          activeSpan.end();\n        }\n      }\n\n      client.on('startNavigationSpan', (startSpanOptions, navigationOptions) => {\n        if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)() !== client) {\n          return;\n        }\n\n        if (navigationOptions?.isRedirect) {\n          _debug_build_js__WEBPACK_IMPORTED_MODULE_2__.DEBUG_BUILD &&\n            _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn('[Tracing] Detected redirect, navigation span will not be the root span, but a child span.');\n          _createRouteSpan(\n            client,\n            {\n              op: 'navigation.redirect',\n              ...startSpanOptions,\n            },\n            false,\n          );\n          return;\n        }\n\n        maybeEndActiveSpan();\n\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)().setPropagationContext({ traceId: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.generateTraceId)(), sampleRand: Math.random() });\n\n        const scope = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n        scope.setPropagationContext({ traceId: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.generateTraceId)(), sampleRand: Math.random() });\n        // We reset this to ensure we do not have lingering incorrect data here\n        // places that call this hook may set this where appropriate - else, the URL at span sending time is used\n        scope.setSDKProcessingMetadata({\n          normalizedRequest: undefined,\n        });\n\n        _createRouteSpan(client, {\n          op: 'navigation',\n          ...startSpanOptions,\n        });\n      });\n\n      client.on('startPageLoadSpan', (startSpanOptions, traceOptions = {}) => {\n        if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)() !== client) {\n          return;\n        }\n        maybeEndActiveSpan();\n\n        const sentryTrace = traceOptions.sentryTrace || getMetaContent('sentry-trace');\n        const baggage = traceOptions.baggage || getMetaContent('baggage');\n\n        const propagationContext = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.propagationContextFromHeaders)(sentryTrace, baggage);\n\n        const scope = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n        scope.setPropagationContext(propagationContext);\n\n        // We store the normalized request data on the scope, so we get the request data at time of span creation\n        // otherwise, the URL etc. may already be of the following navigation, and we'd report the wrong URL\n        scope.setSDKProcessingMetadata({\n          normalizedRequest: (0,_helpers_js__WEBPACK_IMPORTED_MODULE_3__.getHttpRequestData)(),\n        });\n\n        _createRouteSpan(client, {\n          op: 'pageload',\n          ...startSpanOptions,\n        });\n      });\n    },\n    afterAllSetup(client) {\n      let startingUrl = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getLocationHref)();\n\n      if (linkPreviousTrace !== 'off') {\n        (0,_linkedTraces_js__WEBPACK_IMPORTED_MODULE_5__.linkTraces)(client, { linkPreviousTrace, consistentTraceSampling });\n      }\n\n      if (_helpers_js__WEBPACK_IMPORTED_MODULE_3__.WINDOW.location) {\n        if (instrumentPageLoad) {\n          const origin = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.browserPerformanceTimeOrigin)();\n          startBrowserTracingPageLoadSpan(client, {\n            name: _helpers_js__WEBPACK_IMPORTED_MODULE_3__.WINDOW.location.pathname,\n            // pageload should always start at timeOrigin (and needs to be in s, not ms)\n            startTime: origin ? origin / 1000 : undefined,\n            attributes: {\n              [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n              [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.browser',\n            },\n          });\n        }\n\n        if (instrumentNavigation) {\n          (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.addHistoryInstrumentationHandler)(({ to, from }) => {\n            /**\n             * This early return is there to account for some cases where a navigation transaction starts right after\n             * long-running pageload. We make sure that if `from` is undefined and a valid `startingURL` exists, we don't\n             * create an uneccessary navigation transaction.\n             *\n             * This was hard to duplicate, but this behavior stopped as soon as this fix was applied. This issue might also\n             * only be caused in certain development environments where the usage of a hot module reloader is causing\n             * errors.\n             */\n            if (from === undefined && startingUrl?.indexOf(to) !== -1) {\n              startingUrl = undefined;\n              return;\n            }\n\n            startingUrl = undefined;\n            const parsed = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.parseStringToURLObject)(to);\n            const activeSpan = getActiveIdleSpan(client);\n            const navigationIsRedirect =\n              activeSpan && detectRedirects && isRedirect(activeSpan, lastInteractionTimestamp);\n            startBrowserTracingNavigationSpan(\n              client,\n              {\n                name: parsed?.pathname || _helpers_js__WEBPACK_IMPORTED_MODULE_3__.WINDOW.location.pathname,\n                attributes: {\n                  [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n                  [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.browser',\n                },\n              },\n              { url: to, isRedirect: navigationIsRedirect },\n            );\n          });\n        }\n      }\n\n      if (markBackgroundSpan) {\n        (0,_backgroundtab_js__WEBPACK_IMPORTED_MODULE_4__.registerBackgroundTabDetection)();\n      }\n\n      if (enableInteractions) {\n        registerInteractionListener(client, idleTimeout, finalTimeout, childSpanTimeout, latestRoute);\n      }\n\n      if (enableInp) {\n        (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.registerInpInteractionListener)();\n      }\n\n      (0,_request_js__WEBPACK_IMPORTED_MODULE_6__.instrumentOutgoingRequests)(client, {\n        traceFetch,\n        traceXHR,\n        trackFetchStreamPerformance,\n        tracePropagationTargets: client.getOptions().tracePropagationTargets,\n        shouldCreateSpanForRequest,\n        enableHTTPTimings,\n        onRequestSpanStart,\n      });\n    },\n  };\n}) ;\n\n/**\n * Manually start a page load span.\n * This will only do something if a browser tracing integration integration has been setup.\n *\n * If you provide a custom `traceOptions` object, it will be used to continue the trace\n * instead of the default behavior, which is to look it up on the <meta> tags.\n */\nfunction startBrowserTracingPageLoadSpan(\n  client,\n  spanOptions,\n  traceOptions,\n) {\n  client.emit('startPageLoadSpan', spanOptions, traceOptions);\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)().setTransactionName(spanOptions.name);\n\n  const pageloadSpan = getActiveIdleSpan(client);\n\n  if (pageloadSpan) {\n    client.emit('afterStartPageLoadSpan', pageloadSpan);\n  }\n\n  return pageloadSpan;\n}\n\n/**\n * Manually start a navigation span.\n * This will only do something if a browser tracing integration has been setup.\n */\nfunction startBrowserTracingNavigationSpan(\n  client,\n  spanOptions,\n  options,\n) {\n  const { url, isRedirect } = options || {};\n  client.emit('beforeStartNavigationSpan', spanOptions, { isRedirect });\n  client.emit('startNavigationSpan', spanOptions, { isRedirect });\n\n  const scope = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n  scope.setTransactionName(spanOptions.name);\n\n  // We store the normalized request data on the scope, so we get the request data at time of span creation\n  // otherwise, the URL etc. may already be of the following navigation, and we'd report the wrong URL\n  if (url && !isRedirect) {\n    scope.setSDKProcessingMetadata({\n      normalizedRequest: {\n        ...(0,_helpers_js__WEBPACK_IMPORTED_MODULE_3__.getHttpRequestData)(),\n        url,\n      },\n    });\n  }\n\n  return getActiveIdleSpan(client);\n}\n\n/** Returns the value of a meta tag */\nfunction getMetaContent(metaName) {\n  /**\n   * This is just a small wrapper that makes `document` optional.\n   * We want to be extra-safe and always check that this exists, to ensure weird environments do not blow up.\n   */\n  const optionalWindowDocument = _helpers_js__WEBPACK_IMPORTED_MODULE_3__.WINDOW.document ;\n\n  const metaTag = optionalWindowDocument?.querySelector(`meta[name=${metaName}]`);\n  return metaTag?.getAttribute('content') || undefined;\n}\n\n/** Start listener for interaction transactions */\nfunction registerInteractionListener(\n  client,\n  idleTimeout,\n  finalTimeout,\n  childSpanTimeout,\n  latestRoute,\n) {\n  /**\n   * This is just a small wrapper that makes `document` optional.\n   * We want to be extra-safe and always check that this exists, to ensure weird environments do not blow up.\n   */\n  const optionalWindowDocument = _helpers_js__WEBPACK_IMPORTED_MODULE_3__.WINDOW.document ;\n\n  let inflightInteractionSpan;\n  const registerInteractionTransaction = () => {\n    const op = 'ui.action.click';\n\n    const activeIdleSpan = getActiveIdleSpan(client);\n    if (activeIdleSpan) {\n      const currentRootSpanOp = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(activeIdleSpan).op;\n      if (['navigation', 'pageload'].includes(currentRootSpanOp )) {\n        _debug_build_js__WEBPACK_IMPORTED_MODULE_2__.DEBUG_BUILD &&\n          _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn(`[Tracing] Did not create ${op} span because a pageload or navigation span is in progress.`);\n        return undefined;\n      }\n    }\n\n    if (inflightInteractionSpan) {\n      inflightInteractionSpan.setAttribute(_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, 'interactionInterrupted');\n      inflightInteractionSpan.end();\n      inflightInteractionSpan = undefined;\n    }\n\n    if (!latestRoute.name) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_2__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn(`[Tracing] Did not create ${op} transaction because _latestRouteName is missing.`);\n      return undefined;\n    }\n\n    inflightInteractionSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.startIdleSpan)(\n      {\n        name: latestRoute.name,\n        op,\n        attributes: {\n          [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: latestRoute.source || 'url',\n        },\n      },\n      {\n        idleTimeout,\n        finalTimeout,\n        childSpanTimeout,\n      },\n    );\n  };\n\n  if (optionalWindowDocument) {\n    addEventListener('click', registerInteractionTransaction, { capture: true });\n  }\n}\n\n// We store the active idle span on the client object, so we can access it from exported functions\nconst ACTIVE_IDLE_SPAN_PROPERTY = '_sentry_idleSpan';\nfunction getActiveIdleSpan(client) {\n  return (client )[ACTIVE_IDLE_SPAN_PROPERTY];\n}\n\nfunction setActiveIdleSpan(client, span) {\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addNonEnumerableProperty)(client, ACTIVE_IDLE_SPAN_PROPERTY, span);\n}\n\n// The max. time in seconds between two pageload/navigation spans that makes us consider the second one a redirect\nconst REDIRECT_THRESHOLD = 0.3;\n\nfunction isRedirect(activeSpan, lastInteractionTimestamp) {\n  const spanData = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(activeSpan);\n\n  const now = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.dateTimestampInSeconds)();\n\n  // More than 300ms since last navigation/pageload span?\n  // --> never consider this a redirect\n  const startTimestamp = spanData.start_timestamp;\n  if (now - startTimestamp > REDIRECT_THRESHOLD) {\n    return false;\n  }\n\n  // A click happened in the last 300ms?\n  // --> never consider this a redirect\n  if (lastInteractionTimestamp && now - lastInteractionTimestamp <= REDIRECT_THRESHOLD) {\n    return false;\n  }\n\n  return true;\n}\n\n\n//# sourceMappingURL=browserTracingIntegration.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS90cmFjaW5nL2Jyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQXdpQjtBQUNwUTtBQUNwUDtBQUNXO0FBQ1M7QUFDckI7QUFDaUQ7O0FBRWhHOztBQUVBO0FBQ0EsS0FBSywwREFBZ0I7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCLEtBQUssNkVBQW9DO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQ0FBTTs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix3RUFBd0U7QUFDNUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDBFQUFnQztBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0Isb0VBQXNCO0FBQ3hDLE1BQU0sK0RBQWlCO0FBQ3ZCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQywwRUFBZ0M7O0FBRXBFLHFCQUFxQiwyREFBYTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHFGQUFxQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsNkRBQWU7QUFDckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDJEQUFhO0FBQ2hDLGVBQWUsK0VBQWlDO0FBQ2hELFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sOEVBQWdDOztBQUV0QywwQkFBMEIsc0ZBQXNCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQSxRQUFRLGdGQUFnQjtBQUN4Qjs7QUFFQTtBQUNBLFFBQVEsMEZBQTBCO0FBQ2xDOztBQUVBO0FBQ0E7QUFDQSxRQUFRLG9EQUFVO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBLFFBQVEsZ0dBQWdDO0FBQ3hDLFFBQVE7QUFDUixRQUFRLHNGQUFzQjtBQUM5Qjs7QUFFQTtBQUNBLFFBQVEseUZBQXlCO0FBQ2pDOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUMsZ0VBQWtCO0FBQ3ZEO0FBQ0Esd0RBQXdELGVBQWU7QUFDdkUsMERBQTBELDhCQUE4QjtBQUN4Rjs7QUFFQTtBQUNBOztBQUVBLDJCQUEyQix3REFBVTtBQUNyQyxVQUFVLHdEQUFXLElBQUksK0NBQUsseURBQXlELHdEQUFVLGdCQUFnQjtBQUNqSDtBQUNBLGtDQUFrQywyRkFBaUQ7QUFDbkY7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWSx1REFBUztBQUNyQjtBQUNBOztBQUVBO0FBQ0EsVUFBVSx3REFBVztBQUNyQixZQUFZLCtDQUFLO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsUUFBUSwrREFBaUIsMkJBQTJCLFNBQVMsNkRBQWUsK0JBQStCOztBQUUzRyxzQkFBc0IsNkRBQWU7QUFDckMsc0NBQXNDLFNBQVMsNkRBQWUsK0JBQStCO0FBQzdGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTzs7QUFFUCx5RUFBeUU7QUFDekUsWUFBWSx1REFBUztBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQ0FBbUMsMkVBQTZCOztBQUVoRSxzQkFBc0IsNkRBQWU7QUFDckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLCtEQUFrQjtBQUMvQyxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0Esd0JBQXdCLDZEQUFlOztBQUV2QztBQUNBLFFBQVEsNERBQVUsV0FBVyw0Q0FBNEM7QUFDekU7O0FBRUEsVUFBVSwrQ0FBTTtBQUNoQjtBQUNBLHlCQUF5QiwwRUFBNEI7QUFDckQ7QUFDQSxrQkFBa0IsK0NBQU07QUFDeEI7QUFDQTtBQUNBO0FBQ0EsZUFBZSwwRUFBZ0M7QUFDL0MsZUFBZSwwRUFBZ0M7QUFDL0MsYUFBYTtBQUNiLFdBQVc7QUFDWDs7QUFFQTtBQUNBLFVBQVUsZ0dBQWdDLElBQUksVUFBVTtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQixvRUFBc0I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLCtDQUFNO0FBQ2hEO0FBQ0EsbUJBQW1CLDBFQUFnQztBQUNuRCxtQkFBbUIsMEVBQWdDO0FBQ25ELGlCQUFpQjtBQUNqQixlQUFlO0FBQ2YsZ0JBQWdCLDJDQUEyQztBQUMzRDtBQUNBLFdBQVc7QUFDWDtBQUNBOztBQUVBO0FBQ0EsUUFBUSxpRkFBOEI7QUFDdEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSw4RkFBOEI7QUFDdEM7O0FBRUEsTUFBTSx1RUFBMEI7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsNkRBQWU7O0FBRWpCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsa0JBQWtCO0FBQzVCLDBEQUEwRCxZQUFZO0FBQ3RFLG9EQUFvRCxZQUFZOztBQUVoRSxnQkFBZ0IsNkRBQWU7QUFDL0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsK0RBQWtCO0FBQzdCO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywrQ0FBTTs7QUFFdkMscUVBQXFFLFNBQVM7QUFDOUU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsK0NBQU07O0FBRXZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDLHdEQUFVO0FBQzFDO0FBQ0EsUUFBUSx3REFBVztBQUNuQixVQUFVLCtDQUFLLGtDQUFrQyxJQUFJO0FBQ3JEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJDQUEyQywyRkFBaUQ7QUFDNUY7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSx3REFBVyxJQUFJLCtDQUFLLGtDQUFrQyxJQUFJO0FBQ2hFO0FBQ0E7O0FBRUEsOEJBQThCLDJEQUFhO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywwRUFBZ0M7QUFDM0MsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsZ0VBQWdFLGVBQWU7QUFDL0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRSxzRUFBd0I7QUFDMUI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQix3REFBVTs7QUFFN0IsY0FBYyxvRUFBc0I7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRXlKO0FBQ3pKIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrYnJvd3NlckA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9idWlsZC9ucG0vZXNtL3RyYWNpbmcvYnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUUkFDSU5HX0RFRkFVTFRTLCBnZXRMb2NhdGlvbkhyZWYsIGJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4sIHBhcnNlU3RyaW5nVG9VUkxPYmplY3QsIHJlZ2lzdGVyU3BhbkVycm9ySW5zdHJ1bWVudGF0aW9uLCBHTE9CQUxfT0JKLCBnZXRDbGllbnQsIGRlYnVnLCBnZXRJc29sYXRpb25TY29wZSwgZ2VuZXJhdGVUcmFjZUlkLCBnZXRDdXJyZW50U2NvcGUsIHByb3BhZ2F0aW9uQ29udGV4dEZyb21IZWFkZXJzLCBzcGFuVG9KU09OLCBkYXRlVGltZXN0YW1wSW5TZWNvbmRzLCB0aW1lc3RhbXBJblNlY29uZHMsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFLCBzdGFydEluYWN0aXZlU3Bhbiwgc3RhcnRJZGxlU3BhbiwgZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21TcGFuLCBzcGFuSXNTYW1wbGVkLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX0lETEVfU1BBTl9GSU5JU0hfUkVBU09OLCBhZGROb25FbnVtZXJhYmxlUHJvcGVydHksIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGFkZEhpc3RvcnlJbnN0cnVtZW50YXRpb25IYW5kbGVyLCByZWdpc3RlcklucEludGVyYWN0aW9uTGlzdGVuZXIsIHN0YXJ0VHJhY2tpbmdXZWJWaXRhbHMsIHN0YXJ0VHJhY2tpbmdJTlAsIHN0YXJ0VHJhY2tpbmdFbGVtZW50VGltaW5nLCBzdGFydFRyYWNraW5nTG9uZ0FuaW1hdGlvbkZyYW1lcywgc3RhcnRUcmFja2luZ0xvbmdUYXNrcywgc3RhcnRUcmFja2luZ0ludGVyYWN0aW9ucywgYWRkUGVyZm9ybWFuY2VFbnRyaWVzIH0gZnJvbSAnQHNlbnRyeS1pbnRlcm5hbC9icm93c2VyLXV0aWxzJztcbmltcG9ydCB7IERFQlVHX0JVSUxEIH0gZnJvbSAnLi4vZGVidWctYnVpbGQuanMnO1xuaW1wb3J0IHsgV0lORE9XLCBnZXRIdHRwUmVxdWVzdERhdGEgfSBmcm9tICcuLi9oZWxwZXJzLmpzJztcbmltcG9ydCB7IHJlZ2lzdGVyQmFja2dyb3VuZFRhYkRldGVjdGlvbiB9IGZyb20gJy4vYmFja2dyb3VuZHRhYi5qcyc7XG5pbXBvcnQgeyBsaW5rVHJhY2VzIH0gZnJvbSAnLi9saW5rZWRUcmFjZXMuanMnO1xuaW1wb3J0IHsgZGVmYXVsdFJlcXVlc3RJbnN0cnVtZW50YXRpb25PcHRpb25zLCBpbnN0cnVtZW50T3V0Z29pbmdSZXF1ZXN0cyB9IGZyb20gJy4vcmVxdWVzdC5qcyc7XG5cbmNvbnN0IEJST1dTRVJfVFJBQ0lOR19JTlRFR1JBVElPTl9JRCA9ICdCcm93c2VyVHJhY2luZyc7XG5cbmNvbnN0IERFRkFVTFRfQlJPV1NFUl9UUkFDSU5HX09QVElPTlMgPSB7XG4gIC4uLlRSQUNJTkdfREVGQVVMVFMsXG4gIGluc3RydW1lbnROYXZpZ2F0aW9uOiB0cnVlLFxuICBpbnN0cnVtZW50UGFnZUxvYWQ6IHRydWUsXG4gIG1hcmtCYWNrZ3JvdW5kU3BhbjogdHJ1ZSxcbiAgZW5hYmxlTG9uZ1Rhc2s6IHRydWUsXG4gIGVuYWJsZUxvbmdBbmltYXRpb25GcmFtZTogdHJ1ZSxcbiAgZW5hYmxlSW5wOiB0cnVlLFxuICBlbmFibGVFbGVtZW50VGltaW5nOiB0cnVlLFxuICBpZ25vcmVSZXNvdXJjZVNwYW5zOiBbXSxcbiAgaWdub3JlUGVyZm9ybWFuY2VBcGlTcGFuczogW10sXG4gIGRldGVjdFJlZGlyZWN0czogdHJ1ZSxcbiAgbGlua1ByZXZpb3VzVHJhY2U6ICdpbi1tZW1vcnknLFxuICBjb25zaXN0ZW50VHJhY2VTYW1wbGluZzogZmFsc2UsXG4gIF9leHBlcmltZW50czoge30sXG4gIC4uLmRlZmF1bHRSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucyxcbn07XG5cbi8qKlxuICogVGhlIEJyb3dzZXIgVHJhY2luZyBpbnRlZ3JhdGlvbiBhdXRvbWF0aWNhbGx5IGluc3RydW1lbnRzIGJyb3dzZXIgcGFnZWxvYWQvbmF2aWdhdGlvblxuICogYWN0aW9ucyBhcyB0cmFuc2FjdGlvbnMsIGFuZCBjYXB0dXJlcyByZXF1ZXN0cywgbWV0cmljcyBhbmQgZXJyb3JzIGFzIHNwYW5zLlxuICpcbiAqIFRoZSBpbnRlZ3JhdGlvbiBjYW4gYmUgY29uZmlndXJlZCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLCBhbmQgY2FuIGJlIGV4dGVuZGVkIHRvIHVzZVxuICogYW55IHJvdXRpbmcgbGlicmFyeS5cbiAqXG4gKiBXZSBleHBsaWNpdGx5IGV4cG9ydCB0aGUgcHJvcGVyIHR5cGUgaGVyZSwgYXMgdGhpcyBoYXMgdG8gYmUgZXh0ZW5kZWQgaW4gc29tZSBjYXNlcy5cbiAqL1xuY29uc3QgYnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbiA9ICgoX29wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBsYXRlc3RSb3V0ZSA9IHtcbiAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgc291cmNlOiB1bmRlZmluZWQsXG4gIH07XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMganVzdCBhIHNtYWxsIHdyYXBwZXIgdGhhdCBtYWtlcyBgZG9jdW1lbnRgIG9wdGlvbmFsLlxuICAgKiBXZSB3YW50IHRvIGJlIGV4dHJhLXNhZmUgYW5kIGFsd2F5cyBjaGVjayB0aGF0IHRoaXMgZXhpc3RzLCB0byBlbnN1cmUgd2VpcmQgZW52aXJvbm1lbnRzIGRvIG5vdCBibG93IHVwLlxuICAgKi9cbiAgY29uc3Qgb3B0aW9uYWxXaW5kb3dEb2N1bWVudCA9IFdJTkRPVy5kb2N1bWVudCA7XG5cbiAgY29uc3Qge1xuICAgIGVuYWJsZUlucCxcbiAgICBlbmFibGVFbGVtZW50VGltaW5nLFxuICAgIGVuYWJsZUxvbmdUYXNrLFxuICAgIGVuYWJsZUxvbmdBbmltYXRpb25GcmFtZSxcbiAgICBfZXhwZXJpbWVudHM6IHsgZW5hYmxlSW50ZXJhY3Rpb25zLCBlbmFibGVTdGFuZGFsb25lQ2xzU3BhbnMsIGVuYWJsZVN0YW5kYWxvbmVMY3BTcGFucyB9LFxuICAgIGJlZm9yZVN0YXJ0U3BhbixcbiAgICBpZGxlVGltZW91dCxcbiAgICBmaW5hbFRpbWVvdXQsXG4gICAgY2hpbGRTcGFuVGltZW91dCxcbiAgICBtYXJrQmFja2dyb3VuZFNwYW4sXG4gICAgdHJhY2VGZXRjaCxcbiAgICB0cmFjZVhIUixcbiAgICB0cmFja0ZldGNoU3RyZWFtUGVyZm9ybWFuY2UsXG4gICAgc2hvdWxkQ3JlYXRlU3BhbkZvclJlcXVlc3QsXG4gICAgZW5hYmxlSFRUUFRpbWluZ3MsXG4gICAgaWdub3JlUmVzb3VyY2VTcGFucyxcbiAgICBpZ25vcmVQZXJmb3JtYW5jZUFwaVNwYW5zLFxuICAgIGluc3RydW1lbnRQYWdlTG9hZCxcbiAgICBpbnN0cnVtZW50TmF2aWdhdGlvbixcbiAgICBkZXRlY3RSZWRpcmVjdHMsXG4gICAgbGlua1ByZXZpb3VzVHJhY2UsXG4gICAgY29uc2lzdGVudFRyYWNlU2FtcGxpbmcsXG4gICAgb25SZXF1ZXN0U3BhblN0YXJ0LFxuICB9ID0ge1xuICAgIC4uLkRFRkFVTFRfQlJPV1NFUl9UUkFDSU5HX09QVElPTlMsXG4gICAgLi4uX29wdGlvbnMsXG4gIH07XG5cbiAgbGV0IF9jb2xsZWN0V2ViVml0YWxzO1xuICBsZXQgbGFzdEludGVyYWN0aW9uVGltZXN0YW1wO1xuXG4gIC8qKiBDcmVhdGUgcm91dGluZyBpZGxlIHRyYW5zYWN0aW9uLiAqL1xuICBmdW5jdGlvbiBfY3JlYXRlUm91dGVTcGFuKGNsaWVudCwgc3RhcnRTcGFuT3B0aW9ucywgbWFrZUFjdGl2ZSA9IHRydWUpIHtcbiAgICBjb25zdCBpc1BhZ2Vsb2FkVHJhbnNhY3Rpb24gPSBzdGFydFNwYW5PcHRpb25zLm9wID09PSAncGFnZWxvYWQnO1xuXG4gICAgY29uc3QgZmluYWxTdGFydFNwYW5PcHRpb25zID0gYmVmb3JlU3RhcnRTcGFuXG4gICAgICA/IGJlZm9yZVN0YXJ0U3BhbihzdGFydFNwYW5PcHRpb25zKVxuICAgICAgOiBzdGFydFNwYW5PcHRpb25zO1xuXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IGZpbmFsU3RhcnRTcGFuT3B0aW9ucy5hdHRyaWJ1dGVzIHx8IHt9O1xuXG4gICAgLy8gSWYgYGZpbmFsU3RhcnRTcGFuT3B0aW9ucy5uYW1lYCBpcyBkaWZmZXJlbnQgdGhhbiBgc3RhcnRTcGFuT3B0aW9ucy5uYW1lYFxuICAgIC8vIGl0IGlzIGJlY2F1c2UgYGJlZm9yZVN0YXJ0U3BhbmAgc2V0IGEgY3VzdG9tIG5hbWUuIFRoZXJlZm9yZSB3ZSBzZXQgdGhlIHNvdXJjZSB0byAnY3VzdG9tJy5cbiAgICBpZiAoc3RhcnRTcGFuT3B0aW9ucy5uYW1lICE9PSBmaW5hbFN0YXJ0U3Bhbk9wdGlvbnMubmFtZSkge1xuICAgICAgYXR0cmlidXRlc1tTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV0gPSAnY3VzdG9tJztcbiAgICAgIGZpbmFsU3RhcnRTcGFuT3B0aW9ucy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcztcbiAgICB9XG5cbiAgICBpZiAoIW1ha2VBY3RpdmUpIHtcbiAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoaXMgaGFzIDBzIGR1cmF0aW9uXG4gICAgICBjb25zdCBub3cgPSBkYXRlVGltZXN0YW1wSW5TZWNvbmRzKCk7XG4gICAgICBzdGFydEluYWN0aXZlU3Bhbih7XG4gICAgICAgIC4uLmZpbmFsU3RhcnRTcGFuT3B0aW9ucyxcbiAgICAgICAgc3RhcnRUaW1lOiBub3csXG4gICAgICB9KS5lbmQobm93KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsYXRlc3RSb3V0ZS5uYW1lID0gZmluYWxTdGFydFNwYW5PcHRpb25zLm5hbWU7XG4gICAgbGF0ZXN0Um91dGUuc291cmNlID0gYXR0cmlidXRlc1tTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV07XG5cbiAgICBjb25zdCBpZGxlU3BhbiA9IHN0YXJ0SWRsZVNwYW4oZmluYWxTdGFydFNwYW5PcHRpb25zLCB7XG4gICAgICBpZGxlVGltZW91dCxcbiAgICAgIGZpbmFsVGltZW91dCxcbiAgICAgIGNoaWxkU3BhblRpbWVvdXQsXG4gICAgICAvLyBzaG91bGQgd2FpdCBmb3IgZmluaXNoIHNpZ25hbCBpZiBpdCdzIGEgcGFnZWxvYWQgdHJhbnNhY3Rpb25cbiAgICAgIGRpc2FibGVBdXRvRmluaXNoOiBpc1BhZ2Vsb2FkVHJhbnNhY3Rpb24sXG4gICAgICBiZWZvcmVTcGFuRW5kOiBzcGFuID0+IHtcbiAgICAgICAgLy8gVGhpcyB3aWxsIGdlbmVyYWxseSBhbHdheXMgYmUgZGVmaW5lZCBoZXJlLCBiZWNhdXNlIGl0IGlzIHNldCBpbiBgc2V0dXAoKWAgb2YgdGhlIGludGVncmF0aW9uXG4gICAgICAgIC8vIGJ1dCB0ZWNobmljYWxseSwgaXQgaXMgb3B0aW9uYWwsIHNvIHdlIGd1YXJkIGhlcmUgdG8gYmUgZXh0cmEgc2FmZVxuICAgICAgICBfY29sbGVjdFdlYlZpdGFscz8uKCk7XG4gICAgICAgIGFkZFBlcmZvcm1hbmNlRW50cmllcyhzcGFuLCB7XG4gICAgICAgICAgcmVjb3JkQ2xzT25QYWdlbG9hZFNwYW46ICFlbmFibGVTdGFuZGFsb25lQ2xzU3BhbnMsXG4gICAgICAgICAgcmVjb3JkTGNwT25QYWdlbG9hZFNwYW46ICFlbmFibGVTdGFuZGFsb25lTGNwU3BhbnMsXG4gICAgICAgICAgaWdub3JlUmVzb3VyY2VTcGFucyxcbiAgICAgICAgICBpZ25vcmVQZXJmb3JtYW5jZUFwaVNwYW5zLFxuICAgICAgICB9KTtcbiAgICAgICAgc2V0QWN0aXZlSWRsZVNwYW4oY2xpZW50LCB1bmRlZmluZWQpO1xuXG4gICAgICAgIC8vIEEgdHJhY2Ugc2hvdWxkIHN0YXkgY29uc2lzdGVudCBvdmVyIHRoZSBlbnRpcmUgdGltZXNwYW4gb2Ygb25lIHJvdXRlIC0gZXZlbiBhZnRlciB0aGUgcGFnZWxvYWQvbmF2aWdhdGlvbiBlbmRlZC5cbiAgICAgICAgLy8gT25seSB3aGVuIGFub3RoZXIgbmF2aWdhdGlvbiBoYXBwZW5zLCB3ZSB3YW50IHRvIGNyZWF0ZSBhIG5ldyB0cmFjZS5cbiAgICAgICAgLy8gVGhpcyB3YXksIGUuZy4gZXJyb3JzIHRoYXQgb2NjdXIgYWZ0ZXIgdGhlIHBhZ2Vsb2FkIHNwYW4gZW5kZWQgYXJlIHN0aWxsIGFzc29jaWF0ZWQgdG8gdGhlIHBhZ2Vsb2FkIHRyYWNlLlxuICAgICAgICBjb25zdCBzY29wZSA9IGdldEN1cnJlbnRTY29wZSgpO1xuICAgICAgICBjb25zdCBvbGRQcm9wYWdhdGlvbkNvbnRleHQgPSBzY29wZS5nZXRQcm9wYWdhdGlvbkNvbnRleHQoKTtcblxuICAgICAgICBzY29wZS5zZXRQcm9wYWdhdGlvbkNvbnRleHQoe1xuICAgICAgICAgIC4uLm9sZFByb3BhZ2F0aW9uQ29udGV4dCxcbiAgICAgICAgICB0cmFjZUlkOiBpZGxlU3Bhbi5zcGFuQ29udGV4dCgpLnRyYWNlSWQsXG4gICAgICAgICAgc2FtcGxlZDogc3BhbklzU2FtcGxlZChpZGxlU3BhbiksXG4gICAgICAgICAgZHNjOiBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4oc3BhbiksXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHNldEFjdGl2ZUlkbGVTcGFuKGNsaWVudCwgaWRsZVNwYW4pO1xuXG4gICAgZnVuY3Rpb24gZW1pdEZpbmlzaCgpIHtcbiAgICAgIGlmIChvcHRpb25hbFdpbmRvd0RvY3VtZW50ICYmIFsnaW50ZXJhY3RpdmUnLCAnY29tcGxldGUnXS5pbmNsdWRlcyhvcHRpb25hbFdpbmRvd0RvY3VtZW50LnJlYWR5U3RhdGUpKSB7XG4gICAgICAgIGNsaWVudC5lbWl0KCdpZGxlU3BhbkVuYWJsZUF1dG9GaW5pc2gnLCBpZGxlU3Bhbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzUGFnZWxvYWRUcmFuc2FjdGlvbiAmJiBvcHRpb25hbFdpbmRvd0RvY3VtZW50KSB7XG4gICAgICBvcHRpb25hbFdpbmRvd0RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3JlYWR5c3RhdGVjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgIGVtaXRGaW5pc2goKTtcbiAgICAgIH0pO1xuXG4gICAgICBlbWl0RmluaXNoKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBCUk9XU0VSX1RSQUNJTkdfSU5URUdSQVRJT05fSUQsXG4gICAgc2V0dXAoY2xpZW50KSB7XG4gICAgICByZWdpc3RlclNwYW5FcnJvckluc3RydW1lbnRhdGlvbigpO1xuXG4gICAgICBfY29sbGVjdFdlYlZpdGFscyA9IHN0YXJ0VHJhY2tpbmdXZWJWaXRhbHMoe1xuICAgICAgICByZWNvcmRDbHNTdGFuZGFsb25lU3BhbnM6IGVuYWJsZVN0YW5kYWxvbmVDbHNTcGFucyB8fCBmYWxzZSxcbiAgICAgICAgcmVjb3JkTGNwU3RhbmRhbG9uZVNwYW5zOiBlbmFibGVTdGFuZGFsb25lTGNwU3BhbnMgfHwgZmFsc2UsXG4gICAgICAgIGNsaWVudCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZW5hYmxlSW5wKSB7XG4gICAgICAgIHN0YXJ0VHJhY2tpbmdJTlAoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVuYWJsZUVsZW1lbnRUaW1pbmcpIHtcbiAgICAgICAgc3RhcnRUcmFja2luZ0VsZW1lbnRUaW1pbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBlbmFibGVMb25nQW5pbWF0aW9uRnJhbWUgJiZcbiAgICAgICAgR0xPQkFMX09CSi5QZXJmb3JtYW5jZU9ic2VydmVyICYmXG4gICAgICAgIFBlcmZvcm1hbmNlT2JzZXJ2ZXIuc3VwcG9ydGVkRW50cnlUeXBlcyAmJlxuICAgICAgICBQZXJmb3JtYW5jZU9ic2VydmVyLnN1cHBvcnRlZEVudHJ5VHlwZXMuaW5jbHVkZXMoJ2xvbmctYW5pbWF0aW9uLWZyYW1lJylcbiAgICAgICkge1xuICAgICAgICBzdGFydFRyYWNraW5nTG9uZ0FuaW1hdGlvbkZyYW1lcygpO1xuICAgICAgfSBlbHNlIGlmIChlbmFibGVMb25nVGFzaykge1xuICAgICAgICBzdGFydFRyYWNraW5nTG9uZ1Rhc2tzKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmFibGVJbnRlcmFjdGlvbnMpIHtcbiAgICAgICAgc3RhcnRUcmFja2luZ0ludGVyYWN0aW9ucygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGV0ZWN0UmVkaXJlY3RzICYmIG9wdGlvbmFsV2luZG93RG9jdW1lbnQpIHtcbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25IYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAgIGxhc3RJbnRlcmFjdGlvblRpbWVzdGFtcCA9IHRpbWVzdGFtcEluU2Vjb25kcygpO1xuICAgICAgICB9O1xuICAgICAgICBhZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGludGVyYWN0aW9uSGFuZGxlciwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgICBhZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaW50ZXJhY3Rpb25IYW5kbGVyLCB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIG1heWJlRW5kQWN0aXZlU3BhbigpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlU3BhbiA9IGdldEFjdGl2ZUlkbGVTcGFuKGNsaWVudCk7XG5cbiAgICAgICAgaWYgKGFjdGl2ZVNwYW4gJiYgIXNwYW5Ub0pTT04oYWN0aXZlU3BhbikudGltZXN0YW1wKSB7XG4gICAgICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKGBbVHJhY2luZ10gRmluaXNoaW5nIGN1cnJlbnQgYWN0aXZlIHNwYW4gd2l0aCBvcDogJHtzcGFuVG9KU09OKGFjdGl2ZVNwYW4pLm9wfWApO1xuICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW4gb3BlbiBhY3RpdmUgc3Bhbiwgd2UgbmVlZCB0byBmaW5pc2ggaXQgYmVmb3JlIGNyZWF0aW5nIGFuIG5ldyBvbmUuXG4gICAgICAgICAgYWN0aXZlU3Bhbi5zZXRBdHRyaWJ1dGUoU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9JRExFX1NQQU5fRklOSVNIX1JFQVNPTiwgJ2NhbmNlbGxlZCcpO1xuICAgICAgICAgIGFjdGl2ZVNwYW4uZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2xpZW50Lm9uKCdzdGFydE5hdmlnYXRpb25TcGFuJywgKHN0YXJ0U3Bhbk9wdGlvbnMsIG5hdmlnYXRpb25PcHRpb25zKSA9PiB7XG4gICAgICAgIGlmIChnZXRDbGllbnQoKSAhPT0gY2xpZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hdmlnYXRpb25PcHRpb25zPy5pc1JlZGlyZWN0KSB7XG4gICAgICAgICAgREVCVUdfQlVJTEQgJiZcbiAgICAgICAgICAgIGRlYnVnLndhcm4oJ1tUcmFjaW5nXSBEZXRlY3RlZCByZWRpcmVjdCwgbmF2aWdhdGlvbiBzcGFuIHdpbGwgbm90IGJlIHRoZSByb290IHNwYW4sIGJ1dCBhIGNoaWxkIHNwYW4uJyk7XG4gICAgICAgICAgX2NyZWF0ZVJvdXRlU3BhbihcbiAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb3A6ICduYXZpZ2F0aW9uLnJlZGlyZWN0JyxcbiAgICAgICAgICAgICAgLi4uc3RhcnRTcGFuT3B0aW9ucyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG1heWJlRW5kQWN0aXZlU3BhbigpO1xuXG4gICAgICAgIGdldElzb2xhdGlvblNjb3BlKCkuc2V0UHJvcGFnYXRpb25Db250ZXh0KHsgdHJhY2VJZDogZ2VuZXJhdGVUcmFjZUlkKCksIHNhbXBsZVJhbmQ6IE1hdGgucmFuZG9tKCkgfSk7XG5cbiAgICAgICAgY29uc3Qgc2NvcGUgPSBnZXRDdXJyZW50U2NvcGUoKTtcbiAgICAgICAgc2NvcGUuc2V0UHJvcGFnYXRpb25Db250ZXh0KHsgdHJhY2VJZDogZ2VuZXJhdGVUcmFjZUlkKCksIHNhbXBsZVJhbmQ6IE1hdGgucmFuZG9tKCkgfSk7XG4gICAgICAgIC8vIFdlIHJlc2V0IHRoaXMgdG8gZW5zdXJlIHdlIGRvIG5vdCBoYXZlIGxpbmdlcmluZyBpbmNvcnJlY3QgZGF0YSBoZXJlXG4gICAgICAgIC8vIHBsYWNlcyB0aGF0IGNhbGwgdGhpcyBob29rIG1heSBzZXQgdGhpcyB3aGVyZSBhcHByb3ByaWF0ZSAtIGVsc2UsIHRoZSBVUkwgYXQgc3BhbiBzZW5kaW5nIHRpbWUgaXMgdXNlZFxuICAgICAgICBzY29wZS5zZXRTREtQcm9jZXNzaW5nTWV0YWRhdGEoe1xuICAgICAgICAgIG5vcm1hbGl6ZWRSZXF1ZXN0OiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIF9jcmVhdGVSb3V0ZVNwYW4oY2xpZW50LCB7XG4gICAgICAgICAgb3A6ICduYXZpZ2F0aW9uJyxcbiAgICAgICAgICAuLi5zdGFydFNwYW5PcHRpb25zLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjbGllbnQub24oJ3N0YXJ0UGFnZUxvYWRTcGFuJywgKHN0YXJ0U3Bhbk9wdGlvbnMsIHRyYWNlT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGlmIChnZXRDbGllbnQoKSAhPT0gY2xpZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG1heWJlRW5kQWN0aXZlU3BhbigpO1xuXG4gICAgICAgIGNvbnN0IHNlbnRyeVRyYWNlID0gdHJhY2VPcHRpb25zLnNlbnRyeVRyYWNlIHx8IGdldE1ldGFDb250ZW50KCdzZW50cnktdHJhY2UnKTtcbiAgICAgICAgY29uc3QgYmFnZ2FnZSA9IHRyYWNlT3B0aW9ucy5iYWdnYWdlIHx8IGdldE1ldGFDb250ZW50KCdiYWdnYWdlJyk7XG5cbiAgICAgICAgY29uc3QgcHJvcGFnYXRpb25Db250ZXh0ID0gcHJvcGFnYXRpb25Db250ZXh0RnJvbUhlYWRlcnMoc2VudHJ5VHJhY2UsIGJhZ2dhZ2UpO1xuXG4gICAgICAgIGNvbnN0IHNjb3BlID0gZ2V0Q3VycmVudFNjb3BlKCk7XG4gICAgICAgIHNjb3BlLnNldFByb3BhZ2F0aW9uQ29udGV4dChwcm9wYWdhdGlvbkNvbnRleHQpO1xuXG4gICAgICAgIC8vIFdlIHN0b3JlIHRoZSBub3JtYWxpemVkIHJlcXVlc3QgZGF0YSBvbiB0aGUgc2NvcGUsIHNvIHdlIGdldCB0aGUgcmVxdWVzdCBkYXRhIGF0IHRpbWUgb2Ygc3BhbiBjcmVhdGlvblxuICAgICAgICAvLyBvdGhlcndpc2UsIHRoZSBVUkwgZXRjLiBtYXkgYWxyZWFkeSBiZSBvZiB0aGUgZm9sbG93aW5nIG5hdmlnYXRpb24sIGFuZCB3ZSdkIHJlcG9ydCB0aGUgd3JvbmcgVVJMXG4gICAgICAgIHNjb3BlLnNldFNES1Byb2Nlc3NpbmdNZXRhZGF0YSh7XG4gICAgICAgICAgbm9ybWFsaXplZFJlcXVlc3Q6IGdldEh0dHBSZXF1ZXN0RGF0YSgpLFxuICAgICAgICB9KTtcblxuICAgICAgICBfY3JlYXRlUm91dGVTcGFuKGNsaWVudCwge1xuICAgICAgICAgIG9wOiAncGFnZWxvYWQnLFxuICAgICAgICAgIC4uLnN0YXJ0U3Bhbk9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBhZnRlckFsbFNldHVwKGNsaWVudCkge1xuICAgICAgbGV0IHN0YXJ0aW5nVXJsID0gZ2V0TG9jYXRpb25IcmVmKCk7XG5cbiAgICAgIGlmIChsaW5rUHJldmlvdXNUcmFjZSAhPT0gJ29mZicpIHtcbiAgICAgICAgbGlua1RyYWNlcyhjbGllbnQsIHsgbGlua1ByZXZpb3VzVHJhY2UsIGNvbnNpc3RlbnRUcmFjZVNhbXBsaW5nIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoV0lORE9XLmxvY2F0aW9uKSB7XG4gICAgICAgIGlmIChpbnN0cnVtZW50UGFnZUxvYWQpIHtcbiAgICAgICAgICBjb25zdCBvcmlnaW4gPSBicm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luKCk7XG4gICAgICAgICAgc3RhcnRCcm93c2VyVHJhY2luZ1BhZ2VMb2FkU3BhbihjbGllbnQsIHtcbiAgICAgICAgICAgIG5hbWU6IFdJTkRPVy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgICAgIC8vIHBhZ2Vsb2FkIHNob3VsZCBhbHdheXMgc3RhcnQgYXQgdGltZU9yaWdpbiAoYW5kIG5lZWRzIHRvIGJlIGluIHMsIG5vdCBtcylcbiAgICAgICAgICAgIHN0YXJ0VGltZTogb3JpZ2luID8gb3JpZ2luIC8gMTAwMCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFXTogJ3VybCcsXG4gICAgICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06ICdhdXRvLnBhZ2Vsb2FkLmJyb3dzZXInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnN0cnVtZW50TmF2aWdhdGlvbikge1xuICAgICAgICAgIGFkZEhpc3RvcnlJbnN0cnVtZW50YXRpb25IYW5kbGVyKCh7IHRvLCBmcm9tIH0pID0+IHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhpcyBlYXJseSByZXR1cm4gaXMgdGhlcmUgdG8gYWNjb3VudCBmb3Igc29tZSBjYXNlcyB3aGVyZSBhIG5hdmlnYXRpb24gdHJhbnNhY3Rpb24gc3RhcnRzIHJpZ2h0IGFmdGVyXG4gICAgICAgICAgICAgKiBsb25nLXJ1bm5pbmcgcGFnZWxvYWQuIFdlIG1ha2Ugc3VyZSB0aGF0IGlmIGBmcm9tYCBpcyB1bmRlZmluZWQgYW5kIGEgdmFsaWQgYHN0YXJ0aW5nVVJMYCBleGlzdHMsIHdlIGRvbid0XG4gICAgICAgICAgICAgKiBjcmVhdGUgYW4gdW5lY2Nlc3NhcnkgbmF2aWdhdGlvbiB0cmFuc2FjdGlvbi5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBUaGlzIHdhcyBoYXJkIHRvIGR1cGxpY2F0ZSwgYnV0IHRoaXMgYmVoYXZpb3Igc3RvcHBlZCBhcyBzb29uIGFzIHRoaXMgZml4IHdhcyBhcHBsaWVkLiBUaGlzIGlzc3VlIG1pZ2h0IGFsc29cbiAgICAgICAgICAgICAqIG9ubHkgYmUgY2F1c2VkIGluIGNlcnRhaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIHdoZXJlIHRoZSB1c2FnZSBvZiBhIGhvdCBtb2R1bGUgcmVsb2FkZXIgaXMgY2F1c2luZ1xuICAgICAgICAgICAgICogZXJyb3JzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoZnJvbSA9PT0gdW5kZWZpbmVkICYmIHN0YXJ0aW5nVXJsPy5pbmRleE9mKHRvKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgc3RhcnRpbmdVcmwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhcnRpbmdVcmwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVN0cmluZ1RvVVJMT2JqZWN0KHRvKTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZVNwYW4gPSBnZXRBY3RpdmVJZGxlU3BhbihjbGllbnQpO1xuICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvbklzUmVkaXJlY3QgPVxuICAgICAgICAgICAgICBhY3RpdmVTcGFuICYmIGRldGVjdFJlZGlyZWN0cyAmJiBpc1JlZGlyZWN0KGFjdGl2ZVNwYW4sIGxhc3RJbnRlcmFjdGlvblRpbWVzdGFtcCk7XG4gICAgICAgICAgICBzdGFydEJyb3dzZXJUcmFjaW5nTmF2aWdhdGlvblNwYW4oXG4gICAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IHBhcnNlZD8ucGF0aG5hbWUgfHwgV0lORE9XLmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV06ICd1cmwnLFxuICAgICAgICAgICAgICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOXTogJ2F1dG8ubmF2aWdhdGlvbi5icm93c2VyJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7IHVybDogdG8sIGlzUmVkaXJlY3Q6IG5hdmlnYXRpb25Jc1JlZGlyZWN0IH0sXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXJrQmFja2dyb3VuZFNwYW4pIHtcbiAgICAgICAgcmVnaXN0ZXJCYWNrZ3JvdW5kVGFiRGV0ZWN0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmFibGVJbnRlcmFjdGlvbnMpIHtcbiAgICAgICAgcmVnaXN0ZXJJbnRlcmFjdGlvbkxpc3RlbmVyKGNsaWVudCwgaWRsZVRpbWVvdXQsIGZpbmFsVGltZW91dCwgY2hpbGRTcGFuVGltZW91dCwgbGF0ZXN0Um91dGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZW5hYmxlSW5wKSB7XG4gICAgICAgIHJlZ2lzdGVySW5wSW50ZXJhY3Rpb25MaXN0ZW5lcigpO1xuICAgICAgfVxuXG4gICAgICBpbnN0cnVtZW50T3V0Z29pbmdSZXF1ZXN0cyhjbGllbnQsIHtcbiAgICAgICAgdHJhY2VGZXRjaCxcbiAgICAgICAgdHJhY2VYSFIsXG4gICAgICAgIHRyYWNrRmV0Y2hTdHJlYW1QZXJmb3JtYW5jZSxcbiAgICAgICAgdHJhY2VQcm9wYWdhdGlvblRhcmdldHM6IGNsaWVudC5nZXRPcHRpb25zKCkudHJhY2VQcm9wYWdhdGlvblRhcmdldHMsXG4gICAgICAgIHNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0LFxuICAgICAgICBlbmFibGVIVFRQVGltaW5ncyxcbiAgICAgICAgb25SZXF1ZXN0U3BhblN0YXJ0LFxuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuLyoqXG4gKiBNYW51YWxseSBzdGFydCBhIHBhZ2UgbG9hZCBzcGFuLlxuICogVGhpcyB3aWxsIG9ubHkgZG8gc29tZXRoaW5nIGlmIGEgYnJvd3NlciB0cmFjaW5nIGludGVncmF0aW9uIGludGVncmF0aW9uIGhhcyBiZWVuIHNldHVwLlxuICpcbiAqIElmIHlvdSBwcm92aWRlIGEgY3VzdG9tIGB0cmFjZU9wdGlvbnNgIG9iamVjdCwgaXQgd2lsbCBiZSB1c2VkIHRvIGNvbnRpbnVlIHRoZSB0cmFjZVxuICogaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBiZWhhdmlvciwgd2hpY2ggaXMgdG8gbG9vayBpdCB1cCBvbiB0aGUgPG1ldGE+IHRhZ3MuXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0QnJvd3NlclRyYWNpbmdQYWdlTG9hZFNwYW4oXG4gIGNsaWVudCxcbiAgc3Bhbk9wdGlvbnMsXG4gIHRyYWNlT3B0aW9ucyxcbikge1xuICBjbGllbnQuZW1pdCgnc3RhcnRQYWdlTG9hZFNwYW4nLCBzcGFuT3B0aW9ucywgdHJhY2VPcHRpb25zKTtcbiAgZ2V0Q3VycmVudFNjb3BlKCkuc2V0VHJhbnNhY3Rpb25OYW1lKHNwYW5PcHRpb25zLm5hbWUpO1xuXG4gIGNvbnN0IHBhZ2Vsb2FkU3BhbiA9IGdldEFjdGl2ZUlkbGVTcGFuKGNsaWVudCk7XG5cbiAgaWYgKHBhZ2Vsb2FkU3Bhbikge1xuICAgIGNsaWVudC5lbWl0KCdhZnRlclN0YXJ0UGFnZUxvYWRTcGFuJywgcGFnZWxvYWRTcGFuKTtcbiAgfVxuXG4gIHJldHVybiBwYWdlbG9hZFNwYW47XG59XG5cbi8qKlxuICogTWFudWFsbHkgc3RhcnQgYSBuYXZpZ2F0aW9uIHNwYW4uXG4gKiBUaGlzIHdpbGwgb25seSBkbyBzb21ldGhpbmcgaWYgYSBicm93c2VyIHRyYWNpbmcgaW50ZWdyYXRpb24gaGFzIGJlZW4gc2V0dXAuXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0QnJvd3NlclRyYWNpbmdOYXZpZ2F0aW9uU3BhbihcbiAgY2xpZW50LFxuICBzcGFuT3B0aW9ucyxcbiAgb3B0aW9ucyxcbikge1xuICBjb25zdCB7IHVybCwgaXNSZWRpcmVjdCB9ID0gb3B0aW9ucyB8fCB7fTtcbiAgY2xpZW50LmVtaXQoJ2JlZm9yZVN0YXJ0TmF2aWdhdGlvblNwYW4nLCBzcGFuT3B0aW9ucywgeyBpc1JlZGlyZWN0IH0pO1xuICBjbGllbnQuZW1pdCgnc3RhcnROYXZpZ2F0aW9uU3BhbicsIHNwYW5PcHRpb25zLCB7IGlzUmVkaXJlY3QgfSk7XG5cbiAgY29uc3Qgc2NvcGUgPSBnZXRDdXJyZW50U2NvcGUoKTtcbiAgc2NvcGUuc2V0VHJhbnNhY3Rpb25OYW1lKHNwYW5PcHRpb25zLm5hbWUpO1xuXG4gIC8vIFdlIHN0b3JlIHRoZSBub3JtYWxpemVkIHJlcXVlc3QgZGF0YSBvbiB0aGUgc2NvcGUsIHNvIHdlIGdldCB0aGUgcmVxdWVzdCBkYXRhIGF0IHRpbWUgb2Ygc3BhbiBjcmVhdGlvblxuICAvLyBvdGhlcndpc2UsIHRoZSBVUkwgZXRjLiBtYXkgYWxyZWFkeSBiZSBvZiB0aGUgZm9sbG93aW5nIG5hdmlnYXRpb24sIGFuZCB3ZSdkIHJlcG9ydCB0aGUgd3JvbmcgVVJMXG4gIGlmICh1cmwgJiYgIWlzUmVkaXJlY3QpIHtcbiAgICBzY29wZS5zZXRTREtQcm9jZXNzaW5nTWV0YWRhdGEoe1xuICAgICAgbm9ybWFsaXplZFJlcXVlc3Q6IHtcbiAgICAgICAgLi4uZ2V0SHR0cFJlcXVlc3REYXRhKCksXG4gICAgICAgIHVybCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZ2V0QWN0aXZlSWRsZVNwYW4oY2xpZW50KTtcbn1cblxuLyoqIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgbWV0YSB0YWcgKi9cbmZ1bmN0aW9uIGdldE1ldGFDb250ZW50KG1ldGFOYW1lKSB7XG4gIC8qKlxuICAgKiBUaGlzIGlzIGp1c3QgYSBzbWFsbCB3cmFwcGVyIHRoYXQgbWFrZXMgYGRvY3VtZW50YCBvcHRpb25hbC5cbiAgICogV2Ugd2FudCB0byBiZSBleHRyYS1zYWZlIGFuZCBhbHdheXMgY2hlY2sgdGhhdCB0aGlzIGV4aXN0cywgdG8gZW5zdXJlIHdlaXJkIGVudmlyb25tZW50cyBkbyBub3QgYmxvdyB1cC5cbiAgICovXG4gIGNvbnN0IG9wdGlvbmFsV2luZG93RG9jdW1lbnQgPSBXSU5ET1cuZG9jdW1lbnQgO1xuXG4gIGNvbnN0IG1ldGFUYWcgPSBvcHRpb25hbFdpbmRvd0RvY3VtZW50Py5xdWVyeVNlbGVjdG9yKGBtZXRhW25hbWU9JHttZXRhTmFtZX1dYCk7XG4gIHJldHVybiBtZXRhVGFnPy5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnQnKSB8fCB1bmRlZmluZWQ7XG59XG5cbi8qKiBTdGFydCBsaXN0ZW5lciBmb3IgaW50ZXJhY3Rpb24gdHJhbnNhY3Rpb25zICovXG5mdW5jdGlvbiByZWdpc3RlckludGVyYWN0aW9uTGlzdGVuZXIoXG4gIGNsaWVudCxcbiAgaWRsZVRpbWVvdXQsXG4gIGZpbmFsVGltZW91dCxcbiAgY2hpbGRTcGFuVGltZW91dCxcbiAgbGF0ZXN0Um91dGUsXG4pIHtcbiAgLyoqXG4gICAqIFRoaXMgaXMganVzdCBhIHNtYWxsIHdyYXBwZXIgdGhhdCBtYWtlcyBgZG9jdW1lbnRgIG9wdGlvbmFsLlxuICAgKiBXZSB3YW50IHRvIGJlIGV4dHJhLXNhZmUgYW5kIGFsd2F5cyBjaGVjayB0aGF0IHRoaXMgZXhpc3RzLCB0byBlbnN1cmUgd2VpcmQgZW52aXJvbm1lbnRzIGRvIG5vdCBibG93IHVwLlxuICAgKi9cbiAgY29uc3Qgb3B0aW9uYWxXaW5kb3dEb2N1bWVudCA9IFdJTkRPVy5kb2N1bWVudCA7XG5cbiAgbGV0IGluZmxpZ2h0SW50ZXJhY3Rpb25TcGFuO1xuICBjb25zdCByZWdpc3RlckludGVyYWN0aW9uVHJhbnNhY3Rpb24gPSAoKSA9PiB7XG4gICAgY29uc3Qgb3AgPSAndWkuYWN0aW9uLmNsaWNrJztcblxuICAgIGNvbnN0IGFjdGl2ZUlkbGVTcGFuID0gZ2V0QWN0aXZlSWRsZVNwYW4oY2xpZW50KTtcbiAgICBpZiAoYWN0aXZlSWRsZVNwYW4pIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRSb290U3Bhbk9wID0gc3BhblRvSlNPTihhY3RpdmVJZGxlU3Bhbikub3A7XG4gICAgICBpZiAoWyduYXZpZ2F0aW9uJywgJ3BhZ2Vsb2FkJ10uaW5jbHVkZXMoY3VycmVudFJvb3RTcGFuT3AgKSkge1xuICAgICAgICBERUJVR19CVUlMRCAmJlxuICAgICAgICAgIGRlYnVnLndhcm4oYFtUcmFjaW5nXSBEaWQgbm90IGNyZWF0ZSAke29wfSBzcGFuIGJlY2F1c2UgYSBwYWdlbG9hZCBvciBuYXZpZ2F0aW9uIHNwYW4gaXMgaW4gcHJvZ3Jlc3MuYCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGluZmxpZ2h0SW50ZXJhY3Rpb25TcGFuKSB7XG4gICAgICBpbmZsaWdodEludGVyYWN0aW9uU3Bhbi5zZXRBdHRyaWJ1dGUoU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9JRExFX1NQQU5fRklOSVNIX1JFQVNPTiwgJ2ludGVyYWN0aW9uSW50ZXJydXB0ZWQnKTtcbiAgICAgIGluZmxpZ2h0SW50ZXJhY3Rpb25TcGFuLmVuZCgpO1xuICAgICAgaW5mbGlnaHRJbnRlcmFjdGlvblNwYW4gPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFsYXRlc3RSb3V0ZS5uYW1lKSB7XG4gICAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy53YXJuKGBbVHJhY2luZ10gRGlkIG5vdCBjcmVhdGUgJHtvcH0gdHJhbnNhY3Rpb24gYmVjYXVzZSBfbGF0ZXN0Um91dGVOYW1lIGlzIG1pc3NpbmcuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGluZmxpZ2h0SW50ZXJhY3Rpb25TcGFuID0gc3RhcnRJZGxlU3BhbihcbiAgICAgIHtcbiAgICAgICAgbmFtZTogbGF0ZXN0Um91dGUubmFtZSxcbiAgICAgICAgb3AsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0VdOiBsYXRlc3RSb3V0ZS5zb3VyY2UgfHwgJ3VybCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZGxlVGltZW91dCxcbiAgICAgICAgZmluYWxUaW1lb3V0LFxuICAgICAgICBjaGlsZFNwYW5UaW1lb3V0LFxuICAgICAgfSxcbiAgICApO1xuICB9O1xuXG4gIGlmIChvcHRpb25hbFdpbmRvd0RvY3VtZW50KSB7XG4gICAgYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZWdpc3RlckludGVyYWN0aW9uVHJhbnNhY3Rpb24sIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfVxufVxuXG4vLyBXZSBzdG9yZSB0aGUgYWN0aXZlIGlkbGUgc3BhbiBvbiB0aGUgY2xpZW50IG9iamVjdCwgc28gd2UgY2FuIGFjY2VzcyBpdCBmcm9tIGV4cG9ydGVkIGZ1bmN0aW9uc1xuY29uc3QgQUNUSVZFX0lETEVfU1BBTl9QUk9QRVJUWSA9ICdfc2VudHJ5X2lkbGVTcGFuJztcbmZ1bmN0aW9uIGdldEFjdGl2ZUlkbGVTcGFuKGNsaWVudCkge1xuICByZXR1cm4gKGNsaWVudCApW0FDVElWRV9JRExFX1NQQU5fUFJPUEVSVFldO1xufVxuXG5mdW5jdGlvbiBzZXRBY3RpdmVJZGxlU3BhbihjbGllbnQsIHNwYW4pIHtcbiAgYWRkTm9uRW51bWVyYWJsZVByb3BlcnR5KGNsaWVudCwgQUNUSVZFX0lETEVfU1BBTl9QUk9QRVJUWSwgc3Bhbik7XG59XG5cbi8vIFRoZSBtYXguIHRpbWUgaW4gc2Vjb25kcyBiZXR3ZWVuIHR3byBwYWdlbG9hZC9uYXZpZ2F0aW9uIHNwYW5zIHRoYXQgbWFrZXMgdXMgY29uc2lkZXIgdGhlIHNlY29uZCBvbmUgYSByZWRpcmVjdFxuY29uc3QgUkVESVJFQ1RfVEhSRVNIT0xEID0gMC4zO1xuXG5mdW5jdGlvbiBpc1JlZGlyZWN0KGFjdGl2ZVNwYW4sIGxhc3RJbnRlcmFjdGlvblRpbWVzdGFtcCkge1xuICBjb25zdCBzcGFuRGF0YSA9IHNwYW5Ub0pTT04oYWN0aXZlU3Bhbik7XG5cbiAgY29uc3Qgbm93ID0gZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpO1xuXG4gIC8vIE1vcmUgdGhhbiAzMDBtcyBzaW5jZSBsYXN0IG5hdmlnYXRpb24vcGFnZWxvYWQgc3Bhbj9cbiAgLy8gLS0+IG5ldmVyIGNvbnNpZGVyIHRoaXMgYSByZWRpcmVjdFxuICBjb25zdCBzdGFydFRpbWVzdGFtcCA9IHNwYW5EYXRhLnN0YXJ0X3RpbWVzdGFtcDtcbiAgaWYgKG5vdyAtIHN0YXJ0VGltZXN0YW1wID4gUkVESVJFQ1RfVEhSRVNIT0xEKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQSBjbGljayBoYXBwZW5lZCBpbiB0aGUgbGFzdCAzMDBtcz9cbiAgLy8gLS0+IG5ldmVyIGNvbnNpZGVyIHRoaXMgYSByZWRpcmVjdFxuICBpZiAobGFzdEludGVyYWN0aW9uVGltZXN0YW1wICYmIG5vdyAtIGxhc3RJbnRlcmFjdGlvblRpbWVzdGFtcCA8PSBSRURJUkVDVF9USFJFU0hPTEQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IHsgQlJPV1NFUl9UUkFDSU5HX0lOVEVHUkFUSU9OX0lELCBicm93c2VyVHJhY2luZ0ludGVncmF0aW9uLCBnZXRNZXRhQ29udGVudCwgc3RhcnRCcm93c2VyVHJhY2luZ05hdmlnYXRpb25TcGFuLCBzdGFydEJyb3dzZXJUcmFjaW5nUGFnZUxvYWRTcGFuIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1icm93c2VyVHJhY2luZ0ludGVncmF0aW9uLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/browserTracingIntegration.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/linkedTraces.js":
/*!**********************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/linkedTraces.js ***!
  \**********************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   PREVIOUS_TRACE_KEY: () => (/* binding */ PREVIOUS_TRACE_KEY),\n/* harmony export */   PREVIOUS_TRACE_MAX_DURATION: () => (/* binding */ PREVIOUS_TRACE_MAX_DURATION),\n/* harmony export */   PREVIOUS_TRACE_TMP_SPAN_ATTRIBUTE: () => (/* binding */ PREVIOUS_TRACE_TMP_SPAN_ATTRIBUTE),\n/* harmony export */   addPreviousTraceSpanLink: () => (/* binding */ addPreviousTraceSpanLink),\n/* harmony export */   getPreviousTraceFromSessionStorage: () => (/* binding */ getPreviousTraceFromSessionStorage),\n/* harmony export */   linkTraces: () => (/* binding */ linkTraces),\n/* harmony export */   spanContextSampled: () => (/* binding */ spanContextSampled),\n/* harmony export */   storePreviousTraceInSessionStorage: () => (/* binding */ storePreviousTraceInSessionStorage)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/debug-build.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../helpers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\");\n/* harmony import */ var _sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @sentry-internal/browser-utils */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/index.js\");\n/* harmony import */ var _stack_parsers_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../stack-parsers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/stack-parsers.js\");\n/* harmony import */ var _integrations_breadcrumbs_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../integrations/breadcrumbs.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/breadcrumbs.js\");\n/* harmony import */ var _integrations_browserapierrors_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../integrations/browserapierrors.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/browserapierrors.js\");\n/* harmony import */ var _integrations_browsersession_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../integrations/browsersession.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/browsersession.js\");\n/* harmony import */ var _integrations_globalhandlers_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../integrations/globalhandlers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/globalhandlers.js\");\n/* harmony import */ var _integrations_httpcontext_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../integrations/httpcontext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/httpcontext.js\");\n/* harmony import */ var _integrations_linkederrors_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../integrations/linkederrors.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/integrations/linkederrors.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n// 1h in seconds\nconst PREVIOUS_TRACE_MAX_DURATION = 3600;\n\n// session storage key\nconst PREVIOUS_TRACE_KEY = 'sentry_previous_trace';\n\nconst PREVIOUS_TRACE_TMP_SPAN_ATTRIBUTE = 'sentry.previous_trace';\n\n/**\n * Takes care of linking traces and applying the (consistent) sampling behavoiour based on the passed options\n * @param options - options for linking traces and consistent trace sampling (@see BrowserTracingOptions)\n * @param client - Sentry client\n */\nfunction linkTraces(\n  client,\n  {\n    linkPreviousTrace,\n    consistentTraceSampling,\n  }\n\n,\n) {\n  const useSessionStorage = linkPreviousTrace === 'session-storage';\n\n  let inMemoryPreviousTraceInfo = useSessionStorage ? getPreviousTraceFromSessionStorage() : undefined;\n\n  client.on('spanStart', span => {\n    if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(span) !== span) {\n      return;\n    }\n\n    const oldPropagationContext = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)().getPropagationContext();\n    inMemoryPreviousTraceInfo = addPreviousTraceSpanLink(inMemoryPreviousTraceInfo, span, oldPropagationContext);\n\n    if (useSessionStorage) {\n      storePreviousTraceInSessionStorage(inMemoryPreviousTraceInfo);\n    }\n  });\n\n  let isFirstTraceOnPageload = true;\n  if (consistentTraceSampling) {\n    /*\n    When users opt into `consistentTraceSampling`, we need to ensure that we propagate\n    the previous trace's sample rate and rand to the current trace. This is necessary because otherwise, span\n    metric extrapolation is inaccurate, as we'd propagate too high of a sample rate for the subsequent traces.\n\n    So therefore, we pretend that the previous trace was the parent trace of the newly started trace. To do that,\n    we mutate the propagation context of the current trace and set the sample rate and sample rand of the previous trace.\n    Timing-wise, it is fine because it happens before we even sample the root span.\n\n    @see https://github.com/getsentry/sentry-javascript/issues/15754\n    */\n    client.on('beforeSampling', mutableSamplingContextData => {\n      if (!inMemoryPreviousTraceInfo) {\n        return;\n      }\n\n      const scope = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n      const currentPropagationContext = scope.getPropagationContext();\n\n      // We do not want to force-continue the sampling decision if we continue a trace\n      // that was started on the backend. Most prominently, this will happen in MPAs where\n      // users hard-navigate between pages. In this case, the sampling decision of a potentially\n      // started trace on the server takes precedence.\n      // Why? We want to prioritize inter-trace consistency over intra-trace consistency.\n      if (isFirstTraceOnPageload && currentPropagationContext.parentSpanId) {\n        isFirstTraceOnPageload = false;\n        return;\n      }\n\n      scope.setPropagationContext({\n        ...currentPropagationContext,\n        dsc: {\n          ...currentPropagationContext.dsc,\n          sample_rate: String(inMemoryPreviousTraceInfo.sampleRate),\n          sampled: String(spanContextSampled(inMemoryPreviousTraceInfo.spanContext)),\n        },\n        sampleRand: inMemoryPreviousTraceInfo.sampleRand,\n      });\n\n      mutableSamplingContextData.parentSampled = spanContextSampled(inMemoryPreviousTraceInfo.spanContext);\n      mutableSamplingContextData.parentSampleRate = inMemoryPreviousTraceInfo.sampleRate;\n\n      mutableSamplingContextData.spanAttributes = {\n        ...mutableSamplingContextData.spanAttributes,\n        [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE]: inMemoryPreviousTraceInfo.sampleRate,\n      };\n    });\n  }\n}\n\n/**\n * Adds a previous_trace span link to the passed span if the passed\n * previousTraceInfo is still valid.\n *\n * @returns the updated previous trace info (based on the current span/trace) to\n * be used on the next call\n */\nfunction addPreviousTraceSpanLink(\n  previousTraceInfo,\n  span,\n  oldPropagationContext,\n) {\n  const spanJson = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(span);\n\n  function getSampleRate() {\n    try {\n      return (\n        Number(oldPropagationContext.dsc?.sample_rate) ?? Number(spanJson.data?.[_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE])\n      );\n    } catch {\n      return 0;\n    }\n  }\n\n  const updatedPreviousTraceInfo = {\n    spanContext: span.spanContext(),\n    startTimestamp: spanJson.start_timestamp,\n    sampleRate: getSampleRate(),\n    sampleRand: oldPropagationContext.sampleRand,\n  };\n\n  if (!previousTraceInfo) {\n    return updatedPreviousTraceInfo;\n  }\n\n  const previousTraceSpanCtx = previousTraceInfo.spanContext;\n  if (previousTraceSpanCtx.traceId === spanJson.trace_id) {\n    // This means, we're still in the same trace so let's not update the previous trace info\n    // or add a link to the current span.\n    // Once we move away from the long-lived, route-based trace model, we can remove this cases\n    return previousTraceInfo;\n  }\n\n  // Only add the link if the startTimeStamp of the previous trace's root span is within\n  // PREVIOUS_TRACE_MAX_DURATION (1h) of the current root span's startTimestamp\n  // This is done to\n  // - avoid adding links to \"stale\" traces\n  // - enable more efficient querying for previous/next traces in Sentry\n  if (Date.now() / 1000 - previousTraceInfo.startTimestamp <= PREVIOUS_TRACE_MAX_DURATION) {\n    if (_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n      _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log(\n        `Adding previous_trace ${previousTraceSpanCtx} link to span ${{\n          op: spanJson.op,\n          ...span.spanContext(),\n        }}`,\n      );\n    }\n\n    span.addLink({\n      context: previousTraceSpanCtx,\n      attributes: {\n        [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE]: 'previous_trace',\n      },\n    });\n\n    // TODO: Remove this once EAP can store span links. We currently only set this attribute so that we\n    // can obtain the previous trace information from the EAP store. Long-term, EAP will handle\n    // span links and then we should remove this again. Also throwing in a TODO(v10), to remind us\n    // to check this at v10 time :)\n    span.setAttribute(\n      PREVIOUS_TRACE_TMP_SPAN_ATTRIBUTE,\n      `${previousTraceSpanCtx.traceId}-${previousTraceSpanCtx.spanId}-${\n        spanContextSampled(previousTraceSpanCtx) ? 1 : 0\n      }`,\n    );\n  }\n\n  return updatedPreviousTraceInfo;\n}\n\n/**\n * Stores @param previousTraceInfo in sessionStorage.\n */\nfunction storePreviousTraceInSessionStorage(previousTraceInfo) {\n  try {\n    _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.sessionStorage.setItem(PREVIOUS_TRACE_KEY, JSON.stringify(previousTraceInfo));\n  } catch (e) {\n    // Ignore potential errors (e.g. if sessionStorage is not available)\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn('Could not store previous trace in sessionStorage', e);\n  }\n}\n\n/**\n * Retrieves the previous trace from sessionStorage if available.\n */\nfunction getPreviousTraceFromSessionStorage() {\n  try {\n    const previousTraceInfo = _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.sessionStorage?.getItem(PREVIOUS_TRACE_KEY);\n    // @ts-expect-error - intentionally risking JSON.parse throwing when previousTraceInfo is null to save bundle size\n    return JSON.parse(previousTraceInfo);\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * see {@link import('@sentry/core').spanIsSampled}\n */\nfunction spanContextSampled(ctx) {\n  return ctx.traceFlags === 0x1;\n}\n\n\n//# sourceMappingURL=linkedTraces.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS90cmFjaW5nL2xpbmtlZFRyYWNlcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQStNO0FBQy9KO0FBQ1Q7QUFDQztBQUNYO0FBQ1c7QUFDSztBQUNGO0FBQ0E7QUFDSDtBQUNDOztBQUV6QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxRQUFRLHlEQUFXO0FBQ25CO0FBQ0E7O0FBRUEsa0NBQWtDLDZEQUFlO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLDZEQUFlO0FBQ25DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVMsOEZBQW9EO0FBQzdEO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHdEQUFVOztBQUU3QjtBQUNBO0FBQ0E7QUFDQSxpRkFBaUYsK0VBQXFDO0FBQ3RIO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsd0RBQVc7QUFDbkIsTUFBTSwrQ0FBSztBQUNYLGlDQUFpQyxzQkFBc0I7QUFDdkQ7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsMkVBQWlDO0FBQzFDLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsNkJBQTZCLEdBQUcsNEJBQTRCO0FBQ3JFO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSwrQ0FBTTtBQUNWLElBQUk7QUFDSjtBQUNBLElBQUksd0RBQVcsSUFBSSwrQ0FBSztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsK0NBQU07QUFDcEM7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRWdPO0FBQ2hPIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrYnJvd3NlckA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9idWlsZC9ucG0vZXNtL3RyYWNpbmcvbGlua2VkVHJhY2VzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFJvb3RTcGFuLCBnZXRDdXJyZW50U2NvcGUsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfUFJFVklPVVNfVFJBQ0VfU0FNUExFX1JBVEUsIHNwYW5Ub0pTT04sIGRlYnVnLCBTRU1BTlRJQ19MSU5LX0FUVFJJQlVURV9MSU5LX1RZUEUsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU0FNUExFX1JBVEUgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBXSU5ET1cgfSBmcm9tICcuLi9oZWxwZXJzLmpzJztcbmltcG9ydCAnQHNlbnRyeS1pbnRlcm5hbC9icm93c2VyLXV0aWxzJztcbmltcG9ydCAnLi4vc3RhY2stcGFyc2Vycy5qcyc7XG5pbXBvcnQgJy4uL2ludGVncmF0aW9ucy9icmVhZGNydW1icy5qcyc7XG5pbXBvcnQgJy4uL2ludGVncmF0aW9ucy9icm93c2VyYXBpZXJyb3JzLmpzJztcbmltcG9ydCAnLi4vaW50ZWdyYXRpb25zL2Jyb3dzZXJzZXNzaW9uLmpzJztcbmltcG9ydCAnLi4vaW50ZWdyYXRpb25zL2dsb2JhbGhhbmRsZXJzLmpzJztcbmltcG9ydCAnLi4vaW50ZWdyYXRpb25zL2h0dHBjb250ZXh0LmpzJztcbmltcG9ydCAnLi4vaW50ZWdyYXRpb25zL2xpbmtlZGVycm9ycy5qcyc7XG5cbi8vIDFoIGluIHNlY29uZHNcbmNvbnN0IFBSRVZJT1VTX1RSQUNFX01BWF9EVVJBVElPTiA9IDM2MDA7XG5cbi8vIHNlc3Npb24gc3RvcmFnZSBrZXlcbmNvbnN0IFBSRVZJT1VTX1RSQUNFX0tFWSA9ICdzZW50cnlfcHJldmlvdXNfdHJhY2UnO1xuXG5jb25zdCBQUkVWSU9VU19UUkFDRV9UTVBfU1BBTl9BVFRSSUJVVEUgPSAnc2VudHJ5LnByZXZpb3VzX3RyYWNlJztcblxuLyoqXG4gKiBUYWtlcyBjYXJlIG9mIGxpbmtpbmcgdHJhY2VzIGFuZCBhcHBseWluZyB0aGUgKGNvbnNpc3RlbnQpIHNhbXBsaW5nIGJlaGF2b2lvdXIgYmFzZWQgb24gdGhlIHBhc3NlZCBvcHRpb25zXG4gKiBAcGFyYW0gb3B0aW9ucyAtIG9wdGlvbnMgZm9yIGxpbmtpbmcgdHJhY2VzIGFuZCBjb25zaXN0ZW50IHRyYWNlIHNhbXBsaW5nIChAc2VlIEJyb3dzZXJUcmFjaW5nT3B0aW9ucylcbiAqIEBwYXJhbSBjbGllbnQgLSBTZW50cnkgY2xpZW50XG4gKi9cbmZ1bmN0aW9uIGxpbmtUcmFjZXMoXG4gIGNsaWVudCxcbiAge1xuICAgIGxpbmtQcmV2aW91c1RyYWNlLFxuICAgIGNvbnNpc3RlbnRUcmFjZVNhbXBsaW5nLFxuICB9XG5cbixcbikge1xuICBjb25zdCB1c2VTZXNzaW9uU3RvcmFnZSA9IGxpbmtQcmV2aW91c1RyYWNlID09PSAnc2Vzc2lvbi1zdG9yYWdlJztcblxuICBsZXQgaW5NZW1vcnlQcmV2aW91c1RyYWNlSW5mbyA9IHVzZVNlc3Npb25TdG9yYWdlID8gZ2V0UHJldmlvdXNUcmFjZUZyb21TZXNzaW9uU3RvcmFnZSgpIDogdW5kZWZpbmVkO1xuXG4gIGNsaWVudC5vbignc3BhblN0YXJ0Jywgc3BhbiA9PiB7XG4gICAgaWYgKGdldFJvb3RTcGFuKHNwYW4pICE9PSBzcGFuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb2xkUHJvcGFnYXRpb25Db250ZXh0ID0gZ2V0Q3VycmVudFNjb3BlKCkuZ2V0UHJvcGFnYXRpb25Db250ZXh0KCk7XG4gICAgaW5NZW1vcnlQcmV2aW91c1RyYWNlSW5mbyA9IGFkZFByZXZpb3VzVHJhY2VTcGFuTGluayhpbk1lbW9yeVByZXZpb3VzVHJhY2VJbmZvLCBzcGFuLCBvbGRQcm9wYWdhdGlvbkNvbnRleHQpO1xuXG4gICAgaWYgKHVzZVNlc3Npb25TdG9yYWdlKSB7XG4gICAgICBzdG9yZVByZXZpb3VzVHJhY2VJblNlc3Npb25TdG9yYWdlKGluTWVtb3J5UHJldmlvdXNUcmFjZUluZm8pO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IGlzRmlyc3RUcmFjZU9uUGFnZWxvYWQgPSB0cnVlO1xuICBpZiAoY29uc2lzdGVudFRyYWNlU2FtcGxpbmcpIHtcbiAgICAvKlxuICAgIFdoZW4gdXNlcnMgb3B0IGludG8gYGNvbnNpc3RlbnRUcmFjZVNhbXBsaW5nYCwgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBwcm9wYWdhdGVcbiAgICB0aGUgcHJldmlvdXMgdHJhY2UncyBzYW1wbGUgcmF0ZSBhbmQgcmFuZCB0byB0aGUgY3VycmVudCB0cmFjZS4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdGhlcndpc2UsIHNwYW5cbiAgICBtZXRyaWMgZXh0cmFwb2xhdGlvbiBpcyBpbmFjY3VyYXRlLCBhcyB3ZSdkIHByb3BhZ2F0ZSB0b28gaGlnaCBvZiBhIHNhbXBsZSByYXRlIGZvciB0aGUgc3Vic2VxdWVudCB0cmFjZXMuXG5cbiAgICBTbyB0aGVyZWZvcmUsIHdlIHByZXRlbmQgdGhhdCB0aGUgcHJldmlvdXMgdHJhY2Ugd2FzIHRoZSBwYXJlbnQgdHJhY2Ugb2YgdGhlIG5ld2x5IHN0YXJ0ZWQgdHJhY2UuIFRvIGRvIHRoYXQsXG4gICAgd2UgbXV0YXRlIHRoZSBwcm9wYWdhdGlvbiBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHRyYWNlIGFuZCBzZXQgdGhlIHNhbXBsZSByYXRlIGFuZCBzYW1wbGUgcmFuZCBvZiB0aGUgcHJldmlvdXMgdHJhY2UuXG4gICAgVGltaW5nLXdpc2UsIGl0IGlzIGZpbmUgYmVjYXVzZSBpdCBoYXBwZW5zIGJlZm9yZSB3ZSBldmVuIHNhbXBsZSB0aGUgcm9vdCBzcGFuLlxuXG4gICAgQHNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8xNTc1NFxuICAgICovXG4gICAgY2xpZW50Lm9uKCdiZWZvcmVTYW1wbGluZycsIG11dGFibGVTYW1wbGluZ0NvbnRleHREYXRhID0+IHtcbiAgICAgIGlmICghaW5NZW1vcnlQcmV2aW91c1RyYWNlSW5mbykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNjb3BlID0gZ2V0Q3VycmVudFNjb3BlKCk7XG4gICAgICBjb25zdCBjdXJyZW50UHJvcGFnYXRpb25Db250ZXh0ID0gc2NvcGUuZ2V0UHJvcGFnYXRpb25Db250ZXh0KCk7XG5cbiAgICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIGZvcmNlLWNvbnRpbnVlIHRoZSBzYW1wbGluZyBkZWNpc2lvbiBpZiB3ZSBjb250aW51ZSBhIHRyYWNlXG4gICAgICAvLyB0aGF0IHdhcyBzdGFydGVkIG9uIHRoZSBiYWNrZW5kLiBNb3N0IHByb21pbmVudGx5LCB0aGlzIHdpbGwgaGFwcGVuIGluIE1QQXMgd2hlcmVcbiAgICAgIC8vIHVzZXJzIGhhcmQtbmF2aWdhdGUgYmV0d2VlbiBwYWdlcy4gSW4gdGhpcyBjYXNlLCB0aGUgc2FtcGxpbmcgZGVjaXNpb24gb2YgYSBwb3RlbnRpYWxseVxuICAgICAgLy8gc3RhcnRlZCB0cmFjZSBvbiB0aGUgc2VydmVyIHRha2VzIHByZWNlZGVuY2UuXG4gICAgICAvLyBXaHk/IFdlIHdhbnQgdG8gcHJpb3JpdGl6ZSBpbnRlci10cmFjZSBjb25zaXN0ZW5jeSBvdmVyIGludHJhLXRyYWNlIGNvbnNpc3RlbmN5LlxuICAgICAgaWYgKGlzRmlyc3RUcmFjZU9uUGFnZWxvYWQgJiYgY3VycmVudFByb3BhZ2F0aW9uQ29udGV4dC5wYXJlbnRTcGFuSWQpIHtcbiAgICAgICAgaXNGaXJzdFRyYWNlT25QYWdlbG9hZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNjb3BlLnNldFByb3BhZ2F0aW9uQ29udGV4dCh7XG4gICAgICAgIC4uLmN1cnJlbnRQcm9wYWdhdGlvbkNvbnRleHQsXG4gICAgICAgIGRzYzoge1xuICAgICAgICAgIC4uLmN1cnJlbnRQcm9wYWdhdGlvbkNvbnRleHQuZHNjLFxuICAgICAgICAgIHNhbXBsZV9yYXRlOiBTdHJpbmcoaW5NZW1vcnlQcmV2aW91c1RyYWNlSW5mby5zYW1wbGVSYXRlKSxcbiAgICAgICAgICBzYW1wbGVkOiBTdHJpbmcoc3BhbkNvbnRleHRTYW1wbGVkKGluTWVtb3J5UHJldmlvdXNUcmFjZUluZm8uc3BhbkNvbnRleHQpKSxcbiAgICAgICAgfSxcbiAgICAgICAgc2FtcGxlUmFuZDogaW5NZW1vcnlQcmV2aW91c1RyYWNlSW5mby5zYW1wbGVSYW5kLFxuICAgICAgfSk7XG5cbiAgICAgIG11dGFibGVTYW1wbGluZ0NvbnRleHREYXRhLnBhcmVudFNhbXBsZWQgPSBzcGFuQ29udGV4dFNhbXBsZWQoaW5NZW1vcnlQcmV2aW91c1RyYWNlSW5mby5zcGFuQ29udGV4dCk7XG4gICAgICBtdXRhYmxlU2FtcGxpbmdDb250ZXh0RGF0YS5wYXJlbnRTYW1wbGVSYXRlID0gaW5NZW1vcnlQcmV2aW91c1RyYWNlSW5mby5zYW1wbGVSYXRlO1xuXG4gICAgICBtdXRhYmxlU2FtcGxpbmdDb250ZXh0RGF0YS5zcGFuQXR0cmlidXRlcyA9IHtcbiAgICAgICAgLi4ubXV0YWJsZVNhbXBsaW5nQ29udGV4dERhdGEuc3BhbkF0dHJpYnV0ZXMsXG4gICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1BSRVZJT1VTX1RSQUNFX1NBTVBMRV9SQVRFXTogaW5NZW1vcnlQcmV2aW91c1RyYWNlSW5mby5zYW1wbGVSYXRlLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZHMgYSBwcmV2aW91c190cmFjZSBzcGFuIGxpbmsgdG8gdGhlIHBhc3NlZCBzcGFuIGlmIHRoZSBwYXNzZWRcbiAqIHByZXZpb3VzVHJhY2VJbmZvIGlzIHN0aWxsIHZhbGlkLlxuICpcbiAqIEByZXR1cm5zIHRoZSB1cGRhdGVkIHByZXZpb3VzIHRyYWNlIGluZm8gKGJhc2VkIG9uIHRoZSBjdXJyZW50IHNwYW4vdHJhY2UpIHRvXG4gKiBiZSB1c2VkIG9uIHRoZSBuZXh0IGNhbGxcbiAqL1xuZnVuY3Rpb24gYWRkUHJldmlvdXNUcmFjZVNwYW5MaW5rKFxuICBwcmV2aW91c1RyYWNlSW5mbyxcbiAgc3BhbixcbiAgb2xkUHJvcGFnYXRpb25Db250ZXh0LFxuKSB7XG4gIGNvbnN0IHNwYW5Kc29uID0gc3BhblRvSlNPTihzcGFuKTtcblxuICBmdW5jdGlvbiBnZXRTYW1wbGVSYXRlKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBOdW1iZXIob2xkUHJvcGFnYXRpb25Db250ZXh0LmRzYz8uc2FtcGxlX3JhdGUpID8/IE51bWJlcihzcGFuSnNvbi5kYXRhPy5bU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TQU1QTEVfUkFURV0pXG4gICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdXBkYXRlZFByZXZpb3VzVHJhY2VJbmZvID0ge1xuICAgIHNwYW5Db250ZXh0OiBzcGFuLnNwYW5Db250ZXh0KCksXG4gICAgc3RhcnRUaW1lc3RhbXA6IHNwYW5Kc29uLnN0YXJ0X3RpbWVzdGFtcCxcbiAgICBzYW1wbGVSYXRlOiBnZXRTYW1wbGVSYXRlKCksXG4gICAgc2FtcGxlUmFuZDogb2xkUHJvcGFnYXRpb25Db250ZXh0LnNhbXBsZVJhbmQsXG4gIH07XG5cbiAgaWYgKCFwcmV2aW91c1RyYWNlSW5mbykge1xuICAgIHJldHVybiB1cGRhdGVkUHJldmlvdXNUcmFjZUluZm87XG4gIH1cblxuICBjb25zdCBwcmV2aW91c1RyYWNlU3BhbkN0eCA9IHByZXZpb3VzVHJhY2VJbmZvLnNwYW5Db250ZXh0O1xuICBpZiAocHJldmlvdXNUcmFjZVNwYW5DdHgudHJhY2VJZCA9PT0gc3Bhbkpzb24udHJhY2VfaWQpIHtcbiAgICAvLyBUaGlzIG1lYW5zLCB3ZSdyZSBzdGlsbCBpbiB0aGUgc2FtZSB0cmFjZSBzbyBsZXQncyBub3QgdXBkYXRlIHRoZSBwcmV2aW91cyB0cmFjZSBpbmZvXG4gICAgLy8gb3IgYWRkIGEgbGluayB0byB0aGUgY3VycmVudCBzcGFuLlxuICAgIC8vIE9uY2Ugd2UgbW92ZSBhd2F5IGZyb20gdGhlIGxvbmctbGl2ZWQsIHJvdXRlLWJhc2VkIHRyYWNlIG1vZGVsLCB3ZSBjYW4gcmVtb3ZlIHRoaXMgY2FzZXNcbiAgICByZXR1cm4gcHJldmlvdXNUcmFjZUluZm87XG4gIH1cblxuICAvLyBPbmx5IGFkZCB0aGUgbGluayBpZiB0aGUgc3RhcnRUaW1lU3RhbXAgb2YgdGhlIHByZXZpb3VzIHRyYWNlJ3Mgcm9vdCBzcGFuIGlzIHdpdGhpblxuICAvLyBQUkVWSU9VU19UUkFDRV9NQVhfRFVSQVRJT04gKDFoKSBvZiB0aGUgY3VycmVudCByb290IHNwYW4ncyBzdGFydFRpbWVzdGFtcFxuICAvLyBUaGlzIGlzIGRvbmUgdG9cbiAgLy8gLSBhdm9pZCBhZGRpbmcgbGlua3MgdG8gXCJzdGFsZVwiIHRyYWNlc1xuICAvLyAtIGVuYWJsZSBtb3JlIGVmZmljaWVudCBxdWVyeWluZyBmb3IgcHJldmlvdXMvbmV4dCB0cmFjZXMgaW4gU2VudHJ5XG4gIGlmIChEYXRlLm5vdygpIC8gMTAwMCAtIHByZXZpb3VzVHJhY2VJbmZvLnN0YXJ0VGltZXN0YW1wIDw9IFBSRVZJT1VTX1RSQUNFX01BWF9EVVJBVElPTikge1xuICAgIGlmIChERUJVR19CVUlMRCkge1xuICAgICAgZGVidWcubG9nKFxuICAgICAgICBgQWRkaW5nIHByZXZpb3VzX3RyYWNlICR7cHJldmlvdXNUcmFjZVNwYW5DdHh9IGxpbmsgdG8gc3BhbiAke3tcbiAgICAgICAgICBvcDogc3Bhbkpzb24ub3AsXG4gICAgICAgICAgLi4uc3Bhbi5zcGFuQ29udGV4dCgpLFxuICAgICAgICB9fWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHNwYW4uYWRkTGluayh7XG4gICAgICBjb250ZXh0OiBwcmV2aW91c1RyYWNlU3BhbkN0eCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgW1NFTUFOVElDX0xJTktfQVRUUklCVVRFX0xJTktfVFlQRV06ICdwcmV2aW91c190cmFjZScsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgb25jZSBFQVAgY2FuIHN0b3JlIHNwYW4gbGlua3MuIFdlIGN1cnJlbnRseSBvbmx5IHNldCB0aGlzIGF0dHJpYnV0ZSBzbyB0aGF0IHdlXG4gICAgLy8gY2FuIG9idGFpbiB0aGUgcHJldmlvdXMgdHJhY2UgaW5mb3JtYXRpb24gZnJvbSB0aGUgRUFQIHN0b3JlLiBMb25nLXRlcm0sIEVBUCB3aWxsIGhhbmRsZVxuICAgIC8vIHNwYW4gbGlua3MgYW5kIHRoZW4gd2Ugc2hvdWxkIHJlbW92ZSB0aGlzIGFnYWluLiBBbHNvIHRocm93aW5nIGluIGEgVE9ETyh2MTApLCB0byByZW1pbmQgdXNcbiAgICAvLyB0byBjaGVjayB0aGlzIGF0IHYxMCB0aW1lIDopXG4gICAgc3Bhbi5zZXRBdHRyaWJ1dGUoXG4gICAgICBQUkVWSU9VU19UUkFDRV9UTVBfU1BBTl9BVFRSSUJVVEUsXG4gICAgICBgJHtwcmV2aW91c1RyYWNlU3BhbkN0eC50cmFjZUlkfS0ke3ByZXZpb3VzVHJhY2VTcGFuQ3R4LnNwYW5JZH0tJHtcbiAgICAgICAgc3BhbkNvbnRleHRTYW1wbGVkKHByZXZpb3VzVHJhY2VTcGFuQ3R4KSA/IDEgOiAwXG4gICAgICB9YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZWRQcmV2aW91c1RyYWNlSW5mbztcbn1cblxuLyoqXG4gKiBTdG9yZXMgQHBhcmFtIHByZXZpb3VzVHJhY2VJbmZvIGluIHNlc3Npb25TdG9yYWdlLlxuICovXG5mdW5jdGlvbiBzdG9yZVByZXZpb3VzVHJhY2VJblNlc3Npb25TdG9yYWdlKHByZXZpb3VzVHJhY2VJbmZvKSB7XG4gIHRyeSB7XG4gICAgV0lORE9XLnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oUFJFVklPVVNfVFJBQ0VfS0VZLCBKU09OLnN0cmluZ2lmeShwcmV2aW91c1RyYWNlSW5mbykpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSWdub3JlIHBvdGVudGlhbCBlcnJvcnMgKGUuZy4gaWYgc2Vzc2lvblN0b3JhZ2UgaXMgbm90IGF2YWlsYWJsZSlcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy53YXJuKCdDb3VsZCBub3Qgc3RvcmUgcHJldmlvdXMgdHJhY2UgaW4gc2Vzc2lvblN0b3JhZ2UnLCBlKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgcHJldmlvdXMgdHJhY2UgZnJvbSBzZXNzaW9uU3RvcmFnZSBpZiBhdmFpbGFibGUuXG4gKi9cbmZ1bmN0aW9uIGdldFByZXZpb3VzVHJhY2VGcm9tU2Vzc2lvblN0b3JhZ2UoKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJldmlvdXNUcmFjZUluZm8gPSBXSU5ET1cuc2Vzc2lvblN0b3JhZ2U/LmdldEl0ZW0oUFJFVklPVVNfVFJBQ0VfS0VZKTtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaW50ZW50aW9uYWxseSByaXNraW5nIEpTT04ucGFyc2UgdGhyb3dpbmcgd2hlbiBwcmV2aW91c1RyYWNlSW5mbyBpcyBudWxsIHRvIHNhdmUgYnVuZGxlIHNpemVcbiAgICByZXR1cm4gSlNPTi5wYXJzZShwcmV2aW91c1RyYWNlSW5mbyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBzZWUge0BsaW5rIGltcG9ydCgnQHNlbnRyeS9jb3JlJykuc3BhbklzU2FtcGxlZH1cbiAqL1xuZnVuY3Rpb24gc3BhbkNvbnRleHRTYW1wbGVkKGN0eCkge1xuICByZXR1cm4gY3R4LnRyYWNlRmxhZ3MgPT09IDB4MTtcbn1cblxuZXhwb3J0IHsgUFJFVklPVVNfVFJBQ0VfS0VZLCBQUkVWSU9VU19UUkFDRV9NQVhfRFVSQVRJT04sIFBSRVZJT1VTX1RSQUNFX1RNUF9TUEFOX0FUVFJJQlVURSwgYWRkUHJldmlvdXNUcmFjZVNwYW5MaW5rLCBnZXRQcmV2aW91c1RyYWNlRnJvbVNlc3Npb25TdG9yYWdlLCBsaW5rVHJhY2VzLCBzcGFuQ29udGV4dFNhbXBsZWQsIHN0b3JlUHJldmlvdXNUcmFjZUluU2Vzc2lvblN0b3JhZ2UgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpbmtlZFRyYWNlcy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/linkedTraces.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/request.js":
/*!*****************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/request.js ***!
  \*****************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   defaultRequestInstrumentationOptions: () => (/* binding */ defaultRequestInstrumentationOptions),\n/* harmony export */   instrumentOutgoingRequests: () => (/* binding */ instrumentOutgoingRequests),\n/* harmony export */   shouldAttachHeaders: () => (/* binding */ shouldAttachHeaders),\n/* harmony export */   xhrCallback: () => (/* binding */ xhrCallback)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry-internal/browser-utils */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/index.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../helpers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\");\n/* harmony import */ var _resource_timing_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./resource-timing.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/resource-timing.js\");\n\n\n\n\n\n/** Options for Request Instrumentation */\n\nconst responseToSpanId = new WeakMap();\nconst spanIdToEndTimestamp = new Map();\n\nconst defaultRequestInstrumentationOptions = {\n  traceFetch: true,\n  traceXHR: true,\n  enableHTTPTimings: true,\n  trackFetchStreamPerformance: false,\n};\n\n/** Registers span creators for xhr and fetch requests  */\nfunction instrumentOutgoingRequests(client, _options) {\n  const {\n    traceFetch,\n    traceXHR,\n    trackFetchStreamPerformance,\n    shouldCreateSpanForRequest,\n    enableHTTPTimings,\n    tracePropagationTargets,\n    onRequestSpanStart,\n  } = {\n    ...defaultRequestInstrumentationOptions,\n    ..._options,\n  };\n\n  const shouldCreateSpan =\n    typeof shouldCreateSpanForRequest === 'function' ? shouldCreateSpanForRequest : (_) => true;\n\n  const shouldAttachHeadersWithTargets = (url) => shouldAttachHeaders(url, tracePropagationTargets);\n\n  const spans = {};\n\n  if (traceFetch) {\n    // Keeping track of http requests, whose body payloads resolved later than the initial resolved request\n    // e.g. streaming using server sent events (SSE)\n    client.addEventProcessor(event => {\n      if (event.type === 'transaction' && event.spans) {\n        event.spans.forEach(span => {\n          if (span.op === 'http.client') {\n            const updatedTimestamp = spanIdToEndTimestamp.get(span.span_id);\n            if (updatedTimestamp) {\n              span.timestamp = updatedTimestamp / 1000;\n              spanIdToEndTimestamp.delete(span.span_id);\n            }\n          }\n        });\n      }\n      return event;\n    });\n\n    if (trackFetchStreamPerformance) {\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addFetchEndInstrumentationHandler)(handlerData => {\n        if (handlerData.response) {\n          const span = responseToSpanId.get(handlerData.response);\n          if (span && handlerData.endTimestamp) {\n            spanIdToEndTimestamp.set(span, handlerData.endTimestamp);\n          }\n        }\n      });\n    }\n\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addFetchInstrumentationHandler)(handlerData => {\n      const createdSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.instrumentFetchRequest)(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n\n      if (handlerData.response && handlerData.fetchData.__span) {\n        responseToSpanId.set(handlerData.response, handlerData.fetchData.__span);\n      }\n\n      // We cannot use `window.location` in the generic fetch instrumentation,\n      // but we need it for reliable `server.address` attribute.\n      // so we extend this in here\n      if (createdSpan) {\n        const fullUrl = getFullURL(handlerData.fetchData.url);\n        const host = fullUrl ? (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.parseUrl)(fullUrl).host : undefined;\n        createdSpan.setAttributes({\n          'http.url': fullUrl,\n          'server.address': host,\n        });\n\n        if (enableHTTPTimings) {\n          addHTTPTimings(createdSpan);\n        }\n\n        onRequestSpanStart?.(createdSpan, { headers: handlerData.headers });\n      }\n    });\n  }\n\n  if (traceXHR) {\n    (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.addXhrInstrumentationHandler)(handlerData => {\n      const createdSpan = xhrCallback(handlerData, shouldCreateSpan, shouldAttachHeadersWithTargets, spans);\n      if (createdSpan) {\n        if (enableHTTPTimings) {\n          addHTTPTimings(createdSpan);\n        }\n\n        let headers;\n        try {\n          headers = new Headers(handlerData.xhr.__sentry_xhr_v3__?.request_headers);\n        } catch {\n          // noop\n        }\n        onRequestSpanStart?.(createdSpan, { headers });\n      }\n    });\n  }\n}\n\nfunction isPerformanceResourceTiming(entry) {\n  return (\n    entry.entryType === 'resource' &&\n    'initiatorType' in entry &&\n    typeof (entry ).nextHopProtocol === 'string' &&\n    (entry.initiatorType === 'fetch' || entry.initiatorType === 'xmlhttprequest')\n  );\n}\n\n/**\n * Creates a temporary observer to listen to the next fetch/xhr resourcing timings,\n * so that when timings hit their per-browser limit they don't need to be removed.\n *\n * @param span A span that has yet to be finished, must contain `url` on data.\n */\nfunction addHTTPTimings(span) {\n  const { url } = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(span).data;\n\n  if (!url || typeof url !== 'string') {\n    return;\n  }\n\n  const cleanup = (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.addPerformanceInstrumentationHandler)('resource', ({ entries }) => {\n    entries.forEach(entry => {\n      if (isPerformanceResourceTiming(entry) && entry.name.endsWith(url)) {\n        const spanAttributes = (0,_resource_timing_js__WEBPACK_IMPORTED_MODULE_3__.resourceTimingToSpanAttributes)(entry);\n        spanAttributes.forEach(attributeArray => span.setAttribute(...attributeArray));\n        // In the next tick, clean this handler up\n        // We have to wait here because otherwise this cleans itself up before it is fully done\n        setTimeout(cleanup);\n      }\n    });\n  });\n}\n\n/**\n * A function that determines whether to attach tracing headers to a request.\n * We only export this function for testing purposes.\n */\nfunction shouldAttachHeaders(\n  targetUrl,\n  tracePropagationTargets,\n) {\n  // window.location.href not being defined is an edge case in the browser but we need to handle it.\n  // Potentially dangerous situations where it may not be defined: Browser Extensions, Web Workers, patching of the location obj\n  const href = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getLocationHref)();\n\n  if (!href) {\n    // If there is no window.location.origin, we default to only attaching tracing headers to relative requests, i.e. ones that start with `/`\n    // BIG DISCLAIMER: Users can call URLs with a double slash (fetch(\"//example.com/api\")), this is a shorthand for \"send to the same protocol\",\n    // so we need a to exclude those requests, because they might be cross origin.\n    const isRelativeSameOriginRequest = !!targetUrl.match(/^\\/(?!\\/)/);\n    if (!tracePropagationTargets) {\n      return isRelativeSameOriginRequest;\n    } else {\n      return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.stringMatchesSomePattern)(targetUrl, tracePropagationTargets);\n    }\n  } else {\n    let resolvedUrl;\n    let currentOrigin;\n\n    // URL parsing may fail, we default to not attaching trace headers in that case.\n    try {\n      resolvedUrl = new URL(targetUrl, href);\n      currentOrigin = new URL(href).origin;\n    } catch {\n      return false;\n    }\n\n    const isSameOriginRequest = resolvedUrl.origin === currentOrigin;\n    if (!tracePropagationTargets) {\n      return isSameOriginRequest;\n    } else {\n      return (\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.stringMatchesSomePattern)(resolvedUrl.toString(), tracePropagationTargets) ||\n        (isSameOriginRequest && (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.stringMatchesSomePattern)(resolvedUrl.pathname, tracePropagationTargets))\n      );\n    }\n  }\n}\n\n/**\n * Create and track xhr request spans\n *\n * @returns Span if a span was created, otherwise void.\n */\nfunction xhrCallback(\n  handlerData,\n  shouldCreateSpan,\n  shouldAttachHeaders,\n  spans,\n) {\n  const xhr = handlerData.xhr;\n  const sentryXhrData = xhr?.[_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.SENTRY_XHR_DATA_KEY];\n\n  if (!xhr || xhr.__sentry_own_request__ || !sentryXhrData) {\n    return undefined;\n  }\n\n  const { url, method } = sentryXhrData;\n\n  const shouldCreateSpanResult = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.hasSpansEnabled)() && shouldCreateSpan(url);\n\n  // check first if the request has finished and is tracked by an existing span which should now end\n  if (handlerData.endTimestamp && shouldCreateSpanResult) {\n    const spanId = xhr.__sentry_xhr_span_id__;\n    if (!spanId) return;\n\n    const span = spans[spanId];\n    if (span && sentryXhrData.status_code !== undefined) {\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.setHttpStatus)(span, sentryXhrData.status_code);\n      span.end();\n\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete spans[spanId];\n    }\n    return undefined;\n  }\n\n  const fullUrl = getFullURL(url);\n  const parsedUrl = fullUrl ? (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.parseUrl)(fullUrl) : (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.parseUrl)(url);\n\n  const urlForSpanName = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.stripUrlQueryAndFragment)(url);\n\n  const hasParent = !!(0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n\n  const span =\n    shouldCreateSpanResult && hasParent\n      ? (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.startInactiveSpan)({\n          name: `${method} ${urlForSpanName}`,\n          attributes: {\n            url,\n            type: 'xhr',\n            'http.method': method,\n            'http.url': fullUrl,\n            'server.address': parsedUrl?.host,\n            [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser',\n            [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client',\n            ...(parsedUrl?.search && { 'http.query': parsedUrl?.search }),\n            ...(parsedUrl?.hash && { 'http.fragment': parsedUrl?.hash }),\n          },\n        })\n      : new _sentry_core__WEBPACK_IMPORTED_MODULE_0__.SentryNonRecordingSpan();\n\n  xhr.__sentry_xhr_span_id__ = span.spanContext().spanId;\n  spans[xhr.__sentry_xhr_span_id__] = span;\n\n  if (shouldAttachHeaders(url)) {\n    addTracingHeadersToXhrRequest(\n      xhr,\n      // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction),\n      // we do not want to use the span as base for the trace headers,\n      // which means that the headers will be generated from the scope and the sampling decision is deferred\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.hasSpansEnabled)() && hasParent ? span : undefined,\n    );\n  }\n\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  if (client) {\n    client.emit('beforeOutgoingRequestSpan', span, handlerData );\n  }\n\n  return span;\n}\n\nfunction addTracingHeadersToXhrRequest(xhr, span) {\n  const { 'sentry-trace': sentryTrace, baggage } = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getTraceData)({ span });\n\n  if (sentryTrace) {\n    setHeaderOnXhr(xhr, sentryTrace, baggage);\n  }\n}\n\nfunction setHeaderOnXhr(\n  xhr,\n  sentryTraceHeader,\n  sentryBaggageHeader,\n) {\n  const originalHeaders = xhr.__sentry_xhr_v3__?.request_headers;\n\n  if (originalHeaders?.['sentry-trace']) {\n    // bail if a sentry-trace header is already set\n    return;\n  }\n\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    xhr.setRequestHeader('sentry-trace', sentryTraceHeader);\n    if (sentryBaggageHeader) {\n      // only add our headers if\n      // - no pre-existing baggage header exists\n      // - or it is set and doesn't yet contain sentry values\n      const originalBaggageHeader = originalHeaders?.['baggage'];\n      if (!originalBaggageHeader || !baggageHeaderHasSentryValues(originalBaggageHeader)) {\n        // From MDN: \"If this method is called several times with the same header, the values are merged into one single request header.\"\n        // We can therefore simply set a baggage header without checking what was there before\n        // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        xhr.setRequestHeader('baggage', sentryBaggageHeader);\n      }\n    }\n  } catch {\n    // Error: InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.\n  }\n}\n\nfunction baggageHeaderHasSentryValues(baggageHeader) {\n  return baggageHeader.split(',').some(value => value.trim().startsWith('sentry-'));\n}\n\nfunction getFullURL(url) {\n  try {\n    // By adding a base URL to new URL(), this will also work for relative urls\n    // If `url` is a full URL, the base URL is ignored anyhow\n    const parsed = new URL(url, _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.location.origin);\n    return parsed.href;\n  } catch {\n    return undefined;\n  }\n}\n\n\n//# sourceMappingURL=request.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS90cmFjaW5nL3JlcXVlc3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBdVk7QUFDOVA7QUFDbEc7QUFDK0I7O0FBRXRFOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsTUFBTSwrRUFBaUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBLElBQUksNEVBQThCO0FBQ2xDLDBCQUEwQixvRUFBc0I7O0FBRWhEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLHNEQUFRO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBOztBQUVBLDRDQUE0Qyw4QkFBOEI7QUFDMUU7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxJQUFJLDRGQUE0QjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsNENBQTRDLFNBQVM7QUFDckQ7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxNQUFNLEVBQUUsd0RBQVU7O0FBRTVCO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0Isb0dBQW9DLGdCQUFnQixTQUFTO0FBQy9FO0FBQ0E7QUFDQSwrQkFBK0IsbUZBQThCO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw2REFBZTs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sYUFBYSxzRUFBd0I7QUFDckM7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLFFBQVEsc0VBQXdCO0FBQ2hDLGdDQUFnQyxzRUFBd0I7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLCtFQUFtQjs7QUFFakQ7QUFDQTtBQUNBOztBQUVBLFVBQVUsY0FBYzs7QUFFeEIsaUNBQWlDLDZEQUFlOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTSwyREFBYTtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOEJBQThCLHNEQUFRLFlBQVksc0RBQVE7O0FBRTFELHlCQUF5QixzRUFBd0I7O0FBRWpELHNCQUFzQiwyREFBYTs7QUFFbkM7QUFDQTtBQUNBLFFBQVEsK0RBQWlCO0FBQ3pCLG1CQUFtQixRQUFRLEVBQUUsZUFBZTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLDBFQUFnQztBQUM3QyxhQUFhLHNFQUE0QjtBQUN6Qyx1Q0FBdUMsaUNBQWlDO0FBQ3hFLHFDQUFxQyxrQ0FBa0M7QUFDdkUsV0FBVztBQUNYLFNBQVM7QUFDVCxZQUFZLGdFQUFzQjs7QUFFbEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLDZEQUFlO0FBQ3JCO0FBQ0E7O0FBRUEsaUJBQWlCLHVEQUFTO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsVUFBVSx1Q0FBdUMsRUFBRSwwREFBWSxHQUFHLE1BQU07O0FBRXhFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLCtDQUFNO0FBQ3RDO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFOEc7QUFDOUciLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vdHJhY2luZy9yZXF1ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZEZldGNoRW5kSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgYWRkRmV0Y2hJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBpbnN0cnVtZW50RmV0Y2hSZXF1ZXN0LCBwYXJzZVVybCwgZ2V0TG9jYXRpb25IcmVmLCBzdHJpbmdNYXRjaGVzU29tZVBhdHRlcm4sIHNwYW5Ub0pTT04sIGhhc1NwYW5zRW5hYmxlZCwgc2V0SHR0cFN0YXR1cywgc3RyaXBVcmxRdWVyeUFuZEZyYWdtZW50LCBnZXRBY3RpdmVTcGFuLCBzdGFydEluYWN0aXZlU3BhbiwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUCwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU4sIFNlbnRyeU5vblJlY29yZGluZ1NwYW4sIGdldENsaWVudCwgZ2V0VHJhY2VEYXRhIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGFkZFhockluc3RydW1lbnRhdGlvbkhhbmRsZXIsIGFkZFBlcmZvcm1hbmNlSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgU0VOVFJZX1hIUl9EQVRBX0tFWSB9IGZyb20gJ0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscyc7XG5pbXBvcnQgeyBXSU5ET1cgfSBmcm9tICcuLi9oZWxwZXJzLmpzJztcbmltcG9ydCB7IHJlc291cmNlVGltaW5nVG9TcGFuQXR0cmlidXRlcyB9IGZyb20gJy4vcmVzb3VyY2UtdGltaW5nLmpzJztcblxuLyoqIE9wdGlvbnMgZm9yIFJlcXVlc3QgSW5zdHJ1bWVudGF0aW9uICovXG5cbmNvbnN0IHJlc3BvbnNlVG9TcGFuSWQgPSBuZXcgV2Vha01hcCgpO1xuY29uc3Qgc3BhbklkVG9FbmRUaW1lc3RhbXAgPSBuZXcgTWFwKCk7XG5cbmNvbnN0IGRlZmF1bHRSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucyA9IHtcbiAgdHJhY2VGZXRjaDogdHJ1ZSxcbiAgdHJhY2VYSFI6IHRydWUsXG4gIGVuYWJsZUhUVFBUaW1pbmdzOiB0cnVlLFxuICB0cmFja0ZldGNoU3RyZWFtUGVyZm9ybWFuY2U6IGZhbHNlLFxufTtcblxuLyoqIFJlZ2lzdGVycyBzcGFuIGNyZWF0b3JzIGZvciB4aHIgYW5kIGZldGNoIHJlcXVlc3RzICAqL1xuZnVuY3Rpb24gaW5zdHJ1bWVudE91dGdvaW5nUmVxdWVzdHMoY2xpZW50LCBfb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgdHJhY2VGZXRjaCxcbiAgICB0cmFjZVhIUixcbiAgICB0cmFja0ZldGNoU3RyZWFtUGVyZm9ybWFuY2UsXG4gICAgc2hvdWxkQ3JlYXRlU3BhbkZvclJlcXVlc3QsXG4gICAgZW5hYmxlSFRUUFRpbWluZ3MsXG4gICAgdHJhY2VQcm9wYWdhdGlvblRhcmdldHMsXG4gICAgb25SZXF1ZXN0U3BhblN0YXJ0LFxuICB9ID0ge1xuICAgIC4uLmRlZmF1bHRSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucyxcbiAgICAuLi5fb3B0aW9ucyxcbiAgfTtcblxuICBjb25zdCBzaG91bGRDcmVhdGVTcGFuID1cbiAgICB0eXBlb2Ygc2hvdWxkQ3JlYXRlU3BhbkZvclJlcXVlc3QgPT09ICdmdW5jdGlvbicgPyBzaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCA6IChfKSA9PiB0cnVlO1xuXG4gIGNvbnN0IHNob3VsZEF0dGFjaEhlYWRlcnNXaXRoVGFyZ2V0cyA9ICh1cmwpID0+IHNob3VsZEF0dGFjaEhlYWRlcnModXJsLCB0cmFjZVByb3BhZ2F0aW9uVGFyZ2V0cyk7XG5cbiAgY29uc3Qgc3BhbnMgPSB7fTtcblxuICBpZiAodHJhY2VGZXRjaCkge1xuICAgIC8vIEtlZXBpbmcgdHJhY2sgb2YgaHR0cCByZXF1ZXN0cywgd2hvc2UgYm9keSBwYXlsb2FkcyByZXNvbHZlZCBsYXRlciB0aGFuIHRoZSBpbml0aWFsIHJlc29sdmVkIHJlcXVlc3RcbiAgICAvLyBlLmcuIHN0cmVhbWluZyB1c2luZyBzZXJ2ZXIgc2VudCBldmVudHMgKFNTRSlcbiAgICBjbGllbnQuYWRkRXZlbnRQcm9jZXNzb3IoZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICd0cmFuc2FjdGlvbicgJiYgZXZlbnQuc3BhbnMpIHtcbiAgICAgICAgZXZlbnQuc3BhbnMuZm9yRWFjaChzcGFuID0+IHtcbiAgICAgICAgICBpZiAoc3Bhbi5vcCA9PT0gJ2h0dHAuY2xpZW50Jykge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFRpbWVzdGFtcCA9IHNwYW5JZFRvRW5kVGltZXN0YW1wLmdldChzcGFuLnNwYW5faWQpO1xuICAgICAgICAgICAgaWYgKHVwZGF0ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgc3Bhbi50aW1lc3RhbXAgPSB1cGRhdGVkVGltZXN0YW1wIC8gMTAwMDtcbiAgICAgICAgICAgICAgc3BhbklkVG9FbmRUaW1lc3RhbXAuZGVsZXRlKHNwYW4uc3Bhbl9pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9KTtcblxuICAgIGlmICh0cmFja0ZldGNoU3RyZWFtUGVyZm9ybWFuY2UpIHtcbiAgICAgIGFkZEZldGNoRW5kSW5zdHJ1bWVudGF0aW9uSGFuZGxlcihoYW5kbGVyRGF0YSA9PiB7XG4gICAgICAgIGlmIChoYW5kbGVyRGF0YS5yZXNwb25zZSkge1xuICAgICAgICAgIGNvbnN0IHNwYW4gPSByZXNwb25zZVRvU3BhbklkLmdldChoYW5kbGVyRGF0YS5yZXNwb25zZSk7XG4gICAgICAgICAgaWYgKHNwYW4gJiYgaGFuZGxlckRhdGEuZW5kVGltZXN0YW1wKSB7XG4gICAgICAgICAgICBzcGFuSWRUb0VuZFRpbWVzdGFtcC5zZXQoc3BhbiwgaGFuZGxlckRhdGEuZW5kVGltZXN0YW1wKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZEZldGNoSW5zdHJ1bWVudGF0aW9uSGFuZGxlcihoYW5kbGVyRGF0YSA9PiB7XG4gICAgICBjb25zdCBjcmVhdGVkU3BhbiA9IGluc3RydW1lbnRGZXRjaFJlcXVlc3QoaGFuZGxlckRhdGEsIHNob3VsZENyZWF0ZVNwYW4sIHNob3VsZEF0dGFjaEhlYWRlcnNXaXRoVGFyZ2V0cywgc3BhbnMpO1xuXG4gICAgICBpZiAoaGFuZGxlckRhdGEucmVzcG9uc2UgJiYgaGFuZGxlckRhdGEuZmV0Y2hEYXRhLl9fc3Bhbikge1xuICAgICAgICByZXNwb25zZVRvU3BhbklkLnNldChoYW5kbGVyRGF0YS5yZXNwb25zZSwgaGFuZGxlckRhdGEuZmV0Y2hEYXRhLl9fc3Bhbik7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIGNhbm5vdCB1c2UgYHdpbmRvdy5sb2NhdGlvbmAgaW4gdGhlIGdlbmVyaWMgZmV0Y2ggaW5zdHJ1bWVudGF0aW9uLFxuICAgICAgLy8gYnV0IHdlIG5lZWQgaXQgZm9yIHJlbGlhYmxlIGBzZXJ2ZXIuYWRkcmVzc2AgYXR0cmlidXRlLlxuICAgICAgLy8gc28gd2UgZXh0ZW5kIHRoaXMgaW4gaGVyZVxuICAgICAgaWYgKGNyZWF0ZWRTcGFuKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxVcmwgPSBnZXRGdWxsVVJMKGhhbmRsZXJEYXRhLmZldGNoRGF0YS51cmwpO1xuICAgICAgICBjb25zdCBob3N0ID0gZnVsbFVybCA/IHBhcnNlVXJsKGZ1bGxVcmwpLmhvc3QgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNyZWF0ZWRTcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAgICdodHRwLnVybCc6IGZ1bGxVcmwsXG4gICAgICAgICAgJ3NlcnZlci5hZGRyZXNzJzogaG9zdCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGVuYWJsZUhUVFBUaW1pbmdzKSB7XG4gICAgICAgICAgYWRkSFRUUFRpbWluZ3MoY3JlYXRlZFNwYW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgb25SZXF1ZXN0U3BhblN0YXJ0Py4oY3JlYXRlZFNwYW4sIHsgaGVhZGVyczogaGFuZGxlckRhdGEuaGVhZGVycyB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0cmFjZVhIUikge1xuICAgIGFkZFhockluc3RydW1lbnRhdGlvbkhhbmRsZXIoaGFuZGxlckRhdGEgPT4ge1xuICAgICAgY29uc3QgY3JlYXRlZFNwYW4gPSB4aHJDYWxsYmFjayhoYW5kbGVyRGF0YSwgc2hvdWxkQ3JlYXRlU3Bhbiwgc2hvdWxkQXR0YWNoSGVhZGVyc1dpdGhUYXJnZXRzLCBzcGFucyk7XG4gICAgICBpZiAoY3JlYXRlZFNwYW4pIHtcbiAgICAgICAgaWYgKGVuYWJsZUhUVFBUaW1pbmdzKSB7XG4gICAgICAgICAgYWRkSFRUUFRpbWluZ3MoY3JlYXRlZFNwYW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGhlYWRlcnM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaGVhZGVycyA9IG5ldyBIZWFkZXJzKGhhbmRsZXJEYXRhLnhoci5fX3NlbnRyeV94aHJfdjNfXz8ucmVxdWVzdF9oZWFkZXJzKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9XG4gICAgICAgIG9uUmVxdWVzdFNwYW5TdGFydD8uKGNyZWF0ZWRTcGFuLCB7IGhlYWRlcnMgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nKGVudHJ5KSB7XG4gIHJldHVybiAoXG4gICAgZW50cnkuZW50cnlUeXBlID09PSAncmVzb3VyY2UnICYmXG4gICAgJ2luaXRpYXRvclR5cGUnIGluIGVudHJ5ICYmXG4gICAgdHlwZW9mIChlbnRyeSApLm5leHRIb3BQcm90b2NvbCA9PT0gJ3N0cmluZycgJiZcbiAgICAoZW50cnkuaW5pdGlhdG9yVHlwZSA9PT0gJ2ZldGNoJyB8fCBlbnRyeS5pbml0aWF0b3JUeXBlID09PSAneG1saHR0cHJlcXVlc3QnKVxuICApO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB0ZW1wb3Jhcnkgb2JzZXJ2ZXIgdG8gbGlzdGVuIHRvIHRoZSBuZXh0IGZldGNoL3hociByZXNvdXJjaW5nIHRpbWluZ3MsXG4gKiBzbyB0aGF0IHdoZW4gdGltaW5ncyBoaXQgdGhlaXIgcGVyLWJyb3dzZXIgbGltaXQgdGhleSBkb24ndCBuZWVkIHRvIGJlIHJlbW92ZWQuXG4gKlxuICogQHBhcmFtIHNwYW4gQSBzcGFuIHRoYXQgaGFzIHlldCB0byBiZSBmaW5pc2hlZCwgbXVzdCBjb250YWluIGB1cmxgIG9uIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGFkZEhUVFBUaW1pbmdzKHNwYW4pIHtcbiAgY29uc3QgeyB1cmwgfSA9IHNwYW5Ub0pTT04oc3BhbikuZGF0YTtcblxuICBpZiAoIXVybCB8fCB0eXBlb2YgdXJsICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNsZWFudXAgPSBhZGRQZXJmb3JtYW5jZUluc3RydW1lbnRhdGlvbkhhbmRsZXIoJ3Jlc291cmNlJywgKHsgZW50cmllcyB9KSA9PiB7XG4gICAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgIGlmIChpc1BlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcoZW50cnkpICYmIGVudHJ5Lm5hbWUuZW5kc1dpdGgodXJsKSkge1xuICAgICAgICBjb25zdCBzcGFuQXR0cmlidXRlcyA9IHJlc291cmNlVGltaW5nVG9TcGFuQXR0cmlidXRlcyhlbnRyeSk7XG4gICAgICAgIHNwYW5BdHRyaWJ1dGVzLmZvckVhY2goYXR0cmlidXRlQXJyYXkgPT4gc3Bhbi5zZXRBdHRyaWJ1dGUoLi4uYXR0cmlidXRlQXJyYXkpKTtcbiAgICAgICAgLy8gSW4gdGhlIG5leHQgdGljaywgY2xlYW4gdGhpcyBoYW5kbGVyIHVwXG4gICAgICAgIC8vIFdlIGhhdmUgdG8gd2FpdCBoZXJlIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoaXMgY2xlYW5zIGl0c2VsZiB1cCBiZWZvcmUgaXQgaXMgZnVsbHkgZG9uZVxuICAgICAgICBzZXRUaW1lb3V0KGNsZWFudXApO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGF0dGFjaCB0cmFjaW5nIGhlYWRlcnMgdG8gYSByZXF1ZXN0LlxuICogV2Ugb25seSBleHBvcnQgdGhpcyBmdW5jdGlvbiBmb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkQXR0YWNoSGVhZGVycyhcbiAgdGFyZ2V0VXJsLFxuICB0cmFjZVByb3BhZ2F0aW9uVGFyZ2V0cyxcbikge1xuICAvLyB3aW5kb3cubG9jYXRpb24uaHJlZiBub3QgYmVpbmcgZGVmaW5lZCBpcyBhbiBlZGdlIGNhc2UgaW4gdGhlIGJyb3dzZXIgYnV0IHdlIG5lZWQgdG8gaGFuZGxlIGl0LlxuICAvLyBQb3RlbnRpYWxseSBkYW5nZXJvdXMgc2l0dWF0aW9ucyB3aGVyZSBpdCBtYXkgbm90IGJlIGRlZmluZWQ6IEJyb3dzZXIgRXh0ZW5zaW9ucywgV2ViIFdvcmtlcnMsIHBhdGNoaW5nIG9mIHRoZSBsb2NhdGlvbiBvYmpcbiAgY29uc3QgaHJlZiA9IGdldExvY2F0aW9uSHJlZigpO1xuXG4gIGlmICghaHJlZikge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHdlIGRlZmF1bHQgdG8gb25seSBhdHRhY2hpbmcgdHJhY2luZyBoZWFkZXJzIHRvIHJlbGF0aXZlIHJlcXVlc3RzLCBpLmUuIG9uZXMgdGhhdCBzdGFydCB3aXRoIGAvYFxuICAgIC8vIEJJRyBESVNDTEFJTUVSOiBVc2VycyBjYW4gY2FsbCBVUkxzIHdpdGggYSBkb3VibGUgc2xhc2ggKGZldGNoKFwiLy9leGFtcGxlLmNvbS9hcGlcIikpLCB0aGlzIGlzIGEgc2hvcnRoYW5kIGZvciBcInNlbmQgdG8gdGhlIHNhbWUgcHJvdG9jb2xcIixcbiAgICAvLyBzbyB3ZSBuZWVkIGEgdG8gZXhjbHVkZSB0aG9zZSByZXF1ZXN0cywgYmVjYXVzZSB0aGV5IG1pZ2h0IGJlIGNyb3NzIG9yaWdpbi5cbiAgICBjb25zdCBpc1JlbGF0aXZlU2FtZU9yaWdpblJlcXVlc3QgPSAhIXRhcmdldFVybC5tYXRjaCgvXlxcLyg/IVxcLykvKTtcbiAgICBpZiAoIXRyYWNlUHJvcGFnYXRpb25UYXJnZXRzKSB7XG4gICAgICByZXR1cm4gaXNSZWxhdGl2ZVNhbWVPcmlnaW5SZXF1ZXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RyaW5nTWF0Y2hlc1NvbWVQYXR0ZXJuKHRhcmdldFVybCwgdHJhY2VQcm9wYWdhdGlvblRhcmdldHMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgcmVzb2x2ZWRVcmw7XG4gICAgbGV0IGN1cnJlbnRPcmlnaW47XG5cbiAgICAvLyBVUkwgcGFyc2luZyBtYXkgZmFpbCwgd2UgZGVmYXVsdCB0byBub3QgYXR0YWNoaW5nIHRyYWNlIGhlYWRlcnMgaW4gdGhhdCBjYXNlLlxuICAgIHRyeSB7XG4gICAgICByZXNvbHZlZFVybCA9IG5ldyBVUkwodGFyZ2V0VXJsLCBocmVmKTtcbiAgICAgIGN1cnJlbnRPcmlnaW4gPSBuZXcgVVJMKGhyZWYpLm9yaWdpbjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1NhbWVPcmlnaW5SZXF1ZXN0ID0gcmVzb2x2ZWRVcmwub3JpZ2luID09PSBjdXJyZW50T3JpZ2luO1xuICAgIGlmICghdHJhY2VQcm9wYWdhdGlvblRhcmdldHMpIHtcbiAgICAgIHJldHVybiBpc1NhbWVPcmlnaW5SZXF1ZXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBzdHJpbmdNYXRjaGVzU29tZVBhdHRlcm4ocmVzb2x2ZWRVcmwudG9TdHJpbmcoKSwgdHJhY2VQcm9wYWdhdGlvblRhcmdldHMpIHx8XG4gICAgICAgIChpc1NhbWVPcmlnaW5SZXF1ZXN0ICYmIHN0cmluZ01hdGNoZXNTb21lUGF0dGVybihyZXNvbHZlZFVybC5wYXRobmFtZSwgdHJhY2VQcm9wYWdhdGlvblRhcmdldHMpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgYW5kIHRyYWNrIHhociByZXF1ZXN0IHNwYW5zXG4gKlxuICogQHJldHVybnMgU3BhbiBpZiBhIHNwYW4gd2FzIGNyZWF0ZWQsIG90aGVyd2lzZSB2b2lkLlxuICovXG5mdW5jdGlvbiB4aHJDYWxsYmFjayhcbiAgaGFuZGxlckRhdGEsXG4gIHNob3VsZENyZWF0ZVNwYW4sXG4gIHNob3VsZEF0dGFjaEhlYWRlcnMsXG4gIHNwYW5zLFxuKSB7XG4gIGNvbnN0IHhociA9IGhhbmRsZXJEYXRhLnhocjtcbiAgY29uc3Qgc2VudHJ5WGhyRGF0YSA9IHhocj8uW1NFTlRSWV9YSFJfREFUQV9LRVldO1xuXG4gIGlmICgheGhyIHx8IHhoci5fX3NlbnRyeV9vd25fcmVxdWVzdF9fIHx8ICFzZW50cnlYaHJEYXRhKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHsgdXJsLCBtZXRob2QgfSA9IHNlbnRyeVhockRhdGE7XG5cbiAgY29uc3Qgc2hvdWxkQ3JlYXRlU3BhblJlc3VsdCA9IGhhc1NwYW5zRW5hYmxlZCgpICYmIHNob3VsZENyZWF0ZVNwYW4odXJsKTtcblxuICAvLyBjaGVjayBmaXJzdCBpZiB0aGUgcmVxdWVzdCBoYXMgZmluaXNoZWQgYW5kIGlzIHRyYWNrZWQgYnkgYW4gZXhpc3Rpbmcgc3BhbiB3aGljaCBzaG91bGQgbm93IGVuZFxuICBpZiAoaGFuZGxlckRhdGEuZW5kVGltZXN0YW1wICYmIHNob3VsZENyZWF0ZVNwYW5SZXN1bHQpIHtcbiAgICBjb25zdCBzcGFuSWQgPSB4aHIuX19zZW50cnlfeGhyX3NwYW5faWRfXztcbiAgICBpZiAoIXNwYW5JZCkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc3BhbiA9IHNwYW5zW3NwYW5JZF07XG4gICAgaWYgKHNwYW4gJiYgc2VudHJ5WGhyRGF0YS5zdGF0dXNfY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZXRIdHRwU3RhdHVzKHNwYW4sIHNlbnRyeVhockRhdGEuc3RhdHVzX2NvZGUpO1xuICAgICAgc3Bhbi5lbmQoKTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxuICAgICAgZGVsZXRlIHNwYW5zW3NwYW5JZF07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBmdWxsVXJsID0gZ2V0RnVsbFVSTCh1cmwpO1xuICBjb25zdCBwYXJzZWRVcmwgPSBmdWxsVXJsID8gcGFyc2VVcmwoZnVsbFVybCkgOiBwYXJzZVVybCh1cmwpO1xuXG4gIGNvbnN0IHVybEZvclNwYW5OYW1lID0gc3RyaXBVcmxRdWVyeUFuZEZyYWdtZW50KHVybCk7XG5cbiAgY29uc3QgaGFzUGFyZW50ID0gISFnZXRBY3RpdmVTcGFuKCk7XG5cbiAgY29uc3Qgc3BhbiA9XG4gICAgc2hvdWxkQ3JlYXRlU3BhblJlc3VsdCAmJiBoYXNQYXJlbnRcbiAgICAgID8gc3RhcnRJbmFjdGl2ZVNwYW4oe1xuICAgICAgICAgIG5hbWU6IGAke21ldGhvZH0gJHt1cmxGb3JTcGFuTmFtZX1gLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHR5cGU6ICd4aHInLFxuICAgICAgICAgICAgJ2h0dHAubWV0aG9kJzogbWV0aG9kLFxuICAgICAgICAgICAgJ2h0dHAudXJsJzogZnVsbFVybCxcbiAgICAgICAgICAgICdzZXJ2ZXIuYWRkcmVzcyc6IHBhcnNlZFVybD8uaG9zdCxcbiAgICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06ICdhdXRvLmh0dHAuYnJvd3NlcicsXG4gICAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUF06ICdodHRwLmNsaWVudCcsXG4gICAgICAgICAgICAuLi4ocGFyc2VkVXJsPy5zZWFyY2ggJiYgeyAnaHR0cC5xdWVyeSc6IHBhcnNlZFVybD8uc2VhcmNoIH0pLFxuICAgICAgICAgICAgLi4uKHBhcnNlZFVybD8uaGFzaCAmJiB7ICdodHRwLmZyYWdtZW50JzogcGFyc2VkVXJsPy5oYXNoIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICA6IG5ldyBTZW50cnlOb25SZWNvcmRpbmdTcGFuKCk7XG5cbiAgeGhyLl9fc2VudHJ5X3hocl9zcGFuX2lkX18gPSBzcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkO1xuICBzcGFuc1t4aHIuX19zZW50cnlfeGhyX3NwYW5faWRfX10gPSBzcGFuO1xuXG4gIGlmIChzaG91bGRBdHRhY2hIZWFkZXJzKHVybCkpIHtcbiAgICBhZGRUcmFjaW5nSGVhZGVyc1RvWGhyUmVxdWVzdChcbiAgICAgIHhocixcbiAgICAgIC8vIElmIHBlcmZvcm1hbmNlIGlzIGRpc2FibGVkIChUV1ApIG9yIHRoZXJlJ3Mgbm8gYWN0aXZlIHJvb3Qgc3BhbiAocGFnZWxvYWQvbmF2aWdhdGlvbi9pbnRlcmFjdGlvbiksXG4gICAgICAvLyB3ZSBkbyBub3Qgd2FudCB0byB1c2UgdGhlIHNwYW4gYXMgYmFzZSBmb3IgdGhlIHRyYWNlIGhlYWRlcnMsXG4gICAgICAvLyB3aGljaCBtZWFucyB0aGF0IHRoZSBoZWFkZXJzIHdpbGwgYmUgZ2VuZXJhdGVkIGZyb20gdGhlIHNjb3BlIGFuZCB0aGUgc2FtcGxpbmcgZGVjaXNpb24gaXMgZGVmZXJyZWRcbiAgICAgIGhhc1NwYW5zRW5hYmxlZCgpICYmIGhhc1BhcmVudCA/IHNwYW4gOiB1bmRlZmluZWQsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuICBpZiAoY2xpZW50KSB7XG4gICAgY2xpZW50LmVtaXQoJ2JlZm9yZU91dGdvaW5nUmVxdWVzdFNwYW4nLCBzcGFuLCBoYW5kbGVyRGF0YSApO1xuICB9XG5cbiAgcmV0dXJuIHNwYW47XG59XG5cbmZ1bmN0aW9uIGFkZFRyYWNpbmdIZWFkZXJzVG9YaHJSZXF1ZXN0KHhociwgc3Bhbikge1xuICBjb25zdCB7ICdzZW50cnktdHJhY2UnOiBzZW50cnlUcmFjZSwgYmFnZ2FnZSB9ID0gZ2V0VHJhY2VEYXRhKHsgc3BhbiB9KTtcblxuICBpZiAoc2VudHJ5VHJhY2UpIHtcbiAgICBzZXRIZWFkZXJPblhocih4aHIsIHNlbnRyeVRyYWNlLCBiYWdnYWdlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRIZWFkZXJPblhocihcbiAgeGhyLFxuICBzZW50cnlUcmFjZUhlYWRlcixcbiAgc2VudHJ5QmFnZ2FnZUhlYWRlcixcbikge1xuICBjb25zdCBvcmlnaW5hbEhlYWRlcnMgPSB4aHIuX19zZW50cnlfeGhyX3YzX18/LnJlcXVlc3RfaGVhZGVycztcblxuICBpZiAob3JpZ2luYWxIZWFkZXJzPy5bJ3NlbnRyeS10cmFjZSddKSB7XG4gICAgLy8gYmFpbCBpZiBhIHNlbnRyeS10cmFjZSBoZWFkZXIgaXMgYWxyZWFkeSBzZXRcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ3NlbnRyeS10cmFjZScsIHNlbnRyeVRyYWNlSGVhZGVyKTtcbiAgICBpZiAoc2VudHJ5QmFnZ2FnZUhlYWRlcikge1xuICAgICAgLy8gb25seSBhZGQgb3VyIGhlYWRlcnMgaWZcbiAgICAgIC8vIC0gbm8gcHJlLWV4aXN0aW5nIGJhZ2dhZ2UgaGVhZGVyIGV4aXN0c1xuICAgICAgLy8gLSBvciBpdCBpcyBzZXQgYW5kIGRvZXNuJ3QgeWV0IGNvbnRhaW4gc2VudHJ5IHZhbHVlc1xuICAgICAgY29uc3Qgb3JpZ2luYWxCYWdnYWdlSGVhZGVyID0gb3JpZ2luYWxIZWFkZXJzPy5bJ2JhZ2dhZ2UnXTtcbiAgICAgIGlmICghb3JpZ2luYWxCYWdnYWdlSGVhZGVyIHx8ICFiYWdnYWdlSGVhZGVySGFzU2VudHJ5VmFsdWVzKG9yaWdpbmFsQmFnZ2FnZUhlYWRlcikpIHtcbiAgICAgICAgLy8gRnJvbSBNRE46IFwiSWYgdGhpcyBtZXRob2QgaXMgY2FsbGVkIHNldmVyYWwgdGltZXMgd2l0aCB0aGUgc2FtZSBoZWFkZXIsIHRoZSB2YWx1ZXMgYXJlIG1lcmdlZCBpbnRvIG9uZSBzaW5nbGUgcmVxdWVzdCBoZWFkZXIuXCJcbiAgICAgICAgLy8gV2UgY2FuIHRoZXJlZm9yZSBzaW1wbHkgc2V0IGEgYmFnZ2FnZSBoZWFkZXIgd2l0aG91dCBjaGVja2luZyB3aGF0IHdhcyB0aGVyZSBiZWZvcmVcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0L3NldFJlcXVlc3RIZWFkZXJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ2JhZ2dhZ2UnLCBzZW50cnlCYWdnYWdlSGVhZGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldFJlcXVlc3RIZWFkZXInIG9uICdYTUxIdHRwUmVxdWVzdCc6IFRoZSBvYmplY3QncyBzdGF0ZSBtdXN0IGJlIE9QRU5FRC5cbiAgfVxufVxuXG5mdW5jdGlvbiBiYWdnYWdlSGVhZGVySGFzU2VudHJ5VmFsdWVzKGJhZ2dhZ2VIZWFkZXIpIHtcbiAgcmV0dXJuIGJhZ2dhZ2VIZWFkZXIuc3BsaXQoJywnKS5zb21lKHZhbHVlID0+IHZhbHVlLnRyaW0oKS5zdGFydHNXaXRoKCdzZW50cnktJykpO1xufVxuXG5mdW5jdGlvbiBnZXRGdWxsVVJMKHVybCkge1xuICB0cnkge1xuICAgIC8vIEJ5IGFkZGluZyBhIGJhc2UgVVJMIHRvIG5ldyBVUkwoKSwgdGhpcyB3aWxsIGFsc28gd29yayBmb3IgcmVsYXRpdmUgdXJsc1xuICAgIC8vIElmIGB1cmxgIGlzIGEgZnVsbCBVUkwsIHRoZSBiYXNlIFVSTCBpcyBpZ25vcmVkIGFueWhvd1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwodXJsLCBXSU5ET1cubG9jYXRpb24ub3JpZ2luKTtcbiAgICByZXR1cm4gcGFyc2VkLmhyZWY7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IHsgZGVmYXVsdFJlcXVlc3RJbnN0cnVtZW50YXRpb25PcHRpb25zLCBpbnN0cnVtZW50T3V0Z29pbmdSZXF1ZXN0cywgc2hvdWxkQXR0YWNoSGVhZGVycywgeGhyQ2FsbGJhY2sgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcXVlc3QuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/request.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/resource-timing.js":
/*!*************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/resource-timing.js ***!
  \*************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   resourceTimingToSpanAttributes: () => (/* binding */ resourceTimingToSpanAttributes)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry-internal/browser-utils */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/index.js\");\n\n\n\nfunction getAbsoluteTime(time = 0) {\n  return (((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.browserPerformanceTimeOrigin)() || performance.timeOrigin) + time) / 1000;\n}\n\n/**\n * Converts a PerformanceResourceTiming entry to span data for the resource span.\n *\n * @param resourceTiming\n * @returns An array where the first element is the attribute name and the second element is the attribute value.\n */\nfunction resourceTimingToSpanAttributes(\n  resourceTiming,\n) {\n  const timingSpanData = [];\n  // Checking for only `undefined` and `null` is intentional because it's\n  // valid for `nextHopProtocol` to be an empty string.\n  if (resourceTiming.nextHopProtocol != undefined) {\n    const { name, version } = (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.extractNetworkProtocol)(resourceTiming.nextHopProtocol);\n    timingSpanData.push(['network.protocol.version', version], ['network.protocol.name', name]);\n  }\n  if (!(0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.browserPerformanceTimeOrigin)()) {\n    return timingSpanData;\n  }\n  return [\n    ...timingSpanData,\n    ['http.request.redirect_start', getAbsoluteTime(resourceTiming.redirectStart)],\n    ['http.request.fetch_start', getAbsoluteTime(resourceTiming.fetchStart)],\n    ['http.request.domain_lookup_start', getAbsoluteTime(resourceTiming.domainLookupStart)],\n    ['http.request.domain_lookup_end', getAbsoluteTime(resourceTiming.domainLookupEnd)],\n    ['http.request.connect_start', getAbsoluteTime(resourceTiming.connectStart)],\n    ['http.request.secure_connection_start', getAbsoluteTime(resourceTiming.secureConnectionStart)],\n    ['http.request.connection_end', getAbsoluteTime(resourceTiming.connectEnd)],\n    ['http.request.request_start', getAbsoluteTime(resourceTiming.requestStart)],\n    ['http.request.response_start', getAbsoluteTime(resourceTiming.responseStart)],\n    ['http.request.response_end', getAbsoluteTime(resourceTiming.responseEnd)],\n  ];\n}\n\n\n//# sourceMappingURL=resource-timing.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS90cmFjaW5nL3Jlc291cmNlLXRpbWluZy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBNEQ7QUFDWTs7QUFFeEU7QUFDQSxXQUFXLDBFQUE0QjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksZ0JBQWdCLEVBQUUsc0ZBQXNCO0FBQ3BEO0FBQ0E7QUFDQSxPQUFPLDBFQUE0QjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFMEM7QUFDMUMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vdHJhY2luZy9yZXNvdXJjZS10aW1pbmcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBleHRyYWN0TmV0d29ya1Byb3RvY29sIH0gZnJvbSAnQHNlbnRyeS1pbnRlcm5hbC9icm93c2VyLXV0aWxzJztcblxuZnVuY3Rpb24gZ2V0QWJzb2x1dGVUaW1lKHRpbWUgPSAwKSB7XG4gIHJldHVybiAoKGJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4oKSB8fCBwZXJmb3JtYW5jZS50aW1lT3JpZ2luKSArIHRpbWUpIC8gMTAwMDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcgZW50cnkgdG8gc3BhbiBkYXRhIGZvciB0aGUgcmVzb3VyY2Ugc3Bhbi5cbiAqXG4gKiBAcGFyYW0gcmVzb3VyY2VUaW1pbmdcbiAqIEByZXR1cm5zIEFuIGFycmF5IHdoZXJlIHRoZSBmaXJzdCBlbGVtZW50IGlzIHRoZSBhdHRyaWJ1dGUgbmFtZSBhbmQgdGhlIHNlY29uZCBlbGVtZW50IGlzIHRoZSBhdHRyaWJ1dGUgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHJlc291cmNlVGltaW5nVG9TcGFuQXR0cmlidXRlcyhcbiAgcmVzb3VyY2VUaW1pbmcsXG4pIHtcbiAgY29uc3QgdGltaW5nU3BhbkRhdGEgPSBbXTtcbiAgLy8gQ2hlY2tpbmcgZm9yIG9ubHkgYHVuZGVmaW5lZGAgYW5kIGBudWxsYCBpcyBpbnRlbnRpb25hbCBiZWNhdXNlIGl0J3NcbiAgLy8gdmFsaWQgZm9yIGBuZXh0SG9wUHJvdG9jb2xgIHRvIGJlIGFuIGVtcHR5IHN0cmluZy5cbiAgaWYgKHJlc291cmNlVGltaW5nLm5leHRIb3BQcm90b2NvbCAhPSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCB7IG5hbWUsIHZlcnNpb24gfSA9IGV4dHJhY3ROZXR3b3JrUHJvdG9jb2wocmVzb3VyY2VUaW1pbmcubmV4dEhvcFByb3RvY29sKTtcbiAgICB0aW1pbmdTcGFuRGF0YS5wdXNoKFsnbmV0d29yay5wcm90b2NvbC52ZXJzaW9uJywgdmVyc2lvbl0sIFsnbmV0d29yay5wcm90b2NvbC5uYW1lJywgbmFtZV0pO1xuICB9XG4gIGlmICghYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbigpKSB7XG4gICAgcmV0dXJuIHRpbWluZ1NwYW5EYXRhO1xuICB9XG4gIHJldHVybiBbXG4gICAgLi4udGltaW5nU3BhbkRhdGEsXG4gICAgWydodHRwLnJlcXVlc3QucmVkaXJlY3Rfc3RhcnQnLCBnZXRBYnNvbHV0ZVRpbWUocmVzb3VyY2VUaW1pbmcucmVkaXJlY3RTdGFydCldLFxuICAgIFsnaHR0cC5yZXF1ZXN0LmZldGNoX3N0YXJ0JywgZ2V0QWJzb2x1dGVUaW1lKHJlc291cmNlVGltaW5nLmZldGNoU3RhcnQpXSxcbiAgICBbJ2h0dHAucmVxdWVzdC5kb21haW5fbG9va3VwX3N0YXJ0JywgZ2V0QWJzb2x1dGVUaW1lKHJlc291cmNlVGltaW5nLmRvbWFpbkxvb2t1cFN0YXJ0KV0sXG4gICAgWydodHRwLnJlcXVlc3QuZG9tYWluX2xvb2t1cF9lbmQnLCBnZXRBYnNvbHV0ZVRpbWUocmVzb3VyY2VUaW1pbmcuZG9tYWluTG9va3VwRW5kKV0sXG4gICAgWydodHRwLnJlcXVlc3QuY29ubmVjdF9zdGFydCcsIGdldEFic29sdXRlVGltZShyZXNvdXJjZVRpbWluZy5jb25uZWN0U3RhcnQpXSxcbiAgICBbJ2h0dHAucmVxdWVzdC5zZWN1cmVfY29ubmVjdGlvbl9zdGFydCcsIGdldEFic29sdXRlVGltZShyZXNvdXJjZVRpbWluZy5zZWN1cmVDb25uZWN0aW9uU3RhcnQpXSxcbiAgICBbJ2h0dHAucmVxdWVzdC5jb25uZWN0aW9uX2VuZCcsIGdldEFic29sdXRlVGltZShyZXNvdXJjZVRpbWluZy5jb25uZWN0RW5kKV0sXG4gICAgWydodHRwLnJlcXVlc3QucmVxdWVzdF9zdGFydCcsIGdldEFic29sdXRlVGltZShyZXNvdXJjZVRpbWluZy5yZXF1ZXN0U3RhcnQpXSxcbiAgICBbJ2h0dHAucmVxdWVzdC5yZXNwb25zZV9zdGFydCcsIGdldEFic29sdXRlVGltZShyZXNvdXJjZVRpbWluZy5yZXNwb25zZVN0YXJ0KV0sXG4gICAgWydodHRwLnJlcXVlc3QucmVzcG9uc2VfZW5kJywgZ2V0QWJzb2x1dGVUaW1lKHJlc291cmNlVGltaW5nLnJlc3BvbnNlRW5kKV0sXG4gIF07XG59XG5cbmV4cG9ydCB7IHJlc291cmNlVGltaW5nVG9TcGFuQXR0cmlidXRlcyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzb3VyY2UtdGltaW5nLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/tracing/resource-timing.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/transports/fetch.js":
/*!******************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/transports/fetch.js ***!
  \******************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   makeFetchTransport: () => (/* binding */ makeFetchTransport)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry-internal/browser-utils */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/index.js\");\n\n\n\n/**\n * Creates a Transport that uses the Fetch API to send events to Sentry.\n */\nfunction makeFetchTransport(\n  options,\n  nativeFetch = (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.getNativeImplementation)('fetch'),\n) {\n  let pendingBodySize = 0;\n  let pendingCount = 0;\n\n  function makeRequest(request) {\n    const requestSize = request.body.length;\n    pendingBodySize += requestSize;\n    pendingCount++;\n\n    const requestOptions = {\n      body: request.body,\n      method: 'POST',\n      referrerPolicy: 'strict-origin',\n      headers: options.headers,\n      // Outgoing requests are usually cancelled when navigating to a different page, causing a \"TypeError: Failed to\n      // fetch\" error and sending a \"network_error\" client-outcome - in Chrome, the request status shows \"(cancelled)\".\n      // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're\n      // frequently sending events right before the user is switching pages (eg. when finishing navigation transactions).\n      // Gotchas:\n      // - `keepalive` isn't supported by Firefox\n      // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):\n      //   If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.\n      //   We will therefore only activate the flag when we're below that limit.\n      // There is also a limit of requests that can be open at the same time, so we also limit this to 15\n      // See https://github.com/getsentry/sentry-javascript/pull/7553 for details\n      keepalive: pendingBodySize <= 60000 && pendingCount < 15,\n      ...options.fetchOptions,\n    };\n\n    if (!nativeFetch) {\n      (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.clearCachedImplementation)('fetch');\n      return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.rejectedSyncPromise)('No fetch implementation available');\n    }\n\n    try {\n      // Note: We do not need to suppress tracing here, becasue we are using the native fetch, instead of our wrapped one.\n      return nativeFetch(options.url, requestOptions).then(response => {\n        pendingBodySize -= requestSize;\n        pendingCount--;\n        return {\n          statusCode: response.status,\n          headers: {\n            'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n            'retry-after': response.headers.get('Retry-After'),\n          },\n        };\n      });\n    } catch (e) {\n      (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.clearCachedImplementation)('fetch');\n      pendingBodySize -= requestSize;\n      pendingCount--;\n      return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.rejectedSyncPromise)(e);\n    }\n  }\n\n  return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.createTransport)(options, makeRequest);\n}\n\n\n//# sourceMappingURL=fetch.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS90cmFuc3BvcnRzL2ZldGNoLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFvRTtBQUNnQzs7QUFFcEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix1RkFBdUI7QUFDdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSx5RkFBeUI7QUFDL0IsYUFBYSxpRUFBbUI7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOLE1BQU0seUZBQXlCO0FBQy9CO0FBQ0E7QUFDQSxhQUFhLGlFQUFtQjtBQUNoQztBQUNBOztBQUVBLFNBQVMsNkRBQWU7QUFDeEI7O0FBRThCO0FBQzlCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrYnJvd3NlckA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9idWlsZC9ucG0vZXNtL3RyYW5zcG9ydHMvZmV0Y2guanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlVHJhbnNwb3J0LCByZWplY3RlZFN5bmNQcm9taXNlIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGdldE5hdGl2ZUltcGxlbWVudGF0aW9uLCBjbGVhckNhY2hlZEltcGxlbWVudGF0aW9uIH0gZnJvbSAnQHNlbnRyeS1pbnRlcm5hbC9icm93c2VyLXV0aWxzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgVHJhbnNwb3J0IHRoYXQgdXNlcyB0aGUgRmV0Y2ggQVBJIHRvIHNlbmQgZXZlbnRzIHRvIFNlbnRyeS5cbiAqL1xuZnVuY3Rpb24gbWFrZUZldGNoVHJhbnNwb3J0KFxuICBvcHRpb25zLFxuICBuYXRpdmVGZXRjaCA9IGdldE5hdGl2ZUltcGxlbWVudGF0aW9uKCdmZXRjaCcpLFxuKSB7XG4gIGxldCBwZW5kaW5nQm9keVNpemUgPSAwO1xuICBsZXQgcGVuZGluZ0NvdW50ID0gMDtcblxuICBmdW5jdGlvbiBtYWtlUmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgY29uc3QgcmVxdWVzdFNpemUgPSByZXF1ZXN0LmJvZHkubGVuZ3RoO1xuICAgIHBlbmRpbmdCb2R5U2l6ZSArPSByZXF1ZXN0U2l6ZTtcbiAgICBwZW5kaW5nQ291bnQrKztcblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgYm9keTogcmVxdWVzdC5ib2R5LFxuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICByZWZlcnJlclBvbGljeTogJ3N0cmljdC1vcmlnaW4nLFxuICAgICAgaGVhZGVyczogb3B0aW9ucy5oZWFkZXJzLFxuICAgICAgLy8gT3V0Z29pbmcgcmVxdWVzdHMgYXJlIHVzdWFsbHkgY2FuY2VsbGVkIHdoZW4gbmF2aWdhdGluZyB0byBhIGRpZmZlcmVudCBwYWdlLCBjYXVzaW5nIGEgXCJUeXBlRXJyb3I6IEZhaWxlZCB0b1xuICAgICAgLy8gZmV0Y2hcIiBlcnJvciBhbmQgc2VuZGluZyBhIFwibmV0d29ya19lcnJvclwiIGNsaWVudC1vdXRjb21lIC0gaW4gQ2hyb21lLCB0aGUgcmVxdWVzdCBzdGF0dXMgc2hvd3MgXCIoY2FuY2VsbGVkKVwiLlxuICAgICAgLy8gVGhlIGBrZWVwYWxpdmVgIGZsYWcga2VlcHMgb3V0Z29pbmcgcmVxdWVzdHMgYWxpdmUsIGV2ZW4gd2hlbiBzd2l0Y2hpbmcgcGFnZXMuIFdlIHdhbnQgdGhpcyBzaW5jZSB3ZSdyZVxuICAgICAgLy8gZnJlcXVlbnRseSBzZW5kaW5nIGV2ZW50cyByaWdodCBiZWZvcmUgdGhlIHVzZXIgaXMgc3dpdGNoaW5nIHBhZ2VzIChlZy4gd2hlbiBmaW5pc2hpbmcgbmF2aWdhdGlvbiB0cmFuc2FjdGlvbnMpLlxuICAgICAgLy8gR290Y2hhczpcbiAgICAgIC8vIC0gYGtlZXBhbGl2ZWAgaXNuJ3Qgc3VwcG9ydGVkIGJ5IEZpcmVmb3hcbiAgICAgIC8vIC0gQXMgcGVyIHNwZWMgKGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLW5ldHdvcmstb3ItY2FjaGUtZmV0Y2gpOlxuICAgICAgLy8gICBJZiB0aGUgc3VtIG9mIGNvbnRlbnRMZW5ndGggYW5kIGluZmxpZ2h0S2VlcGFsaXZlQnl0ZXMgaXMgZ3JlYXRlciB0aGFuIDY0IGtpYmlieXRlcywgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgLy8gICBXZSB3aWxsIHRoZXJlZm9yZSBvbmx5IGFjdGl2YXRlIHRoZSBmbGFnIHdoZW4gd2UncmUgYmVsb3cgdGhhdCBsaW1pdC5cbiAgICAgIC8vIFRoZXJlIGlzIGFsc28gYSBsaW1pdCBvZiByZXF1ZXN0cyB0aGF0IGNhbiBiZSBvcGVuIGF0IHRoZSBzYW1lIHRpbWUsIHNvIHdlIGFsc28gbGltaXQgdGhpcyB0byAxNVxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvcHVsbC83NTUzIGZvciBkZXRhaWxzXG4gICAgICBrZWVwYWxpdmU6IHBlbmRpbmdCb2R5U2l6ZSA8PSA2MDAwMCAmJiBwZW5kaW5nQ291bnQgPCAxNSxcbiAgICAgIC4uLm9wdGlvbnMuZmV0Y2hPcHRpb25zLFxuICAgIH07XG5cbiAgICBpZiAoIW5hdGl2ZUZldGNoKSB7XG4gICAgICBjbGVhckNhY2hlZEltcGxlbWVudGF0aW9uKCdmZXRjaCcpO1xuICAgICAgcmV0dXJuIHJlamVjdGVkU3luY1Byb21pc2UoJ05vIGZldGNoIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZScpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBOb3RlOiBXZSBkbyBub3QgbmVlZCB0byBzdXBwcmVzcyB0cmFjaW5nIGhlcmUsIGJlY2FzdWUgd2UgYXJlIHVzaW5nIHRoZSBuYXRpdmUgZmV0Y2gsIGluc3RlYWQgb2Ygb3VyIHdyYXBwZWQgb25lLlxuICAgICAgcmV0dXJuIG5hdGl2ZUZldGNoKG9wdGlvbnMudXJsLCByZXF1ZXN0T3B0aW9ucykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIHBlbmRpbmdCb2R5U2l6ZSAtPSByZXF1ZXN0U2l6ZTtcbiAgICAgICAgcGVuZGluZ0NvdW50LS07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICd4LXNlbnRyeS1yYXRlLWxpbWl0cyc6IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdYLVNlbnRyeS1SYXRlLUxpbWl0cycpLFxuICAgICAgICAgICAgJ3JldHJ5LWFmdGVyJzogcmVzcG9uc2UuaGVhZGVycy5nZXQoJ1JldHJ5LUFmdGVyJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNsZWFyQ2FjaGVkSW1wbGVtZW50YXRpb24oJ2ZldGNoJyk7XG4gICAgICBwZW5kaW5nQm9keVNpemUgLT0gcmVxdWVzdFNpemU7XG4gICAgICBwZW5kaW5nQ291bnQtLTtcbiAgICAgIHJldHVybiByZWplY3RlZFN5bmNQcm9taXNlKGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVUcmFuc3BvcnQob3B0aW9ucywgbWFrZVJlcXVlc3QpO1xufVxuXG5leHBvcnQgeyBtYWtlRmV0Y2hUcmFuc3BvcnQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZldGNoLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/transports/fetch.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/transports/offline.js":
/*!********************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/transports/offline.js ***!
  \********************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   createStore: () => (/* binding */ createStore),\n/* harmony export */   makeBrowserOfflineTransport: () => (/* binding */ makeBrowserOfflineTransport),\n/* harmony export */   push: () => (/* binding */ push),\n/* harmony export */   shift: () => (/* binding */ shift),\n/* harmony export */   unshift: () => (/* binding */ unshift)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\");\n/* harmony import */ var _fetch_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fetch.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/transports/fetch.js\");\n\n\n\n\n// 'Store', 'promisifyRequest' and 'createStore' were originally copied from the 'idb-keyval' package before being\n// modified and simplified: https://github.com/jakearchibald/idb-keyval\n//\n// At commit: 0420a704fd6cbb4225429c536b1f61112d012fca\n// Original license:\n\n// Copyright 2016, Jake Archibald\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//   http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nfunction promisifyRequest(request) {\n  return new Promise((resolve, reject) => {\n    // @ts-expect-error - file size hacks\n    request.oncomplete = request.onsuccess = () => resolve(request.result);\n    // @ts-expect-error - file size hacks\n    request.onabort = request.onerror = () => reject(request.error);\n  });\n}\n\n/** Create or open an IndexedDb store */\nfunction createStore(dbName, storeName) {\n  const request = indexedDB.open(dbName);\n  request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n  const dbp = promisifyRequest(request);\n\n  return callback => dbp.then(db => callback(db.transaction(storeName, 'readwrite').objectStore(storeName)));\n}\n\nfunction keys(store) {\n  return promisifyRequest(store.getAllKeys() );\n}\n\n/** Insert into the end of the store */\nfunction push(store, value, maxQueueSize) {\n  return store(store => {\n    return keys(store).then(keys => {\n      if (keys.length >= maxQueueSize) {\n        return;\n      }\n\n      // We insert with an incremented key so that the entries are popped in order\n      store.put(value, Math.max(...keys, 0) + 1);\n      return promisifyRequest(store.transaction);\n    });\n  });\n}\n\n/** Insert into the front of the store */\nfunction unshift(store, value, maxQueueSize) {\n  return store(store => {\n    return keys(store).then(keys => {\n      if (keys.length >= maxQueueSize) {\n        return;\n      }\n\n      // We insert with an decremented key so that the entries are popped in order\n      store.put(value, Math.min(...keys, 0) - 1);\n      return promisifyRequest(store.transaction);\n    });\n  });\n}\n\n/** Pop the oldest value from the store */\nfunction shift(store) {\n  return store(store => {\n    return keys(store).then(keys => {\n      const firstKey = keys[0];\n      if (firstKey == null) {\n        return undefined;\n      }\n\n      return promisifyRequest(store.get(firstKey)).then(value => {\n        store.delete(firstKey);\n        return promisifyRequest(store.transaction).then(() => value);\n      });\n    });\n  });\n}\n\nfunction createIndexedDbStore(options) {\n  let store;\n\n  // Lazily create the store only when it's needed\n  function getStore() {\n    if (store == undefined) {\n      store = createStore(options.dbName || 'sentry-offline', options.storeName || 'queue');\n    }\n\n    return store;\n  }\n\n  return {\n    push: async (env) => {\n      try {\n        const serialized = await (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.serializeEnvelope)(env);\n        await push(getStore(), serialized, options.maxQueueSize || 30);\n      } catch {\n        //\n      }\n    },\n    unshift: async (env) => {\n      try {\n        const serialized = await (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.serializeEnvelope)(env);\n        await unshift(getStore(), serialized, options.maxQueueSize || 30);\n      } catch {\n        //\n      }\n    },\n    shift: async () => {\n      try {\n        const deserialized = await shift(getStore());\n        if (deserialized) {\n          return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.parseEnvelope)(deserialized);\n        }\n      } catch {\n        //\n      }\n\n      return undefined;\n    },\n  };\n}\n\nfunction makeIndexedDbOfflineTransport(\n  createTransport,\n) {\n  return options => {\n    const transport = createTransport({ ...options, createStore: createIndexedDbStore });\n\n    _helpers_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.addEventListener('online', async _ => {\n      await transport.flush();\n    });\n\n    return transport;\n  };\n}\n\n/**\n * Creates a transport that uses IndexedDb to store events when offline.\n */\nfunction makeBrowserOfflineTransport(\n  createTransport = _fetch_js__WEBPACK_IMPORTED_MODULE_2__.makeFetchTransport,\n) {\n  return makeIndexedDbOfflineTransport((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.makeOfflineTransport)(createTransport));\n}\n\n\n//# sourceMappingURL=offline.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS90cmFuc3BvcnRzL29mZmxpbmUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBc0Y7QUFDL0M7QUFDUzs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsK0RBQWlCO0FBQ2xEO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLGlDQUFpQywrREFBaUI7QUFDbEQ7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiwyREFBYTtBQUM5QjtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsK0NBQStDOztBQUV2RixJQUFJLCtDQUFNO0FBQ1Y7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix5REFBa0I7QUFDdEM7QUFDQSx1Q0FBdUMsa0VBQW9CO0FBQzNEOztBQUUwRTtBQUMxRSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS90cmFuc3BvcnRzL29mZmxpbmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWFrZU9mZmxpbmVUcmFuc3BvcnQsIHBhcnNlRW52ZWxvcGUsIHNlcmlhbGl6ZUVudmVsb3BlIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IFdJTkRPVyB9IGZyb20gJy4uL2hlbHBlcnMuanMnO1xuaW1wb3J0IHsgbWFrZUZldGNoVHJhbnNwb3J0IH0gZnJvbSAnLi9mZXRjaC5qcyc7XG5cbi8vICdTdG9yZScsICdwcm9taXNpZnlSZXF1ZXN0JyBhbmQgJ2NyZWF0ZVN0b3JlJyB3ZXJlIG9yaWdpbmFsbHkgY29waWVkIGZyb20gdGhlICdpZGIta2V5dmFsJyBwYWNrYWdlIGJlZm9yZSBiZWluZ1xuLy8gbW9kaWZpZWQgYW5kIHNpbXBsaWZpZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9qYWtlYXJjaGliYWxkL2lkYi1rZXl2YWxcbi8vXG4vLyBBdCBjb21taXQ6IDA0MjBhNzA0ZmQ2Y2JiNDIyNTQyOWM1MzZiMWY2MTExMmQwMTJmY2Fcbi8vIE9yaWdpbmFsIGxpY2Vuc2U6XG5cbi8vIENvcHlyaWdodCAyMDE2LCBKYWtlIEFyY2hpYmFsZFxuLy9cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbi8vXG4vLyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuLy9cbi8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbmZ1bmN0aW9uIHByb21pc2lmeVJlcXVlc3QocmVxdWVzdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBmaWxlIHNpemUgaGFja3NcbiAgICByZXF1ZXN0Lm9uY29tcGxldGUgPSByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpID0+IHJlc29sdmUocmVxdWVzdC5yZXN1bHQpO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBmaWxlIHNpemUgaGFja3NcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSByZXF1ZXN0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QocmVxdWVzdC5lcnJvcik7XG4gIH0pO1xufVxuXG4vKiogQ3JlYXRlIG9yIG9wZW4gYW4gSW5kZXhlZERiIHN0b3JlICovXG5mdW5jdGlvbiBjcmVhdGVTdG9yZShkYk5hbWUsIHN0b3JlTmFtZSkge1xuICBjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGJOYW1lKTtcbiAgcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoKSA9PiByZXF1ZXN0LnJlc3VsdC5jcmVhdGVPYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuICBjb25zdCBkYnAgPSBwcm9taXNpZnlSZXF1ZXN0KHJlcXVlc3QpO1xuXG4gIHJldHVybiBjYWxsYmFjayA9PiBkYnAudGhlbihkYiA9PiBjYWxsYmFjayhkYi50cmFuc2FjdGlvbihzdG9yZU5hbWUsICdyZWFkd3JpdGUnKS5vYmplY3RTdG9yZShzdG9yZU5hbWUpKSk7XG59XG5cbmZ1bmN0aW9uIGtleXMoc3RvcmUpIHtcbiAgcmV0dXJuIHByb21pc2lmeVJlcXVlc3Qoc3RvcmUuZ2V0QWxsS2V5cygpICk7XG59XG5cbi8qKiBJbnNlcnQgaW50byB0aGUgZW5kIG9mIHRoZSBzdG9yZSAqL1xuZnVuY3Rpb24gcHVzaChzdG9yZSwgdmFsdWUsIG1heFF1ZXVlU2l6ZSkge1xuICByZXR1cm4gc3RvcmUoc3RvcmUgPT4ge1xuICAgIHJldHVybiBrZXlzKHN0b3JlKS50aGVuKGtleXMgPT4ge1xuICAgICAgaWYgKGtleXMubGVuZ3RoID49IG1heFF1ZXVlU2l6ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIGluc2VydCB3aXRoIGFuIGluY3JlbWVudGVkIGtleSBzbyB0aGF0IHRoZSBlbnRyaWVzIGFyZSBwb3BwZWQgaW4gb3JkZXJcbiAgICAgIHN0b3JlLnB1dCh2YWx1ZSwgTWF0aC5tYXgoLi4ua2V5cywgMCkgKyAxKTtcbiAgICAgIHJldHVybiBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLnRyYW5zYWN0aW9uKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKiBJbnNlcnQgaW50byB0aGUgZnJvbnQgb2YgdGhlIHN0b3JlICovXG5mdW5jdGlvbiB1bnNoaWZ0KHN0b3JlLCB2YWx1ZSwgbWF4UXVldWVTaXplKSB7XG4gIHJldHVybiBzdG9yZShzdG9yZSA9PiB7XG4gICAgcmV0dXJuIGtleXMoc3RvcmUpLnRoZW4oa2V5cyA9PiB7XG4gICAgICBpZiAoa2V5cy5sZW5ndGggPj0gbWF4UXVldWVTaXplKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gV2UgaW5zZXJ0IHdpdGggYW4gZGVjcmVtZW50ZWQga2V5IHNvIHRoYXQgdGhlIGVudHJpZXMgYXJlIHBvcHBlZCBpbiBvcmRlclxuICAgICAgc3RvcmUucHV0KHZhbHVlLCBNYXRoLm1pbiguLi5rZXlzLCAwKSAtIDEpO1xuICAgICAgcmV0dXJuIHByb21pc2lmeVJlcXVlc3Qoc3RvcmUudHJhbnNhY3Rpb24pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqIFBvcCB0aGUgb2xkZXN0IHZhbHVlIGZyb20gdGhlIHN0b3JlICovXG5mdW5jdGlvbiBzaGlmdChzdG9yZSkge1xuICByZXR1cm4gc3RvcmUoc3RvcmUgPT4ge1xuICAgIHJldHVybiBrZXlzKHN0b3JlKS50aGVuKGtleXMgPT4ge1xuICAgICAgY29uc3QgZmlyc3RLZXkgPSBrZXlzWzBdO1xuICAgICAgaWYgKGZpcnN0S2V5ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2lmeVJlcXVlc3Qoc3RvcmUuZ2V0KGZpcnN0S2V5KSkudGhlbih2YWx1ZSA9PiB7XG4gICAgICAgIHN0b3JlLmRlbGV0ZShmaXJzdEtleSk7XG4gICAgICAgIHJldHVybiBwcm9taXNpZnlSZXF1ZXN0KHN0b3JlLnRyYW5zYWN0aW9uKS50aGVuKCgpID0+IHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW5kZXhlZERiU3RvcmUob3B0aW9ucykge1xuICBsZXQgc3RvcmU7XG5cbiAgLy8gTGF6aWx5IGNyZWF0ZSB0aGUgc3RvcmUgb25seSB3aGVuIGl0J3MgbmVlZGVkXG4gIGZ1bmN0aW9uIGdldFN0b3JlKCkge1xuICAgIGlmIChzdG9yZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHN0b3JlID0gY3JlYXRlU3RvcmUob3B0aW9ucy5kYk5hbWUgfHwgJ3NlbnRyeS1vZmZsaW5lJywgb3B0aW9ucy5zdG9yZU5hbWUgfHwgJ3F1ZXVlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3JlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwdXNoOiBhc3luYyAoZW52KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gYXdhaXQgc2VyaWFsaXplRW52ZWxvcGUoZW52KTtcbiAgICAgICAgYXdhaXQgcHVzaChnZXRTdG9yZSgpLCBzZXJpYWxpemVkLCBvcHRpb25zLm1heFF1ZXVlU2l6ZSB8fCAzMCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy9cbiAgICAgIH1cbiAgICB9LFxuICAgIHVuc2hpZnQ6IGFzeW5jIChlbnYpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBhd2FpdCBzZXJpYWxpemVFbnZlbG9wZShlbnYpO1xuICAgICAgICBhd2FpdCB1bnNoaWZ0KGdldFN0b3JlKCksIHNlcmlhbGl6ZWQsIG9wdGlvbnMubWF4UXVldWVTaXplIHx8IDMwKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvL1xuICAgICAgfVxuICAgIH0sXG4gICAgc2hpZnQ6IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGF3YWl0IHNoaWZ0KGdldFN0b3JlKCkpO1xuICAgICAgICBpZiAoZGVzZXJpYWxpemVkKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlRW52ZWxvcGUoZGVzZXJpYWxpemVkKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWFrZUluZGV4ZWREYk9mZmxpbmVUcmFuc3BvcnQoXG4gIGNyZWF0ZVRyYW5zcG9ydCxcbikge1xuICByZXR1cm4gb3B0aW9ucyA9PiB7XG4gICAgY29uc3QgdHJhbnNwb3J0ID0gY3JlYXRlVHJhbnNwb3J0KHsgLi4ub3B0aW9ucywgY3JlYXRlU3RvcmU6IGNyZWF0ZUluZGV4ZWREYlN0b3JlIH0pO1xuXG4gICAgV0lORE9XLmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsIGFzeW5jIF8gPT4ge1xuICAgICAgYXdhaXQgdHJhbnNwb3J0LmZsdXNoKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJhbnNwb3J0O1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB0cmFuc3BvcnQgdGhhdCB1c2VzIEluZGV4ZWREYiB0byBzdG9yZSBldmVudHMgd2hlbiBvZmZsaW5lLlxuICovXG5mdW5jdGlvbiBtYWtlQnJvd3Nlck9mZmxpbmVUcmFuc3BvcnQoXG4gIGNyZWF0ZVRyYW5zcG9ydCA9IG1ha2VGZXRjaFRyYW5zcG9ydCxcbikge1xuICByZXR1cm4gbWFrZUluZGV4ZWREYk9mZmxpbmVUcmFuc3BvcnQobWFrZU9mZmxpbmVUcmFuc3BvcnQoY3JlYXRlVHJhbnNwb3J0KSk7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZVN0b3JlLCBtYWtlQnJvd3Nlck9mZmxpbmVUcmFuc3BvcnQsIHB1c2gsIHNoaWZ0LCB1bnNoaWZ0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vZmZsaW5lLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/transports/offline.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/userfeedback.js":
/*!**************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/userfeedback.js ***!
  \**************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   createUserFeedbackEnvelope: () => (/* binding */ createUserFeedbackEnvelope)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\n/**\n * Creates an envelope from a user feedback.\n */\nfunction createUserFeedbackEnvelope(\n  feedback,\n  {\n    metadata,\n    tunnel,\n    dsn,\n  }\n\n,\n) {\n  const headers = {\n    event_id: feedback.event_id,\n    sent_at: new Date().toISOString(),\n    ...(metadata?.sdk && {\n      sdk: {\n        name: metadata.sdk.name,\n        version: metadata.sdk.version,\n      },\n    }),\n    ...(!!tunnel && !!dsn && { dsn: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.dsnToString)(dsn) }),\n  };\n  const item = createUserFeedbackEnvelopeItem(feedback);\n\n  return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.createEnvelope)(headers, [item]);\n}\n\nfunction createUserFeedbackEnvelopeItem(feedback) {\n  const feedbackHeaders = {\n    type: 'user_report',\n  };\n  return [feedbackHeaders, feedback];\n}\n\n\n//# sourceMappingURL=userfeedback.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS91c2VyZmVlZGJhY2suanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBMkQ7O0FBRTNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsK0JBQStCLEtBQUsseURBQVcsT0FBTztBQUN0RDtBQUNBOztBQUVBLFNBQVMsNERBQWM7QUFDdkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVzQztBQUN0QyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS91c2VyZmVlZGJhY2suanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZHNuVG9TdHJpbmcsIGNyZWF0ZUVudmVsb3BlIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVudmVsb3BlIGZyb20gYSB1c2VyIGZlZWRiYWNrLlxuICovXG5mdW5jdGlvbiBjcmVhdGVVc2VyRmVlZGJhY2tFbnZlbG9wZShcbiAgZmVlZGJhY2ssXG4gIHtcbiAgICBtZXRhZGF0YSxcbiAgICB0dW5uZWwsXG4gICAgZHNuLFxuICB9XG5cbixcbikge1xuICBjb25zdCBoZWFkZXJzID0ge1xuICAgIGV2ZW50X2lkOiBmZWVkYmFjay5ldmVudF9pZCxcbiAgICBzZW50X2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgLi4uKG1ldGFkYXRhPy5zZGsgJiYge1xuICAgICAgc2RrOiB7XG4gICAgICAgIG5hbWU6IG1ldGFkYXRhLnNkay5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBtZXRhZGF0YS5zZGsudmVyc2lvbixcbiAgICAgIH0sXG4gICAgfSksXG4gICAgLi4uKCEhdHVubmVsICYmICEhZHNuICYmIHsgZHNuOiBkc25Ub1N0cmluZyhkc24pIH0pLFxuICB9O1xuICBjb25zdCBpdGVtID0gY3JlYXRlVXNlckZlZWRiYWNrRW52ZWxvcGVJdGVtKGZlZWRiYWNrKTtcblxuICByZXR1cm4gY3JlYXRlRW52ZWxvcGUoaGVhZGVycywgW2l0ZW1dKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVXNlckZlZWRiYWNrRW52ZWxvcGVJdGVtKGZlZWRiYWNrKSB7XG4gIGNvbnN0IGZlZWRiYWNrSGVhZGVycyA9IHtcbiAgICB0eXBlOiAndXNlcl9yZXBvcnQnLFxuICB9O1xuICByZXR1cm4gW2ZlZWRiYWNrSGVhZGVycywgZmVlZGJhY2tdO1xufVxuXG5leHBvcnQgeyBjcmVhdGVVc2VyRmVlZGJhY2tFbnZlbG9wZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlcmZlZWRiYWNrLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/userfeedback.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/utils/detectBrowserExtension.js":
/*!******************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/utils/detectBrowserExtension.js ***!
  \******************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   checkAndWarnIfIsEmbeddedBrowserExtension: () => (/* binding */ checkAndWarnIfIsEmbeddedBrowserExtension)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/debug-build.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../helpers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\");\n\n\n\n\n/**\n * Returns true if the SDK is running in an embedded browser extension.\n * Stand-alone browser extensions (which do not share the same data as the main browser page) are fine.\n */\nfunction checkAndWarnIfIsEmbeddedBrowserExtension() {\n  if (_isEmbeddedBrowserExtension()) {\n    if (_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.consoleSandbox)(() => {\n        // eslint-disable-next-line no-console\n        console.error(\n          '[Sentry] You cannot use Sentry.init() in a browser extension, see: https://docs.sentry.io/platforms/javascript/best-practices/browser-extensions/',\n        );\n      });\n    }\n\n    return true;\n  }\n\n  return false;\n}\n\nfunction _isEmbeddedBrowserExtension() {\n  if (typeof _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.window === 'undefined') {\n    // No need to show the error if we're not in a browser window environment (e.g. service workers)\n    return false;\n  }\n\n  const _window = _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW ;\n\n  // Running the SDK in NW.js, which appears like a browser extension but isn't, is also fine\n  // see: https://github.com/getsentry/sentry-javascript/issues/12668\n  if (_window.nw) {\n    return false;\n  }\n\n  const extensionObject = _window['chrome'] || _window['browser'];\n\n  if (!extensionObject?.runtime?.id) {\n    return false;\n  }\n\n  const href = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getLocationHref)();\n  const extensionProtocols = ['chrome-extension', 'moz-extension', 'ms-browser-extension', 'safari-web-extension'];\n\n  // Running the SDK in a dedicated extension page and calling Sentry.init is fine; no risk of data leakage\n  const isDedicatedExtensionPage =\n    _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW === _helpers_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.top && extensionProtocols.some(protocol => href.startsWith(`${protocol}://`));\n\n  return !isDedicatedExtensionPage;\n}\n\n\n//# sourceMappingURL=detectBrowserExtension.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS91dGlscy9kZXRlY3RCcm93c2VyRXh0ZW5zaW9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBK0Q7QUFDZjtBQUNUOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHdEQUFXO0FBQ25CLE1BQU0sNERBQWM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSwrQ0FBTTtBQUNuQjtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLCtDQUFNOztBQUV4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLDZEQUFlO0FBQzlCOztBQUVBLG9GQUFvRjtBQUNwRjtBQUNBLElBQUksK0NBQU0sS0FBSywrQ0FBTSwrREFBK0QsU0FBUzs7QUFFN0Y7QUFDQTs7QUFFb0Q7QUFDcEQiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeSticm93c2VyQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9icm93c2VyL2J1aWxkL25wbS9lc20vdXRpbHMvZGV0ZWN0QnJvd3NlckV4dGVuc2lvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25zb2xlU2FuZGJveCwgZ2V0TG9jYXRpb25IcmVmIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IERFQlVHX0JVSUxEIH0gZnJvbSAnLi4vZGVidWctYnVpbGQuanMnO1xuaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBTREsgaXMgcnVubmluZyBpbiBhbiBlbWJlZGRlZCBicm93c2VyIGV4dGVuc2lvbi5cbiAqIFN0YW5kLWFsb25lIGJyb3dzZXIgZXh0ZW5zaW9ucyAod2hpY2ggZG8gbm90IHNoYXJlIHRoZSBzYW1lIGRhdGEgYXMgdGhlIG1haW4gYnJvd3NlciBwYWdlKSBhcmUgZmluZS5cbiAqL1xuZnVuY3Rpb24gY2hlY2tBbmRXYXJuSWZJc0VtYmVkZGVkQnJvd3NlckV4dGVuc2lvbigpIHtcbiAgaWYgKF9pc0VtYmVkZGVkQnJvd3NlckV4dGVuc2lvbigpKSB7XG4gICAgaWYgKERFQlVHX0JVSUxEKSB7XG4gICAgICBjb25zb2xlU2FuZGJveCgoKSA9PiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ1tTZW50cnldIFlvdSBjYW5ub3QgdXNlIFNlbnRyeS5pbml0KCkgaW4gYSBicm93c2VyIGV4dGVuc2lvbiwgc2VlOiBodHRwczovL2RvY3Muc2VudHJ5LmlvL3BsYXRmb3Jtcy9qYXZhc2NyaXB0L2Jlc3QtcHJhY3RpY2VzL2Jyb3dzZXItZXh0ZW5zaW9ucy8nLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIF9pc0VtYmVkZGVkQnJvd3NlckV4dGVuc2lvbigpIHtcbiAgaWYgKHR5cGVvZiBXSU5ET1cud2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIE5vIG5lZWQgdG8gc2hvdyB0aGUgZXJyb3IgaWYgd2UncmUgbm90IGluIGEgYnJvd3NlciB3aW5kb3cgZW52aXJvbm1lbnQgKGUuZy4gc2VydmljZSB3b3JrZXJzKVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IF93aW5kb3cgPSBXSU5ET1cgO1xuXG4gIC8vIFJ1bm5pbmcgdGhlIFNESyBpbiBOVy5qcywgd2hpY2ggYXBwZWFycyBsaWtlIGEgYnJvd3NlciBleHRlbnNpb24gYnV0IGlzbid0LCBpcyBhbHNvIGZpbmVcbiAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8xMjY2OFxuICBpZiAoX3dpbmRvdy5udykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGV4dGVuc2lvbk9iamVjdCA9IF93aW5kb3dbJ2Nocm9tZSddIHx8IF93aW5kb3dbJ2Jyb3dzZXInXTtcblxuICBpZiAoIWV4dGVuc2lvbk9iamVjdD8ucnVudGltZT8uaWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBocmVmID0gZ2V0TG9jYXRpb25IcmVmKCk7XG4gIGNvbnN0IGV4dGVuc2lvblByb3RvY29scyA9IFsnY2hyb21lLWV4dGVuc2lvbicsICdtb3otZXh0ZW5zaW9uJywgJ21zLWJyb3dzZXItZXh0ZW5zaW9uJywgJ3NhZmFyaS13ZWItZXh0ZW5zaW9uJ107XG5cbiAgLy8gUnVubmluZyB0aGUgU0RLIGluIGEgZGVkaWNhdGVkIGV4dGVuc2lvbiBwYWdlIGFuZCBjYWxsaW5nIFNlbnRyeS5pbml0IGlzIGZpbmU7IG5vIHJpc2sgb2YgZGF0YSBsZWFrYWdlXG4gIGNvbnN0IGlzRGVkaWNhdGVkRXh0ZW5zaW9uUGFnZSA9XG4gICAgV0lORE9XID09PSBXSU5ET1cudG9wICYmIGV4dGVuc2lvblByb3RvY29scy5zb21lKHByb3RvY29sID0+IGhyZWYuc3RhcnRzV2l0aChgJHtwcm90b2NvbH06Ly9gKSk7XG5cbiAgcmV0dXJuICFpc0RlZGljYXRlZEV4dGVuc2lvblBhZ2U7XG59XG5cbmV4cG9ydCB7IGNoZWNrQW5kV2FybklmSXNFbWJlZGRlZEJyb3dzZXJFeHRlbnNpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRldGVjdEJyb3dzZXJFeHRlbnNpb24uanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/utils/detectBrowserExtension.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/utils/lazyLoadIntegration.js":
/*!***************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/utils/lazyLoadIntegration.js ***!
  \***************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   lazyLoadIntegration: () => (/* binding */ lazyLoadIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _helpers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../helpers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/helpers.js\");\n\n\n\n// This is a map of integration function method to bundle file name.\nconst LazyLoadableIntegrations = {\n  replayIntegration: 'replay',\n  replayCanvasIntegration: 'replay-canvas',\n  feedbackIntegration: 'feedback',\n  feedbackModalIntegration: 'feedback-modal',\n  feedbackScreenshotIntegration: 'feedback-screenshot',\n  captureConsoleIntegration: 'captureconsole',\n  contextLinesIntegration: 'contextlines',\n  linkedErrorsIntegration: 'linkederrors',\n  dedupeIntegration: 'dedupe',\n  extraErrorDataIntegration: 'extraerrordata',\n  graphqlClientIntegration: 'graphqlclient',\n  httpClientIntegration: 'httpclient',\n  reportingObserverIntegration: 'reportingobserver',\n  rewriteFramesIntegration: 'rewriteframes',\n  browserProfilingIntegration: 'browserprofiling',\n  moduleMetadataIntegration: 'modulemetadata',\n} ;\n\nconst WindowWithMaybeIntegration = _helpers_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW\n\n;\n\n/**\n * Lazy load an integration from the CDN.\n * Rejects if the integration cannot be loaded.\n */\nasync function lazyLoadIntegration(\n  name,\n  scriptNonce,\n) {\n  const bundle = LazyLoadableIntegrations[name];\n\n  // `window.Sentry` is only set when using a CDN bundle, but this method can also be used via the NPM package\n  const sentryOnWindow = (WindowWithMaybeIntegration.Sentry = WindowWithMaybeIntegration.Sentry || {});\n\n  if (!bundle) {\n    throw new Error(`Cannot lazy load integration: ${name}`);\n  }\n\n  // Bail if the integration already exists\n  const existing = sentryOnWindow[name];\n  // The `feedbackIntegration` is loaded by default in the CDN bundles,\n  // so we need to differentiate between the real integration and the shim.\n  // if only the shim exists, we still want to lazy load the real integration.\n  if (typeof existing === 'function' && !('_isShim' in existing)) {\n    return existing;\n  }\n\n  const url = getScriptURL(bundle);\n  const script = _helpers_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.document.createElement('script');\n  script.src = url;\n  script.crossOrigin = 'anonymous';\n  script.referrerPolicy = 'strict-origin';\n\n  if (scriptNonce) {\n    script.setAttribute('nonce', scriptNonce);\n  }\n\n  const waitForLoad = new Promise((resolve, reject) => {\n    script.addEventListener('load', () => resolve());\n    script.addEventListener('error', reject);\n  });\n\n  const currentScript = _helpers_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.document.currentScript;\n  const parent = _helpers_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.document.body || _helpers_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.document.head || currentScript?.parentElement;\n\n  if (parent) {\n    parent.appendChild(script);\n  } else {\n    throw new Error(`Could not find parent element to insert lazy-loaded ${name} script`);\n  }\n\n  try {\n    await waitForLoad;\n  } catch {\n    throw new Error(`Error when loading integration: ${name}`);\n  }\n\n  const integrationFn = sentryOnWindow[name];\n\n  if (typeof integrationFn !== 'function') {\n    throw new Error(`Could not load integration: ${name}`);\n  }\n\n  return integrationFn;\n}\n\nfunction getScriptURL(bundle) {\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  const baseURL = client?.getOptions()?.cdnBaseUrl || 'https://browser.sentry-cdn.com';\n\n  return new URL(`/${_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SDK_VERSION}/${bundle}.min.js`, baseURL).toString();\n}\n\n\n//# sourceMappingURL=lazyLoadIntegration.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2Jyb3dzZXJAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2Jyb3dzZXIvYnVpbGQvbnBtL2VzbS91dGlscy9sYXp5TG9hZEludGVncmF0aW9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFzRDtBQUNmOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUMsK0NBQU07O0FBRXpDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFHQUFxRzs7QUFFckc7QUFDQSxxREFBcUQsS0FBSztBQUMxRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLCtDQUFNO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCx3QkFBd0IsK0NBQU07QUFDOUIsaUJBQWlCLCtDQUFNLGtCQUFrQiwrQ0FBTTs7QUFFL0M7QUFDQTtBQUNBLElBQUk7QUFDSiwyRUFBMkUsTUFBTTtBQUNqRjs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLHVEQUF1RCxLQUFLO0FBQzVEOztBQUVBOztBQUVBO0FBQ0EsbURBQW1ELEtBQUs7QUFDeEQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQix1REFBUztBQUMxQjs7QUFFQSxxQkFBcUIscURBQVcsQ0FBQyxHQUFHLE9BQU87QUFDM0M7O0FBRStCO0FBQy9CIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrYnJvd3NlckA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvYnJvd3Nlci9idWlsZC9ucG0vZXNtL3V0aWxzL2xhenlMb2FkSW50ZWdyYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0Q2xpZW50LCBTREtfVkVSU0lPTiB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBXSU5ET1cgfSBmcm9tICcuLi9oZWxwZXJzLmpzJztcblxuLy8gVGhpcyBpcyBhIG1hcCBvZiBpbnRlZ3JhdGlvbiBmdW5jdGlvbiBtZXRob2QgdG8gYnVuZGxlIGZpbGUgbmFtZS5cbmNvbnN0IExhenlMb2FkYWJsZUludGVncmF0aW9ucyA9IHtcbiAgcmVwbGF5SW50ZWdyYXRpb246ICdyZXBsYXknLFxuICByZXBsYXlDYW52YXNJbnRlZ3JhdGlvbjogJ3JlcGxheS1jYW52YXMnLFxuICBmZWVkYmFja0ludGVncmF0aW9uOiAnZmVlZGJhY2snLFxuICBmZWVkYmFja01vZGFsSW50ZWdyYXRpb246ICdmZWVkYmFjay1tb2RhbCcsXG4gIGZlZWRiYWNrU2NyZWVuc2hvdEludGVncmF0aW9uOiAnZmVlZGJhY2stc2NyZWVuc2hvdCcsXG4gIGNhcHR1cmVDb25zb2xlSW50ZWdyYXRpb246ICdjYXB0dXJlY29uc29sZScsXG4gIGNvbnRleHRMaW5lc0ludGVncmF0aW9uOiAnY29udGV4dGxpbmVzJyxcbiAgbGlua2VkRXJyb3JzSW50ZWdyYXRpb246ICdsaW5rZWRlcnJvcnMnLFxuICBkZWR1cGVJbnRlZ3JhdGlvbjogJ2RlZHVwZScsXG4gIGV4dHJhRXJyb3JEYXRhSW50ZWdyYXRpb246ICdleHRyYWVycm9yZGF0YScsXG4gIGdyYXBocWxDbGllbnRJbnRlZ3JhdGlvbjogJ2dyYXBocWxjbGllbnQnLFxuICBodHRwQ2xpZW50SW50ZWdyYXRpb246ICdodHRwY2xpZW50JyxcbiAgcmVwb3J0aW5nT2JzZXJ2ZXJJbnRlZ3JhdGlvbjogJ3JlcG9ydGluZ29ic2VydmVyJyxcbiAgcmV3cml0ZUZyYW1lc0ludGVncmF0aW9uOiAncmV3cml0ZWZyYW1lcycsXG4gIGJyb3dzZXJQcm9maWxpbmdJbnRlZ3JhdGlvbjogJ2Jyb3dzZXJwcm9maWxpbmcnLFxuICBtb2R1bGVNZXRhZGF0YUludGVncmF0aW9uOiAnbW9kdWxlbWV0YWRhdGEnLFxufSA7XG5cbmNvbnN0IFdpbmRvd1dpdGhNYXliZUludGVncmF0aW9uID0gV0lORE9XXG5cbjtcblxuLyoqXG4gKiBMYXp5IGxvYWQgYW4gaW50ZWdyYXRpb24gZnJvbSB0aGUgQ0ROLlxuICogUmVqZWN0cyBpZiB0aGUgaW50ZWdyYXRpb24gY2Fubm90IGJlIGxvYWRlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbGF6eUxvYWRJbnRlZ3JhdGlvbihcbiAgbmFtZSxcbiAgc2NyaXB0Tm9uY2UsXG4pIHtcbiAgY29uc3QgYnVuZGxlID0gTGF6eUxvYWRhYmxlSW50ZWdyYXRpb25zW25hbWVdO1xuXG4gIC8vIGB3aW5kb3cuU2VudHJ5YCBpcyBvbmx5IHNldCB3aGVuIHVzaW5nIGEgQ0ROIGJ1bmRsZSwgYnV0IHRoaXMgbWV0aG9kIGNhbiBhbHNvIGJlIHVzZWQgdmlhIHRoZSBOUE0gcGFja2FnZVxuICBjb25zdCBzZW50cnlPbldpbmRvdyA9IChXaW5kb3dXaXRoTWF5YmVJbnRlZ3JhdGlvbi5TZW50cnkgPSBXaW5kb3dXaXRoTWF5YmVJbnRlZ3JhdGlvbi5TZW50cnkgfHwge30pO1xuXG4gIGlmICghYnVuZGxlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgbGF6eSBsb2FkIGludGVncmF0aW9uOiAke25hbWV9YCk7XG4gIH1cblxuICAvLyBCYWlsIGlmIHRoZSBpbnRlZ3JhdGlvbiBhbHJlYWR5IGV4aXN0c1xuICBjb25zdCBleGlzdGluZyA9IHNlbnRyeU9uV2luZG93W25hbWVdO1xuICAvLyBUaGUgYGZlZWRiYWNrSW50ZWdyYXRpb25gIGlzIGxvYWRlZCBieSBkZWZhdWx0IGluIHRoZSBDRE4gYnVuZGxlcyxcbiAgLy8gc28gd2UgbmVlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlIHJlYWwgaW50ZWdyYXRpb24gYW5kIHRoZSBzaGltLlxuICAvLyBpZiBvbmx5IHRoZSBzaGltIGV4aXN0cywgd2Ugc3RpbGwgd2FudCB0byBsYXp5IGxvYWQgdGhlIHJlYWwgaW50ZWdyYXRpb24uXG4gIGlmICh0eXBlb2YgZXhpc3RpbmcgPT09ICdmdW5jdGlvbicgJiYgISgnX2lzU2hpbScgaW4gZXhpc3RpbmcpKSB7XG4gICAgcmV0dXJuIGV4aXN0aW5nO1xuICB9XG5cbiAgY29uc3QgdXJsID0gZ2V0U2NyaXB0VVJMKGJ1bmRsZSk7XG4gIGNvbnN0IHNjcmlwdCA9IFdJTkRPVy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgc2NyaXB0LnNyYyA9IHVybDtcbiAgc2NyaXB0LmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XG4gIHNjcmlwdC5yZWZlcnJlclBvbGljeSA9ICdzdHJpY3Qtb3JpZ2luJztcblxuICBpZiAoc2NyaXB0Tm9uY2UpIHtcbiAgICBzY3JpcHQuc2V0QXR0cmlidXRlKCdub25jZScsIHNjcmlwdE5vbmNlKTtcbiAgfVxuXG4gIGNvbnN0IHdhaXRGb3JMb2FkID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHNjcmlwdC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCByZWplY3QpO1xuICB9KTtcblxuICBjb25zdCBjdXJyZW50U2NyaXB0ID0gV0lORE9XLmRvY3VtZW50LmN1cnJlbnRTY3JpcHQ7XG4gIGNvbnN0IHBhcmVudCA9IFdJTkRPVy5kb2N1bWVudC5ib2R5IHx8IFdJTkRPVy5kb2N1bWVudC5oZWFkIHx8IGN1cnJlbnRTY3JpcHQ/LnBhcmVudEVsZW1lbnQ7XG5cbiAgaWYgKHBhcmVudCkge1xuICAgIHBhcmVudC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgcGFyZW50IGVsZW1lbnQgdG8gaW5zZXJ0IGxhenktbG9hZGVkICR7bmFtZX0gc2NyaXB0YCk7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JMb2FkO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoZW4gbG9hZGluZyBpbnRlZ3JhdGlvbjogJHtuYW1lfWApO1xuICB9XG5cbiAgY29uc3QgaW50ZWdyYXRpb25GbiA9IHNlbnRyeU9uV2luZG93W25hbWVdO1xuXG4gIGlmICh0eXBlb2YgaW50ZWdyYXRpb25GbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGxvYWQgaW50ZWdyYXRpb246ICR7bmFtZX1gKTtcbiAgfVxuXG4gIHJldHVybiBpbnRlZ3JhdGlvbkZuO1xufVxuXG5mdW5jdGlvbiBnZXRTY3JpcHRVUkwoYnVuZGxlKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuICBjb25zdCBiYXNlVVJMID0gY2xpZW50Py5nZXRPcHRpb25zKCk/LmNkbkJhc2VVcmwgfHwgJ2h0dHBzOi8vYnJvd3Nlci5zZW50cnktY2RuLmNvbSc7XG5cbiAgcmV0dXJuIG5ldyBVUkwoYC8ke1NES19WRVJTSU9OfS8ke2J1bmRsZX0ubWluLmpzYCwgYmFzZVVSTCkudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IHsgbGF6eUxvYWRJbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGF6eUxvYWRJbnRlZ3JhdGlvbi5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/utils/lazyLoadIntegration.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/api.js":
/*!*******************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/api.js ***!
  \*******************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getEnvelopeEndpointWithUrlEncodedAuth: () => (/* binding */ getEnvelopeEndpointWithUrlEncodedAuth),\n/* harmony export */   getReportDialogEndpoint: () => (/* binding */ getReportDialogEndpoint)\n/* harmony export */ });\n/* harmony import */ var _utils_dsn_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/dsn.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/dsn.js\");\n\n\nconst SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn) {\n  const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n  const port = dsn.port ? `:${dsn.port}` : '';\n  return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ''}/api/`;\n}\n\n/** Returns the ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn) {\n  return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn, sdkInfo) {\n  const params = {\n    sentry_version: SENTRY_API_VERSION,\n  };\n\n  if (dsn.publicKey) {\n    // We send only the minimum set of required information. See\n    // https://github.com/getsentry/sentry-javascript/issues/2572.\n    params.sentry_key = dsn.publicKey;\n  }\n\n  if (sdkInfo) {\n    params.sentry_client = `${sdkInfo.name}/${sdkInfo.version}`;\n  }\n\n  return new URLSearchParams(params).toString();\n}\n\n/**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\nfunction getEnvelopeEndpointWithUrlEncodedAuth(dsn, tunnel, sdkInfo) {\n  return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nfunction getReportDialogEndpoint(dsnLike, dialogOptions) {\n  const dsn = (0,_utils_dsn_js__WEBPACK_IMPORTED_MODULE_0__.makeDsn)(dsnLike);\n  if (!dsn) {\n    return '';\n  }\n\n  const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n  let encodedOptions = `dsn=${(0,_utils_dsn_js__WEBPACK_IMPORTED_MODULE_0__.dsnToString)(dsn)}`;\n  for (const key in dialogOptions) {\n    if (key === 'dsn') {\n      continue;\n    }\n\n    if (key === 'onClose') {\n      continue;\n    }\n\n    if (key === 'user') {\n      const user = dialogOptions.user;\n      if (!user) {\n        continue;\n      }\n      if (user.name) {\n        encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n      }\n      if (user.email) {\n        encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n      }\n    } else {\n      encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] )}`;\n    }\n  }\n\n  return `${endpoint}?${encodedOptions}`;\n}\n\n\n//# sourceMappingURL=api.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2FwaS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBc0Q7O0FBRXREOztBQUVBO0FBQ0E7QUFDQSxxQ0FBcUMsYUFBYTtBQUNsRCw4QkFBOEIsU0FBUztBQUN2QyxZQUFZLFNBQVMsSUFBSSxTQUFTLEVBQUUsS0FBSyxFQUFFLGVBQWUsU0FBUyxPQUFPO0FBQzFFOztBQUVBO0FBQ0E7QUFDQSxZQUFZLHdCQUF3QixFQUFFLGNBQWM7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOEJBQThCLGFBQWEsR0FBRyxnQkFBZ0I7QUFDOUQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsd0JBQXdCLEdBQUcsMkJBQTJCO0FBQ3BGOztBQUVBO0FBQ0E7QUFDQSxjQUFjLHNEQUFPO0FBQ3JCO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0Isd0JBQXdCOztBQUU5Qyw4QkFBOEIsMERBQVcsTUFBTTtBQUMvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLDhCQUE4QjtBQUNqRTtBQUNBO0FBQ0Esb0NBQW9DLCtCQUErQjtBQUNuRTtBQUNBLE1BQU07QUFDTiw0QkFBNEIsd0JBQXdCLEdBQUcsd0NBQXdDO0FBQy9GO0FBQ0E7O0FBRUEsWUFBWSxTQUFTLEdBQUcsZUFBZTtBQUN2Qzs7QUFFMEU7QUFDMUUiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9hcGkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWFrZURzbiwgZHNuVG9TdHJpbmcgfSBmcm9tICcuL3V0aWxzL2Rzbi5qcyc7XG5cbmNvbnN0IFNFTlRSWV9BUElfVkVSU0lPTiA9ICc3JztcblxuLyoqIFJldHVybnMgdGhlIHByZWZpeCB0byBjb25zdHJ1Y3QgU2VudHJ5IGluZ2VzdGlvbiBBUEkgZW5kcG9pbnRzLiAqL1xuZnVuY3Rpb24gZ2V0QmFzZUFwaUVuZHBvaW50KGRzbikge1xuICBjb25zdCBwcm90b2NvbCA9IGRzbi5wcm90b2NvbCA/IGAke2Rzbi5wcm90b2NvbH06YCA6ICcnO1xuICBjb25zdCBwb3J0ID0gZHNuLnBvcnQgPyBgOiR7ZHNuLnBvcnR9YCA6ICcnO1xuICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2Rzbi5ob3N0fSR7cG9ydH0ke2Rzbi5wYXRoID8gYC8ke2Rzbi5wYXRofWAgOiAnJ30vYXBpL2A7XG59XG5cbi8qKiBSZXR1cm5zIHRoZSBpbmdlc3QgQVBJIGVuZHBvaW50IGZvciB0YXJnZXQuICovXG5mdW5jdGlvbiBfZ2V0SW5nZXN0RW5kcG9pbnQoZHNuKSB7XG4gIHJldHVybiBgJHtnZXRCYXNlQXBpRW5kcG9pbnQoZHNuKX0ke2Rzbi5wcm9qZWN0SWR9L2VudmVsb3BlL2A7XG59XG5cbi8qKiBSZXR1cm5zIGEgVVJMLWVuY29kZWQgc3RyaW5nIHdpdGggYXV0aCBjb25maWcgc3VpdGFibGUgZm9yIGEgcXVlcnkgc3RyaW5nLiAqL1xuZnVuY3Rpb24gX2VuY29kZWRBdXRoKGRzbiwgc2RrSW5mbykge1xuICBjb25zdCBwYXJhbXMgPSB7XG4gICAgc2VudHJ5X3ZlcnNpb246IFNFTlRSWV9BUElfVkVSU0lPTixcbiAgfTtcblxuICBpZiAoZHNuLnB1YmxpY0tleSkge1xuICAgIC8vIFdlIHNlbmQgb25seSB0aGUgbWluaW11bSBzZXQgb2YgcmVxdWlyZWQgaW5mb3JtYXRpb24uIFNlZVxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1NzIuXG4gICAgcGFyYW1zLnNlbnRyeV9rZXkgPSBkc24ucHVibGljS2V5O1xuICB9XG5cbiAgaWYgKHNka0luZm8pIHtcbiAgICBwYXJhbXMuc2VudHJ5X2NsaWVudCA9IGAke3Nka0luZm8ubmFtZX0vJHtzZGtJbmZvLnZlcnNpb259YDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlbnZlbG9wZSBlbmRwb2ludCBVUkwgd2l0aCBhdXRoIGluIHRoZSBxdWVyeSBzdHJpbmcuXG4gKlxuICogU2VuZGluZyBhdXRoIGFzIHBhcnQgb2YgdGhlIHF1ZXJ5IHN0cmluZyBhbmQgbm90IGFzIGN1c3RvbSBIVFRQIGhlYWRlcnMgYXZvaWRzIENPUlMgcHJlZmxpZ2h0IHJlcXVlc3RzLlxuICovXG5mdW5jdGlvbiBnZXRFbnZlbG9wZUVuZHBvaW50V2l0aFVybEVuY29kZWRBdXRoKGRzbiwgdHVubmVsLCBzZGtJbmZvKSB7XG4gIHJldHVybiB0dW5uZWwgPyB0dW5uZWwgOiBgJHtfZ2V0SW5nZXN0RW5kcG9pbnQoZHNuKX0/JHtfZW5jb2RlZEF1dGgoZHNuLCBzZGtJbmZvKX1gO1xufVxuXG4vKiogUmV0dXJucyB0aGUgdXJsIHRvIHRoZSByZXBvcnQgZGlhbG9nIGVuZHBvaW50LiAqL1xuZnVuY3Rpb24gZ2V0UmVwb3J0RGlhbG9nRW5kcG9pbnQoZHNuTGlrZSwgZGlhbG9nT3B0aW9ucykge1xuICBjb25zdCBkc24gPSBtYWtlRHNuKGRzbkxpa2UpO1xuICBpZiAoIWRzbikge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGVuZHBvaW50ID0gYCR7Z2V0QmFzZUFwaUVuZHBvaW50KGRzbil9ZW1iZWQvZXJyb3ItcGFnZS9gO1xuXG4gIGxldCBlbmNvZGVkT3B0aW9ucyA9IGBkc249JHtkc25Ub1N0cmluZyhkc24pfWA7XG4gIGZvciAoY29uc3Qga2V5IGluIGRpYWxvZ09wdGlvbnMpIHtcbiAgICBpZiAoa2V5ID09PSAnZHNuJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ29uQ2xvc2UnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAndXNlcicpIHtcbiAgICAgIGNvbnN0IHVzZXIgPSBkaWFsb2dPcHRpb25zLnVzZXI7XG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAodXNlci5uYW1lKSB7XG4gICAgICAgIGVuY29kZWRPcHRpb25zICs9IGAmbmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudCh1c2VyLm5hbWUpfWA7XG4gICAgICB9XG4gICAgICBpZiAodXNlci5lbWFpbCkge1xuICAgICAgICBlbmNvZGVkT3B0aW9ucyArPSBgJmVtYWlsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHVzZXIuZW1haWwpfWA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kZWRPcHRpb25zICs9IGAmJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQoZGlhbG9nT3B0aW9uc1trZXldICl9YDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYCR7ZW5kcG9pbnR9PyR7ZW5jb2RlZE9wdGlvbnN9YDtcbn1cblxuZXhwb3J0IHsgZ2V0RW52ZWxvcGVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aCwgZ2V0UmVwb3J0RGlhbG9nRW5kcG9pbnQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwaS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/api.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/asyncContext/index.js":
/*!**********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/asyncContext/index.js ***!
  \**********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getAsyncContextStrategy: () => (/* binding */ getAsyncContextStrategy),\n/* harmony export */   setAsyncContextStrategy: () => (/* binding */ setAsyncContextStrategy)\n/* harmony export */ });\n/* harmony import */ var _carrier_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../carrier.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/carrier.js\");\n/* harmony import */ var _stackStrategy_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stackStrategy.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/asyncContext/stackStrategy.js\");\n\n\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nfunction setAsyncContextStrategy(strategy) {\n  // Get main carrier (global for every environment)\n  const registry = (0,_carrier_js__WEBPACK_IMPORTED_MODULE_0__.getMainCarrier)();\n  const sentry = (0,_carrier_js__WEBPACK_IMPORTED_MODULE_0__.getSentryCarrier)(registry);\n  sentry.acs = strategy;\n}\n\n/**\n * Get the current async context strategy.\n * If none has been setup, the default will be used.\n */\nfunction getAsyncContextStrategy(carrier) {\n  const sentry = (0,_carrier_js__WEBPACK_IMPORTED_MODULE_0__.getSentryCarrier)(carrier);\n\n  if (sentry.acs) {\n    return sentry.acs;\n  }\n\n  // Otherwise, use the default one (stack)\n  return (0,_stackStrategy_js__WEBPACK_IMPORTED_MODULE_1__.getStackAsyncContextStrategy)();\n}\n\n\n//# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2FzeW5jQ29udGV4dC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWlFO0FBQ0M7O0FBRWxFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDJEQUFjO0FBQ2pDLGlCQUFpQiw2REFBZ0I7QUFDakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDZEQUFnQjs7QUFFakM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUywrRUFBNEI7QUFDckM7O0FBRTREO0FBQzVEIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vYXN5bmNDb250ZXh0L2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldE1haW5DYXJyaWVyLCBnZXRTZW50cnlDYXJyaWVyIH0gZnJvbSAnLi4vY2Fycmllci5qcyc7XG5pbXBvcnQgeyBnZXRTdGFja0FzeW5jQ29udGV4dFN0cmF0ZWd5IH0gZnJvbSAnLi9zdGFja1N0cmF0ZWd5LmpzJztcblxuLyoqXG4gKiBAcHJpdmF0ZSBQcml2YXRlIEFQSSB3aXRoIG5vIHNlbXZlciBndWFyYW50ZWVzIVxuICpcbiAqIFNldHMgdGhlIGdsb2JhbCBhc3luYyBjb250ZXh0IHN0cmF0ZWd5XG4gKi9cbmZ1bmN0aW9uIHNldEFzeW5jQ29udGV4dFN0cmF0ZWd5KHN0cmF0ZWd5KSB7XG4gIC8vIEdldCBtYWluIGNhcnJpZXIgKGdsb2JhbCBmb3IgZXZlcnkgZW52aXJvbm1lbnQpXG4gIGNvbnN0IHJlZ2lzdHJ5ID0gZ2V0TWFpbkNhcnJpZXIoKTtcbiAgY29uc3Qgc2VudHJ5ID0gZ2V0U2VudHJ5Q2FycmllcihyZWdpc3RyeSk7XG4gIHNlbnRyeS5hY3MgPSBzdHJhdGVneTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGN1cnJlbnQgYXN5bmMgY29udGV4dCBzdHJhdGVneS5cbiAqIElmIG5vbmUgaGFzIGJlZW4gc2V0dXAsIHRoZSBkZWZhdWx0IHdpbGwgYmUgdXNlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0QXN5bmNDb250ZXh0U3RyYXRlZ3koY2Fycmllcikge1xuICBjb25zdCBzZW50cnkgPSBnZXRTZW50cnlDYXJyaWVyKGNhcnJpZXIpO1xuXG4gIGlmIChzZW50cnkuYWNzKSB7XG4gICAgcmV0dXJuIHNlbnRyeS5hY3M7XG4gIH1cblxuICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgZGVmYXVsdCBvbmUgKHN0YWNrKVxuICByZXR1cm4gZ2V0U3RhY2tBc3luY0NvbnRleHRTdHJhdGVneSgpO1xufVxuXG5leHBvcnQgeyBnZXRBc3luY0NvbnRleHRTdHJhdGVneSwgc2V0QXN5bmNDb250ZXh0U3RyYXRlZ3kgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/asyncContext/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/asyncContext/stackStrategy.js":
/*!******************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/asyncContext/stackStrategy.js ***!
  \******************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   AsyncContextStack: () => (/* binding */ AsyncContextStack),\n/* harmony export */   getStackAsyncContextStrategy: () => (/* binding */ getStackAsyncContextStrategy)\n/* harmony export */ });\n/* harmony import */ var _defaultScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../defaultScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/defaultScopes.js\");\n/* harmony import */ var _scope_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../scope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/scope.js\");\n/* harmony import */ var _utils_is_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n/* harmony import */ var _carrier_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../carrier.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/carrier.js\");\n\n\n\n\n\n/**\n * This is an object that holds a stack of scopes.\n */\nclass AsyncContextStack {\n\n   constructor(scope, isolationScope) {\n    let assignedScope;\n    if (!scope) {\n      assignedScope = new _scope_js__WEBPACK_IMPORTED_MODULE_1__.Scope();\n    } else {\n      assignedScope = scope;\n    }\n\n    let assignedIsolationScope;\n    if (!isolationScope) {\n      assignedIsolationScope = new _scope_js__WEBPACK_IMPORTED_MODULE_1__.Scope();\n    } else {\n      assignedIsolationScope = isolationScope;\n    }\n\n    // scope stack for domains or the process\n    this._stack = [{ scope: assignedScope }];\n    this._isolationScope = assignedIsolationScope;\n  }\n\n  /**\n   * Fork a scope for the stack.\n   */\n   withScope(callback) {\n    const scope = this._pushScope();\n\n    let maybePromiseResult;\n    try {\n      maybePromiseResult = callback(scope);\n    } catch (e) {\n      this._popScope();\n      throw e;\n    }\n\n    if ((0,_utils_is_js__WEBPACK_IMPORTED_MODULE_2__.isThenable)(maybePromiseResult)) {\n      // @ts-expect-error - isThenable returns the wrong type\n      return maybePromiseResult.then(\n        res => {\n          this._popScope();\n          return res;\n        },\n        e => {\n          this._popScope();\n          throw e;\n        },\n      );\n    }\n\n    this._popScope();\n    return maybePromiseResult;\n  }\n\n  /**\n   * Get the client of the stack.\n   */\n   getClient() {\n    return this.getStackTop().client ;\n  }\n\n  /**\n   * Returns the scope of the top stack.\n   */\n   getScope() {\n    return this.getStackTop().scope;\n  }\n\n  /**\n   * Get the isolation scope for the stack.\n   */\n   getIsolationScope() {\n    return this._isolationScope;\n  }\n\n  /**\n   * Returns the topmost scope layer in the order domain > local > process.\n   */\n   getStackTop() {\n    return this._stack[this._stack.length - 1] ;\n  }\n\n  /**\n   * Push a scope to the stack.\n   */\n   _pushScope() {\n    // We want to clone the content of prev scope\n    const scope = this.getScope().clone();\n    this._stack.push({\n      client: this.getClient(),\n      scope,\n    });\n    return scope;\n  }\n\n  /**\n   * Pop a scope from the stack.\n   */\n   _popScope() {\n    if (this._stack.length <= 1) return false;\n    return !!this._stack.pop();\n  }\n}\n\n/**\n * Get the global async context stack.\n * This will be removed during the v8 cycle and is only here to make migration easier.\n */\nfunction getAsyncContextStack() {\n  const registry = (0,_carrier_js__WEBPACK_IMPORTED_MODULE_3__.getMainCarrier)();\n  const sentry = (0,_carrier_js__WEBPACK_IMPORTED_MODULE_3__.getSentryCarrier)(registry);\n\n  return (sentry.stack = sentry.stack || new AsyncContextStack((0,_defaultScopes_js__WEBPACK_IMPORTED_MODULE_0__.getDefaultCurrentScope)(), (0,_defaultScopes_js__WEBPACK_IMPORTED_MODULE_0__.getDefaultIsolationScope)()));\n}\n\nfunction withScope(callback) {\n  return getAsyncContextStack().withScope(callback);\n}\n\nfunction withSetScope(scope, callback) {\n  const stack = getAsyncContextStack() ;\n  return stack.withScope(() => {\n    stack.getStackTop().scope = scope;\n    return callback(scope);\n  });\n}\n\nfunction withIsolationScope(callback) {\n  return getAsyncContextStack().withScope(() => {\n    return callback(getAsyncContextStack().getIsolationScope());\n  });\n}\n\n/**\n * Get the stack-based async context strategy.\n */\nfunction getStackAsyncContextStrategy() {\n  return {\n    withIsolationScope,\n    withScope,\n    withSetScope,\n    withSetIsolationScope: (_isolationScope, callback) => {\n      return withIsolationScope(callback);\n    },\n    getCurrentScope: () => getAsyncContextStack().getScope(),\n    getIsolationScope: () => getAsyncContextStack().getIsolationScope(),\n  };\n}\n\n\n//# sourceMappingURL=stackStrategy.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2FzeW5jQ29udGV4dC9zdGFja1N0cmF0ZWd5LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUF1RjtBQUNuRDtBQUNRO0FBQ3FCOztBQUVqRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsNENBQUs7QUFDL0IsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1DQUFtQyw0Q0FBSztBQUN4QyxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBLHFCQUFxQixzQkFBc0I7QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUEsUUFBUSx3REFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDJEQUFjO0FBQ2pDLGlCQUFpQiw2REFBZ0I7O0FBRWpDLCtEQUErRCx5RUFBc0IsSUFBSSwyRUFBd0I7QUFDakg7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUUyRDtBQUMzRCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2FzeW5jQ29udGV4dC9zdGFja1N0cmF0ZWd5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldERlZmF1bHRDdXJyZW50U2NvcGUsIGdldERlZmF1bHRJc29sYXRpb25TY29wZSB9IGZyb20gJy4uL2RlZmF1bHRTY29wZXMuanMnO1xuaW1wb3J0IHsgU2NvcGUgfSBmcm9tICcuLi9zY29wZS5qcyc7XG5pbXBvcnQgeyBpc1RoZW5hYmxlIH0gZnJvbSAnLi4vdXRpbHMvaXMuanMnO1xuaW1wb3J0IHsgZ2V0TWFpbkNhcnJpZXIsIGdldFNlbnRyeUNhcnJpZXIgfSBmcm9tICcuLi9jYXJyaWVyLmpzJztcblxuLyoqXG4gKiBUaGlzIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIGEgc3RhY2sgb2Ygc2NvcGVzLlxuICovXG5jbGFzcyBBc3luY0NvbnRleHRTdGFjayB7XG5cbiAgIGNvbnN0cnVjdG9yKHNjb3BlLCBpc29sYXRpb25TY29wZSkge1xuICAgIGxldCBhc3NpZ25lZFNjb3BlO1xuICAgIGlmICghc2NvcGUpIHtcbiAgICAgIGFzc2lnbmVkU2NvcGUgPSBuZXcgU2NvcGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzaWduZWRTY29wZSA9IHNjb3BlO1xuICAgIH1cblxuICAgIGxldCBhc3NpZ25lZElzb2xhdGlvblNjb3BlO1xuICAgIGlmICghaXNvbGF0aW9uU2NvcGUpIHtcbiAgICAgIGFzc2lnbmVkSXNvbGF0aW9uU2NvcGUgPSBuZXcgU2NvcGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzaWduZWRJc29sYXRpb25TY29wZSA9IGlzb2xhdGlvblNjb3BlO1xuICAgIH1cblxuICAgIC8vIHNjb3BlIHN0YWNrIGZvciBkb21haW5zIG9yIHRoZSBwcm9jZXNzXG4gICAgdGhpcy5fc3RhY2sgPSBbeyBzY29wZTogYXNzaWduZWRTY29wZSB9XTtcbiAgICB0aGlzLl9pc29sYXRpb25TY29wZSA9IGFzc2lnbmVkSXNvbGF0aW9uU2NvcGU7XG4gIH1cblxuICAvKipcbiAgICogRm9yayBhIHNjb3BlIGZvciB0aGUgc3RhY2suXG4gICAqL1xuICAgd2l0aFNjb3BlKGNhbGxiYWNrKSB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLl9wdXNoU2NvcGUoKTtcblxuICAgIGxldCBtYXliZVByb21pc2VSZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgIG1heWJlUHJvbWlzZVJlc3VsdCA9IGNhbGxiYWNrKHNjb3BlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9wb3BTY29wZSgpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICBpZiAoaXNUaGVuYWJsZShtYXliZVByb21pc2VSZXN1bHQpKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gaXNUaGVuYWJsZSByZXR1cm5zIHRoZSB3cm9uZyB0eXBlXG4gICAgICByZXR1cm4gbWF5YmVQcm9taXNlUmVzdWx0LnRoZW4oXG4gICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgdGhpcy5fcG9wU2NvcGUoKTtcbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9LFxuICAgICAgICBlID0+IHtcbiAgICAgICAgICB0aGlzLl9wb3BTY29wZSgpO1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX3BvcFNjb3BlKCk7XG4gICAgcmV0dXJuIG1heWJlUHJvbWlzZVJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNsaWVudCBvZiB0aGUgc3RhY2suXG4gICAqL1xuICAgZ2V0Q2xpZW50KCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0YWNrVG9wKCkuY2xpZW50IDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzY29wZSBvZiB0aGUgdG9wIHN0YWNrLlxuICAgKi9cbiAgIGdldFNjb3BlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0YWNrVG9wKCkuc2NvcGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpc29sYXRpb24gc2NvcGUgZm9yIHRoZSBzdGFjay5cbiAgICovXG4gICBnZXRJc29sYXRpb25TY29wZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNvbGF0aW9uU2NvcGU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdG9wbW9zdCBzY29wZSBsYXllciBpbiB0aGUgb3JkZXIgZG9tYWluID4gbG9jYWwgPiBwcm9jZXNzLlxuICAgKi9cbiAgIGdldFN0YWNrVG9wKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGggLSAxXSA7XG4gIH1cblxuICAvKipcbiAgICogUHVzaCBhIHNjb3BlIHRvIHRoZSBzdGFjay5cbiAgICovXG4gICBfcHVzaFNjb3BlKCkge1xuICAgIC8vIFdlIHdhbnQgdG8gY2xvbmUgdGhlIGNvbnRlbnQgb2YgcHJldiBzY29wZVxuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5nZXRTY29wZSgpLmNsb25lKCk7XG4gICAgdGhpcy5fc3RhY2sucHVzaCh7XG4gICAgICBjbGllbnQ6IHRoaXMuZ2V0Q2xpZW50KCksXG4gICAgICBzY29wZSxcbiAgICB9KTtcbiAgICByZXR1cm4gc2NvcGU7XG4gIH1cblxuICAvKipcbiAgICogUG9wIGEgc2NvcGUgZnJvbSB0aGUgc3RhY2suXG4gICAqL1xuICAgX3BvcFNjb3BlKCkge1xuICAgIGlmICh0aGlzLl9zdGFjay5sZW5ndGggPD0gMSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhIXRoaXMuX3N0YWNrLnBvcCgpO1xuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBnbG9iYWwgYXN5bmMgY29udGV4dCBzdGFjay5cbiAqIFRoaXMgd2lsbCBiZSByZW1vdmVkIGR1cmluZyB0aGUgdjggY3ljbGUgYW5kIGlzIG9ubHkgaGVyZSB0byBtYWtlIG1pZ3JhdGlvbiBlYXNpZXIuXG4gKi9cbmZ1bmN0aW9uIGdldEFzeW5jQ29udGV4dFN0YWNrKCkge1xuICBjb25zdCByZWdpc3RyeSA9IGdldE1haW5DYXJyaWVyKCk7XG4gIGNvbnN0IHNlbnRyeSA9IGdldFNlbnRyeUNhcnJpZXIocmVnaXN0cnkpO1xuXG4gIHJldHVybiAoc2VudHJ5LnN0YWNrID0gc2VudHJ5LnN0YWNrIHx8IG5ldyBBc3luY0NvbnRleHRTdGFjayhnZXREZWZhdWx0Q3VycmVudFNjb3BlKCksIGdldERlZmF1bHRJc29sYXRpb25TY29wZSgpKSk7XG59XG5cbmZ1bmN0aW9uIHdpdGhTY29wZShjYWxsYmFjaykge1xuICByZXR1cm4gZ2V0QXN5bmNDb250ZXh0U3RhY2soKS53aXRoU2NvcGUoY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiB3aXRoU2V0U2NvcGUoc2NvcGUsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHN0YWNrID0gZ2V0QXN5bmNDb250ZXh0U3RhY2soKSA7XG4gIHJldHVybiBzdGFjay53aXRoU2NvcGUoKCkgPT4ge1xuICAgIHN0YWNrLmdldFN0YWNrVG9wKCkuc2NvcGUgPSBzY29wZTtcbiAgICByZXR1cm4gY2FsbGJhY2soc2NvcGUpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gd2l0aElzb2xhdGlvblNjb3BlKGNhbGxiYWNrKSB7XG4gIHJldHVybiBnZXRBc3luY0NvbnRleHRTdGFjaygpLndpdGhTY29wZSgoKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGdldEFzeW5jQ29udGV4dFN0YWNrKCkuZ2V0SXNvbGF0aW9uU2NvcGUoKSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgc3RhY2stYmFzZWQgYXN5bmMgY29udGV4dCBzdHJhdGVneS5cbiAqL1xuZnVuY3Rpb24gZ2V0U3RhY2tBc3luY0NvbnRleHRTdHJhdGVneSgpIHtcbiAgcmV0dXJuIHtcbiAgICB3aXRoSXNvbGF0aW9uU2NvcGUsXG4gICAgd2l0aFNjb3BlLFxuICAgIHdpdGhTZXRTY29wZSxcbiAgICB3aXRoU2V0SXNvbGF0aW9uU2NvcGU6IChfaXNvbGF0aW9uU2NvcGUsIGNhbGxiYWNrKSA9PiB7XG4gICAgICByZXR1cm4gd2l0aElzb2xhdGlvblNjb3BlKGNhbGxiYWNrKTtcbiAgICB9LFxuICAgIGdldEN1cnJlbnRTY29wZTogKCkgPT4gZ2V0QXN5bmNDb250ZXh0U3RhY2soKS5nZXRTY29wZSgpLFxuICAgIGdldElzb2xhdGlvblNjb3BlOiAoKSA9PiBnZXRBc3luY0NvbnRleHRTdGFjaygpLmdldElzb2xhdGlvblNjb3BlKCksXG4gIH07XG59XG5cbmV4cG9ydCB7IEFzeW5jQ29udGV4dFN0YWNrLCBnZXRTdGFja0FzeW5jQ29udGV4dFN0cmF0ZWd5IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGFja1N0cmF0ZWd5LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/asyncContext/stackStrategy.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/breadcrumbs.js":
/*!***************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/breadcrumbs.js ***!
  \***************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addBreadcrumb: () => (/* binding */ addBreadcrumb)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_time_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/time.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/time.js\");\n\n\n\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n */\nfunction addBreadcrumb(breadcrumb, hint) {\n  const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  const isolationScope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)();\n\n  if (!client) return;\n\n  const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } = client.getOptions();\n\n  if (maxBreadcrumbs <= 0) return;\n\n  const timestamp = (0,_utils_time_js__WEBPACK_IMPORTED_MODULE_2__.dateTimestampInSeconds)();\n  const mergedBreadcrumb = { timestamp, ...breadcrumb };\n  const finalBreadcrumb = beforeBreadcrumb\n    ? ((0,_utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.consoleSandbox)(() => beforeBreadcrumb(mergedBreadcrumb, hint)) )\n    : mergedBreadcrumb;\n\n  if (finalBreadcrumb === null) return;\n\n  if (client.emit) {\n    client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n  }\n\n  isolationScope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n}\n\n\n//# sourceMappingURL=breadcrumbs.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2JyZWFkY3J1bWJzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0U7QUFDVDtBQUNBOztBQUV6RDtBQUNBO0FBQ0EsU0FBUyw2QkFBNkI7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw0REFBUztBQUMxQix5QkFBeUIsb0VBQWlCOztBQUUxQzs7QUFFQSxVQUFVLGdFQUFnRTs7QUFFMUU7O0FBRUEsb0JBQW9CLHNFQUFzQjtBQUMxQyw2QkFBNkI7QUFDN0I7QUFDQSxPQUFPLHNFQUFjO0FBQ3JCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUV5QjtBQUN6QiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2JyZWFkY3J1bWJzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldENsaWVudCwgZ2V0SXNvbGF0aW9uU2NvcGUgfSBmcm9tICcuL2N1cnJlbnRTY29wZXMuanMnO1xuaW1wb3J0IHsgY29uc29sZVNhbmRib3ggfSBmcm9tICcuL3V0aWxzL2RlYnVnLWxvZ2dlci5qcyc7XG5pbXBvcnQgeyBkYXRlVGltZXN0YW1wSW5TZWNvbmRzIH0gZnJvbSAnLi91dGlscy90aW1lLmpzJztcblxuLyoqXG4gKiBEZWZhdWx0IG1heGltdW0gbnVtYmVyIG9mIGJyZWFkY3J1bWJzIGFkZGVkIHRvIGFuIGV2ZW50LiBDYW4gYmUgb3ZlcndyaXR0ZW5cbiAqIHdpdGgge0BsaW5rIE9wdGlvbnMubWF4QnJlYWRjcnVtYnN9LlxuICovXG5jb25zdCBERUZBVUxUX0JSRUFEQ1JVTUJTID0gMTAwO1xuXG4vKipcbiAqIFJlY29yZHMgYSBuZXcgYnJlYWRjcnVtYiB3aGljaCB3aWxsIGJlIGF0dGFjaGVkIHRvIGZ1dHVyZSBldmVudHMuXG4gKlxuICogQnJlYWRjcnVtYnMgd2lsbCBiZSBhZGRlZCB0byBzdWJzZXF1ZW50IGV2ZW50cyB0byBwcm92aWRlIG1vcmUgY29udGV4dCBvblxuICogdXNlcidzIGFjdGlvbnMgcHJpb3IgdG8gYW4gZXJyb3Igb3IgY3Jhc2guXG4gKi9cbmZ1bmN0aW9uIGFkZEJyZWFkY3J1bWIoYnJlYWRjcnVtYiwgaGludCkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcbiAgY29uc3QgaXNvbGF0aW9uU2NvcGUgPSBnZXRJc29sYXRpb25TY29wZSgpO1xuXG4gIGlmICghY2xpZW50KSByZXR1cm47XG5cbiAgY29uc3QgeyBiZWZvcmVCcmVhZGNydW1iID0gbnVsbCwgbWF4QnJlYWRjcnVtYnMgPSBERUZBVUxUX0JSRUFEQ1JVTUJTIH0gPSBjbGllbnQuZ2V0T3B0aW9ucygpO1xuXG4gIGlmIChtYXhCcmVhZGNydW1icyA8PSAwKSByZXR1cm47XG5cbiAgY29uc3QgdGltZXN0YW1wID0gZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpO1xuICBjb25zdCBtZXJnZWRCcmVhZGNydW1iID0geyB0aW1lc3RhbXAsIC4uLmJyZWFkY3J1bWIgfTtcbiAgY29uc3QgZmluYWxCcmVhZGNydW1iID0gYmVmb3JlQnJlYWRjcnVtYlxuICAgID8gKGNvbnNvbGVTYW5kYm94KCgpID0+IGJlZm9yZUJyZWFkY3J1bWIobWVyZ2VkQnJlYWRjcnVtYiwgaGludCkpIClcbiAgICA6IG1lcmdlZEJyZWFkY3J1bWI7XG5cbiAgaWYgKGZpbmFsQnJlYWRjcnVtYiA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gIGlmIChjbGllbnQuZW1pdCkge1xuICAgIGNsaWVudC5lbWl0KCdiZWZvcmVBZGRCcmVhZGNydW1iJywgZmluYWxCcmVhZGNydW1iLCBoaW50KTtcbiAgfVxuXG4gIGlzb2xhdGlvblNjb3BlLmFkZEJyZWFkY3J1bWIoZmluYWxCcmVhZGNydW1iLCBtYXhCcmVhZGNydW1icyk7XG59XG5cbmV4cG9ydCB7IGFkZEJyZWFkY3J1bWIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJyZWFkY3J1bWJzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/breadcrumbs.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/carrier.js":
/*!***********************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/carrier.js ***!
  \***********************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getGlobalSingleton: () => (/* binding */ getGlobalSingleton),\n/* harmony export */   getMainCarrier: () => (/* binding */ getMainCarrier),\n/* harmony export */   getSentryCarrier: () => (/* binding */ getSentryCarrier)\n/* harmony export */ });\n/* harmony import */ var _utils_version_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/version.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/version.js\");\n/* harmony import */ var _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n\n\n\n/**\n * An object that contains globally accessible properties and maintains a scope stack.\n * @hidden\n */\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nfunction getMainCarrier() {\n  // This ensures a Sentry carrier exists\n  getSentryCarrier(_utils_worldwide_js__WEBPACK_IMPORTED_MODULE_1__.GLOBAL_OBJ);\n  return _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_1__.GLOBAL_OBJ;\n}\n\n/** Will either get the existing sentry carrier, or create a new one. */\nfunction getSentryCarrier(carrier) {\n  const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n\n  // For now: First SDK that sets the .version property wins\n  __SENTRY__.version = __SENTRY__.version || _utils_version_js__WEBPACK_IMPORTED_MODULE_0__.SDK_VERSION;\n\n  // Intentionally populating and returning the version of \"this\" SDK instance\n  // rather than what's set in .version so that \"this\" SDK always gets its carrier\n  return (__SENTRY__[_utils_version_js__WEBPACK_IMPORTED_MODULE_0__.SDK_VERSION] = __SENTRY__[_utils_version_js__WEBPACK_IMPORTED_MODULE_0__.SDK_VERSION] || {});\n}\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__[]` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nfunction getGlobalSingleton(\n  name,\n  creator,\n  obj = _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_1__.GLOBAL_OBJ,\n) {\n  const __SENTRY__ = (obj.__SENTRY__ = obj.__SENTRY__ || {});\n  const carrier = (__SENTRY__[_utils_version_js__WEBPACK_IMPORTED_MODULE_0__.SDK_VERSION] = __SENTRY__[_utils_version_js__WEBPACK_IMPORTED_MODULE_0__.SDK_VERSION] || {});\n  // Note: We do not want to set `carrier.version` here, as this may be called before any `init` is called, e.g. for the default scopes\n  return carrier[name] || (carrier[name] = creator());\n}\n\n\n//# sourceMappingURL=carrier.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2NhcnJpZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBaUQ7QUFDQzs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDJEQUFVO0FBQzdCLFNBQVMsMkRBQVU7QUFDbkI7O0FBRUE7QUFDQTtBQUNBLG1FQUFtRTs7QUFFbkU7QUFDQSw2Q0FBNkMsMERBQVc7O0FBRXhEO0FBQ0E7QUFDQSxxQkFBcUIsMERBQVcsZUFBZSwwREFBVyxPQUFPO0FBQ2pFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDJEQUFVO0FBQ2xCO0FBQ0EsMkRBQTJEO0FBQzNELDhCQUE4QiwwREFBVyxlQUFlLDBEQUFXLE9BQU87QUFDMUU7QUFDQTtBQUNBOztBQUVnRTtBQUNoRSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2NhcnJpZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU0RLX1ZFUlNJT04gfSBmcm9tICcuL3V0aWxzL3ZlcnNpb24uanMnO1xuaW1wb3J0IHsgR0xPQkFMX09CSiB9IGZyb20gJy4vdXRpbHMvd29ybGR3aWRlLmpzJztcblxuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCBjb250YWlucyBnbG9iYWxseSBhY2Nlc3NpYmxlIHByb3BlcnRpZXMgYW5kIG1haW50YWlucyBhIHNjb3BlIHN0YWNrLlxuICogQGhpZGRlblxuICovXG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2xvYmFsIHNoaW0gcmVnaXN0cnkuXG4gKlxuICogRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgcHJvYmxlbWF0aWMsIGJlY2F1c2UgZGVzcGl0ZSBhbHdheXMgcmV0dXJuaW5nIGEgdmFsaWQgQ2FycmllcixcbiAqIGl0IGhhcyBhbiBvcHRpb25hbCBgX19TRU5UUllfX2AgcHJvcGVydHksIHdoaWNoIHRoZW4gaW4gdHVybiByZXF1aXJlcyB1cyB0byBhbHdheXMgcGVyZm9ybSBhbiB1bm5lY2Vzc2FyeSBjaGVja1xuICogYXQgdGhlIGNhbGwtc2l0ZS4gV2UgYWx3YXlzIGFjY2VzcyB0aGUgY2FycmllciB0aHJvdWdoIHRoaXMgZnVuY3Rpb24sIHNvIHdlIGNhbiBndWFyYW50ZWUgdGhhdCBgX19TRU5UUllfX2AgaXMgdGhlcmUuXG4gKiovXG5mdW5jdGlvbiBnZXRNYWluQ2FycmllcigpIHtcbiAgLy8gVGhpcyBlbnN1cmVzIGEgU2VudHJ5IGNhcnJpZXIgZXhpc3RzXG4gIGdldFNlbnRyeUNhcnJpZXIoR0xPQkFMX09CSik7XG4gIHJldHVybiBHTE9CQUxfT0JKO1xufVxuXG4vKiogV2lsbCBlaXRoZXIgZ2V0IHRoZSBleGlzdGluZyBzZW50cnkgY2Fycmllciwgb3IgY3JlYXRlIGEgbmV3IG9uZS4gKi9cbmZ1bmN0aW9uIGdldFNlbnRyeUNhcnJpZXIoY2Fycmllcikge1xuICBjb25zdCBfX1NFTlRSWV9fID0gKGNhcnJpZXIuX19TRU5UUllfXyA9IGNhcnJpZXIuX19TRU5UUllfXyB8fCB7fSk7XG5cbiAgLy8gRm9yIG5vdzogRmlyc3QgU0RLIHRoYXQgc2V0cyB0aGUgLnZlcnNpb24gcHJvcGVydHkgd2luc1xuICBfX1NFTlRSWV9fLnZlcnNpb24gPSBfX1NFTlRSWV9fLnZlcnNpb24gfHwgU0RLX1ZFUlNJT047XG5cbiAgLy8gSW50ZW50aW9uYWxseSBwb3B1bGF0aW5nIGFuZCByZXR1cm5pbmcgdGhlIHZlcnNpb24gb2YgXCJ0aGlzXCIgU0RLIGluc3RhbmNlXG4gIC8vIHJhdGhlciB0aGFuIHdoYXQncyBzZXQgaW4gLnZlcnNpb24gc28gdGhhdCBcInRoaXNcIiBTREsgYWx3YXlzIGdldHMgaXRzIGNhcnJpZXJcbiAgcmV0dXJuIChfX1NFTlRSWV9fW1NES19WRVJTSU9OXSA9IF9fU0VOVFJZX19bU0RLX1ZFUlNJT05dIHx8IHt9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZ2xvYmFsIHNpbmdsZXRvbiBjb250YWluZWQgaW4gdGhlIGdsb2JhbCBgX19TRU5UUllfX1tdYCBvYmplY3QuXG4gKlxuICogSWYgdGhlIHNpbmdsZXRvbiBkb2Vzbid0IGFscmVhZHkgZXhpc3QgaW4gYF9fU0VOVFJZX19gLCBpdCB3aWxsIGJlIGNyZWF0ZWQgdXNpbmcgdGhlIGdpdmVuIGZhY3RvcnlcbiAqIGZ1bmN0aW9uIGFuZCBhZGRlZCB0byB0aGUgYF9fU0VOVFJZX19gIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gbmFtZSBuYW1lIG9mIHRoZSBnbG9iYWwgc2luZ2xldG9uIG9uIF9fU0VOVFJZX19cbiAqIEBwYXJhbSBjcmVhdG9yIGNyZWF0b3IgRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIHNpbmdsZXRvbiBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3Qgb24gYF9fU0VOVFJZX19gXG4gKiBAcGFyYW0gb2JqIChPcHRpb25hbCkgVGhlIGdsb2JhbCBvYmplY3Qgb24gd2hpY2ggdG8gbG9vayBmb3IgYF9fU0VOVFJZX19gLCBpZiBub3QgYEdMT0JBTF9PQkpgJ3MgcmV0dXJuIHZhbHVlXG4gKiBAcmV0dXJucyB0aGUgc2luZ2xldG9uXG4gKi9cbmZ1bmN0aW9uIGdldEdsb2JhbFNpbmdsZXRvbihcbiAgbmFtZSxcbiAgY3JlYXRvcixcbiAgb2JqID0gR0xPQkFMX09CSixcbikge1xuICBjb25zdCBfX1NFTlRSWV9fID0gKG9iai5fX1NFTlRSWV9fID0gb2JqLl9fU0VOVFJZX18gfHwge30pO1xuICBjb25zdCBjYXJyaWVyID0gKF9fU0VOVFJZX19bU0RLX1ZFUlNJT05dID0gX19TRU5UUllfX1tTREtfVkVSU0lPTl0gfHwge30pO1xuICAvLyBOb3RlOiBXZSBkbyBub3Qgd2FudCB0byBzZXQgYGNhcnJpZXIudmVyc2lvbmAgaGVyZSwgYXMgdGhpcyBtYXkgYmUgY2FsbGVkIGJlZm9yZSBhbnkgYGluaXRgIGlzIGNhbGxlZCwgZS5nLiBmb3IgdGhlIGRlZmF1bHQgc2NvcGVzXG4gIHJldHVybiBjYXJyaWVyW25hbWVdIHx8IChjYXJyaWVyW25hbWVdID0gY3JlYXRvcigpKTtcbn1cblxuZXhwb3J0IHsgZ2V0R2xvYmFsU2luZ2xldG9uLCBnZXRNYWluQ2FycmllciwgZ2V0U2VudHJ5Q2FycmllciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2Fycmllci5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/carrier.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/checkin.js":
/*!***********************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/checkin.js ***!
  \***********************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   createCheckInEnvelope: () => (/* binding */ createCheckInEnvelope)\n/* harmony export */ });\n/* harmony import */ var _utils_dsn_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/dsn.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/dsn.js\");\n/* harmony import */ var _utils_envelope_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/envelope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/envelope.js\");\n\n\n\n/**\n * Create envelope from check in item.\n */\nfunction createCheckInEnvelope(\n  checkIn,\n  dynamicSamplingContext,\n  metadata,\n  tunnel,\n  dsn,\n) {\n  const headers = {\n    sent_at: new Date().toISOString(),\n  };\n\n  if (metadata?.sdk) {\n    headers.sdk = {\n      name: metadata.sdk.name,\n      version: metadata.sdk.version,\n    };\n  }\n\n  if (!!tunnel && !!dsn) {\n    headers.dsn = (0,_utils_dsn_js__WEBPACK_IMPORTED_MODULE_0__.dsnToString)(dsn);\n  }\n\n  if (dynamicSamplingContext) {\n    headers.trace = dynamicSamplingContext ;\n  }\n\n  const item = createCheckInEnvelopeItem(checkIn);\n  return (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_1__.createEnvelope)(headers, [item]);\n}\n\nfunction createCheckInEnvelopeItem(checkIn) {\n  const checkInHeaders = {\n    type: 'check_in',\n  };\n  return [checkInHeaders, checkIn];\n}\n\n\n//# sourceMappingURL=checkin.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2NoZWNraW4uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTZDO0FBQ1E7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQiwwREFBVztBQUM3Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTLGtFQUFjO0FBQ3ZCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFaUM7QUFDakMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9jaGVja2luLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRzblRvU3RyaW5nIH0gZnJvbSAnLi91dGlscy9kc24uanMnO1xuaW1wb3J0IHsgY3JlYXRlRW52ZWxvcGUgfSBmcm9tICcuL3V0aWxzL2VudmVsb3BlLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgZW52ZWxvcGUgZnJvbSBjaGVjayBpbiBpdGVtLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDaGVja0luRW52ZWxvcGUoXG4gIGNoZWNrSW4sXG4gIGR5bmFtaWNTYW1wbGluZ0NvbnRleHQsXG4gIG1ldGFkYXRhLFxuICB0dW5uZWwsXG4gIGRzbixcbikge1xuICBjb25zdCBoZWFkZXJzID0ge1xuICAgIHNlbnRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgfTtcblxuICBpZiAobWV0YWRhdGE/LnNkaykge1xuICAgIGhlYWRlcnMuc2RrID0ge1xuICAgICAgbmFtZTogbWV0YWRhdGEuc2RrLm5hbWUsXG4gICAgICB2ZXJzaW9uOiBtZXRhZGF0YS5zZGsudmVyc2lvbixcbiAgICB9O1xuICB9XG5cbiAgaWYgKCEhdHVubmVsICYmICEhZHNuKSB7XG4gICAgaGVhZGVycy5kc24gPSBkc25Ub1N0cmluZyhkc24pO1xuICB9XG5cbiAgaWYgKGR5bmFtaWNTYW1wbGluZ0NvbnRleHQpIHtcbiAgICBoZWFkZXJzLnRyYWNlID0gZHluYW1pY1NhbXBsaW5nQ29udGV4dCA7XG4gIH1cblxuICBjb25zdCBpdGVtID0gY3JlYXRlQ2hlY2tJbkVudmVsb3BlSXRlbShjaGVja0luKTtcbiAgcmV0dXJuIGNyZWF0ZUVudmVsb3BlKGhlYWRlcnMsIFtpdGVtXSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNoZWNrSW5FbnZlbG9wZUl0ZW0oY2hlY2tJbikge1xuICBjb25zdCBjaGVja0luSGVhZGVycyA9IHtcbiAgICB0eXBlOiAnY2hlY2tfaW4nLFxuICB9O1xuICByZXR1cm4gW2NoZWNrSW5IZWFkZXJzLCBjaGVja0luXTtcbn1cblxuZXhwb3J0IHsgY3JlYXRlQ2hlY2tJbkVudmVsb3BlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGVja2luLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/checkin.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/client.js":
/*!**********************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/client.js ***!
  \**********************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   BaseClient: () => (/* binding */ BaseClient),\n/* harmony export */   Client: () => (/* binding */ Client),\n/* harmony export */   _getTraceInfoFromScope: () => (/* binding */ _getTraceInfoFromScope)\n/* harmony export */ });\n/* harmony import */ var _api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./api.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/api.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/constants.js\");\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _envelope_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./envelope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/envelope.js\");\n/* harmony import */ var _integration_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js\");\n/* harmony import */ var _session_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./session.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/session.js\");\n/* harmony import */ var _tracing_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tracing/dynamicSamplingContext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js\");\n/* harmony import */ var _utils_clientreport_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/clientreport.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/clientreport.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_dsn_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utils/dsn.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/dsn.js\");\n/* harmony import */ var _utils_envelope_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utils/envelope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/envelope.js\");\n/* harmony import */ var _utils_eventUtils_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utils/eventUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/eventUtils.js\");\n/* harmony import */ var _utils_is_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./utils/is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n/* harmony import */ var _utils_merge_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./utils/merge.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/merge.js\");\n/* harmony import */ var _utils_misc_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./utils/misc.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/misc.js\");\n/* harmony import */ var _utils_parseSampleRate_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./utils/parseSampleRate.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/parseSampleRate.js\");\n/* harmony import */ var _utils_prepareEvent_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./utils/prepareEvent.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/prepareEvent.js\");\n/* harmony import */ var _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./utils/spanUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js\");\n/* harmony import */ var _utils_syncpromise_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./utils/syncpromise.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/syncpromise.js\");\n/* harmony import */ var _utils_transactionEvent_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./utils/transactionEvent.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/transactionEvent.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* eslint-disable max-lines */\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\nconst MISSING_RELEASE_FOR_SESSION_ERROR = 'Discarded session because of missing or non-string release';\n\nconst INTERNAL_ERROR_SYMBOL = Symbol.for('SentryInternalError');\nconst DO_NOT_SEND_EVENT_SYMBOL = Symbol.for('SentryDoNotSendEventError');\n\nfunction _makeInternalError(message) {\n  return {\n    message,\n    [INTERNAL_ERROR_SYMBOL]: true,\n  };\n}\n\nfunction _makeDoNotSendEventError(message) {\n  return {\n    message,\n    [DO_NOT_SEND_EVENT_SYMBOL]: true,\n  };\n}\n\nfunction _isInternalError(error) {\n  return !!error && typeof error === 'object' && INTERNAL_ERROR_SYMBOL in error;\n}\n\nfunction _isDoNotSendEventError(error) {\n  return !!error && typeof error === 'object' && DO_NOT_SEND_EVENT_SYMBOL in error;\n}\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event, it is passed through\n * {@link Client._prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends Client<NodeOptions> {\n *   public constructor(options: NodeOptions) {\n *     super(options);\n *   }\n *\n *   // ...\n * }\n */\nclass Client {\n  /** Options passed to the SDK. */\n\n  /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n\n  /** Array of set up integrations. */\n\n  /** Number of calls being processed */\n\n  /** Holds flushable  */\n\n  // eslint-disable-next-line @typescript-eslint/ban-types\n\n  /**\n   * Initializes this client instance.\n   *\n   * @param options Options for the client.\n   */\n   constructor(options) {\n    this._options = options;\n    this._integrations = {};\n    this._numProcessing = 0;\n    this._outcomes = {};\n    this._hooks = {};\n    this._eventProcessors = [];\n\n    if (options.dsn) {\n      this._dsn = (0,_utils_dsn_js__WEBPACK_IMPORTED_MODULE_10__.makeDsn)(options.dsn);\n    } else {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_9__.debug.warn('No DSN provided, client will not send events.');\n    }\n\n    if (this._dsn) {\n      const url = (0,_api_js__WEBPACK_IMPORTED_MODULE_0__.getEnvelopeEndpointWithUrlEncodedAuth)(\n        this._dsn,\n        options.tunnel,\n        options._metadata ? options._metadata.sdk : undefined,\n      );\n      this._transport = options.transport({\n        tunnel: this._options.tunnel,\n        recordDroppedEvent: this.recordDroppedEvent.bind(this),\n        ...options.transportOptions,\n        url,\n      });\n    }\n  }\n\n  /**\n   * Captures an exception event and sends it to Sentry.\n   *\n   * Unlike `captureException` exported from every SDK, this method requires that you pass it the current scope.\n   */\n   captureException(exception, hint, scope) {\n    const eventId = (0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_15__.uuid4)();\n\n    // ensure we haven't captured this very object before\n    if ((0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_15__.checkOrSetAlreadyCaught)(exception)) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_9__.debug.log(ALREADY_SEEN_ERROR);\n      return eventId;\n    }\n\n    const hintWithEventId = {\n      event_id: eventId,\n      ...hint,\n    };\n\n    this._process(\n      this.eventFromException(exception, hintWithEventId).then(event =>\n        this._captureEvent(event, hintWithEventId, scope),\n      ),\n    );\n\n    return hintWithEventId.event_id;\n  }\n\n  /**\n   * Captures a message event and sends it to Sentry.\n   *\n   * Unlike `captureMessage` exported from every SDK, this method requires that you pass it the current scope.\n   */\n   captureMessage(\n    message,\n    level,\n    hint,\n    currentScope,\n  ) {\n    const hintWithEventId = {\n      event_id: (0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_15__.uuid4)(),\n      ...hint,\n    };\n\n    const eventMessage = (0,_utils_is_js__WEBPACK_IMPORTED_MODULE_13__.isParameterizedString)(message) ? message : String(message);\n\n    const promisedEvent = (0,_utils_is_js__WEBPACK_IMPORTED_MODULE_13__.isPrimitive)(message)\n      ? this.eventFromMessage(eventMessage, level, hintWithEventId)\n      : this.eventFromException(message, hintWithEventId);\n\n    this._process(promisedEvent.then(event => this._captureEvent(event, hintWithEventId, currentScope)));\n\n    return hintWithEventId.event_id;\n  }\n\n  /**\n   * Captures a manually created event and sends it to Sentry.\n   *\n   * Unlike `captureEvent` exported from every SDK, this method requires that you pass it the current scope.\n   */\n   captureEvent(event, hint, currentScope) {\n    const eventId = (0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_15__.uuid4)();\n\n    // ensure we haven't captured this very object before\n    if (hint?.originalException && (0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_15__.checkOrSetAlreadyCaught)(hint.originalException)) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_9__.debug.log(ALREADY_SEEN_ERROR);\n      return eventId;\n    }\n\n    const hintWithEventId = {\n      event_id: eventId,\n      ...hint,\n    };\n\n    const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n    const capturedSpanScope = sdkProcessingMetadata.capturedSpanScope;\n    const capturedSpanIsolationScope = sdkProcessingMetadata.capturedSpanIsolationScope;\n\n    this._process(\n      this._captureEvent(event, hintWithEventId, capturedSpanScope || currentScope, capturedSpanIsolationScope),\n    );\n\n    return hintWithEventId.event_id;\n  }\n\n  /**\n   * Captures a session.\n   */\n   captureSession(session) {\n    this.sendSession(session);\n    // After sending, we set init false to indicate it's not the first occurrence\n    (0,_session_js__WEBPACK_IMPORTED_MODULE_6__.updateSession)(session, { init: false });\n  }\n\n  /**\n   * Create a cron monitor check in and send it to Sentry. This method is not available on all clients.\n   *\n   * @param checkIn An object that describes a check in.\n   * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n   * to create a monitor automatically when sending a check in.\n   * @param scope An optional scope containing event metadata.\n   * @returns A string representing the id of the check in.\n   */\n\n  /**\n   * Get the current Dsn.\n   */\n   getDsn() {\n    return this._dsn;\n  }\n\n  /**\n   * Get the current options.\n   */\n   getOptions() {\n    return this._options;\n  }\n\n  /**\n   * Get the SDK metadata.\n   * @see SdkMetadata\n   */\n   getSdkMetadata() {\n    return this._options._metadata;\n  }\n\n  /**\n   * Returns the transport that is used by the client.\n   * Please note that the transport gets lazy initialized so it will only be there once the first event has been sent.\n   */\n   getTransport() {\n    return this._transport;\n  }\n\n  /**\n   * Wait for all events to be sent or the timeout to expire, whichever comes first.\n   *\n   * @param timeout Maximum time in ms the client should wait for events to be flushed. Omitting this parameter will\n   *   cause the client to wait until all events are sent before resolving the promise.\n   * @returns A promise that will resolve with `true` if all events are sent before the timeout, or `false` if there are\n   * still events in the queue when the timeout is reached.\n   */\n   flush(timeout) {\n    const transport = this._transport;\n    if (transport) {\n      this.emit('flush');\n      return this._isClientDoneProcessing(timeout).then(clientFinished => {\n        return transport.flush(timeout).then(transportFlushed => clientFinished && transportFlushed);\n      });\n    } else {\n      return (0,_utils_syncpromise_js__WEBPACK_IMPORTED_MODULE_19__.resolvedSyncPromise)(true);\n    }\n  }\n\n  /**\n   * Flush the event queue and set the client to `enabled = false`. See {@link Client.flush}.\n   *\n   * @param {number} timeout Maximum time in ms the client should wait before shutting down. Omitting this parameter will cause\n   *   the client to wait until all events are sent before disabling itself.\n   * @returns {Promise<boolean>} A promise which resolves to `true` if the flush completes successfully before the timeout, or `false` if\n   * it doesn't.\n   */\n   close(timeout) {\n    return this.flush(timeout).then(result => {\n      this.getOptions().enabled = false;\n      this.emit('close');\n      return result;\n    });\n  }\n\n  /**\n   * Get all installed event processors.\n   */\n   getEventProcessors() {\n    return this._eventProcessors;\n  }\n\n  /**\n   * Adds an event processor that applies to any event processed by this client.\n   */\n   addEventProcessor(eventProcessor) {\n    this._eventProcessors.push(eventProcessor);\n  }\n\n  /**\n   * Initialize this client.\n   * Call this after the client was set on a scope.\n   */\n   init() {\n    if (\n      this._isEnabled() ||\n      // Force integrations to be setup even if no DSN was set when we have\n      // Spotlight enabled. This is particularly important for browser as we\n      // don't support the `spotlight` option there and rely on the users\n      // adding the `spotlightBrowserIntegration()` to their integrations which\n      // wouldn't get initialized with the check below when there's no DSN set.\n      this._options.integrations.some(({ name }) => name.startsWith('Spotlight'))\n    ) {\n      this._setupIntegrations();\n    }\n  }\n\n  /**\n   * Gets an installed integration by its name.\n   *\n   * @returns {Integration|undefined} The installed integration or `undefined` if no integration with that `name` was installed.\n   */\n   getIntegrationByName(integrationName) {\n    return this._integrations[integrationName] ;\n  }\n\n  /**\n   * Add an integration to the client.\n   * This can be used to e.g. lazy load integrations.\n   * In most cases, this should not be necessary,\n   * and you're better off just passing the integrations via `integrations: []` at initialization time.\n   * However, if you find the need to conditionally load & add an integration, you can use `addIntegration` to do so.\n   */\n   addIntegration(integration) {\n    const isAlreadyInstalled = this._integrations[integration.name];\n\n    // This hook takes care of only installing if not already installed\n    (0,_integration_js__WEBPACK_IMPORTED_MODULE_5__.setupIntegration)(this, integration, this._integrations);\n    // Here we need to check manually to make sure to not run this multiple times\n    if (!isAlreadyInstalled) {\n      (0,_integration_js__WEBPACK_IMPORTED_MODULE_5__.afterSetupIntegrations)(this, [integration]);\n    }\n  }\n\n  /**\n   * Send a fully prepared event to Sentry.\n   */\n   sendEvent(event, hint = {}) {\n    this.emit('beforeSendEvent', event, hint);\n\n    let env = (0,_envelope_js__WEBPACK_IMPORTED_MODULE_4__.createEventEnvelope)(event, this._dsn, this._options._metadata, this._options.tunnel);\n\n    for (const attachment of hint.attachments || []) {\n      env = (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_11__.addItemToEnvelope)(env, (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_11__.createAttachmentEnvelopeItem)(attachment));\n    }\n\n    const promise = this.sendEnvelope(env);\n    if (promise) {\n      promise.then(sendResponse => this.emit('afterSendEvent', event, sendResponse), null);\n    }\n  }\n\n  /**\n   * Send a session or session aggregrates to Sentry.\n   */\n   sendSession(session) {\n    // Backfill release and environment on session\n    const { release: clientReleaseOption, environment: clientEnvironmentOption = _constants_js__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_ENVIRONMENT } = this._options;\n    if ('aggregates' in session) {\n      const sessionAttrs = session.attrs || {};\n      if (!sessionAttrs.release && !clientReleaseOption) {\n        _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_9__.debug.warn(MISSING_RELEASE_FOR_SESSION_ERROR);\n        return;\n      }\n      sessionAttrs.release = sessionAttrs.release || clientReleaseOption;\n      sessionAttrs.environment = sessionAttrs.environment || clientEnvironmentOption;\n      session.attrs = sessionAttrs;\n    } else {\n      if (!session.release && !clientReleaseOption) {\n        _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_9__.debug.warn(MISSING_RELEASE_FOR_SESSION_ERROR);\n        return;\n      }\n      session.release = session.release || clientReleaseOption;\n      session.environment = session.environment || clientEnvironmentOption;\n    }\n\n    this.emit('beforeSendSession', session);\n\n    const env = (0,_envelope_js__WEBPACK_IMPORTED_MODULE_4__.createSessionEnvelope)(session, this._dsn, this._options._metadata, this._options.tunnel);\n\n    // sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this.sendEnvelope(env);\n  }\n\n  /**\n   * Record on the client that an event got dropped (ie, an event that will not be sent to Sentry).\n   */\n   recordDroppedEvent(reason, category, count = 1) {\n    if (this._options.sendClientReports) {\n      // We want to track each category (error, transaction, session, replay_event) separately\n      // but still keep the distinction between different type of outcomes.\n      // We could use nested maps, but it's much easier to read and type this way.\n      // A correct type for map-based implementation if we want to go that route\n      // would be `Partial<Record<SentryRequestType, Partial<Record<Outcome, number>>>>`\n      // With typescript 4.1 we could even use template literal types\n      const key = `${reason}:${category}`;\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_9__.debug.log(`Recording outcome: \"${key}\"${count > 1 ? ` (${count} times)` : ''}`);\n      this._outcomes[key] = (this._outcomes[key] || 0) + count;\n    }\n  }\n\n  /* eslint-disable @typescript-eslint/unified-signatures */\n  /**\n   * Register a callback for whenever a span is started.\n   * Receives the span as argument.\n   * @returns {() => void} A function that, when executed, removes the registered callback.\n   */\n\n  /**\n   * Register a hook on this client.\n   */\n   on(hook, callback) {\n    const hooks = (this._hooks[hook] = this._hooks[hook] || []);\n\n    // @ts-expect-error We assume the types are correct\n    hooks.push(callback);\n\n    // This function returns a callback execution handler that, when invoked,\n    // deregisters a callback. This is crucial for managing instances where callbacks\n    // need to be unregistered to prevent self-referencing in callback closures,\n    // ensuring proper garbage collection.\n    return () => {\n      // @ts-expect-error We assume the types are correct\n      const cbIndex = hooks.indexOf(callback);\n      if (cbIndex > -1) {\n        hooks.splice(cbIndex, 1);\n      }\n    };\n  }\n\n  /** Fire a hook whenever a span starts. */\n\n  /**\n   * Emit a hook that was previously registered via `on()`.\n   */\n   emit(hook, ...rest) {\n    const callbacks = this._hooks[hook];\n    if (callbacks) {\n      callbacks.forEach(callback => callback(...rest));\n    }\n  }\n\n  /**\n   * Send an envelope to Sentry.\n   */\n   sendEnvelope(envelope) {\n    this.emit('beforeEnvelope', envelope);\n\n    if (this._isEnabled() && this._transport) {\n      return this._transport.send(envelope).then(null, reason => {\n        _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_9__.debug.error('Error while sending envelope:', reason);\n        return reason;\n      });\n    }\n\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_9__.debug.error('Transport disabled');\n\n    return (0,_utils_syncpromise_js__WEBPACK_IMPORTED_MODULE_19__.resolvedSyncPromise)({});\n  }\n\n  /* eslint-enable @typescript-eslint/unified-signatures */\n\n  /** Setup integrations for this client. */\n   _setupIntegrations() {\n    const { integrations } = this._options;\n    this._integrations = (0,_integration_js__WEBPACK_IMPORTED_MODULE_5__.setupIntegrations)(this, integrations);\n    (0,_integration_js__WEBPACK_IMPORTED_MODULE_5__.afterSetupIntegrations)(this, integrations);\n  }\n\n  /** Updates existing session based on the provided event */\n   _updateSessionFromEvent(session, event) {\n    let crashed = event.level === 'fatal';\n    let errored = false;\n    const exceptions = event.exception?.values;\n\n    if (exceptions) {\n      errored = true;\n\n      for (const ex of exceptions) {\n        const mechanism = ex.mechanism;\n        if (mechanism?.handled === false) {\n          crashed = true;\n          break;\n        }\n      }\n    }\n\n    // A session is updated and that session update is sent in only one of the two following scenarios:\n    // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n    // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n    const sessionNonTerminal = session.status === 'ok';\n    const shouldUpdateAndSend = (sessionNonTerminal && session.errors === 0) || (sessionNonTerminal && crashed);\n\n    if (shouldUpdateAndSend) {\n      (0,_session_js__WEBPACK_IMPORTED_MODULE_6__.updateSession)(session, {\n        ...(crashed && { status: 'crashed' }),\n        errors: session.errors || Number(errored || crashed),\n      });\n      this.captureSession(session);\n    }\n  }\n\n  /**\n   * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n   * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n   * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n   * `false` otherwise\n   */\n   _isClientDoneProcessing(timeout) {\n    return new _utils_syncpromise_js__WEBPACK_IMPORTED_MODULE_19__.SyncPromise(resolve => {\n      let ticked = 0;\n      const tick = 1;\n\n      const interval = setInterval(() => {\n        if (this._numProcessing == 0) {\n          clearInterval(interval);\n          resolve(true);\n        } else {\n          ticked += tick;\n          if (timeout && ticked >= timeout) {\n            clearInterval(interval);\n            resolve(false);\n          }\n        }\n      }, tick);\n    });\n  }\n\n  /** Determines whether this SDK is enabled and a transport is present. */\n   _isEnabled() {\n    return this.getOptions().enabled !== false && this._transport !== undefined;\n  }\n\n  /**\n   * Adds common information to events.\n   *\n   * The information includes release and environment from `options`,\n   * breadcrumbs and context (extra, tags and user) from the scope.\n   *\n   * Information that is already present in the event is never overwritten. For\n   * nested objects, such as the context, keys are merged.\n   *\n   * @param event The original event.\n   * @param hint May contain additional information about the original exception.\n   * @param currentScope A scope containing event metadata.\n   * @returns A new event with more information.\n   */\n   _prepareEvent(\n    event,\n    hint,\n    currentScope,\n    isolationScope,\n  ) {\n    const options = this.getOptions();\n    const integrations = Object.keys(this._integrations);\n    if (!hint.integrations && integrations?.length) {\n      hint.integrations = integrations;\n    }\n\n    this.emit('preprocessEvent', event, hint);\n\n    if (!event.type) {\n      isolationScope.setLastEventId(event.event_id || hint.event_id);\n    }\n\n    return (0,_utils_prepareEvent_js__WEBPACK_IMPORTED_MODULE_17__.prepareEvent)(options, event, hint, currentScope, this, isolationScope).then(evt => {\n      if (evt === null) {\n        return evt;\n      }\n\n      this.emit('postprocessEvent', evt, hint);\n\n      evt.contexts = {\n        trace: (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getTraceContextFromScope)(currentScope),\n        ...evt.contexts,\n      };\n\n      const dynamicSamplingContext = (0,_tracing_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_7__.getDynamicSamplingContextFromScope)(this, currentScope);\n\n      evt.sdkProcessingMetadata = {\n        dynamicSamplingContext,\n        ...evt.sdkProcessingMetadata,\n      };\n\n      return evt;\n    });\n  }\n\n  /**\n   * Processes the event and logs an error in case of rejection\n   * @param event\n   * @param hint\n   * @param scope\n   */\n   _captureEvent(\n    event,\n    hint = {},\n    currentScope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getCurrentScope)(),\n    isolationScope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getIsolationScope)(),\n  ) {\n    if (_debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && isErrorEvent(event)) {\n      _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_9__.debug.log(`Captured error event \\`${(0,_utils_eventUtils_js__WEBPACK_IMPORTED_MODULE_12__.getPossibleEventMessages)(event)[0] || '<unknown>'}\\``);\n    }\n\n    return this._processEvent(event, hint, currentScope, isolationScope).then(\n      finalEvent => {\n        return finalEvent.event_id;\n      },\n      reason => {\n        if (_debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD) {\n          if (_isDoNotSendEventError(reason)) {\n            _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_9__.debug.log(reason.message);\n          } else if (_isInternalError(reason)) {\n            _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_9__.debug.warn(reason.message);\n          } else {\n            _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_9__.debug.warn(reason);\n          }\n        }\n        return undefined;\n      },\n    );\n  }\n\n  /**\n   * Processes an event (either error or message) and sends it to Sentry.\n   *\n   * This also adds breadcrumbs and context information to the event. However,\n   * platform specific meta data (such as the User's IP address) must be added\n   * by the SDK implementor.\n   *\n   *\n   * @param event The event to send to Sentry.\n   * @param hint May contain additional information about the original exception.\n   * @param currentScope A scope containing event metadata.\n   * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n   */\n   _processEvent(\n    event,\n    hint,\n    currentScope,\n    isolationScope,\n  ) {\n    const options = this.getOptions();\n    const { sampleRate } = options;\n\n    const isTransaction = isTransactionEvent(event);\n    const isError = isErrorEvent(event);\n    const eventType = event.type || 'error';\n    const beforeSendLabel = `before send for type \\`${eventType}\\``;\n\n    // 1.0 === 100% events are sent\n    // 0.0 === 0% events are sent\n    // Sampling for transaction happens somewhere else\n    const parsedSampleRate = typeof sampleRate === 'undefined' ? undefined : (0,_utils_parseSampleRate_js__WEBPACK_IMPORTED_MODULE_16__.parseSampleRate)(sampleRate);\n    if (isError && typeof parsedSampleRate === 'number' && Math.random() > parsedSampleRate) {\n      this.recordDroppedEvent('sample_rate', 'error');\n      return (0,_utils_syncpromise_js__WEBPACK_IMPORTED_MODULE_19__.rejectedSyncPromise)(\n        _makeDoNotSendEventError(\n          `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n        ),\n      );\n    }\n\n    const dataCategory = (eventType === 'replay_event' ? 'replay' : eventType) ;\n\n    return this._prepareEvent(event, hint, currentScope, isolationScope)\n      .then(prepared => {\n        if (prepared === null) {\n          this.recordDroppedEvent('event_processor', dataCategory);\n          throw _makeDoNotSendEventError('An event processor returned `null`, will not send event.');\n        }\n\n        const isInternalException = hint.data && (hint.data ).__sentry__ === true;\n        if (isInternalException) {\n          return prepared;\n        }\n\n        const result = processBeforeSend(this, options, prepared, hint);\n        return _validateBeforeSendResult(result, beforeSendLabel);\n      })\n      .then(processedEvent => {\n        if (processedEvent === null) {\n          this.recordDroppedEvent('before_send', dataCategory);\n          if (isTransaction) {\n            const spans = event.spans || [];\n            // the transaction itself counts as one span, plus all the child spans that are added\n            const spanCount = 1 + spans.length;\n            this.recordDroppedEvent('before_send', 'span', spanCount);\n          }\n          throw _makeDoNotSendEventError(`${beforeSendLabel} returned \\`null\\`, will not send event.`);\n        }\n\n        const session = currentScope.getSession() || isolationScope.getSession();\n        if (isError && session) {\n          this._updateSessionFromEvent(session, processedEvent);\n        }\n\n        if (isTransaction) {\n          const spanCountBefore = processedEvent.sdkProcessingMetadata?.spanCountBeforeProcessing || 0;\n          const spanCountAfter = processedEvent.spans ? processedEvent.spans.length : 0;\n\n          const droppedSpanCount = spanCountBefore - spanCountAfter;\n          if (droppedSpanCount > 0) {\n            this.recordDroppedEvent('before_send', 'span', droppedSpanCount);\n          }\n        }\n\n        // None of the Sentry built event processor will update transaction name,\n        // so if the transaction name has been changed by an event processor, we know\n        // it has to come from custom event processor added by a user\n        const transactionInfo = processedEvent.transaction_info;\n        if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n          const source = 'custom';\n          processedEvent.transaction_info = {\n            ...transactionInfo,\n            source,\n          };\n        }\n\n        this.sendEvent(processedEvent, hint);\n        return processedEvent;\n      })\n      .then(null, reason => {\n        if (_isDoNotSendEventError(reason) || _isInternalError(reason)) {\n          throw reason;\n        }\n\n        this.captureException(reason, {\n          data: {\n            __sentry__: true,\n          },\n          originalException: reason,\n        });\n        throw _makeInternalError(\n          `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: ${reason}`,\n        );\n      });\n  }\n\n  /**\n   * Occupies the client with processing and event\n   */\n   _process(promise) {\n    this._numProcessing++;\n    void promise.then(\n      value => {\n        this._numProcessing--;\n        return value;\n      },\n      reason => {\n        this._numProcessing--;\n        return reason;\n      },\n    );\n  }\n\n  /**\n   * Clears outcomes on this client and returns them.\n   */\n   _clearOutcomes() {\n    const outcomes = this._outcomes;\n    this._outcomes = {};\n    return Object.entries(outcomes).map(([key, quantity]) => {\n      const [reason, category] = key.split(':') ;\n      return {\n        reason,\n        category,\n        quantity,\n      };\n    });\n  }\n\n  /**\n   * Sends client reports as an envelope.\n   */\n   _flushOutcomes() {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_9__.debug.log('Flushing outcomes...');\n\n    const outcomes = this._clearOutcomes();\n\n    if (outcomes.length === 0) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_9__.debug.log('No outcomes to send');\n      return;\n    }\n\n    // This is really the only place where we want to check for a DSN and only send outcomes then\n    if (!this._dsn) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_9__.debug.log('No dsn provided, will not send outcomes');\n      return;\n    }\n\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_9__.debug.log('Sending outcomes:', outcomes);\n\n    const envelope = (0,_utils_clientreport_js__WEBPACK_IMPORTED_MODULE_8__.createClientReportEnvelope)(outcomes, this._options.tunnel && (0,_utils_dsn_js__WEBPACK_IMPORTED_MODULE_10__.dsnToString)(this._dsn));\n\n    // sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this.sendEnvelope(envelope);\n  }\n\n  /**\n   * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n   */\n\n}\n\n/**\n * @deprecated Use `Client` instead. This alias may be removed in a future major version.\n */\n// TODO(v10): Remove\n\n/**\n * @deprecated Use `Client` instead. This alias may be removed in a future major version.\n */\n// TODO(v10): Remove\nconst BaseClient = Client;\n\n/**\n * Verifies that return value of configured `beforeSend` or `beforeSendTransaction` is of expected type, and returns the value if so.\n */\nfunction _validateBeforeSendResult(\n  beforeSendResult,\n  beforeSendLabel,\n) {\n  const invalidValueError = `${beforeSendLabel} must return \\`null\\` or a valid event.`;\n  if ((0,_utils_is_js__WEBPACK_IMPORTED_MODULE_13__.isThenable)(beforeSendResult)) {\n    return beforeSendResult.then(\n      event => {\n        if (!(0,_utils_is_js__WEBPACK_IMPORTED_MODULE_13__.isPlainObject)(event) && event !== null) {\n          throw _makeInternalError(invalidValueError);\n        }\n        return event;\n      },\n      e => {\n        throw _makeInternalError(`${beforeSendLabel} rejected with ${e}`);\n      },\n    );\n  } else if (!(0,_utils_is_js__WEBPACK_IMPORTED_MODULE_13__.isPlainObject)(beforeSendResult) && beforeSendResult !== null) {\n    throw _makeInternalError(invalidValueError);\n  }\n  return beforeSendResult;\n}\n\n/**\n * Process the matching `beforeSendXXX` callback.\n */\nfunction processBeforeSend(\n  client,\n  options,\n  event,\n  hint,\n) {\n  const { beforeSend, beforeSendTransaction, beforeSendSpan } = options;\n  let processedEvent = event;\n\n  if (isErrorEvent(processedEvent) && beforeSend) {\n    return beforeSend(processedEvent, hint);\n  }\n\n  if (isTransactionEvent(processedEvent)) {\n    if (beforeSendSpan) {\n      // process root span\n      const processedRootSpanJson = beforeSendSpan((0,_utils_transactionEvent_js__WEBPACK_IMPORTED_MODULE_20__.convertTransactionEventToSpanJson)(processedEvent));\n      if (!processedRootSpanJson) {\n        (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_18__.showSpanDropWarning)();\n      } else {\n        // update event with processed root span values\n        processedEvent = (0,_utils_merge_js__WEBPACK_IMPORTED_MODULE_14__.merge)(event, (0,_utils_transactionEvent_js__WEBPACK_IMPORTED_MODULE_20__.convertSpanJsonToTransactionEvent)(processedRootSpanJson));\n      }\n\n      // process child spans\n      if (processedEvent.spans) {\n        const processedSpans = [];\n        for (const span of processedEvent.spans) {\n          const processedSpan = beforeSendSpan(span);\n          if (!processedSpan) {\n            (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_18__.showSpanDropWarning)();\n            processedSpans.push(span);\n          } else {\n            processedSpans.push(processedSpan);\n          }\n        }\n        processedEvent.spans = processedSpans;\n      }\n    }\n\n    if (beforeSendTransaction) {\n      if (processedEvent.spans) {\n        // We store the # of spans before processing in SDK metadata,\n        // so we can compare it afterwards to determine how many spans were dropped\n        const spanCountBefore = processedEvent.spans.length;\n        processedEvent.sdkProcessingMetadata = {\n          ...event.sdkProcessingMetadata,\n          spanCountBeforeProcessing: spanCountBefore,\n        };\n      }\n      return beforeSendTransaction(processedEvent , hint);\n    }\n  }\n\n  return processedEvent;\n}\n\nfunction isErrorEvent(event) {\n  return event.type === undefined;\n}\n\nfunction isTransactionEvent(event) {\n  return event.type === 'transaction';\n}\n\n/** Extract trace information from scope */\nfunction _getTraceInfoFromScope(\n  client,\n  scope,\n) {\n  if (!scope) {\n    return [undefined, undefined];\n  }\n\n  return (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.withScope)(scope, () => {\n    const span = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_18__.getActiveSpan)();\n    const traceContext = span ? (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_18__.spanToTraceContext)(span) : (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getTraceContextFromScope)(scope);\n    const dynamicSamplingContext = span\n      ? (0,_tracing_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_7__.getDynamicSamplingContextFromSpan)(span)\n      : (0,_tracing_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_7__.getDynamicSamplingContextFromScope)(client, scope);\n    return [dynamicSamplingContext, traceContext];\n  });\n}\n\n\n//# sourceMappingURL=client.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2NsaWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBaUU7QUFDWjtBQUN3RDtBQUM5RDtBQUM0QjtBQUNvQjtBQUNsRDtBQUMrRTtBQUN2RDtBQUNyQjtBQUNNO0FBQ2dDO0FBQ3JCO0FBQzZCO0FBQ3JEO0FBQ3dCO0FBQ0o7QUFDTjtBQUN1QztBQUNDO0FBQ29COztBQUVuSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHdCQUF3QjtBQUM1QjtBQUNBO0FBQ0EsSUFBSSxxQkFBcUI7QUFDekIsMENBQTBDLHNCQUFzQjtBQUNoRTtBQUNBO0FBQ0E7QUFDQSxJQUFJLDRCQUE0QjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksMEJBQTBCO0FBQzlCO0FBQ0EsSUFBSSwyQkFBMkI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQix1REFBTztBQUN6QixNQUFNO0FBQ04sTUFBTSx3REFBVyxJQUFJLHlEQUFLO0FBQzFCOztBQUVBO0FBQ0Esa0JBQWtCLDhFQUFxQztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isc0RBQUs7O0FBRXpCO0FBQ0EsUUFBUSx3RUFBdUI7QUFDL0IsTUFBTSx3REFBVyxJQUFJLHlEQUFLO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixzREFBSztBQUNyQjtBQUNBOztBQUVBLHlCQUF5QixvRUFBcUI7O0FBRTlDLDBCQUEwQiwwREFBVztBQUNyQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHNEQUFLOztBQUV6QjtBQUNBLG1DQUFtQyx3RUFBdUI7QUFDMUQsTUFBTSx3REFBVyxJQUFJLHlEQUFLO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksMERBQWEsWUFBWSxhQUFhO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOLGFBQWEsMkVBQW1CO0FBQ2hDO0FBQ0E7O0FBRUE7QUFDQSx5RUFBeUUsbUJBQW1CO0FBQzVGO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0EsZUFBZSxrQkFBa0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsTUFBTTtBQUMvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLHVCQUF1QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLGlFQUFnQjtBQUNwQjtBQUNBO0FBQ0EsTUFBTSx1RUFBc0I7QUFDNUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7O0FBRUEsY0FBYyxpRUFBbUI7O0FBRWpDO0FBQ0EsWUFBWSxzRUFBaUIsTUFBTSxpRkFBNEI7QUFDL0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxxRUFBcUUsOERBQW1CLEdBQUc7QUFDdkc7QUFDQTtBQUNBO0FBQ0EsUUFBUSx3REFBVyxJQUFJLHlEQUFLO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxRQUFRLHdEQUFXLElBQUkseURBQUs7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxnQkFBZ0IsbUVBQXFCOztBQUVyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLE9BQU8sR0FBRyxTQUFTO0FBQ3hDLE1BQU0sd0RBQVcsSUFBSSx5REFBSyw0QkFBNEIsSUFBSSxHQUFHLGlCQUFpQixPQUFPLGFBQWE7QUFDbEc7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxZQUFZO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVEsd0RBQVcsSUFBSSx5REFBSztBQUM1QjtBQUNBLE9BQU87QUFDUDs7QUFFQSxJQUFJLHdEQUFXLElBQUkseURBQUs7O0FBRXhCLFdBQVcsMkVBQW1CLEdBQUc7QUFDakM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFlBQVksZUFBZTtBQUMzQix5QkFBeUIsa0VBQWlCO0FBQzFDLElBQUksdUVBQXNCO0FBQzFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLDBEQUFhO0FBQ25CLHlCQUF5QixtQkFBbUI7QUFDNUM7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLCtEQUFXO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxxRUFBWTtBQUN2QjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxlQUFlLDJFQUF3QjtBQUN2QztBQUNBOztBQUVBLHFDQUFxQyxzR0FBa0M7O0FBRXZFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsbUJBQW1CLGtFQUFlO0FBQ2xDLHFCQUFxQixvRUFBaUI7QUFDdEM7QUFDQSxRQUFRLHdEQUFXO0FBQ25CLE1BQU0seURBQUssK0JBQStCLCtFQUF3QiwwQkFBMEI7QUFDNUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsWUFBWSx3REFBVztBQUN2QjtBQUNBLFlBQVkseURBQUs7QUFDakIsWUFBWTtBQUNaLFlBQVkseURBQUs7QUFDakIsWUFBWTtBQUNaLFlBQVkseURBQUs7QUFDakI7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksYUFBYTs7QUFFekI7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELFVBQVU7O0FBRWhFO0FBQ0E7QUFDQTtBQUNBLDZFQUE2RSwyRUFBZTtBQUM1RjtBQUNBO0FBQ0EsYUFBYSwyRUFBbUI7QUFDaEM7QUFDQSw4RkFBOEYsV0FBVztBQUN6RztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLGlCQUFpQjtBQUM3RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsU0FBUztBQUNUO0FBQ0Esd0lBQXdJLE9BQU87QUFDL0k7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSx3REFBVyxJQUFJLHlEQUFLOztBQUV4Qjs7QUFFQTtBQUNBLE1BQU0sd0RBQVcsSUFBSSx5REFBSztBQUMxQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNLHdEQUFXLElBQUkseURBQUs7QUFDMUI7QUFDQTs7QUFFQSxJQUFJLHdEQUFXLElBQUkseURBQUs7O0FBRXhCLHFCQUFxQixrRkFBMEIsbUNBQW1DLDJEQUFXOztBQUU3RjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixhQUFhO0FBQzlCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsaUJBQWlCO0FBQ2hELE1BQU0seURBQVU7QUFDaEI7QUFDQTtBQUNBLGFBQWEsNERBQWE7QUFDMUI7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0Esb0NBQW9DLGlCQUFpQixnQkFBZ0IsRUFBRTtBQUN2RSxPQUFPO0FBQ1A7QUFDQSxJQUFJLFVBQVUsNERBQWE7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxvREFBb0Q7QUFDOUQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCw4RkFBaUM7QUFDcEY7QUFDQSxRQUFRLHlFQUFtQjtBQUMzQixRQUFRO0FBQ1I7QUFDQSx5QkFBeUIsdURBQUssUUFBUSw4RkFBaUM7QUFDdkU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx5RUFBbUI7QUFDL0I7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsNERBQVM7QUFDbEIsaUJBQWlCLG1FQUFhO0FBQzlCLGdDQUFnQyx3RUFBa0IsU0FBUywyRUFBd0I7QUFDbkY7QUFDQSxRQUFRLHFHQUFpQztBQUN6QyxRQUFRLHNHQUFrQztBQUMxQztBQUNBLEdBQUc7QUFDSDs7QUFFc0Q7QUFDdEQiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9jbGllbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0RW52ZWxvcGVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aCB9IGZyb20gJy4vYXBpLmpzJztcbmltcG9ydCB7IERFRkFVTFRfRU5WSVJPTk1FTlQgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBnZXRUcmFjZUNvbnRleHRGcm9tU2NvcGUsIGdldEN1cnJlbnRTY29wZSwgZ2V0SXNvbGF0aW9uU2NvcGUsIHdpdGhTY29wZSB9IGZyb20gJy4vY3VycmVudFNjb3Blcy5qcyc7XG5pbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4vZGVidWctYnVpbGQuanMnO1xuaW1wb3J0IHsgY3JlYXRlRXZlbnRFbnZlbG9wZSwgY3JlYXRlU2Vzc2lvbkVudmVsb3BlIH0gZnJvbSAnLi9lbnZlbG9wZS5qcyc7XG5pbXBvcnQgeyBzZXR1cEludGVncmF0aW9uLCBhZnRlclNldHVwSW50ZWdyYXRpb25zLCBzZXR1cEludGVncmF0aW9ucyB9IGZyb20gJy4vaW50ZWdyYXRpb24uanMnO1xuaW1wb3J0IHsgdXBkYXRlU2Vzc2lvbiB9IGZyb20gJy4vc2Vzc2lvbi5qcyc7XG5pbXBvcnQgeyBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNjb3BlLCBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4gfSBmcm9tICcuL3RyYWNpbmcvZHluYW1pY1NhbXBsaW5nQ29udGV4dC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVDbGllbnRSZXBvcnRFbnZlbG9wZSB9IGZyb20gJy4vdXRpbHMvY2xpZW50cmVwb3J0LmpzJztcbmltcG9ydCB7IGRlYnVnIH0gZnJvbSAnLi91dGlscy9kZWJ1Zy1sb2dnZXIuanMnO1xuaW1wb3J0IHsgbWFrZURzbiwgZHNuVG9TdHJpbmcgfSBmcm9tICcuL3V0aWxzL2Rzbi5qcyc7XG5pbXBvcnQgeyBhZGRJdGVtVG9FbnZlbG9wZSwgY3JlYXRlQXR0YWNobWVudEVudmVsb3BlSXRlbSB9IGZyb20gJy4vdXRpbHMvZW52ZWxvcGUuanMnO1xuaW1wb3J0IHsgZ2V0UG9zc2libGVFdmVudE1lc3NhZ2VzIH0gZnJvbSAnLi91dGlscy9ldmVudFV0aWxzLmpzJztcbmltcG9ydCB7IGlzUHJpbWl0aXZlLCBpc1BhcmFtZXRlcml6ZWRTdHJpbmcsIGlzVGhlbmFibGUsIGlzUGxhaW5PYmplY3QgfSBmcm9tICcuL3V0aWxzL2lzLmpzJztcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAnLi91dGlscy9tZXJnZS5qcyc7XG5pbXBvcnQgeyB1dWlkNCwgY2hlY2tPclNldEFscmVhZHlDYXVnaHQgfSBmcm9tICcuL3V0aWxzL21pc2MuanMnO1xuaW1wb3J0IHsgcGFyc2VTYW1wbGVSYXRlIH0gZnJvbSAnLi91dGlscy9wYXJzZVNhbXBsZVJhdGUuanMnO1xuaW1wb3J0IHsgcHJlcGFyZUV2ZW50IH0gZnJvbSAnLi91dGlscy9wcmVwYXJlRXZlbnQuanMnO1xuaW1wb3J0IHsgc2hvd1NwYW5Ecm9wV2FybmluZywgZ2V0QWN0aXZlU3Bhbiwgc3BhblRvVHJhY2VDb250ZXh0IH0gZnJvbSAnLi91dGlscy9zcGFuVXRpbHMuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZWRTeW5jUHJvbWlzZSwgU3luY1Byb21pc2UsIHJlamVjdGVkU3luY1Byb21pc2UgfSBmcm9tICcuL3V0aWxzL3N5bmNwcm9taXNlLmpzJztcbmltcG9ydCB7IGNvbnZlcnRUcmFuc2FjdGlvbkV2ZW50VG9TcGFuSnNvbiwgY29udmVydFNwYW5Kc29uVG9UcmFuc2FjdGlvbkV2ZW50IH0gZnJvbSAnLi91dGlscy90cmFuc2FjdGlvbkV2ZW50LmpzJztcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxpbmVzICovXG5cbmNvbnN0IEFMUkVBRFlfU0VFTl9FUlJPUiA9IFwiTm90IGNhcHR1cmluZyBleGNlcHRpb24gYmVjYXVzZSBpdCdzIGFscmVhZHkgYmVlbiBjYXB0dXJlZC5cIjtcbmNvbnN0IE1JU1NJTkdfUkVMRUFTRV9GT1JfU0VTU0lPTl9FUlJPUiA9ICdEaXNjYXJkZWQgc2Vzc2lvbiBiZWNhdXNlIG9mIG1pc3Npbmcgb3Igbm9uLXN0cmluZyByZWxlYXNlJztcblxuY29uc3QgSU5URVJOQUxfRVJST1JfU1lNQk9MID0gU3ltYm9sLmZvcignU2VudHJ5SW50ZXJuYWxFcnJvcicpO1xuY29uc3QgRE9fTk9UX1NFTkRfRVZFTlRfU1lNQk9MID0gU3ltYm9sLmZvcignU2VudHJ5RG9Ob3RTZW5kRXZlbnRFcnJvcicpO1xuXG5mdW5jdGlvbiBfbWFrZUludGVybmFsRXJyb3IobWVzc2FnZSkge1xuICByZXR1cm4ge1xuICAgIG1lc3NhZ2UsXG4gICAgW0lOVEVSTkFMX0VSUk9SX1NZTUJPTF06IHRydWUsXG4gIH07XG59XG5cbmZ1bmN0aW9uIF9tYWtlRG9Ob3RTZW5kRXZlbnRFcnJvcihtZXNzYWdlKSB7XG4gIHJldHVybiB7XG4gICAgbWVzc2FnZSxcbiAgICBbRE9fTk9UX1NFTkRfRVZFTlRfU1lNQk9MXTogdHJ1ZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gX2lzSW50ZXJuYWxFcnJvcihlcnJvcikge1xuICByZXR1cm4gISFlcnJvciAmJiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmIElOVEVSTkFMX0VSUk9SX1NZTUJPTCBpbiBlcnJvcjtcbn1cblxuZnVuY3Rpb24gX2lzRG9Ob3RTZW5kRXZlbnRFcnJvcihlcnJvcikge1xuICByZXR1cm4gISFlcnJvciAmJiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmIERPX05PVF9TRU5EX0VWRU5UX1NZTUJPTCBpbiBlcnJvcjtcbn1cblxuLyoqXG4gKiBCYXNlIGltcGxlbWVudGF0aW9uIGZvciBhbGwgSmF2YVNjcmlwdCBTREsgY2xpZW50cy5cbiAqXG4gKiBDYWxsIHRoZSBjb25zdHJ1Y3RvciB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIG9wdGlvbnNcbiAqIHNwZWNpZmljIHRvIHRoZSBjbGllbnQgc3ViY2xhc3MuIFRvIGFjY2VzcyB0aGVzZSBvcHRpb25zIGxhdGVyLCB1c2VcbiAqIHtAbGluayBDbGllbnQuZ2V0T3B0aW9uc30uXG4gKlxuICogSWYgYSBEc24gaXMgc3BlY2lmaWVkIGluIHRoZSBvcHRpb25zLCBpdCB3aWxsIGJlIHBhcnNlZCBhbmQgc3RvcmVkLiBVc2VcbiAqIHtAbGluayBDbGllbnQuZ2V0RHNufSB0byByZXRyaWV2ZSB0aGUgRHNuIGF0IGFueSBtb21lbnQuIEluIGNhc2UgdGhlIERzbiBpc1xuICogaW52YWxpZCwgdGhlIGNvbnN0cnVjdG9yIHdpbGwgdGhyb3cgYSB7QGxpbmsgU2VudHJ5RXhjZXB0aW9ufS4gTm90ZSB0aGF0XG4gKiB3aXRob3V0IGEgdmFsaWQgRHNuLCB0aGUgU0RLIHdpbGwgbm90IHNlbmQgYW55IGV2ZW50cyB0byBTZW50cnkuXG4gKlxuICogQmVmb3JlIHNlbmRpbmcgYW4gZXZlbnQsIGl0IGlzIHBhc3NlZCB0aHJvdWdoXG4gKiB7QGxpbmsgQ2xpZW50Ll9wcmVwYXJlRXZlbnR9IHRvIGFkZCBTREsgaW5mb3JtYXRpb24gYW5kIHNjb3BlIGRhdGFcbiAqIChicmVhZGNydW1icyBhbmQgY29udGV4dCkuIFRvIGFkZCBtb3JlIGN1c3RvbSBpbmZvcm1hdGlvbiwgb3ZlcnJpZGUgdGhpc1xuICogbWV0aG9kIGFuZCBleHRlbmQgdGhlIHJlc3VsdGluZyBwcmVwYXJlZCBldmVudC5cbiAqXG4gKiBUbyBpc3N1ZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZXZlbnRzIChlLmcuIHZpYSBpbnN0cnVtZW50YXRpb24pLCB1c2VcbiAqIHtAbGluayBDbGllbnQuY2FwdHVyZUV2ZW50fS4gSXQgd2lsbCBwcmVwYXJlIHRoZSBldmVudCBhbmQgcGFzcyBpdCB0aHJvdWdoXG4gKiB0aGUgY2FsbGJhY2sgbGlmZWN5Y2xlLiBUbyBpc3N1ZSBhdXRvLWJyZWFkY3J1bWJzLCB1c2VcbiAqIHtAbGluayBDbGllbnQuYWRkQnJlYWRjcnVtYn0uXG4gKlxuICogQGV4YW1wbGVcbiAqIGNsYXNzIE5vZGVDbGllbnQgZXh0ZW5kcyBDbGllbnQ8Tm9kZU9wdGlvbnM+IHtcbiAqICAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE5vZGVPcHRpb25zKSB7XG4gKiAgICAgc3VwZXIob3B0aW9ucyk7XG4gKiAgIH1cbiAqXG4gKiAgIC8vIC4uLlxuICogfVxuICovXG5jbGFzcyBDbGllbnQge1xuICAvKiogT3B0aW9ucyBwYXNzZWQgdG8gdGhlIFNESy4gKi9cblxuICAvKiogVGhlIGNsaWVudCBEc24sIGlmIHNwZWNpZmllZCBpbiBvcHRpb25zLiBXaXRob3V0IHRoaXMgRHNuLCB0aGUgU0RLIHdpbGwgYmUgZGlzYWJsZWQuICovXG5cbiAgLyoqIEFycmF5IG9mIHNldCB1cCBpbnRlZ3JhdGlvbnMuICovXG5cbiAgLyoqIE51bWJlciBvZiBjYWxscyBiZWluZyBwcm9jZXNzZWQgKi9cblxuICAvKiogSG9sZHMgZmx1c2hhYmxlICAqL1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoaXMgY2xpZW50IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgY2xpZW50LlxuICAgKi9cbiAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLl9pbnRlZ3JhdGlvbnMgPSB7fTtcbiAgICB0aGlzLl9udW1Qcm9jZXNzaW5nID0gMDtcbiAgICB0aGlzLl9vdXRjb21lcyA9IHt9O1xuICAgIHRoaXMuX2hvb2tzID0ge307XG4gICAgdGhpcy5fZXZlbnRQcm9jZXNzb3JzID0gW107XG5cbiAgICBpZiAob3B0aW9ucy5kc24pIHtcbiAgICAgIHRoaXMuX2RzbiA9IG1ha2VEc24ob3B0aW9ucy5kc24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy53YXJuKCdObyBEU04gcHJvdmlkZWQsIGNsaWVudCB3aWxsIG5vdCBzZW5kIGV2ZW50cy4nKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZHNuKSB7XG4gICAgICBjb25zdCB1cmwgPSBnZXRFbnZlbG9wZUVuZHBvaW50V2l0aFVybEVuY29kZWRBdXRoKFxuICAgICAgICB0aGlzLl9kc24sXG4gICAgICAgIG9wdGlvbnMudHVubmVsLFxuICAgICAgICBvcHRpb25zLl9tZXRhZGF0YSA/IG9wdGlvbnMuX21ldGFkYXRhLnNkayA6IHVuZGVmaW5lZCxcbiAgICAgICk7XG4gICAgICB0aGlzLl90cmFuc3BvcnQgPSBvcHRpb25zLnRyYW5zcG9ydCh7XG4gICAgICAgIHR1bm5lbDogdGhpcy5fb3B0aW9ucy50dW5uZWwsXG4gICAgICAgIHJlY29yZERyb3BwZWRFdmVudDogdGhpcy5yZWNvcmREcm9wcGVkRXZlbnQuYmluZCh0aGlzKSxcbiAgICAgICAgLi4ub3B0aW9ucy50cmFuc3BvcnRPcHRpb25zLFxuICAgICAgICB1cmwsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyZXMgYW4gZXhjZXB0aW9uIGV2ZW50IGFuZCBzZW5kcyBpdCB0byBTZW50cnkuXG4gICAqXG4gICAqIFVubGlrZSBgY2FwdHVyZUV4Y2VwdGlvbmAgZXhwb3J0ZWQgZnJvbSBldmVyeSBTREssIHRoaXMgbWV0aG9kIHJlcXVpcmVzIHRoYXQgeW91IHBhc3MgaXQgdGhlIGN1cnJlbnQgc2NvcGUuXG4gICAqL1xuICAgY2FwdHVyZUV4Y2VwdGlvbihleGNlcHRpb24sIGhpbnQsIHNjb3BlKSB7XG4gICAgY29uc3QgZXZlbnRJZCA9IHV1aWQ0KCk7XG5cbiAgICAvLyBlbnN1cmUgd2UgaGF2ZW4ndCBjYXB0dXJlZCB0aGlzIHZlcnkgb2JqZWN0IGJlZm9yZVxuICAgIGlmIChjaGVja09yU2V0QWxyZWFkeUNhdWdodChleGNlcHRpb24pKSB7XG4gICAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5sb2coQUxSRUFEWV9TRUVOX0VSUk9SKTtcbiAgICAgIHJldHVybiBldmVudElkO1xuICAgIH1cblxuICAgIGNvbnN0IGhpbnRXaXRoRXZlbnRJZCA9IHtcbiAgICAgIGV2ZW50X2lkOiBldmVudElkLFxuICAgICAgLi4uaGludCxcbiAgICB9O1xuXG4gICAgdGhpcy5fcHJvY2VzcyhcbiAgICAgIHRoaXMuZXZlbnRGcm9tRXhjZXB0aW9uKGV4Y2VwdGlvbiwgaGludFdpdGhFdmVudElkKS50aGVuKGV2ZW50ID0+XG4gICAgICAgIHRoaXMuX2NhcHR1cmVFdmVudChldmVudCwgaGludFdpdGhFdmVudElkLCBzY29wZSksXG4gICAgICApLFxuICAgICk7XG5cbiAgICByZXR1cm4gaGludFdpdGhFdmVudElkLmV2ZW50X2lkO1xuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmVzIGEgbWVzc2FnZSBldmVudCBhbmQgc2VuZHMgaXQgdG8gU2VudHJ5LlxuICAgKlxuICAgKiBVbmxpa2UgYGNhcHR1cmVNZXNzYWdlYCBleHBvcnRlZCBmcm9tIGV2ZXJ5IFNESywgdGhpcyBtZXRob2QgcmVxdWlyZXMgdGhhdCB5b3UgcGFzcyBpdCB0aGUgY3VycmVudCBzY29wZS5cbiAgICovXG4gICBjYXB0dXJlTWVzc2FnZShcbiAgICBtZXNzYWdlLFxuICAgIGxldmVsLFxuICAgIGhpbnQsXG4gICAgY3VycmVudFNjb3BlLFxuICApIHtcbiAgICBjb25zdCBoaW50V2l0aEV2ZW50SWQgPSB7XG4gICAgICBldmVudF9pZDogdXVpZDQoKSxcbiAgICAgIC4uLmhpbnQsXG4gICAgfTtcblxuICAgIGNvbnN0IGV2ZW50TWVzc2FnZSA9IGlzUGFyYW1ldGVyaXplZFN0cmluZyhtZXNzYWdlKSA/IG1lc3NhZ2UgOiBTdHJpbmcobWVzc2FnZSk7XG5cbiAgICBjb25zdCBwcm9taXNlZEV2ZW50ID0gaXNQcmltaXRpdmUobWVzc2FnZSlcbiAgICAgID8gdGhpcy5ldmVudEZyb21NZXNzYWdlKGV2ZW50TWVzc2FnZSwgbGV2ZWwsIGhpbnRXaXRoRXZlbnRJZClcbiAgICAgIDogdGhpcy5ldmVudEZyb21FeGNlcHRpb24obWVzc2FnZSwgaGludFdpdGhFdmVudElkKTtcblxuICAgIHRoaXMuX3Byb2Nlc3MocHJvbWlzZWRFdmVudC50aGVuKGV2ZW50ID0+IHRoaXMuX2NhcHR1cmVFdmVudChldmVudCwgaGludFdpdGhFdmVudElkLCBjdXJyZW50U2NvcGUpKSk7XG5cbiAgICByZXR1cm4gaGludFdpdGhFdmVudElkLmV2ZW50X2lkO1xuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmVzIGEgbWFudWFsbHkgY3JlYXRlZCBldmVudCBhbmQgc2VuZHMgaXQgdG8gU2VudHJ5LlxuICAgKlxuICAgKiBVbmxpa2UgYGNhcHR1cmVFdmVudGAgZXhwb3J0ZWQgZnJvbSBldmVyeSBTREssIHRoaXMgbWV0aG9kIHJlcXVpcmVzIHRoYXQgeW91IHBhc3MgaXQgdGhlIGN1cnJlbnQgc2NvcGUuXG4gICAqL1xuICAgY2FwdHVyZUV2ZW50KGV2ZW50LCBoaW50LCBjdXJyZW50U2NvcGUpIHtcbiAgICBjb25zdCBldmVudElkID0gdXVpZDQoKTtcblxuICAgIC8vIGVuc3VyZSB3ZSBoYXZlbid0IGNhcHR1cmVkIHRoaXMgdmVyeSBvYmplY3QgYmVmb3JlXG4gICAgaWYgKGhpbnQ/Lm9yaWdpbmFsRXhjZXB0aW9uICYmIGNoZWNrT3JTZXRBbHJlYWR5Q2F1Z2h0KGhpbnQub3JpZ2luYWxFeGNlcHRpb24pKSB7XG4gICAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5sb2coQUxSRUFEWV9TRUVOX0VSUk9SKTtcbiAgICAgIHJldHVybiBldmVudElkO1xuICAgIH1cblxuICAgIGNvbnN0IGhpbnRXaXRoRXZlbnRJZCA9IHtcbiAgICAgIGV2ZW50X2lkOiBldmVudElkLFxuICAgICAgLi4uaGludCxcbiAgICB9O1xuXG4gICAgY29uc3Qgc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0gZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhIHx8IHt9O1xuICAgIGNvbnN0IGNhcHR1cmVkU3BhblNjb3BlID0gc2RrUHJvY2Vzc2luZ01ldGFkYXRhLmNhcHR1cmVkU3BhblNjb3BlO1xuICAgIGNvbnN0IGNhcHR1cmVkU3Bhbklzb2xhdGlvblNjb3BlID0gc2RrUHJvY2Vzc2luZ01ldGFkYXRhLmNhcHR1cmVkU3Bhbklzb2xhdGlvblNjb3BlO1xuXG4gICAgdGhpcy5fcHJvY2VzcyhcbiAgICAgIHRoaXMuX2NhcHR1cmVFdmVudChldmVudCwgaGludFdpdGhFdmVudElkLCBjYXB0dXJlZFNwYW5TY29wZSB8fCBjdXJyZW50U2NvcGUsIGNhcHR1cmVkU3Bhbklzb2xhdGlvblNjb3BlKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGhpbnRXaXRoRXZlbnRJZC5ldmVudF9pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXB0dXJlcyBhIHNlc3Npb24uXG4gICAqL1xuICAgY2FwdHVyZVNlc3Npb24oc2Vzc2lvbikge1xuICAgIHRoaXMuc2VuZFNlc3Npb24oc2Vzc2lvbik7XG4gICAgLy8gQWZ0ZXIgc2VuZGluZywgd2Ugc2V0IGluaXQgZmFsc2UgdG8gaW5kaWNhdGUgaXQncyBub3QgdGhlIGZpcnN0IG9jY3VycmVuY2VcbiAgICB1cGRhdGVTZXNzaW9uKHNlc3Npb24sIHsgaW5pdDogZmFsc2UgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3JvbiBtb25pdG9yIGNoZWNrIGluIGFuZCBzZW5kIGl0IHRvIFNlbnRyeS4gVGhpcyBtZXRob2QgaXMgbm90IGF2YWlsYWJsZSBvbiBhbGwgY2xpZW50cy5cbiAgICpcbiAgICogQHBhcmFtIGNoZWNrSW4gQW4gb2JqZWN0IHRoYXQgZGVzY3JpYmVzIGEgY2hlY2sgaW4uXG4gICAqIEBwYXJhbSB1cHNlcnRNb25pdG9yQ29uZmlnIEFuIG9wdGlvbmFsIG9iamVjdCB0aGF0IGRlc2NyaWJlcyBhIG1vbml0b3IgY29uZmlnLiBVc2UgdGhpcyBpZiB5b3Ugd2FudFxuICAgKiB0byBjcmVhdGUgYSBtb25pdG9yIGF1dG9tYXRpY2FsbHkgd2hlbiBzZW5kaW5nIGEgY2hlY2sgaW4uXG4gICAqIEBwYXJhbSBzY29wZSBBbiBvcHRpb25hbCBzY29wZSBjb250YWluaW5nIGV2ZW50IG1ldGFkYXRhLlxuICAgKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGlkIG9mIHRoZSBjaGVjayBpbi5cbiAgICovXG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBEc24uXG4gICAqL1xuICAgZ2V0RHNuKCkge1xuICAgIHJldHVybiB0aGlzLl9kc247XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IG9wdGlvbnMuXG4gICAqL1xuICAgZ2V0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIFNESyBtZXRhZGF0YS5cbiAgICogQHNlZSBTZGtNZXRhZGF0YVxuICAgKi9cbiAgIGdldFNka01ldGFkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zLl9tZXRhZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0cmFuc3BvcnQgdGhhdCBpcyB1c2VkIGJ5IHRoZSBjbGllbnQuXG4gICAqIFBsZWFzZSBub3RlIHRoYXQgdGhlIHRyYW5zcG9ydCBnZXRzIGxhenkgaW5pdGlhbGl6ZWQgc28gaXQgd2lsbCBvbmx5IGJlIHRoZXJlIG9uY2UgdGhlIGZpcnN0IGV2ZW50IGhhcyBiZWVuIHNlbnQuXG4gICAqL1xuICAgZ2V0VHJhbnNwb3J0KCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQ7XG4gIH1cblxuICAvKipcbiAgICogV2FpdCBmb3IgYWxsIGV2ZW50cyB0byBiZSBzZW50IG9yIHRoZSB0aW1lb3V0IHRvIGV4cGlyZSwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LlxuICAgKlxuICAgKiBAcGFyYW0gdGltZW91dCBNYXhpbXVtIHRpbWUgaW4gbXMgdGhlIGNsaWVudCBzaG91bGQgd2FpdCBmb3IgZXZlbnRzIHRvIGJlIGZsdXNoZWQuIE9taXR0aW5nIHRoaXMgcGFyYW1ldGVyIHdpbGxcbiAgICogICBjYXVzZSB0aGUgY2xpZW50IHRvIHdhaXQgdW50aWwgYWxsIGV2ZW50cyBhcmUgc2VudCBiZWZvcmUgcmVzb2x2aW5nIHRoZSBwcm9taXNlLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgd2l0aCBgdHJ1ZWAgaWYgYWxsIGV2ZW50cyBhcmUgc2VudCBiZWZvcmUgdGhlIHRpbWVvdXQsIG9yIGBmYWxzZWAgaWYgdGhlcmUgYXJlXG4gICAqIHN0aWxsIGV2ZW50cyBpbiB0aGUgcXVldWUgd2hlbiB0aGUgdGltZW91dCBpcyByZWFjaGVkLlxuICAgKi9cbiAgIGZsdXNoKHRpbWVvdXQpIHtcbiAgICBjb25zdCB0cmFuc3BvcnQgPSB0aGlzLl90cmFuc3BvcnQ7XG4gICAgaWYgKHRyYW5zcG9ydCkge1xuICAgICAgdGhpcy5lbWl0KCdmbHVzaCcpO1xuICAgICAgcmV0dXJuIHRoaXMuX2lzQ2xpZW50RG9uZVByb2Nlc3NpbmcodGltZW91dCkudGhlbihjbGllbnRGaW5pc2hlZCA9PiB7XG4gICAgICAgIHJldHVybiB0cmFuc3BvcnQuZmx1c2godGltZW91dCkudGhlbih0cmFuc3BvcnRGbHVzaGVkID0+IGNsaWVudEZpbmlzaGVkICYmIHRyYW5zcG9ydEZsdXNoZWQpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXNvbHZlZFN5bmNQcm9taXNlKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVzaCB0aGUgZXZlbnQgcXVldWUgYW5kIHNldCB0aGUgY2xpZW50IHRvIGBlbmFibGVkID0gZmFsc2VgLiBTZWUge0BsaW5rIENsaWVudC5mbHVzaH0uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0IE1heGltdW0gdGltZSBpbiBtcyB0aGUgY2xpZW50IHNob3VsZCB3YWl0IGJlZm9yZSBzaHV0dGluZyBkb3duLiBPbWl0dGluZyB0aGlzIHBhcmFtZXRlciB3aWxsIGNhdXNlXG4gICAqICAgdGhlIGNsaWVudCB0byB3YWl0IHVudGlsIGFsbCBldmVudHMgYXJlIHNlbnQgYmVmb3JlIGRpc2FibGluZyBpdHNlbGYuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgdG8gYHRydWVgIGlmIHRoZSBmbHVzaCBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IGJlZm9yZSB0aGUgdGltZW91dCwgb3IgYGZhbHNlYCBpZlxuICAgKiBpdCBkb2Vzbid0LlxuICAgKi9cbiAgIGNsb3NlKHRpbWVvdXQpIHtcbiAgICByZXR1cm4gdGhpcy5mbHVzaCh0aW1lb3V0KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICB0aGlzLmdldE9wdGlvbnMoKS5lbmFibGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmVtaXQoJ2Nsb3NlJyk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgaW5zdGFsbGVkIGV2ZW50IHByb2Nlc3NvcnMuXG4gICAqL1xuICAgZ2V0RXZlbnRQcm9jZXNzb3JzKCkge1xuICAgIHJldHVybiB0aGlzLl9ldmVudFByb2Nlc3NvcnM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBldmVudCBwcm9jZXNzb3IgdGhhdCBhcHBsaWVzIHRvIGFueSBldmVudCBwcm9jZXNzZWQgYnkgdGhpcyBjbGllbnQuXG4gICAqL1xuICAgYWRkRXZlbnRQcm9jZXNzb3IoZXZlbnRQcm9jZXNzb3IpIHtcbiAgICB0aGlzLl9ldmVudFByb2Nlc3NvcnMucHVzaChldmVudFByb2Nlc3Nvcik7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGlzIGNsaWVudC5cbiAgICogQ2FsbCB0aGlzIGFmdGVyIHRoZSBjbGllbnQgd2FzIHNldCBvbiBhIHNjb3BlLlxuICAgKi9cbiAgIGluaXQoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5faXNFbmFibGVkKCkgfHxcbiAgICAgIC8vIEZvcmNlIGludGVncmF0aW9ucyB0byBiZSBzZXR1cCBldmVuIGlmIG5vIERTTiB3YXMgc2V0IHdoZW4gd2UgaGF2ZVxuICAgICAgLy8gU3BvdGxpZ2h0IGVuYWJsZWQuIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBmb3IgYnJvd3NlciBhcyB3ZVxuICAgICAgLy8gZG9uJ3Qgc3VwcG9ydCB0aGUgYHNwb3RsaWdodGAgb3B0aW9uIHRoZXJlIGFuZCByZWx5IG9uIHRoZSB1c2Vyc1xuICAgICAgLy8gYWRkaW5nIHRoZSBgc3BvdGxpZ2h0QnJvd3NlckludGVncmF0aW9uKClgIHRvIHRoZWlyIGludGVncmF0aW9ucyB3aGljaFxuICAgICAgLy8gd291bGRuJ3QgZ2V0IGluaXRpYWxpemVkIHdpdGggdGhlIGNoZWNrIGJlbG93IHdoZW4gdGhlcmUncyBubyBEU04gc2V0LlxuICAgICAgdGhpcy5fb3B0aW9ucy5pbnRlZ3JhdGlvbnMuc29tZSgoeyBuYW1lIH0pID0+IG5hbWUuc3RhcnRzV2l0aCgnU3BvdGxpZ2h0JykpXG4gICAgKSB7XG4gICAgICB0aGlzLl9zZXR1cEludGVncmF0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuIGluc3RhbGxlZCBpbnRlZ3JhdGlvbiBieSBpdHMgbmFtZS5cbiAgICpcbiAgICogQHJldHVybnMge0ludGVncmF0aW9ufHVuZGVmaW5lZH0gVGhlIGluc3RhbGxlZCBpbnRlZ3JhdGlvbiBvciBgdW5kZWZpbmVkYCBpZiBubyBpbnRlZ3JhdGlvbiB3aXRoIHRoYXQgYG5hbWVgIHdhcyBpbnN0YWxsZWQuXG4gICAqL1xuICAgZ2V0SW50ZWdyYXRpb25CeU5hbWUoaW50ZWdyYXRpb25OYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVncmF0aW9uc1tpbnRlZ3JhdGlvbk5hbWVdIDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gaW50ZWdyYXRpb24gdG8gdGhlIGNsaWVudC5cbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBlLmcuIGxhenkgbG9hZCBpbnRlZ3JhdGlvbnMuXG4gICAqIEluIG1vc3QgY2FzZXMsIHRoaXMgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnksXG4gICAqIGFuZCB5b3UncmUgYmV0dGVyIG9mZiBqdXN0IHBhc3NpbmcgdGhlIGludGVncmF0aW9ucyB2aWEgYGludGVncmF0aW9uczogW11gIGF0IGluaXRpYWxpemF0aW9uIHRpbWUuXG4gICAqIEhvd2V2ZXIsIGlmIHlvdSBmaW5kIHRoZSBuZWVkIHRvIGNvbmRpdGlvbmFsbHkgbG9hZCAmIGFkZCBhbiBpbnRlZ3JhdGlvbiwgeW91IGNhbiB1c2UgYGFkZEludGVncmF0aW9uYCB0byBkbyBzby5cbiAgICovXG4gICBhZGRJbnRlZ3JhdGlvbihpbnRlZ3JhdGlvbikge1xuICAgIGNvbnN0IGlzQWxyZWFkeUluc3RhbGxlZCA9IHRoaXMuX2ludGVncmF0aW9uc1tpbnRlZ3JhdGlvbi5uYW1lXTtcblxuICAgIC8vIFRoaXMgaG9vayB0YWtlcyBjYXJlIG9mIG9ubHkgaW5zdGFsbGluZyBpZiBub3QgYWxyZWFkeSBpbnN0YWxsZWRcbiAgICBzZXR1cEludGVncmF0aW9uKHRoaXMsIGludGVncmF0aW9uLCB0aGlzLl9pbnRlZ3JhdGlvbnMpO1xuICAgIC8vIEhlcmUgd2UgbmVlZCB0byBjaGVjayBtYW51YWxseSB0byBtYWtlIHN1cmUgdG8gbm90IHJ1biB0aGlzIG11bHRpcGxlIHRpbWVzXG4gICAgaWYgKCFpc0FscmVhZHlJbnN0YWxsZWQpIHtcbiAgICAgIGFmdGVyU2V0dXBJbnRlZ3JhdGlvbnModGhpcywgW2ludGVncmF0aW9uXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBmdWxseSBwcmVwYXJlZCBldmVudCB0byBTZW50cnkuXG4gICAqL1xuICAgc2VuZEV2ZW50KGV2ZW50LCBoaW50ID0ge30pIHtcbiAgICB0aGlzLmVtaXQoJ2JlZm9yZVNlbmRFdmVudCcsIGV2ZW50LCBoaW50KTtcblxuICAgIGxldCBlbnYgPSBjcmVhdGVFdmVudEVudmVsb3BlKGV2ZW50LCB0aGlzLl9kc24sIHRoaXMuX29wdGlvbnMuX21ldGFkYXRhLCB0aGlzLl9vcHRpb25zLnR1bm5lbCk7XG5cbiAgICBmb3IgKGNvbnN0IGF0dGFjaG1lbnQgb2YgaGludC5hdHRhY2htZW50cyB8fCBbXSkge1xuICAgICAgZW52ID0gYWRkSXRlbVRvRW52ZWxvcGUoZW52LCBjcmVhdGVBdHRhY2htZW50RW52ZWxvcGVJdGVtKGF0dGFjaG1lbnQpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9taXNlID0gdGhpcy5zZW5kRW52ZWxvcGUoZW52KTtcbiAgICBpZiAocHJvbWlzZSkge1xuICAgICAgcHJvbWlzZS50aGVuKHNlbmRSZXNwb25zZSA9PiB0aGlzLmVtaXQoJ2FmdGVyU2VuZEV2ZW50JywgZXZlbnQsIHNlbmRSZXNwb25zZSksIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgc2Vzc2lvbiBvciBzZXNzaW9uIGFnZ3JlZ3JhdGVzIHRvIFNlbnRyeS5cbiAgICovXG4gICBzZW5kU2Vzc2lvbihzZXNzaW9uKSB7XG4gICAgLy8gQmFja2ZpbGwgcmVsZWFzZSBhbmQgZW52aXJvbm1lbnQgb24gc2Vzc2lvblxuICAgIGNvbnN0IHsgcmVsZWFzZTogY2xpZW50UmVsZWFzZU9wdGlvbiwgZW52aXJvbm1lbnQ6IGNsaWVudEVudmlyb25tZW50T3B0aW9uID0gREVGQVVMVF9FTlZJUk9OTUVOVCB9ID0gdGhpcy5fb3B0aW9ucztcbiAgICBpZiAoJ2FnZ3JlZ2F0ZXMnIGluIHNlc3Npb24pIHtcbiAgICAgIGNvbnN0IHNlc3Npb25BdHRycyA9IHNlc3Npb24uYXR0cnMgfHwge307XG4gICAgICBpZiAoIXNlc3Npb25BdHRycy5yZWxlYXNlICYmICFjbGllbnRSZWxlYXNlT3B0aW9uKSB7XG4gICAgICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLndhcm4oTUlTU0lOR19SRUxFQVNFX0ZPUl9TRVNTSU9OX0VSUk9SKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2Vzc2lvbkF0dHJzLnJlbGVhc2UgPSBzZXNzaW9uQXR0cnMucmVsZWFzZSB8fCBjbGllbnRSZWxlYXNlT3B0aW9uO1xuICAgICAgc2Vzc2lvbkF0dHJzLmVudmlyb25tZW50ID0gc2Vzc2lvbkF0dHJzLmVudmlyb25tZW50IHx8IGNsaWVudEVudmlyb25tZW50T3B0aW9uO1xuICAgICAgc2Vzc2lvbi5hdHRycyA9IHNlc3Npb25BdHRycztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFzZXNzaW9uLnJlbGVhc2UgJiYgIWNsaWVudFJlbGVhc2VPcHRpb24pIHtcbiAgICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcud2FybihNSVNTSU5HX1JFTEVBU0VfRk9SX1NFU1NJT05fRVJST1IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXNzaW9uLnJlbGVhc2UgPSBzZXNzaW9uLnJlbGVhc2UgfHwgY2xpZW50UmVsZWFzZU9wdGlvbjtcbiAgICAgIHNlc3Npb24uZW52aXJvbm1lbnQgPSBzZXNzaW9uLmVudmlyb25tZW50IHx8IGNsaWVudEVudmlyb25tZW50T3B0aW9uO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdCgnYmVmb3JlU2VuZFNlc3Npb24nLCBzZXNzaW9uKTtcblxuICAgIGNvbnN0IGVudiA9IGNyZWF0ZVNlc3Npb25FbnZlbG9wZShzZXNzaW9uLCB0aGlzLl9kc24sIHRoaXMuX29wdGlvbnMuX21ldGFkYXRhLCB0aGlzLl9vcHRpb25zLnR1bm5lbCk7XG5cbiAgICAvLyBzZW5kRW52ZWxvcGUgc2hvdWxkIG5vdCB0aHJvd1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICB0aGlzLnNlbmRFbnZlbG9wZShlbnYpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCBvbiB0aGUgY2xpZW50IHRoYXQgYW4gZXZlbnQgZ290IGRyb3BwZWQgKGllLCBhbiBldmVudCB0aGF0IHdpbGwgbm90IGJlIHNlbnQgdG8gU2VudHJ5KS5cbiAgICovXG4gICByZWNvcmREcm9wcGVkRXZlbnQocmVhc29uLCBjYXRlZ29yeSwgY291bnQgPSAxKSB7XG4gICAgaWYgKHRoaXMuX29wdGlvbnMuc2VuZENsaWVudFJlcG9ydHMpIHtcbiAgICAgIC8vIFdlIHdhbnQgdG8gdHJhY2sgZWFjaCBjYXRlZ29yeSAoZXJyb3IsIHRyYW5zYWN0aW9uLCBzZXNzaW9uLCByZXBsYXlfZXZlbnQpIHNlcGFyYXRlbHlcbiAgICAgIC8vIGJ1dCBzdGlsbCBrZWVwIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGRpZmZlcmVudCB0eXBlIG9mIG91dGNvbWVzLlxuICAgICAgLy8gV2UgY291bGQgdXNlIG5lc3RlZCBtYXBzLCBidXQgaXQncyBtdWNoIGVhc2llciB0byByZWFkIGFuZCB0eXBlIHRoaXMgd2F5LlxuICAgICAgLy8gQSBjb3JyZWN0IHR5cGUgZm9yIG1hcC1iYXNlZCBpbXBsZW1lbnRhdGlvbiBpZiB3ZSB3YW50IHRvIGdvIHRoYXQgcm91dGVcbiAgICAgIC8vIHdvdWxkIGJlIGBQYXJ0aWFsPFJlY29yZDxTZW50cnlSZXF1ZXN0VHlwZSwgUGFydGlhbDxSZWNvcmQ8T3V0Y29tZSwgbnVtYmVyPj4+PmBcbiAgICAgIC8vIFdpdGggdHlwZXNjcmlwdCA0LjEgd2UgY291bGQgZXZlbiB1c2UgdGVtcGxhdGUgbGl0ZXJhbCB0eXBlc1xuICAgICAgY29uc3Qga2V5ID0gYCR7cmVhc29ufToke2NhdGVnb3J5fWA7XG4gICAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5sb2coYFJlY29yZGluZyBvdXRjb21lOiBcIiR7a2V5fVwiJHtjb3VudCA+IDEgPyBgICgke2NvdW50fSB0aW1lcylgIDogJyd9YCk7XG4gICAgICB0aGlzLl9vdXRjb21lc1trZXldID0gKHRoaXMuX291dGNvbWVzW2tleV0gfHwgMCkgKyBjb3VudDtcbiAgICB9XG4gIH1cblxuICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5pZmllZC1zaWduYXR1cmVzICovXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGNhbGxiYWNrIGZvciB3aGVuZXZlciBhIHNwYW4gaXMgc3RhcnRlZC5cbiAgICogUmVjZWl2ZXMgdGhlIHNwYW4gYXMgYXJndW1lbnQuXG4gICAqIEByZXR1cm5zIHsoKSA9PiB2b2lkfSBBIGZ1bmN0aW9uIHRoYXQsIHdoZW4gZXhlY3V0ZWQsIHJlbW92ZXMgdGhlIHJlZ2lzdGVyZWQgY2FsbGJhY2suXG4gICAqL1xuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGhvb2sgb24gdGhpcyBjbGllbnQuXG4gICAqL1xuICAgb24oaG9vaywgY2FsbGJhY2spIHtcbiAgICBjb25zdCBob29rcyA9ICh0aGlzLl9ob29rc1tob29rXSA9IHRoaXMuX2hvb2tzW2hvb2tdIHx8IFtdKTtcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgV2UgYXNzdW1lIHRoZSB0eXBlcyBhcmUgY29ycmVjdFxuICAgIGhvb2tzLnB1c2goY2FsbGJhY2spO1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgY2FsbGJhY2sgZXhlY3V0aW9uIGhhbmRsZXIgdGhhdCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIGRlcmVnaXN0ZXJzIGEgY2FsbGJhY2suIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFuYWdpbmcgaW5zdGFuY2VzIHdoZXJlIGNhbGxiYWNrc1xuICAgIC8vIG5lZWQgdG8gYmUgdW5yZWdpc3RlcmVkIHRvIHByZXZlbnQgc2VsZi1yZWZlcmVuY2luZyBpbiBjYWxsYmFjayBjbG9zdXJlcyxcbiAgICAvLyBlbnN1cmluZyBwcm9wZXIgZ2FyYmFnZSBjb2xsZWN0aW9uLlxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFdlIGFzc3VtZSB0aGUgdHlwZXMgYXJlIGNvcnJlY3RcbiAgICAgIGNvbnN0IGNiSW5kZXggPSBob29rcy5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgIGlmIChjYkluZGV4ID4gLTEpIHtcbiAgICAgICAgaG9va3Muc3BsaWNlKGNiSW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKiogRmlyZSBhIGhvb2sgd2hlbmV2ZXIgYSBzcGFuIHN0YXJ0cy4gKi9cblxuICAvKipcbiAgICogRW1pdCBhIGhvb2sgdGhhdCB3YXMgcHJldmlvdXNseSByZWdpc3RlcmVkIHZpYSBgb24oKWAuXG4gICAqL1xuICAgZW1pdChob29rLCAuLi5yZXN0KSB7XG4gICAgY29uc3QgY2FsbGJhY2tzID0gdGhpcy5faG9va3NbaG9va107XG4gICAgaWYgKGNhbGxiYWNrcykge1xuICAgICAgY2FsbGJhY2tzLmZvckVhY2goY2FsbGJhY2sgPT4gY2FsbGJhY2soLi4ucmVzdCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGFuIGVudmVsb3BlIHRvIFNlbnRyeS5cbiAgICovXG4gICBzZW5kRW52ZWxvcGUoZW52ZWxvcGUpIHtcbiAgICB0aGlzLmVtaXQoJ2JlZm9yZUVudmVsb3BlJywgZW52ZWxvcGUpO1xuXG4gICAgaWYgKHRoaXMuX2lzRW5hYmxlZCgpICYmIHRoaXMuX3RyYW5zcG9ydCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5zZW5kKGVudmVsb3BlKS50aGVuKG51bGwsIHJlYXNvbiA9PiB7XG4gICAgICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLmVycm9yKCdFcnJvciB3aGlsZSBzZW5kaW5nIGVudmVsb3BlOicsIHJlYXNvbik7XG4gICAgICAgIHJldHVybiByZWFzb247XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5lcnJvcignVHJhbnNwb3J0IGRpc2FibGVkJyk7XG5cbiAgICByZXR1cm4gcmVzb2x2ZWRTeW5jUHJvbWlzZSh7fSk7XG4gIH1cblxuICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC91bmlmaWVkLXNpZ25hdHVyZXMgKi9cblxuICAvKiogU2V0dXAgaW50ZWdyYXRpb25zIGZvciB0aGlzIGNsaWVudC4gKi9cbiAgIF9zZXR1cEludGVncmF0aW9ucygpIHtcbiAgICBjb25zdCB7IGludGVncmF0aW9ucyB9ID0gdGhpcy5fb3B0aW9ucztcbiAgICB0aGlzLl9pbnRlZ3JhdGlvbnMgPSBzZXR1cEludGVncmF0aW9ucyh0aGlzLCBpbnRlZ3JhdGlvbnMpO1xuICAgIGFmdGVyU2V0dXBJbnRlZ3JhdGlvbnModGhpcywgaW50ZWdyYXRpb25zKTtcbiAgfVxuXG4gIC8qKiBVcGRhdGVzIGV4aXN0aW5nIHNlc3Npb24gYmFzZWQgb24gdGhlIHByb3ZpZGVkIGV2ZW50ICovXG4gICBfdXBkYXRlU2Vzc2lvbkZyb21FdmVudChzZXNzaW9uLCBldmVudCkge1xuICAgIGxldCBjcmFzaGVkID0gZXZlbnQubGV2ZWwgPT09ICdmYXRhbCc7XG4gICAgbGV0IGVycm9yZWQgPSBmYWxzZTtcbiAgICBjb25zdCBleGNlcHRpb25zID0gZXZlbnQuZXhjZXB0aW9uPy52YWx1ZXM7XG5cbiAgICBpZiAoZXhjZXB0aW9ucykge1xuICAgICAgZXJyb3JlZCA9IHRydWU7XG5cbiAgICAgIGZvciAoY29uc3QgZXggb2YgZXhjZXB0aW9ucykge1xuICAgICAgICBjb25zdCBtZWNoYW5pc20gPSBleC5tZWNoYW5pc207XG4gICAgICAgIGlmIChtZWNoYW5pc20/LmhhbmRsZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgY3Jhc2hlZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBIHNlc3Npb24gaXMgdXBkYXRlZCBhbmQgdGhhdCBzZXNzaW9uIHVwZGF0ZSBpcyBzZW50IGluIG9ubHkgb25lIG9mIHRoZSB0d28gZm9sbG93aW5nIHNjZW5hcmlvczpcbiAgICAvLyAxLiBTZXNzaW9uIHdpdGggbm9uIHRlcm1pbmFsIHN0YXR1cyBhbmQgMCBlcnJvcnMgKyBhbiBlcnJvciBvY2N1cnJlZCAtPiBXaWxsIHNldCBlcnJvciBjb3VudCB0byAxIGFuZCBzZW5kIHVwZGF0ZVxuICAgIC8vIDIuIFNlc3Npb24gd2l0aCBub24gdGVybWluYWwgc3RhdHVzIGFuZCAxIGVycm9yICsgYSBjcmFzaCBvY2N1cnJlZCAtPiBXaWxsIHNldCBzdGF0dXMgY3Jhc2hlZCBhbmQgc2VuZCB1cGRhdGVcbiAgICBjb25zdCBzZXNzaW9uTm9uVGVybWluYWwgPSBzZXNzaW9uLnN0YXR1cyA9PT0gJ29rJztcbiAgICBjb25zdCBzaG91bGRVcGRhdGVBbmRTZW5kID0gKHNlc3Npb25Ob25UZXJtaW5hbCAmJiBzZXNzaW9uLmVycm9ycyA9PT0gMCkgfHwgKHNlc3Npb25Ob25UZXJtaW5hbCAmJiBjcmFzaGVkKTtcblxuICAgIGlmIChzaG91bGRVcGRhdGVBbmRTZW5kKSB7XG4gICAgICB1cGRhdGVTZXNzaW9uKHNlc3Npb24sIHtcbiAgICAgICAgLi4uKGNyYXNoZWQgJiYgeyBzdGF0dXM6ICdjcmFzaGVkJyB9KSxcbiAgICAgICAgZXJyb3JzOiBzZXNzaW9uLmVycm9ycyB8fCBOdW1iZXIoZXJyb3JlZCB8fCBjcmFzaGVkKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jYXB0dXJlU2Vzc2lvbihzZXNzaW9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBjbGllbnQgaXMgZmluaXNoZWQgcHJvY2Vzc2luZy4gUmV0dXJucyBhIHByb21pc2UgYmVjYXVzZSBpdCB3aWxsIHdhaXQgYHRpbWVvdXRgIG1zIGJlZm9yZSBzYXlpbmdcbiAgICogXCJub1wiIChyZXNvbHZpbmcgdG8gYGZhbHNlYCkgaW4gb3JkZXIgdG8gZ2l2ZSB0aGUgY2xpZW50IGEgY2hhbmNlIHRvIHBvdGVudGlhbGx5IGZpbmlzaCBmaXJzdC5cbiAgICpcbiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIHRpbWUsIGluIG1zLCBhZnRlciB3aGljaCB0byByZXNvbHZlIHRvIGBmYWxzZWAgaWYgdGhlIGNsaWVudCBpcyBzdGlsbCBidXN5LiBQYXNzaW5nIGAwYCAob3Igbm90XG4gICAqIHBhc3NpbmcgYW55dGhpbmcpIHdpbGwgbWFrZSB0aGUgcHJvbWlzZSB3YWl0IGFzIGxvbmcgYXMgaXQgdGFrZXMgZm9yIHByb2Nlc3NpbmcgdG8gZmluaXNoIGJlZm9yZSByZXNvbHZpbmcgdG9cbiAgICogYHRydWVgLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHRvIGB0cnVlYCBpZiBwcm9jZXNzaW5nIGlzIGFscmVhZHkgZG9uZSBvciBmaW5pc2hlcyBiZWZvcmUgdGhlIHRpbWVvdXQsIGFuZFxuICAgKiBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgIF9pc0NsaWVudERvbmVQcm9jZXNzaW5nKHRpbWVvdXQpIHtcbiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgbGV0IHRpY2tlZCA9IDA7XG4gICAgICBjb25zdCB0aWNrID0gMTtcblxuICAgICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9udW1Qcm9jZXNzaW5nID09IDApIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRpY2tlZCArPSB0aWNrO1xuICAgICAgICAgIGlmICh0aW1lb3V0ICYmIHRpY2tlZCA+PSB0aW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgdGljayk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgU0RLIGlzIGVuYWJsZWQgYW5kIGEgdHJhbnNwb3J0IGlzIHByZXNlbnQuICovXG4gICBfaXNFbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbnMoKS5lbmFibGVkICE9PSBmYWxzZSAmJiB0aGlzLl90cmFuc3BvcnQgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGNvbW1vbiBpbmZvcm1hdGlvbiB0byBldmVudHMuXG4gICAqXG4gICAqIFRoZSBpbmZvcm1hdGlvbiBpbmNsdWRlcyByZWxlYXNlIGFuZCBlbnZpcm9ubWVudCBmcm9tIGBvcHRpb25zYCxcbiAgICogYnJlYWRjcnVtYnMgYW5kIGNvbnRleHQgKGV4dHJhLCB0YWdzIGFuZCB1c2VyKSBmcm9tIHRoZSBzY29wZS5cbiAgICpcbiAgICogSW5mb3JtYXRpb24gdGhhdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGV2ZW50IGlzIG5ldmVyIG92ZXJ3cml0dGVuLiBGb3JcbiAgICogbmVzdGVkIG9iamVjdHMsIHN1Y2ggYXMgdGhlIGNvbnRleHQsIGtleXMgYXJlIG1lcmdlZC5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBvcmlnaW5hbCBldmVudC5cbiAgICogQHBhcmFtIGhpbnQgTWF5IGNvbnRhaW4gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uLlxuICAgKiBAcGFyYW0gY3VycmVudFNjb3BlIEEgc2NvcGUgY29udGFpbmluZyBldmVudCBtZXRhZGF0YS5cbiAgICogQHJldHVybnMgQSBuZXcgZXZlbnQgd2l0aCBtb3JlIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgIF9wcmVwYXJlRXZlbnQoXG4gICAgZXZlbnQsXG4gICAgaGludCxcbiAgICBjdXJyZW50U2NvcGUsXG4gICAgaXNvbGF0aW9uU2NvcGUsXG4gICkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgICBjb25zdCBpbnRlZ3JhdGlvbnMgPSBPYmplY3Qua2V5cyh0aGlzLl9pbnRlZ3JhdGlvbnMpO1xuICAgIGlmICghaGludC5pbnRlZ3JhdGlvbnMgJiYgaW50ZWdyYXRpb25zPy5sZW5ndGgpIHtcbiAgICAgIGhpbnQuaW50ZWdyYXRpb25zID0gaW50ZWdyYXRpb25zO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdCgncHJlcHJvY2Vzc0V2ZW50JywgZXZlbnQsIGhpbnQpO1xuXG4gICAgaWYgKCFldmVudC50eXBlKSB7XG4gICAgICBpc29sYXRpb25TY29wZS5zZXRMYXN0RXZlbnRJZChldmVudC5ldmVudF9pZCB8fCBoaW50LmV2ZW50X2lkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJlcGFyZUV2ZW50KG9wdGlvbnMsIGV2ZW50LCBoaW50LCBjdXJyZW50U2NvcGUsIHRoaXMsIGlzb2xhdGlvblNjb3BlKS50aGVuKGV2dCA9PiB7XG4gICAgICBpZiAoZXZ0ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBldnQ7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW1pdCgncG9zdHByb2Nlc3NFdmVudCcsIGV2dCwgaGludCk7XG5cbiAgICAgIGV2dC5jb250ZXh0cyA9IHtcbiAgICAgICAgdHJhY2U6IGdldFRyYWNlQ29udGV4dEZyb21TY29wZShjdXJyZW50U2NvcGUpLFxuICAgICAgICAuLi5ldnQuY29udGV4dHMsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBkeW5hbWljU2FtcGxpbmdDb250ZXh0ID0gZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21TY29wZSh0aGlzLCBjdXJyZW50U2NvcGUpO1xuXG4gICAgICBldnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0ge1xuICAgICAgICBkeW5hbWljU2FtcGxpbmdDb250ZXh0LFxuICAgICAgICAuLi5ldnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGV2dDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzZXMgdGhlIGV2ZW50IGFuZCBsb2dzIGFuIGVycm9yIGluIGNhc2Ugb2YgcmVqZWN0aW9uXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gaGludFxuICAgKiBAcGFyYW0gc2NvcGVcbiAgICovXG4gICBfY2FwdHVyZUV2ZW50KFxuICAgIGV2ZW50LFxuICAgIGhpbnQgPSB7fSxcbiAgICBjdXJyZW50U2NvcGUgPSBnZXRDdXJyZW50U2NvcGUoKSxcbiAgICBpc29sYXRpb25TY29wZSA9IGdldElzb2xhdGlvblNjb3BlKCksXG4gICkge1xuICAgIGlmIChERUJVR19CVUlMRCAmJiBpc0Vycm9yRXZlbnQoZXZlbnQpKSB7XG4gICAgICBkZWJ1Zy5sb2coYENhcHR1cmVkIGVycm9yIGV2ZW50IFxcYCR7Z2V0UG9zc2libGVFdmVudE1lc3NhZ2VzKGV2ZW50KVswXSB8fCAnPHVua25vd24+J31cXGBgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc0V2ZW50KGV2ZW50LCBoaW50LCBjdXJyZW50U2NvcGUsIGlzb2xhdGlvblNjb3BlKS50aGVuKFxuICAgICAgZmluYWxFdmVudCA9PiB7XG4gICAgICAgIHJldHVybiBmaW5hbEV2ZW50LmV2ZW50X2lkO1xuICAgICAgfSxcbiAgICAgIHJlYXNvbiA9PiB7XG4gICAgICAgIGlmIChERUJVR19CVUlMRCkge1xuICAgICAgICAgIGlmIChfaXNEb05vdFNlbmRFdmVudEVycm9yKHJlYXNvbikpIHtcbiAgICAgICAgICAgIGRlYnVnLmxvZyhyZWFzb24ubWVzc2FnZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChfaXNJbnRlcm5hbEVycm9yKHJlYXNvbikpIHtcbiAgICAgICAgICAgIGRlYnVnLndhcm4ocmVhc29uLm1lc3NhZ2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWJ1Zy53YXJuKHJlYXNvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2Vzc2VzIGFuIGV2ZW50IChlaXRoZXIgZXJyb3Igb3IgbWVzc2FnZSkgYW5kIHNlbmRzIGl0IHRvIFNlbnRyeS5cbiAgICpcbiAgICogVGhpcyBhbHNvIGFkZHMgYnJlYWRjcnVtYnMgYW5kIGNvbnRleHQgaW5mb3JtYXRpb24gdG8gdGhlIGV2ZW50LiBIb3dldmVyLFxuICAgKiBwbGF0Zm9ybSBzcGVjaWZpYyBtZXRhIGRhdGEgKHN1Y2ggYXMgdGhlIFVzZXIncyBJUCBhZGRyZXNzKSBtdXN0IGJlIGFkZGVkXG4gICAqIGJ5IHRoZSBTREsgaW1wbGVtZW50b3IuXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdG8gc2VuZCB0byBTZW50cnkuXG4gICAqIEBwYXJhbSBoaW50IE1heSBjb250YWluIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbi5cbiAgICogQHBhcmFtIGN1cnJlbnRTY29wZSBBIHNjb3BlIGNvbnRhaW5pbmcgZXZlbnQgbWV0YWRhdGEuXG4gICAqIEByZXR1cm5zIEEgU3luY1Byb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBldmVudCBvciByZWplY3RzIGluIGNhc2UgZXZlbnQgd2FzL3dpbGwgbm90IGJlIHNlbmQuXG4gICAqL1xuICAgX3Byb2Nlc3NFdmVudChcbiAgICBldmVudCxcbiAgICBoaW50LFxuICAgIGN1cnJlbnRTY29wZSxcbiAgICBpc29sYXRpb25TY29wZSxcbiAgKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpO1xuICAgIGNvbnN0IHsgc2FtcGxlUmF0ZSB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IGlzVHJhbnNhY3Rpb24gPSBpc1RyYW5zYWN0aW9uRXZlbnQoZXZlbnQpO1xuICAgIGNvbnN0IGlzRXJyb3IgPSBpc0Vycm9yRXZlbnQoZXZlbnQpO1xuICAgIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUgfHwgJ2Vycm9yJztcbiAgICBjb25zdCBiZWZvcmVTZW5kTGFiZWwgPSBgYmVmb3JlIHNlbmQgZm9yIHR5cGUgXFxgJHtldmVudFR5cGV9XFxgYDtcblxuICAgIC8vIDEuMCA9PT0gMTAwJSBldmVudHMgYXJlIHNlbnRcbiAgICAvLyAwLjAgPT09IDAlIGV2ZW50cyBhcmUgc2VudFxuICAgIC8vIFNhbXBsaW5nIGZvciB0cmFuc2FjdGlvbiBoYXBwZW5zIHNvbWV3aGVyZSBlbHNlXG4gICAgY29uc3QgcGFyc2VkU2FtcGxlUmF0ZSA9IHR5cGVvZiBzYW1wbGVSYXRlID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IHBhcnNlU2FtcGxlUmF0ZShzYW1wbGVSYXRlKTtcbiAgICBpZiAoaXNFcnJvciAmJiB0eXBlb2YgcGFyc2VkU2FtcGxlUmF0ZSA9PT0gJ251bWJlcicgJiYgTWF0aC5yYW5kb20oKSA+IHBhcnNlZFNhbXBsZVJhdGUpIHtcbiAgICAgIHRoaXMucmVjb3JkRHJvcHBlZEV2ZW50KCdzYW1wbGVfcmF0ZScsICdlcnJvcicpO1xuICAgICAgcmV0dXJuIHJlamVjdGVkU3luY1Byb21pc2UoXG4gICAgICAgIF9tYWtlRG9Ob3RTZW5kRXZlbnRFcnJvcihcbiAgICAgICAgICBgRGlzY2FyZGluZyBldmVudCBiZWNhdXNlIGl0J3Mgbm90IGluY2x1ZGVkIGluIHRoZSByYW5kb20gc2FtcGxlIChzYW1wbGluZyByYXRlID0gJHtzYW1wbGVSYXRlfSlgLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhQ2F0ZWdvcnkgPSAoZXZlbnRUeXBlID09PSAncmVwbGF5X2V2ZW50JyA/ICdyZXBsYXknIDogZXZlbnRUeXBlKSA7XG5cbiAgICByZXR1cm4gdGhpcy5fcHJlcGFyZUV2ZW50KGV2ZW50LCBoaW50LCBjdXJyZW50U2NvcGUsIGlzb2xhdGlvblNjb3BlKVxuICAgICAgLnRoZW4ocHJlcGFyZWQgPT4ge1xuICAgICAgICBpZiAocHJlcGFyZWQgPT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLnJlY29yZERyb3BwZWRFdmVudCgnZXZlbnRfcHJvY2Vzc29yJywgZGF0YUNhdGVnb3J5KTtcbiAgICAgICAgICB0aHJvdyBfbWFrZURvTm90U2VuZEV2ZW50RXJyb3IoJ0FuIGV2ZW50IHByb2Nlc3NvciByZXR1cm5lZCBgbnVsbGAsIHdpbGwgbm90IHNlbmQgZXZlbnQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0ludGVybmFsRXhjZXB0aW9uID0gaGludC5kYXRhICYmIChoaW50LmRhdGEgKS5fX3NlbnRyeV9fID09PSB0cnVlO1xuICAgICAgICBpZiAoaXNJbnRlcm5hbEV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBwcmVwYXJlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHByb2Nlc3NCZWZvcmVTZW5kKHRoaXMsIG9wdGlvbnMsIHByZXBhcmVkLCBoaW50KTtcbiAgICAgICAgcmV0dXJuIF92YWxpZGF0ZUJlZm9yZVNlbmRSZXN1bHQocmVzdWx0LCBiZWZvcmVTZW5kTGFiZWwpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHByb2Nlc3NlZEV2ZW50ID0+IHtcbiAgICAgICAgaWYgKHByb2Nlc3NlZEV2ZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5yZWNvcmREcm9wcGVkRXZlbnQoJ2JlZm9yZV9zZW5kJywgZGF0YUNhdGVnb3J5KTtcbiAgICAgICAgICBpZiAoaXNUcmFuc2FjdGlvbikge1xuICAgICAgICAgICAgY29uc3Qgc3BhbnMgPSBldmVudC5zcGFucyB8fCBbXTtcbiAgICAgICAgICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBpdHNlbGYgY291bnRzIGFzIG9uZSBzcGFuLCBwbHVzIGFsbCB0aGUgY2hpbGQgc3BhbnMgdGhhdCBhcmUgYWRkZWRcbiAgICAgICAgICAgIGNvbnN0IHNwYW5Db3VudCA9IDEgKyBzcGFucy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnJlY29yZERyb3BwZWRFdmVudCgnYmVmb3JlX3NlbmQnLCAnc3BhbicsIHNwYW5Db3VudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IF9tYWtlRG9Ob3RTZW5kRXZlbnRFcnJvcihgJHtiZWZvcmVTZW5kTGFiZWx9IHJldHVybmVkIFxcYG51bGxcXGAsIHdpbGwgbm90IHNlbmQgZXZlbnQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXNzaW9uID0gY3VycmVudFNjb3BlLmdldFNlc3Npb24oKSB8fCBpc29sYXRpb25TY29wZS5nZXRTZXNzaW9uKCk7XG4gICAgICAgIGlmIChpc0Vycm9yICYmIHNlc3Npb24pIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVTZXNzaW9uRnJvbUV2ZW50KHNlc3Npb24sIHByb2Nlc3NlZEV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1RyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgY29uc3Qgc3BhbkNvdW50QmVmb3JlID0gcHJvY2Vzc2VkRXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhPy5zcGFuQ291bnRCZWZvcmVQcm9jZXNzaW5nIHx8IDA7XG4gICAgICAgICAgY29uc3Qgc3BhbkNvdW50QWZ0ZXIgPSBwcm9jZXNzZWRFdmVudC5zcGFucyA/IHByb2Nlc3NlZEV2ZW50LnNwYW5zLmxlbmd0aCA6IDA7XG5cbiAgICAgICAgICBjb25zdCBkcm9wcGVkU3BhbkNvdW50ID0gc3BhbkNvdW50QmVmb3JlIC0gc3BhbkNvdW50QWZ0ZXI7XG4gICAgICAgICAgaWYgKGRyb3BwZWRTcGFuQ291bnQgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZERyb3BwZWRFdmVudCgnYmVmb3JlX3NlbmQnLCAnc3BhbicsIGRyb3BwZWRTcGFuQ291bnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vbmUgb2YgdGhlIFNlbnRyeSBidWlsdCBldmVudCBwcm9jZXNzb3Igd2lsbCB1cGRhdGUgdHJhbnNhY3Rpb24gbmFtZSxcbiAgICAgICAgLy8gc28gaWYgdGhlIHRyYW5zYWN0aW9uIG5hbWUgaGFzIGJlZW4gY2hhbmdlZCBieSBhbiBldmVudCBwcm9jZXNzb3IsIHdlIGtub3dcbiAgICAgICAgLy8gaXQgaGFzIHRvIGNvbWUgZnJvbSBjdXN0b20gZXZlbnQgcHJvY2Vzc29yIGFkZGVkIGJ5IGEgdXNlclxuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbkluZm8gPSBwcm9jZXNzZWRFdmVudC50cmFuc2FjdGlvbl9pbmZvO1xuICAgICAgICBpZiAoaXNUcmFuc2FjdGlvbiAmJiB0cmFuc2FjdGlvbkluZm8gJiYgcHJvY2Vzc2VkRXZlbnQudHJhbnNhY3Rpb24gIT09IGV2ZW50LnRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gJ2N1c3RvbSc7XG4gICAgICAgICAgcHJvY2Vzc2VkRXZlbnQudHJhbnNhY3Rpb25faW5mbyA9IHtcbiAgICAgICAgICAgIC4uLnRyYW5zYWN0aW9uSW5mbyxcbiAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZW5kRXZlbnQocHJvY2Vzc2VkRXZlbnQsIGhpbnQpO1xuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkRXZlbnQ7XG4gICAgICB9KVxuICAgICAgLnRoZW4obnVsbCwgcmVhc29uID0+IHtcbiAgICAgICAgaWYgKF9pc0RvTm90U2VuZEV2ZW50RXJyb3IocmVhc29uKSB8fCBfaXNJbnRlcm5hbEVycm9yKHJlYXNvbikpIHtcbiAgICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhcHR1cmVFeGNlcHRpb24ocmVhc29uLCB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgX19zZW50cnlfXzogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9yaWdpbmFsRXhjZXB0aW9uOiByZWFzb24sXG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBfbWFrZUludGVybmFsRXJyb3IoXG4gICAgICAgICAgYEV2ZW50IHByb2Nlc3NpbmcgcGlwZWxpbmUgdGhyZXcgYW4gZXJyb3IsIG9yaWdpbmFsIGV2ZW50IHdpbGwgbm90IGJlIHNlbnQuIERldGFpbHMgaGF2ZSBiZWVuIHNlbnQgYXMgYSBuZXcgZXZlbnQuXFxuUmVhc29uOiAke3JlYXNvbn1gLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT2NjdXBpZXMgdGhlIGNsaWVudCB3aXRoIHByb2Nlc3NpbmcgYW5kIGV2ZW50XG4gICAqL1xuICAgX3Byb2Nlc3MocHJvbWlzZSkge1xuICAgIHRoaXMuX251bVByb2Nlc3NpbmcrKztcbiAgICB2b2lkIHByb21pc2UudGhlbihcbiAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgdGhpcy5fbnVtUHJvY2Vzc2luZy0tO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LFxuICAgICAgcmVhc29uID0+IHtcbiAgICAgICAgdGhpcy5fbnVtUHJvY2Vzc2luZy0tO1xuICAgICAgICByZXR1cm4gcmVhc29uO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBvdXRjb21lcyBvbiB0aGlzIGNsaWVudCBhbmQgcmV0dXJucyB0aGVtLlxuICAgKi9cbiAgIF9jbGVhck91dGNvbWVzKCkge1xuICAgIGNvbnN0IG91dGNvbWVzID0gdGhpcy5fb3V0Y29tZXM7XG4gICAgdGhpcy5fb3V0Y29tZXMgPSB7fTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMob3V0Y29tZXMpLm1hcCgoW2tleSwgcXVhbnRpdHldKSA9PiB7XG4gICAgICBjb25zdCBbcmVhc29uLCBjYXRlZ29yeV0gPSBrZXkuc3BsaXQoJzonKSA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWFzb24sXG4gICAgICAgIGNhdGVnb3J5LFxuICAgICAgICBxdWFudGl0eSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgY2xpZW50IHJlcG9ydHMgYXMgYW4gZW52ZWxvcGUuXG4gICAqL1xuICAgX2ZsdXNoT3V0Y29tZXMoKSB7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKCdGbHVzaGluZyBvdXRjb21lcy4uLicpO1xuXG4gICAgY29uc3Qgb3V0Y29tZXMgPSB0aGlzLl9jbGVhck91dGNvbWVzKCk7XG5cbiAgICBpZiAob3V0Y29tZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5sb2coJ05vIG91dGNvbWVzIHRvIHNlbmQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIHJlYWxseSB0aGUgb25seSBwbGFjZSB3aGVyZSB3ZSB3YW50IHRvIGNoZWNrIGZvciBhIERTTiBhbmQgb25seSBzZW5kIG91dGNvbWVzIHRoZW5cbiAgICBpZiAoIXRoaXMuX2Rzbikge1xuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKCdObyBkc24gcHJvdmlkZWQsIHdpbGwgbm90IHNlbmQgb3V0Y29tZXMnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5sb2coJ1NlbmRpbmcgb3V0Y29tZXM6Jywgb3V0Y29tZXMpO1xuXG4gICAgY29uc3QgZW52ZWxvcGUgPSBjcmVhdGVDbGllbnRSZXBvcnRFbnZlbG9wZShvdXRjb21lcywgdGhpcy5fb3B0aW9ucy50dW5uZWwgJiYgZHNuVG9TdHJpbmcodGhpcy5fZHNuKSk7XG5cbiAgICAvLyBzZW5kRW52ZWxvcGUgc2hvdWxkIG5vdCB0aHJvd1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICB0aGlzLnNlbmRFbnZlbG9wZShlbnZlbG9wZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiB7QGxpbmsgRXZlbnR9IGZyb20gYWxsIGlucHV0cyB0byBgY2FwdHVyZUV4Y2VwdGlvbmAgYW5kIG5vbi1wcmltaXRpdmUgaW5wdXRzIHRvIGBjYXB0dXJlTWVzc2FnZWAuXG4gICAqL1xuXG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGBDbGllbnRgIGluc3RlYWQuIFRoaXMgYWxpYXMgbWF5IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgdmVyc2lvbi5cbiAqL1xuLy8gVE9ETyh2MTApOiBSZW1vdmVcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgYENsaWVudGAgaW5zdGVhZC4gVGhpcyBhbGlhcyBtYXkgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciB2ZXJzaW9uLlxuICovXG4vLyBUT0RPKHYxMCk6IFJlbW92ZVxuY29uc3QgQmFzZUNsaWVudCA9IENsaWVudDtcblxuLyoqXG4gKiBWZXJpZmllcyB0aGF0IHJldHVybiB2YWx1ZSBvZiBjb25maWd1cmVkIGBiZWZvcmVTZW5kYCBvciBgYmVmb3JlU2VuZFRyYW5zYWN0aW9uYCBpcyBvZiBleHBlY3RlZCB0eXBlLCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgaWYgc28uXG4gKi9cbmZ1bmN0aW9uIF92YWxpZGF0ZUJlZm9yZVNlbmRSZXN1bHQoXG4gIGJlZm9yZVNlbmRSZXN1bHQsXG4gIGJlZm9yZVNlbmRMYWJlbCxcbikge1xuICBjb25zdCBpbnZhbGlkVmFsdWVFcnJvciA9IGAke2JlZm9yZVNlbmRMYWJlbH0gbXVzdCByZXR1cm4gXFxgbnVsbFxcYCBvciBhIHZhbGlkIGV2ZW50LmA7XG4gIGlmIChpc1RoZW5hYmxlKGJlZm9yZVNlbmRSZXN1bHQpKSB7XG4gICAgcmV0dXJuIGJlZm9yZVNlbmRSZXN1bHQudGhlbihcbiAgICAgIGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKCFpc1BsYWluT2JqZWN0KGV2ZW50KSAmJiBldmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IF9tYWtlSW50ZXJuYWxFcnJvcihpbnZhbGlkVmFsdWVFcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgfSxcbiAgICAgIGUgPT4ge1xuICAgICAgICB0aHJvdyBfbWFrZUludGVybmFsRXJyb3IoYCR7YmVmb3JlU2VuZExhYmVsfSByZWplY3RlZCB3aXRoICR7ZX1gKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfSBlbHNlIGlmICghaXNQbGFpbk9iamVjdChiZWZvcmVTZW5kUmVzdWx0KSAmJiBiZWZvcmVTZW5kUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgdGhyb3cgX21ha2VJbnRlcm5hbEVycm9yKGludmFsaWRWYWx1ZUVycm9yKTtcbiAgfVxuICByZXR1cm4gYmVmb3JlU2VuZFJlc3VsdDtcbn1cblxuLyoqXG4gKiBQcm9jZXNzIHRoZSBtYXRjaGluZyBgYmVmb3JlU2VuZFhYWGAgY2FsbGJhY2suXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NCZWZvcmVTZW5kKFxuICBjbGllbnQsXG4gIG9wdGlvbnMsXG4gIGV2ZW50LFxuICBoaW50LFxuKSB7XG4gIGNvbnN0IHsgYmVmb3JlU2VuZCwgYmVmb3JlU2VuZFRyYW5zYWN0aW9uLCBiZWZvcmVTZW5kU3BhbiB9ID0gb3B0aW9ucztcbiAgbGV0IHByb2Nlc3NlZEV2ZW50ID0gZXZlbnQ7XG5cbiAgaWYgKGlzRXJyb3JFdmVudChwcm9jZXNzZWRFdmVudCkgJiYgYmVmb3JlU2VuZCkge1xuICAgIHJldHVybiBiZWZvcmVTZW5kKHByb2Nlc3NlZEV2ZW50LCBoaW50KTtcbiAgfVxuXG4gIGlmIChpc1RyYW5zYWN0aW9uRXZlbnQocHJvY2Vzc2VkRXZlbnQpKSB7XG4gICAgaWYgKGJlZm9yZVNlbmRTcGFuKSB7XG4gICAgICAvLyBwcm9jZXNzIHJvb3Qgc3BhblxuICAgICAgY29uc3QgcHJvY2Vzc2VkUm9vdFNwYW5Kc29uID0gYmVmb3JlU2VuZFNwYW4oY29udmVydFRyYW5zYWN0aW9uRXZlbnRUb1NwYW5Kc29uKHByb2Nlc3NlZEV2ZW50KSk7XG4gICAgICBpZiAoIXByb2Nlc3NlZFJvb3RTcGFuSnNvbikge1xuICAgICAgICBzaG93U3BhbkRyb3BXYXJuaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB1cGRhdGUgZXZlbnQgd2l0aCBwcm9jZXNzZWQgcm9vdCBzcGFuIHZhbHVlc1xuICAgICAgICBwcm9jZXNzZWRFdmVudCA9IG1lcmdlKGV2ZW50LCBjb252ZXJ0U3Bhbkpzb25Ub1RyYW5zYWN0aW9uRXZlbnQocHJvY2Vzc2VkUm9vdFNwYW5Kc29uKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHByb2Nlc3MgY2hpbGQgc3BhbnNcbiAgICAgIGlmIChwcm9jZXNzZWRFdmVudC5zcGFucykge1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRTcGFucyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHNwYW4gb2YgcHJvY2Vzc2VkRXZlbnQuc3BhbnMpIHtcbiAgICAgICAgICBjb25zdCBwcm9jZXNzZWRTcGFuID0gYmVmb3JlU2VuZFNwYW4oc3Bhbik7XG4gICAgICAgICAgaWYgKCFwcm9jZXNzZWRTcGFuKSB7XG4gICAgICAgICAgICBzaG93U3BhbkRyb3BXYXJuaW5nKCk7XG4gICAgICAgICAgICBwcm9jZXNzZWRTcGFucy5wdXNoKHNwYW4pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9jZXNzZWRTcGFucy5wdXNoKHByb2Nlc3NlZFNwYW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzZWRFdmVudC5zcGFucyA9IHByb2Nlc3NlZFNwYW5zO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChiZWZvcmVTZW5kVHJhbnNhY3Rpb24pIHtcbiAgICAgIGlmIChwcm9jZXNzZWRFdmVudC5zcGFucykge1xuICAgICAgICAvLyBXZSBzdG9yZSB0aGUgIyBvZiBzcGFucyBiZWZvcmUgcHJvY2Vzc2luZyBpbiBTREsgbWV0YWRhdGEsXG4gICAgICAgIC8vIHNvIHdlIGNhbiBjb21wYXJlIGl0IGFmdGVyd2FyZHMgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IHNwYW5zIHdlcmUgZHJvcHBlZFxuICAgICAgICBjb25zdCBzcGFuQ291bnRCZWZvcmUgPSBwcm9jZXNzZWRFdmVudC5zcGFucy5sZW5ndGg7XG4gICAgICAgIHByb2Nlc3NlZEV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YSA9IHtcbiAgICAgICAgICAuLi5ldmVudC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEsXG4gICAgICAgICAgc3BhbkNvdW50QmVmb3JlUHJvY2Vzc2luZzogc3BhbkNvdW50QmVmb3JlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJlZm9yZVNlbmRUcmFuc2FjdGlvbihwcm9jZXNzZWRFdmVudCAsIGhpbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWRFdmVudDtcbn1cblxuZnVuY3Rpb24gaXNFcnJvckV2ZW50KGV2ZW50KSB7XG4gIHJldHVybiBldmVudC50eXBlID09PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzVHJhbnNhY3Rpb25FdmVudChldmVudCkge1xuICByZXR1cm4gZXZlbnQudHlwZSA9PT0gJ3RyYW5zYWN0aW9uJztcbn1cblxuLyoqIEV4dHJhY3QgdHJhY2UgaW5mb3JtYXRpb24gZnJvbSBzY29wZSAqL1xuZnVuY3Rpb24gX2dldFRyYWNlSW5mb0Zyb21TY29wZShcbiAgY2xpZW50LFxuICBzY29wZSxcbikge1xuICBpZiAoIXNjb3BlKSB7XG4gICAgcmV0dXJuIFt1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gIH1cblxuICByZXR1cm4gd2l0aFNjb3BlKHNjb3BlLCAoKSA9PiB7XG4gICAgY29uc3Qgc3BhbiA9IGdldEFjdGl2ZVNwYW4oKTtcbiAgICBjb25zdCB0cmFjZUNvbnRleHQgPSBzcGFuID8gc3BhblRvVHJhY2VDb250ZXh0KHNwYW4pIDogZ2V0VHJhY2VDb250ZXh0RnJvbVNjb3BlKHNjb3BlKTtcbiAgICBjb25zdCBkeW5hbWljU2FtcGxpbmdDb250ZXh0ID0gc3BhblxuICAgICAgPyBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4oc3BhbilcbiAgICAgIDogZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21TY29wZShjbGllbnQsIHNjb3BlKTtcbiAgICByZXR1cm4gW2R5bmFtaWNTYW1wbGluZ0NvbnRleHQsIHRyYWNlQ29udGV4dF07XG4gIH0pO1xufVxuXG5leHBvcnQgeyBCYXNlQ2xpZW50LCBDbGllbnQsIF9nZXRUcmFjZUluZm9Gcm9tU2NvcGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNsaWVudC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/client.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/constants.js":
/*!*************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/constants.js ***!
  \*************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   DEFAULT_ENVIRONMENT: () => (/* binding */ DEFAULT_ENVIRONMENT)\n/* harmony export */ });\nconst DEFAULT_ENVIRONMENT = 'production';\n\n\n//# sourceMappingURL=constants.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2NvbnN0YW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRStCO0FBQy9CIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vY29uc3RhbnRzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IERFRkFVTFRfRU5WSVJPTk1FTlQgPSAncHJvZHVjdGlvbic7XG5cbmV4cG9ydCB7IERFRkFVTFRfRU5WSVJPTk1FTlQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/constants.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js":
/*!*****************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js ***!
  \*****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getClient: () => (/* binding */ getClient),\n/* harmony export */   getCurrentScope: () => (/* binding */ getCurrentScope),\n/* harmony export */   getGlobalScope: () => (/* binding */ getGlobalScope),\n/* harmony export */   getIsolationScope: () => (/* binding */ getIsolationScope),\n/* harmony export */   getTraceContextFromScope: () => (/* binding */ getTraceContextFromScope),\n/* harmony export */   withIsolationScope: () => (/* binding */ withIsolationScope),\n/* harmony export */   withScope: () => (/* binding */ withScope)\n/* harmony export */ });\n/* harmony import */ var _asyncContext_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./asyncContext/index.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/asyncContext/index.js\");\n/* harmony import */ var _carrier_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./carrier.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/carrier.js\");\n/* harmony import */ var _scope_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./scope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/scope.js\");\n/* harmony import */ var _utils_propagationContext_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/propagationContext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/propagationContext.js\");\n\n\n\n\n\n/**\n * Get the currently active scope.\n */\nfunction getCurrentScope() {\n  const carrier = (0,_carrier_js__WEBPACK_IMPORTED_MODULE_1__.getMainCarrier)();\n  const acs = (0,_asyncContext_index_js__WEBPACK_IMPORTED_MODULE_0__.getAsyncContextStrategy)(carrier);\n  return acs.getCurrentScope();\n}\n\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current execution context.\n */\nfunction getIsolationScope() {\n  const carrier = (0,_carrier_js__WEBPACK_IMPORTED_MODULE_1__.getMainCarrier)();\n  const acs = (0,_asyncContext_index_js__WEBPACK_IMPORTED_MODULE_0__.getAsyncContextStrategy)(carrier);\n  return acs.getIsolationScope();\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nfunction getGlobalScope() {\n  return (0,_carrier_js__WEBPACK_IMPORTED_MODULE_1__.getGlobalSingleton)('globalScope', () => new _scope_js__WEBPACK_IMPORTED_MODULE_2__.Scope());\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n */\n\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nfunction withScope(\n  ...rest\n) {\n  const carrier = (0,_carrier_js__WEBPACK_IMPORTED_MODULE_1__.getMainCarrier)();\n  const acs = (0,_asyncContext_index_js__WEBPACK_IMPORTED_MODULE_0__.getAsyncContextStrategy)(carrier);\n\n  // If a scope is defined, we want to make this the active scope instead of the default one\n  if (rest.length === 2) {\n    const [scope, callback] = rest;\n\n    if (!scope) {\n      return acs.withScope(callback);\n    }\n\n    return acs.withSetScope(scope, callback);\n  }\n\n  return acs.withScope(rest[0]);\n}\n\n/**\n * Attempts to fork the current isolation scope and the current scope based on the current async context strategy. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n */\n\n/**\n * Either creates a new active isolation scope, or sets the given isolation scope as active scope in the given callback.\n */\nfunction withIsolationScope(\n  ...rest\n\n) {\n  const carrier = (0,_carrier_js__WEBPACK_IMPORTED_MODULE_1__.getMainCarrier)();\n  const acs = (0,_asyncContext_index_js__WEBPACK_IMPORTED_MODULE_0__.getAsyncContextStrategy)(carrier);\n\n  // If a scope is defined, we want to make this the active scope instead of the default one\n  if (rest.length === 2) {\n    const [isolationScope, callback] = rest;\n\n    if (!isolationScope) {\n      return acs.withIsolationScope(callback);\n    }\n\n    return acs.withSetIsolationScope(isolationScope, callback);\n  }\n\n  return acs.withIsolationScope(rest[0]);\n}\n\n/**\n * Get the currently active client.\n */\nfunction getClient() {\n  return getCurrentScope().getClient();\n}\n\n/**\n * Get a trace context for the given scope.\n */\nfunction getTraceContextFromScope(scope) {\n  const propagationContext = scope.getPropagationContext();\n\n  const { traceId, parentSpanId, propagationSpanId } = propagationContext;\n\n  const traceContext = {\n    trace_id: traceId,\n    span_id: propagationSpanId || (0,_utils_propagationContext_js__WEBPACK_IMPORTED_MODULE_3__.generateSpanId)(),\n  };\n\n  if (parentSpanId) {\n    traceContext.parent_span_id = parentSpanId;\n  }\n\n  return traceContext;\n}\n\n\n//# sourceMappingURL=currentScopes.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2N1cnJlbnRTY29wZXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBa0U7QUFDQTtBQUMvQjtBQUM0Qjs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsMkRBQWM7QUFDaEMsY0FBYywrRUFBdUI7QUFDckM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLDJEQUFjO0FBQ2hDLGNBQWMsK0VBQXVCO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsK0RBQWtCLDBCQUEwQiw0Q0FBSztBQUMxRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiwyREFBYztBQUNoQyxjQUFjLCtFQUF1Qjs7QUFFckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQiwyREFBYztBQUNoQyxjQUFjLCtFQUF1Qjs7QUFFckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSwyQ0FBMkM7O0FBRXJEO0FBQ0E7QUFDQSxrQ0FBa0MsNEVBQWM7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRWtJO0FBQ2xJIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vY3VycmVudFNjb3Blcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRBc3luY0NvbnRleHRTdHJhdGVneSB9IGZyb20gJy4vYXN5bmNDb250ZXh0L2luZGV4LmpzJztcbmltcG9ydCB7IGdldE1haW5DYXJyaWVyLCBnZXRHbG9iYWxTaW5nbGV0b24gfSBmcm9tICcuL2NhcnJpZXIuanMnO1xuaW1wb3J0IHsgU2NvcGUgfSBmcm9tICcuL3Njb3BlLmpzJztcbmltcG9ydCB7IGdlbmVyYXRlU3BhbklkIH0gZnJvbSAnLi91dGlscy9wcm9wYWdhdGlvbkNvbnRleHQuanMnO1xuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudGx5IGFjdGl2ZSBzY29wZS5cbiAqL1xuZnVuY3Rpb24gZ2V0Q3VycmVudFNjb3BlKCkge1xuICBjb25zdCBjYXJyaWVyID0gZ2V0TWFpbkNhcnJpZXIoKTtcbiAgY29uc3QgYWNzID0gZ2V0QXN5bmNDb250ZXh0U3RyYXRlZ3koY2Fycmllcik7XG4gIHJldHVybiBhY3MuZ2V0Q3VycmVudFNjb3BlKCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBjdXJyZW50bHkgYWN0aXZlIGlzb2xhdGlvbiBzY29wZS5cbiAqIFRoZSBpc29sYXRpb24gc2NvcGUgaXMgYWN0aXZlIGZvciB0aGUgY3VycmVudCBleGVjdXRpb24gY29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZ2V0SXNvbGF0aW9uU2NvcGUoKSB7XG4gIGNvbnN0IGNhcnJpZXIgPSBnZXRNYWluQ2FycmllcigpO1xuICBjb25zdCBhY3MgPSBnZXRBc3luY0NvbnRleHRTdHJhdGVneShjYXJyaWVyKTtcbiAgcmV0dXJuIGFjcy5nZXRJc29sYXRpb25TY29wZSgpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgZ2xvYmFsIHNjb3BlLlxuICogVGhpcyBzY29wZSBpcyBhcHBsaWVkIHRvIF9hbGxfIGV2ZW50cy5cbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsU2NvcGUoKSB7XG4gIHJldHVybiBnZXRHbG9iYWxTaW5nbGV0b24oJ2dsb2JhbFNjb3BlJywgKCkgPT4gbmV3IFNjb3BlKCkpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgc2NvcGUgd2l0aCBhbmQgZXhlY3V0ZXMgdGhlIGdpdmVuIG9wZXJhdGlvbiB3aXRoaW4uXG4gKiBUaGUgc2NvcGUgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIG9uY2UgdGhlIG9wZXJhdGlvblxuICogZmluaXNoZXMgb3IgdGhyb3dzLlxuICovXG5cbi8qKlxuICogRWl0aGVyIGNyZWF0ZXMgYSBuZXcgYWN0aXZlIHNjb3BlLCBvciBzZXRzIHRoZSBnaXZlbiBzY29wZSBhcyBhY3RpdmUgc2NvcGUgaW4gdGhlIGdpdmVuIGNhbGxiYWNrLlxuICovXG5mdW5jdGlvbiB3aXRoU2NvcGUoXG4gIC4uLnJlc3Rcbikge1xuICBjb25zdCBjYXJyaWVyID0gZ2V0TWFpbkNhcnJpZXIoKTtcbiAgY29uc3QgYWNzID0gZ2V0QXN5bmNDb250ZXh0U3RyYXRlZ3koY2Fycmllcik7XG5cbiAgLy8gSWYgYSBzY29wZSBpcyBkZWZpbmVkLCB3ZSB3YW50IHRvIG1ha2UgdGhpcyB0aGUgYWN0aXZlIHNjb3BlIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgb25lXG4gIGlmIChyZXN0Lmxlbmd0aCA9PT0gMikge1xuICAgIGNvbnN0IFtzY29wZSwgY2FsbGJhY2tdID0gcmVzdDtcblxuICAgIGlmICghc2NvcGUpIHtcbiAgICAgIHJldHVybiBhY3Mud2l0aFNjb3BlKGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNzLndpdGhTZXRTY29wZShzY29wZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgcmV0dXJuIGFjcy53aXRoU2NvcGUocmVzdFswXSk7XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gZm9yayB0aGUgY3VycmVudCBpc29sYXRpb24gc2NvcGUgYW5kIHRoZSBjdXJyZW50IHNjb3BlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGFzeW5jIGNvbnRleHQgc3RyYXRlZ3kuIElmIG5vXG4gKiBhc3luYyBjb250ZXh0IHN0cmF0ZWd5IGlzIHNldCwgdGhlIGlzb2xhdGlvbiBzY29wZSBhbmQgdGhlIGN1cnJlbnQgc2NvcGUgd2lsbCBub3QgYmUgZm9ya2VkICh0aGlzIGlzIGN1cnJlbnRseSB0aGVcbiAqIGNhc2UsIGZvciBleGFtcGxlLCBpbiB0aGUgYnJvd3NlcikuXG4gKlxuICogVXNhZ2Ugb2YgdGhpcyBmdW5jdGlvbiBpbiBlbnZpcm9ubWVudHMgd2l0aG91dCBhc3luYyBjb250ZXh0IHN0cmF0ZWd5IGlzIGRpc2NvdXJhZ2VkIGFuZCBtYXkgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW91ci5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBTZW50cnkgU0RLIGFuZCBTREsgaW50ZWdyYXRpb24gZGV2ZWxvcG1lbnQuIEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byBiZSB1c2VkIGluIFwibm9ybWFsXCJcbiAqIGFwcGxpY2F0aW9ucyBkaXJlY3RseSBiZWNhdXNlIGl0IGNvbWVzIHdpdGggcGl0ZmFsbHMuIFVzZSBhdCB5b3VyIG93biByaXNrIVxuICovXG5cbi8qKlxuICogRWl0aGVyIGNyZWF0ZXMgYSBuZXcgYWN0aXZlIGlzb2xhdGlvbiBzY29wZSwgb3Igc2V0cyB0aGUgZ2l2ZW4gaXNvbGF0aW9uIHNjb3BlIGFzIGFjdGl2ZSBzY29wZSBpbiB0aGUgZ2l2ZW4gY2FsbGJhY2suXG4gKi9cbmZ1bmN0aW9uIHdpdGhJc29sYXRpb25TY29wZShcbiAgLi4ucmVzdFxuXG4pIHtcbiAgY29uc3QgY2FycmllciA9IGdldE1haW5DYXJyaWVyKCk7XG4gIGNvbnN0IGFjcyA9IGdldEFzeW5jQ29udGV4dFN0cmF0ZWd5KGNhcnJpZXIpO1xuXG4gIC8vIElmIGEgc2NvcGUgaXMgZGVmaW5lZCwgd2Ugd2FudCB0byBtYWtlIHRoaXMgdGhlIGFjdGl2ZSBzY29wZSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IG9uZVxuICBpZiAocmVzdC5sZW5ndGggPT09IDIpIHtcbiAgICBjb25zdCBbaXNvbGF0aW9uU2NvcGUsIGNhbGxiYWNrXSA9IHJlc3Q7XG5cbiAgICBpZiAoIWlzb2xhdGlvblNjb3BlKSB7XG4gICAgICByZXR1cm4gYWNzLndpdGhJc29sYXRpb25TY29wZShjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjcy53aXRoU2V0SXNvbGF0aW9uU2NvcGUoaXNvbGF0aW9uU2NvcGUsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBhY3Mud2l0aElzb2xhdGlvblNjb3BlKHJlc3RbMF0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudGx5IGFjdGl2ZSBjbGllbnQuXG4gKi9cbmZ1bmN0aW9uIGdldENsaWVudCgpIHtcbiAgcmV0dXJuIGdldEN1cnJlbnRTY29wZSgpLmdldENsaWVudCgpO1xufVxuXG4vKipcbiAqIEdldCBhIHRyYWNlIGNvbnRleHQgZm9yIHRoZSBnaXZlbiBzY29wZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VHJhY2VDb250ZXh0RnJvbVNjb3BlKHNjb3BlKSB7XG4gIGNvbnN0IHByb3BhZ2F0aW9uQ29udGV4dCA9IHNjb3BlLmdldFByb3BhZ2F0aW9uQ29udGV4dCgpO1xuXG4gIGNvbnN0IHsgdHJhY2VJZCwgcGFyZW50U3BhbklkLCBwcm9wYWdhdGlvblNwYW5JZCB9ID0gcHJvcGFnYXRpb25Db250ZXh0O1xuXG4gIGNvbnN0IHRyYWNlQ29udGV4dCA9IHtcbiAgICB0cmFjZV9pZDogdHJhY2VJZCxcbiAgICBzcGFuX2lkOiBwcm9wYWdhdGlvblNwYW5JZCB8fCBnZW5lcmF0ZVNwYW5JZCgpLFxuICB9O1xuXG4gIGlmIChwYXJlbnRTcGFuSWQpIHtcbiAgICB0cmFjZUNvbnRleHQucGFyZW50X3NwYW5faWQgPSBwYXJlbnRTcGFuSWQ7XG4gIH1cblxuICByZXR1cm4gdHJhY2VDb250ZXh0O1xufVxuXG5leHBvcnQgeyBnZXRDbGllbnQsIGdldEN1cnJlbnRTY29wZSwgZ2V0R2xvYmFsU2NvcGUsIGdldElzb2xhdGlvblNjb3BlLCBnZXRUcmFjZUNvbnRleHRGcm9tU2NvcGUsIHdpdGhJc29sYXRpb25TY29wZSwgd2l0aFNjb3BlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jdXJyZW50U2NvcGVzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js":
/*!***************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js ***!
  \***************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   DEBUG_BUILD: () => (/* binding */ DEBUG_BUILD)\n/* harmony export */ });\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = ( false || false);\n\n\n//# sourceMappingURL=debug-build.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2RlYnVnLWJ1aWxkLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLE1BQXVDLElBQUksS0FBZ0I7O0FBRXpEO0FBQ3ZCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vZGVidWctYnVpbGQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIHNlcnZlcyBhcyBhIGJ1aWxkIHRpbWUgZmxhZyB0aGF0IHdpbGwgYmUgdHJ1ZSBieSBkZWZhdWx0LCBidXQgZmFsc2UgaW4gbm9uLWRlYnVnIGJ1aWxkcyBvciBpZiB1c2VycyByZXBsYWNlIGBfX1NFTlRSWV9ERUJVR19fYCBpbiB0aGVpciBnZW5lcmF0ZWQgY29kZS5cbiAqXG4gKiBBVFRFTlRJT046IFRoaXMgY29uc3RhbnQgbXVzdCBuZXZlciBjcm9zcyBwYWNrYWdlIGJvdW5kYXJpZXMgKGkuZS4gYmUgZXhwb3J0ZWQpIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciB0cmVlIHNoYWtpbmcuXG4gKi9cbmNvbnN0IERFQlVHX0JVSUxEID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTtcblxuZXhwb3J0IHsgREVCVUdfQlVJTEQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlYnVnLWJ1aWxkLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/defaultScopes.js":
/*!*****************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/defaultScopes.js ***!
  \*****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getDefaultCurrentScope: () => (/* binding */ getDefaultCurrentScope),\n/* harmony export */   getDefaultIsolationScope: () => (/* binding */ getDefaultIsolationScope)\n/* harmony export */ });\n/* harmony import */ var _carrier_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./carrier.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/carrier.js\");\n/* harmony import */ var _scope_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./scope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/scope.js\");\n\n\n\n/** Get the default current scope. */\nfunction getDefaultCurrentScope() {\n  return (0,_carrier_js__WEBPACK_IMPORTED_MODULE_0__.getGlobalSingleton)('defaultCurrentScope', () => new _scope_js__WEBPACK_IMPORTED_MODULE_1__.Scope());\n}\n\n/** Get the default isolation scope. */\nfunction getDefaultIsolationScope() {\n  return (0,_carrier_js__WEBPACK_IMPORTED_MODULE_0__.getGlobalSingleton)('defaultIsolationScope', () => new _scope_js__WEBPACK_IMPORTED_MODULE_1__.Scope());\n}\n\n\n//# sourceMappingURL=defaultScopes.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2RlZmF1bHRTY29wZXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFrRDtBQUNmOztBQUVuQztBQUNBO0FBQ0EsU0FBUywrREFBa0Isa0NBQWtDLDRDQUFLO0FBQ2xFOztBQUVBO0FBQ0E7QUFDQSxTQUFTLCtEQUFrQixvQ0FBb0MsNENBQUs7QUFDcEU7O0FBRTREO0FBQzVEIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vZGVmYXVsdFNjb3Blcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRHbG9iYWxTaW5nbGV0b24gfSBmcm9tICcuL2NhcnJpZXIuanMnO1xuaW1wb3J0IHsgU2NvcGUgfSBmcm9tICcuL3Njb3BlLmpzJztcblxuLyoqIEdldCB0aGUgZGVmYXVsdCBjdXJyZW50IHNjb3BlLiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEN1cnJlbnRTY29wZSgpIHtcbiAgcmV0dXJuIGdldEdsb2JhbFNpbmdsZXRvbignZGVmYXVsdEN1cnJlbnRTY29wZScsICgpID0+IG5ldyBTY29wZSgpKTtcbn1cblxuLyoqIEdldCB0aGUgZGVmYXVsdCBpc29sYXRpb24gc2NvcGUuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0SXNvbGF0aW9uU2NvcGUoKSB7XG4gIHJldHVybiBnZXRHbG9iYWxTaW5nbGV0b24oJ2RlZmF1bHRJc29sYXRpb25TY29wZScsICgpID0+IG5ldyBTY29wZSgpKTtcbn1cblxuZXhwb3J0IHsgZ2V0RGVmYXVsdEN1cnJlbnRTY29wZSwgZ2V0RGVmYXVsdElzb2xhdGlvblNjb3BlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0U2NvcGVzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/defaultScopes.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/envelope.js":
/*!************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/envelope.js ***!
  \************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   createEventEnvelope: () => (/* binding */ createEventEnvelope),\n/* harmony export */   createSessionEnvelope: () => (/* binding */ createSessionEnvelope),\n/* harmony export */   createSpanEnvelope: () => (/* binding */ createSpanEnvelope)\n/* harmony export */ });\n/* harmony import */ var _tracing_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tracing/dynamicSamplingContext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js\");\n/* harmony import */ var _utils_dsn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/dsn.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/dsn.js\");\n/* harmony import */ var _utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/envelope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/envelope.js\");\n/* harmony import */ var _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/spanUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js\");\n\n\n\n\n\n/**\n * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.\n * Merge with existing data if any.\n **/\nfunction enhanceEventWithSdkInfo(event, sdkInfo) {\n  if (!sdkInfo) {\n    return event;\n  }\n  event.sdk = event.sdk || {};\n  event.sdk.name = event.sdk.name || sdkInfo.name;\n  event.sdk.version = event.sdk.version || sdkInfo.version;\n  event.sdk.integrations = [...(event.sdk.integrations || []), ...(sdkInfo.integrations || [])];\n  event.sdk.packages = [...(event.sdk.packages || []), ...(sdkInfo.packages || [])];\n  return event;\n}\n\n/** Creates an envelope from a Session */\nfunction createSessionEnvelope(\n  session,\n  dsn,\n  metadata,\n  tunnel,\n) {\n  const sdkInfo = (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.getSdkMetadataForEnvelopeHeader)(metadata);\n  const envelopeHeaders = {\n    sent_at: new Date().toISOString(),\n    ...(sdkInfo && { sdk: sdkInfo }),\n    ...(!!tunnel && dsn && { dsn: (0,_utils_dsn_js__WEBPACK_IMPORTED_MODULE_1__.dsnToString)(dsn) }),\n  };\n\n  const envelopeItem =\n    'aggregates' in session ? [{ type: 'sessions' }, session] : [{ type: 'session' }, session.toJSON()];\n\n  return (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.createEnvelope)(envelopeHeaders, [envelopeItem]);\n}\n\n/**\n * Create an Envelope from an event.\n */\nfunction createEventEnvelope(\n  event,\n  dsn,\n  metadata,\n  tunnel,\n) {\n  const sdkInfo = (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.getSdkMetadataForEnvelopeHeader)(metadata);\n\n  /*\n    Note: Due to TS, event.type may be `replay_event`, theoretically.\n    In practice, we never call `createEventEnvelope` with `replay_event` type,\n    and we'd have to adjust a looot of types to make this work properly.\n    We want to avoid casting this around, as that could lead to bugs (e.g. when we add another type)\n    So the safe choice is to really guard against the replay_event type here.\n  */\n  const eventType = event.type && event.type !== 'replay_event' ? event.type : 'event';\n\n  enhanceEventWithSdkInfo(event, metadata?.sdk);\n\n  const envelopeHeaders = (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.createEventEnvelopeHeaders)(event, sdkInfo, tunnel, dsn);\n\n  // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n  // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n  // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n  // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n  delete event.sdkProcessingMetadata;\n\n  const eventItem = [{ type: eventType }, event];\n  return (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.createEnvelope)(envelopeHeaders, [eventItem]);\n}\n\n/**\n * Create envelope from Span item.\n *\n * Takes an optional client and runs spans through `beforeSendSpan` if available.\n */\nfunction createSpanEnvelope(spans, client) {\n  function dscHasRequiredProps(dsc) {\n    return !!dsc.trace_id && !!dsc.public_key;\n  }\n\n  // For the moment we'll obtain the DSC from the first span in the array\n  // This might need to be changed if we permit sending multiple spans from\n  // different segments in one envelope\n  const dsc = (0,_tracing_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_0__.getDynamicSamplingContextFromSpan)(spans[0]);\n\n  const dsn = client?.getDsn();\n  const tunnel = client?.getOptions().tunnel;\n\n  const headers = {\n    sent_at: new Date().toISOString(),\n    ...(dscHasRequiredProps(dsc) && { trace: dsc }),\n    ...(!!tunnel && dsn && { dsn: (0,_utils_dsn_js__WEBPACK_IMPORTED_MODULE_1__.dsnToString)(dsn) }),\n  };\n\n  const beforeSendSpan = client?.getOptions().beforeSendSpan;\n  const convertToSpanJSON = beforeSendSpan\n    ? (span) => {\n        const spanJson = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_3__.spanToJSON)(span);\n        const processedSpan = beforeSendSpan(spanJson);\n\n        if (!processedSpan) {\n          (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_3__.showSpanDropWarning)();\n          return spanJson;\n        }\n\n        return processedSpan;\n      }\n    : _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_3__.spanToJSON;\n\n  const items = [];\n  for (const span of spans) {\n    const spanJson = convertToSpanJSON(span);\n    if (spanJson) {\n      items.push((0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.createSpanEnvelopeItem)(spanJson));\n    }\n  }\n\n  return (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.createEnvelope)(headers, items);\n}\n\n\n//# sourceMappingURL=envelope.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2VudmVsb3BlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBd0Y7QUFDM0M7QUFDNkY7QUFDbkU7O0FBRXZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixtRkFBK0I7QUFDakQ7QUFDQTtBQUNBLHFCQUFxQixjQUFjO0FBQ25DLDZCQUE2QixLQUFLLDBEQUFXLE9BQU87QUFDcEQ7O0FBRUE7QUFDQSxpQ0FBaUMsa0JBQWtCLGdCQUFnQixpQkFBaUI7O0FBRXBGLFNBQVMsa0VBQWM7QUFDdkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLG1GQUErQjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSwwQkFBMEIsOEVBQTBCOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixpQkFBaUI7QUFDeEMsU0FBUyxrRUFBYztBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYyxxR0FBaUM7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNDQUFzQyxZQUFZO0FBQ2xELDZCQUE2QixLQUFLLDBEQUFXLE9BQU87QUFDcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLCtEQUFVO0FBQ25DOztBQUVBO0FBQ0EsVUFBVSx3RUFBbUI7QUFDN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTSwyREFBVTs7QUFFaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsMEVBQXNCO0FBQ3ZDO0FBQ0E7O0FBRUEsU0FBUyxrRUFBYztBQUN2Qjs7QUFFMEU7QUFDMUUiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9lbnZlbG9wZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4gfSBmcm9tICcuL3RyYWNpbmcvZHluYW1pY1NhbXBsaW5nQ29udGV4dC5qcyc7XG5pbXBvcnQgeyBkc25Ub1N0cmluZyB9IGZyb20gJy4vdXRpbHMvZHNuLmpzJztcbmltcG9ydCB7IGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIsIGNyZWF0ZUV2ZW50RW52ZWxvcGVIZWFkZXJzLCBjcmVhdGVFbnZlbG9wZSwgY3JlYXRlU3BhbkVudmVsb3BlSXRlbSB9IGZyb20gJy4vdXRpbHMvZW52ZWxvcGUuanMnO1xuaW1wb3J0IHsgc3BhblRvSlNPTiwgc2hvd1NwYW5Ecm9wV2FybmluZyB9IGZyb20gJy4vdXRpbHMvc3BhblV0aWxzLmpzJztcblxuLyoqXG4gKiBBcHBseSBTZGtJbmZvIChuYW1lLCB2ZXJzaW9uLCBwYWNrYWdlcywgaW50ZWdyYXRpb25zKSB0byB0aGUgY29ycmVzcG9uZGluZyBldmVudCBrZXkuXG4gKiBNZXJnZSB3aXRoIGV4aXN0aW5nIGRhdGEgaWYgYW55LlxuICoqL1xuZnVuY3Rpb24gZW5oYW5jZUV2ZW50V2l0aFNka0luZm8oZXZlbnQsIHNka0luZm8pIHtcbiAgaWYgKCFzZGtJbmZvKSB7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG4gIGV2ZW50LnNkayA9IGV2ZW50LnNkayB8fCB7fTtcbiAgZXZlbnQuc2RrLm5hbWUgPSBldmVudC5zZGsubmFtZSB8fCBzZGtJbmZvLm5hbWU7XG4gIGV2ZW50LnNkay52ZXJzaW9uID0gZXZlbnQuc2RrLnZlcnNpb24gfHwgc2RrSW5mby52ZXJzaW9uO1xuICBldmVudC5zZGsuaW50ZWdyYXRpb25zID0gWy4uLihldmVudC5zZGsuaW50ZWdyYXRpb25zIHx8IFtdKSwgLi4uKHNka0luZm8uaW50ZWdyYXRpb25zIHx8IFtdKV07XG4gIGV2ZW50LnNkay5wYWNrYWdlcyA9IFsuLi4oZXZlbnQuc2RrLnBhY2thZ2VzIHx8IFtdKSwgLi4uKHNka0luZm8ucGFja2FnZXMgfHwgW10pXTtcbiAgcmV0dXJuIGV2ZW50O1xufVxuXG4vKiogQ3JlYXRlcyBhbiBlbnZlbG9wZSBmcm9tIGEgU2Vzc2lvbiAqL1xuZnVuY3Rpb24gY3JlYXRlU2Vzc2lvbkVudmVsb3BlKFxuICBzZXNzaW9uLFxuICBkc24sXG4gIG1ldGFkYXRhLFxuICB0dW5uZWwsXG4pIHtcbiAgY29uc3Qgc2RrSW5mbyA9IGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGEpO1xuICBjb25zdCBlbnZlbG9wZUhlYWRlcnMgPSB7XG4gICAgc2VudF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIC4uLihzZGtJbmZvICYmIHsgc2RrOiBzZGtJbmZvIH0pLFxuICAgIC4uLighIXR1bm5lbCAmJiBkc24gJiYgeyBkc246IGRzblRvU3RyaW5nKGRzbikgfSksXG4gIH07XG5cbiAgY29uc3QgZW52ZWxvcGVJdGVtID1cbiAgICAnYWdncmVnYXRlcycgaW4gc2Vzc2lvbiA/IFt7IHR5cGU6ICdzZXNzaW9ucycgfSwgc2Vzc2lvbl0gOiBbeyB0eXBlOiAnc2Vzc2lvbicgfSwgc2Vzc2lvbi50b0pTT04oKV07XG5cbiAgcmV0dXJuIGNyZWF0ZUVudmVsb3BlKGVudmVsb3BlSGVhZGVycywgW2VudmVsb3BlSXRlbV0pO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBFbnZlbG9wZSBmcm9tIGFuIGV2ZW50LlxuICovXG5mdW5jdGlvbiBjcmVhdGVFdmVudEVudmVsb3BlKFxuICBldmVudCxcbiAgZHNuLFxuICBtZXRhZGF0YSxcbiAgdHVubmVsLFxuKSB7XG4gIGNvbnN0IHNka0luZm8gPSBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhKTtcblxuICAvKlxuICAgIE5vdGU6IER1ZSB0byBUUywgZXZlbnQudHlwZSBtYXkgYmUgYHJlcGxheV9ldmVudGAsIHRoZW9yZXRpY2FsbHkuXG4gICAgSW4gcHJhY3RpY2UsIHdlIG5ldmVyIGNhbGwgYGNyZWF0ZUV2ZW50RW52ZWxvcGVgIHdpdGggYHJlcGxheV9ldmVudGAgdHlwZSxcbiAgICBhbmQgd2UnZCBoYXZlIHRvIGFkanVzdCBhIGxvb290IG9mIHR5cGVzIHRvIG1ha2UgdGhpcyB3b3JrIHByb3Blcmx5LlxuICAgIFdlIHdhbnQgdG8gYXZvaWQgY2FzdGluZyB0aGlzIGFyb3VuZCwgYXMgdGhhdCBjb3VsZCBsZWFkIHRvIGJ1Z3MgKGUuZy4gd2hlbiB3ZSBhZGQgYW5vdGhlciB0eXBlKVxuICAgIFNvIHRoZSBzYWZlIGNob2ljZSBpcyB0byByZWFsbHkgZ3VhcmQgYWdhaW5zdCB0aGUgcmVwbGF5X2V2ZW50IHR5cGUgaGVyZS5cbiAgKi9cbiAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnQudHlwZSAmJiBldmVudC50eXBlICE9PSAncmVwbGF5X2V2ZW50JyA/IGV2ZW50LnR5cGUgOiAnZXZlbnQnO1xuXG4gIGVuaGFuY2VFdmVudFdpdGhTZGtJbmZvKGV2ZW50LCBtZXRhZGF0YT8uc2RrKTtcblxuICBjb25zdCBlbnZlbG9wZUhlYWRlcnMgPSBjcmVhdGVFdmVudEVudmVsb3BlSGVhZGVycyhldmVudCwgc2RrSW5mbywgdHVubmVsLCBkc24pO1xuXG4gIC8vIFByZXZlbnQgdGhpcyBkYXRhICh3aGljaCwgaWYgaXQgZXhpc3RzLCB3YXMgdXNlZCBpbiBlYXJsaWVyIHN0ZXBzIGluIHRoZSBwcm9jZXNzaW5nIHBpcGVsaW5lKSBmcm9tIGJlaW5nIHNlbnQgdG9cbiAgLy8gc2VudHJ5LiAoTm90ZTogT3VyIHVzZSBvZiB0aGlzIHByb3BlcnR5IGNvbWVzIGFuZCBnb2VzIHdpdGggd2hhdGV2ZXIgd2UgbWlnaHQgYmUgZGVidWdnaW5nLCB3aGF0ZXZlciBoYWNrcyB3ZSBtYXlcbiAgLy8gaGF2ZSB0ZW1wb3JhcmlseSBhZGRlZCwgZXRjLiBFdmVuIGlmIHdlIGRvbid0IGhhcHBlbiB0byBiZSB1c2luZyBpdCBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUsIGxldCdzIG5vdCBnZXQgcmlkXG4gIC8vIG9mIHRoaXMgYGRlbGV0ZWAsIGxlc3Qgd2UgbWlzcyBwdXR0aW5nIGl0IGJhY2sgaW4gdGhlIG5leHQgdGltZSB0aGUgcHJvcGVydHkgaXMgaW4gdXNlLilcbiAgZGVsZXRlIGV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YTtcblxuICBjb25zdCBldmVudEl0ZW0gPSBbeyB0eXBlOiBldmVudFR5cGUgfSwgZXZlbnRdO1xuICByZXR1cm4gY3JlYXRlRW52ZWxvcGUoZW52ZWxvcGVIZWFkZXJzLCBbZXZlbnRJdGVtXSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGVudmVsb3BlIGZyb20gU3BhbiBpdGVtLlxuICpcbiAqIFRha2VzIGFuIG9wdGlvbmFsIGNsaWVudCBhbmQgcnVucyBzcGFucyB0aHJvdWdoIGBiZWZvcmVTZW5kU3BhbmAgaWYgYXZhaWxhYmxlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVTcGFuRW52ZWxvcGUoc3BhbnMsIGNsaWVudCkge1xuICBmdW5jdGlvbiBkc2NIYXNSZXF1aXJlZFByb3BzKGRzYykge1xuICAgIHJldHVybiAhIWRzYy50cmFjZV9pZCAmJiAhIWRzYy5wdWJsaWNfa2V5O1xuICB9XG5cbiAgLy8gRm9yIHRoZSBtb21lbnQgd2UnbGwgb2J0YWluIHRoZSBEU0MgZnJvbSB0aGUgZmlyc3Qgc3BhbiBpbiB0aGUgYXJyYXlcbiAgLy8gVGhpcyBtaWdodCBuZWVkIHRvIGJlIGNoYW5nZWQgaWYgd2UgcGVybWl0IHNlbmRpbmcgbXVsdGlwbGUgc3BhbnMgZnJvbVxuICAvLyBkaWZmZXJlbnQgc2VnbWVudHMgaW4gb25lIGVudmVsb3BlXG4gIGNvbnN0IGRzYyA9IGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3BhbihzcGFuc1swXSk7XG5cbiAgY29uc3QgZHNuID0gY2xpZW50Py5nZXREc24oKTtcbiAgY29uc3QgdHVubmVsID0gY2xpZW50Py5nZXRPcHRpb25zKCkudHVubmVsO1xuXG4gIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgc2VudF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIC4uLihkc2NIYXNSZXF1aXJlZFByb3BzKGRzYykgJiYgeyB0cmFjZTogZHNjIH0pLFxuICAgIC4uLighIXR1bm5lbCAmJiBkc24gJiYgeyBkc246IGRzblRvU3RyaW5nKGRzbikgfSksXG4gIH07XG5cbiAgY29uc3QgYmVmb3JlU2VuZFNwYW4gPSBjbGllbnQ/LmdldE9wdGlvbnMoKS5iZWZvcmVTZW5kU3BhbjtcbiAgY29uc3QgY29udmVydFRvU3BhbkpTT04gPSBiZWZvcmVTZW5kU3BhblxuICAgID8gKHNwYW4pID0+IHtcbiAgICAgICAgY29uc3Qgc3Bhbkpzb24gPSBzcGFuVG9KU09OKHNwYW4pO1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRTcGFuID0gYmVmb3JlU2VuZFNwYW4oc3Bhbkpzb24pO1xuXG4gICAgICAgIGlmICghcHJvY2Vzc2VkU3Bhbikge1xuICAgICAgICAgIHNob3dTcGFuRHJvcFdhcm5pbmcoKTtcbiAgICAgICAgICByZXR1cm4gc3Bhbkpzb247XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkU3BhbjtcbiAgICAgIH1cbiAgICA6IHNwYW5Ub0pTT047XG5cbiAgY29uc3QgaXRlbXMgPSBbXTtcbiAgZm9yIChjb25zdCBzcGFuIG9mIHNwYW5zKSB7XG4gICAgY29uc3Qgc3Bhbkpzb24gPSBjb252ZXJ0VG9TcGFuSlNPTihzcGFuKTtcbiAgICBpZiAoc3Bhbkpzb24pIHtcbiAgICAgIGl0ZW1zLnB1c2goY3JlYXRlU3BhbkVudmVsb3BlSXRlbShzcGFuSnNvbikpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVFbnZlbG9wZShoZWFkZXJzLCBpdGVtcyk7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZUV2ZW50RW52ZWxvcGUsIGNyZWF0ZVNlc3Npb25FbnZlbG9wZSwgY3JlYXRlU3BhbkVudmVsb3BlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbnZlbG9wZS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/envelope.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/eventProcessors.js":
/*!*******************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/eventProcessors.js ***!
  \*******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   notifyEventProcessors: () => (/* binding */ notifyEventProcessors)\n/* harmony export */ });\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_is_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n/* harmony import */ var _utils_syncpromise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/syncpromise.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/syncpromise.js\");\n\n\n\n\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nfunction notifyEventProcessors(\n  processors,\n  event,\n  hint,\n  index = 0,\n) {\n  return new _utils_syncpromise_js__WEBPACK_IMPORTED_MODULE_3__.SyncPromise((resolve, reject) => {\n    const processor = processors[index];\n    if (event === null || typeof processor !== 'function') {\n      resolve(event);\n    } else {\n      const result = processor({ ...event }, hint) ;\n\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && processor.id && result === null && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.log(`Event processor \"${processor.id}\" dropped event`);\n\n      if ((0,_utils_is_js__WEBPACK_IMPORTED_MODULE_2__.isThenable)(result)) {\n        void result\n          .then(final => notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n          .then(null, reject);\n      } else {\n        void notifyEventProcessors(processors, result, hint, index + 1)\n          .then(resolve)\n          .then(null, reject);\n      }\n    }\n  });\n}\n\n\n//# sourceMappingURL=eventProcessors.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2V2ZW50UHJvY2Vzc29ycy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUErQztBQUNDO0FBQ0w7QUFDVTs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSw4REFBVztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04saUNBQWlDLFVBQVU7O0FBRTNDLE1BQU0sd0RBQVcsdUNBQXVDLHlEQUFLLHlCQUF5QixhQUFhOztBQUVuRyxVQUFVLHdEQUFVO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVpQztBQUNqQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2V2ZW50UHJvY2Vzc29ycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4vZGVidWctYnVpbGQuanMnO1xuaW1wb3J0IHsgZGVidWcgfSBmcm9tICcuL3V0aWxzL2RlYnVnLWxvZ2dlci5qcyc7XG5pbXBvcnQgeyBpc1RoZW5hYmxlIH0gZnJvbSAnLi91dGlscy9pcy5qcyc7XG5pbXBvcnQgeyBTeW5jUHJvbWlzZSB9IGZyb20gJy4vdXRpbHMvc3luY3Byb21pc2UuanMnO1xuXG4vKipcbiAqIFByb2Nlc3MgYW4gYXJyYXkgb2YgZXZlbnQgcHJvY2Vzc29ycywgcmV0dXJuaW5nIHRoZSBwcm9jZXNzZWQgZXZlbnQgKG9yIGBudWxsYCBpZiB0aGUgZXZlbnQgd2FzIGRyb3BwZWQpLlxuICovXG5mdW5jdGlvbiBub3RpZnlFdmVudFByb2Nlc3NvcnMoXG4gIHByb2Nlc3NvcnMsXG4gIGV2ZW50LFxuICBoaW50LFxuICBpbmRleCA9IDAsXG4pIHtcbiAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcHJvY2Vzc29yID0gcHJvY2Vzc29yc1tpbmRleF07XG4gICAgaWYgKGV2ZW50ID09PSBudWxsIHx8IHR5cGVvZiBwcm9jZXNzb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlc29sdmUoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBwcm9jZXNzb3IoeyAuLi5ldmVudCB9LCBoaW50KSA7XG5cbiAgICAgIERFQlVHX0JVSUxEICYmIHByb2Nlc3Nvci5pZCAmJiByZXN1bHQgPT09IG51bGwgJiYgZGVidWcubG9nKGBFdmVudCBwcm9jZXNzb3IgXCIke3Byb2Nlc3Nvci5pZH1cIiBkcm9wcGVkIGV2ZW50YCk7XG5cbiAgICAgIGlmIChpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgdm9pZCByZXN1bHRcbiAgICAgICAgICAudGhlbihmaW5hbCA9PiBub3RpZnlFdmVudFByb2Nlc3NvcnMocHJvY2Vzc29ycywgZmluYWwsIGhpbnQsIGluZGV4ICsgMSkudGhlbihyZXNvbHZlKSlcbiAgICAgICAgICAudGhlbihudWxsLCByZWplY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm9pZCBub3RpZnlFdmVudFByb2Nlc3NvcnMocHJvY2Vzc29ycywgcmVzdWx0LCBoaW50LCBpbmRleCArIDEpXG4gICAgICAgICAgLnRoZW4ocmVzb2x2ZSlcbiAgICAgICAgICAudGhlbihudWxsLCByZWplY3QpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCB7IG5vdGlmeUV2ZW50UHJvY2Vzc29ycyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXZlbnRQcm9jZXNzb3JzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/eventProcessors.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/exports.js":
/*!***********************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/exports.js ***!
  \***********************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addEventProcessor: () => (/* binding */ addEventProcessor),\n/* harmony export */   captureCheckIn: () => (/* binding */ captureCheckIn),\n/* harmony export */   captureEvent: () => (/* binding */ captureEvent),\n/* harmony export */   captureException: () => (/* binding */ captureException),\n/* harmony export */   captureMessage: () => (/* binding */ captureMessage),\n/* harmony export */   captureSession: () => (/* binding */ captureSession),\n/* harmony export */   close: () => (/* binding */ close),\n/* harmony export */   endSession: () => (/* binding */ endSession),\n/* harmony export */   flush: () => (/* binding */ flush),\n/* harmony export */   isEnabled: () => (/* binding */ isEnabled),\n/* harmony export */   isInitialized: () => (/* binding */ isInitialized),\n/* harmony export */   lastEventId: () => (/* binding */ lastEventId),\n/* harmony export */   setContext: () => (/* binding */ setContext),\n/* harmony export */   setExtra: () => (/* binding */ setExtra),\n/* harmony export */   setExtras: () => (/* binding */ setExtras),\n/* harmony export */   setTag: () => (/* binding */ setTag),\n/* harmony export */   setTags: () => (/* binding */ setTags),\n/* harmony export */   setUser: () => (/* binding */ setUser),\n/* harmony export */   startSession: () => (/* binding */ startSession),\n/* harmony export */   withMonitor: () => (/* binding */ withMonitor)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _session_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./session.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/session.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_is_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n/* harmony import */ var _utils_misc_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/misc.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/misc.js\");\n/* harmony import */ var _utils_prepareEvent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/prepareEvent.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/prepareEvent.js\");\n/* harmony import */ var _utils_time_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/time.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/time.js\");\n/* harmony import */ var _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n\n\n\n\n\n\n\n\n\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nfunction captureException(exception, hint) {\n  return (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)().captureException(exception, (0,_utils_prepareEvent_js__WEBPACK_IMPORTED_MODULE_6__.parseEventHintOrCaptureContext)(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nfunction captureMessage(message, captureContext) {\n  // This is necessary to provide explicit scopes upgrade, without changing the original\n  // arity of the `captureMessage(message, level)` method.\n  const level = typeof captureContext === 'string' ? captureContext : undefined;\n  const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n  return (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nfunction captureEvent(event, hint) {\n  return (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)().captureEvent(event, hint);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\nfunction setContext(name, context) {\n  (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nfunction setExtras(extras) {\n  (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nfunction setExtra(key, extra) {\n  (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nfunction setTags(tags) {\n  (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nfunction setTag(key, value) {\n  (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nfunction setUser(user) {\n  (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)().setUser(user);\n}\n\n/**\n * The last error event id of the isolation scope.\n *\n * Warning: This function really returns the last recorded error event id on the current\n * isolation scope. If you call this function after handling a certain error and another error\n * is captured in between, the last one is returned instead of the one you might expect.\n * Also, ids of events that were never sent to Sentry (for example because\n * they were dropped in `beforeSend`) could be returned.\n *\n * @returns The last event id of the isolation scope.\n */\nfunction lastEventId() {\n  return (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)().lastEventId();\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction captureCheckIn(checkIn, upsertMonitorConfig) {\n  const scope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n  const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  if (!client) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_3__.debug.warn('Cannot capture check-in. No client defined.');\n  } else if (!client.captureCheckIn) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_3__.debug.warn('Cannot capture check-in. Client does not support sending check-ins.');\n  } else {\n    return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n  }\n\n  return (0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_5__.uuid4)();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param callback Callback to be monitored\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction withMonitor(\n  monitorSlug,\n  callback,\n  upsertMonitorConfig,\n) {\n  const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n  const now = (0,_utils_time_js__WEBPACK_IMPORTED_MODULE_7__.timestampInSeconds)();\n\n  function finishCheckIn(status) {\n    captureCheckIn({ monitorSlug, status, checkInId, duration: (0,_utils_time_js__WEBPACK_IMPORTED_MODULE_7__.timestampInSeconds)() - now });\n  }\n\n  return (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.withIsolationScope)(() => {\n    let maybePromiseResult;\n    try {\n      maybePromiseResult = callback();\n    } catch (e) {\n      finishCheckIn('error');\n      throw e;\n    }\n\n    if ((0,_utils_is_js__WEBPACK_IMPORTED_MODULE_4__.isThenable)(maybePromiseResult)) {\n      return maybePromiseResult.then(\n        r => {\n          finishCheckIn('ok');\n          return r;\n        },\n        e => {\n          finishCheckIn('error');\n          throw e;\n        },\n      ) ;\n    }\n    finishCheckIn('ok');\n\n    return maybePromiseResult;\n  });\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function flush(timeout) {\n  const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  if (client) {\n    return client.flush(timeout);\n  }\n  _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_3__.debug.warn('Cannot flush events. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function close(timeout) {\n  const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  if (client) {\n    return client.close(timeout);\n  }\n  _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_3__.debug.warn('Cannot flush events and disable SDK. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nfunction isInitialized() {\n  return !!(0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n}\n\n/** If the SDK is initialized & enabled. */\nfunction isEnabled() {\n  const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  return client?.getOptions().enabled !== false && !!client?.getTransport();\n}\n\n/**\n * Add an event processor.\n * This will be added to the current isolation scope, ensuring any event that is processed in the current execution\n * context will have the processor applied.\n */\nfunction addEventProcessor(callback) {\n  (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)().addEventProcessor(callback);\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nfunction startSession(context) {\n  const isolationScope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)();\n  const currentScope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n\n  // Will fetch userAgent if called from browser sdk\n  const { userAgent } = _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_8__.GLOBAL_OBJ.navigator || {};\n\n  const session = (0,_session_js__WEBPACK_IMPORTED_MODULE_2__.makeSession)({\n    user: currentScope.getUser() || isolationScope.getUser(),\n    ...(userAgent && { userAgent }),\n    ...context,\n  });\n\n  // End existing session if there's one\n  const currentSession = isolationScope.getSession();\n  if (currentSession?.status === 'ok') {\n    (0,_session_js__WEBPACK_IMPORTED_MODULE_2__.updateSession)(currentSession, { status: 'exited' });\n  }\n\n  endSession();\n\n  // Afterwards we set the new session on the scope\n  isolationScope.setSession(session);\n\n  return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nfunction endSession() {\n  const isolationScope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)();\n  const currentScope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session) {\n    (0,_session_js__WEBPACK_IMPORTED_MODULE_2__.closeSession)(session);\n  }\n  _sendSessionUpdate();\n\n  // the session is over; take it off of the scope\n  isolationScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate() {\n  const isolationScope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)();\n  const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  const session = isolationScope.getSession();\n  if (session && client) {\n    client.captureSession(session);\n  }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n *            Defaults to `false`.\n */\nfunction captureSession(end = false) {\n  // both send the update and pull the session from the scope\n  if (end) {\n    endSession();\n    return;\n  }\n\n  // only send the update\n  _sendSessionUpdate();\n}\n\n\n//# sourceMappingURL=exports.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2V4cG9ydHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBdUc7QUFDeEQ7QUFDeUI7QUFDeEI7QUFDTDtBQUNIO0FBQ2lDO0FBQ3BCO0FBQ0g7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGtFQUFlLCtCQUErQixzRkFBOEI7QUFDckY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxpQkFBaUI7QUFDMUUsU0FBUyxrRUFBZTtBQUN4Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxrRUFBZTtBQUN4Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG9FQUFpQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxvRUFBaUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxvRUFBaUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsb0VBQWlCO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsb0VBQWlCO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsb0VBQWlCO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsb0VBQWlCO0FBQzFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isa0VBQWU7QUFDL0IsaUJBQWlCLDREQUFTO0FBQzFCO0FBQ0EsSUFBSSx3REFBVyxJQUFJLHlEQUFLO0FBQ3hCLElBQUk7QUFDSixJQUFJLHdEQUFXLElBQUkseURBQUs7QUFDeEIsSUFBSTtBQUNKO0FBQ0E7O0FBRUEsU0FBUyxxREFBSztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLG9DQUFvQztBQUN6RSxjQUFjLGtFQUFrQjs7QUFFaEM7QUFDQSxxQkFBcUIsMENBQTBDLGtFQUFrQixVQUFVO0FBQzNGOztBQUVBLFNBQVMscUVBQWtCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUEsUUFBUSx3REFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsK0RBQStELG1CQUFtQjtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw0REFBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQSxFQUFFLHdEQUFXLElBQUkseURBQUs7QUFDdEI7QUFDQTs7QUFFQTtBQUNBLCtEQUErRCxtQkFBbUI7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsNERBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0EsRUFBRSx3REFBVyxJQUFJLHlEQUFLO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDREQUFTO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsNERBQVM7QUFDMUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG9FQUFpQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLG9FQUFpQjtBQUMxQyx1QkFBdUIsa0VBQWU7O0FBRXRDO0FBQ0EsVUFBVSxZQUFZLEVBQUUsMkRBQVU7O0FBRWxDLGtCQUFrQix3REFBVztBQUM3QjtBQUNBLHVCQUF1QixXQUFXO0FBQ2xDO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxJQUFJLDBEQUFhLG1CQUFtQixrQkFBa0I7QUFDdEQ7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLG9FQUFpQjtBQUMxQyx1QkFBdUIsa0VBQWU7O0FBRXRDO0FBQ0E7QUFDQSxJQUFJLHlEQUFZO0FBQ2hCO0FBQ0E7O0FBRUEsMEJBQTBCO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsb0VBQWlCO0FBQzFDLGlCQUFpQiw0REFBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRW9RO0FBQ3BRIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vZXhwb3J0cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDdXJyZW50U2NvcGUsIGdldENsaWVudCwgd2l0aElzb2xhdGlvblNjb3BlLCBnZXRJc29sYXRpb25TY29wZSB9IGZyb20gJy4vY3VycmVudFNjb3Blcy5qcyc7XG5pbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4vZGVidWctYnVpbGQuanMnO1xuaW1wb3J0IHsgbWFrZVNlc3Npb24sIHVwZGF0ZVNlc3Npb24sIGNsb3NlU2Vzc2lvbiB9IGZyb20gJy4vc2Vzc2lvbi5qcyc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4vdXRpbHMvZGVidWctbG9nZ2VyLmpzJztcbmltcG9ydCB7IGlzVGhlbmFibGUgfSBmcm9tICcuL3V0aWxzL2lzLmpzJztcbmltcG9ydCB7IHV1aWQ0IH0gZnJvbSAnLi91dGlscy9taXNjLmpzJztcbmltcG9ydCB7IHBhcnNlRXZlbnRIaW50T3JDYXB0dXJlQ29udGV4dCB9IGZyb20gJy4vdXRpbHMvcHJlcGFyZUV2ZW50LmpzJztcbmltcG9ydCB7IHRpbWVzdGFtcEluU2Vjb25kcyB9IGZyb20gJy4vdXRpbHMvdGltZS5qcyc7XG5pbXBvcnQgeyBHTE9CQUxfT0JKIH0gZnJvbSAnLi91dGlscy93b3JsZHdpZGUuanMnO1xuXG4vKipcbiAqIENhcHR1cmVzIGFuIGV4Y2VwdGlvbiBldmVudCBhbmQgc2VuZHMgaXQgdG8gU2VudHJ5LlxuICpcbiAqIEBwYXJhbSBleGNlcHRpb24gVGhlIGV4Y2VwdGlvbiB0byBjYXB0dXJlLlxuICogQHBhcmFtIGhpbnQgT3B0aW9uYWwgYWRkaXRpb25hbCBkYXRhIHRvIGF0dGFjaCB0byB0aGUgU2VudHJ5IGV2ZW50LlxuICogQHJldHVybnMgdGhlIGlkIG9mIHRoZSBjYXB0dXJlZCBTZW50cnkgZXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uLCBoaW50KSB7XG4gIHJldHVybiBnZXRDdXJyZW50U2NvcGUoKS5jYXB0dXJlRXhjZXB0aW9uKGV4Y2VwdGlvbiwgcGFyc2VFdmVudEhpbnRPckNhcHR1cmVDb250ZXh0KGhpbnQpKTtcbn1cblxuLyoqXG4gKiBDYXB0dXJlcyBhIG1lc3NhZ2UgZXZlbnQgYW5kIHNlbmRzIGl0IHRvIFNlbnRyeS5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBzZW5kIHRvIFNlbnRyeS5cbiAqIEBwYXJhbSBjYXB0dXJlQ29udGV4dCBEZWZpbmUgdGhlIGxldmVsIG9mIHRoZSBtZXNzYWdlIG9yIHBhc3MgaW4gYWRkaXRpb25hbCBkYXRhIHRvIGF0dGFjaCB0byB0aGUgbWVzc2FnZS5cbiAqIEByZXR1cm5zIHRoZSBpZCBvZiB0aGUgY2FwdHVyZWQgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSwgY2FwdHVyZUNvbnRleHQpIHtcbiAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gcHJvdmlkZSBleHBsaWNpdCBzY29wZXMgdXBncmFkZSwgd2l0aG91dCBjaGFuZ2luZyB0aGUgb3JpZ2luYWxcbiAgLy8gYXJpdHkgb2YgdGhlIGBjYXB0dXJlTWVzc2FnZShtZXNzYWdlLCBsZXZlbClgIG1ldGhvZC5cbiAgY29uc3QgbGV2ZWwgPSB0eXBlb2YgY2FwdHVyZUNvbnRleHQgPT09ICdzdHJpbmcnID8gY2FwdHVyZUNvbnRleHQgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGNvbnRleHQgPSB0eXBlb2YgY2FwdHVyZUNvbnRleHQgIT09ICdzdHJpbmcnID8geyBjYXB0dXJlQ29udGV4dCB9IDogdW5kZWZpbmVkO1xuICByZXR1cm4gZ2V0Q3VycmVudFNjb3BlKCkuY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSwgbGV2ZWwsIGNvbnRleHQpO1xufVxuXG4vKipcbiAqIENhcHR1cmVzIGEgbWFudWFsbHkgY3JlYXRlZCBldmVudCBhbmQgc2VuZHMgaXQgdG8gU2VudHJ5LlxuICpcbiAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdG8gc2VuZCB0byBTZW50cnkuXG4gKiBAcGFyYW0gaGludCBPcHRpb25hbCBhZGRpdGlvbmFsIGRhdGEgdG8gYXR0YWNoIHRvIHRoZSBTZW50cnkgZXZlbnQuXG4gKiBAcmV0dXJucyB0aGUgaWQgb2YgdGhlIGNhcHR1cmVkIGV2ZW50LlxuICovXG5mdW5jdGlvbiBjYXB0dXJlRXZlbnQoZXZlbnQsIGhpbnQpIHtcbiAgcmV0dXJuIGdldEN1cnJlbnRTY29wZSgpLmNhcHR1cmVFdmVudChldmVudCwgaGludCk7XG59XG5cbi8qKlxuICogU2V0cyBjb250ZXh0IGRhdGEgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cbiAqIEBwYXJhbSBuYW1lIG9mIHRoZSBjb250ZXh0XG4gKiBAcGFyYW0gY29udGV4dCBBbnkga2luZCBvZiBkYXRhLiBUaGlzIGRhdGEgd2lsbCBiZSBub3JtYWxpemVkLlxuICovXG5mdW5jdGlvbiBzZXRDb250ZXh0KG5hbWUsIGNvbnRleHQpIHtcbiAgZ2V0SXNvbGF0aW9uU2NvcGUoKS5zZXRDb250ZXh0KG5hbWUsIGNvbnRleHQpO1xufVxuXG4vKipcbiAqIFNldCBhbiBvYmplY3QgdGhhdCB3aWxsIGJlIG1lcmdlZCBzZW50IGFzIGV4dHJhIGRhdGEgd2l0aCB0aGUgZXZlbnQuXG4gKiBAcGFyYW0gZXh0cmFzIEV4dHJhcyBvYmplY3QgdG8gbWVyZ2UgaW50byBjdXJyZW50IGNvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIHNldEV4dHJhcyhleHRyYXMpIHtcbiAgZ2V0SXNvbGF0aW9uU2NvcGUoKS5zZXRFeHRyYXMoZXh0cmFzKTtcbn1cblxuLyoqXG4gKiBTZXQga2V5OnZhbHVlIHRoYXQgd2lsbCBiZSBzZW50IGFzIGV4dHJhIGRhdGEgd2l0aCB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ga2V5IFN0cmluZyBvZiBleHRyYVxuICogQHBhcmFtIGV4dHJhIEFueSBraW5kIG9mIGRhdGEuIFRoaXMgZGF0YSB3aWxsIGJlIG5vcm1hbGl6ZWQuXG4gKi9cbmZ1bmN0aW9uIHNldEV4dHJhKGtleSwgZXh0cmEpIHtcbiAgZ2V0SXNvbGF0aW9uU2NvcGUoKS5zZXRFeHRyYShrZXksIGV4dHJhKTtcbn1cblxuLyoqXG4gKiBTZXQgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBtZXJnZWQgc2VudCBhcyB0YWdzIGRhdGEgd2l0aCB0aGUgZXZlbnQuXG4gKiBAcGFyYW0gdGFncyBUYWdzIGNvbnRleHQgb2JqZWN0IHRvIG1lcmdlIGludG8gY3VycmVudCBjb250ZXh0LlxuICovXG5mdW5jdGlvbiBzZXRUYWdzKHRhZ3MpIHtcbiAgZ2V0SXNvbGF0aW9uU2NvcGUoKS5zZXRUYWdzKHRhZ3MpO1xufVxuXG4vKipcbiAqIFNldCBrZXk6dmFsdWUgdGhhdCB3aWxsIGJlIHNlbnQgYXMgdGFncyBkYXRhIHdpdGggdGhlIGV2ZW50LlxuICpcbiAqIENhbiBhbHNvIGJlIHVzZWQgdG8gdW5zZXQgYSB0YWcsIGJ5IHBhc3NpbmcgYHVuZGVmaW5lZGAuXG4gKlxuICogQHBhcmFtIGtleSBTdHJpbmcga2V5IG9mIHRhZ1xuICogQHBhcmFtIHZhbHVlIFZhbHVlIG9mIHRhZ1xuICovXG5mdW5jdGlvbiBzZXRUYWcoa2V5LCB2YWx1ZSkge1xuICBnZXRJc29sYXRpb25TY29wZSgpLnNldFRhZyhrZXksIHZhbHVlKTtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIHVzZXIgY29udGV4dCBpbmZvcm1hdGlvbiBmb3IgZnV0dXJlIGV2ZW50cy5cbiAqXG4gKiBAcGFyYW0gdXNlciBVc2VyIGNvbnRleHQgb2JqZWN0IHRvIGJlIHNldCBpbiB0aGUgY3VycmVudCBjb250ZXh0LiBQYXNzIGBudWxsYCB0byB1bnNldCB0aGUgdXNlci5cbiAqL1xuZnVuY3Rpb24gc2V0VXNlcih1c2VyKSB7XG4gIGdldElzb2xhdGlvblNjb3BlKCkuc2V0VXNlcih1c2VyKTtcbn1cblxuLyoqXG4gKiBUaGUgbGFzdCBlcnJvciBldmVudCBpZCBvZiB0aGUgaXNvbGF0aW9uIHNjb3BlLlxuICpcbiAqIFdhcm5pbmc6IFRoaXMgZnVuY3Rpb24gcmVhbGx5IHJldHVybnMgdGhlIGxhc3QgcmVjb3JkZWQgZXJyb3IgZXZlbnQgaWQgb24gdGhlIGN1cnJlbnRcbiAqIGlzb2xhdGlvbiBzY29wZS4gSWYgeW91IGNhbGwgdGhpcyBmdW5jdGlvbiBhZnRlciBoYW5kbGluZyBhIGNlcnRhaW4gZXJyb3IgYW5kIGFub3RoZXIgZXJyb3JcbiAqIGlzIGNhcHR1cmVkIGluIGJldHdlZW4sIHRoZSBsYXN0IG9uZSBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIHRoZSBvbmUgeW91IG1pZ2h0IGV4cGVjdC5cbiAqIEFsc28sIGlkcyBvZiBldmVudHMgdGhhdCB3ZXJlIG5ldmVyIHNlbnQgdG8gU2VudHJ5IChmb3IgZXhhbXBsZSBiZWNhdXNlXG4gKiB0aGV5IHdlcmUgZHJvcHBlZCBpbiBgYmVmb3JlU2VuZGApIGNvdWxkIGJlIHJldHVybmVkLlxuICpcbiAqIEByZXR1cm5zIFRoZSBsYXN0IGV2ZW50IGlkIG9mIHRoZSBpc29sYXRpb24gc2NvcGUuXG4gKi9cbmZ1bmN0aW9uIGxhc3RFdmVudElkKCkge1xuICByZXR1cm4gZ2V0SXNvbGF0aW9uU2NvcGUoKS5sYXN0RXZlbnRJZCgpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGNyb24gbW9uaXRvciBjaGVjayBpbiBhbmQgc2VuZCBpdCB0byBTZW50cnkuXG4gKlxuICogQHBhcmFtIGNoZWNrSW4gQW4gb2JqZWN0IHRoYXQgZGVzY3JpYmVzIGEgY2hlY2sgaW4uXG4gKiBAcGFyYW0gdXBzZXJ0TW9uaXRvckNvbmZpZyBBbiBvcHRpb25hbCBvYmplY3QgdGhhdCBkZXNjcmliZXMgYSBtb25pdG9yIGNvbmZpZy4gVXNlIHRoaXMgaWYgeW91IHdhbnRcbiAqIHRvIGNyZWF0ZSBhIG1vbml0b3IgYXV0b21hdGljYWxseSB3aGVuIHNlbmRpbmcgYSBjaGVjayBpbi5cbiAqL1xuZnVuY3Rpb24gY2FwdHVyZUNoZWNrSW4oY2hlY2tJbiwgdXBzZXJ0TW9uaXRvckNvbmZpZykge1xuICBjb25zdCBzY29wZSA9IGdldEN1cnJlbnRTY29wZSgpO1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcbiAgaWYgKCFjbGllbnQpIHtcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy53YXJuKCdDYW5ub3QgY2FwdHVyZSBjaGVjay1pbi4gTm8gY2xpZW50IGRlZmluZWQuJyk7XG4gIH0gZWxzZSBpZiAoIWNsaWVudC5jYXB0dXJlQ2hlY2tJbikge1xuICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLndhcm4oJ0Nhbm5vdCBjYXB0dXJlIGNoZWNrLWluLiBDbGllbnQgZG9lcyBub3Qgc3VwcG9ydCBzZW5kaW5nIGNoZWNrLWlucy4nKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2xpZW50LmNhcHR1cmVDaGVja0luKGNoZWNrSW4sIHVwc2VydE1vbml0b3JDb25maWcsIHNjb3BlKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkNCgpO1xufVxuXG4vKipcbiAqIFdyYXBzIGEgY2FsbGJhY2sgd2l0aCBhIGNyb24gbW9uaXRvciBjaGVjayBpbi4gVGhlIGNoZWNrIGluIHdpbGwgYmUgc2VudCB0byBTZW50cnkgd2hlbiB0aGUgY2FsbGJhY2sgZmluaXNoZXMuXG4gKlxuICogQHBhcmFtIG1vbml0b3JTbHVnIFRoZSBkaXN0aW5jdCBzbHVnIG9mIHRoZSBtb25pdG9yLlxuICogQHBhcmFtIGNhbGxiYWNrIENhbGxiYWNrIHRvIGJlIG1vbml0b3JlZFxuICogQHBhcmFtIHVwc2VydE1vbml0b3JDb25maWcgQW4gb3B0aW9uYWwgb2JqZWN0IHRoYXQgZGVzY3JpYmVzIGEgbW9uaXRvciBjb25maWcuIFVzZSB0aGlzIGlmIHlvdSB3YW50XG4gKiB0byBjcmVhdGUgYSBtb25pdG9yIGF1dG9tYXRpY2FsbHkgd2hlbiBzZW5kaW5nIGEgY2hlY2sgaW4uXG4gKi9cbmZ1bmN0aW9uIHdpdGhNb25pdG9yKFxuICBtb25pdG9yU2x1ZyxcbiAgY2FsbGJhY2ssXG4gIHVwc2VydE1vbml0b3JDb25maWcsXG4pIHtcbiAgY29uc3QgY2hlY2tJbklkID0gY2FwdHVyZUNoZWNrSW4oeyBtb25pdG9yU2x1Zywgc3RhdHVzOiAnaW5fcHJvZ3Jlc3MnIH0sIHVwc2VydE1vbml0b3JDb25maWcpO1xuICBjb25zdCBub3cgPSB0aW1lc3RhbXBJblNlY29uZHMoKTtcblxuICBmdW5jdGlvbiBmaW5pc2hDaGVja0luKHN0YXR1cykge1xuICAgIGNhcHR1cmVDaGVja0luKHsgbW9uaXRvclNsdWcsIHN0YXR1cywgY2hlY2tJbklkLCBkdXJhdGlvbjogdGltZXN0YW1wSW5TZWNvbmRzKCkgLSBub3cgfSk7XG4gIH1cblxuICByZXR1cm4gd2l0aElzb2xhdGlvblNjb3BlKCgpID0+IHtcbiAgICBsZXQgbWF5YmVQcm9taXNlUmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICBtYXliZVByb21pc2VSZXN1bHQgPSBjYWxsYmFjaygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGZpbmlzaENoZWNrSW4oJ2Vycm9yJyk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIGlmIChpc1RoZW5hYmxlKG1heWJlUHJvbWlzZVJlc3VsdCkpIHtcbiAgICAgIHJldHVybiBtYXliZVByb21pc2VSZXN1bHQudGhlbihcbiAgICAgICAgciA9PiB7XG4gICAgICAgICAgZmluaXNoQ2hlY2tJbignb2snKTtcbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSxcbiAgICAgICAgZSA9PiB7XG4gICAgICAgICAgZmluaXNoQ2hlY2tJbignZXJyb3InKTtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9LFxuICAgICAgKSA7XG4gICAgfVxuICAgIGZpbmlzaENoZWNrSW4oJ29rJyk7XG5cbiAgICByZXR1cm4gbWF5YmVQcm9taXNlUmVzdWx0O1xuICB9KTtcbn1cblxuLyoqXG4gKiBDYWxsIGBmbHVzaCgpYCBvbiB0aGUgY3VycmVudCBjbGllbnQsIGlmIHRoZXJlIGlzIG9uZS4gU2VlIHtAbGluayBDbGllbnQuZmx1c2h9LlxuICpcbiAqIEBwYXJhbSB0aW1lb3V0IE1heGltdW0gdGltZSBpbiBtcyB0aGUgY2xpZW50IHNob3VsZCB3YWl0IHRvIGZsdXNoIGl0cyBldmVudCBxdWV1ZS4gT21pdHRpbmcgdGhpcyBwYXJhbWV0ZXIgd2lsbCBjYXVzZVxuICogdGhlIGNsaWVudCB0byB3YWl0IHVudGlsIGFsbCBldmVudHMgYXJlIHNlbnQgYmVmb3JlIHJlc29sdmluZyB0aGUgcHJvbWlzZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB0byBgdHJ1ZWAgaWYgdGhlIHF1ZXVlIHN1Y2Nlc3NmdWxseSBkcmFpbnMgYmVmb3JlIHRoZSB0aW1lb3V0LCBvciBgZmFsc2VgIGlmIGl0XG4gKiBkb2Vzbid0IChvciBpZiB0aGVyZSdzIG5vIGNsaWVudCBkZWZpbmVkKS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmx1c2godGltZW91dCkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcbiAgaWYgKGNsaWVudCkge1xuICAgIHJldHVybiBjbGllbnQuZmx1c2godGltZW91dCk7XG4gIH1cbiAgREVCVUdfQlVJTEQgJiYgZGVidWcud2FybignQ2Fubm90IGZsdXNoIGV2ZW50cy4gTm8gY2xpZW50IGRlZmluZWQuJyk7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xufVxuXG4vKipcbiAqIENhbGwgYGNsb3NlKClgIG9uIHRoZSBjdXJyZW50IGNsaWVudCwgaWYgdGhlcmUgaXMgb25lLiBTZWUge0BsaW5rIENsaWVudC5jbG9zZX0uXG4gKlxuICogQHBhcmFtIHRpbWVvdXQgTWF4aW11bSB0aW1lIGluIG1zIHRoZSBjbGllbnQgc2hvdWxkIHdhaXQgdG8gZmx1c2ggaXRzIGV2ZW50IHF1ZXVlIGJlZm9yZSBzaHV0dGluZyBkb3duLiBPbWl0dGluZyB0aGlzXG4gKiBwYXJhbWV0ZXIgd2lsbCBjYXVzZSB0aGUgY2xpZW50IHRvIHdhaXQgdW50aWwgYWxsIGV2ZW50cyBhcmUgc2VudCBiZWZvcmUgZGlzYWJsaW5nIGl0c2VsZi5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB0byBgdHJ1ZWAgaWYgdGhlIHF1ZXVlIHN1Y2Nlc3NmdWxseSBkcmFpbnMgYmVmb3JlIHRoZSB0aW1lb3V0LCBvciBgZmFsc2VgIGlmIGl0XG4gKiBkb2Vzbid0IChvciBpZiB0aGVyZSdzIG5vIGNsaWVudCBkZWZpbmVkKS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2xvc2UodGltZW91dCkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcbiAgaWYgKGNsaWVudCkge1xuICAgIHJldHVybiBjbGllbnQuY2xvc2UodGltZW91dCk7XG4gIH1cbiAgREVCVUdfQlVJTEQgJiYgZGVidWcud2FybignQ2Fubm90IGZsdXNoIGV2ZW50cyBhbmQgZGlzYWJsZSBTREsuIE5vIGNsaWVudCBkZWZpbmVkLicpO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgU2VudHJ5IGhhcyBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkLlxuICovXG5mdW5jdGlvbiBpc0luaXRpYWxpemVkKCkge1xuICByZXR1cm4gISFnZXRDbGllbnQoKTtcbn1cblxuLyoqIElmIHRoZSBTREsgaXMgaW5pdGlhbGl6ZWQgJiBlbmFibGVkLiAqL1xuZnVuY3Rpb24gaXNFbmFibGVkKCkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcbiAgcmV0dXJuIGNsaWVudD8uZ2V0T3B0aW9ucygpLmVuYWJsZWQgIT09IGZhbHNlICYmICEhY2xpZW50Py5nZXRUcmFuc3BvcnQoKTtcbn1cblxuLyoqXG4gKiBBZGQgYW4gZXZlbnQgcHJvY2Vzc29yLlxuICogVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBjdXJyZW50IGlzb2xhdGlvbiBzY29wZSwgZW5zdXJpbmcgYW55IGV2ZW50IHRoYXQgaXMgcHJvY2Vzc2VkIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvblxuICogY29udGV4dCB3aWxsIGhhdmUgdGhlIHByb2Nlc3NvciBhcHBsaWVkLlxuICovXG5mdW5jdGlvbiBhZGRFdmVudFByb2Nlc3NvcihjYWxsYmFjaykge1xuICBnZXRJc29sYXRpb25TY29wZSgpLmFkZEV2ZW50UHJvY2Vzc29yKGNhbGxiYWNrKTtcbn1cblxuLyoqXG4gKiBTdGFydCBhIHNlc3Npb24gb24gdGhlIGN1cnJlbnQgaXNvbGF0aW9uIHNjb3BlLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IChvcHRpb25hbCkgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHJldHVybmVkIHNlc3Npb24gb2JqZWN0XG4gKlxuICogQHJldHVybnMgdGhlIG5ldyBhY3RpdmUgc2Vzc2lvblxuICovXG5mdW5jdGlvbiBzdGFydFNlc3Npb24oY29udGV4dCkge1xuICBjb25zdCBpc29sYXRpb25TY29wZSA9IGdldElzb2xhdGlvblNjb3BlKCk7XG4gIGNvbnN0IGN1cnJlbnRTY29wZSA9IGdldEN1cnJlbnRTY29wZSgpO1xuXG4gIC8vIFdpbGwgZmV0Y2ggdXNlckFnZW50IGlmIGNhbGxlZCBmcm9tIGJyb3dzZXIgc2RrXG4gIGNvbnN0IHsgdXNlckFnZW50IH0gPSBHTE9CQUxfT0JKLm5hdmlnYXRvciB8fCB7fTtcblxuICBjb25zdCBzZXNzaW9uID0gbWFrZVNlc3Npb24oe1xuICAgIHVzZXI6IGN1cnJlbnRTY29wZS5nZXRVc2VyKCkgfHwgaXNvbGF0aW9uU2NvcGUuZ2V0VXNlcigpLFxuICAgIC4uLih1c2VyQWdlbnQgJiYgeyB1c2VyQWdlbnQgfSksXG4gICAgLi4uY29udGV4dCxcbiAgfSk7XG5cbiAgLy8gRW5kIGV4aXN0aW5nIHNlc3Npb24gaWYgdGhlcmUncyBvbmVcbiAgY29uc3QgY3VycmVudFNlc3Npb24gPSBpc29sYXRpb25TY29wZS5nZXRTZXNzaW9uKCk7XG4gIGlmIChjdXJyZW50U2Vzc2lvbj8uc3RhdHVzID09PSAnb2snKSB7XG4gICAgdXBkYXRlU2Vzc2lvbihjdXJyZW50U2Vzc2lvbiwgeyBzdGF0dXM6ICdleGl0ZWQnIH0pO1xuICB9XG5cbiAgZW5kU2Vzc2lvbigpO1xuXG4gIC8vIEFmdGVyd2FyZHMgd2Ugc2V0IHRoZSBuZXcgc2Vzc2lvbiBvbiB0aGUgc2NvcGVcbiAgaXNvbGF0aW9uU2NvcGUuc2V0U2Vzc2lvbihzZXNzaW9uKTtcblxuICByZXR1cm4gc2Vzc2lvbjtcbn1cblxuLyoqXG4gKiBFbmQgdGhlIHNlc3Npb24gb24gdGhlIGN1cnJlbnQgaXNvbGF0aW9uIHNjb3BlLlxuICovXG5mdW5jdGlvbiBlbmRTZXNzaW9uKCkge1xuICBjb25zdCBpc29sYXRpb25TY29wZSA9IGdldElzb2xhdGlvblNjb3BlKCk7XG4gIGNvbnN0IGN1cnJlbnRTY29wZSA9IGdldEN1cnJlbnRTY29wZSgpO1xuXG4gIGNvbnN0IHNlc3Npb24gPSBjdXJyZW50U2NvcGUuZ2V0U2Vzc2lvbigpIHx8IGlzb2xhdGlvblNjb3BlLmdldFNlc3Npb24oKTtcbiAgaWYgKHNlc3Npb24pIHtcbiAgICBjbG9zZVNlc3Npb24oc2Vzc2lvbik7XG4gIH1cbiAgX3NlbmRTZXNzaW9uVXBkYXRlKCk7XG5cbiAgLy8gdGhlIHNlc3Npb24gaXMgb3ZlcjsgdGFrZSBpdCBvZmYgb2YgdGhlIHNjb3BlXG4gIGlzb2xhdGlvblNjb3BlLnNldFNlc3Npb24oKTtcbn1cblxuLyoqXG4gKiBTZW5kcyB0aGUgY3VycmVudCBTZXNzaW9uIG9uIHRoZSBzY29wZVxuICovXG5mdW5jdGlvbiBfc2VuZFNlc3Npb25VcGRhdGUoKSB7XG4gIGNvbnN0IGlzb2xhdGlvblNjb3BlID0gZ2V0SXNvbGF0aW9uU2NvcGUoKTtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7XG4gIGNvbnN0IHNlc3Npb24gPSBpc29sYXRpb25TY29wZS5nZXRTZXNzaW9uKCk7XG4gIGlmIChzZXNzaW9uICYmIGNsaWVudCkge1xuICAgIGNsaWVudC5jYXB0dXJlU2Vzc2lvbihzZXNzaW9uKTtcbiAgfVxufVxuXG4vKipcbiAqIFNlbmRzIHRoZSBjdXJyZW50IHNlc3Npb24gb24gdGhlIHNjb3BlIHRvIFNlbnRyeVxuICpcbiAqIEBwYXJhbSBlbmQgSWYgc2V0IHRoZSBzZXNzaW9uIHdpbGwgYmUgbWFya2VkIGFzIGV4aXRlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBzY29wZS5cbiAqICAgICAgICAgICAgRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FwdHVyZVNlc3Npb24oZW5kID0gZmFsc2UpIHtcbiAgLy8gYm90aCBzZW5kIHRoZSB1cGRhdGUgYW5kIHB1bGwgdGhlIHNlc3Npb24gZnJvbSB0aGUgc2NvcGVcbiAgaWYgKGVuZCkge1xuICAgIGVuZFNlc3Npb24oKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBvbmx5IHNlbmQgdGhlIHVwZGF0ZVxuICBfc2VuZFNlc3Npb25VcGRhdGUoKTtcbn1cblxuZXhwb3J0IHsgYWRkRXZlbnRQcm9jZXNzb3IsIGNhcHR1cmVDaGVja0luLCBjYXB0dXJlRXZlbnQsIGNhcHR1cmVFeGNlcHRpb24sIGNhcHR1cmVNZXNzYWdlLCBjYXB0dXJlU2Vzc2lvbiwgY2xvc2UsIGVuZFNlc3Npb24sIGZsdXNoLCBpc0VuYWJsZWQsIGlzSW5pdGlhbGl6ZWQsIGxhc3RFdmVudElkLCBzZXRDb250ZXh0LCBzZXRFeHRyYSwgc2V0RXh0cmFzLCBzZXRUYWcsIHNldFRhZ3MsIHNldFVzZXIsIHN0YXJ0U2Vzc2lvbiwgd2l0aE1vbml0b3IgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4cG9ydHMuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/exports.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/feedback.js":
/*!************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/feedback.js ***!
  \************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   captureFeedback: () => (/* binding */ captureFeedback)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n\n\n/**\n * Send user feedback to Sentry.\n */\nfunction captureFeedback(\n  params,\n  hint = {},\n  scope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)(),\n) {\n  const { message, name, email, url, source, associatedEventId, tags } = params;\n\n  const feedbackEvent = {\n    contexts: {\n      feedback: {\n        contact_email: email,\n        name,\n        message,\n        url,\n        source,\n        associated_event_id: associatedEventId,\n      },\n    },\n    type: 'feedback',\n    level: 'info',\n    tags,\n  };\n\n  const client = scope?.getClient() || (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n\n  if (client) {\n    client.emit('beforeSendFeedback', feedbackEvent, hint);\n  }\n\n  const eventId = scope.captureEvent(feedbackEvent, hint);\n\n  return eventId;\n}\n\n\n//# sourceMappingURL=feedback.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ZlZWRiYWNrLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWdFOztBQUVoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFVBQVUsa0VBQWU7QUFDekI7QUFDQSxVQUFVLDZEQUE2RDs7QUFFdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1Q0FBdUMsNERBQVM7O0FBRWhEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUUyQjtBQUMzQiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ZlZWRiYWNrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEN1cnJlbnRTY29wZSwgZ2V0Q2xpZW50IH0gZnJvbSAnLi9jdXJyZW50U2NvcGVzLmpzJztcblxuLyoqXG4gKiBTZW5kIHVzZXIgZmVlZGJhY2sgdG8gU2VudHJ5LlxuICovXG5mdW5jdGlvbiBjYXB0dXJlRmVlZGJhY2soXG4gIHBhcmFtcyxcbiAgaGludCA9IHt9LFxuICBzY29wZSA9IGdldEN1cnJlbnRTY29wZSgpLFxuKSB7XG4gIGNvbnN0IHsgbWVzc2FnZSwgbmFtZSwgZW1haWwsIHVybCwgc291cmNlLCBhc3NvY2lhdGVkRXZlbnRJZCwgdGFncyB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGZlZWRiYWNrRXZlbnQgPSB7XG4gICAgY29udGV4dHM6IHtcbiAgICAgIGZlZWRiYWNrOiB7XG4gICAgICAgIGNvbnRhY3RfZW1haWw6IGVtYWlsLFxuICAgICAgICBuYW1lLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICB1cmwsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYXNzb2NpYXRlZF9ldmVudF9pZDogYXNzb2NpYXRlZEV2ZW50SWQsXG4gICAgICB9LFxuICAgIH0sXG4gICAgdHlwZTogJ2ZlZWRiYWNrJyxcbiAgICBsZXZlbDogJ2luZm8nLFxuICAgIHRhZ3MsXG4gIH07XG5cbiAgY29uc3QgY2xpZW50ID0gc2NvcGU/LmdldENsaWVudCgpIHx8IGdldENsaWVudCgpO1xuXG4gIGlmIChjbGllbnQpIHtcbiAgICBjbGllbnQuZW1pdCgnYmVmb3JlU2VuZEZlZWRiYWNrJywgZmVlZGJhY2tFdmVudCwgaGludCk7XG4gIH1cblxuICBjb25zdCBldmVudElkID0gc2NvcGUuY2FwdHVyZUV2ZW50KGZlZWRiYWNrRXZlbnQsIGhpbnQpO1xuXG4gIHJldHVybiBldmVudElkO1xufVxuXG5leHBvcnQgeyBjYXB0dXJlRmVlZGJhY2sgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZlZWRiYWNrLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/feedback.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/fetch.js":
/*!*********************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/fetch.js ***!
  \*********************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   _addTracingHeadersToFetchRequest: () => (/* binding */ _addTracingHeadersToFetchRequest),\n/* harmony export */   instrumentFetchRequest: () => (/* binding */ instrumentFetchRequest)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./semanticAttributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/semanticAttributes.js\");\n/* harmony import */ var _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/spanUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js\");\n/* harmony import */ var _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tracing/spanstatus.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/spanstatus.js\");\n/* harmony import */ var _utils_is_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n/* harmony import */ var _utils_hasSpansEnabled_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/hasSpansEnabled.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/hasSpansEnabled.js\");\n/* harmony import */ var _utils_baggage_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/baggage.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/baggage.js\");\n/* harmony import */ var _tracing_sentryNonRecordingSpan_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tracing/sentryNonRecordingSpan.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/sentryNonRecordingSpan.js\");\n/* harmony import */ var _tracing_trace_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./tracing/trace.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/trace.js\");\n/* harmony import */ var _utils_traceData_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils/traceData.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/traceData.js\");\n/* harmony import */ var _utils_url_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utils/url.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/url.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Create and track fetch request spans for usage in combination with `addFetchInstrumentationHandler`.\n *\n * @returns Span if a span was created, otherwise void.\n */\nfunction instrumentFetchRequest(\n  handlerData,\n  shouldCreateSpan,\n  shouldAttachHeaders,\n  spans,\n  spanOrigin = 'auto.http.browser',\n) {\n  if (!handlerData.fetchData) {\n    return undefined;\n  }\n\n  const { method, url } = handlerData.fetchData;\n\n  const shouldCreateSpanResult = (0,_utils_hasSpansEnabled_js__WEBPACK_IMPORTED_MODULE_5__.hasSpansEnabled)() && shouldCreateSpan(url);\n\n  if (handlerData.endTimestamp && shouldCreateSpanResult) {\n    const spanId = handlerData.fetchData.__span;\n    if (!spanId) return;\n\n    const span = spans[spanId];\n    if (span) {\n      endSpan(span, handlerData);\n\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete spans[spanId];\n    }\n    return undefined;\n  }\n\n  const hasParent = !!(0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_2__.getActiveSpan)();\n\n  const span =\n    shouldCreateSpanResult && hasParent\n      ? (0,_tracing_trace_js__WEBPACK_IMPORTED_MODULE_8__.startInactiveSpan)(getSpanStartOptions(url, method, spanOrigin))\n      : new _tracing_sentryNonRecordingSpan_js__WEBPACK_IMPORTED_MODULE_7__.SentryNonRecordingSpan();\n\n  handlerData.fetchData.__span = span.spanContext().spanId;\n  spans[span.spanContext().spanId] = span;\n\n  if (shouldAttachHeaders(handlerData.fetchData.url)) {\n    const request = handlerData.args[0];\n\n    const options = handlerData.args[1] || {};\n\n    const headers = _addTracingHeadersToFetchRequest(\n      request,\n      options,\n      // If performance is disabled (TWP) or there's no active root span (pageload/navigation/interaction),\n      // we do not want to use the span as base for the trace headers,\n      // which means that the headers will be generated from the scope and the sampling decision is deferred\n      (0,_utils_hasSpansEnabled_js__WEBPACK_IMPORTED_MODULE_5__.hasSpansEnabled)() && hasParent ? span : undefined,\n    );\n    if (headers) {\n      // Ensure this is actually set, if no options have been passed previously\n      handlerData.args[1] = options;\n      options.headers = headers;\n    }\n  }\n\n  const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n\n  if (client) {\n    const fetchHint = {\n      input: handlerData.args,\n      response: handlerData.response,\n      startTimestamp: handlerData.startTimestamp,\n      endTimestamp: handlerData.endTimestamp,\n    } ;\n\n    client.emit('beforeOutgoingRequestSpan', span, fetchHint);\n  }\n\n  return span;\n}\n\n/**\n * Adds sentry-trace and baggage headers to the various forms of fetch headers.\n * exported only for testing purposes\n *\n * When we determine if we should add a baggage header, there are 3 cases:\n * 1. No previous baggage header -> add baggage\n * 2. Previous baggage header has no sentry baggage values -> add our baggage\n * 3. Previous baggage header has sentry baggage values -> do nothing (might have been added manually by users)\n */\n// eslint-disable-next-line complexity -- yup it's this complicated :(\nfunction _addTracingHeadersToFetchRequest(\n  request,\n  fetchOptionsObj\n\n,\n  span,\n) {\n  const traceHeaders = (0,_utils_traceData_js__WEBPACK_IMPORTED_MODULE_9__.getTraceData)({ span });\n  const sentryTrace = traceHeaders['sentry-trace'];\n  const baggage = traceHeaders.baggage;\n\n  // Nothing to do, when we return undefined here, the original headers will be used\n  if (!sentryTrace) {\n    return undefined;\n  }\n\n  const originalHeaders = fetchOptionsObj.headers || ((0,_utils_is_js__WEBPACK_IMPORTED_MODULE_4__.isRequest)(request) ? request.headers : undefined);\n\n  if (!originalHeaders) {\n    return { ...traceHeaders };\n  } else if (isHeaders(originalHeaders)) {\n    const newHeaders = new Headers(originalHeaders);\n\n    // We don't want to override manually added sentry headers\n    if (!newHeaders.get('sentry-trace')) {\n      newHeaders.set('sentry-trace', sentryTrace);\n    }\n\n    if (baggage) {\n      const prevBaggageHeader = newHeaders.get('baggage');\n\n      if (!prevBaggageHeader) {\n        newHeaders.set('baggage', baggage);\n      } else if (!baggageHeaderHasSentryBaggageValues(prevBaggageHeader)) {\n        newHeaders.set('baggage', `${prevBaggageHeader},${baggage}`);\n      }\n    }\n\n    return newHeaders;\n  } else if (Array.isArray(originalHeaders)) {\n    const newHeaders = [...originalHeaders];\n\n    if (!originalHeaders.find(header => header[0] === 'sentry-trace')) {\n      newHeaders.push(['sentry-trace', sentryTrace]);\n    }\n\n    const prevBaggageHeaderWithSentryValues = originalHeaders.find(\n      header => header[0] === 'baggage' && baggageHeaderHasSentryBaggageValues(header[1]),\n    );\n\n    if (baggage && !prevBaggageHeaderWithSentryValues) {\n      // If there are multiple entries with the same key, the browser will merge the values into a single request header.\n      // Its therefore safe to simply push a \"baggage\" entry, even though there might already be another baggage header.\n      newHeaders.push(['baggage', baggage]);\n    }\n\n    return newHeaders ;\n  } else {\n    const existingSentryTraceHeader = 'sentry-trace' in originalHeaders ? originalHeaders['sentry-trace'] : undefined;\n\n    const existingBaggageHeader = 'baggage' in originalHeaders ? originalHeaders.baggage : undefined;\n    const newBaggageHeaders = existingBaggageHeader\n      ? Array.isArray(existingBaggageHeader)\n        ? [...existingBaggageHeader]\n        : [existingBaggageHeader]\n      : [];\n\n    const prevBaggageHeaderWithSentryValues =\n      existingBaggageHeader &&\n      (Array.isArray(existingBaggageHeader)\n        ? existingBaggageHeader.find(headerItem => baggageHeaderHasSentryBaggageValues(headerItem))\n        : baggageHeaderHasSentryBaggageValues(existingBaggageHeader));\n\n    if (baggage && !prevBaggageHeaderWithSentryValues) {\n      newBaggageHeaders.push(baggage);\n    }\n\n    return {\n      ...(originalHeaders ),\n      'sentry-trace': (existingSentryTraceHeader ) ?? sentryTrace,\n      baggage: newBaggageHeaders.length > 0 ? newBaggageHeaders.join(',') : undefined,\n    };\n  }\n}\n\nfunction endSpan(span, handlerData) {\n  if (handlerData.response) {\n    (0,_tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_3__.setHttpStatus)(span, handlerData.response.status);\n\n    const contentLength = handlerData.response?.headers?.get('content-length');\n\n    if (contentLength) {\n      const contentLengthNum = parseInt(contentLength);\n      if (contentLengthNum > 0) {\n        span.setAttribute('http.response_content_length', contentLengthNum);\n      }\n    }\n  } else if (handlerData.error) {\n    span.setStatus({ code: _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_3__.SPAN_STATUS_ERROR, message: 'internal_error' });\n  }\n  span.end();\n}\n\nfunction baggageHeaderHasSentryBaggageValues(baggageHeader) {\n  return baggageHeader.split(',').some(baggageEntry => baggageEntry.trim().startsWith(_utils_baggage_js__WEBPACK_IMPORTED_MODULE_6__.SENTRY_BAGGAGE_KEY_PREFIX));\n}\n\nfunction isHeaders(headers) {\n  return typeof Headers !== 'undefined' && (0,_utils_is_js__WEBPACK_IMPORTED_MODULE_4__.isInstanceOf)(headers, Headers);\n}\n\nfunction getSpanStartOptions(\n  url,\n  method,\n  spanOrigin,\n) {\n  const parsedUrl = (0,_utils_url_js__WEBPACK_IMPORTED_MODULE_10__.parseStringToURLObject)(url);\n  return {\n    name: parsedUrl ? `${method} ${(0,_utils_url_js__WEBPACK_IMPORTED_MODULE_10__.getSanitizedUrlStringFromUrlObject)(parsedUrl)}` : method,\n    attributes: getFetchSpanAttributes(url, parsedUrl, method, spanOrigin),\n  };\n}\n\nfunction getFetchSpanAttributes(\n  url,\n  parsedUrl,\n  method,\n  spanOrigin,\n) {\n  const attributes = {\n    url,\n    type: 'fetch',\n    'http.method': method,\n    [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanOrigin,\n    [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'http.client',\n  };\n  if (parsedUrl) {\n    if (!(0,_utils_url_js__WEBPACK_IMPORTED_MODULE_10__.isURLObjectRelative)(parsedUrl)) {\n      attributes['http.url'] = parsedUrl.href;\n      attributes['server.address'] = parsedUrl.host;\n    }\n    if (parsedUrl.search) {\n      attributes['http.query'] = parsedUrl.search;\n    }\n    if (parsedUrl.hash) {\n      attributes['http.fragment'] = parsedUrl.hash;\n    }\n  }\n  return attributes;\n}\n\n\n//# sourceMappingURL=fetch.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ZldGNoLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBK0M7QUFDMEQ7QUFDcEQ7QUFDc0I7QUFDbkI7QUFDSztBQUNFO0FBQ2M7QUFDdEI7QUFDSDtBQUM2RDs7QUFFakg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFVBQVUsY0FBYzs7QUFFeEIsaUNBQWlDLDBFQUFlOztBQUVoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLGtFQUFhOztBQUVuQztBQUNBO0FBQ0EsUUFBUSxvRUFBaUI7QUFDekIsWUFBWSxzRkFBc0I7O0FBRWxDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLDBFQUFlO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQiw0REFBUzs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixpRUFBWSxHQUFHLE1BQU07QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzREFBc0QsdURBQVM7O0FBRS9EO0FBQ0EsYUFBYTtBQUNiLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IscUNBQXFDLGtCQUFrQixHQUFHLFFBQVE7QUFDbEU7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLHFFQUFhOztBQUVqQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0oscUJBQXFCLE1BQU0scUVBQWlCLDZCQUE2QjtBQUN6RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzRkFBc0Ysd0VBQXlCO0FBQy9HOztBQUVBO0FBQ0EsMkNBQTJDLDBEQUFZO0FBQ3ZEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isc0VBQXNCO0FBQzFDO0FBQ0EseUJBQXlCLFFBQVEsRUFBRSxrRkFBa0MsWUFBWTtBQUNqRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLG9GQUFnQztBQUNyQyxLQUFLLGdGQUE0QjtBQUNqQztBQUNBO0FBQ0EsU0FBUyxtRUFBbUI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVvRTtBQUNwRSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ZldGNoLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldENsaWVudCB9IGZyb20gJy4vY3VycmVudFNjb3Blcy5qcyc7XG5pbXBvcnQgeyBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTiB9IGZyb20gJy4vc2VtYW50aWNBdHRyaWJ1dGVzLmpzJztcbmltcG9ydCB7IGdldEFjdGl2ZVNwYW4gfSBmcm9tICcuL3V0aWxzL3NwYW5VdGlscy5qcyc7XG5pbXBvcnQgeyBzZXRIdHRwU3RhdHVzLCBTUEFOX1NUQVRVU19FUlJPUiB9IGZyb20gJy4vdHJhY2luZy9zcGFuc3RhdHVzLmpzJztcbmltcG9ydCB7IGlzUmVxdWVzdCwgaXNJbnN0YW5jZU9mIH0gZnJvbSAnLi91dGlscy9pcy5qcyc7XG5pbXBvcnQgeyBoYXNTcGFuc0VuYWJsZWQgfSBmcm9tICcuL3V0aWxzL2hhc1NwYW5zRW5hYmxlZC5qcyc7XG5pbXBvcnQgeyBTRU5UUllfQkFHR0FHRV9LRVlfUFJFRklYIH0gZnJvbSAnLi91dGlscy9iYWdnYWdlLmpzJztcbmltcG9ydCB7IFNlbnRyeU5vblJlY29yZGluZ1NwYW4gfSBmcm9tICcuL3RyYWNpbmcvc2VudHJ5Tm9uUmVjb3JkaW5nU3Bhbi5qcyc7XG5pbXBvcnQgeyBzdGFydEluYWN0aXZlU3BhbiB9IGZyb20gJy4vdHJhY2luZy90cmFjZS5qcyc7XG5pbXBvcnQgeyBnZXRUcmFjZURhdGEgfSBmcm9tICcuL3V0aWxzL3RyYWNlRGF0YS5qcyc7XG5pbXBvcnQgeyBwYXJzZVN0cmluZ1RvVVJMT2JqZWN0LCBnZXRTYW5pdGl6ZWRVcmxTdHJpbmdGcm9tVXJsT2JqZWN0LCBpc1VSTE9iamVjdFJlbGF0aXZlIH0gZnJvbSAnLi91dGlscy91cmwuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbmQgdHJhY2sgZmV0Y2ggcmVxdWVzdCBzcGFucyBmb3IgdXNhZ2UgaW4gY29tYmluYXRpb24gd2l0aCBgYWRkRmV0Y2hJbnN0cnVtZW50YXRpb25IYW5kbGVyYC5cbiAqXG4gKiBAcmV0dXJucyBTcGFuIGlmIGEgc3BhbiB3YXMgY3JlYXRlZCwgb3RoZXJ3aXNlIHZvaWQuXG4gKi9cbmZ1bmN0aW9uIGluc3RydW1lbnRGZXRjaFJlcXVlc3QoXG4gIGhhbmRsZXJEYXRhLFxuICBzaG91bGRDcmVhdGVTcGFuLFxuICBzaG91bGRBdHRhY2hIZWFkZXJzLFxuICBzcGFucyxcbiAgc3Bhbk9yaWdpbiA9ICdhdXRvLmh0dHAuYnJvd3NlcicsXG4pIHtcbiAgaWYgKCFoYW5kbGVyRGF0YS5mZXRjaERhdGEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgeyBtZXRob2QsIHVybCB9ID0gaGFuZGxlckRhdGEuZmV0Y2hEYXRhO1xuXG4gIGNvbnN0IHNob3VsZENyZWF0ZVNwYW5SZXN1bHQgPSBoYXNTcGFuc0VuYWJsZWQoKSAmJiBzaG91bGRDcmVhdGVTcGFuKHVybCk7XG5cbiAgaWYgKGhhbmRsZXJEYXRhLmVuZFRpbWVzdGFtcCAmJiBzaG91bGRDcmVhdGVTcGFuUmVzdWx0KSB7XG4gICAgY29uc3Qgc3BhbklkID0gaGFuZGxlckRhdGEuZmV0Y2hEYXRhLl9fc3BhbjtcbiAgICBpZiAoIXNwYW5JZCkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc3BhbiA9IHNwYW5zW3NwYW5JZF07XG4gICAgaWYgKHNwYW4pIHtcbiAgICAgIGVuZFNwYW4oc3BhbiwgaGFuZGxlckRhdGEpO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXG4gICAgICBkZWxldGUgc3BhbnNbc3BhbklkXTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGhhc1BhcmVudCA9ICEhZ2V0QWN0aXZlU3BhbigpO1xuXG4gIGNvbnN0IHNwYW4gPVxuICAgIHNob3VsZENyZWF0ZVNwYW5SZXN1bHQgJiYgaGFzUGFyZW50XG4gICAgICA/IHN0YXJ0SW5hY3RpdmVTcGFuKGdldFNwYW5TdGFydE9wdGlvbnModXJsLCBtZXRob2QsIHNwYW5PcmlnaW4pKVxuICAgICAgOiBuZXcgU2VudHJ5Tm9uUmVjb3JkaW5nU3BhbigpO1xuXG4gIGhhbmRsZXJEYXRhLmZldGNoRGF0YS5fX3NwYW4gPSBzcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkO1xuICBzcGFuc1tzcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkXSA9IHNwYW47XG5cbiAgaWYgKHNob3VsZEF0dGFjaEhlYWRlcnMoaGFuZGxlckRhdGEuZmV0Y2hEYXRhLnVybCkpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gaGFuZGxlckRhdGEuYXJnc1swXTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSBoYW5kbGVyRGF0YS5hcmdzWzFdIHx8IHt9O1xuXG4gICAgY29uc3QgaGVhZGVycyA9IF9hZGRUcmFjaW5nSGVhZGVyc1RvRmV0Y2hSZXF1ZXN0KFxuICAgICAgcmVxdWVzdCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICAvLyBJZiBwZXJmb3JtYW5jZSBpcyBkaXNhYmxlZCAoVFdQKSBvciB0aGVyZSdzIG5vIGFjdGl2ZSByb290IHNwYW4gKHBhZ2Vsb2FkL25hdmlnYXRpb24vaW50ZXJhY3Rpb24pLFxuICAgICAgLy8gd2UgZG8gbm90IHdhbnQgdG8gdXNlIHRoZSBzcGFuIGFzIGJhc2UgZm9yIHRoZSB0cmFjZSBoZWFkZXJzLFxuICAgICAgLy8gd2hpY2ggbWVhbnMgdGhhdCB0aGUgaGVhZGVycyB3aWxsIGJlIGdlbmVyYXRlZCBmcm9tIHRoZSBzY29wZSBhbmQgdGhlIHNhbXBsaW5nIGRlY2lzaW9uIGlzIGRlZmVycmVkXG4gICAgICBoYXNTcGFuc0VuYWJsZWQoKSAmJiBoYXNQYXJlbnQgPyBzcGFuIDogdW5kZWZpbmVkLFxuICAgICk7XG4gICAgaWYgKGhlYWRlcnMpIHtcbiAgICAgIC8vIEVuc3VyZSB0aGlzIGlzIGFjdHVhbGx5IHNldCwgaWYgbm8gb3B0aW9ucyBoYXZlIGJlZW4gcGFzc2VkIHByZXZpb3VzbHlcbiAgICAgIGhhbmRsZXJEYXRhLmFyZ3NbMV0gPSBvcHRpb25zO1xuICAgICAgb3B0aW9ucy5oZWFkZXJzID0gaGVhZGVycztcbiAgICB9XG4gIH1cblxuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcblxuICBpZiAoY2xpZW50KSB7XG4gICAgY29uc3QgZmV0Y2hIaW50ID0ge1xuICAgICAgaW5wdXQ6IGhhbmRsZXJEYXRhLmFyZ3MsXG4gICAgICByZXNwb25zZTogaGFuZGxlckRhdGEucmVzcG9uc2UsXG4gICAgICBzdGFydFRpbWVzdGFtcDogaGFuZGxlckRhdGEuc3RhcnRUaW1lc3RhbXAsXG4gICAgICBlbmRUaW1lc3RhbXA6IGhhbmRsZXJEYXRhLmVuZFRpbWVzdGFtcCxcbiAgICB9IDtcblxuICAgIGNsaWVudC5lbWl0KCdiZWZvcmVPdXRnb2luZ1JlcXVlc3RTcGFuJywgc3BhbiwgZmV0Y2hIaW50KTtcbiAgfVxuXG4gIHJldHVybiBzcGFuO1xufVxuXG4vKipcbiAqIEFkZHMgc2VudHJ5LXRyYWNlIGFuZCBiYWdnYWdlIGhlYWRlcnMgdG8gdGhlIHZhcmlvdXMgZm9ybXMgb2YgZmV0Y2ggaGVhZGVycy5cbiAqIGV4cG9ydGVkIG9ubHkgZm9yIHRlc3RpbmcgcHVycG9zZXNcbiAqXG4gKiBXaGVuIHdlIGRldGVybWluZSBpZiB3ZSBzaG91bGQgYWRkIGEgYmFnZ2FnZSBoZWFkZXIsIHRoZXJlIGFyZSAzIGNhc2VzOlxuICogMS4gTm8gcHJldmlvdXMgYmFnZ2FnZSBoZWFkZXIgLT4gYWRkIGJhZ2dhZ2VcbiAqIDIuIFByZXZpb3VzIGJhZ2dhZ2UgaGVhZGVyIGhhcyBubyBzZW50cnkgYmFnZ2FnZSB2YWx1ZXMgLT4gYWRkIG91ciBiYWdnYWdlXG4gKiAzLiBQcmV2aW91cyBiYWdnYWdlIGhlYWRlciBoYXMgc2VudHJ5IGJhZ2dhZ2UgdmFsdWVzIC0+IGRvIG5vdGhpbmcgKG1pZ2h0IGhhdmUgYmVlbiBhZGRlZCBtYW51YWxseSBieSB1c2VycylcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHkgLS0geXVwIGl0J3MgdGhpcyBjb21wbGljYXRlZCA6KFxuZnVuY3Rpb24gX2FkZFRyYWNpbmdIZWFkZXJzVG9GZXRjaFJlcXVlc3QoXG4gIHJlcXVlc3QsXG4gIGZldGNoT3B0aW9uc09ialxuXG4sXG4gIHNwYW4sXG4pIHtcbiAgY29uc3QgdHJhY2VIZWFkZXJzID0gZ2V0VHJhY2VEYXRhKHsgc3BhbiB9KTtcbiAgY29uc3Qgc2VudHJ5VHJhY2UgPSB0cmFjZUhlYWRlcnNbJ3NlbnRyeS10cmFjZSddO1xuICBjb25zdCBiYWdnYWdlID0gdHJhY2VIZWFkZXJzLmJhZ2dhZ2U7XG5cbiAgLy8gTm90aGluZyB0byBkbywgd2hlbiB3ZSByZXR1cm4gdW5kZWZpbmVkIGhlcmUsIHRoZSBvcmlnaW5hbCBoZWFkZXJzIHdpbGwgYmUgdXNlZFxuICBpZiAoIXNlbnRyeVRyYWNlKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsSGVhZGVycyA9IGZldGNoT3B0aW9uc09iai5oZWFkZXJzIHx8IChpc1JlcXVlc3QocmVxdWVzdCkgPyByZXF1ZXN0LmhlYWRlcnMgOiB1bmRlZmluZWQpO1xuXG4gIGlmICghb3JpZ2luYWxIZWFkZXJzKSB7XG4gICAgcmV0dXJuIHsgLi4udHJhY2VIZWFkZXJzIH07XG4gIH0gZWxzZSBpZiAoaXNIZWFkZXJzKG9yaWdpbmFsSGVhZGVycykpIHtcbiAgICBjb25zdCBuZXdIZWFkZXJzID0gbmV3IEhlYWRlcnMob3JpZ2luYWxIZWFkZXJzKTtcblxuICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gb3ZlcnJpZGUgbWFudWFsbHkgYWRkZWQgc2VudHJ5IGhlYWRlcnNcbiAgICBpZiAoIW5ld0hlYWRlcnMuZ2V0KCdzZW50cnktdHJhY2UnKSkge1xuICAgICAgbmV3SGVhZGVycy5zZXQoJ3NlbnRyeS10cmFjZScsIHNlbnRyeVRyYWNlKTtcbiAgICB9XG5cbiAgICBpZiAoYmFnZ2FnZSkge1xuICAgICAgY29uc3QgcHJldkJhZ2dhZ2VIZWFkZXIgPSBuZXdIZWFkZXJzLmdldCgnYmFnZ2FnZScpO1xuXG4gICAgICBpZiAoIXByZXZCYWdnYWdlSGVhZGVyKSB7XG4gICAgICAgIG5ld0hlYWRlcnMuc2V0KCdiYWdnYWdlJywgYmFnZ2FnZSk7XG4gICAgICB9IGVsc2UgaWYgKCFiYWdnYWdlSGVhZGVySGFzU2VudHJ5QmFnZ2FnZVZhbHVlcyhwcmV2QmFnZ2FnZUhlYWRlcikpIHtcbiAgICAgICAgbmV3SGVhZGVycy5zZXQoJ2JhZ2dhZ2UnLCBgJHtwcmV2QmFnZ2FnZUhlYWRlcn0sJHtiYWdnYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXdIZWFkZXJzO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3JpZ2luYWxIZWFkZXJzKSkge1xuICAgIGNvbnN0IG5ld0hlYWRlcnMgPSBbLi4ub3JpZ2luYWxIZWFkZXJzXTtcblxuICAgIGlmICghb3JpZ2luYWxIZWFkZXJzLmZpbmQoaGVhZGVyID0+IGhlYWRlclswXSA9PT0gJ3NlbnRyeS10cmFjZScpKSB7XG4gICAgICBuZXdIZWFkZXJzLnB1c2goWydzZW50cnktdHJhY2UnLCBzZW50cnlUcmFjZV0pO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZCYWdnYWdlSGVhZGVyV2l0aFNlbnRyeVZhbHVlcyA9IG9yaWdpbmFsSGVhZGVycy5maW5kKFxuICAgICAgaGVhZGVyID0+IGhlYWRlclswXSA9PT0gJ2JhZ2dhZ2UnICYmIGJhZ2dhZ2VIZWFkZXJIYXNTZW50cnlCYWdnYWdlVmFsdWVzKGhlYWRlclsxXSksXG4gICAgKTtcblxuICAgIGlmIChiYWdnYWdlICYmICFwcmV2QmFnZ2FnZUhlYWRlcldpdGhTZW50cnlWYWx1ZXMpIHtcbiAgICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBlbnRyaWVzIHdpdGggdGhlIHNhbWUga2V5LCB0aGUgYnJvd3NlciB3aWxsIG1lcmdlIHRoZSB2YWx1ZXMgaW50byBhIHNpbmdsZSByZXF1ZXN0IGhlYWRlci5cbiAgICAgIC8vIEl0cyB0aGVyZWZvcmUgc2FmZSB0byBzaW1wbHkgcHVzaCBhIFwiYmFnZ2FnZVwiIGVudHJ5LCBldmVuIHRob3VnaCB0aGVyZSBtaWdodCBhbHJlYWR5IGJlIGFub3RoZXIgYmFnZ2FnZSBoZWFkZXIuXG4gICAgICBuZXdIZWFkZXJzLnB1c2goWydiYWdnYWdlJywgYmFnZ2FnZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdIZWFkZXJzIDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBleGlzdGluZ1NlbnRyeVRyYWNlSGVhZGVyID0gJ3NlbnRyeS10cmFjZScgaW4gb3JpZ2luYWxIZWFkZXJzID8gb3JpZ2luYWxIZWFkZXJzWydzZW50cnktdHJhY2UnXSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGV4aXN0aW5nQmFnZ2FnZUhlYWRlciA9ICdiYWdnYWdlJyBpbiBvcmlnaW5hbEhlYWRlcnMgPyBvcmlnaW5hbEhlYWRlcnMuYmFnZ2FnZSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBuZXdCYWdnYWdlSGVhZGVycyA9IGV4aXN0aW5nQmFnZ2FnZUhlYWRlclxuICAgICAgPyBBcnJheS5pc0FycmF5KGV4aXN0aW5nQmFnZ2FnZUhlYWRlcilcbiAgICAgICAgPyBbLi4uZXhpc3RpbmdCYWdnYWdlSGVhZGVyXVxuICAgICAgICA6IFtleGlzdGluZ0JhZ2dhZ2VIZWFkZXJdXG4gICAgICA6IFtdO1xuXG4gICAgY29uc3QgcHJldkJhZ2dhZ2VIZWFkZXJXaXRoU2VudHJ5VmFsdWVzID1cbiAgICAgIGV4aXN0aW5nQmFnZ2FnZUhlYWRlciAmJlxuICAgICAgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmdCYWdnYWdlSGVhZGVyKVxuICAgICAgICA/IGV4aXN0aW5nQmFnZ2FnZUhlYWRlci5maW5kKGhlYWRlckl0ZW0gPT4gYmFnZ2FnZUhlYWRlckhhc1NlbnRyeUJhZ2dhZ2VWYWx1ZXMoaGVhZGVySXRlbSkpXG4gICAgICAgIDogYmFnZ2FnZUhlYWRlckhhc1NlbnRyeUJhZ2dhZ2VWYWx1ZXMoZXhpc3RpbmdCYWdnYWdlSGVhZGVyKSk7XG5cbiAgICBpZiAoYmFnZ2FnZSAmJiAhcHJldkJhZ2dhZ2VIZWFkZXJXaXRoU2VudHJ5VmFsdWVzKSB7XG4gICAgICBuZXdCYWdnYWdlSGVhZGVycy5wdXNoKGJhZ2dhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi4ob3JpZ2luYWxIZWFkZXJzICksXG4gICAgICAnc2VudHJ5LXRyYWNlJzogKGV4aXN0aW5nU2VudHJ5VHJhY2VIZWFkZXIgKSA/PyBzZW50cnlUcmFjZSxcbiAgICAgIGJhZ2dhZ2U6IG5ld0JhZ2dhZ2VIZWFkZXJzLmxlbmd0aCA+IDAgPyBuZXdCYWdnYWdlSGVhZGVycy5qb2luKCcsJykgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmRTcGFuKHNwYW4sIGhhbmRsZXJEYXRhKSB7XG4gIGlmIChoYW5kbGVyRGF0YS5yZXNwb25zZSkge1xuICAgIHNldEh0dHBTdGF0dXMoc3BhbiwgaGFuZGxlckRhdGEucmVzcG9uc2Uuc3RhdHVzKTtcblxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBoYW5kbGVyRGF0YS5yZXNwb25zZT8uaGVhZGVycz8uZ2V0KCdjb250ZW50LWxlbmd0aCcpO1xuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGhOdW0gPSBwYXJzZUludChjb250ZW50TGVuZ3RoKTtcbiAgICAgIGlmIChjb250ZW50TGVuZ3RoTnVtID4gMCkge1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZSgnaHR0cC5yZXNwb25zZV9jb250ZW50X2xlbmd0aCcsIGNvbnRlbnRMZW5ndGhOdW0pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChoYW5kbGVyRGF0YS5lcnJvcikge1xuICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU1BBTl9TVEFUVVNfRVJST1IsIG1lc3NhZ2U6ICdpbnRlcm5hbF9lcnJvcicgfSk7XG4gIH1cbiAgc3Bhbi5lbmQoKTtcbn1cblxuZnVuY3Rpb24gYmFnZ2FnZUhlYWRlckhhc1NlbnRyeUJhZ2dhZ2VWYWx1ZXMoYmFnZ2FnZUhlYWRlcikge1xuICByZXR1cm4gYmFnZ2FnZUhlYWRlci5zcGxpdCgnLCcpLnNvbWUoYmFnZ2FnZUVudHJ5ID0+IGJhZ2dhZ2VFbnRyeS50cmltKCkuc3RhcnRzV2l0aChTRU5UUllfQkFHR0FHRV9LRVlfUFJFRklYKSk7XG59XG5cbmZ1bmN0aW9uIGlzSGVhZGVycyhoZWFkZXJzKSB7XG4gIHJldHVybiB0eXBlb2YgSGVhZGVycyAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKGhlYWRlcnMsIEhlYWRlcnMpO1xufVxuXG5mdW5jdGlvbiBnZXRTcGFuU3RhcnRPcHRpb25zKFxuICB1cmwsXG4gIG1ldGhvZCxcbiAgc3Bhbk9yaWdpbixcbikge1xuICBjb25zdCBwYXJzZWRVcmwgPSBwYXJzZVN0cmluZ1RvVVJMT2JqZWN0KHVybCk7XG4gIHJldHVybiB7XG4gICAgbmFtZTogcGFyc2VkVXJsID8gYCR7bWV0aG9kfSAke2dldFNhbml0aXplZFVybFN0cmluZ0Zyb21VcmxPYmplY3QocGFyc2VkVXJsKX1gIDogbWV0aG9kLFxuICAgIGF0dHJpYnV0ZXM6IGdldEZldGNoU3BhbkF0dHJpYnV0ZXModXJsLCBwYXJzZWRVcmwsIG1ldGhvZCwgc3Bhbk9yaWdpbiksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEZldGNoU3BhbkF0dHJpYnV0ZXMoXG4gIHVybCxcbiAgcGFyc2VkVXJsLFxuICBtZXRob2QsXG4gIHNwYW5PcmlnaW4sXG4pIHtcbiAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICB1cmwsXG4gICAgdHlwZTogJ2ZldGNoJyxcbiAgICAnaHR0cC5tZXRob2QnOiBtZXRob2QsXG4gICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOXTogc3Bhbk9yaWdpbixcbiAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUF06ICdodHRwLmNsaWVudCcsXG4gIH07XG4gIGlmIChwYXJzZWRVcmwpIHtcbiAgICBpZiAoIWlzVVJMT2JqZWN0UmVsYXRpdmUocGFyc2VkVXJsKSkge1xuICAgICAgYXR0cmlidXRlc1snaHR0cC51cmwnXSA9IHBhcnNlZFVybC5ocmVmO1xuICAgICAgYXR0cmlidXRlc1snc2VydmVyLmFkZHJlc3MnXSA9IHBhcnNlZFVybC5ob3N0O1xuICAgIH1cbiAgICBpZiAocGFyc2VkVXJsLnNlYXJjaCkge1xuICAgICAgYXR0cmlidXRlc1snaHR0cC5xdWVyeSddID0gcGFyc2VkVXJsLnNlYXJjaDtcbiAgICB9XG4gICAgaWYgKHBhcnNlZFVybC5oYXNoKSB7XG4gICAgICBhdHRyaWJ1dGVzWydodHRwLmZyYWdtZW50J10gPSBwYXJzZWRVcmwuaGFzaDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGF0dHJpYnV0ZXM7XG59XG5cbmV4cG9ydCB7IF9hZGRUcmFjaW5nSGVhZGVyc1RvRmV0Y2hSZXF1ZXN0LCBpbnN0cnVtZW50RmV0Y2hSZXF1ZXN0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mZXRjaC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/fetch.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js":
/*!*********************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js ***!
  \*********************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   BaseClient: () => (/* reexport safe */ _client_js__WEBPACK_IMPORTED_MODULE_22__.BaseClient),\n/* harmony export */   CONSOLE_LEVELS: () => (/* reexport safe */ _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_84__.CONSOLE_LEVELS),\n/* harmony export */   Client: () => (/* reexport safe */ _client_js__WEBPACK_IMPORTED_MODULE_22__.Client),\n/* harmony export */   DEFAULT_ENVIRONMENT: () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_44__.DEFAULT_ENVIRONMENT),\n/* harmony export */   DEFAULT_RETRY_AFTER: () => (/* reexport safe */ _utils_ratelimit_js__WEBPACK_IMPORTED_MODULE_102__.DEFAULT_RETRY_AFTER),\n/* harmony export */   GLOBAL_OBJ: () => (/* reexport safe */ _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_76__.GLOBAL_OBJ),\n/* harmony export */   LRUMap: () => (/* reexport safe */ _utils_lru_js__WEBPACK_IMPORTED_MODULE_107__.LRUMap),\n/* harmony export */   MAX_BAGGAGE_STRING_LENGTH: () => (/* reexport safe */ _utils_baggage_js__WEBPACK_IMPORTED_MODULE_103__.MAX_BAGGAGE_STRING_LENGTH),\n/* harmony export */   OPENAI_INTEGRATION_NAME: () => (/* reexport safe */ _utils_openai_constants_js__WEBPACK_IMPORTED_MODULE_69__.OPENAI_INTEGRATION_NAME),\n/* harmony export */   SDK_VERSION: () => (/* reexport safe */ _utils_version_js__WEBPACK_IMPORTED_MODULE_111__.SDK_VERSION),\n/* harmony export */   SEMANTIC_ATTRIBUTE_CACHE_HIT: () => (/* reexport safe */ _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_11__.SEMANTIC_ATTRIBUTE_CACHE_HIT),\n/* harmony export */   SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE: () => (/* reexport safe */ _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_11__.SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE),\n/* harmony export */   SEMANTIC_ATTRIBUTE_CACHE_KEY: () => (/* reexport safe */ _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_11__.SEMANTIC_ATTRIBUTE_CACHE_KEY),\n/* harmony export */   SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME: () => (/* reexport safe */ _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_11__.SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME),\n/* harmony export */   SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD: () => (/* reexport safe */ _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_11__.SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD),\n/* harmony export */   SEMANTIC_ATTRIBUTE_PROFILE_ID: () => (/* reexport safe */ _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_11__.SEMANTIC_ATTRIBUTE_PROFILE_ID),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME: () => (/* reexport safe */ _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_11__.SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON: () => (/* reexport safe */ _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_11__.SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT: () => (/* reexport safe */ _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_11__.SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE: () => (/* reexport safe */ _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_11__.SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_OP: () => (/* reexport safe */ _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_11__.SEMANTIC_ATTRIBUTE_SENTRY_OP),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN: () => (/* reexport safe */ _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_11__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE: () => (/* reexport safe */ _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_11__.SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE: () => (/* reexport safe */ _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_11__.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_SOURCE: () => (/* reexport safe */ _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_11__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE),\n/* harmony export */   SEMANTIC_ATTRIBUTE_URL_FULL: () => (/* reexport safe */ _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_11__.SEMANTIC_ATTRIBUTE_URL_FULL),\n/* harmony export */   SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE: () => (/* reexport safe */ _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_11__.SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE),\n/* harmony export */   SENTRY_BAGGAGE_KEY_PREFIX: () => (/* reexport safe */ _utils_baggage_js__WEBPACK_IMPORTED_MODULE_103__.SENTRY_BAGGAGE_KEY_PREFIX),\n/* harmony export */   SENTRY_BAGGAGE_KEY_PREFIX_REGEX: () => (/* reexport safe */ _utils_baggage_js__WEBPACK_IMPORTED_MODULE_103__.SENTRY_BAGGAGE_KEY_PREFIX_REGEX),\n/* harmony export */   SENTRY_BUFFER_FULL_ERROR: () => (/* reexport safe */ _utils_promisebuffer_js__WEBPACK_IMPORTED_MODULE_90__.SENTRY_BUFFER_FULL_ERROR),\n/* harmony export */   SPAN_STATUS_ERROR: () => (/* reexport safe */ _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_5__.SPAN_STATUS_ERROR),\n/* harmony export */   SPAN_STATUS_OK: () => (/* reexport safe */ _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_5__.SPAN_STATUS_OK),\n/* harmony export */   SPAN_STATUS_UNSET: () => (/* reexport safe */ _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_5__.SPAN_STATUS_UNSET),\n/* harmony export */   Scope: () => (/* reexport safe */ _scope_js__WEBPACK_IMPORTED_MODULE_19__.Scope),\n/* harmony export */   SentryError: () => (/* reexport safe */ _utils_error_js__WEBPACK_IMPORTED_MODULE_75__.SentryError),\n/* harmony export */   SentryNonRecordingSpan: () => (/* reexport safe */ _tracing_sentryNonRecordingSpan_js__WEBPACK_IMPORTED_MODULE_4__.SentryNonRecordingSpan),\n/* harmony export */   SentrySpan: () => (/* reexport safe */ _tracing_sentrySpan_js__WEBPACK_IMPORTED_MODULE_3__.SentrySpan),\n/* harmony export */   ServerRuntimeClient: () => (/* reexport safe */ _server_runtime_client_js__WEBPACK_IMPORTED_MODULE_23__.ServerRuntimeClient),\n/* harmony export */   SyncPromise: () => (/* reexport safe */ _utils_syncpromise_js__WEBPACK_IMPORTED_MODULE_96__.SyncPromise),\n/* harmony export */   TRACEPARENT_REGEXP: () => (/* reexport safe */ _utils_tracing_js__WEBPACK_IMPORTED_MODULE_98__.TRACEPARENT_REGEXP),\n/* harmony export */   TRACING_DEFAULTS: () => (/* reexport safe */ _tracing_idleSpan_js__WEBPACK_IMPORTED_MODULE_2__.TRACING_DEFAULTS),\n/* harmony export */   UNKNOWN_FUNCTION: () => (/* reexport safe */ _utils_stacktrace_js__WEBPACK_IMPORTED_MODULE_92__.UNKNOWN_FUNCTION),\n/* harmony export */   _INTERNAL_FLAG_BUFFER_SIZE: () => (/* reexport safe */ _utils_featureFlags_js__WEBPACK_IMPORTED_MODULE_70__._INTERNAL_FLAG_BUFFER_SIZE),\n/* harmony export */   _INTERNAL_MAX_FLAGS_PER_SPAN: () => (/* reexport safe */ _utils_featureFlags_js__WEBPACK_IMPORTED_MODULE_70__._INTERNAL_MAX_FLAGS_PER_SPAN),\n/* harmony export */   _INTERNAL_addFeatureFlagToActiveSpan: () => (/* reexport safe */ _utils_featureFlags_js__WEBPACK_IMPORTED_MODULE_70__._INTERNAL_addFeatureFlagToActiveSpan),\n/* harmony export */   _INTERNAL_captureLog: () => (/* reexport safe */ _logs_exports_js__WEBPACK_IMPORTED_MODULE_65__._INTERNAL_captureLog),\n/* harmony export */   _INTERNAL_captureSerializedLog: () => (/* reexport safe */ _logs_exports_js__WEBPACK_IMPORTED_MODULE_65__._INTERNAL_captureSerializedLog),\n/* harmony export */   _INTERNAL_copyFlagsFromScopeToEvent: () => (/* reexport safe */ _utils_featureFlags_js__WEBPACK_IMPORTED_MODULE_70__._INTERNAL_copyFlagsFromScopeToEvent),\n/* harmony export */   _INTERNAL_flushLogsBuffer: () => (/* reexport safe */ _logs_exports_js__WEBPACK_IMPORTED_MODULE_65__._INTERNAL_flushLogsBuffer),\n/* harmony export */   _INTERNAL_insertFlagToScope: () => (/* reexport safe */ _utils_featureFlags_js__WEBPACK_IMPORTED_MODULE_70__._INTERNAL_insertFlagToScope),\n/* harmony export */   addAutoIpAddressToSession: () => (/* reexport safe */ _utils_ipAddress_js__WEBPACK_IMPORTED_MODULE_36__.addAutoIpAddressToSession),\n/* harmony export */   addAutoIpAddressToUser: () => (/* reexport safe */ _utils_ipAddress_js__WEBPACK_IMPORTED_MODULE_36__.addAutoIpAddressToUser),\n/* harmony export */   addBreadcrumb: () => (/* reexport safe */ _breadcrumbs_js__WEBPACK_IMPORTED_MODULE_45__.addBreadcrumb),\n/* harmony export */   addChildSpanToSpan: () => (/* reexport safe */ _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_37__.addChildSpanToSpan),\n/* harmony export */   addConsoleInstrumentationHandler: () => (/* reexport safe */ _instrument_console_js__WEBPACK_IMPORTED_MODULE_77__.addConsoleInstrumentationHandler),\n/* harmony export */   addContextToFrame: () => (/* reexport safe */ _utils_misc_js__WEBPACK_IMPORTED_MODULE_85__.addContextToFrame),\n/* harmony export */   addEventProcessor: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.addEventProcessor),\n/* harmony export */   addExceptionMechanism: () => (/* reexport safe */ _utils_misc_js__WEBPACK_IMPORTED_MODULE_85__.addExceptionMechanism),\n/* harmony export */   addExceptionTypeValue: () => (/* reexport safe */ _utils_misc_js__WEBPACK_IMPORTED_MODULE_85__.addExceptionTypeValue),\n/* harmony export */   addFetchEndInstrumentationHandler: () => (/* reexport safe */ _instrument_fetch_js__WEBPACK_IMPORTED_MODULE_78__.addFetchEndInstrumentationHandler),\n/* harmony export */   addFetchInstrumentationHandler: () => (/* reexport safe */ _instrument_fetch_js__WEBPACK_IMPORTED_MODULE_78__.addFetchInstrumentationHandler),\n/* harmony export */   addGlobalErrorInstrumentationHandler: () => (/* reexport safe */ _instrument_globalError_js__WEBPACK_IMPORTED_MODULE_79__.addGlobalErrorInstrumentationHandler),\n/* harmony export */   addGlobalUnhandledRejectionInstrumentationHandler: () => (/* reexport safe */ _instrument_globalUnhandledRejection_js__WEBPACK_IMPORTED_MODULE_80__.addGlobalUnhandledRejectionInstrumentationHandler),\n/* harmony export */   addHandler: () => (/* reexport safe */ _instrument_handlers_js__WEBPACK_IMPORTED_MODULE_81__.addHandler),\n/* harmony export */   addIntegration: () => (/* reexport safe */ _integration_js__WEBPACK_IMPORTED_MODULE_28__.addIntegration),\n/* harmony export */   addItemToEnvelope: () => (/* reexport safe */ _utils_envelope_js__WEBPACK_IMPORTED_MODULE_100__.addItemToEnvelope),\n/* harmony export */   addNonEnumerableProperty: () => (/* reexport safe */ _utils_object_js__WEBPACK_IMPORTED_MODULE_88__.addNonEnumerableProperty),\n/* harmony export */   addVercelAiProcessors: () => (/* reexport safe */ _utils_vercel_ai_js__WEBPACK_IMPORTED_MODULE_67__.addVercelAiProcessors),\n/* harmony export */   applyAggregateErrorsToEvent: () => (/* reexport safe */ _utils_aggregate_errors_js__WEBPACK_IMPORTED_MODULE_71__.applyAggregateErrorsToEvent),\n/* harmony export */   applyScopeDataToEvent: () => (/* reexport safe */ _utils_applyScopeDataToEvent_js__WEBPACK_IMPORTED_MODULE_29__.applyScopeDataToEvent),\n/* harmony export */   applySdkMetadata: () => (/* reexport safe */ _utils_sdkMetadata_js__WEBPACK_IMPORTED_MODULE_39__.applySdkMetadata),\n/* harmony export */   baggageHeaderToDynamicSamplingContext: () => (/* reexport safe */ _utils_baggage_js__WEBPACK_IMPORTED_MODULE_103__.baggageHeaderToDynamicSamplingContext),\n/* harmony export */   basename: () => (/* reexport safe */ _utils_path_js__WEBPACK_IMPORTED_MODULE_89__.basename),\n/* harmony export */   browserPerformanceTimeOrigin: () => (/* reexport safe */ _utils_time_js__WEBPACK_IMPORTED_MODULE_97__.browserPerformanceTimeOrigin),\n/* harmony export */   callFrameToStackFrame: () => (/* reexport safe */ _utils_anr_js__WEBPACK_IMPORTED_MODULE_106__.callFrameToStackFrame),\n/* harmony export */   captureCheckIn: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.captureCheckIn),\n/* harmony export */   captureConsoleIntegration: () => (/* reexport safe */ _integrations_captureconsole_js__WEBPACK_IMPORTED_MODULE_51__.captureConsoleIntegration),\n/* harmony export */   captureEvent: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.captureEvent),\n/* harmony export */   captureException: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.captureException),\n/* harmony export */   captureFeedback: () => (/* reexport safe */ _feedback_js__WEBPACK_IMPORTED_MODULE_64__.captureFeedback),\n/* harmony export */   captureMessage: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.captureMessage),\n/* harmony export */   captureSession: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.captureSession),\n/* harmony export */   checkOrSetAlreadyCaught: () => (/* reexport safe */ _utils_misc_js__WEBPACK_IMPORTED_MODULE_85__.checkOrSetAlreadyCaught),\n/* harmony export */   close: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.close),\n/* harmony export */   closeSession: () => (/* reexport safe */ _session_js__WEBPACK_IMPORTED_MODULE_18__.closeSession),\n/* harmony export */   consoleIntegration: () => (/* reexport safe */ _integrations_console_js__WEBPACK_IMPORTED_MODULE_58__.consoleIntegration),\n/* harmony export */   consoleLoggingIntegration: () => (/* reexport safe */ _logs_console_integration_js__WEBPACK_IMPORTED_MODULE_66__.consoleLoggingIntegration),\n/* harmony export */   consoleSandbox: () => (/* reexport safe */ _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_84__.consoleSandbox),\n/* harmony export */   continueTrace: () => (/* reexport safe */ _tracing_trace_js__WEBPACK_IMPORTED_MODULE_6__.continueTrace),\n/* harmony export */   convertSpanLinksForEnvelope: () => (/* reexport safe */ _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_37__.convertSpanLinksForEnvelope),\n/* harmony export */   convertToPlainObject: () => (/* reexport safe */ _utils_object_js__WEBPACK_IMPORTED_MODULE_88__.convertToPlainObject),\n/* harmony export */   createAttachmentEnvelopeItem: () => (/* reexport safe */ _utils_envelope_js__WEBPACK_IMPORTED_MODULE_100__.createAttachmentEnvelopeItem),\n/* harmony export */   createCheckInEnvelope: () => (/* reexport safe */ _checkin_js__WEBPACK_IMPORTED_MODULE_31__.createCheckInEnvelope),\n/* harmony export */   createClientReportEnvelope: () => (/* reexport safe */ _utils_clientreport_js__WEBPACK_IMPORTED_MODULE_101__.createClientReportEnvelope),\n/* harmony export */   createEnvelope: () => (/* reexport safe */ _utils_envelope_js__WEBPACK_IMPORTED_MODULE_100__.createEnvelope),\n/* harmony export */   createEventEnvelope: () => (/* reexport safe */ _envelope_js__WEBPACK_IMPORTED_MODULE_12__.createEventEnvelope),\n/* harmony export */   createEventEnvelopeHeaders: () => (/* reexport safe */ _utils_envelope_js__WEBPACK_IMPORTED_MODULE_100__.createEventEnvelopeHeaders),\n/* harmony export */   createSessionEnvelope: () => (/* reexport safe */ _envelope_js__WEBPACK_IMPORTED_MODULE_12__.createSessionEnvelope),\n/* harmony export */   createSpanEnvelope: () => (/* reexport safe */ _envelope_js__WEBPACK_IMPORTED_MODULE_12__.createSpanEnvelope),\n/* harmony export */   createSpanEnvelopeItem: () => (/* reexport safe */ _utils_envelope_js__WEBPACK_IMPORTED_MODULE_100__.createSpanEnvelopeItem),\n/* harmony export */   createStackParser: () => (/* reexport safe */ _utils_stacktrace_js__WEBPACK_IMPORTED_MODULE_92__.createStackParser),\n/* harmony export */   createTransport: () => (/* reexport safe */ _transports_base_js__WEBPACK_IMPORTED_MODULE_25__.createTransport),\n/* harmony export */   dateTimestampInSeconds: () => (/* reexport safe */ _utils_time_js__WEBPACK_IMPORTED_MODULE_97__.dateTimestampInSeconds),\n/* harmony export */   debounce: () => (/* reexport safe */ _utils_debounce_js__WEBPACK_IMPORTED_MODULE_42__.debounce),\n/* harmony export */   debug: () => (/* reexport safe */ _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_84__.debug),\n/* harmony export */   dedupeIntegration: () => (/* reexport safe */ _integrations_dedupe_js__WEBPACK_IMPORTED_MODULE_52__.dedupeIntegration),\n/* harmony export */   defineIntegration: () => (/* reexport safe */ _integration_js__WEBPACK_IMPORTED_MODULE_28__.defineIntegration),\n/* harmony export */   dirname: () => (/* reexport safe */ _utils_path_js__WEBPACK_IMPORTED_MODULE_89__.dirname),\n/* harmony export */   disabledUntil: () => (/* reexport safe */ _utils_ratelimit_js__WEBPACK_IMPORTED_MODULE_102__.disabledUntil),\n/* harmony export */   dropUndefinedKeys: () => (/* reexport safe */ _utils_object_js__WEBPACK_IMPORTED_MODULE_88__.dropUndefinedKeys),\n/* harmony export */   dsnFromString: () => (/* reexport safe */ _utils_dsn_js__WEBPACK_IMPORTED_MODULE_74__.dsnFromString),\n/* harmony export */   dsnToString: () => (/* reexport safe */ _utils_dsn_js__WEBPACK_IMPORTED_MODULE_74__.dsnToString),\n/* harmony export */   dynamicSamplingContextToSentryBaggageHeader: () => (/* reexport safe */ _utils_baggage_js__WEBPACK_IMPORTED_MODULE_103__.dynamicSamplingContextToSentryBaggageHeader),\n/* harmony export */   endSession: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.endSession),\n/* harmony export */   envelopeContainsItemType: () => (/* reexport safe */ _utils_envelope_js__WEBPACK_IMPORTED_MODULE_100__.envelopeContainsItemType),\n/* harmony export */   envelopeItemTypeToDataCategory: () => (/* reexport safe */ _utils_envelope_js__WEBPACK_IMPORTED_MODULE_100__.envelopeItemTypeToDataCategory),\n/* harmony export */   escapeStringForRegex: () => (/* reexport safe */ _vendor_escapeStringForRegex_js__WEBPACK_IMPORTED_MODULE_113__.escapeStringForRegex),\n/* harmony export */   eventFiltersIntegration: () => (/* reexport safe */ _integrations_eventFilters_js__WEBPACK_IMPORTED_MODULE_47__.eventFiltersIntegration),\n/* harmony export */   eventFromMessage: () => (/* reexport safe */ _utils_eventbuilder_js__WEBPACK_IMPORTED_MODULE_105__.eventFromMessage),\n/* harmony export */   eventFromUnknownInput: () => (/* reexport safe */ _utils_eventbuilder_js__WEBPACK_IMPORTED_MODULE_105__.eventFromUnknownInput),\n/* harmony export */   exceptionFromError: () => (/* reexport safe */ _utils_eventbuilder_js__WEBPACK_IMPORTED_MODULE_105__.exceptionFromError),\n/* harmony export */   extraErrorDataIntegration: () => (/* reexport safe */ _integrations_extraerrordata_js__WEBPACK_IMPORTED_MODULE_53__.extraErrorDataIntegration),\n/* harmony export */   extractExceptionKeysForMessage: () => (/* reexport safe */ _utils_object_js__WEBPACK_IMPORTED_MODULE_88__.extractExceptionKeysForMessage),\n/* harmony export */   extractQueryParamsFromUrl: () => (/* reexport safe */ _utils_request_js__WEBPACK_IMPORTED_MODULE_43__.extractQueryParamsFromUrl),\n/* harmony export */   extractTraceparentData: () => (/* reexport safe */ _utils_tracing_js__WEBPACK_IMPORTED_MODULE_98__.extractTraceparentData),\n/* harmony export */   featureFlagsIntegration: () => (/* reexport safe */ _integrations_featureFlags_featureFlagsIntegration_js__WEBPACK_IMPORTED_MODULE_59__.featureFlagsIntegration),\n/* harmony export */   filenameIsInApp: () => (/* reexport safe */ _utils_node_stack_trace_js__WEBPACK_IMPORTED_MODULE_93__.filenameIsInApp),\n/* harmony export */   fill: () => (/* reexport safe */ _utils_object_js__WEBPACK_IMPORTED_MODULE_88__.fill),\n/* harmony export */   flush: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.flush),\n/* harmony export */   flushIfServerless: () => (/* reexport safe */ _utils_flushIfServerless_js__WEBPACK_IMPORTED_MODULE_110__.flushIfServerless),\n/* harmony export */   fmt: () => (/* reexport safe */ _utils_parameterize_js__WEBPACK_IMPORTED_MODULE_35__.fmt),\n/* harmony export */   forEachEnvelopeItem: () => (/* reexport safe */ _utils_envelope_js__WEBPACK_IMPORTED_MODULE_100__.forEachEnvelopeItem),\n/* harmony export */   functionToStringIntegration: () => (/* reexport safe */ _integrations_functiontostring_js__WEBPACK_IMPORTED_MODULE_46__.functionToStringIntegration),\n/* harmony export */   generateSentryTraceHeader: () => (/* reexport safe */ _utils_tracing_js__WEBPACK_IMPORTED_MODULE_98__.generateSentryTraceHeader),\n/* harmony export */   generateSpanId: () => (/* reexport safe */ _utils_propagationContext_js__WEBPACK_IMPORTED_MODULE_108__.generateSpanId),\n/* harmony export */   generateTraceId: () => (/* reexport safe */ _utils_propagationContext_js__WEBPACK_IMPORTED_MODULE_108__.generateTraceId),\n/* harmony export */   getActiveSpan: () => (/* reexport safe */ _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_37__.getActiveSpan),\n/* harmony export */   getBreadcrumbLogLevelFromHttpStatusCode: () => (/* reexport safe */ _utils_breadcrumb_log_level_js__WEBPACK_IMPORTED_MODULE_72__.getBreadcrumbLogLevelFromHttpStatusCode),\n/* harmony export */   getCapturedScopesOnSpan: () => (/* reexport safe */ _tracing_utils_js__WEBPACK_IMPORTED_MODULE_1__.getCapturedScopesOnSpan),\n/* harmony export */   getClient: () => (/* reexport safe */ _currentScopes_js__WEBPACK_IMPORTED_MODULE_14__.getClient),\n/* harmony export */   getComponentName: () => (/* reexport safe */ _utils_browser_js__WEBPACK_IMPORTED_MODULE_73__.getComponentName),\n/* harmony export */   getCurrentScope: () => (/* reexport safe */ _currentScopes_js__WEBPACK_IMPORTED_MODULE_14__.getCurrentScope),\n/* harmony export */   getDebugImagesForResources: () => (/* reexport safe */ _utils_debug_ids_js__WEBPACK_IMPORTED_MODULE_112__.getDebugImagesForResources),\n/* harmony export */   getDefaultCurrentScope: () => (/* reexport safe */ _defaultScopes_js__WEBPACK_IMPORTED_MODULE_15__.getDefaultCurrentScope),\n/* harmony export */   getDefaultIsolationScope: () => (/* reexport safe */ _defaultScopes_js__WEBPACK_IMPORTED_MODULE_15__.getDefaultIsolationScope),\n/* harmony export */   getDynamicSamplingContextFromClient: () => (/* reexport safe */ _tracing_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_7__.getDynamicSamplingContextFromClient),\n/* harmony export */   getDynamicSamplingContextFromScope: () => (/* reexport safe */ _tracing_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_7__.getDynamicSamplingContextFromScope),\n/* harmony export */   getDynamicSamplingContextFromSpan: () => (/* reexport safe */ _tracing_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_7__.getDynamicSamplingContextFromSpan),\n/* harmony export */   getEnvelopeEndpointWithUrlEncodedAuth: () => (/* reexport safe */ _api_js__WEBPACK_IMPORTED_MODULE_21__.getEnvelopeEndpointWithUrlEncodedAuth),\n/* harmony export */   getEventDescription: () => (/* reexport safe */ _utils_misc_js__WEBPACK_IMPORTED_MODULE_85__.getEventDescription),\n/* harmony export */   getFilenameToDebugIdMap: () => (/* reexport safe */ _utils_debug_ids_js__WEBPACK_IMPORTED_MODULE_112__.getFilenameToDebugIdMap),\n/* harmony export */   getFramesFromEvent: () => (/* reexport safe */ _utils_stacktrace_js__WEBPACK_IMPORTED_MODULE_92__.getFramesFromEvent),\n/* harmony export */   getFunctionName: () => (/* reexport safe */ _utils_stacktrace_js__WEBPACK_IMPORTED_MODULE_92__.getFunctionName),\n/* harmony export */   getGlobalScope: () => (/* reexport safe */ _currentScopes_js__WEBPACK_IMPORTED_MODULE_14__.getGlobalScope),\n/* harmony export */   getGlobalSingleton: () => (/* reexport safe */ _carrier_js__WEBPACK_IMPORTED_MODULE_17__.getGlobalSingleton),\n/* harmony export */   getHttpSpanDetailsFromUrlObject: () => (/* reexport safe */ _utils_url_js__WEBPACK_IMPORTED_MODULE_104__.getHttpSpanDetailsFromUrlObject),\n/* harmony export */   getIntegrationsToSetup: () => (/* reexport safe */ _integration_js__WEBPACK_IMPORTED_MODULE_28__.getIntegrationsToSetup),\n/* harmony export */   getIsolationScope: () => (/* reexport safe */ _currentScopes_js__WEBPACK_IMPORTED_MODULE_14__.getIsolationScope),\n/* harmony export */   getLocationHref: () => (/* reexport safe */ _utils_browser_js__WEBPACK_IMPORTED_MODULE_73__.getLocationHref),\n/* harmony export */   getMainCarrier: () => (/* reexport safe */ _carrier_js__WEBPACK_IMPORTED_MODULE_17__.getMainCarrier),\n/* harmony export */   getOriginalFunction: () => (/* reexport safe */ _utils_object_js__WEBPACK_IMPORTED_MODULE_88__.getOriginalFunction),\n/* harmony export */   getReportDialogEndpoint: () => (/* reexport safe */ _api_js__WEBPACK_IMPORTED_MODULE_21__.getReportDialogEndpoint),\n/* harmony export */   getRootSpan: () => (/* reexport safe */ _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_37__.getRootSpan),\n/* harmony export */   getSDKSource: () => (/* reexport safe */ _utils_env_js__WEBPACK_IMPORTED_MODULE_99__.getSDKSource),\n/* harmony export */   getSanitizedUrlString: () => (/* reexport safe */ _utils_url_js__WEBPACK_IMPORTED_MODULE_104__.getSanitizedUrlString),\n/* harmony export */   getSanitizedUrlStringFromUrlObject: () => (/* reexport safe */ _utils_url_js__WEBPACK_IMPORTED_MODULE_104__.getSanitizedUrlStringFromUrlObject),\n/* harmony export */   getSdkMetadataForEnvelopeHeader: () => (/* reexport safe */ _utils_envelope_js__WEBPACK_IMPORTED_MODULE_100__.getSdkMetadataForEnvelopeHeader),\n/* harmony export */   getSpanDescendants: () => (/* reexport safe */ _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_37__.getSpanDescendants),\n/* harmony export */   getSpanStatusFromHttpCode: () => (/* reexport safe */ _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_5__.getSpanStatusFromHttpCode),\n/* harmony export */   getStatusMessage: () => (/* reexport safe */ _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_37__.getStatusMessage),\n/* harmony export */   getTraceContextFromScope: () => (/* reexport safe */ _currentScopes_js__WEBPACK_IMPORTED_MODULE_14__.getTraceContextFromScope),\n/* harmony export */   getTraceData: () => (/* reexport safe */ _utils_traceData_js__WEBPACK_IMPORTED_MODULE_40__.getTraceData),\n/* harmony export */   getTraceMetaTags: () => (/* reexport safe */ _utils_meta_js__WEBPACK_IMPORTED_MODULE_41__.getTraceMetaTags),\n/* harmony export */   handleCallbackErrors: () => (/* reexport safe */ _utils_handleCallbackErrors_js__WEBPACK_IMPORTED_MODULE_34__.handleCallbackErrors),\n/* harmony export */   hasSpansEnabled: () => (/* reexport safe */ _utils_hasSpansEnabled_js__WEBPACK_IMPORTED_MODULE_32__.hasSpansEnabled),\n/* harmony export */   hasTracingEnabled: () => (/* reexport safe */ _utils_hasSpansEnabled_js__WEBPACK_IMPORTED_MODULE_32__.hasTracingEnabled),\n/* harmony export */   headersToDict: () => (/* reexport safe */ _utils_request_js__WEBPACK_IMPORTED_MODULE_43__.headersToDict),\n/* harmony export */   htmlTreeAsString: () => (/* reexport safe */ _utils_browser_js__WEBPACK_IMPORTED_MODULE_73__.htmlTreeAsString),\n/* harmony export */   httpRequestToRequestData: () => (/* reexport safe */ _utils_request_js__WEBPACK_IMPORTED_MODULE_43__.httpRequestToRequestData),\n/* harmony export */   inboundFiltersIntegration: () => (/* reexport safe */ _integrations_eventFilters_js__WEBPACK_IMPORTED_MODULE_47__.inboundFiltersIntegration),\n/* harmony export */   initAndBind: () => (/* reexport safe */ _sdk_js__WEBPACK_IMPORTED_MODULE_24__.initAndBind),\n/* harmony export */   instrumentFetchRequest: () => (/* reexport safe */ _fetch_js__WEBPACK_IMPORTED_MODULE_61__.instrumentFetchRequest),\n/* harmony export */   instrumentOpenAiClient: () => (/* reexport safe */ _utils_openai_index_js__WEBPACK_IMPORTED_MODULE_68__.instrumentOpenAiClient),\n/* harmony export */   instrumentSupabaseClient: () => (/* reexport safe */ _integrations_supabase_js__WEBPACK_IMPORTED_MODULE_55__.instrumentSupabaseClient),\n/* harmony export */   isAbsolute: () => (/* reexport safe */ _utils_path_js__WEBPACK_IMPORTED_MODULE_89__.isAbsolute),\n/* harmony export */   isBrowser: () => (/* reexport safe */ _utils_isBrowser_js__WEBPACK_IMPORTED_MODULE_83__.isBrowser),\n/* harmony export */   isBrowserBundle: () => (/* reexport safe */ _utils_env_js__WEBPACK_IMPORTED_MODULE_99__.isBrowserBundle),\n/* harmony export */   isDOMError: () => (/* reexport safe */ _utils_is_js__WEBPACK_IMPORTED_MODULE_82__.isDOMError),\n/* harmony export */   isDOMException: () => (/* reexport safe */ _utils_is_js__WEBPACK_IMPORTED_MODULE_82__.isDOMException),\n/* harmony export */   isElement: () => (/* reexport safe */ _utils_is_js__WEBPACK_IMPORTED_MODULE_82__.isElement),\n/* harmony export */   isEnabled: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.isEnabled),\n/* harmony export */   isError: () => (/* reexport safe */ _utils_is_js__WEBPACK_IMPORTED_MODULE_82__.isError),\n/* harmony export */   isErrorEvent: () => (/* reexport safe */ _utils_is_js__WEBPACK_IMPORTED_MODULE_82__.isErrorEvent),\n/* harmony export */   isEvent: () => (/* reexport safe */ _utils_is_js__WEBPACK_IMPORTED_MODULE_82__.isEvent),\n/* harmony export */   isInitialized: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.isInitialized),\n/* harmony export */   isInstanceOf: () => (/* reexport safe */ _utils_is_js__WEBPACK_IMPORTED_MODULE_82__.isInstanceOf),\n/* harmony export */   isMatchingPattern: () => (/* reexport safe */ _utils_string_js__WEBPACK_IMPORTED_MODULE_94__.isMatchingPattern),\n/* harmony export */   isNativeFunction: () => (/* reexport safe */ _utils_supports_js__WEBPACK_IMPORTED_MODULE_95__.isNativeFunction),\n/* harmony export */   isNodeEnv: () => (/* reexport safe */ _utils_node_js__WEBPACK_IMPORTED_MODULE_86__.isNodeEnv),\n/* harmony export */   isParameterizedString: () => (/* reexport safe */ _utils_is_js__WEBPACK_IMPORTED_MODULE_82__.isParameterizedString),\n/* harmony export */   isPlainObject: () => (/* reexport safe */ _utils_is_js__WEBPACK_IMPORTED_MODULE_82__.isPlainObject),\n/* harmony export */   isPrimitive: () => (/* reexport safe */ _utils_is_js__WEBPACK_IMPORTED_MODULE_82__.isPrimitive),\n/* harmony export */   isRateLimited: () => (/* reexport safe */ _utils_ratelimit_js__WEBPACK_IMPORTED_MODULE_102__.isRateLimited),\n/* harmony export */   isRegExp: () => (/* reexport safe */ _utils_is_js__WEBPACK_IMPORTED_MODULE_82__.isRegExp),\n/* harmony export */   isSentryRequestUrl: () => (/* reexport safe */ _utils_isSentryRequestUrl_js__WEBPACK_IMPORTED_MODULE_33__.isSentryRequestUrl),\n/* harmony export */   isString: () => (/* reexport safe */ _utils_is_js__WEBPACK_IMPORTED_MODULE_82__.isString),\n/* harmony export */   isSyntheticEvent: () => (/* reexport safe */ _utils_is_js__WEBPACK_IMPORTED_MODULE_82__.isSyntheticEvent),\n/* harmony export */   isThenable: () => (/* reexport safe */ _utils_is_js__WEBPACK_IMPORTED_MODULE_82__.isThenable),\n/* harmony export */   isURLObjectRelative: () => (/* reexport safe */ _utils_url_js__WEBPACK_IMPORTED_MODULE_104__.isURLObjectRelative),\n/* harmony export */   isVueViewModel: () => (/* reexport safe */ _utils_is_js__WEBPACK_IMPORTED_MODULE_82__.isVueViewModel),\n/* harmony export */   join: () => (/* reexport safe */ _utils_path_js__WEBPACK_IMPORTED_MODULE_89__.join),\n/* harmony export */   lastEventId: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.lastEventId),\n/* harmony export */   linkedErrorsIntegration: () => (/* reexport safe */ _integrations_linkederrors_js__WEBPACK_IMPORTED_MODULE_48__.linkedErrorsIntegration),\n/* harmony export */   loadModule: () => (/* reexport safe */ _utils_node_js__WEBPACK_IMPORTED_MODULE_86__.loadModule),\n/* harmony export */   logSpanEnd: () => (/* reexport safe */ _tracing_logSpans_js__WEBPACK_IMPORTED_MODULE_10__.logSpanEnd),\n/* harmony export */   logSpanStart: () => (/* reexport safe */ _tracing_logSpans_js__WEBPACK_IMPORTED_MODULE_10__.logSpanStart),\n/* harmony export */   logger: () => (/* reexport safe */ _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_84__.logger),\n/* harmony export */   makeDsn: () => (/* reexport safe */ _utils_dsn_js__WEBPACK_IMPORTED_MODULE_74__.makeDsn),\n/* harmony export */   makeMultiplexedTransport: () => (/* reexport safe */ _transports_multiplexed_js__WEBPACK_IMPORTED_MODULE_27__.makeMultiplexedTransport),\n/* harmony export */   makeOfflineTransport: () => (/* reexport safe */ _transports_offline_js__WEBPACK_IMPORTED_MODULE_26__.makeOfflineTransport),\n/* harmony export */   makePromiseBuffer: () => (/* reexport safe */ _utils_promisebuffer_js__WEBPACK_IMPORTED_MODULE_90__.makePromiseBuffer),\n/* harmony export */   makeSession: () => (/* reexport safe */ _session_js__WEBPACK_IMPORTED_MODULE_18__.makeSession),\n/* harmony export */   markFunctionWrapped: () => (/* reexport safe */ _utils_object_js__WEBPACK_IMPORTED_MODULE_88__.markFunctionWrapped),\n/* harmony export */   maybeInstrument: () => (/* reexport safe */ _instrument_handlers_js__WEBPACK_IMPORTED_MODULE_81__.maybeInstrument),\n/* harmony export */   mergeScopeData: () => (/* reexport safe */ _utils_applyScopeDataToEvent_js__WEBPACK_IMPORTED_MODULE_29__.mergeScopeData),\n/* harmony export */   moduleMetadataIntegration: () => (/* reexport safe */ _integrations_metadata_js__WEBPACK_IMPORTED_MODULE_49__.moduleMetadataIntegration),\n/* harmony export */   node: () => (/* reexport safe */ _utils_node_stack_trace_js__WEBPACK_IMPORTED_MODULE_93__.node),\n/* harmony export */   nodeStackLineParser: () => (/* reexport safe */ _utils_node_stack_trace_js__WEBPACK_IMPORTED_MODULE_93__.nodeStackLineParser),\n/* harmony export */   normalize: () => (/* reexport safe */ _utils_normalize_js__WEBPACK_IMPORTED_MODULE_87__.normalize),\n/* harmony export */   normalizePath: () => (/* reexport safe */ _utils_path_js__WEBPACK_IMPORTED_MODULE_89__.normalizePath),\n/* harmony export */   normalizeToSize: () => (/* reexport safe */ _utils_normalize_js__WEBPACK_IMPORTED_MODULE_87__.normalizeToSize),\n/* harmony export */   normalizeUrlToBase: () => (/* reexport safe */ _utils_normalize_js__WEBPACK_IMPORTED_MODULE_87__.normalizeUrlToBase),\n/* harmony export */   notifyEventProcessors: () => (/* reexport safe */ _eventProcessors_js__WEBPACK_IMPORTED_MODULE_20__.notifyEventProcessors),\n/* harmony export */   objectToBaggageHeader: () => (/* reexport safe */ _utils_baggage_js__WEBPACK_IMPORTED_MODULE_103__.objectToBaggageHeader),\n/* harmony export */   objectify: () => (/* reexport safe */ _utils_object_js__WEBPACK_IMPORTED_MODULE_88__.objectify),\n/* harmony export */   originalConsoleMethods: () => (/* reexport safe */ _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_84__.originalConsoleMethods),\n/* harmony export */   parameterize: () => (/* reexport safe */ _utils_parameterize_js__WEBPACK_IMPORTED_MODULE_35__.parameterize),\n/* harmony export */   parseBaggageHeader: () => (/* reexport safe */ _utils_baggage_js__WEBPACK_IMPORTED_MODULE_103__.parseBaggageHeader),\n/* harmony export */   parseEnvelope: () => (/* reexport safe */ _utils_envelope_js__WEBPACK_IMPORTED_MODULE_100__.parseEnvelope),\n/* harmony export */   parseRetryAfterHeader: () => (/* reexport safe */ _utils_ratelimit_js__WEBPACK_IMPORTED_MODULE_102__.parseRetryAfterHeader),\n/* harmony export */   parseSampleRate: () => (/* reexport safe */ _utils_parseSampleRate_js__WEBPACK_IMPORTED_MODULE_38__.parseSampleRate),\n/* harmony export */   parseSemver: () => (/* reexport safe */ _utils_misc_js__WEBPACK_IMPORTED_MODULE_85__.parseSemver),\n/* harmony export */   parseStackFrames: () => (/* reexport safe */ _utils_eventbuilder_js__WEBPACK_IMPORTED_MODULE_105__.parseStackFrames),\n/* harmony export */   parseStringToURLObject: () => (/* reexport safe */ _utils_url_js__WEBPACK_IMPORTED_MODULE_104__.parseStringToURLObject),\n/* harmony export */   parseUrl: () => (/* reexport safe */ _utils_url_js__WEBPACK_IMPORTED_MODULE_104__.parseUrl),\n/* harmony export */   prepareEvent: () => (/* reexport safe */ _utils_prepareEvent_js__WEBPACK_IMPORTED_MODULE_30__.prepareEvent),\n/* harmony export */   profiler: () => (/* reexport safe */ _profiling_js__WEBPACK_IMPORTED_MODULE_60__.profiler),\n/* harmony export */   propagationContextFromHeaders: () => (/* reexport safe */ _utils_tracing_js__WEBPACK_IMPORTED_MODULE_98__.propagationContextFromHeaders),\n/* harmony export */   registerSpanErrorInstrumentation: () => (/* reexport safe */ _tracing_errors_js__WEBPACK_IMPORTED_MODULE_0__.registerSpanErrorInstrumentation),\n/* harmony export */   rejectedSyncPromise: () => (/* reexport safe */ _utils_syncpromise_js__WEBPACK_IMPORTED_MODULE_96__.rejectedSyncPromise),\n/* harmony export */   relative: () => (/* reexport safe */ _utils_path_js__WEBPACK_IMPORTED_MODULE_89__.relative),\n/* harmony export */   requestDataIntegration: () => (/* reexport safe */ _integrations_requestdata_js__WEBPACK_IMPORTED_MODULE_50__.requestDataIntegration),\n/* harmony export */   resetInstrumentationHandlers: () => (/* reexport safe */ _instrument_handlers_js__WEBPACK_IMPORTED_MODULE_81__.resetInstrumentationHandlers),\n/* harmony export */   resolve: () => (/* reexport safe */ _utils_path_js__WEBPACK_IMPORTED_MODULE_89__.resolve),\n/* harmony export */   resolvedSyncPromise: () => (/* reexport safe */ _utils_syncpromise_js__WEBPACK_IMPORTED_MODULE_96__.resolvedSyncPromise),\n/* harmony export */   rewriteFramesIntegration: () => (/* reexport safe */ _integrations_rewriteframes_js__WEBPACK_IMPORTED_MODULE_54__.rewriteFramesIntegration),\n/* harmony export */   safeJoin: () => (/* reexport safe */ _utils_string_js__WEBPACK_IMPORTED_MODULE_94__.safeJoin),\n/* harmony export */   sampleSpan: () => (/* reexport safe */ _tracing_sampling_js__WEBPACK_IMPORTED_MODULE_9__.sampleSpan),\n/* harmony export */   serializeEnvelope: () => (/* reexport safe */ _utils_envelope_js__WEBPACK_IMPORTED_MODULE_100__.serializeEnvelope),\n/* harmony export */   setAsyncContextStrategy: () => (/* reexport safe */ _asyncContext_index_js__WEBPACK_IMPORTED_MODULE_16__.setAsyncContextStrategy),\n/* harmony export */   setCapturedScopesOnSpan: () => (/* reexport safe */ _tracing_utils_js__WEBPACK_IMPORTED_MODULE_1__.setCapturedScopesOnSpan),\n/* harmony export */   setContext: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.setContext),\n/* harmony export */   setCurrentClient: () => (/* reexport safe */ _sdk_js__WEBPACK_IMPORTED_MODULE_24__.setCurrentClient),\n/* harmony export */   setExtra: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.setExtra),\n/* harmony export */   setExtras: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.setExtras),\n/* harmony export */   setHttpStatus: () => (/* reexport safe */ _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_5__.setHttpStatus),\n/* harmony export */   setMeasurement: () => (/* reexport safe */ _tracing_measurement_js__WEBPACK_IMPORTED_MODULE_8__.setMeasurement),\n/* harmony export */   setTag: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.setTag),\n/* harmony export */   setTags: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.setTags),\n/* harmony export */   setUser: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.setUser),\n/* harmony export */   severityLevelFromString: () => (/* reexport safe */ _utils_severity_js__WEBPACK_IMPORTED_MODULE_91__.severityLevelFromString),\n/* harmony export */   snipLine: () => (/* reexport safe */ _utils_string_js__WEBPACK_IMPORTED_MODULE_94__.snipLine),\n/* harmony export */   spanIsSampled: () => (/* reexport safe */ _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_37__.spanIsSampled),\n/* harmony export */   spanTimeInputToSeconds: () => (/* reexport safe */ _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_37__.spanTimeInputToSeconds),\n/* harmony export */   spanToBaggageHeader: () => (/* reexport safe */ _tracing_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_7__.spanToBaggageHeader),\n/* harmony export */   spanToJSON: () => (/* reexport safe */ _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_37__.spanToJSON),\n/* harmony export */   spanToTraceContext: () => (/* reexport safe */ _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_37__.spanToTraceContext),\n/* harmony export */   spanToTraceHeader: () => (/* reexport safe */ _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_37__.spanToTraceHeader),\n/* harmony export */   stackParserFromStackParserOptions: () => (/* reexport safe */ _utils_stacktrace_js__WEBPACK_IMPORTED_MODULE_92__.stackParserFromStackParserOptions),\n/* harmony export */   startIdleSpan: () => (/* reexport safe */ _tracing_idleSpan_js__WEBPACK_IMPORTED_MODULE_2__.startIdleSpan),\n/* harmony export */   startInactiveSpan: () => (/* reexport safe */ _tracing_trace_js__WEBPACK_IMPORTED_MODULE_6__.startInactiveSpan),\n/* harmony export */   startNewTrace: () => (/* reexport safe */ _tracing_trace_js__WEBPACK_IMPORTED_MODULE_6__.startNewTrace),\n/* harmony export */   startSession: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.startSession),\n/* harmony export */   startSpan: () => (/* reexport safe */ _tracing_trace_js__WEBPACK_IMPORTED_MODULE_6__.startSpan),\n/* harmony export */   startSpanManual: () => (/* reexport safe */ _tracing_trace_js__WEBPACK_IMPORTED_MODULE_6__.startSpanManual),\n/* harmony export */   stringMatchesSomePattern: () => (/* reexport safe */ _utils_string_js__WEBPACK_IMPORTED_MODULE_94__.stringMatchesSomePattern),\n/* harmony export */   stripSentryFramesAndReverse: () => (/* reexport safe */ _utils_stacktrace_js__WEBPACK_IMPORTED_MODULE_92__.stripSentryFramesAndReverse),\n/* harmony export */   stripUrlQueryAndFragment: () => (/* reexport safe */ _utils_url_js__WEBPACK_IMPORTED_MODULE_104__.stripUrlQueryAndFragment),\n/* harmony export */   supabaseIntegration: () => (/* reexport safe */ _integrations_supabase_js__WEBPACK_IMPORTED_MODULE_55__.supabaseIntegration),\n/* harmony export */   supportsDOMError: () => (/* reexport safe */ _utils_supports_js__WEBPACK_IMPORTED_MODULE_95__.supportsDOMError),\n/* harmony export */   supportsDOMException: () => (/* reexport safe */ _utils_supports_js__WEBPACK_IMPORTED_MODULE_95__.supportsDOMException),\n/* harmony export */   supportsErrorEvent: () => (/* reexport safe */ _utils_supports_js__WEBPACK_IMPORTED_MODULE_95__.supportsErrorEvent),\n/* harmony export */   supportsFetch: () => (/* reexport safe */ _utils_supports_js__WEBPACK_IMPORTED_MODULE_95__.supportsFetch),\n/* harmony export */   supportsHistory: () => (/* reexport safe */ _utils_supports_js__WEBPACK_IMPORTED_MODULE_95__.supportsHistory),\n/* harmony export */   supportsNativeFetch: () => (/* reexport safe */ _utils_supports_js__WEBPACK_IMPORTED_MODULE_95__.supportsNativeFetch),\n/* harmony export */   supportsReferrerPolicy: () => (/* reexport safe */ _utils_supports_js__WEBPACK_IMPORTED_MODULE_95__.supportsReferrerPolicy),\n/* harmony export */   supportsReportingObserver: () => (/* reexport safe */ _utils_supports_js__WEBPACK_IMPORTED_MODULE_95__.supportsReportingObserver),\n/* harmony export */   suppressTracing: () => (/* reexport safe */ _tracing_trace_js__WEBPACK_IMPORTED_MODULE_6__.suppressTracing),\n/* harmony export */   thirdPartyErrorFilterIntegration: () => (/* reexport safe */ _integrations_third_party_errors_filter_js__WEBPACK_IMPORTED_MODULE_57__.thirdPartyErrorFilterIntegration),\n/* harmony export */   timedEventsToMeasurements: () => (/* reexport safe */ _tracing_measurement_js__WEBPACK_IMPORTED_MODULE_8__.timedEventsToMeasurements),\n/* harmony export */   timestampInSeconds: () => (/* reexport safe */ _utils_time_js__WEBPACK_IMPORTED_MODULE_97__.timestampInSeconds),\n/* harmony export */   triggerHandlers: () => (/* reexport safe */ _instrument_handlers_js__WEBPACK_IMPORTED_MODULE_81__.triggerHandlers),\n/* harmony export */   trpcMiddleware: () => (/* reexport safe */ _trpc_js__WEBPACK_IMPORTED_MODULE_62__.trpcMiddleware),\n/* harmony export */   truncate: () => (/* reexport safe */ _utils_string_js__WEBPACK_IMPORTED_MODULE_94__.truncate),\n/* harmony export */   updateRateLimits: () => (/* reexport safe */ _utils_ratelimit_js__WEBPACK_IMPORTED_MODULE_102__.updateRateLimits),\n/* harmony export */   updateSession: () => (/* reexport safe */ _session_js__WEBPACK_IMPORTED_MODULE_18__.updateSession),\n/* harmony export */   updateSpanName: () => (/* reexport safe */ _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_37__.updateSpanName),\n/* harmony export */   uuid4: () => (/* reexport safe */ _utils_misc_js__WEBPACK_IMPORTED_MODULE_85__.uuid4),\n/* harmony export */   vercelWaitUntil: () => (/* reexport safe */ _utils_vercelWaitUntil_js__WEBPACK_IMPORTED_MODULE_109__.vercelWaitUntil),\n/* harmony export */   watchdogTimer: () => (/* reexport safe */ _utils_anr_js__WEBPACK_IMPORTED_MODULE_106__.watchdogTimer),\n/* harmony export */   winterCGHeadersToDict: () => (/* reexport safe */ _utils_request_js__WEBPACK_IMPORTED_MODULE_43__.winterCGHeadersToDict),\n/* harmony export */   winterCGRequestToRequestData: () => (/* reexport safe */ _utils_request_js__WEBPACK_IMPORTED_MODULE_43__.winterCGRequestToRequestData),\n/* harmony export */   withActiveSpan: () => (/* reexport safe */ _tracing_trace_js__WEBPACK_IMPORTED_MODULE_6__.withActiveSpan),\n/* harmony export */   withIsolationScope: () => (/* reexport safe */ _currentScopes_js__WEBPACK_IMPORTED_MODULE_14__.withIsolationScope),\n/* harmony export */   withMonitor: () => (/* reexport safe */ _exports_js__WEBPACK_IMPORTED_MODULE_13__.withMonitor),\n/* harmony export */   withScope: () => (/* reexport safe */ _currentScopes_js__WEBPACK_IMPORTED_MODULE_14__.withScope),\n/* harmony export */   wrapMcpServerWithSentry: () => (/* reexport safe */ _integrations_mcp_server_index_js__WEBPACK_IMPORTED_MODULE_63__.wrapMcpServerWithSentry),\n/* harmony export */   zodErrorsIntegration: () => (/* reexport safe */ _integrations_zoderrors_js__WEBPACK_IMPORTED_MODULE_56__.zodErrorsIntegration)\n/* harmony export */ });\n/* harmony import */ var _tracing_errors_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tracing/errors.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/errors.js\");\n/* harmony import */ var _tracing_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tracing/utils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/utils.js\");\n/* harmony import */ var _tracing_idleSpan_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tracing/idleSpan.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/idleSpan.js\");\n/* harmony import */ var _tracing_sentrySpan_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tracing/sentrySpan.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/sentrySpan.js\");\n/* harmony import */ var _tracing_sentryNonRecordingSpan_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tracing/sentryNonRecordingSpan.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/sentryNonRecordingSpan.js\");\n/* harmony import */ var _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tracing/spanstatus.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/spanstatus.js\");\n/* harmony import */ var _tracing_trace_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tracing/trace.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/trace.js\");\n/* harmony import */ var _tracing_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tracing/dynamicSamplingContext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js\");\n/* harmony import */ var _tracing_measurement_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./tracing/measurement.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/measurement.js\");\n/* harmony import */ var _tracing_sampling_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./tracing/sampling.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/sampling.js\");\n/* harmony import */ var _tracing_logSpans_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./tracing/logSpans.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/logSpans.js\");\n/* harmony import */ var _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./semanticAttributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/semanticAttributes.js\");\n/* harmony import */ var _envelope_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./envelope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/envelope.js\");\n/* harmony import */ var _exports_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./exports.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/exports.js\");\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _defaultScopes_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./defaultScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/defaultScopes.js\");\n/* harmony import */ var _asyncContext_index_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./asyncContext/index.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/asyncContext/index.js\");\n/* harmony import */ var _carrier_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./carrier.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/carrier.js\");\n/* harmony import */ var _session_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./session.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/session.js\");\n/* harmony import */ var _scope_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./scope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/scope.js\");\n/* harmony import */ var _eventProcessors_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./eventProcessors.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/eventProcessors.js\");\n/* harmony import */ var _api_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./api.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/api.js\");\n/* harmony import */ var _client_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./client.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/client.js\");\n/* harmony import */ var _server_runtime_client_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./server-runtime-client.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/server-runtime-client.js\");\n/* harmony import */ var _sdk_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./sdk.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/sdk.js\");\n/* harmony import */ var _transports_base_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./transports/base.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/transports/base.js\");\n/* harmony import */ var _transports_offline_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./transports/offline.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/transports/offline.js\");\n/* harmony import */ var _transports_multiplexed_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./transports/multiplexed.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/transports/multiplexed.js\");\n/* harmony import */ var _integration_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js\");\n/* harmony import */ var _utils_applyScopeDataToEvent_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./utils/applyScopeDataToEvent.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/applyScopeDataToEvent.js\");\n/* harmony import */ var _utils_prepareEvent_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./utils/prepareEvent.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/prepareEvent.js\");\n/* harmony import */ var _checkin_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./checkin.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/checkin.js\");\n/* harmony import */ var _utils_hasSpansEnabled_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./utils/hasSpansEnabled.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/hasSpansEnabled.js\");\n/* harmony import */ var _utils_isSentryRequestUrl_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./utils/isSentryRequestUrl.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/isSentryRequestUrl.js\");\n/* harmony import */ var _utils_handleCallbackErrors_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./utils/handleCallbackErrors.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/handleCallbackErrors.js\");\n/* harmony import */ var _utils_parameterize_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./utils/parameterize.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/parameterize.js\");\n/* harmony import */ var _utils_ipAddress_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./utils/ipAddress.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/ipAddress.js\");\n/* harmony import */ var _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./utils/spanUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js\");\n/* harmony import */ var _utils_parseSampleRate_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./utils/parseSampleRate.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/parseSampleRate.js\");\n/* harmony import */ var _utils_sdkMetadata_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./utils/sdkMetadata.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/sdkMetadata.js\");\n/* harmony import */ var _utils_traceData_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./utils/traceData.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/traceData.js\");\n/* harmony import */ var _utils_meta_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./utils/meta.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/meta.js\");\n/* harmony import */ var _utils_debounce_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./utils/debounce.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debounce.js\");\n/* harmony import */ var _utils_request_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./utils/request.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/request.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./constants.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/constants.js\");\n/* harmony import */ var _breadcrumbs_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./breadcrumbs.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/breadcrumbs.js\");\n/* harmony import */ var _integrations_functiontostring_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./integrations/functiontostring.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/functiontostring.js\");\n/* harmony import */ var _integrations_eventFilters_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./integrations/eventFilters.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/eventFilters.js\");\n/* harmony import */ var _integrations_linkederrors_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./integrations/linkederrors.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/linkederrors.js\");\n/* harmony import */ var _integrations_metadata_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./integrations/metadata.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/metadata.js\");\n/* harmony import */ var _integrations_requestdata_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./integrations/requestdata.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/requestdata.js\");\n/* harmony import */ var _integrations_captureconsole_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./integrations/captureconsole.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/captureconsole.js\");\n/* harmony import */ var _integrations_dedupe_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./integrations/dedupe.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/dedupe.js\");\n/* harmony import */ var _integrations_extraerrordata_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./integrations/extraerrordata.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/extraerrordata.js\");\n/* harmony import */ var _integrations_rewriteframes_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./integrations/rewriteframes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/rewriteframes.js\");\n/* harmony import */ var _integrations_supabase_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./integrations/supabase.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/supabase.js\");\n/* harmony import */ var _integrations_zoderrors_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./integrations/zoderrors.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/zoderrors.js\");\n/* harmony import */ var _integrations_third_party_errors_filter_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./integrations/third-party-errors-filter.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/third-party-errors-filter.js\");\n/* harmony import */ var _integrations_console_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./integrations/console.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/console.js\");\n/* harmony import */ var _integrations_featureFlags_featureFlagsIntegration_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./integrations/featureFlags/featureFlagsIntegration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/featureFlags/featureFlagsIntegration.js\");\n/* harmony import */ var _profiling_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./profiling.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/profiling.js\");\n/* harmony import */ var _fetch_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./fetch.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/fetch.js\");\n/* harmony import */ var _trpc_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./trpc.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/trpc.js\");\n/* harmony import */ var _integrations_mcp_server_index_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./integrations/mcp-server/index.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/index.js\");\n/* harmony import */ var _feedback_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./feedback.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/feedback.js\");\n/* harmony import */ var _logs_exports_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./logs/exports.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/logs/exports.js\");\n/* harmony import */ var _logs_console_integration_js__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./logs/console-integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/logs/console-integration.js\");\n/* harmony import */ var _utils_vercel_ai_js__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./utils/vercel-ai.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/vercel-ai.js\");\n/* harmony import */ var _utils_openai_index_js__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./utils/openai/index.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/openai/index.js\");\n/* harmony import */ var _utils_openai_constants_js__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./utils/openai/constants.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/openai/constants.js\");\n/* harmony import */ var _utils_featureFlags_js__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./utils/featureFlags.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/featureFlags.js\");\n/* harmony import */ var _utils_aggregate_errors_js__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./utils/aggregate-errors.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/aggregate-errors.js\");\n/* harmony import */ var _utils_breadcrumb_log_level_js__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./utils/breadcrumb-log-level.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/breadcrumb-log-level.js\");\n/* harmony import */ var _utils_browser_js__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./utils/browser.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/browser.js\");\n/* harmony import */ var _utils_dsn_js__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./utils/dsn.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/dsn.js\");\n/* harmony import */ var _utils_error_js__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./utils/error.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/error.js\");\n/* harmony import */ var _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./utils/worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n/* harmony import */ var _instrument_console_js__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./instrument/console.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/console.js\");\n/* harmony import */ var _instrument_fetch_js__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./instrument/fetch.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/fetch.js\");\n/* harmony import */ var _instrument_globalError_js__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./instrument/globalError.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/globalError.js\");\n/* harmony import */ var _instrument_globalUnhandledRejection_js__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./instrument/globalUnhandledRejection.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/globalUnhandledRejection.js\");\n/* harmony import */ var _instrument_handlers_js__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./instrument/handlers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/handlers.js\");\n/* harmony import */ var _utils_is_js__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! ./utils/is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n/* harmony import */ var _utils_isBrowser_js__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! ./utils/isBrowser.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/isBrowser.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! ./utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_misc_js__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! ./utils/misc.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/misc.js\");\n/* harmony import */ var _utils_node_js__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! ./utils/node.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/node.js\");\n/* harmony import */ var _utils_normalize_js__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(/*! ./utils/normalize.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/normalize.js\");\n/* harmony import */ var _utils_object_js__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(/*! ./utils/object.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js\");\n/* harmony import */ var _utils_path_js__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(/*! ./utils/path.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/path.js\");\n/* harmony import */ var _utils_promisebuffer_js__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(/*! ./utils/promisebuffer.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/promisebuffer.js\");\n/* harmony import */ var _utils_severity_js__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(/*! ./utils/severity.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/severity.js\");\n/* harmony import */ var _utils_stacktrace_js__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(/*! ./utils/stacktrace.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/stacktrace.js\");\n/* harmony import */ var _utils_node_stack_trace_js__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(/*! ./utils/node-stack-trace.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/node-stack-trace.js\");\n/* harmony import */ var _utils_string_js__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(/*! ./utils/string.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/string.js\");\n/* harmony import */ var _utils_supports_js__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(/*! ./utils/supports.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/supports.js\");\n/* harmony import */ var _utils_syncpromise_js__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(/*! ./utils/syncpromise.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/syncpromise.js\");\n/* harmony import */ var _utils_time_js__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(/*! ./utils/time.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/time.js\");\n/* harmony import */ var _utils_tracing_js__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(/*! ./utils/tracing.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/tracing.js\");\n/* harmony import */ var _utils_env_js__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(/*! ./utils/env.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/env.js\");\n/* harmony import */ var _utils_envelope_js__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(/*! ./utils/envelope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/envelope.js\");\n/* harmony import */ var _utils_clientreport_js__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(/*! ./utils/clientreport.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/clientreport.js\");\n/* harmony import */ var _utils_ratelimit_js__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(/*! ./utils/ratelimit.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/ratelimit.js\");\n/* harmony import */ var _utils_baggage_js__WEBPACK_IMPORTED_MODULE_103__ = __webpack_require__(/*! ./utils/baggage.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/baggage.js\");\n/* harmony import */ var _utils_url_js__WEBPACK_IMPORTED_MODULE_104__ = __webpack_require__(/*! ./utils/url.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/url.js\");\n/* harmony import */ var _utils_eventbuilder_js__WEBPACK_IMPORTED_MODULE_105__ = __webpack_require__(/*! ./utils/eventbuilder.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/eventbuilder.js\");\n/* harmony import */ var _utils_anr_js__WEBPACK_IMPORTED_MODULE_106__ = __webpack_require__(/*! ./utils/anr.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/anr.js\");\n/* harmony import */ var _utils_lru_js__WEBPACK_IMPORTED_MODULE_107__ = __webpack_require__(/*! ./utils/lru.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/lru.js\");\n/* harmony import */ var _utils_propagationContext_js__WEBPACK_IMPORTED_MODULE_108__ = __webpack_require__(/*! ./utils/propagationContext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/propagationContext.js\");\n/* harmony import */ var _utils_vercelWaitUntil_js__WEBPACK_IMPORTED_MODULE_109__ = __webpack_require__(/*! ./utils/vercelWaitUntil.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/vercelWaitUntil.js\");\n/* harmony import */ var _utils_flushIfServerless_js__WEBPACK_IMPORTED_MODULE_110__ = __webpack_require__(/*! ./utils/flushIfServerless.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/flushIfServerless.js\");\n/* harmony import */ var _utils_version_js__WEBPACK_IMPORTED_MODULE_111__ = __webpack_require__(/*! ./utils/version.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/version.js\");\n/* harmony import */ var _utils_debug_ids_js__WEBPACK_IMPORTED_MODULE_112__ = __webpack_require__(/*! ./utils/debug-ids.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-ids.js\");\n/* harmony import */ var _vendor_escapeStringForRegex_js__WEBPACK_IMPORTED_MODULE_113__ = __webpack_require__(/*! ./vendor/escapeStringForRegex.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/vendor/escapeStringForRegex.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUF1RTtBQUNlO0FBQ2Q7QUFDbkI7QUFDd0I7QUFDNEQ7QUFDUztBQUNvQztBQUNqRztBQUNsQztBQUNjO0FBQ3ltQjtBQUMza0I7QUFDeUw7QUFDNUg7QUFDdEU7QUFDcEI7QUFDQTtBQUNNO0FBQ3JDO0FBQzBCO0FBQzZCO0FBQ3pDO0FBQ2dCO0FBQ1I7QUFDRjtBQUNRO0FBQ1E7QUFDc0I7QUFDSjtBQUNsQztBQUNGO0FBQzJCO0FBQ2I7QUFDSTtBQUNYO0FBQzZCO0FBQzBLO0FBQ3RNO0FBQ0g7QUFDTjtBQUNEO0FBQ0o7QUFDOEc7QUFDeEc7QUFDSjtBQUNnQztBQUNtQjtBQUMzQjtBQUNGO0FBQ0E7QUFDTTtBQUNoQjtBQUNnQjtBQUNGO0FBQ2dCO0FBQ3hCO0FBQzRCO0FBQ2hDO0FBQ2tDO0FBQ3ZEO0FBQ1U7QUFDVDtBQUNrQztBQUM3QjtBQUNvRTtBQUMxQztBQUNiO0FBQ0k7QUFDSztBQUNxSTtBQUNqSTtBQUNnQjtBQUNEO0FBQ3BCO0FBQ3RCO0FBQ0c7QUFDeUI7QUFDK0I7QUFDdkI7QUFDMEI7QUFDUztBQUNtSDtBQUN4TDtBQUMrRDtBQUNvRDtBQUM1RztBQUM4QjtBQUMyRztBQUN6RjtBQUNqQjtBQUN6QjtBQUNtSDtBQUN4RjtBQUNxQjtBQUM2RztBQUM1SDtBQUNZO0FBQytCO0FBQzNFO0FBQzZPO0FBQ3ZPO0FBQzZEO0FBQ3dIO0FBQzdDO0FBQ3JGO0FBQ2xEO0FBQzlCO0FBQ3dDO0FBQ25CO0FBQ0k7QUFDaEI7QUFDMEM7QUFDbkI7QUFDeEUiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyByZWdpc3RlclNwYW5FcnJvckluc3RydW1lbnRhdGlvbiB9IGZyb20gJy4vdHJhY2luZy9lcnJvcnMuanMnO1xuZXhwb3J0IHsgZ2V0Q2FwdHVyZWRTY29wZXNPblNwYW4sIHNldENhcHR1cmVkU2NvcGVzT25TcGFuIH0gZnJvbSAnLi90cmFjaW5nL3V0aWxzLmpzJztcbmV4cG9ydCB7IFRSQUNJTkdfREVGQVVMVFMsIHN0YXJ0SWRsZVNwYW4gfSBmcm9tICcuL3RyYWNpbmcvaWRsZVNwYW4uanMnO1xuZXhwb3J0IHsgU2VudHJ5U3BhbiB9IGZyb20gJy4vdHJhY2luZy9zZW50cnlTcGFuLmpzJztcbmV4cG9ydCB7IFNlbnRyeU5vblJlY29yZGluZ1NwYW4gfSBmcm9tICcuL3RyYWNpbmcvc2VudHJ5Tm9uUmVjb3JkaW5nU3Bhbi5qcyc7XG5leHBvcnQgeyBTUEFOX1NUQVRVU19FUlJPUiwgU1BBTl9TVEFUVVNfT0ssIFNQQU5fU1RBVFVTX1VOU0VULCBnZXRTcGFuU3RhdHVzRnJvbUh0dHBDb2RlLCBzZXRIdHRwU3RhdHVzIH0gZnJvbSAnLi90cmFjaW5nL3NwYW5zdGF0dXMuanMnO1xuZXhwb3J0IHsgY29udGludWVUcmFjZSwgc3RhcnRJbmFjdGl2ZVNwYW4sIHN0YXJ0TmV3VHJhY2UsIHN0YXJ0U3Bhbiwgc3RhcnRTcGFuTWFudWFsLCBzdXBwcmVzc1RyYWNpbmcsIHdpdGhBY3RpdmVTcGFuIH0gZnJvbSAnLi90cmFjaW5nL3RyYWNlLmpzJztcbmV4cG9ydCB7IGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tQ2xpZW50LCBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNjb3BlLCBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4sIHNwYW5Ub0JhZ2dhZ2VIZWFkZXIgfSBmcm9tICcuL3RyYWNpbmcvZHluYW1pY1NhbXBsaW5nQ29udGV4dC5qcyc7XG5leHBvcnQgeyBzZXRNZWFzdXJlbWVudCwgdGltZWRFdmVudHNUb01lYXN1cmVtZW50cyB9IGZyb20gJy4vdHJhY2luZy9tZWFzdXJlbWVudC5qcyc7XG5leHBvcnQgeyBzYW1wbGVTcGFuIH0gZnJvbSAnLi90cmFjaW5nL3NhbXBsaW5nLmpzJztcbmV4cG9ydCB7IGxvZ1NwYW5FbmQsIGxvZ1NwYW5TdGFydCB9IGZyb20gJy4vdHJhY2luZy9sb2dTcGFucy5qcyc7XG5leHBvcnQgeyBTRU1BTlRJQ19BVFRSSUJVVEVfQ0FDSEVfSElULCBTRU1BTlRJQ19BVFRSSUJVVEVfQ0FDSEVfSVRFTV9TSVpFLCBTRU1BTlRJQ19BVFRSSUJVVEVfQ0FDSEVfS0VZLCBTRU1BTlRJQ19BVFRSSUJVVEVfRVhDTFVTSVZFX1RJTUUsIFNFTUFOVElDX0FUVFJJQlVURV9IVFRQX1JFUVVFU1RfTUVUSE9ELCBTRU1BTlRJQ19BVFRSSUJVVEVfUFJPRklMRV9JRCwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9DVVNUT01fU1BBTl9OQU1FLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX0lETEVfU1BBTl9GSU5JU0hfUkVBU09OLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX01FQVNVUkVNRU5UX1VOSVQsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfTUVBU1VSRU1FTlRfVkFMVUUsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1AsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1BSRVZJT1VTX1RSQUNFX1NBTVBMRV9SQVRFLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NBTVBMRV9SQVRFLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRSwgU0VNQU5USUNfQVRUUklCVVRFX1VSTF9GVUxMLCBTRU1BTlRJQ19MSU5LX0FUVFJJQlVURV9MSU5LX1RZUEUgfSBmcm9tICcuL3NlbWFudGljQXR0cmlidXRlcy5qcyc7XG5leHBvcnQgeyBjcmVhdGVFdmVudEVudmVsb3BlLCBjcmVhdGVTZXNzaW9uRW52ZWxvcGUsIGNyZWF0ZVNwYW5FbnZlbG9wZSB9IGZyb20gJy4vZW52ZWxvcGUuanMnO1xuZXhwb3J0IHsgYWRkRXZlbnRQcm9jZXNzb3IsIGNhcHR1cmVDaGVja0luLCBjYXB0dXJlRXZlbnQsIGNhcHR1cmVFeGNlcHRpb24sIGNhcHR1cmVNZXNzYWdlLCBjYXB0dXJlU2Vzc2lvbiwgY2xvc2UsIGVuZFNlc3Npb24sIGZsdXNoLCBpc0VuYWJsZWQsIGlzSW5pdGlhbGl6ZWQsIGxhc3RFdmVudElkLCBzZXRDb250ZXh0LCBzZXRFeHRyYSwgc2V0RXh0cmFzLCBzZXRUYWcsIHNldFRhZ3MsIHNldFVzZXIsIHN0YXJ0U2Vzc2lvbiwgd2l0aE1vbml0b3IgfSBmcm9tICcuL2V4cG9ydHMuanMnO1xuZXhwb3J0IHsgZ2V0Q2xpZW50LCBnZXRDdXJyZW50U2NvcGUsIGdldEdsb2JhbFNjb3BlLCBnZXRJc29sYXRpb25TY29wZSwgZ2V0VHJhY2VDb250ZXh0RnJvbVNjb3BlLCB3aXRoSXNvbGF0aW9uU2NvcGUsIHdpdGhTY29wZSB9IGZyb20gJy4vY3VycmVudFNjb3Blcy5qcyc7XG5leHBvcnQgeyBnZXREZWZhdWx0Q3VycmVudFNjb3BlLCBnZXREZWZhdWx0SXNvbGF0aW9uU2NvcGUgfSBmcm9tICcuL2RlZmF1bHRTY29wZXMuanMnO1xuZXhwb3J0IHsgc2V0QXN5bmNDb250ZXh0U3RyYXRlZ3kgfSBmcm9tICcuL2FzeW5jQ29udGV4dC9pbmRleC5qcyc7XG5leHBvcnQgeyBnZXRHbG9iYWxTaW5nbGV0b24sIGdldE1haW5DYXJyaWVyIH0gZnJvbSAnLi9jYXJyaWVyLmpzJztcbmV4cG9ydCB7IGNsb3NlU2Vzc2lvbiwgbWFrZVNlc3Npb24sIHVwZGF0ZVNlc3Npb24gfSBmcm9tICcuL3Nlc3Npb24uanMnO1xuZXhwb3J0IHsgU2NvcGUgfSBmcm9tICcuL3Njb3BlLmpzJztcbmV4cG9ydCB7IG5vdGlmeUV2ZW50UHJvY2Vzc29ycyB9IGZyb20gJy4vZXZlbnRQcm9jZXNzb3JzLmpzJztcbmV4cG9ydCB7IGdldEVudmVsb3BlRW5kcG9pbnRXaXRoVXJsRW5jb2RlZEF1dGgsIGdldFJlcG9ydERpYWxvZ0VuZHBvaW50IH0gZnJvbSAnLi9hcGkuanMnO1xuZXhwb3J0IHsgQmFzZUNsaWVudCwgQ2xpZW50IH0gZnJvbSAnLi9jbGllbnQuanMnO1xuZXhwb3J0IHsgU2VydmVyUnVudGltZUNsaWVudCB9IGZyb20gJy4vc2VydmVyLXJ1bnRpbWUtY2xpZW50LmpzJztcbmV4cG9ydCB7IGluaXRBbmRCaW5kLCBzZXRDdXJyZW50Q2xpZW50IH0gZnJvbSAnLi9zZGsuanMnO1xuZXhwb3J0IHsgY3JlYXRlVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnRzL2Jhc2UuanMnO1xuZXhwb3J0IHsgbWFrZU9mZmxpbmVUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydHMvb2ZmbGluZS5qcyc7XG5leHBvcnQgeyBtYWtlTXVsdGlwbGV4ZWRUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydHMvbXVsdGlwbGV4ZWQuanMnO1xuZXhwb3J0IHsgYWRkSW50ZWdyYXRpb24sIGRlZmluZUludGVncmF0aW9uLCBnZXRJbnRlZ3JhdGlvbnNUb1NldHVwIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbi5qcyc7XG5leHBvcnQgeyBhcHBseVNjb3BlRGF0YVRvRXZlbnQsIG1lcmdlU2NvcGVEYXRhIH0gZnJvbSAnLi91dGlscy9hcHBseVNjb3BlRGF0YVRvRXZlbnQuanMnO1xuZXhwb3J0IHsgcHJlcGFyZUV2ZW50IH0gZnJvbSAnLi91dGlscy9wcmVwYXJlRXZlbnQuanMnO1xuZXhwb3J0IHsgY3JlYXRlQ2hlY2tJbkVudmVsb3BlIH0gZnJvbSAnLi9jaGVja2luLmpzJztcbmV4cG9ydCB7IGhhc1NwYW5zRW5hYmxlZCwgaGFzVHJhY2luZ0VuYWJsZWQgfSBmcm9tICcuL3V0aWxzL2hhc1NwYW5zRW5hYmxlZC5qcyc7XG5leHBvcnQgeyBpc1NlbnRyeVJlcXVlc3RVcmwgfSBmcm9tICcuL3V0aWxzL2lzU2VudHJ5UmVxdWVzdFVybC5qcyc7XG5leHBvcnQgeyBoYW5kbGVDYWxsYmFja0Vycm9ycyB9IGZyb20gJy4vdXRpbHMvaGFuZGxlQ2FsbGJhY2tFcnJvcnMuanMnO1xuZXhwb3J0IHsgZm10LCBwYXJhbWV0ZXJpemUgfSBmcm9tICcuL3V0aWxzL3BhcmFtZXRlcml6ZS5qcyc7XG5leHBvcnQgeyBhZGRBdXRvSXBBZGRyZXNzVG9TZXNzaW9uLCBhZGRBdXRvSXBBZGRyZXNzVG9Vc2VyIH0gZnJvbSAnLi91dGlscy9pcEFkZHJlc3MuanMnO1xuZXhwb3J0IHsgYWRkQ2hpbGRTcGFuVG9TcGFuLCBjb252ZXJ0U3BhbkxpbmtzRm9yRW52ZWxvcGUsIGdldEFjdGl2ZVNwYW4sIGdldFJvb3RTcGFuLCBnZXRTcGFuRGVzY2VuZGFudHMsIGdldFN0YXR1c01lc3NhZ2UsIHNwYW5Jc1NhbXBsZWQsIHNwYW5UaW1lSW5wdXRUb1NlY29uZHMsIHNwYW5Ub0pTT04sIHNwYW5Ub1RyYWNlQ29udGV4dCwgc3BhblRvVHJhY2VIZWFkZXIsIHVwZGF0ZVNwYW5OYW1lIH0gZnJvbSAnLi91dGlscy9zcGFuVXRpbHMuanMnO1xuZXhwb3J0IHsgcGFyc2VTYW1wbGVSYXRlIH0gZnJvbSAnLi91dGlscy9wYXJzZVNhbXBsZVJhdGUuanMnO1xuZXhwb3J0IHsgYXBwbHlTZGtNZXRhZGF0YSB9IGZyb20gJy4vdXRpbHMvc2RrTWV0YWRhdGEuanMnO1xuZXhwb3J0IHsgZ2V0VHJhY2VEYXRhIH0gZnJvbSAnLi91dGlscy90cmFjZURhdGEuanMnO1xuZXhwb3J0IHsgZ2V0VHJhY2VNZXRhVGFncyB9IGZyb20gJy4vdXRpbHMvbWV0YS5qcyc7XG5leHBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJy4vdXRpbHMvZGVib3VuY2UuanMnO1xuZXhwb3J0IHsgZXh0cmFjdFF1ZXJ5UGFyYW1zRnJvbVVybCwgaGVhZGVyc1RvRGljdCwgaHR0cFJlcXVlc3RUb1JlcXVlc3REYXRhLCB3aW50ZXJDR0hlYWRlcnNUb0RpY3QsIHdpbnRlckNHUmVxdWVzdFRvUmVxdWVzdERhdGEgfSBmcm9tICcuL3V0aWxzL3JlcXVlc3QuanMnO1xuZXhwb3J0IHsgREVGQVVMVF9FTlZJUk9OTUVOVCB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmV4cG9ydCB7IGFkZEJyZWFkY3J1bWIgfSBmcm9tICcuL2JyZWFkY3J1bWJzLmpzJztcbmV4cG9ydCB7IGZ1bmN0aW9uVG9TdHJpbmdJbnRlZ3JhdGlvbiB9IGZyb20gJy4vaW50ZWdyYXRpb25zL2Z1bmN0aW9udG9zdHJpbmcuanMnO1xuZXhwb3J0IHsgZXZlbnRGaWx0ZXJzSW50ZWdyYXRpb24sIGluYm91bmRGaWx0ZXJzSW50ZWdyYXRpb24gfSBmcm9tICcuL2ludGVncmF0aW9ucy9ldmVudEZpbHRlcnMuanMnO1xuZXhwb3J0IHsgbGlua2VkRXJyb3JzSW50ZWdyYXRpb24gfSBmcm9tICcuL2ludGVncmF0aW9ucy9saW5rZWRlcnJvcnMuanMnO1xuZXhwb3J0IHsgbW9kdWxlTWV0YWRhdGFJbnRlZ3JhdGlvbiB9IGZyb20gJy4vaW50ZWdyYXRpb25zL21ldGFkYXRhLmpzJztcbmV4cG9ydCB7IHJlcXVlc3REYXRhSW50ZWdyYXRpb24gfSBmcm9tICcuL2ludGVncmF0aW9ucy9yZXF1ZXN0ZGF0YS5qcyc7XG5leHBvcnQgeyBjYXB0dXJlQ29uc29sZUludGVncmF0aW9uIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbnMvY2FwdHVyZWNvbnNvbGUuanMnO1xuZXhwb3J0IHsgZGVkdXBlSW50ZWdyYXRpb24gfSBmcm9tICcuL2ludGVncmF0aW9ucy9kZWR1cGUuanMnO1xuZXhwb3J0IHsgZXh0cmFFcnJvckRhdGFJbnRlZ3JhdGlvbiB9IGZyb20gJy4vaW50ZWdyYXRpb25zL2V4dHJhZXJyb3JkYXRhLmpzJztcbmV4cG9ydCB7IHJld3JpdGVGcmFtZXNJbnRlZ3JhdGlvbiB9IGZyb20gJy4vaW50ZWdyYXRpb25zL3Jld3JpdGVmcmFtZXMuanMnO1xuZXhwb3J0IHsgaW5zdHJ1bWVudFN1cGFiYXNlQ2xpZW50LCBzdXBhYmFzZUludGVncmF0aW9uIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbnMvc3VwYWJhc2UuanMnO1xuZXhwb3J0IHsgem9kRXJyb3JzSW50ZWdyYXRpb24gfSBmcm9tICcuL2ludGVncmF0aW9ucy96b2RlcnJvcnMuanMnO1xuZXhwb3J0IHsgdGhpcmRQYXJ0eUVycm9yRmlsdGVySW50ZWdyYXRpb24gfSBmcm9tICcuL2ludGVncmF0aW9ucy90aGlyZC1wYXJ0eS1lcnJvcnMtZmlsdGVyLmpzJztcbmV4cG9ydCB7IGNvbnNvbGVJbnRlZ3JhdGlvbiB9IGZyb20gJy4vaW50ZWdyYXRpb25zL2NvbnNvbGUuanMnO1xuZXhwb3J0IHsgZmVhdHVyZUZsYWdzSW50ZWdyYXRpb24gfSBmcm9tICcuL2ludGVncmF0aW9ucy9mZWF0dXJlRmxhZ3MvZmVhdHVyZUZsYWdzSW50ZWdyYXRpb24uanMnO1xuZXhwb3J0IHsgcHJvZmlsZXIgfSBmcm9tICcuL3Byb2ZpbGluZy5qcyc7XG5leHBvcnQgeyBpbnN0cnVtZW50RmV0Y2hSZXF1ZXN0IH0gZnJvbSAnLi9mZXRjaC5qcyc7XG5leHBvcnQgeyB0cnBjTWlkZGxld2FyZSB9IGZyb20gJy4vdHJwYy5qcyc7XG5leHBvcnQgeyB3cmFwTWNwU2VydmVyV2l0aFNlbnRyeSB9IGZyb20gJy4vaW50ZWdyYXRpb25zL21jcC1zZXJ2ZXIvaW5kZXguanMnO1xuZXhwb3J0IHsgY2FwdHVyZUZlZWRiYWNrIH0gZnJvbSAnLi9mZWVkYmFjay5qcyc7XG5leHBvcnQgeyBfSU5URVJOQUxfY2FwdHVyZUxvZywgX0lOVEVSTkFMX2NhcHR1cmVTZXJpYWxpemVkTG9nLCBfSU5URVJOQUxfZmx1c2hMb2dzQnVmZmVyIH0gZnJvbSAnLi9sb2dzL2V4cG9ydHMuanMnO1xuZXhwb3J0IHsgY29uc29sZUxvZ2dpbmdJbnRlZ3JhdGlvbiB9IGZyb20gJy4vbG9ncy9jb25zb2xlLWludGVncmF0aW9uLmpzJztcbmV4cG9ydCB7IGFkZFZlcmNlbEFpUHJvY2Vzc29ycyB9IGZyb20gJy4vdXRpbHMvdmVyY2VsLWFpLmpzJztcbmV4cG9ydCB7IGluc3RydW1lbnRPcGVuQWlDbGllbnQgfSBmcm9tICcuL3V0aWxzL29wZW5haS9pbmRleC5qcyc7XG5leHBvcnQgeyBPUEVOQUlfSU5URUdSQVRJT05fTkFNRSB9IGZyb20gJy4vdXRpbHMvb3BlbmFpL2NvbnN0YW50cy5qcyc7XG5leHBvcnQgeyBfSU5URVJOQUxfRkxBR19CVUZGRVJfU0laRSwgX0lOVEVSTkFMX01BWF9GTEFHU19QRVJfU1BBTiwgX0lOVEVSTkFMX2FkZEZlYXR1cmVGbGFnVG9BY3RpdmVTcGFuLCBfSU5URVJOQUxfY29weUZsYWdzRnJvbVNjb3BlVG9FdmVudCwgX0lOVEVSTkFMX2luc2VydEZsYWdUb1Njb3BlIH0gZnJvbSAnLi91dGlscy9mZWF0dXJlRmxhZ3MuanMnO1xuZXhwb3J0IHsgYXBwbHlBZ2dyZWdhdGVFcnJvcnNUb0V2ZW50IH0gZnJvbSAnLi91dGlscy9hZ2dyZWdhdGUtZXJyb3JzLmpzJztcbmV4cG9ydCB7IGdldEJyZWFkY3J1bWJMb2dMZXZlbEZyb21IdHRwU3RhdHVzQ29kZSB9IGZyb20gJy4vdXRpbHMvYnJlYWRjcnVtYi1sb2ctbGV2ZWwuanMnO1xuZXhwb3J0IHsgZ2V0Q29tcG9uZW50TmFtZSwgZ2V0TG9jYXRpb25IcmVmLCBodG1sVHJlZUFzU3RyaW5nIH0gZnJvbSAnLi91dGlscy9icm93c2VyLmpzJztcbmV4cG9ydCB7IGRzbkZyb21TdHJpbmcsIGRzblRvU3RyaW5nLCBtYWtlRHNuIH0gZnJvbSAnLi91dGlscy9kc24uanMnO1xuZXhwb3J0IHsgU2VudHJ5RXJyb3IgfSBmcm9tICcuL3V0aWxzL2Vycm9yLmpzJztcbmV4cG9ydCB7IEdMT0JBTF9PQkogfSBmcm9tICcuL3V0aWxzL3dvcmxkd2lkZS5qcyc7XG5leHBvcnQgeyBhZGRDb25zb2xlSW5zdHJ1bWVudGF0aW9uSGFuZGxlciB9IGZyb20gJy4vaW5zdHJ1bWVudC9jb25zb2xlLmpzJztcbmV4cG9ydCB7IGFkZEZldGNoRW5kSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgYWRkRmV0Y2hJbnN0cnVtZW50YXRpb25IYW5kbGVyIH0gZnJvbSAnLi9pbnN0cnVtZW50L2ZldGNoLmpzJztcbmV4cG9ydCB7IGFkZEdsb2JhbEVycm9ySW5zdHJ1bWVudGF0aW9uSGFuZGxlciB9IGZyb20gJy4vaW5zdHJ1bWVudC9nbG9iYWxFcnJvci5qcyc7XG5leHBvcnQgeyBhZGRHbG9iYWxVbmhhbmRsZWRSZWplY3Rpb25JbnN0cnVtZW50YXRpb25IYW5kbGVyIH0gZnJvbSAnLi9pbnN0cnVtZW50L2dsb2JhbFVuaGFuZGxlZFJlamVjdGlvbi5qcyc7XG5leHBvcnQgeyBhZGRIYW5kbGVyLCBtYXliZUluc3RydW1lbnQsIHJlc2V0SW5zdHJ1bWVudGF0aW9uSGFuZGxlcnMsIHRyaWdnZXJIYW5kbGVycyB9IGZyb20gJy4vaW5zdHJ1bWVudC9oYW5kbGVycy5qcyc7XG5leHBvcnQgeyBpc0RPTUVycm9yLCBpc0RPTUV4Y2VwdGlvbiwgaXNFbGVtZW50LCBpc0Vycm9yLCBpc0Vycm9yRXZlbnQsIGlzRXZlbnQsIGlzSW5zdGFuY2VPZiwgaXNQYXJhbWV0ZXJpemVkU3RyaW5nLCBpc1BsYWluT2JqZWN0LCBpc1ByaW1pdGl2ZSwgaXNSZWdFeHAsIGlzU3RyaW5nLCBpc1N5bnRoZXRpY0V2ZW50LCBpc1RoZW5hYmxlLCBpc1Z1ZVZpZXdNb2RlbCB9IGZyb20gJy4vdXRpbHMvaXMuanMnO1xuZXhwb3J0IHsgaXNCcm93c2VyIH0gZnJvbSAnLi91dGlscy9pc0Jyb3dzZXIuanMnO1xuZXhwb3J0IHsgQ09OU09MRV9MRVZFTFMsIGNvbnNvbGVTYW5kYm94LCBkZWJ1ZywgbG9nZ2VyLCBvcmlnaW5hbENvbnNvbGVNZXRob2RzIH0gZnJvbSAnLi91dGlscy9kZWJ1Zy1sb2dnZXIuanMnO1xuZXhwb3J0IHsgYWRkQ29udGV4dFRvRnJhbWUsIGFkZEV4Y2VwdGlvbk1lY2hhbmlzbSwgYWRkRXhjZXB0aW9uVHlwZVZhbHVlLCBjaGVja09yU2V0QWxyZWFkeUNhdWdodCwgZ2V0RXZlbnREZXNjcmlwdGlvbiwgcGFyc2VTZW12ZXIsIHV1aWQ0IH0gZnJvbSAnLi91dGlscy9taXNjLmpzJztcbmV4cG9ydCB7IGlzTm9kZUVudiwgbG9hZE1vZHVsZSB9IGZyb20gJy4vdXRpbHMvbm9kZS5qcyc7XG5leHBvcnQgeyBub3JtYWxpemUsIG5vcm1hbGl6ZVRvU2l6ZSwgbm9ybWFsaXplVXJsVG9CYXNlIH0gZnJvbSAnLi91dGlscy9ub3JtYWxpemUuanMnO1xuZXhwb3J0IHsgYWRkTm9uRW51bWVyYWJsZVByb3BlcnR5LCBjb252ZXJ0VG9QbGFpbk9iamVjdCwgZHJvcFVuZGVmaW5lZEtleXMsIGV4dHJhY3RFeGNlcHRpb25LZXlzRm9yTWVzc2FnZSwgZmlsbCwgZ2V0T3JpZ2luYWxGdW5jdGlvbiwgbWFya0Z1bmN0aW9uV3JhcHBlZCwgb2JqZWN0aWZ5IH0gZnJvbSAnLi91dGlscy9vYmplY3QuanMnO1xuZXhwb3J0IHsgYmFzZW5hbWUsIGRpcm5hbWUsIGlzQWJzb2x1dGUsIGpvaW4sIG5vcm1hbGl6ZVBhdGgsIHJlbGF0aXZlLCByZXNvbHZlIH0gZnJvbSAnLi91dGlscy9wYXRoLmpzJztcbmV4cG9ydCB7IFNFTlRSWV9CVUZGRVJfRlVMTF9FUlJPUiwgbWFrZVByb21pc2VCdWZmZXIgfSBmcm9tICcuL3V0aWxzL3Byb21pc2VidWZmZXIuanMnO1xuZXhwb3J0IHsgc2V2ZXJpdHlMZXZlbEZyb21TdHJpbmcgfSBmcm9tICcuL3V0aWxzL3NldmVyaXR5LmpzJztcbmV4cG9ydCB7IFVOS05PV05fRlVOQ1RJT04sIGNyZWF0ZVN0YWNrUGFyc2VyLCBnZXRGcmFtZXNGcm9tRXZlbnQsIGdldEZ1bmN0aW9uTmFtZSwgc3RhY2tQYXJzZXJGcm9tU3RhY2tQYXJzZXJPcHRpb25zLCBzdHJpcFNlbnRyeUZyYW1lc0FuZFJldmVyc2UgfSBmcm9tICcuL3V0aWxzL3N0YWNrdHJhY2UuanMnO1xuZXhwb3J0IHsgZmlsZW5hbWVJc0luQXBwLCBub2RlLCBub2RlU3RhY2tMaW5lUGFyc2VyIH0gZnJvbSAnLi91dGlscy9ub2RlLXN0YWNrLXRyYWNlLmpzJztcbmV4cG9ydCB7IGlzTWF0Y2hpbmdQYXR0ZXJuLCBzYWZlSm9pbiwgc25pcExpbmUsIHN0cmluZ01hdGNoZXNTb21lUGF0dGVybiwgdHJ1bmNhdGUgfSBmcm9tICcuL3V0aWxzL3N0cmluZy5qcyc7XG5leHBvcnQgeyBpc05hdGl2ZUZ1bmN0aW9uLCBzdXBwb3J0c0RPTUVycm9yLCBzdXBwb3J0c0RPTUV4Y2VwdGlvbiwgc3VwcG9ydHNFcnJvckV2ZW50LCBzdXBwb3J0c0ZldGNoLCBzdXBwb3J0c0hpc3RvcnksIHN1cHBvcnRzTmF0aXZlRmV0Y2gsIHN1cHBvcnRzUmVmZXJyZXJQb2xpY3ksIHN1cHBvcnRzUmVwb3J0aW5nT2JzZXJ2ZXIgfSBmcm9tICcuL3V0aWxzL3N1cHBvcnRzLmpzJztcbmV4cG9ydCB7IFN5bmNQcm9taXNlLCByZWplY3RlZFN5bmNQcm9taXNlLCByZXNvbHZlZFN5bmNQcm9taXNlIH0gZnJvbSAnLi91dGlscy9zeW5jcHJvbWlzZS5qcyc7XG5leHBvcnQgeyBicm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luLCBkYXRlVGltZXN0YW1wSW5TZWNvbmRzLCB0aW1lc3RhbXBJblNlY29uZHMgfSBmcm9tICcuL3V0aWxzL3RpbWUuanMnO1xuZXhwb3J0IHsgVFJBQ0VQQVJFTlRfUkVHRVhQLCBleHRyYWN0VHJhY2VwYXJlbnREYXRhLCBnZW5lcmF0ZVNlbnRyeVRyYWNlSGVhZGVyLCBwcm9wYWdhdGlvbkNvbnRleHRGcm9tSGVhZGVycyB9IGZyb20gJy4vdXRpbHMvdHJhY2luZy5qcyc7XG5leHBvcnQgeyBnZXRTREtTb3VyY2UsIGlzQnJvd3NlckJ1bmRsZSB9IGZyb20gJy4vdXRpbHMvZW52LmpzJztcbmV4cG9ydCB7IGFkZEl0ZW1Ub0VudmVsb3BlLCBjcmVhdGVBdHRhY2htZW50RW52ZWxvcGVJdGVtLCBjcmVhdGVFbnZlbG9wZSwgY3JlYXRlRXZlbnRFbnZlbG9wZUhlYWRlcnMsIGNyZWF0ZVNwYW5FbnZlbG9wZUl0ZW0sIGVudmVsb3BlQ29udGFpbnNJdGVtVHlwZSwgZW52ZWxvcGVJdGVtVHlwZVRvRGF0YUNhdGVnb3J5LCBmb3JFYWNoRW52ZWxvcGVJdGVtLCBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyLCBwYXJzZUVudmVsb3BlLCBzZXJpYWxpemVFbnZlbG9wZSB9IGZyb20gJy4vdXRpbHMvZW52ZWxvcGUuanMnO1xuZXhwb3J0IHsgY3JlYXRlQ2xpZW50UmVwb3J0RW52ZWxvcGUgfSBmcm9tICcuL3V0aWxzL2NsaWVudHJlcG9ydC5qcyc7XG5leHBvcnQgeyBERUZBVUxUX1JFVFJZX0FGVEVSLCBkaXNhYmxlZFVudGlsLCBpc1JhdGVMaW1pdGVkLCBwYXJzZVJldHJ5QWZ0ZXJIZWFkZXIsIHVwZGF0ZVJhdGVMaW1pdHMgfSBmcm9tICcuL3V0aWxzL3JhdGVsaW1pdC5qcyc7XG5leHBvcnQgeyBNQVhfQkFHR0FHRV9TVFJJTkdfTEVOR1RILCBTRU5UUllfQkFHR0FHRV9LRVlfUFJFRklYLCBTRU5UUllfQkFHR0FHRV9LRVlfUFJFRklYX1JFR0VYLCBiYWdnYWdlSGVhZGVyVG9EeW5hbWljU2FtcGxpbmdDb250ZXh0LCBkeW5hbWljU2FtcGxpbmdDb250ZXh0VG9TZW50cnlCYWdnYWdlSGVhZGVyLCBvYmplY3RUb0JhZ2dhZ2VIZWFkZXIsIHBhcnNlQmFnZ2FnZUhlYWRlciB9IGZyb20gJy4vdXRpbHMvYmFnZ2FnZS5qcyc7XG5leHBvcnQgeyBnZXRIdHRwU3BhbkRldGFpbHNGcm9tVXJsT2JqZWN0LCBnZXRTYW5pdGl6ZWRVcmxTdHJpbmcsIGdldFNhbml0aXplZFVybFN0cmluZ0Zyb21VcmxPYmplY3QsIGlzVVJMT2JqZWN0UmVsYXRpdmUsIHBhcnNlU3RyaW5nVG9VUkxPYmplY3QsIHBhcnNlVXJsLCBzdHJpcFVybFF1ZXJ5QW5kRnJhZ21lbnQgfSBmcm9tICcuL3V0aWxzL3VybC5qcyc7XG5leHBvcnQgeyBldmVudEZyb21NZXNzYWdlLCBldmVudEZyb21Vbmtub3duSW5wdXQsIGV4Y2VwdGlvbkZyb21FcnJvciwgcGFyc2VTdGFja0ZyYW1lcyB9IGZyb20gJy4vdXRpbHMvZXZlbnRidWlsZGVyLmpzJztcbmV4cG9ydCB7IGNhbGxGcmFtZVRvU3RhY2tGcmFtZSwgd2F0Y2hkb2dUaW1lciB9IGZyb20gJy4vdXRpbHMvYW5yLmpzJztcbmV4cG9ydCB7IExSVU1hcCB9IGZyb20gJy4vdXRpbHMvbHJ1LmpzJztcbmV4cG9ydCB7IGdlbmVyYXRlU3BhbklkLCBnZW5lcmF0ZVRyYWNlSWQgfSBmcm9tICcuL3V0aWxzL3Byb3BhZ2F0aW9uQ29udGV4dC5qcyc7XG5leHBvcnQgeyB2ZXJjZWxXYWl0VW50aWwgfSBmcm9tICcuL3V0aWxzL3ZlcmNlbFdhaXRVbnRpbC5qcyc7XG5leHBvcnQgeyBmbHVzaElmU2VydmVybGVzcyB9IGZyb20gJy4vdXRpbHMvZmx1c2hJZlNlcnZlcmxlc3MuanMnO1xuZXhwb3J0IHsgU0RLX1ZFUlNJT04gfSBmcm9tICcuL3V0aWxzL3ZlcnNpb24uanMnO1xuZXhwb3J0IHsgZ2V0RGVidWdJbWFnZXNGb3JSZXNvdXJjZXMsIGdldEZpbGVuYW1lVG9EZWJ1Z0lkTWFwIH0gZnJvbSAnLi91dGlscy9kZWJ1Zy1pZHMuanMnO1xuZXhwb3J0IHsgZXNjYXBlU3RyaW5nRm9yUmVnZXggfSBmcm9tICcuL3ZlbmRvci9lc2NhcGVTdHJpbmdGb3JSZWdleC5qcyc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/console.js":
/*!**********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/console.js ***!
  \**********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addConsoleInstrumentationHandler: () => (/* binding */ addConsoleInstrumentationHandler)\n/* harmony export */ });\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_object_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/object.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js\");\n/* harmony import */ var _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n/* harmony import */ var _handlers_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./handlers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/handlers.js\");\n\n\n\n\n\n/**\n * Add an instrumentation handler for when a console.xxx method is called.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addConsoleInstrumentationHandler(handler) {\n  const type = 'console';\n  (0,_handlers_js__WEBPACK_IMPORTED_MODULE_3__.addHandler)(type, handler);\n  (0,_handlers_js__WEBPACK_IMPORTED_MODULE_3__.maybeInstrument)(type, instrumentConsole);\n}\n\nfunction instrumentConsole() {\n  if (!(\"console\" in _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_2__.GLOBAL_OBJ)) {\n    return;\n  }\n\n  _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_0__.CONSOLE_LEVELS.forEach(function (level) {\n    if (!(level in _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_2__.GLOBAL_OBJ.console)) {\n      return;\n    }\n\n    (0,_utils_object_js__WEBPACK_IMPORTED_MODULE_1__.fill)(_utils_worldwide_js__WEBPACK_IMPORTED_MODULE_2__.GLOBAL_OBJ.console, level, function (originalConsoleMethod) {\n      _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_0__.originalConsoleMethods[level] = originalConsoleMethod;\n\n      return function (...args) {\n        const handlerData = { args, level };\n        (0,_handlers_js__WEBPACK_IMPORTED_MODULE_3__.triggerHandlers)('console', handlerData);\n\n        const log = _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_0__.originalConsoleMethods[level];\n        log?.apply(_utils_worldwide_js__WEBPACK_IMPORTED_MODULE_2__.GLOBAL_OBJ.console, args);\n      };\n    });\n  });\n}\n\n\n//# sourceMappingURL=console.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2luc3RydW1lbnQvY29uc29sZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFrRjtBQUN4QztBQUNTO0FBQzBCOztBQUU3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSx3REFBVTtBQUNaLEVBQUUsNkRBQWU7QUFDakI7O0FBRUE7QUFDQSxRQUFRLHdFQUF1QjtBQUMvQjtBQUNBOztBQUVBLEVBQUUsa0VBQWM7QUFDaEIsbUJBQW1CLDJEQUFVO0FBQzdCO0FBQ0E7O0FBRUEsSUFBSSxzREFBSSxDQUFDLDJEQUFVO0FBQ25CLE1BQU0sMEVBQXNCOztBQUU1QjtBQUNBLDhCQUE4QjtBQUM5QixRQUFRLDZEQUFlOztBQUV2QixvQkFBb0IsMEVBQXNCO0FBQzFDLG1CQUFtQiwyREFBVTtBQUM3QjtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7O0FBRTRDO0FBQzVDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vaW5zdHJ1bWVudC9jb25zb2xlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENPTlNPTEVfTEVWRUxTLCBvcmlnaW5hbENvbnNvbGVNZXRob2RzIH0gZnJvbSAnLi4vdXRpbHMvZGVidWctbG9nZ2VyLmpzJztcbmltcG9ydCB7IGZpbGwgfSBmcm9tICcuLi91dGlscy9vYmplY3QuanMnO1xuaW1wb3J0IHsgR0xPQkFMX09CSiB9IGZyb20gJy4uL3V0aWxzL3dvcmxkd2lkZS5qcyc7XG5pbXBvcnQgeyBhZGRIYW5kbGVyLCBtYXliZUluc3RydW1lbnQsIHRyaWdnZXJIYW5kbGVycyB9IGZyb20gJy4vaGFuZGxlcnMuanMnO1xuXG4vKipcbiAqIEFkZCBhbiBpbnN0cnVtZW50YXRpb24gaGFuZGxlciBmb3Igd2hlbiBhIGNvbnNvbGUueHh4IG1ldGhvZCBpcyBjYWxsZWQuXG4gKlxuICogVXNlIGF0IHlvdXIgb3duIHJpc2ssIHRoaXMgbWlnaHQgYnJlYWsgd2l0aG91dCBjaGFuZ2Vsb2cgbm90aWNlLCBvbmx5IHVzZWQgaW50ZXJuYWxseS5cbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gYWRkQ29uc29sZUluc3RydW1lbnRhdGlvbkhhbmRsZXIoaGFuZGxlcikge1xuICBjb25zdCB0eXBlID0gJ2NvbnNvbGUnO1xuICBhZGRIYW5kbGVyKHR5cGUsIGhhbmRsZXIpO1xuICBtYXliZUluc3RydW1lbnQodHlwZSwgaW5zdHJ1bWVudENvbnNvbGUpO1xufVxuXG5mdW5jdGlvbiBpbnN0cnVtZW50Q29uc29sZSgpIHtcbiAgaWYgKCEoJ2NvbnNvbGUnIGluIEdMT0JBTF9PQkopKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgQ09OU09MRV9MRVZFTFMuZm9yRWFjaChmdW5jdGlvbiAobGV2ZWwpIHtcbiAgICBpZiAoIShsZXZlbCBpbiBHTE9CQUxfT0JKLmNvbnNvbGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZmlsbChHTE9CQUxfT0JKLmNvbnNvbGUsIGxldmVsLCBmdW5jdGlvbiAob3JpZ2luYWxDb25zb2xlTWV0aG9kKSB7XG4gICAgICBvcmlnaW5hbENvbnNvbGVNZXRob2RzW2xldmVsXSA9IG9yaWdpbmFsQ29uc29sZU1ldGhvZDtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJEYXRhID0geyBhcmdzLCBsZXZlbCB9O1xuICAgICAgICB0cmlnZ2VySGFuZGxlcnMoJ2NvbnNvbGUnLCBoYW5kbGVyRGF0YSk7XG5cbiAgICAgICAgY29uc3QgbG9nID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kc1tsZXZlbF07XG4gICAgICAgIGxvZz8uYXBwbHkoR0xPQkFMX09CSi5jb25zb2xlLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgeyBhZGRDb25zb2xlSW5zdHJ1bWVudGF0aW9uSGFuZGxlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc29sZS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/console.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/fetch.js":
/*!********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/fetch.js ***!
  \********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addFetchEndInstrumentationHandler: () => (/* binding */ addFetchEndInstrumentationHandler),\n/* harmony export */   addFetchInstrumentationHandler: () => (/* binding */ addFetchInstrumentationHandler),\n/* harmony export */   parseFetchArgs: () => (/* binding */ parseFetchArgs)\n/* harmony export */ });\n/* harmony import */ var _utils_is_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n/* harmony import */ var _utils_object_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/object.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js\");\n/* harmony import */ var _utils_supports_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/supports.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/supports.js\");\n/* harmony import */ var _utils_time_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/time.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/time.js\");\n/* harmony import */ var _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n/* harmony import */ var _handlers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./handlers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/handlers.js\");\n\n\n\n\n\n\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addFetchInstrumentationHandler(\n  handler,\n  skipNativeFetchCheck,\n) {\n  const type = 'fetch';\n  (0,_handlers_js__WEBPACK_IMPORTED_MODULE_5__.addHandler)(type, handler);\n  (0,_handlers_js__WEBPACK_IMPORTED_MODULE_5__.maybeInstrument)(type, () => instrumentFetch(undefined, skipNativeFetchCheck));\n}\n\n/**\n * Add an instrumentation handler for long-lived fetch requests, like consuming server-sent events (SSE) via fetch.\n * The handler will resolve the request body and emit the actual `endTimestamp`, so that the\n * span can be updated accordingly.\n *\n * Only used internally\n * @hidden\n */\nfunction addFetchEndInstrumentationHandler(handler) {\n  const type = 'fetch-body-resolved';\n  (0,_handlers_js__WEBPACK_IMPORTED_MODULE_5__.addHandler)(type, handler);\n  (0,_handlers_js__WEBPACK_IMPORTED_MODULE_5__.maybeInstrument)(type, () => instrumentFetch(streamHandler));\n}\n\nfunction instrumentFetch(onFetchResolved, skipNativeFetchCheck = false) {\n  if (skipNativeFetchCheck && !(0,_utils_supports_js__WEBPACK_IMPORTED_MODULE_2__.supportsNativeFetch)()) {\n    return;\n  }\n\n  (0,_utils_object_js__WEBPACK_IMPORTED_MODULE_1__.fill)(_utils_worldwide_js__WEBPACK_IMPORTED_MODULE_4__.GLOBAL_OBJ, 'fetch', function (originalFetch) {\n    return function (...args) {\n      // We capture the error right here and not in the Promise error callback because Safari (and probably other\n      // browsers too) will wipe the stack trace up to this point, only leaving us with this file which is useless.\n\n      // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n      //       it means the error, that was caused by your fetch call did not\n      //       have a stack trace, so the SDK backfilled the stack trace so\n      //       you can see which fetch call failed.\n      const virtualError = new Error();\n\n      const { method, url } = parseFetchArgs(args);\n      const handlerData = {\n        args,\n        fetchData: {\n          method,\n          url,\n        },\n        startTimestamp: (0,_utils_time_js__WEBPACK_IMPORTED_MODULE_3__.timestampInSeconds)() * 1000,\n        // // Adding the error to be able to fingerprint the failed fetch event in HttpClient instrumentation\n        virtualError,\n        headers: getHeadersFromFetchArgs(args),\n      };\n\n      // if there is no callback, fetch is instrumented directly\n      if (!onFetchResolved) {\n        (0,_handlers_js__WEBPACK_IMPORTED_MODULE_5__.triggerHandlers)('fetch', {\n          ...handlerData,\n        });\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      return originalFetch.apply(_utils_worldwide_js__WEBPACK_IMPORTED_MODULE_4__.GLOBAL_OBJ, args).then(\n        async (response) => {\n          if (onFetchResolved) {\n            onFetchResolved(response);\n          } else {\n            (0,_handlers_js__WEBPACK_IMPORTED_MODULE_5__.triggerHandlers)('fetch', {\n              ...handlerData,\n              endTimestamp: (0,_utils_time_js__WEBPACK_IMPORTED_MODULE_3__.timestampInSeconds)() * 1000,\n              response,\n            });\n          }\n\n          return response;\n        },\n        (error) => {\n          (0,_handlers_js__WEBPACK_IMPORTED_MODULE_5__.triggerHandlers)('fetch', {\n            ...handlerData,\n            endTimestamp: (0,_utils_time_js__WEBPACK_IMPORTED_MODULE_3__.timestampInSeconds)() * 1000,\n            error,\n          });\n\n          if ((0,_utils_is_js__WEBPACK_IMPORTED_MODULE_0__.isError)(error) && error.stack === undefined) {\n            // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n            //       it means the error, that was caused by your fetch call did not\n            //       have a stack trace, so the SDK backfilled the stack trace so\n            //       you can see which fetch call failed.\n            error.stack = virtualError.stack;\n            (0,_utils_object_js__WEBPACK_IMPORTED_MODULE_1__.addNonEnumerableProperty)(error, 'framesToPop', 1);\n          }\n\n          // We enhance the not-so-helpful \"Failed to fetch\" error messages with the host\n          // Possible messages we handle here:\n          // * \"Failed to fetch\" (chromium)\n          // * \"Load failed\" (webkit)\n          // * \"NetworkError when attempting to fetch resource.\" (firefox)\n          if (\n            error instanceof TypeError &&\n            (error.message === 'Failed to fetch' ||\n              error.message === 'Load failed' ||\n              error.message === 'NetworkError when attempting to fetch resource.')\n          ) {\n            try {\n              const url = new URL(handlerData.fetchData.url);\n              error.message = `${error.message} (${url.host})`;\n            } catch {\n              // ignore it if errors happen here\n            }\n          }\n\n          // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n          //       it means the sentry.javascript SDK caught an error invoking your application code.\n          //       This is expected behavior and NOT indicative of a bug with sentry.javascript.\n          throw error;\n        },\n      );\n    };\n  });\n}\n\nasync function resolveResponse(res, onFinishedResolving) {\n  if (res?.body) {\n    const body = res.body;\n    const responseReader = body.getReader();\n\n    // Define a maximum duration after which we just cancel\n    const maxFetchDurationTimeout = setTimeout(\n      () => {\n        body.cancel().then(null, () => {\n          // noop\n        });\n      },\n      90 * 1000, // 90s\n    );\n\n    let readingActive = true;\n    while (readingActive) {\n      let chunkTimeout;\n      try {\n        // abort reading if read op takes more than 5s\n        chunkTimeout = setTimeout(() => {\n          body.cancel().then(null, () => {\n            // noop on error\n          });\n        }, 5000);\n\n        // This .read() call will reject/throw when we abort due to timeouts through `body.cancel()`\n        const { done } = await responseReader.read();\n\n        clearTimeout(chunkTimeout);\n\n        if (done) {\n          onFinishedResolving();\n          readingActive = false;\n        }\n      } catch {\n        readingActive = false;\n      } finally {\n        clearTimeout(chunkTimeout);\n      }\n    }\n\n    clearTimeout(maxFetchDurationTimeout);\n\n    responseReader.releaseLock();\n    body.cancel().then(null, () => {\n      // noop on error\n    });\n  }\n}\n\nfunction streamHandler(response) {\n  // clone response for awaiting stream\n  let clonedResponseForResolving;\n  try {\n    clonedResponseForResolving = response.clone();\n  } catch {\n    return;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-floating-promises\n  resolveResponse(clonedResponseForResolving, () => {\n    (0,_handlers_js__WEBPACK_IMPORTED_MODULE_5__.triggerHandlers)('fetch-body-resolved', {\n      endTimestamp: (0,_utils_time_js__WEBPACK_IMPORTED_MODULE_3__.timestampInSeconds)() * 1000,\n      response,\n    });\n  });\n}\n\nfunction hasProp(obj, prop) {\n  return !!obj && typeof obj === 'object' && !!(obj )[prop];\n}\n\nfunction getUrlFromResource(resource) {\n  if (typeof resource === 'string') {\n    return resource;\n  }\n\n  if (!resource) {\n    return '';\n  }\n\n  if (hasProp(resource, 'url')) {\n    return resource.url;\n  }\n\n  if (resource.toString) {\n    return resource.toString();\n  }\n\n  return '';\n}\n\n/**\n * Parses the fetch arguments to find the used Http method and the url of the request.\n * Exported for tests only.\n */\nfunction parseFetchArgs(fetchArgs) {\n  if (fetchArgs.length === 0) {\n    return { method: 'GET', url: '' };\n  }\n\n  if (fetchArgs.length === 2) {\n    const [url, options] = fetchArgs ;\n\n    return {\n      url: getUrlFromResource(url),\n      method: hasProp(options, 'method') ? String(options.method).toUpperCase() : 'GET',\n    };\n  }\n\n  const arg = fetchArgs[0];\n  return {\n    url: getUrlFromResource(arg ),\n    method: hasProp(arg, 'method') ? String(arg.method).toUpperCase() : 'GET',\n  };\n}\n\nfunction getHeadersFromFetchArgs(fetchArgs) {\n  const [requestArgument, optionsArgument] = fetchArgs;\n\n  try {\n    if (\n      typeof optionsArgument === 'object' &&\n      optionsArgument !== null &&\n      'headers' in optionsArgument &&\n      optionsArgument.headers\n    ) {\n      return new Headers(optionsArgument.headers );\n    }\n\n    if ((0,_utils_is_js__WEBPACK_IMPORTED_MODULE_0__.isRequest)(requestArgument)) {\n      return new Headers(requestArgument.headers);\n    }\n  } catch {\n    // noop\n  }\n\n  return;\n}\n\n\n//# sourceMappingURL=fetch.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2luc3RydW1lbnQvZmV0Y2guanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQW9EO0FBQ2dCO0FBQ1Q7QUFDTDtBQUNIO0FBQzBCOztBQUU3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsd0RBQVU7QUFDWixFQUFFLDZEQUFlO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSx3REFBVTtBQUNaLEVBQUUsNkRBQWU7QUFDakI7O0FBRUE7QUFDQSwrQkFBK0IsdUVBQW1CO0FBQ2xEO0FBQ0E7O0FBRUEsRUFBRSxzREFBSSxDQUFDLDJEQUFVO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWMsY0FBYztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULHdCQUF3QixrRUFBa0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVEsNkRBQWU7QUFDdkI7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQSxpQ0FBaUMsMkRBQVU7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaLFlBQVksNkRBQWU7QUFDM0I7QUFDQSw0QkFBNEIsa0VBQWtCO0FBQzlDO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsVUFBVSw2REFBZTtBQUN6QjtBQUNBLDBCQUEwQixrRUFBa0I7QUFDNUM7QUFDQSxXQUFXOztBQUVYLGNBQWMscURBQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksMEVBQXdCO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLGVBQWUsR0FBRyxTQUFTO0FBQzVELGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUzs7QUFFVDtBQUNBLGdCQUFnQixPQUFPOztBQUV2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLDZEQUFlO0FBQ25CLG9CQUFvQixrRUFBa0I7QUFDdEM7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEsdURBQVM7QUFDakI7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRTZGO0FBQzdGIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vaW5zdHJ1bWVudC9mZXRjaC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0Vycm9yLCBpc1JlcXVlc3QgfSBmcm9tICcuLi91dGlscy9pcy5qcyc7XG5pbXBvcnQgeyBmaWxsLCBhZGROb25FbnVtZXJhYmxlUHJvcGVydHkgfSBmcm9tICcuLi91dGlscy9vYmplY3QuanMnO1xuaW1wb3J0IHsgc3VwcG9ydHNOYXRpdmVGZXRjaCB9IGZyb20gJy4uL3V0aWxzL3N1cHBvcnRzLmpzJztcbmltcG9ydCB7IHRpbWVzdGFtcEluU2Vjb25kcyB9IGZyb20gJy4uL3V0aWxzL3RpbWUuanMnO1xuaW1wb3J0IHsgR0xPQkFMX09CSiB9IGZyb20gJy4uL3V0aWxzL3dvcmxkd2lkZS5qcyc7XG5pbXBvcnQgeyBhZGRIYW5kbGVyLCBtYXliZUluc3RydW1lbnQsIHRyaWdnZXJIYW5kbGVycyB9IGZyb20gJy4vaGFuZGxlcnMuanMnO1xuXG4vKipcbiAqIEFkZCBhbiBpbnN0cnVtZW50YXRpb24gaGFuZGxlciBmb3Igd2hlbiBhIGZldGNoIHJlcXVlc3QgaGFwcGVucy5cbiAqIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIHdoZW4gdGhlIHJlcXVlc3Qgc3RhcnRzIGFuZCBvbmNlIHdoZW4gaXQgZW5kcyxcbiAqIHdoaWNoIGNhbiBiZSBpZGVudGlmaWVkIGJ5IGNoZWNraW5nIGlmIGl0IGhhcyBhbiBgZW5kVGltZXN0YW1wYC5cbiAqXG4gKiBVc2UgYXQgeW91ciBvd24gcmlzaywgdGhpcyBtaWdodCBicmVhayB3aXRob3V0IGNoYW5nZWxvZyBub3RpY2UsIG9ubHkgdXNlZCBpbnRlcm5hbGx5LlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBhZGRGZXRjaEluc3RydW1lbnRhdGlvbkhhbmRsZXIoXG4gIGhhbmRsZXIsXG4gIHNraXBOYXRpdmVGZXRjaENoZWNrLFxuKSB7XG4gIGNvbnN0IHR5cGUgPSAnZmV0Y2gnO1xuICBhZGRIYW5kbGVyKHR5cGUsIGhhbmRsZXIpO1xuICBtYXliZUluc3RydW1lbnQodHlwZSwgKCkgPT4gaW5zdHJ1bWVudEZldGNoKHVuZGVmaW5lZCwgc2tpcE5hdGl2ZUZldGNoQ2hlY2spKTtcbn1cblxuLyoqXG4gKiBBZGQgYW4gaW5zdHJ1bWVudGF0aW9uIGhhbmRsZXIgZm9yIGxvbmctbGl2ZWQgZmV0Y2ggcmVxdWVzdHMsIGxpa2UgY29uc3VtaW5nIHNlcnZlci1zZW50IGV2ZW50cyAoU1NFKSB2aWEgZmV0Y2guXG4gKiBUaGUgaGFuZGxlciB3aWxsIHJlc29sdmUgdGhlIHJlcXVlc3QgYm9keSBhbmQgZW1pdCB0aGUgYWN0dWFsIGBlbmRUaW1lc3RhbXBgLCBzbyB0aGF0IHRoZVxuICogc3BhbiBjYW4gYmUgdXBkYXRlZCBhY2NvcmRpbmdseS5cbiAqXG4gKiBPbmx5IHVzZWQgaW50ZXJuYWxseVxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBhZGRGZXRjaEVuZEluc3RydW1lbnRhdGlvbkhhbmRsZXIoaGFuZGxlcikge1xuICBjb25zdCB0eXBlID0gJ2ZldGNoLWJvZHktcmVzb2x2ZWQnO1xuICBhZGRIYW5kbGVyKHR5cGUsIGhhbmRsZXIpO1xuICBtYXliZUluc3RydW1lbnQodHlwZSwgKCkgPT4gaW5zdHJ1bWVudEZldGNoKHN0cmVhbUhhbmRsZXIpKTtcbn1cblxuZnVuY3Rpb24gaW5zdHJ1bWVudEZldGNoKG9uRmV0Y2hSZXNvbHZlZCwgc2tpcE5hdGl2ZUZldGNoQ2hlY2sgPSBmYWxzZSkge1xuICBpZiAoc2tpcE5hdGl2ZUZldGNoQ2hlY2sgJiYgIXN1cHBvcnRzTmF0aXZlRmV0Y2goKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZpbGwoR0xPQkFMX09CSiwgJ2ZldGNoJywgZnVuY3Rpb24gKG9yaWdpbmFsRmV0Y2gpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgIC8vIFdlIGNhcHR1cmUgdGhlIGVycm9yIHJpZ2h0IGhlcmUgYW5kIG5vdCBpbiB0aGUgUHJvbWlzZSBlcnJvciBjYWxsYmFjayBiZWNhdXNlIFNhZmFyaSAoYW5kIHByb2JhYmx5IG90aGVyXG4gICAgICAvLyBicm93c2VycyB0b28pIHdpbGwgd2lwZSB0aGUgc3RhY2sgdHJhY2UgdXAgdG8gdGhpcyBwb2ludCwgb25seSBsZWF2aW5nIHVzIHdpdGggdGhpcyBmaWxlIHdoaWNoIGlzIHVzZWxlc3MuXG5cbiAgICAgIC8vIE5PVEU6IElmIHlvdSBhcmUgYSBTZW50cnkgdXNlciwgYW5kIHlvdSBhcmUgc2VlaW5nIHRoaXMgc3RhY2sgZnJhbWUsXG4gICAgICAvLyAgICAgICBpdCBtZWFucyB0aGUgZXJyb3IsIHRoYXQgd2FzIGNhdXNlZCBieSB5b3VyIGZldGNoIGNhbGwgZGlkIG5vdFxuICAgICAgLy8gICAgICAgaGF2ZSBhIHN0YWNrIHRyYWNlLCBzbyB0aGUgU0RLIGJhY2tmaWxsZWQgdGhlIHN0YWNrIHRyYWNlIHNvXG4gICAgICAvLyAgICAgICB5b3UgY2FuIHNlZSB3aGljaCBmZXRjaCBjYWxsIGZhaWxlZC5cbiAgICAgIGNvbnN0IHZpcnR1YWxFcnJvciA9IG5ldyBFcnJvcigpO1xuXG4gICAgICBjb25zdCB7IG1ldGhvZCwgdXJsIH0gPSBwYXJzZUZldGNoQXJncyhhcmdzKTtcbiAgICAgIGNvbnN0IGhhbmRsZXJEYXRhID0ge1xuICAgICAgICBhcmdzLFxuICAgICAgICBmZXRjaERhdGE6IHtcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgdXJsLFxuICAgICAgICB9LFxuICAgICAgICBzdGFydFRpbWVzdGFtcDogdGltZXN0YW1wSW5TZWNvbmRzKCkgKiAxMDAwLFxuICAgICAgICAvLyAvLyBBZGRpbmcgdGhlIGVycm9yIHRvIGJlIGFibGUgdG8gZmluZ2VycHJpbnQgdGhlIGZhaWxlZCBmZXRjaCBldmVudCBpbiBIdHRwQ2xpZW50IGluc3RydW1lbnRhdGlvblxuICAgICAgICB2aXJ0dWFsRXJyb3IsXG4gICAgICAgIGhlYWRlcnM6IGdldEhlYWRlcnNGcm9tRmV0Y2hBcmdzKGFyZ3MpLFxuICAgICAgfTtcblxuICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gY2FsbGJhY2ssIGZldGNoIGlzIGluc3RydW1lbnRlZCBkaXJlY3RseVxuICAgICAgaWYgKCFvbkZldGNoUmVzb2x2ZWQpIHtcbiAgICAgICAgdHJpZ2dlckhhbmRsZXJzKCdmZXRjaCcsIHtcbiAgICAgICAgICAuLi5oYW5kbGVyRGF0YSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgIHJldHVybiBvcmlnaW5hbEZldGNoLmFwcGx5KEdMT0JBTF9PQkosIGFyZ3MpLnRoZW4oXG4gICAgICAgIGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChvbkZldGNoUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgIG9uRmV0Y2hSZXNvbHZlZChyZXNwb25zZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyaWdnZXJIYW5kbGVycygnZmV0Y2gnLCB7XG4gICAgICAgICAgICAgIC4uLmhhbmRsZXJEYXRhLFxuICAgICAgICAgICAgICBlbmRUaW1lc3RhbXA6IHRpbWVzdGFtcEluU2Vjb25kcygpICogMTAwMCxcbiAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgIHRyaWdnZXJIYW5kbGVycygnZmV0Y2gnLCB7XG4gICAgICAgICAgICAuLi5oYW5kbGVyRGF0YSxcbiAgICAgICAgICAgIGVuZFRpbWVzdGFtcDogdGltZXN0YW1wSW5TZWNvbmRzKCkgKiAxMDAwLFxuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoaXNFcnJvcihlcnJvcikgJiYgZXJyb3Iuc3RhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gTk9URTogSWYgeW91IGFyZSBhIFNlbnRyeSB1c2VyLCBhbmQgeW91IGFyZSBzZWVpbmcgdGhpcyBzdGFjayBmcmFtZSxcbiAgICAgICAgICAgIC8vICAgICAgIGl0IG1lYW5zIHRoZSBlcnJvciwgdGhhdCB3YXMgY2F1c2VkIGJ5IHlvdXIgZmV0Y2ggY2FsbCBkaWQgbm90XG4gICAgICAgICAgICAvLyAgICAgICBoYXZlIGEgc3RhY2sgdHJhY2UsIHNvIHRoZSBTREsgYmFja2ZpbGxlZCB0aGUgc3RhY2sgdHJhY2Ugc29cbiAgICAgICAgICAgIC8vICAgICAgIHlvdSBjYW4gc2VlIHdoaWNoIGZldGNoIGNhbGwgZmFpbGVkLlxuICAgICAgICAgICAgZXJyb3Iuc3RhY2sgPSB2aXJ0dWFsRXJyb3Iuc3RhY2s7XG4gICAgICAgICAgICBhZGROb25FbnVtZXJhYmxlUHJvcGVydHkoZXJyb3IsICdmcmFtZXNUb1BvcCcsIDEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFdlIGVuaGFuY2UgdGhlIG5vdC1zby1oZWxwZnVsIFwiRmFpbGVkIHRvIGZldGNoXCIgZXJyb3IgbWVzc2FnZXMgd2l0aCB0aGUgaG9zdFxuICAgICAgICAgIC8vIFBvc3NpYmxlIG1lc3NhZ2VzIHdlIGhhbmRsZSBoZXJlOlxuICAgICAgICAgIC8vICogXCJGYWlsZWQgdG8gZmV0Y2hcIiAoY2hyb21pdW0pXG4gICAgICAgICAgLy8gKiBcIkxvYWQgZmFpbGVkXCIgKHdlYmtpdClcbiAgICAgICAgICAvLyAqIFwiTmV0d29ya0Vycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBmZXRjaCByZXNvdXJjZS5cIiAoZmlyZWZveClcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvciAmJlxuICAgICAgICAgICAgKGVycm9yLm1lc3NhZ2UgPT09ICdGYWlsZWQgdG8gZmV0Y2gnIHx8XG4gICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPT09ICdMb2FkIGZhaWxlZCcgfHxcbiAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSA9PT0gJ05ldHdvcmtFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gZmV0Y2ggcmVzb3VyY2UuJylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoaGFuZGxlckRhdGEuZmV0Y2hEYXRhLnVybCk7XG4gICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgJHtlcnJvci5tZXNzYWdlfSAoJHt1cmwuaG9zdH0pYDtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAvLyBpZ25vcmUgaXQgaWYgZXJyb3JzIGhhcHBlbiBoZXJlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTk9URTogSWYgeW91IGFyZSBhIFNlbnRyeSB1c2VyLCBhbmQgeW91IGFyZSBzZWVpbmcgdGhpcyBzdGFjayBmcmFtZSxcbiAgICAgICAgICAvLyAgICAgICBpdCBtZWFucyB0aGUgc2VudHJ5LmphdmFzY3JpcHQgU0RLIGNhdWdodCBhbiBlcnJvciBpbnZva2luZyB5b3VyIGFwcGxpY2F0aW9uIGNvZGUuXG4gICAgICAgICAgLy8gICAgICAgVGhpcyBpcyBleHBlY3RlZCBiZWhhdmlvciBhbmQgTk9UIGluZGljYXRpdmUgb2YgYSBidWcgd2l0aCBzZW50cnkuamF2YXNjcmlwdC5cbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVSZXNwb25zZShyZXMsIG9uRmluaXNoZWRSZXNvbHZpbmcpIHtcbiAgaWYgKHJlcz8uYm9keSkge1xuICAgIGNvbnN0IGJvZHkgPSByZXMuYm9keTtcbiAgICBjb25zdCByZXNwb25zZVJlYWRlciA9IGJvZHkuZ2V0UmVhZGVyKCk7XG5cbiAgICAvLyBEZWZpbmUgYSBtYXhpbXVtIGR1cmF0aW9uIGFmdGVyIHdoaWNoIHdlIGp1c3QgY2FuY2VsXG4gICAgY29uc3QgbWF4RmV0Y2hEdXJhdGlvblRpbWVvdXQgPSBzZXRUaW1lb3V0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBib2R5LmNhbmNlbCgpLnRoZW4obnVsbCwgKCkgPT4ge1xuICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgOTAgKiAxMDAwLCAvLyA5MHNcbiAgICApO1xuXG4gICAgbGV0IHJlYWRpbmdBY3RpdmUgPSB0cnVlO1xuICAgIHdoaWxlIChyZWFkaW5nQWN0aXZlKSB7XG4gICAgICBsZXQgY2h1bmtUaW1lb3V0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gYWJvcnQgcmVhZGluZyBpZiByZWFkIG9wIHRha2VzIG1vcmUgdGhhbiA1c1xuICAgICAgICBjaHVua1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBib2R5LmNhbmNlbCgpLnRoZW4obnVsbCwgKCkgPT4ge1xuICAgICAgICAgICAgLy8gbm9vcCBvbiBlcnJvclxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCA1MDAwKTtcblxuICAgICAgICAvLyBUaGlzIC5yZWFkKCkgY2FsbCB3aWxsIHJlamVjdC90aHJvdyB3aGVuIHdlIGFib3J0IGR1ZSB0byB0aW1lb3V0cyB0aHJvdWdoIGBib2R5LmNhbmNlbCgpYFxuICAgICAgICBjb25zdCB7IGRvbmUgfSA9IGF3YWl0IHJlc3BvbnNlUmVhZGVyLnJlYWQoKTtcblxuICAgICAgICBjbGVhclRpbWVvdXQoY2h1bmtUaW1lb3V0KTtcblxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgIG9uRmluaXNoZWRSZXNvbHZpbmcoKTtcbiAgICAgICAgICByZWFkaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZWFkaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjbGVhclRpbWVvdXQoY2h1bmtUaW1lb3V0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhclRpbWVvdXQobWF4RmV0Y2hEdXJhdGlvblRpbWVvdXQpO1xuXG4gICAgcmVzcG9uc2VSZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgICBib2R5LmNhbmNlbCgpLnRoZW4obnVsbCwgKCkgPT4ge1xuICAgICAgLy8gbm9vcCBvbiBlcnJvclxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmVhbUhhbmRsZXIocmVzcG9uc2UpIHtcbiAgLy8gY2xvbmUgcmVzcG9uc2UgZm9yIGF3YWl0aW5nIHN0cmVhbVxuICBsZXQgY2xvbmVkUmVzcG9uc2VGb3JSZXNvbHZpbmc7XG4gIHRyeSB7XG4gICAgY2xvbmVkUmVzcG9uc2VGb3JSZXNvbHZpbmcgPSByZXNwb25zZS5jbG9uZSgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gIHJlc29sdmVSZXNwb25zZShjbG9uZWRSZXNwb25zZUZvclJlc29sdmluZywgKCkgPT4ge1xuICAgIHRyaWdnZXJIYW5kbGVycygnZmV0Y2gtYm9keS1yZXNvbHZlZCcsIHtcbiAgICAgIGVuZFRpbWVzdGFtcDogdGltZXN0YW1wSW5TZWNvbmRzKCkgKiAxMDAwLFxuICAgICAgcmVzcG9uc2UsXG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoYXNQcm9wKG9iaiwgcHJvcCkge1xuICByZXR1cm4gISFvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgISEob2JqIClbcHJvcF07XG59XG5cbmZ1bmN0aW9uIGdldFVybEZyb21SZXNvdXJjZShyZXNvdXJjZSkge1xuICBpZiAodHlwZW9mIHJlc291cmNlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiByZXNvdXJjZTtcbiAgfVxuXG4gIGlmICghcmVzb3VyY2UpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoaGFzUHJvcChyZXNvdXJjZSwgJ3VybCcpKSB7XG4gICAgcmV0dXJuIHJlc291cmNlLnVybDtcbiAgfVxuXG4gIGlmIChyZXNvdXJjZS50b1N0cmluZykge1xuICAgIHJldHVybiByZXNvdXJjZS50b1N0cmluZygpO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgZmV0Y2ggYXJndW1lbnRzIHRvIGZpbmQgdGhlIHVzZWQgSHR0cCBtZXRob2QgYW5kIHRoZSB1cmwgb2YgdGhlIHJlcXVlc3QuXG4gKiBFeHBvcnRlZCBmb3IgdGVzdHMgb25seS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VGZXRjaEFyZ3MoZmV0Y2hBcmdzKSB7XG4gIGlmIChmZXRjaEFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHsgbWV0aG9kOiAnR0VUJywgdXJsOiAnJyB9O1xuICB9XG5cbiAgaWYgKGZldGNoQXJncy5sZW5ndGggPT09IDIpIHtcbiAgICBjb25zdCBbdXJsLCBvcHRpb25zXSA9IGZldGNoQXJncyA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdXJsOiBnZXRVcmxGcm9tUmVzb3VyY2UodXJsKSxcbiAgICAgIG1ldGhvZDogaGFzUHJvcChvcHRpb25zLCAnbWV0aG9kJykgPyBTdHJpbmcob3B0aW9ucy5tZXRob2QpLnRvVXBwZXJDYXNlKCkgOiAnR0VUJyxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgYXJnID0gZmV0Y2hBcmdzWzBdO1xuICByZXR1cm4ge1xuICAgIHVybDogZ2V0VXJsRnJvbVJlc291cmNlKGFyZyApLFxuICAgIG1ldGhvZDogaGFzUHJvcChhcmcsICdtZXRob2QnKSA/IFN0cmluZyhhcmcubWV0aG9kKS50b1VwcGVyQ2FzZSgpIDogJ0dFVCcsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEhlYWRlcnNGcm9tRmV0Y2hBcmdzKGZldGNoQXJncykge1xuICBjb25zdCBbcmVxdWVzdEFyZ3VtZW50LCBvcHRpb25zQXJndW1lbnRdID0gZmV0Y2hBcmdzO1xuXG4gIHRyeSB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG9wdGlvbnNBcmd1bWVudCA9PT0gJ29iamVjdCcgJiZcbiAgICAgIG9wdGlvbnNBcmd1bWVudCAhPT0gbnVsbCAmJlxuICAgICAgJ2hlYWRlcnMnIGluIG9wdGlvbnNBcmd1bWVudCAmJlxuICAgICAgb3B0aW9uc0FyZ3VtZW50LmhlYWRlcnNcbiAgICApIHtcbiAgICAgIHJldHVybiBuZXcgSGVhZGVycyhvcHRpb25zQXJndW1lbnQuaGVhZGVycyApO1xuICAgIH1cblxuICAgIGlmIChpc1JlcXVlc3QocmVxdWVzdEFyZ3VtZW50KSkge1xuICAgICAgcmV0dXJuIG5ldyBIZWFkZXJzKHJlcXVlc3RBcmd1bWVudC5oZWFkZXJzKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIG5vb3BcbiAgfVxuXG4gIHJldHVybjtcbn1cblxuZXhwb3J0IHsgYWRkRmV0Y2hFbmRJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBhZGRGZXRjaEluc3RydW1lbnRhdGlvbkhhbmRsZXIsIHBhcnNlRmV0Y2hBcmdzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mZXRjaC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/fetch.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/globalError.js":
/*!**************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/globalError.js ***!
  \**************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addGlobalErrorInstrumentationHandler: () => (/* binding */ addGlobalErrorInstrumentationHandler)\n/* harmony export */ });\n/* harmony import */ var _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n/* harmony import */ var _handlers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./handlers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/handlers.js\");\n\n\n\nlet _oldOnErrorHandler = null;\n\n/**\n * Add an instrumentation handler for when an error is captured by the global error handler.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addGlobalErrorInstrumentationHandler(handler) {\n  const type = 'error';\n  (0,_handlers_js__WEBPACK_IMPORTED_MODULE_1__.addHandler)(type, handler);\n  (0,_handlers_js__WEBPACK_IMPORTED_MODULE_1__.maybeInstrument)(type, instrumentError);\n}\n\nfunction instrumentError() {\n  _oldOnErrorHandler = _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ.onerror;\n\n  // Note: The reason we are doing window.onerror instead of window.addEventListener('error')\n  // is that we are using this handler in the Loader Script, to handle buffered errors consistently\n  _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ.onerror = function (\n    msg,\n    url,\n    line,\n    column,\n    error,\n  ) {\n    const handlerData = {\n      column,\n      error,\n      line,\n      msg,\n      url,\n    };\n    (0,_handlers_js__WEBPACK_IMPORTED_MODULE_1__.triggerHandlers)('error', handlerData);\n\n    if (_oldOnErrorHandler) {\n      // eslint-disable-next-line prefer-rest-params\n      return _oldOnErrorHandler.apply(this, arguments);\n    }\n\n    return false;\n  };\n\n  _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n\n\n//# sourceMappingURL=globalError.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2luc3RydW1lbnQvZ2xvYmFsRXJyb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQW1EO0FBQzBCOztBQUU3RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSx3REFBVTtBQUNaLEVBQUUsNkRBQWU7QUFDakI7O0FBRUE7QUFDQSx1QkFBdUIsMkRBQVU7O0FBRWpDO0FBQ0E7QUFDQSxFQUFFLDJEQUFVO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLDZEQUFlOztBQUVuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLEVBQUUsMkRBQVU7QUFDWjs7QUFFZ0Q7QUFDaEQiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9pbnN0cnVtZW50L2dsb2JhbEVycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdMT0JBTF9PQkogfSBmcm9tICcuLi91dGlscy93b3JsZHdpZGUuanMnO1xuaW1wb3J0IHsgYWRkSGFuZGxlciwgbWF5YmVJbnN0cnVtZW50LCB0cmlnZ2VySGFuZGxlcnMgfSBmcm9tICcuL2hhbmRsZXJzLmpzJztcblxubGV0IF9vbGRPbkVycm9ySGFuZGxlciA9IG51bGw7XG5cbi8qKlxuICogQWRkIGFuIGluc3RydW1lbnRhdGlvbiBoYW5kbGVyIGZvciB3aGVuIGFuIGVycm9yIGlzIGNhcHR1cmVkIGJ5IHRoZSBnbG9iYWwgZXJyb3IgaGFuZGxlci5cbiAqXG4gKiBVc2UgYXQgeW91ciBvd24gcmlzaywgdGhpcyBtaWdodCBicmVhayB3aXRob3V0IGNoYW5nZWxvZyBub3RpY2UsIG9ubHkgdXNlZCBpbnRlcm5hbGx5LlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBhZGRHbG9iYWxFcnJvckluc3RydW1lbnRhdGlvbkhhbmRsZXIoaGFuZGxlcikge1xuICBjb25zdCB0eXBlID0gJ2Vycm9yJztcbiAgYWRkSGFuZGxlcih0eXBlLCBoYW5kbGVyKTtcbiAgbWF5YmVJbnN0cnVtZW50KHR5cGUsIGluc3RydW1lbnRFcnJvcik7XG59XG5cbmZ1bmN0aW9uIGluc3RydW1lbnRFcnJvcigpIHtcbiAgX29sZE9uRXJyb3JIYW5kbGVyID0gR0xPQkFMX09CSi5vbmVycm9yO1xuXG4gIC8vIE5vdGU6IFRoZSByZWFzb24gd2UgYXJlIGRvaW5nIHdpbmRvdy5vbmVycm9yIGluc3RlYWQgb2Ygd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJylcbiAgLy8gaXMgdGhhdCB3ZSBhcmUgdXNpbmcgdGhpcyBoYW5kbGVyIGluIHRoZSBMb2FkZXIgU2NyaXB0LCB0byBoYW5kbGUgYnVmZmVyZWQgZXJyb3JzIGNvbnNpc3RlbnRseVxuICBHTE9CQUxfT0JKLm9uZXJyb3IgPSBmdW5jdGlvbiAoXG4gICAgbXNnLFxuICAgIHVybCxcbiAgICBsaW5lLFxuICAgIGNvbHVtbixcbiAgICBlcnJvcixcbiAgKSB7XG4gICAgY29uc3QgaGFuZGxlckRhdGEgPSB7XG4gICAgICBjb2x1bW4sXG4gICAgICBlcnJvcixcbiAgICAgIGxpbmUsXG4gICAgICBtc2csXG4gICAgICB1cmwsXG4gICAgfTtcbiAgICB0cmlnZ2VySGFuZGxlcnMoJ2Vycm9yJywgaGFuZGxlckRhdGEpO1xuXG4gICAgaWYgKF9vbGRPbkVycm9ySGFuZGxlcikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgcmV0dXJuIF9vbGRPbkVycm9ySGFuZGxlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBHTE9CQUxfT0JKLm9uZXJyb3IuX19TRU5UUllfSU5TVFJVTUVOVEVEX18gPSB0cnVlO1xufVxuXG5leHBvcnQgeyBhZGRHbG9iYWxFcnJvckluc3RydW1lbnRhdGlvbkhhbmRsZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdsb2JhbEVycm9yLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/globalError.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/globalUnhandledRejection.js":
/*!***************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/globalUnhandledRejection.js ***!
  \***************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addGlobalUnhandledRejectionInstrumentationHandler: () => (/* binding */ addGlobalUnhandledRejectionInstrumentationHandler)\n/* harmony export */ });\n/* harmony import */ var _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n/* harmony import */ var _handlers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./handlers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/handlers.js\");\n\n\n\nlet _oldOnUnhandledRejectionHandler = null;\n\n/**\n * Add an instrumentation handler for when an unhandled promise rejection is captured.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addGlobalUnhandledRejectionInstrumentationHandler(\n  handler,\n) {\n  const type = 'unhandledrejection';\n  (0,_handlers_js__WEBPACK_IMPORTED_MODULE_1__.addHandler)(type, handler);\n  (0,_handlers_js__WEBPACK_IMPORTED_MODULE_1__.maybeInstrument)(type, instrumentUnhandledRejection);\n}\n\nfunction instrumentUnhandledRejection() {\n  _oldOnUnhandledRejectionHandler = _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ.onunhandledrejection;\n\n  // Note: The reason we are doing window.onunhandledrejection instead of window.addEventListener('unhandledrejection')\n  // is that we are using this handler in the Loader Script, to handle buffered rejections consistently\n  _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ.onunhandledrejection = function (e) {\n    const handlerData = e;\n    (0,_handlers_js__WEBPACK_IMPORTED_MODULE_1__.triggerHandlers)('unhandledrejection', handlerData);\n\n    if (_oldOnUnhandledRejectionHandler) {\n      // eslint-disable-next-line prefer-rest-params\n      return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n    }\n\n    return true;\n  };\n\n  _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n\n\n//# sourceMappingURL=globalUnhandledRejection.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2luc3RydW1lbnQvZ2xvYmFsVW5oYW5kbGVkUmVqZWN0aW9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFtRDtBQUMwQjs7QUFFN0U7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHdEQUFVO0FBQ1osRUFBRSw2REFBZTtBQUNqQjs7QUFFQTtBQUNBLG9DQUFvQywyREFBVTs7QUFFOUM7QUFDQTtBQUNBLEVBQUUsMkRBQVU7QUFDWjtBQUNBLElBQUksNkRBQWU7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsRUFBRSwyREFBVTtBQUNaOztBQUU2RDtBQUM3RCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2luc3RydW1lbnQvZ2xvYmFsVW5oYW5kbGVkUmVqZWN0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdMT0JBTF9PQkogfSBmcm9tICcuLi91dGlscy93b3JsZHdpZGUuanMnO1xuaW1wb3J0IHsgYWRkSGFuZGxlciwgbWF5YmVJbnN0cnVtZW50LCB0cmlnZ2VySGFuZGxlcnMgfSBmcm9tICcuL2hhbmRsZXJzLmpzJztcblxubGV0IF9vbGRPblVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZXIgPSBudWxsO1xuXG4vKipcbiAqIEFkZCBhbiBpbnN0cnVtZW50YXRpb24gaGFuZGxlciBmb3Igd2hlbiBhbiB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24gaXMgY2FwdHVyZWQuXG4gKlxuICogVXNlIGF0IHlvdXIgb3duIHJpc2ssIHRoaXMgbWlnaHQgYnJlYWsgd2l0aG91dCBjaGFuZ2Vsb2cgbm90aWNlLCBvbmx5IHVzZWQgaW50ZXJuYWxseS5cbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gYWRkR2xvYmFsVW5oYW5kbGVkUmVqZWN0aW9uSW5zdHJ1bWVudGF0aW9uSGFuZGxlcihcbiAgaGFuZGxlcixcbikge1xuICBjb25zdCB0eXBlID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG4gIGFkZEhhbmRsZXIodHlwZSwgaGFuZGxlcik7XG4gIG1heWJlSW5zdHJ1bWVudCh0eXBlLCBpbnN0cnVtZW50VW5oYW5kbGVkUmVqZWN0aW9uKTtcbn1cblxuZnVuY3Rpb24gaW5zdHJ1bWVudFVuaGFuZGxlZFJlamVjdGlvbigpIHtcbiAgX29sZE9uVW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlciA9IEdMT0JBTF9PQkoub251bmhhbmRsZWRyZWplY3Rpb247XG5cbiAgLy8gTm90ZTogVGhlIHJlYXNvbiB3ZSBhcmUgZG9pbmcgd2luZG93Lm9udW5oYW5kbGVkcmVqZWN0aW9uIGluc3RlYWQgb2Ygd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicpXG4gIC8vIGlzIHRoYXQgd2UgYXJlIHVzaW5nIHRoaXMgaGFuZGxlciBpbiB0aGUgTG9hZGVyIFNjcmlwdCwgdG8gaGFuZGxlIGJ1ZmZlcmVkIHJlamVjdGlvbnMgY29uc2lzdGVudGx5XG4gIEdMT0JBTF9PQkoub251bmhhbmRsZWRyZWplY3Rpb24gPSBmdW5jdGlvbiAoZSkge1xuICAgIGNvbnN0IGhhbmRsZXJEYXRhID0gZTtcbiAgICB0cmlnZ2VySGFuZGxlcnMoJ3VuaGFuZGxlZHJlamVjdGlvbicsIGhhbmRsZXJEYXRhKTtcblxuICAgIGlmIChfb2xkT25VbmhhbmRsZWRSZWplY3Rpb25IYW5kbGVyKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zXG4gICAgICByZXR1cm4gX29sZE9uVW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIEdMT0JBTF9PQkoub251bmhhbmRsZWRyZWplY3Rpb24uX19TRU5UUllfSU5TVFJVTUVOVEVEX18gPSB0cnVlO1xufVxuXG5leHBvcnQgeyBhZGRHbG9iYWxVbmhhbmRsZWRSZWplY3Rpb25JbnN0cnVtZW50YXRpb25IYW5kbGVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nbG9iYWxVbmhhbmRsZWRSZWplY3Rpb24uanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/globalUnhandledRejection.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/handlers.js":
/*!***********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/handlers.js ***!
  \***********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addHandler: () => (/* binding */ addHandler),\n/* harmony export */   maybeInstrument: () => (/* binding */ maybeInstrument),\n/* harmony export */   resetInstrumentationHandlers: () => (/* binding */ resetInstrumentationHandlers),\n/* harmony export */   triggerHandlers: () => (/* binding */ triggerHandlers)\n/* harmony export */ });\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_stacktrace_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/stacktrace.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/stacktrace.js\");\n\n\n\n\n// We keep the handlers globally\nconst handlers = {};\nconst instrumented = {};\n\n/** Add a handler function. */\nfunction addHandler(type, handler) {\n  handlers[type] = handlers[type] || [];\n  (handlers[type] ).push(handler);\n}\n\n/**\n * Reset all instrumentation handlers.\n * This can be used by tests to ensure we have a clean slate of instrumentation handlers.\n */\nfunction resetInstrumentationHandlers() {\n  Object.keys(handlers).forEach(key => {\n    handlers[key ] = undefined;\n  });\n}\n\n/** Maybe run an instrumentation function, unless it was already called. */\nfunction maybeInstrument(type, instrumentFn) {\n  if (!instrumented[type]) {\n    instrumented[type] = true;\n    try {\n      instrumentFn();\n    } catch (e) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.error(`Error while instrumenting ${type}`, e);\n    }\n  }\n}\n\n/** Trigger handlers for a given instrumentation type. */\nfunction triggerHandlers(type, data) {\n  const typeHandlers = type && handlers[type];\n  if (!typeHandlers) {\n    return;\n  }\n\n  for (const handler of typeHandlers) {\n    try {\n      handler(data);\n    } catch (e) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD &&\n        _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.error(\n          `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${(0,_utils_stacktrace_js__WEBPACK_IMPORTED_MODULE_2__.getFunctionName)(handler)}\\nError:`,\n          e,\n        );\n    }\n  }\n}\n\n\n//# sourceMappingURL=handlers.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2luc3RydW1lbnQvaGFuZGxlcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFnRDtBQUNDO0FBQ1E7O0FBRXpEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixNQUFNLHdEQUFXLElBQUkseURBQUssb0NBQW9DLEtBQUs7QUFDbkU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sTUFBTSx3REFBVztBQUNqQixRQUFRLHlEQUFLO0FBQ2Isb0VBQW9FLEtBQUssVUFBVSxxRUFBZSxVQUFVO0FBQzVHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRXNGO0FBQ3RGIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vaW5zdHJ1bWVudC9oYW5kbGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4uL2RlYnVnLWJ1aWxkLmpzJztcbmltcG9ydCB7IGRlYnVnIH0gZnJvbSAnLi4vdXRpbHMvZGVidWctbG9nZ2VyLmpzJztcbmltcG9ydCB7IGdldEZ1bmN0aW9uTmFtZSB9IGZyb20gJy4uL3V0aWxzL3N0YWNrdHJhY2UuanMnO1xuXG4vLyBXZSBrZWVwIHRoZSBoYW5kbGVycyBnbG9iYWxseVxuY29uc3QgaGFuZGxlcnMgPSB7fTtcbmNvbnN0IGluc3RydW1lbnRlZCA9IHt9O1xuXG4vKiogQWRkIGEgaGFuZGxlciBmdW5jdGlvbi4gKi9cbmZ1bmN0aW9uIGFkZEhhbmRsZXIodHlwZSwgaGFuZGxlcikge1xuICBoYW5kbGVyc1t0eXBlXSA9IGhhbmRsZXJzW3R5cGVdIHx8IFtdO1xuICAoaGFuZGxlcnNbdHlwZV0gKS5wdXNoKGhhbmRsZXIpO1xufVxuXG4vKipcbiAqIFJlc2V0IGFsbCBpbnN0cnVtZW50YXRpb24gaGFuZGxlcnMuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIGJ5IHRlc3RzIHRvIGVuc3VyZSB3ZSBoYXZlIGEgY2xlYW4gc2xhdGUgb2YgaW5zdHJ1bWVudGF0aW9uIGhhbmRsZXJzLlxuICovXG5mdW5jdGlvbiByZXNldEluc3RydW1lbnRhdGlvbkhhbmRsZXJzKCkge1xuICBPYmplY3Qua2V5cyhoYW5kbGVycykuZm9yRWFjaChrZXkgPT4ge1xuICAgIGhhbmRsZXJzW2tleSBdID0gdW5kZWZpbmVkO1xuICB9KTtcbn1cblxuLyoqIE1heWJlIHJ1biBhbiBpbnN0cnVtZW50YXRpb24gZnVuY3Rpb24sIHVubGVzcyBpdCB3YXMgYWxyZWFkeSBjYWxsZWQuICovXG5mdW5jdGlvbiBtYXliZUluc3RydW1lbnQodHlwZSwgaW5zdHJ1bWVudEZuKSB7XG4gIGlmICghaW5zdHJ1bWVudGVkW3R5cGVdKSB7XG4gICAgaW5zdHJ1bWVudGVkW3R5cGVdID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgaW5zdHJ1bWVudEZuKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcuZXJyb3IoYEVycm9yIHdoaWxlIGluc3RydW1lbnRpbmcgJHt0eXBlfWAsIGUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiogVHJpZ2dlciBoYW5kbGVycyBmb3IgYSBnaXZlbiBpbnN0cnVtZW50YXRpb24gdHlwZS4gKi9cbmZ1bmN0aW9uIHRyaWdnZXJIYW5kbGVycyh0eXBlLCBkYXRhKSB7XG4gIGNvbnN0IHR5cGVIYW5kbGVycyA9IHR5cGUgJiYgaGFuZGxlcnNbdHlwZV07XG4gIGlmICghdHlwZUhhbmRsZXJzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHR5cGVIYW5kbGVycykge1xuICAgIHRyeSB7XG4gICAgICBoYW5kbGVyKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIERFQlVHX0JVSUxEICYmXG4gICAgICAgIGRlYnVnLmVycm9yKFxuICAgICAgICAgIGBFcnJvciB3aGlsZSB0cmlnZ2VyaW5nIGluc3RydW1lbnRhdGlvbiBoYW5kbGVyLlxcblR5cGU6ICR7dHlwZX1cXG5OYW1lOiAke2dldEZ1bmN0aW9uTmFtZShoYW5kbGVyKX1cXG5FcnJvcjpgLFxuICAgICAgICAgIGUsXG4gICAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IGFkZEhhbmRsZXIsIG1heWJlSW5zdHJ1bWVudCwgcmVzZXRJbnN0cnVtZW50YXRpb25IYW5kbGVycywgdHJpZ2dlckhhbmRsZXJzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYW5kbGVycy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/handlers.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js":
/*!***************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js ***!
  \***************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addIntegration: () => (/* binding */ addIntegration),\n/* harmony export */   afterSetupIntegrations: () => (/* binding */ afterSetupIntegrations),\n/* harmony export */   defineIntegration: () => (/* binding */ defineIntegration),\n/* harmony export */   getIntegrationsToSetup: () => (/* binding */ getIntegrationsToSetup),\n/* harmony export */   installedIntegrations: () => (/* binding */ installedIntegrations),\n/* harmony export */   setupIntegration: () => (/* binding */ setupIntegration),\n/* harmony export */   setupIntegrations: () => (/* binding */ setupIntegrations)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n\n\n\n\nconst installedIntegrations = [];\n\n/** Map of integrations assigned to a client */\n\n/**\n * Remove duplicates from the given array, preferring the last instance of any duplicate. Not guaranteed to\n * preserve the order of integrations in the array.\n *\n * @private\n */\nfunction filterDuplicates(integrations) {\n  const integrationsByName = {};\n\n  integrations.forEach((currentInstance) => {\n    const { name } = currentInstance;\n\n    const existingInstance = integrationsByName[name];\n\n    // We want integrations later in the array to overwrite earlier ones of the same type, except that we never want a\n    // default instance to overwrite an existing user instance\n    if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n      return;\n    }\n\n    integrationsByName[name] = currentInstance;\n  });\n\n  return Object.values(integrationsByName);\n}\n\n/** Gets integrations to install */\nfunction getIntegrationsToSetup(options) {\n  const defaultIntegrations = options.defaultIntegrations || [];\n  const userIntegrations = options.integrations;\n\n  // We flag default instances, so that later we can tell them apart from any user-created instances of the same class\n  defaultIntegrations.forEach((integration) => {\n    integration.isDefaultInstance = true;\n  });\n\n  let integrations;\n\n  if (Array.isArray(userIntegrations)) {\n    integrations = [...defaultIntegrations, ...userIntegrations];\n  } else if (typeof userIntegrations === 'function') {\n    const resolvedUserIntegrations = userIntegrations(defaultIntegrations);\n    integrations = Array.isArray(resolvedUserIntegrations) ? resolvedUserIntegrations : [resolvedUserIntegrations];\n  } else {\n    integrations = defaultIntegrations;\n  }\n\n  return filterDuplicates(integrations);\n}\n\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nfunction setupIntegrations(client, integrations) {\n  const integrationIndex = {};\n\n  integrations.forEach((integration) => {\n    // guard against empty provided integrations\n    if (integration) {\n      setupIntegration(client, integration, integrationIndex);\n    }\n  });\n\n  return integrationIndex;\n}\n\n/**\n * Execute the `afterAllSetup` hooks of the given integrations.\n */\nfunction afterSetupIntegrations(client, integrations) {\n  for (const integration of integrations) {\n    // guard against empty provided integrations\n    if (integration?.afterAllSetup) {\n      integration.afterAllSetup(client);\n    }\n  }\n}\n\n/** Setup a single integration.  */\nfunction setupIntegration(client, integration, integrationIndex) {\n  if (integrationIndex[integration.name]) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.log(`Integration skipped because it was already installed: ${integration.name}`);\n    return;\n  }\n  integrationIndex[integration.name] = integration;\n\n  // `setupOnce` is only called the first time\n  if (installedIntegrations.indexOf(integration.name) === -1 && typeof integration.setupOnce === 'function') {\n    integration.setupOnce();\n    installedIntegrations.push(integration.name);\n  }\n\n  // `setup` is run for each client\n  if (integration.setup && typeof integration.setup === 'function') {\n    integration.setup(client);\n  }\n\n  if (typeof integration.preprocessEvent === 'function') {\n    const callback = integration.preprocessEvent.bind(integration) ;\n    client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n  }\n\n  if (typeof integration.processEvent === 'function') {\n    const callback = integration.processEvent.bind(integration) ;\n\n    const processor = Object.assign((event, hint) => callback(event, hint, client), {\n      id: integration.name,\n    });\n\n    client.addEventProcessor(processor);\n  }\n\n  _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.log(`Integration installed: ${integration.name}`);\n}\n\n/** Add an integration to the current scope's client. */\nfunction addIntegration(integration) {\n  const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n\n  if (!client) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n    return;\n  }\n\n  client.addIntegration(integration);\n}\n\n/**\n * Define an integration function that can be used to create an integration instance.\n * Note that this by design hides the implementation details of the integration, as they are considered internal.\n */\nfunction defineIntegration(fn) {\n  return fn;\n}\n\n\n//# sourceMappingURL=integration.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBK0M7QUFDQTtBQUNDOztBQUVoRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWSxPQUFPOztBQUVuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHdEQUFXLElBQUkseURBQUssOERBQThELGlCQUFpQjtBQUN2RztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUEsRUFBRSx3REFBVyxJQUFJLHlEQUFLLCtCQUErQixpQkFBaUI7QUFDdEU7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQiw0REFBUzs7QUFFMUI7QUFDQSxJQUFJLHdEQUFXLElBQUkseURBQUssaUNBQWlDLGlCQUFpQjtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRXlKO0FBQ3pKIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vaW50ZWdyYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0Q2xpZW50IH0gZnJvbSAnLi9jdXJyZW50U2NvcGVzLmpzJztcbmltcG9ydCB7IERFQlVHX0JVSUxEIH0gZnJvbSAnLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4vdXRpbHMvZGVidWctbG9nZ2VyLmpzJztcblxuY29uc3QgaW5zdGFsbGVkSW50ZWdyYXRpb25zID0gW107XG5cbi8qKiBNYXAgb2YgaW50ZWdyYXRpb25zIGFzc2lnbmVkIHRvIGEgY2xpZW50ICovXG5cbi8qKlxuICogUmVtb3ZlIGR1cGxpY2F0ZXMgZnJvbSB0aGUgZ2l2ZW4gYXJyYXksIHByZWZlcnJpbmcgdGhlIGxhc3QgaW5zdGFuY2Ugb2YgYW55IGR1cGxpY2F0ZS4gTm90IGd1YXJhbnRlZWQgdG9cbiAqIHByZXNlcnZlIHRoZSBvcmRlciBvZiBpbnRlZ3JhdGlvbnMgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGZpbHRlckR1cGxpY2F0ZXMoaW50ZWdyYXRpb25zKSB7XG4gIGNvbnN0IGludGVncmF0aW9uc0J5TmFtZSA9IHt9O1xuXG4gIGludGVncmF0aW9ucy5mb3JFYWNoKChjdXJyZW50SW5zdGFuY2UpID0+IHtcbiAgICBjb25zdCB7IG5hbWUgfSA9IGN1cnJlbnRJbnN0YW5jZTtcblxuICAgIGNvbnN0IGV4aXN0aW5nSW5zdGFuY2UgPSBpbnRlZ3JhdGlvbnNCeU5hbWVbbmFtZV07XG5cbiAgICAvLyBXZSB3YW50IGludGVncmF0aW9ucyBsYXRlciBpbiB0aGUgYXJyYXkgdG8gb3ZlcndyaXRlIGVhcmxpZXIgb25lcyBvZiB0aGUgc2FtZSB0eXBlLCBleGNlcHQgdGhhdCB3ZSBuZXZlciB3YW50IGFcbiAgICAvLyBkZWZhdWx0IGluc3RhbmNlIHRvIG92ZXJ3cml0ZSBhbiBleGlzdGluZyB1c2VyIGluc3RhbmNlXG4gICAgaWYgKGV4aXN0aW5nSW5zdGFuY2UgJiYgIWV4aXN0aW5nSW5zdGFuY2UuaXNEZWZhdWx0SW5zdGFuY2UgJiYgY3VycmVudEluc3RhbmNlLmlzRGVmYXVsdEluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW50ZWdyYXRpb25zQnlOYW1lW25hbWVdID0gY3VycmVudEluc3RhbmNlO1xuICB9KTtcblxuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhpbnRlZ3JhdGlvbnNCeU5hbWUpO1xufVxuXG4vKiogR2V0cyBpbnRlZ3JhdGlvbnMgdG8gaW5zdGFsbCAqL1xuZnVuY3Rpb24gZ2V0SW50ZWdyYXRpb25zVG9TZXR1cChvcHRpb25zKSB7XG4gIGNvbnN0IGRlZmF1bHRJbnRlZ3JhdGlvbnMgPSBvcHRpb25zLmRlZmF1bHRJbnRlZ3JhdGlvbnMgfHwgW107XG4gIGNvbnN0IHVzZXJJbnRlZ3JhdGlvbnMgPSBvcHRpb25zLmludGVncmF0aW9ucztcblxuICAvLyBXZSBmbGFnIGRlZmF1bHQgaW5zdGFuY2VzLCBzbyB0aGF0IGxhdGVyIHdlIGNhbiB0ZWxsIHRoZW0gYXBhcnQgZnJvbSBhbnkgdXNlci1jcmVhdGVkIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBjbGFzc1xuICBkZWZhdWx0SW50ZWdyYXRpb25zLmZvckVhY2goKGludGVncmF0aW9uKSA9PiB7XG4gICAgaW50ZWdyYXRpb24uaXNEZWZhdWx0SW5zdGFuY2UgPSB0cnVlO1xuICB9KTtcblxuICBsZXQgaW50ZWdyYXRpb25zO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHVzZXJJbnRlZ3JhdGlvbnMpKSB7XG4gICAgaW50ZWdyYXRpb25zID0gWy4uLmRlZmF1bHRJbnRlZ3JhdGlvbnMsIC4uLnVzZXJJbnRlZ3JhdGlvbnNdO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB1c2VySW50ZWdyYXRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgcmVzb2x2ZWRVc2VySW50ZWdyYXRpb25zID0gdXNlckludGVncmF0aW9ucyhkZWZhdWx0SW50ZWdyYXRpb25zKTtcbiAgICBpbnRlZ3JhdGlvbnMgPSBBcnJheS5pc0FycmF5KHJlc29sdmVkVXNlckludGVncmF0aW9ucykgPyByZXNvbHZlZFVzZXJJbnRlZ3JhdGlvbnMgOiBbcmVzb2x2ZWRVc2VySW50ZWdyYXRpb25zXTtcbiAgfSBlbHNlIHtcbiAgICBpbnRlZ3JhdGlvbnMgPSBkZWZhdWx0SW50ZWdyYXRpb25zO1xuICB9XG5cbiAgcmV0dXJuIGZpbHRlckR1cGxpY2F0ZXMoaW50ZWdyYXRpb25zKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIGxpc3Qgb2YgaW50ZWdyYXRpb24gaW5zdGFuY2VzIHRoaXMgaW5zdGFsbHMgdGhlbSBhbGwuIFdoZW4gYHdpdGhEZWZhdWx0c2AgaXMgc2V0IHRvIGB0cnVlYCB0aGVuIGFsbCBkZWZhdWx0XG4gKiBpbnRlZ3JhdGlvbnMgYXJlIGFkZGVkIHVubGVzcyB0aGV5IHdlcmUgYWxyZWFkeSBwcm92aWRlZCBiZWZvcmUuXG4gKiBAcGFyYW0gaW50ZWdyYXRpb25zIGFycmF5IG9mIGludGVncmF0aW9uIGluc3RhbmNlc1xuICogQHBhcmFtIHdpdGhEZWZhdWx0IHNob3VsZCBlbmFibGUgZGVmYXVsdCBpbnRlZ3JhdGlvbnNcbiAqL1xuZnVuY3Rpb24gc2V0dXBJbnRlZ3JhdGlvbnMoY2xpZW50LCBpbnRlZ3JhdGlvbnMpIHtcbiAgY29uc3QgaW50ZWdyYXRpb25JbmRleCA9IHt9O1xuXG4gIGludGVncmF0aW9ucy5mb3JFYWNoKChpbnRlZ3JhdGlvbikgPT4ge1xuICAgIC8vIGd1YXJkIGFnYWluc3QgZW1wdHkgcHJvdmlkZWQgaW50ZWdyYXRpb25zXG4gICAgaWYgKGludGVncmF0aW9uKSB7XG4gICAgICBzZXR1cEludGVncmF0aW9uKGNsaWVudCwgaW50ZWdyYXRpb24sIGludGVncmF0aW9uSW5kZXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGludGVncmF0aW9uSW5kZXg7XG59XG5cbi8qKlxuICogRXhlY3V0ZSB0aGUgYGFmdGVyQWxsU2V0dXBgIGhvb2tzIG9mIHRoZSBnaXZlbiBpbnRlZ3JhdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGFmdGVyU2V0dXBJbnRlZ3JhdGlvbnMoY2xpZW50LCBpbnRlZ3JhdGlvbnMpIHtcbiAgZm9yIChjb25zdCBpbnRlZ3JhdGlvbiBvZiBpbnRlZ3JhdGlvbnMpIHtcbiAgICAvLyBndWFyZCBhZ2FpbnN0IGVtcHR5IHByb3ZpZGVkIGludGVncmF0aW9uc1xuICAgIGlmIChpbnRlZ3JhdGlvbj8uYWZ0ZXJBbGxTZXR1cCkge1xuICAgICAgaW50ZWdyYXRpb24uYWZ0ZXJBbGxTZXR1cChjbGllbnQpO1xuICAgIH1cbiAgfVxufVxuXG4vKiogU2V0dXAgYSBzaW5nbGUgaW50ZWdyYXRpb24uICAqL1xuZnVuY3Rpb24gc2V0dXBJbnRlZ3JhdGlvbihjbGllbnQsIGludGVncmF0aW9uLCBpbnRlZ3JhdGlvbkluZGV4KSB7XG4gIGlmIChpbnRlZ3JhdGlvbkluZGV4W2ludGVncmF0aW9uLm5hbWVdKSB7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKGBJbnRlZ3JhdGlvbiBza2lwcGVkIGJlY2F1c2UgaXQgd2FzIGFscmVhZHkgaW5zdGFsbGVkOiAke2ludGVncmF0aW9uLm5hbWV9YCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGludGVncmF0aW9uSW5kZXhbaW50ZWdyYXRpb24ubmFtZV0gPSBpbnRlZ3JhdGlvbjtcblxuICAvLyBgc2V0dXBPbmNlYCBpcyBvbmx5IGNhbGxlZCB0aGUgZmlyc3QgdGltZVxuICBpZiAoaW5zdGFsbGVkSW50ZWdyYXRpb25zLmluZGV4T2YoaW50ZWdyYXRpb24ubmFtZSkgPT09IC0xICYmIHR5cGVvZiBpbnRlZ3JhdGlvbi5zZXR1cE9uY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnRlZ3JhdGlvbi5zZXR1cE9uY2UoKTtcbiAgICBpbnN0YWxsZWRJbnRlZ3JhdGlvbnMucHVzaChpbnRlZ3JhdGlvbi5uYW1lKTtcbiAgfVxuXG4gIC8vIGBzZXR1cGAgaXMgcnVuIGZvciBlYWNoIGNsaWVudFxuICBpZiAoaW50ZWdyYXRpb24uc2V0dXAgJiYgdHlwZW9mIGludGVncmF0aW9uLnNldHVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW50ZWdyYXRpb24uc2V0dXAoY2xpZW50KTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW50ZWdyYXRpb24ucHJlcHJvY2Vzc0V2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSBpbnRlZ3JhdGlvbi5wcmVwcm9jZXNzRXZlbnQuYmluZChpbnRlZ3JhdGlvbikgO1xuICAgIGNsaWVudC5vbigncHJlcHJvY2Vzc0V2ZW50JywgKGV2ZW50LCBoaW50KSA9PiBjYWxsYmFjayhldmVudCwgaGludCwgY2xpZW50KSk7XG4gIH1cblxuICBpZiAodHlwZW9mIGludGVncmF0aW9uLnByb2Nlc3NFdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IGNhbGxiYWNrID0gaW50ZWdyYXRpb24ucHJvY2Vzc0V2ZW50LmJpbmQoaW50ZWdyYXRpb24pIDtcblxuICAgIGNvbnN0IHByb2Nlc3NvciA9IE9iamVjdC5hc3NpZ24oKGV2ZW50LCBoaW50KSA9PiBjYWxsYmFjayhldmVudCwgaGludCwgY2xpZW50KSwge1xuICAgICAgaWQ6IGludGVncmF0aW9uLm5hbWUsXG4gICAgfSk7XG5cbiAgICBjbGllbnQuYWRkRXZlbnRQcm9jZXNzb3IocHJvY2Vzc29yKTtcbiAgfVxuXG4gIERFQlVHX0JVSUxEICYmIGRlYnVnLmxvZyhgSW50ZWdyYXRpb24gaW5zdGFsbGVkOiAke2ludGVncmF0aW9uLm5hbWV9YCk7XG59XG5cbi8qKiBBZGQgYW4gaW50ZWdyYXRpb24gdG8gdGhlIGN1cnJlbnQgc2NvcGUncyBjbGllbnQuICovXG5mdW5jdGlvbiBhZGRJbnRlZ3JhdGlvbihpbnRlZ3JhdGlvbikge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcblxuICBpZiAoIWNsaWVudCkge1xuICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLndhcm4oYENhbm5vdCBhZGQgaW50ZWdyYXRpb24gXCIke2ludGVncmF0aW9uLm5hbWV9XCIgYmVjYXVzZSBubyBTREsgQ2xpZW50IGlzIGF2YWlsYWJsZS5gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjbGllbnQuYWRkSW50ZWdyYXRpb24oaW50ZWdyYXRpb24pO1xufVxuXG4vKipcbiAqIERlZmluZSBhbiBpbnRlZ3JhdGlvbiBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhbiBpbnRlZ3JhdGlvbiBpbnN0YW5jZS5cbiAqIE5vdGUgdGhhdCB0aGlzIGJ5IGRlc2lnbiBoaWRlcyB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgaW50ZWdyYXRpb24sIGFzIHRoZXkgYXJlIGNvbnNpZGVyZWQgaW50ZXJuYWwuXG4gKi9cbmZ1bmN0aW9uIGRlZmluZUludGVncmF0aW9uKGZuKSB7XG4gIHJldHVybiBmbjtcbn1cblxuZXhwb3J0IHsgYWRkSW50ZWdyYXRpb24sIGFmdGVyU2V0dXBJbnRlZ3JhdGlvbnMsIGRlZmluZUludGVncmF0aW9uLCBnZXRJbnRlZ3JhdGlvbnNUb1NldHVwLCBpbnN0YWxsZWRJbnRlZ3JhdGlvbnMsIHNldHVwSW50ZWdyYXRpb24sIHNldHVwSW50ZWdyYXRpb25zIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlZ3JhdGlvbi5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/captureconsole.js":
/*!*******************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/captureconsole.js ***!
  \*******************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   captureConsoleIntegration: () => (/* binding */ captureConsoleIntegration)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _exports_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../exports.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/exports.js\");\n/* harmony import */ var _instrument_console_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../instrument/console.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/console.js\");\n/* harmony import */ var _integration_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_misc_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/misc.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/misc.js\");\n/* harmony import */ var _utils_severity_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/severity.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/severity.js\");\n/* harmony import */ var _utils_string_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/string.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/string.js\");\n/* harmony import */ var _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n\n\n\n\n\n\n\n\n\n\nconst INTEGRATION_NAME = 'CaptureConsole';\n\nconst _captureConsoleIntegration = ((options = {}) => {\n  const levels = options.levels || _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_4__.CONSOLE_LEVELS;\n  const handled = options.handled ?? true;\n\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      if (!(\"console\" in _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_8__.GLOBAL_OBJ)) {\n        return;\n      }\n\n      (0,_instrument_console_js__WEBPACK_IMPORTED_MODULE_2__.addConsoleInstrumentationHandler)(({ args, level }) => {\n        if ((0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)() !== client || !levels.includes(level)) {\n          return;\n        }\n\n        consoleHandler(args, level, handled);\n      });\n    },\n  };\n}) ;\n\n/**\n * Send Console API calls as Sentry Events.\n */\nconst captureConsoleIntegration = (0,_integration_js__WEBPACK_IMPORTED_MODULE_3__.defineIntegration)(_captureConsoleIntegration);\n\nfunction consoleHandler(args, level, handled) {\n  const captureContext = {\n    level: (0,_utils_severity_js__WEBPACK_IMPORTED_MODULE_6__.severityLevelFromString)(level),\n    extra: {\n      arguments: args,\n    },\n  };\n\n  (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.withScope)(scope => {\n    scope.addEventProcessor(event => {\n      event.logger = 'console';\n\n      (0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_5__.addExceptionMechanism)(event, {\n        handled,\n        type: 'console',\n      });\n\n      return event;\n    });\n\n    if (level === 'assert') {\n      if (!args[0]) {\n        const message = `Assertion failed: ${(0,_utils_string_js__WEBPACK_IMPORTED_MODULE_7__.safeJoin)(args.slice(1), ' ') || 'console.assert'}`;\n        scope.setExtra('arguments', args.slice(1));\n        (0,_exports_js__WEBPACK_IMPORTED_MODULE_1__.captureMessage)(message, captureContext);\n      }\n      return;\n    }\n\n    const error = args.find(arg => arg instanceof Error);\n    if (error) {\n      (0,_exports_js__WEBPACK_IMPORTED_MODULE_1__.captureException)(error, captureContext);\n      return;\n    }\n\n    const message = (0,_utils_string_js__WEBPACK_IMPORTED_MODULE_7__.safeJoin)(args, ' ');\n    (0,_exports_js__WEBPACK_IMPORTED_MODULE_1__.captureMessage)(message, captureContext);\n  });\n}\n\n\n//# sourceMappingURL=captureconsole.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9jYXB0dXJlY29uc29sZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQTJEO0FBQ007QUFDVztBQUN0QjtBQUNJO0FBQ0Q7QUFDTTtBQUNqQjtBQUNLOztBQUVuRDs7QUFFQSxpREFBaUQ7QUFDakQsbUNBQW1DLGtFQUFjO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksd0VBQXVCO0FBQ25DO0FBQ0E7O0FBRUEsTUFBTSx3RkFBZ0MsSUFBSSxhQUFhO0FBQ3ZELFlBQVksNERBQVM7QUFDckI7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxrRUFBaUI7O0FBRW5EO0FBQ0E7QUFDQSxXQUFXLDJFQUF1QjtBQUNsQztBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBLEVBQUUsNERBQVM7QUFDWDtBQUNBOztBQUVBLE1BQU0scUVBQXFCO0FBQzNCO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsNkNBQTZDLDBEQUFRLHlDQUF5QztBQUM5RjtBQUNBLFFBQVEsMkRBQWM7QUFDdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNLDZEQUFnQjtBQUN0QjtBQUNBOztBQUVBLG9CQUFvQiwwREFBUTtBQUM1QixJQUFJLDJEQUFjO0FBQ2xCLEdBQUc7QUFDSDs7QUFFcUM7QUFDckMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9pbnRlZ3JhdGlvbnMvY2FwdHVyZWNvbnNvbGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0Q2xpZW50LCB3aXRoU2NvcGUgfSBmcm9tICcuLi9jdXJyZW50U2NvcGVzLmpzJztcbmltcG9ydCB7IGNhcHR1cmVNZXNzYWdlLCBjYXB0dXJlRXhjZXB0aW9uIH0gZnJvbSAnLi4vZXhwb3J0cy5qcyc7XG5pbXBvcnQgeyBhZGRDb25zb2xlSW5zdHJ1bWVudGF0aW9uSGFuZGxlciB9IGZyb20gJy4uL2luc3RydW1lbnQvY29uc29sZS5qcyc7XG5pbXBvcnQgeyBkZWZpbmVJbnRlZ3JhdGlvbiB9IGZyb20gJy4uL2ludGVncmF0aW9uLmpzJztcbmltcG9ydCB7IENPTlNPTEVfTEVWRUxTIH0gZnJvbSAnLi4vdXRpbHMvZGVidWctbG9nZ2VyLmpzJztcbmltcG9ydCB7IGFkZEV4Y2VwdGlvbk1lY2hhbmlzbSB9IGZyb20gJy4uL3V0aWxzL21pc2MuanMnO1xuaW1wb3J0IHsgc2V2ZXJpdHlMZXZlbEZyb21TdHJpbmcgfSBmcm9tICcuLi91dGlscy9zZXZlcml0eS5qcyc7XG5pbXBvcnQgeyBzYWZlSm9pbiB9IGZyb20gJy4uL3V0aWxzL3N0cmluZy5qcyc7XG5pbXBvcnQgeyBHTE9CQUxfT0JKIH0gZnJvbSAnLi4vdXRpbHMvd29ybGR3aWRlLmpzJztcblxuY29uc3QgSU5URUdSQVRJT05fTkFNRSA9ICdDYXB0dXJlQ29uc29sZSc7XG5cbmNvbnN0IF9jYXB0dXJlQ29uc29sZUludGVncmF0aW9uID0gKChvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgbGV2ZWxzID0gb3B0aW9ucy5sZXZlbHMgfHwgQ09OU09MRV9MRVZFTFM7XG4gIGNvbnN0IGhhbmRsZWQgPSBvcHRpb25zLmhhbmRsZWQgPz8gdHJ1ZTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IElOVEVHUkFUSU9OX05BTUUsXG4gICAgc2V0dXAoY2xpZW50KSB7XG4gICAgICBpZiAoISgnY29uc29sZScgaW4gR0xPQkFMX09CSikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhZGRDb25zb2xlSW5zdHJ1bWVudGF0aW9uSGFuZGxlcigoeyBhcmdzLCBsZXZlbCB9KSA9PiB7XG4gICAgICAgIGlmIChnZXRDbGllbnQoKSAhPT0gY2xpZW50IHx8ICFsZXZlbHMuaW5jbHVkZXMobGV2ZWwpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZUhhbmRsZXIoYXJncywgbGV2ZWwsIGhhbmRsZWQpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuLyoqXG4gKiBTZW5kIENvbnNvbGUgQVBJIGNhbGxzIGFzIFNlbnRyeSBFdmVudHMuXG4gKi9cbmNvbnN0IGNhcHR1cmVDb25zb2xlSW50ZWdyYXRpb24gPSBkZWZpbmVJbnRlZ3JhdGlvbihfY2FwdHVyZUNvbnNvbGVJbnRlZ3JhdGlvbik7XG5cbmZ1bmN0aW9uIGNvbnNvbGVIYW5kbGVyKGFyZ3MsIGxldmVsLCBoYW5kbGVkKSB7XG4gIGNvbnN0IGNhcHR1cmVDb250ZXh0ID0ge1xuICAgIGxldmVsOiBzZXZlcml0eUxldmVsRnJvbVN0cmluZyhsZXZlbCksXG4gICAgZXh0cmE6IHtcbiAgICAgIGFyZ3VtZW50czogYXJncyxcbiAgICB9LFxuICB9O1xuXG4gIHdpdGhTY29wZShzY29wZSA9PiB7XG4gICAgc2NvcGUuYWRkRXZlbnRQcm9jZXNzb3IoZXZlbnQgPT4ge1xuICAgICAgZXZlbnQubG9nZ2VyID0gJ2NvbnNvbGUnO1xuXG4gICAgICBhZGRFeGNlcHRpb25NZWNoYW5pc20oZXZlbnQsIHtcbiAgICAgICAgaGFuZGxlZCxcbiAgICAgICAgdHlwZTogJ2NvbnNvbGUnLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9KTtcblxuICAgIGlmIChsZXZlbCA9PT0gJ2Fzc2VydCcpIHtcbiAgICAgIGlmICghYXJnc1swXSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gYEFzc2VydGlvbiBmYWlsZWQ6ICR7c2FmZUpvaW4oYXJncy5zbGljZSgxKSwgJyAnKSB8fCAnY29uc29sZS5hc3NlcnQnfWA7XG4gICAgICAgIHNjb3BlLnNldEV4dHJhKCdhcmd1bWVudHMnLCBhcmdzLnNsaWNlKDEpKTtcbiAgICAgICAgY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSwgY2FwdHVyZUNvbnRleHQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9yID0gYXJncy5maW5kKGFyZyA9PiBhcmcgaW5zdGFuY2VvZiBFcnJvcik7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYXB0dXJlRXhjZXB0aW9uKGVycm9yLCBjYXB0dXJlQ29udGV4dCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IHNhZmVKb2luKGFyZ3MsICcgJyk7XG4gICAgY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSwgY2FwdHVyZUNvbnRleHQpO1xuICB9KTtcbn1cblxuZXhwb3J0IHsgY2FwdHVyZUNvbnNvbGVJbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2FwdHVyZWNvbnNvbGUuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/captureconsole.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/console.js":
/*!************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/console.js ***!
  \************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addConsoleBreadcrumb: () => (/* binding */ addConsoleBreadcrumb),\n/* harmony export */   consoleIntegration: () => (/* binding */ consoleIntegration)\n/* harmony export */ });\n/* harmony import */ var _breadcrumbs_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../breadcrumbs.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/breadcrumbs.js\");\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _instrument_console_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../instrument/console.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/console.js\");\n/* harmony import */ var _integration_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_severity_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/severity.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/severity.js\");\n/* harmony import */ var _utils_string_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/string.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/string.js\");\n/* harmony import */ var _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n\n\n\n\n\n\n\n\n\nconst INTEGRATION_NAME = 'Console';\n\n/**\n * Captures calls to the `console` API as breadcrumbs in Sentry.\n *\n * By default the integration instruments `console.debug`, `console.info`, `console.warn`, `console.error`,\n * `console.log`, `console.trace`, and `console.assert`. You can use the `levels` option to customize which\n * levels are captured.\n *\n * @example\n *\n * ```js\n * Sentry.init({\n *   integrations: [Sentry.consoleIntegration({ levels: ['error', 'warn'] })],\n * });\n * ```\n */\nconst consoleIntegration = (0,_integration_js__WEBPACK_IMPORTED_MODULE_3__.defineIntegration)((options = {}) => {\n  const levels = new Set(options.levels || _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_4__.CONSOLE_LEVELS);\n\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      (0,_instrument_console_js__WEBPACK_IMPORTED_MODULE_2__.addConsoleInstrumentationHandler)(({ args, level }) => {\n        if ((0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_1__.getClient)() !== client || !levels.has(level)) {\n          return;\n        }\n\n        addConsoleBreadcrumb(level, args);\n      });\n    },\n  };\n});\n\n/**\n * Capture a console breadcrumb.\n *\n * Exported just for tests.\n */\nfunction addConsoleBreadcrumb(level, args) {\n  const breadcrumb = {\n    category: 'console',\n    data: {\n      arguments: args,\n      logger: 'console',\n    },\n    level: (0,_utils_severity_js__WEBPACK_IMPORTED_MODULE_5__.severityLevelFromString)(level),\n    message: formatConsoleArgs(args),\n  };\n\n  if (level === 'assert') {\n    if (args[0] === false) {\n      const assertionArgs = args.slice(1);\n      breadcrumb.message =\n        assertionArgs.length > 0 ? `Assertion failed: ${formatConsoleArgs(assertionArgs)}` : 'Assertion failed';\n      breadcrumb.data.arguments = assertionArgs;\n    } else {\n      // Don't capture a breadcrumb for passed assertions\n      return;\n    }\n  }\n\n  (0,_breadcrumbs_js__WEBPACK_IMPORTED_MODULE_0__.addBreadcrumb)(breadcrumb, {\n    input: args,\n    level,\n  });\n}\n\nfunction formatConsoleArgs(values) {\n  return \"util\" in _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_7__.GLOBAL_OBJ && typeof (_utils_worldwide_js__WEBPACK_IMPORTED_MODULE_7__.GLOBAL_OBJ ).util.format === 'function'\n    ? (_utils_worldwide_js__WEBPACK_IMPORTED_MODULE_7__.GLOBAL_OBJ ).util.format(...values)\n    : (0,_utils_string_js__WEBPACK_IMPORTED_MODULE_6__.safeJoin)(values, ' ');\n}\n\n\n//# sourceMappingURL=console.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9jb25zb2xlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBa0Q7QUFDRjtBQUM0QjtBQUN0QjtBQUNJO0FBQ0s7QUFDakI7QUFDSzs7QUFFbkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCwyQkFBMkI7QUFDM0UsSUFBSTtBQUNKO0FBQ0E7QUFDQSwyQkFBMkIsa0VBQWlCLGNBQWM7QUFDMUQsMkNBQTJDLGtFQUFjOztBQUV6RDtBQUNBO0FBQ0E7QUFDQSxNQUFNLHdGQUFnQyxJQUFJLGFBQWE7QUFDdkQsWUFBWSw0REFBUztBQUNyQjtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxXQUFXLDJFQUF1QjtBQUNsQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdELGlDQUFpQztBQUN6RjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLDhEQUFhO0FBQ2Y7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLFNBQVMscUVBQW9CLFlBQVksMkRBQVU7QUFDbkQsT0FBTywyREFBVTtBQUNqQixNQUFNLDBEQUFRO0FBQ2Q7O0FBRW9EO0FBQ3BEIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vaW50ZWdyYXRpb25zL2NvbnNvbGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWRkQnJlYWRjcnVtYiB9IGZyb20gJy4uL2JyZWFkY3J1bWJzLmpzJztcbmltcG9ydCB7IGdldENsaWVudCB9IGZyb20gJy4uL2N1cnJlbnRTY29wZXMuanMnO1xuaW1wb3J0IHsgYWRkQ29uc29sZUluc3RydW1lbnRhdGlvbkhhbmRsZXIgfSBmcm9tICcuLi9pbnN0cnVtZW50L2NvbnNvbGUuanMnO1xuaW1wb3J0IHsgZGVmaW5lSW50ZWdyYXRpb24gfSBmcm9tICcuLi9pbnRlZ3JhdGlvbi5qcyc7XG5pbXBvcnQgeyBDT05TT0xFX0xFVkVMUyB9IGZyb20gJy4uL3V0aWxzL2RlYnVnLWxvZ2dlci5qcyc7XG5pbXBvcnQgeyBzZXZlcml0eUxldmVsRnJvbVN0cmluZyB9IGZyb20gJy4uL3V0aWxzL3NldmVyaXR5LmpzJztcbmltcG9ydCB7IHNhZmVKb2luIH0gZnJvbSAnLi4vdXRpbHMvc3RyaW5nLmpzJztcbmltcG9ydCB7IEdMT0JBTF9PQkogfSBmcm9tICcuLi91dGlscy93b3JsZHdpZGUuanMnO1xuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ0NvbnNvbGUnO1xuXG4vKipcbiAqIENhcHR1cmVzIGNhbGxzIHRvIHRoZSBgY29uc29sZWAgQVBJIGFzIGJyZWFkY3J1bWJzIGluIFNlbnRyeS5cbiAqXG4gKiBCeSBkZWZhdWx0IHRoZSBpbnRlZ3JhdGlvbiBpbnN0cnVtZW50cyBgY29uc29sZS5kZWJ1Z2AsIGBjb25zb2xlLmluZm9gLCBgY29uc29sZS53YXJuYCwgYGNvbnNvbGUuZXJyb3JgLFxuICogYGNvbnNvbGUubG9nYCwgYGNvbnNvbGUudHJhY2VgLCBhbmQgYGNvbnNvbGUuYXNzZXJ0YC4gWW91IGNhbiB1c2UgdGhlIGBsZXZlbHNgIG9wdGlvbiB0byBjdXN0b21pemUgd2hpY2hcbiAqIGxldmVscyBhcmUgY2FwdHVyZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogU2VudHJ5LmluaXQoe1xuICogICBpbnRlZ3JhdGlvbnM6IFtTZW50cnkuY29uc29sZUludGVncmF0aW9uKHsgbGV2ZWxzOiBbJ2Vycm9yJywgJ3dhcm4nXSB9KV0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5jb25zdCBjb25zb2xlSW50ZWdyYXRpb24gPSBkZWZpbmVJbnRlZ3JhdGlvbigob3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IGxldmVscyA9IG5ldyBTZXQob3B0aW9ucy5sZXZlbHMgfHwgQ09OU09MRV9MRVZFTFMpO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogSU5URUdSQVRJT05fTkFNRSxcbiAgICBzZXR1cChjbGllbnQpIHtcbiAgICAgIGFkZENvbnNvbGVJbnN0cnVtZW50YXRpb25IYW5kbGVyKCh7IGFyZ3MsIGxldmVsIH0pID0+IHtcbiAgICAgICAgaWYgKGdldENsaWVudCgpICE9PSBjbGllbnQgfHwgIWxldmVscy5oYXMobGV2ZWwpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkQ29uc29sZUJyZWFkY3J1bWIobGV2ZWwsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn0pO1xuXG4vKipcbiAqIENhcHR1cmUgYSBjb25zb2xlIGJyZWFkY3J1bWIuXG4gKlxuICogRXhwb3J0ZWQganVzdCBmb3IgdGVzdHMuXG4gKi9cbmZ1bmN0aW9uIGFkZENvbnNvbGVCcmVhZGNydW1iKGxldmVsLCBhcmdzKSB7XG4gIGNvbnN0IGJyZWFkY3J1bWIgPSB7XG4gICAgY2F0ZWdvcnk6ICdjb25zb2xlJyxcbiAgICBkYXRhOiB7XG4gICAgICBhcmd1bWVudHM6IGFyZ3MsXG4gICAgICBsb2dnZXI6ICdjb25zb2xlJyxcbiAgICB9LFxuICAgIGxldmVsOiBzZXZlcml0eUxldmVsRnJvbVN0cmluZyhsZXZlbCksXG4gICAgbWVzc2FnZTogZm9ybWF0Q29uc29sZUFyZ3MoYXJncyksXG4gIH07XG5cbiAgaWYgKGxldmVsID09PSAnYXNzZXJ0Jykge1xuICAgIGlmIChhcmdzWzBdID09PSBmYWxzZSkge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uQXJncyA9IGFyZ3Muc2xpY2UoMSk7XG4gICAgICBicmVhZGNydW1iLm1lc3NhZ2UgPVxuICAgICAgICBhc3NlcnRpb25BcmdzLmxlbmd0aCA+IDAgPyBgQXNzZXJ0aW9uIGZhaWxlZDogJHtmb3JtYXRDb25zb2xlQXJncyhhc3NlcnRpb25BcmdzKX1gIDogJ0Fzc2VydGlvbiBmYWlsZWQnO1xuICAgICAgYnJlYWRjcnVtYi5kYXRhLmFyZ3VtZW50cyA9IGFzc2VydGlvbkFyZ3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERvbid0IGNhcHR1cmUgYSBicmVhZGNydW1iIGZvciBwYXNzZWQgYXNzZXJ0aW9uc1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGFkZEJyZWFkY3J1bWIoYnJlYWRjcnVtYiwge1xuICAgIGlucHV0OiBhcmdzLFxuICAgIGxldmVsLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Q29uc29sZUFyZ3ModmFsdWVzKSB7XG4gIHJldHVybiAndXRpbCcgaW4gR0xPQkFMX09CSiAmJiB0eXBlb2YgKEdMT0JBTF9PQkogKS51dGlsLmZvcm1hdCA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gKEdMT0JBTF9PQkogKS51dGlsLmZvcm1hdCguLi52YWx1ZXMpXG4gICAgOiBzYWZlSm9pbih2YWx1ZXMsICcgJyk7XG59XG5cbmV4cG9ydCB7IGFkZENvbnNvbGVCcmVhZGNydW1iLCBjb25zb2xlSW50ZWdyYXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnNvbGUuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/console.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/dedupe.js":
/*!***********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/dedupe.js ***!
  \***********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   _shouldDropEvent: () => (/* binding */ _shouldDropEvent),\n/* harmony export */   dedupeIntegration: () => (/* binding */ dedupeIntegration)\n/* harmony export */ });\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _integration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_stacktrace_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/stacktrace.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/stacktrace.js\");\n\n\n\n\n\nconst INTEGRATION_NAME = 'Dedupe';\n\nconst _dedupeIntegration = (() => {\n  let previousEvent;\n\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(currentEvent) {\n      // We want to ignore any non-error type events, e.g. transactions or replays\n      // These should never be deduped, and also not be compared against as _previousEvent.\n      if (currentEvent.type) {\n        return currentEvent;\n      }\n\n      // Juuust in case something goes wrong\n      try {\n        if (_shouldDropEvent(currentEvent, previousEvent)) {\n          _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.warn('Event dropped due to being a duplicate of previously captured event.');\n          return null;\n        }\n      } catch {} // eslint-disable-line no-empty\n\n      return (previousEvent = currentEvent);\n    },\n  };\n}) ;\n\n/**\n * Deduplication filter.\n */\nconst dedupeIntegration = (0,_integration_js__WEBPACK_IMPORTED_MODULE_1__.defineIntegration)(_dedupeIntegration);\n\n/** only exported for tests. */\nfunction _shouldDropEvent(currentEvent, previousEvent) {\n  if (!previousEvent) {\n    return false;\n  }\n\n  if (_isSameMessageEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  if (_isSameExceptionEvent(currentEvent, previousEvent)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction _isSameMessageEvent(currentEvent, previousEvent) {\n  const currentMessage = currentEvent.message;\n  const previousMessage = previousEvent.message;\n\n  // If neither event has a message property, they were both exceptions, so bail out\n  if (!currentMessage && !previousMessage) {\n    return false;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentMessage && !previousMessage) || (!currentMessage && previousMessage)) {\n    return false;\n  }\n\n  if (currentMessage !== previousMessage) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction _isSameExceptionEvent(currentEvent, previousEvent) {\n  const previousException = _getExceptionFromEvent(previousEvent);\n  const currentException = _getExceptionFromEvent(currentEvent);\n\n  if (!previousException || !currentException) {\n    return false;\n  }\n\n  if (previousException.type !== currentException.type || previousException.value !== currentException.value) {\n    return false;\n  }\n\n  if (!_isSameFingerprint(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  if (!_isSameStacktrace(currentEvent, previousEvent)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction _isSameStacktrace(currentEvent, previousEvent) {\n  let currentFrames = (0,_utils_stacktrace_js__WEBPACK_IMPORTED_MODULE_3__.getFramesFromEvent)(currentEvent);\n  let previousFrames = (0,_utils_stacktrace_js__WEBPACK_IMPORTED_MODULE_3__.getFramesFromEvent)(previousEvent);\n\n  // If neither event has a stacktrace, they are assumed to be the same\n  if (!currentFrames && !previousFrames) {\n    return true;\n  }\n\n  // If only one event has a stacktrace, but not the other one, they are not the same\n  if ((currentFrames && !previousFrames) || (!currentFrames && previousFrames)) {\n    return false;\n  }\n\n  currentFrames = currentFrames ;\n  previousFrames = previousFrames ;\n\n  // If number of frames differ, they are not the same\n  if (previousFrames.length !== currentFrames.length) {\n    return false;\n  }\n\n  // Otherwise, compare the two\n  for (let i = 0; i < previousFrames.length; i++) {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const frameA = previousFrames[i];\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const frameB = currentFrames[i];\n\n    if (\n      frameA.filename !== frameB.filename ||\n      frameA.lineno !== frameB.lineno ||\n      frameA.colno !== frameB.colno ||\n      frameA.function !== frameB.function\n    ) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction _isSameFingerprint(currentEvent, previousEvent) {\n  let currentFingerprint = currentEvent.fingerprint;\n  let previousFingerprint = previousEvent.fingerprint;\n\n  // If neither event has a fingerprint, they are assumed to be the same\n  if (!currentFingerprint && !previousFingerprint) {\n    return true;\n  }\n\n  // If only one event has a fingerprint, but not the other one, they are not the same\n  if ((currentFingerprint && !previousFingerprint) || (!currentFingerprint && previousFingerprint)) {\n    return false;\n  }\n\n  currentFingerprint = currentFingerprint ;\n  previousFingerprint = previousFingerprint ;\n\n  // Otherwise, compare the two\n  try {\n    return !!(currentFingerprint.join('') === previousFingerprint.join(''));\n  } catch {\n    return false;\n  }\n}\n\nfunction _getExceptionFromEvent(event) {\n  return event.exception?.values?.[0];\n}\n\n\n//# sourceMappingURL=dedupe.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9kZWR1cGUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQWdEO0FBQ007QUFDTDtBQUNXOztBQUU1RDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVSx3REFBVyxJQUFJLHlEQUFLO0FBQzlCO0FBQ0E7QUFDQSxRQUFRLFNBQVM7O0FBRWpCO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsa0VBQWlCOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0Isd0VBQWtCO0FBQ3hDLHVCQUF1Qix3RUFBa0I7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsMkJBQTJCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUUrQztBQUMvQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9kZWR1cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBkZWZpbmVJbnRlZ3JhdGlvbiB9IGZyb20gJy4uL2ludGVncmF0aW9uLmpzJztcbmltcG9ydCB7IGRlYnVnIH0gZnJvbSAnLi4vdXRpbHMvZGVidWctbG9nZ2VyLmpzJztcbmltcG9ydCB7IGdldEZyYW1lc0Zyb21FdmVudCB9IGZyb20gJy4uL3V0aWxzL3N0YWNrdHJhY2UuanMnO1xuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ0RlZHVwZSc7XG5cbmNvbnN0IF9kZWR1cGVJbnRlZ3JhdGlvbiA9ICgoKSA9PiB7XG4gIGxldCBwcmV2aW91c0V2ZW50O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogSU5URUdSQVRJT05fTkFNRSxcbiAgICBwcm9jZXNzRXZlbnQoY3VycmVudEV2ZW50KSB7XG4gICAgICAvLyBXZSB3YW50IHRvIGlnbm9yZSBhbnkgbm9uLWVycm9yIHR5cGUgZXZlbnRzLCBlLmcuIHRyYW5zYWN0aW9ucyBvciByZXBsYXlzXG4gICAgICAvLyBUaGVzZSBzaG91bGQgbmV2ZXIgYmUgZGVkdXBlZCwgYW5kIGFsc28gbm90IGJlIGNvbXBhcmVkIGFnYWluc3QgYXMgX3ByZXZpb3VzRXZlbnQuXG4gICAgICBpZiAoY3VycmVudEV2ZW50LnR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRFdmVudDtcbiAgICAgIH1cblxuICAgICAgLy8gSnV1dXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgd3JvbmdcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChfc2hvdWxkRHJvcEV2ZW50KGN1cnJlbnRFdmVudCwgcHJldmlvdXNFdmVudCkpIHtcbiAgICAgICAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy53YXJuKCdFdmVudCBkcm9wcGVkIGR1ZSB0byBiZWluZyBhIGR1cGxpY2F0ZSBvZiBwcmV2aW91c2x5IGNhcHR1cmVkIGV2ZW50LicpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxuICAgICAgcmV0dXJuIChwcmV2aW91c0V2ZW50ID0gY3VycmVudEV2ZW50KTtcbiAgICB9LFxuICB9O1xufSkgO1xuXG4vKipcbiAqIERlZHVwbGljYXRpb24gZmlsdGVyLlxuICovXG5jb25zdCBkZWR1cGVJbnRlZ3JhdGlvbiA9IGRlZmluZUludGVncmF0aW9uKF9kZWR1cGVJbnRlZ3JhdGlvbik7XG5cbi8qKiBvbmx5IGV4cG9ydGVkIGZvciB0ZXN0cy4gKi9cbmZ1bmN0aW9uIF9zaG91bGREcm9wRXZlbnQoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSB7XG4gIGlmICghcHJldmlvdXNFdmVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChfaXNTYW1lTWVzc2FnZUV2ZW50KGN1cnJlbnRFdmVudCwgcHJldmlvdXNFdmVudCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChfaXNTYW1lRXhjZXB0aW9uRXZlbnQoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBfaXNTYW1lTWVzc2FnZUV2ZW50KGN1cnJlbnRFdmVudCwgcHJldmlvdXNFdmVudCkge1xuICBjb25zdCBjdXJyZW50TWVzc2FnZSA9IGN1cnJlbnRFdmVudC5tZXNzYWdlO1xuICBjb25zdCBwcmV2aW91c01lc3NhZ2UgPSBwcmV2aW91c0V2ZW50Lm1lc3NhZ2U7XG5cbiAgLy8gSWYgbmVpdGhlciBldmVudCBoYXMgYSBtZXNzYWdlIHByb3BlcnR5LCB0aGV5IHdlcmUgYm90aCBleGNlcHRpb25zLCBzbyBiYWlsIG91dFxuICBpZiAoIWN1cnJlbnRNZXNzYWdlICYmICFwcmV2aW91c01lc3NhZ2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJZiBvbmx5IG9uZSBldmVudCBoYXMgYSBzdGFja3RyYWNlLCBidXQgbm90IHRoZSBvdGhlciBvbmUsIHRoZXkgYXJlIG5vdCB0aGUgc2FtZVxuICBpZiAoKGN1cnJlbnRNZXNzYWdlICYmICFwcmV2aW91c01lc3NhZ2UpIHx8ICghY3VycmVudE1lc3NhZ2UgJiYgcHJldmlvdXNNZXNzYWdlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChjdXJyZW50TWVzc2FnZSAhPT0gcHJldmlvdXNNZXNzYWdlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFfaXNTYW1lRmluZ2VycHJpbnQoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghX2lzU2FtZVN0YWNrdHJhY2UoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBfaXNTYW1lRXhjZXB0aW9uRXZlbnQoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSB7XG4gIGNvbnN0IHByZXZpb3VzRXhjZXB0aW9uID0gX2dldEV4Y2VwdGlvbkZyb21FdmVudChwcmV2aW91c0V2ZW50KTtcbiAgY29uc3QgY3VycmVudEV4Y2VwdGlvbiA9IF9nZXRFeGNlcHRpb25Gcm9tRXZlbnQoY3VycmVudEV2ZW50KTtcblxuICBpZiAoIXByZXZpb3VzRXhjZXB0aW9uIHx8ICFjdXJyZW50RXhjZXB0aW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHByZXZpb3VzRXhjZXB0aW9uLnR5cGUgIT09IGN1cnJlbnRFeGNlcHRpb24udHlwZSB8fCBwcmV2aW91c0V4Y2VwdGlvbi52YWx1ZSAhPT0gY3VycmVudEV4Y2VwdGlvbi52YWx1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghX2lzU2FtZUZpbmdlcnByaW50KGN1cnJlbnRFdmVudCwgcHJldmlvdXNFdmVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIV9pc1NhbWVTdGFja3RyYWNlKGN1cnJlbnRFdmVudCwgcHJldmlvdXNFdmVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gX2lzU2FtZVN0YWNrdHJhY2UoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSB7XG4gIGxldCBjdXJyZW50RnJhbWVzID0gZ2V0RnJhbWVzRnJvbUV2ZW50KGN1cnJlbnRFdmVudCk7XG4gIGxldCBwcmV2aW91c0ZyYW1lcyA9IGdldEZyYW1lc0Zyb21FdmVudChwcmV2aW91c0V2ZW50KTtcblxuICAvLyBJZiBuZWl0aGVyIGV2ZW50IGhhcyBhIHN0YWNrdHJhY2UsIHRoZXkgYXJlIGFzc3VtZWQgdG8gYmUgdGhlIHNhbWVcbiAgaWYgKCFjdXJyZW50RnJhbWVzICYmICFwcmV2aW91c0ZyYW1lcykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gSWYgb25seSBvbmUgZXZlbnQgaGFzIGEgc3RhY2t0cmFjZSwgYnV0IG5vdCB0aGUgb3RoZXIgb25lLCB0aGV5IGFyZSBub3QgdGhlIHNhbWVcbiAgaWYgKChjdXJyZW50RnJhbWVzICYmICFwcmV2aW91c0ZyYW1lcykgfHwgKCFjdXJyZW50RnJhbWVzICYmIHByZXZpb3VzRnJhbWVzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGN1cnJlbnRGcmFtZXMgPSBjdXJyZW50RnJhbWVzIDtcbiAgcHJldmlvdXNGcmFtZXMgPSBwcmV2aW91c0ZyYW1lcyA7XG5cbiAgLy8gSWYgbnVtYmVyIG9mIGZyYW1lcyBkaWZmZXIsIHRoZXkgYXJlIG5vdCB0aGUgc2FtZVxuICBpZiAocHJldmlvdXNGcmFtZXMubGVuZ3RoICE9PSBjdXJyZW50RnJhbWVzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIE90aGVyd2lzZSwgY29tcGFyZSB0aGUgdHdvXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldmlvdXNGcmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgIGNvbnN0IGZyYW1lQSA9IHByZXZpb3VzRnJhbWVzW2ldO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgY29uc3QgZnJhbWVCID0gY3VycmVudEZyYW1lc1tpXTtcblxuICAgIGlmIChcbiAgICAgIGZyYW1lQS5maWxlbmFtZSAhPT0gZnJhbWVCLmZpbGVuYW1lIHx8XG4gICAgICBmcmFtZUEubGluZW5vICE9PSBmcmFtZUIubGluZW5vIHx8XG4gICAgICBmcmFtZUEuY29sbm8gIT09IGZyYW1lQi5jb2xubyB8fFxuICAgICAgZnJhbWVBLmZ1bmN0aW9uICE9PSBmcmFtZUIuZnVuY3Rpb25cbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gX2lzU2FtZUZpbmdlcnByaW50KGN1cnJlbnRFdmVudCwgcHJldmlvdXNFdmVudCkge1xuICBsZXQgY3VycmVudEZpbmdlcnByaW50ID0gY3VycmVudEV2ZW50LmZpbmdlcnByaW50O1xuICBsZXQgcHJldmlvdXNGaW5nZXJwcmludCA9IHByZXZpb3VzRXZlbnQuZmluZ2VycHJpbnQ7XG5cbiAgLy8gSWYgbmVpdGhlciBldmVudCBoYXMgYSBmaW5nZXJwcmludCwgdGhleSBhcmUgYXNzdW1lZCB0byBiZSB0aGUgc2FtZVxuICBpZiAoIWN1cnJlbnRGaW5nZXJwcmludCAmJiAhcHJldmlvdXNGaW5nZXJwcmludCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gSWYgb25seSBvbmUgZXZlbnQgaGFzIGEgZmluZ2VycHJpbnQsIGJ1dCBub3QgdGhlIG90aGVyIG9uZSwgdGhleSBhcmUgbm90IHRoZSBzYW1lXG4gIGlmICgoY3VycmVudEZpbmdlcnByaW50ICYmICFwcmV2aW91c0ZpbmdlcnByaW50KSB8fCAoIWN1cnJlbnRGaW5nZXJwcmludCAmJiBwcmV2aW91c0ZpbmdlcnByaW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGN1cnJlbnRGaW5nZXJwcmludCA9IGN1cnJlbnRGaW5nZXJwcmludCA7XG4gIHByZXZpb3VzRmluZ2VycHJpbnQgPSBwcmV2aW91c0ZpbmdlcnByaW50IDtcblxuICAvLyBPdGhlcndpc2UsIGNvbXBhcmUgdGhlIHR3b1xuICB0cnkge1xuICAgIHJldHVybiAhIShjdXJyZW50RmluZ2VycHJpbnQuam9pbignJykgPT09IHByZXZpb3VzRmluZ2VycHJpbnQuam9pbignJykpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2dldEV4Y2VwdGlvbkZyb21FdmVudChldmVudCkge1xuICByZXR1cm4gZXZlbnQuZXhjZXB0aW9uPy52YWx1ZXM/LlswXTtcbn1cblxuZXhwb3J0IHsgX3Nob3VsZERyb3BFdmVudCwgZGVkdXBlSW50ZWdyYXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZHVwZS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/dedupe.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/eventFilters.js":
/*!*****************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/eventFilters.js ***!
  \*****************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   eventFiltersIntegration: () => (/* binding */ eventFiltersIntegration),\n/* harmony export */   inboundFiltersIntegration: () => (/* binding */ inboundFiltersIntegration)\n/* harmony export */ });\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _integration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_eventUtils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/eventUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/eventUtils.js\");\n/* harmony import */ var _utils_misc_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/misc.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/misc.js\");\n/* harmony import */ var _utils_string_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/string.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/string.js\");\n\n\n\n\n\n\n\n// \"Script error.\" is hard coded into browsers for errors that it can't read.\n// this is the result of a script being pulled in from an external domain and CORS.\nconst DEFAULT_IGNORE_ERRORS = [\n  /^Script error\\.?$/,\n  /^Javascript error: Script error\\.? on line 0$/,\n  /^ResizeObserver loop completed with undelivered notifications.$/, // The browser logs this when a ResizeObserver handler takes a bit longer. Usually this is not an actual issue though. It indicates slowness.\n  /^Cannot redefine property: googletag$/, // This is thrown when google tag manager is used in combination with an ad blocker\n  /^Can't find variable: gmo$/, // Error from Google Search App https://issuetracker.google.com/issues/396043331\n  /^undefined is not an object \\(evaluating 'a\\.[A-Z]'\\)$/, // Random error that happens but not actionable or noticeable to end-users.\n  'can\\'t redefine non-configurable property \"solana\"', // Probably a browser extension or custom browser (Brave) throwing this error\n  \"vv().getRestrictions is not a function. (In 'vv().getRestrictions(1,a)', 'vv().getRestrictions' is undefined)\", // Error thrown by GTM, seemingly not affecting end-users\n  \"Can't find variable: _AutofillCallbackHandler\", // Unactionable error in instagram webview https://developers.facebook.com/community/threads/320013549791141/\n  /^Non-Error promise rejection captured with value: Object Not Found Matching Id:\\d+, MethodName:simulateEvent, ParamCount:\\d+$/, // unactionable error from CEFSharp, a .NET library that embeds chromium in .NET apps\n  /^Java exception was raised during method invocation$/, // error from Facebook Mobile browser (https://github.com/getsentry/sentry-javascript/issues/15065)\n];\n\n/** Options for the EventFilters integration */\n\nconst INTEGRATION_NAME = 'EventFilters';\n\n/**\n * An integration that filters out events (errors and transactions) based on:\n *\n * - (Errors) A curated list of known low-value or irrelevant errors (see {@link DEFAULT_IGNORE_ERRORS})\n * - (Errors) A list of error messages or urls/filenames passed in via\n *   - Top level Sentry.init options (`ignoreErrors`, `denyUrls`, `allowUrls`)\n *   - The same options passed to the integration directly via @param options\n * - (Transactions/Spans) A list of root span (transaction) names passed in via\n *   - Top level Sentry.init option (`ignoreTransactions`)\n *   - The same option passed to the integration directly via @param options\n *\n * Events filtered by this integration will not be sent to Sentry.\n */\nconst eventFiltersIntegration = (0,_integration_js__WEBPACK_IMPORTED_MODULE_1__.defineIntegration)((options = {}) => {\n  let mergedOptions;\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      const clientOptions = client.getOptions();\n      mergedOptions = _mergeOptions(options, clientOptions);\n    },\n    processEvent(event, _hint, client) {\n      if (!mergedOptions) {\n        const clientOptions = client.getOptions();\n        mergedOptions = _mergeOptions(options, clientOptions);\n      }\n      return _shouldDropEvent(event, mergedOptions) ? null : event;\n    },\n  };\n});\n\n/**\n * An integration that filters out events (errors and transactions) based on:\n *\n * - (Errors) A curated list of known low-value or irrelevant errors (see {@link DEFAULT_IGNORE_ERRORS})\n * - (Errors) A list of error messages or urls/filenames passed in via\n *   - Top level Sentry.init options (`ignoreErrors`, `denyUrls`, `allowUrls`)\n *   - The same options passed to the integration directly via @param options\n * - (Transactions/Spans) A list of root span (transaction) names passed in via\n *   - Top level Sentry.init option (`ignoreTransactions`)\n *   - The same option passed to the integration directly via @param options\n *\n * Events filtered by this integration will not be sent to Sentry.\n *\n * @deprecated this integration was renamed and will be removed in a future major version.\n * Use `eventFiltersIntegration` instead.\n */\nconst inboundFiltersIntegration = (0,_integration_js__WEBPACK_IMPORTED_MODULE_1__.defineIntegration)(((options = {}) => {\n  return {\n    ...eventFiltersIntegration(options),\n    name: 'InboundFilters',\n  };\n}) );\n\nfunction _mergeOptions(\n  internalOptions = {},\n  clientOptions = {},\n) {\n  return {\n    allowUrls: [...(internalOptions.allowUrls || []), ...(clientOptions.allowUrls || [])],\n    denyUrls: [...(internalOptions.denyUrls || []), ...(clientOptions.denyUrls || [])],\n    ignoreErrors: [\n      ...(internalOptions.ignoreErrors || []),\n      ...(clientOptions.ignoreErrors || []),\n      ...(internalOptions.disableErrorDefaults ? [] : DEFAULT_IGNORE_ERRORS),\n    ],\n    ignoreTransactions: [...(internalOptions.ignoreTransactions || []), ...(clientOptions.ignoreTransactions || [])],\n  };\n}\n\nfunction _shouldDropEvent(event, options) {\n  if (!event.type) {\n    // Filter errors\n    if (_isIgnoredError(event, options.ignoreErrors)) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD &&\n        _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.warn(\n          `Event dropped due to being matched by \\`ignoreErrors\\` option.\\nEvent: ${(0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_4__.getEventDescription)(event)}`,\n        );\n      return true;\n    }\n    if (_isUselessError(event)) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD &&\n        _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.warn(\n          `Event dropped due to not having an error message, error type or stacktrace.\\nEvent: ${(0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_4__.getEventDescription)(\n            event,\n          )}`,\n        );\n      return true;\n    }\n    if (_isDeniedUrl(event, options.denyUrls)) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD &&\n        _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.warn(\n          `Event dropped due to being matched by \\`denyUrls\\` option.\\nEvent: ${(0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_4__.getEventDescription)(\n            event,\n          )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n        );\n      return true;\n    }\n    if (!_isAllowedUrl(event, options.allowUrls)) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD &&\n        _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.warn(\n          `Event dropped due to not being matched by \\`allowUrls\\` option.\\nEvent: ${(0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_4__.getEventDescription)(\n            event,\n          )}.\\nUrl: ${_getEventFilterUrl(event)}`,\n        );\n      return true;\n    }\n  } else if (event.type === 'transaction') {\n    // Filter transactions\n\n    if (_isIgnoredTransaction(event, options.ignoreTransactions)) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD &&\n        _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.warn(\n          `Event dropped due to being matched by \\`ignoreTransactions\\` option.\\nEvent: ${(0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_4__.getEventDescription)(event)}`,\n        );\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction _isIgnoredError(event, ignoreErrors) {\n  if (!ignoreErrors?.length) {\n    return false;\n  }\n\n  return (0,_utils_eventUtils_js__WEBPACK_IMPORTED_MODULE_3__.getPossibleEventMessages)(event).some(message => (0,_utils_string_js__WEBPACK_IMPORTED_MODULE_5__.stringMatchesSomePattern)(message, ignoreErrors));\n}\n\nfunction _isIgnoredTransaction(event, ignoreTransactions) {\n  if (!ignoreTransactions?.length) {\n    return false;\n  }\n\n  const name = event.transaction;\n  return name ? (0,_utils_string_js__WEBPACK_IMPORTED_MODULE_5__.stringMatchesSomePattern)(name, ignoreTransactions) : false;\n}\n\nfunction _isDeniedUrl(event, denyUrls) {\n  if (!denyUrls?.length) {\n    return false;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? false : (0,_utils_string_js__WEBPACK_IMPORTED_MODULE_5__.stringMatchesSomePattern)(url, denyUrls);\n}\n\nfunction _isAllowedUrl(event, allowUrls) {\n  if (!allowUrls?.length) {\n    return true;\n  }\n  const url = _getEventFilterUrl(event);\n  return !url ? true : (0,_utils_string_js__WEBPACK_IMPORTED_MODULE_5__.stringMatchesSomePattern)(url, allowUrls);\n}\n\nfunction _getLastValidUrl(frames = []) {\n  for (let i = frames.length - 1; i >= 0; i--) {\n    const frame = frames[i];\n\n    if (frame && frame.filename !== '<anonymous>' && frame.filename !== '[native code]') {\n      return frame.filename || null;\n    }\n  }\n\n  return null;\n}\n\nfunction _getEventFilterUrl(event) {\n  try {\n    // If there are linked exceptions or exception aggregates we only want to match against the top frame of the \"root\" (the main exception)\n    // The root always comes last in linked exceptions\n    const rootException = [...(event.exception?.values ?? [])]\n      .reverse()\n      .find(value => value.mechanism?.parent_id === undefined && value.stacktrace?.frames?.length);\n    const frames = rootException?.stacktrace?.frames;\n    return frames ? _getLastValidUrl(frames) : null;\n  } catch {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.error(`Cannot extract url for event ${(0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_4__.getEventDescription)(event)}`);\n    return null;\n  }\n}\n\nfunction _isUselessError(event) {\n  // We only want to consider events for dropping that actually have recorded exception values.\n  if (!event.exception?.values?.length) {\n    return false;\n  }\n\n  return (\n    // No top-level message\n    !event.message &&\n    // There are no exception values that have a stacktrace, a non-generic-Error type or value\n    !event.exception.values.some(value => value.stacktrace || (value.type && value.type !== 'Error') || value.value)\n  );\n}\n\n\n//# sourceMappingURL=eventFilters.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9ldmVudEZpbHRlcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBZ0Q7QUFDTTtBQUNMO0FBQ2lCO0FBQ1g7QUFDTzs7QUFFOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDJFQUEyRSw0QkFBNEI7QUFDdkc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGtFQUFpQixjQUFjO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLDJFQUEyRSw0QkFBNEI7QUFDdkc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGtFQUFpQixlQUFlO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBLHNCQUFzQjtBQUN0QixvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSx3REFBVztBQUNqQixRQUFRLHlEQUFLO0FBQ2Isb0ZBQW9GLG1FQUFtQixRQUFRO0FBQy9HO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSx3REFBVztBQUNqQixRQUFRLHlEQUFLO0FBQ2IsaUdBQWlHLG1FQUFtQjtBQUNwSDtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sd0RBQVc7QUFDakIsUUFBUSx5REFBSztBQUNiLGdGQUFnRixtRUFBbUI7QUFDbkc7QUFDQSxZQUFZLFVBQVUsMEJBQTBCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSx3REFBVztBQUNqQixRQUFRLHlEQUFLO0FBQ2IscUZBQXFGLG1FQUFtQjtBQUN4RztBQUNBLFlBQVksVUFBVSwwQkFBMEI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0EsTUFBTSx3REFBVztBQUNqQixRQUFRLHlEQUFLO0FBQ2IsMEZBQTBGLG1FQUFtQixRQUFRO0FBQ3JIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLDhFQUF3Qix3QkFBd0IsMEVBQXdCO0FBQ2pGOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCLDBFQUF3QjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBFQUF3QjtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDBFQUF3QjtBQUMvQzs7QUFFQTtBQUNBLGtDQUFrQyxRQUFRO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLElBQUksd0RBQVcsSUFBSSx5REFBSyx1Q0FBdUMsbUVBQW1CLFFBQVE7QUFDMUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRThEO0FBQzlEIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vaW50ZWdyYXRpb25zL2V2ZW50RmlsdGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4uL2RlYnVnLWJ1aWxkLmpzJztcbmltcG9ydCB7IGRlZmluZUludGVncmF0aW9uIH0gZnJvbSAnLi4vaW50ZWdyYXRpb24uanMnO1xuaW1wb3J0IHsgZGVidWcgfSBmcm9tICcuLi91dGlscy9kZWJ1Zy1sb2dnZXIuanMnO1xuaW1wb3J0IHsgZ2V0UG9zc2libGVFdmVudE1lc3NhZ2VzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnRVdGlscy5qcyc7XG5pbXBvcnQgeyBnZXRFdmVudERlc2NyaXB0aW9uIH0gZnJvbSAnLi4vdXRpbHMvbWlzYy5qcyc7XG5pbXBvcnQgeyBzdHJpbmdNYXRjaGVzU29tZVBhdHRlcm4gfSBmcm9tICcuLi91dGlscy9zdHJpbmcuanMnO1xuXG4vLyBcIlNjcmlwdCBlcnJvci5cIiBpcyBoYXJkIGNvZGVkIGludG8gYnJvd3NlcnMgZm9yIGVycm9ycyB0aGF0IGl0IGNhbid0IHJlYWQuXG4vLyB0aGlzIGlzIHRoZSByZXN1bHQgb2YgYSBzY3JpcHQgYmVpbmcgcHVsbGVkIGluIGZyb20gYW4gZXh0ZXJuYWwgZG9tYWluIGFuZCBDT1JTLlxuY29uc3QgREVGQVVMVF9JR05PUkVfRVJST1JTID0gW1xuICAvXlNjcmlwdCBlcnJvclxcLj8kLyxcbiAgL15KYXZhc2NyaXB0IGVycm9yOiBTY3JpcHQgZXJyb3JcXC4/IG9uIGxpbmUgMCQvLFxuICAvXlJlc2l6ZU9ic2VydmVyIGxvb3AgY29tcGxldGVkIHdpdGggdW5kZWxpdmVyZWQgbm90aWZpY2F0aW9ucy4kLywgLy8gVGhlIGJyb3dzZXIgbG9ncyB0aGlzIHdoZW4gYSBSZXNpemVPYnNlcnZlciBoYW5kbGVyIHRha2VzIGEgYml0IGxvbmdlci4gVXN1YWxseSB0aGlzIGlzIG5vdCBhbiBhY3R1YWwgaXNzdWUgdGhvdWdoLiBJdCBpbmRpY2F0ZXMgc2xvd25lc3MuXG4gIC9eQ2Fubm90IHJlZGVmaW5lIHByb3BlcnR5OiBnb29nbGV0YWckLywgLy8gVGhpcyBpcyB0aHJvd24gd2hlbiBnb29nbGUgdGFnIG1hbmFnZXIgaXMgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGFuIGFkIGJsb2NrZXJcbiAgL15DYW4ndCBmaW5kIHZhcmlhYmxlOiBnbW8kLywgLy8gRXJyb3IgZnJvbSBHb29nbGUgU2VhcmNoIEFwcCBodHRwczovL2lzc3VldHJhY2tlci5nb29nbGUuY29tL2lzc3Vlcy8zOTYwNDMzMzFcbiAgL151bmRlZmluZWQgaXMgbm90IGFuIG9iamVjdCBcXChldmFsdWF0aW5nICdhXFwuW0EtWl0nXFwpJC8sIC8vIFJhbmRvbSBlcnJvciB0aGF0IGhhcHBlbnMgYnV0IG5vdCBhY3Rpb25hYmxlIG9yIG5vdGljZWFibGUgdG8gZW5kLXVzZXJzLlxuICAnY2FuXFwndCByZWRlZmluZSBub24tY29uZmlndXJhYmxlIHByb3BlcnR5IFwic29sYW5hXCInLCAvLyBQcm9iYWJseSBhIGJyb3dzZXIgZXh0ZW5zaW9uIG9yIGN1c3RvbSBicm93c2VyIChCcmF2ZSkgdGhyb3dpbmcgdGhpcyBlcnJvclxuICBcInZ2KCkuZ2V0UmVzdHJpY3Rpb25zIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJ3Z2KCkuZ2V0UmVzdHJpY3Rpb25zKDEsYSknLCAndnYoKS5nZXRSZXN0cmljdGlvbnMnIGlzIHVuZGVmaW5lZClcIiwgLy8gRXJyb3IgdGhyb3duIGJ5IEdUTSwgc2VlbWluZ2x5IG5vdCBhZmZlY3RpbmcgZW5kLXVzZXJzXG4gIFwiQ2FuJ3QgZmluZCB2YXJpYWJsZTogX0F1dG9maWxsQ2FsbGJhY2tIYW5kbGVyXCIsIC8vIFVuYWN0aW9uYWJsZSBlcnJvciBpbiBpbnN0YWdyYW0gd2VidmlldyBodHRwczovL2RldmVsb3BlcnMuZmFjZWJvb2suY29tL2NvbW11bml0eS90aHJlYWRzLzMyMDAxMzU0OTc5MTE0MS9cbiAgL15Ob24tRXJyb3IgcHJvbWlzZSByZWplY3Rpb24gY2FwdHVyZWQgd2l0aCB2YWx1ZTogT2JqZWN0IE5vdCBGb3VuZCBNYXRjaGluZyBJZDpcXGQrLCBNZXRob2ROYW1lOnNpbXVsYXRlRXZlbnQsIFBhcmFtQ291bnQ6XFxkKyQvLCAvLyB1bmFjdGlvbmFibGUgZXJyb3IgZnJvbSBDRUZTaGFycCwgYSAuTkVUIGxpYnJhcnkgdGhhdCBlbWJlZHMgY2hyb21pdW0gaW4gLk5FVCBhcHBzXG4gIC9eSmF2YSBleGNlcHRpb24gd2FzIHJhaXNlZCBkdXJpbmcgbWV0aG9kIGludm9jYXRpb24kLywgLy8gZXJyb3IgZnJvbSBGYWNlYm9vayBNb2JpbGUgYnJvd3NlciAoaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvMTUwNjUpXG5dO1xuXG4vKiogT3B0aW9ucyBmb3IgdGhlIEV2ZW50RmlsdGVycyBpbnRlZ3JhdGlvbiAqL1xuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ0V2ZW50RmlsdGVycyc7XG5cbi8qKlxuICogQW4gaW50ZWdyYXRpb24gdGhhdCBmaWx0ZXJzIG91dCBldmVudHMgKGVycm9ycyBhbmQgdHJhbnNhY3Rpb25zKSBiYXNlZCBvbjpcbiAqXG4gKiAtIChFcnJvcnMpIEEgY3VyYXRlZCBsaXN0IG9mIGtub3duIGxvdy12YWx1ZSBvciBpcnJlbGV2YW50IGVycm9ycyAoc2VlIHtAbGluayBERUZBVUxUX0lHTk9SRV9FUlJPUlN9KVxuICogLSAoRXJyb3JzKSBBIGxpc3Qgb2YgZXJyb3IgbWVzc2FnZXMgb3IgdXJscy9maWxlbmFtZXMgcGFzc2VkIGluIHZpYVxuICogICAtIFRvcCBsZXZlbCBTZW50cnkuaW5pdCBvcHRpb25zIChgaWdub3JlRXJyb3JzYCwgYGRlbnlVcmxzYCwgYGFsbG93VXJsc2ApXG4gKiAgIC0gVGhlIHNhbWUgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIGludGVncmF0aW9uIGRpcmVjdGx5IHZpYSBAcGFyYW0gb3B0aW9uc1xuICogLSAoVHJhbnNhY3Rpb25zL1NwYW5zKSBBIGxpc3Qgb2Ygcm9vdCBzcGFuICh0cmFuc2FjdGlvbikgbmFtZXMgcGFzc2VkIGluIHZpYVxuICogICAtIFRvcCBsZXZlbCBTZW50cnkuaW5pdCBvcHRpb24gKGBpZ25vcmVUcmFuc2FjdGlvbnNgKVxuICogICAtIFRoZSBzYW1lIG9wdGlvbiBwYXNzZWQgdG8gdGhlIGludGVncmF0aW9uIGRpcmVjdGx5IHZpYSBAcGFyYW0gb3B0aW9uc1xuICpcbiAqIEV2ZW50cyBmaWx0ZXJlZCBieSB0aGlzIGludGVncmF0aW9uIHdpbGwgbm90IGJlIHNlbnQgdG8gU2VudHJ5LlxuICovXG5jb25zdCBldmVudEZpbHRlcnNJbnRlZ3JhdGlvbiA9IGRlZmluZUludGVncmF0aW9uKChvcHRpb25zID0ge30pID0+IHtcbiAgbGV0IG1lcmdlZE9wdGlvbnM7XG4gIHJldHVybiB7XG4gICAgbmFtZTogSU5URUdSQVRJT05fTkFNRSxcbiAgICBzZXR1cChjbGllbnQpIHtcbiAgICAgIGNvbnN0IGNsaWVudE9wdGlvbnMgPSBjbGllbnQuZ2V0T3B0aW9ucygpO1xuICAgICAgbWVyZ2VkT3B0aW9ucyA9IF9tZXJnZU9wdGlvbnMob3B0aW9ucywgY2xpZW50T3B0aW9ucyk7XG4gICAgfSxcbiAgICBwcm9jZXNzRXZlbnQoZXZlbnQsIF9oaW50LCBjbGllbnQpIHtcbiAgICAgIGlmICghbWVyZ2VkT3B0aW9ucykge1xuICAgICAgICBjb25zdCBjbGllbnRPcHRpb25zID0gY2xpZW50LmdldE9wdGlvbnMoKTtcbiAgICAgICAgbWVyZ2VkT3B0aW9ucyA9IF9tZXJnZU9wdGlvbnMob3B0aW9ucywgY2xpZW50T3B0aW9ucyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gX3Nob3VsZERyb3BFdmVudChldmVudCwgbWVyZ2VkT3B0aW9ucykgPyBudWxsIDogZXZlbnQ7XG4gICAgfSxcbiAgfTtcbn0pO1xuXG4vKipcbiAqIEFuIGludGVncmF0aW9uIHRoYXQgZmlsdGVycyBvdXQgZXZlbnRzIChlcnJvcnMgYW5kIHRyYW5zYWN0aW9ucykgYmFzZWQgb246XG4gKlxuICogLSAoRXJyb3JzKSBBIGN1cmF0ZWQgbGlzdCBvZiBrbm93biBsb3ctdmFsdWUgb3IgaXJyZWxldmFudCBlcnJvcnMgKHNlZSB7QGxpbmsgREVGQVVMVF9JR05PUkVfRVJST1JTfSlcbiAqIC0gKEVycm9ycykgQSBsaXN0IG9mIGVycm9yIG1lc3NhZ2VzIG9yIHVybHMvZmlsZW5hbWVzIHBhc3NlZCBpbiB2aWFcbiAqICAgLSBUb3AgbGV2ZWwgU2VudHJ5LmluaXQgb3B0aW9ucyAoYGlnbm9yZUVycm9yc2AsIGBkZW55VXJsc2AsIGBhbGxvd1VybHNgKVxuICogICAtIFRoZSBzYW1lIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBpbnRlZ3JhdGlvbiBkaXJlY3RseSB2aWEgQHBhcmFtIG9wdGlvbnNcbiAqIC0gKFRyYW5zYWN0aW9ucy9TcGFucykgQSBsaXN0IG9mIHJvb3Qgc3BhbiAodHJhbnNhY3Rpb24pIG5hbWVzIHBhc3NlZCBpbiB2aWFcbiAqICAgLSBUb3AgbGV2ZWwgU2VudHJ5LmluaXQgb3B0aW9uIChgaWdub3JlVHJhbnNhY3Rpb25zYClcbiAqICAgLSBUaGUgc2FtZSBvcHRpb24gcGFzc2VkIHRvIHRoZSBpbnRlZ3JhdGlvbiBkaXJlY3RseSB2aWEgQHBhcmFtIG9wdGlvbnNcbiAqXG4gKiBFdmVudHMgZmlsdGVyZWQgYnkgdGhpcyBpbnRlZ3JhdGlvbiB3aWxsIG5vdCBiZSBzZW50IHRvIFNlbnRyeS5cbiAqXG4gKiBAZGVwcmVjYXRlZCB0aGlzIGludGVncmF0aW9uIHdhcyByZW5hbWVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgdmVyc2lvbi5cbiAqIFVzZSBgZXZlbnRGaWx0ZXJzSW50ZWdyYXRpb25gIGluc3RlYWQuXG4gKi9cbmNvbnN0IGluYm91bmRGaWx0ZXJzSW50ZWdyYXRpb24gPSBkZWZpbmVJbnRlZ3JhdGlvbigoKG9wdGlvbnMgPSB7fSkgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLmV2ZW50RmlsdGVyc0ludGVncmF0aW9uKG9wdGlvbnMpLFxuICAgIG5hbWU6ICdJbmJvdW5kRmlsdGVycycsXG4gIH07XG59KSApO1xuXG5mdW5jdGlvbiBfbWVyZ2VPcHRpb25zKFxuICBpbnRlcm5hbE9wdGlvbnMgPSB7fSxcbiAgY2xpZW50T3B0aW9ucyA9IHt9LFxuKSB7XG4gIHJldHVybiB7XG4gICAgYWxsb3dVcmxzOiBbLi4uKGludGVybmFsT3B0aW9ucy5hbGxvd1VybHMgfHwgW10pLCAuLi4oY2xpZW50T3B0aW9ucy5hbGxvd1VybHMgfHwgW10pXSxcbiAgICBkZW55VXJsczogWy4uLihpbnRlcm5hbE9wdGlvbnMuZGVueVVybHMgfHwgW10pLCAuLi4oY2xpZW50T3B0aW9ucy5kZW55VXJscyB8fCBbXSldLFxuICAgIGlnbm9yZUVycm9yczogW1xuICAgICAgLi4uKGludGVybmFsT3B0aW9ucy5pZ25vcmVFcnJvcnMgfHwgW10pLFxuICAgICAgLi4uKGNsaWVudE9wdGlvbnMuaWdub3JlRXJyb3JzIHx8IFtdKSxcbiAgICAgIC4uLihpbnRlcm5hbE9wdGlvbnMuZGlzYWJsZUVycm9yRGVmYXVsdHMgPyBbXSA6IERFRkFVTFRfSUdOT1JFX0VSUk9SUyksXG4gICAgXSxcbiAgICBpZ25vcmVUcmFuc2FjdGlvbnM6IFsuLi4oaW50ZXJuYWxPcHRpb25zLmlnbm9yZVRyYW5zYWN0aW9ucyB8fCBbXSksIC4uLihjbGllbnRPcHRpb25zLmlnbm9yZVRyYW5zYWN0aW9ucyB8fCBbXSldLFxuICB9O1xufVxuXG5mdW5jdGlvbiBfc2hvdWxkRHJvcEV2ZW50KGV2ZW50LCBvcHRpb25zKSB7XG4gIGlmICghZXZlbnQudHlwZSkge1xuICAgIC8vIEZpbHRlciBlcnJvcnNcbiAgICBpZiAoX2lzSWdub3JlZEVycm9yKGV2ZW50LCBvcHRpb25zLmlnbm9yZUVycm9ycykpIHtcbiAgICAgIERFQlVHX0JVSUxEICYmXG4gICAgICAgIGRlYnVnLndhcm4oXG4gICAgICAgICAgYEV2ZW50IGRyb3BwZWQgZHVlIHRvIGJlaW5nIG1hdGNoZWQgYnkgXFxgaWdub3JlRXJyb3JzXFxgIG9wdGlvbi5cXG5FdmVudDogJHtnZXRFdmVudERlc2NyaXB0aW9uKGV2ZW50KX1gLFxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChfaXNVc2VsZXNzRXJyb3IoZXZlbnQpKSB7XG4gICAgICBERUJVR19CVUlMRCAmJlxuICAgICAgICBkZWJ1Zy53YXJuKFxuICAgICAgICAgIGBFdmVudCBkcm9wcGVkIGR1ZSB0byBub3QgaGF2aW5nIGFuIGVycm9yIG1lc3NhZ2UsIGVycm9yIHR5cGUgb3Igc3RhY2t0cmFjZS5cXG5FdmVudDogJHtnZXRFdmVudERlc2NyaXB0aW9uKFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgKX1gLFxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChfaXNEZW5pZWRVcmwoZXZlbnQsIG9wdGlvbnMuZGVueVVybHMpKSB7XG4gICAgICBERUJVR19CVUlMRCAmJlxuICAgICAgICBkZWJ1Zy53YXJuKFxuICAgICAgICAgIGBFdmVudCBkcm9wcGVkIGR1ZSB0byBiZWluZyBtYXRjaGVkIGJ5IFxcYGRlbnlVcmxzXFxgIG9wdGlvbi5cXG5FdmVudDogJHtnZXRFdmVudERlc2NyaXB0aW9uKFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgKX0uXFxuVXJsOiAke19nZXRFdmVudEZpbHRlclVybChldmVudCl9YCxcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIV9pc0FsbG93ZWRVcmwoZXZlbnQsIG9wdGlvbnMuYWxsb3dVcmxzKSkge1xuICAgICAgREVCVUdfQlVJTEQgJiZcbiAgICAgICAgZGVidWcud2FybihcbiAgICAgICAgICBgRXZlbnQgZHJvcHBlZCBkdWUgdG8gbm90IGJlaW5nIG1hdGNoZWQgYnkgXFxgYWxsb3dVcmxzXFxgIG9wdGlvbi5cXG5FdmVudDogJHtnZXRFdmVudERlc2NyaXB0aW9uKFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgKX0uXFxuVXJsOiAke19nZXRFdmVudEZpbHRlclVybChldmVudCl9YCxcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAndHJhbnNhY3Rpb24nKSB7XG4gICAgLy8gRmlsdGVyIHRyYW5zYWN0aW9uc1xuXG4gICAgaWYgKF9pc0lnbm9yZWRUcmFuc2FjdGlvbihldmVudCwgb3B0aW9ucy5pZ25vcmVUcmFuc2FjdGlvbnMpKSB7XG4gICAgICBERUJVR19CVUlMRCAmJlxuICAgICAgICBkZWJ1Zy53YXJuKFxuICAgICAgICAgIGBFdmVudCBkcm9wcGVkIGR1ZSB0byBiZWluZyBtYXRjaGVkIGJ5IFxcYGlnbm9yZVRyYW5zYWN0aW9uc1xcYCBvcHRpb24uXFxuRXZlbnQ6ICR7Z2V0RXZlbnREZXNjcmlwdGlvbihldmVudCl9YCxcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIF9pc0lnbm9yZWRFcnJvcihldmVudCwgaWdub3JlRXJyb3JzKSB7XG4gIGlmICghaWdub3JlRXJyb3JzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZ2V0UG9zc2libGVFdmVudE1lc3NhZ2VzKGV2ZW50KS5zb21lKG1lc3NhZ2UgPT4gc3RyaW5nTWF0Y2hlc1NvbWVQYXR0ZXJuKG1lc3NhZ2UsIGlnbm9yZUVycm9ycykpO1xufVxuXG5mdW5jdGlvbiBfaXNJZ25vcmVkVHJhbnNhY3Rpb24oZXZlbnQsIGlnbm9yZVRyYW5zYWN0aW9ucykge1xuICBpZiAoIWlnbm9yZVRyYW5zYWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgbmFtZSA9IGV2ZW50LnRyYW5zYWN0aW9uO1xuICByZXR1cm4gbmFtZSA/IHN0cmluZ01hdGNoZXNTb21lUGF0dGVybihuYW1lLCBpZ25vcmVUcmFuc2FjdGlvbnMpIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIF9pc0RlbmllZFVybChldmVudCwgZGVueVVybHMpIHtcbiAgaWYgKCFkZW55VXJscz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHVybCA9IF9nZXRFdmVudEZpbHRlclVybChldmVudCk7XG4gIHJldHVybiAhdXJsID8gZmFsc2UgOiBzdHJpbmdNYXRjaGVzU29tZVBhdHRlcm4odXJsLCBkZW55VXJscyk7XG59XG5cbmZ1bmN0aW9uIF9pc0FsbG93ZWRVcmwoZXZlbnQsIGFsbG93VXJscykge1xuICBpZiAoIWFsbG93VXJscz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgdXJsID0gX2dldEV2ZW50RmlsdGVyVXJsKGV2ZW50KTtcbiAgcmV0dXJuICF1cmwgPyB0cnVlIDogc3RyaW5nTWF0Y2hlc1NvbWVQYXR0ZXJuKHVybCwgYWxsb3dVcmxzKTtcbn1cblxuZnVuY3Rpb24gX2dldExhc3RWYWxpZFVybChmcmFtZXMgPSBbXSkge1xuICBmb3IgKGxldCBpID0gZnJhbWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgZnJhbWUgPSBmcmFtZXNbaV07XG5cbiAgICBpZiAoZnJhbWUgJiYgZnJhbWUuZmlsZW5hbWUgIT09ICc8YW5vbnltb3VzPicgJiYgZnJhbWUuZmlsZW5hbWUgIT09ICdbbmF0aXZlIGNvZGVdJykge1xuICAgICAgcmV0dXJuIGZyYW1lLmZpbGVuYW1lIHx8IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIF9nZXRFdmVudEZpbHRlclVybChldmVudCkge1xuICB0cnkge1xuICAgIC8vIElmIHRoZXJlIGFyZSBsaW5rZWQgZXhjZXB0aW9ucyBvciBleGNlcHRpb24gYWdncmVnYXRlcyB3ZSBvbmx5IHdhbnQgdG8gbWF0Y2ggYWdhaW5zdCB0aGUgdG9wIGZyYW1lIG9mIHRoZSBcInJvb3RcIiAodGhlIG1haW4gZXhjZXB0aW9uKVxuICAgIC8vIFRoZSByb290IGFsd2F5cyBjb21lcyBsYXN0IGluIGxpbmtlZCBleGNlcHRpb25zXG4gICAgY29uc3Qgcm9vdEV4Y2VwdGlvbiA9IFsuLi4oZXZlbnQuZXhjZXB0aW9uPy52YWx1ZXMgPz8gW10pXVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLmZpbmQodmFsdWUgPT4gdmFsdWUubWVjaGFuaXNtPy5wYXJlbnRfaWQgPT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5zdGFja3RyYWNlPy5mcmFtZXM/Lmxlbmd0aCk7XG4gICAgY29uc3QgZnJhbWVzID0gcm9vdEV4Y2VwdGlvbj8uc3RhY2t0cmFjZT8uZnJhbWVzO1xuICAgIHJldHVybiBmcmFtZXMgPyBfZ2V0TGFzdFZhbGlkVXJsKGZyYW1lcykgOiBudWxsO1xuICB9IGNhdGNoIHtcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5lcnJvcihgQ2Fubm90IGV4dHJhY3QgdXJsIGZvciBldmVudCAke2dldEV2ZW50RGVzY3JpcHRpb24oZXZlbnQpfWApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9pc1VzZWxlc3NFcnJvcihldmVudCkge1xuICAvLyBXZSBvbmx5IHdhbnQgdG8gY29uc2lkZXIgZXZlbnRzIGZvciBkcm9wcGluZyB0aGF0IGFjdHVhbGx5IGhhdmUgcmVjb3JkZWQgZXhjZXB0aW9uIHZhbHVlcy5cbiAgaWYgKCFldmVudC5leGNlcHRpb24/LnZhbHVlcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICAvLyBObyB0b3AtbGV2ZWwgbWVzc2FnZVxuICAgICFldmVudC5tZXNzYWdlICYmXG4gICAgLy8gVGhlcmUgYXJlIG5vIGV4Y2VwdGlvbiB2YWx1ZXMgdGhhdCBoYXZlIGEgc3RhY2t0cmFjZSwgYSBub24tZ2VuZXJpYy1FcnJvciB0eXBlIG9yIHZhbHVlXG4gICAgIWV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMuc29tZSh2YWx1ZSA9PiB2YWx1ZS5zdGFja3RyYWNlIHx8ICh2YWx1ZS50eXBlICYmIHZhbHVlLnR5cGUgIT09ICdFcnJvcicpIHx8IHZhbHVlLnZhbHVlKVxuICApO1xufVxuXG5leHBvcnQgeyBldmVudEZpbHRlcnNJbnRlZ3JhdGlvbiwgaW5ib3VuZEZpbHRlcnNJbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXZlbnRGaWx0ZXJzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/eventFilters.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/extraerrordata.js":
/*!*******************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/extraerrordata.js ***!
  \*******************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   extraErrorDataIntegration: () => (/* binding */ extraErrorDataIntegration)\n/* harmony export */ });\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _integration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_is_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n/* harmony import */ var _utils_normalize_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/normalize.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/normalize.js\");\n/* harmony import */ var _utils_object_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/object.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js\");\n/* harmony import */ var _utils_string_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/string.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/string.js\");\n\n\n\n\n\n\n\n\nconst INTEGRATION_NAME = 'ExtraErrorData';\n\n/**\n * Extract additional data for from original exceptions.\n */\nconst _extraErrorDataIntegration = ((options = {}) => {\n  const { depth = 3, captureErrorCause = true } = options;\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(event, hint, client) {\n      const { maxValueLength = 250 } = client.getOptions();\n      return _enhanceEventWithErrorData(event, hint, depth, captureErrorCause, maxValueLength);\n    },\n  };\n}) ;\n\nconst extraErrorDataIntegration = (0,_integration_js__WEBPACK_IMPORTED_MODULE_1__.defineIntegration)(_extraErrorDataIntegration);\n\nfunction _enhanceEventWithErrorData(\n  event,\n  hint = {},\n  depth,\n  captureErrorCause,\n  maxValueLength,\n) {\n  if (!hint.originalException || !(0,_utils_is_js__WEBPACK_IMPORTED_MODULE_3__.isError)(hint.originalException)) {\n    return event;\n  }\n  const exceptionName = (hint.originalException ).name || hint.originalException.constructor.name;\n\n  const errorData = _extractErrorData(hint.originalException , captureErrorCause, maxValueLength);\n\n  if (errorData) {\n    const contexts = {\n      ...event.contexts,\n    };\n\n    const normalizedErrorData = (0,_utils_normalize_js__WEBPACK_IMPORTED_MODULE_4__.normalize)(errorData, depth);\n\n    if ((0,_utils_is_js__WEBPACK_IMPORTED_MODULE_3__.isPlainObject)(normalizedErrorData)) {\n      // We mark the error data as \"already normalized\" here, because we don't want other normalization procedures to\n      // potentially truncate the data we just already normalized, with a certain depth setting.\n      (0,_utils_object_js__WEBPACK_IMPORTED_MODULE_5__.addNonEnumerableProperty)(normalizedErrorData, '__sentry_skip_normalization__', true);\n      contexts[exceptionName] = normalizedErrorData;\n    }\n\n    return {\n      ...event,\n      contexts,\n    };\n  }\n\n  return event;\n}\n\n/**\n * Extract extra information from the Error object\n */\nfunction _extractErrorData(\n  error,\n  captureErrorCause,\n  maxValueLength,\n) {\n  // We are trying to enhance already existing event, so no harm done if it won't succeed\n  try {\n    const nativeKeys = [\n      'name',\n      'message',\n      'stack',\n      'line',\n      'column',\n      'fileName',\n      'lineNumber',\n      'columnNumber',\n      'toJSON',\n    ];\n\n    const extraErrorInfo = {};\n\n    // We want only enumerable properties, thus `getOwnPropertyNames` is redundant here, as we filter keys anyway.\n    for (const key of Object.keys(error)) {\n      if (nativeKeys.indexOf(key) !== -1) {\n        continue;\n      }\n      const value = error[key];\n      extraErrorInfo[key] = (0,_utils_is_js__WEBPACK_IMPORTED_MODULE_3__.isError)(value) || typeof value === 'string' ? (0,_utils_string_js__WEBPACK_IMPORTED_MODULE_6__.truncate)(`${value}`, maxValueLength) : value;\n    }\n\n    // Error.cause is a standard property that is non enumerable, we therefore need to access it separately.\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/cause\n    if (captureErrorCause && error.cause !== undefined) {\n      extraErrorInfo.cause = (0,_utils_is_js__WEBPACK_IMPORTED_MODULE_3__.isError)(error.cause) ? error.cause.toString() : error.cause;\n    }\n\n    // Check if someone attached `toJSON` method to grab even more properties (eg. axios is doing that)\n    if (typeof error.toJSON === 'function') {\n      const serializedError = error.toJSON() ;\n\n      for (const key of Object.keys(serializedError)) {\n        const value = serializedError[key];\n        extraErrorInfo[key] = (0,_utils_is_js__WEBPACK_IMPORTED_MODULE_3__.isError)(value) ? value.toString() : value;\n      }\n    }\n\n    return extraErrorInfo;\n  } catch (oO) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.error('Unable to extract extra data from the Error object:', oO);\n  }\n\n  return null;\n}\n\n\n//# sourceMappingURL=extraerrordata.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9leHRyYWVycm9yZGF0YS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFnRDtBQUNNO0FBQ0w7QUFDTztBQUNOO0FBQ1k7QUFDaEI7O0FBRTlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRCxVQUFVLHNDQUFzQztBQUNoRDtBQUNBO0FBQ0E7QUFDQSxjQUFjLHVCQUF1QjtBQUNyQztBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQsa0NBQWtDLGtFQUFpQjs7QUFFbkQ7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxxREFBTztBQUN6QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0NBQWdDLDhEQUFTOztBQUV6QyxRQUFRLDJEQUFhO0FBQ3JCO0FBQ0E7QUFDQSxNQUFNLDBFQUF3QjtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHFEQUFPLHVDQUF1QywwREFBUSxJQUFJLE1BQU07QUFDNUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLHFEQUFPO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLHFEQUFPO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0osSUFBSSx3REFBVyxJQUFJLHlEQUFLO0FBQ3hCOztBQUVBO0FBQ0E7O0FBRXFDO0FBQ3JDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vaW50ZWdyYXRpb25zL2V4dHJhZXJyb3JkYXRhLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERFQlVHX0JVSUxEIH0gZnJvbSAnLi4vZGVidWctYnVpbGQuanMnO1xuaW1wb3J0IHsgZGVmaW5lSW50ZWdyYXRpb24gfSBmcm9tICcuLi9pbnRlZ3JhdGlvbi5qcyc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4uL3V0aWxzL2RlYnVnLWxvZ2dlci5qcyc7XG5pbXBvcnQgeyBpc0Vycm9yLCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnLi4vdXRpbHMvaXMuanMnO1xuaW1wb3J0IHsgbm9ybWFsaXplIH0gZnJvbSAnLi4vdXRpbHMvbm9ybWFsaXplLmpzJztcbmltcG9ydCB7IGFkZE5vbkVudW1lcmFibGVQcm9wZXJ0eSB9IGZyb20gJy4uL3V0aWxzL29iamVjdC5qcyc7XG5pbXBvcnQgeyB0cnVuY2F0ZSB9IGZyb20gJy4uL3V0aWxzL3N0cmluZy5qcyc7XG5cbmNvbnN0IElOVEVHUkFUSU9OX05BTUUgPSAnRXh0cmFFcnJvckRhdGEnO1xuXG4vKipcbiAqIEV4dHJhY3QgYWRkaXRpb25hbCBkYXRhIGZvciBmcm9tIG9yaWdpbmFsIGV4Y2VwdGlvbnMuXG4gKi9cbmNvbnN0IF9leHRyYUVycm9yRGF0YUludGVncmF0aW9uID0gKChvcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgeyBkZXB0aCA9IDMsIGNhcHR1cmVFcnJvckNhdXNlID0gdHJ1ZSB9ID0gb3B0aW9ucztcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBJTlRFR1JBVElPTl9OQU1FLFxuICAgIHByb2Nlc3NFdmVudChldmVudCwgaGludCwgY2xpZW50KSB7XG4gICAgICBjb25zdCB7IG1heFZhbHVlTGVuZ3RoID0gMjUwIH0gPSBjbGllbnQuZ2V0T3B0aW9ucygpO1xuICAgICAgcmV0dXJuIF9lbmhhbmNlRXZlbnRXaXRoRXJyb3JEYXRhKGV2ZW50LCBoaW50LCBkZXB0aCwgY2FwdHVyZUVycm9yQ2F1c2UsIG1heFZhbHVlTGVuZ3RoKTtcbiAgICB9LFxuICB9O1xufSkgO1xuXG5jb25zdCBleHRyYUVycm9yRGF0YUludGVncmF0aW9uID0gZGVmaW5lSW50ZWdyYXRpb24oX2V4dHJhRXJyb3JEYXRhSW50ZWdyYXRpb24pO1xuXG5mdW5jdGlvbiBfZW5oYW5jZUV2ZW50V2l0aEVycm9yRGF0YShcbiAgZXZlbnQsXG4gIGhpbnQgPSB7fSxcbiAgZGVwdGgsXG4gIGNhcHR1cmVFcnJvckNhdXNlLFxuICBtYXhWYWx1ZUxlbmd0aCxcbikge1xuICBpZiAoIWhpbnQub3JpZ2luYWxFeGNlcHRpb24gfHwgIWlzRXJyb3IoaGludC5vcmlnaW5hbEV4Y2VwdGlvbikpIHtcbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cbiAgY29uc3QgZXhjZXB0aW9uTmFtZSA9IChoaW50Lm9yaWdpbmFsRXhjZXB0aW9uICkubmFtZSB8fCBoaW50Lm9yaWdpbmFsRXhjZXB0aW9uLmNvbnN0cnVjdG9yLm5hbWU7XG5cbiAgY29uc3QgZXJyb3JEYXRhID0gX2V4dHJhY3RFcnJvckRhdGEoaGludC5vcmlnaW5hbEV4Y2VwdGlvbiAsIGNhcHR1cmVFcnJvckNhdXNlLCBtYXhWYWx1ZUxlbmd0aCk7XG5cbiAgaWYgKGVycm9yRGF0YSkge1xuICAgIGNvbnN0IGNvbnRleHRzID0ge1xuICAgICAgLi4uZXZlbnQuY29udGV4dHMsXG4gICAgfTtcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRFcnJvckRhdGEgPSBub3JtYWxpemUoZXJyb3JEYXRhLCBkZXB0aCk7XG5cbiAgICBpZiAoaXNQbGFpbk9iamVjdChub3JtYWxpemVkRXJyb3JEYXRhKSkge1xuICAgICAgLy8gV2UgbWFyayB0aGUgZXJyb3IgZGF0YSBhcyBcImFscmVhZHkgbm9ybWFsaXplZFwiIGhlcmUsIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBvdGhlciBub3JtYWxpemF0aW9uIHByb2NlZHVyZXMgdG9cbiAgICAgIC8vIHBvdGVudGlhbGx5IHRydW5jYXRlIHRoZSBkYXRhIHdlIGp1c3QgYWxyZWFkeSBub3JtYWxpemVkLCB3aXRoIGEgY2VydGFpbiBkZXB0aCBzZXR0aW5nLlxuICAgICAgYWRkTm9uRW51bWVyYWJsZVByb3BlcnR5KG5vcm1hbGl6ZWRFcnJvckRhdGEsICdfX3NlbnRyeV9za2lwX25vcm1hbGl6YXRpb25fXycsIHRydWUpO1xuICAgICAgY29udGV4dHNbZXhjZXB0aW9uTmFtZV0gPSBub3JtYWxpemVkRXJyb3JEYXRhO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIGNvbnRleHRzLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogRXh0cmFjdCBleHRyYSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBFcnJvciBvYmplY3RcbiAqL1xuZnVuY3Rpb24gX2V4dHJhY3RFcnJvckRhdGEoXG4gIGVycm9yLFxuICBjYXB0dXJlRXJyb3JDYXVzZSxcbiAgbWF4VmFsdWVMZW5ndGgsXG4pIHtcbiAgLy8gV2UgYXJlIHRyeWluZyB0byBlbmhhbmNlIGFscmVhZHkgZXhpc3RpbmcgZXZlbnQsIHNvIG5vIGhhcm0gZG9uZSBpZiBpdCB3b24ndCBzdWNjZWVkXG4gIHRyeSB7XG4gICAgY29uc3QgbmF0aXZlS2V5cyA9IFtcbiAgICAgICduYW1lJyxcbiAgICAgICdtZXNzYWdlJyxcbiAgICAgICdzdGFjaycsXG4gICAgICAnbGluZScsXG4gICAgICAnY29sdW1uJyxcbiAgICAgICdmaWxlTmFtZScsXG4gICAgICAnbGluZU51bWJlcicsXG4gICAgICAnY29sdW1uTnVtYmVyJyxcbiAgICAgICd0b0pTT04nLFxuICAgIF07XG5cbiAgICBjb25zdCBleHRyYUVycm9ySW5mbyA9IHt9O1xuXG4gICAgLy8gV2Ugd2FudCBvbmx5IGVudW1lcmFibGUgcHJvcGVydGllcywgdGh1cyBgZ2V0T3duUHJvcGVydHlOYW1lc2AgaXMgcmVkdW5kYW50IGhlcmUsIGFzIHdlIGZpbHRlciBrZXlzIGFueXdheS5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhlcnJvcikpIHtcbiAgICAgIGlmIChuYXRpdmVLZXlzLmluZGV4T2Yoa2V5KSAhPT0gLTEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZSA9IGVycm9yW2tleV07XG4gICAgICBleHRyYUVycm9ySW5mb1trZXldID0gaXNFcnJvcih2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHRydW5jYXRlKGAke3ZhbHVlfWAsIG1heFZhbHVlTGVuZ3RoKSA6IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIEVycm9yLmNhdXNlIGlzIGEgc3RhbmRhcmQgcHJvcGVydHkgdGhhdCBpcyBub24gZW51bWVyYWJsZSwgd2UgdGhlcmVmb3JlIG5lZWQgdG8gYWNjZXNzIGl0IHNlcGFyYXRlbHkuXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IvY2F1c2VcbiAgICBpZiAoY2FwdHVyZUVycm9yQ2F1c2UgJiYgZXJyb3IuY2F1c2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXh0cmFFcnJvckluZm8uY2F1c2UgPSBpc0Vycm9yKGVycm9yLmNhdXNlKSA/IGVycm9yLmNhdXNlLnRvU3RyaW5nKCkgOiBlcnJvci5jYXVzZTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBzb21lb25lIGF0dGFjaGVkIGB0b0pTT05gIG1ldGhvZCB0byBncmFiIGV2ZW4gbW9yZSBwcm9wZXJ0aWVzIChlZy4gYXhpb3MgaXMgZG9pbmcgdGhhdClcbiAgICBpZiAodHlwZW9mIGVycm9yLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3Qgc2VyaWFsaXplZEVycm9yID0gZXJyb3IudG9KU09OKCkgO1xuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzZXJpYWxpemVkRXJyb3IpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gc2VyaWFsaXplZEVycm9yW2tleV07XG4gICAgICAgIGV4dHJhRXJyb3JJbmZvW2tleV0gPSBpc0Vycm9yKHZhbHVlKSA/IHZhbHVlLnRvU3RyaW5nKCkgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXh0cmFFcnJvckluZm87XG4gIH0gY2F0Y2ggKG9PKSB7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcuZXJyb3IoJ1VuYWJsZSB0byBleHRyYWN0IGV4dHJhIGRhdGEgZnJvbSB0aGUgRXJyb3Igb2JqZWN0OicsIG9PKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgeyBleHRyYUVycm9yRGF0YUludGVncmF0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leHRyYWVycm9yZGF0YS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/extraerrordata.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/featureFlags/featureFlagsIntegration.js":
/*!*****************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/featureFlags/featureFlagsIntegration.js ***!
  \*****************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   featureFlagsIntegration: () => (/* binding */ featureFlagsIntegration)\n/* harmony export */ });\n/* harmony import */ var _integration_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js\");\n/* harmony import */ var _utils_featureFlags_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/featureFlags.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/featureFlags.js\");\n\n\n\n/**\n * Sentry integration for buffering feature flag evaluations manually with an API, and\n * capturing them on error events and spans.\n *\n * See the [feature flag documentation](https://develop.sentry.dev/sdk/expected-features/#feature-flags) for more information.\n *\n * @example\n * ```\n * import * as Sentry from '@sentry/browser';\n * import { type FeatureFlagsIntegration } from '@sentry/browser';\n *\n * // Setup\n * Sentry.init(..., integrations: [Sentry.featureFlagsIntegration()])\n *\n * // Verify\n * const flagsIntegration = Sentry.getClient()?.getIntegrationByName<FeatureFlagsIntegration>('FeatureFlags');\n * if (flagsIntegration) {\n *   flagsIntegration.addFeatureFlag('my-flag', true);\n * } else {\n *   // check your setup\n * }\n * Sentry.captureException(Exception('broke')); // 'my-flag' should be captured to this Sentry event.\n * ```\n */\nconst featureFlagsIntegration = (0,_integration_js__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(() => {\n  return {\n    name: 'FeatureFlags',\n\n    processEvent(event, _hint, _client) {\n      return (0,_utils_featureFlags_js__WEBPACK_IMPORTED_MODULE_1__._INTERNAL_copyFlagsFromScopeToEvent)(event);\n    },\n\n    addFeatureFlag(name, value) {\n      (0,_utils_featureFlags_js__WEBPACK_IMPORTED_MODULE_1__._INTERNAL_insertFlagToScope)(name, value);\n      (0,_utils_featureFlags_js__WEBPACK_IMPORTED_MODULE_1__._INTERNAL_addFeatureFlagToActiveSpan)(name, value);\n    },\n  };\n}) ;\n\n\n//# sourceMappingURL=featureFlagsIntegration.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9mZWF0dXJlRmxhZ3MvZmVhdHVyZUZsYWdzSW50ZWdyYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXlEO0FBQzRGOztBQUVySjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLCtCQUErQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBLGdDQUFnQyxrRUFBaUI7QUFDakQ7QUFDQTs7QUFFQTtBQUNBLGFBQWEsMkZBQW1DO0FBQ2hELEtBQUs7O0FBRUw7QUFDQSxNQUFNLG1GQUEyQjtBQUNqQyxNQUFNLDRGQUFvQztBQUMxQyxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVrQztBQUNuQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9mZWF0dXJlRmxhZ3MvZmVhdHVyZUZsYWdzSW50ZWdyYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lSW50ZWdyYXRpb24gfSBmcm9tICcuLi8uLi9pbnRlZ3JhdGlvbi5qcyc7XG5pbXBvcnQgeyBfSU5URVJOQUxfaW5zZXJ0RmxhZ1RvU2NvcGUsIF9JTlRFUk5BTF9hZGRGZWF0dXJlRmxhZ1RvQWN0aXZlU3BhbiwgX0lOVEVSTkFMX2NvcHlGbGFnc0Zyb21TY29wZVRvRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9mZWF0dXJlRmxhZ3MuanMnO1xuXG4vKipcbiAqIFNlbnRyeSBpbnRlZ3JhdGlvbiBmb3IgYnVmZmVyaW5nIGZlYXR1cmUgZmxhZyBldmFsdWF0aW9ucyBtYW51YWxseSB3aXRoIGFuIEFQSSwgYW5kXG4gKiBjYXB0dXJpbmcgdGhlbSBvbiBlcnJvciBldmVudHMgYW5kIHNwYW5zLlxuICpcbiAqIFNlZSB0aGUgW2ZlYXR1cmUgZmxhZyBkb2N1bWVudGF0aW9uXShodHRwczovL2RldmVsb3Auc2VudHJ5LmRldi9zZGsvZXhwZWN0ZWQtZmVhdHVyZXMvI2ZlYXR1cmUtZmxhZ3MpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBcbiAqIGltcG9ydCAqIGFzIFNlbnRyeSBmcm9tICdAc2VudHJ5L2Jyb3dzZXInO1xuICogaW1wb3J0IHsgdHlwZSBGZWF0dXJlRmxhZ3NJbnRlZ3JhdGlvbiB9IGZyb20gJ0BzZW50cnkvYnJvd3Nlcic7XG4gKlxuICogLy8gU2V0dXBcbiAqIFNlbnRyeS5pbml0KC4uLiwgaW50ZWdyYXRpb25zOiBbU2VudHJ5LmZlYXR1cmVGbGFnc0ludGVncmF0aW9uKCldKVxuICpcbiAqIC8vIFZlcmlmeVxuICogY29uc3QgZmxhZ3NJbnRlZ3JhdGlvbiA9IFNlbnRyeS5nZXRDbGllbnQoKT8uZ2V0SW50ZWdyYXRpb25CeU5hbWU8RmVhdHVyZUZsYWdzSW50ZWdyYXRpb24+KCdGZWF0dXJlRmxhZ3MnKTtcbiAqIGlmIChmbGFnc0ludGVncmF0aW9uKSB7XG4gKiAgIGZsYWdzSW50ZWdyYXRpb24uYWRkRmVhdHVyZUZsYWcoJ215LWZsYWcnLCB0cnVlKTtcbiAqIH0gZWxzZSB7XG4gKiAgIC8vIGNoZWNrIHlvdXIgc2V0dXBcbiAqIH1cbiAqIFNlbnRyeS5jYXB0dXJlRXhjZXB0aW9uKEV4Y2VwdGlvbignYnJva2UnKSk7IC8vICdteS1mbGFnJyBzaG91bGQgYmUgY2FwdHVyZWQgdG8gdGhpcyBTZW50cnkgZXZlbnQuXG4gKiBgYGBcbiAqL1xuY29uc3QgZmVhdHVyZUZsYWdzSW50ZWdyYXRpb24gPSBkZWZpbmVJbnRlZ3JhdGlvbigoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ0ZlYXR1cmVGbGFncycsXG5cbiAgICBwcm9jZXNzRXZlbnQoZXZlbnQsIF9oaW50LCBfY2xpZW50KSB7XG4gICAgICByZXR1cm4gX0lOVEVSTkFMX2NvcHlGbGFnc0Zyb21TY29wZVRvRXZlbnQoZXZlbnQpO1xuICAgIH0sXG5cbiAgICBhZGRGZWF0dXJlRmxhZyhuYW1lLCB2YWx1ZSkge1xuICAgICAgX0lOVEVSTkFMX2luc2VydEZsYWdUb1Njb3BlKG5hbWUsIHZhbHVlKTtcbiAgICAgIF9JTlRFUk5BTF9hZGRGZWF0dXJlRmxhZ1RvQWN0aXZlU3BhbihuYW1lLCB2YWx1ZSk7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuZXhwb3J0IHsgZmVhdHVyZUZsYWdzSW50ZWdyYXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZlYXR1cmVGbGFnc0ludGVncmF0aW9uLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/featureFlags/featureFlagsIntegration.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/functiontostring.js":
/*!*********************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/functiontostring.js ***!
  \*********************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   functionToStringIntegration: () => (/* binding */ functionToStringIntegration)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _integration_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js\");\n/* harmony import */ var _utils_object_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/object.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js\");\n\n\n\n\nlet originalFunctionToString;\n\nconst INTEGRATION_NAME = 'FunctionToString';\n\nconst SETUP_CLIENTS = new WeakMap();\n\nconst _functionToStringIntegration = (() => {\n  return {\n    name: INTEGRATION_NAME,\n    setupOnce() {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      originalFunctionToString = Function.prototype.toString;\n\n      // intrinsics (like Function.prototype) might be immutable in some environments\n      // e.g. Node with --frozen-intrinsics, XS (an embedded JavaScript engine) or SES (a JavaScript proposal)\n      try {\n        Function.prototype.toString = function ( ...args) {\n          const originalFunction = (0,_utils_object_js__WEBPACK_IMPORTED_MODULE_2__.getOriginalFunction)(this);\n          const context =\n            SETUP_CLIENTS.has((0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)() ) && originalFunction !== undefined ? originalFunction : this;\n          return originalFunctionToString.apply(context, args);\n        };\n      } catch {\n        // ignore errors here, just don't patch this\n      }\n    },\n    setup(client) {\n      SETUP_CLIENTS.set(client, true);\n    },\n  };\n}) ;\n\n/**\n * Patch toString calls to return proper name for wrapped functions.\n *\n * ```js\n * Sentry.init({\n *   integrations: [\n *     functionToStringIntegration(),\n *   ],\n * });\n * ```\n */\nconst functionToStringIntegration = (0,_integration_js__WEBPACK_IMPORTED_MODULE_1__.defineIntegration)(_functionToStringIntegration);\n\n\n//# sourceMappingURL=functiontostring.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9mdW5jdGlvbnRvc3RyaW5nLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBZ0Q7QUFDTTtBQUNHOztBQUV6RDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMscUVBQW1CO0FBQ3REO0FBQ0EsOEJBQThCLDREQUFTO0FBQ3ZDO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxvQ0FBb0Msa0VBQWlCOztBQUVkO0FBQ3ZDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vaW50ZWdyYXRpb25zL2Z1bmN0aW9udG9zdHJpbmcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0Q2xpZW50IH0gZnJvbSAnLi4vY3VycmVudFNjb3Blcy5qcyc7XG5pbXBvcnQgeyBkZWZpbmVJbnRlZ3JhdGlvbiB9IGZyb20gJy4uL2ludGVncmF0aW9uLmpzJztcbmltcG9ydCB7IGdldE9yaWdpbmFsRnVuY3Rpb24gfSBmcm9tICcuLi91dGlscy9vYmplY3QuanMnO1xuXG5sZXQgb3JpZ2luYWxGdW5jdGlvblRvU3RyaW5nO1xuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ0Z1bmN0aW9uVG9TdHJpbmcnO1xuXG5jb25zdCBTRVRVUF9DTElFTlRTID0gbmV3IFdlYWtNYXAoKTtcblxuY29uc3QgX2Z1bmN0aW9uVG9TdHJpbmdJbnRlZ3JhdGlvbiA9ICgoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogSU5URUdSQVRJT05fTkFNRSxcbiAgICBzZXR1cE9uY2UoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgICBvcmlnaW5hbEZ1bmN0aW9uVG9TdHJpbmcgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG5cbiAgICAgIC8vIGludHJpbnNpY3MgKGxpa2UgRnVuY3Rpb24ucHJvdG90eXBlKSBtaWdodCBiZSBpbW11dGFibGUgaW4gc29tZSBlbnZpcm9ubWVudHNcbiAgICAgIC8vIGUuZy4gTm9kZSB3aXRoIC0tZnJvemVuLWludHJpbnNpY3MsIFhTIChhbiBlbWJlZGRlZCBKYXZhU2NyaXB0IGVuZ2luZSkgb3IgU0VTIChhIEphdmFTY3JpcHQgcHJvcG9zYWwpXG4gICAgICB0cnkge1xuICAgICAgICBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoIC4uLmFyZ3MpIHtcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbEZ1bmN0aW9uID0gZ2V0T3JpZ2luYWxGdW5jdGlvbih0aGlzKTtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID1cbiAgICAgICAgICAgIFNFVFVQX0NMSUVOVFMuaGFzKGdldENsaWVudCgpICkgJiYgb3JpZ2luYWxGdW5jdGlvbiAhPT0gdW5kZWZpbmVkID8gb3JpZ2luYWxGdW5jdGlvbiA6IHRoaXM7XG4gICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRnVuY3Rpb25Ub1N0cmluZy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBpZ25vcmUgZXJyb3JzIGhlcmUsIGp1c3QgZG9uJ3QgcGF0Y2ggdGhpc1xuICAgICAgfVxuICAgIH0sXG4gICAgc2V0dXAoY2xpZW50KSB7XG4gICAgICBTRVRVUF9DTElFTlRTLnNldChjbGllbnQsIHRydWUpO1xuICAgIH0sXG4gIH07XG59KSA7XG5cbi8qKlxuICogUGF0Y2ggdG9TdHJpbmcgY2FsbHMgdG8gcmV0dXJuIHByb3BlciBuYW1lIGZvciB3cmFwcGVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBgYGBqc1xuICogU2VudHJ5LmluaXQoe1xuICogICBpbnRlZ3JhdGlvbnM6IFtcbiAqICAgICBmdW5jdGlvblRvU3RyaW5nSW50ZWdyYXRpb24oKSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmNvbnN0IGZ1bmN0aW9uVG9TdHJpbmdJbnRlZ3JhdGlvbiA9IGRlZmluZUludGVncmF0aW9uKF9mdW5jdGlvblRvU3RyaW5nSW50ZWdyYXRpb24pO1xuXG5leHBvcnQgeyBmdW5jdGlvblRvU3RyaW5nSW50ZWdyYXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZ1bmN0aW9udG9zdHJpbmcuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/functiontostring.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/linkederrors.js":
/*!*****************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/linkederrors.js ***!
  \*****************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   linkedErrorsIntegration: () => (/* binding */ linkedErrorsIntegration)\n/* harmony export */ });\n/* harmony import */ var _integration_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js\");\n/* harmony import */ var _utils_aggregate_errors_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/aggregate-errors.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/aggregate-errors.js\");\n/* harmony import */ var _utils_eventbuilder_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/eventbuilder.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/eventbuilder.js\");\n\n\n\n\nconst DEFAULT_KEY = 'cause';\nconst DEFAULT_LIMIT = 5;\n\nconst INTEGRATION_NAME = 'LinkedErrors';\n\nconst _linkedErrorsIntegration = ((options = {}) => {\n  const limit = options.limit || DEFAULT_LIMIT;\n  const key = options.key || DEFAULT_KEY;\n\n  return {\n    name: INTEGRATION_NAME,\n    preprocessEvent(event, hint, client) {\n      const options = client.getOptions();\n\n      (0,_utils_aggregate_errors_js__WEBPACK_IMPORTED_MODULE_1__.applyAggregateErrorsToEvent)(_utils_eventbuilder_js__WEBPACK_IMPORTED_MODULE_2__.exceptionFromError, options.stackParser, key, limit, event, hint);\n    },\n  };\n}) ;\n\nconst linkedErrorsIntegration = (0,_integration_js__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(_linkedErrorsIntegration);\n\n\n//# sourceMappingURL=linkederrors.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9saW5rZWRlcnJvcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFzRDtBQUNxQjtBQUNiOztBQUU5RDtBQUNBOztBQUVBOztBQUVBLCtDQUErQztBQUMvQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU0sdUZBQTJCLENBQUMsc0VBQWtCO0FBQ3BELEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQsZ0NBQWdDLGtFQUFpQjs7QUFFZDtBQUNuQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9saW5rZWRlcnJvcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lSW50ZWdyYXRpb24gfSBmcm9tICcuLi9pbnRlZ3JhdGlvbi5qcyc7XG5pbXBvcnQgeyBhcHBseUFnZ3JlZ2F0ZUVycm9yc1RvRXZlbnQgfSBmcm9tICcuLi91dGlscy9hZ2dyZWdhdGUtZXJyb3JzLmpzJztcbmltcG9ydCB7IGV4Y2VwdGlvbkZyb21FcnJvciB9IGZyb20gJy4uL3V0aWxzL2V2ZW50YnVpbGRlci5qcyc7XG5cbmNvbnN0IERFRkFVTFRfS0VZID0gJ2NhdXNlJztcbmNvbnN0IERFRkFVTFRfTElNSVQgPSA1O1xuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ0xpbmtlZEVycm9ycyc7XG5cbmNvbnN0IF9saW5rZWRFcnJvcnNJbnRlZ3JhdGlvbiA9ICgob3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IGxpbWl0ID0gb3B0aW9ucy5saW1pdCB8fCBERUZBVUxUX0xJTUlUO1xuICBjb25zdCBrZXkgPSBvcHRpb25zLmtleSB8fCBERUZBVUxUX0tFWTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IElOVEVHUkFUSU9OX05BTUUsXG4gICAgcHJlcHJvY2Vzc0V2ZW50KGV2ZW50LCBoaW50LCBjbGllbnQpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBjbGllbnQuZ2V0T3B0aW9ucygpO1xuXG4gICAgICBhcHBseUFnZ3JlZ2F0ZUVycm9yc1RvRXZlbnQoZXhjZXB0aW9uRnJvbUVycm9yLCBvcHRpb25zLnN0YWNrUGFyc2VyLCBrZXksIGxpbWl0LCBldmVudCwgaGludCk7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuY29uc3QgbGlua2VkRXJyb3JzSW50ZWdyYXRpb24gPSBkZWZpbmVJbnRlZ3JhdGlvbihfbGlua2VkRXJyb3JzSW50ZWdyYXRpb24pO1xuXG5leHBvcnQgeyBsaW5rZWRFcnJvcnNJbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGlua2VkZXJyb3JzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/linkederrors.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/attributeExtraction.js":
/*!***********************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/attributeExtraction.js ***!
  \***********************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   buildTypeSpecificAttributes: () => (/* binding */ buildTypeSpecificAttributes),\n/* harmony export */   getNotificationAttributes: () => (/* binding */ getNotificationAttributes)\n/* harmony export */ });\n/* harmony import */ var _utils_url_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/url.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/url.js\");\n/* harmony import */ var _attributes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./attributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/attributes.js\");\n/* harmony import */ var _methodConfig_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./methodConfig.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/methodConfig.js\");\n\n\n\n\n/**\n * Core attribute extraction and building functions for MCP server instrumentation\n */\n\n\n/**\n * Extracts additional attributes for specific notification types\n * @param method - Notification method name\n * @param params - Notification parameters\n * @returns Method-specific attributes for span instrumentation\n */\nfunction getNotificationAttributes(\n  method,\n  params,\n) {\n  const attributes = {};\n\n  switch (method) {\n    case 'notifications/cancelled':\n      if (params?.requestId) {\n        attributes['mcp.cancelled.request_id'] = String(params.requestId);\n      }\n      if (params?.reason) {\n        attributes['mcp.cancelled.reason'] = String(params.reason);\n      }\n      break;\n\n    case 'notifications/message':\n      if (params?.level) {\n        attributes[_attributes_js__WEBPACK_IMPORTED_MODULE_1__.MCP_LOGGING_LEVEL_ATTRIBUTE] = String(params.level);\n      }\n      if (params?.logger) {\n        attributes[_attributes_js__WEBPACK_IMPORTED_MODULE_1__.MCP_LOGGING_LOGGER_ATTRIBUTE] = String(params.logger);\n      }\n      if (params?.data !== undefined) {\n        attributes[_attributes_js__WEBPACK_IMPORTED_MODULE_1__.MCP_LOGGING_DATA_TYPE_ATTRIBUTE] = typeof params.data;\n        if (typeof params.data === 'string') {\n          attributes[_attributes_js__WEBPACK_IMPORTED_MODULE_1__.MCP_LOGGING_MESSAGE_ATTRIBUTE] = params.data;\n        } else {\n          attributes[_attributes_js__WEBPACK_IMPORTED_MODULE_1__.MCP_LOGGING_MESSAGE_ATTRIBUTE] = JSON.stringify(params.data);\n        }\n      }\n      break;\n\n    case 'notifications/progress':\n      if (params?.progressToken) {\n        attributes['mcp.progress.token'] = String(params.progressToken);\n      }\n      if (typeof params?.progress === 'number') {\n        attributes['mcp.progress.current'] = params.progress;\n      }\n      if (typeof params?.total === 'number') {\n        attributes['mcp.progress.total'] = params.total;\n        if (typeof params?.progress === 'number') {\n          attributes['mcp.progress.percentage'] = (params.progress / params.total) * 100;\n        }\n      }\n      if (params?.message) {\n        attributes['mcp.progress.message'] = String(params.message);\n      }\n      break;\n\n    case 'notifications/resources/updated':\n      if (params?.uri) {\n        attributes[_attributes_js__WEBPACK_IMPORTED_MODULE_1__.MCP_RESOURCE_URI_ATTRIBUTE] = String(params.uri);\n        const urlObject = (0,_utils_url_js__WEBPACK_IMPORTED_MODULE_0__.parseStringToURLObject)(String(params.uri));\n        if (urlObject && !(0,_utils_url_js__WEBPACK_IMPORTED_MODULE_0__.isURLObjectRelative)(urlObject)) {\n          attributes['mcp.resource.protocol'] = urlObject.protocol.replace(':', '');\n        }\n      }\n      break;\n\n    case 'notifications/initialized':\n      attributes['mcp.lifecycle.phase'] = 'initialization_complete';\n      attributes['mcp.protocol.ready'] = 1;\n      break;\n  }\n\n  return attributes;\n}\n\n/**\n * Build type-specific attributes based on message type\n * @param type - Span type (request or notification)\n * @param message - JSON-RPC message\n * @param params - Optional parameters for attribute extraction\n * @returns Type-specific attributes for span instrumentation\n */\nfunction buildTypeSpecificAttributes(\n  type,\n  message,\n  params,\n) {\n  if (type === 'request') {\n    const request = message ;\n    const targetInfo = (0,_methodConfig_js__WEBPACK_IMPORTED_MODULE_2__.extractTargetInfo)(request.method, params || {});\n\n    return {\n      ...(request.id !== undefined && { [_attributes_js__WEBPACK_IMPORTED_MODULE_1__.MCP_REQUEST_ID_ATTRIBUTE]: String(request.id) }),\n      ...targetInfo.attributes,\n      ...(0,_methodConfig_js__WEBPACK_IMPORTED_MODULE_2__.getRequestArguments)(request.method, params || {}),\n    };\n  }\n\n  return getNotificationAttributes(message.method, params || {});\n}\n\n\n//# sourceMappingURL=attributeExtraction.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9tY3Atc2VydmVyL2F0dHJpYnV0ZUV4dHJhY3Rpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBaUY7QUFDaUk7QUFDdkk7O0FBRTNFO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQix1RUFBMkI7QUFDOUM7QUFDQTtBQUNBLG1CQUFtQix3RUFBNEI7QUFDL0M7QUFDQTtBQUNBLG1CQUFtQiwyRUFBK0I7QUFDbEQ7QUFDQSxxQkFBcUIseUVBQTZCO0FBQ2xELFVBQVU7QUFDVixxQkFBcUIseUVBQTZCO0FBQ2xEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsc0VBQTBCO0FBQzdDLDBCQUEwQixxRUFBc0I7QUFDaEQsMEJBQTBCLGtFQUFtQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtRUFBaUIsNkJBQTZCOztBQUVyRTtBQUNBLHdDQUF3QyxDQUFDLG9FQUF3Qix1QkFBdUI7QUFDeEY7QUFDQSxTQUFTLHFFQUFtQiw2QkFBNkI7QUFDekQ7QUFDQTs7QUFFQSwrREFBK0Q7QUFDL0Q7O0FBRWtFO0FBQ2xFIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vaW50ZWdyYXRpb25zL21jcC1zZXJ2ZXIvYXR0cmlidXRlRXh0cmFjdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXJzZVN0cmluZ1RvVVJMT2JqZWN0LCBpc1VSTE9iamVjdFJlbGF0aXZlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXJsLmpzJztcbmltcG9ydCB7IE1DUF9SRVFVRVNUX0lEX0FUVFJJQlVURSwgTUNQX1JFU09VUkNFX1VSSV9BVFRSSUJVVEUsIE1DUF9MT0dHSU5HX0xFVkVMX0FUVFJJQlVURSwgTUNQX0xPR0dJTkdfTE9HR0VSX0FUVFJJQlVURSwgTUNQX0xPR0dJTkdfREFUQV9UWVBFX0FUVFJJQlVURSwgTUNQX0xPR0dJTkdfTUVTU0FHRV9BVFRSSUJVVEUgfSBmcm9tICcuL2F0dHJpYnV0ZXMuanMnO1xuaW1wb3J0IHsgZXh0cmFjdFRhcmdldEluZm8sIGdldFJlcXVlc3RBcmd1bWVudHMgfSBmcm9tICcuL21ldGhvZENvbmZpZy5qcyc7XG5cbi8qKlxuICogQ29yZSBhdHRyaWJ1dGUgZXh0cmFjdGlvbiBhbmQgYnVpbGRpbmcgZnVuY3Rpb25zIGZvciBNQ1Agc2VydmVyIGluc3RydW1lbnRhdGlvblxuICovXG5cblxuLyoqXG4gKiBFeHRyYWN0cyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgZm9yIHNwZWNpZmljIG5vdGlmaWNhdGlvbiB0eXBlc1xuICogQHBhcmFtIG1ldGhvZCAtIE5vdGlmaWNhdGlvbiBtZXRob2QgbmFtZVxuICogQHBhcmFtIHBhcmFtcyAtIE5vdGlmaWNhdGlvbiBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBNZXRob2Qtc3BlY2lmaWMgYXR0cmlidXRlcyBmb3Igc3BhbiBpbnN0cnVtZW50YXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9uQXR0cmlidXRlcyhcbiAgbWV0aG9kLFxuICBwYXJhbXMsXG4pIHtcbiAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuXG4gIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgY2FzZSAnbm90aWZpY2F0aW9ucy9jYW5jZWxsZWQnOlxuICAgICAgaWYgKHBhcmFtcz8ucmVxdWVzdElkKSB7XG4gICAgICAgIGF0dHJpYnV0ZXNbJ21jcC5jYW5jZWxsZWQucmVxdWVzdF9pZCddID0gU3RyaW5nKHBhcmFtcy5yZXF1ZXN0SWQpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcz8ucmVhc29uKSB7XG4gICAgICAgIGF0dHJpYnV0ZXNbJ21jcC5jYW5jZWxsZWQucmVhc29uJ10gPSBTdHJpbmcocGFyYW1zLnJlYXNvbik7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ25vdGlmaWNhdGlvbnMvbWVzc2FnZSc6XG4gICAgICBpZiAocGFyYW1zPy5sZXZlbCkge1xuICAgICAgICBhdHRyaWJ1dGVzW01DUF9MT0dHSU5HX0xFVkVMX0FUVFJJQlVURV0gPSBTdHJpbmcocGFyYW1zLmxldmVsKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXM/LmxvZ2dlcikge1xuICAgICAgICBhdHRyaWJ1dGVzW01DUF9MT0dHSU5HX0xPR0dFUl9BVFRSSUJVVEVdID0gU3RyaW5nKHBhcmFtcy5sb2dnZXIpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcz8uZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF0dHJpYnV0ZXNbTUNQX0xPR0dJTkdfREFUQV9UWVBFX0FUVFJJQlVURV0gPSB0eXBlb2YgcGFyYW1zLmRhdGE7XG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW1zLmRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgYXR0cmlidXRlc1tNQ1BfTE9HR0lOR19NRVNTQUdFX0FUVFJJQlVURV0gPSBwYXJhbXMuZGF0YTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzW01DUF9MT0dHSU5HX01FU1NBR0VfQVRUUklCVVRFXSA9IEpTT04uc3RyaW5naWZ5KHBhcmFtcy5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdub3RpZmljYXRpb25zL3Byb2dyZXNzJzpcbiAgICAgIGlmIChwYXJhbXM/LnByb2dyZXNzVG9rZW4pIHtcbiAgICAgICAgYXR0cmlidXRlc1snbWNwLnByb2dyZXNzLnRva2VuJ10gPSBTdHJpbmcocGFyYW1zLnByb2dyZXNzVG9rZW4pO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBwYXJhbXM/LnByb2dyZXNzID09PSAnbnVtYmVyJykge1xuICAgICAgICBhdHRyaWJ1dGVzWydtY3AucHJvZ3Jlc3MuY3VycmVudCddID0gcGFyYW1zLnByb2dyZXNzO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBwYXJhbXM/LnRvdGFsID09PSAnbnVtYmVyJykge1xuICAgICAgICBhdHRyaWJ1dGVzWydtY3AucHJvZ3Jlc3MudG90YWwnXSA9IHBhcmFtcy50b3RhbDtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXM/LnByb2dyZXNzID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGF0dHJpYnV0ZXNbJ21jcC5wcm9ncmVzcy5wZXJjZW50YWdlJ10gPSAocGFyYW1zLnByb2dyZXNzIC8gcGFyYW1zLnRvdGFsKSAqIDEwMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcz8ubWVzc2FnZSkge1xuICAgICAgICBhdHRyaWJ1dGVzWydtY3AucHJvZ3Jlc3MubWVzc2FnZSddID0gU3RyaW5nKHBhcmFtcy5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnbm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvdXBkYXRlZCc6XG4gICAgICBpZiAocGFyYW1zPy51cmkpIHtcbiAgICAgICAgYXR0cmlidXRlc1tNQ1BfUkVTT1VSQ0VfVVJJX0FUVFJJQlVURV0gPSBTdHJpbmcocGFyYW1zLnVyaSk7XG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlU3RyaW5nVG9VUkxPYmplY3QoU3RyaW5nKHBhcmFtcy51cmkpKTtcbiAgICAgICAgaWYgKHVybE9iamVjdCAmJiAhaXNVUkxPYmplY3RSZWxhdGl2ZSh1cmxPYmplY3QpKSB7XG4gICAgICAgICAgYXR0cmlidXRlc1snbWNwLnJlc291cmNlLnByb3RvY29sJ10gPSB1cmxPYmplY3QucHJvdG9jb2wucmVwbGFjZSgnOicsICcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdub3RpZmljYXRpb25zL2luaXRpYWxpemVkJzpcbiAgICAgIGF0dHJpYnV0ZXNbJ21jcC5saWZlY3ljbGUucGhhc2UnXSA9ICdpbml0aWFsaXphdGlvbl9jb21wbGV0ZSc7XG4gICAgICBhdHRyaWJ1dGVzWydtY3AucHJvdG9jb2wucmVhZHknXSA9IDE7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBhdHRyaWJ1dGVzO1xufVxuXG4vKipcbiAqIEJ1aWxkIHR5cGUtc3BlY2lmaWMgYXR0cmlidXRlcyBiYXNlZCBvbiBtZXNzYWdlIHR5cGVcbiAqIEBwYXJhbSB0eXBlIC0gU3BhbiB0eXBlIChyZXF1ZXN0IG9yIG5vdGlmaWNhdGlvbilcbiAqIEBwYXJhbSBtZXNzYWdlIC0gSlNPTi1SUEMgbWVzc2FnZVxuICogQHBhcmFtIHBhcmFtcyAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGF0dHJpYnV0ZSBleHRyYWN0aW9uXG4gKiBAcmV0dXJucyBUeXBlLXNwZWNpZmljIGF0dHJpYnV0ZXMgZm9yIHNwYW4gaW5zdHJ1bWVudGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVHlwZVNwZWNpZmljQXR0cmlidXRlcyhcbiAgdHlwZSxcbiAgbWVzc2FnZSxcbiAgcGFyYW1zLFxuKSB7XG4gIGlmICh0eXBlID09PSAncmVxdWVzdCcpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gbWVzc2FnZSA7XG4gICAgY29uc3QgdGFyZ2V0SW5mbyA9IGV4dHJhY3RUYXJnZXRJbmZvKHJlcXVlc3QubWV0aG9kLCBwYXJhbXMgfHwge30pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihyZXF1ZXN0LmlkICE9PSB1bmRlZmluZWQgJiYgeyBbTUNQX1JFUVVFU1RfSURfQVRUUklCVVRFXTogU3RyaW5nKHJlcXVlc3QuaWQpIH0pLFxuICAgICAgLi4udGFyZ2V0SW5mby5hdHRyaWJ1dGVzLFxuICAgICAgLi4uZ2V0UmVxdWVzdEFyZ3VtZW50cyhyZXF1ZXN0Lm1ldGhvZCwgcGFyYW1zIHx8IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGdldE5vdGlmaWNhdGlvbkF0dHJpYnV0ZXMobWVzc2FnZS5tZXRob2QsIHBhcmFtcyB8fCB7fSk7XG59XG5cbmV4cG9ydCB7IGJ1aWxkVHlwZVNwZWNpZmljQXR0cmlidXRlcywgZ2V0Tm90aWZpY2F0aW9uQXR0cmlidXRlcyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXR0cmlidXRlRXh0cmFjdGlvbi5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/attributeExtraction.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/attributes.js":
/*!**************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/attributes.js ***!
  \**************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   CLIENT_ADDRESS_ATTRIBUTE: () => (/* binding */ CLIENT_ADDRESS_ATTRIBUTE),\n/* harmony export */   CLIENT_PORT_ATTRIBUTE: () => (/* binding */ CLIENT_PORT_ATTRIBUTE),\n/* harmony export */   MCP_FUNCTION_ORIGIN_VALUE: () => (/* binding */ MCP_FUNCTION_ORIGIN_VALUE),\n/* harmony export */   MCP_LOGGING_DATA_TYPE_ATTRIBUTE: () => (/* binding */ MCP_LOGGING_DATA_TYPE_ATTRIBUTE),\n/* harmony export */   MCP_LOGGING_LEVEL_ATTRIBUTE: () => (/* binding */ MCP_LOGGING_LEVEL_ATTRIBUTE),\n/* harmony export */   MCP_LOGGING_LOGGER_ATTRIBUTE: () => (/* binding */ MCP_LOGGING_LOGGER_ATTRIBUTE),\n/* harmony export */   MCP_LOGGING_MESSAGE_ATTRIBUTE: () => (/* binding */ MCP_LOGGING_MESSAGE_ATTRIBUTE),\n/* harmony export */   MCP_METHOD_NAME_ATTRIBUTE: () => (/* binding */ MCP_METHOD_NAME_ATTRIBUTE),\n/* harmony export */   MCP_NOTIFICATION_CLIENT_TO_SERVER_OP_VALUE: () => (/* binding */ MCP_NOTIFICATION_CLIENT_TO_SERVER_OP_VALUE),\n/* harmony export */   MCP_NOTIFICATION_ORIGIN_VALUE: () => (/* binding */ MCP_NOTIFICATION_ORIGIN_VALUE),\n/* harmony export */   MCP_NOTIFICATION_SERVER_TO_CLIENT_OP_VALUE: () => (/* binding */ MCP_NOTIFICATION_SERVER_TO_CLIENT_OP_VALUE),\n/* harmony export */   MCP_PROMPT_NAME_ATTRIBUTE: () => (/* binding */ MCP_PROMPT_NAME_ATTRIBUTE),\n/* harmony export */   MCP_PROMPT_RESULT_DESCRIPTION_ATTRIBUTE: () => (/* binding */ MCP_PROMPT_RESULT_DESCRIPTION_ATTRIBUTE),\n/* harmony export */   MCP_PROMPT_RESULT_MESSAGE_CONTENT_ATTRIBUTE: () => (/* binding */ MCP_PROMPT_RESULT_MESSAGE_CONTENT_ATTRIBUTE),\n/* harmony export */   MCP_PROMPT_RESULT_MESSAGE_COUNT_ATTRIBUTE: () => (/* binding */ MCP_PROMPT_RESULT_MESSAGE_COUNT_ATTRIBUTE),\n/* harmony export */   MCP_PROMPT_RESULT_PREFIX: () => (/* binding */ MCP_PROMPT_RESULT_PREFIX),\n/* harmony export */   MCP_PROTOCOL_VERSION_ATTRIBUTE: () => (/* binding */ MCP_PROTOCOL_VERSION_ATTRIBUTE),\n/* harmony export */   MCP_REQUEST_ARGUMENT: () => (/* binding */ MCP_REQUEST_ARGUMENT),\n/* harmony export */   MCP_REQUEST_ID_ATTRIBUTE: () => (/* binding */ MCP_REQUEST_ID_ATTRIBUTE),\n/* harmony export */   MCP_RESOURCE_URI_ATTRIBUTE: () => (/* binding */ MCP_RESOURCE_URI_ATTRIBUTE),\n/* harmony export */   MCP_ROUTE_SOURCE_VALUE: () => (/* binding */ MCP_ROUTE_SOURCE_VALUE),\n/* harmony export */   MCP_SERVER_NAME_ATTRIBUTE: () => (/* binding */ MCP_SERVER_NAME_ATTRIBUTE),\n/* harmony export */   MCP_SERVER_OP_VALUE: () => (/* binding */ MCP_SERVER_OP_VALUE),\n/* harmony export */   MCP_SERVER_TITLE_ATTRIBUTE: () => (/* binding */ MCP_SERVER_TITLE_ATTRIBUTE),\n/* harmony export */   MCP_SERVER_VERSION_ATTRIBUTE: () => (/* binding */ MCP_SERVER_VERSION_ATTRIBUTE),\n/* harmony export */   MCP_SESSION_ID_ATTRIBUTE: () => (/* binding */ MCP_SESSION_ID_ATTRIBUTE),\n/* harmony export */   MCP_TOOL_NAME_ATTRIBUTE: () => (/* binding */ MCP_TOOL_NAME_ATTRIBUTE),\n/* harmony export */   MCP_TOOL_RESULT_CONTENT_ATTRIBUTE: () => (/* binding */ MCP_TOOL_RESULT_CONTENT_ATTRIBUTE),\n/* harmony export */   MCP_TOOL_RESULT_CONTENT_COUNT_ATTRIBUTE: () => (/* binding */ MCP_TOOL_RESULT_CONTENT_COUNT_ATTRIBUTE),\n/* harmony export */   MCP_TOOL_RESULT_IS_ERROR_ATTRIBUTE: () => (/* binding */ MCP_TOOL_RESULT_IS_ERROR_ATTRIBUTE),\n/* harmony export */   MCP_TOOL_RESULT_PREFIX: () => (/* binding */ MCP_TOOL_RESULT_PREFIX),\n/* harmony export */   MCP_TRANSPORT_ATTRIBUTE: () => (/* binding */ MCP_TRANSPORT_ATTRIBUTE),\n/* harmony export */   NETWORK_PROTOCOL_VERSION_ATTRIBUTE: () => (/* binding */ NETWORK_PROTOCOL_VERSION_ATTRIBUTE),\n/* harmony export */   NETWORK_TRANSPORT_ATTRIBUTE: () => (/* binding */ NETWORK_TRANSPORT_ATTRIBUTE)\n/* harmony export */ });\n/**\n * Essential MCP attribute constants for Sentry instrumentation\n *\n * Based on OpenTelemetry MCP semantic conventions\n * @see https://github.com/open-telemetry/semantic-conventions/blob/3097fb0af5b9492b0e3f55dc5f6c21a3dc2be8df/docs/gen-ai/mcp.md\n */\n\n// =============================================================================\n// CORE MCP ATTRIBUTES\n// =============================================================================\n\n/** The name of the request or notification method */\nconst MCP_METHOD_NAME_ATTRIBUTE = 'mcp.method.name';\n\n/** JSON-RPC request identifier for the request. Unique within the MCP session. */\nconst MCP_REQUEST_ID_ATTRIBUTE = 'mcp.request.id';\n\n/** Identifies the MCP session */\nconst MCP_SESSION_ID_ATTRIBUTE = 'mcp.session.id';\n\n/** Transport method used for MCP communication */\nconst MCP_TRANSPORT_ATTRIBUTE = 'mcp.transport';\n\n// =============================================================================\n// SERVER ATTRIBUTES\n// =============================================================================\n\n/** Name of the MCP server application */\nconst MCP_SERVER_NAME_ATTRIBUTE = 'mcp.server.name';\n\n/** Display title of the MCP server application */\nconst MCP_SERVER_TITLE_ATTRIBUTE = 'mcp.server.title';\n\n/** Version of the MCP server application */\nconst MCP_SERVER_VERSION_ATTRIBUTE = 'mcp.server.version';\n\n/** MCP protocol version used in the session */\nconst MCP_PROTOCOL_VERSION_ATTRIBUTE = 'mcp.protocol.version';\n\n// =============================================================================\n// METHOD-SPECIFIC ATTRIBUTES\n// =============================================================================\n\n/** Name of the tool being called */\nconst MCP_TOOL_NAME_ATTRIBUTE = 'mcp.tool.name';\n\n/** The resource URI being accessed */\nconst MCP_RESOURCE_URI_ATTRIBUTE = 'mcp.resource.uri';\n\n/** Name of the prompt template */\nconst MCP_PROMPT_NAME_ATTRIBUTE = 'mcp.prompt.name';\n\n// =============================================================================\n// TOOL RESULT ATTRIBUTES\n// =============================================================================\n\n/** Whether a tool execution resulted in an error */\nconst MCP_TOOL_RESULT_IS_ERROR_ATTRIBUTE = 'mcp.tool.result.is_error';\n\n/** Number of content items in the tool result */\nconst MCP_TOOL_RESULT_CONTENT_COUNT_ATTRIBUTE = 'mcp.tool.result.content_count';\n\n/** Serialized content of the tool result */\nconst MCP_TOOL_RESULT_CONTENT_ATTRIBUTE = 'mcp.tool.result.content';\n\n/** Prefix for tool result attributes that contain sensitive content */\nconst MCP_TOOL_RESULT_PREFIX = 'mcp.tool.result';\n\n// =============================================================================\n// PROMPT RESULT ATTRIBUTES\n// =============================================================================\n\n/** Description of the prompt result */\nconst MCP_PROMPT_RESULT_DESCRIPTION_ATTRIBUTE = 'mcp.prompt.result.description';\n\n/** Number of messages in the prompt result */\nconst MCP_PROMPT_RESULT_MESSAGE_COUNT_ATTRIBUTE = 'mcp.prompt.result.message_count';\n\n/** Content of the message in the prompt result (for single message results) */\nconst MCP_PROMPT_RESULT_MESSAGE_CONTENT_ATTRIBUTE = 'mcp.prompt.result.message_content';\n\n/** Prefix for prompt result attributes that contain sensitive content */\nconst MCP_PROMPT_RESULT_PREFIX = 'mcp.prompt.result';\n\n// =============================================================================\n// REQUEST ARGUMENT ATTRIBUTES\n// =============================================================================\n\n/** Prefix for MCP request argument prefix for each argument */\nconst MCP_REQUEST_ARGUMENT = 'mcp.request.argument';\n\n// =============================================================================\n// LOGGING ATTRIBUTES\n// =============================================================================\n\n/** Log level for MCP logging operations */\nconst MCP_LOGGING_LEVEL_ATTRIBUTE = 'mcp.logging.level';\n\n/** Logger name for MCP logging operations */\nconst MCP_LOGGING_LOGGER_ATTRIBUTE = 'mcp.logging.logger';\n\n/** Data type of the logged message */\nconst MCP_LOGGING_DATA_TYPE_ATTRIBUTE = 'mcp.logging.data_type';\n\n/** Log message content */\nconst MCP_LOGGING_MESSAGE_ATTRIBUTE = 'mcp.logging.message';\n\n// =============================================================================\n// NETWORK ATTRIBUTES (OpenTelemetry Standard)\n// =============================================================================\n\n/** OSI transport layer protocol */\nconst NETWORK_TRANSPORT_ATTRIBUTE = 'network.transport';\n\n/** The version of JSON RPC protocol used */\nconst NETWORK_PROTOCOL_VERSION_ATTRIBUTE = 'network.protocol.version';\n\n/** Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name */\nconst CLIENT_ADDRESS_ATTRIBUTE = 'client.address';\n\n/** Client port number */\nconst CLIENT_PORT_ATTRIBUTE = 'client.port';\n\n// =============================================================================\n// SENTRY-SPECIFIC MCP ATTRIBUTE VALUES\n// =============================================================================\n\n/** Sentry operation value for MCP server spans */\nconst MCP_SERVER_OP_VALUE = 'mcp.server';\n\n/**\n * Sentry operation value for client-to-server notifications\n * Following OpenTelemetry MCP semantic conventions\n */\nconst MCP_NOTIFICATION_CLIENT_TO_SERVER_OP_VALUE = 'mcp.notification.client_to_server';\n\n/**\n * Sentry operation value for server-to-client notifications\n * Following OpenTelemetry MCP semantic conventions\n */\nconst MCP_NOTIFICATION_SERVER_TO_CLIENT_OP_VALUE = 'mcp.notification.server_to_client';\n\n/** Sentry origin value for MCP function spans */\nconst MCP_FUNCTION_ORIGIN_VALUE = 'auto.function.mcp_server';\n\n/** Sentry origin value for MCP notification spans */\nconst MCP_NOTIFICATION_ORIGIN_VALUE = 'auto.mcp.notification';\n\n/** Sentry source value for MCP route spans */\nconst MCP_ROUTE_SOURCE_VALUE = 'route';\n\n\n//# sourceMappingURL=attributes.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9tY3Atc2VydmVyL2F0dHJpYnV0ZXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwwRUFBMEU7QUFDMUU7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRTRoQztBQUM1aEMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9pbnRlZ3JhdGlvbnMvbWNwLXNlcnZlci9hdHRyaWJ1dGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXNzZW50aWFsIE1DUCBhdHRyaWJ1dGUgY29uc3RhbnRzIGZvciBTZW50cnkgaW5zdHJ1bWVudGF0aW9uXG4gKlxuICogQmFzZWQgb24gT3BlblRlbGVtZXRyeSBNQ1Agc2VtYW50aWMgY29udmVudGlvbnNcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zL2Jsb2IvMzA5N2ZiMGFmNWI5NDkyYjBlM2Y1NWRjNWY2YzIxYTNkYzJiZThkZi9kb2NzL2dlbi1haS9tY3AubWRcbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ09SRSBNQ1AgQVRUUklCVVRFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIFRoZSBuYW1lIG9mIHRoZSByZXF1ZXN0IG9yIG5vdGlmaWNhdGlvbiBtZXRob2QgKi9cbmNvbnN0IE1DUF9NRVRIT0RfTkFNRV9BVFRSSUJVVEUgPSAnbWNwLm1ldGhvZC5uYW1lJztcblxuLyoqIEpTT04tUlBDIHJlcXVlc3QgaWRlbnRpZmllciBmb3IgdGhlIHJlcXVlc3QuIFVuaXF1ZSB3aXRoaW4gdGhlIE1DUCBzZXNzaW9uLiAqL1xuY29uc3QgTUNQX1JFUVVFU1RfSURfQVRUUklCVVRFID0gJ21jcC5yZXF1ZXN0LmlkJztcblxuLyoqIElkZW50aWZpZXMgdGhlIE1DUCBzZXNzaW9uICovXG5jb25zdCBNQ1BfU0VTU0lPTl9JRF9BVFRSSUJVVEUgPSAnbWNwLnNlc3Npb24uaWQnO1xuXG4vKiogVHJhbnNwb3J0IG1ldGhvZCB1c2VkIGZvciBNQ1AgY29tbXVuaWNhdGlvbiAqL1xuY29uc3QgTUNQX1RSQU5TUE9SVF9BVFRSSUJVVEUgPSAnbWNwLnRyYW5zcG9ydCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTRVJWRVIgQVRUUklCVVRFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIE5hbWUgb2YgdGhlIE1DUCBzZXJ2ZXIgYXBwbGljYXRpb24gKi9cbmNvbnN0IE1DUF9TRVJWRVJfTkFNRV9BVFRSSUJVVEUgPSAnbWNwLnNlcnZlci5uYW1lJztcblxuLyoqIERpc3BsYXkgdGl0bGUgb2YgdGhlIE1DUCBzZXJ2ZXIgYXBwbGljYXRpb24gKi9cbmNvbnN0IE1DUF9TRVJWRVJfVElUTEVfQVRUUklCVVRFID0gJ21jcC5zZXJ2ZXIudGl0bGUnO1xuXG4vKiogVmVyc2lvbiBvZiB0aGUgTUNQIHNlcnZlciBhcHBsaWNhdGlvbiAqL1xuY29uc3QgTUNQX1NFUlZFUl9WRVJTSU9OX0FUVFJJQlVURSA9ICdtY3Auc2VydmVyLnZlcnNpb24nO1xuXG4vKiogTUNQIHByb3RvY29sIHZlcnNpb24gdXNlZCBpbiB0aGUgc2Vzc2lvbiAqL1xuY29uc3QgTUNQX1BST1RPQ09MX1ZFUlNJT05fQVRUUklCVVRFID0gJ21jcC5wcm90b2NvbC52ZXJzaW9uJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1FVEhPRC1TUEVDSUZJQyBBVFRSSUJVVEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogTmFtZSBvZiB0aGUgdG9vbCBiZWluZyBjYWxsZWQgKi9cbmNvbnN0IE1DUF9UT09MX05BTUVfQVRUUklCVVRFID0gJ21jcC50b29sLm5hbWUnO1xuXG4vKiogVGhlIHJlc291cmNlIFVSSSBiZWluZyBhY2Nlc3NlZCAqL1xuY29uc3QgTUNQX1JFU09VUkNFX1VSSV9BVFRSSUJVVEUgPSAnbWNwLnJlc291cmNlLnVyaSc7XG5cbi8qKiBOYW1lIG9mIHRoZSBwcm9tcHQgdGVtcGxhdGUgKi9cbmNvbnN0IE1DUF9QUk9NUFRfTkFNRV9BVFRSSUJVVEUgPSAnbWNwLnByb21wdC5uYW1lJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRPT0wgUkVTVUxUIEFUVFJJQlVURVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBXaGV0aGVyIGEgdG9vbCBleGVjdXRpb24gcmVzdWx0ZWQgaW4gYW4gZXJyb3IgKi9cbmNvbnN0IE1DUF9UT09MX1JFU1VMVF9JU19FUlJPUl9BVFRSSUJVVEUgPSAnbWNwLnRvb2wucmVzdWx0LmlzX2Vycm9yJztcblxuLyoqIE51bWJlciBvZiBjb250ZW50IGl0ZW1zIGluIHRoZSB0b29sIHJlc3VsdCAqL1xuY29uc3QgTUNQX1RPT0xfUkVTVUxUX0NPTlRFTlRfQ09VTlRfQVRUUklCVVRFID0gJ21jcC50b29sLnJlc3VsdC5jb250ZW50X2NvdW50JztcblxuLyoqIFNlcmlhbGl6ZWQgY29udGVudCBvZiB0aGUgdG9vbCByZXN1bHQgKi9cbmNvbnN0IE1DUF9UT09MX1JFU1VMVF9DT05URU5UX0FUVFJJQlVURSA9ICdtY3AudG9vbC5yZXN1bHQuY29udGVudCc7XG5cbi8qKiBQcmVmaXggZm9yIHRvb2wgcmVzdWx0IGF0dHJpYnV0ZXMgdGhhdCBjb250YWluIHNlbnNpdGl2ZSBjb250ZW50ICovXG5jb25zdCBNQ1BfVE9PTF9SRVNVTFRfUFJFRklYID0gJ21jcC50b29sLnJlc3VsdCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQUk9NUFQgUkVTVUxUIEFUVFJJQlVURVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBEZXNjcmlwdGlvbiBvZiB0aGUgcHJvbXB0IHJlc3VsdCAqL1xuY29uc3QgTUNQX1BST01QVF9SRVNVTFRfREVTQ1JJUFRJT05fQVRUUklCVVRFID0gJ21jcC5wcm9tcHQucmVzdWx0LmRlc2NyaXB0aW9uJztcblxuLyoqIE51bWJlciBvZiBtZXNzYWdlcyBpbiB0aGUgcHJvbXB0IHJlc3VsdCAqL1xuY29uc3QgTUNQX1BST01QVF9SRVNVTFRfTUVTU0FHRV9DT1VOVF9BVFRSSUJVVEUgPSAnbWNwLnByb21wdC5yZXN1bHQubWVzc2FnZV9jb3VudCc7XG5cbi8qKiBDb250ZW50IG9mIHRoZSBtZXNzYWdlIGluIHRoZSBwcm9tcHQgcmVzdWx0IChmb3Igc2luZ2xlIG1lc3NhZ2UgcmVzdWx0cykgKi9cbmNvbnN0IE1DUF9QUk9NUFRfUkVTVUxUX01FU1NBR0VfQ09OVEVOVF9BVFRSSUJVVEUgPSAnbWNwLnByb21wdC5yZXN1bHQubWVzc2FnZV9jb250ZW50JztcblxuLyoqIFByZWZpeCBmb3IgcHJvbXB0IHJlc3VsdCBhdHRyaWJ1dGVzIHRoYXQgY29udGFpbiBzZW5zaXRpdmUgY29udGVudCAqL1xuY29uc3QgTUNQX1BST01QVF9SRVNVTFRfUFJFRklYID0gJ21jcC5wcm9tcHQucmVzdWx0JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJFUVVFU1QgQVJHVU1FTlQgQVRUUklCVVRFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIFByZWZpeCBmb3IgTUNQIHJlcXVlc3QgYXJndW1lbnQgcHJlZml4IGZvciBlYWNoIGFyZ3VtZW50ICovXG5jb25zdCBNQ1BfUkVRVUVTVF9BUkdVTUVOVCA9ICdtY3AucmVxdWVzdC5hcmd1bWVudCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMT0dHSU5HIEFUVFJJQlVURVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBMb2cgbGV2ZWwgZm9yIE1DUCBsb2dnaW5nIG9wZXJhdGlvbnMgKi9cbmNvbnN0IE1DUF9MT0dHSU5HX0xFVkVMX0FUVFJJQlVURSA9ICdtY3AubG9nZ2luZy5sZXZlbCc7XG5cbi8qKiBMb2dnZXIgbmFtZSBmb3IgTUNQIGxvZ2dpbmcgb3BlcmF0aW9ucyAqL1xuY29uc3QgTUNQX0xPR0dJTkdfTE9HR0VSX0FUVFJJQlVURSA9ICdtY3AubG9nZ2luZy5sb2dnZXInO1xuXG4vKiogRGF0YSB0eXBlIG9mIHRoZSBsb2dnZWQgbWVzc2FnZSAqL1xuY29uc3QgTUNQX0xPR0dJTkdfREFUQV9UWVBFX0FUVFJJQlVURSA9ICdtY3AubG9nZ2luZy5kYXRhX3R5cGUnO1xuXG4vKiogTG9nIG1lc3NhZ2UgY29udGVudCAqL1xuY29uc3QgTUNQX0xPR0dJTkdfTUVTU0FHRV9BVFRSSUJVVEUgPSAnbWNwLmxvZ2dpbmcubWVzc2FnZSc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBORVRXT1JLIEFUVFJJQlVURVMgKE9wZW5UZWxlbWV0cnkgU3RhbmRhcmQpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogT1NJIHRyYW5zcG9ydCBsYXllciBwcm90b2NvbCAqL1xuY29uc3QgTkVUV09SS19UUkFOU1BPUlRfQVRUUklCVVRFID0gJ25ldHdvcmsudHJhbnNwb3J0JztcblxuLyoqIFRoZSB2ZXJzaW9uIG9mIEpTT04gUlBDIHByb3RvY29sIHVzZWQgKi9cbmNvbnN0IE5FVFdPUktfUFJPVE9DT0xfVkVSU0lPTl9BVFRSSUJVVEUgPSAnbmV0d29yay5wcm90b2NvbC52ZXJzaW9uJztcblxuLyoqIENsaWVudCBhZGRyZXNzIC0gZG9tYWluIG5hbWUgaWYgYXZhaWxhYmxlIHdpdGhvdXQgcmV2ZXJzZSBETlMgbG9va3VwOyBvdGhlcndpc2UsIElQIGFkZHJlc3Mgb3IgVW5peCBkb21haW4gc29ja2V0IG5hbWUgKi9cbmNvbnN0IENMSUVOVF9BRERSRVNTX0FUVFJJQlVURSA9ICdjbGllbnQuYWRkcmVzcyc7XG5cbi8qKiBDbGllbnQgcG9ydCBudW1iZXIgKi9cbmNvbnN0IENMSUVOVF9QT1JUX0FUVFJJQlVURSA9ICdjbGllbnQucG9ydCc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTRU5UUlktU1BFQ0lGSUMgTUNQIEFUVFJJQlVURSBWQUxVRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBTZW50cnkgb3BlcmF0aW9uIHZhbHVlIGZvciBNQ1Agc2VydmVyIHNwYW5zICovXG5jb25zdCBNQ1BfU0VSVkVSX09QX1ZBTFVFID0gJ21jcC5zZXJ2ZXInO1xuXG4vKipcbiAqIFNlbnRyeSBvcGVyYXRpb24gdmFsdWUgZm9yIGNsaWVudC10by1zZXJ2ZXIgbm90aWZpY2F0aW9uc1xuICogRm9sbG93aW5nIE9wZW5UZWxlbWV0cnkgTUNQIHNlbWFudGljIGNvbnZlbnRpb25zXG4gKi9cbmNvbnN0IE1DUF9OT1RJRklDQVRJT05fQ0xJRU5UX1RPX1NFUlZFUl9PUF9WQUxVRSA9ICdtY3Aubm90aWZpY2F0aW9uLmNsaWVudF90b19zZXJ2ZXInO1xuXG4vKipcbiAqIFNlbnRyeSBvcGVyYXRpb24gdmFsdWUgZm9yIHNlcnZlci10by1jbGllbnQgbm90aWZpY2F0aW9uc1xuICogRm9sbG93aW5nIE9wZW5UZWxlbWV0cnkgTUNQIHNlbWFudGljIGNvbnZlbnRpb25zXG4gKi9cbmNvbnN0IE1DUF9OT1RJRklDQVRJT05fU0VSVkVSX1RPX0NMSUVOVF9PUF9WQUxVRSA9ICdtY3Aubm90aWZpY2F0aW9uLnNlcnZlcl90b19jbGllbnQnO1xuXG4vKiogU2VudHJ5IG9yaWdpbiB2YWx1ZSBmb3IgTUNQIGZ1bmN0aW9uIHNwYW5zICovXG5jb25zdCBNQ1BfRlVOQ1RJT05fT1JJR0lOX1ZBTFVFID0gJ2F1dG8uZnVuY3Rpb24ubWNwX3NlcnZlcic7XG5cbi8qKiBTZW50cnkgb3JpZ2luIHZhbHVlIGZvciBNQ1Agbm90aWZpY2F0aW9uIHNwYW5zICovXG5jb25zdCBNQ1BfTk9USUZJQ0FUSU9OX09SSUdJTl9WQUxVRSA9ICdhdXRvLm1jcC5ub3RpZmljYXRpb24nO1xuXG4vKiogU2VudHJ5IHNvdXJjZSB2YWx1ZSBmb3IgTUNQIHJvdXRlIHNwYW5zICovXG5jb25zdCBNQ1BfUk9VVEVfU09VUkNFX1ZBTFVFID0gJ3JvdXRlJztcblxuZXhwb3J0IHsgQ0xJRU5UX0FERFJFU1NfQVRUUklCVVRFLCBDTElFTlRfUE9SVF9BVFRSSUJVVEUsIE1DUF9GVU5DVElPTl9PUklHSU5fVkFMVUUsIE1DUF9MT0dHSU5HX0RBVEFfVFlQRV9BVFRSSUJVVEUsIE1DUF9MT0dHSU5HX0xFVkVMX0FUVFJJQlVURSwgTUNQX0xPR0dJTkdfTE9HR0VSX0FUVFJJQlVURSwgTUNQX0xPR0dJTkdfTUVTU0FHRV9BVFRSSUJVVEUsIE1DUF9NRVRIT0RfTkFNRV9BVFRSSUJVVEUsIE1DUF9OT1RJRklDQVRJT05fQ0xJRU5UX1RPX1NFUlZFUl9PUF9WQUxVRSwgTUNQX05PVElGSUNBVElPTl9PUklHSU5fVkFMVUUsIE1DUF9OT1RJRklDQVRJT05fU0VSVkVSX1RPX0NMSUVOVF9PUF9WQUxVRSwgTUNQX1BST01QVF9OQU1FX0FUVFJJQlVURSwgTUNQX1BST01QVF9SRVNVTFRfREVTQ1JJUFRJT05fQVRUUklCVVRFLCBNQ1BfUFJPTVBUX1JFU1VMVF9NRVNTQUdFX0NPTlRFTlRfQVRUUklCVVRFLCBNQ1BfUFJPTVBUX1JFU1VMVF9NRVNTQUdFX0NPVU5UX0FUVFJJQlVURSwgTUNQX1BST01QVF9SRVNVTFRfUFJFRklYLCBNQ1BfUFJPVE9DT0xfVkVSU0lPTl9BVFRSSUJVVEUsIE1DUF9SRVFVRVNUX0FSR1VNRU5ULCBNQ1BfUkVRVUVTVF9JRF9BVFRSSUJVVEUsIE1DUF9SRVNPVVJDRV9VUklfQVRUUklCVVRFLCBNQ1BfUk9VVEVfU09VUkNFX1ZBTFVFLCBNQ1BfU0VSVkVSX05BTUVfQVRUUklCVVRFLCBNQ1BfU0VSVkVSX09QX1ZBTFVFLCBNQ1BfU0VSVkVSX1RJVExFX0FUVFJJQlVURSwgTUNQX1NFUlZFUl9WRVJTSU9OX0FUVFJJQlVURSwgTUNQX1NFU1NJT05fSURfQVRUUklCVVRFLCBNQ1BfVE9PTF9OQU1FX0FUVFJJQlVURSwgTUNQX1RPT0xfUkVTVUxUX0NPTlRFTlRfQVRUUklCVVRFLCBNQ1BfVE9PTF9SRVNVTFRfQ09OVEVOVF9DT1VOVF9BVFRSSUJVVEUsIE1DUF9UT09MX1JFU1VMVF9JU19FUlJPUl9BVFRSSUJVVEUsIE1DUF9UT09MX1JFU1VMVF9QUkVGSVgsIE1DUF9UUkFOU1BPUlRfQVRUUklCVVRFLCBORVRXT1JLX1BST1RPQ09MX1ZFUlNJT05fQVRUUklCVVRFLCBORVRXT1JLX1RSQU5TUE9SVF9BVFRSSUJVVEUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF0dHJpYnV0ZXMuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/attributes.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/correlation.js":
/*!***************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/correlation.js ***!
  \***************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   cleanupPendingSpansForTransport: () => (/* binding */ cleanupPendingSpansForTransport),\n/* harmony export */   completeSpanWithResults: () => (/* binding */ completeSpanWithResults),\n/* harmony export */   storeSpanForRequest: () => (/* binding */ storeSpanForRequest)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../tracing/spanstatus.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/spanstatus.js\");\n/* harmony import */ var _piiFiltering_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./piiFiltering.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/piiFiltering.js\");\n/* harmony import */ var _resultExtraction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./resultExtraction.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/resultExtraction.js\");\n\n\n\n\n\n/**\n * Request-span correlation system for MCP server instrumentation\n *\n * Handles mapping requestId to span data for correlation with handler execution.\n * Uses WeakMap to scope correlation maps per transport instance, preventing\n * request ID collisions between different MCP sessions.\n */\n\n\n/**\n * Transport-scoped correlation system that prevents collisions between different MCP sessions\n * @internal Each transport instance gets its own correlation map, eliminating request ID conflicts\n */\nconst transportToSpanMap = new WeakMap();\n\n/**\n * Gets or creates the span map for a specific transport instance\n * @internal\n * @param transport - MCP transport instance\n * @returns Span map for the transport\n */\nfunction getOrCreateSpanMap(transport) {\n  let spanMap = transportToSpanMap.get(transport);\n  if (!spanMap) {\n    spanMap = new Map();\n    transportToSpanMap.set(transport, spanMap);\n  }\n  return spanMap;\n}\n\n/**\n * Stores span context for later correlation with handler execution\n * @param transport - MCP transport instance\n * @param requestId - Request identifier\n * @param span - Active span to correlate\n * @param method - MCP method name\n */\nfunction storeSpanForRequest(transport, requestId, span, method) {\n  const spanMap = getOrCreateSpanMap(transport);\n  spanMap.set(requestId, {\n    span,\n    method,\n    startTime: Date.now(),\n  });\n}\n\n/**\n * Completes span with tool results and cleans up correlation\n * @param transport - MCP transport instance\n * @param requestId - Request identifier\n * @param result - Tool execution result for attribute extraction\n */\nfunction completeSpanWithResults(transport, requestId, result) {\n  const spanMap = getOrCreateSpanMap(transport);\n  const spanData = spanMap.get(requestId);\n  if (spanData) {\n    const { span, method } = spanData;\n\n    if (method === 'tools/call') {\n      const rawToolAttributes = (0,_resultExtraction_js__WEBPACK_IMPORTED_MODULE_3__.extractToolResultAttributes)(result);\n      const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n      const sendDefaultPii = Boolean(client?.getOptions().sendDefaultPii);\n      const toolAttributes = (0,_piiFiltering_js__WEBPACK_IMPORTED_MODULE_2__.filterMcpPiiFromSpanData)(rawToolAttributes, sendDefaultPii);\n\n      span.setAttributes(toolAttributes);\n    } else if (method === 'prompts/get') {\n      const rawPromptAttributes = (0,_resultExtraction_js__WEBPACK_IMPORTED_MODULE_3__.extractPromptResultAttributes)(result);\n      const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n      const sendDefaultPii = Boolean(client?.getOptions().sendDefaultPii);\n      const promptAttributes = (0,_piiFiltering_js__WEBPACK_IMPORTED_MODULE_2__.filterMcpPiiFromSpanData)(rawPromptAttributes, sendDefaultPii);\n\n      span.setAttributes(promptAttributes);\n    }\n\n    span.end();\n    spanMap.delete(requestId);\n  }\n}\n\n/**\n * Cleans up pending spans for a specific transport (when that transport closes)\n * @param transport - MCP transport instance\n * @returns Number of pending spans that were cleaned up\n */\nfunction cleanupPendingSpansForTransport(transport) {\n  const spanMap = transportToSpanMap.get(transport);\n  if (!spanMap) {\n    return 0;\n  }\n\n  const pendingCount = spanMap.size;\n\n  for (const [, spanData] of spanMap) {\n    spanData.span.setStatus({\n      code: _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_1__.SPAN_STATUS_ERROR,\n      message: 'cancelled',\n    });\n    spanData.span.end();\n  }\n\n  spanMap.clear();\n  return pendingCount;\n}\n\n\n//# sourceMappingURL=correlation.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9tY3Atc2VydmVyL2NvcnJlbGF0aW9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBbUQ7QUFDYTtBQUNIO0FBQ3NDOztBQUVuRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxlQUFlOztBQUUzQjtBQUNBLGdDQUFnQyxpRkFBMkI7QUFDM0QscUJBQXFCLDREQUFTO0FBQzlCO0FBQ0EsNkJBQTZCLDBFQUF3Qjs7QUFFckQ7QUFDQSxNQUFNO0FBQ04sa0NBQWtDLG1GQUE2QjtBQUMvRCxxQkFBcUIsNERBQVM7QUFDOUI7QUFDQSwrQkFBK0IsMEVBQXdCOztBQUV2RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxZQUFZLHFFQUFpQjtBQUM3QjtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFeUY7QUFDekYiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9pbnRlZ3JhdGlvbnMvbWNwLXNlcnZlci9jb3JyZWxhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDbGllbnQgfSBmcm9tICcuLi8uLi9jdXJyZW50U2NvcGVzLmpzJztcbmltcG9ydCB7IFNQQU5fU1RBVFVTX0VSUk9SIH0gZnJvbSAnLi4vLi4vdHJhY2luZy9zcGFuc3RhdHVzLmpzJztcbmltcG9ydCB7IGZpbHRlck1jcFBpaUZyb21TcGFuRGF0YSB9IGZyb20gJy4vcGlpRmlsdGVyaW5nLmpzJztcbmltcG9ydCB7IGV4dHJhY3RUb29sUmVzdWx0QXR0cmlidXRlcywgZXh0cmFjdFByb21wdFJlc3VsdEF0dHJpYnV0ZXMgfSBmcm9tICcuL3Jlc3VsdEV4dHJhY3Rpb24uanMnO1xuXG4vKipcbiAqIFJlcXVlc3Qtc3BhbiBjb3JyZWxhdGlvbiBzeXN0ZW0gZm9yIE1DUCBzZXJ2ZXIgaW5zdHJ1bWVudGF0aW9uXG4gKlxuICogSGFuZGxlcyBtYXBwaW5nIHJlcXVlc3RJZCB0byBzcGFuIGRhdGEgZm9yIGNvcnJlbGF0aW9uIHdpdGggaGFuZGxlciBleGVjdXRpb24uXG4gKiBVc2VzIFdlYWtNYXAgdG8gc2NvcGUgY29ycmVsYXRpb24gbWFwcyBwZXIgdHJhbnNwb3J0IGluc3RhbmNlLCBwcmV2ZW50aW5nXG4gKiByZXF1ZXN0IElEIGNvbGxpc2lvbnMgYmV0d2VlbiBkaWZmZXJlbnQgTUNQIHNlc3Npb25zLlxuICovXG5cblxuLyoqXG4gKiBUcmFuc3BvcnQtc2NvcGVkIGNvcnJlbGF0aW9uIHN5c3RlbSB0aGF0IHByZXZlbnRzIGNvbGxpc2lvbnMgYmV0d2VlbiBkaWZmZXJlbnQgTUNQIHNlc3Npb25zXG4gKiBAaW50ZXJuYWwgRWFjaCB0cmFuc3BvcnQgaW5zdGFuY2UgZ2V0cyBpdHMgb3duIGNvcnJlbGF0aW9uIG1hcCwgZWxpbWluYXRpbmcgcmVxdWVzdCBJRCBjb25mbGljdHNcbiAqL1xuY29uc3QgdHJhbnNwb3J0VG9TcGFuTWFwID0gbmV3IFdlYWtNYXAoKTtcblxuLyoqXG4gKiBHZXRzIG9yIGNyZWF0ZXMgdGhlIHNwYW4gbWFwIGZvciBhIHNwZWNpZmljIHRyYW5zcG9ydCBpbnN0YW5jZVxuICogQGludGVybmFsXG4gKiBAcGFyYW0gdHJhbnNwb3J0IC0gTUNQIHRyYW5zcG9ydCBpbnN0YW5jZVxuICogQHJldHVybnMgU3BhbiBtYXAgZm9yIHRoZSB0cmFuc3BvcnRcbiAqL1xuZnVuY3Rpb24gZ2V0T3JDcmVhdGVTcGFuTWFwKHRyYW5zcG9ydCkge1xuICBsZXQgc3Bhbk1hcCA9IHRyYW5zcG9ydFRvU3Bhbk1hcC5nZXQodHJhbnNwb3J0KTtcbiAgaWYgKCFzcGFuTWFwKSB7XG4gICAgc3Bhbk1hcCA9IG5ldyBNYXAoKTtcbiAgICB0cmFuc3BvcnRUb1NwYW5NYXAuc2V0KHRyYW5zcG9ydCwgc3Bhbk1hcCk7XG4gIH1cbiAgcmV0dXJuIHNwYW5NYXA7XG59XG5cbi8qKlxuICogU3RvcmVzIHNwYW4gY29udGV4dCBmb3IgbGF0ZXIgY29ycmVsYXRpb24gd2l0aCBoYW5kbGVyIGV4ZWN1dGlvblxuICogQHBhcmFtIHRyYW5zcG9ydCAtIE1DUCB0cmFuc3BvcnQgaW5zdGFuY2VcbiAqIEBwYXJhbSByZXF1ZXN0SWQgLSBSZXF1ZXN0IGlkZW50aWZpZXJcbiAqIEBwYXJhbSBzcGFuIC0gQWN0aXZlIHNwYW4gdG8gY29ycmVsYXRlXG4gKiBAcGFyYW0gbWV0aG9kIC0gTUNQIG1ldGhvZCBuYW1lXG4gKi9cbmZ1bmN0aW9uIHN0b3JlU3BhbkZvclJlcXVlc3QodHJhbnNwb3J0LCByZXF1ZXN0SWQsIHNwYW4sIG1ldGhvZCkge1xuICBjb25zdCBzcGFuTWFwID0gZ2V0T3JDcmVhdGVTcGFuTWFwKHRyYW5zcG9ydCk7XG4gIHNwYW5NYXAuc2V0KHJlcXVlc3RJZCwge1xuICAgIHNwYW4sXG4gICAgbWV0aG9kLFxuICAgIHN0YXJ0VGltZTogRGF0ZS5ub3coKSxcbiAgfSk7XG59XG5cbi8qKlxuICogQ29tcGxldGVzIHNwYW4gd2l0aCB0b29sIHJlc3VsdHMgYW5kIGNsZWFucyB1cCBjb3JyZWxhdGlvblxuICogQHBhcmFtIHRyYW5zcG9ydCAtIE1DUCB0cmFuc3BvcnQgaW5zdGFuY2VcbiAqIEBwYXJhbSByZXF1ZXN0SWQgLSBSZXF1ZXN0IGlkZW50aWZpZXJcbiAqIEBwYXJhbSByZXN1bHQgLSBUb29sIGV4ZWN1dGlvbiByZXN1bHQgZm9yIGF0dHJpYnV0ZSBleHRyYWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbXBsZXRlU3BhbldpdGhSZXN1bHRzKHRyYW5zcG9ydCwgcmVxdWVzdElkLCByZXN1bHQpIHtcbiAgY29uc3Qgc3Bhbk1hcCA9IGdldE9yQ3JlYXRlU3Bhbk1hcCh0cmFuc3BvcnQpO1xuICBjb25zdCBzcGFuRGF0YSA9IHNwYW5NYXAuZ2V0KHJlcXVlc3RJZCk7XG4gIGlmIChzcGFuRGF0YSkge1xuICAgIGNvbnN0IHsgc3BhbiwgbWV0aG9kIH0gPSBzcGFuRGF0YTtcblxuICAgIGlmIChtZXRob2QgPT09ICd0b29scy9jYWxsJykge1xuICAgICAgY29uc3QgcmF3VG9vbEF0dHJpYnV0ZXMgPSBleHRyYWN0VG9vbFJlc3VsdEF0dHJpYnV0ZXMocmVzdWx0KTtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuICAgICAgY29uc3Qgc2VuZERlZmF1bHRQaWkgPSBCb29sZWFuKGNsaWVudD8uZ2V0T3B0aW9ucygpLnNlbmREZWZhdWx0UGlpKTtcbiAgICAgIGNvbnN0IHRvb2xBdHRyaWJ1dGVzID0gZmlsdGVyTWNwUGlpRnJvbVNwYW5EYXRhKHJhd1Rvb2xBdHRyaWJ1dGVzLCBzZW5kRGVmYXVsdFBpaSk7XG5cbiAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyh0b29sQXR0cmlidXRlcyk7XG4gICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdwcm9tcHRzL2dldCcpIHtcbiAgICAgIGNvbnN0IHJhd1Byb21wdEF0dHJpYnV0ZXMgPSBleHRyYWN0UHJvbXB0UmVzdWx0QXR0cmlidXRlcyhyZXN1bHQpO1xuICAgICAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7XG4gICAgICBjb25zdCBzZW5kRGVmYXVsdFBpaSA9IEJvb2xlYW4oY2xpZW50Py5nZXRPcHRpb25zKCkuc2VuZERlZmF1bHRQaWkpO1xuICAgICAgY29uc3QgcHJvbXB0QXR0cmlidXRlcyA9IGZpbHRlck1jcFBpaUZyb21TcGFuRGF0YShyYXdQcm9tcHRBdHRyaWJ1dGVzLCBzZW5kRGVmYXVsdFBpaSk7XG5cbiAgICAgIHNwYW4uc2V0QXR0cmlidXRlcyhwcm9tcHRBdHRyaWJ1dGVzKTtcbiAgICB9XG5cbiAgICBzcGFuLmVuZCgpO1xuICAgIHNwYW5NYXAuZGVsZXRlKHJlcXVlc3RJZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDbGVhbnMgdXAgcGVuZGluZyBzcGFucyBmb3IgYSBzcGVjaWZpYyB0cmFuc3BvcnQgKHdoZW4gdGhhdCB0cmFuc3BvcnQgY2xvc2VzKVxuICogQHBhcmFtIHRyYW5zcG9ydCAtIE1DUCB0cmFuc3BvcnQgaW5zdGFuY2VcbiAqIEByZXR1cm5zIE51bWJlciBvZiBwZW5kaW5nIHNwYW5zIHRoYXQgd2VyZSBjbGVhbmVkIHVwXG4gKi9cbmZ1bmN0aW9uIGNsZWFudXBQZW5kaW5nU3BhbnNGb3JUcmFuc3BvcnQodHJhbnNwb3J0KSB7XG4gIGNvbnN0IHNwYW5NYXAgPSB0cmFuc3BvcnRUb1NwYW5NYXAuZ2V0KHRyYW5zcG9ydCk7XG4gIGlmICghc3Bhbk1hcCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3QgcGVuZGluZ0NvdW50ID0gc3Bhbk1hcC5zaXplO1xuXG4gIGZvciAoY29uc3QgWywgc3BhbkRhdGFdIG9mIHNwYW5NYXApIHtcbiAgICBzcGFuRGF0YS5zcGFuLnNldFN0YXR1cyh7XG4gICAgICBjb2RlOiBTUEFOX1NUQVRVU19FUlJPUixcbiAgICAgIG1lc3NhZ2U6ICdjYW5jZWxsZWQnLFxuICAgIH0pO1xuICAgIHNwYW5EYXRhLnNwYW4uZW5kKCk7XG4gIH1cblxuICBzcGFuTWFwLmNsZWFyKCk7XG4gIHJldHVybiBwZW5kaW5nQ291bnQ7XG59XG5cbmV4cG9ydCB7IGNsZWFudXBQZW5kaW5nU3BhbnNGb3JUcmFuc3BvcnQsIGNvbXBsZXRlU3BhbldpdGhSZXN1bHRzLCBzdG9yZVNwYW5Gb3JSZXF1ZXN0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb3JyZWxhdGlvbi5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/correlation.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/errorCapture.js":
/*!****************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/errorCapture.js ***!
  \****************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   captureError: () => (/* binding */ captureError)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _exports_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../exports.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/exports.js\");\n/* harmony import */ var _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/spanUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js\");\n/* harmony import */ var _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../tracing/spanstatus.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/spanstatus.js\");\n\n\n\n\n\n/**\n * Safe error capture utilities for MCP server instrumentation\n *\n * Ensures error reporting never interferes with MCP server operation.\n * All capture operations are wrapped in try-catch to prevent side effects.\n */\n\n\n/**\n * Captures an error without affecting MCP server operation.\n *\n * The active span already contains all MCP context (method, tool, arguments, etc.)\n * @param error - Error to capture\n * @param errorType - Classification of error type for filtering\n * @param extraData - Additional context data to include\n */\nfunction captureError(error, errorType, extraData) {\n  try {\n    const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n    if (!client) {\n      return;\n    }\n\n    const activeSpan = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_2__.getActiveSpan)();\n    if (activeSpan?.isRecording()) {\n      activeSpan.setStatus({\n        code: _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_3__.SPAN_STATUS_ERROR,\n        message: 'internal_error',\n      });\n    }\n\n    (0,_exports_js__WEBPACK_IMPORTED_MODULE_1__.captureException)(error, {\n      mechanism: {\n        type: 'mcp_server',\n        handled: false,\n        data: {\n          error_type: errorType || 'handler_execution',\n          ...extraData,\n        },\n      },\n    });\n  } catch {\n    // noop\n  }\n}\n\n\n//# sourceMappingURL=errorCapture.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9tY3Atc2VydmVyL2Vycm9yQ2FwdHVyZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFtRDtBQUNDO0FBQ0s7QUFDTzs7QUFFaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiw0REFBUztBQUM1QjtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLGtFQUFhO0FBQ3BDO0FBQ0E7QUFDQSxjQUFjLHFFQUFpQjtBQUMvQjtBQUNBLE9BQU87QUFDUDs7QUFFQSxJQUFJLDZEQUFnQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUV3QjtBQUN4QiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9tY3Atc2VydmVyL2Vycm9yQ2FwdHVyZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDbGllbnQgfSBmcm9tICcuLi8uLi9jdXJyZW50U2NvcGVzLmpzJztcbmltcG9ydCB7IGNhcHR1cmVFeGNlcHRpb24gfSBmcm9tICcuLi8uLi9leHBvcnRzLmpzJztcbmltcG9ydCB7IGdldEFjdGl2ZVNwYW4gfSBmcm9tICcuLi8uLi91dGlscy9zcGFuVXRpbHMuanMnO1xuaW1wb3J0IHsgU1BBTl9TVEFUVVNfRVJST1IgfSBmcm9tICcuLi8uLi90cmFjaW5nL3NwYW5zdGF0dXMuanMnO1xuXG4vKipcbiAqIFNhZmUgZXJyb3IgY2FwdHVyZSB1dGlsaXRpZXMgZm9yIE1DUCBzZXJ2ZXIgaW5zdHJ1bWVudGF0aW9uXG4gKlxuICogRW5zdXJlcyBlcnJvciByZXBvcnRpbmcgbmV2ZXIgaW50ZXJmZXJlcyB3aXRoIE1DUCBzZXJ2ZXIgb3BlcmF0aW9uLlxuICogQWxsIGNhcHR1cmUgb3BlcmF0aW9ucyBhcmUgd3JhcHBlZCBpbiB0cnktY2F0Y2ggdG8gcHJldmVudCBzaWRlIGVmZmVjdHMuXG4gKi9cblxuXG4vKipcbiAqIENhcHR1cmVzIGFuIGVycm9yIHdpdGhvdXQgYWZmZWN0aW5nIE1DUCBzZXJ2ZXIgb3BlcmF0aW9uLlxuICpcbiAqIFRoZSBhY3RpdmUgc3BhbiBhbHJlYWR5IGNvbnRhaW5zIGFsbCBNQ1AgY29udGV4dCAobWV0aG9kLCB0b29sLCBhcmd1bWVudHMsIGV0Yy4pXG4gKiBAcGFyYW0gZXJyb3IgLSBFcnJvciB0byBjYXB0dXJlXG4gKiBAcGFyYW0gZXJyb3JUeXBlIC0gQ2xhc3NpZmljYXRpb24gb2YgZXJyb3IgdHlwZSBmb3IgZmlsdGVyaW5nXG4gKiBAcGFyYW0gZXh0cmFEYXRhIC0gQWRkaXRpb25hbCBjb250ZXh0IGRhdGEgdG8gaW5jbHVkZVxuICovXG5mdW5jdGlvbiBjYXB0dXJlRXJyb3IoZXJyb3IsIGVycm9yVHlwZSwgZXh0cmFEYXRhKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7XG4gICAgaWYgKCFjbGllbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVTcGFuID0gZ2V0QWN0aXZlU3BhbigpO1xuICAgIGlmIChhY3RpdmVTcGFuPy5pc1JlY29yZGluZygpKSB7XG4gICAgICBhY3RpdmVTcGFuLnNldFN0YXR1cyh7XG4gICAgICAgIGNvZGU6IFNQQU5fU1RBVFVTX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiAnaW50ZXJuYWxfZXJyb3InLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2FwdHVyZUV4Y2VwdGlvbihlcnJvciwge1xuICAgICAgbWVjaGFuaXNtOiB7XG4gICAgICAgIHR5cGU6ICdtY3Bfc2VydmVyJyxcbiAgICAgICAgaGFuZGxlZDogZmFsc2UsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBlcnJvcl90eXBlOiBlcnJvclR5cGUgfHwgJ2hhbmRsZXJfZXhlY3V0aW9uJyxcbiAgICAgICAgICAuLi5leHRyYURhdGEsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9IGNhdGNoIHtcbiAgICAvLyBub29wXG4gIH1cbn1cblxuZXhwb3J0IHsgY2FwdHVyZUVycm9yIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvckNhcHR1cmUuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/errorCapture.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/handlers.js":
/*!************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/handlers.js ***!
  \************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   wrapAllMCPHandlers: () => (/* binding */ wrapAllMCPHandlers),\n/* harmony export */   wrapPromptHandlers: () => (/* binding */ wrapPromptHandlers),\n/* harmony export */   wrapResourceHandlers: () => (/* binding */ wrapResourceHandlers),\n/* harmony export */   wrapToolHandlers: () => (/* binding */ wrapToolHandlers)\n/* harmony export */ });\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_object_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/object.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js\");\n/* harmony import */ var _errorCapture_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./errorCapture.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/errorCapture.js\");\n\n\n\n\n\n/**\n * Handler method wrapping for MCP server instrumentation\n *\n * Provides automatic error capture and span correlation for tool, resource,\n * and prompt handlers.\n */\n\n\n/**\n * Generic function to wrap MCP server method handlers\n * @internal\n * @param serverInstance - MCP server instance\n * @param methodName - Method name to wrap (tool, resource, prompt)\n */\nfunction wrapMethodHandler(serverInstance, methodName) {\n  (0,_utils_object_js__WEBPACK_IMPORTED_MODULE_2__.fill)(serverInstance, methodName, originalMethod => {\n    return function ( name, ...args) {\n      const handler = args[args.length - 1];\n\n      if (typeof handler !== 'function') {\n        return (originalMethod ).call(this, name, ...args);\n      }\n\n      const wrappedHandler = createWrappedHandler(handler , methodName, name);\n      return (originalMethod ).call(this, name, ...args.slice(0, -1), wrappedHandler);\n    };\n  });\n}\n\n/**\n * Creates a wrapped handler with span correlation and error capture\n * @internal\n * @param originalHandler - Original handler function\n * @param methodName - MCP method name\n * @param handlerName - Handler identifier\n * @returns Wrapped handler function\n */\nfunction createWrappedHandler(originalHandler, methodName, handlerName) {\n  return function ( ...handlerArgs) {\n    try {\n      return createErrorCapturingHandler.call(this, originalHandler, methodName, handlerName, handlerArgs);\n    } catch (error) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.warn('MCP handler wrapping failed:', error);\n      return originalHandler.apply(this, handlerArgs);\n    }\n  };\n}\n\n/**\n * Creates an error-capturing wrapper for handler execution\n * @internal\n * @param originalHandler - Original handler function\n * @param methodName - MCP method name\n * @param handlerName - Handler identifier\n * @param handlerArgs - Handler arguments\n * @param extraHandlerData - Additional handler context\n * @returns Handler execution result\n */\nfunction createErrorCapturingHandler(\n\n  originalHandler,\n  methodName,\n  handlerName,\n  handlerArgs,\n) {\n  try {\n    const result = originalHandler.apply(this, handlerArgs);\n\n    if (result && typeof result === 'object' && typeof (result ).then === 'function') {\n      return Promise.resolve(result).catch(error => {\n        captureHandlerError(error, methodName, handlerName);\n        throw error;\n      });\n    }\n\n    return result;\n  } catch (error) {\n    captureHandlerError(error , methodName, handlerName);\n    throw error;\n  }\n}\n\n/**\n * Captures handler execution errors based on handler type\n * @internal\n * @param error - Error to capture\n * @param methodName - MCP method name\n * @param handlerName - Handler identifier\n */\nfunction captureHandlerError(error, methodName, handlerName) {\n  try {\n    const extraData = {};\n\n    if (methodName === 'tool') {\n      extraData.tool_name = handlerName;\n\n      if (\n        error.name === 'ProtocolValidationError' ||\n        error.message.includes('validation') ||\n        error.message.includes('protocol')\n      ) {\n        (0,_errorCapture_js__WEBPACK_IMPORTED_MODULE_3__.captureError)(error, 'validation', extraData);\n      } else if (\n        error.name === 'ServerTimeoutError' ||\n        error.message.includes('timed out') ||\n        error.message.includes('timeout')\n      ) {\n        (0,_errorCapture_js__WEBPACK_IMPORTED_MODULE_3__.captureError)(error, 'timeout', extraData);\n      } else {\n        (0,_errorCapture_js__WEBPACK_IMPORTED_MODULE_3__.captureError)(error, 'tool_execution', extraData);\n      }\n    } else if (methodName === 'resource') {\n      extraData.resource_uri = handlerName;\n      (0,_errorCapture_js__WEBPACK_IMPORTED_MODULE_3__.captureError)(error, 'resource_execution', extraData);\n    } else if (methodName === 'prompt') {\n      extraData.prompt_name = handlerName;\n      (0,_errorCapture_js__WEBPACK_IMPORTED_MODULE_3__.captureError)(error, 'prompt_execution', extraData);\n    }\n  } catch (captureErr) {\n    // noop\n  }\n}\n\n/**\n * Wraps tool handlers to associate them with request spans\n * @param serverInstance - MCP server instance\n */\nfunction wrapToolHandlers(serverInstance) {\n  wrapMethodHandler(serverInstance, 'tool');\n}\n\n/**\n * Wraps resource handlers to associate them with request spans\n * @param serverInstance - MCP server instance\n */\nfunction wrapResourceHandlers(serverInstance) {\n  wrapMethodHandler(serverInstance, 'resource');\n}\n\n/**\n * Wraps prompt handlers to associate them with request spans\n * @param serverInstance - MCP server instance\n */\nfunction wrapPromptHandlers(serverInstance) {\n  wrapMethodHandler(serverInstance, 'prompt');\n}\n\n/**\n * Wraps all MCP handler types (tool, resource, prompt) for span correlation\n * @param serverInstance - MCP server instance\n */\nfunction wrapAllMCPHandlers(serverInstance) {\n  wrapToolHandlers(serverInstance);\n  wrapResourceHandlers(serverInstance);\n  wrapPromptHandlers(serverInstance);\n}\n\n\n//# sourceMappingURL=handlers.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9tY3Atc2VydmVyL2hhbmRsZXJzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQW1EO0FBQ0M7QUFDUDtBQUNJOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxzREFBSTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sTUFBTSx3REFBVyxJQUFJLHlEQUFLO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw4REFBWTtBQUNwQixRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDhEQUFZO0FBQ3BCLFFBQVE7QUFDUixRQUFRLDhEQUFZO0FBQ3BCO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTSw4REFBWTtBQUNsQixNQUFNO0FBQ047QUFDQSxNQUFNLDhEQUFZO0FBQ2xCO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRTBGO0FBQzFGIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vaW50ZWdyYXRpb25zL21jcC1zZXJ2ZXIvaGFuZGxlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuLi8uLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4uLy4uL3V0aWxzL2RlYnVnLWxvZ2dlci5qcyc7XG5pbXBvcnQgeyBmaWxsIH0gZnJvbSAnLi4vLi4vdXRpbHMvb2JqZWN0LmpzJztcbmltcG9ydCB7IGNhcHR1cmVFcnJvciB9IGZyb20gJy4vZXJyb3JDYXB0dXJlLmpzJztcblxuLyoqXG4gKiBIYW5kbGVyIG1ldGhvZCB3cmFwcGluZyBmb3IgTUNQIHNlcnZlciBpbnN0cnVtZW50YXRpb25cbiAqXG4gKiBQcm92aWRlcyBhdXRvbWF0aWMgZXJyb3IgY2FwdHVyZSBhbmQgc3BhbiBjb3JyZWxhdGlvbiBmb3IgdG9vbCwgcmVzb3VyY2UsXG4gKiBhbmQgcHJvbXB0IGhhbmRsZXJzLlxuICovXG5cblxuLyoqXG4gKiBHZW5lcmljIGZ1bmN0aW9uIHRvIHdyYXAgTUNQIHNlcnZlciBtZXRob2QgaGFuZGxlcnNcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHNlcnZlckluc3RhbmNlIC0gTUNQIHNlcnZlciBpbnN0YW5jZVxuICogQHBhcmFtIG1ldGhvZE5hbWUgLSBNZXRob2QgbmFtZSB0byB3cmFwICh0b29sLCByZXNvdXJjZSwgcHJvbXB0KVxuICovXG5mdW5jdGlvbiB3cmFwTWV0aG9kSGFuZGxlcihzZXJ2ZXJJbnN0YW5jZSwgbWV0aG9kTmFtZSkge1xuICBmaWxsKHNlcnZlckluc3RhbmNlLCBtZXRob2ROYW1lLCBvcmlnaW5hbE1ldGhvZCA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICggbmFtZSwgLi4uYXJncykge1xuICAgICAgY29uc3QgaGFuZGxlciA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiAob3JpZ2luYWxNZXRob2QgKS5jYWxsKHRoaXMsIG5hbWUsIC4uLmFyZ3MpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3cmFwcGVkSGFuZGxlciA9IGNyZWF0ZVdyYXBwZWRIYW5kbGVyKGhhbmRsZXIgLCBtZXRob2ROYW1lLCBuYW1lKTtcbiAgICAgIHJldHVybiAob3JpZ2luYWxNZXRob2QgKS5jYWxsKHRoaXMsIG5hbWUsIC4uLmFyZ3Muc2xpY2UoMCwgLTEpLCB3cmFwcGVkSGFuZGxlcik7XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHdyYXBwZWQgaGFuZGxlciB3aXRoIHNwYW4gY29ycmVsYXRpb24gYW5kIGVycm9yIGNhcHR1cmVcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIG9yaWdpbmFsSGFuZGxlciAtIE9yaWdpbmFsIGhhbmRsZXIgZnVuY3Rpb25cbiAqIEBwYXJhbSBtZXRob2ROYW1lIC0gTUNQIG1ldGhvZCBuYW1lXG4gKiBAcGFyYW0gaGFuZGxlck5hbWUgLSBIYW5kbGVyIGlkZW50aWZpZXJcbiAqIEByZXR1cm5zIFdyYXBwZWQgaGFuZGxlciBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBjcmVhdGVXcmFwcGVkSGFuZGxlcihvcmlnaW5hbEhhbmRsZXIsIG1ldGhvZE5hbWUsIGhhbmRsZXJOYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoIC4uLmhhbmRsZXJBcmdzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjcmVhdGVFcnJvckNhcHR1cmluZ0hhbmRsZXIuY2FsbCh0aGlzLCBvcmlnaW5hbEhhbmRsZXIsIG1ldGhvZE5hbWUsIGhhbmRsZXJOYW1lLCBoYW5kbGVyQXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLndhcm4oJ01DUCBoYW5kbGVyIHdyYXBwaW5nIGZhaWxlZDonLCBlcnJvcik7XG4gICAgICByZXR1cm4gb3JpZ2luYWxIYW5kbGVyLmFwcGx5KHRoaXMsIGhhbmRsZXJBcmdzKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBlcnJvci1jYXB0dXJpbmcgd3JhcHBlciBmb3IgaGFuZGxlciBleGVjdXRpb25cbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIG9yaWdpbmFsSGFuZGxlciAtIE9yaWdpbmFsIGhhbmRsZXIgZnVuY3Rpb25cbiAqIEBwYXJhbSBtZXRob2ROYW1lIC0gTUNQIG1ldGhvZCBuYW1lXG4gKiBAcGFyYW0gaGFuZGxlck5hbWUgLSBIYW5kbGVyIGlkZW50aWZpZXJcbiAqIEBwYXJhbSBoYW5kbGVyQXJncyAtIEhhbmRsZXIgYXJndW1lbnRzXG4gKiBAcGFyYW0gZXh0cmFIYW5kbGVyRGF0YSAtIEFkZGl0aW9uYWwgaGFuZGxlciBjb250ZXh0XG4gKiBAcmV0dXJucyBIYW5kbGVyIGV4ZWN1dGlvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRXJyb3JDYXB0dXJpbmdIYW5kbGVyKFxuXG4gIG9yaWdpbmFsSGFuZGxlcixcbiAgbWV0aG9kTmFtZSxcbiAgaGFuZGxlck5hbWUsXG4gIGhhbmRsZXJBcmdzLFxuKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gb3JpZ2luYWxIYW5kbGVyLmFwcGx5KHRoaXMsIGhhbmRsZXJBcmdzKTtcblxuICAgIGlmIChyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIChyZXN1bHQgKS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBjYXB0dXJlSGFuZGxlckVycm9yKGVycm9yLCBtZXRob2ROYW1lLCBoYW5kbGVyTmFtZSk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjYXB0dXJlSGFuZGxlckVycm9yKGVycm9yICwgbWV0aG9kTmFtZSwgaGFuZGxlck5hbWUpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8qKlxuICogQ2FwdHVyZXMgaGFuZGxlciBleGVjdXRpb24gZXJyb3JzIGJhc2VkIG9uIGhhbmRsZXIgdHlwZVxuICogQGludGVybmFsXG4gKiBAcGFyYW0gZXJyb3IgLSBFcnJvciB0byBjYXB0dXJlXG4gKiBAcGFyYW0gbWV0aG9kTmFtZSAtIE1DUCBtZXRob2QgbmFtZVxuICogQHBhcmFtIGhhbmRsZXJOYW1lIC0gSGFuZGxlciBpZGVudGlmaWVyXG4gKi9cbmZ1bmN0aW9uIGNhcHR1cmVIYW5kbGVyRXJyb3IoZXJyb3IsIG1ldGhvZE5hbWUsIGhhbmRsZXJOYW1lKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgZXh0cmFEYXRhID0ge307XG5cbiAgICBpZiAobWV0aG9kTmFtZSA9PT0gJ3Rvb2wnKSB7XG4gICAgICBleHRyYURhdGEudG9vbF9uYW1lID0gaGFuZGxlck5hbWU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgZXJyb3IubmFtZSA9PT0gJ1Byb3RvY29sVmFsaWRhdGlvbkVycm9yJyB8fFxuICAgICAgICBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCd2YWxpZGF0aW9uJykgfHxcbiAgICAgICAgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygncHJvdG9jb2wnKVxuICAgICAgKSB7XG4gICAgICAgIGNhcHR1cmVFcnJvcihlcnJvciwgJ3ZhbGlkYXRpb24nLCBleHRyYURhdGEpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZXJyb3IubmFtZSA9PT0gJ1NlcnZlclRpbWVvdXRFcnJvcicgfHxcbiAgICAgICAgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygndGltZWQgb3V0JykgfHxcbiAgICAgICAgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygndGltZW91dCcpXG4gICAgICApIHtcbiAgICAgICAgY2FwdHVyZUVycm9yKGVycm9yLCAndGltZW91dCcsIGV4dHJhRGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXB0dXJlRXJyb3IoZXJyb3IsICd0b29sX2V4ZWN1dGlvbicsIGV4dHJhRGF0YSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtZXRob2ROYW1lID09PSAncmVzb3VyY2UnKSB7XG4gICAgICBleHRyYURhdGEucmVzb3VyY2VfdXJpID0gaGFuZGxlck5hbWU7XG4gICAgICBjYXB0dXJlRXJyb3IoZXJyb3IsICdyZXNvdXJjZV9leGVjdXRpb24nLCBleHRyYURhdGEpO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gJ3Byb21wdCcpIHtcbiAgICAgIGV4dHJhRGF0YS5wcm9tcHRfbmFtZSA9IGhhbmRsZXJOYW1lO1xuICAgICAgY2FwdHVyZUVycm9yKGVycm9yLCAncHJvbXB0X2V4ZWN1dGlvbicsIGV4dHJhRGF0YSk7XG4gICAgfVxuICB9IGNhdGNoIChjYXB0dXJlRXJyKSB7XG4gICAgLy8gbm9vcFxuICB9XG59XG5cbi8qKlxuICogV3JhcHMgdG9vbCBoYW5kbGVycyB0byBhc3NvY2lhdGUgdGhlbSB3aXRoIHJlcXVlc3Qgc3BhbnNcbiAqIEBwYXJhbSBzZXJ2ZXJJbnN0YW5jZSAtIE1DUCBzZXJ2ZXIgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gd3JhcFRvb2xIYW5kbGVycyhzZXJ2ZXJJbnN0YW5jZSkge1xuICB3cmFwTWV0aG9kSGFuZGxlcihzZXJ2ZXJJbnN0YW5jZSwgJ3Rvb2wnKTtcbn1cblxuLyoqXG4gKiBXcmFwcyByZXNvdXJjZSBoYW5kbGVycyB0byBhc3NvY2lhdGUgdGhlbSB3aXRoIHJlcXVlc3Qgc3BhbnNcbiAqIEBwYXJhbSBzZXJ2ZXJJbnN0YW5jZSAtIE1DUCBzZXJ2ZXIgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gd3JhcFJlc291cmNlSGFuZGxlcnMoc2VydmVySW5zdGFuY2UpIHtcbiAgd3JhcE1ldGhvZEhhbmRsZXIoc2VydmVySW5zdGFuY2UsICdyZXNvdXJjZScpO1xufVxuXG4vKipcbiAqIFdyYXBzIHByb21wdCBoYW5kbGVycyB0byBhc3NvY2lhdGUgdGhlbSB3aXRoIHJlcXVlc3Qgc3BhbnNcbiAqIEBwYXJhbSBzZXJ2ZXJJbnN0YW5jZSAtIE1DUCBzZXJ2ZXIgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gd3JhcFByb21wdEhhbmRsZXJzKHNlcnZlckluc3RhbmNlKSB7XG4gIHdyYXBNZXRob2RIYW5kbGVyKHNlcnZlckluc3RhbmNlLCAncHJvbXB0Jyk7XG59XG5cbi8qKlxuICogV3JhcHMgYWxsIE1DUCBoYW5kbGVyIHR5cGVzICh0b29sLCByZXNvdXJjZSwgcHJvbXB0KSBmb3Igc3BhbiBjb3JyZWxhdGlvblxuICogQHBhcmFtIHNlcnZlckluc3RhbmNlIC0gTUNQIHNlcnZlciBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiB3cmFwQWxsTUNQSGFuZGxlcnMoc2VydmVySW5zdGFuY2UpIHtcbiAgd3JhcFRvb2xIYW5kbGVycyhzZXJ2ZXJJbnN0YW5jZSk7XG4gIHdyYXBSZXNvdXJjZUhhbmRsZXJzKHNlcnZlckluc3RhbmNlKTtcbiAgd3JhcFByb21wdEhhbmRsZXJzKHNlcnZlckluc3RhbmNlKTtcbn1cblxuZXhwb3J0IHsgd3JhcEFsbE1DUEhhbmRsZXJzLCB3cmFwUHJvbXB0SGFuZGxlcnMsIHdyYXBSZXNvdXJjZUhhbmRsZXJzLCB3cmFwVG9vbEhhbmRsZXJzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYW5kbGVycy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/handlers.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/index.js":
/*!*********************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/index.js ***!
  \*********************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   wrapMcpServerWithSentry: () => (/* binding */ wrapMcpServerWithSentry)\n/* harmony export */ });\n/* harmony import */ var _utils_object_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/object.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js\");\n/* harmony import */ var _handlers_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./handlers.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/handlers.js\");\n/* harmony import */ var _transport_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./transport.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/transport.js\");\n/* harmony import */ var _validation_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./validation.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/validation.js\");\n\n\n\n\n\n/**\n * Tracks wrapped MCP server instances to prevent double-wrapping\n * @internal\n */\nconst wrappedMcpServerInstances = new WeakSet();\n\n/**\n * Wraps a MCP Server instance from the `@modelcontextprotocol/sdk` package with Sentry instrumentation.\n *\n * Compatible with versions `^1.9.0` of the `@modelcontextprotocol/sdk` package.\n * Automatically instruments transport methods and handler functions for comprehensive monitoring.\n *\n * @example\n * ```typescript\n * import * as Sentry from '@sentry/core';\n * import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\n * import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';\n *\n * const server = Sentry.wrapMcpServerWithSentry(\n *   new McpServer({ name: \"my-server\", version: \"1.0.0\" })\n * );\n *\n * const transport = new StreamableHTTPServerTransport();\n * await server.connect(transport);\n * ```\n *\n * @param mcpServerInstance - MCP server instance to instrument\n * @returns Instrumented server instance (same reference)\n */\nfunction wrapMcpServerWithSentry(mcpServerInstance) {\n  if (wrappedMcpServerInstances.has(mcpServerInstance)) {\n    return mcpServerInstance;\n  }\n\n  if (!(0,_validation_js__WEBPACK_IMPORTED_MODULE_3__.validateMcpServerInstance)(mcpServerInstance)) {\n    return mcpServerInstance;\n  }\n\n  const serverInstance = mcpServerInstance ;\n\n  (0,_utils_object_js__WEBPACK_IMPORTED_MODULE_0__.fill)(serverInstance, 'connect', originalConnect => {\n    return async function ( transport, ...restArgs) {\n      const result = await (originalConnect ).call(\n        this,\n        transport,\n        ...restArgs,\n      );\n\n      (0,_transport_js__WEBPACK_IMPORTED_MODULE_2__.wrapTransportOnMessage)(transport);\n      (0,_transport_js__WEBPACK_IMPORTED_MODULE_2__.wrapTransportSend)(transport);\n      (0,_transport_js__WEBPACK_IMPORTED_MODULE_2__.wrapTransportOnClose)(transport);\n      (0,_transport_js__WEBPACK_IMPORTED_MODULE_2__.wrapTransportError)(transport);\n\n      return result;\n    };\n  });\n\n  (0,_handlers_js__WEBPACK_IMPORTED_MODULE_1__.wrapAllMCPHandlers)(serverInstance);\n\n  wrappedMcpServerInstances.add(mcpServerInstance);\n  return mcpServerInstance ;\n}\n\n\n//# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9tY3Atc2VydmVyL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQTZDO0FBQ007QUFDa0U7QUFDekQ7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxZQUFZO0FBQ3hCLFlBQVksZ0NBQWdDO0FBQzVDO0FBQ0E7QUFDQSxxQkFBcUIscUNBQXFDO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU8seUVBQXlCO0FBQ2hDO0FBQ0E7O0FBRUE7O0FBRUEsRUFBRSxzREFBSTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLHFFQUFzQjtBQUM1QixNQUFNLGdFQUFpQjtBQUN2QixNQUFNLG1FQUFvQjtBQUMxQixNQUFNLGlFQUFrQjs7QUFFeEI7QUFDQTtBQUNBLEdBQUc7O0FBRUgsRUFBRSxnRUFBa0I7O0FBRXBCO0FBQ0E7QUFDQTs7QUFFbUM7QUFDbkMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9pbnRlZ3JhdGlvbnMvbWNwLXNlcnZlci9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaWxsIH0gZnJvbSAnLi4vLi4vdXRpbHMvb2JqZWN0LmpzJztcbmltcG9ydCB7IHdyYXBBbGxNQ1BIYW5kbGVycyB9IGZyb20gJy4vaGFuZGxlcnMuanMnO1xuaW1wb3J0IHsgd3JhcFRyYW5zcG9ydE9uTWVzc2FnZSwgd3JhcFRyYW5zcG9ydFNlbmQsIHdyYXBUcmFuc3BvcnRPbkNsb3NlLCB3cmFwVHJhbnNwb3J0RXJyb3IgfSBmcm9tICcuL3RyYW5zcG9ydC5qcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZU1jcFNlcnZlckluc3RhbmNlIH0gZnJvbSAnLi92YWxpZGF0aW9uLmpzJztcblxuLyoqXG4gKiBUcmFja3Mgd3JhcHBlZCBNQ1Agc2VydmVyIGluc3RhbmNlcyB0byBwcmV2ZW50IGRvdWJsZS13cmFwcGluZ1xuICogQGludGVybmFsXG4gKi9cbmNvbnN0IHdyYXBwZWRNY3BTZXJ2ZXJJbnN0YW5jZXMgPSBuZXcgV2Vha1NldCgpO1xuXG4vKipcbiAqIFdyYXBzIGEgTUNQIFNlcnZlciBpbnN0YW5jZSBmcm9tIHRoZSBgQG1vZGVsY29udGV4dHByb3RvY29sL3Nka2AgcGFja2FnZSB3aXRoIFNlbnRyeSBpbnN0cnVtZW50YXRpb24uXG4gKlxuICogQ29tcGF0aWJsZSB3aXRoIHZlcnNpb25zIGBeMS45LjBgIG9mIHRoZSBgQG1vZGVsY29udGV4dHByb3RvY29sL3Nka2AgcGFja2FnZS5cbiAqIEF1dG9tYXRpY2FsbHkgaW5zdHJ1bWVudHMgdHJhbnNwb3J0IG1ldGhvZHMgYW5kIGhhbmRsZXIgZnVuY3Rpb25zIGZvciBjb21wcmVoZW5zaXZlIG1vbml0b3JpbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCAqIGFzIFNlbnRyeSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuICogaW1wb3J0IHsgTWNwU2VydmVyIH0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvbWNwLmpzJztcbiAqIGltcG9ydCB7IFN0cmVhbWFibGVIVFRQU2VydmVyVHJhbnNwb3J0IH0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvc3RyZWFtYWJsZUh0dHAuanMnO1xuICpcbiAqIGNvbnN0IHNlcnZlciA9IFNlbnRyeS53cmFwTWNwU2VydmVyV2l0aFNlbnRyeShcbiAqICAgbmV3IE1jcFNlcnZlcih7IG5hbWU6IFwibXktc2VydmVyXCIsIHZlcnNpb246IFwiMS4wLjBcIiB9KVxuICogKTtcbiAqXG4gKiBjb25zdCB0cmFuc3BvcnQgPSBuZXcgU3RyZWFtYWJsZUhUVFBTZXJ2ZXJUcmFuc3BvcnQoKTtcbiAqIGF3YWl0IHNlcnZlci5jb25uZWN0KHRyYW5zcG9ydCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gbWNwU2VydmVySW5zdGFuY2UgLSBNQ1Agc2VydmVyIGluc3RhbmNlIHRvIGluc3RydW1lbnRcbiAqIEByZXR1cm5zIEluc3RydW1lbnRlZCBzZXJ2ZXIgaW5zdGFuY2UgKHNhbWUgcmVmZXJlbmNlKVxuICovXG5mdW5jdGlvbiB3cmFwTWNwU2VydmVyV2l0aFNlbnRyeShtY3BTZXJ2ZXJJbnN0YW5jZSkge1xuICBpZiAod3JhcHBlZE1jcFNlcnZlckluc3RhbmNlcy5oYXMobWNwU2VydmVySW5zdGFuY2UpKSB7XG4gICAgcmV0dXJuIG1jcFNlcnZlckluc3RhbmNlO1xuICB9XG5cbiAgaWYgKCF2YWxpZGF0ZU1jcFNlcnZlckluc3RhbmNlKG1jcFNlcnZlckluc3RhbmNlKSkge1xuICAgIHJldHVybiBtY3BTZXJ2ZXJJbnN0YW5jZTtcbiAgfVxuXG4gIGNvbnN0IHNlcnZlckluc3RhbmNlID0gbWNwU2VydmVySW5zdGFuY2UgO1xuXG4gIGZpbGwoc2VydmVySW5zdGFuY2UsICdjb25uZWN0Jywgb3JpZ2luYWxDb25uZWN0ID0+IHtcbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKCB0cmFuc3BvcnQsIC4uLnJlc3RBcmdzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAob3JpZ2luYWxDb25uZWN0ICkuY2FsbChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdHJhbnNwb3J0LFxuICAgICAgICAuLi5yZXN0QXJncyxcbiAgICAgICk7XG5cbiAgICAgIHdyYXBUcmFuc3BvcnRPbk1lc3NhZ2UodHJhbnNwb3J0KTtcbiAgICAgIHdyYXBUcmFuc3BvcnRTZW5kKHRyYW5zcG9ydCk7XG4gICAgICB3cmFwVHJhbnNwb3J0T25DbG9zZSh0cmFuc3BvcnQpO1xuICAgICAgd3JhcFRyYW5zcG9ydEVycm9yKHRyYW5zcG9ydCk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfSk7XG5cbiAgd3JhcEFsbE1DUEhhbmRsZXJzKHNlcnZlckluc3RhbmNlKTtcblxuICB3cmFwcGVkTWNwU2VydmVySW5zdGFuY2VzLmFkZChtY3BTZXJ2ZXJJbnN0YW5jZSk7XG4gIHJldHVybiBtY3BTZXJ2ZXJJbnN0YW5jZSA7XG59XG5cbmV4cG9ydCB7IHdyYXBNY3BTZXJ2ZXJXaXRoU2VudHJ5IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/methodConfig.js":
/*!****************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/methodConfig.js ***!
  \****************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   extractTargetInfo: () => (/* binding */ extractTargetInfo),\n/* harmony export */   getRequestArguments: () => (/* binding */ getRequestArguments)\n/* harmony export */ });\n/* harmony import */ var _attributes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./attributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/attributes.js\");\n\n\n/**\n * Method configuration and request processing for MCP server instrumentation\n */\n\n\n/**\n * Configuration for MCP methods to extract targets and arguments\n * @internal Maps method names to their extraction configuration\n */\nconst METHOD_CONFIGS = {\n  'tools/call': {\n    targetField: 'name',\n    targetAttribute: _attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_TOOL_NAME_ATTRIBUTE,\n    captureArguments: true,\n    argumentsField: 'arguments',\n  },\n  'resources/read': {\n    targetField: 'uri',\n    targetAttribute: _attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_RESOURCE_URI_ATTRIBUTE,\n    captureUri: true,\n  },\n  'resources/subscribe': {\n    targetField: 'uri',\n    targetAttribute: _attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_RESOURCE_URI_ATTRIBUTE,\n  },\n  'resources/unsubscribe': {\n    targetField: 'uri',\n    targetAttribute: _attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_RESOURCE_URI_ATTRIBUTE,\n  },\n  'prompts/get': {\n    targetField: 'name',\n    targetAttribute: _attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_PROMPT_NAME_ATTRIBUTE,\n    captureName: true,\n    captureArguments: true,\n    argumentsField: 'arguments',\n  },\n};\n\n/**\n * Extracts target info from method and params based on method type\n * @param method - MCP method name\n * @param params - Method parameters\n * @returns Target name and attributes for span instrumentation\n */\nfunction extractTargetInfo(\n  method,\n  params,\n)\n\n {\n  const config = METHOD_CONFIGS[method ];\n  if (!config) {\n    return { attributes: {} };\n  }\n\n  const target =\n    config.targetField && typeof params?.[config.targetField] === 'string'\n      ? (params[config.targetField] )\n      : undefined;\n\n  return {\n    target,\n    attributes: target && config.targetAttribute ? { [config.targetAttribute]: target } : {},\n  };\n}\n\n/**\n * Extracts request arguments based on method type\n * @param method - MCP method name\n * @param params - Method parameters\n * @returns Arguments as span attributes with mcp.request.argument prefix\n */\nfunction getRequestArguments(method, params) {\n  const args = {};\n  const config = METHOD_CONFIGS[method ];\n\n  if (!config) {\n    return args;\n  }\n\n  if (config.captureArguments && config.argumentsField && params?.[config.argumentsField]) {\n    const argumentsObj = params[config.argumentsField];\n    if (typeof argumentsObj === 'object' && argumentsObj !== null) {\n      for (const [key, value] of Object.entries(argumentsObj )) {\n        args[`${_attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_REQUEST_ARGUMENT}.${key.toLowerCase()}`] = JSON.stringify(value);\n      }\n    }\n  }\n\n  if (config.captureUri && params?.uri) {\n    args[`${_attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_REQUEST_ARGUMENT}.uri`] = JSON.stringify(params.uri);\n  }\n\n  if (config.captureName && params?.name) {\n    args[`${_attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_REQUEST_ARGUMENT}.name`] = JSON.stringify(params.name);\n  }\n\n  return args;\n}\n\n\n//# sourceMappingURL=methodConfig.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9tY3Atc2VydmVyL21ldGhvZENvbmZpZy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBdUk7O0FBRXZJO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsbUVBQXVCO0FBQzVDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLHFCQUFxQixzRUFBMEI7QUFDL0M7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLHFCQUFxQixzRUFBMEI7QUFDL0MsR0FBRztBQUNIO0FBQ0E7QUFDQSxxQkFBcUIsc0VBQTBCO0FBQy9DLEdBQUc7QUFDSDtBQUNBO0FBQ0EscUJBQXFCLHFFQUF5QjtBQUM5QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxREFBcUQsbUNBQW1DLElBQUk7QUFDNUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGdFQUFvQixDQUFDLEdBQUcsa0JBQWtCO0FBQzFEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVksZ0VBQW9CLENBQUM7QUFDakM7O0FBRUE7QUFDQSxZQUFZLGdFQUFvQixDQUFDO0FBQ2pDOztBQUVBO0FBQ0E7O0FBRWtEO0FBQ2xEIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vaW50ZWdyYXRpb25zL21jcC1zZXJ2ZXIvbWV0aG9kQ29uZmlnLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1DUF9QUk9NUFRfTkFNRV9BVFRSSUJVVEUsIE1DUF9SRVNPVVJDRV9VUklfQVRUUklCVVRFLCBNQ1BfVE9PTF9OQU1FX0FUVFJJQlVURSwgTUNQX1JFUVVFU1RfQVJHVU1FTlQgfSBmcm9tICcuL2F0dHJpYnV0ZXMuanMnO1xuXG4vKipcbiAqIE1ldGhvZCBjb25maWd1cmF0aW9uIGFuZCByZXF1ZXN0IHByb2Nlc3NpbmcgZm9yIE1DUCBzZXJ2ZXIgaW5zdHJ1bWVudGF0aW9uXG4gKi9cblxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIE1DUCBtZXRob2RzIHRvIGV4dHJhY3QgdGFyZ2V0cyBhbmQgYXJndW1lbnRzXG4gKiBAaW50ZXJuYWwgTWFwcyBtZXRob2QgbmFtZXMgdG8gdGhlaXIgZXh0cmFjdGlvbiBjb25maWd1cmF0aW9uXG4gKi9cbmNvbnN0IE1FVEhPRF9DT05GSUdTID0ge1xuICAndG9vbHMvY2FsbCc6IHtcbiAgICB0YXJnZXRGaWVsZDogJ25hbWUnLFxuICAgIHRhcmdldEF0dHJpYnV0ZTogTUNQX1RPT0xfTkFNRV9BVFRSSUJVVEUsXG4gICAgY2FwdHVyZUFyZ3VtZW50czogdHJ1ZSxcbiAgICBhcmd1bWVudHNGaWVsZDogJ2FyZ3VtZW50cycsXG4gIH0sXG4gICdyZXNvdXJjZXMvcmVhZCc6IHtcbiAgICB0YXJnZXRGaWVsZDogJ3VyaScsXG4gICAgdGFyZ2V0QXR0cmlidXRlOiBNQ1BfUkVTT1VSQ0VfVVJJX0FUVFJJQlVURSxcbiAgICBjYXB0dXJlVXJpOiB0cnVlLFxuICB9LFxuICAncmVzb3VyY2VzL3N1YnNjcmliZSc6IHtcbiAgICB0YXJnZXRGaWVsZDogJ3VyaScsXG4gICAgdGFyZ2V0QXR0cmlidXRlOiBNQ1BfUkVTT1VSQ0VfVVJJX0FUVFJJQlVURSxcbiAgfSxcbiAgJ3Jlc291cmNlcy91bnN1YnNjcmliZSc6IHtcbiAgICB0YXJnZXRGaWVsZDogJ3VyaScsXG4gICAgdGFyZ2V0QXR0cmlidXRlOiBNQ1BfUkVTT1VSQ0VfVVJJX0FUVFJJQlVURSxcbiAgfSxcbiAgJ3Byb21wdHMvZ2V0Jzoge1xuICAgIHRhcmdldEZpZWxkOiAnbmFtZScsXG4gICAgdGFyZ2V0QXR0cmlidXRlOiBNQ1BfUFJPTVBUX05BTUVfQVRUUklCVVRFLFxuICAgIGNhcHR1cmVOYW1lOiB0cnVlLFxuICAgIGNhcHR1cmVBcmd1bWVudHM6IHRydWUsXG4gICAgYXJndW1lbnRzRmllbGQ6ICdhcmd1bWVudHMnLFxuICB9LFxufTtcblxuLyoqXG4gKiBFeHRyYWN0cyB0YXJnZXQgaW5mbyBmcm9tIG1ldGhvZCBhbmQgcGFyYW1zIGJhc2VkIG9uIG1ldGhvZCB0eXBlXG4gKiBAcGFyYW0gbWV0aG9kIC0gTUNQIG1ldGhvZCBuYW1lXG4gKiBAcGFyYW0gcGFyYW1zIC0gTWV0aG9kIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRhcmdldCBuYW1lIGFuZCBhdHRyaWJ1dGVzIGZvciBzcGFuIGluc3RydW1lbnRhdGlvblxuICovXG5mdW5jdGlvbiBleHRyYWN0VGFyZ2V0SW5mbyhcbiAgbWV0aG9kLFxuICBwYXJhbXMsXG4pXG5cbiB7XG4gIGNvbnN0IGNvbmZpZyA9IE1FVEhPRF9DT05GSUdTW21ldGhvZCBdO1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiB7IGF0dHJpYnV0ZXM6IHt9IH07XG4gIH1cblxuICBjb25zdCB0YXJnZXQgPVxuICAgIGNvbmZpZy50YXJnZXRGaWVsZCAmJiB0eXBlb2YgcGFyYW1zPy5bY29uZmlnLnRhcmdldEZpZWxkXSA9PT0gJ3N0cmluZydcbiAgICAgID8gKHBhcmFtc1tjb25maWcudGFyZ2V0RmllbGRdIClcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiB7XG4gICAgdGFyZ2V0LFxuICAgIGF0dHJpYnV0ZXM6IHRhcmdldCAmJiBjb25maWcudGFyZ2V0QXR0cmlidXRlID8geyBbY29uZmlnLnRhcmdldEF0dHJpYnV0ZV06IHRhcmdldCB9IDoge30sXG4gIH07XG59XG5cbi8qKlxuICogRXh0cmFjdHMgcmVxdWVzdCBhcmd1bWVudHMgYmFzZWQgb24gbWV0aG9kIHR5cGVcbiAqIEBwYXJhbSBtZXRob2QgLSBNQ1AgbWV0aG9kIG5hbWVcbiAqIEBwYXJhbSBwYXJhbXMgLSBNZXRob2QgcGFyYW1ldGVyc1xuICogQHJldHVybnMgQXJndW1lbnRzIGFzIHNwYW4gYXR0cmlidXRlcyB3aXRoIG1jcC5yZXF1ZXN0LmFyZ3VtZW50IHByZWZpeFxuICovXG5mdW5jdGlvbiBnZXRSZXF1ZXN0QXJndW1lbnRzKG1ldGhvZCwgcGFyYW1zKSB7XG4gIGNvbnN0IGFyZ3MgPSB7fTtcbiAgY29uc3QgY29uZmlnID0gTUVUSE9EX0NPTkZJR1NbbWV0aG9kIF07XG5cbiAgaWYgKCFjb25maWcpIHtcbiAgICByZXR1cm4gYXJncztcbiAgfVxuXG4gIGlmIChjb25maWcuY2FwdHVyZUFyZ3VtZW50cyAmJiBjb25maWcuYXJndW1lbnRzRmllbGQgJiYgcGFyYW1zPy5bY29uZmlnLmFyZ3VtZW50c0ZpZWxkXSkge1xuICAgIGNvbnN0IGFyZ3VtZW50c09iaiA9IHBhcmFtc1tjb25maWcuYXJndW1lbnRzRmllbGRdO1xuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzT2JqID09PSAnb2JqZWN0JyAmJiBhcmd1bWVudHNPYmogIT09IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGFyZ3VtZW50c09iaiApKSB7XG4gICAgICAgIGFyZ3NbYCR7TUNQX1JFUVVFU1RfQVJHVU1FTlR9LiR7a2V5LnRvTG93ZXJDYXNlKCl9YF0gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbmZpZy5jYXB0dXJlVXJpICYmIHBhcmFtcz8udXJpKSB7XG4gICAgYXJnc1tgJHtNQ1BfUkVRVUVTVF9BUkdVTUVOVH0udXJpYF0gPSBKU09OLnN0cmluZ2lmeShwYXJhbXMudXJpKTtcbiAgfVxuXG4gIGlmIChjb25maWcuY2FwdHVyZU5hbWUgJiYgcGFyYW1zPy5uYW1lKSB7XG4gICAgYXJnc1tgJHtNQ1BfUkVRVUVTVF9BUkdVTUVOVH0ubmFtZWBdID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zLm5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIGFyZ3M7XG59XG5cbmV4cG9ydCB7IGV4dHJhY3RUYXJnZXRJbmZvLCBnZXRSZXF1ZXN0QXJndW1lbnRzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXRob2RDb25maWcuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/methodConfig.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/piiFiltering.js":
/*!****************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/piiFiltering.js ***!
  \****************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   filterMcpPiiFromSpanData: () => (/* binding */ filterMcpPiiFromSpanData)\n/* harmony export */ });\n/* harmony import */ var _attributes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./attributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/attributes.js\");\n\n\n/**\n * PII attributes that should be removed when sendDefaultPii is false\n * @internal\n */\nconst PII_ATTRIBUTES = new Set([\n  _attributes_js__WEBPACK_IMPORTED_MODULE_0__.CLIENT_ADDRESS_ATTRIBUTE,\n  _attributes_js__WEBPACK_IMPORTED_MODULE_0__.CLIENT_PORT_ATTRIBUTE,\n  _attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_LOGGING_MESSAGE_ATTRIBUTE,\n  _attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_PROMPT_RESULT_DESCRIPTION_ATTRIBUTE,\n  _attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_PROMPT_RESULT_MESSAGE_CONTENT_ATTRIBUTE,\n  _attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_RESOURCE_URI_ATTRIBUTE,\n  _attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_TOOL_RESULT_CONTENT_ATTRIBUTE,\n]);\n\n/**\n * Checks if an attribute key should be considered PII.\n *\n * Returns true for:\n * - Explicit PII attributes (client.address, client.port, mcp.logging.message, etc.)\n * - All request arguments (mcp.request.argument.*)\n * - Tool and prompt result content (mcp.tool.result.*, mcp.prompt.result.*) except metadata\n *\n * Preserves metadata attributes ending with _count, _error, or .is_error as they don't contain sensitive data.\n *\n * @param key - Attribute key to evaluate\n * @returns true if the attribute should be filtered out (is PII), false if it should be preserved\n * @internal\n */\nfunction isPiiAttribute(key) {\n  if (PII_ATTRIBUTES.has(key)) {\n    return true;\n  }\n\n  if (key.startsWith(`${_attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_REQUEST_ARGUMENT}.`)) {\n    return true;\n  }\n\n  if (key.startsWith(`${_attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_TOOL_RESULT_PREFIX}.`) || key.startsWith(`${_attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_PROMPT_RESULT_PREFIX}.`)) {\n    if (!key.endsWith('_count') && !key.endsWith('_error') && !key.endsWith('.is_error')) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Removes PII attributes from span data when sendDefaultPii is false\n * @param spanData - Raw span attributes\n * @param sendDefaultPii - Whether to include PII data\n * @returns Filtered span attributes\n */\nfunction filterMcpPiiFromSpanData(\n  spanData,\n  sendDefaultPii,\n) {\n  if (sendDefaultPii) {\n    return spanData ;\n  }\n\n  return Object.entries(spanData).reduce(\n    (acc, [key, value]) => {\n      if (!isPiiAttribute(key)) {\n        acc[key] = value ;\n      }\n      return acc;\n    },\n    {} ,\n  );\n}\n\n\n//# sourceMappingURL=piiFiltering.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9tY3Atc2VydmVyL3BpaUZpbHRlcmluZy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUE4VTs7QUFFOVU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsb0VBQXdCO0FBQzFCLEVBQUUsaUVBQXFCO0FBQ3ZCLEVBQUUseUVBQTZCO0FBQy9CLEVBQUUsbUZBQXVDO0FBQ3pDLEVBQUUsdUZBQTJDO0FBQzdDLEVBQUUsc0VBQTBCO0FBQzVCLEVBQUUsNkVBQWlDO0FBQ25DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0IsZ0VBQW9CLENBQUM7QUFDN0M7QUFDQTs7QUFFQSx3QkFBd0Isa0VBQXNCLENBQUMseUJBQXlCLG9FQUF3QixDQUFDO0FBQ2pHO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLE9BQU87QUFDUDtBQUNBOztBQUVvQztBQUNwQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9tY3Atc2VydmVyL3BpaUZpbHRlcmluZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNQ1BfUkVRVUVTVF9BUkdVTUVOVCwgTUNQX1RPT0xfUkVTVUxUX1BSRUZJWCwgTUNQX1BST01QVF9SRVNVTFRfUFJFRklYLCBDTElFTlRfQUREUkVTU19BVFRSSUJVVEUsIENMSUVOVF9QT1JUX0FUVFJJQlVURSwgTUNQX0xPR0dJTkdfTUVTU0FHRV9BVFRSSUJVVEUsIE1DUF9QUk9NUFRfUkVTVUxUX0RFU0NSSVBUSU9OX0FUVFJJQlVURSwgTUNQX1BST01QVF9SRVNVTFRfTUVTU0FHRV9DT05URU5UX0FUVFJJQlVURSwgTUNQX1JFU09VUkNFX1VSSV9BVFRSSUJVVEUsIE1DUF9UT09MX1JFU1VMVF9DT05URU5UX0FUVFJJQlVURSB9IGZyb20gJy4vYXR0cmlidXRlcy5qcyc7XG5cbi8qKlxuICogUElJIGF0dHJpYnV0ZXMgdGhhdCBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHNlbmREZWZhdWx0UGlpIGlzIGZhbHNlXG4gKiBAaW50ZXJuYWxcbiAqL1xuY29uc3QgUElJX0FUVFJJQlVURVMgPSBuZXcgU2V0KFtcbiAgQ0xJRU5UX0FERFJFU1NfQVRUUklCVVRFLFxuICBDTElFTlRfUE9SVF9BVFRSSUJVVEUsXG4gIE1DUF9MT0dHSU5HX01FU1NBR0VfQVRUUklCVVRFLFxuICBNQ1BfUFJPTVBUX1JFU1VMVF9ERVNDUklQVElPTl9BVFRSSUJVVEUsXG4gIE1DUF9QUk9NUFRfUkVTVUxUX01FU1NBR0VfQ09OVEVOVF9BVFRSSUJVVEUsXG4gIE1DUF9SRVNPVVJDRV9VUklfQVRUUklCVVRFLFxuICBNQ1BfVE9PTF9SRVNVTFRfQ09OVEVOVF9BVFRSSUJVVEUsXG5dKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gYXR0cmlidXRlIGtleSBzaG91bGQgYmUgY29uc2lkZXJlZCBQSUkuXG4gKlxuICogUmV0dXJucyB0cnVlIGZvcjpcbiAqIC0gRXhwbGljaXQgUElJIGF0dHJpYnV0ZXMgKGNsaWVudC5hZGRyZXNzLCBjbGllbnQucG9ydCwgbWNwLmxvZ2dpbmcubWVzc2FnZSwgZXRjLilcbiAqIC0gQWxsIHJlcXVlc3QgYXJndW1lbnRzIChtY3AucmVxdWVzdC5hcmd1bWVudC4qKVxuICogLSBUb29sIGFuZCBwcm9tcHQgcmVzdWx0IGNvbnRlbnQgKG1jcC50b29sLnJlc3VsdC4qLCBtY3AucHJvbXB0LnJlc3VsdC4qKSBleGNlcHQgbWV0YWRhdGFcbiAqXG4gKiBQcmVzZXJ2ZXMgbWV0YWRhdGEgYXR0cmlidXRlcyBlbmRpbmcgd2l0aCBfY291bnQsIF9lcnJvciwgb3IgLmlzX2Vycm9yIGFzIHRoZXkgZG9uJ3QgY29udGFpbiBzZW5zaXRpdmUgZGF0YS5cbiAqXG4gKiBAcGFyYW0ga2V5IC0gQXR0cmlidXRlIGtleSB0byBldmFsdWF0ZVxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgYXR0cmlidXRlIHNob3VsZCBiZSBmaWx0ZXJlZCBvdXQgKGlzIFBJSSksIGZhbHNlIGlmIGl0IHNob3VsZCBiZSBwcmVzZXJ2ZWRcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBpc1BpaUF0dHJpYnV0ZShrZXkpIHtcbiAgaWYgKFBJSV9BVFRSSUJVVEVTLmhhcyhrZXkpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoa2V5LnN0YXJ0c1dpdGgoYCR7TUNQX1JFUVVFU1RfQVJHVU1FTlR9LmApKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoa2V5LnN0YXJ0c1dpdGgoYCR7TUNQX1RPT0xfUkVTVUxUX1BSRUZJWH0uYCkgfHwga2V5LnN0YXJ0c1dpdGgoYCR7TUNQX1BST01QVF9SRVNVTFRfUFJFRklYfS5gKSkge1xuICAgIGlmICgha2V5LmVuZHNXaXRoKCdfY291bnQnKSAmJiAha2V5LmVuZHNXaXRoKCdfZXJyb3InKSAmJiAha2V5LmVuZHNXaXRoKCcuaXNfZXJyb3InKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgUElJIGF0dHJpYnV0ZXMgZnJvbSBzcGFuIGRhdGEgd2hlbiBzZW5kRGVmYXVsdFBpaSBpcyBmYWxzZVxuICogQHBhcmFtIHNwYW5EYXRhIC0gUmF3IHNwYW4gYXR0cmlidXRlc1xuICogQHBhcmFtIHNlbmREZWZhdWx0UGlpIC0gV2hldGhlciB0byBpbmNsdWRlIFBJSSBkYXRhXG4gKiBAcmV0dXJucyBGaWx0ZXJlZCBzcGFuIGF0dHJpYnV0ZXNcbiAqL1xuZnVuY3Rpb24gZmlsdGVyTWNwUGlpRnJvbVNwYW5EYXRhKFxuICBzcGFuRGF0YSxcbiAgc2VuZERlZmF1bHRQaWksXG4pIHtcbiAgaWYgKHNlbmREZWZhdWx0UGlpKSB7XG4gICAgcmV0dXJuIHNwYW5EYXRhIDtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhzcGFuRGF0YSkucmVkdWNlKFxuICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaWYgKCFpc1BpaUF0dHJpYnV0ZShrZXkpKSB7XG4gICAgICAgIGFjY1trZXldID0gdmFsdWUgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LFxuICAgIHt9ICxcbiAgKTtcbn1cblxuZXhwb3J0IHsgZmlsdGVyTWNwUGlpRnJvbVNwYW5EYXRhIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1waWlGaWx0ZXJpbmcuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/piiFiltering.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/resultExtraction.js":
/*!********************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/resultExtraction.js ***!
  \********************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   extractPromptResultAttributes: () => (/* binding */ extractPromptResultAttributes),\n/* harmony export */   extractToolResultAttributes: () => (/* binding */ extractToolResultAttributes)\n/* harmony export */ });\n/* harmony import */ var _attributes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./attributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/attributes.js\");\n/* harmony import */ var _validation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./validation.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/validation.js\");\n\n\n\n/**\n * Result extraction functions for MCP server instrumentation\n *\n * Handles extraction of attributes from tool and prompt execution results.\n */\n\n\n/**\n * Build attributes for tool result content items\n * @param content - Array of content items from tool result\n * @returns Attributes extracted from each content item including type, text, mime type, URI, and resource info\n */\nfunction buildAllContentItemAttributes(content) {\n  const attributes = {\n    [_attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_TOOL_RESULT_CONTENT_COUNT_ATTRIBUTE]: content.length,\n  };\n\n  for (const [i, item] of content.entries()) {\n    if (!(0,_validation_js__WEBPACK_IMPORTED_MODULE_1__.isValidContentItem)(item)) {\n      continue;\n    }\n\n    const prefix = content.length === 1 ? 'mcp.tool.result' : `mcp.tool.result.${i}`;\n\n    const safeSet = (key, value) => {\n      if (typeof value === 'string') {\n        attributes[`${prefix}.${key}`] = value;\n      }\n    };\n\n    safeSet('content_type', item.type);\n    safeSet('mime_type', item.mimeType);\n    safeSet('uri', item.uri);\n    safeSet('name', item.name);\n\n    if (typeof item.text === 'string') {\n      attributes[`${prefix}.content`] = item.text;\n    }\n\n    if (typeof item.data === 'string') {\n      attributes[`${prefix}.data_size`] = item.data.length;\n    }\n\n    const resource = item.resource;\n    if ((0,_validation_js__WEBPACK_IMPORTED_MODULE_1__.isValidContentItem)(resource)) {\n      safeSet('resource_uri', resource.uri);\n      safeSet('resource_mime_type', resource.mimeType);\n    }\n  }\n\n  return attributes;\n}\n\n/**\n * Extract tool result attributes for span instrumentation\n * @param result - Tool execution result\n * @returns Attributes extracted from tool result content\n */\nfunction extractToolResultAttributes(result) {\n  if (!(0,_validation_js__WEBPACK_IMPORTED_MODULE_1__.isValidContentItem)(result)) {\n    return {};\n  }\n\n  const attributes = Array.isArray(result.content) ? buildAllContentItemAttributes(result.content) : {};\n\n  if (typeof result.isError === 'boolean') {\n    attributes[_attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_TOOL_RESULT_IS_ERROR_ATTRIBUTE] = result.isError;\n  }\n\n  return attributes;\n}\n\n/**\n * Extract prompt result attributes for span instrumentation\n * @param result - Prompt execution result\n * @returns Attributes extracted from prompt result\n */\nfunction extractPromptResultAttributes(result) {\n  const attributes = {};\n  if (!(0,_validation_js__WEBPACK_IMPORTED_MODULE_1__.isValidContentItem)(result)) {\n    return attributes;\n  }\n\n  if (typeof result.description === 'string') {\n    attributes[_attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_PROMPT_RESULT_DESCRIPTION_ATTRIBUTE] = result.description;\n  }\n\n  if (Array.isArray(result.messages)) {\n    attributes[_attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_PROMPT_RESULT_MESSAGE_COUNT_ATTRIBUTE] = result.messages.length;\n\n    const messages = result.messages;\n    for (const [i, message] of messages.entries()) {\n      if (!(0,_validation_js__WEBPACK_IMPORTED_MODULE_1__.isValidContentItem)(message)) {\n        continue;\n      }\n\n      const prefix = messages.length === 1 ? 'mcp.prompt.result' : `mcp.prompt.result.${i}`;\n\n      const safeSet = (key, value) => {\n        if (typeof value === 'string') {\n          const attrName = messages.length === 1 ? `${prefix}.message_${key}` : `${prefix}.${key}`;\n          attributes[attrName] = value;\n        }\n      };\n\n      safeSet('role', message.role);\n\n      if ((0,_validation_js__WEBPACK_IMPORTED_MODULE_1__.isValidContentItem)(message.content)) {\n        const content = message.content;\n        if (typeof content.text === 'string') {\n          const attrName = messages.length === 1 ? `${prefix}.message_content` : `${prefix}.content`;\n          attributes[attrName] = content.text;\n        }\n      }\n    }\n  }\n\n  return attributes;\n}\n\n\n//# sourceMappingURL=resultExtraction.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9tY3Atc2VydmVyL3Jlc3VsdEV4dHJhY3Rpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFrTTtBQUM3STs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLG1GQUF1QztBQUM1Qzs7QUFFQTtBQUNBLFNBQVMsa0VBQWtCO0FBQzNCO0FBQ0E7O0FBRUEsaUZBQWlGLEVBQUU7O0FBRW5GO0FBQ0E7QUFDQSxzQkFBc0IsT0FBTyxHQUFHLElBQUk7QUFDcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixPQUFPO0FBQzNCOztBQUVBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7O0FBRUE7QUFDQSxRQUFRLGtFQUFrQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sa0VBQWtCO0FBQ3pCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxlQUFlLDhFQUFrQztBQUNqRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxrRUFBa0I7QUFDekI7QUFDQTs7QUFFQTtBQUNBLGVBQWUsbUZBQXVDO0FBQ3REOztBQUVBO0FBQ0EsZUFBZSxxRkFBeUM7O0FBRXhEO0FBQ0E7QUFDQSxXQUFXLGtFQUFrQjtBQUM3QjtBQUNBOztBQUVBLHdGQUF3RixFQUFFOztBQUUxRjtBQUNBO0FBQ0Esc0RBQXNELE9BQU8sV0FBVyxJQUFJLE9BQU8sT0FBTyxHQUFHLElBQUk7QUFDakc7QUFDQTtBQUNBOztBQUVBOztBQUVBLFVBQVUsa0VBQWtCO0FBQzVCO0FBQ0E7QUFDQSxzREFBc0QsT0FBTyx1QkFBdUIsT0FBTztBQUMzRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRXNFO0FBQ3RFIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vaW50ZWdyYXRpb25zL21jcC1zZXJ2ZXIvcmVzdWx0RXh0cmFjdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNQ1BfVE9PTF9SRVNVTFRfSVNfRVJST1JfQVRUUklCVVRFLCBNQ1BfUFJPTVBUX1JFU1VMVF9ERVNDUklQVElPTl9BVFRSSUJVVEUsIE1DUF9QUk9NUFRfUkVTVUxUX01FU1NBR0VfQ09VTlRfQVRUUklCVVRFLCBNQ1BfVE9PTF9SRVNVTFRfQ09OVEVOVF9DT1VOVF9BVFRSSUJVVEUgfSBmcm9tICcuL2F0dHJpYnV0ZXMuanMnO1xuaW1wb3J0IHsgaXNWYWxpZENvbnRlbnRJdGVtIH0gZnJvbSAnLi92YWxpZGF0aW9uLmpzJztcblxuLyoqXG4gKiBSZXN1bHQgZXh0cmFjdGlvbiBmdW5jdGlvbnMgZm9yIE1DUCBzZXJ2ZXIgaW5zdHJ1bWVudGF0aW9uXG4gKlxuICogSGFuZGxlcyBleHRyYWN0aW9uIG9mIGF0dHJpYnV0ZXMgZnJvbSB0b29sIGFuZCBwcm9tcHQgZXhlY3V0aW9uIHJlc3VsdHMuXG4gKi9cblxuXG4vKipcbiAqIEJ1aWxkIGF0dHJpYnV0ZXMgZm9yIHRvb2wgcmVzdWx0IGNvbnRlbnQgaXRlbXNcbiAqIEBwYXJhbSBjb250ZW50IC0gQXJyYXkgb2YgY29udGVudCBpdGVtcyBmcm9tIHRvb2wgcmVzdWx0XG4gKiBAcmV0dXJucyBBdHRyaWJ1dGVzIGV4dHJhY3RlZCBmcm9tIGVhY2ggY29udGVudCBpdGVtIGluY2x1ZGluZyB0eXBlLCB0ZXh0LCBtaW1lIHR5cGUsIFVSSSwgYW5kIHJlc291cmNlIGluZm9cbiAqL1xuZnVuY3Rpb24gYnVpbGRBbGxDb250ZW50SXRlbUF0dHJpYnV0ZXMoY29udGVudCkge1xuICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgIFtNQ1BfVE9PTF9SRVNVTFRfQ09OVEVOVF9DT1VOVF9BVFRSSUJVVEVdOiBjb250ZW50Lmxlbmd0aCxcbiAgfTtcblxuICBmb3IgKGNvbnN0IFtpLCBpdGVtXSBvZiBjb250ZW50LmVudHJpZXMoKSkge1xuICAgIGlmICghaXNWYWxpZENvbnRlbnRJdGVtKGl0ZW0pKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVmaXggPSBjb250ZW50Lmxlbmd0aCA9PT0gMSA/ICdtY3AudG9vbC5yZXN1bHQnIDogYG1jcC50b29sLnJlc3VsdC4ke2l9YDtcblxuICAgIGNvbnN0IHNhZmVTZXQgPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYXR0cmlidXRlc1tgJHtwcmVmaXh9LiR7a2V5fWBdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNhZmVTZXQoJ2NvbnRlbnRfdHlwZScsIGl0ZW0udHlwZSk7XG4gICAgc2FmZVNldCgnbWltZV90eXBlJywgaXRlbS5taW1lVHlwZSk7XG4gICAgc2FmZVNldCgndXJpJywgaXRlbS51cmkpO1xuICAgIHNhZmVTZXQoJ25hbWUnLCBpdGVtLm5hbWUpO1xuXG4gICAgaWYgKHR5cGVvZiBpdGVtLnRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBhdHRyaWJ1dGVzW2Ake3ByZWZpeH0uY29udGVudGBdID0gaXRlbS50ZXh0O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaXRlbS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgYXR0cmlidXRlc1tgJHtwcmVmaXh9LmRhdGFfc2l6ZWBdID0gaXRlbS5kYXRhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IGl0ZW0ucmVzb3VyY2U7XG4gICAgaWYgKGlzVmFsaWRDb250ZW50SXRlbShyZXNvdXJjZSkpIHtcbiAgICAgIHNhZmVTZXQoJ3Jlc291cmNlX3VyaScsIHJlc291cmNlLnVyaSk7XG4gICAgICBzYWZlU2V0KCdyZXNvdXJjZV9taW1lX3R5cGUnLCByZXNvdXJjZS5taW1lVHlwZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGF0dHJpYnV0ZXM7XG59XG5cbi8qKlxuICogRXh0cmFjdCB0b29sIHJlc3VsdCBhdHRyaWJ1dGVzIGZvciBzcGFuIGluc3RydW1lbnRhdGlvblxuICogQHBhcmFtIHJlc3VsdCAtIFRvb2wgZXhlY3V0aW9uIHJlc3VsdFxuICogQHJldHVybnMgQXR0cmlidXRlcyBleHRyYWN0ZWQgZnJvbSB0b29sIHJlc3VsdCBjb250ZW50XG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUb29sUmVzdWx0QXR0cmlidXRlcyhyZXN1bHQpIHtcbiAgaWYgKCFpc1ZhbGlkQ29udGVudEl0ZW0ocmVzdWx0KSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSBBcnJheS5pc0FycmF5KHJlc3VsdC5jb250ZW50KSA/IGJ1aWxkQWxsQ29udGVudEl0ZW1BdHRyaWJ1dGVzKHJlc3VsdC5jb250ZW50KSA6IHt9O1xuXG4gIGlmICh0eXBlb2YgcmVzdWx0LmlzRXJyb3IgPT09ICdib29sZWFuJykge1xuICAgIGF0dHJpYnV0ZXNbTUNQX1RPT0xfUkVTVUxUX0lTX0VSUk9SX0FUVFJJQlVURV0gPSByZXN1bHQuaXNFcnJvcjtcbiAgfVxuXG4gIHJldHVybiBhdHRyaWJ1dGVzO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgcHJvbXB0IHJlc3VsdCBhdHRyaWJ1dGVzIGZvciBzcGFuIGluc3RydW1lbnRhdGlvblxuICogQHBhcmFtIHJlc3VsdCAtIFByb21wdCBleGVjdXRpb24gcmVzdWx0XG4gKiBAcmV0dXJucyBBdHRyaWJ1dGVzIGV4dHJhY3RlZCBmcm9tIHByb21wdCByZXN1bHRcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFByb21wdFJlc3VsdEF0dHJpYnV0ZXMocmVzdWx0KSB7XG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSB7fTtcbiAgaWYgKCFpc1ZhbGlkQ29udGVudEl0ZW0ocmVzdWx0KSkge1xuICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICB9XG5cbiAgaWYgKHR5cGVvZiByZXN1bHQuZGVzY3JpcHRpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgYXR0cmlidXRlc1tNQ1BfUFJPTVBUX1JFU1VMVF9ERVNDUklQVElPTl9BVFRSSUJVVEVdID0gcmVzdWx0LmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0Lm1lc3NhZ2VzKSkge1xuICAgIGF0dHJpYnV0ZXNbTUNQX1BST01QVF9SRVNVTFRfTUVTU0FHRV9DT1VOVF9BVFRSSUJVVEVdID0gcmVzdWx0Lm1lc3NhZ2VzLmxlbmd0aDtcblxuICAgIGNvbnN0IG1lc3NhZ2VzID0gcmVzdWx0Lm1lc3NhZ2VzO1xuICAgIGZvciAoY29uc3QgW2ksIG1lc3NhZ2VdIG9mIG1lc3NhZ2VzLmVudHJpZXMoKSkge1xuICAgICAgaWYgKCFpc1ZhbGlkQ29udGVudEl0ZW0obWVzc2FnZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByZWZpeCA9IG1lc3NhZ2VzLmxlbmd0aCA9PT0gMSA/ICdtY3AucHJvbXB0LnJlc3VsdCcgOiBgbWNwLnByb21wdC5yZXN1bHQuJHtpfWA7XG5cbiAgICAgIGNvbnN0IHNhZmVTZXQgPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGNvbnN0IGF0dHJOYW1lID0gbWVzc2FnZXMubGVuZ3RoID09PSAxID8gYCR7cHJlZml4fS5tZXNzYWdlXyR7a2V5fWAgOiBgJHtwcmVmaXh9LiR7a2V5fWA7XG4gICAgICAgICAgYXR0cmlidXRlc1thdHRyTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgc2FmZVNldCgncm9sZScsIG1lc3NhZ2Uucm9sZSk7XG5cbiAgICAgIGlmIChpc1ZhbGlkQ29udGVudEl0ZW0obWVzc2FnZS5jb250ZW50KSkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gbWVzc2FnZS5jb250ZW50O1xuICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnQudGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBjb25zdCBhdHRyTmFtZSA9IG1lc3NhZ2VzLmxlbmd0aCA9PT0gMSA/IGAke3ByZWZpeH0ubWVzc2FnZV9jb250ZW50YCA6IGAke3ByZWZpeH0uY29udGVudGA7XG4gICAgICAgICAgYXR0cmlidXRlc1thdHRyTmFtZV0gPSBjb250ZW50LnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXR0cmlidXRlcztcbn1cblxuZXhwb3J0IHsgZXh0cmFjdFByb21wdFJlc3VsdEF0dHJpYnV0ZXMsIGV4dHJhY3RUb29sUmVzdWx0QXR0cmlidXRlcyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzdWx0RXh0cmFjdGlvbi5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/resultExtraction.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/sessionExtraction.js":
/*!*********************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/sessionExtraction.js ***!
  \*********************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   buildTransportAttributes: () => (/* binding */ buildTransportAttributes),\n/* harmony export */   extractClientInfo: () => (/* binding */ extractClientInfo),\n/* harmony export */   extractSessionDataFromInitializeRequest: () => (/* binding */ extractSessionDataFromInitializeRequest),\n/* harmony export */   extractSessionDataFromInitializeResponse: () => (/* binding */ extractSessionDataFromInitializeResponse),\n/* harmony export */   getClientAttributes: () => (/* binding */ getClientAttributes),\n/* harmony export */   getServerAttributes: () => (/* binding */ getServerAttributes),\n/* harmony export */   getTransportTypes: () => (/* binding */ getTransportTypes)\n/* harmony export */ });\n/* harmony import */ var _attributes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./attributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/attributes.js\");\n/* harmony import */ var _sessionManagement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sessionManagement.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/sessionManagement.js\");\n/* harmony import */ var _validation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./validation.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/validation.js\");\n\n\n\n\n/**\n * Session and party info extraction functions for MCP server instrumentation\n *\n * Handles extraction of client/server info and session data from MCP messages.\n */\n\n\n/**\n * Extracts and validates PartyInfo from an unknown object\n * @param obj - Unknown object that might contain party info\n * @returns Validated PartyInfo object with only string properties\n */\nfunction extractPartyInfo(obj) {\n  const partyInfo = {};\n\n  if ((0,_validation_js__WEBPACK_IMPORTED_MODULE_2__.isValidContentItem)(obj)) {\n    if (typeof obj.name === 'string') {\n      partyInfo.name = obj.name;\n    }\n    if (typeof obj.title === 'string') {\n      partyInfo.title = obj.title;\n    }\n    if (typeof obj.version === 'string') {\n      partyInfo.version = obj.version;\n    }\n  }\n\n  return partyInfo;\n}\n\n/**\n * Extracts session data from \"initialize\" requests\n * @param request - JSON-RPC \"initialize\" request containing client info and protocol version\n * @returns Session data extracted from request parameters including protocol version and client info\n */\nfunction extractSessionDataFromInitializeRequest(request) {\n  const sessionData = {};\n  if ((0,_validation_js__WEBPACK_IMPORTED_MODULE_2__.isValidContentItem)(request.params)) {\n    if (typeof request.params.protocolVersion === 'string') {\n      sessionData.protocolVersion = request.params.protocolVersion;\n    }\n    if (request.params.clientInfo) {\n      sessionData.clientInfo = extractPartyInfo(request.params.clientInfo);\n    }\n  }\n  return sessionData;\n}\n\n/**\n * Extracts session data from \"initialize\" response\n * @param result - \"initialize\" response result containing server info and protocol version\n * @returns Partial session data extracted from response including protocol version and server info\n */\nfunction extractSessionDataFromInitializeResponse(result) {\n  const sessionData = {};\n  if ((0,_validation_js__WEBPACK_IMPORTED_MODULE_2__.isValidContentItem)(result)) {\n    if (typeof result.protocolVersion === 'string') {\n      sessionData.protocolVersion = result.protocolVersion;\n    }\n    if (result.serverInfo) {\n      sessionData.serverInfo = extractPartyInfo(result.serverInfo);\n    }\n  }\n  return sessionData;\n}\n\n/**\n * Build client attributes from stored client info\n * @param transport - MCP transport instance\n * @returns Client attributes for span instrumentation\n */\nfunction getClientAttributes(transport) {\n  const clientInfo = (0,_sessionManagement_js__WEBPACK_IMPORTED_MODULE_1__.getClientInfoForTransport)(transport);\n  const attributes = {};\n\n  if (clientInfo?.name) {\n    attributes['mcp.client.name'] = clientInfo.name;\n  }\n  if (clientInfo?.title) {\n    attributes['mcp.client.title'] = clientInfo.title;\n  }\n  if (clientInfo?.version) {\n    attributes['mcp.client.version'] = clientInfo.version;\n  }\n\n  return attributes;\n}\n\n/**\n * Build server attributes from stored server info\n * @param transport - MCP transport instance\n * @returns Server attributes for span instrumentation\n */\nfunction getServerAttributes(transport) {\n  const serverInfo = (0,_sessionManagement_js__WEBPACK_IMPORTED_MODULE_1__.getSessionDataForTransport)(transport)?.serverInfo;\n  const attributes = {};\n\n  if (serverInfo?.name) {\n    attributes[_attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_SERVER_NAME_ATTRIBUTE] = serverInfo.name;\n  }\n  if (serverInfo?.title) {\n    attributes[_attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_SERVER_TITLE_ATTRIBUTE] = serverInfo.title;\n  }\n  if (serverInfo?.version) {\n    attributes[_attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_SERVER_VERSION_ATTRIBUTE] = serverInfo.version;\n  }\n\n  return attributes;\n}\n\n/**\n * Extracts client connection info from extra handler data\n * @param extra - Extra handler data containing connection info\n * @returns Client address and port information\n */\nfunction extractClientInfo(extra)\n\n {\n  return {\n    address:\n      extra?.requestInfo?.remoteAddress ||\n      extra?.clientAddress ||\n      extra?.request?.ip ||\n      extra?.request?.connection?.remoteAddress,\n    port: extra?.requestInfo?.remotePort || extra?.clientPort || extra?.request?.connection?.remotePort,\n  };\n}\n\n/**\n * Extracts transport types based on transport constructor name\n * @param transport - MCP transport instance\n * @returns Transport type mapping for span attributes\n */\nfunction getTransportTypes(transport) {\n  const transportName = transport.constructor?.name?.toLowerCase() || '';\n\n  if (transportName.includes('stdio')) {\n    return { mcpTransport: 'stdio', networkTransport: 'pipe' };\n  }\n\n  if (transportName.includes('streamablehttp') || transportName.includes('streamable')) {\n    return { mcpTransport: 'http', networkTransport: 'tcp' };\n  }\n\n  if (transportName.includes('sse')) {\n    return { mcpTransport: 'sse', networkTransport: 'tcp' };\n  }\n\n  return { mcpTransport: 'unknown', networkTransport: 'unknown' };\n}\n\n/**\n * Build transport and network attributes\n * @param transport - MCP transport instance\n * @param extra - Optional extra handler data\n * @returns Transport attributes for span instrumentation\n */\nfunction buildTransportAttributes(\n  transport,\n  extra,\n) {\n  const sessionId = transport.sessionId;\n  const clientInfo = extra ? extractClientInfo(extra) : {};\n  const { mcpTransport, networkTransport } = getTransportTypes(transport);\n  const clientAttributes = getClientAttributes(transport);\n  const serverAttributes = getServerAttributes(transport);\n  const protocolVersion = (0,_sessionManagement_js__WEBPACK_IMPORTED_MODULE_1__.getProtocolVersionForTransport)(transport);\n\n  const attributes = {\n    ...(sessionId && { [_attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_SESSION_ID_ATTRIBUTE]: sessionId }),\n    ...(clientInfo.address && { [_attributes_js__WEBPACK_IMPORTED_MODULE_0__.CLIENT_ADDRESS_ATTRIBUTE]: clientInfo.address }),\n    ...(clientInfo.port && { [_attributes_js__WEBPACK_IMPORTED_MODULE_0__.CLIENT_PORT_ATTRIBUTE]: clientInfo.port }),\n    [_attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_TRANSPORT_ATTRIBUTE]: mcpTransport,\n    [_attributes_js__WEBPACK_IMPORTED_MODULE_0__.NETWORK_TRANSPORT_ATTRIBUTE]: networkTransport,\n    [_attributes_js__WEBPACK_IMPORTED_MODULE_0__.NETWORK_PROTOCOL_VERSION_ATTRIBUTE]: '2.0',\n    ...(protocolVersion && { [_attributes_js__WEBPACK_IMPORTED_MODULE_0__.MCP_PROTOCOL_VERSION_ATTRIBUTE]: protocolVersion }),\n    ...clientAttributes,\n    ...serverAttributes,\n  };\n\n  return attributes;\n}\n\n\n//# sourceMappingURL=sessionExtraction.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9tY3Atc2VydmVyL3Nlc3Npb25FeHRyYWN0aW9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBMlQ7QUFDNUw7QUFDMUU7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU0sa0VBQWtCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLGtFQUFrQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLGtFQUFrQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGdGQUF5QjtBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsaUZBQTBCO0FBQy9DOztBQUVBO0FBQ0EsZUFBZSxxRUFBeUI7QUFDeEM7QUFDQTtBQUNBLGVBQWUsc0VBQTBCO0FBQ3pDO0FBQ0E7QUFDQSxlQUFlLHdFQUE0QjtBQUMzQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBLGFBQWE7QUFDYjs7QUFFQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxpQ0FBaUM7QUFDM0M7QUFDQTtBQUNBLDBCQUEwQixxRkFBOEI7O0FBRXhEO0FBQ0EsdUJBQXVCLENBQUMsb0VBQXdCLGNBQWM7QUFDOUQsZ0NBQWdDLENBQUMsb0VBQXdCLHVCQUF1QjtBQUNoRiw2QkFBNkIsQ0FBQyxpRUFBcUIsb0JBQW9CO0FBQ3ZFLEtBQUssbUVBQXVCO0FBQzVCLEtBQUssdUVBQTJCO0FBQ2hDLEtBQUssOEVBQWtDO0FBQ3ZDLDZCQUE2QixDQUFDLDBFQUE4QixvQkFBb0I7QUFDaEY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRXVNO0FBQ3ZNIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vaW50ZWdyYXRpb25zL21jcC1zZXJ2ZXIvc2Vzc2lvbkV4dHJhY3Rpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTUNQX1BST1RPQ09MX1ZFUlNJT05fQVRUUklCVVRFLCBDTElFTlRfUE9SVF9BVFRSSUJVVEUsIENMSUVOVF9BRERSRVNTX0FUVFJJQlVURSwgTUNQX1NFU1NJT05fSURfQVRUUklCVVRFLCBORVRXT1JLX1BST1RPQ09MX1ZFUlNJT05fQVRUUklCVVRFLCBORVRXT1JLX1RSQU5TUE9SVF9BVFRSSUJVVEUsIE1DUF9UUkFOU1BPUlRfQVRUUklCVVRFLCBNQ1BfU0VSVkVSX05BTUVfQVRUUklCVVRFLCBNQ1BfU0VSVkVSX1RJVExFX0FUVFJJQlVURSwgTUNQX1NFUlZFUl9WRVJTSU9OX0FUVFJJQlVURSB9IGZyb20gJy4vYXR0cmlidXRlcy5qcyc7XG5pbXBvcnQgeyBnZXRQcm90b2NvbFZlcnNpb25Gb3JUcmFuc3BvcnQsIGdldENsaWVudEluZm9Gb3JUcmFuc3BvcnQsIGdldFNlc3Npb25EYXRhRm9yVHJhbnNwb3J0IH0gZnJvbSAnLi9zZXNzaW9uTWFuYWdlbWVudC5qcyc7XG5pbXBvcnQgeyBpc1ZhbGlkQ29udGVudEl0ZW0gfSBmcm9tICcuL3ZhbGlkYXRpb24uanMnO1xuXG4vKipcbiAqIFNlc3Npb24gYW5kIHBhcnR5IGluZm8gZXh0cmFjdGlvbiBmdW5jdGlvbnMgZm9yIE1DUCBzZXJ2ZXIgaW5zdHJ1bWVudGF0aW9uXG4gKlxuICogSGFuZGxlcyBleHRyYWN0aW9uIG9mIGNsaWVudC9zZXJ2ZXIgaW5mbyBhbmQgc2Vzc2lvbiBkYXRhIGZyb20gTUNQIG1lc3NhZ2VzLlxuICovXG5cblxuLyoqXG4gKiBFeHRyYWN0cyBhbmQgdmFsaWRhdGVzIFBhcnR5SW5mbyBmcm9tIGFuIHVua25vd24gb2JqZWN0XG4gKiBAcGFyYW0gb2JqIC0gVW5rbm93biBvYmplY3QgdGhhdCBtaWdodCBjb250YWluIHBhcnR5IGluZm9cbiAqIEByZXR1cm5zIFZhbGlkYXRlZCBQYXJ0eUluZm8gb2JqZWN0IHdpdGggb25seSBzdHJpbmcgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBleHRyYWN0UGFydHlJbmZvKG9iaikge1xuICBjb25zdCBwYXJ0eUluZm8gPSB7fTtcblxuICBpZiAoaXNWYWxpZENvbnRlbnRJdGVtKG9iaikpIHtcbiAgICBpZiAodHlwZW9mIG9iai5uYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgcGFydHlJbmZvLm5hbWUgPSBvYmoubmFtZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmoudGl0bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwYXJ0eUluZm8udGl0bGUgPSBvYmoudGl0bGU7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqLnZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICBwYXJ0eUluZm8udmVyc2lvbiA9IG9iai52ZXJzaW9uO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJ0eUluZm87XG59XG5cbi8qKlxuICogRXh0cmFjdHMgc2Vzc2lvbiBkYXRhIGZyb20gXCJpbml0aWFsaXplXCIgcmVxdWVzdHNcbiAqIEBwYXJhbSByZXF1ZXN0IC0gSlNPTi1SUEMgXCJpbml0aWFsaXplXCIgcmVxdWVzdCBjb250YWluaW5nIGNsaWVudCBpbmZvIGFuZCBwcm90b2NvbCB2ZXJzaW9uXG4gKiBAcmV0dXJucyBTZXNzaW9uIGRhdGEgZXh0cmFjdGVkIGZyb20gcmVxdWVzdCBwYXJhbWV0ZXJzIGluY2x1ZGluZyBwcm90b2NvbCB2ZXJzaW9uIGFuZCBjbGllbnQgaW5mb1xuICovXG5mdW5jdGlvbiBleHRyYWN0U2Vzc2lvbkRhdGFGcm9tSW5pdGlhbGl6ZVJlcXVlc3QocmVxdWVzdCkge1xuICBjb25zdCBzZXNzaW9uRGF0YSA9IHt9O1xuICBpZiAoaXNWYWxpZENvbnRlbnRJdGVtKHJlcXVlc3QucGFyYW1zKSkge1xuICAgIGlmICh0eXBlb2YgcmVxdWVzdC5wYXJhbXMucHJvdG9jb2xWZXJzaW9uID09PSAnc3RyaW5nJykge1xuICAgICAgc2Vzc2lvbkRhdGEucHJvdG9jb2xWZXJzaW9uID0gcmVxdWVzdC5wYXJhbXMucHJvdG9jb2xWZXJzaW9uO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5wYXJhbXMuY2xpZW50SW5mbykge1xuICAgICAgc2Vzc2lvbkRhdGEuY2xpZW50SW5mbyA9IGV4dHJhY3RQYXJ0eUluZm8ocmVxdWVzdC5wYXJhbXMuY2xpZW50SW5mbyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzZXNzaW9uRGF0YTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBzZXNzaW9uIGRhdGEgZnJvbSBcImluaXRpYWxpemVcIiByZXNwb25zZVxuICogQHBhcmFtIHJlc3VsdCAtIFwiaW5pdGlhbGl6ZVwiIHJlc3BvbnNlIHJlc3VsdCBjb250YWluaW5nIHNlcnZlciBpbmZvIGFuZCBwcm90b2NvbCB2ZXJzaW9uXG4gKiBAcmV0dXJucyBQYXJ0aWFsIHNlc3Npb24gZGF0YSBleHRyYWN0ZWQgZnJvbSByZXNwb25zZSBpbmNsdWRpbmcgcHJvdG9jb2wgdmVyc2lvbiBhbmQgc2VydmVyIGluZm9cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFNlc3Npb25EYXRhRnJvbUluaXRpYWxpemVSZXNwb25zZShyZXN1bHQpIHtcbiAgY29uc3Qgc2Vzc2lvbkRhdGEgPSB7fTtcbiAgaWYgKGlzVmFsaWRDb250ZW50SXRlbShyZXN1bHQpKSB7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQucHJvdG9jb2xWZXJzaW9uID09PSAnc3RyaW5nJykge1xuICAgICAgc2Vzc2lvbkRhdGEucHJvdG9jb2xWZXJzaW9uID0gcmVzdWx0LnByb3RvY29sVmVyc2lvbjtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5zZXJ2ZXJJbmZvKSB7XG4gICAgICBzZXNzaW9uRGF0YS5zZXJ2ZXJJbmZvID0gZXh0cmFjdFBhcnR5SW5mbyhyZXN1bHQuc2VydmVySW5mbyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzZXNzaW9uRGF0YTtcbn1cblxuLyoqXG4gKiBCdWlsZCBjbGllbnQgYXR0cmlidXRlcyBmcm9tIHN0b3JlZCBjbGllbnQgaW5mb1xuICogQHBhcmFtIHRyYW5zcG9ydCAtIE1DUCB0cmFuc3BvcnQgaW5zdGFuY2VcbiAqIEByZXR1cm5zIENsaWVudCBhdHRyaWJ1dGVzIGZvciBzcGFuIGluc3RydW1lbnRhdGlvblxuICovXG5mdW5jdGlvbiBnZXRDbGllbnRBdHRyaWJ1dGVzKHRyYW5zcG9ydCkge1xuICBjb25zdCBjbGllbnRJbmZvID0gZ2V0Q2xpZW50SW5mb0ZvclRyYW5zcG9ydCh0cmFuc3BvcnQpO1xuICBjb25zdCBhdHRyaWJ1dGVzID0ge307XG5cbiAgaWYgKGNsaWVudEluZm8/Lm5hbWUpIHtcbiAgICBhdHRyaWJ1dGVzWydtY3AuY2xpZW50Lm5hbWUnXSA9IGNsaWVudEluZm8ubmFtZTtcbiAgfVxuICBpZiAoY2xpZW50SW5mbz8udGl0bGUpIHtcbiAgICBhdHRyaWJ1dGVzWydtY3AuY2xpZW50LnRpdGxlJ10gPSBjbGllbnRJbmZvLnRpdGxlO1xuICB9XG4gIGlmIChjbGllbnRJbmZvPy52ZXJzaW9uKSB7XG4gICAgYXR0cmlidXRlc1snbWNwLmNsaWVudC52ZXJzaW9uJ10gPSBjbGllbnRJbmZvLnZlcnNpb247XG4gIH1cblxuICByZXR1cm4gYXR0cmlidXRlcztcbn1cblxuLyoqXG4gKiBCdWlsZCBzZXJ2ZXIgYXR0cmlidXRlcyBmcm9tIHN0b3JlZCBzZXJ2ZXIgaW5mb1xuICogQHBhcmFtIHRyYW5zcG9ydCAtIE1DUCB0cmFuc3BvcnQgaW5zdGFuY2VcbiAqIEByZXR1cm5zIFNlcnZlciBhdHRyaWJ1dGVzIGZvciBzcGFuIGluc3RydW1lbnRhdGlvblxuICovXG5mdW5jdGlvbiBnZXRTZXJ2ZXJBdHRyaWJ1dGVzKHRyYW5zcG9ydCkge1xuICBjb25zdCBzZXJ2ZXJJbmZvID0gZ2V0U2Vzc2lvbkRhdGFGb3JUcmFuc3BvcnQodHJhbnNwb3J0KT8uc2VydmVySW5mbztcbiAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuXG4gIGlmIChzZXJ2ZXJJbmZvPy5uYW1lKSB7XG4gICAgYXR0cmlidXRlc1tNQ1BfU0VSVkVSX05BTUVfQVRUUklCVVRFXSA9IHNlcnZlckluZm8ubmFtZTtcbiAgfVxuICBpZiAoc2VydmVySW5mbz8udGl0bGUpIHtcbiAgICBhdHRyaWJ1dGVzW01DUF9TRVJWRVJfVElUTEVfQVRUUklCVVRFXSA9IHNlcnZlckluZm8udGl0bGU7XG4gIH1cbiAgaWYgKHNlcnZlckluZm8/LnZlcnNpb24pIHtcbiAgICBhdHRyaWJ1dGVzW01DUF9TRVJWRVJfVkVSU0lPTl9BVFRSSUJVVEVdID0gc2VydmVySW5mby52ZXJzaW9uO1xuICB9XG5cbiAgcmV0dXJuIGF0dHJpYnV0ZXM7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgY2xpZW50IGNvbm5lY3Rpb24gaW5mbyBmcm9tIGV4dHJhIGhhbmRsZXIgZGF0YVxuICogQHBhcmFtIGV4dHJhIC0gRXh0cmEgaGFuZGxlciBkYXRhIGNvbnRhaW5pbmcgY29ubmVjdGlvbiBpbmZvXG4gKiBAcmV0dXJucyBDbGllbnQgYWRkcmVzcyBhbmQgcG9ydCBpbmZvcm1hdGlvblxuICovXG5mdW5jdGlvbiBleHRyYWN0Q2xpZW50SW5mbyhleHRyYSlcblxuIHtcbiAgcmV0dXJuIHtcbiAgICBhZGRyZXNzOlxuICAgICAgZXh0cmE/LnJlcXVlc3RJbmZvPy5yZW1vdGVBZGRyZXNzIHx8XG4gICAgICBleHRyYT8uY2xpZW50QWRkcmVzcyB8fFxuICAgICAgZXh0cmE/LnJlcXVlc3Q/LmlwIHx8XG4gICAgICBleHRyYT8ucmVxdWVzdD8uY29ubmVjdGlvbj8ucmVtb3RlQWRkcmVzcyxcbiAgICBwb3J0OiBleHRyYT8ucmVxdWVzdEluZm8/LnJlbW90ZVBvcnQgfHwgZXh0cmE/LmNsaWVudFBvcnQgfHwgZXh0cmE/LnJlcXVlc3Q/LmNvbm5lY3Rpb24/LnJlbW90ZVBvcnQsXG4gIH07XG59XG5cbi8qKlxuICogRXh0cmFjdHMgdHJhbnNwb3J0IHR5cGVzIGJhc2VkIG9uIHRyYW5zcG9ydCBjb25zdHJ1Y3RvciBuYW1lXG4gKiBAcGFyYW0gdHJhbnNwb3J0IC0gTUNQIHRyYW5zcG9ydCBpbnN0YW5jZVxuICogQHJldHVybnMgVHJhbnNwb3J0IHR5cGUgbWFwcGluZyBmb3Igc3BhbiBhdHRyaWJ1dGVzXG4gKi9cbmZ1bmN0aW9uIGdldFRyYW5zcG9ydFR5cGVzKHRyYW5zcG9ydCkge1xuICBjb25zdCB0cmFuc3BvcnROYW1lID0gdHJhbnNwb3J0LmNvbnN0cnVjdG9yPy5uYW1lPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuXG4gIGlmICh0cmFuc3BvcnROYW1lLmluY2x1ZGVzKCdzdGRpbycpKSB7XG4gICAgcmV0dXJuIHsgbWNwVHJhbnNwb3J0OiAnc3RkaW8nLCBuZXR3b3JrVHJhbnNwb3J0OiAncGlwZScgfTtcbiAgfVxuXG4gIGlmICh0cmFuc3BvcnROYW1lLmluY2x1ZGVzKCdzdHJlYW1hYmxlaHR0cCcpIHx8IHRyYW5zcG9ydE5hbWUuaW5jbHVkZXMoJ3N0cmVhbWFibGUnKSkge1xuICAgIHJldHVybiB7IG1jcFRyYW5zcG9ydDogJ2h0dHAnLCBuZXR3b3JrVHJhbnNwb3J0OiAndGNwJyB9O1xuICB9XG5cbiAgaWYgKHRyYW5zcG9ydE5hbWUuaW5jbHVkZXMoJ3NzZScpKSB7XG4gICAgcmV0dXJuIHsgbWNwVHJhbnNwb3J0OiAnc3NlJywgbmV0d29ya1RyYW5zcG9ydDogJ3RjcCcgfTtcbiAgfVxuXG4gIHJldHVybiB7IG1jcFRyYW5zcG9ydDogJ3Vua25vd24nLCBuZXR3b3JrVHJhbnNwb3J0OiAndW5rbm93bicgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0cmFuc3BvcnQgYW5kIG5ldHdvcmsgYXR0cmlidXRlc1xuICogQHBhcmFtIHRyYW5zcG9ydCAtIE1DUCB0cmFuc3BvcnQgaW5zdGFuY2VcbiAqIEBwYXJhbSBleHRyYSAtIE9wdGlvbmFsIGV4dHJhIGhhbmRsZXIgZGF0YVxuICogQHJldHVybnMgVHJhbnNwb3J0IGF0dHJpYnV0ZXMgZm9yIHNwYW4gaW5zdHJ1bWVudGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVHJhbnNwb3J0QXR0cmlidXRlcyhcbiAgdHJhbnNwb3J0LFxuICBleHRyYSxcbikge1xuICBjb25zdCBzZXNzaW9uSWQgPSB0cmFuc3BvcnQuc2Vzc2lvbklkO1xuICBjb25zdCBjbGllbnRJbmZvID0gZXh0cmEgPyBleHRyYWN0Q2xpZW50SW5mbyhleHRyYSkgOiB7fTtcbiAgY29uc3QgeyBtY3BUcmFuc3BvcnQsIG5ldHdvcmtUcmFuc3BvcnQgfSA9IGdldFRyYW5zcG9ydFR5cGVzKHRyYW5zcG9ydCk7XG4gIGNvbnN0IGNsaWVudEF0dHJpYnV0ZXMgPSBnZXRDbGllbnRBdHRyaWJ1dGVzKHRyYW5zcG9ydCk7XG4gIGNvbnN0IHNlcnZlckF0dHJpYnV0ZXMgPSBnZXRTZXJ2ZXJBdHRyaWJ1dGVzKHRyYW5zcG9ydCk7XG4gIGNvbnN0IHByb3RvY29sVmVyc2lvbiA9IGdldFByb3RvY29sVmVyc2lvbkZvclRyYW5zcG9ydCh0cmFuc3BvcnQpO1xuXG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgLi4uKHNlc3Npb25JZCAmJiB7IFtNQ1BfU0VTU0lPTl9JRF9BVFRSSUJVVEVdOiBzZXNzaW9uSWQgfSksXG4gICAgLi4uKGNsaWVudEluZm8uYWRkcmVzcyAmJiB7IFtDTElFTlRfQUREUkVTU19BVFRSSUJVVEVdOiBjbGllbnRJbmZvLmFkZHJlc3MgfSksXG4gICAgLi4uKGNsaWVudEluZm8ucG9ydCAmJiB7IFtDTElFTlRfUE9SVF9BVFRSSUJVVEVdOiBjbGllbnRJbmZvLnBvcnQgfSksXG4gICAgW01DUF9UUkFOU1BPUlRfQVRUUklCVVRFXTogbWNwVHJhbnNwb3J0LFxuICAgIFtORVRXT1JLX1RSQU5TUE9SVF9BVFRSSUJVVEVdOiBuZXR3b3JrVHJhbnNwb3J0LFxuICAgIFtORVRXT1JLX1BST1RPQ09MX1ZFUlNJT05fQVRUUklCVVRFXTogJzIuMCcsXG4gICAgLi4uKHByb3RvY29sVmVyc2lvbiAmJiB7IFtNQ1BfUFJPVE9DT0xfVkVSU0lPTl9BVFRSSUJVVEVdOiBwcm90b2NvbFZlcnNpb24gfSksXG4gICAgLi4uY2xpZW50QXR0cmlidXRlcyxcbiAgICAuLi5zZXJ2ZXJBdHRyaWJ1dGVzLFxuICB9O1xuXG4gIHJldHVybiBhdHRyaWJ1dGVzO1xufVxuXG5leHBvcnQgeyBidWlsZFRyYW5zcG9ydEF0dHJpYnV0ZXMsIGV4dHJhY3RDbGllbnRJbmZvLCBleHRyYWN0U2Vzc2lvbkRhdGFGcm9tSW5pdGlhbGl6ZVJlcXVlc3QsIGV4dHJhY3RTZXNzaW9uRGF0YUZyb21Jbml0aWFsaXplUmVzcG9uc2UsIGdldENsaWVudEF0dHJpYnV0ZXMsIGdldFNlcnZlckF0dHJpYnV0ZXMsIGdldFRyYW5zcG9ydFR5cGVzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXNzaW9uRXh0cmFjdGlvbi5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/sessionExtraction.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/sessionManagement.js":
/*!*********************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/sessionManagement.js ***!
  \*********************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   cleanupSessionDataForTransport: () => (/* binding */ cleanupSessionDataForTransport),\n/* harmony export */   getClientInfoForTransport: () => (/* binding */ getClientInfoForTransport),\n/* harmony export */   getProtocolVersionForTransport: () => (/* binding */ getProtocolVersionForTransport),\n/* harmony export */   getSessionDataForTransport: () => (/* binding */ getSessionDataForTransport),\n/* harmony export */   storeSessionDataForTransport: () => (/* binding */ storeSessionDataForTransport),\n/* harmony export */   updateSessionDataForTransport: () => (/* binding */ updateSessionDataForTransport)\n/* harmony export */ });\n/**\n * Transport-scoped session data storage (only for transports with sessionId)\n * @internal Maps transport instances to session-level data\n */\nconst transportToSessionData = new WeakMap();\n\n/**\n * Stores session data for a transport with sessionId\n * @param transport - MCP transport instance\n * @param sessionData - Session data to store\n */\nfunction storeSessionDataForTransport(transport, sessionData) {\n  if (transport.sessionId) {\n    transportToSessionData.set(transport, sessionData);\n  }\n}\n\n/**\n * Updates session data for a transport with sessionId (merges with existing data)\n * @param transport - MCP transport instance\n * @param partialSessionData - Partial session data to merge with existing data\n */\nfunction updateSessionDataForTransport(transport, partialSessionData) {\n  if (transport.sessionId) {\n    const existingData = transportToSessionData.get(transport) || {};\n    transportToSessionData.set(transport, { ...existingData, ...partialSessionData });\n  }\n}\n\n/**\n * Retrieves client information for a transport\n * @param transport - MCP transport instance\n * @returns Client information if available\n */\nfunction getClientInfoForTransport(transport) {\n  return transportToSessionData.get(transport)?.clientInfo;\n}\n\n/**\n * Retrieves protocol version for a transport\n * @param transport - MCP transport instance\n * @returns Protocol version if available\n */\nfunction getProtocolVersionForTransport(transport) {\n  return transportToSessionData.get(transport)?.protocolVersion;\n}\n\n/**\n * Retrieves full session data for a transport\n * @param transport - MCP transport instance\n * @returns Complete session data if available\n */\nfunction getSessionDataForTransport(transport) {\n  return transportToSessionData.get(transport);\n}\n\n/**\n * Cleans up session data for a specific transport (when that transport closes)\n * @param transport - MCP transport instance\n */\nfunction cleanupSessionDataForTransport(transport) {\n  transportToSessionData.delete(transport);\n}\n\n\n//# sourceMappingURL=sessionManagement.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9tY3Atc2VydmVyL3Nlc3Npb25NYW5hZ2VtZW50LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0Qyx3Q0FBd0M7QUFDcEY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFOEw7QUFDOUwiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9pbnRlZ3JhdGlvbnMvbWNwLXNlcnZlci9zZXNzaW9uTWFuYWdlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRyYW5zcG9ydC1zY29wZWQgc2Vzc2lvbiBkYXRhIHN0b3JhZ2UgKG9ubHkgZm9yIHRyYW5zcG9ydHMgd2l0aCBzZXNzaW9uSWQpXG4gKiBAaW50ZXJuYWwgTWFwcyB0cmFuc3BvcnQgaW5zdGFuY2VzIHRvIHNlc3Npb24tbGV2ZWwgZGF0YVxuICovXG5jb25zdCB0cmFuc3BvcnRUb1Nlc3Npb25EYXRhID0gbmV3IFdlYWtNYXAoKTtcblxuLyoqXG4gKiBTdG9yZXMgc2Vzc2lvbiBkYXRhIGZvciBhIHRyYW5zcG9ydCB3aXRoIHNlc3Npb25JZFxuICogQHBhcmFtIHRyYW5zcG9ydCAtIE1DUCB0cmFuc3BvcnQgaW5zdGFuY2VcbiAqIEBwYXJhbSBzZXNzaW9uRGF0YSAtIFNlc3Npb24gZGF0YSB0byBzdG9yZVxuICovXG5mdW5jdGlvbiBzdG9yZVNlc3Npb25EYXRhRm9yVHJhbnNwb3J0KHRyYW5zcG9ydCwgc2Vzc2lvbkRhdGEpIHtcbiAgaWYgKHRyYW5zcG9ydC5zZXNzaW9uSWQpIHtcbiAgICB0cmFuc3BvcnRUb1Nlc3Npb25EYXRhLnNldCh0cmFuc3BvcnQsIHNlc3Npb25EYXRhKTtcbiAgfVxufVxuXG4vKipcbiAqIFVwZGF0ZXMgc2Vzc2lvbiBkYXRhIGZvciBhIHRyYW5zcG9ydCB3aXRoIHNlc3Npb25JZCAobWVyZ2VzIHdpdGggZXhpc3RpbmcgZGF0YSlcbiAqIEBwYXJhbSB0cmFuc3BvcnQgLSBNQ1AgdHJhbnNwb3J0IGluc3RhbmNlXG4gKiBAcGFyYW0gcGFydGlhbFNlc3Npb25EYXRhIC0gUGFydGlhbCBzZXNzaW9uIGRhdGEgdG8gbWVyZ2Ugd2l0aCBleGlzdGluZyBkYXRhXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVNlc3Npb25EYXRhRm9yVHJhbnNwb3J0KHRyYW5zcG9ydCwgcGFydGlhbFNlc3Npb25EYXRhKSB7XG4gIGlmICh0cmFuc3BvcnQuc2Vzc2lvbklkKSB7XG4gICAgY29uc3QgZXhpc3RpbmdEYXRhID0gdHJhbnNwb3J0VG9TZXNzaW9uRGF0YS5nZXQodHJhbnNwb3J0KSB8fCB7fTtcbiAgICB0cmFuc3BvcnRUb1Nlc3Npb25EYXRhLnNldCh0cmFuc3BvcnQsIHsgLi4uZXhpc3RpbmdEYXRhLCAuLi5wYXJ0aWFsU2Vzc2lvbkRhdGEgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgY2xpZW50IGluZm9ybWF0aW9uIGZvciBhIHRyYW5zcG9ydFxuICogQHBhcmFtIHRyYW5zcG9ydCAtIE1DUCB0cmFuc3BvcnQgaW5zdGFuY2VcbiAqIEByZXR1cm5zIENsaWVudCBpbmZvcm1hdGlvbiBpZiBhdmFpbGFibGVcbiAqL1xuZnVuY3Rpb24gZ2V0Q2xpZW50SW5mb0ZvclRyYW5zcG9ydCh0cmFuc3BvcnQpIHtcbiAgcmV0dXJuIHRyYW5zcG9ydFRvU2Vzc2lvbkRhdGEuZ2V0KHRyYW5zcG9ydCk/LmNsaWVudEluZm87XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHByb3RvY29sIHZlcnNpb24gZm9yIGEgdHJhbnNwb3J0XG4gKiBAcGFyYW0gdHJhbnNwb3J0IC0gTUNQIHRyYW5zcG9ydCBpbnN0YW5jZVxuICogQHJldHVybnMgUHJvdG9jb2wgdmVyc2lvbiBpZiBhdmFpbGFibGVcbiAqL1xuZnVuY3Rpb24gZ2V0UHJvdG9jb2xWZXJzaW9uRm9yVHJhbnNwb3J0KHRyYW5zcG9ydCkge1xuICByZXR1cm4gdHJhbnNwb3J0VG9TZXNzaW9uRGF0YS5nZXQodHJhbnNwb3J0KT8ucHJvdG9jb2xWZXJzaW9uO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBmdWxsIHNlc3Npb24gZGF0YSBmb3IgYSB0cmFuc3BvcnRcbiAqIEBwYXJhbSB0cmFuc3BvcnQgLSBNQ1AgdHJhbnNwb3J0IGluc3RhbmNlXG4gKiBAcmV0dXJucyBDb21wbGV0ZSBzZXNzaW9uIGRhdGEgaWYgYXZhaWxhYmxlXG4gKi9cbmZ1bmN0aW9uIGdldFNlc3Npb25EYXRhRm9yVHJhbnNwb3J0KHRyYW5zcG9ydCkge1xuICByZXR1cm4gdHJhbnNwb3J0VG9TZXNzaW9uRGF0YS5nZXQodHJhbnNwb3J0KTtcbn1cblxuLyoqXG4gKiBDbGVhbnMgdXAgc2Vzc2lvbiBkYXRhIGZvciBhIHNwZWNpZmljIHRyYW5zcG9ydCAod2hlbiB0aGF0IHRyYW5zcG9ydCBjbG9zZXMpXG4gKiBAcGFyYW0gdHJhbnNwb3J0IC0gTUNQIHRyYW5zcG9ydCBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBjbGVhbnVwU2Vzc2lvbkRhdGFGb3JUcmFuc3BvcnQodHJhbnNwb3J0KSB7XG4gIHRyYW5zcG9ydFRvU2Vzc2lvbkRhdGEuZGVsZXRlKHRyYW5zcG9ydCk7XG59XG5cbmV4cG9ydCB7IGNsZWFudXBTZXNzaW9uRGF0YUZvclRyYW5zcG9ydCwgZ2V0Q2xpZW50SW5mb0ZvclRyYW5zcG9ydCwgZ2V0UHJvdG9jb2xWZXJzaW9uRm9yVHJhbnNwb3J0LCBnZXRTZXNzaW9uRGF0YUZvclRyYW5zcG9ydCwgc3RvcmVTZXNzaW9uRGF0YUZvclRyYW5zcG9ydCwgdXBkYXRlU2Vzc2lvbkRhdGFGb3JUcmFuc3BvcnQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlc3Npb25NYW5hZ2VtZW50LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/sessionManagement.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/spans.js":
/*!*********************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/spans.js ***!
  \*********************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   buildMcpServerSpanConfig: () => (/* binding */ buildMcpServerSpanConfig),\n/* harmony export */   createMcpNotificationSpan: () => (/* binding */ createMcpNotificationSpan),\n/* harmony export */   createMcpOutgoingNotificationSpan: () => (/* binding */ createMcpOutgoingNotificationSpan)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../semanticAttributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/semanticAttributes.js\");\n/* harmony import */ var _tracing_trace_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../tracing/trace.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/trace.js\");\n/* harmony import */ var _attributeExtraction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./attributeExtraction.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/attributeExtraction.js\");\n/* harmony import */ var _attributes_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./attributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/attributes.js\");\n/* harmony import */ var _methodConfig_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./methodConfig.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/methodConfig.js\");\n/* harmony import */ var _piiFiltering_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./piiFiltering.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/piiFiltering.js\");\n/* harmony import */ var _sessionExtraction_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./sessionExtraction.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/sessionExtraction.js\");\n\n\n\n\n\n\n\n\n\n/**\n * Span creation and management functions for MCP server instrumentation\n *\n * Provides unified span creation following OpenTelemetry MCP semantic conventions and our opinitionated take on MCP.\n * Handles both request and notification spans with attribute extraction.\n */\n\n\n/**\n * Creates a span name based on the method and target\n * @internal\n * @param method - MCP method name\n * @param target - Optional target identifier\n * @returns Formatted span name\n */\nfunction createSpanName(method, target) {\n  return target ? `${method} ${target}` : method;\n}\n\n/**\n * Build Sentry-specific attributes based on span type\n * @internal\n * @param type - Span type configuration\n * @returns Sentry-specific attributes\n */\nfunction buildSentryAttributes(type) {\n  let op;\n  let origin;\n\n  switch (type) {\n    case 'request':\n      op = _attributes_js__WEBPACK_IMPORTED_MODULE_4__.MCP_SERVER_OP_VALUE;\n      origin = _attributes_js__WEBPACK_IMPORTED_MODULE_4__.MCP_FUNCTION_ORIGIN_VALUE;\n      break;\n    case 'notification-incoming':\n      op = _attributes_js__WEBPACK_IMPORTED_MODULE_4__.MCP_NOTIFICATION_CLIENT_TO_SERVER_OP_VALUE;\n      origin = _attributes_js__WEBPACK_IMPORTED_MODULE_4__.MCP_NOTIFICATION_ORIGIN_VALUE;\n      break;\n    case 'notification-outgoing':\n      op = _attributes_js__WEBPACK_IMPORTED_MODULE_4__.MCP_NOTIFICATION_SERVER_TO_CLIENT_OP_VALUE;\n      origin = _attributes_js__WEBPACK_IMPORTED_MODULE_4__.MCP_NOTIFICATION_ORIGIN_VALUE;\n      break;\n  }\n\n  return {\n    [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: op,\n    [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: origin,\n    [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: _attributes_js__WEBPACK_IMPORTED_MODULE_4__.MCP_ROUTE_SOURCE_VALUE,\n  };\n}\n\n/**\n * Unified builder for creating MCP spans\n * @internal\n * @param config - Span configuration\n * @returns Created span\n */\nfunction createMcpSpan(config) {\n  const { type, message, transport, extra, callback } = config;\n  const { method } = message;\n  const params = message.params ;\n\n  // Determine span name based on type and OTEL conventions\n  let spanName;\n  if (type === 'request') {\n    const targetInfo = (0,_methodConfig_js__WEBPACK_IMPORTED_MODULE_5__.extractTargetInfo)(method, params || {});\n    spanName = createSpanName(method, targetInfo.target);\n  } else {\n    // For notifications, use method name directly per OpenTelemetry conventions\n    spanName = method;\n  }\n\n  const rawAttributes = {\n    ...(0,_sessionExtraction_js__WEBPACK_IMPORTED_MODULE_7__.buildTransportAttributes)(transport, extra),\n    [_attributes_js__WEBPACK_IMPORTED_MODULE_4__.MCP_METHOD_NAME_ATTRIBUTE]: method,\n    ...(0,_attributeExtraction_js__WEBPACK_IMPORTED_MODULE_3__.buildTypeSpecificAttributes)(type, message, params),\n    ...buildSentryAttributes(type),\n  };\n\n  const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  const sendDefaultPii = Boolean(client?.getOptions().sendDefaultPii);\n  const attributes = (0,_piiFiltering_js__WEBPACK_IMPORTED_MODULE_6__.filterMcpPiiFromSpanData)(rawAttributes, sendDefaultPii) ;\n\n  return (0,_tracing_trace_js__WEBPACK_IMPORTED_MODULE_2__.startSpan)(\n    {\n      name: spanName,\n      forceTransaction: true,\n      attributes,\n    },\n    callback,\n  );\n}\n\n/**\n * Creates a span for incoming MCP notifications\n * @param jsonRpcMessage - Notification message\n * @param transport - MCP transport instance\n * @param extra - Extra handler data\n * @param callback - Span execution callback\n * @returns Span execution result\n */\nfunction createMcpNotificationSpan(\n  jsonRpcMessage,\n  transport,\n  extra,\n  callback,\n) {\n  return createMcpSpan({\n    type: 'notification-incoming',\n    message: jsonRpcMessage,\n    transport,\n    extra,\n    callback,\n  });\n}\n\n/**\n * Creates a span for outgoing MCP notifications\n * @param jsonRpcMessage - Notification message\n * @param transport - MCP transport instance\n * @param callback - Span execution callback\n * @returns Span execution result\n */\nfunction createMcpOutgoingNotificationSpan(\n  jsonRpcMessage,\n  transport,\n  callback,\n) {\n  return createMcpSpan({\n    type: 'notification-outgoing',\n    message: jsonRpcMessage,\n    transport,\n    callback,\n  });\n}\n\n/**\n * Builds span configuration for MCP server requests\n * @param jsonRpcMessage - Request message\n * @param transport - MCP transport instance\n * @param extra - Optional extra handler data\n * @returns Span configuration object\n */\nfunction buildMcpServerSpanConfig(\n  jsonRpcMessage,\n  transport,\n  extra,\n)\n\n {\n  const { method } = jsonRpcMessage;\n  const params = jsonRpcMessage.params ;\n\n  const targetInfo = (0,_methodConfig_js__WEBPACK_IMPORTED_MODULE_5__.extractTargetInfo)(method, params || {});\n  const spanName = createSpanName(method, targetInfo.target);\n\n  const rawAttributes = {\n    ...(0,_sessionExtraction_js__WEBPACK_IMPORTED_MODULE_7__.buildTransportAttributes)(transport, extra),\n    [_attributes_js__WEBPACK_IMPORTED_MODULE_4__.MCP_METHOD_NAME_ATTRIBUTE]: method,\n    ...(0,_attributeExtraction_js__WEBPACK_IMPORTED_MODULE_3__.buildTypeSpecificAttributes)('request', jsonRpcMessage, params),\n    ...buildSentryAttributes('request'),\n  };\n\n  const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  const sendDefaultPii = Boolean(client?.getOptions().sendDefaultPii);\n  const attributes = (0,_piiFiltering_js__WEBPACK_IMPORTED_MODULE_6__.filterMcpPiiFromSpanData)(rawAttributes, sendDefaultPii) ;\n\n  return {\n    name: spanName,\n    op: _attributes_js__WEBPACK_IMPORTED_MODULE_4__.MCP_SERVER_OP_VALUE,\n    forceTransaction: true,\n    attributes,\n  };\n}\n\n\n//# sourceMappingURL=spans.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9tY3Atc2VydmVyL3NwYW5zLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQW1EO0FBQzRGO0FBQzVGO0FBQ29CO0FBQ29MO0FBQ3JNO0FBQ087QUFDSzs7QUFFbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFFBQVEsRUFBRSxPQUFPO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVywrREFBbUI7QUFDOUIsZUFBZSxxRUFBeUI7QUFDeEM7QUFDQTtBQUNBLFdBQVcsc0ZBQTBDO0FBQ3JELGVBQWUseUVBQTZCO0FBQzVDO0FBQ0E7QUFDQSxXQUFXLHNGQUEwQztBQUNyRCxlQUFlLHlFQUE2QjtBQUM1QztBQUNBOztBQUVBO0FBQ0EsS0FBSyxnRkFBNEI7QUFDakMsS0FBSyxvRkFBZ0M7QUFDckMsS0FBSyxvRkFBZ0MsR0FBRyxrRUFBc0I7QUFDOUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsNENBQTRDO0FBQ3RELFVBQVUsU0FBUztBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsbUVBQWlCLHFCQUFxQjtBQUM3RDtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPLCtFQUF3QjtBQUMvQixLQUFLLHFFQUF5QjtBQUM5QixPQUFPLG9GQUEyQjtBQUNsQztBQUNBOztBQUVBLGlCQUFpQiw0REFBUztBQUMxQjtBQUNBLHFCQUFxQiwwRUFBd0I7O0FBRTdDLFNBQVMsNERBQVM7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVLFNBQVM7QUFDbkI7O0FBRUEscUJBQXFCLG1FQUFpQixxQkFBcUI7QUFDM0Q7O0FBRUE7QUFDQSxPQUFPLCtFQUF3QjtBQUMvQixLQUFLLHFFQUF5QjtBQUM5QixPQUFPLG9GQUEyQjtBQUNsQztBQUNBOztBQUVBLGlCQUFpQiw0REFBUztBQUMxQjtBQUNBLHFCQUFxQiwwRUFBd0I7O0FBRTdDO0FBQ0E7QUFDQSxRQUFRLCtEQUFtQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTs7QUFFa0c7QUFDbEciLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9pbnRlZ3JhdGlvbnMvbWNwLXNlcnZlci9zcGFucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDbGllbnQgfSBmcm9tICcuLi8uLi9jdXJyZW50U2NvcGVzLmpzJztcbmltcG9ydCB7IFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTiwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUCB9IGZyb20gJy4uLy4uL3NlbWFudGljQXR0cmlidXRlcy5qcyc7XG5pbXBvcnQgeyBzdGFydFNwYW4gfSBmcm9tICcuLi8uLi90cmFjaW5nL3RyYWNlLmpzJztcbmltcG9ydCB7IGJ1aWxkVHlwZVNwZWNpZmljQXR0cmlidXRlcyB9IGZyb20gJy4vYXR0cmlidXRlRXh0cmFjdGlvbi5qcyc7XG5pbXBvcnQgeyBNQ1BfU0VSVkVSX09QX1ZBTFVFLCBNQ1BfTUVUSE9EX05BTUVfQVRUUklCVVRFLCBNQ1BfUk9VVEVfU09VUkNFX1ZBTFVFLCBNQ1BfTk9USUZJQ0FUSU9OX1NFUlZFUl9UT19DTElFTlRfT1BfVkFMVUUsIE1DUF9OT1RJRklDQVRJT05fT1JJR0lOX1ZBTFVFLCBNQ1BfTk9USUZJQ0FUSU9OX0NMSUVOVF9UT19TRVJWRVJfT1BfVkFMVUUsIE1DUF9GVU5DVElPTl9PUklHSU5fVkFMVUUgfSBmcm9tICcuL2F0dHJpYnV0ZXMuanMnO1xuaW1wb3J0IHsgZXh0cmFjdFRhcmdldEluZm8gfSBmcm9tICcuL21ldGhvZENvbmZpZy5qcyc7XG5pbXBvcnQgeyBmaWx0ZXJNY3BQaWlGcm9tU3BhbkRhdGEgfSBmcm9tICcuL3BpaUZpbHRlcmluZy5qcyc7XG5pbXBvcnQgeyBidWlsZFRyYW5zcG9ydEF0dHJpYnV0ZXMgfSBmcm9tICcuL3Nlc3Npb25FeHRyYWN0aW9uLmpzJztcblxuLyoqXG4gKiBTcGFuIGNyZWF0aW9uIGFuZCBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBmb3IgTUNQIHNlcnZlciBpbnN0cnVtZW50YXRpb25cbiAqXG4gKiBQcm92aWRlcyB1bmlmaWVkIHNwYW4gY3JlYXRpb24gZm9sbG93aW5nIE9wZW5UZWxlbWV0cnkgTUNQIHNlbWFudGljIGNvbnZlbnRpb25zIGFuZCBvdXIgb3Bpbml0aW9uYXRlZCB0YWtlIG9uIE1DUC5cbiAqIEhhbmRsZXMgYm90aCByZXF1ZXN0IGFuZCBub3RpZmljYXRpb24gc3BhbnMgd2l0aCBhdHRyaWJ1dGUgZXh0cmFjdGlvbi5cbiAqL1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIHNwYW4gbmFtZSBiYXNlZCBvbiB0aGUgbWV0aG9kIGFuZCB0YXJnZXRcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIG1ldGhvZCAtIE1DUCBtZXRob2QgbmFtZVxuICogQHBhcmFtIHRhcmdldCAtIE9wdGlvbmFsIHRhcmdldCBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyBGb3JtYXR0ZWQgc3BhbiBuYW1lXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNwYW5OYW1lKG1ldGhvZCwgdGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQgPyBgJHttZXRob2R9ICR7dGFyZ2V0fWAgOiBtZXRob2Q7XG59XG5cbi8qKlxuICogQnVpbGQgU2VudHJ5LXNwZWNpZmljIGF0dHJpYnV0ZXMgYmFzZWQgb24gc3BhbiB0eXBlXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB0eXBlIC0gU3BhbiB0eXBlIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIFNlbnRyeS1zcGVjaWZpYyBhdHRyaWJ1dGVzXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2VudHJ5QXR0cmlidXRlcyh0eXBlKSB7XG4gIGxldCBvcDtcbiAgbGV0IG9yaWdpbjtcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdyZXF1ZXN0JzpcbiAgICAgIG9wID0gTUNQX1NFUlZFUl9PUF9WQUxVRTtcbiAgICAgIG9yaWdpbiA9IE1DUF9GVU5DVElPTl9PUklHSU5fVkFMVUU7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdub3RpZmljYXRpb24taW5jb21pbmcnOlxuICAgICAgb3AgPSBNQ1BfTk9USUZJQ0FUSU9OX0NMSUVOVF9UT19TRVJWRVJfT1BfVkFMVUU7XG4gICAgICBvcmlnaW4gPSBNQ1BfTk9USUZJQ0FUSU9OX09SSUdJTl9WQUxVRTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ25vdGlmaWNhdGlvbi1vdXRnb2luZyc6XG4gICAgICBvcCA9IE1DUF9OT1RJRklDQVRJT05fU0VSVkVSX1RPX0NMSUVOVF9PUF9WQUxVRTtcbiAgICAgIG9yaWdpbiA9IE1DUF9OT1RJRklDQVRJT05fT1JJR0lOX1ZBTFVFO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QXTogb3AsXG4gICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOXTogb3JpZ2luLFxuICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV06IE1DUF9ST1VURV9TT1VSQ0VfVkFMVUUsXG4gIH07XG59XG5cbi8qKlxuICogVW5pZmllZCBidWlsZGVyIGZvciBjcmVhdGluZyBNQ1Agc3BhbnNcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIGNvbmZpZyAtIFNwYW4gY29uZmlndXJhdGlvblxuICogQHJldHVybnMgQ3JlYXRlZCBzcGFuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1jcFNwYW4oY29uZmlnKSB7XG4gIGNvbnN0IHsgdHlwZSwgbWVzc2FnZSwgdHJhbnNwb3J0LCBleHRyYSwgY2FsbGJhY2sgfSA9IGNvbmZpZztcbiAgY29uc3QgeyBtZXRob2QgfSA9IG1lc3NhZ2U7XG4gIGNvbnN0IHBhcmFtcyA9IG1lc3NhZ2UucGFyYW1zIDtcblxuICAvLyBEZXRlcm1pbmUgc3BhbiBuYW1lIGJhc2VkIG9uIHR5cGUgYW5kIE9URUwgY29udmVudGlvbnNcbiAgbGV0IHNwYW5OYW1lO1xuICBpZiAodHlwZSA9PT0gJ3JlcXVlc3QnKSB7XG4gICAgY29uc3QgdGFyZ2V0SW5mbyA9IGV4dHJhY3RUYXJnZXRJbmZvKG1ldGhvZCwgcGFyYW1zIHx8IHt9KTtcbiAgICBzcGFuTmFtZSA9IGNyZWF0ZVNwYW5OYW1lKG1ldGhvZCwgdGFyZ2V0SW5mby50YXJnZXQpO1xuICB9IGVsc2Uge1xuICAgIC8vIEZvciBub3RpZmljYXRpb25zLCB1c2UgbWV0aG9kIG5hbWUgZGlyZWN0bHkgcGVyIE9wZW5UZWxlbWV0cnkgY29udmVudGlvbnNcbiAgICBzcGFuTmFtZSA9IG1ldGhvZDtcbiAgfVxuXG4gIGNvbnN0IHJhd0F0dHJpYnV0ZXMgPSB7XG4gICAgLi4uYnVpbGRUcmFuc3BvcnRBdHRyaWJ1dGVzKHRyYW5zcG9ydCwgZXh0cmEpLFxuICAgIFtNQ1BfTUVUSE9EX05BTUVfQVRUUklCVVRFXTogbWV0aG9kLFxuICAgIC4uLmJ1aWxkVHlwZVNwZWNpZmljQXR0cmlidXRlcyh0eXBlLCBtZXNzYWdlLCBwYXJhbXMpLFxuICAgIC4uLmJ1aWxkU2VudHJ5QXR0cmlidXRlcyh0eXBlKSxcbiAgfTtcblxuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcbiAgY29uc3Qgc2VuZERlZmF1bHRQaWkgPSBCb29sZWFuKGNsaWVudD8uZ2V0T3B0aW9ucygpLnNlbmREZWZhdWx0UGlpKTtcbiAgY29uc3QgYXR0cmlidXRlcyA9IGZpbHRlck1jcFBpaUZyb21TcGFuRGF0YShyYXdBdHRyaWJ1dGVzLCBzZW5kRGVmYXVsdFBpaSkgO1xuXG4gIHJldHVybiBzdGFydFNwYW4oXG4gICAge1xuICAgICAgbmFtZTogc3Bhbk5hbWUsXG4gICAgICBmb3JjZVRyYW5zYWN0aW9uOiB0cnVlLFxuICAgICAgYXR0cmlidXRlcyxcbiAgICB9LFxuICAgIGNhbGxiYWNrLFxuICApO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzcGFuIGZvciBpbmNvbWluZyBNQ1Agbm90aWZpY2F0aW9uc1xuICogQHBhcmFtIGpzb25ScGNNZXNzYWdlIC0gTm90aWZpY2F0aW9uIG1lc3NhZ2VcbiAqIEBwYXJhbSB0cmFuc3BvcnQgLSBNQ1AgdHJhbnNwb3J0IGluc3RhbmNlXG4gKiBAcGFyYW0gZXh0cmEgLSBFeHRyYSBoYW5kbGVyIGRhdGFcbiAqIEBwYXJhbSBjYWxsYmFjayAtIFNwYW4gZXhlY3V0aW9uIGNhbGxiYWNrXG4gKiBAcmV0dXJucyBTcGFuIGV4ZWN1dGlvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlTWNwTm90aWZpY2F0aW9uU3BhbihcbiAganNvblJwY01lc3NhZ2UsXG4gIHRyYW5zcG9ydCxcbiAgZXh0cmEsXG4gIGNhbGxiYWNrLFxuKSB7XG4gIHJldHVybiBjcmVhdGVNY3BTcGFuKHtcbiAgICB0eXBlOiAnbm90aWZpY2F0aW9uLWluY29taW5nJyxcbiAgICBtZXNzYWdlOiBqc29uUnBjTWVzc2FnZSxcbiAgICB0cmFuc3BvcnQsXG4gICAgZXh0cmEsXG4gICAgY2FsbGJhY2ssXG4gIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzcGFuIGZvciBvdXRnb2luZyBNQ1Agbm90aWZpY2F0aW9uc1xuICogQHBhcmFtIGpzb25ScGNNZXNzYWdlIC0gTm90aWZpY2F0aW9uIG1lc3NhZ2VcbiAqIEBwYXJhbSB0cmFuc3BvcnQgLSBNQ1AgdHJhbnNwb3J0IGluc3RhbmNlXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBTcGFuIGV4ZWN1dGlvbiBjYWxsYmFja1xuICogQHJldHVybnMgU3BhbiBleGVjdXRpb24gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1jcE91dGdvaW5nTm90aWZpY2F0aW9uU3BhbihcbiAganNvblJwY01lc3NhZ2UsXG4gIHRyYW5zcG9ydCxcbiAgY2FsbGJhY2ssXG4pIHtcbiAgcmV0dXJuIGNyZWF0ZU1jcFNwYW4oe1xuICAgIHR5cGU6ICdub3RpZmljYXRpb24tb3V0Z29pbmcnLFxuICAgIG1lc3NhZ2U6IGpzb25ScGNNZXNzYWdlLFxuICAgIHRyYW5zcG9ydCxcbiAgICBjYWxsYmFjayxcbiAgfSk7XG59XG5cbi8qKlxuICogQnVpbGRzIHNwYW4gY29uZmlndXJhdGlvbiBmb3IgTUNQIHNlcnZlciByZXF1ZXN0c1xuICogQHBhcmFtIGpzb25ScGNNZXNzYWdlIC0gUmVxdWVzdCBtZXNzYWdlXG4gKiBAcGFyYW0gdHJhbnNwb3J0IC0gTUNQIHRyYW5zcG9ydCBpbnN0YW5jZVxuICogQHBhcmFtIGV4dHJhIC0gT3B0aW9uYWwgZXh0cmEgaGFuZGxlciBkYXRhXG4gKiBAcmV0dXJucyBTcGFuIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkTWNwU2VydmVyU3BhbkNvbmZpZyhcbiAganNvblJwY01lc3NhZ2UsXG4gIHRyYW5zcG9ydCxcbiAgZXh0cmEsXG4pXG5cbiB7XG4gIGNvbnN0IHsgbWV0aG9kIH0gPSBqc29uUnBjTWVzc2FnZTtcbiAgY29uc3QgcGFyYW1zID0ganNvblJwY01lc3NhZ2UucGFyYW1zIDtcblxuICBjb25zdCB0YXJnZXRJbmZvID0gZXh0cmFjdFRhcmdldEluZm8obWV0aG9kLCBwYXJhbXMgfHwge30pO1xuICBjb25zdCBzcGFuTmFtZSA9IGNyZWF0ZVNwYW5OYW1lKG1ldGhvZCwgdGFyZ2V0SW5mby50YXJnZXQpO1xuXG4gIGNvbnN0IHJhd0F0dHJpYnV0ZXMgPSB7XG4gICAgLi4uYnVpbGRUcmFuc3BvcnRBdHRyaWJ1dGVzKHRyYW5zcG9ydCwgZXh0cmEpLFxuICAgIFtNQ1BfTUVUSE9EX05BTUVfQVRUUklCVVRFXTogbWV0aG9kLFxuICAgIC4uLmJ1aWxkVHlwZVNwZWNpZmljQXR0cmlidXRlcygncmVxdWVzdCcsIGpzb25ScGNNZXNzYWdlLCBwYXJhbXMpLFxuICAgIC4uLmJ1aWxkU2VudHJ5QXR0cmlidXRlcygncmVxdWVzdCcpLFxuICB9O1xuXG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuICBjb25zdCBzZW5kRGVmYXVsdFBpaSA9IEJvb2xlYW4oY2xpZW50Py5nZXRPcHRpb25zKCkuc2VuZERlZmF1bHRQaWkpO1xuICBjb25zdCBhdHRyaWJ1dGVzID0gZmlsdGVyTWNwUGlpRnJvbVNwYW5EYXRhKHJhd0F0dHJpYnV0ZXMsIHNlbmREZWZhdWx0UGlpKSA7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBzcGFuTmFtZSxcbiAgICBvcDogTUNQX1NFUlZFUl9PUF9WQUxVRSxcbiAgICBmb3JjZVRyYW5zYWN0aW9uOiB0cnVlLFxuICAgIGF0dHJpYnV0ZXMsXG4gIH07XG59XG5cbmV4cG9ydCB7IGJ1aWxkTWNwU2VydmVyU3BhbkNvbmZpZywgY3JlYXRlTWNwTm90aWZpY2F0aW9uU3BhbiwgY3JlYXRlTWNwT3V0Z29pbmdOb3RpZmljYXRpb25TcGFuIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zcGFucy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/spans.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/transport.js":
/*!*************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/transport.js ***!
  \*************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   wrapTransportError: () => (/* binding */ wrapTransportError),\n/* harmony export */   wrapTransportOnClose: () => (/* binding */ wrapTransportOnClose),\n/* harmony export */   wrapTransportOnMessage: () => (/* binding */ wrapTransportOnMessage),\n/* harmony export */   wrapTransportSend: () => (/* binding */ wrapTransportSend)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _utils_object_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/object.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js\");\n/* harmony import */ var _tracing_trace_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../tracing/trace.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/trace.js\");\n/* harmony import */ var _correlation_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./correlation.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/correlation.js\");\n/* harmony import */ var _errorCapture_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./errorCapture.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/errorCapture.js\");\n/* harmony import */ var _sessionExtraction_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sessionExtraction.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/sessionExtraction.js\");\n/* harmony import */ var _sessionManagement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sessionManagement.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/sessionManagement.js\");\n/* harmony import */ var _spans_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./spans.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/spans.js\");\n/* harmony import */ var _validation_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./validation.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/validation.js\");\n\n\n\n\n\n\n\n\n\n\n/**\n * Transport layer instrumentation for MCP server\n *\n * Handles message interception and response correlation.\n * @see https://modelcontextprotocol.io/specification/2025-06-18/basic/transports\n */\n\n\n/**\n * Wraps transport.onmessage to create spans for incoming messages.\n * For \"initialize\" requests, extracts and stores client info and protocol version\n * in the session data for the transport.\n * @param transport - MCP transport instance to wrap\n */\nfunction wrapTransportOnMessage(transport) {\n  if (transport.onmessage) {\n    (0,_utils_object_js__WEBPACK_IMPORTED_MODULE_1__.fill)(transport, 'onmessage', originalOnMessage => {\n      return function ( message, extra) {\n        if ((0,_validation_js__WEBPACK_IMPORTED_MODULE_8__.isJsonRpcRequest)(message)) {\n          if (message.method === 'initialize') {\n            try {\n              const sessionData = (0,_sessionExtraction_js__WEBPACK_IMPORTED_MODULE_5__.extractSessionDataFromInitializeRequest)(message);\n              (0,_sessionManagement_js__WEBPACK_IMPORTED_MODULE_6__.storeSessionDataForTransport)(this, sessionData);\n            } catch {\n              // noop\n            }\n          }\n\n          const isolationScope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)().clone();\n\n          return (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.withIsolationScope)(isolationScope, () => {\n            const spanConfig = (0,_spans_js__WEBPACK_IMPORTED_MODULE_7__.buildMcpServerSpanConfig)(message, this, extra );\n            const span = (0,_tracing_trace_js__WEBPACK_IMPORTED_MODULE_2__.startInactiveSpan)(spanConfig);\n\n            (0,_correlation_js__WEBPACK_IMPORTED_MODULE_3__.storeSpanForRequest)(this, message.id, span, message.method);\n\n            return (0,_tracing_trace_js__WEBPACK_IMPORTED_MODULE_2__.withActiveSpan)(span, () => {\n              return (originalOnMessage ).call(this, message, extra);\n            });\n          });\n        }\n\n        if ((0,_validation_js__WEBPACK_IMPORTED_MODULE_8__.isJsonRpcNotification)(message)) {\n          return (0,_spans_js__WEBPACK_IMPORTED_MODULE_7__.createMcpNotificationSpan)(message, this, extra , () => {\n            return (originalOnMessage ).call(this, message, extra);\n          });\n        }\n\n        return (originalOnMessage ).call(this, message, extra);\n      };\n    });\n  }\n}\n\n/**\n * Wraps transport.send to handle outgoing messages and response correlation.\n * For \"initialize\" responses, extracts and stores protocol version and server info\n * in the session data for the transport.\n * @param transport - MCP transport instance to wrap\n */\nfunction wrapTransportSend(transport) {\n  if (transport.send) {\n    (0,_utils_object_js__WEBPACK_IMPORTED_MODULE_1__.fill)(transport, 'send', originalSend => {\n      return async function ( ...args) {\n        const [message] = args;\n\n        if ((0,_validation_js__WEBPACK_IMPORTED_MODULE_8__.isJsonRpcNotification)(message)) {\n          return (0,_spans_js__WEBPACK_IMPORTED_MODULE_7__.createMcpOutgoingNotificationSpan)(message, this, () => {\n            return (originalSend ).call(this, ...args);\n          });\n        }\n\n        if ((0,_validation_js__WEBPACK_IMPORTED_MODULE_8__.isJsonRpcResponse)(message)) {\n          if (message.id !== null && message.id !== undefined) {\n            if (message.error) {\n              captureJsonRpcErrorResponse(message.error);\n            }\n\n            if ((0,_validation_js__WEBPACK_IMPORTED_MODULE_8__.isValidContentItem)(message.result)) {\n              if (message.result.protocolVersion || message.result.serverInfo) {\n                try {\n                  const serverData = (0,_sessionExtraction_js__WEBPACK_IMPORTED_MODULE_5__.extractSessionDataFromInitializeResponse)(message.result);\n                  (0,_sessionManagement_js__WEBPACK_IMPORTED_MODULE_6__.updateSessionDataForTransport)(this, serverData);\n                } catch {\n                  // noop\n                }\n              }\n            }\n\n            (0,_correlation_js__WEBPACK_IMPORTED_MODULE_3__.completeSpanWithResults)(this, message.id, message.result);\n          }\n        }\n\n        return (originalSend ).call(this, ...args);\n      };\n    });\n  }\n}\n\n/**\n * Wraps transport.onclose to clean up pending spans for this transport only\n * @param transport - MCP transport instance to wrap\n */\nfunction wrapTransportOnClose(transport) {\n  if (transport.onclose) {\n    (0,_utils_object_js__WEBPACK_IMPORTED_MODULE_1__.fill)(transport, 'onclose', originalOnClose => {\n      return function ( ...args) {\n        (0,_correlation_js__WEBPACK_IMPORTED_MODULE_3__.cleanupPendingSpansForTransport)(this);\n        (0,_sessionManagement_js__WEBPACK_IMPORTED_MODULE_6__.cleanupSessionDataForTransport)(this);\n        return (originalOnClose ).call(this, ...args);\n      };\n    });\n  }\n}\n\n/**\n * Wraps transport error handlers to capture connection errors\n * @param transport - MCP transport instance to wrap\n */\nfunction wrapTransportError(transport) {\n  if (transport.onerror) {\n    (0,_utils_object_js__WEBPACK_IMPORTED_MODULE_1__.fill)(transport, 'onerror', (originalOnError) => {\n      return function ( error) {\n        captureTransportError(error);\n        return originalOnError.call(this, error);\n      };\n    });\n  }\n}\n\n/**\n * Captures JSON-RPC error responses for server-side errors.\n * @see https://www.jsonrpc.org/specification#error_object\n * @internal\n * @param errorResponse - JSON-RPC error response\n */\nfunction captureJsonRpcErrorResponse(errorResponse) {\n  try {\n    if (errorResponse && typeof errorResponse === 'object' && 'code' in errorResponse && 'message' in errorResponse) {\n      const jsonRpcError = errorResponse ;\n\n      const isServerError =\n        jsonRpcError.code === -32603 || (jsonRpcError.code >= -32099 && jsonRpcError.code <= -32000);\n\n      if (isServerError) {\n        const error = new Error(jsonRpcError.message);\n        error.name = `JsonRpcError_${jsonRpcError.code}`;\n\n        (0,_errorCapture_js__WEBPACK_IMPORTED_MODULE_4__.captureError)(error, 'protocol');\n      }\n    }\n  } catch {\n    // noop\n  }\n}\n\n/**\n * Captures transport connection errors\n * @internal\n * @param error - Transport error\n */\nfunction captureTransportError(error) {\n  try {\n    (0,_errorCapture_js__WEBPACK_IMPORTED_MODULE_4__.captureError)(error, 'transport');\n  } catch {\n    // noop\n  }\n}\n\n\n//# sourceMappingURL=transport.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9tY3Atc2VydmVyL3RyYW5zcG9ydC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQStFO0FBQ2xDO0FBQzhCO0FBQ3NDO0FBQ2hFO0FBQzBFO0FBQ1U7QUFDakI7QUFDSDs7QUFFakg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxzREFBSTtBQUNSO0FBQ0EsWUFBWSxnRUFBZ0I7QUFDNUI7QUFDQTtBQUNBLGtDQUFrQyw4RkFBdUM7QUFDekUsY0FBYyxtRkFBNEI7QUFDMUMsY0FBYztBQUNkO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUMsb0VBQWlCOztBQUVsRCxpQkFBaUIscUVBQWtCO0FBQ25DLCtCQUErQixtRUFBd0I7QUFDdkQseUJBQXlCLG9FQUFpQjs7QUFFMUMsWUFBWSxvRUFBbUI7O0FBRS9CLG1CQUFtQixpRUFBYztBQUNqQztBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1g7O0FBRUEsWUFBWSxxRUFBcUI7QUFDakMsaUJBQWlCLG9FQUF5QjtBQUMxQztBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksc0RBQUk7QUFDUjtBQUNBOztBQUVBLFlBQVkscUVBQXFCO0FBQ2pDLGlCQUFpQiw0RUFBaUM7QUFDbEQ7QUFDQSxXQUFXO0FBQ1g7O0FBRUEsWUFBWSxpRUFBaUI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLGtFQUFrQjtBQUNsQztBQUNBO0FBQ0EscUNBQXFDLCtGQUF3QztBQUM3RSxrQkFBa0Isb0ZBQTZCO0FBQy9DLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxZQUFZLHdFQUF1QjtBQUNuQztBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHNEQUFJO0FBQ1I7QUFDQSxRQUFRLGdGQUErQjtBQUN2QyxRQUFRLHFGQUE4QjtBQUN0QztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxzREFBSTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUNBQXFDLGtCQUFrQjs7QUFFdkQsUUFBUSw4REFBWTtBQUNwQjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksOERBQVk7QUFDaEIsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFK0Y7QUFDL0YiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9pbnRlZ3JhdGlvbnMvbWNwLXNlcnZlci90cmFuc3BvcnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0SXNvbGF0aW9uU2NvcGUsIHdpdGhJc29sYXRpb25TY29wZSB9IGZyb20gJy4uLy4uL2N1cnJlbnRTY29wZXMuanMnO1xuaW1wb3J0IHsgZmlsbCB9IGZyb20gJy4uLy4uL3V0aWxzL29iamVjdC5qcyc7XG5pbXBvcnQgeyBzdGFydEluYWN0aXZlU3Bhbiwgd2l0aEFjdGl2ZVNwYW4gfSBmcm9tICcuLi8uLi90cmFjaW5nL3RyYWNlLmpzJztcbmltcG9ydCB7IHN0b3JlU3BhbkZvclJlcXVlc3QsIGNvbXBsZXRlU3BhbldpdGhSZXN1bHRzLCBjbGVhbnVwUGVuZGluZ1NwYW5zRm9yVHJhbnNwb3J0IH0gZnJvbSAnLi9jb3JyZWxhdGlvbi5qcyc7XG5pbXBvcnQgeyBjYXB0dXJlRXJyb3IgfSBmcm9tICcuL2Vycm9yQ2FwdHVyZS5qcyc7XG5pbXBvcnQgeyBleHRyYWN0U2Vzc2lvbkRhdGFGcm9tSW5pdGlhbGl6ZVJlcXVlc3QsIGV4dHJhY3RTZXNzaW9uRGF0YUZyb21Jbml0aWFsaXplUmVzcG9uc2UgfSBmcm9tICcuL3Nlc3Npb25FeHRyYWN0aW9uLmpzJztcbmltcG9ydCB7IHN0b3JlU2Vzc2lvbkRhdGFGb3JUcmFuc3BvcnQsIHVwZGF0ZVNlc3Npb25EYXRhRm9yVHJhbnNwb3J0LCBjbGVhbnVwU2Vzc2lvbkRhdGFGb3JUcmFuc3BvcnQgfSBmcm9tICcuL3Nlc3Npb25NYW5hZ2VtZW50LmpzJztcbmltcG9ydCB7IGJ1aWxkTWNwU2VydmVyU3BhbkNvbmZpZywgY3JlYXRlTWNwTm90aWZpY2F0aW9uU3BhbiwgY3JlYXRlTWNwT3V0Z29pbmdOb3RpZmljYXRpb25TcGFuIH0gZnJvbSAnLi9zcGFucy5qcyc7XG5pbXBvcnQgeyBpc0pzb25ScGNSZXF1ZXN0LCBpc0pzb25ScGNOb3RpZmljYXRpb24sIGlzSnNvblJwY1Jlc3BvbnNlLCBpc1ZhbGlkQ29udGVudEl0ZW0gfSBmcm9tICcuL3ZhbGlkYXRpb24uanMnO1xuXG4vKipcbiAqIFRyYW5zcG9ydCBsYXllciBpbnN0cnVtZW50YXRpb24gZm9yIE1DUCBzZXJ2ZXJcbiAqXG4gKiBIYW5kbGVzIG1lc3NhZ2UgaW50ZXJjZXB0aW9uIGFuZCByZXNwb25zZSBjb3JyZWxhdGlvbi5cbiAqIEBzZWUgaHR0cHM6Ly9tb2RlbGNvbnRleHRwcm90b2NvbC5pby9zcGVjaWZpY2F0aW9uLzIwMjUtMDYtMTgvYmFzaWMvdHJhbnNwb3J0c1xuICovXG5cblxuLyoqXG4gKiBXcmFwcyB0cmFuc3BvcnQub25tZXNzYWdlIHRvIGNyZWF0ZSBzcGFucyBmb3IgaW5jb21pbmcgbWVzc2FnZXMuXG4gKiBGb3IgXCJpbml0aWFsaXplXCIgcmVxdWVzdHMsIGV4dHJhY3RzIGFuZCBzdG9yZXMgY2xpZW50IGluZm8gYW5kIHByb3RvY29sIHZlcnNpb25cbiAqIGluIHRoZSBzZXNzaW9uIGRhdGEgZm9yIHRoZSB0cmFuc3BvcnQuXG4gKiBAcGFyYW0gdHJhbnNwb3J0IC0gTUNQIHRyYW5zcG9ydCBpbnN0YW5jZSB0byB3cmFwXG4gKi9cbmZ1bmN0aW9uIHdyYXBUcmFuc3BvcnRPbk1lc3NhZ2UodHJhbnNwb3J0KSB7XG4gIGlmICh0cmFuc3BvcnQub25tZXNzYWdlKSB7XG4gICAgZmlsbCh0cmFuc3BvcnQsICdvbm1lc3NhZ2UnLCBvcmlnaW5hbE9uTWVzc2FnZSA9PiB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCBtZXNzYWdlLCBleHRyYSkge1xuICAgICAgICBpZiAoaXNKc29uUnBjUmVxdWVzdChtZXNzYWdlKSkge1xuICAgICAgICAgIGlmIChtZXNzYWdlLm1ldGhvZCA9PT0gJ2luaXRpYWxpemUnKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IGV4dHJhY3RTZXNzaW9uRGF0YUZyb21Jbml0aWFsaXplUmVxdWVzdChtZXNzYWdlKTtcbiAgICAgICAgICAgICAgc3RvcmVTZXNzaW9uRGF0YUZvclRyYW5zcG9ydCh0aGlzLCBzZXNzaW9uRGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGlzb2xhdGlvblNjb3BlID0gZ2V0SXNvbGF0aW9uU2NvcGUoKS5jbG9uZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIHdpdGhJc29sYXRpb25TY29wZShpc29sYXRpb25TY29wZSwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3BhbkNvbmZpZyA9IGJ1aWxkTWNwU2VydmVyU3BhbkNvbmZpZyhtZXNzYWdlLCB0aGlzLCBleHRyYSApO1xuICAgICAgICAgICAgY29uc3Qgc3BhbiA9IHN0YXJ0SW5hY3RpdmVTcGFuKHNwYW5Db25maWcpO1xuXG4gICAgICAgICAgICBzdG9yZVNwYW5Gb3JSZXF1ZXN0KHRoaXMsIG1lc3NhZ2UuaWQsIHNwYW4sIG1lc3NhZ2UubWV0aG9kKTtcblxuICAgICAgICAgICAgcmV0dXJuIHdpdGhBY3RpdmVTcGFuKHNwYW4sICgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChvcmlnaW5hbE9uTWVzc2FnZSApLmNhbGwodGhpcywgbWVzc2FnZSwgZXh0cmEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNKc29uUnBjTm90aWZpY2F0aW9uKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZU1jcE5vdGlmaWNhdGlvblNwYW4obWVzc2FnZSwgdGhpcywgZXh0cmEgLCAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKG9yaWdpbmFsT25NZXNzYWdlICkuY2FsbCh0aGlzLCBtZXNzYWdlLCBleHRyYSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG9yaWdpbmFsT25NZXNzYWdlICkuY2FsbCh0aGlzLCBtZXNzYWdlLCBleHRyYSk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogV3JhcHMgdHJhbnNwb3J0LnNlbmQgdG8gaGFuZGxlIG91dGdvaW5nIG1lc3NhZ2VzIGFuZCByZXNwb25zZSBjb3JyZWxhdGlvbi5cbiAqIEZvciBcImluaXRpYWxpemVcIiByZXNwb25zZXMsIGV4dHJhY3RzIGFuZCBzdG9yZXMgcHJvdG9jb2wgdmVyc2lvbiBhbmQgc2VydmVyIGluZm9cbiAqIGluIHRoZSBzZXNzaW9uIGRhdGEgZm9yIHRoZSB0cmFuc3BvcnQuXG4gKiBAcGFyYW0gdHJhbnNwb3J0IC0gTUNQIHRyYW5zcG9ydCBpbnN0YW5jZSB0byB3cmFwXG4gKi9cbmZ1bmN0aW9uIHdyYXBUcmFuc3BvcnRTZW5kKHRyYW5zcG9ydCkge1xuICBpZiAodHJhbnNwb3J0LnNlbmQpIHtcbiAgICBmaWxsKHRyYW5zcG9ydCwgJ3NlbmQnLCBvcmlnaW5hbFNlbmQgPT4ge1xuICAgICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uICggLi4uYXJncykge1xuICAgICAgICBjb25zdCBbbWVzc2FnZV0gPSBhcmdzO1xuXG4gICAgICAgIGlmIChpc0pzb25ScGNOb3RpZmljYXRpb24obWVzc2FnZSkpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlTWNwT3V0Z29pbmdOb3RpZmljYXRpb25TcGFuKG1lc3NhZ2UsIHRoaXMsICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAob3JpZ2luYWxTZW5kICkuY2FsbCh0aGlzLCAuLi5hcmdzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0pzb25ScGNSZXNwb25zZShtZXNzYWdlKSkge1xuICAgICAgICAgIGlmIChtZXNzYWdlLmlkICE9PSBudWxsICYmIG1lc3NhZ2UuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUpzb25ScGNFcnJvclJlc3BvbnNlKG1lc3NhZ2UuZXJyb3IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZENvbnRlbnRJdGVtKG1lc3NhZ2UucmVzdWx0KSkge1xuICAgICAgICAgICAgICBpZiAobWVzc2FnZS5yZXN1bHQucHJvdG9jb2xWZXJzaW9uIHx8IG1lc3NhZ2UucmVzdWx0LnNlcnZlckluZm8pIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VydmVyRGF0YSA9IGV4dHJhY3RTZXNzaW9uRGF0YUZyb21Jbml0aWFsaXplUmVzcG9uc2UobWVzc2FnZS5yZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgdXBkYXRlU2Vzc2lvbkRhdGFGb3JUcmFuc3BvcnQodGhpcywgc2VydmVyRGF0YSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAvLyBub29wXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbXBsZXRlU3BhbldpdGhSZXN1bHRzKHRoaXMsIG1lc3NhZ2UuaWQsIG1lc3NhZ2UucmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG9yaWdpbmFsU2VuZCApLmNhbGwodGhpcywgLi4uYXJncyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogV3JhcHMgdHJhbnNwb3J0Lm9uY2xvc2UgdG8gY2xlYW4gdXAgcGVuZGluZyBzcGFucyBmb3IgdGhpcyB0cmFuc3BvcnQgb25seVxuICogQHBhcmFtIHRyYW5zcG9ydCAtIE1DUCB0cmFuc3BvcnQgaW5zdGFuY2UgdG8gd3JhcFxuICovXG5mdW5jdGlvbiB3cmFwVHJhbnNwb3J0T25DbG9zZSh0cmFuc3BvcnQpIHtcbiAgaWYgKHRyYW5zcG9ydC5vbmNsb3NlKSB7XG4gICAgZmlsbCh0cmFuc3BvcnQsICdvbmNsb3NlJywgb3JpZ2luYWxPbkNsb3NlID0+IHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoIC4uLmFyZ3MpIHtcbiAgICAgICAgY2xlYW51cFBlbmRpbmdTcGFuc0ZvclRyYW5zcG9ydCh0aGlzKTtcbiAgICAgICAgY2xlYW51cFNlc3Npb25EYXRhRm9yVHJhbnNwb3J0KHRoaXMpO1xuICAgICAgICByZXR1cm4gKG9yaWdpbmFsT25DbG9zZSApLmNhbGwodGhpcywgLi4uYXJncyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogV3JhcHMgdHJhbnNwb3J0IGVycm9yIGhhbmRsZXJzIHRvIGNhcHR1cmUgY29ubmVjdGlvbiBlcnJvcnNcbiAqIEBwYXJhbSB0cmFuc3BvcnQgLSBNQ1AgdHJhbnNwb3J0IGluc3RhbmNlIHRvIHdyYXBcbiAqL1xuZnVuY3Rpb24gd3JhcFRyYW5zcG9ydEVycm9yKHRyYW5zcG9ydCkge1xuICBpZiAodHJhbnNwb3J0Lm9uZXJyb3IpIHtcbiAgICBmaWxsKHRyYW5zcG9ydCwgJ29uZXJyb3InLCAob3JpZ2luYWxPbkVycm9yKSA9PiB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCBlcnJvcikge1xuICAgICAgICBjYXB0dXJlVHJhbnNwb3J0RXJyb3IoZXJyb3IpO1xuICAgICAgICByZXR1cm4gb3JpZ2luYWxPbkVycm9yLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIENhcHR1cmVzIEpTT04tUlBDIGVycm9yIHJlc3BvbnNlcyBmb3Igc2VydmVyLXNpZGUgZXJyb3JzLlxuICogQHNlZSBodHRwczovL3d3dy5qc29ucnBjLm9yZy9zcGVjaWZpY2F0aW9uI2Vycm9yX29iamVjdFxuICogQGludGVybmFsXG4gKiBAcGFyYW0gZXJyb3JSZXNwb25zZSAtIEpTT04tUlBDIGVycm9yIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGNhcHR1cmVKc29uUnBjRXJyb3JSZXNwb25zZShlcnJvclJlc3BvbnNlKSB7XG4gIHRyeSB7XG4gICAgaWYgKGVycm9yUmVzcG9uc2UgJiYgdHlwZW9mIGVycm9yUmVzcG9uc2UgPT09ICdvYmplY3QnICYmICdjb2RlJyBpbiBlcnJvclJlc3BvbnNlICYmICdtZXNzYWdlJyBpbiBlcnJvclJlc3BvbnNlKSB7XG4gICAgICBjb25zdCBqc29uUnBjRXJyb3IgPSBlcnJvclJlc3BvbnNlIDtcblxuICAgICAgY29uc3QgaXNTZXJ2ZXJFcnJvciA9XG4gICAgICAgIGpzb25ScGNFcnJvci5jb2RlID09PSAtMzI2MDMgfHwgKGpzb25ScGNFcnJvci5jb2RlID49IC0zMjA5OSAmJiBqc29uUnBjRXJyb3IuY29kZSA8PSAtMzIwMDApO1xuXG4gICAgICBpZiAoaXNTZXJ2ZXJFcnJvcikge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihqc29uUnBjRXJyb3IubWVzc2FnZSk7XG4gICAgICAgIGVycm9yLm5hbWUgPSBgSnNvblJwY0Vycm9yXyR7anNvblJwY0Vycm9yLmNvZGV9YDtcblxuICAgICAgICBjYXB0dXJlRXJyb3IoZXJyb3IsICdwcm90b2NvbCcpO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gbm9vcFxuICB9XG59XG5cbi8qKlxuICogQ2FwdHVyZXMgdHJhbnNwb3J0IGNvbm5lY3Rpb24gZXJyb3JzXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSBlcnJvciAtIFRyYW5zcG9ydCBlcnJvclxuICovXG5mdW5jdGlvbiBjYXB0dXJlVHJhbnNwb3J0RXJyb3IoZXJyb3IpIHtcbiAgdHJ5IHtcbiAgICBjYXB0dXJlRXJyb3IoZXJyb3IsICd0cmFuc3BvcnQnKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gbm9vcFxuICB9XG59XG5cbmV4cG9ydCB7IHdyYXBUcmFuc3BvcnRFcnJvciwgd3JhcFRyYW5zcG9ydE9uQ2xvc2UsIHdyYXBUcmFuc3BvcnRPbk1lc3NhZ2UsIHdyYXBUcmFuc3BvcnRTZW5kIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmFuc3BvcnQuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/transport.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/validation.js":
/*!**************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/validation.js ***!
  \**************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   isJsonRpcNotification: () => (/* binding */ isJsonRpcNotification),\n/* harmony export */   isJsonRpcRequest: () => (/* binding */ isJsonRpcRequest),\n/* harmony export */   isJsonRpcResponse: () => (/* binding */ isJsonRpcResponse),\n/* harmony export */   isValidContentItem: () => (/* binding */ isValidContentItem),\n/* harmony export */   validateMcpServerInstance: () => (/* binding */ validateMcpServerInstance)\n/* harmony export */ });\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n\n\n\n/**\n * Message validation functions for MCP server instrumentation\n *\n * Provides JSON-RPC 2.0 message type validation and MCP server instance validation.\n */\n\n\n/**\n * Validates if a message is a JSON-RPC request\n * @param message - Message to validate\n * @returns True if message is a JSON-RPC request\n */\nfunction isJsonRpcRequest(message) {\n  return (\n    typeof message === 'object' &&\n    message !== null &&\n    'jsonrpc' in message &&\n    (message ).jsonrpc === '2.0' &&\n    'method' in message &&\n    'id' in message\n  );\n}\n\n/**\n * Validates if a message is a JSON-RPC notification\n * @param message - Message to validate\n * @returns True if message is a JSON-RPC notification\n */\nfunction isJsonRpcNotification(message) {\n  return (\n    typeof message === 'object' &&\n    message !== null &&\n    'jsonrpc' in message &&\n    (message ).jsonrpc === '2.0' &&\n    'method' in message &&\n    !('id' in message)\n  );\n}\n\n/**\n * Validates if a message is a JSON-RPC response\n * @param message - Message to validate\n * @returns True if message is a JSON-RPC response\n */\nfunction isJsonRpcResponse(message) {\n  return (\n    typeof message === 'object' &&\n    message !== null &&\n    'jsonrpc' in message &&\n    (message ).jsonrpc === '2.0' &&\n    'id' in message &&\n    ('result' in message || 'error' in message)\n  );\n}\n\n/**\n * Validates MCP server instance with type checking\n * @param instance - Object to validate as MCP server instance\n * @returns True if instance has required MCP server methods\n */\nfunction validateMcpServerInstance(instance) {\n  if (\n    typeof instance === 'object' &&\n    instance !== null &&\n    'resource' in instance &&\n    'tool' in instance &&\n    'prompt' in instance &&\n    'connect' in instance\n  ) {\n    return true;\n  }\n  _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.warn('Did not patch MCP server. Interface is incompatible.');\n  return false;\n}\n\n/**\n * Check if the item is a valid content item\n * @param item - The item to check\n * @returns True if the item is a valid content item, false otherwise\n */\nfunction isValidContentItem(item) {\n  return item != null && typeof item === 'object';\n}\n\n\n//# sourceMappingURL=validation.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9tY3Atc2VydmVyL3ZhbGlkYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFtRDtBQUNDOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsd0RBQVcsSUFBSSx5REFBSztBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRXFIO0FBQ3JIIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vaW50ZWdyYXRpb25zL21jcC1zZXJ2ZXIvdmFsaWRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4uLy4uL2RlYnVnLWJ1aWxkLmpzJztcbmltcG9ydCB7IGRlYnVnIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGVidWctbG9nZ2VyLmpzJztcblxuLyoqXG4gKiBNZXNzYWdlIHZhbGlkYXRpb24gZnVuY3Rpb25zIGZvciBNQ1Agc2VydmVyIGluc3RydW1lbnRhdGlvblxuICpcbiAqIFByb3ZpZGVzIEpTT04tUlBDIDIuMCBtZXNzYWdlIHR5cGUgdmFsaWRhdGlvbiBhbmQgTUNQIHNlcnZlciBpbnN0YW5jZSB2YWxpZGF0aW9uLlxuICovXG5cblxuLyoqXG4gKiBWYWxpZGF0ZXMgaWYgYSBtZXNzYWdlIGlzIGEgSlNPTi1SUEMgcmVxdWVzdFxuICogQHBhcmFtIG1lc3NhZ2UgLSBNZXNzYWdlIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyBUcnVlIGlmIG1lc3NhZ2UgaXMgYSBKU09OLVJQQyByZXF1ZXN0XG4gKi9cbmZ1bmN0aW9uIGlzSnNvblJwY1JlcXVlc3QobWVzc2FnZSkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBtZXNzYWdlID09PSAnb2JqZWN0JyAmJlxuICAgIG1lc3NhZ2UgIT09IG51bGwgJiZcbiAgICAnanNvbnJwYycgaW4gbWVzc2FnZSAmJlxuICAgIChtZXNzYWdlICkuanNvbnJwYyA9PT0gJzIuMCcgJiZcbiAgICAnbWV0aG9kJyBpbiBtZXNzYWdlICYmXG4gICAgJ2lkJyBpbiBtZXNzYWdlXG4gICk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGlmIGEgbWVzc2FnZSBpcyBhIEpTT04tUlBDIG5vdGlmaWNhdGlvblxuICogQHBhcmFtIG1lc3NhZ2UgLSBNZXNzYWdlIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyBUcnVlIGlmIG1lc3NhZ2UgaXMgYSBKU09OLVJQQyBub3RpZmljYXRpb25cbiAqL1xuZnVuY3Rpb24gaXNKc29uUnBjTm90aWZpY2F0aW9uKG1lc3NhZ2UpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgbWVzc2FnZSA9PT0gJ29iamVjdCcgJiZcbiAgICBtZXNzYWdlICE9PSBudWxsICYmXG4gICAgJ2pzb25ycGMnIGluIG1lc3NhZ2UgJiZcbiAgICAobWVzc2FnZSApLmpzb25ycGMgPT09ICcyLjAnICYmXG4gICAgJ21ldGhvZCcgaW4gbWVzc2FnZSAmJlxuICAgICEoJ2lkJyBpbiBtZXNzYWdlKVxuICApO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBpZiBhIG1lc3NhZ2UgaXMgYSBKU09OLVJQQyByZXNwb25zZVxuICogQHBhcmFtIG1lc3NhZ2UgLSBNZXNzYWdlIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyBUcnVlIGlmIG1lc3NhZ2UgaXMgYSBKU09OLVJQQyByZXNwb25zZVxuICovXG5mdW5jdGlvbiBpc0pzb25ScGNSZXNwb25zZShtZXNzYWdlKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG1lc3NhZ2UgPT09ICdvYmplY3QnICYmXG4gICAgbWVzc2FnZSAhPT0gbnVsbCAmJlxuICAgICdqc29ucnBjJyBpbiBtZXNzYWdlICYmXG4gICAgKG1lc3NhZ2UgKS5qc29ucnBjID09PSAnMi4wJyAmJlxuICAgICdpZCcgaW4gbWVzc2FnZSAmJlxuICAgICgncmVzdWx0JyBpbiBtZXNzYWdlIHx8ICdlcnJvcicgaW4gbWVzc2FnZSlcbiAgKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgTUNQIHNlcnZlciBpbnN0YW5jZSB3aXRoIHR5cGUgY2hlY2tpbmdcbiAqIEBwYXJhbSBpbnN0YW5jZSAtIE9iamVjdCB0byB2YWxpZGF0ZSBhcyBNQ1Agc2VydmVyIGluc3RhbmNlXG4gKiBAcmV0dXJucyBUcnVlIGlmIGluc3RhbmNlIGhhcyByZXF1aXJlZCBNQ1Agc2VydmVyIG1ldGhvZHNcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVNY3BTZXJ2ZXJJbnN0YW5jZShpbnN0YW5jZSkge1xuICBpZiAoXG4gICAgdHlwZW9mIGluc3RhbmNlID09PSAnb2JqZWN0JyAmJlxuICAgIGluc3RhbmNlICE9PSBudWxsICYmXG4gICAgJ3Jlc291cmNlJyBpbiBpbnN0YW5jZSAmJlxuICAgICd0b29sJyBpbiBpbnN0YW5jZSAmJlxuICAgICdwcm9tcHQnIGluIGluc3RhbmNlICYmXG4gICAgJ2Nvbm5lY3QnIGluIGluc3RhbmNlXG4gICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIERFQlVHX0JVSUxEICYmIGRlYnVnLndhcm4oJ0RpZCBub3QgcGF0Y2ggTUNQIHNlcnZlci4gSW50ZXJmYWNlIGlzIGluY29tcGF0aWJsZS4nKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBpdGVtIGlzIGEgdmFsaWQgY29udGVudCBpdGVtXG4gKiBAcGFyYW0gaXRlbSAtIFRoZSBpdGVtIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpdGVtIGlzIGEgdmFsaWQgY29udGVudCBpdGVtLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZENvbnRlbnRJdGVtKGl0ZW0pIHtcbiAgcmV0dXJuIGl0ZW0gIT0gbnVsbCAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCc7XG59XG5cbmV4cG9ydCB7IGlzSnNvblJwY05vdGlmaWNhdGlvbiwgaXNKc29uUnBjUmVxdWVzdCwgaXNKc29uUnBjUmVzcG9uc2UsIGlzVmFsaWRDb250ZW50SXRlbSwgdmFsaWRhdGVNY3BTZXJ2ZXJJbnN0YW5jZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmFsaWRhdGlvbi5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/mcp-server/validation.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/metadata.js":
/*!*************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/metadata.js ***!
  \*************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   moduleMetadataIntegration: () => (/* binding */ moduleMetadataIntegration)\n/* harmony export */ });\n/* harmony import */ var _integration_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js\");\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../metadata.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/metadata.js\");\n/* harmony import */ var _utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/envelope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/envelope.js\");\n\n\n\n\n/**\n * Adds module metadata to stack frames.\n *\n * Metadata can be injected by the Sentry bundler plugins using the `moduleMetadata` config option.\n *\n * When this integration is added, the metadata passed to the bundler plugin is added to the stack frames of all events\n * under the `module_metadata` property. This can be used to help in tagging or routing of events from different teams\n * our sources\n */\nconst moduleMetadataIntegration = (0,_integration_js__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(() => {\n  return {\n    name: 'ModuleMetadata',\n    setup(client) {\n      // We need to strip metadata from stack frames before sending them to Sentry since these are client side only.\n      client.on('beforeEnvelope', envelope => {\n        (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.forEachEnvelopeItem)(envelope, (item, type) => {\n          if (type === 'event') {\n            const event = Array.isArray(item) ? (item )[1] : undefined;\n\n            if (event) {\n              (0,_metadata_js__WEBPACK_IMPORTED_MODULE_1__.stripMetadataFromStackFrames)(event);\n              item[1] = event;\n            }\n          }\n        });\n      });\n\n      client.on('applyFrameMetadata', event => {\n        // Only apply stack frame metadata to error events\n        if (event.type) {\n          return;\n        }\n\n        const stackParser = client.getOptions().stackParser;\n        (0,_metadata_js__WEBPACK_IMPORTED_MODULE_1__.addMetadataToStackFrames)(stackParser, event);\n      });\n    },\n  };\n});\n\n\n//# sourceMappingURL=metadata.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9tZXRhZGF0YS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXNEO0FBQ2tDO0FBQzdCOztBQUUzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0Msa0VBQWlCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHVFQUFtQjtBQUMzQjtBQUNBOztBQUVBO0FBQ0EsY0FBYywwRUFBNEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsc0VBQXdCO0FBQ2hDLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVvQztBQUNyQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9tZXRhZGF0YS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZpbmVJbnRlZ3JhdGlvbiB9IGZyb20gJy4uL2ludGVncmF0aW9uLmpzJztcbmltcG9ydCB7IGFkZE1ldGFkYXRhVG9TdGFja0ZyYW1lcywgc3RyaXBNZXRhZGF0YUZyb21TdGFja0ZyYW1lcyB9IGZyb20gJy4uL21ldGFkYXRhLmpzJztcbmltcG9ydCB7IGZvckVhY2hFbnZlbG9wZUl0ZW0gfSBmcm9tICcuLi91dGlscy9lbnZlbG9wZS5qcyc7XG5cbi8qKlxuICogQWRkcyBtb2R1bGUgbWV0YWRhdGEgdG8gc3RhY2sgZnJhbWVzLlxuICpcbiAqIE1ldGFkYXRhIGNhbiBiZSBpbmplY3RlZCBieSB0aGUgU2VudHJ5IGJ1bmRsZXIgcGx1Z2lucyB1c2luZyB0aGUgYG1vZHVsZU1ldGFkYXRhYCBjb25maWcgb3B0aW9uLlxuICpcbiAqIFdoZW4gdGhpcyBpbnRlZ3JhdGlvbiBpcyBhZGRlZCwgdGhlIG1ldGFkYXRhIHBhc3NlZCB0byB0aGUgYnVuZGxlciBwbHVnaW4gaXMgYWRkZWQgdG8gdGhlIHN0YWNrIGZyYW1lcyBvZiBhbGwgZXZlbnRzXG4gKiB1bmRlciB0aGUgYG1vZHVsZV9tZXRhZGF0YWAgcHJvcGVydHkuIFRoaXMgY2FuIGJlIHVzZWQgdG8gaGVscCBpbiB0YWdnaW5nIG9yIHJvdXRpbmcgb2YgZXZlbnRzIGZyb20gZGlmZmVyZW50IHRlYW1zXG4gKiBvdXIgc291cmNlc1xuICovXG5jb25zdCBtb2R1bGVNZXRhZGF0YUludGVncmF0aW9uID0gZGVmaW5lSW50ZWdyYXRpb24oKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdNb2R1bGVNZXRhZGF0YScsXG4gICAgc2V0dXAoY2xpZW50KSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHN0cmlwIG1ldGFkYXRhIGZyb20gc3RhY2sgZnJhbWVzIGJlZm9yZSBzZW5kaW5nIHRoZW0gdG8gU2VudHJ5IHNpbmNlIHRoZXNlIGFyZSBjbGllbnQgc2lkZSBvbmx5LlxuICAgICAgY2xpZW50Lm9uKCdiZWZvcmVFbnZlbG9wZScsIGVudmVsb3BlID0+IHtcbiAgICAgICAgZm9yRWFjaEVudmVsb3BlSXRlbShlbnZlbG9wZSwgKGl0ZW0sIHR5cGUpID0+IHtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2V2ZW50Jykge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBBcnJheS5pc0FycmF5KGl0ZW0pID8gKGl0ZW0gKVsxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICAgIHN0cmlwTWV0YWRhdGFGcm9tU3RhY2tGcmFtZXMoZXZlbnQpO1xuICAgICAgICAgICAgICBpdGVtWzFdID0gZXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjbGllbnQub24oJ2FwcGx5RnJhbWVNZXRhZGF0YScsIGV2ZW50ID0+IHtcbiAgICAgICAgLy8gT25seSBhcHBseSBzdGFjayBmcmFtZSBtZXRhZGF0YSB0byBlcnJvciBldmVudHNcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdGFja1BhcnNlciA9IGNsaWVudC5nZXRPcHRpb25zKCkuc3RhY2tQYXJzZXI7XG4gICAgICAgIGFkZE1ldGFkYXRhVG9TdGFja0ZyYW1lcyhzdGFja1BhcnNlciwgZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn0pO1xuXG5leHBvcnQgeyBtb2R1bGVNZXRhZGF0YUludGVncmF0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXRhZGF0YS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/metadata.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/requestdata.js":
/*!****************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/requestdata.js ***!
  \****************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   requestDataIntegration: () => (/* binding */ requestDataIntegration)\n/* harmony export */ });\n/* harmony import */ var _integration_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js\");\n/* harmony import */ var _utils_cookie_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/cookie.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/cookie.js\");\n/* harmony import */ var _vendor_getIpAddress_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../vendor/getIpAddress.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/vendor/getIpAddress.js\");\n\n\n\n\n// TODO(v10): Change defaults based on `sendDefaultPii`\nconst DEFAULT_INCLUDE = {\n  cookies: true,\n  data: true,\n  headers: true,\n  query_string: true,\n  url: true,\n};\n\nconst INTEGRATION_NAME = 'RequestData';\n\nconst _requestDataIntegration = ((options = {}) => {\n  const include = {\n    ...DEFAULT_INCLUDE,\n    ...options.include,\n  };\n\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(event, _hint, client) {\n      const { sdkProcessingMetadata = {} } = event;\n      const { normalizedRequest, ipAddress } = sdkProcessingMetadata;\n\n      const includeWithDefaultPiiApplied = {\n        ...include,\n        ip: include.ip ?? client.getOptions().sendDefaultPii,\n      };\n\n      if (normalizedRequest) {\n        addNormalizedRequestDataToEvent(event, normalizedRequest, { ipAddress }, includeWithDefaultPiiApplied);\n      }\n\n      return event;\n    },\n  };\n}) ;\n\n/**\n * Add data about a request to an event. Primarily for use in Node-based SDKs, but included in `@sentry/core`\n * so it can be used in cross-platform SDKs like `@sentry/nextjs`.\n */\nconst requestDataIntegration = (0,_integration_js__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(_requestDataIntegration);\n\n/**\n * Add already normalized request data to an event.\n * This mutates the passed in event.\n */\nfunction addNormalizedRequestDataToEvent(\n  event,\n  req,\n  // Data that should not go into `event.request` but is somehow related to requests\n  additionalData,\n  include,\n) {\n  event.request = {\n    ...event.request,\n    ...extractNormalizedRequestData(req, include),\n  };\n\n  if (include.ip) {\n    const ip = (req.headers && (0,_vendor_getIpAddress_js__WEBPACK_IMPORTED_MODULE_2__.getClientIPAddress)(req.headers)) || additionalData.ipAddress;\n    if (ip) {\n      event.user = {\n        ...event.user,\n        ip_address: ip,\n      };\n    }\n  }\n}\n\nfunction extractNormalizedRequestData(\n  normalizedRequest,\n  include,\n) {\n  const requestData = {};\n  const headers = { ...normalizedRequest.headers };\n\n  if (include.headers) {\n    requestData.headers = headers;\n\n    // Remove the Cookie header in case cookie data should not be included in the event\n    if (!include.cookies) {\n      delete (headers ).cookie;\n    }\n\n    // Remove IP headers in case IP data should not be included in the event\n    if (!include.ip) {\n      _vendor_getIpAddress_js__WEBPACK_IMPORTED_MODULE_2__.ipHeaderNames.forEach(ipHeaderName => {\n        // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n        delete (headers )[ipHeaderName];\n      });\n    }\n  }\n\n  requestData.method = normalizedRequest.method;\n\n  if (include.url) {\n    requestData.url = normalizedRequest.url;\n  }\n\n  if (include.cookies) {\n    const cookies = normalizedRequest.cookies || (headers?.cookie ? (0,_utils_cookie_js__WEBPACK_IMPORTED_MODULE_1__.parseCookie)(headers.cookie) : undefined);\n    requestData.cookies = cookies || {};\n  }\n\n  if (include.query_string) {\n    requestData.query_string = normalizedRequest.query_string;\n  }\n\n  if (include.data) {\n    requestData.data = normalizedRequest.data;\n  }\n\n  return requestData;\n}\n\n\n//# sourceMappingURL=requestdata.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9yZXF1ZXN0ZGF0YS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXNEO0FBQ0w7QUFDNkI7O0FBRTlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsNkJBQTZCO0FBQzNDLGNBQWMsK0JBQStCOztBQUU3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9FQUFvRSxXQUFXO0FBQy9FOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixrRUFBaUI7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtCQUErQiwyRUFBa0I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9COztBQUVwQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNLGtFQUFhO0FBQ25CO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvRUFBb0UsNkRBQVc7QUFDL0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRWtDO0FBQ2xDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vaW50ZWdyYXRpb25zL3JlcXVlc3RkYXRhLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmluZUludGVncmF0aW9uIH0gZnJvbSAnLi4vaW50ZWdyYXRpb24uanMnO1xuaW1wb3J0IHsgcGFyc2VDb29raWUgfSBmcm9tICcuLi91dGlscy9jb29raWUuanMnO1xuaW1wb3J0IHsgZ2V0Q2xpZW50SVBBZGRyZXNzLCBpcEhlYWRlck5hbWVzIH0gZnJvbSAnLi4vdmVuZG9yL2dldElwQWRkcmVzcy5qcyc7XG5cbi8vIFRPRE8odjEwKTogQ2hhbmdlIGRlZmF1bHRzIGJhc2VkIG9uIGBzZW5kRGVmYXVsdFBpaWBcbmNvbnN0IERFRkFVTFRfSU5DTFVERSA9IHtcbiAgY29va2llczogdHJ1ZSxcbiAgZGF0YTogdHJ1ZSxcbiAgaGVhZGVyczogdHJ1ZSxcbiAgcXVlcnlfc3RyaW5nOiB0cnVlLFxuICB1cmw6IHRydWUsXG59O1xuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ1JlcXVlc3REYXRhJztcblxuY29uc3QgX3JlcXVlc3REYXRhSW50ZWdyYXRpb24gPSAoKG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBpbmNsdWRlID0ge1xuICAgIC4uLkRFRkFVTFRfSU5DTFVERSxcbiAgICAuLi5vcHRpb25zLmluY2x1ZGUsXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBJTlRFR1JBVElPTl9OQU1FLFxuICAgIHByb2Nlc3NFdmVudChldmVudCwgX2hpbnQsIGNsaWVudCkge1xuICAgICAgY29uc3QgeyBzZGtQcm9jZXNzaW5nTWV0YWRhdGEgPSB7fSB9ID0gZXZlbnQ7XG4gICAgICBjb25zdCB7IG5vcm1hbGl6ZWRSZXF1ZXN0LCBpcEFkZHJlc3MgfSA9IHNka1Byb2Nlc3NpbmdNZXRhZGF0YTtcblxuICAgICAgY29uc3QgaW5jbHVkZVdpdGhEZWZhdWx0UGlpQXBwbGllZCA9IHtcbiAgICAgICAgLi4uaW5jbHVkZSxcbiAgICAgICAgaXA6IGluY2x1ZGUuaXAgPz8gY2xpZW50LmdldE9wdGlvbnMoKS5zZW5kRGVmYXVsdFBpaSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChub3JtYWxpemVkUmVxdWVzdCkge1xuICAgICAgICBhZGROb3JtYWxpemVkUmVxdWVzdERhdGFUb0V2ZW50KGV2ZW50LCBub3JtYWxpemVkUmVxdWVzdCwgeyBpcEFkZHJlc3MgfSwgaW5jbHVkZVdpdGhEZWZhdWx0UGlpQXBwbGllZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9LFxuICB9O1xufSkgO1xuXG4vKipcbiAqIEFkZCBkYXRhIGFib3V0IGEgcmVxdWVzdCB0byBhbiBldmVudC4gUHJpbWFyaWx5IGZvciB1c2UgaW4gTm9kZS1iYXNlZCBTREtzLCBidXQgaW5jbHVkZWQgaW4gYEBzZW50cnkvY29yZWBcbiAqIHNvIGl0IGNhbiBiZSB1c2VkIGluIGNyb3NzLXBsYXRmb3JtIFNES3MgbGlrZSBgQHNlbnRyeS9uZXh0anNgLlxuICovXG5jb25zdCByZXF1ZXN0RGF0YUludGVncmF0aW9uID0gZGVmaW5lSW50ZWdyYXRpb24oX3JlcXVlc3REYXRhSW50ZWdyYXRpb24pO1xuXG4vKipcbiAqIEFkZCBhbHJlYWR5IG5vcm1hbGl6ZWQgcmVxdWVzdCBkYXRhIHRvIGFuIGV2ZW50LlxuICogVGhpcyBtdXRhdGVzIHRoZSBwYXNzZWQgaW4gZXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGFkZE5vcm1hbGl6ZWRSZXF1ZXN0RGF0YVRvRXZlbnQoXG4gIGV2ZW50LFxuICByZXEsXG4gIC8vIERhdGEgdGhhdCBzaG91bGQgbm90IGdvIGludG8gYGV2ZW50LnJlcXVlc3RgIGJ1dCBpcyBzb21laG93IHJlbGF0ZWQgdG8gcmVxdWVzdHNcbiAgYWRkaXRpb25hbERhdGEsXG4gIGluY2x1ZGUsXG4pIHtcbiAgZXZlbnQucmVxdWVzdCA9IHtcbiAgICAuLi5ldmVudC5yZXF1ZXN0LFxuICAgIC4uLmV4dHJhY3ROb3JtYWxpemVkUmVxdWVzdERhdGEocmVxLCBpbmNsdWRlKSxcbiAgfTtcblxuICBpZiAoaW5jbHVkZS5pcCkge1xuICAgIGNvbnN0IGlwID0gKHJlcS5oZWFkZXJzICYmIGdldENsaWVudElQQWRkcmVzcyhyZXEuaGVhZGVycykpIHx8IGFkZGl0aW9uYWxEYXRhLmlwQWRkcmVzcztcbiAgICBpZiAoaXApIHtcbiAgICAgIGV2ZW50LnVzZXIgPSB7XG4gICAgICAgIC4uLmV2ZW50LnVzZXIsXG4gICAgICAgIGlwX2FkZHJlc3M6IGlwLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdE5vcm1hbGl6ZWRSZXF1ZXN0RGF0YShcbiAgbm9ybWFsaXplZFJlcXVlc3QsXG4gIGluY2x1ZGUsXG4pIHtcbiAgY29uc3QgcmVxdWVzdERhdGEgPSB7fTtcbiAgY29uc3QgaGVhZGVycyA9IHsgLi4ubm9ybWFsaXplZFJlcXVlc3QuaGVhZGVycyB9O1xuXG4gIGlmIChpbmNsdWRlLmhlYWRlcnMpIHtcbiAgICByZXF1ZXN0RGF0YS5oZWFkZXJzID0gaGVhZGVycztcblxuICAgIC8vIFJlbW92ZSB0aGUgQ29va2llIGhlYWRlciBpbiBjYXNlIGNvb2tpZSBkYXRhIHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIGV2ZW50XG4gICAgaWYgKCFpbmNsdWRlLmNvb2tpZXMpIHtcbiAgICAgIGRlbGV0ZSAoaGVhZGVycyApLmNvb2tpZTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgSVAgaGVhZGVycyBpbiBjYXNlIElQIGRhdGEgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgZXZlbnRcbiAgICBpZiAoIWluY2x1ZGUuaXApIHtcbiAgICAgIGlwSGVhZGVyTmFtZXMuZm9yRWFjaChpcEhlYWRlck5hbWUgPT4ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXG4gICAgICAgIGRlbGV0ZSAoaGVhZGVycyApW2lwSGVhZGVyTmFtZV07XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXF1ZXN0RGF0YS5tZXRob2QgPSBub3JtYWxpemVkUmVxdWVzdC5tZXRob2Q7XG5cbiAgaWYgKGluY2x1ZGUudXJsKSB7XG4gICAgcmVxdWVzdERhdGEudXJsID0gbm9ybWFsaXplZFJlcXVlc3QudXJsO1xuICB9XG5cbiAgaWYgKGluY2x1ZGUuY29va2llcykge1xuICAgIGNvbnN0IGNvb2tpZXMgPSBub3JtYWxpemVkUmVxdWVzdC5jb29raWVzIHx8IChoZWFkZXJzPy5jb29raWUgPyBwYXJzZUNvb2tpZShoZWFkZXJzLmNvb2tpZSkgOiB1bmRlZmluZWQpO1xuICAgIHJlcXVlc3REYXRhLmNvb2tpZXMgPSBjb29raWVzIHx8IHt9O1xuICB9XG5cbiAgaWYgKGluY2x1ZGUucXVlcnlfc3RyaW5nKSB7XG4gICAgcmVxdWVzdERhdGEucXVlcnlfc3RyaW5nID0gbm9ybWFsaXplZFJlcXVlc3QucXVlcnlfc3RyaW5nO1xuICB9XG5cbiAgaWYgKGluY2x1ZGUuZGF0YSkge1xuICAgIHJlcXVlc3REYXRhLmRhdGEgPSBub3JtYWxpemVkUmVxdWVzdC5kYXRhO1xuICB9XG5cbiAgcmV0dXJuIHJlcXVlc3REYXRhO1xufVxuXG5leHBvcnQgeyByZXF1ZXN0RGF0YUludGVncmF0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXF1ZXN0ZGF0YS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/requestdata.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/rewriteframes.js":
/*!******************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/rewriteframes.js ***!
  \******************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   generateIteratee: () => (/* binding */ generateIteratee),\n/* harmony export */   rewriteFramesIntegration: () => (/* binding */ rewriteFramesIntegration)\n/* harmony export */ });\n/* harmony import */ var _integration_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js\");\n/* harmony import */ var _utils_path_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/path.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/path.js\");\n/* harmony import */ var _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n\n\n\n\nconst INTEGRATION_NAME = 'RewriteFrames';\n\n/**\n * Rewrite event frames paths.\n */\nconst rewriteFramesIntegration = (0,_integration_js__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)((options = {}) => {\n  const root = options.root;\n  const prefix = options.prefix || 'app:///';\n\n  const isBrowser = \"window\" in _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_2__.GLOBAL_OBJ && !!_utils_worldwide_js__WEBPACK_IMPORTED_MODULE_2__.GLOBAL_OBJ.window;\n\n  const iteratee = options.iteratee || generateIteratee({ isBrowser, root, prefix });\n\n  /** Process an exception event. */\n  function _processExceptionsEvent(event) {\n    try {\n      return {\n        ...event,\n        exception: {\n          ...event.exception,\n          // The check for this is performed inside `process` call itself, safe to skip here\n          // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n          values: event.exception.values.map(value => ({\n            ...value,\n            ...(value.stacktrace && { stacktrace: _processStacktrace(value.stacktrace) }),\n          })),\n        },\n      };\n    } catch {\n      return event;\n    }\n  }\n\n  /** Process a stack trace. */\n  function _processStacktrace(stacktrace) {\n    return {\n      ...stacktrace,\n      frames: stacktrace?.frames?.map(f => iteratee(f)),\n    };\n  }\n\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(originalEvent) {\n      let processedEvent = originalEvent;\n\n      if (originalEvent.exception && Array.isArray(originalEvent.exception.values)) {\n        processedEvent = _processExceptionsEvent(processedEvent);\n      }\n\n      return processedEvent;\n    },\n  };\n});\n\n/**\n * Exported only for tests.\n */\nfunction generateIteratee({\n  isBrowser,\n  root,\n  prefix,\n}\n\n) {\n  return (frame) => {\n    if (!frame.filename) {\n      return frame;\n    }\n\n    // Determine if this is a Windows frame by checking for a Windows-style prefix such as `C:\\`\n    const isWindowsFrame =\n      /^[a-zA-Z]:\\\\/.test(frame.filename) ||\n      // or the presence of a backslash without a forward slash (which are not allowed on Windows)\n      (frame.filename.includes('\\\\') && !frame.filename.includes('/'));\n\n    // Check if the frame filename begins with `/`\n    const startsWithSlash = /^\\//.test(frame.filename);\n\n    if (isBrowser) {\n      if (root) {\n        const oldFilename = frame.filename;\n        if (oldFilename.indexOf(root) === 0) {\n          frame.filename = oldFilename.replace(root, prefix);\n        }\n      }\n    } else {\n      if (isWindowsFrame || startsWithSlash) {\n        const filename = isWindowsFrame\n          ? frame.filename\n              .replace(/^[a-zA-Z]:/, '') // remove Windows-style prefix\n              .replace(/\\\\/g, '/') // replace all `\\\\` instances with `/`\n          : frame.filename;\n        const base = root ? (0,_utils_path_js__WEBPACK_IMPORTED_MODULE_1__.relative)(root, filename) : (0,_utils_path_js__WEBPACK_IMPORTED_MODULE_1__.basename)(filename);\n        frame.filename = `${prefix}${base}`;\n      }\n    }\n\n    return frame;\n  };\n}\n\n\n//# sourceMappingURL=rewriteframes.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9yZXdyaXRlZnJhbWVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXNEO0FBQ0E7QUFDSDs7QUFFbkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLGtFQUFpQixjQUFjO0FBQ2hFO0FBQ0E7O0FBRUEsb0JBQW9CLHVFQUFzQixNQUFNLDJEQUFVOztBQUUxRCwwREFBMEQseUJBQXlCOztBQUVuRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLGtEQUFrRDtBQUN4RixXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHdEQUFRLG1CQUFtQix3REFBUTtBQUMvRCw0QkFBNEIsT0FBTyxFQUFFLEtBQUs7QUFDMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRXNEO0FBQ3REIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vaW50ZWdyYXRpb25zL3Jld3JpdGVmcmFtZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lSW50ZWdyYXRpb24gfSBmcm9tICcuLi9pbnRlZ3JhdGlvbi5qcyc7XG5pbXBvcnQgeyByZWxhdGl2ZSwgYmFzZW5hbWUgfSBmcm9tICcuLi91dGlscy9wYXRoLmpzJztcbmltcG9ydCB7IEdMT0JBTF9PQkogfSBmcm9tICcuLi91dGlscy93b3JsZHdpZGUuanMnO1xuXG5jb25zdCBJTlRFR1JBVElPTl9OQU1FID0gJ1Jld3JpdGVGcmFtZXMnO1xuXG4vKipcbiAqIFJld3JpdGUgZXZlbnQgZnJhbWVzIHBhdGhzLlxuICovXG5jb25zdCByZXdyaXRlRnJhbWVzSW50ZWdyYXRpb24gPSBkZWZpbmVJbnRlZ3JhdGlvbigob3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHJvb3QgPSBvcHRpb25zLnJvb3Q7XG4gIGNvbnN0IHByZWZpeCA9IG9wdGlvbnMucHJlZml4IHx8ICdhcHA6Ly8vJztcblxuICBjb25zdCBpc0Jyb3dzZXIgPSAnd2luZG93JyBpbiBHTE9CQUxfT0JKICYmICEhR0xPQkFMX09CSi53aW5kb3c7XG5cbiAgY29uc3QgaXRlcmF0ZWUgPSBvcHRpb25zLml0ZXJhdGVlIHx8IGdlbmVyYXRlSXRlcmF0ZWUoeyBpc0Jyb3dzZXIsIHJvb3QsIHByZWZpeCB9KTtcblxuICAvKiogUHJvY2VzcyBhbiBleGNlcHRpb24gZXZlbnQuICovXG4gIGZ1bmN0aW9uIF9wcm9jZXNzRXhjZXB0aW9uc0V2ZW50KGV2ZW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmV2ZW50LFxuICAgICAgICBleGNlcHRpb246IHtcbiAgICAgICAgICAuLi5ldmVudC5leGNlcHRpb24sXG4gICAgICAgICAgLy8gVGhlIGNoZWNrIGZvciB0aGlzIGlzIHBlcmZvcm1lZCBpbnNpZGUgYHByb2Nlc3NgIGNhbGwgaXRzZWxmLCBzYWZlIHRvIHNraXAgaGVyZVxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgdmFsdWVzOiBldmVudC5leGNlcHRpb24udmFsdWVzLm1hcCh2YWx1ZSA9PiAoe1xuICAgICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgICAuLi4odmFsdWUuc3RhY2t0cmFjZSAmJiB7IHN0YWNrdHJhY2U6IF9wcm9jZXNzU3RhY2t0cmFjZSh2YWx1ZS5zdGFja3RyYWNlKSB9KSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBQcm9jZXNzIGEgc3RhY2sgdHJhY2UuICovXG4gIGZ1bmN0aW9uIF9wcm9jZXNzU3RhY2t0cmFjZShzdGFja3RyYWNlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YWNrdHJhY2UsXG4gICAgICBmcmFtZXM6IHN0YWNrdHJhY2U/LmZyYW1lcz8ubWFwKGYgPT4gaXRlcmF0ZWUoZikpLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6IElOVEVHUkFUSU9OX05BTUUsXG4gICAgcHJvY2Vzc0V2ZW50KG9yaWdpbmFsRXZlbnQpIHtcbiAgICAgIGxldCBwcm9jZXNzZWRFdmVudCA9IG9yaWdpbmFsRXZlbnQ7XG5cbiAgICAgIGlmIChvcmlnaW5hbEV2ZW50LmV4Y2VwdGlvbiAmJiBBcnJheS5pc0FycmF5KG9yaWdpbmFsRXZlbnQuZXhjZXB0aW9uLnZhbHVlcykpIHtcbiAgICAgICAgcHJvY2Vzc2VkRXZlbnQgPSBfcHJvY2Vzc0V4Y2VwdGlvbnNFdmVudChwcm9jZXNzZWRFdmVudCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9jZXNzZWRFdmVudDtcbiAgICB9LFxuICB9O1xufSk7XG5cbi8qKlxuICogRXhwb3J0ZWQgb25seSBmb3IgdGVzdHMuXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlSXRlcmF0ZWUoe1xuICBpc0Jyb3dzZXIsXG4gIHJvb3QsXG4gIHByZWZpeCxcbn1cblxuKSB7XG4gIHJldHVybiAoZnJhbWUpID0+IHtcbiAgICBpZiAoIWZyYW1lLmZpbGVuYW1lKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuXG4gICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBXaW5kb3dzIGZyYW1lIGJ5IGNoZWNraW5nIGZvciBhIFdpbmRvd3Mtc3R5bGUgcHJlZml4IHN1Y2ggYXMgYEM6XFxgXG4gICAgY29uc3QgaXNXaW5kb3dzRnJhbWUgPVxuICAgICAgL15bYS16QS1aXTpcXFxcLy50ZXN0KGZyYW1lLmZpbGVuYW1lKSB8fFxuICAgICAgLy8gb3IgdGhlIHByZXNlbmNlIG9mIGEgYmFja3NsYXNoIHdpdGhvdXQgYSBmb3J3YXJkIHNsYXNoICh3aGljaCBhcmUgbm90IGFsbG93ZWQgb24gV2luZG93cylcbiAgICAgIChmcmFtZS5maWxlbmFtZS5pbmNsdWRlcygnXFxcXCcpICYmICFmcmFtZS5maWxlbmFtZS5pbmNsdWRlcygnLycpKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSBmcmFtZSBmaWxlbmFtZSBiZWdpbnMgd2l0aCBgL2BcbiAgICBjb25zdCBzdGFydHNXaXRoU2xhc2ggPSAvXlxcLy8udGVzdChmcmFtZS5maWxlbmFtZSk7XG5cbiAgICBpZiAoaXNCcm93c2VyKSB7XG4gICAgICBpZiAocm9vdCkge1xuICAgICAgICBjb25zdCBvbGRGaWxlbmFtZSA9IGZyYW1lLmZpbGVuYW1lO1xuICAgICAgICBpZiAob2xkRmlsZW5hbWUuaW5kZXhPZihyb290KSA9PT0gMCkge1xuICAgICAgICAgIGZyYW1lLmZpbGVuYW1lID0gb2xkRmlsZW5hbWUucmVwbGFjZShyb290LCBwcmVmaXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc1dpbmRvd3NGcmFtZSB8fCBzdGFydHNXaXRoU2xhc2gpIHtcbiAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBpc1dpbmRvd3NGcmFtZVxuICAgICAgICAgID8gZnJhbWUuZmlsZW5hbWVcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL15bYS16QS1aXTovLCAnJykgLy8gcmVtb3ZlIFdpbmRvd3Mtc3R5bGUgcHJlZml4XG4gICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcL2csICcvJykgLy8gcmVwbGFjZSBhbGwgYFxcXFxgIGluc3RhbmNlcyB3aXRoIGAvYFxuICAgICAgICAgIDogZnJhbWUuZmlsZW5hbWU7XG4gICAgICAgIGNvbnN0IGJhc2UgPSByb290ID8gcmVsYXRpdmUocm9vdCwgZmlsZW5hbWUpIDogYmFzZW5hbWUoZmlsZW5hbWUpO1xuICAgICAgICBmcmFtZS5maWxlbmFtZSA9IGAke3ByZWZpeH0ke2Jhc2V9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZnJhbWU7XG4gIH07XG59XG5cbmV4cG9ydCB7IGdlbmVyYXRlSXRlcmF0ZWUsIHJld3JpdGVGcmFtZXNJbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmV3cml0ZWZyYW1lcy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/rewriteframes.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/supabase.js":
/*!*************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/supabase.js ***!
  \*************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   DB_OPERATIONS_TO_INSTRUMENT: () => (/* binding */ DB_OPERATIONS_TO_INSTRUMENT),\n/* harmony export */   FILTER_MAPPINGS: () => (/* binding */ FILTER_MAPPINGS),\n/* harmony export */   extractOperation: () => (/* binding */ extractOperation),\n/* harmony export */   instrumentSupabaseClient: () => (/* binding */ instrumentSupabaseClient),\n/* harmony export */   supabaseIntegration: () => (/* binding */ supabaseIntegration),\n/* harmony export */   translateFiltersIntoMethods: () => (/* binding */ translateFiltersIntoMethods)\n/* harmony export */ });\n/* harmony import */ var _breadcrumbs_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../breadcrumbs.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/breadcrumbs.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _exports_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../exports.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/exports.js\");\n/* harmony import */ var _integration_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js\");\n/* harmony import */ var _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../semanticAttributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/semanticAttributes.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_is_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n/* harmony import */ var _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../tracing/spanstatus.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/spanstatus.js\");\n/* harmony import */ var _tracing_trace_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../tracing/trace.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/trace.js\");\n\n\n\n\n\n\n\n\n\n\n// Based on Kamil Ogórek's work on:\n// https://github.com/supabase-community/sentry-integration-js\n\n\nconst AUTH_OPERATIONS_TO_INSTRUMENT = [\n  'reauthenticate',\n  'signInAnonymously',\n  'signInWithOAuth',\n  'signInWithIdToken',\n  'signInWithOtp',\n  'signInWithPassword',\n  'signInWithSSO',\n  'signOut',\n  'signUp',\n  'verifyOtp',\n];\n\nconst AUTH_ADMIN_OPERATIONS_TO_INSTRUMENT = [\n  'createUser',\n  'deleteUser',\n  'listUsers',\n  'getUserById',\n  'updateUserById',\n  'inviteUserByEmail',\n];\n\nconst FILTER_MAPPINGS = {\n  eq: 'eq',\n  neq: 'neq',\n  gt: 'gt',\n  gte: 'gte',\n  lt: 'lt',\n  lte: 'lte',\n  like: 'like',\n  'like(all)': 'likeAllOf',\n  'like(any)': 'likeAnyOf',\n  ilike: 'ilike',\n  'ilike(all)': 'ilikeAllOf',\n  'ilike(any)': 'ilikeAnyOf',\n  is: 'is',\n  in: 'in',\n  cs: 'contains',\n  cd: 'containedBy',\n  sr: 'rangeGt',\n  nxl: 'rangeGte',\n  sl: 'rangeLt',\n  nxr: 'rangeLte',\n  adj: 'rangeAdjacent',\n  ov: 'overlaps',\n  fts: '',\n  plfts: 'plain',\n  phfts: 'phrase',\n  wfts: 'websearch',\n  not: 'not',\n};\n\nconst DB_OPERATIONS_TO_INSTRUMENT = ['select', 'insert', 'upsert', 'update', 'delete'];\n\nfunction markAsInstrumented(fn) {\n  try {\n    (fn ).__SENTRY_INSTRUMENTED__ = true;\n  } catch {\n    // ignore errors here\n  }\n}\n\nfunction isInstrumented(fn) {\n  try {\n    return (fn ).__SENTRY_INSTRUMENTED__;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Extracts the database operation type from the HTTP method and headers\n * @param method - The HTTP method of the request\n * @param headers - The request headers\n * @returns The database operation type ('select', 'insert', 'upsert', 'update', or 'delete')\n */\nfunction extractOperation(method, headers = {}) {\n  switch (method) {\n    case 'GET': {\n      return 'select';\n    }\n    case 'POST': {\n      if (headers['Prefer']?.includes('resolution=')) {\n        return 'upsert';\n      } else {\n        return 'insert';\n      }\n    }\n    case 'PATCH': {\n      return 'update';\n    }\n    case 'DELETE': {\n      return 'delete';\n    }\n    default: {\n      return '<unknown-op>';\n    }\n  }\n}\n\n/**\n * Translates Supabase filter parameters into readable method names for tracing\n * @param key - The filter key from the URL search parameters\n * @param query - The filter value from the URL search parameters\n * @returns A string representation of the filter as a method call\n */\nfunction translateFiltersIntoMethods(key, query) {\n  if (query === '' || query === '*') {\n    return 'select(*)';\n  }\n\n  if (key === 'select') {\n    return `select(${query})`;\n  }\n\n  if (key === 'or' || key.endsWith('.or')) {\n    return `${key}${query}`;\n  }\n\n  const [filter, ...value] = query.split('.');\n\n  let method;\n  // Handle optional `configPart` of the filter\n  if (filter?.startsWith('fts')) {\n    method = 'textSearch';\n  } else if (filter?.startsWith('plfts')) {\n    method = 'textSearch[plain]';\n  } else if (filter?.startsWith('phfts')) {\n    method = 'textSearch[phrase]';\n  } else if (filter?.startsWith('wfts')) {\n    method = 'textSearch[websearch]';\n  } else {\n    method = (filter && FILTER_MAPPINGS[filter ]) || 'filter';\n  }\n\n  return `${method}(${key}, ${value.join('.')})`;\n}\n\nfunction instrumentAuthOperation(operation, isAdmin = false) {\n  return new Proxy(operation, {\n    apply(target, thisArg, argumentsList) {\n      return (0,_tracing_trace_js__WEBPACK_IMPORTED_MODULE_8__.startSpan)(\n        {\n          name: `auth ${isAdmin ? '(admin) ' : ''}${operation.name}`,\n          attributes: {\n            [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_4__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.supabase',\n            [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_4__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'db',\n            'db.system': 'postgresql',\n            'db.operation': `auth.${isAdmin ? 'admin.' : ''}${operation.name}`,\n          },\n        },\n        span => {\n          return Reflect.apply(target, thisArg, argumentsList)\n            .then((res) => {\n              if (res && typeof res === 'object' && 'error' in res && res.error) {\n                span.setStatus({ code: _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_7__.SPAN_STATUS_ERROR });\n\n                (0,_exports_js__WEBPACK_IMPORTED_MODULE_2__.captureException)(res.error, {\n                  mechanism: {\n                    handled: false,\n                  },\n                });\n              } else {\n                span.setStatus({ code: _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_7__.SPAN_STATUS_OK });\n              }\n\n              span.end();\n              return res;\n            })\n            .catch((err) => {\n              span.setStatus({ code: _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_7__.SPAN_STATUS_ERROR });\n              span.end();\n\n              (0,_exports_js__WEBPACK_IMPORTED_MODULE_2__.captureException)(err, {\n                mechanism: {\n                  handled: false,\n                },\n              });\n\n              throw err;\n            })\n            .then(...argumentsList);\n        },\n      );\n    },\n  });\n}\n\nfunction instrumentSupabaseAuthClient(supabaseClientInstance) {\n  const auth = supabaseClientInstance.auth;\n\n  if (!auth || isInstrumented(supabaseClientInstance.auth)) {\n    return;\n  }\n\n  for (const operation of AUTH_OPERATIONS_TO_INSTRUMENT) {\n    const authOperation = auth[operation];\n\n    if (!authOperation) {\n      continue;\n    }\n\n    if (typeof supabaseClientInstance.auth[operation] === 'function') {\n      supabaseClientInstance.auth[operation] = instrumentAuthOperation(authOperation);\n    }\n  }\n\n  for (const operation of AUTH_ADMIN_OPERATIONS_TO_INSTRUMENT) {\n    const authOperation = auth.admin[operation];\n\n    if (!authOperation) {\n      continue;\n    }\n\n    if (typeof supabaseClientInstance.auth.admin[operation] === 'function') {\n      supabaseClientInstance.auth.admin[operation] = instrumentAuthOperation(authOperation, true);\n    }\n  }\n\n  markAsInstrumented(supabaseClientInstance.auth);\n}\n\nfunction instrumentSupabaseClientConstructor(SupabaseClient) {\n  if (isInstrumented((SupabaseClient ).prototype.from)) {\n    return;\n  }\n\n  (SupabaseClient ).prototype.from = new Proxy(\n    (SupabaseClient ).prototype.from,\n    {\n      apply(target, thisArg, argumentsList) {\n        const rv = Reflect.apply(target, thisArg, argumentsList);\n        const PostgRESTQueryBuilder = (rv ).constructor;\n\n        instrumentPostgRESTQueryBuilder(PostgRESTQueryBuilder );\n\n        return rv;\n      },\n    },\n  );\n\n  markAsInstrumented((SupabaseClient ).prototype.from);\n}\n\nfunction instrumentPostgRESTFilterBuilder(PostgRESTFilterBuilder) {\n  if (isInstrumented((PostgRESTFilterBuilder.prototype ).then)) {\n    return;\n  }\n\n  (PostgRESTFilterBuilder.prototype ).then = new Proxy(\n    (PostgRESTFilterBuilder.prototype ).then,\n    {\n      apply(target, thisArg, argumentsList) {\n        const operations = DB_OPERATIONS_TO_INSTRUMENT;\n        const typedThis = thisArg ;\n        const operation = extractOperation(typedThis.method, typedThis.headers);\n\n        if (!operations.includes(operation)) {\n          return Reflect.apply(target, thisArg, argumentsList);\n        }\n\n        if (!typedThis?.url?.pathname || typeof typedThis.url.pathname !== 'string') {\n          return Reflect.apply(target, thisArg, argumentsList);\n        }\n\n        const pathParts = typedThis.url.pathname.split('/');\n        const table = pathParts.length > 0 ? pathParts[pathParts.length - 1] : '';\n\n        const queryItems = [];\n        for (const [key, value] of typedThis.url.searchParams.entries()) {\n          // It's possible to have multiple entries for the same key, eg. `id=eq.7&id=eq.3`,\n          // so we need to use array instead of object to collect them.\n          queryItems.push(translateFiltersIntoMethods(key, value));\n        }\n        const body = Object.create(null);\n        if ((0,_utils_is_js__WEBPACK_IMPORTED_MODULE_6__.isPlainObject)(typedThis.body)) {\n          for (const [key, value] of Object.entries(typedThis.body)) {\n            body[key] = value;\n          }\n        }\n\n        // Adding operation to the beginning of the description if it's not a `select` operation\n        // For example, it can be an `insert` or `update` operation but the query can be `select(...)`\n        // For `select` operations, we don't need repeat it in the description\n        const description = `${operation === 'select' ? '' : `${operation}${body ? '(...) ' : ''}`}${queryItems.join(\n          ' ',\n        )} from(${table})`;\n\n        const attributes = {\n          'db.table': table,\n          'db.schema': typedThis.schema,\n          'db.url': typedThis.url.origin,\n          'db.sdk': typedThis.headers['X-Client-Info'],\n          'db.system': 'postgresql',\n          'db.operation': operation,\n          [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_4__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.supabase',\n          [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_4__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'db',\n        };\n\n        if (queryItems.length) {\n          attributes['db.query'] = queryItems;\n        }\n\n        if (Object.keys(body).length) {\n          attributes['db.body'] = body;\n        }\n\n        return (0,_tracing_trace_js__WEBPACK_IMPORTED_MODULE_8__.startSpan)(\n          {\n            name: description,\n            attributes,\n          },\n          span => {\n            return (Reflect.apply(target, thisArg, []) )\n              .then(\n                (res) => {\n                  if (span) {\n                    if (res && typeof res === 'object' && 'status' in res) {\n                      (0,_tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_7__.setHttpStatus)(span, res.status || 500);\n                    }\n                    span.end();\n                  }\n\n                  if (res.error) {\n                    const err = new Error(res.error.message) ;\n                    if (res.error.code) {\n                      err.code = res.error.code;\n                    }\n                    if (res.error.details) {\n                      err.details = res.error.details;\n                    }\n\n                    const supabaseContext = {};\n                    if (queryItems.length) {\n                      supabaseContext.query = queryItems;\n                    }\n                    if (Object.keys(body).length) {\n                      supabaseContext.body = body;\n                    }\n\n                    (0,_exports_js__WEBPACK_IMPORTED_MODULE_2__.captureException)(err, {\n                      contexts: {\n                        supabase: supabaseContext,\n                      },\n                    });\n                  }\n\n                  const breadcrumb = {\n                    type: 'supabase',\n                    category: `db.${operation}`,\n                    message: description,\n                  };\n\n                  const data = {};\n\n                  if (queryItems.length) {\n                    data.query = queryItems;\n                  }\n\n                  if (Object.keys(body).length) {\n                    data.body = body;\n                  }\n\n                  if (Object.keys(data).length) {\n                    breadcrumb.data = data;\n                  }\n\n                  (0,_breadcrumbs_js__WEBPACK_IMPORTED_MODULE_0__.addBreadcrumb)(breadcrumb);\n\n                  return res;\n                },\n                (err) => {\n                  if (span) {\n                    (0,_tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_7__.setHttpStatus)(span, 500);\n                    span.end();\n                  }\n                  throw err;\n                },\n              )\n              .then(...argumentsList);\n          },\n        );\n      },\n    },\n  );\n\n  markAsInstrumented((PostgRESTFilterBuilder.prototype ).then);\n}\n\nfunction instrumentPostgRESTQueryBuilder(PostgRESTQueryBuilder) {\n  // We need to wrap _all_ operations despite them sharing the same `PostgRESTFilterBuilder`\n  // constructor, as we don't know which method will be called first, and we don't want to miss any calls.\n  for (const operation of DB_OPERATIONS_TO_INSTRUMENT) {\n    if (isInstrumented((PostgRESTQueryBuilder.prototype )[operation])) {\n      continue;\n    }\n\n    (PostgRESTQueryBuilder.prototype )[operation ] = new Proxy(\n      (PostgRESTQueryBuilder.prototype )[operation ],\n      {\n        apply(target, thisArg, argumentsList) {\n          const rv = Reflect.apply(target, thisArg, argumentsList);\n          const PostgRESTFilterBuilder = (rv ).constructor;\n\n          _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_5__.debug.log(`Instrumenting ${operation} operation's PostgRESTFilterBuilder`);\n\n          instrumentPostgRESTFilterBuilder(PostgRESTFilterBuilder);\n\n          return rv;\n        },\n      },\n    );\n\n    markAsInstrumented((PostgRESTQueryBuilder.prototype )[operation]);\n  }\n}\n\nconst instrumentSupabaseClient = (supabaseClient) => {\n  if (!supabaseClient) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_5__.debug.warn('Supabase integration was not installed because no Supabase client was provided.');\n    return;\n  }\n  const SupabaseClientConstructor =\n    supabaseClient.constructor === Function ? supabaseClient : supabaseClient.constructor;\n\n  instrumentSupabaseClientConstructor(SupabaseClientConstructor);\n  instrumentSupabaseAuthClient(supabaseClient );\n};\n\nconst INTEGRATION_NAME = 'Supabase';\n\nconst _supabaseIntegration = ((supabaseClient) => {\n  return {\n    setupOnce() {\n      instrumentSupabaseClient(supabaseClient);\n    },\n    name: INTEGRATION_NAME,\n  };\n}) ;\n\nconst supabaseIntegration = (0,_integration_js__WEBPACK_IMPORTED_MODULE_3__.defineIntegration)((options) => {\n  return _supabaseIntegration(options.supabaseClient);\n}) ;\n\n\n//# sourceMappingURL=supabase.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy9zdXBhYmFzZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBa0Q7QUFDRjtBQUNDO0FBQ0s7QUFDb0Q7QUFDekQ7QUFDRjtBQUM2QztBQUM1Qzs7QUFFaEQ7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsTUFBTTtBQUMzQjs7QUFFQTtBQUNBLGNBQWMsSUFBSSxFQUFFLE1BQU07QUFDMUI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQSxZQUFZLE9BQU8sR0FBRyxJQUFJLElBQUksZ0JBQWdCO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsNERBQVM7QUFDdEI7QUFDQSx3QkFBd0IsMEJBQTBCLEVBQUUsZUFBZTtBQUNuRTtBQUNBLGFBQWEsb0ZBQWdDO0FBQzdDLGFBQWEsZ0ZBQTRCO0FBQ3pDO0FBQ0Esb0NBQW9DLHdCQUF3QixFQUFFLGVBQWU7QUFDN0UsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxNQUFNLHFFQUFpQixFQUFFOztBQUUxRCxnQkFBZ0IsNkRBQWdCO0FBQ2hDO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkIsaUJBQWlCO0FBQ2pCLGdCQUFnQjtBQUNoQixpQ0FBaUMsTUFBTSxrRUFBYyxFQUFFO0FBQ3ZEOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSwrQkFBK0IsTUFBTSxxRUFBaUIsRUFBRTtBQUN4RDs7QUFFQSxjQUFjLDZEQUFnQjtBQUM5QjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGVBQWU7O0FBRWY7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksMkRBQWE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGlDQUFpQyxVQUFVLEVBQUUscUJBQXFCLEVBQUUsRUFBRTtBQUNyRztBQUNBLFdBQVcsT0FBTyxNQUFNOztBQUV4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0ZBQWdDO0FBQzNDLFdBQVcsZ0ZBQTRCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZSw0REFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHFFQUFhO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQiw2REFBZ0I7QUFDcEM7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QixxQkFBcUI7QUFDckI7O0FBRUE7QUFDQTtBQUNBLG9DQUFvQyxVQUFVO0FBQzlDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLDhEQUFhOztBQUUvQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0Esb0JBQW9CLHFFQUFhO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLHdEQUFXLElBQUkseURBQUssc0JBQXNCLFdBQVc7O0FBRS9EOztBQUVBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksd0RBQVcsSUFBSSx5REFBSztBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUM7O0FBRUQsNEJBQTRCLGtFQUFpQjtBQUM3QztBQUNBLENBQUM7O0FBRXFKO0FBQ3RKIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vaW50ZWdyYXRpb25zL3N1cGFiYXNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZEJyZWFkY3J1bWIgfSBmcm9tICcuLi9icmVhZGNydW1icy5qcyc7XG5pbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4uL2RlYnVnLWJ1aWxkLmpzJztcbmltcG9ydCB7IGNhcHR1cmVFeGNlcHRpb24gfSBmcm9tICcuLi9leHBvcnRzLmpzJztcbmltcG9ydCB7IGRlZmluZUludGVncmF0aW9uIH0gZnJvbSAnLi4vaW50ZWdyYXRpb24uanMnO1xuaW1wb3J0IHsgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUCwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU4gfSBmcm9tICcuLi9zZW1hbnRpY0F0dHJpYnV0ZXMuanMnO1xuaW1wb3J0IHsgZGVidWcgfSBmcm9tICcuLi91dGlscy9kZWJ1Zy1sb2dnZXIuanMnO1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJy4uL3V0aWxzL2lzLmpzJztcbmltcG9ydCB7IFNQQU5fU1RBVFVTX0VSUk9SLCBTUEFOX1NUQVRVU19PSywgc2V0SHR0cFN0YXR1cyB9IGZyb20gJy4uL3RyYWNpbmcvc3BhbnN0YXR1cy5qcyc7XG5pbXBvcnQgeyBzdGFydFNwYW4gfSBmcm9tICcuLi90cmFjaW5nL3RyYWNlLmpzJztcblxuLy8gQmFzZWQgb24gS2FtaWwgT2fDs3JlaydzIHdvcmsgb246XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc3VwYWJhc2UtY29tbXVuaXR5L3NlbnRyeS1pbnRlZ3JhdGlvbi1qc1xuXG5cbmNvbnN0IEFVVEhfT1BFUkFUSU9OU19UT19JTlNUUlVNRU5UID0gW1xuICAncmVhdXRoZW50aWNhdGUnLFxuICAnc2lnbkluQW5vbnltb3VzbHknLFxuICAnc2lnbkluV2l0aE9BdXRoJyxcbiAgJ3NpZ25JbldpdGhJZFRva2VuJyxcbiAgJ3NpZ25JbldpdGhPdHAnLFxuICAnc2lnbkluV2l0aFBhc3N3b3JkJyxcbiAgJ3NpZ25JbldpdGhTU08nLFxuICAnc2lnbk91dCcsXG4gICdzaWduVXAnLFxuICAndmVyaWZ5T3RwJyxcbl07XG5cbmNvbnN0IEFVVEhfQURNSU5fT1BFUkFUSU9OU19UT19JTlNUUlVNRU5UID0gW1xuICAnY3JlYXRlVXNlcicsXG4gICdkZWxldGVVc2VyJyxcbiAgJ2xpc3RVc2VycycsXG4gICdnZXRVc2VyQnlJZCcsXG4gICd1cGRhdGVVc2VyQnlJZCcsXG4gICdpbnZpdGVVc2VyQnlFbWFpbCcsXG5dO1xuXG5jb25zdCBGSUxURVJfTUFQUElOR1MgPSB7XG4gIGVxOiAnZXEnLFxuICBuZXE6ICduZXEnLFxuICBndDogJ2d0JyxcbiAgZ3RlOiAnZ3RlJyxcbiAgbHQ6ICdsdCcsXG4gIGx0ZTogJ2x0ZScsXG4gIGxpa2U6ICdsaWtlJyxcbiAgJ2xpa2UoYWxsKSc6ICdsaWtlQWxsT2YnLFxuICAnbGlrZShhbnkpJzogJ2xpa2VBbnlPZicsXG4gIGlsaWtlOiAnaWxpa2UnLFxuICAnaWxpa2UoYWxsKSc6ICdpbGlrZUFsbE9mJyxcbiAgJ2lsaWtlKGFueSknOiAnaWxpa2VBbnlPZicsXG4gIGlzOiAnaXMnLFxuICBpbjogJ2luJyxcbiAgY3M6ICdjb250YWlucycsXG4gIGNkOiAnY29udGFpbmVkQnknLFxuICBzcjogJ3JhbmdlR3QnLFxuICBueGw6ICdyYW5nZUd0ZScsXG4gIHNsOiAncmFuZ2VMdCcsXG4gIG54cjogJ3JhbmdlTHRlJyxcbiAgYWRqOiAncmFuZ2VBZGphY2VudCcsXG4gIG92OiAnb3ZlcmxhcHMnLFxuICBmdHM6ICcnLFxuICBwbGZ0czogJ3BsYWluJyxcbiAgcGhmdHM6ICdwaHJhc2UnLFxuICB3ZnRzOiAnd2Vic2VhcmNoJyxcbiAgbm90OiAnbm90Jyxcbn07XG5cbmNvbnN0IERCX09QRVJBVElPTlNfVE9fSU5TVFJVTUVOVCA9IFsnc2VsZWN0JywgJ2luc2VydCcsICd1cHNlcnQnLCAndXBkYXRlJywgJ2RlbGV0ZSddO1xuXG5mdW5jdGlvbiBtYXJrQXNJbnN0cnVtZW50ZWQoZm4pIHtcbiAgdHJ5IHtcbiAgICAoZm4gKS5fX1NFTlRSWV9JTlNUUlVNRU5URURfXyA9IHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZSBlcnJvcnMgaGVyZVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzSW5zdHJ1bWVudGVkKGZuKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChmbiApLl9fU0VOVFJZX0lOU1RSVU1FTlRFRF9fO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgZGF0YWJhc2Ugb3BlcmF0aW9uIHR5cGUgZnJvbSB0aGUgSFRUUCBtZXRob2QgYW5kIGhlYWRlcnNcbiAqIEBwYXJhbSBtZXRob2QgLSBUaGUgSFRUUCBtZXRob2Qgb2YgdGhlIHJlcXVlc3RcbiAqIEBwYXJhbSBoZWFkZXJzIC0gVGhlIHJlcXVlc3QgaGVhZGVyc1xuICogQHJldHVybnMgVGhlIGRhdGFiYXNlIG9wZXJhdGlvbiB0eXBlICgnc2VsZWN0JywgJ2luc2VydCcsICd1cHNlcnQnLCAndXBkYXRlJywgb3IgJ2RlbGV0ZScpXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RPcGVyYXRpb24obWV0aG9kLCBoZWFkZXJzID0ge30pIHtcbiAgc3dpdGNoIChtZXRob2QpIHtcbiAgICBjYXNlICdHRVQnOiB7XG4gICAgICByZXR1cm4gJ3NlbGVjdCc7XG4gICAgfVxuICAgIGNhc2UgJ1BPU1QnOiB7XG4gICAgICBpZiAoaGVhZGVyc1snUHJlZmVyJ10/LmluY2x1ZGVzKCdyZXNvbHV0aW9uPScpKSB7XG4gICAgICAgIHJldHVybiAndXBzZXJ0JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnaW5zZXJ0JztcbiAgICAgIH1cbiAgICB9XG4gICAgY2FzZSAnUEFUQ0gnOiB7XG4gICAgICByZXR1cm4gJ3VwZGF0ZSc7XG4gICAgfVxuICAgIGNhc2UgJ0RFTEVURSc6IHtcbiAgICAgIHJldHVybiAnZGVsZXRlJztcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuICc8dW5rbm93bi1vcD4nO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRyYW5zbGF0ZXMgU3VwYWJhc2UgZmlsdGVyIHBhcmFtZXRlcnMgaW50byByZWFkYWJsZSBtZXRob2QgbmFtZXMgZm9yIHRyYWNpbmdcbiAqIEBwYXJhbSBrZXkgLSBUaGUgZmlsdGVyIGtleSBmcm9tIHRoZSBVUkwgc2VhcmNoIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBxdWVyeSAtIFRoZSBmaWx0ZXIgdmFsdWUgZnJvbSB0aGUgVVJMIHNlYXJjaCBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZmlsdGVyIGFzIGEgbWV0aG9kIGNhbGxcbiAqL1xuZnVuY3Rpb24gdHJhbnNsYXRlRmlsdGVyc0ludG9NZXRob2RzKGtleSwgcXVlcnkpIHtcbiAgaWYgKHF1ZXJ5ID09PSAnJyB8fCBxdWVyeSA9PT0gJyonKSB7XG4gICAgcmV0dXJuICdzZWxlY3QoKiknO1xuICB9XG5cbiAgaWYgKGtleSA9PT0gJ3NlbGVjdCcpIHtcbiAgICByZXR1cm4gYHNlbGVjdCgke3F1ZXJ5fSlgO1xuICB9XG5cbiAgaWYgKGtleSA9PT0gJ29yJyB8fCBrZXkuZW5kc1dpdGgoJy5vcicpKSB7XG4gICAgcmV0dXJuIGAke2tleX0ke3F1ZXJ5fWA7XG4gIH1cblxuICBjb25zdCBbZmlsdGVyLCAuLi52YWx1ZV0gPSBxdWVyeS5zcGxpdCgnLicpO1xuXG4gIGxldCBtZXRob2Q7XG4gIC8vIEhhbmRsZSBvcHRpb25hbCBgY29uZmlnUGFydGAgb2YgdGhlIGZpbHRlclxuICBpZiAoZmlsdGVyPy5zdGFydHNXaXRoKCdmdHMnKSkge1xuICAgIG1ldGhvZCA9ICd0ZXh0U2VhcmNoJztcbiAgfSBlbHNlIGlmIChmaWx0ZXI/LnN0YXJ0c1dpdGgoJ3BsZnRzJykpIHtcbiAgICBtZXRob2QgPSAndGV4dFNlYXJjaFtwbGFpbl0nO1xuICB9IGVsc2UgaWYgKGZpbHRlcj8uc3RhcnRzV2l0aCgncGhmdHMnKSkge1xuICAgIG1ldGhvZCA9ICd0ZXh0U2VhcmNoW3BocmFzZV0nO1xuICB9IGVsc2UgaWYgKGZpbHRlcj8uc3RhcnRzV2l0aCgnd2Z0cycpKSB7XG4gICAgbWV0aG9kID0gJ3RleHRTZWFyY2hbd2Vic2VhcmNoXSc7XG4gIH0gZWxzZSB7XG4gICAgbWV0aG9kID0gKGZpbHRlciAmJiBGSUxURVJfTUFQUElOR1NbZmlsdGVyIF0pIHx8ICdmaWx0ZXInO1xuICB9XG5cbiAgcmV0dXJuIGAke21ldGhvZH0oJHtrZXl9LCAke3ZhbHVlLmpvaW4oJy4nKX0pYDtcbn1cblxuZnVuY3Rpb24gaW5zdHJ1bWVudEF1dGhPcGVyYXRpb24ob3BlcmF0aW9uLCBpc0FkbWluID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5ldyBQcm94eShvcGVyYXRpb24sIHtcbiAgICBhcHBseSh0YXJnZXQsIHRoaXNBcmcsIGFyZ3VtZW50c0xpc3QpIHtcbiAgICAgIHJldHVybiBzdGFydFNwYW4oXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBgYXV0aCAke2lzQWRtaW4gPyAnKGFkbWluKSAnIDogJyd9JHtvcGVyYXRpb24ubmFtZX1gLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06ICdhdXRvLmRiLnN1cGFiYXNlJyxcbiAgICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QXTogJ2RiJyxcbiAgICAgICAgICAgICdkYi5zeXN0ZW0nOiAncG9zdGdyZXNxbCcsXG4gICAgICAgICAgICAnZGIub3BlcmF0aW9uJzogYGF1dGguJHtpc0FkbWluID8gJ2FkbWluLicgOiAnJ30ke29wZXJhdGlvbi5uYW1lfWAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc3BhbiA9PiB7XG4gICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkodGFyZ2V0LCB0aGlzQXJnLCBhcmd1bWVudHNMaXN0KVxuICAgICAgICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmICdlcnJvcicgaW4gcmVzICYmIHJlcy5lcnJvcikge1xuICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU1BBTl9TVEFUVVNfRVJST1IgfSk7XG5cbiAgICAgICAgICAgICAgICBjYXB0dXJlRXhjZXB0aW9uKHJlcy5lcnJvciwge1xuICAgICAgICAgICAgICAgICAgbWVjaGFuaXNtOiB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNQQU5fU1RBVFVTX09LIH0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNQQU5fU1RBVFVTX0VSUk9SIH0pO1xuICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuXG4gICAgICAgICAgICAgIGNhcHR1cmVFeGNlcHRpb24oZXJyLCB7XG4gICAgICAgICAgICAgICAgbWVjaGFuaXNtOiB7XG4gICAgICAgICAgICAgICAgICBoYW5kbGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oLi4uYXJndW1lbnRzTGlzdCk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnN0cnVtZW50U3VwYWJhc2VBdXRoQ2xpZW50KHN1cGFiYXNlQ2xpZW50SW5zdGFuY2UpIHtcbiAgY29uc3QgYXV0aCA9IHN1cGFiYXNlQ2xpZW50SW5zdGFuY2UuYXV0aDtcblxuICBpZiAoIWF1dGggfHwgaXNJbnN0cnVtZW50ZWQoc3VwYWJhc2VDbGllbnRJbnN0YW5jZS5hdXRoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3Qgb3BlcmF0aW9uIG9mIEFVVEhfT1BFUkFUSU9OU19UT19JTlNUUlVNRU5UKSB7XG4gICAgY29uc3QgYXV0aE9wZXJhdGlvbiA9IGF1dGhbb3BlcmF0aW9uXTtcblxuICAgIGlmICghYXV0aE9wZXJhdGlvbikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzdXBhYmFzZUNsaWVudEluc3RhbmNlLmF1dGhbb3BlcmF0aW9uXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgc3VwYWJhc2VDbGllbnRJbnN0YW5jZS5hdXRoW29wZXJhdGlvbl0gPSBpbnN0cnVtZW50QXV0aE9wZXJhdGlvbihhdXRoT3BlcmF0aW9uKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBBVVRIX0FETUlOX09QRVJBVElPTlNfVE9fSU5TVFJVTUVOVCkge1xuICAgIGNvbnN0IGF1dGhPcGVyYXRpb24gPSBhdXRoLmFkbWluW29wZXJhdGlvbl07XG5cbiAgICBpZiAoIWF1dGhPcGVyYXRpb24pIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc3VwYWJhc2VDbGllbnRJbnN0YW5jZS5hdXRoLmFkbWluW29wZXJhdGlvbl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHN1cGFiYXNlQ2xpZW50SW5zdGFuY2UuYXV0aC5hZG1pbltvcGVyYXRpb25dID0gaW5zdHJ1bWVudEF1dGhPcGVyYXRpb24oYXV0aE9wZXJhdGlvbiwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgbWFya0FzSW5zdHJ1bWVudGVkKHN1cGFiYXNlQ2xpZW50SW5zdGFuY2UuYXV0aCk7XG59XG5cbmZ1bmN0aW9uIGluc3RydW1lbnRTdXBhYmFzZUNsaWVudENvbnN0cnVjdG9yKFN1cGFiYXNlQ2xpZW50KSB7XG4gIGlmIChpc0luc3RydW1lbnRlZCgoU3VwYWJhc2VDbGllbnQgKS5wcm90b3R5cGUuZnJvbSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAoU3VwYWJhc2VDbGllbnQgKS5wcm90b3R5cGUuZnJvbSA9IG5ldyBQcm94eShcbiAgICAoU3VwYWJhc2VDbGllbnQgKS5wcm90b3R5cGUuZnJvbSxcbiAgICB7XG4gICAgICBhcHBseSh0YXJnZXQsIHRoaXNBcmcsIGFyZ3VtZW50c0xpc3QpIHtcbiAgICAgICAgY29uc3QgcnYgPSBSZWZsZWN0LmFwcGx5KHRhcmdldCwgdGhpc0FyZywgYXJndW1lbnRzTGlzdCk7XG4gICAgICAgIGNvbnN0IFBvc3RnUkVTVFF1ZXJ5QnVpbGRlciA9IChydiApLmNvbnN0cnVjdG9yO1xuXG4gICAgICAgIGluc3RydW1lbnRQb3N0Z1JFU1RRdWVyeUJ1aWxkZXIoUG9zdGdSRVNUUXVlcnlCdWlsZGVyICk7XG5cbiAgICAgICAgcmV0dXJuIHJ2O1xuICAgICAgfSxcbiAgICB9LFxuICApO1xuXG4gIG1hcmtBc0luc3RydW1lbnRlZCgoU3VwYWJhc2VDbGllbnQgKS5wcm90b3R5cGUuZnJvbSk7XG59XG5cbmZ1bmN0aW9uIGluc3RydW1lbnRQb3N0Z1JFU1RGaWx0ZXJCdWlsZGVyKFBvc3RnUkVTVEZpbHRlckJ1aWxkZXIpIHtcbiAgaWYgKGlzSW5zdHJ1bWVudGVkKChQb3N0Z1JFU1RGaWx0ZXJCdWlsZGVyLnByb3RvdHlwZSApLnRoZW4pKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgKFBvc3RnUkVTVEZpbHRlckJ1aWxkZXIucHJvdG90eXBlICkudGhlbiA9IG5ldyBQcm94eShcbiAgICAoUG9zdGdSRVNURmlsdGVyQnVpbGRlci5wcm90b3R5cGUgKS50aGVuLFxuICAgIHtcbiAgICAgIGFwcGx5KHRhcmdldCwgdGhpc0FyZywgYXJndW1lbnRzTGlzdCkge1xuICAgICAgICBjb25zdCBvcGVyYXRpb25zID0gREJfT1BFUkFUSU9OU19UT19JTlNUUlVNRU5UO1xuICAgICAgICBjb25zdCB0eXBlZFRoaXMgPSB0aGlzQXJnIDtcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uID0gZXh0cmFjdE9wZXJhdGlvbih0eXBlZFRoaXMubWV0aG9kLCB0eXBlZFRoaXMuaGVhZGVycyk7XG5cbiAgICAgICAgaWYgKCFvcGVyYXRpb25zLmluY2x1ZGVzKG9wZXJhdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmcsIGFyZ3VtZW50c0xpc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0eXBlZFRoaXM/LnVybD8ucGF0aG5hbWUgfHwgdHlwZW9mIHR5cGVkVGhpcy51cmwucGF0aG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkodGFyZ2V0LCB0aGlzQXJnLCBhcmd1bWVudHNMaXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHR5cGVkVGhpcy51cmwucGF0aG5hbWUuc3BsaXQoJy8nKTtcbiAgICAgICAgY29uc3QgdGFibGUgPSBwYXRoUGFydHMubGVuZ3RoID4gMCA/IHBhdGhQYXJ0c1twYXRoUGFydHMubGVuZ3RoIC0gMV0gOiAnJztcblxuICAgICAgICBjb25zdCBxdWVyeUl0ZW1zID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHR5cGVkVGhpcy51cmwuc2VhcmNoUGFyYW1zLmVudHJpZXMoKSkge1xuICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBlbnRyaWVzIGZvciB0aGUgc2FtZSBrZXksIGVnLiBgaWQ9ZXEuNyZpZD1lcS4zYCxcbiAgICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHVzZSBhcnJheSBpbnN0ZWFkIG9mIG9iamVjdCB0byBjb2xsZWN0IHRoZW0uXG4gICAgICAgICAgcXVlcnlJdGVtcy5wdXNoKHRyYW5zbGF0ZUZpbHRlcnNJbnRvTWV0aG9kcyhrZXksIHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYm9keSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHR5cGVkVGhpcy5ib2R5KSkge1xuICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHR5cGVkVGhpcy5ib2R5KSkge1xuICAgICAgICAgICAgYm9keVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkaW5nIG9wZXJhdGlvbiB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZXNjcmlwdGlvbiBpZiBpdCdzIG5vdCBhIGBzZWxlY3RgIG9wZXJhdGlvblxuICAgICAgICAvLyBGb3IgZXhhbXBsZSwgaXQgY2FuIGJlIGFuIGBpbnNlcnRgIG9yIGB1cGRhdGVgIG9wZXJhdGlvbiBidXQgdGhlIHF1ZXJ5IGNhbiBiZSBgc2VsZWN0KC4uLilgXG4gICAgICAgIC8vIEZvciBgc2VsZWN0YCBvcGVyYXRpb25zLCB3ZSBkb24ndCBuZWVkIHJlcGVhdCBpdCBpbiB0aGUgZGVzY3JpcHRpb25cbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBgJHtvcGVyYXRpb24gPT09ICdzZWxlY3QnID8gJycgOiBgJHtvcGVyYXRpb259JHtib2R5ID8gJyguLi4pICcgOiAnJ31gfSR7cXVlcnlJdGVtcy5qb2luKFxuICAgICAgICAgICcgJyxcbiAgICAgICAgKX0gZnJvbSgke3RhYmxlfSlgO1xuXG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgICAgJ2RiLnRhYmxlJzogdGFibGUsXG4gICAgICAgICAgJ2RiLnNjaGVtYSc6IHR5cGVkVGhpcy5zY2hlbWEsXG4gICAgICAgICAgJ2RiLnVybCc6IHR5cGVkVGhpcy51cmwub3JpZ2luLFxuICAgICAgICAgICdkYi5zZGsnOiB0eXBlZFRoaXMuaGVhZGVyc1snWC1DbGllbnQtSW5mbyddLFxuICAgICAgICAgICdkYi5zeXN0ZW0nOiAncG9zdGdyZXNxbCcsXG4gICAgICAgICAgJ2RiLm9wZXJhdGlvbic6IG9wZXJhdGlvbixcbiAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiAnYXV0by5kYi5zdXBhYmFzZScsXG4gICAgICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1BdOiAnZGInLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChxdWVyeUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXNbJ2RiLnF1ZXJ5J10gPSBxdWVyeUl0ZW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGJvZHkpLmxlbmd0aCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXNbJ2RiLmJvZHknXSA9IGJvZHk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3RhcnRTcGFuKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNwYW4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChSZWZsZWN0LmFwcGx5KHRhcmdldCwgdGhpc0FyZywgW10pIClcbiAgICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgICAgKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHNwYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJiAnc3RhdHVzJyBpbiByZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRIdHRwU3RhdHVzKHNwYW4sIHJlcy5zdGF0dXMgfHwgNTAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAocmVzLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihyZXMuZXJyb3IubWVzc2FnZSkgO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmVycm9yLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBlcnIuY29kZSA9IHJlcy5lcnJvci5jb2RlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuZXJyb3IuZGV0YWlscykge1xuICAgICAgICAgICAgICAgICAgICAgIGVyci5kZXRhaWxzID0gcmVzLmVycm9yLmRldGFpbHM7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdXBhYmFzZUNvbnRleHQgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3VwYWJhc2VDb250ZXh0LnF1ZXJ5ID0gcXVlcnlJdGVtcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoYm9keSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3VwYWJhc2VDb250ZXh0LmJvZHkgPSBib2R5O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FwdHVyZUV4Y2VwdGlvbihlcnIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VwYWJhc2U6IHN1cGFiYXNlQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgYnJlYWRjcnVtYiA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N1cGFiYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IGBkYi4ke29wZXJhdGlvbn1gLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucXVlcnkgPSBxdWVyeUl0ZW1zO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoYm9keSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuYm9keSA9IGJvZHk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWRjcnVtYi5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgYWRkQnJlYWRjcnVtYihicmVhZGNydW1iKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzcGFuKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEh0dHBTdGF0dXMoc3BhbiwgNTAwKTtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC50aGVuKC4uLmFyZ3VtZW50c0xpc3QpO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0sXG4gICk7XG5cbiAgbWFya0FzSW5zdHJ1bWVudGVkKChQb3N0Z1JFU1RGaWx0ZXJCdWlsZGVyLnByb3RvdHlwZSApLnRoZW4pO1xufVxuXG5mdW5jdGlvbiBpbnN0cnVtZW50UG9zdGdSRVNUUXVlcnlCdWlsZGVyKFBvc3RnUkVTVFF1ZXJ5QnVpbGRlcikge1xuICAvLyBXZSBuZWVkIHRvIHdyYXAgX2FsbF8gb3BlcmF0aW9ucyBkZXNwaXRlIHRoZW0gc2hhcmluZyB0aGUgc2FtZSBgUG9zdGdSRVNURmlsdGVyQnVpbGRlcmBcbiAgLy8gY29uc3RydWN0b3IsIGFzIHdlIGRvbid0IGtub3cgd2hpY2ggbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGZpcnN0LCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBtaXNzIGFueSBjYWxscy5cbiAgZm9yIChjb25zdCBvcGVyYXRpb24gb2YgREJfT1BFUkFUSU9OU19UT19JTlNUUlVNRU5UKSB7XG4gICAgaWYgKGlzSW5zdHJ1bWVudGVkKChQb3N0Z1JFU1RRdWVyeUJ1aWxkZXIucHJvdG90eXBlIClbb3BlcmF0aW9uXSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIChQb3N0Z1JFU1RRdWVyeUJ1aWxkZXIucHJvdG90eXBlIClbb3BlcmF0aW9uIF0gPSBuZXcgUHJveHkoXG4gICAgICAoUG9zdGdSRVNUUXVlcnlCdWlsZGVyLnByb3RvdHlwZSApW29wZXJhdGlvbiBdLFxuICAgICAge1xuICAgICAgICBhcHBseSh0YXJnZXQsIHRoaXNBcmcsIGFyZ3VtZW50c0xpc3QpIHtcbiAgICAgICAgICBjb25zdCBydiA9IFJlZmxlY3QuYXBwbHkodGFyZ2V0LCB0aGlzQXJnLCBhcmd1bWVudHNMaXN0KTtcbiAgICAgICAgICBjb25zdCBQb3N0Z1JFU1RGaWx0ZXJCdWlsZGVyID0gKHJ2ICkuY29uc3RydWN0b3I7XG5cbiAgICAgICAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5sb2coYEluc3RydW1lbnRpbmcgJHtvcGVyYXRpb259IG9wZXJhdGlvbidzIFBvc3RnUkVTVEZpbHRlckJ1aWxkZXJgKTtcblxuICAgICAgICAgIGluc3RydW1lbnRQb3N0Z1JFU1RGaWx0ZXJCdWlsZGVyKFBvc3RnUkVTVEZpbHRlckJ1aWxkZXIpO1xuXG4gICAgICAgICAgcmV0dXJuIHJ2O1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgbWFya0FzSW5zdHJ1bWVudGVkKChQb3N0Z1JFU1RRdWVyeUJ1aWxkZXIucHJvdG90eXBlIClbb3BlcmF0aW9uXSk7XG4gIH1cbn1cblxuY29uc3QgaW5zdHJ1bWVudFN1cGFiYXNlQ2xpZW50ID0gKHN1cGFiYXNlQ2xpZW50KSA9PiB7XG4gIGlmICghc3VwYWJhc2VDbGllbnQpIHtcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy53YXJuKCdTdXBhYmFzZSBpbnRlZ3JhdGlvbiB3YXMgbm90IGluc3RhbGxlZCBiZWNhdXNlIG5vIFN1cGFiYXNlIGNsaWVudCB3YXMgcHJvdmlkZWQuJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IFN1cGFiYXNlQ2xpZW50Q29uc3RydWN0b3IgPVxuICAgIHN1cGFiYXNlQ2xpZW50LmNvbnN0cnVjdG9yID09PSBGdW5jdGlvbiA/IHN1cGFiYXNlQ2xpZW50IDogc3VwYWJhc2VDbGllbnQuY29uc3RydWN0b3I7XG5cbiAgaW5zdHJ1bWVudFN1cGFiYXNlQ2xpZW50Q29uc3RydWN0b3IoU3VwYWJhc2VDbGllbnRDb25zdHJ1Y3Rvcik7XG4gIGluc3RydW1lbnRTdXBhYmFzZUF1dGhDbGllbnQoc3VwYWJhc2VDbGllbnQgKTtcbn07XG5cbmNvbnN0IElOVEVHUkFUSU9OX05BTUUgPSAnU3VwYWJhc2UnO1xuXG5jb25zdCBfc3VwYWJhc2VJbnRlZ3JhdGlvbiA9ICgoc3VwYWJhc2VDbGllbnQpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBzZXR1cE9uY2UoKSB7XG4gICAgICBpbnN0cnVtZW50U3VwYWJhc2VDbGllbnQoc3VwYWJhc2VDbGllbnQpO1xuICAgIH0sXG4gICAgbmFtZTogSU5URUdSQVRJT05fTkFNRSxcbiAgfTtcbn0pIDtcblxuY29uc3Qgc3VwYWJhc2VJbnRlZ3JhdGlvbiA9IGRlZmluZUludGVncmF0aW9uKChvcHRpb25zKSA9PiB7XG4gIHJldHVybiBfc3VwYWJhc2VJbnRlZ3JhdGlvbihvcHRpb25zLnN1cGFiYXNlQ2xpZW50KTtcbn0pIDtcblxuZXhwb3J0IHsgREJfT1BFUkFUSU9OU19UT19JTlNUUlVNRU5ULCBGSUxURVJfTUFQUElOR1MsIGV4dHJhY3RPcGVyYXRpb24sIGluc3RydW1lbnRTdXBhYmFzZUNsaWVudCwgc3VwYWJhc2VJbnRlZ3JhdGlvbiwgdHJhbnNsYXRlRmlsdGVyc0ludG9NZXRob2RzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdXBhYmFzZS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/supabase.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/third-party-errors-filter.js":
/*!******************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/third-party-errors-filter.js ***!
  \******************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   thirdPartyErrorFilterIntegration: () => (/* binding */ thirdPartyErrorFilterIntegration)\n/* harmony export */ });\n/* harmony import */ var _integration_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js\");\n/* harmony import */ var _metadata_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../metadata.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/metadata.js\");\n/* harmony import */ var _utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/envelope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/envelope.js\");\n/* harmony import */ var _utils_stacktrace_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/stacktrace.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/stacktrace.js\");\n\n\n\n\n\n/**\n * This integration allows you to filter out, or tag error events that do not come from user code marked with a bundle key via the Sentry bundler plugins.\n */\nconst thirdPartyErrorFilterIntegration = (0,_integration_js__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)((options) => {\n  return {\n    name: 'ThirdPartyErrorsFilter',\n    setup(client) {\n      // We need to strip metadata from stack frames before sending them to Sentry since these are client side only.\n      // TODO(lforst): Move this cleanup logic into a more central place in the SDK.\n      client.on('beforeEnvelope', envelope => {\n        (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.forEachEnvelopeItem)(envelope, (item, type) => {\n          if (type === 'event') {\n            const event = Array.isArray(item) ? (item )[1] : undefined;\n\n            if (event) {\n              (0,_metadata_js__WEBPACK_IMPORTED_MODULE_1__.stripMetadataFromStackFrames)(event);\n              item[1] = event;\n            }\n          }\n        });\n      });\n\n      client.on('applyFrameMetadata', event => {\n        // Only apply stack frame metadata to error events\n        if (event.type) {\n          return;\n        }\n\n        const stackParser = client.getOptions().stackParser;\n        (0,_metadata_js__WEBPACK_IMPORTED_MODULE_1__.addMetadataToStackFrames)(stackParser, event);\n      });\n    },\n\n    processEvent(event) {\n      const frameKeys = getBundleKeysForAllFramesWithFilenames(event);\n\n      if (frameKeys) {\n        const arrayMethod =\n          options.behaviour === 'drop-error-if-contains-third-party-frames' ||\n          options.behaviour === 'apply-tag-if-contains-third-party-frames'\n            ? 'some'\n            : 'every';\n\n        const behaviourApplies = frameKeys[arrayMethod](keys => !keys.some(key => options.filterKeys.includes(key)));\n\n        if (behaviourApplies) {\n          const shouldDrop =\n            options.behaviour === 'drop-error-if-contains-third-party-frames' ||\n            options.behaviour === 'drop-error-if-exclusively-contains-third-party-frames';\n          if (shouldDrop) {\n            return null;\n          } else {\n            event.tags = {\n              ...event.tags,\n              third_party_code: true,\n            };\n          }\n        }\n      }\n\n      return event;\n    },\n  };\n});\n\nfunction getBundleKeysForAllFramesWithFilenames(event) {\n  const frames = (0,_utils_stacktrace_js__WEBPACK_IMPORTED_MODULE_3__.getFramesFromEvent)(event);\n\n  if (!frames) {\n    return undefined;\n  }\n\n  return (\n    frames\n      // Exclude frames without a filename since these are likely native code or built-ins\n      .filter(frame => !!frame.filename)\n      .map(frame => {\n        if (frame.module_metadata) {\n          return Object.keys(frame.module_metadata)\n            .filter(key => key.startsWith(BUNDLER_PLUGIN_APP_KEY_PREFIX))\n            .map(key => key.slice(BUNDLER_PLUGIN_APP_KEY_PREFIX.length));\n        }\n        return [];\n      })\n  );\n}\n\nconst BUNDLER_PLUGIN_APP_KEY_PREFIX = '_sentryBundlerPluginAppKey:';\n\n\n//# sourceMappingURL=third-party-errors-filter.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy90aGlyZC1wYXJ0eS1lcnJvcnMtZmlsdGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXNEO0FBQ2tDO0FBQzdCO0FBQ0M7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxrRUFBaUI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSx1RUFBbUI7QUFDM0I7QUFDQTs7QUFFQTtBQUNBLGNBQWMsMEVBQTRCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLHNFQUF3QjtBQUNoQyxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVEO0FBQ0EsaUJBQWlCLHdFQUFrQjs7QUFFbkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFNEM7QUFDNUMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9pbnRlZ3JhdGlvbnMvdGhpcmQtcGFydHktZXJyb3JzLWZpbHRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZpbmVJbnRlZ3JhdGlvbiB9IGZyb20gJy4uL2ludGVncmF0aW9uLmpzJztcbmltcG9ydCB7IGFkZE1ldGFkYXRhVG9TdGFja0ZyYW1lcywgc3RyaXBNZXRhZGF0YUZyb21TdGFja0ZyYW1lcyB9IGZyb20gJy4uL21ldGFkYXRhLmpzJztcbmltcG9ydCB7IGZvckVhY2hFbnZlbG9wZUl0ZW0gfSBmcm9tICcuLi91dGlscy9lbnZlbG9wZS5qcyc7XG5pbXBvcnQgeyBnZXRGcmFtZXNGcm9tRXZlbnQgfSBmcm9tICcuLi91dGlscy9zdGFja3RyYWNlLmpzJztcblxuLyoqXG4gKiBUaGlzIGludGVncmF0aW9uIGFsbG93cyB5b3UgdG8gZmlsdGVyIG91dCwgb3IgdGFnIGVycm9yIGV2ZW50cyB0aGF0IGRvIG5vdCBjb21lIGZyb20gdXNlciBjb2RlIG1hcmtlZCB3aXRoIGEgYnVuZGxlIGtleSB2aWEgdGhlIFNlbnRyeSBidW5kbGVyIHBsdWdpbnMuXG4gKi9cbmNvbnN0IHRoaXJkUGFydHlFcnJvckZpbHRlckludGVncmF0aW9uID0gZGVmaW5lSW50ZWdyYXRpb24oKG9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnVGhpcmRQYXJ0eUVycm9yc0ZpbHRlcicsXG4gICAgc2V0dXAoY2xpZW50KSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHN0cmlwIG1ldGFkYXRhIGZyb20gc3RhY2sgZnJhbWVzIGJlZm9yZSBzZW5kaW5nIHRoZW0gdG8gU2VudHJ5IHNpbmNlIHRoZXNlIGFyZSBjbGllbnQgc2lkZSBvbmx5LlxuICAgICAgLy8gVE9ETyhsZm9yc3QpOiBNb3ZlIHRoaXMgY2xlYW51cCBsb2dpYyBpbnRvIGEgbW9yZSBjZW50cmFsIHBsYWNlIGluIHRoZSBTREsuXG4gICAgICBjbGllbnQub24oJ2JlZm9yZUVudmVsb3BlJywgZW52ZWxvcGUgPT4ge1xuICAgICAgICBmb3JFYWNoRW52ZWxvcGVJdGVtKGVudmVsb3BlLCAoaXRlbSwgdHlwZSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlID09PSAnZXZlbnQnKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IEFycmF5LmlzQXJyYXkoaXRlbSkgPyAoaXRlbSApWzFdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgc3RyaXBNZXRhZGF0YUZyb21TdGFja0ZyYW1lcyhldmVudCk7XG4gICAgICAgICAgICAgIGl0ZW1bMV0gPSBldmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGNsaWVudC5vbignYXBwbHlGcmFtZU1ldGFkYXRhJywgZXZlbnQgPT4ge1xuICAgICAgICAvLyBPbmx5IGFwcGx5IHN0YWNrIGZyYW1lIG1ldGFkYXRhIHRvIGVycm9yIGV2ZW50c1xuICAgICAgICBpZiAoZXZlbnQudHlwZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YWNrUGFyc2VyID0gY2xpZW50LmdldE9wdGlvbnMoKS5zdGFja1BhcnNlcjtcbiAgICAgICAgYWRkTWV0YWRhdGFUb1N0YWNrRnJhbWVzKHN0YWNrUGFyc2VyLCBldmVudCk7XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgcHJvY2Vzc0V2ZW50KGV2ZW50KSB7XG4gICAgICBjb25zdCBmcmFtZUtleXMgPSBnZXRCdW5kbGVLZXlzRm9yQWxsRnJhbWVzV2l0aEZpbGVuYW1lcyhldmVudCk7XG5cbiAgICAgIGlmIChmcmFtZUtleXMpIHtcbiAgICAgICAgY29uc3QgYXJyYXlNZXRob2QgPVxuICAgICAgICAgIG9wdGlvbnMuYmVoYXZpb3VyID09PSAnZHJvcC1lcnJvci1pZi1jb250YWlucy10aGlyZC1wYXJ0eS1mcmFtZXMnIHx8XG4gICAgICAgICAgb3B0aW9ucy5iZWhhdmlvdXIgPT09ICdhcHBseS10YWctaWYtY29udGFpbnMtdGhpcmQtcGFydHktZnJhbWVzJ1xuICAgICAgICAgICAgPyAnc29tZSdcbiAgICAgICAgICAgIDogJ2V2ZXJ5JztcblxuICAgICAgICBjb25zdCBiZWhhdmlvdXJBcHBsaWVzID0gZnJhbWVLZXlzW2FycmF5TWV0aG9kXShrZXlzID0+ICFrZXlzLnNvbWUoa2V5ID0+IG9wdGlvbnMuZmlsdGVyS2V5cy5pbmNsdWRlcyhrZXkpKSk7XG5cbiAgICAgICAgaWYgKGJlaGF2aW91ckFwcGxpZXMpIHtcbiAgICAgICAgICBjb25zdCBzaG91bGREcm9wID1cbiAgICAgICAgICAgIG9wdGlvbnMuYmVoYXZpb3VyID09PSAnZHJvcC1lcnJvci1pZi1jb250YWlucy10aGlyZC1wYXJ0eS1mcmFtZXMnIHx8XG4gICAgICAgICAgICBvcHRpb25zLmJlaGF2aW91ciA9PT0gJ2Ryb3AtZXJyb3ItaWYtZXhjbHVzaXZlbHktY29udGFpbnMtdGhpcmQtcGFydHktZnJhbWVzJztcbiAgICAgICAgICBpZiAoc2hvdWxkRHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV2ZW50LnRhZ3MgPSB7XG4gICAgICAgICAgICAgIC4uLmV2ZW50LnRhZ3MsXG4gICAgICAgICAgICAgIHRoaXJkX3BhcnR5X2NvZGU6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSxcbiAgfTtcbn0pO1xuXG5mdW5jdGlvbiBnZXRCdW5kbGVLZXlzRm9yQWxsRnJhbWVzV2l0aEZpbGVuYW1lcyhldmVudCkge1xuICBjb25zdCBmcmFtZXMgPSBnZXRGcmFtZXNGcm9tRXZlbnQoZXZlbnQpO1xuXG4gIGlmICghZnJhbWVzKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgZnJhbWVzXG4gICAgICAvLyBFeGNsdWRlIGZyYW1lcyB3aXRob3V0IGEgZmlsZW5hbWUgc2luY2UgdGhlc2UgYXJlIGxpa2VseSBuYXRpdmUgY29kZSBvciBidWlsdC1pbnNcbiAgICAgIC5maWx0ZXIoZnJhbWUgPT4gISFmcmFtZS5maWxlbmFtZSlcbiAgICAgIC5tYXAoZnJhbWUgPT4ge1xuICAgICAgICBpZiAoZnJhbWUubW9kdWxlX21ldGFkYXRhKSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGZyYW1lLm1vZHVsZV9tZXRhZGF0YSlcbiAgICAgICAgICAgIC5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKEJVTkRMRVJfUExVR0lOX0FQUF9LRVlfUFJFRklYKSlcbiAgICAgICAgICAgIC5tYXAoa2V5ID0+IGtleS5zbGljZShCVU5ETEVSX1BMVUdJTl9BUFBfS0VZX1BSRUZJWC5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9KVxuICApO1xufVxuXG5jb25zdCBCVU5ETEVSX1BMVUdJTl9BUFBfS0VZX1BSRUZJWCA9ICdfc2VudHJ5QnVuZGxlclBsdWdpbkFwcEtleTonO1xuXG5leHBvcnQgeyB0aGlyZFBhcnR5RXJyb3JGaWx0ZXJJbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhpcmQtcGFydHktZXJyb3JzLWZpbHRlci5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/third-party-errors-filter.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/zoderrors.js":
/*!**************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/zoderrors.js ***!
  \**************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   applyZodErrorsToEvent: () => (/* binding */ applyZodErrorsToEvent),\n/* harmony export */   flattenIssue: () => (/* binding */ flattenIssue),\n/* harmony export */   flattenIssuePath: () => (/* binding */ flattenIssuePath),\n/* harmony export */   formatIssueMessage: () => (/* binding */ formatIssueMessage),\n/* harmony export */   zodErrorsIntegration: () => (/* binding */ zodErrorsIntegration)\n/* harmony export */ });\n/* harmony import */ var _integration_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js\");\n/* harmony import */ var _utils_is_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n/* harmony import */ var _utils_string_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/string.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/string.js\");\n\n\n\n\nconst DEFAULT_LIMIT = 10;\nconst INTEGRATION_NAME = 'ZodErrors';\n\n/**\n * Simplified ZodIssue type definition\n */\n\nfunction originalExceptionIsZodError(originalException) {\n  return (\n    (0,_utils_is_js__WEBPACK_IMPORTED_MODULE_1__.isError)(originalException) &&\n    originalException.name === 'ZodError' &&\n    Array.isArray((originalException ).issues)\n  );\n}\n\n/**\n * Formats child objects or arrays to a string\n * that is preserved when sent to Sentry.\n *\n * Without this, we end up with something like this in Sentry:\n *\n * [\n *  [Object],\n *  [Object],\n *  [Object],\n *  [Object]\n * ]\n */\nfunction flattenIssue(issue) {\n  return {\n    ...issue,\n    path: 'path' in issue && Array.isArray(issue.path) ? issue.path.join('.') : undefined,\n    keys: 'keys' in issue ? JSON.stringify(issue.keys) : undefined,\n    unionErrors: 'unionErrors' in issue ? JSON.stringify(issue.unionErrors) : undefined,\n  };\n}\n\n/**\n * Takes ZodError issue path array and returns a flattened version as a string.\n * This makes it easier to display paths within a Sentry error message.\n *\n * Array indexes are normalized to reduce duplicate entries\n *\n * @param path ZodError issue path\n * @returns flattened path\n *\n * @example\n * flattenIssuePath([0, 'foo', 1, 'bar']) // -> '<array>.foo.<array>.bar'\n */\nfunction flattenIssuePath(path) {\n  return path\n    .map(p => {\n      if (typeof p === 'number') {\n        return '<array>';\n      } else {\n        return p;\n      }\n    })\n    .join('.');\n}\n\n/**\n * Zod error message is a stringified version of ZodError.issues\n * This doesn't display well in the Sentry UI. Replace it with something shorter.\n */\nfunction formatIssueMessage(zodError) {\n  const errorKeyMap = new Set();\n  for (const iss of zodError.issues) {\n    const issuePath = flattenIssuePath(iss.path);\n    if (issuePath.length > 0) {\n      errorKeyMap.add(issuePath);\n    }\n  }\n\n  const errorKeys = Array.from(errorKeyMap);\n  if (errorKeys.length === 0) {\n    // If there are no keys, then we're likely validating the root\n    // variable rather than a key within an object. This attempts\n    // to extract what type it was that failed to validate.\n    // For example, z.string().parse(123) would return \"string\" here.\n    let rootExpectedType = 'variable';\n    if (zodError.issues.length > 0) {\n      const iss = zodError.issues[0];\n      if (iss !== undefined && 'expected' in iss && typeof iss.expected === 'string') {\n        rootExpectedType = iss.expected;\n      }\n    }\n    return `Failed to validate ${rootExpectedType}`;\n  }\n  return `Failed to validate keys: ${(0,_utils_string_js__WEBPACK_IMPORTED_MODULE_2__.truncate)(errorKeys.join(', '), 100)}`;\n}\n\n/**\n * Applies ZodError issues to an event extra and replaces the error message\n */\nfunction applyZodErrorsToEvent(\n  limit,\n  saveZodIssuesAsAttachment = false,\n  event,\n  hint,\n) {\n  if (\n    !event.exception?.values ||\n    !hint.originalException ||\n    !originalExceptionIsZodError(hint.originalException) ||\n    hint.originalException.issues.length === 0\n  ) {\n    return event;\n  }\n\n  try {\n    const issuesToFlatten = saveZodIssuesAsAttachment\n      ? hint.originalException.issues\n      : hint.originalException.issues.slice(0, limit);\n    const flattenedIssues = issuesToFlatten.map(flattenIssue);\n\n    if (saveZodIssuesAsAttachment) {\n      // Sometimes having the full error details can be helpful.\n      // Attachments have much higher limits, so we can include the full list of issues.\n      if (!Array.isArray(hint.attachments)) {\n        hint.attachments = [];\n      }\n      hint.attachments.push({\n        filename: 'zod_issues.json',\n        data: JSON.stringify({\n          issues: flattenedIssues,\n        }),\n      });\n    }\n\n    return {\n      ...event,\n      exception: {\n        ...event.exception,\n        values: [\n          {\n            ...event.exception.values[0],\n            value: formatIssueMessage(hint.originalException),\n          },\n          ...event.exception.values.slice(1),\n        ],\n      },\n      extra: {\n        ...event.extra,\n        'zoderror.issues': flattenedIssues.slice(0, limit),\n      },\n    };\n  } catch (e) {\n    // Hopefully we never throw errors here, but record it\n    // with the event just in case.\n    return {\n      ...event,\n      extra: {\n        ...event.extra,\n        'zoderrors sentry integration parse error': {\n          message: 'an exception was thrown while processing ZodError within applyZodErrorsToEvent()',\n          error: e instanceof Error ? `${e.name}: ${e.message}\\n${e.stack}` : 'unknown',\n        },\n      },\n    };\n  }\n}\n\nconst _zodErrorsIntegration = ((options = {}) => {\n  const limit = options.limit ?? DEFAULT_LIMIT;\n\n  return {\n    name: INTEGRATION_NAME,\n    processEvent(originalEvent, hint) {\n      const processedEvent = applyZodErrorsToEvent(limit, options.saveZodIssuesAsAttachment, originalEvent, hint);\n      return processedEvent;\n    },\n  };\n}) ;\n\n/**\n * Sentry integration to process Zod errors, making them easier to work with in Sentry.\n */\nconst zodErrorsIntegration = (0,_integration_js__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(_zodErrorsIntegration);\n\n\n//# sourceMappingURL=zoderrors.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2ludGVncmF0aW9ucy96b2RlcnJvcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBc0Q7QUFDYjtBQUNLOztBQUU5QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSxxREFBTztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsaUJBQWlCO0FBQ2xEO0FBQ0EscUNBQXFDLDBEQUFRLDRCQUE0QjtBQUN6RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxPQUFPLElBQUksVUFBVSxJQUFJLFFBQVE7QUFDMUUsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUEsNENBQTRDO0FBQzVDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixrRUFBaUI7O0FBRTZEO0FBQzNHIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vaW50ZWdyYXRpb25zL3pvZGVycm9ycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZpbmVJbnRlZ3JhdGlvbiB9IGZyb20gJy4uL2ludGVncmF0aW9uLmpzJztcbmltcG9ydCB7IGlzRXJyb3IgfSBmcm9tICcuLi91dGlscy9pcy5qcyc7XG5pbXBvcnQgeyB0cnVuY2F0ZSB9IGZyb20gJy4uL3V0aWxzL3N0cmluZy5qcyc7XG5cbmNvbnN0IERFRkFVTFRfTElNSVQgPSAxMDtcbmNvbnN0IElOVEVHUkFUSU9OX05BTUUgPSAnWm9kRXJyb3JzJztcblxuLyoqXG4gKiBTaW1wbGlmaWVkIFpvZElzc3VlIHR5cGUgZGVmaW5pdGlvblxuICovXG5cbmZ1bmN0aW9uIG9yaWdpbmFsRXhjZXB0aW9uSXNab2RFcnJvcihvcmlnaW5hbEV4Y2VwdGlvbikge1xuICByZXR1cm4gKFxuICAgIGlzRXJyb3Iob3JpZ2luYWxFeGNlcHRpb24pICYmXG4gICAgb3JpZ2luYWxFeGNlcHRpb24ubmFtZSA9PT0gJ1pvZEVycm9yJyAmJlxuICAgIEFycmF5LmlzQXJyYXkoKG9yaWdpbmFsRXhjZXB0aW9uICkuaXNzdWVzKVxuICApO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgY2hpbGQgb2JqZWN0cyBvciBhcnJheXMgdG8gYSBzdHJpbmdcbiAqIHRoYXQgaXMgcHJlc2VydmVkIHdoZW4gc2VudCB0byBTZW50cnkuXG4gKlxuICogV2l0aG91dCB0aGlzLCB3ZSBlbmQgdXAgd2l0aCBzb21ldGhpbmcgbGlrZSB0aGlzIGluIFNlbnRyeTpcbiAqXG4gKiBbXG4gKiAgW09iamVjdF0sXG4gKiAgW09iamVjdF0sXG4gKiAgW09iamVjdF0sXG4gKiAgW09iamVjdF1cbiAqIF1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbklzc3VlKGlzc3VlKSB7XG4gIHJldHVybiB7XG4gICAgLi4uaXNzdWUsXG4gICAgcGF0aDogJ3BhdGgnIGluIGlzc3VlICYmIEFycmF5LmlzQXJyYXkoaXNzdWUucGF0aCkgPyBpc3N1ZS5wYXRoLmpvaW4oJy4nKSA6IHVuZGVmaW5lZCxcbiAgICBrZXlzOiAna2V5cycgaW4gaXNzdWUgPyBKU09OLnN0cmluZ2lmeShpc3N1ZS5rZXlzKSA6IHVuZGVmaW5lZCxcbiAgICB1bmlvbkVycm9yczogJ3VuaW9uRXJyb3JzJyBpbiBpc3N1ZSA/IEpTT04uc3RyaW5naWZ5KGlzc3VlLnVuaW9uRXJyb3JzKSA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuLyoqXG4gKiBUYWtlcyBab2RFcnJvciBpc3N1ZSBwYXRoIGFycmF5IGFuZCByZXR1cm5zIGEgZmxhdHRlbmVkIHZlcnNpb24gYXMgYSBzdHJpbmcuXG4gKiBUaGlzIG1ha2VzIGl0IGVhc2llciB0byBkaXNwbGF5IHBhdGhzIHdpdGhpbiBhIFNlbnRyeSBlcnJvciBtZXNzYWdlLlxuICpcbiAqIEFycmF5IGluZGV4ZXMgYXJlIG5vcm1hbGl6ZWQgdG8gcmVkdWNlIGR1cGxpY2F0ZSBlbnRyaWVzXG4gKlxuICogQHBhcmFtIHBhdGggWm9kRXJyb3IgaXNzdWUgcGF0aFxuICogQHJldHVybnMgZmxhdHRlbmVkIHBhdGhcbiAqXG4gKiBAZXhhbXBsZVxuICogZmxhdHRlbklzc3VlUGF0aChbMCwgJ2ZvbycsIDEsICdiYXInXSkgLy8gLT4gJzxhcnJheT4uZm9vLjxhcnJheT4uYmFyJ1xuICovXG5mdW5jdGlvbiBmbGF0dGVuSXNzdWVQYXRoKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGhcbiAgICAubWFwKHAgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBwID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gJzxhcnJheT4nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgICB9XG4gICAgfSlcbiAgICAuam9pbignLicpO1xufVxuXG4vKipcbiAqIFpvZCBlcnJvciBtZXNzYWdlIGlzIGEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiBab2RFcnJvci5pc3N1ZXNcbiAqIFRoaXMgZG9lc24ndCBkaXNwbGF5IHdlbGwgaW4gdGhlIFNlbnRyeSBVSS4gUmVwbGFjZSBpdCB3aXRoIHNvbWV0aGluZyBzaG9ydGVyLlxuICovXG5mdW5jdGlvbiBmb3JtYXRJc3N1ZU1lc3NhZ2Uoem9kRXJyb3IpIHtcbiAgY29uc3QgZXJyb3JLZXlNYXAgPSBuZXcgU2V0KCk7XG4gIGZvciAoY29uc3QgaXNzIG9mIHpvZEVycm9yLmlzc3Vlcykge1xuICAgIGNvbnN0IGlzc3VlUGF0aCA9IGZsYXR0ZW5Jc3N1ZVBhdGgoaXNzLnBhdGgpO1xuICAgIGlmIChpc3N1ZVBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgZXJyb3JLZXlNYXAuYWRkKGlzc3VlUGF0aCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZXJyb3JLZXlzID0gQXJyYXkuZnJvbShlcnJvcktleU1hcCk7XG4gIGlmIChlcnJvcktleXMubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIGtleXMsIHRoZW4gd2UncmUgbGlrZWx5IHZhbGlkYXRpbmcgdGhlIHJvb3RcbiAgICAvLyB2YXJpYWJsZSByYXRoZXIgdGhhbiBhIGtleSB3aXRoaW4gYW4gb2JqZWN0LiBUaGlzIGF0dGVtcHRzXG4gICAgLy8gdG8gZXh0cmFjdCB3aGF0IHR5cGUgaXQgd2FzIHRoYXQgZmFpbGVkIHRvIHZhbGlkYXRlLlxuICAgIC8vIEZvciBleGFtcGxlLCB6LnN0cmluZygpLnBhcnNlKDEyMykgd291bGQgcmV0dXJuIFwic3RyaW5nXCIgaGVyZS5cbiAgICBsZXQgcm9vdEV4cGVjdGVkVHlwZSA9ICd2YXJpYWJsZSc7XG4gICAgaWYgKHpvZEVycm9yLmlzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBpc3MgPSB6b2RFcnJvci5pc3N1ZXNbMF07XG4gICAgICBpZiAoaXNzICE9PSB1bmRlZmluZWQgJiYgJ2V4cGVjdGVkJyBpbiBpc3MgJiYgdHlwZW9mIGlzcy5leHBlY3RlZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcm9vdEV4cGVjdGVkVHlwZSA9IGlzcy5leHBlY3RlZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGBGYWlsZWQgdG8gdmFsaWRhdGUgJHtyb290RXhwZWN0ZWRUeXBlfWA7XG4gIH1cbiAgcmV0dXJuIGBGYWlsZWQgdG8gdmFsaWRhdGUga2V5czogJHt0cnVuY2F0ZShlcnJvcktleXMuam9pbignLCAnKSwgMTAwKX1gO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgWm9kRXJyb3IgaXNzdWVzIHRvIGFuIGV2ZW50IGV4dHJhIGFuZCByZXBsYWNlcyB0aGUgZXJyb3IgbWVzc2FnZVxuICovXG5mdW5jdGlvbiBhcHBseVpvZEVycm9yc1RvRXZlbnQoXG4gIGxpbWl0LFxuICBzYXZlWm9kSXNzdWVzQXNBdHRhY2htZW50ID0gZmFsc2UsXG4gIGV2ZW50LFxuICBoaW50LFxuKSB7XG4gIGlmIChcbiAgICAhZXZlbnQuZXhjZXB0aW9uPy52YWx1ZXMgfHxcbiAgICAhaGludC5vcmlnaW5hbEV4Y2VwdGlvbiB8fFxuICAgICFvcmlnaW5hbEV4Y2VwdGlvbklzWm9kRXJyb3IoaGludC5vcmlnaW5hbEV4Y2VwdGlvbikgfHxcbiAgICBoaW50Lm9yaWdpbmFsRXhjZXB0aW9uLmlzc3Vlcy5sZW5ndGggPT09IDBcbiAgKSB7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBpc3N1ZXNUb0ZsYXR0ZW4gPSBzYXZlWm9kSXNzdWVzQXNBdHRhY2htZW50XG4gICAgICA/IGhpbnQub3JpZ2luYWxFeGNlcHRpb24uaXNzdWVzXG4gICAgICA6IGhpbnQub3JpZ2luYWxFeGNlcHRpb24uaXNzdWVzLnNsaWNlKDAsIGxpbWl0KTtcbiAgICBjb25zdCBmbGF0dGVuZWRJc3N1ZXMgPSBpc3N1ZXNUb0ZsYXR0ZW4ubWFwKGZsYXR0ZW5Jc3N1ZSk7XG5cbiAgICBpZiAoc2F2ZVpvZElzc3Vlc0FzQXR0YWNobWVudCkge1xuICAgICAgLy8gU29tZXRpbWVzIGhhdmluZyB0aGUgZnVsbCBlcnJvciBkZXRhaWxzIGNhbiBiZSBoZWxwZnVsLlxuICAgICAgLy8gQXR0YWNobWVudHMgaGF2ZSBtdWNoIGhpZ2hlciBsaW1pdHMsIHNvIHdlIGNhbiBpbmNsdWRlIHRoZSBmdWxsIGxpc3Qgb2YgaXNzdWVzLlxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGhpbnQuYXR0YWNobWVudHMpKSB7XG4gICAgICAgIGhpbnQuYXR0YWNobWVudHMgPSBbXTtcbiAgICAgIH1cbiAgICAgIGhpbnQuYXR0YWNobWVudHMucHVzaCh7XG4gICAgICAgIGZpbGVuYW1lOiAnem9kX2lzc3Vlcy5qc29uJyxcbiAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGlzc3VlczogZmxhdHRlbmVkSXNzdWVzLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIGV4Y2VwdGlvbjoge1xuICAgICAgICAuLi5ldmVudC5leGNlcHRpb24sXG4gICAgICAgIHZhbHVlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLmV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0sXG4gICAgICAgICAgICB2YWx1ZTogZm9ybWF0SXNzdWVNZXNzYWdlKGhpbnQub3JpZ2luYWxFeGNlcHRpb24pLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uZXZlbnQuZXhjZXB0aW9uLnZhbHVlcy5zbGljZSgxKSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBleHRyYToge1xuICAgICAgICAuLi5ldmVudC5leHRyYSxcbiAgICAgICAgJ3pvZGVycm9yLmlzc3Vlcyc6IGZsYXR0ZW5lZElzc3Vlcy5zbGljZSgwLCBsaW1pdCksXG4gICAgICB9LFxuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBIb3BlZnVsbHkgd2UgbmV2ZXIgdGhyb3cgZXJyb3JzIGhlcmUsIGJ1dCByZWNvcmQgaXRcbiAgICAvLyB3aXRoIHRoZSBldmVudCBqdXN0IGluIGNhc2UuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV2ZW50LFxuICAgICAgZXh0cmE6IHtcbiAgICAgICAgLi4uZXZlbnQuZXh0cmEsXG4gICAgICAgICd6b2RlcnJvcnMgc2VudHJ5IGludGVncmF0aW9uIHBhcnNlIGVycm9yJzoge1xuICAgICAgICAgIG1lc3NhZ2U6ICdhbiBleGNlcHRpb24gd2FzIHRocm93biB3aGlsZSBwcm9jZXNzaW5nIFpvZEVycm9yIHdpdGhpbiBhcHBseVpvZEVycm9yc1RvRXZlbnQoKScsXG4gICAgICAgICAgZXJyb3I6IGUgaW5zdGFuY2VvZiBFcnJvciA/IGAke2UubmFtZX06ICR7ZS5tZXNzYWdlfVxcbiR7ZS5zdGFja31gIDogJ3Vua25vd24nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IF96b2RFcnJvcnNJbnRlZ3JhdGlvbiA9ICgob3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IGxpbWl0ID0gb3B0aW9ucy5saW1pdCA/PyBERUZBVUxUX0xJTUlUO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogSU5URUdSQVRJT05fTkFNRSxcbiAgICBwcm9jZXNzRXZlbnQob3JpZ2luYWxFdmVudCwgaGludCkge1xuICAgICAgY29uc3QgcHJvY2Vzc2VkRXZlbnQgPSBhcHBseVpvZEVycm9yc1RvRXZlbnQobGltaXQsIG9wdGlvbnMuc2F2ZVpvZElzc3Vlc0FzQXR0YWNobWVudCwgb3JpZ2luYWxFdmVudCwgaGludCk7XG4gICAgICByZXR1cm4gcHJvY2Vzc2VkRXZlbnQ7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuLyoqXG4gKiBTZW50cnkgaW50ZWdyYXRpb24gdG8gcHJvY2VzcyBab2QgZXJyb3JzLCBtYWtpbmcgdGhlbSBlYXNpZXIgdG8gd29yayB3aXRoIGluIFNlbnRyeS5cbiAqL1xuY29uc3Qgem9kRXJyb3JzSW50ZWdyYXRpb24gPSBkZWZpbmVJbnRlZ3JhdGlvbihfem9kRXJyb3JzSW50ZWdyYXRpb24pO1xuXG5leHBvcnQgeyBhcHBseVpvZEVycm9yc1RvRXZlbnQsIGZsYXR0ZW5Jc3N1ZSwgZmxhdHRlbklzc3VlUGF0aCwgZm9ybWF0SXNzdWVNZXNzYWdlLCB6b2RFcnJvcnNJbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9em9kZXJyb3JzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integrations/zoderrors.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/logs/console-integration.js":
/*!****************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/logs/console-integration.js ***!
  \****************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   consoleLoggingIntegration: () => (/* binding */ consoleLoggingIntegration)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _instrument_console_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../instrument/console.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/console.js\");\n/* harmony import */ var _integration_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../integration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/integration.js\");\n/* harmony import */ var _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../semanticAttributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/semanticAttributes.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_is_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n/* harmony import */ var _utils_normalize_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/normalize.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/normalize.js\");\n/* harmony import */ var _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n/* harmony import */ var _exports_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./exports.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/logs/exports.js\");\n\n\n\n\n\n\n\n\n\n\n\nconst INTEGRATION_NAME = 'ConsoleLogs';\n\nconst DEFAULT_ATTRIBUTES = {\n  [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_4__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.console.logging',\n};\n\nconst _consoleLoggingIntegration = ((options = {}) => {\n  const levels = options.levels || _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_5__.CONSOLE_LEVELS;\n\n  return {\n    name: INTEGRATION_NAME,\n    setup(client) {\n      const { enableLogs, _experiments, normalizeDepth = 3, normalizeMaxBreadth = 1000 } = client.getOptions();\n      // eslint-disable-next-line deprecation/deprecation\n      const shouldEnableLogs = enableLogs ?? _experiments?.enableLogs;\n      if (!shouldEnableLogs) {\n        _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_5__.debug.warn('`enableLogs` is not enabled, ConsoleLogs integration disabled');\n        return;\n      }\n\n      (0,_instrument_console_js__WEBPACK_IMPORTED_MODULE_2__.addConsoleInstrumentationHandler)(({ args, level }) => {\n        if ((0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)() !== client || !levels.includes(level)) {\n          return;\n        }\n\n        if (level === 'assert') {\n          if (!args[0]) {\n            const followingArgs = args.slice(1);\n            const assertionMessage =\n              followingArgs.length > 0\n                ? `Assertion failed: ${formatConsoleArgs(followingArgs, normalizeDepth, normalizeMaxBreadth)}`\n                : 'Assertion failed';\n            (0,_exports_js__WEBPACK_IMPORTED_MODULE_9__._INTERNAL_captureLog)({ level: 'error', message: assertionMessage, attributes: DEFAULT_ATTRIBUTES });\n          }\n          return;\n        }\n\n        const isLevelLog = level === 'log';\n        (0,_exports_js__WEBPACK_IMPORTED_MODULE_9__._INTERNAL_captureLog)({\n          level: isLevelLog ? 'info' : level,\n          message: formatConsoleArgs(args, normalizeDepth, normalizeMaxBreadth),\n          severityNumber: isLevelLog ? 10 : undefined,\n          attributes: DEFAULT_ATTRIBUTES,\n        });\n      });\n    },\n  };\n}) ;\n\n/**\n * Captures calls to the `console` API as logs in Sentry. Requires the `enableLogs` option to be enabled.\n *\n * @experimental This feature is experimental and may be changed or removed in future versions.\n *\n * By default the integration instruments `console.debug`, `console.info`, `console.warn`, `console.error`,\n * `console.log`, `console.trace`, and `console.assert`. You can use the `levels` option to customize which\n * levels are captured.\n *\n * @example\n *\n * ```ts\n * import * as Sentry from '@sentry/browser';\n *\n * Sentry.init({\n *   enableLogs: true,\n *   integrations: [Sentry.consoleLoggingIntegration({ levels: ['error', 'warn'] })],\n * });\n * ```\n */\nconst consoleLoggingIntegration = (0,_integration_js__WEBPACK_IMPORTED_MODULE_3__.defineIntegration)(_consoleLoggingIntegration);\n\nfunction formatConsoleArgs(values, normalizeDepth, normalizeMaxBreadth) {\n  return \"util\" in _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_8__.GLOBAL_OBJ && typeof (_utils_worldwide_js__WEBPACK_IMPORTED_MODULE_8__.GLOBAL_OBJ ).util.format === 'function'\n    ? (_utils_worldwide_js__WEBPACK_IMPORTED_MODULE_8__.GLOBAL_OBJ ).util.format(...values)\n    : safeJoinConsoleArgs(values, normalizeDepth, normalizeMaxBreadth);\n}\n\nfunction safeJoinConsoleArgs(values, normalizeDepth, normalizeMaxBreadth) {\n  return values\n    .map(value =>\n      (0,_utils_is_js__WEBPACK_IMPORTED_MODULE_6__.isPrimitive)(value) ? String(value) : JSON.stringify((0,_utils_normalize_js__WEBPACK_IMPORTED_MODULE_7__.normalize)(value, normalizeDepth, normalizeMaxBreadth)),\n    )\n    .join(' ');\n}\n\n\n//# sourceMappingURL=console-integration.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2xvZ3MvY29uc29sZS1pbnRlZ3JhdGlvbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFnRDtBQUNBO0FBQzRCO0FBQ3RCO0FBQ3NCO0FBQ1g7QUFDcEI7QUFDSztBQUNDO0FBQ0M7O0FBRXBEOztBQUVBO0FBQ0EsR0FBRyxvRkFBZ0M7QUFDbkM7O0FBRUEsaURBQWlEO0FBQ2pELG1DQUFtQyxrRUFBYzs7QUFFakQ7QUFDQTtBQUNBO0FBQ0EsY0FBYywyRUFBMkU7QUFDekY7QUFDQTtBQUNBO0FBQ0EsUUFBUSx3REFBVyxJQUFJLHlEQUFLO0FBQzVCO0FBQ0E7O0FBRUEsTUFBTSx3RkFBZ0MsSUFBSSxhQUFhO0FBQ3ZELFlBQVksNERBQVM7QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLHNFQUFzRTtBQUM3RztBQUNBLFlBQVksaUVBQW9CLEdBQUcsMkVBQTJFO0FBQzlHO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsaUVBQW9CO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELDJCQUEyQjtBQUNsRixJQUFJO0FBQ0o7QUFDQTtBQUNBLGtDQUFrQyxrRUFBaUI7O0FBRW5EO0FBQ0EsU0FBUyxxRUFBb0IsWUFBWSwyREFBVTtBQUNuRCxPQUFPLDJEQUFVO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTSx5REFBVyx5Q0FBeUMsOERBQVM7QUFDbkU7QUFDQTtBQUNBOztBQUVxQztBQUNyQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2xvZ3MvY29uc29sZS1pbnRlZ3JhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDbGllbnQgfSBmcm9tICcuLi9jdXJyZW50U2NvcGVzLmpzJztcbmltcG9ydCB7IERFQlVHX0JVSUxEIH0gZnJvbSAnLi4vZGVidWctYnVpbGQuanMnO1xuaW1wb3J0IHsgYWRkQ29uc29sZUluc3RydW1lbnRhdGlvbkhhbmRsZXIgfSBmcm9tICcuLi9pbnN0cnVtZW50L2NvbnNvbGUuanMnO1xuaW1wb3J0IHsgZGVmaW5lSW50ZWdyYXRpb24gfSBmcm9tICcuLi9pbnRlZ3JhdGlvbi5qcyc7XG5pbXBvcnQgeyBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTiB9IGZyb20gJy4uL3NlbWFudGljQXR0cmlidXRlcy5qcyc7XG5pbXBvcnQgeyBDT05TT0xFX0xFVkVMUywgZGVidWcgfSBmcm9tICcuLi91dGlscy9kZWJ1Zy1sb2dnZXIuanMnO1xuaW1wb3J0IHsgaXNQcmltaXRpdmUgfSBmcm9tICcuLi91dGlscy9pcy5qcyc7XG5pbXBvcnQgeyBub3JtYWxpemUgfSBmcm9tICcuLi91dGlscy9ub3JtYWxpemUuanMnO1xuaW1wb3J0IHsgR0xPQkFMX09CSiB9IGZyb20gJy4uL3V0aWxzL3dvcmxkd2lkZS5qcyc7XG5pbXBvcnQgeyBfSU5URVJOQUxfY2FwdHVyZUxvZyB9IGZyb20gJy4vZXhwb3J0cy5qcyc7XG5cbmNvbnN0IElOVEVHUkFUSU9OX05BTUUgPSAnQ29uc29sZUxvZ3MnO1xuXG5jb25zdCBERUZBVUxUX0FUVFJJQlVURVMgPSB7XG4gIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06ICdhdXRvLmNvbnNvbGUubG9nZ2luZycsXG59O1xuXG5jb25zdCBfY29uc29sZUxvZ2dpbmdJbnRlZ3JhdGlvbiA9ICgob3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IGxldmVscyA9IG9wdGlvbnMubGV2ZWxzIHx8IENPTlNPTEVfTEVWRUxTO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogSU5URUdSQVRJT05fTkFNRSxcbiAgICBzZXR1cChjbGllbnQpIHtcbiAgICAgIGNvbnN0IHsgZW5hYmxlTG9ncywgX2V4cGVyaW1lbnRzLCBub3JtYWxpemVEZXB0aCA9IDMsIG5vcm1hbGl6ZU1heEJyZWFkdGggPSAxMDAwIH0gPSBjbGllbnQuZ2V0T3B0aW9ucygpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICBjb25zdCBzaG91bGRFbmFibGVMb2dzID0gZW5hYmxlTG9ncyA/PyBfZXhwZXJpbWVudHM/LmVuYWJsZUxvZ3M7XG4gICAgICBpZiAoIXNob3VsZEVuYWJsZUxvZ3MpIHtcbiAgICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcud2FybignYGVuYWJsZUxvZ3NgIGlzIG5vdCBlbmFibGVkLCBDb25zb2xlTG9ncyBpbnRlZ3JhdGlvbiBkaXNhYmxlZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFkZENvbnNvbGVJbnN0cnVtZW50YXRpb25IYW5kbGVyKCh7IGFyZ3MsIGxldmVsIH0pID0+IHtcbiAgICAgICAgaWYgKGdldENsaWVudCgpICE9PSBjbGllbnQgfHwgIWxldmVscy5pbmNsdWRlcyhsZXZlbCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGV2ZWwgPT09ICdhc3NlcnQnKSB7XG4gICAgICAgICAgaWYgKCFhcmdzWzBdKSB7XG4gICAgICAgICAgICBjb25zdCBmb2xsb3dpbmdBcmdzID0gYXJncy5zbGljZSgxKTtcbiAgICAgICAgICAgIGNvbnN0IGFzc2VydGlvbk1lc3NhZ2UgPVxuICAgICAgICAgICAgICBmb2xsb3dpbmdBcmdzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGBBc3NlcnRpb24gZmFpbGVkOiAke2Zvcm1hdENvbnNvbGVBcmdzKGZvbGxvd2luZ0FyZ3MsIG5vcm1hbGl6ZURlcHRoLCBub3JtYWxpemVNYXhCcmVhZHRoKX1gXG4gICAgICAgICAgICAgICAgOiAnQXNzZXJ0aW9uIGZhaWxlZCc7XG4gICAgICAgICAgICBfSU5URVJOQUxfY2FwdHVyZUxvZyh7IGxldmVsOiAnZXJyb3InLCBtZXNzYWdlOiBhc3NlcnRpb25NZXNzYWdlLCBhdHRyaWJ1dGVzOiBERUZBVUxUX0FUVFJJQlVURVMgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTGV2ZWxMb2cgPSBsZXZlbCA9PT0gJ2xvZyc7XG4gICAgICAgIF9JTlRFUk5BTF9jYXB0dXJlTG9nKHtcbiAgICAgICAgICBsZXZlbDogaXNMZXZlbExvZyA/ICdpbmZvJyA6IGxldmVsLFxuICAgICAgICAgIG1lc3NhZ2U6IGZvcm1hdENvbnNvbGVBcmdzKGFyZ3MsIG5vcm1hbGl6ZURlcHRoLCBub3JtYWxpemVNYXhCcmVhZHRoKSxcbiAgICAgICAgICBzZXZlcml0eU51bWJlcjogaXNMZXZlbExvZyA/IDEwIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IERFRkFVTFRfQVRUUklCVVRFUyxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xufSkgO1xuXG4vKipcbiAqIENhcHR1cmVzIGNhbGxzIHRvIHRoZSBgY29uc29sZWAgQVBJIGFzIGxvZ3MgaW4gU2VudHJ5LiBSZXF1aXJlcyB0aGUgYGVuYWJsZUxvZ3NgIG9wdGlvbiB0byBiZSBlbmFibGVkLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBmZWF0dXJlIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGJlIGNoYW5nZWQgb3IgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuXG4gKlxuICogQnkgZGVmYXVsdCB0aGUgaW50ZWdyYXRpb24gaW5zdHJ1bWVudHMgYGNvbnNvbGUuZGVidWdgLCBgY29uc29sZS5pbmZvYCwgYGNvbnNvbGUud2FybmAsIGBjb25zb2xlLmVycm9yYCxcbiAqIGBjb25zb2xlLmxvZ2AsIGBjb25zb2xlLnRyYWNlYCwgYW5kIGBjb25zb2xlLmFzc2VydGAuIFlvdSBjYW4gdXNlIHRoZSBgbGV2ZWxzYCBvcHRpb24gdG8gY3VzdG9taXplIHdoaWNoXG4gKiBsZXZlbHMgYXJlIGNhcHR1cmVkLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCAqIGFzIFNlbnRyeSBmcm9tICdAc2VudHJ5L2Jyb3dzZXInO1xuICpcbiAqIFNlbnRyeS5pbml0KHtcbiAqICAgZW5hYmxlTG9nczogdHJ1ZSxcbiAqICAgaW50ZWdyYXRpb25zOiBbU2VudHJ5LmNvbnNvbGVMb2dnaW5nSW50ZWdyYXRpb24oeyBsZXZlbHM6IFsnZXJyb3InLCAnd2FybiddIH0pXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmNvbnN0IGNvbnNvbGVMb2dnaW5nSW50ZWdyYXRpb24gPSBkZWZpbmVJbnRlZ3JhdGlvbihfY29uc29sZUxvZ2dpbmdJbnRlZ3JhdGlvbik7XG5cbmZ1bmN0aW9uIGZvcm1hdENvbnNvbGVBcmdzKHZhbHVlcywgbm9ybWFsaXplRGVwdGgsIG5vcm1hbGl6ZU1heEJyZWFkdGgpIHtcbiAgcmV0dXJuICd1dGlsJyBpbiBHTE9CQUxfT0JKICYmIHR5cGVvZiAoR0xPQkFMX09CSiApLnV0aWwuZm9ybWF0ID09PSAnZnVuY3Rpb24nXG4gICAgPyAoR0xPQkFMX09CSiApLnV0aWwuZm9ybWF0KC4uLnZhbHVlcylcbiAgICA6IHNhZmVKb2luQ29uc29sZUFyZ3ModmFsdWVzLCBub3JtYWxpemVEZXB0aCwgbm9ybWFsaXplTWF4QnJlYWR0aCk7XG59XG5cbmZ1bmN0aW9uIHNhZmVKb2luQ29uc29sZUFyZ3ModmFsdWVzLCBub3JtYWxpemVEZXB0aCwgbm9ybWFsaXplTWF4QnJlYWR0aCkge1xuICByZXR1cm4gdmFsdWVzXG4gICAgLm1hcCh2YWx1ZSA9PlxuICAgICAgaXNQcmltaXRpdmUodmFsdWUpID8gU3RyaW5nKHZhbHVlKSA6IEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZSh2YWx1ZSwgbm9ybWFsaXplRGVwdGgsIG5vcm1hbGl6ZU1heEJyZWFkdGgpKSxcbiAgICApXG4gICAgLmpvaW4oJyAnKTtcbn1cblxuZXhwb3J0IHsgY29uc29sZUxvZ2dpbmdJbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc29sZS1pbnRlZ3JhdGlvbi5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/logs/console-integration.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/logs/constants.js":
/*!******************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/logs/constants.js ***!
  \******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   SEVERITY_TEXT_TO_SEVERITY_NUMBER: () => (/* binding */ SEVERITY_TEXT_TO_SEVERITY_NUMBER)\n/* harmony export */ });\n/**\n * Maps a log severity level to a log severity number.\n *\n * @see LogSeverityLevel\n */\nconst SEVERITY_TEXT_TO_SEVERITY_NUMBER = {\n  trace: 1,\n  debug: 5,\n  info: 9,\n  warn: 13,\n  error: 17,\n  fatal: 21,\n};\n\n\n//# sourceMappingURL=constants.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2xvZ3MvY29uc3RhbnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFNEM7QUFDNUMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9sb2dzL2NvbnN0YW50cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1hcHMgYSBsb2cgc2V2ZXJpdHkgbGV2ZWwgdG8gYSBsb2cgc2V2ZXJpdHkgbnVtYmVyLlxuICpcbiAqIEBzZWUgTG9nU2V2ZXJpdHlMZXZlbFxuICovXG5jb25zdCBTRVZFUklUWV9URVhUX1RPX1NFVkVSSVRZX05VTUJFUiA9IHtcbiAgdHJhY2U6IDEsXG4gIGRlYnVnOiA1LFxuICBpbmZvOiA5LFxuICB3YXJuOiAxMyxcbiAgZXJyb3I6IDE3LFxuICBmYXRhbDogMjEsXG59O1xuXG5leHBvcnQgeyBTRVZFUklUWV9URVhUX1RPX1NFVkVSSVRZX05VTUJFUiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/logs/constants.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/logs/envelope.js":
/*!*****************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/logs/envelope.js ***!
  \*****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   createLogContainerEnvelopeItem: () => (/* binding */ createLogContainerEnvelopeItem),\n/* harmony export */   createLogEnvelope: () => (/* binding */ createLogEnvelope)\n/* harmony export */ });\n/* harmony import */ var _utils_dsn_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/dsn.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/dsn.js\");\n/* harmony import */ var _utils_envelope_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/envelope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/envelope.js\");\n\n\n\n/**\n * Creates a log container envelope item for a list of logs.\n *\n * @param items - The logs to include in the envelope.\n * @returns The created log container envelope item.\n */\nfunction createLogContainerEnvelopeItem(items) {\n  return [\n    {\n      type: 'log',\n      item_count: items.length,\n      content_type: 'application/vnd.sentry.items.log+json',\n    },\n    {\n      items,\n    },\n  ];\n}\n\n/**\n * Creates an envelope for a list of logs.\n *\n * Logs from multiple traces can be included in the same envelope.\n *\n * @param logs - The logs to include in the envelope.\n * @param metadata - The metadata to include in the envelope.\n * @param tunnel - The tunnel to include in the envelope.\n * @param dsn - The DSN to include in the envelope.\n * @returns The created envelope.\n */\nfunction createLogEnvelope(\n  logs,\n  metadata,\n  tunnel,\n  dsn,\n) {\n  const headers = {};\n\n  if (metadata?.sdk) {\n    headers.sdk = {\n      name: metadata.sdk.name,\n      version: metadata.sdk.version,\n    };\n  }\n\n  if (!!tunnel && !!dsn) {\n    headers.dsn = (0,_utils_dsn_js__WEBPACK_IMPORTED_MODULE_0__.dsnToString)(dsn);\n  }\n\n  return (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_1__.createEnvelope)(headers, [createLogContainerEnvelopeItem(logs)]);\n}\n\n\n//# sourceMappingURL=envelope.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2xvZ3MvZW52ZWxvcGUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUE4QztBQUNROztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsMERBQVc7QUFDN0I7O0FBRUEsU0FBUyxrRUFBYztBQUN2Qjs7QUFFNkQ7QUFDN0QiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9sb2dzL2VudmVsb3BlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRzblRvU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMvZHNuLmpzJztcbmltcG9ydCB7IGNyZWF0ZUVudmVsb3BlIH0gZnJvbSAnLi4vdXRpbHMvZW52ZWxvcGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBsb2cgY29udGFpbmVyIGVudmVsb3BlIGl0ZW0gZm9yIGEgbGlzdCBvZiBsb2dzLlxuICpcbiAqIEBwYXJhbSBpdGVtcyAtIFRoZSBsb2dzIHRvIGluY2x1ZGUgaW4gdGhlIGVudmVsb3BlLlxuICogQHJldHVybnMgVGhlIGNyZWF0ZWQgbG9nIGNvbnRhaW5lciBlbnZlbG9wZSBpdGVtLlxuICovXG5mdW5jdGlvbiBjcmVhdGVMb2dDb250YWluZXJFbnZlbG9wZUl0ZW0oaXRlbXMpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0eXBlOiAnbG9nJyxcbiAgICAgIGl0ZW1fY291bnQ6IGl0ZW1zLmxlbmd0aCxcbiAgICAgIGNvbnRlbnRfdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5zZW50cnkuaXRlbXMubG9nK2pzb24nLFxuICAgIH0sXG4gICAge1xuICAgICAgaXRlbXMsXG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVudmVsb3BlIGZvciBhIGxpc3Qgb2YgbG9ncy5cbiAqXG4gKiBMb2dzIGZyb20gbXVsdGlwbGUgdHJhY2VzIGNhbiBiZSBpbmNsdWRlZCBpbiB0aGUgc2FtZSBlbnZlbG9wZS5cbiAqXG4gKiBAcGFyYW0gbG9ncyAtIFRoZSBsb2dzIHRvIGluY2x1ZGUgaW4gdGhlIGVudmVsb3BlLlxuICogQHBhcmFtIG1ldGFkYXRhIC0gVGhlIG1ldGFkYXRhIHRvIGluY2x1ZGUgaW4gdGhlIGVudmVsb3BlLlxuICogQHBhcmFtIHR1bm5lbCAtIFRoZSB0dW5uZWwgdG8gaW5jbHVkZSBpbiB0aGUgZW52ZWxvcGUuXG4gKiBAcGFyYW0gZHNuIC0gVGhlIERTTiB0byBpbmNsdWRlIGluIHRoZSBlbnZlbG9wZS5cbiAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGVudmVsb3BlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVMb2dFbnZlbG9wZShcbiAgbG9ncyxcbiAgbWV0YWRhdGEsXG4gIHR1bm5lbCxcbiAgZHNuLFxuKSB7XG4gIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICBpZiAobWV0YWRhdGE/LnNkaykge1xuICAgIGhlYWRlcnMuc2RrID0ge1xuICAgICAgbmFtZTogbWV0YWRhdGEuc2RrLm5hbWUsXG4gICAgICB2ZXJzaW9uOiBtZXRhZGF0YS5zZGsudmVyc2lvbixcbiAgICB9O1xuICB9XG5cbiAgaWYgKCEhdHVubmVsICYmICEhZHNuKSB7XG4gICAgaGVhZGVycy5kc24gPSBkc25Ub1N0cmluZyhkc24pO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUVudmVsb3BlKGhlYWRlcnMsIFtjcmVhdGVMb2dDb250YWluZXJFbnZlbG9wZUl0ZW0obG9ncyldKTtcbn1cblxuZXhwb3J0IHsgY3JlYXRlTG9nQ29udGFpbmVyRW52ZWxvcGVJdGVtLCBjcmVhdGVMb2dFbnZlbG9wZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW52ZWxvcGUuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/logs/envelope.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/logs/exports.js":
/*!****************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/logs/exports.js ***!
  \****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   _INTERNAL_captureLog: () => (/* binding */ _INTERNAL_captureLog),\n/* harmony export */   _INTERNAL_captureSerializedLog: () => (/* binding */ _INTERNAL_captureSerializedLog),\n/* harmony export */   _INTERNAL_flushLogsBuffer: () => (/* binding */ _INTERNAL_flushLogsBuffer),\n/* harmony export */   _INTERNAL_getLogBuffer: () => (/* binding */ _INTERNAL_getLogBuffer),\n/* harmony export */   logAttributeToSerializedLogAttribute: () => (/* binding */ logAttributeToSerializedLogAttribute)\n/* harmony export */ });\n/* harmony import */ var _carrier_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../carrier.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/carrier.js\");\n/* harmony import */ var _client_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../client.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/client.js\");\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _utils_applyScopeDataToEvent_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/applyScopeDataToEvent.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/applyScopeDataToEvent.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_is_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n/* harmony import */ var _utils_spanOnScope_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/spanOnScope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanOnScope.js\");\n/* harmony import */ var _utils_time_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/time.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/time.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./constants.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/logs/constants.js\");\n/* harmony import */ var _envelope_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./envelope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/logs/envelope.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nconst MAX_LOG_BUFFER_SIZE = 100;\n\n/**\n * Converts a log attribute to a serialized log attribute.\n *\n * @param key - The key of the log attribute.\n * @param value - The value of the log attribute.\n * @returns The serialized log attribute.\n */\nfunction logAttributeToSerializedLogAttribute(value) {\n  switch (typeof value) {\n    case 'number':\n      if (Number.isInteger(value)) {\n        return {\n          value,\n          type: 'integer',\n        };\n      }\n      return {\n        value,\n        type: 'double',\n      };\n    case 'boolean':\n      return {\n        value,\n        type: 'boolean',\n      };\n    case 'string':\n      return {\n        value,\n        type: 'string',\n      };\n    default: {\n      let stringValue = '';\n      try {\n        stringValue = JSON.stringify(value) ?? '';\n      } catch {\n        // Do nothing\n      }\n      return {\n        value: stringValue,\n        type: 'string',\n      };\n    }\n  }\n}\n\n/**\n * Sets a log attribute if the value exists and the attribute key is not already present.\n *\n * @param logAttributes - The log attributes object to modify.\n * @param key - The attribute key to set.\n * @param value - The value to set (only sets if truthy and key not present).\n * @param setEvenIfPresent - Whether to set the attribute if it is present. Defaults to true.\n */\nfunction setLogAttribute(\n  logAttributes,\n  key,\n  value,\n  setEvenIfPresent = true,\n) {\n  if (value && (!logAttributes[key] || setEvenIfPresent)) {\n    logAttributes[key] = value;\n  }\n}\n\n/**\n * Captures a serialized log event and adds it to the log buffer for the given client.\n *\n * @param client - A client. Uses the current client if not provided.\n * @param serializedLog - The serialized log event to capture.\n *\n * @experimental This method will experience breaking changes. This is not yet part of\n * the stable Sentry SDK API and can be changed or removed without warning.\n */\nfunction _INTERNAL_captureSerializedLog(client, serializedLog) {\n  const bufferMap = _getBufferMap();\n\n  const logBuffer = _INTERNAL_getLogBuffer(client);\n  if (logBuffer === undefined) {\n    bufferMap.set(client, [serializedLog]);\n  } else {\n    bufferMap.set(client, [...logBuffer, serializedLog]);\n    if (logBuffer.length >= MAX_LOG_BUFFER_SIZE) {\n      _INTERNAL_flushLogsBuffer(client, logBuffer);\n    }\n  }\n}\n\n/**\n * Captures a log event and sends it to Sentry.\n *\n * @param log - The log event to capture.\n * @param scope - A scope. Uses the current scope if not provided.\n * @param client - A client. Uses the current client if not provided.\n * @param captureSerializedLog - A function to capture the serialized log.\n *\n * @experimental This method will experience breaking changes. This is not yet part of\n * the stable Sentry SDK API and can be changed or removed without warning.\n */\nfunction _INTERNAL_captureLog(\n  beforeLog,\n  client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getClient)(),\n  currentScope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getCurrentScope)(),\n  captureSerializedLog = _INTERNAL_captureSerializedLog,\n) {\n  if (!client) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_5__.debug.warn('No client available to capture log.');\n    return;\n  }\n\n  const { release, environment, enableLogs, beforeSendLog, _experiments } = client.getOptions();\n  // eslint-disable-next-line deprecation/deprecation\n  const shouldEnableLogs = enableLogs ?? _experiments?.enableLogs;\n  if (!shouldEnableLogs) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_5__.debug.warn('logging option not enabled, log will not be captured.');\n    return;\n  }\n  // eslint-disable-next-line deprecation/deprecation\n  const actualBeforeSendLog = beforeSendLog ?? _experiments?.beforeSendLog;\n\n  const [, traceContext] = (0,_client_js__WEBPACK_IMPORTED_MODULE_1__._getTraceInfoFromScope)(client, currentScope);\n\n  const processedLogAttributes = {\n    ...beforeLog.attributes,\n  };\n\n  const {\n    user: { id, email, username },\n  } = getMergedScopeData(currentScope);\n  setLogAttribute(processedLogAttributes, 'user.id', id, false);\n  setLogAttribute(processedLogAttributes, 'user.email', email, false);\n  setLogAttribute(processedLogAttributes, 'user.name', username, false);\n\n  setLogAttribute(processedLogAttributes, 'sentry.release', release);\n  setLogAttribute(processedLogAttributes, 'sentry.environment', environment);\n\n  const { name, version } = client.getSdkMetadata()?.sdk ?? {};\n  setLogAttribute(processedLogAttributes, 'sentry.sdk.name', name);\n  setLogAttribute(processedLogAttributes, 'sentry.sdk.version', version);\n\n  const beforeLogMessage = beforeLog.message;\n  if ((0,_utils_is_js__WEBPACK_IMPORTED_MODULE_6__.isParameterizedString)(beforeLogMessage)) {\n    const { __sentry_template_string__, __sentry_template_values__ = [] } = beforeLogMessage;\n    processedLogAttributes['sentry.message.template'] = __sentry_template_string__;\n    __sentry_template_values__.forEach((param, index) => {\n      processedLogAttributes[`sentry.message.parameter.${index}`] = param;\n    });\n  }\n\n  const span = (0,_utils_spanOnScope_js__WEBPACK_IMPORTED_MODULE_7__._getSpanForScope)(currentScope);\n  // Add the parent span ID to the log attributes for trace context\n  setLogAttribute(processedLogAttributes, 'sentry.trace.parent_span_id', span?.spanContext().spanId);\n\n  const processedLog = { ...beforeLog, attributes: processedLogAttributes };\n\n  client.emit('beforeCaptureLog', processedLog);\n\n  // We need to wrap this in `consoleSandbox` to avoid recursive calls to `beforeSendLog`\n  const log = actualBeforeSendLog ? (0,_utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_5__.consoleSandbox)(() => actualBeforeSendLog(processedLog)) : processedLog;\n  if (!log) {\n    client.recordDroppedEvent('before_send', 'log_item', 1);\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_5__.debug.warn('beforeSendLog returned null, log will not be captured.');\n    return;\n  }\n\n  const { level, message, attributes = {}, severityNumber } = log;\n\n  const serializedLog = {\n    timestamp: (0,_utils_time_js__WEBPACK_IMPORTED_MODULE_8__.timestampInSeconds)(),\n    level,\n    body: message,\n    trace_id: traceContext?.trace_id,\n    severity_number: severityNumber ?? _constants_js__WEBPACK_IMPORTED_MODULE_9__.SEVERITY_TEXT_TO_SEVERITY_NUMBER[level],\n    attributes: Object.keys(attributes).reduce(\n      (acc, key) => {\n        acc[key] = logAttributeToSerializedLogAttribute(attributes[key]);\n        return acc;\n      },\n      {} ,\n    ),\n  };\n\n  captureSerializedLog(client, serializedLog);\n\n  client.emit('afterCaptureLog', log);\n}\n\n/**\n * Flushes the logs buffer to Sentry.\n *\n * @param client - A client.\n * @param maybeLogBuffer - A log buffer. Uses the log buffer for the given client if not provided.\n *\n * @experimental This method will experience breaking changes. This is not yet part of\n * the stable Sentry SDK API and can be changed or removed without warning.\n */\nfunction _INTERNAL_flushLogsBuffer(client, maybeLogBuffer) {\n  const logBuffer = maybeLogBuffer ?? _INTERNAL_getLogBuffer(client) ?? [];\n  if (logBuffer.length === 0) {\n    return;\n  }\n\n  const clientOptions = client.getOptions();\n  const envelope = (0,_envelope_js__WEBPACK_IMPORTED_MODULE_10__.createLogEnvelope)(logBuffer, clientOptions._metadata, clientOptions.tunnel, client.getDsn());\n\n  // Clear the log buffer after envelopes have been constructed.\n  _getBufferMap().set(client, []);\n\n  client.emit('flushLogs');\n\n  // sendEnvelope should not throw\n  // eslint-disable-next-line @typescript-eslint/no-floating-promises\n  client.sendEnvelope(envelope);\n}\n\n/**\n * Returns the log buffer for a given client.\n *\n * Exported for testing purposes.\n *\n * @param client - The client to get the log buffer for.\n * @returns The log buffer for the given client.\n */\nfunction _INTERNAL_getLogBuffer(client) {\n  return _getBufferMap().get(client);\n}\n\n/**\n * Get the scope data for the current scope after merging with the\n * global scope and isolation scope.\n *\n * @param currentScope - The current scope.\n * @returns The scope data.\n */\nfunction getMergedScopeData(currentScope) {\n  const scopeData = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getGlobalScope)().getScopeData();\n  (0,_utils_applyScopeDataToEvent_js__WEBPACK_IMPORTED_MODULE_4__.mergeScopeData)(scopeData, (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getIsolationScope)().getScopeData());\n  (0,_utils_applyScopeDataToEvent_js__WEBPACK_IMPORTED_MODULE_4__.mergeScopeData)(scopeData, currentScope.getScopeData());\n  return scopeData;\n}\n\nfunction _getBufferMap() {\n  // The reference to the Client <> LogBuffer map is stored on the carrier to ensure it's always the same\n  return (0,_carrier_js__WEBPACK_IMPORTED_MODULE_0__.getGlobalSingleton)('clientToLogBufferMap', () => new WeakMap());\n}\n\n\n//# sourceMappingURL=exports.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL2xvZ3MvZXhwb3J0cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQW1EO0FBQ0c7QUFDOEM7QUFDcEQ7QUFDbUI7QUFDRjtBQUNWO0FBQ0k7QUFDTDtBQUNZO0FBQ2hCOztBQUVsRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsNERBQVM7QUFDcEIsaUJBQWlCLGtFQUFlO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLElBQUksd0RBQVcsSUFBSSx5REFBSztBQUN4QjtBQUNBOztBQUVBLFVBQVUsZ0VBQWdFO0FBQzFFO0FBQ0E7QUFDQTtBQUNBLElBQUksd0RBQVcsSUFBSSx5REFBSztBQUN4QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkIsa0VBQXNCOztBQUVqRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQyxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsVUFBVSxnQkFBZ0I7QUFDMUI7QUFDQTs7QUFFQTtBQUNBLE1BQU0sbUVBQXFCO0FBQzNCLFlBQVksOERBQThEO0FBQzFFO0FBQ0E7QUFDQSx5REFBeUQsTUFBTTtBQUMvRCxLQUFLO0FBQ0w7O0FBRUEsZUFBZSx1RUFBZ0I7QUFDL0I7QUFDQTs7QUFFQSx5QkFBeUI7O0FBRXpCOztBQUVBO0FBQ0Esb0NBQW9DLHNFQUFjO0FBQ2xEO0FBQ0E7QUFDQSxJQUFJLHdEQUFXLElBQUkseURBQUs7QUFDeEI7QUFDQTs7QUFFQSxVQUFVLCtCQUErQixtQkFBbUI7O0FBRTVEO0FBQ0EsZUFBZSxrRUFBa0I7QUFDakM7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLDJFQUFnQztBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsZ0VBQWlCOztBQUVwQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixpRUFBYztBQUNsQyxFQUFFLCtFQUFjLFlBQVksb0VBQWlCO0FBQzdDLEVBQUUsK0VBQWM7QUFDaEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUywrREFBa0I7QUFDM0I7O0FBRXlKO0FBQ3pKIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vbG9ncy9leHBvcnRzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEdsb2JhbFNpbmdsZXRvbiB9IGZyb20gJy4uL2NhcnJpZXIuanMnO1xuaW1wb3J0IHsgX2dldFRyYWNlSW5mb0Zyb21TY29wZSB9IGZyb20gJy4uL2NsaWVudC5qcyc7XG5pbXBvcnQgeyBnZXRDbGllbnQsIGdldEN1cnJlbnRTY29wZSwgZ2V0R2xvYmFsU2NvcGUsIGdldElzb2xhdGlvblNjb3BlIH0gZnJvbSAnLi4vY3VycmVudFNjb3Blcy5qcyc7XG5pbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4uL2RlYnVnLWJ1aWxkLmpzJztcbmltcG9ydCB7IG1lcmdlU2NvcGVEYXRhIH0gZnJvbSAnLi4vdXRpbHMvYXBwbHlTY29wZURhdGFUb0V2ZW50LmpzJztcbmltcG9ydCB7IGRlYnVnLCBjb25zb2xlU2FuZGJveCB9IGZyb20gJy4uL3V0aWxzL2RlYnVnLWxvZ2dlci5qcyc7XG5pbXBvcnQgeyBpc1BhcmFtZXRlcml6ZWRTdHJpbmcgfSBmcm9tICcuLi91dGlscy9pcy5qcyc7XG5pbXBvcnQgeyBfZ2V0U3BhbkZvclNjb3BlIH0gZnJvbSAnLi4vdXRpbHMvc3Bhbk9uU2NvcGUuanMnO1xuaW1wb3J0IHsgdGltZXN0YW1wSW5TZWNvbmRzIH0gZnJvbSAnLi4vdXRpbHMvdGltZS5qcyc7XG5pbXBvcnQgeyBTRVZFUklUWV9URVhUX1RPX1NFVkVSSVRZX05VTUJFUiB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ0VudmVsb3BlIH0gZnJvbSAnLi9lbnZlbG9wZS5qcyc7XG5cbmNvbnN0IE1BWF9MT0dfQlVGRkVSX1NJWkUgPSAxMDA7XG5cbi8qKlxuICogQ29udmVydHMgYSBsb2cgYXR0cmlidXRlIHRvIGEgc2VyaWFsaXplZCBsb2cgYXR0cmlidXRlLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IG9mIHRoZSBsb2cgYXR0cmlidXRlLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSBsb2cgYXR0cmlidXRlLlxuICogQHJldHVybnMgVGhlIHNlcmlhbGl6ZWQgbG9nIGF0dHJpYnV0ZS5cbiAqL1xuZnVuY3Rpb24gbG9nQXR0cmlidXRlVG9TZXJpYWxpemVkTG9nQXR0cmlidXRlKHZhbHVlKSB7XG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHR5cGU6ICdpbnRlZ2VyJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0eXBlOiAnZG91YmxlJyxcbiAgICAgIH07XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgfTtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgfTtcbiAgICBkZWZhdWx0OiB7XG4gICAgICBsZXQgc3RyaW5nVmFsdWUgPSAnJztcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0cmluZ1ZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpID8/ICcnO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBzdHJpbmdWYWx1ZSxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNldHMgYSBsb2cgYXR0cmlidXRlIGlmIHRoZSB2YWx1ZSBleGlzdHMgYW5kIHRoZSBhdHRyaWJ1dGUga2V5IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQuXG4gKlxuICogQHBhcmFtIGxvZ0F0dHJpYnV0ZXMgLSBUaGUgbG9nIGF0dHJpYnV0ZXMgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSBrZXkgLSBUaGUgYXR0cmlidXRlIGtleSB0byBzZXQuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IChvbmx5IHNldHMgaWYgdHJ1dGh5IGFuZCBrZXkgbm90IHByZXNlbnQpLlxuICogQHBhcmFtIHNldEV2ZW5JZlByZXNlbnQgLSBXaGV0aGVyIHRvIHNldCB0aGUgYXR0cmlidXRlIGlmIGl0IGlzIHByZXNlbnQuIERlZmF1bHRzIHRvIHRydWUuXG4gKi9cbmZ1bmN0aW9uIHNldExvZ0F0dHJpYnV0ZShcbiAgbG9nQXR0cmlidXRlcyxcbiAga2V5LFxuICB2YWx1ZSxcbiAgc2V0RXZlbklmUHJlc2VudCA9IHRydWUsXG4pIHtcbiAgaWYgKHZhbHVlICYmICghbG9nQXR0cmlidXRlc1trZXldIHx8IHNldEV2ZW5JZlByZXNlbnQpKSB7XG4gICAgbG9nQXR0cmlidXRlc1trZXldID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBDYXB0dXJlcyBhIHNlcmlhbGl6ZWQgbG9nIGV2ZW50IGFuZCBhZGRzIGl0IHRvIHRoZSBsb2cgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gY2xpZW50LlxuICpcbiAqIEBwYXJhbSBjbGllbnQgLSBBIGNsaWVudC4gVXNlcyB0aGUgY3VycmVudCBjbGllbnQgaWYgbm90IHByb3ZpZGVkLlxuICogQHBhcmFtIHNlcmlhbGl6ZWRMb2cgLSBUaGUgc2VyaWFsaXplZCBsb2cgZXZlbnQgdG8gY2FwdHVyZS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbWV0aG9kIHdpbGwgZXhwZXJpZW5jZSBicmVha2luZyBjaGFuZ2VzLiBUaGlzIGlzIG5vdCB5ZXQgcGFydCBvZlxuICogdGhlIHN0YWJsZSBTZW50cnkgU0RLIEFQSSBhbmQgY2FuIGJlIGNoYW5nZWQgb3IgcmVtb3ZlZCB3aXRob3V0IHdhcm5pbmcuXG4gKi9cbmZ1bmN0aW9uIF9JTlRFUk5BTF9jYXB0dXJlU2VyaWFsaXplZExvZyhjbGllbnQsIHNlcmlhbGl6ZWRMb2cpIHtcbiAgY29uc3QgYnVmZmVyTWFwID0gX2dldEJ1ZmZlck1hcCgpO1xuXG4gIGNvbnN0IGxvZ0J1ZmZlciA9IF9JTlRFUk5BTF9nZXRMb2dCdWZmZXIoY2xpZW50KTtcbiAgaWYgKGxvZ0J1ZmZlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmZmVyTWFwLnNldChjbGllbnQsIFtzZXJpYWxpemVkTG9nXSk7XG4gIH0gZWxzZSB7XG4gICAgYnVmZmVyTWFwLnNldChjbGllbnQsIFsuLi5sb2dCdWZmZXIsIHNlcmlhbGl6ZWRMb2ddKTtcbiAgICBpZiAobG9nQnVmZmVyLmxlbmd0aCA+PSBNQVhfTE9HX0JVRkZFUl9TSVpFKSB7XG4gICAgICBfSU5URVJOQUxfZmx1c2hMb2dzQnVmZmVyKGNsaWVudCwgbG9nQnVmZmVyKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDYXB0dXJlcyBhIGxvZyBldmVudCBhbmQgc2VuZHMgaXQgdG8gU2VudHJ5LlxuICpcbiAqIEBwYXJhbSBsb2cgLSBUaGUgbG9nIGV2ZW50IHRvIGNhcHR1cmUuXG4gKiBAcGFyYW0gc2NvcGUgLSBBIHNjb3BlLiBVc2VzIHRoZSBjdXJyZW50IHNjb3BlIGlmIG5vdCBwcm92aWRlZC5cbiAqIEBwYXJhbSBjbGllbnQgLSBBIGNsaWVudC4gVXNlcyB0aGUgY3VycmVudCBjbGllbnQgaWYgbm90IHByb3ZpZGVkLlxuICogQHBhcmFtIGNhcHR1cmVTZXJpYWxpemVkTG9nIC0gQSBmdW5jdGlvbiB0byBjYXB0dXJlIHRoZSBzZXJpYWxpemVkIGxvZy5cbiAqXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbWV0aG9kIHdpbGwgZXhwZXJpZW5jZSBicmVha2luZyBjaGFuZ2VzLiBUaGlzIGlzIG5vdCB5ZXQgcGFydCBvZlxuICogdGhlIHN0YWJsZSBTZW50cnkgU0RLIEFQSSBhbmQgY2FuIGJlIGNoYW5nZWQgb3IgcmVtb3ZlZCB3aXRob3V0IHdhcm5pbmcuXG4gKi9cbmZ1bmN0aW9uIF9JTlRFUk5BTF9jYXB0dXJlTG9nKFxuICBiZWZvcmVMb2csXG4gIGNsaWVudCA9IGdldENsaWVudCgpLFxuICBjdXJyZW50U2NvcGUgPSBnZXRDdXJyZW50U2NvcGUoKSxcbiAgY2FwdHVyZVNlcmlhbGl6ZWRMb2cgPSBfSU5URVJOQUxfY2FwdHVyZVNlcmlhbGl6ZWRMb2csXG4pIHtcbiAgaWYgKCFjbGllbnQpIHtcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy53YXJuKCdObyBjbGllbnQgYXZhaWxhYmxlIHRvIGNhcHR1cmUgbG9nLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgcmVsZWFzZSwgZW52aXJvbm1lbnQsIGVuYWJsZUxvZ3MsIGJlZm9yZVNlbmRMb2csIF9leHBlcmltZW50cyB9ID0gY2xpZW50LmdldE9wdGlvbnMoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGNvbnN0IHNob3VsZEVuYWJsZUxvZ3MgPSBlbmFibGVMb2dzID8/IF9leHBlcmltZW50cz8uZW5hYmxlTG9ncztcbiAgaWYgKCFzaG91bGRFbmFibGVMb2dzKSB7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcud2FybignbG9nZ2luZyBvcHRpb24gbm90IGVuYWJsZWQsIGxvZyB3aWxsIG5vdCBiZSBjYXB0dXJlZC4nKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGNvbnN0IGFjdHVhbEJlZm9yZVNlbmRMb2cgPSBiZWZvcmVTZW5kTG9nID8/IF9leHBlcmltZW50cz8uYmVmb3JlU2VuZExvZztcblxuICBjb25zdCBbLCB0cmFjZUNvbnRleHRdID0gX2dldFRyYWNlSW5mb0Zyb21TY29wZShjbGllbnQsIGN1cnJlbnRTY29wZSk7XG5cbiAgY29uc3QgcHJvY2Vzc2VkTG9nQXR0cmlidXRlcyA9IHtcbiAgICAuLi5iZWZvcmVMb2cuYXR0cmlidXRlcyxcbiAgfTtcblxuICBjb25zdCB7XG4gICAgdXNlcjogeyBpZCwgZW1haWwsIHVzZXJuYW1lIH0sXG4gIH0gPSBnZXRNZXJnZWRTY29wZURhdGEoY3VycmVudFNjb3BlKTtcbiAgc2V0TG9nQXR0cmlidXRlKHByb2Nlc3NlZExvZ0F0dHJpYnV0ZXMsICd1c2VyLmlkJywgaWQsIGZhbHNlKTtcbiAgc2V0TG9nQXR0cmlidXRlKHByb2Nlc3NlZExvZ0F0dHJpYnV0ZXMsICd1c2VyLmVtYWlsJywgZW1haWwsIGZhbHNlKTtcbiAgc2V0TG9nQXR0cmlidXRlKHByb2Nlc3NlZExvZ0F0dHJpYnV0ZXMsICd1c2VyLm5hbWUnLCB1c2VybmFtZSwgZmFsc2UpO1xuXG4gIHNldExvZ0F0dHJpYnV0ZShwcm9jZXNzZWRMb2dBdHRyaWJ1dGVzLCAnc2VudHJ5LnJlbGVhc2UnLCByZWxlYXNlKTtcbiAgc2V0TG9nQXR0cmlidXRlKHByb2Nlc3NlZExvZ0F0dHJpYnV0ZXMsICdzZW50cnkuZW52aXJvbm1lbnQnLCBlbnZpcm9ubWVudCk7XG5cbiAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBjbGllbnQuZ2V0U2RrTWV0YWRhdGEoKT8uc2RrID8/IHt9O1xuICBzZXRMb2dBdHRyaWJ1dGUocHJvY2Vzc2VkTG9nQXR0cmlidXRlcywgJ3NlbnRyeS5zZGsubmFtZScsIG5hbWUpO1xuICBzZXRMb2dBdHRyaWJ1dGUocHJvY2Vzc2VkTG9nQXR0cmlidXRlcywgJ3NlbnRyeS5zZGsudmVyc2lvbicsIHZlcnNpb24pO1xuXG4gIGNvbnN0IGJlZm9yZUxvZ01lc3NhZ2UgPSBiZWZvcmVMb2cubWVzc2FnZTtcbiAgaWYgKGlzUGFyYW1ldGVyaXplZFN0cmluZyhiZWZvcmVMb2dNZXNzYWdlKSkge1xuICAgIGNvbnN0IHsgX19zZW50cnlfdGVtcGxhdGVfc3RyaW5nX18sIF9fc2VudHJ5X3RlbXBsYXRlX3ZhbHVlc19fID0gW10gfSA9IGJlZm9yZUxvZ01lc3NhZ2U7XG4gICAgcHJvY2Vzc2VkTG9nQXR0cmlidXRlc1snc2VudHJ5Lm1lc3NhZ2UudGVtcGxhdGUnXSA9IF9fc2VudHJ5X3RlbXBsYXRlX3N0cmluZ19fO1xuICAgIF9fc2VudHJ5X3RlbXBsYXRlX3ZhbHVlc19fLmZvckVhY2goKHBhcmFtLCBpbmRleCkgPT4ge1xuICAgICAgcHJvY2Vzc2VkTG9nQXR0cmlidXRlc1tgc2VudHJ5Lm1lc3NhZ2UucGFyYW1ldGVyLiR7aW5kZXh9YF0gPSBwYXJhbTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHNwYW4gPSBfZ2V0U3BhbkZvclNjb3BlKGN1cnJlbnRTY29wZSk7XG4gIC8vIEFkZCB0aGUgcGFyZW50IHNwYW4gSUQgdG8gdGhlIGxvZyBhdHRyaWJ1dGVzIGZvciB0cmFjZSBjb250ZXh0XG4gIHNldExvZ0F0dHJpYnV0ZShwcm9jZXNzZWRMb2dBdHRyaWJ1dGVzLCAnc2VudHJ5LnRyYWNlLnBhcmVudF9zcGFuX2lkJywgc3Bhbj8uc3BhbkNvbnRleHQoKS5zcGFuSWQpO1xuXG4gIGNvbnN0IHByb2Nlc3NlZExvZyA9IHsgLi4uYmVmb3JlTG9nLCBhdHRyaWJ1dGVzOiBwcm9jZXNzZWRMb2dBdHRyaWJ1dGVzIH07XG5cbiAgY2xpZW50LmVtaXQoJ2JlZm9yZUNhcHR1cmVMb2cnLCBwcm9jZXNzZWRMb2cpO1xuXG4gIC8vIFdlIG5lZWQgdG8gd3JhcCB0aGlzIGluIGBjb25zb2xlU2FuZGJveGAgdG8gYXZvaWQgcmVjdXJzaXZlIGNhbGxzIHRvIGBiZWZvcmVTZW5kTG9nYFxuICBjb25zdCBsb2cgPSBhY3R1YWxCZWZvcmVTZW5kTG9nID8gY29uc29sZVNhbmRib3goKCkgPT4gYWN0dWFsQmVmb3JlU2VuZExvZyhwcm9jZXNzZWRMb2cpKSA6IHByb2Nlc3NlZExvZztcbiAgaWYgKCFsb2cpIHtcbiAgICBjbGllbnQucmVjb3JkRHJvcHBlZEV2ZW50KCdiZWZvcmVfc2VuZCcsICdsb2dfaXRlbScsIDEpO1xuICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLndhcm4oJ2JlZm9yZVNlbmRMb2cgcmV0dXJuZWQgbnVsbCwgbG9nIHdpbGwgbm90IGJlIGNhcHR1cmVkLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgbGV2ZWwsIG1lc3NhZ2UsIGF0dHJpYnV0ZXMgPSB7fSwgc2V2ZXJpdHlOdW1iZXIgfSA9IGxvZztcblxuICBjb25zdCBzZXJpYWxpemVkTG9nID0ge1xuICAgIHRpbWVzdGFtcDogdGltZXN0YW1wSW5TZWNvbmRzKCksXG4gICAgbGV2ZWwsXG4gICAgYm9keTogbWVzc2FnZSxcbiAgICB0cmFjZV9pZDogdHJhY2VDb250ZXh0Py50cmFjZV9pZCxcbiAgICBzZXZlcml0eV9udW1iZXI6IHNldmVyaXR5TnVtYmVyID8/IFNFVkVSSVRZX1RFWFRfVE9fU0VWRVJJVFlfTlVNQkVSW2xldmVsXSxcbiAgICBhdHRyaWJ1dGVzOiBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5yZWR1Y2UoXG4gICAgICAoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgYWNjW2tleV0gPSBsb2dBdHRyaWJ1dGVUb1NlcmlhbGl6ZWRMb2dBdHRyaWJ1dGUoYXR0cmlidXRlc1trZXldKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICB7fSAsXG4gICAgKSxcbiAgfTtcblxuICBjYXB0dXJlU2VyaWFsaXplZExvZyhjbGllbnQsIHNlcmlhbGl6ZWRMb2cpO1xuXG4gIGNsaWVudC5lbWl0KCdhZnRlckNhcHR1cmVMb2cnLCBsb2cpO1xufVxuXG4vKipcbiAqIEZsdXNoZXMgdGhlIGxvZ3MgYnVmZmVyIHRvIFNlbnRyeS5cbiAqXG4gKiBAcGFyYW0gY2xpZW50IC0gQSBjbGllbnQuXG4gKiBAcGFyYW0gbWF5YmVMb2dCdWZmZXIgLSBBIGxvZyBidWZmZXIuIFVzZXMgdGhlIGxvZyBidWZmZXIgZm9yIHRoZSBnaXZlbiBjbGllbnQgaWYgbm90IHByb3ZpZGVkLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtZXRob2Qgd2lsbCBleHBlcmllbmNlIGJyZWFraW5nIGNoYW5nZXMuIFRoaXMgaXMgbm90IHlldCBwYXJ0IG9mXG4gKiB0aGUgc3RhYmxlIFNlbnRyeSBTREsgQVBJIGFuZCBjYW4gYmUgY2hhbmdlZCBvciByZW1vdmVkIHdpdGhvdXQgd2FybmluZy5cbiAqL1xuZnVuY3Rpb24gX0lOVEVSTkFMX2ZsdXNoTG9nc0J1ZmZlcihjbGllbnQsIG1heWJlTG9nQnVmZmVyKSB7XG4gIGNvbnN0IGxvZ0J1ZmZlciA9IG1heWJlTG9nQnVmZmVyID8/IF9JTlRFUk5BTF9nZXRMb2dCdWZmZXIoY2xpZW50KSA/PyBbXTtcbiAgaWYgKGxvZ0J1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjbGllbnRPcHRpb25zID0gY2xpZW50LmdldE9wdGlvbnMoKTtcbiAgY29uc3QgZW52ZWxvcGUgPSBjcmVhdGVMb2dFbnZlbG9wZShsb2dCdWZmZXIsIGNsaWVudE9wdGlvbnMuX21ldGFkYXRhLCBjbGllbnRPcHRpb25zLnR1bm5lbCwgY2xpZW50LmdldERzbigpKTtcblxuICAvLyBDbGVhciB0aGUgbG9nIGJ1ZmZlciBhZnRlciBlbnZlbG9wZXMgaGF2ZSBiZWVuIGNvbnN0cnVjdGVkLlxuICBfZ2V0QnVmZmVyTWFwKCkuc2V0KGNsaWVudCwgW10pO1xuXG4gIGNsaWVudC5lbWl0KCdmbHVzaExvZ3MnKTtcblxuICAvLyBzZW5kRW52ZWxvcGUgc2hvdWxkIG5vdCB0aHJvd1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gIGNsaWVudC5zZW5kRW52ZWxvcGUoZW52ZWxvcGUpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGxvZyBidWZmZXIgZm9yIGEgZ2l2ZW4gY2xpZW50LlxuICpcbiAqIEV4cG9ydGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICpcbiAqIEBwYXJhbSBjbGllbnQgLSBUaGUgY2xpZW50IHRvIGdldCB0aGUgbG9nIGJ1ZmZlciBmb3IuXG4gKiBAcmV0dXJucyBUaGUgbG9nIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIGNsaWVudC5cbiAqL1xuZnVuY3Rpb24gX0lOVEVSTkFMX2dldExvZ0J1ZmZlcihjbGllbnQpIHtcbiAgcmV0dXJuIF9nZXRCdWZmZXJNYXAoKS5nZXQoY2xpZW50KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHNjb3BlIGRhdGEgZm9yIHRoZSBjdXJyZW50IHNjb3BlIGFmdGVyIG1lcmdpbmcgd2l0aCB0aGVcbiAqIGdsb2JhbCBzY29wZSBhbmQgaXNvbGF0aW9uIHNjb3BlLlxuICpcbiAqIEBwYXJhbSBjdXJyZW50U2NvcGUgLSBUaGUgY3VycmVudCBzY29wZS5cbiAqIEByZXR1cm5zIFRoZSBzY29wZSBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNZXJnZWRTY29wZURhdGEoY3VycmVudFNjb3BlKSB7XG4gIGNvbnN0IHNjb3BlRGF0YSA9IGdldEdsb2JhbFNjb3BlKCkuZ2V0U2NvcGVEYXRhKCk7XG4gIG1lcmdlU2NvcGVEYXRhKHNjb3BlRGF0YSwgZ2V0SXNvbGF0aW9uU2NvcGUoKS5nZXRTY29wZURhdGEoKSk7XG4gIG1lcmdlU2NvcGVEYXRhKHNjb3BlRGF0YSwgY3VycmVudFNjb3BlLmdldFNjb3BlRGF0YSgpKTtcbiAgcmV0dXJuIHNjb3BlRGF0YTtcbn1cblxuZnVuY3Rpb24gX2dldEJ1ZmZlck1hcCgpIHtcbiAgLy8gVGhlIHJlZmVyZW5jZSB0byB0aGUgQ2xpZW50IDw+IExvZ0J1ZmZlciBtYXAgaXMgc3RvcmVkIG9uIHRoZSBjYXJyaWVyIHRvIGVuc3VyZSBpdCdzIGFsd2F5cyB0aGUgc2FtZVxuICByZXR1cm4gZ2V0R2xvYmFsU2luZ2xldG9uKCdjbGllbnRUb0xvZ0J1ZmZlck1hcCcsICgpID0+IG5ldyBXZWFrTWFwKCkpO1xufVxuXG5leHBvcnQgeyBfSU5URVJOQUxfY2FwdHVyZUxvZywgX0lOVEVSTkFMX2NhcHR1cmVTZXJpYWxpemVkTG9nLCBfSU5URVJOQUxfZmx1c2hMb2dzQnVmZmVyLCBfSU5URVJOQUxfZ2V0TG9nQnVmZmVyLCBsb2dBdHRyaWJ1dGVUb1NlcmlhbGl6ZWRMb2dBdHRyaWJ1dGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4cG9ydHMuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/logs/exports.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/metadata.js":
/*!************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/metadata.js ***!
  \************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addMetadataToStackFrames: () => (/* binding */ addMetadataToStackFrames),\n/* harmony export */   getMetadataForUrl: () => (/* binding */ getMetadataForUrl),\n/* harmony export */   stripMetadataFromStackFrames: () => (/* binding */ stripMetadataFromStackFrames)\n/* harmony export */ });\n/* harmony import */ var _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n\n\n/** Keys are source filename/url, values are metadata objects. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst filenameMetadataMap = new Map();\n/** Set of stack strings that have already been parsed. */\nconst parsedStacks = new Set();\n\nfunction ensureMetadataStacksAreParsed(parser) {\n  if (!_utils_worldwide_js__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ._sentryModuleMetadata) {\n    return;\n  }\n\n  for (const stack of Object.keys(_utils_worldwide_js__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ._sentryModuleMetadata)) {\n    const metadata = _utils_worldwide_js__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ._sentryModuleMetadata[stack];\n\n    if (parsedStacks.has(stack)) {\n      continue;\n    }\n\n    // Ensure this stack doesn't get parsed again\n    parsedStacks.add(stack);\n\n    const frames = parser(stack);\n\n    // Go through the frames starting from the top of the stack and find the first one with a filename\n    for (const frame of frames.reverse()) {\n      if (frame.filename) {\n        // Save the metadata for this filename\n        filenameMetadataMap.set(frame.filename, metadata);\n        break;\n      }\n    }\n  }\n}\n\n/**\n * Retrieve metadata for a specific JavaScript file URL.\n *\n * Metadata is injected by the Sentry bundler plugins using the `_experiments.moduleMetadata` config option.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getMetadataForUrl(parser, filename) {\n  ensureMetadataStacksAreParsed(parser);\n  return filenameMetadataMap.get(filename);\n}\n\n/**\n * Adds metadata to stack frames.\n *\n * Metadata is injected by the Sentry bundler plugins using the `_experiments.moduleMetadata` config option.\n */\nfunction addMetadataToStackFrames(parser, event) {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception.values.forEach(exception => {\n      if (!exception.stacktrace) {\n        return;\n      }\n\n      for (const frame of exception.stacktrace.frames || []) {\n        if (!frame.filename || frame.module_metadata) {\n          continue;\n        }\n\n        const metadata = getMetadataForUrl(parser, frame.filename);\n\n        if (metadata) {\n          frame.module_metadata = metadata;\n        }\n      }\n    });\n  } catch {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n}\n\n/**\n * Strips metadata from stack frames.\n */\nfunction stripMetadataFromStackFrames(event) {\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    event.exception.values.forEach(exception => {\n      if (!exception.stacktrace) {\n        return;\n      }\n\n      for (const frame of exception.stacktrace.frames || []) {\n        delete frame.module_metadata;\n      }\n    });\n  } catch {\n    // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n  }\n}\n\n\n//# sourceMappingURL=metadata.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL21ldGFkYXRhLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0Q7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPLDJEQUFVO0FBQ2pCO0FBQ0E7O0FBRUEsa0NBQWtDLDJEQUFVO0FBQzVDLHFCQUFxQiwyREFBVTs7QUFFL0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRXFGO0FBQ3JGIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vbWV0YWRhdGEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR0xPQkFMX09CSiB9IGZyb20gJy4vdXRpbHMvd29ybGR3aWRlLmpzJztcblxuLyoqIEtleXMgYXJlIHNvdXJjZSBmaWxlbmFtZS91cmwsIHZhbHVlcyBhcmUgbWV0YWRhdGEgb2JqZWN0cy4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5jb25zdCBmaWxlbmFtZU1ldGFkYXRhTWFwID0gbmV3IE1hcCgpO1xuLyoqIFNldCBvZiBzdGFjayBzdHJpbmdzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gcGFyc2VkLiAqL1xuY29uc3QgcGFyc2VkU3RhY2tzID0gbmV3IFNldCgpO1xuXG5mdW5jdGlvbiBlbnN1cmVNZXRhZGF0YVN0YWNrc0FyZVBhcnNlZChwYXJzZXIpIHtcbiAgaWYgKCFHTE9CQUxfT0JKLl9zZW50cnlNb2R1bGVNZXRhZGF0YSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3Qgc3RhY2sgb2YgT2JqZWN0LmtleXMoR0xPQkFMX09CSi5fc2VudHJ5TW9kdWxlTWV0YWRhdGEpKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBHTE9CQUxfT0JKLl9zZW50cnlNb2R1bGVNZXRhZGF0YVtzdGFja107XG5cbiAgICBpZiAocGFyc2VkU3RhY2tzLmhhcyhzdGFjaykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSB0aGlzIHN0YWNrIGRvZXNuJ3QgZ2V0IHBhcnNlZCBhZ2FpblxuICAgIHBhcnNlZFN0YWNrcy5hZGQoc3RhY2spO1xuXG4gICAgY29uc3QgZnJhbWVzID0gcGFyc2VyKHN0YWNrKTtcblxuICAgIC8vIEdvIHRocm91Z2ggdGhlIGZyYW1lcyBzdGFydGluZyBmcm9tIHRoZSB0b3Agb2YgdGhlIHN0YWNrIGFuZCBmaW5kIHRoZSBmaXJzdCBvbmUgd2l0aCBhIGZpbGVuYW1lXG4gICAgZm9yIChjb25zdCBmcmFtZSBvZiBmcmFtZXMucmV2ZXJzZSgpKSB7XG4gICAgICBpZiAoZnJhbWUuZmlsZW5hbWUpIHtcbiAgICAgICAgLy8gU2F2ZSB0aGUgbWV0YWRhdGEgZm9yIHRoaXMgZmlsZW5hbWVcbiAgICAgICAgZmlsZW5hbWVNZXRhZGF0YU1hcC5zZXQoZnJhbWUuZmlsZW5hbWUsIG1ldGFkYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmV0cmlldmUgbWV0YWRhdGEgZm9yIGEgc3BlY2lmaWMgSmF2YVNjcmlwdCBmaWxlIFVSTC5cbiAqXG4gKiBNZXRhZGF0YSBpcyBpbmplY3RlZCBieSB0aGUgU2VudHJ5IGJ1bmRsZXIgcGx1Z2lucyB1c2luZyB0aGUgYF9leHBlcmltZW50cy5tb2R1bGVNZXRhZGF0YWAgY29uZmlnIG9wdGlvbi5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIGdldE1ldGFkYXRhRm9yVXJsKHBhcnNlciwgZmlsZW5hbWUpIHtcbiAgZW5zdXJlTWV0YWRhdGFTdGFja3NBcmVQYXJzZWQocGFyc2VyKTtcbiAgcmV0dXJuIGZpbGVuYW1lTWV0YWRhdGFNYXAuZ2V0KGZpbGVuYW1lKTtcbn1cblxuLyoqXG4gKiBBZGRzIG1ldGFkYXRhIHRvIHN0YWNrIGZyYW1lcy5cbiAqXG4gKiBNZXRhZGF0YSBpcyBpbmplY3RlZCBieSB0aGUgU2VudHJ5IGJ1bmRsZXIgcGx1Z2lucyB1c2luZyB0aGUgYF9leHBlcmltZW50cy5tb2R1bGVNZXRhZGF0YWAgY29uZmlnIG9wdGlvbi5cbiAqL1xuZnVuY3Rpb24gYWRkTWV0YWRhdGFUb1N0YWNrRnJhbWVzKHBhcnNlciwgZXZlbnQpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMuZm9yRWFjaChleGNlcHRpb24gPT4ge1xuICAgICAgaWYgKCFleGNlcHRpb24uc3RhY2t0cmFjZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZnJhbWUgb2YgZXhjZXB0aW9uLnN0YWNrdHJhY2UuZnJhbWVzIHx8IFtdKSB7XG4gICAgICAgIGlmICghZnJhbWUuZmlsZW5hbWUgfHwgZnJhbWUubW9kdWxlX21ldGFkYXRhKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IGdldE1ldGFkYXRhRm9yVXJsKHBhcnNlciwgZnJhbWUuZmlsZW5hbWUpO1xuXG4gICAgICAgIGlmIChtZXRhZGF0YSkge1xuICAgICAgICAgIGZyYW1lLm1vZHVsZV9tZXRhZGF0YSA9IG1ldGFkYXRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIFRvIHNhdmUgYnVuZGxlIHNpemUgd2UncmUganVzdCB0cnkgY2F0Y2hpbmcgaGVyZSBpbnN0ZWFkIG9mIGNoZWNraW5nIGZvciB0aGUgZXhpc3RlbmNlIG9mIGFsbCB0aGUgZGlmZmVyZW50IG9iamVjdHMuXG4gIH1cbn1cblxuLyoqXG4gKiBTdHJpcHMgbWV0YWRhdGEgZnJvbSBzdGFjayBmcmFtZXMuXG4gKi9cbmZ1bmN0aW9uIHN0cmlwTWV0YWRhdGFGcm9tU3RhY2tGcmFtZXMoZXZlbnQpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMuZm9yRWFjaChleGNlcHRpb24gPT4ge1xuICAgICAgaWYgKCFleGNlcHRpb24uc3RhY2t0cmFjZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZnJhbWUgb2YgZXhjZXB0aW9uLnN0YWNrdHJhY2UuZnJhbWVzIHx8IFtdKSB7XG4gICAgICAgIGRlbGV0ZSBmcmFtZS5tb2R1bGVfbWV0YWRhdGE7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIFRvIHNhdmUgYnVuZGxlIHNpemUgd2UncmUganVzdCB0cnkgY2F0Y2hpbmcgaGVyZSBpbnN0ZWFkIG9mIGNoZWNraW5nIGZvciB0aGUgZXhpc3RlbmNlIG9mIGFsbCB0aGUgZGlmZmVyZW50IG9iamVjdHMuXG4gIH1cbn1cblxuZXhwb3J0IHsgYWRkTWV0YWRhdGFUb1N0YWNrRnJhbWVzLCBnZXRNZXRhZGF0YUZvclVybCwgc3RyaXBNZXRhZGF0YUZyb21TdGFja0ZyYW1lcyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWV0YWRhdGEuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/metadata.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/profiling.js":
/*!*************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/profiling.js ***!
  \*************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   profiler: () => (/* binding */ profiler)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n\n\n\n\nfunction isProfilingIntegrationWithProfiler(\n  integration,\n) {\n  return (\n    !!integration &&\n    typeof integration['_profiler'] !== 'undefined' &&\n    typeof integration['_profiler']['start'] === 'function' &&\n    typeof integration['_profiler']['stop'] === 'function'\n  );\n}\n/**\n * Starts the Sentry continuous profiler.\n * This mode is exclusive with the transaction profiler and will only work if the profilesSampleRate is set to a falsy value.\n * In continuous profiling mode, the profiler will keep reporting profile chunks to Sentry until it is stopped, which allows for continuous profiling of the application.\n */\nfunction startProfiler() {\n  const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  if (!client) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.warn('No Sentry client available, profiling is not started');\n    return;\n  }\n\n  const integration = client.getIntegrationByName('ProfilingIntegration');\n\n  if (!integration) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.warn('ProfilingIntegration is not available');\n    return;\n  }\n\n  if (!isProfilingIntegrationWithProfiler(integration)) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.warn('Profiler is not available on profiling integration.');\n    return;\n  }\n\n  integration._profiler.start();\n}\n\n/**\n * Stops the Sentry continuous profiler.\n * Calls to stop will stop the profiler and flush the currently collected profile data to Sentry.\n */\nfunction stopProfiler() {\n  const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  if (!client) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.warn('No Sentry client available, profiling is not started');\n    return;\n  }\n\n  const integration = client.getIntegrationByName('ProfilingIntegration');\n  if (!integration) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.warn('ProfilingIntegration is not available');\n    return;\n  }\n\n  if (!isProfilingIntegrationWithProfiler(integration)) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.warn('Profiler is not available on profiling integration.');\n    return;\n  }\n\n  integration._profiler.stop();\n}\n\nconst profiler = {\n  startProfiler,\n  stopProfiler,\n};\n\n\n//# sourceMappingURL=profiling.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3Byb2ZpbGluZy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQStDO0FBQ0E7QUFDQzs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsNERBQVM7QUFDMUI7QUFDQSxJQUFJLHdEQUFXLElBQUkseURBQUs7QUFDeEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLElBQUksd0RBQVcsSUFBSSx5REFBSztBQUN4QjtBQUNBOztBQUVBO0FBQ0EsSUFBSSx3REFBVyxJQUFJLHlEQUFLO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDREQUFTO0FBQzFCO0FBQ0EsSUFBSSx3REFBVyxJQUFJLHlEQUFLO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksd0RBQVcsSUFBSSx5REFBSztBQUN4QjtBQUNBOztBQUVBO0FBQ0EsSUFBSSx3REFBVyxJQUFJLHlEQUFLO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFb0I7QUFDcEIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9wcm9maWxpbmcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0Q2xpZW50IH0gZnJvbSAnLi9jdXJyZW50U2NvcGVzLmpzJztcbmltcG9ydCB7IERFQlVHX0JVSUxEIH0gZnJvbSAnLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4vdXRpbHMvZGVidWctbG9nZ2VyLmpzJztcblxuZnVuY3Rpb24gaXNQcm9maWxpbmdJbnRlZ3JhdGlvbldpdGhQcm9maWxlcihcbiAgaW50ZWdyYXRpb24sXG4pIHtcbiAgcmV0dXJuIChcbiAgICAhIWludGVncmF0aW9uICYmXG4gICAgdHlwZW9mIGludGVncmF0aW9uWydfcHJvZmlsZXInXSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgaW50ZWdyYXRpb25bJ19wcm9maWxlciddWydzdGFydCddID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIGludGVncmF0aW9uWydfcHJvZmlsZXInXVsnc3RvcCddID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG4vKipcbiAqIFN0YXJ0cyB0aGUgU2VudHJ5IGNvbnRpbnVvdXMgcHJvZmlsZXIuXG4gKiBUaGlzIG1vZGUgaXMgZXhjbHVzaXZlIHdpdGggdGhlIHRyYW5zYWN0aW9uIHByb2ZpbGVyIGFuZCB3aWxsIG9ubHkgd29yayBpZiB0aGUgcHJvZmlsZXNTYW1wbGVSYXRlIGlzIHNldCB0byBhIGZhbHN5IHZhbHVlLlxuICogSW4gY29udGludW91cyBwcm9maWxpbmcgbW9kZSwgdGhlIHByb2ZpbGVyIHdpbGwga2VlcCByZXBvcnRpbmcgcHJvZmlsZSBjaHVua3MgdG8gU2VudHJ5IHVudGlsIGl0IGlzIHN0b3BwZWQsIHdoaWNoIGFsbG93cyBmb3IgY29udGludW91cyBwcm9maWxpbmcgb2YgdGhlIGFwcGxpY2F0aW9uLlxuICovXG5mdW5jdGlvbiBzdGFydFByb2ZpbGVyKCkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcbiAgaWYgKCFjbGllbnQpIHtcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy53YXJuKCdObyBTZW50cnkgY2xpZW50IGF2YWlsYWJsZSwgcHJvZmlsaW5nIGlzIG5vdCBzdGFydGVkJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaW50ZWdyYXRpb24gPSBjbGllbnQuZ2V0SW50ZWdyYXRpb25CeU5hbWUoJ1Byb2ZpbGluZ0ludGVncmF0aW9uJyk7XG5cbiAgaWYgKCFpbnRlZ3JhdGlvbikge1xuICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLndhcm4oJ1Byb2ZpbGluZ0ludGVncmF0aW9uIGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWlzUHJvZmlsaW5nSW50ZWdyYXRpb25XaXRoUHJvZmlsZXIoaW50ZWdyYXRpb24pKSB7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcud2FybignUHJvZmlsZXIgaXMgbm90IGF2YWlsYWJsZSBvbiBwcm9maWxpbmcgaW50ZWdyYXRpb24uJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaW50ZWdyYXRpb24uX3Byb2ZpbGVyLnN0YXJ0KCk7XG59XG5cbi8qKlxuICogU3RvcHMgdGhlIFNlbnRyeSBjb250aW51b3VzIHByb2ZpbGVyLlxuICogQ2FsbHMgdG8gc3RvcCB3aWxsIHN0b3AgdGhlIHByb2ZpbGVyIGFuZCBmbHVzaCB0aGUgY3VycmVudGx5IGNvbGxlY3RlZCBwcm9maWxlIGRhdGEgdG8gU2VudHJ5LlxuICovXG5mdW5jdGlvbiBzdG9wUHJvZmlsZXIoKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuICBpZiAoIWNsaWVudCkge1xuICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLndhcm4oJ05vIFNlbnRyeSBjbGllbnQgYXZhaWxhYmxlLCBwcm9maWxpbmcgaXMgbm90IHN0YXJ0ZWQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBpbnRlZ3JhdGlvbiA9IGNsaWVudC5nZXRJbnRlZ3JhdGlvbkJ5TmFtZSgnUHJvZmlsaW5nSW50ZWdyYXRpb24nKTtcbiAgaWYgKCFpbnRlZ3JhdGlvbikge1xuICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLndhcm4oJ1Byb2ZpbGluZ0ludGVncmF0aW9uIGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWlzUHJvZmlsaW5nSW50ZWdyYXRpb25XaXRoUHJvZmlsZXIoaW50ZWdyYXRpb24pKSB7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcud2FybignUHJvZmlsZXIgaXMgbm90IGF2YWlsYWJsZSBvbiBwcm9maWxpbmcgaW50ZWdyYXRpb24uJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaW50ZWdyYXRpb24uX3Byb2ZpbGVyLnN0b3AoKTtcbn1cblxuY29uc3QgcHJvZmlsZXIgPSB7XG4gIHN0YXJ0UHJvZmlsZXIsXG4gIHN0b3BQcm9maWxlcixcbn07XG5cbmV4cG9ydCB7IHByb2ZpbGVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm9maWxpbmcuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/profiling.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/scope.js":
/*!*********************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/scope.js ***!
  \*********************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Scope: () => (/* binding */ Scope)\n/* harmony export */ });\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _session_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./session.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/session.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_is_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n/* harmony import */ var _utils_merge_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/merge.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/merge.js\");\n/* harmony import */ var _utils_misc_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/misc.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/misc.js\");\n/* harmony import */ var _utils_propagationContext_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/propagationContext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/propagationContext.js\");\n/* harmony import */ var _utils_spanOnScope_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/spanOnScope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanOnScope.js\");\n/* harmony import */ var _utils_string_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/string.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/string.js\");\n/* harmony import */ var _utils_time_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils/time.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/time.js\");\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * A context to be used for capturing an event.\n * This can either be a Scope, or a partial ScopeContext,\n * or a callback that receives the current scope and returns a new scope to use.\n */\n\n/**\n * Holds additional event information.\n */\nclass Scope {\n  /** Flag if notifying is happening. */\n\n  /** Callback for client to receive scope changes. */\n\n  /** Callback list that will be called during event processing. */\n\n  /** Array of breadcrumbs. */\n\n  /** User */\n\n  /** Tags */\n\n  /** Extra */\n\n  /** Contexts */\n\n  /** Attachments */\n\n  /** Propagation Context for distributed tracing */\n\n  /**\n   * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n   * sent to Sentry\n   */\n\n  /** Fingerprint */\n\n  /** Severity */\n\n  /**\n   * Transaction Name\n   *\n   * IMPORTANT: The transaction name on the scope has nothing to do with root spans/transaction objects.\n   * It's purpose is to assign a transaction to the scope that's added to non-transaction events.\n   */\n\n  /** Session */\n\n  /** The client on this scope */\n\n  /** Contains the last event id of a captured event.  */\n\n  // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n   constructor() {\n    this._notifyingListeners = false;\n    this._scopeListeners = [];\n    this._eventProcessors = [];\n    this._breadcrumbs = [];\n    this._attachments = [];\n    this._user = {};\n    this._tags = {};\n    this._extra = {};\n    this._contexts = {};\n    this._sdkProcessingMetadata = {};\n    this._propagationContext = {\n      traceId: (0,_utils_propagationContext_js__WEBPACK_IMPORTED_MODULE_6__.generateTraceId)(),\n      sampleRand: Math.random(),\n    };\n  }\n\n  /**\n   * Clone all data from this scope into a new scope.\n   */\n   clone() {\n    const newScope = new Scope();\n    newScope._breadcrumbs = [...this._breadcrumbs];\n    newScope._tags = { ...this._tags };\n    newScope._extra = { ...this._extra };\n    newScope._contexts = { ...this._contexts };\n    if (this._contexts.flags) {\n      // We need to copy the `values` array so insertions on a cloned scope\n      // won't affect the original array.\n      newScope._contexts.flags = {\n        values: [...this._contexts.flags.values],\n      };\n    }\n\n    newScope._user = this._user;\n    newScope._level = this._level;\n    newScope._session = this._session;\n    newScope._transactionName = this._transactionName;\n    newScope._fingerprint = this._fingerprint;\n    newScope._eventProcessors = [...this._eventProcessors];\n    newScope._attachments = [...this._attachments];\n    newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n    newScope._propagationContext = { ...this._propagationContext };\n    newScope._client = this._client;\n    newScope._lastEventId = this._lastEventId;\n\n    (0,_utils_spanOnScope_js__WEBPACK_IMPORTED_MODULE_7__._setSpanForScope)(newScope, (0,_utils_spanOnScope_js__WEBPACK_IMPORTED_MODULE_7__._getSpanForScope)(this));\n\n    return newScope;\n  }\n\n  /**\n   * Update the client assigned to this scope.\n   * Note that not every scope will have a client assigned - isolation scopes & the global scope will generally not have a client,\n   * as well as manually created scopes.\n   */\n   setClient(client) {\n    this._client = client;\n  }\n\n  /**\n   * Set the ID of the last captured error event.\n   * This is generally only captured on the isolation scope.\n   */\n   setLastEventId(lastEventId) {\n    this._lastEventId = lastEventId;\n  }\n\n  /**\n   * Get the client assigned to this scope.\n   */\n   getClient() {\n    return this._client ;\n  }\n\n  /**\n   * Get the ID of the last captured error event.\n   * This is generally only available on the isolation scope.\n   */\n   lastEventId() {\n    return this._lastEventId;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   addScopeListener(callback) {\n    this._scopeListeners.push(callback);\n  }\n\n  /**\n   * Add an event processor that will be called before an event is sent.\n   */\n   addEventProcessor(callback) {\n    this._eventProcessors.push(callback);\n    return this;\n  }\n\n  /**\n   * Set the user for this scope.\n   * Set to `null` to unset the user.\n   */\n   setUser(user) {\n    // If null is passed we want to unset everything, but still define keys,\n    // so that later down in the pipeline any existing values are cleared.\n    this._user = user || {\n      email: undefined,\n      id: undefined,\n      ip_address: undefined,\n      username: undefined,\n    };\n\n    if (this._session) {\n      (0,_session_js__WEBPACK_IMPORTED_MODULE_1__.updateSession)(this._session, { user });\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Get the user from this scope.\n   */\n   getUser() {\n    return this._user;\n  }\n\n  /**\n   * Set an object that will be merged into existing tags on the scope,\n   * and will be sent as tags data with the event.\n   */\n   setTags(tags) {\n    this._tags = {\n      ...this._tags,\n      ...tags,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Set a single tag that will be sent as tags data with the event.\n   */\n   setTag(key, value) {\n    this._tags = { ...this._tags, [key]: value };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Set an object that will be merged into existing extra on the scope,\n   * and will be sent as extra data with the event.\n   */\n   setExtras(extras) {\n    this._extra = {\n      ...this._extra,\n      ...extras,\n    };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Set a single key:value extra entry that will be sent as extra data with the event.\n   */\n   setExtra(key, extra) {\n    this._extra = { ...this._extra, [key]: extra };\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets the fingerprint on the scope to send with the events.\n   * @param {string[]} fingerprint Fingerprint to group events in Sentry.\n   */\n   setFingerprint(fingerprint) {\n    this._fingerprint = fingerprint;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets the level on the scope for future events.\n   */\n   setLevel(level) {\n    this._level = level;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets the transaction name on the scope so that the name of e.g. taken server route or\n   * the page location is attached to future events.\n   *\n   * IMPORTANT: Calling this function does NOT change the name of the currently active\n   * root span. If you want to change the name of the active root span, use\n   * `Sentry.updateSpanName(rootSpan, 'new name')` instead.\n   *\n   * By default, the SDK updates the scope's transaction name automatically on sensible\n   * occasions, such as a page navigation or when handling a new request on the server.\n   */\n   setTransactionName(name) {\n    this._transactionName = name;\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Sets context data with the given name.\n   * Data passed as context will be normalized. You can also pass `null` to unset the context.\n   * Note that context data will not be merged - calling `setContext` will overwrite an existing context with the same key.\n   */\n   setContext(key, context) {\n    if (context === null) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._contexts[key];\n    } else {\n      this._contexts[key] = context;\n    }\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Set the session for the scope.\n   */\n   setSession(session) {\n    if (!session) {\n      delete this._session;\n    } else {\n      this._session = session;\n    }\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Get the session from the scope.\n   */\n   getSession() {\n    return this._session;\n  }\n\n  /**\n   * Updates the scope with provided data. Can work in three variations:\n   * - plain object containing updatable attributes\n   * - Scope instance that'll extract the attributes from\n   * - callback function that'll receive the current scope as an argument and allow for modifications\n   */\n   update(captureContext) {\n    if (!captureContext) {\n      return this;\n    }\n\n    const scopeToMerge = typeof captureContext === 'function' ? captureContext(this) : captureContext;\n\n    const scopeInstance =\n      scopeToMerge instanceof Scope\n        ? scopeToMerge.getScopeData()\n        : (0,_utils_is_js__WEBPACK_IMPORTED_MODULE_3__.isPlainObject)(scopeToMerge)\n          ? (captureContext )\n          : undefined;\n\n    const { tags, extra, user, contexts, level, fingerprint = [], propagationContext } = scopeInstance || {};\n\n    this._tags = { ...this._tags, ...tags };\n    this._extra = { ...this._extra, ...extra };\n    this._contexts = { ...this._contexts, ...contexts };\n\n    if (user && Object.keys(user).length) {\n      this._user = user;\n    }\n\n    if (level) {\n      this._level = level;\n    }\n\n    if (fingerprint.length) {\n      this._fingerprint = fingerprint;\n    }\n\n    if (propagationContext) {\n      this._propagationContext = propagationContext;\n    }\n\n    return this;\n  }\n\n  /**\n   * Clears the current scope and resets its properties.\n   * Note: The client will not be cleared.\n   */\n   clear() {\n    // client is not cleared here on purpose!\n    this._breadcrumbs = [];\n    this._tags = {};\n    this._extra = {};\n    this._user = {};\n    this._contexts = {};\n    this._level = undefined;\n    this._transactionName = undefined;\n    this._fingerprint = undefined;\n    this._session = undefined;\n    (0,_utils_spanOnScope_js__WEBPACK_IMPORTED_MODULE_7__._setSpanForScope)(this, undefined);\n    this._attachments = [];\n    this.setPropagationContext({ traceId: (0,_utils_propagationContext_js__WEBPACK_IMPORTED_MODULE_6__.generateTraceId)(), sampleRand: Math.random() });\n\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Adds a breadcrumb to the scope.\n   * By default, the last 100 breadcrumbs are kept.\n   */\n   addBreadcrumb(breadcrumb, maxBreadcrumbs) {\n    const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n    // No data has been changed, so don't notify scope listeners\n    if (maxCrumbs <= 0) {\n      return this;\n    }\n\n    const mergedBreadcrumb = {\n      timestamp: (0,_utils_time_js__WEBPACK_IMPORTED_MODULE_9__.dateTimestampInSeconds)(),\n      ...breadcrumb,\n      // Breadcrumb messages can theoretically be infinitely large and they're held in memory so we truncate them not to leak (too much) memory\n      message: breadcrumb.message ? (0,_utils_string_js__WEBPACK_IMPORTED_MODULE_8__.truncate)(breadcrumb.message, 2048) : breadcrumb.message,\n    };\n\n    this._breadcrumbs.push(mergedBreadcrumb);\n    if (this._breadcrumbs.length > maxCrumbs) {\n      this._breadcrumbs = this._breadcrumbs.slice(-maxCrumbs);\n      this._client?.recordDroppedEvent('buffer_overflow', 'log_item');\n    }\n\n    this._notifyScopeListeners();\n\n    return this;\n  }\n\n  /**\n   * Get the last breadcrumb of the scope.\n   */\n   getLastBreadcrumb() {\n    return this._breadcrumbs[this._breadcrumbs.length - 1];\n  }\n\n  /**\n   * Clear all breadcrumbs from the scope.\n   */\n   clearBreadcrumbs() {\n    this._breadcrumbs = [];\n    this._notifyScopeListeners();\n    return this;\n  }\n\n  /**\n   * Add an attachment to the scope.\n   */\n   addAttachment(attachment) {\n    this._attachments.push(attachment);\n    return this;\n  }\n\n  /**\n   * Clear all attachments from the scope.\n   */\n   clearAttachments() {\n    this._attachments = [];\n    return this;\n  }\n\n  /**\n   * Get the data of this scope, which should be applied to an event during processing.\n   */\n   getScopeData() {\n    return {\n      breadcrumbs: this._breadcrumbs,\n      attachments: this._attachments,\n      contexts: this._contexts,\n      tags: this._tags,\n      extra: this._extra,\n      user: this._user,\n      level: this._level,\n      fingerprint: this._fingerprint || [],\n      eventProcessors: this._eventProcessors,\n      propagationContext: this._propagationContext,\n      sdkProcessingMetadata: this._sdkProcessingMetadata,\n      transactionName: this._transactionName,\n      span: (0,_utils_spanOnScope_js__WEBPACK_IMPORTED_MODULE_7__._getSpanForScope)(this),\n    };\n  }\n\n  /**\n   * Add data which will be accessible during event processing but won't get sent to Sentry.\n   */\n   setSDKProcessingMetadata(newData) {\n    this._sdkProcessingMetadata = (0,_utils_merge_js__WEBPACK_IMPORTED_MODULE_4__.merge)(this._sdkProcessingMetadata, newData, 2);\n    return this;\n  }\n\n  /**\n   * Add propagation context to the scope, used for distributed tracing\n   */\n   setPropagationContext(context) {\n    this._propagationContext = context;\n    return this;\n  }\n\n  /**\n   * Get propagation context from the scope, used for distributed tracing\n   */\n   getPropagationContext() {\n    return this._propagationContext;\n  }\n\n  /**\n   * Capture an exception for this scope.\n   *\n   * @returns {string} The id of the captured Sentry event.\n   */\n   captureException(exception, hint) {\n    const eventId = hint?.event_id || (0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_5__.uuid4)();\n\n    if (!this._client) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.warn('No client configured on scope - will not capture exception!');\n      return eventId;\n    }\n\n    const syntheticException = new Error('Sentry syntheticException');\n\n    this._client.captureException(\n      exception,\n      {\n        originalException: exception,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * Capture a message for this scope.\n   *\n   * @returns {string} The id of the captured message.\n   */\n   captureMessage(message, level, hint) {\n    const eventId = hint?.event_id || (0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_5__.uuid4)();\n\n    if (!this._client) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.warn('No client configured on scope - will not capture message!');\n      return eventId;\n    }\n\n    const syntheticException = new Error(message);\n\n    this._client.captureMessage(\n      message,\n      level,\n      {\n        originalException: message,\n        syntheticException,\n        ...hint,\n        event_id: eventId,\n      },\n      this,\n    );\n\n    return eventId;\n  }\n\n  /**\n   * Capture a Sentry event for this scope.\n   *\n   * @returns {string} The id of the captured event.\n   */\n   captureEvent(event, hint) {\n    const eventId = hint?.event_id || (0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_5__.uuid4)();\n\n    if (!this._client) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.warn('No client configured on scope - will not capture event!');\n      return eventId;\n    }\n\n    this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n    return eventId;\n  }\n\n  /**\n   * This will be called on every set call.\n   */\n   _notifyScopeListeners() {\n    // We need this check for this._notifyingListeners to be able to work on scope during updates\n    // If this check is not here we'll produce endless recursion when something is done with the scope\n    // during the callback.\n    if (!this._notifyingListeners) {\n      this._notifyingListeners = true;\n      this._scopeListeners.forEach(callback => {\n        callback(this);\n      });\n      this._notifyingListeners = false;\n    }\n  }\n}\n\n\n//# sourceMappingURL=scope.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3Njb3BlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQStDO0FBQ0Y7QUFDRztBQUNGO0FBQ0w7QUFDRDtBQUN3QjtBQUNZO0FBQy9CO0FBQ1k7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSw2RUFBZTtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLHdCQUF3QjtBQUN4QiwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEMscUNBQXFDO0FBQ3JDO0FBQ0E7O0FBRUEsSUFBSSx1RUFBZ0IsV0FBVyx1RUFBZ0I7O0FBRS9DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSwwREFBYSxrQkFBa0IsTUFBTTtBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxVQUFVO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVSwyREFBYTtBQUN2QjtBQUNBOztBQUVBLFlBQVksMkVBQTJFOztBQUV2RixtQkFBbUI7QUFDbkIsb0JBQW9CO0FBQ3BCLHVCQUF1Qjs7QUFFdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSx1RUFBZ0I7QUFDcEI7QUFDQSxpQ0FBaUMsU0FBUyw2RUFBZSwrQkFBK0I7O0FBRXhGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsc0VBQXNCO0FBQ3ZDO0FBQ0E7QUFDQSxvQ0FBb0MsMERBQVE7QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHVFQUFnQjtBQUM1QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHNEQUFLO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0Esc0NBQXNDLHFEQUFLOztBQUUzQztBQUNBLE1BQU0sd0RBQVcsSUFBSSx5REFBSztBQUMxQjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBLHNDQUFzQyxxREFBSzs7QUFFM0M7QUFDQSxNQUFNLHdEQUFXLElBQUkseURBQUs7QUFDMUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBLHNDQUFzQyxxREFBSzs7QUFFM0M7QUFDQSxNQUFNLHdEQUFXLElBQUkseURBQUs7QUFDMUI7QUFDQTs7QUFFQSx1Q0FBdUMsNEJBQTRCOztBQUVuRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRWlCO0FBQ2pCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vc2NvcGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuL2RlYnVnLWJ1aWxkLmpzJztcbmltcG9ydCB7IHVwZGF0ZVNlc3Npb24gfSBmcm9tICcuL3Nlc3Npb24uanMnO1xuaW1wb3J0IHsgZGVidWcgfSBmcm9tICcuL3V0aWxzL2RlYnVnLWxvZ2dlci5qcyc7XG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0IH0gZnJvbSAnLi91dGlscy9pcy5qcyc7XG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJy4vdXRpbHMvbWVyZ2UuanMnO1xuaW1wb3J0IHsgdXVpZDQgfSBmcm9tICcuL3V0aWxzL21pc2MuanMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVUcmFjZUlkIH0gZnJvbSAnLi91dGlscy9wcm9wYWdhdGlvbkNvbnRleHQuanMnO1xuaW1wb3J0IHsgX3NldFNwYW5Gb3JTY29wZSwgX2dldFNwYW5Gb3JTY29wZSB9IGZyb20gJy4vdXRpbHMvc3Bhbk9uU2NvcGUuanMnO1xuaW1wb3J0IHsgdHJ1bmNhdGUgfSBmcm9tICcuL3V0aWxzL3N0cmluZy5qcyc7XG5pbXBvcnQgeyBkYXRlVGltZXN0YW1wSW5TZWNvbmRzIH0gZnJvbSAnLi91dGlscy90aW1lLmpzJztcblxuLyoqXG4gKiBEZWZhdWx0IHZhbHVlIGZvciBtYXhpbXVtIG51bWJlciBvZiBicmVhZGNydW1icyBhZGRlZCB0byBhbiBldmVudC5cbiAqL1xuY29uc3QgREVGQVVMVF9NQVhfQlJFQURDUlVNQlMgPSAxMDA7XG5cbi8qKlxuICogQSBjb250ZXh0IHRvIGJlIHVzZWQgZm9yIGNhcHR1cmluZyBhbiBldmVudC5cbiAqIFRoaXMgY2FuIGVpdGhlciBiZSBhIFNjb3BlLCBvciBhIHBhcnRpYWwgU2NvcGVDb250ZXh0LFxuICogb3IgYSBjYWxsYmFjayB0aGF0IHJlY2VpdmVzIHRoZSBjdXJyZW50IHNjb3BlIGFuZCByZXR1cm5zIGEgbmV3IHNjb3BlIHRvIHVzZS5cbiAqL1xuXG4vKipcbiAqIEhvbGRzIGFkZGl0aW9uYWwgZXZlbnQgaW5mb3JtYXRpb24uXG4gKi9cbmNsYXNzIFNjb3BlIHtcbiAgLyoqIEZsYWcgaWYgbm90aWZ5aW5nIGlzIGhhcHBlbmluZy4gKi9cblxuICAvKiogQ2FsbGJhY2sgZm9yIGNsaWVudCB0byByZWNlaXZlIHNjb3BlIGNoYW5nZXMuICovXG5cbiAgLyoqIENhbGxiYWNrIGxpc3QgdGhhdCB3aWxsIGJlIGNhbGxlZCBkdXJpbmcgZXZlbnQgcHJvY2Vzc2luZy4gKi9cblxuICAvKiogQXJyYXkgb2YgYnJlYWRjcnVtYnMuICovXG5cbiAgLyoqIFVzZXIgKi9cblxuICAvKiogVGFncyAqL1xuXG4gIC8qKiBFeHRyYSAqL1xuXG4gIC8qKiBDb250ZXh0cyAqL1xuXG4gIC8qKiBBdHRhY2htZW50cyAqL1xuXG4gIC8qKiBQcm9wYWdhdGlvbiBDb250ZXh0IGZvciBkaXN0cmlidXRlZCB0cmFjaW5nICovXG5cbiAgLyoqXG4gICAqIEEgcGxhY2UgdG8gc3Rhc2ggZGF0YSB3aGljaCBpcyBuZWVkZWQgYXQgc29tZSBwb2ludCBpbiB0aGUgU0RLJ3MgZXZlbnQgcHJvY2Vzc2luZyBwaXBlbGluZSBidXQgd2hpY2ggc2hvdWxkbid0IGdldFxuICAgKiBzZW50IHRvIFNlbnRyeVxuICAgKi9cblxuICAvKiogRmluZ2VycHJpbnQgKi9cblxuICAvKiogU2V2ZXJpdHkgKi9cblxuICAvKipcbiAgICogVHJhbnNhY3Rpb24gTmFtZVxuICAgKlxuICAgKiBJTVBPUlRBTlQ6IFRoZSB0cmFuc2FjdGlvbiBuYW1lIG9uIHRoZSBzY29wZSBoYXMgbm90aGluZyB0byBkbyB3aXRoIHJvb3Qgc3BhbnMvdHJhbnNhY3Rpb24gb2JqZWN0cy5cbiAgICogSXQncyBwdXJwb3NlIGlzIHRvIGFzc2lnbiBhIHRyYW5zYWN0aW9uIHRvIHRoZSBzY29wZSB0aGF0J3MgYWRkZWQgdG8gbm9uLXRyYW5zYWN0aW9uIGV2ZW50cy5cbiAgICovXG5cbiAgLyoqIFNlc3Npb24gKi9cblxuICAvKiogVGhlIGNsaWVudCBvbiB0aGlzIHNjb3BlICovXG5cbiAgLyoqIENvbnRhaW5zIHRoZSBsYXN0IGV2ZW50IGlkIG9mIGEgY2FwdHVyZWQgZXZlbnQuICAqL1xuXG4gIC8vIE5PVEU6IEFueSBmaWVsZCB3aGljaCBnZXRzIGFkZGVkIGhlcmUgc2hvdWxkIGdldCBhZGRlZCBub3Qgb25seSB0byB0aGUgY29uc3RydWN0b3IgYnV0IGFsc28gdG8gdGhlIGBjbG9uZWAgbWV0aG9kLlxuXG4gICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9ub3RpZnlpbmdMaXN0ZW5lcnMgPSBmYWxzZTtcbiAgICB0aGlzLl9zY29wZUxpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX2V2ZW50UHJvY2Vzc29ycyA9IFtdO1xuICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gW107XG4gICAgdGhpcy5fYXR0YWNobWVudHMgPSBbXTtcbiAgICB0aGlzLl91c2VyID0ge307XG4gICAgdGhpcy5fdGFncyA9IHt9O1xuICAgIHRoaXMuX2V4dHJhID0ge307XG4gICAgdGhpcy5fY29udGV4dHMgPSB7fTtcbiAgICB0aGlzLl9zZGtQcm9jZXNzaW5nTWV0YWRhdGEgPSB7fTtcbiAgICB0aGlzLl9wcm9wYWdhdGlvbkNvbnRleHQgPSB7XG4gICAgICB0cmFjZUlkOiBnZW5lcmF0ZVRyYWNlSWQoKSxcbiAgICAgIHNhbXBsZVJhbmQ6IE1hdGgucmFuZG9tKCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9uZSBhbGwgZGF0YSBmcm9tIHRoaXMgc2NvcGUgaW50byBhIG5ldyBzY29wZS5cbiAgICovXG4gICBjbG9uZSgpIHtcbiAgICBjb25zdCBuZXdTY29wZSA9IG5ldyBTY29wZSgpO1xuICAgIG5ld1Njb3BlLl9icmVhZGNydW1icyA9IFsuLi50aGlzLl9icmVhZGNydW1ic107XG4gICAgbmV3U2NvcGUuX3RhZ3MgPSB7IC4uLnRoaXMuX3RhZ3MgfTtcbiAgICBuZXdTY29wZS5fZXh0cmEgPSB7IC4uLnRoaXMuX2V4dHJhIH07XG4gICAgbmV3U2NvcGUuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cyB9O1xuICAgIGlmICh0aGlzLl9jb250ZXh0cy5mbGFncykge1xuICAgICAgLy8gV2UgbmVlZCB0byBjb3B5IHRoZSBgdmFsdWVzYCBhcnJheSBzbyBpbnNlcnRpb25zIG9uIGEgY2xvbmVkIHNjb3BlXG4gICAgICAvLyB3b24ndCBhZmZlY3QgdGhlIG9yaWdpbmFsIGFycmF5LlxuICAgICAgbmV3U2NvcGUuX2NvbnRleHRzLmZsYWdzID0ge1xuICAgICAgICB2YWx1ZXM6IFsuLi50aGlzLl9jb250ZXh0cy5mbGFncy52YWx1ZXNdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBuZXdTY29wZS5fdXNlciA9IHRoaXMuX3VzZXI7XG4gICAgbmV3U2NvcGUuX2xldmVsID0gdGhpcy5fbGV2ZWw7XG4gICAgbmV3U2NvcGUuX3Nlc3Npb24gPSB0aGlzLl9zZXNzaW9uO1xuICAgIG5ld1Njb3BlLl90cmFuc2FjdGlvbk5hbWUgPSB0aGlzLl90cmFuc2FjdGlvbk5hbWU7XG4gICAgbmV3U2NvcGUuX2ZpbmdlcnByaW50ID0gdGhpcy5fZmluZ2VycHJpbnQ7XG4gICAgbmV3U2NvcGUuX2V2ZW50UHJvY2Vzc29ycyA9IFsuLi50aGlzLl9ldmVudFByb2Nlc3NvcnNdO1xuICAgIG5ld1Njb3BlLl9hdHRhY2htZW50cyA9IFsuLi50aGlzLl9hdHRhY2htZW50c107XG4gICAgbmV3U2NvcGUuX3Nka1Byb2Nlc3NpbmdNZXRhZGF0YSA9IHsgLi4udGhpcy5fc2RrUHJvY2Vzc2luZ01ldGFkYXRhIH07XG4gICAgbmV3U2NvcGUuX3Byb3BhZ2F0aW9uQ29udGV4dCA9IHsgLi4udGhpcy5fcHJvcGFnYXRpb25Db250ZXh0IH07XG4gICAgbmV3U2NvcGUuX2NsaWVudCA9IHRoaXMuX2NsaWVudDtcbiAgICBuZXdTY29wZS5fbGFzdEV2ZW50SWQgPSB0aGlzLl9sYXN0RXZlbnRJZDtcblxuICAgIF9zZXRTcGFuRm9yU2NvcGUobmV3U2NvcGUsIF9nZXRTcGFuRm9yU2NvcGUodGhpcykpO1xuXG4gICAgcmV0dXJuIG5ld1Njb3BlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY2xpZW50IGFzc2lnbmVkIHRvIHRoaXMgc2NvcGUuXG4gICAqIE5vdGUgdGhhdCBub3QgZXZlcnkgc2NvcGUgd2lsbCBoYXZlIGEgY2xpZW50IGFzc2lnbmVkIC0gaXNvbGF0aW9uIHNjb3BlcyAmIHRoZSBnbG9iYWwgc2NvcGUgd2lsbCBnZW5lcmFsbHkgbm90IGhhdmUgYSBjbGllbnQsXG4gICAqIGFzIHdlbGwgYXMgbWFudWFsbHkgY3JlYXRlZCBzY29wZXMuXG4gICAqL1xuICAgc2V0Q2xpZW50KGNsaWVudCkge1xuICAgIHRoaXMuX2NsaWVudCA9IGNsaWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIElEIG9mIHRoZSBsYXN0IGNhcHR1cmVkIGVycm9yIGV2ZW50LlxuICAgKiBUaGlzIGlzIGdlbmVyYWxseSBvbmx5IGNhcHR1cmVkIG9uIHRoZSBpc29sYXRpb24gc2NvcGUuXG4gICAqL1xuICAgc2V0TGFzdEV2ZW50SWQobGFzdEV2ZW50SWQpIHtcbiAgICB0aGlzLl9sYXN0RXZlbnRJZCA9IGxhc3RFdmVudElkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY2xpZW50IGFzc2lnbmVkIHRvIHRoaXMgc2NvcGUuXG4gICAqL1xuICAgZ2V0Q2xpZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jbGllbnQgO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSUQgb2YgdGhlIGxhc3QgY2FwdHVyZWQgZXJyb3IgZXZlbnQuXG4gICAqIFRoaXMgaXMgZ2VuZXJhbGx5IG9ubHkgYXZhaWxhYmxlIG9uIHRoZSBpc29sYXRpb24gc2NvcGUuXG4gICAqL1xuICAgbGFzdEV2ZW50SWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhc3RFdmVudElkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgYWRkU2NvcGVMaXN0ZW5lcihjYWxsYmFjaykge1xuICAgIHRoaXMuX3Njb3BlTGlzdGVuZXJzLnB1c2goY2FsbGJhY2spO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBldmVudCBwcm9jZXNzb3IgdGhhdCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgYW4gZXZlbnQgaXMgc2VudC5cbiAgICovXG4gICBhZGRFdmVudFByb2Nlc3NvcihjYWxsYmFjaykge1xuICAgIHRoaXMuX2V2ZW50UHJvY2Vzc29ycy5wdXNoKGNhbGxiYWNrKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHVzZXIgZm9yIHRoaXMgc2NvcGUuXG4gICAqIFNldCB0byBgbnVsbGAgdG8gdW5zZXQgdGhlIHVzZXIuXG4gICAqL1xuICAgc2V0VXNlcih1c2VyKSB7XG4gICAgLy8gSWYgbnVsbCBpcyBwYXNzZWQgd2Ugd2FudCB0byB1bnNldCBldmVyeXRoaW5nLCBidXQgc3RpbGwgZGVmaW5lIGtleXMsXG4gICAgLy8gc28gdGhhdCBsYXRlciBkb3duIGluIHRoZSBwaXBlbGluZSBhbnkgZXhpc3RpbmcgdmFsdWVzIGFyZSBjbGVhcmVkLlxuICAgIHRoaXMuX3VzZXIgPSB1c2VyIHx8IHtcbiAgICAgIGVtYWlsOiB1bmRlZmluZWQsXG4gICAgICBpZDogdW5kZWZpbmVkLFxuICAgICAgaXBfYWRkcmVzczogdW5kZWZpbmVkLFxuICAgICAgdXNlcm5hbWU6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX3Nlc3Npb24pIHtcbiAgICAgIHVwZGF0ZVNlc3Npb24odGhpcy5fc2Vzc2lvbiwgeyB1c2VyIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB1c2VyIGZyb20gdGhpcyBzY29wZS5cbiAgICovXG4gICBnZXRVc2VyKCkge1xuICAgIHJldHVybiB0aGlzLl91c2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhbiBvYmplY3QgdGhhdCB3aWxsIGJlIG1lcmdlZCBpbnRvIGV4aXN0aW5nIHRhZ3Mgb24gdGhlIHNjb3BlLFxuICAgKiBhbmQgd2lsbCBiZSBzZW50IGFzIHRhZ3MgZGF0YSB3aXRoIHRoZSBldmVudC5cbiAgICovXG4gICBzZXRUYWdzKHRhZ3MpIHtcbiAgICB0aGlzLl90YWdzID0ge1xuICAgICAgLi4udGhpcy5fdGFncyxcbiAgICAgIC4uLnRhZ3MsXG4gICAgfTtcbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIHNpbmdsZSB0YWcgdGhhdCB3aWxsIGJlIHNlbnQgYXMgdGFncyBkYXRhIHdpdGggdGhlIGV2ZW50LlxuICAgKi9cbiAgIHNldFRhZyhrZXksIHZhbHVlKSB7XG4gICAgdGhpcy5fdGFncyA9IHsgLi4udGhpcy5fdGFncywgW2tleV06IHZhbHVlIH07XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBtZXJnZWQgaW50byBleGlzdGluZyBleHRyYSBvbiB0aGUgc2NvcGUsXG4gICAqIGFuZCB3aWxsIGJlIHNlbnQgYXMgZXh0cmEgZGF0YSB3aXRoIHRoZSBldmVudC5cbiAgICovXG4gICBzZXRFeHRyYXMoZXh0cmFzKSB7XG4gICAgdGhpcy5fZXh0cmEgPSB7XG4gICAgICAuLi50aGlzLl9leHRyYSxcbiAgICAgIC4uLmV4dHJhcyxcbiAgICB9O1xuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgc2luZ2xlIGtleTp2YWx1ZSBleHRyYSBlbnRyeSB0aGF0IHdpbGwgYmUgc2VudCBhcyBleHRyYSBkYXRhIHdpdGggdGhlIGV2ZW50LlxuICAgKi9cbiAgIHNldEV4dHJhKGtleSwgZXh0cmEpIHtcbiAgICB0aGlzLl9leHRyYSA9IHsgLi4udGhpcy5fZXh0cmEsIFtrZXldOiBleHRyYSB9O1xuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZmluZ2VycHJpbnQgb24gdGhlIHNjb3BlIHRvIHNlbmQgd2l0aCB0aGUgZXZlbnRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBmaW5nZXJwcmludCBGaW5nZXJwcmludCB0byBncm91cCBldmVudHMgaW4gU2VudHJ5LlxuICAgKi9cbiAgIHNldEZpbmdlcnByaW50KGZpbmdlcnByaW50KSB7XG4gICAgdGhpcy5fZmluZ2VycHJpbnQgPSBmaW5nZXJwcmludDtcbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGxldmVsIG9uIHRoZSBzY29wZSBmb3IgZnV0dXJlIGV2ZW50cy5cbiAgICovXG4gICBzZXRMZXZlbChsZXZlbCkge1xuICAgIHRoaXMuX2xldmVsID0gbGV2ZWw7XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbiBuYW1lIG9uIHRoZSBzY29wZSBzbyB0aGF0IHRoZSBuYW1lIG9mIGUuZy4gdGFrZW4gc2VydmVyIHJvdXRlIG9yXG4gICAqIHRoZSBwYWdlIGxvY2F0aW9uIGlzIGF0dGFjaGVkIHRvIGZ1dHVyZSBldmVudHMuXG4gICAqXG4gICAqIElNUE9SVEFOVDogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGRvZXMgTk9UIGNoYW5nZSB0aGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZVxuICAgKiByb290IHNwYW4uIElmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgbmFtZSBvZiB0aGUgYWN0aXZlIHJvb3Qgc3BhbiwgdXNlXG4gICAqIGBTZW50cnkudXBkYXRlU3Bhbk5hbWUocm9vdFNwYW4sICduZXcgbmFtZScpYCBpbnN0ZWFkLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgU0RLIHVwZGF0ZXMgdGhlIHNjb3BlJ3MgdHJhbnNhY3Rpb24gbmFtZSBhdXRvbWF0aWNhbGx5IG9uIHNlbnNpYmxlXG4gICAqIG9jY2FzaW9ucywgc3VjaCBhcyBhIHBhZ2UgbmF2aWdhdGlvbiBvciB3aGVuIGhhbmRsaW5nIGEgbmV3IHJlcXVlc3Qgb24gdGhlIHNlcnZlci5cbiAgICovXG4gICBzZXRUcmFuc2FjdGlvbk5hbWUobmFtZSkge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uTmFtZSA9IG5hbWU7XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGNvbnRleHQgZGF0YSB3aXRoIHRoZSBnaXZlbiBuYW1lLlxuICAgKiBEYXRhIHBhc3NlZCBhcyBjb250ZXh0IHdpbGwgYmUgbm9ybWFsaXplZC4gWW91IGNhbiBhbHNvIHBhc3MgYG51bGxgIHRvIHVuc2V0IHRoZSBjb250ZXh0LlxuICAgKiBOb3RlIHRoYXQgY29udGV4dCBkYXRhIHdpbGwgbm90IGJlIG1lcmdlZCAtIGNhbGxpbmcgYHNldENvbnRleHRgIHdpbGwgb3ZlcndyaXRlIGFuIGV4aXN0aW5nIGNvbnRleHQgd2l0aCB0aGUgc2FtZSBrZXkuXG4gICAqL1xuICAgc2V0Q29udGV4dChrZXksIGNvbnRleHQpIHtcbiAgICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxuICAgICAgZGVsZXRlIHRoaXMuX2NvbnRleHRzW2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NvbnRleHRzW2tleV0gPSBjb250ZXh0O1xuICAgIH1cblxuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzZXNzaW9uIGZvciB0aGUgc2NvcGUuXG4gICAqL1xuICAgc2V0U2Vzc2lvbihzZXNzaW9uKSB7XG4gICAgaWYgKCFzZXNzaW9uKSB7XG4gICAgICBkZWxldGUgdGhpcy5fc2Vzc2lvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2Vzc2lvbiA9IHNlc3Npb247XG4gICAgfVxuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzZXNzaW9uIGZyb20gdGhlIHNjb3BlLlxuICAgKi9cbiAgIGdldFNlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb247XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgc2NvcGUgd2l0aCBwcm92aWRlZCBkYXRhLiBDYW4gd29yayBpbiB0aHJlZSB2YXJpYXRpb25zOlxuICAgKiAtIHBsYWluIG9iamVjdCBjb250YWluaW5nIHVwZGF0YWJsZSBhdHRyaWJ1dGVzXG4gICAqIC0gU2NvcGUgaW5zdGFuY2UgdGhhdCdsbCBleHRyYWN0IHRoZSBhdHRyaWJ1dGVzIGZyb21cbiAgICogLSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0J2xsIHJlY2VpdmUgdGhlIGN1cnJlbnQgc2NvcGUgYXMgYW4gYXJndW1lbnQgYW5kIGFsbG93IGZvciBtb2RpZmljYXRpb25zXG4gICAqL1xuICAgdXBkYXRlKGNhcHR1cmVDb250ZXh0KSB7XG4gICAgaWYgKCFjYXB0dXJlQ29udGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NvcGVUb01lcmdlID0gdHlwZW9mIGNhcHR1cmVDb250ZXh0ID09PSAnZnVuY3Rpb24nID8gY2FwdHVyZUNvbnRleHQodGhpcykgOiBjYXB0dXJlQ29udGV4dDtcblxuICAgIGNvbnN0IHNjb3BlSW5zdGFuY2UgPVxuICAgICAgc2NvcGVUb01lcmdlIGluc3RhbmNlb2YgU2NvcGVcbiAgICAgICAgPyBzY29wZVRvTWVyZ2UuZ2V0U2NvcGVEYXRhKClcbiAgICAgICAgOiBpc1BsYWluT2JqZWN0KHNjb3BlVG9NZXJnZSlcbiAgICAgICAgICA/IChjYXB0dXJlQ29udGV4dCApXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB7IHRhZ3MsIGV4dHJhLCB1c2VyLCBjb250ZXh0cywgbGV2ZWwsIGZpbmdlcnByaW50ID0gW10sIHByb3BhZ2F0aW9uQ29udGV4dCB9ID0gc2NvcGVJbnN0YW5jZSB8fCB7fTtcblxuICAgIHRoaXMuX3RhZ3MgPSB7IC4uLnRoaXMuX3RhZ3MsIC4uLnRhZ3MgfTtcbiAgICB0aGlzLl9leHRyYSA9IHsgLi4udGhpcy5fZXh0cmEsIC4uLmV4dHJhIH07XG4gICAgdGhpcy5fY29udGV4dHMgPSB7IC4uLnRoaXMuX2NvbnRleHRzLCAuLi5jb250ZXh0cyB9O1xuXG4gICAgaWYgKHVzZXIgJiYgT2JqZWN0LmtleXModXNlcikubGVuZ3RoKSB7XG4gICAgICB0aGlzLl91c2VyID0gdXNlcjtcbiAgICB9XG5cbiAgICBpZiAobGV2ZWwpIHtcbiAgICAgIHRoaXMuX2xldmVsID0gbGV2ZWw7XG4gICAgfVxuXG4gICAgaWYgKGZpbmdlcnByaW50Lmxlbmd0aCkge1xuICAgICAgdGhpcy5fZmluZ2VycHJpbnQgPSBmaW5nZXJwcmludDtcbiAgICB9XG5cbiAgICBpZiAocHJvcGFnYXRpb25Db250ZXh0KSB7XG4gICAgICB0aGlzLl9wcm9wYWdhdGlvbkNvbnRleHQgPSBwcm9wYWdhdGlvbkNvbnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBjdXJyZW50IHNjb3BlIGFuZCByZXNldHMgaXRzIHByb3BlcnRpZXMuXG4gICAqIE5vdGU6IFRoZSBjbGllbnQgd2lsbCBub3QgYmUgY2xlYXJlZC5cbiAgICovXG4gICBjbGVhcigpIHtcbiAgICAvLyBjbGllbnQgaXMgbm90IGNsZWFyZWQgaGVyZSBvbiBwdXJwb3NlIVxuICAgIHRoaXMuX2JyZWFkY3J1bWJzID0gW107XG4gICAgdGhpcy5fdGFncyA9IHt9O1xuICAgIHRoaXMuX2V4dHJhID0ge307XG4gICAgdGhpcy5fdXNlciA9IHt9O1xuICAgIHRoaXMuX2NvbnRleHRzID0ge307XG4gICAgdGhpcy5fbGV2ZWwgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25OYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2ZpbmdlcnByaW50ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3Nlc3Npb24gPSB1bmRlZmluZWQ7XG4gICAgX3NldFNwYW5Gb3JTY29wZSh0aGlzLCB1bmRlZmluZWQpO1xuICAgIHRoaXMuX2F0dGFjaG1lbnRzID0gW107XG4gICAgdGhpcy5zZXRQcm9wYWdhdGlvbkNvbnRleHQoeyB0cmFjZUlkOiBnZW5lcmF0ZVRyYWNlSWQoKSwgc2FtcGxlUmFuZDogTWF0aC5yYW5kb20oKSB9KTtcblxuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGJyZWFkY3J1bWIgdG8gdGhlIHNjb3BlLlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgbGFzdCAxMDAgYnJlYWRjcnVtYnMgYXJlIGtlcHQuXG4gICAqL1xuICAgYWRkQnJlYWRjcnVtYihicmVhZGNydW1iLCBtYXhCcmVhZGNydW1icykge1xuICAgIGNvbnN0IG1heENydW1icyA9IHR5cGVvZiBtYXhCcmVhZGNydW1icyA9PT0gJ251bWJlcicgPyBtYXhCcmVhZGNydW1icyA6IERFRkFVTFRfTUFYX0JSRUFEQ1JVTUJTO1xuXG4gICAgLy8gTm8gZGF0YSBoYXMgYmVlbiBjaGFuZ2VkLCBzbyBkb24ndCBub3RpZnkgc2NvcGUgbGlzdGVuZXJzXG4gICAgaWYgKG1heENydW1icyA8PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjb25zdCBtZXJnZWRCcmVhZGNydW1iID0ge1xuICAgICAgdGltZXN0YW1wOiBkYXRlVGltZXN0YW1wSW5TZWNvbmRzKCksXG4gICAgICAuLi5icmVhZGNydW1iLFxuICAgICAgLy8gQnJlYWRjcnVtYiBtZXNzYWdlcyBjYW4gdGhlb3JldGljYWxseSBiZSBpbmZpbml0ZWx5IGxhcmdlIGFuZCB0aGV5J3JlIGhlbGQgaW4gbWVtb3J5IHNvIHdlIHRydW5jYXRlIHRoZW0gbm90IHRvIGxlYWsgKHRvbyBtdWNoKSBtZW1vcnlcbiAgICAgIG1lc3NhZ2U6IGJyZWFkY3J1bWIubWVzc2FnZSA/IHRydW5jYXRlKGJyZWFkY3J1bWIubWVzc2FnZSwgMjA0OCkgOiBicmVhZGNydW1iLm1lc3NhZ2UsXG4gICAgfTtcblxuICAgIHRoaXMuX2JyZWFkY3J1bWJzLnB1c2gobWVyZ2VkQnJlYWRjcnVtYik7XG4gICAgaWYgKHRoaXMuX2JyZWFkY3J1bWJzLmxlbmd0aCA+IG1heENydW1icykge1xuICAgICAgdGhpcy5fYnJlYWRjcnVtYnMgPSB0aGlzLl9icmVhZGNydW1icy5zbGljZSgtbWF4Q3J1bWJzKTtcbiAgICAgIHRoaXMuX2NsaWVudD8ucmVjb3JkRHJvcHBlZEV2ZW50KCdidWZmZXJfb3ZlcmZsb3cnLCAnbG9nX2l0ZW0nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsYXN0IGJyZWFkY3J1bWIgb2YgdGhlIHNjb3BlLlxuICAgKi9cbiAgIGdldExhc3RCcmVhZGNydW1iKCkge1xuICAgIHJldHVybiB0aGlzLl9icmVhZGNydW1ic1t0aGlzLl9icmVhZGNydW1icy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgYnJlYWRjcnVtYnMgZnJvbSB0aGUgc2NvcGUuXG4gICAqL1xuICAgY2xlYXJCcmVhZGNydW1icygpIHtcbiAgICB0aGlzLl9icmVhZGNydW1icyA9IFtdO1xuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGF0dGFjaG1lbnQgdG8gdGhlIHNjb3BlLlxuICAgKi9cbiAgIGFkZEF0dGFjaG1lbnQoYXR0YWNobWVudCkge1xuICAgIHRoaXMuX2F0dGFjaG1lbnRzLnB1c2goYXR0YWNobWVudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGF0dGFjaG1lbnRzIGZyb20gdGhlIHNjb3BlLlxuICAgKi9cbiAgIGNsZWFyQXR0YWNobWVudHMoKSB7XG4gICAgdGhpcy5fYXR0YWNobWVudHMgPSBbXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRhdGEgb2YgdGhpcyBzY29wZSwgd2hpY2ggc2hvdWxkIGJlIGFwcGxpZWQgdG8gYW4gZXZlbnQgZHVyaW5nIHByb2Nlc3NpbmcuXG4gICAqL1xuICAgZ2V0U2NvcGVEYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBicmVhZGNydW1iczogdGhpcy5fYnJlYWRjcnVtYnMsXG4gICAgICBhdHRhY2htZW50czogdGhpcy5fYXR0YWNobWVudHMsXG4gICAgICBjb250ZXh0czogdGhpcy5fY29udGV4dHMsXG4gICAgICB0YWdzOiB0aGlzLl90YWdzLFxuICAgICAgZXh0cmE6IHRoaXMuX2V4dHJhLFxuICAgICAgdXNlcjogdGhpcy5fdXNlcixcbiAgICAgIGxldmVsOiB0aGlzLl9sZXZlbCxcbiAgICAgIGZpbmdlcnByaW50OiB0aGlzLl9maW5nZXJwcmludCB8fCBbXSxcbiAgICAgIGV2ZW50UHJvY2Vzc29yczogdGhpcy5fZXZlbnRQcm9jZXNzb3JzLFxuICAgICAgcHJvcGFnYXRpb25Db250ZXh0OiB0aGlzLl9wcm9wYWdhdGlvbkNvbnRleHQsXG4gICAgICBzZGtQcm9jZXNzaW5nTWV0YWRhdGE6IHRoaXMuX3Nka1Byb2Nlc3NpbmdNZXRhZGF0YSxcbiAgICAgIHRyYW5zYWN0aW9uTmFtZTogdGhpcy5fdHJhbnNhY3Rpb25OYW1lLFxuICAgICAgc3BhbjogX2dldFNwYW5Gb3JTY29wZSh0aGlzKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBkYXRhIHdoaWNoIHdpbGwgYmUgYWNjZXNzaWJsZSBkdXJpbmcgZXZlbnQgcHJvY2Vzc2luZyBidXQgd29uJ3QgZ2V0IHNlbnQgdG8gU2VudHJ5LlxuICAgKi9cbiAgIHNldFNES1Byb2Nlc3NpbmdNZXRhZGF0YShuZXdEYXRhKSB7XG4gICAgdGhpcy5fc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0gbWVyZ2UodGhpcy5fc2RrUHJvY2Vzc2luZ01ldGFkYXRhLCBuZXdEYXRhLCAyKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgcHJvcGFnYXRpb24gY29udGV4dCB0byB0aGUgc2NvcGUsIHVzZWQgZm9yIGRpc3RyaWJ1dGVkIHRyYWNpbmdcbiAgICovXG4gICBzZXRQcm9wYWdhdGlvbkNvbnRleHQoY29udGV4dCkge1xuICAgIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dCA9IGNvbnRleHQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHByb3BhZ2F0aW9uIGNvbnRleHQgZnJvbSB0aGUgc2NvcGUsIHVzZWQgZm9yIGRpc3RyaWJ1dGVkIHRyYWNpbmdcbiAgICovXG4gICBnZXRQcm9wYWdhdGlvbkNvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb3BhZ2F0aW9uQ29udGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXB0dXJlIGFuIGV4Y2VwdGlvbiBmb3IgdGhpcyBzY29wZS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGlkIG9mIHRoZSBjYXB0dXJlZCBTZW50cnkgZXZlbnQuXG4gICAqL1xuICAgY2FwdHVyZUV4Y2VwdGlvbihleGNlcHRpb24sIGhpbnQpIHtcbiAgICBjb25zdCBldmVudElkID0gaGludD8uZXZlbnRfaWQgfHwgdXVpZDQoKTtcblxuICAgIGlmICghdGhpcy5fY2xpZW50KSB7XG4gICAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy53YXJuKCdObyBjbGllbnQgY29uZmlndXJlZCBvbiBzY29wZSAtIHdpbGwgbm90IGNhcHR1cmUgZXhjZXB0aW9uIScpO1xuICAgICAgcmV0dXJuIGV2ZW50SWQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc3ludGhldGljRXhjZXB0aW9uID0gbmV3IEVycm9yKCdTZW50cnkgc3ludGhldGljRXhjZXB0aW9uJyk7XG5cbiAgICB0aGlzLl9jbGllbnQuY2FwdHVyZUV4Y2VwdGlvbihcbiAgICAgIGV4Y2VwdGlvbixcbiAgICAgIHtcbiAgICAgICAgb3JpZ2luYWxFeGNlcHRpb246IGV4Y2VwdGlvbixcbiAgICAgICAgc3ludGhldGljRXhjZXB0aW9uLFxuICAgICAgICAuLi5oaW50LFxuICAgICAgICBldmVudF9pZDogZXZlbnRJZCxcbiAgICAgIH0sXG4gICAgICB0aGlzLFxuICAgICk7XG5cbiAgICByZXR1cm4gZXZlbnRJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXB0dXJlIGEgbWVzc2FnZSBmb3IgdGhpcyBzY29wZS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGlkIG9mIHRoZSBjYXB0dXJlZCBtZXNzYWdlLlxuICAgKi9cbiAgIGNhcHR1cmVNZXNzYWdlKG1lc3NhZ2UsIGxldmVsLCBoaW50KSB7XG4gICAgY29uc3QgZXZlbnRJZCA9IGhpbnQ/LmV2ZW50X2lkIHx8IHV1aWQ0KCk7XG5cbiAgICBpZiAoIXRoaXMuX2NsaWVudCkge1xuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcud2FybignTm8gY2xpZW50IGNvbmZpZ3VyZWQgb24gc2NvcGUgLSB3aWxsIG5vdCBjYXB0dXJlIG1lc3NhZ2UhJyk7XG4gICAgICByZXR1cm4gZXZlbnRJZDtcbiAgICB9XG5cbiAgICBjb25zdCBzeW50aGV0aWNFeGNlcHRpb24gPSBuZXcgRXJyb3IobWVzc2FnZSk7XG5cbiAgICB0aGlzLl9jbGllbnQuY2FwdHVyZU1lc3NhZ2UoXG4gICAgICBtZXNzYWdlLFxuICAgICAgbGV2ZWwsXG4gICAgICB7XG4gICAgICAgIG9yaWdpbmFsRXhjZXB0aW9uOiBtZXNzYWdlLFxuICAgICAgICBzeW50aGV0aWNFeGNlcHRpb24sXG4gICAgICAgIC4uLmhpbnQsXG4gICAgICAgIGV2ZW50X2lkOiBldmVudElkLFxuICAgICAgfSxcbiAgICAgIHRoaXMsXG4gICAgKTtcblxuICAgIHJldHVybiBldmVudElkO1xuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmUgYSBTZW50cnkgZXZlbnQgZm9yIHRoaXMgc2NvcGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBpZCBvZiB0aGUgY2FwdHVyZWQgZXZlbnQuXG4gICAqL1xuICAgY2FwdHVyZUV2ZW50KGV2ZW50LCBoaW50KSB7XG4gICAgY29uc3QgZXZlbnRJZCA9IGhpbnQ/LmV2ZW50X2lkIHx8IHV1aWQ0KCk7XG5cbiAgICBpZiAoIXRoaXMuX2NsaWVudCkge1xuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcud2FybignTm8gY2xpZW50IGNvbmZpZ3VyZWQgb24gc2NvcGUgLSB3aWxsIG5vdCBjYXB0dXJlIGV2ZW50IScpO1xuICAgICAgcmV0dXJuIGV2ZW50SWQ7XG4gICAgfVxuXG4gICAgdGhpcy5fY2xpZW50LmNhcHR1cmVFdmVudChldmVudCwgeyAuLi5oaW50LCBldmVudF9pZDogZXZlbnRJZCB9LCB0aGlzKTtcblxuICAgIHJldHVybiBldmVudElkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBiZSBjYWxsZWQgb24gZXZlcnkgc2V0IGNhbGwuXG4gICAqL1xuICAgX25vdGlmeVNjb3BlTGlzdGVuZXJzKCkge1xuICAgIC8vIFdlIG5lZWQgdGhpcyBjaGVjayBmb3IgdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzIHRvIGJlIGFibGUgdG8gd29yayBvbiBzY29wZSBkdXJpbmcgdXBkYXRlc1xuICAgIC8vIElmIHRoaXMgY2hlY2sgaXMgbm90IGhlcmUgd2UnbGwgcHJvZHVjZSBlbmRsZXNzIHJlY3Vyc2lvbiB3aGVuIHNvbWV0aGluZyBpcyBkb25lIHdpdGggdGhlIHNjb3BlXG4gICAgLy8gZHVyaW5nIHRoZSBjYWxsYmFjay5cbiAgICBpZiAoIXRoaXMuX25vdGlmeWluZ0xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3Njb3BlTGlzdGVuZXJzLmZvckVhY2goY2FsbGJhY2sgPT4ge1xuICAgICAgICBjYWxsYmFjayh0aGlzKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IFNjb3BlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY29wZS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/scope.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/sdk.js":
/*!*******************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/sdk.js ***!
  \*******************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   initAndBind: () => (/* binding */ initAndBind),\n/* harmony export */   setCurrentClient: () => (/* binding */ setCurrentClient)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n\n\n\n\n/** A class object that can instantiate Client objects. */\n\n/**\n * Internal function to create a new SDK client instance. The client is\n * installed and then bound to the current scope.\n *\n * @param clientClass The client class to instantiate.\n * @param options Options to pass to the client.\n */\nfunction initAndBind(\n  clientClass,\n  options,\n) {\n  if (options.debug === true) {\n    if (_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n      _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.enable();\n    } else {\n      // use `console.warn` rather than `debug.warn` since by non-debug bundles have all `debug.x` statements stripped\n      (0,_utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.consoleSandbox)(() => {\n        // eslint-disable-next-line no-console\n        console.warn('[Sentry] Cannot initialize SDK with `debug` option using a non-debug bundle.');\n      });\n    }\n  }\n  const scope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n  scope.update(options.initialScope);\n\n  const client = new clientClass(options);\n  setCurrentClient(client);\n  client.init();\n  return client;\n}\n\n/**\n * Make the given client the current client.\n */\nfunction setCurrentClient(client) {\n  (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)().setClient(client);\n}\n\n\n//# sourceMappingURL=sdk.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3Nkay5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFxRDtBQUNOO0FBQ2lCOztBQUVoRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHdEQUFXO0FBQ25CLE1BQU0seURBQUs7QUFDWCxNQUFNO0FBQ047QUFDQSxNQUFNLHNFQUFjO0FBQ3BCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLGdCQUFnQixrRUFBZTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxrRUFBZTtBQUNqQjs7QUFFeUM7QUFDekMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9zZGsuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0Q3VycmVudFNjb3BlIH0gZnJvbSAnLi9jdXJyZW50U2NvcGVzLmpzJztcbmltcG9ydCB7IERFQlVHX0JVSUxEIH0gZnJvbSAnLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBkZWJ1ZywgY29uc29sZVNhbmRib3ggfSBmcm9tICcuL3V0aWxzL2RlYnVnLWxvZ2dlci5qcyc7XG5cbi8qKiBBIGNsYXNzIG9iamVjdCB0aGF0IGNhbiBpbnN0YW50aWF0ZSBDbGllbnQgb2JqZWN0cy4gKi9cblxuLyoqXG4gKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgU0RLIGNsaWVudCBpbnN0YW5jZS4gVGhlIGNsaWVudCBpc1xuICogaW5zdGFsbGVkIGFuZCB0aGVuIGJvdW5kIHRvIHRoZSBjdXJyZW50IHNjb3BlLlxuICpcbiAqIEBwYXJhbSBjbGllbnRDbGFzcyBUaGUgY2xpZW50IGNsYXNzIHRvIGluc3RhbnRpYXRlLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBjbGllbnQuXG4gKi9cbmZ1bmN0aW9uIGluaXRBbmRCaW5kKFxuICBjbGllbnRDbGFzcyxcbiAgb3B0aW9ucyxcbikge1xuICBpZiAob3B0aW9ucy5kZWJ1ZyA9PT0gdHJ1ZSkge1xuICAgIGlmIChERUJVR19CVUlMRCkge1xuICAgICAgZGVidWcuZW5hYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVzZSBgY29uc29sZS53YXJuYCByYXRoZXIgdGhhbiBgZGVidWcud2FybmAgc2luY2UgYnkgbm9uLWRlYnVnIGJ1bmRsZXMgaGF2ZSBhbGwgYGRlYnVnLnhgIHN0YXRlbWVudHMgc3RyaXBwZWRcbiAgICAgIGNvbnNvbGVTYW5kYm94KCgpID0+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKCdbU2VudHJ5XSBDYW5ub3QgaW5pdGlhbGl6ZSBTREsgd2l0aCBgZGVidWdgIG9wdGlvbiB1c2luZyBhIG5vbi1kZWJ1ZyBidW5kbGUuJyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgc2NvcGUgPSBnZXRDdXJyZW50U2NvcGUoKTtcbiAgc2NvcGUudXBkYXRlKG9wdGlvbnMuaW5pdGlhbFNjb3BlKTtcblxuICBjb25zdCBjbGllbnQgPSBuZXcgY2xpZW50Q2xhc3Mob3B0aW9ucyk7XG4gIHNldEN1cnJlbnRDbGllbnQoY2xpZW50KTtcbiAgY2xpZW50LmluaXQoKTtcbiAgcmV0dXJuIGNsaWVudDtcbn1cblxuLyoqXG4gKiBNYWtlIHRoZSBnaXZlbiBjbGllbnQgdGhlIGN1cnJlbnQgY2xpZW50LlxuICovXG5mdW5jdGlvbiBzZXRDdXJyZW50Q2xpZW50KGNsaWVudCkge1xuICBnZXRDdXJyZW50U2NvcGUoKS5zZXRDbGllbnQoY2xpZW50KTtcbn1cblxuZXhwb3J0IHsgaW5pdEFuZEJpbmQsIHNldEN1cnJlbnRDbGllbnQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNkay5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/sdk.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/semanticAttributes.js":
/*!**********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/semanticAttributes.js ***!
  \**********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   SEMANTIC_ATTRIBUTE_CACHE_HIT: () => (/* binding */ SEMANTIC_ATTRIBUTE_CACHE_HIT),\n/* harmony export */   SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE: () => (/* binding */ SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE),\n/* harmony export */   SEMANTIC_ATTRIBUTE_CACHE_KEY: () => (/* binding */ SEMANTIC_ATTRIBUTE_CACHE_KEY),\n/* harmony export */   SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME: () => (/* binding */ SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME),\n/* harmony export */   SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD: () => (/* binding */ SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD),\n/* harmony export */   SEMANTIC_ATTRIBUTE_PROFILE_ID: () => (/* binding */ SEMANTIC_ATTRIBUTE_PROFILE_ID),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME: () => (/* binding */ SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON: () => (/* binding */ SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT: () => (/* binding */ SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE: () => (/* binding */ SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_OP: () => (/* binding */ SEMANTIC_ATTRIBUTE_SENTRY_OP),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN: () => (/* binding */ SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE: () => (/* binding */ SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE: () => (/* binding */ SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_SOURCE: () => (/* binding */ SEMANTIC_ATTRIBUTE_SENTRY_SOURCE),\n/* harmony export */   SEMANTIC_ATTRIBUTE_URL_FULL: () => (/* binding */ SEMANTIC_ATTRIBUTE_URL_FULL),\n/* harmony export */   SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE: () => (/* binding */ SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE)\n/* harmony export */ });\n/**\n * Use this attribute to represent the source of a span.\n * Should be one of: custom, url, route, view, component, task, unknown\n *\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = 'sentry.source';\n\n/**\n * Attributes that holds the sample rate that was locally applied to a span.\n * If this attribute is not defined, it means that the span inherited a sampling decision.\n *\n * NOTE: Is only defined on root spans.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = 'sentry.sample_rate';\n\n/**\n * Attribute holding the sample rate of the previous trace.\n * This is used to sample consistently across subsequent traces in the browser SDK.\n *\n * Note: Only defined on root spans, if opted into consistent sampling\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE = 'sentry.previous_trace_sample_rate';\n\n/**\n * Use this attribute to represent the operation of a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_OP = 'sentry.op';\n\n/**\n * Use this attribute to represent the origin of a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = 'sentry.origin';\n\n/** The reason why an idle span finished. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON = 'sentry.idle_span_finish_reason';\n\n/** The unit of a measurement, which may be stored as a TimedEvent. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT = 'sentry.measurement_unit';\n\n/** The value of a measurement, which may be stored as a TimedEvent. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE = 'sentry.measurement_value';\n\n/**\n * A custom span name set by users guaranteed to be taken over any automatically\n * inferred name. This attribute is removed before the span is sent.\n *\n * @internal only meant for internal SDK usage\n * @hidden\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME = 'sentry.custom_span_name';\n\n/**\n * The id of the profile that this span occurred in.\n */\nconst SEMANTIC_ATTRIBUTE_PROFILE_ID = 'sentry.profile_id';\n\nconst SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME = 'sentry.exclusive_time';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_HIT = 'cache.hit';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_KEY = 'cache.key';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE = 'cache.item_size';\n\n/** TODO: Remove these once we update to latest semantic conventions */\nconst SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD = 'http.request.method';\nconst SEMANTIC_ATTRIBUTE_URL_FULL = 'url.full';\n\n/**\n * A span link attribute to mark the link as a special span link.\n *\n * Known values:\n * - `previous_trace`: The span links to the frontend root span of the previous trace.\n * - `next_trace`: The span links to the frontend root span of the next trace. (Not set by the SDK)\n *\n * Other values may be set as appropriate.\n * @see https://develop.sentry.dev/sdk/telemetry/traces/span-links/#link-types\n */\nconst SEMANTIC_LINK_ATTRIBUTE_LINK_TYPE = 'sentry.link.type';\n\n\n//# sourceMappingURL=semanticAttributes.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3NlbWFudGljQXR0cmlidXRlcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUUyb0I7QUFDM29CIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vc2VtYW50aWNBdHRyaWJ1dGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlIHRoaXMgYXR0cmlidXRlIHRvIHJlcHJlc2VudCB0aGUgc291cmNlIG9mIGEgc3Bhbi5cbiAqIFNob3VsZCBiZSBvbmUgb2Y6IGN1c3RvbSwgdXJsLCByb3V0ZSwgdmlldywgY29tcG9uZW50LCB0YXNrLCB1bmtub3duXG4gKlxuICovXG5jb25zdCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRSA9ICdzZW50cnkuc291cmNlJztcblxuLyoqXG4gKiBBdHRyaWJ1dGVzIHRoYXQgaG9sZHMgdGhlIHNhbXBsZSByYXRlIHRoYXQgd2FzIGxvY2FsbHkgYXBwbGllZCB0byBhIHNwYW4uXG4gKiBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3QgZGVmaW5lZCwgaXQgbWVhbnMgdGhhdCB0aGUgc3BhbiBpbmhlcml0ZWQgYSBzYW1wbGluZyBkZWNpc2lvbi5cbiAqXG4gKiBOT1RFOiBJcyBvbmx5IGRlZmluZWQgb24gcm9vdCBzcGFucy5cbiAqL1xuY29uc3QgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TQU1QTEVfUkFURSA9ICdzZW50cnkuc2FtcGxlX3JhdGUnO1xuXG4vKipcbiAqIEF0dHJpYnV0ZSBob2xkaW5nIHRoZSBzYW1wbGUgcmF0ZSBvZiB0aGUgcHJldmlvdXMgdHJhY2UuXG4gKiBUaGlzIGlzIHVzZWQgdG8gc2FtcGxlIGNvbnNpc3RlbnRseSBhY3Jvc3Mgc3Vic2VxdWVudCB0cmFjZXMgaW4gdGhlIGJyb3dzZXIgU0RLLlxuICpcbiAqIE5vdGU6IE9ubHkgZGVmaW5lZCBvbiByb290IHNwYW5zLCBpZiBvcHRlZCBpbnRvIGNvbnNpc3RlbnQgc2FtcGxpbmdcbiAqL1xuY29uc3QgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9QUkVWSU9VU19UUkFDRV9TQU1QTEVfUkFURSA9ICdzZW50cnkucHJldmlvdXNfdHJhY2Vfc2FtcGxlX3JhdGUnO1xuXG4vKipcbiAqIFVzZSB0aGlzIGF0dHJpYnV0ZSB0byByZXByZXNlbnQgdGhlIG9wZXJhdGlvbiBvZiBhIHNwYW4uXG4gKi9cbmNvbnN0IFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1AgPSAnc2VudHJ5Lm9wJztcblxuLyoqXG4gKiBVc2UgdGhpcyBhdHRyaWJ1dGUgdG8gcmVwcmVzZW50IHRoZSBvcmlnaW4gb2YgYSBzcGFuLlxuICovXG5jb25zdCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTiA9ICdzZW50cnkub3JpZ2luJztcblxuLyoqIFRoZSByZWFzb24gd2h5IGFuIGlkbGUgc3BhbiBmaW5pc2hlZC4gKi9cbmNvbnN0IFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfSURMRV9TUEFOX0ZJTklTSF9SRUFTT04gPSAnc2VudHJ5LmlkbGVfc3Bhbl9maW5pc2hfcmVhc29uJztcblxuLyoqIFRoZSB1bml0IG9mIGEgbWVhc3VyZW1lbnQsIHdoaWNoIG1heSBiZSBzdG9yZWQgYXMgYSBUaW1lZEV2ZW50LiAqL1xuY29uc3QgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9NRUFTVVJFTUVOVF9VTklUID0gJ3NlbnRyeS5tZWFzdXJlbWVudF91bml0JztcblxuLyoqIFRoZSB2YWx1ZSBvZiBhIG1lYXN1cmVtZW50LCB3aGljaCBtYXkgYmUgc3RvcmVkIGFzIGEgVGltZWRFdmVudC4gKi9cbmNvbnN0IFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfTUVBU1VSRU1FTlRfVkFMVUUgPSAnc2VudHJ5Lm1lYXN1cmVtZW50X3ZhbHVlJztcblxuLyoqXG4gKiBBIGN1c3RvbSBzcGFuIG5hbWUgc2V0IGJ5IHVzZXJzIGd1YXJhbnRlZWQgdG8gYmUgdGFrZW4gb3ZlciBhbnkgYXV0b21hdGljYWxseVxuICogaW5mZXJyZWQgbmFtZS4gVGhpcyBhdHRyaWJ1dGUgaXMgcmVtb3ZlZCBiZWZvcmUgdGhlIHNwYW4gaXMgc2VudC5cbiAqXG4gKiBAaW50ZXJuYWwgb25seSBtZWFudCBmb3IgaW50ZXJuYWwgU0RLIHVzYWdlXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfQ1VTVE9NX1NQQU5fTkFNRSA9ICdzZW50cnkuY3VzdG9tX3NwYW5fbmFtZSc7XG5cbi8qKlxuICogVGhlIGlkIG9mIHRoZSBwcm9maWxlIHRoYXQgdGhpcyBzcGFuIG9jY3VycmVkIGluLlxuICovXG5jb25zdCBTRU1BTlRJQ19BVFRSSUJVVEVfUFJPRklMRV9JRCA9ICdzZW50cnkucHJvZmlsZV9pZCc7XG5cbmNvbnN0IFNFTUFOVElDX0FUVFJJQlVURV9FWENMVVNJVkVfVElNRSA9ICdzZW50cnkuZXhjbHVzaXZlX3RpbWUnO1xuXG5jb25zdCBTRU1BTlRJQ19BVFRSSUJVVEVfQ0FDSEVfSElUID0gJ2NhY2hlLmhpdCc7XG5cbmNvbnN0IFNFTUFOVElDX0FUVFJJQlVURV9DQUNIRV9LRVkgPSAnY2FjaGUua2V5JztcblxuY29uc3QgU0VNQU5USUNfQVRUUklCVVRFX0NBQ0hFX0lURU1fU0laRSA9ICdjYWNoZS5pdGVtX3NpemUnO1xuXG4vKiogVE9ETzogUmVtb3ZlIHRoZXNlIG9uY2Ugd2UgdXBkYXRlIHRvIGxhdGVzdCBzZW1hbnRpYyBjb252ZW50aW9ucyAqL1xuY29uc3QgU0VNQU5USUNfQVRUUklCVVRFX0hUVFBfUkVRVUVTVF9NRVRIT0QgPSAnaHR0cC5yZXF1ZXN0Lm1ldGhvZCc7XG5jb25zdCBTRU1BTlRJQ19BVFRSSUJVVEVfVVJMX0ZVTEwgPSAndXJsLmZ1bGwnO1xuXG4vKipcbiAqIEEgc3BhbiBsaW5rIGF0dHJpYnV0ZSB0byBtYXJrIHRoZSBsaW5rIGFzIGEgc3BlY2lhbCBzcGFuIGxpbmsuXG4gKlxuICogS25vd24gdmFsdWVzOlxuICogLSBgcHJldmlvdXNfdHJhY2VgOiBUaGUgc3BhbiBsaW5rcyB0byB0aGUgZnJvbnRlbmQgcm9vdCBzcGFuIG9mIHRoZSBwcmV2aW91cyB0cmFjZS5cbiAqIC0gYG5leHRfdHJhY2VgOiBUaGUgc3BhbiBsaW5rcyB0byB0aGUgZnJvbnRlbmQgcm9vdCBzcGFuIG9mIHRoZSBuZXh0IHRyYWNlLiAoTm90IHNldCBieSB0aGUgU0RLKVxuICpcbiAqIE90aGVyIHZhbHVlcyBtYXkgYmUgc2V0IGFzIGFwcHJvcHJpYXRlLlxuICogQHNlZSBodHRwczovL2RldmVsb3Auc2VudHJ5LmRldi9zZGsvdGVsZW1ldHJ5L3RyYWNlcy9zcGFuLWxpbmtzLyNsaW5rLXR5cGVzXG4gKi9cbmNvbnN0IFNFTUFOVElDX0xJTktfQVRUUklCVVRFX0xJTktfVFlQRSA9ICdzZW50cnkubGluay50eXBlJztcblxuZXhwb3J0IHsgU0VNQU5USUNfQVRUUklCVVRFX0NBQ0hFX0hJVCwgU0VNQU5USUNfQVRUUklCVVRFX0NBQ0hFX0lURU1fU0laRSwgU0VNQU5USUNfQVRUUklCVVRFX0NBQ0hFX0tFWSwgU0VNQU5USUNfQVRUUklCVVRFX0VYQ0xVU0lWRV9USU1FLCBTRU1BTlRJQ19BVFRSSUJVVEVfSFRUUF9SRVFVRVNUX01FVEhPRCwgU0VNQU5USUNfQVRUUklCVVRFX1BST0ZJTEVfSUQsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfQ1VTVE9NX1NQQU5fTkFNRSwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9JRExFX1NQQU5fRklOSVNIX1JFQVNPTiwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9NRUFTVVJFTUVOVF9VTklULCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX01FQVNVUkVNRU5UX1ZBTFVFLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTiwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9QUkVWSU9VU19UUkFDRV9TQU1QTEVfUkFURSwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TQU1QTEVfUkFURSwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0UsIFNFTUFOVElDX0FUVFJJQlVURV9VUkxfRlVMTCwgU0VNQU5USUNfTElOS19BVFRSSUJVVEVfTElOS19UWVBFIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW1hbnRpY0F0dHJpYnV0ZXMuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/semanticAttributes.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/server-runtime-client.js":
/*!*************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/server-runtime-client.js ***!
  \*************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   ServerRuntimeClient: () => (/* binding */ ServerRuntimeClient)\n/* harmony export */ });\n/* harmony import */ var _checkin_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./checkin.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/checkin.js\");\n/* harmony import */ var _client_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./client.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/client.js\");\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _logs_exports_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./logs/exports.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/logs/exports.js\");\n/* harmony import */ var _tracing_errors_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tracing/errors.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/errors.js\");\n/* harmony import */ var _utils_is_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_misc_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/misc.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/misc.js\");\n/* harmony import */ var _utils_eventbuilder_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils/eventbuilder.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/eventbuilder.js\");\n/* harmony import */ var _utils_syncpromise_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utils/syncpromise.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/syncpromise.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n// TODO: Make this configurable\nconst DEFAULT_LOG_FLUSH_INTERVAL = 5000;\n\n/**\n * The Sentry Server Runtime Client SDK.\n */\nclass ServerRuntimeClient\n\n extends _client_js__WEBPACK_IMPORTED_MODULE_1__.Client {\n\n  /**\n   * Creates a new Edge SDK instance.\n   * @param options Configuration options for this SDK.\n   */\n   constructor(options) {\n    // Server clients always support tracing\n    (0,_tracing_errors_js__WEBPACK_IMPORTED_MODULE_5__.registerSpanErrorInstrumentation)();\n\n    super(options);\n\n    this._logWeight = 0;\n\n    // eslint-disable-next-line deprecation/deprecation\n    const shouldEnableLogs = this._options.enableLogs ?? this._options._experiments?.enableLogs;\n    if (shouldEnableLogs) {\n      // eslint-disable-next-line @typescript-eslint/no-this-alias\n      const client = this;\n\n      client.on('flushLogs', () => {\n        client._logWeight = 0;\n        clearTimeout(client._logFlushIdleTimeout);\n      });\n\n      client.on('afterCaptureLog', log => {\n        client._logWeight += estimateLogSizeInBytes(log);\n\n        // We flush the logs buffer if it exceeds 0.8 MB\n        // The log weight is a rough estimate, so we flush way before\n        // the payload gets too big.\n        if (client._logWeight >= 800000) {\n          (0,_logs_exports_js__WEBPACK_IMPORTED_MODULE_4__._INTERNAL_flushLogsBuffer)(client);\n        } else {\n          // start an idle timeout to flush the logs buffer if no logs are captured for a while\n          client._logFlushIdleTimeout = setTimeout(() => {\n            (0,_logs_exports_js__WEBPACK_IMPORTED_MODULE_4__._INTERNAL_flushLogsBuffer)(client);\n          }, DEFAULT_LOG_FLUSH_INTERVAL);\n        }\n      });\n\n      client.on('flush', () => {\n        (0,_logs_exports_js__WEBPACK_IMPORTED_MODULE_4__._INTERNAL_flushLogsBuffer)(client);\n      });\n    }\n  }\n\n  /**\n   * @inheritDoc\n   */\n   eventFromException(exception, hint) {\n    const event = (0,_utils_eventbuilder_js__WEBPACK_IMPORTED_MODULE_9__.eventFromUnknownInput)(this, this._options.stackParser, exception, hint);\n    event.level = 'error';\n\n    return (0,_utils_syncpromise_js__WEBPACK_IMPORTED_MODULE_10__.resolvedSyncPromise)(event);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   eventFromMessage(\n    message,\n    level = 'info',\n    hint,\n  ) {\n    return (0,_utils_syncpromise_js__WEBPACK_IMPORTED_MODULE_10__.resolvedSyncPromise)(\n      (0,_utils_eventbuilder_js__WEBPACK_IMPORTED_MODULE_9__.eventFromMessage)(this._options.stackParser, message, level, hint, this._options.attachStacktrace),\n    );\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureException(exception, hint, scope) {\n    setCurrentRequestSessionErroredOrCrashed(hint);\n    return super.captureException(exception, hint, scope);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   captureEvent(event, hint, scope) {\n    // If the event is of type Exception, then a request session should be captured\n    const isException = !event.type && event.exception?.values && event.exception.values.length > 0;\n    if (isException) {\n      setCurrentRequestSessionErroredOrCrashed(hint);\n    }\n\n    return super.captureEvent(event, hint, scope);\n  }\n\n  /**\n   * Create a cron monitor check in and send it to Sentry.\n   *\n   * @param checkIn An object that describes a check in.\n   * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n   * to create a monitor automatically when sending a check in.\n   */\n   captureCheckIn(checkIn, monitorConfig, scope) {\n    const id = 'checkInId' in checkIn && checkIn.checkInId ? checkIn.checkInId : (0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_8__.uuid4)();\n    if (!this._isEnabled()) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_7__.debug.warn('SDK not enabled, will not capture check-in.');\n      return id;\n    }\n\n    const options = this.getOptions();\n    const { release, environment, tunnel } = options;\n\n    const serializedCheckIn = {\n      check_in_id: id,\n      monitor_slug: checkIn.monitorSlug,\n      status: checkIn.status,\n      release,\n      environment,\n    };\n\n    if ('duration' in checkIn) {\n      serializedCheckIn.duration = checkIn.duration;\n    }\n\n    if (monitorConfig) {\n      serializedCheckIn.monitor_config = {\n        schedule: monitorConfig.schedule,\n        checkin_margin: monitorConfig.checkinMargin,\n        max_runtime: monitorConfig.maxRuntime,\n        timezone: monitorConfig.timezone,\n        failure_issue_threshold: monitorConfig.failureIssueThreshold,\n        recovery_threshold: monitorConfig.recoveryThreshold,\n      };\n    }\n\n    const [dynamicSamplingContext, traceContext] = (0,_client_js__WEBPACK_IMPORTED_MODULE_1__._getTraceInfoFromScope)(this, scope);\n    if (traceContext) {\n      serializedCheckIn.contexts = {\n        trace: traceContext,\n      };\n    }\n\n    const envelope = (0,_checkin_js__WEBPACK_IMPORTED_MODULE_0__.createCheckInEnvelope)(\n      serializedCheckIn,\n      dynamicSamplingContext,\n      this.getSdkMetadata(),\n      tunnel,\n      this.getDsn(),\n    );\n\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_7__.debug.log('Sending checkin:', checkIn.monitorSlug, checkIn.status);\n\n    // sendEnvelope should not throw\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    this.sendEnvelope(envelope);\n\n    return id;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   _prepareEvent(\n    event,\n    hint,\n    currentScope,\n    isolationScope,\n  ) {\n    if (this._options.platform) {\n      event.platform = event.platform || this._options.platform;\n    }\n\n    if (this._options.runtime) {\n      event.contexts = {\n        ...event.contexts,\n        runtime: event.contexts?.runtime || this._options.runtime,\n      };\n    }\n\n    if (this._options.serverName) {\n      event.server_name = event.server_name || this._options.serverName;\n    }\n\n    return super._prepareEvent(event, hint, currentScope, isolationScope);\n  }\n}\n\nfunction setCurrentRequestSessionErroredOrCrashed(eventHint) {\n  const requestSession = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getIsolationScope)().getScopeData().sdkProcessingMetadata.requestSession;\n  if (requestSession) {\n    // We mutate instead of doing `setSdkProcessingMetadata` because the http integration stores away a particular\n    // isolationScope. If that isolation scope is forked, setting the processing metadata here will not mutate the\n    // original isolation scope that the http integration stored away.\n    const isHandledException = eventHint?.mechanism?.handled ?? true;\n    // A request session can go from \"errored\" -> \"crashed\" but not \"crashed\" -> \"errored\".\n    // Crashed (unhandled exception) is worse than errored (handled exception).\n    if (isHandledException && requestSession.status !== 'crashed') {\n      requestSession.status = 'errored';\n    } else if (!isHandledException) {\n      requestSession.status = 'crashed';\n    }\n  }\n}\n\n/**\n * Estimate the size of a log in bytes.\n *\n * @param log - The log to estimate the size of.\n * @returns The estimated size of the log in bytes.\n */\nfunction estimateLogSizeInBytes(log) {\n  let weight = 0;\n\n  // Estimate byte size of 2 bytes per character. This is a rough estimate JS strings are stored as UTF-16.\n  if (log.message) {\n    weight += log.message.length * 2;\n  }\n\n  if (log.attributes) {\n    Object.values(log.attributes).forEach(value => {\n      if (Array.isArray(value)) {\n        weight += value.length * estimatePrimitiveSizeInBytes(value[0]);\n      } else if ((0,_utils_is_js__WEBPACK_IMPORTED_MODULE_6__.isPrimitive)(value)) {\n        weight += estimatePrimitiveSizeInBytes(value);\n      } else {\n        // For objects values, we estimate the size of the object as 100 bytes\n        weight += 100;\n      }\n    });\n  }\n\n  return weight;\n}\n\nfunction estimatePrimitiveSizeInBytes(value) {\n  if (typeof value === 'string') {\n    return value.length * 2;\n  } else if (typeof value === 'number') {\n    return 8;\n  } else if (typeof value === 'boolean') {\n    return 4;\n  }\n\n  return 0;\n}\n\n\n//# sourceMappingURL=server-runtime-client.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3NlcnZlci1ydW50aW1lLWNsaWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBcUQ7QUFDUTtBQUNOO0FBQ1I7QUFDZTtBQUNTO0FBQzNCO0FBQ0k7QUFDUjtBQUMwQztBQUNyQjs7QUFFN0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLDhDQUFNOztBQUVmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksb0ZBQWdDOztBQUVwQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsMkVBQXlCO0FBQ25DLFVBQVU7QUFDVjtBQUNBO0FBQ0EsWUFBWSwyRUFBeUI7QUFDckMsV0FBVztBQUNYO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLFFBQVEsMkVBQXlCO0FBQ2pDLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLDZFQUFxQjtBQUN2Qzs7QUFFQSxXQUFXLDJFQUFtQjtBQUM5Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyRUFBbUI7QUFDOUIsTUFBTSx3RUFBZ0I7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUZBQWlGLHFEQUFLO0FBQ3RGO0FBQ0EsTUFBTSx3REFBVyxJQUFJLHlEQUFLO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLCtCQUErQjs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1EQUFtRCxrRUFBc0I7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsa0VBQXFCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLHdEQUFXLElBQUkseURBQUs7O0FBRXhCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QixvRUFBaUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFNBQVMseURBQVc7QUFDNUI7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFK0I7QUFDL0IiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS9zZXJ2ZXItcnVudGltZS1jbGllbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlQ2hlY2tJbkVudmVsb3BlIH0gZnJvbSAnLi9jaGVja2luLmpzJztcbmltcG9ydCB7IENsaWVudCwgX2dldFRyYWNlSW5mb0Zyb21TY29wZSB9IGZyb20gJy4vY2xpZW50LmpzJztcbmltcG9ydCB7IGdldElzb2xhdGlvblNjb3BlIH0gZnJvbSAnLi9jdXJyZW50U2NvcGVzLmpzJztcbmltcG9ydCB7IERFQlVHX0JVSUxEIH0gZnJvbSAnLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBfSU5URVJOQUxfZmx1c2hMb2dzQnVmZmVyIH0gZnJvbSAnLi9sb2dzL2V4cG9ydHMuanMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJTcGFuRXJyb3JJbnN0cnVtZW50YXRpb24gfSBmcm9tICcuL3RyYWNpbmcvZXJyb3JzLmpzJztcbmltcG9ydCB7IGlzUHJpbWl0aXZlIH0gZnJvbSAnLi91dGlscy9pcy5qcyc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4vdXRpbHMvZGVidWctbG9nZ2VyLmpzJztcbmltcG9ydCB7IHV1aWQ0IH0gZnJvbSAnLi91dGlscy9taXNjLmpzJztcbmltcG9ydCB7IGV2ZW50RnJvbVVua25vd25JbnB1dCwgZXZlbnRGcm9tTWVzc2FnZSB9IGZyb20gJy4vdXRpbHMvZXZlbnRidWlsZGVyLmpzJztcbmltcG9ydCB7IHJlc29sdmVkU3luY1Byb21pc2UgfSBmcm9tICcuL3V0aWxzL3N5bmNwcm9taXNlLmpzJztcblxuLy8gVE9ETzogTWFrZSB0aGlzIGNvbmZpZ3VyYWJsZVxuY29uc3QgREVGQVVMVF9MT0dfRkxVU0hfSU5URVJWQUwgPSA1MDAwO1xuXG4vKipcbiAqIFRoZSBTZW50cnkgU2VydmVyIFJ1bnRpbWUgQ2xpZW50IFNESy5cbiAqL1xuY2xhc3MgU2VydmVyUnVudGltZUNsaWVudFxuXG4gZXh0ZW5kcyBDbGllbnQge1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEVkZ2UgU0RLIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgU0RLLlxuICAgKi9cbiAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAvLyBTZXJ2ZXIgY2xpZW50cyBhbHdheXMgc3VwcG9ydCB0cmFjaW5nXG4gICAgcmVnaXN0ZXJTcGFuRXJyb3JJbnN0cnVtZW50YXRpb24oKTtcblxuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5fbG9nV2VpZ2h0ID0gMDtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIGNvbnN0IHNob3VsZEVuYWJsZUxvZ3MgPSB0aGlzLl9vcHRpb25zLmVuYWJsZUxvZ3MgPz8gdGhpcy5fb3B0aW9ucy5fZXhwZXJpbWVudHM/LmVuYWJsZUxvZ3M7XG4gICAgaWYgKHNob3VsZEVuYWJsZUxvZ3MpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgY29uc3QgY2xpZW50ID0gdGhpcztcblxuICAgICAgY2xpZW50Lm9uKCdmbHVzaExvZ3MnLCAoKSA9PiB7XG4gICAgICAgIGNsaWVudC5fbG9nV2VpZ2h0ID0gMDtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGNsaWVudC5fbG9nRmx1c2hJZGxlVGltZW91dCk7XG4gICAgICB9KTtcblxuICAgICAgY2xpZW50Lm9uKCdhZnRlckNhcHR1cmVMb2cnLCBsb2cgPT4ge1xuICAgICAgICBjbGllbnQuX2xvZ1dlaWdodCArPSBlc3RpbWF0ZUxvZ1NpemVJbkJ5dGVzKGxvZyk7XG5cbiAgICAgICAgLy8gV2UgZmx1c2ggdGhlIGxvZ3MgYnVmZmVyIGlmIGl0IGV4Y2VlZHMgMC44IE1CXG4gICAgICAgIC8vIFRoZSBsb2cgd2VpZ2h0IGlzIGEgcm91Z2ggZXN0aW1hdGUsIHNvIHdlIGZsdXNoIHdheSBiZWZvcmVcbiAgICAgICAgLy8gdGhlIHBheWxvYWQgZ2V0cyB0b28gYmlnLlxuICAgICAgICBpZiAoY2xpZW50Ll9sb2dXZWlnaHQgPj0gODAwMDAwKSB7XG4gICAgICAgICAgX0lOVEVSTkFMX2ZsdXNoTG9nc0J1ZmZlcihjbGllbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHN0YXJ0IGFuIGlkbGUgdGltZW91dCB0byBmbHVzaCB0aGUgbG9ncyBidWZmZXIgaWYgbm8gbG9ncyBhcmUgY2FwdHVyZWQgZm9yIGEgd2hpbGVcbiAgICAgICAgICBjbGllbnQuX2xvZ0ZsdXNoSWRsZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIF9JTlRFUk5BTF9mbHVzaExvZ3NCdWZmZXIoY2xpZW50KTtcbiAgICAgICAgICB9LCBERUZBVUxUX0xPR19GTFVTSF9JTlRFUlZBTCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjbGllbnQub24oJ2ZsdXNoJywgKCkgPT4ge1xuICAgICAgICBfSU5URVJOQUxfZmx1c2hMb2dzQnVmZmVyKGNsaWVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBldmVudEZyb21FeGNlcHRpb24oZXhjZXB0aW9uLCBoaW50KSB7XG4gICAgY29uc3QgZXZlbnQgPSBldmVudEZyb21Vbmtub3duSW5wdXQodGhpcywgdGhpcy5fb3B0aW9ucy5zdGFja1BhcnNlciwgZXhjZXB0aW9uLCBoaW50KTtcbiAgICBldmVudC5sZXZlbCA9ICdlcnJvcic7XG5cbiAgICByZXR1cm4gcmVzb2x2ZWRTeW5jUHJvbWlzZShldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBldmVudEZyb21NZXNzYWdlKFxuICAgIG1lc3NhZ2UsXG4gICAgbGV2ZWwgPSAnaW5mbycsXG4gICAgaGludCxcbiAgKSB7XG4gICAgcmV0dXJuIHJlc29sdmVkU3luY1Byb21pc2UoXG4gICAgICBldmVudEZyb21NZXNzYWdlKHRoaXMuX29wdGlvbnMuc3RhY2tQYXJzZXIsIG1lc3NhZ2UsIGxldmVsLCBoaW50LCB0aGlzLl9vcHRpb25zLmF0dGFjaFN0YWNrdHJhY2UpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICBjYXB0dXJlRXhjZXB0aW9uKGV4Y2VwdGlvbiwgaGludCwgc2NvcGUpIHtcbiAgICBzZXRDdXJyZW50UmVxdWVzdFNlc3Npb25FcnJvcmVkT3JDcmFzaGVkKGhpbnQpO1xuICAgIHJldHVybiBzdXBlci5jYXB0dXJlRXhjZXB0aW9uKGV4Y2VwdGlvbiwgaGludCwgc2NvcGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgY2FwdHVyZUV2ZW50KGV2ZW50LCBoaW50LCBzY29wZSkge1xuICAgIC8vIElmIHRoZSBldmVudCBpcyBvZiB0eXBlIEV4Y2VwdGlvbiwgdGhlbiBhIHJlcXVlc3Qgc2Vzc2lvbiBzaG91bGQgYmUgY2FwdHVyZWRcbiAgICBjb25zdCBpc0V4Y2VwdGlvbiA9ICFldmVudC50eXBlICYmIGV2ZW50LmV4Y2VwdGlvbj8udmFsdWVzICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMubGVuZ3RoID4gMDtcbiAgICBpZiAoaXNFeGNlcHRpb24pIHtcbiAgICAgIHNldEN1cnJlbnRSZXF1ZXN0U2Vzc2lvbkVycm9yZWRPckNyYXNoZWQoaGludCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmNhcHR1cmVFdmVudChldmVudCwgaGludCwgc2NvcGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyb24gbW9uaXRvciBjaGVjayBpbiBhbmQgc2VuZCBpdCB0byBTZW50cnkuXG4gICAqXG4gICAqIEBwYXJhbSBjaGVja0luIEFuIG9iamVjdCB0aGF0IGRlc2NyaWJlcyBhIGNoZWNrIGluLlxuICAgKiBAcGFyYW0gdXBzZXJ0TW9uaXRvckNvbmZpZyBBbiBvcHRpb25hbCBvYmplY3QgdGhhdCBkZXNjcmliZXMgYSBtb25pdG9yIGNvbmZpZy4gVXNlIHRoaXMgaWYgeW91IHdhbnRcbiAgICogdG8gY3JlYXRlIGEgbW9uaXRvciBhdXRvbWF0aWNhbGx5IHdoZW4gc2VuZGluZyBhIGNoZWNrIGluLlxuICAgKi9cbiAgIGNhcHR1cmVDaGVja0luKGNoZWNrSW4sIG1vbml0b3JDb25maWcsIHNjb3BlKSB7XG4gICAgY29uc3QgaWQgPSAnY2hlY2tJbklkJyBpbiBjaGVja0luICYmIGNoZWNrSW4uY2hlY2tJbklkID8gY2hlY2tJbi5jaGVja0luSWQgOiB1dWlkNCgpO1xuICAgIGlmICghdGhpcy5faXNFbmFibGVkKCkpIHtcbiAgICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLndhcm4oJ1NESyBub3QgZW5hYmxlZCwgd2lsbCBub3QgY2FwdHVyZSBjaGVjay1pbi4nKTtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb25zKCk7XG4gICAgY29uc3QgeyByZWxlYXNlLCBlbnZpcm9ubWVudCwgdHVubmVsIH0gPSBvcHRpb25zO1xuXG4gICAgY29uc3Qgc2VyaWFsaXplZENoZWNrSW4gPSB7XG4gICAgICBjaGVja19pbl9pZDogaWQsXG4gICAgICBtb25pdG9yX3NsdWc6IGNoZWNrSW4ubW9uaXRvclNsdWcsXG4gICAgICBzdGF0dXM6IGNoZWNrSW4uc3RhdHVzLFxuICAgICAgcmVsZWFzZSxcbiAgICAgIGVudmlyb25tZW50LFxuICAgIH07XG5cbiAgICBpZiAoJ2R1cmF0aW9uJyBpbiBjaGVja0luKSB7XG4gICAgICBzZXJpYWxpemVkQ2hlY2tJbi5kdXJhdGlvbiA9IGNoZWNrSW4uZHVyYXRpb247XG4gICAgfVxuXG4gICAgaWYgKG1vbml0b3JDb25maWcpIHtcbiAgICAgIHNlcmlhbGl6ZWRDaGVja0luLm1vbml0b3JfY29uZmlnID0ge1xuICAgICAgICBzY2hlZHVsZTogbW9uaXRvckNvbmZpZy5zY2hlZHVsZSxcbiAgICAgICAgY2hlY2tpbl9tYXJnaW46IG1vbml0b3JDb25maWcuY2hlY2tpbk1hcmdpbixcbiAgICAgICAgbWF4X3J1bnRpbWU6IG1vbml0b3JDb25maWcubWF4UnVudGltZSxcbiAgICAgICAgdGltZXpvbmU6IG1vbml0b3JDb25maWcudGltZXpvbmUsXG4gICAgICAgIGZhaWx1cmVfaXNzdWVfdGhyZXNob2xkOiBtb25pdG9yQ29uZmlnLmZhaWx1cmVJc3N1ZVRocmVzaG9sZCxcbiAgICAgICAgcmVjb3ZlcnlfdGhyZXNob2xkOiBtb25pdG9yQ29uZmlnLnJlY292ZXJ5VGhyZXNob2xkLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBbZHluYW1pY1NhbXBsaW5nQ29udGV4dCwgdHJhY2VDb250ZXh0XSA9IF9nZXRUcmFjZUluZm9Gcm9tU2NvcGUodGhpcywgc2NvcGUpO1xuICAgIGlmICh0cmFjZUNvbnRleHQpIHtcbiAgICAgIHNlcmlhbGl6ZWRDaGVja0luLmNvbnRleHRzID0ge1xuICAgICAgICB0cmFjZTogdHJhY2VDb250ZXh0LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnZlbG9wZSA9IGNyZWF0ZUNoZWNrSW5FbnZlbG9wZShcbiAgICAgIHNlcmlhbGl6ZWRDaGVja0luLFxuICAgICAgZHluYW1pY1NhbXBsaW5nQ29udGV4dCxcbiAgICAgIHRoaXMuZ2V0U2RrTWV0YWRhdGEoKSxcbiAgICAgIHR1bm5lbCxcbiAgICAgIHRoaXMuZ2V0RHNuKCksXG4gICAgKTtcblxuICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLmxvZygnU2VuZGluZyBjaGVja2luOicsIGNoZWNrSW4ubW9uaXRvclNsdWcsIGNoZWNrSW4uc3RhdHVzKTtcblxuICAgIC8vIHNlbmRFbnZlbG9wZSBzaG91bGQgbm90IHRocm93XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgIHRoaXMuc2VuZEVudmVsb3BlKGVudmVsb3BlKTtcblxuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgIF9wcmVwYXJlRXZlbnQoXG4gICAgZXZlbnQsXG4gICAgaGludCxcbiAgICBjdXJyZW50U2NvcGUsXG4gICAgaXNvbGF0aW9uU2NvcGUsXG4gICkge1xuICAgIGlmICh0aGlzLl9vcHRpb25zLnBsYXRmb3JtKSB7XG4gICAgICBldmVudC5wbGF0Zm9ybSA9IGV2ZW50LnBsYXRmb3JtIHx8IHRoaXMuX29wdGlvbnMucGxhdGZvcm07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMucnVudGltZSkge1xuICAgICAgZXZlbnQuY29udGV4dHMgPSB7XG4gICAgICAgIC4uLmV2ZW50LmNvbnRleHRzLFxuICAgICAgICBydW50aW1lOiBldmVudC5jb250ZXh0cz8ucnVudGltZSB8fCB0aGlzLl9vcHRpb25zLnJ1bnRpbWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9vcHRpb25zLnNlcnZlck5hbWUpIHtcbiAgICAgIGV2ZW50LnNlcnZlcl9uYW1lID0gZXZlbnQuc2VydmVyX25hbWUgfHwgdGhpcy5fb3B0aW9ucy5zZXJ2ZXJOYW1lO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5fcHJlcGFyZUV2ZW50KGV2ZW50LCBoaW50LCBjdXJyZW50U2NvcGUsIGlzb2xhdGlvblNjb3BlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRDdXJyZW50UmVxdWVzdFNlc3Npb25FcnJvcmVkT3JDcmFzaGVkKGV2ZW50SGludCkge1xuICBjb25zdCByZXF1ZXN0U2Vzc2lvbiA9IGdldElzb2xhdGlvblNjb3BlKCkuZ2V0U2NvcGVEYXRhKCkuc2RrUHJvY2Vzc2luZ01ldGFkYXRhLnJlcXVlc3RTZXNzaW9uO1xuICBpZiAocmVxdWVzdFNlc3Npb24pIHtcbiAgICAvLyBXZSBtdXRhdGUgaW5zdGVhZCBvZiBkb2luZyBgc2V0U2RrUHJvY2Vzc2luZ01ldGFkYXRhYCBiZWNhdXNlIHRoZSBodHRwIGludGVncmF0aW9uIHN0b3JlcyBhd2F5IGEgcGFydGljdWxhclxuICAgIC8vIGlzb2xhdGlvblNjb3BlLiBJZiB0aGF0IGlzb2xhdGlvbiBzY29wZSBpcyBmb3JrZWQsIHNldHRpbmcgdGhlIHByb2Nlc3NpbmcgbWV0YWRhdGEgaGVyZSB3aWxsIG5vdCBtdXRhdGUgdGhlXG4gICAgLy8gb3JpZ2luYWwgaXNvbGF0aW9uIHNjb3BlIHRoYXQgdGhlIGh0dHAgaW50ZWdyYXRpb24gc3RvcmVkIGF3YXkuXG4gICAgY29uc3QgaXNIYW5kbGVkRXhjZXB0aW9uID0gZXZlbnRIaW50Py5tZWNoYW5pc20/LmhhbmRsZWQgPz8gdHJ1ZTtcbiAgICAvLyBBIHJlcXVlc3Qgc2Vzc2lvbiBjYW4gZ28gZnJvbSBcImVycm9yZWRcIiAtPiBcImNyYXNoZWRcIiBidXQgbm90IFwiY3Jhc2hlZFwiIC0+IFwiZXJyb3JlZFwiLlxuICAgIC8vIENyYXNoZWQgKHVuaGFuZGxlZCBleGNlcHRpb24pIGlzIHdvcnNlIHRoYW4gZXJyb3JlZCAoaGFuZGxlZCBleGNlcHRpb24pLlxuICAgIGlmIChpc0hhbmRsZWRFeGNlcHRpb24gJiYgcmVxdWVzdFNlc3Npb24uc3RhdHVzICE9PSAnY3Jhc2hlZCcpIHtcbiAgICAgIHJlcXVlc3RTZXNzaW9uLnN0YXR1cyA9ICdlcnJvcmVkJztcbiAgICB9IGVsc2UgaWYgKCFpc0hhbmRsZWRFeGNlcHRpb24pIHtcbiAgICAgIHJlcXVlc3RTZXNzaW9uLnN0YXR1cyA9ICdjcmFzaGVkJztcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBFc3RpbWF0ZSB0aGUgc2l6ZSBvZiBhIGxvZyBpbiBieXRlcy5cbiAqXG4gKiBAcGFyYW0gbG9nIC0gVGhlIGxvZyB0byBlc3RpbWF0ZSB0aGUgc2l6ZSBvZi5cbiAqIEByZXR1cm5zIFRoZSBlc3RpbWF0ZWQgc2l6ZSBvZiB0aGUgbG9nIGluIGJ5dGVzLlxuICovXG5mdW5jdGlvbiBlc3RpbWF0ZUxvZ1NpemVJbkJ5dGVzKGxvZykge1xuICBsZXQgd2VpZ2h0ID0gMDtcblxuICAvLyBFc3RpbWF0ZSBieXRlIHNpemUgb2YgMiBieXRlcyBwZXIgY2hhcmFjdGVyLiBUaGlzIGlzIGEgcm91Z2ggZXN0aW1hdGUgSlMgc3RyaW5ncyBhcmUgc3RvcmVkIGFzIFVURi0xNi5cbiAgaWYgKGxvZy5tZXNzYWdlKSB7XG4gICAgd2VpZ2h0ICs9IGxvZy5tZXNzYWdlLmxlbmd0aCAqIDI7XG4gIH1cblxuICBpZiAobG9nLmF0dHJpYnV0ZXMpIHtcbiAgICBPYmplY3QudmFsdWVzKGxvZy5hdHRyaWJ1dGVzKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB3ZWlnaHQgKz0gdmFsdWUubGVuZ3RoICogZXN0aW1hdGVQcmltaXRpdmVTaXplSW5CeXRlcyh2YWx1ZVswXSk7XG4gICAgICB9IGVsc2UgaWYgKGlzUHJpbWl0aXZlKHZhbHVlKSkge1xuICAgICAgICB3ZWlnaHQgKz0gZXN0aW1hdGVQcmltaXRpdmVTaXplSW5CeXRlcyh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb2JqZWN0cyB2YWx1ZXMsIHdlIGVzdGltYXRlIHRoZSBzaXplIG9mIHRoZSBvYmplY3QgYXMgMTAwIGJ5dGVzXG4gICAgICAgIHdlaWdodCArPSAxMDA7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gd2VpZ2h0O1xufVxuXG5mdW5jdGlvbiBlc3RpbWF0ZVByaW1pdGl2ZVNpemVJbkJ5dGVzKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlLmxlbmd0aCAqIDI7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiA4O1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIDQ7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuZXhwb3J0IHsgU2VydmVyUnVudGltZUNsaWVudCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VydmVyLXJ1bnRpbWUtY2xpZW50LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/server-runtime-client.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/session.js":
/*!***********************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/session.js ***!
  \***********************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   closeSession: () => (/* binding */ closeSession),\n/* harmony export */   makeSession: () => (/* binding */ makeSession),\n/* harmony export */   updateSession: () => (/* binding */ updateSession)\n/* harmony export */ });\n/* harmony import */ var _utils_misc_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/misc.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/misc.js\");\n/* harmony import */ var _utils_time_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/time.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/time.js\");\n\n\n\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nfunction makeSession(context) {\n  // Both timestamp and started are in seconds since the UNIX epoch.\n  const startingTime = (0,_utils_time_js__WEBPACK_IMPORTED_MODULE_1__.timestampInSeconds)();\n\n  const session = {\n    sid: (0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_0__.uuid4)(),\n    init: true,\n    timestamp: startingTime,\n    started: startingTime,\n    duration: 0,\n    status: 'ok',\n    errors: 0,\n    ignoreDuration: false,\n    toJSON: () => sessionToJSON(session),\n  };\n\n  if (context) {\n    updateSession(session, context);\n  }\n\n  return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see Client.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nfunction updateSession(session, context = {}) {\n  if (context.user) {\n    if (!session.ipAddress && context.user.ip_address) {\n      session.ipAddress = context.user.ip_address;\n    }\n\n    if (!session.did && !context.did) {\n      session.did = context.user.id || context.user.email || context.user.username;\n    }\n  }\n\n  session.timestamp = context.timestamp || (0,_utils_time_js__WEBPACK_IMPORTED_MODULE_1__.timestampInSeconds)();\n\n  if (context.abnormal_mechanism) {\n    session.abnormal_mechanism = context.abnormal_mechanism;\n  }\n\n  if (context.ignoreDuration) {\n    session.ignoreDuration = context.ignoreDuration;\n  }\n  if (context.sid) {\n    // Good enough uuid validation. — Kamil\n    session.sid = context.sid.length === 32 ? context.sid : (0,_utils_misc_js__WEBPACK_IMPORTED_MODULE_0__.uuid4)();\n  }\n  if (context.init !== undefined) {\n    session.init = context.init;\n  }\n  if (!session.did && context.did) {\n    session.did = `${context.did}`;\n  }\n  if (typeof context.started === 'number') {\n    session.started = context.started;\n  }\n  if (session.ignoreDuration) {\n    session.duration = undefined;\n  } else if (typeof context.duration === 'number') {\n    session.duration = context.duration;\n  } else {\n    const duration = session.timestamp - session.started;\n    session.duration = duration >= 0 ? duration : 0;\n  }\n  if (context.release) {\n    session.release = context.release;\n  }\n  if (context.environment) {\n    session.environment = context.environment;\n  }\n  if (!session.ipAddress && context.ipAddress) {\n    session.ipAddress = context.ipAddress;\n  }\n  if (!session.userAgent && context.userAgent) {\n    session.userAgent = context.userAgent;\n  }\n  if (typeof context.errors === 'number') {\n    session.errors = context.errors;\n  }\n  if (context.status) {\n    session.status = context.status;\n  }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n *               this function will keep the previously set status, unless it was `'ok'` in which case\n *               it is changed to `'exited'`.\n */\nfunction closeSession(session, status) {\n  let context = {};\n  if (status) {\n    context = { status };\n  } else if (session.status === 'ok') {\n    context = { status: 'exited' };\n  }\n\n  updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session) {\n  return {\n    sid: `${session.sid}`,\n    init: session.init,\n    // Make sure that sec is converted to ms for date constructor\n    started: new Date(session.started * 1000).toISOString(),\n    timestamp: new Date(session.timestamp * 1000).toISOString(),\n    status: session.status,\n    errors: session.errors,\n    did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n    duration: session.duration,\n    abnormal_mechanism: session.abnormal_mechanism,\n    attrs: {\n      release: session.release,\n      environment: session.environment,\n      ip_address: session.ipAddress,\n      user_agent: session.userAgent,\n    },\n  };\n}\n\n\n//# sourceMappingURL=session.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3Nlc3Npb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBd0M7QUFDYTs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsa0VBQWtCOztBQUV6QztBQUNBLFNBQVMscURBQUs7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJDQUEyQyxrRUFBa0I7O0FBRTdEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTRELHFEQUFLO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsWUFBWTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixJQUFJO0FBQ0osZ0JBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksWUFBWTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRkFBaUYsWUFBWTtBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVvRDtBQUNwRCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3Nlc3Npb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXVpZDQgfSBmcm9tICcuL3V0aWxzL21pc2MuanMnO1xuaW1wb3J0IHsgdGltZXN0YW1wSW5TZWNvbmRzIH0gZnJvbSAnLi91dGlscy90aW1lLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGBTZXNzaW9uYCBvYmplY3QgYnkgc2V0dGluZyBjZXJ0YWluIGRlZmF1bHQgcGFyYW1ldGVycy4gSWYgb3B0aW9uYWwgQHBhcmFtIGNvbnRleHRcbiAqIGlzIHBhc3NlZCwgdGhlIHBhc3NlZCBwcm9wZXJ0aWVzIGFyZSBhcHBsaWVkIHRvIHRoZSBzZXNzaW9uIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gY29udGV4dCAob3B0aW9uYWwpIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXR1cm5lZCBzZXNzaW9uIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIGEgbmV3IGBTZXNzaW9uYCBvYmplY3RcbiAqL1xuZnVuY3Rpb24gbWFrZVNlc3Npb24oY29udGV4dCkge1xuICAvLyBCb3RoIHRpbWVzdGFtcCBhbmQgc3RhcnRlZCBhcmUgaW4gc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaC5cbiAgY29uc3Qgc3RhcnRpbmdUaW1lID0gdGltZXN0YW1wSW5TZWNvbmRzKCk7XG5cbiAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICBzaWQ6IHV1aWQ0KCksXG4gICAgaW5pdDogdHJ1ZSxcbiAgICB0aW1lc3RhbXA6IHN0YXJ0aW5nVGltZSxcbiAgICBzdGFydGVkOiBzdGFydGluZ1RpbWUsXG4gICAgZHVyYXRpb246IDAsXG4gICAgc3RhdHVzOiAnb2snLFxuICAgIGVycm9yczogMCxcbiAgICBpZ25vcmVEdXJhdGlvbjogZmFsc2UsXG4gICAgdG9KU09OOiAoKSA9PiBzZXNzaW9uVG9KU09OKHNlc3Npb24pLFxuICB9O1xuXG4gIGlmIChjb250ZXh0KSB7XG4gICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzZXNzaW9uO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgYSBzZXNzaW9uIG9iamVjdCB3aXRoIHRoZSBwcm9wZXJ0aWVzIHBhc3NlZCBpbiB0aGUgY29udGV4dC5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBwYXNzZWQgb2JqZWN0IGFuZCByZXR1cm5zIHZvaWQuXG4gKiAoSGFkIHRvIGRvIHRoaXMgaW5zdGVhZCBvZiByZXR1cm5pbmcgYSBuZXcgYW5kIHVwZGF0ZWQgc2Vzc2lvbiBiZWNhdXNlIGNsb3NpbmcgYW5kIHNlbmRpbmcgYSBzZXNzaW9uXG4gKiBtYWtlcyBhbiB1cGRhdGUgdG8gdGhlIHNlc3Npb24gYWZ0ZXIgaXQgd2FzIHBhc3NlZCB0byB0aGUgc2VuZGluZyBsb2dpYy5cbiAqIEBzZWUgQ2xpZW50LmNhcHR1cmVTZXNzaW9uIClcbiAqXG4gKiBAcGFyYW0gc2Vzc2lvbiB0aGUgYFNlc3Npb25gIHRvIHVwZGF0ZVxuICogQHBhcmFtIGNvbnRleHQgdGhlIGBTZXNzaW9uQ29udGV4dGAgaG9sZGluZyB0aGUgcHJvcGVydGllcyB0aGF0IHNob3VsZCBiZSB1cGRhdGVkIGluIEBwYXJhbSBzZXNzaW9uXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiB1cGRhdGVTZXNzaW9uKHNlc3Npb24sIGNvbnRleHQgPSB7fSkge1xuICBpZiAoY29udGV4dC51c2VyKSB7XG4gICAgaWYgKCFzZXNzaW9uLmlwQWRkcmVzcyAmJiBjb250ZXh0LnVzZXIuaXBfYWRkcmVzcykge1xuICAgICAgc2Vzc2lvbi5pcEFkZHJlc3MgPSBjb250ZXh0LnVzZXIuaXBfYWRkcmVzcztcbiAgICB9XG5cbiAgICBpZiAoIXNlc3Npb24uZGlkICYmICFjb250ZXh0LmRpZCkge1xuICAgICAgc2Vzc2lvbi5kaWQgPSBjb250ZXh0LnVzZXIuaWQgfHwgY29udGV4dC51c2VyLmVtYWlsIHx8IGNvbnRleHQudXNlci51c2VybmFtZTtcbiAgICB9XG4gIH1cblxuICBzZXNzaW9uLnRpbWVzdGFtcCA9IGNvbnRleHQudGltZXN0YW1wIHx8IHRpbWVzdGFtcEluU2Vjb25kcygpO1xuXG4gIGlmIChjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbSkge1xuICAgIHNlc3Npb24uYWJub3JtYWxfbWVjaGFuaXNtID0gY29udGV4dC5hYm5vcm1hbF9tZWNoYW5pc207XG4gIH1cblxuICBpZiAoY29udGV4dC5pZ25vcmVEdXJhdGlvbikge1xuICAgIHNlc3Npb24uaWdub3JlRHVyYXRpb24gPSBjb250ZXh0Lmlnbm9yZUR1cmF0aW9uO1xuICB9XG4gIGlmIChjb250ZXh0LnNpZCkge1xuICAgIC8vIEdvb2QgZW5vdWdoIHV1aWQgdmFsaWRhdGlvbi4g4oCUIEthbWlsXG4gICAgc2Vzc2lvbi5zaWQgPSBjb250ZXh0LnNpZC5sZW5ndGggPT09IDMyID8gY29udGV4dC5zaWQgOiB1dWlkNCgpO1xuICB9XG4gIGlmIChjb250ZXh0LmluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgIHNlc3Npb24uaW5pdCA9IGNvbnRleHQuaW5pdDtcbiAgfVxuICBpZiAoIXNlc3Npb24uZGlkICYmIGNvbnRleHQuZGlkKSB7XG4gICAgc2Vzc2lvbi5kaWQgPSBgJHtjb250ZXh0LmRpZH1gO1xuICB9XG4gIGlmICh0eXBlb2YgY29udGV4dC5zdGFydGVkID09PSAnbnVtYmVyJykge1xuICAgIHNlc3Npb24uc3RhcnRlZCA9IGNvbnRleHQuc3RhcnRlZDtcbiAgfVxuICBpZiAoc2Vzc2lvbi5pZ25vcmVEdXJhdGlvbikge1xuICAgIHNlc3Npb24uZHVyYXRpb24gPSB1bmRlZmluZWQ7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRleHQuZHVyYXRpb24gPT09ICdudW1iZXInKSB7XG4gICAgc2Vzc2lvbi5kdXJhdGlvbiA9IGNvbnRleHQuZHVyYXRpb247XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZHVyYXRpb24gPSBzZXNzaW9uLnRpbWVzdGFtcCAtIHNlc3Npb24uc3RhcnRlZDtcbiAgICBzZXNzaW9uLmR1cmF0aW9uID0gZHVyYXRpb24gPj0gMCA/IGR1cmF0aW9uIDogMDtcbiAgfVxuICBpZiAoY29udGV4dC5yZWxlYXNlKSB7XG4gICAgc2Vzc2lvbi5yZWxlYXNlID0gY29udGV4dC5yZWxlYXNlO1xuICB9XG4gIGlmIChjb250ZXh0LmVudmlyb25tZW50KSB7XG4gICAgc2Vzc2lvbi5lbnZpcm9ubWVudCA9IGNvbnRleHQuZW52aXJvbm1lbnQ7XG4gIH1cbiAgaWYgKCFzZXNzaW9uLmlwQWRkcmVzcyAmJiBjb250ZXh0LmlwQWRkcmVzcykge1xuICAgIHNlc3Npb24uaXBBZGRyZXNzID0gY29udGV4dC5pcEFkZHJlc3M7XG4gIH1cbiAgaWYgKCFzZXNzaW9uLnVzZXJBZ2VudCAmJiBjb250ZXh0LnVzZXJBZ2VudCkge1xuICAgIHNlc3Npb24udXNlckFnZW50ID0gY29udGV4dC51c2VyQWdlbnQ7XG4gIH1cbiAgaWYgKHR5cGVvZiBjb250ZXh0LmVycm9ycyA9PT0gJ251bWJlcicpIHtcbiAgICBzZXNzaW9uLmVycm9ycyA9IGNvbnRleHQuZXJyb3JzO1xuICB9XG4gIGlmIChjb250ZXh0LnN0YXR1cykge1xuICAgIHNlc3Npb24uc3RhdHVzID0gY29udGV4dC5zdGF0dXM7XG4gIH1cbn1cblxuLyoqXG4gKiBDbG9zZXMgYSBzZXNzaW9uIGJ5IHNldHRpbmcgaXRzIHN0YXR1cyBhbmQgdXBkYXRpbmcgdGhlIHNlc3Npb24gb2JqZWN0IHdpdGggaXQuXG4gKiBJbnRlcm5hbGx5IGNhbGxzIGB1cGRhdGVTZXNzaW9uYCB0byB1cGRhdGUgdGhlIHBhc3NlZCBzZXNzaW9uIG9iamVjdC5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBwYXNzZWQgc2Vzc2lvbiAoQHNlZSB1cGRhdGVTZXNzaW9uIGZvciBleHBsYW5hdGlvbikuXG4gKlxuICogQHBhcmFtIHNlc3Npb24gdGhlIGBTZXNzaW9uYCBvYmplY3QgdG8gYmUgY2xvc2VkXG4gKiBAcGFyYW0gc3RhdHVzIHRoZSBgU2Vzc2lvblN0YXR1c2Agd2l0aCB3aGljaCB0aGUgc2Vzc2lvbiB3YXMgY2xvc2VkLiBJZiB5b3UgZG9uJ3QgcGFzcyBhIHN0YXR1cyxcbiAqICAgICAgICAgICAgICAgdGhpcyBmdW5jdGlvbiB3aWxsIGtlZXAgdGhlIHByZXZpb3VzbHkgc2V0IHN0YXR1cywgdW5sZXNzIGl0IHdhcyBgJ29rJ2AgaW4gd2hpY2ggY2FzZVxuICogICAgICAgICAgICAgICBpdCBpcyBjaGFuZ2VkIHRvIGAnZXhpdGVkJ2AuXG4gKi9cbmZ1bmN0aW9uIGNsb3NlU2Vzc2lvbihzZXNzaW9uLCBzdGF0dXMpIHtcbiAgbGV0IGNvbnRleHQgPSB7fTtcbiAgaWYgKHN0YXR1cykge1xuICAgIGNvbnRleHQgPSB7IHN0YXR1cyB9O1xuICB9IGVsc2UgaWYgKHNlc3Npb24uc3RhdHVzID09PSAnb2snKSB7XG4gICAgY29udGV4dCA9IHsgc3RhdHVzOiAnZXhpdGVkJyB9O1xuICB9XG5cbiAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0KTtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIGEgcGFzc2VkIHNlc3Npb24gb2JqZWN0IHRvIGEgSlNPTiBvYmplY3Qgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBzdHJ1Y3R1cmUuXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBTZW50cnkgYmFja2VuZCByZXF1aXJlcyBhIHNsaWdodGx5IGRpZmZlcmVudCBzY2hlbWEgb2YgYSBzZXNzaW9uXG4gKiB0aGFuIHRoZSBvbmUgdGhlIEpTIFNES3MgdXNlIGludGVybmFsbHkuXG4gKlxuICogQHBhcmFtIHNlc3Npb24gdGhlIHNlc3Npb24gdG8gYmUgY29udmVydGVkXG4gKlxuICogQHJldHVybnMgYSBKU09OIG9iamVjdCBvZiB0aGUgcGFzc2VkIHNlc3Npb25cbiAqL1xuZnVuY3Rpb24gc2Vzc2lvblRvSlNPTihzZXNzaW9uKSB7XG4gIHJldHVybiB7XG4gICAgc2lkOiBgJHtzZXNzaW9uLnNpZH1gLFxuICAgIGluaXQ6IHNlc3Npb24uaW5pdCxcbiAgICAvLyBNYWtlIHN1cmUgdGhhdCBzZWMgaXMgY29udmVydGVkIHRvIG1zIGZvciBkYXRlIGNvbnN0cnVjdG9yXG4gICAgc3RhcnRlZDogbmV3IERhdGUoc2Vzc2lvbi5zdGFydGVkICogMTAwMCkudG9JU09TdHJpbmcoKSxcbiAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKHNlc3Npb24udGltZXN0YW1wICogMTAwMCkudG9JU09TdHJpbmcoKSxcbiAgICBzdGF0dXM6IHNlc3Npb24uc3RhdHVzLFxuICAgIGVycm9yczogc2Vzc2lvbi5lcnJvcnMsXG4gICAgZGlkOiB0eXBlb2Ygc2Vzc2lvbi5kaWQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBzZXNzaW9uLmRpZCA9PT0gJ3N0cmluZycgPyBgJHtzZXNzaW9uLmRpZH1gIDogdW5kZWZpbmVkLFxuICAgIGR1cmF0aW9uOiBzZXNzaW9uLmR1cmF0aW9uLFxuICAgIGFibm9ybWFsX21lY2hhbmlzbTogc2Vzc2lvbi5hYm5vcm1hbF9tZWNoYW5pc20sXG4gICAgYXR0cnM6IHtcbiAgICAgIHJlbGVhc2U6IHNlc3Npb24ucmVsZWFzZSxcbiAgICAgIGVudmlyb25tZW50OiBzZXNzaW9uLmVudmlyb25tZW50LFxuICAgICAgaXBfYWRkcmVzczogc2Vzc2lvbi5pcEFkZHJlc3MsXG4gICAgICB1c2VyX2FnZW50OiBzZXNzaW9uLnVzZXJBZ2VudCxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgeyBjbG9zZVNlc3Npb24sIG1ha2VTZXNzaW9uLCB1cGRhdGVTZXNzaW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXNzaW9uLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/session.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js":
/*!**********************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js ***!
  \**********************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   freezeDscOnSpan: () => (/* binding */ freezeDscOnSpan),\n/* harmony export */   getDynamicSamplingContextFromClient: () => (/* binding */ getDynamicSamplingContextFromClient),\n/* harmony export */   getDynamicSamplingContextFromScope: () => (/* binding */ getDynamicSamplingContextFromScope),\n/* harmony export */   getDynamicSamplingContextFromSpan: () => (/* binding */ getDynamicSamplingContextFromSpan),\n/* harmony export */   spanToBaggageHeader: () => (/* binding */ spanToBaggageHeader)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/constants.js\");\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../semanticAttributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/semanticAttributes.js\");\n/* harmony import */ var _utils_baggage_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/baggage.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/baggage.js\");\n/* harmony import */ var _utils_dsn_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/dsn.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/dsn.js\");\n/* harmony import */ var _utils_hasSpansEnabled_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/hasSpansEnabled.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/hasSpansEnabled.js\");\n/* harmony import */ var _utils_object_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/object.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js\");\n/* harmony import */ var _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/spanUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/utils.js\");\n\n\n\n\n\n\n\n\n\n\n/**\n * If you change this value, also update the terser plugin config to\n * avoid minification of the object property!\n */\nconst FROZEN_DSC_FIELD = '_frozenDsc';\n\n/**\n * Freeze the given DSC on the given span.\n */\nfunction freezeDscOnSpan(span, dsc) {\n  const spanWithMaybeDsc = span ;\n  (0,_utils_object_js__WEBPACK_IMPORTED_MODULE_6__.addNonEnumerableProperty)(spanWithMaybeDsc, FROZEN_DSC_FIELD, dsc);\n}\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatches the `createDsc` lifecycle hook as a side effect.\n */\nfunction getDynamicSamplingContextFromClient(trace_id, client) {\n  const options = client.getOptions();\n\n  const { publicKey: public_key, host } = client.getDsn() || {};\n\n  let org_id;\n  if (options.orgId) {\n    org_id = String(options.orgId);\n  } else if (host) {\n    org_id = (0,_utils_dsn_js__WEBPACK_IMPORTED_MODULE_4__.extractOrgIdFromDsnHost)(host);\n  }\n\n  // Instead of conditionally adding non-undefined values, we add them and then remove them if needed\n  // otherwise, the order of baggage entries changes, which \"breaks\" a bunch of tests etc.\n  const dsc = {\n    environment: options.environment || _constants_js__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_ENVIRONMENT,\n    release: options.release,\n    public_key,\n    trace_id,\n    org_id,\n  };\n\n  client.emit('createDsc', dsc);\n\n  return dsc;\n}\n\n/**\n * Get the dynamic sampling context for the currently active scopes.\n */\nfunction getDynamicSamplingContextFromScope(client, scope) {\n  const propagationContext = scope.getPropagationContext();\n  return propagationContext.dsc || getDynamicSamplingContextFromClient(propagationContext.traceId, client);\n}\n\n/**\n * Creates a dynamic sampling context from a span (and client and scope)\n *\n * @param span the span from which a few values like the root span name and sample rate are extracted.\n *\n * @returns a dynamic sampling context\n */\nfunction getDynamicSamplingContextFromSpan(span) {\n  const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_1__.getClient)();\n  if (!client) {\n    return {};\n  }\n\n  const rootSpan = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_7__.getRootSpan)(span);\n  const rootSpanJson = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_7__.spanToJSON)(rootSpan);\n  const rootSpanAttributes = rootSpanJson.data;\n  const traceState = rootSpan.spanContext().traceState;\n\n  // The span sample rate that was locally applied to the root span should also always be applied to the DSC, even if the DSC is frozen.\n  // This is so that the downstream traces/services can use parentSampleRate in their `tracesSampler` to make consistent sampling decisions across the entire trace.\n  const rootSpanSampleRate =\n    traceState?.get('sentry.sample_rate') ??\n    rootSpanAttributes[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_2__.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE] ??\n    rootSpanAttributes[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_2__.SEMANTIC_ATTRIBUTE_SENTRY_PREVIOUS_TRACE_SAMPLE_RATE];\n\n  function applyLocalSampleRateToDsc(dsc) {\n    if (typeof rootSpanSampleRate === 'number' || typeof rootSpanSampleRate === 'string') {\n      dsc.sample_rate = `${rootSpanSampleRate}`;\n    }\n    return dsc;\n  }\n\n  // For core implementation, we freeze the DSC onto the span as a non-enumerable property\n  const frozenDsc = (rootSpan )[FROZEN_DSC_FIELD];\n  if (frozenDsc) {\n    return applyLocalSampleRateToDsc(frozenDsc);\n  }\n\n  // For OpenTelemetry, we freeze the DSC on the trace state\n  const traceStateDsc = traceState?.get('sentry.dsc');\n\n  // If the span has a DSC, we want it to take precedence\n  const dscOnTraceState = traceStateDsc && (0,_utils_baggage_js__WEBPACK_IMPORTED_MODULE_3__.baggageHeaderToDynamicSamplingContext)(traceStateDsc);\n\n  if (dscOnTraceState) {\n    return applyLocalSampleRateToDsc(dscOnTraceState);\n  }\n\n  // Else, we generate it from the span\n  const dsc = getDynamicSamplingContextFromClient(span.spanContext().traceId, client);\n\n  // We don't want to have a transaction name in the DSC if the source is \"url\" because URLs might contain PII\n  const source = rootSpanAttributes[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_2__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n  // after JSON conversion, txn.name becomes jsonSpan.description\n  const name = rootSpanJson.description;\n  if (source !== 'url' && name) {\n    dsc.transaction = name;\n  }\n\n  // How can we even land here with hasSpansEnabled() returning false?\n  // Otel creates a Non-recording span in Tracing Without Performance mode when handling incoming requests\n  // So we end up with an active span that is not sampled (neither positively nor negatively)\n  if ((0,_utils_hasSpansEnabled_js__WEBPACK_IMPORTED_MODULE_5__.hasSpansEnabled)()) {\n    dsc.sampled = String((0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_7__.spanIsSampled)(rootSpan));\n    dsc.sample_rand =\n      // In OTEL we store the sample rand on the trace state because we cannot access scopes for NonRecordingSpans\n      // The Sentry OTEL SpanSampler takes care of writing the sample rand on the root span\n      traceState?.get('sentry.sample_rand') ??\n      // On all other platforms we can actually get the scopes from a root span (we use this as a fallback)\n      (0,_utils_js__WEBPACK_IMPORTED_MODULE_8__.getCapturedScopesOnSpan)(rootSpan).scope?.getPropagationContext().sampleRand.toString();\n  }\n\n  applyLocalSampleRateToDsc(dsc);\n\n  client.emit('createDsc', dsc, rootSpan);\n\n  return dsc;\n}\n\n/**\n * Convert a Span to a baggage header.\n */\nfunction spanToBaggageHeader(span) {\n  const dsc = getDynamicSamplingContextFromSpan(span);\n  return (0,_utils_baggage_js__WEBPACK_IMPORTED_MODULE_3__.dynamicSamplingContextToSentryBaggageHeader)(dsc);\n}\n\n\n//# sourceMappingURL=dynamicSamplingContext.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYWNpbmcvZHluYW1pY1NhbXBsaW5nQ29udGV4dC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFzRDtBQUNOO0FBQ3lIO0FBQ2hEO0FBQy9EO0FBQ0k7QUFDQTtBQUNpQjtBQUMxQjs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSwwRUFBd0I7QUFDMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSw4QkFBOEI7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixhQUFhLHNFQUF1QjtBQUNwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsOERBQW1CO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDREQUFTO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsZ0VBQVc7QUFDOUIsdUJBQXVCLCtEQUFVO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIseUZBQXFDO0FBQzVELHVCQUF1Qix3R0FBb0Q7O0FBRTNFO0FBQ0E7QUFDQSwyQkFBMkIsbUJBQW1CO0FBQzlDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkMsd0ZBQXFDOztBQUVoRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyxvRkFBZ0M7O0FBRXBFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTSwwRUFBZTtBQUNyQix5QkFBeUIsa0VBQWE7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sa0VBQXVCO0FBQzdCOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsOEZBQTJDO0FBQ3BEOztBQUU0SjtBQUM1SiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYWNpbmcvZHluYW1pY1NhbXBsaW5nQ29udGV4dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUZBVUxUX0VOVklST05NRU5UIH0gZnJvbSAnLi4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGdldENsaWVudCB9IGZyb20gJy4uL2N1cnJlbnRTY29wZXMuanMnO1xuaW1wb3J0IHsgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TQU1QTEVfUkFURSwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9QUkVWSU9VU19UUkFDRV9TQU1QTEVfUkFURSwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0UgfSBmcm9tICcuLi9zZW1hbnRpY0F0dHJpYnV0ZXMuanMnO1xuaW1wb3J0IHsgYmFnZ2FnZUhlYWRlclRvRHluYW1pY1NhbXBsaW5nQ29udGV4dCwgZHluYW1pY1NhbXBsaW5nQ29udGV4dFRvU2VudHJ5QmFnZ2FnZUhlYWRlciB9IGZyb20gJy4uL3V0aWxzL2JhZ2dhZ2UuanMnO1xuaW1wb3J0IHsgZXh0cmFjdE9yZ0lkRnJvbURzbkhvc3QgfSBmcm9tICcuLi91dGlscy9kc24uanMnO1xuaW1wb3J0IHsgaGFzU3BhbnNFbmFibGVkIH0gZnJvbSAnLi4vdXRpbHMvaGFzU3BhbnNFbmFibGVkLmpzJztcbmltcG9ydCB7IGFkZE5vbkVudW1lcmFibGVQcm9wZXJ0eSB9IGZyb20gJy4uL3V0aWxzL29iamVjdC5qcyc7XG5pbXBvcnQgeyBnZXRSb290U3Bhbiwgc3BhblRvSlNPTiwgc3BhbklzU2FtcGxlZCB9IGZyb20gJy4uL3V0aWxzL3NwYW5VdGlscy5qcyc7XG5pbXBvcnQgeyBnZXRDYXB0dXJlZFNjb3Blc09uU3BhbiB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG4vKipcbiAqIElmIHlvdSBjaGFuZ2UgdGhpcyB2YWx1ZSwgYWxzbyB1cGRhdGUgdGhlIHRlcnNlciBwbHVnaW4gY29uZmlnIHRvXG4gKiBhdm9pZCBtaW5pZmljYXRpb24gb2YgdGhlIG9iamVjdCBwcm9wZXJ0eSFcbiAqL1xuY29uc3QgRlJPWkVOX0RTQ19GSUVMRCA9ICdfZnJvemVuRHNjJztcblxuLyoqXG4gKiBGcmVlemUgdGhlIGdpdmVuIERTQyBvbiB0aGUgZ2l2ZW4gc3Bhbi5cbiAqL1xuZnVuY3Rpb24gZnJlZXplRHNjT25TcGFuKHNwYW4sIGRzYykge1xuICBjb25zdCBzcGFuV2l0aE1heWJlRHNjID0gc3BhbiA7XG4gIGFkZE5vbkVudW1lcmFibGVQcm9wZXJ0eShzcGFuV2l0aE1heWJlRHNjLCBGUk9aRU5fRFNDX0ZJRUxELCBkc2MpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHQgZnJvbSBhIGNsaWVudC5cbiAqXG4gKiBEaXNwYXRjaGVzIHRoZSBgY3JlYXRlRHNjYCBsaWZlY3ljbGUgaG9vayBhcyBhIHNpZGUgZWZmZWN0LlxuICovXG5mdW5jdGlvbiBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbUNsaWVudCh0cmFjZV9pZCwgY2xpZW50KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBjbGllbnQuZ2V0T3B0aW9ucygpO1xuXG4gIGNvbnN0IHsgcHVibGljS2V5OiBwdWJsaWNfa2V5LCBob3N0IH0gPSBjbGllbnQuZ2V0RHNuKCkgfHwge307XG5cbiAgbGV0IG9yZ19pZDtcbiAgaWYgKG9wdGlvbnMub3JnSWQpIHtcbiAgICBvcmdfaWQgPSBTdHJpbmcob3B0aW9ucy5vcmdJZCk7XG4gIH0gZWxzZSBpZiAoaG9zdCkge1xuICAgIG9yZ19pZCA9IGV4dHJhY3RPcmdJZEZyb21Ec25Ib3N0KGhvc3QpO1xuICB9XG5cbiAgLy8gSW5zdGVhZCBvZiBjb25kaXRpb25hbGx5IGFkZGluZyBub24tdW5kZWZpbmVkIHZhbHVlcywgd2UgYWRkIHRoZW0gYW5kIHRoZW4gcmVtb3ZlIHRoZW0gaWYgbmVlZGVkXG4gIC8vIG90aGVyd2lzZSwgdGhlIG9yZGVyIG9mIGJhZ2dhZ2UgZW50cmllcyBjaGFuZ2VzLCB3aGljaCBcImJyZWFrc1wiIGEgYnVuY2ggb2YgdGVzdHMgZXRjLlxuICBjb25zdCBkc2MgPSB7XG4gICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQgfHwgREVGQVVMVF9FTlZJUk9OTUVOVCxcbiAgICByZWxlYXNlOiBvcHRpb25zLnJlbGVhc2UsXG4gICAgcHVibGljX2tleSxcbiAgICB0cmFjZV9pZCxcbiAgICBvcmdfaWQsXG4gIH07XG5cbiAgY2xpZW50LmVtaXQoJ2NyZWF0ZURzYycsIGRzYyk7XG5cbiAgcmV0dXJuIGRzYztcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGR5bmFtaWMgc2FtcGxpbmcgY29udGV4dCBmb3IgdGhlIGN1cnJlbnRseSBhY3RpdmUgc2NvcGVzLlxuICovXG5mdW5jdGlvbiBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNjb3BlKGNsaWVudCwgc2NvcGUpIHtcbiAgY29uc3QgcHJvcGFnYXRpb25Db250ZXh0ID0gc2NvcGUuZ2V0UHJvcGFnYXRpb25Db250ZXh0KCk7XG4gIHJldHVybiBwcm9wYWdhdGlvbkNvbnRleHQuZHNjIHx8IGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tQ2xpZW50KHByb3BhZ2F0aW9uQ29udGV4dC50cmFjZUlkLCBjbGllbnQpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBkeW5hbWljIHNhbXBsaW5nIGNvbnRleHQgZnJvbSBhIHNwYW4gKGFuZCBjbGllbnQgYW5kIHNjb3BlKVxuICpcbiAqIEBwYXJhbSBzcGFuIHRoZSBzcGFuIGZyb20gd2hpY2ggYSBmZXcgdmFsdWVzIGxpa2UgdGhlIHJvb3Qgc3BhbiBuYW1lIGFuZCBzYW1wbGUgcmF0ZSBhcmUgZXh0cmFjdGVkLlxuICpcbiAqIEByZXR1cm5zIGEgZHluYW1pYyBzYW1wbGluZyBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3BhbihzcGFuKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuICBpZiAoIWNsaWVudCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJvb3RTcGFuID0gZ2V0Um9vdFNwYW4oc3Bhbik7XG4gIGNvbnN0IHJvb3RTcGFuSnNvbiA9IHNwYW5Ub0pTT04ocm9vdFNwYW4pO1xuICBjb25zdCByb290U3BhbkF0dHJpYnV0ZXMgPSByb290U3Bhbkpzb24uZGF0YTtcbiAgY29uc3QgdHJhY2VTdGF0ZSA9IHJvb3RTcGFuLnNwYW5Db250ZXh0KCkudHJhY2VTdGF0ZTtcblxuICAvLyBUaGUgc3BhbiBzYW1wbGUgcmF0ZSB0aGF0IHdhcyBsb2NhbGx5IGFwcGxpZWQgdG8gdGhlIHJvb3Qgc3BhbiBzaG91bGQgYWxzbyBhbHdheXMgYmUgYXBwbGllZCB0byB0aGUgRFNDLCBldmVuIGlmIHRoZSBEU0MgaXMgZnJvemVuLlxuICAvLyBUaGlzIGlzIHNvIHRoYXQgdGhlIGRvd25zdHJlYW0gdHJhY2VzL3NlcnZpY2VzIGNhbiB1c2UgcGFyZW50U2FtcGxlUmF0ZSBpbiB0aGVpciBgdHJhY2VzU2FtcGxlcmAgdG8gbWFrZSBjb25zaXN0ZW50IHNhbXBsaW5nIGRlY2lzaW9ucyBhY3Jvc3MgdGhlIGVudGlyZSB0cmFjZS5cbiAgY29uc3Qgcm9vdFNwYW5TYW1wbGVSYXRlID1cbiAgICB0cmFjZVN0YXRlPy5nZXQoJ3NlbnRyeS5zYW1wbGVfcmF0ZScpID8/XG4gICAgcm9vdFNwYW5BdHRyaWJ1dGVzW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU0FNUExFX1JBVEVdID8/XG4gICAgcm9vdFNwYW5BdHRyaWJ1dGVzW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfUFJFVklPVVNfVFJBQ0VfU0FNUExFX1JBVEVdO1xuXG4gIGZ1bmN0aW9uIGFwcGx5TG9jYWxTYW1wbGVSYXRlVG9Ec2MoZHNjKSB7XG4gICAgaWYgKHR5cGVvZiByb290U3BhblNhbXBsZVJhdGUgPT09ICdudW1iZXInIHx8IHR5cGVvZiByb290U3BhblNhbXBsZVJhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkc2Muc2FtcGxlX3JhdGUgPSBgJHtyb290U3BhblNhbXBsZVJhdGV9YDtcbiAgICB9XG4gICAgcmV0dXJuIGRzYztcbiAgfVxuXG4gIC8vIEZvciBjb3JlIGltcGxlbWVudGF0aW9uLCB3ZSBmcmVlemUgdGhlIERTQyBvbnRvIHRoZSBzcGFuIGFzIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcbiAgY29uc3QgZnJvemVuRHNjID0gKHJvb3RTcGFuIClbRlJPWkVOX0RTQ19GSUVMRF07XG4gIGlmIChmcm96ZW5Ec2MpIHtcbiAgICByZXR1cm4gYXBwbHlMb2NhbFNhbXBsZVJhdGVUb0RzYyhmcm96ZW5Ec2MpO1xuICB9XG5cbiAgLy8gRm9yIE9wZW5UZWxlbWV0cnksIHdlIGZyZWV6ZSB0aGUgRFNDIG9uIHRoZSB0cmFjZSBzdGF0ZVxuICBjb25zdCB0cmFjZVN0YXRlRHNjID0gdHJhY2VTdGF0ZT8uZ2V0KCdzZW50cnkuZHNjJyk7XG5cbiAgLy8gSWYgdGhlIHNwYW4gaGFzIGEgRFNDLCB3ZSB3YW50IGl0IHRvIHRha2UgcHJlY2VkZW5jZVxuICBjb25zdCBkc2NPblRyYWNlU3RhdGUgPSB0cmFjZVN0YXRlRHNjICYmIGJhZ2dhZ2VIZWFkZXJUb0R5bmFtaWNTYW1wbGluZ0NvbnRleHQodHJhY2VTdGF0ZURzYyk7XG5cbiAgaWYgKGRzY09uVHJhY2VTdGF0ZSkge1xuICAgIHJldHVybiBhcHBseUxvY2FsU2FtcGxlUmF0ZVRvRHNjKGRzY09uVHJhY2VTdGF0ZSk7XG4gIH1cblxuICAvLyBFbHNlLCB3ZSBnZW5lcmF0ZSBpdCBmcm9tIHRoZSBzcGFuXG4gIGNvbnN0IGRzYyA9IGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tQ2xpZW50KHNwYW4uc3BhbkNvbnRleHQoKS50cmFjZUlkLCBjbGllbnQpO1xuXG4gIC8vIFdlIGRvbid0IHdhbnQgdG8gaGF2ZSBhIHRyYW5zYWN0aW9uIG5hbWUgaW4gdGhlIERTQyBpZiB0aGUgc291cmNlIGlzIFwidXJsXCIgYmVjYXVzZSBVUkxzIG1pZ2h0IGNvbnRhaW4gUElJXG4gIGNvbnN0IHNvdXJjZSA9IHJvb3RTcGFuQXR0cmlidXRlc1tTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV07XG5cbiAgLy8gYWZ0ZXIgSlNPTiBjb252ZXJzaW9uLCB0eG4ubmFtZSBiZWNvbWVzIGpzb25TcGFuLmRlc2NyaXB0aW9uXG4gIGNvbnN0IG5hbWUgPSByb290U3Bhbkpzb24uZGVzY3JpcHRpb247XG4gIGlmIChzb3VyY2UgIT09ICd1cmwnICYmIG5hbWUpIHtcbiAgICBkc2MudHJhbnNhY3Rpb24gPSBuYW1lO1xuICB9XG5cbiAgLy8gSG93IGNhbiB3ZSBldmVuIGxhbmQgaGVyZSB3aXRoIGhhc1NwYW5zRW5hYmxlZCgpIHJldHVybmluZyBmYWxzZT9cbiAgLy8gT3RlbCBjcmVhdGVzIGEgTm9uLXJlY29yZGluZyBzcGFuIGluIFRyYWNpbmcgV2l0aG91dCBQZXJmb3JtYW5jZSBtb2RlIHdoZW4gaGFuZGxpbmcgaW5jb21pbmcgcmVxdWVzdHNcbiAgLy8gU28gd2UgZW5kIHVwIHdpdGggYW4gYWN0aXZlIHNwYW4gdGhhdCBpcyBub3Qgc2FtcGxlZCAobmVpdGhlciBwb3NpdGl2ZWx5IG5vciBuZWdhdGl2ZWx5KVxuICBpZiAoaGFzU3BhbnNFbmFibGVkKCkpIHtcbiAgICBkc2Muc2FtcGxlZCA9IFN0cmluZyhzcGFuSXNTYW1wbGVkKHJvb3RTcGFuKSk7XG4gICAgZHNjLnNhbXBsZV9yYW5kID1cbiAgICAgIC8vIEluIE9URUwgd2Ugc3RvcmUgdGhlIHNhbXBsZSByYW5kIG9uIHRoZSB0cmFjZSBzdGF0ZSBiZWNhdXNlIHdlIGNhbm5vdCBhY2Nlc3Mgc2NvcGVzIGZvciBOb25SZWNvcmRpbmdTcGFuc1xuICAgICAgLy8gVGhlIFNlbnRyeSBPVEVMIFNwYW5TYW1wbGVyIHRha2VzIGNhcmUgb2Ygd3JpdGluZyB0aGUgc2FtcGxlIHJhbmQgb24gdGhlIHJvb3Qgc3BhblxuICAgICAgdHJhY2VTdGF0ZT8uZ2V0KCdzZW50cnkuc2FtcGxlX3JhbmQnKSA/P1xuICAgICAgLy8gT24gYWxsIG90aGVyIHBsYXRmb3JtcyB3ZSBjYW4gYWN0dWFsbHkgZ2V0IHRoZSBzY29wZXMgZnJvbSBhIHJvb3Qgc3BhbiAod2UgdXNlIHRoaXMgYXMgYSBmYWxsYmFjaylcbiAgICAgIGdldENhcHR1cmVkU2NvcGVzT25TcGFuKHJvb3RTcGFuKS5zY29wZT8uZ2V0UHJvcGFnYXRpb25Db250ZXh0KCkuc2FtcGxlUmFuZC50b1N0cmluZygpO1xuICB9XG5cbiAgYXBwbHlMb2NhbFNhbXBsZVJhdGVUb0RzYyhkc2MpO1xuXG4gIGNsaWVudC5lbWl0KCdjcmVhdGVEc2MnLCBkc2MsIHJvb3RTcGFuKTtcblxuICByZXR1cm4gZHNjO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBTcGFuIHRvIGEgYmFnZ2FnZSBoZWFkZXIuXG4gKi9cbmZ1bmN0aW9uIHNwYW5Ub0JhZ2dhZ2VIZWFkZXIoc3Bhbikge1xuICBjb25zdCBkc2MgPSBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4oc3Bhbik7XG4gIHJldHVybiBkeW5hbWljU2FtcGxpbmdDb250ZXh0VG9TZW50cnlCYWdnYWdlSGVhZGVyKGRzYyk7XG59XG5cbmV4cG9ydCB7IGZyZWV6ZURzY09uU3BhbiwgZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21DbGllbnQsIGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU2NvcGUsIGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3Bhbiwgc3BhblRvQmFnZ2FnZUhlYWRlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZHluYW1pY1NhbXBsaW5nQ29udGV4dC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/errors.js":
/*!******************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/errors.js ***!
  \******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   registerSpanErrorInstrumentation: () => (/* binding */ registerSpanErrorInstrumentation)\n/* harmony export */ });\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _instrument_globalError_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../instrument/globalError.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/globalError.js\");\n/* harmony import */ var _instrument_globalUnhandledRejection_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../instrument/globalUnhandledRejection.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/instrument/globalUnhandledRejection.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/spanUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js\");\n/* harmony import */ var _spanstatus_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./spanstatus.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/spanstatus.js\");\n\n\n\n\n\n\n\nlet errorsInstrumented = false;\n\n/**\n * Ensure that global errors automatically set the active span status.\n */\nfunction registerSpanErrorInstrumentation() {\n  if (errorsInstrumented) {\n    return;\n  }\n\n  /**\n   * If an error or unhandled promise occurs, we mark the active root span as failed\n   */\n  function errorCallback() {\n    const activeSpan = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_4__.getActiveSpan)();\n    const rootSpan = activeSpan && (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_4__.getRootSpan)(activeSpan);\n    if (rootSpan) {\n      const message = 'internal_error';\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_3__.debug.log(`[Tracing] Root span: ${message} -> Global error occurred`);\n      rootSpan.setStatus({ code: _spanstatus_js__WEBPACK_IMPORTED_MODULE_5__.SPAN_STATUS_ERROR, message });\n    }\n  }\n\n  // The function name will be lost when bundling but we need to be able to identify this listener later to maintain the\n  // node.js default exit behaviour\n  errorCallback.tag = 'sentry_tracingErrorCallback';\n\n  errorsInstrumented = true;\n  (0,_instrument_globalError_js__WEBPACK_IMPORTED_MODULE_1__.addGlobalErrorInstrumentationHandler)(errorCallback);\n  (0,_instrument_globalUnhandledRejection_js__WEBPACK_IMPORTED_MODULE_2__.addGlobalUnhandledRejectionInstrumentationHandler)(errorCallback);\n}\n\n\n//# sourceMappingURL=errors.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYWNpbmcvZXJyb3JzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBZ0Q7QUFDb0M7QUFDMEI7QUFDN0Q7QUFDa0I7QUFDZjs7QUFFcEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsa0VBQWE7QUFDcEMsbUNBQW1DLGdFQUFXO0FBQzlDO0FBQ0E7QUFDQSxNQUFNLHdEQUFXLElBQUkseURBQUssNkJBQTZCLFNBQVM7QUFDaEUsMkJBQTJCLE1BQU0sNkRBQWlCLFdBQVc7QUFDN0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFLGdHQUFvQztBQUN0QyxFQUFFLDBIQUFpRDtBQUNuRDs7QUFFNEM7QUFDNUMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS90cmFjaW5nL2Vycm9ycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4uL2RlYnVnLWJ1aWxkLmpzJztcbmltcG9ydCB7IGFkZEdsb2JhbEVycm9ySW5zdHJ1bWVudGF0aW9uSGFuZGxlciB9IGZyb20gJy4uL2luc3RydW1lbnQvZ2xvYmFsRXJyb3IuanMnO1xuaW1wb3J0IHsgYWRkR2xvYmFsVW5oYW5kbGVkUmVqZWN0aW9uSW5zdHJ1bWVudGF0aW9uSGFuZGxlciB9IGZyb20gJy4uL2luc3RydW1lbnQvZ2xvYmFsVW5oYW5kbGVkUmVqZWN0aW9uLmpzJztcbmltcG9ydCB7IGRlYnVnIH0gZnJvbSAnLi4vdXRpbHMvZGVidWctbG9nZ2VyLmpzJztcbmltcG9ydCB7IGdldEFjdGl2ZVNwYW4sIGdldFJvb3RTcGFuIH0gZnJvbSAnLi4vdXRpbHMvc3BhblV0aWxzLmpzJztcbmltcG9ydCB7IFNQQU5fU1RBVFVTX0VSUk9SIH0gZnJvbSAnLi9zcGFuc3RhdHVzLmpzJztcblxubGV0IGVycm9yc0luc3RydW1lbnRlZCA9IGZhbHNlO1xuXG4vKipcbiAqIEVuc3VyZSB0aGF0IGdsb2JhbCBlcnJvcnMgYXV0b21hdGljYWxseSBzZXQgdGhlIGFjdGl2ZSBzcGFuIHN0YXR1cy5cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJTcGFuRXJyb3JJbnN0cnVtZW50YXRpb24oKSB7XG4gIGlmIChlcnJvcnNJbnN0cnVtZW50ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogSWYgYW4gZXJyb3Igb3IgdW5oYW5kbGVkIHByb21pc2Ugb2NjdXJzLCB3ZSBtYXJrIHRoZSBhY3RpdmUgcm9vdCBzcGFuIGFzIGZhaWxlZFxuICAgKi9cbiAgZnVuY3Rpb24gZXJyb3JDYWxsYmFjaygpIHtcbiAgICBjb25zdCBhY3RpdmVTcGFuID0gZ2V0QWN0aXZlU3BhbigpO1xuICAgIGNvbnN0IHJvb3RTcGFuID0gYWN0aXZlU3BhbiAmJiBnZXRSb290U3BhbihhY3RpdmVTcGFuKTtcbiAgICBpZiAocm9vdFNwYW4pIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnaW50ZXJuYWxfZXJyb3InO1xuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKGBbVHJhY2luZ10gUm9vdCBzcGFuOiAke21lc3NhZ2V9IC0+IEdsb2JhbCBlcnJvciBvY2N1cnJlZGApO1xuICAgICAgcm9vdFNwYW4uc2V0U3RhdHVzKHsgY29kZTogU1BBTl9TVEFUVVNfRVJST1IsIG1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVGhlIGZ1bmN0aW9uIG5hbWUgd2lsbCBiZSBsb3N0IHdoZW4gYnVuZGxpbmcgYnV0IHdlIG5lZWQgdG8gYmUgYWJsZSB0byBpZGVudGlmeSB0aGlzIGxpc3RlbmVyIGxhdGVyIHRvIG1haW50YWluIHRoZVxuICAvLyBub2RlLmpzIGRlZmF1bHQgZXhpdCBiZWhhdmlvdXJcbiAgZXJyb3JDYWxsYmFjay50YWcgPSAnc2VudHJ5X3RyYWNpbmdFcnJvckNhbGxiYWNrJztcblxuICBlcnJvcnNJbnN0cnVtZW50ZWQgPSB0cnVlO1xuICBhZGRHbG9iYWxFcnJvckluc3RydW1lbnRhdGlvbkhhbmRsZXIoZXJyb3JDYWxsYmFjayk7XG4gIGFkZEdsb2JhbFVuaGFuZGxlZFJlamVjdGlvbkluc3RydW1lbnRhdGlvbkhhbmRsZXIoZXJyb3JDYWxsYmFjayk7XG59XG5cbmV4cG9ydCB7IHJlZ2lzdGVyU3BhbkVycm9ySW5zdHJ1bWVudGF0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvcnMuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/errors.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/idleSpan.js":
/*!********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/idleSpan.js ***!
  \********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   TRACING_DEFAULTS: () => (/* binding */ TRACING_DEFAULTS),\n/* harmony export */   startIdleSpan: () => (/* binding */ startIdleSpan)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../semanticAttributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/semanticAttributes.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_hasSpansEnabled_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/hasSpansEnabled.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/hasSpansEnabled.js\");\n/* harmony import */ var _utils_spanOnScope_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/spanOnScope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanOnScope.js\");\n/* harmony import */ var _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/spanUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js\");\n/* harmony import */ var _utils_time_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/time.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/time.js\");\n/* harmony import */ var _dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./dynamicSamplingContext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js\");\n/* harmony import */ var _sentryNonRecordingSpan_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./sentryNonRecordingSpan.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/sentryNonRecordingSpan.js\");\n/* harmony import */ var _sentrySpan_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./sentrySpan.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/sentrySpan.js\");\n/* harmony import */ var _spanstatus_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./spanstatus.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/spanstatus.js\");\n/* harmony import */ var _trace_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./trace.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/trace.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst TRACING_DEFAULTS = {\n  idleTimeout: 1000,\n  finalTimeout: 30000,\n  childSpanTimeout: 15000,\n};\n\nconst FINISH_REASON_HEARTBEAT_FAILED = 'heartbeatFailed';\nconst FINISH_REASON_IDLE_TIMEOUT = 'idleTimeout';\nconst FINISH_REASON_FINAL_TIMEOUT = 'finalTimeout';\nconst FINISH_REASON_EXTERNAL_FINISH = 'externalFinish';\n\n/**\n * An idle span is a span that automatically finishes. It does this by tracking child spans as activities.\n * An idle span is always the active span.\n */\nfunction startIdleSpan(startSpanOptions, options = {}) {\n  // Activities store a list of active spans\n  const activities = new Map();\n\n  // We should not use heartbeat if we finished a span\n  let _finished = false;\n\n  // Timer that tracks idleTimeout\n  let _idleTimeoutID;\n\n  // The reason why the span was finished\n  let _finishReason = FINISH_REASON_EXTERNAL_FINISH;\n\n  let _autoFinishAllowed = !options.disableAutoFinish;\n\n  const _cleanupHooks = [];\n\n  const {\n    idleTimeout = TRACING_DEFAULTS.idleTimeout,\n    finalTimeout = TRACING_DEFAULTS.finalTimeout,\n    childSpanTimeout = TRACING_DEFAULTS.childSpanTimeout,\n    beforeSpanEnd,\n  } = options;\n\n  const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n\n  if (!client || !(0,_utils_hasSpansEnabled_js__WEBPACK_IMPORTED_MODULE_4__.hasSpansEnabled)()) {\n    const span = new _sentryNonRecordingSpan_js__WEBPACK_IMPORTED_MODULE_9__.SentryNonRecordingSpan();\n\n    const dsc = {\n      sample_rate: '0',\n      sampled: 'false',\n      ...(0,_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_8__.getDynamicSamplingContextFromSpan)(span),\n    } ;\n    (0,_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_8__.freezeDscOnSpan)(span, dsc);\n\n    return span;\n  }\n\n  const scope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n  const previousActiveSpan = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.getActiveSpan)();\n  const span = _startIdleSpan(startSpanOptions);\n\n  // We patch span.end to ensure we can run some things before the span is ended\n  // eslint-disable-next-line @typescript-eslint/unbound-method\n  span.end = new Proxy(span.end, {\n    apply(target, thisArg, args) {\n      if (beforeSpanEnd) {\n        beforeSpanEnd(span);\n      }\n\n      // If the span is non-recording, nothing more to do here...\n      // This is the case if tracing is enabled but this specific span was not sampled\n      if (thisArg instanceof _sentryNonRecordingSpan_js__WEBPACK_IMPORTED_MODULE_9__.SentryNonRecordingSpan) {\n        return;\n      }\n\n      // Just ensuring that this keeps working, even if we ever have more arguments here\n      const [definedEndTimestamp, ...rest] = args;\n      const timestamp = definedEndTimestamp || (0,_utils_time_js__WEBPACK_IMPORTED_MODULE_7__.timestampInSeconds)();\n      const spanEndTimestamp = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.spanTimeInputToSeconds)(timestamp);\n\n      // Ensure we end with the last span timestamp, if possible\n      const spans = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.getSpanDescendants)(span).filter(child => child !== span);\n\n      // If we have no spans, we just end, nothing else to do here\n      if (!spans.length) {\n        onIdleSpanEnded(spanEndTimestamp);\n        return Reflect.apply(target, thisArg, [spanEndTimestamp, ...rest]);\n      }\n\n      const childEndTimestamps = spans\n        .map(span => (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.spanToJSON)(span).timestamp)\n        .filter(timestamp => !!timestamp) ;\n      const latestSpanEndTimestamp = childEndTimestamps.length ? Math.max(...childEndTimestamps) : undefined;\n\n      // In reality this should always exist here, but type-wise it may be undefined...\n      const spanStartTimestamp = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.spanToJSON)(span).start_timestamp;\n\n      // The final endTimestamp should:\n      // * Never be before the span start timestamp\n      // * Be the latestSpanEndTimestamp, if there is one, and it is smaller than the passed span end timestamp\n      // * Otherwise be the passed end timestamp\n      // Final timestamp can never be after finalTimeout\n      const endTimestamp = Math.min(\n        spanStartTimestamp ? spanStartTimestamp + finalTimeout / 1000 : Infinity,\n        Math.max(spanStartTimestamp || -Infinity, Math.min(spanEndTimestamp, latestSpanEndTimestamp || Infinity)),\n      );\n\n      onIdleSpanEnded(endTimestamp);\n      return Reflect.apply(target, thisArg, [endTimestamp, ...rest]);\n    },\n  });\n\n  /**\n   * Cancels the existing idle timeout, if there is one.\n   */\n  function _cancelIdleTimeout() {\n    if (_idleTimeoutID) {\n      clearTimeout(_idleTimeoutID);\n      _idleTimeoutID = undefined;\n    }\n  }\n\n  /**\n   * Restarts idle timeout, if there is no running idle timeout it will start one.\n   */\n  function _restartIdleTimeout(endTimestamp) {\n    _cancelIdleTimeout();\n    _idleTimeoutID = setTimeout(() => {\n      if (!_finished && activities.size === 0 && _autoFinishAllowed) {\n        _finishReason = FINISH_REASON_IDLE_TIMEOUT;\n        span.end(endTimestamp);\n      }\n    }, idleTimeout);\n  }\n\n  /**\n   * Restarts child span timeout, if there is none running it will start one.\n   */\n  function _restartChildSpanTimeout(endTimestamp) {\n    _idleTimeoutID = setTimeout(() => {\n      if (!_finished && _autoFinishAllowed) {\n        _finishReason = FINISH_REASON_HEARTBEAT_FAILED;\n        span.end(endTimestamp);\n      }\n    }, childSpanTimeout);\n  }\n\n  /**\n   * Start tracking a specific activity.\n   * @param spanId The span id that represents the activity\n   */\n  function _pushActivity(spanId) {\n    _cancelIdleTimeout();\n    activities.set(spanId, true);\n\n    const endTimestamp = (0,_utils_time_js__WEBPACK_IMPORTED_MODULE_7__.timestampInSeconds)();\n    // We need to add the timeout here to have the real endtimestamp of the idle span\n    // Remember timestampInSeconds is in seconds, timeout is in ms\n    _restartChildSpanTimeout(endTimestamp + childSpanTimeout / 1000);\n  }\n\n  /**\n   * Remove an activity from usage\n   * @param spanId The span id that represents the activity\n   */\n  function _popActivity(spanId) {\n    if (activities.has(spanId)) {\n      activities.delete(spanId);\n    }\n\n    if (activities.size === 0) {\n      const endTimestamp = (0,_utils_time_js__WEBPACK_IMPORTED_MODULE_7__.timestampInSeconds)();\n      // We need to add the timeout here to have the real endtimestamp of the idle span\n      // Remember timestampInSeconds is in seconds, timeout is in ms\n      _restartIdleTimeout(endTimestamp + idleTimeout / 1000);\n    }\n  }\n\n  function onIdleSpanEnded(endTimestamp) {\n    _finished = true;\n    activities.clear();\n\n    _cleanupHooks.forEach(cleanup => cleanup());\n\n    (0,_utils_spanOnScope_js__WEBPACK_IMPORTED_MODULE_5__._setSpanForScope)(scope, previousActiveSpan);\n\n    const spanJSON = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.spanToJSON)(span);\n\n    const { start_timestamp: startTimestamp } = spanJSON;\n    // This should never happen, but to make TS happy...\n    if (!startTimestamp) {\n      return;\n    }\n\n    const attributes = spanJSON.data;\n    if (!attributes[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_2__.SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON]) {\n      span.setAttribute(_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_2__.SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, _finishReason);\n    }\n\n    _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_3__.debug.log(`[Tracing] Idle span \"${spanJSON.op}\" finished`);\n\n    const childSpans = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.getSpanDescendants)(span).filter(child => child !== span);\n\n    let discardedSpans = 0;\n    childSpans.forEach(childSpan => {\n      // We cancel all pending spans with status \"cancelled\" to indicate the idle span was finished early\n      if (childSpan.isRecording()) {\n        childSpan.setStatus({ code: _spanstatus_js__WEBPACK_IMPORTED_MODULE_11__.SPAN_STATUS_ERROR, message: 'cancelled' });\n        childSpan.end(endTimestamp);\n        _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD &&\n          _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_3__.debug.log('[Tracing] Cancelling span since span ended early', JSON.stringify(childSpan, undefined, 2));\n      }\n\n      const childSpanJSON = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.spanToJSON)(childSpan);\n      const { timestamp: childEndTimestamp = 0, start_timestamp: childStartTimestamp = 0 } = childSpanJSON;\n\n      const spanStartedBeforeIdleSpanEnd = childStartTimestamp <= endTimestamp;\n\n      // Add a delta with idle timeout so that we prevent false positives\n      const timeoutWithMarginOfError = (finalTimeout + idleTimeout) / 1000;\n      const spanEndedBeforeFinalTimeout = childEndTimestamp - childStartTimestamp <= timeoutWithMarginOfError;\n\n      if (_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n        const stringifiedSpan = JSON.stringify(childSpan, undefined, 2);\n        if (!spanStartedBeforeIdleSpanEnd) {\n          _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_3__.debug.log('[Tracing] Discarding span since it happened after idle span was finished', stringifiedSpan);\n        } else if (!spanEndedBeforeFinalTimeout) {\n          _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_3__.debug.log('[Tracing] Discarding span since it finished after idle span final timeout', stringifiedSpan);\n        }\n      }\n\n      if (!spanEndedBeforeFinalTimeout || !spanStartedBeforeIdleSpanEnd) {\n        (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.removeChildSpanFromSpan)(span, childSpan);\n        discardedSpans++;\n      }\n    });\n\n    if (discardedSpans > 0) {\n      span.setAttribute('sentry.idle_span_discarded_spans', discardedSpans);\n    }\n  }\n\n  _cleanupHooks.push(\n    client.on('spanStart', startedSpan => {\n      // If we already finished the idle span,\n      // or if this is the idle span itself being started,\n      // or if the started span has already been closed,\n      // we don't care about it for activity\n      if (\n        _finished ||\n        startedSpan === span ||\n        !!(0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.spanToJSON)(startedSpan).timestamp ||\n        (startedSpan instanceof _sentrySpan_js__WEBPACK_IMPORTED_MODULE_10__.SentrySpan && startedSpan.isStandaloneSpan())\n      ) {\n        return;\n      }\n\n      const allSpans = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.getSpanDescendants)(span);\n\n      // If the span that was just started is a child of the idle span, we should track it\n      if (allSpans.includes(startedSpan)) {\n        _pushActivity(startedSpan.spanContext().spanId);\n      }\n    }),\n  );\n\n  _cleanupHooks.push(\n    client.on('spanEnd', endedSpan => {\n      if (_finished) {\n        return;\n      }\n\n      _popActivity(endedSpan.spanContext().spanId);\n    }),\n  );\n\n  _cleanupHooks.push(\n    client.on('idleSpanEnableAutoFinish', spanToAllowAutoFinish => {\n      if (spanToAllowAutoFinish === span) {\n        _autoFinishAllowed = true;\n        _restartIdleTimeout();\n\n        if (activities.size) {\n          _restartChildSpanTimeout();\n        }\n      }\n    }),\n  );\n\n  // We only start the initial idle timeout if we are not delaying the auto finish\n  if (!options.disableAutoFinish) {\n    _restartIdleTimeout();\n  }\n\n  setTimeout(() => {\n    if (!_finished) {\n      span.setStatus({ code: _spanstatus_js__WEBPACK_IMPORTED_MODULE_11__.SPAN_STATUS_ERROR, message: 'deadline_exceeded' });\n      _finishReason = FINISH_REASON_FINAL_TIMEOUT;\n      span.end();\n    }\n  }, finalTimeout);\n\n  return span;\n}\n\nfunction _startIdleSpan(options) {\n  const span = (0,_trace_js__WEBPACK_IMPORTED_MODULE_12__.startInactiveSpan)(options);\n\n  (0,_utils_spanOnScope_js__WEBPACK_IMPORTED_MODULE_5__._setSpanForScope)((0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)(), span);\n\n  _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_3__.debug.log('[Tracing] Started span is an idle span');\n\n  return span;\n}\n\n\n//# sourceMappingURL=idleSpan.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYWNpbmcvaWRsZVNwYW4uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQWlFO0FBQ2pCO0FBQzZDO0FBQzVDO0FBQ2E7QUFDSDtBQUM0RTtBQUNqRjtBQUMyQztBQUM1QjtBQUN4QjtBQUNPO0FBQ0w7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSixpQkFBaUIsNERBQVM7O0FBRTFCLGtCQUFrQiwwRUFBZTtBQUNqQyxxQkFBcUIsOEVBQXNCOztBQUUzQztBQUNBO0FBQ0E7QUFDQSxTQUFTLDZGQUFpQztBQUMxQztBQUNBLElBQUksMkVBQWU7O0FBRW5CO0FBQ0E7O0FBRUEsZ0JBQWdCLGtFQUFlO0FBQy9CLDZCQUE2QixrRUFBYTtBQUMxQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkJBQTZCLDhFQUFzQjtBQUNuRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQ0FBK0Msa0VBQWtCO0FBQ2pFLCtCQUErQiwyRUFBc0I7O0FBRXJEO0FBQ0Esb0JBQW9CLHVFQUFrQjs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQiwrREFBVTtBQUMvQjtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDLCtEQUFVOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCLGtFQUFrQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCLGtFQUFrQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxJQUFJLHVFQUFnQjs7QUFFcEIscUJBQXFCLCtEQUFVOztBQUUvQixZQUFZLGtDQUFrQztBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixxR0FBaUQ7QUFDckUsd0JBQXdCLHFHQUFpRDtBQUN6RTs7QUFFQSxJQUFJLHlEQUFLLDZCQUE2QixZQUFZOztBQUVsRCx1QkFBdUIsdUVBQWtCOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixNQUFNLDhEQUFpQix3QkFBd0I7QUFDN0U7QUFDQSxRQUFRLHdEQUFXO0FBQ25CLFVBQVUseURBQUs7QUFDZjs7QUFFQSw0QkFBNEIsK0RBQVU7QUFDdEMsY0FBYyw2RUFBNkU7O0FBRTNGOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLHdEQUFXO0FBQ3JCO0FBQ0E7QUFDQSxVQUFVLHlEQUFLO0FBQ2YsVUFBVTtBQUNWLFVBQVUseURBQUs7QUFDZjtBQUNBOztBQUVBO0FBQ0EsUUFBUSw0RUFBdUI7QUFDL0I7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSwrREFBVTtBQUNwQixnQ0FBZ0MsdURBQVU7QUFDMUM7QUFDQTtBQUNBOztBQUVBLHVCQUF1Qix1RUFBa0I7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCLE1BQU0sOERBQWlCLGdDQUFnQztBQUM5RTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLDZEQUFpQjs7QUFFaEMsRUFBRSx1RUFBZ0IsQ0FBQyxrRUFBZTs7QUFFbEMsRUFBRSx3REFBVyxJQUFJLHlEQUFLOztBQUV0QjtBQUNBOztBQUUyQztBQUMzQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYWNpbmcvaWRsZVNwYW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0Q2xpZW50LCBnZXRDdXJyZW50U2NvcGUgfSBmcm9tICcuLi9jdXJyZW50U2NvcGVzLmpzJztcbmltcG9ydCB7IERFQlVHX0JVSUxEIH0gZnJvbSAnLi4vZGVidWctYnVpbGQuanMnO1xuaW1wb3J0IHsgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9JRExFX1NQQU5fRklOSVNIX1JFQVNPTiB9IGZyb20gJy4uL3NlbWFudGljQXR0cmlidXRlcy5qcyc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4uL3V0aWxzL2RlYnVnLWxvZ2dlci5qcyc7XG5pbXBvcnQgeyBoYXNTcGFuc0VuYWJsZWQgfSBmcm9tICcuLi91dGlscy9oYXNTcGFuc0VuYWJsZWQuanMnO1xuaW1wb3J0IHsgX3NldFNwYW5Gb3JTY29wZSB9IGZyb20gJy4uL3V0aWxzL3NwYW5PblNjb3BlLmpzJztcbmltcG9ydCB7IGdldEFjdGl2ZVNwYW4sIHNwYW5UaW1lSW5wdXRUb1NlY29uZHMsIGdldFNwYW5EZXNjZW5kYW50cywgc3BhblRvSlNPTiwgcmVtb3ZlQ2hpbGRTcGFuRnJvbVNwYW4gfSBmcm9tICcuLi91dGlscy9zcGFuVXRpbHMuanMnO1xuaW1wb3J0IHsgdGltZXN0YW1wSW5TZWNvbmRzIH0gZnJvbSAnLi4vdXRpbHMvdGltZS5qcyc7XG5pbXBvcnQgeyBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4sIGZyZWV6ZURzY09uU3BhbiB9IGZyb20gJy4vZHluYW1pY1NhbXBsaW5nQ29udGV4dC5qcyc7XG5pbXBvcnQgeyBTZW50cnlOb25SZWNvcmRpbmdTcGFuIH0gZnJvbSAnLi9zZW50cnlOb25SZWNvcmRpbmdTcGFuLmpzJztcbmltcG9ydCB7IFNlbnRyeVNwYW4gfSBmcm9tICcuL3NlbnRyeVNwYW4uanMnO1xuaW1wb3J0IHsgU1BBTl9TVEFUVVNfRVJST1IgfSBmcm9tICcuL3NwYW5zdGF0dXMuanMnO1xuaW1wb3J0IHsgc3RhcnRJbmFjdGl2ZVNwYW4gfSBmcm9tICcuL3RyYWNlLmpzJztcblxuY29uc3QgVFJBQ0lOR19ERUZBVUxUUyA9IHtcbiAgaWRsZVRpbWVvdXQ6IDEwMDAsXG4gIGZpbmFsVGltZW91dDogMzAwMDAsXG4gIGNoaWxkU3BhblRpbWVvdXQ6IDE1MDAwLFxufTtcblxuY29uc3QgRklOSVNIX1JFQVNPTl9IRUFSVEJFQVRfRkFJTEVEID0gJ2hlYXJ0YmVhdEZhaWxlZCc7XG5jb25zdCBGSU5JU0hfUkVBU09OX0lETEVfVElNRU9VVCA9ICdpZGxlVGltZW91dCc7XG5jb25zdCBGSU5JU0hfUkVBU09OX0ZJTkFMX1RJTUVPVVQgPSAnZmluYWxUaW1lb3V0JztcbmNvbnN0IEZJTklTSF9SRUFTT05fRVhURVJOQUxfRklOSVNIID0gJ2V4dGVybmFsRmluaXNoJztcblxuLyoqXG4gKiBBbiBpZGxlIHNwYW4gaXMgYSBzcGFuIHRoYXQgYXV0b21hdGljYWxseSBmaW5pc2hlcy4gSXQgZG9lcyB0aGlzIGJ5IHRyYWNraW5nIGNoaWxkIHNwYW5zIGFzIGFjdGl2aXRpZXMuXG4gKiBBbiBpZGxlIHNwYW4gaXMgYWx3YXlzIHRoZSBhY3RpdmUgc3Bhbi5cbiAqL1xuZnVuY3Rpb24gc3RhcnRJZGxlU3BhbihzdGFydFNwYW5PcHRpb25zLCBvcHRpb25zID0ge30pIHtcbiAgLy8gQWN0aXZpdGllcyBzdG9yZSBhIGxpc3Qgb2YgYWN0aXZlIHNwYW5zXG4gIGNvbnN0IGFjdGl2aXRpZXMgPSBuZXcgTWFwKCk7XG5cbiAgLy8gV2Ugc2hvdWxkIG5vdCB1c2UgaGVhcnRiZWF0IGlmIHdlIGZpbmlzaGVkIGEgc3BhblxuICBsZXQgX2ZpbmlzaGVkID0gZmFsc2U7XG5cbiAgLy8gVGltZXIgdGhhdCB0cmFja3MgaWRsZVRpbWVvdXRcbiAgbGV0IF9pZGxlVGltZW91dElEO1xuXG4gIC8vIFRoZSByZWFzb24gd2h5IHRoZSBzcGFuIHdhcyBmaW5pc2hlZFxuICBsZXQgX2ZpbmlzaFJlYXNvbiA9IEZJTklTSF9SRUFTT05fRVhURVJOQUxfRklOSVNIO1xuXG4gIGxldCBfYXV0b0ZpbmlzaEFsbG93ZWQgPSAhb3B0aW9ucy5kaXNhYmxlQXV0b0ZpbmlzaDtcblxuICBjb25zdCBfY2xlYW51cEhvb2tzID0gW107XG5cbiAgY29uc3Qge1xuICAgIGlkbGVUaW1lb3V0ID0gVFJBQ0lOR19ERUZBVUxUUy5pZGxlVGltZW91dCxcbiAgICBmaW5hbFRpbWVvdXQgPSBUUkFDSU5HX0RFRkFVTFRTLmZpbmFsVGltZW91dCxcbiAgICBjaGlsZFNwYW5UaW1lb3V0ID0gVFJBQ0lOR19ERUZBVUxUUy5jaGlsZFNwYW5UaW1lb3V0LFxuICAgIGJlZm9yZVNwYW5FbmQsXG4gIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuXG4gIGlmICghY2xpZW50IHx8ICFoYXNTcGFuc0VuYWJsZWQoKSkge1xuICAgIGNvbnN0IHNwYW4gPSBuZXcgU2VudHJ5Tm9uUmVjb3JkaW5nU3BhbigpO1xuXG4gICAgY29uc3QgZHNjID0ge1xuICAgICAgc2FtcGxlX3JhdGU6ICcwJyxcbiAgICAgIHNhbXBsZWQ6ICdmYWxzZScsXG4gICAgICAuLi5nZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4oc3BhbiksXG4gICAgfSA7XG4gICAgZnJlZXplRHNjT25TcGFuKHNwYW4sIGRzYyk7XG5cbiAgICByZXR1cm4gc3BhbjtcbiAgfVxuXG4gIGNvbnN0IHNjb3BlID0gZ2V0Q3VycmVudFNjb3BlKCk7XG4gIGNvbnN0IHByZXZpb3VzQWN0aXZlU3BhbiA9IGdldEFjdGl2ZVNwYW4oKTtcbiAgY29uc3Qgc3BhbiA9IF9zdGFydElkbGVTcGFuKHN0YXJ0U3Bhbk9wdGlvbnMpO1xuXG4gIC8vIFdlIHBhdGNoIHNwYW4uZW5kIHRvIGVuc3VyZSB3ZSBjYW4gcnVuIHNvbWUgdGhpbmdzIGJlZm9yZSB0aGUgc3BhbiBpcyBlbmRlZFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gIHNwYW4uZW5kID0gbmV3IFByb3h5KHNwYW4uZW5kLCB7XG4gICAgYXBwbHkodGFyZ2V0LCB0aGlzQXJnLCBhcmdzKSB7XG4gICAgICBpZiAoYmVmb3JlU3BhbkVuZCkge1xuICAgICAgICBiZWZvcmVTcGFuRW5kKHNwYW4pO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgc3BhbiBpcyBub24tcmVjb3JkaW5nLCBub3RoaW5nIG1vcmUgdG8gZG8gaGVyZS4uLlxuICAgICAgLy8gVGhpcyBpcyB0aGUgY2FzZSBpZiB0cmFjaW5nIGlzIGVuYWJsZWQgYnV0IHRoaXMgc3BlY2lmaWMgc3BhbiB3YXMgbm90IHNhbXBsZWRcbiAgICAgIGlmICh0aGlzQXJnIGluc3RhbmNlb2YgU2VudHJ5Tm9uUmVjb3JkaW5nU3Bhbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEp1c3QgZW5zdXJpbmcgdGhhdCB0aGlzIGtlZXBzIHdvcmtpbmcsIGV2ZW4gaWYgd2UgZXZlciBoYXZlIG1vcmUgYXJndW1lbnRzIGhlcmVcbiAgICAgIGNvbnN0IFtkZWZpbmVkRW5kVGltZXN0YW1wLCAuLi5yZXN0XSA9IGFyZ3M7XG4gICAgICBjb25zdCB0aW1lc3RhbXAgPSBkZWZpbmVkRW5kVGltZXN0YW1wIHx8IHRpbWVzdGFtcEluU2Vjb25kcygpO1xuICAgICAgY29uc3Qgc3BhbkVuZFRpbWVzdGFtcCA9IHNwYW5UaW1lSW5wdXRUb1NlY29uZHModGltZXN0YW1wKTtcblxuICAgICAgLy8gRW5zdXJlIHdlIGVuZCB3aXRoIHRoZSBsYXN0IHNwYW4gdGltZXN0YW1wLCBpZiBwb3NzaWJsZVxuICAgICAgY29uc3Qgc3BhbnMgPSBnZXRTcGFuRGVzY2VuZGFudHMoc3BhbikuZmlsdGVyKGNoaWxkID0+IGNoaWxkICE9PSBzcGFuKTtcblxuICAgICAgLy8gSWYgd2UgaGF2ZSBubyBzcGFucywgd2UganVzdCBlbmQsIG5vdGhpbmcgZWxzZSB0byBkbyBoZXJlXG4gICAgICBpZiAoIXNwYW5zLmxlbmd0aCkge1xuICAgICAgICBvbklkbGVTcGFuRW5kZWQoc3BhbkVuZFRpbWVzdGFtcCk7XG4gICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHRhcmdldCwgdGhpc0FyZywgW3NwYW5FbmRUaW1lc3RhbXAsIC4uLnJlc3RdKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hpbGRFbmRUaW1lc3RhbXBzID0gc3BhbnNcbiAgICAgICAgLm1hcChzcGFuID0+IHNwYW5Ub0pTT04oc3BhbikudGltZXN0YW1wKVxuICAgICAgICAuZmlsdGVyKHRpbWVzdGFtcCA9PiAhIXRpbWVzdGFtcCkgO1xuICAgICAgY29uc3QgbGF0ZXN0U3BhbkVuZFRpbWVzdGFtcCA9IGNoaWxkRW5kVGltZXN0YW1wcy5sZW5ndGggPyBNYXRoLm1heCguLi5jaGlsZEVuZFRpbWVzdGFtcHMpIDogdW5kZWZpbmVkO1xuXG4gICAgICAvLyBJbiByZWFsaXR5IHRoaXMgc2hvdWxkIGFsd2F5cyBleGlzdCBoZXJlLCBidXQgdHlwZS13aXNlIGl0IG1heSBiZSB1bmRlZmluZWQuLi5cbiAgICAgIGNvbnN0IHNwYW5TdGFydFRpbWVzdGFtcCA9IHNwYW5Ub0pTT04oc3Bhbikuc3RhcnRfdGltZXN0YW1wO1xuXG4gICAgICAvLyBUaGUgZmluYWwgZW5kVGltZXN0YW1wIHNob3VsZDpcbiAgICAgIC8vICogTmV2ZXIgYmUgYmVmb3JlIHRoZSBzcGFuIHN0YXJ0IHRpbWVzdGFtcFxuICAgICAgLy8gKiBCZSB0aGUgbGF0ZXN0U3BhbkVuZFRpbWVzdGFtcCwgaWYgdGhlcmUgaXMgb25lLCBhbmQgaXQgaXMgc21hbGxlciB0aGFuIHRoZSBwYXNzZWQgc3BhbiBlbmQgdGltZXN0YW1wXG4gICAgICAvLyAqIE90aGVyd2lzZSBiZSB0aGUgcGFzc2VkIGVuZCB0aW1lc3RhbXBcbiAgICAgIC8vIEZpbmFsIHRpbWVzdGFtcCBjYW4gbmV2ZXIgYmUgYWZ0ZXIgZmluYWxUaW1lb3V0XG4gICAgICBjb25zdCBlbmRUaW1lc3RhbXAgPSBNYXRoLm1pbihcbiAgICAgICAgc3BhblN0YXJ0VGltZXN0YW1wID8gc3BhblN0YXJ0VGltZXN0YW1wICsgZmluYWxUaW1lb3V0IC8gMTAwMCA6IEluZmluaXR5LFxuICAgICAgICBNYXRoLm1heChzcGFuU3RhcnRUaW1lc3RhbXAgfHwgLUluZmluaXR5LCBNYXRoLm1pbihzcGFuRW5kVGltZXN0YW1wLCBsYXRlc3RTcGFuRW5kVGltZXN0YW1wIHx8IEluZmluaXR5KSksXG4gICAgICApO1xuXG4gICAgICBvbklkbGVTcGFuRW5kZWQoZW5kVGltZXN0YW1wKTtcbiAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHRhcmdldCwgdGhpc0FyZywgW2VuZFRpbWVzdGFtcCwgLi4ucmVzdF0pO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBDYW5jZWxzIHRoZSBleGlzdGluZyBpZGxlIHRpbWVvdXQsIGlmIHRoZXJlIGlzIG9uZS5cbiAgICovXG4gIGZ1bmN0aW9uIF9jYW5jZWxJZGxlVGltZW91dCgpIHtcbiAgICBpZiAoX2lkbGVUaW1lb3V0SUQpIHtcbiAgICAgIGNsZWFyVGltZW91dChfaWRsZVRpbWVvdXRJRCk7XG4gICAgICBfaWRsZVRpbWVvdXRJRCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzdGFydHMgaWRsZSB0aW1lb3V0LCBpZiB0aGVyZSBpcyBubyBydW5uaW5nIGlkbGUgdGltZW91dCBpdCB3aWxsIHN0YXJ0IG9uZS5cbiAgICovXG4gIGZ1bmN0aW9uIF9yZXN0YXJ0SWRsZVRpbWVvdXQoZW5kVGltZXN0YW1wKSB7XG4gICAgX2NhbmNlbElkbGVUaW1lb3V0KCk7XG4gICAgX2lkbGVUaW1lb3V0SUQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghX2ZpbmlzaGVkICYmIGFjdGl2aXRpZXMuc2l6ZSA9PT0gMCAmJiBfYXV0b0ZpbmlzaEFsbG93ZWQpIHtcbiAgICAgICAgX2ZpbmlzaFJlYXNvbiA9IEZJTklTSF9SRUFTT05fSURMRV9USU1FT1VUO1xuICAgICAgICBzcGFuLmVuZChlbmRUaW1lc3RhbXApO1xuICAgICAgfVxuICAgIH0sIGlkbGVUaW1lb3V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0YXJ0cyBjaGlsZCBzcGFuIHRpbWVvdXQsIGlmIHRoZXJlIGlzIG5vbmUgcnVubmluZyBpdCB3aWxsIHN0YXJ0IG9uZS5cbiAgICovXG4gIGZ1bmN0aW9uIF9yZXN0YXJ0Q2hpbGRTcGFuVGltZW91dChlbmRUaW1lc3RhbXApIHtcbiAgICBfaWRsZVRpbWVvdXRJRCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCFfZmluaXNoZWQgJiYgX2F1dG9GaW5pc2hBbGxvd2VkKSB7XG4gICAgICAgIF9maW5pc2hSZWFzb24gPSBGSU5JU0hfUkVBU09OX0hFQVJUQkVBVF9GQUlMRUQ7XG4gICAgICAgIHNwYW4uZW5kKGVuZFRpbWVzdGFtcCk7XG4gICAgICB9XG4gICAgfSwgY2hpbGRTcGFuVGltZW91dCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdHJhY2tpbmcgYSBzcGVjaWZpYyBhY3Rpdml0eS5cbiAgICogQHBhcmFtIHNwYW5JZCBUaGUgc3BhbiBpZCB0aGF0IHJlcHJlc2VudHMgdGhlIGFjdGl2aXR5XG4gICAqL1xuICBmdW5jdGlvbiBfcHVzaEFjdGl2aXR5KHNwYW5JZCkge1xuICAgIF9jYW5jZWxJZGxlVGltZW91dCgpO1xuICAgIGFjdGl2aXRpZXMuc2V0KHNwYW5JZCwgdHJ1ZSk7XG5cbiAgICBjb25zdCBlbmRUaW1lc3RhbXAgPSB0aW1lc3RhbXBJblNlY29uZHMoKTtcbiAgICAvLyBXZSBuZWVkIHRvIGFkZCB0aGUgdGltZW91dCBoZXJlIHRvIGhhdmUgdGhlIHJlYWwgZW5kdGltZXN0YW1wIG9mIHRoZSBpZGxlIHNwYW5cbiAgICAvLyBSZW1lbWJlciB0aW1lc3RhbXBJblNlY29uZHMgaXMgaW4gc2Vjb25kcywgdGltZW91dCBpcyBpbiBtc1xuICAgIF9yZXN0YXJ0Q2hpbGRTcGFuVGltZW91dChlbmRUaW1lc3RhbXAgKyBjaGlsZFNwYW5UaW1lb3V0IC8gMTAwMCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGFjdGl2aXR5IGZyb20gdXNhZ2VcbiAgICogQHBhcmFtIHNwYW5JZCBUaGUgc3BhbiBpZCB0aGF0IHJlcHJlc2VudHMgdGhlIGFjdGl2aXR5XG4gICAqL1xuICBmdW5jdGlvbiBfcG9wQWN0aXZpdHkoc3BhbklkKSB7XG4gICAgaWYgKGFjdGl2aXRpZXMuaGFzKHNwYW5JZCkpIHtcbiAgICAgIGFjdGl2aXRpZXMuZGVsZXRlKHNwYW5JZCk7XG4gICAgfVxuXG4gICAgaWYgKGFjdGl2aXRpZXMuc2l6ZSA9PT0gMCkge1xuICAgICAgY29uc3QgZW5kVGltZXN0YW1wID0gdGltZXN0YW1wSW5TZWNvbmRzKCk7XG4gICAgICAvLyBXZSBuZWVkIHRvIGFkZCB0aGUgdGltZW91dCBoZXJlIHRvIGhhdmUgdGhlIHJlYWwgZW5kdGltZXN0YW1wIG9mIHRoZSBpZGxlIHNwYW5cbiAgICAgIC8vIFJlbWVtYmVyIHRpbWVzdGFtcEluU2Vjb25kcyBpcyBpbiBzZWNvbmRzLCB0aW1lb3V0IGlzIGluIG1zXG4gICAgICBfcmVzdGFydElkbGVUaW1lb3V0KGVuZFRpbWVzdGFtcCArIGlkbGVUaW1lb3V0IC8gMTAwMCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25JZGxlU3BhbkVuZGVkKGVuZFRpbWVzdGFtcCkge1xuICAgIF9maW5pc2hlZCA9IHRydWU7XG4gICAgYWN0aXZpdGllcy5jbGVhcigpO1xuXG4gICAgX2NsZWFudXBIb29rcy5mb3JFYWNoKGNsZWFudXAgPT4gY2xlYW51cCgpKTtcblxuICAgIF9zZXRTcGFuRm9yU2NvcGUoc2NvcGUsIHByZXZpb3VzQWN0aXZlU3Bhbik7XG5cbiAgICBjb25zdCBzcGFuSlNPTiA9IHNwYW5Ub0pTT04oc3Bhbik7XG5cbiAgICBjb25zdCB7IHN0YXJ0X3RpbWVzdGFtcDogc3RhcnRUaW1lc3RhbXAgfSA9IHNwYW5KU09OO1xuICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IHRvIG1ha2UgVFMgaGFwcHkuLi5cbiAgICBpZiAoIXN0YXJ0VGltZXN0YW1wKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHNwYW5KU09OLmRhdGE7XG4gICAgaWYgKCFhdHRyaWJ1dGVzW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfSURMRV9TUEFOX0ZJTklTSF9SRUFTT05dKSB7XG4gICAgICBzcGFuLnNldEF0dHJpYnV0ZShTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX0lETEVfU1BBTl9GSU5JU0hfUkVBU09OLCBfZmluaXNoUmVhc29uKTtcbiAgICB9XG5cbiAgICBkZWJ1Zy5sb2coYFtUcmFjaW5nXSBJZGxlIHNwYW4gXCIke3NwYW5KU09OLm9wfVwiIGZpbmlzaGVkYCk7XG5cbiAgICBjb25zdCBjaGlsZFNwYW5zID0gZ2V0U3BhbkRlc2NlbmRhbnRzKHNwYW4pLmZpbHRlcihjaGlsZCA9PiBjaGlsZCAhPT0gc3Bhbik7XG5cbiAgICBsZXQgZGlzY2FyZGVkU3BhbnMgPSAwO1xuICAgIGNoaWxkU3BhbnMuZm9yRWFjaChjaGlsZFNwYW4gPT4ge1xuICAgICAgLy8gV2UgY2FuY2VsIGFsbCBwZW5kaW5nIHNwYW5zIHdpdGggc3RhdHVzIFwiY2FuY2VsbGVkXCIgdG8gaW5kaWNhdGUgdGhlIGlkbGUgc3BhbiB3YXMgZmluaXNoZWQgZWFybHlcbiAgICAgIGlmIChjaGlsZFNwYW4uaXNSZWNvcmRpbmcoKSkge1xuICAgICAgICBjaGlsZFNwYW4uc2V0U3RhdHVzKHsgY29kZTogU1BBTl9TVEFUVVNfRVJST1IsIG1lc3NhZ2U6ICdjYW5jZWxsZWQnIH0pO1xuICAgICAgICBjaGlsZFNwYW4uZW5kKGVuZFRpbWVzdGFtcCk7XG4gICAgICAgIERFQlVHX0JVSUxEICYmXG4gICAgICAgICAgZGVidWcubG9nKCdbVHJhY2luZ10gQ2FuY2VsbGluZyBzcGFuIHNpbmNlIHNwYW4gZW5kZWQgZWFybHknLCBKU09OLnN0cmluZ2lmeShjaGlsZFNwYW4sIHVuZGVmaW5lZCwgMikpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGlsZFNwYW5KU09OID0gc3BhblRvSlNPTihjaGlsZFNwYW4pO1xuICAgICAgY29uc3QgeyB0aW1lc3RhbXA6IGNoaWxkRW5kVGltZXN0YW1wID0gMCwgc3RhcnRfdGltZXN0YW1wOiBjaGlsZFN0YXJ0VGltZXN0YW1wID0gMCB9ID0gY2hpbGRTcGFuSlNPTjtcblxuICAgICAgY29uc3Qgc3BhblN0YXJ0ZWRCZWZvcmVJZGxlU3BhbkVuZCA9IGNoaWxkU3RhcnRUaW1lc3RhbXAgPD0gZW5kVGltZXN0YW1wO1xuXG4gICAgICAvLyBBZGQgYSBkZWx0YSB3aXRoIGlkbGUgdGltZW91dCBzbyB0aGF0IHdlIHByZXZlbnQgZmFsc2UgcG9zaXRpdmVzXG4gICAgICBjb25zdCB0aW1lb3V0V2l0aE1hcmdpbk9mRXJyb3IgPSAoZmluYWxUaW1lb3V0ICsgaWRsZVRpbWVvdXQpIC8gMTAwMDtcbiAgICAgIGNvbnN0IHNwYW5FbmRlZEJlZm9yZUZpbmFsVGltZW91dCA9IGNoaWxkRW5kVGltZXN0YW1wIC0gY2hpbGRTdGFydFRpbWVzdGFtcCA8PSB0aW1lb3V0V2l0aE1hcmdpbk9mRXJyb3I7XG5cbiAgICAgIGlmIChERUJVR19CVUlMRCkge1xuICAgICAgICBjb25zdCBzdHJpbmdpZmllZFNwYW4gPSBKU09OLnN0cmluZ2lmeShjaGlsZFNwYW4sIHVuZGVmaW5lZCwgMik7XG4gICAgICAgIGlmICghc3BhblN0YXJ0ZWRCZWZvcmVJZGxlU3BhbkVuZCkge1xuICAgICAgICAgIGRlYnVnLmxvZygnW1RyYWNpbmddIERpc2NhcmRpbmcgc3BhbiBzaW5jZSBpdCBoYXBwZW5lZCBhZnRlciBpZGxlIHNwYW4gd2FzIGZpbmlzaGVkJywgc3RyaW5naWZpZWRTcGFuKTtcbiAgICAgICAgfSBlbHNlIGlmICghc3BhbkVuZGVkQmVmb3JlRmluYWxUaW1lb3V0KSB7XG4gICAgICAgICAgZGVidWcubG9nKCdbVHJhY2luZ10gRGlzY2FyZGluZyBzcGFuIHNpbmNlIGl0IGZpbmlzaGVkIGFmdGVyIGlkbGUgc3BhbiBmaW5hbCB0aW1lb3V0Jywgc3RyaW5naWZpZWRTcGFuKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXNwYW5FbmRlZEJlZm9yZUZpbmFsVGltZW91dCB8fCAhc3BhblN0YXJ0ZWRCZWZvcmVJZGxlU3BhbkVuZCkge1xuICAgICAgICByZW1vdmVDaGlsZFNwYW5Gcm9tU3BhbihzcGFuLCBjaGlsZFNwYW4pO1xuICAgICAgICBkaXNjYXJkZWRTcGFucysrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGRpc2NhcmRlZFNwYW5zID4gMCkge1xuICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ3NlbnRyeS5pZGxlX3NwYW5fZGlzY2FyZGVkX3NwYW5zJywgZGlzY2FyZGVkU3BhbnMpO1xuICAgIH1cbiAgfVxuXG4gIF9jbGVhbnVwSG9va3MucHVzaChcbiAgICBjbGllbnQub24oJ3NwYW5TdGFydCcsIHN0YXJ0ZWRTcGFuID0+IHtcbiAgICAgIC8vIElmIHdlIGFscmVhZHkgZmluaXNoZWQgdGhlIGlkbGUgc3BhbixcbiAgICAgIC8vIG9yIGlmIHRoaXMgaXMgdGhlIGlkbGUgc3BhbiBpdHNlbGYgYmVpbmcgc3RhcnRlZCxcbiAgICAgIC8vIG9yIGlmIHRoZSBzdGFydGVkIHNwYW4gaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQsXG4gICAgICAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGl0IGZvciBhY3Rpdml0eVxuICAgICAgaWYgKFxuICAgICAgICBfZmluaXNoZWQgfHxcbiAgICAgICAgc3RhcnRlZFNwYW4gPT09IHNwYW4gfHxcbiAgICAgICAgISFzcGFuVG9KU09OKHN0YXJ0ZWRTcGFuKS50aW1lc3RhbXAgfHxcbiAgICAgICAgKHN0YXJ0ZWRTcGFuIGluc3RhbmNlb2YgU2VudHJ5U3BhbiAmJiBzdGFydGVkU3Bhbi5pc1N0YW5kYWxvbmVTcGFuKCkpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhbGxTcGFucyA9IGdldFNwYW5EZXNjZW5kYW50cyhzcGFuKTtcblxuICAgICAgLy8gSWYgdGhlIHNwYW4gdGhhdCB3YXMganVzdCBzdGFydGVkIGlzIGEgY2hpbGQgb2YgdGhlIGlkbGUgc3Bhbiwgd2Ugc2hvdWxkIHRyYWNrIGl0XG4gICAgICBpZiAoYWxsU3BhbnMuaW5jbHVkZXMoc3RhcnRlZFNwYW4pKSB7XG4gICAgICAgIF9wdXNoQWN0aXZpdHkoc3RhcnRlZFNwYW4uc3BhbkNvbnRleHQoKS5zcGFuSWQpO1xuICAgICAgfVxuICAgIH0pLFxuICApO1xuXG4gIF9jbGVhbnVwSG9va3MucHVzaChcbiAgICBjbGllbnQub24oJ3NwYW5FbmQnLCBlbmRlZFNwYW4gPT4ge1xuICAgICAgaWYgKF9maW5pc2hlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF9wb3BBY3Rpdml0eShlbmRlZFNwYW4uc3BhbkNvbnRleHQoKS5zcGFuSWQpO1xuICAgIH0pLFxuICApO1xuXG4gIF9jbGVhbnVwSG9va3MucHVzaChcbiAgICBjbGllbnQub24oJ2lkbGVTcGFuRW5hYmxlQXV0b0ZpbmlzaCcsIHNwYW5Ub0FsbG93QXV0b0ZpbmlzaCA9PiB7XG4gICAgICBpZiAoc3BhblRvQWxsb3dBdXRvRmluaXNoID09PSBzcGFuKSB7XG4gICAgICAgIF9hdXRvRmluaXNoQWxsb3dlZCA9IHRydWU7XG4gICAgICAgIF9yZXN0YXJ0SWRsZVRpbWVvdXQoKTtcblxuICAgICAgICBpZiAoYWN0aXZpdGllcy5zaXplKSB7XG4gICAgICAgICAgX3Jlc3RhcnRDaGlsZFNwYW5UaW1lb3V0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSxcbiAgKTtcblxuICAvLyBXZSBvbmx5IHN0YXJ0IHRoZSBpbml0aWFsIGlkbGUgdGltZW91dCBpZiB3ZSBhcmUgbm90IGRlbGF5aW5nIHRoZSBhdXRvIGZpbmlzaFxuICBpZiAoIW9wdGlvbnMuZGlzYWJsZUF1dG9GaW5pc2gpIHtcbiAgICBfcmVzdGFydElkbGVUaW1lb3V0KCk7XG4gIH1cblxuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBpZiAoIV9maW5pc2hlZCkge1xuICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTUEFOX1NUQVRVU19FUlJPUiwgbWVzc2FnZTogJ2RlYWRsaW5lX2V4Y2VlZGVkJyB9KTtcbiAgICAgIF9maW5pc2hSZWFzb24gPSBGSU5JU0hfUkVBU09OX0ZJTkFMX1RJTUVPVVQ7XG4gICAgICBzcGFuLmVuZCgpO1xuICAgIH1cbiAgfSwgZmluYWxUaW1lb3V0KTtcblxuICByZXR1cm4gc3Bhbjtcbn1cblxuZnVuY3Rpb24gX3N0YXJ0SWRsZVNwYW4ob3B0aW9ucykge1xuICBjb25zdCBzcGFuID0gc3RhcnRJbmFjdGl2ZVNwYW4ob3B0aW9ucyk7XG5cbiAgX3NldFNwYW5Gb3JTY29wZShnZXRDdXJyZW50U2NvcGUoKSwgc3Bhbik7XG5cbiAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKCdbVHJhY2luZ10gU3RhcnRlZCBzcGFuIGlzIGFuIGlkbGUgc3BhbicpO1xuXG4gIHJldHVybiBzcGFuO1xufVxuXG5leHBvcnQgeyBUUkFDSU5HX0RFRkFVTFRTLCBzdGFydElkbGVTcGFuIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pZGxlU3Bhbi5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/idleSpan.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/logSpans.js":
/*!********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/logSpans.js ***!
  \********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   logSpanEnd: () => (/* binding */ logSpanEnd),\n/* harmony export */   logSpanStart: () => (/* binding */ logSpanStart)\n/* harmony export */ });\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/spanUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js\");\n\n\n\n\n/**\n * Print a log message for a started span.\n */\nfunction logSpanStart(span) {\n  if (!_debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD) return;\n\n  const { description = '< unknown name >', op = '< unknown op >', parent_span_id: parentSpanId } = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_2__.spanToJSON)(span);\n  const { spanId } = span.spanContext();\n\n  const sampled = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_2__.spanIsSampled)(span);\n  const rootSpan = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRootSpan)(span);\n  const isRootSpan = rootSpan === span;\n\n  const header = `[Tracing] Starting ${sampled ? 'sampled' : 'unsampled'} ${isRootSpan ? 'root ' : ''}span`;\n\n  const infoParts = [`op: ${op}`, `name: ${description}`, `ID: ${spanId}`];\n\n  if (parentSpanId) {\n    infoParts.push(`parent ID: ${parentSpanId}`);\n  }\n\n  if (!isRootSpan) {\n    const { op, description } = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_2__.spanToJSON)(rootSpan);\n    infoParts.push(`root ID: ${rootSpan.spanContext().spanId}`);\n    if (op) {\n      infoParts.push(`root op: ${op}`);\n    }\n    if (description) {\n      infoParts.push(`root description: ${description}`);\n    }\n  }\n\n  _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.log(`${header}\n  ${infoParts.join('\\n  ')}`);\n}\n\n/**\n * Print a log message for an ended span.\n */\nfunction logSpanEnd(span) {\n  if (!_debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD) return;\n\n  const { description = '< unknown name >', op = '< unknown op >' } = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_2__.spanToJSON)(span);\n  const { spanId } = span.spanContext();\n  const rootSpan = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRootSpan)(span);\n  const isRootSpan = rootSpan === span;\n\n  const msg = `[Tracing] Finishing \"${op}\" ${isRootSpan ? 'root ' : ''}span \"${description}\" with ID ${spanId}`;\n  _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.log(msg);\n}\n\n\n//# sourceMappingURL=logSpans.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYWNpbmcvbG9nU3BhbnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBZ0Q7QUFDQztBQUM4Qjs7QUFFL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLHdEQUFXOztBQUVsQixVQUFVLHdGQUF3RixFQUFFLCtEQUFVO0FBQzlHLFVBQVUsU0FBUzs7QUFFbkIsa0JBQWtCLGtFQUFhO0FBQy9CLG1CQUFtQixnRUFBVztBQUM5Qjs7QUFFQSx1Q0FBdUMsbUNBQW1DLEVBQUUsMEJBQTBCOztBQUV0Ryw0QkFBNEIsR0FBRyxZQUFZLFlBQVksVUFBVSxPQUFPOztBQUV4RTtBQUNBLGlDQUFpQyxhQUFhO0FBQzlDOztBQUVBO0FBQ0EsWUFBWSxrQkFBa0IsRUFBRSwrREFBVTtBQUMxQywrQkFBK0IsOEJBQThCO0FBQzdEO0FBQ0EsaUNBQWlDLEdBQUc7QUFDcEM7QUFDQTtBQUNBLDBDQUEwQyxZQUFZO0FBQ3REO0FBQ0E7O0FBRUEsRUFBRSx5REFBSyxRQUFRO0FBQ2YsSUFBSSx1QkFBdUI7QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLHdEQUFXOztBQUVsQixVQUFVLDBEQUEwRCxFQUFFLCtEQUFVO0FBQ2hGLFVBQVUsU0FBUztBQUNuQixtQkFBbUIsZ0VBQVc7QUFDOUI7O0FBRUEsc0NBQXNDLEdBQUcsSUFBSSwwQkFBMEIsUUFBUSxZQUFZLFlBQVksT0FBTztBQUM5RyxFQUFFLHlEQUFLO0FBQ1A7O0FBRW9DO0FBQ3BDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdHJhY2luZy9sb2dTcGFucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4uL2RlYnVnLWJ1aWxkLmpzJztcbmltcG9ydCB7IGRlYnVnIH0gZnJvbSAnLi4vdXRpbHMvZGVidWctbG9nZ2VyLmpzJztcbmltcG9ydCB7IHNwYW5Ub0pTT04sIGdldFJvb3RTcGFuLCBzcGFuSXNTYW1wbGVkIH0gZnJvbSAnLi4vdXRpbHMvc3BhblV0aWxzLmpzJztcblxuLyoqXG4gKiBQcmludCBhIGxvZyBtZXNzYWdlIGZvciBhIHN0YXJ0ZWQgc3Bhbi5cbiAqL1xuZnVuY3Rpb24gbG9nU3BhblN0YXJ0KHNwYW4pIHtcbiAgaWYgKCFERUJVR19CVUlMRCkgcmV0dXJuO1xuXG4gIGNvbnN0IHsgZGVzY3JpcHRpb24gPSAnPCB1bmtub3duIG5hbWUgPicsIG9wID0gJzwgdW5rbm93biBvcCA+JywgcGFyZW50X3NwYW5faWQ6IHBhcmVudFNwYW5JZCB9ID0gc3BhblRvSlNPTihzcGFuKTtcbiAgY29uc3QgeyBzcGFuSWQgfSA9IHNwYW4uc3BhbkNvbnRleHQoKTtcblxuICBjb25zdCBzYW1wbGVkID0gc3BhbklzU2FtcGxlZChzcGFuKTtcbiAgY29uc3Qgcm9vdFNwYW4gPSBnZXRSb290U3BhbihzcGFuKTtcbiAgY29uc3QgaXNSb290U3BhbiA9IHJvb3RTcGFuID09PSBzcGFuO1xuXG4gIGNvbnN0IGhlYWRlciA9IGBbVHJhY2luZ10gU3RhcnRpbmcgJHtzYW1wbGVkID8gJ3NhbXBsZWQnIDogJ3Vuc2FtcGxlZCd9ICR7aXNSb290U3BhbiA/ICdyb290ICcgOiAnJ31zcGFuYDtcblxuICBjb25zdCBpbmZvUGFydHMgPSBbYG9wOiAke29wfWAsIGBuYW1lOiAke2Rlc2NyaXB0aW9ufWAsIGBJRDogJHtzcGFuSWR9YF07XG5cbiAgaWYgKHBhcmVudFNwYW5JZCkge1xuICAgIGluZm9QYXJ0cy5wdXNoKGBwYXJlbnQgSUQ6ICR7cGFyZW50U3BhbklkfWApO1xuICB9XG5cbiAgaWYgKCFpc1Jvb3RTcGFuKSB7XG4gICAgY29uc3QgeyBvcCwgZGVzY3JpcHRpb24gfSA9IHNwYW5Ub0pTT04ocm9vdFNwYW4pO1xuICAgIGluZm9QYXJ0cy5wdXNoKGByb290IElEOiAke3Jvb3RTcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkfWApO1xuICAgIGlmIChvcCkge1xuICAgICAgaW5mb1BhcnRzLnB1c2goYHJvb3Qgb3A6ICR7b3B9YCk7XG4gICAgfVxuICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgaW5mb1BhcnRzLnB1c2goYHJvb3QgZGVzY3JpcHRpb246ICR7ZGVzY3JpcHRpb259YCk7XG4gICAgfVxuICB9XG5cbiAgZGVidWcubG9nKGAke2hlYWRlcn1cbiAgJHtpbmZvUGFydHMuam9pbignXFxuICAnKX1gKTtcbn1cblxuLyoqXG4gKiBQcmludCBhIGxvZyBtZXNzYWdlIGZvciBhbiBlbmRlZCBzcGFuLlxuICovXG5mdW5jdGlvbiBsb2dTcGFuRW5kKHNwYW4pIHtcbiAgaWYgKCFERUJVR19CVUlMRCkgcmV0dXJuO1xuXG4gIGNvbnN0IHsgZGVzY3JpcHRpb24gPSAnPCB1bmtub3duIG5hbWUgPicsIG9wID0gJzwgdW5rbm93biBvcCA+JyB9ID0gc3BhblRvSlNPTihzcGFuKTtcbiAgY29uc3QgeyBzcGFuSWQgfSA9IHNwYW4uc3BhbkNvbnRleHQoKTtcbiAgY29uc3Qgcm9vdFNwYW4gPSBnZXRSb290U3BhbihzcGFuKTtcbiAgY29uc3QgaXNSb290U3BhbiA9IHJvb3RTcGFuID09PSBzcGFuO1xuXG4gIGNvbnN0IG1zZyA9IGBbVHJhY2luZ10gRmluaXNoaW5nIFwiJHtvcH1cIiAke2lzUm9vdFNwYW4gPyAncm9vdCAnIDogJyd9c3BhbiBcIiR7ZGVzY3JpcHRpb259XCIgd2l0aCBJRCAke3NwYW5JZH1gO1xuICBkZWJ1Zy5sb2cobXNnKTtcbn1cblxuZXhwb3J0IHsgbG9nU3BhbkVuZCwgbG9nU3BhblN0YXJ0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2dTcGFucy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/logSpans.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/measurement.js":
/*!***********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/measurement.js ***!
  \***********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   setMeasurement: () => (/* binding */ setMeasurement),\n/* harmony export */   timedEventsToMeasurements: () => (/* binding */ timedEventsToMeasurements)\n/* harmony export */ });\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../semanticAttributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/semanticAttributes.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/spanUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js\");\n\n\n\n\n\n/**\n * Adds a measurement to the active transaction on the current global scope. You can optionally pass in a different span\n * as the 4th parameter.\n */\nfunction setMeasurement(name, value, unit, activeSpan = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_3__.getActiveSpan)()) {\n  const rootSpan = activeSpan && (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_3__.getRootSpan)(activeSpan);\n\n  if (rootSpan) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.log(`[Measurement] Setting measurement on root span: ${name} = ${value} ${unit}`);\n    rootSpan.addEvent(name, {\n      [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: value,\n      [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: unit ,\n    });\n  }\n}\n\n/**\n * Convert timed events to measurements.\n */\nfunction timedEventsToMeasurements(events) {\n  if (!events || events.length === 0) {\n    return undefined;\n  }\n\n  const measurements = {};\n  events.forEach(event => {\n    const attributes = event.attributes || {};\n    const unit = attributes[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT] ;\n    const value = attributes[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE] ;\n\n    if (typeof unit === 'string' && typeof value === 'number') {\n      measurements[event.name] = { value, unit };\n    }\n  });\n\n  return measurements;\n}\n\n\n//# sourceMappingURL=measurement.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYWNpbmcvbWVhc3VyZW1lbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQWdEO0FBQ21GO0FBQ2xGO0FBQ2tCOztBQUVuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RCxrRUFBYTtBQUNyRSxpQ0FBaUMsZ0VBQVc7O0FBRTVDO0FBQ0EsSUFBSSx3REFBVyxJQUFJLHlEQUFLLHdEQUF3RCxNQUFNLElBQUksT0FBTyxFQUFFLEtBQUs7QUFDeEc7QUFDQSxPQUFPLCtGQUEyQztBQUNsRCxPQUFPLDhGQUEwQztBQUNqRCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsOEZBQTBDO0FBQ3RFLDZCQUE2QiwrRkFBMkM7O0FBRXhFO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVxRDtBQUNyRCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYWNpbmcvbWVhc3VyZW1lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX01FQVNVUkVNRU5UX1VOSVQsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfTUVBU1VSRU1FTlRfVkFMVUUgfSBmcm9tICcuLi9zZW1hbnRpY0F0dHJpYnV0ZXMuanMnO1xuaW1wb3J0IHsgZGVidWcgfSBmcm9tICcuLi91dGlscy9kZWJ1Zy1sb2dnZXIuanMnO1xuaW1wb3J0IHsgZ2V0QWN0aXZlU3BhbiwgZ2V0Um9vdFNwYW4gfSBmcm9tICcuLi91dGlscy9zcGFuVXRpbHMuanMnO1xuXG4vKipcbiAqIEFkZHMgYSBtZWFzdXJlbWVudCB0byB0aGUgYWN0aXZlIHRyYW5zYWN0aW9uIG9uIHRoZSBjdXJyZW50IGdsb2JhbCBzY29wZS4gWW91IGNhbiBvcHRpb25hbGx5IHBhc3MgaW4gYSBkaWZmZXJlbnQgc3BhblxuICogYXMgdGhlIDR0aCBwYXJhbWV0ZXIuXG4gKi9cbmZ1bmN0aW9uIHNldE1lYXN1cmVtZW50KG5hbWUsIHZhbHVlLCB1bml0LCBhY3RpdmVTcGFuID0gZ2V0QWN0aXZlU3BhbigpKSB7XG4gIGNvbnN0IHJvb3RTcGFuID0gYWN0aXZlU3BhbiAmJiBnZXRSb290U3BhbihhY3RpdmVTcGFuKTtcblxuICBpZiAocm9vdFNwYW4pIHtcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5sb2coYFtNZWFzdXJlbWVudF0gU2V0dGluZyBtZWFzdXJlbWVudCBvbiByb290IHNwYW46ICR7bmFtZX0gPSAke3ZhbHVlfSAke3VuaXR9YCk7XG4gICAgcm9vdFNwYW4uYWRkRXZlbnQobmFtZSwge1xuICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfTUVBU1VSRU1FTlRfVkFMVUVdOiB2YWx1ZSxcbiAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX01FQVNVUkVNRU5UX1VOSVRdOiB1bml0ICxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgdGltZWQgZXZlbnRzIHRvIG1lYXN1cmVtZW50cy5cbiAqL1xuZnVuY3Rpb24gdGltZWRFdmVudHNUb01lYXN1cmVtZW50cyhldmVudHMpIHtcbiAgaWYgKCFldmVudHMgfHwgZXZlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBtZWFzdXJlbWVudHMgPSB7fTtcbiAgZXZlbnRzLmZvckVhY2goZXZlbnQgPT4ge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBldmVudC5hdHRyaWJ1dGVzIHx8IHt9O1xuICAgIGNvbnN0IHVuaXQgPSBhdHRyaWJ1dGVzW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfTUVBU1VSRU1FTlRfVU5JVF0gO1xuICAgIGNvbnN0IHZhbHVlID0gYXR0cmlidXRlc1tTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX01FQVNVUkVNRU5UX1ZBTFVFXSA7XG5cbiAgICBpZiAodHlwZW9mIHVuaXQgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIG1lYXN1cmVtZW50c1tldmVudC5uYW1lXSA9IHsgdmFsdWUsIHVuaXQgfTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBtZWFzdXJlbWVudHM7XG59XG5cbmV4cG9ydCB7IHNldE1lYXN1cmVtZW50LCB0aW1lZEV2ZW50c1RvTWVhc3VyZW1lbnRzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZWFzdXJlbWVudC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/measurement.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/sampling.js":
/*!********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/sampling.js ***!
  \********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   sampleSpan: () => (/* binding */ sampleSpan)\n/* harmony export */ });\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_hasSpansEnabled_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/hasSpansEnabled.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/hasSpansEnabled.js\");\n/* harmony import */ var _utils_parseSampleRate_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/parseSampleRate.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/parseSampleRate.js\");\n\n\n\n\n\n/**\n * Makes a sampling decision for the given options.\n *\n * Called every time a root span is created. Only root spans which emerge with a `sampled` value of `true` will be\n * sent to Sentry.\n */\nfunction sampleSpan(\n  options,\n  samplingContext,\n  sampleRand,\n) {\n  // nothing to do if span recording is not enabled\n  if (!(0,_utils_hasSpansEnabled_js__WEBPACK_IMPORTED_MODULE_2__.hasSpansEnabled)(options)) {\n    return [false];\n  }\n\n  let localSampleRateWasApplied = undefined;\n\n  // we would have bailed already if neither `tracesSampler` nor `tracesSampleRate` were defined, so one of these should\n  // work; prefer the hook if so\n  let sampleRate;\n  if (typeof options.tracesSampler === 'function') {\n    sampleRate = options.tracesSampler({\n      ...samplingContext,\n      inheritOrSampleWith: fallbackSampleRate => {\n        // If we have an incoming parent sample rate, we'll just use that one.\n        // The sampling decision will be inherited because of the sample_rand that was generated when the trace reached the incoming boundaries of the SDK.\n        if (typeof samplingContext.parentSampleRate === 'number') {\n          return samplingContext.parentSampleRate;\n        }\n\n        // Fallback if parent sample rate is not on the incoming trace (e.g. if there is no baggage)\n        // This is to provide backwards compatibility if there are incoming traces from older SDKs that don't send a parent sample rate or a sample rand. In these cases we just want to force either a sampling decision on the downstream traces via the sample rate.\n        if (typeof samplingContext.parentSampled === 'boolean') {\n          return Number(samplingContext.parentSampled);\n        }\n\n        return fallbackSampleRate;\n      },\n    });\n    localSampleRateWasApplied = true;\n  } else if (samplingContext.parentSampled !== undefined) {\n    sampleRate = samplingContext.parentSampled;\n  } else if (typeof options.tracesSampleRate !== 'undefined') {\n    sampleRate = options.tracesSampleRate;\n    localSampleRateWasApplied = true;\n  }\n\n  // Since this is coming from the user (or from a function provided by the user), who knows what we might get.\n  // (The only valid values are booleans or numbers between 0 and 1.)\n  const parsedSampleRate = (0,_utils_parseSampleRate_js__WEBPACK_IMPORTED_MODULE_3__.parseSampleRate)(sampleRate);\n\n  if (parsedSampleRate === undefined) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD &&\n      _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.warn(\n        `[Tracing] Discarding root span because of invalid sample rate. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n          sampleRate,\n        )} of type ${JSON.stringify(typeof sampleRate)}.`,\n      );\n    return [false];\n  }\n\n  // if the function returned 0 (or false), or if `tracesSampleRate` is 0, it's a sign the transaction should be dropped\n  if (!parsedSampleRate) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD &&\n      _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.log(\n        `[Tracing] Discarding transaction because ${\n          typeof options.tracesSampler === 'function'\n            ? 'tracesSampler returned 0 or false'\n            : 'a negative sampling decision was inherited or tracesSampleRate is set to 0'\n        }`,\n      );\n    return [false, parsedSampleRate, localSampleRateWasApplied];\n  }\n\n  // We always compare the sample rand for the current execution context against the chosen sample rate.\n  // Read more: https://develop.sentry.dev/sdk/telemetry/traces/#propagated-random-value\n  const shouldSample = sampleRand < parsedSampleRate;\n\n  // if we're not going to keep it, we're done\n  if (!shouldSample) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD &&\n      _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.log(\n        `[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = ${Number(\n          sampleRate,\n        )})`,\n      );\n  }\n\n  return [shouldSample, parsedSampleRate, localSampleRateWasApplied];\n}\n\n\n//# sourceMappingURL=sampling.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYWNpbmcvc2FtcGxpbmcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBZ0Q7QUFDQztBQUNhO0FBQ0E7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sMEVBQWU7QUFDdEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQiwwRUFBZTs7QUFFMUM7QUFDQSxJQUFJLHdEQUFXO0FBQ2YsTUFBTSx5REFBSztBQUNYLHlJQUF5STtBQUN6STtBQUNBLFdBQVcsVUFBVSxrQ0FBa0M7QUFDdkQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLHdEQUFXO0FBQ2YsTUFBTSx5REFBSztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksd0RBQVc7QUFDZixNQUFNLHlEQUFLO0FBQ1gsNEdBQTRHO0FBQzVHO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFc0I7QUFDdEIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS90cmFjaW5nL3NhbXBsaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERFQlVHX0JVSUxEIH0gZnJvbSAnLi4vZGVidWctYnVpbGQuanMnO1xuaW1wb3J0IHsgZGVidWcgfSBmcm9tICcuLi91dGlscy9kZWJ1Zy1sb2dnZXIuanMnO1xuaW1wb3J0IHsgaGFzU3BhbnNFbmFibGVkIH0gZnJvbSAnLi4vdXRpbHMvaGFzU3BhbnNFbmFibGVkLmpzJztcbmltcG9ydCB7IHBhcnNlU2FtcGxlUmF0ZSB9IGZyb20gJy4uL3V0aWxzL3BhcnNlU2FtcGxlUmF0ZS5qcyc7XG5cbi8qKlxuICogTWFrZXMgYSBzYW1wbGluZyBkZWNpc2lvbiBmb3IgdGhlIGdpdmVuIG9wdGlvbnMuXG4gKlxuICogQ2FsbGVkIGV2ZXJ5IHRpbWUgYSByb290IHNwYW4gaXMgY3JlYXRlZC4gT25seSByb290IHNwYW5zIHdoaWNoIGVtZXJnZSB3aXRoIGEgYHNhbXBsZWRgIHZhbHVlIG9mIGB0cnVlYCB3aWxsIGJlXG4gKiBzZW50IHRvIFNlbnRyeS5cbiAqL1xuZnVuY3Rpb24gc2FtcGxlU3BhbihcbiAgb3B0aW9ucyxcbiAgc2FtcGxpbmdDb250ZXh0LFxuICBzYW1wbGVSYW5kLFxuKSB7XG4gIC8vIG5vdGhpbmcgdG8gZG8gaWYgc3BhbiByZWNvcmRpbmcgaXMgbm90IGVuYWJsZWRcbiAgaWYgKCFoYXNTcGFuc0VuYWJsZWQob3B0aW9ucykpIHtcbiAgICByZXR1cm4gW2ZhbHNlXTtcbiAgfVxuXG4gIGxldCBsb2NhbFNhbXBsZVJhdGVXYXNBcHBsaWVkID0gdW5kZWZpbmVkO1xuXG4gIC8vIHdlIHdvdWxkIGhhdmUgYmFpbGVkIGFscmVhZHkgaWYgbmVpdGhlciBgdHJhY2VzU2FtcGxlcmAgbm9yIGB0cmFjZXNTYW1wbGVSYXRlYCB3ZXJlIGRlZmluZWQsIHNvIG9uZSBvZiB0aGVzZSBzaG91bGRcbiAgLy8gd29yazsgcHJlZmVyIHRoZSBob29rIGlmIHNvXG4gIGxldCBzYW1wbGVSYXRlO1xuICBpZiAodHlwZW9mIG9wdGlvbnMudHJhY2VzU2FtcGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHNhbXBsZVJhdGUgPSBvcHRpb25zLnRyYWNlc1NhbXBsZXIoe1xuICAgICAgLi4uc2FtcGxpbmdDb250ZXh0LFxuICAgICAgaW5oZXJpdE9yU2FtcGxlV2l0aDogZmFsbGJhY2tTYW1wbGVSYXRlID0+IHtcbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBpbmNvbWluZyBwYXJlbnQgc2FtcGxlIHJhdGUsIHdlJ2xsIGp1c3QgdXNlIHRoYXQgb25lLlxuICAgICAgICAvLyBUaGUgc2FtcGxpbmcgZGVjaXNpb24gd2lsbCBiZSBpbmhlcml0ZWQgYmVjYXVzZSBvZiB0aGUgc2FtcGxlX3JhbmQgdGhhdCB3YXMgZ2VuZXJhdGVkIHdoZW4gdGhlIHRyYWNlIHJlYWNoZWQgdGhlIGluY29taW5nIGJvdW5kYXJpZXMgb2YgdGhlIFNESy5cbiAgICAgICAgaWYgKHR5cGVvZiBzYW1wbGluZ0NvbnRleHQucGFyZW50U2FtcGxlUmF0ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICByZXR1cm4gc2FtcGxpbmdDb250ZXh0LnBhcmVudFNhbXBsZVJhdGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGYWxsYmFjayBpZiBwYXJlbnQgc2FtcGxlIHJhdGUgaXMgbm90IG9uIHRoZSBpbmNvbWluZyB0cmFjZSAoZS5nLiBpZiB0aGVyZSBpcyBubyBiYWdnYWdlKVxuICAgICAgICAvLyBUaGlzIGlzIHRvIHByb3ZpZGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaWYgdGhlcmUgYXJlIGluY29taW5nIHRyYWNlcyBmcm9tIG9sZGVyIFNES3MgdGhhdCBkb24ndCBzZW5kIGEgcGFyZW50IHNhbXBsZSByYXRlIG9yIGEgc2FtcGxlIHJhbmQuIEluIHRoZXNlIGNhc2VzIHdlIGp1c3Qgd2FudCB0byBmb3JjZSBlaXRoZXIgYSBzYW1wbGluZyBkZWNpc2lvbiBvbiB0aGUgZG93bnN0cmVhbSB0cmFjZXMgdmlhIHRoZSBzYW1wbGUgcmF0ZS5cbiAgICAgICAgaWYgKHR5cGVvZiBzYW1wbGluZ0NvbnRleHQucGFyZW50U2FtcGxlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgcmV0dXJuIE51bWJlcihzYW1wbGluZ0NvbnRleHQucGFyZW50U2FtcGxlZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsbGJhY2tTYW1wbGVSYXRlO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBsb2NhbFNhbXBsZVJhdGVXYXNBcHBsaWVkID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChzYW1wbGluZ0NvbnRleHQucGFyZW50U2FtcGxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc2FtcGxlUmF0ZSA9IHNhbXBsaW5nQ29udGV4dC5wYXJlbnRTYW1wbGVkO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLnRyYWNlc1NhbXBsZVJhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgc2FtcGxlUmF0ZSA9IG9wdGlvbnMudHJhY2VzU2FtcGxlUmF0ZTtcbiAgICBsb2NhbFNhbXBsZVJhdGVXYXNBcHBsaWVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIFNpbmNlIHRoaXMgaXMgY29taW5nIGZyb20gdGhlIHVzZXIgKG9yIGZyb20gYSBmdW5jdGlvbiBwcm92aWRlZCBieSB0aGUgdXNlciksIHdobyBrbm93cyB3aGF0IHdlIG1pZ2h0IGdldC5cbiAgLy8gKFRoZSBvbmx5IHZhbGlkIHZhbHVlcyBhcmUgYm9vbGVhbnMgb3IgbnVtYmVycyBiZXR3ZWVuIDAgYW5kIDEuKVxuICBjb25zdCBwYXJzZWRTYW1wbGVSYXRlID0gcGFyc2VTYW1wbGVSYXRlKHNhbXBsZVJhdGUpO1xuXG4gIGlmIChwYXJzZWRTYW1wbGVSYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICBERUJVR19CVUlMRCAmJlxuICAgICAgZGVidWcud2FybihcbiAgICAgICAgYFtUcmFjaW5nXSBEaXNjYXJkaW5nIHJvb3Qgc3BhbiBiZWNhdXNlIG9mIGludmFsaWQgc2FtcGxlIHJhdGUuIFNhbXBsZSByYXRlIG11c3QgYmUgYSBib29sZWFuIG9yIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMS4gR290ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgc2FtcGxlUmF0ZSxcbiAgICAgICAgKX0gb2YgdHlwZSAke0pTT04uc3RyaW5naWZ5KHR5cGVvZiBzYW1wbGVSYXRlKX0uYCxcbiAgICAgICk7XG4gICAgcmV0dXJuIFtmYWxzZV07XG4gIH1cblxuICAvLyBpZiB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgMCAob3IgZmFsc2UpLCBvciBpZiBgdHJhY2VzU2FtcGxlUmF0ZWAgaXMgMCwgaXQncyBhIHNpZ24gdGhlIHRyYW5zYWN0aW9uIHNob3VsZCBiZSBkcm9wcGVkXG4gIGlmICghcGFyc2VkU2FtcGxlUmF0ZSkge1xuICAgIERFQlVHX0JVSUxEICYmXG4gICAgICBkZWJ1Zy5sb2coXG4gICAgICAgIGBbVHJhY2luZ10gRGlzY2FyZGluZyB0cmFuc2FjdGlvbiBiZWNhdXNlICR7XG4gICAgICAgICAgdHlwZW9mIG9wdGlvbnMudHJhY2VzU2FtcGxlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyAndHJhY2VzU2FtcGxlciByZXR1cm5lZCAwIG9yIGZhbHNlJ1xuICAgICAgICAgICAgOiAnYSBuZWdhdGl2ZSBzYW1wbGluZyBkZWNpc2lvbiB3YXMgaW5oZXJpdGVkIG9yIHRyYWNlc1NhbXBsZVJhdGUgaXMgc2V0IHRvIDAnXG4gICAgICAgIH1gLFxuICAgICAgKTtcbiAgICByZXR1cm4gW2ZhbHNlLCBwYXJzZWRTYW1wbGVSYXRlLCBsb2NhbFNhbXBsZVJhdGVXYXNBcHBsaWVkXTtcbiAgfVxuXG4gIC8vIFdlIGFsd2F5cyBjb21wYXJlIHRoZSBzYW1wbGUgcmFuZCBmb3IgdGhlIGN1cnJlbnQgZXhlY3V0aW9uIGNvbnRleHQgYWdhaW5zdCB0aGUgY2hvc2VuIHNhbXBsZSByYXRlLlxuICAvLyBSZWFkIG1vcmU6IGh0dHBzOi8vZGV2ZWxvcC5zZW50cnkuZGV2L3Nkay90ZWxlbWV0cnkvdHJhY2VzLyNwcm9wYWdhdGVkLXJhbmRvbS12YWx1ZVxuICBjb25zdCBzaG91bGRTYW1wbGUgPSBzYW1wbGVSYW5kIDwgcGFyc2VkU2FtcGxlUmF0ZTtcblxuICAvLyBpZiB3ZSdyZSBub3QgZ29pbmcgdG8ga2VlcCBpdCwgd2UncmUgZG9uZVxuICBpZiAoIXNob3VsZFNhbXBsZSkge1xuICAgIERFQlVHX0JVSUxEICYmXG4gICAgICBkZWJ1Zy5sb2coXG4gICAgICAgIGBbVHJhY2luZ10gRGlzY2FyZGluZyB0cmFuc2FjdGlvbiBiZWNhdXNlIGl0J3Mgbm90IGluY2x1ZGVkIGluIHRoZSByYW5kb20gc2FtcGxlIChzYW1wbGluZyByYXRlID0gJHtOdW1iZXIoXG4gICAgICAgICAgc2FtcGxlUmF0ZSxcbiAgICAgICAgKX0pYCxcbiAgICAgICk7XG4gIH1cblxuICByZXR1cm4gW3Nob3VsZFNhbXBsZSwgcGFyc2VkU2FtcGxlUmF0ZSwgbG9jYWxTYW1wbGVSYXRlV2FzQXBwbGllZF07XG59XG5cbmV4cG9ydCB7IHNhbXBsZVNwYW4gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNhbXBsaW5nLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/sampling.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/sentryNonRecordingSpan.js":
/*!**********************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/sentryNonRecordingSpan.js ***!
  \**********************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   SentryNonRecordingSpan: () => (/* binding */ SentryNonRecordingSpan)\n/* harmony export */ });\n/* harmony import */ var _utils_propagationContext_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/propagationContext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/propagationContext.js\");\n/* harmony import */ var _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/spanUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js\");\n\n\n\n/**\n * A Sentry Span that is non-recording, meaning it will not be sent to Sentry.\n */\nclass SentryNonRecordingSpan  {\n\n   constructor(spanContext = {}) {\n    this._traceId = spanContext.traceId || (0,_utils_propagationContext_js__WEBPACK_IMPORTED_MODULE_0__.generateTraceId)();\n    this._spanId = spanContext.spanId || (0,_utils_propagationContext_js__WEBPACK_IMPORTED_MODULE_0__.generateSpanId)();\n  }\n\n  /** @inheritdoc */\n   spanContext() {\n    return {\n      spanId: this._spanId,\n      traceId: this._traceId,\n      traceFlags: _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_1__.TRACE_FLAG_NONE,\n    };\n  }\n\n  /** @inheritdoc */\n   end(_timestamp) {}\n\n  /** @inheritdoc */\n   setAttribute(_key, _value) {\n    return this;\n  }\n\n  /** @inheritdoc */\n   setAttributes(_values) {\n    return this;\n  }\n\n  /** @inheritdoc */\n   setStatus(_status) {\n    return this;\n  }\n\n  /** @inheritdoc */\n   updateName(_name) {\n    return this;\n  }\n\n  /** @inheritdoc */\n   isRecording() {\n    return false;\n  }\n\n  /** @inheritdoc */\n   addEvent(\n    _name,\n    _attributesOrStartTime,\n    _startTime,\n  ) {\n    return this;\n  }\n\n  /** @inheritDoc */\n   addLink(_link) {\n    return this;\n  }\n\n  /** @inheritDoc */\n   addLinks(_links) {\n    return this;\n  }\n\n  /**\n   * This should generally not be used,\n   * but we need it for being compliant with the OTEL Span interface.\n   *\n   * @hidden\n   * @internal\n   */\n   recordException(_exception, _time) {\n    // noop\n  }\n}\n\n\n//# sourceMappingURL=sentryNonRecordingSpan.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYWNpbmcvc2VudHJ5Tm9uUmVjb3JkaW5nU3Bhbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBaUY7QUFDekI7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtCQUErQjtBQUMvQiwyQ0FBMkMsNkVBQWU7QUFDMUQseUNBQXlDLDRFQUFjO0FBQ3ZEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsZ0VBQWU7QUFDakM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFa0M7QUFDbEMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS90cmFjaW5nL3NlbnRyeU5vblJlY29yZGluZ1NwYW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2VuZXJhdGVUcmFjZUlkLCBnZW5lcmF0ZVNwYW5JZCB9IGZyb20gJy4uL3V0aWxzL3Byb3BhZ2F0aW9uQ29udGV4dC5qcyc7XG5pbXBvcnQgeyBUUkFDRV9GTEFHX05PTkUgfSBmcm9tICcuLi91dGlscy9zcGFuVXRpbHMuanMnO1xuXG4vKipcbiAqIEEgU2VudHJ5IFNwYW4gdGhhdCBpcyBub24tcmVjb3JkaW5nLCBtZWFuaW5nIGl0IHdpbGwgbm90IGJlIHNlbnQgdG8gU2VudHJ5LlxuICovXG5jbGFzcyBTZW50cnlOb25SZWNvcmRpbmdTcGFuICB7XG5cbiAgIGNvbnN0cnVjdG9yKHNwYW5Db250ZXh0ID0ge30pIHtcbiAgICB0aGlzLl90cmFjZUlkID0gc3BhbkNvbnRleHQudHJhY2VJZCB8fCBnZW5lcmF0ZVRyYWNlSWQoKTtcbiAgICB0aGlzLl9zcGFuSWQgPSBzcGFuQ29udGV4dC5zcGFuSWQgfHwgZ2VuZXJhdGVTcGFuSWQoKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgc3BhbkNvbnRleHQoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNwYW5JZDogdGhpcy5fc3BhbklkLFxuICAgICAgdHJhY2VJZDogdGhpcy5fdHJhY2VJZCxcbiAgICAgIHRyYWNlRmxhZ3M6IFRSQUNFX0ZMQUdfTk9ORSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gICBlbmQoX3RpbWVzdGFtcCkge31cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIHNldEF0dHJpYnV0ZShfa2V5LCBfdmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgc2V0QXR0cmlidXRlcyhfdmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIHNldFN0YXR1cyhfc3RhdHVzKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIHVwZGF0ZU5hbWUoX25hbWUpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgaXNSZWNvcmRpbmcoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gICBhZGRFdmVudChcbiAgICBfbmFtZSxcbiAgICBfYXR0cmlidXRlc09yU3RhcnRUaW1lLFxuICAgIF9zdGFydFRpbWUsXG4gICkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gICBhZGRMaW5rKF9saW5rKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgIGFkZExpbmtzKF9saW5rcykge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgc2hvdWxkIGdlbmVyYWxseSBub3QgYmUgdXNlZCxcbiAgICogYnV0IHdlIG5lZWQgaXQgZm9yIGJlaW5nIGNvbXBsaWFudCB3aXRoIHRoZSBPVEVMIFNwYW4gaW50ZXJmYWNlLlxuICAgKlxuICAgKiBAaGlkZGVuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgIHJlY29yZEV4Y2VwdGlvbihfZXhjZXB0aW9uLCBfdGltZSkge1xuICAgIC8vIG5vb3BcbiAgfVxufVxuXG5leHBvcnQgeyBTZW50cnlOb25SZWNvcmRpbmdTcGFuIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW50cnlOb25SZWNvcmRpbmdTcGFuLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/sentryNonRecordingSpan.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/sentrySpan.js":
/*!**********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/sentrySpan.js ***!
  \**********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   SentrySpan: () => (/* binding */ SentrySpan)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _envelope_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../envelope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/envelope.js\");\n/* harmony import */ var _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../semanticAttributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/semanticAttributes.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_propagationContext_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/propagationContext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/propagationContext.js\");\n/* harmony import */ var _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/spanUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js\");\n/* harmony import */ var _utils_time_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/time.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/time.js\");\n/* harmony import */ var _dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./dynamicSamplingContext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js\");\n/* harmony import */ var _logSpans_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./logSpans.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/logSpans.js\");\n/* harmony import */ var _measurement_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./measurement.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/measurement.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/utils.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst MAX_SPAN_COUNT = 1000;\n\n/**\n * Span contains all data about a span\n */\nclass SentrySpan  {\n\n  /** Epoch timestamp in seconds when the span started. */\n\n  /** Epoch timestamp in seconds when the span ended. */\n\n  /** Internal keeper of the status */\n\n  /** The timed events added to this span. */\n\n  /** if true, treat span as a standalone span (not part of a transaction) */\n\n  /**\n   * You should never call the constructor manually, always use `Sentry.startSpan()`\n   * or other span methods.\n   * @internal\n   * @hideconstructor\n   * @hidden\n   */\n   constructor(spanContext = {}) {\n    this._traceId = spanContext.traceId || (0,_utils_propagationContext_js__WEBPACK_IMPORTED_MODULE_5__.generateTraceId)();\n    this._spanId = spanContext.spanId || (0,_utils_propagationContext_js__WEBPACK_IMPORTED_MODULE_5__.generateSpanId)();\n    this._startTime = spanContext.startTimestamp || (0,_utils_time_js__WEBPACK_IMPORTED_MODULE_7__.timestampInSeconds)();\n    this._links = spanContext.links;\n\n    this._attributes = {};\n    this.setAttributes({\n      [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_3__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'manual',\n      [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_3__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: spanContext.op,\n      ...spanContext.attributes,\n    });\n\n    this._name = spanContext.name;\n\n    if (spanContext.parentSpanId) {\n      this._parentSpanId = spanContext.parentSpanId;\n    }\n    // We want to include booleans as well here\n    if ('sampled' in spanContext) {\n      this._sampled = spanContext.sampled;\n    }\n    if (spanContext.endTimestamp) {\n      this._endTime = spanContext.endTimestamp;\n    }\n\n    this._events = [];\n\n    this._isStandaloneSpan = spanContext.isStandalone;\n\n    // If the span is already ended, ensure we finalize the span immediately\n    if (this._endTime) {\n      this._onSpanEnded();\n    }\n  }\n\n  /** @inheritDoc */\n   addLink(link) {\n    if (this._links) {\n      this._links.push(link);\n    } else {\n      this._links = [link];\n    }\n    return this;\n  }\n\n  /** @inheritDoc */\n   addLinks(links) {\n    if (this._links) {\n      this._links.push(...links);\n    } else {\n      this._links = links;\n    }\n    return this;\n  }\n\n  /**\n   * This should generally not be used,\n   * but it is needed for being compliant with the OTEL Span interface.\n   *\n   * @hidden\n   * @internal\n   */\n   recordException(_exception, _time) {\n    // noop\n  }\n\n  /** @inheritdoc */\n   spanContext() {\n    const { _spanId: spanId, _traceId: traceId, _sampled: sampled } = this;\n    return {\n      spanId,\n      traceId,\n      traceFlags: sampled ? _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.TRACE_FLAG_SAMPLED : _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.TRACE_FLAG_NONE,\n    };\n  }\n\n  /** @inheritdoc */\n   setAttribute(key, value) {\n    if (value === undefined) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this._attributes[key];\n    } else {\n      this._attributes[key] = value;\n    }\n\n    return this;\n  }\n\n  /** @inheritdoc */\n   setAttributes(attributes) {\n    Object.keys(attributes).forEach(key => this.setAttribute(key, attributes[key]));\n    return this;\n  }\n\n  /**\n   * This should generally not be used,\n   * but we need it for browser tracing where we want to adjust the start time afterwards.\n   * USE THIS WITH CAUTION!\n   *\n   * @hidden\n   * @internal\n   */\n   updateStartTime(timeInput) {\n    this._startTime = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.spanTimeInputToSeconds)(timeInput);\n  }\n\n  /**\n   * @inheritDoc\n   */\n   setStatus(value) {\n    this._status = value;\n    return this;\n  }\n\n  /**\n   * @inheritDoc\n   */\n   updateName(name) {\n    this._name = name;\n    this.setAttribute(_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_3__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'custom');\n    return this;\n  }\n\n  /** @inheritdoc */\n   end(endTimestamp) {\n    // If already ended, skip\n    if (this._endTime) {\n      return;\n    }\n\n    this._endTime = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.spanTimeInputToSeconds)(endTimestamp);\n    (0,_logSpans_js__WEBPACK_IMPORTED_MODULE_9__.logSpanEnd)(this);\n\n    this._onSpanEnded();\n  }\n\n  /**\n   * Get JSON representation of this span.\n   *\n   * @hidden\n   * @internal This method is purely for internal purposes and should not be used outside\n   * of SDK code. If you need to get a JSON representation of a span,\n   * use `spanToJSON(span)` instead.\n   */\n   getSpanJSON() {\n    return {\n      data: this._attributes,\n      description: this._name,\n      op: this._attributes[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_3__.SEMANTIC_ATTRIBUTE_SENTRY_OP],\n      parent_span_id: this._parentSpanId,\n      span_id: this._spanId,\n      start_timestamp: this._startTime,\n      status: (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.getStatusMessage)(this._status),\n      timestamp: this._endTime,\n      trace_id: this._traceId,\n      origin: this._attributes[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_3__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] ,\n      profile_id: this._attributes[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_3__.SEMANTIC_ATTRIBUTE_PROFILE_ID] ,\n      exclusive_time: this._attributes[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_3__.SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME] ,\n      measurements: (0,_measurement_js__WEBPACK_IMPORTED_MODULE_10__.timedEventsToMeasurements)(this._events),\n      is_segment: (this._isStandaloneSpan && (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.getRootSpan)(this) === this) || undefined,\n      segment_id: this._isStandaloneSpan ? (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.getRootSpan)(this).spanContext().spanId : undefined,\n      links: (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.convertSpanLinksForEnvelope)(this._links),\n    };\n  }\n\n  /** @inheritdoc */\n   isRecording() {\n    return !this._endTime && !!this._sampled;\n  }\n\n  /**\n   * @inheritdoc\n   */\n   addEvent(\n    name,\n    attributesOrStartTime,\n    startTime,\n  ) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_4__.debug.log('[Tracing] Adding an event to span:', name);\n\n    const time = isSpanTimeInput(attributesOrStartTime) ? attributesOrStartTime : startTime || (0,_utils_time_js__WEBPACK_IMPORTED_MODULE_7__.timestampInSeconds)();\n    const attributes = isSpanTimeInput(attributesOrStartTime) ? {} : attributesOrStartTime || {};\n\n    const event = {\n      name,\n      time: (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.spanTimeInputToSeconds)(time),\n      attributes,\n    };\n\n    this._events.push(event);\n\n    return this;\n  }\n\n  /**\n   * This method should generally not be used,\n   * but for now we need a way to publicly check if the `_isStandaloneSpan` flag is set.\n   * USE THIS WITH CAUTION!\n   * @internal\n   * @hidden\n   * @experimental\n   */\n   isStandaloneSpan() {\n    return !!this._isStandaloneSpan;\n  }\n\n  /** Emit `spanEnd` when the span is ended. */\n   _onSpanEnded() {\n    const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n    if (client) {\n      client.emit('spanEnd', this);\n    }\n\n    // A segment span is basically the root span of a local span tree.\n    // So for now, this is either what we previously refer to as the root span,\n    // or a standalone span.\n    const isSegmentSpan = this._isStandaloneSpan || this === (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.getRootSpan)(this);\n\n    if (!isSegmentSpan) {\n      return;\n    }\n\n    // if this is a standalone span, we send it immediately\n    if (this._isStandaloneSpan) {\n      if (this._sampled) {\n        sendSpanEnvelope((0,_envelope_js__WEBPACK_IMPORTED_MODULE_2__.createSpanEnvelope)([this], client));\n      } else {\n        _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD &&\n          _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_4__.debug.log('[Tracing] Discarding standalone span because its trace was not chosen to be sampled.');\n        if (client) {\n          client.recordDroppedEvent('sample_rate', 'span');\n        }\n      }\n      return;\n    }\n\n    const transactionEvent = this._convertSpanToTransaction();\n    if (transactionEvent) {\n      const scope = (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.getCapturedScopesOnSpan)(this).scope || (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n      scope.captureEvent(transactionEvent);\n    }\n  }\n\n  /**\n   * Finish the transaction & prepare the event to send to Sentry.\n   */\n   _convertSpanToTransaction() {\n    // We can only convert finished spans\n    if (!isFullFinishedSpan((0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.spanToJSON)(this))) {\n      return undefined;\n    }\n\n    if (!this._name) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_4__.debug.warn('Transaction has no name, falling back to `<unlabeled transaction>`.');\n      this._name = '<unlabeled transaction>';\n    }\n\n    const { scope: capturedSpanScope, isolationScope: capturedSpanIsolationScope } = (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.getCapturedScopesOnSpan)(this);\n\n    const normalizedRequest = capturedSpanScope?.getScopeData().sdkProcessingMetadata?.normalizedRequest;\n\n    if (this._sampled !== true) {\n      return undefined;\n    }\n\n    // The transaction span itself as well as any potential standalone spans should be filtered out\n    const finishedSpans = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.getSpanDescendants)(this).filter(span => span !== this && !isStandaloneSpan(span));\n\n    const spans = finishedSpans.map(span => (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.spanToJSON)(span)).filter(isFullFinishedSpan);\n\n    const source = this._attributes[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_3__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] ;\n\n    // remove internal root span attributes we don't need to send.\n    /* eslint-disable @typescript-eslint/no-dynamic-delete */\n    delete this._attributes[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_3__.SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n    spans.forEach(span => {\n      delete span.data[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_3__.SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME];\n    });\n    // eslint-enabled-next-line @typescript-eslint/no-dynamic-delete\n\n    const transaction = {\n      contexts: {\n        trace: (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_6__.spanToTransactionTraceContext)(this),\n      },\n      spans:\n        // spans.sort() mutates the array, but `spans` is already a copy so we can safely do this here\n        // we do not use spans anymore after this point\n        spans.length > MAX_SPAN_COUNT\n          ? spans.sort((a, b) => a.start_timestamp - b.start_timestamp).slice(0, MAX_SPAN_COUNT)\n          : spans,\n      start_timestamp: this._startTime,\n      timestamp: this._endTime,\n      transaction: this._name,\n      type: 'transaction',\n      sdkProcessingMetadata: {\n        capturedSpanScope,\n        capturedSpanIsolationScope,\n        dynamicSamplingContext: (0,_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_8__.getDynamicSamplingContextFromSpan)(this),\n      },\n      request: normalizedRequest,\n      ...(source && {\n        transaction_info: {\n          source,\n        },\n      }),\n    };\n\n    const measurements = (0,_measurement_js__WEBPACK_IMPORTED_MODULE_10__.timedEventsToMeasurements)(this._events);\n    const hasMeasurements = measurements && Object.keys(measurements).length;\n\n    if (hasMeasurements) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD &&\n        _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_4__.debug.log(\n          '[Measurements] Adding measurements to transaction event',\n          JSON.stringify(measurements, undefined, 2),\n        );\n      transaction.measurements = measurements;\n    }\n\n    return transaction;\n  }\n}\n\nfunction isSpanTimeInput(value) {\n  return (value && typeof value === 'number') || value instanceof Date || Array.isArray(value);\n}\n\n// We want to filter out any incomplete SpanJSON objects\nfunction isFullFinishedSpan(input) {\n  return !!input.start_timestamp && !!input.timestamp && !!input.span_id && !!input.trace_id;\n}\n\n/** `SentrySpan`s can be sent as a standalone span rather than belonging to a transaction */\nfunction isStandaloneSpan(span) {\n  return span instanceof SentrySpan && span.isStandaloneSpan();\n}\n\n/**\n * Sends a `SpanEnvelope`.\n *\n * Note: If the envelope's spans are dropped, e.g. via `beforeSendSpan`,\n * the envelope will not be sent either.\n */\nfunction sendSpanEnvelope(envelope) {\n  const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  if (!client) {\n    return;\n  }\n\n  const spanItems = envelope[1];\n  if (!spanItems || spanItems.length === 0) {\n    client.recordDroppedEvent('before_send', 'span');\n    return;\n  }\n\n  // sendEnvelope should not throw\n  // eslint-disable-next-line @typescript-eslint/no-floating-promises\n  client.sendEnvelope(envelope);\n}\n\n\n//# sourceMappingURL=sentrySpan.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYWNpbmcvc2VudHJ5U3Bhbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQWlFO0FBQ2pCO0FBQ0k7QUFDc007QUFDek07QUFDZ0M7QUFDOEk7QUFDeks7QUFDMEI7QUFDckM7QUFDa0I7QUFDUjs7QUFFckQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0IsMkNBQTJDLDZFQUFlO0FBQzFELHlDQUF5Qyw0RUFBYztBQUN2RCxvREFBb0Qsa0VBQWtCO0FBQ3RFOztBQUVBO0FBQ0E7QUFDQSxPQUFPLG9GQUFnQztBQUN2QyxPQUFPLGdGQUE0QjtBQUNuQztBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWSx3REFBd0Q7QUFDcEU7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLG1FQUFrQixHQUFHLGdFQUFlO0FBQ2hFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsMkVBQXNCO0FBQzVDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isb0ZBQWdDO0FBQ3REO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQiwyRUFBc0I7QUFDMUMsSUFBSSx3REFBVTs7QUFFZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixnRkFBNEI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0EsY0FBYyxxRUFBZ0I7QUFDOUI7QUFDQTtBQUNBLCtCQUErQixvRkFBZ0M7QUFDL0QsbUNBQW1DLGlGQUE2QjtBQUNoRSx1Q0FBdUMscUZBQWlDO0FBQ3hFLG9CQUFvQiwyRUFBeUI7QUFDN0MsNkNBQTZDLGdFQUFXO0FBQ3hELDJDQUEyQyxnRUFBVztBQUN0RCxhQUFhLGdGQUEyQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHdEQUFXLElBQUkseURBQUs7O0FBRXhCLCtGQUErRixrRUFBa0I7QUFDakgsbUVBQW1FOztBQUVuRTtBQUNBO0FBQ0EsWUFBWSwyRUFBc0I7QUFDbEM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQiw0REFBUztBQUM1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkRBQTZELGdFQUFXOztBQUV4RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGdFQUFrQjtBQUMzQyxRQUFRO0FBQ1IsUUFBUSx3REFBVztBQUNuQixVQUFVLHlEQUFLO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsbUVBQXVCLGdCQUFnQixrRUFBZTtBQUMxRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QiwrREFBVTtBQUN0QztBQUNBOztBQUVBO0FBQ0EsTUFBTSx3REFBVyxJQUFJLHlEQUFLO0FBQzFCO0FBQ0E7O0FBRUEsWUFBWSx1RUFBdUUsRUFBRSxtRUFBdUI7O0FBRTVHOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQix1RUFBa0I7O0FBRTVDLDRDQUE0QywrREFBVTs7QUFFdEQsb0NBQW9DLG9GQUFnQzs7QUFFcEU7QUFDQTtBQUNBLDRCQUE0Qiw4RkFBMEM7QUFDdEU7QUFDQSx1QkFBdUIsOEZBQTBDO0FBQ2pFLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxrRkFBNkI7QUFDNUMsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLDZGQUFpQztBQUNqRSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQOztBQUVBLHlCQUF5QiwyRUFBeUI7QUFDbEQ7O0FBRUE7QUFDQSxNQUFNLHdEQUFXO0FBQ2pCLFFBQVEseURBQUs7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsNERBQVM7QUFDMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRXNCO0FBQ3RCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdHJhY2luZy9zZW50cnlTcGFuLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldENsaWVudCwgZ2V0Q3VycmVudFNjb3BlIH0gZnJvbSAnLi4vY3VycmVudFNjb3Blcy5qcyc7XG5pbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4uL2RlYnVnLWJ1aWxkLmpzJztcbmltcG9ydCB7IGNyZWF0ZVNwYW5FbnZlbG9wZSB9IGZyb20gJy4uL2VudmVsb3BlLmpzJztcbmltcG9ydCB7IFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1AsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRSwgU0VNQU5USUNfQVRUUklCVVRFX0VYQ0xVU0lWRV9USU1FLCBTRU1BTlRJQ19BVFRSSUJVVEVfUFJPRklMRV9JRCwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9DVVNUT01fU1BBTl9OQU1FIH0gZnJvbSAnLi4vc2VtYW50aWNBdHRyaWJ1dGVzLmpzJztcbmltcG9ydCB7IGRlYnVnIH0gZnJvbSAnLi4vdXRpbHMvZGVidWctbG9nZ2VyLmpzJztcbmltcG9ydCB7IGdlbmVyYXRlVHJhY2VJZCwgZ2VuZXJhdGVTcGFuSWQgfSBmcm9tICcuLi91dGlscy9wcm9wYWdhdGlvbkNvbnRleHQuanMnO1xuaW1wb3J0IHsgVFJBQ0VfRkxBR19TQU1QTEVELCBUUkFDRV9GTEFHX05PTkUsIHNwYW5UaW1lSW5wdXRUb1NlY29uZHMsIGNvbnZlcnRTcGFuTGlua3NGb3JFbnZlbG9wZSwgZ2V0Um9vdFNwYW4sIGdldFN0YXR1c01lc3NhZ2UsIHNwYW5Ub0pTT04sIGdldFNwYW5EZXNjZW5kYW50cywgc3BhblRvVHJhbnNhY3Rpb25UcmFjZUNvbnRleHQgfSBmcm9tICcuLi91dGlscy9zcGFuVXRpbHMuanMnO1xuaW1wb3J0IHsgdGltZXN0YW1wSW5TZWNvbmRzIH0gZnJvbSAnLi4vdXRpbHMvdGltZS5qcyc7XG5pbXBvcnQgeyBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4gfSBmcm9tICcuL2R5bmFtaWNTYW1wbGluZ0NvbnRleHQuanMnO1xuaW1wb3J0IHsgbG9nU3BhbkVuZCB9IGZyb20gJy4vbG9nU3BhbnMuanMnO1xuaW1wb3J0IHsgdGltZWRFdmVudHNUb01lYXN1cmVtZW50cyB9IGZyb20gJy4vbWVhc3VyZW1lbnQuanMnO1xuaW1wb3J0IHsgZ2V0Q2FwdHVyZWRTY29wZXNPblNwYW4gfSBmcm9tICcuL3V0aWxzLmpzJztcblxuY29uc3QgTUFYX1NQQU5fQ09VTlQgPSAxMDAwO1xuXG4vKipcbiAqIFNwYW4gY29udGFpbnMgYWxsIGRhdGEgYWJvdXQgYSBzcGFuXG4gKi9cbmNsYXNzIFNlbnRyeVNwYW4gIHtcblxuICAvKiogRXBvY2ggdGltZXN0YW1wIGluIHNlY29uZHMgd2hlbiB0aGUgc3BhbiBzdGFydGVkLiAqL1xuXG4gIC8qKiBFcG9jaCB0aW1lc3RhbXAgaW4gc2Vjb25kcyB3aGVuIHRoZSBzcGFuIGVuZGVkLiAqL1xuXG4gIC8qKiBJbnRlcm5hbCBrZWVwZXIgb2YgdGhlIHN0YXR1cyAqL1xuXG4gIC8qKiBUaGUgdGltZWQgZXZlbnRzIGFkZGVkIHRvIHRoaXMgc3Bhbi4gKi9cblxuICAvKiogaWYgdHJ1ZSwgdHJlYXQgc3BhbiBhcyBhIHN0YW5kYWxvbmUgc3BhbiAobm90IHBhcnQgb2YgYSB0cmFuc2FjdGlvbikgKi9cblxuICAvKipcbiAgICogWW91IHNob3VsZCBuZXZlciBjYWxsIHRoZSBjb25zdHJ1Y3RvciBtYW51YWxseSwgYWx3YXlzIHVzZSBgU2VudHJ5LnN0YXJ0U3BhbigpYFxuICAgKiBvciBvdGhlciBzcGFuIG1ldGhvZHMuXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAaGlkZWNvbnN0cnVjdG9yXG4gICAqIEBoaWRkZW5cbiAgICovXG4gICBjb25zdHJ1Y3RvcihzcGFuQ29udGV4dCA9IHt9KSB7XG4gICAgdGhpcy5fdHJhY2VJZCA9IHNwYW5Db250ZXh0LnRyYWNlSWQgfHwgZ2VuZXJhdGVUcmFjZUlkKCk7XG4gICAgdGhpcy5fc3BhbklkID0gc3BhbkNvbnRleHQuc3BhbklkIHx8IGdlbmVyYXRlU3BhbklkKCk7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gc3BhbkNvbnRleHQuc3RhcnRUaW1lc3RhbXAgfHwgdGltZXN0YW1wSW5TZWNvbmRzKCk7XG4gICAgdGhpcy5fbGlua3MgPSBzcGFuQ29udGV4dC5saW5rcztcblxuICAgIHRoaXMuX2F0dHJpYnV0ZXMgPSB7fTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOXTogJ21hbnVhbCcsXG4gICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUF06IHNwYW5Db250ZXh0Lm9wLFxuICAgICAgLi4uc3BhbkNvbnRleHQuYXR0cmlidXRlcyxcbiAgICB9KTtcblxuICAgIHRoaXMuX25hbWUgPSBzcGFuQ29udGV4dC5uYW1lO1xuXG4gICAgaWYgKHNwYW5Db250ZXh0LnBhcmVudFNwYW5JZCkge1xuICAgICAgdGhpcy5fcGFyZW50U3BhbklkID0gc3BhbkNvbnRleHQucGFyZW50U3BhbklkO1xuICAgIH1cbiAgICAvLyBXZSB3YW50IHRvIGluY2x1ZGUgYm9vbGVhbnMgYXMgd2VsbCBoZXJlXG4gICAgaWYgKCdzYW1wbGVkJyBpbiBzcGFuQ29udGV4dCkge1xuICAgICAgdGhpcy5fc2FtcGxlZCA9IHNwYW5Db250ZXh0LnNhbXBsZWQ7XG4gICAgfVxuICAgIGlmIChzcGFuQ29udGV4dC5lbmRUaW1lc3RhbXApIHtcbiAgICAgIHRoaXMuX2VuZFRpbWUgPSBzcGFuQ29udGV4dC5lbmRUaW1lc3RhbXA7XG4gICAgfVxuXG4gICAgdGhpcy5fZXZlbnRzID0gW107XG5cbiAgICB0aGlzLl9pc1N0YW5kYWxvbmVTcGFuID0gc3BhbkNvbnRleHQuaXNTdGFuZGFsb25lO1xuXG4gICAgLy8gSWYgdGhlIHNwYW4gaXMgYWxyZWFkeSBlbmRlZCwgZW5zdXJlIHdlIGZpbmFsaXplIHRoZSBzcGFuIGltbWVkaWF0ZWx5XG4gICAgaWYgKHRoaXMuX2VuZFRpbWUpIHtcbiAgICAgIHRoaXMuX29uU3BhbkVuZGVkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gICBhZGRMaW5rKGxpbmspIHtcbiAgICBpZiAodGhpcy5fbGlua3MpIHtcbiAgICAgIHRoaXMuX2xpbmtzLnB1c2gobGluayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpbmtzID0gW2xpbmtdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICAgYWRkTGlua3MobGlua3MpIHtcbiAgICBpZiAodGhpcy5fbGlua3MpIHtcbiAgICAgIHRoaXMuX2xpbmtzLnB1c2goLi4ubGlua3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saW5rcyA9IGxpbmtzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHNob3VsZCBnZW5lcmFsbHkgbm90IGJlIHVzZWQsXG4gICAqIGJ1dCBpdCBpcyBuZWVkZWQgZm9yIGJlaW5nIGNvbXBsaWFudCB3aXRoIHRoZSBPVEVMIFNwYW4gaW50ZXJmYWNlLlxuICAgKlxuICAgKiBAaGlkZGVuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgIHJlY29yZEV4Y2VwdGlvbihfZXhjZXB0aW9uLCBfdGltZSkge1xuICAgIC8vIG5vb3BcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgc3BhbkNvbnRleHQoKSB7XG4gICAgY29uc3QgeyBfc3BhbklkOiBzcGFuSWQsIF90cmFjZUlkOiB0cmFjZUlkLCBfc2FtcGxlZDogc2FtcGxlZCB9ID0gdGhpcztcbiAgICByZXR1cm4ge1xuICAgICAgc3BhbklkLFxuICAgICAgdHJhY2VJZCxcbiAgICAgIHRyYWNlRmxhZ3M6IHNhbXBsZWQgPyBUUkFDRV9GTEFHX1NBTVBMRUQgOiBUUkFDRV9GTEFHX05PTkUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxuICAgICAgZGVsZXRlIHRoaXMuX2F0dHJpYnV0ZXNba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYXR0cmlidXRlc1trZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIHNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcykge1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goa2V5ID0+IHRoaXMuc2V0QXR0cmlidXRlKGtleSwgYXR0cmlidXRlc1trZXldKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBzaG91bGQgZ2VuZXJhbGx5IG5vdCBiZSB1c2VkLFxuICAgKiBidXQgd2UgbmVlZCBpdCBmb3IgYnJvd3NlciB0cmFjaW5nIHdoZXJlIHdlIHdhbnQgdG8gYWRqdXN0IHRoZSBzdGFydCB0aW1lIGFmdGVyd2FyZHMuXG4gICAqIFVTRSBUSElTIFdJVEggQ0FVVElPTiFcbiAgICpcbiAgICogQGhpZGRlblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gICB1cGRhdGVTdGFydFRpbWUodGltZUlucHV0KSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gc3BhblRpbWVJbnB1dFRvU2Vjb25kcyh0aW1lSW5wdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAgc2V0U3RhdHVzKHZhbHVlKSB7XG4gICAgdGhpcy5fc3RhdHVzID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gICB1cGRhdGVOYW1lKG5hbWUpIHtcbiAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRSwgJ2N1c3RvbScpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gICBlbmQoZW5kVGltZXN0YW1wKSB7XG4gICAgLy8gSWYgYWxyZWFkeSBlbmRlZCwgc2tpcFxuICAgIGlmICh0aGlzLl9lbmRUaW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZW5kVGltZSA9IHNwYW5UaW1lSW5wdXRUb1NlY29uZHMoZW5kVGltZXN0YW1wKTtcbiAgICBsb2dTcGFuRW5kKHRoaXMpO1xuXG4gICAgdGhpcy5fb25TcGFuRW5kZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNwYW4uXG4gICAqXG4gICAqIEBoaWRkZW5cbiAgICogQGludGVybmFsIFRoaXMgbWV0aG9kIGlzIHB1cmVseSBmb3IgaW50ZXJuYWwgcHVycG9zZXMgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBvdXRzaWRlXG4gICAqIG9mIFNESyBjb2RlLiBJZiB5b3UgbmVlZCB0byBnZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgc3BhbixcbiAgICogdXNlIGBzcGFuVG9KU09OKHNwYW4pYCBpbnN0ZWFkLlxuICAgKi9cbiAgIGdldFNwYW5KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiB0aGlzLl9hdHRyaWJ1dGVzLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuX25hbWUsXG4gICAgICBvcDogdGhpcy5fYXR0cmlidXRlc1tTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QXSxcbiAgICAgIHBhcmVudF9zcGFuX2lkOiB0aGlzLl9wYXJlbnRTcGFuSWQsXG4gICAgICBzcGFuX2lkOiB0aGlzLl9zcGFuSWQsXG4gICAgICBzdGFydF90aW1lc3RhbXA6IHRoaXMuX3N0YXJ0VGltZSxcbiAgICAgIHN0YXR1czogZ2V0U3RhdHVzTWVzc2FnZSh0aGlzLl9zdGF0dXMpLFxuICAgICAgdGltZXN0YW1wOiB0aGlzLl9lbmRUaW1lLFxuICAgICAgdHJhY2VfaWQ6IHRoaXMuX3RyYWNlSWQsXG4gICAgICBvcmlnaW46IHRoaXMuX2F0dHJpYnV0ZXNbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dICxcbiAgICAgIHByb2ZpbGVfaWQ6IHRoaXMuX2F0dHJpYnV0ZXNbU0VNQU5USUNfQVRUUklCVVRFX1BST0ZJTEVfSURdICxcbiAgICAgIGV4Y2x1c2l2ZV90aW1lOiB0aGlzLl9hdHRyaWJ1dGVzW1NFTUFOVElDX0FUVFJJQlVURV9FWENMVVNJVkVfVElNRV0gLFxuICAgICAgbWVhc3VyZW1lbnRzOiB0aW1lZEV2ZW50c1RvTWVhc3VyZW1lbnRzKHRoaXMuX2V2ZW50cyksXG4gICAgICBpc19zZWdtZW50OiAodGhpcy5faXNTdGFuZGFsb25lU3BhbiAmJiBnZXRSb290U3Bhbih0aGlzKSA9PT0gdGhpcykgfHwgdW5kZWZpbmVkLFxuICAgICAgc2VnbWVudF9pZDogdGhpcy5faXNTdGFuZGFsb25lU3BhbiA/IGdldFJvb3RTcGFuKHRoaXMpLnNwYW5Db250ZXh0KCkuc3BhbklkIDogdW5kZWZpbmVkLFxuICAgICAgbGlua3M6IGNvbnZlcnRTcGFuTGlua3NGb3JFbnZlbG9wZSh0aGlzLl9saW5rcyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgaXNSZWNvcmRpbmcoKSB7XG4gICAgcmV0dXJuICF0aGlzLl9lbmRUaW1lICYmICEhdGhpcy5fc2FtcGxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgIGFkZEV2ZW50KFxuICAgIG5hbWUsXG4gICAgYXR0cmlidXRlc09yU3RhcnRUaW1lLFxuICAgIHN0YXJ0VGltZSxcbiAgKSB7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKCdbVHJhY2luZ10gQWRkaW5nIGFuIGV2ZW50IHRvIHNwYW46JywgbmFtZSk7XG5cbiAgICBjb25zdCB0aW1lID0gaXNTcGFuVGltZUlucHV0KGF0dHJpYnV0ZXNPclN0YXJ0VGltZSkgPyBhdHRyaWJ1dGVzT3JTdGFydFRpbWUgOiBzdGFydFRpbWUgfHwgdGltZXN0YW1wSW5TZWNvbmRzKCk7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IGlzU3BhblRpbWVJbnB1dChhdHRyaWJ1dGVzT3JTdGFydFRpbWUpID8ge30gOiBhdHRyaWJ1dGVzT3JTdGFydFRpbWUgfHwge307XG5cbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIG5hbWUsXG4gICAgICB0aW1lOiBzcGFuVGltZUlucHV0VG9TZWNvbmRzKHRpbWUpLFxuICAgICAgYXR0cmlidXRlcyxcbiAgICB9O1xuXG4gICAgdGhpcy5fZXZlbnRzLnB1c2goZXZlbnQpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGdlbmVyYWxseSBub3QgYmUgdXNlZCxcbiAgICogYnV0IGZvciBub3cgd2UgbmVlZCBhIHdheSB0byBwdWJsaWNseSBjaGVjayBpZiB0aGUgYF9pc1N0YW5kYWxvbmVTcGFuYCBmbGFnIGlzIHNldC5cbiAgICogVVNFIFRISVMgV0lUSCBDQVVUSU9OIVxuICAgKiBAaW50ZXJuYWxcbiAgICogQGhpZGRlblxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICAgaXNTdGFuZGFsb25lU3BhbigpIHtcbiAgICByZXR1cm4gISF0aGlzLl9pc1N0YW5kYWxvbmVTcGFuO1xuICB9XG5cbiAgLyoqIEVtaXQgYHNwYW5FbmRgIHdoZW4gdGhlIHNwYW4gaXMgZW5kZWQuICovXG4gICBfb25TcGFuRW5kZWQoKSB7XG4gICAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7XG4gICAgaWYgKGNsaWVudCkge1xuICAgICAgY2xpZW50LmVtaXQoJ3NwYW5FbmQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvLyBBIHNlZ21lbnQgc3BhbiBpcyBiYXNpY2FsbHkgdGhlIHJvb3Qgc3BhbiBvZiBhIGxvY2FsIHNwYW4gdHJlZS5cbiAgICAvLyBTbyBmb3Igbm93LCB0aGlzIGlzIGVpdGhlciB3aGF0IHdlIHByZXZpb3VzbHkgcmVmZXIgdG8gYXMgdGhlIHJvb3Qgc3BhbixcbiAgICAvLyBvciBhIHN0YW5kYWxvbmUgc3Bhbi5cbiAgICBjb25zdCBpc1NlZ21lbnRTcGFuID0gdGhpcy5faXNTdGFuZGFsb25lU3BhbiB8fCB0aGlzID09PSBnZXRSb290U3Bhbih0aGlzKTtcblxuICAgIGlmICghaXNTZWdtZW50U3Bhbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRoaXMgaXMgYSBzdGFuZGFsb25lIHNwYW4sIHdlIHNlbmQgaXQgaW1tZWRpYXRlbHlcbiAgICBpZiAodGhpcy5faXNTdGFuZGFsb25lU3Bhbikge1xuICAgICAgaWYgKHRoaXMuX3NhbXBsZWQpIHtcbiAgICAgICAgc2VuZFNwYW5FbnZlbG9wZShjcmVhdGVTcGFuRW52ZWxvcGUoW3RoaXNdLCBjbGllbnQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIERFQlVHX0JVSUxEICYmXG4gICAgICAgICAgZGVidWcubG9nKCdbVHJhY2luZ10gRGlzY2FyZGluZyBzdGFuZGFsb25lIHNwYW4gYmVjYXVzZSBpdHMgdHJhY2Ugd2FzIG5vdCBjaG9zZW4gdG8gYmUgc2FtcGxlZC4nKTtcbiAgICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICAgIGNsaWVudC5yZWNvcmREcm9wcGVkRXZlbnQoJ3NhbXBsZV9yYXRlJywgJ3NwYW4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uRXZlbnQgPSB0aGlzLl9jb252ZXJ0U3BhblRvVHJhbnNhY3Rpb24oKTtcbiAgICBpZiAodHJhbnNhY3Rpb25FdmVudCkge1xuICAgICAgY29uc3Qgc2NvcGUgPSBnZXRDYXB0dXJlZFNjb3Blc09uU3Bhbih0aGlzKS5zY29wZSB8fCBnZXRDdXJyZW50U2NvcGUoKTtcbiAgICAgIHNjb3BlLmNhcHR1cmVFdmVudCh0cmFuc2FjdGlvbkV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluaXNoIHRoZSB0cmFuc2FjdGlvbiAmIHByZXBhcmUgdGhlIGV2ZW50IHRvIHNlbmQgdG8gU2VudHJ5LlxuICAgKi9cbiAgIF9jb252ZXJ0U3BhblRvVHJhbnNhY3Rpb24oKSB7XG4gICAgLy8gV2UgY2FuIG9ubHkgY29udmVydCBmaW5pc2hlZCBzcGFuc1xuICAgIGlmICghaXNGdWxsRmluaXNoZWRTcGFuKHNwYW5Ub0pTT04odGhpcykpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fbmFtZSkge1xuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcud2FybignVHJhbnNhY3Rpb24gaGFzIG5vIG5hbWUsIGZhbGxpbmcgYmFjayB0byBgPHVubGFiZWxlZCB0cmFuc2FjdGlvbj5gLicpO1xuICAgICAgdGhpcy5fbmFtZSA9ICc8dW5sYWJlbGVkIHRyYW5zYWN0aW9uPic7XG4gICAgfVxuXG4gICAgY29uc3QgeyBzY29wZTogY2FwdHVyZWRTcGFuU2NvcGUsIGlzb2xhdGlvblNjb3BlOiBjYXB0dXJlZFNwYW5Jc29sYXRpb25TY29wZSB9ID0gZ2V0Q2FwdHVyZWRTY29wZXNPblNwYW4odGhpcyk7XG5cbiAgICBjb25zdCBub3JtYWxpemVkUmVxdWVzdCA9IGNhcHR1cmVkU3BhblNjb3BlPy5nZXRTY29wZURhdGEoKS5zZGtQcm9jZXNzaW5nTWV0YWRhdGE/Lm5vcm1hbGl6ZWRSZXF1ZXN0O1xuXG4gICAgaWYgKHRoaXMuX3NhbXBsZWQgIT09IHRydWUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gVGhlIHRyYW5zYWN0aW9uIHNwYW4gaXRzZWxmIGFzIHdlbGwgYXMgYW55IHBvdGVudGlhbCBzdGFuZGFsb25lIHNwYW5zIHNob3VsZCBiZSBmaWx0ZXJlZCBvdXRcbiAgICBjb25zdCBmaW5pc2hlZFNwYW5zID0gZ2V0U3BhbkRlc2NlbmRhbnRzKHRoaXMpLmZpbHRlcihzcGFuID0+IHNwYW4gIT09IHRoaXMgJiYgIWlzU3RhbmRhbG9uZVNwYW4oc3BhbikpO1xuXG4gICAgY29uc3Qgc3BhbnMgPSBmaW5pc2hlZFNwYW5zLm1hcChzcGFuID0+IHNwYW5Ub0pTT04oc3BhbikpLmZpbHRlcihpc0Z1bGxGaW5pc2hlZFNwYW4pO1xuXG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5fYXR0cmlidXRlc1tTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV0gO1xuXG4gICAgLy8gcmVtb3ZlIGludGVybmFsIHJvb3Qgc3BhbiBhdHRyaWJ1dGVzIHdlIGRvbid0IG5lZWQgdG8gc2VuZC5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgKi9cbiAgICBkZWxldGUgdGhpcy5fYXR0cmlidXRlc1tTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX0NVU1RPTV9TUEFOX05BTUVdO1xuICAgIHNwYW5zLmZvckVhY2goc3BhbiA9PiB7XG4gICAgICBkZWxldGUgc3Bhbi5kYXRhW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfQ1VTVE9NX1NQQU5fTkFNRV07XG4gICAgfSk7XG4gICAgLy8gZXNsaW50LWVuYWJsZWQtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxuXG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSB7XG4gICAgICBjb250ZXh0czoge1xuICAgICAgICB0cmFjZTogc3BhblRvVHJhbnNhY3Rpb25UcmFjZUNvbnRleHQodGhpcyksXG4gICAgICB9LFxuICAgICAgc3BhbnM6XG4gICAgICAgIC8vIHNwYW5zLnNvcnQoKSBtdXRhdGVzIHRoZSBhcnJheSwgYnV0IGBzcGFuc2AgaXMgYWxyZWFkeSBhIGNvcHkgc28gd2UgY2FuIHNhZmVseSBkbyB0aGlzIGhlcmVcbiAgICAgICAgLy8gd2UgZG8gbm90IHVzZSBzcGFucyBhbnltb3JlIGFmdGVyIHRoaXMgcG9pbnRcbiAgICAgICAgc3BhbnMubGVuZ3RoID4gTUFYX1NQQU5fQ09VTlRcbiAgICAgICAgICA/IHNwYW5zLnNvcnQoKGEsIGIpID0+IGEuc3RhcnRfdGltZXN0YW1wIC0gYi5zdGFydF90aW1lc3RhbXApLnNsaWNlKDAsIE1BWF9TUEFOX0NPVU5UKVxuICAgICAgICAgIDogc3BhbnMsXG4gICAgICBzdGFydF90aW1lc3RhbXA6IHRoaXMuX3N0YXJ0VGltZSxcbiAgICAgIHRpbWVzdGFtcDogdGhpcy5fZW5kVGltZSxcbiAgICAgIHRyYW5zYWN0aW9uOiB0aGlzLl9uYW1lLFxuICAgICAgdHlwZTogJ3RyYW5zYWN0aW9uJyxcbiAgICAgIHNka1Byb2Nlc3NpbmdNZXRhZGF0YToge1xuICAgICAgICBjYXB0dXJlZFNwYW5TY29wZSxcbiAgICAgICAgY2FwdHVyZWRTcGFuSXNvbGF0aW9uU2NvcGUsXG4gICAgICAgIGR5bmFtaWNTYW1wbGluZ0NvbnRleHQ6IGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3Bhbih0aGlzKSxcbiAgICAgIH0sXG4gICAgICByZXF1ZXN0OiBub3JtYWxpemVkUmVxdWVzdCxcbiAgICAgIC4uLihzb3VyY2UgJiYge1xuICAgICAgICB0cmFuc2FjdGlvbl9pbmZvOiB7XG4gICAgICAgICAgc291cmNlLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IG1lYXN1cmVtZW50cyA9IHRpbWVkRXZlbnRzVG9NZWFzdXJlbWVudHModGhpcy5fZXZlbnRzKTtcbiAgICBjb25zdCBoYXNNZWFzdXJlbWVudHMgPSBtZWFzdXJlbWVudHMgJiYgT2JqZWN0LmtleXMobWVhc3VyZW1lbnRzKS5sZW5ndGg7XG5cbiAgICBpZiAoaGFzTWVhc3VyZW1lbnRzKSB7XG4gICAgICBERUJVR19CVUlMRCAmJlxuICAgICAgICBkZWJ1Zy5sb2coXG4gICAgICAgICAgJ1tNZWFzdXJlbWVudHNdIEFkZGluZyBtZWFzdXJlbWVudHMgdG8gdHJhbnNhY3Rpb24gZXZlbnQnLFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG1lYXN1cmVtZW50cywgdW5kZWZpbmVkLCAyKSxcbiAgICAgICAgKTtcbiAgICAgIHRyYW5zYWN0aW9uLm1lYXN1cmVtZW50cyA9IG1lYXN1cmVtZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb247XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTcGFuVGltZUlucHV0KHZhbHVlKSB7XG4gIHJldHVybiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgfHwgdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG4vLyBXZSB3YW50IHRvIGZpbHRlciBvdXQgYW55IGluY29tcGxldGUgU3BhbkpTT04gb2JqZWN0c1xuZnVuY3Rpb24gaXNGdWxsRmluaXNoZWRTcGFuKGlucHV0KSB7XG4gIHJldHVybiAhIWlucHV0LnN0YXJ0X3RpbWVzdGFtcCAmJiAhIWlucHV0LnRpbWVzdGFtcCAmJiAhIWlucHV0LnNwYW5faWQgJiYgISFpbnB1dC50cmFjZV9pZDtcbn1cblxuLyoqIGBTZW50cnlTcGFuYHMgY2FuIGJlIHNlbnQgYXMgYSBzdGFuZGFsb25lIHNwYW4gcmF0aGVyIHRoYW4gYmVsb25naW5nIHRvIGEgdHJhbnNhY3Rpb24gKi9cbmZ1bmN0aW9uIGlzU3RhbmRhbG9uZVNwYW4oc3Bhbikge1xuICByZXR1cm4gc3BhbiBpbnN0YW5jZW9mIFNlbnRyeVNwYW4gJiYgc3Bhbi5pc1N0YW5kYWxvbmVTcGFuKCk7XG59XG5cbi8qKlxuICogU2VuZHMgYSBgU3BhbkVudmVsb3BlYC5cbiAqXG4gKiBOb3RlOiBJZiB0aGUgZW52ZWxvcGUncyBzcGFucyBhcmUgZHJvcHBlZCwgZS5nLiB2aWEgYGJlZm9yZVNlbmRTcGFuYCxcbiAqIHRoZSBlbnZlbG9wZSB3aWxsIG5vdCBiZSBzZW50IGVpdGhlci5cbiAqL1xuZnVuY3Rpb24gc2VuZFNwYW5FbnZlbG9wZShlbnZlbG9wZSkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcbiAgaWYgKCFjbGllbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzcGFuSXRlbXMgPSBlbnZlbG9wZVsxXTtcbiAgaWYgKCFzcGFuSXRlbXMgfHwgc3Bhbkl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIGNsaWVudC5yZWNvcmREcm9wcGVkRXZlbnQoJ2JlZm9yZV9zZW5kJywgJ3NwYW4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBzZW5kRW52ZWxvcGUgc2hvdWxkIG5vdCB0aHJvd1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gIGNsaWVudC5zZW5kRW52ZWxvcGUoZW52ZWxvcGUpO1xufVxuXG5leHBvcnQgeyBTZW50cnlTcGFuIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZW50cnlTcGFuLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/sentrySpan.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/spanstatus.js":
/*!**********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/spanstatus.js ***!
  \**********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   SPAN_STATUS_ERROR: () => (/* binding */ SPAN_STATUS_ERROR),\n/* harmony export */   SPAN_STATUS_OK: () => (/* binding */ SPAN_STATUS_OK),\n/* harmony export */   SPAN_STATUS_UNSET: () => (/* binding */ SPAN_STATUS_UNSET),\n/* harmony export */   getSpanStatusFromHttpCode: () => (/* binding */ getSpanStatusFromHttpCode),\n/* harmony export */   setHttpStatus: () => (/* binding */ setHttpStatus)\n/* harmony export */ });\nconst SPAN_STATUS_UNSET = 0;\nconst SPAN_STATUS_OK = 1;\nconst SPAN_STATUS_ERROR = 2;\n\n/**\n * Converts a HTTP status code into a sentry status with a message.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\n// https://develop.sentry.dev/sdk/event-payloads/span/\nfunction getSpanStatusFromHttpCode(httpStatus) {\n  if (httpStatus < 400 && httpStatus >= 100) {\n    return { code: SPAN_STATUS_OK };\n  }\n\n  if (httpStatus >= 400 && httpStatus < 500) {\n    switch (httpStatus) {\n      case 401:\n        return { code: SPAN_STATUS_ERROR, message: 'unauthenticated' };\n      case 403:\n        return { code: SPAN_STATUS_ERROR, message: 'permission_denied' };\n      case 404:\n        return { code: SPAN_STATUS_ERROR, message: 'not_found' };\n      case 409:\n        return { code: SPAN_STATUS_ERROR, message: 'already_exists' };\n      case 413:\n        return { code: SPAN_STATUS_ERROR, message: 'failed_precondition' };\n      case 429:\n        return { code: SPAN_STATUS_ERROR, message: 'resource_exhausted' };\n      case 499:\n        return { code: SPAN_STATUS_ERROR, message: 'cancelled' };\n      default:\n        return { code: SPAN_STATUS_ERROR, message: 'invalid_argument' };\n    }\n  }\n\n  if (httpStatus >= 500 && httpStatus < 600) {\n    switch (httpStatus) {\n      case 501:\n        return { code: SPAN_STATUS_ERROR, message: 'unimplemented' };\n      case 503:\n        return { code: SPAN_STATUS_ERROR, message: 'unavailable' };\n      case 504:\n        return { code: SPAN_STATUS_ERROR, message: 'deadline_exceeded' };\n      default:\n        return { code: SPAN_STATUS_ERROR, message: 'internal_error' };\n    }\n  }\n\n  return { code: SPAN_STATUS_ERROR, message: 'unknown_error' };\n}\n\n/**\n * Sets the Http status attributes on the current span based on the http code.\n * Additionally, the span's status is updated, depending on the http code.\n */\nfunction setHttpStatus(span, httpStatus) {\n  span.setAttribute('http.response.status_code', httpStatus);\n\n  const spanStatus = getSpanStatusFromHttpCode(httpStatus);\n  if (spanStatus.message !== 'unknown_error') {\n    span.setStatus(spanStatus);\n  }\n}\n\n\n//# sourceMappingURL=spanstatus.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYWNpbmcvc3BhbnN0YXR1cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7O0FBRUEsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUUwRztBQUMxRyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYWNpbmcvc3BhbnN0YXR1cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBTUEFOX1NUQVRVU19VTlNFVCA9IDA7XG5jb25zdCBTUEFOX1NUQVRVU19PSyA9IDE7XG5jb25zdCBTUEFOX1NUQVRVU19FUlJPUiA9IDI7XG5cbi8qKlxuICogQ29udmVydHMgYSBIVFRQIHN0YXR1cyBjb2RlIGludG8gYSBzZW50cnkgc3RhdHVzIHdpdGggYSBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBodHRwU3RhdHVzIFRoZSBIVFRQIHJlc3BvbnNlIHN0YXR1cyBjb2RlLlxuICogQHJldHVybnMgVGhlIHNwYW4gc3RhdHVzIG9yIHVua25vd25fZXJyb3IuXG4gKi9cbi8vIGh0dHBzOi8vZGV2ZWxvcC5zZW50cnkuZGV2L3Nkay9ldmVudC1wYXlsb2Fkcy9zcGFuL1xuZnVuY3Rpb24gZ2V0U3BhblN0YXR1c0Zyb21IdHRwQ29kZShodHRwU3RhdHVzKSB7XG4gIGlmIChodHRwU3RhdHVzIDwgNDAwICYmIGh0dHBTdGF0dXMgPj0gMTAwKSB7XG4gICAgcmV0dXJuIHsgY29kZTogU1BBTl9TVEFUVVNfT0sgfTtcbiAgfVxuXG4gIGlmIChodHRwU3RhdHVzID49IDQwMCAmJiBodHRwU3RhdHVzIDwgNTAwKSB7XG4gICAgc3dpdGNoIChodHRwU3RhdHVzKSB7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuIHsgY29kZTogU1BBTl9TVEFUVVNfRVJST1IsIG1lc3NhZ2U6ICd1bmF1dGhlbnRpY2F0ZWQnIH07XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuIHsgY29kZTogU1BBTl9TVEFUVVNfRVJST1IsIG1lc3NhZ2U6ICdwZXJtaXNzaW9uX2RlbmllZCcgfTtcbiAgICAgIGNhc2UgNDA0OlxuICAgICAgICByZXR1cm4geyBjb2RlOiBTUEFOX1NUQVRVU19FUlJPUiwgbWVzc2FnZTogJ25vdF9mb3VuZCcgfTtcbiAgICAgIGNhc2UgNDA5OlxuICAgICAgICByZXR1cm4geyBjb2RlOiBTUEFOX1NUQVRVU19FUlJPUiwgbWVzc2FnZTogJ2FscmVhZHlfZXhpc3RzJyB9O1xuICAgICAgY2FzZSA0MTM6XG4gICAgICAgIHJldHVybiB7IGNvZGU6IFNQQU5fU1RBVFVTX0VSUk9SLCBtZXNzYWdlOiAnZmFpbGVkX3ByZWNvbmRpdGlvbicgfTtcbiAgICAgIGNhc2UgNDI5OlxuICAgICAgICByZXR1cm4geyBjb2RlOiBTUEFOX1NUQVRVU19FUlJPUiwgbWVzc2FnZTogJ3Jlc291cmNlX2V4aGF1c3RlZCcgfTtcbiAgICAgIGNhc2UgNDk5OlxuICAgICAgICByZXR1cm4geyBjb2RlOiBTUEFOX1NUQVRVU19FUlJPUiwgbWVzc2FnZTogJ2NhbmNlbGxlZCcgfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7IGNvZGU6IFNQQU5fU1RBVFVTX0VSUk9SLCBtZXNzYWdlOiAnaW52YWxpZF9hcmd1bWVudCcgfTtcbiAgICB9XG4gIH1cblxuICBpZiAoaHR0cFN0YXR1cyA+PSA1MDAgJiYgaHR0cFN0YXR1cyA8IDYwMCkge1xuICAgIHN3aXRjaCAoaHR0cFN0YXR1cykge1xuICAgICAgY2FzZSA1MDE6XG4gICAgICAgIHJldHVybiB7IGNvZGU6IFNQQU5fU1RBVFVTX0VSUk9SLCBtZXNzYWdlOiAndW5pbXBsZW1lbnRlZCcgfTtcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4geyBjb2RlOiBTUEFOX1NUQVRVU19FUlJPUiwgbWVzc2FnZTogJ3VuYXZhaWxhYmxlJyB9O1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiB7IGNvZGU6IFNQQU5fU1RBVFVTX0VSUk9SLCBtZXNzYWdlOiAnZGVhZGxpbmVfZXhjZWVkZWQnIH07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geyBjb2RlOiBTUEFOX1NUQVRVU19FUlJPUiwgbWVzc2FnZTogJ2ludGVybmFsX2Vycm9yJyB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGNvZGU6IFNQQU5fU1RBVFVTX0VSUk9SLCBtZXNzYWdlOiAndW5rbm93bl9lcnJvcicgfTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBIdHRwIHN0YXR1cyBhdHRyaWJ1dGVzIG9uIHRoZSBjdXJyZW50IHNwYW4gYmFzZWQgb24gdGhlIGh0dHAgY29kZS5cbiAqIEFkZGl0aW9uYWxseSwgdGhlIHNwYW4ncyBzdGF0dXMgaXMgdXBkYXRlZCwgZGVwZW5kaW5nIG9uIHRoZSBodHRwIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHNldEh0dHBTdGF0dXMoc3BhbiwgaHR0cFN0YXR1cykge1xuICBzcGFuLnNldEF0dHJpYnV0ZSgnaHR0cC5yZXNwb25zZS5zdGF0dXNfY29kZScsIGh0dHBTdGF0dXMpO1xuXG4gIGNvbnN0IHNwYW5TdGF0dXMgPSBnZXRTcGFuU3RhdHVzRnJvbUh0dHBDb2RlKGh0dHBTdGF0dXMpO1xuICBpZiAoc3BhblN0YXR1cy5tZXNzYWdlICE9PSAndW5rbm93bl9lcnJvcicpIHtcbiAgICBzcGFuLnNldFN0YXR1cyhzcGFuU3RhdHVzKTtcbiAgfVxufVxuXG5leHBvcnQgeyBTUEFOX1NUQVRVU19FUlJPUiwgU1BBTl9TVEFUVVNfT0ssIFNQQU5fU1RBVFVTX1VOU0VULCBnZXRTcGFuU3RhdHVzRnJvbUh0dHBDb2RlLCBzZXRIdHRwU3RhdHVzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zcGFuc3RhdHVzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/spanstatus.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/trace.js":
/*!*****************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/trace.js ***!
  \*****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   continueTrace: () => (/* binding */ continueTrace),\n/* harmony export */   startInactiveSpan: () => (/* binding */ startInactiveSpan),\n/* harmony export */   startNewTrace: () => (/* binding */ startNewTrace),\n/* harmony export */   startSpan: () => (/* binding */ startSpan),\n/* harmony export */   startSpanManual: () => (/* binding */ startSpanManual),\n/* harmony export */   suppressTracing: () => (/* binding */ suppressTracing),\n/* harmony export */   withActiveSpan: () => (/* binding */ withActiveSpan)\n/* harmony export */ });\n/* harmony import */ var _asyncContext_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../asyncContext/index.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/asyncContext/index.js\");\n/* harmony import */ var _carrier_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../carrier.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/carrier.js\");\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../semanticAttributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/semanticAttributes.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_handleCallbackErrors_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/handleCallbackErrors.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/handleCallbackErrors.js\");\n/* harmony import */ var _utils_hasSpansEnabled_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/hasSpansEnabled.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/hasSpansEnabled.js\");\n/* harmony import */ var _utils_parseSampleRate_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/parseSampleRate.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/parseSampleRate.js\");\n/* harmony import */ var _utils_propagationContext_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/propagationContext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/propagationContext.js\");\n/* harmony import */ var _utils_spanOnScope_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/spanOnScope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanOnScope.js\");\n/* harmony import */ var _utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../utils/spanUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js\");\n/* harmony import */ var _utils_tracing_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../utils/tracing.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/tracing.js\");\n/* harmony import */ var _dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./dynamicSamplingContext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js\");\n/* harmony import */ var _logSpans_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./logSpans.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/logSpans.js\");\n/* harmony import */ var _sampling_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./sampling.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/sampling.js\");\n/* harmony import */ var _sentryNonRecordingSpan_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./sentryNonRecordingSpan.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/sentryNonRecordingSpan.js\");\n/* harmony import */ var _sentrySpan_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./sentrySpan.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/sentrySpan.js\");\n/* harmony import */ var _spanstatus_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./spanstatus.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/spanstatus.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./utils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/utils.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* eslint-disable max-lines */\n\n\nconst SUPPRESS_TRACING_KEY = '__SENTRY_SUPPRESS_TRACING__';\n\n/**\n * Wraps a function with a transaction/span and finishes the span after the function is done.\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * If you want to create a span that is not set as active, use {@link startInactiveSpan}.\n *\n * You'll always get a span passed to the callback,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nfunction startSpan(options, callback) {\n  const acs = getAcs();\n  if (acs.startSpan) {\n    return acs.startSpan(options, callback);\n  }\n\n  const spanArguments = parseSentrySpanArguments(options);\n  const { forceTransaction, parentSpan: customParentSpan, scope: customScope } = options;\n\n  // We still need to fork a potentially passed scope, as we set the active span on it\n  // and we need to ensure that it is cleaned up properly once the span ends.\n  const customForkedScope = customScope?.clone();\n\n  return (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.withScope)(customForkedScope, () => {\n    // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n    const wrapper = getActiveSpanWrapper(customParentSpan);\n\n    return wrapper(() => {\n      const scope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getCurrentScope)();\n      const parentSpan = getParentSpan(scope, customParentSpan);\n\n      const shouldSkipSpan = options.onlyIfParent && !parentSpan;\n      const activeSpan = shouldSkipSpan\n        ? new _sentryNonRecordingSpan_js__WEBPACK_IMPORTED_MODULE_16__.SentryNonRecordingSpan()\n        : createChildOrRootSpan({\n            parentSpan,\n            spanArguments,\n            forceTransaction,\n            scope,\n          });\n\n      (0,_utils_spanOnScope_js__WEBPACK_IMPORTED_MODULE_10__._setSpanForScope)(scope, activeSpan);\n\n      return (0,_utils_handleCallbackErrors_js__WEBPACK_IMPORTED_MODULE_6__.handleCallbackErrors)(\n        () => callback(activeSpan),\n        () => {\n          // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n          const { status } = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_11__.spanToJSON)(activeSpan);\n          if (activeSpan.isRecording() && (!status || status === 'ok')) {\n            activeSpan.setStatus({ code: _spanstatus_js__WEBPACK_IMPORTED_MODULE_18__.SPAN_STATUS_ERROR, message: 'internal_error' });\n          }\n        },\n        () => {\n          activeSpan.end();\n        },\n      );\n    });\n  });\n}\n\n/**\n * Similar to `Sentry.startSpan`. Wraps a function with a transaction/span, but does not finish the span\n * after the function is done automatically. Use `span.end()` to end the span.\n *\n * The created span is the active span and will be used as parent by other spans created inside the function\n * and can be accessed via `Sentry.getActiveSpan()`, as long as the function is executed while the scope is active.\n *\n * You'll always get a span passed to the callback,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nfunction startSpanManual(options, callback) {\n  const acs = getAcs();\n  if (acs.startSpanManual) {\n    return acs.startSpanManual(options, callback);\n  }\n\n  const spanArguments = parseSentrySpanArguments(options);\n  const { forceTransaction, parentSpan: customParentSpan, scope: customScope } = options;\n\n  const customForkedScope = customScope?.clone();\n\n  return (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.withScope)(customForkedScope, () => {\n    // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n    const wrapper = getActiveSpanWrapper(customParentSpan);\n\n    return wrapper(() => {\n      const scope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getCurrentScope)();\n      const parentSpan = getParentSpan(scope, customParentSpan);\n\n      const shouldSkipSpan = options.onlyIfParent && !parentSpan;\n      const activeSpan = shouldSkipSpan\n        ? new _sentryNonRecordingSpan_js__WEBPACK_IMPORTED_MODULE_16__.SentryNonRecordingSpan()\n        : createChildOrRootSpan({\n            parentSpan,\n            spanArguments,\n            forceTransaction,\n            scope,\n          });\n\n      (0,_utils_spanOnScope_js__WEBPACK_IMPORTED_MODULE_10__._setSpanForScope)(scope, activeSpan);\n\n      return (0,_utils_handleCallbackErrors_js__WEBPACK_IMPORTED_MODULE_6__.handleCallbackErrors)(\n        // We pass the `finish` function to the callback, so the user can finish the span manually\n        // this is mainly here for historic purposes because previously, we instructed users to call\n        // `finish` instead of `span.end()` to also clean up the scope. Nowadays, calling `span.end()`\n        // or `finish` has the same effect and we simply leave it here to avoid breaking user code.\n        () => callback(activeSpan, () => activeSpan.end()),\n        () => {\n          // Only update the span status if it hasn't been changed yet, and the span is not yet finished\n          const { status } = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_11__.spanToJSON)(activeSpan);\n          if (activeSpan.isRecording() && (!status || status === 'ok')) {\n            activeSpan.setStatus({ code: _spanstatus_js__WEBPACK_IMPORTED_MODULE_18__.SPAN_STATUS_ERROR, message: 'internal_error' });\n          }\n        },\n      );\n    });\n  });\n}\n\n/**\n * Creates a span. This span is not set as active, so will not get automatic instrumentation spans\n * as children or be able to be accessed via `Sentry.getActiveSpan()`.\n *\n * If you want to create a span that is set as active, use {@link startSpan}.\n *\n * This function will always return a span,\n * it may just be a non-recording span if the span is not sampled or if tracing is disabled.\n */\nfunction startInactiveSpan(options) {\n  const acs = getAcs();\n  if (acs.startInactiveSpan) {\n    return acs.startInactiveSpan(options);\n  }\n\n  const spanArguments = parseSentrySpanArguments(options);\n  const { forceTransaction, parentSpan: customParentSpan } = options;\n\n  // If `options.scope` is defined, we use this as as a wrapper,\n  // If `options.parentSpan` is defined, we want to wrap the callback in `withActiveSpan`\n  const wrapper = options.scope\n    ? (callback) => (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.withScope)(options.scope, callback)\n    : customParentSpan !== undefined\n      ? (callback) => withActiveSpan(customParentSpan, callback)\n      : (callback) => callback();\n\n  return wrapper(() => {\n    const scope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getCurrentScope)();\n    const parentSpan = getParentSpan(scope, customParentSpan);\n\n    const shouldSkipSpan = options.onlyIfParent && !parentSpan;\n\n    if (shouldSkipSpan) {\n      return new _sentryNonRecordingSpan_js__WEBPACK_IMPORTED_MODULE_16__.SentryNonRecordingSpan();\n    }\n\n    return createChildOrRootSpan({\n      parentSpan,\n      spanArguments,\n      forceTransaction,\n      scope,\n    });\n  });\n}\n\n/**\n * Continue a trace from `sentry-trace` and `baggage` values.\n * These values can be obtained from incoming request headers, or in the browser from `<meta name=\"sentry-trace\">`\n * and `<meta name=\"baggage\">` HTML tags.\n *\n * Spans started with `startSpan`, `startSpanManual` and `startInactiveSpan`, within the callback will automatically\n * be attached to the incoming trace.\n */\nconst continueTrace = (\n  options\n\n,\n  callback,\n) => {\n  const carrier = (0,_carrier_js__WEBPACK_IMPORTED_MODULE_1__.getMainCarrier)();\n  const acs = (0,_asyncContext_index_js__WEBPACK_IMPORTED_MODULE_0__.getAsyncContextStrategy)(carrier);\n  if (acs.continueTrace) {\n    return acs.continueTrace(options, callback);\n  }\n\n  const { sentryTrace, baggage } = options;\n\n  return (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.withScope)(scope => {\n    const propagationContext = (0,_utils_tracing_js__WEBPACK_IMPORTED_MODULE_12__.propagationContextFromHeaders)(sentryTrace, baggage);\n    scope.setPropagationContext(propagationContext);\n    return callback();\n  });\n};\n\n/**\n * Forks the current scope and sets the provided span as active span in the context of the provided callback. Can be\n * passed `null` to start an entirely new span tree.\n *\n * @param span Spans started in the context of the provided callback will be children of this span. If `null` is passed,\n * spans started within the callback will not be attached to a parent span.\n * @param callback Execution context in which the provided span will be active. Is passed the newly forked scope.\n * @returns the value returned from the provided callback function.\n */\nfunction withActiveSpan(span, callback) {\n  const acs = getAcs();\n  if (acs.withActiveSpan) {\n    return acs.withActiveSpan(span, callback);\n  }\n\n  return (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.withScope)(scope => {\n    (0,_utils_spanOnScope_js__WEBPACK_IMPORTED_MODULE_10__._setSpanForScope)(scope, span || undefined);\n    return callback(scope);\n  });\n}\n\n/** Suppress tracing in the given callback, ensuring no spans are generated inside of it. */\nfunction suppressTracing(callback) {\n  const acs = getAcs();\n\n  if (acs.suppressTracing) {\n    return acs.suppressTracing(callback);\n  }\n\n  return (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.withScope)(scope => {\n    // Note: We do not wait for the callback to finish before we reset the metadata\n    // the reason for this is that otherwise, in the browser this can lead to very weird behavior\n    // as there is only a single top scope, if the callback takes longer to finish,\n    // other, unrelated spans may also be suppressed, which we do not want\n    // so instead, we only suppress tracing synchronoysly in the browser\n    scope.setSDKProcessingMetadata({ [SUPPRESS_TRACING_KEY]: true });\n    const res = callback();\n    scope.setSDKProcessingMetadata({ [SUPPRESS_TRACING_KEY]: undefined });\n    return res;\n  });\n}\n\n/**\n * Starts a new trace for the duration of the provided callback. Spans started within the\n * callback will be part of the new trace instead of a potentially previously started trace.\n *\n * Important: Only use this function if you want to override the default trace lifetime and\n * propagation mechanism of the SDK for the duration and scope of the provided callback.\n * The newly created trace will also be the root of a new distributed trace, for example if\n * you make http requests within the callback.\n * This function might be useful if the operation you want to instrument should not be part\n * of a potentially ongoing trace.\n *\n * Default behavior:\n * - Server-side: A new trace is started for each incoming request.\n * - Browser: A new trace is started for each page our route. Navigating to a new route\n *            or page will automatically create a new trace.\n */\nfunction startNewTrace(callback) {\n  return (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.withScope)(scope => {\n    scope.setPropagationContext({\n      traceId: (0,_utils_propagationContext_js__WEBPACK_IMPORTED_MODULE_9__.generateTraceId)(),\n      sampleRand: Math.random(),\n    });\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_5__.debug.log(`Starting a new trace with id ${scope.getPropagationContext().traceId}`);\n    return withActiveSpan(null, callback);\n  });\n}\n\nfunction createChildOrRootSpan({\n  parentSpan,\n  spanArguments,\n  forceTransaction,\n  scope,\n}\n\n) {\n  if (!(0,_utils_hasSpansEnabled_js__WEBPACK_IMPORTED_MODULE_7__.hasSpansEnabled)()) {\n    const span = new _sentryNonRecordingSpan_js__WEBPACK_IMPORTED_MODULE_16__.SentryNonRecordingSpan();\n\n    // If this is a root span, we ensure to freeze a DSC\n    // So we can have at least partial data here\n    if (forceTransaction || !parentSpan) {\n      const dsc = {\n        sampled: 'false',\n        sample_rate: '0',\n        transaction: spanArguments.name,\n        ...(0,_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_13__.getDynamicSamplingContextFromSpan)(span),\n      } ;\n      (0,_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_13__.freezeDscOnSpan)(span, dsc);\n    }\n\n    return span;\n  }\n\n  const isolationScope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getIsolationScope)();\n\n  let span;\n  if (parentSpan && !forceTransaction) {\n    span = _startChildSpan(parentSpan, scope, spanArguments);\n    (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_11__.addChildSpanToSpan)(parentSpan, span);\n  } else if (parentSpan) {\n    // If we forced a transaction but have a parent span, make sure to continue from the parent span, not the scope\n    const dsc = (0,_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_13__.getDynamicSamplingContextFromSpan)(parentSpan);\n    const { traceId, spanId: parentSpanId } = parentSpan.spanContext();\n    const parentSampled = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_11__.spanIsSampled)(parentSpan);\n\n    span = _startRootSpan(\n      {\n        traceId,\n        parentSpanId,\n        ...spanArguments,\n      },\n      scope,\n      parentSampled,\n    );\n\n    (0,_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_13__.freezeDscOnSpan)(span, dsc);\n  } else {\n    const {\n      traceId,\n      dsc,\n      parentSpanId,\n      sampled: parentSampled,\n    } = {\n      ...isolationScope.getPropagationContext(),\n      ...scope.getPropagationContext(),\n    };\n\n    span = _startRootSpan(\n      {\n        traceId,\n        parentSpanId,\n        ...spanArguments,\n      },\n      scope,\n      parentSampled,\n    );\n\n    if (dsc) {\n      (0,_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_13__.freezeDscOnSpan)(span, dsc);\n    }\n  }\n\n  (0,_logSpans_js__WEBPACK_IMPORTED_MODULE_14__.logSpanStart)(span);\n\n  (0,_utils_js__WEBPACK_IMPORTED_MODULE_19__.setCapturedScopesOnSpan)(span, scope, isolationScope);\n\n  return span;\n}\n\n/**\n * This converts StartSpanOptions to SentrySpanArguments.\n * For the most part (for now) we accept the same options,\n * but some of them need to be transformed.\n */\nfunction parseSentrySpanArguments(options) {\n  const exp = options.experimental || {};\n  const initialCtx = {\n    isStandalone: exp.standalone,\n    ...options,\n  };\n\n  if (options.startTime) {\n    const ctx = { ...initialCtx };\n    ctx.startTimestamp = (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_11__.spanTimeInputToSeconds)(options.startTime);\n    delete ctx.startTime;\n    return ctx;\n  }\n\n  return initialCtx;\n}\n\nfunction getAcs() {\n  const carrier = (0,_carrier_js__WEBPACK_IMPORTED_MODULE_1__.getMainCarrier)();\n  return (0,_asyncContext_index_js__WEBPACK_IMPORTED_MODULE_0__.getAsyncContextStrategy)(carrier);\n}\n\nfunction _startRootSpan(spanArguments, scope, parentSampled) {\n  const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getClient)();\n  const options = client?.getOptions() || {};\n\n  const { name = '' } = spanArguments;\n\n  const mutableSpanSamplingData = { spanAttributes: { ...spanArguments.attributes }, spanName: name, parentSampled };\n\n  // we don't care about the decision for the moment; this is just a placeholder\n  client?.emit('beforeSampling', mutableSpanSamplingData, { decision: false });\n\n  // If hook consumers override the parentSampled flag, we will use that value instead of the actual one\n  const finalParentSampled = mutableSpanSamplingData.parentSampled ?? parentSampled;\n  const finalAttributes = mutableSpanSamplingData.spanAttributes;\n\n  const currentPropagationContext = scope.getPropagationContext();\n  const [sampled, sampleRate, localSampleRateWasApplied] = scope.getScopeData().sdkProcessingMetadata[\n    SUPPRESS_TRACING_KEY\n  ]\n    ? [false]\n    : (0,_sampling_js__WEBPACK_IMPORTED_MODULE_15__.sampleSpan)(\n        options,\n        {\n          name,\n          parentSampled: finalParentSampled,\n          attributes: finalAttributes,\n          parentSampleRate: (0,_utils_parseSampleRate_js__WEBPACK_IMPORTED_MODULE_8__.parseSampleRate)(currentPropagationContext.dsc?.sample_rate),\n        },\n        currentPropagationContext.sampleRand,\n      );\n\n  const rootSpan = new _sentrySpan_js__WEBPACK_IMPORTED_MODULE_17__.SentrySpan({\n    ...spanArguments,\n    attributes: {\n      [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_4__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom',\n      [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_4__.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE]:\n        sampleRate !== undefined && localSampleRateWasApplied ? sampleRate : undefined,\n      ...finalAttributes,\n    },\n    sampled,\n  });\n\n  if (!sampled && client) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_5__.debug.log('[Tracing] Discarding root span because its trace was not chosen to be sampled.');\n    client.recordDroppedEvent('sample_rate', 'transaction');\n  }\n\n  if (client) {\n    client.emit('spanStart', rootSpan);\n  }\n\n  return rootSpan;\n}\n\n/**\n * Creates a new `Span` while setting the current `Span.id` as `parentSpanId`.\n * This inherits the sampling decision from the parent span.\n */\nfunction _startChildSpan(parentSpan, scope, spanArguments) {\n  const { spanId, traceId } = parentSpan.spanContext();\n  const sampled = scope.getScopeData().sdkProcessingMetadata[SUPPRESS_TRACING_KEY] ? false : (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_11__.spanIsSampled)(parentSpan);\n\n  const childSpan = sampled\n    ? new _sentrySpan_js__WEBPACK_IMPORTED_MODULE_17__.SentrySpan({\n        ...spanArguments,\n        parentSpanId: spanId,\n        traceId,\n        sampled,\n      })\n    : new _sentryNonRecordingSpan_js__WEBPACK_IMPORTED_MODULE_16__.SentryNonRecordingSpan({ traceId });\n\n  (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_11__.addChildSpanToSpan)(parentSpan, childSpan);\n\n  const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getClient)();\n  if (client) {\n    client.emit('spanStart', childSpan);\n    // If it has an endTimestamp, it's already ended\n    if (spanArguments.endTimestamp) {\n      client.emit('spanEnd', childSpan);\n    }\n  }\n\n  return childSpan;\n}\n\nfunction getParentSpan(scope, customParentSpan) {\n  // always use the passed in span directly\n  if (customParentSpan) {\n    return customParentSpan ;\n  }\n\n  // This is different from `undefined` as it means the user explicitly wants no parent span\n  if (customParentSpan === null) {\n    return undefined;\n  }\n\n  const span = (0,_utils_spanOnScope_js__WEBPACK_IMPORTED_MODULE_10__._getSpanForScope)(scope) ;\n\n  if (!span) {\n    return undefined;\n  }\n\n  const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getClient)();\n  const options = client ? client.getOptions() : {};\n  if (options.parentSpanIsAlwaysRootSpan) {\n    return (0,_utils_spanUtils_js__WEBPACK_IMPORTED_MODULE_11__.getRootSpan)(span) ;\n  }\n\n  return span;\n}\n\nfunction getActiveSpanWrapper(parentSpan) {\n  return parentSpan !== undefined\n    ? (callback) => {\n        return withActiveSpan(parentSpan, callback);\n      }\n    : (callback) => callback();\n}\n\n\n//# sourceMappingURL=trace.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYWNpbmcvdHJhY2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQW1FO0FBQ3BCO0FBQ2dEO0FBQy9DO0FBQ21FO0FBQ2xFO0FBQ3VCO0FBQ1Y7QUFDQTtBQUNHO0FBQ1k7QUFDOEM7QUFDdkQ7QUFDNkI7QUFDcEQ7QUFDRjtBQUMwQjtBQUN4QjtBQUNPO0FBQ0M7O0FBRXJEOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFLHdCQUF3QjtBQUN4RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVLHFFQUFxRTs7QUFFL0U7QUFDQTtBQUNBOztBQUVBLFNBQVMsNERBQVM7QUFDbEI7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixrRUFBZTtBQUNuQzs7QUFFQTtBQUNBO0FBQ0EsY0FBYywrRUFBc0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7O0FBRVgsTUFBTSx3RUFBZ0I7O0FBRXRCLGFBQWEsb0ZBQW9CO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixTQUFTLEVBQUUsZ0VBQVU7QUFDdkM7QUFDQSxtQ0FBbUMsTUFBTSw4REFBaUIsNkJBQTZCO0FBQ3ZGO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFVBQVUscUVBQXFFOztBQUUvRTs7QUFFQSxTQUFTLDREQUFTO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0Isa0VBQWU7QUFDbkM7O0FBRUE7QUFDQTtBQUNBLGNBQWMsK0VBQXNCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXOztBQUVYLE1BQU0sd0VBQWdCOztBQUV0QixhQUFhLG9GQUFvQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixTQUFTLEVBQUUsZ0VBQVU7QUFDdkM7QUFDQSxtQ0FBbUMsTUFBTSw4REFBaUIsNkJBQTZCO0FBQ3ZGO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCxnQkFBZ0I7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVSxpREFBaUQ7O0FBRTNEO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiw0REFBUztBQUM3QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0Isa0VBQWU7QUFDakM7O0FBRUE7O0FBRUE7QUFDQSxpQkFBaUIsK0VBQXNCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiwyREFBYztBQUNoQyxjQUFjLCtFQUF1QjtBQUNyQztBQUNBO0FBQ0E7O0FBRUEsVUFBVSx1QkFBdUI7O0FBRWpDLFNBQVMsNERBQVM7QUFDbEIsK0JBQStCLGlGQUE2QjtBQUM1RDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyw0REFBUztBQUNsQixJQUFJLHdFQUFnQjtBQUNwQjtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFNBQVMsNERBQVM7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyw4QkFBOEI7QUFDbkU7QUFDQSxxQ0FBcUMsbUNBQW1DO0FBQ3hFO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLDREQUFTO0FBQ2xCO0FBQ0EsZUFBZSw2RUFBZTtBQUM5QjtBQUNBLEtBQUs7QUFDTCxJQUFJLHdEQUFXLElBQUkseURBQUsscUNBQXFDLHNDQUFzQztBQUNuRztBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPLDBFQUFlO0FBQ3RCLHFCQUFxQiwrRUFBc0I7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4RkFBaUM7QUFDNUM7QUFDQSxNQUFNLDRFQUFlO0FBQ3JCOztBQUVBO0FBQ0E7O0FBRUEseUJBQXlCLG9FQUFpQjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0EsSUFBSSx3RUFBa0I7QUFDdEIsSUFBSTtBQUNKO0FBQ0EsZ0JBQWdCLDhGQUFpQztBQUNqRCxZQUFZLGdDQUFnQztBQUM1QywwQkFBMEIsbUVBQWE7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBLElBQUksNEVBQWU7QUFDbkIsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSw0RUFBZTtBQUNyQjtBQUNBOztBQUVBLEVBQUUsMkRBQVk7O0FBRWQsRUFBRSxtRUFBdUI7O0FBRXpCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQjtBQUNsQix5QkFBeUIsNEVBQXNCO0FBQy9DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLDJEQUFjO0FBQ2hDLFNBQVMsK0VBQXVCO0FBQ2hDOztBQUVBO0FBQ0EsaUJBQWlCLDREQUFTO0FBQzFCOztBQUVBLFVBQVUsWUFBWTs7QUFFdEIsb0NBQW9DLGtCQUFrQiw2QkFBNkI7O0FBRW5GLHNEQUFzRDtBQUN0RCw0REFBNEQsaUJBQWlCOztBQUU3RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0seURBQVU7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QiwwRUFBZTtBQUMzQyxTQUFTO0FBQ1Q7QUFDQTs7QUFFQSx1QkFBdUIsdURBQVU7QUFDakM7QUFDQTtBQUNBLE9BQU8sb0ZBQWdDO0FBQ3ZDLE9BQU8seUZBQXFDO0FBQzVDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHOztBQUVIO0FBQ0EsSUFBSSx3REFBVyxJQUFJLHlEQUFLO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsa0JBQWtCO0FBQzVCLDZGQUE2RixtRUFBYTs7QUFFMUc7QUFDQSxVQUFVLHVEQUFVO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLFVBQVUsK0VBQXNCLEdBQUcsU0FBUzs7QUFFNUMsRUFBRSx3RUFBa0I7O0FBRXBCLGlCQUFpQiw0REFBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZSx3RUFBZ0I7O0FBRS9CO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsNERBQVM7QUFDMUI7QUFDQTtBQUNBLFdBQVcsaUVBQVc7QUFDdEI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFd0g7QUFDeEgiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS90cmFjaW5nL3RyYWNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEFzeW5jQ29udGV4dFN0cmF0ZWd5IH0gZnJvbSAnLi4vYXN5bmNDb250ZXh0L2luZGV4LmpzJztcbmltcG9ydCB7IGdldE1haW5DYXJyaWVyIH0gZnJvbSAnLi4vY2Fycmllci5qcyc7XG5pbXBvcnQgeyB3aXRoU2NvcGUsIGdldEN1cnJlbnRTY29wZSwgZ2V0Q2xpZW50LCBnZXRJc29sYXRpb25TY29wZSB9IGZyb20gJy4uL2N1cnJlbnRTY29wZXMuanMnO1xuaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NBTVBMRV9SQVRFLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRSB9IGZyb20gJy4uL3NlbWFudGljQXR0cmlidXRlcy5qcyc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4uL3V0aWxzL2RlYnVnLWxvZ2dlci5qcyc7XG5pbXBvcnQgeyBoYW5kbGVDYWxsYmFja0Vycm9ycyB9IGZyb20gJy4uL3V0aWxzL2hhbmRsZUNhbGxiYWNrRXJyb3JzLmpzJztcbmltcG9ydCB7IGhhc1NwYW5zRW5hYmxlZCB9IGZyb20gJy4uL3V0aWxzL2hhc1NwYW5zRW5hYmxlZC5qcyc7XG5pbXBvcnQgeyBwYXJzZVNhbXBsZVJhdGUgfSBmcm9tICcuLi91dGlscy9wYXJzZVNhbXBsZVJhdGUuanMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVUcmFjZUlkIH0gZnJvbSAnLi4vdXRpbHMvcHJvcGFnYXRpb25Db250ZXh0LmpzJztcbmltcG9ydCB7IF9zZXRTcGFuRm9yU2NvcGUsIF9nZXRTcGFuRm9yU2NvcGUgfSBmcm9tICcuLi91dGlscy9zcGFuT25TY29wZS5qcyc7XG5pbXBvcnQgeyBzcGFuVG9KU09OLCBzcGFuVGltZUlucHV0VG9TZWNvbmRzLCBnZXRSb290U3BhbiwgYWRkQ2hpbGRTcGFuVG9TcGFuLCBzcGFuSXNTYW1wbGVkIH0gZnJvbSAnLi4vdXRpbHMvc3BhblV0aWxzLmpzJztcbmltcG9ydCB7IHByb3BhZ2F0aW9uQ29udGV4dEZyb21IZWFkZXJzIH0gZnJvbSAnLi4vdXRpbHMvdHJhY2luZy5qcyc7XG5pbXBvcnQgeyBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4sIGZyZWV6ZURzY09uU3BhbiB9IGZyb20gJy4vZHluYW1pY1NhbXBsaW5nQ29udGV4dC5qcyc7XG5pbXBvcnQgeyBsb2dTcGFuU3RhcnQgfSBmcm9tICcuL2xvZ1NwYW5zLmpzJztcbmltcG9ydCB7IHNhbXBsZVNwYW4gfSBmcm9tICcuL3NhbXBsaW5nLmpzJztcbmltcG9ydCB7IFNlbnRyeU5vblJlY29yZGluZ1NwYW4gfSBmcm9tICcuL3NlbnRyeU5vblJlY29yZGluZ1NwYW4uanMnO1xuaW1wb3J0IHsgU2VudHJ5U3BhbiB9IGZyb20gJy4vc2VudHJ5U3Bhbi5qcyc7XG5pbXBvcnQgeyBTUEFOX1NUQVRVU19FUlJPUiB9IGZyb20gJy4vc3BhbnN0YXR1cy5qcyc7XG5pbXBvcnQgeyBzZXRDYXB0dXJlZFNjb3Blc09uU3BhbiB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGluZXMgKi9cblxuXG5jb25zdCBTVVBQUkVTU19UUkFDSU5HX0tFWSA9ICdfX1NFTlRSWV9TVVBQUkVTU19UUkFDSU5HX18nO1xuXG4vKipcbiAqIFdyYXBzIGEgZnVuY3Rpb24gd2l0aCBhIHRyYW5zYWN0aW9uL3NwYW4gYW5kIGZpbmlzaGVzIHRoZSBzcGFuIGFmdGVyIHRoZSBmdW5jdGlvbiBpcyBkb25lLlxuICogVGhlIGNyZWF0ZWQgc3BhbiBpcyB0aGUgYWN0aXZlIHNwYW4gYW5kIHdpbGwgYmUgdXNlZCBhcyBwYXJlbnQgYnkgb3RoZXIgc3BhbnMgY3JlYXRlZCBpbnNpZGUgdGhlIGZ1bmN0aW9uXG4gKiBhbmQgY2FuIGJlIGFjY2Vzc2VkIHZpYSBgU2VudHJ5LmdldEFjdGl2ZVNwYW4oKWAsIGFzIGxvbmcgYXMgdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIHdoaWxlIHRoZSBzY29wZSBpcyBhY3RpdmUuXG4gKlxuICogSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgc3BhbiB0aGF0IGlzIG5vdCBzZXQgYXMgYWN0aXZlLCB1c2Uge0BsaW5rIHN0YXJ0SW5hY3RpdmVTcGFufS5cbiAqXG4gKiBZb3UnbGwgYWx3YXlzIGdldCBhIHNwYW4gcGFzc2VkIHRvIHRoZSBjYWxsYmFjayxcbiAqIGl0IG1heSBqdXN0IGJlIGEgbm9uLXJlY29yZGluZyBzcGFuIGlmIHRoZSBzcGFuIGlzIG5vdCBzYW1wbGVkIG9yIGlmIHRyYWNpbmcgaXMgZGlzYWJsZWQuXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0U3BhbihvcHRpb25zLCBjYWxsYmFjaykge1xuICBjb25zdCBhY3MgPSBnZXRBY3MoKTtcbiAgaWYgKGFjcy5zdGFydFNwYW4pIHtcbiAgICByZXR1cm4gYWNzLnN0YXJ0U3BhbihvcHRpb25zLCBjYWxsYmFjayk7XG4gIH1cblxuICBjb25zdCBzcGFuQXJndW1lbnRzID0gcGFyc2VTZW50cnlTcGFuQXJndW1lbnRzKG9wdGlvbnMpO1xuICBjb25zdCB7IGZvcmNlVHJhbnNhY3Rpb24sIHBhcmVudFNwYW46IGN1c3RvbVBhcmVudFNwYW4sIHNjb3BlOiBjdXN0b21TY29wZSB9ID0gb3B0aW9ucztcblxuICAvLyBXZSBzdGlsbCBuZWVkIHRvIGZvcmsgYSBwb3RlbnRpYWxseSBwYXNzZWQgc2NvcGUsIGFzIHdlIHNldCB0aGUgYWN0aXZlIHNwYW4gb24gaXRcbiAgLy8gYW5kIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgaXQgaXMgY2xlYW5lZCB1cCBwcm9wZXJseSBvbmNlIHRoZSBzcGFuIGVuZHMuXG4gIGNvbnN0IGN1c3RvbUZvcmtlZFNjb3BlID0gY3VzdG9tU2NvcGU/LmNsb25lKCk7XG5cbiAgcmV0dXJuIHdpdGhTY29wZShjdXN0b21Gb3JrZWRTY29wZSwgKCkgPT4ge1xuICAgIC8vIElmIGBvcHRpb25zLnBhcmVudFNwYW5gIGlzIGRlZmluZWQsIHdlIHdhbnQgdG8gd3JhcCB0aGUgY2FsbGJhY2sgaW4gYHdpdGhBY3RpdmVTcGFuYFxuICAgIGNvbnN0IHdyYXBwZXIgPSBnZXRBY3RpdmVTcGFuV3JhcHBlcihjdXN0b21QYXJlbnRTcGFuKTtcblxuICAgIHJldHVybiB3cmFwcGVyKCgpID0+IHtcbiAgICAgIGNvbnN0IHNjb3BlID0gZ2V0Q3VycmVudFNjb3BlKCk7XG4gICAgICBjb25zdCBwYXJlbnRTcGFuID0gZ2V0UGFyZW50U3BhbihzY29wZSwgY3VzdG9tUGFyZW50U3Bhbik7XG5cbiAgICAgIGNvbnN0IHNob3VsZFNraXBTcGFuID0gb3B0aW9ucy5vbmx5SWZQYXJlbnQgJiYgIXBhcmVudFNwYW47XG4gICAgICBjb25zdCBhY3RpdmVTcGFuID0gc2hvdWxkU2tpcFNwYW5cbiAgICAgICAgPyBuZXcgU2VudHJ5Tm9uUmVjb3JkaW5nU3BhbigpXG4gICAgICAgIDogY3JlYXRlQ2hpbGRPclJvb3RTcGFuKHtcbiAgICAgICAgICAgIHBhcmVudFNwYW4sXG4gICAgICAgICAgICBzcGFuQXJndW1lbnRzLFxuICAgICAgICAgICAgZm9yY2VUcmFuc2FjdGlvbixcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICBfc2V0U3BhbkZvclNjb3BlKHNjb3BlLCBhY3RpdmVTcGFuKTtcblxuICAgICAgcmV0dXJuIGhhbmRsZUNhbGxiYWNrRXJyb3JzKFxuICAgICAgICAoKSA9PiBjYWxsYmFjayhhY3RpdmVTcGFuKSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIHRoZSBzcGFuIHN0YXR1cyBpZiBpdCBoYXNuJ3QgYmVlbiBjaGFuZ2VkIHlldCwgYW5kIHRoZSBzcGFuIGlzIG5vdCB5ZXQgZmluaXNoZWRcbiAgICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gc3BhblRvSlNPTihhY3RpdmVTcGFuKTtcbiAgICAgICAgICBpZiAoYWN0aXZlU3Bhbi5pc1JlY29yZGluZygpICYmICghc3RhdHVzIHx8IHN0YXR1cyA9PT0gJ29rJykpIHtcbiAgICAgICAgICAgIGFjdGl2ZVNwYW4uc2V0U3RhdHVzKHsgY29kZTogU1BBTl9TVEFUVVNfRVJST1IsIG1lc3NhZ2U6ICdpbnRlcm5hbF9lcnJvcicgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgYWN0aXZlU3Bhbi5lbmQoKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFNpbWlsYXIgdG8gYFNlbnRyeS5zdGFydFNwYW5gLiBXcmFwcyBhIGZ1bmN0aW9uIHdpdGggYSB0cmFuc2FjdGlvbi9zcGFuLCBidXQgZG9lcyBub3QgZmluaXNoIHRoZSBzcGFuXG4gKiBhZnRlciB0aGUgZnVuY3Rpb24gaXMgZG9uZSBhdXRvbWF0aWNhbGx5LiBVc2UgYHNwYW4uZW5kKClgIHRvIGVuZCB0aGUgc3Bhbi5cbiAqXG4gKiBUaGUgY3JlYXRlZCBzcGFuIGlzIHRoZSBhY3RpdmUgc3BhbiBhbmQgd2lsbCBiZSB1c2VkIGFzIHBhcmVudCBieSBvdGhlciBzcGFucyBjcmVhdGVkIGluc2lkZSB0aGUgZnVuY3Rpb25cbiAqIGFuZCBjYW4gYmUgYWNjZXNzZWQgdmlhIGBTZW50cnkuZ2V0QWN0aXZlU3BhbigpYCwgYXMgbG9uZyBhcyB0aGUgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgd2hpbGUgdGhlIHNjb3BlIGlzIGFjdGl2ZS5cbiAqXG4gKiBZb3UnbGwgYWx3YXlzIGdldCBhIHNwYW4gcGFzc2VkIHRvIHRoZSBjYWxsYmFjayxcbiAqIGl0IG1heSBqdXN0IGJlIGEgbm9uLXJlY29yZGluZyBzcGFuIGlmIHRoZSBzcGFuIGlzIG5vdCBzYW1wbGVkIG9yIGlmIHRyYWNpbmcgaXMgZGlzYWJsZWQuXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0U3Bhbk1hbnVhbChvcHRpb25zLCBjYWxsYmFjaykge1xuICBjb25zdCBhY3MgPSBnZXRBY3MoKTtcbiAgaWYgKGFjcy5zdGFydFNwYW5NYW51YWwpIHtcbiAgICByZXR1cm4gYWNzLnN0YXJ0U3Bhbk1hbnVhbChvcHRpb25zLCBjYWxsYmFjayk7XG4gIH1cblxuICBjb25zdCBzcGFuQXJndW1lbnRzID0gcGFyc2VTZW50cnlTcGFuQXJndW1lbnRzKG9wdGlvbnMpO1xuICBjb25zdCB7IGZvcmNlVHJhbnNhY3Rpb24sIHBhcmVudFNwYW46IGN1c3RvbVBhcmVudFNwYW4sIHNjb3BlOiBjdXN0b21TY29wZSB9ID0gb3B0aW9ucztcblxuICBjb25zdCBjdXN0b21Gb3JrZWRTY29wZSA9IGN1c3RvbVNjb3BlPy5jbG9uZSgpO1xuXG4gIHJldHVybiB3aXRoU2NvcGUoY3VzdG9tRm9ya2VkU2NvcGUsICgpID0+IHtcbiAgICAvLyBJZiBgb3B0aW9ucy5wYXJlbnRTcGFuYCBpcyBkZWZpbmVkLCB3ZSB3YW50IHRvIHdyYXAgdGhlIGNhbGxiYWNrIGluIGB3aXRoQWN0aXZlU3BhbmBcbiAgICBjb25zdCB3cmFwcGVyID0gZ2V0QWN0aXZlU3BhbldyYXBwZXIoY3VzdG9tUGFyZW50U3Bhbik7XG5cbiAgICByZXR1cm4gd3JhcHBlcigoKSA9PiB7XG4gICAgICBjb25zdCBzY29wZSA9IGdldEN1cnJlbnRTY29wZSgpO1xuICAgICAgY29uc3QgcGFyZW50U3BhbiA9IGdldFBhcmVudFNwYW4oc2NvcGUsIGN1c3RvbVBhcmVudFNwYW4pO1xuXG4gICAgICBjb25zdCBzaG91bGRTa2lwU3BhbiA9IG9wdGlvbnMub25seUlmUGFyZW50ICYmICFwYXJlbnRTcGFuO1xuICAgICAgY29uc3QgYWN0aXZlU3BhbiA9IHNob3VsZFNraXBTcGFuXG4gICAgICAgID8gbmV3IFNlbnRyeU5vblJlY29yZGluZ1NwYW4oKVxuICAgICAgICA6IGNyZWF0ZUNoaWxkT3JSb290U3Bhbih7XG4gICAgICAgICAgICBwYXJlbnRTcGFuLFxuICAgICAgICAgICAgc3BhbkFyZ3VtZW50cyxcbiAgICAgICAgICAgIGZvcmNlVHJhbnNhY3Rpb24sXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgX3NldFNwYW5Gb3JTY29wZShzY29wZSwgYWN0aXZlU3Bhbik7XG5cbiAgICAgIHJldHVybiBoYW5kbGVDYWxsYmFja0Vycm9ycyhcbiAgICAgICAgLy8gV2UgcGFzcyB0aGUgYGZpbmlzaGAgZnVuY3Rpb24gdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGUgdXNlciBjYW4gZmluaXNoIHRoZSBzcGFuIG1hbnVhbGx5XG4gICAgICAgIC8vIHRoaXMgaXMgbWFpbmx5IGhlcmUgZm9yIGhpc3RvcmljIHB1cnBvc2VzIGJlY2F1c2UgcHJldmlvdXNseSwgd2UgaW5zdHJ1Y3RlZCB1c2VycyB0byBjYWxsXG4gICAgICAgIC8vIGBmaW5pc2hgIGluc3RlYWQgb2YgYHNwYW4uZW5kKClgIHRvIGFsc28gY2xlYW4gdXAgdGhlIHNjb3BlLiBOb3dhZGF5cywgY2FsbGluZyBgc3Bhbi5lbmQoKWBcbiAgICAgICAgLy8gb3IgYGZpbmlzaGAgaGFzIHRoZSBzYW1lIGVmZmVjdCBhbmQgd2Ugc2ltcGx5IGxlYXZlIGl0IGhlcmUgdG8gYXZvaWQgYnJlYWtpbmcgdXNlciBjb2RlLlxuICAgICAgICAoKSA9PiBjYWxsYmFjayhhY3RpdmVTcGFuLCAoKSA9PiBhY3RpdmVTcGFuLmVuZCgpKSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIHRoZSBzcGFuIHN0YXR1cyBpZiBpdCBoYXNuJ3QgYmVlbiBjaGFuZ2VkIHlldCwgYW5kIHRoZSBzcGFuIGlzIG5vdCB5ZXQgZmluaXNoZWRcbiAgICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gc3BhblRvSlNPTihhY3RpdmVTcGFuKTtcbiAgICAgICAgICBpZiAoYWN0aXZlU3Bhbi5pc1JlY29yZGluZygpICYmICghc3RhdHVzIHx8IHN0YXR1cyA9PT0gJ29rJykpIHtcbiAgICAgICAgICAgIGFjdGl2ZVNwYW4uc2V0U3RhdHVzKHsgY29kZTogU1BBTl9TVEFUVVNfRVJST1IsIG1lc3NhZ2U6ICdpbnRlcm5hbF9lcnJvcicgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNwYW4uIFRoaXMgc3BhbiBpcyBub3Qgc2V0IGFzIGFjdGl2ZSwgc28gd2lsbCBub3QgZ2V0IGF1dG9tYXRpYyBpbnN0cnVtZW50YXRpb24gc3BhbnNcbiAqIGFzIGNoaWxkcmVuIG9yIGJlIGFibGUgdG8gYmUgYWNjZXNzZWQgdmlhIGBTZW50cnkuZ2V0QWN0aXZlU3BhbigpYC5cbiAqXG4gKiBJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBzcGFuIHRoYXQgaXMgc2V0IGFzIGFjdGl2ZSwgdXNlIHtAbGluayBzdGFydFNwYW59LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHdheXMgcmV0dXJuIGEgc3BhbixcbiAqIGl0IG1heSBqdXN0IGJlIGEgbm9uLXJlY29yZGluZyBzcGFuIGlmIHRoZSBzcGFuIGlzIG5vdCBzYW1wbGVkIG9yIGlmIHRyYWNpbmcgaXMgZGlzYWJsZWQuXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0SW5hY3RpdmVTcGFuKG9wdGlvbnMpIHtcbiAgY29uc3QgYWNzID0gZ2V0QWNzKCk7XG4gIGlmIChhY3Muc3RhcnRJbmFjdGl2ZVNwYW4pIHtcbiAgICByZXR1cm4gYWNzLnN0YXJ0SW5hY3RpdmVTcGFuKG9wdGlvbnMpO1xuICB9XG5cbiAgY29uc3Qgc3BhbkFyZ3VtZW50cyA9IHBhcnNlU2VudHJ5U3BhbkFyZ3VtZW50cyhvcHRpb25zKTtcbiAgY29uc3QgeyBmb3JjZVRyYW5zYWN0aW9uLCBwYXJlbnRTcGFuOiBjdXN0b21QYXJlbnRTcGFuIH0gPSBvcHRpb25zO1xuXG4gIC8vIElmIGBvcHRpb25zLnNjb3BlYCBpcyBkZWZpbmVkLCB3ZSB1c2UgdGhpcyBhcyBhcyBhIHdyYXBwZXIsXG4gIC8vIElmIGBvcHRpb25zLnBhcmVudFNwYW5gIGlzIGRlZmluZWQsIHdlIHdhbnQgdG8gd3JhcCB0aGUgY2FsbGJhY2sgaW4gYHdpdGhBY3RpdmVTcGFuYFxuICBjb25zdCB3cmFwcGVyID0gb3B0aW9ucy5zY29wZVxuICAgID8gKGNhbGxiYWNrKSA9PiB3aXRoU2NvcGUob3B0aW9ucy5zY29wZSwgY2FsbGJhY2spXG4gICAgOiBjdXN0b21QYXJlbnRTcGFuICE9PSB1bmRlZmluZWRcbiAgICAgID8gKGNhbGxiYWNrKSA9PiB3aXRoQWN0aXZlU3BhbihjdXN0b21QYXJlbnRTcGFuLCBjYWxsYmFjaylcbiAgICAgIDogKGNhbGxiYWNrKSA9PiBjYWxsYmFjaygpO1xuXG4gIHJldHVybiB3cmFwcGVyKCgpID0+IHtcbiAgICBjb25zdCBzY29wZSA9IGdldEN1cnJlbnRTY29wZSgpO1xuICAgIGNvbnN0IHBhcmVudFNwYW4gPSBnZXRQYXJlbnRTcGFuKHNjb3BlLCBjdXN0b21QYXJlbnRTcGFuKTtcblxuICAgIGNvbnN0IHNob3VsZFNraXBTcGFuID0gb3B0aW9ucy5vbmx5SWZQYXJlbnQgJiYgIXBhcmVudFNwYW47XG5cbiAgICBpZiAoc2hvdWxkU2tpcFNwYW4pIHtcbiAgICAgIHJldHVybiBuZXcgU2VudHJ5Tm9uUmVjb3JkaW5nU3BhbigpO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDaGlsZE9yUm9vdFNwYW4oe1xuICAgICAgcGFyZW50U3BhbixcbiAgICAgIHNwYW5Bcmd1bWVudHMsXG4gICAgICBmb3JjZVRyYW5zYWN0aW9uLFxuICAgICAgc2NvcGUsXG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnRpbnVlIGEgdHJhY2UgZnJvbSBgc2VudHJ5LXRyYWNlYCBhbmQgYGJhZ2dhZ2VgIHZhbHVlcy5cbiAqIFRoZXNlIHZhbHVlcyBjYW4gYmUgb2J0YWluZWQgZnJvbSBpbmNvbWluZyByZXF1ZXN0IGhlYWRlcnMsIG9yIGluIHRoZSBicm93c2VyIGZyb20gYDxtZXRhIG5hbWU9XCJzZW50cnktdHJhY2VcIj5gXG4gKiBhbmQgYDxtZXRhIG5hbWU9XCJiYWdnYWdlXCI+YCBIVE1MIHRhZ3MuXG4gKlxuICogU3BhbnMgc3RhcnRlZCB3aXRoIGBzdGFydFNwYW5gLCBgc3RhcnRTcGFuTWFudWFsYCBhbmQgYHN0YXJ0SW5hY3RpdmVTcGFuYCwgd2l0aGluIHRoZSBjYWxsYmFjayB3aWxsIGF1dG9tYXRpY2FsbHlcbiAqIGJlIGF0dGFjaGVkIHRvIHRoZSBpbmNvbWluZyB0cmFjZS5cbiAqL1xuY29uc3QgY29udGludWVUcmFjZSA9IChcbiAgb3B0aW9uc1xuXG4sXG4gIGNhbGxiYWNrLFxuKSA9PiB7XG4gIGNvbnN0IGNhcnJpZXIgPSBnZXRNYWluQ2FycmllcigpO1xuICBjb25zdCBhY3MgPSBnZXRBc3luY0NvbnRleHRTdHJhdGVneShjYXJyaWVyKTtcbiAgaWYgKGFjcy5jb250aW51ZVRyYWNlKSB7XG4gICAgcmV0dXJuIGFjcy5jb250aW51ZVRyYWNlKG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGNvbnN0IHsgc2VudHJ5VHJhY2UsIGJhZ2dhZ2UgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHdpdGhTY29wZShzY29wZSA9PiB7XG4gICAgY29uc3QgcHJvcGFnYXRpb25Db250ZXh0ID0gcHJvcGFnYXRpb25Db250ZXh0RnJvbUhlYWRlcnMoc2VudHJ5VHJhY2UsIGJhZ2dhZ2UpO1xuICAgIHNjb3BlLnNldFByb3BhZ2F0aW9uQ29udGV4dChwcm9wYWdhdGlvbkNvbnRleHQpO1xuICAgIHJldHVybiBjYWxsYmFjaygpO1xuICB9KTtcbn07XG5cbi8qKlxuICogRm9ya3MgdGhlIGN1cnJlbnQgc2NvcGUgYW5kIHNldHMgdGhlIHByb3ZpZGVkIHNwYW4gYXMgYWN0aXZlIHNwYW4gaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb3ZpZGVkIGNhbGxiYWNrLiBDYW4gYmVcbiAqIHBhc3NlZCBgbnVsbGAgdG8gc3RhcnQgYW4gZW50aXJlbHkgbmV3IHNwYW4gdHJlZS5cbiAqXG4gKiBAcGFyYW0gc3BhbiBTcGFucyBzdGFydGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm92aWRlZCBjYWxsYmFjayB3aWxsIGJlIGNoaWxkcmVuIG9mIHRoaXMgc3Bhbi4gSWYgYG51bGxgIGlzIHBhc3NlZCxcbiAqIHNwYW5zIHN0YXJ0ZWQgd2l0aGluIHRoZSBjYWxsYmFjayB3aWxsIG5vdCBiZSBhdHRhY2hlZCB0byBhIHBhcmVudCBzcGFuLlxuICogQHBhcmFtIGNhbGxiYWNrIEV4ZWN1dGlvbiBjb250ZXh0IGluIHdoaWNoIHRoZSBwcm92aWRlZCBzcGFuIHdpbGwgYmUgYWN0aXZlLiBJcyBwYXNzZWQgdGhlIG5ld2x5IGZvcmtlZCBzY29wZS5cbiAqIEByZXR1cm5zIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gd2l0aEFjdGl2ZVNwYW4oc3BhbiwgY2FsbGJhY2spIHtcbiAgY29uc3QgYWNzID0gZ2V0QWNzKCk7XG4gIGlmIChhY3Mud2l0aEFjdGl2ZVNwYW4pIHtcbiAgICByZXR1cm4gYWNzLndpdGhBY3RpdmVTcGFuKHNwYW4sIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiB3aXRoU2NvcGUoc2NvcGUgPT4ge1xuICAgIF9zZXRTcGFuRm9yU2NvcGUoc2NvcGUsIHNwYW4gfHwgdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gY2FsbGJhY2soc2NvcGUpO1xuICB9KTtcbn1cblxuLyoqIFN1cHByZXNzIHRyYWNpbmcgaW4gdGhlIGdpdmVuIGNhbGxiYWNrLCBlbnN1cmluZyBubyBzcGFucyBhcmUgZ2VuZXJhdGVkIGluc2lkZSBvZiBpdC4gKi9cbmZ1bmN0aW9uIHN1cHByZXNzVHJhY2luZyhjYWxsYmFjaykge1xuICBjb25zdCBhY3MgPSBnZXRBY3MoKTtcblxuICBpZiAoYWNzLnN1cHByZXNzVHJhY2luZykge1xuICAgIHJldHVybiBhY3Muc3VwcHJlc3NUcmFjaW5nKGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiB3aXRoU2NvcGUoc2NvcGUgPT4ge1xuICAgIC8vIE5vdGU6IFdlIGRvIG5vdCB3YWl0IGZvciB0aGUgY2FsbGJhY2sgdG8gZmluaXNoIGJlZm9yZSB3ZSByZXNldCB0aGUgbWV0YWRhdGFcbiAgICAvLyB0aGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgb3RoZXJ3aXNlLCBpbiB0aGUgYnJvd3NlciB0aGlzIGNhbiBsZWFkIHRvIHZlcnkgd2VpcmQgYmVoYXZpb3JcbiAgICAvLyBhcyB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHRvcCBzY29wZSwgaWYgdGhlIGNhbGxiYWNrIHRha2VzIGxvbmdlciB0byBmaW5pc2gsXG4gICAgLy8gb3RoZXIsIHVucmVsYXRlZCBzcGFucyBtYXkgYWxzbyBiZSBzdXBwcmVzc2VkLCB3aGljaCB3ZSBkbyBub3Qgd2FudFxuICAgIC8vIHNvIGluc3RlYWQsIHdlIG9ubHkgc3VwcHJlc3MgdHJhY2luZyBzeW5jaHJvbm95c2x5IGluIHRoZSBicm93c2VyXG4gICAgc2NvcGUuc2V0U0RLUHJvY2Vzc2luZ01ldGFkYXRhKHsgW1NVUFBSRVNTX1RSQUNJTkdfS0VZXTogdHJ1ZSB9KTtcbiAgICBjb25zdCByZXMgPSBjYWxsYmFjaygpO1xuICAgIHNjb3BlLnNldFNES1Byb2Nlc3NpbmdNZXRhZGF0YSh7IFtTVVBQUkVTU19UUkFDSU5HX0tFWV06IHVuZGVmaW5lZCB9KTtcbiAgICByZXR1cm4gcmVzO1xuICB9KTtcbn1cblxuLyoqXG4gKiBTdGFydHMgYSBuZXcgdHJhY2UgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcHJvdmlkZWQgY2FsbGJhY2suIFNwYW5zIHN0YXJ0ZWQgd2l0aGluIHRoZVxuICogY2FsbGJhY2sgd2lsbCBiZSBwYXJ0IG9mIHRoZSBuZXcgdHJhY2UgaW5zdGVhZCBvZiBhIHBvdGVudGlhbGx5IHByZXZpb3VzbHkgc3RhcnRlZCB0cmFjZS5cbiAqXG4gKiBJbXBvcnRhbnQ6IE9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gaWYgeW91IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdHJhY2UgbGlmZXRpbWUgYW5kXG4gKiBwcm9wYWdhdGlvbiBtZWNoYW5pc20gb2YgdGhlIFNESyBmb3IgdGhlIGR1cmF0aW9uIGFuZCBzY29wZSBvZiB0aGUgcHJvdmlkZWQgY2FsbGJhY2suXG4gKiBUaGUgbmV3bHkgY3JlYXRlZCB0cmFjZSB3aWxsIGFsc28gYmUgdGhlIHJvb3Qgb2YgYSBuZXcgZGlzdHJpYnV0ZWQgdHJhY2UsIGZvciBleGFtcGxlIGlmXG4gKiB5b3UgbWFrZSBodHRwIHJlcXVlc3RzIHdpdGhpbiB0aGUgY2FsbGJhY2suXG4gKiBUaGlzIGZ1bmN0aW9uIG1pZ2h0IGJlIHVzZWZ1bCBpZiB0aGUgb3BlcmF0aW9uIHlvdSB3YW50IHRvIGluc3RydW1lbnQgc2hvdWxkIG5vdCBiZSBwYXJ0XG4gKiBvZiBhIHBvdGVudGlhbGx5IG9uZ29pbmcgdHJhY2UuXG4gKlxuICogRGVmYXVsdCBiZWhhdmlvcjpcbiAqIC0gU2VydmVyLXNpZGU6IEEgbmV3IHRyYWNlIGlzIHN0YXJ0ZWQgZm9yIGVhY2ggaW5jb21pbmcgcmVxdWVzdC5cbiAqIC0gQnJvd3NlcjogQSBuZXcgdHJhY2UgaXMgc3RhcnRlZCBmb3IgZWFjaCBwYWdlIG91ciByb3V0ZS4gTmF2aWdhdGluZyB0byBhIG5ldyByb3V0ZVxuICogICAgICAgICAgICBvciBwYWdlIHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgYSBuZXcgdHJhY2UuXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0TmV3VHJhY2UoY2FsbGJhY2spIHtcbiAgcmV0dXJuIHdpdGhTY29wZShzY29wZSA9PiB7XG4gICAgc2NvcGUuc2V0UHJvcGFnYXRpb25Db250ZXh0KHtcbiAgICAgIHRyYWNlSWQ6IGdlbmVyYXRlVHJhY2VJZCgpLFxuICAgICAgc2FtcGxlUmFuZDogTWF0aC5yYW5kb20oKSxcbiAgICB9KTtcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5sb2coYFN0YXJ0aW5nIGEgbmV3IHRyYWNlIHdpdGggaWQgJHtzY29wZS5nZXRQcm9wYWdhdGlvbkNvbnRleHQoKS50cmFjZUlkfWApO1xuICAgIHJldHVybiB3aXRoQWN0aXZlU3BhbihudWxsLCBjYWxsYmFjayk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDaGlsZE9yUm9vdFNwYW4oe1xuICBwYXJlbnRTcGFuLFxuICBzcGFuQXJndW1lbnRzLFxuICBmb3JjZVRyYW5zYWN0aW9uLFxuICBzY29wZSxcbn1cblxuKSB7XG4gIGlmICghaGFzU3BhbnNFbmFibGVkKCkpIHtcbiAgICBjb25zdCBzcGFuID0gbmV3IFNlbnRyeU5vblJlY29yZGluZ1NwYW4oKTtcblxuICAgIC8vIElmIHRoaXMgaXMgYSByb290IHNwYW4sIHdlIGVuc3VyZSB0byBmcmVlemUgYSBEU0NcbiAgICAvLyBTbyB3ZSBjYW4gaGF2ZSBhdCBsZWFzdCBwYXJ0aWFsIGRhdGEgaGVyZVxuICAgIGlmIChmb3JjZVRyYW5zYWN0aW9uIHx8ICFwYXJlbnRTcGFuKSB7XG4gICAgICBjb25zdCBkc2MgPSB7XG4gICAgICAgIHNhbXBsZWQ6ICdmYWxzZScsXG4gICAgICAgIHNhbXBsZV9yYXRlOiAnMCcsXG4gICAgICAgIHRyYW5zYWN0aW9uOiBzcGFuQXJndW1lbnRzLm5hbWUsXG4gICAgICAgIC4uLmdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3BhbihzcGFuKSxcbiAgICAgIH0gO1xuICAgICAgZnJlZXplRHNjT25TcGFuKHNwYW4sIGRzYyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwYW47XG4gIH1cblxuICBjb25zdCBpc29sYXRpb25TY29wZSA9IGdldElzb2xhdGlvblNjb3BlKCk7XG5cbiAgbGV0IHNwYW47XG4gIGlmIChwYXJlbnRTcGFuICYmICFmb3JjZVRyYW5zYWN0aW9uKSB7XG4gICAgc3BhbiA9IF9zdGFydENoaWxkU3BhbihwYXJlbnRTcGFuLCBzY29wZSwgc3BhbkFyZ3VtZW50cyk7XG4gICAgYWRkQ2hpbGRTcGFuVG9TcGFuKHBhcmVudFNwYW4sIHNwYW4pO1xuICB9IGVsc2UgaWYgKHBhcmVudFNwYW4pIHtcbiAgICAvLyBJZiB3ZSBmb3JjZWQgYSB0cmFuc2FjdGlvbiBidXQgaGF2ZSBhIHBhcmVudCBzcGFuLCBtYWtlIHN1cmUgdG8gY29udGludWUgZnJvbSB0aGUgcGFyZW50IHNwYW4sIG5vdCB0aGUgc2NvcGVcbiAgICBjb25zdCBkc2MgPSBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4ocGFyZW50U3Bhbik7XG4gICAgY29uc3QgeyB0cmFjZUlkLCBzcGFuSWQ6IHBhcmVudFNwYW5JZCB9ID0gcGFyZW50U3Bhbi5zcGFuQ29udGV4dCgpO1xuICAgIGNvbnN0IHBhcmVudFNhbXBsZWQgPSBzcGFuSXNTYW1wbGVkKHBhcmVudFNwYW4pO1xuXG4gICAgc3BhbiA9IF9zdGFydFJvb3RTcGFuKFxuICAgICAge1xuICAgICAgICB0cmFjZUlkLFxuICAgICAgICBwYXJlbnRTcGFuSWQsXG4gICAgICAgIC4uLnNwYW5Bcmd1bWVudHMsXG4gICAgICB9LFxuICAgICAgc2NvcGUsXG4gICAgICBwYXJlbnRTYW1wbGVkLFxuICAgICk7XG5cbiAgICBmcmVlemVEc2NPblNwYW4oc3BhbiwgZHNjKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7XG4gICAgICB0cmFjZUlkLFxuICAgICAgZHNjLFxuICAgICAgcGFyZW50U3BhbklkLFxuICAgICAgc2FtcGxlZDogcGFyZW50U2FtcGxlZCxcbiAgICB9ID0ge1xuICAgICAgLi4uaXNvbGF0aW9uU2NvcGUuZ2V0UHJvcGFnYXRpb25Db250ZXh0KCksXG4gICAgICAuLi5zY29wZS5nZXRQcm9wYWdhdGlvbkNvbnRleHQoKSxcbiAgICB9O1xuXG4gICAgc3BhbiA9IF9zdGFydFJvb3RTcGFuKFxuICAgICAge1xuICAgICAgICB0cmFjZUlkLFxuICAgICAgICBwYXJlbnRTcGFuSWQsXG4gICAgICAgIC4uLnNwYW5Bcmd1bWVudHMsXG4gICAgICB9LFxuICAgICAgc2NvcGUsXG4gICAgICBwYXJlbnRTYW1wbGVkLFxuICAgICk7XG5cbiAgICBpZiAoZHNjKSB7XG4gICAgICBmcmVlemVEc2NPblNwYW4oc3BhbiwgZHNjKTtcbiAgICB9XG4gIH1cblxuICBsb2dTcGFuU3RhcnQoc3Bhbik7XG5cbiAgc2V0Q2FwdHVyZWRTY29wZXNPblNwYW4oc3Bhbiwgc2NvcGUsIGlzb2xhdGlvblNjb3BlKTtcblxuICByZXR1cm4gc3Bhbjtcbn1cblxuLyoqXG4gKiBUaGlzIGNvbnZlcnRzIFN0YXJ0U3Bhbk9wdGlvbnMgdG8gU2VudHJ5U3BhbkFyZ3VtZW50cy5cbiAqIEZvciB0aGUgbW9zdCBwYXJ0IChmb3Igbm93KSB3ZSBhY2NlcHQgdGhlIHNhbWUgb3B0aW9ucyxcbiAqIGJ1dCBzb21lIG9mIHRoZW0gbmVlZCB0byBiZSB0cmFuc2Zvcm1lZC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VTZW50cnlTcGFuQXJndW1lbnRzKG9wdGlvbnMpIHtcbiAgY29uc3QgZXhwID0gb3B0aW9ucy5leHBlcmltZW50YWwgfHwge307XG4gIGNvbnN0IGluaXRpYWxDdHggPSB7XG4gICAgaXNTdGFuZGFsb25lOiBleHAuc3RhbmRhbG9uZSxcbiAgICAuLi5vcHRpb25zLFxuICB9O1xuXG4gIGlmIChvcHRpb25zLnN0YXJ0VGltZSkge1xuICAgIGNvbnN0IGN0eCA9IHsgLi4uaW5pdGlhbEN0eCB9O1xuICAgIGN0eC5zdGFydFRpbWVzdGFtcCA9IHNwYW5UaW1lSW5wdXRUb1NlY29uZHMob3B0aW9ucy5zdGFydFRpbWUpO1xuICAgIGRlbGV0ZSBjdHguc3RhcnRUaW1lO1xuICAgIHJldHVybiBjdHg7XG4gIH1cblxuICByZXR1cm4gaW5pdGlhbEN0eDtcbn1cblxuZnVuY3Rpb24gZ2V0QWNzKCkge1xuICBjb25zdCBjYXJyaWVyID0gZ2V0TWFpbkNhcnJpZXIoKTtcbiAgcmV0dXJuIGdldEFzeW5jQ29udGV4dFN0cmF0ZWd5KGNhcnJpZXIpO1xufVxuXG5mdW5jdGlvbiBfc3RhcnRSb290U3BhbihzcGFuQXJndW1lbnRzLCBzY29wZSwgcGFyZW50U2FtcGxlZCkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcbiAgY29uc3Qgb3B0aW9ucyA9IGNsaWVudD8uZ2V0T3B0aW9ucygpIHx8IHt9O1xuXG4gIGNvbnN0IHsgbmFtZSA9ICcnIH0gPSBzcGFuQXJndW1lbnRzO1xuXG4gIGNvbnN0IG11dGFibGVTcGFuU2FtcGxpbmdEYXRhID0geyBzcGFuQXR0cmlidXRlczogeyAuLi5zcGFuQXJndW1lbnRzLmF0dHJpYnV0ZXMgfSwgc3Bhbk5hbWU6IG5hbWUsIHBhcmVudFNhbXBsZWQgfTtcblxuICAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBkZWNpc2lvbiBmb3IgdGhlIG1vbWVudDsgdGhpcyBpcyBqdXN0IGEgcGxhY2Vob2xkZXJcbiAgY2xpZW50Py5lbWl0KCdiZWZvcmVTYW1wbGluZycsIG11dGFibGVTcGFuU2FtcGxpbmdEYXRhLCB7IGRlY2lzaW9uOiBmYWxzZSB9KTtcblxuICAvLyBJZiBob29rIGNvbnN1bWVycyBvdmVycmlkZSB0aGUgcGFyZW50U2FtcGxlZCBmbGFnLCB3ZSB3aWxsIHVzZSB0aGF0IHZhbHVlIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBvbmVcbiAgY29uc3QgZmluYWxQYXJlbnRTYW1wbGVkID0gbXV0YWJsZVNwYW5TYW1wbGluZ0RhdGEucGFyZW50U2FtcGxlZCA/PyBwYXJlbnRTYW1wbGVkO1xuICBjb25zdCBmaW5hbEF0dHJpYnV0ZXMgPSBtdXRhYmxlU3BhblNhbXBsaW5nRGF0YS5zcGFuQXR0cmlidXRlcztcblxuICBjb25zdCBjdXJyZW50UHJvcGFnYXRpb25Db250ZXh0ID0gc2NvcGUuZ2V0UHJvcGFnYXRpb25Db250ZXh0KCk7XG4gIGNvbnN0IFtzYW1wbGVkLCBzYW1wbGVSYXRlLCBsb2NhbFNhbXBsZVJhdGVXYXNBcHBsaWVkXSA9IHNjb3BlLmdldFNjb3BlRGF0YSgpLnNka1Byb2Nlc3NpbmdNZXRhZGF0YVtcbiAgICBTVVBQUkVTU19UUkFDSU5HX0tFWVxuICBdXG4gICAgPyBbZmFsc2VdXG4gICAgOiBzYW1wbGVTcGFuKFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBwYXJlbnRTYW1wbGVkOiBmaW5hbFBhcmVudFNhbXBsZWQsXG4gICAgICAgICAgYXR0cmlidXRlczogZmluYWxBdHRyaWJ1dGVzLFxuICAgICAgICAgIHBhcmVudFNhbXBsZVJhdGU6IHBhcnNlU2FtcGxlUmF0ZShjdXJyZW50UHJvcGFnYXRpb25Db250ZXh0LmRzYz8uc2FtcGxlX3JhdGUpLFxuICAgICAgICB9LFxuICAgICAgICBjdXJyZW50UHJvcGFnYXRpb25Db250ZXh0LnNhbXBsZVJhbmQsXG4gICAgICApO1xuXG4gIGNvbnN0IHJvb3RTcGFuID0gbmV3IFNlbnRyeVNwYW4oe1xuICAgIC4uLnNwYW5Bcmd1bWVudHMsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFXTogJ2N1c3RvbScsXG4gICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TQU1QTEVfUkFURV06XG4gICAgICAgIHNhbXBsZVJhdGUgIT09IHVuZGVmaW5lZCAmJiBsb2NhbFNhbXBsZVJhdGVXYXNBcHBsaWVkID8gc2FtcGxlUmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIC4uLmZpbmFsQXR0cmlidXRlcyxcbiAgICB9LFxuICAgIHNhbXBsZWQsXG4gIH0pO1xuXG4gIGlmICghc2FtcGxlZCAmJiBjbGllbnQpIHtcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5sb2coJ1tUcmFjaW5nXSBEaXNjYXJkaW5nIHJvb3Qgc3BhbiBiZWNhdXNlIGl0cyB0cmFjZSB3YXMgbm90IGNob3NlbiB0byBiZSBzYW1wbGVkLicpO1xuICAgIGNsaWVudC5yZWNvcmREcm9wcGVkRXZlbnQoJ3NhbXBsZV9yYXRlJywgJ3RyYW5zYWN0aW9uJyk7XG4gIH1cblxuICBpZiAoY2xpZW50KSB7XG4gICAgY2xpZW50LmVtaXQoJ3NwYW5TdGFydCcsIHJvb3RTcGFuKTtcbiAgfVxuXG4gIHJldHVybiByb290U3Bhbjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGBTcGFuYCB3aGlsZSBzZXR0aW5nIHRoZSBjdXJyZW50IGBTcGFuLmlkYCBhcyBgcGFyZW50U3BhbklkYC5cbiAqIFRoaXMgaW5oZXJpdHMgdGhlIHNhbXBsaW5nIGRlY2lzaW9uIGZyb20gdGhlIHBhcmVudCBzcGFuLlxuICovXG5mdW5jdGlvbiBfc3RhcnRDaGlsZFNwYW4ocGFyZW50U3Bhbiwgc2NvcGUsIHNwYW5Bcmd1bWVudHMpIHtcbiAgY29uc3QgeyBzcGFuSWQsIHRyYWNlSWQgfSA9IHBhcmVudFNwYW4uc3BhbkNvbnRleHQoKTtcbiAgY29uc3Qgc2FtcGxlZCA9IHNjb3BlLmdldFNjb3BlRGF0YSgpLnNka1Byb2Nlc3NpbmdNZXRhZGF0YVtTVVBQUkVTU19UUkFDSU5HX0tFWV0gPyBmYWxzZSA6IHNwYW5Jc1NhbXBsZWQocGFyZW50U3Bhbik7XG5cbiAgY29uc3QgY2hpbGRTcGFuID0gc2FtcGxlZFxuICAgID8gbmV3IFNlbnRyeVNwYW4oe1xuICAgICAgICAuLi5zcGFuQXJndW1lbnRzLFxuICAgICAgICBwYXJlbnRTcGFuSWQ6IHNwYW5JZCxcbiAgICAgICAgdHJhY2VJZCxcbiAgICAgICAgc2FtcGxlZCxcbiAgICAgIH0pXG4gICAgOiBuZXcgU2VudHJ5Tm9uUmVjb3JkaW5nU3Bhbih7IHRyYWNlSWQgfSk7XG5cbiAgYWRkQ2hpbGRTcGFuVG9TcGFuKHBhcmVudFNwYW4sIGNoaWxkU3Bhbik7XG5cbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7XG4gIGlmIChjbGllbnQpIHtcbiAgICBjbGllbnQuZW1pdCgnc3BhblN0YXJ0JywgY2hpbGRTcGFuKTtcbiAgICAvLyBJZiBpdCBoYXMgYW4gZW5kVGltZXN0YW1wLCBpdCdzIGFscmVhZHkgZW5kZWRcbiAgICBpZiAoc3BhbkFyZ3VtZW50cy5lbmRUaW1lc3RhbXApIHtcbiAgICAgIGNsaWVudC5lbWl0KCdzcGFuRW5kJywgY2hpbGRTcGFuKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRTcGFuO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJlbnRTcGFuKHNjb3BlLCBjdXN0b21QYXJlbnRTcGFuKSB7XG4gIC8vIGFsd2F5cyB1c2UgdGhlIHBhc3NlZCBpbiBzcGFuIGRpcmVjdGx5XG4gIGlmIChjdXN0b21QYXJlbnRTcGFuKSB7XG4gICAgcmV0dXJuIGN1c3RvbVBhcmVudFNwYW4gO1xuICB9XG5cbiAgLy8gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBgdW5kZWZpbmVkYCBhcyBpdCBtZWFucyB0aGUgdXNlciBleHBsaWNpdGx5IHdhbnRzIG5vIHBhcmVudCBzcGFuXG4gIGlmIChjdXN0b21QYXJlbnRTcGFuID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHNwYW4gPSBfZ2V0U3BhbkZvclNjb3BlKHNjb3BlKSA7XG5cbiAgaWYgKCFzcGFuKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuICBjb25zdCBvcHRpb25zID0gY2xpZW50ID8gY2xpZW50LmdldE9wdGlvbnMoKSA6IHt9O1xuICBpZiAob3B0aW9ucy5wYXJlbnRTcGFuSXNBbHdheXNSb290U3Bhbikge1xuICAgIHJldHVybiBnZXRSb290U3BhbihzcGFuKSA7XG4gIH1cblxuICByZXR1cm4gc3Bhbjtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aXZlU3BhbldyYXBwZXIocGFyZW50U3Bhbikge1xuICByZXR1cm4gcGFyZW50U3BhbiAhPT0gdW5kZWZpbmVkXG4gICAgPyAoY2FsbGJhY2spID0+IHtcbiAgICAgICAgcmV0dXJuIHdpdGhBY3RpdmVTcGFuKHBhcmVudFNwYW4sIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICA6IChjYWxsYmFjaykgPT4gY2FsbGJhY2soKTtcbn1cblxuZXhwb3J0IHsgY29udGludWVUcmFjZSwgc3RhcnRJbmFjdGl2ZVNwYW4sIHN0YXJ0TmV3VHJhY2UsIHN0YXJ0U3Bhbiwgc3RhcnRTcGFuTWFudWFsLCBzdXBwcmVzc1RyYWNpbmcsIHdpdGhBY3RpdmVTcGFuIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmFjZS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/trace.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/utils.js":
/*!*****************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/utils.js ***!
  \*****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getCapturedScopesOnSpan: () => (/* binding */ getCapturedScopesOnSpan),\n/* harmony export */   setCapturedScopesOnSpan: () => (/* binding */ setCapturedScopesOnSpan)\n/* harmony export */ });\n/* harmony import */ var _utils_object_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/object.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js\");\n\n\nconst SCOPE_ON_START_SPAN_FIELD = '_sentryScope';\nconst ISOLATION_SCOPE_ON_START_SPAN_FIELD = '_sentryIsolationScope';\n\n/** Store the scope & isolation scope for a span, which can the be used when it is finished. */\nfunction setCapturedScopesOnSpan(span, scope, isolationScope) {\n  if (span) {\n    (0,_utils_object_js__WEBPACK_IMPORTED_MODULE_0__.addNonEnumerableProperty)(span, ISOLATION_SCOPE_ON_START_SPAN_FIELD, isolationScope);\n    (0,_utils_object_js__WEBPACK_IMPORTED_MODULE_0__.addNonEnumerableProperty)(span, SCOPE_ON_START_SPAN_FIELD, scope);\n  }\n}\n\n/**\n * Grabs the scope and isolation scope off a span that were active when the span was started.\n */\nfunction getCapturedScopesOnSpan(span) {\n  return {\n    scope: (span )[SCOPE_ON_START_SPAN_FIELD],\n    isolationScope: (span )[ISOLATION_SCOPE_ON_START_SPAN_FIELD],\n  };\n}\n\n\n//# sourceMappingURL=utils.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYWNpbmcvdXRpbHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQThEOztBQUU5RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUksMEVBQXdCO0FBQzVCLElBQUksMEVBQXdCO0FBQzVCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUU0RDtBQUM1RCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYWNpbmcvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWRkTm9uRW51bWVyYWJsZVByb3BlcnR5IH0gZnJvbSAnLi4vdXRpbHMvb2JqZWN0LmpzJztcblxuY29uc3QgU0NPUEVfT05fU1RBUlRfU1BBTl9GSUVMRCA9ICdfc2VudHJ5U2NvcGUnO1xuY29uc3QgSVNPTEFUSU9OX1NDT1BFX09OX1NUQVJUX1NQQU5fRklFTEQgPSAnX3NlbnRyeUlzb2xhdGlvblNjb3BlJztcblxuLyoqIFN0b3JlIHRoZSBzY29wZSAmIGlzb2xhdGlvbiBzY29wZSBmb3IgYSBzcGFuLCB3aGljaCBjYW4gdGhlIGJlIHVzZWQgd2hlbiBpdCBpcyBmaW5pc2hlZC4gKi9cbmZ1bmN0aW9uIHNldENhcHR1cmVkU2NvcGVzT25TcGFuKHNwYW4sIHNjb3BlLCBpc29sYXRpb25TY29wZSkge1xuICBpZiAoc3Bhbikge1xuICAgIGFkZE5vbkVudW1lcmFibGVQcm9wZXJ0eShzcGFuLCBJU09MQVRJT05fU0NPUEVfT05fU1RBUlRfU1BBTl9GSUVMRCwgaXNvbGF0aW9uU2NvcGUpO1xuICAgIGFkZE5vbkVudW1lcmFibGVQcm9wZXJ0eShzcGFuLCBTQ09QRV9PTl9TVEFSVF9TUEFOX0ZJRUxELCBzY29wZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHcmFicyB0aGUgc2NvcGUgYW5kIGlzb2xhdGlvbiBzY29wZSBvZmYgYSBzcGFuIHRoYXQgd2VyZSBhY3RpdmUgd2hlbiB0aGUgc3BhbiB3YXMgc3RhcnRlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2FwdHVyZWRTY29wZXNPblNwYW4oc3Bhbikge1xuICByZXR1cm4ge1xuICAgIHNjb3BlOiAoc3BhbiApW1NDT1BFX09OX1NUQVJUX1NQQU5fRklFTERdLFxuICAgIGlzb2xhdGlvblNjb3BlOiAoc3BhbiApW0lTT0xBVElPTl9TQ09QRV9PTl9TVEFSVF9TUEFOX0ZJRUxEXSxcbiAgfTtcbn1cblxuZXhwb3J0IHsgZ2V0Q2FwdHVyZWRTY29wZXNPblNwYW4sIHNldENhcHR1cmVkU2NvcGVzT25TcGFuIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/utils.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/transports/base.js":
/*!*******************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/transports/base.js ***!
  \*******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   DEFAULT_TRANSPORT_BUFFER_SIZE: () => (/* binding */ DEFAULT_TRANSPORT_BUFFER_SIZE),\n/* harmony export */   createTransport: () => (/* binding */ createTransport)\n/* harmony export */ });\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/envelope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/envelope.js\");\n/* harmony import */ var _utils_promisebuffer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/promisebuffer.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/promisebuffer.js\");\n/* harmony import */ var _utils_ratelimit_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/ratelimit.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/ratelimit.js\");\n/* harmony import */ var _utils_syncpromise_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/syncpromise.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/syncpromise.js\");\n\n\n\n\n\n\n\nconst DEFAULT_TRANSPORT_BUFFER_SIZE = 64;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nfunction createTransport(\n  options,\n  makeRequest,\n  buffer = (0,_utils_promisebuffer_js__WEBPACK_IMPORTED_MODULE_3__.makePromiseBuffer)(\n    options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n  ),\n) {\n  let rateLimits = {};\n  const flush = (timeout) => buffer.drain(timeout);\n\n  function send(envelope) {\n    const filteredEnvelopeItems = [];\n\n    // Drop rate limited items from envelope\n    (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.forEachEnvelopeItem)(envelope, (item, type) => {\n      const dataCategory = (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.envelopeItemTypeToDataCategory)(type);\n      if ((0,_utils_ratelimit_js__WEBPACK_IMPORTED_MODULE_4__.isRateLimited)(rateLimits, dataCategory)) {\n        options.recordDroppedEvent('ratelimit_backoff', dataCategory);\n      } else {\n        filteredEnvelopeItems.push(item);\n      }\n    });\n\n    // Skip sending if envelope is empty after filtering out rate limited events\n    if (filteredEnvelopeItems.length === 0) {\n      return (0,_utils_syncpromise_js__WEBPACK_IMPORTED_MODULE_5__.resolvedSyncPromise)({});\n    }\n\n    const filteredEnvelope = (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.createEnvelope)(envelope[0], filteredEnvelopeItems );\n\n    // Creates client report for each item in an envelope\n    const recordEnvelopeLoss = (reason) => {\n      (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.forEachEnvelopeItem)(filteredEnvelope, (item, type) => {\n        options.recordDroppedEvent(reason, (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.envelopeItemTypeToDataCategory)(type));\n      });\n    };\n\n    const requestTask = () =>\n      makeRequest({ body: (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.serializeEnvelope)(filteredEnvelope) }).then(\n        response => {\n          // We don't want to throw on NOK responses, but we want to at least log them\n          if (response.statusCode !== undefined && (response.statusCode < 200 || response.statusCode >= 300)) {\n            _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n          }\n\n          rateLimits = (0,_utils_ratelimit_js__WEBPACK_IMPORTED_MODULE_4__.updateRateLimits)(rateLimits, response);\n          return response;\n        },\n        error => {\n          recordEnvelopeLoss('network_error');\n          _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.error('Encountered error running transport request:', error);\n          throw error;\n        },\n      );\n\n    return buffer.add(requestTask).then(\n      result => result,\n      error => {\n        if (error === _utils_promisebuffer_js__WEBPACK_IMPORTED_MODULE_3__.SENTRY_BUFFER_FULL_ERROR) {\n          _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.error('Skipped sending event because buffer is full.');\n          recordEnvelopeLoss('queue_overflow');\n          return (0,_utils_syncpromise_js__WEBPACK_IMPORTED_MODULE_5__.resolvedSyncPromise)({});\n        } else {\n          throw error;\n        }\n      },\n    );\n  }\n\n  return {\n    send,\n    flush,\n  };\n}\n\n\n//# sourceMappingURL=base.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYW5zcG9ydHMvYmFzZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFnRDtBQUNDO0FBQzZFO0FBQ3RDO0FBQ2hCO0FBQ1Y7O0FBRTlEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMEVBQWlCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLElBQUksdUVBQW1CO0FBQ3ZCLDJCQUEyQixrRkFBOEI7QUFDekQsVUFBVSxrRUFBYTtBQUN2QjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsYUFBYSwwRUFBbUIsR0FBRztBQUNuQzs7QUFFQSw2QkFBNkIsa0VBQWM7O0FBRTNDO0FBQ0E7QUFDQSxNQUFNLHVFQUFtQjtBQUN6QiwyQ0FBMkMsa0ZBQThCO0FBQ3pFLE9BQU87QUFDUDs7QUFFQTtBQUNBLG9CQUFvQixNQUFNLHFFQUFpQixvQkFBb0I7QUFDL0Q7QUFDQTtBQUNBO0FBQ0EsWUFBWSx3REFBVyxJQUFJLHlEQUFLLDJDQUEyQyxxQkFBcUI7QUFDaEc7O0FBRUEsdUJBQXVCLHFFQUFnQjtBQUN2QztBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsVUFBVSx3REFBVyxJQUFJLHlEQUFLO0FBQzlCO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiw2RUFBd0I7QUFDOUMsVUFBVSx3REFBVyxJQUFJLHlEQUFLO0FBQzlCO0FBQ0EsaUJBQWlCLDBFQUFtQixHQUFHO0FBQ3ZDLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFMEQ7QUFDMUQiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS90cmFuc3BvcnRzL2Jhc2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4uL3V0aWxzL2RlYnVnLWxvZ2dlci5qcyc7XG5pbXBvcnQgeyBmb3JFYWNoRW52ZWxvcGVJdGVtLCBlbnZlbG9wZUl0ZW1UeXBlVG9EYXRhQ2F0ZWdvcnksIGNyZWF0ZUVudmVsb3BlLCBzZXJpYWxpemVFbnZlbG9wZSB9IGZyb20gJy4uL3V0aWxzL2VudmVsb3BlLmpzJztcbmltcG9ydCB7IG1ha2VQcm9taXNlQnVmZmVyLCBTRU5UUllfQlVGRkVSX0ZVTExfRVJST1IgfSBmcm9tICcuLi91dGlscy9wcm9taXNlYnVmZmVyLmpzJztcbmltcG9ydCB7IGlzUmF0ZUxpbWl0ZWQsIHVwZGF0ZVJhdGVMaW1pdHMgfSBmcm9tICcuLi91dGlscy9yYXRlbGltaXQuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZWRTeW5jUHJvbWlzZSB9IGZyb20gJy4uL3V0aWxzL3N5bmNwcm9taXNlLmpzJztcblxuY29uc3QgREVGQVVMVF9UUkFOU1BPUlRfQlVGRkVSX1NJWkUgPSA2NDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIGEgU2VudHJ5IGBUcmFuc3BvcnRgXG4gKlxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEBwYXJhbSBtYWtlUmVxdWVzdFxuICovXG5mdW5jdGlvbiBjcmVhdGVUcmFuc3BvcnQoXG4gIG9wdGlvbnMsXG4gIG1ha2VSZXF1ZXN0LFxuICBidWZmZXIgPSBtYWtlUHJvbWlzZUJ1ZmZlcihcbiAgICBvcHRpb25zLmJ1ZmZlclNpemUgfHwgREVGQVVMVF9UUkFOU1BPUlRfQlVGRkVSX1NJWkUsXG4gICksXG4pIHtcbiAgbGV0IHJhdGVMaW1pdHMgPSB7fTtcbiAgY29uc3QgZmx1c2ggPSAodGltZW91dCkgPT4gYnVmZmVyLmRyYWluKHRpbWVvdXQpO1xuXG4gIGZ1bmN0aW9uIHNlbmQoZW52ZWxvcGUpIHtcbiAgICBjb25zdCBmaWx0ZXJlZEVudmVsb3BlSXRlbXMgPSBbXTtcblxuICAgIC8vIERyb3AgcmF0ZSBsaW1pdGVkIGl0ZW1zIGZyb20gZW52ZWxvcGVcbiAgICBmb3JFYWNoRW52ZWxvcGVJdGVtKGVudmVsb3BlLCAoaXRlbSwgdHlwZSkgPT4ge1xuICAgICAgY29uc3QgZGF0YUNhdGVnb3J5ID0gZW52ZWxvcGVJdGVtVHlwZVRvRGF0YUNhdGVnb3J5KHR5cGUpO1xuICAgICAgaWYgKGlzUmF0ZUxpbWl0ZWQocmF0ZUxpbWl0cywgZGF0YUNhdGVnb3J5KSkge1xuICAgICAgICBvcHRpb25zLnJlY29yZERyb3BwZWRFdmVudCgncmF0ZWxpbWl0X2JhY2tvZmYnLCBkYXRhQ2F0ZWdvcnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBTa2lwIHNlbmRpbmcgaWYgZW52ZWxvcGUgaXMgZW1wdHkgYWZ0ZXIgZmlsdGVyaW5nIG91dCByYXRlIGxpbWl0ZWQgZXZlbnRzXG4gICAgaWYgKGZpbHRlcmVkRW52ZWxvcGVJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiByZXNvbHZlZFN5bmNQcm9taXNlKHt9KTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJlZEVudmVsb3BlID0gY3JlYXRlRW52ZWxvcGUoZW52ZWxvcGVbMF0sIGZpbHRlcmVkRW52ZWxvcGVJdGVtcyApO1xuXG4gICAgLy8gQ3JlYXRlcyBjbGllbnQgcmVwb3J0IGZvciBlYWNoIGl0ZW0gaW4gYW4gZW52ZWxvcGVcbiAgICBjb25zdCByZWNvcmRFbnZlbG9wZUxvc3MgPSAocmVhc29uKSA9PiB7XG4gICAgICBmb3JFYWNoRW52ZWxvcGVJdGVtKGZpbHRlcmVkRW52ZWxvcGUsIChpdGVtLCB0eXBlKSA9PiB7XG4gICAgICAgIG9wdGlvbnMucmVjb3JkRHJvcHBlZEV2ZW50KHJlYXNvbiwgZW52ZWxvcGVJdGVtVHlwZVRvRGF0YUNhdGVnb3J5KHR5cGUpKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXF1ZXN0VGFzayA9ICgpID0+XG4gICAgICBtYWtlUmVxdWVzdCh7IGJvZHk6IHNlcmlhbGl6ZUVudmVsb3BlKGZpbHRlcmVkRW52ZWxvcGUpIH0pLnRoZW4oXG4gICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHRocm93IG9uIE5PSyByZXNwb25zZXMsIGJ1dCB3ZSB3YW50IHRvIGF0IGxlYXN0IGxvZyB0aGVtXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IHVuZGVmaW5lZCAmJiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA8IDIwMCB8fCByZXNwb25zZS5zdGF0dXNDb2RlID49IDMwMCkpIHtcbiAgICAgICAgICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLndhcm4oYFNlbnRyeSByZXNwb25kZWQgd2l0aCBzdGF0dXMgY29kZSAke3Jlc3BvbnNlLnN0YXR1c0NvZGV9IHRvIHNlbnQgZXZlbnQuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmF0ZUxpbWl0cyA9IHVwZGF0ZVJhdGVMaW1pdHMocmF0ZUxpbWl0cywgcmVzcG9uc2UpO1xuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgIHJlY29yZEVudmVsb3BlTG9zcygnbmV0d29ya19lcnJvcicpO1xuICAgICAgICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLmVycm9yKCdFbmNvdW50ZXJlZCBlcnJvciBydW5uaW5nIHRyYW5zcG9ydCByZXF1ZXN0OicsIGVycm9yKTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICByZXR1cm4gYnVmZmVyLmFkZChyZXF1ZXN0VGFzaykudGhlbihcbiAgICAgIHJlc3VsdCA9PiByZXN1bHQsXG4gICAgICBlcnJvciA9PiB7XG4gICAgICAgIGlmIChlcnJvciA9PT0gU0VOVFJZX0JVRkZFUl9GVUxMX0VSUk9SKSB7XG4gICAgICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcuZXJyb3IoJ1NraXBwZWQgc2VuZGluZyBldmVudCBiZWNhdXNlIGJ1ZmZlciBpcyBmdWxsLicpO1xuICAgICAgICAgIHJlY29yZEVudmVsb3BlTG9zcygncXVldWVfb3ZlcmZsb3cnKTtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRTeW5jUHJvbWlzZSh7fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2VuZCxcbiAgICBmbHVzaCxcbiAgfTtcbn1cblxuZXhwb3J0IHsgREVGQVVMVF9UUkFOU1BPUlRfQlVGRkVSX1NJWkUsIGNyZWF0ZVRyYW5zcG9ydCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmFzZS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/transports/base.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/transports/multiplexed.js":
/*!**************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/transports/multiplexed.js ***!
  \**************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   eventFromEnvelope: () => (/* binding */ eventFromEnvelope),\n/* harmony export */   makeMultiplexedTransport: () => (/* binding */ makeMultiplexedTransport)\n/* harmony export */ });\n/* harmony import */ var _api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../api.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/api.js\");\n/* harmony import */ var _utils_dsn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/dsn.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/dsn.js\");\n/* harmony import */ var _utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/envelope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/envelope.js\");\n\n\n\n\n/**\n * Gets an event from an envelope.\n *\n * This is only exported for use in the tests\n */\nfunction eventFromEnvelope(env, types) {\n  let event;\n\n  (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.forEachEnvelopeItem)(env, (item, type) => {\n    if (types.includes(type)) {\n      event = Array.isArray(item) ? (item )[1] : undefined;\n    }\n    // bail out if we found an event\n    return !!event;\n  });\n\n  return event;\n}\n\n/**\n * Creates a transport that overrides the release on all events.\n */\nfunction makeOverrideReleaseTransport(\n  createTransport,\n  release,\n) {\n  return options => {\n    const transport = createTransport(options);\n\n    return {\n      ...transport,\n      send: async (envelope) => {\n        const event = eventFromEnvelope(envelope, ['event', 'transaction', 'profile', 'replay_event']);\n\n        if (event) {\n          event.release = release;\n        }\n        return transport.send(envelope);\n      },\n    };\n  };\n}\n\n/** Overrides the DSN in the envelope header  */\nfunction overrideDsn(envelope, dsn) {\n  return (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.createEnvelope)(\n    dsn\n      ? {\n          ...envelope[0],\n          dsn,\n        }\n      : envelope[0],\n    envelope[1],\n  );\n}\n\n/**\n * Creates a transport that can send events to different DSNs depending on the envelope contents.\n */\nfunction makeMultiplexedTransport(\n  createTransport,\n  matcher,\n) {\n  return options => {\n    const fallbackTransport = createTransport(options);\n    const otherTransports = new Map();\n\n    function getTransport(dsn, release) {\n      // We create a transport for every unique dsn/release combination as there may be code from multiple releases in\n      // use at the same time\n      const key = release ? `${dsn}:${release}` : dsn;\n\n      let transport = otherTransports.get(key);\n\n      if (!transport) {\n        const validatedDsn = (0,_utils_dsn_js__WEBPACK_IMPORTED_MODULE_1__.dsnFromString)(dsn);\n        if (!validatedDsn) {\n          return undefined;\n        }\n        const url = (0,_api_js__WEBPACK_IMPORTED_MODULE_0__.getEnvelopeEndpointWithUrlEncodedAuth)(validatedDsn, options.tunnel);\n\n        transport = release\n          ? makeOverrideReleaseTransport(createTransport, release)({ ...options, url })\n          : createTransport({ ...options, url });\n\n        otherTransports.set(key, transport);\n      }\n\n      return [dsn, transport];\n    }\n\n    async function send(envelope) {\n      function getEvent(types) {\n        const eventTypes = types?.length ? types : ['event'];\n        return eventFromEnvelope(envelope, eventTypes);\n      }\n\n      const transports = matcher({ envelope, getEvent })\n        .map(result => {\n          if (typeof result === 'string') {\n            return getTransport(result, undefined);\n          } else {\n            return getTransport(result.dsn, result.release);\n          }\n        })\n        .filter((t) => !!t);\n\n      // If we have no transports to send to, use the fallback transport\n      // Don't override the DSN in the header for the fallback transport. '' is falsy\n      const transportsWithFallback = transports.length ? transports : [['', fallbackTransport]];\n\n      const results = (await Promise.all(\n        transportsWithFallback.map(([dsn, transport]) => transport.send(overrideDsn(envelope, dsn))),\n      )) ;\n\n      return results[0];\n    }\n\n    async function flush(timeout) {\n      const allTransports = [...otherTransports.values(), fallbackTransport];\n      const results = await Promise.all(allTransports.map(transport => transport.flush(timeout)));\n      return results.every(r => r);\n    }\n\n    return {\n      send,\n      flush,\n    };\n  };\n}\n\n\n//# sourceMappingURL=multiplexed.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYW5zcG9ydHMvbXVsdGlwbGV4ZWQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBa0U7QUFDbEI7QUFDMkI7O0FBRTNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEVBQUUsdUVBQW1CO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUyxrRUFBYztBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLElBQUksR0FBRyxRQUFROztBQUU5Qzs7QUFFQTtBQUNBLDZCQUE2Qiw0REFBYTtBQUMxQztBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsOEVBQXFDOztBQUV6RDtBQUNBLHFFQUFxRSxpQkFBaUI7QUFDdEYsOEJBQThCLGlCQUFpQjs7QUFFL0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DLG9CQUFvQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRXVEO0FBQ3ZEIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdHJhbnNwb3J0cy9tdWx0aXBsZXhlZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRFbnZlbG9wZUVuZHBvaW50V2l0aFVybEVuY29kZWRBdXRoIH0gZnJvbSAnLi4vYXBpLmpzJztcbmltcG9ydCB7IGRzbkZyb21TdHJpbmcgfSBmcm9tICcuLi91dGlscy9kc24uanMnO1xuaW1wb3J0IHsgY3JlYXRlRW52ZWxvcGUsIGZvckVhY2hFbnZlbG9wZUl0ZW0gfSBmcm9tICcuLi91dGlscy9lbnZlbG9wZS5qcyc7XG5cbi8qKlxuICogR2V0cyBhbiBldmVudCBmcm9tIGFuIGVudmVsb3BlLlxuICpcbiAqIFRoaXMgaXMgb25seSBleHBvcnRlZCBmb3IgdXNlIGluIHRoZSB0ZXN0c1xuICovXG5mdW5jdGlvbiBldmVudEZyb21FbnZlbG9wZShlbnYsIHR5cGVzKSB7XG4gIGxldCBldmVudDtcblxuICBmb3JFYWNoRW52ZWxvcGVJdGVtKGVudiwgKGl0ZW0sIHR5cGUpID0+IHtcbiAgICBpZiAodHlwZXMuaW5jbHVkZXModHlwZSkpIHtcbiAgICAgIGV2ZW50ID0gQXJyYXkuaXNBcnJheShpdGVtKSA/IChpdGVtIClbMV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGJhaWwgb3V0IGlmIHdlIGZvdW5kIGFuIGV2ZW50XG4gICAgcmV0dXJuICEhZXZlbnQ7XG4gIH0pO1xuXG4gIHJldHVybiBldmVudDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdHJhbnNwb3J0IHRoYXQgb3ZlcnJpZGVzIHRoZSByZWxlYXNlIG9uIGFsbCBldmVudHMuXG4gKi9cbmZ1bmN0aW9uIG1ha2VPdmVycmlkZVJlbGVhc2VUcmFuc3BvcnQoXG4gIGNyZWF0ZVRyYW5zcG9ydCxcbiAgcmVsZWFzZSxcbikge1xuICByZXR1cm4gb3B0aW9ucyA9PiB7XG4gICAgY29uc3QgdHJhbnNwb3J0ID0gY3JlYXRlVHJhbnNwb3J0KG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRyYW5zcG9ydCxcbiAgICAgIHNlbmQ6IGFzeW5jIChlbnZlbG9wZSkgPT4ge1xuICAgICAgICBjb25zdCBldmVudCA9IGV2ZW50RnJvbUVudmVsb3BlKGVudmVsb3BlLCBbJ2V2ZW50JywgJ3RyYW5zYWN0aW9uJywgJ3Byb2ZpbGUnLCAncmVwbGF5X2V2ZW50J10pO1xuXG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgIGV2ZW50LnJlbGVhc2UgPSByZWxlYXNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFuc3BvcnQuc2VuZChlbnZlbG9wZSk7XG4gICAgICB9LFxuICAgIH07XG4gIH07XG59XG5cbi8qKiBPdmVycmlkZXMgdGhlIERTTiBpbiB0aGUgZW52ZWxvcGUgaGVhZGVyICAqL1xuZnVuY3Rpb24gb3ZlcnJpZGVEc24oZW52ZWxvcGUsIGRzbikge1xuICByZXR1cm4gY3JlYXRlRW52ZWxvcGUoXG4gICAgZHNuXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5lbnZlbG9wZVswXSxcbiAgICAgICAgICBkc24sXG4gICAgICAgIH1cbiAgICAgIDogZW52ZWxvcGVbMF0sXG4gICAgZW52ZWxvcGVbMV0sXG4gICk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRyYW5zcG9ydCB0aGF0IGNhbiBzZW5kIGV2ZW50cyB0byBkaWZmZXJlbnQgRFNOcyBkZXBlbmRpbmcgb24gdGhlIGVudmVsb3BlIGNvbnRlbnRzLlxuICovXG5mdW5jdGlvbiBtYWtlTXVsdGlwbGV4ZWRUcmFuc3BvcnQoXG4gIGNyZWF0ZVRyYW5zcG9ydCxcbiAgbWF0Y2hlcixcbikge1xuICByZXR1cm4gb3B0aW9ucyA9PiB7XG4gICAgY29uc3QgZmFsbGJhY2tUcmFuc3BvcnQgPSBjcmVhdGVUcmFuc3BvcnQob3B0aW9ucyk7XG4gICAgY29uc3Qgb3RoZXJUcmFuc3BvcnRzID0gbmV3IE1hcCgpO1xuXG4gICAgZnVuY3Rpb24gZ2V0VHJhbnNwb3J0KGRzbiwgcmVsZWFzZSkge1xuICAgICAgLy8gV2UgY3JlYXRlIGEgdHJhbnNwb3J0IGZvciBldmVyeSB1bmlxdWUgZHNuL3JlbGVhc2UgY29tYmluYXRpb24gYXMgdGhlcmUgbWF5IGJlIGNvZGUgZnJvbSBtdWx0aXBsZSByZWxlYXNlcyBpblxuICAgICAgLy8gdXNlIGF0IHRoZSBzYW1lIHRpbWVcbiAgICAgIGNvbnN0IGtleSA9IHJlbGVhc2UgPyBgJHtkc259OiR7cmVsZWFzZX1gIDogZHNuO1xuXG4gICAgICBsZXQgdHJhbnNwb3J0ID0gb3RoZXJUcmFuc3BvcnRzLmdldChrZXkpO1xuXG4gICAgICBpZiAoIXRyYW5zcG9ydCkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWREc24gPSBkc25Gcm9tU3RyaW5nKGRzbik7XG4gICAgICAgIGlmICghdmFsaWRhdGVkRHNuKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSBnZXRFbnZlbG9wZUVuZHBvaW50V2l0aFVybEVuY29kZWRBdXRoKHZhbGlkYXRlZERzbiwgb3B0aW9ucy50dW5uZWwpO1xuXG4gICAgICAgIHRyYW5zcG9ydCA9IHJlbGVhc2VcbiAgICAgICAgICA/IG1ha2VPdmVycmlkZVJlbGVhc2VUcmFuc3BvcnQoY3JlYXRlVHJhbnNwb3J0LCByZWxlYXNlKSh7IC4uLm9wdGlvbnMsIHVybCB9KVxuICAgICAgICAgIDogY3JlYXRlVHJhbnNwb3J0KHsgLi4ub3B0aW9ucywgdXJsIH0pO1xuXG4gICAgICAgIG90aGVyVHJhbnNwb3J0cy5zZXQoa2V5LCB0cmFuc3BvcnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW2RzbiwgdHJhbnNwb3J0XTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBzZW5kKGVudmVsb3BlKSB7XG4gICAgICBmdW5jdGlvbiBnZXRFdmVudCh0eXBlcykge1xuICAgICAgICBjb25zdCBldmVudFR5cGVzID0gdHlwZXM/Lmxlbmd0aCA/IHR5cGVzIDogWydldmVudCddO1xuICAgICAgICByZXR1cm4gZXZlbnRGcm9tRW52ZWxvcGUoZW52ZWxvcGUsIGV2ZW50VHlwZXMpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc3BvcnRzID0gbWF0Y2hlcih7IGVudmVsb3BlLCBnZXRFdmVudCB9KVxuICAgICAgICAubWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0VHJhbnNwb3J0KHJlc3VsdCwgdW5kZWZpbmVkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdldFRyYW5zcG9ydChyZXN1bHQuZHNuLCByZXN1bHQucmVsZWFzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKCh0KSA9PiAhIXQpO1xuXG4gICAgICAvLyBJZiB3ZSBoYXZlIG5vIHRyYW5zcG9ydHMgdG8gc2VuZCB0bywgdXNlIHRoZSBmYWxsYmFjayB0cmFuc3BvcnRcbiAgICAgIC8vIERvbid0IG92ZXJyaWRlIHRoZSBEU04gaW4gdGhlIGhlYWRlciBmb3IgdGhlIGZhbGxiYWNrIHRyYW5zcG9ydC4gJycgaXMgZmFsc3lcbiAgICAgIGNvbnN0IHRyYW5zcG9ydHNXaXRoRmFsbGJhY2sgPSB0cmFuc3BvcnRzLmxlbmd0aCA/IHRyYW5zcG9ydHMgOiBbWycnLCBmYWxsYmFja1RyYW5zcG9ydF1dO1xuXG4gICAgICBjb25zdCByZXN1bHRzID0gKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICB0cmFuc3BvcnRzV2l0aEZhbGxiYWNrLm1hcCgoW2RzbiwgdHJhbnNwb3J0XSkgPT4gdHJhbnNwb3J0LnNlbmQob3ZlcnJpZGVEc24oZW52ZWxvcGUsIGRzbikpKSxcbiAgICAgICkpIDtcblxuICAgICAgcmV0dXJuIHJlc3VsdHNbMF07XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gZmx1c2godGltZW91dCkge1xuICAgICAgY29uc3QgYWxsVHJhbnNwb3J0cyA9IFsuLi5vdGhlclRyYW5zcG9ydHMudmFsdWVzKCksIGZhbGxiYWNrVHJhbnNwb3J0XTtcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChhbGxUcmFuc3BvcnRzLm1hcCh0cmFuc3BvcnQgPT4gdHJhbnNwb3J0LmZsdXNoKHRpbWVvdXQpKSk7XG4gICAgICByZXR1cm4gcmVzdWx0cy5ldmVyeShyID0+IHIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzZW5kLFxuICAgICAgZmx1c2gsXG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgZXZlbnRGcm9tRW52ZWxvcGUsIG1ha2VNdWx0aXBsZXhlZFRyYW5zcG9ydCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bXVsdGlwbGV4ZWQuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/transports/multiplexed.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/transports/offline.js":
/*!**********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/transports/offline.js ***!
  \**********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   MIN_DELAY: () => (/* binding */ MIN_DELAY),\n/* harmony export */   START_DELAY: () => (/* binding */ START_DELAY),\n/* harmony export */   makeOfflineTransport: () => (/* binding */ makeOfflineTransport)\n/* harmony export */ });\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/envelope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/envelope.js\");\n/* harmony import */ var _utils_ratelimit_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/ratelimit.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/ratelimit.js\");\n\n\n\n\n\nconst MIN_DELAY = 100; // 100 ms\nconst START_DELAY = 5000; // 5 seconds\nconst MAX_DELAY = 3.6e6; // 1 hour\n\n/**\n * Wraps a transport and stores and retries events when they fail to send.\n *\n * @param createTransport The transport to wrap.\n */\nfunction makeOfflineTransport(\n  createTransport,\n) {\n  function log(...args) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && _utils_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.log('[Offline]:', ...args);\n  }\n\n  return options => {\n    const transport = createTransport(options);\n\n    if (!options.createStore) {\n      throw new Error('No `createStore` function was provided');\n    }\n\n    const store = options.createStore(options);\n\n    let retryDelay = START_DELAY;\n    let flushTimer;\n\n    function shouldQueue(env, error, retryDelay) {\n      // We want to drop client reports because they can be generated when we retry sending events while offline.\n      if ((0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.envelopeContainsItemType)(env, ['client_report'])) {\n        return false;\n      }\n\n      if (options.shouldStore) {\n        return options.shouldStore(env, error, retryDelay);\n      }\n\n      return true;\n    }\n\n    function flushIn(delay) {\n      if (flushTimer) {\n        clearTimeout(flushTimer );\n      }\n\n      flushTimer = setTimeout(async () => {\n        flushTimer = undefined;\n\n        const found = await store.shift();\n        if (found) {\n          log('Attempting to send previously queued event');\n\n          // We should to update the sent_at timestamp to the current time.\n          found[0].sent_at = new Date().toISOString();\n\n          void send(found, true).catch(e => {\n            log('Failed to retry sending', e);\n          });\n        }\n      }, delay) ;\n\n      // We need to unref the timer in node.js, otherwise the node process never exit.\n      if (typeof flushTimer !== 'number' && flushTimer.unref) {\n        flushTimer.unref();\n      }\n    }\n\n    function flushWithBackOff() {\n      if (flushTimer) {\n        return;\n      }\n\n      flushIn(retryDelay);\n\n      retryDelay = Math.min(retryDelay * 2, MAX_DELAY);\n    }\n\n    async function send(envelope, isRetry = false) {\n      // We queue all replay envelopes to avoid multiple replay envelopes being sent at the same time. If one fails, we\n      // need to retry them in order.\n      if (!isRetry && (0,_utils_envelope_js__WEBPACK_IMPORTED_MODULE_2__.envelopeContainsItemType)(envelope, ['replay_event', 'replay_recording'])) {\n        await store.push(envelope);\n        flushIn(MIN_DELAY);\n        return {};\n      }\n\n      try {\n        if (options.shouldSend && (await options.shouldSend(envelope)) === false) {\n          throw new Error('Envelope not sent because `shouldSend` callback returned false');\n        }\n\n        const result = await transport.send(envelope);\n\n        let delay = MIN_DELAY;\n\n        if (result) {\n          // If there's a retry-after header, use that as the next delay.\n          if (result.headers?.['retry-after']) {\n            delay = (0,_utils_ratelimit_js__WEBPACK_IMPORTED_MODULE_3__.parseRetryAfterHeader)(result.headers['retry-after']);\n          } else if (result.headers?.['x-sentry-rate-limits']) {\n            delay = 60000; // 60 seconds\n          } // If we have a server error, return now so we don't flush the queue.\n          else if ((result.statusCode || 0) >= 400) {\n            return result;\n          }\n        }\n\n        flushIn(delay);\n        retryDelay = START_DELAY;\n        return result;\n      } catch (e) {\n        if (await shouldQueue(envelope, e , retryDelay)) {\n          // If this envelope was a retry, we want to add it to the front of the queue so it's retried again first.\n          if (isRetry) {\n            await store.unshift(envelope);\n          } else {\n            await store.push(envelope);\n          }\n          flushWithBackOff();\n          log('Error sending. Event queued.', e );\n          return {};\n        } else {\n          throw e;\n        }\n      }\n    }\n\n    if (options.flushAtStartup) {\n      flushWithBackOff();\n    }\n\n    return {\n      send,\n      flush: timeout => {\n        // If there's no timeout, we should attempt to flush the offline queue.\n        if (timeout === undefined) {\n          retryDelay = START_DELAY;\n          flushIn(MIN_DELAY);\n        }\n\n        return transport.flush(timeout);\n      },\n    };\n  };\n}\n\n\n//# sourceMappingURL=offline.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RyYW5zcG9ydHMvb2ZmbGluZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQWdEO0FBQ0M7QUFDZTtBQUNGOztBQUU5RCx1QkFBdUI7QUFDdkIsMEJBQTBCO0FBQzFCLHlCQUF5Qjs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSx3REFBVyxJQUFJLHlEQUFLO0FBQ3hCOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsNEVBQXdCO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDRFQUF3QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsMEVBQXFCO0FBQ3pDLFlBQVk7QUFDWiwyQkFBMkI7QUFDM0IsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFd0Q7QUFDeEQiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS90cmFuc3BvcnRzL29mZmxpbmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4uL3V0aWxzL2RlYnVnLWxvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbnZlbG9wZUNvbnRhaW5zSXRlbVR5cGUgfSBmcm9tICcuLi91dGlscy9lbnZlbG9wZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVJldHJ5QWZ0ZXJIZWFkZXIgfSBmcm9tICcuLi91dGlscy9yYXRlbGltaXQuanMnO1xuXG5jb25zdCBNSU5fREVMQVkgPSAxMDA7IC8vIDEwMCBtc1xuY29uc3QgU1RBUlRfREVMQVkgPSA1MDAwOyAvLyA1IHNlY29uZHNcbmNvbnN0IE1BWF9ERUxBWSA9IDMuNmU2OyAvLyAxIGhvdXJcblxuLyoqXG4gKiBXcmFwcyBhIHRyYW5zcG9ydCBhbmQgc3RvcmVzIGFuZCByZXRyaWVzIGV2ZW50cyB3aGVuIHRoZXkgZmFpbCB0byBzZW5kLlxuICpcbiAqIEBwYXJhbSBjcmVhdGVUcmFuc3BvcnQgVGhlIHRyYW5zcG9ydCB0byB3cmFwLlxuICovXG5mdW5jdGlvbiBtYWtlT2ZmbGluZVRyYW5zcG9ydChcbiAgY3JlYXRlVHJhbnNwb3J0LFxuKSB7XG4gIGZ1bmN0aW9uIGxvZyguLi5hcmdzKSB7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKCdbT2ZmbGluZV06JywgLi4uYXJncyk7XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucyA9PiB7XG4gICAgY29uc3QgdHJhbnNwb3J0ID0gY3JlYXRlVHJhbnNwb3J0KG9wdGlvbnMpO1xuXG4gICAgaWYgKCFvcHRpb25zLmNyZWF0ZVN0b3JlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGBjcmVhdGVTdG9yZWAgZnVuY3Rpb24gd2FzIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcmUgPSBvcHRpb25zLmNyZWF0ZVN0b3JlKG9wdGlvbnMpO1xuXG4gICAgbGV0IHJldHJ5RGVsYXkgPSBTVEFSVF9ERUxBWTtcbiAgICBsZXQgZmx1c2hUaW1lcjtcblxuICAgIGZ1bmN0aW9uIHNob3VsZFF1ZXVlKGVudiwgZXJyb3IsIHJldHJ5RGVsYXkpIHtcbiAgICAgIC8vIFdlIHdhbnQgdG8gZHJvcCBjbGllbnQgcmVwb3J0cyBiZWNhdXNlIHRoZXkgY2FuIGJlIGdlbmVyYXRlZCB3aGVuIHdlIHJldHJ5IHNlbmRpbmcgZXZlbnRzIHdoaWxlIG9mZmxpbmUuXG4gICAgICBpZiAoZW52ZWxvcGVDb250YWluc0l0ZW1UeXBlKGVudiwgWydjbGllbnRfcmVwb3J0J10pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuc2hvdWxkU3RvcmUpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2hvdWxkU3RvcmUoZW52LCBlcnJvciwgcmV0cnlEZWxheSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZsdXNoSW4oZGVsYXkpIHtcbiAgICAgIGlmIChmbHVzaFRpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChmbHVzaFRpbWVyICk7XG4gICAgICB9XG5cbiAgICAgIGZsdXNoVGltZXIgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgZmx1c2hUaW1lciA9IHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCBmb3VuZCA9IGF3YWl0IHN0b3JlLnNoaWZ0KCk7XG4gICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgIGxvZygnQXR0ZW1wdGluZyB0byBzZW5kIHByZXZpb3VzbHkgcXVldWVkIGV2ZW50Jyk7XG5cbiAgICAgICAgICAvLyBXZSBzaG91bGQgdG8gdXBkYXRlIHRoZSBzZW50X2F0IHRpbWVzdGFtcCB0byB0aGUgY3VycmVudCB0aW1lLlxuICAgICAgICAgIGZvdW5kWzBdLnNlbnRfYXQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgICAgICAgICB2b2lkIHNlbmQoZm91bmQsIHRydWUpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgbG9nKCdGYWlsZWQgdG8gcmV0cnkgc2VuZGluZycsIGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCBkZWxheSkgO1xuXG4gICAgICAvLyBXZSBuZWVkIHRvIHVucmVmIHRoZSB0aW1lciBpbiBub2RlLmpzLCBvdGhlcndpc2UgdGhlIG5vZGUgcHJvY2VzcyBuZXZlciBleGl0LlxuICAgICAgaWYgKHR5cGVvZiBmbHVzaFRpbWVyICE9PSAnbnVtYmVyJyAmJiBmbHVzaFRpbWVyLnVucmVmKSB7XG4gICAgICAgIGZsdXNoVGltZXIudW5yZWYoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmbHVzaFdpdGhCYWNrT2ZmKCkge1xuICAgICAgaWYgKGZsdXNoVGltZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmbHVzaEluKHJldHJ5RGVsYXkpO1xuXG4gICAgICByZXRyeURlbGF5ID0gTWF0aC5taW4ocmV0cnlEZWxheSAqIDIsIE1BWF9ERUxBWSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gc2VuZChlbnZlbG9wZSwgaXNSZXRyeSA9IGZhbHNlKSB7XG4gICAgICAvLyBXZSBxdWV1ZSBhbGwgcmVwbGF5IGVudmVsb3BlcyB0byBhdm9pZCBtdWx0aXBsZSByZXBsYXkgZW52ZWxvcGVzIGJlaW5nIHNlbnQgYXQgdGhlIHNhbWUgdGltZS4gSWYgb25lIGZhaWxzLCB3ZVxuICAgICAgLy8gbmVlZCB0byByZXRyeSB0aGVtIGluIG9yZGVyLlxuICAgICAgaWYgKCFpc1JldHJ5ICYmIGVudmVsb3BlQ29udGFpbnNJdGVtVHlwZShlbnZlbG9wZSwgWydyZXBsYXlfZXZlbnQnLCAncmVwbGF5X3JlY29yZGluZyddKSkge1xuICAgICAgICBhd2FpdCBzdG9yZS5wdXNoKGVudmVsb3BlKTtcbiAgICAgICAgZmx1c2hJbihNSU5fREVMQVkpO1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChvcHRpb25zLnNob3VsZFNlbmQgJiYgKGF3YWl0IG9wdGlvbnMuc2hvdWxkU2VuZChlbnZlbG9wZSkpID09PSBmYWxzZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRW52ZWxvcGUgbm90IHNlbnQgYmVjYXVzZSBgc2hvdWxkU2VuZGAgY2FsbGJhY2sgcmV0dXJuZWQgZmFsc2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zcG9ydC5zZW5kKGVudmVsb3BlKTtcblxuICAgICAgICBsZXQgZGVsYXkgPSBNSU5fREVMQVk7XG5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYSByZXRyeS1hZnRlciBoZWFkZXIsIHVzZSB0aGF0IGFzIHRoZSBuZXh0IGRlbGF5LlxuICAgICAgICAgIGlmIChyZXN1bHQuaGVhZGVycz8uWydyZXRyeS1hZnRlciddKSB7XG4gICAgICAgICAgICBkZWxheSA9IHBhcnNlUmV0cnlBZnRlckhlYWRlcihyZXN1bHQuaGVhZGVyc1sncmV0cnktYWZ0ZXInXSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQuaGVhZGVycz8uWyd4LXNlbnRyeS1yYXRlLWxpbWl0cyddKSB7XG4gICAgICAgICAgICBkZWxheSA9IDYwMDAwOyAvLyA2MCBzZWNvbmRzXG4gICAgICAgICAgfSAvLyBJZiB3ZSBoYXZlIGEgc2VydmVyIGVycm9yLCByZXR1cm4gbm93IHNvIHdlIGRvbid0IGZsdXNoIHRoZSBxdWV1ZS5cbiAgICAgICAgICBlbHNlIGlmICgocmVzdWx0LnN0YXR1c0NvZGUgfHwgMCkgPj0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZsdXNoSW4oZGVsYXkpO1xuICAgICAgICByZXRyeURlbGF5ID0gU1RBUlRfREVMQVk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChhd2FpdCBzaG91bGRRdWV1ZShlbnZlbG9wZSwgZSAsIHJldHJ5RGVsYXkpKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBlbnZlbG9wZSB3YXMgYSByZXRyeSwgd2Ugd2FudCB0byBhZGQgaXQgdG8gdGhlIGZyb250IG9mIHRoZSBxdWV1ZSBzbyBpdCdzIHJldHJpZWQgYWdhaW4gZmlyc3QuXG4gICAgICAgICAgaWYgKGlzUmV0cnkpIHtcbiAgICAgICAgICAgIGF3YWl0IHN0b3JlLnVuc2hpZnQoZW52ZWxvcGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCBzdG9yZS5wdXNoKGVudmVsb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmx1c2hXaXRoQmFja09mZigpO1xuICAgICAgICAgIGxvZygnRXJyb3Igc2VuZGluZy4gRXZlbnQgcXVldWVkLicsIGUgKTtcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmZsdXNoQXRTdGFydHVwKSB7XG4gICAgICBmbHVzaFdpdGhCYWNrT2ZmKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbmQsXG4gICAgICBmbHVzaDogdGltZW91dCA9PiB7XG4gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gdGltZW91dCwgd2Ugc2hvdWxkIGF0dGVtcHQgdG8gZmx1c2ggdGhlIG9mZmxpbmUgcXVldWUuXG4gICAgICAgIGlmICh0aW1lb3V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXRyeURlbGF5ID0gU1RBUlRfREVMQVk7XG4gICAgICAgICAgZmx1c2hJbihNSU5fREVMQVkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRyYW5zcG9ydC5mbHVzaCh0aW1lb3V0KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgTUlOX0RFTEFZLCBTVEFSVF9ERUxBWSwgbWFrZU9mZmxpbmVUcmFuc3BvcnQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9mZmxpbmUuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/transports/offline.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/trpc.js":
/*!********************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/trpc.js ***!
  \********************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   trpcMiddleware: () => (/* binding */ trpcMiddleware)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _exports_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./exports.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/exports.js\");\n/* harmony import */ var _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./semanticAttributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/semanticAttributes.js\");\n/* harmony import */ var _utils_object_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/object.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js\");\n/* harmony import */ var _utils_normalize_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/normalize.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/normalize.js\");\n/* harmony import */ var _tracing_trace_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tracing/trace.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/trace.js\");\n\n\n\n\n\n\n\nconst trpcCaptureContext = { mechanism: { handled: false, data: { function: 'trpcMiddleware' } } };\n\nfunction captureIfError(nextResult) {\n  // TODO: Set span status based on what TRPCError was encountered\n  if (\n    typeof nextResult === 'object' &&\n    nextResult !== null &&\n    'ok' in nextResult &&\n    !nextResult.ok &&\n    'error' in nextResult\n  ) {\n    (0,_exports_js__WEBPACK_IMPORTED_MODULE_1__.captureException)(nextResult.error, trpcCaptureContext);\n  }\n}\n\n/**\n * Sentry tRPC middleware that captures errors and creates spans for tRPC procedures.\n */\nfunction trpcMiddleware(options = {}) {\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  return async function (opts) {\n    const { path, type, next, rawInput, getRawInput } = opts;\n\n    const client = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n    const clientOptions = client?.getOptions();\n\n    const trpcContext = {\n      procedure_path: path,\n      procedure_type: type,\n    };\n\n    (0,_utils_object_js__WEBPACK_IMPORTED_MODULE_3__.addNonEnumerableProperty)(\n      trpcContext,\n      '__sentry_override_normalization_depth__',\n      1 + // 1 for context.input + the normal normalization depth\n        (clientOptions?.normalizeDepth ?? 5), // 5 is a sane depth\n    );\n\n    if (options.attachRpcInput !== undefined ? options.attachRpcInput : clientOptions?.sendDefaultPii) {\n      if (rawInput !== undefined) {\n        trpcContext.input = (0,_utils_normalize_js__WEBPACK_IMPORTED_MODULE_4__.normalize)(rawInput);\n      }\n\n      if (getRawInput !== undefined && typeof getRawInput === 'function') {\n        try {\n          const rawRes = await getRawInput();\n\n          trpcContext.input = (0,_utils_normalize_js__WEBPACK_IMPORTED_MODULE_4__.normalize)(rawRes);\n        } catch {\n          // noop\n        }\n      }\n    }\n\n    return (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.withIsolationScope)(scope => {\n      scope.setContext('trpc', trpcContext);\n      return (0,_tracing_trace_js__WEBPACK_IMPORTED_MODULE_5__.startSpanManual)(\n        {\n          name: `trpc/${path}`,\n          op: 'rpc.server',\n          attributes: {\n            [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_2__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route',\n            [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_2__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.rpc.trpc',\n          },\n          forceTransaction: !!options.forceTransaction,\n        },\n        async span => {\n          try {\n            const nextResult = await next();\n            captureIfError(nextResult);\n            span.end();\n            return nextResult;\n          } catch (e) {\n            (0,_exports_js__WEBPACK_IMPORTED_MODULE_1__.captureException)(e, trpcCaptureContext);\n            span.end();\n            throw e;\n          }\n        },\n      ) ;\n    });\n  };\n}\n\n\n//# sourceMappingURL=trpc.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3RycGMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFtRTtBQUNuQjtBQUM2RDtBQUNoRDtBQUNaO0FBQ0k7O0FBRXJELDZCQUE2QixhQUFhLHdCQUF3Qjs7QUFFbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSw2REFBZ0I7QUFDcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsWUFBWSwwQ0FBMEM7O0FBRXRELG1CQUFtQiw0REFBUztBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLDBFQUF3QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEIsOERBQVM7QUFDckM7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDhCQUE4Qiw4REFBUztBQUN2QyxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsV0FBVyxxRUFBa0I7QUFDN0I7QUFDQSxhQUFhLGtFQUFlO0FBQzVCO0FBQ0Esd0JBQXdCLEtBQUs7QUFDN0I7QUFDQTtBQUNBLGFBQWEsb0ZBQWdDO0FBQzdDLGFBQWEsb0ZBQWdDO0FBQzdDLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osWUFBWSw2REFBZ0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRTBCO0FBQzFCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdHJwYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDbGllbnQsIHdpdGhJc29sYXRpb25TY29wZSB9IGZyb20gJy4vY3VycmVudFNjb3Blcy5qcyc7XG5pbXBvcnQgeyBjYXB0dXJlRXhjZXB0aW9uIH0gZnJvbSAnLi9leHBvcnRzLmpzJztcbmltcG9ydCB7IFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRSB9IGZyb20gJy4vc2VtYW50aWNBdHRyaWJ1dGVzLmpzJztcbmltcG9ydCB7IGFkZE5vbkVudW1lcmFibGVQcm9wZXJ0eSB9IGZyb20gJy4vdXRpbHMvb2JqZWN0LmpzJztcbmltcG9ydCB7IG5vcm1hbGl6ZSB9IGZyb20gJy4vdXRpbHMvbm9ybWFsaXplLmpzJztcbmltcG9ydCB7IHN0YXJ0U3Bhbk1hbnVhbCB9IGZyb20gJy4vdHJhY2luZy90cmFjZS5qcyc7XG5cbmNvbnN0IHRycGNDYXB0dXJlQ29udGV4dCA9IHsgbWVjaGFuaXNtOiB7IGhhbmRsZWQ6IGZhbHNlLCBkYXRhOiB7IGZ1bmN0aW9uOiAndHJwY01pZGRsZXdhcmUnIH0gfSB9O1xuXG5mdW5jdGlvbiBjYXB0dXJlSWZFcnJvcihuZXh0UmVzdWx0KSB7XG4gIC8vIFRPRE86IFNldCBzcGFuIHN0YXR1cyBiYXNlZCBvbiB3aGF0IFRSUENFcnJvciB3YXMgZW5jb3VudGVyZWRcbiAgaWYgKFxuICAgIHR5cGVvZiBuZXh0UmVzdWx0ID09PSAnb2JqZWN0JyAmJlxuICAgIG5leHRSZXN1bHQgIT09IG51bGwgJiZcbiAgICAnb2snIGluIG5leHRSZXN1bHQgJiZcbiAgICAhbmV4dFJlc3VsdC5vayAmJlxuICAgICdlcnJvcicgaW4gbmV4dFJlc3VsdFxuICApIHtcbiAgICBjYXB0dXJlRXhjZXB0aW9uKG5leHRSZXN1bHQuZXJyb3IsIHRycGNDYXB0dXJlQ29udGV4dCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZW50cnkgdFJQQyBtaWRkbGV3YXJlIHRoYXQgY2FwdHVyZXMgZXJyb3JzIGFuZCBjcmVhdGVzIHNwYW5zIGZvciB0UlBDIHByb2NlZHVyZXMuXG4gKi9cbmZ1bmN0aW9uIHRycGNNaWRkbGV3YXJlKG9wdGlvbnMgPSB7fSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIChvcHRzKSB7XG4gICAgY29uc3QgeyBwYXRoLCB0eXBlLCBuZXh0LCByYXdJbnB1dCwgZ2V0UmF3SW5wdXQgfSA9IG9wdHM7XG5cbiAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcbiAgICBjb25zdCBjbGllbnRPcHRpb25zID0gY2xpZW50Py5nZXRPcHRpb25zKCk7XG5cbiAgICBjb25zdCB0cnBjQ29udGV4dCA9IHtcbiAgICAgIHByb2NlZHVyZV9wYXRoOiBwYXRoLFxuICAgICAgcHJvY2VkdXJlX3R5cGU6IHR5cGUsXG4gICAgfTtcblxuICAgIGFkZE5vbkVudW1lcmFibGVQcm9wZXJ0eShcbiAgICAgIHRycGNDb250ZXh0LFxuICAgICAgJ19fc2VudHJ5X292ZXJyaWRlX25vcm1hbGl6YXRpb25fZGVwdGhfXycsXG4gICAgICAxICsgLy8gMSBmb3IgY29udGV4dC5pbnB1dCArIHRoZSBub3JtYWwgbm9ybWFsaXphdGlvbiBkZXB0aFxuICAgICAgICAoY2xpZW50T3B0aW9ucz8ubm9ybWFsaXplRGVwdGggPz8gNSksIC8vIDUgaXMgYSBzYW5lIGRlcHRoXG4gICAgKTtcblxuICAgIGlmIChvcHRpb25zLmF0dGFjaFJwY0lucHV0ICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmF0dGFjaFJwY0lucHV0IDogY2xpZW50T3B0aW9ucz8uc2VuZERlZmF1bHRQaWkpIHtcbiAgICAgIGlmIChyYXdJbnB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRycGNDb250ZXh0LmlucHV0ID0gbm9ybWFsaXplKHJhd0lucHV0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdldFJhd0lucHV0ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGdldFJhd0lucHV0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmF3UmVzID0gYXdhaXQgZ2V0UmF3SW5wdXQoKTtcblxuICAgICAgICAgIHRycGNDb250ZXh0LmlucHV0ID0gbm9ybWFsaXplKHJhd1Jlcyk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB3aXRoSXNvbGF0aW9uU2NvcGUoc2NvcGUgPT4ge1xuICAgICAgc2NvcGUuc2V0Q29udGV4dCgndHJwYycsIHRycGNDb250ZXh0KTtcbiAgICAgIHJldHVybiBzdGFydFNwYW5NYW51YWwoXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBgdHJwYy8ke3BhdGh9YCxcbiAgICAgICAgICBvcDogJ3JwYy5zZXJ2ZXInLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV06ICdyb3V0ZScsXG4gICAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiAnYXV0by5ycGMudHJwYycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmb3JjZVRyYW5zYWN0aW9uOiAhIW9wdGlvbnMuZm9yY2VUcmFuc2FjdGlvbixcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgc3BhbiA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRSZXN1bHQgPSBhd2FpdCBuZXh0KCk7XG4gICAgICAgICAgICBjYXB0dXJlSWZFcnJvcihuZXh0UmVzdWx0KTtcbiAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICByZXR1cm4gbmV4dFJlc3VsdDtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjYXB0dXJlRXhjZXB0aW9uKGUsIHRycGNDYXB0dXJlQ29udGV4dCk7XG4gICAgICAgICAgICBzcGFuLmVuZCgpO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApIDtcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgdHJwY01pZGRsZXdhcmUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRycGMuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/trpc.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/aggregate-errors.js":
/*!**************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/aggregate-errors.js ***!
  \**************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   applyAggregateErrorsToEvent: () => (/* binding */ applyAggregateErrorsToEvent)\n/* harmony export */ });\n/* harmony import */ var _is_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n\n\n/**\n * Creates exceptions inside `event.exception.values` for errors that are nested on properties based on the `key` parameter.\n */\nfunction applyAggregateErrorsToEvent(\n  exceptionFromErrorImplementation,\n  parser,\n  key,\n  limit,\n  event,\n  hint,\n) {\n  if (!event.exception?.values || !hint || !(0,_is_js__WEBPACK_IMPORTED_MODULE_0__.isInstanceOf)(hint.originalException, Error)) {\n    return;\n  }\n\n  // Generally speaking the last item in `event.exception.values` is the exception originating from the original Error\n  const originalException =\n    event.exception.values.length > 0 ? event.exception.values[event.exception.values.length - 1] : undefined;\n\n  // We only create exception grouping if there is an exception in the event.\n  if (originalException) {\n    event.exception.values = aggregateExceptionsFromError(\n      exceptionFromErrorImplementation,\n      parser,\n      limit,\n      hint.originalException ,\n      key,\n      event.exception.values,\n      originalException,\n      0,\n    );\n  }\n}\n\nfunction aggregateExceptionsFromError(\n  exceptionFromErrorImplementation,\n  parser,\n  limit,\n  error,\n  key,\n  prevExceptions,\n  exception,\n  exceptionId,\n) {\n  if (prevExceptions.length >= limit + 1) {\n    return prevExceptions;\n  }\n\n  let newExceptions = [...prevExceptions];\n\n  // Recursively call this function in order to walk down a chain of errors\n  if ((0,_is_js__WEBPACK_IMPORTED_MODULE_0__.isInstanceOf)(error[key], Error)) {\n    applyExceptionGroupFieldsForParentException(exception, exceptionId);\n    const newException = exceptionFromErrorImplementation(parser, error[key]);\n    const newExceptionId = newExceptions.length;\n    applyExceptionGroupFieldsForChildException(newException, key, newExceptionId, exceptionId);\n    newExceptions = aggregateExceptionsFromError(\n      exceptionFromErrorImplementation,\n      parser,\n      limit,\n      error[key],\n      key,\n      [newException, ...newExceptions],\n      newException,\n      newExceptionId,\n    );\n  }\n\n  // This will create exception grouping for AggregateErrors\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError\n  if (Array.isArray(error.errors)) {\n    error.errors.forEach((childError, i) => {\n      if ((0,_is_js__WEBPACK_IMPORTED_MODULE_0__.isInstanceOf)(childError, Error)) {\n        applyExceptionGroupFieldsForParentException(exception, exceptionId);\n        const newException = exceptionFromErrorImplementation(parser, childError);\n        const newExceptionId = newExceptions.length;\n        applyExceptionGroupFieldsForChildException(newException, `errors[${i}]`, newExceptionId, exceptionId);\n        newExceptions = aggregateExceptionsFromError(\n          exceptionFromErrorImplementation,\n          parser,\n          limit,\n          childError,\n          key,\n          [newException, ...newExceptions],\n          newException,\n          newExceptionId,\n        );\n      }\n    });\n  }\n\n  return newExceptions;\n}\n\nfunction applyExceptionGroupFieldsForParentException(exception, exceptionId) {\n  // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n  exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n  exception.mechanism = {\n    ...exception.mechanism,\n    ...(exception.type === 'AggregateError' && { is_exception_group: true }),\n    exception_id: exceptionId,\n  };\n}\n\nfunction applyExceptionGroupFieldsForChildException(\n  exception,\n  source,\n  exceptionId,\n  parentId,\n) {\n  // Don't know if this default makes sense. The protocol requires us to set these values so we pick *some* default.\n  exception.mechanism = exception.mechanism || { type: 'generic', handled: true };\n\n  exception.mechanism = {\n    ...exception.mechanism,\n    type: 'chained',\n    source,\n    exception_id: exceptionId,\n    parent_id: parentId,\n  };\n}\n\n\n//# sourceMappingURL=aggregate-errors.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2FnZ3JlZ2F0ZS1lcnJvcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsb0RBQVk7QUFDeEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLE1BQU0sb0RBQVk7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxvREFBWTtBQUN0QjtBQUNBO0FBQ0E7QUFDQSwyRUFBMkUsRUFBRTtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlEQUFpRDs7QUFFakQ7QUFDQTtBQUNBLGlEQUFpRCwwQkFBMEI7QUFDM0U7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlEOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUV1QztBQUN2QyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2FnZ3JlZ2F0ZS1lcnJvcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNJbnN0YW5jZU9mIH0gZnJvbSAnLi9pcy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBleGNlcHRpb25zIGluc2lkZSBgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc2AgZm9yIGVycm9ycyB0aGF0IGFyZSBuZXN0ZWQgb24gcHJvcGVydGllcyBiYXNlZCBvbiB0aGUgYGtleWAgcGFyYW1ldGVyLlxuICovXG5mdW5jdGlvbiBhcHBseUFnZ3JlZ2F0ZUVycm9yc1RvRXZlbnQoXG4gIGV4Y2VwdGlvbkZyb21FcnJvckltcGxlbWVudGF0aW9uLFxuICBwYXJzZXIsXG4gIGtleSxcbiAgbGltaXQsXG4gIGV2ZW50LFxuICBoaW50LFxuKSB7XG4gIGlmICghZXZlbnQuZXhjZXB0aW9uPy52YWx1ZXMgfHwgIWhpbnQgfHwgIWlzSW5zdGFuY2VPZihoaW50Lm9yaWdpbmFsRXhjZXB0aW9uLCBFcnJvcikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBHZW5lcmFsbHkgc3BlYWtpbmcgdGhlIGxhc3QgaXRlbSBpbiBgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc2AgaXMgdGhlIGV4Y2VwdGlvbiBvcmlnaW5hdGluZyBmcm9tIHRoZSBvcmlnaW5hbCBFcnJvclxuICBjb25zdCBvcmlnaW5hbEV4Y2VwdGlvbiA9XG4gICAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcy5sZW5ndGggPiAwID8gZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1tldmVudC5leGNlcHRpb24udmFsdWVzLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuXG4gIC8vIFdlIG9ubHkgY3JlYXRlIGV4Y2VwdGlvbiBncm91cGluZyBpZiB0aGVyZSBpcyBhbiBleGNlcHRpb24gaW4gdGhlIGV2ZW50LlxuICBpZiAob3JpZ2luYWxFeGNlcHRpb24pIHtcbiAgICBldmVudC5leGNlcHRpb24udmFsdWVzID0gYWdncmVnYXRlRXhjZXB0aW9uc0Zyb21FcnJvcihcbiAgICAgIGV4Y2VwdGlvbkZyb21FcnJvckltcGxlbWVudGF0aW9uLFxuICAgICAgcGFyc2VyLFxuICAgICAgbGltaXQsXG4gICAgICBoaW50Lm9yaWdpbmFsRXhjZXB0aW9uICxcbiAgICAgIGtleSxcbiAgICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMsXG4gICAgICBvcmlnaW5hbEV4Y2VwdGlvbixcbiAgICAgIDAsXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZ2dyZWdhdGVFeGNlcHRpb25zRnJvbUVycm9yKFxuICBleGNlcHRpb25Gcm9tRXJyb3JJbXBsZW1lbnRhdGlvbixcbiAgcGFyc2VyLFxuICBsaW1pdCxcbiAgZXJyb3IsXG4gIGtleSxcbiAgcHJldkV4Y2VwdGlvbnMsXG4gIGV4Y2VwdGlvbixcbiAgZXhjZXB0aW9uSWQsXG4pIHtcbiAgaWYgKHByZXZFeGNlcHRpb25zLmxlbmd0aCA+PSBsaW1pdCArIDEpIHtcbiAgICByZXR1cm4gcHJldkV4Y2VwdGlvbnM7XG4gIH1cblxuICBsZXQgbmV3RXhjZXB0aW9ucyA9IFsuLi5wcmV2RXhjZXB0aW9uc107XG5cbiAgLy8gUmVjdXJzaXZlbHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGluIG9yZGVyIHRvIHdhbGsgZG93biBhIGNoYWluIG9mIGVycm9yc1xuICBpZiAoaXNJbnN0YW5jZU9mKGVycm9yW2tleV0sIEVycm9yKSkge1xuICAgIGFwcGx5RXhjZXB0aW9uR3JvdXBGaWVsZHNGb3JQYXJlbnRFeGNlcHRpb24oZXhjZXB0aW9uLCBleGNlcHRpb25JZCk7XG4gICAgY29uc3QgbmV3RXhjZXB0aW9uID0gZXhjZXB0aW9uRnJvbUVycm9ySW1wbGVtZW50YXRpb24ocGFyc2VyLCBlcnJvcltrZXldKTtcbiAgICBjb25zdCBuZXdFeGNlcHRpb25JZCA9IG5ld0V4Y2VwdGlvbnMubGVuZ3RoO1xuICAgIGFwcGx5RXhjZXB0aW9uR3JvdXBGaWVsZHNGb3JDaGlsZEV4Y2VwdGlvbihuZXdFeGNlcHRpb24sIGtleSwgbmV3RXhjZXB0aW9uSWQsIGV4Y2VwdGlvbklkKTtcbiAgICBuZXdFeGNlcHRpb25zID0gYWdncmVnYXRlRXhjZXB0aW9uc0Zyb21FcnJvcihcbiAgICAgIGV4Y2VwdGlvbkZyb21FcnJvckltcGxlbWVudGF0aW9uLFxuICAgICAgcGFyc2VyLFxuICAgICAgbGltaXQsXG4gICAgICBlcnJvcltrZXldLFxuICAgICAga2V5LFxuICAgICAgW25ld0V4Y2VwdGlvbiwgLi4ubmV3RXhjZXB0aW9uc10sXG4gICAgICBuZXdFeGNlcHRpb24sXG4gICAgICBuZXdFeGNlcHRpb25JZCxcbiAgICApO1xuICB9XG5cbiAgLy8gVGhpcyB3aWxsIGNyZWF0ZSBleGNlcHRpb24gZ3JvdXBpbmcgZm9yIEFnZ3JlZ2F0ZUVycm9yc1xuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BZ2dyZWdhdGVFcnJvclxuICBpZiAoQXJyYXkuaXNBcnJheShlcnJvci5lcnJvcnMpKSB7XG4gICAgZXJyb3IuZXJyb3JzLmZvckVhY2goKGNoaWxkRXJyb3IsIGkpID0+IHtcbiAgICAgIGlmIChpc0luc3RhbmNlT2YoY2hpbGRFcnJvciwgRXJyb3IpKSB7XG4gICAgICAgIGFwcGx5RXhjZXB0aW9uR3JvdXBGaWVsZHNGb3JQYXJlbnRFeGNlcHRpb24oZXhjZXB0aW9uLCBleGNlcHRpb25JZCk7XG4gICAgICAgIGNvbnN0IG5ld0V4Y2VwdGlvbiA9IGV4Y2VwdGlvbkZyb21FcnJvckltcGxlbWVudGF0aW9uKHBhcnNlciwgY2hpbGRFcnJvcik7XG4gICAgICAgIGNvbnN0IG5ld0V4Y2VwdGlvbklkID0gbmV3RXhjZXB0aW9ucy5sZW5ndGg7XG4gICAgICAgIGFwcGx5RXhjZXB0aW9uR3JvdXBGaWVsZHNGb3JDaGlsZEV4Y2VwdGlvbihuZXdFeGNlcHRpb24sIGBlcnJvcnNbJHtpfV1gLCBuZXdFeGNlcHRpb25JZCwgZXhjZXB0aW9uSWQpO1xuICAgICAgICBuZXdFeGNlcHRpb25zID0gYWdncmVnYXRlRXhjZXB0aW9uc0Zyb21FcnJvcihcbiAgICAgICAgICBleGNlcHRpb25Gcm9tRXJyb3JJbXBsZW1lbnRhdGlvbixcbiAgICAgICAgICBwYXJzZXIsXG4gICAgICAgICAgbGltaXQsXG4gICAgICAgICAgY2hpbGRFcnJvcixcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgW25ld0V4Y2VwdGlvbiwgLi4ubmV3RXhjZXB0aW9uc10sXG4gICAgICAgICAgbmV3RXhjZXB0aW9uLFxuICAgICAgICAgIG5ld0V4Y2VwdGlvbklkLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld0V4Y2VwdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGFwcGx5RXhjZXB0aW9uR3JvdXBGaWVsZHNGb3JQYXJlbnRFeGNlcHRpb24oZXhjZXB0aW9uLCBleGNlcHRpb25JZCkge1xuICAvLyBEb24ndCBrbm93IGlmIHRoaXMgZGVmYXVsdCBtYWtlcyBzZW5zZS4gVGhlIHByb3RvY29sIHJlcXVpcmVzIHVzIHRvIHNldCB0aGVzZSB2YWx1ZXMgc28gd2UgcGljayAqc29tZSogZGVmYXVsdC5cbiAgZXhjZXB0aW9uLm1lY2hhbmlzbSA9IGV4Y2VwdGlvbi5tZWNoYW5pc20gfHwgeyB0eXBlOiAnZ2VuZXJpYycsIGhhbmRsZWQ6IHRydWUgfTtcblxuICBleGNlcHRpb24ubWVjaGFuaXNtID0ge1xuICAgIC4uLmV4Y2VwdGlvbi5tZWNoYW5pc20sXG4gICAgLi4uKGV4Y2VwdGlvbi50eXBlID09PSAnQWdncmVnYXRlRXJyb3InICYmIHsgaXNfZXhjZXB0aW9uX2dyb3VwOiB0cnVlIH0pLFxuICAgIGV4Y2VwdGlvbl9pZDogZXhjZXB0aW9uSWQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFwcGx5RXhjZXB0aW9uR3JvdXBGaWVsZHNGb3JDaGlsZEV4Y2VwdGlvbihcbiAgZXhjZXB0aW9uLFxuICBzb3VyY2UsXG4gIGV4Y2VwdGlvbklkLFxuICBwYXJlbnRJZCxcbikge1xuICAvLyBEb24ndCBrbm93IGlmIHRoaXMgZGVmYXVsdCBtYWtlcyBzZW5zZS4gVGhlIHByb3RvY29sIHJlcXVpcmVzIHVzIHRvIHNldCB0aGVzZSB2YWx1ZXMgc28gd2UgcGljayAqc29tZSogZGVmYXVsdC5cbiAgZXhjZXB0aW9uLm1lY2hhbmlzbSA9IGV4Y2VwdGlvbi5tZWNoYW5pc20gfHwgeyB0eXBlOiAnZ2VuZXJpYycsIGhhbmRsZWQ6IHRydWUgfTtcblxuICBleGNlcHRpb24ubWVjaGFuaXNtID0ge1xuICAgIC4uLmV4Y2VwdGlvbi5tZWNoYW5pc20sXG4gICAgdHlwZTogJ2NoYWluZWQnLFxuICAgIHNvdXJjZSxcbiAgICBleGNlcHRpb25faWQ6IGV4Y2VwdGlvbklkLFxuICAgIHBhcmVudF9pZDogcGFyZW50SWQsXG4gIH07XG59XG5cbmV4cG9ydCB7IGFwcGx5QWdncmVnYXRlRXJyb3JzVG9FdmVudCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWdncmVnYXRlLWVycm9ycy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/aggregate-errors.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/anr.js":
/*!*************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/anr.js ***!
  \*************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   callFrameToStackFrame: () => (/* binding */ callFrameToStackFrame),\n/* harmony export */   watchdogTimer: () => (/* binding */ watchdogTimer)\n/* harmony export */ });\n/* harmony import */ var _node_stack_trace_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node-stack-trace.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/node-stack-trace.js\");\n/* harmony import */ var _stacktrace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stacktrace.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/stacktrace.js\");\n\n\n\n/**\n * A node.js watchdog timer\n * @param pollInterval The interval that we expect to get polled at\n * @param anrThreshold The threshold for when we consider ANR\n * @param callback The callback to call for ANR\n * @returns An object with `poll` and `enabled` functions {@link WatchdogReturn}\n */\nfunction watchdogTimer(\n  createTimer,\n  pollInterval,\n  anrThreshold,\n  callback,\n) {\n  const timer = createTimer();\n  let triggered = false;\n  let enabled = true;\n\n  setInterval(() => {\n    const diffMs = timer.getTimeMs();\n\n    if (triggered === false && diffMs > pollInterval + anrThreshold) {\n      triggered = true;\n      if (enabled) {\n        callback();\n      }\n    }\n\n    if (diffMs < pollInterval + anrThreshold) {\n      triggered = false;\n    }\n  }, 20);\n\n  return {\n    poll: () => {\n      timer.reset();\n    },\n    enabled: (state) => {\n      enabled = state;\n    },\n  };\n}\n\n// types copied from inspector.d.ts\n\n/**\n * Converts Debugger.CallFrame to Sentry StackFrame\n */\nfunction callFrameToStackFrame(\n  frame,\n  url,\n  getModuleFromFilename,\n) {\n  const filename = url ? url.replace(/^file:\\/\\//, '') : undefined;\n\n  // CallFrame row/col are 0 based, whereas StackFrame are 1 based\n  const colno = frame.location.columnNumber ? frame.location.columnNumber + 1 : undefined;\n  const lineno = frame.location.lineNumber ? frame.location.lineNumber + 1 : undefined;\n\n  return {\n    filename,\n    module: getModuleFromFilename(filename),\n    function: frame.functionName || _stacktrace_js__WEBPACK_IMPORTED_MODULE_1__.UNKNOWN_FUNCTION,\n    colno,\n    lineno,\n    in_app: filename ? (0,_node_stack_trace_js__WEBPACK_IMPORTED_MODULE_0__.filenameIsInApp)(filename) : undefined,\n  };\n}\n\n\n//# sourceMappingURL=anr.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2Fuci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXdEO0FBQ0w7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLDREQUFnQjtBQUNwRDtBQUNBO0FBQ0EsdUJBQXVCLHFFQUFlO0FBQ3RDO0FBQ0E7O0FBRWdEO0FBQ2hEIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvYW5yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZpbGVuYW1lSXNJbkFwcCB9IGZyb20gJy4vbm9kZS1zdGFjay10cmFjZS5qcyc7XG5pbXBvcnQgeyBVTktOT1dOX0ZVTkNUSU9OIH0gZnJvbSAnLi9zdGFja3RyYWNlLmpzJztcblxuLyoqXG4gKiBBIG5vZGUuanMgd2F0Y2hkb2cgdGltZXJcbiAqIEBwYXJhbSBwb2xsSW50ZXJ2YWwgVGhlIGludGVydmFsIHRoYXQgd2UgZXhwZWN0IHRvIGdldCBwb2xsZWQgYXRcbiAqIEBwYXJhbSBhbnJUaHJlc2hvbGQgVGhlIHRocmVzaG9sZCBmb3Igd2hlbiB3ZSBjb25zaWRlciBBTlJcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gY2FsbCBmb3IgQU5SXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBgcG9sbGAgYW5kIGBlbmFibGVkYCBmdW5jdGlvbnMge0BsaW5rIFdhdGNoZG9nUmV0dXJufVxuICovXG5mdW5jdGlvbiB3YXRjaGRvZ1RpbWVyKFxuICBjcmVhdGVUaW1lcixcbiAgcG9sbEludGVydmFsLFxuICBhbnJUaHJlc2hvbGQsXG4gIGNhbGxiYWNrLFxuKSB7XG4gIGNvbnN0IHRpbWVyID0gY3JlYXRlVGltZXIoKTtcbiAgbGV0IHRyaWdnZXJlZCA9IGZhbHNlO1xuICBsZXQgZW5hYmxlZCA9IHRydWU7XG5cbiAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGNvbnN0IGRpZmZNcyA9IHRpbWVyLmdldFRpbWVNcygpO1xuXG4gICAgaWYgKHRyaWdnZXJlZCA9PT0gZmFsc2UgJiYgZGlmZk1zID4gcG9sbEludGVydmFsICsgYW5yVGhyZXNob2xkKSB7XG4gICAgICB0cmlnZ2VyZWQgPSB0cnVlO1xuICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGlmZk1zIDwgcG9sbEludGVydmFsICsgYW5yVGhyZXNob2xkKSB7XG4gICAgICB0cmlnZ2VyZWQgPSBmYWxzZTtcbiAgICB9XG4gIH0sIDIwKTtcblxuICByZXR1cm4ge1xuICAgIHBvbGw6ICgpID0+IHtcbiAgICAgIHRpbWVyLnJlc2V0KCk7XG4gICAgfSxcbiAgICBlbmFibGVkOiAoc3RhdGUpID0+IHtcbiAgICAgIGVuYWJsZWQgPSBzdGF0ZTtcbiAgICB9LFxuICB9O1xufVxuXG4vLyB0eXBlcyBjb3BpZWQgZnJvbSBpbnNwZWN0b3IuZC50c1xuXG4vKipcbiAqIENvbnZlcnRzIERlYnVnZ2VyLkNhbGxGcmFtZSB0byBTZW50cnkgU3RhY2tGcmFtZVxuICovXG5mdW5jdGlvbiBjYWxsRnJhbWVUb1N0YWNrRnJhbWUoXG4gIGZyYW1lLFxuICB1cmwsXG4gIGdldE1vZHVsZUZyb21GaWxlbmFtZSxcbikge1xuICBjb25zdCBmaWxlbmFtZSA9IHVybCA/IHVybC5yZXBsYWNlKC9eZmlsZTpcXC9cXC8vLCAnJykgOiB1bmRlZmluZWQ7XG5cbiAgLy8gQ2FsbEZyYW1lIHJvdy9jb2wgYXJlIDAgYmFzZWQsIHdoZXJlYXMgU3RhY2tGcmFtZSBhcmUgMSBiYXNlZFxuICBjb25zdCBjb2xubyA9IGZyYW1lLmxvY2F0aW9uLmNvbHVtbk51bWJlciA/IGZyYW1lLmxvY2F0aW9uLmNvbHVtbk51bWJlciArIDEgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGxpbmVubyA9IGZyYW1lLmxvY2F0aW9uLmxpbmVOdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5saW5lTnVtYmVyICsgMSA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4ge1xuICAgIGZpbGVuYW1lLFxuICAgIG1vZHVsZTogZ2V0TW9kdWxlRnJvbUZpbGVuYW1lKGZpbGVuYW1lKSxcbiAgICBmdW5jdGlvbjogZnJhbWUuZnVuY3Rpb25OYW1lIHx8IFVOS05PV05fRlVOQ1RJT04sXG4gICAgY29sbm8sXG4gICAgbGluZW5vLFxuICAgIGluX2FwcDogZmlsZW5hbWUgPyBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUpIDogdW5kZWZpbmVkLFxuICB9O1xufVxuXG5leHBvcnQgeyBjYWxsRnJhbWVUb1N0YWNrRnJhbWUsIHdhdGNoZG9nVGltZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuci5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/anr.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/applyScopeDataToEvent.js":
/*!*******************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/applyScopeDataToEvent.js ***!
  \*******************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   applyScopeDataToEvent: () => (/* binding */ applyScopeDataToEvent),\n/* harmony export */   mergeAndOverwriteScopeData: () => (/* binding */ mergeAndOverwriteScopeData),\n/* harmony export */   mergeScopeData: () => (/* binding */ mergeScopeData)\n/* harmony export */ });\n/* harmony import */ var _tracing_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../tracing/dynamicSamplingContext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js\");\n/* harmony import */ var _merge_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./merge.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/merge.js\");\n/* harmony import */ var _spanUtils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./spanUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js\");\n\n\n\n\n/**\n * Applies data from the scope to the event and runs all event processors on it.\n */\nfunction applyScopeDataToEvent(event, data) {\n  const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data;\n\n  // Apply general data\n  applyDataToEvent(event, data);\n\n  // We want to set the trace context for normal events only if there isn't already\n  // a trace context on the event. There is a product feature in place where we link\n  // errors with transaction and it relies on that.\n  if (span) {\n    applySpanToEvent(event, span);\n  }\n\n  applyFingerprintToEvent(event, fingerprint);\n  applyBreadcrumbsToEvent(event, breadcrumbs);\n  applySdkMetadataToEvent(event, sdkProcessingMetadata);\n}\n\n/** Merge data of two scopes together. */\nfunction mergeScopeData(data, mergeData) {\n  const {\n    extra,\n    tags,\n    user,\n    contexts,\n    level,\n    sdkProcessingMetadata,\n    breadcrumbs,\n    fingerprint,\n    eventProcessors,\n    attachments,\n    propagationContext,\n    transactionName,\n    span,\n  } = mergeData;\n\n  mergeAndOverwriteScopeData(data, 'extra', extra);\n  mergeAndOverwriteScopeData(data, 'tags', tags);\n  mergeAndOverwriteScopeData(data, 'user', user);\n  mergeAndOverwriteScopeData(data, 'contexts', contexts);\n\n  data.sdkProcessingMetadata = (0,_merge_js__WEBPACK_IMPORTED_MODULE_1__.merge)(data.sdkProcessingMetadata, sdkProcessingMetadata, 2);\n\n  if (level) {\n    data.level = level;\n  }\n\n  if (transactionName) {\n    data.transactionName = transactionName;\n  }\n\n  if (span) {\n    data.span = span;\n  }\n\n  if (breadcrumbs.length) {\n    data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n  }\n\n  if (fingerprint.length) {\n    data.fingerprint = [...data.fingerprint, ...fingerprint];\n  }\n\n  if (eventProcessors.length) {\n    data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n  }\n\n  if (attachments.length) {\n    data.attachments = [...data.attachments, ...attachments];\n  }\n\n  data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\n\n/**\n * Merges certain scope data. Undefined values will overwrite any existing values.\n * Exported only for tests.\n */\nfunction mergeAndOverwriteScopeData\n\n(data, prop, mergeVal) {\n  data[prop] = (0,_merge_js__WEBPACK_IMPORTED_MODULE_1__.merge)(data[prop], mergeVal, 1);\n}\n\nfunction applyDataToEvent(event, data) {\n  const { extra, tags, user, contexts, level, transactionName } = data;\n\n  if (Object.keys(extra).length) {\n    event.extra = { ...extra, ...event.extra };\n  }\n\n  if (Object.keys(tags).length) {\n    event.tags = { ...tags, ...event.tags };\n  }\n\n  if (Object.keys(user).length) {\n    event.user = { ...user, ...event.user };\n  }\n\n  if (Object.keys(contexts).length) {\n    event.contexts = { ...contexts, ...event.contexts };\n  }\n\n  if (level) {\n    event.level = level;\n  }\n\n  // transaction events get their `transaction` from the root span name\n  if (transactionName && event.type !== 'transaction') {\n    event.transaction = transactionName;\n  }\n}\n\nfunction applyBreadcrumbsToEvent(event, breadcrumbs) {\n  const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs];\n  event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;\n}\n\nfunction applySdkMetadataToEvent(event, sdkProcessingMetadata) {\n  event.sdkProcessingMetadata = {\n    ...event.sdkProcessingMetadata,\n    ...sdkProcessingMetadata,\n  };\n}\n\nfunction applySpanToEvent(event, span) {\n  event.contexts = {\n    trace: (0,_spanUtils_js__WEBPACK_IMPORTED_MODULE_2__.spanToTraceContext)(span),\n    ...event.contexts,\n  };\n\n  event.sdkProcessingMetadata = {\n    dynamicSamplingContext: (0,_tracing_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_0__.getDynamicSamplingContextFromSpan)(span),\n    ...event.sdkProcessingMetadata,\n  };\n\n  const rootSpan = (0,_spanUtils_js__WEBPACK_IMPORTED_MODULE_2__.getRootSpan)(span);\n  const transactionName = (0,_spanUtils_js__WEBPACK_IMPORTED_MODULE_2__.spanToJSON)(rootSpan).description;\n  if (transactionName && !event.transaction && event.type === 'transaction') {\n    event.transaction = transactionName;\n  }\n}\n\n/**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\nfunction applyFingerprintToEvent(event, fingerprint) {\n  // Make sure it's an array first and we actually have something in place\n  event.fingerprint = event.fingerprint\n    ? Array.isArray(event.fingerprint)\n      ? event.fingerprint\n      : [event.fingerprint]\n    : [];\n\n  // If we have something on the scope, then merge it with event\n  if (fingerprint) {\n    event.fingerprint = event.fingerprint.concat(fingerprint);\n  }\n\n  // If we have no data at all, remove empty array default\n  if (!event.fingerprint.length) {\n    delete event.fingerprint;\n  }\n}\n\n\n//# sourceMappingURL=applyScopeDataToEvent.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2FwcGx5U2NvcGVEYXRhVG9FdmVudC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBeUY7QUFDdEQ7QUFDMEM7O0FBRTdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSx3REFBd0Q7O0FBRWxFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0IsZ0RBQUs7O0FBRXBDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw4QkFBOEI7QUFDOUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsZ0RBQUs7QUFDcEI7O0FBRUE7QUFDQSxVQUFVLHNEQUFzRDs7QUFFaEU7QUFDQSxvQkFBb0I7QUFDcEI7O0FBRUE7QUFDQSxtQkFBbUI7QUFDbkI7O0FBRUE7QUFDQSxtQkFBbUI7QUFDbkI7O0FBRUE7QUFDQSx1QkFBdUI7QUFDdkI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLGlFQUFrQjtBQUM3QjtBQUNBOztBQUVBO0FBQ0EsNEJBQTRCLHFHQUFpQztBQUM3RDtBQUNBOztBQUVBLG1CQUFtQiwwREFBVztBQUM5QiwwQkFBMEIseURBQVU7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUU2RTtBQUM3RSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2FwcGx5U2NvcGVEYXRhVG9FdmVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4gfSBmcm9tICcuLi90cmFjaW5nL2R5bmFtaWNTYW1wbGluZ0NvbnRleHQuanMnO1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICcuL21lcmdlLmpzJztcbmltcG9ydCB7IHNwYW5Ub1RyYWNlQ29udGV4dCwgZ2V0Um9vdFNwYW4sIHNwYW5Ub0pTT04gfSBmcm9tICcuL3NwYW5VdGlscy5qcyc7XG5cbi8qKlxuICogQXBwbGllcyBkYXRhIGZyb20gdGhlIHNjb3BlIHRvIHRoZSBldmVudCBhbmQgcnVucyBhbGwgZXZlbnQgcHJvY2Vzc29ycyBvbiBpdC5cbiAqL1xuZnVuY3Rpb24gYXBwbHlTY29wZURhdGFUb0V2ZW50KGV2ZW50LCBkYXRhKSB7XG4gIGNvbnN0IHsgZmluZ2VycHJpbnQsIHNwYW4sIGJyZWFkY3J1bWJzLCBzZGtQcm9jZXNzaW5nTWV0YWRhdGEgfSA9IGRhdGE7XG5cbiAgLy8gQXBwbHkgZ2VuZXJhbCBkYXRhXG4gIGFwcGx5RGF0YVRvRXZlbnQoZXZlbnQsIGRhdGEpO1xuXG4gIC8vIFdlIHdhbnQgdG8gc2V0IHRoZSB0cmFjZSBjb250ZXh0IGZvciBub3JtYWwgZXZlbnRzIG9ubHkgaWYgdGhlcmUgaXNuJ3QgYWxyZWFkeVxuICAvLyBhIHRyYWNlIGNvbnRleHQgb24gdGhlIGV2ZW50LiBUaGVyZSBpcyBhIHByb2R1Y3QgZmVhdHVyZSBpbiBwbGFjZSB3aGVyZSB3ZSBsaW5rXG4gIC8vIGVycm9ycyB3aXRoIHRyYW5zYWN0aW9uIGFuZCBpdCByZWxpZXMgb24gdGhhdC5cbiAgaWYgKHNwYW4pIHtcbiAgICBhcHBseVNwYW5Ub0V2ZW50KGV2ZW50LCBzcGFuKTtcbiAgfVxuXG4gIGFwcGx5RmluZ2VycHJpbnRUb0V2ZW50KGV2ZW50LCBmaW5nZXJwcmludCk7XG4gIGFwcGx5QnJlYWRjcnVtYnNUb0V2ZW50KGV2ZW50LCBicmVhZGNydW1icyk7XG4gIGFwcGx5U2RrTWV0YWRhdGFUb0V2ZW50KGV2ZW50LCBzZGtQcm9jZXNzaW5nTWV0YWRhdGEpO1xufVxuXG4vKiogTWVyZ2UgZGF0YSBvZiB0d28gc2NvcGVzIHRvZ2V0aGVyLiAqL1xuZnVuY3Rpb24gbWVyZ2VTY29wZURhdGEoZGF0YSwgbWVyZ2VEYXRhKSB7XG4gIGNvbnN0IHtcbiAgICBleHRyYSxcbiAgICB0YWdzLFxuICAgIHVzZXIsXG4gICAgY29udGV4dHMsXG4gICAgbGV2ZWwsXG4gICAgc2RrUHJvY2Vzc2luZ01ldGFkYXRhLFxuICAgIGJyZWFkY3J1bWJzLFxuICAgIGZpbmdlcnByaW50LFxuICAgIGV2ZW50UHJvY2Vzc29ycyxcbiAgICBhdHRhY2htZW50cyxcbiAgICBwcm9wYWdhdGlvbkNvbnRleHQsXG4gICAgdHJhbnNhY3Rpb25OYW1lLFxuICAgIHNwYW4sXG4gIH0gPSBtZXJnZURhdGE7XG5cbiAgbWVyZ2VBbmRPdmVyd3JpdGVTY29wZURhdGEoZGF0YSwgJ2V4dHJhJywgZXh0cmEpO1xuICBtZXJnZUFuZE92ZXJ3cml0ZVNjb3BlRGF0YShkYXRhLCAndGFncycsIHRhZ3MpO1xuICBtZXJnZUFuZE92ZXJ3cml0ZVNjb3BlRGF0YShkYXRhLCAndXNlcicsIHVzZXIpO1xuICBtZXJnZUFuZE92ZXJ3cml0ZVNjb3BlRGF0YShkYXRhLCAnY29udGV4dHMnLCBjb250ZXh0cyk7XG5cbiAgZGF0YS5zZGtQcm9jZXNzaW5nTWV0YWRhdGEgPSBtZXJnZShkYXRhLnNka1Byb2Nlc3NpbmdNZXRhZGF0YSwgc2RrUHJvY2Vzc2luZ01ldGFkYXRhLCAyKTtcblxuICBpZiAobGV2ZWwpIHtcbiAgICBkYXRhLmxldmVsID0gbGV2ZWw7XG4gIH1cblxuICBpZiAodHJhbnNhY3Rpb25OYW1lKSB7XG4gICAgZGF0YS50cmFuc2FjdGlvbk5hbWUgPSB0cmFuc2FjdGlvbk5hbWU7XG4gIH1cblxuICBpZiAoc3Bhbikge1xuICAgIGRhdGEuc3BhbiA9IHNwYW47XG4gIH1cblxuICBpZiAoYnJlYWRjcnVtYnMubGVuZ3RoKSB7XG4gICAgZGF0YS5icmVhZGNydW1icyA9IFsuLi5kYXRhLmJyZWFkY3J1bWJzLCAuLi5icmVhZGNydW1ic107XG4gIH1cblxuICBpZiAoZmluZ2VycHJpbnQubGVuZ3RoKSB7XG4gICAgZGF0YS5maW5nZXJwcmludCA9IFsuLi5kYXRhLmZpbmdlcnByaW50LCAuLi5maW5nZXJwcmludF07XG4gIH1cblxuICBpZiAoZXZlbnRQcm9jZXNzb3JzLmxlbmd0aCkge1xuICAgIGRhdGEuZXZlbnRQcm9jZXNzb3JzID0gWy4uLmRhdGEuZXZlbnRQcm9jZXNzb3JzLCAuLi5ldmVudFByb2Nlc3NvcnNdO1xuICB9XG5cbiAgaWYgKGF0dGFjaG1lbnRzLmxlbmd0aCkge1xuICAgIGRhdGEuYXR0YWNobWVudHMgPSBbLi4uZGF0YS5hdHRhY2htZW50cywgLi4uYXR0YWNobWVudHNdO1xuICB9XG5cbiAgZGF0YS5wcm9wYWdhdGlvbkNvbnRleHQgPSB7IC4uLmRhdGEucHJvcGFnYXRpb25Db250ZXh0LCAuLi5wcm9wYWdhdGlvbkNvbnRleHQgfTtcbn1cblxuLyoqXG4gKiBNZXJnZXMgY2VydGFpbiBzY29wZSBkYXRhLiBVbmRlZmluZWQgdmFsdWVzIHdpbGwgb3ZlcndyaXRlIGFueSBleGlzdGluZyB2YWx1ZXMuXG4gKiBFeHBvcnRlZCBvbmx5IGZvciB0ZXN0cy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VBbmRPdmVyd3JpdGVTY29wZURhdGFcblxuKGRhdGEsIHByb3AsIG1lcmdlVmFsKSB7XG4gIGRhdGFbcHJvcF0gPSBtZXJnZShkYXRhW3Byb3BdLCBtZXJnZVZhbCwgMSk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5RGF0YVRvRXZlbnQoZXZlbnQsIGRhdGEpIHtcbiAgY29uc3QgeyBleHRyYSwgdGFncywgdXNlciwgY29udGV4dHMsIGxldmVsLCB0cmFuc2FjdGlvbk5hbWUgfSA9IGRhdGE7XG5cbiAgaWYgKE9iamVjdC5rZXlzKGV4dHJhKS5sZW5ndGgpIHtcbiAgICBldmVudC5leHRyYSA9IHsgLi4uZXh0cmEsIC4uLmV2ZW50LmV4dHJhIH07XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXModGFncykubGVuZ3RoKSB7XG4gICAgZXZlbnQudGFncyA9IHsgLi4udGFncywgLi4uZXZlbnQudGFncyB9O1xuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKHVzZXIpLmxlbmd0aCkge1xuICAgIGV2ZW50LnVzZXIgPSB7IC4uLnVzZXIsIC4uLmV2ZW50LnVzZXIgfTtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyhjb250ZXh0cykubGVuZ3RoKSB7XG4gICAgZXZlbnQuY29udGV4dHMgPSB7IC4uLmNvbnRleHRzLCAuLi5ldmVudC5jb250ZXh0cyB9O1xuICB9XG5cbiAgaWYgKGxldmVsKSB7XG4gICAgZXZlbnQubGV2ZWwgPSBsZXZlbDtcbiAgfVxuXG4gIC8vIHRyYW5zYWN0aW9uIGV2ZW50cyBnZXQgdGhlaXIgYHRyYW5zYWN0aW9uYCBmcm9tIHRoZSByb290IHNwYW4gbmFtZVxuICBpZiAodHJhbnNhY3Rpb25OYW1lICYmIGV2ZW50LnR5cGUgIT09ICd0cmFuc2FjdGlvbicpIHtcbiAgICBldmVudC50cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uTmFtZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseUJyZWFkY3J1bWJzVG9FdmVudChldmVudCwgYnJlYWRjcnVtYnMpIHtcbiAgY29uc3QgbWVyZ2VkQnJlYWRjcnVtYnMgPSBbLi4uKGV2ZW50LmJyZWFkY3J1bWJzIHx8IFtdKSwgLi4uYnJlYWRjcnVtYnNdO1xuICBldmVudC5icmVhZGNydW1icyA9IG1lcmdlZEJyZWFkY3J1bWJzLmxlbmd0aCA/IG1lcmdlZEJyZWFkY3J1bWJzIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBhcHBseVNka01ldGFkYXRhVG9FdmVudChldmVudCwgc2RrUHJvY2Vzc2luZ01ldGFkYXRhKSB7XG4gIGV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YSA9IHtcbiAgICAuLi5ldmVudC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEsXG4gICAgLi4uc2RrUHJvY2Vzc2luZ01ldGFkYXRhLFxuICB9O1xufVxuXG5mdW5jdGlvbiBhcHBseVNwYW5Ub0V2ZW50KGV2ZW50LCBzcGFuKSB7XG4gIGV2ZW50LmNvbnRleHRzID0ge1xuICAgIHRyYWNlOiBzcGFuVG9UcmFjZUNvbnRleHQoc3BhbiksXG4gICAgLi4uZXZlbnQuY29udGV4dHMsXG4gIH07XG5cbiAgZXZlbnQuc2RrUHJvY2Vzc2luZ01ldGFkYXRhID0ge1xuICAgIGR5bmFtaWNTYW1wbGluZ0NvbnRleHQ6IGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3BhbihzcGFuKSxcbiAgICAuLi5ldmVudC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEsXG4gIH07XG5cbiAgY29uc3Qgcm9vdFNwYW4gPSBnZXRSb290U3BhbihzcGFuKTtcbiAgY29uc3QgdHJhbnNhY3Rpb25OYW1lID0gc3BhblRvSlNPTihyb290U3BhbikuZGVzY3JpcHRpb247XG4gIGlmICh0cmFuc2FjdGlvbk5hbWUgJiYgIWV2ZW50LnRyYW5zYWN0aW9uICYmIGV2ZW50LnR5cGUgPT09ICd0cmFuc2FjdGlvbicpIHtcbiAgICBldmVudC50cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uTmFtZTtcbiAgfVxufVxuXG4vKipcbiAqIEFwcGxpZXMgZmluZ2VycHJpbnQgZnJvbSB0aGUgc2NvcGUgdG8gdGhlIGV2ZW50IGlmIHRoZXJlJ3Mgb25lLFxuICogdXNlcyBtZXNzYWdlIGlmIHRoZXJlJ3Mgb25lIGluc3RlYWQgb3IgZ2V0IHJpZCBvZiBlbXB0eSBmaW5nZXJwcmludFxuICovXG5mdW5jdGlvbiBhcHBseUZpbmdlcnByaW50VG9FdmVudChldmVudCwgZmluZ2VycHJpbnQpIHtcbiAgLy8gTWFrZSBzdXJlIGl0J3MgYW4gYXJyYXkgZmlyc3QgYW5kIHdlIGFjdHVhbGx5IGhhdmUgc29tZXRoaW5nIGluIHBsYWNlXG4gIGV2ZW50LmZpbmdlcnByaW50ID0gZXZlbnQuZmluZ2VycHJpbnRcbiAgICA/IEFycmF5LmlzQXJyYXkoZXZlbnQuZmluZ2VycHJpbnQpXG4gICAgICA/IGV2ZW50LmZpbmdlcnByaW50XG4gICAgICA6IFtldmVudC5maW5nZXJwcmludF1cbiAgICA6IFtdO1xuXG4gIC8vIElmIHdlIGhhdmUgc29tZXRoaW5nIG9uIHRoZSBzY29wZSwgdGhlbiBtZXJnZSBpdCB3aXRoIGV2ZW50XG4gIGlmIChmaW5nZXJwcmludCkge1xuICAgIGV2ZW50LmZpbmdlcnByaW50ID0gZXZlbnQuZmluZ2VycHJpbnQuY29uY2F0KGZpbmdlcnByaW50KTtcbiAgfVxuXG4gIC8vIElmIHdlIGhhdmUgbm8gZGF0YSBhdCBhbGwsIHJlbW92ZSBlbXB0eSBhcnJheSBkZWZhdWx0XG4gIGlmICghZXZlbnQuZmluZ2VycHJpbnQubGVuZ3RoKSB7XG4gICAgZGVsZXRlIGV2ZW50LmZpbmdlcnByaW50O1xuICB9XG59XG5cbmV4cG9ydCB7IGFwcGx5U2NvcGVEYXRhVG9FdmVudCwgbWVyZ2VBbmRPdmVyd3JpdGVTY29wZURhdGEsIG1lcmdlU2NvcGVEYXRhIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcHBseVNjb3BlRGF0YVRvRXZlbnQuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/applyScopeDataToEvent.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/baggage.js":
/*!*****************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/baggage.js ***!
  \*****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   MAX_BAGGAGE_STRING_LENGTH: () => (/* binding */ MAX_BAGGAGE_STRING_LENGTH),\n/* harmony export */   SENTRY_BAGGAGE_KEY_PREFIX: () => (/* binding */ SENTRY_BAGGAGE_KEY_PREFIX),\n/* harmony export */   SENTRY_BAGGAGE_KEY_PREFIX_REGEX: () => (/* binding */ SENTRY_BAGGAGE_KEY_PREFIX_REGEX),\n/* harmony export */   baggageHeaderToDynamicSamplingContext: () => (/* binding */ baggageHeaderToDynamicSamplingContext),\n/* harmony export */   dynamicSamplingContextToSentryBaggageHeader: () => (/* binding */ dynamicSamplingContextToSentryBaggageHeader),\n/* harmony export */   objectToBaggageHeader: () => (/* binding */ objectToBaggageHeader),\n/* harmony export */   parseBaggageHeader: () => (/* binding */ parseBaggageHeader)\n/* harmony export */ });\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _debug_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _is_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n\n\n\n\nconst SENTRY_BAGGAGE_KEY_PREFIX = 'sentry-';\n\nconst SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/;\n\n/**\n * Max length of a serialized baggage string\n *\n * https://www.w3.org/TR/baggage/#limits\n */\nconst MAX_BAGGAGE_STRING_LENGTH = 8192;\n\n/**\n * Takes a baggage header and turns it into Dynamic Sampling Context, by extracting all the \"sentry-\" prefixed values\n * from it.\n *\n * @param baggageHeader A very bread definition of a baggage header as it might appear in various frameworks.\n * @returns The Dynamic Sampling Context that was found on `baggageHeader`, if there was any, `undefined` otherwise.\n */\nfunction baggageHeaderToDynamicSamplingContext(\n  // Very liberal definition of what any incoming header might look like\n  baggageHeader,\n) {\n  const baggageObject = parseBaggageHeader(baggageHeader);\n\n  if (!baggageObject) {\n    return undefined;\n  }\n\n  // Read all \"sentry-\" prefixed values out of the baggage object and put it onto a dynamic sampling context object.\n  const dynamicSamplingContext = Object.entries(baggageObject).reduce((acc, [key, value]) => {\n    if (key.match(SENTRY_BAGGAGE_KEY_PREFIX_REGEX)) {\n      const nonPrefixedKey = key.slice(SENTRY_BAGGAGE_KEY_PREFIX.length);\n      acc[nonPrefixedKey] = value;\n    }\n    return acc;\n  }, {});\n\n  // Only return a dynamic sampling context object if there are keys in it.\n  // A keyless object means there were no sentry values on the header, which means that there is no DSC.\n  if (Object.keys(dynamicSamplingContext).length > 0) {\n    return dynamicSamplingContext ;\n  } else {\n    return undefined;\n  }\n}\n\n/**\n * Turns a Dynamic Sampling Object into a baggage header by prefixing all the keys on the object with \"sentry-\".\n *\n * @param dynamicSamplingContext The Dynamic Sampling Context to turn into a header. For convenience and compatibility\n * with the `getDynamicSamplingContext` method on the Transaction class ,this argument can also be `undefined`. If it is\n * `undefined` the function will return `undefined`.\n * @returns a baggage header, created from `dynamicSamplingContext`, or `undefined` either if `dynamicSamplingContext`\n * was `undefined`, or if `dynamicSamplingContext` didn't contain any values.\n */\nfunction dynamicSamplingContextToSentryBaggageHeader(\n  // this also takes undefined for convenience and bundle size in other places\n  dynamicSamplingContext,\n) {\n  if (!dynamicSamplingContext) {\n    return undefined;\n  }\n\n  // Prefix all DSC keys with \"sentry-\" and put them into a new object\n  const sentryPrefixedDSC = Object.entries(dynamicSamplingContext).reduce(\n    (acc, [dscKey, dscValue]) => {\n      if (dscValue) {\n        acc[`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`] = dscValue;\n      }\n      return acc;\n    },\n    {},\n  );\n\n  return objectToBaggageHeader(sentryPrefixedDSC);\n}\n\n/**\n * Take a baggage header and parse it into an object.\n */\nfunction parseBaggageHeader(\n  baggageHeader,\n) {\n  if (!baggageHeader || (!(0,_is_js__WEBPACK_IMPORTED_MODULE_2__.isString)(baggageHeader) && !Array.isArray(baggageHeader))) {\n    return undefined;\n  }\n\n  if (Array.isArray(baggageHeader)) {\n    // Combine all baggage headers into one object containing the baggage values so we can later read the Sentry-DSC-values from it\n    return baggageHeader.reduce((acc, curr) => {\n      const currBaggageObject = baggageHeaderToObject(curr);\n      Object.entries(currBaggageObject).forEach(([key, value]) => {\n        acc[key] = value;\n      });\n      return acc;\n    }, {});\n  }\n\n  return baggageHeaderToObject(baggageHeader);\n}\n\n/**\n * Will parse a baggage header, which is a simple key-value map, into a flat object.\n *\n * @param baggageHeader The baggage header to parse.\n * @returns a flat object containing all the key-value pairs from `baggageHeader`.\n */\nfunction baggageHeaderToObject(baggageHeader) {\n  return baggageHeader\n    .split(',')\n    .map(baggageEntry =>\n      baggageEntry.split('=').map(keyOrValue => {\n        try {\n          return decodeURIComponent(keyOrValue.trim());\n        } catch {\n          // We ignore errors here, e.g. if the value cannot be URL decoded.\n          // This will then be skipped in the next step\n          return;\n        }\n      }),\n    )\n    .reduce((acc, [key, value]) => {\n      if (key && value) {\n        acc[key] = value;\n      }\n      return acc;\n    }, {});\n}\n\n/**\n * Turns a flat object (key-value pairs) into a baggage header, which is also just key-value pairs.\n *\n * @param object The object to turn into a baggage header.\n * @returns a baggage header string, or `undefined` if the object didn't have any values, since an empty baggage header\n * is not spec compliant.\n */\nfunction objectToBaggageHeader(object) {\n  if (Object.keys(object).length === 0) {\n    // An empty baggage header is not spec compliant: We return undefined.\n    return undefined;\n  }\n\n  return Object.entries(object).reduce((baggageHeader, [objectKey, objectValue], currentIndex) => {\n    const baggageEntry = `${encodeURIComponent(objectKey)}=${encodeURIComponent(objectValue)}`;\n    const newBaggageHeader = currentIndex === 0 ? baggageEntry : `${baggageHeader},${baggageEntry}`;\n    if (newBaggageHeader.length > MAX_BAGGAGE_STRING_LENGTH) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD &&\n        _debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.warn(\n          `Not adding key: ${objectKey} with val: ${objectValue} to baggage header due to exceeding baggage size limits.`,\n        );\n      return baggageHeader;\n    } else {\n      return newBaggageHeader;\n    }\n  }, '');\n}\n\n\n//# sourceMappingURL=baggage.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2JhZ2dhZ2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFnRDtBQUNOO0FBQ1A7O0FBRW5DOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxJQUFJOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMEJBQTBCLEVBQUUsT0FBTztBQUNsRDtBQUNBO0FBQ0EsS0FBSztBQUNMLE1BQU07QUFDTjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixnREFBUTtBQUNsQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUssSUFBSTtBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEJBQTRCLDhCQUE4QixHQUFHLGdDQUFnQztBQUM3RixvRUFBb0UsY0FBYyxHQUFHLGFBQWE7QUFDbEc7QUFDQSxNQUFNLHdEQUFXO0FBQ2pCLFFBQVEsbURBQUs7QUFDYiw2QkFBNkIsV0FBVyxZQUFZLGFBQWE7QUFDakU7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVnTztBQUNoTyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2JhZ2dhZ2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4vZGVidWctbG9nZ2VyLmpzJztcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi9pcy5qcyc7XG5cbmNvbnN0IFNFTlRSWV9CQUdHQUdFX0tFWV9QUkVGSVggPSAnc2VudHJ5LSc7XG5cbmNvbnN0IFNFTlRSWV9CQUdHQUdFX0tFWV9QUkVGSVhfUkVHRVggPSAvXnNlbnRyeS0vO1xuXG4vKipcbiAqIE1heCBsZW5ndGggb2YgYSBzZXJpYWxpemVkIGJhZ2dhZ2Ugc3RyaW5nXG4gKlxuICogaHR0cHM6Ly93d3cudzMub3JnL1RSL2JhZ2dhZ2UvI2xpbWl0c1xuICovXG5jb25zdCBNQVhfQkFHR0FHRV9TVFJJTkdfTEVOR1RIID0gODE5MjtcblxuLyoqXG4gKiBUYWtlcyBhIGJhZ2dhZ2UgaGVhZGVyIGFuZCB0dXJucyBpdCBpbnRvIER5bmFtaWMgU2FtcGxpbmcgQ29udGV4dCwgYnkgZXh0cmFjdGluZyBhbGwgdGhlIFwic2VudHJ5LVwiIHByZWZpeGVkIHZhbHVlc1xuICogZnJvbSBpdC5cbiAqXG4gKiBAcGFyYW0gYmFnZ2FnZUhlYWRlciBBIHZlcnkgYnJlYWQgZGVmaW5pdGlvbiBvZiBhIGJhZ2dhZ2UgaGVhZGVyIGFzIGl0IG1pZ2h0IGFwcGVhciBpbiB2YXJpb3VzIGZyYW1ld29ya3MuXG4gKiBAcmV0dXJucyBUaGUgRHluYW1pYyBTYW1wbGluZyBDb250ZXh0IHRoYXQgd2FzIGZvdW5kIG9uIGBiYWdnYWdlSGVhZGVyYCwgaWYgdGhlcmUgd2FzIGFueSwgYHVuZGVmaW5lZGAgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBiYWdnYWdlSGVhZGVyVG9EeW5hbWljU2FtcGxpbmdDb250ZXh0KFxuICAvLyBWZXJ5IGxpYmVyYWwgZGVmaW5pdGlvbiBvZiB3aGF0IGFueSBpbmNvbWluZyBoZWFkZXIgbWlnaHQgbG9vayBsaWtlXG4gIGJhZ2dhZ2VIZWFkZXIsXG4pIHtcbiAgY29uc3QgYmFnZ2FnZU9iamVjdCA9IHBhcnNlQmFnZ2FnZUhlYWRlcihiYWdnYWdlSGVhZGVyKTtcblxuICBpZiAoIWJhZ2dhZ2VPYmplY3QpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gUmVhZCBhbGwgXCJzZW50cnktXCIgcHJlZml4ZWQgdmFsdWVzIG91dCBvZiB0aGUgYmFnZ2FnZSBvYmplY3QgYW5kIHB1dCBpdCBvbnRvIGEgZHluYW1pYyBzYW1wbGluZyBjb250ZXh0IG9iamVjdC5cbiAgY29uc3QgZHluYW1pY1NhbXBsaW5nQ29udGV4dCA9IE9iamVjdC5lbnRyaWVzKGJhZ2dhZ2VPYmplY3QpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBpZiAoa2V5Lm1hdGNoKFNFTlRSWV9CQUdHQUdFX0tFWV9QUkVGSVhfUkVHRVgpKSB7XG4gICAgICBjb25zdCBub25QcmVmaXhlZEtleSA9IGtleS5zbGljZShTRU5UUllfQkFHR0FHRV9LRVlfUFJFRklYLmxlbmd0aCk7XG4gICAgICBhY2Nbbm9uUHJlZml4ZWRLZXldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcblxuICAvLyBPbmx5IHJldHVybiBhIGR5bmFtaWMgc2FtcGxpbmcgY29udGV4dCBvYmplY3QgaWYgdGhlcmUgYXJlIGtleXMgaW4gaXQuXG4gIC8vIEEga2V5bGVzcyBvYmplY3QgbWVhbnMgdGhlcmUgd2VyZSBubyBzZW50cnkgdmFsdWVzIG9uIHRoZSBoZWFkZXIsIHdoaWNoIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8gRFNDLlxuICBpZiAoT2JqZWN0LmtleXMoZHluYW1pY1NhbXBsaW5nQ29udGV4dCkubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBkeW5hbWljU2FtcGxpbmdDb250ZXh0IDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogVHVybnMgYSBEeW5hbWljIFNhbXBsaW5nIE9iamVjdCBpbnRvIGEgYmFnZ2FnZSBoZWFkZXIgYnkgcHJlZml4aW5nIGFsbCB0aGUga2V5cyBvbiB0aGUgb2JqZWN0IHdpdGggXCJzZW50cnktXCIuXG4gKlxuICogQHBhcmFtIGR5bmFtaWNTYW1wbGluZ0NvbnRleHQgVGhlIER5bmFtaWMgU2FtcGxpbmcgQ29udGV4dCB0byB0dXJuIGludG8gYSBoZWFkZXIuIEZvciBjb252ZW5pZW5jZSBhbmQgY29tcGF0aWJpbGl0eVxuICogd2l0aCB0aGUgYGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRgIG1ldGhvZCBvbiB0aGUgVHJhbnNhY3Rpb24gY2xhc3MgLHRoaXMgYXJndW1lbnQgY2FuIGFsc28gYmUgYHVuZGVmaW5lZGAuIElmIGl0IGlzXG4gKiBgdW5kZWZpbmVkYCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gYHVuZGVmaW5lZGAuXG4gKiBAcmV0dXJucyBhIGJhZ2dhZ2UgaGVhZGVyLCBjcmVhdGVkIGZyb20gYGR5bmFtaWNTYW1wbGluZ0NvbnRleHRgLCBvciBgdW5kZWZpbmVkYCBlaXRoZXIgaWYgYGR5bmFtaWNTYW1wbGluZ0NvbnRleHRgXG4gKiB3YXMgYHVuZGVmaW5lZGAsIG9yIGlmIGBkeW5hbWljU2FtcGxpbmdDb250ZXh0YCBkaWRuJ3QgY29udGFpbiBhbnkgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBkeW5hbWljU2FtcGxpbmdDb250ZXh0VG9TZW50cnlCYWdnYWdlSGVhZGVyKFxuICAvLyB0aGlzIGFsc28gdGFrZXMgdW5kZWZpbmVkIGZvciBjb252ZW5pZW5jZSBhbmQgYnVuZGxlIHNpemUgaW4gb3RoZXIgcGxhY2VzXG4gIGR5bmFtaWNTYW1wbGluZ0NvbnRleHQsXG4pIHtcbiAgaWYgKCFkeW5hbWljU2FtcGxpbmdDb250ZXh0KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIFByZWZpeCBhbGwgRFNDIGtleXMgd2l0aCBcInNlbnRyeS1cIiBhbmQgcHV0IHRoZW0gaW50byBhIG5ldyBvYmplY3RcbiAgY29uc3Qgc2VudHJ5UHJlZml4ZWREU0MgPSBPYmplY3QuZW50cmllcyhkeW5hbWljU2FtcGxpbmdDb250ZXh0KS5yZWR1Y2UoXG4gICAgKGFjYywgW2RzY0tleSwgZHNjVmFsdWVdKSA9PiB7XG4gICAgICBpZiAoZHNjVmFsdWUpIHtcbiAgICAgICAgYWNjW2Ake1NFTlRSWV9CQUdHQUdFX0tFWV9QUkVGSVh9JHtkc2NLZXl9YF0gPSBkc2NWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSxcbiAgICB7fSxcbiAgKTtcblxuICByZXR1cm4gb2JqZWN0VG9CYWdnYWdlSGVhZGVyKHNlbnRyeVByZWZpeGVkRFNDKTtcbn1cblxuLyoqXG4gKiBUYWtlIGEgYmFnZ2FnZSBoZWFkZXIgYW5kIHBhcnNlIGl0IGludG8gYW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBwYXJzZUJhZ2dhZ2VIZWFkZXIoXG4gIGJhZ2dhZ2VIZWFkZXIsXG4pIHtcbiAgaWYgKCFiYWdnYWdlSGVhZGVyIHx8ICghaXNTdHJpbmcoYmFnZ2FnZUhlYWRlcikgJiYgIUFycmF5LmlzQXJyYXkoYmFnZ2FnZUhlYWRlcikpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGJhZ2dhZ2VIZWFkZXIpKSB7XG4gICAgLy8gQ29tYmluZSBhbGwgYmFnZ2FnZSBoZWFkZXJzIGludG8gb25lIG9iamVjdCBjb250YWluaW5nIHRoZSBiYWdnYWdlIHZhbHVlcyBzbyB3ZSBjYW4gbGF0ZXIgcmVhZCB0aGUgU2VudHJ5LURTQy12YWx1ZXMgZnJvbSBpdFxuICAgIHJldHVybiBiYWdnYWdlSGVhZGVyLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgICBjb25zdCBjdXJyQmFnZ2FnZU9iamVjdCA9IGJhZ2dhZ2VIZWFkZXJUb09iamVjdChjdXJyKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGN1cnJCYWdnYWdlT2JqZWN0KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cblxuICByZXR1cm4gYmFnZ2FnZUhlYWRlclRvT2JqZWN0KGJhZ2dhZ2VIZWFkZXIpO1xufVxuXG4vKipcbiAqIFdpbGwgcGFyc2UgYSBiYWdnYWdlIGhlYWRlciwgd2hpY2ggaXMgYSBzaW1wbGUga2V5LXZhbHVlIG1hcCwgaW50byBhIGZsYXQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBiYWdnYWdlSGVhZGVyIFRoZSBiYWdnYWdlIGhlYWRlciB0byBwYXJzZS5cbiAqIEByZXR1cm5zIGEgZmxhdCBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIGtleS12YWx1ZSBwYWlycyBmcm9tIGBiYWdnYWdlSGVhZGVyYC5cbiAqL1xuZnVuY3Rpb24gYmFnZ2FnZUhlYWRlclRvT2JqZWN0KGJhZ2dhZ2VIZWFkZXIpIHtcbiAgcmV0dXJuIGJhZ2dhZ2VIZWFkZXJcbiAgICAuc3BsaXQoJywnKVxuICAgIC5tYXAoYmFnZ2FnZUVudHJ5ID0+XG4gICAgICBiYWdnYWdlRW50cnkuc3BsaXQoJz0nKS5tYXAoa2V5T3JWYWx1ZSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChrZXlPclZhbHVlLnRyaW0oKSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIFdlIGlnbm9yZSBlcnJvcnMgaGVyZSwgZS5nLiBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIFVSTCBkZWNvZGVkLlxuICAgICAgICAgIC8vIFRoaXMgd2lsbCB0aGVuIGJlIHNraXBwZWQgaW4gdGhlIG5leHQgc3RlcFxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKVxuICAgIC5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBpZiAoa2V5ICYmIHZhbHVlKSB7XG4gICAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbn1cblxuLyoqXG4gKiBUdXJucyBhIGZsYXQgb2JqZWN0IChrZXktdmFsdWUgcGFpcnMpIGludG8gYSBiYWdnYWdlIGhlYWRlciwgd2hpY2ggaXMgYWxzbyBqdXN0IGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gdHVybiBpbnRvIGEgYmFnZ2FnZSBoZWFkZXIuXG4gKiBAcmV0dXJucyBhIGJhZ2dhZ2UgaGVhZGVyIHN0cmluZywgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIG9iamVjdCBkaWRuJ3QgaGF2ZSBhbnkgdmFsdWVzLCBzaW5jZSBhbiBlbXB0eSBiYWdnYWdlIGhlYWRlclxuICogaXMgbm90IHNwZWMgY29tcGxpYW50LlxuICovXG5mdW5jdGlvbiBvYmplY3RUb0JhZ2dhZ2VIZWFkZXIob2JqZWN0KSB7XG4gIGlmIChPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIEFuIGVtcHR5IGJhZ2dhZ2UgaGVhZGVyIGlzIG5vdCBzcGVjIGNvbXBsaWFudDogV2UgcmV0dXJuIHVuZGVmaW5lZC5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG9iamVjdCkucmVkdWNlKChiYWdnYWdlSGVhZGVyLCBbb2JqZWN0S2V5LCBvYmplY3RWYWx1ZV0sIGN1cnJlbnRJbmRleCkgPT4ge1xuICAgIGNvbnN0IGJhZ2dhZ2VFbnRyeSA9IGAke2VuY29kZVVSSUNvbXBvbmVudChvYmplY3RLZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudChvYmplY3RWYWx1ZSl9YDtcbiAgICBjb25zdCBuZXdCYWdnYWdlSGVhZGVyID0gY3VycmVudEluZGV4ID09PSAwID8gYmFnZ2FnZUVudHJ5IDogYCR7YmFnZ2FnZUhlYWRlcn0sJHtiYWdnYWdlRW50cnl9YDtcbiAgICBpZiAobmV3QmFnZ2FnZUhlYWRlci5sZW5ndGggPiBNQVhfQkFHR0FHRV9TVFJJTkdfTEVOR1RIKSB7XG4gICAgICBERUJVR19CVUlMRCAmJlxuICAgICAgICBkZWJ1Zy53YXJuKFxuICAgICAgICAgIGBOb3QgYWRkaW5nIGtleTogJHtvYmplY3RLZXl9IHdpdGggdmFsOiAke29iamVjdFZhbHVlfSB0byBiYWdnYWdlIGhlYWRlciBkdWUgdG8gZXhjZWVkaW5nIGJhZ2dhZ2Ugc2l6ZSBsaW1pdHMuYCxcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBiYWdnYWdlSGVhZGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3QmFnZ2FnZUhlYWRlcjtcbiAgICB9XG4gIH0sICcnKTtcbn1cblxuZXhwb3J0IHsgTUFYX0JBR0dBR0VfU1RSSU5HX0xFTkdUSCwgU0VOVFJZX0JBR0dBR0VfS0VZX1BSRUZJWCwgU0VOVFJZX0JBR0dBR0VfS0VZX1BSRUZJWF9SRUdFWCwgYmFnZ2FnZUhlYWRlclRvRHluYW1pY1NhbXBsaW5nQ29udGV4dCwgZHluYW1pY1NhbXBsaW5nQ29udGV4dFRvU2VudHJ5QmFnZ2FnZUhlYWRlciwgb2JqZWN0VG9CYWdnYWdlSGVhZGVyLCBwYXJzZUJhZ2dhZ2VIZWFkZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhZ2dhZ2UuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/baggage.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/breadcrumb-log-level.js":
/*!******************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/breadcrumb-log-level.js ***!
  \******************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getBreadcrumbLogLevelFromHttpStatusCode: () => (/* binding */ getBreadcrumbLogLevelFromHttpStatusCode)\n/* harmony export */ });\n/**\n * Determine a breadcrumb's log level (only `warning` or `error`) based on an HTTP status code.\n */\nfunction getBreadcrumbLogLevelFromHttpStatusCode(statusCode) {\n  // NOTE: undefined defaults to 'info' in Sentry\n  if (statusCode === undefined) {\n    return undefined;\n  } else if (statusCode >= 400 && statusCode < 500) {\n    return 'warning';\n  } else if (statusCode >= 500) {\n    return 'error';\n  } else {\n    return undefined;\n  }\n}\n\n\n//# sourceMappingURL=breadcrumb-log-level.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2JyZWFkY3J1bWItbG9nLWxldmVsLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRW1EO0FBQ25EIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvYnJlYWRjcnVtYi1sb2ctbGV2ZWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZXRlcm1pbmUgYSBicmVhZGNydW1iJ3MgbG9nIGxldmVsIChvbmx5IGB3YXJuaW5nYCBvciBgZXJyb3JgKSBiYXNlZCBvbiBhbiBIVFRQIHN0YXR1cyBjb2RlLlxuICovXG5mdW5jdGlvbiBnZXRCcmVhZGNydW1iTG9nTGV2ZWxGcm9tSHR0cFN0YXR1c0NvZGUoc3RhdHVzQ29kZSkge1xuICAvLyBOT1RFOiB1bmRlZmluZWQgZGVmYXVsdHMgdG8gJ2luZm8nIGluIFNlbnRyeVxuICBpZiAoc3RhdHVzQ29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBlbHNlIGlmIChzdGF0dXNDb2RlID49IDQwMCAmJiBzdGF0dXNDb2RlIDwgNTAwKSB7XG4gICAgcmV0dXJuICd3YXJuaW5nJztcbiAgfSBlbHNlIGlmIChzdGF0dXNDb2RlID49IDUwMCkge1xuICAgIHJldHVybiAnZXJyb3InO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IHsgZ2V0QnJlYWRjcnVtYkxvZ0xldmVsRnJvbUh0dHBTdGF0dXNDb2RlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1icmVhZGNydW1iLWxvZy1sZXZlbC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/breadcrumb-log-level.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/browser.js":
/*!*****************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/browser.js ***!
  \*****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getComponentName: () => (/* binding */ getComponentName),\n/* harmony export */   getLocationHref: () => (/* binding */ getLocationHref),\n/* harmony export */   htmlTreeAsString: () => (/* binding */ htmlTreeAsString)\n/* harmony export */ });\n/* harmony import */ var _is_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n/* harmony import */ var _worldwide_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n\n\n\nconst WINDOW = _worldwide_js__WEBPACK_IMPORTED_MODULE_1__.GLOBAL_OBJ ;\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction htmlTreeAsString(\n  elem,\n  options = {},\n) {\n  if (!elem) {\n    return '<unknown>';\n  }\n\n  // try/catch both:\n  // - accessing event.target (see getsentry/raven-js#838, #768)\n  // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n  // - can throw an exception in some circumstances.\n  try {\n    let currentElem = elem ;\n    const MAX_TRAVERSE_HEIGHT = 5;\n    const out = [];\n    let height = 0;\n    let len = 0;\n    const separator = ' > ';\n    const sepLength = separator.length;\n    let nextStr;\n    const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n    const maxStringLength = (!Array.isArray(options) && options.maxStringLength) || DEFAULT_MAX_STRING_LENGTH;\n\n    while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n      nextStr = _htmlElementAsString(currentElem, keyAttrs);\n      // bail out if\n      // - nextStr is the 'html' element\n      // - the length of the string that would be created exceeds maxStringLength\n      //   (ignore this limit if we are on the first iteration)\n      if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength)) {\n        break;\n      }\n\n      out.push(nextStr);\n\n      len += nextStr.length;\n      currentElem = currentElem.parentNode;\n    }\n\n    return out.reverse().join(separator);\n  } catch {\n    return '<unknown>';\n  }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el, keyAttrs) {\n  const elem = el\n\n;\n\n  const out = [];\n\n  if (!elem?.tagName) {\n    return '';\n  }\n\n  // @ts-expect-error WINDOW has HTMLElement\n  if (WINDOW.HTMLElement) {\n    // If using the component name annotation plugin, this value may be available on the DOM node\n    if (elem instanceof HTMLElement && elem.dataset) {\n      if (elem.dataset['sentryComponent']) {\n        return elem.dataset['sentryComponent'];\n      }\n      if (elem.dataset['sentryElement']) {\n        return elem.dataset['sentryElement'];\n      }\n    }\n  }\n\n  out.push(elem.tagName.toLowerCase());\n\n  // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n  const keyAttrPairs = keyAttrs?.length\n    ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n    : null;\n\n  if (keyAttrPairs?.length) {\n    keyAttrPairs.forEach(keyAttrPair => {\n      out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n    });\n  } else {\n    if (elem.id) {\n      out.push(`#${elem.id}`);\n    }\n\n    const className = elem.className;\n    if (className && (0,_is_js__WEBPACK_IMPORTED_MODULE_0__.isString)(className)) {\n      const classes = className.split(/\\s+/);\n      for (const c of classes) {\n        out.push(`.${c}`);\n      }\n    }\n  }\n  const allowedAttrs = ['aria-label', 'type', 'name', 'title', 'alt'];\n  for (const k of allowedAttrs) {\n    const attr = elem.getAttribute(k);\n    if (attr) {\n      out.push(`[${k}=\"${attr}\"]`);\n    }\n  }\n\n  return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nfunction getLocationHref() {\n  try {\n    return WINDOW.document.location.href;\n  } catch {\n    return '';\n  }\n}\n\n/**\n * Given a DOM element, traverses up the tree until it finds the first ancestor node\n * that has the `data-sentry-component` or `data-sentry-element` attribute with `data-sentry-component` taking\n * precedence. This attribute is added at build-time by projects that have the component name annotation plugin installed.\n *\n * @returns a string representation of the component for the provided DOM element, or `null` if not found\n */\nfunction getComponentName(elem) {\n  // @ts-expect-error WINDOW has HTMLElement\n  if (!WINDOW.HTMLElement) {\n    return null;\n  }\n\n  let currentElem = elem ;\n  const MAX_TRAVERSE_HEIGHT = 5;\n  for (let i = 0; i < MAX_TRAVERSE_HEIGHT; i++) {\n    if (!currentElem) {\n      return null;\n    }\n\n    if (currentElem instanceof HTMLElement) {\n      if (currentElem.dataset['sentryComponent']) {\n        return currentElem.dataset['sentryComponent'];\n      }\n      if (currentElem.dataset['sentryElement']) {\n        return currentElem.dataset['sentryElement'];\n      }\n    }\n\n    currentElem = currentElem.parentNode;\n  }\n\n  return null;\n}\n\n\n//# sourceMappingURL=browser.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2Jyb3dzZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBbUM7QUFDUzs7QUFFNUMsZUFBZSxxREFBVTs7QUFFekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLGVBQWUsSUFBSSxlQUFlO0FBQ3JELEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjs7QUFFQTtBQUNBLHFCQUFxQixnREFBUTtBQUM3QjtBQUNBO0FBQ0EscUJBQXFCLEVBQUU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsRUFBRSxJQUFJLEtBQUs7QUFDOUI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0IseUJBQXlCO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFK0Q7QUFDL0QiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS91dGlscy9icm93c2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi9pcy5qcyc7XG5pbXBvcnQgeyBHTE9CQUxfT0JKIH0gZnJvbSAnLi93b3JsZHdpZGUuanMnO1xuXG5jb25zdCBXSU5ET1cgPSBHTE9CQUxfT0JKIDtcblxuY29uc3QgREVGQVVMVF9NQVhfU1RSSU5HX0xFTkdUSCA9IDgwO1xuXG4vKipcbiAqIEdpdmVuIGEgY2hpbGQgRE9NIGVsZW1lbnQsIHJldHVybnMgYSBxdWVyeS1zZWxlY3RvciBzdGF0ZW1lbnQgZGVzY3JpYmluZyB0aGF0XG4gKiBhbmQgaXRzIGFuY2VzdG9yc1xuICogZS5nLiBbSFRNTEVsZW1lbnRdID0+IGJvZHkgPiBkaXYgPiBpbnB1dCNmb28uYnRuW25hbWU9YmF6XVxuICogQHJldHVybnMgZ2VuZXJhdGVkIERPTSBwYXRoXG4gKi9cbmZ1bmN0aW9uIGh0bWxUcmVlQXNTdHJpbmcoXG4gIGVsZW0sXG4gIG9wdGlvbnMgPSB7fSxcbikge1xuICBpZiAoIWVsZW0pIHtcbiAgICByZXR1cm4gJzx1bmtub3duPic7XG4gIH1cblxuICAvLyB0cnkvY2F0Y2ggYm90aDpcbiAgLy8gLSBhY2Nlc3NpbmcgZXZlbnQudGFyZ2V0IChzZWUgZ2V0c2VudHJ5L3JhdmVuLWpzIzgzOCwgIzc2OClcbiAgLy8gLSBgaHRtbFRyZWVBc1N0cmluZ2AgYmVjYXVzZSBpdCdzIGNvbXBsZXgsIGFuZCBqdXN0IGFjY2Vzc2luZyB0aGUgRE9NIGluY29ycmVjdGx5XG4gIC8vIC0gY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMuXG4gIHRyeSB7XG4gICAgbGV0IGN1cnJlbnRFbGVtID0gZWxlbSA7XG4gICAgY29uc3QgTUFYX1RSQVZFUlNFX0hFSUdIVCA9IDU7XG4gICAgY29uc3Qgb3V0ID0gW107XG4gICAgbGV0IGhlaWdodCA9IDA7XG4gICAgbGV0IGxlbiA9IDA7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gJyA+ICc7XG4gICAgY29uc3Qgc2VwTGVuZ3RoID0gc2VwYXJhdG9yLmxlbmd0aDtcbiAgICBsZXQgbmV4dFN0cjtcbiAgICBjb25zdCBrZXlBdHRycyA9IEFycmF5LmlzQXJyYXkob3B0aW9ucykgPyBvcHRpb25zIDogb3B0aW9ucy5rZXlBdHRycztcbiAgICBjb25zdCBtYXhTdHJpbmdMZW5ndGggPSAoIUFycmF5LmlzQXJyYXkob3B0aW9ucykgJiYgb3B0aW9ucy5tYXhTdHJpbmdMZW5ndGgpIHx8IERFRkFVTFRfTUFYX1NUUklOR19MRU5HVEg7XG5cbiAgICB3aGlsZSAoY3VycmVudEVsZW0gJiYgaGVpZ2h0KysgPCBNQVhfVFJBVkVSU0VfSEVJR0hUKSB7XG4gICAgICBuZXh0U3RyID0gX2h0bWxFbGVtZW50QXNTdHJpbmcoY3VycmVudEVsZW0sIGtleUF0dHJzKTtcbiAgICAgIC8vIGJhaWwgb3V0IGlmXG4gICAgICAvLyAtIG5leHRTdHIgaXMgdGhlICdodG1sJyBlbGVtZW50XG4gICAgICAvLyAtIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyB0aGF0IHdvdWxkIGJlIGNyZWF0ZWQgZXhjZWVkcyBtYXhTdHJpbmdMZW5ndGhcbiAgICAgIC8vICAgKGlnbm9yZSB0aGlzIGxpbWl0IGlmIHdlIGFyZSBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uKVxuICAgICAgaWYgKG5leHRTdHIgPT09ICdodG1sJyB8fCAoaGVpZ2h0ID4gMSAmJiBsZW4gKyBvdXQubGVuZ3RoICogc2VwTGVuZ3RoICsgbmV4dFN0ci5sZW5ndGggPj0gbWF4U3RyaW5nTGVuZ3RoKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgb3V0LnB1c2gobmV4dFN0cik7XG5cbiAgICAgIGxlbiArPSBuZXh0U3RyLmxlbmd0aDtcbiAgICAgIGN1cnJlbnRFbGVtID0gY3VycmVudEVsZW0ucGFyZW50Tm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0LnJldmVyc2UoKS5qb2luKHNlcGFyYXRvcik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnPHVua25vd24+JztcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYSBzaW1wbGUsIHF1ZXJ5LXNlbGVjdG9yIHJlcHJlc2VudGF0aW9uIG9mIGEgRE9NIGVsZW1lbnRcbiAqIGUuZy4gW0hUTUxFbGVtZW50XSA9PiBpbnB1dCNmb28uYnRuW25hbWU9YmF6XVxuICogQHJldHVybnMgZ2VuZXJhdGVkIERPTSBwYXRoXG4gKi9cbmZ1bmN0aW9uIF9odG1sRWxlbWVudEFzU3RyaW5nKGVsLCBrZXlBdHRycykge1xuICBjb25zdCBlbGVtID0gZWxcblxuO1xuXG4gIGNvbnN0IG91dCA9IFtdO1xuXG4gIGlmICghZWxlbT8udGFnTmFtZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgV0lORE9XIGhhcyBIVE1MRWxlbWVudFxuICBpZiAoV0lORE9XLkhUTUxFbGVtZW50KSB7XG4gICAgLy8gSWYgdXNpbmcgdGhlIGNvbXBvbmVudCBuYW1lIGFubm90YXRpb24gcGx1Z2luLCB0aGlzIHZhbHVlIG1heSBiZSBhdmFpbGFibGUgb24gdGhlIERPTSBub2RlXG4gICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbGVtLmRhdGFzZXQpIHtcbiAgICAgIGlmIChlbGVtLmRhdGFzZXRbJ3NlbnRyeUNvbXBvbmVudCddKSB7XG4gICAgICAgIHJldHVybiBlbGVtLmRhdGFzZXRbJ3NlbnRyeUNvbXBvbmVudCddO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW0uZGF0YXNldFsnc2VudHJ5RWxlbWVudCddKSB7XG4gICAgICAgIHJldHVybiBlbGVtLmRhdGFzZXRbJ3NlbnRyeUVsZW1lbnQnXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvdXQucHVzaChlbGVtLnRhZ05hbWUudG9Mb3dlckNhc2UoKSk7XG5cbiAgLy8gUGFpcnMgb2YgYXR0cmlidXRlIGtleXMgZGVmaW5lZCBpbiBgc2VyaWFsaXplQXR0cmlidXRlYCBhbmQgdGhlaXIgdmFsdWVzIG9uIGVsZW1lbnQuXG4gIGNvbnN0IGtleUF0dHJQYWlycyA9IGtleUF0dHJzPy5sZW5ndGhcbiAgICA/IGtleUF0dHJzLmZpbHRlcihrZXlBdHRyID0+IGVsZW0uZ2V0QXR0cmlidXRlKGtleUF0dHIpKS5tYXAoa2V5QXR0ciA9PiBba2V5QXR0ciwgZWxlbS5nZXRBdHRyaWJ1dGUoa2V5QXR0cildKVxuICAgIDogbnVsbDtcblxuICBpZiAoa2V5QXR0clBhaXJzPy5sZW5ndGgpIHtcbiAgICBrZXlBdHRyUGFpcnMuZm9yRWFjaChrZXlBdHRyUGFpciA9PiB7XG4gICAgICBvdXQucHVzaChgWyR7a2V5QXR0clBhaXJbMF19PVwiJHtrZXlBdHRyUGFpclsxXX1cIl1gKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoZWxlbS5pZCkge1xuICAgICAgb3V0LnB1c2goYCMke2VsZW0uaWR9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWU7XG4gICAgaWYgKGNsYXNzTmFtZSAmJiBpc1N0cmluZyhjbGFzc05hbWUpKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NOYW1lLnNwbGl0KC9cXHMrLyk7XG4gICAgICBmb3IgKGNvbnN0IGMgb2YgY2xhc3Nlcykge1xuICAgICAgICBvdXQucHVzaChgLiR7Y31gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgYWxsb3dlZEF0dHJzID0gWydhcmlhLWxhYmVsJywgJ3R5cGUnLCAnbmFtZScsICd0aXRsZScsICdhbHQnXTtcbiAgZm9yIChjb25zdCBrIG9mIGFsbG93ZWRBdHRycykge1xuICAgIGNvbnN0IGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZShrKTtcbiAgICBpZiAoYXR0cikge1xuICAgICAgb3V0LnB1c2goYFske2t9PVwiJHthdHRyfVwiXWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXQuam9pbignJyk7XG59XG5cbi8qKlxuICogQSBzYWZlIGZvcm0gb2YgbG9jYXRpb24uaHJlZlxuICovXG5mdW5jdGlvbiBnZXRMb2NhdGlvbkhyZWYoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIFdJTkRPVy5kb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhIERPTSBlbGVtZW50LCB0cmF2ZXJzZXMgdXAgdGhlIHRyZWUgdW50aWwgaXQgZmluZHMgdGhlIGZpcnN0IGFuY2VzdG9yIG5vZGVcbiAqIHRoYXQgaGFzIHRoZSBgZGF0YS1zZW50cnktY29tcG9uZW50YCBvciBgZGF0YS1zZW50cnktZWxlbWVudGAgYXR0cmlidXRlIHdpdGggYGRhdGEtc2VudHJ5LWNvbXBvbmVudGAgdGFraW5nXG4gKiBwcmVjZWRlbmNlLiBUaGlzIGF0dHJpYnV0ZSBpcyBhZGRlZCBhdCBidWlsZC10aW1lIGJ5IHByb2plY3RzIHRoYXQgaGF2ZSB0aGUgY29tcG9uZW50IG5hbWUgYW5ub3RhdGlvbiBwbHVnaW4gaW5zdGFsbGVkLlxuICpcbiAqIEByZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21wb25lbnQgZm9yIHRoZSBwcm92aWRlZCBET00gZWxlbWVudCwgb3IgYG51bGxgIGlmIG5vdCBmb3VuZFxuICovXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKGVsZW0pIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBXSU5ET1cgaGFzIEhUTUxFbGVtZW50XG4gIGlmICghV0lORE9XLkhUTUxFbGVtZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgY3VycmVudEVsZW0gPSBlbGVtIDtcbiAgY29uc3QgTUFYX1RSQVZFUlNFX0hFSUdIVCA9IDU7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTUFYX1RSQVZFUlNFX0hFSUdIVDsgaSsrKSB7XG4gICAgaWYgKCFjdXJyZW50RWxlbSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRFbGVtIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIGlmIChjdXJyZW50RWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXSkge1xuICAgICAgICByZXR1cm4gY3VycmVudEVsZW0uZGF0YXNldFsnc2VudHJ5Q29tcG9uZW50J107XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudEVsZW0uZGF0YXNldFsnc2VudHJ5RWxlbWVudCddKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50RWxlbS5kYXRhc2V0WydzZW50cnlFbGVtZW50J107XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3VycmVudEVsZW0gPSBjdXJyZW50RWxlbS5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCB7IGdldENvbXBvbmVudE5hbWUsIGdldExvY2F0aW9uSHJlZiwgaHRtbFRyZWVBc1N0cmluZyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnJvd3Nlci5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/browser.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/clientreport.js":
/*!**********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/clientreport.js ***!
  \**********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   createClientReportEnvelope: () => (/* binding */ createClientReportEnvelope)\n/* harmony export */ });\n/* harmony import */ var _envelope_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./envelope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/envelope.js\");\n/* harmony import */ var _time_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./time.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/time.js\");\n\n\n\n/**\n * Creates client report envelope\n * @param discarded_events An array of discard events\n * @param dsn A DSN that can be set on the header. Optional.\n */\nfunction createClientReportEnvelope(\n  discarded_events,\n  dsn,\n  timestamp,\n) {\n  const clientReportItem = [\n    { type: 'client_report' },\n    {\n      timestamp: timestamp || (0,_time_js__WEBPACK_IMPORTED_MODULE_1__.dateTimestampInSeconds)(),\n      discarded_events,\n    },\n  ];\n  return (0,_envelope_js__WEBPACK_IMPORTED_MODULE_0__.createEnvelope)(dsn ? { dsn } : {}, [clientReportItem]);\n}\n\n\n//# sourceMappingURL=clientreport.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2NsaWVudHJlcG9ydC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBK0M7QUFDSTs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sdUJBQXVCO0FBQzdCO0FBQ0EsOEJBQThCLGdFQUFzQjtBQUNwRDtBQUNBLEtBQUs7QUFDTDtBQUNBLFNBQVMsNERBQWMsU0FBUyxNQUFNLElBQUk7QUFDMUM7O0FBRXNDO0FBQ3RDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvY2xpZW50cmVwb3J0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUVudmVsb3BlIH0gZnJvbSAnLi9lbnZlbG9wZS5qcyc7XG5pbXBvcnQgeyBkYXRlVGltZXN0YW1wSW5TZWNvbmRzIH0gZnJvbSAnLi90aW1lLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGNsaWVudCByZXBvcnQgZW52ZWxvcGVcbiAqIEBwYXJhbSBkaXNjYXJkZWRfZXZlbnRzIEFuIGFycmF5IG9mIGRpc2NhcmQgZXZlbnRzXG4gKiBAcGFyYW0gZHNuIEEgRFNOIHRoYXQgY2FuIGJlIHNldCBvbiB0aGUgaGVhZGVyLiBPcHRpb25hbC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2xpZW50UmVwb3J0RW52ZWxvcGUoXG4gIGRpc2NhcmRlZF9ldmVudHMsXG4gIGRzbixcbiAgdGltZXN0YW1wLFxuKSB7XG4gIGNvbnN0IGNsaWVudFJlcG9ydEl0ZW0gPSBbXG4gICAgeyB0eXBlOiAnY2xpZW50X3JlcG9ydCcgfSxcbiAgICB7XG4gICAgICB0aW1lc3RhbXA6IHRpbWVzdGFtcCB8fCBkYXRlVGltZXN0YW1wSW5TZWNvbmRzKCksXG4gICAgICBkaXNjYXJkZWRfZXZlbnRzLFxuICAgIH0sXG4gIF07XG4gIHJldHVybiBjcmVhdGVFbnZlbG9wZShkc24gPyB7IGRzbiB9IDoge30sIFtjbGllbnRSZXBvcnRJdGVtXSk7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZUNsaWVudFJlcG9ydEVudmVsb3BlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jbGllbnRyZXBvcnQuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/clientreport.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/cookie.js":
/*!****************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/cookie.js ***!
  \****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   parseCookie: () => (/* binding */ parseCookie)\n/* harmony export */ });\n/**\n * This code was originally copied from the 'cookie` module at v0.5.0 and was simplified for our use case.\n * https://github.com/jshttp/cookie/blob/a0c84147aab6266bdb3996cf4062e93907c0b0fc/index.js\n * It had the following license:\n *\n * (The MIT License)\n *\n * Copyright (c) 2012-2014 Roman Shtylman <shtylman@gmail.com>\n * Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * 'Software'), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/**\n * Parses a cookie string\n */\nfunction parseCookie(str) {\n  const obj = {};\n  let index = 0;\n\n  while (index < str.length) {\n    const eqIdx = str.indexOf('=', index);\n\n    // no more cookie pairs\n    if (eqIdx === -1) {\n      break;\n    }\n\n    let endIdx = str.indexOf(';', index);\n\n    if (endIdx === -1) {\n      endIdx = str.length;\n    } else if (endIdx < eqIdx) {\n      // backtrack on prior semicolon\n      index = str.lastIndexOf(';', eqIdx - 1) + 1;\n      continue;\n    }\n\n    const key = str.slice(index, eqIdx).trim();\n\n    // only assign once\n    if (undefined === obj[key]) {\n      let val = str.slice(eqIdx + 1, endIdx).trim();\n\n      // quoted values\n      if (val.charCodeAt(0) === 0x22) {\n        val = val.slice(1, -1);\n      }\n\n      try {\n        obj[key] = val.indexOf('%') !== -1 ? decodeURIComponent(val) : val;\n      } catch {\n        obj[key] = val;\n      }\n    }\n\n    index = endIdx + 1;\n  }\n\n  return obj;\n}\n\n\n//# sourceMappingURL=cookie.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2Nvb2tpZS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0I7O0FBRS9CO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUV1QjtBQUN2QiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2Nvb2tpZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgY29kZSB3YXMgb3JpZ2luYWxseSBjb3BpZWQgZnJvbSB0aGUgJ2Nvb2tpZWAgbW9kdWxlIGF0IHYwLjUuMCBhbmQgd2FzIHNpbXBsaWZpZWQgZm9yIG91ciB1c2UgY2FzZS5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qc2h0dHAvY29va2llL2Jsb2IvYTBjODQxNDdhYWI2MjY2YmRiMzk5NmNmNDA2MmU5MzkwN2MwYjBmYy9pbmRleC5qc1xuICogSXQgaGFkIHRoZSBmb2xsb3dpbmcgbGljZW5zZTpcbiAqXG4gKiAoVGhlIE1JVCBMaWNlbnNlKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IFJvbWFuIFNodHlsbWFuIDxzaHR5bG1hbkBnbWFpbC5jb20+XG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb24gPGRvdWdAc29tZXRoaW5nZG91Zy5jb20+XG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXG4gKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbiAqICdTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbiAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbiAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0b1xuICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvXG4gKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmVcbiAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAnQVMgSVMnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELFxuICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4gKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuXG4gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWVxuICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCxcbiAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFXG4gKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiAqL1xuXG4vKipcbiAqIFBhcnNlcyBhIGNvb2tpZSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gcGFyc2VDb29raWUoc3RyKSB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuICBsZXQgaW5kZXggPSAwO1xuXG4gIHdoaWxlIChpbmRleCA8IHN0ci5sZW5ndGgpIHtcbiAgICBjb25zdCBlcUlkeCA9IHN0ci5pbmRleE9mKCc9JywgaW5kZXgpO1xuXG4gICAgLy8gbm8gbW9yZSBjb29raWUgcGFpcnNcbiAgICBpZiAoZXFJZHggPT09IC0xKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsZXQgZW5kSWR4ID0gc3RyLmluZGV4T2YoJzsnLCBpbmRleCk7XG5cbiAgICBpZiAoZW5kSWR4ID09PSAtMSkge1xuICAgICAgZW5kSWR4ID0gc3RyLmxlbmd0aDtcbiAgICB9IGVsc2UgaWYgKGVuZElkeCA8IGVxSWR4KSB7XG4gICAgICAvLyBiYWNrdHJhY2sgb24gcHJpb3Igc2VtaWNvbG9uXG4gICAgICBpbmRleCA9IHN0ci5sYXN0SW5kZXhPZignOycsIGVxSWR4IC0gMSkgKyAxO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gc3RyLnNsaWNlKGluZGV4LCBlcUlkeCkudHJpbSgpO1xuXG4gICAgLy8gb25seSBhc3NpZ24gb25jZVxuICAgIGlmICh1bmRlZmluZWQgPT09IG9ialtrZXldKSB7XG4gICAgICBsZXQgdmFsID0gc3RyLnNsaWNlKGVxSWR4ICsgMSwgZW5kSWR4KS50cmltKCk7XG5cbiAgICAgIC8vIHF1b3RlZCB2YWx1ZXNcbiAgICAgIGlmICh2YWwuY2hhckNvZGVBdCgwKSA9PT0gMHgyMikge1xuICAgICAgICB2YWwgPSB2YWwuc2xpY2UoMSwgLTEpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBvYmpba2V5XSA9IHZhbC5pbmRleE9mKCclJykgIT09IC0xID8gZGVjb2RlVVJJQ29tcG9uZW50KHZhbCkgOiB2YWw7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgb2JqW2tleV0gPSB2YWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5kZXggPSBlbmRJZHggKyAxO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZXhwb3J0IHsgcGFyc2VDb29raWUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvb2tpZS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/cookie.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debounce.js":
/*!******************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debounce.js ***!
  \******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   debounce: () => (/* binding */ debounce)\n/* harmony export */ });\n/**\n * Heavily simplified debounce function based on lodash.debounce.\n *\n * This function takes a callback function (@param fun) and delays its invocation\n * by @param wait milliseconds. Optionally, a maxWait can be specified in @param options,\n * which ensures that the callback is invoked at least once after the specified max. wait time.\n *\n * @param func the function whose invocation is to be debounced\n * @param wait the minimum time until the function is invoked after it was called once\n * @param options the options object, which can contain the `maxWait` property\n *\n * @returns the debounced version of the function, which needs to be called at least once to start the\n *          debouncing process. Subsequent calls will reset the debouncing timer and, in case @paramfunc\n *          was already invoked in the meantime, return @param func's return value.\n *          The debounced function has two additional properties:\n *          - `flush`: Invokes the debounced function immediately and returns its return value\n *          - `cancel`: Cancels the debouncing process and resets the debouncing timer\n */\nfunction debounce(func, wait, options) {\n  let callbackReturnValue;\n\n  let timerId;\n  let maxTimerId;\n\n  const maxWait = options?.maxWait ? Math.max(options.maxWait, wait) : 0;\n  const setTimeoutImpl = options?.setTimeoutImpl || setTimeout;\n\n  function invokeFunc() {\n    cancelTimers();\n    callbackReturnValue = func();\n    return callbackReturnValue;\n  }\n\n  function cancelTimers() {\n    timerId !== undefined && clearTimeout(timerId);\n    maxTimerId !== undefined && clearTimeout(maxTimerId);\n    timerId = maxTimerId = undefined;\n  }\n\n  function flush() {\n    if (timerId !== undefined || maxTimerId !== undefined) {\n      return invokeFunc();\n    }\n    return callbackReturnValue;\n  }\n\n  function debounced() {\n    if (timerId) {\n      clearTimeout(timerId);\n    }\n    timerId = setTimeoutImpl(invokeFunc, wait);\n\n    if (maxWait && maxTimerId === undefined) {\n      maxTimerId = setTimeoutImpl(invokeFunc, maxWait);\n    }\n\n    return callbackReturnValue;\n  }\n\n  debounced.cancel = cancelTimers;\n  debounced.flush = flush;\n  return debounced;\n}\n\n\n//# sourceMappingURL=debounce.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2RlYm91bmNlLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRW9CO0FBQ3BCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvZGVib3VuY2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIZWF2aWx5IHNpbXBsaWZpZWQgZGVib3VuY2UgZnVuY3Rpb24gYmFzZWQgb24gbG9kYXNoLmRlYm91bmNlLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBjYWxsYmFjayBmdW5jdGlvbiAoQHBhcmFtIGZ1bikgYW5kIGRlbGF5cyBpdHMgaW52b2NhdGlvblxuICogYnkgQHBhcmFtIHdhaXQgbWlsbGlzZWNvbmRzLiBPcHRpb25hbGx5LCBhIG1heFdhaXQgY2FuIGJlIHNwZWNpZmllZCBpbiBAcGFyYW0gb3B0aW9ucyxcbiAqIHdoaWNoIGVuc3VyZXMgdGhhdCB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZCBhdCBsZWFzdCBvbmNlIGFmdGVyIHRoZSBzcGVjaWZpZWQgbWF4LiB3YWl0IHRpbWUuXG4gKlxuICogQHBhcmFtIGZ1bmMgdGhlIGZ1bmN0aW9uIHdob3NlIGludm9jYXRpb24gaXMgdG8gYmUgZGVib3VuY2VkXG4gKiBAcGFyYW0gd2FpdCB0aGUgbWluaW11bSB0aW1lIHVudGlsIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkIGFmdGVyIGl0IHdhcyBjYWxsZWQgb25jZVxuICogQHBhcmFtIG9wdGlvbnMgdGhlIG9wdGlvbnMgb2JqZWN0LCB3aGljaCBjYW4gY29udGFpbiB0aGUgYG1heFdhaXRgIHByb3BlcnR5XG4gKlxuICogQHJldHVybnMgdGhlIGRlYm91bmNlZCB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiwgd2hpY2ggbmVlZHMgdG8gYmUgY2FsbGVkIGF0IGxlYXN0IG9uY2UgdG8gc3RhcnQgdGhlXG4gKiAgICAgICAgICBkZWJvdW5jaW5nIHByb2Nlc3MuIFN1YnNlcXVlbnQgY2FsbHMgd2lsbCByZXNldCB0aGUgZGVib3VuY2luZyB0aW1lciBhbmQsIGluIGNhc2UgQHBhcmFtZnVuY1xuICogICAgICAgICAgd2FzIGFscmVhZHkgaW52b2tlZCBpbiB0aGUgbWVhbnRpbWUsIHJldHVybiBAcGFyYW0gZnVuYydzIHJldHVybiB2YWx1ZS5cbiAqICAgICAgICAgIFRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gaGFzIHR3byBhZGRpdGlvbmFsIHByb3BlcnRpZXM6XG4gKiAgICAgICAgICAtIGBmbHVzaGA6IEludm9rZXMgdGhlIGRlYm91bmNlZCBmdW5jdGlvbiBpbW1lZGlhdGVseSBhbmQgcmV0dXJucyBpdHMgcmV0dXJuIHZhbHVlXG4gKiAgICAgICAgICAtIGBjYW5jZWxgOiBDYW5jZWxzIHRoZSBkZWJvdW5jaW5nIHByb2Nlc3MgYW5kIHJlc2V0cyB0aGUgZGVib3VuY2luZyB0aW1lclxuICovXG5mdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gIGxldCBjYWxsYmFja1JldHVyblZhbHVlO1xuXG4gIGxldCB0aW1lcklkO1xuICBsZXQgbWF4VGltZXJJZDtcblxuICBjb25zdCBtYXhXYWl0ID0gb3B0aW9ucz8ubWF4V2FpdCA/IE1hdGgubWF4KG9wdGlvbnMubWF4V2FpdCwgd2FpdCkgOiAwO1xuICBjb25zdCBzZXRUaW1lb3V0SW1wbCA9IG9wdGlvbnM/LnNldFRpbWVvdXRJbXBsIHx8IHNldFRpbWVvdXQ7XG5cbiAgZnVuY3Rpb24gaW52b2tlRnVuYygpIHtcbiAgICBjYW5jZWxUaW1lcnMoKTtcbiAgICBjYWxsYmFja1JldHVyblZhbHVlID0gZnVuYygpO1xuICAgIHJldHVybiBjYWxsYmFja1JldHVyblZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsVGltZXJzKCkge1xuICAgIHRpbWVySWQgIT09IHVuZGVmaW5lZCAmJiBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgbWF4VGltZXJJZCAhPT0gdW5kZWZpbmVkICYmIGNsZWFyVGltZW91dChtYXhUaW1lcklkKTtcbiAgICB0aW1lcklkID0gbWF4VGltZXJJZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIGlmICh0aW1lcklkICE9PSB1bmRlZmluZWQgfHwgbWF4VGltZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gaW52b2tlRnVuYygpO1xuICAgIH1cbiAgICByZXR1cm4gY2FsbGJhY2tSZXR1cm5WYWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlYm91bmNlZCgpIHtcbiAgICBpZiAodGltZXJJZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgIH1cbiAgICB0aW1lcklkID0gc2V0VGltZW91dEltcGwoaW52b2tlRnVuYywgd2FpdCk7XG5cbiAgICBpZiAobWF4V2FpdCAmJiBtYXhUaW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1heFRpbWVySWQgPSBzZXRUaW1lb3V0SW1wbChpbnZva2VGdW5jLCBtYXhXYWl0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FsbGJhY2tSZXR1cm5WYWx1ZTtcbiAgfVxuXG4gIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWxUaW1lcnM7XG4gIGRlYm91bmNlZC5mbHVzaCA9IGZsdXNoO1xuICByZXR1cm4gZGVib3VuY2VkO1xufVxuXG5leHBvcnQgeyBkZWJvdW5jZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVib3VuY2UuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debounce.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-ids.js":
/*!*******************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-ids.js ***!
  \*******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getDebugImagesForResources: () => (/* binding */ getDebugImagesForResources),\n/* harmony export */   getFilenameToDebugIdMap: () => (/* binding */ getFilenameToDebugIdMap)\n/* harmony export */ });\n/* harmony import */ var _worldwide_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n\n\nlet parsedStackResults;\nlet lastKeysCount;\nlet cachedFilenameDebugIds;\n\n/**\n * Returns a map of filenames to debug identifiers.\n */\nfunction getFilenameToDebugIdMap(stackParser) {\n  const debugIdMap = _worldwide_js__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ._sentryDebugIds;\n  if (!debugIdMap) {\n    return {};\n  }\n\n  const debugIdKeys = Object.keys(debugIdMap);\n\n  // If the count of registered globals hasn't changed since the last call, we\n  // can just return the cached result.\n  if (cachedFilenameDebugIds && debugIdKeys.length === lastKeysCount) {\n    return cachedFilenameDebugIds;\n  }\n\n  lastKeysCount = debugIdKeys.length;\n\n  // Build a map of filename -> debug_id.\n  cachedFilenameDebugIds = debugIdKeys.reduce((acc, stackKey) => {\n    if (!parsedStackResults) {\n      parsedStackResults = {};\n    }\n\n    const result = parsedStackResults[stackKey];\n\n    if (result) {\n      acc[result[0]] = result[1];\n    } else {\n      const parsedStack = stackParser(stackKey);\n\n      for (let i = parsedStack.length - 1; i >= 0; i--) {\n        const stackFrame = parsedStack[i];\n        const filename = stackFrame?.filename;\n        const debugId = debugIdMap[stackKey];\n\n        if (filename && debugId) {\n          acc[filename] = debugId;\n          parsedStackResults[stackKey] = [filename, debugId];\n          break;\n        }\n      }\n    }\n\n    return acc;\n  }, {});\n\n  return cachedFilenameDebugIds;\n}\n\n/**\n * Returns a list of debug images for the given resources.\n */\nfunction getDebugImagesForResources(\n  stackParser,\n  resource_paths,\n) {\n  const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n\n  if (!filenameDebugIdMap) {\n    return [];\n  }\n\n  const images = [];\n  for (const path of resource_paths) {\n    if (path && filenameDebugIdMap[path]) {\n      images.push({\n        type: 'sourcemap',\n        code_file: path,\n        debug_id: filenameDebugIdMap[path] ,\n      });\n    }\n  }\n\n  return images;\n}\n\n\n//# sourceMappingURL=debug-ids.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2RlYnVnLWlkcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBNEM7O0FBRTVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixxREFBVTtBQUMvQjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUEsMkNBQTJDLFFBQVE7QUFDbkQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRyxJQUFJOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUUrRDtBQUMvRCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2RlYnVnLWlkcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHTE9CQUxfT0JKIH0gZnJvbSAnLi93b3JsZHdpZGUuanMnO1xuXG5sZXQgcGFyc2VkU3RhY2tSZXN1bHRzO1xubGV0IGxhc3RLZXlzQ291bnQ7XG5sZXQgY2FjaGVkRmlsZW5hbWVEZWJ1Z0lkcztcblxuLyoqXG4gKiBSZXR1cm5zIGEgbWFwIG9mIGZpbGVuYW1lcyB0byBkZWJ1ZyBpZGVudGlmaWVycy5cbiAqL1xuZnVuY3Rpb24gZ2V0RmlsZW5hbWVUb0RlYnVnSWRNYXAoc3RhY2tQYXJzZXIpIHtcbiAgY29uc3QgZGVidWdJZE1hcCA9IEdMT0JBTF9PQkouX3NlbnRyeURlYnVnSWRzO1xuICBpZiAoIWRlYnVnSWRNYXApIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBkZWJ1Z0lkS2V5cyA9IE9iamVjdC5rZXlzKGRlYnVnSWRNYXApO1xuXG4gIC8vIElmIHRoZSBjb3VudCBvZiByZWdpc3RlcmVkIGdsb2JhbHMgaGFzbid0IGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY2FsbCwgd2VcbiAgLy8gY2FuIGp1c3QgcmV0dXJuIHRoZSBjYWNoZWQgcmVzdWx0LlxuICBpZiAoY2FjaGVkRmlsZW5hbWVEZWJ1Z0lkcyAmJiBkZWJ1Z0lkS2V5cy5sZW5ndGggPT09IGxhc3RLZXlzQ291bnQpIHtcbiAgICByZXR1cm4gY2FjaGVkRmlsZW5hbWVEZWJ1Z0lkcztcbiAgfVxuXG4gIGxhc3RLZXlzQ291bnQgPSBkZWJ1Z0lkS2V5cy5sZW5ndGg7XG5cbiAgLy8gQnVpbGQgYSBtYXAgb2YgZmlsZW5hbWUgLT4gZGVidWdfaWQuXG4gIGNhY2hlZEZpbGVuYW1lRGVidWdJZHMgPSBkZWJ1Z0lkS2V5cy5yZWR1Y2UoKGFjYywgc3RhY2tLZXkpID0+IHtcbiAgICBpZiAoIXBhcnNlZFN0YWNrUmVzdWx0cykge1xuICAgICAgcGFyc2VkU3RhY2tSZXN1bHRzID0ge307XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gcGFyc2VkU3RhY2tSZXN1bHRzW3N0YWNrS2V5XTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGFjY1tyZXN1bHRbMF1dID0gcmVzdWx0WzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYXJzZWRTdGFjayA9IHN0YWNrUGFyc2VyKHN0YWNrS2V5KTtcblxuICAgICAgZm9yIChsZXQgaSA9IHBhcnNlZFN0YWNrLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHN0YWNrRnJhbWUgPSBwYXJzZWRTdGFja1tpXTtcbiAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBzdGFja0ZyYW1lPy5maWxlbmFtZTtcbiAgICAgICAgY29uc3QgZGVidWdJZCA9IGRlYnVnSWRNYXBbc3RhY2tLZXldO1xuXG4gICAgICAgIGlmIChmaWxlbmFtZSAmJiBkZWJ1Z0lkKSB7XG4gICAgICAgICAgYWNjW2ZpbGVuYW1lXSA9IGRlYnVnSWQ7XG4gICAgICAgICAgcGFyc2VkU3RhY2tSZXN1bHRzW3N0YWNrS2V5XSA9IFtmaWxlbmFtZSwgZGVidWdJZF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIGNhY2hlZEZpbGVuYW1lRGVidWdJZHM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3Qgb2YgZGVidWcgaW1hZ2VzIGZvciB0aGUgZ2l2ZW4gcmVzb3VyY2VzLlxuICovXG5mdW5jdGlvbiBnZXREZWJ1Z0ltYWdlc0ZvclJlc291cmNlcyhcbiAgc3RhY2tQYXJzZXIsXG4gIHJlc291cmNlX3BhdGhzLFxuKSB7XG4gIGNvbnN0IGZpbGVuYW1lRGVidWdJZE1hcCA9IGdldEZpbGVuYW1lVG9EZWJ1Z0lkTWFwKHN0YWNrUGFyc2VyKTtcblxuICBpZiAoIWZpbGVuYW1lRGVidWdJZE1hcCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGltYWdlcyA9IFtdO1xuICBmb3IgKGNvbnN0IHBhdGggb2YgcmVzb3VyY2VfcGF0aHMpIHtcbiAgICBpZiAocGF0aCAmJiBmaWxlbmFtZURlYnVnSWRNYXBbcGF0aF0pIHtcbiAgICAgIGltYWdlcy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ3NvdXJjZW1hcCcsXG4gICAgICAgIGNvZGVfZmlsZTogcGF0aCxcbiAgICAgICAgZGVidWdfaWQ6IGZpbGVuYW1lRGVidWdJZE1hcFtwYXRoXSAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW1hZ2VzO1xufVxuXG5leHBvcnQgeyBnZXREZWJ1Z0ltYWdlc0ZvclJlc291cmNlcywgZ2V0RmlsZW5hbWVUb0RlYnVnSWRNYXAgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlYnVnLWlkcy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-ids.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js":
/*!**********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js ***!
  \**********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   CONSOLE_LEVELS: () => (/* binding */ CONSOLE_LEVELS),\n/* harmony export */   consoleSandbox: () => (/* binding */ consoleSandbox),\n/* harmony export */   debug: () => (/* binding */ debug),\n/* harmony export */   logger: () => (/* binding */ logger),\n/* harmony export */   originalConsoleMethods: () => (/* binding */ originalConsoleMethods)\n/* harmony export */ });\n/* harmony import */ var _carrier_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../carrier.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/carrier.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _worldwide_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n\n\n\n\n/**\n * A Sentry Logger instance.\n *\n * @deprecated Use {@link debug} instead with the {@link SentryDebugLogger} type.\n */\n\nconst CONSOLE_LEVELS = [\n  'debug',\n  'info',\n  'warn',\n  'error',\n  'log',\n  'assert',\n  'trace',\n] ;\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\n/** This may be mutated by the console instrumentation. */\nconst originalConsoleMethods\n\n = {};\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nfunction consoleSandbox(callback) {\n  if (!(\"console\" in _worldwide_js__WEBPACK_IMPORTED_MODULE_2__.GLOBAL_OBJ)) {\n    return callback();\n  }\n\n  const console = _worldwide_js__WEBPACK_IMPORTED_MODULE_2__.GLOBAL_OBJ.console ;\n  const wrappedFuncs = {};\n\n  const wrappedLevels = Object.keys(originalConsoleMethods) ;\n\n  // Restore all wrapped console methods\n  wrappedLevels.forEach(level => {\n    const originalConsoleMethod = originalConsoleMethods[level];\n    wrappedFuncs[level] = console[level] ;\n    console[level] = originalConsoleMethod ;\n  });\n\n  try {\n    return callback();\n  } finally {\n    // Revert restoration to wrapped state\n    wrappedLevels.forEach(level => {\n      console[level] = wrappedFuncs[level] ;\n    });\n  }\n}\n\nfunction enable() {\n  _getLoggerSettings().enabled = true;\n}\n\nfunction disable() {\n  _getLoggerSettings().enabled = false;\n}\n\nfunction isEnabled() {\n  return _getLoggerSettings().enabled;\n}\n\nfunction log(...args) {\n  _maybeLog('log', ...args);\n}\n\nfunction info(...args) {\n  _maybeLog('info', ...args);\n}\n\nfunction warn(...args) {\n  _maybeLog('warn', ...args);\n}\n\nfunction error(...args) {\n  _maybeLog('error', ...args);\n}\n\nfunction _debug(...args) {\n  _maybeLog('debug', ...args);\n}\n\nfunction assert(...args) {\n  _maybeLog('assert', ...args);\n}\n\nfunction trace(...args) {\n  _maybeLog('trace', ...args);\n}\n\nfunction _maybeLog(level, ...args) {\n  if (!_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n    return;\n  }\n\n  if (isEnabled()) {\n    consoleSandbox(() => {\n      _worldwide_js__WEBPACK_IMPORTED_MODULE_2__.GLOBAL_OBJ.console[level](`${PREFIX}[${level}]:`, ...args);\n    });\n  }\n}\n\nfunction _getLoggerSettings() {\n  if (!_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD) {\n    return { enabled: false };\n  }\n\n  return (0,_carrier_js__WEBPACK_IMPORTED_MODULE_0__.getGlobalSingleton)('loggerSettings', () => ({ enabled: false }));\n}\n\n/**\n * This is a logger singleton which either logs things or no-ops if logging is not enabled.\n * The logger is a singleton on the carrier, to ensure that a consistent logger is used throughout the SDK.\n *\n * @deprecated Use {@link debug} instead.\n */\nconst logger = {\n  /** Enable logging. */\n  enable,\n  /** Disable logging. */\n  disable,\n  /** Check if logging is enabled. */\n  isEnabled,\n  /** Log a message. */\n  log,\n  /** Log level info */\n  info,\n  /** Log a warning. */\n  warn,\n  /** Log an error. */\n  error,\n  /** Log a debug message. */\n  debug: _debug,\n  /** Log an assertion. */\n  assert,\n  /** Log a trace. */\n  trace,\n  // eslint-disable-next-line deprecation/deprecation\n} ;\n\n/**\n * This is a logger singleton which either logs things or no-ops if logging is not enabled.\n */\nconst debug = {\n  /** Enable logging. */\n  enable,\n  /** Disable logging. */\n  disable,\n  /** Check if logging is enabled. */\n  isEnabled,\n  /** Log a message. */\n  log,\n  /** Log a warning. */\n  warn,\n  /** Log an error. */\n  error,\n} ;\n\n\n//# sourceMappingURL=debug-logger.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2RlYnVnLWxvZ2dlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFtRDtBQUNIO0FBQ0o7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixhQUFhLGtCQUFrQix5QkFBeUI7QUFDNUU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsa0VBQXVCO0FBQy9CO0FBQ0E7O0FBRUEsa0JBQWtCLHFEQUFVO0FBQzVCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTyx3REFBVztBQUNsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNLHFEQUFVLG1CQUFtQixPQUFPLEdBQUcsTUFBTTtBQUNuRCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLE9BQU8sd0RBQVc7QUFDbEIsYUFBYTtBQUNiOztBQUVBLFNBQVMsK0RBQWtCLDRCQUE0QixnQkFBZ0I7QUFDdkU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsYUFBYTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFaUY7QUFDakYiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS91dGlscy9kZWJ1Zy1sb2dnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0R2xvYmFsU2luZ2xldG9uIH0gZnJvbSAnLi4vY2Fycmllci5qcyc7XG5pbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4uL2RlYnVnLWJ1aWxkLmpzJztcbmltcG9ydCB7IEdMT0JBTF9PQkogfSBmcm9tICcuL3dvcmxkd2lkZS5qcyc7XG5cbi8qKlxuICogQSBTZW50cnkgTG9nZ2VyIGluc3RhbmNlLlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgZGVidWd9IGluc3RlYWQgd2l0aCB0aGUge0BsaW5rIFNlbnRyeURlYnVnTG9nZ2VyfSB0eXBlLlxuICovXG5cbmNvbnN0IENPTlNPTEVfTEVWRUxTID0gW1xuICAnZGVidWcnLFxuICAnaW5mbycsXG4gICd3YXJuJyxcbiAgJ2Vycm9yJyxcbiAgJ2xvZycsXG4gICdhc3NlcnQnLFxuICAndHJhY2UnLFxuXSA7XG5cbi8qKiBQcmVmaXggZm9yIGxvZ2dpbmcgc3RyaW5ncyAqL1xuY29uc3QgUFJFRklYID0gJ1NlbnRyeSBMb2dnZXIgJztcblxuLyoqIFRoaXMgbWF5IGJlIG11dGF0ZWQgYnkgdGhlIGNvbnNvbGUgaW5zdHJ1bWVudGF0aW9uLiAqL1xuY29uc3Qgb3JpZ2luYWxDb25zb2xlTWV0aG9kc1xuXG4gPSB7fTtcblxuLyoqXG4gKiBUZW1wb3JhcmlseSBkaXNhYmxlIHNlbnRyeSBjb25zb2xlIGluc3RydW1lbnRhdGlvbnMuXG4gKlxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0byBydW4gYWdhaW5zdCB0aGUgb3JpZ2luYWwgYGNvbnNvbGVgIG1lc3NhZ2VzXG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gY29uc29sZVNhbmRib3goY2FsbGJhY2spIHtcbiAgaWYgKCEoJ2NvbnNvbGUnIGluIEdMT0JBTF9PQkopKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gIH1cblxuICBjb25zdCBjb25zb2xlID0gR0xPQkFMX09CSi5jb25zb2xlIDtcbiAgY29uc3Qgd3JhcHBlZEZ1bmNzID0ge307XG5cbiAgY29uc3Qgd3JhcHBlZExldmVscyA9IE9iamVjdC5rZXlzKG9yaWdpbmFsQ29uc29sZU1ldGhvZHMpIDtcblxuICAvLyBSZXN0b3JlIGFsbCB3cmFwcGVkIGNvbnNvbGUgbWV0aG9kc1xuICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZU1ldGhvZCA9IG9yaWdpbmFsQ29uc29sZU1ldGhvZHNbbGV2ZWxdO1xuICAgIHdyYXBwZWRGdW5jc1tsZXZlbF0gPSBjb25zb2xlW2xldmVsXSA7XG4gICAgY29uc29sZVtsZXZlbF0gPSBvcmlnaW5hbENvbnNvbGVNZXRob2QgO1xuICB9KTtcblxuICB0cnkge1xuICAgIHJldHVybiBjYWxsYmFjaygpO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIFJldmVydCByZXN0b3JhdGlvbiB0byB3cmFwcGVkIHN0YXRlXG4gICAgd3JhcHBlZExldmVscy5mb3JFYWNoKGxldmVsID0+IHtcbiAgICAgIGNvbnNvbGVbbGV2ZWxdID0gd3JhcHBlZEZ1bmNzW2xldmVsXSA7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5hYmxlKCkge1xuICBfZ2V0TG9nZ2VyU2V0dGluZ3MoKS5lbmFibGVkID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgX2dldExvZ2dlclNldHRpbmdzKCkuZW5hYmxlZCA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0VuYWJsZWQoKSB7XG4gIHJldHVybiBfZ2V0TG9nZ2VyU2V0dGluZ3MoKS5lbmFibGVkO1xufVxuXG5mdW5jdGlvbiBsb2coLi4uYXJncykge1xuICBfbWF5YmVMb2coJ2xvZycsIC4uLmFyZ3MpO1xufVxuXG5mdW5jdGlvbiBpbmZvKC4uLmFyZ3MpIHtcbiAgX21heWJlTG9nKCdpbmZvJywgLi4uYXJncyk7XG59XG5cbmZ1bmN0aW9uIHdhcm4oLi4uYXJncykge1xuICBfbWF5YmVMb2coJ3dhcm4nLCAuLi5hcmdzKTtcbn1cblxuZnVuY3Rpb24gZXJyb3IoLi4uYXJncykge1xuICBfbWF5YmVMb2coJ2Vycm9yJywgLi4uYXJncyk7XG59XG5cbmZ1bmN0aW9uIF9kZWJ1ZyguLi5hcmdzKSB7XG4gIF9tYXliZUxvZygnZGVidWcnLCAuLi5hcmdzKTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0KC4uLmFyZ3MpIHtcbiAgX21heWJlTG9nKCdhc3NlcnQnLCAuLi5hcmdzKTtcbn1cblxuZnVuY3Rpb24gdHJhY2UoLi4uYXJncykge1xuICBfbWF5YmVMb2coJ3RyYWNlJywgLi4uYXJncyk7XG59XG5cbmZ1bmN0aW9uIF9tYXliZUxvZyhsZXZlbCwgLi4uYXJncykge1xuICBpZiAoIURFQlVHX0JVSUxEKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGlzRW5hYmxlZCgpKSB7XG4gICAgY29uc29sZVNhbmRib3goKCkgPT4ge1xuICAgICAgR0xPQkFMX09CSi5jb25zb2xlW2xldmVsXShgJHtQUkVGSVh9WyR7bGV2ZWx9XTpgLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfZ2V0TG9nZ2VyU2V0dGluZ3MoKSB7XG4gIGlmICghREVCVUdfQlVJTEQpIHtcbiAgICByZXR1cm4geyBlbmFibGVkOiBmYWxzZSB9O1xuICB9XG5cbiAgcmV0dXJuIGdldEdsb2JhbFNpbmdsZXRvbignbG9nZ2VyU2V0dGluZ3MnLCAoKSA9PiAoeyBlbmFibGVkOiBmYWxzZSB9KSk7XG59XG5cbi8qKlxuICogVGhpcyBpcyBhIGxvZ2dlciBzaW5nbGV0b24gd2hpY2ggZWl0aGVyIGxvZ3MgdGhpbmdzIG9yIG5vLW9wcyBpZiBsb2dnaW5nIGlzIG5vdCBlbmFibGVkLlxuICogVGhlIGxvZ2dlciBpcyBhIHNpbmdsZXRvbiBvbiB0aGUgY2FycmllciwgdG8gZW5zdXJlIHRoYXQgYSBjb25zaXN0ZW50IGxvZ2dlciBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIFNESy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIGRlYnVnfSBpbnN0ZWFkLlxuICovXG5jb25zdCBsb2dnZXIgPSB7XG4gIC8qKiBFbmFibGUgbG9nZ2luZy4gKi9cbiAgZW5hYmxlLFxuICAvKiogRGlzYWJsZSBsb2dnaW5nLiAqL1xuICBkaXNhYmxlLFxuICAvKiogQ2hlY2sgaWYgbG9nZ2luZyBpcyBlbmFibGVkLiAqL1xuICBpc0VuYWJsZWQsXG4gIC8qKiBMb2cgYSBtZXNzYWdlLiAqL1xuICBsb2csXG4gIC8qKiBMb2cgbGV2ZWwgaW5mbyAqL1xuICBpbmZvLFxuICAvKiogTG9nIGEgd2FybmluZy4gKi9cbiAgd2FybixcbiAgLyoqIExvZyBhbiBlcnJvci4gKi9cbiAgZXJyb3IsXG4gIC8qKiBMb2cgYSBkZWJ1ZyBtZXNzYWdlLiAqL1xuICBkZWJ1ZzogX2RlYnVnLFxuICAvKiogTG9nIGFuIGFzc2VydGlvbi4gKi9cbiAgYXNzZXJ0LFxuICAvKiogTG9nIGEgdHJhY2UuICovXG4gIHRyYWNlLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbn0gO1xuXG4vKipcbiAqIFRoaXMgaXMgYSBsb2dnZXIgc2luZ2xldG9uIHdoaWNoIGVpdGhlciBsb2dzIHRoaW5ncyBvciBuby1vcHMgaWYgbG9nZ2luZyBpcyBub3QgZW5hYmxlZC5cbiAqL1xuY29uc3QgZGVidWcgPSB7XG4gIC8qKiBFbmFibGUgbG9nZ2luZy4gKi9cbiAgZW5hYmxlLFxuICAvKiogRGlzYWJsZSBsb2dnaW5nLiAqL1xuICBkaXNhYmxlLFxuICAvKiogQ2hlY2sgaWYgbG9nZ2luZyBpcyBlbmFibGVkLiAqL1xuICBpc0VuYWJsZWQsXG4gIC8qKiBMb2cgYSBtZXNzYWdlLiAqL1xuICBsb2csXG4gIC8qKiBMb2cgYSB3YXJuaW5nLiAqL1xuICB3YXJuLFxuICAvKiogTG9nIGFuIGVycm9yLiAqL1xuICBlcnJvcixcbn0gO1xuXG5leHBvcnQgeyBDT05TT0xFX0xFVkVMUywgY29uc29sZVNhbmRib3gsIGRlYnVnLCBsb2dnZXIsIG9yaWdpbmFsQ29uc29sZU1ldGhvZHMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlYnVnLWxvZ2dlci5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/dsn.js":
/*!*************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/dsn.js ***!
  \*************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   dsnFromString: () => (/* binding */ dsnFromString),\n/* harmony export */   dsnToString: () => (/* binding */ dsnToString),\n/* harmony export */   extractOrgIdFromDsnHost: () => (/* binding */ extractOrgIdFromDsnHost),\n/* harmony export */   makeDsn: () => (/* binding */ makeDsn)\n/* harmony export */ });\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _debug_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n\n\n\n/** Regular expression used to extract org ID from a DSN host. */\nconst ORG_ID_REGEX = /^o(\\d+)\\./;\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol) {\n  return protocol === 'http' || protocol === 'https';\n}\n\n/**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\nfunction dsnToString(dsn, withPassword = false) {\n  const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n  return (\n    `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n    `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n  );\n}\n\n/**\n * Parses a Dsn from a given string.\n *\n * @param str A Dsn as string\n * @returns Dsn as DsnComponents or undefined if @param str is not a valid DSN string\n */\nfunction dsnFromString(str) {\n  const match = DSN_REGEX.exec(str);\n\n  if (!match) {\n    // This should be logged to the console\n    (0,_debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.consoleSandbox)(() => {\n      // eslint-disable-next-line no-console\n      console.error(`Invalid Sentry Dsn: ${str}`);\n    });\n    return undefined;\n  }\n\n  const [protocol, publicKey, pass = '', host = '', port = '', lastPath = ''] = match.slice(1);\n  let path = '';\n  let projectId = lastPath;\n\n  const split = projectId.split('/');\n  if (split.length > 1) {\n    path = split.slice(0, -1).join('/');\n    projectId = split.pop() ;\n  }\n\n  if (projectId) {\n    const projectMatch = projectId.match(/^\\d+/);\n    if (projectMatch) {\n      projectId = projectMatch[0];\n    }\n  }\n\n  return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol , publicKey });\n}\n\nfunction dsnFromComponents(components) {\n  return {\n    protocol: components.protocol,\n    publicKey: components.publicKey || '',\n    pass: components.pass || '',\n    host: components.host,\n    port: components.port || '',\n    path: components.path || '',\n    projectId: components.projectId,\n  };\n}\n\nfunction validateDsn(dsn) {\n  if (!_debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD) {\n    return true;\n  }\n\n  const { port, projectId, protocol } = dsn;\n\n  const requiredComponents = ['protocol', 'publicKey', 'host', 'projectId'];\n  const hasMissingRequiredComponent = requiredComponents.find(component => {\n    if (!dsn[component]) {\n      _debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.error(`Invalid Sentry Dsn: ${component} missing`);\n      return true;\n    }\n    return false;\n  });\n\n  if (hasMissingRequiredComponent) {\n    return false;\n  }\n\n  if (!projectId.match(/^\\d+$/)) {\n    _debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n    return false;\n  }\n\n  if (!isValidProtocol(protocol)) {\n    _debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n    return false;\n  }\n\n  if (port && isNaN(parseInt(port, 10))) {\n    _debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Extract the org ID from a DSN host.\n *\n * @param host The host from a DSN\n * @returns The org ID if found, undefined otherwise\n */\nfunction extractOrgIdFromDsnHost(host) {\n  const match = host.match(ORG_ID_REGEX);\n\n  return match?.[1];\n}\n\n/**\n * Creates a valid Sentry Dsn object, identifying a Sentry instance and project.\n * @returns a valid DsnComponents object or `undefined` if @param from is an invalid DSN source\n */\nfunction makeDsn(from) {\n  const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n  if (!components || !validateDsn(components)) {\n    return undefined;\n  }\n  return components;\n}\n\n\n//# sourceMappingURL=dsn.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2Rzbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBZ0Q7QUFDVTs7QUFFMUQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUseURBQXlEO0FBQ25FO0FBQ0EsT0FBTyxTQUFTLEtBQUssVUFBVSxFQUFFLDJCQUEyQixLQUFLLE9BQU87QUFDeEUsUUFBUSxLQUFLLEVBQUUsV0FBVyxLQUFLLE9BQU8sR0FBRyxVQUFVLEtBQUssVUFBVSxFQUFFLFVBQVU7QUFDOUU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLGdFQUFjO0FBQ2xCO0FBQ0EsMkNBQTJDLElBQUk7QUFDL0MsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QixtRUFBbUU7QUFDaEc7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU8sd0RBQVc7QUFDbEI7QUFDQTs7QUFFQSxVQUFVLDRCQUE0Qjs7QUFFdEM7QUFDQTtBQUNBO0FBQ0EsTUFBTSxtREFBSyw4QkFBOEIsV0FBVztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksbURBQUssZ0RBQWdELFVBQVU7QUFDbkU7QUFDQTs7QUFFQTtBQUNBLElBQUksbURBQUssK0NBQStDLFNBQVM7QUFDakU7QUFDQTs7QUFFQTtBQUNBLElBQUksbURBQUssMkNBQTJDLEtBQUs7QUFDekQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUV3RTtBQUN4RSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2Rzbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4uL2RlYnVnLWJ1aWxkLmpzJztcbmltcG9ydCB7IGNvbnNvbGVTYW5kYm94LCBkZWJ1ZyB9IGZyb20gJy4vZGVidWctbG9nZ2VyLmpzJztcblxuLyoqIFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIGV4dHJhY3Qgb3JnIElEIGZyb20gYSBEU04gaG9zdC4gKi9cbmNvbnN0IE9SR19JRF9SRUdFWCA9IC9ebyhcXGQrKVxcLi87XG5cbi8qKiBSZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byBwYXJzZSBhIERzbi4gKi9cbmNvbnN0IERTTl9SRUdFWCA9IC9eKD86KFxcdyspOilcXC9cXC8oPzooXFx3KykoPzo6KFxcdyspPyk/QCkoW1xcdy4tXSspKD86OihcXGQrKSk/XFwvKC4rKS87XG5cbmZ1bmN0aW9uIGlzVmFsaWRQcm90b2NvbChwcm90b2NvbCkge1xuICByZXR1cm4gcHJvdG9jb2wgPT09ICdodHRwJyB8fCBwcm90b2NvbCA9PT0gJ2h0dHBzJztcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEc24uXG4gKlxuICogQnkgZGVmYXVsdCwgdGhpcyB3aWxsIHJlbmRlciB0aGUgcHVibGljIHJlcHJlc2VudGF0aW9uIHdpdGhvdXQgdGhlIHBhc3N3b3JkXG4gKiBjb21wb25lbnQuIFRvIGdldCB0aGUgZGVwcmVjYXRlZCBwcml2YXRlIHJlcHJlc2VudGF0aW9uLCBzZXQgYHdpdGhQYXNzd29yZGBcbiAqIHRvIHRydWUuXG4gKlxuICogQHBhcmFtIHdpdGhQYXNzd29yZCBXaGVuIHNldCB0byB0cnVlLCB0aGUgcGFzc3dvcmQgd2lsbCBiZSBpbmNsdWRlZC5cbiAqL1xuZnVuY3Rpb24gZHNuVG9TdHJpbmcoZHNuLCB3aXRoUGFzc3dvcmQgPSBmYWxzZSkge1xuICBjb25zdCB7IGhvc3QsIHBhdGgsIHBhc3MsIHBvcnQsIHByb2plY3RJZCwgcHJvdG9jb2wsIHB1YmxpY0tleSB9ID0gZHNuO1xuICByZXR1cm4gKFxuICAgIGAke3Byb3RvY29sfTovLyR7cHVibGljS2V5fSR7d2l0aFBhc3N3b3JkICYmIHBhc3MgPyBgOiR7cGFzc31gIDogJyd9YCArXG4gICAgYEAke2hvc3R9JHtwb3J0ID8gYDoke3BvcnR9YCA6ICcnfS8ke3BhdGggPyBgJHtwYXRofS9gIDogcGF0aH0ke3Byb2plY3RJZH1gXG4gICk7XG59XG5cbi8qKlxuICogUGFyc2VzIGEgRHNuIGZyb20gYSBnaXZlbiBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHN0ciBBIERzbiBhcyBzdHJpbmdcbiAqIEByZXR1cm5zIERzbiBhcyBEc25Db21wb25lbnRzIG9yIHVuZGVmaW5lZCBpZiBAcGFyYW0gc3RyIGlzIG5vdCBhIHZhbGlkIERTTiBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZHNuRnJvbVN0cmluZyhzdHIpIHtcbiAgY29uc3QgbWF0Y2ggPSBEU05fUkVHRVguZXhlYyhzdHIpO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBiZSBsb2dnZWQgdG8gdGhlIGNvbnNvbGVcbiAgICBjb25zb2xlU2FuZGJveCgoKSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBTZW50cnkgRHNuOiAke3N0cn1gKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgW3Byb3RvY29sLCBwdWJsaWNLZXksIHBhc3MgPSAnJywgaG9zdCA9ICcnLCBwb3J0ID0gJycsIGxhc3RQYXRoID0gJyddID0gbWF0Y2guc2xpY2UoMSk7XG4gIGxldCBwYXRoID0gJyc7XG4gIGxldCBwcm9qZWN0SWQgPSBsYXN0UGF0aDtcblxuICBjb25zdCBzcGxpdCA9IHByb2plY3RJZC5zcGxpdCgnLycpO1xuICBpZiAoc3BsaXQubGVuZ3RoID4gMSkge1xuICAgIHBhdGggPSBzcGxpdC5zbGljZSgwLCAtMSkuam9pbignLycpO1xuICAgIHByb2plY3RJZCA9IHNwbGl0LnBvcCgpIDtcbiAgfVxuXG4gIGlmIChwcm9qZWN0SWQpIHtcbiAgICBjb25zdCBwcm9qZWN0TWF0Y2ggPSBwcm9qZWN0SWQubWF0Y2goL15cXGQrLyk7XG4gICAgaWYgKHByb2plY3RNYXRjaCkge1xuICAgICAgcHJvamVjdElkID0gcHJvamVjdE1hdGNoWzBdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkc25Gcm9tQ29tcG9uZW50cyh7IGhvc3QsIHBhc3MsIHBhdGgsIHByb2plY3RJZCwgcG9ydCwgcHJvdG9jb2w6IHByb3RvY29sICwgcHVibGljS2V5IH0pO1xufVxuXG5mdW5jdGlvbiBkc25Gcm9tQ29tcG9uZW50cyhjb21wb25lbnRzKSB7XG4gIHJldHVybiB7XG4gICAgcHJvdG9jb2w6IGNvbXBvbmVudHMucHJvdG9jb2wsXG4gICAgcHVibGljS2V5OiBjb21wb25lbnRzLnB1YmxpY0tleSB8fCAnJyxcbiAgICBwYXNzOiBjb21wb25lbnRzLnBhc3MgfHwgJycsXG4gICAgaG9zdDogY29tcG9uZW50cy5ob3N0LFxuICAgIHBvcnQ6IGNvbXBvbmVudHMucG9ydCB8fCAnJyxcbiAgICBwYXRoOiBjb21wb25lbnRzLnBhdGggfHwgJycsXG4gICAgcHJvamVjdElkOiBjb21wb25lbnRzLnByb2plY3RJZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVEc24oZHNuKSB7XG4gIGlmICghREVCVUdfQlVJTEQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IHsgcG9ydCwgcHJvamVjdElkLCBwcm90b2NvbCB9ID0gZHNuO1xuXG4gIGNvbnN0IHJlcXVpcmVkQ29tcG9uZW50cyA9IFsncHJvdG9jb2wnLCAncHVibGljS2V5JywgJ2hvc3QnLCAncHJvamVjdElkJ107XG4gIGNvbnN0IGhhc01pc3NpbmdSZXF1aXJlZENvbXBvbmVudCA9IHJlcXVpcmVkQ29tcG9uZW50cy5maW5kKGNvbXBvbmVudCA9PiB7XG4gICAgaWYgKCFkc25bY29tcG9uZW50XSkge1xuICAgICAgZGVidWcuZXJyb3IoYEludmFsaWQgU2VudHJ5IERzbjogJHtjb21wb25lbnR9IG1pc3NpbmdgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xuXG4gIGlmIChoYXNNaXNzaW5nUmVxdWlyZWRDb21wb25lbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIXByb2plY3RJZC5tYXRjaCgvXlxcZCskLykpIHtcbiAgICBkZWJ1Zy5lcnJvcihgSW52YWxpZCBTZW50cnkgRHNuOiBJbnZhbGlkIHByb2plY3RJZCAke3Byb2plY3RJZH1gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWlzVmFsaWRQcm90b2NvbChwcm90b2NvbCkpIHtcbiAgICBkZWJ1Zy5lcnJvcihgSW52YWxpZCBTZW50cnkgRHNuOiBJbnZhbGlkIHByb3RvY29sICR7cHJvdG9jb2x9YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHBvcnQgJiYgaXNOYU4ocGFyc2VJbnQocG9ydCwgMTApKSkge1xuICAgIGRlYnVnLmVycm9yKGBJbnZhbGlkIFNlbnRyeSBEc246IEludmFsaWQgcG9ydCAke3BvcnR9YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgb3JnIElEIGZyb20gYSBEU04gaG9zdC5cbiAqXG4gKiBAcGFyYW0gaG9zdCBUaGUgaG9zdCBmcm9tIGEgRFNOXG4gKiBAcmV0dXJucyBUaGUgb3JnIElEIGlmIGZvdW5kLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RPcmdJZEZyb21Ec25Ib3N0KGhvc3QpIHtcbiAgY29uc3QgbWF0Y2ggPSBob3N0Lm1hdGNoKE9SR19JRF9SRUdFWCk7XG5cbiAgcmV0dXJuIG1hdGNoPy5bMV07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHZhbGlkIFNlbnRyeSBEc24gb2JqZWN0LCBpZGVudGlmeWluZyBhIFNlbnRyeSBpbnN0YW5jZSBhbmQgcHJvamVjdC5cbiAqIEByZXR1cm5zIGEgdmFsaWQgRHNuQ29tcG9uZW50cyBvYmplY3Qgb3IgYHVuZGVmaW5lZGAgaWYgQHBhcmFtIGZyb20gaXMgYW4gaW52YWxpZCBEU04gc291cmNlXG4gKi9cbmZ1bmN0aW9uIG1ha2VEc24oZnJvbSkge1xuICBjb25zdCBjb21wb25lbnRzID0gdHlwZW9mIGZyb20gPT09ICdzdHJpbmcnID8gZHNuRnJvbVN0cmluZyhmcm9tKSA6IGRzbkZyb21Db21wb25lbnRzKGZyb20pO1xuICBpZiAoIWNvbXBvbmVudHMgfHwgIXZhbGlkYXRlRHNuKGNvbXBvbmVudHMpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gY29tcG9uZW50cztcbn1cblxuZXhwb3J0IHsgZHNuRnJvbVN0cmluZywgZHNuVG9TdHJpbmcsIGV4dHJhY3RPcmdJZEZyb21Ec25Ib3N0LCBtYWtlRHNuIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kc24uanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/dsn.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/env.js":
/*!*************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/env.js ***!
  \*************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getSDKSource: () => (/* binding */ getSDKSource),\n/* harmony export */   isBrowserBundle: () => (/* binding */ isBrowserBundle)\n/* harmony export */ });\n/*\n * This module exists for optimizations in the build process through rollup and terser.  We define some global\n * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these\n * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will\n * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to\n * `debug` and preventing node-related code from appearing in browser bundles.\n *\n * Attention:\n * This file should not be used to define constants/flags that are intended to be used for tree-shaking conducted by\n * users. These flags should live in their respective packages, as we identified user tooling (specifically webpack)\n * having issues tree-shaking these constants across package boundaries.\n * An example for this is the __SENTRY_DEBUG__ constant. It is declared in each package individually because we want\n * users to be able to shake away expressions that it guards.\n */\n\n/**\n * Figures out if we're building a browser bundle.\n *\n * @returns true if this is a browser bundle build.\n */\nfunction isBrowserBundle() {\n  return typeof __SENTRY_BROWSER_BUNDLE__ !== 'undefined' && !!__SENTRY_BROWSER_BUNDLE__;\n}\n\n/**\n * Get source of SDK.\n */\nfunction getSDKSource() {\n  // This comment is used to identify this line in the CDN bundle build step and replace this with \"return 'cdn';\"\n  /* __SENTRY_SDK_SOURCE__ */ return 'npm';\n}\n\n\n//# sourceMappingURL=env.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2Vudi5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlIQUFpSDtBQUNqSDtBQUNBOztBQUV5QztBQUN6QyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2Vudi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogVGhpcyBtb2R1bGUgZXhpc3RzIGZvciBvcHRpbWl6YXRpb25zIGluIHRoZSBidWlsZCBwcm9jZXNzIHRocm91Z2ggcm9sbHVwIGFuZCB0ZXJzZXIuICBXZSBkZWZpbmUgc29tZSBnbG9iYWxcbiAqIGNvbnN0YW50cywgd2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gZHVyaW5nIGJ1aWxkLiBCeSBndWFyZGluZyBjZXJ0YWluIHBpZWNlcyBvZiBjb2RlIHdpdGggZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHRoZXNlXG4gKiBjb25zdGFudHMsIHdlIGNhbiBjb250cm9sIHdoZXRoZXIgb3Igbm90IHRoZXkgYXBwZWFyIGluIHRoZSBmaW5hbCBidW5kbGUuIChBbnkgY29kZSBndWFyZGVkIGJ5IGEgZmFsc2UgY29uZGl0aW9uIHdpbGxcbiAqIG5ldmVyIHJ1biwgYW5kIHdpbGwgaGVuY2UgYmUgZHJvcHBlZCBkdXJpbmcgdHJlZXNoYWtpbmcuKSBUaGUgdHdvIHByaW1hcnkgdXNlcyBmb3IgdGhpcyBhcmUgc3RyaXBwaW5nIG91dCBjYWxscyB0b1xuICogYGRlYnVnYCBhbmQgcHJldmVudGluZyBub2RlLXJlbGF0ZWQgY29kZSBmcm9tIGFwcGVhcmluZyBpbiBicm93c2VyIGJ1bmRsZXMuXG4gKlxuICogQXR0ZW50aW9uOlxuICogVGhpcyBmaWxlIHNob3VsZCBub3QgYmUgdXNlZCB0byBkZWZpbmUgY29uc3RhbnRzL2ZsYWdzIHRoYXQgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIHRyZWUtc2hha2luZyBjb25kdWN0ZWQgYnlcbiAqIHVzZXJzLiBUaGVzZSBmbGFncyBzaG91bGQgbGl2ZSBpbiB0aGVpciByZXNwZWN0aXZlIHBhY2thZ2VzLCBhcyB3ZSBpZGVudGlmaWVkIHVzZXIgdG9vbGluZyAoc3BlY2lmaWNhbGx5IHdlYnBhY2spXG4gKiBoYXZpbmcgaXNzdWVzIHRyZWUtc2hha2luZyB0aGVzZSBjb25zdGFudHMgYWNyb3NzIHBhY2thZ2UgYm91bmRhcmllcy5cbiAqIEFuIGV4YW1wbGUgZm9yIHRoaXMgaXMgdGhlIF9fU0VOVFJZX0RFQlVHX18gY29uc3RhbnQuIEl0IGlzIGRlY2xhcmVkIGluIGVhY2ggcGFja2FnZSBpbmRpdmlkdWFsbHkgYmVjYXVzZSB3ZSB3YW50XG4gKiB1c2VycyB0byBiZSBhYmxlIHRvIHNoYWtlIGF3YXkgZXhwcmVzc2lvbnMgdGhhdCBpdCBndWFyZHMuXG4gKi9cblxuLyoqXG4gKiBGaWd1cmVzIG91dCBpZiB3ZSdyZSBidWlsZGluZyBhIGJyb3dzZXIgYnVuZGxlLlxuICpcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBhIGJyb3dzZXIgYnVuZGxlIGJ1aWxkLlxuICovXG5mdW5jdGlvbiBpc0Jyb3dzZXJCdW5kbGUoKSB7XG4gIHJldHVybiB0eXBlb2YgX19TRU5UUllfQlJPV1NFUl9CVU5ETEVfXyAhPT0gJ3VuZGVmaW5lZCcgJiYgISFfX1NFTlRSWV9CUk9XU0VSX0JVTkRMRV9fO1xufVxuXG4vKipcbiAqIEdldCBzb3VyY2Ugb2YgU0RLLlxuICovXG5mdW5jdGlvbiBnZXRTREtTb3VyY2UoKSB7XG4gIC8vIFRoaXMgY29tbWVudCBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgbGluZSBpbiB0aGUgQ0ROIGJ1bmRsZSBidWlsZCBzdGVwIGFuZCByZXBsYWNlIHRoaXMgd2l0aCBcInJldHVybiAnY2RuJztcIlxuICAvKiBfX1NFTlRSWV9TREtfU09VUkNFX18gKi8gcmV0dXJuICducG0nO1xufVxuXG5leHBvcnQgeyBnZXRTREtTb3VyY2UsIGlzQnJvd3NlckJ1bmRsZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW52LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/env.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/envelope.js":
/*!******************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/envelope.js ***!
  \******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addItemToEnvelope: () => (/* binding */ addItemToEnvelope),\n/* harmony export */   createAttachmentEnvelopeItem: () => (/* binding */ createAttachmentEnvelopeItem),\n/* harmony export */   createEnvelope: () => (/* binding */ createEnvelope),\n/* harmony export */   createEventEnvelopeHeaders: () => (/* binding */ createEventEnvelopeHeaders),\n/* harmony export */   createSpanEnvelopeItem: () => (/* binding */ createSpanEnvelopeItem),\n/* harmony export */   envelopeContainsItemType: () => (/* binding */ envelopeContainsItemType),\n/* harmony export */   envelopeItemTypeToDataCategory: () => (/* binding */ envelopeItemTypeToDataCategory),\n/* harmony export */   forEachEnvelopeItem: () => (/* binding */ forEachEnvelopeItem),\n/* harmony export */   getSdkMetadataForEnvelopeHeader: () => (/* binding */ getSdkMetadataForEnvelopeHeader),\n/* harmony export */   parseEnvelope: () => (/* binding */ parseEnvelope),\n/* harmony export */   serializeEnvelope: () => (/* binding */ serializeEnvelope)\n/* harmony export */ });\n/* harmony import */ var _carrier_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../carrier.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/carrier.js\");\n/* harmony import */ var _dsn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dsn.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/dsn.js\");\n/* harmony import */ var _normalize_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./normalize.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/normalize.js\");\n/* harmony import */ var _worldwide_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n\n\n\n\n\n/**\n * Creates an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nfunction createEnvelope(headers, items = []) {\n  return [headers, items] ;\n}\n\n/**\n * Add an item to an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nfunction addItemToEnvelope(envelope, newItem) {\n  const [headers, items] = envelope;\n  return [headers, [...items, newItem]] ;\n}\n\n/**\n * Convenience function to loop through the items and item types of an envelope.\n * (This function was mostly created because working with envelope types is painful at the moment)\n *\n * If the callback returns true, the rest of the items will be skipped.\n */\nfunction forEachEnvelopeItem(\n  envelope,\n  callback,\n) {\n  const envelopeItems = envelope[1];\n\n  for (const envelopeItem of envelopeItems) {\n    const envelopeItemType = envelopeItem[0].type;\n    const result = callback(envelopeItem, envelopeItemType);\n\n    if (result) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Returns true if the envelope contains any of the given envelope item types\n */\nfunction envelopeContainsItemType(envelope, types) {\n  return forEachEnvelopeItem(envelope, (_, type) => types.includes(type));\n}\n\n/**\n * Encode a string to UTF8 array.\n */\nfunction encodeUTF8(input) {\n  const carrier = (0,_carrier_js__WEBPACK_IMPORTED_MODULE_0__.getSentryCarrier)(_worldwide_js__WEBPACK_IMPORTED_MODULE_3__.GLOBAL_OBJ);\n  return carrier.encodePolyfill ? carrier.encodePolyfill(input) : new TextEncoder().encode(input);\n}\n\n/**\n * Decode a UTF8 array to string.\n */\nfunction decodeUTF8(input) {\n  const carrier = (0,_carrier_js__WEBPACK_IMPORTED_MODULE_0__.getSentryCarrier)(_worldwide_js__WEBPACK_IMPORTED_MODULE_3__.GLOBAL_OBJ);\n  return carrier.decodePolyfill ? carrier.decodePolyfill(input) : new TextDecoder().decode(input);\n}\n\n/**\n * Serializes an envelope.\n */\nfunction serializeEnvelope(envelope) {\n  const [envHeaders, items] = envelope;\n  // Initially we construct our envelope as a string and only convert to binary chunks if we encounter binary data\n  let parts = JSON.stringify(envHeaders);\n\n  function append(next) {\n    if (typeof parts === 'string') {\n      parts = typeof next === 'string' ? parts + next : [encodeUTF8(parts), next];\n    } else {\n      parts.push(typeof next === 'string' ? encodeUTF8(next) : next);\n    }\n  }\n\n  for (const item of items) {\n    const [itemHeaders, payload] = item;\n\n    append(`\\n${JSON.stringify(itemHeaders)}\\n`);\n\n    if (typeof payload === 'string' || payload instanceof Uint8Array) {\n      append(payload);\n    } else {\n      let stringifiedPayload;\n      try {\n        stringifiedPayload = JSON.stringify(payload);\n      } catch {\n        // In case, despite all our efforts to keep `payload` circular-dependency-free, `JSON.stringify()` still\n        // fails, we try again after normalizing it again with infinite normalization depth. This of course has a\n        // performance impact but in this case a performance hit is better than throwing.\n        stringifiedPayload = JSON.stringify((0,_normalize_js__WEBPACK_IMPORTED_MODULE_2__.normalize)(payload));\n      }\n      append(stringifiedPayload);\n    }\n  }\n\n  return typeof parts === 'string' ? parts : concatBuffers(parts);\n}\n\nfunction concatBuffers(buffers) {\n  const totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);\n\n  const merged = new Uint8Array(totalLength);\n  let offset = 0;\n  for (const buffer of buffers) {\n    merged.set(buffer, offset);\n    offset += buffer.length;\n  }\n\n  return merged;\n}\n\n/**\n * Parses an envelope\n */\nfunction parseEnvelope(env) {\n  let buffer = typeof env === 'string' ? encodeUTF8(env) : env;\n\n  function readBinary(length) {\n    const bin = buffer.subarray(0, length);\n    // Replace the buffer with the remaining data excluding trailing newline\n    buffer = buffer.subarray(length + 1);\n    return bin;\n  }\n\n  function readJson() {\n    let i = buffer.indexOf(0xa);\n    // If we couldn't find a newline, we must have found the end of the buffer\n    if (i < 0) {\n      i = buffer.length;\n    }\n\n    return JSON.parse(decodeUTF8(readBinary(i))) ;\n  }\n\n  const envelopeHeader = readJson();\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const items = [];\n\n  while (buffer.length) {\n    const itemHeader = readJson();\n    const binaryLength = typeof itemHeader.length === 'number' ? itemHeader.length : undefined;\n\n    items.push([itemHeader, binaryLength ? readBinary(binaryLength) : readJson()]);\n  }\n\n  return [envelopeHeader, items];\n}\n\n/**\n * Creates envelope item for a single span\n */\nfunction createSpanEnvelopeItem(spanJson) {\n  const spanHeaders = {\n    type: 'span',\n  };\n\n  return [spanHeaders, spanJson];\n}\n\n/**\n * Creates attachment envelope items\n */\nfunction createAttachmentEnvelopeItem(attachment) {\n  const buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data) : attachment.data;\n\n  return [\n    {\n      type: 'attachment',\n      length: buffer.length,\n      filename: attachment.filename,\n      content_type: attachment.contentType,\n      attachment_type: attachment.attachmentType,\n    },\n    buffer,\n  ];\n}\n\nconst ITEM_TYPE_TO_DATA_CATEGORY_MAP = {\n  session: 'session',\n  sessions: 'session',\n  attachment: 'attachment',\n  transaction: 'transaction',\n  event: 'error',\n  client_report: 'internal',\n  user_report: 'default',\n  profile: 'profile',\n  profile_chunk: 'profile',\n  replay_event: 'replay',\n  replay_recording: 'replay',\n  check_in: 'monitor',\n  feedback: 'feedback',\n  span: 'span',\n  raw_security: 'security',\n  log: 'log_item',\n};\n\n/**\n * Maps the type of an envelope item to a data category.\n */\nfunction envelopeItemTypeToDataCategory(type) {\n  return ITEM_TYPE_TO_DATA_CATEGORY_MAP[type];\n}\n\n/** Extracts the minimal SDK info from the metadata or an events */\nfunction getSdkMetadataForEnvelopeHeader(metadataOrEvent) {\n  if (!metadataOrEvent?.sdk) {\n    return;\n  }\n  const { name, version } = metadataOrEvent.sdk;\n  return { name, version };\n}\n\n/**\n * Creates event envelope headers, based on event, sdk info and tunnel\n * Note: This function was extracted from the core package to make it available in Replay\n */\nfunction createEventEnvelopeHeaders(\n  event,\n  sdkInfo,\n  tunnel,\n  dsn,\n) {\n  const dynamicSamplingContext = event.sdkProcessingMetadata?.dynamicSamplingContext;\n  return {\n    event_id: event.event_id ,\n    sent_at: new Date().toISOString(),\n    ...(sdkInfo && { sdk: sdkInfo }),\n    ...(!!tunnel && dsn && { dsn: (0,_dsn_js__WEBPACK_IMPORTED_MODULE_1__.dsnToString)(dsn) }),\n    ...(dynamicSamplingContext && {\n      trace: dynamicSamplingContext,\n    }),\n  };\n}\n\n\n//# sourceMappingURL=envelope.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2VudmVsb3BlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFpRDtBQUNWO0FBQ0k7QUFDQzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsNkRBQWdCLENBQUMscURBQVU7QUFDN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiw2REFBZ0IsQ0FBQyxxREFBVTtBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxnQkFBZ0IsNEJBQTRCOztBQUU1QztBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsd0RBQVM7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxnQkFBZ0I7QUFDMUIsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsY0FBYztBQUNuQyw2QkFBNkIsS0FBSyxvREFBVyxPQUFPO0FBQ3BEO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFaVI7QUFDalIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS91dGlscy9lbnZlbG9wZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRTZW50cnlDYXJyaWVyIH0gZnJvbSAnLi4vY2Fycmllci5qcyc7XG5pbXBvcnQgeyBkc25Ub1N0cmluZyB9IGZyb20gJy4vZHNuLmpzJztcbmltcG9ydCB7IG5vcm1hbGl6ZSB9IGZyb20gJy4vbm9ybWFsaXplLmpzJztcbmltcG9ydCB7IEdMT0JBTF9PQkogfSBmcm9tICcuL3dvcmxkd2lkZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBlbnZlbG9wZS5cbiAqIE1ha2Ugc3VyZSB0byBhbHdheXMgZXhwbGljaXRseSBwcm92aWRlIHRoZSBnZW5lcmljIHRvIHRoaXMgZnVuY3Rpb25cbiAqIHNvIHRoYXQgdGhlIGVudmVsb3BlIHR5cGVzIHJlc29sdmUgY29ycmVjdGx5LlxuICovXG5mdW5jdGlvbiBjcmVhdGVFbnZlbG9wZShoZWFkZXJzLCBpdGVtcyA9IFtdKSB7XG4gIHJldHVybiBbaGVhZGVycywgaXRlbXNdIDtcbn1cblxuLyoqXG4gKiBBZGQgYW4gaXRlbSB0byBhbiBlbnZlbG9wZS5cbiAqIE1ha2Ugc3VyZSB0byBhbHdheXMgZXhwbGljaXRseSBwcm92aWRlIHRoZSBnZW5lcmljIHRvIHRoaXMgZnVuY3Rpb25cbiAqIHNvIHRoYXQgdGhlIGVudmVsb3BlIHR5cGVzIHJlc29sdmUgY29ycmVjdGx5LlxuICovXG5mdW5jdGlvbiBhZGRJdGVtVG9FbnZlbG9wZShlbnZlbG9wZSwgbmV3SXRlbSkge1xuICBjb25zdCBbaGVhZGVycywgaXRlbXNdID0gZW52ZWxvcGU7XG4gIHJldHVybiBbaGVhZGVycywgWy4uLml0ZW1zLCBuZXdJdGVtXV0gO1xufVxuXG4vKipcbiAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGxvb3AgdGhyb3VnaCB0aGUgaXRlbXMgYW5kIGl0ZW0gdHlwZXMgb2YgYW4gZW52ZWxvcGUuXG4gKiAoVGhpcyBmdW5jdGlvbiB3YXMgbW9zdGx5IGNyZWF0ZWQgYmVjYXVzZSB3b3JraW5nIHdpdGggZW52ZWxvcGUgdHlwZXMgaXMgcGFpbmZ1bCBhdCB0aGUgbW9tZW50KVxuICpcbiAqIElmIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUsIHRoZSByZXN0IG9mIHRoZSBpdGVtcyB3aWxsIGJlIHNraXBwZWQuXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2hFbnZlbG9wZUl0ZW0oXG4gIGVudmVsb3BlLFxuICBjYWxsYmFjayxcbikge1xuICBjb25zdCBlbnZlbG9wZUl0ZW1zID0gZW52ZWxvcGVbMV07XG5cbiAgZm9yIChjb25zdCBlbnZlbG9wZUl0ZW0gb2YgZW52ZWxvcGVJdGVtcykge1xuICAgIGNvbnN0IGVudmVsb3BlSXRlbVR5cGUgPSBlbnZlbG9wZUl0ZW1bMF0udHlwZTtcbiAgICBjb25zdCByZXN1bHQgPSBjYWxsYmFjayhlbnZlbG9wZUl0ZW0sIGVudmVsb3BlSXRlbVR5cGUpO1xuXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW52ZWxvcGUgY29udGFpbnMgYW55IG9mIHRoZSBnaXZlbiBlbnZlbG9wZSBpdGVtIHR5cGVzXG4gKi9cbmZ1bmN0aW9uIGVudmVsb3BlQ29udGFpbnNJdGVtVHlwZShlbnZlbG9wZSwgdHlwZXMpIHtcbiAgcmV0dXJuIGZvckVhY2hFbnZlbG9wZUl0ZW0oZW52ZWxvcGUsIChfLCB0eXBlKSA9PiB0eXBlcy5pbmNsdWRlcyh0eXBlKSk7XG59XG5cbi8qKlxuICogRW5jb2RlIGEgc3RyaW5nIHRvIFVURjggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZVVURjgoaW5wdXQpIHtcbiAgY29uc3QgY2FycmllciA9IGdldFNlbnRyeUNhcnJpZXIoR0xPQkFMX09CSik7XG4gIHJldHVybiBjYXJyaWVyLmVuY29kZVBvbHlmaWxsID8gY2Fycmllci5lbmNvZGVQb2x5ZmlsbChpbnB1dCkgOiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoaW5wdXQpO1xufVxuXG4vKipcbiAqIERlY29kZSBhIFVURjggYXJyYXkgdG8gc3RyaW5nLlxuICovXG5mdW5jdGlvbiBkZWNvZGVVVEY4KGlucHV0KSB7XG4gIGNvbnN0IGNhcnJpZXIgPSBnZXRTZW50cnlDYXJyaWVyKEdMT0JBTF9PQkopO1xuICByZXR1cm4gY2Fycmllci5kZWNvZGVQb2x5ZmlsbCA/IGNhcnJpZXIuZGVjb2RlUG9seWZpbGwoaW5wdXQpIDogbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGlucHV0KTtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIGFuIGVudmVsb3BlLlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVFbnZlbG9wZShlbnZlbG9wZSkge1xuICBjb25zdCBbZW52SGVhZGVycywgaXRlbXNdID0gZW52ZWxvcGU7XG4gIC8vIEluaXRpYWxseSB3ZSBjb25zdHJ1Y3Qgb3VyIGVudmVsb3BlIGFzIGEgc3RyaW5nIGFuZCBvbmx5IGNvbnZlcnQgdG8gYmluYXJ5IGNodW5rcyBpZiB3ZSBlbmNvdW50ZXIgYmluYXJ5IGRhdGFcbiAgbGV0IHBhcnRzID0gSlNPTi5zdHJpbmdpZnkoZW52SGVhZGVycyk7XG5cbiAgZnVuY3Rpb24gYXBwZW5kKG5leHQpIHtcbiAgICBpZiAodHlwZW9mIHBhcnRzID09PSAnc3RyaW5nJykge1xuICAgICAgcGFydHMgPSB0eXBlb2YgbmV4dCA9PT0gJ3N0cmluZycgPyBwYXJ0cyArIG5leHQgOiBbZW5jb2RlVVRGOChwYXJ0cyksIG5leHRdO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0cy5wdXNoKHR5cGVvZiBuZXh0ID09PSAnc3RyaW5nJyA/IGVuY29kZVVURjgobmV4dCkgOiBuZXh0KTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBbaXRlbUhlYWRlcnMsIHBheWxvYWRdID0gaXRlbTtcblxuICAgIGFwcGVuZChgXFxuJHtKU09OLnN0cmluZ2lmeShpdGVtSGVhZGVycyl9XFxuYCk7XG5cbiAgICBpZiAodHlwZW9mIHBheWxvYWQgPT09ICdzdHJpbmcnIHx8IHBheWxvYWQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICBhcHBlbmQocGF5bG9hZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBzdHJpbmdpZmllZFBheWxvYWQ7XG4gICAgICB0cnkge1xuICAgICAgICBzdHJpbmdpZmllZFBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJbiBjYXNlLCBkZXNwaXRlIGFsbCBvdXIgZWZmb3J0cyB0byBrZWVwIGBwYXlsb2FkYCBjaXJjdWxhci1kZXBlbmRlbmN5LWZyZWUsIGBKU09OLnN0cmluZ2lmeSgpYCBzdGlsbFxuICAgICAgICAvLyBmYWlscywgd2UgdHJ5IGFnYWluIGFmdGVyIG5vcm1hbGl6aW5nIGl0IGFnYWluIHdpdGggaW5maW5pdGUgbm9ybWFsaXphdGlvbiBkZXB0aC4gVGhpcyBvZiBjb3Vyc2UgaGFzIGFcbiAgICAgICAgLy8gcGVyZm9ybWFuY2UgaW1wYWN0IGJ1dCBpbiB0aGlzIGNhc2UgYSBwZXJmb3JtYW5jZSBoaXQgaXMgYmV0dGVyIHRoYW4gdGhyb3dpbmcuXG4gICAgICAgIHN0cmluZ2lmaWVkUGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZShwYXlsb2FkKSk7XG4gICAgICB9XG4gICAgICBhcHBlbmQoc3RyaW5naWZpZWRQYXlsb2FkKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHlwZW9mIHBhcnRzID09PSAnc3RyaW5nJyA/IHBhcnRzIDogY29uY2F0QnVmZmVycyhwYXJ0cyk7XG59XG5cbmZ1bmN0aW9uIGNvbmNhdEJ1ZmZlcnMoYnVmZmVycykge1xuICBjb25zdCB0b3RhbExlbmd0aCA9IGJ1ZmZlcnMucmVkdWNlKChhY2MsIGJ1ZikgPT4gYWNjICsgYnVmLmxlbmd0aCwgMCk7XG5cbiAgY29uc3QgbWVyZ2VkID0gbmV3IFVpbnQ4QXJyYXkodG90YWxMZW5ndGgpO1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xuICAgIG1lcmdlZC5zZXQoYnVmZmVyLCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYW4gZW52ZWxvcGVcbiAqL1xuZnVuY3Rpb24gcGFyc2VFbnZlbG9wZShlbnYpIHtcbiAgbGV0IGJ1ZmZlciA9IHR5cGVvZiBlbnYgPT09ICdzdHJpbmcnID8gZW5jb2RlVVRGOChlbnYpIDogZW52O1xuXG4gIGZ1bmN0aW9uIHJlYWRCaW5hcnkobGVuZ3RoKSB7XG4gICAgY29uc3QgYmluID0gYnVmZmVyLnN1YmFycmF5KDAsIGxlbmd0aCk7XG4gICAgLy8gUmVwbGFjZSB0aGUgYnVmZmVyIHdpdGggdGhlIHJlbWFpbmluZyBkYXRhIGV4Y2x1ZGluZyB0cmFpbGluZyBuZXdsaW5lXG4gICAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KGxlbmd0aCArIDEpO1xuICAgIHJldHVybiBiaW47XG4gIH1cblxuICBmdW5jdGlvbiByZWFkSnNvbigpIHtcbiAgICBsZXQgaSA9IGJ1ZmZlci5pbmRleE9mKDB4YSk7XG4gICAgLy8gSWYgd2UgY291bGRuJ3QgZmluZCBhIG5ld2xpbmUsIHdlIG11c3QgaGF2ZSBmb3VuZCB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgICBpZiAoaSA8IDApIHtcbiAgICAgIGkgPSBidWZmZXIubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiBKU09OLnBhcnNlKGRlY29kZVVURjgocmVhZEJpbmFyeShpKSkpIDtcbiAgfVxuXG4gIGNvbnN0IGVudmVsb3BlSGVhZGVyID0gcmVhZEpzb24oKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgY29uc3QgaXRlbXMgPSBbXTtcblxuICB3aGlsZSAoYnVmZmVyLmxlbmd0aCkge1xuICAgIGNvbnN0IGl0ZW1IZWFkZXIgPSByZWFkSnNvbigpO1xuICAgIGNvbnN0IGJpbmFyeUxlbmd0aCA9IHR5cGVvZiBpdGVtSGVhZGVyLmxlbmd0aCA9PT0gJ251bWJlcicgPyBpdGVtSGVhZGVyLmxlbmd0aCA6IHVuZGVmaW5lZDtcblxuICAgIGl0ZW1zLnB1c2goW2l0ZW1IZWFkZXIsIGJpbmFyeUxlbmd0aCA/IHJlYWRCaW5hcnkoYmluYXJ5TGVuZ3RoKSA6IHJlYWRKc29uKCldKTtcbiAgfVxuXG4gIHJldHVybiBbZW52ZWxvcGVIZWFkZXIsIGl0ZW1zXTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGVudmVsb3BlIGl0ZW0gZm9yIGEgc2luZ2xlIHNwYW5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3BhbkVudmVsb3BlSXRlbShzcGFuSnNvbikge1xuICBjb25zdCBzcGFuSGVhZGVycyA9IHtcbiAgICB0eXBlOiAnc3BhbicsXG4gIH07XG5cbiAgcmV0dXJuIFtzcGFuSGVhZGVycywgc3Bhbkpzb25dO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYXR0YWNobWVudCBlbnZlbG9wZSBpdGVtc1xuICovXG5mdW5jdGlvbiBjcmVhdGVBdHRhY2htZW50RW52ZWxvcGVJdGVtKGF0dGFjaG1lbnQpIHtcbiAgY29uc3QgYnVmZmVyID0gdHlwZW9mIGF0dGFjaG1lbnQuZGF0YSA9PT0gJ3N0cmluZycgPyBlbmNvZGVVVEY4KGF0dGFjaG1lbnQuZGF0YSkgOiBhdHRhY2htZW50LmRhdGE7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0eXBlOiAnYXR0YWNobWVudCcsXG4gICAgICBsZW5ndGg6IGJ1ZmZlci5sZW5ndGgsXG4gICAgICBmaWxlbmFtZTogYXR0YWNobWVudC5maWxlbmFtZSxcbiAgICAgIGNvbnRlbnRfdHlwZTogYXR0YWNobWVudC5jb250ZW50VHlwZSxcbiAgICAgIGF0dGFjaG1lbnRfdHlwZTogYXR0YWNobWVudC5hdHRhY2htZW50VHlwZSxcbiAgICB9LFxuICAgIGJ1ZmZlcixcbiAgXTtcbn1cblxuY29uc3QgSVRFTV9UWVBFX1RPX0RBVEFfQ0FURUdPUllfTUFQID0ge1xuICBzZXNzaW9uOiAnc2Vzc2lvbicsXG4gIHNlc3Npb25zOiAnc2Vzc2lvbicsXG4gIGF0dGFjaG1lbnQ6ICdhdHRhY2htZW50JyxcbiAgdHJhbnNhY3Rpb246ICd0cmFuc2FjdGlvbicsXG4gIGV2ZW50OiAnZXJyb3InLFxuICBjbGllbnRfcmVwb3J0OiAnaW50ZXJuYWwnLFxuICB1c2VyX3JlcG9ydDogJ2RlZmF1bHQnLFxuICBwcm9maWxlOiAncHJvZmlsZScsXG4gIHByb2ZpbGVfY2h1bms6ICdwcm9maWxlJyxcbiAgcmVwbGF5X2V2ZW50OiAncmVwbGF5JyxcbiAgcmVwbGF5X3JlY29yZGluZzogJ3JlcGxheScsXG4gIGNoZWNrX2luOiAnbW9uaXRvcicsXG4gIGZlZWRiYWNrOiAnZmVlZGJhY2snLFxuICBzcGFuOiAnc3BhbicsXG4gIHJhd19zZWN1cml0eTogJ3NlY3VyaXR5JyxcbiAgbG9nOiAnbG9nX2l0ZW0nLFxufTtcblxuLyoqXG4gKiBNYXBzIHRoZSB0eXBlIG9mIGFuIGVudmVsb3BlIGl0ZW0gdG8gYSBkYXRhIGNhdGVnb3J5LlxuICovXG5mdW5jdGlvbiBlbnZlbG9wZUl0ZW1UeXBlVG9EYXRhQ2F0ZWdvcnkodHlwZSkge1xuICByZXR1cm4gSVRFTV9UWVBFX1RPX0RBVEFfQ0FURUdPUllfTUFQW3R5cGVdO1xufVxuXG4vKiogRXh0cmFjdHMgdGhlIG1pbmltYWwgU0RLIGluZm8gZnJvbSB0aGUgbWV0YWRhdGEgb3IgYW4gZXZlbnRzICovXG5mdW5jdGlvbiBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhT3JFdmVudCkge1xuICBpZiAoIW1ldGFkYXRhT3JFdmVudD8uc2RrKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gbWV0YWRhdGFPckV2ZW50LnNkaztcbiAgcmV0dXJuIHsgbmFtZSwgdmVyc2lvbiB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgZXZlbnQgZW52ZWxvcGUgaGVhZGVycywgYmFzZWQgb24gZXZlbnQsIHNkayBpbmZvIGFuZCB0dW5uZWxcbiAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBmcm9tIHRoZSBjb3JlIHBhY2thZ2UgdG8gbWFrZSBpdCBhdmFpbGFibGUgaW4gUmVwbGF5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50RW52ZWxvcGVIZWFkZXJzKFxuICBldmVudCxcbiAgc2RrSW5mbyxcbiAgdHVubmVsLFxuICBkc24sXG4pIHtcbiAgY29uc3QgZHluYW1pY1NhbXBsaW5nQ29udGV4dCA9IGV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YT8uZHluYW1pY1NhbXBsaW5nQ29udGV4dDtcbiAgcmV0dXJuIHtcbiAgICBldmVudF9pZDogZXZlbnQuZXZlbnRfaWQgLFxuICAgIHNlbnRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAuLi4oc2RrSW5mbyAmJiB7IHNkazogc2RrSW5mbyB9KSxcbiAgICAuLi4oISF0dW5uZWwgJiYgZHNuICYmIHsgZHNuOiBkc25Ub1N0cmluZyhkc24pIH0pLFxuICAgIC4uLihkeW5hbWljU2FtcGxpbmdDb250ZXh0ICYmIHtcbiAgICAgIHRyYWNlOiBkeW5hbWljU2FtcGxpbmdDb250ZXh0LFxuICAgIH0pLFxuICB9O1xufVxuXG5leHBvcnQgeyBhZGRJdGVtVG9FbnZlbG9wZSwgY3JlYXRlQXR0YWNobWVudEVudmVsb3BlSXRlbSwgY3JlYXRlRW52ZWxvcGUsIGNyZWF0ZUV2ZW50RW52ZWxvcGVIZWFkZXJzLCBjcmVhdGVTcGFuRW52ZWxvcGVJdGVtLCBlbnZlbG9wZUNvbnRhaW5zSXRlbVR5cGUsIGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSwgZm9yRWFjaEVudmVsb3BlSXRlbSwgZ2V0U2RrTWV0YWRhdGFGb3JFbnZlbG9wZUhlYWRlciwgcGFyc2VFbnZlbG9wZSwgc2VyaWFsaXplRW52ZWxvcGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVudmVsb3BlLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/envelope.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/error.js":
/*!***************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/error.js ***!
  \***************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   SentryError: () => (/* binding */ SentryError)\n/* harmony export */ });\n/**\n * An error emitted by Sentry SDKs and related utilities.\n * @deprecated This class is no longer used and will be removed in a future version. Use `Error` instead.\n */\nclass SentryError extends Error {\n\n   constructor(\n     message,\n    logLevel = 'warn',\n  ) {\n    super(message);this.message = message;\n    this.logLevel = logLevel;\n  }\n}\n\n\n//# sourceMappingURL=error.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2Vycm9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTs7QUFFdUI7QUFDdkIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS91dGlscy9lcnJvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFuIGVycm9yIGVtaXR0ZWQgYnkgU2VudHJ5IFNES3MgYW5kIHJlbGF0ZWQgdXRpbGl0aWVzLlxuICogQGRlcHJlY2F0ZWQgVGhpcyBjbGFzcyBpcyBubyBsb25nZXIgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uIFVzZSBgRXJyb3JgIGluc3RlYWQuXG4gKi9cbmNsYXNzIFNlbnRyeUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXG4gICBjb25zdHJ1Y3RvcihcbiAgICAgbWVzc2FnZSxcbiAgICBsb2dMZXZlbCA9ICd3YXJuJyxcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7dGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLmxvZ0xldmVsID0gbG9nTGV2ZWw7XG4gIH1cbn1cblxuZXhwb3J0IHsgU2VudHJ5RXJyb3IgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9yLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/error.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/eventUtils.js":
/*!********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/eventUtils.js ***!
  \********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getPossibleEventMessages: () => (/* binding */ getPossibleEventMessages)\n/* harmony export */ });\n/**\n * Get a list of possible event messages from a Sentry event.\n */\nfunction getPossibleEventMessages(event) {\n  const possibleMessages = [];\n\n  if (event.message) {\n    possibleMessages.push(event.message);\n  }\n\n  try {\n    // @ts-expect-error Try catching to save bundle size\n    const lastException = event.exception.values[event.exception.values.length - 1];\n    if (lastException?.value) {\n      possibleMessages.push(lastException.value);\n      if (lastException.type) {\n        possibleMessages.push(`${lastException.type}: ${lastException.value}`);\n      }\n    }\n  } catch {\n    // ignore errors here\n  }\n\n  return possibleMessages;\n}\n\n\n//# sourceMappingURL=eventUtils.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2V2ZW50VXRpbHMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxtQkFBbUIsSUFBSSxvQkFBb0I7QUFDNUU7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRW9DO0FBQ3BDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvZXZlbnRVdGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdldCBhIGxpc3Qgb2YgcG9zc2libGUgZXZlbnQgbWVzc2FnZXMgZnJvbSBhIFNlbnRyeSBldmVudC5cbiAqL1xuZnVuY3Rpb24gZ2V0UG9zc2libGVFdmVudE1lc3NhZ2VzKGV2ZW50KSB7XG4gIGNvbnN0IHBvc3NpYmxlTWVzc2FnZXMgPSBbXTtcblxuICBpZiAoZXZlbnQubWVzc2FnZSkge1xuICAgIHBvc3NpYmxlTWVzc2FnZXMucHVzaChldmVudC5tZXNzYWdlKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUcnkgY2F0Y2hpbmcgdG8gc2F2ZSBidW5kbGUgc2l6ZVxuICAgIGNvbnN0IGxhc3RFeGNlcHRpb24gPSBldmVudC5leGNlcHRpb24udmFsdWVzW2V2ZW50LmV4Y2VwdGlvbi52YWx1ZXMubGVuZ3RoIC0gMV07XG4gICAgaWYgKGxhc3RFeGNlcHRpb24/LnZhbHVlKSB7XG4gICAgICBwb3NzaWJsZU1lc3NhZ2VzLnB1c2gobGFzdEV4Y2VwdGlvbi52YWx1ZSk7XG4gICAgICBpZiAobGFzdEV4Y2VwdGlvbi50eXBlKSB7XG4gICAgICAgIHBvc3NpYmxlTWVzc2FnZXMucHVzaChgJHtsYXN0RXhjZXB0aW9uLnR5cGV9OiAke2xhc3RFeGNlcHRpb24udmFsdWV9YCk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBpZ25vcmUgZXJyb3JzIGhlcmVcbiAgfVxuXG4gIHJldHVybiBwb3NzaWJsZU1lc3NhZ2VzO1xufVxuXG5leHBvcnQgeyBnZXRQb3NzaWJsZUV2ZW50TWVzc2FnZXMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV2ZW50VXRpbHMuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/eventUtils.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/eventbuilder.js":
/*!**********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/eventbuilder.js ***!
  \**********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   eventFromMessage: () => (/* binding */ eventFromMessage),\n/* harmony export */   eventFromUnknownInput: () => (/* binding */ eventFromUnknownInput),\n/* harmony export */   exceptionFromError: () => (/* binding */ exceptionFromError),\n/* harmony export */   parseStackFrames: () => (/* binding */ parseStackFrames)\n/* harmony export */ });\n/* harmony import */ var _is_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n/* harmony import */ var _misc_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./misc.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/misc.js\");\n/* harmony import */ var _normalize_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./normalize.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/normalize.js\");\n/* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./object.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js\");\n\n\n\n\n\n/**\n * Extracts stack frames from the error.stack string\n */\nfunction parseStackFrames(stackParser, error) {\n  return stackParser(error.stack || '', 1);\n}\n\n/**\n * Extracts stack frames from the error and builds a Sentry Exception\n */\nfunction exceptionFromError(stackParser, error) {\n  const exception = {\n    type: error.name || error.constructor.name,\n    value: error.message,\n  };\n\n  const frames = parseStackFrames(stackParser, error);\n  if (frames.length) {\n    exception.stacktrace = { frames };\n  }\n\n  return exception;\n}\n\n/** If a plain object has a property that is an `Error`, return this error. */\nfunction getErrorPropertyFromObject(obj) {\n  for (const prop in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n      const value = obj[prop];\n      if (value instanceof Error) {\n        return value;\n      }\n    }\n  }\n\n  return undefined;\n}\n\nfunction getMessageForObject(exception) {\n  if ('name' in exception && typeof exception.name === 'string') {\n    let message = `'${exception.name}' captured as exception`;\n\n    if ('message' in exception && typeof exception.message === 'string') {\n      message += ` with message '${exception.message}'`;\n    }\n\n    return message;\n  } else if ('message' in exception && typeof exception.message === 'string') {\n    return exception.message;\n  }\n\n  const keys = (0,_object_js__WEBPACK_IMPORTED_MODULE_3__.extractExceptionKeysForMessage)(exception);\n\n  // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n  // We still want to try to get a decent message for these cases\n  if ((0,_is_js__WEBPACK_IMPORTED_MODULE_0__.isErrorEvent)(exception)) {\n    return `Event \\`ErrorEvent\\` captured as exception with message \\`${exception.message}\\``;\n  }\n\n  const className = getObjectClassName(exception);\n\n  return `${\n    className && className !== 'Object' ? `'${className}'` : 'Object'\n  } captured as exception with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj) {\n  try {\n    const prototype = Object.getPrototypeOf(obj);\n    return prototype ? prototype.constructor.name : undefined;\n  } catch {\n    // ignore errors here\n  }\n}\n\nfunction getException(\n  client,\n  mechanism,\n  exception,\n  hint,\n) {\n  if ((0,_is_js__WEBPACK_IMPORTED_MODULE_0__.isError)(exception)) {\n    return [exception, undefined];\n  }\n\n  // Mutate this!\n  mechanism.synthetic = true;\n\n  if ((0,_is_js__WEBPACK_IMPORTED_MODULE_0__.isPlainObject)(exception)) {\n    const normalizeDepth = client?.getOptions().normalizeDepth;\n    const extras = { ['__serialized__']: (0,_normalize_js__WEBPACK_IMPORTED_MODULE_2__.normalizeToSize)(exception , normalizeDepth) };\n\n    const errorFromProp = getErrorPropertyFromObject(exception);\n    if (errorFromProp) {\n      return [errorFromProp, extras];\n    }\n\n    const message = getMessageForObject(exception);\n    const ex = hint?.syntheticException || new Error(message);\n    ex.message = message;\n\n    return [ex, extras];\n  }\n\n  // This handles when someone does: `throw \"something awesome\";`\n  // We use synthesized Error here so we can extract a (rough) stack trace.\n  const ex = hint?.syntheticException || new Error(exception );\n  ex.message = `${exception}`;\n\n  return [ex, undefined];\n}\n\n/**\n * Builds and Event from a Exception\n * @hidden\n */\nfunction eventFromUnknownInput(\n  client,\n  stackParser,\n  exception,\n  hint,\n) {\n  const providedMechanism = hint?.data && (hint.data ).mechanism;\n  const mechanism = providedMechanism || {\n    handled: true,\n    type: 'generic',\n  };\n\n  const [ex, extras] = getException(client, mechanism, exception, hint);\n\n  const event = {\n    exception: {\n      values: [exceptionFromError(stackParser, ex)],\n    },\n  };\n\n  if (extras) {\n    event.extra = extras;\n  }\n\n  (0,_misc_js__WEBPACK_IMPORTED_MODULE_1__.addExceptionTypeValue)(event, undefined, undefined);\n  (0,_misc_js__WEBPACK_IMPORTED_MODULE_1__.addExceptionMechanism)(event, mechanism);\n\n  return {\n    ...event,\n    event_id: hint?.event_id,\n  };\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nfunction eventFromMessage(\n  stackParser,\n  message,\n  level = 'info',\n  hint,\n  attachStacktrace,\n) {\n  const event = {\n    event_id: hint?.event_id,\n    level,\n  };\n\n  if (attachStacktrace && hint?.syntheticException) {\n    const frames = parseStackFrames(stackParser, hint.syntheticException);\n    if (frames.length) {\n      event.exception = {\n        values: [\n          {\n            value: message,\n            stacktrace: { frames },\n          },\n        ],\n      };\n      (0,_misc_js__WEBPACK_IMPORTED_MODULE_1__.addExceptionMechanism)(event, { synthetic: true });\n    }\n  }\n\n  if ((0,_is_js__WEBPACK_IMPORTED_MODULE_0__.isParameterizedString)(message)) {\n    const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n    event.logentry = {\n      message: __sentry_template_string__,\n      params: __sentry_template_values__,\n    };\n    return event;\n  }\n\n  event.message = message;\n  return event;\n}\n\n\n//# sourceMappingURL=eventbuilder.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2V2ZW50YnVpbGRlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFzRjtBQUNiO0FBQ3hCO0FBQ1k7O0FBRTdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0IsZUFBZTs7QUFFckM7QUFDQSxtQ0FBbUMsa0JBQWtCO0FBQ3JEOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUEsZUFBZSwwRUFBOEI7O0FBRTdDO0FBQ0E7QUFDQSxNQUFNLG9EQUFZO0FBQ2xCLHdFQUF3RSxrQkFBa0I7QUFDMUY7O0FBRUE7O0FBRUE7QUFDQSw4Q0FBOEMsVUFBVTtBQUN4RCxJQUFJLG1DQUFtQyxLQUFLO0FBQzVDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLCtDQUFPO0FBQ2I7QUFDQTs7QUFFQTtBQUNBOztBQUVBLE1BQU0scURBQWE7QUFDbkI7QUFDQSxxQkFBcUIsb0JBQW9CLDhEQUFlOztBQUV4RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxnRUFBZ0U7QUFDaEU7QUFDQTtBQUNBLGtCQUFrQixVQUFVOztBQUU1QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBLEVBQUUsK0RBQXFCO0FBQ3ZCLEVBQUUsK0RBQXFCOztBQUV2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixRQUFRO0FBQ2xDLFdBQVc7QUFDWDtBQUNBO0FBQ0EsTUFBTSwrREFBcUIsVUFBVSxpQkFBaUI7QUFDdEQ7QUFDQTs7QUFFQSxNQUFNLDZEQUFxQjtBQUMzQixZQUFZLHlEQUF5RDs7QUFFckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFeUY7QUFDekYiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS91dGlscy9ldmVudGJ1aWxkZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQYXJhbWV0ZXJpemVkU3RyaW5nLCBpc0Vycm9yLCBpc1BsYWluT2JqZWN0LCBpc0Vycm9yRXZlbnQgfSBmcm9tICcuL2lzLmpzJztcbmltcG9ydCB7IGFkZEV4Y2VwdGlvbk1lY2hhbmlzbSwgYWRkRXhjZXB0aW9uVHlwZVZhbHVlIH0gZnJvbSAnLi9taXNjLmpzJztcbmltcG9ydCB7IG5vcm1hbGl6ZVRvU2l6ZSB9IGZyb20gJy4vbm9ybWFsaXplLmpzJztcbmltcG9ydCB7IGV4dHJhY3RFeGNlcHRpb25LZXlzRm9yTWVzc2FnZSB9IGZyb20gJy4vb2JqZWN0LmpzJztcblxuLyoqXG4gKiBFeHRyYWN0cyBzdGFjayBmcmFtZXMgZnJvbSB0aGUgZXJyb3Iuc3RhY2sgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU3RhY2tGcmFtZXMoc3RhY2tQYXJzZXIsIGVycm9yKSB7XG4gIHJldHVybiBzdGFja1BhcnNlcihlcnJvci5zdGFjayB8fCAnJywgMSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgc3RhY2sgZnJhbWVzIGZyb20gdGhlIGVycm9yIGFuZCBidWlsZHMgYSBTZW50cnkgRXhjZXB0aW9uXG4gKi9cbmZ1bmN0aW9uIGV4Y2VwdGlvbkZyb21FcnJvcihzdGFja1BhcnNlciwgZXJyb3IpIHtcbiAgY29uc3QgZXhjZXB0aW9uID0ge1xuICAgIHR5cGU6IGVycm9yLm5hbWUgfHwgZXJyb3IuY29uc3RydWN0b3IubmFtZSxcbiAgICB2YWx1ZTogZXJyb3IubWVzc2FnZSxcbiAgfTtcblxuICBjb25zdCBmcmFtZXMgPSBwYXJzZVN0YWNrRnJhbWVzKHN0YWNrUGFyc2VyLCBlcnJvcik7XG4gIGlmIChmcmFtZXMubGVuZ3RoKSB7XG4gICAgZXhjZXB0aW9uLnN0YWNrdHJhY2UgPSB7IGZyYW1lcyB9O1xuICB9XG5cbiAgcmV0dXJuIGV4Y2VwdGlvbjtcbn1cblxuLyoqIElmIGEgcGxhaW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5IHRoYXQgaXMgYW4gYEVycm9yYCwgcmV0dXJuIHRoaXMgZXJyb3IuICovXG5mdW5jdGlvbiBnZXRFcnJvclByb3BlcnR5RnJvbU9iamVjdChvYmopIHtcbiAgZm9yIChjb25zdCBwcm9wIGluIG9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmpbcHJvcF07XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0TWVzc2FnZUZvck9iamVjdChleGNlcHRpb24pIHtcbiAgaWYgKCduYW1lJyBpbiBleGNlcHRpb24gJiYgdHlwZW9mIGV4Y2VwdGlvbi5uYW1lID09PSAnc3RyaW5nJykge1xuICAgIGxldCBtZXNzYWdlID0gYCcke2V4Y2VwdGlvbi5uYW1lfScgY2FwdHVyZWQgYXMgZXhjZXB0aW9uYDtcblxuICAgIGlmICgnbWVzc2FnZScgaW4gZXhjZXB0aW9uICYmIHR5cGVvZiBleGNlcHRpb24ubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG1lc3NhZ2UgKz0gYCB3aXRoIG1lc3NhZ2UgJyR7ZXhjZXB0aW9uLm1lc3NhZ2V9J2A7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH0gZWxzZSBpZiAoJ21lc3NhZ2UnIGluIGV4Y2VwdGlvbiAmJiB0eXBlb2YgZXhjZXB0aW9uLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGV4Y2VwdGlvbi5tZXNzYWdlO1xuICB9XG5cbiAgY29uc3Qga2V5cyA9IGV4dHJhY3RFeGNlcHRpb25LZXlzRm9yTWVzc2FnZShleGNlcHRpb24pO1xuXG4gIC8vIFNvbWUgRXJyb3JFdmVudCBpbnN0YW5jZXMgZG8gbm90IGhhdmUgYW4gYGVycm9yYCBwcm9wZXJ0eSwgd2hpY2ggaXMgd2h5IHRoZXkgYXJlIG5vdCBoYW5kbGVkIGJlZm9yZVxuICAvLyBXZSBzdGlsbCB3YW50IHRvIHRyeSB0byBnZXQgYSBkZWNlbnQgbWVzc2FnZSBmb3IgdGhlc2UgY2FzZXNcbiAgaWYgKGlzRXJyb3JFdmVudChleGNlcHRpb24pKSB7XG4gICAgcmV0dXJuIGBFdmVudCBcXGBFcnJvckV2ZW50XFxgIGNhcHR1cmVkIGFzIGV4Y2VwdGlvbiB3aXRoIG1lc3NhZ2UgXFxgJHtleGNlcHRpb24ubWVzc2FnZX1cXGBgO1xuICB9XG5cbiAgY29uc3QgY2xhc3NOYW1lID0gZ2V0T2JqZWN0Q2xhc3NOYW1lKGV4Y2VwdGlvbik7XG5cbiAgcmV0dXJuIGAke1xuICAgIGNsYXNzTmFtZSAmJiBjbGFzc05hbWUgIT09ICdPYmplY3QnID8gYCcke2NsYXNzTmFtZX0nYCA6ICdPYmplY3QnXG4gIH0gY2FwdHVyZWQgYXMgZXhjZXB0aW9uIHdpdGgga2V5czogJHtrZXlzfWA7XG59XG5cbmZ1bmN0aW9uIGdldE9iamVjdENsYXNzTmFtZShvYmopIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcbiAgICByZXR1cm4gcHJvdG90eXBlID8gcHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWUgOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZSBlcnJvcnMgaGVyZVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldEV4Y2VwdGlvbihcbiAgY2xpZW50LFxuICBtZWNoYW5pc20sXG4gIGV4Y2VwdGlvbixcbiAgaGludCxcbikge1xuICBpZiAoaXNFcnJvcihleGNlcHRpb24pKSB7XG4gICAgcmV0dXJuIFtleGNlcHRpb24sIHVuZGVmaW5lZF07XG4gIH1cblxuICAvLyBNdXRhdGUgdGhpcyFcbiAgbWVjaGFuaXNtLnN5bnRoZXRpYyA9IHRydWU7XG5cbiAgaWYgKGlzUGxhaW5PYmplY3QoZXhjZXB0aW9uKSkge1xuICAgIGNvbnN0IG5vcm1hbGl6ZURlcHRoID0gY2xpZW50Py5nZXRPcHRpb25zKCkubm9ybWFsaXplRGVwdGg7XG4gICAgY29uc3QgZXh0cmFzID0geyBbJ19fc2VyaWFsaXplZF9fJ106IG5vcm1hbGl6ZVRvU2l6ZShleGNlcHRpb24gLCBub3JtYWxpemVEZXB0aCkgfTtcblxuICAgIGNvbnN0IGVycm9yRnJvbVByb3AgPSBnZXRFcnJvclByb3BlcnR5RnJvbU9iamVjdChleGNlcHRpb24pO1xuICAgIGlmIChlcnJvckZyb21Qcm9wKSB7XG4gICAgICByZXR1cm4gW2Vycm9yRnJvbVByb3AsIGV4dHJhc107XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IGdldE1lc3NhZ2VGb3JPYmplY3QoZXhjZXB0aW9uKTtcbiAgICBjb25zdCBleCA9IGhpbnQ/LnN5bnRoZXRpY0V4Y2VwdGlvbiB8fCBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgZXgubWVzc2FnZSA9IG1lc3NhZ2U7XG5cbiAgICByZXR1cm4gW2V4LCBleHRyYXNdO1xuICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIHdoZW4gc29tZW9uZSBkb2VzOiBgdGhyb3cgXCJzb21ldGhpbmcgYXdlc29tZVwiO2BcbiAgLy8gV2UgdXNlIHN5bnRoZXNpemVkIEVycm9yIGhlcmUgc28gd2UgY2FuIGV4dHJhY3QgYSAocm91Z2gpIHN0YWNrIHRyYWNlLlxuICBjb25zdCBleCA9IGhpbnQ/LnN5bnRoZXRpY0V4Y2VwdGlvbiB8fCBuZXcgRXJyb3IoZXhjZXB0aW9uICk7XG4gIGV4Lm1lc3NhZ2UgPSBgJHtleGNlcHRpb259YDtcblxuICByZXR1cm4gW2V4LCB1bmRlZmluZWRdO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhbmQgRXZlbnQgZnJvbSBhIEV4Y2VwdGlvblxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBldmVudEZyb21Vbmtub3duSW5wdXQoXG4gIGNsaWVudCxcbiAgc3RhY2tQYXJzZXIsXG4gIGV4Y2VwdGlvbixcbiAgaGludCxcbikge1xuICBjb25zdCBwcm92aWRlZE1lY2hhbmlzbSA9IGhpbnQ/LmRhdGEgJiYgKGhpbnQuZGF0YSApLm1lY2hhbmlzbTtcbiAgY29uc3QgbWVjaGFuaXNtID0gcHJvdmlkZWRNZWNoYW5pc20gfHwge1xuICAgIGhhbmRsZWQ6IHRydWUsXG4gICAgdHlwZTogJ2dlbmVyaWMnLFxuICB9O1xuXG4gIGNvbnN0IFtleCwgZXh0cmFzXSA9IGdldEV4Y2VwdGlvbihjbGllbnQsIG1lY2hhbmlzbSwgZXhjZXB0aW9uLCBoaW50KTtcblxuICBjb25zdCBldmVudCA9IHtcbiAgICBleGNlcHRpb246IHtcbiAgICAgIHZhbHVlczogW2V4Y2VwdGlvbkZyb21FcnJvcihzdGFja1BhcnNlciwgZXgpXSxcbiAgICB9LFxuICB9O1xuXG4gIGlmIChleHRyYXMpIHtcbiAgICBldmVudC5leHRyYSA9IGV4dHJhcztcbiAgfVxuXG4gIGFkZEV4Y2VwdGlvblR5cGVWYWx1ZShldmVudCwgdW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuICBhZGRFeGNlcHRpb25NZWNoYW5pc20oZXZlbnQsIG1lY2hhbmlzbSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5ldmVudCxcbiAgICBldmVudF9pZDogaGludD8uZXZlbnRfaWQsXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGRzIGFuZCBFdmVudCBmcm9tIGEgTWVzc2FnZVxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBldmVudEZyb21NZXNzYWdlKFxuICBzdGFja1BhcnNlcixcbiAgbWVzc2FnZSxcbiAgbGV2ZWwgPSAnaW5mbycsXG4gIGhpbnQsXG4gIGF0dGFjaFN0YWNrdHJhY2UsXG4pIHtcbiAgY29uc3QgZXZlbnQgPSB7XG4gICAgZXZlbnRfaWQ6IGhpbnQ/LmV2ZW50X2lkLFxuICAgIGxldmVsLFxuICB9O1xuXG4gIGlmIChhdHRhY2hTdGFja3RyYWNlICYmIGhpbnQ/LnN5bnRoZXRpY0V4Y2VwdGlvbikge1xuICAgIGNvbnN0IGZyYW1lcyA9IHBhcnNlU3RhY2tGcmFtZXMoc3RhY2tQYXJzZXIsIGhpbnQuc3ludGhldGljRXhjZXB0aW9uKTtcbiAgICBpZiAoZnJhbWVzLmxlbmd0aCkge1xuICAgICAgZXZlbnQuZXhjZXB0aW9uID0ge1xuICAgICAgICB2YWx1ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YWx1ZTogbWVzc2FnZSxcbiAgICAgICAgICAgIHN0YWNrdHJhY2U6IHsgZnJhbWVzIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBhZGRFeGNlcHRpb25NZWNoYW5pc20oZXZlbnQsIHsgc3ludGhldGljOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc1BhcmFtZXRlcml6ZWRTdHJpbmcobWVzc2FnZSkpIHtcbiAgICBjb25zdCB7IF9fc2VudHJ5X3RlbXBsYXRlX3N0cmluZ19fLCBfX3NlbnRyeV90ZW1wbGF0ZV92YWx1ZXNfXyB9ID0gbWVzc2FnZTtcblxuICAgIGV2ZW50LmxvZ2VudHJ5ID0ge1xuICAgICAgbWVzc2FnZTogX19zZW50cnlfdGVtcGxhdGVfc3RyaW5nX18sXG4gICAgICBwYXJhbXM6IF9fc2VudHJ5X3RlbXBsYXRlX3ZhbHVlc19fLFxuICAgIH07XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgZXZlbnQubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHJldHVybiBldmVudDtcbn1cblxuZXhwb3J0IHsgZXZlbnRGcm9tTWVzc2FnZSwgZXZlbnRGcm9tVW5rbm93bklucHV0LCBleGNlcHRpb25Gcm9tRXJyb3IsIHBhcnNlU3RhY2tGcmFtZXMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV2ZW50YnVpbGRlci5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/eventbuilder.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/featureFlags.js":
/*!**********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/featureFlags.js ***!
  \**********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   _INTERNAL_FLAG_BUFFER_SIZE: () => (/* binding */ _INTERNAL_FLAG_BUFFER_SIZE),\n/* harmony export */   _INTERNAL_MAX_FLAGS_PER_SPAN: () => (/* binding */ _INTERNAL_MAX_FLAGS_PER_SPAN),\n/* harmony export */   _INTERNAL_addFeatureFlagToActiveSpan: () => (/* binding */ _INTERNAL_addFeatureFlagToActiveSpan),\n/* harmony export */   _INTERNAL_copyFlagsFromScopeToEvent: () => (/* binding */ _INTERNAL_copyFlagsFromScopeToEvent),\n/* harmony export */   _INTERNAL_insertFlagToScope: () => (/* binding */ _INTERNAL_insertFlagToScope),\n/* harmony export */   _INTERNAL_insertToFlagBuffer: () => (/* binding */ _INTERNAL_insertToFlagBuffer)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _debug_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _spanUtils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./spanUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js\");\n\n\n\n\n\n/**\n * Ordered LRU cache for storing feature flags in the scope context. The name\n * of each flag in the buffer is unique, and the output of getAll() is ordered\n * from oldest to newest.\n */\n\n/**\n * Max size of the LRU flag buffer stored in Sentry scope and event contexts.\n */\nconst _INTERNAL_FLAG_BUFFER_SIZE = 100;\n\n/**\n * Max number of flag evaluations to record per span.\n */\nconst _INTERNAL_MAX_FLAGS_PER_SPAN = 10;\n\nconst SPAN_FLAG_ATTRIBUTE_PREFIX = 'flag.evaluation.';\n\n/**\n * Copies feature flags that are in current scope context to the event context\n */\nfunction _INTERNAL_copyFlagsFromScopeToEvent(event) {\n  const scope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n  const flagContext = scope.getScopeData().contexts.flags;\n  const flagBuffer = flagContext ? flagContext.values : [];\n\n  if (!flagBuffer.length) {\n    return event;\n  }\n\n  if (event.contexts === undefined) {\n    event.contexts = {};\n  }\n  event.contexts.flags = { values: [...flagBuffer] };\n  return event;\n}\n\n/**\n * Inserts a flag into the current scope's context while maintaining ordered LRU properties.\n * Not thread-safe. After inserting:\n * - The flag buffer is sorted in order of recency, with the newest evaluation at the end.\n * - The names in the buffer are always unique.\n * - The length of the buffer never exceeds `maxSize`.\n *\n * @param name     Name of the feature flag to insert.\n * @param value    Value of the feature flag.\n * @param maxSize  Max number of flags the buffer should store. Default value should always be used in production.\n */\nfunction _INTERNAL_insertFlagToScope(\n  name,\n  value,\n  maxSize = _INTERNAL_FLAG_BUFFER_SIZE,\n) {\n  const scopeContexts = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)().getScopeData().contexts;\n  if (!scopeContexts.flags) {\n    scopeContexts.flags = { values: [] };\n  }\n  const flags = scopeContexts.flags.values ;\n  _INTERNAL_insertToFlagBuffer(flags, name, value, maxSize);\n}\n\n/**\n * Exported for tests only. Currently only accepts boolean values (otherwise no-op).\n * Inserts a flag into a FeatureFlag array while maintaining the following properties:\n * - Flags are sorted in order of recency, with the newest evaluation at the end.\n * - The flag names are always unique.\n * - The length of the array never exceeds `maxSize`.\n *\n * @param flags      The buffer to insert the flag into.\n * @param name       Name of the feature flag to insert.\n * @param value      Value of the feature flag.\n * @param maxSize    Max number of flags the buffer should store. Default value should always be used in production.\n */\nfunction _INTERNAL_insertToFlagBuffer(\n  flags,\n  name,\n  value,\n  maxSize,\n) {\n  if (typeof value !== 'boolean') {\n    return;\n  }\n\n  if (flags.length > maxSize) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.error(`[Feature Flags] insertToFlagBuffer called on a buffer larger than maxSize=${maxSize}`);\n    return;\n  }\n\n  // Check if the flag is already in the buffer - O(n)\n  const index = flags.findIndex(f => f.flag === name);\n\n  if (index !== -1) {\n    // The flag was found, remove it from its current position - O(n)\n    flags.splice(index, 1);\n  }\n\n  if (flags.length === maxSize) {\n    // If at capacity, pop the earliest flag - O(n)\n    flags.shift();\n  }\n\n  // Push the flag to the end - O(1)\n  flags.push({\n    flag: name,\n    result: value,\n  });\n}\n\n/**\n * Records a feature flag evaluation for the active span. This is a no-op for non-boolean values.\n * The flag and its value is stored in span attributes with the `flag.evaluation` prefix. Once the\n * unique flags for a span reaches maxFlagsPerSpan, subsequent flags are dropped.\n *\n * @param name             Name of the feature flag.\n * @param value            Value of the feature flag. Non-boolean values are ignored.\n * @param maxFlagsPerSpan  Max number of flags a buffer should store. Default value should always be used in production.\n */\nfunction _INTERNAL_addFeatureFlagToActiveSpan(\n  name,\n  value,\n  maxFlagsPerSpan = _INTERNAL_MAX_FLAGS_PER_SPAN,\n) {\n  if (typeof value !== 'boolean') {\n    return;\n  }\n\n  const span = (0,_spanUtils_js__WEBPACK_IMPORTED_MODULE_3__.getActiveSpan)();\n  if (!span) {\n    return;\n  }\n\n  const attributes = (0,_spanUtils_js__WEBPACK_IMPORTED_MODULE_3__.spanToJSON)(span).data;\n\n  // If the flag already exists, always update it\n  if (`${SPAN_FLAG_ATTRIBUTE_PREFIX}${name}` in attributes) {\n    span.setAttribute(`${SPAN_FLAG_ATTRIBUTE_PREFIX}${name}`, value);\n    return;\n  }\n\n  // Else, add the flag to the span if we have not reached the max number of flags\n  const numOfAddedFlags = Object.keys(attributes).filter(key => key.startsWith(SPAN_FLAG_ATTRIBUTE_PREFIX)).length;\n  if (numOfAddedFlags < maxFlagsPerSpan) {\n    span.setAttribute(`${SPAN_FLAG_ATTRIBUTE_PREFIX}${name}`, value);\n  }\n}\n\n\n//# sourceMappingURL=featureFlags.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2ZlYXR1cmVGbGFncy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQXNEO0FBQ047QUFDTjtBQUNpQjs7QUFFM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixrRUFBZTtBQUMvQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixrRUFBZTtBQUN2QztBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLHdEQUFXLElBQUksbURBQUssb0ZBQW9GLFFBQVE7QUFDcEg7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZSw0REFBYTtBQUM1QjtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLHlEQUFVOztBQUUvQjtBQUNBLFNBQVMsMkJBQTJCLEVBQUUsS0FBSztBQUMzQyx5QkFBeUIsMkJBQTJCLEVBQUUsS0FBSztBQUMzRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QiwyQkFBMkIsRUFBRSxLQUFLO0FBQzNEO0FBQ0E7O0FBRTBNO0FBQzFNIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvZmVhdHVyZUZsYWdzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEN1cnJlbnRTY29wZSB9IGZyb20gJy4uL2N1cnJlbnRTY29wZXMuanMnO1xuaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4vZGVidWctbG9nZ2VyLmpzJztcbmltcG9ydCB7IGdldEFjdGl2ZVNwYW4sIHNwYW5Ub0pTT04gfSBmcm9tICcuL3NwYW5VdGlscy5qcyc7XG5cbi8qKlxuICogT3JkZXJlZCBMUlUgY2FjaGUgZm9yIHN0b3JpbmcgZmVhdHVyZSBmbGFncyBpbiB0aGUgc2NvcGUgY29udGV4dC4gVGhlIG5hbWVcbiAqIG9mIGVhY2ggZmxhZyBpbiB0aGUgYnVmZmVyIGlzIHVuaXF1ZSwgYW5kIHRoZSBvdXRwdXQgb2YgZ2V0QWxsKCkgaXMgb3JkZXJlZFxuICogZnJvbSBvbGRlc3QgdG8gbmV3ZXN0LlxuICovXG5cbi8qKlxuICogTWF4IHNpemUgb2YgdGhlIExSVSBmbGFnIGJ1ZmZlciBzdG9yZWQgaW4gU2VudHJ5IHNjb3BlIGFuZCBldmVudCBjb250ZXh0cy5cbiAqL1xuY29uc3QgX0lOVEVSTkFMX0ZMQUdfQlVGRkVSX1NJWkUgPSAxMDA7XG5cbi8qKlxuICogTWF4IG51bWJlciBvZiBmbGFnIGV2YWx1YXRpb25zIHRvIHJlY29yZCBwZXIgc3Bhbi5cbiAqL1xuY29uc3QgX0lOVEVSTkFMX01BWF9GTEFHU19QRVJfU1BBTiA9IDEwO1xuXG5jb25zdCBTUEFOX0ZMQUdfQVRUUklCVVRFX1BSRUZJWCA9ICdmbGFnLmV2YWx1YXRpb24uJztcblxuLyoqXG4gKiBDb3BpZXMgZmVhdHVyZSBmbGFncyB0aGF0IGFyZSBpbiBjdXJyZW50IHNjb3BlIGNvbnRleHQgdG8gdGhlIGV2ZW50IGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gX0lOVEVSTkFMX2NvcHlGbGFnc0Zyb21TY29wZVRvRXZlbnQoZXZlbnQpIHtcbiAgY29uc3Qgc2NvcGUgPSBnZXRDdXJyZW50U2NvcGUoKTtcbiAgY29uc3QgZmxhZ0NvbnRleHQgPSBzY29wZS5nZXRTY29wZURhdGEoKS5jb250ZXh0cy5mbGFncztcbiAgY29uc3QgZmxhZ0J1ZmZlciA9IGZsYWdDb250ZXh0ID8gZmxhZ0NvbnRleHQudmFsdWVzIDogW107XG5cbiAgaWYgKCFmbGFnQnVmZmVyLmxlbmd0aCkge1xuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG4gIGlmIChldmVudC5jb250ZXh0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnQuY29udGV4dHMgPSB7fTtcbiAgfVxuICBldmVudC5jb250ZXh0cy5mbGFncyA9IHsgdmFsdWVzOiBbLi4uZmxhZ0J1ZmZlcl0gfTtcbiAgcmV0dXJuIGV2ZW50O1xufVxuXG4vKipcbiAqIEluc2VydHMgYSBmbGFnIGludG8gdGhlIGN1cnJlbnQgc2NvcGUncyBjb250ZXh0IHdoaWxlIG1haW50YWluaW5nIG9yZGVyZWQgTFJVIHByb3BlcnRpZXMuXG4gKiBOb3QgdGhyZWFkLXNhZmUuIEFmdGVyIGluc2VydGluZzpcbiAqIC0gVGhlIGZsYWcgYnVmZmVyIGlzIHNvcnRlZCBpbiBvcmRlciBvZiByZWNlbmN5LCB3aXRoIHRoZSBuZXdlc3QgZXZhbHVhdGlvbiBhdCB0aGUgZW5kLlxuICogLSBUaGUgbmFtZXMgaW4gdGhlIGJ1ZmZlciBhcmUgYWx3YXlzIHVuaXF1ZS5cbiAqIC0gVGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIG5ldmVyIGV4Y2VlZHMgYG1heFNpemVgLlxuICpcbiAqIEBwYXJhbSBuYW1lICAgICBOYW1lIG9mIHRoZSBmZWF0dXJlIGZsYWcgdG8gaW5zZXJ0LlxuICogQHBhcmFtIHZhbHVlICAgIFZhbHVlIG9mIHRoZSBmZWF0dXJlIGZsYWcuXG4gKiBAcGFyYW0gbWF4U2l6ZSAgTWF4IG51bWJlciBvZiBmbGFncyB0aGUgYnVmZmVyIHNob3VsZCBzdG9yZS4gRGVmYXVsdCB2YWx1ZSBzaG91bGQgYWx3YXlzIGJlIHVzZWQgaW4gcHJvZHVjdGlvbi5cbiAqL1xuZnVuY3Rpb24gX0lOVEVSTkFMX2luc2VydEZsYWdUb1Njb3BlKFxuICBuYW1lLFxuICB2YWx1ZSxcbiAgbWF4U2l6ZSA9IF9JTlRFUk5BTF9GTEFHX0JVRkZFUl9TSVpFLFxuKSB7XG4gIGNvbnN0IHNjb3BlQ29udGV4dHMgPSBnZXRDdXJyZW50U2NvcGUoKS5nZXRTY29wZURhdGEoKS5jb250ZXh0cztcbiAgaWYgKCFzY29wZUNvbnRleHRzLmZsYWdzKSB7XG4gICAgc2NvcGVDb250ZXh0cy5mbGFncyA9IHsgdmFsdWVzOiBbXSB9O1xuICB9XG4gIGNvbnN0IGZsYWdzID0gc2NvcGVDb250ZXh0cy5mbGFncy52YWx1ZXMgO1xuICBfSU5URVJOQUxfaW5zZXJ0VG9GbGFnQnVmZmVyKGZsYWdzLCBuYW1lLCB2YWx1ZSwgbWF4U2l6ZSk7XG59XG5cbi8qKlxuICogRXhwb3J0ZWQgZm9yIHRlc3RzIG9ubHkuIEN1cnJlbnRseSBvbmx5IGFjY2VwdHMgYm9vbGVhbiB2YWx1ZXMgKG90aGVyd2lzZSBuby1vcCkuXG4gKiBJbnNlcnRzIGEgZmxhZyBpbnRvIGEgRmVhdHVyZUZsYWcgYXJyYXkgd2hpbGUgbWFpbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogLSBGbGFncyBhcmUgc29ydGVkIGluIG9yZGVyIG9mIHJlY2VuY3ksIHdpdGggdGhlIG5ld2VzdCBldmFsdWF0aW9uIGF0IHRoZSBlbmQuXG4gKiAtIFRoZSBmbGFnIG5hbWVzIGFyZSBhbHdheXMgdW5pcXVlLlxuICogLSBUaGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBuZXZlciBleGNlZWRzIGBtYXhTaXplYC5cbiAqXG4gKiBAcGFyYW0gZmxhZ3MgICAgICBUaGUgYnVmZmVyIHRvIGluc2VydCB0aGUgZmxhZyBpbnRvLlxuICogQHBhcmFtIG5hbWUgICAgICAgTmFtZSBvZiB0aGUgZmVhdHVyZSBmbGFnIHRvIGluc2VydC5cbiAqIEBwYXJhbSB2YWx1ZSAgICAgIFZhbHVlIG9mIHRoZSBmZWF0dXJlIGZsYWcuXG4gKiBAcGFyYW0gbWF4U2l6ZSAgICBNYXggbnVtYmVyIG9mIGZsYWdzIHRoZSBidWZmZXIgc2hvdWxkIHN0b3JlLiBEZWZhdWx0IHZhbHVlIHNob3VsZCBhbHdheXMgYmUgdXNlZCBpbiBwcm9kdWN0aW9uLlxuICovXG5mdW5jdGlvbiBfSU5URVJOQUxfaW5zZXJ0VG9GbGFnQnVmZmVyKFxuICBmbGFncyxcbiAgbmFtZSxcbiAgdmFsdWUsXG4gIG1heFNpemUsXG4pIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGZsYWdzLmxlbmd0aCA+IG1heFNpemUpIHtcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5lcnJvcihgW0ZlYXR1cmUgRmxhZ3NdIGluc2VydFRvRmxhZ0J1ZmZlciBjYWxsZWQgb24gYSBidWZmZXIgbGFyZ2VyIHRoYW4gbWF4U2l6ZT0ke21heFNpemV9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIGZsYWcgaXMgYWxyZWFkeSBpbiB0aGUgYnVmZmVyIC0gTyhuKVxuICBjb25zdCBpbmRleCA9IGZsYWdzLmZpbmRJbmRleChmID0+IGYuZmxhZyA9PT0gbmFtZSk7XG5cbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIC8vIFRoZSBmbGFnIHdhcyBmb3VuZCwgcmVtb3ZlIGl0IGZyb20gaXRzIGN1cnJlbnQgcG9zaXRpb24gLSBPKG4pXG4gICAgZmxhZ3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxuXG4gIGlmIChmbGFncy5sZW5ndGggPT09IG1heFNpemUpIHtcbiAgICAvLyBJZiBhdCBjYXBhY2l0eSwgcG9wIHRoZSBlYXJsaWVzdCBmbGFnIC0gTyhuKVxuICAgIGZsYWdzLnNoaWZ0KCk7XG4gIH1cblxuICAvLyBQdXNoIHRoZSBmbGFnIHRvIHRoZSBlbmQgLSBPKDEpXG4gIGZsYWdzLnB1c2goe1xuICAgIGZsYWc6IG5hbWUsXG4gICAgcmVzdWx0OiB2YWx1ZSxcbiAgfSk7XG59XG5cbi8qKlxuICogUmVjb3JkcyBhIGZlYXR1cmUgZmxhZyBldmFsdWF0aW9uIGZvciB0aGUgYWN0aXZlIHNwYW4uIFRoaXMgaXMgYSBuby1vcCBmb3Igbm9uLWJvb2xlYW4gdmFsdWVzLlxuICogVGhlIGZsYWcgYW5kIGl0cyB2YWx1ZSBpcyBzdG9yZWQgaW4gc3BhbiBhdHRyaWJ1dGVzIHdpdGggdGhlIGBmbGFnLmV2YWx1YXRpb25gIHByZWZpeC4gT25jZSB0aGVcbiAqIHVuaXF1ZSBmbGFncyBmb3IgYSBzcGFuIHJlYWNoZXMgbWF4RmxhZ3NQZXJTcGFuLCBzdWJzZXF1ZW50IGZsYWdzIGFyZSBkcm9wcGVkLlxuICpcbiAqIEBwYXJhbSBuYW1lICAgICAgICAgICAgIE5hbWUgb2YgdGhlIGZlYXR1cmUgZmxhZy5cbiAqIEBwYXJhbSB2YWx1ZSAgICAgICAgICAgIFZhbHVlIG9mIHRoZSBmZWF0dXJlIGZsYWcuIE5vbi1ib29sZWFuIHZhbHVlcyBhcmUgaWdub3JlZC5cbiAqIEBwYXJhbSBtYXhGbGFnc1BlclNwYW4gIE1heCBudW1iZXIgb2YgZmxhZ3MgYSBidWZmZXIgc2hvdWxkIHN0b3JlLiBEZWZhdWx0IHZhbHVlIHNob3VsZCBhbHdheXMgYmUgdXNlZCBpbiBwcm9kdWN0aW9uLlxuICovXG5mdW5jdGlvbiBfSU5URVJOQUxfYWRkRmVhdHVyZUZsYWdUb0FjdGl2ZVNwYW4oXG4gIG5hbWUsXG4gIHZhbHVlLFxuICBtYXhGbGFnc1BlclNwYW4gPSBfSU5URVJOQUxfTUFYX0ZMQUdTX1BFUl9TUEFOLFxuKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNwYW4gPSBnZXRBY3RpdmVTcGFuKCk7XG4gIGlmICghc3Bhbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSBzcGFuVG9KU09OKHNwYW4pLmRhdGE7XG5cbiAgLy8gSWYgdGhlIGZsYWcgYWxyZWFkeSBleGlzdHMsIGFsd2F5cyB1cGRhdGUgaXRcbiAgaWYgKGAke1NQQU5fRkxBR19BVFRSSUJVVEVfUFJFRklYfSR7bmFtZX1gIGluIGF0dHJpYnV0ZXMpIHtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZShgJHtTUEFOX0ZMQUdfQVRUUklCVVRFX1BSRUZJWH0ke25hbWV9YCwgdmFsdWUpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEVsc2UsIGFkZCB0aGUgZmxhZyB0byB0aGUgc3BhbiBpZiB3ZSBoYXZlIG5vdCByZWFjaGVkIHRoZSBtYXggbnVtYmVyIG9mIGZsYWdzXG4gIGNvbnN0IG51bU9mQWRkZWRGbGFncyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZpbHRlcihrZXkgPT4ga2V5LnN0YXJ0c1dpdGgoU1BBTl9GTEFHX0FUVFJJQlVURV9QUkVGSVgpKS5sZW5ndGg7XG4gIGlmIChudW1PZkFkZGVkRmxhZ3MgPCBtYXhGbGFnc1BlclNwYW4pIHtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZShgJHtTUEFOX0ZMQUdfQVRUUklCVVRFX1BSRUZJWH0ke25hbWV9YCwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCB7IF9JTlRFUk5BTF9GTEFHX0JVRkZFUl9TSVpFLCBfSU5URVJOQUxfTUFYX0ZMQUdTX1BFUl9TUEFOLCBfSU5URVJOQUxfYWRkRmVhdHVyZUZsYWdUb0FjdGl2ZVNwYW4sIF9JTlRFUk5BTF9jb3B5RmxhZ3NGcm9tU2NvcGVUb0V2ZW50LCBfSU5URVJOQUxfaW5zZXJ0RmxhZ1RvU2NvcGUsIF9JTlRFUk5BTF9pbnNlcnRUb0ZsYWdCdWZmZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZlYXR1cmVGbGFncy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/featureFlags.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/flushIfServerless.js":
/*!***************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/flushIfServerless.js ***!
  \***************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   flushIfServerless: () => (/* binding */ flushIfServerless)\n/* harmony export */ });\n/* harmony import */ var _exports_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../exports.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/exports.js\");\n/* harmony import */ var _debug_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _vercelWaitUntil_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./vercelWaitUntil.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/vercelWaitUntil.js\");\n/* harmony import */ var _worldwide_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js\");\n\n\n\n\n\nasync function flushWithTimeout(timeout) {\n  try {\n    _debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.log('Flushing events...');\n    await (0,_exports_js__WEBPACK_IMPORTED_MODULE_0__.flush)(timeout);\n    _debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.log('Done flushing events');\n  } catch (e) {\n    _debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.log('Error while flushing events:\\n', e);\n  }\n}\n\n/**\n *  Flushes the event queue with a timeout in serverless environments to ensure that events are sent to Sentry before the\n *  serverless function execution ends.\n *\n * The function is async, but in environments that support a `waitUntil` mechanism, it will run synchronously.\n *\n * This function is aware of the following serverless platforms:\n * - Cloudflare: If a Cloudflare context is provided, it will use `ctx.waitUntil()` to flush events (keeps the `this` context of `ctx`).\n *               If a `cloudflareWaitUntil` function is provided, it will use that to flush events (looses the `this` context of `ctx`).\n * - Vercel: It detects the Vercel environment and uses Vercel's `waitUntil` function.\n * - Other Serverless (AWS Lambda, Google Cloud, etc.): It detects the environment via environment variables\n *   and uses a regular `await flush()`.\n *\n *  @internal This function is supposed for internal Sentry SDK usage only.\n *  @hidden\n */\nasync function flushIfServerless(\n  params\n\n = {},\n) {\n  const { timeout = 2000 } = params;\n\n  if ('cloudflareWaitUntil' in params && typeof params?.cloudflareWaitUntil === 'function') {\n    params.cloudflareWaitUntil(flushWithTimeout(timeout));\n    return;\n  }\n\n  if ('cloudflareCtx' in params && typeof params.cloudflareCtx?.waitUntil === 'function') {\n    params.cloudflareCtx.waitUntil(flushWithTimeout(timeout));\n    return;\n  }\n\n  // @ts-expect-error This is not typed\n  if (_worldwide_js__WEBPACK_IMPORTED_MODULE_3__.GLOBAL_OBJ[Symbol.for('@vercel/request-context')]) {\n    // Vercel has a waitUntil equivalent that works without execution context\n    (0,_vercelWaitUntil_js__WEBPACK_IMPORTED_MODULE_2__.vercelWaitUntil)(flushWithTimeout(timeout));\n    return;\n  }\n\n  if (typeof process === 'undefined') {\n    return;\n  }\n\n  const isServerless =\n    !!process.env.FUNCTIONS_WORKER_RUNTIME || // Azure Functions\n    !!process.env.LAMBDA_TASK_ROOT || // AWS Lambda\n    !!process.env.K_SERVICE || // Google Cloud Run\n    !!process.env.CF_PAGES || // Cloudflare Pages\n    !!process.env.VERCEL ||\n    !!process.env.NETLIFY;\n\n  if (isServerless) {\n    // Use regular flush for environments without a generic waitUntil mechanism\n    await flushWithTimeout(timeout);\n  }\n}\n\n\n//# sourceMappingURL=flushIfServerless.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2ZsdXNoSWZTZXJ2ZXJsZXNzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFzQztBQUNJO0FBQ2E7QUFDWDs7QUFFNUM7QUFDQTtBQUNBLElBQUksbURBQUs7QUFDVCxVQUFVLGtEQUFLO0FBQ2YsSUFBSSxtREFBSztBQUNULElBQUk7QUFDSixJQUFJLG1EQUFLO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0EsVUFBVSxpQkFBaUI7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSxxREFBVTtBQUNoQjtBQUNBLElBQUksb0VBQWU7QUFDbkI7QUFDQTs7QUFFQSxhQUFhLE9BQU87QUFDcEI7QUFDQTs7QUFFQTtBQUNBLE1BQU0sT0FBTztBQUNiLE1BQU0sT0FBTztBQUNiLE1BQU0sT0FBTztBQUNiLE1BQU0sT0FBTztBQUNiLE1BQU0sT0FBTztBQUNiLE1BQU0sT0FBTzs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUU2QjtBQUM3QiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2ZsdXNoSWZTZXJ2ZXJsZXNzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZsdXNoIH0gZnJvbSAnLi4vZXhwb3J0cy5qcyc7XG5pbXBvcnQgeyBkZWJ1ZyB9IGZyb20gJy4vZGVidWctbG9nZ2VyLmpzJztcbmltcG9ydCB7IHZlcmNlbFdhaXRVbnRpbCB9IGZyb20gJy4vdmVyY2VsV2FpdFVudGlsLmpzJztcbmltcG9ydCB7IEdMT0JBTF9PQkogfSBmcm9tICcuL3dvcmxkd2lkZS5qcyc7XG5cbmFzeW5jIGZ1bmN0aW9uIGZsdXNoV2l0aFRpbWVvdXQodGltZW91dCkge1xuICB0cnkge1xuICAgIGRlYnVnLmxvZygnRmx1c2hpbmcgZXZlbnRzLi4uJyk7XG4gICAgYXdhaXQgZmx1c2godGltZW91dCk7XG4gICAgZGVidWcubG9nKCdEb25lIGZsdXNoaW5nIGV2ZW50cycpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZGVidWcubG9nKCdFcnJvciB3aGlsZSBmbHVzaGluZyBldmVudHM6XFxuJywgZSk7XG4gIH1cbn1cblxuLyoqXG4gKiAgRmx1c2hlcyB0aGUgZXZlbnQgcXVldWUgd2l0aCBhIHRpbWVvdXQgaW4gc2VydmVybGVzcyBlbnZpcm9ubWVudHMgdG8gZW5zdXJlIHRoYXQgZXZlbnRzIGFyZSBzZW50IHRvIFNlbnRyeSBiZWZvcmUgdGhlXG4gKiAgc2VydmVybGVzcyBmdW5jdGlvbiBleGVjdXRpb24gZW5kcy5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gaXMgYXN5bmMsIGJ1dCBpbiBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IGEgYHdhaXRVbnRpbGAgbWVjaGFuaXNtLCBpdCB3aWxsIHJ1biBzeW5jaHJvbm91c2x5LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgYXdhcmUgb2YgdGhlIGZvbGxvd2luZyBzZXJ2ZXJsZXNzIHBsYXRmb3JtczpcbiAqIC0gQ2xvdWRmbGFyZTogSWYgYSBDbG91ZGZsYXJlIGNvbnRleHQgaXMgcHJvdmlkZWQsIGl0IHdpbGwgdXNlIGBjdHgud2FpdFVudGlsKClgIHRvIGZsdXNoIGV2ZW50cyAoa2VlcHMgdGhlIGB0aGlzYCBjb250ZXh0IG9mIGBjdHhgKS5cbiAqICAgICAgICAgICAgICAgSWYgYSBgY2xvdWRmbGFyZVdhaXRVbnRpbGAgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIGl0IHdpbGwgdXNlIHRoYXQgdG8gZmx1c2ggZXZlbnRzIChsb29zZXMgdGhlIGB0aGlzYCBjb250ZXh0IG9mIGBjdHhgKS5cbiAqIC0gVmVyY2VsOiBJdCBkZXRlY3RzIHRoZSBWZXJjZWwgZW52aXJvbm1lbnQgYW5kIHVzZXMgVmVyY2VsJ3MgYHdhaXRVbnRpbGAgZnVuY3Rpb24uXG4gKiAtIE90aGVyIFNlcnZlcmxlc3MgKEFXUyBMYW1iZGEsIEdvb2dsZSBDbG91ZCwgZXRjLik6IEl0IGRldGVjdHMgdGhlIGVudmlyb25tZW50IHZpYSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAqICAgYW5kIHVzZXMgYSByZWd1bGFyIGBhd2FpdCBmbHVzaCgpYC5cbiAqXG4gKiAgQGludGVybmFsIFRoaXMgZnVuY3Rpb24gaXMgc3VwcG9zZWQgZm9yIGludGVybmFsIFNlbnRyeSBTREsgdXNhZ2Ugb25seS5cbiAqICBAaGlkZGVuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZsdXNoSWZTZXJ2ZXJsZXNzKFxuICBwYXJhbXNcblxuID0ge30sXG4pIHtcbiAgY29uc3QgeyB0aW1lb3V0ID0gMjAwMCB9ID0gcGFyYW1zO1xuXG4gIGlmICgnY2xvdWRmbGFyZVdhaXRVbnRpbCcgaW4gcGFyYW1zICYmIHR5cGVvZiBwYXJhbXM/LmNsb3VkZmxhcmVXYWl0VW50aWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICBwYXJhbXMuY2xvdWRmbGFyZVdhaXRVbnRpbChmbHVzaFdpdGhUaW1lb3V0KHRpbWVvdXQpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoJ2Nsb3VkZmxhcmVDdHgnIGluIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zLmNsb3VkZmxhcmVDdHg/LndhaXRVbnRpbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHBhcmFtcy5jbG91ZGZsYXJlQ3R4LndhaXRVbnRpbChmbHVzaFdpdGhUaW1lb3V0KHRpbWVvdXQpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBAdHMtZXhwZWN0LWVycm9yIFRoaXMgaXMgbm90IHR5cGVkXG4gIGlmIChHTE9CQUxfT0JKW1N5bWJvbC5mb3IoJ0B2ZXJjZWwvcmVxdWVzdC1jb250ZXh0JyldKSB7XG4gICAgLy8gVmVyY2VsIGhhcyBhIHdhaXRVbnRpbCBlcXVpdmFsZW50IHRoYXQgd29ya3Mgd2l0aG91dCBleGVjdXRpb24gY29udGV4dFxuICAgIHZlcmNlbFdhaXRVbnRpbChmbHVzaFdpdGhUaW1lb3V0KHRpbWVvdXQpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaXNTZXJ2ZXJsZXNzID1cbiAgICAhIXByb2Nlc3MuZW52LkZVTkNUSU9OU19XT1JLRVJfUlVOVElNRSB8fCAvLyBBenVyZSBGdW5jdGlvbnNcbiAgICAhIXByb2Nlc3MuZW52LkxBTUJEQV9UQVNLX1JPT1QgfHwgLy8gQVdTIExhbWJkYVxuICAgICEhcHJvY2Vzcy5lbnYuS19TRVJWSUNFIHx8IC8vIEdvb2dsZSBDbG91ZCBSdW5cbiAgICAhIXByb2Nlc3MuZW52LkNGX1BBR0VTIHx8IC8vIENsb3VkZmxhcmUgUGFnZXNcbiAgICAhIXByb2Nlc3MuZW52LlZFUkNFTCB8fFxuICAgICEhcHJvY2Vzcy5lbnYuTkVUTElGWTtcblxuICBpZiAoaXNTZXJ2ZXJsZXNzKSB7XG4gICAgLy8gVXNlIHJlZ3VsYXIgZmx1c2ggZm9yIGVudmlyb25tZW50cyB3aXRob3V0IGEgZ2VuZXJpYyB3YWl0VW50aWwgbWVjaGFuaXNtXG4gICAgYXdhaXQgZmx1c2hXaXRoVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuXG5leHBvcnQgeyBmbHVzaElmU2VydmVybGVzcyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zmx1c2hJZlNlcnZlcmxlc3MuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/flushIfServerless.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/gen-ai-attributes.js":
/*!***************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/gen-ai-attributes.js ***!
  \***************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   GEN_AI_OPERATION_NAME_ATTRIBUTE: () => (/* binding */ GEN_AI_OPERATION_NAME_ATTRIBUTE),\n/* harmony export */   GEN_AI_REQUEST_FREQUENCY_PENALTY_ATTRIBUTE: () => (/* binding */ GEN_AI_REQUEST_FREQUENCY_PENALTY_ATTRIBUTE),\n/* harmony export */   GEN_AI_REQUEST_MESSAGES_ATTRIBUTE: () => (/* binding */ GEN_AI_REQUEST_MESSAGES_ATTRIBUTE),\n/* harmony export */   GEN_AI_REQUEST_MODEL_ATTRIBUTE: () => (/* binding */ GEN_AI_REQUEST_MODEL_ATTRIBUTE),\n/* harmony export */   GEN_AI_REQUEST_PRESENCE_PENALTY_ATTRIBUTE: () => (/* binding */ GEN_AI_REQUEST_PRESENCE_PENALTY_ATTRIBUTE),\n/* harmony export */   GEN_AI_REQUEST_TEMPERATURE_ATTRIBUTE: () => (/* binding */ GEN_AI_REQUEST_TEMPERATURE_ATTRIBUTE),\n/* harmony export */   GEN_AI_REQUEST_TOP_P_ATTRIBUTE: () => (/* binding */ GEN_AI_REQUEST_TOP_P_ATTRIBUTE),\n/* harmony export */   GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE: () => (/* binding */ GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE),\n/* harmony export */   GEN_AI_RESPONSE_ID_ATTRIBUTE: () => (/* binding */ GEN_AI_RESPONSE_ID_ATTRIBUTE),\n/* harmony export */   GEN_AI_RESPONSE_MODEL_ATTRIBUTE: () => (/* binding */ GEN_AI_RESPONSE_MODEL_ATTRIBUTE),\n/* harmony export */   GEN_AI_RESPONSE_TEXT_ATTRIBUTE: () => (/* binding */ GEN_AI_RESPONSE_TEXT_ATTRIBUTE),\n/* harmony export */   GEN_AI_SYSTEM_ATTRIBUTE: () => (/* binding */ GEN_AI_SYSTEM_ATTRIBUTE),\n/* harmony export */   GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE: () => (/* binding */ GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE),\n/* harmony export */   GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE: () => (/* binding */ GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE),\n/* harmony export */   GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE: () => (/* binding */ GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE),\n/* harmony export */   OPENAI_OPERATIONS: () => (/* binding */ OPENAI_OPERATIONS),\n/* harmony export */   OPENAI_RESPONSE_ID_ATTRIBUTE: () => (/* binding */ OPENAI_RESPONSE_ID_ATTRIBUTE),\n/* harmony export */   OPENAI_RESPONSE_MODEL_ATTRIBUTE: () => (/* binding */ OPENAI_RESPONSE_MODEL_ATTRIBUTE),\n/* harmony export */   OPENAI_RESPONSE_TIMESTAMP_ATTRIBUTE: () => (/* binding */ OPENAI_RESPONSE_TIMESTAMP_ATTRIBUTE),\n/* harmony export */   OPENAI_USAGE_COMPLETION_TOKENS_ATTRIBUTE: () => (/* binding */ OPENAI_USAGE_COMPLETION_TOKENS_ATTRIBUTE),\n/* harmony export */   OPENAI_USAGE_PROMPT_TOKENS_ATTRIBUTE: () => (/* binding */ OPENAI_USAGE_PROMPT_TOKENS_ATTRIBUTE)\n/* harmony export */ });\n/**\n * OpenAI Integration Telemetry Attributes\n * Based on OpenTelemetry Semantic Conventions for Generative AI\n * @see https://opentelemetry.io/docs/specs/semconv/gen-ai/\n */\n\n// =============================================================================\n// OPENTELEMETRY SEMANTIC CONVENTIONS FOR GENAI\n// =============================================================================\n\n/**\n * The Generative AI system being used\n * For OpenAI, this should always be \"openai\"\n */\nconst GEN_AI_SYSTEM_ATTRIBUTE = 'gen_ai.system';\n\n/**\n * The name of the model as requested\n * Examples: \"gpt-4\", \"gpt-3.5-turbo\"\n */\nconst GEN_AI_REQUEST_MODEL_ATTRIBUTE = 'gen_ai.request.model';\n\n/**\n * The temperature setting for the model request\n */\nconst GEN_AI_REQUEST_TEMPERATURE_ATTRIBUTE = 'gen_ai.request.temperature';\n\n/**\n * The frequency penalty setting for the model request\n */\nconst GEN_AI_REQUEST_FREQUENCY_PENALTY_ATTRIBUTE = 'gen_ai.request.frequency_penalty';\n\n/**\n * The presence penalty setting for the model request\n */\nconst GEN_AI_REQUEST_PRESENCE_PENALTY_ATTRIBUTE = 'gen_ai.request.presence_penalty';\n\n/**\n * The top_p (nucleus sampling) setting for the model request\n */\nconst GEN_AI_REQUEST_TOP_P_ATTRIBUTE = 'gen_ai.request.top_p';\n\n/**\n * Array of reasons why the model stopped generating tokens\n */\nconst GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE = 'gen_ai.response.finish_reasons';\n\n/**\n * The name of the model that generated the response\n */\nconst GEN_AI_RESPONSE_MODEL_ATTRIBUTE = 'gen_ai.response.model';\n\n/**\n * The unique identifier for the response\n */\nconst GEN_AI_RESPONSE_ID_ATTRIBUTE = 'gen_ai.response.id';\n\n/**\n * The number of tokens used in the prompt\n */\nconst GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE = 'gen_ai.usage.input_tokens';\n\n/**\n * The number of tokens used in the response\n */\nconst GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE = 'gen_ai.usage.output_tokens';\n\n/**\n * The total number of tokens used (input + output)\n */\nconst GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE = 'gen_ai.usage.total_tokens';\n\n/**\n * The operation name for OpenAI API calls\n */\nconst GEN_AI_OPERATION_NAME_ATTRIBUTE = 'gen_ai.operation.name';\n\n/**\n * The prompt messages sent to OpenAI (stringified JSON)\n * Only recorded when recordInputs is enabled\n */\nconst GEN_AI_REQUEST_MESSAGES_ATTRIBUTE = 'gen_ai.request.messages';\n\n/**\n * The response text from OpenAI (stringified JSON array)\n * Only recorded when recordOutputs is enabled\n */\nconst GEN_AI_RESPONSE_TEXT_ATTRIBUTE = 'gen_ai.response.text';\n\n// =============================================================================\n// OPENAI-SPECIFIC ATTRIBUTES\n// =============================================================================\n\n/**\n * The response ID from OpenAI\n */\nconst OPENAI_RESPONSE_ID_ATTRIBUTE = 'openai.response.id';\n\n/**\n * The response model from OpenAI\n */\nconst OPENAI_RESPONSE_MODEL_ATTRIBUTE = 'openai.response.model';\n\n/**\n * The response timestamp from OpenAI (ISO string)\n */\nconst OPENAI_RESPONSE_TIMESTAMP_ATTRIBUTE = 'openai.response.timestamp';\n\n/**\n * The number of completion tokens used (OpenAI specific)\n */\nconst OPENAI_USAGE_COMPLETION_TOKENS_ATTRIBUTE = 'openai.usage.completion_tokens';\n\n/**\n * The number of prompt tokens used (OpenAI specific)\n */\nconst OPENAI_USAGE_PROMPT_TOKENS_ATTRIBUTE = 'openai.usage.prompt_tokens';\n\n// =============================================================================\n// OPENAI OPERATIONS\n// =============================================================================\n\n/**\n * OpenAI API operations\n */\nconst OPENAI_OPERATIONS = {\n  CHAT: 'chat',\n} ;\n\n\n//# sourceMappingURL=gen-ai-attributes.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2dlbi1haS1hdHRyaWJ1dGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRW91QjtBQUNwdUIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS91dGlscy9nZW4tYWktYXR0cmlidXRlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE9wZW5BSSBJbnRlZ3JhdGlvbiBUZWxlbWV0cnkgQXR0cmlidXRlc1xuICogQmFzZWQgb24gT3BlblRlbGVtZXRyeSBTZW1hbnRpYyBDb252ZW50aW9ucyBmb3IgR2VuZXJhdGl2ZSBBSVxuICogQHNlZSBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L2dlbi1haS9cbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT1BFTlRFTEVNRVRSWSBTRU1BTlRJQyBDT05WRU5USU9OUyBGT1IgR0VOQUlcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVGhlIEdlbmVyYXRpdmUgQUkgc3lzdGVtIGJlaW5nIHVzZWRcbiAqIEZvciBPcGVuQUksIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSBcIm9wZW5haVwiXG4gKi9cbmNvbnN0IEdFTl9BSV9TWVNURU1fQVRUUklCVVRFID0gJ2dlbl9haS5zeXN0ZW0nO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBtb2RlbCBhcyByZXF1ZXN0ZWRcbiAqIEV4YW1wbGVzOiBcImdwdC00XCIsIFwiZ3B0LTMuNS10dXJib1wiXG4gKi9cbmNvbnN0IEdFTl9BSV9SRVFVRVNUX01PREVMX0FUVFJJQlVURSA9ICdnZW5fYWkucmVxdWVzdC5tb2RlbCc7XG5cbi8qKlxuICogVGhlIHRlbXBlcmF0dXJlIHNldHRpbmcgZm9yIHRoZSBtb2RlbCByZXF1ZXN0XG4gKi9cbmNvbnN0IEdFTl9BSV9SRVFVRVNUX1RFTVBFUkFUVVJFX0FUVFJJQlVURSA9ICdnZW5fYWkucmVxdWVzdC50ZW1wZXJhdHVyZSc7XG5cbi8qKlxuICogVGhlIGZyZXF1ZW5jeSBwZW5hbHR5IHNldHRpbmcgZm9yIHRoZSBtb2RlbCByZXF1ZXN0XG4gKi9cbmNvbnN0IEdFTl9BSV9SRVFVRVNUX0ZSRVFVRU5DWV9QRU5BTFRZX0FUVFJJQlVURSA9ICdnZW5fYWkucmVxdWVzdC5mcmVxdWVuY3lfcGVuYWx0eSc7XG5cbi8qKlxuICogVGhlIHByZXNlbmNlIHBlbmFsdHkgc2V0dGluZyBmb3IgdGhlIG1vZGVsIHJlcXVlc3RcbiAqL1xuY29uc3QgR0VOX0FJX1JFUVVFU1RfUFJFU0VOQ0VfUEVOQUxUWV9BVFRSSUJVVEUgPSAnZ2VuX2FpLnJlcXVlc3QucHJlc2VuY2VfcGVuYWx0eSc7XG5cbi8qKlxuICogVGhlIHRvcF9wIChudWNsZXVzIHNhbXBsaW5nKSBzZXR0aW5nIGZvciB0aGUgbW9kZWwgcmVxdWVzdFxuICovXG5jb25zdCBHRU5fQUlfUkVRVUVTVF9UT1BfUF9BVFRSSUJVVEUgPSAnZ2VuX2FpLnJlcXVlc3QudG9wX3AnO1xuXG4vKipcbiAqIEFycmF5IG9mIHJlYXNvbnMgd2h5IHRoZSBtb2RlbCBzdG9wcGVkIGdlbmVyYXRpbmcgdG9rZW5zXG4gKi9cbmNvbnN0IEdFTl9BSV9SRVNQT05TRV9GSU5JU0hfUkVBU09OU19BVFRSSUJVVEUgPSAnZ2VuX2FpLnJlc3BvbnNlLmZpbmlzaF9yZWFzb25zJztcblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbW9kZWwgdGhhdCBnZW5lcmF0ZWQgdGhlIHJlc3BvbnNlXG4gKi9cbmNvbnN0IEdFTl9BSV9SRVNQT05TRV9NT0RFTF9BVFRSSUJVVEUgPSAnZ2VuX2FpLnJlc3BvbnNlLm1vZGVsJztcblxuLyoqXG4gKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSByZXNwb25zZVxuICovXG5jb25zdCBHRU5fQUlfUkVTUE9OU0VfSURfQVRUUklCVVRFID0gJ2dlbl9haS5yZXNwb25zZS5pZCc7XG5cbi8qKlxuICogVGhlIG51bWJlciBvZiB0b2tlbnMgdXNlZCBpbiB0aGUgcHJvbXB0XG4gKi9cbmNvbnN0IEdFTl9BSV9VU0FHRV9JTlBVVF9UT0tFTlNfQVRUUklCVVRFID0gJ2dlbl9haS51c2FnZS5pbnB1dF90b2tlbnMnO1xuXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgdG9rZW5zIHVzZWQgaW4gdGhlIHJlc3BvbnNlXG4gKi9cbmNvbnN0IEdFTl9BSV9VU0FHRV9PVVRQVVRfVE9LRU5TX0FUVFJJQlVURSA9ICdnZW5fYWkudXNhZ2Uub3V0cHV0X3Rva2Vucyc7XG5cbi8qKlxuICogVGhlIHRvdGFsIG51bWJlciBvZiB0b2tlbnMgdXNlZCAoaW5wdXQgKyBvdXRwdXQpXG4gKi9cbmNvbnN0IEdFTl9BSV9VU0FHRV9UT1RBTF9UT0tFTlNfQVRUUklCVVRFID0gJ2dlbl9haS51c2FnZS50b3RhbF90b2tlbnMnO1xuXG4vKipcbiAqIFRoZSBvcGVyYXRpb24gbmFtZSBmb3IgT3BlbkFJIEFQSSBjYWxsc1xuICovXG5jb25zdCBHRU5fQUlfT1BFUkFUSU9OX05BTUVfQVRUUklCVVRFID0gJ2dlbl9haS5vcGVyYXRpb24ubmFtZSc7XG5cbi8qKlxuICogVGhlIHByb21wdCBtZXNzYWdlcyBzZW50IHRvIE9wZW5BSSAoc3RyaW5naWZpZWQgSlNPTilcbiAqIE9ubHkgcmVjb3JkZWQgd2hlbiByZWNvcmRJbnB1dHMgaXMgZW5hYmxlZFxuICovXG5jb25zdCBHRU5fQUlfUkVRVUVTVF9NRVNTQUdFU19BVFRSSUJVVEUgPSAnZ2VuX2FpLnJlcXVlc3QubWVzc2FnZXMnO1xuXG4vKipcbiAqIFRoZSByZXNwb25zZSB0ZXh0IGZyb20gT3BlbkFJIChzdHJpbmdpZmllZCBKU09OIGFycmF5KVxuICogT25seSByZWNvcmRlZCB3aGVuIHJlY29yZE91dHB1dHMgaXMgZW5hYmxlZFxuICovXG5jb25zdCBHRU5fQUlfUkVTUE9OU0VfVEVYVF9BVFRSSUJVVEUgPSAnZ2VuX2FpLnJlc3BvbnNlLnRleHQnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT1BFTkFJLVNQRUNJRklDIEFUVFJJQlVURVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVGhlIHJlc3BvbnNlIElEIGZyb20gT3BlbkFJXG4gKi9cbmNvbnN0IE9QRU5BSV9SRVNQT05TRV9JRF9BVFRSSUJVVEUgPSAnb3BlbmFpLnJlc3BvbnNlLmlkJztcblxuLyoqXG4gKiBUaGUgcmVzcG9uc2UgbW9kZWwgZnJvbSBPcGVuQUlcbiAqL1xuY29uc3QgT1BFTkFJX1JFU1BPTlNFX01PREVMX0FUVFJJQlVURSA9ICdvcGVuYWkucmVzcG9uc2UubW9kZWwnO1xuXG4vKipcbiAqIFRoZSByZXNwb25zZSB0aW1lc3RhbXAgZnJvbSBPcGVuQUkgKElTTyBzdHJpbmcpXG4gKi9cbmNvbnN0IE9QRU5BSV9SRVNQT05TRV9USU1FU1RBTVBfQVRUUklCVVRFID0gJ29wZW5haS5yZXNwb25zZS50aW1lc3RhbXAnO1xuXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgY29tcGxldGlvbiB0b2tlbnMgdXNlZCAoT3BlbkFJIHNwZWNpZmljKVxuICovXG5jb25zdCBPUEVOQUlfVVNBR0VfQ09NUExFVElPTl9UT0tFTlNfQVRUUklCVVRFID0gJ29wZW5haS51c2FnZS5jb21wbGV0aW9uX3Rva2Vucyc7XG5cbi8qKlxuICogVGhlIG51bWJlciBvZiBwcm9tcHQgdG9rZW5zIHVzZWQgKE9wZW5BSSBzcGVjaWZpYylcbiAqL1xuY29uc3QgT1BFTkFJX1VTQUdFX1BST01QVF9UT0tFTlNfQVRUUklCVVRFID0gJ29wZW5haS51c2FnZS5wcm9tcHRfdG9rZW5zJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE9QRU5BSSBPUEVSQVRJT05TXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIE9wZW5BSSBBUEkgb3BlcmF0aW9uc1xuICovXG5jb25zdCBPUEVOQUlfT1BFUkFUSU9OUyA9IHtcbiAgQ0hBVDogJ2NoYXQnLFxufSA7XG5cbmV4cG9ydCB7IEdFTl9BSV9PUEVSQVRJT05fTkFNRV9BVFRSSUJVVEUsIEdFTl9BSV9SRVFVRVNUX0ZSRVFVRU5DWV9QRU5BTFRZX0FUVFJJQlVURSwgR0VOX0FJX1JFUVVFU1RfTUVTU0FHRVNfQVRUUklCVVRFLCBHRU5fQUlfUkVRVUVTVF9NT0RFTF9BVFRSSUJVVEUsIEdFTl9BSV9SRVFVRVNUX1BSRVNFTkNFX1BFTkFMVFlfQVRUUklCVVRFLCBHRU5fQUlfUkVRVUVTVF9URU1QRVJBVFVSRV9BVFRSSUJVVEUsIEdFTl9BSV9SRVFVRVNUX1RPUF9QX0FUVFJJQlVURSwgR0VOX0FJX1JFU1BPTlNFX0ZJTklTSF9SRUFTT05TX0FUVFJJQlVURSwgR0VOX0FJX1JFU1BPTlNFX0lEX0FUVFJJQlVURSwgR0VOX0FJX1JFU1BPTlNFX01PREVMX0FUVFJJQlVURSwgR0VOX0FJX1JFU1BPTlNFX1RFWFRfQVRUUklCVVRFLCBHRU5fQUlfU1lTVEVNX0FUVFJJQlVURSwgR0VOX0FJX1VTQUdFX0lOUFVUX1RPS0VOU19BVFRSSUJVVEUsIEdFTl9BSV9VU0FHRV9PVVRQVVRfVE9LRU5TX0FUVFJJQlVURSwgR0VOX0FJX1VTQUdFX1RPVEFMX1RPS0VOU19BVFRSSUJVVEUsIE9QRU5BSV9PUEVSQVRJT05TLCBPUEVOQUlfUkVTUE9OU0VfSURfQVRUUklCVVRFLCBPUEVOQUlfUkVTUE9OU0VfTU9ERUxfQVRUUklCVVRFLCBPUEVOQUlfUkVTUE9OU0VfVElNRVNUQU1QX0FUVFJJQlVURSwgT1BFTkFJX1VTQUdFX0NPTVBMRVRJT05fVE9LRU5TX0FUVFJJQlVURSwgT1BFTkFJX1VTQUdFX1BST01QVF9UT0tFTlNfQVRUUklCVVRFIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZW4tYWktYXR0cmlidXRlcy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/gen-ai-attributes.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/handleCallbackErrors.js":
/*!******************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/handleCallbackErrors.js ***!
  \******************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   handleCallbackErrors: () => (/* binding */ handleCallbackErrors)\n/* harmony export */ });\n/* harmony import */ var _is_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n\n\n/**\n * Wrap a callback function with error handling.\n * If an error is thrown, it will be passed to the `onError` callback and re-thrown.\n *\n * If the return value of the function is a promise, it will be handled with `maybeHandlePromiseRejection`.\n *\n * If an `onFinally` callback is provided, this will be called when the callback has finished\n * - so if it returns a promise, once the promise resolved/rejected,\n * else once the callback has finished executing.\n * The `onFinally` callback will _always_ be called, no matter if an error was thrown or not.\n */\nfunction handleCallbackErrors\n\n(fn, onError, onFinally = () => {}) {\n  let maybePromiseResult;\n  try {\n    maybePromiseResult = fn();\n  } catch (e) {\n    onError(e);\n    onFinally();\n    throw e;\n  }\n\n  return maybeHandlePromiseRejection(maybePromiseResult, onError, onFinally);\n}\n\n/**\n * Maybe handle a promise rejection.\n * This expects to be given a value that _may_ be a promise, or any other value.\n * If it is a promise, and it rejects, it will call the `onError` callback.\n * Other than this, it will generally return the given value as-is.\n */\nfunction maybeHandlePromiseRejection(\n  value,\n  onError,\n  onFinally,\n) {\n  if ((0,_is_js__WEBPACK_IMPORTED_MODULE_0__.isThenable)(value)) {\n    // @ts-expect-error - the isThenable check returns the \"wrong\" type here\n    return value.then(\n      res => {\n        onFinally();\n        return res;\n      },\n      e => {\n        onError(e);\n        onFinally();\n        throw e;\n      },\n    );\n  }\n\n  onFinally();\n  return value;\n}\n\n\n//# sourceMappingURL=handleCallbackErrors.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2hhbmRsZUNhbGxiYWNrRXJyb3JzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLGtEQUFVO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWdDO0FBQ2hDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvaGFuZGxlQ2FsbGJhY2tFcnJvcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNUaGVuYWJsZSB9IGZyb20gJy4vaXMuanMnO1xuXG4vKipcbiAqIFdyYXAgYSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIGVycm9yIGhhbmRsaW5nLlxuICogSWYgYW4gZXJyb3IgaXMgdGhyb3duLCBpdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgYG9uRXJyb3JgIGNhbGxiYWNrIGFuZCByZS10aHJvd24uXG4gKlxuICogSWYgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gaXMgYSBwcm9taXNlLCBpdCB3aWxsIGJlIGhhbmRsZWQgd2l0aCBgbWF5YmVIYW5kbGVQcm9taXNlUmVqZWN0aW9uYC5cbiAqXG4gKiBJZiBhbiBgb25GaW5hbGx5YCBjYWxsYmFjayBpcyBwcm92aWRlZCwgdGhpcyB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBjYWxsYmFjayBoYXMgZmluaXNoZWRcbiAqIC0gc28gaWYgaXQgcmV0dXJucyBhIHByb21pc2UsIG9uY2UgdGhlIHByb21pc2UgcmVzb2x2ZWQvcmVqZWN0ZWQsXG4gKiBlbHNlIG9uY2UgdGhlIGNhbGxiYWNrIGhhcyBmaW5pc2hlZCBleGVjdXRpbmcuXG4gKiBUaGUgYG9uRmluYWxseWAgY2FsbGJhY2sgd2lsbCBfYWx3YXlzXyBiZSBjYWxsZWQsIG5vIG1hdHRlciBpZiBhbiBlcnJvciB3YXMgdGhyb3duIG9yIG5vdC5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlQ2FsbGJhY2tFcnJvcnNcblxuKGZuLCBvbkVycm9yLCBvbkZpbmFsbHkgPSAoKSA9PiB7fSkge1xuICBsZXQgbWF5YmVQcm9taXNlUmVzdWx0O1xuICB0cnkge1xuICAgIG1heWJlUHJvbWlzZVJlc3VsdCA9IGZuKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvbkVycm9yKGUpO1xuICAgIG9uRmluYWxseSgpO1xuICAgIHRocm93IGU7XG4gIH1cblxuICByZXR1cm4gbWF5YmVIYW5kbGVQcm9taXNlUmVqZWN0aW9uKG1heWJlUHJvbWlzZVJlc3VsdCwgb25FcnJvciwgb25GaW5hbGx5KTtcbn1cblxuLyoqXG4gKiBNYXliZSBoYW5kbGUgYSBwcm9taXNlIHJlamVjdGlvbi5cbiAqIFRoaXMgZXhwZWN0cyB0byBiZSBnaXZlbiBhIHZhbHVlIHRoYXQgX21heV8gYmUgYSBwcm9taXNlLCBvciBhbnkgb3RoZXIgdmFsdWUuXG4gKiBJZiBpdCBpcyBhIHByb21pc2UsIGFuZCBpdCByZWplY3RzLCBpdCB3aWxsIGNhbGwgdGhlIGBvbkVycm9yYCBjYWxsYmFjay5cbiAqIE90aGVyIHRoYW4gdGhpcywgaXQgd2lsbCBnZW5lcmFsbHkgcmV0dXJuIHRoZSBnaXZlbiB2YWx1ZSBhcy1pcy5cbiAqL1xuZnVuY3Rpb24gbWF5YmVIYW5kbGVQcm9taXNlUmVqZWN0aW9uKFxuICB2YWx1ZSxcbiAgb25FcnJvcixcbiAgb25GaW5hbGx5LFxuKSB7XG4gIGlmIChpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSB0aGUgaXNUaGVuYWJsZSBjaGVjayByZXR1cm5zIHRoZSBcIndyb25nXCIgdHlwZSBoZXJlXG4gICAgcmV0dXJuIHZhbHVlLnRoZW4oXG4gICAgICByZXMgPT4ge1xuICAgICAgICBvbkZpbmFsbHkoKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0sXG4gICAgICBlID0+IHtcbiAgICAgICAgb25FcnJvcihlKTtcbiAgICAgICAgb25GaW5hbGx5KCk7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBvbkZpbmFsbHkoKTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgeyBoYW5kbGVDYWxsYmFja0Vycm9ycyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFuZGxlQ2FsbGJhY2tFcnJvcnMuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/handleCallbackErrors.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/hasSpansEnabled.js":
/*!*************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/hasSpansEnabled.js ***!
  \*************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   hasSpansEnabled: () => (/* binding */ hasSpansEnabled),\n/* harmony export */   hasTracingEnabled: () => (/* binding */ hasTracingEnabled)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n\n\n// Treeshakable guard to remove all code related to tracing\n\n/**\n * Determines if span recording is currently enabled.\n *\n * Spans are recorded when at least one of `tracesSampleRate` and `tracesSampler`\n * is defined in the SDK config. This function does not make any assumption about\n * sampling decisions, it only checks if the SDK is configured to record spans.\n *\n * Important: This function only determines if span recording is enabled. Trace\n * continuation and propagation is separately controlled and not covered by this function.\n * If this function returns `false`, traces can still be propagated (which is what\n * we refer to by \"Tracing without Performance\")\n * @see https://develop.sentry.dev/sdk/telemetry/traces/tracing-without-performance/\n *\n * @param maybeOptions An SDK options object to be passed to this function.\n * If this option is not provided, the function will use the current client's options.\n */\nfunction hasSpansEnabled(\n  maybeOptions,\n) {\n  if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {\n    return false;\n  }\n\n  const options = maybeOptions || (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getClient)()?.getOptions();\n  return (\n    !!options &&\n    // Note: This check is `!= null`, meaning \"nullish\". `0` is not \"nullish\", `undefined` and `null` are. (This comment was brought to you by 15 minutes of questioning life)\n    (options.tracesSampleRate != null || !!options.tracesSampler)\n  );\n}\n\n/**\n * @see JSDoc of `hasSpansEnabled`\n * @deprecated Use `hasSpansEnabled` instead, which is a more accurately named version of this function.\n * This function will be removed in the next major version of the SDK.\n */\n// TODO(v10): Remove this export\nconst hasTracingEnabled = hasSpansEnabled;\n\n\n//# sourceMappingURL=hasSpansEnabled.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2hhc1NwYW5zRW5hYmxlZC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBZ0Q7O0FBRWhEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQyw0REFBUztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRThDO0FBQzlDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvaGFzU3BhbnNFbmFibGVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldENsaWVudCB9IGZyb20gJy4uL2N1cnJlbnRTY29wZXMuanMnO1xuXG4vLyBUcmVlc2hha2FibGUgZ3VhcmQgdG8gcmVtb3ZlIGFsbCBjb2RlIHJlbGF0ZWQgdG8gdHJhY2luZ1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgc3BhbiByZWNvcmRpbmcgaXMgY3VycmVudGx5IGVuYWJsZWQuXG4gKlxuICogU3BhbnMgYXJlIHJlY29yZGVkIHdoZW4gYXQgbGVhc3Qgb25lIG9mIGB0cmFjZXNTYW1wbGVSYXRlYCBhbmQgYHRyYWNlc1NhbXBsZXJgXG4gKiBpcyBkZWZpbmVkIGluIHRoZSBTREsgY29uZmlnLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IG1ha2UgYW55IGFzc3VtcHRpb24gYWJvdXRcbiAqIHNhbXBsaW5nIGRlY2lzaW9ucywgaXQgb25seSBjaGVja3MgaWYgdGhlIFNESyBpcyBjb25maWd1cmVkIHRvIHJlY29yZCBzcGFucy5cbiAqXG4gKiBJbXBvcnRhbnQ6IFRoaXMgZnVuY3Rpb24gb25seSBkZXRlcm1pbmVzIGlmIHNwYW4gcmVjb3JkaW5nIGlzIGVuYWJsZWQuIFRyYWNlXG4gKiBjb250aW51YXRpb24gYW5kIHByb3BhZ2F0aW9uIGlzIHNlcGFyYXRlbHkgY29udHJvbGxlZCBhbmQgbm90IGNvdmVyZWQgYnkgdGhpcyBmdW5jdGlvbi5cbiAqIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBgZmFsc2VgLCB0cmFjZXMgY2FuIHN0aWxsIGJlIHByb3BhZ2F0ZWQgKHdoaWNoIGlzIHdoYXRcbiAqIHdlIHJlZmVyIHRvIGJ5IFwiVHJhY2luZyB3aXRob3V0IFBlcmZvcm1hbmNlXCIpXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcC5zZW50cnkuZGV2L3Nkay90ZWxlbWV0cnkvdHJhY2VzL3RyYWNpbmctd2l0aG91dC1wZXJmb3JtYW5jZS9cbiAqXG4gKiBAcGFyYW0gbWF5YmVPcHRpb25zIEFuIFNESyBvcHRpb25zIG9iamVjdCB0byBiZSBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbi5cbiAqIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIHdpbGwgdXNlIHRoZSBjdXJyZW50IGNsaWVudCdzIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGhhc1NwYW5zRW5hYmxlZChcbiAgbWF5YmVPcHRpb25zLFxuKSB7XG4gIGlmICh0eXBlb2YgX19TRU5UUllfVFJBQ0lOR19fID09PSAnYm9vbGVhbicgJiYgIV9fU0VOVFJZX1RSQUNJTkdfXykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSBtYXliZU9wdGlvbnMgfHwgZ2V0Q2xpZW50KCk/LmdldE9wdGlvbnMoKTtcbiAgcmV0dXJuIChcbiAgICAhIW9wdGlvbnMgJiZcbiAgICAvLyBOb3RlOiBUaGlzIGNoZWNrIGlzIGAhPSBudWxsYCwgbWVhbmluZyBcIm51bGxpc2hcIi4gYDBgIGlzIG5vdCBcIm51bGxpc2hcIiwgYHVuZGVmaW5lZGAgYW5kIGBudWxsYCBhcmUuIChUaGlzIGNvbW1lbnQgd2FzIGJyb3VnaHQgdG8geW91IGJ5IDE1IG1pbnV0ZXMgb2YgcXVlc3Rpb25pbmcgbGlmZSlcbiAgICAob3B0aW9ucy50cmFjZXNTYW1wbGVSYXRlICE9IG51bGwgfHwgISFvcHRpb25zLnRyYWNlc1NhbXBsZXIpXG4gICk7XG59XG5cbi8qKlxuICogQHNlZSBKU0RvYyBvZiBgaGFzU3BhbnNFbmFibGVkYFxuICogQGRlcHJlY2F0ZWQgVXNlIGBoYXNTcGFuc0VuYWJsZWRgIGluc3RlYWQsIHdoaWNoIGlzIGEgbW9yZSBhY2N1cmF0ZWx5IG5hbWVkIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbi5cbiAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgdGhlIFNESy5cbiAqL1xuLy8gVE9ETyh2MTApOiBSZW1vdmUgdGhpcyBleHBvcnRcbmNvbnN0IGhhc1RyYWNpbmdFbmFibGVkID0gaGFzU3BhbnNFbmFibGVkO1xuXG5leHBvcnQgeyBoYXNTcGFuc0VuYWJsZWQsIGhhc1RyYWNpbmdFbmFibGVkIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oYXNTcGFuc0VuYWJsZWQuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/hasSpansEnabled.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/ipAddress.js":
/*!*******************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/ipAddress.js ***!
  \*******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addAutoIpAddressToSession: () => (/* binding */ addAutoIpAddressToSession),\n/* harmony export */   addAutoIpAddressToUser: () => (/* binding */ addAutoIpAddressToUser)\n/* harmony export */ });\n// By default, we want to infer the IP address, unless this is explicitly set to `null`\n// We do this after all other processing is done\n// If `ip_address` is explicitly set to `null` or a value, we leave it as is\n\n/**\n * @internal\n */\nfunction addAutoIpAddressToUser(objWithMaybeUser) {\n  if (objWithMaybeUser.user?.ip_address === undefined) {\n    objWithMaybeUser.user = {\n      ...objWithMaybeUser.user,\n      ip_address: '{{auto}}',\n    };\n  }\n}\n\n/**\n * @internal\n */\nfunction addAutoIpAddressToSession(session) {\n  if ('aggregates' in session) {\n    if (session.attrs?.['ip_address'] === undefined) {\n      session.attrs = {\n        ...session.attrs,\n        ip_address: '{{auto}}',\n      };\n    }\n  } else {\n    if (session.ipAddress === undefined) {\n      session.ipAddress = '{{auto}}';\n    }\n  }\n}\n\n\n//# sourceMappingURL=ipAddress.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2lwQWRkcmVzcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixNQUFNO0FBQzNCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLE1BQU07QUFDN0I7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLDZCQUE2QixNQUFNO0FBQ25DO0FBQ0E7QUFDQTs7QUFFNkQ7QUFDN0QiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS91dGlscy9pcEFkZHJlc3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQnkgZGVmYXVsdCwgd2Ugd2FudCB0byBpbmZlciB0aGUgSVAgYWRkcmVzcywgdW5sZXNzIHRoaXMgaXMgZXhwbGljaXRseSBzZXQgdG8gYG51bGxgXG4vLyBXZSBkbyB0aGlzIGFmdGVyIGFsbCBvdGhlciBwcm9jZXNzaW5nIGlzIGRvbmVcbi8vIElmIGBpcF9hZGRyZXNzYCBpcyBleHBsaWNpdGx5IHNldCB0byBgbnVsbGAgb3IgYSB2YWx1ZSwgd2UgbGVhdmUgaXQgYXMgaXNcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gYWRkQXV0b0lwQWRkcmVzc1RvVXNlcihvYmpXaXRoTWF5YmVVc2VyKSB7XG4gIGlmIChvYmpXaXRoTWF5YmVVc2VyLnVzZXI/LmlwX2FkZHJlc3MgPT09IHVuZGVmaW5lZCkge1xuICAgIG9ialdpdGhNYXliZVVzZXIudXNlciA9IHtcbiAgICAgIC4uLm9ialdpdGhNYXliZVVzZXIudXNlcixcbiAgICAgIGlwX2FkZHJlc3M6ICd7e2F1dG99fScsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBhZGRBdXRvSXBBZGRyZXNzVG9TZXNzaW9uKHNlc3Npb24pIHtcbiAgaWYgKCdhZ2dyZWdhdGVzJyBpbiBzZXNzaW9uKSB7XG4gICAgaWYgKHNlc3Npb24uYXR0cnM/LlsnaXBfYWRkcmVzcyddID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlc3Npb24uYXR0cnMgPSB7XG4gICAgICAgIC4uLnNlc3Npb24uYXR0cnMsXG4gICAgICAgIGlwX2FkZHJlc3M6ICd7e2F1dG99fScsXG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoc2Vzc2lvbi5pcEFkZHJlc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2Vzc2lvbi5pcEFkZHJlc3MgPSAne3thdXRvfX0nO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgeyBhZGRBdXRvSXBBZGRyZXNzVG9TZXNzaW9uLCBhZGRBdXRvSXBBZGRyZXNzVG9Vc2VyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pcEFkZHJlc3MuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/ipAddress.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js":
/*!************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js ***!
  \************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   isDOMError: () => (/* binding */ isDOMError),\n/* harmony export */   isDOMException: () => (/* binding */ isDOMException),\n/* harmony export */   isElement: () => (/* binding */ isElement),\n/* harmony export */   isError: () => (/* binding */ isError),\n/* harmony export */   isErrorEvent: () => (/* binding */ isErrorEvent),\n/* harmony export */   isEvent: () => (/* binding */ isEvent),\n/* harmony export */   isInstanceOf: () => (/* binding */ isInstanceOf),\n/* harmony export */   isParameterizedString: () => (/* binding */ isParameterizedString),\n/* harmony export */   isPlainObject: () => (/* binding */ isPlainObject),\n/* harmony export */   isPrimitive: () => (/* binding */ isPrimitive),\n/* harmony export */   isRegExp: () => (/* binding */ isRegExp),\n/* harmony export */   isRequest: () => (/* binding */ isRequest),\n/* harmony export */   isString: () => (/* binding */ isString),\n/* harmony export */   isSyntheticEvent: () => (/* binding */ isSyntheticEvent),\n/* harmony export */   isThenable: () => (/* binding */ isThenable),\n/* harmony export */   isVueViewModel: () => (/* binding */ isVueViewModel)\n/* harmony export */ });\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isError(wat) {\n  switch (objectToString.call(wat)) {\n    case '[object Error]':\n    case '[object Exception]':\n    case '[object DOMException]':\n    case '[object WebAssembly.Exception]':\n      return true;\n    default:\n      return isInstanceOf(wat, Error);\n  }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat, className) {\n  return objectToString.call(wat) === `[object ${className}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isErrorEvent(wat) {\n  return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMError(wat) {\n  return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMException(wat) {\n  return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isString(wat) {\n  return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given string is parameterized\n * {@link isParameterizedString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isParameterizedString(wat) {\n  return (\n    typeof wat === 'object' &&\n    wat !== null &&\n    '__sentry_template_string__' in wat &&\n    '__sentry_template_values__' in wat\n  );\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPrimitive(wat) {\n  return wat === null || isParameterizedString(wat) || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal, or a class instance.\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPlainObject(wat) {\n  return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isEvent(wat) {\n  return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isElement(wat) {\n  return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isRegExp(wat) {\n  return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nfunction isThenable(wat) {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return Boolean(wat?.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isSyntheticEvent(wat) {\n  return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nfunction isInstanceOf(wat, base) {\n  try {\n    return wat instanceof base;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Checks whether given value's type is a Vue ViewModel.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isVueViewModel(wat) {\n  // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n  return !!(typeof wat === 'object' && wat !== null && ((wat ).__isVue || (wat )._isVue));\n}\n\n/**\n * Checks whether the given parameter is a Standard Web API Request instance.\n *\n * Returns false if Request is not available in the current runtime.\n */\nfunction isRequest(request) {\n  return typeof Request !== 'undefined' && isInstanceOf(request, Request);\n}\n\n\n//# sourceMappingURL=is.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2lzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLGNBQWM7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxVQUFVO0FBQzNEOztBQUVBO0FBQ0E7QUFDQSxJQUFJLG1CQUFtQjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSxpQkFBaUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUkscUJBQXFCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLGVBQWU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksNEJBQTRCO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSxrQkFBa0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksb0JBQW9CO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLGNBQWM7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksZ0JBQWdCO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLGVBQWU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSx1QkFBdUI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksbUJBQW1CO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRStOO0FBQy9OIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvaXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuY29uc3Qgb2JqZWN0VG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBvbmUgb2YgYSBmZXcgRXJyb3Igb3IgRXJyb3ItbGlrZVxuICoge0BsaW5rIGlzRXJyb3J9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBpc0Vycm9yKHdhdCkge1xuICBzd2l0Y2ggKG9iamVjdFRvU3RyaW5nLmNhbGwod2F0KSkge1xuICAgIGNhc2UgJ1tvYmplY3QgRXJyb3JdJzpcbiAgICBjYXNlICdbb2JqZWN0IEV4Y2VwdGlvbl0nOlxuICAgIGNhc2UgJ1tvYmplY3QgRE9NRXhjZXB0aW9uXSc6XG4gICAgY2FzZSAnW29iamVjdCBXZWJBc3NlbWJseS5FeGNlcHRpb25dJzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gaXNJbnN0YW5jZU9mKHdhdCwgRXJyb3IpO1xuICB9XG59XG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiBidWlsdC1pbiBjbGFzcy5cbiAqXG4gKiBAcGFyYW0gd2F0IFRoZSB2YWx1ZSB0byBiZSBjaGVja2VkXG4gKiBAcGFyYW0gY2xhc3NOYW1lXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGlzQnVpbHRpbih3YXQsIGNsYXNzTmFtZSkge1xuICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbCh3YXQpID09PSBgW29iamVjdCAke2NsYXNzTmFtZX1dYDtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgRXJyb3JFdmVudFxuICoge0BsaW5rIGlzRXJyb3JFdmVudH0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGlzRXJyb3JFdmVudCh3YXQpIHtcbiAgcmV0dXJuIGlzQnVpbHRpbih3YXQsICdFcnJvckV2ZW50Jyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIERPTUVycm9yXG4gKiB7QGxpbmsgaXNET01FcnJvcn0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGlzRE9NRXJyb3Iod2F0KSB7XG4gIHJldHVybiBpc0J1aWx0aW4od2F0LCAnRE9NRXJyb3InKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgRE9NRXhjZXB0aW9uXG4gKiB7QGxpbmsgaXNET01FeGNlcHRpb259LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBpc0RPTUV4Y2VwdGlvbih3YXQpIHtcbiAgcmV0dXJuIGlzQnVpbHRpbih3YXQsICdET01FeGNlcHRpb24nKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYSBzdHJpbmdcbiAqIHtAbGluayBpc1N0cmluZ30uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHdhdCkge1xuICByZXR1cm4gaXNCdWlsdGluKHdhdCwgJ1N0cmluZycpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHN0cmluZyBpcyBwYXJhbWV0ZXJpemVkXG4gKiB7QGxpbmsgaXNQYXJhbWV0ZXJpemVkU3RyaW5nfS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gaXNQYXJhbWV0ZXJpemVkU3RyaW5nKHdhdCkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3YXQgPT09ICdvYmplY3QnICYmXG4gICAgd2F0ICE9PSBudWxsICYmXG4gICAgJ19fc2VudHJ5X3RlbXBsYXRlX3N0cmluZ19fJyBpbiB3YXQgJiZcbiAgICAnX19zZW50cnlfdGVtcGxhdGVfdmFsdWVzX18nIGluIHdhdFxuICApO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlIGlzIGEgcHJpbWl0aXZlICh1bmRlZmluZWQsIG51bGwsIG51bWJlciwgYm9vbGVhbiwgc3RyaW5nLCBiaWdpbnQsIHN5bWJvbClcbiAqIHtAbGluayBpc1ByaW1pdGl2ZX0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHdhdCkge1xuICByZXR1cm4gd2F0ID09PSBudWxsIHx8IGlzUGFyYW1ldGVyaXplZFN0cmluZyh3YXQpIHx8ICh0eXBlb2Ygd2F0ICE9PSAnb2JqZWN0JyAmJiB0eXBlb2Ygd2F0ICE9PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYW4gb2JqZWN0IGxpdGVyYWwsIG9yIGEgY2xhc3MgaW5zdGFuY2UuXG4gKiB7QGxpbmsgaXNQbGFpbk9iamVjdH0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qod2F0KSB7XG4gIHJldHVybiBpc0J1aWx0aW4od2F0LCAnT2JqZWN0Jyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEV2ZW50IGluc3RhbmNlXG4gKiB7QGxpbmsgaXNFdmVudH0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGlzRXZlbnQod2F0KSB7XG4gIHJldHVybiB0eXBlb2YgRXZlbnQgIT09ICd1bmRlZmluZWQnICYmIGlzSW5zdGFuY2VPZih3YXQsIEV2ZW50KTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYW4gRWxlbWVudCBpbnN0YW5jZVxuICoge0BsaW5rIGlzRWxlbWVudH0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGlzRWxlbWVudCh3YXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luc3RhbmNlT2Yod2F0LCBFbGVtZW50KTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYW4gcmVnZXhwXG4gKiB7QGxpbmsgaXNSZWdFeHB9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBpc1JlZ0V4cCh3YXQpIHtcbiAgcmV0dXJuIGlzQnVpbHRpbih3YXQsICdSZWdFeHAnKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSBoYXMgYSB0aGVuIGZ1bmN0aW9uLlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKi9cbmZ1bmN0aW9uIGlzVGhlbmFibGUod2F0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgcmV0dXJuIEJvb2xlYW4od2F0Py50aGVuICYmIHR5cGVvZiB3YXQudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGEgU3ludGhldGljRXZlbnRcbiAqIHtAbGluayBpc1N5bnRoZXRpY0V2ZW50fS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gaXNTeW50aGV0aWNFdmVudCh3YXQpIHtcbiAgcmV0dXJuIGlzUGxhaW5PYmplY3Qod2F0KSAmJiAnbmF0aXZlRXZlbnQnIGluIHdhdCAmJiAncHJldmVudERlZmF1bHQnIGluIHdhdCAmJiAnc3RvcFByb3BhZ2F0aW9uJyBpbiB3YXQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIGluc3RhbmNlIG9mIHByb3ZpZGVkIGNvbnN0cnVjdG9yLlxuICoge0BsaW5rIGlzSW5zdGFuY2VPZn0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcGFyYW0gYmFzZSBBIGNvbnN0cnVjdG9yIHRvIGJlIHVzZWQgaW4gYSBjaGVjay5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gaXNJbnN0YW5jZU9mKHdhdCwgYmFzZSkge1xuICB0cnkge1xuICAgIHJldHVybiB3YXQgaW5zdGFuY2VvZiBiYXNlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYSBWdWUgVmlld01vZGVsLlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBpc1Z1ZVZpZXdNb2RlbCh3YXQpIHtcbiAgLy8gTm90IHVzaW5nIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgYmVjYXVzZSBpbiBWdWUgMyBpdCB3b3VsZCByZWFkIHRoZSBpbnN0YW5jZSdzIFN5bWJvbChTeW1ib2wudG9TdHJpbmdUYWcpIHByb3BlcnR5LlxuICByZXR1cm4gISEodHlwZW9mIHdhdCA9PT0gJ29iamVjdCcgJiYgd2F0ICE9PSBudWxsICYmICgod2F0ICkuX19pc1Z1ZSB8fCAod2F0ICkuX2lzVnVlKSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIHBhcmFtZXRlciBpcyBhIFN0YW5kYXJkIFdlYiBBUEkgUmVxdWVzdCBpbnN0YW5jZS5cbiAqXG4gKiBSZXR1cm5zIGZhbHNlIGlmIFJlcXVlc3QgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBydW50aW1lLlxuICovXG5mdW5jdGlvbiBpc1JlcXVlc3QocmVxdWVzdCkge1xuICByZXR1cm4gdHlwZW9mIFJlcXVlc3QgIT09ICd1bmRlZmluZWQnICYmIGlzSW5zdGFuY2VPZihyZXF1ZXN0LCBSZXF1ZXN0KTtcbn1cblxuZXhwb3J0IHsgaXNET01FcnJvciwgaXNET01FeGNlcHRpb24sIGlzRWxlbWVudCwgaXNFcnJvciwgaXNFcnJvckV2ZW50LCBpc0V2ZW50LCBpc0luc3RhbmNlT2YsIGlzUGFyYW1ldGVyaXplZFN0cmluZywgaXNQbGFpbk9iamVjdCwgaXNQcmltaXRpdmUsIGlzUmVnRXhwLCBpc1JlcXVlc3QsIGlzU3RyaW5nLCBpc1N5bnRoZXRpY0V2ZW50LCBpc1RoZW5hYmxlLCBpc1Z1ZVZpZXdNb2RlbCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXMuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/isBrowser.js":
/*!*******************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/isBrowser.js ***!
  \*******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   isBrowser: () => (/* binding */ isBrowser)\n/* harmony export */ });\n/* harmony import */ var _node_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/node.js\");\n/* harmony import */ var _worldwide_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n\n\n\n/**\n * Returns true if we are in the browser.\n */\nfunction isBrowser() {\n  // eslint-disable-next-line no-restricted-globals\n  return typeof window !== 'undefined' && (!(0,_node_js__WEBPACK_IMPORTED_MODULE_0__.isNodeEnv)() || isElectronNodeRenderer());\n}\n\n// Electron renderers with nodeIntegration enabled are detected as Node.js so we specifically test for them\nfunction isElectronNodeRenderer() {\n  const process = (_worldwide_js__WEBPACK_IMPORTED_MODULE_1__.GLOBAL_OBJ ).process;\n  return process?.type === 'renderer';\n}\n\n\n//# sourceMappingURL=isBrowser.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2lzQnJvd3Nlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBc0M7QUFDTTs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxtREFBUztBQUNyRDs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLHFEQUFVO0FBQzdCO0FBQ0E7O0FBRXFCO0FBQ3JCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvaXNCcm93c2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzTm9kZUVudiB9IGZyb20gJy4vbm9kZS5qcyc7XG5pbXBvcnQgeyBHTE9CQUxfT0JKIH0gZnJvbSAnLi93b3JsZHdpZGUuanMnO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB3ZSBhcmUgaW4gdGhlIGJyb3dzZXIuXG4gKi9cbmZ1bmN0aW9uIGlzQnJvd3NlcigpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgKCFpc05vZGVFbnYoKSB8fCBpc0VsZWN0cm9uTm9kZVJlbmRlcmVyKCkpO1xufVxuXG4vLyBFbGVjdHJvbiByZW5kZXJlcnMgd2l0aCBub2RlSW50ZWdyYXRpb24gZW5hYmxlZCBhcmUgZGV0ZWN0ZWQgYXMgTm9kZS5qcyBzbyB3ZSBzcGVjaWZpY2FsbHkgdGVzdCBmb3IgdGhlbVxuZnVuY3Rpb24gaXNFbGVjdHJvbk5vZGVSZW5kZXJlcigpIHtcbiAgY29uc3QgcHJvY2VzcyA9IChHTE9CQUxfT0JKICkucHJvY2VzcztcbiAgcmV0dXJuIHByb2Nlc3M/LnR5cGUgPT09ICdyZW5kZXJlcic7XG59XG5cbmV4cG9ydCB7IGlzQnJvd3NlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNCcm93c2VyLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/isBrowser.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/isSentryRequestUrl.js":
/*!****************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/isSentryRequestUrl.js ***!
  \****************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   isSentryRequestUrl: () => (/* binding */ isSentryRequestUrl)\n/* harmony export */ });\n/**\n * Checks whether given url points to Sentry server\n *\n * @param url url to verify\n */\nfunction isSentryRequestUrl(url, client) {\n  const dsn = client?.getDsn();\n  const tunnel = client?.getOptions().tunnel;\n  return checkDsn(url, dsn) || checkTunnel(url, tunnel);\n}\n\nfunction checkTunnel(url, tunnel) {\n  if (!tunnel) {\n    return false;\n  }\n\n  return removeTrailingSlash(url) === removeTrailingSlash(tunnel);\n}\n\nfunction checkDsn(url, dsn) {\n  return dsn ? url.includes(dsn.host) : false;\n}\n\nfunction removeTrailingSlash(str) {\n  return str[str.length - 1] === '/' ? str.slice(0, -1) : str;\n}\n\n\n//# sourceMappingURL=isSentryRequestUrl.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2lzU2VudHJ5UmVxdWVzdFVybC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUU4QjtBQUM5QiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2lzU2VudHJ5UmVxdWVzdFVybC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHVybCBwb2ludHMgdG8gU2VudHJ5IHNlcnZlclxuICpcbiAqIEBwYXJhbSB1cmwgdXJsIHRvIHZlcmlmeVxuICovXG5mdW5jdGlvbiBpc1NlbnRyeVJlcXVlc3RVcmwodXJsLCBjbGllbnQpIHtcbiAgY29uc3QgZHNuID0gY2xpZW50Py5nZXREc24oKTtcbiAgY29uc3QgdHVubmVsID0gY2xpZW50Py5nZXRPcHRpb25zKCkudHVubmVsO1xuICByZXR1cm4gY2hlY2tEc24odXJsLCBkc24pIHx8IGNoZWNrVHVubmVsKHVybCwgdHVubmVsKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tUdW5uZWwodXJsLCB0dW5uZWwpIHtcbiAgaWYgKCF0dW5uZWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gcmVtb3ZlVHJhaWxpbmdTbGFzaCh1cmwpID09PSByZW1vdmVUcmFpbGluZ1NsYXNoKHR1bm5lbCk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrRHNuKHVybCwgZHNuKSB7XG4gIHJldHVybiBkc24gPyB1cmwuaW5jbHVkZXMoZHNuLmhvc3QpIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVRyYWlsaW5nU2xhc2goc3RyKSB7XG4gIHJldHVybiBzdHJbc3RyLmxlbmd0aCAtIDFdID09PSAnLycgPyBzdHIuc2xpY2UoMCwgLTEpIDogc3RyO1xufVxuXG5leHBvcnQgeyBpc1NlbnRyeVJlcXVlc3RVcmwgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzU2VudHJ5UmVxdWVzdFVybC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/isSentryRequestUrl.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/lru.js":
/*!*************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/lru.js ***!
  \*************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   LRUMap: () => (/* binding */ LRUMap)\n/* harmony export */ });\n/** A simple Least Recently Used map */\nclass LRUMap {\n\n   constructor(  _maxSize) {this._maxSize = _maxSize;\n    this._cache = new Map();\n  }\n\n  /** Get the current size of the cache */\n   get size() {\n    return this._cache.size;\n  }\n\n  /** Get an entry or undefined if it was not in the cache. Re-inserts to update the recently used order */\n   get(key) {\n    const value = this._cache.get(key);\n    if (value === undefined) {\n      return undefined;\n    }\n    // Remove and re-insert to update the order\n    this._cache.delete(key);\n    this._cache.set(key, value);\n    return value;\n  }\n\n  /** Insert an entry and evict an older entry if we've reached maxSize */\n   set(key, value) {\n    if (this._cache.size >= this._maxSize) {\n      // keys() returns an iterator in insertion order so keys().next() gives us the oldest key\n      this._cache.delete(this._cache.keys().next().value);\n    }\n    this._cache.set(key, value);\n  }\n\n  /** Remove an entry and return the entry if it was in the cache */\n   remove(key) {\n    const value = this._cache.get(key);\n    if (value) {\n      this._cache.delete(key);\n    }\n    return value;\n  }\n\n  /** Clear all entries */\n   clear() {\n    this._cache.clear();\n  }\n\n  /** Get all the keys */\n   keys() {\n    return Array.from(this._cache.keys());\n  }\n\n  /** Get all the values */\n   values() {\n    const values = [];\n    this._cache.forEach(value => values.push(value));\n    return values;\n  }\n}\n\n\n//# sourceMappingURL=lru.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL2xydS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTs7QUFFQSw0QkFBNEI7QUFDNUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFa0I7QUFDbEIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS91dGlscy9scnUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEEgc2ltcGxlIExlYXN0IFJlY2VudGx5IFVzZWQgbWFwICovXG5jbGFzcyBMUlVNYXAge1xuXG4gICBjb25zdHJ1Y3RvciggIF9tYXhTaXplKSB7dGhpcy5fbWF4U2l6ZSA9IF9tYXhTaXplO1xuICAgIHRoaXMuX2NhY2hlID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgY3VycmVudCBzaXplIG9mIHRoZSBjYWNoZSAqL1xuICAgZ2V0IHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlLnNpemU7XG4gIH1cblxuICAvKiogR2V0IGFuIGVudHJ5IG9yIHVuZGVmaW5lZCBpZiBpdCB3YXMgbm90IGluIHRoZSBjYWNoZS4gUmUtaW5zZXJ0cyB0byB1cGRhdGUgdGhlIHJlY2VudGx5IHVzZWQgb3JkZXIgKi9cbiAgIGdldChrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NhY2hlLmdldChrZXkpO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBSZW1vdmUgYW5kIHJlLWluc2VydCB0byB1cGRhdGUgdGhlIG9yZGVyXG4gICAgdGhpcy5fY2FjaGUuZGVsZXRlKGtleSk7XG4gICAgdGhpcy5fY2FjaGUuc2V0KGtleSwgdmFsdWUpO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBJbnNlcnQgYW4gZW50cnkgYW5kIGV2aWN0IGFuIG9sZGVyIGVudHJ5IGlmIHdlJ3ZlIHJlYWNoZWQgbWF4U2l6ZSAqL1xuICAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICBpZiAodGhpcy5fY2FjaGUuc2l6ZSA+PSB0aGlzLl9tYXhTaXplKSB7XG4gICAgICAvLyBrZXlzKCkgcmV0dXJucyBhbiBpdGVyYXRvciBpbiBpbnNlcnRpb24gb3JkZXIgc28ga2V5cygpLm5leHQoKSBnaXZlcyB1cyB0aGUgb2xkZXN0IGtleVxuICAgICAgdGhpcy5fY2FjaGUuZGVsZXRlKHRoaXMuX2NhY2hlLmtleXMoKS5uZXh0KCkudmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLl9jYWNoZS5zZXQoa2V5LCB2YWx1ZSk7XG4gIH1cblxuICAvKiogUmVtb3ZlIGFuIGVudHJ5IGFuZCByZXR1cm4gdGhlIGVudHJ5IGlmIGl0IHdhcyBpbiB0aGUgY2FjaGUgKi9cbiAgIHJlbW92ZShrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2NhY2hlLmdldChrZXkpO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fY2FjaGUuZGVsZXRlKGtleSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBDbGVhciBhbGwgZW50cmllcyAqL1xuICAgY2xlYXIoKSB7XG4gICAgdGhpcy5fY2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKiBHZXQgYWxsIHRoZSBrZXlzICovXG4gICBrZXlzKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX2NhY2hlLmtleXMoKSk7XG4gIH1cblxuICAvKiogR2V0IGFsbCB0aGUgdmFsdWVzICovXG4gICB2YWx1ZXMoKSB7XG4gICAgY29uc3QgdmFsdWVzID0gW107XG4gICAgdGhpcy5fY2FjaGUuZm9yRWFjaCh2YWx1ZSA9PiB2YWx1ZXMucHVzaCh2YWx1ZSkpO1xuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cbn1cblxuZXhwb3J0IHsgTFJVTWFwIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1scnUuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/lru.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/merge.js":
/*!***************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/merge.js ***!
  \***************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   merge: () => (/* binding */ merge)\n/* harmony export */ });\n/**\n * Shallow merge two objects.\n * Does not mutate the passed in objects.\n * Undefined/empty values in the merge object will overwrite existing values.\n *\n * By default, this merges 2 levels deep.\n */\nfunction merge(initialObj, mergeObj, levels = 2) {\n  // If the merge value is not an object, or we have no merge levels left,\n  // we just set the value to the merge value\n  if (!mergeObj || typeof mergeObj !== 'object' || levels <= 0) {\n    return mergeObj;\n  }\n\n  // If the merge object is an empty object, and the initial object is not undefined, we return the initial object\n  if (initialObj && Object.keys(mergeObj).length === 0) {\n    return initialObj;\n  }\n\n  // Clone object\n  const output = { ...initialObj };\n\n  // Merge values into output, resursively\n  for (const key in mergeObj) {\n    if (Object.prototype.hasOwnProperty.call(mergeObj, key)) {\n      output[key] = merge(output[key], mergeObj[key], levels - 1);\n    }\n  }\n\n  return output;\n}\n\n\n//# sourceMappingURL=merge.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL21lcmdlLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQjs7QUFFbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRWlCO0FBQ2pCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvbWVyZ2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTaGFsbG93IG1lcmdlIHR3byBvYmplY3RzLlxuICogRG9lcyBub3QgbXV0YXRlIHRoZSBwYXNzZWQgaW4gb2JqZWN0cy5cbiAqIFVuZGVmaW5lZC9lbXB0eSB2YWx1ZXMgaW4gdGhlIG1lcmdlIG9iamVjdCB3aWxsIG92ZXJ3cml0ZSBleGlzdGluZyB2YWx1ZXMuXG4gKlxuICogQnkgZGVmYXVsdCwgdGhpcyBtZXJnZXMgMiBsZXZlbHMgZGVlcC5cbiAqL1xuZnVuY3Rpb24gbWVyZ2UoaW5pdGlhbE9iaiwgbWVyZ2VPYmosIGxldmVscyA9IDIpIHtcbiAgLy8gSWYgdGhlIG1lcmdlIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QsIG9yIHdlIGhhdmUgbm8gbWVyZ2UgbGV2ZWxzIGxlZnQsXG4gIC8vIHdlIGp1c3Qgc2V0IHRoZSB2YWx1ZSB0byB0aGUgbWVyZ2UgdmFsdWVcbiAgaWYgKCFtZXJnZU9iaiB8fCB0eXBlb2YgbWVyZ2VPYmogIT09ICdvYmplY3QnIHx8IGxldmVscyA8PSAwKSB7XG4gICAgcmV0dXJuIG1lcmdlT2JqO1xuICB9XG5cbiAgLy8gSWYgdGhlIG1lcmdlIG9iamVjdCBpcyBhbiBlbXB0eSBvYmplY3QsIGFuZCB0aGUgaW5pdGlhbCBvYmplY3QgaXMgbm90IHVuZGVmaW5lZCwgd2UgcmV0dXJuIHRoZSBpbml0aWFsIG9iamVjdFxuICBpZiAoaW5pdGlhbE9iaiAmJiBPYmplY3Qua2V5cyhtZXJnZU9iaikubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGluaXRpYWxPYmo7XG4gIH1cblxuICAvLyBDbG9uZSBvYmplY3RcbiAgY29uc3Qgb3V0cHV0ID0geyAuLi5pbml0aWFsT2JqIH07XG5cbiAgLy8gTWVyZ2UgdmFsdWVzIGludG8gb3V0cHV0LCByZXN1cnNpdmVseVxuICBmb3IgKGNvbnN0IGtleSBpbiBtZXJnZU9iaikge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWVyZ2VPYmosIGtleSkpIHtcbiAgICAgIG91dHB1dFtrZXldID0gbWVyZ2Uob3V0cHV0W2tleV0sIG1lcmdlT2JqW2tleV0sIGxldmVscyAtIDEpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmV4cG9ydCB7IG1lcmdlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/merge.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/meta.js":
/*!**************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/meta.js ***!
  \**************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getTraceMetaTags: () => (/* binding */ getTraceMetaTags)\n/* harmony export */ });\n/* harmony import */ var _traceData_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./traceData.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/traceData.js\");\n\n\n/**\n * Returns a string of meta tags that represent the current trace data.\n *\n * You can use this to propagate a trace from your server-side rendered Html to the browser.\n * This function returns up to two meta tags, `sentry-trace` and `baggage`, depending on the\n * current trace data state.\n *\n * @example\n * Usage example:\n *\n * ```js\n * function renderHtml() {\n *   return `\n *     <head>\n *       ${getTraceMetaTags()}\n *     </head>\n *   `;\n * }\n * ```\n *\n */\nfunction getTraceMetaTags(traceData) {\n  return Object.entries(traceData || (0,_traceData_js__WEBPACK_IMPORTED_MODULE_0__.getTraceData)())\n    .map(([key, value]) => `<meta name=\"${key}\" content=\"${value}\"/>`)\n    .join('\\n');\n}\n\n\n//# sourceMappingURL=meta.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL21ldGEuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBOEM7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsMkRBQVk7QUFDakQsMENBQTBDLElBQUksYUFBYSxNQUFNO0FBQ2pFO0FBQ0E7O0FBRTRCO0FBQzVCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvbWV0YS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRUcmFjZURhdGEgfSBmcm9tICcuL3RyYWNlRGF0YS5qcyc7XG5cbi8qKlxuICogUmV0dXJucyBhIHN0cmluZyBvZiBtZXRhIHRhZ3MgdGhhdCByZXByZXNlbnQgdGhlIGN1cnJlbnQgdHJhY2UgZGF0YS5cbiAqXG4gKiBZb3UgY2FuIHVzZSB0aGlzIHRvIHByb3BhZ2F0ZSBhIHRyYWNlIGZyb20geW91ciBzZXJ2ZXItc2lkZSByZW5kZXJlZCBIdG1sIHRvIHRoZSBicm93c2VyLlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHVwIHRvIHR3byBtZXRhIHRhZ3MsIGBzZW50cnktdHJhY2VgIGFuZCBgYmFnZ2FnZWAsIGRlcGVuZGluZyBvbiB0aGVcbiAqIGN1cnJlbnQgdHJhY2UgZGF0YSBzdGF0ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogVXNhZ2UgZXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogZnVuY3Rpb24gcmVuZGVySHRtbCgpIHtcbiAqICAgcmV0dXJuIGBcbiAqICAgICA8aGVhZD5cbiAqICAgICAgICR7Z2V0VHJhY2VNZXRhVGFncygpfVxuICogICAgIDwvaGVhZD5cbiAqICAgYDtcbiAqIH1cbiAqIGBgYFxuICpcbiAqL1xuZnVuY3Rpb24gZ2V0VHJhY2VNZXRhVGFncyh0cmFjZURhdGEpIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRyYWNlRGF0YSB8fCBnZXRUcmFjZURhdGEoKSlcbiAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGA8bWV0YSBuYW1lPVwiJHtrZXl9XCIgY29udGVudD1cIiR7dmFsdWV9XCIvPmApXG4gICAgLmpvaW4oJ1xcbicpO1xufVxuXG5leHBvcnQgeyBnZXRUcmFjZU1ldGFUYWdzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXRhLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/meta.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/misc.js":
/*!**************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/misc.js ***!
  \**************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addContextToFrame: () => (/* binding */ addContextToFrame),\n/* harmony export */   addExceptionMechanism: () => (/* binding */ addExceptionMechanism),\n/* harmony export */   addExceptionTypeValue: () => (/* binding */ addExceptionTypeValue),\n/* harmony export */   checkOrSetAlreadyCaught: () => (/* binding */ checkOrSetAlreadyCaught),\n/* harmony export */   getEventDescription: () => (/* binding */ getEventDescription),\n/* harmony export */   parseSemver: () => (/* binding */ parseSemver),\n/* harmony export */   uuid4: () => (/* binding */ uuid4)\n/* harmony export */ });\n/* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./object.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js\");\n/* harmony import */ var _string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./string.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/string.js\");\n/* harmony import */ var _worldwide_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n\n\n\n\nfunction getCrypto() {\n  const gbl = _worldwide_js__WEBPACK_IMPORTED_MODULE_2__.GLOBAL_OBJ ;\n  return gbl.crypto || gbl.msCrypto;\n}\n\n/**\n * UUID4 generator\n * @param crypto Object that provides the crypto API.\n * @returns string Generated UUID4.\n */\nfunction uuid4(crypto = getCrypto()) {\n  let getRandomByte = () => Math.random() * 16;\n  try {\n    if (crypto?.randomUUID) {\n      return crypto.randomUUID().replace(/-/g, '');\n    }\n    if (crypto?.getRandomValues) {\n      getRandomByte = () => {\n        // crypto.getRandomValues might return undefined instead of the typed array\n        // in old Chromium versions (e.g. 23.0.1235.0 (151422))\n        // However, `typedArray` is still filled in-place.\n        // @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#typedarray\n        const typedArray = new Uint8Array(1);\n        crypto.getRandomValues(typedArray);\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        return typedArray[0];\n      };\n    }\n  } catch {\n    // some runtimes can crash invoking crypto\n    // https://github.com/getsentry/sentry-javascript/issues/8935\n  }\n\n  // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n  // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n  return (([1e7] ) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n    // eslint-disable-next-line no-bitwise\n    ((c ) ^ ((getRandomByte() & 15) >> ((c ) / 4))).toString(16),\n  );\n}\n\nfunction getFirstException(event) {\n  return event.exception?.values?.[0];\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nfunction getEventDescription(event) {\n  const { message, event_id: eventId } = event;\n  if (message) {\n    return message;\n  }\n\n  const firstException = getFirstException(event);\n  if (firstException) {\n    if (firstException.type && firstException.value) {\n      return `${firstException.type}: ${firstException.value}`;\n    }\n    return firstException.type || firstException.value || eventId || '<unknown>';\n  }\n  return eventId || '<unknown>';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nfunction addExceptionTypeValue(event, value, type) {\n  const exception = (event.exception = event.exception || {});\n  const values = (exception.values = exception.values || []);\n  const firstException = (values[0] = values[0] || {});\n  if (!firstException.value) {\n    firstException.value = value || '';\n  }\n  if (!firstException.type) {\n    firstException.type = type || 'Error';\n  }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nfunction addExceptionMechanism(event, newMechanism) {\n  const firstException = getFirstException(event);\n  if (!firstException) {\n    return;\n  }\n\n  const defaultMechanism = { type: 'generic', handled: true };\n  const currentMechanism = firstException.mechanism;\n  firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n  if (newMechanism && 'data' in newMechanism) {\n    const mergedData = { ...currentMechanism?.data, ...newMechanism.data };\n    firstException.mechanism.data = mergedData;\n  }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n  /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\n\nfunction _parseInt(input) {\n  return parseInt(input || '', 10);\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nfunction parseSemver(input) {\n  const match = input.match(SEMVER_REGEXP) || [];\n  const major = _parseInt(match[1]);\n  const minor = _parseInt(match[2]);\n  const patch = _parseInt(match[3]);\n  return {\n    buildmetadata: match[5],\n    major: isNaN(major) ? undefined : major,\n    minor: isNaN(minor) ? undefined : minor,\n    patch: isNaN(patch) ? undefined : patch,\n    prerelease: match[4],\n  };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nfunction addContextToFrame(lines, frame, linesOfContext = 5) {\n  // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n  if (frame.lineno === undefined) {\n    return;\n  }\n\n  const maxLines = lines.length;\n  const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n  frame.pre_context = lines\n    .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n    .map((line) => (0,_string_js__WEBPACK_IMPORTED_MODULE_1__.snipLine)(line, 0));\n\n  // We guard here to ensure this is not larger than the existing number of lines\n  const lineIndex = Math.min(maxLines - 1, sourceLine);\n\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  frame.context_line = (0,_string_js__WEBPACK_IMPORTED_MODULE_1__.snipLine)(lines[lineIndex], frame.colno || 0);\n\n  frame.post_context = lines\n    .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n    .map((line) => (0,_string_js__WEBPACK_IMPORTED_MODULE_1__.snipLine)(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nfunction checkOrSetAlreadyCaught(exception) {\n  if (isAlreadyCaptured(exception)) {\n    return true;\n  }\n\n  try {\n    // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n    // `ExtraErrorData` integration\n    (0,_object_js__WEBPACK_IMPORTED_MODULE_0__.addNonEnumerableProperty)(exception , '__sentry_captured__', true);\n  } catch {\n    // `exception` is a primitive, so we can't mark it seen\n  }\n\n  return false;\n}\n\nfunction isAlreadyCaptured(exception) {\n  try {\n    return (exception ).__sentry_captured__;\n  } catch {} // eslint-disable-line no-empty\n}\n\n\n//# sourceMappingURL=misc.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL21pc2MuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUF1RDtBQUNoQjtBQUNLOztBQUU1QztBQUNBLGNBQWMscURBQVU7QUFDeEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsNkJBQTZCO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0JBQW9CLElBQUkscUJBQXFCO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RDtBQUM1RDtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCO0FBQzdCO0FBQ0EsK0JBQStCOztBQUUvQjtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLG9EQUFROztBQUUzQjtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLG9EQUFROztBQUUvQjtBQUNBO0FBQ0EsbUJBQW1CLG9EQUFRO0FBQzNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSx5QkFBeUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLG9FQUF3QjtBQUM1QixJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUztBQUNiOztBQUU2STtBQUM3SSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL21pc2MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWRkTm9uRW51bWVyYWJsZVByb3BlcnR5IH0gZnJvbSAnLi9vYmplY3QuanMnO1xuaW1wb3J0IHsgc25pcExpbmUgfSBmcm9tICcuL3N0cmluZy5qcyc7XG5pbXBvcnQgeyBHTE9CQUxfT0JKIH0gZnJvbSAnLi93b3JsZHdpZGUuanMnO1xuXG5mdW5jdGlvbiBnZXRDcnlwdG8oKSB7XG4gIGNvbnN0IGdibCA9IEdMT0JBTF9PQkogO1xuICByZXR1cm4gZ2JsLmNyeXB0byB8fCBnYmwubXNDcnlwdG87XG59XG5cbi8qKlxuICogVVVJRDQgZ2VuZXJhdG9yXG4gKiBAcGFyYW0gY3J5cHRvIE9iamVjdCB0aGF0IHByb3ZpZGVzIHRoZSBjcnlwdG8gQVBJLlxuICogQHJldHVybnMgc3RyaW5nIEdlbmVyYXRlZCBVVUlENC5cbiAqL1xuZnVuY3Rpb24gdXVpZDQoY3J5cHRvID0gZ2V0Q3J5cHRvKCkpIHtcbiAgbGV0IGdldFJhbmRvbUJ5dGUgPSAoKSA9PiBNYXRoLnJhbmRvbSgpICogMTY7XG4gIHRyeSB7XG4gICAgaWYgKGNyeXB0bz8ucmFuZG9tVVVJRCkge1xuICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCkucmVwbGFjZSgvLS9nLCAnJyk7XG4gICAgfVxuICAgIGlmIChjcnlwdG8/LmdldFJhbmRvbVZhbHVlcykge1xuICAgICAgZ2V0UmFuZG9tQnl0ZSA9ICgpID0+IHtcbiAgICAgICAgLy8gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyBtaWdodCByZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgdGhlIHR5cGVkIGFycmF5XG4gICAgICAgIC8vIGluIG9sZCBDaHJvbWl1bSB2ZXJzaW9ucyAoZS5nLiAyMy4wLjEyMzUuMCAoMTUxNDIyKSlcbiAgICAgICAgLy8gSG93ZXZlciwgYHR5cGVkQXJyYXlgIGlzIHN0aWxsIGZpbGxlZCBpbi1wbGFjZS5cbiAgICAgICAgLy8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3J5cHRvL2dldFJhbmRvbVZhbHVlcyN0eXBlZGFycmF5XG4gICAgICAgIGNvbnN0IHR5cGVkQXJyYXkgPSBuZXcgVWludDhBcnJheSgxKTtcbiAgICAgICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyh0eXBlZEFycmF5KTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgcmV0dXJuIHR5cGVkQXJyYXlbMF07XG4gICAgICB9O1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gc29tZSBydW50aW1lcyBjYW4gY3Jhc2ggaW52b2tpbmcgY3J5cHRvXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvODkzNVxuICB9XG5cbiAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDUwMzQvaG93LXRvLWNyZWF0ZS1hLWd1aWQtdXVpZC1pbi1qYXZhc2NyaXB0LzIxMTc1MjMjMjExNzUyM1xuICAvLyBDb25jYXRlbmF0aW5nIHRoZSBmb2xsb3dpbmcgbnVtYmVycyBhcyBzdHJpbmdzIHJlc3VsdHMgaW4gJzEwMDAwMDAwMTAwMDQwMDA4MDAwMTAwMDAwMDAwMDAwJ1xuICByZXR1cm4gKChbMWU3XSApICsgMWUzICsgNGUzICsgOGUzICsgMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgYyA9PlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgKChjICkgXiAoKGdldFJhbmRvbUJ5dGUoKSAmIDE1KSA+PiAoKGMgKSAvIDQpKSkudG9TdHJpbmcoMTYpLFxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRGaXJzdEV4Y2VwdGlvbihldmVudCkge1xuICByZXR1cm4gZXZlbnQuZXhjZXB0aW9uPy52YWx1ZXM/LlswXTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBlaXRoZXIgbWVzc2FnZSBvciB0eXBlK3ZhbHVlIGZyb20gYW4gZXZlbnQgdGhhdCBjYW4gYmUgdXNlZCBmb3IgdXNlci1mYWNpbmcgbG9nc1xuICogQHJldHVybnMgZXZlbnQncyBkZXNjcmlwdGlvblxuICovXG5mdW5jdGlvbiBnZXRFdmVudERlc2NyaXB0aW9uKGV2ZW50KSB7XG4gIGNvbnN0IHsgbWVzc2FnZSwgZXZlbnRfaWQ6IGV2ZW50SWQgfSA9IGV2ZW50O1xuICBpZiAobWVzc2FnZSkge1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgY29uc3QgZmlyc3RFeGNlcHRpb24gPSBnZXRGaXJzdEV4Y2VwdGlvbihldmVudCk7XG4gIGlmIChmaXJzdEV4Y2VwdGlvbikge1xuICAgIGlmIChmaXJzdEV4Y2VwdGlvbi50eXBlICYmIGZpcnN0RXhjZXB0aW9uLnZhbHVlKSB7XG4gICAgICByZXR1cm4gYCR7Zmlyc3RFeGNlcHRpb24udHlwZX06ICR7Zmlyc3RFeGNlcHRpb24udmFsdWV9YDtcbiAgICB9XG4gICAgcmV0dXJuIGZpcnN0RXhjZXB0aW9uLnR5cGUgfHwgZmlyc3RFeGNlcHRpb24udmFsdWUgfHwgZXZlbnRJZCB8fCAnPHVua25vd24+JztcbiAgfVxuICByZXR1cm4gZXZlbnRJZCB8fCAnPHVua25vd24+Jztcbn1cblxuLyoqXG4gKiBBZGRzIGV4Y2VwdGlvbiB2YWx1ZXMsIHR5cGUgYW5kIHZhbHVlIHRvIGFuIHN5bnRoZXRpYyBFeGNlcHRpb24uXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiB0aGUgZXhjZXB0aW9uLlxuICogQHBhcmFtIHR5cGUgVHlwZSBvZiB0aGUgZXhjZXB0aW9uLlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBhZGRFeGNlcHRpb25UeXBlVmFsdWUoZXZlbnQsIHZhbHVlLCB0eXBlKSB7XG4gIGNvbnN0IGV4Y2VwdGlvbiA9IChldmVudC5leGNlcHRpb24gPSBldmVudC5leGNlcHRpb24gfHwge30pO1xuICBjb25zdCB2YWx1ZXMgPSAoZXhjZXB0aW9uLnZhbHVlcyA9IGV4Y2VwdGlvbi52YWx1ZXMgfHwgW10pO1xuICBjb25zdCBmaXJzdEV4Y2VwdGlvbiA9ICh2YWx1ZXNbMF0gPSB2YWx1ZXNbMF0gfHwge30pO1xuICBpZiAoIWZpcnN0RXhjZXB0aW9uLnZhbHVlKSB7XG4gICAgZmlyc3RFeGNlcHRpb24udmFsdWUgPSB2YWx1ZSB8fCAnJztcbiAgfVxuICBpZiAoIWZpcnN0RXhjZXB0aW9uLnR5cGUpIHtcbiAgICBmaXJzdEV4Y2VwdGlvbi50eXBlID0gdHlwZSB8fCAnRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogQWRkcyBleGNlcHRpb24gbWVjaGFuaXNtIGRhdGEgdG8gYSBnaXZlbiBldmVudC4gVXNlcyBkZWZhdWx0cyBpZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyBub3QgcGFzc2VkLlxuICpcbiAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdG8gbW9kaWZ5LlxuICogQHBhcmFtIG5ld01lY2hhbmlzbSBNZWNoYW5pc20gZGF0YSB0byBhZGQgdG8gdGhlIGV2ZW50LlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBhZGRFeGNlcHRpb25NZWNoYW5pc20oZXZlbnQsIG5ld01lY2hhbmlzbSkge1xuICBjb25zdCBmaXJzdEV4Y2VwdGlvbiA9IGdldEZpcnN0RXhjZXB0aW9uKGV2ZW50KTtcbiAgaWYgKCFmaXJzdEV4Y2VwdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGRlZmF1bHRNZWNoYW5pc20gPSB7IHR5cGU6ICdnZW5lcmljJywgaGFuZGxlZDogdHJ1ZSB9O1xuICBjb25zdCBjdXJyZW50TWVjaGFuaXNtID0gZmlyc3RFeGNlcHRpb24ubWVjaGFuaXNtO1xuICBmaXJzdEV4Y2VwdGlvbi5tZWNoYW5pc20gPSB7IC4uLmRlZmF1bHRNZWNoYW5pc20sIC4uLmN1cnJlbnRNZWNoYW5pc20sIC4uLm5ld01lY2hhbmlzbSB9O1xuXG4gIGlmIChuZXdNZWNoYW5pc20gJiYgJ2RhdGEnIGluIG5ld01lY2hhbmlzbSkge1xuICAgIGNvbnN0IG1lcmdlZERhdGEgPSB7IC4uLmN1cnJlbnRNZWNoYW5pc20/LmRhdGEsIC4uLm5ld01lY2hhbmlzbS5kYXRhIH07XG4gICAgZmlyc3RFeGNlcHRpb24ubWVjaGFuaXNtLmRhdGEgPSBtZXJnZWREYXRhO1xuICB9XG59XG5cbi8vIGh0dHBzOi8vc2VtdmVyLm9yZy8jaXMtdGhlcmUtYS1zdWdnZXN0ZWQtcmVndWxhci1leHByZXNzaW9uLXJlZ2V4LXRvLWNoZWNrLWEtc2VtdmVyLXN0cmluZ1xuY29uc3QgU0VNVkVSX1JFR0VYUCA9XG4gIC9eKDB8WzEtOV1cXGQqKVxcLigwfFsxLTldXFxkKilcXC4oMHxbMS05XVxcZCopKD86LSgoPzowfFsxLTldXFxkKnxcXGQqW2EtekEtWi1dWzAtOWEtekEtWi1dKikoPzpcXC4oPzowfFsxLTldXFxkKnxcXGQqW2EtekEtWi1dWzAtOWEtekEtWi1dKikpKikpPyg/OlxcKyhbMC05YS16QS1aLV0rKD86XFwuWzAtOWEtekEtWi1dKykqKSk/JC87XG5cbi8qKlxuICogUmVwcmVzZW50cyBTZW1hbnRpYyBWZXJzaW9uaW5nIG9iamVjdFxuICovXG5cbmZ1bmN0aW9uIF9wYXJzZUludChpbnB1dCkge1xuICByZXR1cm4gcGFyc2VJbnQoaW5wdXQgfHwgJycsIDEwKTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgaW5wdXQgaW50byBhIFNlbVZlciBpbnRlcmZhY2VcbiAqIEBwYXJhbSBpbnB1dCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBzZW12ZXIgdmVyc2lvblxuICovXG5mdW5jdGlvbiBwYXJzZVNlbXZlcihpbnB1dCkge1xuICBjb25zdCBtYXRjaCA9IGlucHV0Lm1hdGNoKFNFTVZFUl9SRUdFWFApIHx8IFtdO1xuICBjb25zdCBtYWpvciA9IF9wYXJzZUludChtYXRjaFsxXSk7XG4gIGNvbnN0IG1pbm9yID0gX3BhcnNlSW50KG1hdGNoWzJdKTtcbiAgY29uc3QgcGF0Y2ggPSBfcGFyc2VJbnQobWF0Y2hbM10pO1xuICByZXR1cm4ge1xuICAgIGJ1aWxkbWV0YWRhdGE6IG1hdGNoWzVdLFxuICAgIG1ham9yOiBpc05hTihtYWpvcikgPyB1bmRlZmluZWQgOiBtYWpvcixcbiAgICBtaW5vcjogaXNOYU4obWlub3IpID8gdW5kZWZpbmVkIDogbWlub3IsXG4gICAgcGF0Y2g6IGlzTmFOKHBhdGNoKSA/IHVuZGVmaW5lZCA6IHBhdGNoLFxuICAgIHByZXJlbGVhc2U6IG1hdGNoWzRdLFxuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWRkcyBjb250ZXh0IChwcmUvcG9zdC9saW5lKSBsaW5lcyB0byB0aGUgcHJvdmlkZWQgZnJhbWVcbiAqXG4gKiBAcGFyYW0gbGluZXMgc3RyaW5nW10gY29udGFpbmluZyBhbGwgbGluZXNcbiAqIEBwYXJhbSBmcmFtZSBTdGFja0ZyYW1lIHRoYXQgd2lsbCBiZSBtdXRhdGVkXG4gKiBAcGFyYW0gbGluZXNPZkNvbnRleHQgbnVtYmVyIG9mIGNvbnRleHQgbGluZXMgd2Ugd2FudCB0byBhZGQgcHJlL3Bvc3RcbiAqL1xuZnVuY3Rpb24gYWRkQ29udGV4dFRvRnJhbWUobGluZXMsIGZyYW1lLCBsaW5lc09mQ29udGV4dCA9IDUpIHtcbiAgLy8gV2hlbiB0aGVyZSBpcyBubyBsaW5lIG51bWJlciBpbiB0aGUgZnJhbWUsIGF0dGFjaGluZyBjb250ZXh0IGlzIG5vbnNlbnNpY2FsIGFuZCB3aWxsIGV2ZW4gYnJlYWsgZ3JvdXBpbmdcbiAgaWYgKGZyYW1lLmxpbmVubyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbWF4TGluZXMgPSBsaW5lcy5sZW5ndGg7XG4gIGNvbnN0IHNvdXJjZUxpbmUgPSBNYXRoLm1heChNYXRoLm1pbihtYXhMaW5lcyAtIDEsIGZyYW1lLmxpbmVubyAtIDEpLCAwKTtcblxuICBmcmFtZS5wcmVfY29udGV4dCA9IGxpbmVzXG4gICAgLnNsaWNlKE1hdGgubWF4KDAsIHNvdXJjZUxpbmUgLSBsaW5lc09mQ29udGV4dCksIHNvdXJjZUxpbmUpXG4gICAgLm1hcCgobGluZSkgPT4gc25pcExpbmUobGluZSwgMCkpO1xuXG4gIC8vIFdlIGd1YXJkIGhlcmUgdG8gZW5zdXJlIHRoaXMgaXMgbm90IGxhcmdlciB0aGFuIHRoZSBleGlzdGluZyBudW1iZXIgb2YgbGluZXNcbiAgY29uc3QgbGluZUluZGV4ID0gTWF0aC5taW4obWF4TGluZXMgLSAxLCBzb3VyY2VMaW5lKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICBmcmFtZS5jb250ZXh0X2xpbmUgPSBzbmlwTGluZShsaW5lc1tsaW5lSW5kZXhdLCBmcmFtZS5jb2xubyB8fCAwKTtcblxuICBmcmFtZS5wb3N0X2NvbnRleHQgPSBsaW5lc1xuICAgIC5zbGljZShNYXRoLm1pbihzb3VyY2VMaW5lICsgMSwgbWF4TGluZXMpLCBzb3VyY2VMaW5lICsgMSArIGxpbmVzT2ZDb250ZXh0KVxuICAgIC5tYXAoKGxpbmUpID0+IHNuaXBMaW5lKGxpbmUsIDApKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBvciBub3Qgd2UndmUgYWxyZWFkeSBjYXB0dXJlZCB0aGUgZ2l2ZW4gZXhjZXB0aW9uIChub3RlOiBub3QgYW4gaWRlbnRpY2FsIGV4Y2VwdGlvbiAtIHRoZSB2ZXJ5IG9iamVjdFxuICogaW4gcXVlc3Rpb24pLCBhbmQgbWFya3MgaXQgY2FwdHVyZWQgaWYgbm90LlxuICpcbiAqIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2UgaXQncyBwb3NzaWJsZSBmb3IgYW4gZXJyb3IgdG8gZ2V0IGNhcHR1cmVkIGJ5IG1vcmUgdGhhbiBvbmUgbWVjaGFuaXNtLiBBZnRlciB3ZSBpbnRlcmNlcHQgYW5kXG4gKiByZWNvcmQgYW4gZXJyb3IsIHdlIHJldGhyb3cgaXQgKGFzc3VtaW5nIHdlJ3ZlIGludGVyY2VwdGVkIGl0IGJlZm9yZSBpdCdzIHJlYWNoZWQgdGhlIHRvcC1sZXZlbCBnbG9iYWwgaGFuZGxlcnMpLCBzb1xuICogdGhhdCB3ZSBkb24ndCBpbnRlcmZlcmUgd2l0aCB3aGF0ZXZlciBlZmZlY3RzIHRoZSBlcnJvciBtaWdodCBoYXZlIGhhZCB3ZXJlIHRoZSBTREsgbm90IHRoZXJlLiBBdCB0aGF0IHBvaW50LCBiZWNhdXNlXG4gKiB0aGUgZXJyb3IgaGFzIGJlZW4gcmV0aHJvd24sIGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGJ1YmJsZSB1cCB0byBzb21lIG90aGVyIGNvZGUgd2UndmUgaW5zdHJ1bWVudGVkLiBJZiBpdCdzIG5vdFxuICogY2F1Z2h0IGFmdGVyIHRoYXQsIGl0IHdpbGwgYnViYmxlIGFsbCB0aGUgd2F5IHVwIHRvIHRoZSBnbG9iYWwgaGFuZGxlcnMgKHdoaWNoIG9mIGNvdXJzZSB3ZSBhbHNvIGluc3RydW1lbnQpLiBUaGlzXG4gKiBmdW5jdGlvbiBoZWxwcyB1cyBlbnN1cmUgdGhhdCBldmVuIGlmIHdlIGVuY291bnRlciB0aGUgc2FtZSBlcnJvciBtb3JlIHRoYW4gb25jZSwgd2Ugb25seSByZWNvcmQgaXQgdGhlIGZpcnN0IHRpbWUgd2VcbiAqIHNlZSBpdC5cbiAqXG4gKiBOb3RlOiBJdCB3aWxsIGlnbm9yZSBwcmltaXRpdmVzIChhbHdheXMgcmV0dXJuIGBmYWxzZWAgYW5kIG5vdCBtYXJrIHRoZW0gYXMgc2VlbiksIGFzIHByb3BlcnRpZXMgY2FuJ3QgYmUgc2V0IG9uXG4gKiB0aGVtLiB7QGxpbms6IE9iamVjdC5vYmplY3RpZnl9IGNhbiBiZSB1c2VkIG9uIGV4Y2VwdGlvbnMgdG8gY29udmVydCBhbnkgdGhhdCBhcmUgcHJpbWl0aXZlcyBpbnRvIHRoZWlyIGVxdWl2YWxlbnRcbiAqIG9iamVjdCB3cmFwcGVyIGZvcm1zIHNvIHRoYXQgdGhpcyBjaGVjayB3aWxsIGFsd2F5cyB3b3JrLiBIb3dldmVyLCBiZWNhdXNlIHdlIG5lZWQgdG8gZmxhZyB0aGUgZXhhY3Qgb2JqZWN0IHdoaWNoXG4gKiB3aWxsIGdldCByZXRocm93biwgYW5kIGJlY2F1c2UgdGhhdCByZXRocm93aW5nIGhhcHBlbnMgb3V0c2lkZSBvZiB0aGUgZXZlbnQgcHJvY2Vzc2luZyBwaXBlbGluZSwgdGhlIG9iamVjdGlmaWNhdGlvblxuICogbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUgZXhjZXB0aW9uIGNhcHR1cmVkLlxuICpcbiAqIEBwYXJhbSBBIHRocm93biBleGNlcHRpb24gdG8gY2hlY2sgb3IgZmxhZyBhcyBoYXZpbmcgYmVlbiBzZWVuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGV4Y2VwdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGNhcHR1cmVkLCBgZmFsc2VgIGlmIG5vdCAod2l0aCB0aGUgc2lkZSBlZmZlY3Qgb2YgbWFya2luZyBpdCBzZWVuKVxuICovXG5mdW5jdGlvbiBjaGVja09yU2V0QWxyZWFkeUNhdWdodChleGNlcHRpb24pIHtcbiAgaWYgKGlzQWxyZWFkeUNhcHR1cmVkKGV4Y2VwdGlvbikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gc2V0IGl0IHRoaXMgd2F5IHJhdGhlciB0aGFuIGJ5IGFzc2lnbm1lbnQgc28gdGhhdCBpdCdzIG5vdCBlbm51bWVyYWJsZSBhbmQgdGhlcmVmb3JlIGlzbid0IHJlY29yZGVkIGJ5IHRoZVxuICAgIC8vIGBFeHRyYUVycm9yRGF0YWAgaW50ZWdyYXRpb25cbiAgICBhZGROb25FbnVtZXJhYmxlUHJvcGVydHkoZXhjZXB0aW9uICwgJ19fc2VudHJ5X2NhcHR1cmVkX18nLCB0cnVlKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gYGV4Y2VwdGlvbmAgaXMgYSBwcmltaXRpdmUsIHNvIHdlIGNhbid0IG1hcmsgaXQgc2VlblxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0FscmVhZHlDYXB0dXJlZChleGNlcHRpb24pIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGV4Y2VwdGlvbiApLl9fc2VudHJ5X2NhcHR1cmVkX187XG4gIH0gY2F0Y2gge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxufVxuXG5leHBvcnQgeyBhZGRDb250ZXh0VG9GcmFtZSwgYWRkRXhjZXB0aW9uTWVjaGFuaXNtLCBhZGRFeGNlcHRpb25UeXBlVmFsdWUsIGNoZWNrT3JTZXRBbHJlYWR5Q2F1Z2h0LCBnZXRFdmVudERlc2NyaXB0aW9uLCBwYXJzZVNlbXZlciwgdXVpZDQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1pc2MuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/misc.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/node-stack-trace.js":
/*!**************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/node-stack-trace.js ***!
  \**************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   filenameIsInApp: () => (/* binding */ filenameIsInApp),\n/* harmony export */   node: () => (/* binding */ node),\n/* harmony export */   nodeStackLineParser: () => (/* binding */ nodeStackLineParser)\n/* harmony export */ });\n/* harmony import */ var _stacktrace_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stacktrace.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/stacktrace.js\");\n\n\n/**\n * Does this filename look like it's part of the app code?\n */\nfunction filenameIsInApp(filename, isNative = false) {\n  const isInternal =\n    isNative ||\n    (filename &&\n      // It's not internal if it's an absolute linux path\n      !filename.startsWith('/') &&\n      // It's not internal if it's an absolute windows path\n      !filename.match(/^[A-Z]:/) &&\n      // It's not internal if the path is starting with a dot\n      !filename.startsWith('.') &&\n      // It's not internal if the frame has a protocol. In node, this is usually the case if the file got pre-processed with a bundler like webpack\n      !filename.match(/^[a-zA-Z]([a-zA-Z0-9.\\-+])*:\\/\\//)); // Schema from: https://stackoverflow.com/a/3641782\n\n  // in_app is all that's not an internal Node function or a module within node_modules\n  // note that isNative appears to return true even for node core libraries\n  // see https://github.com/getsentry/raven-node/issues/176\n\n  return !isInternal && filename !== undefined && !filename.includes('node_modules/');\n}\n\n/** Node Stack line parser */\nfunction node(getModule) {\n  const FILENAME_MATCH = /^\\s*[-]{4,}$/;\n  const FULL_MATCH = /at (?:async )?(?:(.+?)\\s+\\()?(?:(.+):(\\d+):(\\d+)?|([^)]+))\\)?/;\n\n  // eslint-disable-next-line complexity\n  return (line) => {\n    const lineMatch = line.match(FULL_MATCH);\n\n    if (lineMatch) {\n      let object;\n      let method;\n      let functionName;\n      let typeName;\n      let methodName;\n\n      if (lineMatch[1]) {\n        functionName = lineMatch[1];\n\n        let methodStart = functionName.lastIndexOf('.');\n        if (functionName[methodStart - 1] === '.') {\n          methodStart--;\n        }\n\n        if (methodStart > 0) {\n          object = functionName.slice(0, methodStart);\n          method = functionName.slice(methodStart + 1);\n          const objectEnd = object.indexOf('.Module');\n          if (objectEnd > 0) {\n            functionName = functionName.slice(objectEnd + 1);\n            object = object.slice(0, objectEnd);\n          }\n        }\n        typeName = undefined;\n      }\n\n      if (method) {\n        typeName = object;\n        methodName = method;\n      }\n\n      if (method === '<anonymous>') {\n        methodName = undefined;\n        functionName = undefined;\n      }\n\n      if (functionName === undefined) {\n        methodName = methodName || _stacktrace_js__WEBPACK_IMPORTED_MODULE_0__.UNKNOWN_FUNCTION;\n        functionName = typeName ? `${typeName}.${methodName}` : methodName;\n      }\n\n      let filename = lineMatch[2]?.startsWith('file://') ? lineMatch[2].slice(7) : lineMatch[2];\n      const isNative = lineMatch[5] === 'native';\n\n      // If it's a Windows path, trim the leading slash so that `/C:/foo` becomes `C:/foo`\n      if (filename?.match(/\\/[A-Z]:/)) {\n        filename = filename.slice(1);\n      }\n\n      if (!filename && lineMatch[5] && !isNative) {\n        filename = lineMatch[5];\n      }\n\n      return {\n        filename: filename ? decodeURI(filename) : undefined,\n        module: getModule ? getModule(filename) : undefined,\n        function: functionName,\n        lineno: _parseIntOrUndefined(lineMatch[3]),\n        colno: _parseIntOrUndefined(lineMatch[4]),\n        in_app: filenameIsInApp(filename || '', isNative),\n      };\n    }\n\n    if (line.match(FILENAME_MATCH)) {\n      return {\n        filename: line,\n      };\n    }\n\n    return undefined;\n  };\n}\n\n/**\n * Node.js stack line parser\n *\n * This is in @sentry/core so it can be used from the Electron SDK in the browser for when `nodeIntegration == true`.\n * This allows it to be used without referencing or importing any node specific code which causes bundlers to complain\n */\nfunction nodeStackLineParser(getModule) {\n  return [90, node(getModule)];\n}\n\nfunction _parseIntOrUndefined(input) {\n  return parseInt(input || '', 10) || undefined;\n}\n\n\n//# sourceMappingURL=node-stack-trace.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL25vZGUtc3RhY2stdHJhY2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFtRDs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RDs7QUFFNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQyxHQUFHO0FBQ3JDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUNBQW1DLDREQUFnQjtBQUNuRCxxQ0FBcUMsU0FBUyxHQUFHLFdBQVc7QUFDNUQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRXNEO0FBQ3REIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvbm9kZS1zdGFjay10cmFjZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVTktOT1dOX0ZVTkNUSU9OIH0gZnJvbSAnLi9zdGFja3RyYWNlLmpzJztcblxuLyoqXG4gKiBEb2VzIHRoaXMgZmlsZW5hbWUgbG9vayBsaWtlIGl0J3MgcGFydCBvZiB0aGUgYXBwIGNvZGU/XG4gKi9cbmZ1bmN0aW9uIGZpbGVuYW1lSXNJbkFwcChmaWxlbmFtZSwgaXNOYXRpdmUgPSBmYWxzZSkge1xuICBjb25zdCBpc0ludGVybmFsID1cbiAgICBpc05hdGl2ZSB8fFxuICAgIChmaWxlbmFtZSAmJlxuICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSBsaW51eCBwYXRoXG4gICAgICAhZmlsZW5hbWUuc3RhcnRzV2l0aCgnLycpICYmXG4gICAgICAvLyBJdCdzIG5vdCBpbnRlcm5hbCBpZiBpdCdzIGFuIGFic29sdXRlIHdpbmRvd3MgcGF0aFxuICAgICAgIWZpbGVuYW1lLm1hdGNoKC9eW0EtWl06LykgJiZcbiAgICAgIC8vIEl0J3Mgbm90IGludGVybmFsIGlmIHRoZSBwYXRoIGlzIHN0YXJ0aW5nIHdpdGggYSBkb3RcbiAgICAgICFmaWxlbmFtZS5zdGFydHNXaXRoKCcuJykgJiZcbiAgICAgIC8vIEl0J3Mgbm90IGludGVybmFsIGlmIHRoZSBmcmFtZSBoYXMgYSBwcm90b2NvbC4gSW4gbm9kZSwgdGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGlmIHRoZSBmaWxlIGdvdCBwcmUtcHJvY2Vzc2VkIHdpdGggYSBidW5kbGVyIGxpa2Ugd2VicGFja1xuICAgICAgIWZpbGVuYW1lLm1hdGNoKC9eW2EtekEtWl0oW2EtekEtWjAtOS5cXC0rXSkqOlxcL1xcLy8pKTsgLy8gU2NoZW1hIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zNjQxNzgyXG5cbiAgLy8gaW5fYXBwIGlzIGFsbCB0aGF0J3Mgbm90IGFuIGludGVybmFsIE5vZGUgZnVuY3Rpb24gb3IgYSBtb2R1bGUgd2l0aGluIG5vZGVfbW9kdWxlc1xuICAvLyBub3RlIHRoYXQgaXNOYXRpdmUgYXBwZWFycyB0byByZXR1cm4gdHJ1ZSBldmVuIGZvciBub2RlIGNvcmUgbGlicmFyaWVzXG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3JhdmVuLW5vZGUvaXNzdWVzLzE3NlxuXG4gIHJldHVybiAhaXNJbnRlcm5hbCAmJiBmaWxlbmFtZSAhPT0gdW5kZWZpbmVkICYmICFmaWxlbmFtZS5pbmNsdWRlcygnbm9kZV9tb2R1bGVzLycpO1xufVxuXG4vKiogTm9kZSBTdGFjayBsaW5lIHBhcnNlciAqL1xuZnVuY3Rpb24gbm9kZShnZXRNb2R1bGUpIHtcbiAgY29uc3QgRklMRU5BTUVfTUFUQ0ggPSAvXlxccypbLV17NCx9JC87XG4gIGNvbnN0IEZVTExfTUFUQ0ggPSAvYXQgKD86YXN5bmMgKT8oPzooLis/KVxccytcXCgpPyg/OiguKyk6KFxcZCspOihcXGQrKT98KFteKV0rKSlcXCk/LztcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICByZXR1cm4gKGxpbmUpID0+IHtcbiAgICBjb25zdCBsaW5lTWF0Y2ggPSBsaW5lLm1hdGNoKEZVTExfTUFUQ0gpO1xuXG4gICAgaWYgKGxpbmVNYXRjaCkge1xuICAgICAgbGV0IG9iamVjdDtcbiAgICAgIGxldCBtZXRob2Q7XG4gICAgICBsZXQgZnVuY3Rpb25OYW1lO1xuICAgICAgbGV0IHR5cGVOYW1lO1xuICAgICAgbGV0IG1ldGhvZE5hbWU7XG5cbiAgICAgIGlmIChsaW5lTWF0Y2hbMV0pIHtcbiAgICAgICAgZnVuY3Rpb25OYW1lID0gbGluZU1hdGNoWzFdO1xuXG4gICAgICAgIGxldCBtZXRob2RTdGFydCA9IGZ1bmN0aW9uTmFtZS5sYXN0SW5kZXhPZignLicpO1xuICAgICAgICBpZiAoZnVuY3Rpb25OYW1lW21ldGhvZFN0YXJ0IC0gMV0gPT09ICcuJykge1xuICAgICAgICAgIG1ldGhvZFN0YXJ0LS07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWV0aG9kU3RhcnQgPiAwKSB7XG4gICAgICAgICAgb2JqZWN0ID0gZnVuY3Rpb25OYW1lLnNsaWNlKDAsIG1ldGhvZFN0YXJ0KTtcbiAgICAgICAgICBtZXRob2QgPSBmdW5jdGlvbk5hbWUuc2xpY2UobWV0aG9kU3RhcnQgKyAxKTtcbiAgICAgICAgICBjb25zdCBvYmplY3RFbmQgPSBvYmplY3QuaW5kZXhPZignLk1vZHVsZScpO1xuICAgICAgICAgIGlmIChvYmplY3RFbmQgPiAwKSB7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWUuc2xpY2Uob2JqZWN0RW5kICsgMSk7XG4gICAgICAgICAgICBvYmplY3QgPSBvYmplY3Quc2xpY2UoMCwgb2JqZWN0RW5kKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHlwZU5hbWUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRob2QpIHtcbiAgICAgICAgdHlwZU5hbWUgPSBvYmplY3Q7XG4gICAgICAgIG1ldGhvZE5hbWUgPSBtZXRob2Q7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRob2QgPT09ICc8YW5vbnltb3VzPicpIHtcbiAgICAgICAgbWV0aG9kTmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgZnVuY3Rpb25OYW1lID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoZnVuY3Rpb25OYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWV0aG9kTmFtZSA9IG1ldGhvZE5hbWUgfHwgVU5LTk9XTl9GVU5DVElPTjtcbiAgICAgICAgZnVuY3Rpb25OYW1lID0gdHlwZU5hbWUgPyBgJHt0eXBlTmFtZX0uJHttZXRob2ROYW1lfWAgOiBtZXRob2ROYW1lO1xuICAgICAgfVxuXG4gICAgICBsZXQgZmlsZW5hbWUgPSBsaW5lTWF0Y2hbMl0/LnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSA/IGxpbmVNYXRjaFsyXS5zbGljZSg3KSA6IGxpbmVNYXRjaFsyXTtcbiAgICAgIGNvbnN0IGlzTmF0aXZlID0gbGluZU1hdGNoWzVdID09PSAnbmF0aXZlJztcblxuICAgICAgLy8gSWYgaXQncyBhIFdpbmRvd3MgcGF0aCwgdHJpbSB0aGUgbGVhZGluZyBzbGFzaCBzbyB0aGF0IGAvQzovZm9vYCBiZWNvbWVzIGBDOi9mb29gXG4gICAgICBpZiAoZmlsZW5hbWU/Lm1hdGNoKC9cXC9bQS1aXTovKSkge1xuICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnNsaWNlKDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZpbGVuYW1lICYmIGxpbmVNYXRjaFs1XSAmJiAhaXNOYXRpdmUpIHtcbiAgICAgICAgZmlsZW5hbWUgPSBsaW5lTWF0Y2hbNV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbGVuYW1lOiBmaWxlbmFtZSA/IGRlY29kZVVSSShmaWxlbmFtZSkgOiB1bmRlZmluZWQsXG4gICAgICAgIG1vZHVsZTogZ2V0TW9kdWxlID8gZ2V0TW9kdWxlKGZpbGVuYW1lKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZnVuY3Rpb246IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgbGluZW5vOiBfcGFyc2VJbnRPclVuZGVmaW5lZChsaW5lTWF0Y2hbM10pLFxuICAgICAgICBjb2xubzogX3BhcnNlSW50T3JVbmRlZmluZWQobGluZU1hdGNoWzRdKSxcbiAgICAgICAgaW5fYXBwOiBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUgfHwgJycsIGlzTmF0aXZlKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGxpbmUubWF0Y2goRklMRU5BTUVfTUFUQ0gpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWxlbmFtZTogbGluZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuLyoqXG4gKiBOb2RlLmpzIHN0YWNrIGxpbmUgcGFyc2VyXG4gKlxuICogVGhpcyBpcyBpbiBAc2VudHJ5L2NvcmUgc28gaXQgY2FuIGJlIHVzZWQgZnJvbSB0aGUgRWxlY3Ryb24gU0RLIGluIHRoZSBicm93c2VyIGZvciB3aGVuIGBub2RlSW50ZWdyYXRpb24gPT0gdHJ1ZWAuXG4gKiBUaGlzIGFsbG93cyBpdCB0byBiZSB1c2VkIHdpdGhvdXQgcmVmZXJlbmNpbmcgb3IgaW1wb3J0aW5nIGFueSBub2RlIHNwZWNpZmljIGNvZGUgd2hpY2ggY2F1c2VzIGJ1bmRsZXJzIHRvIGNvbXBsYWluXG4gKi9cbmZ1bmN0aW9uIG5vZGVTdGFja0xpbmVQYXJzZXIoZ2V0TW9kdWxlKSB7XG4gIHJldHVybiBbOTAsIG5vZGUoZ2V0TW9kdWxlKV07XG59XG5cbmZ1bmN0aW9uIF9wYXJzZUludE9yVW5kZWZpbmVkKGlucHV0KSB7XG4gIHJldHVybiBwYXJzZUludChpbnB1dCB8fCAnJywgMTApIHx8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IHsgZmlsZW5hbWVJc0luQXBwLCBub2RlLCBub2RlU3RhY2tMaW5lUGFyc2VyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub2RlLXN0YWNrLXRyYWNlLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/node-stack-trace.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/node.js":
/*!**************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/node.js ***!
  \**************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   isNodeEnv: () => (/* binding */ isNodeEnv),\n/* harmony export */   loadModule: () => (/* binding */ loadModule)\n/* harmony export */ });\n/* harmony import */ var _env_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./env.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/env.js\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js\");\n\n\n/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the `debug` singleton, or b) put your function elsewhere.\n */\n\n\n/**\n * Checks whether we're in the Node.js or Browser environment\n *\n * @returns Answer to given question\n */\nfunction isNodeEnv() {\n  // explicitly check for browser bundles as those can be optimized statically\n  // by terser/rollup.\n  return (\n    !(0,_env_js__WEBPACK_IMPORTED_MODULE_0__.isBrowserBundle)() &&\n    Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]'\n  );\n}\n\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param request The module path to resolve\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction dynamicRequire(mod, request) {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return mod.require(request);\n}\n\n/**\n * Helper for dynamically loading module that should work with linked dependencies.\n * The problem is that we _should_ be using `require(require.resolve(moduleName, { paths: [cwd()] }))`\n * However it's _not possible_ to do that with Webpack, as it has to know all the dependencies during\n * build time. `require.resolve` is also not available in any other way, so we cannot create,\n * a fake helper like we do with `dynamicRequire`.\n *\n * We always prefer to use local package, thus the value is not returned early from each `try/catch` block.\n * That is to mimic the behavior of `require.resolve` exactly.\n *\n * @param moduleName module name to require\n * @param existingModule module to use for requiring\n * @returns possibly required module\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction loadModule(moduleName, existingModule = module) {\n  let mod;\n\n  try {\n    mod = dynamicRequire(existingModule, moduleName);\n  } catch {\n    // no-empty\n  }\n\n  if (!mod) {\n    try {\n      const { cwd } = dynamicRequire(existingModule, 'process');\n      mod = dynamicRequire(existingModule, `${cwd()}/node_modules/${moduleName}`) ;\n    } catch {\n      // no-empty\n    }\n  }\n\n  return mod;\n}\n\n\n//# sourceMappingURL=node.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL25vZGUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUEyQzs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssd0RBQWU7QUFDcEIsMENBQTBDLE9BQU8sbUJBQW1CLE9BQU87QUFDM0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUZBQW1GLGdCQUFnQjtBQUNuRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYyxNQUFNO0FBQ3BCLDhDQUE4QyxNQUFNLGdCQUFnQixXQUFXO0FBQy9FLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFaUM7QUFDakMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS91dGlscy9ub2RlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQnJvd3NlckJ1bmRsZSB9IGZyb20gJy4vZW52LmpzJztcblxuLyoqXG4gKiBOT1RFOiBJbiBvcmRlciB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMsIGlmIHlvdSBhZGQgYSBmdW5jdGlvbiB0byB0aGlzIG1vZHVsZSBhbmQgaXQgbmVlZHMgdG8gcHJpbnQgc29tZXRoaW5nLFxuICogeW91IG11c3QgZWl0aGVyIGEpIHVzZSBgY29uc29sZS5sb2dgIHJhdGhlciB0aGFuIHRoZSBgZGVidWdgIHNpbmdsZXRvbiwgb3IgYikgcHV0IHlvdXIgZnVuY3Rpb24gZWxzZXdoZXJlLlxuICovXG5cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB3ZSdyZSBpbiB0aGUgTm9kZS5qcyBvciBCcm93c2VyIGVudmlyb25tZW50XG4gKlxuICogQHJldHVybnMgQW5zd2VyIHRvIGdpdmVuIHF1ZXN0aW9uXG4gKi9cbmZ1bmN0aW9uIGlzTm9kZUVudigpIHtcbiAgLy8gZXhwbGljaXRseSBjaGVjayBmb3IgYnJvd3NlciBidW5kbGVzIGFzIHRob3NlIGNhbiBiZSBvcHRpbWl6ZWQgc3RhdGljYWxseVxuICAvLyBieSB0ZXJzZXIvcm9sbHVwLlxuICByZXR1cm4gKFxuICAgICFpc0Jyb3dzZXJCdW5kbGUoKSAmJlxuICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgPyBwcm9jZXNzIDogMCkgPT09ICdbb2JqZWN0IHByb2Nlc3NdJ1xuICApO1xufVxuXG4vKipcbiAqIFJlcXVpcmVzIGEgbW9kdWxlIHdoaWNoIGlzIHByb3RlY3RlZCBhZ2FpbnN0IGJ1bmRsZXIgbWluaWZpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSByZXF1ZXN0IFRoZSBtb2R1bGUgcGF0aCB0byByZXNvbHZlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiBkeW5hbWljUmVxdWlyZShtb2QsIHJlcXVlc3QpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICByZXR1cm4gbW9kLnJlcXVpcmUocmVxdWVzdCk7XG59XG5cbi8qKlxuICogSGVscGVyIGZvciBkeW5hbWljYWxseSBsb2FkaW5nIG1vZHVsZSB0aGF0IHNob3VsZCB3b3JrIHdpdGggbGlua2VkIGRlcGVuZGVuY2llcy5cbiAqIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2UgX3Nob3VsZF8gYmUgdXNpbmcgYHJlcXVpcmUocmVxdWlyZS5yZXNvbHZlKG1vZHVsZU5hbWUsIHsgcGF0aHM6IFtjd2QoKV0gfSkpYFxuICogSG93ZXZlciBpdCdzIF9ub3QgcG9zc2libGVfIHRvIGRvIHRoYXQgd2l0aCBXZWJwYWNrLCBhcyBpdCBoYXMgdG8ga25vdyBhbGwgdGhlIGRlcGVuZGVuY2llcyBkdXJpbmdcbiAqIGJ1aWxkIHRpbWUuIGByZXF1aXJlLnJlc29sdmVgIGlzIGFsc28gbm90IGF2YWlsYWJsZSBpbiBhbnkgb3RoZXIgd2F5LCBzbyB3ZSBjYW5ub3QgY3JlYXRlLFxuICogYSBmYWtlIGhlbHBlciBsaWtlIHdlIGRvIHdpdGggYGR5bmFtaWNSZXF1aXJlYC5cbiAqXG4gKiBXZSBhbHdheXMgcHJlZmVyIHRvIHVzZSBsb2NhbCBwYWNrYWdlLCB0aHVzIHRoZSB2YWx1ZSBpcyBub3QgcmV0dXJuZWQgZWFybHkgZnJvbSBlYWNoIGB0cnkvY2F0Y2hgIGJsb2NrLlxuICogVGhhdCBpcyB0byBtaW1pYyB0aGUgYmVoYXZpb3Igb2YgYHJlcXVpcmUucmVzb2x2ZWAgZXhhY3RseS5cbiAqXG4gKiBAcGFyYW0gbW9kdWxlTmFtZSBtb2R1bGUgbmFtZSB0byByZXF1aXJlXG4gKiBAcGFyYW0gZXhpc3RpbmdNb2R1bGUgbW9kdWxlIHRvIHVzZSBmb3IgcmVxdWlyaW5nXG4gKiBAcmV0dXJucyBwb3NzaWJseSByZXF1aXJlZCBtb2R1bGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIGxvYWRNb2R1bGUobW9kdWxlTmFtZSwgZXhpc3RpbmdNb2R1bGUgPSBtb2R1bGUpIHtcbiAgbGV0IG1vZDtcblxuICB0cnkge1xuICAgIG1vZCA9IGR5bmFtaWNSZXF1aXJlKGV4aXN0aW5nTW9kdWxlLCBtb2R1bGVOYW1lKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gbm8tZW1wdHlcbiAgfVxuXG4gIGlmICghbW9kKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgY3dkIH0gPSBkeW5hbWljUmVxdWlyZShleGlzdGluZ01vZHVsZSwgJ3Byb2Nlc3MnKTtcbiAgICAgIG1vZCA9IGR5bmFtaWNSZXF1aXJlKGV4aXN0aW5nTW9kdWxlLCBgJHtjd2QoKX0vbm9kZV9tb2R1bGVzLyR7bW9kdWxlTmFtZX1gKSA7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBuby1lbXB0eVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb2Q7XG59XG5cbmV4cG9ydCB7IGlzTm9kZUVudiwgbG9hZE1vZHVsZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9kZS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/node.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/normalize.js":
/*!*******************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/normalize.js ***!
  \*******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   normalize: () => (/* binding */ normalize),\n/* harmony export */   normalizeToSize: () => (/* binding */ normalizeToSize),\n/* harmony export */   normalizeUrlToBase: () => (/* binding */ normalizeUrlToBase)\n/* harmony export */ });\n/* harmony import */ var _is_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n/* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./object.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js\");\n/* harmony import */ var _stacktrace_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stacktrace.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/stacktrace.js\");\n\n\n\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normalized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction normalize(input, depth = 100, maxProperties = +Infinity) {\n  try {\n    // since we're at the outermost level, we don't provide a key\n    return visit('', input, depth, maxProperties);\n  } catch (err) {\n    return { ERROR: `**non-serializable** (${err})` };\n  }\n}\n\n/** JSDoc */\nfunction normalizeToSize(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  object,\n  // Default Node.js REPL depth\n  depth = 3,\n  // 100kB, as 200kB is max payload size, so half sounds reasonable\n  maxSize = 100 * 1024,\n) {\n  const normalized = normalize(object, depth);\n\n  if (jsonSize(normalized) > maxSize) {\n    return normalizeToSize(object, depth - 1, maxSize);\n  }\n\n  return normalized ;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n  key,\n  value,\n  depth = +Infinity,\n  maxProperties = +Infinity,\n  memo = memoBuilder(),\n) {\n  const [memoize, unmemoize] = memo;\n\n  // Get the simple cases out of the way first\n  if (\n    value == null || // this matches null and undefined -> eqeq not eqeqeq\n    ['boolean', 'string'].includes(typeof value) ||\n    (typeof value === 'number' && Number.isFinite(value))\n  ) {\n    return value ;\n  }\n\n  const stringified = stringifyValue(key, value);\n\n  // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n  // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n  if (!stringified.startsWith('[object ')) {\n    return stringified;\n  }\n\n  // From here on, we can assert that `value` is either an object or an array.\n\n  // Do not normalize objects that we know have already been normalized. As a general rule, the\n  // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n  // have already been normalized.\n  if ((value )['__sentry_skip_normalization__']) {\n    return value ;\n  }\n\n  // We can set `__sentry_override_normalization_depth__` on an object to ensure that from there\n  // We keep a certain amount of depth.\n  // This should be used sparingly, e.g. we use it for the redux integration to ensure we get a certain amount of state.\n  const remainingDepth =\n    typeof (value )['__sentry_override_normalization_depth__'] === 'number'\n      ? ((value )['__sentry_override_normalization_depth__'] )\n      : depth;\n\n  // We're also done if we've reached the max depth\n  if (remainingDepth === 0) {\n    // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n    return stringified.replace('object ', '');\n  }\n\n  // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n  if (memoize(value)) {\n    return '[Circular ~]';\n  }\n\n  // If the value has a `toJSON` method, we call it to extract more information\n  const valueWithToJSON = value ;\n  if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n    try {\n      const jsonValue = valueWithToJSON.toJSON();\n      // We need to normalize the return value of `.toJSON()` in case it has circular references\n      return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n    } catch {\n      // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n    }\n  }\n\n  // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n  // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n  // property/entry, and keep track of the number of items we add to it.\n  const normalized = (Array.isArray(value) ? [] : {}) ;\n  let numAdded = 0;\n\n  // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n  // properties are non-enumerable and otherwise would get missed.\n  const visitable = (0,_object_js__WEBPACK_IMPORTED_MODULE_1__.convertToPlainObject)(value );\n\n  for (const visitKey in visitable) {\n    // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n    if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n      continue;\n    }\n\n    if (numAdded >= maxProperties) {\n      normalized[visitKey] = '[MaxProperties ~]';\n      break;\n    }\n\n    // Recursively visit all the child nodes\n    const visitValue = visitable[visitKey];\n    normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n    numAdded++;\n  }\n\n  // Once we've visited all the branches, remove the parent from memo storage\n  unmemoize(value);\n\n  // Return accumulated values\n  return normalized;\n}\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n  key,\n  // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n  // our internal use, it'll do\n  value,\n) {\n  try {\n    if (key === 'domain' && value && typeof value === 'object' && (value )._events) {\n      return '[Domain]';\n    }\n\n    if (key === 'domainEmitter') {\n      return '[DomainEmitter]';\n    }\n\n    // It's safe to use `global`, `window`, and `document` here in this manner, as we are asserting using `typeof` first\n    // which won't throw if they are not present.\n\n    if (typeof global !== 'undefined' && value === global) {\n      return '[Global]';\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof window !== 'undefined' && value === window) {\n      return '[Window]';\n    }\n\n    // eslint-disable-next-line no-restricted-globals\n    if (typeof document !== 'undefined' && value === document) {\n      return '[Document]';\n    }\n\n    if ((0,_is_js__WEBPACK_IMPORTED_MODULE_0__.isVueViewModel)(value)) {\n      return '[VueViewModel]';\n    }\n\n    // React's SyntheticEvent thingy\n    if ((0,_is_js__WEBPACK_IMPORTED_MODULE_0__.isSyntheticEvent)(value)) {\n      return '[SyntheticEvent]';\n    }\n\n    if (typeof value === 'number' && !Number.isFinite(value)) {\n      return `[${value}]`;\n    }\n\n    if (typeof value === 'function') {\n      return `[Function: ${(0,_stacktrace_js__WEBPACK_IMPORTED_MODULE_2__.getFunctionName)(value)}]`;\n    }\n\n    if (typeof value === 'symbol') {\n      return `[${String(value)}]`;\n    }\n\n    // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n    if (typeof value === 'bigint') {\n      return `[BigInt: ${String(value)}]`;\n    }\n\n    // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n    // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n    // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n    // we can make sure that only plain objects come out that way.\n    const objName = getConstructorName(value);\n\n    // Handle HTML Elements\n    if (/^HTML(\\w*)Element$/.test(objName)) {\n      return `[HTMLElement: ${objName}]`;\n    }\n\n    return `[object ${objName}]`;\n  } catch (err) {\n    return `**non-serializable** (${err})`;\n  }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value) {\n  const prototype = Object.getPrototypeOf(value);\n\n  return prototype?.constructor ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value) {\n  // eslint-disable-next-line no-bitwise\n  return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value) {\n  return utf8Length(JSON.stringify(value));\n}\n\n/**\n * Normalizes URLs in exceptions and stacktraces to a base path so Sentry can fingerprint\n * across platforms and working directory.\n *\n * @param url The URL to be normalized.\n * @param basePath The application base path.\n * @returns The normalized URL.\n */\nfunction normalizeUrlToBase(url, basePath) {\n  const escapedBase = basePath\n    // Backslash to forward\n    .replace(/\\\\/g, '/')\n    // Escape RegExp special characters\n    .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n  let newUrl = url;\n  try {\n    newUrl = decodeURI(url);\n  } catch {\n    // Sometime this breaks\n  }\n  return (\n    newUrl\n      .replace(/\\\\/g, '/')\n      .replace(/webpack:\\/?/g, '') // Remove intermediate base path\n      // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n      .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///')\n  );\n}\n\n/**\n * Helper to decycle json objects\n */\nfunction memoBuilder() {\n  const inner = new WeakSet();\n  function memoize(obj) {\n    if (inner.has(obj)) {\n      return true;\n    }\n    inner.add(obj);\n    return false;\n  }\n\n  function unmemoize(obj) {\n    inner.delete(obj);\n  }\n  return [memoize, unmemoize];\n}\n\n\n//# sourceMappingURL=normalize.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL25vcm1hbGl6ZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBMkQ7QUFDUjtBQUNEOztBQUVsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osYUFBYSxnQ0FBZ0MsSUFBSTtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixnRUFBb0I7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxzREFBYztBQUN0QjtBQUNBOztBQUVBO0FBQ0EsUUFBUSx3REFBZ0I7QUFDeEI7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixNQUFNO0FBQ3ZCOztBQUVBO0FBQ0EsMkJBQTJCLCtEQUFlLFFBQVE7QUFDbEQ7O0FBRUE7QUFDQSxpQkFBaUIsY0FBYztBQUMvQjs7QUFFQTtBQUNBO0FBQ0EseUJBQXlCLGNBQWM7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLFFBQVE7QUFDdEM7O0FBRUEsc0JBQXNCLFFBQVE7QUFDOUIsSUFBSTtBQUNKLG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9COztBQUVwQjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsWUFBWTtBQUNyRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUUwRDtBQUMxRCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL25vcm1hbGl6ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1Z1ZVZpZXdNb2RlbCwgaXNTeW50aGV0aWNFdmVudCB9IGZyb20gJy4vaXMuanMnO1xuaW1wb3J0IHsgY29udmVydFRvUGxhaW5PYmplY3QgfSBmcm9tICcuL29iamVjdC5qcyc7XG5pbXBvcnQgeyBnZXRGdW5jdGlvbk5hbWUgfSBmcm9tICcuL3N0YWNrdHJhY2UuanMnO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IG5vcm1hbGl6ZXMgdGhlIGdpdmVuIG9iamVjdC5cbiAqXG4gKiAtIENyZWF0ZXMgYSBjb3B5IHRvIHByZXZlbnQgb3JpZ2luYWwgaW5wdXQgbXV0YXRpb25cbiAqIC0gU2tpcHMgbm9uLWVudW1lcmFibGUgcHJvcGVydGllc1xuICogLSBXaGVuIHN0cmluZ2lmeWluZywgY2FsbHMgYHRvSlNPTmAgaWYgaW1wbGVtZW50ZWRcbiAqIC0gUmVtb3ZlcyBjaXJjdWxhciByZWZlcmVuY2VzXG4gKiAtIFRyYW5zbGF0ZXMgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZXMgKGB1bmRlZmluZWRgL2BOYU5gL2Z1bmN0aW9ucykgdG8gc2VyaWFsaXphYmxlIGZvcm1hdFxuICogLSBUcmFuc2xhdGVzIGtub3duIGdsb2JhbCBvYmplY3RzL2NsYXNzZXMgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb25zXG4gKiAtIFRha2VzIGNhcmUgb2YgYEVycm9yYCBvYmplY3Qgc2VyaWFsaXphdGlvblxuICogLSBPcHRpb25hbGx5IGxpbWl0cyBkZXB0aCBvZiBmaW5hbCBvdXRwdXRcbiAqIC0gT3B0aW9uYWxseSBsaW1pdHMgbnVtYmVyIG9mIHByb3BlcnRpZXMvZWxlbWVudHMgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBvYmplY3QvYXJyYXlcbiAqXG4gKiBAcGFyYW0gaW5wdXQgVGhlIG9iamVjdCB0byBiZSBub3JtYWxpemVkLlxuICogQHBhcmFtIGRlcHRoIFRoZSBtYXggZGVwdGggdG8gd2hpY2ggdG8gbm9ybWFsaXplIHRoZSBvYmplY3QuIChBbnl0aGluZyBkZWVwZXIgc3RyaW5naWZpZWQgd2hvbGUuKVxuICogQHBhcmFtIG1heFByb3BlcnRpZXMgVGhlIG1heCBudW1iZXIgb2YgZWxlbWVudHMgb3IgcHJvcGVydGllcyB0byBiZSBpbmNsdWRlZCBpbiBhbnkgc2luZ2xlIGFycmF5IG9yXG4gKiBvYmplY3QgaW4gdGhlIG5vcm1hbGl6ZWQgb3V0cHV0LlxuICogQHJldHVybnMgQSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIG9iamVjdCwgb3IgYFwiKipub24tc2VyaWFsaXphYmxlKipcImAgaWYgYW55IGVycm9ycyBhcmUgdGhyb3duIGR1cmluZyBub3JtYWxpemF0aW9uLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gbm9ybWFsaXplKGlucHV0LCBkZXB0aCA9IDEwMCwgbWF4UHJvcGVydGllcyA9ICtJbmZpbml0eSkge1xuICB0cnkge1xuICAgIC8vIHNpbmNlIHdlJ3JlIGF0IHRoZSBvdXRlcm1vc3QgbGV2ZWwsIHdlIGRvbid0IHByb3ZpZGUgYSBrZXlcbiAgICByZXR1cm4gdmlzaXQoJycsIGlucHV0LCBkZXB0aCwgbWF4UHJvcGVydGllcyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiB7IEVSUk9SOiBgKipub24tc2VyaWFsaXphYmxlKiogKCR7ZXJyfSlgIH07XG4gIH1cbn1cblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBub3JtYWxpemVUb1NpemUoXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIG9iamVjdCxcbiAgLy8gRGVmYXVsdCBOb2RlLmpzIFJFUEwgZGVwdGhcbiAgZGVwdGggPSAzLFxuICAvLyAxMDBrQiwgYXMgMjAwa0IgaXMgbWF4IHBheWxvYWQgc2l6ZSwgc28gaGFsZiBzb3VuZHMgcmVhc29uYWJsZVxuICBtYXhTaXplID0gMTAwICogMTAyNCxcbikge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplKG9iamVjdCwgZGVwdGgpO1xuXG4gIGlmIChqc29uU2l6ZShub3JtYWxpemVkKSA+IG1heFNpemUpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplVG9TaXplKG9iamVjdCwgZGVwdGggLSAxLCBtYXhTaXplKTtcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkIDtcbn1cblxuLyoqXG4gKiBWaXNpdHMgYSBub2RlIHRvIHBlcmZvcm0gbm9ybWFsaXphdGlvbiBvbiBpdFxuICpcbiAqIEBwYXJhbSBrZXkgVGhlIGtleSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBub2RlXG4gKiBAcGFyYW0gdmFsdWUgVGhlIG5vZGUgdG8gYmUgdmlzaXRlZFxuICogQHBhcmFtIGRlcHRoIE9wdGlvbmFsIG51bWJlciBpbmRpY2F0aW5nIHRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aFxuICogQHBhcmFtIG1heFByb3BlcnRpZXMgT3B0aW9uYWwgbWF4aW11bSBudW1iZXIgb2YgcHJvcGVydGllcy9lbGVtZW50cyBpbmNsdWRlZCBpbiBhbnkgc2luZ2xlIG9iamVjdC9hcnJheVxuICogQHBhcmFtIG1lbW8gT3B0aW9uYWwgTWVtbyBjbGFzcyBoYW5kbGluZyBkZWN5Y2xpbmdcbiAqL1xuZnVuY3Rpb24gdmlzaXQoXG4gIGtleSxcbiAgdmFsdWUsXG4gIGRlcHRoID0gK0luZmluaXR5LFxuICBtYXhQcm9wZXJ0aWVzID0gK0luZmluaXR5LFxuICBtZW1vID0gbWVtb0J1aWxkZXIoKSxcbikge1xuICBjb25zdCBbbWVtb2l6ZSwgdW5tZW1vaXplXSA9IG1lbW87XG5cbiAgLy8gR2V0IHRoZSBzaW1wbGUgY2FzZXMgb3V0IG9mIHRoZSB3YXkgZmlyc3RcbiAgaWYgKFxuICAgIHZhbHVlID09IG51bGwgfHwgLy8gdGhpcyBtYXRjaGVzIG51bGwgYW5kIHVuZGVmaW5lZCAtPiBlcWVxIG5vdCBlcWVxZXFcbiAgICBbJ2Jvb2xlYW4nLCAnc3RyaW5nJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKSB8fFxuICAgICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpXG4gICkge1xuICAgIHJldHVybiB2YWx1ZSA7XG4gIH1cblxuICBjb25zdCBzdHJpbmdpZmllZCA9IHN0cmluZ2lmeVZhbHVlKGtleSwgdmFsdWUpO1xuXG4gIC8vIEFueXRoaW5nIHdlIGNvdWxkIHBvdGVudGlhbGx5IGRpZyBpbnRvIG1vcmUgKG9iamVjdHMgb3IgYXJyYXlzKSB3aWxsIGhhdmUgY29tZSBiYWNrIGFzIGBcIltvYmplY3QgWFhYWF1cImAuXG4gIC8vIEV2ZXJ5dGhpbmcgZWxzZSB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHNlcmlhbGl6ZWQsIHNvIGlmIHdlIGRvbid0IHNlZSB0aGF0IHBhdHRlcm4sIHdlJ3JlIGRvbmUuXG4gIGlmICghc3RyaW5naWZpZWQuc3RhcnRzV2l0aCgnW29iamVjdCAnKSkge1xuICAgIHJldHVybiBzdHJpbmdpZmllZDtcbiAgfVxuXG4gIC8vIEZyb20gaGVyZSBvbiwgd2UgY2FuIGFzc2VydCB0aGF0IGB2YWx1ZWAgaXMgZWl0aGVyIGFuIG9iamVjdCBvciBhbiBhcnJheS5cblxuICAvLyBEbyBub3Qgbm9ybWFsaXplIG9iamVjdHMgdGhhdCB3ZSBrbm93IGhhdmUgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQuIEFzIGEgZ2VuZXJhbCBydWxlLCB0aGVcbiAgLy8gXCJfX3NlbnRyeV9za2lwX25vcm1hbGl6YXRpb25fX1wiIHByb3BlcnR5IHNob3VsZCBvbmx5IGJlIHVzZWQgc3BhcmluZ2x5IGFuZCBvbmx5IHNob3VsZCBvbmx5IGJlIHNldCBvbiBvYmplY3RzIHRoYXRcbiAgLy8gaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC5cbiAgaWYgKCh2YWx1ZSApWydfX3NlbnRyeV9za2lwX25vcm1hbGl6YXRpb25fXyddKSB7XG4gICAgcmV0dXJuIHZhbHVlIDtcbiAgfVxuXG4gIC8vIFdlIGNhbiBzZXQgYF9fc2VudHJ5X292ZXJyaWRlX25vcm1hbGl6YXRpb25fZGVwdGhfX2Agb24gYW4gb2JqZWN0IHRvIGVuc3VyZSB0aGF0IGZyb20gdGhlcmVcbiAgLy8gV2Uga2VlcCBhIGNlcnRhaW4gYW1vdW50IG9mIGRlcHRoLlxuICAvLyBUaGlzIHNob3VsZCBiZSB1c2VkIHNwYXJpbmdseSwgZS5nLiB3ZSB1c2UgaXQgZm9yIHRoZSByZWR1eCBpbnRlZ3JhdGlvbiB0byBlbnN1cmUgd2UgZ2V0IGEgY2VydGFpbiBhbW91bnQgb2Ygc3RhdGUuXG4gIGNvbnN0IHJlbWFpbmluZ0RlcHRoID1cbiAgICB0eXBlb2YgKHZhbHVlIClbJ19fc2VudHJ5X292ZXJyaWRlX25vcm1hbGl6YXRpb25fZGVwdGhfXyddID09PSAnbnVtYmVyJ1xuICAgICAgPyAoKHZhbHVlIClbJ19fc2VudHJ5X292ZXJyaWRlX25vcm1hbGl6YXRpb25fZGVwdGhfXyddIClcbiAgICAgIDogZGVwdGg7XG5cbiAgLy8gV2UncmUgYWxzbyBkb25lIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIG1heCBkZXB0aFxuICBpZiAocmVtYWluaW5nRGVwdGggPT09IDApIHtcbiAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgYHNlcmlhbGl6ZWRgIGlzIGEgc3RyaW5nIG9mIHRoZSBmb3JtIGBcIltvYmplY3QgWFhYWF1cImAuIENsZWFuIGl0IHVwIHNvIGl0J3MganVzdCBgXCJbWFhYWF1cImAuXG4gICAgcmV0dXJuIHN0cmluZ2lmaWVkLnJlcGxhY2UoJ29iamVjdCAnLCAnJyk7XG4gIH1cblxuICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IHZpc2l0ZWQgdGhpcyBicmFuY2gsIGJhaWwgb3V0LCBhcyBpdCdzIGNpcmN1bGFyIHJlZmVyZW5jZS4gSWYgbm90LCBub3RlIHRoYXQgd2UncmUgc2VlaW5nIGl0IG5vdy5cbiAgaWYgKG1lbW9pemUodmFsdWUpKSB7XG4gICAgcmV0dXJuICdbQ2lyY3VsYXIgfl0nO1xuICB9XG5cbiAgLy8gSWYgdGhlIHZhbHVlIGhhcyBhIGB0b0pTT05gIG1ldGhvZCwgd2UgY2FsbCBpdCB0byBleHRyYWN0IG1vcmUgaW5mb3JtYXRpb25cbiAgY29uc3QgdmFsdWVXaXRoVG9KU09OID0gdmFsdWUgO1xuICBpZiAodmFsdWVXaXRoVG9KU09OICYmIHR5cGVvZiB2YWx1ZVdpdGhUb0pTT04udG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGpzb25WYWx1ZSA9IHZhbHVlV2l0aFRvSlNPTi50b0pTT04oKTtcbiAgICAgIC8vIFdlIG5lZWQgdG8gbm9ybWFsaXplIHRoZSByZXR1cm4gdmFsdWUgb2YgYC50b0pTT04oKWAgaW4gY2FzZSBpdCBoYXMgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgICAgcmV0dXJuIHZpc2l0KCcnLCBqc29uVmFsdWUsIHJlbWFpbmluZ0RlcHRoIC0gMSwgbWF4UHJvcGVydGllcywgbWVtbyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBwYXNzIChUaGUgYnVpbHQtaW4gYHRvSlNPTmAgZmFpbGVkLCBidXQgd2UgY2FuIHN0aWxsIHRyeSB0byBkbyBpdCBvdXJzZWx2ZXMpXG4gICAgfVxuICB9XG5cbiAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IHdlIGVpdGhlciBoYXZlIGFuIG9iamVjdCBvciBhbiBhcnJheSwgd2UgaGF2ZW4ndCBzZWVuIGl0IGJlZm9yZSwgYW5kIHdlJ3JlIGdvaW5nIHRvIHJlY3Vyc2VcbiAgLy8gYmVjYXVzZSB3ZSBoYXZlbid0IHlldCByZWFjaGVkIHRoZSBtYXggZGVwdGguIENyZWF0ZSBhbiBhY2N1bXVsYXRvciB0byBob2xkIHRoZSByZXN1bHRzIG9mIHZpc2l0aW5nIGVhY2hcbiAgLy8gcHJvcGVydHkvZW50cnksIGFuZCBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgaXRlbXMgd2UgYWRkIHRvIGl0LlxuICBjb25zdCBub3JtYWxpemVkID0gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gW10gOiB7fSkgO1xuICBsZXQgbnVtQWRkZWQgPSAwO1xuXG4gIC8vIEJlZm9yZSB3ZSBiZWdpbiwgY29udmVydGBFcnJvcmAgYW5kYEV2ZW50YCBpbnN0YW5jZXMgaW50byBwbGFpbiBvYmplY3RzLCBzaW5jZSBzb21lIG9mIGVhY2ggb2YgdGhlaXIgcmVsZXZhbnRcbiAgLy8gcHJvcGVydGllcyBhcmUgbm9uLWVudW1lcmFibGUgYW5kIG90aGVyd2lzZSB3b3VsZCBnZXQgbWlzc2VkLlxuICBjb25zdCB2aXNpdGFibGUgPSBjb252ZXJ0VG9QbGFpbk9iamVjdCh2YWx1ZSApO1xuXG4gIGZvciAoY29uc3QgdmlzaXRLZXkgaW4gdmlzaXRhYmxlKSB7XG4gICAgLy8gQXZvaWQgaXRlcmF0aW5nIG92ZXIgZmllbGRzIGluIHRoZSBwcm90b3R5cGUgaWYgdGhleSd2ZSBzb21laG93IGJlZW4gZXhwb3NlZCB0byBlbnVtZXJhdGlvbi5cbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2aXNpdGFibGUsIHZpc2l0S2V5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG51bUFkZGVkID49IG1heFByb3BlcnRpZXMpIHtcbiAgICAgIG5vcm1hbGl6ZWRbdmlzaXRLZXldID0gJ1tNYXhQcm9wZXJ0aWVzIH5dJztcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFJlY3Vyc2l2ZWx5IHZpc2l0IGFsbCB0aGUgY2hpbGQgbm9kZXNcbiAgICBjb25zdCB2aXNpdFZhbHVlID0gdmlzaXRhYmxlW3Zpc2l0S2V5XTtcbiAgICBub3JtYWxpemVkW3Zpc2l0S2V5XSA9IHZpc2l0KHZpc2l0S2V5LCB2aXNpdFZhbHVlLCByZW1haW5pbmdEZXB0aCAtIDEsIG1heFByb3BlcnRpZXMsIG1lbW8pO1xuXG4gICAgbnVtQWRkZWQrKztcbiAgfVxuXG4gIC8vIE9uY2Ugd2UndmUgdmlzaXRlZCBhbGwgdGhlIGJyYW5jaGVzLCByZW1vdmUgdGhlIHBhcmVudCBmcm9tIG1lbW8gc3RvcmFnZVxuICB1bm1lbW9pemUodmFsdWUpO1xuXG4gIC8vIFJldHVybiBhY2N1bXVsYXRlZCB2YWx1ZXNcbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbi8qKlxuICogU3RyaW5naWZ5IHRoZSBnaXZlbiB2YWx1ZS4gSGFuZGxlcyB2YXJpb3VzIGtub3duIHNwZWNpYWwgdmFsdWVzIGFuZCB0eXBlcy5cbiAqXG4gKiBOb3QgbWVhbnQgdG8gYmUgdXNlZCBvbiBzaW1wbGUgcHJpbWl0aXZlcyB3aGljaCBhbHJlYWR5IGhhdmUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGFzIGl0IHdpbGwsIGZvciBleGFtcGxlLCB0dXJuXG4gKiB0aGUgbnVtYmVyIDEyMzEgaW50byBcIltPYmplY3QgTnVtYmVyXVwiLCBub3Igb24gYG51bGxgLCBhcyBpdCB3aWxsIHRocm93LlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gc3RyaW5naWZ5XG4gKiBAcmV0dXJucyBBIHN0cmluZ2lmaWVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiB2YWx1ZVxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlWYWx1ZShcbiAga2V5LFxuICAvLyB0aGlzIHR5cGUgaXMgYSB0aW55IGJpdCBvZiBhIGNoZWF0LCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGRvZXMgaGFuZGxlIE5hTiAod2hpY2ggaXMgdGVjaG5pY2FsbHkgYSBudW1iZXIpLCBidXQgZm9yXG4gIC8vIG91ciBpbnRlcm5hbCB1c2UsIGl0J2xsIGRvXG4gIHZhbHVlLFxuKSB7XG4gIHRyeSB7XG4gICAgaWYgKGtleSA9PT0gJ2RvbWFpbicgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAodmFsdWUgKS5fZXZlbnRzKSB7XG4gICAgICByZXR1cm4gJ1tEb21haW5dJztcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnZG9tYWluRW1pdHRlcicpIHtcbiAgICAgIHJldHVybiAnW0RvbWFpbkVtaXR0ZXJdJztcbiAgICB9XG5cbiAgICAvLyBJdCdzIHNhZmUgdG8gdXNlIGBnbG9iYWxgLCBgd2luZG93YCwgYW5kIGBkb2N1bWVudGAgaGVyZSBpbiB0aGlzIG1hbm5lciwgYXMgd2UgYXJlIGFzc2VydGluZyB1c2luZyBgdHlwZW9mYCBmaXJzdFxuICAgIC8vIHdoaWNoIHdvbid0IHRocm93IGlmIHRoZXkgYXJlIG5vdCBwcmVzZW50LlxuXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSBnbG9iYWwpIHtcbiAgICAgIHJldHVybiAnW0dsb2JhbF0nO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgPT09IHdpbmRvdykge1xuICAgICAgcmV0dXJuICdbV2luZG93XSc7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSBkb2N1bWVudCkge1xuICAgICAgcmV0dXJuICdbRG9jdW1lbnRdJztcbiAgICB9XG5cbiAgICBpZiAoaXNWdWVWaWV3TW9kZWwodmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ1tWdWVWaWV3TW9kZWxdJztcbiAgICB9XG5cbiAgICAvLyBSZWFjdCdzIFN5bnRoZXRpY0V2ZW50IHRoaW5neVxuICAgIGlmIChpc1N5bnRoZXRpY0V2ZW50KHZhbHVlKSkge1xuICAgICAgcmV0dXJuICdbU3ludGhldGljRXZlbnRdJztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGBbJHt2YWx1ZX1dYDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gYFtGdW5jdGlvbjogJHtnZXRGdW5jdGlvbk5hbWUodmFsdWUpfV1gO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG4gICAgICByZXR1cm4gYFske1N0cmluZyh2YWx1ZSl9XWA7XG4gICAgfVxuXG4gICAgLy8gc3RyaW5naWZpZWQgQmlnSW50cyBhcmUgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSByZWd1bGFyIG51bWJlcnMsIHNvIHdlIG5lZWQgdG8gbGFiZWwgdGhlbSB0byBhdm9pZCBjb25mdXNpb25cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50Jykge1xuICAgICAgcmV0dXJuIGBbQmlnSW50OiAke1N0cmluZyh2YWx1ZSl9XWA7XG4gICAgfVxuXG4gICAgLy8gTm93IHRoYXQgd2UndmUga25vY2tlZCBvdXQgYWxsIHRoZSBzcGVjaWFsIGNhc2VzIGFuZCB0aGUgcHJpbWl0aXZlcywgYWxsIHdlIGhhdmUgbGVmdCBhcmUgb2JqZWN0cy4gU2ltcGx5IGNhc3RpbmdcbiAgICAvLyB0aGVtIHRvIHN0cmluZ3MgbWVhbnMgdGhhdCBpbnN0YW5jZXMgb2YgY2xhc3NlcyB3aGljaCBoYXZlbid0IGRlZmluZWQgdGhlaXIgYHRvU3RyaW5nVGFnYCB3aWxsIGp1c3QgY29tZSBvdXQgYXNcbiAgICAvLyBgXCJbb2JqZWN0IE9iamVjdF1cImAuIElmIHdlIGluc3RlYWQgbG9vayBhdCB0aGUgY29uc3RydWN0b3IncyBuYW1lICh3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MpLFxuICAgIC8vIHdlIGNhbiBtYWtlIHN1cmUgdGhhdCBvbmx5IHBsYWluIG9iamVjdHMgY29tZSBvdXQgdGhhdCB3YXkuXG4gICAgY29uc3Qgb2JqTmFtZSA9IGdldENvbnN0cnVjdG9yTmFtZSh2YWx1ZSk7XG5cbiAgICAvLyBIYW5kbGUgSFRNTCBFbGVtZW50c1xuICAgIGlmICgvXkhUTUwoXFx3KilFbGVtZW50JC8udGVzdChvYmpOYW1lKSkge1xuICAgICAgcmV0dXJuIGBbSFRNTEVsZW1lbnQ6ICR7b2JqTmFtZX1dYDtcbiAgICB9XG5cbiAgICByZXR1cm4gYFtvYmplY3QgJHtvYmpOYW1lfV1gO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gYCoqbm9uLXNlcmlhbGl6YWJsZSoqICgke2Vycn0pYDtcbiAgfVxufVxuLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovXG5cbmZ1bmN0aW9uIGdldENvbnN0cnVjdG9yTmFtZSh2YWx1ZSkge1xuICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuXG4gIHJldHVybiBwcm90b3R5cGU/LmNvbnN0cnVjdG9yID8gcHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWUgOiAnbnVsbCBwcm90b3R5cGUnO1xufVxuXG4vKiogQ2FsY3VsYXRlcyBieXRlcyBzaXplIG9mIGlucHV0IHN0cmluZyAqL1xuZnVuY3Rpb24gdXRmOExlbmd0aCh2YWx1ZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICByZXR1cm4gfi1lbmNvZGVVUkkodmFsdWUpLnNwbGl0KC8lLi58Li8pLmxlbmd0aDtcbn1cblxuLyoqIENhbGN1bGF0ZXMgYnl0ZXMgc2l6ZSBvZiBpbnB1dCBvYmplY3QgKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiBqc29uU2l6ZSh2YWx1ZSkge1xuICByZXR1cm4gdXRmOExlbmd0aChKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgVVJMcyBpbiBleGNlcHRpb25zIGFuZCBzdGFja3RyYWNlcyB0byBhIGJhc2UgcGF0aCBzbyBTZW50cnkgY2FuIGZpbmdlcnByaW50XG4gKiBhY3Jvc3MgcGxhdGZvcm1zIGFuZCB3b3JraW5nIGRpcmVjdG9yeS5cbiAqXG4gKiBAcGFyYW0gdXJsIFRoZSBVUkwgdG8gYmUgbm9ybWFsaXplZC5cbiAqIEBwYXJhbSBiYXNlUGF0aCBUaGUgYXBwbGljYXRpb24gYmFzZSBwYXRoLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgVVJMLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVVcmxUb0Jhc2UodXJsLCBiYXNlUGF0aCkge1xuICBjb25zdCBlc2NhcGVkQmFzZSA9IGJhc2VQYXRoXG4gICAgLy8gQmFja3NsYXNoIHRvIGZvcndhcmRcbiAgICAucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gICAgLy8gRXNjYXBlIFJlZ0V4cCBzcGVjaWFsIGNoYXJhY3RlcnNcbiAgICAucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCsqPy5dL2csICdcXFxcJCYnKTtcblxuICBsZXQgbmV3VXJsID0gdXJsO1xuICB0cnkge1xuICAgIG5ld1VybCA9IGRlY29kZVVSSSh1cmwpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBTb21ldGltZSB0aGlzIGJyZWFrc1xuICB9XG4gIHJldHVybiAoXG4gICAgbmV3VXJsXG4gICAgICAucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gICAgICAucmVwbGFjZSgvd2VicGFjazpcXC8/L2csICcnKSAvLyBSZW1vdmUgaW50ZXJtZWRpYXRlIGJhc2UgcGF0aFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBzZW50cnktaW50ZXJuYWwvc2RrL25vLXJlZ2V4cC1jb25zdHJ1Y3RvclxuICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChgKGZpbGU6Ly8pPy8qJHtlc2NhcGVkQmFzZX0vKmAsICdpZycpLCAnYXBwOi8vLycpXG4gICk7XG59XG5cbi8qKlxuICogSGVscGVyIHRvIGRlY3ljbGUganNvbiBvYmplY3RzXG4gKi9cbmZ1bmN0aW9uIG1lbW9CdWlsZGVyKCkge1xuICBjb25zdCBpbm5lciA9IG5ldyBXZWFrU2V0KCk7XG4gIGZ1bmN0aW9uIG1lbW9pemUob2JqKSB7XG4gICAgaWYgKGlubmVyLmhhcyhvYmopKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaW5uZXIuYWRkKG9iaik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gdW5tZW1vaXplKG9iaikge1xuICAgIGlubmVyLmRlbGV0ZShvYmopO1xuICB9XG4gIHJldHVybiBbbWVtb2l6ZSwgdW5tZW1vaXplXTtcbn1cblxuZXhwb3J0IHsgbm9ybWFsaXplLCBub3JtYWxpemVUb1NpemUsIG5vcm1hbGl6ZVVybFRvQmFzZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9ybWFsaXplLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/normalize.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js":
/*!****************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js ***!
  \****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addNonEnumerableProperty: () => (/* binding */ addNonEnumerableProperty),\n/* harmony export */   convertToPlainObject: () => (/* binding */ convertToPlainObject),\n/* harmony export */   dropUndefinedKeys: () => (/* binding */ dropUndefinedKeys),\n/* harmony export */   extractExceptionKeysForMessage: () => (/* binding */ extractExceptionKeysForMessage),\n/* harmony export */   fill: () => (/* binding */ fill),\n/* harmony export */   getOriginalFunction: () => (/* binding */ getOriginalFunction),\n/* harmony export */   markFunctionWrapped: () => (/* binding */ markFunctionWrapped),\n/* harmony export */   objectify: () => (/* binding */ objectify)\n/* harmony export */ });\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _browser_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./browser.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/browser.js\");\n/* harmony import */ var _debug_logger_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _is_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n/* harmony import */ var _string_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./string.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/string.js\");\n\n\n\n\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * If the method on the passed object is not a function, the wrapper will not be applied.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, <other\n * args>)` or `origMethod.apply(this, [<other args>])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nfunction fill(source, name, replacementFactory) {\n  if (!(name in source)) {\n    return;\n  }\n\n  // explicitly casting to unknown because we don't know the type of the method initially at all\n  const original = source[name] ;\n\n  if (typeof original !== 'function') {\n    return;\n  }\n\n  const wrapped = replacementFactory(original) ;\n\n  // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n  // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n  if (typeof wrapped === 'function') {\n    markFunctionWrapped(wrapped, original);\n  }\n\n  try {\n    source[name] = wrapped;\n  } catch {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && _debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.log(`Failed to replace method \"${name}\" in object`, source);\n  }\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nfunction addNonEnumerableProperty(obj, name, value) {\n  try {\n    Object.defineProperty(obj, name, {\n      // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n      value: value,\n      writable: true,\n      configurable: true,\n    });\n  } catch {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && _debug_logger_js__WEBPACK_IMPORTED_MODULE_2__.debug.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\n  }\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nfunction markFunctionWrapped(wrapped, original) {\n  try {\n    const proto = original.prototype || {};\n    wrapped.prototype = original.prototype = proto;\n    addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n  } catch {} // eslint-disable-line no-empty\n}\n\n/**\n * This extracts the original function if available.  See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction getOriginalFunction(func) {\n  return func.__sentry_original__;\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argument itself, when value is neither an Event nor\n *  an Error.\n */\nfunction convertToPlainObject(value)\n\n {\n  if ((0,_is_js__WEBPACK_IMPORTED_MODULE_3__.isError)(value)) {\n    return {\n      message: value.message,\n      name: value.name,\n      stack: value.stack,\n      ...getOwnProperties(value),\n    };\n  } else if ((0,_is_js__WEBPACK_IMPORTED_MODULE_3__.isEvent)(value)) {\n    const newObj\n\n = {\n      type: value.type,\n      target: serializeEventTarget(value.target),\n      currentTarget: serializeEventTarget(value.currentTarget),\n      ...getOwnProperties(value),\n    };\n\n    if (typeof CustomEvent !== 'undefined' && (0,_is_js__WEBPACK_IMPORTED_MODULE_3__.isInstanceOf)(value, CustomEvent)) {\n      newObj.detail = value.detail;\n    }\n\n    return newObj;\n  } else {\n    return value;\n  }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target) {\n  try {\n    return (0,_is_js__WEBPACK_IMPORTED_MODULE_3__.isElement)(target) ? (0,_browser_js__WEBPACK_IMPORTED_MODULE_1__.htmlTreeAsString)(target) : Object.prototype.toString.call(target);\n  } catch {\n    return '<unknown>';\n  }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj) {\n  if (typeof obj === 'object' && obj !== null) {\n    const extractedProps = {};\n    for (const property in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, property)) {\n        extractedProps[property] = (obj )[property];\n      }\n    }\n    return extractedProps;\n  } else {\n    return {};\n  }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nfunction extractExceptionKeysForMessage(exception, maxLength = 40) {\n  const keys = Object.keys(convertToPlainObject(exception));\n  keys.sort();\n\n  const firstKey = keys[0];\n\n  if (!firstKey) {\n    return '[object has no keys]';\n  }\n\n  if (firstKey.length >= maxLength) {\n    return (0,_string_js__WEBPACK_IMPORTED_MODULE_4__.truncate)(firstKey, maxLength);\n  }\n\n  for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n    const serialized = keys.slice(0, includedKeys).join(', ');\n    if (serialized.length > maxLength) {\n      continue;\n    }\n    if (includedKeys === keys.length) {\n      return serialized;\n    }\n    return (0,_string_js__WEBPACK_IMPORTED_MODULE_4__.truncate)(serialized, maxLength);\n  }\n\n  return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n *\n * @deprecated This function is no longer used by the SDK and will be removed in a future major version.\n */\nfunction dropUndefinedKeys(inputValue) {\n  // This map keeps track of what already visited nodes map to.\n  // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n  // references as the input object.\n  const memoizationMap = new Map();\n\n  // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n  return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys(inputValue, memoizationMap) {\n  // Early return for primitive values\n  if (inputValue === null || typeof inputValue !== 'object') {\n    return inputValue;\n  }\n\n  // Check memo map first for all object types\n  const memoVal = memoizationMap.get(inputValue);\n  if (memoVal !== undefined) {\n    return memoVal ;\n  }\n\n  // handle arrays\n  if (Array.isArray(inputValue)) {\n    const returnValue = [];\n    // Store mapping to handle circular references\n    memoizationMap.set(inputValue, returnValue);\n\n    inputValue.forEach(value => {\n      returnValue.push(_dropUndefinedKeys(value, memoizationMap));\n    });\n\n    return returnValue ;\n  }\n\n  if (isPojo(inputValue)) {\n    const returnValue = {};\n    // Store mapping to handle circular references\n    memoizationMap.set(inputValue, returnValue);\n\n    const keys = Object.keys(inputValue);\n\n    keys.forEach(key => {\n      const val = inputValue[key];\n      if (val !== undefined) {\n        returnValue[key] = _dropUndefinedKeys(val, memoizationMap);\n      }\n    });\n\n    return returnValue ;\n  }\n\n  // For other object types, return as is\n  return inputValue;\n}\n\nfunction isPojo(input) {\n  // Plain objects have Object as constructor or no constructor\n  const constructor = (input ).constructor;\n  return constructor === Object || constructor === undefined;\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nfunction objectify(wat) {\n  let objectified;\n  switch (true) {\n    // this will catch both undefined and null\n    case wat == undefined:\n      objectified = new String(wat);\n      break;\n\n    // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n    // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n    // an object in order to wrap it.\n    case typeof wat === 'symbol' || typeof wat === 'bigint':\n      objectified = Object(wat);\n      break;\n\n    // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n    case (0,_is_js__WEBPACK_IMPORTED_MODULE_3__.isPrimitive)(wat):\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n      objectified = new (wat ).constructor(wat);\n      break;\n\n    // by process of elimination, at this point we know that `wat` must already be an object\n    default:\n      objectified = wat;\n      break;\n  }\n  return objectified;\n}\n\n\n//# sourceMappingURL=object.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL29iamVjdC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQWdEO0FBQ0E7QUFDTjtBQUN1QztBQUMxQzs7QUFFdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osSUFBSSx3REFBVyxJQUFJLG1EQUFLLGtDQUFrQyxLQUFLO0FBQy9EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0osSUFBSSx3REFBVyxJQUFJLG1EQUFLLCtDQUErQyxLQUFLO0FBQzVFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLCtDQUFPO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLCtDQUFPO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEMsb0RBQVk7QUFDMUQ7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyxpREFBUyxXQUFXLDZEQUFnQjtBQUMvQyxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFdBQVcsb0RBQVE7QUFDbkI7O0FBRUEsdUNBQXVDLGtCQUFrQjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0RBQVE7QUFDbkI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVMsbURBQVc7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUV3SztBQUN4SyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL29iamVjdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4uL2RlYnVnLWJ1aWxkLmpzJztcbmltcG9ydCB7IGh0bWxUcmVlQXNTdHJpbmcgfSBmcm9tICcuL2Jyb3dzZXIuanMnO1xuaW1wb3J0IHsgZGVidWcgfSBmcm9tICcuL2RlYnVnLWxvZ2dlci5qcyc7XG5pbXBvcnQgeyBpc0Vycm9yLCBpc0V2ZW50LCBpc0luc3RhbmNlT2YsIGlzUHJpbWl0aXZlLCBpc0VsZW1lbnQgfSBmcm9tICcuL2lzLmpzJztcbmltcG9ydCB7IHRydW5jYXRlIH0gZnJvbSAnLi9zdHJpbmcuanMnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5cbi8qKlxuICogUmVwbGFjZSBhIG1ldGhvZCBpbiBhbiBvYmplY3Qgd2l0aCBhIHdyYXBwZWQgdmVyc2lvbiBvZiBpdHNlbGYuXG4gKlxuICogSWYgdGhlIG1ldGhvZCBvbiB0aGUgcGFzc2VkIG9iamVjdCBpcyBub3QgYSBmdW5jdGlvbiwgdGhlIHdyYXBwZXIgd2lsbCBub3QgYmUgYXBwbGllZC5cbiAqXG4gKiBAcGFyYW0gc291cmNlIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbWV0aG9kIHRvIGJlIHdyYXBwZWQuXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRvIGJlIHdyYXBwZWQuXG4gKiBAcGFyYW0gcmVwbGFjZW1lbnRGYWN0b3J5IEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIGdpdmVuIG1ldGhvZCBhbmQgcmV0dXJucyBhXG4gKiB3cmFwcGVkIHZlcnNpb24uIE5vdGU6IFRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBgcmVwbGFjZW1lbnRGYWN0b3J5YCBuZWVkcyB0byBiZSBhIG5vbi1hcnJvdyBmdW5jdGlvbiwgaW4gb3JkZXIgdG9cbiAqIHByZXNlcnZlIHRoZSBjb3JyZWN0IHZhbHVlIG9mIGB0aGlzYCwgYW5kIHRoZSBvcmlnaW5hbCBtZXRob2QgbXVzdCBiZSBjYWxsZWQgdXNpbmcgYG9yaWdNZXRob2QuY2FsbCh0aGlzLCA8b3RoZXJcbiAqIGFyZ3M+KWAgb3IgYG9yaWdNZXRob2QuYXBwbHkodGhpcywgWzxvdGhlciBhcmdzPl0pYCAocmF0aGVyIHRoYW4gYmVpbmcgY2FsbGVkIGRpcmVjdGx5KSwgYWdhaW4gdG8gcHJlc2VydmUgYHRoaXNgLlxuICogQHJldHVybnMgdm9pZFxuICovXG5mdW5jdGlvbiBmaWxsKHNvdXJjZSwgbmFtZSwgcmVwbGFjZW1lbnRGYWN0b3J5KSB7XG4gIGlmICghKG5hbWUgaW4gc291cmNlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGV4cGxpY2l0bHkgY2FzdGluZyB0byB1bmtub3duIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB0aGUgdHlwZSBvZiB0aGUgbWV0aG9kIGluaXRpYWxseSBhdCBhbGxcbiAgY29uc3Qgb3JpZ2luYWwgPSBzb3VyY2VbbmFtZV0gO1xuXG4gIGlmICh0eXBlb2Ygb3JpZ2luYWwgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB3cmFwcGVkID0gcmVwbGFjZW1lbnRGYWN0b3J5KG9yaWdpbmFsKSA7XG5cbiAgLy8gTWFrZSBzdXJlIGl0J3MgYSBmdW5jdGlvbiBmaXJzdCwgYXMgd2UgbmVlZCB0byBhdHRhY2ggYW4gZW1wdHkgcHJvdG90eXBlIGZvciBgZGVmaW5lUHJvcGVydGllc2AgdG8gd29ya1xuICAvLyBvdGhlcndpc2UgaXQnbGwgdGhyb3cgXCJUeXBlRXJyb3I6IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIGNhbGxlZCBvbiBub24tb2JqZWN0XCJcbiAgaWYgKHR5cGVvZiB3cmFwcGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgbWFya0Z1bmN0aW9uV3JhcHBlZCh3cmFwcGVkLCBvcmlnaW5hbCk7XG4gIH1cblxuICB0cnkge1xuICAgIHNvdXJjZVtuYW1lXSA9IHdyYXBwZWQ7XG4gIH0gY2F0Y2gge1xuICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLmxvZyhgRmFpbGVkIHRvIHJlcGxhY2UgbWV0aG9kIFwiJHtuYW1lfVwiIGluIG9iamVjdGAsIHNvdXJjZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHkgb24gdGhlIGdpdmVuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gb2JqIFRoZSBvYmplY3Qgb24gd2hpY2ggdG8gc2V0IHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIHNldFxuICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB3aGljaCB0byBzZXQgdGhlIHByb3BlcnR5XG4gKi9cbmZ1bmN0aW9uIGFkZE5vbkVudW1lcmFibGVQcm9wZXJ0eShvYmosIG5hbWUsIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbmFtZSwge1xuICAgICAgLy8gZW51bWVyYWJsZTogZmFsc2UsIC8vIHRoZSBkZWZhdWx0LCBzbyB3ZSBjYW4gc2F2ZSBvbiBidW5kbGUgc2l6ZSBieSBub3QgZXhwbGljaXRseSBzZXR0aW5nIGl0XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgfSBjYXRjaCB7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKGBGYWlsZWQgdG8gYWRkIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5IFwiJHtuYW1lfVwiIHRvIG9iamVjdGAsIG9iaik7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1lbWJlcnMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9uIHRoZSB3cmFwcGVkIGZ1bmN0aW9uIGFuZFxuICogcGF0Y2hlcyB1cCB0aGUgcHJvdG90eXBlLlxuICpcbiAqIEBwYXJhbSB3cmFwcGVkIHRoZSB3cmFwcGVyIGZ1bmN0aW9uXG4gKiBAcGFyYW0gb3JpZ2luYWwgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHRoYXQgZ2V0cyB3cmFwcGVkXG4gKi9cbmZ1bmN0aW9uIG1hcmtGdW5jdGlvbldyYXBwZWQod3JhcHBlZCwgb3JpZ2luYWwpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcm90byA9IG9yaWdpbmFsLnByb3RvdHlwZSB8fCB7fTtcbiAgICB3cmFwcGVkLnByb3RvdHlwZSA9IG9yaWdpbmFsLnByb3RvdHlwZSA9IHByb3RvO1xuICAgIGFkZE5vbkVudW1lcmFibGVQcm9wZXJ0eSh3cmFwcGVkLCAnX19zZW50cnlfb3JpZ2luYWxfXycsIG9yaWdpbmFsKTtcbiAgfSBjYXRjaCB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG59XG5cbi8qKlxuICogVGhpcyBleHRyYWN0cyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gaWYgYXZhaWxhYmxlLiAgU2VlXG4gKiBgbWFya0Z1bmN0aW9uV3JhcHBlZGAgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQHBhcmFtIGZ1bmMgdGhlIGZ1bmN0aW9uIHRvIHVud3JhcFxuICogQHJldHVybnMgdGhlIHVud3JhcHBlZCB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBpZiBhdmFpbGFibGUuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG5mdW5jdGlvbiBnZXRPcmlnaW5hbEZ1bmN0aW9uKGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmMuX19zZW50cnlfb3JpZ2luYWxfXztcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGFueSBgRXJyb3JgIG9yIGBFdmVudGAgaW50byBhIHBsYWluIG9iamVjdCB3aXRoIGFsbCBvZiB0aGVpciBlbnVtZXJhYmxlIHByb3BlcnRpZXMsIGFuZCBzb21lIG9mIHRoZWlyXG4gKiBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGF0dGFjaGVkLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBJbml0aWFsIHNvdXJjZSB0aGF0IHdlIGhhdmUgdG8gdHJhbnNmb3JtIGluIG9yZGVyIGZvciBpdCB0byBiZSB1c2FibGUgYnkgdGhlIHNlcmlhbGl6ZXJcbiAqIEByZXR1cm5zIEFuIEV2ZW50IG9yIEVycm9yIHR1cm5lZCBpbnRvIGFuIG9iamVjdCAtIG9yIHRoZSB2YWx1ZSBhcmd1bWVudCBpdHNlbGYsIHdoZW4gdmFsdWUgaXMgbmVpdGhlciBhbiBFdmVudCBub3JcbiAqICBhbiBFcnJvci5cbiAqL1xuZnVuY3Rpb24gY29udmVydFRvUGxhaW5PYmplY3QodmFsdWUpXG5cbiB7XG4gIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiB2YWx1ZS5tZXNzYWdlLFxuICAgICAgbmFtZTogdmFsdWUubmFtZSxcbiAgICAgIHN0YWNrOiB2YWx1ZS5zdGFjayxcbiAgICAgIC4uLmdldE93blByb3BlcnRpZXModmFsdWUpLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNFdmVudCh2YWx1ZSkpIHtcbiAgICBjb25zdCBuZXdPYmpcblxuID0ge1xuICAgICAgdHlwZTogdmFsdWUudHlwZSxcbiAgICAgIHRhcmdldDogc2VyaWFsaXplRXZlbnRUYXJnZXQodmFsdWUudGFyZ2V0KSxcbiAgICAgIGN1cnJlbnRUYXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLmN1cnJlbnRUYXJnZXQpLFxuICAgICAgLi4uZ2V0T3duUHJvcGVydGllcyh2YWx1ZSksXG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgQ3VzdG9tRXZlbnQgIT09ICd1bmRlZmluZWQnICYmIGlzSW5zdGFuY2VPZih2YWx1ZSwgQ3VzdG9tRXZlbnQpKSB7XG4gICAgICBuZXdPYmouZGV0YWlsID0gdmFsdWUuZGV0YWlsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdPYmo7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbi8qKiBDcmVhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0YXJnZXQgb2YgYW4gYEV2ZW50YCBvYmplY3QgKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHRhcmdldCkge1xuICB0cnkge1xuICAgIHJldHVybiBpc0VsZW1lbnQodGFyZ2V0KSA/IGh0bWxUcmVlQXNTdHJpbmcodGFyZ2V0KSA6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0YXJnZXQpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJzx1bmtub3duPic7XG4gIH1cbn1cblxuLyoqIEZpbHRlcnMgb3V0IGFsbCBidXQgYW4gb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMgKi9cbmZ1bmN0aW9uIGdldE93blByb3BlcnRpZXMob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogIT09IG51bGwpIHtcbiAgICBjb25zdCBleHRyYWN0ZWRQcm9wcyA9IHt9O1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcGVydHkpKSB7XG4gICAgICAgIGV4dHJhY3RlZFByb3BzW3Byb3BlcnR5XSA9IChvYmogKVtwcm9wZXJ0eV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBleHRyYWN0ZWRQcm9wcztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge307XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhbnkgY2FwdHVyZWQgZXhjZXB0aW9uLCBleHRyYWN0IGl0cyBrZXlzIGFuZCBjcmVhdGUgYSBzb3J0ZWRcbiAqIGFuZCB0cnVuY2F0ZWQgbGlzdCB0aGF0IHdpbGwgYmUgdXNlZCBpbnNpZGUgdGhlIGV2ZW50IG1lc3NhZ2UuXG4gKiBlZy4gYE5vbi1lcnJvciBleGNlcHRpb24gY2FwdHVyZWQgd2l0aCBrZXlzOiBmb28sIGJhciwgYmF6YFxuICovXG5mdW5jdGlvbiBleHRyYWN0RXhjZXB0aW9uS2V5c0Zvck1lc3NhZ2UoZXhjZXB0aW9uLCBtYXhMZW5ndGggPSA0MCkge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY29udmVydFRvUGxhaW5PYmplY3QoZXhjZXB0aW9uKSk7XG4gIGtleXMuc29ydCgpO1xuXG4gIGNvbnN0IGZpcnN0S2V5ID0ga2V5c1swXTtcblxuICBpZiAoIWZpcnN0S2V5KSB7XG4gICAgcmV0dXJuICdbb2JqZWN0IGhhcyBubyBrZXlzXSc7XG4gIH1cblxuICBpZiAoZmlyc3RLZXkubGVuZ3RoID49IG1heExlbmd0aCkge1xuICAgIHJldHVybiB0cnVuY2F0ZShmaXJzdEtleSwgbWF4TGVuZ3RoKTtcbiAgfVxuXG4gIGZvciAobGV0IGluY2x1ZGVkS2V5cyA9IGtleXMubGVuZ3RoOyBpbmNsdWRlZEtleXMgPiAwOyBpbmNsdWRlZEtleXMtLSkge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBrZXlzLnNsaWNlKDAsIGluY2x1ZGVkS2V5cykuam9pbignLCAnKTtcbiAgICBpZiAoc2VyaWFsaXplZC5sZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoaW5jbHVkZWRLZXlzID09PSBrZXlzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxuICAgIHJldHVybiB0cnVuY2F0ZShzZXJpYWxpemVkLCBtYXhMZW5ndGgpO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIEdpdmVuIGFueSBvYmplY3QsIHJldHVybiBhIG5ldyBvYmplY3QgaGF2aW5nIHJlbW92ZWQgYWxsIGZpZWxkcyB3aG9zZSB2YWx1ZSB3YXMgYHVuZGVmaW5lZGAuXG4gKiBXb3JrcyByZWN1cnNpdmVseSBvbiBvYmplY3RzIGFuZCBhcnJheXMuXG4gKlxuICogQXR0ZW50aW9uOiBUaGlzIGZ1bmN0aW9uIGtlZXBzIGNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gdGhlIHJldHVybmVkIG9iamVjdC5cbiAqXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGZ1bmN0aW9uIGlzIG5vIGxvbmdlciB1c2VkIGJ5IHRoZSBTREsgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciB2ZXJzaW9uLlxuICovXG5mdW5jdGlvbiBkcm9wVW5kZWZpbmVkS2V5cyhpbnB1dFZhbHVlKSB7XG4gIC8vIFRoaXMgbWFwIGtlZXBzIHRyYWNrIG9mIHdoYXQgYWxyZWFkeSB2aXNpdGVkIG5vZGVzIG1hcCB0by5cbiAgLy8gT3VyIFNldCAtIGJhc2VkIG1lbW9CdWlsZGVyIGRvZXNuJ3Qgd29yayBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0byB0aGUgb3V0cHV0IG9iamVjdCB0byBoYXZlIHRoZSBzYW1lIGNpcmN1bGFyXG4gIC8vIHJlZmVyZW5jZXMgYXMgdGhlIGlucHV0IG9iamVjdC5cbiAgY29uc3QgbWVtb2l6YXRpb25NYXAgPSBuZXcgTWFwKCk7XG5cbiAgLy8gVGhpcyBmdW5jdGlvbiBqdXN0IHByb3hpZXMgYF9kcm9wVW5kZWZpbmVkS2V5c2AgdG8ga2VlcCB0aGUgYG1lbW9CdWlsZGVyYCBvdXQgb2YgdGhpcyBmdW5jdGlvbidzIEFQSVxuICByZXR1cm4gX2Ryb3BVbmRlZmluZWRLZXlzKGlucHV0VmFsdWUsIG1lbW9pemF0aW9uTWFwKTtcbn1cblxuZnVuY3Rpb24gX2Ryb3BVbmRlZmluZWRLZXlzKGlucHV0VmFsdWUsIG1lbW9pemF0aW9uTWFwKSB7XG4gIC8vIEVhcmx5IHJldHVybiBmb3IgcHJpbWl0aXZlIHZhbHVlc1xuICBpZiAoaW5wdXRWYWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgaW5wdXRWYWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gaW5wdXRWYWx1ZTtcbiAgfVxuXG4gIC8vIENoZWNrIG1lbW8gbWFwIGZpcnN0IGZvciBhbGwgb2JqZWN0IHR5cGVzXG4gIGNvbnN0IG1lbW9WYWwgPSBtZW1vaXphdGlvbk1hcC5nZXQoaW5wdXRWYWx1ZSk7XG4gIGlmIChtZW1vVmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbWVtb1ZhbCA7XG4gIH1cblxuICAvLyBoYW5kbGUgYXJyYXlzXG4gIGlmIChBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpKSB7XG4gICAgY29uc3QgcmV0dXJuVmFsdWUgPSBbXTtcbiAgICAvLyBTdG9yZSBtYXBwaW5nIHRvIGhhbmRsZSBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgbWVtb2l6YXRpb25NYXAuc2V0KGlucHV0VmFsdWUsIHJldHVyblZhbHVlKTtcblxuICAgIGlucHV0VmFsdWUuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICByZXR1cm5WYWx1ZS5wdXNoKF9kcm9wVW5kZWZpbmVkS2V5cyh2YWx1ZSwgbWVtb2l6YXRpb25NYXApKTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXR1cm5WYWx1ZSA7XG4gIH1cblxuICBpZiAoaXNQb2pvKGlucHV0VmFsdWUpKSB7XG4gICAgY29uc3QgcmV0dXJuVmFsdWUgPSB7fTtcbiAgICAvLyBTdG9yZSBtYXBwaW5nIHRvIGhhbmRsZSBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgbWVtb2l6YXRpb25NYXAuc2V0KGlucHV0VmFsdWUsIHJldHVyblZhbHVlKTtcblxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbnB1dFZhbHVlKTtcblxuICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gaW5wdXRWYWx1ZVtrZXldO1xuICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVyblZhbHVlW2tleV0gPSBfZHJvcFVuZGVmaW5lZEtleXModmFsLCBtZW1vaXphdGlvbk1hcCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmV0dXJuVmFsdWUgO1xuICB9XG5cbiAgLy8gRm9yIG90aGVyIG9iamVjdCB0eXBlcywgcmV0dXJuIGFzIGlzXG4gIHJldHVybiBpbnB1dFZhbHVlO1xufVxuXG5mdW5jdGlvbiBpc1Bvam8oaW5wdXQpIHtcbiAgLy8gUGxhaW4gb2JqZWN0cyBoYXZlIE9iamVjdCBhcyBjb25zdHJ1Y3RvciBvciBubyBjb25zdHJ1Y3RvclxuICBjb25zdCBjb25zdHJ1Y3RvciA9IChpbnB1dCApLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gY29uc3RydWN0b3IgPT09IE9iamVjdCB8fCBjb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEVuc3VyZSB0aGF0IHNvbWV0aGluZyBpcyBhbiBvYmplY3QuXG4gKlxuICogVHVybnMgYHVuZGVmaW5lZGAgYW5kIGBudWxsYCBpbnRvIGBTdHJpbmdgcyBhbmQgYWxsIG90aGVyIHByaW1pdGl2ZXMgaW50byBpbnN0YW5jZXMgb2YgdGhlaXIgcmVzcGVjdGl2ZSB3cmFwcGVyXG4gKiBjbGFzc2VzIChTdHJpbmcsIEJvb2xlYW4sIE51bWJlciwgZXRjLikuIEFjdHMgYXMgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIG9uIG5vbi1wcmltaXRpdmVzLlxuICpcbiAqIEBwYXJhbSB3YXQgVGhlIHN1YmplY3Qgb2YgdGhlIG9iamVjdGlmaWNhdGlvblxuICogQHJldHVybnMgQSB2ZXJzaW9uIG9mIGB3YXRgIHdoaWNoIGNhbiBzYWZlbHkgYmUgdXNlZCB3aXRoIGBPYmplY3RgIGNsYXNzIG1ldGhvZHNcbiAqL1xuZnVuY3Rpb24gb2JqZWN0aWZ5KHdhdCkge1xuICBsZXQgb2JqZWN0aWZpZWQ7XG4gIHN3aXRjaCAodHJ1ZSkge1xuICAgIC8vIHRoaXMgd2lsbCBjYXRjaCBib3RoIHVuZGVmaW5lZCBhbmQgbnVsbFxuICAgIGNhc2Ugd2F0ID09IHVuZGVmaW5lZDpcbiAgICAgIG9iamVjdGlmaWVkID0gbmV3IFN0cmluZyh3YXQpO1xuICAgICAgYnJlYWs7XG5cbiAgICAvLyBUaG91Z2ggc3ltYm9scyBhbmQgYmlnaW50cyBkbyBoYXZlIHdyYXBwZXIgY2xhc3NlcyAoYFN5bWJvbGAgYW5kIGBCaWdJbnRgLCByZXNwZWN0aXZlbHkpLCBmb3Igd2hhdGV2ZXIgcmVhc29uXG4gICAgLy8gdGhvc2UgY2xhc3NlcyBkb24ndCBoYXZlIGNvbnN0cnVjdG9ycyB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkLiBXZSB0aGVyZWZvcmUgbmVlZCB0byBjYXN0IGVhY2ggYXNcbiAgICAvLyBhbiBvYmplY3QgaW4gb3JkZXIgdG8gd3JhcCBpdC5cbiAgICBjYXNlIHR5cGVvZiB3YXQgPT09ICdzeW1ib2wnIHx8IHR5cGVvZiB3YXQgPT09ICdiaWdpbnQnOlxuICAgICAgb2JqZWN0aWZpZWQgPSBPYmplY3Qod2F0KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgLy8gdGhpcyB3aWxsIGNhdGNoIHRoZSByZW1haW5pbmcgcHJpbWl0aXZlczogYFN0cmluZ2AsIGBOdW1iZXJgLCBhbmQgYEJvb2xlYW5gXG4gICAgY2FzZSBpc1ByaW1pdGl2ZSh3YXQpOlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgb2JqZWN0aWZpZWQgPSBuZXcgKHdhdCApLmNvbnN0cnVjdG9yKHdhdCk7XG4gICAgICBicmVhaztcblxuICAgIC8vIGJ5IHByb2Nlc3Mgb2YgZWxpbWluYXRpb24sIGF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IGB3YXRgIG11c3QgYWxyZWFkeSBiZSBhbiBvYmplY3RcbiAgICBkZWZhdWx0OlxuICAgICAgb2JqZWN0aWZpZWQgPSB3YXQ7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gb2JqZWN0aWZpZWQ7XG59XG5cbmV4cG9ydCB7IGFkZE5vbkVudW1lcmFibGVQcm9wZXJ0eSwgY29udmVydFRvUGxhaW5PYmplY3QsIGRyb3BVbmRlZmluZWRLZXlzLCBleHRyYWN0RXhjZXB0aW9uS2V5c0Zvck1lc3NhZ2UsIGZpbGwsIGdldE9yaWdpbmFsRnVuY3Rpb24sIG1hcmtGdW5jdGlvbldyYXBwZWQsIG9iamVjdGlmeSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JqZWN0LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/openai/constants.js":
/*!**************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/openai/constants.js ***!
  \**************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   INSTRUMENTED_METHODS: () => (/* binding */ INSTRUMENTED_METHODS),\n/* harmony export */   OPENAI_INTEGRATION_NAME: () => (/* binding */ OPENAI_INTEGRATION_NAME)\n/* harmony export */ });\nconst OPENAI_INTEGRATION_NAME = 'OpenAI';\n\n// https://platform.openai.com/docs/quickstart?api-mode=responses\n// https://platform.openai.com/docs/quickstart?api-mode=chat\nconst INSTRUMENTED_METHODS = ['responses.create', 'chat.completions.create'] ;\n\n\n//# sourceMappingURL=constants.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL29wZW5haS9jb25zdGFudHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRXlEO0FBQ3pEIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvb3BlbmFpL2NvbnN0YW50cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBPUEVOQUlfSU5URUdSQVRJT05fTkFNRSA9ICdPcGVuQUknO1xuXG4vLyBodHRwczovL3BsYXRmb3JtLm9wZW5haS5jb20vZG9jcy9xdWlja3N0YXJ0P2FwaS1tb2RlPXJlc3BvbnNlc1xuLy8gaHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29tL2RvY3MvcXVpY2tzdGFydD9hcGktbW9kZT1jaGF0XG5jb25zdCBJTlNUUlVNRU5URURfTUVUSE9EUyA9IFsncmVzcG9uc2VzLmNyZWF0ZScsICdjaGF0LmNvbXBsZXRpb25zLmNyZWF0ZSddIDtcblxuZXhwb3J0IHsgSU5TVFJVTUVOVEVEX01FVEhPRFMsIE9QRU5BSV9JTlRFR1JBVElPTl9OQU1FIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/openai/constants.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/openai/index.js":
/*!**********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/openai/index.js ***!
  \**********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   instrumentOpenAiClient: () => (/* binding */ instrumentOpenAiClient)\n/* harmony export */ });\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _exports_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../exports.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/exports.js\");\n/* harmony import */ var _tracing_trace_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../tracing/trace.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/trace.js\");\n/* harmony import */ var _gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../gen-ai-attributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/gen-ai-attributes.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./constants.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/openai/constants.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/openai/utils.js\");\n\n\n\n\n\n\n\n/**\n * Extract request attributes from method arguments\n */\nfunction extractRequestAttributes(args, methodPath) {\n  const attributes = {\n    [_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_SYSTEM_ATTRIBUTE]: 'openai',\n    [_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_OPERATION_NAME_ATTRIBUTE]: (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.getOperationName)(methodPath),\n  };\n\n  if (args.length > 0 && typeof args[0] === 'object' && args[0] !== null) {\n    const params = args[0] ;\n\n    attributes[_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_REQUEST_MODEL_ATTRIBUTE] = params.model ?? 'unknown';\n    if ('temperature' in params) attributes[_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_REQUEST_TEMPERATURE_ATTRIBUTE] = params.temperature;\n    if ('top_p' in params) attributes[_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_REQUEST_TOP_P_ATTRIBUTE] = params.top_p;\n    if ('frequency_penalty' in params)\n      attributes[_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_REQUEST_FREQUENCY_PENALTY_ATTRIBUTE] = params.frequency_penalty;\n    if ('presence_penalty' in params) attributes[_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_REQUEST_PRESENCE_PENALTY_ATTRIBUTE] = params.presence_penalty;\n  } else {\n    attributes[_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_REQUEST_MODEL_ATTRIBUTE] = 'unknown';\n  }\n\n  return attributes;\n}\n\n/**\n * Helper function to set token usage attributes\n */\nfunction setTokenUsageAttributes(\n  span,\n  promptTokens,\n  completionTokens,\n  totalTokens,\n) {\n  if (promptTokens !== undefined) {\n    span.setAttributes({\n      [_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.OPENAI_USAGE_PROMPT_TOKENS_ATTRIBUTE]: promptTokens,\n      [_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE]: promptTokens,\n    });\n  }\n  if (completionTokens !== undefined) {\n    span.setAttributes({\n      [_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.OPENAI_USAGE_COMPLETION_TOKENS_ATTRIBUTE]: completionTokens,\n      [_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE]: completionTokens,\n    });\n  }\n  if (totalTokens !== undefined) {\n    span.setAttributes({\n      [_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_USAGE_TOTAL_TOKENS_ATTRIBUTE]: totalTokens,\n    });\n  }\n}\n\n/**\n * Helper function to set common response attributes (ID, model, timestamp)\n */\nfunction setCommonResponseAttributes(span, id, model, timestamp) {\n  if (id) {\n    span.setAttributes({\n      [_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.OPENAI_RESPONSE_ID_ATTRIBUTE]: id,\n      [_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_RESPONSE_ID_ATTRIBUTE]: id,\n    });\n  }\n  if (model) {\n    span.setAttributes({\n      [_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.OPENAI_RESPONSE_MODEL_ATTRIBUTE]: model,\n      [_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_RESPONSE_MODEL_ATTRIBUTE]: model,\n    });\n  }\n  if (timestamp) {\n    span.setAttributes({\n      [_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.OPENAI_RESPONSE_TIMESTAMP_ATTRIBUTE]: new Date(timestamp * 1000).toISOString(),\n    });\n  }\n}\n\n/**\n * Add attributes for Chat Completion responses\n */\nfunction addChatCompletionAttributes(span, response) {\n  setCommonResponseAttributes(span, response.id, response.model, response.created);\n  if (response.usage) {\n    setTokenUsageAttributes(\n      span,\n      response.usage.prompt_tokens,\n      response.usage.completion_tokens,\n      response.usage.total_tokens,\n    );\n  }\n  if (Array.isArray(response.choices)) {\n    const finishReasons = response.choices\n      .map(choice => choice.finish_reason)\n      .filter((reason) => reason !== null);\n    if (finishReasons.length > 0) {\n      span.setAttributes({\n        [_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE]: JSON.stringify(finishReasons),\n      });\n    }\n  }\n}\n\n/**\n * Add attributes for Responses API responses\n */\nfunction addResponsesApiAttributes(span, response) {\n  setCommonResponseAttributes(span, response.id, response.model, response.created_at);\n  if (response.status) {\n    span.setAttributes({\n      [_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_RESPONSE_FINISH_REASONS_ATTRIBUTE]: JSON.stringify([response.status]),\n    });\n  }\n  if (response.usage) {\n    setTokenUsageAttributes(\n      span,\n      response.usage.input_tokens,\n      response.usage.output_tokens,\n      response.usage.total_tokens,\n    );\n  }\n}\n\n/**\n * Add response attributes to spans\n * This currently supports both Chat Completion and Responses API responses\n */\nfunction addResponseAttributes(span, result, recordOutputs) {\n  if (!result || typeof result !== 'object') return;\n\n  const response = result ;\n\n  if ((0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.isChatCompletionResponse)(response)) {\n    addChatCompletionAttributes(span, response);\n    if (recordOutputs && response.choices?.length) {\n      const responseTexts = response.choices.map(choice => choice.message?.content || '');\n      span.setAttributes({ [_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_RESPONSE_TEXT_ATTRIBUTE]: JSON.stringify(responseTexts) });\n    }\n  } else if ((0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.isResponsesApiResponse)(response)) {\n    addResponsesApiAttributes(span, response);\n    if (recordOutputs && response.output_text) {\n      span.setAttributes({ [_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_RESPONSE_TEXT_ATTRIBUTE]: response.output_text });\n    }\n  }\n}\n\n// Extract and record AI request inputs, if present. This is intentionally separate from response attributes.\nfunction addRequestAttributes(span, params) {\n  if ('messages' in params) {\n    span.setAttributes({ [_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_REQUEST_MESSAGES_ATTRIBUTE]: JSON.stringify(params.messages) });\n  }\n  if ('input' in params) {\n    span.setAttributes({ [_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_REQUEST_MESSAGES_ATTRIBUTE]: JSON.stringify(params.input) });\n  }\n}\n\nfunction getOptionsFromIntegration() {\n  const scope = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n  const client = scope.getClient();\n  const integration = client?.getIntegrationByName(_constants_js__WEBPACK_IMPORTED_MODULE_4__.OPENAI_INTEGRATION_NAME) ;\n  const shouldRecordInputsAndOutputs = integration ? Boolean(client?.getOptions().sendDefaultPii) : false;\n\n  return {\n    recordInputs: integration?.options?.recordInputs ?? shouldRecordInputsAndOutputs,\n    recordOutputs: integration?.options?.recordOutputs ?? shouldRecordInputsAndOutputs,\n  };\n}\n\n/**\n * Instrument a method with Sentry spans\n * Following Sentry AI Agents Manual Instrumentation conventions\n * @see https://docs.sentry.io/platforms/javascript/guides/node/tracing/instrumentation/ai-agents-module/#manual-instrumentation\n */\nfunction instrumentMethod(\n  originalMethod,\n  methodPath,\n  context,\n  options,\n) {\n  return async function instrumentedMethod(...args) {\n    const finalOptions = options || getOptionsFromIntegration();\n    const requestAttributes = extractRequestAttributes(args, methodPath);\n    const model = (requestAttributes[_gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_3__.GEN_AI_REQUEST_MODEL_ATTRIBUTE] ) || 'unknown';\n    const operationName = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.getOperationName)(methodPath);\n\n    return (0,_tracing_trace_js__WEBPACK_IMPORTED_MODULE_2__.startSpan)(\n      {\n        name: `${operationName} ${model}`,\n        op: (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.getSpanOperation)(methodPath),\n        attributes: requestAttributes ,\n      },\n      async (span) => {\n        try {\n          if (finalOptions.recordInputs && args[0] && typeof args[0] === 'object') {\n            addRequestAttributes(span, args[0] );\n          }\n\n          const result = await originalMethod.apply(context, args);\n          // TODO: Add streaming support\n          addResponseAttributes(span, result, finalOptions.recordOutputs);\n          return result;\n        } catch (error) {\n          (0,_exports_js__WEBPACK_IMPORTED_MODULE_1__.captureException)(error);\n          throw error;\n        }\n      },\n    );\n  };\n}\n\n/**\n * Create a deep proxy for OpenAI client instrumentation\n */\nfunction createDeepProxy(target, currentPath = '', options) {\n  return new Proxy(target, {\n    get(obj, prop) {\n      const value = (obj )[prop];\n      const methodPath = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.buildMethodPath)(currentPath, String(prop));\n\n      if (typeof value === 'function' && (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.shouldInstrument)(methodPath)) {\n        return instrumentMethod(value , methodPath, obj, options);\n      }\n\n      if (typeof value === 'function') {\n        // Bind non-instrumented functions to preserve the original `this` context,\n        // which is required for accessing private class fields (e.g. #baseURL) in OpenAI SDK v5.\n        return value.bind(obj);\n      }\n\n      if (value && typeof value === 'object') {\n        return createDeepProxy(value , methodPath, options);\n      }\n\n      return value;\n    },\n  });\n}\n\n/**\n * Instrument an OpenAI client with Sentry tracing\n * Can be used across Node.js, Cloudflare Workers, and Vercel Edge\n */\nfunction instrumentOpenAiClient(client, options) {\n  return createDeepProxy(client, '', options);\n}\n\n\n//# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL29wZW5haS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQXlEO0FBQ0w7QUFDRDtBQUM2ckI7QUFDdnJCO0FBQzRGOztBQUVySjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSywwRUFBdUI7QUFDNUIsS0FBSyxrRkFBK0IsR0FBRywyREFBZ0I7QUFDdkQ7O0FBRUE7QUFDQTs7QUFFQSxlQUFlLGlGQUE4QjtBQUM3Qyw0Q0FBNEMsdUZBQW9DO0FBQ2hGLHNDQUFzQyxpRkFBOEI7QUFDcEU7QUFDQSxpQkFBaUIsNkZBQTBDO0FBQzNELGlEQUFpRCw0RkFBeUM7QUFDMUYsSUFBSTtBQUNKLGVBQWUsaUZBQThCO0FBQzdDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sdUZBQW9DO0FBQzNDLE9BQU8sc0ZBQW1DO0FBQzFDLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxPQUFPLDJGQUF3QztBQUMvQyxPQUFPLHVGQUFvQztBQUMzQyxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsT0FBTyxzRkFBbUM7QUFDMUMsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTywrRUFBNEI7QUFDbkMsT0FBTywrRUFBNEI7QUFDbkMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU8sa0ZBQStCO0FBQ3RDLE9BQU8sa0ZBQStCO0FBQ3RDLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxPQUFPLHNGQUFtQztBQUMxQyxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsMkZBQXdDO0FBQ2pELE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLDJGQUF3QztBQUMvQyxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE1BQU0sbUVBQXdCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixDQUFDLGlGQUE4QixrQ0FBa0M7QUFDNUY7QUFDQSxJQUFJLFNBQVMsaUVBQXNCO0FBQ25DO0FBQ0E7QUFDQSwyQkFBMkIsQ0FBQyxpRkFBOEIseUJBQXlCO0FBQ25GO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsQ0FBQyxvRkFBaUMsb0NBQW9DO0FBQy9GO0FBQ0E7QUFDQSx5QkFBeUIsQ0FBQyxvRkFBaUMsaUNBQWlDO0FBQzVGO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0Isa0VBQWU7QUFDL0I7QUFDQSxtREFBbUQsa0VBQXVCO0FBQzFFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxpRkFBOEI7QUFDbkUsMEJBQTBCLDJEQUFnQjs7QUFFMUMsV0FBVyw0REFBUztBQUNwQjtBQUNBLGlCQUFpQixlQUFlLEVBQUUsTUFBTTtBQUN4QyxZQUFZLDJEQUFnQjtBQUM1QjtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLFVBQVUsNkRBQWdCO0FBQzFCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLDBEQUFlOztBQUV4Qyx5Q0FBeUMsMkRBQWdCO0FBQ3pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVrQztBQUNsQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL29wZW5haS9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDdXJyZW50U2NvcGUgfSBmcm9tICcuLi8uLi9jdXJyZW50U2NvcGVzLmpzJztcbmltcG9ydCB7IGNhcHR1cmVFeGNlcHRpb24gfSBmcm9tICcuLi8uLi9leHBvcnRzLmpzJztcbmltcG9ydCB7IHN0YXJ0U3BhbiB9IGZyb20gJy4uLy4uL3RyYWNpbmcvdHJhY2UuanMnO1xuaW1wb3J0IHsgR0VOX0FJX09QRVJBVElPTl9OQU1FX0FUVFJJQlVURSwgR0VOX0FJX1JFUVVFU1RfTU9ERUxfQVRUUklCVVRFLCBHRU5fQUlfUkVRVUVTVF9URU1QRVJBVFVSRV9BVFRSSUJVVEUsIEdFTl9BSV9SRVFVRVNUX1RPUF9QX0FUVFJJQlVURSwgR0VOX0FJX1JFUVVFU1RfRlJFUVVFTkNZX1BFTkFMVFlfQVRUUklCVVRFLCBHRU5fQUlfUkVRVUVTVF9QUkVTRU5DRV9QRU5BTFRZX0FUVFJJQlVURSwgR0VOX0FJX1JFUVVFU1RfTUVTU0FHRVNfQVRUUklCVVRFLCBHRU5fQUlfUkVTUE9OU0VfVEVYVF9BVFRSSUJVVEUsIEdFTl9BSV9TWVNURU1fQVRUUklCVVRFLCBHRU5fQUlfUkVTUE9OU0VfRklOSVNIX1JFQVNPTlNfQVRUUklCVVRFLCBHRU5fQUlfUkVTUE9OU0VfSURfQVRUUklCVVRFLCBPUEVOQUlfUkVTUE9OU0VfSURfQVRUUklCVVRFLCBHRU5fQUlfUkVTUE9OU0VfTU9ERUxfQVRUUklCVVRFLCBPUEVOQUlfUkVTUE9OU0VfTU9ERUxfQVRUUklCVVRFLCBPUEVOQUlfUkVTUE9OU0VfVElNRVNUQU1QX0FUVFJJQlVURSwgR0VOX0FJX1VTQUdFX0lOUFVUX1RPS0VOU19BVFRSSUJVVEUsIE9QRU5BSV9VU0FHRV9QUk9NUFRfVE9LRU5TX0FUVFJJQlVURSwgR0VOX0FJX1VTQUdFX09VVFBVVF9UT0tFTlNfQVRUUklCVVRFLCBPUEVOQUlfVVNBR0VfQ09NUExFVElPTl9UT0tFTlNfQVRUUklCVVRFLCBHRU5fQUlfVVNBR0VfVE9UQUxfVE9LRU5TX0FUVFJJQlVURSB9IGZyb20gJy4uL2dlbi1haS1hdHRyaWJ1dGVzLmpzJztcbmltcG9ydCB7IE9QRU5BSV9JTlRFR1JBVElPTl9OQU1FIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgc2hvdWxkSW5zdHJ1bWVudCwgZ2V0T3BlcmF0aW9uTmFtZSwgZ2V0U3Bhbk9wZXJhdGlvbiwgaXNDaGF0Q29tcGxldGlvblJlc3BvbnNlLCBpc1Jlc3BvbnNlc0FwaVJlc3BvbnNlLCBidWlsZE1ldGhvZFBhdGggfSBmcm9tICcuL3V0aWxzLmpzJztcblxuLyoqXG4gKiBFeHRyYWN0IHJlcXVlc3QgYXR0cmlidXRlcyBmcm9tIG1ldGhvZCBhcmd1bWVudHNcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFJlcXVlc3RBdHRyaWJ1dGVzKGFyZ3MsIG1ldGhvZFBhdGgpIHtcbiAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICBbR0VOX0FJX1NZU1RFTV9BVFRSSUJVVEVdOiAnb3BlbmFpJyxcbiAgICBbR0VOX0FJX09QRVJBVElPTl9OQU1FX0FUVFJJQlVURV06IGdldE9wZXJhdGlvbk5hbWUobWV0aG9kUGF0aCksXG4gIH07XG5cbiAgaWYgKGFyZ3MubGVuZ3RoID4gMCAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ29iamVjdCcgJiYgYXJnc1swXSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGFyZ3NbMF0gO1xuXG4gICAgYXR0cmlidXRlc1tHRU5fQUlfUkVRVUVTVF9NT0RFTF9BVFRSSUJVVEVdID0gcGFyYW1zLm1vZGVsID8/ICd1bmtub3duJztcbiAgICBpZiAoJ3RlbXBlcmF0dXJlJyBpbiBwYXJhbXMpIGF0dHJpYnV0ZXNbR0VOX0FJX1JFUVVFU1RfVEVNUEVSQVRVUkVfQVRUUklCVVRFXSA9IHBhcmFtcy50ZW1wZXJhdHVyZTtcbiAgICBpZiAoJ3RvcF9wJyBpbiBwYXJhbXMpIGF0dHJpYnV0ZXNbR0VOX0FJX1JFUVVFU1RfVE9QX1BfQVRUUklCVVRFXSA9IHBhcmFtcy50b3BfcDtcbiAgICBpZiAoJ2ZyZXF1ZW5jeV9wZW5hbHR5JyBpbiBwYXJhbXMpXG4gICAgICBhdHRyaWJ1dGVzW0dFTl9BSV9SRVFVRVNUX0ZSRVFVRU5DWV9QRU5BTFRZX0FUVFJJQlVURV0gPSBwYXJhbXMuZnJlcXVlbmN5X3BlbmFsdHk7XG4gICAgaWYgKCdwcmVzZW5jZV9wZW5hbHR5JyBpbiBwYXJhbXMpIGF0dHJpYnV0ZXNbR0VOX0FJX1JFUVVFU1RfUFJFU0VOQ0VfUEVOQUxUWV9BVFRSSUJVVEVdID0gcGFyYW1zLnByZXNlbmNlX3BlbmFsdHk7XG4gIH0gZWxzZSB7XG4gICAgYXR0cmlidXRlc1tHRU5fQUlfUkVRVUVTVF9NT0RFTF9BVFRSSUJVVEVdID0gJ3Vua25vd24nO1xuICB9XG5cbiAgcmV0dXJuIGF0dHJpYnV0ZXM7XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHNldCB0b2tlbiB1c2FnZSBhdHRyaWJ1dGVzXG4gKi9cbmZ1bmN0aW9uIHNldFRva2VuVXNhZ2VBdHRyaWJ1dGVzKFxuICBzcGFuLFxuICBwcm9tcHRUb2tlbnMsXG4gIGNvbXBsZXRpb25Ub2tlbnMsXG4gIHRvdGFsVG9rZW5zLFxuKSB7XG4gIGlmIChwcm9tcHRUb2tlbnMgIT09IHVuZGVmaW5lZCkge1xuICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICBbT1BFTkFJX1VTQUdFX1BST01QVF9UT0tFTlNfQVRUUklCVVRFXTogcHJvbXB0VG9rZW5zLFxuICAgICAgW0dFTl9BSV9VU0FHRV9JTlBVVF9UT0tFTlNfQVRUUklCVVRFXTogcHJvbXB0VG9rZW5zLFxuICAgIH0pO1xuICB9XG4gIGlmIChjb21wbGV0aW9uVG9rZW5zICE9PSB1bmRlZmluZWQpIHtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgW09QRU5BSV9VU0FHRV9DT01QTEVUSU9OX1RPS0VOU19BVFRSSUJVVEVdOiBjb21wbGV0aW9uVG9rZW5zLFxuICAgICAgW0dFTl9BSV9VU0FHRV9PVVRQVVRfVE9LRU5TX0FUVFJJQlVURV06IGNvbXBsZXRpb25Ub2tlbnMsXG4gICAgfSk7XG4gIH1cbiAgaWYgKHRvdGFsVG9rZW5zICE9PSB1bmRlZmluZWQpIHtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgW0dFTl9BSV9VU0FHRV9UT1RBTF9UT0tFTlNfQVRUUklCVVRFXTogdG90YWxUb2tlbnMsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2V0IGNvbW1vbiByZXNwb25zZSBhdHRyaWJ1dGVzIChJRCwgbW9kZWwsIHRpbWVzdGFtcClcbiAqL1xuZnVuY3Rpb24gc2V0Q29tbW9uUmVzcG9uc2VBdHRyaWJ1dGVzKHNwYW4sIGlkLCBtb2RlbCwgdGltZXN0YW1wKSB7XG4gIGlmIChpZCkge1xuICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICBbT1BFTkFJX1JFU1BPTlNFX0lEX0FUVFJJQlVURV06IGlkLFxuICAgICAgW0dFTl9BSV9SRVNQT05TRV9JRF9BVFRSSUJVVEVdOiBpZCxcbiAgICB9KTtcbiAgfVxuICBpZiAobW9kZWwpIHtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgW09QRU5BSV9SRVNQT05TRV9NT0RFTF9BVFRSSUJVVEVdOiBtb2RlbCxcbiAgICAgIFtHRU5fQUlfUkVTUE9OU0VfTU9ERUxfQVRUUklCVVRFXTogbW9kZWwsXG4gICAgfSk7XG4gIH1cbiAgaWYgKHRpbWVzdGFtcCkge1xuICAgIHNwYW4uc2V0QXR0cmlidXRlcyh7XG4gICAgICBbT1BFTkFJX1JFU1BPTlNFX1RJTUVTVEFNUF9BVFRSSUJVVEVdOiBuZXcgRGF0ZSh0aW1lc3RhbXAgKiAxMDAwKS50b0lTT1N0cmluZygpLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQWRkIGF0dHJpYnV0ZXMgZm9yIENoYXQgQ29tcGxldGlvbiByZXNwb25zZXNcbiAqL1xuZnVuY3Rpb24gYWRkQ2hhdENvbXBsZXRpb25BdHRyaWJ1dGVzKHNwYW4sIHJlc3BvbnNlKSB7XG4gIHNldENvbW1vblJlc3BvbnNlQXR0cmlidXRlcyhzcGFuLCByZXNwb25zZS5pZCwgcmVzcG9uc2UubW9kZWwsIHJlc3BvbnNlLmNyZWF0ZWQpO1xuICBpZiAocmVzcG9uc2UudXNhZ2UpIHtcbiAgICBzZXRUb2tlblVzYWdlQXR0cmlidXRlcyhcbiAgICAgIHNwYW4sXG4gICAgICByZXNwb25zZS51c2FnZS5wcm9tcHRfdG9rZW5zLFxuICAgICAgcmVzcG9uc2UudXNhZ2UuY29tcGxldGlvbl90b2tlbnMsXG4gICAgICByZXNwb25zZS51c2FnZS50b3RhbF90b2tlbnMsXG4gICAgKTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShyZXNwb25zZS5jaG9pY2VzKSkge1xuICAgIGNvbnN0IGZpbmlzaFJlYXNvbnMgPSByZXNwb25zZS5jaG9pY2VzXG4gICAgICAubWFwKGNob2ljZSA9PiBjaG9pY2UuZmluaXNoX3JlYXNvbilcbiAgICAgIC5maWx0ZXIoKHJlYXNvbikgPT4gcmVhc29uICE9PSBudWxsKTtcbiAgICBpZiAoZmluaXNoUmVhc29ucy5sZW5ndGggPiAwKSB7XG4gICAgICBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICBbR0VOX0FJX1JFU1BPTlNFX0ZJTklTSF9SRUFTT05TX0FUVFJJQlVURV06IEpTT04uc3RyaW5naWZ5KGZpbmlzaFJlYXNvbnMpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWRkIGF0dHJpYnV0ZXMgZm9yIFJlc3BvbnNlcyBBUEkgcmVzcG9uc2VzXG4gKi9cbmZ1bmN0aW9uIGFkZFJlc3BvbnNlc0FwaUF0dHJpYnV0ZXMoc3BhbiwgcmVzcG9uc2UpIHtcbiAgc2V0Q29tbW9uUmVzcG9uc2VBdHRyaWJ1dGVzKHNwYW4sIHJlc3BvbnNlLmlkLCByZXNwb25zZS5tb2RlbCwgcmVzcG9uc2UuY3JlYXRlZF9hdCk7XG4gIGlmIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgW0dFTl9BSV9SRVNQT05TRV9GSU5JU0hfUkVBU09OU19BVFRSSUJVVEVdOiBKU09OLnN0cmluZ2lmeShbcmVzcG9uc2Uuc3RhdHVzXSksXG4gICAgfSk7XG4gIH1cbiAgaWYgKHJlc3BvbnNlLnVzYWdlKSB7XG4gICAgc2V0VG9rZW5Vc2FnZUF0dHJpYnV0ZXMoXG4gICAgICBzcGFuLFxuICAgICAgcmVzcG9uc2UudXNhZ2UuaW5wdXRfdG9rZW5zLFxuICAgICAgcmVzcG9uc2UudXNhZ2Uub3V0cHV0X3Rva2VucyxcbiAgICAgIHJlc3BvbnNlLnVzYWdlLnRvdGFsX3Rva2VucyxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQWRkIHJlc3BvbnNlIGF0dHJpYnV0ZXMgdG8gc3BhbnNcbiAqIFRoaXMgY3VycmVudGx5IHN1cHBvcnRzIGJvdGggQ2hhdCBDb21wbGV0aW9uIGFuZCBSZXNwb25zZXMgQVBJIHJlc3BvbnNlc1xuICovXG5mdW5jdGlvbiBhZGRSZXNwb25zZUF0dHJpYnV0ZXMoc3BhbiwgcmVzdWx0LCByZWNvcmRPdXRwdXRzKSB7XG4gIGlmICghcmVzdWx0IHx8IHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSByZXR1cm47XG5cbiAgY29uc3QgcmVzcG9uc2UgPSByZXN1bHQgO1xuXG4gIGlmIChpc0NoYXRDb21wbGV0aW9uUmVzcG9uc2UocmVzcG9uc2UpKSB7XG4gICAgYWRkQ2hhdENvbXBsZXRpb25BdHRyaWJ1dGVzKHNwYW4sIHJlc3BvbnNlKTtcbiAgICBpZiAocmVjb3JkT3V0cHV0cyAmJiByZXNwb25zZS5jaG9pY2VzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlVGV4dHMgPSByZXNwb25zZS5jaG9pY2VzLm1hcChjaG9pY2UgPT4gY2hvaWNlLm1lc3NhZ2U/LmNvbnRlbnQgfHwgJycpO1xuICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGVzKHsgW0dFTl9BSV9SRVNQT05TRV9URVhUX0FUVFJJQlVURV06IEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlVGV4dHMpIH0pO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1Jlc3BvbnNlc0FwaVJlc3BvbnNlKHJlc3BvbnNlKSkge1xuICAgIGFkZFJlc3BvbnNlc0FwaUF0dHJpYnV0ZXMoc3BhbiwgcmVzcG9uc2UpO1xuICAgIGlmIChyZWNvcmRPdXRwdXRzICYmIHJlc3BvbnNlLm91dHB1dF90ZXh0KSB7XG4gICAgICBzcGFuLnNldEF0dHJpYnV0ZXMoeyBbR0VOX0FJX1JFU1BPTlNFX1RFWFRfQVRUUklCVVRFXTogcmVzcG9uc2Uub3V0cHV0X3RleHQgfSk7XG4gICAgfVxuICB9XG59XG5cbi8vIEV4dHJhY3QgYW5kIHJlY29yZCBBSSByZXF1ZXN0IGlucHV0cywgaWYgcHJlc2VudC4gVGhpcyBpcyBpbnRlbnRpb25hbGx5IHNlcGFyYXRlIGZyb20gcmVzcG9uc2UgYXR0cmlidXRlcy5cbmZ1bmN0aW9uIGFkZFJlcXVlc3RBdHRyaWJ1dGVzKHNwYW4sIHBhcmFtcykge1xuICBpZiAoJ21lc3NhZ2VzJyBpbiBwYXJhbXMpIHtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZXMoeyBbR0VOX0FJX1JFUVVFU1RfTUVTU0FHRVNfQVRUUklCVVRFXTogSlNPTi5zdHJpbmdpZnkocGFyYW1zLm1lc3NhZ2VzKSB9KTtcbiAgfVxuICBpZiAoJ2lucHV0JyBpbiBwYXJhbXMpIHtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZXMoeyBbR0VOX0FJX1JFUVVFU1RfTUVTU0FHRVNfQVRUUklCVVRFXTogSlNPTi5zdHJpbmdpZnkocGFyYW1zLmlucHV0KSB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRPcHRpb25zRnJvbUludGVncmF0aW9uKCkge1xuICBjb25zdCBzY29wZSA9IGdldEN1cnJlbnRTY29wZSgpO1xuICBjb25zdCBjbGllbnQgPSBzY29wZS5nZXRDbGllbnQoKTtcbiAgY29uc3QgaW50ZWdyYXRpb24gPSBjbGllbnQ/LmdldEludGVncmF0aW9uQnlOYW1lKE9QRU5BSV9JTlRFR1JBVElPTl9OQU1FKSA7XG4gIGNvbnN0IHNob3VsZFJlY29yZElucHV0c0FuZE91dHB1dHMgPSBpbnRlZ3JhdGlvbiA/IEJvb2xlYW4oY2xpZW50Py5nZXRPcHRpb25zKCkuc2VuZERlZmF1bHRQaWkpIDogZmFsc2U7XG5cbiAgcmV0dXJuIHtcbiAgICByZWNvcmRJbnB1dHM6IGludGVncmF0aW9uPy5vcHRpb25zPy5yZWNvcmRJbnB1dHMgPz8gc2hvdWxkUmVjb3JkSW5wdXRzQW5kT3V0cHV0cyxcbiAgICByZWNvcmRPdXRwdXRzOiBpbnRlZ3JhdGlvbj8ub3B0aW9ucz8ucmVjb3JkT3V0cHV0cyA/PyBzaG91bGRSZWNvcmRJbnB1dHNBbmRPdXRwdXRzLFxuICB9O1xufVxuXG4vKipcbiAqIEluc3RydW1lbnQgYSBtZXRob2Qgd2l0aCBTZW50cnkgc3BhbnNcbiAqIEZvbGxvd2luZyBTZW50cnkgQUkgQWdlbnRzIE1hbnVhbCBJbnN0cnVtZW50YXRpb24gY29udmVudGlvbnNcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLnNlbnRyeS5pby9wbGF0Zm9ybXMvamF2YXNjcmlwdC9ndWlkZXMvbm9kZS90cmFjaW5nL2luc3RydW1lbnRhdGlvbi9haS1hZ2VudHMtbW9kdWxlLyNtYW51YWwtaW5zdHJ1bWVudGF0aW9uXG4gKi9cbmZ1bmN0aW9uIGluc3RydW1lbnRNZXRob2QoXG4gIG9yaWdpbmFsTWV0aG9kLFxuICBtZXRob2RQYXRoLFxuICBjb250ZXh0LFxuICBvcHRpb25zLFxuKSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBpbnN0cnVtZW50ZWRNZXRob2QoLi4uYXJncykge1xuICAgIGNvbnN0IGZpbmFsT3B0aW9ucyA9IG9wdGlvbnMgfHwgZ2V0T3B0aW9uc0Zyb21JbnRlZ3JhdGlvbigpO1xuICAgIGNvbnN0IHJlcXVlc3RBdHRyaWJ1dGVzID0gZXh0cmFjdFJlcXVlc3RBdHRyaWJ1dGVzKGFyZ3MsIG1ldGhvZFBhdGgpO1xuICAgIGNvbnN0IG1vZGVsID0gKHJlcXVlc3RBdHRyaWJ1dGVzW0dFTl9BSV9SRVFVRVNUX01PREVMX0FUVFJJQlVURV0gKSB8fCAndW5rbm93bic7XG4gICAgY29uc3Qgb3BlcmF0aW9uTmFtZSA9IGdldE9wZXJhdGlvbk5hbWUobWV0aG9kUGF0aCk7XG5cbiAgICByZXR1cm4gc3RhcnRTcGFuKFxuICAgICAge1xuICAgICAgICBuYW1lOiBgJHtvcGVyYXRpb25OYW1lfSAke21vZGVsfWAsXG4gICAgICAgIG9wOiBnZXRTcGFuT3BlcmF0aW9uKG1ldGhvZFBhdGgpLFxuICAgICAgICBhdHRyaWJ1dGVzOiByZXF1ZXN0QXR0cmlidXRlcyAsXG4gICAgICB9LFxuICAgICAgYXN5bmMgKHNwYW4pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoZmluYWxPcHRpb25zLnJlY29yZElucHV0cyAmJiBhcmdzWzBdICYmIHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgYWRkUmVxdWVzdEF0dHJpYnV0ZXMoc3BhbiwgYXJnc1swXSApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9yaWdpbmFsTWV0aG9kLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgIC8vIFRPRE86IEFkZCBzdHJlYW1pbmcgc3VwcG9ydFxuICAgICAgICAgIGFkZFJlc3BvbnNlQXR0cmlidXRlcyhzcGFuLCByZXN1bHQsIGZpbmFsT3B0aW9ucy5yZWNvcmRPdXRwdXRzKTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNhcHR1cmVFeGNlcHRpb24oZXJyb3IpO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZGVlcCBwcm94eSBmb3IgT3BlbkFJIGNsaWVudCBpbnN0cnVtZW50YXRpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGVlcFByb3h5KHRhcmdldCwgY3VycmVudFBhdGggPSAnJywgb3B0aW9ucykge1xuICByZXR1cm4gbmV3IFByb3h5KHRhcmdldCwge1xuICAgIGdldChvYmosIHByb3ApIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gKG9iaiApW3Byb3BdO1xuICAgICAgY29uc3QgbWV0aG9kUGF0aCA9IGJ1aWxkTWV0aG9kUGF0aChjdXJyZW50UGF0aCwgU3RyaW5nKHByb3ApKTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzaG91bGRJbnN0cnVtZW50KG1ldGhvZFBhdGgpKSB7XG4gICAgICAgIHJldHVybiBpbnN0cnVtZW50TWV0aG9kKHZhbHVlICwgbWV0aG9kUGF0aCwgb2JqLCBvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBCaW5kIG5vbi1pbnN0cnVtZW50ZWQgZnVuY3Rpb25zIHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBgdGhpc2AgY29udGV4dCxcbiAgICAgICAgLy8gd2hpY2ggaXMgcmVxdWlyZWQgZm9yIGFjY2Vzc2luZyBwcml2YXRlIGNsYXNzIGZpZWxkcyAoZS5nLiAjYmFzZVVSTCkgaW4gT3BlbkFJIFNESyB2NS5cbiAgICAgICAgcmV0dXJuIHZhbHVlLmJpbmQob2JqKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZURlZXBQcm94eSh2YWx1ZSAsIG1ldGhvZFBhdGgsIG9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogSW5zdHJ1bWVudCBhbiBPcGVuQUkgY2xpZW50IHdpdGggU2VudHJ5IHRyYWNpbmdcbiAqIENhbiBiZSB1c2VkIGFjcm9zcyBOb2RlLmpzLCBDbG91ZGZsYXJlIFdvcmtlcnMsIGFuZCBWZXJjZWwgRWRnZVxuICovXG5mdW5jdGlvbiBpbnN0cnVtZW50T3BlbkFpQ2xpZW50KGNsaWVudCwgb3B0aW9ucykge1xuICByZXR1cm4gY3JlYXRlRGVlcFByb3h5KGNsaWVudCwgJycsIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgeyBpbnN0cnVtZW50T3BlbkFpQ2xpZW50IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/openai/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/openai/utils.js":
/*!**********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/openai/utils.js ***!
  \**********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   buildMethodPath: () => (/* binding */ buildMethodPath),\n/* harmony export */   getOperationName: () => (/* binding */ getOperationName),\n/* harmony export */   getSpanOperation: () => (/* binding */ getSpanOperation),\n/* harmony export */   isChatCompletionResponse: () => (/* binding */ isChatCompletionResponse),\n/* harmony export */   isResponsesApiResponse: () => (/* binding */ isResponsesApiResponse),\n/* harmony export */   shouldInstrument: () => (/* binding */ shouldInstrument)\n/* harmony export */ });\n/* harmony import */ var _gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../gen-ai-attributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/gen-ai-attributes.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/openai/constants.js\");\n\n\n\n/**\n * Maps OpenAI method paths to Sentry operation names\n */\nfunction getOperationName(methodPath) {\n  if (methodPath.includes('chat.completions')) {\n    return _gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_0__.OPENAI_OPERATIONS.CHAT;\n  }\n  if (methodPath.includes('responses')) {\n    // The responses API is also a chat operation\n    return _gen_ai_attributes_js__WEBPACK_IMPORTED_MODULE_0__.OPENAI_OPERATIONS.CHAT;\n  }\n  return methodPath.split('.').pop() || 'unknown';\n}\n\n/**\n * Get the span operation for OpenAI methods\n * Following Sentry's convention: \"gen_ai.{operation_name}\"\n */\nfunction getSpanOperation(methodPath) {\n  return `gen_ai.${getOperationName(methodPath)}`;\n}\n\n/**\n * Check if a method path should be instrumented\n */\nfunction shouldInstrument(methodPath) {\n  return _constants_js__WEBPACK_IMPORTED_MODULE_1__.INSTRUMENTED_METHODS.includes(methodPath );\n}\n\n/**\n * Build method path from current traversal\n */\nfunction buildMethodPath(currentPath, prop) {\n  return currentPath ? `${currentPath}.${prop}` : prop;\n}\n\n/**\n * Check if response is a Chat Completion object\n */\nfunction isChatCompletionResponse(response) {\n  return (\n    response !== null &&\n    typeof response === 'object' &&\n    'object' in response &&\n    (response ).object === 'chat.completion'\n  );\n}\n\n/**\n * Check if response is a Responses API object\n */\nfunction isResponsesApiResponse(response) {\n  return (\n    response !== null &&\n    typeof response === 'object' &&\n    'object' in response &&\n    (response ).object === 'response'\n  );\n}\n\n\n//# sourceMappingURL=utils.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL29wZW5haS91dGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUE0RDtBQUNOOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvRUFBaUI7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvRUFBaUI7QUFDNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQ0FBMkMsZUFBZTtBQUMxRDtBQUNBO0FBQ0EsbUJBQW1CLDZCQUE2QjtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsK0RBQW9CO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLFlBQVksR0FBRyxLQUFLO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFbUk7QUFDbkkiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS91dGlscy9vcGVuYWkvdXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT1BFTkFJX09QRVJBVElPTlMgfSBmcm9tICcuLi9nZW4tYWktYXR0cmlidXRlcy5qcyc7XG5pbXBvcnQgeyBJTlNUUlVNRU5URURfTUVUSE9EUyB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcblxuLyoqXG4gKiBNYXBzIE9wZW5BSSBtZXRob2QgcGF0aHMgdG8gU2VudHJ5IG9wZXJhdGlvbiBuYW1lc1xuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRpb25OYW1lKG1ldGhvZFBhdGgpIHtcbiAgaWYgKG1ldGhvZFBhdGguaW5jbHVkZXMoJ2NoYXQuY29tcGxldGlvbnMnKSkge1xuICAgIHJldHVybiBPUEVOQUlfT1BFUkFUSU9OUy5DSEFUO1xuICB9XG4gIGlmIChtZXRob2RQYXRoLmluY2x1ZGVzKCdyZXNwb25zZXMnKSkge1xuICAgIC8vIFRoZSByZXNwb25zZXMgQVBJIGlzIGFsc28gYSBjaGF0IG9wZXJhdGlvblxuICAgIHJldHVybiBPUEVOQUlfT1BFUkFUSU9OUy5DSEFUO1xuICB9XG4gIHJldHVybiBtZXRob2RQYXRoLnNwbGl0KCcuJykucG9wKCkgfHwgJ3Vua25vd24nO1xufVxuXG4vKipcbiAqIEdldCB0aGUgc3BhbiBvcGVyYXRpb24gZm9yIE9wZW5BSSBtZXRob2RzXG4gKiBGb2xsb3dpbmcgU2VudHJ5J3MgY29udmVudGlvbjogXCJnZW5fYWkue29wZXJhdGlvbl9uYW1lfVwiXG4gKi9cbmZ1bmN0aW9uIGdldFNwYW5PcGVyYXRpb24obWV0aG9kUGF0aCkge1xuICByZXR1cm4gYGdlbl9haS4ke2dldE9wZXJhdGlvbk5hbWUobWV0aG9kUGF0aCl9YDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIG1ldGhvZCBwYXRoIHNob3VsZCBiZSBpbnN0cnVtZW50ZWRcbiAqL1xuZnVuY3Rpb24gc2hvdWxkSW5zdHJ1bWVudChtZXRob2RQYXRoKSB7XG4gIHJldHVybiBJTlNUUlVNRU5URURfTUVUSE9EUy5pbmNsdWRlcyhtZXRob2RQYXRoICk7XG59XG5cbi8qKlxuICogQnVpbGQgbWV0aG9kIHBhdGggZnJvbSBjdXJyZW50IHRyYXZlcnNhbFxuICovXG5mdW5jdGlvbiBidWlsZE1ldGhvZFBhdGgoY3VycmVudFBhdGgsIHByb3ApIHtcbiAgcmV0dXJuIGN1cnJlbnRQYXRoID8gYCR7Y3VycmVudFBhdGh9LiR7cHJvcH1gIDogcHJvcDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiByZXNwb25zZSBpcyBhIENoYXQgQ29tcGxldGlvbiBvYmplY3RcbiAqL1xuZnVuY3Rpb24gaXNDaGF0Q29tcGxldGlvblJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVzcG9uc2UgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgcmVzcG9uc2UgPT09ICdvYmplY3QnICYmXG4gICAgJ29iamVjdCcgaW4gcmVzcG9uc2UgJiZcbiAgICAocmVzcG9uc2UgKS5vYmplY3QgPT09ICdjaGF0LmNvbXBsZXRpb24nXG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgcmVzcG9uc2UgaXMgYSBSZXNwb25zZXMgQVBJIG9iamVjdFxuICovXG5mdW5jdGlvbiBpc1Jlc3BvbnNlc0FwaVJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIHJldHVybiAoXG4gICAgcmVzcG9uc2UgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgcmVzcG9uc2UgPT09ICdvYmplY3QnICYmXG4gICAgJ29iamVjdCcgaW4gcmVzcG9uc2UgJiZcbiAgICAocmVzcG9uc2UgKS5vYmplY3QgPT09ICdyZXNwb25zZSdcbiAgKTtcbn1cblxuZXhwb3J0IHsgYnVpbGRNZXRob2RQYXRoLCBnZXRPcGVyYXRpb25OYW1lLCBnZXRTcGFuT3BlcmF0aW9uLCBpc0NoYXRDb21wbGV0aW9uUmVzcG9uc2UsIGlzUmVzcG9uc2VzQXBpUmVzcG9uc2UsIHNob3VsZEluc3RydW1lbnQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXV0aWxzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/openai/utils.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/parameterize.js":
/*!**********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/parameterize.js ***!
  \**********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   fmt: () => (/* binding */ fmt),\n/* harmony export */   parameterize: () => (/* binding */ parameterize)\n/* harmony export */ });\n/**\n * Tagged template function which returns parameterized representation of the message\n * For example: parameterize`This is a log statement with ${x} and ${y} params`, would return:\n * \"__sentry_template_string__\": 'This is a log statement with %s and %s params',\n * \"__sentry_template_values__\": ['first', 'second']\n *\n * @param strings An array of string values splitted between expressions\n * @param values Expressions extracted from template string\n *\n * @returns A `ParameterizedString` object that can be passed into `captureMessage` or Sentry.logger.X methods.\n */\nfunction parameterize(strings, ...values) {\n  const formatted = new String(String.raw(strings, ...values)) ;\n  formatted.__sentry_template_string__ = strings.join('\\x00').replace(/%/g, '%%').replace(/\\0/g, '%s');\n  formatted.__sentry_template_values__ = values;\n  return formatted;\n}\n\n/**\n * Tagged template function which returns parameterized representation of the message.\n *\n * @param strings An array of string values splitted between expressions\n * @param values Expressions extracted from template string\n * @returns A `ParameterizedString` object that can be passed into `captureMessage` or Sentry.logger.X methods.\n */\nconst fmt = parameterize;\n\n\n//# sourceMappingURL=parameterize.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3BhcmFtZXRlcml6ZS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQSw0REFBNEQsR0FBRyxNQUFNLEdBQUc7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUU2QjtBQUM3QiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3BhcmFtZXRlcml6ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRhZ2dlZCB0ZW1wbGF0ZSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIHBhcmFtZXRlcml6ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1lc3NhZ2VcbiAqIEZvciBleGFtcGxlOiBwYXJhbWV0ZXJpemVgVGhpcyBpcyBhIGxvZyBzdGF0ZW1lbnQgd2l0aCAke3h9IGFuZCAke3l9IHBhcmFtc2AsIHdvdWxkIHJldHVybjpcbiAqIFwiX19zZW50cnlfdGVtcGxhdGVfc3RyaW5nX19cIjogJ1RoaXMgaXMgYSBsb2cgc3RhdGVtZW50IHdpdGggJXMgYW5kICVzIHBhcmFtcycsXG4gKiBcIl9fc2VudHJ5X3RlbXBsYXRlX3ZhbHVlc19fXCI6IFsnZmlyc3QnLCAnc2Vjb25kJ11cbiAqXG4gKiBAcGFyYW0gc3RyaW5ncyBBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzIHNwbGl0dGVkIGJldHdlZW4gZXhwcmVzc2lvbnNcbiAqIEBwYXJhbSB2YWx1ZXMgRXhwcmVzc2lvbnMgZXh0cmFjdGVkIGZyb20gdGVtcGxhdGUgc3RyaW5nXG4gKlxuICogQHJldHVybnMgQSBgUGFyYW1ldGVyaXplZFN0cmluZ2Agb2JqZWN0IHRoYXQgY2FuIGJlIHBhc3NlZCBpbnRvIGBjYXB0dXJlTWVzc2FnZWAgb3IgU2VudHJ5LmxvZ2dlci5YIG1ldGhvZHMuXG4gKi9cbmZ1bmN0aW9uIHBhcmFtZXRlcml6ZShzdHJpbmdzLCAuLi52YWx1ZXMpIHtcbiAgY29uc3QgZm9ybWF0dGVkID0gbmV3IFN0cmluZyhTdHJpbmcucmF3KHN0cmluZ3MsIC4uLnZhbHVlcykpIDtcbiAgZm9ybWF0dGVkLl9fc2VudHJ5X3RlbXBsYXRlX3N0cmluZ19fID0gc3RyaW5ncy5qb2luKCdcXHgwMCcpLnJlcGxhY2UoLyUvZywgJyUlJykucmVwbGFjZSgvXFwwL2csICclcycpO1xuICBmb3JtYXR0ZWQuX19zZW50cnlfdGVtcGxhdGVfdmFsdWVzX18gPSB2YWx1ZXM7XG4gIHJldHVybiBmb3JtYXR0ZWQ7XG59XG5cbi8qKlxuICogVGFnZ2VkIHRlbXBsYXRlIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgcGFyYW1ldGVyaXplZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gc3RyaW5ncyBBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzIHNwbGl0dGVkIGJldHdlZW4gZXhwcmVzc2lvbnNcbiAqIEBwYXJhbSB2YWx1ZXMgRXhwcmVzc2lvbnMgZXh0cmFjdGVkIGZyb20gdGVtcGxhdGUgc3RyaW5nXG4gKiBAcmV0dXJucyBBIGBQYXJhbWV0ZXJpemVkU3RyaW5nYCBvYmplY3QgdGhhdCBjYW4gYmUgcGFzc2VkIGludG8gYGNhcHR1cmVNZXNzYWdlYCBvciBTZW50cnkubG9nZ2VyLlggbWV0aG9kcy5cbiAqL1xuY29uc3QgZm10ID0gcGFyYW1ldGVyaXplO1xuXG5leHBvcnQgeyBmbXQsIHBhcmFtZXRlcml6ZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFyYW1ldGVyaXplLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/parameterize.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/parseSampleRate.js":
/*!*************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/parseSampleRate.js ***!
  \*************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   parseSampleRate: () => (/* binding */ parseSampleRate)\n/* harmony export */ });\n/**\n * Parse a sample rate from a given value.\n * This will either return a boolean or number sample rate, if the sample rate is valid (between 0 and 1).\n * If a string is passed, we try to convert it to a number.\n *\n * Any invalid sample rate will return `undefined`.\n */\nfunction parseSampleRate(sampleRate) {\n  if (typeof sampleRate === 'boolean') {\n    return Number(sampleRate);\n  }\n\n  const rate = typeof sampleRate === 'string' ? parseFloat(sampleRate) : sampleRate;\n  if (typeof rate !== 'number' || isNaN(rate) || rate < 0 || rate > 1) {\n    return undefined;\n  }\n\n  return rate;\n}\n\n\n//# sourceMappingURL=parseSampleRate.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3BhcnNlU2FtcGxlUmF0ZS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUUyQjtBQUMzQiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3BhcnNlU2FtcGxlUmF0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBhcnNlIGEgc2FtcGxlIHJhdGUgZnJvbSBhIGdpdmVuIHZhbHVlLlxuICogVGhpcyB3aWxsIGVpdGhlciByZXR1cm4gYSBib29sZWFuIG9yIG51bWJlciBzYW1wbGUgcmF0ZSwgaWYgdGhlIHNhbXBsZSByYXRlIGlzIHZhbGlkIChiZXR3ZWVuIDAgYW5kIDEpLlxuICogSWYgYSBzdHJpbmcgaXMgcGFzc2VkLCB3ZSB0cnkgdG8gY29udmVydCBpdCB0byBhIG51bWJlci5cbiAqXG4gKiBBbnkgaW52YWxpZCBzYW1wbGUgcmF0ZSB3aWxsIHJldHVybiBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VTYW1wbGVSYXRlKHNhbXBsZVJhdGUpIHtcbiAgaWYgKHR5cGVvZiBzYW1wbGVSYXRlID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gTnVtYmVyKHNhbXBsZVJhdGUpO1xuICB9XG5cbiAgY29uc3QgcmF0ZSA9IHR5cGVvZiBzYW1wbGVSYXRlID09PSAnc3RyaW5nJyA/IHBhcnNlRmxvYXQoc2FtcGxlUmF0ZSkgOiBzYW1wbGVSYXRlO1xuICBpZiAodHlwZW9mIHJhdGUgIT09ICdudW1iZXInIHx8IGlzTmFOKHJhdGUpIHx8IHJhdGUgPCAwIHx8IHJhdGUgPiAxKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiByYXRlO1xufVxuXG5leHBvcnQgeyBwYXJzZVNhbXBsZVJhdGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhcnNlU2FtcGxlUmF0ZS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/parseSampleRate.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/path.js":
/*!**************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/path.js ***!
  \**************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   basename: () => (/* binding */ basename),\n/* harmony export */   dirname: () => (/* binding */ dirname),\n/* harmony export */   isAbsolute: () => (/* binding */ isAbsolute),\n/* harmony export */   join: () => (/* binding */ join),\n/* harmony export */   normalizePath: () => (/* binding */ normalizePath),\n/* harmony export */   relative: () => (/* binding */ relative),\n/* harmony export */   resolve: () => (/* binding */ resolve)\n/* harmony export */ });\n// Slightly modified (no IE8 support, ES6) and transcribed to TypeScript\n// https://github.com/calvinmetcalf/rollup-plugin-node-builtins/blob/63ab8aacd013767445ca299e468d9a60a95328d7/src/es6/path.js\n//\n// Copyright Joyent, Inc.and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n/** JSDoc */\nfunction normalizeArray(parts, allowAboveRoot) {\n  // if the path tries to go above the root, `up` ends up > 0\n  let up = 0;\n  for (let i = parts.length - 1; i >= 0; i--) {\n    const last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nconst splitPathRe = /^(\\S+:\\\\|\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^/\\\\]+?|)(\\.[^./\\\\]*|))(?:[/\\\\]*)$/;\n/** JSDoc */\nfunction splitPath(filename) {\n  // Truncate files names greater than 1024 characters to avoid regex dos\n  // https://github.com/getsentry/sentry-javascript/pull/8737#discussion_r1285719172\n  const truncated = filename.length > 1024 ? `<truncated>${filename.slice(-1024)}` : filename;\n  const parts = splitPathRe.exec(truncated);\n  return parts ? parts.slice(1) : [];\n}\n\n// path.resolve([from ...], to)\n// posix version\n/** JSDoc */\nfunction resolve(...args) {\n  let resolvedPath = '';\n  let resolvedAbsolute = false;\n\n  for (let i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    const path = i >= 0 ? args[i] : '/';\n\n    // Skip empty entries\n    if (!path) {\n      continue;\n    }\n\n    resolvedPath = `${path}/${resolvedPath}`;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(\n    resolvedPath.split('/').filter(p => !!p),\n    !resolvedAbsolute,\n  ).join('/');\n\n  return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n}\n\n/** JSDoc */\nfunction trim(arr) {\n  let start = 0;\n  for (; start < arr.length; start++) {\n    if (arr[start] !== '') {\n      break;\n    }\n  }\n\n  let end = arr.length - 1;\n  for (; end >= 0; end--) {\n    if (arr[end] !== '') {\n      break;\n    }\n  }\n\n  if (start > end) {\n    return [];\n  }\n  return arr.slice(start, end - start + 1);\n}\n\n// path.relative(from, to)\n// posix version\n/** JSDoc */\nfunction relative(from, to) {\n  /* eslint-disable no-param-reassign */\n  from = resolve(from).slice(1);\n  to = resolve(to).slice(1);\n  /* eslint-enable no-param-reassign */\n\n  const fromParts = trim(from.split('/'));\n  const toParts = trim(to.split('/'));\n\n  const length = Math.min(fromParts.length, toParts.length);\n  let samePartsLength = length;\n  for (let i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  let outputParts = [];\n  for (let i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n}\n\n// path.normalize(path)\n// posix version\n/** JSDoc */\nfunction normalizePath(path) {\n  const isPathAbsolute = isAbsolute(path);\n  const trailingSlash = path.slice(-1) === '/';\n\n  // Normalize the path\n  let normalizedPath = normalizeArray(\n    path.split('/').filter(p => !!p),\n    !isPathAbsolute,\n  ).join('/');\n\n  if (!normalizedPath && !isPathAbsolute) {\n    normalizedPath = '.';\n  }\n  if (normalizedPath && trailingSlash) {\n    normalizedPath += '/';\n  }\n\n  return (isPathAbsolute ? '/' : '') + normalizedPath;\n}\n\n// posix version\n/** JSDoc */\nfunction isAbsolute(path) {\n  return path.charAt(0) === '/';\n}\n\n// posix version\n/** JSDoc */\nfunction join(...args) {\n  return normalizePath(args.join('/'));\n}\n\n/** JSDoc */\nfunction dirname(path) {\n  const result = splitPath(path);\n  const root = result[0] || '';\n  let dir = result[1];\n\n  if (!root && !dir) {\n    // No dirname whatsoever\n    return '.';\n  }\n\n  if (dir) {\n    // It has a dirname, strip trailing slash\n    dir = dir.slice(0, dir.length - 1);\n  }\n\n  return root + dir;\n}\n\n/** JSDoc */\nfunction basename(path, ext) {\n  let f = splitPath(path)[2] || '';\n  if (ext && f.slice(ext.length * -1) === ext) {\n    f = f.slice(0, f.length - ext.length);\n  }\n  return f;\n}\n\n\n//# sourceMappingURL=path.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3BhdGguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsUUFBUTtBQUN6QztBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxNQUFNO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtREFBbUQsSUFBSTtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxzQkFBc0I7QUFDakY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQ0FBZ0MsOEJBQThCO0FBQzlEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixLQUFLLEdBQUcsYUFBYTtBQUMzQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsb0JBQW9CO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUyxVQUFVO0FBQ25CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0IsWUFBWTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0NBQWdDLHNCQUFzQjtBQUN0RDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVpRjtBQUNqRiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3BhdGguanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU2xpZ2h0bHkgbW9kaWZpZWQgKG5vIElFOCBzdXBwb3J0LCBFUzYpIGFuZCB0cmFuc2NyaWJlZCB0byBUeXBlU2NyaXB0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2FsdmlubWV0Y2FsZi9yb2xsdXAtcGx1Z2luLW5vZGUtYnVpbHRpbnMvYmxvYi82M2FiOGFhY2QwMTM3Njc0NDVjYTI5OWU0NjhkOWE2MGE5NTMyOGQ3L3NyYy9lczYvcGF0aC5qc1xuLy9cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy5hbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQXJyYXkocGFydHMsIGFsbG93QWJvdmVSb290KSB7XG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIGxldCB1cCA9IDA7XG4gIGZvciAobGV0IGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGxhc3QgPSBwYXJ0c1tpXTtcbiAgICBpZiAobGFzdCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChsYXN0ID09PSAnLi4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIHVwLS07XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIHBhdGggaXMgYWxsb3dlZCB0byBnbyBhYm92ZSB0aGUgcm9vdCwgcmVzdG9yZSBsZWFkaW5nIC4uc1xuICBpZiAoYWxsb3dBYm92ZVJvb3QpIHtcbiAgICBmb3IgKDsgdXAtLTsgdXApIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzO1xufVxuXG4vLyBTcGxpdCBhIGZpbGVuYW1lIGludG8gW3Jvb3QsIGRpciwgYmFzZW5hbWUsIGV4dF0sIHVuaXggdmVyc2lvblxuLy8gJ3Jvb3QnIGlzIGp1c3QgYSBzbGFzaCwgb3Igbm90aGluZy5cbmNvbnN0IHNwbGl0UGF0aFJlID0gL14oXFxTKzpcXFxcfFxcLz8pKFtcXHNcXFNdKj8pKCg/OlxcLnsxLDJ9fFteL1xcXFxdKz98KShcXC5bXi4vXFxcXF0qfCkpKD86Wy9cXFxcXSopJC87XG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIHNwbGl0UGF0aChmaWxlbmFtZSkge1xuICAvLyBUcnVuY2F0ZSBmaWxlcyBuYW1lcyBncmVhdGVyIHRoYW4gMTAyNCBjaGFyYWN0ZXJzIHRvIGF2b2lkIHJlZ2V4IGRvc1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L3B1bGwvODczNyNkaXNjdXNzaW9uX3IxMjg1NzE5MTcyXG4gIGNvbnN0IHRydW5jYXRlZCA9IGZpbGVuYW1lLmxlbmd0aCA+IDEwMjQgPyBgPHRydW5jYXRlZD4ke2ZpbGVuYW1lLnNsaWNlKC0xMDI0KX1gIDogZmlsZW5hbWU7XG4gIGNvbnN0IHBhcnRzID0gc3BsaXRQYXRoUmUuZXhlYyh0cnVuY2F0ZWQpO1xuICByZXR1cm4gcGFydHMgPyBwYXJ0cy5zbGljZSgxKSA6IFtdO1xufVxuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIHJlc29sdmUoLi4uYXJncykge1xuICBsZXQgcmVzb2x2ZWRQYXRoID0gJyc7XG4gIGxldCByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG5cbiAgZm9yIChsZXQgaSA9IGFyZ3MubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgY29uc3QgcGF0aCA9IGkgPj0gMCA/IGFyZ3NbaV0gOiAnLyc7XG5cbiAgICAvLyBTa2lwIGVtcHR5IGVudHJpZXNcbiAgICBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJlc29sdmVkUGF0aCA9IGAke3BhdGh9LyR7cmVzb2x2ZWRQYXRofWA7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckF0KDApID09PSAnLyc7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVBcnJheShcbiAgICByZXNvbHZlZFBhdGguc3BsaXQoJy8nKS5maWx0ZXIocCA9PiAhIXApLFxuICAgICFyZXNvbHZlZEFic29sdXRlLFxuICApLmpvaW4oJy8nKTtcblxuICByZXR1cm4gKHJlc29sdmVkQWJzb2x1dGUgPyAnLycgOiAnJykgKyByZXNvbHZlZFBhdGggfHwgJy4nO1xufVxuXG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIHRyaW0oYXJyKSB7XG4gIGxldCBzdGFydCA9IDA7XG4gIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICBpZiAoYXJyW3N0YXJ0XSAhPT0gJycpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGxldCBlbmQgPSBhcnIubGVuZ3RoIC0gMTtcbiAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGFydCA+IGVuZCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gYXJyLnNsaWNlKHN0YXJ0LCBlbmQgLSBzdGFydCArIDEpO1xufVxuXG4vLyBwYXRoLnJlbGF0aXZlKGZyb20sIHRvKVxuLy8gcG9zaXggdmVyc2lvblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiByZWxhdGl2ZShmcm9tLCB0bykge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuICBmcm9tID0gcmVzb2x2ZShmcm9tKS5zbGljZSgxKTtcbiAgdG8gPSByZXNvbHZlKHRvKS5zbGljZSgxKTtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuXG4gIGNvbnN0IGZyb21QYXJ0cyA9IHRyaW0oZnJvbS5zcGxpdCgnLycpKTtcbiAgY29uc3QgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICBsZXQgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGxldCBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKGxldCBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn1cblxuLy8gcGF0aC5ub3JtYWxpemUocGF0aClcbi8vIHBvc2l4IHZlcnNpb25cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwYXRoKSB7XG4gIGNvbnN0IGlzUGF0aEFic29sdXRlID0gaXNBYnNvbHV0ZShwYXRoKTtcbiAgY29uc3QgdHJhaWxpbmdTbGFzaCA9IHBhdGguc2xpY2UoLTEpID09PSAnLyc7XG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIGxldCBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KFxuICAgIHBhdGguc3BsaXQoJy8nKS5maWx0ZXIocCA9PiAhIXApLFxuICAgICFpc1BhdGhBYnNvbHV0ZSxcbiAgKS5qb2luKCcvJyk7XG5cbiAgaWYgKCFub3JtYWxpemVkUGF0aCAmJiAhaXNQYXRoQWJzb2x1dGUpIHtcbiAgICBub3JtYWxpemVkUGF0aCA9ICcuJztcbiAgfVxuICBpZiAobm9ybWFsaXplZFBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIG5vcm1hbGl6ZWRQYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNQYXRoQWJzb2x1dGUgPyAnLycgOiAnJykgKyBub3JtYWxpemVkUGF0aDtcbn1cblxuLy8gcG9zaXggdmVyc2lvblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBpc0Fic29sdXRlKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59XG5cbi8vIHBvc2l4IHZlcnNpb25cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gam9pbiguLi5hcmdzKSB7XG4gIHJldHVybiBub3JtYWxpemVQYXRoKGFyZ3Muam9pbignLycpKTtcbn1cblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBkaXJuYW1lKHBhdGgpIHtcbiAgY29uc3QgcmVzdWx0ID0gc3BsaXRQYXRoKHBhdGgpO1xuICBjb25zdCByb290ID0gcmVzdWx0WzBdIHx8ICcnO1xuICBsZXQgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zbGljZSgwLCBkaXIubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gcm9vdCArIGRpcjtcbn1cblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBiYXNlbmFtZShwYXRoLCBleHQpIHtcbiAgbGV0IGYgPSBzcGxpdFBhdGgocGF0aClbMl0gfHwgJyc7XG4gIGlmIChleHQgJiYgZi5zbGljZShleHQubGVuZ3RoICogLTEpID09PSBleHQpIHtcbiAgICBmID0gZi5zbGljZSgwLCBmLmxlbmd0aCAtIGV4dC5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBmO1xufVxuXG5leHBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSwgaXNBYnNvbHV0ZSwgam9pbiwgbm9ybWFsaXplUGF0aCwgcmVsYXRpdmUsIHJlc29sdmUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhdGguanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/path.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/prepareEvent.js":
/*!**********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/prepareEvent.js ***!
  \**********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   applyClientOptions: () => (/* binding */ applyClientOptions),\n/* harmony export */   applyDebugIds: () => (/* binding */ applyDebugIds),\n/* harmony export */   applyDebugMeta: () => (/* binding */ applyDebugMeta),\n/* harmony export */   parseEventHintOrCaptureContext: () => (/* binding */ parseEventHintOrCaptureContext),\n/* harmony export */   prepareEvent: () => (/* binding */ prepareEvent)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/constants.js\");\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _eventProcessors_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../eventProcessors.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/eventProcessors.js\");\n/* harmony import */ var _scope_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../scope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/scope.js\");\n/* harmony import */ var _applyScopeDataToEvent_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./applyScopeDataToEvent.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/applyScopeDataToEvent.js\");\n/* harmony import */ var _debug_ids_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./debug-ids.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-ids.js\");\n/* harmony import */ var _misc_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./misc.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/misc.js\");\n/* harmony import */ var _normalize_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./normalize.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/normalize.js\");\n/* harmony import */ var _string_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./string.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/string.js\");\n/* harmony import */ var _time_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./time.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/time.js\");\n\n\n\n\n\n\n\n\n\n\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\n\n/**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n * @hidden\n */\nfunction prepareEvent(\n  options,\n  event,\n  hint,\n  scope,\n  client,\n  isolationScope,\n) {\n  const { normalizeDepth = 3, normalizeMaxBreadth = 1000 } = options;\n  const prepared = {\n    ...event,\n    event_id: event.event_id || hint.event_id || (0,_misc_js__WEBPACK_IMPORTED_MODULE_6__.uuid4)(),\n    timestamp: event.timestamp || (0,_time_js__WEBPACK_IMPORTED_MODULE_9__.dateTimestampInSeconds)(),\n  };\n  const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n  applyClientOptions(prepared, options);\n  applyIntegrationsMetadata(prepared, integrations);\n\n  if (client) {\n    client.emit('applyFrameMetadata', event);\n  }\n\n  // Only put debug IDs onto frames for error events.\n  if (event.type === undefined) {\n    applyDebugIds(prepared, options.stackParser);\n  }\n\n  // If we have scope given to us, use it as the base for further modifications.\n  // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n  const finalScope = getFinalScope(scope, hint.captureContext);\n\n  if (hint.mechanism) {\n    (0,_misc_js__WEBPACK_IMPORTED_MODULE_6__.addExceptionMechanism)(prepared, hint.mechanism);\n  }\n\n  const clientEventProcessors = client ? client.getEventProcessors() : [];\n\n  // This should be the last thing called, since we want that\n  // {@link Scope.addEventProcessor} gets the finished prepared event.\n  // Merge scope data together\n  const data = (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_1__.getGlobalScope)().getScopeData();\n\n  if (isolationScope) {\n    const isolationData = isolationScope.getScopeData();\n    (0,_applyScopeDataToEvent_js__WEBPACK_IMPORTED_MODULE_4__.mergeScopeData)(data, isolationData);\n  }\n\n  if (finalScope) {\n    const finalScopeData = finalScope.getScopeData();\n    (0,_applyScopeDataToEvent_js__WEBPACK_IMPORTED_MODULE_4__.mergeScopeData)(data, finalScopeData);\n  }\n\n  const attachments = [...(hint.attachments || []), ...data.attachments];\n  if (attachments.length) {\n    hint.attachments = attachments;\n  }\n\n  (0,_applyScopeDataToEvent_js__WEBPACK_IMPORTED_MODULE_4__.applyScopeDataToEvent)(prepared, data);\n\n  const eventProcessors = [\n    ...clientEventProcessors,\n    // Run scope event processors _after_ all other processors\n    ...data.eventProcessors,\n  ];\n\n  const result = (0,_eventProcessors_js__WEBPACK_IMPORTED_MODULE_2__.notifyEventProcessors)(eventProcessors, prepared, hint);\n\n  return result.then(evt => {\n    if (evt) {\n      // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n      // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n      // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n      // any new data\n      applyDebugMeta(evt);\n    }\n\n    if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n      return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n    }\n    return evt;\n  });\n}\n\n/**\n * Enhances event using the client configuration.\n * It takes care of all \"static\" values like environment, release and `dist`,\n * as well as truncating overly long values.\n *\n * Only exported for tests.\n *\n * @param event event instance to be enhanced\n */\nfunction applyClientOptions(event, options) {\n  const { environment, release, dist, maxValueLength = 250 } = options;\n\n  // empty strings do not make sense for environment, release, and dist\n  // so we handle them the same as if they were not provided\n  event.environment = event.environment || environment || _constants_js__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_ENVIRONMENT;\n\n  if (!event.release && release) {\n    event.release = release;\n  }\n\n  if (!event.dist && dist) {\n    event.dist = dist;\n  }\n\n  const request = event.request;\n  if (request?.url) {\n    request.url = (0,_string_js__WEBPACK_IMPORTED_MODULE_8__.truncate)(request.url, maxValueLength);\n  }\n}\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nfunction applyDebugIds(event, stackParser) {\n  // Build a map of filename -> debug_id\n  const filenameDebugIdMap = (0,_debug_ids_js__WEBPACK_IMPORTED_MODULE_5__.getFilenameToDebugIdMap)(stackParser);\n\n  event.exception?.values?.forEach(exception => {\n    exception.stacktrace?.frames?.forEach(frame => {\n      if (frame.filename) {\n        frame.debug_id = filenameDebugIdMap[frame.filename];\n      }\n    });\n  });\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nfunction applyDebugMeta(event) {\n  // Extract debug IDs and filenames from the stack frames on the event.\n  const filenameDebugIdMap = {};\n  event.exception?.values?.forEach(exception => {\n    exception.stacktrace?.frames?.forEach(frame => {\n      if (frame.debug_id) {\n        if (frame.abs_path) {\n          filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n        } else if (frame.filename) {\n          filenameDebugIdMap[frame.filename] = frame.debug_id;\n        }\n        delete frame.debug_id;\n      }\n    });\n  });\n\n  if (Object.keys(filenameDebugIdMap).length === 0) {\n    return;\n  }\n\n  // Fill debug_meta information\n  event.debug_meta = event.debug_meta || {};\n  event.debug_meta.images = event.debug_meta.images || [];\n  const images = event.debug_meta.images;\n  Object.entries(filenameDebugIdMap).forEach(([filename, debug_id]) => {\n    images.push({\n      type: 'sourcemap',\n      code_file: filename,\n      debug_id,\n    });\n  });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event, integrationNames) {\n  if (integrationNames.length > 0) {\n    event.sdk = event.sdk || {};\n    event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n  }\n}\n\n/**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\nfunction normalizeEvent(event, depth, maxBreadth) {\n  if (!event) {\n    return null;\n  }\n\n  const normalized = {\n    ...event,\n    ...(event.breadcrumbs && {\n      breadcrumbs: event.breadcrumbs.map(b => ({\n        ...b,\n        ...(b.data && {\n          data: (0,_normalize_js__WEBPACK_IMPORTED_MODULE_7__.normalize)(b.data, depth, maxBreadth),\n        }),\n      })),\n    }),\n    ...(event.user && {\n      user: (0,_normalize_js__WEBPACK_IMPORTED_MODULE_7__.normalize)(event.user, depth, maxBreadth),\n    }),\n    ...(event.contexts && {\n      contexts: (0,_normalize_js__WEBPACK_IMPORTED_MODULE_7__.normalize)(event.contexts, depth, maxBreadth),\n    }),\n    ...(event.extra && {\n      extra: (0,_normalize_js__WEBPACK_IMPORTED_MODULE_7__.normalize)(event.extra, depth, maxBreadth),\n    }),\n  };\n\n  // event.contexts.trace stores information about a Transaction. Similarly,\n  // event.spans[] stores information about child Spans. Given that a\n  // Transaction is conceptually a Span, normalization should apply to both\n  // Transactions and Spans consistently.\n  // For now the decision is to skip normalization of Transactions and Spans,\n  // so this block overwrites the normalized event to add back the original\n  // Transaction information prior to normalization.\n  if (event.contexts?.trace && normalized.contexts) {\n    normalized.contexts.trace = event.contexts.trace;\n\n    // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n    if (event.contexts.trace.data) {\n      normalized.contexts.trace.data = (0,_normalize_js__WEBPACK_IMPORTED_MODULE_7__.normalize)(event.contexts.trace.data, depth, maxBreadth);\n    }\n  }\n\n  // event.spans[].data may contain circular/dangerous data so we need to normalize it\n  if (event.spans) {\n    normalized.spans = event.spans.map(span => {\n      return {\n        ...span,\n        ...(span.data && {\n          data: (0,_normalize_js__WEBPACK_IMPORTED_MODULE_7__.normalize)(span.data, depth, maxBreadth),\n        }),\n      };\n    });\n  }\n\n  // event.contexts.flags (FeatureFlagContext) stores context for our feature\n  // flag integrations. It has a greater nesting depth than our other typed\n  // Contexts, so we re-normalize with a fixed depth of 3 here. We do not want\n  // to skip this in case of conflicting, user-provided context.\n  if (event.contexts?.flags && normalized.contexts) {\n    normalized.contexts.flags = (0,_normalize_js__WEBPACK_IMPORTED_MODULE_7__.normalize)(event.contexts.flags, 3, maxBreadth);\n  }\n\n  return normalized;\n}\n\nfunction getFinalScope(scope, captureContext) {\n  if (!captureContext) {\n    return scope;\n  }\n\n  const finalScope = scope ? scope.clone() : new _scope_js__WEBPACK_IMPORTED_MODULE_3__.Scope();\n  finalScope.update(captureContext);\n  return finalScope;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nfunction parseEventHintOrCaptureContext(\n  hint,\n) {\n  if (!hint) {\n    return undefined;\n  }\n\n  // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n  if (hintIsScopeOrFunction(hint)) {\n    return { captureContext: hint };\n  }\n\n  if (hintIsScopeContext(hint)) {\n    return {\n      captureContext: hint,\n    };\n  }\n\n  return hint;\n}\n\nfunction hintIsScopeOrFunction(hint) {\n  return hint instanceof _scope_js__WEBPACK_IMPORTED_MODULE_3__.Scope || typeof hint === 'function';\n}\n\nconst captureContextKeys = [\n  'user',\n  'level',\n  'extra',\n  'contexts',\n  'tags',\n  'fingerprint',\n  'propagationContext',\n] ;\n\nfunction hintIsScopeContext(hint) {\n  return Object.keys(hint).some(key => captureContextKeys.includes(key ));\n}\n\n\n//# sourceMappingURL=prepareEvent.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3ByZXBhcmVFdmVudC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBc0Q7QUFDRDtBQUNTO0FBQzFCO0FBQytDO0FBQzFCO0FBQ0E7QUFDZDtBQUNKO0FBQ1k7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBLEtBQUssUUFBUSxXQUFXLGVBQWU7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsaURBQWlEO0FBQzNEO0FBQ0E7QUFDQSxpREFBaUQsK0NBQUs7QUFDdEQsa0NBQWtDLGdFQUFzQjtBQUN4RDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksK0RBQXFCO0FBQ3pCOztBQUVBOztBQUVBO0FBQ0EsTUFBTSwrQkFBK0I7QUFDckM7QUFDQSxlQUFlLGlFQUFjOztBQUU3QjtBQUNBO0FBQ0EsSUFBSSx5RUFBYztBQUNsQjs7QUFFQTtBQUNBO0FBQ0EsSUFBSSx5RUFBYztBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLGdGQUFxQjs7QUFFdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsMEVBQXFCOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxtREFBbUQ7O0FBRTdEO0FBQ0E7QUFDQSwwREFBMEQsOERBQW1COztBQUU3RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0Isb0RBQVE7QUFDMUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLHNFQUF1Qjs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHdEQUFTO0FBQ3pCLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsWUFBWSx3REFBUztBQUNyQixLQUFLO0FBQ0w7QUFDQSxnQkFBZ0Isd0RBQVM7QUFDekIsS0FBSztBQUNMO0FBQ0EsYUFBYSx3REFBUztBQUN0QixLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1Q0FBdUMsd0RBQVM7QUFDaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isd0RBQVM7QUFDekIsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0Msd0RBQVM7QUFDekM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpREFBaUQsNENBQUs7QUFDdEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EseUJBQXlCLDRDQUFLO0FBQzlCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRTJHO0FBQzNHIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvcHJlcGFyZUV2ZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERFRkFVTFRfRU5WSVJPTk1FTlQgfSBmcm9tICcuLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgZ2V0R2xvYmFsU2NvcGUgfSBmcm9tICcuLi9jdXJyZW50U2NvcGVzLmpzJztcbmltcG9ydCB7IG5vdGlmeUV2ZW50UHJvY2Vzc29ycyB9IGZyb20gJy4uL2V2ZW50UHJvY2Vzc29ycy5qcyc7XG5pbXBvcnQgeyBTY29wZSB9IGZyb20gJy4uL3Njb3BlLmpzJztcbmltcG9ydCB7IG1lcmdlU2NvcGVEYXRhLCBhcHBseVNjb3BlRGF0YVRvRXZlbnQgfSBmcm9tICcuL2FwcGx5U2NvcGVEYXRhVG9FdmVudC5qcyc7XG5pbXBvcnQgeyBnZXRGaWxlbmFtZVRvRGVidWdJZE1hcCB9IGZyb20gJy4vZGVidWctaWRzLmpzJztcbmltcG9ydCB7IHV1aWQ0LCBhZGRFeGNlcHRpb25NZWNoYW5pc20gfSBmcm9tICcuL21pc2MuanMnO1xuaW1wb3J0IHsgbm9ybWFsaXplIH0gZnJvbSAnLi9ub3JtYWxpemUuanMnO1xuaW1wb3J0IHsgdHJ1bmNhdGUgfSBmcm9tICcuL3N0cmluZy5qcyc7XG5pbXBvcnQgeyBkYXRlVGltZXN0YW1wSW5TZWNvbmRzIH0gZnJvbSAnLi90aW1lLmpzJztcblxuLyoqXG4gKiBUaGlzIHR5cGUgbWFrZXMgc3VyZSB0aGF0IHdlIGdldCBlaXRoZXIgYSBDYXB0dXJlQ29udGV4dCwgT1IgYW4gRXZlbnRIaW50LlxuICogSXQgZG9lcyBub3QgYWxsb3cgbWl4aW5nIHRoZW0sIHdoaWNoIGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBvdXRjb21lcywgZS5nLiB0aGlzIGlzIGRpc2FsbG93ZWQ6XG4gKiB7IHVzZXI6IHsgaWQ6ICcxMjMnIH0sIG1lY2hhbmlzbTogeyBoYW5kbGVkOiBmYWxzZSB9IH1cbiAqL1xuXG4vKipcbiAqIEFkZHMgY29tbW9uIGluZm9ybWF0aW9uIHRvIGV2ZW50cy5cbiAqXG4gKiBUaGUgaW5mb3JtYXRpb24gaW5jbHVkZXMgcmVsZWFzZSBhbmQgZW52aXJvbm1lbnQgZnJvbSBgb3B0aW9uc2AsXG4gKiBicmVhZGNydW1icyBhbmQgY29udGV4dCAoZXh0cmEsIHRhZ3MgYW5kIHVzZXIpIGZyb20gdGhlIHNjb3BlLlxuICpcbiAqIEluZm9ybWF0aW9uIHRoYXQgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBldmVudCBpcyBuZXZlciBvdmVyd3JpdHRlbi4gRm9yXG4gKiBuZXN0ZWQgb2JqZWN0cywgc3VjaCBhcyB0aGUgY29udGV4dCwga2V5cyBhcmUgbWVyZ2VkLlxuICpcbiAqIEBwYXJhbSBldmVudCBUaGUgb3JpZ2luYWwgZXZlbnQuXG4gKiBAcGFyYW0gaGludCBNYXkgY29udGFpbiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBleGNlcHRpb24uXG4gKiBAcGFyYW0gc2NvcGUgQSBzY29wZSBjb250YWluaW5nIGV2ZW50IG1ldGFkYXRhLlxuICogQHJldHVybnMgQSBuZXcgZXZlbnQgd2l0aCBtb3JlIGluZm9ybWF0aW9uLlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBwcmVwYXJlRXZlbnQoXG4gIG9wdGlvbnMsXG4gIGV2ZW50LFxuICBoaW50LFxuICBzY29wZSxcbiAgY2xpZW50LFxuICBpc29sYXRpb25TY29wZSxcbikge1xuICBjb25zdCB7IG5vcm1hbGl6ZURlcHRoID0gMywgbm9ybWFsaXplTWF4QnJlYWR0aCA9IDEwMDAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHByZXBhcmVkID0ge1xuICAgIC4uLmV2ZW50LFxuICAgIGV2ZW50X2lkOiBldmVudC5ldmVudF9pZCB8fCBoaW50LmV2ZW50X2lkIHx8IHV1aWQ0KCksXG4gICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXAgfHwgZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpLFxuICB9O1xuICBjb25zdCBpbnRlZ3JhdGlvbnMgPSBoaW50LmludGVncmF0aW9ucyB8fCBvcHRpb25zLmludGVncmF0aW9ucy5tYXAoaSA9PiBpLm5hbWUpO1xuXG4gIGFwcGx5Q2xpZW50T3B0aW9ucyhwcmVwYXJlZCwgb3B0aW9ucyk7XG4gIGFwcGx5SW50ZWdyYXRpb25zTWV0YWRhdGEocHJlcGFyZWQsIGludGVncmF0aW9ucyk7XG5cbiAgaWYgKGNsaWVudCkge1xuICAgIGNsaWVudC5lbWl0KCdhcHBseUZyYW1lTWV0YWRhdGEnLCBldmVudCk7XG4gIH1cblxuICAvLyBPbmx5IHB1dCBkZWJ1ZyBJRHMgb250byBmcmFtZXMgZm9yIGVycm9yIGV2ZW50cy5cbiAgaWYgKGV2ZW50LnR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgIGFwcGx5RGVidWdJZHMocHJlcGFyZWQsIG9wdGlvbnMuc3RhY2tQYXJzZXIpO1xuICB9XG5cbiAgLy8gSWYgd2UgaGF2ZSBzY29wZSBnaXZlbiB0byB1cywgdXNlIGl0IGFzIHRoZSBiYXNlIGZvciBmdXJ0aGVyIG1vZGlmaWNhdGlvbnMuXG4gIC8vIFRoaXMgYWxsb3dzIHVzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgY29weWluZyBvZiBkYXRhIGlmIGBjYXB0dXJlQ29udGV4dGAgaXMgbm90IHByb3ZpZGVkLlxuICBjb25zdCBmaW5hbFNjb3BlID0gZ2V0RmluYWxTY29wZShzY29wZSwgaGludC5jYXB0dXJlQ29udGV4dCk7XG5cbiAgaWYgKGhpbnQubWVjaGFuaXNtKSB7XG4gICAgYWRkRXhjZXB0aW9uTWVjaGFuaXNtKHByZXBhcmVkLCBoaW50Lm1lY2hhbmlzbSk7XG4gIH1cblxuICBjb25zdCBjbGllbnRFdmVudFByb2Nlc3NvcnMgPSBjbGllbnQgPyBjbGllbnQuZ2V0RXZlbnRQcm9jZXNzb3JzKCkgOiBbXTtcblxuICAvLyBUaGlzIHNob3VsZCBiZSB0aGUgbGFzdCB0aGluZyBjYWxsZWQsIHNpbmNlIHdlIHdhbnQgdGhhdFxuICAvLyB7QGxpbmsgU2NvcGUuYWRkRXZlbnRQcm9jZXNzb3J9IGdldHMgdGhlIGZpbmlzaGVkIHByZXBhcmVkIGV2ZW50LlxuICAvLyBNZXJnZSBzY29wZSBkYXRhIHRvZ2V0aGVyXG4gIGNvbnN0IGRhdGEgPSBnZXRHbG9iYWxTY29wZSgpLmdldFNjb3BlRGF0YSgpO1xuXG4gIGlmIChpc29sYXRpb25TY29wZSkge1xuICAgIGNvbnN0IGlzb2xhdGlvbkRhdGEgPSBpc29sYXRpb25TY29wZS5nZXRTY29wZURhdGEoKTtcbiAgICBtZXJnZVNjb3BlRGF0YShkYXRhLCBpc29sYXRpb25EYXRhKTtcbiAgfVxuXG4gIGlmIChmaW5hbFNjb3BlKSB7XG4gICAgY29uc3QgZmluYWxTY29wZURhdGEgPSBmaW5hbFNjb3BlLmdldFNjb3BlRGF0YSgpO1xuICAgIG1lcmdlU2NvcGVEYXRhKGRhdGEsIGZpbmFsU2NvcGVEYXRhKTtcbiAgfVxuXG4gIGNvbnN0IGF0dGFjaG1lbnRzID0gWy4uLihoaW50LmF0dGFjaG1lbnRzIHx8IFtdKSwgLi4uZGF0YS5hdHRhY2htZW50c107XG4gIGlmIChhdHRhY2htZW50cy5sZW5ndGgpIHtcbiAgICBoaW50LmF0dGFjaG1lbnRzID0gYXR0YWNobWVudHM7XG4gIH1cblxuICBhcHBseVNjb3BlRGF0YVRvRXZlbnQocHJlcGFyZWQsIGRhdGEpO1xuXG4gIGNvbnN0IGV2ZW50UHJvY2Vzc29ycyA9IFtcbiAgICAuLi5jbGllbnRFdmVudFByb2Nlc3NvcnMsXG4gICAgLy8gUnVuIHNjb3BlIGV2ZW50IHByb2Nlc3NvcnMgX2FmdGVyXyBhbGwgb3RoZXIgcHJvY2Vzc29yc1xuICAgIC4uLmRhdGEuZXZlbnRQcm9jZXNzb3JzLFxuICBdO1xuXG4gIGNvbnN0IHJlc3VsdCA9IG5vdGlmeUV2ZW50UHJvY2Vzc29ycyhldmVudFByb2Nlc3NvcnMsIHByZXBhcmVkLCBoaW50KTtcblxuICByZXR1cm4gcmVzdWx0LnRoZW4oZXZ0ID0+IHtcbiAgICBpZiAoZXZ0KSB7XG4gICAgICAvLyBXZSBhcHBseSB0aGUgZGVidWdfbWV0YSBmaWVsZCBvbmx5IGFmdGVyIGFsbCBldmVudCBwcm9jZXNzb3JzIGhhdmUgcmFuLCBzbyB0aGF0IGlmIGFueSBldmVudCBwcm9jZXNzb3JzIG1vZGlmaWVkXG4gICAgICAvLyBmaWxlIG5hbWVzIChlLmcudGhlIFJld3JpdGVGcmFtZXMgaW50ZWdyYXRpb24pIHRoZSBmaWxlbmFtZSAtPiBkZWJ1ZyBJRCByZWxhdGlvbnNoaXAgaXNuJ3QgZGVzdHJveWVkLlxuICAgICAgLy8gVGhpcyBzaG91bGQgbm90IGNhdXNlIGFueSBQSUkgaXNzdWVzLCBzaW5jZSB3ZSdyZSBvbmx5IG1vdmluZyBkYXRhIHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgZXZlbnQgYW5kIG5vdCBhZGRpbmdcbiAgICAgIC8vIGFueSBuZXcgZGF0YVxuICAgICAgYXBwbHlEZWJ1Z01ldGEoZXZ0KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5vcm1hbGl6ZURlcHRoID09PSAnbnVtYmVyJyAmJiBub3JtYWxpemVEZXB0aCA+IDApIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVFdmVudChldnQsIG5vcm1hbGl6ZURlcHRoLCBub3JtYWxpemVNYXhCcmVhZHRoKTtcbiAgICB9XG4gICAgcmV0dXJuIGV2dDtcbiAgfSk7XG59XG5cbi8qKlxuICogRW5oYW5jZXMgZXZlbnQgdXNpbmcgdGhlIGNsaWVudCBjb25maWd1cmF0aW9uLlxuICogSXQgdGFrZXMgY2FyZSBvZiBhbGwgXCJzdGF0aWNcIiB2YWx1ZXMgbGlrZSBlbnZpcm9ubWVudCwgcmVsZWFzZSBhbmQgYGRpc3RgLFxuICogYXMgd2VsbCBhcyB0cnVuY2F0aW5nIG92ZXJseSBsb25nIHZhbHVlcy5cbiAqXG4gKiBPbmx5IGV4cG9ydGVkIGZvciB0ZXN0cy5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgZXZlbnQgaW5zdGFuY2UgdG8gYmUgZW5oYW5jZWRcbiAqL1xuZnVuY3Rpb24gYXBwbHlDbGllbnRPcHRpb25zKGV2ZW50LCBvcHRpb25zKSB7XG4gIGNvbnN0IHsgZW52aXJvbm1lbnQsIHJlbGVhc2UsIGRpc3QsIG1heFZhbHVlTGVuZ3RoID0gMjUwIH0gPSBvcHRpb25zO1xuXG4gIC8vIGVtcHR5IHN0cmluZ3MgZG8gbm90IG1ha2Ugc2Vuc2UgZm9yIGVudmlyb25tZW50LCByZWxlYXNlLCBhbmQgZGlzdFxuICAvLyBzbyB3ZSBoYW5kbGUgdGhlbSB0aGUgc2FtZSBhcyBpZiB0aGV5IHdlcmUgbm90IHByb3ZpZGVkXG4gIGV2ZW50LmVudmlyb25tZW50ID0gZXZlbnQuZW52aXJvbm1lbnQgfHwgZW52aXJvbm1lbnQgfHwgREVGQVVMVF9FTlZJUk9OTUVOVDtcblxuICBpZiAoIWV2ZW50LnJlbGVhc2UgJiYgcmVsZWFzZSkge1xuICAgIGV2ZW50LnJlbGVhc2UgPSByZWxlYXNlO1xuICB9XG5cbiAgaWYgKCFldmVudC5kaXN0ICYmIGRpc3QpIHtcbiAgICBldmVudC5kaXN0ID0gZGlzdDtcbiAgfVxuXG4gIGNvbnN0IHJlcXVlc3QgPSBldmVudC5yZXF1ZXN0O1xuICBpZiAocmVxdWVzdD8udXJsKSB7XG4gICAgcmVxdWVzdC51cmwgPSB0cnVuY2F0ZShyZXF1ZXN0LnVybCwgbWF4VmFsdWVMZW5ndGgpO1xuICB9XG59XG5cbi8qKlxuICogUHV0cyBkZWJ1ZyBJRHMgaW50byB0aGUgc3RhY2sgZnJhbWVzIG9mIGFuIGVycm9yIGV2ZW50LlxuICovXG5mdW5jdGlvbiBhcHBseURlYnVnSWRzKGV2ZW50LCBzdGFja1BhcnNlcikge1xuICAvLyBCdWlsZCBhIG1hcCBvZiBmaWxlbmFtZSAtPiBkZWJ1Z19pZFxuICBjb25zdCBmaWxlbmFtZURlYnVnSWRNYXAgPSBnZXRGaWxlbmFtZVRvRGVidWdJZE1hcChzdGFja1BhcnNlcik7XG5cbiAgZXZlbnQuZXhjZXB0aW9uPy52YWx1ZXM/LmZvckVhY2goZXhjZXB0aW9uID0+IHtcbiAgICBleGNlcHRpb24uc3RhY2t0cmFjZT8uZnJhbWVzPy5mb3JFYWNoKGZyYW1lID0+IHtcbiAgICAgIGlmIChmcmFtZS5maWxlbmFtZSkge1xuICAgICAgICBmcmFtZS5kZWJ1Z19pZCA9IGZpbGVuYW1lRGVidWdJZE1hcFtmcmFtZS5maWxlbmFtZV07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIE1vdmVzIGRlYnVnIElEcyBmcm9tIHRoZSBzdGFjayBmcmFtZXMgb2YgYW4gZXJyb3IgZXZlbnQgaW50byB0aGUgZGVidWdfbWV0YSBmaWVsZC5cbiAqL1xuZnVuY3Rpb24gYXBwbHlEZWJ1Z01ldGEoZXZlbnQpIHtcbiAgLy8gRXh0cmFjdCBkZWJ1ZyBJRHMgYW5kIGZpbGVuYW1lcyBmcm9tIHRoZSBzdGFjayBmcmFtZXMgb24gdGhlIGV2ZW50LlxuICBjb25zdCBmaWxlbmFtZURlYnVnSWRNYXAgPSB7fTtcbiAgZXZlbnQuZXhjZXB0aW9uPy52YWx1ZXM/LmZvckVhY2goZXhjZXB0aW9uID0+IHtcbiAgICBleGNlcHRpb24uc3RhY2t0cmFjZT8uZnJhbWVzPy5mb3JFYWNoKGZyYW1lID0+IHtcbiAgICAgIGlmIChmcmFtZS5kZWJ1Z19pZCkge1xuICAgICAgICBpZiAoZnJhbWUuYWJzX3BhdGgpIHtcbiAgICAgICAgICBmaWxlbmFtZURlYnVnSWRNYXBbZnJhbWUuYWJzX3BhdGhdID0gZnJhbWUuZGVidWdfaWQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZnJhbWUuZmlsZW5hbWUpIHtcbiAgICAgICAgICBmaWxlbmFtZURlYnVnSWRNYXBbZnJhbWUuZmlsZW5hbWVdID0gZnJhbWUuZGVidWdfaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIGZyYW1lLmRlYnVnX2lkO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBpZiAoT2JqZWN0LmtleXMoZmlsZW5hbWVEZWJ1Z0lkTWFwKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGaWxsIGRlYnVnX21ldGEgaW5mb3JtYXRpb25cbiAgZXZlbnQuZGVidWdfbWV0YSA9IGV2ZW50LmRlYnVnX21ldGEgfHwge307XG4gIGV2ZW50LmRlYnVnX21ldGEuaW1hZ2VzID0gZXZlbnQuZGVidWdfbWV0YS5pbWFnZXMgfHwgW107XG4gIGNvbnN0IGltYWdlcyA9IGV2ZW50LmRlYnVnX21ldGEuaW1hZ2VzO1xuICBPYmplY3QuZW50cmllcyhmaWxlbmFtZURlYnVnSWRNYXApLmZvckVhY2goKFtmaWxlbmFtZSwgZGVidWdfaWRdKSA9PiB7XG4gICAgaW1hZ2VzLnB1c2goe1xuICAgICAgdHlwZTogJ3NvdXJjZW1hcCcsXG4gICAgICBjb2RlX2ZpbGU6IGZpbGVuYW1lLFxuICAgICAgZGVidWdfaWQsXG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWRkcyBhbGwgdXNlZCBpbnRlZ3JhdGlvbnMgdG8gdGhlIFNESyBpbmZvIGluIHRoZSBldmVudC5cbiAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdGhhdCB3aWxsIGJlIGZpbGxlZCB3aXRoIGFsbCBpbnRlZ3JhdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5SW50ZWdyYXRpb25zTWV0YWRhdGEoZXZlbnQsIGludGVncmF0aW9uTmFtZXMpIHtcbiAgaWYgKGludGVncmF0aW9uTmFtZXMubGVuZ3RoID4gMCkge1xuICAgIGV2ZW50LnNkayA9IGV2ZW50LnNkayB8fCB7fTtcbiAgICBldmVudC5zZGsuaW50ZWdyYXRpb25zID0gWy4uLihldmVudC5zZGsuaW50ZWdyYXRpb25zIHx8IFtdKSwgLi4uaW50ZWdyYXRpb25OYW1lc107XG4gIH1cbn1cblxuLyoqXG4gKiBBcHBsaWVzIGBub3JtYWxpemVgIGZ1bmN0aW9uIG9uIG5lY2Vzc2FyeSBgRXZlbnRgIGF0dHJpYnV0ZXMgdG8gbWFrZSB0aGVtIHNhZmUgZm9yIHNlcmlhbGl6YXRpb24uXG4gKiBOb3JtYWxpemVkIGtleXM6XG4gKiAtIGBicmVhZGNydW1icy5kYXRhYFxuICogLSBgdXNlcmBcbiAqIC0gYGNvbnRleHRzYFxuICogLSBgZXh0cmFgXG4gKiBAcGFyYW0gZXZlbnQgRXZlbnRcbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgZXZlbnRcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRXZlbnQoZXZlbnQsIGRlcHRoLCBtYXhCcmVhZHRoKSB7XG4gIGlmICghZXZlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7XG4gICAgLi4uZXZlbnQsXG4gICAgLi4uKGV2ZW50LmJyZWFkY3J1bWJzICYmIHtcbiAgICAgIGJyZWFkY3J1bWJzOiBldmVudC5icmVhZGNydW1icy5tYXAoYiA9PiAoe1xuICAgICAgICAuLi5iLFxuICAgICAgICAuLi4oYi5kYXRhICYmIHtcbiAgICAgICAgICBkYXRhOiBub3JtYWxpemUoYi5kYXRhLCBkZXB0aCwgbWF4QnJlYWR0aCksXG4gICAgICAgIH0pLFxuICAgICAgfSkpLFxuICAgIH0pLFxuICAgIC4uLihldmVudC51c2VyICYmIHtcbiAgICAgIHVzZXI6IG5vcm1hbGl6ZShldmVudC51c2VyLCBkZXB0aCwgbWF4QnJlYWR0aCksXG4gICAgfSksXG4gICAgLi4uKGV2ZW50LmNvbnRleHRzICYmIHtcbiAgICAgIGNvbnRleHRzOiBub3JtYWxpemUoZXZlbnQuY29udGV4dHMsIGRlcHRoLCBtYXhCcmVhZHRoKSxcbiAgICB9KSxcbiAgICAuLi4oZXZlbnQuZXh0cmEgJiYge1xuICAgICAgZXh0cmE6IG5vcm1hbGl6ZShldmVudC5leHRyYSwgZGVwdGgsIG1heEJyZWFkdGgpLFxuICAgIH0pLFxuICB9O1xuXG4gIC8vIGV2ZW50LmNvbnRleHRzLnRyYWNlIHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCBhIFRyYW5zYWN0aW9uLiBTaW1pbGFybHksXG4gIC8vIGV2ZW50LnNwYW5zW10gc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IGNoaWxkIFNwYW5zLiBHaXZlbiB0aGF0IGFcbiAgLy8gVHJhbnNhY3Rpb24gaXMgY29uY2VwdHVhbGx5IGEgU3Bhbiwgbm9ybWFsaXphdGlvbiBzaG91bGQgYXBwbHkgdG8gYm90aFxuICAvLyBUcmFuc2FjdGlvbnMgYW5kIFNwYW5zIGNvbnNpc3RlbnRseS5cbiAgLy8gRm9yIG5vdyB0aGUgZGVjaXNpb24gaXMgdG8gc2tpcCBub3JtYWxpemF0aW9uIG9mIFRyYW5zYWN0aW9ucyBhbmQgU3BhbnMsXG4gIC8vIHNvIHRoaXMgYmxvY2sgb3ZlcndyaXRlcyB0aGUgbm9ybWFsaXplZCBldmVudCB0byBhZGQgYmFjayB0aGUgb3JpZ2luYWxcbiAgLy8gVHJhbnNhY3Rpb24gaW5mb3JtYXRpb24gcHJpb3IgdG8gbm9ybWFsaXphdGlvbi5cbiAgaWYgKGV2ZW50LmNvbnRleHRzPy50cmFjZSAmJiBub3JtYWxpemVkLmNvbnRleHRzKSB7XG4gICAgbm9ybWFsaXplZC5jb250ZXh0cy50cmFjZSA9IGV2ZW50LmNvbnRleHRzLnRyYWNlO1xuXG4gICAgLy8gZXZlbnQuY29udGV4dHMudHJhY2UuZGF0YSBtYXkgY29udGFpbiBjaXJjdWxhci9kYW5nZXJvdXMgZGF0YSBzbyB3ZSBuZWVkIHRvIG5vcm1hbGl6ZSBpdFxuICAgIGlmIChldmVudC5jb250ZXh0cy50cmFjZS5kYXRhKSB7XG4gICAgICBub3JtYWxpemVkLmNvbnRleHRzLnRyYWNlLmRhdGEgPSBub3JtYWxpemUoZXZlbnQuY29udGV4dHMudHJhY2UuZGF0YSwgZGVwdGgsIG1heEJyZWFkdGgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGV2ZW50LnNwYW5zW10uZGF0YSBtYXkgY29udGFpbiBjaXJjdWxhci9kYW5nZXJvdXMgZGF0YSBzbyB3ZSBuZWVkIHRvIG5vcm1hbGl6ZSBpdFxuICBpZiAoZXZlbnQuc3BhbnMpIHtcbiAgICBub3JtYWxpemVkLnNwYW5zID0gZXZlbnQuc3BhbnMubWFwKHNwYW4gPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3BhbixcbiAgICAgICAgLi4uKHNwYW4uZGF0YSAmJiB7XG4gICAgICAgICAgZGF0YTogbm9ybWFsaXplKHNwYW4uZGF0YSwgZGVwdGgsIG1heEJyZWFkdGgpLFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvLyBldmVudC5jb250ZXh0cy5mbGFncyAoRmVhdHVyZUZsYWdDb250ZXh0KSBzdG9yZXMgY29udGV4dCBmb3Igb3VyIGZlYXR1cmVcbiAgLy8gZmxhZyBpbnRlZ3JhdGlvbnMuIEl0IGhhcyBhIGdyZWF0ZXIgbmVzdGluZyBkZXB0aCB0aGFuIG91ciBvdGhlciB0eXBlZFxuICAvLyBDb250ZXh0cywgc28gd2UgcmUtbm9ybWFsaXplIHdpdGggYSBmaXhlZCBkZXB0aCBvZiAzIGhlcmUuIFdlIGRvIG5vdCB3YW50XG4gIC8vIHRvIHNraXAgdGhpcyBpbiBjYXNlIG9mIGNvbmZsaWN0aW5nLCB1c2VyLXByb3ZpZGVkIGNvbnRleHQuXG4gIGlmIChldmVudC5jb250ZXh0cz8uZmxhZ3MgJiYgbm9ybWFsaXplZC5jb250ZXh0cykge1xuICAgIG5vcm1hbGl6ZWQuY29udGV4dHMuZmxhZ3MgPSBub3JtYWxpemUoZXZlbnQuY29udGV4dHMuZmxhZ3MsIDMsIG1heEJyZWFkdGgpO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEZpbmFsU2NvcGUoc2NvcGUsIGNhcHR1cmVDb250ZXh0KSB7XG4gIGlmICghY2FwdHVyZUNvbnRleHQpIHtcbiAgICByZXR1cm4gc2NvcGU7XG4gIH1cblxuICBjb25zdCBmaW5hbFNjb3BlID0gc2NvcGUgPyBzY29wZS5jbG9uZSgpIDogbmV3IFNjb3BlKCk7XG4gIGZpbmFsU2NvcGUudXBkYXRlKGNhcHR1cmVDb250ZXh0KTtcbiAgcmV0dXJuIGZpbmFsU2NvcGU7XG59XG5cbi8qKlxuICogUGFyc2UgZWl0aGVyIGFuIGBFdmVudEhpbnRgIGRpcmVjdGx5LCBvciBjb252ZXJ0IGEgYENhcHR1cmVDb250ZXh0YCB0byBhbiBgRXZlbnRIaW50YC5cbiAqIFRoaXMgaXMgdXNlZCB0byBhbGxvdyB0byB1cGRhdGUgbWV0aG9kIHNpZ25hdHVyZXMgdGhhdCB1c2VkIHRvIGFjY2VwdCBhIGBDYXB0dXJlQ29udGV4dGAgYnV0IHNob3VsZCBub3cgYWNjZXB0IGFuIGBFdmVudEhpbnRgLlxuICovXG5mdW5jdGlvbiBwYXJzZUV2ZW50SGludE9yQ2FwdHVyZUNvbnRleHQoXG4gIGhpbnQsXG4pIHtcbiAgaWYgKCFoaW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIElmIHlvdSBwYXNzIGEgU2NvcGUgb3IgYCgpID0+IFNjb3BlYCBhcyBDYXB0dXJlQ29udGV4dCwgd2UganVzdCByZXR1cm4gdGhpcyBhcyBjYXB0dXJlQ29udGV4dFxuICBpZiAoaGludElzU2NvcGVPckZ1bmN0aW9uKGhpbnQpKSB7XG4gICAgcmV0dXJuIHsgY2FwdHVyZUNvbnRleHQ6IGhpbnQgfTtcbiAgfVxuXG4gIGlmIChoaW50SXNTY29wZUNvbnRleHQoaGludCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2FwdHVyZUNvbnRleHQ6IGhpbnQsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBoaW50O1xufVxuXG5mdW5jdGlvbiBoaW50SXNTY29wZU9yRnVuY3Rpb24oaGludCkge1xuICByZXR1cm4gaGludCBpbnN0YW5jZW9mIFNjb3BlIHx8IHR5cGVvZiBoaW50ID09PSAnZnVuY3Rpb24nO1xufVxuXG5jb25zdCBjYXB0dXJlQ29udGV4dEtleXMgPSBbXG4gICd1c2VyJyxcbiAgJ2xldmVsJyxcbiAgJ2V4dHJhJyxcbiAgJ2NvbnRleHRzJyxcbiAgJ3RhZ3MnLFxuICAnZmluZ2VycHJpbnQnLFxuICAncHJvcGFnYXRpb25Db250ZXh0Jyxcbl0gO1xuXG5mdW5jdGlvbiBoaW50SXNTY29wZUNvbnRleHQoaGludCkge1xuICByZXR1cm4gT2JqZWN0LmtleXMoaGludCkuc29tZShrZXkgPT4gY2FwdHVyZUNvbnRleHRLZXlzLmluY2x1ZGVzKGtleSApKTtcbn1cblxuZXhwb3J0IHsgYXBwbHlDbGllbnRPcHRpb25zLCBhcHBseURlYnVnSWRzLCBhcHBseURlYnVnTWV0YSwgcGFyc2VFdmVudEhpbnRPckNhcHR1cmVDb250ZXh0LCBwcmVwYXJlRXZlbnQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZXBhcmVFdmVudC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/prepareEvent.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/promisebuffer.js":
/*!***********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/promisebuffer.js ***!
  \***********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   SENTRY_BUFFER_FULL_ERROR: () => (/* binding */ SENTRY_BUFFER_FULL_ERROR),\n/* harmony export */   makePromiseBuffer: () => (/* binding */ makePromiseBuffer)\n/* harmony export */ });\n/* harmony import */ var _syncpromise_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./syncpromise.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/syncpromise.js\");\n\n\nconst SENTRY_BUFFER_FULL_ERROR = Symbol.for('SentryBufferFullError');\n\n/**\n * Creates an new PromiseBuffer object with the specified limit\n * @param limit max number of promises that can be stored in the buffer\n */\nfunction makePromiseBuffer(limit) {\n  const buffer = [];\n\n  function isReady() {\n    return limit === undefined || buffer.length < limit;\n  }\n\n  /**\n   * Remove a promise from the queue.\n   *\n   * @param task Can be any PromiseLike<T>\n   * @returns Removed promise.\n   */\n  function remove(task) {\n    return buffer.splice(buffer.indexOf(task), 1)[0] || Promise.resolve(undefined);\n  }\n\n  /**\n   * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n   *\n   * @param taskProducer A function producing any PromiseLike<T>; In previous versions this used to be `task:\n   *        PromiseLike<T>`, but under that model, Promises were instantly created on the call-site and their executor\n   *        functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n   *        requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n   *        limit check.\n   * @returns The original promise.\n   */\n  function add(taskProducer) {\n    if (!isReady()) {\n      return (0,_syncpromise_js__WEBPACK_IMPORTED_MODULE_0__.rejectedSyncPromise)(SENTRY_BUFFER_FULL_ERROR);\n    }\n\n    // start the task and add its promise to the queue\n    const task = taskProducer();\n    if (buffer.indexOf(task) === -1) {\n      buffer.push(task);\n    }\n    void task\n      .then(() => remove(task))\n      // Use `then(null, rejectionHandler)` rather than `catch(rejectionHandler)` so that we can use `PromiseLike`\n      // rather than `Promise`. `PromiseLike` doesn't have a `.catch` method, making its polyfill smaller. (ES5 didn't\n      // have promises, so TS has to polyfill when down-compiling.)\n      .then(null, () =>\n        remove(task).then(null, () => {\n          // We have to add another catch here because `remove()` starts a new promise chain.\n        }),\n      );\n    return task;\n  }\n\n  /**\n   * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n   *\n   * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n   * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n   * `true`.\n   * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n   * `false` otherwise\n   */\n  function drain(timeout) {\n    return new _syncpromise_js__WEBPACK_IMPORTED_MODULE_0__.SyncPromise((resolve, reject) => {\n      let counter = buffer.length;\n\n      if (!counter) {\n        return resolve(true);\n      }\n\n      // wait for `timeout` ms and then resolve to `false` (if not cancelled first)\n      const capturedSetTimeout = setTimeout(() => {\n        if (timeout && timeout > 0) {\n          resolve(false);\n        }\n      }, timeout);\n\n      // if all promises resolve in time, cancel the timer and resolve to `true`\n      buffer.forEach(item => {\n        void (0,_syncpromise_js__WEBPACK_IMPORTED_MODULE_0__.resolvedSyncPromise)(item).then(() => {\n          if (!--counter) {\n            clearTimeout(capturedSetTimeout);\n            resolve(true);\n          }\n        }, reject);\n      });\n    });\n  }\n\n  return {\n    $: buffer,\n    add,\n    drain,\n  };\n}\n\n\n//# sourceMappingURL=promisebuffer.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3Byb21pc2VidWZmZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXlGOztBQUV6Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrRUFBa0U7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsb0VBQW1CO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsd0RBQVc7QUFDMUI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSxhQUFhLG9FQUFtQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFdUQ7QUFDdkQiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS91dGlscy9wcm9taXNlYnVmZmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN5bmNQcm9taXNlLCByZXNvbHZlZFN5bmNQcm9taXNlLCByZWplY3RlZFN5bmNQcm9taXNlIH0gZnJvbSAnLi9zeW5jcHJvbWlzZS5qcyc7XG5cbmNvbnN0IFNFTlRSWV9CVUZGRVJfRlVMTF9FUlJPUiA9IFN5bWJvbC5mb3IoJ1NlbnRyeUJ1ZmZlckZ1bGxFcnJvcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbmV3IFByb21pc2VCdWZmZXIgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBsaW1pdFxuICogQHBhcmFtIGxpbWl0IG1heCBudW1iZXIgb2YgcHJvbWlzZXMgdGhhdCBjYW4gYmUgc3RvcmVkIGluIHRoZSBidWZmZXJcbiAqL1xuZnVuY3Rpb24gbWFrZVByb21pc2VCdWZmZXIobGltaXQpIHtcbiAgY29uc3QgYnVmZmVyID0gW107XG5cbiAgZnVuY3Rpb24gaXNSZWFkeSgpIHtcbiAgICByZXR1cm4gbGltaXQgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIubGVuZ3RoIDwgbGltaXQ7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgcHJvbWlzZSBmcm9tIHRoZSBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIHRhc2sgQ2FuIGJlIGFueSBQcm9taXNlTGlrZTxUPlxuICAgKiBAcmV0dXJucyBSZW1vdmVkIHByb21pc2UuXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmUodGFzaykge1xuICAgIHJldHVybiBidWZmZXIuc3BsaWNlKGJ1ZmZlci5pbmRleE9mKHRhc2spLCAxKVswXSB8fCBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBwcm9taXNlIChyZXByZXNlbnRpbmcgYW4gaW4tZmxpZ2h0IGFjdGlvbikgdG8gdGhlIHF1ZXVlLCBhbmQgc2V0IGl0IHRvIHJlbW92ZSBpdHNlbGYgb24gZnVsZmlsbG1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB0YXNrUHJvZHVjZXIgQSBmdW5jdGlvbiBwcm9kdWNpbmcgYW55IFByb21pc2VMaWtlPFQ+OyBJbiBwcmV2aW91cyB2ZXJzaW9ucyB0aGlzIHVzZWQgdG8gYmUgYHRhc2s6XG4gICAqICAgICAgICBQcm9taXNlTGlrZTxUPmAsIGJ1dCB1bmRlciB0aGF0IG1vZGVsLCBQcm9taXNlcyB3ZXJlIGluc3RhbnRseSBjcmVhdGVkIG9uIHRoZSBjYWxsLXNpdGUgYW5kIHRoZWlyIGV4ZWN1dG9yXG4gICAqICAgICAgICBmdW5jdGlvbnMgdGhlcmVmb3JlIHJhbiBpbW1lZGlhdGVseS4gVGh1cywgZXZlbiBpZiB0aGUgYnVmZmVyIHdhcyBmdWxsLCB0aGUgYWN0aW9uIHN0aWxsIGhhcHBlbmVkLiBCeVxuICAgKiAgICAgICAgcmVxdWlyaW5nIHRoZSBwcm9taXNlIHRvIGJlIHdyYXBwZWQgaW4gYSBmdW5jdGlvbiwgd2UgY2FuIGRlZmVyIHByb21pc2UgY3JlYXRpb24gdW50aWwgYWZ0ZXIgdGhlIGJ1ZmZlclxuICAgKiAgICAgICAgbGltaXQgY2hlY2suXG4gICAqIEByZXR1cm5zIFRoZSBvcmlnaW5hbCBwcm9taXNlLlxuICAgKi9cbiAgZnVuY3Rpb24gYWRkKHRhc2tQcm9kdWNlcikge1xuICAgIGlmICghaXNSZWFkeSgpKSB7XG4gICAgICByZXR1cm4gcmVqZWN0ZWRTeW5jUHJvbWlzZShTRU5UUllfQlVGRkVSX0ZVTExfRVJST1IpO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0IHRoZSB0YXNrIGFuZCBhZGQgaXRzIHByb21pc2UgdG8gdGhlIHF1ZXVlXG4gICAgY29uc3QgdGFzayA9IHRhc2tQcm9kdWNlcigpO1xuICAgIGlmIChidWZmZXIuaW5kZXhPZih0YXNrKSA9PT0gLTEpIHtcbiAgICAgIGJ1ZmZlci5wdXNoKHRhc2spO1xuICAgIH1cbiAgICB2b2lkIHRhc2tcbiAgICAgIC50aGVuKCgpID0+IHJlbW92ZSh0YXNrKSlcbiAgICAgIC8vIFVzZSBgdGhlbihudWxsLCByZWplY3Rpb25IYW5kbGVyKWAgcmF0aGVyIHRoYW4gYGNhdGNoKHJlamVjdGlvbkhhbmRsZXIpYCBzbyB0aGF0IHdlIGNhbiB1c2UgYFByb21pc2VMaWtlYFxuICAgICAgLy8gcmF0aGVyIHRoYW4gYFByb21pc2VgLiBgUHJvbWlzZUxpa2VgIGRvZXNuJ3QgaGF2ZSBhIGAuY2F0Y2hgIG1ldGhvZCwgbWFraW5nIGl0cyBwb2x5ZmlsbCBzbWFsbGVyLiAoRVM1IGRpZG4ndFxuICAgICAgLy8gaGF2ZSBwcm9taXNlcywgc28gVFMgaGFzIHRvIHBvbHlmaWxsIHdoZW4gZG93bi1jb21waWxpbmcuKVxuICAgICAgLnRoZW4obnVsbCwgKCkgPT5cbiAgICAgICAgcmVtb3ZlKHRhc2spLnRoZW4obnVsbCwgKCkgPT4ge1xuICAgICAgICAgIC8vIFdlIGhhdmUgdG8gYWRkIGFub3RoZXIgY2F0Y2ggaGVyZSBiZWNhdXNlIGByZW1vdmUoKWAgc3RhcnRzIGEgbmV3IHByb21pc2UgY2hhaW4uXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICByZXR1cm4gdGFzaztcbiAgfVxuXG4gIC8qKlxuICAgKiBXYWl0IGZvciBhbGwgcHJvbWlzZXMgaW4gdGhlIHF1ZXVlIHRvIHJlc29sdmUgb3IgZm9yIHRpbWVvdXQgdG8gZXhwaXJlLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuXG4gICAqXG4gICAqIEBwYXJhbSB0aW1lb3V0IFRoZSB0aW1lLCBpbiBtcywgYWZ0ZXIgd2hpY2ggdG8gcmVzb2x2ZSB0byBgZmFsc2VgIGlmIHRoZSBxdWV1ZSBpcyBzdGlsbCBub24tZW1wdHkuIFBhc3NpbmcgYDBgIChvclxuICAgKiBub3QgcGFzc2luZyBhbnl0aGluZykgd2lsbCBtYWtlIHRoZSBwcm9taXNlIHdhaXQgYXMgbG9uZyBhcyBpdCB0YWtlcyBmb3IgdGhlIHF1ZXVlIHRvIGRyYWluIGJlZm9yZSByZXNvbHZpbmcgdG9cbiAgICogYHRydWVgLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHRvIGB0cnVlYCBpZiB0aGUgcXVldWUgaXMgYWxyZWFkeSBlbXB0eSBvciBkcmFpbnMgYmVmb3JlIHRoZSB0aW1lb3V0LCBhbmRcbiAgICogYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIGZ1bmN0aW9uIGRyYWluKHRpbWVvdXQpIHtcbiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBjb3VudGVyID0gYnVmZmVyLmxlbmd0aDtcblxuICAgICAgaWYgKCFjb3VudGVyKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHRydWUpO1xuICAgICAgfVxuXG4gICAgICAvLyB3YWl0IGZvciBgdGltZW91dGAgbXMgYW5kIHRoZW4gcmVzb2x2ZSB0byBgZmFsc2VgIChpZiBub3QgY2FuY2VsbGVkIGZpcnN0KVxuICAgICAgY29uc3QgY2FwdHVyZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aW1lb3V0ICYmIHRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHRpbWVvdXQpO1xuXG4gICAgICAvLyBpZiBhbGwgcHJvbWlzZXMgcmVzb2x2ZSBpbiB0aW1lLCBjYW5jZWwgdGhlIHRpbWVyIGFuZCByZXNvbHZlIHRvIGB0cnVlYFxuICAgICAgYnVmZmVyLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIHZvaWQgcmVzb2x2ZWRTeW5jUHJvbWlzZShpdGVtKS50aGVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoIS0tY291bnRlcikge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGNhcHR1cmVkU2V0VGltZW91dCk7XG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAkOiBidWZmZXIsXG4gICAgYWRkLFxuICAgIGRyYWluLFxuICB9O1xufVxuXG5leHBvcnQgeyBTRU5UUllfQlVGRkVSX0ZVTExfRVJST1IsIG1ha2VQcm9taXNlQnVmZmVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcm9taXNlYnVmZmVyLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/promisebuffer.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/propagationContext.js":
/*!****************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/propagationContext.js ***!
  \****************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   generateSpanId: () => (/* binding */ generateSpanId),\n/* harmony export */   generateTraceId: () => (/* binding */ generateTraceId)\n/* harmony export */ });\n/* harmony import */ var _misc_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./misc.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/misc.js\");\n\n\n/**\n * Generate a random, valid trace ID.\n */\nfunction generateTraceId() {\n  return (0,_misc_js__WEBPACK_IMPORTED_MODULE_0__.uuid4)();\n}\n\n/**\n * Generate a random, valid span ID.\n */\nfunction generateSpanId() {\n  return (0,_misc_js__WEBPACK_IMPORTED_MODULE_0__.uuid4)().substring(16);\n}\n\n\n//# sourceMappingURL=propagationContext.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3Byb3BhZ2F0aW9uQ29udGV4dC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBa0M7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUywrQ0FBSztBQUNkOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUywrQ0FBSztBQUNkOztBQUUyQztBQUMzQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3Byb3BhZ2F0aW9uQ29udGV4dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dWlkNCB9IGZyb20gJy4vbWlzYy5qcyc7XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20sIHZhbGlkIHRyYWNlIElELlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZVRyYWNlSWQoKSB7XG4gIHJldHVybiB1dWlkNCgpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tLCB2YWxpZCBzcGFuIElELlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZVNwYW5JZCgpIHtcbiAgcmV0dXJuIHV1aWQ0KCkuc3Vic3RyaW5nKDE2KTtcbn1cblxuZXhwb3J0IHsgZ2VuZXJhdGVTcGFuSWQsIGdlbmVyYXRlVHJhY2VJZCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvcGFnYXRpb25Db250ZXh0LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/propagationContext.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/ratelimit.js":
/*!*******************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/ratelimit.js ***!
  \*******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   DEFAULT_RETRY_AFTER: () => (/* binding */ DEFAULT_RETRY_AFTER),\n/* harmony export */   disabledUntil: () => (/* binding */ disabledUntil),\n/* harmony export */   isRateLimited: () => (/* binding */ isRateLimited),\n/* harmony export */   parseRetryAfterHeader: () => (/* binding */ parseRetryAfterHeader),\n/* harmony export */   updateRateLimits: () => (/* binding */ updateRateLimits)\n/* harmony export */ });\n// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\n\nconst DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param header string representation of 'Retry-After' header\n * @param now current unix timestamp\n *\n */\nfunction parseRetryAfterHeader(header, now = Date.now()) {\n  const headerDelay = parseInt(`${header}`, 10);\n  if (!isNaN(headerDelay)) {\n    return headerDelay * 1000;\n  }\n\n  const headerDate = Date.parse(`${header}`);\n  if (!isNaN(headerDate)) {\n    return headerDate - now;\n  }\n\n  return DEFAULT_RETRY_AFTER;\n}\n\n/**\n * Gets the time that the given category is disabled until for rate limiting.\n * In case no category-specific limit is set but a general rate limit across all categories is active,\n * that time is returned.\n *\n * @return the time in ms that the category is disabled until or 0 if there's no active rate limit.\n */\nfunction disabledUntil(limits, dataCategory) {\n  return limits[dataCategory] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nfunction isRateLimited(limits, dataCategory, now = Date.now()) {\n  return disabledUntil(limits, dataCategory) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n *\n * @return the updated RateLimits object.\n */\nfunction updateRateLimits(\n  limits,\n  { statusCode, headers },\n  now = Date.now(),\n) {\n  const updatedRateLimits = {\n    ...limits,\n  };\n\n  // \"The name is case-insensitive.\"\n  // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n  const rateLimitHeader = headers?.['x-sentry-rate-limits'];\n  const retryAfterHeader = headers?.['retry-after'];\n\n  if (rateLimitHeader) {\n    /**\n     * rate limit headers are of the form\n     *     <header>,<header>,..\n     * where each <header> is of the form\n     *     <retry_after>: <categories>: <scope>: <reason_code>: <namespaces>\n     * where\n     *     <retry_after> is a delay in seconds\n     *     <categories> is the event type(s) (error, transaction, etc) being rate limited and is of the form\n     *         <category>;<category>;...\n     *     <scope> is what's being limited (org, project, or key) - ignored by SDK\n     *     <reason_code> is an arbitrary string like \"org_quota\" - ignored by SDK\n     *     <namespaces> Semicolon-separated list of metric namespace identifiers. Defines which namespace(s) will be affected.\n     *         Only present if rate limit applies to the metric_bucket data category.\n     */\n    for (const limit of rateLimitHeader.trim().split(',')) {\n      const [retryAfter, categories, , , namespaces] = limit.split(':', 5) ;\n      const headerDelay = parseInt(retryAfter, 10);\n      const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n      if (!categories) {\n        updatedRateLimits.all = now + delay;\n      } else {\n        for (const category of categories.split(';')) {\n          if (category === 'metric_bucket') {\n            // namespaces will be present when category === 'metric_bucket'\n            if (!namespaces || namespaces.split(';').includes('custom')) {\n              updatedRateLimits[category] = now + delay;\n            }\n          } else {\n            updatedRateLimits[category] = now + delay;\n          }\n        }\n      }\n    }\n  } else if (retryAfterHeader) {\n    updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n  } else if (statusCode === 429) {\n    updatedRateLimits.all = now + 60 * 1000;\n  }\n\n  return updatedRateLimits;\n}\n\n\n//# sourceMappingURL=ratelimit.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3JhdGVsaW1pdC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBOztBQUVBLHVDQUF1Qzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsT0FBTztBQUN6QztBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DLE9BQU87QUFDMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxxQkFBcUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsV0FBVztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUVBQXFFO0FBQ3JFO0FBQ0E7QUFDQSxRQUFRO0FBQ1Isa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFc0c7QUFDdEciLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS91dGlscy9yYXRlbGltaXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW50ZW50aW9uYWxseSBrZWVwaW5nIHRoZSBrZXkgYnJvYWQsIGFzIHdlIGRvbid0IGtub3cgZm9yIHN1cmUgd2hhdCByYXRlIGxpbWl0IGhlYWRlcnMgZ2V0IHJldHVybmVkIGZyb20gYmFja2VuZFxuXG5jb25zdCBERUZBVUxUX1JFVFJZX0FGVEVSID0gNjAgKiAxMDAwOyAvLyA2MCBzZWNvbmRzXG5cbi8qKlxuICogRXh0cmFjdHMgUmV0cnktQWZ0ZXIgdmFsdWUgZnJvbSB0aGUgcmVxdWVzdCBoZWFkZXIgb3IgcmV0dXJucyBkZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0gaGVhZGVyIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiAnUmV0cnktQWZ0ZXInIGhlYWRlclxuICogQHBhcmFtIG5vdyBjdXJyZW50IHVuaXggdGltZXN0YW1wXG4gKlxuICovXG5mdW5jdGlvbiBwYXJzZVJldHJ5QWZ0ZXJIZWFkZXIoaGVhZGVyLCBub3cgPSBEYXRlLm5vdygpKSB7XG4gIGNvbnN0IGhlYWRlckRlbGF5ID0gcGFyc2VJbnQoYCR7aGVhZGVyfWAsIDEwKTtcbiAgaWYgKCFpc05hTihoZWFkZXJEZWxheSkpIHtcbiAgICByZXR1cm4gaGVhZGVyRGVsYXkgKiAxMDAwO1xuICB9XG5cbiAgY29uc3QgaGVhZGVyRGF0ZSA9IERhdGUucGFyc2UoYCR7aGVhZGVyfWApO1xuICBpZiAoIWlzTmFOKGhlYWRlckRhdGUpKSB7XG4gICAgcmV0dXJuIGhlYWRlckRhdGUgLSBub3c7XG4gIH1cblxuICByZXR1cm4gREVGQVVMVF9SRVRSWV9BRlRFUjtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSB0aW1lIHRoYXQgdGhlIGdpdmVuIGNhdGVnb3J5IGlzIGRpc2FibGVkIHVudGlsIGZvciByYXRlIGxpbWl0aW5nLlxuICogSW4gY2FzZSBubyBjYXRlZ29yeS1zcGVjaWZpYyBsaW1pdCBpcyBzZXQgYnV0IGEgZ2VuZXJhbCByYXRlIGxpbWl0IGFjcm9zcyBhbGwgY2F0ZWdvcmllcyBpcyBhY3RpdmUsXG4gKiB0aGF0IHRpbWUgaXMgcmV0dXJuZWQuXG4gKlxuICogQHJldHVybiB0aGUgdGltZSBpbiBtcyB0aGF0IHRoZSBjYXRlZ29yeSBpcyBkaXNhYmxlZCB1bnRpbCBvciAwIGlmIHRoZXJlJ3Mgbm8gYWN0aXZlIHJhdGUgbGltaXQuXG4gKi9cbmZ1bmN0aW9uIGRpc2FibGVkVW50aWwobGltaXRzLCBkYXRhQ2F0ZWdvcnkpIHtcbiAgcmV0dXJuIGxpbWl0c1tkYXRhQ2F0ZWdvcnldIHx8IGxpbWl0cy5hbGwgfHwgMDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBjYXRlZ29yeSBpcyByYXRlIGxpbWl0ZWRcbiAqL1xuZnVuY3Rpb24gaXNSYXRlTGltaXRlZChsaW1pdHMsIGRhdGFDYXRlZ29yeSwgbm93ID0gRGF0ZS5ub3coKSkge1xuICByZXR1cm4gZGlzYWJsZWRVbnRpbChsaW1pdHMsIGRhdGFDYXRlZ29yeSkgPiBub3c7XG59XG5cbi8qKlxuICogVXBkYXRlIHJhdGVsaW1pdHMgZnJvbSBpbmNvbWluZyBoZWFkZXJzLlxuICpcbiAqIEByZXR1cm4gdGhlIHVwZGF0ZWQgUmF0ZUxpbWl0cyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVJhdGVMaW1pdHMoXG4gIGxpbWl0cyxcbiAgeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0sXG4gIG5vdyA9IERhdGUubm93KCksXG4pIHtcbiAgY29uc3QgdXBkYXRlZFJhdGVMaW1pdHMgPSB7XG4gICAgLi4ubGltaXRzLFxuICB9O1xuXG4gIC8vIFwiVGhlIG5hbWUgaXMgY2FzZS1pbnNlbnNpdGl2ZS5cIlxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSGVhZGVycy9nZXRcbiAgY29uc3QgcmF0ZUxpbWl0SGVhZGVyID0gaGVhZGVycz8uWyd4LXNlbnRyeS1yYXRlLWxpbWl0cyddO1xuICBjb25zdCByZXRyeUFmdGVySGVhZGVyID0gaGVhZGVycz8uWydyZXRyeS1hZnRlciddO1xuXG4gIGlmIChyYXRlTGltaXRIZWFkZXIpIHtcbiAgICAvKipcbiAgICAgKiByYXRlIGxpbWl0IGhlYWRlcnMgYXJlIG9mIHRoZSBmb3JtXG4gICAgICogICAgIDxoZWFkZXI+LDxoZWFkZXI+LC4uXG4gICAgICogd2hlcmUgZWFjaCA8aGVhZGVyPiBpcyBvZiB0aGUgZm9ybVxuICAgICAqICAgICA8cmV0cnlfYWZ0ZXI+OiA8Y2F0ZWdvcmllcz46IDxzY29wZT46IDxyZWFzb25fY29kZT46IDxuYW1lc3BhY2VzPlxuICAgICAqIHdoZXJlXG4gICAgICogICAgIDxyZXRyeV9hZnRlcj4gaXMgYSBkZWxheSBpbiBzZWNvbmRzXG4gICAgICogICAgIDxjYXRlZ29yaWVzPiBpcyB0aGUgZXZlbnQgdHlwZShzKSAoZXJyb3IsIHRyYW5zYWN0aW9uLCBldGMpIGJlaW5nIHJhdGUgbGltaXRlZCBhbmQgaXMgb2YgdGhlIGZvcm1cbiAgICAgKiAgICAgICAgIDxjYXRlZ29yeT47PGNhdGVnb3J5PjsuLi5cbiAgICAgKiAgICAgPHNjb3BlPiBpcyB3aGF0J3MgYmVpbmcgbGltaXRlZCAob3JnLCBwcm9qZWN0LCBvciBrZXkpIC0gaWdub3JlZCBieSBTREtcbiAgICAgKiAgICAgPHJlYXNvbl9jb2RlPiBpcyBhbiBhcmJpdHJhcnkgc3RyaW5nIGxpa2UgXCJvcmdfcXVvdGFcIiAtIGlnbm9yZWQgYnkgU0RLXG4gICAgICogICAgIDxuYW1lc3BhY2VzPiBTZW1pY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgbWV0cmljIG5hbWVzcGFjZSBpZGVudGlmaWVycy4gRGVmaW5lcyB3aGljaCBuYW1lc3BhY2Uocykgd2lsbCBiZSBhZmZlY3RlZC5cbiAgICAgKiAgICAgICAgIE9ubHkgcHJlc2VudCBpZiByYXRlIGxpbWl0IGFwcGxpZXMgdG8gdGhlIG1ldHJpY19idWNrZXQgZGF0YSBjYXRlZ29yeS5cbiAgICAgKi9cbiAgICBmb3IgKGNvbnN0IGxpbWl0IG9mIHJhdGVMaW1pdEhlYWRlci50cmltKCkuc3BsaXQoJywnKSkge1xuICAgICAgY29uc3QgW3JldHJ5QWZ0ZXIsIGNhdGVnb3JpZXMsICwgLCBuYW1lc3BhY2VzXSA9IGxpbWl0LnNwbGl0KCc6JywgNSkgO1xuICAgICAgY29uc3QgaGVhZGVyRGVsYXkgPSBwYXJzZUludChyZXRyeUFmdGVyLCAxMCk7XG4gICAgICBjb25zdCBkZWxheSA9ICghaXNOYU4oaGVhZGVyRGVsYXkpID8gaGVhZGVyRGVsYXkgOiA2MCkgKiAxMDAwOyAvLyA2MHNlYyBkZWZhdWx0XG4gICAgICBpZiAoIWNhdGVnb3JpZXMpIHtcbiAgICAgICAgdXBkYXRlZFJhdGVMaW1pdHMuYWxsID0gbm93ICsgZGVsYXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMuc3BsaXQoJzsnKSkge1xuICAgICAgICAgIGlmIChjYXRlZ29yeSA9PT0gJ21ldHJpY19idWNrZXQnKSB7XG4gICAgICAgICAgICAvLyBuYW1lc3BhY2VzIHdpbGwgYmUgcHJlc2VudCB3aGVuIGNhdGVnb3J5ID09PSAnbWV0cmljX2J1Y2tldCdcbiAgICAgICAgICAgIGlmICghbmFtZXNwYWNlcyB8fCBuYW1lc3BhY2VzLnNwbGl0KCc7JykuaW5jbHVkZXMoJ2N1c3RvbScpKSB7XG4gICAgICAgICAgICAgIHVwZGF0ZWRSYXRlTGltaXRzW2NhdGVnb3J5XSA9IG5vdyArIGRlbGF5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cGRhdGVkUmF0ZUxpbWl0c1tjYXRlZ29yeV0gPSBub3cgKyBkZWxheTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAocmV0cnlBZnRlckhlYWRlcikge1xuICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIHBhcnNlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyLCBub3cpO1xuICB9IGVsc2UgaWYgKHN0YXR1c0NvZGUgPT09IDQyOSkge1xuICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIDYwICogMTAwMDtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkUmF0ZUxpbWl0cztcbn1cblxuZXhwb3J0IHsgREVGQVVMVF9SRVRSWV9BRlRFUiwgZGlzYWJsZWRVbnRpbCwgaXNSYXRlTGltaXRlZCwgcGFyc2VSZXRyeUFmdGVySGVhZGVyLCB1cGRhdGVSYXRlTGltaXRzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yYXRlbGltaXQuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/ratelimit.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/request.js":
/*!*****************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/request.js ***!
  \*****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   extractQueryParamsFromUrl: () => (/* binding */ extractQueryParamsFromUrl),\n/* harmony export */   headersToDict: () => (/* binding */ headersToDict),\n/* harmony export */   httpRequestToRequestData: () => (/* binding */ httpRequestToRequestData),\n/* harmony export */   winterCGHeadersToDict: () => (/* binding */ winterCGHeadersToDict),\n/* harmony export */   winterCGRequestToRequestData: () => (/* binding */ winterCGRequestToRequestData)\n/* harmony export */ });\n/**\n * Transforms a `Headers` object that implements the `Web Fetch API` (https://developer.mozilla.org/en-US/docs/Web/API/Headers) into a simple key-value dict.\n * The header keys will be lower case: e.g. A \"Content-Type\" header will be stored as \"content-type\".\n */\nfunction winterCGHeadersToDict(winterCGHeaders) {\n  const headers = {};\n  try {\n    winterCGHeaders.forEach((value, key) => {\n      if (typeof value === 'string') {\n        // We check that value is a string even though it might be redundant to make sure prototype pollution is not possible.\n        headers[key] = value;\n      }\n    });\n  } catch {\n    // just return the empty headers\n  }\n\n  return headers;\n}\n\n/**\n * Convert common request headers to a simple dictionary.\n */\nfunction headersToDict(reqHeaders) {\n  const headers = Object.create(null);\n\n  try {\n    Object.entries(reqHeaders).forEach(([key, value]) => {\n      if (typeof value === 'string') {\n        headers[key] = value;\n      }\n    });\n  } catch {\n    // just return the empty headers\n  }\n\n  return headers;\n}\n\n/**\n * Converts a `Request` object that implements the `Web Fetch API` (https://developer.mozilla.org/en-US/docs/Web/API/Headers) into the format that the `RequestData` integration understands.\n */\nfunction winterCGRequestToRequestData(req) {\n  const headers = winterCGHeadersToDict(req.headers);\n\n  return {\n    method: req.method,\n    url: req.url,\n    query_string: extractQueryParamsFromUrl(req.url),\n    headers,\n    // TODO: Can we extract body data from the request?\n  };\n}\n\n/**\n * Convert a HTTP request object to RequestEventData to be passed as normalizedRequest.\n * Instead of allowing `PolymorphicRequest` to be passed,\n * we want to be more specific and generally require a http.IncomingMessage-like object.\n */\nfunction httpRequestToRequestData(request\n\n) {\n  const headers = request.headers || {};\n\n  // Check for x-forwarded-host first, then fall back to host header\n  const forwardedHost = typeof headers['x-forwarded-host'] === 'string' ? headers['x-forwarded-host'] : undefined;\n  const host = forwardedHost || (typeof headers.host === 'string' ? headers.host : undefined);\n\n  // Check for x-forwarded-proto first, then fall back to existing protocol detection\n  const forwardedProto = typeof headers['x-forwarded-proto'] === 'string' ? headers['x-forwarded-proto'] : undefined;\n  const protocol = forwardedProto || request.protocol || (request.socket?.encrypted ? 'https' : 'http');\n\n  const url = request.url || '';\n\n  const absoluteUrl = getAbsoluteUrl({\n    url,\n    host,\n    protocol,\n  });\n\n  // This is non-standard, but may be sometimes set\n  // It may be overwritten later by our own body handling\n  const data = (request ).body || undefined;\n\n  // This is non-standard, but may be set on e.g. Next.js or Express requests\n  const cookies = (request ).cookies;\n\n  return {\n    url: absoluteUrl,\n    method: request.method,\n    query_string: extractQueryParamsFromUrl(url),\n    headers: headersToDict(headers),\n    cookies,\n    data,\n  };\n}\n\nfunction getAbsoluteUrl({\n  url,\n  protocol,\n  host,\n}\n\n) {\n  if (url?.startsWith('http')) {\n    return url;\n  }\n\n  if (url && host) {\n    return `${protocol}://${host}${url}`;\n  }\n\n  return undefined;\n}\n\n/** Extract the query params from an URL. */\nfunction extractQueryParamsFromUrl(url) {\n  // url is path and query string\n  if (!url) {\n    return;\n  }\n\n  try {\n    // The `URL` constructor can't handle internal URLs of the form `/some/path/here`, so stick a dummy protocol and\n    // hostname as the base. Since the point here is just to grab the query string, it doesn't matter what we use.\n    const queryParams = new URL(url, 'http://s.io').search.slice(1);\n    return queryParams.length ? queryParams : undefined;\n  } catch {\n    return undefined;\n  }\n}\n\n\n//# sourceMappingURL=request.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3JlcXVlc3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLFNBQVMsS0FBSyxLQUFLLEVBQUUsSUFBSTtBQUN2Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFbUk7QUFDbkkiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS91dGlscy9yZXF1ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVHJhbnNmb3JtcyBhIGBIZWFkZXJzYCBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBgV2ViIEZldGNoIEFQSWAgKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IZWFkZXJzKSBpbnRvIGEgc2ltcGxlIGtleS12YWx1ZSBkaWN0LlxuICogVGhlIGhlYWRlciBrZXlzIHdpbGwgYmUgbG93ZXIgY2FzZTogZS5nLiBBIFwiQ29udGVudC1UeXBlXCIgaGVhZGVyIHdpbGwgYmUgc3RvcmVkIGFzIFwiY29udGVudC10eXBlXCIuXG4gKi9cbmZ1bmN0aW9uIHdpbnRlckNHSGVhZGVyc1RvRGljdCh3aW50ZXJDR0hlYWRlcnMpIHtcbiAgY29uc3QgaGVhZGVycyA9IHt9O1xuICB0cnkge1xuICAgIHdpbnRlckNHSGVhZGVycy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBXZSBjaGVjayB0aGF0IHZhbHVlIGlzIGEgc3RyaW5nIGV2ZW4gdGhvdWdoIGl0IG1pZ2h0IGJlIHJlZHVuZGFudCB0byBtYWtlIHN1cmUgcHJvdG90eXBlIHBvbGx1dGlvbiBpcyBub3QgcG9zc2libGUuXG4gICAgICAgIGhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGNhdGNoIHtcbiAgICAvLyBqdXN0IHJldHVybiB0aGUgZW1wdHkgaGVhZGVyc1xuICB9XG5cbiAgcmV0dXJuIGhlYWRlcnM7XG59XG5cbi8qKlxuICogQ29udmVydCBjb21tb24gcmVxdWVzdCBoZWFkZXJzIHRvIGEgc2ltcGxlIGRpY3Rpb25hcnkuXG4gKi9cbmZ1bmN0aW9uIGhlYWRlcnNUb0RpY3QocmVxSGVhZGVycykge1xuICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICB0cnkge1xuICAgIE9iamVjdC5lbnRyaWVzKHJlcUhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIGp1c3QgcmV0dXJuIHRoZSBlbXB0eSBoZWFkZXJzXG4gIH1cblxuICByZXR1cm4gaGVhZGVycztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGBSZXF1ZXN0YCBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBgV2ViIEZldGNoIEFQSWAgKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IZWFkZXJzKSBpbnRvIHRoZSBmb3JtYXQgdGhhdCB0aGUgYFJlcXVlc3REYXRhYCBpbnRlZ3JhdGlvbiB1bmRlcnN0YW5kcy5cbiAqL1xuZnVuY3Rpb24gd2ludGVyQ0dSZXF1ZXN0VG9SZXF1ZXN0RGF0YShyZXEpIHtcbiAgY29uc3QgaGVhZGVycyA9IHdpbnRlckNHSGVhZGVyc1RvRGljdChyZXEuaGVhZGVycyk7XG5cbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6IHJlcS5tZXRob2QsXG4gICAgdXJsOiByZXEudXJsLFxuICAgIHF1ZXJ5X3N0cmluZzogZXh0cmFjdFF1ZXJ5UGFyYW1zRnJvbVVybChyZXEudXJsKSxcbiAgICBoZWFkZXJzLFxuICAgIC8vIFRPRE86IENhbiB3ZSBleHRyYWN0IGJvZHkgZGF0YSBmcm9tIHRoZSByZXF1ZXN0P1xuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBIVFRQIHJlcXVlc3Qgb2JqZWN0IHRvIFJlcXVlc3RFdmVudERhdGEgdG8gYmUgcGFzc2VkIGFzIG5vcm1hbGl6ZWRSZXF1ZXN0LlxuICogSW5zdGVhZCBvZiBhbGxvd2luZyBgUG9seW1vcnBoaWNSZXF1ZXN0YCB0byBiZSBwYXNzZWQsXG4gKiB3ZSB3YW50IHRvIGJlIG1vcmUgc3BlY2lmaWMgYW5kIGdlbmVyYWxseSByZXF1aXJlIGEgaHR0cC5JbmNvbWluZ01lc3NhZ2UtbGlrZSBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGh0dHBSZXF1ZXN0VG9SZXF1ZXN0RGF0YShyZXF1ZXN0XG5cbikge1xuICBjb25zdCBoZWFkZXJzID0gcmVxdWVzdC5oZWFkZXJzIHx8IHt9O1xuXG4gIC8vIENoZWNrIGZvciB4LWZvcndhcmRlZC1ob3N0IGZpcnN0LCB0aGVuIGZhbGwgYmFjayB0byBob3N0IGhlYWRlclxuICBjb25zdCBmb3J3YXJkZWRIb3N0ID0gdHlwZW9mIGhlYWRlcnNbJ3gtZm9yd2FyZGVkLWhvc3QnXSA9PT0gJ3N0cmluZycgPyBoZWFkZXJzWyd4LWZvcndhcmRlZC1ob3N0J10gOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGhvc3QgPSBmb3J3YXJkZWRIb3N0IHx8ICh0eXBlb2YgaGVhZGVycy5ob3N0ID09PSAnc3RyaW5nJyA/IGhlYWRlcnMuaG9zdCA6IHVuZGVmaW5lZCk7XG5cbiAgLy8gQ2hlY2sgZm9yIHgtZm9yd2FyZGVkLXByb3RvIGZpcnN0LCB0aGVuIGZhbGwgYmFjayB0byBleGlzdGluZyBwcm90b2NvbCBkZXRlY3Rpb25cbiAgY29uc3QgZm9yd2FyZGVkUHJvdG8gPSB0eXBlb2YgaGVhZGVyc1sneC1mb3J3YXJkZWQtcHJvdG8nXSA9PT0gJ3N0cmluZycgPyBoZWFkZXJzWyd4LWZvcndhcmRlZC1wcm90byddIDogdW5kZWZpbmVkO1xuICBjb25zdCBwcm90b2NvbCA9IGZvcndhcmRlZFByb3RvIHx8IHJlcXVlc3QucHJvdG9jb2wgfHwgKHJlcXVlc3Quc29ja2V0Py5lbmNyeXB0ZWQgPyAnaHR0cHMnIDogJ2h0dHAnKTtcblxuICBjb25zdCB1cmwgPSByZXF1ZXN0LnVybCB8fCAnJztcblxuICBjb25zdCBhYnNvbHV0ZVVybCA9IGdldEFic29sdXRlVXJsKHtcbiAgICB1cmwsXG4gICAgaG9zdCxcbiAgICBwcm90b2NvbCxcbiAgfSk7XG5cbiAgLy8gVGhpcyBpcyBub24tc3RhbmRhcmQsIGJ1dCBtYXkgYmUgc29tZXRpbWVzIHNldFxuICAvLyBJdCBtYXkgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIgYnkgb3VyIG93biBib2R5IGhhbmRsaW5nXG4gIGNvbnN0IGRhdGEgPSAocmVxdWVzdCApLmJvZHkgfHwgdW5kZWZpbmVkO1xuXG4gIC8vIFRoaXMgaXMgbm9uLXN0YW5kYXJkLCBidXQgbWF5IGJlIHNldCBvbiBlLmcuIE5leHQuanMgb3IgRXhwcmVzcyByZXF1ZXN0c1xuICBjb25zdCBjb29raWVzID0gKHJlcXVlc3QgKS5jb29raWVzO1xuXG4gIHJldHVybiB7XG4gICAgdXJsOiBhYnNvbHV0ZVVybCxcbiAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgIHF1ZXJ5X3N0cmluZzogZXh0cmFjdFF1ZXJ5UGFyYW1zRnJvbVVybCh1cmwpLFxuICAgIGhlYWRlcnM6IGhlYWRlcnNUb0RpY3QoaGVhZGVycyksXG4gICAgY29va2llcyxcbiAgICBkYXRhLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRBYnNvbHV0ZVVybCh7XG4gIHVybCxcbiAgcHJvdG9jb2wsXG4gIGhvc3QsXG59XG5cbikge1xuICBpZiAodXJsPy5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgaWYgKHVybCAmJiBob3N0KSB7XG4gICAgcmV0dXJuIGAke3Byb3RvY29sfTovLyR7aG9zdH0ke3VybH1gO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqIEV4dHJhY3QgdGhlIHF1ZXJ5IHBhcmFtcyBmcm9tIGFuIFVSTC4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RRdWVyeVBhcmFtc0Zyb21VcmwodXJsKSB7XG4gIC8vIHVybCBpcyBwYXRoIGFuZCBxdWVyeSBzdHJpbmdcbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoZSBgVVJMYCBjb25zdHJ1Y3RvciBjYW4ndCBoYW5kbGUgaW50ZXJuYWwgVVJMcyBvZiB0aGUgZm9ybSBgL3NvbWUvcGF0aC9oZXJlYCwgc28gc3RpY2sgYSBkdW1teSBwcm90b2NvbCBhbmRcbiAgICAvLyBob3N0bmFtZSBhcyB0aGUgYmFzZS4gU2luY2UgdGhlIHBvaW50IGhlcmUgaXMganVzdCB0byBncmFiIHRoZSBxdWVyeSBzdHJpbmcsIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgd2UgdXNlLlxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTCh1cmwsICdodHRwOi8vcy5pbycpLnNlYXJjaC5zbGljZSgxKTtcbiAgICByZXR1cm4gcXVlcnlQYXJhbXMubGVuZ3RoID8gcXVlcnlQYXJhbXMgOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IHsgZXh0cmFjdFF1ZXJ5UGFyYW1zRnJvbVVybCwgaGVhZGVyc1RvRGljdCwgaHR0cFJlcXVlc3RUb1JlcXVlc3REYXRhLCB3aW50ZXJDR0hlYWRlcnNUb0RpY3QsIHdpbnRlckNHUmVxdWVzdFRvUmVxdWVzdERhdGEgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcXVlc3QuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/request.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/sdkMetadata.js":
/*!*********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/sdkMetadata.js ***!
  \*********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   applySdkMetadata: () => (/* binding */ applySdkMetadata)\n/* harmony export */ });\n/* harmony import */ var _version_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./version.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/version.js\");\n\n\n/**\n * A builder for the SDK metadata in the options for the SDK initialization.\n *\n * Note: This function is identical to `buildMetadata` in Remix and NextJS and SvelteKit.\n * We don't extract it for bundle size reasons.\n * @see https://github.com/getsentry/sentry-javascript/pull/7404\n * @see https://github.com/getsentry/sentry-javascript/pull/4196\n *\n * If you make changes to this function consider updating the others as well.\n *\n * @param options SDK options object that gets mutated\n * @param names list of package names\n */\nfunction applySdkMetadata(options, name, names = [name], source = 'npm') {\n  const metadata = options._metadata || {};\n\n  if (!metadata.sdk) {\n    metadata.sdk = {\n      name: `sentry.javascript.${name}`,\n      packages: names.map(name => ({\n        name: `${source}:@sentry/${name}`,\n        version: _version_js__WEBPACK_IMPORTED_MODULE_0__.SDK_VERSION,\n      })),\n      version: _version_js__WEBPACK_IMPORTED_MODULE_0__.SDK_VERSION,\n    };\n  }\n\n  options._metadata = metadata;\n}\n\n\n//# sourceMappingURL=sdkMetadata.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3Nka01ldGFkYXRhLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTJDOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlDQUFpQyxLQUFLO0FBQ3RDO0FBQ0EsaUJBQWlCLE9BQU8sV0FBVyxLQUFLO0FBQ3hDLGlCQUFpQixvREFBVztBQUM1QixPQUFPO0FBQ1AsZUFBZSxvREFBVztBQUMxQjtBQUNBOztBQUVBO0FBQ0E7O0FBRTRCO0FBQzVCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvc2RrTWV0YWRhdGEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU0RLX1ZFUlNJT04gfSBmcm9tICcuL3ZlcnNpb24uanMnO1xuXG4vKipcbiAqIEEgYnVpbGRlciBmb3IgdGhlIFNESyBtZXRhZGF0YSBpbiB0aGUgb3B0aW9ucyBmb3IgdGhlIFNESyBpbml0aWFsaXphdGlvbi5cbiAqXG4gKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBgYnVpbGRNZXRhZGF0YWAgaW4gUmVtaXggYW5kIE5leHRKUyBhbmQgU3ZlbHRlS2l0LlxuICogV2UgZG9uJ3QgZXh0cmFjdCBpdCBmb3IgYnVuZGxlIHNpemUgcmVhc29ucy5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9wdWxsLzc0MDRcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9wdWxsLzQxOTZcbiAqXG4gKiBJZiB5b3UgbWFrZSBjaGFuZ2VzIHRvIHRoaXMgZnVuY3Rpb24gY29uc2lkZXIgdXBkYXRpbmcgdGhlIG90aGVycyBhcyB3ZWxsLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIFNESyBvcHRpb25zIG9iamVjdCB0aGF0IGdldHMgbXV0YXRlZFxuICogQHBhcmFtIG5hbWVzIGxpc3Qgb2YgcGFja2FnZSBuYW1lc1xuICovXG5mdW5jdGlvbiBhcHBseVNka01ldGFkYXRhKG9wdGlvbnMsIG5hbWUsIG5hbWVzID0gW25hbWVdLCBzb3VyY2UgPSAnbnBtJykge1xuICBjb25zdCBtZXRhZGF0YSA9IG9wdGlvbnMuX21ldGFkYXRhIHx8IHt9O1xuXG4gIGlmICghbWV0YWRhdGEuc2RrKSB7XG4gICAgbWV0YWRhdGEuc2RrID0ge1xuICAgICAgbmFtZTogYHNlbnRyeS5qYXZhc2NyaXB0LiR7bmFtZX1gLFxuICAgICAgcGFja2FnZXM6IG5hbWVzLm1hcChuYW1lID0+ICh7XG4gICAgICAgIG5hbWU6IGAke3NvdXJjZX06QHNlbnRyeS8ke25hbWV9YCxcbiAgICAgICAgdmVyc2lvbjogU0RLX1ZFUlNJT04sXG4gICAgICB9KSksXG4gICAgICB2ZXJzaW9uOiBTREtfVkVSU0lPTixcbiAgICB9O1xuICB9XG5cbiAgb3B0aW9ucy5fbWV0YWRhdGEgPSBtZXRhZGF0YTtcbn1cblxuZXhwb3J0IHsgYXBwbHlTZGtNZXRhZGF0YSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2RrTWV0YWRhdGEuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/sdkMetadata.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/severity.js":
/*!******************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/severity.js ***!
  \******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   severityLevelFromString: () => (/* binding */ severityLevelFromString)\n/* harmony export */ });\n/**\n * Converts a string-based level into a `SeverityLevel`, normalizing it along the way.\n *\n * @param level String representation of desired `SeverityLevel`.\n * @returns The `SeverityLevel` corresponding to the given string, or 'log' if the string isn't a valid level.\n */\nfunction severityLevelFromString(level) {\n  return (\n    level === 'warn' ? 'warning' : ['fatal', 'error', 'warning', 'log', 'info', 'debug'].includes(level) ? level : 'log'\n  ) ;\n}\n\n\n//# sourceMappingURL=severity.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3NldmVyaXR5LmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVtQztBQUNuQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3NldmVyaXR5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udmVydHMgYSBzdHJpbmctYmFzZWQgbGV2ZWwgaW50byBhIGBTZXZlcml0eUxldmVsYCwgbm9ybWFsaXppbmcgaXQgYWxvbmcgdGhlIHdheS5cbiAqXG4gKiBAcGFyYW0gbGV2ZWwgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGRlc2lyZWQgYFNldmVyaXR5TGV2ZWxgLlxuICogQHJldHVybnMgVGhlIGBTZXZlcml0eUxldmVsYCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBzdHJpbmcsIG9yICdsb2cnIGlmIHRoZSBzdHJpbmcgaXNuJ3QgYSB2YWxpZCBsZXZlbC5cbiAqL1xuZnVuY3Rpb24gc2V2ZXJpdHlMZXZlbEZyb21TdHJpbmcobGV2ZWwpIHtcbiAgcmV0dXJuIChcbiAgICBsZXZlbCA9PT0gJ3dhcm4nID8gJ3dhcm5pbmcnIDogWydmYXRhbCcsICdlcnJvcicsICd3YXJuaW5nJywgJ2xvZycsICdpbmZvJywgJ2RlYnVnJ10uaW5jbHVkZXMobGV2ZWwpID8gbGV2ZWwgOiAnbG9nJ1xuICApIDtcbn1cblxuZXhwb3J0IHsgc2V2ZXJpdHlMZXZlbEZyb21TdHJpbmcgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNldmVyaXR5LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/severity.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanOnScope.js":
/*!*********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanOnScope.js ***!
  \*********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   _getSpanForScope: () => (/* binding */ _getSpanForScope),\n/* harmony export */   _setSpanForScope: () => (/* binding */ _setSpanForScope)\n/* harmony export */ });\n/* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./object.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js\");\n\n\nconst SCOPE_SPAN_FIELD = '_sentrySpan';\n\n/**\n * Set the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nfunction _setSpanForScope(scope, span) {\n  if (span) {\n    (0,_object_js__WEBPACK_IMPORTED_MODULE_0__.addNonEnumerableProperty)(scope , SCOPE_SPAN_FIELD, span);\n  } else {\n    // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n    delete (scope )[SCOPE_SPAN_FIELD];\n  }\n}\n\n/**\n * Get the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nfunction _getSpanForScope(scope) {\n  return scope[SCOPE_SPAN_FIELD];\n}\n\n\n//# sourceMappingURL=spanOnScope.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3NwYW5PblNjb3BlLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF1RDs7QUFFdkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxvRUFBd0I7QUFDNUIsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUU4QztBQUM5QyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3NwYW5PblNjb3BlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZE5vbkVudW1lcmFibGVQcm9wZXJ0eSB9IGZyb20gJy4vb2JqZWN0LmpzJztcblxuY29uc3QgU0NPUEVfU1BBTl9GSUVMRCA9ICdfc2VudHJ5U3Bhbic7XG5cbi8qKlxuICogU2V0IHRoZSBhY3RpdmUgc3BhbiBmb3IgYSBnaXZlbiBzY29wZS5cbiAqIE5PVEU6IFRoaXMgc2hvdWxkIE5PVCBiZSB1c2VkIGRpcmVjdGx5LCBidXQgaXMgb25seSB1c2VkIGludGVybmFsbHkgYnkgdGhlIHRyYWNlIG1ldGhvZHMuXG4gKi9cbmZ1bmN0aW9uIF9zZXRTcGFuRm9yU2NvcGUoc2NvcGUsIHNwYW4pIHtcbiAgaWYgKHNwYW4pIHtcbiAgICBhZGROb25FbnVtZXJhYmxlUHJvcGVydHkoc2NvcGUgLCBTQ09QRV9TUEFOX0ZJRUxELCBzcGFuKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXG4gICAgZGVsZXRlIChzY29wZSApW1NDT1BFX1NQQU5fRklFTERdO1xuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBhY3RpdmUgc3BhbiBmb3IgYSBnaXZlbiBzY29wZS5cbiAqIE5PVEU6IFRoaXMgc2hvdWxkIE5PVCBiZSB1c2VkIGRpcmVjdGx5LCBidXQgaXMgb25seSB1c2VkIGludGVybmFsbHkgYnkgdGhlIHRyYWNlIG1ldGhvZHMuXG4gKi9cbmZ1bmN0aW9uIF9nZXRTcGFuRm9yU2NvcGUoc2NvcGUpIHtcbiAgcmV0dXJuIHNjb3BlW1NDT1BFX1NQQU5fRklFTERdO1xufVxuXG5leHBvcnQgeyBfZ2V0U3BhbkZvclNjb3BlLCBfc2V0U3BhbkZvclNjb3BlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zcGFuT25TY29wZS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanOnScope.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js":
/*!*******************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js ***!
  \*******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   TRACE_FLAG_NONE: () => (/* binding */ TRACE_FLAG_NONE),\n/* harmony export */   TRACE_FLAG_SAMPLED: () => (/* binding */ TRACE_FLAG_SAMPLED),\n/* harmony export */   addChildSpanToSpan: () => (/* binding */ addChildSpanToSpan),\n/* harmony export */   convertSpanLinksForEnvelope: () => (/* binding */ convertSpanLinksForEnvelope),\n/* harmony export */   getActiveSpan: () => (/* binding */ getActiveSpan),\n/* harmony export */   getRootSpan: () => (/* binding */ getRootSpan),\n/* harmony export */   getSpanDescendants: () => (/* binding */ getSpanDescendants),\n/* harmony export */   getStatusMessage: () => (/* binding */ getStatusMessage),\n/* harmony export */   removeChildSpanFromSpan: () => (/* binding */ removeChildSpanFromSpan),\n/* harmony export */   showSpanDropWarning: () => (/* binding */ showSpanDropWarning),\n/* harmony export */   spanIsSampled: () => (/* binding */ spanIsSampled),\n/* harmony export */   spanTimeInputToSeconds: () => (/* binding */ spanTimeInputToSeconds),\n/* harmony export */   spanToJSON: () => (/* binding */ spanToJSON),\n/* harmony export */   spanToTraceContext: () => (/* binding */ spanToTraceContext),\n/* harmony export */   spanToTraceHeader: () => (/* binding */ spanToTraceHeader),\n/* harmony export */   spanToTransactionTraceContext: () => (/* binding */ spanToTransactionTraceContext),\n/* harmony export */   updateSpanName: () => (/* binding */ updateSpanName)\n/* harmony export */ });\n/* harmony import */ var _asyncContext_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../asyncContext/index.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/asyncContext/index.js\");\n/* harmony import */ var _carrier_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../carrier.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/carrier.js\");\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../semanticAttributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/semanticAttributes.js\");\n/* harmony import */ var _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../tracing/spanstatus.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/spanstatus.js\");\n/* harmony import */ var _tracing_utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../tracing/utils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/utils.js\");\n/* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./object.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/object.js\");\n/* harmony import */ var _propagationContext_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./propagationContext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/propagationContext.js\");\n/* harmony import */ var _time_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./time.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/time.js\");\n/* harmony import */ var _tracing_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./tracing.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/tracing.js\");\n/* harmony import */ var _debug_logger_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _spanOnScope_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./spanOnScope.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanOnScope.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n// These are aligned with OpenTelemetry trace flags\nconst TRACE_FLAG_NONE = 0x0;\nconst TRACE_FLAG_SAMPLED = 0x1;\n\nlet hasShownSpanDropWarning = false;\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in an event.\n * By default, this will only include trace_id, span_id & parent_span_id.\n * If `includeAllData` is true, it will also include data, op, status & origin.\n */\nfunction spanToTransactionTraceContext(span) {\n  const { spanId: span_id, traceId: trace_id } = span.spanContext();\n  const { data, op, parent_span_id, status, origin, links } = spanToJSON(span);\n\n  return {\n    parent_span_id,\n    span_id,\n    trace_id,\n    data,\n    op,\n    status,\n    origin,\n    links,\n  };\n}\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in a non-transaction event.\n */\nfunction spanToTraceContext(span) {\n  const { spanId, traceId: trace_id, isRemote } = span.spanContext();\n\n  // If the span is remote, we use a random/virtual span as span_id to the trace context,\n  // and the remote span as parent_span_id\n  const parent_span_id = isRemote ? spanId : spanToJSON(span).parent_span_id;\n  const scope = (0,_tracing_utils_js__WEBPACK_IMPORTED_MODULE_5__.getCapturedScopesOnSpan)(span).scope;\n\n  const span_id = isRemote ? scope?.getPropagationContext().propagationSpanId || (0,_propagationContext_js__WEBPACK_IMPORTED_MODULE_7__.generateSpanId)() : spanId;\n\n  return {\n    parent_span_id,\n    span_id,\n    trace_id,\n  };\n}\n\n/**\n * Convert a Span to a Sentry trace header.\n */\nfunction spanToTraceHeader(span) {\n  const { traceId, spanId } = span.spanContext();\n  const sampled = spanIsSampled(span);\n  return (0,_tracing_js__WEBPACK_IMPORTED_MODULE_9__.generateSentryTraceHeader)(traceId, spanId, sampled);\n}\n\n/**\n *  Converts the span links array to a flattened version to be sent within an envelope.\n *\n *  If the links array is empty, it returns `undefined` so the empty value can be dropped before it's sent.\n */\nfunction convertSpanLinksForEnvelope(links) {\n  if (links && links.length > 0) {\n    return links.map(({ context: { spanId, traceId, traceFlags, ...restContext }, attributes }) => ({\n      span_id: spanId,\n      trace_id: traceId,\n      sampled: traceFlags === TRACE_FLAG_SAMPLED,\n      attributes,\n      ...restContext,\n    }));\n  } else {\n    return undefined;\n  }\n}\n\n/**\n * Convert a span time input into a timestamp in seconds.\n */\nfunction spanTimeInputToSeconds(input) {\n  if (typeof input === 'number') {\n    return ensureTimestampInSeconds(input);\n  }\n\n  if (Array.isArray(input)) {\n    // See {@link HrTime} for the array-based time format\n    return input[0] + input[1] / 1e9;\n  }\n\n  if (input instanceof Date) {\n    return ensureTimestampInSeconds(input.getTime());\n  }\n\n  return (0,_time_js__WEBPACK_IMPORTED_MODULE_8__.timestampInSeconds)();\n}\n\n/**\n * Converts a timestamp to second, if it was in milliseconds, or keeps it as second.\n */\nfunction ensureTimestampInSeconds(timestamp) {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Convert a span to a JSON representation.\n */\n// Note: Because of this, we currently have a circular type dependency (which we opted out of in package.json).\n// This is not avoidable as we need `spanToJSON` in `spanUtils.ts`, which in turn is needed by `span.ts` for backwards compatibility.\n// And `spanToJSON` needs the Span class from `span.ts` to check here.\nfunction spanToJSON(span) {\n  if (spanIsSentrySpan(span)) {\n    return span.getSpanJSON();\n  }\n\n  const { spanId: span_id, traceId: trace_id } = span.spanContext();\n\n  // Handle a span from @opentelemetry/sdk-base-trace's `Span` class\n  if (spanIsOpenTelemetrySdkTraceBaseSpan(span)) {\n    const { attributes, startTime, name, endTime, status, links } = span;\n\n    // In preparation for the next major of OpenTelemetry, we want to support\n    // looking up the parent span id according to the new API\n    // In OTel v1, the parent span id is accessed as `parentSpanId`\n    // In OTel v2, the parent span id is accessed as `spanId` on the `parentSpanContext`\n    const parentSpanId =\n      'parentSpanId' in span\n        ? span.parentSpanId\n        : 'parentSpanContext' in span\n          ? (span.parentSpanContext )?.spanId\n          : undefined;\n\n    return {\n      span_id,\n      trace_id,\n      data: attributes,\n      description: name,\n      parent_span_id: parentSpanId,\n      start_timestamp: spanTimeInputToSeconds(startTime),\n      // This is [0,0] by default in OTEL, in which case we want to interpret this as no end time\n      timestamp: spanTimeInputToSeconds(endTime) || undefined,\n      status: getStatusMessage(status),\n      op: attributes[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_3__.SEMANTIC_ATTRIBUTE_SENTRY_OP],\n      origin: attributes[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_3__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] ,\n      links: convertSpanLinksForEnvelope(links),\n    };\n  }\n\n  // Finally, at least we have `spanContext()`....\n  // This should not actually happen in reality, but we need to handle it for type safety.\n  return {\n    span_id,\n    trace_id,\n    start_timestamp: 0,\n    data: {},\n  };\n}\n\nfunction spanIsOpenTelemetrySdkTraceBaseSpan(span) {\n  const castSpan = span ;\n  return !!castSpan.attributes && !!castSpan.startTime && !!castSpan.name && !!castSpan.endTime && !!castSpan.status;\n}\n\n/** Exported only for tests. */\n\n/**\n * Sadly, due to circular dependency checks we cannot actually import the Span class here and check for instanceof.\n * :( So instead we approximate this by checking if it has the `getSpanJSON` method.\n */\nfunction spanIsSentrySpan(span) {\n  return typeof (span ).getSpanJSON === 'function';\n}\n\n/**\n * Returns true if a span is sampled.\n * In most cases, you should just use `span.isRecording()` instead.\n * However, this has a slightly different semantic, as it also returns false if the span is finished.\n * So in the case where this distinction is important, use this method.\n */\nfunction spanIsSampled(span) {\n  // We align our trace flags with the ones OpenTelemetry use\n  // So we also check for sampled the same way they do.\n  const { traceFlags } = span.spanContext();\n  return traceFlags === TRACE_FLAG_SAMPLED;\n}\n\n/** Get the status message to use for a JSON representation of a span. */\nfunction getStatusMessage(status) {\n  if (!status || status.code === _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_4__.SPAN_STATUS_UNSET) {\n    return undefined;\n  }\n\n  if (status.code === _tracing_spanstatus_js__WEBPACK_IMPORTED_MODULE_4__.SPAN_STATUS_OK) {\n    return 'ok';\n  }\n\n  return status.message || 'unknown_error';\n}\n\nconst CHILD_SPANS_FIELD = '_sentryChildSpans';\nconst ROOT_SPAN_FIELD = '_sentryRootSpan';\n\n/**\n * Adds an opaque child span reference to a span.\n */\nfunction addChildSpanToSpan(span, childSpan) {\n  // We store the root span reference on the child span\n  // We need this for `getRootSpan()` to work\n  const rootSpan = span[ROOT_SPAN_FIELD] || span;\n  (0,_object_js__WEBPACK_IMPORTED_MODULE_6__.addNonEnumerableProperty)(childSpan , ROOT_SPAN_FIELD, rootSpan);\n\n  // We store a list of child spans on the parent span\n  // We need this for `getSpanDescendants()` to work\n  if (span[CHILD_SPANS_FIELD]) {\n    span[CHILD_SPANS_FIELD].add(childSpan);\n  } else {\n    (0,_object_js__WEBPACK_IMPORTED_MODULE_6__.addNonEnumerableProperty)(span, CHILD_SPANS_FIELD, new Set([childSpan]));\n  }\n}\n\n/** This is only used internally by Idle Spans. */\nfunction removeChildSpanFromSpan(span, childSpan) {\n  if (span[CHILD_SPANS_FIELD]) {\n    span[CHILD_SPANS_FIELD].delete(childSpan);\n  }\n}\n\n/**\n * Returns an array of the given span and all of its descendants.\n */\nfunction getSpanDescendants(span) {\n  const resultSet = new Set();\n\n  function addSpanChildren(span) {\n    // This exit condition is required to not infinitely loop in case of a circular dependency.\n    if (resultSet.has(span)) {\n      return;\n      // We want to ignore unsampled spans (e.g. non recording spans)\n    } else if (spanIsSampled(span)) {\n      resultSet.add(span);\n      const childSpans = span[CHILD_SPANS_FIELD] ? Array.from(span[CHILD_SPANS_FIELD]) : [];\n      for (const childSpan of childSpans) {\n        addSpanChildren(childSpan);\n      }\n    }\n  }\n\n  addSpanChildren(span);\n\n  return Array.from(resultSet);\n}\n\n/**\n * Returns the root span of a given span.\n */\nfunction getRootSpan(span) {\n  return span[ROOT_SPAN_FIELD] || span;\n}\n\n/**\n * Returns the currently active span.\n */\nfunction getActiveSpan() {\n  const carrier = (0,_carrier_js__WEBPACK_IMPORTED_MODULE_1__.getMainCarrier)();\n  const acs = (0,_asyncContext_index_js__WEBPACK_IMPORTED_MODULE_0__.getAsyncContextStrategy)(carrier);\n  if (acs.getActiveSpan) {\n    return acs.getActiveSpan();\n  }\n\n  return (0,_spanOnScope_js__WEBPACK_IMPORTED_MODULE_11__._getSpanForScope)((0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getCurrentScope)());\n}\n\n/**\n * Logs a warning once if `beforeSendSpan` is used to drop spans.\n */\nfunction showSpanDropWarning() {\n  if (!hasShownSpanDropWarning) {\n    (0,_debug_logger_js__WEBPACK_IMPORTED_MODULE_10__.consoleSandbox)(() => {\n      // eslint-disable-next-line no-console\n      console.warn(\n        '[Sentry] Returning null from `beforeSendSpan` is disallowed. To drop certain spans, configure the respective integrations directly.',\n      );\n    });\n    hasShownSpanDropWarning = true;\n  }\n}\n\n/**\n * Updates the name of the given span and ensures that the span name is not\n * overwritten by the Sentry SDK.\n *\n * Use this function instead of `span.updateName()` if you want to make sure that\n * your name is kept. For some spans, for example root `http.server` spans the\n * Sentry SDK would otherwise overwrite the span name with a high-quality name\n * it infers when the span ends.\n *\n * Use this function in server code or when your span is started on the server\n * and on the client (browser). If you only update a span name on the client,\n * you can also use `span.updateName()` the SDK does not overwrite the name.\n *\n * @param span - The span to update the name of.\n * @param name - The name to set on the span.\n */\nfunction updateSpanName(span, name) {\n  span.updateName(name);\n  span.setAttributes({\n    [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_3__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'custom',\n    [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_3__.SEMANTIC_ATTRIBUTE_SENTRY_CUSTOM_SPAN_NAME]: name,\n  });\n}\n\n\n//# sourceMappingURL=spanUtils.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3NwYW5VdGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFtRTtBQUNwQjtBQUNPO0FBQ2tJO0FBQzNHO0FBQ2Y7QUFDUDtBQUNFO0FBQ1Y7QUFDVTtBQUNOO0FBQ0M7O0FBRXBEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLHFDQUFxQztBQUMvQyxVQUFVLGtEQUFrRDs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsc0NBQXNDOztBQUVoRDtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsMEVBQXVCOztBQUV2QyxpRkFBaUYsc0VBQWM7O0FBRS9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsa0JBQWtCO0FBQzVCO0FBQ0EsU0FBUyxzRUFBeUI7QUFDbEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsV0FBVyw2Q0FBNkMsY0FBYztBQUM5RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLGNBQWM7QUFDMUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyw0REFBa0I7QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxxQ0FBcUM7O0FBRS9DO0FBQ0E7QUFDQSxZQUFZLHNEQUFzRDs7QUFFbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsZ0ZBQTRCO0FBQ2pELHlCQUF5QixvRkFBZ0M7QUFDekQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsYUFBYTtBQUN2QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQ0FBaUMscUVBQWlCO0FBQ2xEO0FBQ0E7O0FBRUEsc0JBQXNCLGtFQUFjO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxvRUFBd0I7O0FBRTFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLElBQUksb0VBQXdCO0FBQzVCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiwyREFBYztBQUNoQyxjQUFjLCtFQUF1QjtBQUNyQztBQUNBO0FBQ0E7O0FBRUEsU0FBUyxrRUFBZ0IsQ0FBQyxrRUFBZTtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxpRUFBYztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLG9GQUFnQztBQUNyQyxLQUFLLDhGQUEwQztBQUMvQyxHQUFHO0FBQ0g7O0FBRXlWO0FBQ3pWIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvc3BhblV0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEFzeW5jQ29udGV4dFN0cmF0ZWd5IH0gZnJvbSAnLi4vYXN5bmNDb250ZXh0L2luZGV4LmpzJztcbmltcG9ydCB7IGdldE1haW5DYXJyaWVyIH0gZnJvbSAnLi4vY2Fycmllci5qcyc7XG5pbXBvcnQgeyBnZXRDdXJyZW50U2NvcGUgfSBmcm9tICcuLi9jdXJyZW50U2NvcGVzLmpzJztcbmltcG9ydCB7IFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX0NVU1RPTV9TUEFOX05BTUUsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFIH0gZnJvbSAnLi4vc2VtYW50aWNBdHRyaWJ1dGVzLmpzJztcbmltcG9ydCB7IFNQQU5fU1RBVFVTX1VOU0VULCBTUEFOX1NUQVRVU19PSyB9IGZyb20gJy4uL3RyYWNpbmcvc3BhbnN0YXR1cy5qcyc7XG5pbXBvcnQgeyBnZXRDYXB0dXJlZFNjb3Blc09uU3BhbiB9IGZyb20gJy4uL3RyYWNpbmcvdXRpbHMuanMnO1xuaW1wb3J0IHsgYWRkTm9uRW51bWVyYWJsZVByb3BlcnR5IH0gZnJvbSAnLi9vYmplY3QuanMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVTcGFuSWQgfSBmcm9tICcuL3Byb3BhZ2F0aW9uQ29udGV4dC5qcyc7XG5pbXBvcnQgeyB0aW1lc3RhbXBJblNlY29uZHMgfSBmcm9tICcuL3RpbWUuanMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVTZW50cnlUcmFjZUhlYWRlciB9IGZyb20gJy4vdHJhY2luZy5qcyc7XG5pbXBvcnQgeyBjb25zb2xlU2FuZGJveCB9IGZyb20gJy4vZGVidWctbG9nZ2VyLmpzJztcbmltcG9ydCB7IF9nZXRTcGFuRm9yU2NvcGUgfSBmcm9tICcuL3NwYW5PblNjb3BlLmpzJztcblxuLy8gVGhlc2UgYXJlIGFsaWduZWQgd2l0aCBPcGVuVGVsZW1ldHJ5IHRyYWNlIGZsYWdzXG5jb25zdCBUUkFDRV9GTEFHX05PTkUgPSAweDA7XG5jb25zdCBUUkFDRV9GTEFHX1NBTVBMRUQgPSAweDE7XG5cbmxldCBoYXNTaG93blNwYW5Ecm9wV2FybmluZyA9IGZhbHNlO1xuXG4vKipcbiAqIENvbnZlcnQgYSBzcGFuIHRvIGEgdHJhY2UgY29udGV4dCwgd2hpY2ggY2FuIGJlIHNlbnQgYXMgdGhlIGB0cmFjZWAgY29udGV4dCBpbiBhbiBldmVudC5cbiAqIEJ5IGRlZmF1bHQsIHRoaXMgd2lsbCBvbmx5IGluY2x1ZGUgdHJhY2VfaWQsIHNwYW5faWQgJiBwYXJlbnRfc3Bhbl9pZC5cbiAqIElmIGBpbmNsdWRlQWxsRGF0YWAgaXMgdHJ1ZSwgaXQgd2lsbCBhbHNvIGluY2x1ZGUgZGF0YSwgb3AsIHN0YXR1cyAmIG9yaWdpbi5cbiAqL1xuZnVuY3Rpb24gc3BhblRvVHJhbnNhY3Rpb25UcmFjZUNvbnRleHQoc3Bhbikge1xuICBjb25zdCB7IHNwYW5JZDogc3Bhbl9pZCwgdHJhY2VJZDogdHJhY2VfaWQgfSA9IHNwYW4uc3BhbkNvbnRleHQoKTtcbiAgY29uc3QgeyBkYXRhLCBvcCwgcGFyZW50X3NwYW5faWQsIHN0YXR1cywgb3JpZ2luLCBsaW5rcyB9ID0gc3BhblRvSlNPTihzcGFuKTtcblxuICByZXR1cm4ge1xuICAgIHBhcmVudF9zcGFuX2lkLFxuICAgIHNwYW5faWQsXG4gICAgdHJhY2VfaWQsXG4gICAgZGF0YSxcbiAgICBvcCxcbiAgICBzdGF0dXMsXG4gICAgb3JpZ2luLFxuICAgIGxpbmtzLFxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBzcGFuIHRvIGEgdHJhY2UgY29udGV4dCwgd2hpY2ggY2FuIGJlIHNlbnQgYXMgdGhlIGB0cmFjZWAgY29udGV4dCBpbiBhIG5vbi10cmFuc2FjdGlvbiBldmVudC5cbiAqL1xuZnVuY3Rpb24gc3BhblRvVHJhY2VDb250ZXh0KHNwYW4pIHtcbiAgY29uc3QgeyBzcGFuSWQsIHRyYWNlSWQ6IHRyYWNlX2lkLCBpc1JlbW90ZSB9ID0gc3Bhbi5zcGFuQ29udGV4dCgpO1xuXG4gIC8vIElmIHRoZSBzcGFuIGlzIHJlbW90ZSwgd2UgdXNlIGEgcmFuZG9tL3ZpcnR1YWwgc3BhbiBhcyBzcGFuX2lkIHRvIHRoZSB0cmFjZSBjb250ZXh0LFxuICAvLyBhbmQgdGhlIHJlbW90ZSBzcGFuIGFzIHBhcmVudF9zcGFuX2lkXG4gIGNvbnN0IHBhcmVudF9zcGFuX2lkID0gaXNSZW1vdGUgPyBzcGFuSWQgOiBzcGFuVG9KU09OKHNwYW4pLnBhcmVudF9zcGFuX2lkO1xuICBjb25zdCBzY29wZSA9IGdldENhcHR1cmVkU2NvcGVzT25TcGFuKHNwYW4pLnNjb3BlO1xuXG4gIGNvbnN0IHNwYW5faWQgPSBpc1JlbW90ZSA/IHNjb3BlPy5nZXRQcm9wYWdhdGlvbkNvbnRleHQoKS5wcm9wYWdhdGlvblNwYW5JZCB8fCBnZW5lcmF0ZVNwYW5JZCgpIDogc3BhbklkO1xuXG4gIHJldHVybiB7XG4gICAgcGFyZW50X3NwYW5faWQsXG4gICAgc3Bhbl9pZCxcbiAgICB0cmFjZV9pZCxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgU3BhbiB0byBhIFNlbnRyeSB0cmFjZSBoZWFkZXIuXG4gKi9cbmZ1bmN0aW9uIHNwYW5Ub1RyYWNlSGVhZGVyKHNwYW4pIHtcbiAgY29uc3QgeyB0cmFjZUlkLCBzcGFuSWQgfSA9IHNwYW4uc3BhbkNvbnRleHQoKTtcbiAgY29uc3Qgc2FtcGxlZCA9IHNwYW5Jc1NhbXBsZWQoc3Bhbik7XG4gIHJldHVybiBnZW5lcmF0ZVNlbnRyeVRyYWNlSGVhZGVyKHRyYWNlSWQsIHNwYW5JZCwgc2FtcGxlZCk7XG59XG5cbi8qKlxuICogIENvbnZlcnRzIHRoZSBzcGFuIGxpbmtzIGFycmF5IHRvIGEgZmxhdHRlbmVkIHZlcnNpb24gdG8gYmUgc2VudCB3aXRoaW4gYW4gZW52ZWxvcGUuXG4gKlxuICogIElmIHRoZSBsaW5rcyBhcnJheSBpcyBlbXB0eSwgaXQgcmV0dXJucyBgdW5kZWZpbmVkYCBzbyB0aGUgZW1wdHkgdmFsdWUgY2FuIGJlIGRyb3BwZWQgYmVmb3JlIGl0J3Mgc2VudC5cbiAqL1xuZnVuY3Rpb24gY29udmVydFNwYW5MaW5rc0ZvckVudmVsb3BlKGxpbmtzKSB7XG4gIGlmIChsaW5rcyAmJiBsaW5rcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGxpbmtzLm1hcCgoeyBjb250ZXh0OiB7IHNwYW5JZCwgdHJhY2VJZCwgdHJhY2VGbGFncywgLi4ucmVzdENvbnRleHQgfSwgYXR0cmlidXRlcyB9KSA9PiAoe1xuICAgICAgc3Bhbl9pZDogc3BhbklkLFxuICAgICAgdHJhY2VfaWQ6IHRyYWNlSWQsXG4gICAgICBzYW1wbGVkOiB0cmFjZUZsYWdzID09PSBUUkFDRV9GTEFHX1NBTVBMRUQsXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgLi4ucmVzdENvbnRleHQsXG4gICAgfSkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc3BhbiB0aW1lIGlucHV0IGludG8gYSB0aW1lc3RhbXAgaW4gc2Vjb25kcy5cbiAqL1xuZnVuY3Rpb24gc3BhblRpbWVJbnB1dFRvU2Vjb25kcyhpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBlbnN1cmVUaW1lc3RhbXBJblNlY29uZHMoaW5wdXQpO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgLy8gU2VlIHtAbGluayBIclRpbWV9IGZvciB0aGUgYXJyYXktYmFzZWQgdGltZSBmb3JtYXRcbiAgICByZXR1cm4gaW5wdXRbMF0gKyBpbnB1dFsxXSAvIDFlOTtcbiAgfVxuXG4gIGlmIChpbnB1dCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gZW5zdXJlVGltZXN0YW1wSW5TZWNvbmRzKGlucHV0LmdldFRpbWUoKSk7XG4gIH1cblxuICByZXR1cm4gdGltZXN0YW1wSW5TZWNvbmRzKCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSB0aW1lc3RhbXAgdG8gc2Vjb25kLCBpZiBpdCB3YXMgaW4gbWlsbGlzZWNvbmRzLCBvciBrZWVwcyBpdCBhcyBzZWNvbmQuXG4gKi9cbmZ1bmN0aW9uIGVuc3VyZVRpbWVzdGFtcEluU2Vjb25kcyh0aW1lc3RhbXApIHtcbiAgY29uc3QgaXNNcyA9IHRpbWVzdGFtcCA+IDk5OTk5OTk5OTk7XG4gIHJldHVybiBpc01zID8gdGltZXN0YW1wIC8gMTAwMCA6IHRpbWVzdGFtcDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc3BhbiB0byBhIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8vIE5vdGU6IEJlY2F1c2Ugb2YgdGhpcywgd2UgY3VycmVudGx5IGhhdmUgYSBjaXJjdWxhciB0eXBlIGRlcGVuZGVuY3kgKHdoaWNoIHdlIG9wdGVkIG91dCBvZiBpbiBwYWNrYWdlLmpzb24pLlxuLy8gVGhpcyBpcyBub3QgYXZvaWRhYmxlIGFzIHdlIG5lZWQgYHNwYW5Ub0pTT05gIGluIGBzcGFuVXRpbHMudHNgLCB3aGljaCBpbiB0dXJuIGlzIG5lZWRlZCBieSBgc3Bhbi50c2AgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuLy8gQW5kIGBzcGFuVG9KU09OYCBuZWVkcyB0aGUgU3BhbiBjbGFzcyBmcm9tIGBzcGFuLnRzYCB0byBjaGVjayBoZXJlLlxuZnVuY3Rpb24gc3BhblRvSlNPTihzcGFuKSB7XG4gIGlmIChzcGFuSXNTZW50cnlTcGFuKHNwYW4pKSB7XG4gICAgcmV0dXJuIHNwYW4uZ2V0U3BhbkpTT04oKTtcbiAgfVxuXG4gIGNvbnN0IHsgc3BhbklkOiBzcGFuX2lkLCB0cmFjZUlkOiB0cmFjZV9pZCB9ID0gc3Bhbi5zcGFuQ29udGV4dCgpO1xuXG4gIC8vIEhhbmRsZSBhIHNwYW4gZnJvbSBAb3BlbnRlbGVtZXRyeS9zZGstYmFzZS10cmFjZSdzIGBTcGFuYCBjbGFzc1xuICBpZiAoc3BhbklzT3BlblRlbGVtZXRyeVNka1RyYWNlQmFzZVNwYW4oc3BhbikpIHtcbiAgICBjb25zdCB7IGF0dHJpYnV0ZXMsIHN0YXJ0VGltZSwgbmFtZSwgZW5kVGltZSwgc3RhdHVzLCBsaW5rcyB9ID0gc3BhbjtcblxuICAgIC8vIEluIHByZXBhcmF0aW9uIGZvciB0aGUgbmV4dCBtYWpvciBvZiBPcGVuVGVsZW1ldHJ5LCB3ZSB3YW50IHRvIHN1cHBvcnRcbiAgICAvLyBsb29raW5nIHVwIHRoZSBwYXJlbnQgc3BhbiBpZCBhY2NvcmRpbmcgdG8gdGhlIG5ldyBBUElcbiAgICAvLyBJbiBPVGVsIHYxLCB0aGUgcGFyZW50IHNwYW4gaWQgaXMgYWNjZXNzZWQgYXMgYHBhcmVudFNwYW5JZGBcbiAgICAvLyBJbiBPVGVsIHYyLCB0aGUgcGFyZW50IHNwYW4gaWQgaXMgYWNjZXNzZWQgYXMgYHNwYW5JZGAgb24gdGhlIGBwYXJlbnRTcGFuQ29udGV4dGBcbiAgICBjb25zdCBwYXJlbnRTcGFuSWQgPVxuICAgICAgJ3BhcmVudFNwYW5JZCcgaW4gc3BhblxuICAgICAgICA/IHNwYW4ucGFyZW50U3BhbklkXG4gICAgICAgIDogJ3BhcmVudFNwYW5Db250ZXh0JyBpbiBzcGFuXG4gICAgICAgICAgPyAoc3Bhbi5wYXJlbnRTcGFuQ29udGV4dCApPy5zcGFuSWRcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICBzcGFuX2lkLFxuICAgICAgdHJhY2VfaWQsXG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLFxuICAgICAgZGVzY3JpcHRpb246IG5hbWUsXG4gICAgICBwYXJlbnRfc3Bhbl9pZDogcGFyZW50U3BhbklkLFxuICAgICAgc3RhcnRfdGltZXN0YW1wOiBzcGFuVGltZUlucHV0VG9TZWNvbmRzKHN0YXJ0VGltZSksXG4gICAgICAvLyBUaGlzIGlzIFswLDBdIGJ5IGRlZmF1bHQgaW4gT1RFTCwgaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIGludGVycHJldCB0aGlzIGFzIG5vIGVuZCB0aW1lXG4gICAgICB0aW1lc3RhbXA6IHNwYW5UaW1lSW5wdXRUb1NlY29uZHMoZW5kVGltZSkgfHwgdW5kZWZpbmVkLFxuICAgICAgc3RhdHVzOiBnZXRTdGF0dXNNZXNzYWdlKHN0YXR1cyksXG4gICAgICBvcDogYXR0cmlidXRlc1tTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QXSxcbiAgICAgIG9yaWdpbjogYXR0cmlidXRlc1tTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl0gLFxuICAgICAgbGlua3M6IGNvbnZlcnRTcGFuTGlua3NGb3JFbnZlbG9wZShsaW5rcyksXG4gICAgfTtcbiAgfVxuXG4gIC8vIEZpbmFsbHksIGF0IGxlYXN0IHdlIGhhdmUgYHNwYW5Db250ZXh0KClgLi4uLlxuICAvLyBUaGlzIHNob3VsZCBub3QgYWN0dWFsbHkgaGFwcGVuIGluIHJlYWxpdHksIGJ1dCB3ZSBuZWVkIHRvIGhhbmRsZSBpdCBmb3IgdHlwZSBzYWZldHkuXG4gIHJldHVybiB7XG4gICAgc3Bhbl9pZCxcbiAgICB0cmFjZV9pZCxcbiAgICBzdGFydF90aW1lc3RhbXA6IDAsXG4gICAgZGF0YToge30sXG4gIH07XG59XG5cbmZ1bmN0aW9uIHNwYW5Jc09wZW5UZWxlbWV0cnlTZGtUcmFjZUJhc2VTcGFuKHNwYW4pIHtcbiAgY29uc3QgY2FzdFNwYW4gPSBzcGFuIDtcbiAgcmV0dXJuICEhY2FzdFNwYW4uYXR0cmlidXRlcyAmJiAhIWNhc3RTcGFuLnN0YXJ0VGltZSAmJiAhIWNhc3RTcGFuLm5hbWUgJiYgISFjYXN0U3Bhbi5lbmRUaW1lICYmICEhY2FzdFNwYW4uc3RhdHVzO1xufVxuXG4vKiogRXhwb3J0ZWQgb25seSBmb3IgdGVzdHMuICovXG5cbi8qKlxuICogU2FkbHksIGR1ZSB0byBjaXJjdWxhciBkZXBlbmRlbmN5IGNoZWNrcyB3ZSBjYW5ub3QgYWN0dWFsbHkgaW1wb3J0IHRoZSBTcGFuIGNsYXNzIGhlcmUgYW5kIGNoZWNrIGZvciBpbnN0YW5jZW9mLlxuICogOiggU28gaW5zdGVhZCB3ZSBhcHByb3hpbWF0ZSB0aGlzIGJ5IGNoZWNraW5nIGlmIGl0IGhhcyB0aGUgYGdldFNwYW5KU09OYCBtZXRob2QuXG4gKi9cbmZ1bmN0aW9uIHNwYW5Jc1NlbnRyeVNwYW4oc3Bhbikge1xuICByZXR1cm4gdHlwZW9mIChzcGFuICkuZ2V0U3BhbkpTT04gPT09ICdmdW5jdGlvbic7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGEgc3BhbiBpcyBzYW1wbGVkLlxuICogSW4gbW9zdCBjYXNlcywgeW91IHNob3VsZCBqdXN0IHVzZSBgc3Bhbi5pc1JlY29yZGluZygpYCBpbnN0ZWFkLlxuICogSG93ZXZlciwgdGhpcyBoYXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgc2VtYW50aWMsIGFzIGl0IGFsc28gcmV0dXJucyBmYWxzZSBpZiB0aGUgc3BhbiBpcyBmaW5pc2hlZC5cbiAqIFNvIGluIHRoZSBjYXNlIHdoZXJlIHRoaXMgZGlzdGluY3Rpb24gaXMgaW1wb3J0YW50LCB1c2UgdGhpcyBtZXRob2QuXG4gKi9cbmZ1bmN0aW9uIHNwYW5Jc1NhbXBsZWQoc3Bhbikge1xuICAvLyBXZSBhbGlnbiBvdXIgdHJhY2UgZmxhZ3Mgd2l0aCB0aGUgb25lcyBPcGVuVGVsZW1ldHJ5IHVzZVxuICAvLyBTbyB3ZSBhbHNvIGNoZWNrIGZvciBzYW1wbGVkIHRoZSBzYW1lIHdheSB0aGV5IGRvLlxuICBjb25zdCB7IHRyYWNlRmxhZ3MgfSA9IHNwYW4uc3BhbkNvbnRleHQoKTtcbiAgcmV0dXJuIHRyYWNlRmxhZ3MgPT09IFRSQUNFX0ZMQUdfU0FNUExFRDtcbn1cblxuLyoqIEdldCB0aGUgc3RhdHVzIG1lc3NhZ2UgdG8gdXNlIGZvciBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBzcGFuLiAqL1xuZnVuY3Rpb24gZ2V0U3RhdHVzTWVzc2FnZShzdGF0dXMpIHtcbiAgaWYgKCFzdGF0dXMgfHwgc3RhdHVzLmNvZGUgPT09IFNQQU5fU1RBVFVTX1VOU0VUKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChzdGF0dXMuY29kZSA9PT0gU1BBTl9TVEFUVVNfT0spIHtcbiAgICByZXR1cm4gJ29rJztcbiAgfVxuXG4gIHJldHVybiBzdGF0dXMubWVzc2FnZSB8fCAndW5rbm93bl9lcnJvcic7XG59XG5cbmNvbnN0IENISUxEX1NQQU5TX0ZJRUxEID0gJ19zZW50cnlDaGlsZFNwYW5zJztcbmNvbnN0IFJPT1RfU1BBTl9GSUVMRCA9ICdfc2VudHJ5Um9vdFNwYW4nO1xuXG4vKipcbiAqIEFkZHMgYW4gb3BhcXVlIGNoaWxkIHNwYW4gcmVmZXJlbmNlIHRvIGEgc3Bhbi5cbiAqL1xuZnVuY3Rpb24gYWRkQ2hpbGRTcGFuVG9TcGFuKHNwYW4sIGNoaWxkU3Bhbikge1xuICAvLyBXZSBzdG9yZSB0aGUgcm9vdCBzcGFuIHJlZmVyZW5jZSBvbiB0aGUgY2hpbGQgc3BhblxuICAvLyBXZSBuZWVkIHRoaXMgZm9yIGBnZXRSb290U3BhbigpYCB0byB3b3JrXG4gIGNvbnN0IHJvb3RTcGFuID0gc3BhbltST09UX1NQQU5fRklFTERdIHx8IHNwYW47XG4gIGFkZE5vbkVudW1lcmFibGVQcm9wZXJ0eShjaGlsZFNwYW4gLCBST09UX1NQQU5fRklFTEQsIHJvb3RTcGFuKTtcblxuICAvLyBXZSBzdG9yZSBhIGxpc3Qgb2YgY2hpbGQgc3BhbnMgb24gdGhlIHBhcmVudCBzcGFuXG4gIC8vIFdlIG5lZWQgdGhpcyBmb3IgYGdldFNwYW5EZXNjZW5kYW50cygpYCB0byB3b3JrXG4gIGlmIChzcGFuW0NISUxEX1NQQU5TX0ZJRUxEXSkge1xuICAgIHNwYW5bQ0hJTERfU1BBTlNfRklFTERdLmFkZChjaGlsZFNwYW4pO1xuICB9IGVsc2Uge1xuICAgIGFkZE5vbkVudW1lcmFibGVQcm9wZXJ0eShzcGFuLCBDSElMRF9TUEFOU19GSUVMRCwgbmV3IFNldChbY2hpbGRTcGFuXSkpO1xuICB9XG59XG5cbi8qKiBUaGlzIGlzIG9ubHkgdXNlZCBpbnRlcm5hbGx5IGJ5IElkbGUgU3BhbnMuICovXG5mdW5jdGlvbiByZW1vdmVDaGlsZFNwYW5Gcm9tU3BhbihzcGFuLCBjaGlsZFNwYW4pIHtcbiAgaWYgKHNwYW5bQ0hJTERfU1BBTlNfRklFTERdKSB7XG4gICAgc3BhbltDSElMRF9TUEFOU19GSUVMRF0uZGVsZXRlKGNoaWxkU3Bhbik7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBnaXZlbiBzcGFuIGFuZCBhbGwgb2YgaXRzIGRlc2NlbmRhbnRzLlxuICovXG5mdW5jdGlvbiBnZXRTcGFuRGVzY2VuZGFudHMoc3Bhbikge1xuICBjb25zdCByZXN1bHRTZXQgPSBuZXcgU2V0KCk7XG5cbiAgZnVuY3Rpb24gYWRkU3BhbkNoaWxkcmVuKHNwYW4pIHtcbiAgICAvLyBUaGlzIGV4aXQgY29uZGl0aW9uIGlzIHJlcXVpcmVkIHRvIG5vdCBpbmZpbml0ZWx5IGxvb3AgaW4gY2FzZSBvZiBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuXG4gICAgaWYgKHJlc3VsdFNldC5oYXMoc3BhbikpIHtcbiAgICAgIHJldHVybjtcbiAgICAgIC8vIFdlIHdhbnQgdG8gaWdub3JlIHVuc2FtcGxlZCBzcGFucyAoZS5nLiBub24gcmVjb3JkaW5nIHNwYW5zKVxuICAgIH0gZWxzZSBpZiAoc3BhbklzU2FtcGxlZChzcGFuKSkge1xuICAgICAgcmVzdWx0U2V0LmFkZChzcGFuKTtcbiAgICAgIGNvbnN0IGNoaWxkU3BhbnMgPSBzcGFuW0NISUxEX1NQQU5TX0ZJRUxEXSA/IEFycmF5LmZyb20oc3BhbltDSElMRF9TUEFOU19GSUVMRF0pIDogW107XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkU3BhbiBvZiBjaGlsZFNwYW5zKSB7XG4gICAgICAgIGFkZFNwYW5DaGlsZHJlbihjaGlsZFNwYW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZFNwYW5DaGlsZHJlbihzcGFuKTtcblxuICByZXR1cm4gQXJyYXkuZnJvbShyZXN1bHRTZXQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHJvb3Qgc3BhbiBvZiBhIGdpdmVuIHNwYW4uXG4gKi9cbmZ1bmN0aW9uIGdldFJvb3RTcGFuKHNwYW4pIHtcbiAgcmV0dXJuIHNwYW5bUk9PVF9TUEFOX0ZJRUxEXSB8fCBzcGFuO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGN1cnJlbnRseSBhY3RpdmUgc3Bhbi5cbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aXZlU3BhbigpIHtcbiAgY29uc3QgY2FycmllciA9IGdldE1haW5DYXJyaWVyKCk7XG4gIGNvbnN0IGFjcyA9IGdldEFzeW5jQ29udGV4dFN0cmF0ZWd5KGNhcnJpZXIpO1xuICBpZiAoYWNzLmdldEFjdGl2ZVNwYW4pIHtcbiAgICByZXR1cm4gYWNzLmdldEFjdGl2ZVNwYW4oKTtcbiAgfVxuXG4gIHJldHVybiBfZ2V0U3BhbkZvclNjb3BlKGdldEN1cnJlbnRTY29wZSgpKTtcbn1cblxuLyoqXG4gKiBMb2dzIGEgd2FybmluZyBvbmNlIGlmIGBiZWZvcmVTZW5kU3BhbmAgaXMgdXNlZCB0byBkcm9wIHNwYW5zLlxuICovXG5mdW5jdGlvbiBzaG93U3BhbkRyb3BXYXJuaW5nKCkge1xuICBpZiAoIWhhc1Nob3duU3BhbkRyb3BXYXJuaW5nKSB7XG4gICAgY29uc29sZVNhbmRib3goKCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1tTZW50cnldIFJldHVybmluZyBudWxsIGZyb20gYGJlZm9yZVNlbmRTcGFuYCBpcyBkaXNhbGxvd2VkLiBUbyBkcm9wIGNlcnRhaW4gc3BhbnMsIGNvbmZpZ3VyZSB0aGUgcmVzcGVjdGl2ZSBpbnRlZ3JhdGlvbnMgZGlyZWN0bHkuJyxcbiAgICAgICk7XG4gICAgfSk7XG4gICAgaGFzU2hvd25TcGFuRHJvcFdhcm5pbmcgPSB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgbmFtZSBvZiB0aGUgZ2l2ZW4gc3BhbiBhbmQgZW5zdXJlcyB0aGF0IHRoZSBzcGFuIG5hbWUgaXMgbm90XG4gKiBvdmVyd3JpdHRlbiBieSB0aGUgU2VudHJ5IFNESy5cbiAqXG4gKiBVc2UgdGhpcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIGBzcGFuLnVwZGF0ZU5hbWUoKWAgaWYgeW91IHdhbnQgdG8gbWFrZSBzdXJlIHRoYXRcbiAqIHlvdXIgbmFtZSBpcyBrZXB0LiBGb3Igc29tZSBzcGFucywgZm9yIGV4YW1wbGUgcm9vdCBgaHR0cC5zZXJ2ZXJgIHNwYW5zIHRoZVxuICogU2VudHJ5IFNESyB3b3VsZCBvdGhlcndpc2Ugb3ZlcndyaXRlIHRoZSBzcGFuIG5hbWUgd2l0aCBhIGhpZ2gtcXVhbGl0eSBuYW1lXG4gKiBpdCBpbmZlcnMgd2hlbiB0aGUgc3BhbiBlbmRzLlxuICpcbiAqIFVzZSB0aGlzIGZ1bmN0aW9uIGluIHNlcnZlciBjb2RlIG9yIHdoZW4geW91ciBzcGFuIGlzIHN0YXJ0ZWQgb24gdGhlIHNlcnZlclxuICogYW5kIG9uIHRoZSBjbGllbnQgKGJyb3dzZXIpLiBJZiB5b3Ugb25seSB1cGRhdGUgYSBzcGFuIG5hbWUgb24gdGhlIGNsaWVudCxcbiAqIHlvdSBjYW4gYWxzbyB1c2UgYHNwYW4udXBkYXRlTmFtZSgpYCB0aGUgU0RLIGRvZXMgbm90IG92ZXJ3cml0ZSB0aGUgbmFtZS5cbiAqXG4gKiBAcGFyYW0gc3BhbiAtIFRoZSBzcGFuIHRvIHVwZGF0ZSB0aGUgbmFtZSBvZi5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgdG8gc2V0IG9uIHRoZSBzcGFuLlxuICovXG5mdW5jdGlvbiB1cGRhdGVTcGFuTmFtZShzcGFuLCBuYW1lKSB7XG4gIHNwYW4udXBkYXRlTmFtZShuYW1lKTtcbiAgc3Bhbi5zZXRBdHRyaWJ1dGVzKHtcbiAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0VdOiAnY3VzdG9tJyxcbiAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9DVVNUT01fU1BBTl9OQU1FXTogbmFtZSxcbiAgfSk7XG59XG5cbmV4cG9ydCB7IFRSQUNFX0ZMQUdfTk9ORSwgVFJBQ0VfRkxBR19TQU1QTEVELCBhZGRDaGlsZFNwYW5Ub1NwYW4sIGNvbnZlcnRTcGFuTGlua3NGb3JFbnZlbG9wZSwgZ2V0QWN0aXZlU3BhbiwgZ2V0Um9vdFNwYW4sIGdldFNwYW5EZXNjZW5kYW50cywgZ2V0U3RhdHVzTWVzc2FnZSwgcmVtb3ZlQ2hpbGRTcGFuRnJvbVNwYW4sIHNob3dTcGFuRHJvcFdhcm5pbmcsIHNwYW5Jc1NhbXBsZWQsIHNwYW5UaW1lSW5wdXRUb1NlY29uZHMsIHNwYW5Ub0pTT04sIHNwYW5Ub1RyYWNlQ29udGV4dCwgc3BhblRvVHJhY2VIZWFkZXIsIHNwYW5Ub1RyYW5zYWN0aW9uVHJhY2VDb250ZXh0LCB1cGRhdGVTcGFuTmFtZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3BhblV0aWxzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/stacktrace.js":
/*!********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/stacktrace.js ***!
  \********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   UNKNOWN_FUNCTION: () => (/* binding */ UNKNOWN_FUNCTION),\n/* harmony export */   createStackParser: () => (/* binding */ createStackParser),\n/* harmony export */   getFramesFromEvent: () => (/* binding */ getFramesFromEvent),\n/* harmony export */   getFunctionName: () => (/* binding */ getFunctionName),\n/* harmony export */   stackParserFromStackParserOptions: () => (/* binding */ stackParserFromStackParserOptions),\n/* harmony export */   stripSentryFramesAndReverse: () => (/* binding */ stripSentryFramesAndReverse)\n/* harmony export */ });\nconst STACKTRACE_FRAME_LIMIT = 50;\nconst UNKNOWN_FUNCTION = '?';\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nfunction createStackParser(...parsers) {\n  const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n  return (stack, skipFirstLines = 0, framesToPop = 0) => {\n    const frames = [];\n    const lines = stack.split('\\n');\n\n    for (let i = skipFirstLines; i < lines.length; i++) {\n      const line = lines[i] ;\n      // Ignore lines over 1kb as they are unlikely to be stack frames.\n      // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n      // input size. Huge strings can result in hangs/Denial of Service:\n      // https://github.com/getsentry/sentry-javascript/issues/2286\n      if (line.length > 1024) {\n        continue;\n      }\n\n      // https://github.com/getsentry/sentry-javascript/issues/5459\n      // Remove webpack (error: *) wrappers\n      const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n      // https://github.com/getsentry/sentry-javascript/issues/7813\n      // Skip Error: lines\n      if (cleanedLine.match(/\\S*Error: /)) {\n        continue;\n      }\n\n      for (const parser of sortedParsers) {\n        const frame = parser(cleanedLine);\n\n        if (frame) {\n          frames.push(frame);\n          break;\n        }\n      }\n\n      if (frames.length >= STACKTRACE_FRAME_LIMIT + framesToPop) {\n        break;\n      }\n    }\n\n    return stripSentryFramesAndReverse(frames.slice(framesToPop));\n  };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nfunction stackParserFromStackParserOptions(stackParser) {\n  if (Array.isArray(stackParser)) {\n    return createStackParser(...stackParser);\n  }\n  return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nfunction stripSentryFramesAndReverse(stack) {\n  if (!stack.length) {\n    return [];\n  }\n\n  const localStack = Array.from(stack);\n\n  // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n  if (/sentryWrapped/.test(getLastStackFrame(localStack).function || '')) {\n    localStack.pop();\n  }\n\n  // Reversing in the middle of the procedure allows us to just pop the values off the stack\n  localStack.reverse();\n\n  // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n  if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || '')) {\n    localStack.pop();\n\n    // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n    // is produced within the scope itself, making it:\n    //\n    //   Sentry.captureException()\n    //   scope.captureException()\n    //\n    // instead of just the top `Sentry` call itself.\n    // This forces us to possibly strip an additional frame in the exact same was as above.\n    if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || '')) {\n      localStack.pop();\n    }\n  }\n\n  return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n    ...frame,\n    filename: frame.filename || getLastStackFrame(localStack).filename,\n    function: frame.function || UNKNOWN_FUNCTION,\n  }));\n}\n\nfunction getLastStackFrame(arr) {\n  return arr[arr.length - 1] || {};\n}\n\nconst defaultFunctionName = '<anonymous>';\n\n/**\n * Safely extract function name from itself\n */\nfunction getFunctionName(fn) {\n  try {\n    if (!fn || typeof fn !== 'function') {\n      return defaultFunctionName;\n    }\n    return fn.name || defaultFunctionName;\n  } catch {\n    // Just accessing custom props in some Selenium environments\n    // can cause a \"Permission denied\" exception (see raven-js#495).\n    return defaultFunctionName;\n  }\n}\n\n/**\n * Get's stack frames from an event without needing to check for undefined properties.\n */\nfunction getFramesFromEvent(event) {\n  const exception = event.exception;\n\n  if (exception) {\n    const frames = [];\n    try {\n      // @ts-expect-error Object could be undefined\n      exception.values.forEach(value => {\n        // @ts-expect-error Value could be undefined\n        if (value.stacktrace.frames) {\n          // @ts-expect-error Value could be undefined\n          frames.push(...value.stacktrace.frames);\n        }\n      });\n      return frames;\n    } catch {\n      return undefined;\n    }\n  }\n  return undefined;\n}\n\n\n//# sourceMappingURL=stacktrace.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3N0YWNrdHJhY2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxrQkFBa0I7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFb0o7QUFDcEoiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS91dGlscy9zdGFja3RyYWNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IFNUQUNLVFJBQ0VfRlJBTUVfTElNSVQgPSA1MDtcbmNvbnN0IFVOS05PV05fRlVOQ1RJT04gPSAnPyc7XG4vLyBVc2VkIHRvIHNhbml0aXplIHdlYnBhY2sgKGVycm9yOiAqKSB3cmFwcGVkIHN0YWNrIGVycm9yc1xuY29uc3QgV0VCUEFDS19FUlJPUl9SRUdFWFAgPSAvXFwoZXJyb3I6ICguKilcXCkvO1xuY29uc3QgU1RSSVBfRlJBTUVfUkVHRVhQID0gL2NhcHR1cmVNZXNzYWdlfGNhcHR1cmVFeGNlcHRpb24vO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBwYXJzZXIgd2l0aCB0aGUgc3VwcGxpZWQgbGluZSBwYXJzZXJzXG4gKlxuICogU3RhY2tGcmFtZXMgYXJlIHJldHVybmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyIGZvciBTZW50cnkgRXhjZXB0aW9uXG4gKiBmcmFtZXMgYW5kIHdpdGggU2VudHJ5IFNESyBpbnRlcm5hbCBmcmFtZXMgcmVtb3ZlZCBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbVxuICpcbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3RhY2tQYXJzZXIoLi4ucGFyc2Vycykge1xuICBjb25zdCBzb3J0ZWRQYXJzZXJzID0gcGFyc2Vycy5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSkubWFwKHAgPT4gcFsxXSk7XG5cbiAgcmV0dXJuIChzdGFjaywgc2tpcEZpcnN0TGluZXMgPSAwLCBmcmFtZXNUb1BvcCA9IDApID0+IHtcbiAgICBjb25zdCBmcmFtZXMgPSBbXTtcbiAgICBjb25zdCBsaW5lcyA9IHN0YWNrLnNwbGl0KCdcXG4nKTtcblxuICAgIGZvciAobGV0IGkgPSBza2lwRmlyc3RMaW5lczsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBsaW5lID0gbGluZXNbaV0gO1xuICAgICAgLy8gSWdub3JlIGxpbmVzIG92ZXIgMWtiIGFzIHRoZXkgYXJlIHVubGlrZWx5IHRvIGJlIHN0YWNrIGZyYW1lcy5cbiAgICAgIC8vIE1hbnkgb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdXNlIGJhY2t0cmFja2luZyB3aGljaCByZXN1bHRzIGluIHJ1biB0aW1lIHRoYXQgaW5jcmVhc2VzIGV4cG9uZW50aWFsbHkgd2l0aFxuICAgICAgLy8gaW5wdXQgc2l6ZS4gSHVnZSBzdHJpbmdzIGNhbiByZXN1bHQgaW4gaGFuZ3MvRGVuaWFsIG9mIFNlcnZpY2U6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yMjg2XG4gICAgICBpZiAobGluZS5sZW5ndGggPiAxMDI0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy81NDU5XG4gICAgICAvLyBSZW1vdmUgd2VicGFjayAoZXJyb3I6ICopIHdyYXBwZXJzXG4gICAgICBjb25zdCBjbGVhbmVkTGluZSA9IFdFQlBBQ0tfRVJST1JfUkVHRVhQLnRlc3QobGluZSkgPyBsaW5lLnJlcGxhY2UoV0VCUEFDS19FUlJPUl9SRUdFWFAsICckMScpIDogbGluZTtcblxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvNzgxM1xuICAgICAgLy8gU2tpcCBFcnJvcjogbGluZXNcbiAgICAgIGlmIChjbGVhbmVkTGluZS5tYXRjaCgvXFxTKkVycm9yOiAvKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBwYXJzZXIgb2Ygc29ydGVkUGFyc2Vycykge1xuICAgICAgICBjb25zdCBmcmFtZSA9IHBhcnNlcihjbGVhbmVkTGluZSk7XG5cbiAgICAgICAgaWYgKGZyYW1lKSB7XG4gICAgICAgICAgZnJhbWVzLnB1c2goZnJhbWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmcmFtZXMubGVuZ3RoID49IFNUQUNLVFJBQ0VfRlJBTUVfTElNSVQgKyBmcmFtZXNUb1BvcCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RyaXBTZW50cnlGcmFtZXNBbmRSZXZlcnNlKGZyYW1lcy5zbGljZShmcmFtZXNUb1BvcCkpO1xuICB9O1xufVxuXG4vKipcbiAqIEdldHMgYSBzdGFjayBwYXJzZXIgaW1wbGVtZW50YXRpb24gZnJvbSBPcHRpb25zLnN0YWNrUGFyc2VyXG4gKiBAc2VlIE9wdGlvbnNcbiAqXG4gKiBJZiBvcHRpb25zIGNvbnRhaW5zIGFuIGFycmF5IG9mIGxpbmUgcGFyc2VycywgaXQgaXMgY29udmVydGVkIGludG8gYSBwYXJzZXJcbiAqL1xuZnVuY3Rpb24gc3RhY2tQYXJzZXJGcm9tU3RhY2tQYXJzZXJPcHRpb25zKHN0YWNrUGFyc2VyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHN0YWNrUGFyc2VyKSkge1xuICAgIHJldHVybiBjcmVhdGVTdGFja1BhcnNlciguLi5zdGFja1BhcnNlcik7XG4gIH1cbiAgcmV0dXJuIHN0YWNrUGFyc2VyO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgU2VudHJ5IGZyYW1lcyBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgc3RhY2sgaWYgcHJlc2VudCBhbmQgZW5mb3JjZXMgYSBsaW1pdCBvZiBtYXggbnVtYmVyIG9mIGZyYW1lcy5cbiAqIEFzc3VtZXMgc3RhY2sgaW5wdXQgaXMgb3JkZXJlZCBmcm9tIHRvcCB0byBib3R0b20gYW5kIHJldHVybnMgdGhlIHJldmVyc2UgcmVwcmVzZW50YXRpb24gc28gY2FsbCBzaXRlIG9mIHRoZVxuICogZnVuY3Rpb24gdGhhdCBjYXVzZWQgdGhlIGNyYXNoIGlzIHRoZSBsYXN0IGZyYW1lIGluIHRoZSBhcnJheS5cbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gc3RyaXBTZW50cnlGcmFtZXNBbmRSZXZlcnNlKHN0YWNrKSB7XG4gIGlmICghc3RhY2subGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgbG9jYWxTdGFjayA9IEFycmF5LmZyb20oc3RhY2spO1xuXG4gIC8vIElmIHN0YWNrIHN0YXJ0cyB3aXRoIG9uZSBvZiBvdXIgQVBJIGNhbGxzLCByZW1vdmUgaXQgKHN0YXJ0cywgbWVhbmluZyBpdCdzIHRoZSB0b3Agb2YgdGhlIHN0YWNrIC0gYWthIGxhc3QgY2FsbClcbiAgaWYgKC9zZW50cnlXcmFwcGVkLy50ZXN0KGdldExhc3RTdGFja0ZyYW1lKGxvY2FsU3RhY2spLmZ1bmN0aW9uIHx8ICcnKSkge1xuICAgIGxvY2FsU3RhY2sucG9wKCk7XG4gIH1cblxuICAvLyBSZXZlcnNpbmcgaW4gdGhlIG1pZGRsZSBvZiB0aGUgcHJvY2VkdXJlIGFsbG93cyB1cyB0byBqdXN0IHBvcCB0aGUgdmFsdWVzIG9mZiB0aGUgc3RhY2tcbiAgbG9jYWxTdGFjay5yZXZlcnNlKCk7XG5cbiAgLy8gSWYgc3RhY2sgZW5kcyB3aXRoIG9uZSBvZiBvdXIgaW50ZXJuYWwgQVBJIGNhbGxzLCByZW1vdmUgaXQgKGVuZHMsIG1lYW5pbmcgaXQncyB0aGUgYm90dG9tIG9mIHRoZSBzdGFjayAtIGFrYSB0b3AtbW9zdCBjYWxsKVxuICBpZiAoU1RSSVBfRlJBTUVfUkVHRVhQLnRlc3QoZ2V0TGFzdFN0YWNrRnJhbWUobG9jYWxTdGFjaykuZnVuY3Rpb24gfHwgJycpKSB7XG4gICAgbG9jYWxTdGFjay5wb3AoKTtcblxuICAgIC8vIFdoZW4gdXNpbmcgc3ludGhldGljIGV2ZW50cywgd2Ugd2lsbCBoYXZlIGEgMiBsZXZlbHMgZGVlcCBzdGFjaywgYXMgYG5ldyBFcnJvcignU2VudHJ5IHN5bnRoZXRpY0V4Y2VwdGlvbicpYFxuICAgIC8vIGlzIHByb2R1Y2VkIHdpdGhpbiB0aGUgc2NvcGUgaXRzZWxmLCBtYWtpbmcgaXQ6XG4gICAgLy9cbiAgICAvLyAgIFNlbnRyeS5jYXB0dXJlRXhjZXB0aW9uKClcbiAgICAvLyAgIHNjb3BlLmNhcHR1cmVFeGNlcHRpb24oKVxuICAgIC8vXG4gICAgLy8gaW5zdGVhZCBvZiBqdXN0IHRoZSB0b3AgYFNlbnRyeWAgY2FsbCBpdHNlbGYuXG4gICAgLy8gVGhpcyBmb3JjZXMgdXMgdG8gcG9zc2libHkgc3RyaXAgYW4gYWRkaXRpb25hbCBmcmFtZSBpbiB0aGUgZXhhY3Qgc2FtZSB3YXMgYXMgYWJvdmUuXG4gICAgaWYgKFNUUklQX0ZSQU1FX1JFR0VYUC50ZXN0KGdldExhc3RTdGFja0ZyYW1lKGxvY2FsU3RhY2spLmZ1bmN0aW9uIHx8ICcnKSkge1xuICAgICAgbG9jYWxTdGFjay5wb3AoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbG9jYWxTdGFjay5zbGljZSgwLCBTVEFDS1RSQUNFX0ZSQU1FX0xJTUlUKS5tYXAoZnJhbWUgPT4gKHtcbiAgICAuLi5mcmFtZSxcbiAgICBmaWxlbmFtZTogZnJhbWUuZmlsZW5hbWUgfHwgZ2V0TGFzdFN0YWNrRnJhbWUobG9jYWxTdGFjaykuZmlsZW5hbWUsXG4gICAgZnVuY3Rpb246IGZyYW1lLmZ1bmN0aW9uIHx8IFVOS05PV05fRlVOQ1RJT04sXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gZ2V0TGFzdFN0YWNrRnJhbWUoYXJyKSB7XG4gIHJldHVybiBhcnJbYXJyLmxlbmd0aCAtIDFdIHx8IHt9O1xufVxuXG5jb25zdCBkZWZhdWx0RnVuY3Rpb25OYW1lID0gJzxhbm9ueW1vdXM+JztcblxuLyoqXG4gKiBTYWZlbHkgZXh0cmFjdCBmdW5jdGlvbiBuYW1lIGZyb20gaXRzZWxmXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmN0aW9uTmFtZShmbikge1xuICB0cnkge1xuICAgIGlmICghZm4gfHwgdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdEZ1bmN0aW9uTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLm5hbWUgfHwgZGVmYXVsdEZ1bmN0aW9uTmFtZTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gSnVzdCBhY2Nlc3NpbmcgY3VzdG9tIHByb3BzIGluIHNvbWUgU2VsZW5pdW0gZW52aXJvbm1lbnRzXG4gICAgLy8gY2FuIGNhdXNlIGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGV4Y2VwdGlvbiAoc2VlIHJhdmVuLWpzIzQ5NSkuXG4gICAgcmV0dXJuIGRlZmF1bHRGdW5jdGlvbk5hbWU7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQncyBzdGFjayBmcmFtZXMgZnJvbSBhbiBldmVudCB3aXRob3V0IG5lZWRpbmcgdG8gY2hlY2sgZm9yIHVuZGVmaW5lZCBwcm9wZXJ0aWVzLlxuICovXG5mdW5jdGlvbiBnZXRGcmFtZXNGcm9tRXZlbnQoZXZlbnQpIHtcbiAgY29uc3QgZXhjZXB0aW9uID0gZXZlbnQuZXhjZXB0aW9uO1xuXG4gIGlmIChleGNlcHRpb24pIHtcbiAgICBjb25zdCBmcmFtZXMgPSBbXTtcbiAgICB0cnkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBPYmplY3QgY291bGQgYmUgdW5kZWZpbmVkXG4gICAgICBleGNlcHRpb24udmFsdWVzLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFZhbHVlIGNvdWxkIGJlIHVuZGVmaW5lZFxuICAgICAgICBpZiAodmFsdWUuc3RhY2t0cmFjZS5mcmFtZXMpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFZhbHVlIGNvdWxkIGJlIHVuZGVmaW5lZFxuICAgICAgICAgIGZyYW1lcy5wdXNoKC4uLnZhbHVlLnN0YWNrdHJhY2UuZnJhbWVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnJhbWVzO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IHsgVU5LTk9XTl9GVU5DVElPTiwgY3JlYXRlU3RhY2tQYXJzZXIsIGdldEZyYW1lc0Zyb21FdmVudCwgZ2V0RnVuY3Rpb25OYW1lLCBzdGFja1BhcnNlckZyb21TdGFja1BhcnNlck9wdGlvbnMsIHN0cmlwU2VudHJ5RnJhbWVzQW5kUmV2ZXJzZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RhY2t0cmFjZS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/stacktrace.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/string.js":
/*!****************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/string.js ***!
  \****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   isMatchingPattern: () => (/* binding */ isMatchingPattern),\n/* harmony export */   safeJoin: () => (/* binding */ safeJoin),\n/* harmony export */   snipLine: () => (/* binding */ snipLine),\n/* harmony export */   stringMatchesSomePattern: () => (/* binding */ stringMatchesSomePattern),\n/* harmony export */   truncate: () => (/* binding */ truncate)\n/* harmony export */ });\n/* harmony import */ var _is_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nfunction truncate(str, max = 0) {\n  if (typeof str !== 'string' || max === 0) {\n    return str;\n  }\n  return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nfunction snipLine(line, colno) {\n  let newLine = line;\n  const lineLength = newLine.length;\n  if (lineLength <= 150) {\n    return newLine;\n  }\n  if (colno > lineLength) {\n    // eslint-disable-next-line no-param-reassign\n    colno = lineLength;\n  }\n\n  let start = Math.max(colno - 60, 0);\n  if (start < 5) {\n    start = 0;\n  }\n\n  let end = Math.min(start + 140, lineLength);\n  if (end > lineLength - 5) {\n    end = lineLength;\n  }\n  if (end === lineLength) {\n    start = Math.max(end - 140, 0);\n  }\n\n  newLine = newLine.slice(start, end);\n  if (start > 0) {\n    newLine = `'{snip} ${newLine}`;\n  }\n  if (end < lineLength) {\n    newLine += ' {snip}';\n  }\n\n  return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\nfunction safeJoin(input, delimiter) {\n  if (!Array.isArray(input)) {\n    return '';\n  }\n\n  const output = [];\n  // eslint-disable-next-line @typescript-eslint/prefer-for-of\n  for (let i = 0; i < input.length; i++) {\n    const value = input[i];\n    try {\n      // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n      // console warnings. This happens when a Vue template is rendered with\n      // an undeclared variable, which we try to stringify, ultimately causing\n      // Vue to issue another warning which repeats indefinitely.\n      // see: https://github.com/getsentry/sentry-javascript/pull/8981\n      if ((0,_is_js__WEBPACK_IMPORTED_MODULE_0__.isVueViewModel)(value)) {\n        output.push('[VueViewModel]');\n      } else {\n        output.push(String(value));\n      }\n    } catch {\n      output.push('[value cannot be serialized]');\n    }\n  }\n\n  return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nfunction isMatchingPattern(\n  value,\n  pattern,\n  requireExactStringMatch = false,\n) {\n  if (!(0,_is_js__WEBPACK_IMPORTED_MODULE_0__.isString)(value)) {\n    return false;\n  }\n\n  if ((0,_is_js__WEBPACK_IMPORTED_MODULE_0__.isRegExp)(pattern)) {\n    return pattern.test(value);\n  }\n  if ((0,_is_js__WEBPACK_IMPORTED_MODULE_0__.isString)(pattern)) {\n    return requireExactStringMatch ? value === pattern : value.includes(pattern);\n  }\n\n  return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nfunction stringMatchesSomePattern(\n  testString,\n  patterns = [],\n  requireExactStringMatch = false,\n) {\n  return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n\n\n//# sourceMappingURL=string.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3N0cmluZy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBNkQ7O0FBRTdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0Msa0JBQWtCO0FBQ3hEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLE1BQU0sRUFBRSxRQUFRO0FBQ2pDO0FBQ0E7QUFDQSxrQkFBa0IsS0FBSztBQUN2Qjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0Isa0JBQWtCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxzREFBYztBQUN4QjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxnREFBUTtBQUNmO0FBQ0E7O0FBRUEsTUFBTSxnREFBUTtBQUNkO0FBQ0E7QUFDQSxNQUFNLGdEQUFRO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRXFGO0FBQ3JGIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzU3RyaW5nLCBpc1JlZ0V4cCwgaXNWdWVWaWV3TW9kZWwgfSBmcm9tICcuL2lzLmpzJztcblxuLyoqXG4gKiBUcnVuY2F0ZXMgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBtYXhpbXVtIGNoYXJhY3RlcnMgY291bnRcbiAqXG4gKiBAcGFyYW0gc3RyIEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlcmlhbGl6YWJsZSB2YWx1ZXNcbiAqIEBwYXJhbSBtYXggTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0cnVuY2F0ZWQgc3RyaW5nICgwID0gdW5saW1pdGVkKVxuICogQHJldHVybnMgc3RyaW5nIEVuY29kZWRcbiAqL1xuZnVuY3Rpb24gdHJ1bmNhdGUoc3RyLCBtYXggPSAwKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJyB8fCBtYXggPT09IDApIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHJldHVybiBzdHIubGVuZ3RoIDw9IG1heCA/IHN0ciA6IGAke3N0ci5zbGljZSgwLCBtYXgpfS4uLmA7XG59XG5cbi8qKlxuICogVGhpcyBpcyBiYXNpY2FsbHkganVzdCBgdHJpbV9saW5lYCBmcm9tXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS9ibG9iL21hc3Rlci9zcmMvc2VudHJ5L2xhbmcvamF2YXNjcmlwdC9wcm9jZXNzb3IucHkjTDY3XG4gKlxuICogQHBhcmFtIHN0ciBBbiBvYmplY3QgdGhhdCBjb250YWlucyBzZXJpYWxpemFibGUgdmFsdWVzXG4gKiBAcGFyYW0gbWF4IE1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdHJ1bmNhdGVkIHN0cmluZ1xuICogQHJldHVybnMgc3RyaW5nIEVuY29kZWRcbiAqL1xuZnVuY3Rpb24gc25pcExpbmUobGluZSwgY29sbm8pIHtcbiAgbGV0IG5ld0xpbmUgPSBsaW5lO1xuICBjb25zdCBsaW5lTGVuZ3RoID0gbmV3TGluZS5sZW5ndGg7XG4gIGlmIChsaW5lTGVuZ3RoIDw9IDE1MCkge1xuICAgIHJldHVybiBuZXdMaW5lO1xuICB9XG4gIGlmIChjb2xubyA+IGxpbmVMZW5ndGgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBjb2xubyA9IGxpbmVMZW5ndGg7XG4gIH1cblxuICBsZXQgc3RhcnQgPSBNYXRoLm1heChjb2xubyAtIDYwLCAwKTtcbiAgaWYgKHN0YXJ0IDwgNSkge1xuICAgIHN0YXJ0ID0gMDtcbiAgfVxuXG4gIGxldCBlbmQgPSBNYXRoLm1pbihzdGFydCArIDE0MCwgbGluZUxlbmd0aCk7XG4gIGlmIChlbmQgPiBsaW5lTGVuZ3RoIC0gNSkge1xuICAgIGVuZCA9IGxpbmVMZW5ndGg7XG4gIH1cbiAgaWYgKGVuZCA9PT0gbGluZUxlbmd0aCkge1xuICAgIHN0YXJ0ID0gTWF0aC5tYXgoZW5kIC0gMTQwLCAwKTtcbiAgfVxuXG4gIG5ld0xpbmUgPSBuZXdMaW5lLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICBpZiAoc3RhcnQgPiAwKSB7XG4gICAgbmV3TGluZSA9IGAne3NuaXB9ICR7bmV3TGluZX1gO1xuICB9XG4gIGlmIChlbmQgPCBsaW5lTGVuZ3RoKSB7XG4gICAgbmV3TGluZSArPSAnIHtzbmlwfSc7XG4gIH1cblxuICByZXR1cm4gbmV3TGluZTtcbn1cblxuLyoqXG4gKiBKb2luIHZhbHVlcyBpbiBhcnJheVxuICogQHBhcmFtIGlucHV0IGFycmF5IG9mIHZhbHVlcyB0byBiZSBqb2luZWQgdG9nZXRoZXJcbiAqIEBwYXJhbSBkZWxpbWl0ZXIgc3RyaW5nIHRvIGJlIHBsYWNlZCBpbi1iZXR3ZWVuIHZhbHVlc1xuICogQHJldHVybnMgSm9pbmVkIHZhbHVlc1xuICovXG5mdW5jdGlvbiBzYWZlSm9pbihpbnB1dCwgZGVsaW1pdGVyKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBvdXRwdXQgPSBbXTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItZm9yLW9mXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB2YWx1ZSA9IGlucHV0W2ldO1xuICAgIHRyeSB7XG4gICAgICAvLyBUaGlzIGlzIGEgaGFjayB0byBmaXggYSBWdWUzLXNwZWNpZmljIGJ1ZyB0aGF0IGNhdXNlcyBhbiBpbmZpbml0ZSBsb29wIG9mXG4gICAgICAvLyBjb25zb2xlIHdhcm5pbmdzLiBUaGlzIGhhcHBlbnMgd2hlbiBhIFZ1ZSB0ZW1wbGF0ZSBpcyByZW5kZXJlZCB3aXRoXG4gICAgICAvLyBhbiB1bmRlY2xhcmVkIHZhcmlhYmxlLCB3aGljaCB3ZSB0cnkgdG8gc3RyaW5naWZ5LCB1bHRpbWF0ZWx5IGNhdXNpbmdcbiAgICAgIC8vIFZ1ZSB0byBpc3N1ZSBhbm90aGVyIHdhcm5pbmcgd2hpY2ggcmVwZWF0cyBpbmRlZmluaXRlbHkuXG4gICAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvcHVsbC84OTgxXG4gICAgICBpZiAoaXNWdWVWaWV3TW9kZWwodmFsdWUpKSB7XG4gICAgICAgIG91dHB1dC5wdXNoKCdbVnVlVmlld01vZGVsXScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0LnB1c2goU3RyaW5nKHZhbHVlKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICBvdXRwdXQucHVzaCgnW3ZhbHVlIGNhbm5vdCBiZSBzZXJpYWxpemVkXScpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvdXRwdXQuam9pbihkZWxpbWl0ZXIpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgbWF0Y2hlcyBhIHJlZ2V4IG9yIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgc3RyaW5nIHRvIHRlc3RcbiAqIEBwYXJhbSBwYXR0ZXJuIEVpdGhlciBhIHJlZ2V4IG9yIGEgc3RyaW5nIGFnYWluc3Qgd2hpY2ggYHZhbHVlYCB3aWxsIGJlIG1hdGNoZWRcbiAqIEBwYXJhbSByZXF1aXJlRXhhY3RTdHJpbmdNYXRjaCBJZiB0cnVlLCBgdmFsdWVgIG11c3QgbWF0Y2ggYHBhdHRlcm5gIGV4YWN0bHkuIElmIGZhbHNlLCBgdmFsdWVgIHdpbGwgbWF0Y2hcbiAqIGBwYXR0ZXJuYCBpZiBpdCBjb250YWlucyBgcGF0dGVybmAuIE9ubHkgYXBwbGllcyB0byBzdHJpbmctdHlwZSBwYXR0ZXJucy5cbiAqL1xuZnVuY3Rpb24gaXNNYXRjaGluZ1BhdHRlcm4oXG4gIHZhbHVlLFxuICBwYXR0ZXJuLFxuICByZXF1aXJlRXhhY3RTdHJpbmdNYXRjaCA9IGZhbHNlLFxuKSB7XG4gIGlmICghaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzUmVnRXhwKHBhdHRlcm4pKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4udGVzdCh2YWx1ZSk7XG4gIH1cbiAgaWYgKGlzU3RyaW5nKHBhdHRlcm4pKSB7XG4gICAgcmV0dXJuIHJlcXVpcmVFeGFjdFN0cmluZ01hdGNoID8gdmFsdWUgPT09IHBhdHRlcm4gOiB2YWx1ZS5pbmNsdWRlcyhwYXR0ZXJuKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBUZXN0IHRoZSBnaXZlbiBzdHJpbmcgYWdhaW5zdCBhbiBhcnJheSBvZiBzdHJpbmdzIGFuZCByZWdleGVzLiBCeSBkZWZhdWx0LCBzdHJpbmcgbWF0Y2hpbmcgaXMgZG9uZSBvbiBhXG4gKiBzdWJzdHJpbmctaW5jbHVzaW9uIGJhc2lzIHJhdGhlciB0aGFuIGEgc3RyaWN0IGVxdWFsaXR5IGJhc2lzXG4gKlxuICogQHBhcmFtIHRlc3RTdHJpbmcgVGhlIHN0cmluZyB0byB0ZXN0XG4gKiBAcGFyYW0gcGF0dGVybnMgVGhlIHBhdHRlcm5zIGFnYWluc3Qgd2hpY2ggdG8gdGVzdCB0aGUgc3RyaW5nXG4gKiBAcGFyYW0gcmVxdWlyZUV4YWN0U3RyaW5nTWF0Y2ggSWYgdHJ1ZSwgYHRlc3RTdHJpbmdgIG11c3QgbWF0Y2ggb25lIG9mIHRoZSBnaXZlbiBzdHJpbmcgcGF0dGVybnMgZXhhY3RseSBpbiBvcmRlciB0b1xuICogY291bnQuIElmIGZhbHNlLCBgdGVzdFN0cmluZ2Agd2lsbCBtYXRjaCBhIHN0cmluZyBwYXR0ZXJuIGlmIGl0IGNvbnRhaW5zIHRoYXQgcGF0dGVybi5cbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ01hdGNoZXNTb21lUGF0dGVybihcbiAgdGVzdFN0cmluZyxcbiAgcGF0dGVybnMgPSBbXSxcbiAgcmVxdWlyZUV4YWN0U3RyaW5nTWF0Y2ggPSBmYWxzZSxcbikge1xuICByZXR1cm4gcGF0dGVybnMuc29tZShwYXR0ZXJuID0+IGlzTWF0Y2hpbmdQYXR0ZXJuKHRlc3RTdHJpbmcsIHBhdHRlcm4sIHJlcXVpcmVFeGFjdFN0cmluZ01hdGNoKSk7XG59XG5cbmV4cG9ydCB7IGlzTWF0Y2hpbmdQYXR0ZXJuLCBzYWZlSm9pbiwgc25pcExpbmUsIHN0cmluZ01hdGNoZXNTb21lUGF0dGVybiwgdHJ1bmNhdGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0cmluZy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/string.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/supports.js":
/*!******************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/supports.js ***!
  \******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   isNativeFunction: () => (/* binding */ isNativeFunction),\n/* harmony export */   supportsDOMError: () => (/* binding */ supportsDOMError),\n/* harmony export */   supportsDOMException: () => (/* binding */ supportsDOMException),\n/* harmony export */   supportsErrorEvent: () => (/* binding */ supportsErrorEvent),\n/* harmony export */   supportsFetch: () => (/* binding */ supportsFetch),\n/* harmony export */   supportsHistory: () => (/* binding */ supportsHistory),\n/* harmony export */   supportsNativeFetch: () => (/* binding */ supportsNativeFetch),\n/* harmony export */   supportsReferrerPolicy: () => (/* binding */ supportsReferrerPolicy),\n/* harmony export */   supportsReportingObserver: () => (/* binding */ supportsReportingObserver)\n/* harmony export */ });\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/debug-build.js\");\n/* harmony import */ var _debug_logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _worldwide_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n\n\n\n\nconst WINDOW = _worldwide_js__WEBPACK_IMPORTED_MODULE_2__.GLOBAL_OBJ ;\n\n/**\n * Tells whether current environment supports ErrorEvent objects\n * {@link supportsErrorEvent}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsErrorEvent() {\n  try {\n    new ErrorEvent('');\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports DOMError objects\n * {@link supportsDOMError}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsDOMError() {\n  try {\n    // Chrome: VM89:1 Uncaught TypeError: Failed to construct 'DOMError':\n    // 1 argument required, but only 0 present.\n    // @ts-expect-error It really needs 1 argument, not 0.\n    new DOMError('');\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports DOMException objects\n * {@link supportsDOMException}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsDOMException() {\n  try {\n    new DOMException('');\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Tells whether current environment supports History API\n * {@link supportsHistory}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsHistory() {\n  return 'history' in WINDOW && !!WINDOW.history;\n}\n\n/**\n * Tells whether current environment supports Fetch API\n * {@link supportsFetch}.\n *\n * @returns Answer to the given question.\n * @deprecated This is no longer used and will be removed in a future major version.\n */\nconst supportsFetch = _isFetchSupported;\n\nfunction _isFetchSupported() {\n  if (!('fetch' in WINDOW)) {\n    return false;\n  }\n\n  try {\n    new Headers();\n    new Request('http://www.example.com');\n    new Response();\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * isNative checks if the given function is a native implementation\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction isNativeFunction(func) {\n  return func && /^function\\s+\\w+\\(\\)\\s+\\{\\s+\\[native code\\]\\s+\\}$/.test(func.toString());\n}\n\n/**\n * Tells whether current environment supports Fetch API natively\n * {@link supportsNativeFetch}.\n *\n * @returns true if `window.fetch` is natively implemented, false otherwise\n */\nfunction supportsNativeFetch() {\n  if (typeof EdgeRuntime === 'string') {\n    return true;\n  }\n\n  if (!_isFetchSupported()) {\n    return false;\n  }\n\n  // Fast path to avoid DOM I/O\n  // eslint-disable-next-line @typescript-eslint/unbound-method\n  if (isNativeFunction(WINDOW.fetch)) {\n    return true;\n  }\n\n  // window.fetch is implemented, but is polyfilled or already wrapped (e.g: by a chrome extension)\n  // so create a \"pure\" iframe to see if that has native fetch\n  let result = false;\n  const doc = WINDOW.document;\n  // eslint-disable-next-line deprecation/deprecation\n  if (doc && typeof (doc.createElement ) === 'function') {\n    try {\n      const sandbox = doc.createElement('iframe');\n      sandbox.hidden = true;\n      doc.head.appendChild(sandbox);\n      if (sandbox.contentWindow?.fetch) {\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        result = isNativeFunction(sandbox.contentWindow.fetch);\n      }\n      doc.head.removeChild(sandbox);\n    } catch (err) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_0__.DEBUG_BUILD && _debug_logger_js__WEBPACK_IMPORTED_MODULE_1__.debug.warn('Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ', err);\n    }\n  }\n\n  return result;\n}\n\n/**\n * Tells whether current environment supports ReportingObserver API\n * {@link supportsReportingObserver}.\n *\n * @returns Answer to the given question.\n */\nfunction supportsReportingObserver() {\n  return 'ReportingObserver' in WINDOW;\n}\n\n/**\n * Tells whether current environment supports Referrer Policy API\n * {@link supportsReferrerPolicy}.\n *\n * @returns Answer to the given question.\n * @deprecated This is no longer used and will be removed in a future major version.\n */\nfunction supportsReferrerPolicy() {\n  // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default'\n  // (see https://caniuse.com/#feat=referrer-policy),\n  // it doesn't. And it throws an exception instead of ignoring this parameter...\n  // REF: https://github.com/getsentry/raven-js/issues/1233\n\n  if (!_isFetchSupported()) {\n    return false;\n  }\n\n  try {\n    new Request('_', {\n      referrerPolicy: 'origin' ,\n    });\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n\n//# sourceMappingURL=supports.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3N1cHBvcnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFnRDtBQUNOO0FBQ0U7O0FBRTVDLGVBQWUscURBQVU7O0FBRXpCO0FBQ0E7QUFDQSxJQUFJLHlCQUF5QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksdUJBQXVCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSwyQkFBMkI7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLHNCQUFzQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksb0JBQW9CO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyx1QkFBdUI7QUFDakU7O0FBRUE7QUFDQTtBQUNBLElBQUksMEJBQTBCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixNQUFNLHdEQUFXLElBQUksbURBQUs7QUFDMUI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLGdDQUFnQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUksNkJBQTZCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFZ007QUFDaE0iLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS91dGlscy9zdXBwb3J0cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4uL2RlYnVnLWJ1aWxkLmpzJztcbmltcG9ydCB7IGRlYnVnIH0gZnJvbSAnLi9kZWJ1Zy1sb2dnZXIuanMnO1xuaW1wb3J0IHsgR0xPQkFMX09CSiB9IGZyb20gJy4vd29ybGR3aWRlLmpzJztcblxuY29uc3QgV0lORE9XID0gR0xPQkFMX09CSiA7XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIEVycm9yRXZlbnQgb2JqZWN0c1xuICoge0BsaW5rIHN1cHBvcnRzRXJyb3JFdmVudH0uXG4gKlxuICogQHJldHVybnMgQW5zd2VyIHRvIHRoZSBnaXZlbiBxdWVzdGlvbi5cbiAqL1xuZnVuY3Rpb24gc3VwcG9ydHNFcnJvckV2ZW50KCkge1xuICB0cnkge1xuICAgIG5ldyBFcnJvckV2ZW50KCcnKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIERPTUVycm9yIG9iamVjdHNcbiAqIHtAbGluayBzdXBwb3J0c0RPTUVycm9yfS5cbiAqXG4gKiBAcmV0dXJucyBBbnN3ZXIgdG8gdGhlIGdpdmVuIHF1ZXN0aW9uLlxuICovXG5mdW5jdGlvbiBzdXBwb3J0c0RPTUVycm9yKCkge1xuICB0cnkge1xuICAgIC8vIENocm9tZTogVk04OToxIFVuY2F1Z2h0IFR5cGVFcnJvcjogRmFpbGVkIHRvIGNvbnN0cnVjdCAnRE9NRXJyb3InOlxuICAgIC8vIDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IDAgcHJlc2VudC5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEl0IHJlYWxseSBuZWVkcyAxIGFyZ3VtZW50LCBub3QgMC5cbiAgICBuZXcgRE9NRXJyb3IoJycpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBUZWxscyB3aGV0aGVyIGN1cnJlbnQgZW52aXJvbm1lbnQgc3VwcG9ydHMgRE9NRXhjZXB0aW9uIG9iamVjdHNcbiAqIHtAbGluayBzdXBwb3J0c0RPTUV4Y2VwdGlvbn0uXG4gKlxuICogQHJldHVybnMgQW5zd2VyIHRvIHRoZSBnaXZlbiBxdWVzdGlvbi5cbiAqL1xuZnVuY3Rpb24gc3VwcG9ydHNET01FeGNlcHRpb24oKSB7XG4gIHRyeSB7XG4gICAgbmV3IERPTUV4Y2VwdGlvbignJyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgY3VycmVudCBlbnZpcm9ubWVudCBzdXBwb3J0cyBIaXN0b3J5IEFQSVxuICoge0BsaW5rIHN1cHBvcnRzSGlzdG9yeX0uXG4gKlxuICogQHJldHVybnMgQW5zd2VyIHRvIHRoZSBnaXZlbiBxdWVzdGlvbi5cbiAqL1xuZnVuY3Rpb24gc3VwcG9ydHNIaXN0b3J5KCkge1xuICByZXR1cm4gJ2hpc3RvcnknIGluIFdJTkRPVyAmJiAhIVdJTkRPVy5oaXN0b3J5O1xufVxuXG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgY3VycmVudCBlbnZpcm9ubWVudCBzdXBwb3J0cyBGZXRjaCBBUElcbiAqIHtAbGluayBzdXBwb3J0c0ZldGNofS5cbiAqXG4gKiBAcmV0dXJucyBBbnN3ZXIgdG8gdGhlIGdpdmVuIHF1ZXN0aW9uLlxuICogQGRlcHJlY2F0ZWQgVGhpcyBpcyBubyBsb25nZXIgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHZlcnNpb24uXG4gKi9cbmNvbnN0IHN1cHBvcnRzRmV0Y2ggPSBfaXNGZXRjaFN1cHBvcnRlZDtcblxuZnVuY3Rpb24gX2lzRmV0Y2hTdXBwb3J0ZWQoKSB7XG4gIGlmICghKCdmZXRjaCcgaW4gV0lORE9XKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgbmV3IEhlYWRlcnMoKTtcbiAgICBuZXcgUmVxdWVzdCgnaHR0cDovL3d3dy5leGFtcGxlLmNvbScpO1xuICAgIG5ldyBSZXNwb25zZSgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBpc05hdGl2ZSBjaGVja3MgaWYgdGhlIGdpdmVuIGZ1bmN0aW9uIGlzIGEgbmF0aXZlIGltcGxlbWVudGF0aW9uXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG5mdW5jdGlvbiBpc05hdGl2ZUZ1bmN0aW9uKGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmMgJiYgL15mdW5jdGlvblxccytcXHcrXFwoXFwpXFxzK1xce1xccytcXFtuYXRpdmUgY29kZVxcXVxccytcXH0kLy50ZXN0KGZ1bmMudG9TdHJpbmcoKSk7XG59XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIEZldGNoIEFQSSBuYXRpdmVseVxuICoge0BsaW5rIHN1cHBvcnRzTmF0aXZlRmV0Y2h9LlxuICpcbiAqIEByZXR1cm5zIHRydWUgaWYgYHdpbmRvdy5mZXRjaGAgaXMgbmF0aXZlbHkgaW1wbGVtZW50ZWQsIGZhbHNlIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBzdXBwb3J0c05hdGl2ZUZldGNoKCkge1xuICBpZiAodHlwZW9mIEVkZ2VSdW50aW1lID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKCFfaXNGZXRjaFN1cHBvcnRlZCgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRmFzdCBwYXRoIHRvIGF2b2lkIERPTSBJL09cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICBpZiAoaXNOYXRpdmVGdW5jdGlvbihXSU5ET1cuZmV0Y2gpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyB3aW5kb3cuZmV0Y2ggaXMgaW1wbGVtZW50ZWQsIGJ1dCBpcyBwb2x5ZmlsbGVkIG9yIGFscmVhZHkgd3JhcHBlZCAoZS5nOiBieSBhIGNocm9tZSBleHRlbnNpb24pXG4gIC8vIHNvIGNyZWF0ZSBhIFwicHVyZVwiIGlmcmFtZSB0byBzZWUgaWYgdGhhdCBoYXMgbmF0aXZlIGZldGNoXG4gIGxldCByZXN1bHQgPSBmYWxzZTtcbiAgY29uc3QgZG9jID0gV0lORE9XLmRvY3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgaWYgKGRvYyAmJiB0eXBlb2YgKGRvYy5jcmVhdGVFbGVtZW50ICkgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2FuZGJveCA9IGRvYy5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICAgIHNhbmRib3guaGlkZGVuID0gdHJ1ZTtcbiAgICAgIGRvYy5oZWFkLmFwcGVuZENoaWxkKHNhbmRib3gpO1xuICAgICAgaWYgKHNhbmRib3guY29udGVudFdpbmRvdz8uZmV0Y2gpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgICAgICByZXN1bHQgPSBpc05hdGl2ZUZ1bmN0aW9uKHNhbmRib3guY29udGVudFdpbmRvdy5mZXRjaCk7XG4gICAgICB9XG4gICAgICBkb2MuaGVhZC5yZW1vdmVDaGlsZChzYW5kYm94KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLndhcm4oJ0NvdWxkIG5vdCBjcmVhdGUgc2FuZGJveCBpZnJhbWUgZm9yIHB1cmUgZmV0Y2ggY2hlY2ssIGJhaWxpbmcgdG8gd2luZG93LmZldGNoOiAnLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIFJlcG9ydGluZ09ic2VydmVyIEFQSVxuICoge0BsaW5rIHN1cHBvcnRzUmVwb3J0aW5nT2JzZXJ2ZXJ9LlxuICpcbiAqIEByZXR1cm5zIEFuc3dlciB0byB0aGUgZ2l2ZW4gcXVlc3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHN1cHBvcnRzUmVwb3J0aW5nT2JzZXJ2ZXIoKSB7XG4gIHJldHVybiAnUmVwb3J0aW5nT2JzZXJ2ZXInIGluIFdJTkRPVztcbn1cblxuLyoqXG4gKiBUZWxscyB3aGV0aGVyIGN1cnJlbnQgZW52aXJvbm1lbnQgc3VwcG9ydHMgUmVmZXJyZXIgUG9saWN5IEFQSVxuICoge0BsaW5rIHN1cHBvcnRzUmVmZXJyZXJQb2xpY3l9LlxuICpcbiAqIEByZXR1cm5zIEFuc3dlciB0byB0aGUgZ2l2ZW4gcXVlc3Rpb24uXG4gKiBAZGVwcmVjYXRlZCBUaGlzIGlzIG5vIGxvbmdlciB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgdmVyc2lvbi5cbiAqL1xuZnVuY3Rpb24gc3VwcG9ydHNSZWZlcnJlclBvbGljeSgpIHtcbiAgLy8gRGVzcGl0ZSBhbGwgc3RhcnMgaW4gdGhlIHNreSBzYXlpbmcgdGhhdCBFZGdlIHN1cHBvcnRzIG9sZCBkcmFmdCBzeW50YXgsIGFrYSAnbmV2ZXInLCAnYWx3YXlzJywgJ29yaWdpbicgYW5kICdkZWZhdWx0J1xuICAvLyAoc2VlIGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9cmVmZXJyZXItcG9saWN5KSxcbiAgLy8gaXQgZG9lc24ndC4gQW5kIGl0IHRocm93cyBhbiBleGNlcHRpb24gaW5zdGVhZCBvZiBpZ25vcmluZyB0aGlzIHBhcmFtZXRlci4uLlxuICAvLyBSRUY6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvcmF2ZW4tanMvaXNzdWVzLzEyMzNcblxuICBpZiAoIV9pc0ZldGNoU3VwcG9ydGVkKCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cnkge1xuICAgIG5ldyBSZXF1ZXN0KCdfJywge1xuICAgICAgcmVmZXJyZXJQb2xpY3k6ICdvcmlnaW4nICxcbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCB7IGlzTmF0aXZlRnVuY3Rpb24sIHN1cHBvcnRzRE9NRXJyb3IsIHN1cHBvcnRzRE9NRXhjZXB0aW9uLCBzdXBwb3J0c0Vycm9yRXZlbnQsIHN1cHBvcnRzRmV0Y2gsIHN1cHBvcnRzSGlzdG9yeSwgc3VwcG9ydHNOYXRpdmVGZXRjaCwgc3VwcG9ydHNSZWZlcnJlclBvbGljeSwgc3VwcG9ydHNSZXBvcnRpbmdPYnNlcnZlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3VwcG9ydHMuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/supports.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/syncpromise.js":
/*!*********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/syncpromise.js ***!
  \*********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   SyncPromise: () => (/* binding */ SyncPromise),\n/* harmony export */   rejectedSyncPromise: () => (/* binding */ rejectedSyncPromise),\n/* harmony export */   resolvedSyncPromise: () => (/* binding */ resolvedSyncPromise)\n/* harmony export */ });\n/* harmony import */ var _is_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./is.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/is.js\");\n\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/** SyncPromise internal states */\nconst STATE_PENDING = 0;\nconst STATE_RESOLVED = 1;\nconst STATE_REJECTED = 2;\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nfunction resolvedSyncPromise(value) {\n  return new SyncPromise(resolve => {\n    resolve(value);\n  });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nfunction rejectedSyncPromise(reason) {\n  return new SyncPromise((_, reject) => {\n    reject(reason);\n  });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise {\n\n   constructor(executor) {\n    this._state = STATE_PENDING;\n    this._handlers = [];\n\n    this._runExecutor(executor);\n  }\n\n  /** @inheritdoc */\n   then(\n    onfulfilled,\n    onrejected,\n  ) {\n    return new SyncPromise((resolve, reject) => {\n      this._handlers.push([\n        false,\n        result => {\n          if (!onfulfilled) {\n            // TODO: ¯\\_(ツ)_/¯\n            // TODO: FIXME\n            resolve(result );\n          } else {\n            try {\n              resolve(onfulfilled(result));\n            } catch (e) {\n              reject(e);\n            }\n          }\n        },\n        reason => {\n          if (!onrejected) {\n            reject(reason);\n          } else {\n            try {\n              resolve(onrejected(reason));\n            } catch (e) {\n              reject(e);\n            }\n          }\n        },\n      ]);\n      this._executeHandlers();\n    });\n  }\n\n  /** @inheritdoc */\n   catch(\n    onrejected,\n  ) {\n    return this.then(val => val, onrejected);\n  }\n\n  /** @inheritdoc */\n   finally(onfinally) {\n    return new SyncPromise((resolve, reject) => {\n      let val;\n      let isRejected;\n\n      return this.then(\n        value => {\n          isRejected = false;\n          val = value;\n          if (onfinally) {\n            onfinally();\n          }\n        },\n        reason => {\n          isRejected = true;\n          val = reason;\n          if (onfinally) {\n            onfinally();\n          }\n        },\n      ).then(() => {\n        if (isRejected) {\n          reject(val);\n          return;\n        }\n\n        resolve(val );\n      });\n    });\n  }\n\n  /** Excute the resolve/reject handlers. */\n   _executeHandlers() {\n    if (this._state === STATE_PENDING) {\n      return;\n    }\n\n    const cachedHandlers = this._handlers.slice();\n    this._handlers = [];\n\n    cachedHandlers.forEach(handler => {\n      if (handler[0]) {\n        return;\n      }\n\n      if (this._state === STATE_RESOLVED) {\n        handler[1](this._value );\n      }\n\n      if (this._state === STATE_REJECTED) {\n        handler[2](this._value);\n      }\n\n      handler[0] = true;\n    });\n  }\n\n  /** Run the executor for the SyncPromise. */\n   _runExecutor(executor) {\n    const setResult = (state, value) => {\n      if (this._state !== STATE_PENDING) {\n        return;\n      }\n\n      if ((0,_is_js__WEBPACK_IMPORTED_MODULE_0__.isThenable)(value)) {\n        void (value ).then(resolve, reject);\n        return;\n      }\n\n      this._state = state;\n      this._value = value;\n\n      this._executeHandlers();\n    };\n\n    const resolve = (value) => {\n      setResult(STATE_RESOLVED, value);\n    };\n\n    const reject = (reason) => {\n      setResult(STATE_REJECTED, reason);\n    };\n\n    try {\n      executor(resolve, reject);\n    } catch (e) {\n      reject(e);\n    }\n  }\n}\n\n\n//# sourceMappingURL=syncpromise.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3N5bmNwcm9taXNlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBcUM7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFVBQVUsa0RBQVU7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRWlFO0FBQ2pFIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvc3luY3Byb21pc2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNUaGVuYWJsZSB9IGZyb20gJy4vaXMuanMnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5cbi8qKiBTeW5jUHJvbWlzZSBpbnRlcm5hbCBzdGF0ZXMgKi9cbmNvbnN0IFNUQVRFX1BFTkRJTkcgPSAwO1xuY29uc3QgU1RBVEVfUkVTT0xWRUQgPSAxO1xuY29uc3QgU1RBVEVfUkVKRUNURUQgPSAyO1xuXG4vKipcbiAqIENyZWF0ZXMgYSByZXNvbHZlZCBzeW5jIHByb21pc2UuXG4gKlxuICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byByZXNvbHZlIHRoZSBwcm9taXNlIHdpdGhcbiAqIEByZXR1cm5zIHRoZSByZXNvbHZlZCBzeW5jIHByb21pc2VcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZWRTeW5jUHJvbWlzZSh2YWx1ZSkge1xuICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHJlc29sdmUodmFsdWUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVqZWN0ZWQgc3luYyBwcm9taXNlLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gcmVqZWN0IHRoZSBwcm9taXNlIHdpdGhcbiAqIEByZXR1cm5zIHRoZSByZWplY3RlZCBzeW5jIHByb21pc2VcbiAqL1xuZnVuY3Rpb24gcmVqZWN0ZWRTeW5jUHJvbWlzZShyZWFzb24pIHtcbiAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgcmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFRoZW5hYmxlIGNsYXNzIHRoYXQgYmVoYXZlcyBsaWtlIGEgUHJvbWlzZSBhbmQgZm9sbG93cyBpdCdzIGludGVyZmFjZVxuICogYnV0IGlzIG5vdCBhc3luYyBpbnRlcm5hbGx5XG4gKi9cbmNsYXNzIFN5bmNQcm9taXNlIHtcblxuICAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9zdGF0ZSA9IFNUQVRFX1BFTkRJTkc7XG4gICAgdGhpcy5faGFuZGxlcnMgPSBbXTtcblxuICAgIHRoaXMuX3J1bkV4ZWN1dG9yKGV4ZWN1dG9yKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgdGhlbihcbiAgICBvbmZ1bGZpbGxlZCxcbiAgICBvbnJlamVjdGVkLFxuICApIHtcbiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX2hhbmRsZXJzLnB1c2goW1xuICAgICAgICBmYWxzZSxcbiAgICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgICBpZiAoIW9uZnVsZmlsbGVkKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiDCr1xcXyjjg4QpXy/Cr1xuICAgICAgICAgICAgLy8gVE9ETzogRklYTUVcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0ICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJlc29sdmUob25mdWxmaWxsZWQocmVzdWx0KSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbiA9PiB7XG4gICAgICAgICAgaWYgKCFvbnJlamVjdGVkKSB7XG4gICAgICAgICAgICByZWplY3QocmVhc29uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShvbnJlamVjdGVkKHJlYXNvbikpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgICB0aGlzLl9leGVjdXRlSGFuZGxlcnMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgY2F0Y2goXG4gICAgb25yZWplY3RlZCxcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbih2YWwgPT4gdmFsLCBvbnJlamVjdGVkKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgZmluYWxseShvbmZpbmFsbHkpIHtcbiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCB2YWw7XG4gICAgICBsZXQgaXNSZWplY3RlZDtcblxuICAgICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgICAgdmFsdWUgPT4ge1xuICAgICAgICAgIGlzUmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICB2YWwgPSB2YWx1ZTtcbiAgICAgICAgICBpZiAob25maW5hbGx5KSB7XG4gICAgICAgICAgICBvbmZpbmFsbHkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbiA9PiB7XG4gICAgICAgICAgaXNSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgdmFsID0gcmVhc29uO1xuICAgICAgICAgIGlmIChvbmZpbmFsbHkpIHtcbiAgICAgICAgICAgIG9uZmluYWxseSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChpc1JlamVjdGVkKSB7XG4gICAgICAgICAgcmVqZWN0KHZhbCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZSh2YWwgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEV4Y3V0ZSB0aGUgcmVzb2x2ZS9yZWplY3QgaGFuZGxlcnMuICovXG4gICBfZXhlY3V0ZUhhbmRsZXJzKCkge1xuICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU1RBVEVfUEVORElORykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNhY2hlZEhhbmRsZXJzID0gdGhpcy5faGFuZGxlcnMuc2xpY2UoKTtcbiAgICB0aGlzLl9oYW5kbGVycyA9IFtdO1xuXG4gICAgY2FjaGVkSGFuZGxlcnMuZm9yRWFjaChoYW5kbGVyID0+IHtcbiAgICAgIGlmIChoYW5kbGVyWzBdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSBTVEFURV9SRVNPTFZFRCkge1xuICAgICAgICBoYW5kbGVyWzFdKHRoaXMuX3ZhbHVlICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU1RBVEVfUkVKRUNURUQpIHtcbiAgICAgICAgaGFuZGxlclsyXSh0aGlzLl92YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXJbMF0gPSB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIFJ1biB0aGUgZXhlY3V0b3IgZm9yIHRoZSBTeW5jUHJvbWlzZS4gKi9cbiAgIF9ydW5FeGVjdXRvcihleGVjdXRvcikge1xuICAgIGNvbnN0IHNldFJlc3VsdCA9IChzdGF0ZSwgdmFsdWUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gU1RBVEVfUEVORElORykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgICB2b2lkICh2YWx1ZSApLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zdGF0ZSA9IHN0YXRlO1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgICAgdGhpcy5fZXhlY3V0ZUhhbmRsZXJzKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc29sdmUgPSAodmFsdWUpID0+IHtcbiAgICAgIHNldFJlc3VsdChTVEFURV9SRVNPTFZFRCwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBjb25zdCByZWplY3QgPSAocmVhc29uKSA9PiB7XG4gICAgICBzZXRSZXN1bHQoU1RBVEVfUkVKRUNURUQsIHJlYXNvbik7XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihyZXNvbHZlLCByZWplY3QpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgU3luY1Byb21pc2UsIHJlamVjdGVkU3luY1Byb21pc2UsIHJlc29sdmVkU3luY1Byb21pc2UgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN5bmNwcm9taXNlLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/syncpromise.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/time.js":
/*!**************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/time.js ***!
  \**************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   browserPerformanceTimeOrigin: () => (/* binding */ browserPerformanceTimeOrigin),\n/* harmony export */   dateTimestampInSeconds: () => (/* binding */ dateTimestampInSeconds),\n/* harmony export */   timestampInSeconds: () => (/* binding */ timestampInSeconds)\n/* harmony export */ });\n/* harmony import */ var _worldwide_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n\n\nconst ONE_SECOND_IN_MS = 1000;\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n */\nfunction dateTimestampInSeconds() {\n  return Date.now() / ONE_SECOND_IN_MS;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction createUnixTimestampInSecondsFunc() {\n  const { performance } = _worldwide_js__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ ;\n  // Some browser and environments don't have a performance or timeOrigin, so we fallback to\n  // using Date.now() to compute the starting time.\n  if (!performance?.now || !performance.timeOrigin) {\n    return dateTimestampInSeconds;\n  }\n\n  const timeOrigin = performance.timeOrigin;\n\n  // performance.now() is a monotonic clock, which means it starts at 0 when the process begins. To get the current\n  // wall clock time (actual UNIX timestamp), we need to add the starting time origin and the current time elapsed.\n  //\n  // TODO: This does not account for the case where the monotonic clock that powers performance.now() drifts from the\n  // wall clock time, which causes the returned timestamp to be inaccurate. We should investigate how to detect and\n  // correct for this.\n  // See: https://github.com/getsentry/sentry-javascript/issues/2590\n  // See: https://github.com/mdn/content/issues/4713\n  // See: https://dev.to/noamr/when-a-millisecond-is-not-a-millisecond-3h6\n  return () => {\n    return (timeOrigin + performance.now()) / ONE_SECOND_IN_MS;\n  };\n}\n\nlet _cachedTimestampInSeconds;\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nfunction timestampInSeconds() {\n  // We store this in a closure so that we don't have to create a new function every time this is called.\n  const func = _cachedTimestampInSeconds ?? (_cachedTimestampInSeconds = createUnixTimestampInSecondsFunc());\n  return func();\n}\n\n/**\n * Cached result of getBrowserTimeOrigin.\n */\nlet cachedTimeOrigin;\n\n/**\n * Gets the time origin and the mode used to determine it.\n */\nfunction getBrowserTimeOrigin() {\n  // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n  // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n  // data as reliable if they are within a reasonable threshold of the current time.\n\n  const { performance } = _worldwide_js__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ ;\n  if (!performance?.now) {\n    return [undefined, 'none'];\n  }\n\n  const threshold = 3600 * 1000;\n  const performanceNow = performance.now();\n  const dateNow = Date.now();\n\n  // if timeOrigin isn't available set delta to threshold so it isn't used\n  const timeOriginDelta = performance.timeOrigin\n    ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n    : threshold;\n  const timeOriginIsReliable = timeOriginDelta < threshold;\n\n  // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n  // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n  // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n  // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n  // Date API.\n  // eslint-disable-next-line deprecation/deprecation\n  const navigationStart = performance.timing?.navigationStart;\n  const hasNavigationStart = typeof navigationStart === 'number';\n  // if navigationStart isn't available set delta to threshold so it isn't used\n  const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n  const navigationStartIsReliable = navigationStartDelta < threshold;\n\n  if (timeOriginIsReliable || navigationStartIsReliable) {\n    // Use the more reliable time origin\n    if (timeOriginDelta <= navigationStartDelta) {\n      return [performance.timeOrigin, 'timeOrigin'];\n    } else {\n      return [navigationStart, 'navigationStart'];\n    }\n  }\n\n  // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n  return [dateNow, 'dateNow'];\n}\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nfunction browserPerformanceTimeOrigin() {\n  if (!cachedTimeOrigin) {\n    cachedTimeOrigin = getBrowserTimeOrigin();\n  }\n\n  return cachedTimeOrigin[0];\n}\n\n\n//# sourceMappingURL=time.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3RpbWUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUE0Qzs7QUFFNUM7O0FBRUE7QUFDQSxxREFBcUQ7QUFDckQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLGNBQWMsRUFBRSxxREFBVTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxjQUFjLEVBQUUscURBQVU7QUFDcEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRW9GO0FBQ3BGIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvdGltZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHTE9CQUxfT0JKIH0gZnJvbSAnLi93b3JsZHdpZGUuanMnO1xuXG5jb25zdCBPTkVfU0VDT05EX0lOX01TID0gMTAwMDtcblxuLyoqXG4gKiBBIHBhcnRpYWwgZGVmaW5pdGlvbiBvZiB0aGUgW1BlcmZvcm1hbmNlIFdlYiBBUElde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9QZXJmb3JtYW5jZX1cbiAqIGZvciBhY2Nlc3NpbmcgYSBoaWdoLXJlc29sdXRpb24gbW9ub3RvbmljIGNsb2NrLlxuICovXG5cbi8qKlxuICogUmV0dXJucyBhIHRpbWVzdGFtcCBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoIHVzaW5nIHRoZSBEYXRlIEFQSS5cbiAqL1xuZnVuY3Rpb24gZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpIHtcbiAgcmV0dXJuIERhdGUubm93KCkgLyBPTkVfU0VDT05EX0lOX01TO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIFBlcmZvcm1hbmNlIEFQSSBicm93c2VyIGltcGxlbWVudGF0aW9uLCBvciB1bmRlZmluZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90XG4gKiBzdXBwb3J0IHRoZSBBUEkuXG4gKlxuICogV3JhcHBpbmcgdGhlIG5hdGl2ZSBBUEkgd29ya3MgYXJvdW5kIGRpZmZlcmVuY2VzIGluIGJlaGF2aW9yIGZyb20gZGlmZmVyZW50IGJyb3dzZXJzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVVbml4VGltZXN0YW1wSW5TZWNvbmRzRnVuYygpIHtcbiAgY29uc3QgeyBwZXJmb3JtYW5jZSB9ID0gR0xPQkFMX09CSiA7XG4gIC8vIFNvbWUgYnJvd3NlciBhbmQgZW52aXJvbm1lbnRzIGRvbid0IGhhdmUgYSBwZXJmb3JtYW5jZSBvciB0aW1lT3JpZ2luLCBzbyB3ZSBmYWxsYmFjayB0b1xuICAvLyB1c2luZyBEYXRlLm5vdygpIHRvIGNvbXB1dGUgdGhlIHN0YXJ0aW5nIHRpbWUuXG4gIGlmICghcGVyZm9ybWFuY2U/Lm5vdyB8fCAhcGVyZm9ybWFuY2UudGltZU9yaWdpbikge1xuICAgIHJldHVybiBkYXRlVGltZXN0YW1wSW5TZWNvbmRzO1xuICB9XG5cbiAgY29uc3QgdGltZU9yaWdpbiA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW47XG5cbiAgLy8gcGVyZm9ybWFuY2Uubm93KCkgaXMgYSBtb25vdG9uaWMgY2xvY2ssIHdoaWNoIG1lYW5zIGl0IHN0YXJ0cyBhdCAwIHdoZW4gdGhlIHByb2Nlc3MgYmVnaW5zLiBUbyBnZXQgdGhlIGN1cnJlbnRcbiAgLy8gd2FsbCBjbG9jayB0aW1lIChhY3R1YWwgVU5JWCB0aW1lc3RhbXApLCB3ZSBuZWVkIHRvIGFkZCB0aGUgc3RhcnRpbmcgdGltZSBvcmlnaW4gYW5kIHRoZSBjdXJyZW50IHRpbWUgZWxhcHNlZC5cbiAgLy9cbiAgLy8gVE9ETzogVGhpcyBkb2VzIG5vdCBhY2NvdW50IGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgbW9ub3RvbmljIGNsb2NrIHRoYXQgcG93ZXJzIHBlcmZvcm1hbmNlLm5vdygpIGRyaWZ0cyBmcm9tIHRoZVxuICAvLyB3YWxsIGNsb2NrIHRpbWUsIHdoaWNoIGNhdXNlcyB0aGUgcmV0dXJuZWQgdGltZXN0YW1wIHRvIGJlIGluYWNjdXJhdGUuIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSBob3cgdG8gZGV0ZWN0IGFuZFxuICAvLyBjb3JyZWN0IGZvciB0aGlzLlxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1OTBcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbWRuL2NvbnRlbnQvaXNzdWVzLzQ3MTNcbiAgLy8gU2VlOiBodHRwczovL2Rldi50by9ub2Ftci93aGVuLWEtbWlsbGlzZWNvbmQtaXMtbm90LWEtbWlsbGlzZWNvbmQtM2g2XG4gIHJldHVybiAoKSA9PiB7XG4gICAgcmV0dXJuICh0aW1lT3JpZ2luICsgcGVyZm9ybWFuY2Uubm93KCkpIC8gT05FX1NFQ09ORF9JTl9NUztcbiAgfTtcbn1cblxubGV0IF9jYWNoZWRUaW1lc3RhbXBJblNlY29uZHM7XG5cbi8qKlxuICogUmV0dXJucyBhIHRpbWVzdGFtcCBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoIHVzaW5nIGVpdGhlciB0aGUgUGVyZm9ybWFuY2Ugb3IgRGF0ZSBBUElzLCBkZXBlbmRpbmcgb24gdGhlXG4gKiBhdmFpbGFiaWxpdHkgb2YgdGhlIFBlcmZvcm1hbmNlIEFQSS5cbiAqXG4gKiBCVUc6IE5vdGUgdGhhdCBiZWNhdXNlIG9mIGhvdyBicm93c2VycyBpbXBsZW1lbnQgdGhlIFBlcmZvcm1hbmNlIEFQSSwgdGhlIGNsb2NrIG1pZ2h0IHN0b3Agd2hlbiB0aGUgY29tcHV0ZXIgaXNcbiAqIGFzbGVlcC4gVGhpcyBjcmVhdGVzIGEgc2tldyBiZXR3ZWVuIGBkYXRlVGltZXN0YW1wSW5TZWNvbmRzYCBhbmQgYHRpbWVzdGFtcEluU2Vjb25kc2AuIFRoZVxuICogc2tldyBjYW4gZ3JvdyB0byBhcmJpdHJhcnkgYW1vdW50cyBsaWtlIGRheXMsIHdlZWtzIG9yIG1vbnRocy5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTkwLlxuICovXG5mdW5jdGlvbiB0aW1lc3RhbXBJblNlY29uZHMoKSB7XG4gIC8vIFdlIHN0b3JlIHRoaXMgaW4gYSBjbG9zdXJlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gZXZlcnkgdGltZSB0aGlzIGlzIGNhbGxlZC5cbiAgY29uc3QgZnVuYyA9IF9jYWNoZWRUaW1lc3RhbXBJblNlY29uZHMgPz8gKF9jYWNoZWRUaW1lc3RhbXBJblNlY29uZHMgPSBjcmVhdGVVbml4VGltZXN0YW1wSW5TZWNvbmRzRnVuYygpKTtcbiAgcmV0dXJuIGZ1bmMoKTtcbn1cblxuLyoqXG4gKiBDYWNoZWQgcmVzdWx0IG9mIGdldEJyb3dzZXJUaW1lT3JpZ2luLlxuICovXG5sZXQgY2FjaGVkVGltZU9yaWdpbjtcblxuLyoqXG4gKiBHZXRzIHRoZSB0aW1lIG9yaWdpbiBhbmQgdGhlIG1vZGUgdXNlZCB0byBkZXRlcm1pbmUgaXQuXG4gKi9cbmZ1bmN0aW9uIGdldEJyb3dzZXJUaW1lT3JpZ2luKCkge1xuICAvLyBVbmZvcnR1bmF0ZWx5IGJyb3dzZXJzIG1heSByZXBvcnQgYW4gaW5hY2N1cmF0ZSB0aW1lIG9yaWdpbiBkYXRhLCB0aHJvdWdoIGVpdGhlciBwZXJmb3JtYW5jZS50aW1lT3JpZ2luIG9yXG4gIC8vIHBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnQsIHdoaWNoIHJlc3VsdHMgaW4gcG9vciByZXN1bHRzIGluIHBlcmZvcm1hbmNlIGRhdGEuIFdlIG9ubHkgdHJlYXQgdGltZSBvcmlnaW5cbiAgLy8gZGF0YSBhcyByZWxpYWJsZSBpZiB0aGV5IGFyZSB3aXRoaW4gYSByZWFzb25hYmxlIHRocmVzaG9sZCBvZiB0aGUgY3VycmVudCB0aW1lLlxuXG4gIGNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IEdMT0JBTF9PQkogO1xuICBpZiAoIXBlcmZvcm1hbmNlPy5ub3cpIHtcbiAgICByZXR1cm4gW3VuZGVmaW5lZCwgJ25vbmUnXTtcbiAgfVxuXG4gIGNvbnN0IHRocmVzaG9sZCA9IDM2MDAgKiAxMDAwO1xuICBjb25zdCBwZXJmb3JtYW5jZU5vdyA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCBkYXRlTm93ID0gRGF0ZS5ub3coKTtcblxuICAvLyBpZiB0aW1lT3JpZ2luIGlzbid0IGF2YWlsYWJsZSBzZXQgZGVsdGEgdG8gdGhyZXNob2xkIHNvIGl0IGlzbid0IHVzZWRcbiAgY29uc3QgdGltZU9yaWdpbkRlbHRhID0gcGVyZm9ybWFuY2UudGltZU9yaWdpblxuICAgID8gTWF0aC5hYnMocGVyZm9ybWFuY2UudGltZU9yaWdpbiArIHBlcmZvcm1hbmNlTm93IC0gZGF0ZU5vdylcbiAgICA6IHRocmVzaG9sZDtcbiAgY29uc3QgdGltZU9yaWdpbklzUmVsaWFibGUgPSB0aW1lT3JpZ2luRGVsdGEgPCB0aHJlc2hvbGQ7XG5cbiAgLy8gV2hpbGUgcGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4sIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW5cbiAgLy8gaXMgbm90IGFzIHdpZGVseSBzdXBwb3J0ZWQuIE5hbWVseSwgcGVyZm9ybWFuY2UudGltZU9yaWdpbiBpcyB1bmRlZmluZWQgaW4gU2FmYXJpIGFzIG9mIHdyaXRpbmcuXG4gIC8vIEFsc28gYXMgb2Ygd3JpdGluZywgcGVyZm9ybWFuY2UudGltaW5nIGlzIG5vdCBhdmFpbGFibGUgaW4gV2ViIFdvcmtlcnMgaW4gbWFpbnN0cmVhbSBicm93c2Vycywgc28gaXQgaXMgbm90IGFsd2F5c1xuICAvLyBhIHZhbGlkIGZhbGxiYWNrLiBJbiB0aGUgYWJzZW5jZSBvZiBhbiBpbml0aWFsIHRpbWUgcHJvdmlkZWQgYnkgdGhlIGJyb3dzZXIsIGZhbGxiYWNrIHRvIHRoZSBjdXJyZW50IHRpbWUgZnJvbSB0aGVcbiAgLy8gRGF0ZSBBUEkuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBjb25zdCBuYXZpZ2F0aW9uU3RhcnQgPSBwZXJmb3JtYW5jZS50aW1pbmc/Lm5hdmlnYXRpb25TdGFydDtcbiAgY29uc3QgaGFzTmF2aWdhdGlvblN0YXJ0ID0gdHlwZW9mIG5hdmlnYXRpb25TdGFydCA9PT0gJ251bWJlcic7XG4gIC8vIGlmIG5hdmlnYXRpb25TdGFydCBpc24ndCBhdmFpbGFibGUgc2V0IGRlbHRhIHRvIHRocmVzaG9sZCBzbyBpdCBpc24ndCB1c2VkXG4gIGNvbnN0IG5hdmlnYXRpb25TdGFydERlbHRhID0gaGFzTmF2aWdhdGlvblN0YXJ0ID8gTWF0aC5hYnMobmF2aWdhdGlvblN0YXJ0ICsgcGVyZm9ybWFuY2VOb3cgLSBkYXRlTm93KSA6IHRocmVzaG9sZDtcbiAgY29uc3QgbmF2aWdhdGlvblN0YXJ0SXNSZWxpYWJsZSA9IG5hdmlnYXRpb25TdGFydERlbHRhIDwgdGhyZXNob2xkO1xuXG4gIGlmICh0aW1lT3JpZ2luSXNSZWxpYWJsZSB8fCBuYXZpZ2F0aW9uU3RhcnRJc1JlbGlhYmxlKSB7XG4gICAgLy8gVXNlIHRoZSBtb3JlIHJlbGlhYmxlIHRpbWUgb3JpZ2luXG4gICAgaWYgKHRpbWVPcmlnaW5EZWx0YSA8PSBuYXZpZ2F0aW9uU3RhcnREZWx0YSkge1xuICAgICAgcmV0dXJuIFtwZXJmb3JtYW5jZS50aW1lT3JpZ2luLCAndGltZU9yaWdpbiddO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW25hdmlnYXRpb25TdGFydCwgJ25hdmlnYXRpb25TdGFydCddO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVpdGhlciBib3RoIHRpbWVPcmlnaW4gYW5kIG5hdmlnYXRpb25TdGFydCBhcmUgc2tld2VkIG9yIG5laXRoZXIgaXMgYXZhaWxhYmxlLCBmYWxsYmFjayB0byBEYXRlLlxuICByZXR1cm4gW2RhdGVOb3csICdkYXRlTm93J107XG59XG5cbi8qKlxuICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2guIFRoaXMgdmFsdWUgaXMgb25seSB1c2FibGUgaW4gYSBicm93c2VyLCBhbmQgb25seSB3aGVuIHRoZVxuICogcGVyZm9ybWFuY2UgQVBJIGlzIGF2YWlsYWJsZS5cbiAqL1xuZnVuY3Rpb24gYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbigpIHtcbiAgaWYgKCFjYWNoZWRUaW1lT3JpZ2luKSB7XG4gICAgY2FjaGVkVGltZU9yaWdpbiA9IGdldEJyb3dzZXJUaW1lT3JpZ2luKCk7XG4gIH1cblxuICByZXR1cm4gY2FjaGVkVGltZU9yaWdpblswXTtcbn1cblxuZXhwb3J0IHsgYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiwgZGF0ZVRpbWVzdGFtcEluU2Vjb25kcywgdGltZXN0YW1wSW5TZWNvbmRzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aW1lLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/time.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/traceData.js":
/*!*******************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/traceData.js ***!
  \*******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getTraceData: () => (/* binding */ getTraceData)\n/* harmony export */ });\n/* harmony import */ var _asyncContext_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../asyncContext/index.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/asyncContext/index.js\");\n/* harmony import */ var _carrier_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../carrier.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/carrier.js\");\n/* harmony import */ var _currentScopes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../currentScopes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/currentScopes.js\");\n/* harmony import */ var _exports_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../exports.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/exports.js\");\n/* harmony import */ var _debug_logger_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./debug-logger.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/debug-logger.js\");\n/* harmony import */ var _spanUtils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./spanUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js\");\n/* harmony import */ var _tracing_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../tracing/dynamicSamplingContext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js\");\n/* harmony import */ var _tracing_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tracing.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/tracing.js\");\n/* harmony import */ var _baggage_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./baggage.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/baggage.js\");\n\n\n\n\n\n\n\n\n\n\n/**\n * Extracts trace propagation data from the current span or from the client's scope (via transaction or propagation\n * context) and serializes it to `sentry-trace` and `baggage` values to strings. These values can be used to propagate\n * a trace via our tracing Http headers or Html `<meta>` tags.\n *\n * This function also applies some validation to the generated sentry-trace and baggage values to ensure that\n * only valid strings are returned.\n *\n * @returns an object with the tracing data values. The object keys are the name of the tracing key to be used as header\n * or meta tag name.\n */\nfunction getTraceData(options = {}) {\n  const client = options.client || (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getClient)();\n  if (!(0,_exports_js__WEBPACK_IMPORTED_MODULE_3__.isEnabled)() || !client) {\n    return {};\n  }\n\n  const carrier = (0,_carrier_js__WEBPACK_IMPORTED_MODULE_1__.getMainCarrier)();\n  const acs = (0,_asyncContext_index_js__WEBPACK_IMPORTED_MODULE_0__.getAsyncContextStrategy)(carrier);\n  if (acs.getTraceData) {\n    return acs.getTraceData(options);\n  }\n\n  const scope = options.scope || (0,_currentScopes_js__WEBPACK_IMPORTED_MODULE_2__.getCurrentScope)();\n  const span = options.span || (0,_spanUtils_js__WEBPACK_IMPORTED_MODULE_5__.getActiveSpan)();\n  const sentryTrace = span ? (0,_spanUtils_js__WEBPACK_IMPORTED_MODULE_5__.spanToTraceHeader)(span) : scopeToTraceHeader(scope);\n  const dsc = span ? (0,_tracing_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_6__.getDynamicSamplingContextFromSpan)(span) : (0,_tracing_dynamicSamplingContext_js__WEBPACK_IMPORTED_MODULE_6__.getDynamicSamplingContextFromScope)(client, scope);\n  const baggage = (0,_baggage_js__WEBPACK_IMPORTED_MODULE_8__.dynamicSamplingContextToSentryBaggageHeader)(dsc);\n\n  const isValidSentryTraceHeader = _tracing_js__WEBPACK_IMPORTED_MODULE_7__.TRACEPARENT_REGEXP.test(sentryTrace);\n  if (!isValidSentryTraceHeader) {\n    _debug_logger_js__WEBPACK_IMPORTED_MODULE_4__.debug.warn('Invalid sentry-trace data. Cannot generate trace data');\n    return {};\n  }\n\n  return {\n    'sentry-trace': sentryTrace,\n    baggage,\n  };\n}\n\n/**\n * Get a sentry-trace header value for the given scope.\n */\nfunction scopeToTraceHeader(scope) {\n  const { traceId, sampled, propagationSpanId } = scope.getPropagationContext();\n  return (0,_tracing_js__WEBPACK_IMPORTED_MODULE_7__.generateSentryTraceHeader)(traceId, propagationSpanId, sampled);\n}\n\n\n//# sourceMappingURL=traceData.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3RyYWNlRGF0YS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQW1FO0FBQ3BCO0FBQ2tCO0FBQ3ZCO0FBQ0E7QUFDd0I7QUFDMkQ7QUFDaEQ7QUFDRjs7QUFFM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxtQ0FBbUMsNERBQVM7QUFDNUMsT0FBTyxzREFBUztBQUNoQjtBQUNBOztBQUVBLGtCQUFrQiwyREFBYztBQUNoQyxjQUFjLCtFQUF1QjtBQUNyQztBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLGtFQUFlO0FBQ2hELCtCQUErQiw0REFBYTtBQUM1Qyw2QkFBNkIsZ0VBQWlCO0FBQzlDLHFCQUFxQixxR0FBaUMsU0FBUyxzR0FBa0M7QUFDakcsa0JBQWtCLHdGQUEyQzs7QUFFN0QsbUNBQW1DLDJEQUFrQjtBQUNyRDtBQUNBLElBQUksbURBQUs7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLHNDQUFzQztBQUNoRCxTQUFTLHNFQUF5QjtBQUNsQzs7QUFFd0I7QUFDeEIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS91dGlscy90cmFjZURhdGEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0QXN5bmNDb250ZXh0U3RyYXRlZ3kgfSBmcm9tICcuLi9hc3luY0NvbnRleHQvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0TWFpbkNhcnJpZXIgfSBmcm9tICcuLi9jYXJyaWVyLmpzJztcbmltcG9ydCB7IGdldENsaWVudCwgZ2V0Q3VycmVudFNjb3BlIH0gZnJvbSAnLi4vY3VycmVudFNjb3Blcy5qcyc7XG5pbXBvcnQgeyBpc0VuYWJsZWQgfSBmcm9tICcuLi9leHBvcnRzLmpzJztcbmltcG9ydCB7IGRlYnVnIH0gZnJvbSAnLi9kZWJ1Zy1sb2dnZXIuanMnO1xuaW1wb3J0IHsgZ2V0QWN0aXZlU3Bhbiwgc3BhblRvVHJhY2VIZWFkZXIgfSBmcm9tICcuL3NwYW5VdGlscy5qcyc7XG5pbXBvcnQgeyBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4sIGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU2NvcGUgfSBmcm9tICcuLi90cmFjaW5nL2R5bmFtaWNTYW1wbGluZ0NvbnRleHQuanMnO1xuaW1wb3J0IHsgVFJBQ0VQQVJFTlRfUkVHRVhQLCBnZW5lcmF0ZVNlbnRyeVRyYWNlSGVhZGVyIH0gZnJvbSAnLi90cmFjaW5nLmpzJztcbmltcG9ydCB7IGR5bmFtaWNTYW1wbGluZ0NvbnRleHRUb1NlbnRyeUJhZ2dhZ2VIZWFkZXIgfSBmcm9tICcuL2JhZ2dhZ2UuanMnO1xuXG4vKipcbiAqIEV4dHJhY3RzIHRyYWNlIHByb3BhZ2F0aW9uIGRhdGEgZnJvbSB0aGUgY3VycmVudCBzcGFuIG9yIGZyb20gdGhlIGNsaWVudCdzIHNjb3BlICh2aWEgdHJhbnNhY3Rpb24gb3IgcHJvcGFnYXRpb25cbiAqIGNvbnRleHQpIGFuZCBzZXJpYWxpemVzIGl0IHRvIGBzZW50cnktdHJhY2VgIGFuZCBgYmFnZ2FnZWAgdmFsdWVzIHRvIHN0cmluZ3MuIFRoZXNlIHZhbHVlcyBjYW4gYmUgdXNlZCB0byBwcm9wYWdhdGVcbiAqIGEgdHJhY2UgdmlhIG91ciB0cmFjaW5nIEh0dHAgaGVhZGVycyBvciBIdG1sIGA8bWV0YT5gIHRhZ3MuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBhbHNvIGFwcGxpZXMgc29tZSB2YWxpZGF0aW9uIHRvIHRoZSBnZW5lcmF0ZWQgc2VudHJ5LXRyYWNlIGFuZCBiYWdnYWdlIHZhbHVlcyB0byBlbnN1cmUgdGhhdFxuICogb25seSB2YWxpZCBzdHJpbmdzIGFyZSByZXR1cm5lZC5cbiAqXG4gKiBAcmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgdHJhY2luZyBkYXRhIHZhbHVlcy4gVGhlIG9iamVjdCBrZXlzIGFyZSB0aGUgbmFtZSBvZiB0aGUgdHJhY2luZyBrZXkgdG8gYmUgdXNlZCBhcyBoZWFkZXJcbiAqIG9yIG1ldGEgdGFnIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldFRyYWNlRGF0YShvcHRpb25zID0ge30pIHtcbiAgY29uc3QgY2xpZW50ID0gb3B0aW9ucy5jbGllbnQgfHwgZ2V0Q2xpZW50KCk7XG4gIGlmICghaXNFbmFibGVkKCkgfHwgIWNsaWVudCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IGNhcnJpZXIgPSBnZXRNYWluQ2FycmllcigpO1xuICBjb25zdCBhY3MgPSBnZXRBc3luY0NvbnRleHRTdHJhdGVneShjYXJyaWVyKTtcbiAgaWYgKGFjcy5nZXRUcmFjZURhdGEpIHtcbiAgICByZXR1cm4gYWNzLmdldFRyYWNlRGF0YShvcHRpb25zKTtcbiAgfVxuXG4gIGNvbnN0IHNjb3BlID0gb3B0aW9ucy5zY29wZSB8fCBnZXRDdXJyZW50U2NvcGUoKTtcbiAgY29uc3Qgc3BhbiA9IG9wdGlvbnMuc3BhbiB8fCBnZXRBY3RpdmVTcGFuKCk7XG4gIGNvbnN0IHNlbnRyeVRyYWNlID0gc3BhbiA/IHNwYW5Ub1RyYWNlSGVhZGVyKHNwYW4pIDogc2NvcGVUb1RyYWNlSGVhZGVyKHNjb3BlKTtcbiAgY29uc3QgZHNjID0gc3BhbiA/IGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU3BhbihzcGFuKSA6IGdldER5bmFtaWNTYW1wbGluZ0NvbnRleHRGcm9tU2NvcGUoY2xpZW50LCBzY29wZSk7XG4gIGNvbnN0IGJhZ2dhZ2UgPSBkeW5hbWljU2FtcGxpbmdDb250ZXh0VG9TZW50cnlCYWdnYWdlSGVhZGVyKGRzYyk7XG5cbiAgY29uc3QgaXNWYWxpZFNlbnRyeVRyYWNlSGVhZGVyID0gVFJBQ0VQQVJFTlRfUkVHRVhQLnRlc3Qoc2VudHJ5VHJhY2UpO1xuICBpZiAoIWlzVmFsaWRTZW50cnlUcmFjZUhlYWRlcikge1xuICAgIGRlYnVnLndhcm4oJ0ludmFsaWQgc2VudHJ5LXRyYWNlIGRhdGEuIENhbm5vdCBnZW5lcmF0ZSB0cmFjZSBkYXRhJyk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAnc2VudHJ5LXRyYWNlJzogc2VudHJ5VHJhY2UsXG4gICAgYmFnZ2FnZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgYSBzZW50cnktdHJhY2UgaGVhZGVyIHZhbHVlIGZvciB0aGUgZ2l2ZW4gc2NvcGUuXG4gKi9cbmZ1bmN0aW9uIHNjb3BlVG9UcmFjZUhlYWRlcihzY29wZSkge1xuICBjb25zdCB7IHRyYWNlSWQsIHNhbXBsZWQsIHByb3BhZ2F0aW9uU3BhbklkIH0gPSBzY29wZS5nZXRQcm9wYWdhdGlvbkNvbnRleHQoKTtcbiAgcmV0dXJuIGdlbmVyYXRlU2VudHJ5VHJhY2VIZWFkZXIodHJhY2VJZCwgcHJvcGFnYXRpb25TcGFuSWQsIHNhbXBsZWQpO1xufVxuXG5leHBvcnQgeyBnZXRUcmFjZURhdGEgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyYWNlRGF0YS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/traceData.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/tracing.js":
/*!*****************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/tracing.js ***!
  \*****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   TRACEPARENT_REGEXP: () => (/* binding */ TRACEPARENT_REGEXP),\n/* harmony export */   extractTraceparentData: () => (/* binding */ extractTraceparentData),\n/* harmony export */   generateSentryTraceHeader: () => (/* binding */ generateSentryTraceHeader),\n/* harmony export */   propagationContextFromHeaders: () => (/* binding */ propagationContextFromHeaders)\n/* harmony export */ });\n/* harmony import */ var _baggage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./baggage.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/baggage.js\");\n/* harmony import */ var _parseSampleRate_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./parseSampleRate.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/parseSampleRate.js\");\n/* harmony import */ var _propagationContext_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./propagationContext.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/propagationContext.js\");\n\n\n\n\n// eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor -- RegExp is used for readability here\nconst TRACEPARENT_REGEXP = new RegExp(\n  '^[ \\\\t]*' + // whitespace\n    '([0-9a-f]{32})?' + // trace_id\n    '-?([0-9a-f]{16})?' + // span_id\n    '-?([01])?' + // sampled\n    '[ \\\\t]*$', // whitespace\n);\n\n/**\n * Extract transaction context data from a `sentry-trace` header.\n *\n * @param traceparent Traceparent string\n *\n * @returns Object containing data from the header, or undefined if traceparent string is malformed\n */\nfunction extractTraceparentData(traceparent) {\n  if (!traceparent) {\n    return undefined;\n  }\n\n  const matches = traceparent.match(TRACEPARENT_REGEXP);\n  if (!matches) {\n    return undefined;\n  }\n\n  let parentSampled;\n  if (matches[3] === '1') {\n    parentSampled = true;\n  } else if (matches[3] === '0') {\n    parentSampled = false;\n  }\n\n  return {\n    traceId: matches[1],\n    parentSampled,\n    parentSpanId: matches[2],\n  };\n}\n\n/**\n * Create a propagation context from incoming headers or\n * creates a minimal new one if the headers are undefined.\n */\nfunction propagationContextFromHeaders(\n  sentryTrace,\n  baggage,\n) {\n  const traceparentData = extractTraceparentData(sentryTrace);\n  const dynamicSamplingContext = (0,_baggage_js__WEBPACK_IMPORTED_MODULE_0__.baggageHeaderToDynamicSamplingContext)(baggage);\n\n  if (!traceparentData?.traceId) {\n    return {\n      traceId: (0,_propagationContext_js__WEBPACK_IMPORTED_MODULE_2__.generateTraceId)(),\n      sampleRand: Math.random(),\n    };\n  }\n\n  const sampleRand = getSampleRandFromTraceparentAndDsc(traceparentData, dynamicSamplingContext);\n\n  // The sample_rand on the DSC needs to be generated based on traceparent + baggage.\n  if (dynamicSamplingContext) {\n    dynamicSamplingContext.sample_rand = sampleRand.toString();\n  }\n\n  const { traceId, parentSpanId, parentSampled } = traceparentData;\n\n  return {\n    traceId,\n    parentSpanId,\n    sampled: parentSampled,\n    dsc: dynamicSamplingContext || {}, // If we have traceparent data but no DSC it means we are not head of trace and we must freeze it\n    sampleRand,\n  };\n}\n\n/**\n * Create sentry-trace header from span context values.\n */\nfunction generateSentryTraceHeader(\n  traceId = (0,_propagationContext_js__WEBPACK_IMPORTED_MODULE_2__.generateTraceId)(),\n  spanId = (0,_propagationContext_js__WEBPACK_IMPORTED_MODULE_2__.generateSpanId)(),\n  sampled,\n) {\n  let sampledString = '';\n  if (sampled !== undefined) {\n    sampledString = sampled ? '-1' : '-0';\n  }\n  return `${traceId}-${spanId}${sampledString}`;\n}\n\n/**\n * Given any combination of an incoming trace, generate a sample rand based on its defined semantics.\n *\n * Read more: https://develop.sentry.dev/sdk/telemetry/traces/#propagated-random-value\n */\nfunction getSampleRandFromTraceparentAndDsc(\n  traceparentData,\n  dsc,\n) {\n  // When there is an incoming sample rand use it.\n  const parsedSampleRand = (0,_parseSampleRate_js__WEBPACK_IMPORTED_MODULE_1__.parseSampleRate)(dsc?.sample_rand);\n  if (parsedSampleRand !== undefined) {\n    return parsedSampleRand;\n  }\n\n  // Otherwise, if there is an incoming sampling decision + sample rate, generate a sample rand that would lead to the same sampling decision.\n  const parsedSampleRate = (0,_parseSampleRate_js__WEBPACK_IMPORTED_MODULE_1__.parseSampleRate)(dsc?.sample_rate);\n  if (parsedSampleRate && traceparentData?.parentSampled !== undefined) {\n    return traceparentData.parentSampled\n      ? // Returns a sample rand with positive sampling decision [0, sampleRate)\n        Math.random() * parsedSampleRate\n      : // Returns a sample rand with negative sampling decision [sampleRate, 1)\n        parsedSampleRate + Math.random() * (1 - parsedSampleRate);\n  } else {\n    // If nothing applies, return a random sample rand.\n    return Math.random();\n  }\n}\n\n\n//# sourceMappingURL=tracing.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3RyYWNpbmcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFxRTtBQUNkO0FBQ21COztBQUUxRTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEdBQUc7QUFDbEIsaUJBQWlCLEdBQUc7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxrRkFBcUM7O0FBRXRFO0FBQ0E7QUFDQSxlQUFlLHVFQUFlO0FBQzlCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLHVDQUF1Qzs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx1RUFBZTtBQUMzQixXQUFXLHNFQUFjO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksUUFBUSxHQUFHLE9BQU8sRUFBRSxjQUFjO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLG9FQUFlO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQixvRUFBZTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRWdIO0FBQ2hIIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvdHJhY2luZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBiYWdnYWdlSGVhZGVyVG9EeW5hbWljU2FtcGxpbmdDb250ZXh0IH0gZnJvbSAnLi9iYWdnYWdlLmpzJztcbmltcG9ydCB7IHBhcnNlU2FtcGxlUmF0ZSB9IGZyb20gJy4vcGFyc2VTYW1wbGVSYXRlLmpzJztcbmltcG9ydCB7IGdlbmVyYXRlVHJhY2VJZCwgZ2VuZXJhdGVTcGFuSWQgfSBmcm9tICcuL3Byb3BhZ2F0aW9uQ29udGV4dC5qcyc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2VudHJ5LWludGVybmFsL3Nkay9uby1yZWdleHAtY29uc3RydWN0b3IgLS0gUmVnRXhwIGlzIHVzZWQgZm9yIHJlYWRhYmlsaXR5IGhlcmVcbmNvbnN0IFRSQUNFUEFSRU5UX1JFR0VYUCA9IG5ldyBSZWdFeHAoXG4gICdeWyBcXFxcdF0qJyArIC8vIHdoaXRlc3BhY2VcbiAgICAnKFswLTlhLWZdezMyfSk/JyArIC8vIHRyYWNlX2lkXG4gICAgJy0/KFswLTlhLWZdezE2fSk/JyArIC8vIHNwYW5faWRcbiAgICAnLT8oWzAxXSk/JyArIC8vIHNhbXBsZWRcbiAgICAnWyBcXFxcdF0qJCcsIC8vIHdoaXRlc3BhY2Vcbik7XG5cbi8qKlxuICogRXh0cmFjdCB0cmFuc2FjdGlvbiBjb250ZXh0IGRhdGEgZnJvbSBhIGBzZW50cnktdHJhY2VgIGhlYWRlci5cbiAqXG4gKiBAcGFyYW0gdHJhY2VwYXJlbnQgVHJhY2VwYXJlbnQgc3RyaW5nXG4gKlxuICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgZGF0YSBmcm9tIHRoZSBoZWFkZXIsIG9yIHVuZGVmaW5lZCBpZiB0cmFjZXBhcmVudCBzdHJpbmcgaXMgbWFsZm9ybWVkXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUcmFjZXBhcmVudERhdGEodHJhY2VwYXJlbnQpIHtcbiAgaWYgKCF0cmFjZXBhcmVudCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBtYXRjaGVzID0gdHJhY2VwYXJlbnQubWF0Y2goVFJBQ0VQQVJFTlRfUkVHRVhQKTtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBwYXJlbnRTYW1wbGVkO1xuICBpZiAobWF0Y2hlc1szXSA9PT0gJzEnKSB7XG4gICAgcGFyZW50U2FtcGxlZCA9IHRydWU7XG4gIH0gZWxzZSBpZiAobWF0Y2hlc1szXSA9PT0gJzAnKSB7XG4gICAgcGFyZW50U2FtcGxlZCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0cmFjZUlkOiBtYXRjaGVzWzFdLFxuICAgIHBhcmVudFNhbXBsZWQsXG4gICAgcGFyZW50U3BhbklkOiBtYXRjaGVzWzJdLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHByb3BhZ2F0aW9uIGNvbnRleHQgZnJvbSBpbmNvbWluZyBoZWFkZXJzIG9yXG4gKiBjcmVhdGVzIGEgbWluaW1hbCBuZXcgb25lIGlmIHRoZSBoZWFkZXJzIGFyZSB1bmRlZmluZWQuXG4gKi9cbmZ1bmN0aW9uIHByb3BhZ2F0aW9uQ29udGV4dEZyb21IZWFkZXJzKFxuICBzZW50cnlUcmFjZSxcbiAgYmFnZ2FnZSxcbikge1xuICBjb25zdCB0cmFjZXBhcmVudERhdGEgPSBleHRyYWN0VHJhY2VwYXJlbnREYXRhKHNlbnRyeVRyYWNlKTtcbiAgY29uc3QgZHluYW1pY1NhbXBsaW5nQ29udGV4dCA9IGJhZ2dhZ2VIZWFkZXJUb0R5bmFtaWNTYW1wbGluZ0NvbnRleHQoYmFnZ2FnZSk7XG5cbiAgaWYgKCF0cmFjZXBhcmVudERhdGE/LnRyYWNlSWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHJhY2VJZDogZ2VuZXJhdGVUcmFjZUlkKCksXG4gICAgICBzYW1wbGVSYW5kOiBNYXRoLnJhbmRvbSgpLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBzYW1wbGVSYW5kID0gZ2V0U2FtcGxlUmFuZEZyb21UcmFjZXBhcmVudEFuZERzYyh0cmFjZXBhcmVudERhdGEsIGR5bmFtaWNTYW1wbGluZ0NvbnRleHQpO1xuXG4gIC8vIFRoZSBzYW1wbGVfcmFuZCBvbiB0aGUgRFNDIG5lZWRzIHRvIGJlIGdlbmVyYXRlZCBiYXNlZCBvbiB0cmFjZXBhcmVudCArIGJhZ2dhZ2UuXG4gIGlmIChkeW5hbWljU2FtcGxpbmdDb250ZXh0KSB7XG4gICAgZHluYW1pY1NhbXBsaW5nQ29udGV4dC5zYW1wbGVfcmFuZCA9IHNhbXBsZVJhbmQudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGNvbnN0IHsgdHJhY2VJZCwgcGFyZW50U3BhbklkLCBwYXJlbnRTYW1wbGVkIH0gPSB0cmFjZXBhcmVudERhdGE7XG5cbiAgcmV0dXJuIHtcbiAgICB0cmFjZUlkLFxuICAgIHBhcmVudFNwYW5JZCxcbiAgICBzYW1wbGVkOiBwYXJlbnRTYW1wbGVkLFxuICAgIGRzYzogZHluYW1pY1NhbXBsaW5nQ29udGV4dCB8fCB7fSwgLy8gSWYgd2UgaGF2ZSB0cmFjZXBhcmVudCBkYXRhIGJ1dCBubyBEU0MgaXQgbWVhbnMgd2UgYXJlIG5vdCBoZWFkIG9mIHRyYWNlIGFuZCB3ZSBtdXN0IGZyZWV6ZSBpdFxuICAgIHNhbXBsZVJhbmQsXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIHNlbnRyeS10cmFjZSBoZWFkZXIgZnJvbSBzcGFuIGNvbnRleHQgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZVNlbnRyeVRyYWNlSGVhZGVyKFxuICB0cmFjZUlkID0gZ2VuZXJhdGVUcmFjZUlkKCksXG4gIHNwYW5JZCA9IGdlbmVyYXRlU3BhbklkKCksXG4gIHNhbXBsZWQsXG4pIHtcbiAgbGV0IHNhbXBsZWRTdHJpbmcgPSAnJztcbiAgaWYgKHNhbXBsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHNhbXBsZWRTdHJpbmcgPSBzYW1wbGVkID8gJy0xJyA6ICctMCc7XG4gIH1cbiAgcmV0dXJuIGAke3RyYWNlSWR9LSR7c3BhbklkfSR7c2FtcGxlZFN0cmluZ31gO1xufVxuXG4vKipcbiAqIEdpdmVuIGFueSBjb21iaW5hdGlvbiBvZiBhbiBpbmNvbWluZyB0cmFjZSwgZ2VuZXJhdGUgYSBzYW1wbGUgcmFuZCBiYXNlZCBvbiBpdHMgZGVmaW5lZCBzZW1hbnRpY3MuXG4gKlxuICogUmVhZCBtb3JlOiBodHRwczovL2RldmVsb3Auc2VudHJ5LmRldi9zZGsvdGVsZW1ldHJ5L3RyYWNlcy8jcHJvcGFnYXRlZC1yYW5kb20tdmFsdWVcbiAqL1xuZnVuY3Rpb24gZ2V0U2FtcGxlUmFuZEZyb21UcmFjZXBhcmVudEFuZERzYyhcbiAgdHJhY2VwYXJlbnREYXRhLFxuICBkc2MsXG4pIHtcbiAgLy8gV2hlbiB0aGVyZSBpcyBhbiBpbmNvbWluZyBzYW1wbGUgcmFuZCB1c2UgaXQuXG4gIGNvbnN0IHBhcnNlZFNhbXBsZVJhbmQgPSBwYXJzZVNhbXBsZVJhdGUoZHNjPy5zYW1wbGVfcmFuZCk7XG4gIGlmIChwYXJzZWRTYW1wbGVSYW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcGFyc2VkU2FtcGxlUmFuZDtcbiAgfVxuXG4gIC8vIE90aGVyd2lzZSwgaWYgdGhlcmUgaXMgYW4gaW5jb21pbmcgc2FtcGxpbmcgZGVjaXNpb24gKyBzYW1wbGUgcmF0ZSwgZ2VuZXJhdGUgYSBzYW1wbGUgcmFuZCB0aGF0IHdvdWxkIGxlYWQgdG8gdGhlIHNhbWUgc2FtcGxpbmcgZGVjaXNpb24uXG4gIGNvbnN0IHBhcnNlZFNhbXBsZVJhdGUgPSBwYXJzZVNhbXBsZVJhdGUoZHNjPy5zYW1wbGVfcmF0ZSk7XG4gIGlmIChwYXJzZWRTYW1wbGVSYXRlICYmIHRyYWNlcGFyZW50RGF0YT8ucGFyZW50U2FtcGxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRyYWNlcGFyZW50RGF0YS5wYXJlbnRTYW1wbGVkXG4gICAgICA/IC8vIFJldHVybnMgYSBzYW1wbGUgcmFuZCB3aXRoIHBvc2l0aXZlIHNhbXBsaW5nIGRlY2lzaW9uIFswLCBzYW1wbGVSYXRlKVxuICAgICAgICBNYXRoLnJhbmRvbSgpICogcGFyc2VkU2FtcGxlUmF0ZVxuICAgICAgOiAvLyBSZXR1cm5zIGEgc2FtcGxlIHJhbmQgd2l0aCBuZWdhdGl2ZSBzYW1wbGluZyBkZWNpc2lvbiBbc2FtcGxlUmF0ZSwgMSlcbiAgICAgICAgcGFyc2VkU2FtcGxlUmF0ZSArIE1hdGgucmFuZG9tKCkgKiAoMSAtIHBhcnNlZFNhbXBsZVJhdGUpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIG5vdGhpbmcgYXBwbGllcywgcmV0dXJuIGEgcmFuZG9tIHNhbXBsZSByYW5kLlxuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpO1xuICB9XG59XG5cbmV4cG9ydCB7IFRSQUNFUEFSRU5UX1JFR0VYUCwgZXh0cmFjdFRyYWNlcGFyZW50RGF0YSwgZ2VuZXJhdGVTZW50cnlUcmFjZUhlYWRlciwgcHJvcGFnYXRpb25Db250ZXh0RnJvbUhlYWRlcnMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRyYWNpbmcuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/tracing.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/transactionEvent.js":
/*!**************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/transactionEvent.js ***!
  \**************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   convertSpanJsonToTransactionEvent: () => (/* binding */ convertSpanJsonToTransactionEvent),\n/* harmony export */   convertTransactionEventToSpanJson: () => (/* binding */ convertTransactionEventToSpanJson)\n/* harmony export */ });\n/* harmony import */ var _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../semanticAttributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/semanticAttributes.js\");\n\n\n/**\n * Converts a transaction event to a span JSON object.\n */\nfunction convertTransactionEventToSpanJson(event) {\n  const { trace_id, parent_span_id, span_id, status, origin, data, op } = event.contexts?.trace ?? {};\n\n  return {\n    data: data ?? {},\n    description: event.transaction,\n    op,\n    parent_span_id,\n    span_id: span_id ?? '',\n    start_timestamp: event.start_timestamp ?? 0,\n    status,\n    timestamp: event.timestamp,\n    trace_id: trace_id ?? '',\n    origin,\n    profile_id: data?.[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_PROFILE_ID] ,\n    exclusive_time: data?.[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME] ,\n    measurements: event.measurements,\n    is_segment: true,\n  };\n}\n\n/**\n * Converts a span JSON object to a transaction event.\n */\nfunction convertSpanJsonToTransactionEvent(span) {\n  return {\n    type: 'transaction',\n    timestamp: span.timestamp,\n    start_timestamp: span.start_timestamp,\n    transaction: span.description,\n    contexts: {\n      trace: {\n        trace_id: span.trace_id,\n        span_id: span.span_id,\n        parent_span_id: span.parent_span_id,\n        op: span.op,\n        status: span.status,\n        origin: span.origin,\n        data: {\n          ...span.data,\n          ...(span.profile_id && { [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_PROFILE_ID]: span.profile_id }),\n          ...(span.exclusive_time && { [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: span.exclusive_time }),\n        },\n      },\n    },\n    measurements: span.measurements,\n  };\n}\n\n\n//# sourceMappingURL=transactionEvent.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3RyYW5zYWN0aW9uRXZlbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTRHOztBQUU1RztBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsOERBQThEOztBQUV4RTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsaUZBQTZCO0FBQ3BELDJCQUEyQixxRkFBaUM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsQ0FBQyxpRkFBNkIsb0JBQW9CO0FBQ3JGLHVDQUF1QyxDQUFDLHFGQUFpQyx3QkFBd0I7QUFDakcsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVnRjtBQUNoRiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3RyYW5zYWN0aW9uRXZlbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU0VNQU5USUNfQVRUUklCVVRFX0VYQ0xVU0lWRV9USU1FLCBTRU1BTlRJQ19BVFRSSUJVVEVfUFJPRklMRV9JRCB9IGZyb20gJy4uL3NlbWFudGljQXR0cmlidXRlcy5qcyc7XG5cbi8qKlxuICogQ29udmVydHMgYSB0cmFuc2FjdGlvbiBldmVudCB0byBhIHNwYW4gSlNPTiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUcmFuc2FjdGlvbkV2ZW50VG9TcGFuSnNvbihldmVudCkge1xuICBjb25zdCB7IHRyYWNlX2lkLCBwYXJlbnRfc3Bhbl9pZCwgc3Bhbl9pZCwgc3RhdHVzLCBvcmlnaW4sIGRhdGEsIG9wIH0gPSBldmVudC5jb250ZXh0cz8udHJhY2UgPz8ge307XG5cbiAgcmV0dXJuIHtcbiAgICBkYXRhOiBkYXRhID8/IHt9LFxuICAgIGRlc2NyaXB0aW9uOiBldmVudC50cmFuc2FjdGlvbixcbiAgICBvcCxcbiAgICBwYXJlbnRfc3Bhbl9pZCxcbiAgICBzcGFuX2lkOiBzcGFuX2lkID8/ICcnLFxuICAgIHN0YXJ0X3RpbWVzdGFtcDogZXZlbnQuc3RhcnRfdGltZXN0YW1wID8/IDAsXG4gICAgc3RhdHVzLFxuICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLFxuICAgIHRyYWNlX2lkOiB0cmFjZV9pZCA/PyAnJyxcbiAgICBvcmlnaW4sXG4gICAgcHJvZmlsZV9pZDogZGF0YT8uW1NFTUFOVElDX0FUVFJJQlVURV9QUk9GSUxFX0lEXSAsXG4gICAgZXhjbHVzaXZlX3RpbWU6IGRhdGE/LltTRU1BTlRJQ19BVFRSSUJVVEVfRVhDTFVTSVZFX1RJTUVdICxcbiAgICBtZWFzdXJlbWVudHM6IGV2ZW50Lm1lYXN1cmVtZW50cyxcbiAgICBpc19zZWdtZW50OiB0cnVlLFxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3BhbiBKU09OIG9iamVjdCB0byBhIHRyYW5zYWN0aW9uIGV2ZW50LlxuICovXG5mdW5jdGlvbiBjb252ZXJ0U3Bhbkpzb25Ub1RyYW5zYWN0aW9uRXZlbnQoc3Bhbikge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICd0cmFuc2FjdGlvbicsXG4gICAgdGltZXN0YW1wOiBzcGFuLnRpbWVzdGFtcCxcbiAgICBzdGFydF90aW1lc3RhbXA6IHNwYW4uc3RhcnRfdGltZXN0YW1wLFxuICAgIHRyYW5zYWN0aW9uOiBzcGFuLmRlc2NyaXB0aW9uLFxuICAgIGNvbnRleHRzOiB7XG4gICAgICB0cmFjZToge1xuICAgICAgICB0cmFjZV9pZDogc3Bhbi50cmFjZV9pZCxcbiAgICAgICAgc3Bhbl9pZDogc3Bhbi5zcGFuX2lkLFxuICAgICAgICBwYXJlbnRfc3Bhbl9pZDogc3Bhbi5wYXJlbnRfc3Bhbl9pZCxcbiAgICAgICAgb3A6IHNwYW4ub3AsXG4gICAgICAgIHN0YXR1czogc3Bhbi5zdGF0dXMsXG4gICAgICAgIG9yaWdpbjogc3Bhbi5vcmlnaW4sXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAuLi5zcGFuLmRhdGEsXG4gICAgICAgICAgLi4uKHNwYW4ucHJvZmlsZV9pZCAmJiB7IFtTRU1BTlRJQ19BVFRSSUJVVEVfUFJPRklMRV9JRF06IHNwYW4ucHJvZmlsZV9pZCB9KSxcbiAgICAgICAgICAuLi4oc3Bhbi5leGNsdXNpdmVfdGltZSAmJiB7IFtTRU1BTlRJQ19BVFRSSUJVVEVfRVhDTFVTSVZFX1RJTUVdOiBzcGFuLmV4Y2x1c2l2ZV90aW1lIH0pLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIG1lYXN1cmVtZW50czogc3Bhbi5tZWFzdXJlbWVudHMsXG4gIH07XG59XG5cbmV4cG9ydCB7IGNvbnZlcnRTcGFuSnNvblRvVHJhbnNhY3Rpb25FdmVudCwgY29udmVydFRyYW5zYWN0aW9uRXZlbnRUb1NwYW5Kc29uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD10cmFuc2FjdGlvbkV2ZW50LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/transactionEvent.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/url.js":
/*!*************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/url.js ***!
  \*************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getHttpSpanDetailsFromUrlObject: () => (/* binding */ getHttpSpanDetailsFromUrlObject),\n/* harmony export */   getSanitizedUrlString: () => (/* binding */ getSanitizedUrlString),\n/* harmony export */   getSanitizedUrlStringFromUrlObject: () => (/* binding */ getSanitizedUrlStringFromUrlObject),\n/* harmony export */   isURLObjectRelative: () => (/* binding */ isURLObjectRelative),\n/* harmony export */   parseStringToURLObject: () => (/* binding */ parseStringToURLObject),\n/* harmony export */   parseUrl: () => (/* binding */ parseUrl),\n/* harmony export */   stripUrlQueryAndFragment: () => (/* binding */ stripUrlQueryAndFragment)\n/* harmony export */ });\n/* harmony import */ var _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../semanticAttributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/semanticAttributes.js\");\n\n\n// Curious about `thismessage:/`? See: https://www.rfc-editor.org/rfc/rfc2557.html\n//  > When the methods above do not yield an absolute URI, a base URL\n//  > of \"thismessage:/\" MUST be employed. This base URL has been\n//  > defined for the sole purpose of resolving relative references\n//  > within a multipart/related structure when no other base URI is\n//  > specified.\n//\n// We need to provide a base URL to `parseStringToURLObject` because the fetch API gives us a\n// relative URL sometimes.\n//\n// This is the only case where we need to provide a base URL to `parseStringToURLObject`\n// because the relative URL is not valid on its own.\nconst DEFAULT_BASE_URL = 'thismessage:/';\n\n/**\n * Checks if the URL object is relative\n *\n * @param url - The URL object to check\n * @returns True if the URL object is relative, false otherwise\n */\nfunction isURLObjectRelative(url) {\n  return 'isRelative' in url;\n}\n\n/**\n * Parses string to a URL object\n *\n * @param url - The URL to parse\n * @returns The parsed URL object or undefined if the URL is invalid\n */\nfunction parseStringToURLObject(url, urlBase) {\n  const isRelative = url.indexOf('://') <= 0 && url.indexOf('//') !== 0;\n  const base = urlBase ?? (isRelative ? DEFAULT_BASE_URL : undefined);\n  try {\n    // Use `canParse` to short-circuit the URL constructor if it's not a valid URL\n    // This is faster than trying to construct the URL and catching the error\n    // Node 20+, Chrome 120+, Firefox 115+, Safari 17+\n    if ('canParse' in URL && !(URL ).canParse(url, base)) {\n      return undefined;\n    }\n\n    const fullUrlObject = new URL(url, base);\n    if (isRelative) {\n      // Because we used a fake base URL, we need to return a relative URL object.\n      // We cannot return anything about the origin, host, etc. because it will refer to the fake base URL.\n      return {\n        isRelative,\n        pathname: fullUrlObject.pathname,\n        search: fullUrlObject.search,\n        hash: fullUrlObject.hash,\n      };\n    }\n    return fullUrlObject;\n  } catch {\n    // empty body\n  }\n\n  return undefined;\n}\n\n/**\n * Takes a URL object and returns a sanitized string which is safe to use as span name\n * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data\n */\nfunction getSanitizedUrlStringFromUrlObject(url) {\n  if (isURLObjectRelative(url)) {\n    return url.pathname;\n  }\n\n  const newUrl = new URL(url);\n  newUrl.search = '';\n  newUrl.hash = '';\n  if (['80', '443'].includes(newUrl.port)) {\n    newUrl.port = '';\n  }\n  if (newUrl.password) {\n    newUrl.password = '%filtered%';\n  }\n  if (newUrl.username) {\n    newUrl.username = '%filtered%';\n  }\n\n  return newUrl.toString();\n}\n\nfunction getHttpSpanNameFromUrlObject(\n  urlObject,\n  kind,\n  request,\n  routeName,\n) {\n  const method = request?.method?.toUpperCase() ?? 'GET';\n  const route = routeName\n    ? routeName\n    : urlObject\n      ? kind === 'client'\n        ? getSanitizedUrlStringFromUrlObject(urlObject)\n        : urlObject.pathname\n      : '/';\n\n  return `${method} ${route}`;\n}\n\n/**\n * Takes a parsed URL object and returns a set of attributes for the span\n * that represents the HTTP request for that url. This is used for both server\n * and client http spans.\n *\n * Follows https://opentelemetry.io/docs/specs/semconv/http/.\n *\n * @param urlObject - see {@link parseStringToURLObject}\n * @param kind - The type of HTTP operation (server or client)\n * @param spanOrigin - The origin of the span\n * @param request - The request object, see {@link PartialRequest}\n * @param routeName - The name of the route, must be low cardinality\n * @returns The span name and attributes for the HTTP operation\n */\nfunction getHttpSpanDetailsFromUrlObject(\n  urlObject,\n  kind,\n  spanOrigin,\n  request,\n  routeName,\n) {\n  const attributes = {\n    [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: spanOrigin,\n    [_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n  };\n\n  if (routeName) {\n    // This is based on https://opentelemetry.io/docs/specs/semconv/http/http-spans/#name\n    attributes[kind === 'server' ? 'http.route' : 'url.template'] = routeName;\n    attributes[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] = 'route';\n  }\n\n  if (request?.method) {\n    attributes[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD] = request.method.toUpperCase();\n  }\n\n  if (urlObject) {\n    if (urlObject.search) {\n      attributes['url.query'] = urlObject.search;\n    }\n    if (urlObject.hash) {\n      attributes['url.fragment'] = urlObject.hash;\n    }\n    if (urlObject.pathname) {\n      attributes['url.path'] = urlObject.pathname;\n      if (urlObject.pathname === '/') {\n        attributes[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] = 'route';\n      }\n    }\n\n    if (!isURLObjectRelative(urlObject)) {\n      attributes[_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_URL_FULL] = urlObject.href;\n      if (urlObject.port) {\n        attributes['url.port'] = urlObject.port;\n      }\n      if (urlObject.protocol) {\n        attributes['url.scheme'] = urlObject.protocol;\n      }\n      if (urlObject.hostname) {\n        attributes[kind === 'server' ? 'server.address' : 'url.domain'] = urlObject.hostname;\n      }\n    }\n  }\n\n  return [getHttpSpanNameFromUrlObject(urlObject, kind, request, routeName), attributes];\n}\n\n/**\n * Parses string form of URL into an object\n * // borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n * // intentionally using regex and not <a/> href parsing trick because React Native and other\n * // environments where DOM might not be available\n * @returns parsed URL object\n */\nfunction parseUrl(url) {\n  if (!url) {\n    return {};\n  }\n\n  const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n  if (!match) {\n    return {};\n  }\n\n  // coerce to undefined values to empty string so we don't get 'undefined'\n  const query = match[6] || '';\n  const fragment = match[8] || '';\n  return {\n    host: match[4],\n    path: match[5],\n    protocol: match[2],\n    search: query,\n    hash: fragment,\n    relative: match[5] + query + fragment, // everything minus origin\n  };\n}\n\n/**\n * Strip the query string and fragment off of a given URL or path (if present)\n *\n * @param urlPath Full URL or path, including possible query string and/or fragment\n * @returns URL or path without query string or fragment\n */\nfunction stripUrlQueryAndFragment(urlPath) {\n  return (urlPath.split(/[?#]/, 1) )[0];\n}\n\n/**\n * Takes a URL object and returns a sanitized string which is safe to use as span name\n * see: https://develop.sentry.dev/sdk/data-handling/#structuring-data\n */\nfunction getSanitizedUrlString(url) {\n  const { protocol, host, path } = url;\n\n  const filteredHost =\n    host\n      // Always filter out authority\n      ?.replace(/^.*@/, '[filtered]:[filtered]@')\n      // Don't show standard :80 (http) and :443 (https) ports to reduce the noise\n      // TODO: Use new URL global if it exists\n      .replace(/(:80)$/, '')\n      .replace(/(:443)$/, '') || '';\n\n  return `${protocol ? `${protocol}://` : ''}${filteredHost}${path}`;\n}\n\n\n//# sourceMappingURL=url.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3VybC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFtTDs7QUFFbkw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFlBQVksUUFBUSxFQUFFLE1BQU07QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxvRkFBZ0M7QUFDckMsS0FBSyxvRkFBZ0M7QUFDckM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvRkFBZ0M7QUFDL0M7O0FBRUE7QUFDQSxlQUFlLDBGQUFzQztBQUNyRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixvRkFBZ0M7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQiwrRUFBMkI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsdUJBQXVCOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFlBQVksY0FBYyxTQUFTLFVBQVUsRUFBRSxhQUFhLEVBQUUsS0FBSztBQUNuRTs7QUFFdUw7QUFDdkwiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS91dGlscy91cmwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0UsIFNFTUFOVElDX0FUVFJJQlVURV9IVFRQX1JFUVVFU1RfTUVUSE9ELCBTRU1BTlRJQ19BVFRSSUJVVEVfVVJMX0ZVTEwsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOIH0gZnJvbSAnLi4vc2VtYW50aWNBdHRyaWJ1dGVzLmpzJztcblxuLy8gQ3VyaW91cyBhYm91dCBgdGhpc21lc3NhZ2U6L2A/IFNlZTogaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzI1NTcuaHRtbFxuLy8gID4gV2hlbiB0aGUgbWV0aG9kcyBhYm92ZSBkbyBub3QgeWllbGQgYW4gYWJzb2x1dGUgVVJJLCBhIGJhc2UgVVJMXG4vLyAgPiBvZiBcInRoaXNtZXNzYWdlOi9cIiBNVVNUIGJlIGVtcGxveWVkLiBUaGlzIGJhc2UgVVJMIGhhcyBiZWVuXG4vLyAgPiBkZWZpbmVkIGZvciB0aGUgc29sZSBwdXJwb3NlIG9mIHJlc29sdmluZyByZWxhdGl2ZSByZWZlcmVuY2VzXG4vLyAgPiB3aXRoaW4gYSBtdWx0aXBhcnQvcmVsYXRlZCBzdHJ1Y3R1cmUgd2hlbiBubyBvdGhlciBiYXNlIFVSSSBpc1xuLy8gID4gc3BlY2lmaWVkLlxuLy9cbi8vIFdlIG5lZWQgdG8gcHJvdmlkZSBhIGJhc2UgVVJMIHRvIGBwYXJzZVN0cmluZ1RvVVJMT2JqZWN0YCBiZWNhdXNlIHRoZSBmZXRjaCBBUEkgZ2l2ZXMgdXMgYVxuLy8gcmVsYXRpdmUgVVJMIHNvbWV0aW1lcy5cbi8vXG4vLyBUaGlzIGlzIHRoZSBvbmx5IGNhc2Ugd2hlcmUgd2UgbmVlZCB0byBwcm92aWRlIGEgYmFzZSBVUkwgdG8gYHBhcnNlU3RyaW5nVG9VUkxPYmplY3RgXG4vLyBiZWNhdXNlIHRoZSByZWxhdGl2ZSBVUkwgaXMgbm90IHZhbGlkIG9uIGl0cyBvd24uXG5jb25zdCBERUZBVUxUX0JBU0VfVVJMID0gJ3RoaXNtZXNzYWdlOi8nO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgVVJMIG9iamVjdCBpcyByZWxhdGl2ZVxuICpcbiAqIEBwYXJhbSB1cmwgLSBUaGUgVVJMIG9iamVjdCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgVVJMIG9iamVjdCBpcyByZWxhdGl2ZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmZ1bmN0aW9uIGlzVVJMT2JqZWN0UmVsYXRpdmUodXJsKSB7XG4gIHJldHVybiAnaXNSZWxhdGl2ZScgaW4gdXJsO1xufVxuXG4vKipcbiAqIFBhcnNlcyBzdHJpbmcgdG8gYSBVUkwgb2JqZWN0XG4gKlxuICogQHBhcmFtIHVybCAtIFRoZSBVUkwgdG8gcGFyc2VcbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgVVJMIG9iamVjdCBvciB1bmRlZmluZWQgaWYgdGhlIFVSTCBpcyBpbnZhbGlkXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU3RyaW5nVG9VUkxPYmplY3QodXJsLCB1cmxCYXNlKSB7XG4gIGNvbnN0IGlzUmVsYXRpdmUgPSB1cmwuaW5kZXhPZignOi8vJykgPD0gMCAmJiB1cmwuaW5kZXhPZignLy8nKSAhPT0gMDtcbiAgY29uc3QgYmFzZSA9IHVybEJhc2UgPz8gKGlzUmVsYXRpdmUgPyBERUZBVUxUX0JBU0VfVVJMIDogdW5kZWZpbmVkKTtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYGNhblBhcnNlYCB0byBzaG9ydC1jaXJjdWl0IHRoZSBVUkwgY29uc3RydWN0b3IgaWYgaXQncyBub3QgYSB2YWxpZCBVUkxcbiAgICAvLyBUaGlzIGlzIGZhc3RlciB0aGFuIHRyeWluZyB0byBjb25zdHJ1Y3QgdGhlIFVSTCBhbmQgY2F0Y2hpbmcgdGhlIGVycm9yXG4gICAgLy8gTm9kZSAyMCssIENocm9tZSAxMjArLCBGaXJlZm94IDExNSssIFNhZmFyaSAxNytcbiAgICBpZiAoJ2NhblBhcnNlJyBpbiBVUkwgJiYgIShVUkwgKS5jYW5QYXJzZSh1cmwsIGJhc2UpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxVcmxPYmplY3QgPSBuZXcgVVJMKHVybCwgYmFzZSk7XG4gICAgaWYgKGlzUmVsYXRpdmUpIHtcbiAgICAgIC8vIEJlY2F1c2Ugd2UgdXNlZCBhIGZha2UgYmFzZSBVUkwsIHdlIG5lZWQgdG8gcmV0dXJuIGEgcmVsYXRpdmUgVVJMIG9iamVjdC5cbiAgICAgIC8vIFdlIGNhbm5vdCByZXR1cm4gYW55dGhpbmcgYWJvdXQgdGhlIG9yaWdpbiwgaG9zdCwgZXRjLiBiZWNhdXNlIGl0IHdpbGwgcmVmZXIgdG8gdGhlIGZha2UgYmFzZSBVUkwuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1JlbGF0aXZlLFxuICAgICAgICBwYXRobmFtZTogZnVsbFVybE9iamVjdC5wYXRobmFtZSxcbiAgICAgICAgc2VhcmNoOiBmdWxsVXJsT2JqZWN0LnNlYXJjaCxcbiAgICAgICAgaGFzaDogZnVsbFVybE9iamVjdC5oYXNoLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bGxVcmxPYmplY3Q7XG4gIH0gY2F0Y2gge1xuICAgIC8vIGVtcHR5IGJvZHlcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGFrZXMgYSBVUkwgb2JqZWN0IGFuZCByZXR1cm5zIGEgc2FuaXRpemVkIHN0cmluZyB3aGljaCBpcyBzYWZlIHRvIHVzZSBhcyBzcGFuIG5hbWVcbiAqIHNlZTogaHR0cHM6Ly9kZXZlbG9wLnNlbnRyeS5kZXYvc2RrL2RhdGEtaGFuZGxpbmcvI3N0cnVjdHVyaW5nLWRhdGFcbiAqL1xuZnVuY3Rpb24gZ2V0U2FuaXRpemVkVXJsU3RyaW5nRnJvbVVybE9iamVjdCh1cmwpIHtcbiAgaWYgKGlzVVJMT2JqZWN0UmVsYXRpdmUodXJsKSkge1xuICAgIHJldHVybiB1cmwucGF0aG5hbWU7XG4gIH1cblxuICBjb25zdCBuZXdVcmwgPSBuZXcgVVJMKHVybCk7XG4gIG5ld1VybC5zZWFyY2ggPSAnJztcbiAgbmV3VXJsLmhhc2ggPSAnJztcbiAgaWYgKFsnODAnLCAnNDQzJ10uaW5jbHVkZXMobmV3VXJsLnBvcnQpKSB7XG4gICAgbmV3VXJsLnBvcnQgPSAnJztcbiAgfVxuICBpZiAobmV3VXJsLnBhc3N3b3JkKSB7XG4gICAgbmV3VXJsLnBhc3N3b3JkID0gJyVmaWx0ZXJlZCUnO1xuICB9XG4gIGlmIChuZXdVcmwudXNlcm5hbWUpIHtcbiAgICBuZXdVcmwudXNlcm5hbWUgPSAnJWZpbHRlcmVkJSc7XG4gIH1cblxuICByZXR1cm4gbmV3VXJsLnRvU3RyaW5nKCk7XG59XG5cbmZ1bmN0aW9uIGdldEh0dHBTcGFuTmFtZUZyb21VcmxPYmplY3QoXG4gIHVybE9iamVjdCxcbiAga2luZCxcbiAgcmVxdWVzdCxcbiAgcm91dGVOYW1lLFxuKSB7XG4gIGNvbnN0IG1ldGhvZCA9IHJlcXVlc3Q/Lm1ldGhvZD8udG9VcHBlckNhc2UoKSA/PyAnR0VUJztcbiAgY29uc3Qgcm91dGUgPSByb3V0ZU5hbWVcbiAgICA/IHJvdXRlTmFtZVxuICAgIDogdXJsT2JqZWN0XG4gICAgICA/IGtpbmQgPT09ICdjbGllbnQnXG4gICAgICAgID8gZ2V0U2FuaXRpemVkVXJsU3RyaW5nRnJvbVVybE9iamVjdCh1cmxPYmplY3QpXG4gICAgICAgIDogdXJsT2JqZWN0LnBhdGhuYW1lXG4gICAgICA6ICcvJztcblxuICByZXR1cm4gYCR7bWV0aG9kfSAke3JvdXRlfWA7XG59XG5cbi8qKlxuICogVGFrZXMgYSBwYXJzZWQgVVJMIG9iamVjdCBhbmQgcmV0dXJucyBhIHNldCBvZiBhdHRyaWJ1dGVzIGZvciB0aGUgc3BhblxuICogdGhhdCByZXByZXNlbnRzIHRoZSBIVFRQIHJlcXVlc3QgZm9yIHRoYXQgdXJsLiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggc2VydmVyXG4gKiBhbmQgY2xpZW50IGh0dHAgc3BhbnMuXG4gKlxuICogRm9sbG93cyBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L2h0dHAvLlxuICpcbiAqIEBwYXJhbSB1cmxPYmplY3QgLSBzZWUge0BsaW5rIHBhcnNlU3RyaW5nVG9VUkxPYmplY3R9XG4gKiBAcGFyYW0ga2luZCAtIFRoZSB0eXBlIG9mIEhUVFAgb3BlcmF0aW9uIChzZXJ2ZXIgb3IgY2xpZW50KVxuICogQHBhcmFtIHNwYW5PcmlnaW4gLSBUaGUgb3JpZ2luIG9mIHRoZSBzcGFuXG4gKiBAcGFyYW0gcmVxdWVzdCAtIFRoZSByZXF1ZXN0IG9iamVjdCwgc2VlIHtAbGluayBQYXJ0aWFsUmVxdWVzdH1cbiAqIEBwYXJhbSByb3V0ZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcm91dGUsIG11c3QgYmUgbG93IGNhcmRpbmFsaXR5XG4gKiBAcmV0dXJucyBUaGUgc3BhbiBuYW1lIGFuZCBhdHRyaWJ1dGVzIGZvciB0aGUgSFRUUCBvcGVyYXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0SHR0cFNwYW5EZXRhaWxzRnJvbVVybE9iamVjdChcbiAgdXJsT2JqZWN0LFxuICBraW5kLFxuICBzcGFuT3JpZ2luLFxuICByZXF1ZXN0LFxuICByb3V0ZU5hbWUsXG4pIHtcbiAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiBzcGFuT3JpZ2luLFxuICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV06ICd1cmwnLFxuICB9O1xuXG4gIGlmIChyb3V0ZU5hbWUpIHtcbiAgICAvLyBUaGlzIGlzIGJhc2VkIG9uIGh0dHBzOi8vb3BlbnRlbGVtZXRyeS5pby9kb2NzL3NwZWNzL3NlbWNvbnYvaHR0cC9odHRwLXNwYW5zLyNuYW1lXG4gICAgYXR0cmlidXRlc1traW5kID09PSAnc2VydmVyJyA/ICdodHRwLnJvdXRlJyA6ICd1cmwudGVtcGxhdGUnXSA9IHJvdXRlTmFtZTtcbiAgICBhdHRyaWJ1dGVzW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFXSA9ICdyb3V0ZSc7XG4gIH1cblxuICBpZiAocmVxdWVzdD8ubWV0aG9kKSB7XG4gICAgYXR0cmlidXRlc1tTRU1BTlRJQ19BVFRSSUJVVEVfSFRUUF9SRVFVRVNUX01FVEhPRF0gPSByZXF1ZXN0Lm1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICB9XG5cbiAgaWYgKHVybE9iamVjdCkge1xuICAgIGlmICh1cmxPYmplY3Quc2VhcmNoKSB7XG4gICAgICBhdHRyaWJ1dGVzWyd1cmwucXVlcnknXSA9IHVybE9iamVjdC5zZWFyY2g7XG4gICAgfVxuICAgIGlmICh1cmxPYmplY3QuaGFzaCkge1xuICAgICAgYXR0cmlidXRlc1sndXJsLmZyYWdtZW50J10gPSB1cmxPYmplY3QuaGFzaDtcbiAgICB9XG4gICAgaWYgKHVybE9iamVjdC5wYXRobmFtZSkge1xuICAgICAgYXR0cmlidXRlc1sndXJsLnBhdGgnXSA9IHVybE9iamVjdC5wYXRobmFtZTtcbiAgICAgIGlmICh1cmxPYmplY3QucGF0aG5hbWUgPT09ICcvJykge1xuICAgICAgICBhdHRyaWJ1dGVzW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFXSA9ICdyb3V0ZSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpc1VSTE9iamVjdFJlbGF0aXZlKHVybE9iamVjdCkpIHtcbiAgICAgIGF0dHJpYnV0ZXNbU0VNQU5USUNfQVRUUklCVVRFX1VSTF9GVUxMXSA9IHVybE9iamVjdC5ocmVmO1xuICAgICAgaWYgKHVybE9iamVjdC5wb3J0KSB7XG4gICAgICAgIGF0dHJpYnV0ZXNbJ3VybC5wb3J0J10gPSB1cmxPYmplY3QucG9ydDtcbiAgICAgIH1cbiAgICAgIGlmICh1cmxPYmplY3QucHJvdG9jb2wpIHtcbiAgICAgICAgYXR0cmlidXRlc1sndXJsLnNjaGVtZSddID0gdXJsT2JqZWN0LnByb3RvY29sO1xuICAgICAgfVxuICAgICAgaWYgKHVybE9iamVjdC5ob3N0bmFtZSkge1xuICAgICAgICBhdHRyaWJ1dGVzW2tpbmQgPT09ICdzZXJ2ZXInID8gJ3NlcnZlci5hZGRyZXNzJyA6ICd1cmwuZG9tYWluJ10gPSB1cmxPYmplY3QuaG9zdG5hbWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtnZXRIdHRwU3Bhbk5hbWVGcm9tVXJsT2JqZWN0KHVybE9iamVjdCwga2luZCwgcmVxdWVzdCwgcm91dGVOYW1lKSwgYXR0cmlidXRlc107XG59XG5cbi8qKlxuICogUGFyc2VzIHN0cmluZyBmb3JtIG9mIFVSTCBpbnRvIGFuIG9iamVjdFxuICogLy8gYm9ycm93ZWQgZnJvbSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNhcHBlbmRpeC1CXG4gKiAvLyBpbnRlbnRpb25hbGx5IHVzaW5nIHJlZ2V4IGFuZCBub3QgPGEvPiBocmVmIHBhcnNpbmcgdHJpY2sgYmVjYXVzZSBSZWFjdCBOYXRpdmUgYW5kIG90aGVyXG4gKiAvLyBlbnZpcm9ubWVudHMgd2hlcmUgRE9NIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGVcbiAqIEByZXR1cm5zIHBhcnNlZCBVUkwgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHBhcnNlVXJsKHVybCkge1xuICBpZiAoIXVybCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gdXJsLm1hdGNoKC9eKChbXjovPyNdKyk6KT8oXFwvXFwvKFteLz8jXSopKT8oW14/I10qKShcXD8oW14jXSopKT8oIyguKikpPyQvKTtcblxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLy8gY29lcmNlIHRvIHVuZGVmaW5lZCB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5nIHNvIHdlIGRvbid0IGdldCAndW5kZWZpbmVkJ1xuICBjb25zdCBxdWVyeSA9IG1hdGNoWzZdIHx8ICcnO1xuICBjb25zdCBmcmFnbWVudCA9IG1hdGNoWzhdIHx8ICcnO1xuICByZXR1cm4ge1xuICAgIGhvc3Q6IG1hdGNoWzRdLFxuICAgIHBhdGg6IG1hdGNoWzVdLFxuICAgIHByb3RvY29sOiBtYXRjaFsyXSxcbiAgICBzZWFyY2g6IHF1ZXJ5LFxuICAgIGhhc2g6IGZyYWdtZW50LFxuICAgIHJlbGF0aXZlOiBtYXRjaFs1XSArIHF1ZXJ5ICsgZnJhZ21lbnQsIC8vIGV2ZXJ5dGhpbmcgbWludXMgb3JpZ2luXG4gIH07XG59XG5cbi8qKlxuICogU3RyaXAgdGhlIHF1ZXJ5IHN0cmluZyBhbmQgZnJhZ21lbnQgb2ZmIG9mIGEgZ2l2ZW4gVVJMIG9yIHBhdGggKGlmIHByZXNlbnQpXG4gKlxuICogQHBhcmFtIHVybFBhdGggRnVsbCBVUkwgb3IgcGF0aCwgaW5jbHVkaW5nIHBvc3NpYmxlIHF1ZXJ5IHN0cmluZyBhbmQvb3IgZnJhZ21lbnRcbiAqIEByZXR1cm5zIFVSTCBvciBwYXRoIHdpdGhvdXQgcXVlcnkgc3RyaW5nIG9yIGZyYWdtZW50XG4gKi9cbmZ1bmN0aW9uIHN0cmlwVXJsUXVlcnlBbmRGcmFnbWVudCh1cmxQYXRoKSB7XG4gIHJldHVybiAodXJsUGF0aC5zcGxpdCgvWz8jXS8sIDEpIClbMF07XG59XG5cbi8qKlxuICogVGFrZXMgYSBVUkwgb2JqZWN0IGFuZCByZXR1cm5zIGEgc2FuaXRpemVkIHN0cmluZyB3aGljaCBpcyBzYWZlIHRvIHVzZSBhcyBzcGFuIG5hbWVcbiAqIHNlZTogaHR0cHM6Ly9kZXZlbG9wLnNlbnRyeS5kZXYvc2RrL2RhdGEtaGFuZGxpbmcvI3N0cnVjdHVyaW5nLWRhdGFcbiAqL1xuZnVuY3Rpb24gZ2V0U2FuaXRpemVkVXJsU3RyaW5nKHVybCkge1xuICBjb25zdCB7IHByb3RvY29sLCBob3N0LCBwYXRoIH0gPSB1cmw7XG5cbiAgY29uc3QgZmlsdGVyZWRIb3N0ID1cbiAgICBob3N0XG4gICAgICAvLyBBbHdheXMgZmlsdGVyIG91dCBhdXRob3JpdHlcbiAgICAgID8ucmVwbGFjZSgvXi4qQC8sICdbZmlsdGVyZWRdOltmaWx0ZXJlZF1AJylcbiAgICAgIC8vIERvbid0IHNob3cgc3RhbmRhcmQgOjgwIChodHRwKSBhbmQgOjQ0MyAoaHR0cHMpIHBvcnRzIHRvIHJlZHVjZSB0aGUgbm9pc2VcbiAgICAgIC8vIFRPRE86IFVzZSBuZXcgVVJMIGdsb2JhbCBpZiBpdCBleGlzdHNcbiAgICAgIC5yZXBsYWNlKC8oOjgwKSQvLCAnJylcbiAgICAgIC5yZXBsYWNlKC8oOjQ0MykkLywgJycpIHx8ICcnO1xuXG4gIHJldHVybiBgJHtwcm90b2NvbCA/IGAke3Byb3RvY29sfTovL2AgOiAnJ30ke2ZpbHRlcmVkSG9zdH0ke3BhdGh9YDtcbn1cblxuZXhwb3J0IHsgZ2V0SHR0cFNwYW5EZXRhaWxzRnJvbVVybE9iamVjdCwgZ2V0U2FuaXRpemVkVXJsU3RyaW5nLCBnZXRTYW5pdGl6ZWRVcmxTdHJpbmdGcm9tVXJsT2JqZWN0LCBpc1VSTE9iamVjdFJlbGF0aXZlLCBwYXJzZVN0cmluZ1RvVVJMT2JqZWN0LCBwYXJzZVVybCwgc3RyaXBVcmxRdWVyeUFuZEZyYWdtZW50IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cmwuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/url.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/vercel-ai-attributes.js":
/*!******************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/vercel-ai-attributes.js ***!
  \******************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   AI_MODEL_ID_ATTRIBUTE: () => (/* binding */ AI_MODEL_ID_ATTRIBUTE),\n/* harmony export */   AI_MODEL_PROVIDER_ATTRIBUTE: () => (/* binding */ AI_MODEL_PROVIDER_ATTRIBUTE),\n/* harmony export */   AI_PROMPT_ATTRIBUTE: () => (/* binding */ AI_PROMPT_ATTRIBUTE),\n/* harmony export */   AI_PROMPT_MESSAGES_ATTRIBUTE: () => (/* binding */ AI_PROMPT_MESSAGES_ATTRIBUTE),\n/* harmony export */   AI_PROMPT_TOOLS_ATTRIBUTE: () => (/* binding */ AI_PROMPT_TOOLS_ATTRIBUTE),\n/* harmony export */   AI_RESPONSE_OBJECT_ATTRIBUTE: () => (/* binding */ AI_RESPONSE_OBJECT_ATTRIBUTE),\n/* harmony export */   AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE: () => (/* binding */ AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE),\n/* harmony export */   AI_RESPONSE_TEXT_ATTRIBUTE: () => (/* binding */ AI_RESPONSE_TEXT_ATTRIBUTE),\n/* harmony export */   AI_RESPONSE_TOOL_CALLS_ATTRIBUTE: () => (/* binding */ AI_RESPONSE_TOOL_CALLS_ATTRIBUTE),\n/* harmony export */   AI_TELEMETRY_FUNCTION_ID_ATTRIBUTE: () => (/* binding */ AI_TELEMETRY_FUNCTION_ID_ATTRIBUTE),\n/* harmony export */   AI_TOOL_CALL_ARGS_ATTRIBUTE: () => (/* binding */ AI_TOOL_CALL_ARGS_ATTRIBUTE),\n/* harmony export */   AI_TOOL_CALL_ID_ATTRIBUTE: () => (/* binding */ AI_TOOL_CALL_ID_ATTRIBUTE),\n/* harmony export */   AI_TOOL_CALL_NAME_ATTRIBUTE: () => (/* binding */ AI_TOOL_CALL_NAME_ATTRIBUTE),\n/* harmony export */   AI_TOOL_CALL_RESULT_ATTRIBUTE: () => (/* binding */ AI_TOOL_CALL_RESULT_ATTRIBUTE),\n/* harmony export */   AI_USAGE_COMPLETION_TOKENS_ATTRIBUTE: () => (/* binding */ AI_USAGE_COMPLETION_TOKENS_ATTRIBUTE),\n/* harmony export */   AI_USAGE_PROMPT_TOKENS_ATTRIBUTE: () => (/* binding */ AI_USAGE_PROMPT_TOKENS_ATTRIBUTE),\n/* harmony export */   GEN_AI_RESPONSE_MODEL_ATTRIBUTE: () => (/* binding */ GEN_AI_RESPONSE_MODEL_ATTRIBUTE),\n/* harmony export */   GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE: () => (/* binding */ GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE),\n/* harmony export */   GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE: () => (/* binding */ GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE)\n/* harmony export */ });\n/* eslint-disable max-lines */\n/**\n * AI SDK Telemetry Attributes\n * Based on https://ai-sdk.dev/docs/ai-sdk-core/telemetry#collected-data\n */\n\n\n// =============================================================================\n// SHARED ATTRIBUTES\n// =============================================================================\n\n/**\n * `generateText` function - `ai.generateText` span\n * `streamText` function - `ai.streamText` span\n *\n * The prompt that was used when calling the function\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#generatetext-function\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#streamtext-function\n */\nconst AI_PROMPT_ATTRIBUTE = 'ai.prompt';\n\n/**\n * `generateObject` function - `ai.generateObject` span\n * `streamObject` function - `ai.streamObject` span\n *\n * The object that was generated (stringified JSON)\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#generateobject-function\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#streamobject-function\n */\nconst AI_RESPONSE_OBJECT_ATTRIBUTE = 'ai.response.object';\n\n// =============================================================================\n// GENERATETEXT FUNCTION - UNIQUE ATTRIBUTES\n// =============================================================================\n\n/**\n * `generateText` function - `ai.generateText` span\n *\n * The text that was generated\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#generatetext-function\n */\nconst AI_RESPONSE_TEXT_ATTRIBUTE = 'ai.response.text';\n\n/**\n * `generateText` function - `ai.generateText` span\n *\n * The tool calls that were made as part of the generation (stringified JSON)\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#generatetext-function\n */\nconst AI_RESPONSE_TOOL_CALLS_ATTRIBUTE = 'ai.response.toolCalls';\n\n/**\n * `generateText` function - `ai.generateText.doGenerate` span\n *\n * The messages that were passed into the provider\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#generatetext-function\n */\nconst AI_PROMPT_MESSAGES_ATTRIBUTE = 'ai.prompt.messages';\n\n/**\n * `generateText` function - `ai.generateText.doGenerate` span\n *\n * Array of stringified tool definitions\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#generatetext-function\n */\nconst AI_PROMPT_TOOLS_ATTRIBUTE = 'ai.prompt.tools';\n\n/**\n * Basic LLM span information\n * Multiple spans\n *\n * The id of the model\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#basic-llm-span-information\n */\nconst AI_MODEL_ID_ATTRIBUTE = 'ai.model.id';\n\n/**\n * Basic LLM span information\n * Multiple spans\n *\n * The provider of the model\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#basic-llm-span-information\n */\nconst AI_MODEL_PROVIDER_ATTRIBUTE = 'ai.model.provider';\n\n/**\n * Basic LLM span information\n * Multiple spans\n *\n * Provider specific metadata returned with the generation response\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#basic-llm-span-information\n */\nconst AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE = 'ai.response.providerMetadata';\n\n/**\n * Basic LLM span information\n * Multiple spans\n *\n * The functionId that was set through `telemetry.functionId`\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#basic-llm-span-information\n */\nconst AI_TELEMETRY_FUNCTION_ID_ATTRIBUTE = 'ai.telemetry.functionId';\n\n/**\n * Basic LLM span information\n * Multiple spans\n *\n * The number of completion tokens that were used\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#basic-llm-span-information\n */\nconst AI_USAGE_COMPLETION_TOKENS_ATTRIBUTE = 'ai.usage.completionTokens';\n\n/**\n * Basic LLM span information\n * Multiple spans\n *\n * The number of prompt tokens that were used\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#basic-llm-span-information\n */\nconst AI_USAGE_PROMPT_TOKENS_ATTRIBUTE = 'ai.usage.promptTokens';\n\n/**\n * Semantic Conventions for GenAI operations\n * Individual LLM call spans\n *\n * The model that was used to generate the response\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#call-llm-span-information\n */\nconst GEN_AI_RESPONSE_MODEL_ATTRIBUTE = 'gen_ai.response.model';\n\n/**\n * Semantic Conventions for GenAI operations\n * Individual LLM call spans\n *\n * The number of prompt tokens that were used\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#call-llm-span-information\n */\nconst GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE = 'gen_ai.usage.input_tokens';\n\n/**\n * Semantic Conventions for GenAI operations\n * Individual LLM call spans\n *\n * The number of completion tokens that were used\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#call-llm-span-information\n */\nconst GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE = 'gen_ai.usage.output_tokens';\n\n// =============================================================================\n// TOOL CALL SPANS\n// =============================================================================\n\n/**\n * Tool call spans\n * `ai.toolCall` span\n *\n * The name of the tool\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#tool-call-spans\n */\nconst AI_TOOL_CALL_NAME_ATTRIBUTE = 'ai.toolCall.name';\n\n/**\n * Tool call spans\n * `ai.toolCall` span\n *\n * The id of the tool call\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#tool-call-spans\n */\nconst AI_TOOL_CALL_ID_ATTRIBUTE = 'ai.toolCall.id';\n\n/**\n * Tool call spans\n * `ai.toolCall` span\n *\n * The parameters of the tool call\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#tool-call-spans\n */\nconst AI_TOOL_CALL_ARGS_ATTRIBUTE = 'ai.toolCall.args';\n\n/**\n * Tool call spans\n * `ai.toolCall` span\n *\n * The result of the tool call\n * @see https://ai-sdk.dev/docs/ai-sdk-core/telemetry#tool-call-spans\n */\nconst AI_TOOL_CALL_RESULT_ATTRIBUTE = 'ai.toolCall.result';\n\n// =============================================================================\n// PROVIDER METADATA\n// =============================================================================\n\n/**\n * OpenAI Provider Metadata\n * @see https://ai-sdk.dev/providers/ai-sdk-providers/openai\n * @see https://github.com/vercel/ai/blob/65e042afde6aad4da9d7a62526ece839eb34f9a5/packages/openai/src/openai-chat-language-model.ts#L397-L416\n * @see https://github.com/vercel/ai/blob/65e042afde6aad4da9d7a62526ece839eb34f9a5/packages/openai/src/responses/openai-responses-language-model.ts#L377C7-L384\n */\n\n\n//# sourceMappingURL=vercel-ai-attributes.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3ZlcmNlbC1haS1hdHRyaWJ1dGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFNmxCO0FBQzdsQiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3ZlcmNlbC1haS1hdHRyaWJ1dGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1saW5lcyAqL1xuLyoqXG4gKiBBSSBTREsgVGVsZW1ldHJ5IEF0dHJpYnV0ZXNcbiAqIEJhc2VkIG9uIGh0dHBzOi8vYWktc2RrLmRldi9kb2NzL2FpLXNkay1jb3JlL3RlbGVtZXRyeSNjb2xsZWN0ZWQtZGF0YVxuICovXG5cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNIQVJFRCBBVFRSSUJVVEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIGBnZW5lcmF0ZVRleHRgIGZ1bmN0aW9uIC0gYGFpLmdlbmVyYXRlVGV4dGAgc3BhblxuICogYHN0cmVhbVRleHRgIGZ1bmN0aW9uIC0gYGFpLnN0cmVhbVRleHRgIHNwYW5cbiAqXG4gKiBUaGUgcHJvbXB0IHRoYXQgd2FzIHVzZWQgd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICogQHNlZSBodHRwczovL2FpLXNkay5kZXYvZG9jcy9haS1zZGstY29yZS90ZWxlbWV0cnkjZ2VuZXJhdGV0ZXh0LWZ1bmN0aW9uXG4gKiBAc2VlIGh0dHBzOi8vYWktc2RrLmRldi9kb2NzL2FpLXNkay1jb3JlL3RlbGVtZXRyeSNzdHJlYW10ZXh0LWZ1bmN0aW9uXG4gKi9cbmNvbnN0IEFJX1BST01QVF9BVFRSSUJVVEUgPSAnYWkucHJvbXB0JztcblxuLyoqXG4gKiBgZ2VuZXJhdGVPYmplY3RgIGZ1bmN0aW9uIC0gYGFpLmdlbmVyYXRlT2JqZWN0YCBzcGFuXG4gKiBgc3RyZWFtT2JqZWN0YCBmdW5jdGlvbiAtIGBhaS5zdHJlYW1PYmplY3RgIHNwYW5cbiAqXG4gKiBUaGUgb2JqZWN0IHRoYXQgd2FzIGdlbmVyYXRlZCAoc3RyaW5naWZpZWQgSlNPTilcbiAqIEBzZWUgaHR0cHM6Ly9haS1zZGsuZGV2L2RvY3MvYWktc2RrLWNvcmUvdGVsZW1ldHJ5I2dlbmVyYXRlb2JqZWN0LWZ1bmN0aW9uXG4gKiBAc2VlIGh0dHBzOi8vYWktc2RrLmRldi9kb2NzL2FpLXNkay1jb3JlL3RlbGVtZXRyeSNzdHJlYW1vYmplY3QtZnVuY3Rpb25cbiAqL1xuY29uc3QgQUlfUkVTUE9OU0VfT0JKRUNUX0FUVFJJQlVURSA9ICdhaS5yZXNwb25zZS5vYmplY3QnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gR0VORVJBVEVURVhUIEZVTkNUSU9OIC0gVU5JUVVFIEFUVFJJQlVURVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogYGdlbmVyYXRlVGV4dGAgZnVuY3Rpb24gLSBgYWkuZ2VuZXJhdGVUZXh0YCBzcGFuXG4gKlxuICogVGhlIHRleHQgdGhhdCB3YXMgZ2VuZXJhdGVkXG4gKiBAc2VlIGh0dHBzOi8vYWktc2RrLmRldi9kb2NzL2FpLXNkay1jb3JlL3RlbGVtZXRyeSNnZW5lcmF0ZXRleHQtZnVuY3Rpb25cbiAqL1xuY29uc3QgQUlfUkVTUE9OU0VfVEVYVF9BVFRSSUJVVEUgPSAnYWkucmVzcG9uc2UudGV4dCc7XG5cbi8qKlxuICogYGdlbmVyYXRlVGV4dGAgZnVuY3Rpb24gLSBgYWkuZ2VuZXJhdGVUZXh0YCBzcGFuXG4gKlxuICogVGhlIHRvb2wgY2FsbHMgdGhhdCB3ZXJlIG1hZGUgYXMgcGFydCBvZiB0aGUgZ2VuZXJhdGlvbiAoc3RyaW5naWZpZWQgSlNPTilcbiAqIEBzZWUgaHR0cHM6Ly9haS1zZGsuZGV2L2RvY3MvYWktc2RrLWNvcmUvdGVsZW1ldHJ5I2dlbmVyYXRldGV4dC1mdW5jdGlvblxuICovXG5jb25zdCBBSV9SRVNQT05TRV9UT09MX0NBTExTX0FUVFJJQlVURSA9ICdhaS5yZXNwb25zZS50b29sQ2FsbHMnO1xuXG4vKipcbiAqIGBnZW5lcmF0ZVRleHRgIGZ1bmN0aW9uIC0gYGFpLmdlbmVyYXRlVGV4dC5kb0dlbmVyYXRlYCBzcGFuXG4gKlxuICogVGhlIG1lc3NhZ2VzIHRoYXQgd2VyZSBwYXNzZWQgaW50byB0aGUgcHJvdmlkZXJcbiAqIEBzZWUgaHR0cHM6Ly9haS1zZGsuZGV2L2RvY3MvYWktc2RrLWNvcmUvdGVsZW1ldHJ5I2dlbmVyYXRldGV4dC1mdW5jdGlvblxuICovXG5jb25zdCBBSV9QUk9NUFRfTUVTU0FHRVNfQVRUUklCVVRFID0gJ2FpLnByb21wdC5tZXNzYWdlcyc7XG5cbi8qKlxuICogYGdlbmVyYXRlVGV4dGAgZnVuY3Rpb24gLSBgYWkuZ2VuZXJhdGVUZXh0LmRvR2VuZXJhdGVgIHNwYW5cbiAqXG4gKiBBcnJheSBvZiBzdHJpbmdpZmllZCB0b29sIGRlZmluaXRpb25zXG4gKiBAc2VlIGh0dHBzOi8vYWktc2RrLmRldi9kb2NzL2FpLXNkay1jb3JlL3RlbGVtZXRyeSNnZW5lcmF0ZXRleHQtZnVuY3Rpb25cbiAqL1xuY29uc3QgQUlfUFJPTVBUX1RPT0xTX0FUVFJJQlVURSA9ICdhaS5wcm9tcHQudG9vbHMnO1xuXG4vKipcbiAqIEJhc2ljIExMTSBzcGFuIGluZm9ybWF0aW9uXG4gKiBNdWx0aXBsZSBzcGFuc1xuICpcbiAqIFRoZSBpZCBvZiB0aGUgbW9kZWxcbiAqIEBzZWUgaHR0cHM6Ly9haS1zZGsuZGV2L2RvY3MvYWktc2RrLWNvcmUvdGVsZW1ldHJ5I2Jhc2ljLWxsbS1zcGFuLWluZm9ybWF0aW9uXG4gKi9cbmNvbnN0IEFJX01PREVMX0lEX0FUVFJJQlVURSA9ICdhaS5tb2RlbC5pZCc7XG5cbi8qKlxuICogQmFzaWMgTExNIHNwYW4gaW5mb3JtYXRpb25cbiAqIE11bHRpcGxlIHNwYW5zXG4gKlxuICogVGhlIHByb3ZpZGVyIG9mIHRoZSBtb2RlbFxuICogQHNlZSBodHRwczovL2FpLXNkay5kZXYvZG9jcy9haS1zZGstY29yZS90ZWxlbWV0cnkjYmFzaWMtbGxtLXNwYW4taW5mb3JtYXRpb25cbiAqL1xuY29uc3QgQUlfTU9ERUxfUFJPVklERVJfQVRUUklCVVRFID0gJ2FpLm1vZGVsLnByb3ZpZGVyJztcblxuLyoqXG4gKiBCYXNpYyBMTE0gc3BhbiBpbmZvcm1hdGlvblxuICogTXVsdGlwbGUgc3BhbnNcbiAqXG4gKiBQcm92aWRlciBzcGVjaWZpYyBtZXRhZGF0YSByZXR1cm5lZCB3aXRoIHRoZSBnZW5lcmF0aW9uIHJlc3BvbnNlXG4gKiBAc2VlIGh0dHBzOi8vYWktc2RrLmRldi9kb2NzL2FpLXNkay1jb3JlL3RlbGVtZXRyeSNiYXNpYy1sbG0tc3Bhbi1pbmZvcm1hdGlvblxuICovXG5jb25zdCBBSV9SRVNQT05TRV9QUk9WSURFUl9NRVRBREFUQV9BVFRSSUJVVEUgPSAnYWkucmVzcG9uc2UucHJvdmlkZXJNZXRhZGF0YSc7XG5cbi8qKlxuICogQmFzaWMgTExNIHNwYW4gaW5mb3JtYXRpb25cbiAqIE11bHRpcGxlIHNwYW5zXG4gKlxuICogVGhlIGZ1bmN0aW9uSWQgdGhhdCB3YXMgc2V0IHRocm91Z2ggYHRlbGVtZXRyeS5mdW5jdGlvbklkYFxuICogQHNlZSBodHRwczovL2FpLXNkay5kZXYvZG9jcy9haS1zZGstY29yZS90ZWxlbWV0cnkjYmFzaWMtbGxtLXNwYW4taW5mb3JtYXRpb25cbiAqL1xuY29uc3QgQUlfVEVMRU1FVFJZX0ZVTkNUSU9OX0lEX0FUVFJJQlVURSA9ICdhaS50ZWxlbWV0cnkuZnVuY3Rpb25JZCc7XG5cbi8qKlxuICogQmFzaWMgTExNIHNwYW4gaW5mb3JtYXRpb25cbiAqIE11bHRpcGxlIHNwYW5zXG4gKlxuICogVGhlIG51bWJlciBvZiBjb21wbGV0aW9uIHRva2VucyB0aGF0IHdlcmUgdXNlZFxuICogQHNlZSBodHRwczovL2FpLXNkay5kZXYvZG9jcy9haS1zZGstY29yZS90ZWxlbWV0cnkjYmFzaWMtbGxtLXNwYW4taW5mb3JtYXRpb25cbiAqL1xuY29uc3QgQUlfVVNBR0VfQ09NUExFVElPTl9UT0tFTlNfQVRUUklCVVRFID0gJ2FpLnVzYWdlLmNvbXBsZXRpb25Ub2tlbnMnO1xuXG4vKipcbiAqIEJhc2ljIExMTSBzcGFuIGluZm9ybWF0aW9uXG4gKiBNdWx0aXBsZSBzcGFuc1xuICpcbiAqIFRoZSBudW1iZXIgb2YgcHJvbXB0IHRva2VucyB0aGF0IHdlcmUgdXNlZFxuICogQHNlZSBodHRwczovL2FpLXNkay5kZXYvZG9jcy9haS1zZGstY29yZS90ZWxlbWV0cnkjYmFzaWMtbGxtLXNwYW4taW5mb3JtYXRpb25cbiAqL1xuY29uc3QgQUlfVVNBR0VfUFJPTVBUX1RPS0VOU19BVFRSSUJVVEUgPSAnYWkudXNhZ2UucHJvbXB0VG9rZW5zJztcblxuLyoqXG4gKiBTZW1hbnRpYyBDb252ZW50aW9ucyBmb3IgR2VuQUkgb3BlcmF0aW9uc1xuICogSW5kaXZpZHVhbCBMTE0gY2FsbCBzcGFuc1xuICpcbiAqIFRoZSBtb2RlbCB0aGF0IHdhcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSByZXNwb25zZVxuICogQHNlZSBodHRwczovL2FpLXNkay5kZXYvZG9jcy9haS1zZGstY29yZS90ZWxlbWV0cnkjY2FsbC1sbG0tc3Bhbi1pbmZvcm1hdGlvblxuICovXG5jb25zdCBHRU5fQUlfUkVTUE9OU0VfTU9ERUxfQVRUUklCVVRFID0gJ2dlbl9haS5yZXNwb25zZS5tb2RlbCc7XG5cbi8qKlxuICogU2VtYW50aWMgQ29udmVudGlvbnMgZm9yIEdlbkFJIG9wZXJhdGlvbnNcbiAqIEluZGl2aWR1YWwgTExNIGNhbGwgc3BhbnNcbiAqXG4gKiBUaGUgbnVtYmVyIG9mIHByb21wdCB0b2tlbnMgdGhhdCB3ZXJlIHVzZWRcbiAqIEBzZWUgaHR0cHM6Ly9haS1zZGsuZGV2L2RvY3MvYWktc2RrLWNvcmUvdGVsZW1ldHJ5I2NhbGwtbGxtLXNwYW4taW5mb3JtYXRpb25cbiAqL1xuY29uc3QgR0VOX0FJX1VTQUdFX0lOUFVUX1RPS0VOU19BVFRSSUJVVEUgPSAnZ2VuX2FpLnVzYWdlLmlucHV0X3Rva2Vucyc7XG5cbi8qKlxuICogU2VtYW50aWMgQ29udmVudGlvbnMgZm9yIEdlbkFJIG9wZXJhdGlvbnNcbiAqIEluZGl2aWR1YWwgTExNIGNhbGwgc3BhbnNcbiAqXG4gKiBUaGUgbnVtYmVyIG9mIGNvbXBsZXRpb24gdG9rZW5zIHRoYXQgd2VyZSB1c2VkXG4gKiBAc2VlIGh0dHBzOi8vYWktc2RrLmRldi9kb2NzL2FpLXNkay1jb3JlL3RlbGVtZXRyeSNjYWxsLWxsbS1zcGFuLWluZm9ybWF0aW9uXG4gKi9cbmNvbnN0IEdFTl9BSV9VU0FHRV9PVVRQVVRfVE9LRU5TX0FUVFJJQlVURSA9ICdnZW5fYWkudXNhZ2Uub3V0cHV0X3Rva2Vucyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUT09MIENBTEwgU1BBTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVG9vbCBjYWxsIHNwYW5zXG4gKiBgYWkudG9vbENhbGxgIHNwYW5cbiAqXG4gKiBUaGUgbmFtZSBvZiB0aGUgdG9vbFxuICogQHNlZSBodHRwczovL2FpLXNkay5kZXYvZG9jcy9haS1zZGstY29yZS90ZWxlbWV0cnkjdG9vbC1jYWxsLXNwYW5zXG4gKi9cbmNvbnN0IEFJX1RPT0xfQ0FMTF9OQU1FX0FUVFJJQlVURSA9ICdhaS50b29sQ2FsbC5uYW1lJztcblxuLyoqXG4gKiBUb29sIGNhbGwgc3BhbnNcbiAqIGBhaS50b29sQ2FsbGAgc3BhblxuICpcbiAqIFRoZSBpZCBvZiB0aGUgdG9vbCBjYWxsXG4gKiBAc2VlIGh0dHBzOi8vYWktc2RrLmRldi9kb2NzL2FpLXNkay1jb3JlL3RlbGVtZXRyeSN0b29sLWNhbGwtc3BhbnNcbiAqL1xuY29uc3QgQUlfVE9PTF9DQUxMX0lEX0FUVFJJQlVURSA9ICdhaS50b29sQ2FsbC5pZCc7XG5cbi8qKlxuICogVG9vbCBjYWxsIHNwYW5zXG4gKiBgYWkudG9vbENhbGxgIHNwYW5cbiAqXG4gKiBUaGUgcGFyYW1ldGVycyBvZiB0aGUgdG9vbCBjYWxsXG4gKiBAc2VlIGh0dHBzOi8vYWktc2RrLmRldi9kb2NzL2FpLXNkay1jb3JlL3RlbGVtZXRyeSN0b29sLWNhbGwtc3BhbnNcbiAqL1xuY29uc3QgQUlfVE9PTF9DQUxMX0FSR1NfQVRUUklCVVRFID0gJ2FpLnRvb2xDYWxsLmFyZ3MnO1xuXG4vKipcbiAqIFRvb2wgY2FsbCBzcGFuc1xuICogYGFpLnRvb2xDYWxsYCBzcGFuXG4gKlxuICogVGhlIHJlc3VsdCBvZiB0aGUgdG9vbCBjYWxsXG4gKiBAc2VlIGh0dHBzOi8vYWktc2RrLmRldi9kb2NzL2FpLXNkay1jb3JlL3RlbGVtZXRyeSN0b29sLWNhbGwtc3BhbnNcbiAqL1xuY29uc3QgQUlfVE9PTF9DQUxMX1JFU1VMVF9BVFRSSUJVVEUgPSAnYWkudG9vbENhbGwucmVzdWx0JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFBST1ZJREVSIE1FVEFEQVRBXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIE9wZW5BSSBQcm92aWRlciBNZXRhZGF0YVxuICogQHNlZSBodHRwczovL2FpLXNkay5kZXYvcHJvdmlkZXJzL2FpLXNkay1wcm92aWRlcnMvb3BlbmFpXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvYWkvYmxvYi82NWUwNDJhZmRlNmFhZDRkYTlkN2E2MjUyNmVjZTgzOWViMzRmOWE1L3BhY2thZ2VzL29wZW5haS9zcmMvb3BlbmFpLWNoYXQtbGFuZ3VhZ2UtbW9kZWwudHMjTDM5Ny1MNDE2XG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvYWkvYmxvYi82NWUwNDJhZmRlNmFhZDRkYTlkN2E2MjUyNmVjZTgzOWViMzRmOWE1L3BhY2thZ2VzL29wZW5haS9zcmMvcmVzcG9uc2VzL29wZW5haS1yZXNwb25zZXMtbGFuZ3VhZ2UtbW9kZWwudHMjTDM3N0M3LUwzODRcbiAqL1xuXG5leHBvcnQgeyBBSV9NT0RFTF9JRF9BVFRSSUJVVEUsIEFJX01PREVMX1BST1ZJREVSX0FUVFJJQlVURSwgQUlfUFJPTVBUX0FUVFJJQlVURSwgQUlfUFJPTVBUX01FU1NBR0VTX0FUVFJJQlVURSwgQUlfUFJPTVBUX1RPT0xTX0FUVFJJQlVURSwgQUlfUkVTUE9OU0VfT0JKRUNUX0FUVFJJQlVURSwgQUlfUkVTUE9OU0VfUFJPVklERVJfTUVUQURBVEFfQVRUUklCVVRFLCBBSV9SRVNQT05TRV9URVhUX0FUVFJJQlVURSwgQUlfUkVTUE9OU0VfVE9PTF9DQUxMU19BVFRSSUJVVEUsIEFJX1RFTEVNRVRSWV9GVU5DVElPTl9JRF9BVFRSSUJVVEUsIEFJX1RPT0xfQ0FMTF9BUkdTX0FUVFJJQlVURSwgQUlfVE9PTF9DQUxMX0lEX0FUVFJJQlVURSwgQUlfVE9PTF9DQUxMX05BTUVfQVRUUklCVVRFLCBBSV9UT09MX0NBTExfUkVTVUxUX0FUVFJJQlVURSwgQUlfVVNBR0VfQ09NUExFVElPTl9UT0tFTlNfQVRUUklCVVRFLCBBSV9VU0FHRV9QUk9NUFRfVE9LRU5TX0FUVFJJQlVURSwgR0VOX0FJX1JFU1BPTlNFX01PREVMX0FUVFJJQlVURSwgR0VOX0FJX1VTQUdFX0lOUFVUX1RPS0VOU19BVFRSSUJVVEUsIEdFTl9BSV9VU0FHRV9PVVRQVVRfVE9LRU5TX0FUVFJJQlVURSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyY2VsLWFpLWF0dHJpYnV0ZXMuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/vercel-ai-attributes.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/vercel-ai.js":
/*!*******************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/vercel-ai.js ***!
  \*******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addVercelAiProcessors: () => (/* binding */ addVercelAiProcessors)\n/* harmony export */ });\n/* harmony import */ var _semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../semanticAttributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/semanticAttributes.js\");\n/* harmony import */ var _spanUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./spanUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js\");\n/* harmony import */ var _vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./vercel-ai-attributes.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/vercel-ai-attributes.js\");\n\n\n\n\nfunction addOriginToSpan(span, origin) {\n  span.setAttribute(_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, origin);\n}\n\n/**\n * Post-process spans emitted by the Vercel AI SDK.\n * This is supposed to be used in `client.on('spanStart', ...)\n */\nfunction onVercelAiSpanStart(span) {\n  const { data: attributes, description: name } = (0,_spanUtils_js__WEBPACK_IMPORTED_MODULE_1__.spanToJSON)(span);\n\n  if (!name) {\n    return;\n  }\n\n  // Tool call spans\n  // https://ai-sdk.dev/docs/ai-sdk-core/telemetry#tool-call-spans\n  if (attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_TOOL_CALL_NAME_ATTRIBUTE] && attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_TOOL_CALL_ID_ATTRIBUTE] && name === 'ai.toolCall') {\n    processToolCallSpan(span, attributes);\n    return;\n  }\n\n  // The AI and Provider must be defined for generate, stream, and embed spans.\n  // The id of the model\n  const aiModelId = attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_MODEL_ID_ATTRIBUTE];\n  // the provider of the model\n  const aiModelProvider = attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_MODEL_PROVIDER_ATTRIBUTE];\n  if (typeof aiModelId !== 'string' || typeof aiModelProvider !== 'string' || !aiModelId || !aiModelProvider) {\n    return;\n  }\n\n  processGenerateSpan(span, name, attributes);\n}\n\nfunction vercelAiEventProcessor(event) {\n  if (event.type === 'transaction' && event.spans) {\n    for (const span of event.spans) {\n      // this mutates spans in-place\n      processEndedVercelAiSpan(span);\n    }\n  }\n  return event;\n}\n/**\n * Post-process spans emitted by the Vercel AI SDK.\n */\nfunction processEndedVercelAiSpan(span) {\n  const { data: attributes, origin } = span;\n\n  if (origin !== 'auto.vercelai.otel') {\n    return;\n  }\n\n  renameAttributeKey(attributes, _vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_USAGE_COMPLETION_TOKENS_ATTRIBUTE, _vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE);\n  renameAttributeKey(attributes, _vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_USAGE_PROMPT_TOKENS_ATTRIBUTE, _vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE);\n\n  if (\n    typeof attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE] === 'number' &&\n    typeof attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE] === 'number'\n  ) {\n    attributes['gen_ai.usage.total_tokens'] =\n      attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.GEN_AI_USAGE_OUTPUT_TOKENS_ATTRIBUTE] + attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.GEN_AI_USAGE_INPUT_TOKENS_ATTRIBUTE];\n  }\n\n  // Rename AI SDK attributes to standardized gen_ai attributes\n  renameAttributeKey(attributes, _vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_PROMPT_MESSAGES_ATTRIBUTE, 'gen_ai.request.messages');\n  renameAttributeKey(attributes, _vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_RESPONSE_TEXT_ATTRIBUTE, 'gen_ai.response.text');\n  renameAttributeKey(attributes, _vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_RESPONSE_TOOL_CALLS_ATTRIBUTE, 'gen_ai.response.tool_calls');\n  renameAttributeKey(attributes, _vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_RESPONSE_OBJECT_ATTRIBUTE, 'gen_ai.response.object');\n  renameAttributeKey(attributes, _vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_PROMPT_TOOLS_ATTRIBUTE, 'gen_ai.request.available_tools');\n\n  renameAttributeKey(attributes, _vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_TOOL_CALL_ARGS_ATTRIBUTE, 'gen_ai.tool.input');\n  renameAttributeKey(attributes, _vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_TOOL_CALL_RESULT_ATTRIBUTE, 'gen_ai.tool.output');\n\n  addProviderMetadataToAttributes(attributes);\n\n  // Change attributes namespaced with `ai.X` to `vercel.ai.X`\n  for (const key of Object.keys(attributes)) {\n    if (key.startsWith('ai.')) {\n      renameAttributeKey(attributes, key, `vercel.${key}`);\n    }\n  }\n}\n\n/**\n * Renames an attribute key in the provided attributes object if the old key exists.\n * This function safely handles null and undefined values.\n */\nfunction renameAttributeKey(attributes, oldKey, newKey) {\n  if (attributes[oldKey] != null) {\n    attributes[newKey] = attributes[oldKey];\n    // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n    delete attributes[oldKey];\n  }\n}\n\nfunction processToolCallSpan(span, attributes) {\n  addOriginToSpan(span, 'auto.vercelai.otel');\n  span.setAttribute(_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP, 'gen_ai.execute_tool');\n  renameAttributeKey(attributes, _vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_TOOL_CALL_NAME_ATTRIBUTE, 'gen_ai.tool.name');\n  renameAttributeKey(attributes, _vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_TOOL_CALL_ID_ATTRIBUTE, 'gen_ai.tool.call.id');\n  // https://opentelemetry.io/docs/specs/semconv/registry/attributes/gen-ai/#gen-ai-tool-type\n  if (!attributes['gen_ai.tool.type']) {\n    span.setAttribute('gen_ai.tool.type', 'function');\n  }\n  const toolName = attributes['gen_ai.tool.name'];\n  if (toolName) {\n    span.updateName(`execute_tool ${toolName}`);\n  }\n}\n\nfunction processGenerateSpan(span, name, attributes) {\n  addOriginToSpan(span, 'auto.vercelai.otel');\n\n  const nameWthoutAi = name.replace('ai.', '');\n  span.setAttribute('ai.pipeline.name', nameWthoutAi);\n  span.updateName(nameWthoutAi);\n\n  // If a Telemetry name is set and it is a pipeline span, use that as the operation name\n  const functionId = attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_TELEMETRY_FUNCTION_ID_ATTRIBUTE];\n  if (functionId && typeof functionId === 'string' && name.split('.').length - 1 === 1) {\n    span.updateName(`${nameWthoutAi} ${functionId}`);\n    span.setAttribute('gen_ai.function_id', functionId);\n  }\n\n  if (attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_PROMPT_ATTRIBUTE]) {\n    span.setAttribute('gen_ai.prompt', attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_PROMPT_ATTRIBUTE]);\n  }\n  if (attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_MODEL_ID_ATTRIBUTE] && !attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.GEN_AI_RESPONSE_MODEL_ATTRIBUTE]) {\n    span.setAttribute(_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.GEN_AI_RESPONSE_MODEL_ATTRIBUTE, attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_MODEL_ID_ATTRIBUTE]);\n  }\n  span.setAttribute('ai.streaming', name.includes('stream'));\n\n  // Generate Spans\n  if (name === 'ai.generateText') {\n    span.setAttribute(_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP, 'gen_ai.invoke_agent');\n    return;\n  }\n\n  if (name === 'ai.generateText.doGenerate') {\n    span.setAttribute(_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP, 'gen_ai.generate_text');\n    span.updateName(`generate_text ${attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_MODEL_ID_ATTRIBUTE]}`);\n    return;\n  }\n\n  if (name === 'ai.streamText') {\n    span.setAttribute(_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP, 'gen_ai.invoke_agent');\n    return;\n  }\n\n  if (name === 'ai.streamText.doStream') {\n    span.setAttribute(_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP, 'gen_ai.stream_text');\n    span.updateName(`stream_text ${attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_MODEL_ID_ATTRIBUTE]}`);\n    return;\n  }\n\n  if (name === 'ai.generateObject') {\n    span.setAttribute(_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP, 'gen_ai.invoke_agent');\n    return;\n  }\n\n  if (name === 'ai.generateObject.doGenerate') {\n    span.setAttribute(_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP, 'gen_ai.generate_object');\n    span.updateName(`generate_object ${attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_MODEL_ID_ATTRIBUTE]}`);\n    return;\n  }\n\n  if (name === 'ai.streamObject') {\n    span.setAttribute(_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP, 'gen_ai.invoke_agent');\n    return;\n  }\n\n  if (name === 'ai.streamObject.doStream') {\n    span.setAttribute(_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP, 'gen_ai.stream_object');\n    span.updateName(`stream_object ${attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_MODEL_ID_ATTRIBUTE]}`);\n    return;\n  }\n\n  if (name === 'ai.embed') {\n    span.setAttribute(_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP, 'gen_ai.invoke_agent');\n    return;\n  }\n\n  if (name === 'ai.embed.doEmbed') {\n    span.setAttribute(_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP, 'gen_ai.embed');\n    span.updateName(`embed ${attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_MODEL_ID_ATTRIBUTE]}`);\n    return;\n  }\n\n  if (name === 'ai.embedMany') {\n    span.setAttribute(_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP, 'gen_ai.invoke_agent');\n    return;\n  }\n\n  if (name === 'ai.embedMany.doEmbed') {\n    span.setAttribute(_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP, 'gen_ai.embed_many');\n    span.updateName(`embed_many ${attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_MODEL_ID_ATTRIBUTE]}`);\n    return;\n  }\n\n  if (name.startsWith('ai.stream')) {\n    span.setAttribute(_semanticAttributes_js__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP, 'ai.run');\n    return;\n  }\n}\n\n/**\n * Add event processors to the given client to process Vercel AI spans.\n */\nfunction addVercelAiProcessors(client) {\n  client.on('spanStart', onVercelAiSpanStart);\n  // Note: We cannot do this on `spanEnd`, because the span cannot be mutated anymore at this point\n  client.addEventProcessor(Object.assign(vercelAiEventProcessor, { id: 'VercelAiEventProcessor' }));\n}\n\nfunction addProviderMetadataToAttributes(attributes) {\n  const providerMetadata = attributes[_vercel_ai_attributes_js__WEBPACK_IMPORTED_MODULE_2__.AI_RESPONSE_PROVIDER_METADATA_ATTRIBUTE] ;\n  if (providerMetadata) {\n    try {\n      const providerMetadataObject = JSON.parse(providerMetadata) ;\n      if (providerMetadataObject.openai) {\n        setAttributeIfDefined(\n          attributes,\n          'gen_ai.usage.input_tokens.cached',\n          providerMetadataObject.openai.cachedPromptTokens,\n        );\n        setAttributeIfDefined(\n          attributes,\n          'gen_ai.usage.output_tokens.reasoning',\n          providerMetadataObject.openai.reasoningTokens,\n        );\n        setAttributeIfDefined(\n          attributes,\n          'gen_ai.usage.output_tokens.prediction_accepted',\n          providerMetadataObject.openai.acceptedPredictionTokens,\n        );\n        setAttributeIfDefined(\n          attributes,\n          'gen_ai.usage.output_tokens.prediction_rejected',\n          providerMetadataObject.openai.rejectedPredictionTokens,\n        );\n        setAttributeIfDefined(attributes, 'gen_ai.conversation.id', providerMetadataObject.openai.responseId);\n      }\n\n      if (providerMetadataObject.anthropic) {\n        setAttributeIfDefined(\n          attributes,\n          'gen_ai.usage.input_tokens.cached',\n          providerMetadataObject.anthropic.cacheReadInputTokens,\n        );\n        setAttributeIfDefined(\n          attributes,\n          'gen_ai.usage.input_tokens.cache_write',\n          providerMetadataObject.anthropic.cacheCreationInputTokens,\n        );\n      }\n\n      if (providerMetadataObject.bedrock?.usage) {\n        setAttributeIfDefined(\n          attributes,\n          'gen_ai.usage.input_tokens.cached',\n          providerMetadataObject.bedrock.usage.cacheReadInputTokens,\n        );\n        setAttributeIfDefined(\n          attributes,\n          'gen_ai.usage.input_tokens.cache_write',\n          providerMetadataObject.bedrock.usage.cacheWriteInputTokens,\n        );\n      }\n\n      if (providerMetadataObject.deepseek) {\n        setAttributeIfDefined(\n          attributes,\n          'gen_ai.usage.input_tokens.cached',\n          providerMetadataObject.deepseek.promptCacheHitTokens,\n        );\n        setAttributeIfDefined(\n          attributes,\n          'gen_ai.usage.input_tokens.cache_miss',\n          providerMetadataObject.deepseek.promptCacheMissTokens,\n        );\n      }\n    } catch {\n      // Ignore\n    }\n  }\n}\n\n/**\n * Sets an attribute only if the value is not null or undefined.\n */\nfunction setAttributeIfDefined(attributes, key, value) {\n  if (value != null) {\n    attributes[key] = value;\n  }\n}\n\n\n//# sourceMappingURL=vercel-ai.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3ZlcmNlbC1haS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTBHO0FBQzlEO0FBQ2tsQjs7QUFFOW5CO0FBQ0Esb0JBQW9CLG9GQUFnQztBQUNwRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxzQ0FBc0MsRUFBRSx5REFBVTs7QUFFNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsaUZBQTJCLGdCQUFnQiwrRUFBeUI7QUFDckY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0IsMkVBQXFCO0FBQ3BEO0FBQ0EscUNBQXFDLGlGQUEyQjtBQUNoRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsMkJBQTJCOztBQUVyQztBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLDBGQUFvQyxFQUFFLDBGQUFvQztBQUMzRyxpQ0FBaUMsc0ZBQWdDLEVBQUUseUZBQW1DOztBQUV0RztBQUNBLHNCQUFzQiwwRkFBb0M7QUFDMUQsc0JBQXNCLHlGQUFtQztBQUN6RDtBQUNBO0FBQ0EsaUJBQWlCLDBGQUFvQyxlQUFlLHlGQUFtQztBQUN2Rzs7QUFFQTtBQUNBLGlDQUFpQyxrRkFBNEI7QUFDN0QsaUNBQWlDLGdGQUEwQjtBQUMzRCxpQ0FBaUMsc0ZBQWdDO0FBQ2pFLGlDQUFpQyxrRkFBNEI7QUFDN0QsaUNBQWlDLCtFQUF5Qjs7QUFFMUQsaUNBQWlDLGlGQUEyQjtBQUM1RCxpQ0FBaUMsbUZBQTZCOztBQUU5RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsSUFBSTtBQUN4RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLGdGQUE0QjtBQUNoRCxpQ0FBaUMsaUZBQTJCO0FBQzVELGlDQUFpQywrRUFBeUI7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLFNBQVM7QUFDN0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQyx3RkFBa0M7QUFDbEU7QUFDQSx1QkFBdUIsY0FBYyxFQUFFLFdBQVc7QUFDbEQ7QUFDQTs7QUFFQSxpQkFBaUIseUVBQW1CO0FBQ3BDLGtEQUFrRCx5RUFBbUI7QUFDckU7QUFDQSxpQkFBaUIsMkVBQXFCLGlCQUFpQixxRkFBK0I7QUFDdEYsc0JBQXNCLHFGQUErQixhQUFhLDJFQUFxQjtBQUN2RjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0IsZ0ZBQTRCO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsZ0ZBQTRCO0FBQ2xELHFDQUFxQyxXQUFXLDJFQUFxQixFQUFFO0FBQ3ZFO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsZ0ZBQTRCO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsZ0ZBQTRCO0FBQ2xELG1DQUFtQyxXQUFXLDJFQUFxQixFQUFFO0FBQ3JFO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsZ0ZBQTRCO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsZ0ZBQTRCO0FBQ2xELHVDQUF1QyxXQUFXLDJFQUFxQixFQUFFO0FBQ3pFO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsZ0ZBQTRCO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsZ0ZBQTRCO0FBQ2xELHFDQUFxQyxXQUFXLDJFQUFxQixFQUFFO0FBQ3ZFO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsZ0ZBQTRCO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsZ0ZBQTRCO0FBQ2xELDZCQUE2QixXQUFXLDJFQUFxQixFQUFFO0FBQy9EO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsZ0ZBQTRCO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsZ0ZBQTRCO0FBQ2xELGtDQUFrQyxXQUFXLDJFQUFxQixFQUFFO0FBQ3BFO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0IsZ0ZBQTRCO0FBQ2xEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUUsOEJBQThCO0FBQ2pHOztBQUVBO0FBQ0Esc0NBQXNDLDZGQUF1QztBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWlDO0FBQ2pDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvdmVyY2VsLWFpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1AsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOIH0gZnJvbSAnLi4vc2VtYW50aWNBdHRyaWJ1dGVzLmpzJztcbmltcG9ydCB7IHNwYW5Ub0pTT04gfSBmcm9tICcuL3NwYW5VdGlscy5qcyc7XG5pbXBvcnQgeyBBSV9UT09MX0NBTExfTkFNRV9BVFRSSUJVVEUsIEFJX1RPT0xfQ0FMTF9JRF9BVFRSSUJVVEUsIEFJX01PREVMX0lEX0FUVFJJQlVURSwgQUlfTU9ERUxfUFJPVklERVJfQVRUUklCVVRFLCBBSV9URUxFTUVUUllfRlVOQ1RJT05fSURfQVRUUklCVVRFLCBBSV9QUk9NUFRfQVRUUklCVVRFLCBHRU5fQUlfUkVTUE9OU0VfTU9ERUxfQVRUUklCVVRFLCBHRU5fQUlfVVNBR0VfT1VUUFVUX1RPS0VOU19BVFRSSUJVVEUsIEdFTl9BSV9VU0FHRV9JTlBVVF9UT0tFTlNfQVRUUklCVVRFLCBBSV9SRVNQT05TRV9QUk9WSURFUl9NRVRBREFUQV9BVFRSSUJVVEUsIEFJX1VTQUdFX0NPTVBMRVRJT05fVE9LRU5TX0FUVFJJQlVURSwgQUlfVVNBR0VfUFJPTVBUX1RPS0VOU19BVFRSSUJVVEUsIEFJX1BST01QVF9NRVNTQUdFU19BVFRSSUJVVEUsIEFJX1JFU1BPTlNFX1RFWFRfQVRUUklCVVRFLCBBSV9SRVNQT05TRV9UT09MX0NBTExTX0FUVFJJQlVURSwgQUlfUkVTUE9OU0VfT0JKRUNUX0FUVFJJQlVURSwgQUlfUFJPTVBUX1RPT0xTX0FUVFJJQlVURSwgQUlfVE9PTF9DQUxMX0FSR1NfQVRUUklCVVRFLCBBSV9UT09MX0NBTExfUkVTVUxUX0FUVFJJQlVURSB9IGZyb20gJy4vdmVyY2VsLWFpLWF0dHJpYnV0ZXMuanMnO1xuXG5mdW5jdGlvbiBhZGRPcmlnaW5Ub1NwYW4oc3Bhbiwgb3JpZ2luKSB7XG4gIHNwYW4uc2V0QXR0cmlidXRlKFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOLCBvcmlnaW4pO1xufVxuXG4vKipcbiAqIFBvc3QtcHJvY2VzcyBzcGFucyBlbWl0dGVkIGJ5IHRoZSBWZXJjZWwgQUkgU0RLLlxuICogVGhpcyBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGBjbGllbnQub24oJ3NwYW5TdGFydCcsIC4uLilcbiAqL1xuZnVuY3Rpb24gb25WZXJjZWxBaVNwYW5TdGFydChzcGFuKSB7XG4gIGNvbnN0IHsgZGF0YTogYXR0cmlidXRlcywgZGVzY3JpcHRpb246IG5hbWUgfSA9IHNwYW5Ub0pTT04oc3Bhbik7XG5cbiAgaWYgKCFuYW1lKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVG9vbCBjYWxsIHNwYW5zXG4gIC8vIGh0dHBzOi8vYWktc2RrLmRldi9kb2NzL2FpLXNkay1jb3JlL3RlbGVtZXRyeSN0b29sLWNhbGwtc3BhbnNcbiAgaWYgKGF0dHJpYnV0ZXNbQUlfVE9PTF9DQUxMX05BTUVfQVRUUklCVVRFXSAmJiBhdHRyaWJ1dGVzW0FJX1RPT0xfQ0FMTF9JRF9BVFRSSUJVVEVdICYmIG5hbWUgPT09ICdhaS50b29sQ2FsbCcpIHtcbiAgICBwcm9jZXNzVG9vbENhbGxTcGFuKHNwYW4sIGF0dHJpYnV0ZXMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFRoZSBBSSBhbmQgUHJvdmlkZXIgbXVzdCBiZSBkZWZpbmVkIGZvciBnZW5lcmF0ZSwgc3RyZWFtLCBhbmQgZW1iZWQgc3BhbnMuXG4gIC8vIFRoZSBpZCBvZiB0aGUgbW9kZWxcbiAgY29uc3QgYWlNb2RlbElkID0gYXR0cmlidXRlc1tBSV9NT0RFTF9JRF9BVFRSSUJVVEVdO1xuICAvLyB0aGUgcHJvdmlkZXIgb2YgdGhlIG1vZGVsXG4gIGNvbnN0IGFpTW9kZWxQcm92aWRlciA9IGF0dHJpYnV0ZXNbQUlfTU9ERUxfUFJPVklERVJfQVRUUklCVVRFXTtcbiAgaWYgKHR5cGVvZiBhaU1vZGVsSWQgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBhaU1vZGVsUHJvdmlkZXIgIT09ICdzdHJpbmcnIHx8ICFhaU1vZGVsSWQgfHwgIWFpTW9kZWxQcm92aWRlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHByb2Nlc3NHZW5lcmF0ZVNwYW4oc3BhbiwgbmFtZSwgYXR0cmlidXRlcyk7XG59XG5cbmZ1bmN0aW9uIHZlcmNlbEFpRXZlbnRQcm9jZXNzb3IoZXZlbnQpIHtcbiAgaWYgKGV2ZW50LnR5cGUgPT09ICd0cmFuc2FjdGlvbicgJiYgZXZlbnQuc3BhbnMpIHtcbiAgICBmb3IgKGNvbnN0IHNwYW4gb2YgZXZlbnQuc3BhbnMpIHtcbiAgICAgIC8vIHRoaXMgbXV0YXRlcyBzcGFucyBpbi1wbGFjZVxuICAgICAgcHJvY2Vzc0VuZGVkVmVyY2VsQWlTcGFuKHNwYW4pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZXZlbnQ7XG59XG4vKipcbiAqIFBvc3QtcHJvY2VzcyBzcGFucyBlbWl0dGVkIGJ5IHRoZSBWZXJjZWwgQUkgU0RLLlxuICovXG5mdW5jdGlvbiBwcm9jZXNzRW5kZWRWZXJjZWxBaVNwYW4oc3Bhbikge1xuICBjb25zdCB7IGRhdGE6IGF0dHJpYnV0ZXMsIG9yaWdpbiB9ID0gc3BhbjtcblxuICBpZiAob3JpZ2luICE9PSAnYXV0by52ZXJjZWxhaS5vdGVsJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJlbmFtZUF0dHJpYnV0ZUtleShhdHRyaWJ1dGVzLCBBSV9VU0FHRV9DT01QTEVUSU9OX1RPS0VOU19BVFRSSUJVVEUsIEdFTl9BSV9VU0FHRV9PVVRQVVRfVE9LRU5TX0FUVFJJQlVURSk7XG4gIHJlbmFtZUF0dHJpYnV0ZUtleShhdHRyaWJ1dGVzLCBBSV9VU0FHRV9QUk9NUFRfVE9LRU5TX0FUVFJJQlVURSwgR0VOX0FJX1VTQUdFX0lOUFVUX1RPS0VOU19BVFRSSUJVVEUpO1xuXG4gIGlmIChcbiAgICB0eXBlb2YgYXR0cmlidXRlc1tHRU5fQUlfVVNBR0VfT1VUUFVUX1RPS0VOU19BVFRSSUJVVEVdID09PSAnbnVtYmVyJyAmJlxuICAgIHR5cGVvZiBhdHRyaWJ1dGVzW0dFTl9BSV9VU0FHRV9JTlBVVF9UT0tFTlNfQVRUUklCVVRFXSA9PT0gJ251bWJlcidcbiAgKSB7XG4gICAgYXR0cmlidXRlc1snZ2VuX2FpLnVzYWdlLnRvdGFsX3Rva2VucyddID1cbiAgICAgIGF0dHJpYnV0ZXNbR0VOX0FJX1VTQUdFX09VVFBVVF9UT0tFTlNfQVRUUklCVVRFXSArIGF0dHJpYnV0ZXNbR0VOX0FJX1VTQUdFX0lOUFVUX1RPS0VOU19BVFRSSUJVVEVdO1xuICB9XG5cbiAgLy8gUmVuYW1lIEFJIFNESyBhdHRyaWJ1dGVzIHRvIHN0YW5kYXJkaXplZCBnZW5fYWkgYXR0cmlidXRlc1xuICByZW5hbWVBdHRyaWJ1dGVLZXkoYXR0cmlidXRlcywgQUlfUFJPTVBUX01FU1NBR0VTX0FUVFJJQlVURSwgJ2dlbl9haS5yZXF1ZXN0Lm1lc3NhZ2VzJyk7XG4gIHJlbmFtZUF0dHJpYnV0ZUtleShhdHRyaWJ1dGVzLCBBSV9SRVNQT05TRV9URVhUX0FUVFJJQlVURSwgJ2dlbl9haS5yZXNwb25zZS50ZXh0Jyk7XG4gIHJlbmFtZUF0dHJpYnV0ZUtleShhdHRyaWJ1dGVzLCBBSV9SRVNQT05TRV9UT09MX0NBTExTX0FUVFJJQlVURSwgJ2dlbl9haS5yZXNwb25zZS50b29sX2NhbGxzJyk7XG4gIHJlbmFtZUF0dHJpYnV0ZUtleShhdHRyaWJ1dGVzLCBBSV9SRVNQT05TRV9PQkpFQ1RfQVRUUklCVVRFLCAnZ2VuX2FpLnJlc3BvbnNlLm9iamVjdCcpO1xuICByZW5hbWVBdHRyaWJ1dGVLZXkoYXR0cmlidXRlcywgQUlfUFJPTVBUX1RPT0xTX0FUVFJJQlVURSwgJ2dlbl9haS5yZXF1ZXN0LmF2YWlsYWJsZV90b29scycpO1xuXG4gIHJlbmFtZUF0dHJpYnV0ZUtleShhdHRyaWJ1dGVzLCBBSV9UT09MX0NBTExfQVJHU19BVFRSSUJVVEUsICdnZW5fYWkudG9vbC5pbnB1dCcpO1xuICByZW5hbWVBdHRyaWJ1dGVLZXkoYXR0cmlidXRlcywgQUlfVE9PTF9DQUxMX1JFU1VMVF9BVFRSSUJVVEUsICdnZW5fYWkudG9vbC5vdXRwdXQnKTtcblxuICBhZGRQcm92aWRlck1ldGFkYXRhVG9BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpO1xuXG4gIC8vIENoYW5nZSBhdHRyaWJ1dGVzIG5hbWVzcGFjZWQgd2l0aCBgYWkuWGAgdG8gYHZlcmNlbC5haS5YYFxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKSkge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aCgnYWkuJykpIHtcbiAgICAgIHJlbmFtZUF0dHJpYnV0ZUtleShhdHRyaWJ1dGVzLCBrZXksIGB2ZXJjZWwuJHtrZXl9YCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVuYW1lcyBhbiBhdHRyaWJ1dGUga2V5IGluIHRoZSBwcm92aWRlZCBhdHRyaWJ1dGVzIG9iamVjdCBpZiB0aGUgb2xkIGtleSBleGlzdHMuXG4gKiBUaGlzIGZ1bmN0aW9uIHNhZmVseSBoYW5kbGVzIG51bGwgYW5kIHVuZGVmaW5lZCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHJlbmFtZUF0dHJpYnV0ZUtleShhdHRyaWJ1dGVzLCBvbGRLZXksIG5ld0tleSkge1xuICBpZiAoYXR0cmlidXRlc1tvbGRLZXldICE9IG51bGwpIHtcbiAgICBhdHRyaWJ1dGVzW25ld0tleV0gPSBhdHRyaWJ1dGVzW29sZEtleV07XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxuICAgIGRlbGV0ZSBhdHRyaWJ1dGVzW29sZEtleV07XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1Rvb2xDYWxsU3BhbihzcGFuLCBhdHRyaWJ1dGVzKSB7XG4gIGFkZE9yaWdpblRvU3BhbihzcGFuLCAnYXV0by52ZXJjZWxhaS5vdGVsJyk7XG4gIHNwYW4uc2V0QXR0cmlidXRlKFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1AsICdnZW5fYWkuZXhlY3V0ZV90b29sJyk7XG4gIHJlbmFtZUF0dHJpYnV0ZUtleShhdHRyaWJ1dGVzLCBBSV9UT09MX0NBTExfTkFNRV9BVFRSSUJVVEUsICdnZW5fYWkudG9vbC5uYW1lJyk7XG4gIHJlbmFtZUF0dHJpYnV0ZUtleShhdHRyaWJ1dGVzLCBBSV9UT09MX0NBTExfSURfQVRUUklCVVRFLCAnZ2VuX2FpLnRvb2wuY2FsbC5pZCcpO1xuICAvLyBodHRwczovL29wZW50ZWxlbWV0cnkuaW8vZG9jcy9zcGVjcy9zZW1jb252L3JlZ2lzdHJ5L2F0dHJpYnV0ZXMvZ2VuLWFpLyNnZW4tYWktdG9vbC10eXBlXG4gIGlmICghYXR0cmlidXRlc1snZ2VuX2FpLnRvb2wudHlwZSddKSB7XG4gICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2dlbl9haS50b29sLnR5cGUnLCAnZnVuY3Rpb24nKTtcbiAgfVxuICBjb25zdCB0b29sTmFtZSA9IGF0dHJpYnV0ZXNbJ2dlbl9haS50b29sLm5hbWUnXTtcbiAgaWYgKHRvb2xOYW1lKSB7XG4gICAgc3Bhbi51cGRhdGVOYW1lKGBleGVjdXRlX3Rvb2wgJHt0b29sTmFtZX1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzR2VuZXJhdGVTcGFuKHNwYW4sIG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgYWRkT3JpZ2luVG9TcGFuKHNwYW4sICdhdXRvLnZlcmNlbGFpLm90ZWwnKTtcblxuICBjb25zdCBuYW1lV3Rob3V0QWkgPSBuYW1lLnJlcGxhY2UoJ2FpLicsICcnKTtcbiAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2FpLnBpcGVsaW5lLm5hbWUnLCBuYW1lV3Rob3V0QWkpO1xuICBzcGFuLnVwZGF0ZU5hbWUobmFtZVd0aG91dEFpKTtcblxuICAvLyBJZiBhIFRlbGVtZXRyeSBuYW1lIGlzIHNldCBhbmQgaXQgaXMgYSBwaXBlbGluZSBzcGFuLCB1c2UgdGhhdCBhcyB0aGUgb3BlcmF0aW9uIG5hbWVcbiAgY29uc3QgZnVuY3Rpb25JZCA9IGF0dHJpYnV0ZXNbQUlfVEVMRU1FVFJZX0ZVTkNUSU9OX0lEX0FUVFJJQlVURV07XG4gIGlmIChmdW5jdGlvbklkICYmIHR5cGVvZiBmdW5jdGlvbklkID09PSAnc3RyaW5nJyAmJiBuYW1lLnNwbGl0KCcuJykubGVuZ3RoIC0gMSA9PT0gMSkge1xuICAgIHNwYW4udXBkYXRlTmFtZShgJHtuYW1lV3Rob3V0QWl9ICR7ZnVuY3Rpb25JZH1gKTtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZSgnZ2VuX2FpLmZ1bmN0aW9uX2lkJywgZnVuY3Rpb25JZCk7XG4gIH1cblxuICBpZiAoYXR0cmlidXRlc1tBSV9QUk9NUFRfQVRUUklCVVRFXSkge1xuICAgIHNwYW4uc2V0QXR0cmlidXRlKCdnZW5fYWkucHJvbXB0JywgYXR0cmlidXRlc1tBSV9QUk9NUFRfQVRUUklCVVRFXSk7XG4gIH1cbiAgaWYgKGF0dHJpYnV0ZXNbQUlfTU9ERUxfSURfQVRUUklCVVRFXSAmJiAhYXR0cmlidXRlc1tHRU5fQUlfUkVTUE9OU0VfTU9ERUxfQVRUUklCVVRFXSkge1xuICAgIHNwYW4uc2V0QXR0cmlidXRlKEdFTl9BSV9SRVNQT05TRV9NT0RFTF9BVFRSSUJVVEUsIGF0dHJpYnV0ZXNbQUlfTU9ERUxfSURfQVRUUklCVVRFXSk7XG4gIH1cbiAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2FpLnN0cmVhbWluZycsIG5hbWUuaW5jbHVkZXMoJ3N0cmVhbScpKTtcblxuICAvLyBHZW5lcmF0ZSBTcGFuc1xuICBpZiAobmFtZSA9PT0gJ2FpLmdlbmVyYXRlVGV4dCcpIHtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZShTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QLCAnZ2VuX2FpLmludm9rZV9hZ2VudCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuYW1lID09PSAnYWkuZ2VuZXJhdGVUZXh0LmRvR2VuZXJhdGUnKSB7XG4gICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUCwgJ2dlbl9haS5nZW5lcmF0ZV90ZXh0Jyk7XG4gICAgc3Bhbi51cGRhdGVOYW1lKGBnZW5lcmF0ZV90ZXh0ICR7YXR0cmlidXRlc1tBSV9NT0RFTF9JRF9BVFRSSUJVVEVdfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuYW1lID09PSAnYWkuc3RyZWFtVGV4dCcpIHtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZShTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QLCAnZ2VuX2FpLmludm9rZV9hZ2VudCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuYW1lID09PSAnYWkuc3RyZWFtVGV4dC5kb1N0cmVhbScpIHtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZShTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QLCAnZ2VuX2FpLnN0cmVhbV90ZXh0Jyk7XG4gICAgc3Bhbi51cGRhdGVOYW1lKGBzdHJlYW1fdGV4dCAke2F0dHJpYnV0ZXNbQUlfTU9ERUxfSURfQVRUUklCVVRFXX1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobmFtZSA9PT0gJ2FpLmdlbmVyYXRlT2JqZWN0Jykge1xuICAgIHNwYW4uc2V0QXR0cmlidXRlKFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1AsICdnZW5fYWkuaW52b2tlX2FnZW50Jyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG5hbWUgPT09ICdhaS5nZW5lcmF0ZU9iamVjdC5kb0dlbmVyYXRlJykge1xuICAgIHNwYW4uc2V0QXR0cmlidXRlKFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1AsICdnZW5fYWkuZ2VuZXJhdGVfb2JqZWN0Jyk7XG4gICAgc3Bhbi51cGRhdGVOYW1lKGBnZW5lcmF0ZV9vYmplY3QgJHthdHRyaWJ1dGVzW0FJX01PREVMX0lEX0FUVFJJQlVURV19YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG5hbWUgPT09ICdhaS5zdHJlYW1PYmplY3QnKSB7XG4gICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUCwgJ2dlbl9haS5pbnZva2VfYWdlbnQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobmFtZSA9PT0gJ2FpLnN0cmVhbU9iamVjdC5kb1N0cmVhbScpIHtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZShTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QLCAnZ2VuX2FpLnN0cmVhbV9vYmplY3QnKTtcbiAgICBzcGFuLnVwZGF0ZU5hbWUoYHN0cmVhbV9vYmplY3QgJHthdHRyaWJ1dGVzW0FJX01PREVMX0lEX0FUVFJJQlVURV19YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG5hbWUgPT09ICdhaS5lbWJlZCcpIHtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZShTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QLCAnZ2VuX2FpLmludm9rZV9hZ2VudCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuYW1lID09PSAnYWkuZW1iZWQuZG9FbWJlZCcpIHtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZShTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QLCAnZ2VuX2FpLmVtYmVkJyk7XG4gICAgc3Bhbi51cGRhdGVOYW1lKGBlbWJlZCAke2F0dHJpYnV0ZXNbQUlfTU9ERUxfSURfQVRUUklCVVRFXX1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobmFtZSA9PT0gJ2FpLmVtYmVkTWFueScpIHtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZShTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QLCAnZ2VuX2FpLmludm9rZV9hZ2VudCcpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuYW1lID09PSAnYWkuZW1iZWRNYW55LmRvRW1iZWQnKSB7XG4gICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUCwgJ2dlbl9haS5lbWJlZF9tYW55Jyk7XG4gICAgc3Bhbi51cGRhdGVOYW1lKGBlbWJlZF9tYW55ICR7YXR0cmlidXRlc1tBSV9NT0RFTF9JRF9BVFRSSUJVVEVdfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ2FpLnN0cmVhbScpKSB7XG4gICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUCwgJ2FpLnJ1bicpO1xuICAgIHJldHVybjtcbiAgfVxufVxuXG4vKipcbiAqIEFkZCBldmVudCBwcm9jZXNzb3JzIHRvIHRoZSBnaXZlbiBjbGllbnQgdG8gcHJvY2VzcyBWZXJjZWwgQUkgc3BhbnMuXG4gKi9cbmZ1bmN0aW9uIGFkZFZlcmNlbEFpUHJvY2Vzc29ycyhjbGllbnQpIHtcbiAgY2xpZW50Lm9uKCdzcGFuU3RhcnQnLCBvblZlcmNlbEFpU3BhblN0YXJ0KTtcbiAgLy8gTm90ZTogV2UgY2Fubm90IGRvIHRoaXMgb24gYHNwYW5FbmRgLCBiZWNhdXNlIHRoZSBzcGFuIGNhbm5vdCBiZSBtdXRhdGVkIGFueW1vcmUgYXQgdGhpcyBwb2ludFxuICBjbGllbnQuYWRkRXZlbnRQcm9jZXNzb3IoT2JqZWN0LmFzc2lnbih2ZXJjZWxBaUV2ZW50UHJvY2Vzc29yLCB7IGlkOiAnVmVyY2VsQWlFdmVudFByb2Nlc3NvcicgfSkpO1xufVxuXG5mdW5jdGlvbiBhZGRQcm92aWRlck1ldGFkYXRhVG9BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpIHtcbiAgY29uc3QgcHJvdmlkZXJNZXRhZGF0YSA9IGF0dHJpYnV0ZXNbQUlfUkVTUE9OU0VfUFJPVklERVJfTUVUQURBVEFfQVRUUklCVVRFXSA7XG4gIGlmIChwcm92aWRlck1ldGFkYXRhKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyTWV0YWRhdGFPYmplY3QgPSBKU09OLnBhcnNlKHByb3ZpZGVyTWV0YWRhdGEpIDtcbiAgICAgIGlmIChwcm92aWRlck1ldGFkYXRhT2JqZWN0Lm9wZW5haSkge1xuICAgICAgICBzZXRBdHRyaWJ1dGVJZkRlZmluZWQoXG4gICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAnZ2VuX2FpLnVzYWdlLmlucHV0X3Rva2Vucy5jYWNoZWQnLFxuICAgICAgICAgIHByb3ZpZGVyTWV0YWRhdGFPYmplY3Qub3BlbmFpLmNhY2hlZFByb21wdFRva2VucyxcbiAgICAgICAgKTtcbiAgICAgICAgc2V0QXR0cmlidXRlSWZEZWZpbmVkKFxuICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgJ2dlbl9haS51c2FnZS5vdXRwdXRfdG9rZW5zLnJlYXNvbmluZycsXG4gICAgICAgICAgcHJvdmlkZXJNZXRhZGF0YU9iamVjdC5vcGVuYWkucmVhc29uaW5nVG9rZW5zLFxuICAgICAgICApO1xuICAgICAgICBzZXRBdHRyaWJ1dGVJZkRlZmluZWQoXG4gICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAnZ2VuX2FpLnVzYWdlLm91dHB1dF90b2tlbnMucHJlZGljdGlvbl9hY2NlcHRlZCcsXG4gICAgICAgICAgcHJvdmlkZXJNZXRhZGF0YU9iamVjdC5vcGVuYWkuYWNjZXB0ZWRQcmVkaWN0aW9uVG9rZW5zLFxuICAgICAgICApO1xuICAgICAgICBzZXRBdHRyaWJ1dGVJZkRlZmluZWQoXG4gICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAnZ2VuX2FpLnVzYWdlLm91dHB1dF90b2tlbnMucHJlZGljdGlvbl9yZWplY3RlZCcsXG4gICAgICAgICAgcHJvdmlkZXJNZXRhZGF0YU9iamVjdC5vcGVuYWkucmVqZWN0ZWRQcmVkaWN0aW9uVG9rZW5zLFxuICAgICAgICApO1xuICAgICAgICBzZXRBdHRyaWJ1dGVJZkRlZmluZWQoYXR0cmlidXRlcywgJ2dlbl9haS5jb252ZXJzYXRpb24uaWQnLCBwcm92aWRlck1ldGFkYXRhT2JqZWN0Lm9wZW5haS5yZXNwb25zZUlkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3ZpZGVyTWV0YWRhdGFPYmplY3QuYW50aHJvcGljKSB7XG4gICAgICAgIHNldEF0dHJpYnV0ZUlmRGVmaW5lZChcbiAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICdnZW5fYWkudXNhZ2UuaW5wdXRfdG9rZW5zLmNhY2hlZCcsXG4gICAgICAgICAgcHJvdmlkZXJNZXRhZGF0YU9iamVjdC5hbnRocm9waWMuY2FjaGVSZWFkSW5wdXRUb2tlbnMsXG4gICAgICAgICk7XG4gICAgICAgIHNldEF0dHJpYnV0ZUlmRGVmaW5lZChcbiAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICdnZW5fYWkudXNhZ2UuaW5wdXRfdG9rZW5zLmNhY2hlX3dyaXRlJyxcbiAgICAgICAgICBwcm92aWRlck1ldGFkYXRhT2JqZWN0LmFudGhyb3BpYy5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm92aWRlck1ldGFkYXRhT2JqZWN0LmJlZHJvY2s/LnVzYWdlKSB7XG4gICAgICAgIHNldEF0dHJpYnV0ZUlmRGVmaW5lZChcbiAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICdnZW5fYWkudXNhZ2UuaW5wdXRfdG9rZW5zLmNhY2hlZCcsXG4gICAgICAgICAgcHJvdmlkZXJNZXRhZGF0YU9iamVjdC5iZWRyb2NrLnVzYWdlLmNhY2hlUmVhZElucHV0VG9rZW5zLFxuICAgICAgICApO1xuICAgICAgICBzZXRBdHRyaWJ1dGVJZkRlZmluZWQoXG4gICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAnZ2VuX2FpLnVzYWdlLmlucHV0X3Rva2Vucy5jYWNoZV93cml0ZScsXG4gICAgICAgICAgcHJvdmlkZXJNZXRhZGF0YU9iamVjdC5iZWRyb2NrLnVzYWdlLmNhY2hlV3JpdGVJbnB1dFRva2VucyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3ZpZGVyTWV0YWRhdGFPYmplY3QuZGVlcHNlZWspIHtcbiAgICAgICAgc2V0QXR0cmlidXRlSWZEZWZpbmVkKFxuICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgJ2dlbl9haS51c2FnZS5pbnB1dF90b2tlbnMuY2FjaGVkJyxcbiAgICAgICAgICBwcm92aWRlck1ldGFkYXRhT2JqZWN0LmRlZXBzZWVrLnByb21wdENhY2hlSGl0VG9rZW5zLFxuICAgICAgICApO1xuICAgICAgICBzZXRBdHRyaWJ1dGVJZkRlZmluZWQoXG4gICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAnZ2VuX2FpLnVzYWdlLmlucHV0X3Rva2Vucy5jYWNoZV9taXNzJyxcbiAgICAgICAgICBwcm92aWRlck1ldGFkYXRhT2JqZWN0LmRlZXBzZWVrLnByb21wdENhY2hlTWlzc1Rva2VucyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIElnbm9yZVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNldHMgYW4gYXR0cmlidXRlIG9ubHkgaWYgdGhlIHZhbHVlIGlzIG5vdCBudWxsIG9yIHVuZGVmaW5lZC5cbiAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlSWZEZWZpbmVkKGF0dHJpYnV0ZXMsIGtleSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICBhdHRyaWJ1dGVzW2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgeyBhZGRWZXJjZWxBaVByb2Nlc3NvcnMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcmNlbC1haS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/vercel-ai.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/vercelWaitUntil.js":
/*!*************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/vercelWaitUntil.js ***!
  \*************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   vercelWaitUntil: () => (/* binding */ vercelWaitUntil)\n/* harmony export */ });\n/* harmony import */ var _worldwide_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./worldwide.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\");\n\n\n/**\n * Function that delays closing of a Vercel lambda until the provided promise is resolved.\n *\n * Vendored from https://www.npmjs.com/package/@vercel/functions\n */\nfunction vercelWaitUntil(task) {\n  const vercelRequestContextGlobal =\n    // @ts-expect-error This is not typed\n    _worldwide_js__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ[Symbol.for('@vercel/request-context')];\n\n  const ctx = vercelRequestContextGlobal?.get?.();\n\n  if (ctx?.waitUntil) {\n    ctx.waitUntil(task);\n  }\n}\n\n\n//# sourceMappingURL=vercelWaitUntil.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3ZlcmNlbFdhaXRVbnRpbC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUE0Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUkscURBQVU7O0FBRWQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRTJCO0FBQzNCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrY29yZUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9idWlsZC9lc20vdXRpbHMvdmVyY2VsV2FpdFVudGlsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdMT0JBTF9PQkogfSBmcm9tICcuL3dvcmxkd2lkZS5qcyc7XG5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCBkZWxheXMgY2xvc2luZyBvZiBhIFZlcmNlbCBsYW1iZGEgdW50aWwgdGhlIHByb3ZpZGVkIHByb21pc2UgaXMgcmVzb2x2ZWQuXG4gKlxuICogVmVuZG9yZWQgZnJvbSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9AdmVyY2VsL2Z1bmN0aW9uc1xuICovXG5mdW5jdGlvbiB2ZXJjZWxXYWl0VW50aWwodGFzaykge1xuICBjb25zdCB2ZXJjZWxSZXF1ZXN0Q29udGV4dEdsb2JhbCA9XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUaGlzIGlzIG5vdCB0eXBlZFxuICAgIEdMT0JBTF9PQkpbU3ltYm9sLmZvcignQHZlcmNlbC9yZXF1ZXN0LWNvbnRleHQnKV07XG5cbiAgY29uc3QgY3R4ID0gdmVyY2VsUmVxdWVzdENvbnRleHRHbG9iYWw/LmdldD8uKCk7XG5cbiAgaWYgKGN0eD8ud2FpdFVudGlsKSB7XG4gICAgY3R4LndhaXRVbnRpbCh0YXNrKTtcbiAgfVxufVxuXG5leHBvcnQgeyB2ZXJjZWxXYWl0VW50aWwgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcmNlbFdhaXRVbnRpbC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/vercelWaitUntil.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/version.js":
/*!*****************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/version.js ***!
  \*****************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   SDK_VERSION: () => (/* binding */ SDK_VERSION)\n/* harmony export */ });\n// This is a magic string replaced by rollup\n\nconst SDK_VERSION = \"9.46.0\" ;\n\n\n//# sourceMappingURL=version.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3ZlcnNpb24uanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBOztBQUVBOztBQUV1QjtBQUN2QiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3ZlcnNpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBpcyBhIG1hZ2ljIHN0cmluZyByZXBsYWNlZCBieSByb2xsdXBcblxuY29uc3QgU0RLX1ZFUlNJT04gPSBcIjkuNDYuMFwiIDtcblxuZXhwb3J0IHsgU0RLX1ZFUlNJT04gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/version.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js":
/*!*******************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js ***!
  \*******************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   GLOBAL_OBJ: () => (/* binding */ GLOBAL_OBJ)\n/* harmony export */ });\n/** Internal global with common properties and Sentry extensions  */\n\n/** Get's the global object for the current JavaScript runtime */\nconst GLOBAL_OBJ = globalThis ;\n\n\n//# sourceMappingURL=worldwide.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3V0aWxzL3dvcmxkd2lkZS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRUE7QUFDQTs7QUFFc0I7QUFDdEIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStjb3JlQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL2J1aWxkL2VzbS91dGlscy93b3JsZHdpZGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEludGVybmFsIGdsb2JhbCB3aXRoIGNvbW1vbiBwcm9wZXJ0aWVzIGFuZCBTZW50cnkgZXh0ZW5zaW9ucyAgKi9cblxuLyoqIEdldCdzIHRoZSBnbG9iYWwgb2JqZWN0IGZvciB0aGUgY3VycmVudCBKYXZhU2NyaXB0IHJ1bnRpbWUgKi9cbmNvbnN0IEdMT0JBTF9PQkogPSBnbG9iYWxUaGlzIDtcblxuZXhwb3J0IHsgR0xPQkFMX09CSiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d29ybGR3aWRlLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/utils/worldwide.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/vendor/escapeStringForRegex.js":
/*!*******************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/vendor/escapeStringForRegex.js ***!
  \*******************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   escapeStringForRegex: () => (/* binding */ escapeStringForRegex)\n/* harmony export */ });\n// Based on https://github.com/sindresorhus/escape-string-regexp but with modifications to:\n//   a) reduce the size by skipping the runtime type - checking\n//   b) ensure it gets down - compiled for old versions of Node(the published package only supports Node 14+).\n//\n// MIT License\n//\n// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\n// documentation files(the \"Software\"), to deal in the Software without restriction, including without limitation\n// the rights to use, copy, modify, merge, publish, distribute, sublicense, and / or sell copies of the Software, and\n// to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies or substantial portions of\n// the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n/**\n * Given a string, escape characters which have meaning in the regex grammar, such that the result is safe to feed to\n * `new RegExp()`.\n *\n * @param regexString The string to escape\n * @returns An version of the string with all special regex characters escaped\n */\nfunction escapeStringForRegex(regexString) {\n  // escape the hyphen separately so we can also replace it with a unicode literal hyphen, to avoid the problems\n  // discussed in https://github.com/sindresorhus/escape-string-regexp/issues/20.\n  return regexString.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d');\n}\n\n\n//# sourceMappingURL=escapeStringForRegex.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3ZlbmRvci9lc2NhcGVTdHJpbmdGb3JSZWdleC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDOztBQUVnQztBQUNoQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3ZlbmRvci9lc2NhcGVTdHJpbmdGb3JSZWdleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2VzY2FwZS1zdHJpbmctcmVnZXhwIGJ1dCB3aXRoIG1vZGlmaWNhdGlvbnMgdG86XG4vLyAgIGEpIHJlZHVjZSB0aGUgc2l6ZSBieSBza2lwcGluZyB0aGUgcnVudGltZSB0eXBlIC0gY2hlY2tpbmdcbi8vICAgYikgZW5zdXJlIGl0IGdldHMgZG93biAtIGNvbXBpbGVkIGZvciBvbGQgdmVyc2lvbnMgb2YgTm9kZSh0aGUgcHVibGlzaGVkIHBhY2thZ2Ugb25seSBzdXBwb3J0cyBOb2RlIDE0KykuXG4vL1xuLy8gTUlUIExpY2Vuc2Vcbi8vXG4vLyBDb3B5cmlnaHQgKGMpIFNpbmRyZSBTb3JodXMgPHNpbmRyZXNvcmh1c0BnbWFpbC5jb20+IChodHRwczovL3NpbmRyZXNvcmh1cy5jb20pXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyBkb2N1bWVudGF0aW9uIGZpbGVzKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kIC8gb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZlxuLy8gdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUT1xuLy8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULklOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULFxuLy8gVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HU1xuLy8gSU4gVEhFIFNPRlRXQVJFLlxuXG4vKipcbiAqIEdpdmVuIGEgc3RyaW5nLCBlc2NhcGUgY2hhcmFjdGVycyB3aGljaCBoYXZlIG1lYW5pbmcgaW4gdGhlIHJlZ2V4IGdyYW1tYXIsIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGlzIHNhZmUgdG8gZmVlZCB0b1xuICogYG5ldyBSZWdFeHAoKWAuXG4gKlxuICogQHBhcmFtIHJlZ2V4U3RyaW5nIFRoZSBzdHJpbmcgdG8gZXNjYXBlXG4gKiBAcmV0dXJucyBBbiB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgc3BlY2lhbCByZWdleCBjaGFyYWN0ZXJzIGVzY2FwZWRcbiAqL1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nRm9yUmVnZXgocmVnZXhTdHJpbmcpIHtcbiAgLy8gZXNjYXBlIHRoZSBoeXBoZW4gc2VwYXJhdGVseSBzbyB3ZSBjYW4gYWxzbyByZXBsYWNlIGl0IHdpdGggYSB1bmljb2RlIGxpdGVyYWwgaHlwaGVuLCB0byBhdm9pZCB0aGUgcHJvYmxlbXNcbiAgLy8gZGlzY3Vzc2VkIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZXNjYXBlLXN0cmluZy1yZWdleHAvaXNzdWVzLzIwLlxuICByZXR1cm4gcmVnZXhTdHJpbmcucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCsqPy5dL2csICdcXFxcJCYnKS5yZXBsYWNlKC8tL2csICdcXFxceDJkJyk7XG59XG5cbmV4cG9ydCB7IGVzY2FwZVN0cmluZ0ZvclJlZ2V4IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lc2NhcGVTdHJpbmdGb3JSZWdleC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/vendor/escapeStringForRegex.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/vendor/getIpAddress.js":
/*!***********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/vendor/getIpAddress.js ***!
  \***********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getClientIPAddress: () => (/* binding */ getClientIPAddress),\n/* harmony export */   ipHeaderNames: () => (/* binding */ ipHeaderNames)\n/* harmony export */ });\n// Vendored / modified from @sergiodxa/remix-utils\n\n// https://github.com/sergiodxa/remix-utils/blob/02af80e12829a53696bfa8f3c2363975cf59f55e/src/server/get-client-ip-address.ts\n// MIT License\n\n// Copyright (c) 2021 Sergio Xalambrí\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n// The headers to check, in priority order\nconst ipHeaderNames = [\n  'X-Client-IP',\n  'X-Forwarded-For',\n  'Fly-Client-IP',\n  'CF-Connecting-IP',\n  'Fastly-Client-Ip',\n  'True-Client-Ip',\n  'X-Real-IP',\n  'X-Cluster-Client-IP',\n  'X-Forwarded',\n  'Forwarded-For',\n  'Forwarded',\n  'X-Vercel-Forwarded-For',\n];\n\n/**\n * Get the IP address of the client sending a request.\n *\n * It receives a Request headers object and use it to get the\n * IP address from one of the following headers in order.\n *\n * If the IP address is valid, it will be returned. Otherwise, null will be\n * returned.\n *\n * If the header values contains more than one IP address, the first valid one\n * will be returned.\n */\nfunction getClientIPAddress(headers) {\n  // This will end up being Array<string | string[] | undefined | null> because of the various possible values a header\n  // can take\n  const headerValues = ipHeaderNames.map((headerName) => {\n    const rawValue = headers[headerName];\n    const value = Array.isArray(rawValue) ? rawValue.join(';') : rawValue;\n\n    if (headerName === 'Forwarded') {\n      return parseForwardedHeader(value);\n    }\n\n    return value?.split(',').map((v) => v.trim());\n  });\n\n  // Flatten the array and filter out any falsy entries\n  const flattenedHeaderValues = headerValues.reduce((acc, val) => {\n    if (!val) {\n      return acc;\n    }\n\n    return acc.concat(val);\n  }, []);\n\n  // Find the first value which is a valid IP address, if any\n  const ipAddress = flattenedHeaderValues.find(ip => ip !== null && isIP(ip));\n\n  return ipAddress || null;\n}\n\nfunction parseForwardedHeader(value) {\n  if (!value) {\n    return null;\n  }\n\n  for (const part of value.split(';')) {\n    if (part.startsWith('for=')) {\n      return part.slice(4);\n    }\n  }\n\n  return null;\n}\n\n//\n/**\n * Custom method instead of importing this from `net` package, as this only exists in node\n * Accepts:\n * 127.0.0.1\n * 192.168.1.1\n * 192.168.1.255\n * 255.255.255.255\n * 10.1.1.1\n * 0.0.0.0\n * 2b01:cb19:8350:ed00:d0dd:fa5b:de31:8be5\n *\n * Rejects:\n * 1.1.1.01\n * 30.168.1.255.1\n * 127.1\n * 192.168.1.256\n * -1.2.3.4\n * 1.1.1.1.\n * 3...3\n * 192.168.1.099\n */\nfunction isIP(str) {\n  const regex =\n    /(?:^(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}$)|(?:^(?:(?:[a-fA-F\\d]{1,4}:){7}(?:[a-fA-F\\d]{1,4}|:)|(?:[a-fA-F\\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|:[a-fA-F\\d]{1,4}|:)|(?:[a-fA-F\\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,2}|:)|(?:[a-fA-F\\d]{1,4}:){4}(?:(?::[a-fA-F\\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,3}|:)|(?:[a-fA-F\\d]{1,4}:){3}(?:(?::[a-fA-F\\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,4}|:)|(?:[a-fA-F\\d]{1,4}:){2}(?:(?::[a-fA-F\\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,5}|:)|(?:[a-fA-F\\d]{1,4}:){1}(?:(?::[a-fA-F\\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?$)/;\n  return regex.test(str);\n}\n\n\n//# sourceMappingURL=getIpAddress.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3ZlbmRvci9nZXRJcEFkZHJlc3MuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREOztBQUU1RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRkFBMEYsRUFBRSx3QkFBd0IsSUFBSSxHQUFHLEVBQUUsY0FBYyxJQUFJLGtCQUFrQixJQUFJLEdBQUcsRUFBRSxxRkFBcUYsRUFBRSxhQUFhLElBQUksa0JBQWtCLElBQUksR0FBRyxFQUFFLHNGQUFzRixFQUFFLGdCQUFnQixJQUFJLEVBQUUsSUFBSSxrQkFBa0IsSUFBSSxHQUFHLEVBQUUsa0JBQWtCLElBQUksRUFBRSxJQUFJLG1GQUFtRixFQUFFLGdCQUFnQixJQUFJLEVBQUUsSUFBSSxrQkFBa0IsSUFBSSxHQUFHLEVBQUUsa0JBQWtCLElBQUksRUFBRSxJQUFJLG1GQUFtRixFQUFFLGdCQUFnQixJQUFJLEVBQUUsSUFBSSxrQkFBa0IsSUFBSSxHQUFHLEVBQUUsa0JBQWtCLElBQUksRUFBRSxJQUFJLG1GQUFtRixFQUFFLGdCQUFnQixJQUFJLEVBQUUsSUFBSSxrQkFBa0IsSUFBSSxHQUFHLEVBQUUsa0JBQWtCLElBQUksRUFBRSxJQUFJLG1GQUFtRixFQUFFLGdCQUFnQixJQUFJLEVBQUUsSUFBSSwwQkFBMEIsSUFBSSxFQUFFLElBQUksbUZBQW1GLEVBQUUsZ0JBQWdCLElBQUksRUFBRSxJQUFJLHFCQUFxQixHQUFHO0FBQ2x1QztBQUNBOztBQUU2QztBQUM3QyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K2NvcmVAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvYnVpbGQvZXNtL3ZlbmRvci9nZXRJcEFkZHJlc3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVmVuZG9yZWQgLyBtb2RpZmllZCBmcm9tIEBzZXJnaW9keGEvcmVtaXgtdXRpbHNcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3Nlcmdpb2R4YS9yZW1peC11dGlscy9ibG9iLzAyYWY4MGUxMjgyOWE1MzY5NmJmYThmM2MyMzYzOTc1Y2Y1OWY1NWUvc3JjL3NlcnZlci9nZXQtY2xpZW50LWlwLWFkZHJlc3MudHNcbi8vIE1JVCBMaWNlbnNlXG5cbi8vIENvcHlyaWdodCAoYykgMjAyMSBTZXJnaW8gWGFsYW1icsOtXG5cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4vLyBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4vLyBTT0ZUV0FSRS5cblxuLy8gVGhlIGhlYWRlcnMgdG8gY2hlY2ssIGluIHByaW9yaXR5IG9yZGVyXG5jb25zdCBpcEhlYWRlck5hbWVzID0gW1xuICAnWC1DbGllbnQtSVAnLFxuICAnWC1Gb3J3YXJkZWQtRm9yJyxcbiAgJ0ZseS1DbGllbnQtSVAnLFxuICAnQ0YtQ29ubmVjdGluZy1JUCcsXG4gICdGYXN0bHktQ2xpZW50LUlwJyxcbiAgJ1RydWUtQ2xpZW50LUlwJyxcbiAgJ1gtUmVhbC1JUCcsXG4gICdYLUNsdXN0ZXItQ2xpZW50LUlQJyxcbiAgJ1gtRm9yd2FyZGVkJyxcbiAgJ0ZvcndhcmRlZC1Gb3InLFxuICAnRm9yd2FyZGVkJyxcbiAgJ1gtVmVyY2VsLUZvcndhcmRlZC1Gb3InLFxuXTtcblxuLyoqXG4gKiBHZXQgdGhlIElQIGFkZHJlc3Mgb2YgdGhlIGNsaWVudCBzZW5kaW5nIGEgcmVxdWVzdC5cbiAqXG4gKiBJdCByZWNlaXZlcyBhIFJlcXVlc3QgaGVhZGVycyBvYmplY3QgYW5kIHVzZSBpdCB0byBnZXQgdGhlXG4gKiBJUCBhZGRyZXNzIGZyb20gb25lIG9mIHRoZSBmb2xsb3dpbmcgaGVhZGVycyBpbiBvcmRlci5cbiAqXG4gKiBJZiB0aGUgSVAgYWRkcmVzcyBpcyB2YWxpZCwgaXQgd2lsbCBiZSByZXR1cm5lZC4gT3RoZXJ3aXNlLCBudWxsIHdpbGwgYmVcbiAqIHJldHVybmVkLlxuICpcbiAqIElmIHRoZSBoZWFkZXIgdmFsdWVzIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgSVAgYWRkcmVzcywgdGhlIGZpcnN0IHZhbGlkIG9uZVxuICogd2lsbCBiZSByZXR1cm5lZC5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2xpZW50SVBBZGRyZXNzKGhlYWRlcnMpIHtcbiAgLy8gVGhpcyB3aWxsIGVuZCB1cCBiZWluZyBBcnJheTxzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCB8IG51bGw+IGJlY2F1c2Ugb2YgdGhlIHZhcmlvdXMgcG9zc2libGUgdmFsdWVzIGEgaGVhZGVyXG4gIC8vIGNhbiB0YWtlXG4gIGNvbnN0IGhlYWRlclZhbHVlcyA9IGlwSGVhZGVyTmFtZXMubWFwKChoZWFkZXJOYW1lKSA9PiB7XG4gICAgY29uc3QgcmF3VmFsdWUgPSBoZWFkZXJzW2hlYWRlck5hbWVdO1xuICAgIGNvbnN0IHZhbHVlID0gQXJyYXkuaXNBcnJheShyYXdWYWx1ZSkgPyByYXdWYWx1ZS5qb2luKCc7JykgOiByYXdWYWx1ZTtcblxuICAgIGlmIChoZWFkZXJOYW1lID09PSAnRm9yd2FyZGVkJykge1xuICAgICAgcmV0dXJuIHBhcnNlRm9yd2FyZGVkSGVhZGVyKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU/LnNwbGl0KCcsJykubWFwKCh2KSA9PiB2LnRyaW0oKSk7XG4gIH0pO1xuXG4gIC8vIEZsYXR0ZW4gdGhlIGFycmF5IGFuZCBmaWx0ZXIgb3V0IGFueSBmYWxzeSBlbnRyaWVzXG4gIGNvbnN0IGZsYXR0ZW5lZEhlYWRlclZhbHVlcyA9IGhlYWRlclZhbHVlcy5yZWR1Y2UoKGFjYywgdmFsKSA9PiB7XG4gICAgaWYgKCF2YWwpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYy5jb25jYXQodmFsKTtcbiAgfSwgW10pO1xuXG4gIC8vIEZpbmQgdGhlIGZpcnN0IHZhbHVlIHdoaWNoIGlzIGEgdmFsaWQgSVAgYWRkcmVzcywgaWYgYW55XG4gIGNvbnN0IGlwQWRkcmVzcyA9IGZsYXR0ZW5lZEhlYWRlclZhbHVlcy5maW5kKGlwID0+IGlwICE9PSBudWxsICYmIGlzSVAoaXApKTtcblxuICByZXR1cm4gaXBBZGRyZXNzIHx8IG51bGw7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRm9yd2FyZGVkSGVhZGVyKHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZvciAoY29uc3QgcGFydCBvZiB2YWx1ZS5zcGxpdCgnOycpKSB7XG4gICAgaWYgKHBhcnQuc3RhcnRzV2l0aCgnZm9yPScpKSB7XG4gICAgICByZXR1cm4gcGFydC5zbGljZSg0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy9cbi8qKlxuICogQ3VzdG9tIG1ldGhvZCBpbnN0ZWFkIG9mIGltcG9ydGluZyB0aGlzIGZyb20gYG5ldGAgcGFja2FnZSwgYXMgdGhpcyBvbmx5IGV4aXN0cyBpbiBub2RlXG4gKiBBY2NlcHRzOlxuICogMTI3LjAuMC4xXG4gKiAxOTIuMTY4LjEuMVxuICogMTkyLjE2OC4xLjI1NVxuICogMjU1LjI1NS4yNTUuMjU1XG4gKiAxMC4xLjEuMVxuICogMC4wLjAuMFxuICogMmIwMTpjYjE5OjgzNTA6ZWQwMDpkMGRkOmZhNWI6ZGUzMTo4YmU1XG4gKlxuICogUmVqZWN0czpcbiAqIDEuMS4xLjAxXG4gKiAzMC4xNjguMS4yNTUuMVxuICogMTI3LjFcbiAqIDE5Mi4xNjguMS4yNTZcbiAqIC0xLjIuMy40XG4gKiAxLjEuMS4xLlxuICogMy4uLjNcbiAqIDE5Mi4xNjguMS4wOTlcbiAqL1xuZnVuY3Rpb24gaXNJUChzdHIpIHtcbiAgY29uc3QgcmVnZXggPVxuICAgIC8oPzpeKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfSQpfCg/Ol4oPzooPzpbYS1mQS1GXFxkXXsxLDR9Oil7N30oPzpbYS1mQS1GXFxkXXsxLDR9fDopfCg/OlthLWZBLUZcXGRdezEsNH06KXs2fSg/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcXFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXw6W2EtZkEtRlxcZF17MSw0fXw6KXwoPzpbYS1mQS1GXFxkXXsxLDR9Oil7NX0oPzo6KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFxcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDJ9fDopfCg/OlthLWZBLUZcXGRdezEsNH06KXs0fSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDF9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcXFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSwzfXw6KXwoPzpbYS1mQS1GXFxkXXsxLDR9Oil7M30oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwyfTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXFxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNH18Oil8KD86W2EtZkEtRlxcZF17MSw0fTopezJ9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsM306KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFxcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDV9fDopfCg/OlthLWZBLUZcXGRdezEsNH06KXsxfSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDR9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcXFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw2fXw6KXwoPzo6KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsNX06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFxcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDd9fDopKSkoPzolWzAtOWEtekEtWl17MSx9KT8kKS87XG4gIHJldHVybiByZWdleC50ZXN0KHN0cik7XG59XG5cbmV4cG9ydCB7IGdldENsaWVudElQQWRkcmVzcywgaXBIZWFkZXJOYW1lcyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0SXBBZGRyZXNzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/vendor/getIpAddress.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/browserTracingIntegration.js":
/*!*******************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/browserTracingIntegration.js ***!
  \*******************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   browserTracingIntegration: () => (/* binding */ browserTracingIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/react */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/index.js\");\n/* harmony import */ var _routing_nextRoutingInstrumentation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./routing/nextRoutingInstrumentation.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/routing/nextRoutingInstrumentation.js\");\n\n\n\n/**\n * A custom browser tracing integration for Next.js.\n */\nfunction browserTracingIntegration(\n  options = {},\n) {\n  const browserTracingIntegrationInstance = (0,_sentry_react__WEBPACK_IMPORTED_MODULE_0__.browserTracingIntegration)({\n    ...options,\n    instrumentNavigation: false,\n    instrumentPageLoad: false,\n    onRequestSpanStart(...args) {\n      const [span, { headers }] = args;\n\n      // Next.js prefetch requests have a `next-router-prefetch` header\n      if (headers?.get('next-router-prefetch')) {\n        span?.setAttribute('http.request.prefetch', true);\n      }\n\n      return options.onRequestSpanStart?.(...args);\n    },\n  });\n\n  const { instrumentPageLoad = true, instrumentNavigation = true } = options;\n\n  return {\n    ...browserTracingIntegrationInstance,\n    afterAllSetup(client) {\n      // We need to run the navigation span instrumentation before the `afterAllSetup` hook on the normal browser\n      // tracing integration because we need to ensure the order of execution is as follows:\n      // Instrumentation to start span on RSC fetch request runs -> Instrumentation to put tracing headers from active span on fetch runs\n      // If it were the other way around, the RSC fetch request would not receive the tracing headers from the navigation transaction.\n      if (instrumentNavigation) {\n        (0,_routing_nextRoutingInstrumentation_js__WEBPACK_IMPORTED_MODULE_1__.nextRouterInstrumentNavigation)(client);\n      }\n\n      browserTracingIntegrationInstance.afterAllSetup(client);\n\n      if (instrumentPageLoad) {\n        (0,_routing_nextRoutingInstrumentation_js__WEBPACK_IMPORTED_MODULE_1__.nextRouterInstrumentPageLoad)(client);\n      }\n    },\n  };\n}\n\n\n//# sourceMappingURL=browserTracingIntegration.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jbGllbnQvYnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBeUY7QUFDOEI7O0FBRXZIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsNENBQTRDLHdFQUEyQjtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixTQUFTOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVILFVBQVUseURBQXlEOztBQUVuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxzR0FBOEI7QUFDdEM7O0FBRUE7O0FBRUE7QUFDQSxRQUFRLG9HQUE0QjtBQUNwQztBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVxQztBQUNyQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jbGllbnQvYnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBicm93c2VyVHJhY2luZ0ludGVncmF0aW9uIGFzIGJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24kMSB9IGZyb20gJ0BzZW50cnkvcmVhY3QnO1xuaW1wb3J0IHsgbmV4dFJvdXRlckluc3RydW1lbnROYXZpZ2F0aW9uLCBuZXh0Um91dGVySW5zdHJ1bWVudFBhZ2VMb2FkIH0gZnJvbSAnLi9yb3V0aW5nL25leHRSb3V0aW5nSW5zdHJ1bWVudGF0aW9uLmpzJztcblxuLyoqXG4gKiBBIGN1c3RvbSBicm93c2VyIHRyYWNpbmcgaW50ZWdyYXRpb24gZm9yIE5leHQuanMuXG4gKi9cbmZ1bmN0aW9uIGJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24oXG4gIG9wdGlvbnMgPSB7fSxcbikge1xuICBjb25zdCBicm93c2VyVHJhY2luZ0ludGVncmF0aW9uSW5zdGFuY2UgPSBicm93c2VyVHJhY2luZ0ludGVncmF0aW9uJDEoe1xuICAgIC4uLm9wdGlvbnMsXG4gICAgaW5zdHJ1bWVudE5hdmlnYXRpb246IGZhbHNlLFxuICAgIGluc3RydW1lbnRQYWdlTG9hZDogZmFsc2UsXG4gICAgb25SZXF1ZXN0U3BhblN0YXJ0KC4uLmFyZ3MpIHtcbiAgICAgIGNvbnN0IFtzcGFuLCB7IGhlYWRlcnMgfV0gPSBhcmdzO1xuXG4gICAgICAvLyBOZXh0LmpzIHByZWZldGNoIHJlcXVlc3RzIGhhdmUgYSBgbmV4dC1yb3V0ZXItcHJlZmV0Y2hgIGhlYWRlclxuICAgICAgaWYgKGhlYWRlcnM/LmdldCgnbmV4dC1yb3V0ZXItcHJlZmV0Y2gnKSkge1xuICAgICAgICBzcGFuPy5zZXRBdHRyaWJ1dGUoJ2h0dHAucmVxdWVzdC5wcmVmZXRjaCcsIHRydWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3B0aW9ucy5vblJlcXVlc3RTcGFuU3RhcnQ/LiguLi5hcmdzKTtcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCB7IGluc3RydW1lbnRQYWdlTG9hZCA9IHRydWUsIGluc3RydW1lbnROYXZpZ2F0aW9uID0gdHJ1ZSB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIC4uLmJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb25JbnN0YW5jZSxcbiAgICBhZnRlckFsbFNldHVwKGNsaWVudCkge1xuICAgICAgLy8gV2UgbmVlZCB0byBydW4gdGhlIG5hdmlnYXRpb24gc3BhbiBpbnN0cnVtZW50YXRpb24gYmVmb3JlIHRoZSBgYWZ0ZXJBbGxTZXR1cGAgaG9vayBvbiB0aGUgbm9ybWFsIGJyb3dzZXJcbiAgICAgIC8vIHRyYWNpbmcgaW50ZWdyYXRpb24gYmVjYXVzZSB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uIGlzIGFzIGZvbGxvd3M6XG4gICAgICAvLyBJbnN0cnVtZW50YXRpb24gdG8gc3RhcnQgc3BhbiBvbiBSU0MgZmV0Y2ggcmVxdWVzdCBydW5zIC0+IEluc3RydW1lbnRhdGlvbiB0byBwdXQgdHJhY2luZyBoZWFkZXJzIGZyb20gYWN0aXZlIHNwYW4gb24gZmV0Y2ggcnVuc1xuICAgICAgLy8gSWYgaXQgd2VyZSB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgdGhlIFJTQyBmZXRjaCByZXF1ZXN0IHdvdWxkIG5vdCByZWNlaXZlIHRoZSB0cmFjaW5nIGhlYWRlcnMgZnJvbSB0aGUgbmF2aWdhdGlvbiB0cmFuc2FjdGlvbi5cbiAgICAgIGlmIChpbnN0cnVtZW50TmF2aWdhdGlvbikge1xuICAgICAgICBuZXh0Um91dGVySW5zdHJ1bWVudE5hdmlnYXRpb24oY2xpZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbkluc3RhbmNlLmFmdGVyQWxsU2V0dXAoY2xpZW50KTtcblxuICAgICAgaWYgKGluc3RydW1lbnRQYWdlTG9hZCkge1xuICAgICAgICBuZXh0Um91dGVySW5zdHJ1bWVudFBhZ2VMb2FkKGNsaWVudCk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IHsgYnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbi5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/browserTracingIntegration.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/clientNormalizationIntegration.js":
/*!************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/clientNormalizationIntegration.js ***!
  \************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   nextjsClientStackFrameNormalizationIntegration: () => (/* binding */ nextjsClientStackFrameNormalizationIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _sentry_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/react */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/index.js\");\n\n\n\nconst nextjsClientStackFrameNormalizationIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(\n  ({\n    assetPrefix,\n    basePath,\n    rewriteFramesAssetPrefixPath,\n    experimentalThirdPartyOriginStackFrames,\n  }\n\n) => {\n    const rewriteFramesInstance = (0,_sentry_react__WEBPACK_IMPORTED_MODULE_1__.rewriteFramesIntegration)({\n      // Turn `<origin>/<path>/_next/static/...` into `app:///_next/static/...`\n      iteratee: frame => {\n        if (experimentalThirdPartyOriginStackFrames) {\n          // Not sure why but access to global WINDOW from @sentry/Browser causes hideous ci errors\n          // eslint-disable-next-line no-restricted-globals\n          const windowOrigin = typeof window !== 'undefined' && window.location ? window.location.origin : '';\n          // A filename starting with the local origin and not ending with JS is most likely JS in HTML which we do not want to rewrite\n          if (frame.filename?.startsWith(windowOrigin) && !frame.filename.endsWith('.js')) {\n            return frame;\n          }\n\n          if (assetPrefix) {\n            // If the user defined an asset prefix, we need to strip it so that we can match it with uploaded sourcemaps.\n            // assetPrefix always takes priority over basePath.\n            if (frame.filename?.startsWith(assetPrefix)) {\n              frame.filename = frame.filename.replace(assetPrefix, 'app://');\n            }\n          } else if (basePath) {\n            // If the user defined a base path, we need to strip it to match with uploaded sourcemaps.\n            // We should only do this for same-origin filenames though, so that third party assets are not rewritten.\n            try {\n              const { origin: frameOrigin } = new URL(frame.filename );\n              if (frameOrigin === windowOrigin) {\n                frame.filename = frame.filename?.replace(frameOrigin, 'app://').replace(basePath, '');\n              }\n            } catch {\n              // Filename wasn't a properly formed URL, so there's nothing we can do\n            }\n          }\n        } else {\n          try {\n            const { origin } = new URL(frame.filename );\n            frame.filename = frame.filename?.replace(origin, 'app://').replace(rewriteFramesAssetPrefixPath, '');\n          } catch {\n            // Filename wasn't a properly formed URL, so there's nothing we can do\n          }\n        }\n\n        // We need to URI-decode the filename because Next.js has wildcard routes like \"/users/[id].js\" which show up as \"/users/%5id%5.js\" in Error stacktraces.\n        // The corresponding sources that Next.js generates have proper brackets so we also need proper brackets in the frame so that source map resolving works.\n        if (experimentalThirdPartyOriginStackFrames) {\n          if (frame.filename?.includes('/_next')) {\n            frame.filename = decodeURI(frame.filename);\n          }\n\n          if (\n            frame.filename?.match(\n              /\\/_next\\/static\\/chunks\\/(main-|main-app-|polyfills-|webpack-|framework-|framework\\.)[0-9a-f]+\\.js$/,\n            )\n          ) {\n            // We don't care about these frames. It's Next.js internal code.\n            frame.in_app = false;\n          }\n        } else {\n          if (frame.filename?.startsWith('app:///_next')) {\n            frame.filename = decodeURI(frame.filename);\n          }\n\n          if (\n            frame.filename?.match(\n              /^app:\\/\\/\\/_next\\/static\\/chunks\\/(main-|main-app-|polyfills-|webpack-|framework-|framework\\.)[0-9a-f]+\\.js$/,\n            )\n          ) {\n            // We don't care about these frames. It's Next.js internal code.\n            frame.in_app = false;\n          }\n        }\n\n        return frame;\n      },\n    });\n\n    return {\n      ...rewriteFramesInstance,\n      name: 'NextjsClientStackFrameNormalization',\n    };\n  },\n);\n\n\n//# sourceMappingURL=clientNormalizationIntegration.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jbGllbnQvY2xpZW50Tm9ybWFsaXphdGlvbkludGVncmF0aW9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFpRDtBQUNROztBQUV6RCx1REFBdUQsK0RBQWlCO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtDQUFrQyx1RUFBd0I7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixzQkFBc0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLG9CQUFvQixTQUFTO0FBQzdCO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRTBEO0FBQzFEIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrbmV4dGpzQDkuNDYuMF9Ab3BlbnRlbGVtZXRyeStjb250ZXh0LWFzeW5jLWhvb2tzQDEuMzAuMV9Ab3BlbnRlbGVtZXRyeSthcGlAMS45Ll9iNWJkZWNmMzMzZTc0Nzg0OWI0YjczYzQ1N2JkY2EwNi9ub2RlX21vZHVsZXMvQHNlbnRyeS9uZXh0anMvYnVpbGQvZXNtL2NsaWVudC9jbGllbnROb3JtYWxpemF0aW9uSW50ZWdyYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lSW50ZWdyYXRpb24gfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgcmV3cml0ZUZyYW1lc0ludGVncmF0aW9uIH0gZnJvbSAnQHNlbnRyeS9yZWFjdCc7XG5cbmNvbnN0IG5leHRqc0NsaWVudFN0YWNrRnJhbWVOb3JtYWxpemF0aW9uSW50ZWdyYXRpb24gPSBkZWZpbmVJbnRlZ3JhdGlvbihcbiAgKHtcbiAgICBhc3NldFByZWZpeCxcbiAgICBiYXNlUGF0aCxcbiAgICByZXdyaXRlRnJhbWVzQXNzZXRQcmVmaXhQYXRoLFxuICAgIGV4cGVyaW1lbnRhbFRoaXJkUGFydHlPcmlnaW5TdGFja0ZyYW1lcyxcbiAgfVxuXG4pID0+IHtcbiAgICBjb25zdCByZXdyaXRlRnJhbWVzSW5zdGFuY2UgPSByZXdyaXRlRnJhbWVzSW50ZWdyYXRpb24oe1xuICAgICAgLy8gVHVybiBgPG9yaWdpbj4vPHBhdGg+L19uZXh0L3N0YXRpYy8uLi5gIGludG8gYGFwcDovLy9fbmV4dC9zdGF0aWMvLi4uYFxuICAgICAgaXRlcmF0ZWU6IGZyYW1lID0+IHtcbiAgICAgICAgaWYgKGV4cGVyaW1lbnRhbFRoaXJkUGFydHlPcmlnaW5TdGFja0ZyYW1lcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIHdoeSBidXQgYWNjZXNzIHRvIGdsb2JhbCBXSU5ET1cgZnJvbSBAc2VudHJ5L0Jyb3dzZXIgY2F1c2VzIGhpZGVvdXMgY2kgZXJyb3JzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgICAgICAgIGNvbnN0IHdpbmRvd09yaWdpbiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhdGlvbiA/IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gOiAnJztcbiAgICAgICAgICAvLyBBIGZpbGVuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIGxvY2FsIG9yaWdpbiBhbmQgbm90IGVuZGluZyB3aXRoIEpTIGlzIG1vc3QgbGlrZWx5IEpTIGluIEhUTUwgd2hpY2ggd2UgZG8gbm90IHdhbnQgdG8gcmV3cml0ZVxuICAgICAgICAgIGlmIChmcmFtZS5maWxlbmFtZT8uc3RhcnRzV2l0aCh3aW5kb3dPcmlnaW4pICYmICFmcmFtZS5maWxlbmFtZS5lbmRzV2l0aCgnLmpzJykpIHtcbiAgICAgICAgICAgIHJldHVybiBmcmFtZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYXNzZXRQcmVmaXgpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSB1c2VyIGRlZmluZWQgYW4gYXNzZXQgcHJlZml4LCB3ZSBuZWVkIHRvIHN0cmlwIGl0IHNvIHRoYXQgd2UgY2FuIG1hdGNoIGl0IHdpdGggdXBsb2FkZWQgc291cmNlbWFwcy5cbiAgICAgICAgICAgIC8vIGFzc2V0UHJlZml4IGFsd2F5cyB0YWtlcyBwcmlvcml0eSBvdmVyIGJhc2VQYXRoLlxuICAgICAgICAgICAgaWYgKGZyYW1lLmZpbGVuYW1lPy5zdGFydHNXaXRoKGFzc2V0UHJlZml4KSkge1xuICAgICAgICAgICAgICBmcmFtZS5maWxlbmFtZSA9IGZyYW1lLmZpbGVuYW1lLnJlcGxhY2UoYXNzZXRQcmVmaXgsICdhcHA6Ly8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGJhc2VQYXRoKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgdXNlciBkZWZpbmVkIGEgYmFzZSBwYXRoLCB3ZSBuZWVkIHRvIHN0cmlwIGl0IHRvIG1hdGNoIHdpdGggdXBsb2FkZWQgc291cmNlbWFwcy5cbiAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGRvIHRoaXMgZm9yIHNhbWUtb3JpZ2luIGZpbGVuYW1lcyB0aG91Z2gsIHNvIHRoYXQgdGhpcmQgcGFydHkgYXNzZXRzIGFyZSBub3QgcmV3cml0dGVuLlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBvcmlnaW46IGZyYW1lT3JpZ2luIH0gPSBuZXcgVVJMKGZyYW1lLmZpbGVuYW1lICk7XG4gICAgICAgICAgICAgIGlmIChmcmFtZU9yaWdpbiA9PT0gd2luZG93T3JpZ2luKSB7XG4gICAgICAgICAgICAgICAgZnJhbWUuZmlsZW5hbWUgPSBmcmFtZS5maWxlbmFtZT8ucmVwbGFjZShmcmFtZU9yaWdpbiwgJ2FwcDovLycpLnJlcGxhY2UoYmFzZVBhdGgsICcnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIC8vIEZpbGVuYW1lIHdhc24ndCBhIHByb3Blcmx5IGZvcm1lZCBVUkwsIHNvIHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3JpZ2luIH0gPSBuZXcgVVJMKGZyYW1lLmZpbGVuYW1lICk7XG4gICAgICAgICAgICBmcmFtZS5maWxlbmFtZSA9IGZyYW1lLmZpbGVuYW1lPy5yZXBsYWNlKG9yaWdpbiwgJ2FwcDovLycpLnJlcGxhY2UocmV3cml0ZUZyYW1lc0Fzc2V0UHJlZml4UGF0aCwgJycpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gRmlsZW5hbWUgd2Fzbid0IGEgcHJvcGVybHkgZm9ybWVkIFVSTCwgc28gdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkb1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gVVJJLWRlY29kZSB0aGUgZmlsZW5hbWUgYmVjYXVzZSBOZXh0LmpzIGhhcyB3aWxkY2FyZCByb3V0ZXMgbGlrZSBcIi91c2Vycy9baWRdLmpzXCIgd2hpY2ggc2hvdyB1cCBhcyBcIi91c2Vycy8lNWlkJTUuanNcIiBpbiBFcnJvciBzdGFja3RyYWNlcy5cbiAgICAgICAgLy8gVGhlIGNvcnJlc3BvbmRpbmcgc291cmNlcyB0aGF0IE5leHQuanMgZ2VuZXJhdGVzIGhhdmUgcHJvcGVyIGJyYWNrZXRzIHNvIHdlIGFsc28gbmVlZCBwcm9wZXIgYnJhY2tldHMgaW4gdGhlIGZyYW1lIHNvIHRoYXQgc291cmNlIG1hcCByZXNvbHZpbmcgd29ya3MuXG4gICAgICAgIGlmIChleHBlcmltZW50YWxUaGlyZFBhcnR5T3JpZ2luU3RhY2tGcmFtZXMpIHtcbiAgICAgICAgICBpZiAoZnJhbWUuZmlsZW5hbWU/LmluY2x1ZGVzKCcvX25leHQnKSkge1xuICAgICAgICAgICAgZnJhbWUuZmlsZW5hbWUgPSBkZWNvZGVVUkkoZnJhbWUuZmlsZW5hbWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZyYW1lLmZpbGVuYW1lPy5tYXRjaChcbiAgICAgICAgICAgICAgL1xcL19uZXh0XFwvc3RhdGljXFwvY2h1bmtzXFwvKG1haW4tfG1haW4tYXBwLXxwb2x5ZmlsbHMtfHdlYnBhY2stfGZyYW1ld29yay18ZnJhbWV3b3JrXFwuKVswLTlhLWZdK1xcLmpzJC8sXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZXNlIGZyYW1lcy4gSXQncyBOZXh0LmpzIGludGVybmFsIGNvZGUuXG4gICAgICAgICAgICBmcmFtZS5pbl9hcHAgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGZyYW1lLmZpbGVuYW1lPy5zdGFydHNXaXRoKCdhcHA6Ly8vX25leHQnKSkge1xuICAgICAgICAgICAgZnJhbWUuZmlsZW5hbWUgPSBkZWNvZGVVUkkoZnJhbWUuZmlsZW5hbWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZyYW1lLmZpbGVuYW1lPy5tYXRjaChcbiAgICAgICAgICAgICAgL15hcHA6XFwvXFwvXFwvX25leHRcXC9zdGF0aWNcXC9jaHVua3NcXC8obWFpbi18bWFpbi1hcHAtfHBvbHlmaWxscy18d2VicGFjay18ZnJhbWV3b3JrLXxmcmFtZXdvcmtcXC4pWzAtOWEtZl0rXFwuanMkLyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlc2UgZnJhbWVzLiBJdCdzIE5leHQuanMgaW50ZXJuYWwgY29kZS5cbiAgICAgICAgICAgIGZyYW1lLmluX2FwcCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmcmFtZTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmV3cml0ZUZyYW1lc0luc3RhbmNlLFxuICAgICAgbmFtZTogJ05leHRqc0NsaWVudFN0YWNrRnJhbWVOb3JtYWxpemF0aW9uJyxcbiAgICB9O1xuICB9LFxuKTtcblxuZXhwb3J0IHsgbmV4dGpzQ2xpZW50U3RhY2tGcmFtZU5vcm1hbGl6YXRpb25JbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2xpZW50Tm9ybWFsaXphdGlvbkludGVncmF0aW9uLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/clientNormalizationIntegration.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/index.js":
/*!***********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/index.js ***!
  \***********************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   BrowserClient: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.BrowserClient),\n/* harmony export */   ErrorBoundary: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.ErrorBoundary),\n/* harmony export */   OpenFeatureIntegrationHook: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.OpenFeatureIntegrationHook),\n/* harmony export */   Profiler: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.Profiler),\n/* harmony export */   SDK_VERSION: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.SDK_VERSION),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_OP: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_OP),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_SOURCE: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE),\n/* harmony export */   Scope: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.Scope),\n/* harmony export */   WINDOW: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.WINDOW),\n/* harmony export */   addBreadcrumb: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.addBreadcrumb),\n/* harmony export */   addEventProcessor: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.addEventProcessor),\n/* harmony export */   addIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.addIntegration),\n/* harmony export */   breadcrumbsIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.breadcrumbsIntegration),\n/* harmony export */   browserApiErrorsIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.browserApiErrorsIntegration),\n/* harmony export */   browserProfilingIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.browserProfilingIntegration),\n/* harmony export */   browserSessionIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.browserSessionIntegration),\n/* harmony export */   browserTracingIntegration: () => (/* reexport safe */ _browserTracingIntegration_js__WEBPACK_IMPORTED_MODULE_5__.browserTracingIntegration),\n/* harmony export */   buildLaunchDarklyFlagUsedHandler: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.buildLaunchDarklyFlagUsedHandler),\n/* harmony export */   captureConsoleIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.captureConsoleIntegration),\n/* harmony export */   captureEvent: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.captureEvent),\n/* harmony export */   captureException: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.captureException),\n/* harmony export */   captureFeedback: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.captureFeedback),\n/* harmony export */   captureMessage: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.captureMessage),\n/* harmony export */   captureReactException: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.captureReactException),\n/* harmony export */   captureRequestError: () => (/* reexport safe */ _common_captureRequestError_js__WEBPACK_IMPORTED_MODULE_22__.captureRequestError),\n/* harmony export */   captureRouterTransitionStart: () => (/* reexport safe */ _routing_appRouterRoutingInstrumentation_js__WEBPACK_IMPORTED_MODULE_7__.captureRouterTransitionStart),\n/* harmony export */   captureSession: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.captureSession),\n/* harmony export */   captureUnderscoreErrorException: () => (/* reexport safe */ _common_pages_router_instrumentation_error_js__WEBPACK_IMPORTED_MODULE_23__.captureUnderscoreErrorException),\n/* harmony export */   chromeStackLineParser: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.chromeStackLineParser),\n/* harmony export */   close: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.close),\n/* harmony export */   consoleLoggingIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.consoleLoggingIntegration),\n/* harmony export */   contextLinesIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.contextLinesIntegration),\n/* harmony export */   continueTrace: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.continueTrace),\n/* harmony export */   createReduxEnhancer: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.createReduxEnhancer),\n/* harmony export */   createTransport: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.createTransport),\n/* harmony export */   createUserFeedbackEnvelope: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.createUserFeedbackEnvelope),\n/* harmony export */   dedupeIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.dedupeIntegration),\n/* harmony export */   defaultRequestInstrumentationOptions: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.defaultRequestInstrumentationOptions),\n/* harmony export */   defaultStackLineParsers: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.defaultStackLineParsers),\n/* harmony export */   defaultStackParser: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.defaultStackParser),\n/* harmony export */   diagnoseSdkConnectivity: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.diagnoseSdkConnectivity),\n/* harmony export */   endSession: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.endSession),\n/* harmony export */   eventFiltersIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.eventFiltersIntegration),\n/* harmony export */   eventFromException: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.eventFromException),\n/* harmony export */   eventFromMessage: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.eventFromMessage),\n/* harmony export */   exceptionFromError: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.exceptionFromError),\n/* harmony export */   extraErrorDataIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.extraErrorDataIntegration),\n/* harmony export */   featureFlagsIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.featureFlagsIntegration),\n/* harmony export */   feedbackAsyncIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.feedbackAsyncIntegration),\n/* harmony export */   feedbackIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.feedbackIntegration),\n/* harmony export */   feedbackSyncIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.feedbackSyncIntegration),\n/* harmony export */   flush: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.flush),\n/* harmony export */   forceLoad: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.forceLoad),\n/* harmony export */   functionToStringIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.functionToStringIntegration),\n/* harmony export */   geckoStackLineParser: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.geckoStackLineParser),\n/* harmony export */   getActiveSpan: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.getActiveSpan),\n/* harmony export */   getClient: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.getClient),\n/* harmony export */   getCurrentScope: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.getCurrentScope),\n/* harmony export */   getDefaultIntegrations: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.getDefaultIntegrations),\n/* harmony export */   getFeedback: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.getFeedback),\n/* harmony export */   getGlobalScope: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.getGlobalScope),\n/* harmony export */   getIsolationScope: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.getIsolationScope),\n/* harmony export */   getReplay: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.getReplay),\n/* harmony export */   getRootSpan: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.getRootSpan),\n/* harmony export */   getSpanDescendants: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.getSpanDescendants),\n/* harmony export */   getSpanStatusFromHttpCode: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.getSpanStatusFromHttpCode),\n/* harmony export */   getTraceData: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.getTraceData),\n/* harmony export */   globalHandlersIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.globalHandlersIntegration),\n/* harmony export */   graphqlClientIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.graphqlClientIntegration),\n/* harmony export */   httpClientIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.httpClientIntegration),\n/* harmony export */   httpContextIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.httpContextIntegration),\n/* harmony export */   inboundFiltersIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.inboundFiltersIntegration),\n/* harmony export */   init: () => (/* binding */ init),\n/* harmony export */   instrumentOutgoingRequests: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.instrumentOutgoingRequests),\n/* harmony export */   instrumentSupabaseClient: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.instrumentSupabaseClient),\n/* harmony export */   isEnabled: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.isEnabled),\n/* harmony export */   isInitialized: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.isInitialized),\n/* harmony export */   lastEventId: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.lastEventId),\n/* harmony export */   launchDarklyIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.launchDarklyIntegration),\n/* harmony export */   lazyLoadIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.lazyLoadIntegration),\n/* harmony export */   linkedErrorsIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.linkedErrorsIntegration),\n/* harmony export */   logger: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.logger),\n/* harmony export */   makeBrowserOfflineTransport: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.makeBrowserOfflineTransport),\n/* harmony export */   makeFetchTransport: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.makeFetchTransport),\n/* harmony export */   makeMultiplexedTransport: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.makeMultiplexedTransport),\n/* harmony export */   moduleMetadataIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.moduleMetadataIntegration),\n/* harmony export */   onLoad: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.onLoad),\n/* harmony export */   openFeatureIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.openFeatureIntegration),\n/* harmony export */   opera10StackLineParser: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.opera10StackLineParser),\n/* harmony export */   opera11StackLineParser: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.opera11StackLineParser),\n/* harmony export */   parameterize: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.parameterize),\n/* harmony export */   reactErrorHandler: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.reactErrorHandler),\n/* harmony export */   reactRouterV3BrowserTracingIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.reactRouterV3BrowserTracingIntegration),\n/* harmony export */   reactRouterV4BrowserTracingIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.reactRouterV4BrowserTracingIntegration),\n/* harmony export */   reactRouterV5BrowserTracingIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.reactRouterV5BrowserTracingIntegration),\n/* harmony export */   reactRouterV6BrowserTracingIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.reactRouterV6BrowserTracingIntegration),\n/* harmony export */   reactRouterV7BrowserTracingIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.reactRouterV7BrowserTracingIntegration),\n/* harmony export */   registerSpanErrorInstrumentation: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.registerSpanErrorInstrumentation),\n/* harmony export */   registerWebWorker: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.registerWebWorker),\n/* harmony export */   replayCanvasIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.replayCanvasIntegration),\n/* harmony export */   replayIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.replayIntegration),\n/* harmony export */   reportingObserverIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.reportingObserverIntegration),\n/* harmony export */   rewriteFramesIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.rewriteFramesIntegration),\n/* harmony export */   sendFeedback: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.sendFeedback),\n/* harmony export */   setContext: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.setContext),\n/* harmony export */   setCurrentClient: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.setCurrentClient),\n/* harmony export */   setExtra: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.setExtra),\n/* harmony export */   setExtras: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.setExtras),\n/* harmony export */   setHttpStatus: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.setHttpStatus),\n/* harmony export */   setMeasurement: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.setMeasurement),\n/* harmony export */   setTag: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.setTag),\n/* harmony export */   setTags: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.setTags),\n/* harmony export */   setUser: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.setUser),\n/* harmony export */   showReportDialog: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.showReportDialog),\n/* harmony export */   spanToBaggageHeader: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.spanToBaggageHeader),\n/* harmony export */   spanToJSON: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.spanToJSON),\n/* harmony export */   spanToTraceHeader: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.spanToTraceHeader),\n/* harmony export */   spotlightBrowserIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.spotlightBrowserIntegration),\n/* harmony export */   startBrowserTracingNavigationSpan: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.startBrowserTracingNavigationSpan),\n/* harmony export */   startBrowserTracingPageLoadSpan: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.startBrowserTracingPageLoadSpan),\n/* harmony export */   startInactiveSpan: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.startInactiveSpan),\n/* harmony export */   startNewTrace: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.startNewTrace),\n/* harmony export */   startSession: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.startSession),\n/* harmony export */   startSpan: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.startSpan),\n/* harmony export */   startSpanManual: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.startSpanManual),\n/* harmony export */   statsigIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.statsigIntegration),\n/* harmony export */   supabaseIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.supabaseIntegration),\n/* harmony export */   suppressTracing: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.suppressTracing),\n/* harmony export */   tanstackRouterBrowserTracingIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.tanstackRouterBrowserTracingIntegration),\n/* harmony export */   thirdPartyErrorFilterIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.thirdPartyErrorFilterIntegration),\n/* harmony export */   unleashIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.unleashIntegration),\n/* harmony export */   updateSpanName: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.updateSpanName),\n/* harmony export */   useProfiler: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.useProfiler),\n/* harmony export */   webWorkerIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.webWorkerIntegration),\n/* harmony export */   winjsStackLineParser: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.winjsStackLineParser),\n/* harmony export */   withActiveSpan: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.withActiveSpan),\n/* harmony export */   withErrorBoundary: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.withErrorBoundary),\n/* harmony export */   withIsolationScope: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.withIsolationScope),\n/* harmony export */   withProfiler: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.withProfiler),\n/* harmony export */   withScope: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.withScope),\n/* harmony export */   withSentryConfig: () => (/* binding */ withSentryConfig),\n/* harmony export */   withSentryReactRouterV6Routing: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.withSentryReactRouterV6Routing),\n/* harmony export */   withSentryReactRouterV7Routing: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.withSentryReactRouterV7Routing),\n/* harmony export */   withSentryRouting: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.withSentryRouting),\n/* harmony export */   withServerActionInstrumentation: () => (/* reexport safe */ _common_withServerActionInstrumentation_js__WEBPACK_IMPORTED_MODULE_21__.withServerActionInstrumentation),\n/* harmony export */   wrapApiHandlerWithSentryVercelCrons: () => (/* reexport safe */ _common_pages_router_instrumentation_wrapApiHandlerWithSentryVercelCrons_js__WEBPACK_IMPORTED_MODULE_17__.wrapApiHandlerWithSentryVercelCrons),\n/* harmony export */   wrapAppGetInitialPropsWithSentry: () => (/* reexport safe */ _common_pages_router_instrumentation_wrapAppGetInitialPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_11__.wrapAppGetInitialPropsWithSentry),\n/* harmony export */   wrapCreateBrowserRouterV6: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.wrapCreateBrowserRouterV6),\n/* harmony export */   wrapCreateBrowserRouterV7: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.wrapCreateBrowserRouterV7),\n/* harmony export */   wrapCreateMemoryRouterV6: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.wrapCreateMemoryRouterV6),\n/* harmony export */   wrapCreateMemoryRouterV7: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.wrapCreateMemoryRouterV7),\n/* harmony export */   wrapDocumentGetInitialPropsWithSentry: () => (/* reexport safe */ _common_pages_router_instrumentation_wrapDocumentGetInitialPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_12__.wrapDocumentGetInitialPropsWithSentry),\n/* harmony export */   wrapErrorGetInitialPropsWithSentry: () => (/* reexport safe */ _common_pages_router_instrumentation_wrapErrorGetInitialPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_13__.wrapErrorGetInitialPropsWithSentry),\n/* harmony export */   wrapGenerationFunctionWithSentry: () => (/* reexport safe */ _common_wrapGenerationFunctionWithSentry_js__WEBPACK_IMPORTED_MODULE_20__.wrapGenerationFunctionWithSentry),\n/* harmony export */   wrapGetInitialPropsWithSentry: () => (/* reexport safe */ _common_pages_router_instrumentation_wrapGetInitialPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_10__.wrapGetInitialPropsWithSentry),\n/* harmony export */   wrapGetServerSidePropsWithSentry: () => (/* reexport safe */ _common_pages_router_instrumentation_wrapGetServerSidePropsWithSentry_js__WEBPACK_IMPORTED_MODULE_14__.wrapGetServerSidePropsWithSentry),\n/* harmony export */   wrapGetStaticPropsWithSentry: () => (/* reexport safe */ _common_pages_router_instrumentation_wrapGetStaticPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_9__.wrapGetStaticPropsWithSentry),\n/* harmony export */   wrapMiddlewareWithSentry: () => (/* reexport safe */ _common_wrapMiddlewareWithSentry_js__WEBPACK_IMPORTED_MODULE_18__.wrapMiddlewareWithSentry),\n/* harmony export */   wrapPageComponentWithSentry: () => (/* reexport safe */ _common_pages_router_instrumentation_wrapPageComponentWithSentry_js__WEBPACK_IMPORTED_MODULE_19__.wrapPageComponentWithSentry),\n/* harmony export */   wrapRouteHandlerWithSentry: () => (/* reexport safe */ _common_wrapRouteHandlerWithSentry_js__WEBPACK_IMPORTED_MODULE_16__.wrapRouteHandlerWithSentry),\n/* harmony export */   wrapServerComponentWithSentry: () => (/* reexport safe */ _common_wrapServerComponentWithSentry_js__WEBPACK_IMPORTED_MODULE_15__.wrapServerComponentWithSentry),\n/* harmony export */   wrapUseRoutesV6: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.wrapUseRoutesV6),\n/* harmony export */   wrapUseRoutesV7: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.wrapUseRoutesV7),\n/* harmony export */   zodErrorsIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_1__.zodErrorsIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _sentry_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/react */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/index.js\");\n/* harmony import */ var _common_devErrorSymbolicationEventProcessor_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../common/devErrorSymbolicationEventProcessor.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/devErrorSymbolicationEventProcessor.js\");\n/* harmony import */ var _common_getVercelEnv_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../common/getVercelEnv.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/getVercelEnv.js\");\n/* harmony import */ var _common_nextNavigationErrorUtils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../common/nextNavigationErrorUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/nextNavigationErrorUtils.js\");\n/* harmony import */ var _browserTracingIntegration_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./browserTracingIntegration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/browserTracingIntegration.js\");\n/* harmony import */ var _clientNormalizationIntegration_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./clientNormalizationIntegration.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/clientNormalizationIntegration.js\");\n/* harmony import */ var _routing_appRouterRoutingInstrumentation_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./routing/appRouterRoutingInstrumentation.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/routing/appRouterRoutingInstrumentation.js\");\n/* harmony import */ var _tunnelRoute_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./tunnelRoute.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/tunnelRoute.js\");\n/* harmony import */ var _common_pages_router_instrumentation_wrapGetStaticPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../common/pages-router-instrumentation/wrapGetStaticPropsWithSentry.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapGetStaticPropsWithSentry.js\");\n/* harmony import */ var _common_pages_router_instrumentation_wrapGetInitialPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../common/pages-router-instrumentation/wrapGetInitialPropsWithSentry.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapGetInitialPropsWithSentry.js\");\n/* harmony import */ var _common_pages_router_instrumentation_wrapAppGetInitialPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../common/pages-router-instrumentation/wrapAppGetInitialPropsWithSentry.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapAppGetInitialPropsWithSentry.js\");\n/* harmony import */ var _common_pages_router_instrumentation_wrapDocumentGetInitialPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../common/pages-router-instrumentation/wrapDocumentGetInitialPropsWithSentry.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapDocumentGetInitialPropsWithSentry.js\");\n/* harmony import */ var _common_pages_router_instrumentation_wrapErrorGetInitialPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../common/pages-router-instrumentation/wrapErrorGetInitialPropsWithSentry.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapErrorGetInitialPropsWithSentry.js\");\n/* harmony import */ var _common_pages_router_instrumentation_wrapGetServerSidePropsWithSentry_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../common/pages-router-instrumentation/wrapGetServerSidePropsWithSentry.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapGetServerSidePropsWithSentry.js\");\n/* harmony import */ var _common_wrapServerComponentWithSentry_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../common/wrapServerComponentWithSentry.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapServerComponentWithSentry.js\");\n/* harmony import */ var _common_wrapRouteHandlerWithSentry_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../common/wrapRouteHandlerWithSentry.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapRouteHandlerWithSentry.js\");\n/* harmony import */ var _common_pages_router_instrumentation_wrapApiHandlerWithSentryVercelCrons_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../common/pages-router-instrumentation/wrapApiHandlerWithSentryVercelCrons.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapApiHandlerWithSentryVercelCrons.js\");\n/* harmony import */ var _common_wrapMiddlewareWithSentry_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../common/wrapMiddlewareWithSentry.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapMiddlewareWithSentry.js\");\n/* harmony import */ var _common_pages_router_instrumentation_wrapPageComponentWithSentry_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../common/pages-router-instrumentation/wrapPageComponentWithSentry.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapPageComponentWithSentry.js\");\n/* harmony import */ var _common_wrapGenerationFunctionWithSentry_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../common/wrapGenerationFunctionWithSentry.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapGenerationFunctionWithSentry.js\");\n/* harmony import */ var _common_withServerActionInstrumentation_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../common/withServerActionInstrumentation.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/withServerActionInstrumentation.js\");\n/* harmony import */ var _common_captureRequestError_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../common/captureRequestError.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/captureRequestError.js\");\n/* harmony import */ var _common_pages_router_instrumentation_error_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../common/pages-router-instrumentation/_error.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/_error.js\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js\");\n/* __next_internal_client_entry_do_not_use__ *,captureRouterTransitionStart,wrapGetStaticPropsWithSentry,wrapGetInitialPropsWithSentry,wrapAppGetInitialPropsWithSentry,wrapDocumentGetInitialPropsWithSentry,wrapErrorGetInitialPropsWithSentry,wrapGetServerSidePropsWithSentry,wrapServerComponentWithSentry,wrapRouteHandlerWithSentry,wrapApiHandlerWithSentryVercelCrons,wrapMiddlewareWithSentry,wrapPageComponentWithSentry,wrapGenerationFunctionWithSentry,withServerActionInstrumentation,captureRequestError,captureUnderscoreErrorException,browserTracingIntegration,init,withSentryConfig auto */ \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nlet clientIsInitialized = false;\nconst globalWithInjectedValues = _sentry_core__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ;\n// Treeshakable guard to remove all code related to tracing\n/** Inits the Sentry NextJS SDK on the browser with the React SDK. */ function init(options) {\n    if (clientIsInitialized) {\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.consoleSandbox)(()=>{\n            // eslint-disable-next-line no-console\n            console.warn('[@sentry/nextjs] You are calling `Sentry.init()` more than once on the client. This can happen if you have both a `sentry.client.config.ts` and a `instrumentation-client.ts` file with `Sentry.init()` calls. It is recommended to call `Sentry.init()` once in `instrumentation-client.ts`.');\n        });\n    }\n    clientIsInitialized = true;\n    const opts = {\n        environment: (0,_common_getVercelEnv_js__WEBPACK_IMPORTED_MODULE_3__.getVercelEnv)(true) || \"development\",\n        defaultIntegrations: getDefaultIntegrations(options),\n        release: \"b82334b8ead96f0818316306df06b46564f33ca9\" || 0,\n        ...options\n    };\n    (0,_tunnelRoute_js__WEBPACK_IMPORTED_MODULE_8__.applyTunnelRouteOption)(opts);\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.applySdkMetadata)(opts, 'nextjs', [\n        'nextjs',\n        'react'\n    ]);\n    const client = (0,_sentry_react__WEBPACK_IMPORTED_MODULE_1__.init)(opts);\n    const filterTransactions = (event)=>event.type === 'transaction' && event.transaction === '/404' ? null : event;\n    filterTransactions.id = 'NextClient404Filter';\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addEventProcessor)(filterTransactions);\n    const filterIncompleteNavigationTransactions = (event)=>event.type === 'transaction' && event.transaction === _routing_appRouterRoutingInstrumentation_js__WEBPACK_IMPORTED_MODULE_7__.INCOMPLETE_APP_ROUTER_INSTRUMENTATION_TRANSACTION_NAME ? null : event;\n    filterIncompleteNavigationTransactions.id = 'IncompleteTransactionFilter';\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addEventProcessor)(filterIncompleteNavigationTransactions);\n    const filterNextRedirectError = (event, hint)=>{\n        var _event_exception_values_, _event_exception_values, _event_exception;\n        return (0,_common_nextNavigationErrorUtils_js__WEBPACK_IMPORTED_MODULE_4__.isRedirectNavigationError)(hint === null || hint === void 0 ? void 0 : hint.originalException) || ((_event_exception = event.exception) === null || _event_exception === void 0 ? void 0 : (_event_exception_values = _event_exception.values) === null || _event_exception_values === void 0 ? void 0 : (_event_exception_values_ = _event_exception_values[0]) === null || _event_exception_values_ === void 0 ? void 0 : _event_exception_values_.value) === 'NEXT_REDIRECT' ? null : event;\n    };\n    filterNextRedirectError.id = 'NextRedirectErrorFilter';\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addEventProcessor)(filterNextRedirectError);\n    if (true) {\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addEventProcessor)(_common_devErrorSymbolicationEventProcessor_js__WEBPACK_IMPORTED_MODULE_2__.devErrorSymbolicationEventProcessor);\n    }\n    try {\n        // @ts-expect-error `process.turbopack` is a magic string that will be replaced by Next.js\n        if (false) {}\n    } catch (e) {\n    // Noop\n    // The statement above can throw because process is not defined on the client\n    }\n    return client;\n}\nfunction getDefaultIntegrations(options) {\n    const customDefaultIntegrations = (0,_sentry_react__WEBPACK_IMPORTED_MODULE_1__.getDefaultIntegrations)(options);\n    // This evaluates to true unless __SENTRY_TRACING__ is text-replaced with \"false\",\n    // in which case everything inside will get tree-shaken away\n    if (typeof __SENTRY_TRACING__ === 'undefined' || __SENTRY_TRACING__) {\n        customDefaultIntegrations.push((0,_browserTracingIntegration_js__WEBPACK_IMPORTED_MODULE_5__.browserTracingIntegration)());\n    }\n    // These values are injected at build time, based on the output directory specified in the build config. Though a default\n    // is set there, we set it here as well, just in case something has gone wrong with the injection.\n    const rewriteFramesAssetPrefixPath =  false || globalWithInjectedValues._sentryRewriteFramesAssetPrefixPath || '';\n    const assetPrefix = process.env._sentryAssetPrefix || globalWithInjectedValues._sentryAssetPrefix;\n    const basePath = process.env._sentryBasePath || globalWithInjectedValues._sentryBasePath;\n    const experimentalThirdPartyOriginStackFrames = process.env._experimentalThirdPartyOriginStackFrames === 'true' || globalWithInjectedValues._experimentalThirdPartyOriginStackFrames === 'true';\n    customDefaultIntegrations.push((0,_clientNormalizationIntegration_js__WEBPACK_IMPORTED_MODULE_6__.nextjsClientStackFrameNormalizationIntegration)({\n        assetPrefix,\n        basePath,\n        rewriteFramesAssetPrefixPath,\n        experimentalThirdPartyOriginStackFrames\n    }));\n    return customDefaultIntegrations;\n}\n/**\n * Just a passthrough in case this is imported from the client.\n */ function withSentryConfig(exportedUserNextConfig) {\n    return exportedUserNextConfig;\n}\n //# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jbGllbnQvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQSxJQUFJLHNCQUFzQixLQUFLO0FBRS9CLE1BQU0sMkJBQTJCLG9EQUFVO0FBUTNDO0FBR0Esc0VBQ08sU0FBUyxJQUFJLENBQUMsT0FBTyxFQUFzQztJQUNoRSxJQUFJLG1CQUFtQixFQUFFO1FBQ3ZCLDREQUFjLENBQUM7WUFDbkI7WUFDTSxPQUFPLENBQUMsSUFBSSxDQUNWLCtSQUErUjtRQUV2UyxDQUFLLENBQUM7SUFDTjtJQUNFLHNCQUFzQixJQUFJO0lBRTFCLE1BQU0sT0FBTztRQUNYLFdBQVcsRUFBRSxxRUFBWSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQy9DLG1CQUFtQixFQUFFLHNCQUFzQixDQUFDLE9BQU8sQ0FBQztRQUNwRCxPQUFPLEVBQUUsMENBQVksSUFBa0IsQ0FBdUM7UUFDOUUsR0FBRyxPQUFPO0lBQ2QsQ0FBRTtJQUVBLHVFQUFzQixDQUFDLElBQUksQ0FBQztJQUM1Qiw4REFBZ0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1FBQUMsUUFBUTtRQUFFLE9BQU87S0FBQyxDQUFDO0lBRXJELE1BQU0sU0FBU0EsbURBQVMsQ0FBQyxJQUFJLENBQUM7SUFFOUIsTUFBTSxrQkFBa0IsSUFBbUIsUUFDekMsS0FBSyxDQUFDLFNBQVMsaUJBQWlCLEtBQUssQ0FBQyxnQkFBZ0IsU0FBUyxPQUFPLEtBQUs7SUFDN0Usa0JBQWtCLENBQUMsS0FBSyxxQkFBcUI7SUFDN0MsK0RBQWlCLENBQUMsa0JBQWtCLENBQUM7SUFFckMsTUFBTSxzQ0FBc0MsSUFBbUIsUUFDN0QsS0FBSyxDQUFDLFNBQVMsaUJBQWlCLEtBQUssQ0FBQyxnQkFBZ0IsK0hBQXNELEdBQ3hHLE9BQ0EsS0FBSztJQUNYLHNDQUFzQyxDQUFDLEtBQUssNkJBQTZCO0lBQ3pFLCtEQUFpQixDQUFDLHNDQUFzQyxDQUFDO0lBRXpELE1BQU0sdUJBQXVCLEdBQW1CLENBQUMsS0FBSyxFQUFFLElBQUk7O2VBQzFELDhGQUF5Qiw2Q0FBQyxJQUFJLENBQUUsaUJBQWlCLE9BQUssS0FBSyxvQkFBQyxTQUFTLGlHQUFFLE1BQU0sZ0hBQUcsQ0FBQyxDQUFDLHNGQUFFLFdBQVUsa0JBQzFGLE9BQ0EsS0FBSzs7SUFDWCx1QkFBdUIsQ0FBQyxLQUFLLHlCQUF5QjtJQUN0RCwrREFBaUIsQ0FBQyx1QkFBdUIsQ0FBQztJQUUxQyxJQUFJLElBQXNDLEVBQUU7UUFDMUMsK0RBQWlCLENBQUMsK0dBQW1DLENBQUM7SUFDMUQ7SUFFRSxJQUFJO1FBQ047UUFDSSxJQUFJLEtBQWlCLEVBQUUsRUFFM0I7SUFDQSxFQUFJLFVBQU07SUFDVjtJQUNBO0lBQ0E7SUFFRSxPQUFPLE1BQU07QUFDZjtBQUVBLFNBQVMsc0JBQXNCLENBQUMsT0FBTyxFQUFpQztJQUN0RSxNQUFNLDRCQUE0QkMscUVBQTJCLENBQUMsT0FBTyxDQUFDO0lBQ3hFO0lBQ0E7SUFDRSxJQUFJLE9BQU8sdUJBQXVCLGVBQWUsa0JBQWtCLEVBQUU7UUFDbkUseUJBQXlCLENBQUMsSUFBSSxDQUFDLHdGQUF5QixFQUFFLENBQUM7SUFDL0Q7SUFFQTtJQUNBO0lBQ0UsTUFBTSwrQkFDSixNQUFZLElBQ1osd0JBQXdCLENBQUMsdUNBQ3pCLEVBQUU7SUFDSixNQUFNLGNBQWMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0Isd0JBQXdCLENBQUMsa0JBQWtCO0lBQ2pHLE1BQU0sV0FBVyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQix3QkFBd0IsQ0FBQyxlQUFlO0lBQ3hGLE1BQU0sMENBQ0osT0FBTyxDQUFDLEdBQUcsQ0FBQyw2Q0FBNkMsVUFDekQsd0JBQXdCLENBQUMsNkNBQTZDLE1BQU07SUFDOUUseUJBQXlCLENBQUMsSUFBSSxDQUM1QixrSEFBOEMsQ0FBQztRQUM3QyxXQUFXO1FBQ1gsUUFBUTtRQUNSLDRCQUE0QjtRQUM1Qix1Q0FBdUM7SUFDN0MsQ0FBSyxDQUFDO0lBR0osT0FBTyx5QkFBeUI7QUFDbEM7QUFFQTs7Q0FFQSxHQUNPLFNBQVMsZ0JBQWdCLENBQUksc0JBQXNCLEVBQVE7SUFDaEUsT0FBTyxzQkFBc0I7QUFDL0IiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL2NsaWVudC9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENsaWVudCwgRXZlbnRQcm9jZXNzb3IsIEludGVncmF0aW9uIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGFkZEV2ZW50UHJvY2Vzc29yLCBhcHBseVNka01ldGFkYXRhLCBjb25zb2xlU2FuZGJveCwgZ2V0R2xvYmFsU2NvcGUsIEdMT0JBTF9PQkogfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBCcm93c2VyT3B0aW9ucyB9IGZyb20gJ0BzZW50cnkvcmVhY3QnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdEludGVncmF0aW9ucyBhcyBnZXRSZWFjdERlZmF1bHRJbnRlZ3JhdGlvbnMsIGluaXQgYXMgcmVhY3RJbml0IH0gZnJvbSAnQHNlbnRyeS9yZWFjdCc7XG5pbXBvcnQgeyBkZXZFcnJvclN5bWJvbGljYXRpb25FdmVudFByb2Nlc3NvciB9IGZyb20gJy4uL2NvbW1vbi9kZXZFcnJvclN5bWJvbGljYXRpb25FdmVudFByb2Nlc3Nvcic7XG5pbXBvcnQgeyBnZXRWZXJjZWxFbnYgfSBmcm9tICcuLi9jb21tb24vZ2V0VmVyY2VsRW52JztcbmltcG9ydCB7IGlzUmVkaXJlY3ROYXZpZ2F0aW9uRXJyb3IgfSBmcm9tICcuLi9jb21tb24vbmV4dE5hdmlnYXRpb25FcnJvclV0aWxzJztcbmltcG9ydCB7IGJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24gfSBmcm9tICcuL2Jyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24nO1xuaW1wb3J0IHsgbmV4dGpzQ2xpZW50U3RhY2tGcmFtZU5vcm1hbGl6YXRpb25JbnRlZ3JhdGlvbiB9IGZyb20gJy4vY2xpZW50Tm9ybWFsaXphdGlvbkludGVncmF0aW9uJztcbmltcG9ydCB7IElOQ09NUExFVEVfQVBQX1JPVVRFUl9JTlNUUlVNRU5UQVRJT05fVFJBTlNBQ1RJT05fTkFNRSB9IGZyb20gJy4vcm91dGluZy9hcHBSb3V0ZXJSb3V0aW5nSW5zdHJ1bWVudGF0aW9uJztcbmltcG9ydCB7IGFwcGx5VHVubmVsUm91dGVPcHRpb24gfSBmcm9tICcuL3R1bm5lbFJvdXRlJztcblxuZXhwb3J0ICogZnJvbSAnQHNlbnRyeS9yZWFjdCc7XG5leHBvcnQgKiBmcm9tICcuLi9jb21tb24nO1xuZXhwb3J0IHsgY2FwdHVyZVVuZGVyc2NvcmVFcnJvckV4Y2VwdGlvbiB9IGZyb20gJy4uL2NvbW1vbi9wYWdlcy1yb3V0ZXItaW5zdHJ1bWVudGF0aW9uL19lcnJvcic7XG5leHBvcnQgeyBicm93c2VyVHJhY2luZ0ludGVncmF0aW9uIH0gZnJvbSAnLi9icm93c2VyVHJhY2luZ0ludGVncmF0aW9uJztcbmV4cG9ydCB7IGNhcHR1cmVSb3V0ZXJUcmFuc2l0aW9uU3RhcnQgfSBmcm9tICcuL3JvdXRpbmcvYXBwUm91dGVyUm91dGluZ0luc3RydW1lbnRhdGlvbic7XG5cbmxldCBjbGllbnRJc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbmNvbnN0IGdsb2JhbFdpdGhJbmplY3RlZFZhbHVlcyA9IEdMT0JBTF9PQkogYXMgdHlwZW9mIEdMT0JBTF9PQkogJiB7XG4gIF9zZW50cnlSZXdyaXRlRnJhbWVzQXNzZXRQcmVmaXhQYXRoOiBzdHJpbmc7XG4gIF9zZW50cnlBc3NldFByZWZpeD86IHN0cmluZztcbiAgX3NlbnRyeUJhc2VQYXRoPzogc3RyaW5nO1xuICBfc2VudHJ5UmVsZWFzZT86IHN0cmluZztcbiAgX2V4cGVyaW1lbnRhbFRoaXJkUGFydHlPcmlnaW5TdGFja0ZyYW1lcz86IHN0cmluZztcbn07XG5cbi8vIFRyZWVzaGFrYWJsZSBndWFyZCB0byByZW1vdmUgYWxsIGNvZGUgcmVsYXRlZCB0byB0cmFjaW5nXG5kZWNsYXJlIGNvbnN0IF9fU0VOVFJZX1RSQUNJTkdfXzogYm9vbGVhbjtcblxuLyoqIEluaXRzIHRoZSBTZW50cnkgTmV4dEpTIFNESyBvbiB0aGUgYnJvd3NlciB3aXRoIHRoZSBSZWFjdCBTREsuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdChvcHRpb25zOiBCcm93c2VyT3B0aW9ucyk6IENsaWVudCB8IHVuZGVmaW5lZCB7XG4gIGlmIChjbGllbnRJc0luaXRpYWxpemVkKSB7XG4gICAgY29uc29sZVNhbmRib3goKCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ1tAc2VudHJ5L25leHRqc10gWW91IGFyZSBjYWxsaW5nIGBTZW50cnkuaW5pdCgpYCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgY2xpZW50LiBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IGhhdmUgYm90aCBhIGBzZW50cnkuY2xpZW50LmNvbmZpZy50c2AgYW5kIGEgYGluc3RydW1lbnRhdGlvbi1jbGllbnQudHNgIGZpbGUgd2l0aCBgU2VudHJ5LmluaXQoKWAgY2FsbHMuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGNhbGwgYFNlbnRyeS5pbml0KClgIG9uY2UgaW4gYGluc3RydW1lbnRhdGlvbi1jbGllbnQudHNgLicsXG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIGNsaWVudElzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgZW52aXJvbm1lbnQ6IGdldFZlcmNlbEVudih0cnVlKSB8fCBwcm9jZXNzLmVudi5OT0RFX0VOVixcbiAgICBkZWZhdWx0SW50ZWdyYXRpb25zOiBnZXREZWZhdWx0SW50ZWdyYXRpb25zKG9wdGlvbnMpLFxuICAgIHJlbGVhc2U6IHByb2Nlc3MuZW52Ll9zZW50cnlSZWxlYXNlIHx8IGdsb2JhbFdpdGhJbmplY3RlZFZhbHVlcy5fc2VudHJ5UmVsZWFzZSxcbiAgICAuLi5vcHRpb25zLFxuICB9IHNhdGlzZmllcyBCcm93c2VyT3B0aW9ucztcblxuICBhcHBseVR1bm5lbFJvdXRlT3B0aW9uKG9wdHMpO1xuICBhcHBseVNka01ldGFkYXRhKG9wdHMsICduZXh0anMnLCBbJ25leHRqcycsICdyZWFjdCddKTtcblxuICBjb25zdCBjbGllbnQgPSByZWFjdEluaXQob3B0cyk7XG5cbiAgY29uc3QgZmlsdGVyVHJhbnNhY3Rpb25zOiBFdmVudFByb2Nlc3NvciA9IGV2ZW50ID0+XG4gICAgZXZlbnQudHlwZSA9PT0gJ3RyYW5zYWN0aW9uJyAmJiBldmVudC50cmFuc2FjdGlvbiA9PT0gJy80MDQnID8gbnVsbCA6IGV2ZW50O1xuICBmaWx0ZXJUcmFuc2FjdGlvbnMuaWQgPSAnTmV4dENsaWVudDQwNEZpbHRlcic7XG4gIGFkZEV2ZW50UHJvY2Vzc29yKGZpbHRlclRyYW5zYWN0aW9ucyk7XG5cbiAgY29uc3QgZmlsdGVySW5jb21wbGV0ZU5hdmlnYXRpb25UcmFuc2FjdGlvbnM6IEV2ZW50UHJvY2Vzc29yID0gZXZlbnQgPT5cbiAgICBldmVudC50eXBlID09PSAndHJhbnNhY3Rpb24nICYmIGV2ZW50LnRyYW5zYWN0aW9uID09PSBJTkNPTVBMRVRFX0FQUF9ST1VURVJfSU5TVFJVTUVOVEFUSU9OX1RSQU5TQUNUSU9OX05BTUVcbiAgICAgID8gbnVsbFxuICAgICAgOiBldmVudDtcbiAgZmlsdGVySW5jb21wbGV0ZU5hdmlnYXRpb25UcmFuc2FjdGlvbnMuaWQgPSAnSW5jb21wbGV0ZVRyYW5zYWN0aW9uRmlsdGVyJztcbiAgYWRkRXZlbnRQcm9jZXNzb3IoZmlsdGVySW5jb21wbGV0ZU5hdmlnYXRpb25UcmFuc2FjdGlvbnMpO1xuXG4gIGNvbnN0IGZpbHRlck5leHRSZWRpcmVjdEVycm9yOiBFdmVudFByb2Nlc3NvciA9IChldmVudCwgaGludCkgPT5cbiAgICBpc1JlZGlyZWN0TmF2aWdhdGlvbkVycm9yKGhpbnQ/Lm9yaWdpbmFsRXhjZXB0aW9uKSB8fCBldmVudC5leGNlcHRpb24/LnZhbHVlcz8uWzBdPy52YWx1ZSA9PT0gJ05FWFRfUkVESVJFQ1QnXG4gICAgICA/IG51bGxcbiAgICAgIDogZXZlbnQ7XG4gIGZpbHRlck5leHRSZWRpcmVjdEVycm9yLmlkID0gJ05leHRSZWRpcmVjdEVycm9yRmlsdGVyJztcbiAgYWRkRXZlbnRQcm9jZXNzb3IoZmlsdGVyTmV4dFJlZGlyZWN0RXJyb3IpO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgIGFkZEV2ZW50UHJvY2Vzc29yKGRldkVycm9yU3ltYm9saWNhdGlvbkV2ZW50UHJvY2Vzc29yKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgcHJvY2Vzcy50dXJib3BhY2tgIGlzIGEgbWFnaWMgc3RyaW5nIHRoYXQgd2lsbCBiZSByZXBsYWNlZCBieSBOZXh0LmpzXG4gICAgaWYgKHByb2Nlc3MudHVyYm9wYWNrKSB7XG4gICAgICBnZXRHbG9iYWxTY29wZSgpLnNldFRhZygndHVyYm9wYWNrJywgdHJ1ZSk7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBOb29wXG4gICAgLy8gVGhlIHN0YXRlbWVudCBhYm92ZSBjYW4gdGhyb3cgYmVjYXVzZSBwcm9jZXNzIGlzIG5vdCBkZWZpbmVkIG9uIHRoZSBjbGllbnRcbiAgfVxuXG4gIHJldHVybiBjbGllbnQ7XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRJbnRlZ3JhdGlvbnMob3B0aW9uczogQnJvd3Nlck9wdGlvbnMpOiBJbnRlZ3JhdGlvbltdIHtcbiAgY29uc3QgY3VzdG9tRGVmYXVsdEludGVncmF0aW9ucyA9IGdldFJlYWN0RGVmYXVsdEludGVncmF0aW9ucyhvcHRpb25zKTtcbiAgLy8gVGhpcyBldmFsdWF0ZXMgdG8gdHJ1ZSB1bmxlc3MgX19TRU5UUllfVFJBQ0lOR19fIGlzIHRleHQtcmVwbGFjZWQgd2l0aCBcImZhbHNlXCIsXG4gIC8vIGluIHdoaWNoIGNhc2UgZXZlcnl0aGluZyBpbnNpZGUgd2lsbCBnZXQgdHJlZS1zaGFrZW4gYXdheVxuICBpZiAodHlwZW9mIF9fU0VOVFJZX1RSQUNJTkdfXyA9PT0gJ3VuZGVmaW5lZCcgfHwgX19TRU5UUllfVFJBQ0lOR19fKSB7XG4gICAgY3VzdG9tRGVmYXVsdEludGVncmF0aW9ucy5wdXNoKGJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24oKSk7XG4gIH1cblxuICAvLyBUaGVzZSB2YWx1ZXMgYXJlIGluamVjdGVkIGF0IGJ1aWxkIHRpbWUsIGJhc2VkIG9uIHRoZSBvdXRwdXQgZGlyZWN0b3J5IHNwZWNpZmllZCBpbiB0aGUgYnVpbGQgY29uZmlnLiBUaG91Z2ggYSBkZWZhdWx0XG4gIC8vIGlzIHNldCB0aGVyZSwgd2Ugc2V0IGl0IGhlcmUgYXMgd2VsbCwganVzdCBpbiBjYXNlIHNvbWV0aGluZyBoYXMgZ29uZSB3cm9uZyB3aXRoIHRoZSBpbmplY3Rpb24uXG4gIGNvbnN0IHJld3JpdGVGcmFtZXNBc3NldFByZWZpeFBhdGggPVxuICAgIHByb2Nlc3MuZW52Ll9zZW50cnlSZXdyaXRlRnJhbWVzQXNzZXRQcmVmaXhQYXRoIHx8XG4gICAgZ2xvYmFsV2l0aEluamVjdGVkVmFsdWVzLl9zZW50cnlSZXdyaXRlRnJhbWVzQXNzZXRQcmVmaXhQYXRoIHx8XG4gICAgJyc7XG4gIGNvbnN0IGFzc2V0UHJlZml4ID0gcHJvY2Vzcy5lbnYuX3NlbnRyeUFzc2V0UHJlZml4IHx8IGdsb2JhbFdpdGhJbmplY3RlZFZhbHVlcy5fc2VudHJ5QXNzZXRQcmVmaXg7XG4gIGNvbnN0IGJhc2VQYXRoID0gcHJvY2Vzcy5lbnYuX3NlbnRyeUJhc2VQYXRoIHx8IGdsb2JhbFdpdGhJbmplY3RlZFZhbHVlcy5fc2VudHJ5QmFzZVBhdGg7XG4gIGNvbnN0IGV4cGVyaW1lbnRhbFRoaXJkUGFydHlPcmlnaW5TdGFja0ZyYW1lcyA9XG4gICAgcHJvY2Vzcy5lbnYuX2V4cGVyaW1lbnRhbFRoaXJkUGFydHlPcmlnaW5TdGFja0ZyYW1lcyA9PT0gJ3RydWUnIHx8XG4gICAgZ2xvYmFsV2l0aEluamVjdGVkVmFsdWVzLl9leHBlcmltZW50YWxUaGlyZFBhcnR5T3JpZ2luU3RhY2tGcmFtZXMgPT09ICd0cnVlJztcbiAgY3VzdG9tRGVmYXVsdEludGVncmF0aW9ucy5wdXNoKFxuICAgIG5leHRqc0NsaWVudFN0YWNrRnJhbWVOb3JtYWxpemF0aW9uSW50ZWdyYXRpb24oe1xuICAgICAgYXNzZXRQcmVmaXgsXG4gICAgICBiYXNlUGF0aCxcbiAgICAgIHJld3JpdGVGcmFtZXNBc3NldFByZWZpeFBhdGgsXG4gICAgICBleHBlcmltZW50YWxUaGlyZFBhcnR5T3JpZ2luU3RhY2tGcmFtZXMsXG4gICAgfSksXG4gICk7XG5cbiAgcmV0dXJuIGN1c3RvbURlZmF1bHRJbnRlZ3JhdGlvbnM7XG59XG5cbi8qKlxuICogSnVzdCBhIHBhc3N0aHJvdWdoIGluIGNhc2UgdGhpcyBpcyBpbXBvcnRlZCBmcm9tIHRoZSBjbGllbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoU2VudHJ5Q29uZmlnPFQ+KGV4cG9ydGVkVXNlck5leHRDb25maWc6IFQpOiBUIHtcbiAgcmV0dXJuIGV4cG9ydGVkVXNlck5leHRDb25maWc7XG59XG4iXSwibmFtZXMiOlsicmVhY3RJbml0IiwiZ2V0UmVhY3REZWZhdWx0SW50ZWdyYXRpb25zIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/routing/appRouterRoutingInstrumentation.js":
/*!*********************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/routing/appRouterRoutingInstrumentation.js ***!
  \*********************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   INCOMPLETE_APP_ROUTER_INSTRUMENTATION_TRANSACTION_NAME: () => (/* binding */ INCOMPLETE_APP_ROUTER_INSTRUMENTATION_TRANSACTION_NAME),\n/* harmony export */   appRouterInstrumentNavigation: () => (/* binding */ appRouterInstrumentNavigation),\n/* harmony export */   appRouterInstrumentPageLoad: () => (/* binding */ appRouterInstrumentPageLoad),\n/* harmony export */   captureRouterTransitionStart: () => (/* binding */ captureRouterTransitionStart)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _sentry_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/react */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/index.js\");\n/* harmony import */ var _parameterization_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./parameterization.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/routing/parameterization.js\");\n\n\n\n\nconst INCOMPLETE_APP_ROUTER_INSTRUMENTATION_TRANSACTION_NAME = 'incomplete-app-router-transaction';\n\n/**\n * This mutable keeps track of what router navigation instrumentation mechanism we are using.\n *\n * The default one is 'router-patch' which is a way of instrumenting that worked up until Next.js 15.3.0 was released.\n * For this method we took the global router instance and simply monkey patched all the router methods like push(), replace(), and so on.\n * This worked because Next.js itself called the router methods for things like the <Link /> component.\n * Vercel decided that it is not good to call these public API methods from within the framework so they switched to an internal system that completely bypasses our monkey patching. This happened in 15.3.0.\n *\n * We raised with Vercel that this breaks our SDK so together with them we came up with an API for `instrumentation-client.ts` called `onRouterTransitionStart` that is called whenever a navigation is kicked off.\n *\n * Now we have the problem of version compatibility.\n * For older Next.js versions we cannot use the new hook so we need to always patch the router.\n * For newer Next.js versions we cannot know whether the user actually registered our handler for the `onRouterTransitionStart` hook, so we need to wait until it was called at least once before switching the instrumentation mechanism.\n * The problem is, that the user may still have registered a hook and then call a patched router method.\n * First, the monkey patched router method will be called, starting a navigation span, then the hook will also called.\n * We need to handle this case and not create two separate navigation spans but instead update the current navigation span and then switch to the new instrumentation mode.\n * This is all denoted by this `navigationRoutingMode` variable.\n */\nlet navigationRoutingMode = 'router-patch';\n\nconst currentRouterPatchingNavigationSpanRef = { current: undefined };\n\n/** Instruments the Next.js app router for pageloads. */\nfunction appRouterInstrumentPageLoad(client) {\n  const parameterizedPathname = (0,_parameterization_js__WEBPACK_IMPORTED_MODULE_2__.maybeParameterizeRoute)(_sentry_react__WEBPACK_IMPORTED_MODULE_1__.WINDOW.location.pathname);\n  const origin = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.browserPerformanceTimeOrigin)();\n  (0,_sentry_react__WEBPACK_IMPORTED_MODULE_1__.startBrowserTracingPageLoadSpan)(client, {\n    name: parameterizedPathname ?? _sentry_react__WEBPACK_IMPORTED_MODULE_1__.WINDOW.location.pathname,\n    // pageload should always start at timeOrigin (and needs to be in s, not ms)\n    startTime: origin ? origin / 1000 : undefined,\n    attributes: {\n      [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload',\n      [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.nextjs.app_router_instrumentation',\n      [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: parameterizedPathname ? 'route' : 'url',\n    },\n  });\n}\n\n// Yes, yes, I know we shouldn't depend on these internals. But that's where we are at. We write the ugly code, so you don't have to.\nconst GLOBAL_OBJ_WITH_NEXT_ROUTER = _sentry_core__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ\n\n;\n\n/*\n * The routing instrumentation needs to handle a few cases:\n * - Router operations:\n *  - router.push() (either explicitly called or implicitly through <Link /> tags)\n *  - router.replace() (either explicitly called or implicitly through <Link replace /> tags)\n *  - router.back()\n *  - router.forward()\n * - Browser operations:\n *  - native Browser-back / popstate event (implicitly called by router.back())\n *  - native Browser-forward / popstate event (implicitly called by router.forward())\n */\n\n/** Instruments the Next.js app router for navigation. */\nfunction appRouterInstrumentNavigation(client) {\n  routerTransitionHandler = (href, navigationType) => {\n    const unparameterizedPathname = new URL(href, _sentry_react__WEBPACK_IMPORTED_MODULE_1__.WINDOW.location.href).pathname;\n    const parameterizedPathname = (0,_parameterization_js__WEBPACK_IMPORTED_MODULE_2__.maybeParameterizeRoute)(unparameterizedPathname);\n    const pathname = parameterizedPathname ?? unparameterizedPathname;\n\n    if (navigationRoutingMode === 'router-patch') {\n      navigationRoutingMode = 'transition-start-hook';\n    }\n\n    const currentNavigationSpan = currentRouterPatchingNavigationSpanRef.current;\n    if (currentNavigationSpan) {\n      currentNavigationSpan.updateName(pathname);\n      currentNavigationSpan.setAttributes({\n        'navigation.type': `router.${navigationType}`,\n        [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: parameterizedPathname ? 'route' : 'url',\n      });\n      currentRouterPatchingNavigationSpanRef.current = undefined;\n    } else {\n      (0,_sentry_react__WEBPACK_IMPORTED_MODULE_1__.startBrowserTracingNavigationSpan)(client, {\n        name: pathname,\n        attributes: {\n          [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation',\n          [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.nextjs.app_router_instrumentation',\n          [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: parameterizedPathname ? 'route' : 'url',\n          'navigation.type': `router.${navigationType}`,\n        },\n      });\n    }\n  };\n\n  _sentry_react__WEBPACK_IMPORTED_MODULE_1__.WINDOW.addEventListener('popstate', () => {\n    const parameterizedPathname = (0,_parameterization_js__WEBPACK_IMPORTED_MODULE_2__.maybeParameterizeRoute)(_sentry_react__WEBPACK_IMPORTED_MODULE_1__.WINDOW.location.pathname);\n    if (currentRouterPatchingNavigationSpanRef.current?.isRecording()) {\n      currentRouterPatchingNavigationSpanRef.current.updateName(parameterizedPathname ?? _sentry_react__WEBPACK_IMPORTED_MODULE_1__.WINDOW.location.pathname);\n      currentRouterPatchingNavigationSpanRef.current.setAttribute(\n        _sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n        parameterizedPathname ? 'route' : 'url',\n      );\n    } else {\n      currentRouterPatchingNavigationSpanRef.current = (0,_sentry_react__WEBPACK_IMPORTED_MODULE_1__.startBrowserTracingNavigationSpan)(client, {\n        name: parameterizedPathname ?? _sentry_react__WEBPACK_IMPORTED_MODULE_1__.WINDOW.location.pathname,\n        attributes: {\n          [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.nextjs.app_router_instrumentation',\n          [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: parameterizedPathname ? 'route' : 'url',\n          'navigation.type': 'browser.popstate',\n        },\n      });\n    }\n  });\n\n  let routerPatched = false;\n  let triesToFindRouter = 0;\n  const MAX_TRIES_TO_FIND_ROUTER = 500;\n  const ROUTER_AVAILABILITY_CHECK_INTERVAL_MS = 20;\n  const checkForRouterAvailabilityInterval = setInterval(() => {\n    triesToFindRouter++;\n    const router = GLOBAL_OBJ_WITH_NEXT_ROUTER?.next?.router ?? GLOBAL_OBJ_WITH_NEXT_ROUTER?.nd?.router;\n\n    if (routerPatched || triesToFindRouter > MAX_TRIES_TO_FIND_ROUTER) {\n      clearInterval(checkForRouterAvailabilityInterval);\n    } else if (router) {\n      clearInterval(checkForRouterAvailabilityInterval);\n      routerPatched = true;\n\n      patchRouter(client, router, currentRouterPatchingNavigationSpanRef);\n\n      // If the router at any point gets overridden - patch again\n      (['nd', 'next'] ).forEach(globalValueName => {\n        const globalValue = GLOBAL_OBJ_WITH_NEXT_ROUTER[globalValueName];\n        if (globalValue) {\n          GLOBAL_OBJ_WITH_NEXT_ROUTER[globalValueName] = new Proxy(globalValue, {\n            set(target, p, newValue) {\n              if (p === 'router' && typeof newValue === 'object' && newValue !== null) {\n                patchRouter(client, newValue, currentRouterPatchingNavigationSpanRef);\n              }\n\n              // @ts-expect-error we cannot possibly type this\n              target[p] = newValue;\n              return true;\n            },\n          });\n        }\n      });\n    }\n  }, ROUTER_AVAILABILITY_CHECK_INTERVAL_MS);\n}\n\nfunction transactionNameifyRouterArgument(target) {\n  try {\n    // We provide an arbitrary base because we only care about the pathname and it makes URL parsing more resilient.\n    return new URL(target, 'http://example.com/').pathname;\n  } catch {\n    return '/';\n  }\n}\n\nconst patchedRouters = new WeakSet();\n\nfunction patchRouter(client, router, currentNavigationSpanRef) {\n  if (patchedRouters.has(router)) {\n    return;\n  }\n  patchedRouters.add(router);\n\n  (['back', 'forward', 'push', 'replace'] ).forEach(routerFunctionName => {\n    if (router?.[routerFunctionName]) {\n      // @ts-expect-error Weird type error related to not knowing how to associate return values with the individual functions - we can just ignore\n      router[routerFunctionName] = new Proxy(router[routerFunctionName], {\n        apply(target, thisArg, argArray) {\n          if (navigationRoutingMode !== 'router-patch') {\n            return target.apply(thisArg, argArray);\n          }\n\n          let transactionName = INCOMPLETE_APP_ROUTER_INSTRUMENTATION_TRANSACTION_NAME;\n          const transactionAttributes = {\n            [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation',\n            [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.nextjs.app_router_instrumentation',\n            [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n          };\n\n          if (routerFunctionName === 'push') {\n            transactionName = transactionNameifyRouterArgument(argArray[0]);\n            transactionAttributes['navigation.type'] = 'router.push';\n          } else if (routerFunctionName === 'replace') {\n            transactionName = transactionNameifyRouterArgument(argArray[0]);\n            transactionAttributes['navigation.type'] = 'router.replace';\n          } else if (routerFunctionName === 'back') {\n            transactionAttributes['navigation.type'] = 'router.back';\n          } else if (routerFunctionName === 'forward') {\n            transactionAttributes['navigation.type'] = 'router.forward';\n          }\n\n          const parameterizedPathname = (0,_parameterization_js__WEBPACK_IMPORTED_MODULE_2__.maybeParameterizeRoute)(transactionName);\n\n          currentNavigationSpanRef.current = (0,_sentry_react__WEBPACK_IMPORTED_MODULE_1__.startBrowserTracingNavigationSpan)(client, {\n            name: parameterizedPathname ?? transactionName,\n            attributes: {\n              ...transactionAttributes,\n              [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: parameterizedPathname ? 'route' : 'url',\n            },\n          });\n\n          return target.apply(thisArg, argArray);\n        },\n      });\n    }\n  });\n}\n\nlet routerTransitionHandler = undefined;\n\n/**\n * A handler for Next.js' `onRouterTransitionStart` hook in `instrumentation-client.ts` to record navigation spans in Sentry.\n */\nfunction captureRouterTransitionStart(href, navigationType) {\n  if (routerTransitionHandler) {\n    routerTransitionHandler(href, navigationType);\n  }\n}\n\n\n//# sourceMappingURL=appRouterRoutingInstrumentation.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jbGllbnQvcm91dGluZy9hcHBSb3V0ZXJSb3V0aW5nSW5zdHJ1bWVudGF0aW9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBMEs7QUFDL0Q7QUFDNUM7O0FBRS9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlEQUFpRDs7QUFFakQ7QUFDQTtBQUNBLGdDQUFnQyw0RUFBc0IsQ0FBQyxpREFBTTtBQUM3RCxpQkFBaUIsMEVBQTRCO0FBQzdDLEVBQUUsOEVBQStCO0FBQ2pDLG1DQUFtQyxpREFBTTtBQUN6QztBQUNBO0FBQ0E7QUFDQSxPQUFPLHNFQUE0QjtBQUNuQyxPQUFPLDBFQUFnQztBQUN2QyxPQUFPLDBFQUFnQztBQUN2QyxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0Esb0NBQW9DLG9EQUFVOztBQUU5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCxpREFBTTtBQUN4RCxrQ0FBa0MsNEVBQXNCO0FBQ3hEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxlQUFlO0FBQ3BELFNBQVMsMEVBQWdDO0FBQ3pDLE9BQU87QUFDUDtBQUNBLE1BQU07QUFDTixNQUFNLGdGQUFpQztBQUN2QztBQUNBO0FBQ0EsV0FBVyxzRUFBNEI7QUFDdkMsV0FBVywwRUFBZ0M7QUFDM0MsV0FBVywwRUFBZ0M7QUFDM0MsdUNBQXVDLGVBQWU7QUFDdEQsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBOztBQUVBLEVBQUUsaURBQU07QUFDUixrQ0FBa0MsNEVBQXNCLENBQUMsaURBQU07QUFDL0Q7QUFDQSx5RkFBeUYsaURBQU07QUFDL0Y7QUFDQSxRQUFRLDBFQUFnQztBQUN4QztBQUNBO0FBQ0EsTUFBTTtBQUNOLHVEQUF1RCxnRkFBaUM7QUFDeEYsdUNBQXVDLGlEQUFNO0FBQzdDO0FBQ0EsV0FBVywwRUFBZ0M7QUFDM0MsV0FBVywwRUFBZ0M7QUFDM0M7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxzRUFBNEI7QUFDekMsYUFBYSwwRUFBZ0M7QUFDN0MsYUFBYSwwRUFBZ0M7QUFDN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQSx3Q0FBd0MsNEVBQXNCOztBQUU5RCw2Q0FBNkMsZ0ZBQWlDO0FBQzlFO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMEVBQWdDO0FBQy9DLGFBQWE7QUFDYixXQUFXOztBQUVYO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUU0SjtBQUM1SiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jbGllbnQvcm91dGluZy9hcHBSb3V0ZXJSb3V0aW5nSW5zdHJ1bWVudGF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTiwgR0xPQkFMX09CSiwgYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUCB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBXSU5ET1csIHN0YXJ0QnJvd3NlclRyYWNpbmdOYXZpZ2F0aW9uU3Bhbiwgc3RhcnRCcm93c2VyVHJhY2luZ1BhZ2VMb2FkU3BhbiB9IGZyb20gJ0BzZW50cnkvcmVhY3QnO1xuaW1wb3J0IHsgbWF5YmVQYXJhbWV0ZXJpemVSb3V0ZSB9IGZyb20gJy4vcGFyYW1ldGVyaXphdGlvbi5qcyc7XG5cbmNvbnN0IElOQ09NUExFVEVfQVBQX1JPVVRFUl9JTlNUUlVNRU5UQVRJT05fVFJBTlNBQ1RJT05fTkFNRSA9ICdpbmNvbXBsZXRlLWFwcC1yb3V0ZXItdHJhbnNhY3Rpb24nO1xuXG4vKipcbiAqIFRoaXMgbXV0YWJsZSBrZWVwcyB0cmFjayBvZiB3aGF0IHJvdXRlciBuYXZpZ2F0aW9uIGluc3RydW1lbnRhdGlvbiBtZWNoYW5pc20gd2UgYXJlIHVzaW5nLlxuICpcbiAqIFRoZSBkZWZhdWx0IG9uZSBpcyAncm91dGVyLXBhdGNoJyB3aGljaCBpcyBhIHdheSBvZiBpbnN0cnVtZW50aW5nIHRoYXQgd29ya2VkIHVwIHVudGlsIE5leHQuanMgMTUuMy4wIHdhcyByZWxlYXNlZC5cbiAqIEZvciB0aGlzIG1ldGhvZCB3ZSB0b29rIHRoZSBnbG9iYWwgcm91dGVyIGluc3RhbmNlIGFuZCBzaW1wbHkgbW9ua2V5IHBhdGNoZWQgYWxsIHRoZSByb3V0ZXIgbWV0aG9kcyBsaWtlIHB1c2goKSwgcmVwbGFjZSgpLCBhbmQgc28gb24uXG4gKiBUaGlzIHdvcmtlZCBiZWNhdXNlIE5leHQuanMgaXRzZWxmIGNhbGxlZCB0aGUgcm91dGVyIG1ldGhvZHMgZm9yIHRoaW5ncyBsaWtlIHRoZSA8TGluayAvPiBjb21wb25lbnQuXG4gKiBWZXJjZWwgZGVjaWRlZCB0aGF0IGl0IGlzIG5vdCBnb29kIHRvIGNhbGwgdGhlc2UgcHVibGljIEFQSSBtZXRob2RzIGZyb20gd2l0aGluIHRoZSBmcmFtZXdvcmsgc28gdGhleSBzd2l0Y2hlZCB0byBhbiBpbnRlcm5hbCBzeXN0ZW0gdGhhdCBjb21wbGV0ZWx5IGJ5cGFzc2VzIG91ciBtb25rZXkgcGF0Y2hpbmcuIFRoaXMgaGFwcGVuZWQgaW4gMTUuMy4wLlxuICpcbiAqIFdlIHJhaXNlZCB3aXRoIFZlcmNlbCB0aGF0IHRoaXMgYnJlYWtzIG91ciBTREsgc28gdG9nZXRoZXIgd2l0aCB0aGVtIHdlIGNhbWUgdXAgd2l0aCBhbiBBUEkgZm9yIGBpbnN0cnVtZW50YXRpb24tY2xpZW50LnRzYCBjYWxsZWQgYG9uUm91dGVyVHJhbnNpdGlvblN0YXJ0YCB0aGF0IGlzIGNhbGxlZCB3aGVuZXZlciBhIG5hdmlnYXRpb24gaXMga2lja2VkIG9mZi5cbiAqXG4gKiBOb3cgd2UgaGF2ZSB0aGUgcHJvYmxlbSBvZiB2ZXJzaW9uIGNvbXBhdGliaWxpdHkuXG4gKiBGb3Igb2xkZXIgTmV4dC5qcyB2ZXJzaW9ucyB3ZSBjYW5ub3QgdXNlIHRoZSBuZXcgaG9vayBzbyB3ZSBuZWVkIHRvIGFsd2F5cyBwYXRjaCB0aGUgcm91dGVyLlxuICogRm9yIG5ld2VyIE5leHQuanMgdmVyc2lvbnMgd2UgY2Fubm90IGtub3cgd2hldGhlciB0aGUgdXNlciBhY3R1YWxseSByZWdpc3RlcmVkIG91ciBoYW5kbGVyIGZvciB0aGUgYG9uUm91dGVyVHJhbnNpdGlvblN0YXJ0YCBob29rLCBzbyB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXQgd2FzIGNhbGxlZCBhdCBsZWFzdCBvbmNlIGJlZm9yZSBzd2l0Y2hpbmcgdGhlIGluc3RydW1lbnRhdGlvbiBtZWNoYW5pc20uXG4gKiBUaGUgcHJvYmxlbSBpcywgdGhhdCB0aGUgdXNlciBtYXkgc3RpbGwgaGF2ZSByZWdpc3RlcmVkIGEgaG9vayBhbmQgdGhlbiBjYWxsIGEgcGF0Y2hlZCByb3V0ZXIgbWV0aG9kLlxuICogRmlyc3QsIHRoZSBtb25rZXkgcGF0Y2hlZCByb3V0ZXIgbWV0aG9kIHdpbGwgYmUgY2FsbGVkLCBzdGFydGluZyBhIG5hdmlnYXRpb24gc3BhbiwgdGhlbiB0aGUgaG9vayB3aWxsIGFsc28gY2FsbGVkLlxuICogV2UgbmVlZCB0byBoYW5kbGUgdGhpcyBjYXNlIGFuZCBub3QgY3JlYXRlIHR3byBzZXBhcmF0ZSBuYXZpZ2F0aW9uIHNwYW5zIGJ1dCBpbnN0ZWFkIHVwZGF0ZSB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIHNwYW4gYW5kIHRoZW4gc3dpdGNoIHRvIHRoZSBuZXcgaW5zdHJ1bWVudGF0aW9uIG1vZGUuXG4gKiBUaGlzIGlzIGFsbCBkZW5vdGVkIGJ5IHRoaXMgYG5hdmlnYXRpb25Sb3V0aW5nTW9kZWAgdmFyaWFibGUuXG4gKi9cbmxldCBuYXZpZ2F0aW9uUm91dGluZ01vZGUgPSAncm91dGVyLXBhdGNoJztcblxuY29uc3QgY3VycmVudFJvdXRlclBhdGNoaW5nTmF2aWdhdGlvblNwYW5SZWYgPSB7IGN1cnJlbnQ6IHVuZGVmaW5lZCB9O1xuXG4vKiogSW5zdHJ1bWVudHMgdGhlIE5leHQuanMgYXBwIHJvdXRlciBmb3IgcGFnZWxvYWRzLiAqL1xuZnVuY3Rpb24gYXBwUm91dGVySW5zdHJ1bWVudFBhZ2VMb2FkKGNsaWVudCkge1xuICBjb25zdCBwYXJhbWV0ZXJpemVkUGF0aG5hbWUgPSBtYXliZVBhcmFtZXRlcml6ZVJvdXRlKFdJTkRPVy5sb2NhdGlvbi5wYXRobmFtZSk7XG4gIGNvbnN0IG9yaWdpbiA9IGJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4oKTtcbiAgc3RhcnRCcm93c2VyVHJhY2luZ1BhZ2VMb2FkU3BhbihjbGllbnQsIHtcbiAgICBuYW1lOiBwYXJhbWV0ZXJpemVkUGF0aG5hbWUgPz8gV0lORE9XLmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgIC8vIHBhZ2Vsb2FkIHNob3VsZCBhbHdheXMgc3RhcnQgYXQgdGltZU9yaWdpbiAoYW5kIG5lZWRzIHRvIGJlIGluIHMsIG5vdCBtcylcbiAgICBzdGFydFRpbWU6IG9yaWdpbiA/IG9yaWdpbiAvIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1BdOiAncGFnZWxvYWQnLFxuICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOXTogJ2F1dG8ucGFnZWxvYWQubmV4dGpzLmFwcF9yb3V0ZXJfaW5zdHJ1bWVudGF0aW9uJyxcbiAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV06IHBhcmFtZXRlcml6ZWRQYXRobmFtZSA/ICdyb3V0ZScgOiAndXJsJyxcbiAgICB9LFxuICB9KTtcbn1cblxuLy8gWWVzLCB5ZXMsIEkga25vdyB3ZSBzaG91bGRuJ3QgZGVwZW5kIG9uIHRoZXNlIGludGVybmFscy4gQnV0IHRoYXQncyB3aGVyZSB3ZSBhcmUgYXQuIFdlIHdyaXRlIHRoZSB1Z2x5IGNvZGUsIHNvIHlvdSBkb24ndCBoYXZlIHRvLlxuY29uc3QgR0xPQkFMX09CSl9XSVRIX05FWFRfUk9VVEVSID0gR0xPQkFMX09CSlxuXG47XG5cbi8qXG4gKiBUaGUgcm91dGluZyBpbnN0cnVtZW50YXRpb24gbmVlZHMgdG8gaGFuZGxlIGEgZmV3IGNhc2VzOlxuICogLSBSb3V0ZXIgb3BlcmF0aW9uczpcbiAqICAtIHJvdXRlci5wdXNoKCkgKGVpdGhlciBleHBsaWNpdGx5IGNhbGxlZCBvciBpbXBsaWNpdGx5IHRocm91Z2ggPExpbmsgLz4gdGFncylcbiAqICAtIHJvdXRlci5yZXBsYWNlKCkgKGVpdGhlciBleHBsaWNpdGx5IGNhbGxlZCBvciBpbXBsaWNpdGx5IHRocm91Z2ggPExpbmsgcmVwbGFjZSAvPiB0YWdzKVxuICogIC0gcm91dGVyLmJhY2soKVxuICogIC0gcm91dGVyLmZvcndhcmQoKVxuICogLSBCcm93c2VyIG9wZXJhdGlvbnM6XG4gKiAgLSBuYXRpdmUgQnJvd3Nlci1iYWNrIC8gcG9wc3RhdGUgZXZlbnQgKGltcGxpY2l0bHkgY2FsbGVkIGJ5IHJvdXRlci5iYWNrKCkpXG4gKiAgLSBuYXRpdmUgQnJvd3Nlci1mb3J3YXJkIC8gcG9wc3RhdGUgZXZlbnQgKGltcGxpY2l0bHkgY2FsbGVkIGJ5IHJvdXRlci5mb3J3YXJkKCkpXG4gKi9cblxuLyoqIEluc3RydW1lbnRzIHRoZSBOZXh0LmpzIGFwcCByb3V0ZXIgZm9yIG5hdmlnYXRpb24uICovXG5mdW5jdGlvbiBhcHBSb3V0ZXJJbnN0cnVtZW50TmF2aWdhdGlvbihjbGllbnQpIHtcbiAgcm91dGVyVHJhbnNpdGlvbkhhbmRsZXIgPSAoaHJlZiwgbmF2aWdhdGlvblR5cGUpID0+IHtcbiAgICBjb25zdCB1bnBhcmFtZXRlcml6ZWRQYXRobmFtZSA9IG5ldyBVUkwoaHJlZiwgV0lORE9XLmxvY2F0aW9uLmhyZWYpLnBhdGhuYW1lO1xuICAgIGNvbnN0IHBhcmFtZXRlcml6ZWRQYXRobmFtZSA9IG1heWJlUGFyYW1ldGVyaXplUm91dGUodW5wYXJhbWV0ZXJpemVkUGF0aG5hbWUpO1xuICAgIGNvbnN0IHBhdGhuYW1lID0gcGFyYW1ldGVyaXplZFBhdGhuYW1lID8/IHVucGFyYW1ldGVyaXplZFBhdGhuYW1lO1xuXG4gICAgaWYgKG5hdmlnYXRpb25Sb3V0aW5nTW9kZSA9PT0gJ3JvdXRlci1wYXRjaCcpIHtcbiAgICAgIG5hdmlnYXRpb25Sb3V0aW5nTW9kZSA9ICd0cmFuc2l0aW9uLXN0YXJ0LWhvb2snO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnROYXZpZ2F0aW9uU3BhbiA9IGN1cnJlbnRSb3V0ZXJQYXRjaGluZ05hdmlnYXRpb25TcGFuUmVmLmN1cnJlbnQ7XG4gICAgaWYgKGN1cnJlbnROYXZpZ2F0aW9uU3Bhbikge1xuICAgICAgY3VycmVudE5hdmlnYXRpb25TcGFuLnVwZGF0ZU5hbWUocGF0aG5hbWUpO1xuICAgICAgY3VycmVudE5hdmlnYXRpb25TcGFuLnNldEF0dHJpYnV0ZXMoe1xuICAgICAgICAnbmF2aWdhdGlvbi50eXBlJzogYHJvdXRlci4ke25hdmlnYXRpb25UeXBlfWAsXG4gICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV06IHBhcmFtZXRlcml6ZWRQYXRobmFtZSA/ICdyb3V0ZScgOiAndXJsJyxcbiAgICAgIH0pO1xuICAgICAgY3VycmVudFJvdXRlclBhdGNoaW5nTmF2aWdhdGlvblNwYW5SZWYuY3VycmVudCA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRCcm93c2VyVHJhY2luZ05hdmlnYXRpb25TcGFuKGNsaWVudCwge1xuICAgICAgICBuYW1lOiBwYXRobmFtZSxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QXTogJ25hdmlnYXRpb24nLFxuICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06ICdhdXRvLm5hdmlnYXRpb24ubmV4dGpzLmFwcF9yb3V0ZXJfaW5zdHJ1bWVudGF0aW9uJyxcbiAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0VdOiBwYXJhbWV0ZXJpemVkUGF0aG5hbWUgPyAncm91dGUnIDogJ3VybCcsXG4gICAgICAgICAgJ25hdmlnYXRpb24udHlwZSc6IGByb3V0ZXIuJHtuYXZpZ2F0aW9uVHlwZX1gLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIFdJTkRPVy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsICgpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJpemVkUGF0aG5hbWUgPSBtYXliZVBhcmFtZXRlcml6ZVJvdXRlKFdJTkRPVy5sb2NhdGlvbi5wYXRobmFtZSk7XG4gICAgaWYgKGN1cnJlbnRSb3V0ZXJQYXRjaGluZ05hdmlnYXRpb25TcGFuUmVmLmN1cnJlbnQ/LmlzUmVjb3JkaW5nKCkpIHtcbiAgICAgIGN1cnJlbnRSb3V0ZXJQYXRjaGluZ05hdmlnYXRpb25TcGFuUmVmLmN1cnJlbnQudXBkYXRlTmFtZShwYXJhbWV0ZXJpemVkUGF0aG5hbWUgPz8gV0lORE9XLmxvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICAgIGN1cnJlbnRSb3V0ZXJQYXRjaGluZ05hdmlnYXRpb25TcGFuUmVmLmN1cnJlbnQuc2V0QXR0cmlidXRlKFxuICAgICAgICBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRSxcbiAgICAgICAgcGFyYW1ldGVyaXplZFBhdGhuYW1lID8gJ3JvdXRlJyA6ICd1cmwnLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudFJvdXRlclBhdGNoaW5nTmF2aWdhdGlvblNwYW5SZWYuY3VycmVudCA9IHN0YXJ0QnJvd3NlclRyYWNpbmdOYXZpZ2F0aW9uU3BhbihjbGllbnQsIHtcbiAgICAgICAgbmFtZTogcGFyYW1ldGVyaXplZFBhdGhuYW1lID8/IFdJTkRPVy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06ICdhdXRvLm5hdmlnYXRpb24ubmV4dGpzLmFwcF9yb3V0ZXJfaW5zdHJ1bWVudGF0aW9uJyxcbiAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0VdOiBwYXJhbWV0ZXJpemVkUGF0aG5hbWUgPyAncm91dGUnIDogJ3VybCcsXG4gICAgICAgICAgJ25hdmlnYXRpb24udHlwZSc6ICdicm93c2VyLnBvcHN0YXRlJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgbGV0IHJvdXRlclBhdGNoZWQgPSBmYWxzZTtcbiAgbGV0IHRyaWVzVG9GaW5kUm91dGVyID0gMDtcbiAgY29uc3QgTUFYX1RSSUVTX1RPX0ZJTkRfUk9VVEVSID0gNTAwO1xuICBjb25zdCBST1VURVJfQVZBSUxBQklMSVRZX0NIRUNLX0lOVEVSVkFMX01TID0gMjA7XG4gIGNvbnN0IGNoZWNrRm9yUm91dGVyQXZhaWxhYmlsaXR5SW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgdHJpZXNUb0ZpbmRSb3V0ZXIrKztcbiAgICBjb25zdCByb3V0ZXIgPSBHTE9CQUxfT0JKX1dJVEhfTkVYVF9ST1VURVI/Lm5leHQ/LnJvdXRlciA/PyBHTE9CQUxfT0JKX1dJVEhfTkVYVF9ST1VURVI/Lm5kPy5yb3V0ZXI7XG5cbiAgICBpZiAocm91dGVyUGF0Y2hlZCB8fCB0cmllc1RvRmluZFJvdXRlciA+IE1BWF9UUklFU19UT19GSU5EX1JPVVRFUikge1xuICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0ZvclJvdXRlckF2YWlsYWJpbGl0eUludGVydmFsKTtcbiAgICB9IGVsc2UgaWYgKHJvdXRlcikge1xuICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0ZvclJvdXRlckF2YWlsYWJpbGl0eUludGVydmFsKTtcbiAgICAgIHJvdXRlclBhdGNoZWQgPSB0cnVlO1xuXG4gICAgICBwYXRjaFJvdXRlcihjbGllbnQsIHJvdXRlciwgY3VycmVudFJvdXRlclBhdGNoaW5nTmF2aWdhdGlvblNwYW5SZWYpO1xuXG4gICAgICAvLyBJZiB0aGUgcm91dGVyIGF0IGFueSBwb2ludCBnZXRzIG92ZXJyaWRkZW4gLSBwYXRjaCBhZ2FpblxuICAgICAgKFsnbmQnLCAnbmV4dCddICkuZm9yRWFjaChnbG9iYWxWYWx1ZU5hbWUgPT4ge1xuICAgICAgICBjb25zdCBnbG9iYWxWYWx1ZSA9IEdMT0JBTF9PQkpfV0lUSF9ORVhUX1JPVVRFUltnbG9iYWxWYWx1ZU5hbWVdO1xuICAgICAgICBpZiAoZ2xvYmFsVmFsdWUpIHtcbiAgICAgICAgICBHTE9CQUxfT0JKX1dJVEhfTkVYVF9ST1VURVJbZ2xvYmFsVmFsdWVOYW1lXSA9IG5ldyBQcm94eShnbG9iYWxWYWx1ZSwge1xuICAgICAgICAgICAgc2V0KHRhcmdldCwgcCwgbmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgaWYgKHAgPT09ICdyb3V0ZXInICYmIHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcgJiYgbmV3VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXRjaFJvdXRlcihjbGllbnQsIG5ld1ZhbHVlLCBjdXJyZW50Um91dGVyUGF0Y2hpbmdOYXZpZ2F0aW9uU3BhblJlZik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHdlIGNhbm5vdCBwb3NzaWJseSB0eXBlIHRoaXNcbiAgICAgICAgICAgICAgdGFyZ2V0W3BdID0gbmV3VmFsdWU7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LCBST1VURVJfQVZBSUxBQklMSVRZX0NIRUNLX0lOVEVSVkFMX01TKTtcbn1cblxuZnVuY3Rpb24gdHJhbnNhY3Rpb25OYW1laWZ5Um91dGVyQXJndW1lbnQodGFyZ2V0KSB7XG4gIHRyeSB7XG4gICAgLy8gV2UgcHJvdmlkZSBhbiBhcmJpdHJhcnkgYmFzZSBiZWNhdXNlIHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgcGF0aG5hbWUgYW5kIGl0IG1ha2VzIFVSTCBwYXJzaW5nIG1vcmUgcmVzaWxpZW50LlxuICAgIHJldHVybiBuZXcgVVJMKHRhcmdldCwgJ2h0dHA6Ly9leGFtcGxlLmNvbS8nKS5wYXRobmFtZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICcvJztcbiAgfVxufVxuXG5jb25zdCBwYXRjaGVkUm91dGVycyA9IG5ldyBXZWFrU2V0KCk7XG5cbmZ1bmN0aW9uIHBhdGNoUm91dGVyKGNsaWVudCwgcm91dGVyLCBjdXJyZW50TmF2aWdhdGlvblNwYW5SZWYpIHtcbiAgaWYgKHBhdGNoZWRSb3V0ZXJzLmhhcyhyb3V0ZXIpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHBhdGNoZWRSb3V0ZXJzLmFkZChyb3V0ZXIpO1xuXG4gIChbJ2JhY2snLCAnZm9yd2FyZCcsICdwdXNoJywgJ3JlcGxhY2UnXSApLmZvckVhY2gocm91dGVyRnVuY3Rpb25OYW1lID0+IHtcbiAgICBpZiAocm91dGVyPy5bcm91dGVyRnVuY3Rpb25OYW1lXSkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBXZWlyZCB0eXBlIGVycm9yIHJlbGF0ZWQgdG8gbm90IGtub3dpbmcgaG93IHRvIGFzc29jaWF0ZSByZXR1cm4gdmFsdWVzIHdpdGggdGhlIGluZGl2aWR1YWwgZnVuY3Rpb25zIC0gd2UgY2FuIGp1c3QgaWdub3JlXG4gICAgICByb3V0ZXJbcm91dGVyRnVuY3Rpb25OYW1lXSA9IG5ldyBQcm94eShyb3V0ZXJbcm91dGVyRnVuY3Rpb25OYW1lXSwge1xuICAgICAgICBhcHBseSh0YXJnZXQsIHRoaXNBcmcsIGFyZ0FycmF5KSB7XG4gICAgICAgICAgaWYgKG5hdmlnYXRpb25Sb3V0aW5nTW9kZSAhPT0gJ3JvdXRlci1wYXRjaCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkodGhpc0FyZywgYXJnQXJyYXkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCB0cmFuc2FjdGlvbk5hbWUgPSBJTkNPTVBMRVRFX0FQUF9ST1VURVJfSU5TVFJVTUVOVEFUSU9OX1RSQU5TQUNUSU9OX05BTUU7XG4gICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25BdHRyaWJ1dGVzID0ge1xuICAgICAgICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1BdOiAnbmF2aWdhdGlvbicsXG4gICAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiAnYXV0by5uYXZpZ2F0aW9uLm5leHRqcy5hcHBfcm91dGVyX2luc3RydW1lbnRhdGlvbicsXG4gICAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0VdOiAndXJsJyxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHJvdXRlckZ1bmN0aW9uTmFtZSA9PT0gJ3B1c2gnKSB7XG4gICAgICAgICAgICB0cmFuc2FjdGlvbk5hbWUgPSB0cmFuc2FjdGlvbk5hbWVpZnlSb3V0ZXJBcmd1bWVudChhcmdBcnJheVswXSk7XG4gICAgICAgICAgICB0cmFuc2FjdGlvbkF0dHJpYnV0ZXNbJ25hdmlnYXRpb24udHlwZSddID0gJ3JvdXRlci5wdXNoJztcbiAgICAgICAgICB9IGVsc2UgaWYgKHJvdXRlckZ1bmN0aW9uTmFtZSA9PT0gJ3JlcGxhY2UnKSB7XG4gICAgICAgICAgICB0cmFuc2FjdGlvbk5hbWUgPSB0cmFuc2FjdGlvbk5hbWVpZnlSb3V0ZXJBcmd1bWVudChhcmdBcnJheVswXSk7XG4gICAgICAgICAgICB0cmFuc2FjdGlvbkF0dHJpYnV0ZXNbJ25hdmlnYXRpb24udHlwZSddID0gJ3JvdXRlci5yZXBsYWNlJztcbiAgICAgICAgICB9IGVsc2UgaWYgKHJvdXRlckZ1bmN0aW9uTmFtZSA9PT0gJ2JhY2snKSB7XG4gICAgICAgICAgICB0cmFuc2FjdGlvbkF0dHJpYnV0ZXNbJ25hdmlnYXRpb24udHlwZSddID0gJ3JvdXRlci5iYWNrJztcbiAgICAgICAgICB9IGVsc2UgaWYgKHJvdXRlckZ1bmN0aW9uTmFtZSA9PT0gJ2ZvcndhcmQnKSB7XG4gICAgICAgICAgICB0cmFuc2FjdGlvbkF0dHJpYnV0ZXNbJ25hdmlnYXRpb24udHlwZSddID0gJ3JvdXRlci5mb3J3YXJkJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBwYXJhbWV0ZXJpemVkUGF0aG5hbWUgPSBtYXliZVBhcmFtZXRlcml6ZVJvdXRlKHRyYW5zYWN0aW9uTmFtZSk7XG5cbiAgICAgICAgICBjdXJyZW50TmF2aWdhdGlvblNwYW5SZWYuY3VycmVudCA9IHN0YXJ0QnJvd3NlclRyYWNpbmdOYXZpZ2F0aW9uU3BhbihjbGllbnQsIHtcbiAgICAgICAgICAgIG5hbWU6IHBhcmFtZXRlcml6ZWRQYXRobmFtZSA/PyB0cmFuc2FjdGlvbk5hbWUsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgIC4uLnRyYW5zYWN0aW9uQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFXTogcGFyYW1ldGVyaXplZFBhdGhuYW1lID8gJ3JvdXRlJyA6ICd1cmwnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkodGhpc0FyZywgYXJnQXJyYXkpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxubGV0IHJvdXRlclRyYW5zaXRpb25IYW5kbGVyID0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgaGFuZGxlciBmb3IgTmV4dC5qcycgYG9uUm91dGVyVHJhbnNpdGlvblN0YXJ0YCBob29rIGluIGBpbnN0cnVtZW50YXRpb24tY2xpZW50LnRzYCB0byByZWNvcmQgbmF2aWdhdGlvbiBzcGFucyBpbiBTZW50cnkuXG4gKi9cbmZ1bmN0aW9uIGNhcHR1cmVSb3V0ZXJUcmFuc2l0aW9uU3RhcnQoaHJlZiwgbmF2aWdhdGlvblR5cGUpIHtcbiAgaWYgKHJvdXRlclRyYW5zaXRpb25IYW5kbGVyKSB7XG4gICAgcm91dGVyVHJhbnNpdGlvbkhhbmRsZXIoaHJlZiwgbmF2aWdhdGlvblR5cGUpO1xuICB9XG59XG5cbmV4cG9ydCB7IElOQ09NUExFVEVfQVBQX1JPVVRFUl9JTlNUUlVNRU5UQVRJT05fVFJBTlNBQ1RJT05fTkFNRSwgYXBwUm91dGVySW5zdHJ1bWVudE5hdmlnYXRpb24sIGFwcFJvdXRlckluc3RydW1lbnRQYWdlTG9hZCwgY2FwdHVyZVJvdXRlclRyYW5zaXRpb25TdGFydCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwUm91dGVyUm91dGluZ0luc3RydW1lbnRhdGlvbi5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/routing/appRouterRoutingInstrumentation.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/routing/nextRoutingInstrumentation.js":
/*!****************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/routing/nextRoutingInstrumentation.js ***!
  \****************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   nextRouterInstrumentNavigation: () => (/* binding */ nextRouterInstrumentNavigation),\n/* harmony export */   nextRouterInstrumentPageLoad: () => (/* binding */ nextRouterInstrumentPageLoad)\n/* harmony export */ });\n/* harmony import */ var _sentry_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/react */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/index.js\");\n/* harmony import */ var _appRouterRoutingInstrumentation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./appRouterRoutingInstrumentation.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/routing/appRouterRoutingInstrumentation.js\");\n/* harmony import */ var _pagesRouterRoutingInstrumentation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./pagesRouterRoutingInstrumentation.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/routing/pagesRouterRoutingInstrumentation.js\");\n\n\n\n\n/**\n * Instruments the Next.js Client Router for page loads.\n */\nfunction nextRouterInstrumentPageLoad(client) {\n  const isAppRouter = !_sentry_react__WEBPACK_IMPORTED_MODULE_0__.WINDOW.document.getElementById('__NEXT_DATA__');\n  if (isAppRouter) {\n    (0,_appRouterRoutingInstrumentation_js__WEBPACK_IMPORTED_MODULE_1__.appRouterInstrumentPageLoad)(client);\n  } else {\n    (0,_pagesRouterRoutingInstrumentation_js__WEBPACK_IMPORTED_MODULE_2__.pagesRouterInstrumentPageLoad)(client);\n  }\n}\n\n/**\n * Instruments the Next.js Client Router for navigation.\n */\nfunction nextRouterInstrumentNavigation(client) {\n  const isAppRouter = !_sentry_react__WEBPACK_IMPORTED_MODULE_0__.WINDOW.document.getElementById('__NEXT_DATA__');\n  if (isAppRouter) {\n    (0,_appRouterRoutingInstrumentation_js__WEBPACK_IMPORTED_MODULE_1__.appRouterInstrumentNavigation)(client);\n  } else {\n    (0,_pagesRouterRoutingInstrumentation_js__WEBPACK_IMPORTED_MODULE_2__.pagesRouterInstrumentNavigation)(client);\n  }\n}\n\n\n//# sourceMappingURL=nextRoutingInstrumentation.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jbGllbnQvcm91dGluZy9uZXh0Um91dGluZ0luc3RydW1lbnRhdGlvbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUF1QztBQUMyRTtBQUNNOztBQUV4SDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixpREFBTTtBQUM3QjtBQUNBLElBQUksZ0dBQTJCO0FBQy9CLElBQUk7QUFDSixJQUFJLG9HQUE2QjtBQUNqQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLGlEQUFNO0FBQzdCO0FBQ0EsSUFBSSxrR0FBNkI7QUFDakMsSUFBSTtBQUNKLElBQUksc0dBQStCO0FBQ25DO0FBQ0E7O0FBRXdFO0FBQ3hFIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrbmV4dGpzQDkuNDYuMF9Ab3BlbnRlbGVtZXRyeStjb250ZXh0LWFzeW5jLWhvb2tzQDEuMzAuMV9Ab3BlbnRlbGVtZXRyeSthcGlAMS45Ll9iNWJkZWNmMzMzZTc0Nzg0OWI0YjczYzQ1N2JkY2EwNi9ub2RlX21vZHVsZXMvQHNlbnRyeS9uZXh0anMvYnVpbGQvZXNtL2NsaWVudC9yb3V0aW5nL25leHRSb3V0aW5nSW5zdHJ1bWVudGF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdJTkRPVyB9IGZyb20gJ0BzZW50cnkvcmVhY3QnO1xuaW1wb3J0IHsgYXBwUm91dGVySW5zdHJ1bWVudE5hdmlnYXRpb24sIGFwcFJvdXRlckluc3RydW1lbnRQYWdlTG9hZCB9IGZyb20gJy4vYXBwUm91dGVyUm91dGluZ0luc3RydW1lbnRhdGlvbi5qcyc7XG5pbXBvcnQgeyBwYWdlc1JvdXRlckluc3RydW1lbnROYXZpZ2F0aW9uLCBwYWdlc1JvdXRlckluc3RydW1lbnRQYWdlTG9hZCB9IGZyb20gJy4vcGFnZXNSb3V0ZXJSb3V0aW5nSW5zdHJ1bWVudGF0aW9uLmpzJztcblxuLyoqXG4gKiBJbnN0cnVtZW50cyB0aGUgTmV4dC5qcyBDbGllbnQgUm91dGVyIGZvciBwYWdlIGxvYWRzLlxuICovXG5mdW5jdGlvbiBuZXh0Um91dGVySW5zdHJ1bWVudFBhZ2VMb2FkKGNsaWVudCkge1xuICBjb25zdCBpc0FwcFJvdXRlciA9ICFXSU5ET1cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ19fTkVYVF9EQVRBX18nKTtcbiAgaWYgKGlzQXBwUm91dGVyKSB7XG4gICAgYXBwUm91dGVySW5zdHJ1bWVudFBhZ2VMb2FkKGNsaWVudCk7XG4gIH0gZWxzZSB7XG4gICAgcGFnZXNSb3V0ZXJJbnN0cnVtZW50UGFnZUxvYWQoY2xpZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIEluc3RydW1lbnRzIHRoZSBOZXh0LmpzIENsaWVudCBSb3V0ZXIgZm9yIG5hdmlnYXRpb24uXG4gKi9cbmZ1bmN0aW9uIG5leHRSb3V0ZXJJbnN0cnVtZW50TmF2aWdhdGlvbihjbGllbnQpIHtcbiAgY29uc3QgaXNBcHBSb3V0ZXIgPSAhV0lORE9XLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdfX05FWFRfREFUQV9fJyk7XG4gIGlmIChpc0FwcFJvdXRlcikge1xuICAgIGFwcFJvdXRlckluc3RydW1lbnROYXZpZ2F0aW9uKGNsaWVudCk7XG4gIH0gZWxzZSB7XG4gICAgcGFnZXNSb3V0ZXJJbnN0cnVtZW50TmF2aWdhdGlvbihjbGllbnQpO1xuICB9XG59XG5cbmV4cG9ydCB7IG5leHRSb3V0ZXJJbnN0cnVtZW50TmF2aWdhdGlvbiwgbmV4dFJvdXRlckluc3RydW1lbnRQYWdlTG9hZCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bmV4dFJvdXRpbmdJbnN0cnVtZW50YXRpb24uanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/routing/nextRoutingInstrumentation.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/routing/pagesRouterRoutingInstrumentation.js":
/*!***********************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/routing/pagesRouterRoutingInstrumentation.js ***!
  \***********************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   pagesRouterInstrumentNavigation: () => (/* binding */ pagesRouterInstrumentNavigation),\n/* harmony export */   pagesRouterInstrumentPageLoad: () => (/* binding */ pagesRouterInstrumentPageLoad)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _sentry_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/react */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/index.js\");\n/* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/router */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/api/router.js\");\n/* harmony import */ var _common_debug_build_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../common/debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/debug-build.js\");\n\n\n\n\n\n// next/router v10 is CJS\n//\n// For ESM/CJS interoperability 'reasons', depending on how this file is loaded, Router might be on the default export\nconst Router = next_router__WEBPACK_IMPORTED_MODULE_2__[\"default\"].events\n  ? next_router__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n  : next_router__WEBPACK_IMPORTED_MODULE_2__[\"default\"][\"default\"];\n\nconst globalObject = _sentry_react__WEBPACK_IMPORTED_MODULE_1__.WINDOW\n\n;\n\n/**\n * Describes data located in the __NEXT_DATA__ script tag. This tag is present on every page of a Next.js app.\n */\n\n/**\n * Every Next.js page (static and dynamic ones) comes with a script tag with the id \"__NEXT_DATA__\". This script tag\n * contains a JSON object with data that was either generated at build time for static pages (`getStaticProps`), or at\n * runtime with data fetchers like `getServerSideProps.`.\n *\n * We can use this information to:\n * - Always get the parameterized route we're in when loading a page.\n * - Send trace information (trace-id, baggage) from the server to the client.\n *\n * This function extracts this information.\n */\nfunction extractNextDataTagInformation() {\n  let nextData;\n  // Let's be on the safe side and actually check first if there is really a __NEXT_DATA__ script tag on the page.\n  // Theoretically this should always be the case though.\n  const nextDataTag = globalObject.document.getElementById('__NEXT_DATA__');\n  if (nextDataTag?.innerHTML) {\n    try {\n      nextData = JSON.parse(nextDataTag.innerHTML);\n    } catch {\n      _common_debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn('Could not extract __NEXT_DATA__');\n    }\n  }\n\n  if (!nextData) {\n    return {};\n  }\n\n  const nextDataTagInfo = {};\n\n  const { page, query, props } = nextData;\n\n  // `nextData.page` always contains the parameterized route - except for when an error occurs in a data fetching\n  // function, then it is \"/_error\", but that isn't a problem since users know which route threw by looking at the\n  // parent transaction\n  // TODO: Actually this is a problem (even though it is not that big), because the DSC and the transaction payload will contain\n  // a different transaction name. Maybe we can fix this. Idea: Also send transaction name via pageProps when available.\n  nextDataTagInfo.route = page;\n  nextDataTagInfo.params = query;\n\n  if (props?.pageProps) {\n    nextDataTagInfo.sentryTrace = props.pageProps._sentryTraceData;\n    nextDataTagInfo.baggage = props.pageProps._sentryBaggage;\n  }\n\n  return nextDataTagInfo;\n}\n\n/**\n * Instruments the Next.js pages router for pageloads.\n * Only supported for client side routing. Works for Next >= 10.\n *\n * Leverages the SingletonRouter from the `next/router` to\n * generate pageload/navigation transactions and parameterize\n * transaction names.\n */\nfunction pagesRouterInstrumentPageLoad(client) {\n  const { route, params, sentryTrace, baggage } = extractNextDataTagInformation();\n  const parsedBaggage = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.parseBaggageHeader)(baggage);\n  let name = route || globalObject.location.pathname;\n\n  // /_error is the fallback page for all errors. If there is a transaction name for /_error, use that instead\n  if (parsedBaggage?.['sentry-transaction'] && name === '/_error') {\n    name = parsedBaggage['sentry-transaction'];\n    // Strip any HTTP method from the span name\n    name = name.replace(/^(GET|POST|PUT|DELETE|PATCH|HEAD|OPTIONS|TRACE|CONNECT)\\s+/i, '');\n  }\n\n  const origin = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.browserPerformanceTimeOrigin)();\n  (0,_sentry_react__WEBPACK_IMPORTED_MODULE_1__.startBrowserTracingPageLoadSpan)(\n    client,\n    {\n      name,\n      // pageload should always start at timeOrigin (and needs to be in s, not ms)\n      startTime: origin ? origin / 1000 : undefined,\n      attributes: {\n        [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload',\n        [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.nextjs.pages_router_instrumentation',\n        [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: route ? 'route' : 'url',\n        ...(params && client.getOptions().sendDefaultPii && { ...params }),\n      },\n    },\n    { sentryTrace, baggage },\n  );\n}\n\n/**\n * Instruments the Next.js pages router for navigation.\n * Only supported for client side routing. Works for Next >= 10.\n *\n * Leverages the SingletonRouter from the `next/router` to\n * generate pageload/navigation transactions and parameterize\n * transaction names.\n */\nfunction pagesRouterInstrumentNavigation(client) {\n  Router.events.on('routeChangeStart', (navigationTarget) => {\n    const strippedNavigationTarget = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.stripUrlQueryAndFragment)(navigationTarget);\n    const matchedRoute = getNextRouteFromPathname(strippedNavigationTarget);\n\n    let newLocation;\n    let spanSource;\n\n    if (matchedRoute) {\n      newLocation = matchedRoute;\n      spanSource = 'route';\n    } else {\n      newLocation = strippedNavigationTarget;\n      spanSource = 'url';\n    }\n\n    (0,_sentry_react__WEBPACK_IMPORTED_MODULE_1__.startBrowserTracingNavigationSpan)(client, {\n      name: newLocation,\n      attributes: {\n        [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation',\n        [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.nextjs.pages_router_instrumentation',\n        [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: spanSource,\n      },\n    });\n  });\n}\n\nfunction getNextRouteFromPathname(pathname) {\n  const pageRoutes = globalObject.__BUILD_MANIFEST?.sortedPages;\n\n  // Page route should in 99.999% of the cases be defined by now but just to be sure we make a check here\n  if (!pageRoutes) {\n    return;\n  }\n\n  return pageRoutes.find(route => {\n    const routeRegExp = convertNextRouteToRegExp(route);\n    return pathname.match(routeRegExp);\n  });\n}\n\n/**\n * Converts a Next.js style route to a regular expression that matches on pathnames (no query params or URL fragments).\n *\n * In general this involves replacing any instances of square brackets in a route with a wildcard:\n * e.g. \"/users/[id]/info\" becomes /\\/users\\/([^/]+?)\\/info/\n *\n * Some additional edgecases need to be considered:\n * - All routes have an optional slash at the end, meaning users can navigate to \"/users/[id]/info\" or\n *   \"/users/[id]/info/\" - both will be resolved to \"/users/[id]/info\".\n * - Non-optional \"catchall\"s at the end of a route must be considered when matching (e.g. \"/users/[...params]\").\n * - Optional \"catchall\"s at the end of a route must be considered when matching (e.g. \"/users/[[...params]]\").\n *\n * @param route A Next.js style route as it is found in `global.__BUILD_MANIFEST.sortedPages`\n */\nfunction convertNextRouteToRegExp(route) {\n  // We can assume a route is at least \"/\".\n  const routeParts = route.split('/');\n\n  let optionalCatchallWildcardRegex = '';\n  if (routeParts[routeParts.length - 1]?.match(/^\\[\\[\\.\\.\\..+\\]\\]$/)) {\n    // If last route part has pattern \"[[...xyz]]\" we pop the latest route part to get rid of the required trailing\n    // slash that would come before it if we didn't pop it.\n    routeParts.pop();\n    optionalCatchallWildcardRegex = '(?:/(.+?))?';\n  }\n\n  const rejoinedRouteParts = routeParts\n    .map(\n      routePart =>\n        routePart\n          .replace(/^\\[\\.\\.\\..+\\]$/, '(.+?)') // Replace catch all wildcard with regex wildcard\n          .replace(/^\\[.*\\]$/, '([^/]+?)'), // Replace route wildcards with lazy regex wildcards\n    )\n    .join('/');\n\n  // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor -- routeParts are from the build manifest, so no raw user input\n  return new RegExp(\n    `^${rejoinedRouteParts}${optionalCatchallWildcardRegex}(?:/)?$`, // optional slash at the end\n  );\n}\n\n\n//# sourceMappingURL=pagesRouterRoutingInstrumentation.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jbGllbnQvcm91dGluZy9wYWdlc1JvdXRlclJvdXRpbmdJbnN0cnVtZW50YXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQW1OO0FBQ3hHO0FBQ3BFO0FBQ21COztBQUUxRDtBQUNBO0FBQ0E7QUFDQSxlQUFlLDBEQUFtQjtBQUNsQyxJQUFJLG1EQUFZO0FBQ2hCLElBQUksOERBQXVCOztBQUUzQixxQkFBcUIsaURBQU07O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixNQUFNLCtEQUFXLElBQUksK0NBQUs7QUFDMUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsVUFBVSxxQkFBcUI7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxzQ0FBc0M7QUFDaEQsd0JBQXdCLGdFQUFrQjtBQUMxQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLDBFQUE0QjtBQUM3QyxFQUFFLDhFQUErQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLHNFQUE0QjtBQUNyQyxTQUFTLDBFQUFnQztBQUN6QyxTQUFTLDBFQUFnQztBQUN6Qyw4REFBOEQsV0FBVztBQUN6RSxPQUFPO0FBQ1AsS0FBSztBQUNMLE1BQU0sc0JBQXNCO0FBQzVCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsc0VBQXdCO0FBQzdEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLGdGQUFpQztBQUNyQztBQUNBO0FBQ0EsU0FBUyxzRUFBNEI7QUFDckMsU0FBUywwRUFBZ0M7QUFDekMsU0FBUywwRUFBZ0M7QUFDekMsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRLG1CQUFtQixFQUFFLDhCQUE4QjtBQUMzRDtBQUNBOztBQUUwRTtBQUMxRSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jbGllbnQvcm91dGluZy9wYWdlc1JvdXRlclJvdXRpbmdJbnN0cnVtZW50YXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RyaXBVcmxRdWVyeUFuZEZyYWdtZW50LCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRSwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU4sIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1AsIHBhcnNlQmFnZ2FnZUhlYWRlciwgYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiwgZGVidWcgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgc3RhcnRCcm93c2VyVHJhY2luZ05hdmlnYXRpb25TcGFuLCBXSU5ET1csIHN0YXJ0QnJvd3NlclRyYWNpbmdQYWdlTG9hZFNwYW4gfSBmcm9tICdAc2VudHJ5L3JlYWN0JztcbmltcG9ydCBSb3V0ZXJJbXBvcnQgZnJvbSAnbmV4dC9yb3V0ZXInO1xuaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuLi8uLi9jb21tb24vZGVidWctYnVpbGQuanMnO1xuXG4vLyBuZXh0L3JvdXRlciB2MTAgaXMgQ0pTXG4vL1xuLy8gRm9yIEVTTS9DSlMgaW50ZXJvcGVyYWJpbGl0eSAncmVhc29ucycsIGRlcGVuZGluZyBvbiBob3cgdGhpcyBmaWxlIGlzIGxvYWRlZCwgUm91dGVyIG1pZ2h0IGJlIG9uIHRoZSBkZWZhdWx0IGV4cG9ydFxuY29uc3QgUm91dGVyID0gUm91dGVySW1wb3J0LmV2ZW50c1xuICA/IFJvdXRlckltcG9ydFxuICA6IChSb3V0ZXJJbXBvcnQgKS5kZWZhdWx0O1xuXG5jb25zdCBnbG9iYWxPYmplY3QgPSBXSU5ET1dcblxuO1xuXG4vKipcbiAqIERlc2NyaWJlcyBkYXRhIGxvY2F0ZWQgaW4gdGhlIF9fTkVYVF9EQVRBX18gc2NyaXB0IHRhZy4gVGhpcyB0YWcgaXMgcHJlc2VudCBvbiBldmVyeSBwYWdlIG9mIGEgTmV4dC5qcyBhcHAuXG4gKi9cblxuLyoqXG4gKiBFdmVyeSBOZXh0LmpzIHBhZ2UgKHN0YXRpYyBhbmQgZHluYW1pYyBvbmVzKSBjb21lcyB3aXRoIGEgc2NyaXB0IHRhZyB3aXRoIHRoZSBpZCBcIl9fTkVYVF9EQVRBX19cIi4gVGhpcyBzY3JpcHQgdGFnXG4gKiBjb250YWlucyBhIEpTT04gb2JqZWN0IHdpdGggZGF0YSB0aGF0IHdhcyBlaXRoZXIgZ2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgZm9yIHN0YXRpYyBwYWdlcyAoYGdldFN0YXRpY1Byb3BzYCksIG9yIGF0XG4gKiBydW50aW1lIHdpdGggZGF0YSBmZXRjaGVycyBsaWtlIGBnZXRTZXJ2ZXJTaWRlUHJvcHMuYC5cbiAqXG4gKiBXZSBjYW4gdXNlIHRoaXMgaW5mb3JtYXRpb24gdG86XG4gKiAtIEFsd2F5cyBnZXQgdGhlIHBhcmFtZXRlcml6ZWQgcm91dGUgd2UncmUgaW4gd2hlbiBsb2FkaW5nIGEgcGFnZS5cbiAqIC0gU2VuZCB0cmFjZSBpbmZvcm1hdGlvbiAodHJhY2UtaWQsIGJhZ2dhZ2UpIGZyb20gdGhlIHNlcnZlciB0byB0aGUgY2xpZW50LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gZXh0cmFjdHMgdGhpcyBpbmZvcm1hdGlvbi5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE5leHREYXRhVGFnSW5mb3JtYXRpb24oKSB7XG4gIGxldCBuZXh0RGF0YTtcbiAgLy8gTGV0J3MgYmUgb24gdGhlIHNhZmUgc2lkZSBhbmQgYWN0dWFsbHkgY2hlY2sgZmlyc3QgaWYgdGhlcmUgaXMgcmVhbGx5IGEgX19ORVhUX0RBVEFfXyBzY3JpcHQgdGFnIG9uIHRoZSBwYWdlLlxuICAvLyBUaGVvcmV0aWNhbGx5IHRoaXMgc2hvdWxkIGFsd2F5cyBiZSB0aGUgY2FzZSB0aG91Z2guXG4gIGNvbnN0IG5leHREYXRhVGFnID0gZ2xvYmFsT2JqZWN0LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdfX05FWFRfREFUQV9fJyk7XG4gIGlmIChuZXh0RGF0YVRhZz8uaW5uZXJIVE1MKSB7XG4gICAgdHJ5IHtcbiAgICAgIG5leHREYXRhID0gSlNPTi5wYXJzZShuZXh0RGF0YVRhZy5pbm5lckhUTUwpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcud2FybignQ291bGQgbm90IGV4dHJhY3QgX19ORVhUX0RBVEFfXycpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghbmV4dERhdGEpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBuZXh0RGF0YVRhZ0luZm8gPSB7fTtcblxuICBjb25zdCB7IHBhZ2UsIHF1ZXJ5LCBwcm9wcyB9ID0gbmV4dERhdGE7XG5cbiAgLy8gYG5leHREYXRhLnBhZ2VgIGFsd2F5cyBjb250YWlucyB0aGUgcGFyYW1ldGVyaXplZCByb3V0ZSAtIGV4Y2VwdCBmb3Igd2hlbiBhbiBlcnJvciBvY2N1cnMgaW4gYSBkYXRhIGZldGNoaW5nXG4gIC8vIGZ1bmN0aW9uLCB0aGVuIGl0IGlzIFwiL19lcnJvclwiLCBidXQgdGhhdCBpc24ndCBhIHByb2JsZW0gc2luY2UgdXNlcnMga25vdyB3aGljaCByb3V0ZSB0aHJldyBieSBsb29raW5nIGF0IHRoZVxuICAvLyBwYXJlbnQgdHJhbnNhY3Rpb25cbiAgLy8gVE9ETzogQWN0dWFsbHkgdGhpcyBpcyBhIHByb2JsZW0gKGV2ZW4gdGhvdWdoIGl0IGlzIG5vdCB0aGF0IGJpZyksIGJlY2F1c2UgdGhlIERTQyBhbmQgdGhlIHRyYW5zYWN0aW9uIHBheWxvYWQgd2lsbCBjb250YWluXG4gIC8vIGEgZGlmZmVyZW50IHRyYW5zYWN0aW9uIG5hbWUuIE1heWJlIHdlIGNhbiBmaXggdGhpcy4gSWRlYTogQWxzbyBzZW5kIHRyYW5zYWN0aW9uIG5hbWUgdmlhIHBhZ2VQcm9wcyB3aGVuIGF2YWlsYWJsZS5cbiAgbmV4dERhdGFUYWdJbmZvLnJvdXRlID0gcGFnZTtcbiAgbmV4dERhdGFUYWdJbmZvLnBhcmFtcyA9IHF1ZXJ5O1xuXG4gIGlmIChwcm9wcz8ucGFnZVByb3BzKSB7XG4gICAgbmV4dERhdGFUYWdJbmZvLnNlbnRyeVRyYWNlID0gcHJvcHMucGFnZVByb3BzLl9zZW50cnlUcmFjZURhdGE7XG4gICAgbmV4dERhdGFUYWdJbmZvLmJhZ2dhZ2UgPSBwcm9wcy5wYWdlUHJvcHMuX3NlbnRyeUJhZ2dhZ2U7XG4gIH1cblxuICByZXR1cm4gbmV4dERhdGFUYWdJbmZvO1xufVxuXG4vKipcbiAqIEluc3RydW1lbnRzIHRoZSBOZXh0LmpzIHBhZ2VzIHJvdXRlciBmb3IgcGFnZWxvYWRzLlxuICogT25seSBzdXBwb3J0ZWQgZm9yIGNsaWVudCBzaWRlIHJvdXRpbmcuIFdvcmtzIGZvciBOZXh0ID49IDEwLlxuICpcbiAqIExldmVyYWdlcyB0aGUgU2luZ2xldG9uUm91dGVyIGZyb20gdGhlIGBuZXh0L3JvdXRlcmAgdG9cbiAqIGdlbmVyYXRlIHBhZ2Vsb2FkL25hdmlnYXRpb24gdHJhbnNhY3Rpb25zIGFuZCBwYXJhbWV0ZXJpemVcbiAqIHRyYW5zYWN0aW9uIG5hbWVzLlxuICovXG5mdW5jdGlvbiBwYWdlc1JvdXRlckluc3RydW1lbnRQYWdlTG9hZChjbGllbnQpIHtcbiAgY29uc3QgeyByb3V0ZSwgcGFyYW1zLCBzZW50cnlUcmFjZSwgYmFnZ2FnZSB9ID0gZXh0cmFjdE5leHREYXRhVGFnSW5mb3JtYXRpb24oKTtcbiAgY29uc3QgcGFyc2VkQmFnZ2FnZSA9IHBhcnNlQmFnZ2FnZUhlYWRlcihiYWdnYWdlKTtcbiAgbGV0IG5hbWUgPSByb3V0ZSB8fCBnbG9iYWxPYmplY3QubG9jYXRpb24ucGF0aG5hbWU7XG5cbiAgLy8gL19lcnJvciBpcyB0aGUgZmFsbGJhY2sgcGFnZSBmb3IgYWxsIGVycm9ycy4gSWYgdGhlcmUgaXMgYSB0cmFuc2FjdGlvbiBuYW1lIGZvciAvX2Vycm9yLCB1c2UgdGhhdCBpbnN0ZWFkXG4gIGlmIChwYXJzZWRCYWdnYWdlPy5bJ3NlbnRyeS10cmFuc2FjdGlvbiddICYmIG5hbWUgPT09ICcvX2Vycm9yJykge1xuICAgIG5hbWUgPSBwYXJzZWRCYWdnYWdlWydzZW50cnktdHJhbnNhY3Rpb24nXTtcbiAgICAvLyBTdHJpcCBhbnkgSFRUUCBtZXRob2QgZnJvbSB0aGUgc3BhbiBuYW1lXG4gICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvXihHRVR8UE9TVHxQVVR8REVMRVRFfFBBVENIfEhFQUR8T1BUSU9OU3xUUkFDRXxDT05ORUNUKVxccysvaSwgJycpO1xuICB9XG5cbiAgY29uc3Qgb3JpZ2luID0gYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbigpO1xuICBzdGFydEJyb3dzZXJUcmFjaW5nUGFnZUxvYWRTcGFuKFxuICAgIGNsaWVudCxcbiAgICB7XG4gICAgICBuYW1lLFxuICAgICAgLy8gcGFnZWxvYWQgc2hvdWxkIGFsd2F5cyBzdGFydCBhdCB0aW1lT3JpZ2luIChhbmQgbmVlZHMgdG8gYmUgaW4gcywgbm90IG1zKVxuICAgICAgc3RhcnRUaW1lOiBvcmlnaW4gPyBvcmlnaW4gLyAxMDAwIDogdW5kZWZpbmVkLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUF06ICdwYWdlbG9hZCcsXG4gICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06ICdhdXRvLnBhZ2Vsb2FkLm5leHRqcy5wYWdlc19yb3V0ZXJfaW5zdHJ1bWVudGF0aW9uJyxcbiAgICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFXTogcm91dGUgPyAncm91dGUnIDogJ3VybCcsXG4gICAgICAgIC4uLihwYXJhbXMgJiYgY2xpZW50LmdldE9wdGlvbnMoKS5zZW5kRGVmYXVsdFBpaSAmJiB7IC4uLnBhcmFtcyB9KSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7IHNlbnRyeVRyYWNlLCBiYWdnYWdlIH0sXG4gICk7XG59XG5cbi8qKlxuICogSW5zdHJ1bWVudHMgdGhlIE5leHQuanMgcGFnZXMgcm91dGVyIGZvciBuYXZpZ2F0aW9uLlxuICogT25seSBzdXBwb3J0ZWQgZm9yIGNsaWVudCBzaWRlIHJvdXRpbmcuIFdvcmtzIGZvciBOZXh0ID49IDEwLlxuICpcbiAqIExldmVyYWdlcyB0aGUgU2luZ2xldG9uUm91dGVyIGZyb20gdGhlIGBuZXh0L3JvdXRlcmAgdG9cbiAqIGdlbmVyYXRlIHBhZ2Vsb2FkL25hdmlnYXRpb24gdHJhbnNhY3Rpb25zIGFuZCBwYXJhbWV0ZXJpemVcbiAqIHRyYW5zYWN0aW9uIG5hbWVzLlxuICovXG5mdW5jdGlvbiBwYWdlc1JvdXRlckluc3RydW1lbnROYXZpZ2F0aW9uKGNsaWVudCkge1xuICBSb3V0ZXIuZXZlbnRzLm9uKCdyb3V0ZUNoYW5nZVN0YXJ0JywgKG5hdmlnYXRpb25UYXJnZXQpID0+IHtcbiAgICBjb25zdCBzdHJpcHBlZE5hdmlnYXRpb25UYXJnZXQgPSBzdHJpcFVybFF1ZXJ5QW5kRnJhZ21lbnQobmF2aWdhdGlvblRhcmdldCk7XG4gICAgY29uc3QgbWF0Y2hlZFJvdXRlID0gZ2V0TmV4dFJvdXRlRnJvbVBhdGhuYW1lKHN0cmlwcGVkTmF2aWdhdGlvblRhcmdldCk7XG5cbiAgICBsZXQgbmV3TG9jYXRpb247XG4gICAgbGV0IHNwYW5Tb3VyY2U7XG5cbiAgICBpZiAobWF0Y2hlZFJvdXRlKSB7XG4gICAgICBuZXdMb2NhdGlvbiA9IG1hdGNoZWRSb3V0ZTtcbiAgICAgIHNwYW5Tb3VyY2UgPSAncm91dGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdMb2NhdGlvbiA9IHN0cmlwcGVkTmF2aWdhdGlvblRhcmdldDtcbiAgICAgIHNwYW5Tb3VyY2UgPSAndXJsJztcbiAgICB9XG5cbiAgICBzdGFydEJyb3dzZXJUcmFjaW5nTmF2aWdhdGlvblNwYW4oY2xpZW50LCB7XG4gICAgICBuYW1lOiBuZXdMb2NhdGlvbixcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1BdOiAnbmF2aWdhdGlvbicsXG4gICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06ICdhdXRvLm5hdmlnYXRpb24ubmV4dGpzLnBhZ2VzX3JvdXRlcl9pbnN0cnVtZW50YXRpb24nLFxuICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0VdOiBzcGFuU291cmNlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRSb3V0ZUZyb21QYXRobmFtZShwYXRobmFtZSkge1xuICBjb25zdCBwYWdlUm91dGVzID0gZ2xvYmFsT2JqZWN0Ll9fQlVJTERfTUFOSUZFU1Q/LnNvcnRlZFBhZ2VzO1xuXG4gIC8vIFBhZ2Ugcm91dGUgc2hvdWxkIGluIDk5Ljk5OSUgb2YgdGhlIGNhc2VzIGJlIGRlZmluZWQgYnkgbm93IGJ1dCBqdXN0IHRvIGJlIHN1cmUgd2UgbWFrZSBhIGNoZWNrIGhlcmVcbiAgaWYgKCFwYWdlUm91dGVzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHBhZ2VSb3V0ZXMuZmluZChyb3V0ZSA9PiB7XG4gICAgY29uc3Qgcm91dGVSZWdFeHAgPSBjb252ZXJ0TmV4dFJvdXRlVG9SZWdFeHAocm91dGUpO1xuICAgIHJldHVybiBwYXRobmFtZS5tYXRjaChyb3V0ZVJlZ0V4cCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgTmV4dC5qcyBzdHlsZSByb3V0ZSB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgb24gcGF0aG5hbWVzIChubyBxdWVyeSBwYXJhbXMgb3IgVVJMIGZyYWdtZW50cykuXG4gKlxuICogSW4gZ2VuZXJhbCB0aGlzIGludm9sdmVzIHJlcGxhY2luZyBhbnkgaW5zdGFuY2VzIG9mIHNxdWFyZSBicmFja2V0cyBpbiBhIHJvdXRlIHdpdGggYSB3aWxkY2FyZDpcbiAqIGUuZy4gXCIvdXNlcnMvW2lkXS9pbmZvXCIgYmVjb21lcyAvXFwvdXNlcnNcXC8oW14vXSs/KVxcL2luZm8vXG4gKlxuICogU29tZSBhZGRpdGlvbmFsIGVkZ2VjYXNlcyBuZWVkIHRvIGJlIGNvbnNpZGVyZWQ6XG4gKiAtIEFsbCByb3V0ZXMgaGF2ZSBhbiBvcHRpb25hbCBzbGFzaCBhdCB0aGUgZW5kLCBtZWFuaW5nIHVzZXJzIGNhbiBuYXZpZ2F0ZSB0byBcIi91c2Vycy9baWRdL2luZm9cIiBvclxuICogICBcIi91c2Vycy9baWRdL2luZm8vXCIgLSBib3RoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gXCIvdXNlcnMvW2lkXS9pbmZvXCIuXG4gKiAtIE5vbi1vcHRpb25hbCBcImNhdGNoYWxsXCJzIGF0IHRoZSBlbmQgb2YgYSByb3V0ZSBtdXN0IGJlIGNvbnNpZGVyZWQgd2hlbiBtYXRjaGluZyAoZS5nLiBcIi91c2Vycy9bLi4ucGFyYW1zXVwiKS5cbiAqIC0gT3B0aW9uYWwgXCJjYXRjaGFsbFwicyBhdCB0aGUgZW5kIG9mIGEgcm91dGUgbXVzdCBiZSBjb25zaWRlcmVkIHdoZW4gbWF0Y2hpbmcgKGUuZy4gXCIvdXNlcnMvW1suLi5wYXJhbXNdXVwiKS5cbiAqXG4gKiBAcGFyYW0gcm91dGUgQSBOZXh0LmpzIHN0eWxlIHJvdXRlIGFzIGl0IGlzIGZvdW5kIGluIGBnbG9iYWwuX19CVUlMRF9NQU5JRkVTVC5zb3J0ZWRQYWdlc2BcbiAqL1xuZnVuY3Rpb24gY29udmVydE5leHRSb3V0ZVRvUmVnRXhwKHJvdXRlKSB7XG4gIC8vIFdlIGNhbiBhc3N1bWUgYSByb3V0ZSBpcyBhdCBsZWFzdCBcIi9cIi5cbiAgY29uc3Qgcm91dGVQYXJ0cyA9IHJvdXRlLnNwbGl0KCcvJyk7XG5cbiAgbGV0IG9wdGlvbmFsQ2F0Y2hhbGxXaWxkY2FyZFJlZ2V4ID0gJyc7XG4gIGlmIChyb3V0ZVBhcnRzW3JvdXRlUGFydHMubGVuZ3RoIC0gMV0/Lm1hdGNoKC9eXFxbXFxbXFwuXFwuXFwuLitcXF1cXF0kLykpIHtcbiAgICAvLyBJZiBsYXN0IHJvdXRlIHBhcnQgaGFzIHBhdHRlcm4gXCJbWy4uLnh5el1dXCIgd2UgcG9wIHRoZSBsYXRlc3Qgcm91dGUgcGFydCB0byBnZXQgcmlkIG9mIHRoZSByZXF1aXJlZCB0cmFpbGluZ1xuICAgIC8vIHNsYXNoIHRoYXQgd291bGQgY29tZSBiZWZvcmUgaXQgaWYgd2UgZGlkbid0IHBvcCBpdC5cbiAgICByb3V0ZVBhcnRzLnBvcCgpO1xuICAgIG9wdGlvbmFsQ2F0Y2hhbGxXaWxkY2FyZFJlZ2V4ID0gJyg/Oi8oLis/KSk/JztcbiAgfVxuXG4gIGNvbnN0IHJlam9pbmVkUm91dGVQYXJ0cyA9IHJvdXRlUGFydHNcbiAgICAubWFwKFxuICAgICAgcm91dGVQYXJ0ID0+XG4gICAgICAgIHJvdXRlUGFydFxuICAgICAgICAgIC5yZXBsYWNlKC9eXFxbXFwuXFwuXFwuLitcXF0kLywgJyguKz8pJykgLy8gUmVwbGFjZSBjYXRjaCBhbGwgd2lsZGNhcmQgd2l0aCByZWdleCB3aWxkY2FyZFxuICAgICAgICAgIC5yZXBsYWNlKC9eXFxbLipcXF0kLywgJyhbXi9dKz8pJyksIC8vIFJlcGxhY2Ugcm91dGUgd2lsZGNhcmRzIHdpdGggbGF6eSByZWdleCB3aWxkY2FyZHNcbiAgICApXG4gICAgLmpvaW4oJy8nKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHNlbnRyeS1pbnRlcm5hbC9zZGsvbm8tcmVnZXhwLWNvbnN0cnVjdG9yIC0tIHJvdXRlUGFydHMgYXJlIGZyb20gdGhlIGJ1aWxkIG1hbmlmZXN0LCBzbyBubyByYXcgdXNlciBpbnB1dFxuICByZXR1cm4gbmV3IFJlZ0V4cChcbiAgICBgXiR7cmVqb2luZWRSb3V0ZVBhcnRzfSR7b3B0aW9uYWxDYXRjaGFsbFdpbGRjYXJkUmVnZXh9KD86Lyk/JGAsIC8vIG9wdGlvbmFsIHNsYXNoIGF0IHRoZSBlbmRcbiAgKTtcbn1cblxuZXhwb3J0IHsgcGFnZXNSb3V0ZXJJbnN0cnVtZW50TmF2aWdhdGlvbiwgcGFnZXNSb3V0ZXJJbnN0cnVtZW50UGFnZUxvYWQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhZ2VzUm91dGVyUm91dGluZ0luc3RydW1lbnRhdGlvbi5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/routing/pagesRouterRoutingInstrumentation.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/routing/parameterization.js":
/*!******************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/routing/parameterization.js ***!
  \******************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   maybeParameterizeRoute: () => (/* binding */ maybeParameterizeRoute)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _common_debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../common/debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/debug-build.js\");\n\n\n\nconst globalWithInjectedManifest = _sentry_core__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ\n\n;\n\n// Some performance caches\nlet cachedManifest = null;\nlet cachedManifestString = undefined;\nconst compiledRegexCache = new Map();\nconst routeResultCache = new Map();\n\n/**\n * Calculate the specificity score for a route path.\n * Lower scores indicate more specific routes.\n */\nfunction getRouteSpecificity(routePath) {\n  const segments = routePath.split('/').filter(Boolean);\n  let score = 0;\n\n  for (const segment of segments) {\n    if (segment.startsWith(':')) {\n      const paramName = segment.substring(1);\n      if (paramName.endsWith('*?')) {\n        // Optional catch-all: [[...param]]\n        score += 1000;\n      } else if (paramName.endsWith('*')) {\n        // Required catch-all: [...param]\n        score += 100;\n      } else {\n        // Regular dynamic segment: [param]\n        score += 10;\n      }\n    }\n    // Static segments add 0 to score as they are most specific\n  }\n\n  return score;\n}\n\n/**\n * Get compiled regex from cache or create and cache it.\n */\nfunction getCompiledRegex(regexString) {\n  if (compiledRegexCache.has(regexString)) {\n    return compiledRegexCache.get(regexString) ?? null;\n  }\n\n  try {\n    // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor -- regex patterns are from build-time route manifest, not user input\n    const regex = new RegExp(regexString);\n    compiledRegexCache.set(regexString, regex);\n    return regex;\n  } catch (error) {\n    _common_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn('Could not compile regex', { regexString, error });\n    // Cache the failure to avoid repeated attempts by storing undefined\n    return null;\n  }\n}\n\n/**\n * Get and cache the route manifest from the global object.\n * @returns The parsed route manifest or null if not available/invalid.\n */\nfunction getManifest() {\n  if (\n    !globalWithInjectedManifest?._sentryRouteManifest ||\n    typeof globalWithInjectedManifest._sentryRouteManifest !== 'string'\n  ) {\n    return null;\n  }\n\n  const currentManifestString = globalWithInjectedManifest._sentryRouteManifest;\n\n  // Return cached manifest if the string hasn't changed\n  if (cachedManifest && cachedManifestString === currentManifestString) {\n    return cachedManifest;\n  }\n\n  // Clear caches when manifest changes\n  compiledRegexCache.clear();\n  routeResultCache.clear();\n\n  let manifest = {\n    staticRoutes: [],\n    dynamicRoutes: [],\n  };\n\n  // Shallow check if the manifest is actually what we expect it to be\n  try {\n    manifest = JSON.parse(currentManifestString);\n    if (!Array.isArray(manifest.staticRoutes) || !Array.isArray(manifest.dynamicRoutes)) {\n      return null;\n    }\n    // Cache the successfully parsed manifest\n    cachedManifest = manifest;\n    cachedManifestString = currentManifestString;\n    return manifest;\n  } catch {\n    // Something went wrong while parsing the manifest, so we'll fallback to no parameterization\n    _common_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn('Could not extract route manifest');\n    return null;\n  }\n}\n\n/**\n * Find matching routes from static and dynamic route collections.\n * @param route - The route to match against.\n * @param staticRoutes - Array of static route objects.\n * @param dynamicRoutes - Array of dynamic route objects.\n * @returns Array of matching route paths.\n */\nfunction findMatchingRoutes(\n  route,\n  staticRoutes,\n  dynamicRoutes,\n) {\n  const matches = [];\n\n  // Static path: no parameterization needed, return empty array\n  if (staticRoutes.some(r => r.path === route)) {\n    return matches;\n  }\n\n  // Dynamic path: find the route pattern that matches the concrete route\n  for (const dynamicRoute of dynamicRoutes) {\n    if (dynamicRoute.regex) {\n      const regex = getCompiledRegex(dynamicRoute.regex);\n      if (regex?.test(route)) {\n        matches.push(dynamicRoute.path);\n      }\n    }\n  }\n\n  return matches;\n}\n\n/**\n * Parameterize a route using the route manifest.\n *\n * @param route - The route to parameterize.\n * @returns The parameterized route or undefined if no parameterization is needed.\n */\nconst maybeParameterizeRoute = (route) => {\n  const manifest = getManifest();\n  if (!manifest) {\n    return undefined;\n  }\n\n  // Check route result cache after manifest validation\n  if (routeResultCache.has(route)) {\n    return routeResultCache.get(route);\n  }\n\n  const { staticRoutes, dynamicRoutes } = manifest;\n  if (!Array.isArray(staticRoutes) || !Array.isArray(dynamicRoutes)) {\n    return undefined;\n  }\n\n  const matches = findMatchingRoutes(route, staticRoutes, dynamicRoutes);\n\n  // We can always do the `sort()` call, it will short-circuit when it has one array item\n  const result = matches.sort((a, b) => getRouteSpecificity(a) - getRouteSpecificity(b))[0];\n\n  routeResultCache.set(route, result);\n\n  return result;\n};\n\n\n//# sourceMappingURL=parameterization.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jbGllbnQvcm91dGluZy9wYXJhbWV0ZXJpemF0aW9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFpRDtBQUNTOztBQUUxRCxtQ0FBbUMsb0RBQVU7O0FBRTdDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixJQUFJLCtEQUFXLElBQUksK0NBQUssbUNBQW1DLG9CQUFvQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUksK0RBQVcsSUFBSSwrQ0FBSztBQUN4QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLDhCQUE4QjtBQUN4QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVrQztBQUNsQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jbGllbnQvcm91dGluZy9wYXJhbWV0ZXJpemF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdMT0JBTF9PQkosIGRlYnVnIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IERFQlVHX0JVSUxEIH0gZnJvbSAnLi4vLi4vY29tbW9uL2RlYnVnLWJ1aWxkLmpzJztcblxuY29uc3QgZ2xvYmFsV2l0aEluamVjdGVkTWFuaWZlc3QgPSBHTE9CQUxfT0JKXG5cbjtcblxuLy8gU29tZSBwZXJmb3JtYW5jZSBjYWNoZXNcbmxldCBjYWNoZWRNYW5pZmVzdCA9IG51bGw7XG5sZXQgY2FjaGVkTWFuaWZlc3RTdHJpbmcgPSB1bmRlZmluZWQ7XG5jb25zdCBjb21waWxlZFJlZ2V4Q2FjaGUgPSBuZXcgTWFwKCk7XG5jb25zdCByb3V0ZVJlc3VsdENhY2hlID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgc3BlY2lmaWNpdHkgc2NvcmUgZm9yIGEgcm91dGUgcGF0aC5cbiAqIExvd2VyIHNjb3JlcyBpbmRpY2F0ZSBtb3JlIHNwZWNpZmljIHJvdXRlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0Um91dGVTcGVjaWZpY2l0eShyb3V0ZVBhdGgpIHtcbiAgY29uc3Qgc2VnbWVudHMgPSByb3V0ZVBhdGguc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG4gIGxldCBzY29yZSA9IDA7XG5cbiAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7XG4gICAgaWYgKHNlZ21lbnQuc3RhcnRzV2l0aCgnOicpKSB7XG4gICAgICBjb25zdCBwYXJhbU5hbWUgPSBzZWdtZW50LnN1YnN0cmluZygxKTtcbiAgICAgIGlmIChwYXJhbU5hbWUuZW5kc1dpdGgoJyo/JykpIHtcbiAgICAgICAgLy8gT3B0aW9uYWwgY2F0Y2gtYWxsOiBbWy4uLnBhcmFtXV1cbiAgICAgICAgc2NvcmUgKz0gMTAwMDtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1OYW1lLmVuZHNXaXRoKCcqJykpIHtcbiAgICAgICAgLy8gUmVxdWlyZWQgY2F0Y2gtYWxsOiBbLi4ucGFyYW1dXG4gICAgICAgIHNjb3JlICs9IDEwMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlZ3VsYXIgZHluYW1pYyBzZWdtZW50OiBbcGFyYW1dXG4gICAgICAgIHNjb3JlICs9IDEwO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBTdGF0aWMgc2VnbWVudHMgYWRkIDAgdG8gc2NvcmUgYXMgdGhleSBhcmUgbW9zdCBzcGVjaWZpY1xuICB9XG5cbiAgcmV0dXJuIHNjb3JlO1xufVxuXG4vKipcbiAqIEdldCBjb21waWxlZCByZWdleCBmcm9tIGNhY2hlIG9yIGNyZWF0ZSBhbmQgY2FjaGUgaXQuXG4gKi9cbmZ1bmN0aW9uIGdldENvbXBpbGVkUmVnZXgocmVnZXhTdHJpbmcpIHtcbiAgaWYgKGNvbXBpbGVkUmVnZXhDYWNoZS5oYXMocmVnZXhTdHJpbmcpKSB7XG4gICAgcmV0dXJuIGNvbXBpbGVkUmVnZXhDYWNoZS5nZXQocmVnZXhTdHJpbmcpID8/IG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2VudHJ5LWludGVybmFsL3Nkay9uby1yZWdleHAtY29uc3RydWN0b3IgLS0gcmVnZXggcGF0dGVybnMgYXJlIGZyb20gYnVpbGQtdGltZSByb3V0ZSBtYW5pZmVzdCwgbm90IHVzZXIgaW5wdXRcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAocmVnZXhTdHJpbmcpO1xuICAgIGNvbXBpbGVkUmVnZXhDYWNoZS5zZXQocmVnZXhTdHJpbmcsIHJlZ2V4KTtcbiAgICByZXR1cm4gcmVnZXg7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcud2FybignQ291bGQgbm90IGNvbXBpbGUgcmVnZXgnLCB7IHJlZ2V4U3RyaW5nLCBlcnJvciB9KTtcbiAgICAvLyBDYWNoZSB0aGUgZmFpbHVyZSB0byBhdm9pZCByZXBlYXRlZCBhdHRlbXB0cyBieSBzdG9yaW5nIHVuZGVmaW5lZFxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogR2V0IGFuZCBjYWNoZSB0aGUgcm91dGUgbWFuaWZlc3QgZnJvbSB0aGUgZ2xvYmFsIG9iamVjdC5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgcm91dGUgbWFuaWZlc3Qgb3IgbnVsbCBpZiBub3QgYXZhaWxhYmxlL2ludmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGdldE1hbmlmZXN0KCkge1xuICBpZiAoXG4gICAgIWdsb2JhbFdpdGhJbmplY3RlZE1hbmlmZXN0Py5fc2VudHJ5Um91dGVNYW5pZmVzdCB8fFxuICAgIHR5cGVvZiBnbG9iYWxXaXRoSW5qZWN0ZWRNYW5pZmVzdC5fc2VudHJ5Um91dGVNYW5pZmVzdCAhPT0gJ3N0cmluZydcbiAgKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjdXJyZW50TWFuaWZlc3RTdHJpbmcgPSBnbG9iYWxXaXRoSW5qZWN0ZWRNYW5pZmVzdC5fc2VudHJ5Um91dGVNYW5pZmVzdDtcblxuICAvLyBSZXR1cm4gY2FjaGVkIG1hbmlmZXN0IGlmIHRoZSBzdHJpbmcgaGFzbid0IGNoYW5nZWRcbiAgaWYgKGNhY2hlZE1hbmlmZXN0ICYmIGNhY2hlZE1hbmlmZXN0U3RyaW5nID09PSBjdXJyZW50TWFuaWZlc3RTdHJpbmcpIHtcbiAgICByZXR1cm4gY2FjaGVkTWFuaWZlc3Q7XG4gIH1cblxuICAvLyBDbGVhciBjYWNoZXMgd2hlbiBtYW5pZmVzdCBjaGFuZ2VzXG4gIGNvbXBpbGVkUmVnZXhDYWNoZS5jbGVhcigpO1xuICByb3V0ZVJlc3VsdENhY2hlLmNsZWFyKCk7XG5cbiAgbGV0IG1hbmlmZXN0ID0ge1xuICAgIHN0YXRpY1JvdXRlczogW10sXG4gICAgZHluYW1pY1JvdXRlczogW10sXG4gIH07XG5cbiAgLy8gU2hhbGxvdyBjaGVjayBpZiB0aGUgbWFuaWZlc3QgaXMgYWN0dWFsbHkgd2hhdCB3ZSBleHBlY3QgaXQgdG8gYmVcbiAgdHJ5IHtcbiAgICBtYW5pZmVzdCA9IEpTT04ucGFyc2UoY3VycmVudE1hbmlmZXN0U3RyaW5nKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobWFuaWZlc3Quc3RhdGljUm91dGVzKSB8fCAhQXJyYXkuaXNBcnJheShtYW5pZmVzdC5keW5hbWljUm91dGVzKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8vIENhY2hlIHRoZSBzdWNjZXNzZnVsbHkgcGFyc2VkIG1hbmlmZXN0XG4gICAgY2FjaGVkTWFuaWZlc3QgPSBtYW5pZmVzdDtcbiAgICBjYWNoZWRNYW5pZmVzdFN0cmluZyA9IGN1cnJlbnRNYW5pZmVzdFN0cmluZztcbiAgICByZXR1cm4gbWFuaWZlc3Q7XG4gIH0gY2F0Y2gge1xuICAgIC8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHdoaWxlIHBhcnNpbmcgdGhlIG1hbmlmZXN0LCBzbyB3ZSdsbCBmYWxsYmFjayB0byBubyBwYXJhbWV0ZXJpemF0aW9uXG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcud2FybignQ291bGQgbm90IGV4dHJhY3Qgcm91dGUgbWFuaWZlc3QnKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIEZpbmQgbWF0Y2hpbmcgcm91dGVzIGZyb20gc3RhdGljIGFuZCBkeW5hbWljIHJvdXRlIGNvbGxlY3Rpb25zLlxuICogQHBhcmFtIHJvdXRlIC0gVGhlIHJvdXRlIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0gc3RhdGljUm91dGVzIC0gQXJyYXkgb2Ygc3RhdGljIHJvdXRlIG9iamVjdHMuXG4gKiBAcGFyYW0gZHluYW1pY1JvdXRlcyAtIEFycmF5IG9mIGR5bmFtaWMgcm91dGUgb2JqZWN0cy5cbiAqIEByZXR1cm5zIEFycmF5IG9mIG1hdGNoaW5nIHJvdXRlIHBhdGhzLlxuICovXG5mdW5jdGlvbiBmaW5kTWF0Y2hpbmdSb3V0ZXMoXG4gIHJvdXRlLFxuICBzdGF0aWNSb3V0ZXMsXG4gIGR5bmFtaWNSb3V0ZXMsXG4pIHtcbiAgY29uc3QgbWF0Y2hlcyA9IFtdO1xuXG4gIC8vIFN0YXRpYyBwYXRoOiBubyBwYXJhbWV0ZXJpemF0aW9uIG5lZWRlZCwgcmV0dXJuIGVtcHR5IGFycmF5XG4gIGlmIChzdGF0aWNSb3V0ZXMuc29tZShyID0+IHIucGF0aCA9PT0gcm91dGUpKSB7XG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cblxuICAvLyBEeW5hbWljIHBhdGg6IGZpbmQgdGhlIHJvdXRlIHBhdHRlcm4gdGhhdCBtYXRjaGVzIHRoZSBjb25jcmV0ZSByb3V0ZVxuICBmb3IgKGNvbnN0IGR5bmFtaWNSb3V0ZSBvZiBkeW5hbWljUm91dGVzKSB7XG4gICAgaWYgKGR5bmFtaWNSb3V0ZS5yZWdleCkge1xuICAgICAgY29uc3QgcmVnZXggPSBnZXRDb21waWxlZFJlZ2V4KGR5bmFtaWNSb3V0ZS5yZWdleCk7XG4gICAgICBpZiAocmVnZXg/LnRlc3Qocm91dGUpKSB7XG4gICAgICAgIG1hdGNoZXMucHVzaChkeW5hbWljUm91dGUucGF0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZXM7XG59XG5cbi8qKlxuICogUGFyYW1ldGVyaXplIGEgcm91dGUgdXNpbmcgdGhlIHJvdXRlIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSByb3V0ZSAtIFRoZSByb3V0ZSB0byBwYXJhbWV0ZXJpemUuXG4gKiBAcmV0dXJucyBUaGUgcGFyYW1ldGVyaXplZCByb3V0ZSBvciB1bmRlZmluZWQgaWYgbm8gcGFyYW1ldGVyaXphdGlvbiBpcyBuZWVkZWQuXG4gKi9cbmNvbnN0IG1heWJlUGFyYW1ldGVyaXplUm91dGUgPSAocm91dGUpID0+IHtcbiAgY29uc3QgbWFuaWZlc3QgPSBnZXRNYW5pZmVzdCgpO1xuICBpZiAoIW1hbmlmZXN0KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIENoZWNrIHJvdXRlIHJlc3VsdCBjYWNoZSBhZnRlciBtYW5pZmVzdCB2YWxpZGF0aW9uXG4gIGlmIChyb3V0ZVJlc3VsdENhY2hlLmhhcyhyb3V0ZSkpIHtcbiAgICByZXR1cm4gcm91dGVSZXN1bHRDYWNoZS5nZXQocm91dGUpO1xuICB9XG5cbiAgY29uc3QgeyBzdGF0aWNSb3V0ZXMsIGR5bmFtaWNSb3V0ZXMgfSA9IG1hbmlmZXN0O1xuICBpZiAoIUFycmF5LmlzQXJyYXkoc3RhdGljUm91dGVzKSB8fCAhQXJyYXkuaXNBcnJheShkeW5hbWljUm91dGVzKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBtYXRjaGVzID0gZmluZE1hdGNoaW5nUm91dGVzKHJvdXRlLCBzdGF0aWNSb3V0ZXMsIGR5bmFtaWNSb3V0ZXMpO1xuXG4gIC8vIFdlIGNhbiBhbHdheXMgZG8gdGhlIGBzb3J0KClgIGNhbGwsIGl0IHdpbGwgc2hvcnQtY2lyY3VpdCB3aGVuIGl0IGhhcyBvbmUgYXJyYXkgaXRlbVxuICBjb25zdCByZXN1bHQgPSBtYXRjaGVzLnNvcnQoKGEsIGIpID0+IGdldFJvdXRlU3BlY2lmaWNpdHkoYSkgLSBnZXRSb3V0ZVNwZWNpZmljaXR5KGIpKVswXTtcblxuICByb3V0ZVJlc3VsdENhY2hlLnNldChyb3V0ZSwgcmVzdWx0KTtcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IHsgbWF5YmVQYXJhbWV0ZXJpemVSb3V0ZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFyYW1ldGVyaXphdGlvbi5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/routing/parameterization.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/tunnelRoute.js":
/*!*****************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/tunnelRoute.js ***!
  \*****************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   applyTunnelRouteOption: () => (/* binding */ applyTunnelRouteOption)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _common_debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../common/debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/debug-build.js\");\n\n\n\nconst globalWithInjectedValues = _sentry_core__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ\n\n;\n\n/**\n * Applies the `tunnel` option to the Next.js SDK options based on `withSentryConfig`'s `tunnelRoute` option.\n */\nfunction applyTunnelRouteOption(options) {\n  const tunnelRouteOption = \"/monitoring\" || 0;\n  if (tunnelRouteOption && options.dsn) {\n    const dsnComponents = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.dsnFromString)(options.dsn);\n    if (!dsnComponents) {\n      return;\n    }\n    const sentrySaasDsnMatch = dsnComponents.host.match(/^o(\\d+)\\.ingest(?:\\.([a-z]{2}))?\\.sentry\\.io$/);\n    if (sentrySaasDsnMatch) {\n      const orgId = sentrySaasDsnMatch[1];\n      const regionCode = sentrySaasDsnMatch[2];\n      let tunnelPath = `${tunnelRouteOption}?o=${orgId}&p=${dsnComponents.projectId}`;\n      if (regionCode) {\n        tunnelPath += `&r=${regionCode}`;\n      }\n      options.tunnel = tunnelPath;\n      _common_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log(`Tunneling events to \"${tunnelPath}\"`);\n    } else {\n      _common_debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn('Provided DSN is not a Sentry SaaS DSN. Will not tunnel events.');\n    }\n  }\n}\n\n\n//# sourceMappingURL=tunnelRoute.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jbGllbnQvdHVubmVsUm91dGUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWdFO0FBQ1Q7O0FBRXZELGlDQUFpQyxvREFBVTs7QUFFM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsYUFBcUMsSUFBSSxDQUFrRDtBQUN2SDtBQUNBLDBCQUEwQiwyREFBYTtBQUN2QztBQUNBO0FBQ0E7QUFDQSxvRkFBb0YsRUFBRTtBQUN0RjtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsa0JBQWtCLEtBQUssTUFBTSxLQUFLLHdCQUF3QjtBQUNwRjtBQUNBLDRCQUE0QixXQUFXO0FBQ3ZDO0FBQ0E7QUFDQSxNQUFNLCtEQUFXLElBQUksK0NBQUssNkJBQTZCLFdBQVc7QUFDbEUsTUFBTTtBQUNOLE1BQU0sK0RBQVcsSUFBSSwrQ0FBSztBQUMxQjtBQUNBO0FBQ0E7O0FBRWtDO0FBQ2xDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrbmV4dGpzQDkuNDYuMF9Ab3BlbnRlbGVtZXRyeStjb250ZXh0LWFzeW5jLWhvb2tzQDEuMzAuMV9Ab3BlbnRlbGVtZXRyeSthcGlAMS45Ll9iNWJkZWNmMzMzZTc0Nzg0OWI0YjczYzQ1N2JkY2EwNi9ub2RlX21vZHVsZXMvQHNlbnRyeS9uZXh0anMvYnVpbGQvZXNtL2NsaWVudC90dW5uZWxSb3V0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHTE9CQUxfT0JKLCBkc25Gcm9tU3RyaW5nLCBkZWJ1ZyB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4uL2NvbW1vbi9kZWJ1Zy1idWlsZC5qcyc7XG5cbmNvbnN0IGdsb2JhbFdpdGhJbmplY3RlZFZhbHVlcyA9IEdMT0JBTF9PQkpcblxuO1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGB0dW5uZWxgIG9wdGlvbiB0byB0aGUgTmV4dC5qcyBTREsgb3B0aW9ucyBiYXNlZCBvbiBgd2l0aFNlbnRyeUNvbmZpZ2AncyBgdHVubmVsUm91dGVgIG9wdGlvbi5cbiAqL1xuZnVuY3Rpb24gYXBwbHlUdW5uZWxSb3V0ZU9wdGlvbihvcHRpb25zKSB7XG4gIGNvbnN0IHR1bm5lbFJvdXRlT3B0aW9uID0gcHJvY2Vzcy5lbnYuX3NlbnRyeVJld3JpdGVzVHVubmVsUGF0aCB8fCBnbG9iYWxXaXRoSW5qZWN0ZWRWYWx1ZXMuX3NlbnRyeVJld3JpdGVzVHVubmVsUGF0aDtcbiAgaWYgKHR1bm5lbFJvdXRlT3B0aW9uICYmIG9wdGlvbnMuZHNuKSB7XG4gICAgY29uc3QgZHNuQ29tcG9uZW50cyA9IGRzbkZyb21TdHJpbmcob3B0aW9ucy5kc24pO1xuICAgIGlmICghZHNuQ29tcG9uZW50cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZW50cnlTYWFzRHNuTWF0Y2ggPSBkc25Db21wb25lbnRzLmhvc3QubWF0Y2goL15vKFxcZCspXFwuaW5nZXN0KD86XFwuKFthLXpdezJ9KSk/XFwuc2VudHJ5XFwuaW8kLyk7XG4gICAgaWYgKHNlbnRyeVNhYXNEc25NYXRjaCkge1xuICAgICAgY29uc3Qgb3JnSWQgPSBzZW50cnlTYWFzRHNuTWF0Y2hbMV07XG4gICAgICBjb25zdCByZWdpb25Db2RlID0gc2VudHJ5U2Fhc0Rzbk1hdGNoWzJdO1xuICAgICAgbGV0IHR1bm5lbFBhdGggPSBgJHt0dW5uZWxSb3V0ZU9wdGlvbn0/bz0ke29yZ0lkfSZwPSR7ZHNuQ29tcG9uZW50cy5wcm9qZWN0SWR9YDtcbiAgICAgIGlmIChyZWdpb25Db2RlKSB7XG4gICAgICAgIHR1bm5lbFBhdGggKz0gYCZyPSR7cmVnaW9uQ29kZX1gO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy50dW5uZWwgPSB0dW5uZWxQYXRoO1xuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKGBUdW5uZWxpbmcgZXZlbnRzIHRvIFwiJHt0dW5uZWxQYXRofVwiYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLndhcm4oJ1Byb3ZpZGVkIERTTiBpcyBub3QgYSBTZW50cnkgU2FhUyBEU04uIFdpbGwgbm90IHR1bm5lbCBldmVudHMuJyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB7IGFwcGx5VHVubmVsUm91dGVPcHRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR1bm5lbFJvdXRlLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/tunnelRoute.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/captureRequestError.js":
/*!*************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/captureRequestError.js ***!
  \*************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   captureRequestError: () => (/* binding */ captureRequestError)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _utils_responseEnd_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/responseEnd.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/responseEnd.js\");\n\n\n\n/**\n * Reports errors passed to the the Next.js `onRequestError` instrumentation hook.\n */\nfunction captureRequestError(error, request, errorContext) {\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.withScope)(scope => {\n    scope.setSDKProcessingMetadata({\n      normalizedRequest: {\n        headers: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.headersToDict)(request.headers),\n        method: request.method,\n      } ,\n    });\n\n    scope.setContext('nextjs', {\n      request_path: request.path,\n      router_kind: errorContext.routerKind,\n      router_path: errorContext.routePath,\n      route_type: errorContext.routeType,\n    });\n\n    scope.setTransactionName(errorContext.routePath);\n\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureException)(error, {\n      mechanism: {\n        handled: false,\n      },\n    });\n\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.vercelWaitUntil)((0,_utils_responseEnd_js__WEBPACK_IMPORTED_MODULE_1__.flushSafelyWithTimeout)());\n  });\n}\n\n\n//# sourceMappingURL=captureRequestError.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vY2FwdHVyZVJlcXVlc3RFcnJvci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBMkY7QUFDM0I7O0FBRWhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSx1REFBUztBQUNYO0FBQ0E7QUFDQSxpQkFBaUIsMkRBQWE7QUFDOUI7QUFDQSxRQUFRO0FBQ1IsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQSxJQUFJLDhEQUFnQjtBQUNwQjtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUwsSUFBSSw2REFBZSxDQUFDLDZFQUFzQjtBQUMxQyxHQUFHO0FBQ0g7O0FBRStCO0FBQy9CIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrbmV4dGpzQDkuNDYuMF9Ab3BlbnRlbGVtZXRyeStjb250ZXh0LWFzeW5jLWhvb2tzQDEuMzAuMV9Ab3BlbnRlbGVtZXRyeSthcGlAMS45Ll9iNWJkZWNmMzMzZTc0Nzg0OWI0YjczYzQ1N2JkY2EwNi9ub2RlX21vZHVsZXMvQHNlbnRyeS9uZXh0anMvYnVpbGQvZXNtL2NvbW1vbi9jYXB0dXJlUmVxdWVzdEVycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdpdGhTY29wZSwgaGVhZGVyc1RvRGljdCwgY2FwdHVyZUV4Y2VwdGlvbiwgdmVyY2VsV2FpdFVudGlsIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGZsdXNoU2FmZWx5V2l0aFRpbWVvdXQgfSBmcm9tICcuL3V0aWxzL3Jlc3BvbnNlRW5kLmpzJztcblxuLyoqXG4gKiBSZXBvcnRzIGVycm9ycyBwYXNzZWQgdG8gdGhlIHRoZSBOZXh0LmpzIGBvblJlcXVlc3RFcnJvcmAgaW5zdHJ1bWVudGF0aW9uIGhvb2suXG4gKi9cbmZ1bmN0aW9uIGNhcHR1cmVSZXF1ZXN0RXJyb3IoZXJyb3IsIHJlcXVlc3QsIGVycm9yQ29udGV4dCkge1xuICB3aXRoU2NvcGUoc2NvcGUgPT4ge1xuICAgIHNjb3BlLnNldFNES1Byb2Nlc3NpbmdNZXRhZGF0YSh7XG4gICAgICBub3JtYWxpemVkUmVxdWVzdDoge1xuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzVG9EaWN0KHJlcXVlc3QuaGVhZGVycyksXG4gICAgICAgIG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG4gICAgICB9ICxcbiAgICB9KTtcblxuICAgIHNjb3BlLnNldENvbnRleHQoJ25leHRqcycsIHtcbiAgICAgIHJlcXVlc3RfcGF0aDogcmVxdWVzdC5wYXRoLFxuICAgICAgcm91dGVyX2tpbmQ6IGVycm9yQ29udGV4dC5yb3V0ZXJLaW5kLFxuICAgICAgcm91dGVyX3BhdGg6IGVycm9yQ29udGV4dC5yb3V0ZVBhdGgsXG4gICAgICByb3V0ZV90eXBlOiBlcnJvckNvbnRleHQucm91dGVUeXBlLFxuICAgIH0pO1xuXG4gICAgc2NvcGUuc2V0VHJhbnNhY3Rpb25OYW1lKGVycm9yQ29udGV4dC5yb3V0ZVBhdGgpO1xuXG4gICAgY2FwdHVyZUV4Y2VwdGlvbihlcnJvciwge1xuICAgICAgbWVjaGFuaXNtOiB7XG4gICAgICAgIGhhbmRsZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHZlcmNlbFdhaXRVbnRpbChmbHVzaFNhZmVseVdpdGhUaW1lb3V0KCkpO1xuICB9KTtcbn1cblxuZXhwb3J0IHsgY2FwdHVyZVJlcXVlc3RFcnJvciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2FwdHVyZVJlcXVlc3RFcnJvci5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/captureRequestError.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/debug-build.js":
/*!*****************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/debug-build.js ***!
  \*****************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   DEBUG_BUILD: () => (/* binding */ DEBUG_BUILD)\n/* harmony export */ });\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = ( false || false);\n\n\n//# sourceMappingURL=debug-build.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vZGVidWctYnVpbGQuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsTUFBdUMsSUFBSSxLQUFnQjs7QUFFekQ7QUFDdkIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStuZXh0anNAOS40Ni4wX0BvcGVudGVsZW1ldHJ5K2NvbnRleHQtYXN5bmMtaG9va3NAMS4zMC4xX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuX2I1YmRlY2YzMzNlNzQ3ODQ5YjRiNzNjNDU3YmRjYTA2L25vZGVfbW9kdWxlcy9Ac2VudHJ5L25leHRqcy9idWlsZC9lc20vY29tbW9uL2RlYnVnLWJ1aWxkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBzZXJ2ZXMgYXMgYSBidWlsZCB0aW1lIGZsYWcgdGhhdCB3aWxsIGJlIHRydWUgYnkgZGVmYXVsdCwgYnV0IGZhbHNlIGluIG5vbi1kZWJ1ZyBidWlsZHMgb3IgaWYgdXNlcnMgcmVwbGFjZSBgX19TRU5UUllfREVCVUdfX2AgaW4gdGhlaXIgZ2VuZXJhdGVkIGNvZGUuXG4gKlxuICogQVRURU5USU9OOiBUaGlzIGNvbnN0YW50IG11c3QgbmV2ZXIgY3Jvc3MgcGFja2FnZSBib3VuZGFyaWVzIChpLmUuIGJlIGV4cG9ydGVkKSB0byBndWFyYW50ZWUgdGhhdCBpdCBjYW4gYmUgdXNlZCBmb3IgdHJlZSBzaGFraW5nLlxuICovXG5jb25zdCBERUJVR19CVUlMRCA9ICh0eXBlb2YgX19TRU5UUllfREVCVUdfXyA9PT0gJ3VuZGVmaW5lZCcgfHwgX19TRU5UUllfREVCVUdfXyk7XG5cbmV4cG9ydCB7IERFQlVHX0JVSUxEIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWJ1Zy1idWlsZC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/debug-build.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/devErrorSymbolicationEventProcessor.js":
/*!*****************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/devErrorSymbolicationEventProcessor.js ***!
  \*****************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   devErrorSymbolicationEventProcessor: () => (/* binding */ devErrorSymbolicationEventProcessor)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var stacktrace_parser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! stacktrace-parser */ \"(app-pages-browser)/./node_modules/.pnpm/stacktrace-parser@0.1.11/node_modules/stacktrace-parser/dist/stack-trace-parser.esm.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/debug-build.js\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js\");\n\n\n\n\nconst globalWithInjectedValues = _sentry_core__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ\n\n;\n\n/**\n * Event processor that will symbolicate errors by using the webpack/nextjs dev server that is used to show stack traces\n * in the dev overlay.\n */\nasync function devErrorSymbolicationEventProcessor(event, hint) {\n  // Filter out spans for requests resolving source maps for stack frames in dev mode\n  if (event.type === 'transaction') {\n    event.spans = event.spans?.filter(span => {\n      const httpUrlAttribute = span.data?.['http.url'];\n      if (typeof httpUrlAttribute === 'string') {\n        return !httpUrlAttribute.includes('__nextjs_original-stack-frame'); // could also be __nextjs_original-stack-frames (plural)\n      }\n\n      return true;\n    });\n  }\n\n  // Due to changes across Next.js versions, there are a million things that can go wrong here so we just try-catch the\n  // entire event processor. Symbolicated stack traces are just a nice to have.\n  try {\n    if (hint.originalException && hint.originalException instanceof Error && hint.originalException.stack) {\n      const frames = stacktrace_parser__WEBPACK_IMPORTED_MODULE_1__.parse(hint.originalException.stack);\n\n      const nextjsVersion = globalWithInjectedValues.next?.version || '0.0.0';\n      const parsedNextjsVersion = nextjsVersion ? (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.parseSemver)(nextjsVersion) : {};\n\n      let resolvedFrames\n\n;\n\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      if (parsedNextjsVersion.major > 15 || (parsedNextjsVersion.major === 15 && parsedNextjsVersion.minor >= 2)) {\n        const r = await resolveStackFrames(frames);\n        if (r === null) {\n          return event;\n        }\n        resolvedFrames = r;\n      } else {\n        resolvedFrames = await Promise.all(\n          frames.map(frame => resolveStackFrame(frame, hint.originalException )),\n        );\n      }\n\n      if (event.exception?.values?.[0]?.stacktrace?.frames) {\n        event.exception.values[0].stacktrace.frames = event.exception.values[0].stacktrace.frames.map(\n          (frame, i, frames) => {\n            const resolvedFrame = resolvedFrames[frames.length - 1 - i];\n            if (!resolvedFrame?.originalStackFrame || !resolvedFrame.originalCodeFrame) {\n              return {\n                ...frame,\n                platform: frame.filename?.startsWith('node:internal') ? 'nodejs' : undefined, // simple hack that will prevent a source mapping error from showing up\n                in_app: false,\n              };\n            }\n\n            const { contextLine, preContextLines, postContextLines } = parseOriginalCodeFrame(\n              resolvedFrame.originalCodeFrame,\n            );\n\n            return {\n              ...frame,\n              pre_context: preContextLines,\n              context_line: contextLine,\n              post_context: postContextLines,\n              function: resolvedFrame.originalStackFrame.methodName,\n              filename: resolvedFrame.originalStackFrame.file || undefined,\n              lineno:\n                resolvedFrame.originalStackFrame.lineNumber || resolvedFrame.originalStackFrame.line1 || undefined,\n              colno: resolvedFrame.originalStackFrame.column || resolvedFrame.originalStackFrame.column1 || undefined,\n            };\n          },\n        );\n      }\n    }\n  } catch {\n    return event;\n  }\n\n  return event;\n}\n\nasync function resolveStackFrame(\n  frame,\n  error,\n) {\n  try {\n    if (!(frame.file?.startsWith('webpack-internal:') || frame.file?.startsWith('file:'))) {\n      return null;\n    }\n\n    const params = new URLSearchParams();\n    params.append('isServer', String(false)); // doesn't matter since it is overwritten by isAppDirectory\n    params.append('isEdgeServer', String(false)); // doesn't matter since it is overwritten by isAppDirectory\n    params.append('isAppDirectory', String(true)); // will force server to do more thorough checking\n    params.append('errorMessage', error.toString());\n    Object.keys(frame).forEach(key => {\n      params.append(key, (frame[key ] ?? '').toString());\n    });\n\n    let basePath = process.env._sentryBasePath ?? globalWithInjectedValues._sentryBasePath ?? '';\n\n    // Prefix the basepath with a slash if it doesn't have one\n    if (basePath !== '' && !basePath.match(/^\\//)) {\n      basePath = `/${basePath}`;\n    }\n\n    const controller = new AbortController();\n    const timer = setTimeout(() => controller.abort(), 3000);\n    const res = await (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.suppressTracing)(() =>\n      fetch(\n        `${\n          // eslint-disable-next-line no-restricted-globals\n          typeof window === 'undefined' ? 'http://localhost:3000' : '' // TODO: handle the case where users define a different port\n        }${basePath}/__nextjs_original-stack-frame?${params.toString()}`,\n        {\n          signal: controller.signal,\n        },\n      ).finally(() => {\n        clearTimeout(timer);\n      }),\n    );\n\n    if (!res.ok || res.status === 204) {\n      return null;\n    }\n\n    const body = await res.json();\n\n    return {\n      originalCodeFrame: body.originalCodeFrame,\n      originalStackFrame: body.originalStackFrame,\n    };\n  } catch (e) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_2__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.error('Failed to symbolicate event with Next.js dev server', e);\n    return null;\n  }\n}\n\nasync function resolveStackFrames(\n  frames,\n) {\n  try {\n    const postBody = {\n      frames: frames\n        .filter(frame => {\n          return !!frame.file;\n        })\n        .map(frame => {\n          // https://github.com/vercel/next.js/blob/df0573a478baa8b55478a7963c473dddd59a5e40/packages/next/src/client/components/react-dev-overlay/server/middleware-turbopack.ts#L129\n          // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n          frame.file = frame.file.replace(/^rsc:\\/\\/React\\/[^/]+\\//, '').replace(/\\?\\d+$/, '');\n\n          return {\n            file: frame.file,\n            methodName: frame.methodName ?? '<unknown>',\n            arguments: [],\n            lineNumber: frame.lineNumber ?? 0,\n            column: frame.column ?? 0,\n            line1: frame.lineNumber ?? 0,\n            column1: frame.column ?? 0,\n          };\n        }),\n      isServer: false,\n      isEdgeServer: false,\n      isAppDirectory: true,\n    };\n\n    let basePath = process.env._sentryBasePath ?? globalWithInjectedValues._sentryBasePath ?? '';\n\n    // Prefix the basepath with a slash if it doesn't have one\n    if (basePath !== '' && !basePath.match(/^\\//)) {\n      basePath = `/${basePath}`;\n    }\n\n    const controller = new AbortController();\n    const timer = setTimeout(() => controller.abort(), 3000);\n\n    const res = await (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.suppressTracing)(() =>\n      fetch(\n        `${\n          // eslint-disable-next-line no-restricted-globals\n          typeof window === 'undefined' ? 'http://localhost:3000' : '' // TODO: handle the case where users define a different port\n        }${basePath}/__nextjs_original-stack-frames`,\n        {\n          method: 'POST',\n          headers: {\n            'Content-Type': 'application/json',\n          },\n          signal: controller.signal,\n          body: JSON.stringify(postBody),\n        },\n      ).finally(() => {\n        clearTimeout(timer);\n      }),\n    );\n\n    if (!res.ok || res.status === 204) {\n      return null;\n    }\n\n    const body = await res.json();\n\n    return body.map(frame => {\n      return {\n        originalCodeFrame: frame.value.originalCodeFrame,\n        originalStackFrame: frame.value.originalStackFrame,\n      };\n    });\n  } catch (e) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_2__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.error('Failed to symbolicate event with Next.js dev server', e);\n    return null;\n  }\n}\n\nfunction parseOriginalCodeFrame(codeFrame)\n\n {\n  const preProcessedLines = codeFrame\n    // Remove ASCII control characters that are used for syntax highlighting\n    .replace(\n      // eslint-disable-next-line no-control-regex\n      /[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, // https://stackoverflow.com/a/29497680\n      '',\n    )\n    .split('\\n')\n    // Remove line that is supposed to indicate where the error happened\n    .filter(line => !line.match(/^\\s*\\|/))\n    // Find the error line\n    .map(line => ({\n      line,\n      isErrorLine: !!line.match(/^>/),\n    }))\n    // Remove the leading part that is just for prettier output\n    .map(lineObj => ({\n      ...lineObj,\n      line: lineObj.line.replace(/^.*\\|/, ''),\n    }));\n\n  const preContextLines = [];\n  let contextLine = undefined;\n  const postContextLines = [];\n\n  let reachedContextLine = false;\n\n  for (const preProcessedLine of preProcessedLines) {\n    if (preProcessedLine.isErrorLine) {\n      contextLine = preProcessedLine.line;\n      reachedContextLine = true;\n    } else if (reachedContextLine) {\n      postContextLines.push(preProcessedLine.line);\n    } else {\n      preContextLines.push(preProcessedLine.line);\n    }\n  }\n\n  return {\n    contextLine,\n    preContextLines,\n    postContextLines,\n  };\n}\n\n\n//# sourceMappingURL=devErrorSymbolicationEventProcessor.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vZGV2RXJyb3JTeW1ib2xpY2F0aW9uRXZlbnRQcm9jZXNzb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBK0U7QUFDekI7QUFDUDs7QUFFL0MsaUNBQWlDLG9EQUFVOztBQUUzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRFQUE0RTtBQUM1RTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixvREFBc0I7O0FBRTNDO0FBQ0Esa0RBQWtELHlEQUFXOztBQUU3RDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixpREFBaUQ7QUFDckU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhDQUE4QztBQUM5QyxrREFBa0Q7QUFDbEQsbURBQW1EO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUwsbUJBQW1CLE9BQU87O0FBRTFCO0FBQ0E7QUFDQSxxQkFBcUIsU0FBUztBQUM5Qjs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCLDZEQUFlO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxFQUFFLFNBQVMsaUNBQWlDLGtCQUFrQjtBQUN2RTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLElBQUksd0RBQVcsSUFBSSwrQ0FBSztBQUN4QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLE9BQU87O0FBRTFCO0FBQ0E7QUFDQSxxQkFBcUIsU0FBUztBQUM5Qjs7QUFFQTtBQUNBOztBQUVBLHNCQUFzQiw2REFBZTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsRUFBRSxTQUFTO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0osSUFBSSx3REFBVyxJQUFJLCtDQUFLO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLFlBQVksSUFBSSxJQUFJLE1BQU0sSUFBSTtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUUrQztBQUMvQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vZGV2RXJyb3JTeW1ib2xpY2F0aW9uRXZlbnRQcm9jZXNzb3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR0xPQkFMX09CSiwgcGFyc2VTZW12ZXIsIHN1cHByZXNzVHJhY2luZywgZGVidWcgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0ICogYXMgc3RhY2tUcmFjZVBhcnNlciBmcm9tICdzdGFja3RyYWNlLXBhcnNlcic7XG5pbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4vZGVidWctYnVpbGQuanMnO1xuXG5jb25zdCBnbG9iYWxXaXRoSW5qZWN0ZWRWYWx1ZXMgPSBHTE9CQUxfT0JKXG5cbjtcblxuLyoqXG4gKiBFdmVudCBwcm9jZXNzb3IgdGhhdCB3aWxsIHN5bWJvbGljYXRlIGVycm9ycyBieSB1c2luZyB0aGUgd2VicGFjay9uZXh0anMgZGV2IHNlcnZlciB0aGF0IGlzIHVzZWQgdG8gc2hvdyBzdGFjayB0cmFjZXNcbiAqIGluIHRoZSBkZXYgb3ZlcmxheS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGV2RXJyb3JTeW1ib2xpY2F0aW9uRXZlbnRQcm9jZXNzb3IoZXZlbnQsIGhpbnQpIHtcbiAgLy8gRmlsdGVyIG91dCBzcGFucyBmb3IgcmVxdWVzdHMgcmVzb2x2aW5nIHNvdXJjZSBtYXBzIGZvciBzdGFjayBmcmFtZXMgaW4gZGV2IG1vZGVcbiAgaWYgKGV2ZW50LnR5cGUgPT09ICd0cmFuc2FjdGlvbicpIHtcbiAgICBldmVudC5zcGFucyA9IGV2ZW50LnNwYW5zPy5maWx0ZXIoc3BhbiA9PiB7XG4gICAgICBjb25zdCBodHRwVXJsQXR0cmlidXRlID0gc3Bhbi5kYXRhPy5bJ2h0dHAudXJsJ107XG4gICAgICBpZiAodHlwZW9mIGh0dHBVcmxBdHRyaWJ1dGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiAhaHR0cFVybEF0dHJpYnV0ZS5pbmNsdWRlcygnX19uZXh0anNfb3JpZ2luYWwtc3RhY2stZnJhbWUnKTsgLy8gY291bGQgYWxzbyBiZSBfX25leHRqc19vcmlnaW5hbC1zdGFjay1mcmFtZXMgKHBsdXJhbClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cblxuICAvLyBEdWUgdG8gY2hhbmdlcyBhY3Jvc3MgTmV4dC5qcyB2ZXJzaW9ucywgdGhlcmUgYXJlIGEgbWlsbGlvbiB0aGluZ3MgdGhhdCBjYW4gZ28gd3JvbmcgaGVyZSBzbyB3ZSBqdXN0IHRyeS1jYXRjaCB0aGVcbiAgLy8gZW50aXJlIGV2ZW50IHByb2Nlc3Nvci4gU3ltYm9saWNhdGVkIHN0YWNrIHRyYWNlcyBhcmUganVzdCBhIG5pY2UgdG8gaGF2ZS5cbiAgdHJ5IHtcbiAgICBpZiAoaGludC5vcmlnaW5hbEV4Y2VwdGlvbiAmJiBoaW50Lm9yaWdpbmFsRXhjZXB0aW9uIGluc3RhbmNlb2YgRXJyb3IgJiYgaGludC5vcmlnaW5hbEV4Y2VwdGlvbi5zdGFjaykge1xuICAgICAgY29uc3QgZnJhbWVzID0gc3RhY2tUcmFjZVBhcnNlci5wYXJzZShoaW50Lm9yaWdpbmFsRXhjZXB0aW9uLnN0YWNrKTtcblxuICAgICAgY29uc3QgbmV4dGpzVmVyc2lvbiA9IGdsb2JhbFdpdGhJbmplY3RlZFZhbHVlcy5uZXh0Py52ZXJzaW9uIHx8ICcwLjAuMCc7XG4gICAgICBjb25zdCBwYXJzZWROZXh0anNWZXJzaW9uID0gbmV4dGpzVmVyc2lvbiA/IHBhcnNlU2VtdmVyKG5leHRqc1ZlcnNpb24pIDoge307XG5cbiAgICAgIGxldCByZXNvbHZlZEZyYW1lc1xuXG47XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICBpZiAocGFyc2VkTmV4dGpzVmVyc2lvbi5tYWpvciA+IDE1IHx8IChwYXJzZWROZXh0anNWZXJzaW9uLm1ham9yID09PSAxNSAmJiBwYXJzZWROZXh0anNWZXJzaW9uLm1pbm9yID49IDIpKSB7XG4gICAgICAgIGNvbnN0IHIgPSBhd2FpdCByZXNvbHZlU3RhY2tGcmFtZXMoZnJhbWVzKTtcbiAgICAgICAgaWYgKHIgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZWRGcmFtZXMgPSByO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZWRGcmFtZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBmcmFtZXMubWFwKGZyYW1lID0+IHJlc29sdmVTdGFja0ZyYW1lKGZyYW1lLCBoaW50Lm9yaWdpbmFsRXhjZXB0aW9uICkpLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuZXhjZXB0aW9uPy52YWx1ZXM/LlswXT8uc3RhY2t0cmFjZT8uZnJhbWVzKSB7XG4gICAgICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0uc3RhY2t0cmFjZS5mcmFtZXMgPSBldmVudC5leGNlcHRpb24udmFsdWVzWzBdLnN0YWNrdHJhY2UuZnJhbWVzLm1hcChcbiAgICAgICAgICAoZnJhbWUsIGksIGZyYW1lcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRGcmFtZSA9IHJlc29sdmVkRnJhbWVzW2ZyYW1lcy5sZW5ndGggLSAxIC0gaV07XG4gICAgICAgICAgICBpZiAoIXJlc29sdmVkRnJhbWU/Lm9yaWdpbmFsU3RhY2tGcmFtZSB8fCAhcmVzb2x2ZWRGcmFtZS5vcmlnaW5hbENvZGVGcmFtZSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmZyYW1lLFxuICAgICAgICAgICAgICAgIHBsYXRmb3JtOiBmcmFtZS5maWxlbmFtZT8uc3RhcnRzV2l0aCgnbm9kZTppbnRlcm5hbCcpID8gJ25vZGVqcycgOiB1bmRlZmluZWQsIC8vIHNpbXBsZSBoYWNrIHRoYXQgd2lsbCBwcmV2ZW50IGEgc291cmNlIG1hcHBpbmcgZXJyb3IgZnJvbSBzaG93aW5nIHVwXG4gICAgICAgICAgICAgICAgaW5fYXBwOiBmYWxzZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgeyBjb250ZXh0TGluZSwgcHJlQ29udGV4dExpbmVzLCBwb3N0Q29udGV4dExpbmVzIH0gPSBwYXJzZU9yaWdpbmFsQ29kZUZyYW1lKFxuICAgICAgICAgICAgICByZXNvbHZlZEZyYW1lLm9yaWdpbmFsQ29kZUZyYW1lLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uZnJhbWUsXG4gICAgICAgICAgICAgIHByZV9jb250ZXh0OiBwcmVDb250ZXh0TGluZXMsXG4gICAgICAgICAgICAgIGNvbnRleHRfbGluZTogY29udGV4dExpbmUsXG4gICAgICAgICAgICAgIHBvc3RfY29udGV4dDogcG9zdENvbnRleHRMaW5lcyxcbiAgICAgICAgICAgICAgZnVuY3Rpb246IHJlc29sdmVkRnJhbWUub3JpZ2luYWxTdGFja0ZyYW1lLm1ldGhvZE5hbWUsXG4gICAgICAgICAgICAgIGZpbGVuYW1lOiByZXNvbHZlZEZyYW1lLm9yaWdpbmFsU3RhY2tGcmFtZS5maWxlIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbGluZW5vOlxuICAgICAgICAgICAgICAgIHJlc29sdmVkRnJhbWUub3JpZ2luYWxTdGFja0ZyYW1lLmxpbmVOdW1iZXIgfHwgcmVzb2x2ZWRGcmFtZS5vcmlnaW5hbFN0YWNrRnJhbWUubGluZTEgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBjb2xubzogcmVzb2x2ZWRGcmFtZS5vcmlnaW5hbFN0YWNrRnJhbWUuY29sdW1uIHx8IHJlc29sdmVkRnJhbWUub3JpZ2luYWxTdGFja0ZyYW1lLmNvbHVtbjEgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgcmV0dXJuIGV2ZW50O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlU3RhY2tGcmFtZShcbiAgZnJhbWUsXG4gIGVycm9yLFxuKSB7XG4gIHRyeSB7XG4gICAgaWYgKCEoZnJhbWUuZmlsZT8uc3RhcnRzV2l0aCgnd2VicGFjay1pbnRlcm5hbDonKSB8fCBmcmFtZS5maWxlPy5zdGFydHNXaXRoKCdmaWxlOicpKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5hcHBlbmQoJ2lzU2VydmVyJywgU3RyaW5nKGZhbHNlKSk7IC8vIGRvZXNuJ3QgbWF0dGVyIHNpbmNlIGl0IGlzIG92ZXJ3cml0dGVuIGJ5IGlzQXBwRGlyZWN0b3J5XG4gICAgcGFyYW1zLmFwcGVuZCgnaXNFZGdlU2VydmVyJywgU3RyaW5nKGZhbHNlKSk7IC8vIGRvZXNuJ3QgbWF0dGVyIHNpbmNlIGl0IGlzIG92ZXJ3cml0dGVuIGJ5IGlzQXBwRGlyZWN0b3J5XG4gICAgcGFyYW1zLmFwcGVuZCgnaXNBcHBEaXJlY3RvcnknLCBTdHJpbmcodHJ1ZSkpOyAvLyB3aWxsIGZvcmNlIHNlcnZlciB0byBkbyBtb3JlIHRob3JvdWdoIGNoZWNraW5nXG4gICAgcGFyYW1zLmFwcGVuZCgnZXJyb3JNZXNzYWdlJywgZXJyb3IudG9TdHJpbmcoKSk7XG4gICAgT2JqZWN0LmtleXMoZnJhbWUpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIHBhcmFtcy5hcHBlbmQoa2V5LCAoZnJhbWVba2V5IF0gPz8gJycpLnRvU3RyaW5nKCkpO1xuICAgIH0pO1xuXG4gICAgbGV0IGJhc2VQYXRoID0gcHJvY2Vzcy5lbnYuX3NlbnRyeUJhc2VQYXRoID8/IGdsb2JhbFdpdGhJbmplY3RlZFZhbHVlcy5fc2VudHJ5QmFzZVBhdGggPz8gJyc7XG5cbiAgICAvLyBQcmVmaXggdGhlIGJhc2VwYXRoIHdpdGggYSBzbGFzaCBpZiBpdCBkb2Vzbid0IGhhdmUgb25lXG4gICAgaWYgKGJhc2VQYXRoICE9PSAnJyAmJiAhYmFzZVBhdGgubWF0Y2goL15cXC8vKSkge1xuICAgICAgYmFzZVBhdGggPSBgLyR7YmFzZVBhdGh9YDtcbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIDMwMDApO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHN1cHByZXNzVHJhY2luZygoKSA9PlxuICAgICAgZmV0Y2goXG4gICAgICAgIGAke1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbiAgICAgICAgICB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/ICdodHRwOi8vbG9jYWxob3N0OjMwMDAnIDogJycgLy8gVE9ETzogaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHVzZXJzIGRlZmluZSBhIGRpZmZlcmVudCBwb3J0XG4gICAgICAgIH0ke2Jhc2VQYXRofS9fX25leHRqc19vcmlnaW5hbC1zdGFjay1mcmFtZT8ke3BhcmFtcy50b1N0cmluZygpfWAsXG4gICAgICAgIHtcbiAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICB9LFxuICAgICAgKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBpZiAoIXJlcy5vayB8fCByZXMuc3RhdHVzID09PSAyMDQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZXMuanNvbigpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9yaWdpbmFsQ29kZUZyYW1lOiBib2R5Lm9yaWdpbmFsQ29kZUZyYW1lLFxuICAgICAgb3JpZ2luYWxTdGFja0ZyYW1lOiBib2R5Lm9yaWdpbmFsU3RhY2tGcmFtZSxcbiAgICB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcuZXJyb3IoJ0ZhaWxlZCB0byBzeW1ib2xpY2F0ZSBldmVudCB3aXRoIE5leHQuanMgZGV2IHNlcnZlcicsIGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTdGFja0ZyYW1lcyhcbiAgZnJhbWVzLFxuKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcG9zdEJvZHkgPSB7XG4gICAgICBmcmFtZXM6IGZyYW1lc1xuICAgICAgICAuZmlsdGVyKGZyYW1lID0+IHtcbiAgICAgICAgICByZXR1cm4gISFmcmFtZS5maWxlO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKGZyYW1lID0+IHtcbiAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL25leHQuanMvYmxvYi9kZjA1NzNhNDc4YmFhOGI1NTQ3OGE3OTYzYzQ3M2RkZGQ1OWE1ZTQwL3BhY2thZ2VzL25leHQvc3JjL2NsaWVudC9jb21wb25lbnRzL3JlYWN0LWRldi1vdmVybGF5L3NlcnZlci9taWRkbGV3YXJlLXR1cmJvcGFjay50cyNMMTI5XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICBmcmFtZS5maWxlID0gZnJhbWUuZmlsZS5yZXBsYWNlKC9ecnNjOlxcL1xcL1JlYWN0XFwvW14vXStcXC8vLCAnJykucmVwbGFjZSgvXFw/XFxkKyQvLCAnJyk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmlsZTogZnJhbWUuZmlsZSxcbiAgICAgICAgICAgIG1ldGhvZE5hbWU6IGZyYW1lLm1ldGhvZE5hbWUgPz8gJzx1bmtub3duPicsXG4gICAgICAgICAgICBhcmd1bWVudHM6IFtdLFxuICAgICAgICAgICAgbGluZU51bWJlcjogZnJhbWUubGluZU51bWJlciA/PyAwLFxuICAgICAgICAgICAgY29sdW1uOiBmcmFtZS5jb2x1bW4gPz8gMCxcbiAgICAgICAgICAgIGxpbmUxOiBmcmFtZS5saW5lTnVtYmVyID8/IDAsXG4gICAgICAgICAgICBjb2x1bW4xOiBmcmFtZS5jb2x1bW4gPz8gMCxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgIGlzU2VydmVyOiBmYWxzZSxcbiAgICAgIGlzRWRnZVNlcnZlcjogZmFsc2UsXG4gICAgICBpc0FwcERpcmVjdG9yeTogdHJ1ZSxcbiAgICB9O1xuXG4gICAgbGV0IGJhc2VQYXRoID0gcHJvY2Vzcy5lbnYuX3NlbnRyeUJhc2VQYXRoID8/IGdsb2JhbFdpdGhJbmplY3RlZFZhbHVlcy5fc2VudHJ5QmFzZVBhdGggPz8gJyc7XG5cbiAgICAvLyBQcmVmaXggdGhlIGJhc2VwYXRoIHdpdGggYSBzbGFzaCBpZiBpdCBkb2Vzbid0IGhhdmUgb25lXG4gICAgaWYgKGJhc2VQYXRoICE9PSAnJyAmJiAhYmFzZVBhdGgubWF0Y2goL15cXC8vKSkge1xuICAgICAgYmFzZVBhdGggPSBgLyR7YmFzZVBhdGh9YDtcbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIDMwMDApO1xuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgc3VwcHJlc3NUcmFjaW5nKCgpID0+XG4gICAgICBmZXRjaChcbiAgICAgICAgYCR7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgICAgICAgIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcgOiAnJyAvLyBUT0RPOiBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdXNlcnMgZGVmaW5lIGEgZGlmZmVyZW50IHBvcnRcbiAgICAgICAgfSR7YmFzZVBhdGh9L19fbmV4dGpzX29yaWdpbmFsLXN0YWNrLWZyYW1lc2AsXG4gICAgICAgIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShwb3N0Qm9keSksXG4gICAgICAgIH0sXG4gICAgICApLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIGlmICghcmVzLm9rIHx8IHJlcy5zdGF0dXMgPT09IDIwNCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlcy5qc29uKCk7XG5cbiAgICByZXR1cm4gYm9keS5tYXAoZnJhbWUgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3JpZ2luYWxDb2RlRnJhbWU6IGZyYW1lLnZhbHVlLm9yaWdpbmFsQ29kZUZyYW1lLFxuICAgICAgICBvcmlnaW5hbFN0YWNrRnJhbWU6IGZyYW1lLnZhbHVlLm9yaWdpbmFsU3RhY2tGcmFtZSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5lcnJvcignRmFpbGVkIHRvIHN5bWJvbGljYXRlIGV2ZW50IHdpdGggTmV4dC5qcyBkZXYgc2VydmVyJywgZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VPcmlnaW5hbENvZGVGcmFtZShjb2RlRnJhbWUpXG5cbiB7XG4gIGNvbnN0IHByZVByb2Nlc3NlZExpbmVzID0gY29kZUZyYW1lXG4gICAgLy8gUmVtb3ZlIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVycyB0aGF0IGFyZSB1c2VkIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nXG4gICAgLnJlcGxhY2UoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuICAgICAgL1tcXHUwMDFiXFx1MDA5Yl1bWygpIzs/XSooPzpbMC05XXsxLDR9KD86O1swLTldezAsNH0pKik/WzAtOUEtT1JaY2YtbnFyeT0+PF0vZywgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI5NDk3NjgwXG4gICAgICAnJyxcbiAgICApXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC8vIFJlbW92ZSBsaW5lIHRoYXQgaXMgc3VwcG9zZWQgdG8gaW5kaWNhdGUgd2hlcmUgdGhlIGVycm9yIGhhcHBlbmVkXG4gICAgLmZpbHRlcihsaW5lID0+ICFsaW5lLm1hdGNoKC9eXFxzKlxcfC8pKVxuICAgIC8vIEZpbmQgdGhlIGVycm9yIGxpbmVcbiAgICAubWFwKGxpbmUgPT4gKHtcbiAgICAgIGxpbmUsXG4gICAgICBpc0Vycm9yTGluZTogISFsaW5lLm1hdGNoKC9ePi8pLFxuICAgIH0pKVxuICAgIC8vIFJlbW92ZSB0aGUgbGVhZGluZyBwYXJ0IHRoYXQgaXMganVzdCBmb3IgcHJldHRpZXIgb3V0cHV0XG4gICAgLm1hcChsaW5lT2JqID0+ICh7XG4gICAgICAuLi5saW5lT2JqLFxuICAgICAgbGluZTogbGluZU9iai5saW5lLnJlcGxhY2UoL14uKlxcfC8sICcnKSxcbiAgICB9KSk7XG5cbiAgY29uc3QgcHJlQ29udGV4dExpbmVzID0gW107XG4gIGxldCBjb250ZXh0TGluZSA9IHVuZGVmaW5lZDtcbiAgY29uc3QgcG9zdENvbnRleHRMaW5lcyA9IFtdO1xuXG4gIGxldCByZWFjaGVkQ29udGV4dExpbmUgPSBmYWxzZTtcblxuICBmb3IgKGNvbnN0IHByZVByb2Nlc3NlZExpbmUgb2YgcHJlUHJvY2Vzc2VkTGluZXMpIHtcbiAgICBpZiAocHJlUHJvY2Vzc2VkTGluZS5pc0Vycm9yTGluZSkge1xuICAgICAgY29udGV4dExpbmUgPSBwcmVQcm9jZXNzZWRMaW5lLmxpbmU7XG4gICAgICByZWFjaGVkQ29udGV4dExpbmUgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAocmVhY2hlZENvbnRleHRMaW5lKSB7XG4gICAgICBwb3N0Q29udGV4dExpbmVzLnB1c2gocHJlUHJvY2Vzc2VkTGluZS5saW5lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlQ29udGV4dExpbmVzLnB1c2gocHJlUHJvY2Vzc2VkTGluZS5saW5lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvbnRleHRMaW5lLFxuICAgIHByZUNvbnRleHRMaW5lcyxcbiAgICBwb3N0Q29udGV4dExpbmVzLFxuICB9O1xufVxuXG5leHBvcnQgeyBkZXZFcnJvclN5bWJvbGljYXRpb25FdmVudFByb2Nlc3NvciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGV2RXJyb3JTeW1ib2xpY2F0aW9uRXZlbnRQcm9jZXNzb3IuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/devErrorSymbolicationEventProcessor.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/getVercelEnv.js":
/*!******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/getVercelEnv.js ***!
  \******************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getVercelEnv: () => (/* binding */ getVercelEnv)\n/* harmony export */ });\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js\");\n/**\n * Returns an environment setting value determined by Vercel's `VERCEL_ENV` environment variable.\n *\n * @param isClient Flag to indicate whether to use the `NEXT_PUBLIC_` prefixed version of the environment variable.\n */\nfunction getVercelEnv(isClient) {\n  const vercelEnvVar = isClient ? process.env.NEXT_PUBLIC_VERCEL_ENV : process.env.VERCEL_ENV;\n  return vercelEnvVar ? `vercel-${vercelEnvVar}` : undefined;\n}\n\n\n//# sourceMappingURL=getVercelEnv.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vZ2V0VmVyY2VsRW52LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLE9BQU8sOEJBQThCLE9BQU87QUFDOUUsa0NBQWtDLGFBQWE7QUFDL0M7O0FBRXdCO0FBQ3hCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrbmV4dGpzQDkuNDYuMF9Ab3BlbnRlbGVtZXRyeStjb250ZXh0LWFzeW5jLWhvb2tzQDEuMzAuMV9Ab3BlbnRlbGVtZXRyeSthcGlAMS45Ll9iNWJkZWNmMzMzZTc0Nzg0OWI0YjczYzQ1N2JkY2EwNi9ub2RlX21vZHVsZXMvQHNlbnRyeS9uZXh0anMvYnVpbGQvZXNtL2NvbW1vbi9nZXRWZXJjZWxFbnYuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXR1cm5zIGFuIGVudmlyb25tZW50IHNldHRpbmcgdmFsdWUgZGV0ZXJtaW5lZCBieSBWZXJjZWwncyBgVkVSQ0VMX0VOVmAgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKlxuICogQHBhcmFtIGlzQ2xpZW50IEZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciB0byB1c2UgdGhlIGBORVhUX1BVQkxJQ19gIHByZWZpeGVkIHZlcnNpb24gb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICovXG5mdW5jdGlvbiBnZXRWZXJjZWxFbnYoaXNDbGllbnQpIHtcbiAgY29uc3QgdmVyY2VsRW52VmFyID0gaXNDbGllbnQgPyBwcm9jZXNzLmVudi5ORVhUX1BVQkxJQ19WRVJDRUxfRU5WIDogcHJvY2Vzcy5lbnYuVkVSQ0VMX0VOVjtcbiAgcmV0dXJuIHZlcmNlbEVudlZhciA/IGB2ZXJjZWwtJHt2ZXJjZWxFbnZWYXJ9YCA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IHsgZ2V0VmVyY2VsRW52IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRWZXJjZWxFbnYuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/getVercelEnv.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/nextNavigationErrorUtils.js":
/*!******************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/nextNavigationErrorUtils.js ***!
  \******************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   isNotFoundNavigationError: () => (/* binding */ isNotFoundNavigationError),\n/* harmony export */   isRedirectNavigationError: () => (/* binding */ isRedirectNavigationError)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\n/**\n * Determines whether input is a Next.js not-found error.\n * https://beta.nextjs.org/docs/api-reference/notfound#notfound\n */\nfunction isNotFoundNavigationError(subject) {\n  return (\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isError)(subject) &&\n    ['NEXT_NOT_FOUND', 'NEXT_HTTP_ERROR_FALLBACK;404'].includes(\n      (subject ).digest ,\n    )\n  );\n}\n\n/**\n * Determines whether input is a Next.js redirect error.\n * https://beta.nextjs.org/docs/api-reference/redirect#redirect\n */\nfunction isRedirectNavigationError(subject) {\n  return (\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isError)(subject) &&\n    typeof (subject ).digest === 'string' &&\n    (subject ).digest.startsWith('NEXT_REDIRECT;') // a redirect digest looks like \"NEXT_REDIRECT;[redirect path]\"\n  );\n}\n\n\n//# sourceMappingURL=nextNavigationErrorUtils.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vbmV4dE5hdmlnYXRpb25FcnJvclV0aWxzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF1Qzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxxREFBTztBQUNYLGlEQUFpRDtBQUNqRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHFEQUFPO0FBQ1g7QUFDQSxnREFBZ0Qsa0RBQWtEO0FBQ2xHO0FBQ0E7O0FBRWdFO0FBQ2hFIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrbmV4dGpzQDkuNDYuMF9Ab3BlbnRlbGVtZXRyeStjb250ZXh0LWFzeW5jLWhvb2tzQDEuMzAuMV9Ab3BlbnRlbGVtZXRyeSthcGlAMS45Ll9iNWJkZWNmMzMzZTc0Nzg0OWI0YjczYzQ1N2JkY2EwNi9ub2RlX21vZHVsZXMvQHNlbnRyeS9uZXh0anMvYnVpbGQvZXNtL2NvbW1vbi9uZXh0TmF2aWdhdGlvbkVycm9yVXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFcnJvciB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGlucHV0IGlzIGEgTmV4dC5qcyBub3QtZm91bmQgZXJyb3IuXG4gKiBodHRwczovL2JldGEubmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2Uvbm90Zm91bmQjbm90Zm91bmRcbiAqL1xuZnVuY3Rpb24gaXNOb3RGb3VuZE5hdmlnYXRpb25FcnJvcihzdWJqZWN0KSB7XG4gIHJldHVybiAoXG4gICAgaXNFcnJvcihzdWJqZWN0KSAmJlxuICAgIFsnTkVYVF9OT1RfRk9VTkQnLCAnTkVYVF9IVFRQX0VSUk9SX0ZBTExCQUNLOzQwNCddLmluY2x1ZGVzKFxuICAgICAgKHN1YmplY3QgKS5kaWdlc3QgLFxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgaW5wdXQgaXMgYSBOZXh0LmpzIHJlZGlyZWN0IGVycm9yLlxuICogaHR0cHM6Ly9iZXRhLm5leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL3JlZGlyZWN0I3JlZGlyZWN0XG4gKi9cbmZ1bmN0aW9uIGlzUmVkaXJlY3ROYXZpZ2F0aW9uRXJyb3Ioc3ViamVjdCkge1xuICByZXR1cm4gKFxuICAgIGlzRXJyb3Ioc3ViamVjdCkgJiZcbiAgICB0eXBlb2YgKHN1YmplY3QgKS5kaWdlc3QgPT09ICdzdHJpbmcnICYmXG4gICAgKHN1YmplY3QgKS5kaWdlc3Quc3RhcnRzV2l0aCgnTkVYVF9SRURJUkVDVDsnKSAvLyBhIHJlZGlyZWN0IGRpZ2VzdCBsb29rcyBsaWtlIFwiTkVYVF9SRURJUkVDVDtbcmVkaXJlY3QgcGF0aF1cIlxuICApO1xufVxuXG5leHBvcnQgeyBpc05vdEZvdW5kTmF2aWdhdGlvbkVycm9yLCBpc1JlZGlyZWN0TmF2aWdhdGlvbkVycm9yIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1uZXh0TmF2aWdhdGlvbkVycm9yVXRpbHMuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/nextNavigationErrorUtils.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/_error.js":
/*!*****************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/_error.js ***!
  \*****************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   captureUnderscoreErrorException: () => (/* binding */ captureUnderscoreErrorException)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _utils_responseEnd_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/responseEnd.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/responseEnd.js\");\n\n\n\n/**\n * Capture the exception passed by nextjs to the `_error` page, adding context data as appropriate.\n *\n * @param contextOrProps The data passed to either `getInitialProps` or `render` by nextjs\n */\nasync function captureUnderscoreErrorException(contextOrProps) {\n  const { req, res, err } = contextOrProps;\n\n  // 404s (and other 400-y friends) can trigger `_error`, but we don't want to send them to Sentry\n  const statusCode = res?.statusCode || contextOrProps.statusCode;\n  if (statusCode && statusCode < 500) {\n    return Promise.resolve();\n  }\n\n  // In previous versions of the suggested `_error.js` page in which this function is meant to be used, there was a\n  // workaround for https://github.com/vercel/next.js/issues/8592 which involved an extra call to this function, in the\n  // custom error component's `render` method, just in case it hadn't been called by `getInitialProps`. Now that that\n  // issue has been fixed, the second call is unnecessary, but since it lives in user code rather than our code, users\n  // have to be the ones to get rid of it, and guaraneteedly, not all of them will. So, rather than capture the error\n  // twice, we just bail if we sense we're in that now-extraneous second call. (We can tell which function we're in\n  // because Nextjs passes `pathname` to `getInitialProps` but not to `render`.)\n  if (!contextOrProps.pathname) {\n    return Promise.resolve();\n  }\n\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.withScope)(scope => {\n    if (req) {\n      const normalizedRequest = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.httpRequestToRequestData)(req);\n      scope.setSDKProcessingMetadata({ normalizedRequest });\n    }\n\n    // If third-party libraries (or users themselves) throw something falsy, we want to capture it as a message (which\n    // is what passing a string to `captureException` will wind up doing)\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureException)(err || `_error.js called with falsy error (${err})`, {\n      mechanism: {\n        type: 'instrument',\n        handled: false,\n        data: {\n          function: '_error.getInitialProps',\n        },\n      },\n    });\n  });\n\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.vercelWaitUntil)((0,_utils_responseEnd_js__WEBPACK_IMPORTED_MODULE_1__.flushSafelyWithTimeout)());\n}\n\n\n//# sourceMappingURL=_error.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vcGFnZXMtcm91dGVyLWluc3RydW1lbnRhdGlvbi9fZXJyb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXNHO0FBQ3JDOztBQUVqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLGdCQUFnQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLHVEQUFTO0FBQ1g7QUFDQSxnQ0FBZ0Msc0VBQXdCO0FBQ3hELHVDQUF1QyxtQkFBbUI7QUFDMUQ7O0FBRUE7QUFDQTtBQUNBLElBQUksOERBQWdCLDhDQUE4QyxJQUFJO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHOztBQUVILEVBQUUsNkRBQWUsQ0FBQyw2RUFBc0I7QUFDeEM7O0FBRTJDO0FBQzNDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrbmV4dGpzQDkuNDYuMF9Ab3BlbnRlbGVtZXRyeStjb250ZXh0LWFzeW5jLWhvb2tzQDEuMzAuMV9Ab3BlbnRlbGVtZXRyeSthcGlAMS45Ll9iNWJkZWNmMzMzZTc0Nzg0OWI0YjczYzQ1N2JkY2EwNi9ub2RlX21vZHVsZXMvQHNlbnRyeS9uZXh0anMvYnVpbGQvZXNtL2NvbW1vbi9wYWdlcy1yb3V0ZXItaW5zdHJ1bWVudGF0aW9uL19lcnJvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB3aXRoU2NvcGUsIGh0dHBSZXF1ZXN0VG9SZXF1ZXN0RGF0YSwgY2FwdHVyZUV4Y2VwdGlvbiwgdmVyY2VsV2FpdFVudGlsIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGZsdXNoU2FmZWx5V2l0aFRpbWVvdXQgfSBmcm9tICcuLi91dGlscy9yZXNwb25zZUVuZC5qcyc7XG5cbi8qKlxuICogQ2FwdHVyZSB0aGUgZXhjZXB0aW9uIHBhc3NlZCBieSBuZXh0anMgdG8gdGhlIGBfZXJyb3JgIHBhZ2UsIGFkZGluZyBjb250ZXh0IGRhdGEgYXMgYXBwcm9wcmlhdGUuXG4gKlxuICogQHBhcmFtIGNvbnRleHRPclByb3BzIFRoZSBkYXRhIHBhc3NlZCB0byBlaXRoZXIgYGdldEluaXRpYWxQcm9wc2Agb3IgYHJlbmRlcmAgYnkgbmV4dGpzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVVbmRlcnNjb3JlRXJyb3JFeGNlcHRpb24oY29udGV4dE9yUHJvcHMpIHtcbiAgY29uc3QgeyByZXEsIHJlcywgZXJyIH0gPSBjb250ZXh0T3JQcm9wcztcblxuICAvLyA0MDRzIChhbmQgb3RoZXIgNDAwLXkgZnJpZW5kcykgY2FuIHRyaWdnZXIgYF9lcnJvcmAsIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHNlbmQgdGhlbSB0byBTZW50cnlcbiAgY29uc3Qgc3RhdHVzQ29kZSA9IHJlcz8uc3RhdHVzQ29kZSB8fCBjb250ZXh0T3JQcm9wcy5zdGF0dXNDb2RlO1xuICBpZiAoc3RhdHVzQ29kZSAmJiBzdGF0dXNDb2RlIDwgNTAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgLy8gSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgdGhlIHN1Z2dlc3RlZCBgX2Vycm9yLmpzYCBwYWdlIGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgdXNlZCwgdGhlcmUgd2FzIGFcbiAgLy8gd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9uZXh0LmpzL2lzc3Vlcy84NTkyIHdoaWNoIGludm9sdmVkIGFuIGV4dHJhIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiwgaW4gdGhlXG4gIC8vIGN1c3RvbSBlcnJvciBjb21wb25lbnQncyBgcmVuZGVyYCBtZXRob2QsIGp1c3QgaW4gY2FzZSBpdCBoYWRuJ3QgYmVlbiBjYWxsZWQgYnkgYGdldEluaXRpYWxQcm9wc2AuIE5vdyB0aGF0IHRoYXRcbiAgLy8gaXNzdWUgaGFzIGJlZW4gZml4ZWQsIHRoZSBzZWNvbmQgY2FsbCBpcyB1bm5lY2Vzc2FyeSwgYnV0IHNpbmNlIGl0IGxpdmVzIGluIHVzZXIgY29kZSByYXRoZXIgdGhhbiBvdXIgY29kZSwgdXNlcnNcbiAgLy8gaGF2ZSB0byBiZSB0aGUgb25lcyB0byBnZXQgcmlkIG9mIGl0LCBhbmQgZ3VhcmFuZXRlZWRseSwgbm90IGFsbCBvZiB0aGVtIHdpbGwuIFNvLCByYXRoZXIgdGhhbiBjYXB0dXJlIHRoZSBlcnJvclxuICAvLyB0d2ljZSwgd2UganVzdCBiYWlsIGlmIHdlIHNlbnNlIHdlJ3JlIGluIHRoYXQgbm93LWV4dHJhbmVvdXMgc2Vjb25kIGNhbGwuIChXZSBjYW4gdGVsbCB3aGljaCBmdW5jdGlvbiB3ZSdyZSBpblxuICAvLyBiZWNhdXNlIE5leHRqcyBwYXNzZXMgYHBhdGhuYW1lYCB0byBgZ2V0SW5pdGlhbFByb3BzYCBidXQgbm90IHRvIGByZW5kZXJgLilcbiAgaWYgKCFjb250ZXh0T3JQcm9wcy5wYXRobmFtZSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHdpdGhTY29wZShzY29wZSA9PiB7XG4gICAgaWYgKHJlcSkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFJlcXVlc3QgPSBodHRwUmVxdWVzdFRvUmVxdWVzdERhdGEocmVxKTtcbiAgICAgIHNjb3BlLnNldFNES1Byb2Nlc3NpbmdNZXRhZGF0YSh7IG5vcm1hbGl6ZWRSZXF1ZXN0IH0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoaXJkLXBhcnR5IGxpYnJhcmllcyAob3IgdXNlcnMgdGhlbXNlbHZlcykgdGhyb3cgc29tZXRoaW5nIGZhbHN5LCB3ZSB3YW50IHRvIGNhcHR1cmUgaXQgYXMgYSBtZXNzYWdlICh3aGljaFxuICAgIC8vIGlzIHdoYXQgcGFzc2luZyBhIHN0cmluZyB0byBgY2FwdHVyZUV4Y2VwdGlvbmAgd2lsbCB3aW5kIHVwIGRvaW5nKVxuICAgIGNhcHR1cmVFeGNlcHRpb24oZXJyIHx8IGBfZXJyb3IuanMgY2FsbGVkIHdpdGggZmFsc3kgZXJyb3IgKCR7ZXJyfSlgLCB7XG4gICAgICBtZWNoYW5pc206IHtcbiAgICAgICAgdHlwZTogJ2luc3RydW1lbnQnLFxuICAgICAgICBoYW5kbGVkOiBmYWxzZSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGZ1bmN0aW9uOiAnX2Vycm9yLmdldEluaXRpYWxQcm9wcycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcblxuICB2ZXJjZWxXYWl0VW50aWwoZmx1c2hTYWZlbHlXaXRoVGltZW91dCgpKTtcbn1cblxuZXhwb3J0IHsgY2FwdHVyZVVuZGVyc2NvcmVFcnJvckV4Y2VwdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9X2Vycm9yLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/_error.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapApiHandlerWithSentryVercelCrons.js":
/*!**********************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapApiHandlerWithSentryVercelCrons.js ***!
  \**********************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   wrapApiHandlerWithSentryVercelCrons: () => (/* binding */ wrapApiHandlerWithSentryVercelCrons)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\n/**\n * Wraps a function with Sentry crons instrumentation by automatically sending check-ins for the given Vercel crons config.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction wrapApiHandlerWithSentryVercelCrons(\n  handler,\n  vercelCronsConfig,\n) {\n  return new Proxy(handler, {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    apply: (originalFunction, thisArg, args) => {\n      if (!args?.[0]) {\n        return originalFunction.apply(thisArg, args);\n      }\n\n      const [req] = args ;\n\n      let maybePromiseResult;\n      const cronsKey = 'nextUrl' in req ? req.nextUrl.pathname : req.url;\n      const userAgentHeader = 'nextUrl' in req ? req.headers.get('user-agent') : req.headers['user-agent'];\n\n      if (\n        !vercelCronsConfig || // do nothing if vercel crons config is missing\n        !userAgentHeader?.includes('vercel-cron') // do nothing if endpoint is not called from vercel crons\n      ) {\n        return originalFunction.apply(thisArg, args);\n      }\n\n      const vercelCron = vercelCronsConfig.find(vercelCron => vercelCron.path === cronsKey);\n\n      if (!vercelCron?.path || !vercelCron.schedule) {\n        return originalFunction.apply(thisArg, args);\n      }\n\n      const monitorSlug = vercelCron.path;\n\n      const checkInId = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureCheckIn)(\n        {\n          monitorSlug,\n          status: 'in_progress',\n        },\n        {\n          maxRuntime: 60 * 12, // (minutes) so 12 hours - just a very high arbitrary number since we don't know the actual duration of the users cron job\n          schedule: {\n            type: 'crontab',\n            value: vercelCron.schedule,\n          },\n        },\n      );\n\n      const startTime = Date.now() / 1000;\n\n      const handleErrorCase = () => {\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureCheckIn)({\n          checkInId,\n          monitorSlug,\n          status: 'error',\n          duration: Date.now() / 1000 - startTime,\n        });\n      };\n\n      try {\n        maybePromiseResult = originalFunction.apply(thisArg, args);\n      } catch (e) {\n        handleErrorCase();\n        throw e;\n      }\n\n      if (typeof maybePromiseResult === 'object' && maybePromiseResult !== null && 'then' in maybePromiseResult) {\n        Promise.resolve(maybePromiseResult).then(\n          () => {\n            (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureCheckIn)({\n              checkInId,\n              monitorSlug,\n              status: 'ok',\n              duration: Date.now() / 1000 - startTime,\n            });\n          },\n          () => {\n            handleErrorCase();\n          },\n        );\n\n        // It is very important that we return the original promise here, because Next.js attaches various properties\n        // to that promise and will throw if they are not on the returned value.\n        return maybePromiseResult;\n      } else {\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureCheckIn)({\n          checkInId,\n          monitorSlug,\n          status: 'ok',\n          duration: Date.now() / 1000 - startTime,\n        });\n        return maybePromiseResult;\n      }\n    },\n  });\n}\n\n\n//# sourceMappingURL=wrapApiHandlerWithSentryVercelCrons.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vcGFnZXMtcm91dGVyLWluc3RydW1lbnRhdGlvbi93cmFwQXBpSGFuZGxlcldpdGhTZW50cnlWZXJjZWxDcm9ucy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUE4Qzs7QUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx3QkFBd0IsNERBQWM7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUOztBQUVBOztBQUVBO0FBQ0EsUUFBUSw0REFBYztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDREQUFjO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFdBQVc7QUFDWDtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixRQUFRLDREQUFjO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUUrQztBQUMvQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vcGFnZXMtcm91dGVyLWluc3RydW1lbnRhdGlvbi93cmFwQXBpSGFuZGxlcldpdGhTZW50cnlWZXJjZWxDcm9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjYXB0dXJlQ2hlY2tJbiB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5cbi8qKlxuICogV3JhcHMgYSBmdW5jdGlvbiB3aXRoIFNlbnRyeSBjcm9ucyBpbnN0cnVtZW50YXRpb24gYnkgYXV0b21hdGljYWxseSBzZW5kaW5nIGNoZWNrLWlucyBmb3IgdGhlIGdpdmVuIFZlcmNlbCBjcm9ucyBjb25maWcuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiB3cmFwQXBpSGFuZGxlcldpdGhTZW50cnlWZXJjZWxDcm9ucyhcbiAgaGFuZGxlcixcbiAgdmVyY2VsQ3JvbnNDb25maWcsXG4pIHtcbiAgcmV0dXJuIG5ldyBQcm94eShoYW5kbGVyLCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBhcHBseTogKG9yaWdpbmFsRnVuY3Rpb24sIHRoaXNBcmcsIGFyZ3MpID0+IHtcbiAgICAgIGlmICghYXJncz8uWzBdKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbEZ1bmN0aW9uLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBbcmVxXSA9IGFyZ3MgO1xuXG4gICAgICBsZXQgbWF5YmVQcm9taXNlUmVzdWx0O1xuICAgICAgY29uc3QgY3JvbnNLZXkgPSAnbmV4dFVybCcgaW4gcmVxID8gcmVxLm5leHRVcmwucGF0aG5hbWUgOiByZXEudXJsO1xuICAgICAgY29uc3QgdXNlckFnZW50SGVhZGVyID0gJ25leHRVcmwnIGluIHJlcSA/IHJlcS5oZWFkZXJzLmdldCgndXNlci1hZ2VudCcpIDogcmVxLmhlYWRlcnNbJ3VzZXItYWdlbnQnXTtcblxuICAgICAgaWYgKFxuICAgICAgICAhdmVyY2VsQ3JvbnNDb25maWcgfHwgLy8gZG8gbm90aGluZyBpZiB2ZXJjZWwgY3JvbnMgY29uZmlnIGlzIG1pc3NpbmdcbiAgICAgICAgIXVzZXJBZ2VudEhlYWRlcj8uaW5jbHVkZXMoJ3ZlcmNlbC1jcm9uJykgLy8gZG8gbm90aGluZyBpZiBlbmRwb2ludCBpcyBub3QgY2FsbGVkIGZyb20gdmVyY2VsIGNyb25zXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsRnVuY3Rpb24uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZlcmNlbENyb24gPSB2ZXJjZWxDcm9uc0NvbmZpZy5maW5kKHZlcmNlbENyb24gPT4gdmVyY2VsQ3Jvbi5wYXRoID09PSBjcm9uc0tleSk7XG5cbiAgICAgIGlmICghdmVyY2VsQ3Jvbj8ucGF0aCB8fCAhdmVyY2VsQ3Jvbi5zY2hlZHVsZSkge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWxGdW5jdGlvbi5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbW9uaXRvclNsdWcgPSB2ZXJjZWxDcm9uLnBhdGg7XG5cbiAgICAgIGNvbnN0IGNoZWNrSW5JZCA9IGNhcHR1cmVDaGVja0luKFxuICAgICAgICB7XG4gICAgICAgICAgbW9uaXRvclNsdWcsXG4gICAgICAgICAgc3RhdHVzOiAnaW5fcHJvZ3Jlc3MnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbWF4UnVudGltZTogNjAgKiAxMiwgLy8gKG1pbnV0ZXMpIHNvIDEyIGhvdXJzIC0ganVzdCBhIHZlcnkgaGlnaCBhcmJpdHJhcnkgbnVtYmVyIHNpbmNlIHdlIGRvbid0IGtub3cgdGhlIGFjdHVhbCBkdXJhdGlvbiBvZiB0aGUgdXNlcnMgY3JvbiBqb2JcbiAgICAgICAgICBzY2hlZHVsZToge1xuICAgICAgICAgICAgdHlwZTogJ2Nyb250YWInLFxuICAgICAgICAgICAgdmFsdWU6IHZlcmNlbENyb24uc2NoZWR1bGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCkgLyAxMDAwO1xuXG4gICAgICBjb25zdCBoYW5kbGVFcnJvckNhc2UgPSAoKSA9PiB7XG4gICAgICAgIGNhcHR1cmVDaGVja0luKHtcbiAgICAgICAgICBjaGVja0luSWQsXG4gICAgICAgICAgbW9uaXRvclNsdWcsXG4gICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAgIGR1cmF0aW9uOiBEYXRlLm5vdygpIC8gMTAwMCAtIHN0YXJ0VGltZSxcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICB0cnkge1xuICAgICAgICBtYXliZVByb21pc2VSZXN1bHQgPSBvcmlnaW5hbEZ1bmN0aW9uLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBoYW5kbGVFcnJvckNhc2UoKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBtYXliZVByb21pc2VSZXN1bHQgPT09ICdvYmplY3QnICYmIG1heWJlUHJvbWlzZVJlc3VsdCAhPT0gbnVsbCAmJiAndGhlbicgaW4gbWF5YmVQcm9taXNlUmVzdWx0KSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShtYXliZVByb21pc2VSZXN1bHQpLnRoZW4oXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgY2FwdHVyZUNoZWNrSW4oe1xuICAgICAgICAgICAgICBjaGVja0luSWQsXG4gICAgICAgICAgICAgIG1vbml0b3JTbHVnLFxuICAgICAgICAgICAgICBzdGF0dXM6ICdvaycsXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiBEYXRlLm5vdygpIC8gMTAwMCAtIHN0YXJ0VGltZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgaGFuZGxlRXJyb3JDYXNlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBJdCBpcyB2ZXJ5IGltcG9ydGFudCB0aGF0IHdlIHJldHVybiB0aGUgb3JpZ2luYWwgcHJvbWlzZSBoZXJlLCBiZWNhdXNlIE5leHQuanMgYXR0YWNoZXMgdmFyaW91cyBwcm9wZXJ0aWVzXG4gICAgICAgIC8vIHRvIHRoYXQgcHJvbWlzZSBhbmQgd2lsbCB0aHJvdyBpZiB0aGV5IGFyZSBub3Qgb24gdGhlIHJldHVybmVkIHZhbHVlLlxuICAgICAgICByZXR1cm4gbWF5YmVQcm9taXNlUmVzdWx0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FwdHVyZUNoZWNrSW4oe1xuICAgICAgICAgIGNoZWNrSW5JZCxcbiAgICAgICAgICBtb25pdG9yU2x1ZyxcbiAgICAgICAgICBzdGF0dXM6ICdvaycsXG4gICAgICAgICAgZHVyYXRpb246IERhdGUubm93KCkgLyAxMDAwIC0gc3RhcnRUaW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG1heWJlUHJvbWlzZVJlc3VsdDtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IHsgd3JhcEFwaUhhbmRsZXJXaXRoU2VudHJ5VmVyY2VsQ3JvbnMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdyYXBBcGlIYW5kbGVyV2l0aFNlbnRyeVZlcmNlbENyb25zLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapApiHandlerWithSentryVercelCrons.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapAppGetInitialPropsWithSentry.js":
/*!*******************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapAppGetInitialPropsWithSentry.js ***!
  \*******************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   wrapAppGetInitialPropsWithSentry: () => (/* binding */ wrapAppGetInitialPropsWithSentry)\n/* harmony export */ });\n/* harmony import */ var _utils_isBuild_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/isBuild.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/isBuild.js\");\n/* harmony import */ var _utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/wrapperUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/wrapperUtils.js\");\n\n\n\n/**\n * Create a wrapped version of the user's exported `getInitialProps` function in\n * a custom app (\"_app.js\").\n *\n * @param origAppGetInitialProps The user's `getInitialProps` function\n * @param parameterizedRoute The page's parameterized route\n * @returns A wrapped version of the function\n */\nfunction wrapAppGetInitialPropsWithSentry(origAppGetInitialProps) {\n  return new Proxy(origAppGetInitialProps, {\n    apply: async (wrappingTarget, thisArg, args) => {\n      if ((0,_utils_isBuild_js__WEBPACK_IMPORTED_MODULE_0__.isBuild)()) {\n        return wrappingTarget.apply(thisArg, args);\n      }\n\n      const [context] = args;\n      const { req, res } = context.ctx;\n\n      const errorWrappedAppGetInitialProps = (0,_utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_1__.withErrorInstrumentation)(wrappingTarget);\n\n      // Generally we can assume that `req` and `res` are always defined on the server:\n      // https://nextjs.org/docs/api-reference/data-fetching/get-initial-props#context-object\n      // This does not seem to be the case in dev mode. Because we have no clean way of associating the the data fetcher\n      // span with each other when there are no req or res objects, we simply do not trace them at all here.\n      if (req && res) {\n        const tracedGetInitialProps = (0,_utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_1__.withTracedServerSideDataFetcher)(errorWrappedAppGetInitialProps, req, res, {\n          dataFetcherRouteName: '/_app',\n          requestedRouteName: context.ctx.pathname,\n          dataFetchingMethodName: 'getInitialProps',\n        });\n\n        const {\n          data: appGetInitialProps,\n          sentryTrace,\n          baggage,\n        }\n\n = await tracedGetInitialProps.apply(thisArg, args);\n\n        if (typeof appGetInitialProps === 'object' && appGetInitialProps !== null) {\n          // Per definition, `pageProps` is not optional, however an increased amount of users doesn't seem to call\n          // `App.getInitialProps(appContext)` in their custom `_app` pages which is required as per\n          // https://nextjs.org/docs/advanced-features/custom-app - resulting in missing `pageProps`.\n          // For this reason, we just handle the case where `pageProps` doesn't exist explicitly.\n          if (!(appGetInitialProps ).pageProps) {\n            (appGetInitialProps ).pageProps = {};\n          }\n\n          // The Next.js serializer throws on undefined values so we need to guard for it (#12102)\n          if (sentryTrace) {\n            (appGetInitialProps ).pageProps._sentryTraceData = sentryTrace;\n          }\n\n          // The Next.js serializer throws on undefined values so we need to guard for it (#12102)\n          if (baggage) {\n            (appGetInitialProps ).pageProps._sentryBaggage = baggage;\n          }\n        }\n\n        return appGetInitialProps;\n      } else {\n        return errorWrappedAppGetInitialProps.apply(thisArg, args);\n      }\n    },\n  });\n}\n\n\n//# sourceMappingURL=wrapAppGetInitialPropsWithSentry.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vcGFnZXMtcm91dGVyLWluc3RydW1lbnRhdGlvbi93cmFwQXBwR2V0SW5pdGlhbFByb3BzV2l0aFNlbnRyeS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBOEM7QUFDdUQ7O0FBRXJHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDBEQUFPO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLFdBQVc7O0FBRXpCLDZDQUE2QyxnRkFBd0I7O0FBRXJFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsdUZBQStCO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7O0FBRTRDO0FBQzVDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrbmV4dGpzQDkuNDYuMF9Ab3BlbnRlbGVtZXRyeStjb250ZXh0LWFzeW5jLWhvb2tzQDEuMzAuMV9Ab3BlbnRlbGVtZXRyeSthcGlAMS45Ll9iNWJkZWNmMzMzZTc0Nzg0OWI0YjczYzQ1N2JkY2EwNi9ub2RlX21vZHVsZXMvQHNlbnRyeS9uZXh0anMvYnVpbGQvZXNtL2NvbW1vbi9wYWdlcy1yb3V0ZXItaW5zdHJ1bWVudGF0aW9uL3dyYXBBcHBHZXRJbml0aWFsUHJvcHNXaXRoU2VudHJ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQnVpbGQgfSBmcm9tICcuLi91dGlscy9pc0J1aWxkLmpzJztcbmltcG9ydCB7IHdpdGhUcmFjZWRTZXJ2ZXJTaWRlRGF0YUZldGNoZXIsIHdpdGhFcnJvckluc3RydW1lbnRhdGlvbiB9IGZyb20gJy4uL3V0aWxzL3dyYXBwZXJVdGlscy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGEgd3JhcHBlZCB2ZXJzaW9uIG9mIHRoZSB1c2VyJ3MgZXhwb3J0ZWQgYGdldEluaXRpYWxQcm9wc2AgZnVuY3Rpb24gaW5cbiAqIGEgY3VzdG9tIGFwcCAoXCJfYXBwLmpzXCIpLlxuICpcbiAqIEBwYXJhbSBvcmlnQXBwR2V0SW5pdGlhbFByb3BzIFRoZSB1c2VyJ3MgYGdldEluaXRpYWxQcm9wc2AgZnVuY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJpemVkUm91dGUgVGhlIHBhZ2UncyBwYXJhbWV0ZXJpemVkIHJvdXRlXG4gKiBAcmV0dXJucyBBIHdyYXBwZWQgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gd3JhcEFwcEdldEluaXRpYWxQcm9wc1dpdGhTZW50cnkob3JpZ0FwcEdldEluaXRpYWxQcm9wcykge1xuICByZXR1cm4gbmV3IFByb3h5KG9yaWdBcHBHZXRJbml0aWFsUHJvcHMsIHtcbiAgICBhcHBseTogYXN5bmMgKHdyYXBwaW5nVGFyZ2V0LCB0aGlzQXJnLCBhcmdzKSA9PiB7XG4gICAgICBpZiAoaXNCdWlsZCgpKSB7XG4gICAgICAgIHJldHVybiB3cmFwcGluZ1RhcmdldC5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2NvbnRleHRdID0gYXJncztcbiAgICAgIGNvbnN0IHsgcmVxLCByZXMgfSA9IGNvbnRleHQuY3R4O1xuXG4gICAgICBjb25zdCBlcnJvcldyYXBwZWRBcHBHZXRJbml0aWFsUHJvcHMgPSB3aXRoRXJyb3JJbnN0cnVtZW50YXRpb24od3JhcHBpbmdUYXJnZXQpO1xuXG4gICAgICAvLyBHZW5lcmFsbHkgd2UgY2FuIGFzc3VtZSB0aGF0IGByZXFgIGFuZCBgcmVzYCBhcmUgYWx3YXlzIGRlZmluZWQgb24gdGhlIHNlcnZlcjpcbiAgICAgIC8vIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvZGF0YS1mZXRjaGluZy9nZXQtaW5pdGlhbC1wcm9wcyNjb250ZXh0LW9iamVjdFxuICAgICAgLy8gVGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIHRoZSBjYXNlIGluIGRldiBtb2RlLiBCZWNhdXNlIHdlIGhhdmUgbm8gY2xlYW4gd2F5IG9mIGFzc29jaWF0aW5nIHRoZSB0aGUgZGF0YSBmZXRjaGVyXG4gICAgICAvLyBzcGFuIHdpdGggZWFjaCBvdGhlciB3aGVuIHRoZXJlIGFyZSBubyByZXEgb3IgcmVzIG9iamVjdHMsIHdlIHNpbXBseSBkbyBub3QgdHJhY2UgdGhlbSBhdCBhbGwgaGVyZS5cbiAgICAgIGlmIChyZXEgJiYgcmVzKSB7XG4gICAgICAgIGNvbnN0IHRyYWNlZEdldEluaXRpYWxQcm9wcyA9IHdpdGhUcmFjZWRTZXJ2ZXJTaWRlRGF0YUZldGNoZXIoZXJyb3JXcmFwcGVkQXBwR2V0SW5pdGlhbFByb3BzLCByZXEsIHJlcywge1xuICAgICAgICAgIGRhdGFGZXRjaGVyUm91dGVOYW1lOiAnL19hcHAnLFxuICAgICAgICAgIHJlcXVlc3RlZFJvdXRlTmFtZTogY29udGV4dC5jdHgucGF0aG5hbWUsXG4gICAgICAgICAgZGF0YUZldGNoaW5nTWV0aG9kTmFtZTogJ2dldEluaXRpYWxQcm9wcycsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBkYXRhOiBhcHBHZXRJbml0aWFsUHJvcHMsXG4gICAgICAgICAgc2VudHJ5VHJhY2UsXG4gICAgICAgICAgYmFnZ2FnZSxcbiAgICAgICAgfVxuXG4gPSBhd2FpdCB0cmFjZWRHZXRJbml0aWFsUHJvcHMuYXBwbHkodGhpc0FyZywgYXJncyk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhcHBHZXRJbml0aWFsUHJvcHMgPT09ICdvYmplY3QnICYmIGFwcEdldEluaXRpYWxQcm9wcyAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFBlciBkZWZpbml0aW9uLCBgcGFnZVByb3BzYCBpcyBub3Qgb3B0aW9uYWwsIGhvd2V2ZXIgYW4gaW5jcmVhc2VkIGFtb3VudCBvZiB1c2VycyBkb2Vzbid0IHNlZW0gdG8gY2FsbFxuICAgICAgICAgIC8vIGBBcHAuZ2V0SW5pdGlhbFByb3BzKGFwcENvbnRleHQpYCBpbiB0aGVpciBjdXN0b20gYF9hcHBgIHBhZ2VzIHdoaWNoIGlzIHJlcXVpcmVkIGFzIHBlclxuICAgICAgICAgIC8vIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FkdmFuY2VkLWZlYXR1cmVzL2N1c3RvbS1hcHAgLSByZXN1bHRpbmcgaW4gbWlzc2luZyBgcGFnZVByb3BzYC5cbiAgICAgICAgICAvLyBGb3IgdGhpcyByZWFzb24sIHdlIGp1c3QgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGBwYWdlUHJvcHNgIGRvZXNuJ3QgZXhpc3QgZXhwbGljaXRseS5cbiAgICAgICAgICBpZiAoIShhcHBHZXRJbml0aWFsUHJvcHMgKS5wYWdlUHJvcHMpIHtcbiAgICAgICAgICAgIChhcHBHZXRJbml0aWFsUHJvcHMgKS5wYWdlUHJvcHMgPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBUaGUgTmV4dC5qcyBzZXJpYWxpemVyIHRocm93cyBvbiB1bmRlZmluZWQgdmFsdWVzIHNvIHdlIG5lZWQgdG8gZ3VhcmQgZm9yIGl0ICgjMTIxMDIpXG4gICAgICAgICAgaWYgKHNlbnRyeVRyYWNlKSB7XG4gICAgICAgICAgICAoYXBwR2V0SW5pdGlhbFByb3BzICkucGFnZVByb3BzLl9zZW50cnlUcmFjZURhdGEgPSBzZW50cnlUcmFjZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBUaGUgTmV4dC5qcyBzZXJpYWxpemVyIHRocm93cyBvbiB1bmRlZmluZWQgdmFsdWVzIHNvIHdlIG5lZWQgdG8gZ3VhcmQgZm9yIGl0ICgjMTIxMDIpXG4gICAgICAgICAgaWYgKGJhZ2dhZ2UpIHtcbiAgICAgICAgICAgIChhcHBHZXRJbml0aWFsUHJvcHMgKS5wYWdlUHJvcHMuX3NlbnRyeUJhZ2dhZ2UgPSBiYWdnYWdlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcHBHZXRJbml0aWFsUHJvcHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZXJyb3JXcmFwcGVkQXBwR2V0SW5pdGlhbFByb3BzLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgeyB3cmFwQXBwR2V0SW5pdGlhbFByb3BzV2l0aFNlbnRyeSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d3JhcEFwcEdldEluaXRpYWxQcm9wc1dpdGhTZW50cnkuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapAppGetInitialPropsWithSentry.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapDocumentGetInitialPropsWithSentry.js":
/*!************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapDocumentGetInitialPropsWithSentry.js ***!
  \************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   wrapDocumentGetInitialPropsWithSentry: () => (/* binding */ wrapDocumentGetInitialPropsWithSentry)\n/* harmony export */ });\n/* harmony import */ var _utils_isBuild_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/isBuild.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/isBuild.js\");\n/* harmony import */ var _utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/wrapperUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/wrapperUtils.js\");\n\n\n\n/**\n * Create a wrapped version of the user's exported `getInitialProps` function in\n * a custom document (\"_document.js\").\n *\n * @param origDocumentGetInitialProps The user's `getInitialProps` function\n * @param parameterizedRoute The page's parameterized route\n * @returns A wrapped version of the function\n */\nfunction wrapDocumentGetInitialPropsWithSentry(\n  origDocumentGetInitialProps,\n) {\n  return new Proxy(origDocumentGetInitialProps, {\n    apply: async (wrappingTarget, thisArg, args) => {\n      if ((0,_utils_isBuild_js__WEBPACK_IMPORTED_MODULE_0__.isBuild)()) {\n        return wrappingTarget.apply(thisArg, args);\n      }\n\n      const [context] = args;\n      const { req, res } = context;\n\n      const errorWrappedGetInitialProps = (0,_utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_1__.withErrorInstrumentation)(wrappingTarget);\n      // Generally we can assume that `req` and `res` are always defined on the server:\n      // https://nextjs.org/docs/api-reference/data-fetching/get-initial-props#context-object\n      // This does not seem to be the case in dev mode. Because we have no clean way of associating the the data fetcher\n      // span with each other when there are no req or res objects, we simply do not trace them at all here.\n      if (req && res) {\n        const tracedGetInitialProps = (0,_utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_1__.withTracedServerSideDataFetcher)(errorWrappedGetInitialProps, req, res, {\n          dataFetcherRouteName: '/_document',\n          requestedRouteName: context.pathname,\n          dataFetchingMethodName: 'getInitialProps',\n        });\n\n        const { data } = await tracedGetInitialProps.apply(thisArg, args);\n        return data;\n      } else {\n        return errorWrappedGetInitialProps.apply(thisArg, args);\n      }\n    },\n  });\n}\n\n\n//# sourceMappingURL=wrapDocumentGetInitialPropsWithSentry.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vcGFnZXMtcm91dGVyLWluc3RydW1lbnRhdGlvbi93cmFwRG9jdW1lbnRHZXRJbml0aWFsUHJvcHNXaXRoU2VudHJ5LmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUE4QztBQUN1RDs7QUFFckc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDBEQUFPO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLFdBQVc7O0FBRXpCLDBDQUEwQyxnRkFBd0I7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyx1RkFBK0I7QUFDckU7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVCxnQkFBZ0IsT0FBTztBQUN2QjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFaUQ7QUFDakQiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStuZXh0anNAOS40Ni4wX0BvcGVudGVsZW1ldHJ5K2NvbnRleHQtYXN5bmMtaG9va3NAMS4zMC4xX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuX2I1YmRlY2YzMzNlNzQ3ODQ5YjRiNzNjNDU3YmRjYTA2L25vZGVfbW9kdWxlcy9Ac2VudHJ5L25leHRqcy9idWlsZC9lc20vY29tbW9uL3BhZ2VzLXJvdXRlci1pbnN0cnVtZW50YXRpb24vd3JhcERvY3VtZW50R2V0SW5pdGlhbFByb3BzV2l0aFNlbnRyeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0J1aWxkIH0gZnJvbSAnLi4vdXRpbHMvaXNCdWlsZC5qcyc7XG5pbXBvcnQgeyB3aXRoVHJhY2VkU2VydmVyU2lkZURhdGFGZXRjaGVyLCB3aXRoRXJyb3JJbnN0cnVtZW50YXRpb24gfSBmcm9tICcuLi91dGlscy93cmFwcGVyVXRpbHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIHdyYXBwZWQgdmVyc2lvbiBvZiB0aGUgdXNlcidzIGV4cG9ydGVkIGBnZXRJbml0aWFsUHJvcHNgIGZ1bmN0aW9uIGluXG4gKiBhIGN1c3RvbSBkb2N1bWVudCAoXCJfZG9jdW1lbnQuanNcIikuXG4gKlxuICogQHBhcmFtIG9yaWdEb2N1bWVudEdldEluaXRpYWxQcm9wcyBUaGUgdXNlcidzIGBnZXRJbml0aWFsUHJvcHNgIGZ1bmN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyaXplZFJvdXRlIFRoZSBwYWdlJ3MgcGFyYW1ldGVyaXplZCByb3V0ZVxuICogQHJldHVybnMgQSB3cmFwcGVkIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHdyYXBEb2N1bWVudEdldEluaXRpYWxQcm9wc1dpdGhTZW50cnkoXG4gIG9yaWdEb2N1bWVudEdldEluaXRpYWxQcm9wcyxcbikge1xuICByZXR1cm4gbmV3IFByb3h5KG9yaWdEb2N1bWVudEdldEluaXRpYWxQcm9wcywge1xuICAgIGFwcGx5OiBhc3luYyAod3JhcHBpbmdUYXJnZXQsIHRoaXNBcmcsIGFyZ3MpID0+IHtcbiAgICAgIGlmIChpc0J1aWxkKCkpIHtcbiAgICAgICAgcmV0dXJuIHdyYXBwaW5nVGFyZ2V0LmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBbY29udGV4dF0gPSBhcmdzO1xuICAgICAgY29uc3QgeyByZXEsIHJlcyB9ID0gY29udGV4dDtcblxuICAgICAgY29uc3QgZXJyb3JXcmFwcGVkR2V0SW5pdGlhbFByb3BzID0gd2l0aEVycm9ySW5zdHJ1bWVudGF0aW9uKHdyYXBwaW5nVGFyZ2V0KTtcbiAgICAgIC8vIEdlbmVyYWxseSB3ZSBjYW4gYXNzdW1lIHRoYXQgYHJlcWAgYW5kIGByZXNgIGFyZSBhbHdheXMgZGVmaW5lZCBvbiB0aGUgc2VydmVyOlxuICAgICAgLy8gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9kYXRhLWZldGNoaW5nL2dldC1pbml0aWFsLXByb3BzI2NvbnRleHQtb2JqZWN0XG4gICAgICAvLyBUaGlzIGRvZXMgbm90IHNlZW0gdG8gYmUgdGhlIGNhc2UgaW4gZGV2IG1vZGUuIEJlY2F1c2Ugd2UgaGF2ZSBubyBjbGVhbiB3YXkgb2YgYXNzb2NpYXRpbmcgdGhlIHRoZSBkYXRhIGZldGNoZXJcbiAgICAgIC8vIHNwYW4gd2l0aCBlYWNoIG90aGVyIHdoZW4gdGhlcmUgYXJlIG5vIHJlcSBvciByZXMgb2JqZWN0cywgd2Ugc2ltcGx5IGRvIG5vdCB0cmFjZSB0aGVtIGF0IGFsbCBoZXJlLlxuICAgICAgaWYgKHJlcSAmJiByZXMpIHtcbiAgICAgICAgY29uc3QgdHJhY2VkR2V0SW5pdGlhbFByb3BzID0gd2l0aFRyYWNlZFNlcnZlclNpZGVEYXRhRmV0Y2hlcihlcnJvcldyYXBwZWRHZXRJbml0aWFsUHJvcHMsIHJlcSwgcmVzLCB7XG4gICAgICAgICAgZGF0YUZldGNoZXJSb3V0ZU5hbWU6ICcvX2RvY3VtZW50JyxcbiAgICAgICAgICByZXF1ZXN0ZWRSb3V0ZU5hbWU6IGNvbnRleHQucGF0aG5hbWUsXG4gICAgICAgICAgZGF0YUZldGNoaW5nTWV0aG9kTmFtZTogJ2dldEluaXRpYWxQcm9wcycsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdHJhY2VkR2V0SW5pdGlhbFByb3BzLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlcnJvcldyYXBwZWRHZXRJbml0aWFsUHJvcHMuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydCB7IHdyYXBEb2N1bWVudEdldEluaXRpYWxQcm9wc1dpdGhTZW50cnkgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdyYXBEb2N1bWVudEdldEluaXRpYWxQcm9wc1dpdGhTZW50cnkuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapDocumentGetInitialPropsWithSentry.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapErrorGetInitialPropsWithSentry.js":
/*!*********************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapErrorGetInitialPropsWithSentry.js ***!
  \*********************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   wrapErrorGetInitialPropsWithSentry: () => (/* binding */ wrapErrorGetInitialPropsWithSentry)\n/* harmony export */ });\n/* harmony import */ var _utils_isBuild_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/isBuild.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/isBuild.js\");\n/* harmony import */ var _utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/wrapperUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/wrapperUtils.js\");\n\n\n\n/**\n * Create a wrapped version of the user's exported `getInitialProps` function in\n * a custom error page (\"_error.js\").\n *\n * @param origErrorGetInitialProps The user's `getInitialProps` function\n * @param parameterizedRoute The page's parameterized route\n * @returns A wrapped version of the function\n */\nfunction wrapErrorGetInitialPropsWithSentry(\n  origErrorGetInitialProps,\n) {\n  return new Proxy(origErrorGetInitialProps, {\n    apply: async (wrappingTarget, thisArg, args) => {\n      if ((0,_utils_isBuild_js__WEBPACK_IMPORTED_MODULE_0__.isBuild)()) {\n        return wrappingTarget.apply(thisArg, args);\n      }\n\n      const [context] = args;\n      const { req, res } = context;\n\n      const errorWrappedGetInitialProps = (0,_utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_1__.withErrorInstrumentation)(wrappingTarget);\n      // Generally we can assume that `req` and `res` are always defined on the server:\n      // https://nextjs.org/docs/api-reference/data-fetching/get-initial-props#context-object\n      // This does not seem to be the case in dev mode. Because we have no clean way of associating the the data fetcher\n      // span with each other when there are no req or res objects, we simply do not trace them at all here.\n      if (req && res) {\n        const tracedGetInitialProps = (0,_utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_1__.withTracedServerSideDataFetcher)(errorWrappedGetInitialProps, req, res, {\n          dataFetcherRouteName: '/_error',\n          requestedRouteName: context.pathname,\n          dataFetchingMethodName: 'getInitialProps',\n        });\n\n        const {\n          data: errorGetInitialProps,\n          baggage,\n          sentryTrace,\n        }\n\n = await tracedGetInitialProps.apply(thisArg, args);\n\n        if (typeof errorGetInitialProps === 'object' && errorGetInitialProps !== null) {\n          if (sentryTrace) {\n            // The Next.js serializer throws on undefined values so we need to guard for it (#12102)\n            (errorGetInitialProps )._sentryTraceData = sentryTrace;\n          }\n\n          // The Next.js serializer throws on undefined values so we need to guard for it (#12102)\n          if (baggage) {\n            (errorGetInitialProps )._sentryBaggage = baggage;\n          }\n        }\n\n        return errorGetInitialProps;\n      } else {\n        return errorWrappedGetInitialProps.apply(thisArg, args);\n      }\n    },\n  });\n}\n\n\n//# sourceMappingURL=wrapErrorGetInitialPropsWithSentry.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vcGFnZXMtcm91dGVyLWluc3RydW1lbnRhdGlvbi93cmFwRXJyb3JHZXRJbml0aWFsUHJvcHNXaXRoU2VudHJ5LmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUE4QztBQUN1RDs7QUFFckc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDBEQUFPO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLFdBQVc7O0FBRXpCLDBDQUEwQyxnRkFBd0I7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyx1RkFBK0I7QUFDckU7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFOEM7QUFDOUMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStuZXh0anNAOS40Ni4wX0BvcGVudGVsZW1ldHJ5K2NvbnRleHQtYXN5bmMtaG9va3NAMS4zMC4xX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuX2I1YmRlY2YzMzNlNzQ3ODQ5YjRiNzNjNDU3YmRjYTA2L25vZGVfbW9kdWxlcy9Ac2VudHJ5L25leHRqcy9idWlsZC9lc20vY29tbW9uL3BhZ2VzLXJvdXRlci1pbnN0cnVtZW50YXRpb24vd3JhcEVycm9yR2V0SW5pdGlhbFByb3BzV2l0aFNlbnRyeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0J1aWxkIH0gZnJvbSAnLi4vdXRpbHMvaXNCdWlsZC5qcyc7XG5pbXBvcnQgeyB3aXRoVHJhY2VkU2VydmVyU2lkZURhdGFGZXRjaGVyLCB3aXRoRXJyb3JJbnN0cnVtZW50YXRpb24gfSBmcm9tICcuLi91dGlscy93cmFwcGVyVXRpbHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIHdyYXBwZWQgdmVyc2lvbiBvZiB0aGUgdXNlcidzIGV4cG9ydGVkIGBnZXRJbml0aWFsUHJvcHNgIGZ1bmN0aW9uIGluXG4gKiBhIGN1c3RvbSBlcnJvciBwYWdlIChcIl9lcnJvci5qc1wiKS5cbiAqXG4gKiBAcGFyYW0gb3JpZ0Vycm9yR2V0SW5pdGlhbFByb3BzIFRoZSB1c2VyJ3MgYGdldEluaXRpYWxQcm9wc2AgZnVuY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJpemVkUm91dGUgVGhlIHBhZ2UncyBwYXJhbWV0ZXJpemVkIHJvdXRlXG4gKiBAcmV0dXJucyBBIHdyYXBwZWQgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gd3JhcEVycm9yR2V0SW5pdGlhbFByb3BzV2l0aFNlbnRyeShcbiAgb3JpZ0Vycm9yR2V0SW5pdGlhbFByb3BzLFxuKSB7XG4gIHJldHVybiBuZXcgUHJveHkob3JpZ0Vycm9yR2V0SW5pdGlhbFByb3BzLCB7XG4gICAgYXBwbHk6IGFzeW5jICh3cmFwcGluZ1RhcmdldCwgdGhpc0FyZywgYXJncykgPT4ge1xuICAgICAgaWYgKGlzQnVpbGQoKSkge1xuICAgICAgICByZXR1cm4gd3JhcHBpbmdUYXJnZXQuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFtjb250ZXh0XSA9IGFyZ3M7XG4gICAgICBjb25zdCB7IHJlcSwgcmVzIH0gPSBjb250ZXh0O1xuXG4gICAgICBjb25zdCBlcnJvcldyYXBwZWRHZXRJbml0aWFsUHJvcHMgPSB3aXRoRXJyb3JJbnN0cnVtZW50YXRpb24od3JhcHBpbmdUYXJnZXQpO1xuICAgICAgLy8gR2VuZXJhbGx5IHdlIGNhbiBhc3N1bWUgdGhhdCBgcmVxYCBhbmQgYHJlc2AgYXJlIGFsd2F5cyBkZWZpbmVkIG9uIHRoZSBzZXJ2ZXI6XG4gICAgICAvLyBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL2RhdGEtZmV0Y2hpbmcvZ2V0LWluaXRpYWwtcHJvcHMjY29udGV4dC1vYmplY3RcbiAgICAgIC8vIFRoaXMgZG9lcyBub3Qgc2VlbSB0byBiZSB0aGUgY2FzZSBpbiBkZXYgbW9kZS4gQmVjYXVzZSB3ZSBoYXZlIG5vIGNsZWFuIHdheSBvZiBhc3NvY2lhdGluZyB0aGUgdGhlIGRhdGEgZmV0Y2hlclxuICAgICAgLy8gc3BhbiB3aXRoIGVhY2ggb3RoZXIgd2hlbiB0aGVyZSBhcmUgbm8gcmVxIG9yIHJlcyBvYmplY3RzLCB3ZSBzaW1wbHkgZG8gbm90IHRyYWNlIHRoZW0gYXQgYWxsIGhlcmUuXG4gICAgICBpZiAocmVxICYmIHJlcykge1xuICAgICAgICBjb25zdCB0cmFjZWRHZXRJbml0aWFsUHJvcHMgPSB3aXRoVHJhY2VkU2VydmVyU2lkZURhdGFGZXRjaGVyKGVycm9yV3JhcHBlZEdldEluaXRpYWxQcm9wcywgcmVxLCByZXMsIHtcbiAgICAgICAgICBkYXRhRmV0Y2hlclJvdXRlTmFtZTogJy9fZXJyb3InLFxuICAgICAgICAgIHJlcXVlc3RlZFJvdXRlTmFtZTogY29udGV4dC5wYXRobmFtZSxcbiAgICAgICAgICBkYXRhRmV0Y2hpbmdNZXRob2ROYW1lOiAnZ2V0SW5pdGlhbFByb3BzJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGRhdGE6IGVycm9yR2V0SW5pdGlhbFByb3BzLFxuICAgICAgICAgIGJhZ2dhZ2UsXG4gICAgICAgICAgc2VudHJ5VHJhY2UsXG4gICAgICAgIH1cblxuID0gYXdhaXQgdHJhY2VkR2V0SW5pdGlhbFByb3BzLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgZXJyb3JHZXRJbml0aWFsUHJvcHMgPT09ICdvYmplY3QnICYmIGVycm9yR2V0SW5pdGlhbFByb3BzICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHNlbnRyeVRyYWNlKSB7XG4gICAgICAgICAgICAvLyBUaGUgTmV4dC5qcyBzZXJpYWxpemVyIHRocm93cyBvbiB1bmRlZmluZWQgdmFsdWVzIHNvIHdlIG5lZWQgdG8gZ3VhcmQgZm9yIGl0ICgjMTIxMDIpXG4gICAgICAgICAgICAoZXJyb3JHZXRJbml0aWFsUHJvcHMgKS5fc2VudHJ5VHJhY2VEYXRhID0gc2VudHJ5VHJhY2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVGhlIE5leHQuanMgc2VyaWFsaXplciB0aHJvd3Mgb24gdW5kZWZpbmVkIHZhbHVlcyBzbyB3ZSBuZWVkIHRvIGd1YXJkIGZvciBpdCAoIzEyMTAyKVxuICAgICAgICAgIGlmIChiYWdnYWdlKSB7XG4gICAgICAgICAgICAoZXJyb3JHZXRJbml0aWFsUHJvcHMgKS5fc2VudHJ5QmFnZ2FnZSA9IGJhZ2dhZ2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVycm9yR2V0SW5pdGlhbFByb3BzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVycm9yV3JhcHBlZEdldEluaXRpYWxQcm9wcy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IHsgd3JhcEVycm9yR2V0SW5pdGlhbFByb3BzV2l0aFNlbnRyeSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d3JhcEVycm9yR2V0SW5pdGlhbFByb3BzV2l0aFNlbnRyeS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapErrorGetInitialPropsWithSentry.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapGetInitialPropsWithSentry.js":
/*!****************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapGetInitialPropsWithSentry.js ***!
  \****************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   wrapGetInitialPropsWithSentry: () => (/* binding */ wrapGetInitialPropsWithSentry)\n/* harmony export */ });\n/* harmony import */ var _utils_isBuild_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/isBuild.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/isBuild.js\");\n/* harmony import */ var _utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/wrapperUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/wrapperUtils.js\");\n\n\n\n/**\n * Create a wrapped version of the user's exported `getInitialProps` function\n *\n * @param origGetInitialProps The user's `getInitialProps` function\n * @param parameterizedRoute The page's parameterized route\n * @returns A wrapped version of the function\n */\nfunction wrapGetInitialPropsWithSentry(origGetInitialProps) {\n  return new Proxy(origGetInitialProps, {\n    apply: async (wrappingTarget, thisArg, args) => {\n      if ((0,_utils_isBuild_js__WEBPACK_IMPORTED_MODULE_0__.isBuild)()) {\n        return wrappingTarget.apply(thisArg, args);\n      }\n\n      const [context] = args;\n      const { req, res } = context;\n\n      const errorWrappedGetInitialProps = (0,_utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_1__.withErrorInstrumentation)(wrappingTarget);\n      // Generally we can assume that `req` and `res` are always defined on the server:\n      // https://nextjs.org/docs/api-reference/data-fetching/get-initial-props#context-object\n      // This does not seem to be the case in dev mode. Because we have no clean way of associating the the data fetcher\n      // span with each other when there are no req or res objects, we simply do not trace them at all here.\n      if (req && res) {\n        const tracedGetInitialProps = (0,_utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_1__.withTracedServerSideDataFetcher)(errorWrappedGetInitialProps, req, res, {\n          dataFetcherRouteName: context.pathname,\n          requestedRouteName: context.pathname,\n          dataFetchingMethodName: 'getInitialProps',\n        });\n\n        const {\n          data: initialProps,\n          baggage,\n          sentryTrace,\n        }\n\n = (await tracedGetInitialProps.apply(thisArg, args)) ?? {}; // Next.js allows undefined to be returned from a getInitialPropsFunction.\n\n        if (typeof initialProps === 'object' && initialProps !== null) {\n          // The Next.js serializer throws on undefined values so we need to guard for it (#12102)\n          if (sentryTrace) {\n            (initialProps )._sentryTraceData = sentryTrace;\n          }\n\n          // The Next.js serializer throws on undefined values so we need to guard for it (#12102)\n          if (baggage) {\n            (initialProps )._sentryBaggage = baggage;\n          }\n        }\n\n        return initialProps;\n      } else {\n        return errorWrappedGetInitialProps.apply(thisArg, args);\n      }\n    },\n  });\n}\n\n\n//# sourceMappingURL=wrapGetInitialPropsWithSentry.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vcGFnZXMtcm91dGVyLWluc3RydW1lbnRhdGlvbi93cmFwR2V0SW5pdGlhbFByb3BzV2l0aFNlbnRyeS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBOEM7QUFDdUQ7O0FBRXJHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSwwREFBTztBQUNqQjtBQUNBOztBQUVBO0FBQ0EsY0FBYyxXQUFXOztBQUV6QiwwQ0FBMEMsZ0ZBQXdCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsdUZBQStCO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2REFBNkQ7O0FBRTdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFeUM7QUFDekMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStuZXh0anNAOS40Ni4wX0BvcGVudGVsZW1ldHJ5K2NvbnRleHQtYXN5bmMtaG9va3NAMS4zMC4xX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuX2I1YmRlY2YzMzNlNzQ3ODQ5YjRiNzNjNDU3YmRjYTA2L25vZGVfbW9kdWxlcy9Ac2VudHJ5L25leHRqcy9idWlsZC9lc20vY29tbW9uL3BhZ2VzLXJvdXRlci1pbnN0cnVtZW50YXRpb24vd3JhcEdldEluaXRpYWxQcm9wc1dpdGhTZW50cnkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNCdWlsZCB9IGZyb20gJy4uL3V0aWxzL2lzQnVpbGQuanMnO1xuaW1wb3J0IHsgd2l0aFRyYWNlZFNlcnZlclNpZGVEYXRhRmV0Y2hlciwgd2l0aEVycm9ySW5zdHJ1bWVudGF0aW9uIH0gZnJvbSAnLi4vdXRpbHMvd3JhcHBlclV0aWxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYSB3cmFwcGVkIHZlcnNpb24gb2YgdGhlIHVzZXIncyBleHBvcnRlZCBgZ2V0SW5pdGlhbFByb3BzYCBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSBvcmlnR2V0SW5pdGlhbFByb3BzIFRoZSB1c2VyJ3MgYGdldEluaXRpYWxQcm9wc2AgZnVuY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJpemVkUm91dGUgVGhlIHBhZ2UncyBwYXJhbWV0ZXJpemVkIHJvdXRlXG4gKiBAcmV0dXJucyBBIHdyYXBwZWQgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gd3JhcEdldEluaXRpYWxQcm9wc1dpdGhTZW50cnkob3JpZ0dldEluaXRpYWxQcm9wcykge1xuICByZXR1cm4gbmV3IFByb3h5KG9yaWdHZXRJbml0aWFsUHJvcHMsIHtcbiAgICBhcHBseTogYXN5bmMgKHdyYXBwaW5nVGFyZ2V0LCB0aGlzQXJnLCBhcmdzKSA9PiB7XG4gICAgICBpZiAoaXNCdWlsZCgpKSB7XG4gICAgICAgIHJldHVybiB3cmFwcGluZ1RhcmdldC5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2NvbnRleHRdID0gYXJncztcbiAgICAgIGNvbnN0IHsgcmVxLCByZXMgfSA9IGNvbnRleHQ7XG5cbiAgICAgIGNvbnN0IGVycm9yV3JhcHBlZEdldEluaXRpYWxQcm9wcyA9IHdpdGhFcnJvckluc3RydW1lbnRhdGlvbih3cmFwcGluZ1RhcmdldCk7XG4gICAgICAvLyBHZW5lcmFsbHkgd2UgY2FuIGFzc3VtZSB0aGF0IGByZXFgIGFuZCBgcmVzYCBhcmUgYWx3YXlzIGRlZmluZWQgb24gdGhlIHNlcnZlcjpcbiAgICAgIC8vIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvZGF0YS1mZXRjaGluZy9nZXQtaW5pdGlhbC1wcm9wcyNjb250ZXh0LW9iamVjdFxuICAgICAgLy8gVGhpcyBkb2VzIG5vdCBzZWVtIHRvIGJlIHRoZSBjYXNlIGluIGRldiBtb2RlLiBCZWNhdXNlIHdlIGhhdmUgbm8gY2xlYW4gd2F5IG9mIGFzc29jaWF0aW5nIHRoZSB0aGUgZGF0YSBmZXRjaGVyXG4gICAgICAvLyBzcGFuIHdpdGggZWFjaCBvdGhlciB3aGVuIHRoZXJlIGFyZSBubyByZXEgb3IgcmVzIG9iamVjdHMsIHdlIHNpbXBseSBkbyBub3QgdHJhY2UgdGhlbSBhdCBhbGwgaGVyZS5cbiAgICAgIGlmIChyZXEgJiYgcmVzKSB7XG4gICAgICAgIGNvbnN0IHRyYWNlZEdldEluaXRpYWxQcm9wcyA9IHdpdGhUcmFjZWRTZXJ2ZXJTaWRlRGF0YUZldGNoZXIoZXJyb3JXcmFwcGVkR2V0SW5pdGlhbFByb3BzLCByZXEsIHJlcywge1xuICAgICAgICAgIGRhdGFGZXRjaGVyUm91dGVOYW1lOiBjb250ZXh0LnBhdGhuYW1lLFxuICAgICAgICAgIHJlcXVlc3RlZFJvdXRlTmFtZTogY29udGV4dC5wYXRobmFtZSxcbiAgICAgICAgICBkYXRhRmV0Y2hpbmdNZXRob2ROYW1lOiAnZ2V0SW5pdGlhbFByb3BzJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGRhdGE6IGluaXRpYWxQcm9wcyxcbiAgICAgICAgICBiYWdnYWdlLFxuICAgICAgICAgIHNlbnRyeVRyYWNlLFxuICAgICAgICB9XG5cbiA9IChhd2FpdCB0cmFjZWRHZXRJbml0aWFsUHJvcHMuYXBwbHkodGhpc0FyZywgYXJncykpID8/IHt9OyAvLyBOZXh0LmpzIGFsbG93cyB1bmRlZmluZWQgdG8gYmUgcmV0dXJuZWQgZnJvbSBhIGdldEluaXRpYWxQcm9wc0Z1bmN0aW9uLlxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFByb3BzID09PSAnb2JqZWN0JyAmJiBpbml0aWFsUHJvcHMgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUaGUgTmV4dC5qcyBzZXJpYWxpemVyIHRocm93cyBvbiB1bmRlZmluZWQgdmFsdWVzIHNvIHdlIG5lZWQgdG8gZ3VhcmQgZm9yIGl0ICgjMTIxMDIpXG4gICAgICAgICAgaWYgKHNlbnRyeVRyYWNlKSB7XG4gICAgICAgICAgICAoaW5pdGlhbFByb3BzICkuX3NlbnRyeVRyYWNlRGF0YSA9IHNlbnRyeVRyYWNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFRoZSBOZXh0LmpzIHNlcmlhbGl6ZXIgdGhyb3dzIG9uIHVuZGVmaW5lZCB2YWx1ZXMgc28gd2UgbmVlZCB0byBndWFyZCBmb3IgaXQgKCMxMjEwMilcbiAgICAgICAgICBpZiAoYmFnZ2FnZSkge1xuICAgICAgICAgICAgKGluaXRpYWxQcm9wcyApLl9zZW50cnlCYWdnYWdlID0gYmFnZ2FnZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5pdGlhbFByb3BzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVycm9yV3JhcHBlZEdldEluaXRpYWxQcm9wcy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IHsgd3JhcEdldEluaXRpYWxQcm9wc1dpdGhTZW50cnkgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdyYXBHZXRJbml0aWFsUHJvcHNXaXRoU2VudHJ5LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapGetInitialPropsWithSentry.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapGetServerSidePropsWithSentry.js":
/*!*******************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapGetServerSidePropsWithSentry.js ***!
  \*******************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   wrapGetServerSidePropsWithSentry: () => (/* binding */ wrapGetServerSidePropsWithSentry)\n/* harmony export */ });\n/* harmony import */ var _utils_isBuild_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/isBuild.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/isBuild.js\");\n/* harmony import */ var _utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/wrapperUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/wrapperUtils.js\");\n\n\n\n/**\n * Create a wrapped version of the user's exported `getServerSideProps` function\n *\n * @param origGetServerSideProps The user's `getServerSideProps` function\n * @param parameterizedRoute The page's parameterized route\n * @returns A wrapped version of the function\n */\nfunction wrapGetServerSidePropsWithSentry(\n  origGetServerSideProps,\n  parameterizedRoute,\n) {\n  return new Proxy(origGetServerSideProps, {\n    apply: async (wrappingTarget, thisArg, args) => {\n      if ((0,_utils_isBuild_js__WEBPACK_IMPORTED_MODULE_0__.isBuild)()) {\n        return wrappingTarget.apply(thisArg, args);\n      }\n\n      const [context] = args;\n      const { req, res } = context;\n\n      const errorWrappedGetServerSideProps = (0,_utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_1__.withErrorInstrumentation)(wrappingTarget);\n      const tracedGetServerSideProps = (0,_utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_1__.withTracedServerSideDataFetcher)(errorWrappedGetServerSideProps, req, res, {\n        dataFetcherRouteName: parameterizedRoute,\n        requestedRouteName: parameterizedRoute,\n        dataFetchingMethodName: 'getServerSideProps',\n      });\n\n      const {\n        data: serverSideProps,\n        baggage,\n        sentryTrace,\n      }\n\n = await (tracedGetServerSideProps.apply(thisArg, args) );\n\n      if (typeof serverSideProps === 'object' && serverSideProps !== null && 'props' in serverSideProps) {\n        // The Next.js serializer throws on undefined values so we need to guard for it (#12102)\n        if (sentryTrace) {\n          (serverSideProps.props )._sentryTraceData = sentryTrace;\n        }\n\n        // The Next.js serializer throws on undefined values so we need to guard for it (#12102)\n        if (baggage) {\n          (serverSideProps.props )._sentryBaggage = baggage;\n        }\n      }\n\n      return serverSideProps;\n    },\n  });\n}\n\n\n//# sourceMappingURL=wrapGetServerSidePropsWithSentry.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vcGFnZXMtcm91dGVyLWluc3RydW1lbnRhdGlvbi93cmFwR2V0U2VydmVyU2lkZVByb3BzV2l0aFNlbnRyeS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBOEM7QUFDdUQ7O0FBRXJHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSwwREFBTztBQUNqQjtBQUNBOztBQUVBO0FBQ0EsY0FBYyxXQUFXOztBQUV6Qiw2Q0FBNkMsZ0ZBQXdCO0FBQ3JFLHVDQUF1Qyx1RkFBK0I7QUFDdEU7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7O0FBRTRDO0FBQzVDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrbmV4dGpzQDkuNDYuMF9Ab3BlbnRlbGVtZXRyeStjb250ZXh0LWFzeW5jLWhvb2tzQDEuMzAuMV9Ab3BlbnRlbGVtZXRyeSthcGlAMS45Ll9iNWJkZWNmMzMzZTc0Nzg0OWI0YjczYzQ1N2JkY2EwNi9ub2RlX21vZHVsZXMvQHNlbnRyeS9uZXh0anMvYnVpbGQvZXNtL2NvbW1vbi9wYWdlcy1yb3V0ZXItaW5zdHJ1bWVudGF0aW9uL3dyYXBHZXRTZXJ2ZXJTaWRlUHJvcHNXaXRoU2VudHJ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQnVpbGQgfSBmcm9tICcuLi91dGlscy9pc0J1aWxkLmpzJztcbmltcG9ydCB7IHdpdGhUcmFjZWRTZXJ2ZXJTaWRlRGF0YUZldGNoZXIsIHdpdGhFcnJvckluc3RydW1lbnRhdGlvbiB9IGZyb20gJy4uL3V0aWxzL3dyYXBwZXJVdGlscy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGEgd3JhcHBlZCB2ZXJzaW9uIG9mIHRoZSB1c2VyJ3MgZXhwb3J0ZWQgYGdldFNlcnZlclNpZGVQcm9wc2AgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gb3JpZ0dldFNlcnZlclNpZGVQcm9wcyBUaGUgdXNlcidzIGBnZXRTZXJ2ZXJTaWRlUHJvcHNgIGZ1bmN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyaXplZFJvdXRlIFRoZSBwYWdlJ3MgcGFyYW1ldGVyaXplZCByb3V0ZVxuICogQHJldHVybnMgQSB3cmFwcGVkIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHdyYXBHZXRTZXJ2ZXJTaWRlUHJvcHNXaXRoU2VudHJ5KFxuICBvcmlnR2V0U2VydmVyU2lkZVByb3BzLFxuICBwYXJhbWV0ZXJpemVkUm91dGUsXG4pIHtcbiAgcmV0dXJuIG5ldyBQcm94eShvcmlnR2V0U2VydmVyU2lkZVByb3BzLCB7XG4gICAgYXBwbHk6IGFzeW5jICh3cmFwcGluZ1RhcmdldCwgdGhpc0FyZywgYXJncykgPT4ge1xuICAgICAgaWYgKGlzQnVpbGQoKSkge1xuICAgICAgICByZXR1cm4gd3JhcHBpbmdUYXJnZXQuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFtjb250ZXh0XSA9IGFyZ3M7XG4gICAgICBjb25zdCB7IHJlcSwgcmVzIH0gPSBjb250ZXh0O1xuXG4gICAgICBjb25zdCBlcnJvcldyYXBwZWRHZXRTZXJ2ZXJTaWRlUHJvcHMgPSB3aXRoRXJyb3JJbnN0cnVtZW50YXRpb24od3JhcHBpbmdUYXJnZXQpO1xuICAgICAgY29uc3QgdHJhY2VkR2V0U2VydmVyU2lkZVByb3BzID0gd2l0aFRyYWNlZFNlcnZlclNpZGVEYXRhRmV0Y2hlcihlcnJvcldyYXBwZWRHZXRTZXJ2ZXJTaWRlUHJvcHMsIHJlcSwgcmVzLCB7XG4gICAgICAgIGRhdGFGZXRjaGVyUm91dGVOYW1lOiBwYXJhbWV0ZXJpemVkUm91dGUsXG4gICAgICAgIHJlcXVlc3RlZFJvdXRlTmFtZTogcGFyYW1ldGVyaXplZFJvdXRlLFxuICAgICAgICBkYXRhRmV0Y2hpbmdNZXRob2ROYW1lOiAnZ2V0U2VydmVyU2lkZVByb3BzJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGRhdGE6IHNlcnZlclNpZGVQcm9wcyxcbiAgICAgICAgYmFnZ2FnZSxcbiAgICAgICAgc2VudHJ5VHJhY2UsXG4gICAgICB9XG5cbiA9IGF3YWl0ICh0cmFjZWRHZXRTZXJ2ZXJTaWRlUHJvcHMuYXBwbHkodGhpc0FyZywgYXJncykgKTtcblxuICAgICAgaWYgKHR5cGVvZiBzZXJ2ZXJTaWRlUHJvcHMgPT09ICdvYmplY3QnICYmIHNlcnZlclNpZGVQcm9wcyAhPT0gbnVsbCAmJiAncHJvcHMnIGluIHNlcnZlclNpZGVQcm9wcykge1xuICAgICAgICAvLyBUaGUgTmV4dC5qcyBzZXJpYWxpemVyIHRocm93cyBvbiB1bmRlZmluZWQgdmFsdWVzIHNvIHdlIG5lZWQgdG8gZ3VhcmQgZm9yIGl0ICgjMTIxMDIpXG4gICAgICAgIGlmIChzZW50cnlUcmFjZSkge1xuICAgICAgICAgIChzZXJ2ZXJTaWRlUHJvcHMucHJvcHMgKS5fc2VudHJ5VHJhY2VEYXRhID0gc2VudHJ5VHJhY2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgTmV4dC5qcyBzZXJpYWxpemVyIHRocm93cyBvbiB1bmRlZmluZWQgdmFsdWVzIHNvIHdlIG5lZWQgdG8gZ3VhcmQgZm9yIGl0ICgjMTIxMDIpXG4gICAgICAgIGlmIChiYWdnYWdlKSB7XG4gICAgICAgICAgKHNlcnZlclNpZGVQcm9wcy5wcm9wcyApLl9zZW50cnlCYWdnYWdlID0gYmFnZ2FnZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VydmVyU2lkZVByb3BzO1xuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgeyB3cmFwR2V0U2VydmVyU2lkZVByb3BzV2l0aFNlbnRyeSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d3JhcEdldFNlcnZlclNpZGVQcm9wc1dpdGhTZW50cnkuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapGetServerSidePropsWithSentry.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapGetStaticPropsWithSentry.js":
/*!***************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapGetStaticPropsWithSentry.js ***!
  \***************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   wrapGetStaticPropsWithSentry: () => (/* binding */ wrapGetStaticPropsWithSentry)\n/* harmony export */ });\n/* harmony import */ var _utils_isBuild_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/isBuild.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/isBuild.js\");\n/* harmony import */ var _utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/wrapperUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/wrapperUtils.js\");\n\n\n\n/**\n * Create a wrapped version of the user's exported `getStaticProps` function\n *\n * @param origGetStaticProps The user's `getStaticProps` function\n * @param parameterizedRoute The page's parameterized route\n * @returns A wrapped version of the function\n */\nfunction wrapGetStaticPropsWithSentry(\n  origGetStaticPropsa,\n  _parameterizedRoute,\n) {\n  return new Proxy(origGetStaticPropsa, {\n    apply: async (wrappingTarget, thisArg, args) => {\n      if ((0,_utils_isBuild_js__WEBPACK_IMPORTED_MODULE_0__.isBuild)()) {\n        return wrappingTarget.apply(thisArg, args);\n      }\n\n      const errorWrappedGetStaticProps = (0,_utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_1__.withErrorInstrumentation)(wrappingTarget);\n      return (0,_utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_1__.callDataFetcherTraced)(errorWrappedGetStaticProps, args);\n    },\n  });\n}\n\n\n//# sourceMappingURL=wrapGetStaticPropsWithSentry.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vcGFnZXMtcm91dGVyLWluc3RydW1lbnRhdGlvbi93cmFwR2V0U3RhdGljUHJvcHNXaXRoU2VudHJ5LmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUE4QztBQUM2Qzs7QUFFM0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLDBEQUFPO0FBQ2pCO0FBQ0E7O0FBRUEseUNBQXlDLGdGQUF3QjtBQUNqRSxhQUFhLDZFQUFxQjtBQUNsQyxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUV3QztBQUN4QyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vcGFnZXMtcm91dGVyLWluc3RydW1lbnRhdGlvbi93cmFwR2V0U3RhdGljUHJvcHNXaXRoU2VudHJ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQnVpbGQgfSBmcm9tICcuLi91dGlscy9pc0J1aWxkLmpzJztcbmltcG9ydCB7IGNhbGxEYXRhRmV0Y2hlclRyYWNlZCwgd2l0aEVycm9ySW5zdHJ1bWVudGF0aW9uIH0gZnJvbSAnLi4vdXRpbHMvd3JhcHBlclV0aWxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYSB3cmFwcGVkIHZlcnNpb24gb2YgdGhlIHVzZXIncyBleHBvcnRlZCBgZ2V0U3RhdGljUHJvcHNgIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIG9yaWdHZXRTdGF0aWNQcm9wcyBUaGUgdXNlcidzIGBnZXRTdGF0aWNQcm9wc2AgZnVuY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJpemVkUm91dGUgVGhlIHBhZ2UncyBwYXJhbWV0ZXJpemVkIHJvdXRlXG4gKiBAcmV0dXJucyBBIHdyYXBwZWQgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gd3JhcEdldFN0YXRpY1Byb3BzV2l0aFNlbnRyeShcbiAgb3JpZ0dldFN0YXRpY1Byb3BzYSxcbiAgX3BhcmFtZXRlcml6ZWRSb3V0ZSxcbikge1xuICByZXR1cm4gbmV3IFByb3h5KG9yaWdHZXRTdGF0aWNQcm9wc2EsIHtcbiAgICBhcHBseTogYXN5bmMgKHdyYXBwaW5nVGFyZ2V0LCB0aGlzQXJnLCBhcmdzKSA9PiB7XG4gICAgICBpZiAoaXNCdWlsZCgpKSB7XG4gICAgICAgIHJldHVybiB3cmFwcGluZ1RhcmdldC5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXJyb3JXcmFwcGVkR2V0U3RhdGljUHJvcHMgPSB3aXRoRXJyb3JJbnN0cnVtZW50YXRpb24od3JhcHBpbmdUYXJnZXQpO1xuICAgICAgcmV0dXJuIGNhbGxEYXRhRmV0Y2hlclRyYWNlZChlcnJvcldyYXBwZWRHZXRTdGF0aWNQcm9wcywgYXJncyk7XG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydCB7IHdyYXBHZXRTdGF0aWNQcm9wc1dpdGhTZW50cnkgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdyYXBHZXRTdGF0aWNQcm9wc1dpdGhTZW50cnkuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapGetStaticPropsWithSentry.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapPageComponentWithSentry.js":
/*!**************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapPageComponentWithSentry.js ***!
  \**************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   wrapPageComponentWithSentry: () => (/* binding */ wrapPageComponentWithSentry)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\nfunction isReactClassComponent(target) {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n  return typeof target === 'function' && target?.prototype?.isReactComponent;\n}\n\n/**\n * Wraps a page component with Sentry error instrumentation.\n */\nfunction wrapPageComponentWithSentry(pageComponent) {\n  if (isReactClassComponent(pageComponent)) {\n    return class SentryWrappedPageComponent extends pageComponent {\n       render(...args) {\n        return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.withIsolationScope)(() => {\n          const scope = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n          // We extract the sentry trace data that is put in the component props by datafetcher wrappers\n          const sentryTraceData =\n            typeof this.props === 'object' &&\n            this.props !== null &&\n            '_sentryTraceData' in this.props &&\n            typeof this.props._sentryTraceData === 'string'\n              ? this.props._sentryTraceData\n              : undefined;\n\n          if (sentryTraceData) {\n            const traceparentData = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.extractTraceparentData)(sentryTraceData);\n            scope.setContext('trace', {\n              span_id: traceparentData?.parentSpanId,\n              trace_id: traceparentData?.traceId,\n            });\n          }\n\n          try {\n            return super.render(...args);\n          } catch (e) {\n            (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureException)(e, {\n              mechanism: {\n                handled: false,\n              },\n            });\n            throw e;\n          }\n        });\n      }\n    };\n  } else if (typeof pageComponent === 'function') {\n    return new Proxy(pageComponent, {\n      apply(target, thisArg, argArray) {\n        return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.withIsolationScope)(() => {\n          const scope = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n          // We extract the sentry trace data that is put in the component props by datafetcher wrappers\n          const sentryTraceData = argArray?.[0]?._sentryTraceData;\n\n          if (sentryTraceData) {\n            const traceparentData = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.extractTraceparentData)(sentryTraceData);\n            scope.setContext('trace', {\n              span_id: traceparentData?.parentSpanId,\n              trace_id: traceparentData?.traceId,\n            });\n          }\n\n          try {\n            return target.apply(thisArg, argArray);\n          } catch (e) {\n            (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureException)(e, {\n              mechanism: {\n                handled: false,\n              },\n            });\n            throw e;\n          }\n        });\n      },\n    });\n  } else {\n    return pageComponent;\n  }\n}\n\n\n//# sourceMappingURL=wrapPageComponentWithSentry.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vcGFnZXMtcm91dGVyLWluc3RydW1lbnRhdGlvbi93cmFwUGFnZUNvbXBvbmVudFdpdGhTZW50cnkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBNkc7O0FBRTdHO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnRUFBa0I7QUFDakMsd0JBQXdCLDZEQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0Msb0VBQXNCO0FBQzFEO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0EsWUFBWTtBQUNaLFlBQVksOERBQWdCO0FBQzVCO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsZUFBZSxnRUFBa0I7QUFDakMsd0JBQXdCLDZEQUFlO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0Msb0VBQXNCO0FBQzFEO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0EsWUFBWTtBQUNaLFlBQVksOERBQWdCO0FBQzVCO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUV1QztBQUN2QyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vcGFnZXMtcm91dGVyLWluc3RydW1lbnRhdGlvbi93cmFwUGFnZUNvbXBvbmVudFdpdGhTZW50cnkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2l0aElzb2xhdGlvblNjb3BlLCBnZXRDdXJyZW50U2NvcGUsIGV4dHJhY3RUcmFjZXBhcmVudERhdGEsIGNhcHR1cmVFeGNlcHRpb24gfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuXG5mdW5jdGlvbiBpc1JlYWN0Q2xhc3NDb21wb25lbnQodGFyZ2V0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgcmV0dXJuIHR5cGVvZiB0YXJnZXQgPT09ICdmdW5jdGlvbicgJiYgdGFyZ2V0Py5wcm90b3R5cGU/LmlzUmVhY3RDb21wb25lbnQ7XG59XG5cbi8qKlxuICogV3JhcHMgYSBwYWdlIGNvbXBvbmVudCB3aXRoIFNlbnRyeSBlcnJvciBpbnN0cnVtZW50YXRpb24uXG4gKi9cbmZ1bmN0aW9uIHdyYXBQYWdlQ29tcG9uZW50V2l0aFNlbnRyeShwYWdlQ29tcG9uZW50KSB7XG4gIGlmIChpc1JlYWN0Q2xhc3NDb21wb25lbnQocGFnZUNvbXBvbmVudCkpIHtcbiAgICByZXR1cm4gY2xhc3MgU2VudHJ5V3JhcHBlZFBhZ2VDb21wb25lbnQgZXh0ZW5kcyBwYWdlQ29tcG9uZW50IHtcbiAgICAgICByZW5kZXIoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gd2l0aElzb2xhdGlvblNjb3BlKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBzY29wZSA9IGdldEN1cnJlbnRTY29wZSgpO1xuICAgICAgICAgIC8vIFdlIGV4dHJhY3QgdGhlIHNlbnRyeSB0cmFjZSBkYXRhIHRoYXQgaXMgcHV0IGluIHRoZSBjb21wb25lbnQgcHJvcHMgYnkgZGF0YWZldGNoZXIgd3JhcHBlcnNcbiAgICAgICAgICBjb25zdCBzZW50cnlUcmFjZURhdGEgPVxuICAgICAgICAgICAgdHlwZW9mIHRoaXMucHJvcHMgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICB0aGlzLnByb3BzICE9PSBudWxsICYmXG4gICAgICAgICAgICAnX3NlbnRyeVRyYWNlRGF0YScgaW4gdGhpcy5wcm9wcyAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMucHJvcHMuX3NlbnRyeVRyYWNlRGF0YSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgPyB0aGlzLnByb3BzLl9zZW50cnlUcmFjZURhdGFcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAoc2VudHJ5VHJhY2VEYXRhKSB7XG4gICAgICAgICAgICBjb25zdCB0cmFjZXBhcmVudERhdGEgPSBleHRyYWN0VHJhY2VwYXJlbnREYXRhKHNlbnRyeVRyYWNlRGF0YSk7XG4gICAgICAgICAgICBzY29wZS5zZXRDb250ZXh0KCd0cmFjZScsIHtcbiAgICAgICAgICAgICAgc3Bhbl9pZDogdHJhY2VwYXJlbnREYXRhPy5wYXJlbnRTcGFuSWQsXG4gICAgICAgICAgICAgIHRyYWNlX2lkOiB0cmFjZXBhcmVudERhdGE/LnRyYWNlSWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLnJlbmRlciguLi5hcmdzKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjYXB0dXJlRXhjZXB0aW9uKGUsIHtcbiAgICAgICAgICAgICAgbWVjaGFuaXNtOiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlZDogZmFsc2UsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwYWdlQ29tcG9uZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm94eShwYWdlQ29tcG9uZW50LCB7XG4gICAgICBhcHBseSh0YXJnZXQsIHRoaXNBcmcsIGFyZ0FycmF5KSB7XG4gICAgICAgIHJldHVybiB3aXRoSXNvbGF0aW9uU2NvcGUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNjb3BlID0gZ2V0Q3VycmVudFNjb3BlKCk7XG4gICAgICAgICAgLy8gV2UgZXh0cmFjdCB0aGUgc2VudHJ5IHRyYWNlIGRhdGEgdGhhdCBpcyBwdXQgaW4gdGhlIGNvbXBvbmVudCBwcm9wcyBieSBkYXRhZmV0Y2hlciB3cmFwcGVyc1xuICAgICAgICAgIGNvbnN0IHNlbnRyeVRyYWNlRGF0YSA9IGFyZ0FycmF5Py5bMF0/Ll9zZW50cnlUcmFjZURhdGE7XG5cbiAgICAgICAgICBpZiAoc2VudHJ5VHJhY2VEYXRhKSB7XG4gICAgICAgICAgICBjb25zdCB0cmFjZXBhcmVudERhdGEgPSBleHRyYWN0VHJhY2VwYXJlbnREYXRhKHNlbnRyeVRyYWNlRGF0YSk7XG4gICAgICAgICAgICBzY29wZS5zZXRDb250ZXh0KCd0cmFjZScsIHtcbiAgICAgICAgICAgICAgc3Bhbl9pZDogdHJhY2VwYXJlbnREYXRhPy5wYXJlbnRTcGFuSWQsXG4gICAgICAgICAgICAgIHRyYWNlX2lkOiB0cmFjZXBhcmVudERhdGE/LnRyYWNlSWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseSh0aGlzQXJnLCBhcmdBcnJheSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY2FwdHVyZUV4Y2VwdGlvbihlLCB7XG4gICAgICAgICAgICAgIG1lY2hhbmlzbToge1xuICAgICAgICAgICAgICAgIGhhbmRsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYWdlQ29tcG9uZW50O1xuICB9XG59XG5cbmV4cG9ydCB7IHdyYXBQYWdlQ29tcG9uZW50V2l0aFNlbnRyeSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d3JhcFBhZ2VDb21wb25lbnRXaXRoU2VudHJ5LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapPageComponentWithSentry.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/span-attributes-with-logic-attached.js":
/*!*****************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/span-attributes-with-logic-attached.js ***!
  \*****************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   TRANSACTION_ATTR_SENTRY_ROUTE_BACKFILL: () => (/* binding */ TRANSACTION_ATTR_SENTRY_ROUTE_BACKFILL),\n/* harmony export */   TRANSACTION_ATTR_SENTRY_TRACE_BACKFILL: () => (/* binding */ TRANSACTION_ATTR_SENTRY_TRACE_BACKFILL),\n/* harmony export */   TRANSACTION_ATTR_SHOULD_DROP_TRANSACTION: () => (/* binding */ TRANSACTION_ATTR_SHOULD_DROP_TRANSACTION)\n/* harmony export */ });\n/**\n * If this attribute is attached to a transaction, the Next.js SDK will drop that transaction.\n */\nconst TRANSACTION_ATTR_SHOULD_DROP_TRANSACTION = 'sentry.drop_transaction';\n\nconst TRANSACTION_ATTR_SENTRY_TRACE_BACKFILL = 'sentry.sentry_trace_backfill';\n\nconst TRANSACTION_ATTR_SENTRY_ROUTE_BACKFILL = 'sentry.route_backfill';\n\n\n//# sourceMappingURL=span-attributes-with-logic-attached.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vc3Bhbi1hdHRyaWJ1dGVzLXdpdGgtbG9naWMtYXR0YWNoZWQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRW9JO0FBQ3BJIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrbmV4dGpzQDkuNDYuMF9Ab3BlbnRlbGVtZXRyeStjb250ZXh0LWFzeW5jLWhvb2tzQDEuMzAuMV9Ab3BlbnRlbGVtZXRyeSthcGlAMS45Ll9iNWJkZWNmMzMzZTc0Nzg0OWI0YjczYzQ1N2JkY2EwNi9ub2RlX21vZHVsZXMvQHNlbnRyeS9uZXh0anMvYnVpbGQvZXNtL2NvbW1vbi9zcGFuLWF0dHJpYnV0ZXMtd2l0aC1sb2dpYy1hdHRhY2hlZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIElmIHRoaXMgYXR0cmlidXRlIGlzIGF0dGFjaGVkIHRvIGEgdHJhbnNhY3Rpb24sIHRoZSBOZXh0LmpzIFNESyB3aWxsIGRyb3AgdGhhdCB0cmFuc2FjdGlvbi5cbiAqL1xuY29uc3QgVFJBTlNBQ1RJT05fQVRUUl9TSE9VTERfRFJPUF9UUkFOU0FDVElPTiA9ICdzZW50cnkuZHJvcF90cmFuc2FjdGlvbic7XG5cbmNvbnN0IFRSQU5TQUNUSU9OX0FUVFJfU0VOVFJZX1RSQUNFX0JBQ0tGSUxMID0gJ3NlbnRyeS5zZW50cnlfdHJhY2VfYmFja2ZpbGwnO1xuXG5jb25zdCBUUkFOU0FDVElPTl9BVFRSX1NFTlRSWV9ST1VURV9CQUNLRklMTCA9ICdzZW50cnkucm91dGVfYmFja2ZpbGwnO1xuXG5leHBvcnQgeyBUUkFOU0FDVElPTl9BVFRSX1NFTlRSWV9ST1VURV9CQUNLRklMTCwgVFJBTlNBQ1RJT05fQVRUUl9TRU5UUllfVFJBQ0VfQkFDS0ZJTEwsIFRSQU5TQUNUSU9OX0FUVFJfU0hPVUxEX0RST1BfVFJBTlNBQ1RJT04gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNwYW4tYXR0cmlidXRlcy13aXRoLWxvZ2ljLWF0dGFjaGVkLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/span-attributes-with-logic-attached.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/isBuild.js":
/*!*******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/isBuild.js ***!
  \*******************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   isBuild: () => (/* binding */ isBuild)\n/* harmony export */ });\n/* harmony import */ var next_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! next/constants */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/api/constants.js\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js\");\n\n\n/**\n * Decide if the currently running process is part of the build phase or happening at runtime.\n */\nfunction isBuild() {\n  return process.env.NEXT_PHASE === next_constants__WEBPACK_IMPORTED_MODULE_0__.PHASE_PRODUCTION_BUILD;\n}\n\n\n//# sourceMappingURL=isBuild.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vdXRpbHMvaXNCdWlsZC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBd0Q7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxPQUFPLG9CQUFvQixrRUFBc0I7QUFDMUQ7O0FBRW1CO0FBQ25CIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrbmV4dGpzQDkuNDYuMF9Ab3BlbnRlbGVtZXRyeStjb250ZXh0LWFzeW5jLWhvb2tzQDEuMzAuMV9Ab3BlbnRlbGVtZXRyeSthcGlAMS45Ll9iNWJkZWNmMzMzZTc0Nzg0OWI0YjczYzQ1N2JkY2EwNi9ub2RlX21vZHVsZXMvQHNlbnRyeS9uZXh0anMvYnVpbGQvZXNtL2NvbW1vbi91dGlscy9pc0J1aWxkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBIQVNFX1BST0RVQ1RJT05fQlVJTEQgfSBmcm9tICduZXh0L2NvbnN0YW50cyc7XG5cbi8qKlxuICogRGVjaWRlIGlmIHRoZSBjdXJyZW50bHkgcnVubmluZyBwcm9jZXNzIGlzIHBhcnQgb2YgdGhlIGJ1aWxkIHBoYXNlIG9yIGhhcHBlbmluZyBhdCBydW50aW1lLlxuICovXG5mdW5jdGlvbiBpc0J1aWxkKCkge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuTkVYVF9QSEFTRSA9PT0gUEhBU0VfUFJPRFVDVElPTl9CVUlMRDtcbn1cblxuZXhwb3J0IHsgaXNCdWlsZCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNCdWlsZC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/isBuild.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/responseEnd.js":
/*!***********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/responseEnd.js ***!
  \***********************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   flushSafelyWithTimeout: () => (/* binding */ flushSafelyWithTimeout)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/debug-build.js\");\n\n\n\n/**\n * Flushes pending Sentry events with a 2 second timeout and in a way that cannot create unhandled promise rejections.\n */\nasync function flushSafelyWithTimeout() {\n  try {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log('Flushing events...');\n    await (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.flush)(2000);\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log('Done flushing events');\n  } catch (e) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log('Error while flushing events:\\n', e);\n  }\n}\n\n\n//# sourceMappingURL=responseEnd.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vdXRpbHMvcmVzcG9uc2VFbmQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTRDO0FBQ0k7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHdEQUFXLElBQUksK0NBQUs7QUFDeEIsVUFBVSxtREFBSztBQUNmLElBQUksd0RBQVcsSUFBSSwrQ0FBSztBQUN4QixJQUFJO0FBQ0osSUFBSSx3REFBVyxJQUFJLCtDQUFLO0FBQ3hCO0FBQ0E7O0FBRWtDO0FBQ2xDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrbmV4dGpzQDkuNDYuMF9Ab3BlbnRlbGVtZXRyeStjb250ZXh0LWFzeW5jLWhvb2tzQDEuMzAuMV9Ab3BlbnRlbGVtZXRyeSthcGlAMS45Ll9iNWJkZWNmMzMzZTc0Nzg0OWI0YjczYzQ1N2JkY2EwNi9ub2RlX21vZHVsZXMvQHNlbnRyeS9uZXh0anMvYnVpbGQvZXNtL2NvbW1vbi91dGlscy9yZXNwb25zZUVuZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWJ1ZywgZmx1c2ggfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuLi9kZWJ1Zy1idWlsZC5qcyc7XG5cbi8qKlxuICogRmx1c2hlcyBwZW5kaW5nIFNlbnRyeSBldmVudHMgd2l0aCBhIDIgc2Vjb25kIHRpbWVvdXQgYW5kIGluIGEgd2F5IHRoYXQgY2Fubm90IGNyZWF0ZSB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25zLlxuICovXG5hc3luYyBmdW5jdGlvbiBmbHVzaFNhZmVseVdpdGhUaW1lb3V0KCkge1xuICB0cnkge1xuICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLmxvZygnRmx1c2hpbmcgZXZlbnRzLi4uJyk7XG4gICAgYXdhaXQgZmx1c2goMjAwMCk7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKCdEb25lIGZsdXNoaW5nIGV2ZW50cycpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKCdFcnJvciB3aGlsZSBmbHVzaGluZyBldmVudHM6XFxuJywgZSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgZmx1c2hTYWZlbHlXaXRoVGltZW91dCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzcG9uc2VFbmQuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/responseEnd.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/tracingUtils.js":
/*!************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/tracingUtils.js ***!
  \************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   commonObjectToIsolationScope: () => (/* binding */ commonObjectToIsolationScope),\n/* harmony export */   commonObjectToPropagationContext: () => (/* binding */ commonObjectToPropagationContext),\n/* harmony export */   dropNextjsRootContext: () => (/* binding */ dropNextjsRootContext),\n/* harmony export */   escapeNextjsTracing: () => (/* binding */ escapeNextjsTracing)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/debug-build.js\");\n/* harmony import */ var _span_attributes_with_logic_attached_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../span-attributes-with-logic-attached.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/span-attributes-with-logic-attached.js\");\n\n\n\n\nconst commonPropagationContextMap = new WeakMap();\n\n/**\n * Takes a shared (garbage collectable) object between resources, e.g. a headers object shared between Next.js server components and returns a common propagation context.\n *\n * @param commonObject The shared object.\n * @param propagationContext The propagation context that should be shared between all the resources if no propagation context was registered yet.\n * @returns the shared propagation context.\n */\nfunction commonObjectToPropagationContext(\n  commonObject,\n  propagationContext,\n) {\n  if (typeof commonObject === 'object' && commonObject) {\n    const memoPropagationContext = commonPropagationContextMap.get(commonObject);\n    if (memoPropagationContext) {\n      return memoPropagationContext;\n    } else {\n      commonPropagationContextMap.set(commonObject, propagationContext);\n      return propagationContext;\n    }\n  } else {\n    return propagationContext;\n  }\n}\n\nconst commonIsolationScopeMap = new WeakMap();\n\n/**\n * Takes a shared (garbage collectable) object between resources, e.g. a headers object shared between Next.js server components and returns a common propagation context.\n *\n * @param commonObject The shared object.\n * @param isolationScope The isolationScope that should be shared between all the resources if no isolation scope was created yet.\n * @returns the shared isolation scope.\n */\nfunction commonObjectToIsolationScope(commonObject) {\n  if (typeof commonObject === 'object' && commonObject) {\n    const memoIsolationScope = commonIsolationScopeMap.get(commonObject);\n    if (memoIsolationScope) {\n      return memoIsolationScope;\n    } else {\n      const newIsolationScope = new _sentry_core__WEBPACK_IMPORTED_MODULE_0__.Scope();\n      commonIsolationScopeMap.set(commonObject, newIsolationScope);\n      return newIsolationScope;\n    }\n  } else {\n    return new _sentry_core__WEBPACK_IMPORTED_MODULE_0__.Scope();\n  }\n}\n\nlet nextjsEscapedAsyncStorage;\n\n/**\n * Will mark the execution context of the callback as \"escaped\" from Next.js internal tracing by unsetting the active\n * span and propagation context. When an execution passes through this function multiple times, it is a noop after the\n * first time.\n */\nfunction escapeNextjsTracing(cb) {\n  const MaybeGlobalAsyncLocalStorage = (_sentry_core__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ )\n    .AsyncLocalStorage;\n\n  if (!MaybeGlobalAsyncLocalStorage) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD &&\n      _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn(\n        \"Tried to register AsyncLocalStorage async context strategy in a runtime that doesn't support AsyncLocalStorage.\",\n      );\n    return cb();\n  }\n\n  if (!nextjsEscapedAsyncStorage) {\n    nextjsEscapedAsyncStorage = new MaybeGlobalAsyncLocalStorage();\n  }\n\n  if (nextjsEscapedAsyncStorage.getStore()) {\n    return cb();\n  } else {\n    return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.startNewTrace)(() => {\n      return nextjsEscapedAsyncStorage.run(true, () => {\n        return cb();\n      });\n    });\n  }\n}\n\n/**\n * Ideally this function never lands in the develop branch.\n *\n * Drops the entire span tree this function was called in, if it was a span tree created by Next.js.\n */\nfunction dropNextjsRootContext() {\n  const nextJsOwnedSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n  if (nextJsOwnedSpan) {\n    const rootSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(nextJsOwnedSpan);\n    const rootSpanAttributes = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(rootSpan).data;\n    if (rootSpanAttributes?.['next.span_type']) {\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(nextJsOwnedSpan)?.setAttribute(_span_attributes_with_logic_attached_js__WEBPACK_IMPORTED_MODULE_2__.TRANSACTION_ATTR_SHOULD_DROP_TRANSACTION, true);\n    }\n  }\n}\n\n\n//# sourceMappingURL=tracingUtils.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vdXRpbHMvdHJhY2luZ1V0aWxzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBK0c7QUFDL0Q7QUFDcUQ7O0FBRXJHOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixvQ0FBb0MsK0NBQUs7QUFDekM7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLGVBQWUsK0NBQUs7QUFDcEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0Msb0RBQVU7QUFDbEQ7O0FBRUE7QUFDQSxJQUFJLHdEQUFXO0FBQ2YsTUFBTSwrQ0FBSztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLFdBQVcsMkRBQWE7QUFDeEI7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsMkRBQWE7QUFDdkM7QUFDQSxxQkFBcUIseURBQVc7QUFDaEMsK0JBQStCLHdEQUFVO0FBQ3pDO0FBQ0EsTUFBTSx5REFBVyxnQ0FBZ0MsNkdBQXdDO0FBQ3pGO0FBQ0E7QUFDQTs7QUFFc0g7QUFDdEgiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStuZXh0anNAOS40Ni4wX0BvcGVudGVsZW1ldHJ5K2NvbnRleHQtYXN5bmMtaG9va3NAMS4zMC4xX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuX2I1YmRlY2YzMzNlNzQ3ODQ5YjRiNzNjNDU3YmRjYTA2L25vZGVfbW9kdWxlcy9Ac2VudHJ5L25leHRqcy9idWlsZC9lc20vY29tbW9uL3V0aWxzL3RyYWNpbmdVdGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRBY3RpdmVTcGFuLCBnZXRSb290U3Bhbiwgc3BhblRvSlNPTiwgR0xPQkFMX09CSiwgZGVidWcsIHN0YXJ0TmV3VHJhY2UsIFNjb3BlIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IERFQlVHX0JVSUxEIH0gZnJvbSAnLi4vZGVidWctYnVpbGQuanMnO1xuaW1wb3J0IHsgVFJBTlNBQ1RJT05fQVRUUl9TSE9VTERfRFJPUF9UUkFOU0FDVElPTiB9IGZyb20gJy4uL3NwYW4tYXR0cmlidXRlcy13aXRoLWxvZ2ljLWF0dGFjaGVkLmpzJztcblxuY29uc3QgY29tbW9uUHJvcGFnYXRpb25Db250ZXh0TWFwID0gbmV3IFdlYWtNYXAoKTtcblxuLyoqXG4gKiBUYWtlcyBhIHNoYXJlZCAoZ2FyYmFnZSBjb2xsZWN0YWJsZSkgb2JqZWN0IGJldHdlZW4gcmVzb3VyY2VzLCBlLmcuIGEgaGVhZGVycyBvYmplY3Qgc2hhcmVkIGJldHdlZW4gTmV4dC5qcyBzZXJ2ZXIgY29tcG9uZW50cyBhbmQgcmV0dXJucyBhIGNvbW1vbiBwcm9wYWdhdGlvbiBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSBjb21tb25PYmplY3QgVGhlIHNoYXJlZCBvYmplY3QuXG4gKiBAcGFyYW0gcHJvcGFnYXRpb25Db250ZXh0IFRoZSBwcm9wYWdhdGlvbiBjb250ZXh0IHRoYXQgc2hvdWxkIGJlIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGUgcmVzb3VyY2VzIGlmIG5vIHByb3BhZ2F0aW9uIGNvbnRleHQgd2FzIHJlZ2lzdGVyZWQgeWV0LlxuICogQHJldHVybnMgdGhlIHNoYXJlZCBwcm9wYWdhdGlvbiBjb250ZXh0LlxuICovXG5mdW5jdGlvbiBjb21tb25PYmplY3RUb1Byb3BhZ2F0aW9uQ29udGV4dChcbiAgY29tbW9uT2JqZWN0LFxuICBwcm9wYWdhdGlvbkNvbnRleHQsXG4pIHtcbiAgaWYgKHR5cGVvZiBjb21tb25PYmplY3QgPT09ICdvYmplY3QnICYmIGNvbW1vbk9iamVjdCkge1xuICAgIGNvbnN0IG1lbW9Qcm9wYWdhdGlvbkNvbnRleHQgPSBjb21tb25Qcm9wYWdhdGlvbkNvbnRleHRNYXAuZ2V0KGNvbW1vbk9iamVjdCk7XG4gICAgaWYgKG1lbW9Qcm9wYWdhdGlvbkNvbnRleHQpIHtcbiAgICAgIHJldHVybiBtZW1vUHJvcGFnYXRpb25Db250ZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21tb25Qcm9wYWdhdGlvbkNvbnRleHRNYXAuc2V0KGNvbW1vbk9iamVjdCwgcHJvcGFnYXRpb25Db250ZXh0KTtcbiAgICAgIHJldHVybiBwcm9wYWdhdGlvbkNvbnRleHQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBwcm9wYWdhdGlvbkNvbnRleHQ7XG4gIH1cbn1cblxuY29uc3QgY29tbW9uSXNvbGF0aW9uU2NvcGVNYXAgPSBuZXcgV2Vha01hcCgpO1xuXG4vKipcbiAqIFRha2VzIGEgc2hhcmVkIChnYXJiYWdlIGNvbGxlY3RhYmxlKSBvYmplY3QgYmV0d2VlbiByZXNvdXJjZXMsIGUuZy4gYSBoZWFkZXJzIG9iamVjdCBzaGFyZWQgYmV0d2VlbiBOZXh0LmpzIHNlcnZlciBjb21wb25lbnRzIGFuZCByZXR1cm5zIGEgY29tbW9uIHByb3BhZ2F0aW9uIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIGNvbW1vbk9iamVjdCBUaGUgc2hhcmVkIG9iamVjdC5cbiAqIEBwYXJhbSBpc29sYXRpb25TY29wZSBUaGUgaXNvbGF0aW9uU2NvcGUgdGhhdCBzaG91bGQgYmUgc2hhcmVkIGJldHdlZW4gYWxsIHRoZSByZXNvdXJjZXMgaWYgbm8gaXNvbGF0aW9uIHNjb3BlIHdhcyBjcmVhdGVkIHlldC5cbiAqIEByZXR1cm5zIHRoZSBzaGFyZWQgaXNvbGF0aW9uIHNjb3BlLlxuICovXG5mdW5jdGlvbiBjb21tb25PYmplY3RUb0lzb2xhdGlvblNjb3BlKGNvbW1vbk9iamVjdCkge1xuICBpZiAodHlwZW9mIGNvbW1vbk9iamVjdCA9PT0gJ29iamVjdCcgJiYgY29tbW9uT2JqZWN0KSB7XG4gICAgY29uc3QgbWVtb0lzb2xhdGlvblNjb3BlID0gY29tbW9uSXNvbGF0aW9uU2NvcGVNYXAuZ2V0KGNvbW1vbk9iamVjdCk7XG4gICAgaWYgKG1lbW9Jc29sYXRpb25TY29wZSkge1xuICAgICAgcmV0dXJuIG1lbW9Jc29sYXRpb25TY29wZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3SXNvbGF0aW9uU2NvcGUgPSBuZXcgU2NvcGUoKTtcbiAgICAgIGNvbW1vbklzb2xhdGlvblNjb3BlTWFwLnNldChjb21tb25PYmplY3QsIG5ld0lzb2xhdGlvblNjb3BlKTtcbiAgICAgIHJldHVybiBuZXdJc29sYXRpb25TY29wZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBTY29wZSgpO1xuICB9XG59XG5cbmxldCBuZXh0anNFc2NhcGVkQXN5bmNTdG9yYWdlO1xuXG4vKipcbiAqIFdpbGwgbWFyayB0aGUgZXhlY3V0aW9uIGNvbnRleHQgb2YgdGhlIGNhbGxiYWNrIGFzIFwiZXNjYXBlZFwiIGZyb20gTmV4dC5qcyBpbnRlcm5hbCB0cmFjaW5nIGJ5IHVuc2V0dGluZyB0aGUgYWN0aXZlXG4gKiBzcGFuIGFuZCBwcm9wYWdhdGlvbiBjb250ZXh0LiBXaGVuIGFuIGV4ZWN1dGlvbiBwYXNzZXMgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uIG11bHRpcGxlIHRpbWVzLCBpdCBpcyBhIG5vb3AgYWZ0ZXIgdGhlXG4gKiBmaXJzdCB0aW1lLlxuICovXG5mdW5jdGlvbiBlc2NhcGVOZXh0anNUcmFjaW5nKGNiKSB7XG4gIGNvbnN0IE1heWJlR2xvYmFsQXN5bmNMb2NhbFN0b3JhZ2UgPSAoR0xPQkFMX09CSiApXG4gICAgLkFzeW5jTG9jYWxTdG9yYWdlO1xuXG4gIGlmICghTWF5YmVHbG9iYWxBc3luY0xvY2FsU3RvcmFnZSkge1xuICAgIERFQlVHX0JVSUxEICYmXG4gICAgICBkZWJ1Zy53YXJuKFxuICAgICAgICBcIlRyaWVkIHRvIHJlZ2lzdGVyIEFzeW5jTG9jYWxTdG9yYWdlIGFzeW5jIGNvbnRleHQgc3RyYXRlZ3kgaW4gYSBydW50aW1lIHRoYXQgZG9lc24ndCBzdXBwb3J0IEFzeW5jTG9jYWxTdG9yYWdlLlwiLFxuICAgICAgKTtcbiAgICByZXR1cm4gY2IoKTtcbiAgfVxuXG4gIGlmICghbmV4dGpzRXNjYXBlZEFzeW5jU3RvcmFnZSkge1xuICAgIG5leHRqc0VzY2FwZWRBc3luY1N0b3JhZ2UgPSBuZXcgTWF5YmVHbG9iYWxBc3luY0xvY2FsU3RvcmFnZSgpO1xuICB9XG5cbiAgaWYgKG5leHRqc0VzY2FwZWRBc3luY1N0b3JhZ2UuZ2V0U3RvcmUoKSkge1xuICAgIHJldHVybiBjYigpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdGFydE5ld1RyYWNlKCgpID0+IHtcbiAgICAgIHJldHVybiBuZXh0anNFc2NhcGVkQXN5bmNTdG9yYWdlLnJ1bih0cnVlLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBjYigpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJZGVhbGx5IHRoaXMgZnVuY3Rpb24gbmV2ZXIgbGFuZHMgaW4gdGhlIGRldmVsb3AgYnJhbmNoLlxuICpcbiAqIERyb3BzIHRoZSBlbnRpcmUgc3BhbiB0cmVlIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZCBpbiwgaWYgaXQgd2FzIGEgc3BhbiB0cmVlIGNyZWF0ZWQgYnkgTmV4dC5qcy5cbiAqL1xuZnVuY3Rpb24gZHJvcE5leHRqc1Jvb3RDb250ZXh0KCkge1xuICBjb25zdCBuZXh0SnNPd25lZFNwYW4gPSBnZXRBY3RpdmVTcGFuKCk7XG4gIGlmIChuZXh0SnNPd25lZFNwYW4pIHtcbiAgICBjb25zdCByb290U3BhbiA9IGdldFJvb3RTcGFuKG5leHRKc093bmVkU3Bhbik7XG4gICAgY29uc3Qgcm9vdFNwYW5BdHRyaWJ1dGVzID0gc3BhblRvSlNPTihyb290U3BhbikuZGF0YTtcbiAgICBpZiAocm9vdFNwYW5BdHRyaWJ1dGVzPy5bJ25leHQuc3Bhbl90eXBlJ10pIHtcbiAgICAgIGdldFJvb3RTcGFuKG5leHRKc093bmVkU3Bhbik/LnNldEF0dHJpYnV0ZShUUkFOU0FDVElPTl9BVFRSX1NIT1VMRF9EUk9QX1RSQU5TQUNUSU9OLCB0cnVlKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgY29tbW9uT2JqZWN0VG9Jc29sYXRpb25TY29wZSwgY29tbW9uT2JqZWN0VG9Qcm9wYWdhdGlvbkNvbnRleHQsIGRyb3BOZXh0anNSb290Q29udGV4dCwgZXNjYXBlTmV4dGpzVHJhY2luZyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhY2luZ1V0aWxzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/tracingUtils.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/urls.js":
/*!****************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/urls.js ***!
  \****************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   buildUrlFromComponentRoute: () => (/* binding */ buildUrlFromComponentRoute),\n/* harmony export */   extractSanitizedUrlFromRefererHeader: () => (/* binding */ extractSanitizedUrlFromRefererHeader),\n/* harmony export */   getSanitizedRequestUrl: () => (/* binding */ getSanitizedRequestUrl),\n/* harmony export */   sanitizeRoutePath: () => (/* binding */ sanitizeRoutePath),\n/* harmony export */   substituteRouteParams: () => (/* binding */ substituteRouteParams)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\nconst HeaderKeys = {\n  FORWARDED_PROTO: 'x-forwarded-proto',\n  FORWARDED_HOST: 'x-forwarded-host',\n  HOST: 'host',\n  REFERER: 'referer',\n} ;\n\n/**\n * Replaces route parameters in a path template with their values\n * @param path - The path template containing parameters in [paramName] format\n * @param params - Optional route parameters to replace in the template\n * @returns The path with parameters replaced\n */\nfunction substituteRouteParams(path, params) {\n  if (!params || typeof params !== 'object') return path;\n\n  let resultPath = path;\n  for (const [key, value] of Object.entries(params)) {\n    resultPath = resultPath.split(`[${key}]`).join(encodeURIComponent(value));\n  }\n  return resultPath;\n}\n\n/**\n * Normalizes a path by removing route groups\n * @param path - The path to normalize\n * @returns The normalized path\n */\nfunction sanitizeRoutePath(path) {\n  const cleanedSegments = path\n    .split('/')\n    .filter(segment => segment && !(segment.startsWith('(') && segment.endsWith(')')));\n\n  return cleanedSegments.length > 0 ? `/${cleanedSegments.join('/')}` : '/';\n}\n\n/**\n * Constructs a full URL from the component route, parameters, and headers.\n *\n * @param componentRoute - The route template to construct the URL from\n * @param params - Optional route parameters to replace in the template\n * @param headersDict - Optional headers containing protocol and host information\n * @param pathname - Optional pathname coming from parent span \"http.target\"\n * @returns A sanitized URL string\n */\nfunction buildUrlFromComponentRoute(\n  componentRoute,\n  params,\n  headersDict,\n  pathname,\n) {\n  const parameterizedPath = substituteRouteParams(componentRoute, params);\n  // If available, the pathname from the http.target of the HTTP request server span takes precedence over the parameterized path.\n  // Spans such as generateMetadata and Server Component rendering are typically direct children of that span.\n  const path = pathname ?? sanitizeRoutePath(parameterizedPath);\n\n  const protocol = headersDict?.[HeaderKeys.FORWARDED_PROTO];\n  const host = headersDict?.[HeaderKeys.FORWARDED_HOST] || headersDict?.[HeaderKeys.HOST];\n\n  if (!protocol || !host) {\n    return path;\n  }\n\n  const fullUrl = `${protocol}://${host}${path}`;\n\n  const urlObject = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.parseStringToURLObject)(fullUrl);\n  if (!urlObject) {\n    return path;\n  }\n\n  return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getSanitizedUrlStringFromUrlObject)(urlObject);\n}\n\n/**\n * Returns a sanitized URL string from the referer header if it exists and is valid.\n *\n * @param headersDict - Optional headers containing the referer\n * @returns A sanitized URL string or undefined if referer is missing/invalid\n */\nfunction extractSanitizedUrlFromRefererHeader(headersDict) {\n  const referer = headersDict?.[HeaderKeys.REFERER];\n  if (!referer) {\n    return undefined;\n  }\n\n  try {\n    const refererUrl = new URL(referer);\n    return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getSanitizedUrlStringFromUrlObject)(refererUrl);\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * Returns a sanitized URL string using the referer header if available,\n * otherwise constructs the URL from the component route, params, and headers.\n *\n * @param componentRoute - The route template to construct the URL from\n * @param params - Optional route parameters to replace in the template\n * @param headersDict - Optional headers containing protocol, host, and referer\n * @param pathname - Optional pathname coming from root span \"http.target\"\n * @returns A sanitized URL string\n */\nfunction getSanitizedRequestUrl(\n  componentRoute,\n  params,\n  headersDict,\n  pathname,\n) {\n  const refererUrl = extractSanitizedUrlFromRefererHeader(headersDict);\n  if (refererUrl) {\n    return refererUrl;\n  }\n\n  return buildUrlFromComponentRoute(componentRoute, params, headersDict, pathname);\n}\n\n\n//# sourceMappingURL=urls.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vdXRpbHMvdXJscy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBMEY7O0FBRTFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0MsSUFBSTtBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBDQUEwQywwQkFBMEI7QUFDcEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLFNBQVMsS0FBSyxLQUFLLEVBQUUsS0FBSzs7QUFFL0Msb0JBQW9CLG9FQUFzQjtBQUMxQztBQUNBO0FBQ0E7O0FBRUEsU0FBUyxnRkFBa0M7QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxnRkFBa0M7QUFDN0MsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRThJO0FBQzlJIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrbmV4dGpzQDkuNDYuMF9Ab3BlbnRlbGVtZXRyeStjb250ZXh0LWFzeW5jLWhvb2tzQDEuMzAuMV9Ab3BlbnRlbGVtZXRyeSthcGlAMS45Ll9iNWJkZWNmMzMzZTc0Nzg0OWI0YjczYzQ1N2JkY2EwNi9ub2RlX21vZHVsZXMvQHNlbnRyeS9uZXh0anMvYnVpbGQvZXNtL2NvbW1vbi91dGlscy91cmxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFNhbml0aXplZFVybFN0cmluZ0Zyb21VcmxPYmplY3QsIHBhcnNlU3RyaW5nVG9VUkxPYmplY3QgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuXG5jb25zdCBIZWFkZXJLZXlzID0ge1xuICBGT1JXQVJERURfUFJPVE86ICd4LWZvcndhcmRlZC1wcm90bycsXG4gIEZPUldBUkRFRF9IT1NUOiAneC1mb3J3YXJkZWQtaG9zdCcsXG4gIEhPU1Q6ICdob3N0JyxcbiAgUkVGRVJFUjogJ3JlZmVyZXInLFxufSA7XG5cbi8qKlxuICogUmVwbGFjZXMgcm91dGUgcGFyYW1ldGVycyBpbiBhIHBhdGggdGVtcGxhdGUgd2l0aCB0aGVpciB2YWx1ZXNcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdGVtcGxhdGUgY29udGFpbmluZyBwYXJhbWV0ZXJzIGluIFtwYXJhbU5hbWVdIGZvcm1hdFxuICogQHBhcmFtIHBhcmFtcyAtIE9wdGlvbmFsIHJvdXRlIHBhcmFtZXRlcnMgdG8gcmVwbGFjZSBpbiB0aGUgdGVtcGxhdGVcbiAqIEByZXR1cm5zIFRoZSBwYXRoIHdpdGggcGFyYW1ldGVycyByZXBsYWNlZFxuICovXG5mdW5jdGlvbiBzdWJzdGl0dXRlUm91dGVQYXJhbXMocGF0aCwgcGFyYW1zKSB7XG4gIGlmICghcGFyYW1zIHx8IHR5cGVvZiBwYXJhbXMgIT09ICdvYmplY3QnKSByZXR1cm4gcGF0aDtcblxuICBsZXQgcmVzdWx0UGF0aCA9IHBhdGg7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcmFtcykpIHtcbiAgICByZXN1bHRQYXRoID0gcmVzdWx0UGF0aC5zcGxpdChgWyR7a2V5fV1gKS5qb2luKGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuICB9XG4gIHJldHVybiByZXN1bHRQYXRoO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBwYXRoIGJ5IHJlbW92aW5nIHJvdXRlIGdyb3Vwc1xuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byBub3JtYWxpemVcbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHBhdGhcbiAqL1xuZnVuY3Rpb24gc2FuaXRpemVSb3V0ZVBhdGgocGF0aCkge1xuICBjb25zdCBjbGVhbmVkU2VnbWVudHMgPSBwYXRoXG4gICAgLnNwbGl0KCcvJylcbiAgICAuZmlsdGVyKHNlZ21lbnQgPT4gc2VnbWVudCAmJiAhKHNlZ21lbnQuc3RhcnRzV2l0aCgnKCcpICYmIHNlZ21lbnQuZW5kc1dpdGgoJyknKSkpO1xuXG4gIHJldHVybiBjbGVhbmVkU2VnbWVudHMubGVuZ3RoID4gMCA/IGAvJHtjbGVhbmVkU2VnbWVudHMuam9pbignLycpfWAgOiAnLyc7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIGZ1bGwgVVJMIGZyb20gdGhlIGNvbXBvbmVudCByb3V0ZSwgcGFyYW1ldGVycywgYW5kIGhlYWRlcnMuXG4gKlxuICogQHBhcmFtIGNvbXBvbmVudFJvdXRlIC0gVGhlIHJvdXRlIHRlbXBsYXRlIHRvIGNvbnN0cnVjdCB0aGUgVVJMIGZyb21cbiAqIEBwYXJhbSBwYXJhbXMgLSBPcHRpb25hbCByb3V0ZSBwYXJhbWV0ZXJzIHRvIHJlcGxhY2UgaW4gdGhlIHRlbXBsYXRlXG4gKiBAcGFyYW0gaGVhZGVyc0RpY3QgLSBPcHRpb25hbCBoZWFkZXJzIGNvbnRhaW5pbmcgcHJvdG9jb2wgYW5kIGhvc3QgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBwYXRobmFtZSAtIE9wdGlvbmFsIHBhdGhuYW1lIGNvbWluZyBmcm9tIHBhcmVudCBzcGFuIFwiaHR0cC50YXJnZXRcIlxuICogQHJldHVybnMgQSBzYW5pdGl6ZWQgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBidWlsZFVybEZyb21Db21wb25lbnRSb3V0ZShcbiAgY29tcG9uZW50Um91dGUsXG4gIHBhcmFtcyxcbiAgaGVhZGVyc0RpY3QsXG4gIHBhdGhuYW1lLFxuKSB7XG4gIGNvbnN0IHBhcmFtZXRlcml6ZWRQYXRoID0gc3Vic3RpdHV0ZVJvdXRlUGFyYW1zKGNvbXBvbmVudFJvdXRlLCBwYXJhbXMpO1xuICAvLyBJZiBhdmFpbGFibGUsIHRoZSBwYXRobmFtZSBmcm9tIHRoZSBodHRwLnRhcmdldCBvZiB0aGUgSFRUUCByZXF1ZXN0IHNlcnZlciBzcGFuIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgcGFyYW1ldGVyaXplZCBwYXRoLlxuICAvLyBTcGFucyBzdWNoIGFzIGdlbmVyYXRlTWV0YWRhdGEgYW5kIFNlcnZlciBDb21wb25lbnQgcmVuZGVyaW5nIGFyZSB0eXBpY2FsbHkgZGlyZWN0IGNoaWxkcmVuIG9mIHRoYXQgc3Bhbi5cbiAgY29uc3QgcGF0aCA9IHBhdGhuYW1lID8/IHNhbml0aXplUm91dGVQYXRoKHBhcmFtZXRlcml6ZWRQYXRoKTtcblxuICBjb25zdCBwcm90b2NvbCA9IGhlYWRlcnNEaWN0Py5bSGVhZGVyS2V5cy5GT1JXQVJERURfUFJPVE9dO1xuICBjb25zdCBob3N0ID0gaGVhZGVyc0RpY3Q/LltIZWFkZXJLZXlzLkZPUldBUkRFRF9IT1NUXSB8fCBoZWFkZXJzRGljdD8uW0hlYWRlcktleXMuSE9TVF07XG5cbiAgaWYgKCFwcm90b2NvbCB8fCAhaG9zdCkge1xuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgY29uc3QgZnVsbFVybCA9IGAke3Byb3RvY29sfTovLyR7aG9zdH0ke3BhdGh9YDtcblxuICBjb25zdCB1cmxPYmplY3QgPSBwYXJzZVN0cmluZ1RvVVJMT2JqZWN0KGZ1bGxVcmwpO1xuICBpZiAoIXVybE9iamVjdCkge1xuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgcmV0dXJuIGdldFNhbml0aXplZFVybFN0cmluZ0Zyb21VcmxPYmplY3QodXJsT2JqZWN0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgc2FuaXRpemVkIFVSTCBzdHJpbmcgZnJvbSB0aGUgcmVmZXJlciBoZWFkZXIgaWYgaXQgZXhpc3RzIGFuZCBpcyB2YWxpZC5cbiAqXG4gKiBAcGFyYW0gaGVhZGVyc0RpY3QgLSBPcHRpb25hbCBoZWFkZXJzIGNvbnRhaW5pbmcgdGhlIHJlZmVyZXJcbiAqIEByZXR1cm5zIEEgc2FuaXRpemVkIFVSTCBzdHJpbmcgb3IgdW5kZWZpbmVkIGlmIHJlZmVyZXIgaXMgbWlzc2luZy9pbnZhbGlkXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTYW5pdGl6ZWRVcmxGcm9tUmVmZXJlckhlYWRlcihoZWFkZXJzRGljdCkge1xuICBjb25zdCByZWZlcmVyID0gaGVhZGVyc0RpY3Q/LltIZWFkZXJLZXlzLlJFRkVSRVJdO1xuICBpZiAoIXJlZmVyZXIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZWZlcmVyVXJsID0gbmV3IFVSTChyZWZlcmVyKTtcbiAgICByZXR1cm4gZ2V0U2FuaXRpemVkVXJsU3RyaW5nRnJvbVVybE9iamVjdChyZWZlcmVyVXJsKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYSBzYW5pdGl6ZWQgVVJMIHN0cmluZyB1c2luZyB0aGUgcmVmZXJlciBoZWFkZXIgaWYgYXZhaWxhYmxlLFxuICogb3RoZXJ3aXNlIGNvbnN0cnVjdHMgdGhlIFVSTCBmcm9tIHRoZSBjb21wb25lbnQgcm91dGUsIHBhcmFtcywgYW5kIGhlYWRlcnMuXG4gKlxuICogQHBhcmFtIGNvbXBvbmVudFJvdXRlIC0gVGhlIHJvdXRlIHRlbXBsYXRlIHRvIGNvbnN0cnVjdCB0aGUgVVJMIGZyb21cbiAqIEBwYXJhbSBwYXJhbXMgLSBPcHRpb25hbCByb3V0ZSBwYXJhbWV0ZXJzIHRvIHJlcGxhY2UgaW4gdGhlIHRlbXBsYXRlXG4gKiBAcGFyYW0gaGVhZGVyc0RpY3QgLSBPcHRpb25hbCBoZWFkZXJzIGNvbnRhaW5pbmcgcHJvdG9jb2wsIGhvc3QsIGFuZCByZWZlcmVyXG4gKiBAcGFyYW0gcGF0aG5hbWUgLSBPcHRpb25hbCBwYXRobmFtZSBjb21pbmcgZnJvbSByb290IHNwYW4gXCJodHRwLnRhcmdldFwiXG4gKiBAcmV0dXJucyBBIHNhbml0aXplZCBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFNhbml0aXplZFJlcXVlc3RVcmwoXG4gIGNvbXBvbmVudFJvdXRlLFxuICBwYXJhbXMsXG4gIGhlYWRlcnNEaWN0LFxuICBwYXRobmFtZSxcbikge1xuICBjb25zdCByZWZlcmVyVXJsID0gZXh0cmFjdFNhbml0aXplZFVybEZyb21SZWZlcmVySGVhZGVyKGhlYWRlcnNEaWN0KTtcbiAgaWYgKHJlZmVyZXJVcmwpIHtcbiAgICByZXR1cm4gcmVmZXJlclVybDtcbiAgfVxuXG4gIHJldHVybiBidWlsZFVybEZyb21Db21wb25lbnRSb3V0ZShjb21wb25lbnRSb3V0ZSwgcGFyYW1zLCBoZWFkZXJzRGljdCwgcGF0aG5hbWUpO1xufVxuXG5leHBvcnQgeyBidWlsZFVybEZyb21Db21wb25lbnRSb3V0ZSwgZXh0cmFjdFNhbml0aXplZFVybEZyb21SZWZlcmVySGVhZGVyLCBnZXRTYW5pdGl6ZWRSZXF1ZXN0VXJsLCBzYW5pdGl6ZVJvdXRlUGF0aCwgc3Vic3RpdHV0ZVJvdXRlUGFyYW1zIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD11cmxzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/urls.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/wrapperUtils.js":
/*!************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/wrapperUtils.js ***!
  \************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   callDataFetcherTraced: () => (/* binding */ callDataFetcherTraced),\n/* harmony export */   maybeExtractSynchronousParamsAndSearchParams: () => (/* binding */ maybeExtractSynchronousParamsAndSearchParams),\n/* harmony export */   withErrorInstrumentation: () => (/* binding */ withErrorInstrumentation),\n/* harmony export */   withTracedServerSideDataFetcher: () => (/* binding */ withTracedServerSideDataFetcher)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _span_attributes_with_logic_attached_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../span-attributes-with-logic-attached.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/span-attributes-with-logic-attached.js\");\n\n\n\n/**\n * Wraps a function that potentially throws. If it does, the error is passed to `captureException` and rethrown.\n *\n * Note: This function turns the wrapped function into an asynchronous one.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction withErrorInstrumentation(\n  origFunction,\n) {\n  return async function ( ...origFunctionArguments) {\n    try {\n      return await origFunction.apply(this, origFunctionArguments);\n    } catch (e) {\n      // TODO: Extract error logic from `withSentry` in here or create a new wrapper with said logic or something like that.\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureException)(e, { mechanism: { handled: false } });\n      throw e;\n    }\n  };\n}\n\n/**\n * Calls a server-side data fetching function (that takes a `req` and `res` object in its context) with tracing\n * instrumentation. A transaction will be created for the incoming request (if it doesn't already exist) in addition to\n * a span for the wrapped data fetching function.\n *\n * All of the above happens in an isolated domain, meaning all thrown errors will be associated with the correct span.\n *\n * @param origDataFetcher The data fetching method to call.\n * @param origFunctionArguments The arguments to call the data fetching method with.\n * @param req The data fetching function's request object.\n * @param res The data fetching function's response object.\n * @param options Options providing details for the created transaction and span.\n * @returns what the data fetching method call returned.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction withTracedServerSideDataFetcher(\n  origDataFetcher,\n  req,\n  res,\n  options\n\n,\n) {\n  return async function (\n\n    ...args\n  ) {\n    const normalizedRequest = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.httpRequestToRequestData)(req);\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)().setTransactionName(`${options.dataFetchingMethodName} (${options.dataFetcherRouteName})`);\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)().setSDKProcessingMetadata({ normalizedRequest });\n\n    const span = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n\n    // Only set the route backfill if the span is not for /_error\n    if (span && options.requestedRouteName !== '/_error') {\n      const root = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(span);\n      root.setAttribute(_span_attributes_with_logic_attached_js__WEBPACK_IMPORTED_MODULE_1__.TRANSACTION_ATTR_SENTRY_ROUTE_BACKFILL, options.requestedRouteName);\n    }\n\n    const { 'sentry-trace': sentryTrace, baggage } = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getTraceData)();\n\n    return {\n      sentryTrace: sentryTrace,\n      baggage: baggage,\n      data: await origDataFetcher.apply(this, args),\n    };\n  };\n}\n\n/**\n * Call a data fetcher and trace it. Only traces the function if there is an active transaction on the scope.\n *\n * We only do the following until we move transaction creation into this function: When called, the wrapped function\n * will also update the name of the active transaction with a parameterized route provided via the `options` argument.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nasync function callDataFetcherTraced(\n  origFunction,\n  origFunctionArgs,\n) {\n  try {\n    return await origFunction(...origFunctionArgs);\n  } catch (e) {\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureException)(e, { mechanism: { handled: false } });\n    throw e;\n  }\n}\n\n/**\n * Extracts the params and searchParams from the props object.\n *\n * Depending on the next version, params and searchParams may be a promise which we do not want to resolve in this function.\n */\nfunction maybeExtractSynchronousParamsAndSearchParams(props)\n\n {\n  let params =\n    props && typeof props === 'object' && 'params' in props\n      ? (props.params )\n      : undefined;\n  if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isThenable)(params)) {\n    params = undefined;\n  }\n\n  let searchParams =\n    props && typeof props === 'object' && 'searchParams' in props\n      ? (props.searchParams )\n      : undefined;\n  if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isThenable)(searchParams)) {\n    searchParams = undefined;\n  }\n\n  return { params, searchParams };\n}\n\n\n//# sourceMappingURL=wrapperUtils.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vdXRpbHMvd3JhcHBlclV0aWxzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFvSztBQUNqRTs7QUFFbkc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTSw4REFBZ0IsTUFBTSxhQUFhLGtCQUFrQjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLHNFQUF3QjtBQUN0RCxJQUFJLDZEQUFlLHlCQUF5QixnQ0FBZ0MsR0FBRyw2QkFBNkI7QUFDNUcsSUFBSSwrREFBaUIsOEJBQThCLG1CQUFtQjs7QUFFdEUsaUJBQWlCLDJEQUFhOztBQUU5QjtBQUNBO0FBQ0EsbUJBQW1CLHlEQUFXO0FBQzlCLHdCQUF3QiwyR0FBc0M7QUFDOUQ7O0FBRUEsWUFBWSx1Q0FBdUMsRUFBRSwwREFBWTs7QUFFakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osSUFBSSw4REFBZ0IsTUFBTSxhQUFhLGtCQUFrQjtBQUN6RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLHdEQUFVO0FBQ2hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLHdEQUFVO0FBQ2hCO0FBQ0E7O0FBRUEsV0FBVztBQUNYOztBQUUwSTtBQUMxSSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vdXRpbHMvd3JhcHBlclV0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNhcHR1cmVFeGNlcHRpb24sIGh0dHBSZXF1ZXN0VG9SZXF1ZXN0RGF0YSwgZ2V0Q3VycmVudFNjb3BlLCBnZXRJc29sYXRpb25TY29wZSwgZ2V0QWN0aXZlU3BhbiwgZ2V0Um9vdFNwYW4sIGdldFRyYWNlRGF0YSwgaXNUaGVuYWJsZSB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBUUkFOU0FDVElPTl9BVFRSX1NFTlRSWV9ST1VURV9CQUNLRklMTCB9IGZyb20gJy4uL3NwYW4tYXR0cmlidXRlcy13aXRoLWxvZ2ljLWF0dGFjaGVkLmpzJztcblxuLyoqXG4gKiBXcmFwcyBhIGZ1bmN0aW9uIHRoYXQgcG90ZW50aWFsbHkgdGhyb3dzLiBJZiBpdCBkb2VzLCB0aGUgZXJyb3IgaXMgcGFzc2VkIHRvIGBjYXB0dXJlRXhjZXB0aW9uYCBhbmQgcmV0aHJvd24uXG4gKlxuICogTm90ZTogVGhpcyBmdW5jdGlvbiB0dXJucyB0aGUgd3JhcHBlZCBmdW5jdGlvbiBpbnRvIGFuIGFzeW5jaHJvbm91cyBvbmUuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiB3aXRoRXJyb3JJbnN0cnVtZW50YXRpb24oXG4gIG9yaWdGdW5jdGlvbixcbikge1xuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gKCAuLi5vcmlnRnVuY3Rpb25Bcmd1bWVudHMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG9yaWdGdW5jdGlvbi5hcHBseSh0aGlzLCBvcmlnRnVuY3Rpb25Bcmd1bWVudHMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIFRPRE86IEV4dHJhY3QgZXJyb3IgbG9naWMgZnJvbSBgd2l0aFNlbnRyeWAgaW4gaGVyZSBvciBjcmVhdGUgYSBuZXcgd3JhcHBlciB3aXRoIHNhaWQgbG9naWMgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC5cbiAgICAgIGNhcHR1cmVFeGNlcHRpb24oZSwgeyBtZWNoYW5pc206IHsgaGFuZGxlZDogZmFsc2UgfSB9KTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENhbGxzIGEgc2VydmVyLXNpZGUgZGF0YSBmZXRjaGluZyBmdW5jdGlvbiAodGhhdCB0YWtlcyBhIGByZXFgIGFuZCBgcmVzYCBvYmplY3QgaW4gaXRzIGNvbnRleHQpIHdpdGggdHJhY2luZ1xuICogaW5zdHJ1bWVudGF0aW9uLiBBIHRyYW5zYWN0aW9uIHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhlIGluY29taW5nIHJlcXVlc3QgKGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCkgaW4gYWRkaXRpb24gdG9cbiAqIGEgc3BhbiBmb3IgdGhlIHdyYXBwZWQgZGF0YSBmZXRjaGluZyBmdW5jdGlvbi5cbiAqXG4gKiBBbGwgb2YgdGhlIGFib3ZlIGhhcHBlbnMgaW4gYW4gaXNvbGF0ZWQgZG9tYWluLCBtZWFuaW5nIGFsbCB0aHJvd24gZXJyb3JzIHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb3JyZWN0IHNwYW4uXG4gKlxuICogQHBhcmFtIG9yaWdEYXRhRmV0Y2hlciBUaGUgZGF0YSBmZXRjaGluZyBtZXRob2QgdG8gY2FsbC5cbiAqIEBwYXJhbSBvcmlnRnVuY3Rpb25Bcmd1bWVudHMgVGhlIGFyZ3VtZW50cyB0byBjYWxsIHRoZSBkYXRhIGZldGNoaW5nIG1ldGhvZCB3aXRoLlxuICogQHBhcmFtIHJlcSBUaGUgZGF0YSBmZXRjaGluZyBmdW5jdGlvbidzIHJlcXVlc3Qgb2JqZWN0LlxuICogQHBhcmFtIHJlcyBUaGUgZGF0YSBmZXRjaGluZyBmdW5jdGlvbidzIHJlc3BvbnNlIG9iamVjdC5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgcHJvdmlkaW5nIGRldGFpbHMgZm9yIHRoZSBjcmVhdGVkIHRyYW5zYWN0aW9uIGFuZCBzcGFuLlxuICogQHJldHVybnMgd2hhdCB0aGUgZGF0YSBmZXRjaGluZyBtZXRob2QgY2FsbCByZXR1cm5lZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHdpdGhUcmFjZWRTZXJ2ZXJTaWRlRGF0YUZldGNoZXIoXG4gIG9yaWdEYXRhRmV0Y2hlcixcbiAgcmVxLFxuICByZXMsXG4gIG9wdGlvbnNcblxuLFxuKSB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiAoXG5cbiAgICAuLi5hcmdzXG4gICkge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXF1ZXN0ID0gaHR0cFJlcXVlc3RUb1JlcXVlc3REYXRhKHJlcSk7XG4gICAgZ2V0Q3VycmVudFNjb3BlKCkuc2V0VHJhbnNhY3Rpb25OYW1lKGAke29wdGlvbnMuZGF0YUZldGNoaW5nTWV0aG9kTmFtZX0gKCR7b3B0aW9ucy5kYXRhRmV0Y2hlclJvdXRlTmFtZX0pYCk7XG4gICAgZ2V0SXNvbGF0aW9uU2NvcGUoKS5zZXRTREtQcm9jZXNzaW5nTWV0YWRhdGEoeyBub3JtYWxpemVkUmVxdWVzdCB9KTtcblxuICAgIGNvbnN0IHNwYW4gPSBnZXRBY3RpdmVTcGFuKCk7XG5cbiAgICAvLyBPbmx5IHNldCB0aGUgcm91dGUgYmFja2ZpbGwgaWYgdGhlIHNwYW4gaXMgbm90IGZvciAvX2Vycm9yXG4gICAgaWYgKHNwYW4gJiYgb3B0aW9ucy5yZXF1ZXN0ZWRSb3V0ZU5hbWUgIT09ICcvX2Vycm9yJykge1xuICAgICAgY29uc3Qgcm9vdCA9IGdldFJvb3RTcGFuKHNwYW4pO1xuICAgICAgcm9vdC5zZXRBdHRyaWJ1dGUoVFJBTlNBQ1RJT05fQVRUUl9TRU5UUllfUk9VVEVfQkFDS0ZJTEwsIG9wdGlvbnMucmVxdWVzdGVkUm91dGVOYW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCB7ICdzZW50cnktdHJhY2UnOiBzZW50cnlUcmFjZSwgYmFnZ2FnZSB9ID0gZ2V0VHJhY2VEYXRhKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2VudHJ5VHJhY2U6IHNlbnRyeVRyYWNlLFxuICAgICAgYmFnZ2FnZTogYmFnZ2FnZSxcbiAgICAgIGRhdGE6IGF3YWl0IG9yaWdEYXRhRmV0Y2hlci5hcHBseSh0aGlzLCBhcmdzKSxcbiAgICB9O1xuICB9O1xufVxuXG4vKipcbiAqIENhbGwgYSBkYXRhIGZldGNoZXIgYW5kIHRyYWNlIGl0LiBPbmx5IHRyYWNlcyB0aGUgZnVuY3Rpb24gaWYgdGhlcmUgaXMgYW4gYWN0aXZlIHRyYW5zYWN0aW9uIG9uIHRoZSBzY29wZS5cbiAqXG4gKiBXZSBvbmx5IGRvIHRoZSBmb2xsb3dpbmcgdW50aWwgd2UgbW92ZSB0cmFuc2FjdGlvbiBjcmVhdGlvbiBpbnRvIHRoaXMgZnVuY3Rpb246IFdoZW4gY2FsbGVkLCB0aGUgd3JhcHBlZCBmdW5jdGlvblxuICogd2lsbCBhbHNvIHVwZGF0ZSB0aGUgbmFtZSBvZiB0aGUgYWN0aXZlIHRyYW5zYWN0aW9uIHdpdGggYSBwYXJhbWV0ZXJpemVkIHJvdXRlIHByb3ZpZGVkIHZpYSB0aGUgYG9wdGlvbnNgIGFyZ3VtZW50LlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuYXN5bmMgZnVuY3Rpb24gY2FsbERhdGFGZXRjaGVyVHJhY2VkKFxuICBvcmlnRnVuY3Rpb24sXG4gIG9yaWdGdW5jdGlvbkFyZ3MsXG4pIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgb3JpZ0Z1bmN0aW9uKC4uLm9yaWdGdW5jdGlvbkFyZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY2FwdHVyZUV4Y2VwdGlvbihlLCB7IG1lY2hhbmlzbTogeyBoYW5kbGVkOiBmYWxzZSB9IH0pO1xuICAgIHRocm93IGU7XG4gIH1cbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgcGFyYW1zIGFuZCBzZWFyY2hQYXJhbXMgZnJvbSB0aGUgcHJvcHMgb2JqZWN0LlxuICpcbiAqIERlcGVuZGluZyBvbiB0aGUgbmV4dCB2ZXJzaW9uLCBwYXJhbXMgYW5kIHNlYXJjaFBhcmFtcyBtYXkgYmUgYSBwcm9taXNlIHdoaWNoIHdlIGRvIG5vdCB3YW50IHRvIHJlc29sdmUgaW4gdGhpcyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWF5YmVFeHRyYWN0U3luY2hyb25vdXNQYXJhbXNBbmRTZWFyY2hQYXJhbXMocHJvcHMpXG5cbiB7XG4gIGxldCBwYXJhbXMgPVxuICAgIHByb3BzICYmIHR5cGVvZiBwcm9wcyA9PT0gJ29iamVjdCcgJiYgJ3BhcmFtcycgaW4gcHJvcHNcbiAgICAgID8gKHByb3BzLnBhcmFtcyApXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzVGhlbmFibGUocGFyYW1zKSkge1xuICAgIHBhcmFtcyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxldCBzZWFyY2hQYXJhbXMgPVxuICAgIHByb3BzICYmIHR5cGVvZiBwcm9wcyA9PT0gJ29iamVjdCcgJiYgJ3NlYXJjaFBhcmFtcycgaW4gcHJvcHNcbiAgICAgID8gKHByb3BzLnNlYXJjaFBhcmFtcyApXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzVGhlbmFibGUoc2VhcmNoUGFyYW1zKSkge1xuICAgIHNlYXJjaFBhcmFtcyA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7IHBhcmFtcywgc2VhcmNoUGFyYW1zIH07XG59XG5cbmV4cG9ydCB7IGNhbGxEYXRhRmV0Y2hlclRyYWNlZCwgbWF5YmVFeHRyYWN0U3luY2hyb25vdXNQYXJhbXNBbmRTZWFyY2hQYXJhbXMsIHdpdGhFcnJvckluc3RydW1lbnRhdGlvbiwgd2l0aFRyYWNlZFNlcnZlclNpZGVEYXRhRmV0Y2hlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d3JhcHBlclV0aWxzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/wrapperUtils.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/withServerActionInstrumentation.js":
/*!*************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/withServerActionInstrumentation.js ***!
  \*************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   withServerActionInstrumentation: () => (/* binding */ withServerActionInstrumentation)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _utils_responseEnd_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/responseEnd.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/responseEnd.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/debug-build.js\");\n/* harmony import */ var _nextNavigationErrorUtils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nextNavigationErrorUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/nextNavigationErrorUtils.js\");\n\n\n\n\n\n/**\n * Wraps a Next.js Server Action implementation with Sentry Error and Performance instrumentation.\n */\nfunction withServerActionInstrumentation(\n  ...args\n) {\n  if (typeof args[1] === 'function') {\n    const [serverActionName, callback] = args;\n    return withServerActionInstrumentationImplementation(serverActionName, {}, callback);\n  } else {\n    const [serverActionName, options, callback] = args;\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    return withServerActionInstrumentationImplementation(serverActionName, options, callback);\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nasync function withServerActionInstrumentationImplementation(\n  serverActionName,\n  options,\n  callback,\n) {\n  return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.withIsolationScope)(async isolationScope => {\n    const sendDefaultPii = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)()?.getOptions().sendDefaultPii;\n\n    let sentryTraceHeader;\n    let baggageHeader;\n    const fullHeadersObject = {};\n    try {\n      const awaitedHeaders = await options.headers;\n      sentryTraceHeader = awaitedHeaders?.get('sentry-trace') ?? undefined;\n      baggageHeader = awaitedHeaders?.get('baggage');\n      awaitedHeaders?.forEach((value, key) => {\n        fullHeadersObject[key] = value;\n      });\n    } catch {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_2__.DEBUG_BUILD &&\n        _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn(\n          \"Sentry wasn't able to extract the tracing headers for a server action. Will not trace this request.\",\n        );\n    }\n\n    isolationScope.setTransactionName(`serverAction/${serverActionName}`);\n    isolationScope.setSDKProcessingMetadata({\n      normalizedRequest: {\n        headers: fullHeadersObject,\n      } ,\n    });\n\n    // Normally, there is an active span here (from Next.js OTEL) and we just use that as parent\n    // Else, we manually continueTrace from the incoming headers\n    const continueTraceIfNoActiveSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)()\n      ? (_opts, callback) => callback()\n      : _sentry_core__WEBPACK_IMPORTED_MODULE_0__.continueTrace;\n\n    return continueTraceIfNoActiveSpan(\n      {\n        sentryTrace: sentryTraceHeader,\n        baggage: baggageHeader,\n      },\n      async () => {\n        try {\n          return await (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.startSpan)(\n            {\n              op: 'function.server_action',\n              name: `serverAction/${serverActionName}`,\n              forceTransaction: true,\n              attributes: {\n                [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route',\n              },\n            },\n            async span => {\n              const result = await (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.handleCallbackErrors)(callback, error => {\n                if ((0,_nextNavigationErrorUtils_js__WEBPACK_IMPORTED_MODULE_3__.isNotFoundNavigationError)(error)) {\n                  // We don't want to report \"not-found\"s\n                  span.setStatus({ code: _sentry_core__WEBPACK_IMPORTED_MODULE_0__.SPAN_STATUS_ERROR, message: 'not_found' });\n                } else if ((0,_nextNavigationErrorUtils_js__WEBPACK_IMPORTED_MODULE_3__.isRedirectNavigationError)(error)) {\n                  // Don't do anything for redirects\n                } else {\n                  span.setStatus({ code: _sentry_core__WEBPACK_IMPORTED_MODULE_0__.SPAN_STATUS_ERROR, message: 'internal_error' });\n                  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureException)(error, {\n                    mechanism: {\n                      handled: false,\n                    },\n                  });\n                }\n              });\n\n              if (options.recordResponse !== undefined ? options.recordResponse : sendDefaultPii) {\n                (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)().setExtra('server_action_result', result);\n              }\n\n              if (options.formData) {\n                options.formData.forEach((value, key) => {\n                  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)().setExtra(\n                    `server_action_form_data.${key}`,\n                    typeof value === 'string' ? value : '[non-string value]',\n                  );\n                });\n              }\n\n              return result;\n            },\n          );\n        } finally {\n          (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.vercelWaitUntil)((0,_utils_responseEnd_js__WEBPACK_IMPORTED_MODULE_1__.flushSafelyWithTimeout)());\n        }\n      },\n    );\n  });\n}\n\n\n//# sourceMappingURL=withServerActionInstrumentation.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vd2l0aFNlcnZlckFjdGlvbkluc3RydW1lbnRhdGlvbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUE4TztBQUM5SztBQUNqQjtBQUNzRDs7QUFFckc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZFQUE2RTtBQUM3RSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGdFQUFrQjtBQUMzQiwyQkFBMkIsdURBQVM7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxNQUFNO0FBQ04sTUFBTSx3REFBVztBQUNqQixRQUFRLCtDQUFLO0FBQ2I7QUFDQTtBQUNBOztBQUVBLHNEQUFzRCxpQkFBaUI7QUFDdkU7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLEtBQUs7O0FBRUw7QUFDQTtBQUNBLHdDQUF3QywyREFBYTtBQUNyRDtBQUNBLFFBQVEsdURBQWE7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSx1QkFBdUIsdURBQVM7QUFDaEM7QUFDQTtBQUNBLG9DQUFvQyxpQkFBaUI7QUFDckQ7QUFDQTtBQUNBLGlCQUFpQiwwRUFBZ0M7QUFDakQsZUFBZTtBQUNmLGFBQWE7QUFDYjtBQUNBLG1DQUFtQyxrRUFBb0I7QUFDdkQsb0JBQW9CLHVGQUF5QjtBQUM3QztBQUNBLG1DQUFtQyxNQUFNLDJEQUFpQix3QkFBd0I7QUFDbEYsa0JBQWtCLFNBQVMsdUZBQXlCO0FBQ3BEO0FBQ0Esa0JBQWtCO0FBQ2xCLG1DQUFtQyxNQUFNLDJEQUFpQiw2QkFBNkI7QUFDdkYsa0JBQWtCLDhEQUFnQjtBQUNsQztBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLG1CQUFtQjtBQUNuQjtBQUNBLGVBQWU7O0FBRWY7QUFDQSxnQkFBZ0IsK0RBQWlCO0FBQ2pDOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0IsK0RBQWlCO0FBQ25DLCtDQUErQyxJQUFJO0FBQ25EO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7O0FBRUE7QUFDQSxhQUFhO0FBQ2I7QUFDQSxVQUFVO0FBQ1YsVUFBVSw2REFBZSxDQUFDLDZFQUFzQjtBQUNoRDtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDs7QUFFMkM7QUFDM0MiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStuZXh0anNAOS40Ni4wX0BvcGVudGVsZW1ldHJ5K2NvbnRleHQtYXN5bmMtaG9va3NAMS4zMC4xX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuX2I1YmRlY2YzMzNlNzQ3ODQ5YjRiNzNjNDU3YmRjYTA2L25vZGVfbW9kdWxlcy9Ac2VudHJ5L25leHRqcy9idWlsZC9lc20vY29tbW9uL3dpdGhTZXJ2ZXJBY3Rpb25JbnN0cnVtZW50YXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2l0aElzb2xhdGlvblNjb3BlLCBnZXRDbGllbnQsIGRlYnVnLCBnZXRBY3RpdmVTcGFuLCBjb250aW51ZVRyYWNlLCBzdGFydFNwYW4sIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFLCBoYW5kbGVDYWxsYmFja0Vycm9ycywgU1BBTl9TVEFUVVNfRVJST1IsIGNhcHR1cmVFeGNlcHRpb24sIGdldElzb2xhdGlvblNjb3BlLCB2ZXJjZWxXYWl0VW50aWwgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgZmx1c2hTYWZlbHlXaXRoVGltZW91dCB9IGZyb20gJy4vdXRpbHMvcmVzcG9uc2VFbmQuanMnO1xuaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuL2RlYnVnLWJ1aWxkLmpzJztcbmltcG9ydCB7IGlzTm90Rm91bmROYXZpZ2F0aW9uRXJyb3IsIGlzUmVkaXJlY3ROYXZpZ2F0aW9uRXJyb3IgfSBmcm9tICcuL25leHROYXZpZ2F0aW9uRXJyb3JVdGlscy5qcyc7XG5cbi8qKlxuICogV3JhcHMgYSBOZXh0LmpzIFNlcnZlciBBY3Rpb24gaW1wbGVtZW50YXRpb24gd2l0aCBTZW50cnkgRXJyb3IgYW5kIFBlcmZvcm1hbmNlIGluc3RydW1lbnRhdGlvbi5cbiAqL1xuZnVuY3Rpb24gd2l0aFNlcnZlckFjdGlvbkluc3RydW1lbnRhdGlvbihcbiAgLi4uYXJnc1xuKSB7XG4gIGlmICh0eXBlb2YgYXJnc1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IFtzZXJ2ZXJBY3Rpb25OYW1lLCBjYWxsYmFja10gPSBhcmdzO1xuICAgIHJldHVybiB3aXRoU2VydmVyQWN0aW9uSW5zdHJ1bWVudGF0aW9uSW1wbGVtZW50YXRpb24oc2VydmVyQWN0aW9uTmFtZSwge30sIGNhbGxiYWNrKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBbc2VydmVyQWN0aW9uTmFtZSwgb3B0aW9ucywgY2FsbGJhY2tdID0gYXJncztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgIHJldHVybiB3aXRoU2VydmVyQWN0aW9uSW5zdHJ1bWVudGF0aW9uSW1wbGVtZW50YXRpb24oc2VydmVyQWN0aW9uTmFtZSwgb3B0aW9ucywgY2FsbGJhY2spO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5hc3luYyBmdW5jdGlvbiB3aXRoU2VydmVyQWN0aW9uSW5zdHJ1bWVudGF0aW9uSW1wbGVtZW50YXRpb24oXG4gIHNlcnZlckFjdGlvbk5hbWUsXG4gIG9wdGlvbnMsXG4gIGNhbGxiYWNrLFxuKSB7XG4gIHJldHVybiB3aXRoSXNvbGF0aW9uU2NvcGUoYXN5bmMgaXNvbGF0aW9uU2NvcGUgPT4ge1xuICAgIGNvbnN0IHNlbmREZWZhdWx0UGlpID0gZ2V0Q2xpZW50KCk/LmdldE9wdGlvbnMoKS5zZW5kRGVmYXVsdFBpaTtcblxuICAgIGxldCBzZW50cnlUcmFjZUhlYWRlcjtcbiAgICBsZXQgYmFnZ2FnZUhlYWRlcjtcbiAgICBjb25zdCBmdWxsSGVhZGVyc09iamVjdCA9IHt9O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhd2FpdGVkSGVhZGVycyA9IGF3YWl0IG9wdGlvbnMuaGVhZGVycztcbiAgICAgIHNlbnRyeVRyYWNlSGVhZGVyID0gYXdhaXRlZEhlYWRlcnM/LmdldCgnc2VudHJ5LXRyYWNlJykgPz8gdW5kZWZpbmVkO1xuICAgICAgYmFnZ2FnZUhlYWRlciA9IGF3YWl0ZWRIZWFkZXJzPy5nZXQoJ2JhZ2dhZ2UnKTtcbiAgICAgIGF3YWl0ZWRIZWFkZXJzPy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGZ1bGxIZWFkZXJzT2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgREVCVUdfQlVJTEQgJiZcbiAgICAgICAgZGVidWcud2FybihcbiAgICAgICAgICBcIlNlbnRyeSB3YXNuJ3QgYWJsZSB0byBleHRyYWN0IHRoZSB0cmFjaW5nIGhlYWRlcnMgZm9yIGEgc2VydmVyIGFjdGlvbi4gV2lsbCBub3QgdHJhY2UgdGhpcyByZXF1ZXN0LlwiLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzb2xhdGlvblNjb3BlLnNldFRyYW5zYWN0aW9uTmFtZShgc2VydmVyQWN0aW9uLyR7c2VydmVyQWN0aW9uTmFtZX1gKTtcbiAgICBpc29sYXRpb25TY29wZS5zZXRTREtQcm9jZXNzaW5nTWV0YWRhdGEoe1xuICAgICAgbm9ybWFsaXplZFJlcXVlc3Q6IHtcbiAgICAgICAgaGVhZGVyczogZnVsbEhlYWRlcnNPYmplY3QsXG4gICAgICB9ICxcbiAgICB9KTtcblxuICAgIC8vIE5vcm1hbGx5LCB0aGVyZSBpcyBhbiBhY3RpdmUgc3BhbiBoZXJlIChmcm9tIE5leHQuanMgT1RFTCkgYW5kIHdlIGp1c3QgdXNlIHRoYXQgYXMgcGFyZW50XG4gICAgLy8gRWxzZSwgd2UgbWFudWFsbHkgY29udGludWVUcmFjZSBmcm9tIHRoZSBpbmNvbWluZyBoZWFkZXJzXG4gICAgY29uc3QgY29udGludWVUcmFjZUlmTm9BY3RpdmVTcGFuID0gZ2V0QWN0aXZlU3BhbigpXG4gICAgICA/IChfb3B0cywgY2FsbGJhY2spID0+IGNhbGxiYWNrKClcbiAgICAgIDogY29udGludWVUcmFjZTtcblxuICAgIHJldHVybiBjb250aW51ZVRyYWNlSWZOb0FjdGl2ZVNwYW4oXG4gICAgICB7XG4gICAgICAgIHNlbnRyeVRyYWNlOiBzZW50cnlUcmFjZUhlYWRlcixcbiAgICAgICAgYmFnZ2FnZTogYmFnZ2FnZUhlYWRlcixcbiAgICAgIH0sXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHN0YXJ0U3BhbihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb3A6ICdmdW5jdGlvbi5zZXJ2ZXJfYWN0aW9uJyxcbiAgICAgICAgICAgICAgbmFtZTogYHNlcnZlckFjdGlvbi8ke3NlcnZlckFjdGlvbk5hbWV9YCxcbiAgICAgICAgICAgICAgZm9yY2VUcmFuc2FjdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV06ICdyb3V0ZScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXN5bmMgc3BhbiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZUNhbGxiYWNrRXJyb3JzKGNhbGxiYWNrLCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTm90Rm91bmROYXZpZ2F0aW9uRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJlcG9ydCBcIm5vdC1mb3VuZFwic1xuICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTUEFOX1NUQVRVU19FUlJPUiwgbWVzc2FnZTogJ25vdF9mb3VuZCcgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1JlZGlyZWN0TmF2aWdhdGlvbkVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgZm9yIHJlZGlyZWN0c1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNQQU5fU1RBVFVTX0VSUk9SLCBtZXNzYWdlOiAnaW50ZXJuYWxfZXJyb3InIH0pO1xuICAgICAgICAgICAgICAgICAgY2FwdHVyZUV4Y2VwdGlvbihlcnJvciwge1xuICAgICAgICAgICAgICAgICAgICBtZWNoYW5pc206IHtcbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVjb3JkUmVzcG9uc2UgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMucmVjb3JkUmVzcG9uc2UgOiBzZW5kRGVmYXVsdFBpaSkge1xuICAgICAgICAgICAgICAgIGdldElzb2xhdGlvblNjb3BlKCkuc2V0RXh0cmEoJ3NlcnZlcl9hY3Rpb25fcmVzdWx0JywgcmVzdWx0KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5mb3JtRGF0YS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgICBnZXRJc29sYXRpb25TY29wZSgpLnNldEV4dHJhKFxuICAgICAgICAgICAgICAgICAgICBgc2VydmVyX2FjdGlvbl9mb3JtX2RhdGEuJHtrZXl9YCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogJ1tub24tc3RyaW5nIHZhbHVlXScsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB2ZXJjZWxXYWl0VW50aWwoZmx1c2hTYWZlbHlXaXRoVGltZW91dCgpKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuICB9KTtcbn1cblxuZXhwb3J0IHsgd2l0aFNlcnZlckFjdGlvbkluc3RydW1lbnRhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2l0aFNlcnZlckFjdGlvbkluc3RydW1lbnRhdGlvbi5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/withServerActionInstrumentation.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapGenerationFunctionWithSentry.js":
/*!**************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapGenerationFunctionWithSentry.js ***!
  \**************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   wrapGenerationFunctionWithSentry: () => (/* binding */ wrapGenerationFunctionWithSentry)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _nextNavigationErrorUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./nextNavigationErrorUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/nextNavigationErrorUtils.js\");\n/* harmony import */ var _span_attributes_with_logic_attached_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./span-attributes-with-logic-attached.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/span-attributes-with-logic-attached.js\");\n/* harmony import */ var _utils_tracingUtils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/tracingUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/tracingUtils.js\");\n/* harmony import */ var _utils_urls_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/urls.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/urls.js\");\n/* harmony import */ var _utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/wrapperUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/wrapperUtils.js\");\n\n\n\n\n\n\n\n/**\n * Wraps a generation function (e.g. generateMetadata) with Sentry error and performance instrumentation.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction wrapGenerationFunctionWithSentry(\n  generationFunction,\n  context,\n) {\n  const { requestAsyncStorage, componentRoute, componentType, generationFunctionIdentifier } = context;\n  return new Proxy(generationFunction, {\n    apply: (originalFunction, thisArg, args) => {\n      const requestTraceId = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)()?.spanContext().traceId;\n      let headers = undefined;\n      // We try-catch here just in case anything goes wrong with the async storage here goes wrong since it is Next.js internal API\n      try {\n        headers = requestAsyncStorage?.getStore()?.headers;\n      } catch {\n        /** empty */\n      }\n\n      const isolationScope = (0,_utils_tracingUtils_js__WEBPACK_IMPORTED_MODULE_3__.commonObjectToIsolationScope)(headers);\n      let pathname = undefined ;\n\n      const activeSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n      if (activeSpan) {\n        const rootSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(activeSpan);\n        const { scope } = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCapturedScopesOnSpan)(rootSpan);\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.setCapturedScopesOnSpan)(rootSpan, scope ?? new _sentry_core__WEBPACK_IMPORTED_MODULE_0__.Scope(), isolationScope);\n\n        const spanData = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(rootSpan);\n\n        if (spanData.data && 'http.target' in spanData.data) {\n          pathname = spanData.data['http.target'] ;\n        }\n      }\n\n      const headersDict = headers ? (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.winterCGHeadersToDict)(headers) : undefined;\n\n      let data = undefined;\n      if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)()?.getOptions().sendDefaultPii) {\n        const props = args[0];\n        const { params, searchParams } = (0,_utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_5__.maybeExtractSynchronousParamsAndSearchParams)(props);\n        data = { params, searchParams };\n      }\n\n      return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.withIsolationScope)(isolationScope, () => {\n        return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.withScope)(scope => {\n          scope.setTransactionName(`${componentType}.${generationFunctionIdentifier} (${componentRoute})`);\n\n          isolationScope.setSDKProcessingMetadata({\n            normalizedRequest: {\n              headers: headersDict,\n              url: (0,_utils_urls_js__WEBPACK_IMPORTED_MODULE_4__.getSanitizedRequestUrl)(\n                componentRoute,\n                data?.params ,\n                headersDict,\n                pathname,\n              ),\n            } ,\n          });\n\n          const activeSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n          if (activeSpan) {\n            const rootSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(activeSpan);\n            const sentryTrace = headersDict?.['sentry-trace'];\n            if (sentryTrace) {\n              rootSpan.setAttribute(_span_attributes_with_logic_attached_js__WEBPACK_IMPORTED_MODULE_2__.TRANSACTION_ATTR_SENTRY_TRACE_BACKFILL, sentryTrace);\n            }\n          }\n\n          const propagationContext = (0,_utils_tracingUtils_js__WEBPACK_IMPORTED_MODULE_3__.commonObjectToPropagationContext)(\n            headers,\n            (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.propagationContextFromHeaders)(headersDict?.['sentry-trace'], headersDict?.['baggage']),\n          );\n\n          if (requestTraceId) {\n            propagationContext.traceId = requestTraceId;\n          }\n\n          scope.setPropagationContext(propagationContext);\n\n          scope.setExtra('route_data', data);\n\n          return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.startSpanManual)(\n            {\n              op: 'function.nextjs',\n              name: `${componentType}.${generationFunctionIdentifier} (${componentRoute})`,\n              attributes: {\n                [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route',\n                [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.nextjs',\n                'sentry.nextjs.ssr.function.type': generationFunctionIdentifier,\n                'sentry.nextjs.ssr.function.route': componentRoute,\n              },\n            },\n            span => {\n              return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.handleCallbackErrors)(\n                () => originalFunction.apply(thisArg, args),\n                err => {\n                  // When you read this code you might think: \"Wait a minute, shouldn't we set the status on the root span too?\"\n                  // The answer is: \"No.\" - The status of the root span is determined by whatever status code Next.js decides to put on the response.\n                  if ((0,_nextNavigationErrorUtils_js__WEBPACK_IMPORTED_MODULE_1__.isNotFoundNavigationError)(err)) {\n                    // We don't want to report \"not-found\"s\n                    span.setStatus({ code: _sentry_core__WEBPACK_IMPORTED_MODULE_0__.SPAN_STATUS_ERROR, message: 'not_found' });\n                    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(span).setStatus({ code: _sentry_core__WEBPACK_IMPORTED_MODULE_0__.SPAN_STATUS_ERROR, message: 'not_found' });\n                  } else if ((0,_nextNavigationErrorUtils_js__WEBPACK_IMPORTED_MODULE_1__.isRedirectNavigationError)(err)) {\n                    // We don't want to report redirects\n                    span.setStatus({ code: _sentry_core__WEBPACK_IMPORTED_MODULE_0__.SPAN_STATUS_OK });\n                  } else {\n                    span.setStatus({ code: _sentry_core__WEBPACK_IMPORTED_MODULE_0__.SPAN_STATUS_ERROR, message: 'internal_error' });\n                    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(span).setStatus({ code: _sentry_core__WEBPACK_IMPORTED_MODULE_0__.SPAN_STATUS_ERROR, message: 'internal_error' });\n                    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureException)(err, {\n                      mechanism: {\n                        handled: false,\n                      },\n                    });\n                  }\n                },\n                () => {\n                  span.end();\n                },\n              );\n            },\n          );\n        });\n      });\n    },\n  });\n}\n\n\n//# sourceMappingURL=wrapGenerationFunctionWithSentry.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vd3JhcEdlbmVyYXRpb25GdW5jdGlvbldpdGhTZW50cnkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUErWDtBQUMxUjtBQUNIO0FBQ087QUFDaEQ7QUFDOEI7O0FBRXZGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLG1GQUFtRjtBQUM3RjtBQUNBO0FBQ0EsNkJBQTZCLDJEQUFhO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUEsNkJBQTZCLG9GQUE0QjtBQUN6RDs7QUFFQSx5QkFBeUIsMkRBQWE7QUFDdEM7QUFDQSx5QkFBeUIseURBQVc7QUFDcEMsZ0JBQWdCLFFBQVEsRUFBRSxxRUFBdUI7QUFDakQsUUFBUSxxRUFBdUIsd0JBQXdCLCtDQUFLOztBQUU1RCx5QkFBeUIsd0RBQVU7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9DQUFvQyxtRUFBcUI7O0FBRXpEO0FBQ0EsVUFBVSx1REFBUztBQUNuQjtBQUNBLGdCQUFnQix1QkFBdUIsRUFBRSxvR0FBNEM7QUFDckYsaUJBQWlCO0FBQ2pCOztBQUVBLGFBQWEsZ0VBQWtCO0FBQy9CLGVBQWUsdURBQVM7QUFDeEIsc0NBQXNDLGNBQWMsR0FBRyw4QkFBOEIsR0FBRyxlQUFlOztBQUV2RztBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsc0VBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsV0FBVzs7QUFFWCw2QkFBNkIsMkRBQWE7QUFDMUM7QUFDQSw2QkFBNkIseURBQVc7QUFDeEM7QUFDQTtBQUNBLG9DQUFvQywyR0FBc0M7QUFDMUU7QUFDQTs7QUFFQSxxQ0FBcUMsd0ZBQWdDO0FBQ3JFO0FBQ0EsWUFBWSwyRUFBNkI7QUFDekM7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLGlCQUFpQiw2REFBZTtBQUNoQztBQUNBO0FBQ0EsdUJBQXVCLGNBQWMsR0FBRyw4QkFBOEIsR0FBRyxlQUFlO0FBQ3hGO0FBQ0EsaUJBQWlCLDBFQUFnQztBQUNqRCxpQkFBaUIsMEVBQWdDO0FBQ2pEO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsYUFBYTtBQUNiO0FBQ0EscUJBQXFCLGtFQUFvQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQix1RkFBeUI7QUFDL0M7QUFDQSxxQ0FBcUMsTUFBTSwyREFBaUIsd0JBQXdCO0FBQ3BGLG9CQUFvQix5REFBVyxtQkFBbUIsTUFBTSwyREFBaUIsd0JBQXdCO0FBQ2pHLG9CQUFvQixTQUFTLHVGQUF5QjtBQUN0RDtBQUNBLHFDQUFxQyxNQUFNLHdEQUFjLEVBQUU7QUFDM0Qsb0JBQW9CO0FBQ3BCLHFDQUFxQyxNQUFNLDJEQUFpQiw2QkFBNkI7QUFDekYsb0JBQW9CLHlEQUFXLG1CQUFtQixNQUFNLDJEQUFpQiw2QkFBNkI7QUFDdEcsb0JBQW9CLDhEQUFnQjtBQUNwQztBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLHFCQUFxQjtBQUNyQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUU0QztBQUM1QyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vd3JhcEdlbmVyYXRpb25GdW5jdGlvbldpdGhTZW50cnkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0QWN0aXZlU3BhbiwgZ2V0Um9vdFNwYW4sIGdldENhcHR1cmVkU2NvcGVzT25TcGFuLCBzZXRDYXB0dXJlZFNjb3Blc09uU3BhbiwgU2NvcGUsIHNwYW5Ub0pTT04sIHdpbnRlckNHSGVhZGVyc1RvRGljdCwgZ2V0Q2xpZW50LCB3aXRoSXNvbGF0aW9uU2NvcGUsIHdpdGhTY29wZSwgcHJvcGFnYXRpb25Db250ZXh0RnJvbUhlYWRlcnMsIHN0YXJ0U3Bhbk1hbnVhbCwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU4sIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFLCBoYW5kbGVDYWxsYmFja0Vycm9ycywgU1BBTl9TVEFUVVNfRVJST1IsIFNQQU5fU1RBVFVTX09LLCBjYXB0dXJlRXhjZXB0aW9uIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGlzTm90Rm91bmROYXZpZ2F0aW9uRXJyb3IsIGlzUmVkaXJlY3ROYXZpZ2F0aW9uRXJyb3IgfSBmcm9tICcuL25leHROYXZpZ2F0aW9uRXJyb3JVdGlscy5qcyc7XG5pbXBvcnQgeyBUUkFOU0FDVElPTl9BVFRSX1NFTlRSWV9UUkFDRV9CQUNLRklMTCB9IGZyb20gJy4vc3Bhbi1hdHRyaWJ1dGVzLXdpdGgtbG9naWMtYXR0YWNoZWQuanMnO1xuaW1wb3J0IHsgY29tbW9uT2JqZWN0VG9Jc29sYXRpb25TY29wZSwgY29tbW9uT2JqZWN0VG9Qcm9wYWdhdGlvbkNvbnRleHQgfSBmcm9tICcuL3V0aWxzL3RyYWNpbmdVdGlscy5qcyc7XG5pbXBvcnQgeyBnZXRTYW5pdGl6ZWRSZXF1ZXN0VXJsIH0gZnJvbSAnLi91dGlscy91cmxzLmpzJztcbmltcG9ydCB7IG1heWJlRXh0cmFjdFN5bmNocm9ub3VzUGFyYW1zQW5kU2VhcmNoUGFyYW1zIH0gZnJvbSAnLi91dGlscy93cmFwcGVyVXRpbHMuanMnO1xuXG4vKipcbiAqIFdyYXBzIGEgZ2VuZXJhdGlvbiBmdW5jdGlvbiAoZS5nLiBnZW5lcmF0ZU1ldGFkYXRhKSB3aXRoIFNlbnRyeSBlcnJvciBhbmQgcGVyZm9ybWFuY2UgaW5zdHJ1bWVudGF0aW9uLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gd3JhcEdlbmVyYXRpb25GdW5jdGlvbldpdGhTZW50cnkoXG4gIGdlbmVyYXRpb25GdW5jdGlvbixcbiAgY29udGV4dCxcbikge1xuICBjb25zdCB7IHJlcXVlc3RBc3luY1N0b3JhZ2UsIGNvbXBvbmVudFJvdXRlLCBjb21wb25lbnRUeXBlLCBnZW5lcmF0aW9uRnVuY3Rpb25JZGVudGlmaWVyIH0gPSBjb250ZXh0O1xuICByZXR1cm4gbmV3IFByb3h5KGdlbmVyYXRpb25GdW5jdGlvbiwge1xuICAgIGFwcGx5OiAob3JpZ2luYWxGdW5jdGlvbiwgdGhpc0FyZywgYXJncykgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdFRyYWNlSWQgPSBnZXRBY3RpdmVTcGFuKCk/LnNwYW5Db250ZXh0KCkudHJhY2VJZDtcbiAgICAgIGxldCBoZWFkZXJzID0gdW5kZWZpbmVkO1xuICAgICAgLy8gV2UgdHJ5LWNhdGNoIGhlcmUganVzdCBpbiBjYXNlIGFueXRoaW5nIGdvZXMgd3Jvbmcgd2l0aCB0aGUgYXN5bmMgc3RvcmFnZSBoZXJlIGdvZXMgd3Jvbmcgc2luY2UgaXQgaXMgTmV4dC5qcyBpbnRlcm5hbCBBUElcbiAgICAgIHRyeSB7XG4gICAgICAgIGhlYWRlcnMgPSByZXF1ZXN0QXN5bmNTdG9yYWdlPy5nZXRTdG9yZSgpPy5oZWFkZXJzO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8qKiBlbXB0eSAqL1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc29sYXRpb25TY29wZSA9IGNvbW1vbk9iamVjdFRvSXNvbGF0aW9uU2NvcGUoaGVhZGVycyk7XG4gICAgICBsZXQgcGF0aG5hbWUgPSB1bmRlZmluZWQgO1xuXG4gICAgICBjb25zdCBhY3RpdmVTcGFuID0gZ2V0QWN0aXZlU3BhbigpO1xuICAgICAgaWYgKGFjdGl2ZVNwYW4pIHtcbiAgICAgICAgY29uc3Qgcm9vdFNwYW4gPSBnZXRSb290U3BhbihhY3RpdmVTcGFuKTtcbiAgICAgICAgY29uc3QgeyBzY29wZSB9ID0gZ2V0Q2FwdHVyZWRTY29wZXNPblNwYW4ocm9vdFNwYW4pO1xuICAgICAgICBzZXRDYXB0dXJlZFNjb3Blc09uU3Bhbihyb290U3Bhbiwgc2NvcGUgPz8gbmV3IFNjb3BlKCksIGlzb2xhdGlvblNjb3BlKTtcblxuICAgICAgICBjb25zdCBzcGFuRGF0YSA9IHNwYW5Ub0pTT04ocm9vdFNwYW4pO1xuXG4gICAgICAgIGlmIChzcGFuRGF0YS5kYXRhICYmICdodHRwLnRhcmdldCcgaW4gc3BhbkRhdGEuZGF0YSkge1xuICAgICAgICAgIHBhdGhuYW1lID0gc3BhbkRhdGEuZGF0YVsnaHR0cC50YXJnZXQnXSA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgaGVhZGVyc0RpY3QgPSBoZWFkZXJzID8gd2ludGVyQ0dIZWFkZXJzVG9EaWN0KGhlYWRlcnMpIDogdW5kZWZpbmVkO1xuXG4gICAgICBsZXQgZGF0YSA9IHVuZGVmaW5lZDtcbiAgICAgIGlmIChnZXRDbGllbnQoKT8uZ2V0T3B0aW9ucygpLnNlbmREZWZhdWx0UGlpKSB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gYXJnc1swXTtcbiAgICAgICAgY29uc3QgeyBwYXJhbXMsIHNlYXJjaFBhcmFtcyB9ID0gbWF5YmVFeHRyYWN0U3luY2hyb25vdXNQYXJhbXNBbmRTZWFyY2hQYXJhbXMocHJvcHMpO1xuICAgICAgICBkYXRhID0geyBwYXJhbXMsIHNlYXJjaFBhcmFtcyB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gd2l0aElzb2xhdGlvblNjb3BlKGlzb2xhdGlvblNjb3BlLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiB3aXRoU2NvcGUoc2NvcGUgPT4ge1xuICAgICAgICAgIHNjb3BlLnNldFRyYW5zYWN0aW9uTmFtZShgJHtjb21wb25lbnRUeXBlfS4ke2dlbmVyYXRpb25GdW5jdGlvbklkZW50aWZpZXJ9ICgke2NvbXBvbmVudFJvdXRlfSlgKTtcblxuICAgICAgICAgIGlzb2xhdGlvblNjb3BlLnNldFNES1Byb2Nlc3NpbmdNZXRhZGF0YSh7XG4gICAgICAgICAgICBub3JtYWxpemVkUmVxdWVzdDoge1xuICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzRGljdCxcbiAgICAgICAgICAgICAgdXJsOiBnZXRTYW5pdGl6ZWRSZXF1ZXN0VXJsKFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJvdXRlLFxuICAgICAgICAgICAgICAgIGRhdGE/LnBhcmFtcyAsXG4gICAgICAgICAgICAgICAgaGVhZGVyc0RpY3QsXG4gICAgICAgICAgICAgICAgcGF0aG5hbWUsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9ICxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGFjdGl2ZVNwYW4gPSBnZXRBY3RpdmVTcGFuKCk7XG4gICAgICAgICAgaWYgKGFjdGl2ZVNwYW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHJvb3RTcGFuID0gZ2V0Um9vdFNwYW4oYWN0aXZlU3Bhbik7XG4gICAgICAgICAgICBjb25zdCBzZW50cnlUcmFjZSA9IGhlYWRlcnNEaWN0Py5bJ3NlbnRyeS10cmFjZSddO1xuICAgICAgICAgICAgaWYgKHNlbnRyeVRyYWNlKSB7XG4gICAgICAgICAgICAgIHJvb3RTcGFuLnNldEF0dHJpYnV0ZShUUkFOU0FDVElPTl9BVFRSX1NFTlRSWV9UUkFDRV9CQUNLRklMTCwgc2VudHJ5VHJhY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHByb3BhZ2F0aW9uQ29udGV4dCA9IGNvbW1vbk9iamVjdFRvUHJvcGFnYXRpb25Db250ZXh0KFxuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIHByb3BhZ2F0aW9uQ29udGV4dEZyb21IZWFkZXJzKGhlYWRlcnNEaWN0Py5bJ3NlbnRyeS10cmFjZSddLCBoZWFkZXJzRGljdD8uWydiYWdnYWdlJ10pLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAocmVxdWVzdFRyYWNlSWQpIHtcbiAgICAgICAgICAgIHByb3BhZ2F0aW9uQ29udGV4dC50cmFjZUlkID0gcmVxdWVzdFRyYWNlSWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2NvcGUuc2V0UHJvcGFnYXRpb25Db250ZXh0KHByb3BhZ2F0aW9uQ29udGV4dCk7XG5cbiAgICAgICAgICBzY29wZS5zZXRFeHRyYSgncm91dGVfZGF0YScsIGRhdGEpO1xuXG4gICAgICAgICAgcmV0dXJuIHN0YXJ0U3Bhbk1hbnVhbChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb3A6ICdmdW5jdGlvbi5uZXh0anMnLFxuICAgICAgICAgICAgICBuYW1lOiBgJHtjb21wb25lbnRUeXBlfS4ke2dlbmVyYXRpb25GdW5jdGlvbklkZW50aWZpZXJ9ICgke2NvbXBvbmVudFJvdXRlfSlgLFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFXTogJ3JvdXRlJyxcbiAgICAgICAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiAnYXV0by5mdW5jdGlvbi5uZXh0anMnLFxuICAgICAgICAgICAgICAgICdzZW50cnkubmV4dGpzLnNzci5mdW5jdGlvbi50eXBlJzogZ2VuZXJhdGlvbkZ1bmN0aW9uSWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICAnc2VudHJ5Lm5leHRqcy5zc3IuZnVuY3Rpb24ucm91dGUnOiBjb21wb25lbnRSb3V0ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzcGFuID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUNhbGxiYWNrRXJyb3JzKFxuICAgICAgICAgICAgICAgICgpID0+IG9yaWdpbmFsRnVuY3Rpb24uYXBwbHkodGhpc0FyZywgYXJncyksXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFdoZW4geW91IHJlYWQgdGhpcyBjb2RlIHlvdSBtaWdodCB0aGluazogXCJXYWl0IGEgbWludXRlLCBzaG91bGRuJ3Qgd2Ugc2V0IHRoZSBzdGF0dXMgb24gdGhlIHJvb3Qgc3BhbiB0b28/XCJcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBhbnN3ZXIgaXM6IFwiTm8uXCIgLSBUaGUgc3RhdHVzIG9mIHRoZSByb290IHNwYW4gaXMgZGV0ZXJtaW5lZCBieSB3aGF0ZXZlciBzdGF0dXMgY29kZSBOZXh0LmpzIGRlY2lkZXMgdG8gcHV0IG9uIHRoZSByZXNwb25zZS5cbiAgICAgICAgICAgICAgICAgIGlmIChpc05vdEZvdW5kTmF2aWdhdGlvbkVycm9yKGVycikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXBvcnQgXCJub3QtZm91bmRcInNcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTUEFOX1NUQVRVU19FUlJPUiwgbWVzc2FnZTogJ25vdF9mb3VuZCcgfSk7XG4gICAgICAgICAgICAgICAgICAgIGdldFJvb3RTcGFuKHNwYW4pLnNldFN0YXR1cyh7IGNvZGU6IFNQQU5fU1RBVFVTX0VSUk9SLCBtZXNzYWdlOiAnbm90X2ZvdW5kJyB9KTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNSZWRpcmVjdE5hdmlnYXRpb25FcnJvcihlcnIpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmVwb3J0IHJlZGlyZWN0c1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnNldFN0YXR1cyh7IGNvZGU6IFNQQU5fU1RBVFVTX09LIH0pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTUEFOX1NUQVRVU19FUlJPUiwgbWVzc2FnZTogJ2ludGVybmFsX2Vycm9yJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgZ2V0Um9vdFNwYW4oc3Bhbikuc2V0U3RhdHVzKHsgY29kZTogU1BBTl9TVEFUVVNfRVJST1IsIG1lc3NhZ2U6ICdpbnRlcm5hbF9lcnJvcicgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNhcHR1cmVFeGNlcHRpb24oZXJyLCB7XG4gICAgICAgICAgICAgICAgICAgICAgbWVjaGFuaXNtOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNwYW4uZW5kKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IHsgd3JhcEdlbmVyYXRpb25GdW5jdGlvbldpdGhTZW50cnkgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdyYXBHZW5lcmF0aW9uRnVuY3Rpb25XaXRoU2VudHJ5LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapGenerationFunctionWithSentry.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapMiddlewareWithSentry.js":
/*!******************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapMiddlewareWithSentry.js ***!
  \******************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   wrapMiddlewareWithSentry: () => (/* binding */ wrapMiddlewareWithSentry)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _utils_responseEnd_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/responseEnd.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/responseEnd.js\");\n\n\n\n/**\n * Wraps Next.js middleware with Sentry error and performance instrumentation.\n *\n * @param middleware The middleware handler.\n * @returns a wrapped middleware handler.\n */\nfunction wrapMiddlewareWithSentry(\n  middleware,\n) {\n  return new Proxy(middleware, {\n    apply: async (wrappingTarget, thisArg, args) => {\n      const tunnelRoute =\n        '_sentryRewritesTunnelPath' in globalThis\n          ? (globalThis )._sentryRewritesTunnelPath\n          : undefined;\n\n      if (tunnelRoute && typeof tunnelRoute === 'string') {\n        const req = args[0];\n        // Check if the current request matches the tunnel route\n        if (req instanceof Request) {\n          const url = new URL(req.url);\n          const isTunnelRequest = url.pathname.startsWith(tunnelRoute);\n\n          if (isTunnelRequest) {\n            // Create a simple response that mimics NextResponse.next() so we don't need to import internals here\n            // which breaks next 13 apps\n            // https://github.com/vercel/next.js/blob/c12c9c1f78ad384270902f0890dc4cd341408105/packages/next/src/server/web/spec-extension/response.ts#L146\n            return new Response(null, {\n              status: 200,\n              headers: {\n                'x-middleware-next': '1',\n              },\n            }) ;\n          }\n        }\n      }\n      // TODO: We still should add central isolation scope creation for when our build-time instrumentation does not work anymore with turbopack.\n      return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.withIsolationScope)(isolationScope => {\n        const req = args[0];\n        const currentScope = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n\n        let spanName;\n        let spanSource;\n\n        if (req instanceof Request) {\n          isolationScope.setSDKProcessingMetadata({\n            normalizedRequest: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.winterCGRequestToRequestData)(req),\n          });\n          spanName = `middleware ${req.method} ${new URL(req.url).pathname}`;\n          spanSource = 'url';\n        } else {\n          spanName = 'middleware';\n          spanSource = 'component';\n        }\n\n        currentScope.setTransactionName(spanName);\n\n        const activeSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n\n        if (activeSpan) {\n          // If there is an active span, it likely means that the automatic Next.js OTEL instrumentation worked and we can\n          // rely on that for parameterization.\n          spanName = 'middleware';\n          spanSource = 'component';\n\n          const rootSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(activeSpan);\n          if (rootSpan) {\n            (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.setCapturedScopesOnSpan)(rootSpan, currentScope, isolationScope);\n          }\n        }\n\n        return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.startSpan)(\n          {\n            name: spanName,\n            op: 'http.server.middleware',\n            attributes: {\n              [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: spanSource,\n              [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.nextjs.wrapMiddlewareWithSentry',\n            },\n          },\n          () => {\n            return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.handleCallbackErrors)(\n              () => wrappingTarget.apply(thisArg, args),\n              error => {\n                (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureException)(error, {\n                  mechanism: {\n                    type: 'instrument',\n                    handled: false,\n                  },\n                });\n              },\n              () => {\n                (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.vercelWaitUntil)((0,_utils_responseEnd_js__WEBPACK_IMPORTED_MODULE_1__.flushSafelyWithTimeout)());\n              },\n            );\n          },\n        );\n      });\n    },\n  });\n}\n\n\n//# sourceMappingURL=wrapMiddlewareWithSentry.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vd3JhcE1pZGRsZXdhcmVXaXRoU2VudHJ5LmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUE4UjtBQUM5Tjs7QUFFaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0VBQWtCO0FBQy9CO0FBQ0EsNkJBQTZCLDZEQUFlOztBQUU1QztBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0IsMEVBQTRCO0FBQzNELFdBQVc7QUFDWCxtQ0FBbUMsWUFBWSxFQUFFLDBCQUEwQjtBQUMzRTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsMkJBQTJCLDJEQUFhOztBQUV4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQix5REFBVztBQUN0QztBQUNBLFlBQVkscUVBQXVCO0FBQ25DO0FBQ0E7O0FBRUEsZUFBZSx1REFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsMEVBQWdDO0FBQy9DLGVBQWUsMEVBQWdDO0FBQy9DLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQSxtQkFBbUIsa0VBQW9CO0FBQ3ZDO0FBQ0E7QUFDQSxnQkFBZ0IsOERBQWdCO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQixpQkFBaUI7QUFDakIsZUFBZTtBQUNmO0FBQ0EsZ0JBQWdCLDZEQUFlLENBQUMsNkVBQXNCO0FBQ3RELGVBQWU7QUFDZjtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVvQztBQUNwQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vd3JhcE1pZGRsZXdhcmVXaXRoU2VudHJ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdpdGhJc29sYXRpb25TY29wZSwgZ2V0Q3VycmVudFNjb3BlLCB3aW50ZXJDR1JlcXVlc3RUb1JlcXVlc3REYXRhLCBnZXRBY3RpdmVTcGFuLCBnZXRSb290U3Bhbiwgc2V0Q2FwdHVyZWRTY29wZXNPblNwYW4sIHN0YXJ0U3BhbiwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU4sIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFLCBoYW5kbGVDYWxsYmFja0Vycm9ycywgY2FwdHVyZUV4Y2VwdGlvbiwgdmVyY2VsV2FpdFVudGlsIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGZsdXNoU2FmZWx5V2l0aFRpbWVvdXQgfSBmcm9tICcuL3V0aWxzL3Jlc3BvbnNlRW5kLmpzJztcblxuLyoqXG4gKiBXcmFwcyBOZXh0LmpzIG1pZGRsZXdhcmUgd2l0aCBTZW50cnkgZXJyb3IgYW5kIHBlcmZvcm1hbmNlIGluc3RydW1lbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0gbWlkZGxld2FyZSBUaGUgbWlkZGxld2FyZSBoYW5kbGVyLlxuICogQHJldHVybnMgYSB3cmFwcGVkIG1pZGRsZXdhcmUgaGFuZGxlci5cbiAqL1xuZnVuY3Rpb24gd3JhcE1pZGRsZXdhcmVXaXRoU2VudHJ5KFxuICBtaWRkbGV3YXJlLFxuKSB7XG4gIHJldHVybiBuZXcgUHJveHkobWlkZGxld2FyZSwge1xuICAgIGFwcGx5OiBhc3luYyAod3JhcHBpbmdUYXJnZXQsIHRoaXNBcmcsIGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHR1bm5lbFJvdXRlID1cbiAgICAgICAgJ19zZW50cnlSZXdyaXRlc1R1bm5lbFBhdGgnIGluIGdsb2JhbFRoaXNcbiAgICAgICAgICA/IChnbG9iYWxUaGlzICkuX3NlbnRyeVJld3JpdGVzVHVubmVsUGF0aFxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAodHVubmVsUm91dGUgJiYgdHlwZW9mIHR1bm5lbFJvdXRlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCByZXEgPSBhcmdzWzBdO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCByZXF1ZXN0IG1hdGNoZXMgdGhlIHR1bm5lbCByb3V0ZVxuICAgICAgICBpZiAocmVxIGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7XG4gICAgICAgICAgY29uc3QgaXNUdW5uZWxSZXF1ZXN0ID0gdXJsLnBhdGhuYW1lLnN0YXJ0c1dpdGgodHVubmVsUm91dGUpO1xuXG4gICAgICAgICAgaWYgKGlzVHVubmVsUmVxdWVzdCkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgc2ltcGxlIHJlc3BvbnNlIHRoYXQgbWltaWNzIE5leHRSZXNwb25zZS5uZXh0KCkgc28gd2UgZG9uJ3QgbmVlZCB0byBpbXBvcnQgaW50ZXJuYWxzIGhlcmVcbiAgICAgICAgICAgIC8vIHdoaWNoIGJyZWFrcyBuZXh0IDEzIGFwcHNcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvbmV4dC5qcy9ibG9iL2MxMmM5YzFmNzhhZDM4NDI3MDkwMmYwODkwZGM0Y2QzNDE0MDgxMDUvcGFja2FnZXMvbmV4dC9zcmMvc2VydmVyL3dlYi9zcGVjLWV4dGVuc2lvbi9yZXNwb25zZS50cyNMMTQ2XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtcbiAgICAgICAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAneC1taWRkbGV3YXJlLW5leHQnOiAnMScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBUT0RPOiBXZSBzdGlsbCBzaG91bGQgYWRkIGNlbnRyYWwgaXNvbGF0aW9uIHNjb3BlIGNyZWF0aW9uIGZvciB3aGVuIG91ciBidWlsZC10aW1lIGluc3RydW1lbnRhdGlvbiBkb2VzIG5vdCB3b3JrIGFueW1vcmUgd2l0aCB0dXJib3BhY2suXG4gICAgICByZXR1cm4gd2l0aElzb2xhdGlvblNjb3BlKGlzb2xhdGlvblNjb3BlID0+IHtcbiAgICAgICAgY29uc3QgcmVxID0gYXJnc1swXTtcbiAgICAgICAgY29uc3QgY3VycmVudFNjb3BlID0gZ2V0Q3VycmVudFNjb3BlKCk7XG5cbiAgICAgICAgbGV0IHNwYW5OYW1lO1xuICAgICAgICBsZXQgc3BhblNvdXJjZTtcblxuICAgICAgICBpZiAocmVxIGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAgIGlzb2xhdGlvblNjb3BlLnNldFNES1Byb2Nlc3NpbmdNZXRhZGF0YSh7XG4gICAgICAgICAgICBub3JtYWxpemVkUmVxdWVzdDogd2ludGVyQ0dSZXF1ZXN0VG9SZXF1ZXN0RGF0YShyZXEpLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNwYW5OYW1lID0gYG1pZGRsZXdhcmUgJHtyZXEubWV0aG9kfSAke25ldyBVUkwocmVxLnVybCkucGF0aG5hbWV9YDtcbiAgICAgICAgICBzcGFuU291cmNlID0gJ3VybCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3Bhbk5hbWUgPSAnbWlkZGxld2FyZSc7XG4gICAgICAgICAgc3BhblNvdXJjZSA9ICdjb21wb25lbnQnO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFNjb3BlLnNldFRyYW5zYWN0aW9uTmFtZShzcGFuTmFtZSk7XG5cbiAgICAgICAgY29uc3QgYWN0aXZlU3BhbiA9IGdldEFjdGl2ZVNwYW4oKTtcblxuICAgICAgICBpZiAoYWN0aXZlU3Bhbikge1xuICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFuIGFjdGl2ZSBzcGFuLCBpdCBsaWtlbHkgbWVhbnMgdGhhdCB0aGUgYXV0b21hdGljIE5leHQuanMgT1RFTCBpbnN0cnVtZW50YXRpb24gd29ya2VkIGFuZCB3ZSBjYW5cbiAgICAgICAgICAvLyByZWx5IG9uIHRoYXQgZm9yIHBhcmFtZXRlcml6YXRpb24uXG4gICAgICAgICAgc3Bhbk5hbWUgPSAnbWlkZGxld2FyZSc7XG4gICAgICAgICAgc3BhblNvdXJjZSA9ICdjb21wb25lbnQnO1xuXG4gICAgICAgICAgY29uc3Qgcm9vdFNwYW4gPSBnZXRSb290U3BhbihhY3RpdmVTcGFuKTtcbiAgICAgICAgICBpZiAocm9vdFNwYW4pIHtcbiAgICAgICAgICAgIHNldENhcHR1cmVkU2NvcGVzT25TcGFuKHJvb3RTcGFuLCBjdXJyZW50U2NvcGUsIGlzb2xhdGlvblNjb3BlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3RhcnRTcGFuKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHNwYW5OYW1lLFxuICAgICAgICAgICAgb3A6ICdodHRwLnNlcnZlci5taWRkbGV3YXJlJyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFXTogc3BhblNvdXJjZSxcbiAgICAgICAgICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOXTogJ2F1dG8uZnVuY3Rpb24ubmV4dGpzLndyYXBNaWRkbGV3YXJlV2l0aFNlbnRyeScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUNhbGxiYWNrRXJyb3JzKFxuICAgICAgICAgICAgICAoKSA9PiB3cmFwcGluZ1RhcmdldC5hcHBseSh0aGlzQXJnLCBhcmdzKSxcbiAgICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGNhcHR1cmVFeGNlcHRpb24oZXJyb3IsIHtcbiAgICAgICAgICAgICAgICAgIG1lY2hhbmlzbToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnaW5zdHJ1bWVudCcsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZlcmNlbFdhaXRVbnRpbChmbHVzaFNhZmVseVdpdGhUaW1lb3V0KCkpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydCB7IHdyYXBNaWRkbGV3YXJlV2l0aFNlbnRyeSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d3JhcE1pZGRsZXdhcmVXaXRoU2VudHJ5LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapMiddlewareWithSentry.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapRouteHandlerWithSentry.js":
/*!********************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapRouteHandlerWithSentry.js ***!
  \********************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   wrapRouteHandlerWithSentry: () => (/* binding */ wrapRouteHandlerWithSentry)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _nextNavigationErrorUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./nextNavigationErrorUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/nextNavigationErrorUtils.js\");\n/* harmony import */ var _utils_responseEnd_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/responseEnd.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/responseEnd.js\");\n/* harmony import */ var _utils_tracingUtils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/tracingUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/tracingUtils.js\");\n\n\n\n\n\n/**\n * Wraps a Next.js App Router Route handler with Sentry error and performance instrumentation.\n *\n * NOTICE: This wrapper is for App Router API routes. If you are looking to wrap Pages Router API routes use `wrapApiHandlerWithSentry` instead.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction wrapRouteHandlerWithSentry(\n  routeHandler,\n  context,\n) {\n  const { method, parameterizedRoute, headers } = context;\n\n  return new Proxy(routeHandler, {\n    apply: async (originalFunction, thisArg, args) => {\n      const activeSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n      const rootSpan = activeSpan ? (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(activeSpan) : undefined;\n\n      let edgeRuntimeIsolationScopeOverride;\n      if (rootSpan && \"\" === 'edge') {}\n\n      return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.withIsolationScope)(\n         false ? 0 : (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)(),\n        () => {\n          return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.withScope)(async scope => {\n            scope.setTransactionName(`${method} ${parameterizedRoute}`);\n\n            if (false) {}\n\n            const response = await (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.handleCallbackErrors)(\n              () => originalFunction.apply(thisArg, args),\n              error => {\n                // Next.js throws errors when calling `redirect()`. We don't wanna report these.\n                if ((0,_nextNavigationErrorUtils_js__WEBPACK_IMPORTED_MODULE_1__.isRedirectNavigationError)(error)) ; else if ((0,_nextNavigationErrorUtils_js__WEBPACK_IMPORTED_MODULE_1__.isNotFoundNavigationError)(error)) {\n                  if (activeSpan) {\n                    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.setHttpStatus)(activeSpan, 404);\n                  }\n                  if (rootSpan) {\n                    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.setHttpStatus)(rootSpan, 404);\n                  }\n                } else {\n                  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureException)(error, {\n                    mechanism: {\n                      handled: false,\n                    },\n                  });\n                }\n              },\n              () => {\n                (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.vercelWaitUntil)((0,_utils_responseEnd_js__WEBPACK_IMPORTED_MODULE_2__.flushSafelyWithTimeout)());\n              },\n            );\n\n            try {\n              if (response.status) {\n                if (activeSpan) {\n                  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.setHttpStatus)(activeSpan, response.status);\n                }\n                if (rootSpan) {\n                  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.setHttpStatus)(rootSpan, response.status);\n                }\n              }\n            } catch {\n              // best effort - response may be undefined?\n            }\n\n            return response;\n          });\n        },\n      );\n    },\n  });\n}\n\n\n//# sourceMappingURL=wrapRouteHandlerWithSentry.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vd3JhcFJvdXRlSGFuZGxlcldpdGhTZW50cnkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBbVc7QUFDOVA7QUFDckM7QUFDTzs7QUFFdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLHNDQUFzQzs7QUFFaEQ7QUFDQTtBQUNBLHlCQUF5QiwyREFBYTtBQUN0QyxvQ0FBb0MseURBQVc7O0FBRS9DO0FBQ0Esc0JBQXNCLEVBQXdCLGFBQWEsRUFVcEQ7O0FBRVAsYUFBYSxnRUFBa0I7QUFDL0IsUUFBUSxNQUFtQyxHQUFHLENBQWlDLEdBQUcsK0RBQWlCO0FBQ25HO0FBQ0EsaUJBQWlCLHVEQUFTO0FBQzFCLHdDQUF3QyxRQUFRLEVBQUUsbUJBQW1COztBQUVyRSxnQkFBZ0IsS0FBbUMsRUFBRSxFQWF4Qzs7QUFFYixtQ0FBbUMsa0VBQW9CO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix1RkFBeUIsV0FBVyxTQUFTLHVGQUF5QjtBQUMxRjtBQUNBLG9CQUFvQiwyREFBYTtBQUNqQztBQUNBO0FBQ0Esb0JBQW9CLDJEQUFhO0FBQ2pDO0FBQ0Esa0JBQWtCO0FBQ2xCLGtCQUFrQiw4REFBZ0I7QUFDbEM7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixtQkFBbUI7QUFDbkI7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxnQkFBZ0IsNkRBQWUsQ0FBQyw2RUFBc0I7QUFDdEQsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiwyREFBYTtBQUMvQjtBQUNBO0FBQ0Esa0JBQWtCLDJEQUFhO0FBQy9CO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVzQztBQUN0QyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vd3JhcFJvdXRlSGFuZGxlcldpdGhTZW50cnkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0QWN0aXZlU3BhbiwgZ2V0Um9vdFNwYW4sIGdldENhcHR1cmVkU2NvcGVzT25TcGFuLCBzZXRDYXB0dXJlZFNjb3Blc09uU3BhbiwgU2NvcGUsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QLCB3aXRoSXNvbGF0aW9uU2NvcGUsIGdldElzb2xhdGlvblNjb3BlLCB3aXRoU2NvcGUsIHdpbnRlckNHSGVhZGVyc1RvRGljdCwgcHJvcGFnYXRpb25Db250ZXh0RnJvbUhlYWRlcnMsIGhhbmRsZUNhbGxiYWNrRXJyb3JzLCBzZXRIdHRwU3RhdHVzLCBjYXB0dXJlRXhjZXB0aW9uLCB2ZXJjZWxXYWl0VW50aWwgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgaXNSZWRpcmVjdE5hdmlnYXRpb25FcnJvciwgaXNOb3RGb3VuZE5hdmlnYXRpb25FcnJvciB9IGZyb20gJy4vbmV4dE5hdmlnYXRpb25FcnJvclV0aWxzLmpzJztcbmltcG9ydCB7IGZsdXNoU2FmZWx5V2l0aFRpbWVvdXQgfSBmcm9tICcuL3V0aWxzL3Jlc3BvbnNlRW5kLmpzJztcbmltcG9ydCB7IGNvbW1vbk9iamVjdFRvSXNvbGF0aW9uU2NvcGUgfSBmcm9tICcuL3V0aWxzL3RyYWNpbmdVdGlscy5qcyc7XG5cbi8qKlxuICogV3JhcHMgYSBOZXh0LmpzIEFwcCBSb3V0ZXIgUm91dGUgaGFuZGxlciB3aXRoIFNlbnRyeSBlcnJvciBhbmQgcGVyZm9ybWFuY2UgaW5zdHJ1bWVudGF0aW9uLlxuICpcbiAqIE5PVElDRTogVGhpcyB3cmFwcGVyIGlzIGZvciBBcHAgUm91dGVyIEFQSSByb3V0ZXMuIElmIHlvdSBhcmUgbG9va2luZyB0byB3cmFwIFBhZ2VzIFJvdXRlciBBUEkgcm91dGVzIHVzZSBgd3JhcEFwaUhhbmRsZXJXaXRoU2VudHJ5YCBpbnN0ZWFkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gd3JhcFJvdXRlSGFuZGxlcldpdGhTZW50cnkoXG4gIHJvdXRlSGFuZGxlcixcbiAgY29udGV4dCxcbikge1xuICBjb25zdCB7IG1ldGhvZCwgcGFyYW1ldGVyaXplZFJvdXRlLCBoZWFkZXJzIH0gPSBjb250ZXh0O1xuXG4gIHJldHVybiBuZXcgUHJveHkocm91dGVIYW5kbGVyLCB7XG4gICAgYXBwbHk6IGFzeW5jIChvcmlnaW5hbEZ1bmN0aW9uLCB0aGlzQXJnLCBhcmdzKSA9PiB7XG4gICAgICBjb25zdCBhY3RpdmVTcGFuID0gZ2V0QWN0aXZlU3BhbigpO1xuICAgICAgY29uc3Qgcm9vdFNwYW4gPSBhY3RpdmVTcGFuID8gZ2V0Um9vdFNwYW4oYWN0aXZlU3BhbikgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGxldCBlZGdlUnVudGltZUlzb2xhdGlvblNjb3BlT3ZlcnJpZGU7XG4gICAgICBpZiAocm9vdFNwYW4gJiYgcHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FID09PSAnZWRnZScpIHtcbiAgICAgICAgY29uc3QgaXNvbGF0aW9uU2NvcGUgPSBjb21tb25PYmplY3RUb0lzb2xhdGlvblNjb3BlKGhlYWRlcnMpO1xuICAgICAgICBjb25zdCB7IHNjb3BlIH0gPSBnZXRDYXB0dXJlZFNjb3Blc09uU3Bhbihyb290U3Bhbik7XG4gICAgICAgIHNldENhcHR1cmVkU2NvcGVzT25TcGFuKHJvb3RTcGFuLCBzY29wZSA/PyBuZXcgU2NvcGUoKSwgaXNvbGF0aW9uU2NvcGUpO1xuXG4gICAgICAgIGVkZ2VSdW50aW1lSXNvbGF0aW9uU2NvcGVPdmVycmlkZSA9IGlzb2xhdGlvblNjb3BlO1xuXG4gICAgICAgIHJvb3RTcGFuLnVwZGF0ZU5hbWUoYCR7bWV0aG9kfSAke3BhcmFtZXRlcml6ZWRSb3V0ZX1gKTtcbiAgICAgICAgcm9vdFNwYW4uc2V0QXR0cmlidXRlKFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFLCAncm91dGUnKTtcbiAgICAgICAgcm9vdFNwYW4uc2V0QXR0cmlidXRlKFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1AsICdodHRwLnNlcnZlcicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gd2l0aElzb2xhdGlvblNjb3BlKFxuICAgICAgICBwcm9jZXNzLmVudi5ORVhUX1JVTlRJTUUgPT09ICdlZGdlJyA/IGVkZ2VSdW50aW1lSXNvbGF0aW9uU2NvcGVPdmVycmlkZSA6IGdldElzb2xhdGlvblNjb3BlKCksXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gd2l0aFNjb3BlKGFzeW5jIHNjb3BlID0+IHtcbiAgICAgICAgICAgIHNjb3BlLnNldFRyYW5zYWN0aW9uTmFtZShgJHttZXRob2R9ICR7cGFyYW1ldGVyaXplZFJvdXRlfWApO1xuXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FID09PSAnZWRnZScpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tcGxldGVIZWFkZXJzRGljdCA9IGhlYWRlcnMgPyB3aW50ZXJDR0hlYWRlcnNUb0RpY3QoaGVhZGVycykgOiB7fTtcbiAgICAgICAgICAgICAgY29uc3QgaW5jb21pbmdQcm9wYWdhdGlvbkNvbnRleHQgPSBwcm9wYWdhdGlvbkNvbnRleHRGcm9tSGVhZGVycyhcbiAgICAgICAgICAgICAgICBjb21wbGV0ZUhlYWRlcnNEaWN0WydzZW50cnktdHJhY2UnXSxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZUhlYWRlcnNEaWN0WydiYWdnYWdlJ10sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHNjb3BlLnNldFByb3BhZ2F0aW9uQ29udGV4dChpbmNvbWluZ1Byb3BhZ2F0aW9uQ29udGV4dCk7XG4gICAgICAgICAgICAgIHNjb3BlLnNldFNES1Byb2Nlc3NpbmdNZXRhZGF0YSh7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZFJlcXVlc3Q6IHtcbiAgICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGNvbXBsZXRlSGVhZGVyc0RpY3QsXG4gICAgICAgICAgICAgICAgfSAsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGhhbmRsZUNhbGxiYWNrRXJyb3JzKFxuICAgICAgICAgICAgICAoKSA9PiBvcmlnaW5hbEZ1bmN0aW9uLmFwcGx5KHRoaXNBcmcsIGFyZ3MpLFxuICAgICAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gTmV4dC5qcyB0aHJvd3MgZXJyb3JzIHdoZW4gY2FsbGluZyBgcmVkaXJlY3QoKWAuIFdlIGRvbid0IHdhbm5hIHJlcG9ydCB0aGVzZS5cbiAgICAgICAgICAgICAgICBpZiAoaXNSZWRpcmVjdE5hdmlnYXRpb25FcnJvcihlcnJvcikpIDsgZWxzZSBpZiAoaXNOb3RGb3VuZE5hdmlnYXRpb25FcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVTcGFuKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEh0dHBTdGF0dXMoYWN0aXZlU3BhbiwgNDA0KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChyb290U3Bhbikge1xuICAgICAgICAgICAgICAgICAgICBzZXRIdHRwU3RhdHVzKHJvb3RTcGFuLCA0MDQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjYXB0dXJlRXhjZXB0aW9uKGVycm9yLCB7XG4gICAgICAgICAgICAgICAgICAgIG1lY2hhbmlzbToge1xuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdmVyY2VsV2FpdFVudGlsKGZsdXNoU2FmZWx5V2l0aFRpbWVvdXQoKSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVNwYW4pIHtcbiAgICAgICAgICAgICAgICAgIHNldEh0dHBTdGF0dXMoYWN0aXZlU3BhbiwgcmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJvb3RTcGFuKSB7XG4gICAgICAgICAgICAgICAgICBzZXRIdHRwU3RhdHVzKHJvb3RTcGFuLCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIC8vIGJlc3QgZWZmb3J0IC0gcmVzcG9uc2UgbWF5IGJlIHVuZGVmaW5lZD9cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IHsgd3JhcFJvdXRlSGFuZGxlcldpdGhTZW50cnkgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdyYXBSb3V0ZUhhbmRsZXJXaXRoU2VudHJ5LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapRouteHandlerWithSentry.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapServerComponentWithSentry.js":
/*!***********************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapServerComponentWithSentry.js ***!
  \***********************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   wrapServerComponentWithSentry: () => (/* binding */ wrapServerComponentWithSentry)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _nextNavigationErrorUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./nextNavigationErrorUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/nextNavigationErrorUtils.js\");\n/* harmony import */ var _utils_responseEnd_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/responseEnd.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/responseEnd.js\");\n/* harmony import */ var _span_attributes_with_logic_attached_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./span-attributes-with-logic-attached.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/span-attributes-with-logic-attached.js\");\n/* harmony import */ var _utils_tracingUtils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/tracingUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/tracingUtils.js\");\n/* harmony import */ var _utils_urls_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/urls.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/urls.js\");\n/* harmony import */ var _utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/wrapperUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/utils/wrapperUtils.js\");\n\n\n\n\n\n\n\n\n/**\n * Wraps an `app` directory server component with Sentry error instrumentation.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction wrapServerComponentWithSentry(\n  appDirComponent,\n  context,\n) {\n  const { componentRoute, componentType } = context;\n  // Even though users may define server components as async functions, for the client bundles\n  // Next.js will turn them into synchronous functions and it will transform any `await`s into instances of the `use`\n  // hook. 🤯\n  return new Proxy(appDirComponent, {\n    apply: (originalFunction, thisArg, args) => {\n      const requestTraceId = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)()?.spanContext().traceId;\n      const isolationScope = (0,_utils_tracingUtils_js__WEBPACK_IMPORTED_MODULE_4__.commonObjectToIsolationScope)(context.headers);\n\n      let pathname = undefined ;\n      const activeSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n      if (activeSpan) {\n        const rootSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(activeSpan);\n        const { scope } = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCapturedScopesOnSpan)(rootSpan);\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.setCapturedScopesOnSpan)(rootSpan, scope ?? new _sentry_core__WEBPACK_IMPORTED_MODULE_0__.Scope(), isolationScope);\n\n        const spanData = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(rootSpan);\n\n        if (spanData.data && 'http.target' in spanData.data) {\n          pathname = spanData.data['http.target']?.toString();\n        }\n      }\n\n      const headersDict = context.headers ? (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.winterCGHeadersToDict)(context.headers) : undefined;\n\n      let params = undefined;\n\n      if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)()?.getOptions().sendDefaultPii) {\n        const props = args[0];\n        const { params: paramsFromProps } = (0,_utils_wrapperUtils_js__WEBPACK_IMPORTED_MODULE_6__.maybeExtractSynchronousParamsAndSearchParams)(props);\n        params = paramsFromProps;\n      }\n\n      isolationScope.setSDKProcessingMetadata({\n        normalizedRequest: {\n          headers: headersDict,\n          url: (0,_utils_urls_js__WEBPACK_IMPORTED_MODULE_5__.getSanitizedRequestUrl)(componentRoute, params, headersDict, pathname),\n        } ,\n      });\n\n      return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.withIsolationScope)(isolationScope, () => {\n        return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.withScope)(scope => {\n          scope.setTransactionName(`${componentType} Server Component (${componentRoute})`);\n\n          if (false) {}\n\n          const activeSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n          if (activeSpan) {\n            const rootSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(activeSpan);\n            const sentryTrace = headersDict?.['sentry-trace'];\n            if (sentryTrace) {\n              rootSpan.setAttribute(_span_attributes_with_logic_attached_js__WEBPACK_IMPORTED_MODULE_3__.TRANSACTION_ATTR_SENTRY_TRACE_BACKFILL, sentryTrace);\n            }\n          }\n\n          return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.startSpanManual)(\n            {\n              op: 'function.nextjs',\n              name: `${componentType} Server Component (${componentRoute})`,\n              attributes: {\n                [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'component',\n                [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.function.nextjs',\n                'sentry.nextjs.ssr.function.type': componentType,\n                'sentry.nextjs.ssr.function.route': componentRoute,\n              },\n            },\n            span => {\n              return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.handleCallbackErrors)(\n                () => originalFunction.apply(thisArg, args),\n                error => {\n                  // When you read this code you might think: \"Wait a minute, shouldn't we set the status on the root span too?\"\n                  // The answer is: \"No.\" - The status of the root span is determined by whatever status code Next.js decides to put on the response.\n                  if ((0,_nextNavigationErrorUtils_js__WEBPACK_IMPORTED_MODULE_1__.isNotFoundNavigationError)(error)) {\n                    // We don't want to report \"not-found\"s\n                    span.setStatus({ code: _sentry_core__WEBPACK_IMPORTED_MODULE_0__.SPAN_STATUS_ERROR, message: 'not_found' });\n                  } else if ((0,_nextNavigationErrorUtils_js__WEBPACK_IMPORTED_MODULE_1__.isRedirectNavigationError)(error)) {\n                    // We don't want to report redirects\n                    span.setStatus({ code: _sentry_core__WEBPACK_IMPORTED_MODULE_0__.SPAN_STATUS_OK });\n                  } else {\n                    span.setStatus({ code: _sentry_core__WEBPACK_IMPORTED_MODULE_0__.SPAN_STATUS_ERROR, message: 'internal_error' });\n                    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureException)(error, {\n                      mechanism: {\n                        handled: false,\n                      },\n                    });\n                  }\n                },\n                () => {\n                  span.end();\n                  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.vercelWaitUntil)((0,_utils_responseEnd_js__WEBPACK_IMPORTED_MODULE_2__.flushSafelyWithTimeout)());\n                },\n              );\n            },\n          );\n        });\n      });\n    },\n  });\n}\n\n\n//# sourceMappingURL=wrapServerComponentWithSentry.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vd3JhcFNlcnZlckNvbXBvbmVudFdpdGhTZW50cnkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBZ1o7QUFDM1M7QUFDckM7QUFDa0M7QUFDTztBQUNoRDtBQUM4Qjs7QUFFdkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsZ0NBQWdDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsMkRBQWE7QUFDMUMsNkJBQTZCLG9GQUE0Qjs7QUFFekQ7QUFDQSx5QkFBeUIsMkRBQWE7QUFDdEM7QUFDQSx5QkFBeUIseURBQVc7QUFDcEMsZ0JBQWdCLFFBQVEsRUFBRSxxRUFBdUI7QUFDakQsUUFBUSxxRUFBdUIsd0JBQXdCLCtDQUFLOztBQUU1RCx5QkFBeUIsd0RBQVU7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRDQUE0QyxtRUFBcUI7O0FBRWpFOztBQUVBLFVBQVUsdURBQVM7QUFDbkI7QUFDQSxnQkFBZ0IsMEJBQTBCLEVBQUUsb0dBQTRDO0FBQ3hGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzRUFBc0I7QUFDckMsVUFBVTtBQUNWLE9BQU87O0FBRVAsYUFBYSxnRUFBa0I7QUFDL0IsZUFBZSx1REFBUztBQUN4QixzQ0FBc0MsZUFBZSxvQkFBb0IsZUFBZTs7QUFFeEYsY0FBYyxLQUFtQyxFQUFFLEVBV3hDOztBQUVYLDZCQUE2QiwyREFBYTtBQUMxQztBQUNBLDZCQUE2Qix5REFBVztBQUN4QztBQUNBO0FBQ0Esb0NBQW9DLDJHQUFzQztBQUMxRTtBQUNBOztBQUVBLGlCQUFpQiw2REFBZTtBQUNoQztBQUNBO0FBQ0EsdUJBQXVCLGVBQWUsb0JBQW9CLGVBQWU7QUFDekU7QUFDQSxpQkFBaUIsMEVBQWdDO0FBQ2pELGlCQUFpQiwwRUFBZ0M7QUFDakQ7QUFDQTtBQUNBLGVBQWU7QUFDZixhQUFhO0FBQ2I7QUFDQSxxQkFBcUIsa0VBQW9CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHVGQUF5QjtBQUMvQztBQUNBLHFDQUFxQyxNQUFNLDJEQUFpQix3QkFBd0I7QUFDcEYsb0JBQW9CLFNBQVMsdUZBQXlCO0FBQ3REO0FBQ0EscUNBQXFDLE1BQU0sd0RBQWMsRUFBRTtBQUMzRCxvQkFBb0I7QUFDcEIscUNBQXFDLE1BQU0sMkRBQWlCLDZCQUE2QjtBQUN6RixvQkFBb0IsOERBQWdCO0FBQ3BDO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkIscUJBQXFCO0FBQ3JCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxrQkFBa0IsNkRBQWUsQ0FBQyw2RUFBc0I7QUFDeEQsaUJBQWlCO0FBQ2pCO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUV5QztBQUN6QyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K25leHRqc0A5LjQ2LjBfQG9wZW50ZWxlbWV0cnkrY29udGV4dC1hc3luYy1ob29rc0AxLjMwLjFfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS5fYjViZGVjZjMzM2U3NDc4NDliNGI3M2M0NTdiZGNhMDYvbm9kZV9tb2R1bGVzL0BzZW50cnkvbmV4dGpzL2J1aWxkL2VzbS9jb21tb24vd3JhcFNlcnZlckNvbXBvbmVudFdpdGhTZW50cnkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0QWN0aXZlU3BhbiwgZ2V0Um9vdFNwYW4sIGdldENhcHR1cmVkU2NvcGVzT25TcGFuLCBzZXRDYXB0dXJlZFNjb3Blc09uU3BhbiwgU2NvcGUsIHNwYW5Ub0pTT04sIHdpbnRlckNHSGVhZGVyc1RvRGljdCwgZ2V0Q2xpZW50LCB3aXRoSXNvbGF0aW9uU2NvcGUsIHdpdGhTY29wZSwgcHJvcGFnYXRpb25Db250ZXh0RnJvbUhlYWRlcnMsIHN0YXJ0U3Bhbk1hbnVhbCwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU4sIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFLCBoYW5kbGVDYWxsYmFja0Vycm9ycywgU1BBTl9TVEFUVVNfRVJST1IsIFNQQU5fU1RBVFVTX09LLCBjYXB0dXJlRXhjZXB0aW9uLCB2ZXJjZWxXYWl0VW50aWwgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgaXNOb3RGb3VuZE5hdmlnYXRpb25FcnJvciwgaXNSZWRpcmVjdE5hdmlnYXRpb25FcnJvciB9IGZyb20gJy4vbmV4dE5hdmlnYXRpb25FcnJvclV0aWxzLmpzJztcbmltcG9ydCB7IGZsdXNoU2FmZWx5V2l0aFRpbWVvdXQgfSBmcm9tICcuL3V0aWxzL3Jlc3BvbnNlRW5kLmpzJztcbmltcG9ydCB7IFRSQU5TQUNUSU9OX0FUVFJfU0VOVFJZX1RSQUNFX0JBQ0tGSUxMIH0gZnJvbSAnLi9zcGFuLWF0dHJpYnV0ZXMtd2l0aC1sb2dpYy1hdHRhY2hlZC5qcyc7XG5pbXBvcnQgeyBjb21tb25PYmplY3RUb0lzb2xhdGlvblNjb3BlLCBjb21tb25PYmplY3RUb1Byb3BhZ2F0aW9uQ29udGV4dCB9IGZyb20gJy4vdXRpbHMvdHJhY2luZ1V0aWxzLmpzJztcbmltcG9ydCB7IGdldFNhbml0aXplZFJlcXVlc3RVcmwgfSBmcm9tICcuL3V0aWxzL3VybHMuanMnO1xuaW1wb3J0IHsgbWF5YmVFeHRyYWN0U3luY2hyb25vdXNQYXJhbXNBbmRTZWFyY2hQYXJhbXMgfSBmcm9tICcuL3V0aWxzL3dyYXBwZXJVdGlscy5qcyc7XG5cbi8qKlxuICogV3JhcHMgYW4gYGFwcGAgZGlyZWN0b3J5IHNlcnZlciBjb21wb25lbnQgd2l0aCBTZW50cnkgZXJyb3IgaW5zdHJ1bWVudGF0aW9uLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gd3JhcFNlcnZlckNvbXBvbmVudFdpdGhTZW50cnkoXG4gIGFwcERpckNvbXBvbmVudCxcbiAgY29udGV4dCxcbikge1xuICBjb25zdCB7IGNvbXBvbmVudFJvdXRlLCBjb21wb25lbnRUeXBlIH0gPSBjb250ZXh0O1xuICAvLyBFdmVuIHRob3VnaCB1c2VycyBtYXkgZGVmaW5lIHNlcnZlciBjb21wb25lbnRzIGFzIGFzeW5jIGZ1bmN0aW9ucywgZm9yIHRoZSBjbGllbnQgYnVuZGxlc1xuICAvLyBOZXh0LmpzIHdpbGwgdHVybiB0aGVtIGludG8gc3luY2hyb25vdXMgZnVuY3Rpb25zIGFuZCBpdCB3aWxsIHRyYW5zZm9ybSBhbnkgYGF3YWl0YHMgaW50byBpbnN0YW5jZXMgb2YgdGhlIGB1c2VgXG4gIC8vIGhvb2suIPCfpK9cbiAgcmV0dXJuIG5ldyBQcm94eShhcHBEaXJDb21wb25lbnQsIHtcbiAgICBhcHBseTogKG9yaWdpbmFsRnVuY3Rpb24sIHRoaXNBcmcsIGFyZ3MpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RUcmFjZUlkID0gZ2V0QWN0aXZlU3BhbigpPy5zcGFuQ29udGV4dCgpLnRyYWNlSWQ7XG4gICAgICBjb25zdCBpc29sYXRpb25TY29wZSA9IGNvbW1vbk9iamVjdFRvSXNvbGF0aW9uU2NvcGUoY29udGV4dC5oZWFkZXJzKTtcblxuICAgICAgbGV0IHBhdGhuYW1lID0gdW5kZWZpbmVkIDtcbiAgICAgIGNvbnN0IGFjdGl2ZVNwYW4gPSBnZXRBY3RpdmVTcGFuKCk7XG4gICAgICBpZiAoYWN0aXZlU3Bhbikge1xuICAgICAgICBjb25zdCByb290U3BhbiA9IGdldFJvb3RTcGFuKGFjdGl2ZVNwYW4pO1xuICAgICAgICBjb25zdCB7IHNjb3BlIH0gPSBnZXRDYXB0dXJlZFNjb3Blc09uU3Bhbihyb290U3Bhbik7XG4gICAgICAgIHNldENhcHR1cmVkU2NvcGVzT25TcGFuKHJvb3RTcGFuLCBzY29wZSA/PyBuZXcgU2NvcGUoKSwgaXNvbGF0aW9uU2NvcGUpO1xuXG4gICAgICAgIGNvbnN0IHNwYW5EYXRhID0gc3BhblRvSlNPTihyb290U3Bhbik7XG5cbiAgICAgICAgaWYgKHNwYW5EYXRhLmRhdGEgJiYgJ2h0dHAudGFyZ2V0JyBpbiBzcGFuRGF0YS5kYXRhKSB7XG4gICAgICAgICAgcGF0aG5hbWUgPSBzcGFuRGF0YS5kYXRhWydodHRwLnRhcmdldCddPy50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhlYWRlcnNEaWN0ID0gY29udGV4dC5oZWFkZXJzID8gd2ludGVyQ0dIZWFkZXJzVG9EaWN0KGNvbnRleHQuaGVhZGVycykgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGxldCBwYXJhbXMgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChnZXRDbGllbnQoKT8uZ2V0T3B0aW9ucygpLnNlbmREZWZhdWx0UGlpKSB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gYXJnc1swXTtcbiAgICAgICAgY29uc3QgeyBwYXJhbXM6IHBhcmFtc0Zyb21Qcm9wcyB9ID0gbWF5YmVFeHRyYWN0U3luY2hyb25vdXNQYXJhbXNBbmRTZWFyY2hQYXJhbXMocHJvcHMpO1xuICAgICAgICBwYXJhbXMgPSBwYXJhbXNGcm9tUHJvcHM7XG4gICAgICB9XG5cbiAgICAgIGlzb2xhdGlvblNjb3BlLnNldFNES1Byb2Nlc3NpbmdNZXRhZGF0YSh7XG4gICAgICAgIG5vcm1hbGl6ZWRSZXF1ZXN0OiB7XG4gICAgICAgICAgaGVhZGVyczogaGVhZGVyc0RpY3QsXG4gICAgICAgICAgdXJsOiBnZXRTYW5pdGl6ZWRSZXF1ZXN0VXJsKGNvbXBvbmVudFJvdXRlLCBwYXJhbXMsIGhlYWRlcnNEaWN0LCBwYXRobmFtZSksXG4gICAgICAgIH0gLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB3aXRoSXNvbGF0aW9uU2NvcGUoaXNvbGF0aW9uU2NvcGUsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHdpdGhTY29wZShzY29wZSA9PiB7XG4gICAgICAgICAgc2NvcGUuc2V0VHJhbnNhY3Rpb25OYW1lKGAke2NvbXBvbmVudFR5cGV9IFNlcnZlciBDb21wb25lbnQgKCR7Y29tcG9uZW50Um91dGV9KWApO1xuXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5FWFRfUlVOVElNRSA9PT0gJ2VkZ2UnKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wYWdhdGlvbkNvbnRleHQgPSBjb21tb25PYmplY3RUb1Byb3BhZ2F0aW9uQ29udGV4dChcbiAgICAgICAgICAgICAgY29udGV4dC5oZWFkZXJzLFxuICAgICAgICAgICAgICBwcm9wYWdhdGlvbkNvbnRleHRGcm9tSGVhZGVycyhoZWFkZXJzRGljdD8uWydzZW50cnktdHJhY2UnXSwgaGVhZGVyc0RpY3Q/LlsnYmFnZ2FnZSddKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0VHJhY2VJZCkge1xuICAgICAgICAgICAgICBwcm9wYWdhdGlvbkNvbnRleHQudHJhY2VJZCA9IHJlcXVlc3RUcmFjZUlkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5zZXRQcm9wYWdhdGlvbkNvbnRleHQocHJvcGFnYXRpb25Db250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBhY3RpdmVTcGFuID0gZ2V0QWN0aXZlU3BhbigpO1xuICAgICAgICAgIGlmIChhY3RpdmVTcGFuKSB7XG4gICAgICAgICAgICBjb25zdCByb290U3BhbiA9IGdldFJvb3RTcGFuKGFjdGl2ZVNwYW4pO1xuICAgICAgICAgICAgY29uc3Qgc2VudHJ5VHJhY2UgPSBoZWFkZXJzRGljdD8uWydzZW50cnktdHJhY2UnXTtcbiAgICAgICAgICAgIGlmIChzZW50cnlUcmFjZSkge1xuICAgICAgICAgICAgICByb290U3Bhbi5zZXRBdHRyaWJ1dGUoVFJBTlNBQ1RJT05fQVRUUl9TRU5UUllfVFJBQ0VfQkFDS0ZJTEwsIHNlbnRyeVRyYWNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3RhcnRTcGFuTWFudWFsKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvcDogJ2Z1bmN0aW9uLm5leHRqcycsXG4gICAgICAgICAgICAgIG5hbWU6IGAke2NvbXBvbmVudFR5cGV9IFNlcnZlciBDb21wb25lbnQgKCR7Y29tcG9uZW50Um91dGV9KWAsXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0VdOiAnY29tcG9uZW50JyxcbiAgICAgICAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiAnYXV0by5mdW5jdGlvbi5uZXh0anMnLFxuICAgICAgICAgICAgICAgICdzZW50cnkubmV4dGpzLnNzci5mdW5jdGlvbi50eXBlJzogY29tcG9uZW50VHlwZSxcbiAgICAgICAgICAgICAgICAnc2VudHJ5Lm5leHRqcy5zc3IuZnVuY3Rpb24ucm91dGUnOiBjb21wb25lbnRSb3V0ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzcGFuID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUNhbGxiYWNrRXJyb3JzKFxuICAgICAgICAgICAgICAgICgpID0+IG9yaWdpbmFsRnVuY3Rpb24uYXBwbHkodGhpc0FyZywgYXJncyksXG4gICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgLy8gV2hlbiB5b3UgcmVhZCB0aGlzIGNvZGUgeW91IG1pZ2h0IHRoaW5rOiBcIldhaXQgYSBtaW51dGUsIHNob3VsZG4ndCB3ZSBzZXQgdGhlIHN0YXR1cyBvbiB0aGUgcm9vdCBzcGFuIHRvbz9cIlxuICAgICAgICAgICAgICAgICAgLy8gVGhlIGFuc3dlciBpczogXCJOby5cIiAtIFRoZSBzdGF0dXMgb2YgdGhlIHJvb3Qgc3BhbiBpcyBkZXRlcm1pbmVkIGJ5IHdoYXRldmVyIHN0YXR1cyBjb2RlIE5leHQuanMgZGVjaWRlcyB0byBwdXQgb24gdGhlIHJlc3BvbnNlLlxuICAgICAgICAgICAgICAgICAgaWYgKGlzTm90Rm91bmROYXZpZ2F0aW9uRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmVwb3J0IFwibm90LWZvdW5kXCJzXG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU1BBTl9TVEFUVVNfRVJST1IsIG1lc3NhZ2U6ICdub3RfZm91bmQnIH0pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1JlZGlyZWN0TmF2aWdhdGlvbkVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJlcG9ydCByZWRpcmVjdHNcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTUEFOX1NUQVRVU19PSyB9KTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc2V0U3RhdHVzKHsgY29kZTogU1BBTl9TVEFUVVNfRVJST1IsIG1lc3NhZ2U6ICdpbnRlcm5hbF9lcnJvcicgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNhcHR1cmVFeGNlcHRpb24oZXJyb3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICBtZWNoYW5pc206IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc3Bhbi5lbmQoKTtcbiAgICAgICAgICAgICAgICAgIHZlcmNlbFdhaXRVbnRpbChmbHVzaFNhZmVseVdpdGhUaW1lb3V0KCkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydCB7IHdyYXBTZXJ2ZXJDb21wb25lbnRXaXRoU2VudHJ5IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD13cmFwU2VydmVyQ29tcG9uZW50V2l0aFNlbnRyeS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapServerComponentWithSentry.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/index.client.js":
/*!***********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/index.client.js ***!
  \***********************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   BrowserClient: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.BrowserClient),
/* harmony export */   ErrorBoundary: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.ErrorBoundary),
/* harmony export */   OpenFeatureIntegrationHook: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.OpenFeatureIntegrationHook),
/* harmony export */   Profiler: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.Profiler),
/* harmony export */   SDK_VERSION: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.SDK_VERSION),
/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_OP: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.SEMANTIC_ATTRIBUTE_SENTRY_OP),
/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN),
/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE),
/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_SOURCE: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE),
/* harmony export */   Scope: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.Scope),
/* harmony export */   WINDOW: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.WINDOW),
/* harmony export */   addBreadcrumb: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.addBreadcrumb),
/* harmony export */   addEventProcessor: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.addEventProcessor),
/* harmony export */   addIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.addIntegration),
/* harmony export */   breadcrumbsIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.breadcrumbsIntegration),
/* harmony export */   browserApiErrorsIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.browserApiErrorsIntegration),
/* harmony export */   browserProfilingIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.browserProfilingIntegration),
/* harmony export */   browserSessionIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.browserSessionIntegration),
/* harmony export */   browserTracingIntegration: () => (/* reexport safe */ _client_browserTracingIntegration_js__WEBPACK_IMPORTED_MODULE_2__.browserTracingIntegration),
/* harmony export */   buildLaunchDarklyFlagUsedHandler: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.buildLaunchDarklyFlagUsedHandler),
/* harmony export */   captureConsoleIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.captureConsoleIntegration),
/* harmony export */   captureEvent: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.captureEvent),
/* harmony export */   captureException: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.captureException),
/* harmony export */   captureFeedback: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.captureFeedback),
/* harmony export */   captureMessage: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.captureMessage),
/* harmony export */   captureReactException: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.captureReactException),
/* harmony export */   captureRequestError: () => (/* reexport safe */ _common_captureRequestError_js__WEBPACK_IMPORTED_MODULE_17__.captureRequestError),
/* harmony export */   captureRouterTransitionStart: () => (/* reexport safe */ _client_routing_appRouterRoutingInstrumentation_js__WEBPACK_IMPORTED_MODULE_3__.captureRouterTransitionStart),
/* harmony export */   captureSession: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.captureSession),
/* harmony export */   captureUnderscoreErrorException: () => (/* reexport safe */ _common_pages_router_instrumentation_error_js__WEBPACK_IMPORTED_MODULE_1__.captureUnderscoreErrorException),
/* harmony export */   chromeStackLineParser: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.chromeStackLineParser),
/* harmony export */   close: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.close),
/* harmony export */   consoleLoggingIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.consoleLoggingIntegration),
/* harmony export */   contextLinesIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.contextLinesIntegration),
/* harmony export */   continueTrace: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.continueTrace),
/* harmony export */   createReduxEnhancer: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.createReduxEnhancer),
/* harmony export */   createTransport: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.createTransport),
/* harmony export */   createUserFeedbackEnvelope: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.createUserFeedbackEnvelope),
/* harmony export */   dedupeIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.dedupeIntegration),
/* harmony export */   defaultRequestInstrumentationOptions: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.defaultRequestInstrumentationOptions),
/* harmony export */   defaultStackLineParsers: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.defaultStackLineParsers),
/* harmony export */   defaultStackParser: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.defaultStackParser),
/* harmony export */   diagnoseSdkConnectivity: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.diagnoseSdkConnectivity),
/* harmony export */   endSession: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.endSession),
/* harmony export */   eventFiltersIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.eventFiltersIntegration),
/* harmony export */   eventFromException: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.eventFromException),
/* harmony export */   eventFromMessage: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.eventFromMessage),
/* harmony export */   exceptionFromError: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.exceptionFromError),
/* harmony export */   extraErrorDataIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.extraErrorDataIntegration),
/* harmony export */   featureFlagsIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.featureFlagsIntegration),
/* harmony export */   feedbackAsyncIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.feedbackAsyncIntegration),
/* harmony export */   feedbackIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.feedbackIntegration),
/* harmony export */   feedbackSyncIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.feedbackSyncIntegration),
/* harmony export */   flush: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.flush),
/* harmony export */   forceLoad: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.forceLoad),
/* harmony export */   functionToStringIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.functionToStringIntegration),
/* harmony export */   geckoStackLineParser: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.geckoStackLineParser),
/* harmony export */   getActiveSpan: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.getActiveSpan),
/* harmony export */   getClient: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.getClient),
/* harmony export */   getCurrentScope: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.getCurrentScope),
/* harmony export */   getDefaultIntegrations: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.getDefaultIntegrations),
/* harmony export */   getFeedback: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.getFeedback),
/* harmony export */   getGlobalScope: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.getGlobalScope),
/* harmony export */   getIsolationScope: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.getIsolationScope),
/* harmony export */   getReplay: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.getReplay),
/* harmony export */   getRootSpan: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.getRootSpan),
/* harmony export */   getSpanDescendants: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.getSpanDescendants),
/* harmony export */   getSpanStatusFromHttpCode: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.getSpanStatusFromHttpCode),
/* harmony export */   getTraceData: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.getTraceData),
/* harmony export */   globalHandlersIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.globalHandlersIntegration),
/* harmony export */   graphqlClientIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.graphqlClientIntegration),
/* harmony export */   httpClientIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.httpClientIntegration),
/* harmony export */   httpContextIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.httpContextIntegration),
/* harmony export */   inboundFiltersIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.inboundFiltersIntegration),
/* harmony export */   init: () => (/* reexport safe */ _client_index_js__WEBPACK_IMPORTED_MODULE_0__.init),
/* harmony export */   instrumentOutgoingRequests: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.instrumentOutgoingRequests),
/* harmony export */   instrumentSupabaseClient: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.instrumentSupabaseClient),
/* harmony export */   isEnabled: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.isEnabled),
/* harmony export */   isInitialized: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.isInitialized),
/* harmony export */   lastEventId: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.lastEventId),
/* harmony export */   launchDarklyIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.launchDarklyIntegration),
/* harmony export */   lazyLoadIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.lazyLoadIntegration),
/* harmony export */   linkedErrorsIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.linkedErrorsIntegration),
/* harmony export */   logger: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.logger),
/* harmony export */   makeBrowserOfflineTransport: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.makeBrowserOfflineTransport),
/* harmony export */   makeFetchTransport: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.makeFetchTransport),
/* harmony export */   makeMultiplexedTransport: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.makeMultiplexedTransport),
/* harmony export */   moduleMetadataIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.moduleMetadataIntegration),
/* harmony export */   onLoad: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.onLoad),
/* harmony export */   openFeatureIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.openFeatureIntegration),
/* harmony export */   opera10StackLineParser: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.opera10StackLineParser),
/* harmony export */   opera11StackLineParser: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.opera11StackLineParser),
/* harmony export */   parameterize: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.parameterize),
/* harmony export */   reactErrorHandler: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.reactErrorHandler),
/* harmony export */   reactRouterV3BrowserTracingIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.reactRouterV3BrowserTracingIntegration),
/* harmony export */   reactRouterV4BrowserTracingIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.reactRouterV4BrowserTracingIntegration),
/* harmony export */   reactRouterV5BrowserTracingIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.reactRouterV5BrowserTracingIntegration),
/* harmony export */   reactRouterV6BrowserTracingIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.reactRouterV6BrowserTracingIntegration),
/* harmony export */   reactRouterV7BrowserTracingIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.reactRouterV7BrowserTracingIntegration),
/* harmony export */   registerSpanErrorInstrumentation: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.registerSpanErrorInstrumentation),
/* harmony export */   registerWebWorker: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.registerWebWorker),
/* harmony export */   replayCanvasIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.replayCanvasIntegration),
/* harmony export */   replayIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.replayIntegration),
/* harmony export */   reportingObserverIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.reportingObserverIntegration),
/* harmony export */   rewriteFramesIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.rewriteFramesIntegration),
/* harmony export */   sendFeedback: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.sendFeedback),
/* harmony export */   setContext: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.setContext),
/* harmony export */   setCurrentClient: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.setCurrentClient),
/* harmony export */   setExtra: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.setExtra),
/* harmony export */   setExtras: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.setExtras),
/* harmony export */   setHttpStatus: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.setHttpStatus),
/* harmony export */   setMeasurement: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.setMeasurement),
/* harmony export */   setTag: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.setTag),
/* harmony export */   setTags: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.setTags),
/* harmony export */   setUser: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.setUser),
/* harmony export */   showReportDialog: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.showReportDialog),
/* harmony export */   spanToBaggageHeader: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.spanToBaggageHeader),
/* harmony export */   spanToJSON: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.spanToJSON),
/* harmony export */   spanToTraceHeader: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.spanToTraceHeader),
/* harmony export */   spotlightBrowserIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.spotlightBrowserIntegration),
/* harmony export */   startBrowserTracingNavigationSpan: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.startBrowserTracingNavigationSpan),
/* harmony export */   startBrowserTracingPageLoadSpan: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.startBrowserTracingPageLoadSpan),
/* harmony export */   startInactiveSpan: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.startInactiveSpan),
/* harmony export */   startNewTrace: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.startNewTrace),
/* harmony export */   startSession: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.startSession),
/* harmony export */   startSpan: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.startSpan),
/* harmony export */   startSpanManual: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.startSpanManual),
/* harmony export */   statsigIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.statsigIntegration),
/* harmony export */   supabaseIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.supabaseIntegration),
/* harmony export */   suppressTracing: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.suppressTracing),
/* harmony export */   tanstackRouterBrowserTracingIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.tanstackRouterBrowserTracingIntegration),
/* harmony export */   thirdPartyErrorFilterIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.thirdPartyErrorFilterIntegration),
/* harmony export */   unleashIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.unleashIntegration),
/* harmony export */   updateSpanName: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.updateSpanName),
/* harmony export */   useProfiler: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.useProfiler),
/* harmony export */   webWorkerIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.webWorkerIntegration),
/* harmony export */   winjsStackLineParser: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.winjsStackLineParser),
/* harmony export */   withActiveSpan: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.withActiveSpan),
/* harmony export */   withErrorBoundary: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.withErrorBoundary),
/* harmony export */   withIsolationScope: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.withIsolationScope),
/* harmony export */   withProfiler: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.withProfiler),
/* harmony export */   withScope: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.withScope),
/* harmony export */   withSentryConfig: () => (/* reexport safe */ _client_index_js__WEBPACK_IMPORTED_MODULE_0__.withSentryConfig),
/* harmony export */   withSentryReactRouterV6Routing: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.withSentryReactRouterV6Routing),
/* harmony export */   withSentryReactRouterV7Routing: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.withSentryReactRouterV7Routing),
/* harmony export */   withSentryRouting: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.withSentryRouting),
/* harmony export */   withServerActionInstrumentation: () => (/* reexport safe */ _common_withServerActionInstrumentation_js__WEBPACK_IMPORTED_MODULE_16__.withServerActionInstrumentation),
/* harmony export */   wrapApiHandlerWithSentryVercelCrons: () => (/* reexport safe */ _common_pages_router_instrumentation_wrapApiHandlerWithSentryVercelCrons_js__WEBPACK_IMPORTED_MODULE_12__.wrapApiHandlerWithSentryVercelCrons),
/* harmony export */   wrapAppGetInitialPropsWithSentry: () => (/* reexport safe */ _common_pages_router_instrumentation_wrapAppGetInitialPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_6__.wrapAppGetInitialPropsWithSentry),
/* harmony export */   wrapCreateBrowserRouterV6: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.wrapCreateBrowserRouterV6),
/* harmony export */   wrapCreateBrowserRouterV7: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.wrapCreateBrowserRouterV7),
/* harmony export */   wrapCreateMemoryRouterV6: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.wrapCreateMemoryRouterV6),
/* harmony export */   wrapCreateMemoryRouterV7: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.wrapCreateMemoryRouterV7),
/* harmony export */   wrapDocumentGetInitialPropsWithSentry: () => (/* reexport safe */ _common_pages_router_instrumentation_wrapDocumentGetInitialPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_7__.wrapDocumentGetInitialPropsWithSentry),
/* harmony export */   wrapErrorGetInitialPropsWithSentry: () => (/* reexport safe */ _common_pages_router_instrumentation_wrapErrorGetInitialPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_8__.wrapErrorGetInitialPropsWithSentry),
/* harmony export */   wrapGenerationFunctionWithSentry: () => (/* reexport safe */ _common_wrapGenerationFunctionWithSentry_js__WEBPACK_IMPORTED_MODULE_15__.wrapGenerationFunctionWithSentry),
/* harmony export */   wrapGetInitialPropsWithSentry: () => (/* reexport safe */ _common_pages_router_instrumentation_wrapGetInitialPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_5__.wrapGetInitialPropsWithSentry),
/* harmony export */   wrapGetServerSidePropsWithSentry: () => (/* reexport safe */ _common_pages_router_instrumentation_wrapGetServerSidePropsWithSentry_js__WEBPACK_IMPORTED_MODULE_9__.wrapGetServerSidePropsWithSentry),
/* harmony export */   wrapGetStaticPropsWithSentry: () => (/* reexport safe */ _common_pages_router_instrumentation_wrapGetStaticPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_4__.wrapGetStaticPropsWithSentry),
/* harmony export */   wrapMiddlewareWithSentry: () => (/* reexport safe */ _common_wrapMiddlewareWithSentry_js__WEBPACK_IMPORTED_MODULE_13__.wrapMiddlewareWithSentry),
/* harmony export */   wrapPageComponentWithSentry: () => (/* reexport safe */ _common_pages_router_instrumentation_wrapPageComponentWithSentry_js__WEBPACK_IMPORTED_MODULE_14__.wrapPageComponentWithSentry),
/* harmony export */   wrapRouteHandlerWithSentry: () => (/* reexport safe */ _common_wrapRouteHandlerWithSentry_js__WEBPACK_IMPORTED_MODULE_11__.wrapRouteHandlerWithSentry),
/* harmony export */   wrapServerComponentWithSentry: () => (/* reexport safe */ _common_wrapServerComponentWithSentry_js__WEBPACK_IMPORTED_MODULE_10__.wrapServerComponentWithSentry),
/* harmony export */   wrapUseRoutesV6: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.wrapUseRoutesV6),
/* harmony export */   wrapUseRoutesV7: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.wrapUseRoutesV7),
/* harmony export */   zodErrorsIntegration: () => (/* reexport safe */ _sentry_react__WEBPACK_IMPORTED_MODULE_18__.zodErrorsIntegration)
/* harmony export */ });
/* harmony import */ var _client_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./client/index.js */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/index.js");
/* harmony import */ var _common_pages_router_instrumentation_error_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common/pages-router-instrumentation/_error.js */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/_error.js");
/* harmony import */ var _client_browserTracingIntegration_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./client/browserTracingIntegration.js */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/browserTracingIntegration.js");
/* harmony import */ var _client_routing_appRouterRoutingInstrumentation_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./client/routing/appRouterRoutingInstrumentation.js */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/client/routing/appRouterRoutingInstrumentation.js");
/* harmony import */ var _common_pages_router_instrumentation_wrapGetStaticPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./common/pages-router-instrumentation/wrapGetStaticPropsWithSentry.js */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapGetStaticPropsWithSentry.js");
/* harmony import */ var _common_pages_router_instrumentation_wrapGetInitialPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./common/pages-router-instrumentation/wrapGetInitialPropsWithSentry.js */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapGetInitialPropsWithSentry.js");
/* harmony import */ var _common_pages_router_instrumentation_wrapAppGetInitialPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./common/pages-router-instrumentation/wrapAppGetInitialPropsWithSentry.js */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapAppGetInitialPropsWithSentry.js");
/* harmony import */ var _common_pages_router_instrumentation_wrapDocumentGetInitialPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./common/pages-router-instrumentation/wrapDocumentGetInitialPropsWithSentry.js */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapDocumentGetInitialPropsWithSentry.js");
/* harmony import */ var _common_pages_router_instrumentation_wrapErrorGetInitialPropsWithSentry_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./common/pages-router-instrumentation/wrapErrorGetInitialPropsWithSentry.js */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapErrorGetInitialPropsWithSentry.js");
/* harmony import */ var _common_pages_router_instrumentation_wrapGetServerSidePropsWithSentry_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./common/pages-router-instrumentation/wrapGetServerSidePropsWithSentry.js */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapGetServerSidePropsWithSentry.js");
/* harmony import */ var _common_wrapServerComponentWithSentry_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./common/wrapServerComponentWithSentry.js */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapServerComponentWithSentry.js");
/* harmony import */ var _common_wrapRouteHandlerWithSentry_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./common/wrapRouteHandlerWithSentry.js */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapRouteHandlerWithSentry.js");
/* harmony import */ var _common_pages_router_instrumentation_wrapApiHandlerWithSentryVercelCrons_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./common/pages-router-instrumentation/wrapApiHandlerWithSentryVercelCrons.js */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapApiHandlerWithSentryVercelCrons.js");
/* harmony import */ var _common_wrapMiddlewareWithSentry_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./common/wrapMiddlewareWithSentry.js */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapMiddlewareWithSentry.js");
/* harmony import */ var _common_pages_router_instrumentation_wrapPageComponentWithSentry_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./common/pages-router-instrumentation/wrapPageComponentWithSentry.js */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/pages-router-instrumentation/wrapPageComponentWithSentry.js");
/* harmony import */ var _common_wrapGenerationFunctionWithSentry_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./common/wrapGenerationFunctionWithSentry.js */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/wrapGenerationFunctionWithSentry.js");
/* harmony import */ var _common_withServerActionInstrumentation_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./common/withServerActionInstrumentation.js */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/withServerActionInstrumentation.js");
/* harmony import */ var _common_captureRequestError_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./common/captureRequestError.js */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/common/captureRequestError.js");
/* harmony import */ var _sentry_react__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @sentry/react */ "(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/index.js");
/* __next_internal_client_entry_do_not_use__ init,withSentryConfig,captureUnderscoreErrorException,browserTracingIntegration,captureRouterTransitionStart,wrapGetStaticPropsWithSentry,wrapGetInitialPropsWithSentry,wrapAppGetInitialPropsWithSentry,wrapDocumentGetInitialPropsWithSentry,wrapErrorGetInitialPropsWithSentry,wrapGetServerSidePropsWithSentry,wrapServerComponentWithSentry,wrapRouteHandlerWithSentry,wrapApiHandlerWithSentryVercelCrons,wrapMiddlewareWithSentry,wrapPageComponentWithSentry,wrapGenerationFunctionWithSentry,withServerActionInstrumentation,captureRequestError,* auto */ 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 //# sourceMappingURL=index.client.js.map
 
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/constants.js":
/*!****************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/constants.js ***!
  \****************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   REACT_MOUNT_OP: () => (/* binding */ REACT_MOUNT_OP),\n/* harmony export */   REACT_RENDER_OP: () => (/* binding */ REACT_RENDER_OP),\n/* harmony export */   REACT_UPDATE_OP: () => (/* binding */ REACT_UPDATE_OP)\n/* harmony export */ });\nconst REACT_RENDER_OP = 'ui.react.render';\n\nconst REACT_UPDATE_OP = 'ui.react.update';\n\nconst REACT_MOUNT_OP = 'ui.react.mount';\n\n\n//# sourceMappingURL=constants.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL2NvbnN0YW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFFQTs7QUFFQTs7QUFFNEQ7QUFDNUQiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStyZWFjdEA5LjQ2LjBfcmVhY3RAMTkuMS4xL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3JlYWN0L2J1aWxkL2VzbS9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgUkVBQ1RfUkVOREVSX09QID0gJ3VpLnJlYWN0LnJlbmRlcic7XG5cbmNvbnN0IFJFQUNUX1VQREFURV9PUCA9ICd1aS5yZWFjdC51cGRhdGUnO1xuXG5jb25zdCBSRUFDVF9NT1VOVF9PUCA9ICd1aS5yZWFjdC5tb3VudCc7XG5cbmV4cG9ydCB7IFJFQUNUX01PVU5UX09QLCBSRUFDVF9SRU5ERVJfT1AsIFJFQUNUX1VQREFURV9PUCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/constants.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/debug-build.js":
/*!******************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/debug-build.js ***!
  \******************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   DEBUG_BUILD: () => (/* binding */ DEBUG_BUILD)\n/* harmony export */ });\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = ( false || false);\n\n\n//# sourceMappingURL=debug-build.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL2RlYnVnLWJ1aWxkLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLE1BQXVDLElBQUksS0FBZ0I7O0FBRXpEO0FBQ3ZCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrcmVhY3RAOS40Ni4wX3JlYWN0QDE5LjEuMS9ub2RlX21vZHVsZXMvQHNlbnRyeS9yZWFjdC9idWlsZC9lc20vZGVidWctYnVpbGQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIHNlcnZlcyBhcyBhIGJ1aWxkIHRpbWUgZmxhZyB0aGF0IHdpbGwgYmUgdHJ1ZSBieSBkZWZhdWx0LCBidXQgZmFsc2UgaW4gbm9uLWRlYnVnIGJ1aWxkcyBvciBpZiB1c2VycyByZXBsYWNlIGBfX1NFTlRSWV9ERUJVR19fYCBpbiB0aGVpciBnZW5lcmF0ZWQgY29kZS5cbiAqXG4gKiBBVFRFTlRJT046IFRoaXMgY29uc3RhbnQgbXVzdCBuZXZlciBjcm9zcyBwYWNrYWdlIGJvdW5kYXJpZXMgKGkuZS4gYmUgZXhwb3J0ZWQpIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciB0cmVlIHNoYWtpbmcuXG4gKi9cbmNvbnN0IERFQlVHX0JVSUxEID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTtcblxuZXhwb3J0IHsgREVCVUdfQlVJTEQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlYnVnLWJ1aWxkLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/debug-build.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/error.js":
/*!************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/error.js ***!
  \************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   captureReactException: () => (/* binding */ captureReactException),\n/* harmony export */   isAtLeastReact17: () => (/* binding */ isAtLeastReact17),\n/* harmony export */   reactErrorHandler: () => (/* binding */ reactErrorHandler),\n/* harmony export */   setCause: () => (/* binding */ setCause)\n/* harmony export */ });\n/* harmony import */ var _sentry_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/browser */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/index.js\");\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\n\n\n\n\n/**\n * See if React major version is 17+ by parsing version string.\n */\nfunction isAtLeastReact17(reactVersion) {\n  const reactMajor = reactVersion.match(/^([^.]+)/);\n  return reactMajor !== null && parseInt(reactMajor[0]) >= 17;\n}\n\n/**\n * Recurse through `error.cause` chain to set cause on an error.\n */\nfunction setCause(error, cause) {\n  const seenErrors = new WeakSet();\n\n  function recurse(error, cause) {\n    // If we've already seen the error, there is a recursive loop somewhere in the error's\n    // cause chain. Let's just bail out then to prevent a stack overflow.\n    if (seenErrors.has(error)) {\n      return;\n    }\n    if (error.cause) {\n      seenErrors.add(error);\n      return recurse(error.cause, cause);\n    }\n    error.cause = cause;\n  }\n\n  recurse(error, cause);\n}\n\n/**\n * Captures an error that was thrown by a React ErrorBoundary or React root.\n *\n * @param error The error to capture.\n * @param errorInfo The errorInfo provided by React.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nfunction captureReactException(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  error,\n  { componentStack },\n  hint,\n) {\n  // If on React version >= 17, create stack trace from componentStack param and links\n  // to to the original error using `error.cause` otherwise relies on error param for stacktrace.\n  // Linking errors requires the `LinkedErrors` integration be enabled.\n  // See: https://reactjs.org/blog/2020/08/10/react-v17-rc.html#native-component-stacks\n  //\n  // Although `componentDidCatch` is typed to accept an `Error` object, it can also be invoked\n  // with non-error objects. This is why we need to check if the error is an error-like object.\n  // See: https://github.com/getsentry/sentry-javascript/issues/6167\n  if (isAtLeastReact17(react__WEBPACK_IMPORTED_MODULE_2__.version) && (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.isError)(error) && componentStack) {\n    const errorBoundaryError = new Error(error.message);\n    errorBoundaryError.name = `React ErrorBoundary ${error.name}`;\n    errorBoundaryError.stack = componentStack;\n\n    // Using the `LinkedErrors` integration to link the errors together.\n    setCause(error, errorBoundaryError);\n  }\n\n  return (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.withScope)(scope => {\n    scope.setContext('react', { componentStack });\n    return (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.captureException)(error, hint);\n  });\n}\n\n/**\n * Creates an error handler that can be used with the `onCaughtError`, `onUncaughtError`,\n * and `onRecoverableError` options in `createRoot` and `hydrateRoot` React DOM methods.\n *\n * @param callback An optional callback that will be called after the error is captured.\n * Use this to add custom handling for errors.\n *\n * @example\n *\n * ```JavaScript\n * const root = createRoot(container, {\n *  onCaughtError: Sentry.reactErrorHandler(),\n *  onUncaughtError: Sentry.reactErrorHandler((error, errorInfo) => {\n *    console.warn('Caught error', error, errorInfo.componentStack);\n *  });\n * });\n * ```\n */\nfunction reactErrorHandler(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  callback,\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n) {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return (error, errorInfo) => {\n    const eventId = captureReactException(error, errorInfo);\n    if (callback) {\n      callback(error, errorInfo, eventId);\n    }\n  };\n}\n\n\n//# sourceMappingURL=error.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL2Vycm9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBOEQ7QUFDdkI7QUFDUDs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxnQkFBZ0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsMENBQU8sS0FBSyxxREFBTztBQUMxQztBQUNBLHFEQUFxRCxXQUFXO0FBQ2hFOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLDBEQUFTO0FBQ2xCLGdDQUFnQyxnQkFBZ0I7QUFDaEQsV0FBVyxpRUFBZ0I7QUFDM0IsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFZ0Y7QUFDaEYiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStyZWFjdEA5LjQ2LjBfcmVhY3RAMTkuMS4xL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3JlYWN0L2J1aWxkL2VzbS9lcnJvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB3aXRoU2NvcGUsIGNhcHR1cmVFeGNlcHRpb24gfSBmcm9tICdAc2VudHJ5L2Jyb3dzZXInO1xuaW1wb3J0IHsgaXNFcnJvciB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIFNlZSBpZiBSZWFjdCBtYWpvciB2ZXJzaW9uIGlzIDE3KyBieSBwYXJzaW5nIHZlcnNpb24gc3RyaW5nLlxuICovXG5mdW5jdGlvbiBpc0F0TGVhc3RSZWFjdDE3KHJlYWN0VmVyc2lvbikge1xuICBjb25zdCByZWFjdE1ham9yID0gcmVhY3RWZXJzaW9uLm1hdGNoKC9eKFteLl0rKS8pO1xuICByZXR1cm4gcmVhY3RNYWpvciAhPT0gbnVsbCAmJiBwYXJzZUludChyZWFjdE1ham9yWzBdKSA+PSAxNztcbn1cblxuLyoqXG4gKiBSZWN1cnNlIHRocm91Z2ggYGVycm9yLmNhdXNlYCBjaGFpbiB0byBzZXQgY2F1c2Ugb24gYW4gZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIHNldENhdXNlKGVycm9yLCBjYXVzZSkge1xuICBjb25zdCBzZWVuRXJyb3JzID0gbmV3IFdlYWtTZXQoKTtcblxuICBmdW5jdGlvbiByZWN1cnNlKGVycm9yLCBjYXVzZSkge1xuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgc2VlbiB0aGUgZXJyb3IsIHRoZXJlIGlzIGEgcmVjdXJzaXZlIGxvb3Agc29tZXdoZXJlIGluIHRoZSBlcnJvcidzXG4gICAgLy8gY2F1c2UgY2hhaW4uIExldCdzIGp1c3QgYmFpbCBvdXQgdGhlbiB0byBwcmV2ZW50IGEgc3RhY2sgb3ZlcmZsb3cuXG4gICAgaWYgKHNlZW5FcnJvcnMuaGFzKGVycm9yKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXJyb3IuY2F1c2UpIHtcbiAgICAgIHNlZW5FcnJvcnMuYWRkKGVycm9yKTtcbiAgICAgIHJldHVybiByZWN1cnNlKGVycm9yLmNhdXNlLCBjYXVzZSk7XG4gICAgfVxuICAgIGVycm9yLmNhdXNlID0gY2F1c2U7XG4gIH1cblxuICByZWN1cnNlKGVycm9yLCBjYXVzZSk7XG59XG5cbi8qKlxuICogQ2FwdHVyZXMgYW4gZXJyb3IgdGhhdCB3YXMgdGhyb3duIGJ5IGEgUmVhY3QgRXJyb3JCb3VuZGFyeSBvciBSZWFjdCByb290LlxuICpcbiAqIEBwYXJhbSBlcnJvciBUaGUgZXJyb3IgdG8gY2FwdHVyZS5cbiAqIEBwYXJhbSBlcnJvckluZm8gVGhlIGVycm9ySW5mbyBwcm92aWRlZCBieSBSZWFjdC5cbiAqIEBwYXJhbSBoaW50IE9wdGlvbmFsIGFkZGl0aW9uYWwgZGF0YSB0byBhdHRhY2ggdG8gdGhlIFNlbnRyeSBldmVudC5cbiAqIEByZXR1cm5zIHRoZSBpZCBvZiB0aGUgY2FwdHVyZWQgU2VudHJ5IGV2ZW50LlxuICovXG5mdW5jdGlvbiBjYXB0dXJlUmVhY3RFeGNlcHRpb24oXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGVycm9yLFxuICB7IGNvbXBvbmVudFN0YWNrIH0sXG4gIGhpbnQsXG4pIHtcbiAgLy8gSWYgb24gUmVhY3QgdmVyc2lvbiA+PSAxNywgY3JlYXRlIHN0YWNrIHRyYWNlIGZyb20gY29tcG9uZW50U3RhY2sgcGFyYW0gYW5kIGxpbmtzXG4gIC8vIHRvIHRvIHRoZSBvcmlnaW5hbCBlcnJvciB1c2luZyBgZXJyb3IuY2F1c2VgIG90aGVyd2lzZSByZWxpZXMgb24gZXJyb3IgcGFyYW0gZm9yIHN0YWNrdHJhY2UuXG4gIC8vIExpbmtpbmcgZXJyb3JzIHJlcXVpcmVzIHRoZSBgTGlua2VkRXJyb3JzYCBpbnRlZ3JhdGlvbiBiZSBlbmFibGVkLlxuICAvLyBTZWU6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvYmxvZy8yMDIwLzA4LzEwL3JlYWN0LXYxNy1yYy5odG1sI25hdGl2ZS1jb21wb25lbnQtc3RhY2tzXG4gIC8vXG4gIC8vIEFsdGhvdWdoIGBjb21wb25lbnREaWRDYXRjaGAgaXMgdHlwZWQgdG8gYWNjZXB0IGFuIGBFcnJvcmAgb2JqZWN0LCBpdCBjYW4gYWxzbyBiZSBpbnZva2VkXG4gIC8vIHdpdGggbm9uLWVycm9yIG9iamVjdHMuIFRoaXMgaXMgd2h5IHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGVycm9yIGlzIGFuIGVycm9yLWxpa2Ugb2JqZWN0LlxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzYxNjdcbiAgaWYgKGlzQXRMZWFzdFJlYWN0MTcodmVyc2lvbikgJiYgaXNFcnJvcihlcnJvcikgJiYgY29tcG9uZW50U3RhY2spIHtcbiAgICBjb25zdCBlcnJvckJvdW5kYXJ5RXJyb3IgPSBuZXcgRXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgZXJyb3JCb3VuZGFyeUVycm9yLm5hbWUgPSBgUmVhY3QgRXJyb3JCb3VuZGFyeSAke2Vycm9yLm5hbWV9YDtcbiAgICBlcnJvckJvdW5kYXJ5RXJyb3Iuc3RhY2sgPSBjb21wb25lbnRTdGFjaztcblxuICAgIC8vIFVzaW5nIHRoZSBgTGlua2VkRXJyb3JzYCBpbnRlZ3JhdGlvbiB0byBsaW5rIHRoZSBlcnJvcnMgdG9nZXRoZXIuXG4gICAgc2V0Q2F1c2UoZXJyb3IsIGVycm9yQm91bmRhcnlFcnJvcik7XG4gIH1cblxuICByZXR1cm4gd2l0aFNjb3BlKHNjb3BlID0+IHtcbiAgICBzY29wZS5zZXRDb250ZXh0KCdyZWFjdCcsIHsgY29tcG9uZW50U3RhY2sgfSk7XG4gICAgcmV0dXJuIGNhcHR1cmVFeGNlcHRpb24oZXJyb3IsIGhpbnQpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVycm9yIGhhbmRsZXIgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBgb25DYXVnaHRFcnJvcmAsIGBvblVuY2F1Z2h0RXJyb3JgLFxuICogYW5kIGBvblJlY292ZXJhYmxlRXJyb3JgIG9wdGlvbnMgaW4gYGNyZWF0ZVJvb3RgIGFuZCBgaHlkcmF0ZVJvb3RgIFJlYWN0IERPTSBtZXRob2RzLlxuICpcbiAqIEBwYXJhbSBjYWxsYmFjayBBbiBvcHRpb25hbCBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBlcnJvciBpcyBjYXB0dXJlZC5cbiAqIFVzZSB0aGlzIHRvIGFkZCBjdXN0b20gaGFuZGxpbmcgZm9yIGVycm9ycy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYEphdmFTY3JpcHRcbiAqIGNvbnN0IHJvb3QgPSBjcmVhdGVSb290KGNvbnRhaW5lciwge1xuICogIG9uQ2F1Z2h0RXJyb3I6IFNlbnRyeS5yZWFjdEVycm9ySGFuZGxlcigpLFxuICogIG9uVW5jYXVnaHRFcnJvcjogU2VudHJ5LnJlYWN0RXJyb3JIYW5kbGVyKChlcnJvciwgZXJyb3JJbmZvKSA9PiB7XG4gKiAgICBjb25zb2xlLndhcm4oJ0NhdWdodCBlcnJvcicsIGVycm9yLCBlcnJvckluZm8uY29tcG9uZW50U3RhY2spO1xuICogIH0pO1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gcmVhY3RFcnJvckhhbmRsZXIoXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGNhbGxiYWNrLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHJldHVybiAoZXJyb3IsIGVycm9ySW5mbykgPT4ge1xuICAgIGNvbnN0IGV2ZW50SWQgPSBjYXB0dXJlUmVhY3RFeGNlcHRpb24oZXJyb3IsIGVycm9ySW5mbyk7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayhlcnJvciwgZXJyb3JJbmZvLCBldmVudElkKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCB7IGNhcHR1cmVSZWFjdEV4Y2VwdGlvbiwgaXNBdExlYXN0UmVhY3QxNywgcmVhY3RFcnJvckhhbmRsZXIsIHNldENhdXNlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvci5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/error.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/errorboundary.js":
/*!********************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/errorboundary.js ***!
  \********************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   ErrorBoundary: () => (/* binding */ ErrorBoundary),\n/* harmony export */   UNKNOWN_COMPONENT: () => (/* binding */ UNKNOWN_COMPONENT),\n/* harmony export */   withErrorBoundary: () => (/* binding */ withErrorBoundary)\n/* harmony export */ });\n/* harmony import */ var _sentry_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/browser */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/index.js\");\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/debug-build.js\");\n/* harmony import */ var _error_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./error.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/error.js\");\n/* harmony import */ var _hoist_non_react_statics_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hoist-non-react-statics.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/hoist-non-react-statics.js\");\n\n\n\n\n\n\n\nconst UNKNOWN_COMPONENT = 'unknown';\n\nconst INITIAL_STATE = {\n  componentStack: null,\n  error: null,\n  eventId: null,\n};\n\n/**\n * A ErrorBoundary component that logs errors to Sentry.\n * NOTE: If you are a Sentry user, and you are seeing this stack frame, it means the\n * Sentry React SDK ErrorBoundary caught an error invoking your application code. This\n * is expected behavior and NOT indicative of a bug with the Sentry React SDK.\n */\nclass ErrorBoundary extends react__WEBPACK_IMPORTED_MODULE_2__.Component {\n\n   constructor(props) {\n    super(props);\n\n    this.state = INITIAL_STATE;\n    this._openFallbackReportDialog = true;\n\n    const client = (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n    if (client && props.showDialog) {\n      this._openFallbackReportDialog = false;\n      this._cleanupHook = client.on('afterSendEvent', event => {\n        if (!event.type && this._lastEventId && event.event_id === this._lastEventId) {\n          (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.showReportDialog)({ ...props.dialogOptions, eventId: this._lastEventId });\n        }\n      });\n    }\n  }\n\n   componentDidCatch(error, errorInfo) {\n    const { componentStack } = errorInfo;\n    const { beforeCapture, onError, showDialog, dialogOptions } = this.props;\n    (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.withScope)(scope => {\n      if (beforeCapture) {\n        beforeCapture(scope, error, componentStack);\n      }\n\n      const handled = this.props.handled != null ? this.props.handled : !!this.props.fallback;\n      const eventId = (0,_error_js__WEBPACK_IMPORTED_MODULE_4__.captureReactException)(error, errorInfo, { mechanism: { handled } });\n\n      if (onError) {\n        onError(error, componentStack, eventId);\n      }\n      if (showDialog) {\n        this._lastEventId = eventId;\n        if (this._openFallbackReportDialog) {\n          (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.showReportDialog)({ ...dialogOptions, eventId });\n        }\n      }\n\n      // componentDidCatch is used over getDerivedStateFromError\n      // so that componentStack is accessible through state.\n      this.setState({ error, componentStack, eventId });\n    });\n  }\n\n   componentDidMount() {\n    const { onMount } = this.props;\n    if (onMount) {\n      onMount();\n    }\n  }\n\n   componentWillUnmount() {\n    const { error, componentStack, eventId } = this.state;\n    const { onUnmount } = this.props;\n    if (onUnmount) {\n      if (this.state === INITIAL_STATE) {\n        // If the error boundary never encountered an error, call onUnmount with null values\n        onUnmount(null, null, null);\n      } else {\n        // `componentStack` and `eventId` are guaranteed to be non-null here because `onUnmount` is only called\n        // when the error boundary has already encountered an error.\n        // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n        onUnmount(error, componentStack, eventId);\n      }\n    }\n\n    if (this._cleanupHook) {\n      this._cleanupHook();\n      this._cleanupHook = undefined;\n    }\n  }\n\n   resetErrorBoundary() {\n    const { onReset } = this.props;\n    const { error, componentStack, eventId } = this.state;\n    if (onReset) {\n      // `componentStack` and `eventId` are guaranteed to be non-null here because `onReset` is only called\n      // when the error boundary has already encountered an error.\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      onReset(error, componentStack, eventId);\n    }\n    this.setState(INITIAL_STATE);\n  }\n\n   render() {\n    const { fallback, children } = this.props;\n    const state = this.state;\n\n    // `componentStack` is only null in the initial state, when no error has been captured.\n    // If an error has been captured, `componentStack` will be a string.\n    // We cannot check `state.error` because null can be thrown as an error.\n    if (state.componentStack === null) {\n      return typeof children === 'function' ? children() : children;\n    }\n\n    const element =\n      typeof fallback === 'function'\n        ? react__WEBPACK_IMPORTED_MODULE_2__.createElement(fallback, {\n            error: state.error,\n            componentStack: state.componentStack,\n            resetError: () => this.resetErrorBoundary(),\n            eventId: state.eventId,\n          })\n        : fallback;\n\n    if (react__WEBPACK_IMPORTED_MODULE_2__.isValidElement(element)) {\n      return element;\n    }\n\n    if (fallback) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_1__.debug.warn('fallback did not produce a valid ReactElement');\n    }\n\n    // Fail gracefully if no fallback provided or is not valid\n    return null;\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction withErrorBoundary(\n  WrappedComponent,\n  errorBoundaryOptions,\n) {\n  const componentDisplayName = WrappedComponent.displayName || WrappedComponent.name || UNKNOWN_COMPONENT;\n\n  const Wrapped = (props) => (\n    react__WEBPACK_IMPORTED_MODULE_2__.createElement(ErrorBoundary, { ...errorBoundaryOptions,}\n      , react__WEBPACK_IMPORTED_MODULE_2__.createElement(WrappedComponent, { ...props,} )\n    )\n  );\n\n  Wrapped.displayName = `errorBoundary(${componentDisplayName})`;\n\n  // Copy over static methods from Wrapped component to Profiler HOC\n  // See: https://reactjs.org/docs/higher-order-components.html#static-methods-must-be-copied-over\n  (0,_hoist_non_react_statics_js__WEBPACK_IMPORTED_MODULE_5__.hoistNonReactStatics)(Wrapped, WrappedComponent);\n  return Wrapped;\n}\n\n\n//# sourceMappingURL=errorboundary.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL2Vycm9yYm91bmRhcnkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQXlFO0FBQ3BDO0FBQ047QUFDZ0I7QUFDSTtBQUNpQjs7QUFFcEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsNENBQWU7O0FBRTNDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsMERBQVM7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLGlFQUFnQixHQUFHLG9EQUFvRDtBQUNqRjtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsWUFBWSxpQkFBaUI7QUFDN0IsWUFBWSxvREFBb0Q7QUFDaEUsSUFBSSwwREFBUztBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQixnRUFBcUIscUJBQXFCLGFBQWEsV0FBVzs7QUFFeEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxpRUFBZ0IsR0FBRywyQkFBMkI7QUFDeEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCLGdDQUFnQztBQUN0RCxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxZQUFZLFVBQVU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLGlDQUFpQztBQUM3QyxZQUFZLFlBQVk7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLFVBQVU7QUFDdEIsWUFBWSxpQ0FBaUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVkscUJBQXFCO0FBQ2pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxnREFBbUI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUEsUUFBUSxpREFBb0I7QUFDNUI7QUFDQTs7QUFFQTtBQUNBLE1BQU0sd0RBQVcsSUFBSSwrQ0FBSztBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLGdEQUFtQixrQkFBa0I7QUFDekMsUUFBUSxnREFBbUIscUJBQXFCLFdBQVc7QUFDM0Q7QUFDQTs7QUFFQSx5Q0FBeUMscUJBQXFCOztBQUU5RDtBQUNBO0FBQ0EsRUFBRSxpRkFBb0I7QUFDdEI7QUFDQTs7QUFFK0Q7QUFDL0QiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStyZWFjdEA5LjQ2LjBfcmVhY3RAMTkuMS4xL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3JlYWN0L2J1aWxkL2VzbS9lcnJvcmJvdW5kYXJ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldENsaWVudCwgc2hvd1JlcG9ydERpYWxvZywgd2l0aFNjb3BlIH0gZnJvbSAnQHNlbnRyeS9icm93c2VyJztcbmltcG9ydCB7IGRlYnVnIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IERFQlVHX0JVSUxEIH0gZnJvbSAnLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBjYXB0dXJlUmVhY3RFeGNlcHRpb24gfSBmcm9tICcuL2Vycm9yLmpzJztcbmltcG9ydCB7IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIH0gZnJvbSAnLi9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy5qcyc7XG5cbmNvbnN0IFVOS05PV05fQ09NUE9ORU5UID0gJ3Vua25vd24nO1xuXG5jb25zdCBJTklUSUFMX1NUQVRFID0ge1xuICBjb21wb25lbnRTdGFjazogbnVsbCxcbiAgZXJyb3I6IG51bGwsXG4gIGV2ZW50SWQ6IG51bGwsXG59O1xuXG4vKipcbiAqIEEgRXJyb3JCb3VuZGFyeSBjb21wb25lbnQgdGhhdCBsb2dzIGVycm9ycyB0byBTZW50cnkuXG4gKiBOT1RFOiBJZiB5b3UgYXJlIGEgU2VudHJ5IHVzZXIsIGFuZCB5b3UgYXJlIHNlZWluZyB0aGlzIHN0YWNrIGZyYW1lLCBpdCBtZWFucyB0aGVcbiAqIFNlbnRyeSBSZWFjdCBTREsgRXJyb3JCb3VuZGFyeSBjYXVnaHQgYW4gZXJyb3IgaW52b2tpbmcgeW91ciBhcHBsaWNhdGlvbiBjb2RlLiBUaGlzXG4gKiBpcyBleHBlY3RlZCBiZWhhdmlvciBhbmQgTk9UIGluZGljYXRpdmUgb2YgYSBidWcgd2l0aCB0aGUgU2VudHJ5IFJlYWN0IFNESy5cbiAqL1xuY2xhc3MgRXJyb3JCb3VuZGFyeSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IElOSVRJQUxfU1RBVEU7XG4gICAgdGhpcy5fb3BlbkZhbGxiYWNrUmVwb3J0RGlhbG9nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuICAgIGlmIChjbGllbnQgJiYgcHJvcHMuc2hvd0RpYWxvZykge1xuICAgICAgdGhpcy5fb3BlbkZhbGxiYWNrUmVwb3J0RGlhbG9nID0gZmFsc2U7XG4gICAgICB0aGlzLl9jbGVhbnVwSG9vayA9IGNsaWVudC5vbignYWZ0ZXJTZW5kRXZlbnQnLCBldmVudCA9PiB7XG4gICAgICAgIGlmICghZXZlbnQudHlwZSAmJiB0aGlzLl9sYXN0RXZlbnRJZCAmJiBldmVudC5ldmVudF9pZCA9PT0gdGhpcy5fbGFzdEV2ZW50SWQpIHtcbiAgICAgICAgICBzaG93UmVwb3J0RGlhbG9nKHsgLi4ucHJvcHMuZGlhbG9nT3B0aW9ucywgZXZlbnRJZDogdGhpcy5fbGFzdEV2ZW50SWQgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gICBjb21wb25lbnREaWRDYXRjaChlcnJvciwgZXJyb3JJbmZvKSB7XG4gICAgY29uc3QgeyBjb21wb25lbnRTdGFjayB9ID0gZXJyb3JJbmZvO1xuICAgIGNvbnN0IHsgYmVmb3JlQ2FwdHVyZSwgb25FcnJvciwgc2hvd0RpYWxvZywgZGlhbG9nT3B0aW9ucyB9ID0gdGhpcy5wcm9wcztcbiAgICB3aXRoU2NvcGUoc2NvcGUgPT4ge1xuICAgICAgaWYgKGJlZm9yZUNhcHR1cmUpIHtcbiAgICAgICAgYmVmb3JlQ2FwdHVyZShzY29wZSwgZXJyb3IsIGNvbXBvbmVudFN0YWNrKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFuZGxlZCA9IHRoaXMucHJvcHMuaGFuZGxlZCAhPSBudWxsID8gdGhpcy5wcm9wcy5oYW5kbGVkIDogISF0aGlzLnByb3BzLmZhbGxiYWNrO1xuICAgICAgY29uc3QgZXZlbnRJZCA9IGNhcHR1cmVSZWFjdEV4Y2VwdGlvbihlcnJvciwgZXJyb3JJbmZvLCB7IG1lY2hhbmlzbTogeyBoYW5kbGVkIH0gfSk7XG5cbiAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgIG9uRXJyb3IoZXJyb3IsIGNvbXBvbmVudFN0YWNrLCBldmVudElkKTtcbiAgICAgIH1cbiAgICAgIGlmIChzaG93RGlhbG9nKSB7XG4gICAgICAgIHRoaXMuX2xhc3RFdmVudElkID0gZXZlbnRJZDtcbiAgICAgICAgaWYgKHRoaXMuX29wZW5GYWxsYmFja1JlcG9ydERpYWxvZykge1xuICAgICAgICAgIHNob3dSZXBvcnREaWFsb2coeyAuLi5kaWFsb2dPcHRpb25zLCBldmVudElkIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbXBvbmVudERpZENhdGNoIGlzIHVzZWQgb3ZlciBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3JcbiAgICAgIC8vIHNvIHRoYXQgY29tcG9uZW50U3RhY2sgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHN0YXRlLlxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVycm9yLCBjb21wb25lbnRTdGFjaywgZXZlbnRJZCB9KTtcbiAgICB9KTtcbiAgfVxuXG4gICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCB7IG9uTW91bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKG9uTW91bnQpIHtcbiAgICAgIG9uTW91bnQoKTtcbiAgICB9XG4gIH1cblxuICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgY29uc3QgeyBlcnJvciwgY29tcG9uZW50U3RhY2ssIGV2ZW50SWQgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyBvblVubW91bnQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKG9uVW5tb3VudCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUgPT09IElOSVRJQUxfU1RBVEUpIHtcbiAgICAgICAgLy8gSWYgdGhlIGVycm9yIGJvdW5kYXJ5IG5ldmVyIGVuY291bnRlcmVkIGFuIGVycm9yLCBjYWxsIG9uVW5tb3VudCB3aXRoIG51bGwgdmFsdWVzXG4gICAgICAgIG9uVW5tb3VudChudWxsLCBudWxsLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGBjb21wb25lbnRTdGFja2AgYW5kIGBldmVudElkYCBhcmUgZ3VhcmFudGVlZCB0byBiZSBub24tbnVsbCBoZXJlIGJlY2F1c2UgYG9uVW5tb3VudGAgaXMgb25seSBjYWxsZWRcbiAgICAgICAgLy8gd2hlbiB0aGUgZXJyb3IgYm91bmRhcnkgaGFzIGFscmVhZHkgZW5jb3VudGVyZWQgYW4gZXJyb3IuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgIG9uVW5tb3VudChlcnJvciwgY29tcG9uZW50U3RhY2ssIGV2ZW50SWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jbGVhbnVwSG9vaykge1xuICAgICAgdGhpcy5fY2xlYW51cEhvb2soKTtcbiAgICAgIHRoaXMuX2NsZWFudXBIb29rID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gICByZXNldEVycm9yQm91bmRhcnkoKSB7XG4gICAgY29uc3QgeyBvblJlc2V0IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZXJyb3IsIGNvbXBvbmVudFN0YWNrLCBldmVudElkIH0gPSB0aGlzLnN0YXRlO1xuICAgIGlmIChvblJlc2V0KSB7XG4gICAgICAvLyBgY29tcG9uZW50U3RhY2tgIGFuZCBgZXZlbnRJZGAgYXJlIGd1YXJhbnRlZWQgdG8gYmUgbm9uLW51bGwgaGVyZSBiZWNhdXNlIGBvblJlc2V0YCBpcyBvbmx5IGNhbGxlZFxuICAgICAgLy8gd2hlbiB0aGUgZXJyb3IgYm91bmRhcnkgaGFzIGFscmVhZHkgZW5jb3VudGVyZWQgYW4gZXJyb3IuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgb25SZXNldChlcnJvciwgY29tcG9uZW50U3RhY2ssIGV2ZW50SWQpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKElOSVRJQUxfU1RBVEUpO1xuICB9XG5cbiAgIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGZhbGxiYWNrLCBjaGlsZHJlbiB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGU7XG5cbiAgICAvLyBgY29tcG9uZW50U3RhY2tgIGlzIG9ubHkgbnVsbCBpbiB0aGUgaW5pdGlhbCBzdGF0ZSwgd2hlbiBubyBlcnJvciBoYXMgYmVlbiBjYXB0dXJlZC5cbiAgICAvLyBJZiBhbiBlcnJvciBoYXMgYmVlbiBjYXB0dXJlZCwgYGNvbXBvbmVudFN0YWNrYCB3aWxsIGJlIGEgc3RyaW5nLlxuICAgIC8vIFdlIGNhbm5vdCBjaGVjayBgc3RhdGUuZXJyb3JgIGJlY2F1c2UgbnVsbCBjYW4gYmUgdGhyb3duIGFzIGFuIGVycm9yLlxuICAgIGlmIChzdGF0ZS5jb21wb25lbnRTdGFjayA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKCkgOiBjaGlsZHJlbjtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID1cbiAgICAgIHR5cGVvZiBmYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoZmFsbGJhY2ssIHtcbiAgICAgICAgICAgIGVycm9yOiBzdGF0ZS5lcnJvcixcbiAgICAgICAgICAgIGNvbXBvbmVudFN0YWNrOiBzdGF0ZS5jb21wb25lbnRTdGFjayxcbiAgICAgICAgICAgIHJlc2V0RXJyb3I6ICgpID0+IHRoaXMucmVzZXRFcnJvckJvdW5kYXJ5KCksXG4gICAgICAgICAgICBldmVudElkOiBzdGF0ZS5ldmVudElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIDogZmFsbGJhY2s7XG5cbiAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIGlmIChmYWxsYmFjaykge1xuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcud2FybignZmFsbGJhY2sgZGlkIG5vdCBwcm9kdWNlIGEgdmFsaWQgUmVhY3RFbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgLy8gRmFpbCBncmFjZWZ1bGx5IGlmIG5vIGZhbGxiYWNrIHByb3ZpZGVkIG9yIGlzIG5vdCB2YWxpZFxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiB3aXRoRXJyb3JCb3VuZGFyeShcbiAgV3JhcHBlZENvbXBvbmVudCxcbiAgZXJyb3JCb3VuZGFyeU9wdGlvbnMsXG4pIHtcbiAgY29uc3QgY29tcG9uZW50RGlzcGxheU5hbWUgPSBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCBVTktOT1dOX0NPTVBPTkVOVDtcblxuICBjb25zdCBXcmFwcGVkID0gKHByb3BzKSA9PiAoXG4gICAgUmVhY3QuY3JlYXRlRWxlbWVudChFcnJvckJvdW5kYXJ5LCB7IC4uLmVycm9yQm91bmRhcnlPcHRpb25zLH1cbiAgICAgICwgUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCB7IC4uLnByb3BzLH0gKVxuICAgIClcbiAgKTtcblxuICBXcmFwcGVkLmRpc3BsYXlOYW1lID0gYGVycm9yQm91bmRhcnkoJHtjb21wb25lbnREaXNwbGF5TmFtZX0pYDtcblxuICAvLyBDb3B5IG92ZXIgc3RhdGljIG1ldGhvZHMgZnJvbSBXcmFwcGVkIGNvbXBvbmVudCB0byBQcm9maWxlciBIT0NcbiAgLy8gU2VlOiBodHRwczovL3JlYWN0anMub3JnL2RvY3MvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMuaHRtbCNzdGF0aWMtbWV0aG9kcy1tdXN0LWJlLWNvcGllZC1vdmVyXG4gIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdyYXBwZWQsIFdyYXBwZWRDb21wb25lbnQpO1xuICByZXR1cm4gV3JhcHBlZDtcbn1cblxuZXhwb3J0IHsgRXJyb3JCb3VuZGFyeSwgVU5LTk9XTl9DT01QT05FTlQsIHdpdGhFcnJvckJvdW5kYXJ5IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvcmJvdW5kYXJ5LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/errorboundary.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/hoist-non-react-statics.js":
/*!******************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/hoist-non-react-statics.js ***!
  \******************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_0___namespace_cache;\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   hoistNonReactStatics: () => (/* binding */ hoistNonReactStatics)\n/* harmony export */ });\n/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! hoist-non-react-statics */ \"(app-pages-browser)/./node_modules/.pnpm/hoist-non-react-statics@3.3.2/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\");\n\n\n// Ensure we use the default export from hoist-non-react-statics if available,\n// falling back to the module itself. This handles both ESM and CJS usage.\nconst hoistNonReactStatics = hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_0__ || /*#__PURE__*/ (hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_0__, 2)));\n\n\n//# sourceMappingURL=hoist-non-react-statics.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFzRTs7QUFFdEU7QUFDQTtBQUNBLDZCQUE2QixvREFBa0MsSUFBSSwrT0FBMEI7O0FBRTdEO0FBQ2hDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrcmVhY3RAOS40Ni4wX3JlYWN0QDE5LjEuMS9ub2RlX21vZHVsZXMvQHNlbnRyeS9yZWFjdC9idWlsZC9lc20vaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaG9pc3ROb25SZWFjdFN0YXRpY3NJbXBvcnQgZnJvbSAnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnO1xuXG4vLyBFbnN1cmUgd2UgdXNlIHRoZSBkZWZhdWx0IGV4cG9ydCBmcm9tIGhvaXN0LW5vbi1yZWFjdC1zdGF0aWNzIGlmIGF2YWlsYWJsZSxcbi8vIGZhbGxpbmcgYmFjayB0byB0aGUgbW9kdWxlIGl0c2VsZi4gVGhpcyBoYW5kbGVzIGJvdGggRVNNIGFuZCBDSlMgdXNhZ2UuXG5jb25zdCBob2lzdE5vblJlYWN0U3RhdGljcyA9IGhvaXN0Tm9uUmVhY3RTdGF0aWNzSW1wb3J0LmRlZmF1bHQgfHwgaG9pc3ROb25SZWFjdFN0YXRpY3NJbXBvcnQ7XG5cbmV4cG9ydCB7IGhvaXN0Tm9uUmVhY3RTdGF0aWNzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/hoist-non-react-statics.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/index.js":
/*!************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/index.js ***!
  \************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   BrowserClient: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.BrowserClient),\n/* harmony export */   ErrorBoundary: () => (/* reexport safe */ _errorboundary_js__WEBPACK_IMPORTED_MODULE_4__.ErrorBoundary),\n/* harmony export */   OpenFeatureIntegrationHook: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.OpenFeatureIntegrationHook),\n/* harmony export */   Profiler: () => (/* reexport safe */ _profiler_js__WEBPACK_IMPORTED_MODULE_3__.Profiler),\n/* harmony export */   SDK_VERSION: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.SDK_VERSION),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_OP: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE),\n/* harmony export */   SEMANTIC_ATTRIBUTE_SENTRY_SOURCE: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE),\n/* harmony export */   Scope: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.Scope),\n/* harmony export */   WINDOW: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.WINDOW),\n/* harmony export */   addBreadcrumb: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.addBreadcrumb),\n/* harmony export */   addEventProcessor: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.addEventProcessor),\n/* harmony export */   addIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.addIntegration),\n/* harmony export */   breadcrumbsIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.breadcrumbsIntegration),\n/* harmony export */   browserApiErrorsIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.browserApiErrorsIntegration),\n/* harmony export */   browserProfilingIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.browserProfilingIntegration),\n/* harmony export */   browserSessionIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.browserSessionIntegration),\n/* harmony export */   browserTracingIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.browserTracingIntegration),\n/* harmony export */   buildLaunchDarklyFlagUsedHandler: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.buildLaunchDarklyFlagUsedHandler),\n/* harmony export */   captureConsoleIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.captureConsoleIntegration),\n/* harmony export */   captureEvent: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.captureEvent),\n/* harmony export */   captureException: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.captureException),\n/* harmony export */   captureFeedback: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.captureFeedback),\n/* harmony export */   captureMessage: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.captureMessage),\n/* harmony export */   captureReactException: () => (/* reexport safe */ _error_js__WEBPACK_IMPORTED_MODULE_2__.captureReactException),\n/* harmony export */   captureSession: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.captureSession),\n/* harmony export */   chromeStackLineParser: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.chromeStackLineParser),\n/* harmony export */   close: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.close),\n/* harmony export */   consoleLoggingIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.consoleLoggingIntegration),\n/* harmony export */   contextLinesIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.contextLinesIntegration),\n/* harmony export */   continueTrace: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.continueTrace),\n/* harmony export */   createReduxEnhancer: () => (/* reexport safe */ _redux_js__WEBPACK_IMPORTED_MODULE_5__.createReduxEnhancer),\n/* harmony export */   createTransport: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.createTransport),\n/* harmony export */   createUserFeedbackEnvelope: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.createUserFeedbackEnvelope),\n/* harmony export */   dedupeIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.dedupeIntegration),\n/* harmony export */   defaultRequestInstrumentationOptions: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.defaultRequestInstrumentationOptions),\n/* harmony export */   defaultStackLineParsers: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.defaultStackLineParsers),\n/* harmony export */   defaultStackParser: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.defaultStackParser),\n/* harmony export */   diagnoseSdkConnectivity: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.diagnoseSdkConnectivity),\n/* harmony export */   endSession: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.endSession),\n/* harmony export */   eventFiltersIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.eventFiltersIntegration),\n/* harmony export */   eventFromException: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.eventFromException),\n/* harmony export */   eventFromMessage: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.eventFromMessage),\n/* harmony export */   exceptionFromError: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.exceptionFromError),\n/* harmony export */   extraErrorDataIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.extraErrorDataIntegration),\n/* harmony export */   featureFlagsIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.featureFlagsIntegration),\n/* harmony export */   feedbackAsyncIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.feedbackAsyncIntegration),\n/* harmony export */   feedbackIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.feedbackIntegration),\n/* harmony export */   feedbackSyncIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.feedbackSyncIntegration),\n/* harmony export */   flush: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.flush),\n/* harmony export */   forceLoad: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.forceLoad),\n/* harmony export */   functionToStringIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.functionToStringIntegration),\n/* harmony export */   geckoStackLineParser: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.geckoStackLineParser),\n/* harmony export */   getActiveSpan: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan),\n/* harmony export */   getClient: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.getClient),\n/* harmony export */   getCurrentScope: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope),\n/* harmony export */   getDefaultIntegrations: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.getDefaultIntegrations),\n/* harmony export */   getFeedback: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.getFeedback),\n/* harmony export */   getGlobalScope: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.getGlobalScope),\n/* harmony export */   getIsolationScope: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope),\n/* harmony export */   getReplay: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.getReplay),\n/* harmony export */   getRootSpan: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.getRootSpan),\n/* harmony export */   getSpanDescendants: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.getSpanDescendants),\n/* harmony export */   getSpanStatusFromHttpCode: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.getSpanStatusFromHttpCode),\n/* harmony export */   getTraceData: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.getTraceData),\n/* harmony export */   globalHandlersIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.globalHandlersIntegration),\n/* harmony export */   graphqlClientIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.graphqlClientIntegration),\n/* harmony export */   httpClientIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.httpClientIntegration),\n/* harmony export */   httpContextIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.httpContextIntegration),\n/* harmony export */   inboundFiltersIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.inboundFiltersIntegration),\n/* harmony export */   init: () => (/* reexport safe */ _sdk_js__WEBPACK_IMPORTED_MODULE_1__.init),\n/* harmony export */   instrumentOutgoingRequests: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.instrumentOutgoingRequests),\n/* harmony export */   instrumentSupabaseClient: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.instrumentSupabaseClient),\n/* harmony export */   isEnabled: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.isEnabled),\n/* harmony export */   isInitialized: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.isInitialized),\n/* harmony export */   lastEventId: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.lastEventId),\n/* harmony export */   launchDarklyIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.launchDarklyIntegration),\n/* harmony export */   lazyLoadIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.lazyLoadIntegration),\n/* harmony export */   linkedErrorsIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.linkedErrorsIntegration),\n/* harmony export */   logger: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.logger),\n/* harmony export */   makeBrowserOfflineTransport: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.makeBrowserOfflineTransport),\n/* harmony export */   makeFetchTransport: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.makeFetchTransport),\n/* harmony export */   makeMultiplexedTransport: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.makeMultiplexedTransport),\n/* harmony export */   moduleMetadataIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.moduleMetadataIntegration),\n/* harmony export */   onLoad: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.onLoad),\n/* harmony export */   openFeatureIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.openFeatureIntegration),\n/* harmony export */   opera10StackLineParser: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.opera10StackLineParser),\n/* harmony export */   opera11StackLineParser: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.opera11StackLineParser),\n/* harmony export */   parameterize: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.parameterize),\n/* harmony export */   reactErrorHandler: () => (/* reexport safe */ _error_js__WEBPACK_IMPORTED_MODULE_2__.reactErrorHandler),\n/* harmony export */   reactRouterV3BrowserTracingIntegration: () => (/* reexport safe */ _reactrouterv3_js__WEBPACK_IMPORTED_MODULE_6__.reactRouterV3BrowserTracingIntegration),\n/* harmony export */   reactRouterV4BrowserTracingIntegration: () => (/* reexport safe */ _reactrouter_js__WEBPACK_IMPORTED_MODULE_8__.reactRouterV4BrowserTracingIntegration),\n/* harmony export */   reactRouterV5BrowserTracingIntegration: () => (/* reexport safe */ _reactrouter_js__WEBPACK_IMPORTED_MODULE_8__.reactRouterV5BrowserTracingIntegration),\n/* harmony export */   reactRouterV6BrowserTracingIntegration: () => (/* reexport safe */ _reactrouterv6_js__WEBPACK_IMPORTED_MODULE_9__.reactRouterV6BrowserTracingIntegration),\n/* harmony export */   reactRouterV7BrowserTracingIntegration: () => (/* reexport safe */ _reactrouterv7_js__WEBPACK_IMPORTED_MODULE_10__.reactRouterV7BrowserTracingIntegration),\n/* harmony export */   registerSpanErrorInstrumentation: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.registerSpanErrorInstrumentation),\n/* harmony export */   registerWebWorker: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.registerWebWorker),\n/* harmony export */   replayCanvasIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.replayCanvasIntegration),\n/* harmony export */   replayIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.replayIntegration),\n/* harmony export */   reportingObserverIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.reportingObserverIntegration),\n/* harmony export */   rewriteFramesIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.rewriteFramesIntegration),\n/* harmony export */   sendFeedback: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.sendFeedback),\n/* harmony export */   setContext: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.setContext),\n/* harmony export */   setCurrentClient: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.setCurrentClient),\n/* harmony export */   setExtra: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.setExtra),\n/* harmony export */   setExtras: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.setExtras),\n/* harmony export */   setHttpStatus: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.setHttpStatus),\n/* harmony export */   setMeasurement: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.setMeasurement),\n/* harmony export */   setTag: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.setTag),\n/* harmony export */   setTags: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.setTags),\n/* harmony export */   setUser: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.setUser),\n/* harmony export */   showReportDialog: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.showReportDialog),\n/* harmony export */   spanToBaggageHeader: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.spanToBaggageHeader),\n/* harmony export */   spanToJSON: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.spanToJSON),\n/* harmony export */   spanToTraceHeader: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.spanToTraceHeader),\n/* harmony export */   spotlightBrowserIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.spotlightBrowserIntegration),\n/* harmony export */   startBrowserTracingNavigationSpan: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startBrowserTracingNavigationSpan),\n/* harmony export */   startBrowserTracingPageLoadSpan: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startBrowserTracingPageLoadSpan),\n/* harmony export */   startInactiveSpan: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startInactiveSpan),\n/* harmony export */   startNewTrace: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startNewTrace),\n/* harmony export */   startSession: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startSession),\n/* harmony export */   startSpan: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startSpan),\n/* harmony export */   startSpanManual: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startSpanManual),\n/* harmony export */   statsigIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.statsigIntegration),\n/* harmony export */   supabaseIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.supabaseIntegration),\n/* harmony export */   suppressTracing: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.suppressTracing),\n/* harmony export */   tanstackRouterBrowserTracingIntegration: () => (/* reexport safe */ _tanstackrouter_js__WEBPACK_IMPORTED_MODULE_7__.tanstackRouterBrowserTracingIntegration),\n/* harmony export */   thirdPartyErrorFilterIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.thirdPartyErrorFilterIntegration),\n/* harmony export */   unleashIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.unleashIntegration),\n/* harmony export */   updateSpanName: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.updateSpanName),\n/* harmony export */   useProfiler: () => (/* reexport safe */ _profiler_js__WEBPACK_IMPORTED_MODULE_3__.useProfiler),\n/* harmony export */   webWorkerIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.webWorkerIntegration),\n/* harmony export */   winjsStackLineParser: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.winjsStackLineParser),\n/* harmony export */   withActiveSpan: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.withActiveSpan),\n/* harmony export */   withErrorBoundary: () => (/* reexport safe */ _errorboundary_js__WEBPACK_IMPORTED_MODULE_4__.withErrorBoundary),\n/* harmony export */   withIsolationScope: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.withIsolationScope),\n/* harmony export */   withProfiler: () => (/* reexport safe */ _profiler_js__WEBPACK_IMPORTED_MODULE_3__.withProfiler),\n/* harmony export */   withScope: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.withScope),\n/* harmony export */   withSentryReactRouterV6Routing: () => (/* reexport safe */ _reactrouterv6_js__WEBPACK_IMPORTED_MODULE_9__.withSentryReactRouterV6Routing),\n/* harmony export */   withSentryReactRouterV7Routing: () => (/* reexport safe */ _reactrouterv7_js__WEBPACK_IMPORTED_MODULE_10__.withSentryReactRouterV7Routing),\n/* harmony export */   withSentryRouting: () => (/* reexport safe */ _reactrouter_js__WEBPACK_IMPORTED_MODULE_8__.withSentryRouting),\n/* harmony export */   wrapCreateBrowserRouterV6: () => (/* reexport safe */ _reactrouterv6_js__WEBPACK_IMPORTED_MODULE_9__.wrapCreateBrowserRouterV6),\n/* harmony export */   wrapCreateBrowserRouterV7: () => (/* reexport safe */ _reactrouterv7_js__WEBPACK_IMPORTED_MODULE_10__.wrapCreateBrowserRouterV7),\n/* harmony export */   wrapCreateMemoryRouterV6: () => (/* reexport safe */ _reactrouterv6_js__WEBPACK_IMPORTED_MODULE_9__.wrapCreateMemoryRouterV6),\n/* harmony export */   wrapCreateMemoryRouterV7: () => (/* reexport safe */ _reactrouterv7_js__WEBPACK_IMPORTED_MODULE_10__.wrapCreateMemoryRouterV7),\n/* harmony export */   wrapUseRoutesV6: () => (/* reexport safe */ _reactrouterv6_js__WEBPACK_IMPORTED_MODULE_9__.wrapUseRoutesV6),\n/* harmony export */   wrapUseRoutesV7: () => (/* reexport safe */ _reactrouterv7_js__WEBPACK_IMPORTED_MODULE_10__.wrapUseRoutesV7),\n/* harmony export */   zodErrorsIntegration: () => (/* reexport safe */ _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.zodErrorsIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/browser */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/index.js\");\n/* harmony import */ var _sdk_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdk.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/sdk.js\");\n/* harmony import */ var _error_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./error.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/error.js\");\n/* harmony import */ var _profiler_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./profiler.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/profiler.js\");\n/* harmony import */ var _errorboundary_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./errorboundary.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/errorboundary.js\");\n/* harmony import */ var _redux_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./redux.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/redux.js\");\n/* harmony import */ var _reactrouterv3_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./reactrouterv3.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouterv3.js\");\n/* harmony import */ var _tanstackrouter_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tanstackrouter.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/tanstackrouter.js\");\n/* harmony import */ var _reactrouter_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./reactrouter.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouter.js\");\n/* harmony import */ var _reactrouterv6_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./reactrouterv6.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouterv6.js\");\n/* harmony import */ var _reactrouterv7_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./reactrouterv7.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouterv7.js\");\n\n\n\n\n\n\n\n\n\n\n\n//# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBZ0M7QUFDQTtBQUNzQztBQUNGO0FBQ0U7QUFDckI7QUFDMkI7QUFDRTtBQUN1RDtBQUM2QztBQUNBO0FBQ2xMIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrcmVhY3RAOS40Ni4wX3JlYWN0QDE5LjEuMS9ub2RlX21vZHVsZXMvQHNlbnRyeS9yZWFjdC9idWlsZC9lc20vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnQHNlbnRyeS9icm93c2VyJztcbmV4cG9ydCB7IGluaXQgfSBmcm9tICcuL3Nkay5qcyc7XG5leHBvcnQgeyBjYXB0dXJlUmVhY3RFeGNlcHRpb24sIHJlYWN0RXJyb3JIYW5kbGVyIH0gZnJvbSAnLi9lcnJvci5qcyc7XG5leHBvcnQgeyBQcm9maWxlciwgdXNlUHJvZmlsZXIsIHdpdGhQcm9maWxlciB9IGZyb20gJy4vcHJvZmlsZXIuanMnO1xuZXhwb3J0IHsgRXJyb3JCb3VuZGFyeSwgd2l0aEVycm9yQm91bmRhcnkgfSBmcm9tICcuL2Vycm9yYm91bmRhcnkuanMnO1xuZXhwb3J0IHsgY3JlYXRlUmVkdXhFbmhhbmNlciB9IGZyb20gJy4vcmVkdXguanMnO1xuZXhwb3J0IHsgcmVhY3RSb3V0ZXJWM0Jyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24gfSBmcm9tICcuL3JlYWN0cm91dGVydjMuanMnO1xuZXhwb3J0IHsgdGFuc3RhY2tSb3V0ZXJCcm93c2VyVHJhY2luZ0ludGVncmF0aW9uIH0gZnJvbSAnLi90YW5zdGFja3JvdXRlci5qcyc7XG5leHBvcnQgeyByZWFjdFJvdXRlclY0QnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbiwgcmVhY3RSb3V0ZXJWNUJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24sIHdpdGhTZW50cnlSb3V0aW5nIH0gZnJvbSAnLi9yZWFjdHJvdXRlci5qcyc7XG5leHBvcnQgeyByZWFjdFJvdXRlclY2QnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbiwgd2l0aFNlbnRyeVJlYWN0Um91dGVyVjZSb3V0aW5nLCB3cmFwQ3JlYXRlQnJvd3NlclJvdXRlclY2LCB3cmFwQ3JlYXRlTWVtb3J5Um91dGVyVjYsIHdyYXBVc2VSb3V0ZXNWNiB9IGZyb20gJy4vcmVhY3Ryb3V0ZXJ2Ni5qcyc7XG5leHBvcnQgeyByZWFjdFJvdXRlclY3QnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbiwgd2l0aFNlbnRyeVJlYWN0Um91dGVyVjdSb3V0aW5nLCB3cmFwQ3JlYXRlQnJvd3NlclJvdXRlclY3LCB3cmFwQ3JlYXRlTWVtb3J5Um91dGVyVjcsIHdyYXBVc2VSb3V0ZXNWNyB9IGZyb20gJy4vcmVhY3Ryb3V0ZXJ2Ny5qcyc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/profiler.js":
/*!***************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/profiler.js ***!
  \***************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   Profiler: () => (/* binding */ Profiler),\n/* harmony export */   UNKNOWN_COMPONENT: () => (/* binding */ UNKNOWN_COMPONENT),\n/* harmony export */   useProfiler: () => (/* binding */ useProfiler),\n/* harmony export */   withProfiler: () => (/* binding */ withProfiler)\n/* harmony export */ });\n/* harmony import */ var _sentry_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/browser */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/index.js\");\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constants.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/constants.js\");\n/* harmony import */ var _hoist_non_react_statics_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hoist-non-react-statics.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/hoist-non-react-statics.js\");\n\n\n\n\n\n\nconst UNKNOWN_COMPONENT = 'unknown';\n\n/**\n * The Profiler component leverages Sentry's Tracing integration to generate\n * spans based on component lifecycles.\n */\nclass Profiler extends react__WEBPACK_IMPORTED_MODULE_2__.Component {\n  /**\n   * The span of the mount activity\n   * Made protected for the React Native SDK to access\n   */\n\n  /**\n   * The span that represents the duration of time between shouldComponentUpdate and componentDidUpdate\n   */\n\n   constructor(props) {\n    super(props);\n    const { name, disabled = false } = this.props;\n\n    if (disabled) {\n      return;\n    }\n\n    this._mountSpan = (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startInactiveSpan)({\n      name: `<${name}>`,\n      onlyIfParent: true,\n      op: _constants_js__WEBPACK_IMPORTED_MODULE_3__.REACT_MOUNT_OP,\n      attributes: {\n        [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.react.profiler',\n        'ui.component_name': name,\n      },\n    });\n  }\n\n  // If a component mounted, we can finish the mount activity.\n   componentDidMount() {\n    if (this._mountSpan) {\n      this._mountSpan.end();\n    }\n  }\n\n   shouldComponentUpdate({ updateProps, includeUpdates = true }) {\n    // Only generate an update span if includeUpdates is true, if there is a valid mountSpan,\n    // and if the updateProps have changed. It is ok to not do a deep equality check here as it is expensive.\n    // We are just trying to give baseline clues for further investigation.\n    if (includeUpdates && this._mountSpan && updateProps !== this.props.updateProps) {\n      // See what props have changed between the previous props, and the current props. This is\n      // set as data on the span. We just store the prop keys as the values could be potentially very large.\n      const changedProps = Object.keys(updateProps).filter(k => updateProps[k] !== this.props.updateProps[k]);\n      if (changedProps.length > 0) {\n        const now = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.timestampInSeconds)();\n        this._updateSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.withActiveSpan)(this._mountSpan, () => {\n          return (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startInactiveSpan)({\n            name: `<${this.props.name}>`,\n            onlyIfParent: true,\n            op: _constants_js__WEBPACK_IMPORTED_MODULE_3__.REACT_UPDATE_OP,\n            startTime: now,\n            attributes: {\n              [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.react.profiler',\n              'ui.component_name': this.props.name,\n              'ui.react.changed_props': changedProps,\n            },\n          });\n        });\n      }\n    }\n\n    return true;\n  }\n\n   componentDidUpdate() {\n    if (this._updateSpan) {\n      this._updateSpan.end();\n      this._updateSpan = undefined;\n    }\n  }\n\n  // If a component is unmounted, we can say it is no longer on the screen.\n  // This means we can finish the span representing the component render.\n   componentWillUnmount() {\n    const endTimestamp = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.timestampInSeconds)();\n    const { name, includeRender = true } = this.props;\n\n    if (this._mountSpan && includeRender) {\n      const startTime = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.spanToJSON)(this._mountSpan).timestamp;\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.withActiveSpan)(this._mountSpan, () => {\n        const renderSpan = (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startInactiveSpan)({\n          onlyIfParent: true,\n          name: `<${name}>`,\n          op: _constants_js__WEBPACK_IMPORTED_MODULE_3__.REACT_RENDER_OP,\n          startTime,\n          attributes: {\n            [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.react.profiler',\n            'ui.component_name': name,\n          },\n        });\n        if (renderSpan) {\n          // Have to cast to Span because the type of _mountSpan is Span | undefined\n          // and not getting narrowed properly\n          renderSpan.end(endTimestamp);\n        }\n      });\n    }\n  }\n\n   render() {\n    return this.props.children;\n  }\n}\n\n// React.Component default props are defined as static property on the class\nObject.assign(Profiler, {\n  defaultProps: {\n    disabled: false,\n    includeRender: true,\n    includeUpdates: true,\n  },\n});\n\n/**\n * withProfiler is a higher order component that wraps a\n * component in a {@link Profiler} component. It is recommended that\n * the higher order component be used over the regular {@link Profiler} component.\n *\n * @param WrappedComponent component that is wrapped by Profiler\n * @param options the {@link ProfilerProps} you can pass into the Profiler\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction withProfiler(\n  WrappedComponent,\n  // We do not want to have `updateProps` given in options, it is instead filled through the HOC.\n  options,\n) {\n  const componentDisplayName =\n    options?.name || WrappedComponent.displayName || WrappedComponent.name || UNKNOWN_COMPONENT;\n\n  const Wrapped = (props) => (\n    react__WEBPACK_IMPORTED_MODULE_2__.createElement(Profiler, { ...options, name: componentDisplayName, updateProps: props,}\n      , react__WEBPACK_IMPORTED_MODULE_2__.createElement(WrappedComponent, { ...props,} )\n    )\n  );\n\n  Wrapped.displayName = `profiler(${componentDisplayName})`;\n\n  // Copy over static methods from Wrapped component to Profiler HOC\n  // See: https://reactjs.org/docs/higher-order-components.html#static-methods-must-be-copied-over\n  (0,_hoist_non_react_statics_js__WEBPACK_IMPORTED_MODULE_4__.hoistNonReactStatics)(Wrapped, WrappedComponent);\n  return Wrapped;\n}\n\n/**\n *\n * `useProfiler` is a React hook that profiles a React component.\n *\n * Requires React 16.8 or above.\n * @param name displayName of component being profiled\n */\nfunction useProfiler(\n  name,\n  options = {\n    disabled: false,\n    hasRenderSpan: true,\n  },\n) {\n  const [mountSpan] = react__WEBPACK_IMPORTED_MODULE_2__.useState(() => {\n    if (options?.disabled) {\n      return undefined;\n    }\n\n    return (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startInactiveSpan)({\n      name: `<${name}>`,\n      onlyIfParent: true,\n      op: _constants_js__WEBPACK_IMPORTED_MODULE_3__.REACT_MOUNT_OP,\n      attributes: {\n        [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.react.profiler',\n        'ui.component_name': name,\n      },\n    });\n  });\n\n  react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n    if (mountSpan) {\n      mountSpan.end();\n    }\n\n    return () => {\n      if (mountSpan && options.hasRenderSpan) {\n        const startTime = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.spanToJSON)(mountSpan).timestamp;\n        const endTimestamp = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.timestampInSeconds)();\n\n        const renderSpan = (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startInactiveSpan)({\n          name: `<${name}>`,\n          onlyIfParent: true,\n          op: _constants_js__WEBPACK_IMPORTED_MODULE_3__.REACT_RENDER_OP,\n          startTime,\n          attributes: {\n            [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.react.profiler',\n            'ui.component_name': name,\n          },\n        });\n        if (renderSpan) {\n          // Have to cast to Span because the type of _mountSpan is Span | undefined\n          // and not getting narrowed properly\n          renderSpan.end(endTimestamp);\n        }\n      }\n    };\n    // We only want this to run once.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n}\n\n\n//# sourceMappingURL=profiler.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL3Byb2ZpbGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFvRDtBQUM0RDtBQUNqRjtBQUNtRDtBQUNkOztBQUVwRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qiw0Q0FBZTtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVkseUJBQXlCOztBQUVyQztBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLGtFQUFpQjtBQUN2QyxnQkFBZ0IsS0FBSztBQUNyQjtBQUNBLFVBQVUseURBQWM7QUFDeEI7QUFDQSxTQUFTLDBFQUFnQztBQUN6QztBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJCQUEyQixvQ0FBb0M7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixnRUFBa0I7QUFDdEMsMkJBQTJCLDREQUFjO0FBQ3pDLGlCQUFpQixrRUFBaUI7QUFDbEMsc0JBQXNCLGdCQUFnQjtBQUN0QztBQUNBLGdCQUFnQiwwREFBZTtBQUMvQjtBQUNBO0FBQ0EsZUFBZSwwRUFBZ0M7QUFDL0M7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGdFQUFrQjtBQUMzQyxZQUFZLDZCQUE2Qjs7QUFFekM7QUFDQSx3QkFBd0Isd0RBQVU7QUFDbEMsTUFBTSw0REFBYztBQUNwQiwyQkFBMkIsa0VBQWlCO0FBQzVDO0FBQ0Esb0JBQW9CLEtBQUs7QUFDekIsY0FBYywwREFBZTtBQUM3QjtBQUNBO0FBQ0EsYUFBYSwwRUFBZ0M7QUFDN0M7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsbUJBQW1CLGdCQUFnQjtBQUNuQyx3REFBd0QsZ0JBQWdCO0FBQ3hFO0FBQ0E7QUFDQSx1QkFBdUIscUJBQXFCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksZ0RBQW1CLGFBQWE7QUFDcEMsUUFBUSxnREFBbUIscUJBQXFCLFdBQVc7QUFDM0Q7QUFDQTs7QUFFQSxvQ0FBb0MscUJBQXFCOztBQUV6RDtBQUNBO0FBQ0EsRUFBRSxpRkFBb0I7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxzQkFBc0IsMkNBQWM7QUFDcEM7QUFDQTtBQUNBOztBQUVBLFdBQVcsa0VBQWlCO0FBQzVCLGdCQUFnQixLQUFLO0FBQ3JCO0FBQ0EsVUFBVSx5REFBYztBQUN4QjtBQUNBLFNBQVMsMEVBQWdDO0FBQ3pDO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHOztBQUVILEVBQUUsNENBQWU7QUFDakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEIsd0RBQVU7QUFDcEMsNkJBQTZCLGdFQUFrQjs7QUFFL0MsMkJBQTJCLGtFQUFpQjtBQUM1QyxvQkFBb0IsS0FBSztBQUN6QjtBQUNBLGNBQWMsMERBQWU7QUFDN0I7QUFDQTtBQUNBLGFBQWEsMEVBQWdDO0FBQzdDO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRWtFO0FBQ2xFIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrcmVhY3RAOS40Ni4wX3JlYWN0QDE5LjEuMS9ub2RlX21vZHVsZXMvQHNlbnRyeS9yZWFjdC9idWlsZC9lc20vcHJvZmlsZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RhcnRJbmFjdGl2ZVNwYW4gfSBmcm9tICdAc2VudHJ5L2Jyb3dzZXInO1xuaW1wb3J0IHsgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU4sIHRpbWVzdGFtcEluU2Vjb25kcywgd2l0aEFjdGl2ZVNwYW4sIHNwYW5Ub0pTT04gfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUkVBQ1RfTU9VTlRfT1AsIFJFQUNUX1VQREFURV9PUCwgUkVBQ1RfUkVOREVSX09QIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgaG9pc3ROb25SZWFjdFN0YXRpY3MgfSBmcm9tICcuL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmpzJztcblxuY29uc3QgVU5LTk9XTl9DT01QT05FTlQgPSAndW5rbm93bic7XG5cbi8qKlxuICogVGhlIFByb2ZpbGVyIGNvbXBvbmVudCBsZXZlcmFnZXMgU2VudHJ5J3MgVHJhY2luZyBpbnRlZ3JhdGlvbiB0byBnZW5lcmF0ZVxuICogc3BhbnMgYmFzZWQgb24gY29tcG9uZW50IGxpZmVjeWNsZXMuXG4gKi9cbmNsYXNzIFByb2ZpbGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRoZSBzcGFuIG9mIHRoZSBtb3VudCBhY3Rpdml0eVxuICAgKiBNYWRlIHByb3RlY3RlZCBmb3IgdGhlIFJlYWN0IE5hdGl2ZSBTREsgdG8gYWNjZXNzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBUaGUgc3BhbiB0aGF0IHJlcHJlc2VudHMgdGhlIGR1cmF0aW9uIG9mIHRpbWUgYmV0d2VlbiBzaG91bGRDb21wb25lbnRVcGRhdGUgYW5kIGNvbXBvbmVudERpZFVwZGF0ZVxuICAgKi9cblxuICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3QgeyBuYW1lLCBkaXNhYmxlZCA9IGZhbHNlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbW91bnRTcGFuID0gc3RhcnRJbmFjdGl2ZVNwYW4oe1xuICAgICAgbmFtZTogYDwke25hbWV9PmAsXG4gICAgICBvbmx5SWZQYXJlbnQ6IHRydWUsXG4gICAgICBvcDogUkVBQ1RfTU9VTlRfT1AsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06ICdhdXRvLnVpLnJlYWN0LnByb2ZpbGVyJyxcbiAgICAgICAgJ3VpLmNvbXBvbmVudF9uYW1lJzogbmFtZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyBJZiBhIGNvbXBvbmVudCBtb3VudGVkLCB3ZSBjYW4gZmluaXNoIHRoZSBtb3VudCBhY3Rpdml0eS5cbiAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGlmICh0aGlzLl9tb3VudFNwYW4pIHtcbiAgICAgIHRoaXMuX21vdW50U3Bhbi5lbmQoKTtcbiAgICB9XG4gIH1cblxuICAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKHsgdXBkYXRlUHJvcHMsIGluY2x1ZGVVcGRhdGVzID0gdHJ1ZSB9KSB7XG4gICAgLy8gT25seSBnZW5lcmF0ZSBhbiB1cGRhdGUgc3BhbiBpZiBpbmNsdWRlVXBkYXRlcyBpcyB0cnVlLCBpZiB0aGVyZSBpcyBhIHZhbGlkIG1vdW50U3BhbixcbiAgICAvLyBhbmQgaWYgdGhlIHVwZGF0ZVByb3BzIGhhdmUgY2hhbmdlZC4gSXQgaXMgb2sgdG8gbm90IGRvIGEgZGVlcCBlcXVhbGl0eSBjaGVjayBoZXJlIGFzIGl0IGlzIGV4cGVuc2l2ZS5cbiAgICAvLyBXZSBhcmUganVzdCB0cnlpbmcgdG8gZ2l2ZSBiYXNlbGluZSBjbHVlcyBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uLlxuICAgIGlmIChpbmNsdWRlVXBkYXRlcyAmJiB0aGlzLl9tb3VudFNwYW4gJiYgdXBkYXRlUHJvcHMgIT09IHRoaXMucHJvcHMudXBkYXRlUHJvcHMpIHtcbiAgICAgIC8vIFNlZSB3aGF0IHByb3BzIGhhdmUgY2hhbmdlZCBiZXR3ZWVuIHRoZSBwcmV2aW91cyBwcm9wcywgYW5kIHRoZSBjdXJyZW50IHByb3BzLiBUaGlzIGlzXG4gICAgICAvLyBzZXQgYXMgZGF0YSBvbiB0aGUgc3Bhbi4gV2UganVzdCBzdG9yZSB0aGUgcHJvcCBrZXlzIGFzIHRoZSB2YWx1ZXMgY291bGQgYmUgcG90ZW50aWFsbHkgdmVyeSBsYXJnZS5cbiAgICAgIGNvbnN0IGNoYW5nZWRQcm9wcyA9IE9iamVjdC5rZXlzKHVwZGF0ZVByb3BzKS5maWx0ZXIoayA9PiB1cGRhdGVQcm9wc1trXSAhPT0gdGhpcy5wcm9wcy51cGRhdGVQcm9wc1trXSk7XG4gICAgICBpZiAoY2hhbmdlZFByb3BzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgbm93ID0gdGltZXN0YW1wSW5TZWNvbmRzKCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVNwYW4gPSB3aXRoQWN0aXZlU3Bhbih0aGlzLl9tb3VudFNwYW4sICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gc3RhcnRJbmFjdGl2ZVNwYW4oe1xuICAgICAgICAgICAgbmFtZTogYDwke3RoaXMucHJvcHMubmFtZX0+YCxcbiAgICAgICAgICAgIG9ubHlJZlBhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIG9wOiBSRUFDVF9VUERBVEVfT1AsXG4gICAgICAgICAgICBzdGFydFRpbWU6IG5vdyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOXTogJ2F1dG8udWkucmVhY3QucHJvZmlsZXInLFxuICAgICAgICAgICAgICAndWkuY29tcG9uZW50X25hbWUnOiB0aGlzLnByb3BzLm5hbWUsXG4gICAgICAgICAgICAgICd1aS5yZWFjdC5jaGFuZ2VkX3Byb3BzJzogY2hhbmdlZFByb3BzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIGlmICh0aGlzLl91cGRhdGVTcGFuKSB7XG4gICAgICB0aGlzLl91cGRhdGVTcGFuLmVuZCgpO1xuICAgICAgdGhpcy5fdXBkYXRlU3BhbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvLyBJZiBhIGNvbXBvbmVudCBpcyB1bm1vdW50ZWQsIHdlIGNhbiBzYXkgaXQgaXMgbm8gbG9uZ2VyIG9uIHRoZSBzY3JlZW4uXG4gIC8vIFRoaXMgbWVhbnMgd2UgY2FuIGZpbmlzaCB0aGUgc3BhbiByZXByZXNlbnRpbmcgdGhlIGNvbXBvbmVudCByZW5kZXIuXG4gICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBjb25zdCBlbmRUaW1lc3RhbXAgPSB0aW1lc3RhbXBJblNlY29uZHMoKTtcbiAgICBjb25zdCB7IG5hbWUsIGluY2x1ZGVSZW5kZXIgPSB0cnVlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKHRoaXMuX21vdW50U3BhbiAmJiBpbmNsdWRlUmVuZGVyKSB7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBzcGFuVG9KU09OKHRoaXMuX21vdW50U3BhbikudGltZXN0YW1wO1xuICAgICAgd2l0aEFjdGl2ZVNwYW4odGhpcy5fbW91bnRTcGFuLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbmRlclNwYW4gPSBzdGFydEluYWN0aXZlU3Bhbih7XG4gICAgICAgICAgb25seUlmUGFyZW50OiB0cnVlLFxuICAgICAgICAgIG5hbWU6IGA8JHtuYW1lfT5gLFxuICAgICAgICAgIG9wOiBSRUFDVF9SRU5ERVJfT1AsXG4gICAgICAgICAgc3RhcnRUaW1lLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06ICdhdXRvLnVpLnJlYWN0LnByb2ZpbGVyJyxcbiAgICAgICAgICAgICd1aS5jb21wb25lbnRfbmFtZSc6IG5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZW5kZXJTcGFuKSB7XG4gICAgICAgICAgLy8gSGF2ZSB0byBjYXN0IHRvIFNwYW4gYmVjYXVzZSB0aGUgdHlwZSBvZiBfbW91bnRTcGFuIGlzIFNwYW4gfCB1bmRlZmluZWRcbiAgICAgICAgICAvLyBhbmQgbm90IGdldHRpbmcgbmFycm93ZWQgcHJvcGVybHlcbiAgICAgICAgICByZW5kZXJTcGFuLmVuZChlbmRUaW1lc3RhbXApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAgcmVuZGVyKCkge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICB9XG59XG5cbi8vIFJlYWN0LkNvbXBvbmVudCBkZWZhdWx0IHByb3BzIGFyZSBkZWZpbmVkIGFzIHN0YXRpYyBwcm9wZXJ0eSBvbiB0aGUgY2xhc3Ncbk9iamVjdC5hc3NpZ24oUHJvZmlsZXIsIHtcbiAgZGVmYXVsdFByb3BzOiB7XG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIGluY2x1ZGVSZW5kZXI6IHRydWUsXG4gICAgaW5jbHVkZVVwZGF0ZXM6IHRydWUsXG4gIH0sXG59KTtcblxuLyoqXG4gKiB3aXRoUHJvZmlsZXIgaXMgYSBoaWdoZXIgb3JkZXIgY29tcG9uZW50IHRoYXQgd3JhcHMgYVxuICogY29tcG9uZW50IGluIGEge0BsaW5rIFByb2ZpbGVyfSBjb21wb25lbnQuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXRcbiAqIHRoZSBoaWdoZXIgb3JkZXIgY29tcG9uZW50IGJlIHVzZWQgb3ZlciB0aGUgcmVndWxhciB7QGxpbmsgUHJvZmlsZXJ9IGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0gV3JhcHBlZENvbXBvbmVudCBjb21wb25lbnQgdGhhdCBpcyB3cmFwcGVkIGJ5IFByb2ZpbGVyXG4gKiBAcGFyYW0gb3B0aW9ucyB0aGUge0BsaW5rIFByb2ZpbGVyUHJvcHN9IHlvdSBjYW4gcGFzcyBpbnRvIHRoZSBQcm9maWxlclxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gd2l0aFByb2ZpbGVyKFxuICBXcmFwcGVkQ29tcG9uZW50LFxuICAvLyBXZSBkbyBub3Qgd2FudCB0byBoYXZlIGB1cGRhdGVQcm9wc2AgZ2l2ZW4gaW4gb3B0aW9ucywgaXQgaXMgaW5zdGVhZCBmaWxsZWQgdGhyb3VnaCB0aGUgSE9DLlxuICBvcHRpb25zLFxuKSB7XG4gIGNvbnN0IGNvbXBvbmVudERpc3BsYXlOYW1lID1cbiAgICBvcHRpb25zPy5uYW1lIHx8IFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lIHx8IFVOS05PV05fQ09NUE9ORU5UO1xuXG4gIGNvbnN0IFdyYXBwZWQgPSAocHJvcHMpID0+IChcbiAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFByb2ZpbGVyLCB7IC4uLm9wdGlvbnMsIG5hbWU6IGNvbXBvbmVudERpc3BsYXlOYW1lLCB1cGRhdGVQcm9wczogcHJvcHMsfVxuICAgICAgLCBSZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIHsgLi4ucHJvcHMsfSApXG4gICAgKVxuICApO1xuXG4gIFdyYXBwZWQuZGlzcGxheU5hbWUgPSBgcHJvZmlsZXIoJHtjb21wb25lbnREaXNwbGF5TmFtZX0pYDtcblxuICAvLyBDb3B5IG92ZXIgc3RhdGljIG1ldGhvZHMgZnJvbSBXcmFwcGVkIGNvbXBvbmVudCB0byBQcm9maWxlciBIT0NcbiAgLy8gU2VlOiBodHRwczovL3JlYWN0anMub3JnL2RvY3MvaGlnaGVyLW9yZGVyLWNvbXBvbmVudHMuaHRtbCNzdGF0aWMtbWV0aG9kcy1tdXN0LWJlLWNvcGllZC1vdmVyXG4gIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdyYXBwZWQsIFdyYXBwZWRDb21wb25lbnQpO1xuICByZXR1cm4gV3JhcHBlZDtcbn1cblxuLyoqXG4gKlxuICogYHVzZVByb2ZpbGVyYCBpcyBhIFJlYWN0IGhvb2sgdGhhdCBwcm9maWxlcyBhIFJlYWN0IGNvbXBvbmVudC5cbiAqXG4gKiBSZXF1aXJlcyBSZWFjdCAxNi44IG9yIGFib3ZlLlxuICogQHBhcmFtIG5hbWUgZGlzcGxheU5hbWUgb2YgY29tcG9uZW50IGJlaW5nIHByb2ZpbGVkXG4gKi9cbmZ1bmN0aW9uIHVzZVByb2ZpbGVyKFxuICBuYW1lLFxuICBvcHRpb25zID0ge1xuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBoYXNSZW5kZXJTcGFuOiB0cnVlLFxuICB9LFxuKSB7XG4gIGNvbnN0IFttb3VudFNwYW5dID0gUmVhY3QudXNlU3RhdGUoKCkgPT4ge1xuICAgIGlmIChvcHRpb25zPy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhcnRJbmFjdGl2ZVNwYW4oe1xuICAgICAgbmFtZTogYDwke25hbWV9PmAsXG4gICAgICBvbmx5SWZQYXJlbnQ6IHRydWUsXG4gICAgICBvcDogUkVBQ1RfTU9VTlRfT1AsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06ICdhdXRvLnVpLnJlYWN0LnByb2ZpbGVyJyxcbiAgICAgICAgJ3VpLmNvbXBvbmVudF9uYW1lJzogbmFtZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1vdW50U3Bhbikge1xuICAgICAgbW91bnRTcGFuLmVuZCgpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAobW91bnRTcGFuICYmIG9wdGlvbnMuaGFzUmVuZGVyU3Bhbikge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBzcGFuVG9KU09OKG1vdW50U3BhbikudGltZXN0YW1wO1xuICAgICAgICBjb25zdCBlbmRUaW1lc3RhbXAgPSB0aW1lc3RhbXBJblNlY29uZHMoKTtcblxuICAgICAgICBjb25zdCByZW5kZXJTcGFuID0gc3RhcnRJbmFjdGl2ZVNwYW4oe1xuICAgICAgICAgIG5hbWU6IGA8JHtuYW1lfT5gLFxuICAgICAgICAgIG9ubHlJZlBhcmVudDogdHJ1ZSxcbiAgICAgICAgICBvcDogUkVBQ1RfUkVOREVSX09QLFxuICAgICAgICAgIHN0YXJ0VGltZSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiAnYXV0by51aS5yZWFjdC5wcm9maWxlcicsXG4gICAgICAgICAgICAndWkuY29tcG9uZW50X25hbWUnOiBuYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmVuZGVyU3Bhbikge1xuICAgICAgICAgIC8vIEhhdmUgdG8gY2FzdCB0byBTcGFuIGJlY2F1c2UgdGhlIHR5cGUgb2YgX21vdW50U3BhbiBpcyBTcGFuIHwgdW5kZWZpbmVkXG4gICAgICAgICAgLy8gYW5kIG5vdCBnZXR0aW5nIG5hcnJvd2VkIHByb3Blcmx5XG4gICAgICAgICAgcmVuZGVyU3Bhbi5lbmQoZW5kVGltZXN0YW1wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgLy8gV2Ugb25seSB3YW50IHRoaXMgdG8gcnVuIG9uY2UuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG59XG5cbmV4cG9ydCB7IFByb2ZpbGVyLCBVTktOT1dOX0NPTVBPTkVOVCwgdXNlUHJvZmlsZXIsIHdpdGhQcm9maWxlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvZmlsZXIuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/profiler.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouter.js":
/*!******************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouter.js ***!
  \******************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   reactRouterV4BrowserTracingIntegration: () => (/* binding */ reactRouterV4BrowserTracingIntegration),\n/* harmony export */   reactRouterV5BrowserTracingIntegration: () => (/* binding */ reactRouterV5BrowserTracingIntegration),\n/* harmony export */   withSentryRouting: () => (/* binding */ withSentryRouting)\n/* harmony export */ });\n/* harmony import */ var _sentry_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/browser */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/index.js\");\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var _hoist_non_react_statics_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hoist-non-react-statics.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/hoist-non-react-statics.js\");\n\n\n\n\n\n// We need to disable eslint no-explicit-any because any is required for the\n// react-router typings.\n\n/**\n * A browser tracing integration that uses React Router v4 to instrument navigations.\n * Expects `history` (and optionally `routes` and `matchPath`) to be passed as options.\n */\nfunction reactRouterV4BrowserTracingIntegration(\n  options,\n) {\n  const integration = (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.browserTracingIntegration)({\n    ...options,\n    instrumentPageLoad: false,\n    instrumentNavigation: false,\n  });\n\n  const { history, routes, matchPath, instrumentPageLoad = true, instrumentNavigation = true } = options;\n\n  return {\n    ...integration,\n    afterAllSetup(client) {\n      integration.afterAllSetup(client);\n\n      instrumentReactRouter(\n        client,\n        instrumentPageLoad,\n        instrumentNavigation,\n        history,\n        'reactrouter_v4',\n        routes,\n        matchPath,\n      );\n    },\n  };\n}\n\n/**\n * A browser tracing integration that uses React Router v5 to instrument navigations.\n * Expects `history` (and optionally `routes` and `matchPath`) to be passed as options.\n */\nfunction reactRouterV5BrowserTracingIntegration(\n  options,\n) {\n  const integration = (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.browserTracingIntegration)({\n    ...options,\n    instrumentPageLoad: false,\n    instrumentNavigation: false,\n  });\n\n  const { history, routes, matchPath, instrumentPageLoad = true, instrumentNavigation = true } = options;\n\n  return {\n    ...integration,\n    afterAllSetup(client) {\n      integration.afterAllSetup(client);\n\n      instrumentReactRouter(\n        client,\n        instrumentPageLoad,\n        instrumentNavigation,\n        history,\n        'reactrouter_v5',\n        routes,\n        matchPath,\n      );\n    },\n  };\n}\n\nfunction instrumentReactRouter(\n  client,\n  instrumentPageLoad,\n  instrumentNavigation,\n  history,\n  instrumentationName,\n  allRoutes = [],\n  matchPath,\n) {\n  function getInitPathName() {\n    if (history.location) {\n      return history.location.pathname;\n    }\n\n    if (_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.WINDOW.location) {\n      return _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.WINDOW.location.pathname;\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Normalizes a transaction name. Returns the new name as well as the\n   * source of the transaction.\n   *\n   * @param pathname The initial pathname we normalize\n   */\n  function normalizeTransactionName(pathname) {\n    if (allRoutes.length === 0 || !matchPath) {\n      return [pathname, 'url'];\n    }\n\n    const branches = matchRoutes(allRoutes, pathname, matchPath);\n    for (const branch of branches) {\n      if (branch.match.isExact) {\n        return [branch.match.path, 'route'];\n      }\n    }\n\n    return [pathname, 'url'];\n  }\n\n  if (instrumentPageLoad) {\n    const initPathName = getInitPathName();\n    if (initPathName) {\n      const [name, source] = normalizeTransactionName(initPathName);\n      (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startBrowserTracingPageLoadSpan)(client, {\n        name,\n        attributes: {\n          [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload',\n          [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: `auto.pageload.react.${instrumentationName}`,\n          [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n        },\n      });\n    }\n  }\n\n  if (instrumentNavigation && history.listen) {\n    history.listen((location, action) => {\n      if (action && (action === 'PUSH' || action === 'POP')) {\n        const [name, source] = normalizeTransactionName(location.pathname);\n        (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startBrowserTracingNavigationSpan)(client, {\n          name,\n          attributes: {\n            [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation',\n            [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: `auto.navigation.react.${instrumentationName}`,\n            [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n          },\n        });\n      }\n    });\n  }\n}\n\n/**\n * Matches a set of routes to a pathname\n * Based on implementation from\n */\nfunction matchRoutes(\n  routes,\n  pathname,\n  matchPath,\n  branch = [],\n) {\n  routes.some(route => {\n    const match = route.path\n      ? matchPath(pathname, route)\n      : branch.length\n        ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n          branch[branch.length - 1].match // use parent match\n        : computeRootMatch(pathname); // use default \"root\" match\n\n    if (match) {\n      branch.push({ route, match });\n\n      if (route.routes) {\n        matchRoutes(route.routes, pathname, matchPath, branch);\n      }\n    }\n\n    return !!match;\n  });\n\n  return branch;\n}\n\nfunction computeRootMatch(pathname) {\n  return { path: '/', url: '/', params: {}, isExact: pathname === '/' };\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access */\nfunction withSentryRouting(Route) {\n  const componentDisplayName = Route.displayName || Route.name;\n\n  const WrappedRoute = (props) => {\n    if (props?.computedMatch?.isExact) {\n      const route = props.computedMatch.path;\n      const activeRootSpan = getActiveRootSpan();\n\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.getCurrentScope)().setTransactionName(route);\n\n      if (activeRootSpan) {\n        activeRootSpan.updateName(route);\n        activeRootSpan.setAttribute(_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'route');\n      }\n    }\n\n    // @ts-expect-error Setting more specific React Component typing for `R` generic above\n    // will break advanced type inference done by react router params:\n    // https://github.com/DefinitelyTyped/DefinitelyTyped/blob/13dc4235c069e25fe7ee16e11f529d909f9f3ff8/types/react-router/index.d.ts#L154-L164\n    return react__WEBPACK_IMPORTED_MODULE_2__.createElement(Route, { ...props,} );\n  };\n\n  WrappedRoute.displayName = `sentryRoute(${componentDisplayName})`;\n  (0,_hoist_non_react_statics_js__WEBPACK_IMPORTED_MODULE_3__.hoistNonReactStatics)(WrappedRoute, Route);\n  // @ts-expect-error Setting more specific React Component typing for `R` generic above\n  // will break advanced type inference done by react router params:\n  // https://github.com/DefinitelyTyped/DefinitelyTyped/blob/13dc4235c069e25fe7ee16e11f529d909f9f3ff8/types/react-router/index.d.ts#L154-L164\n  return WrappedRoute;\n}\n/* eslint-enable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access */\n\nfunction getActiveRootSpan() {\n  const span = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.getActiveSpan)();\n  const rootSpan = span && (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.getRootSpan)(span);\n\n  if (!rootSpan) {\n    return undefined;\n  }\n\n  const op = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.spanToJSON)(rootSpan).op;\n\n  // Only use this root span if it is a pageload or navigation span\n  return op === 'navigation' || op === 'pageload' ? rootSpan : undefined;\n}\n\n\n//# sourceMappingURL=reactrouter.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL3JlYWN0cm91dGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBd0k7QUFDaUQ7QUFDMUo7QUFDcUM7O0FBRXBFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsMEVBQXlCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsVUFBVSxxRkFBcUY7O0FBRS9GO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDBFQUF5QjtBQUMvQztBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILFVBQVUscUZBQXFGOztBQUUvRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLG1EQUFNO0FBQ2QsYUFBYSxtREFBTTtBQUNuQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxnRkFBK0I7QUFDckM7QUFDQTtBQUNBLFdBQVcsc0VBQTRCO0FBQ3ZDLFdBQVcsMEVBQWdDLDBCQUEwQixvQkFBb0I7QUFDekYsV0FBVywwRUFBZ0M7QUFDM0MsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxrRkFBaUM7QUFDekM7QUFDQTtBQUNBLGFBQWEsc0VBQTRCO0FBQ3pDLGFBQWEsMEVBQWdDLDRCQUE0QixvQkFBb0I7QUFDN0YsYUFBYSwwRUFBZ0M7QUFDN0MsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDOztBQUV0QztBQUNBLG9CQUFvQixjQUFjOztBQUVsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBLFdBQVcsK0JBQStCO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLDZEQUFlOztBQUVyQjtBQUNBO0FBQ0Esb0NBQW9DLDBFQUFnQztBQUNwRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0RBQW1CLFVBQVUsV0FBVztBQUNuRDs7QUFFQSw0Q0FBNEMscUJBQXFCO0FBQ2pFLEVBQUUsaUZBQW9CO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsMkRBQWE7QUFDNUIsMkJBQTJCLHlEQUFXOztBQUV0QztBQUNBO0FBQ0E7O0FBRUEsYUFBYSx3REFBVTs7QUFFdkI7QUFDQTtBQUNBOztBQUU2RztBQUM3RyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL3JlYWN0cm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24sIHN0YXJ0QnJvd3NlclRyYWNpbmdQYWdlTG9hZFNwYW4sIHN0YXJ0QnJvd3NlclRyYWNpbmdOYXZpZ2F0aW9uU3BhbiwgV0lORE9XIH0gZnJvbSAnQHNlbnRyeS9icm93c2VyJztcbmltcG9ydCB7IGdldEN1cnJlbnRTY29wZSwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0UsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QLCBnZXRBY3RpdmVTcGFuLCBnZXRSb290U3Bhbiwgc3BhblRvSlNPTiB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBob2lzdE5vblJlYWN0U3RhdGljcyB9IGZyb20gJy4vaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuanMnO1xuXG4vLyBXZSBuZWVkIHRvIGRpc2FibGUgZXNsaW50IG5vLWV4cGxpY2l0LWFueSBiZWNhdXNlIGFueSBpcyByZXF1aXJlZCBmb3IgdGhlXG4vLyByZWFjdC1yb3V0ZXIgdHlwaW5ncy5cblxuLyoqXG4gKiBBIGJyb3dzZXIgdHJhY2luZyBpbnRlZ3JhdGlvbiB0aGF0IHVzZXMgUmVhY3QgUm91dGVyIHY0IHRvIGluc3RydW1lbnQgbmF2aWdhdGlvbnMuXG4gKiBFeHBlY3RzIGBoaXN0b3J5YCAoYW5kIG9wdGlvbmFsbHkgYHJvdXRlc2AgYW5kIGBtYXRjaFBhdGhgKSB0byBiZSBwYXNzZWQgYXMgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gcmVhY3RSb3V0ZXJWNEJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24oXG4gIG9wdGlvbnMsXG4pIHtcbiAgY29uc3QgaW50ZWdyYXRpb24gPSBicm93c2VyVHJhY2luZ0ludGVncmF0aW9uKHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGluc3RydW1lbnRQYWdlTG9hZDogZmFsc2UsXG4gICAgaW5zdHJ1bWVudE5hdmlnYXRpb246IGZhbHNlLFxuICB9KTtcblxuICBjb25zdCB7IGhpc3RvcnksIHJvdXRlcywgbWF0Y2hQYXRoLCBpbnN0cnVtZW50UGFnZUxvYWQgPSB0cnVlLCBpbnN0cnVtZW50TmF2aWdhdGlvbiA9IHRydWUgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5pbnRlZ3JhdGlvbixcbiAgICBhZnRlckFsbFNldHVwKGNsaWVudCkge1xuICAgICAgaW50ZWdyYXRpb24uYWZ0ZXJBbGxTZXR1cChjbGllbnQpO1xuXG4gICAgICBpbnN0cnVtZW50UmVhY3RSb3V0ZXIoXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgaW5zdHJ1bWVudFBhZ2VMb2FkLFxuICAgICAgICBpbnN0cnVtZW50TmF2aWdhdGlvbixcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgJ3JlYWN0cm91dGVyX3Y0JyxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBtYXRjaFBhdGgsXG4gICAgICApO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogQSBicm93c2VyIHRyYWNpbmcgaW50ZWdyYXRpb24gdGhhdCB1c2VzIFJlYWN0IFJvdXRlciB2NSB0byBpbnN0cnVtZW50IG5hdmlnYXRpb25zLlxuICogRXhwZWN0cyBgaGlzdG9yeWAgKGFuZCBvcHRpb25hbGx5IGByb3V0ZXNgIGFuZCBgbWF0Y2hQYXRoYCkgdG8gYmUgcGFzc2VkIGFzIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIHJlYWN0Um91dGVyVjVCcm93c2VyVHJhY2luZ0ludGVncmF0aW9uKFxuICBvcHRpb25zLFxuKSB7XG4gIGNvbnN0IGludGVncmF0aW9uID0gYnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbih7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBpbnN0cnVtZW50UGFnZUxvYWQ6IGZhbHNlLFxuICAgIGluc3RydW1lbnROYXZpZ2F0aW9uOiBmYWxzZSxcbiAgfSk7XG5cbiAgY29uc3QgeyBoaXN0b3J5LCByb3V0ZXMsIG1hdGNoUGF0aCwgaW5zdHJ1bWVudFBhZ2VMb2FkID0gdHJ1ZSwgaW5zdHJ1bWVudE5hdmlnYXRpb24gPSB0cnVlIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgLi4uaW50ZWdyYXRpb24sXG4gICAgYWZ0ZXJBbGxTZXR1cChjbGllbnQpIHtcbiAgICAgIGludGVncmF0aW9uLmFmdGVyQWxsU2V0dXAoY2xpZW50KTtcblxuICAgICAgaW5zdHJ1bWVudFJlYWN0Um91dGVyKFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIGluc3RydW1lbnRQYWdlTG9hZCxcbiAgICAgICAgaW5zdHJ1bWVudE5hdmlnYXRpb24sXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgICdyZWFjdHJvdXRlcl92NScsXG4gICAgICAgIHJvdXRlcyxcbiAgICAgICAgbWF0Y2hQYXRoLFxuICAgICAgKTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnN0cnVtZW50UmVhY3RSb3V0ZXIoXG4gIGNsaWVudCxcbiAgaW5zdHJ1bWVudFBhZ2VMb2FkLFxuICBpbnN0cnVtZW50TmF2aWdhdGlvbixcbiAgaGlzdG9yeSxcbiAgaW5zdHJ1bWVudGF0aW9uTmFtZSxcbiAgYWxsUm91dGVzID0gW10sXG4gIG1hdGNoUGF0aCxcbikge1xuICBmdW5jdGlvbiBnZXRJbml0UGF0aE5hbWUoKSB7XG4gICAgaWYgKGhpc3RvcnkubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBoaXN0b3J5LmxvY2F0aW9uLnBhdGhuYW1lO1xuICAgIH1cblxuICAgIGlmIChXSU5ET1cubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBXSU5ET1cubG9jYXRpb24ucGF0aG5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemVzIGEgdHJhbnNhY3Rpb24gbmFtZS4gUmV0dXJucyB0aGUgbmV3IG5hbWUgYXMgd2VsbCBhcyB0aGVcbiAgICogc291cmNlIG9mIHRoZSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHBhdGhuYW1lIFRoZSBpbml0aWFsIHBhdGhuYW1lIHdlIG5vcm1hbGl6ZVxuICAgKi9cbiAgZnVuY3Rpb24gbm9ybWFsaXplVHJhbnNhY3Rpb25OYW1lKHBhdGhuYW1lKSB7XG4gICAgaWYgKGFsbFJvdXRlcy5sZW5ndGggPT09IDAgfHwgIW1hdGNoUGF0aCkge1xuICAgICAgcmV0dXJuIFtwYXRobmFtZSwgJ3VybCddO1xuICAgIH1cblxuICAgIGNvbnN0IGJyYW5jaGVzID0gbWF0Y2hSb3V0ZXMoYWxsUm91dGVzLCBwYXRobmFtZSwgbWF0Y2hQYXRoKTtcbiAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiBicmFuY2hlcykge1xuICAgICAgaWYgKGJyYW5jaC5tYXRjaC5pc0V4YWN0KSB7XG4gICAgICAgIHJldHVybiBbYnJhbmNoLm1hdGNoLnBhdGgsICdyb3V0ZSddO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbcGF0aG5hbWUsICd1cmwnXTtcbiAgfVxuXG4gIGlmIChpbnN0cnVtZW50UGFnZUxvYWQpIHtcbiAgICBjb25zdCBpbml0UGF0aE5hbWUgPSBnZXRJbml0UGF0aE5hbWUoKTtcbiAgICBpZiAoaW5pdFBhdGhOYW1lKSB7XG4gICAgICBjb25zdCBbbmFtZSwgc291cmNlXSA9IG5vcm1hbGl6ZVRyYW5zYWN0aW9uTmFtZShpbml0UGF0aE5hbWUpO1xuICAgICAgc3RhcnRCcm93c2VyVHJhY2luZ1BhZ2VMb2FkU3BhbihjbGllbnQsIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QXTogJ3BhZ2Vsb2FkJyxcbiAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiBgYXV0by5wYWdlbG9hZC5yZWFjdC4ke2luc3RydW1lbnRhdGlvbk5hbWV9YCxcbiAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0VdOiBzb3VyY2UsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpZiAoaW5zdHJ1bWVudE5hdmlnYXRpb24gJiYgaGlzdG9yeS5saXN0ZW4pIHtcbiAgICBoaXN0b3J5Lmxpc3RlbigobG9jYXRpb24sIGFjdGlvbikgPT4ge1xuICAgICAgaWYgKGFjdGlvbiAmJiAoYWN0aW9uID09PSAnUFVTSCcgfHwgYWN0aW9uID09PSAnUE9QJykpIHtcbiAgICAgICAgY29uc3QgW25hbWUsIHNvdXJjZV0gPSBub3JtYWxpemVUcmFuc2FjdGlvbk5hbWUobG9jYXRpb24ucGF0aG5hbWUpO1xuICAgICAgICBzdGFydEJyb3dzZXJUcmFjaW5nTmF2aWdhdGlvblNwYW4oY2xpZW50LCB7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUF06ICduYXZpZ2F0aW9uJyxcbiAgICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06IGBhdXRvLm5hdmlnYXRpb24ucmVhY3QuJHtpbnN0cnVtZW50YXRpb25OYW1lfWAsXG4gICAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0VdOiBzb3VyY2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBNYXRjaGVzIGEgc2V0IG9mIHJvdXRlcyB0byBhIHBhdGhuYW1lXG4gKiBCYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBmcm9tXG4gKi9cbmZ1bmN0aW9uIG1hdGNoUm91dGVzKFxuICByb3V0ZXMsXG4gIHBhdGhuYW1lLFxuICBtYXRjaFBhdGgsXG4gIGJyYW5jaCA9IFtdLFxuKSB7XG4gIHJvdXRlcy5zb21lKHJvdXRlID0+IHtcbiAgICBjb25zdCBtYXRjaCA9IHJvdXRlLnBhdGhcbiAgICAgID8gbWF0Y2hQYXRoKHBhdGhuYW1lLCByb3V0ZSlcbiAgICAgIDogYnJhbmNoLmxlbmd0aFxuICAgICAgICA/IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgYnJhbmNoW2JyYW5jaC5sZW5ndGggLSAxXS5tYXRjaCAvLyB1c2UgcGFyZW50IG1hdGNoXG4gICAgICAgIDogY29tcHV0ZVJvb3RNYXRjaChwYXRobmFtZSk7IC8vIHVzZSBkZWZhdWx0IFwicm9vdFwiIG1hdGNoXG5cbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGJyYW5jaC5wdXNoKHsgcm91dGUsIG1hdGNoIH0pO1xuXG4gICAgICBpZiAocm91dGUucm91dGVzKSB7XG4gICAgICAgIG1hdGNoUm91dGVzKHJvdXRlLnJvdXRlcywgcGF0aG5hbWUsIG1hdGNoUGF0aCwgYnJhbmNoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gISFtYXRjaDtcbiAgfSk7XG5cbiAgcmV0dXJuIGJyYW5jaDtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVJvb3RNYXRjaChwYXRobmFtZSkge1xuICByZXR1cm4geyBwYXRoOiAnLycsIHVybDogJy8nLCBwYXJhbXM6IHt9LCBpc0V4YWN0OiBwYXRobmFtZSA9PT0gJy8nIH07XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuZnVuY3Rpb24gd2l0aFNlbnRyeVJvdXRpbmcoUm91dGUpIHtcbiAgY29uc3QgY29tcG9uZW50RGlzcGxheU5hbWUgPSBSb3V0ZS5kaXNwbGF5TmFtZSB8fCBSb3V0ZS5uYW1lO1xuXG4gIGNvbnN0IFdyYXBwZWRSb3V0ZSA9IChwcm9wcykgPT4ge1xuICAgIGlmIChwcm9wcz8uY29tcHV0ZWRNYXRjaD8uaXNFeGFjdCkge1xuICAgICAgY29uc3Qgcm91dGUgPSBwcm9wcy5jb21wdXRlZE1hdGNoLnBhdGg7XG4gICAgICBjb25zdCBhY3RpdmVSb290U3BhbiA9IGdldEFjdGl2ZVJvb3RTcGFuKCk7XG5cbiAgICAgIGdldEN1cnJlbnRTY29wZSgpLnNldFRyYW5zYWN0aW9uTmFtZShyb3V0ZSk7XG5cbiAgICAgIGlmIChhY3RpdmVSb290U3Bhbikge1xuICAgICAgICBhY3RpdmVSb290U3Bhbi51cGRhdGVOYW1lKHJvdXRlKTtcbiAgICAgICAgYWN0aXZlUm9vdFNwYW4uc2V0QXR0cmlidXRlKFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFLCAncm91dGUnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFNldHRpbmcgbW9yZSBzcGVjaWZpYyBSZWFjdCBDb21wb25lbnQgdHlwaW5nIGZvciBgUmAgZ2VuZXJpYyBhYm92ZVxuICAgIC8vIHdpbGwgYnJlYWsgYWR2YW5jZWQgdHlwZSBpbmZlcmVuY2UgZG9uZSBieSByZWFjdCByb3V0ZXIgcGFyYW1zOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EZWZpbml0ZWx5VHlwZWQvRGVmaW5pdGVseVR5cGVkL2Jsb2IvMTNkYzQyMzVjMDY5ZTI1ZmU3ZWUxNmUxMWY1MjlkOTA5ZjlmM2ZmOC90eXBlcy9yZWFjdC1yb3V0ZXIvaW5kZXguZC50cyNMMTU0LUwxNjRcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZSwgeyAuLi5wcm9wcyx9ICk7XG4gIH07XG5cbiAgV3JhcHBlZFJvdXRlLmRpc3BsYXlOYW1lID0gYHNlbnRyeVJvdXRlKCR7Y29tcG9uZW50RGlzcGxheU5hbWV9KWA7XG4gIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdyYXBwZWRSb3V0ZSwgUm91dGUpO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIFNldHRpbmcgbW9yZSBzcGVjaWZpYyBSZWFjdCBDb21wb25lbnQgdHlwaW5nIGZvciBgUmAgZ2VuZXJpYyBhYm92ZVxuICAvLyB3aWxsIGJyZWFrIGFkdmFuY2VkIHR5cGUgaW5mZXJlbmNlIGRvbmUgYnkgcmVhY3Qgcm91dGVyIHBhcmFtczpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQvYmxvYi8xM2RjNDIzNWMwNjllMjVmZTdlZTE2ZTExZjUyOWQ5MDlmOWYzZmY4L3R5cGVzL3JlYWN0LXJvdXRlci9pbmRleC5kLnRzI0wxNTQtTDE2NFxuICByZXR1cm4gV3JhcHBlZFJvdXRlO1xufVxuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cblxuZnVuY3Rpb24gZ2V0QWN0aXZlUm9vdFNwYW4oKSB7XG4gIGNvbnN0IHNwYW4gPSBnZXRBY3RpdmVTcGFuKCk7XG4gIGNvbnN0IHJvb3RTcGFuID0gc3BhbiAmJiBnZXRSb290U3BhbihzcGFuKTtcblxuICBpZiAoIXJvb3RTcGFuKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG9wID0gc3BhblRvSlNPTihyb290U3Bhbikub3A7XG5cbiAgLy8gT25seSB1c2UgdGhpcyByb290IHNwYW4gaWYgaXQgaXMgYSBwYWdlbG9hZCBvciBuYXZpZ2F0aW9uIHNwYW5cbiAgcmV0dXJuIG9wID09PSAnbmF2aWdhdGlvbicgfHwgb3AgPT09ICdwYWdlbG9hZCcgPyByb290U3BhbiA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IHsgcmVhY3RSb3V0ZXJWNEJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24sIHJlYWN0Um91dGVyVjVCcm93c2VyVHJhY2luZ0ludGVncmF0aW9uLCB3aXRoU2VudHJ5Um91dGluZyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3Ryb3V0ZXIuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouter.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouterv3.js":
/*!********************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouterv3.js ***!
  \********************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   reactRouterV3BrowserTracingIntegration: () => (/* binding */ reactRouterV3BrowserTracingIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/browser */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/index.js\");\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\n\n// Many of the types below had to be mocked out to prevent typescript issues\n// these types are required for correct functionality.\n\n/**\n * A browser tracing integration that uses React Router v3 to instrument navigations.\n * Expects `history` (and optionally `routes` and `matchPath`) to be passed as options.\n */\nfunction reactRouterV3BrowserTracingIntegration(\n  options,\n) {\n  const integration = (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.browserTracingIntegration)({\n    ...options,\n    instrumentPageLoad: false,\n    instrumentNavigation: false,\n  });\n\n  const { history, routes, match, instrumentPageLoad = true, instrumentNavigation = true } = options;\n\n  return {\n    ...integration,\n    afterAllSetup(client) {\n      integration.afterAllSetup(client);\n\n      if (instrumentPageLoad && _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.WINDOW.location) {\n        normalizeTransactionName(\n          routes,\n          _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.WINDOW.location ,\n          match,\n          (localName, source = 'url') => {\n            (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startBrowserTracingPageLoadSpan)(client, {\n              name: localName,\n              attributes: {\n                [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload',\n                [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.react.reactrouter_v3',\n                [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n              },\n            });\n          },\n        );\n      }\n\n      if (instrumentNavigation && history.listen) {\n        history.listen(location => {\n          if (location.action === 'PUSH' || location.action === 'POP') {\n            normalizeTransactionName(\n              routes,\n              location,\n              match,\n              (localName, source = 'url') => {\n                (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startBrowserTracingNavigationSpan)(client, {\n                  name: localName,\n                  attributes: {\n                    [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation',\n                    [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.reactrouter_v3',\n                    [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n                  },\n                });\n              },\n            );\n          }\n        });\n      }\n    },\n  };\n}\n\n/**\n * Normalize transaction names using `Router.match`\n */\nfunction normalizeTransactionName(\n  appRoutes,\n  location,\n  match,\n  callback,\n) {\n  let name = location.pathname;\n  match(\n    {\n      location,\n      routes: appRoutes,\n    },\n    (error, _redirectLocation, renderProps) => {\n      if (error || !renderProps) {\n        return callback(name);\n      }\n\n      const routePath = getRouteStringFromRoutes(renderProps.routes || []);\n      if (routePath.length === 0 || routePath === '/*') {\n        return callback(name);\n      }\n\n      name = routePath;\n      return callback(name, 'route');\n    },\n  );\n}\n\n/**\n * Generate route name from array of routes\n */\nfunction getRouteStringFromRoutes(routes) {\n  if (!Array.isArray(routes) || routes.length === 0) {\n    return '';\n  }\n\n  const routesWithPaths = routes.filter((route) => !!route.path);\n\n  let index = -1;\n  for (let x = routesWithPaths.length - 1; x >= 0; x--) {\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const route = routesWithPaths[x];\n    if (route.path?.startsWith('/')) {\n      index = x;\n      break;\n    }\n  }\n\n  return routesWithPaths.slice(index).reduce((acc, { path }) => {\n    const pathSegment = acc === '/' || acc === '' ? path : `/${path}`;\n    return `${acc}${pathSegment}`;\n  }, '');\n}\n\n\n//# sourceMappingURL=reactrouterv3.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL3JlYWN0cm91dGVydjMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXdJO0FBQ1I7O0FBRWhJO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsMEVBQXlCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsVUFBVSxpRkFBaUY7O0FBRTNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdDQUFnQyxtREFBTTtBQUN0QztBQUNBO0FBQ0EsVUFBVSxtREFBTTtBQUNoQjtBQUNBO0FBQ0EsWUFBWSxnRkFBK0I7QUFDM0M7QUFDQTtBQUNBLGlCQUFpQixzRUFBNEI7QUFDN0MsaUJBQWlCLDBFQUFnQztBQUNqRCxpQkFBaUIsMEVBQWdDO0FBQ2pELGVBQWU7QUFDZixhQUFhO0FBQ2IsV0FBVztBQUNYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixrRkFBaUM7QUFDakQ7QUFDQTtBQUNBLHFCQUFxQixzRUFBNEI7QUFDakQscUJBQXFCLDBFQUFnQztBQUNyRCxxQkFBcUIsMEVBQWdDO0FBQ3JELG1CQUFtQjtBQUNuQixpQkFBaUI7QUFDakIsZUFBZTtBQUNmO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLDJDQUEyQyxRQUFRO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFEQUFxRCxNQUFNO0FBQzNELCtEQUErRCxLQUFLO0FBQ3BFLGNBQWMsSUFBSSxFQUFFLFlBQVk7QUFDaEMsR0FBRztBQUNIOztBQUVrRDtBQUNsRCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL3JlYWN0cm91dGVydjMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbiwgV0lORE9XLCBzdGFydEJyb3dzZXJUcmFjaW5nUGFnZUxvYWRTcGFuLCBzdGFydEJyb3dzZXJUcmFjaW5nTmF2aWdhdGlvblNwYW4gfSBmcm9tICdAc2VudHJ5L2Jyb3dzZXInO1xuaW1wb3J0IHsgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0UsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcblxuLy8gTWFueSBvZiB0aGUgdHlwZXMgYmVsb3cgaGFkIHRvIGJlIG1vY2tlZCBvdXQgdG8gcHJldmVudCB0eXBlc2NyaXB0IGlzc3Vlc1xuLy8gdGhlc2UgdHlwZXMgYXJlIHJlcXVpcmVkIGZvciBjb3JyZWN0IGZ1bmN0aW9uYWxpdHkuXG5cbi8qKlxuICogQSBicm93c2VyIHRyYWNpbmcgaW50ZWdyYXRpb24gdGhhdCB1c2VzIFJlYWN0IFJvdXRlciB2MyB0byBpbnN0cnVtZW50IG5hdmlnYXRpb25zLlxuICogRXhwZWN0cyBgaGlzdG9yeWAgKGFuZCBvcHRpb25hbGx5IGByb3V0ZXNgIGFuZCBgbWF0Y2hQYXRoYCkgdG8gYmUgcGFzc2VkIGFzIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIHJlYWN0Um91dGVyVjNCcm93c2VyVHJhY2luZ0ludGVncmF0aW9uKFxuICBvcHRpb25zLFxuKSB7XG4gIGNvbnN0IGludGVncmF0aW9uID0gYnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbih7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBpbnN0cnVtZW50UGFnZUxvYWQ6IGZhbHNlLFxuICAgIGluc3RydW1lbnROYXZpZ2F0aW9uOiBmYWxzZSxcbiAgfSk7XG5cbiAgY29uc3QgeyBoaXN0b3J5LCByb3V0ZXMsIG1hdGNoLCBpbnN0cnVtZW50UGFnZUxvYWQgPSB0cnVlLCBpbnN0cnVtZW50TmF2aWdhdGlvbiA9IHRydWUgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5pbnRlZ3JhdGlvbixcbiAgICBhZnRlckFsbFNldHVwKGNsaWVudCkge1xuICAgICAgaW50ZWdyYXRpb24uYWZ0ZXJBbGxTZXR1cChjbGllbnQpO1xuXG4gICAgICBpZiAoaW5zdHJ1bWVudFBhZ2VMb2FkICYmIFdJTkRPVy5sb2NhdGlvbikge1xuICAgICAgICBub3JtYWxpemVUcmFuc2FjdGlvbk5hbWUoXG4gICAgICAgICAgcm91dGVzLFxuICAgICAgICAgIFdJTkRPVy5sb2NhdGlvbiAsXG4gICAgICAgICAgbWF0Y2gsXG4gICAgICAgICAgKGxvY2FsTmFtZSwgc291cmNlID0gJ3VybCcpID0+IHtcbiAgICAgICAgICAgIHN0YXJ0QnJvd3NlclRyYWNpbmdQYWdlTG9hZFNwYW4oY2xpZW50LCB7XG4gICAgICAgICAgICAgIG5hbWU6IGxvY2FsTmFtZSxcbiAgICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QXTogJ3BhZ2Vsb2FkJyxcbiAgICAgICAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiAnYXV0by5wYWdlbG9hZC5yZWFjdC5yZWFjdHJvdXRlcl92MycsXG4gICAgICAgICAgICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFXTogc291cmNlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluc3RydW1lbnROYXZpZ2F0aW9uICYmIGhpc3RvcnkubGlzdGVuKSB7XG4gICAgICAgIGhpc3RvcnkubGlzdGVuKGxvY2F0aW9uID0+IHtcbiAgICAgICAgICBpZiAobG9jYXRpb24uYWN0aW9uID09PSAnUFVTSCcgfHwgbG9jYXRpb24uYWN0aW9uID09PSAnUE9QJykge1xuICAgICAgICAgICAgbm9ybWFsaXplVHJhbnNhY3Rpb25OYW1lKFxuICAgICAgICAgICAgICByb3V0ZXMsXG4gICAgICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgICAgKGxvY2FsTmFtZSwgc291cmNlID0gJ3VybCcpID0+IHtcbiAgICAgICAgICAgICAgICBzdGFydEJyb3dzZXJUcmFjaW5nTmF2aWdhdGlvblNwYW4oY2xpZW50LCB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBsb2NhbE5hbWUsXG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QXTogJ25hdmlnYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiAnYXV0by5uYXZpZ2F0aW9uLnJlYWN0LnJlYWN0cm91dGVyX3YzJyxcbiAgICAgICAgICAgICAgICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFXTogc291cmNlLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSB0cmFuc2FjdGlvbiBuYW1lcyB1c2luZyBgUm91dGVyLm1hdGNoYFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVUcmFuc2FjdGlvbk5hbWUoXG4gIGFwcFJvdXRlcyxcbiAgbG9jYXRpb24sXG4gIG1hdGNoLFxuICBjYWxsYmFjayxcbikge1xuICBsZXQgbmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xuICBtYXRjaChcbiAgICB7XG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJvdXRlczogYXBwUm91dGVzLFxuICAgIH0sXG4gICAgKGVycm9yLCBfcmVkaXJlY3RMb2NhdGlvbiwgcmVuZGVyUHJvcHMpID0+IHtcbiAgICAgIGlmIChlcnJvciB8fCAhcmVuZGVyUHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5hbWUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByb3V0ZVBhdGggPSBnZXRSb3V0ZVN0cmluZ0Zyb21Sb3V0ZXMocmVuZGVyUHJvcHMucm91dGVzIHx8IFtdKTtcbiAgICAgIGlmIChyb3V0ZVBhdGgubGVuZ3RoID09PSAwIHx8IHJvdXRlUGF0aCA9PT0gJy8qJykge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobmFtZSk7XG4gICAgICB9XG5cbiAgICAgIG5hbWUgPSByb3V0ZVBhdGg7XG4gICAgICByZXR1cm4gY2FsbGJhY2sobmFtZSwgJ3JvdXRlJyk7XG4gICAgfSxcbiAgKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSByb3V0ZSBuYW1lIGZyb20gYXJyYXkgb2Ygcm91dGVzXG4gKi9cbmZ1bmN0aW9uIGdldFJvdXRlU3RyaW5nRnJvbVJvdXRlcyhyb3V0ZXMpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJvdXRlcykgfHwgcm91dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IHJvdXRlc1dpdGhQYXRocyA9IHJvdXRlcy5maWx0ZXIoKHJvdXRlKSA9PiAhIXJvdXRlLnBhdGgpO1xuXG4gIGxldCBpbmRleCA9IC0xO1xuICBmb3IgKGxldCB4ID0gcm91dGVzV2l0aFBhdGhzLmxlbmd0aCAtIDE7IHggPj0gMDsgeC0tKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICBjb25zdCByb3V0ZSA9IHJvdXRlc1dpdGhQYXRoc1t4XTtcbiAgICBpZiAocm91dGUucGF0aD8uc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBpbmRleCA9IHg7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcm91dGVzV2l0aFBhdGhzLnNsaWNlKGluZGV4KS5yZWR1Y2UoKGFjYywgeyBwYXRoIH0pID0+IHtcbiAgICBjb25zdCBwYXRoU2VnbWVudCA9IGFjYyA9PT0gJy8nIHx8IGFjYyA9PT0gJycgPyBwYXRoIDogYC8ke3BhdGh9YDtcbiAgICByZXR1cm4gYCR7YWNjfSR7cGF0aFNlZ21lbnR9YDtcbiAgfSwgJycpO1xufVxuXG5leHBvcnQgeyByZWFjdFJvdXRlclYzQnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3Ryb3V0ZXJ2My5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouterv3.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouterv6-compat-utils.js":
/*!*********************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouterv6-compat-utils.js ***!
  \*********************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   createReactRouterV6CompatibleTracingIntegration: () => (/* binding */ createReactRouterV6CompatibleTracingIntegration),\n/* harmony export */   createV6CompatibleWithSentryReactRouterRouting: () => (/* binding */ createV6CompatibleWithSentryReactRouterRouting),\n/* harmony export */   createV6CompatibleWrapCreateBrowserRouter: () => (/* binding */ createV6CompatibleWrapCreateBrowserRouter),\n/* harmony export */   createV6CompatibleWrapCreateMemoryRouter: () => (/* binding */ createV6CompatibleWrapCreateMemoryRouter),\n/* harmony export */   createV6CompatibleWrapUseRoutes: () => (/* binding */ createV6CompatibleWrapUseRoutes),\n/* harmony export */   getNumberOfUrlSegments: () => (/* binding */ getNumberOfUrlSegments),\n/* harmony export */   handleNavigation: () => (/* binding */ handleNavigation)\n/* harmony export */ });\n/* harmony import */ var _sentry_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/browser */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/index.js\");\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/debug-build.js\");\n/* harmony import */ var _hoist_non_react_statics_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hoist-non-react-statics.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/hoist-non-react-statics.js\");\n\n\n\n\n\n\n/* eslint-disable max-lines */\n// Inspired from Donnie McNeal's solution:\n// https://gist.github.com/wontondon/e8c4bdf2888875e4c755712e99279536\n\n\nlet _useEffect;\nlet _useLocation;\nlet _useNavigationType;\nlet _createRoutesFromChildren;\nlet _matchRoutes;\nlet _stripBasename = false;\n\nconst CLIENTS_WITH_INSTRUMENT_NAVIGATION = new WeakSet();\n\n// Keeping as a global variable for cross-usage in multiple functions\nconst allRoutes = new Set();\n\n/**\n * Creates a wrapCreateBrowserRouter function that can be used with all React Router v6 compatible versions.\n */\nfunction createV6CompatibleWrapCreateBrowserRouter\n\n(\n  createRouterFunction,\n  version,\n) {\n  if (!_useEffect || !_useLocation || !_useNavigationType || !_matchRoutes) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD &&\n      _sentry_core__WEBPACK_IMPORTED_MODULE_1__.debug.warn(\n        `reactRouterV${version}Instrumentation was unable to wrap the \\`createRouter\\` function because of one or more missing parameters.`,\n      );\n\n    return createRouterFunction;\n  }\n\n  return function (routes, opts) {\n    addRoutesToAllRoutes(routes);\n\n    const router = createRouterFunction(routes, opts);\n    const basename = opts?.basename;\n\n    const activeRootSpan = getActiveRootSpan();\n\n    // The initial load ends when `createBrowserRouter` is called.\n    // This is the earliest convenient time to update the transaction name.\n    // Callbacks to `router.subscribe` are not called for the initial load.\n    if (router.state.historyAction === 'POP' && activeRootSpan) {\n      updatePageloadTransaction(\n        activeRootSpan,\n        router.state.location,\n        routes,\n        undefined,\n        basename,\n        Array.from(allRoutes),\n      );\n    }\n\n    router.subscribe((state) => {\n      if (state.historyAction === 'PUSH' || state.historyAction === 'POP') {\n        // Wait for the next render if loading an unsettled route\n        if (state.navigation.state !== 'idle') {\n          requestAnimationFrame(() => {\n            handleNavigation({\n              location: state.location,\n              routes,\n              navigationType: state.historyAction,\n              version,\n              basename,\n              allRoutes: Array.from(allRoutes),\n            });\n          });\n        } else {\n          handleNavigation({\n            location: state.location,\n            routes,\n            navigationType: state.historyAction,\n            version,\n            basename,\n            allRoutes: Array.from(allRoutes),\n          });\n        }\n      }\n    });\n\n    return router;\n  };\n}\n\n/**\n * Creates a wrapCreateMemoryRouter function that can be used with all React Router v6 compatible versions.\n */\nfunction createV6CompatibleWrapCreateMemoryRouter\n\n(\n  createRouterFunction,\n  version,\n) {\n  if (!_useEffect || !_useLocation || !_useNavigationType || !_matchRoutes) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD &&\n      _sentry_core__WEBPACK_IMPORTED_MODULE_1__.debug.warn(\n        `reactRouterV${version}Instrumentation was unable to wrap the \\`createMemoryRouter\\` function because of one or more missing parameters.`,\n      );\n\n    return createRouterFunction;\n  }\n\n  return function (\n    routes,\n    opts\n\n,\n  ) {\n    addRoutesToAllRoutes(routes);\n\n    const router = createRouterFunction(routes, opts);\n    const basename = opts?.basename;\n\n    const activeRootSpan = getActiveRootSpan();\n    let initialEntry = undefined;\n\n    const initialEntries = opts?.initialEntries;\n    const initialIndex = opts?.initialIndex;\n\n    const hasOnlyOneInitialEntry = initialEntries && initialEntries.length === 1;\n    const hasIndexedEntry = initialIndex !== undefined && initialEntries && initialEntries[initialIndex];\n\n    initialEntry = hasOnlyOneInitialEntry\n      ? initialEntries[0]\n      : hasIndexedEntry\n        ? initialEntries[initialIndex]\n        : undefined;\n\n    const location = initialEntry\n      ? typeof initialEntry === 'string'\n        ? { pathname: initialEntry }\n        : initialEntry\n      : router.state.location;\n\n    if (router.state.historyAction === 'POP' && activeRootSpan) {\n      updatePageloadTransaction(activeRootSpan, location, routes, undefined, basename, Array.from(allRoutes));\n    }\n\n    router.subscribe((state) => {\n      const location = state.location;\n      if (state.historyAction === 'PUSH' || state.historyAction === 'POP') {\n        handleNavigation({\n          location,\n          routes,\n          navigationType: state.historyAction,\n          version,\n          basename,\n          allRoutes: Array.from(allRoutes),\n        });\n      }\n    });\n\n    return router;\n  };\n}\n\n/**\n * Creates a browser tracing integration that can be used with all React Router v6 compatible versions.\n */\nfunction createReactRouterV6CompatibleTracingIntegration(\n  options,\n  version,\n) {\n  const integration = (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.browserTracingIntegration)({\n    ...options,\n    instrumentPageLoad: false,\n    instrumentNavigation: false,\n  });\n\n  const {\n    useEffect,\n    useLocation,\n    useNavigationType,\n    createRoutesFromChildren,\n    matchRoutes,\n    stripBasename,\n    instrumentPageLoad = true,\n    instrumentNavigation = true,\n  } = options;\n\n  return {\n    ...integration,\n    setup(client) {\n      integration.setup(client);\n\n      _useEffect = useEffect;\n      _useLocation = useLocation;\n      _useNavigationType = useNavigationType;\n      _matchRoutes = matchRoutes;\n      _createRoutesFromChildren = createRoutesFromChildren;\n      _stripBasename = stripBasename || false;\n    },\n    afterAllSetup(client) {\n      integration.afterAllSetup(client);\n\n      const initPathName = _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.WINDOW.location?.pathname;\n      if (instrumentPageLoad && initPathName) {\n        (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startBrowserTracingPageLoadSpan)(client, {\n          name: initPathName,\n          attributes: {\n            [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'url',\n            [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload',\n            [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: `auto.pageload.react.reactrouter_v${version}`,\n          },\n        });\n      }\n\n      if (instrumentNavigation) {\n        CLIENTS_WITH_INSTRUMENT_NAVIGATION.add(client);\n      }\n    },\n  };\n}\n\nfunction createV6CompatibleWrapUseRoutes(origUseRoutes, version) {\n  if (!_useEffect || !_useLocation || !_useNavigationType || !_matchRoutes) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD &&\n      _sentry_core__WEBPACK_IMPORTED_MODULE_1__.debug.warn(\n        'reactRouterV6Instrumentation was unable to wrap `useRoutes` because of one or more missing parameters.',\n      );\n\n    return origUseRoutes;\n  }\n\n  const SentryRoutes\n\n = (props) => {\n    const isMountRenderPass = react__WEBPACK_IMPORTED_MODULE_2__.useRef(true);\n    const { routes, locationArg } = props;\n\n    const Routes = origUseRoutes(routes, locationArg);\n\n    const location = _useLocation();\n    const navigationType = _useNavigationType();\n\n    // A value with stable identity to either pick `locationArg` if available or `location` if not\n    const stableLocationParam =\n      typeof locationArg === 'string' || locationArg?.pathname ? (locationArg ) : location;\n\n    _useEffect(() => {\n      const normalizedLocation =\n        typeof stableLocationParam === 'string' ? { pathname: stableLocationParam } : stableLocationParam;\n\n      if (isMountRenderPass.current) {\n        addRoutesToAllRoutes(routes);\n\n        updatePageloadTransaction(\n          getActiveRootSpan(),\n          normalizedLocation,\n          routes,\n          undefined,\n          undefined,\n          Array.from(allRoutes),\n        );\n        isMountRenderPass.current = false;\n      } else {\n        handleNavigation({\n          location: normalizedLocation,\n          routes,\n          navigationType,\n          version,\n          allRoutes: Array.from(allRoutes),\n        });\n      }\n    }, [navigationType, stableLocationParam]);\n\n    return Routes;\n  };\n\n  // eslint-disable-next-line react/display-name\n  return (routes, locationArg) => {\n    return react__WEBPACK_IMPORTED_MODULE_2__.createElement(SentryRoutes, { routes: routes, locationArg: locationArg,} );\n  };\n}\n\nfunction handleNavigation(opts\n\n) {\n  const { location, routes, navigationType, version, matches, basename, allRoutes } = opts;\n  const branches = Array.isArray(matches) ? matches : _matchRoutes(routes, location, basename);\n\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.getClient)();\n  if (!client || !CLIENTS_WITH_INSTRUMENT_NAVIGATION.has(client)) {\n    return;\n  }\n\n  if ((navigationType === 'PUSH' || navigationType === 'POP') && branches) {\n    let name,\n      source = 'url';\n    const isInDescendantRoute = locationIsInsideDescendantRoute(location, allRoutes || routes);\n\n    if (isInDescendantRoute) {\n      name = prefixWithSlash(rebuildRoutePathFromAllRoutes(allRoutes || routes, location));\n      source = 'route';\n    }\n\n    if (!isInDescendantRoute || !name) {\n      [name, source] = getNormalizedName(routes, location, branches, basename);\n    }\n\n    const activeSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.getActiveSpan)();\n    const isAlreadyInNavigationSpan = activeSpan && (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.spanToJSON)(activeSpan).op === 'navigation';\n\n    // Cross usage can result in multiple navigation spans being created without this check\n    if (isAlreadyInNavigationSpan) {\n      activeSpan?.updateName(name);\n      activeSpan?.setAttribute(_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, source);\n    } else {\n      (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startBrowserTracingNavigationSpan)(client, {\n        name,\n        attributes: {\n          [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: source,\n          [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation',\n          [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: `auto.navigation.react.reactrouter_v${version}`,\n        },\n      });\n    }\n  }\n}\n\n/**\n * Strip the basename from a pathname if exists.\n *\n * Vendored and modified from `react-router`\n * https://github.com/remix-run/react-router/blob/462bb712156a3f739d6139a0f14810b76b002df6/packages/router/utils.ts#L1038\n */\nfunction stripBasenameFromPathname(pathname, basename) {\n  if (!basename || basename === '/') {\n    return pathname;\n  }\n\n  if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n    return pathname;\n  }\n\n  // We want to leave trailing slash behavior in the user's control, so if they\n  // specify a basename with a trailing slash, we should support it\n  const startIndex = basename.endsWith('/') ? basename.length - 1 : basename.length;\n  const nextChar = pathname.charAt(startIndex);\n  if (nextChar && nextChar !== '/') {\n    // pathname does not start with basename/\n    return pathname;\n  }\n\n  return pathname.slice(startIndex) || '/';\n}\n\nfunction sendIndexPath(pathBuilder, pathname, basename) {\n  const reconstructedPath = pathBuilder || _stripBasename ? stripBasenameFromPathname(pathname, basename) : pathname;\n\n  const formattedPath =\n    // If the path ends with a slash, remove it\n    reconstructedPath[reconstructedPath.length - 1] === '/'\n      ? reconstructedPath.slice(0, -1)\n      : // If the path ends with a wildcard, remove it\n        reconstructedPath.slice(-2) === '/*'\n        ? reconstructedPath.slice(0, -1)\n        : reconstructedPath;\n\n  return [formattedPath, 'route'];\n}\n\nfunction pathEndsWithWildcard(path) {\n  return path.endsWith('*');\n}\n\nfunction pathIsWildcardAndHasChildren(path, branch) {\n  return (pathEndsWithWildcard(path) && !!branch.route.children?.length) || false;\n}\n\nfunction routeIsDescendant(route) {\n  return !!(!route.children && route.element && route.path?.endsWith('/*'));\n}\n\nfunction locationIsInsideDescendantRoute(location, routes) {\n  const matchedRoutes = _matchRoutes(routes, location) ;\n\n  if (matchedRoutes) {\n    for (const match of matchedRoutes) {\n      if (routeIsDescendant(match.route) && pickSplat(match)) {\n        return true;\n      }\n    }\n  }\n\n  return false;\n}\n\nfunction addRoutesToAllRoutes(routes) {\n  routes.forEach(route => {\n    const extractedChildRoutes = getChildRoutesRecursively(route);\n\n    extractedChildRoutes.forEach(r => {\n      allRoutes.add(r);\n    });\n  });\n}\n\nfunction getChildRoutesRecursively(route, allRoutes = new Set()) {\n  if (!allRoutes.has(route)) {\n    allRoutes.add(route);\n\n    if (route.children && !route.index) {\n      route.children.forEach(child => {\n        const childRoutes = getChildRoutesRecursively(child, allRoutes);\n\n        childRoutes.forEach(r => {\n          allRoutes.add(r);\n        });\n      });\n    }\n  }\n\n  return allRoutes;\n}\n\nfunction pickPath(match) {\n  return trimWildcard(match.route.path || '');\n}\n\nfunction pickSplat(match) {\n  return match.params['*'] || '';\n}\n\nfunction trimWildcard(path) {\n  return path[path.length - 1] === '*' ? path.slice(0, -1) : path;\n}\n\nfunction trimSlash(path) {\n  return path[path.length - 1] === '/' ? path.slice(0, -1) : path;\n}\n\nfunction prefixWithSlash(path) {\n  return path[0] === '/' ? path : `/${path}`;\n}\n\nfunction rebuildRoutePathFromAllRoutes(allRoutes, location) {\n  const matchedRoutes = _matchRoutes(allRoutes, location) ;\n\n  if (!matchedRoutes || matchedRoutes.length === 0) {\n    return '';\n  }\n\n  for (const match of matchedRoutes) {\n    if (match.route.path && match.route.path !== '*') {\n      const path = pickPath(match);\n      const strippedPath = stripBasenameFromPathname(location.pathname, prefixWithSlash(match.pathnameBase));\n\n      if (location.pathname === strippedPath) {\n        return trimSlash(strippedPath);\n      }\n\n      return trimSlash(\n        trimSlash(path || '') +\n          prefixWithSlash(\n            rebuildRoutePathFromAllRoutes(\n              allRoutes.filter(route => route !== match.route),\n              {\n                pathname: strippedPath,\n              },\n            ),\n          ),\n      );\n    }\n  }\n\n  return '';\n}\n\nfunction getNormalizedName(\n  routes,\n  location,\n  branches,\n  basename = '',\n) {\n  if (!routes || routes.length === 0) {\n    return [_stripBasename ? stripBasenameFromPathname(location.pathname, basename) : location.pathname, 'url'];\n  }\n\n  let pathBuilder = '';\n  if (branches) {\n    for (const branch of branches) {\n      const route = branch.route;\n      if (route) {\n        // Early return if index route\n        if (route.index) {\n          return sendIndexPath(pathBuilder, branch.pathname, basename);\n        }\n        const path = route.path;\n\n        // If path is not a wildcard and has no child routes, append the path\n        if (path && !pathIsWildcardAndHasChildren(path, branch)) {\n          const newPath = path[0] === '/' || pathBuilder[pathBuilder.length - 1] === '/' ? path : `/${path}`;\n          pathBuilder = trimSlash(pathBuilder) + prefixWithSlash(newPath);\n\n          // If the path matches the current location, return the path\n          if (trimSlash(location.pathname) === trimSlash(basename + branch.pathname)) {\n            if (\n              // If the route defined on the element is something like\n              // <Route path=\"/stores/:storeId/products/:productId\" element={<div>Product</div>} />\n              // We should check against the branch.pathname for the number of / separators\n              getNumberOfUrlSegments(pathBuilder) !== getNumberOfUrlSegments(branch.pathname) &&\n              // We should not count wildcard operators in the url segments calculation\n              !pathEndsWithWildcard(pathBuilder)\n            ) {\n              return [(_stripBasename ? '' : basename) + newPath, 'route'];\n            }\n\n            // if the last character of the pathbuilder is a wildcard and there are children, remove the wildcard\n            if (pathIsWildcardAndHasChildren(pathBuilder, branch)) {\n              pathBuilder = pathBuilder.slice(0, -1);\n            }\n\n            return [(_stripBasename ? '' : basename) + pathBuilder, 'route'];\n          }\n        }\n      }\n    }\n  }\n\n  const fallbackTransactionName = _stripBasename\n    ? stripBasenameFromPathname(location.pathname, basename)\n    : location.pathname || '/';\n\n  return [fallbackTransactionName, 'url'];\n}\n\nfunction updatePageloadTransaction(\n  activeRootSpan,\n  location,\n  routes,\n  matches,\n  basename,\n  allRoutes,\n) {\n  const branches = Array.isArray(matches)\n    ? matches\n    : (_matchRoutes(allRoutes || routes, location, basename) );\n\n  if (branches) {\n    let name,\n      source = 'url';\n\n    const isInDescendantRoute = locationIsInsideDescendantRoute(location, allRoutes || routes);\n\n    if (isInDescendantRoute) {\n      name = prefixWithSlash(rebuildRoutePathFromAllRoutes(allRoutes || routes, location));\n      source = 'route';\n    }\n\n    if (!isInDescendantRoute || !name) {\n      [name, source] = getNormalizedName(routes, location, branches, basename);\n    }\n\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.getCurrentScope)().setTransactionName(name || '/');\n\n    if (activeRootSpan) {\n      activeRootSpan.updateName(name);\n      activeRootSpan.setAttribute(_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, source);\n    }\n  }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction createV6CompatibleWithSentryReactRouterRouting(\n  Routes,\n  version,\n) {\n  if (!_useEffect || !_useLocation || !_useNavigationType || !_createRoutesFromChildren || !_matchRoutes) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_3__.DEBUG_BUILD &&\n      _sentry_core__WEBPACK_IMPORTED_MODULE_1__.debug.warn(`reactRouterV6Instrumentation was unable to wrap Routes because of one or more missing parameters.\n      useEffect: ${_useEffect}. useLocation: ${_useLocation}. useNavigationType: ${_useNavigationType}.\n      createRoutesFromChildren: ${_createRoutesFromChildren}. matchRoutes: ${_matchRoutes}.`);\n\n    return Routes;\n  }\n\n  const SentryRoutes = (props) => {\n    const isMountRenderPass = react__WEBPACK_IMPORTED_MODULE_2__.useRef(true);\n\n    const location = _useLocation();\n    const navigationType = _useNavigationType();\n\n    _useEffect(\n      () => {\n        const routes = _createRoutesFromChildren(props.children) ;\n\n        if (isMountRenderPass.current) {\n          addRoutesToAllRoutes(routes);\n\n          updatePageloadTransaction(getActiveRootSpan(), location, routes, undefined, undefined, Array.from(allRoutes));\n          isMountRenderPass.current = false;\n        } else {\n          handleNavigation({\n            location,\n            routes,\n            navigationType,\n            version,\n            allRoutes: Array.from(allRoutes),\n          });\n        }\n      },\n      // `props.children` is purposely not included in the dependency array, because we do not want to re-run this effect\n      // when the children change. We only want to start transactions when the location or navigation type change.\n      [location, navigationType],\n    );\n\n    // @ts-expect-error Setting more specific React Component typing for `R` generic above\n    // will break advanced type inference done by react router params\n    return react__WEBPACK_IMPORTED_MODULE_2__.createElement(Routes, { ...props,} );\n  };\n\n  (0,_hoist_non_react_statics_js__WEBPACK_IMPORTED_MODULE_4__.hoistNonReactStatics)(SentryRoutes, Routes);\n\n  // @ts-expect-error Setting more specific React Component typing for `R` generic above\n  // will break advanced type inference done by react router params\n  return SentryRoutes;\n}\n\nfunction getActiveRootSpan() {\n  const span = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.getActiveSpan)();\n  const rootSpan = span ? (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.getRootSpan)(span) : undefined;\n\n  if (!rootSpan) {\n    return undefined;\n  }\n\n  const op = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.spanToJSON)(rootSpan).op;\n\n  // Only use this root span if it is a pageload or navigation span\n  return op === 'navigation' || op === 'pageload' ? rootSpan : undefined;\n}\n\n/**\n * Returns number of URL segments of a passed string URL.\n */\nfunction getNumberOfUrlSegments(url) {\n  // split at '/' or at '\\/' to split regex urls correctly\n  return url.split(/\\\\?\\//).filter(s => s.length > 0 && s !== ',').length;\n}\n\n\n//# sourceMappingURL=reactrouterv6-compat-utils.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL3JlYWN0cm91dGVydjYtY29tcGF0LXV0aWxzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUF3STtBQUNtRTtBQUM1SztBQUNnQjtBQUNxQjs7QUFFcEU7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSx3REFBVztBQUNmLE1BQU0sK0NBQUs7QUFDWCx1QkFBdUIsUUFBUTtBQUMvQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsV0FBVztBQUNYLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksd0RBQVc7QUFDZixNQUFNLCtDQUFLO0FBQ1gsdUJBQXVCLFFBQVE7QUFDL0I7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsMEVBQXlCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSwyQkFBMkIsbURBQU07QUFDakM7QUFDQSxRQUFRLGdGQUErQjtBQUN2QztBQUNBO0FBQ0EsYUFBYSwwRUFBZ0M7QUFDN0MsYUFBYSxzRUFBNEI7QUFDekMsYUFBYSwwRUFBZ0MsdUNBQXVDLFFBQVE7QUFDNUYsV0FBVztBQUNYLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSx3REFBVztBQUNmLE1BQU0sK0NBQUs7QUFDWDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSw4QkFBOEIseUNBQVk7QUFDMUMsWUFBWSxzQkFBc0I7O0FBRWxDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvREFBb0QsZ0NBQWdDOztBQUVwRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVcsZ0RBQW1CLGlCQUFpQiwyQ0FBMkM7QUFDMUY7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFVBQVUsMEVBQTBFO0FBQ3BGOztBQUVBLGlCQUFpQix1REFBUztBQUMxQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1QiwyREFBYTtBQUNwQyxvREFBb0Qsd0RBQVU7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBLCtCQUErQiwwRUFBZ0M7QUFDL0QsTUFBTTtBQUNOLE1BQU0sa0ZBQWlDO0FBQ3ZDO0FBQ0E7QUFDQSxXQUFXLDBFQUFnQztBQUMzQyxXQUFXLHNFQUE0QjtBQUN2QyxXQUFXLDBFQUFnQyx5Q0FBeUMsUUFBUTtBQUM1RixTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXNDLEtBQUs7QUFDM0M7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNHQUFzRyxLQUFLO0FBQzNHOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkVBQTZFLG9CQUFvQjtBQUNqRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLElBQUksNkRBQWU7O0FBRW5CO0FBQ0E7QUFDQSxrQ0FBa0MsMEVBQWdDO0FBQ2xFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHdEQUFXO0FBQ2YsTUFBTSwrQ0FBSztBQUNYLG1CQUFtQixXQUFXLGlCQUFpQixhQUFhLHVCQUF1QixtQkFBbUI7QUFDdEcsa0NBQWtDLDBCQUEwQixpQkFBaUIsYUFBYTs7QUFFMUY7QUFDQTs7QUFFQTtBQUNBLDhCQUE4Qix5Q0FBWTs7QUFFMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVyxnREFBbUIsV0FBVyxXQUFXO0FBQ3BEOztBQUVBLEVBQUUsaUZBQW9COztBQUV0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsMkRBQWE7QUFDNUIsMEJBQTBCLHlEQUFXOztBQUVyQztBQUNBO0FBQ0E7O0FBRUEsYUFBYSx3REFBVTs7QUFFdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUUyUTtBQUMzUSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL3JlYWN0cm91dGVydjYtY29tcGF0LXV0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24sIFdJTkRPVywgc3RhcnRCcm93c2VyVHJhY2luZ1BhZ2VMb2FkU3Bhbiwgc3RhcnRCcm93c2VyVHJhY2luZ05hdmlnYXRpb25TcGFuIH0gZnJvbSAnQHNlbnRyeS9icm93c2VyJztcbmltcG9ydCB7IFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRSwgZGVidWcsIGdldEFjdGl2ZVNwYW4sIGdldFJvb3RTcGFuLCBzcGFuVG9KU09OLCBnZXRDdXJyZW50U2NvcGUsIGdldENsaWVudCB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBERUJVR19CVUlMRCB9IGZyb20gJy4vZGVidWctYnVpbGQuanMnO1xuaW1wb3J0IHsgaG9pc3ROb25SZWFjdFN0YXRpY3MgfSBmcm9tICcuL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmpzJztcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxpbmVzICovXG4vLyBJbnNwaXJlZCBmcm9tIERvbm5pZSBNY05lYWwncyBzb2x1dGlvbjpcbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3dvbnRvbmRvbi9lOGM0YmRmMjg4ODg3NWU0Yzc1NTcxMmU5OTI3OTUzNlxuXG5cbmxldCBfdXNlRWZmZWN0O1xubGV0IF91c2VMb2NhdGlvbjtcbmxldCBfdXNlTmF2aWdhdGlvblR5cGU7XG5sZXQgX2NyZWF0ZVJvdXRlc0Zyb21DaGlsZHJlbjtcbmxldCBfbWF0Y2hSb3V0ZXM7XG5sZXQgX3N0cmlwQmFzZW5hbWUgPSBmYWxzZTtcblxuY29uc3QgQ0xJRU5UU19XSVRIX0lOU1RSVU1FTlRfTkFWSUdBVElPTiA9IG5ldyBXZWFrU2V0KCk7XG5cbi8vIEtlZXBpbmcgYXMgYSBnbG9iYWwgdmFyaWFibGUgZm9yIGNyb3NzLXVzYWdlIGluIG11bHRpcGxlIGZ1bmN0aW9uc1xuY29uc3QgYWxsUm91dGVzID0gbmV3IFNldCgpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSB3cmFwQ3JlYXRlQnJvd3NlclJvdXRlciBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHdpdGggYWxsIFJlYWN0IFJvdXRlciB2NiBjb21wYXRpYmxlIHZlcnNpb25zLlxuICovXG5mdW5jdGlvbiBjcmVhdGVWNkNvbXBhdGlibGVXcmFwQ3JlYXRlQnJvd3NlclJvdXRlclxuXG4oXG4gIGNyZWF0ZVJvdXRlckZ1bmN0aW9uLFxuICB2ZXJzaW9uLFxuKSB7XG4gIGlmICghX3VzZUVmZmVjdCB8fCAhX3VzZUxvY2F0aW9uIHx8ICFfdXNlTmF2aWdhdGlvblR5cGUgfHwgIV9tYXRjaFJvdXRlcykge1xuICAgIERFQlVHX0JVSUxEICYmXG4gICAgICBkZWJ1Zy53YXJuKFxuICAgICAgICBgcmVhY3RSb3V0ZXJWJHt2ZXJzaW9ufUluc3RydW1lbnRhdGlvbiB3YXMgdW5hYmxlIHRvIHdyYXAgdGhlIFxcYGNyZWF0ZVJvdXRlclxcYCBmdW5jdGlvbiBiZWNhdXNlIG9mIG9uZSBvciBtb3JlIG1pc3NpbmcgcGFyYW1ldGVycy5gLFxuICAgICAgKTtcblxuICAgIHJldHVybiBjcmVhdGVSb3V0ZXJGdW5jdGlvbjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAocm91dGVzLCBvcHRzKSB7XG4gICAgYWRkUm91dGVzVG9BbGxSb3V0ZXMocm91dGVzKTtcblxuICAgIGNvbnN0IHJvdXRlciA9IGNyZWF0ZVJvdXRlckZ1bmN0aW9uKHJvdXRlcywgb3B0cyk7XG4gICAgY29uc3QgYmFzZW5hbWUgPSBvcHRzPy5iYXNlbmFtZTtcblxuICAgIGNvbnN0IGFjdGl2ZVJvb3RTcGFuID0gZ2V0QWN0aXZlUm9vdFNwYW4oKTtcblxuICAgIC8vIFRoZSBpbml0aWFsIGxvYWQgZW5kcyB3aGVuIGBjcmVhdGVCcm93c2VyUm91dGVyYCBpcyBjYWxsZWQuXG4gICAgLy8gVGhpcyBpcyB0aGUgZWFybGllc3QgY29udmVuaWVudCB0aW1lIHRvIHVwZGF0ZSB0aGUgdHJhbnNhY3Rpb24gbmFtZS5cbiAgICAvLyBDYWxsYmFja3MgdG8gYHJvdXRlci5zdWJzY3JpYmVgIGFyZSBub3QgY2FsbGVkIGZvciB0aGUgaW5pdGlhbCBsb2FkLlxuICAgIGlmIChyb3V0ZXIuc3RhdGUuaGlzdG9yeUFjdGlvbiA9PT0gJ1BPUCcgJiYgYWN0aXZlUm9vdFNwYW4pIHtcbiAgICAgIHVwZGF0ZVBhZ2Vsb2FkVHJhbnNhY3Rpb24oXG4gICAgICAgIGFjdGl2ZVJvb3RTcGFuLFxuICAgICAgICByb3V0ZXIuc3RhdGUubG9jYXRpb24sXG4gICAgICAgIHJvdXRlcyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBiYXNlbmFtZSxcbiAgICAgICAgQXJyYXkuZnJvbShhbGxSb3V0ZXMpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByb3V0ZXIuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgaWYgKHN0YXRlLmhpc3RvcnlBY3Rpb24gPT09ICdQVVNIJyB8fCBzdGF0ZS5oaXN0b3J5QWN0aW9uID09PSAnUE9QJykge1xuICAgICAgICAvLyBXYWl0IGZvciB0aGUgbmV4dCByZW5kZXIgaWYgbG9hZGluZyBhbiB1bnNldHRsZWQgcm91dGVcbiAgICAgICAgaWYgKHN0YXRlLm5hdmlnYXRpb24uc3RhdGUgIT09ICdpZGxlJykge1xuICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVOYXZpZ2F0aW9uKHtcbiAgICAgICAgICAgICAgbG9jYXRpb246IHN0YXRlLmxvY2F0aW9uLFxuICAgICAgICAgICAgICByb3V0ZXMsXG4gICAgICAgICAgICAgIG5hdmlnYXRpb25UeXBlOiBzdGF0ZS5oaXN0b3J5QWN0aW9uLFxuICAgICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgICBiYXNlbmFtZSxcbiAgICAgICAgICAgICAgYWxsUm91dGVzOiBBcnJheS5mcm9tKGFsbFJvdXRlcyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYW5kbGVOYXZpZ2F0aW9uKHtcbiAgICAgICAgICAgIGxvY2F0aW9uOiBzdGF0ZS5sb2NhdGlvbixcbiAgICAgICAgICAgIHJvdXRlcyxcbiAgICAgICAgICAgIG5hdmlnYXRpb25UeXBlOiBzdGF0ZS5oaXN0b3J5QWN0aW9uLFxuICAgICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgICAgIGJhc2VuYW1lLFxuICAgICAgICAgICAgYWxsUm91dGVzOiBBcnJheS5mcm9tKGFsbFJvdXRlcyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByb3V0ZXI7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHdyYXBDcmVhdGVNZW1vcnlSb3V0ZXIgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB3aXRoIGFsbCBSZWFjdCBSb3V0ZXIgdjYgY29tcGF0aWJsZSB2ZXJzaW9ucy5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVjZDb21wYXRpYmxlV3JhcENyZWF0ZU1lbW9yeVJvdXRlclxuXG4oXG4gIGNyZWF0ZVJvdXRlckZ1bmN0aW9uLFxuICB2ZXJzaW9uLFxuKSB7XG4gIGlmICghX3VzZUVmZmVjdCB8fCAhX3VzZUxvY2F0aW9uIHx8ICFfdXNlTmF2aWdhdGlvblR5cGUgfHwgIV9tYXRjaFJvdXRlcykge1xuICAgIERFQlVHX0JVSUxEICYmXG4gICAgICBkZWJ1Zy53YXJuKFxuICAgICAgICBgcmVhY3RSb3V0ZXJWJHt2ZXJzaW9ufUluc3RydW1lbnRhdGlvbiB3YXMgdW5hYmxlIHRvIHdyYXAgdGhlIFxcYGNyZWF0ZU1lbW9yeVJvdXRlclxcYCBmdW5jdGlvbiBiZWNhdXNlIG9mIG9uZSBvciBtb3JlIG1pc3NpbmcgcGFyYW1ldGVycy5gLFxuICAgICAgKTtcblxuICAgIHJldHVybiBjcmVhdGVSb3V0ZXJGdW5jdGlvbjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoXG4gICAgcm91dGVzLFxuICAgIG9wdHNcblxuLFxuICApIHtcbiAgICBhZGRSb3V0ZXNUb0FsbFJvdXRlcyhyb3V0ZXMpO1xuXG4gICAgY29uc3Qgcm91dGVyID0gY3JlYXRlUm91dGVyRnVuY3Rpb24ocm91dGVzLCBvcHRzKTtcbiAgICBjb25zdCBiYXNlbmFtZSA9IG9wdHM/LmJhc2VuYW1lO1xuXG4gICAgY29uc3QgYWN0aXZlUm9vdFNwYW4gPSBnZXRBY3RpdmVSb290U3BhbigpO1xuICAgIGxldCBpbml0aWFsRW50cnkgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBpbml0aWFsRW50cmllcyA9IG9wdHM/LmluaXRpYWxFbnRyaWVzO1xuICAgIGNvbnN0IGluaXRpYWxJbmRleCA9IG9wdHM/LmluaXRpYWxJbmRleDtcblxuICAgIGNvbnN0IGhhc09ubHlPbmVJbml0aWFsRW50cnkgPSBpbml0aWFsRW50cmllcyAmJiBpbml0aWFsRW50cmllcy5sZW5ndGggPT09IDE7XG4gICAgY29uc3QgaGFzSW5kZXhlZEVudHJ5ID0gaW5pdGlhbEluZGV4ICE9PSB1bmRlZmluZWQgJiYgaW5pdGlhbEVudHJpZXMgJiYgaW5pdGlhbEVudHJpZXNbaW5pdGlhbEluZGV4XTtcblxuICAgIGluaXRpYWxFbnRyeSA9IGhhc09ubHlPbmVJbml0aWFsRW50cnlcbiAgICAgID8gaW5pdGlhbEVudHJpZXNbMF1cbiAgICAgIDogaGFzSW5kZXhlZEVudHJ5XG4gICAgICAgID8gaW5pdGlhbEVudHJpZXNbaW5pdGlhbEluZGV4XVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGxvY2F0aW9uID0gaW5pdGlhbEVudHJ5XG4gICAgICA/IHR5cGVvZiBpbml0aWFsRW50cnkgPT09ICdzdHJpbmcnXG4gICAgICAgID8geyBwYXRobmFtZTogaW5pdGlhbEVudHJ5IH1cbiAgICAgICAgOiBpbml0aWFsRW50cnlcbiAgICAgIDogcm91dGVyLnN0YXRlLmxvY2F0aW9uO1xuXG4gICAgaWYgKHJvdXRlci5zdGF0ZS5oaXN0b3J5QWN0aW9uID09PSAnUE9QJyAmJiBhY3RpdmVSb290U3Bhbikge1xuICAgICAgdXBkYXRlUGFnZWxvYWRUcmFuc2FjdGlvbihhY3RpdmVSb290U3BhbiwgbG9jYXRpb24sIHJvdXRlcywgdW5kZWZpbmVkLCBiYXNlbmFtZSwgQXJyYXkuZnJvbShhbGxSb3V0ZXMpKTtcbiAgICB9XG5cbiAgICByb3V0ZXIuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgY29uc3QgbG9jYXRpb24gPSBzdGF0ZS5sb2NhdGlvbjtcbiAgICAgIGlmIChzdGF0ZS5oaXN0b3J5QWN0aW9uID09PSAnUFVTSCcgfHwgc3RhdGUuaGlzdG9yeUFjdGlvbiA9PT0gJ1BPUCcpIHtcbiAgICAgICAgaGFuZGxlTmF2aWdhdGlvbih7XG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgcm91dGVzLFxuICAgICAgICAgIG5hdmlnYXRpb25UeXBlOiBzdGF0ZS5oaXN0b3J5QWN0aW9uLFxuICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgYmFzZW5hbWUsXG4gICAgICAgICAgYWxsUm91dGVzOiBBcnJheS5mcm9tKGFsbFJvdXRlcyksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJvdXRlcjtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgYnJvd3NlciB0cmFjaW5nIGludGVncmF0aW9uIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBhbGwgUmVhY3QgUm91dGVyIHY2IGNvbXBhdGlibGUgdmVyc2lvbnMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJlYWN0Um91dGVyVjZDb21wYXRpYmxlVHJhY2luZ0ludGVncmF0aW9uKFxuICBvcHRpb25zLFxuICB2ZXJzaW9uLFxuKSB7XG4gIGNvbnN0IGludGVncmF0aW9uID0gYnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbih7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBpbnN0cnVtZW50UGFnZUxvYWQ6IGZhbHNlLFxuICAgIGluc3RydW1lbnROYXZpZ2F0aW9uOiBmYWxzZSxcbiAgfSk7XG5cbiAgY29uc3Qge1xuICAgIHVzZUVmZmVjdCxcbiAgICB1c2VMb2NhdGlvbixcbiAgICB1c2VOYXZpZ2F0aW9uVHlwZSxcbiAgICBjcmVhdGVSb3V0ZXNGcm9tQ2hpbGRyZW4sXG4gICAgbWF0Y2hSb3V0ZXMsXG4gICAgc3RyaXBCYXNlbmFtZSxcbiAgICBpbnN0cnVtZW50UGFnZUxvYWQgPSB0cnVlLFxuICAgIGluc3RydW1lbnROYXZpZ2F0aW9uID0gdHJ1ZSxcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5pbnRlZ3JhdGlvbixcbiAgICBzZXR1cChjbGllbnQpIHtcbiAgICAgIGludGVncmF0aW9uLnNldHVwKGNsaWVudCk7XG5cbiAgICAgIF91c2VFZmZlY3QgPSB1c2VFZmZlY3Q7XG4gICAgICBfdXNlTG9jYXRpb24gPSB1c2VMb2NhdGlvbjtcbiAgICAgIF91c2VOYXZpZ2F0aW9uVHlwZSA9IHVzZU5hdmlnYXRpb25UeXBlO1xuICAgICAgX21hdGNoUm91dGVzID0gbWF0Y2hSb3V0ZXM7XG4gICAgICBfY3JlYXRlUm91dGVzRnJvbUNoaWxkcmVuID0gY3JlYXRlUm91dGVzRnJvbUNoaWxkcmVuO1xuICAgICAgX3N0cmlwQmFzZW5hbWUgPSBzdHJpcEJhc2VuYW1lIHx8IGZhbHNlO1xuICAgIH0sXG4gICAgYWZ0ZXJBbGxTZXR1cChjbGllbnQpIHtcbiAgICAgIGludGVncmF0aW9uLmFmdGVyQWxsU2V0dXAoY2xpZW50KTtcblxuICAgICAgY29uc3QgaW5pdFBhdGhOYW1lID0gV0lORE9XLmxvY2F0aW9uPy5wYXRobmFtZTtcbiAgICAgIGlmIChpbnN0cnVtZW50UGFnZUxvYWQgJiYgaW5pdFBhdGhOYW1lKSB7XG4gICAgICAgIHN0YXJ0QnJvd3NlclRyYWNpbmdQYWdlTG9hZFNwYW4oY2xpZW50LCB7XG4gICAgICAgICAgbmFtZTogaW5pdFBhdGhOYW1lLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV06ICd1cmwnLFxuICAgICAgICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1BdOiAncGFnZWxvYWQnLFxuICAgICAgICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOXTogYGF1dG8ucGFnZWxvYWQucmVhY3QucmVhY3Ryb3V0ZXJfdiR7dmVyc2lvbn1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5zdHJ1bWVudE5hdmlnYXRpb24pIHtcbiAgICAgICAgQ0xJRU5UU19XSVRIX0lOU1RSVU1FTlRfTkFWSUdBVElPTi5hZGQoY2xpZW50KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVWNkNvbXBhdGlibGVXcmFwVXNlUm91dGVzKG9yaWdVc2VSb3V0ZXMsIHZlcnNpb24pIHtcbiAgaWYgKCFfdXNlRWZmZWN0IHx8ICFfdXNlTG9jYXRpb24gfHwgIV91c2VOYXZpZ2F0aW9uVHlwZSB8fCAhX21hdGNoUm91dGVzKSB7XG4gICAgREVCVUdfQlVJTEQgJiZcbiAgICAgIGRlYnVnLndhcm4oXG4gICAgICAgICdyZWFjdFJvdXRlclY2SW5zdHJ1bWVudGF0aW9uIHdhcyB1bmFibGUgdG8gd3JhcCBgdXNlUm91dGVzYCBiZWNhdXNlIG9mIG9uZSBvciBtb3JlIG1pc3NpbmcgcGFyYW1ldGVycy4nLFxuICAgICAgKTtcblxuICAgIHJldHVybiBvcmlnVXNlUm91dGVzO1xuICB9XG5cbiAgY29uc3QgU2VudHJ5Um91dGVzXG5cbiA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IGlzTW91bnRSZW5kZXJQYXNzID0gUmVhY3QudXNlUmVmKHRydWUpO1xuICAgIGNvbnN0IHsgcm91dGVzLCBsb2NhdGlvbkFyZyB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCBSb3V0ZXMgPSBvcmlnVXNlUm91dGVzKHJvdXRlcywgbG9jYXRpb25BcmcpO1xuXG4gICAgY29uc3QgbG9jYXRpb24gPSBfdXNlTG9jYXRpb24oKTtcbiAgICBjb25zdCBuYXZpZ2F0aW9uVHlwZSA9IF91c2VOYXZpZ2F0aW9uVHlwZSgpO1xuXG4gICAgLy8gQSB2YWx1ZSB3aXRoIHN0YWJsZSBpZGVudGl0eSB0byBlaXRoZXIgcGljayBgbG9jYXRpb25BcmdgIGlmIGF2YWlsYWJsZSBvciBgbG9jYXRpb25gIGlmIG5vdFxuICAgIGNvbnN0IHN0YWJsZUxvY2F0aW9uUGFyYW0gPVxuICAgICAgdHlwZW9mIGxvY2F0aW9uQXJnID09PSAnc3RyaW5nJyB8fCBsb2NhdGlvbkFyZz8ucGF0aG5hbWUgPyAobG9jYXRpb25BcmcgKSA6IGxvY2F0aW9uO1xuXG4gICAgX3VzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkTG9jYXRpb24gPVxuICAgICAgICB0eXBlb2Ygc3RhYmxlTG9jYXRpb25QYXJhbSA9PT0gJ3N0cmluZycgPyB7IHBhdGhuYW1lOiBzdGFibGVMb2NhdGlvblBhcmFtIH0gOiBzdGFibGVMb2NhdGlvblBhcmFtO1xuXG4gICAgICBpZiAoaXNNb3VudFJlbmRlclBhc3MuY3VycmVudCkge1xuICAgICAgICBhZGRSb3V0ZXNUb0FsbFJvdXRlcyhyb3V0ZXMpO1xuXG4gICAgICAgIHVwZGF0ZVBhZ2Vsb2FkVHJhbnNhY3Rpb24oXG4gICAgICAgICAgZ2V0QWN0aXZlUm9vdFNwYW4oKSxcbiAgICAgICAgICBub3JtYWxpemVkTG9jYXRpb24sXG4gICAgICAgICAgcm91dGVzLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgQXJyYXkuZnJvbShhbGxSb3V0ZXMpLFxuICAgICAgICApO1xuICAgICAgICBpc01vdW50UmVuZGVyUGFzcy5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVOYXZpZ2F0aW9uKHtcbiAgICAgICAgICBsb2NhdGlvbjogbm9ybWFsaXplZExvY2F0aW9uLFxuICAgICAgICAgIHJvdXRlcyxcbiAgICAgICAgICBuYXZpZ2F0aW9uVHlwZSxcbiAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgIGFsbFJvdXRlczogQXJyYXkuZnJvbShhbGxSb3V0ZXMpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCBbbmF2aWdhdGlvblR5cGUsIHN0YWJsZUxvY2F0aW9uUGFyYW1dKTtcblxuICAgIHJldHVybiBSb3V0ZXM7XG4gIH07XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Rpc3BsYXktbmFtZVxuICByZXR1cm4gKHJvdXRlcywgbG9jYXRpb25BcmcpID0+IHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTZW50cnlSb3V0ZXMsIHsgcm91dGVzOiByb3V0ZXMsIGxvY2F0aW9uQXJnOiBsb2NhdGlvbkFyZyx9ICk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhbmRsZU5hdmlnYXRpb24ob3B0c1xuXG4pIHtcbiAgY29uc3QgeyBsb2NhdGlvbiwgcm91dGVzLCBuYXZpZ2F0aW9uVHlwZSwgdmVyc2lvbiwgbWF0Y2hlcywgYmFzZW5hbWUsIGFsbFJvdXRlcyB9ID0gb3B0cztcbiAgY29uc3QgYnJhbmNoZXMgPSBBcnJheS5pc0FycmF5KG1hdGNoZXMpID8gbWF0Y2hlcyA6IF9tYXRjaFJvdXRlcyhyb3V0ZXMsIGxvY2F0aW9uLCBiYXNlbmFtZSk7XG5cbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7XG4gIGlmICghY2xpZW50IHx8ICFDTElFTlRTX1dJVEhfSU5TVFJVTUVOVF9OQVZJR0FUSU9OLmhhcyhjbGllbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKChuYXZpZ2F0aW9uVHlwZSA9PT0gJ1BVU0gnIHx8IG5hdmlnYXRpb25UeXBlID09PSAnUE9QJykgJiYgYnJhbmNoZXMpIHtcbiAgICBsZXQgbmFtZSxcbiAgICAgIHNvdXJjZSA9ICd1cmwnO1xuICAgIGNvbnN0IGlzSW5EZXNjZW5kYW50Um91dGUgPSBsb2NhdGlvbklzSW5zaWRlRGVzY2VuZGFudFJvdXRlKGxvY2F0aW9uLCBhbGxSb3V0ZXMgfHwgcm91dGVzKTtcblxuICAgIGlmIChpc0luRGVzY2VuZGFudFJvdXRlKSB7XG4gICAgICBuYW1lID0gcHJlZml4V2l0aFNsYXNoKHJlYnVpbGRSb3V0ZVBhdGhGcm9tQWxsUm91dGVzKGFsbFJvdXRlcyB8fCByb3V0ZXMsIGxvY2F0aW9uKSk7XG4gICAgICBzb3VyY2UgPSAncm91dGUnO1xuICAgIH1cblxuICAgIGlmICghaXNJbkRlc2NlbmRhbnRSb3V0ZSB8fCAhbmFtZSkge1xuICAgICAgW25hbWUsIHNvdXJjZV0gPSBnZXROb3JtYWxpemVkTmFtZShyb3V0ZXMsIGxvY2F0aW9uLCBicmFuY2hlcywgYmFzZW5hbWUpO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZVNwYW4gPSBnZXRBY3RpdmVTcGFuKCk7XG4gICAgY29uc3QgaXNBbHJlYWR5SW5OYXZpZ2F0aW9uU3BhbiA9IGFjdGl2ZVNwYW4gJiYgc3BhblRvSlNPTihhY3RpdmVTcGFuKS5vcCA9PT0gJ25hdmlnYXRpb24nO1xuXG4gICAgLy8gQ3Jvc3MgdXNhZ2UgY2FuIHJlc3VsdCBpbiBtdWx0aXBsZSBuYXZpZ2F0aW9uIHNwYW5zIGJlaW5nIGNyZWF0ZWQgd2l0aG91dCB0aGlzIGNoZWNrXG4gICAgaWYgKGlzQWxyZWFkeUluTmF2aWdhdGlvblNwYW4pIHtcbiAgICAgIGFjdGl2ZVNwYW4/LnVwZGF0ZU5hbWUobmFtZSk7XG4gICAgICBhY3RpdmVTcGFuPy5zZXRBdHRyaWJ1dGUoU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0UsIHNvdXJjZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0QnJvd3NlclRyYWNpbmdOYXZpZ2F0aW9uU3BhbihjbGllbnQsIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV06IHNvdXJjZSxcbiAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUF06ICduYXZpZ2F0aW9uJyxcbiAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiBgYXV0by5uYXZpZ2F0aW9uLnJlYWN0LnJlYWN0cm91dGVyX3Yke3ZlcnNpb259YCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFN0cmlwIHRoZSBiYXNlbmFtZSBmcm9tIGEgcGF0aG5hbWUgaWYgZXhpc3RzLlxuICpcbiAqIFZlbmRvcmVkIGFuZCBtb2RpZmllZCBmcm9tIGByZWFjdC1yb3V0ZXJgXG4gKiBodHRwczovL2dpdGh1Yi5jb20vcmVtaXgtcnVuL3JlYWN0LXJvdXRlci9ibG9iLzQ2MmJiNzEyMTU2YTNmNzM5ZDYxMzlhMGYxNDgxMGI3NmIwMDJkZjYvcGFja2FnZXMvcm91dGVyL3V0aWxzLnRzI0wxMDM4XG4gKi9cbmZ1bmN0aW9uIHN0cmlwQmFzZW5hbWVGcm9tUGF0aG5hbWUocGF0aG5hbWUsIGJhc2VuYW1lKSB7XG4gIGlmICghYmFzZW5hbWUgfHwgYmFzZW5hbWUgPT09ICcvJykge1xuICAgIHJldHVybiBwYXRobmFtZTtcbiAgfVxuXG4gIGlmICghcGF0aG5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGJhc2VuYW1lLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgcmV0dXJuIHBhdGhuYW1lO1xuICB9XG5cbiAgLy8gV2Ugd2FudCB0byBsZWF2ZSB0cmFpbGluZyBzbGFzaCBiZWhhdmlvciBpbiB0aGUgdXNlcidzIGNvbnRyb2wsIHNvIGlmIHRoZXlcbiAgLy8gc3BlY2lmeSBhIGJhc2VuYW1lIHdpdGggYSB0cmFpbGluZyBzbGFzaCwgd2Ugc2hvdWxkIHN1cHBvcnQgaXRcbiAgY29uc3Qgc3RhcnRJbmRleCA9IGJhc2VuYW1lLmVuZHNXaXRoKCcvJykgPyBiYXNlbmFtZS5sZW5ndGggLSAxIDogYmFzZW5hbWUubGVuZ3RoO1xuICBjb25zdCBuZXh0Q2hhciA9IHBhdGhuYW1lLmNoYXJBdChzdGFydEluZGV4KTtcbiAgaWYgKG5leHRDaGFyICYmIG5leHRDaGFyICE9PSAnLycpIHtcbiAgICAvLyBwYXRobmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIGJhc2VuYW1lL1xuICAgIHJldHVybiBwYXRobmFtZTtcbiAgfVxuXG4gIHJldHVybiBwYXRobmFtZS5zbGljZShzdGFydEluZGV4KSB8fCAnLyc7XG59XG5cbmZ1bmN0aW9uIHNlbmRJbmRleFBhdGgocGF0aEJ1aWxkZXIsIHBhdGhuYW1lLCBiYXNlbmFtZSkge1xuICBjb25zdCByZWNvbnN0cnVjdGVkUGF0aCA9IHBhdGhCdWlsZGVyIHx8IF9zdHJpcEJhc2VuYW1lID8gc3RyaXBCYXNlbmFtZUZyb21QYXRobmFtZShwYXRobmFtZSwgYmFzZW5hbWUpIDogcGF0aG5hbWU7XG5cbiAgY29uc3QgZm9ybWF0dGVkUGF0aCA9XG4gICAgLy8gSWYgdGhlIHBhdGggZW5kcyB3aXRoIGEgc2xhc2gsIHJlbW92ZSBpdFxuICAgIHJlY29uc3RydWN0ZWRQYXRoW3JlY29uc3RydWN0ZWRQYXRoLmxlbmd0aCAtIDFdID09PSAnLydcbiAgICAgID8gcmVjb25zdHJ1Y3RlZFBhdGguc2xpY2UoMCwgLTEpXG4gICAgICA6IC8vIElmIHRoZSBwYXRoIGVuZHMgd2l0aCBhIHdpbGRjYXJkLCByZW1vdmUgaXRcbiAgICAgICAgcmVjb25zdHJ1Y3RlZFBhdGguc2xpY2UoLTIpID09PSAnLyonXG4gICAgICAgID8gcmVjb25zdHJ1Y3RlZFBhdGguc2xpY2UoMCwgLTEpXG4gICAgICAgIDogcmVjb25zdHJ1Y3RlZFBhdGg7XG5cbiAgcmV0dXJuIFtmb3JtYXR0ZWRQYXRoLCAncm91dGUnXTtcbn1cblxuZnVuY3Rpb24gcGF0aEVuZHNXaXRoV2lsZGNhcmQocGF0aCkge1xuICByZXR1cm4gcGF0aC5lbmRzV2l0aCgnKicpO1xufVxuXG5mdW5jdGlvbiBwYXRoSXNXaWxkY2FyZEFuZEhhc0NoaWxkcmVuKHBhdGgsIGJyYW5jaCkge1xuICByZXR1cm4gKHBhdGhFbmRzV2l0aFdpbGRjYXJkKHBhdGgpICYmICEhYnJhbmNoLnJvdXRlLmNoaWxkcmVuPy5sZW5ndGgpIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiByb3V0ZUlzRGVzY2VuZGFudChyb3V0ZSkge1xuICByZXR1cm4gISEoIXJvdXRlLmNoaWxkcmVuICYmIHJvdXRlLmVsZW1lbnQgJiYgcm91dGUucGF0aD8uZW5kc1dpdGgoJy8qJykpO1xufVxuXG5mdW5jdGlvbiBsb2NhdGlvbklzSW5zaWRlRGVzY2VuZGFudFJvdXRlKGxvY2F0aW9uLCByb3V0ZXMpIHtcbiAgY29uc3QgbWF0Y2hlZFJvdXRlcyA9IF9tYXRjaFJvdXRlcyhyb3V0ZXMsIGxvY2F0aW9uKSA7XG5cbiAgaWYgKG1hdGNoZWRSb3V0ZXMpIHtcbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZWRSb3V0ZXMpIHtcbiAgICAgIGlmIChyb3V0ZUlzRGVzY2VuZGFudChtYXRjaC5yb3V0ZSkgJiYgcGlja1NwbGF0KG1hdGNoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGFkZFJvdXRlc1RvQWxsUm91dGVzKHJvdXRlcykge1xuICByb3V0ZXMuZm9yRWFjaChyb3V0ZSA9PiB7XG4gICAgY29uc3QgZXh0cmFjdGVkQ2hpbGRSb3V0ZXMgPSBnZXRDaGlsZFJvdXRlc1JlY3Vyc2l2ZWx5KHJvdXRlKTtcblxuICAgIGV4dHJhY3RlZENoaWxkUm91dGVzLmZvckVhY2gociA9PiB7XG4gICAgICBhbGxSb3V0ZXMuYWRkKHIpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2hpbGRSb3V0ZXNSZWN1cnNpdmVseShyb3V0ZSwgYWxsUm91dGVzID0gbmV3IFNldCgpKSB7XG4gIGlmICghYWxsUm91dGVzLmhhcyhyb3V0ZSkpIHtcbiAgICBhbGxSb3V0ZXMuYWRkKHJvdXRlKTtcblxuICAgIGlmIChyb3V0ZS5jaGlsZHJlbiAmJiAhcm91dGUuaW5kZXgpIHtcbiAgICAgIHJvdXRlLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZFJvdXRlcyA9IGdldENoaWxkUm91dGVzUmVjdXJzaXZlbHkoY2hpbGQsIGFsbFJvdXRlcyk7XG5cbiAgICAgICAgY2hpbGRSb3V0ZXMuZm9yRWFjaChyID0+IHtcbiAgICAgICAgICBhbGxSb3V0ZXMuYWRkKHIpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhbGxSb3V0ZXM7XG59XG5cbmZ1bmN0aW9uIHBpY2tQYXRoKG1hdGNoKSB7XG4gIHJldHVybiB0cmltV2lsZGNhcmQobWF0Y2gucm91dGUucGF0aCB8fCAnJyk7XG59XG5cbmZ1bmN0aW9uIHBpY2tTcGxhdChtYXRjaCkge1xuICByZXR1cm4gbWF0Y2gucGFyYW1zWycqJ10gfHwgJyc7XG59XG5cbmZ1bmN0aW9uIHRyaW1XaWxkY2FyZChwYXRoKSB7XG4gIHJldHVybiBwYXRoW3BhdGgubGVuZ3RoIC0gMV0gPT09ICcqJyA/IHBhdGguc2xpY2UoMCwgLTEpIDogcGF0aDtcbn1cblxuZnVuY3Rpb24gdHJpbVNsYXNoKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXSA9PT0gJy8nID8gcGF0aC5zbGljZSgwLCAtMSkgOiBwYXRoO1xufVxuXG5mdW5jdGlvbiBwcmVmaXhXaXRoU2xhc2gocGF0aCkge1xuICByZXR1cm4gcGF0aFswXSA9PT0gJy8nID8gcGF0aCA6IGAvJHtwYXRofWA7XG59XG5cbmZ1bmN0aW9uIHJlYnVpbGRSb3V0ZVBhdGhGcm9tQWxsUm91dGVzKGFsbFJvdXRlcywgbG9jYXRpb24pIHtcbiAgY29uc3QgbWF0Y2hlZFJvdXRlcyA9IF9tYXRjaFJvdXRlcyhhbGxSb3V0ZXMsIGxvY2F0aW9uKSA7XG5cbiAgaWYgKCFtYXRjaGVkUm91dGVzIHx8IG1hdGNoZWRSb3V0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVkUm91dGVzKSB7XG4gICAgaWYgKG1hdGNoLnJvdXRlLnBhdGggJiYgbWF0Y2gucm91dGUucGF0aCAhPT0gJyonKSB7XG4gICAgICBjb25zdCBwYXRoID0gcGlja1BhdGgobWF0Y2gpO1xuICAgICAgY29uc3Qgc3RyaXBwZWRQYXRoID0gc3RyaXBCYXNlbmFtZUZyb21QYXRobmFtZShsb2NhdGlvbi5wYXRobmFtZSwgcHJlZml4V2l0aFNsYXNoKG1hdGNoLnBhdGhuYW1lQmFzZSkpO1xuXG4gICAgICBpZiAobG9jYXRpb24ucGF0aG5hbWUgPT09IHN0cmlwcGVkUGF0aCkge1xuICAgICAgICByZXR1cm4gdHJpbVNsYXNoKHN0cmlwcGVkUGF0aCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cmltU2xhc2goXG4gICAgICAgIHRyaW1TbGFzaChwYXRoIHx8ICcnKSArXG4gICAgICAgICAgcHJlZml4V2l0aFNsYXNoKFxuICAgICAgICAgICAgcmVidWlsZFJvdXRlUGF0aEZyb21BbGxSb3V0ZXMoXG4gICAgICAgICAgICAgIGFsbFJvdXRlcy5maWx0ZXIocm91dGUgPT4gcm91dGUgIT09IG1hdGNoLnJvdXRlKSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBhdGhuYW1lOiBzdHJpcHBlZFBhdGgsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApLFxuICAgICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZE5hbWUoXG4gIHJvdXRlcyxcbiAgbG9jYXRpb24sXG4gIGJyYW5jaGVzLFxuICBiYXNlbmFtZSA9ICcnLFxuKSB7XG4gIGlmICghcm91dGVzIHx8IHJvdXRlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW19zdHJpcEJhc2VuYW1lID8gc3RyaXBCYXNlbmFtZUZyb21QYXRobmFtZShsb2NhdGlvbi5wYXRobmFtZSwgYmFzZW5hbWUpIDogbG9jYXRpb24ucGF0aG5hbWUsICd1cmwnXTtcbiAgfVxuXG4gIGxldCBwYXRoQnVpbGRlciA9ICcnO1xuICBpZiAoYnJhbmNoZXMpIHtcbiAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiBicmFuY2hlcykge1xuICAgICAgY29uc3Qgcm91dGUgPSBicmFuY2gucm91dGU7XG4gICAgICBpZiAocm91dGUpIHtcbiAgICAgICAgLy8gRWFybHkgcmV0dXJuIGlmIGluZGV4IHJvdXRlXG4gICAgICAgIGlmIChyb3V0ZS5pbmRleCkge1xuICAgICAgICAgIHJldHVybiBzZW5kSW5kZXhQYXRoKHBhdGhCdWlsZGVyLCBicmFuY2gucGF0aG5hbWUsIGJhc2VuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXRoID0gcm91dGUucGF0aDtcblxuICAgICAgICAvLyBJZiBwYXRoIGlzIG5vdCBhIHdpbGRjYXJkIGFuZCBoYXMgbm8gY2hpbGQgcm91dGVzLCBhcHBlbmQgdGhlIHBhdGhcbiAgICAgICAgaWYgKHBhdGggJiYgIXBhdGhJc1dpbGRjYXJkQW5kSGFzQ2hpbGRyZW4ocGF0aCwgYnJhbmNoKSkge1xuICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXRoWzBdID09PSAnLycgfHwgcGF0aEJ1aWxkZXJbcGF0aEJ1aWxkZXIubGVuZ3RoIC0gMV0gPT09ICcvJyA/IHBhdGggOiBgLyR7cGF0aH1gO1xuICAgICAgICAgIHBhdGhCdWlsZGVyID0gdHJpbVNsYXNoKHBhdGhCdWlsZGVyKSArIHByZWZpeFdpdGhTbGFzaChuZXdQYXRoKTtcblxuICAgICAgICAgIC8vIElmIHRoZSBwYXRoIG1hdGNoZXMgdGhlIGN1cnJlbnQgbG9jYXRpb24sIHJldHVybiB0aGUgcGF0aFxuICAgICAgICAgIGlmICh0cmltU2xhc2gobG9jYXRpb24ucGF0aG5hbWUpID09PSB0cmltU2xhc2goYmFzZW5hbWUgKyBicmFuY2gucGF0aG5hbWUpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIC8vIElmIHRoZSByb3V0ZSBkZWZpbmVkIG9uIHRoZSBlbGVtZW50IGlzIHNvbWV0aGluZyBsaWtlXG4gICAgICAgICAgICAgIC8vIDxSb3V0ZSBwYXRoPVwiL3N0b3Jlcy86c3RvcmVJZC9wcm9kdWN0cy86cHJvZHVjdElkXCIgZWxlbWVudD17PGRpdj5Qcm9kdWN0PC9kaXY+fSAvPlxuICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgY2hlY2sgYWdhaW5zdCB0aGUgYnJhbmNoLnBhdGhuYW1lIGZvciB0aGUgbnVtYmVyIG9mIC8gc2VwYXJhdG9yc1xuICAgICAgICAgICAgICBnZXROdW1iZXJPZlVybFNlZ21lbnRzKHBhdGhCdWlsZGVyKSAhPT0gZ2V0TnVtYmVyT2ZVcmxTZWdtZW50cyhicmFuY2gucGF0aG5hbWUpICYmXG4gICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBub3QgY291bnQgd2lsZGNhcmQgb3BlcmF0b3JzIGluIHRoZSB1cmwgc2VnbWVudHMgY2FsY3VsYXRpb25cbiAgICAgICAgICAgICAgIXBhdGhFbmRzV2l0aFdpbGRjYXJkKHBhdGhCdWlsZGVyKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbKF9zdHJpcEJhc2VuYW1lID8gJycgOiBiYXNlbmFtZSkgKyBuZXdQYXRoLCAncm91dGUnXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBwYXRoYnVpbGRlciBpcyBhIHdpbGRjYXJkIGFuZCB0aGVyZSBhcmUgY2hpbGRyZW4sIHJlbW92ZSB0aGUgd2lsZGNhcmRcbiAgICAgICAgICAgIGlmIChwYXRoSXNXaWxkY2FyZEFuZEhhc0NoaWxkcmVuKHBhdGhCdWlsZGVyLCBicmFuY2gpKSB7XG4gICAgICAgICAgICAgIHBhdGhCdWlsZGVyID0gcGF0aEJ1aWxkZXIuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gWyhfc3RyaXBCYXNlbmFtZSA/ICcnIDogYmFzZW5hbWUpICsgcGF0aEJ1aWxkZXIsICdyb3V0ZSddO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZhbGxiYWNrVHJhbnNhY3Rpb25OYW1lID0gX3N0cmlwQmFzZW5hbWVcbiAgICA/IHN0cmlwQmFzZW5hbWVGcm9tUGF0aG5hbWUobG9jYXRpb24ucGF0aG5hbWUsIGJhc2VuYW1lKVxuICAgIDogbG9jYXRpb24ucGF0aG5hbWUgfHwgJy8nO1xuXG4gIHJldHVybiBbZmFsbGJhY2tUcmFuc2FjdGlvbk5hbWUsICd1cmwnXTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUGFnZWxvYWRUcmFuc2FjdGlvbihcbiAgYWN0aXZlUm9vdFNwYW4sXG4gIGxvY2F0aW9uLFxuICByb3V0ZXMsXG4gIG1hdGNoZXMsXG4gIGJhc2VuYW1lLFxuICBhbGxSb3V0ZXMsXG4pIHtcbiAgY29uc3QgYnJhbmNoZXMgPSBBcnJheS5pc0FycmF5KG1hdGNoZXMpXG4gICAgPyBtYXRjaGVzXG4gICAgOiAoX21hdGNoUm91dGVzKGFsbFJvdXRlcyB8fCByb3V0ZXMsIGxvY2F0aW9uLCBiYXNlbmFtZSkgKTtcblxuICBpZiAoYnJhbmNoZXMpIHtcbiAgICBsZXQgbmFtZSxcbiAgICAgIHNvdXJjZSA9ICd1cmwnO1xuXG4gICAgY29uc3QgaXNJbkRlc2NlbmRhbnRSb3V0ZSA9IGxvY2F0aW9uSXNJbnNpZGVEZXNjZW5kYW50Um91dGUobG9jYXRpb24sIGFsbFJvdXRlcyB8fCByb3V0ZXMpO1xuXG4gICAgaWYgKGlzSW5EZXNjZW5kYW50Um91dGUpIHtcbiAgICAgIG5hbWUgPSBwcmVmaXhXaXRoU2xhc2gocmVidWlsZFJvdXRlUGF0aEZyb21BbGxSb3V0ZXMoYWxsUm91dGVzIHx8IHJvdXRlcywgbG9jYXRpb24pKTtcbiAgICAgIHNvdXJjZSA9ICdyb3V0ZSc7XG4gICAgfVxuXG4gICAgaWYgKCFpc0luRGVzY2VuZGFudFJvdXRlIHx8ICFuYW1lKSB7XG4gICAgICBbbmFtZSwgc291cmNlXSA9IGdldE5vcm1hbGl6ZWROYW1lKHJvdXRlcywgbG9jYXRpb24sIGJyYW5jaGVzLCBiYXNlbmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudFNjb3BlKCkuc2V0VHJhbnNhY3Rpb25OYW1lKG5hbWUgfHwgJy8nKTtcblxuICAgIGlmIChhY3RpdmVSb290U3Bhbikge1xuICAgICAgYWN0aXZlUm9vdFNwYW4udXBkYXRlTmFtZShuYW1lKTtcbiAgICAgIGFjdGl2ZVJvb3RTcGFuLnNldEF0dHJpYnV0ZShTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRSwgc291cmNlKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIGNyZWF0ZVY2Q29tcGF0aWJsZVdpdGhTZW50cnlSZWFjdFJvdXRlclJvdXRpbmcoXG4gIFJvdXRlcyxcbiAgdmVyc2lvbixcbikge1xuICBpZiAoIV91c2VFZmZlY3QgfHwgIV91c2VMb2NhdGlvbiB8fCAhX3VzZU5hdmlnYXRpb25UeXBlIHx8ICFfY3JlYXRlUm91dGVzRnJvbUNoaWxkcmVuIHx8ICFfbWF0Y2hSb3V0ZXMpIHtcbiAgICBERUJVR19CVUlMRCAmJlxuICAgICAgZGVidWcud2FybihgcmVhY3RSb3V0ZXJWNkluc3RydW1lbnRhdGlvbiB3YXMgdW5hYmxlIHRvIHdyYXAgUm91dGVzIGJlY2F1c2Ugb2Ygb25lIG9yIG1vcmUgbWlzc2luZyBwYXJhbWV0ZXJzLlxuICAgICAgdXNlRWZmZWN0OiAke191c2VFZmZlY3R9LiB1c2VMb2NhdGlvbjogJHtfdXNlTG9jYXRpb259LiB1c2VOYXZpZ2F0aW9uVHlwZTogJHtfdXNlTmF2aWdhdGlvblR5cGV9LlxuICAgICAgY3JlYXRlUm91dGVzRnJvbUNoaWxkcmVuOiAke19jcmVhdGVSb3V0ZXNGcm9tQ2hpbGRyZW59LiBtYXRjaFJvdXRlczogJHtfbWF0Y2hSb3V0ZXN9LmApO1xuXG4gICAgcmV0dXJuIFJvdXRlcztcbiAgfVxuXG4gIGNvbnN0IFNlbnRyeVJvdXRlcyA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IGlzTW91bnRSZW5kZXJQYXNzID0gUmVhY3QudXNlUmVmKHRydWUpO1xuXG4gICAgY29uc3QgbG9jYXRpb24gPSBfdXNlTG9jYXRpb24oKTtcbiAgICBjb25zdCBuYXZpZ2F0aW9uVHlwZSA9IF91c2VOYXZpZ2F0aW9uVHlwZSgpO1xuXG4gICAgX3VzZUVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3Qgcm91dGVzID0gX2NyZWF0ZVJvdXRlc0Zyb21DaGlsZHJlbihwcm9wcy5jaGlsZHJlbikgO1xuXG4gICAgICAgIGlmIChpc01vdW50UmVuZGVyUGFzcy5jdXJyZW50KSB7XG4gICAgICAgICAgYWRkUm91dGVzVG9BbGxSb3V0ZXMocm91dGVzKTtcblxuICAgICAgICAgIHVwZGF0ZVBhZ2Vsb2FkVHJhbnNhY3Rpb24oZ2V0QWN0aXZlUm9vdFNwYW4oKSwgbG9jYXRpb24sIHJvdXRlcywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIEFycmF5LmZyb20oYWxsUm91dGVzKSk7XG4gICAgICAgICAgaXNNb3VudFJlbmRlclBhc3MuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhhbmRsZU5hdmlnYXRpb24oe1xuICAgICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgICByb3V0ZXMsXG4gICAgICAgICAgICBuYXZpZ2F0aW9uVHlwZSxcbiAgICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgICBhbGxSb3V0ZXM6IEFycmF5LmZyb20oYWxsUm91dGVzKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGBwcm9wcy5jaGlsZHJlbmAgaXMgcHVycG9zZWx5IG5vdCBpbmNsdWRlZCBpbiB0aGUgZGVwZW5kZW5jeSBhcnJheSwgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byByZS1ydW4gdGhpcyBlZmZlY3RcbiAgICAgIC8vIHdoZW4gdGhlIGNoaWxkcmVuIGNoYW5nZS4gV2Ugb25seSB3YW50IHRvIHN0YXJ0IHRyYW5zYWN0aW9ucyB3aGVuIHRoZSBsb2NhdGlvbiBvciBuYXZpZ2F0aW9uIHR5cGUgY2hhbmdlLlxuICAgICAgW2xvY2F0aW9uLCBuYXZpZ2F0aW9uVHlwZV0sXG4gICAgKTtcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgU2V0dGluZyBtb3JlIHNwZWNpZmljIFJlYWN0IENvbXBvbmVudCB0eXBpbmcgZm9yIGBSYCBnZW5lcmljIGFib3ZlXG4gICAgLy8gd2lsbCBicmVhayBhZHZhbmNlZCB0eXBlIGluZmVyZW5jZSBkb25lIGJ5IHJlYWN0IHJvdXRlciBwYXJhbXNcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZXMsIHsgLi4ucHJvcHMsfSApO1xuICB9O1xuXG4gIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFNlbnRyeVJvdXRlcywgUm91dGVzKTtcblxuICAvLyBAdHMtZXhwZWN0LWVycm9yIFNldHRpbmcgbW9yZSBzcGVjaWZpYyBSZWFjdCBDb21wb25lbnQgdHlwaW5nIGZvciBgUmAgZ2VuZXJpYyBhYm92ZVxuICAvLyB3aWxsIGJyZWFrIGFkdmFuY2VkIHR5cGUgaW5mZXJlbmNlIGRvbmUgYnkgcmVhY3Qgcm91dGVyIHBhcmFtc1xuICByZXR1cm4gU2VudHJ5Um91dGVzO1xufVxuXG5mdW5jdGlvbiBnZXRBY3RpdmVSb290U3BhbigpIHtcbiAgY29uc3Qgc3BhbiA9IGdldEFjdGl2ZVNwYW4oKTtcbiAgY29uc3Qgcm9vdFNwYW4gPSBzcGFuID8gZ2V0Um9vdFNwYW4oc3BhbikgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKCFyb290U3Bhbikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBvcCA9IHNwYW5Ub0pTT04ocm9vdFNwYW4pLm9wO1xuXG4gIC8vIE9ubHkgdXNlIHRoaXMgcm9vdCBzcGFuIGlmIGl0IGlzIGEgcGFnZWxvYWQgb3IgbmF2aWdhdGlvbiBzcGFuXG4gIHJldHVybiBvcCA9PT0gJ25hdmlnYXRpb24nIHx8IG9wID09PSAncGFnZWxvYWQnID8gcm9vdFNwYW4gOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyBudW1iZXIgb2YgVVJMIHNlZ21lbnRzIG9mIGEgcGFzc2VkIHN0cmluZyBVUkwuXG4gKi9cbmZ1bmN0aW9uIGdldE51bWJlck9mVXJsU2VnbWVudHModXJsKSB7XG4gIC8vIHNwbGl0IGF0ICcvJyBvciBhdCAnXFwvJyB0byBzcGxpdCByZWdleCB1cmxzIGNvcnJlY3RseVxuICByZXR1cm4gdXJsLnNwbGl0KC9cXFxcP1xcLy8pLmZpbHRlcihzID0+IHMubGVuZ3RoID4gMCAmJiBzICE9PSAnLCcpLmxlbmd0aDtcbn1cblxuZXhwb3J0IHsgY3JlYXRlUmVhY3RSb3V0ZXJWNkNvbXBhdGlibGVUcmFjaW5nSW50ZWdyYXRpb24sIGNyZWF0ZVY2Q29tcGF0aWJsZVdpdGhTZW50cnlSZWFjdFJvdXRlclJvdXRpbmcsIGNyZWF0ZVY2Q29tcGF0aWJsZVdyYXBDcmVhdGVCcm93c2VyUm91dGVyLCBjcmVhdGVWNkNvbXBhdGlibGVXcmFwQ3JlYXRlTWVtb3J5Um91dGVyLCBjcmVhdGVWNkNvbXBhdGlibGVXcmFwVXNlUm91dGVzLCBnZXROdW1iZXJPZlVybFNlZ21lbnRzLCBoYW5kbGVOYXZpZ2F0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdHJvdXRlcnY2LWNvbXBhdC11dGlscy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouterv6-compat-utils.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouterv6.js":
/*!********************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouterv6.js ***!
  \********************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   reactRouterV6BrowserTracingIntegration: () => (/* binding */ reactRouterV6BrowserTracingIntegration),\n/* harmony export */   withSentryReactRouterV6Routing: () => (/* binding */ withSentryReactRouterV6Routing),\n/* harmony export */   wrapCreateBrowserRouterV6: () => (/* binding */ wrapCreateBrowserRouterV6),\n/* harmony export */   wrapCreateMemoryRouterV6: () => (/* binding */ wrapCreateMemoryRouterV6),\n/* harmony export */   wrapUseRoutesV6: () => (/* binding */ wrapUseRoutesV6)\n/* harmony export */ });\n/* harmony import */ var _reactrouterv6_compat_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./reactrouterv6-compat-utils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouterv6-compat-utils.js\");\n\n\n/**\n * A browser tracing integration that uses React Router v6 to instrument navigations.\n * Expects `useEffect`, `useLocation`, `useNavigationType`, `createRoutesFromChildren` and `matchRoutes` to be passed as options.\n */\nfunction reactRouterV6BrowserTracingIntegration(\n  options,\n) {\n  return (0,_reactrouterv6_compat_utils_js__WEBPACK_IMPORTED_MODULE_0__.createReactRouterV6CompatibleTracingIntegration)(options, '6');\n}\n\n/**\n * A wrapper function that adds Sentry routing instrumentation to a React Router v6 useRoutes hook.\n * This is used to automatically capture route changes as transactions when using the useRoutes hook.\n */\nfunction wrapUseRoutesV6(origUseRoutes) {\n  return (0,_reactrouterv6_compat_utils_js__WEBPACK_IMPORTED_MODULE_0__.createV6CompatibleWrapUseRoutes)(origUseRoutes, '6');\n}\n\n/**\n * A wrapper function that adds Sentry routing instrumentation to a React Router v6 createBrowserRouter function.\n * This is used to automatically capture route changes as transactions when using the createBrowserRouter API.\n */\nfunction wrapCreateBrowserRouterV6\n\n(createRouterFunction) {\n  return (0,_reactrouterv6_compat_utils_js__WEBPACK_IMPORTED_MODULE_0__.createV6CompatibleWrapCreateBrowserRouter)(createRouterFunction, '6');\n}\n\n/**\n * A wrapper function that adds Sentry routing instrumentation to a React Router v6 createMemoryRouter function.\n * This is used to automatically capture route changes as transactions when using the createMemoryRouter API.\n * The difference between createBrowserRouter and createMemoryRouter is that with createMemoryRouter,\n * optional `initialEntries` are also taken into account.\n */\nfunction wrapCreateMemoryRouterV6\n\n(createMemoryRouterFunction) {\n  return (0,_reactrouterv6_compat_utils_js__WEBPACK_IMPORTED_MODULE_0__.createV6CompatibleWrapCreateMemoryRouter)(createMemoryRouterFunction, '6');\n}\n\n/**\n * A higher-order component that adds Sentry routing instrumentation to a React Router v6 Route component.\n * This is used to automatically capture route changes as transactions.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction withSentryReactRouterV6Routing(routes) {\n  return (0,_reactrouterv6_compat_utils_js__WEBPACK_IMPORTED_MODULE_0__.createV6CompatibleWithSentryReactRouterRouting)(routes, '6');\n}\n\n\n//# sourceMappingURL=reactrouterv6.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL3JlYWN0cm91dGVydjYuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXdROztBQUV4UTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsK0dBQStDO0FBQ3hEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLCtGQUErQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUyx5R0FBeUM7QUFDbEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTLHdHQUF3QztBQUNqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLDhHQUE4QztBQUN2RDs7QUFFd0o7QUFDeEoiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStyZWFjdEA5LjQ2LjBfcmVhY3RAMTkuMS4xL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3JlYWN0L2J1aWxkL2VzbS9yZWFjdHJvdXRlcnY2LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlYWN0Um91dGVyVjZDb21wYXRpYmxlVHJhY2luZ0ludGVncmF0aW9uLCBjcmVhdGVWNkNvbXBhdGlibGVXaXRoU2VudHJ5UmVhY3RSb3V0ZXJSb3V0aW5nLCBjcmVhdGVWNkNvbXBhdGlibGVXcmFwVXNlUm91dGVzLCBjcmVhdGVWNkNvbXBhdGlibGVXcmFwQ3JlYXRlQnJvd3NlclJvdXRlciwgY3JlYXRlVjZDb21wYXRpYmxlV3JhcENyZWF0ZU1lbW9yeVJvdXRlciB9IGZyb20gJy4vcmVhY3Ryb3V0ZXJ2Ni1jb21wYXQtdXRpbHMuanMnO1xuXG4vKipcbiAqIEEgYnJvd3NlciB0cmFjaW5nIGludGVncmF0aW9uIHRoYXQgdXNlcyBSZWFjdCBSb3V0ZXIgdjYgdG8gaW5zdHJ1bWVudCBuYXZpZ2F0aW9ucy5cbiAqIEV4cGVjdHMgYHVzZUVmZmVjdGAsIGB1c2VMb2NhdGlvbmAsIGB1c2VOYXZpZ2F0aW9uVHlwZWAsIGBjcmVhdGVSb3V0ZXNGcm9tQ2hpbGRyZW5gIGFuZCBgbWF0Y2hSb3V0ZXNgIHRvIGJlIHBhc3NlZCBhcyBvcHRpb25zLlxuICovXG5mdW5jdGlvbiByZWFjdFJvdXRlclY2QnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbihcbiAgb3B0aW9ucyxcbikge1xuICByZXR1cm4gY3JlYXRlUmVhY3RSb3V0ZXJWNkNvbXBhdGlibGVUcmFjaW5nSW50ZWdyYXRpb24ob3B0aW9ucywgJzYnKTtcbn1cblxuLyoqXG4gKiBBIHdyYXBwZXIgZnVuY3Rpb24gdGhhdCBhZGRzIFNlbnRyeSByb3V0aW5nIGluc3RydW1lbnRhdGlvbiB0byBhIFJlYWN0IFJvdXRlciB2NiB1c2VSb3V0ZXMgaG9vay5cbiAqIFRoaXMgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGNhcHR1cmUgcm91dGUgY2hhbmdlcyBhcyB0cmFuc2FjdGlvbnMgd2hlbiB1c2luZyB0aGUgdXNlUm91dGVzIGhvb2suXG4gKi9cbmZ1bmN0aW9uIHdyYXBVc2VSb3V0ZXNWNihvcmlnVXNlUm91dGVzKSB7XG4gIHJldHVybiBjcmVhdGVWNkNvbXBhdGlibGVXcmFwVXNlUm91dGVzKG9yaWdVc2VSb3V0ZXMsICc2Jyk7XG59XG5cbi8qKlxuICogQSB3cmFwcGVyIGZ1bmN0aW9uIHRoYXQgYWRkcyBTZW50cnkgcm91dGluZyBpbnN0cnVtZW50YXRpb24gdG8gYSBSZWFjdCBSb3V0ZXIgdjYgY3JlYXRlQnJvd3NlclJvdXRlciBmdW5jdGlvbi5cbiAqIFRoaXMgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGNhcHR1cmUgcm91dGUgY2hhbmdlcyBhcyB0cmFuc2FjdGlvbnMgd2hlbiB1c2luZyB0aGUgY3JlYXRlQnJvd3NlclJvdXRlciBBUEkuXG4gKi9cbmZ1bmN0aW9uIHdyYXBDcmVhdGVCcm93c2VyUm91dGVyVjZcblxuKGNyZWF0ZVJvdXRlckZ1bmN0aW9uKSB7XG4gIHJldHVybiBjcmVhdGVWNkNvbXBhdGlibGVXcmFwQ3JlYXRlQnJvd3NlclJvdXRlcihjcmVhdGVSb3V0ZXJGdW5jdGlvbiwgJzYnKTtcbn1cblxuLyoqXG4gKiBBIHdyYXBwZXIgZnVuY3Rpb24gdGhhdCBhZGRzIFNlbnRyeSByb3V0aW5nIGluc3RydW1lbnRhdGlvbiB0byBhIFJlYWN0IFJvdXRlciB2NiBjcmVhdGVNZW1vcnlSb3V0ZXIgZnVuY3Rpb24uXG4gKiBUaGlzIGlzIHVzZWQgdG8gYXV0b21hdGljYWxseSBjYXB0dXJlIHJvdXRlIGNoYW5nZXMgYXMgdHJhbnNhY3Rpb25zIHdoZW4gdXNpbmcgdGhlIGNyZWF0ZU1lbW9yeVJvdXRlciBBUEkuXG4gKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGNyZWF0ZUJyb3dzZXJSb3V0ZXIgYW5kIGNyZWF0ZU1lbW9yeVJvdXRlciBpcyB0aGF0IHdpdGggY3JlYXRlTWVtb3J5Um91dGVyLFxuICogb3B0aW9uYWwgYGluaXRpYWxFbnRyaWVzYCBhcmUgYWxzbyB0YWtlbiBpbnRvIGFjY291bnQuXG4gKi9cbmZ1bmN0aW9uIHdyYXBDcmVhdGVNZW1vcnlSb3V0ZXJWNlxuXG4oY3JlYXRlTWVtb3J5Um91dGVyRnVuY3Rpb24pIHtcbiAgcmV0dXJuIGNyZWF0ZVY2Q29tcGF0aWJsZVdyYXBDcmVhdGVNZW1vcnlSb3V0ZXIoY3JlYXRlTWVtb3J5Um91dGVyRnVuY3Rpb24sICc2Jyk7XG59XG5cbi8qKlxuICogQSBoaWdoZXItb3JkZXIgY29tcG9uZW50IHRoYXQgYWRkcyBTZW50cnkgcm91dGluZyBpbnN0cnVtZW50YXRpb24gdG8gYSBSZWFjdCBSb3V0ZXIgdjYgUm91dGUgY29tcG9uZW50LlxuICogVGhpcyBpcyB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgY2FwdHVyZSByb3V0ZSBjaGFuZ2VzIGFzIHRyYW5zYWN0aW9ucy5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmZ1bmN0aW9uIHdpdGhTZW50cnlSZWFjdFJvdXRlclY2Um91dGluZyhyb3V0ZXMpIHtcbiAgcmV0dXJuIGNyZWF0ZVY2Q29tcGF0aWJsZVdpdGhTZW50cnlSZWFjdFJvdXRlclJvdXRpbmcocm91dGVzLCAnNicpO1xufVxuXG5leHBvcnQgeyByZWFjdFJvdXRlclY2QnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbiwgd2l0aFNlbnRyeVJlYWN0Um91dGVyVjZSb3V0aW5nLCB3cmFwQ3JlYXRlQnJvd3NlclJvdXRlclY2LCB3cmFwQ3JlYXRlTWVtb3J5Um91dGVyVjYsIHdyYXBVc2VSb3V0ZXNWNiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3Ryb3V0ZXJ2Ni5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouterv6.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouterv7.js":
/*!********************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouterv7.js ***!
  \********************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   reactRouterV7BrowserTracingIntegration: () => (/* binding */ reactRouterV7BrowserTracingIntegration),\n/* harmony export */   withSentryReactRouterV7Routing: () => (/* binding */ withSentryReactRouterV7Routing),\n/* harmony export */   wrapCreateBrowserRouterV7: () => (/* binding */ wrapCreateBrowserRouterV7),\n/* harmony export */   wrapCreateMemoryRouterV7: () => (/* binding */ wrapCreateMemoryRouterV7),\n/* harmony export */   wrapUseRoutesV7: () => (/* binding */ wrapUseRoutesV7)\n/* harmony export */ });\n/* harmony import */ var _reactrouterv6_compat_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./reactrouterv6-compat-utils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouterv6-compat-utils.js\");\n\n\n/**\n * A browser tracing integration that uses React Router v7 to instrument navigations.\n * Expects `useEffect`, `useLocation`, `useNavigationType`, `createRoutesFromChildren` and `matchRoutes` to be passed as options.\n */\nfunction reactRouterV7BrowserTracingIntegration(\n  options,\n) {\n  return (0,_reactrouterv6_compat_utils_js__WEBPACK_IMPORTED_MODULE_0__.createReactRouterV6CompatibleTracingIntegration)(options, '7');\n}\n\n/**\n * A higher-order component that adds Sentry routing instrumentation to a React Router v7 Route component.\n * This is used to automatically capture route changes as transactions.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction withSentryReactRouterV7Routing(routes) {\n  return (0,_reactrouterv6_compat_utils_js__WEBPACK_IMPORTED_MODULE_0__.createV6CompatibleWithSentryReactRouterRouting)(routes, '7');\n}\n\n/**\n * A wrapper function that adds Sentry routing instrumentation to a React Router v7 createBrowserRouter function.\n * This is used to automatically capture route changes as transactions when using the createBrowserRouter API.\n */\nfunction wrapCreateBrowserRouterV7\n\n(createRouterFunction) {\n  return (0,_reactrouterv6_compat_utils_js__WEBPACK_IMPORTED_MODULE_0__.createV6CompatibleWrapCreateBrowserRouter)(createRouterFunction, '7');\n}\n\n/**\n * A wrapper function that adds Sentry routing instrumentation to a React Router v7 createMemoryRouter function.\n * This is used to automatically capture route changes as transactions when using the createMemoryRouter API.\n * The difference between createBrowserRouter and createMemoryRouter is that with createMemoryRouter,\n * optional `initialEntries` are also taken into account.\n */\nfunction wrapCreateMemoryRouterV7\n\n(createMemoryRouterFunction) {\n  return (0,_reactrouterv6_compat_utils_js__WEBPACK_IMPORTED_MODULE_0__.createV6CompatibleWrapCreateMemoryRouter)(createMemoryRouterFunction, '7');\n}\n\n/**\n * A wrapper function that adds Sentry routing instrumentation to a React Router v7 useRoutes hook.\n * This is used to automatically capture route changes as transactions when using the useRoutes hook.\n */\nfunction wrapUseRoutesV7(origUseRoutes) {\n  return (0,_reactrouterv6_compat_utils_js__WEBPACK_IMPORTED_MODULE_0__.createV6CompatibleWrapUseRoutes)(origUseRoutes, '7');\n}\n\n\n//# sourceMappingURL=reactrouterv7.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL3JlYWN0cm91dGVydjcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXdROztBQUV4UTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsK0dBQStDO0FBQ3hEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsOEdBQThDO0FBQ3ZEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTLHlHQUF5QztBQUNsRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVMsd0dBQXdDO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLCtGQUErQjtBQUN4Qzs7QUFFd0o7QUFDeEoiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStyZWFjdEA5LjQ2LjBfcmVhY3RAMTkuMS4xL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3JlYWN0L2J1aWxkL2VzbS9yZWFjdHJvdXRlcnY3LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlYWN0Um91dGVyVjZDb21wYXRpYmxlVHJhY2luZ0ludGVncmF0aW9uLCBjcmVhdGVWNkNvbXBhdGlibGVXaXRoU2VudHJ5UmVhY3RSb3V0ZXJSb3V0aW5nLCBjcmVhdGVWNkNvbXBhdGlibGVXcmFwQ3JlYXRlQnJvd3NlclJvdXRlciwgY3JlYXRlVjZDb21wYXRpYmxlV3JhcENyZWF0ZU1lbW9yeVJvdXRlciwgY3JlYXRlVjZDb21wYXRpYmxlV3JhcFVzZVJvdXRlcyB9IGZyb20gJy4vcmVhY3Ryb3V0ZXJ2Ni1jb21wYXQtdXRpbHMuanMnO1xuXG4vKipcbiAqIEEgYnJvd3NlciB0cmFjaW5nIGludGVncmF0aW9uIHRoYXQgdXNlcyBSZWFjdCBSb3V0ZXIgdjcgdG8gaW5zdHJ1bWVudCBuYXZpZ2F0aW9ucy5cbiAqIEV4cGVjdHMgYHVzZUVmZmVjdGAsIGB1c2VMb2NhdGlvbmAsIGB1c2VOYXZpZ2F0aW9uVHlwZWAsIGBjcmVhdGVSb3V0ZXNGcm9tQ2hpbGRyZW5gIGFuZCBgbWF0Y2hSb3V0ZXNgIHRvIGJlIHBhc3NlZCBhcyBvcHRpb25zLlxuICovXG5mdW5jdGlvbiByZWFjdFJvdXRlclY3QnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbihcbiAgb3B0aW9ucyxcbikge1xuICByZXR1cm4gY3JlYXRlUmVhY3RSb3V0ZXJWNkNvbXBhdGlibGVUcmFjaW5nSW50ZWdyYXRpb24ob3B0aW9ucywgJzcnKTtcbn1cblxuLyoqXG4gKiBBIGhpZ2hlci1vcmRlciBjb21wb25lbnQgdGhhdCBhZGRzIFNlbnRyeSByb3V0aW5nIGluc3RydW1lbnRhdGlvbiB0byBhIFJlYWN0IFJvdXRlciB2NyBSb3V0ZSBjb21wb25lbnQuXG4gKiBUaGlzIGlzIHVzZWQgdG8gYXV0b21hdGljYWxseSBjYXB0dXJlIHJvdXRlIGNoYW5nZXMgYXMgdHJhbnNhY3Rpb25zLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gd2l0aFNlbnRyeVJlYWN0Um91dGVyVjdSb3V0aW5nKHJvdXRlcykge1xuICByZXR1cm4gY3JlYXRlVjZDb21wYXRpYmxlV2l0aFNlbnRyeVJlYWN0Um91dGVyUm91dGluZyhyb3V0ZXMsICc3Jyk7XG59XG5cbi8qKlxuICogQSB3cmFwcGVyIGZ1bmN0aW9uIHRoYXQgYWRkcyBTZW50cnkgcm91dGluZyBpbnN0cnVtZW50YXRpb24gdG8gYSBSZWFjdCBSb3V0ZXIgdjcgY3JlYXRlQnJvd3NlclJvdXRlciBmdW5jdGlvbi5cbiAqIFRoaXMgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGNhcHR1cmUgcm91dGUgY2hhbmdlcyBhcyB0cmFuc2FjdGlvbnMgd2hlbiB1c2luZyB0aGUgY3JlYXRlQnJvd3NlclJvdXRlciBBUEkuXG4gKi9cbmZ1bmN0aW9uIHdyYXBDcmVhdGVCcm93c2VyUm91dGVyVjdcblxuKGNyZWF0ZVJvdXRlckZ1bmN0aW9uKSB7XG4gIHJldHVybiBjcmVhdGVWNkNvbXBhdGlibGVXcmFwQ3JlYXRlQnJvd3NlclJvdXRlcihjcmVhdGVSb3V0ZXJGdW5jdGlvbiwgJzcnKTtcbn1cblxuLyoqXG4gKiBBIHdyYXBwZXIgZnVuY3Rpb24gdGhhdCBhZGRzIFNlbnRyeSByb3V0aW5nIGluc3RydW1lbnRhdGlvbiB0byBhIFJlYWN0IFJvdXRlciB2NyBjcmVhdGVNZW1vcnlSb3V0ZXIgZnVuY3Rpb24uXG4gKiBUaGlzIGlzIHVzZWQgdG8gYXV0b21hdGljYWxseSBjYXB0dXJlIHJvdXRlIGNoYW5nZXMgYXMgdHJhbnNhY3Rpb25zIHdoZW4gdXNpbmcgdGhlIGNyZWF0ZU1lbW9yeVJvdXRlciBBUEkuXG4gKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGNyZWF0ZUJyb3dzZXJSb3V0ZXIgYW5kIGNyZWF0ZU1lbW9yeVJvdXRlciBpcyB0aGF0IHdpdGggY3JlYXRlTWVtb3J5Um91dGVyLFxuICogb3B0aW9uYWwgYGluaXRpYWxFbnRyaWVzYCBhcmUgYWxzbyB0YWtlbiBpbnRvIGFjY291bnQuXG4gKi9cbmZ1bmN0aW9uIHdyYXBDcmVhdGVNZW1vcnlSb3V0ZXJWN1xuXG4oY3JlYXRlTWVtb3J5Um91dGVyRnVuY3Rpb24pIHtcbiAgcmV0dXJuIGNyZWF0ZVY2Q29tcGF0aWJsZVdyYXBDcmVhdGVNZW1vcnlSb3V0ZXIoY3JlYXRlTWVtb3J5Um91dGVyRnVuY3Rpb24sICc3Jyk7XG59XG5cbi8qKlxuICogQSB3cmFwcGVyIGZ1bmN0aW9uIHRoYXQgYWRkcyBTZW50cnkgcm91dGluZyBpbnN0cnVtZW50YXRpb24gdG8gYSBSZWFjdCBSb3V0ZXIgdjcgdXNlUm91dGVzIGhvb2suXG4gKiBUaGlzIGlzIHVzZWQgdG8gYXV0b21hdGljYWxseSBjYXB0dXJlIHJvdXRlIGNoYW5nZXMgYXMgdHJhbnNhY3Rpb25zIHdoZW4gdXNpbmcgdGhlIHVzZVJvdXRlcyBob29rLlxuICovXG5mdW5jdGlvbiB3cmFwVXNlUm91dGVzVjcob3JpZ1VzZVJvdXRlcykge1xuICByZXR1cm4gY3JlYXRlVjZDb21wYXRpYmxlV3JhcFVzZVJvdXRlcyhvcmlnVXNlUm91dGVzLCAnNycpO1xufVxuXG5leHBvcnQgeyByZWFjdFJvdXRlclY3QnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbiwgd2l0aFNlbnRyeVJlYWN0Um91dGVyVjdSb3V0aW5nLCB3cmFwQ3JlYXRlQnJvd3NlclJvdXRlclY3LCB3cmFwQ3JlYXRlTWVtb3J5Um91dGVyVjcsIHdyYXBVc2VSb3V0ZXNWNyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3Ryb3V0ZXJ2Ny5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/reactrouterv7.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/redux.js":
/*!************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/redux.js ***!
  \************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   createReduxEnhancer: () => (/* binding */ createReduxEnhancer)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\nconst ACTION_BREADCRUMB_CATEGORY = 'redux.action';\nconst ACTION_BREADCRUMB_TYPE = 'info';\n\nconst defaultOptions = {\n  attachReduxState: true,\n  actionTransformer: action => action,\n  stateTransformer: state => state || null,\n};\n\n/**\n * Creates an enhancer that would be passed to Redux's createStore to log actions and the latest state to Sentry.\n *\n * @param enhancerOptions Options to pass to the enhancer\n */\nfunction createReduxEnhancer(enhancerOptions) {\n  // Note: We return an any type as to not have type conflicts.\n  const options = {\n    ...defaultOptions,\n    ...enhancerOptions,\n  };\n\n  return (next) =>\n    (reducer, initialState) => {\n      options.attachReduxState &&\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getGlobalScope)().addEventProcessor((event, hint) => {\n          try {\n            // @ts-expect-error try catch to reduce bundle size\n            if (event.type === undefined && event.contexts.state.state.type === 'redux') {\n              hint.attachments = [\n                ...(hint.attachments || []),\n                // @ts-expect-error try catch to reduce bundle size\n                { filename: 'redux_state.json', data: JSON.stringify(event.contexts.state.state.value) },\n              ];\n            }\n          } catch {\n            // empty\n          }\n          return event;\n        });\n\n      function sentryWrapReducer(reducer) {\n        return (state, action) => {\n          const newState = reducer(state, action);\n\n          const scope = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n\n          /* Action breadcrumbs */\n          const transformedAction = options.actionTransformer(action);\n          if (typeof transformedAction !== 'undefined' && transformedAction !== null) {\n            (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addBreadcrumb)({\n              category: ACTION_BREADCRUMB_CATEGORY,\n              data: transformedAction,\n              type: ACTION_BREADCRUMB_TYPE,\n            });\n          }\n\n          /* Set latest state to scope */\n          const transformedState = options.stateTransformer(newState);\n          if (typeof transformedState !== 'undefined' && transformedState !== null) {\n            const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n            const options = client?.getOptions();\n            const normalizationDepth = options?.normalizeDepth || 3; // default state normalization depth to 3\n\n            // Set the normalization depth of the redux state to the configured `normalizeDepth` option or a sane number as a fallback\n            const newStateContext = { state: { type: 'redux', value: transformedState } };\n            (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addNonEnumerableProperty)(\n              newStateContext,\n              '__sentry_override_normalization_depth__',\n              3 + // 3 layers for `state.value.transformedState`\n                normalizationDepth, // rest for the actual state\n            );\n\n            scope.setContext('state', newStateContext);\n          } else {\n            scope.setContext('state', null);\n          }\n\n          /* Allow user to configure scope with latest state */\n          const { configureScopeWithState } = options;\n          if (typeof configureScopeWithState === 'function') {\n            configureScopeWithState(scope, newState);\n          }\n\n          return newState;\n        };\n      }\n\n      const store = next(sentryWrapReducer(reducer), initialState);\n\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      store.replaceReducer = new Proxy(store.replaceReducer, {\n        apply: function (target, thisArg, args) {\n          target.apply(thisArg, [sentryWrapReducer(args[0])]);\n        },\n      });\n\n      return store;\n    };\n}\n\n\n//# sourceMappingURL=redux.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL3JlZHV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQW1IOztBQUVuSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDREQUFjO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixzRkFBc0Y7QUFDeEc7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0IsNkRBQWU7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBLFlBQVksMkRBQWE7QUFDekI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQix1REFBUztBQUNwQztBQUNBLHFFQUFxRTs7QUFFckU7QUFDQSxzQ0FBc0MsU0FBUztBQUMvQyxZQUFZLHNFQUF3QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsMEJBQTBCO0FBQzVDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7O0FBRStCO0FBQy9CIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnkrcmVhY3RAOS40Ni4wX3JlYWN0QDE5LjEuMS9ub2RlX21vZHVsZXMvQHNlbnRyeS9yZWFjdC9idWlsZC9lc20vcmVkdXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0R2xvYmFsU2NvcGUsIGdldEN1cnJlbnRTY29wZSwgYWRkQnJlYWRjcnVtYiwgZ2V0Q2xpZW50LCBhZGROb25FbnVtZXJhYmxlUHJvcGVydHkgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuXG5jb25zdCBBQ1RJT05fQlJFQURDUlVNQl9DQVRFR09SWSA9ICdyZWR1eC5hY3Rpb24nO1xuY29uc3QgQUNUSU9OX0JSRUFEQ1JVTUJfVFlQRSA9ICdpbmZvJztcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIGF0dGFjaFJlZHV4U3RhdGU6IHRydWUsXG4gIGFjdGlvblRyYW5zZm9ybWVyOiBhY3Rpb24gPT4gYWN0aW9uLFxuICBzdGF0ZVRyYW5zZm9ybWVyOiBzdGF0ZSA9PiBzdGF0ZSB8fCBudWxsLFxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVuaGFuY2VyIHRoYXQgd291bGQgYmUgcGFzc2VkIHRvIFJlZHV4J3MgY3JlYXRlU3RvcmUgdG8gbG9nIGFjdGlvbnMgYW5kIHRoZSBsYXRlc3Qgc3RhdGUgdG8gU2VudHJ5LlxuICpcbiAqIEBwYXJhbSBlbmhhbmNlck9wdGlvbnMgT3B0aW9ucyB0byBwYXNzIHRvIHRoZSBlbmhhbmNlclxuICovXG5mdW5jdGlvbiBjcmVhdGVSZWR1eEVuaGFuY2VyKGVuaGFuY2VyT3B0aW9ucykge1xuICAvLyBOb3RlOiBXZSByZXR1cm4gYW4gYW55IHR5cGUgYXMgdG8gbm90IGhhdmUgdHlwZSBjb25mbGljdHMuXG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgLi4uZGVmYXVsdE9wdGlvbnMsXG4gICAgLi4uZW5oYW5jZXJPcHRpb25zLFxuICB9O1xuXG4gIHJldHVybiAobmV4dCkgPT5cbiAgICAocmVkdWNlciwgaW5pdGlhbFN0YXRlKSA9PiB7XG4gICAgICBvcHRpb25zLmF0dGFjaFJlZHV4U3RhdGUgJiZcbiAgICAgICAgZ2V0R2xvYmFsU2NvcGUoKS5hZGRFdmVudFByb2Nlc3NvcigoZXZlbnQsIGhpbnQpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0cnkgY2F0Y2ggdG8gcmVkdWNlIGJ1bmRsZSBzaXplXG4gICAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gdW5kZWZpbmVkICYmIGV2ZW50LmNvbnRleHRzLnN0YXRlLnN0YXRlLnR5cGUgPT09ICdyZWR1eCcpIHtcbiAgICAgICAgICAgICAgaGludC5hdHRhY2htZW50cyA9IFtcbiAgICAgICAgICAgICAgICAuLi4oaGludC5hdHRhY2htZW50cyB8fCBbXSksXG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0cnkgY2F0Y2ggdG8gcmVkdWNlIGJ1bmRsZSBzaXplXG4gICAgICAgICAgICAgICAgeyBmaWxlbmFtZTogJ3JlZHV4X3N0YXRlLmpzb24nLCBkYXRhOiBKU09OLnN0cmluZ2lmeShldmVudC5jb250ZXh0cy5zdGF0ZS5zdGF0ZS52YWx1ZSkgfSxcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIGVtcHR5XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBldmVudDtcbiAgICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIHNlbnRyeVdyYXBSZWR1Y2VyKHJlZHVjZXIpIHtcbiAgICAgICAgcmV0dXJuIChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3U3RhdGUgPSByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pO1xuXG4gICAgICAgICAgY29uc3Qgc2NvcGUgPSBnZXRDdXJyZW50U2NvcGUoKTtcblxuICAgICAgICAgIC8qIEFjdGlvbiBicmVhZGNydW1icyAqL1xuICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkQWN0aW9uID0gb3B0aW9ucy5hY3Rpb25UcmFuc2Zvcm1lcihhY3Rpb24pO1xuICAgICAgICAgIGlmICh0eXBlb2YgdHJhbnNmb3JtZWRBY3Rpb24gIT09ICd1bmRlZmluZWQnICYmIHRyYW5zZm9ybWVkQWN0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICBhZGRCcmVhZGNydW1iKHtcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IEFDVElPTl9CUkVBRENSVU1CX0NBVEVHT1JZLFxuICAgICAgICAgICAgICBkYXRhOiB0cmFuc2Zvcm1lZEFjdGlvbixcbiAgICAgICAgICAgICAgdHlwZTogQUNUSU9OX0JSRUFEQ1JVTUJfVFlQRSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8qIFNldCBsYXRlc3Qgc3RhdGUgdG8gc2NvcGUgKi9cbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFN0YXRlID0gb3B0aW9ucy5zdGF0ZVRyYW5zZm9ybWVyKG5ld1N0YXRlKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHRyYW5zZm9ybWVkU3RhdGUgIT09ICd1bmRlZmluZWQnICYmIHRyYW5zZm9ybWVkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGNsaWVudD8uZ2V0T3B0aW9ucygpO1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXphdGlvbkRlcHRoID0gb3B0aW9ucz8ubm9ybWFsaXplRGVwdGggfHwgMzsgLy8gZGVmYXVsdCBzdGF0ZSBub3JtYWxpemF0aW9uIGRlcHRoIHRvIDNcblxuICAgICAgICAgICAgLy8gU2V0IHRoZSBub3JtYWxpemF0aW9uIGRlcHRoIG9mIHRoZSByZWR1eCBzdGF0ZSB0byB0aGUgY29uZmlndXJlZCBgbm9ybWFsaXplRGVwdGhgIG9wdGlvbiBvciBhIHNhbmUgbnVtYmVyIGFzIGEgZmFsbGJhY2tcbiAgICAgICAgICAgIGNvbnN0IG5ld1N0YXRlQ29udGV4dCA9IHsgc3RhdGU6IHsgdHlwZTogJ3JlZHV4JywgdmFsdWU6IHRyYW5zZm9ybWVkU3RhdGUgfSB9O1xuICAgICAgICAgICAgYWRkTm9uRW51bWVyYWJsZVByb3BlcnR5KFxuICAgICAgICAgICAgICBuZXdTdGF0ZUNvbnRleHQsXG4gICAgICAgICAgICAgICdfX3NlbnRyeV9vdmVycmlkZV9ub3JtYWxpemF0aW9uX2RlcHRoX18nLFxuICAgICAgICAgICAgICAzICsgLy8gMyBsYXllcnMgZm9yIGBzdGF0ZS52YWx1ZS50cmFuc2Zvcm1lZFN0YXRlYFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6YXRpb25EZXB0aCwgLy8gcmVzdCBmb3IgdGhlIGFjdHVhbCBzdGF0ZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgc2NvcGUuc2V0Q29udGV4dCgnc3RhdGUnLCBuZXdTdGF0ZUNvbnRleHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzY29wZS5zZXRDb250ZXh0KCdzdGF0ZScsIG51bGwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8qIEFsbG93IHVzZXIgdG8gY29uZmlndXJlIHNjb3BlIHdpdGggbGF0ZXN0IHN0YXRlICovXG4gICAgICAgICAgY29uc3QgeyBjb25maWd1cmVTY29wZVdpdGhTdGF0ZSB9ID0gb3B0aW9ucztcbiAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZ3VyZVNjb3BlV2l0aFN0YXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25maWd1cmVTY29wZVdpdGhTdGF0ZShzY29wZSwgbmV3U3RhdGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RvcmUgPSBuZXh0KHNlbnRyeVdyYXBSZWR1Y2VyKHJlZHVjZXIpLCBpbml0aWFsU3RhdGUpO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgICBzdG9yZS5yZXBsYWNlUmVkdWNlciA9IG5ldyBQcm94eShzdG9yZS5yZXBsYWNlUmVkdWNlciwge1xuICAgICAgICBhcHBseTogZnVuY3Rpb24gKHRhcmdldCwgdGhpc0FyZywgYXJncykge1xuICAgICAgICAgIHRhcmdldC5hcHBseSh0aGlzQXJnLCBbc2VudHJ5V3JhcFJlZHVjZXIoYXJnc1swXSldKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gc3RvcmU7XG4gICAgfTtcbn1cblxuZXhwb3J0IHsgY3JlYXRlUmVkdXhFbmhhbmNlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVkdXguanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/redux.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/sdk.js":
/*!**********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/sdk.js ***!
  \**********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   init: () => (/* binding */ init)\n/* harmony export */ });\n/* harmony import */ var _sentry_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/browser */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/index.js\");\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\n\n\n\n\n/**\n * Inits the React SDK\n */\nfunction init(options) {\n  const opts = {\n    ...options,\n  };\n\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_1__.applySdkMetadata)(opts, 'react');\n  (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.setContext)('react', { version: react__WEBPACK_IMPORTED_MODULE_2__.version });\n  return (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.init)(opts);\n}\n\n\n//# sourceMappingURL=sdk.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL3Nkay5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTZEO0FBQ2I7QUFDaEI7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEVBQUUsOERBQWdCO0FBQ2xCLEVBQUUsMkRBQVUsWUFBWSxPQUFPLDhDQUFFO0FBQ2pDLFNBQVMscURBQU07QUFDZjs7QUFFZ0I7QUFDaEIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeStyZWFjdEA5LjQ2LjBfcmVhY3RAMTkuMS4xL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3JlYWN0L2J1aWxkL2VzbS9zZGsuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2V0Q29udGV4dCwgaW5pdCBhcyBpbml0JDEgfSBmcm9tICdAc2VudHJ5L2Jyb3dzZXInO1xuaW1wb3J0IHsgYXBwbHlTZGtNZXRhZGF0YSB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIEluaXRzIHRoZSBSZWFjdCBTREtcbiAqL1xuZnVuY3Rpb24gaW5pdChvcHRpb25zKSB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgLi4ub3B0aW9ucyxcbiAgfTtcblxuICBhcHBseVNka01ldGFkYXRhKG9wdHMsICdyZWFjdCcpO1xuICBzZXRDb250ZXh0KCdyZWFjdCcsIHsgdmVyc2lvbiB9KTtcbiAgcmV0dXJuIGluaXQkMShvcHRzKTtcbn1cblxuZXhwb3J0IHsgaW5pdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2RrLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/sdk.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/tanstackrouter.js":
/*!*********************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/tanstackrouter.js ***!
  \*********************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   tanstackRouterBrowserTracingIntegration: () => (/* binding */ tanstackRouterBrowserTracingIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/browser */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+browser@9.46.0/node_modules/@sentry/browser/build/npm/esm/index.js\");\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\n\n/**\n * A custom browser tracing integration for TanStack Router.\n *\n * The minimum compatible version of `@tanstack/react-router` is `1.64.0`.\n *\n * @param router A TanStack Router `Router` instance that should be used for routing instrumentation.\n * @param options Sentry browser tracing configuration.\n */\nfunction tanstackRouterBrowserTracingIntegration(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  router, // This is `any` because we don't want any type mismatches if TanStack Router changes their types\n  options = {},\n) {\n  const castRouterInstance = router;\n\n  const browserTracingIntegrationInstance = (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.browserTracingIntegration)({\n    ...options,\n    instrumentNavigation: false,\n    instrumentPageLoad: false,\n  });\n\n  const { instrumentPageLoad = true, instrumentNavigation = true } = options;\n\n  return {\n    ...browserTracingIntegrationInstance,\n    afterAllSetup(client) {\n      browserTracingIntegrationInstance.afterAllSetup(client);\n\n      const initialWindowLocation = _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.WINDOW.location;\n      if (instrumentPageLoad && initialWindowLocation) {\n        const matchedRoutes = castRouterInstance.matchRoutes(\n          initialWindowLocation.pathname,\n          castRouterInstance.options.parseSearch(initialWindowLocation.search),\n          { preload: false, throwOnError: false },\n        );\n\n        const lastMatch = matchedRoutes[matchedRoutes.length - 1];\n\n        (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startBrowserTracingPageLoadSpan)(client, {\n          name: lastMatch ? lastMatch.routeId : initialWindowLocation.pathname,\n          attributes: {\n            [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'pageload',\n            [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.react.tanstack_router',\n            [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: lastMatch ? 'route' : 'url',\n            ...routeMatchToParamSpanAttributes(lastMatch),\n          },\n        });\n      }\n\n      if (instrumentNavigation) {\n        // The onBeforeNavigate hook is called at the very beginning of a navigation and is only called once per navigation, even when the user is redirected\n        castRouterInstance.subscribe('onBeforeNavigate', onBeforeNavigateArgs => {\n          // onBeforeNavigate is called during pageloads. We can avoid creating navigation spans by comparing the states of the to and from arguments.\n          if (onBeforeNavigateArgs.toLocation.state === onBeforeNavigateArgs.fromLocation?.state) {\n            return;\n          }\n\n          const onResolvedMatchedRoutes = castRouterInstance.matchRoutes(\n            onBeforeNavigateArgs.toLocation.pathname,\n            onBeforeNavigateArgs.toLocation.search,\n            { preload: false, throwOnError: false },\n          );\n\n          const onBeforeNavigateLastMatch = onResolvedMatchedRoutes[onResolvedMatchedRoutes.length - 1];\n\n          const navigationLocation = _sentry_browser__WEBPACK_IMPORTED_MODULE_0__.WINDOW.location;\n          const navigationSpan = (0,_sentry_browser__WEBPACK_IMPORTED_MODULE_0__.startBrowserTracingNavigationSpan)(client, {\n            name: onBeforeNavigateLastMatch ? onBeforeNavigateLastMatch.routeId : navigationLocation.pathname,\n            attributes: {\n              [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'navigation',\n              [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.react.tanstack_router',\n              [_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: onBeforeNavigateLastMatch ? 'route' : 'url',\n            },\n          });\n\n          // In case the user is redirected during navigation we want to update the span with the right value.\n          const unsubscribeOnResolved = castRouterInstance.subscribe('onResolved', onResolvedArgs => {\n            unsubscribeOnResolved();\n            if (navigationSpan) {\n              const onResolvedMatchedRoutes = castRouterInstance.matchRoutes(\n                onResolvedArgs.toLocation.pathname,\n                onResolvedArgs.toLocation.search,\n                { preload: false, throwOnError: false },\n              );\n\n              const onResolvedLastMatch = onResolvedMatchedRoutes[onResolvedMatchedRoutes.length - 1];\n\n              if (onResolvedLastMatch) {\n                navigationSpan.updateName(onResolvedLastMatch.routeId);\n                navigationSpan.setAttribute(_sentry_core__WEBPACK_IMPORTED_MODULE_1__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, 'route');\n                navigationSpan.setAttributes(routeMatchToParamSpanAttributes(onResolvedLastMatch));\n              }\n            }\n          });\n        });\n      }\n    },\n  };\n}\n\nfunction routeMatchToParamSpanAttributes(match) {\n  if (!match) {\n    return {};\n  }\n\n  const paramAttributes = {};\n  Object.entries(match.params).forEach(([key, value]) => {\n    paramAttributes[`url.path.params.${key}`] = value; // todo(v10): remove attribute which does not adhere to Sentry's semantic convention\n    paramAttributes[`url.path.parameter.${key}`] = value;\n    paramAttributes[`params.${key}`] = value; // params.[key] is an alias\n  });\n\n  return paramAttributes;\n}\n\n\n//# sourceMappingURL=tanstackrouter.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL3RhbnN0YWNrcm91dGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF3STtBQUNSOztBQUVoSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7O0FBRUEsNENBQTRDLDBFQUF5QjtBQUNyRTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILFVBQVUseURBQXlEOztBQUVuRTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0MsbURBQU07QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHFDQUFxQztBQUNqRDs7QUFFQTs7QUFFQSxRQUFRLGdGQUErQjtBQUN2QztBQUNBO0FBQ0EsYUFBYSxzRUFBNEI7QUFDekMsYUFBYSwwRUFBZ0M7QUFDN0MsYUFBYSwwRUFBZ0M7QUFDN0M7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMscUNBQXFDO0FBQ25EOztBQUVBOztBQUVBLHFDQUFxQyxtREFBTTtBQUMzQyxpQ0FBaUMsa0ZBQWlDO0FBQ2xFO0FBQ0E7QUFDQSxlQUFlLHNFQUE0QjtBQUMzQyxlQUFlLDBFQUFnQztBQUMvQyxlQUFlLDBFQUFnQztBQUMvQyxhQUFhO0FBQ2IsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixxQ0FBcUM7QUFDdkQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDRDQUE0QywwRUFBZ0M7QUFDNUU7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1Q0FBdUMsSUFBSSxZQUFZO0FBQ3ZELDBDQUEwQyxJQUFJO0FBQzlDLDhCQUE4QixJQUFJLFlBQVk7QUFDOUMsR0FBRzs7QUFFSDtBQUNBOztBQUVtRDtBQUNuRCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5K3JlYWN0QDkuNDYuMF9yZWFjdEAxOS4xLjEvbm9kZV9tb2R1bGVzL0BzZW50cnkvcmVhY3QvYnVpbGQvZXNtL3RhbnN0YWNrcm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24sIFdJTkRPVywgc3RhcnRCcm93c2VyVHJhY2luZ1BhZ2VMb2FkU3Bhbiwgc3RhcnRCcm93c2VyVHJhY2luZ05hdmlnYXRpb25TcGFuIH0gZnJvbSAnQHNlbnRyeS9icm93c2VyJztcbmltcG9ydCB7IFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTiwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUCB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5cbi8qKlxuICogQSBjdXN0b20gYnJvd3NlciB0cmFjaW5nIGludGVncmF0aW9uIGZvciBUYW5TdGFjayBSb3V0ZXIuXG4gKlxuICogVGhlIG1pbmltdW0gY29tcGF0aWJsZSB2ZXJzaW9uIG9mIGBAdGFuc3RhY2svcmVhY3Qtcm91dGVyYCBpcyBgMS42NC4wYC5cbiAqXG4gKiBAcGFyYW0gcm91dGVyIEEgVGFuU3RhY2sgUm91dGVyIGBSb3V0ZXJgIGluc3RhbmNlIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHJvdXRpbmcgaW5zdHJ1bWVudGF0aW9uLlxuICogQHBhcmFtIG9wdGlvbnMgU2VudHJ5IGJyb3dzZXIgdHJhY2luZyBjb25maWd1cmF0aW9uLlxuICovXG5mdW5jdGlvbiB0YW5zdGFja1JvdXRlckJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24oXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHJvdXRlciwgLy8gVGhpcyBpcyBgYW55YCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgYW55IHR5cGUgbWlzbWF0Y2hlcyBpZiBUYW5TdGFjayBSb3V0ZXIgY2hhbmdlcyB0aGVpciB0eXBlc1xuICBvcHRpb25zID0ge30sXG4pIHtcbiAgY29uc3QgY2FzdFJvdXRlckluc3RhbmNlID0gcm91dGVyO1xuXG4gIGNvbnN0IGJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb25JbnN0YW5jZSA9IGJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24oe1xuICAgIC4uLm9wdGlvbnMsXG4gICAgaW5zdHJ1bWVudE5hdmlnYXRpb246IGZhbHNlLFxuICAgIGluc3RydW1lbnRQYWdlTG9hZDogZmFsc2UsXG4gIH0pO1xuXG4gIGNvbnN0IHsgaW5zdHJ1bWVudFBhZ2VMb2FkID0gdHJ1ZSwgaW5zdHJ1bWVudE5hdmlnYXRpb24gPSB0cnVlIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgLi4uYnJvd3NlclRyYWNpbmdJbnRlZ3JhdGlvbkluc3RhbmNlLFxuICAgIGFmdGVyQWxsU2V0dXAoY2xpZW50KSB7XG4gICAgICBicm93c2VyVHJhY2luZ0ludGVncmF0aW9uSW5zdGFuY2UuYWZ0ZXJBbGxTZXR1cChjbGllbnQpO1xuXG4gICAgICBjb25zdCBpbml0aWFsV2luZG93TG9jYXRpb24gPSBXSU5ET1cubG9jYXRpb247XG4gICAgICBpZiAoaW5zdHJ1bWVudFBhZ2VMb2FkICYmIGluaXRpYWxXaW5kb3dMb2NhdGlvbikge1xuICAgICAgICBjb25zdCBtYXRjaGVkUm91dGVzID0gY2FzdFJvdXRlckluc3RhbmNlLm1hdGNoUm91dGVzKFxuICAgICAgICAgIGluaXRpYWxXaW5kb3dMb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgICBjYXN0Um91dGVySW5zdGFuY2Uub3B0aW9ucy5wYXJzZVNlYXJjaChpbml0aWFsV2luZG93TG9jYXRpb24uc2VhcmNoKSxcbiAgICAgICAgICB7IHByZWxvYWQ6IGZhbHNlLCB0aHJvd09uRXJyb3I6IGZhbHNlIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgbGFzdE1hdGNoID0gbWF0Y2hlZFJvdXRlc1ttYXRjaGVkUm91dGVzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgIHN0YXJ0QnJvd3NlclRyYWNpbmdQYWdlTG9hZFNwYW4oY2xpZW50LCB7XG4gICAgICAgICAgbmFtZTogbGFzdE1hdGNoID8gbGFzdE1hdGNoLnJvdXRlSWQgOiBpbml0aWFsV2luZG93TG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1BdOiAncGFnZWxvYWQnLFxuICAgICAgICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOXTogJ2F1dG8ucGFnZWxvYWQucmVhY3QudGFuc3RhY2tfcm91dGVyJyxcbiAgICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRV06IGxhc3RNYXRjaCA/ICdyb3V0ZScgOiAndXJsJyxcbiAgICAgICAgICAgIC4uLnJvdXRlTWF0Y2hUb1BhcmFtU3BhbkF0dHJpYnV0ZXMobGFzdE1hdGNoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluc3RydW1lbnROYXZpZ2F0aW9uKSB7XG4gICAgICAgIC8vIFRoZSBvbkJlZm9yZU5hdmlnYXRlIGhvb2sgaXMgY2FsbGVkIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiBhIG5hdmlnYXRpb24gYW5kIGlzIG9ubHkgY2FsbGVkIG9uY2UgcGVyIG5hdmlnYXRpb24sIGV2ZW4gd2hlbiB0aGUgdXNlciBpcyByZWRpcmVjdGVkXG4gICAgICAgIGNhc3RSb3V0ZXJJbnN0YW5jZS5zdWJzY3JpYmUoJ29uQmVmb3JlTmF2aWdhdGUnLCBvbkJlZm9yZU5hdmlnYXRlQXJncyA9PiB7XG4gICAgICAgICAgLy8gb25CZWZvcmVOYXZpZ2F0ZSBpcyBjYWxsZWQgZHVyaW5nIHBhZ2Vsb2Fkcy4gV2UgY2FuIGF2b2lkIGNyZWF0aW5nIG5hdmlnYXRpb24gc3BhbnMgYnkgY29tcGFyaW5nIHRoZSBzdGF0ZXMgb2YgdGhlIHRvIGFuZCBmcm9tIGFyZ3VtZW50cy5cbiAgICAgICAgICBpZiAob25CZWZvcmVOYXZpZ2F0ZUFyZ3MudG9Mb2NhdGlvbi5zdGF0ZSA9PT0gb25CZWZvcmVOYXZpZ2F0ZUFyZ3MuZnJvbUxvY2F0aW9uPy5zdGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG9uUmVzb2x2ZWRNYXRjaGVkUm91dGVzID0gY2FzdFJvdXRlckluc3RhbmNlLm1hdGNoUm91dGVzKFxuICAgICAgICAgICAgb25CZWZvcmVOYXZpZ2F0ZUFyZ3MudG9Mb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgICAgIG9uQmVmb3JlTmF2aWdhdGVBcmdzLnRvTG9jYXRpb24uc2VhcmNoLFxuICAgICAgICAgICAgeyBwcmVsb2FkOiBmYWxzZSwgdGhyb3dPbkVycm9yOiBmYWxzZSB9LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBvbkJlZm9yZU5hdmlnYXRlTGFzdE1hdGNoID0gb25SZXNvbHZlZE1hdGNoZWRSb3V0ZXNbb25SZXNvbHZlZE1hdGNoZWRSb3V0ZXMubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uTG9jYXRpb24gPSBXSU5ET1cubG9jYXRpb247XG4gICAgICAgICAgY29uc3QgbmF2aWdhdGlvblNwYW4gPSBzdGFydEJyb3dzZXJUcmFjaW5nTmF2aWdhdGlvblNwYW4oY2xpZW50LCB7XG4gICAgICAgICAgICBuYW1lOiBvbkJlZm9yZU5hdmlnYXRlTGFzdE1hdGNoID8gb25CZWZvcmVOYXZpZ2F0ZUxhc3RNYXRjaC5yb3V0ZUlkIDogbmF2aWdhdGlvbkxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUF06ICduYXZpZ2F0aW9uJyxcbiAgICAgICAgICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOXTogJ2F1dG8ubmF2aWdhdGlvbi5yZWFjdC50YW5zdGFja19yb3V0ZXInLFxuICAgICAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0VdOiBvbkJlZm9yZU5hdmlnYXRlTGFzdE1hdGNoID8gJ3JvdXRlJyA6ICd1cmwnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEluIGNhc2UgdGhlIHVzZXIgaXMgcmVkaXJlY3RlZCBkdXJpbmcgbmF2aWdhdGlvbiB3ZSB3YW50IHRvIHVwZGF0ZSB0aGUgc3BhbiB3aXRoIHRoZSByaWdodCB2YWx1ZS5cbiAgICAgICAgICBjb25zdCB1bnN1YnNjcmliZU9uUmVzb2x2ZWQgPSBjYXN0Um91dGVySW5zdGFuY2Uuc3Vic2NyaWJlKCdvblJlc29sdmVkJywgb25SZXNvbHZlZEFyZ3MgPT4ge1xuICAgICAgICAgICAgdW5zdWJzY3JpYmVPblJlc29sdmVkKCk7XG4gICAgICAgICAgICBpZiAobmF2aWdhdGlvblNwYW4pIHtcbiAgICAgICAgICAgICAgY29uc3Qgb25SZXNvbHZlZE1hdGNoZWRSb3V0ZXMgPSBjYXN0Um91dGVySW5zdGFuY2UubWF0Y2hSb3V0ZXMoXG4gICAgICAgICAgICAgICAgb25SZXNvbHZlZEFyZ3MudG9Mb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgICAgICAgICBvblJlc29sdmVkQXJncy50b0xvY2F0aW9uLnNlYXJjaCxcbiAgICAgICAgICAgICAgICB7IHByZWxvYWQ6IGZhbHNlLCB0aHJvd09uRXJyb3I6IGZhbHNlIH0sXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgY29uc3Qgb25SZXNvbHZlZExhc3RNYXRjaCA9IG9uUmVzb2x2ZWRNYXRjaGVkUm91dGVzW29uUmVzb2x2ZWRNYXRjaGVkUm91dGVzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICAgIGlmIChvblJlc29sdmVkTGFzdE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgbmF2aWdhdGlvblNwYW4udXBkYXRlTmFtZShvblJlc29sdmVkTGFzdE1hdGNoLnJvdXRlSWQpO1xuICAgICAgICAgICAgICAgIG5hdmlnYXRpb25TcGFuLnNldEF0dHJpYnV0ZShTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX1NPVVJDRSwgJ3JvdXRlJyk7XG4gICAgICAgICAgICAgICAgbmF2aWdhdGlvblNwYW4uc2V0QXR0cmlidXRlcyhyb3V0ZU1hdGNoVG9QYXJhbVNwYW5BdHRyaWJ1dGVzKG9uUmVzb2x2ZWRMYXN0TWF0Y2gpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiByb3V0ZU1hdGNoVG9QYXJhbVNwYW5BdHRyaWJ1dGVzKG1hdGNoKSB7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBwYXJhbUF0dHJpYnV0ZXMgPSB7fTtcbiAgT2JqZWN0LmVudHJpZXMobWF0Y2gucGFyYW1zKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBwYXJhbUF0dHJpYnV0ZXNbYHVybC5wYXRoLnBhcmFtcy4ke2tleX1gXSA9IHZhbHVlOyAvLyB0b2RvKHYxMCk6IHJlbW92ZSBhdHRyaWJ1dGUgd2hpY2ggZG9lcyBub3QgYWRoZXJlIHRvIFNlbnRyeSdzIHNlbWFudGljIGNvbnZlbnRpb25cbiAgICBwYXJhbUF0dHJpYnV0ZXNbYHVybC5wYXRoLnBhcmFtZXRlci4ke2tleX1gXSA9IHZhbHVlO1xuICAgIHBhcmFtQXR0cmlidXRlc1tgcGFyYW1zLiR7a2V5fWBdID0gdmFsdWU7IC8vIHBhcmFtcy5ba2V5XSBpcyBhbiBhbGlhc1xuICB9KTtcblxuICByZXR1cm4gcGFyYW1BdHRyaWJ1dGVzO1xufVxuXG5leHBvcnQgeyB0YW5zdGFja1JvdXRlckJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRhbnN0YWNrcm91dGVyLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry+react@9.46.0_react@19.1.1/node_modules/@sentry/react/build/esm/tanstackrouter.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/debug-build.js":
/*!***************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/debug-build.js ***!
  \***************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   DEBUG_BUILD: () => (/* binding */ DEBUG_BUILD)\n/* harmony export */ });\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = ( false || false);\n\n\n//# sourceMappingURL=debug-build.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL2RlYnVnLWJ1aWxkLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLE1BQXVDLElBQUksS0FBZ0I7O0FBRXpEO0FBQ3ZCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vZGVidWctYnVpbGQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIHNlcnZlcyBhcyBhIGJ1aWxkIHRpbWUgZmxhZyB0aGF0IHdpbGwgYmUgdHJ1ZSBieSBkZWZhdWx0LCBidXQgZmFsc2UgaW4gbm9uLWRlYnVnIGJ1aWxkcyBvciBpZiB1c2VycyByZXBsYWNlIGBfX1NFTlRSWV9ERUJVR19fYCBpbiB0aGVpciBnZW5lcmF0ZWQgY29kZS5cbiAqXG4gKiBBVFRFTlRJT046IFRoaXMgY29uc3RhbnQgbXVzdCBuZXZlciBjcm9zcyBwYWNrYWdlIGJvdW5kYXJpZXMgKGkuZS4gYmUgZXhwb3J0ZWQpIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciB0cmVlIHNoYWtpbmcuXG4gKi9cbmNvbnN0IERFQlVHX0JVSUxEID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTtcblxuZXhwb3J0IHsgREVCVUdfQlVJTEQgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlYnVnLWJ1aWxkLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/debug-build.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/getNativeImplementation.js":
/*!***************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/getNativeImplementation.js ***!
  \***************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   clearCachedImplementation: () => (/* binding */ clearCachedImplementation),\n/* harmony export */   fetch: () => (/* binding */ fetch),\n/* harmony export */   getNativeImplementation: () => (/* binding */ getNativeImplementation),\n/* harmony export */   setTimeout: () => (/* binding */ setTimeout)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/debug-build.js\");\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./types.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/types.js\");\n\n\n\n\n/**\n * We generally want to use window.fetch / window.setTimeout.\n * However, in some cases this may be wrapped (e.g. by Zone.js for Angular),\n * so we try to get an unpatched version of this from a sandboxed iframe.\n */\n\nconst cachedImplementations = {};\n\n/**\n * Get the native implementation of a browser function.\n *\n * This can be used to ensure we get an unwrapped version of a function, in cases where a wrapped function can lead to problems.\n *\n * The following methods can be retrieved:\n * - `setTimeout`: This can be wrapped by e.g. Angular, causing change detection to be triggered.\n * - `fetch`: This can be wrapped by e.g. ad-blockers, causing an infinite loop when a request is blocked.\n */\nfunction getNativeImplementation(\n  name,\n) {\n  const cached = cachedImplementations[name];\n  if (cached) {\n    return cached;\n  }\n\n  let impl = _types_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW[name] ;\n\n  // Fast path to avoid DOM I/O\n  if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isNativeFunction)(impl)) {\n    return (cachedImplementations[name] = impl.bind(_types_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW) );\n  }\n\n  const document = _types_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW.document;\n  // eslint-disable-next-line deprecation/deprecation\n  if (document && typeof document.createElement === 'function') {\n    try {\n      const sandbox = document.createElement('iframe');\n      sandbox.hidden = true;\n      document.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow?.[name]) {\n        impl = contentWindow[name] ;\n      }\n      document.head.removeChild(sandbox);\n    } catch (e) {\n      // Could not create sandbox iframe, just use window.xxx\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.warn(`Could not create sandbox iframe for ${name} check, bailing to window.${name}: `, e);\n    }\n  }\n\n  // Sanity check: This _should_ not happen, but if it does, we just skip caching...\n  // This can happen e.g. in tests where fetch may not be available in the env, or similar.\n  if (!impl) {\n    return impl;\n  }\n\n  return (cachedImplementations[name] = impl.bind(_types_js__WEBPACK_IMPORTED_MODULE_2__.WINDOW) );\n}\n\n/** Clear a cached implementation. */\nfunction clearCachedImplementation(name) {\n  cachedImplementations[name] = undefined;\n}\n\n/**\n * A special usecase for incorrectly wrapped Fetch APIs in conjunction with ad-blockers.\n * Whenever someone wraps the Fetch API and returns the wrong promise chain,\n * this chain becomes orphaned and there is no possible way to capture it's rejections\n * other than allowing it bubble up to this very handler. eg.\n *\n * const f = window.fetch;\n * window.fetch = function () {\n *   const p = f.apply(this, arguments);\n *\n *   p.then(function() {\n *     console.log('hi.');\n *   });\n *\n *   return p;\n * }\n *\n * `p.then(function () { ... })` is producing a completely separate promise chain,\n * however, what's returned is `p` - the result of original `fetch` call.\n *\n * This mean, that whenever we use the Fetch API to send our own requests, _and_\n * some ad-blocker blocks it, this orphaned chain will _always_ reject,\n * effectively causing another event to be captured.\n * This makes a whole process become an infinite loop, which we need to somehow\n * deal with, and break it in one way or another.\n *\n * To deal with this issue, we are making sure that we _always_ use the real\n * browser Fetch API, instead of relying on what `window.fetch` exposes.\n * The only downside to this would be missing our own requests as breadcrumbs,\n * but because we are already not doing this, it should be just fine.\n *\n * Possible failed fetch error messages per-browser:\n *\n * Chrome:  Failed to fetch\n * Edge:    Failed to Fetch\n * Firefox: NetworkError when attempting to fetch resource\n * Safari:  resource blocked by content blocker\n */\nfunction fetch(...rest) {\n  return getNativeImplementation('fetch')(...rest);\n}\n\n/**\n * Get an unwrapped `setTimeout` method.\n * This ensures that even if e.g. Angular wraps `setTimeout`, we get the native implementation,\n * avoiding triggering change detection.\n */\nfunction setTimeout(...rest) {\n  return getNativeImplementation('setTimeout')(...rest);\n}\n\n\n//# sourceMappingURL=getNativeImplementation.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL2dldE5hdGl2ZUltcGxlbWVudGF0aW9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBdUQ7QUFDUjtBQUNYOztBQUVwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsNkNBQU07O0FBRW5CO0FBQ0EsTUFBTSw4REFBZ0I7QUFDdEIsb0RBQW9ELDZDQUFNO0FBQzFEOztBQUVBLG1CQUFtQiw2Q0FBTTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTSx3REFBVyxJQUFJLCtDQUFLLDZDQUE2QyxNQUFNLDJCQUEyQixLQUFLO0FBQzdHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrREFBa0QsNkNBQU07QUFDeEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLEtBQUs7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVpRjtBQUNqRiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL2dldE5hdGl2ZUltcGxlbWVudGF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzTmF0aXZlRnVuY3Rpb24sIGRlYnVnIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IERFQlVHX0JVSUxEIH0gZnJvbSAnLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBXSU5ET1cgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqXG4gKiBXZSBnZW5lcmFsbHkgd2FudCB0byB1c2Ugd2luZG93LmZldGNoIC8gd2luZG93LnNldFRpbWVvdXQuXG4gKiBIb3dldmVyLCBpbiBzb21lIGNhc2VzIHRoaXMgbWF5IGJlIHdyYXBwZWQgKGUuZy4gYnkgWm9uZS5qcyBmb3IgQW5ndWxhciksXG4gKiBzbyB3ZSB0cnkgdG8gZ2V0IGFuIHVucGF0Y2hlZCB2ZXJzaW9uIG9mIHRoaXMgZnJvbSBhIHNhbmRib3hlZCBpZnJhbWUuXG4gKi9cblxuY29uc3QgY2FjaGVkSW1wbGVtZW50YXRpb25zID0ge307XG5cbi8qKlxuICogR2V0IHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgYSBicm93c2VyIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gZW5zdXJlIHdlIGdldCBhbiB1bndyYXBwZWQgdmVyc2lvbiBvZiBhIGZ1bmN0aW9uLCBpbiBjYXNlcyB3aGVyZSBhIHdyYXBwZWQgZnVuY3Rpb24gY2FuIGxlYWQgdG8gcHJvYmxlbXMuXG4gKlxuICogVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSByZXRyaWV2ZWQ6XG4gKiAtIGBzZXRUaW1lb3V0YDogVGhpcyBjYW4gYmUgd3JhcHBlZCBieSBlLmcuIEFuZ3VsYXIsIGNhdXNpbmcgY2hhbmdlIGRldGVjdGlvbiB0byBiZSB0cmlnZ2VyZWQuXG4gKiAtIGBmZXRjaGA6IFRoaXMgY2FuIGJlIHdyYXBwZWQgYnkgZS5nLiBhZC1ibG9ja2VycywgY2F1c2luZyBhbiBpbmZpbml0ZSBsb29wIHdoZW4gYSByZXF1ZXN0IGlzIGJsb2NrZWQuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZUltcGxlbWVudGF0aW9uKFxuICBuYW1lLFxuKSB7XG4gIGNvbnN0IGNhY2hlZCA9IGNhY2hlZEltcGxlbWVudGF0aW9uc1tuYW1lXTtcbiAgaWYgKGNhY2hlZCkge1xuICAgIHJldHVybiBjYWNoZWQ7XG4gIH1cblxuICBsZXQgaW1wbCA9IFdJTkRPV1tuYW1lXSA7XG5cbiAgLy8gRmFzdCBwYXRoIHRvIGF2b2lkIERPTSBJL09cbiAgaWYgKGlzTmF0aXZlRnVuY3Rpb24oaW1wbCkpIHtcbiAgICByZXR1cm4gKGNhY2hlZEltcGxlbWVudGF0aW9uc1tuYW1lXSA9IGltcGwuYmluZChXSU5ET1cpICk7XG4gIH1cblxuICBjb25zdCBkb2N1bWVudCA9IFdJTkRPVy5kb2N1bWVudDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGlmIChkb2N1bWVudCAmJiB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzYW5kYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gICAgICBzYW5kYm94LmhpZGRlbiA9IHRydWU7XG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNhbmRib3gpO1xuICAgICAgY29uc3QgY29udGVudFdpbmRvdyA9IHNhbmRib3guY29udGVudFdpbmRvdztcbiAgICAgIGlmIChjb250ZW50V2luZG93Py5bbmFtZV0pIHtcbiAgICAgICAgaW1wbCA9IGNvbnRlbnRXaW5kb3dbbmFtZV0gO1xuICAgICAgfVxuICAgICAgZG9jdW1lbnQuaGVhZC5yZW1vdmVDaGlsZChzYW5kYm94KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBDb3VsZCBub3QgY3JlYXRlIHNhbmRib3ggaWZyYW1lLCBqdXN0IHVzZSB3aW5kb3cueHh4XG4gICAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy53YXJuKGBDb3VsZCBub3QgY3JlYXRlIHNhbmRib3ggaWZyYW1lIGZvciAke25hbWV9IGNoZWNrLCBiYWlsaW5nIHRvIHdpbmRvdy4ke25hbWV9OiBgLCBlKTtcbiAgICB9XG4gIH1cblxuICAvLyBTYW5pdHkgY2hlY2s6IFRoaXMgX3Nob3VsZF8gbm90IGhhcHBlbiwgYnV0IGlmIGl0IGRvZXMsIHdlIGp1c3Qgc2tpcCBjYWNoaW5nLi4uXG4gIC8vIFRoaXMgY2FuIGhhcHBlbiBlLmcuIGluIHRlc3RzIHdoZXJlIGZldGNoIG1heSBub3QgYmUgYXZhaWxhYmxlIGluIHRoZSBlbnYsIG9yIHNpbWlsYXIuXG4gIGlmICghaW1wbCkge1xuICAgIHJldHVybiBpbXBsO1xuICB9XG5cbiAgcmV0dXJuIChjYWNoZWRJbXBsZW1lbnRhdGlvbnNbbmFtZV0gPSBpbXBsLmJpbmQoV0lORE9XKSApO1xufVxuXG4vKiogQ2xlYXIgYSBjYWNoZWQgaW1wbGVtZW50YXRpb24uICovXG5mdW5jdGlvbiBjbGVhckNhY2hlZEltcGxlbWVudGF0aW9uKG5hbWUpIHtcbiAgY2FjaGVkSW1wbGVtZW50YXRpb25zW25hbWVdID0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEEgc3BlY2lhbCB1c2VjYXNlIGZvciBpbmNvcnJlY3RseSB3cmFwcGVkIEZldGNoIEFQSXMgaW4gY29uanVuY3Rpb24gd2l0aCBhZC1ibG9ja2Vycy5cbiAqIFdoZW5ldmVyIHNvbWVvbmUgd3JhcHMgdGhlIEZldGNoIEFQSSBhbmQgcmV0dXJucyB0aGUgd3JvbmcgcHJvbWlzZSBjaGFpbixcbiAqIHRoaXMgY2hhaW4gYmVjb21lcyBvcnBoYW5lZCBhbmQgdGhlcmUgaXMgbm8gcG9zc2libGUgd2F5IHRvIGNhcHR1cmUgaXQncyByZWplY3Rpb25zXG4gKiBvdGhlciB0aGFuIGFsbG93aW5nIGl0IGJ1YmJsZSB1cCB0byB0aGlzIHZlcnkgaGFuZGxlci4gZWcuXG4gKlxuICogY29uc3QgZiA9IHdpbmRvdy5mZXRjaDtcbiAqIHdpbmRvdy5mZXRjaCA9IGZ1bmN0aW9uICgpIHtcbiAqICAgY29uc3QgcCA9IGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAqXG4gKiAgIHAudGhlbihmdW5jdGlvbigpIHtcbiAqICAgICBjb25zb2xlLmxvZygnaGkuJyk7XG4gKiAgIH0pO1xuICpcbiAqICAgcmV0dXJuIHA7XG4gKiB9XG4gKlxuICogYHAudGhlbihmdW5jdGlvbiAoKSB7IC4uLiB9KWAgaXMgcHJvZHVjaW5nIGEgY29tcGxldGVseSBzZXBhcmF0ZSBwcm9taXNlIGNoYWluLFxuICogaG93ZXZlciwgd2hhdCdzIHJldHVybmVkIGlzIGBwYCAtIHRoZSByZXN1bHQgb2Ygb3JpZ2luYWwgYGZldGNoYCBjYWxsLlxuICpcbiAqIFRoaXMgbWVhbiwgdGhhdCB3aGVuZXZlciB3ZSB1c2UgdGhlIEZldGNoIEFQSSB0byBzZW5kIG91ciBvd24gcmVxdWVzdHMsIF9hbmRfXG4gKiBzb21lIGFkLWJsb2NrZXIgYmxvY2tzIGl0LCB0aGlzIG9ycGhhbmVkIGNoYWluIHdpbGwgX2Fsd2F5c18gcmVqZWN0LFxuICogZWZmZWN0aXZlbHkgY2F1c2luZyBhbm90aGVyIGV2ZW50IHRvIGJlIGNhcHR1cmVkLlxuICogVGhpcyBtYWtlcyBhIHdob2xlIHByb2Nlc3MgYmVjb21lIGFuIGluZmluaXRlIGxvb3AsIHdoaWNoIHdlIG5lZWQgdG8gc29tZWhvd1xuICogZGVhbCB3aXRoLCBhbmQgYnJlYWsgaXQgaW4gb25lIHdheSBvciBhbm90aGVyLlxuICpcbiAqIFRvIGRlYWwgd2l0aCB0aGlzIGlzc3VlLCB3ZSBhcmUgbWFraW5nIHN1cmUgdGhhdCB3ZSBfYWx3YXlzXyB1c2UgdGhlIHJlYWxcbiAqIGJyb3dzZXIgRmV0Y2ggQVBJLCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gd2hhdCBgd2luZG93LmZldGNoYCBleHBvc2VzLlxuICogVGhlIG9ubHkgZG93bnNpZGUgdG8gdGhpcyB3b3VsZCBiZSBtaXNzaW5nIG91ciBvd24gcmVxdWVzdHMgYXMgYnJlYWRjcnVtYnMsXG4gKiBidXQgYmVjYXVzZSB3ZSBhcmUgYWxyZWFkeSBub3QgZG9pbmcgdGhpcywgaXQgc2hvdWxkIGJlIGp1c3QgZmluZS5cbiAqXG4gKiBQb3NzaWJsZSBmYWlsZWQgZmV0Y2ggZXJyb3IgbWVzc2FnZXMgcGVyLWJyb3dzZXI6XG4gKlxuICogQ2hyb21lOiAgRmFpbGVkIHRvIGZldGNoXG4gKiBFZGdlOiAgICBGYWlsZWQgdG8gRmV0Y2hcbiAqIEZpcmVmb3g6IE5ldHdvcmtFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gZmV0Y2ggcmVzb3VyY2VcbiAqIFNhZmFyaTogIHJlc291cmNlIGJsb2NrZWQgYnkgY29udGVudCBibG9ja2VyXG4gKi9cbmZ1bmN0aW9uIGZldGNoKC4uLnJlc3QpIHtcbiAgcmV0dXJuIGdldE5hdGl2ZUltcGxlbWVudGF0aW9uKCdmZXRjaCcpKC4uLnJlc3QpO1xufVxuXG4vKipcbiAqIEdldCBhbiB1bndyYXBwZWQgYHNldFRpbWVvdXRgIG1ldGhvZC5cbiAqIFRoaXMgZW5zdXJlcyB0aGF0IGV2ZW4gaWYgZS5nLiBBbmd1bGFyIHdyYXBzIGBzZXRUaW1lb3V0YCwgd2UgZ2V0IHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sXG4gKiBhdm9pZGluZyB0cmlnZ2VyaW5nIGNoYW5nZSBkZXRlY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNldFRpbWVvdXQoLi4ucmVzdCkge1xuICByZXR1cm4gZ2V0TmF0aXZlSW1wbGVtZW50YXRpb24oJ3NldFRpbWVvdXQnKSguLi5yZXN0KTtcbn1cblxuZXhwb3J0IHsgY2xlYXJDYWNoZWRJbXBsZW1lbnRhdGlvbiwgZmV0Y2gsIGdldE5hdGl2ZUltcGxlbWVudGF0aW9uLCBzZXRUaW1lb3V0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXROYXRpdmVJbXBsZW1lbnRhdGlvbi5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/getNativeImplementation.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/index.js":
/*!*********************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/index.js ***!
  \*********************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   SENTRY_XHR_DATA_KEY: () => (/* reexport safe */ _instrument_xhr_js__WEBPACK_IMPORTED_MODULE_7__.SENTRY_XHR_DATA_KEY),\n/* harmony export */   addClickKeypressInstrumentationHandler: () => (/* reexport safe */ _instrument_dom_js__WEBPACK_IMPORTED_MODULE_4__.addClickKeypressInstrumentationHandler),\n/* harmony export */   addClsInstrumentationHandler: () => (/* reexport safe */ _metrics_instrument_js__WEBPACK_IMPORTED_MODULE_0__.addClsInstrumentationHandler),\n/* harmony export */   addFidInstrumentationHandler: () => (/* reexport safe */ _metrics_instrument_js__WEBPACK_IMPORTED_MODULE_0__.addFidInstrumentationHandler),\n/* harmony export */   addHistoryInstrumentationHandler: () => (/* reexport safe */ _instrument_history_js__WEBPACK_IMPORTED_MODULE_5__.addHistoryInstrumentationHandler),\n/* harmony export */   addInpInstrumentationHandler: () => (/* reexport safe */ _metrics_instrument_js__WEBPACK_IMPORTED_MODULE_0__.addInpInstrumentationHandler),\n/* harmony export */   addLcpInstrumentationHandler: () => (/* reexport safe */ _metrics_instrument_js__WEBPACK_IMPORTED_MODULE_0__.addLcpInstrumentationHandler),\n/* harmony export */   addPerformanceEntries: () => (/* reexport safe */ _metrics_browserMetrics_js__WEBPACK_IMPORTED_MODULE_1__.addPerformanceEntries),\n/* harmony export */   addPerformanceInstrumentationHandler: () => (/* reexport safe */ _metrics_instrument_js__WEBPACK_IMPORTED_MODULE_0__.addPerformanceInstrumentationHandler),\n/* harmony export */   addTtfbInstrumentationHandler: () => (/* reexport safe */ _metrics_instrument_js__WEBPACK_IMPORTED_MODULE_0__.addTtfbInstrumentationHandler),\n/* harmony export */   addXhrInstrumentationHandler: () => (/* reexport safe */ _instrument_xhr_js__WEBPACK_IMPORTED_MODULE_7__.addXhrInstrumentationHandler),\n/* harmony export */   clearCachedImplementation: () => (/* reexport safe */ _getNativeImplementation_js__WEBPACK_IMPORTED_MODULE_6__.clearCachedImplementation),\n/* harmony export */   extractNetworkProtocol: () => (/* reexport safe */ _metrics_utils_js__WEBPACK_IMPORTED_MODULE_3__.extractNetworkProtocol),\n/* harmony export */   fetch: () => (/* reexport safe */ _getNativeImplementation_js__WEBPACK_IMPORTED_MODULE_6__.fetch),\n/* harmony export */   getBodyString: () => (/* reexport safe */ _networkUtils_js__WEBPACK_IMPORTED_MODULE_8__.getBodyString),\n/* harmony export */   getFetchRequestArgBody: () => (/* reexport safe */ _networkUtils_js__WEBPACK_IMPORTED_MODULE_8__.getFetchRequestArgBody),\n/* harmony export */   getNativeImplementation: () => (/* reexport safe */ _getNativeImplementation_js__WEBPACK_IMPORTED_MODULE_6__.getNativeImplementation),\n/* harmony export */   registerInpInteractionListener: () => (/* reexport safe */ _metrics_inp_js__WEBPACK_IMPORTED_MODULE_9__.registerInpInteractionListener),\n/* harmony export */   serializeFormData: () => (/* reexport safe */ _networkUtils_js__WEBPACK_IMPORTED_MODULE_8__.serializeFormData),\n/* harmony export */   setTimeout: () => (/* reexport safe */ _getNativeImplementation_js__WEBPACK_IMPORTED_MODULE_6__.setTimeout),\n/* harmony export */   startTrackingElementTiming: () => (/* reexport safe */ _metrics_elementTiming_js__WEBPACK_IMPORTED_MODULE_2__.startTrackingElementTiming),\n/* harmony export */   startTrackingINP: () => (/* reexport safe */ _metrics_inp_js__WEBPACK_IMPORTED_MODULE_9__.startTrackingINP),\n/* harmony export */   startTrackingInteractions: () => (/* reexport safe */ _metrics_browserMetrics_js__WEBPACK_IMPORTED_MODULE_1__.startTrackingInteractions),\n/* harmony export */   startTrackingLongAnimationFrames: () => (/* reexport safe */ _metrics_browserMetrics_js__WEBPACK_IMPORTED_MODULE_1__.startTrackingLongAnimationFrames),\n/* harmony export */   startTrackingLongTasks: () => (/* reexport safe */ _metrics_browserMetrics_js__WEBPACK_IMPORTED_MODULE_1__.startTrackingLongTasks),\n/* harmony export */   startTrackingWebVitals: () => (/* reexport safe */ _metrics_browserMetrics_js__WEBPACK_IMPORTED_MODULE_1__.startTrackingWebVitals)\n/* harmony export */ });\n/* harmony import */ var _metrics_instrument_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./metrics/instrument.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/instrument.js\");\n/* harmony import */ var _metrics_browserMetrics_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./metrics/browserMetrics.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/browserMetrics.js\");\n/* harmony import */ var _metrics_elementTiming_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./metrics/elementTiming.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/elementTiming.js\");\n/* harmony import */ var _metrics_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./metrics/utils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/utils.js\");\n/* harmony import */ var _instrument_dom_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./instrument/dom.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/instrument/dom.js\");\n/* harmony import */ var _instrument_history_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./instrument/history.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/instrument/history.js\");\n/* harmony import */ var _getNativeImplementation_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getNativeImplementation.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/getNativeImplementation.js\");\n/* harmony import */ var _instrument_xhr_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./instrument/xhr.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/instrument/xhr.js\");\n/* harmony import */ var _networkUtils_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./networkUtils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/networkUtils.js\");\n/* harmony import */ var _metrics_inp_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./metrics/inp.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/inp.js\");\n\n\n\n\n\n\n\n\n\n\n//# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFzTztBQUNyRDtBQUN6RztBQUNaO0FBQ2lCO0FBQ0Y7QUFDMEM7QUFDN0I7QUFDSztBQUNUO0FBQ3BGIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgYWRkQ2xzSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgYWRkRmlkSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgYWRkSW5wSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgYWRkTGNwSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgYWRkUGVyZm9ybWFuY2VJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBhZGRUdGZiSW5zdHJ1bWVudGF0aW9uSGFuZGxlciB9IGZyb20gJy4vbWV0cmljcy9pbnN0cnVtZW50LmpzJztcbmV4cG9ydCB7IGFkZFBlcmZvcm1hbmNlRW50cmllcywgc3RhcnRUcmFja2luZ0ludGVyYWN0aW9ucywgc3RhcnRUcmFja2luZ0xvbmdBbmltYXRpb25GcmFtZXMsIHN0YXJ0VHJhY2tpbmdMb25nVGFza3MsIHN0YXJ0VHJhY2tpbmdXZWJWaXRhbHMgfSBmcm9tICcuL21ldHJpY3MvYnJvd3Nlck1ldHJpY3MuanMnO1xuZXhwb3J0IHsgc3RhcnRUcmFja2luZ0VsZW1lbnRUaW1pbmcgfSBmcm9tICcuL21ldHJpY3MvZWxlbWVudFRpbWluZy5qcyc7XG5leHBvcnQgeyBleHRyYWN0TmV0d29ya1Byb3RvY29sIH0gZnJvbSAnLi9tZXRyaWNzL3V0aWxzLmpzJztcbmV4cG9ydCB7IGFkZENsaWNrS2V5cHJlc3NJbnN0cnVtZW50YXRpb25IYW5kbGVyIH0gZnJvbSAnLi9pbnN0cnVtZW50L2RvbS5qcyc7XG5leHBvcnQgeyBhZGRIaXN0b3J5SW5zdHJ1bWVudGF0aW9uSGFuZGxlciB9IGZyb20gJy4vaW5zdHJ1bWVudC9oaXN0b3J5LmpzJztcbmV4cG9ydCB7IGNsZWFyQ2FjaGVkSW1wbGVtZW50YXRpb24sIGZldGNoLCBnZXROYXRpdmVJbXBsZW1lbnRhdGlvbiwgc2V0VGltZW91dCB9IGZyb20gJy4vZ2V0TmF0aXZlSW1wbGVtZW50YXRpb24uanMnO1xuZXhwb3J0IHsgU0VOVFJZX1hIUl9EQVRBX0tFWSwgYWRkWGhySW5zdHJ1bWVudGF0aW9uSGFuZGxlciB9IGZyb20gJy4vaW5zdHJ1bWVudC94aHIuanMnO1xuZXhwb3J0IHsgZ2V0Qm9keVN0cmluZywgZ2V0RmV0Y2hSZXF1ZXN0QXJnQm9keSwgc2VyaWFsaXplRm9ybURhdGEgfSBmcm9tICcuL25ldHdvcmtVdGlscy5qcyc7XG5leHBvcnQgeyByZWdpc3RlcklucEludGVyYWN0aW9uTGlzdGVuZXIsIHN0YXJ0VHJhY2tpbmdJTlAgfSBmcm9tICcuL21ldHJpY3MvaW5wLmpzJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/instrument/dom.js":
/*!******************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/instrument/dom.js ***!
  \******************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addClickKeypressInstrumentationHandler: () => (/* binding */ addClickKeypressInstrumentationHandler),\n/* harmony export */   instrumentDOM: () => (/* binding */ instrumentDOM)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../types.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/types.js\");\n\n\n\nconst DEBOUNCE_DURATION = 1000;\n\nlet debounceTimerID;\nlet lastCapturedEventType;\nlet lastCapturedEventTargetId;\n\n/**\n * Add an instrumentation handler for when a click or a keypress happens.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addClickKeypressInstrumentationHandler(handler) {\n  const type = 'dom';\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addHandler)(type, handler);\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.maybeInstrument)(type, instrumentDOM);\n}\n\n/** Exported for tests only. */\nfunction instrumentDOM() {\n  if (!_types_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.document) {\n    return;\n  }\n\n  // Make it so that any click or keypress that is unhandled / bubbled up all the way to the document triggers our dom\n  // handlers. (Normally we have only one, which captures a breadcrumb for each click or keypress.) Do this before\n  // we instrument `addEventListener` so that we don't end up attaching this handler twice.\n  const triggerDOMHandler = _sentry_core__WEBPACK_IMPORTED_MODULE_0__.triggerHandlers.bind(null, 'dom');\n  const globalDOMEventHandler = makeDOMEventHandler(triggerDOMHandler, true);\n  _types_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.document.addEventListener('click', globalDOMEventHandler, false);\n  _types_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.document.addEventListener('keypress', globalDOMEventHandler, false);\n\n  // After hooking into click and keypress events bubbled up to `document`, we also hook into user-handled\n  // clicks & keypresses, by adding an event listener of our own to any element to which they add a listener. That\n  // way, whenever one of their handlers is triggered, ours will be, too. (This is needed because their handler\n  // could potentially prevent the event from bubbling up to our global listeners. This way, our handler are still\n  // guaranteed to fire at least once.)\n  ['EventTarget', 'Node'].forEach((target) => {\n    const globalObject = _types_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW ;\n    const proto = globalObject[target]?.prototype;\n\n    // eslint-disable-next-line no-prototype-builtins\n    if (!proto?.hasOwnProperty?.('addEventListener')) {\n      return;\n    }\n\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.fill)(proto, 'addEventListener', function (originalAddEventListener) {\n      return function ( type, listener, options) {\n        if (type === 'click' || type == 'keypress') {\n          try {\n            const handlers = (this.__sentry_instrumentation_handlers__ =\n              this.__sentry_instrumentation_handlers__ || {});\n            const handlerForType = (handlers[type] = handlers[type] || { refCount: 0 });\n\n            if (!handlerForType.handler) {\n              const handler = makeDOMEventHandler(triggerDOMHandler);\n              handlerForType.handler = handler;\n              originalAddEventListener.call(this, type, handler, options);\n            }\n\n            handlerForType.refCount++;\n          } catch {\n            // Accessing dom properties is always fragile.\n            // Also allows us to skip `addEventListeners` calls with no proper `this` context.\n          }\n        }\n\n        return originalAddEventListener.call(this, type, listener, options);\n      };\n    });\n\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.fill)(\n      proto,\n      'removeEventListener',\n      function (originalRemoveEventListener) {\n        return function ( type, listener, options) {\n          if (type === 'click' || type == 'keypress') {\n            try {\n              const handlers = this.__sentry_instrumentation_handlers__ || {};\n              const handlerForType = handlers[type];\n\n              if (handlerForType) {\n                handlerForType.refCount--;\n                // If there are no longer any custom handlers of the current type on this element, we can remove ours, too.\n                if (handlerForType.refCount <= 0) {\n                  originalRemoveEventListener.call(this, type, handlerForType.handler, options);\n                  handlerForType.handler = undefined;\n                  delete handlers[type]; // eslint-disable-line @typescript-eslint/no-dynamic-delete\n                }\n\n                // If there are no longer any custom handlers of any type on this element, cleanup everything.\n                if (Object.keys(handlers).length === 0) {\n                  delete this.__sentry_instrumentation_handlers__;\n                }\n              }\n            } catch {\n              // Accessing dom properties is always fragile.\n              // Also allows us to skip `addEventListeners` calls with no proper `this` context.\n            }\n          }\n\n          return originalRemoveEventListener.call(this, type, listener, options);\n        };\n      },\n    );\n  });\n}\n\n/**\n * Check whether the event is similar to the last captured one. For example, two click events on the same button.\n */\nfunction isSimilarToLastCapturedEvent(event) {\n  // If both events have different type, then user definitely performed two separate actions. e.g. click + keypress.\n  if (event.type !== lastCapturedEventType) {\n    return false;\n  }\n\n  try {\n    // If both events have the same type, it's still possible that actions were performed on different targets.\n    // e.g. 2 clicks on different buttons.\n    if (!event.target || (event.target )._sentryId !== lastCapturedEventTargetId) {\n      return false;\n    }\n  } catch {\n    // just accessing `target` property can throw an exception in some rare circumstances\n    // see: https://github.com/getsentry/sentry-javascript/issues/838\n  }\n\n  // If both events have the same type _and_ same `target` (an element which triggered an event, _not necessarily_\n  // to which an event listener was attached), we treat them as the same action, as we want to capture\n  // only one breadcrumb. e.g. multiple clicks on the same button, or typing inside a user input box.\n  return true;\n}\n\n/**\n * Decide whether an event should be captured.\n * @param event event to be captured\n */\nfunction shouldSkipDOMEvent(eventType, target) {\n  // We are only interested in filtering `keypress` events for now.\n  if (eventType !== 'keypress') {\n    return false;\n  }\n\n  if (!target?.tagName) {\n    return true;\n  }\n\n  // Only consider keypress events on actual input elements. This will disregard keypresses targeting body\n  // e.g.tabbing through elements, hotkeys, etc.\n  if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Wraps addEventListener to capture UI breadcrumbs\n */\nfunction makeDOMEventHandler(\n  handler,\n  globalListener = false,\n) {\n  return (event) => {\n    // It's possible this handler might trigger multiple times for the same\n    // event (e.g. event propagation through node ancestors).\n    // Ignore if we've already captured that event.\n    if (!event || event['_sentryCaptured']) {\n      return;\n    }\n\n    const target = getEventTarget(event);\n\n    // We always want to skip _some_ events.\n    if (shouldSkipDOMEvent(event.type, target)) {\n      return;\n    }\n\n    // Mark event as \"seen\"\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addNonEnumerableProperty)(event, '_sentryCaptured', true);\n\n    if (target && !target._sentryId) {\n      // Add UUID to event target so we can identify if\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addNonEnumerableProperty)(target, '_sentryId', (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.uuid4)());\n    }\n\n    const name = event.type === 'keypress' ? 'input' : event.type;\n\n    // If there is no last captured event, it means that we can safely capture the new event and store it for future comparisons.\n    // If there is a last captured event, see if the new event is different enough to treat it as a unique one.\n    // If that's the case, emit the previous event and store locally the newly-captured DOM event.\n    if (!isSimilarToLastCapturedEvent(event)) {\n      const handlerData = { event, name, global: globalListener };\n      handler(handlerData);\n      lastCapturedEventType = event.type;\n      lastCapturedEventTargetId = target ? target._sentryId : undefined;\n    }\n\n    // Start a new debounce timer that will prevent us from capturing multiple events that should be grouped together.\n    clearTimeout(debounceTimerID);\n    debounceTimerID = _types_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.setTimeout(() => {\n      lastCapturedEventTargetId = undefined;\n      lastCapturedEventType = undefined;\n    }, DEBOUNCE_DURATION);\n  };\n}\n\nfunction getEventTarget(event) {\n  try {\n    return event.target ;\n  } catch {\n    // just accessing `target` property can throw an exception in some rare circumstances\n    // see: https://github.com/getsentry/sentry-javascript/issues/838\n    return null;\n  }\n}\n\n\n//# sourceMappingURL=dom.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL2luc3RydW1lbnQvZG9tLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBbUg7QUFDOUU7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSx3REFBVTtBQUNaLEVBQUUsNkRBQWU7QUFDakI7O0FBRUE7QUFDQTtBQUNBLE9BQU8sNkNBQU07QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix5REFBZTtBQUMzQztBQUNBLEVBQUUsNkNBQU07QUFDUixFQUFFLDZDQUFNOztBQUVSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qiw2Q0FBTTtBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLGtEQUFJO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQseUVBQXlFLGFBQWE7O0FBRXRGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUwsSUFBSSxrREFBSTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSxzRUFBd0I7O0FBRTVCO0FBQ0E7QUFDQSxNQUFNLHNFQUF3QixzQkFBc0IsbURBQUs7QUFDekQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNCQUFzQiw2Q0FBTTtBQUM1QjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWlFO0FBQ2pFIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vaW5zdHJ1bWVudC9kb20uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWRkSGFuZGxlciwgbWF5YmVJbnN0cnVtZW50LCB0cmlnZ2VySGFuZGxlcnMsIGZpbGwsIGFkZE5vbkVudW1lcmFibGVQcm9wZXJ0eSwgdXVpZDQgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5jb25zdCBERUJPVU5DRV9EVVJBVElPTiA9IDEwMDA7XG5cbmxldCBkZWJvdW5jZVRpbWVySUQ7XG5sZXQgbGFzdENhcHR1cmVkRXZlbnRUeXBlO1xubGV0IGxhc3RDYXB0dXJlZEV2ZW50VGFyZ2V0SWQ7XG5cbi8qKlxuICogQWRkIGFuIGluc3RydW1lbnRhdGlvbiBoYW5kbGVyIGZvciB3aGVuIGEgY2xpY2sgb3IgYSBrZXlwcmVzcyBoYXBwZW5zLlxuICpcbiAqIFVzZSBhdCB5b3VyIG93biByaXNrLCB0aGlzIG1pZ2h0IGJyZWFrIHdpdGhvdXQgY2hhbmdlbG9nIG5vdGljZSwgb25seSB1c2VkIGludGVybmFsbHkuXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGFkZENsaWNrS2V5cHJlc3NJbnN0cnVtZW50YXRpb25IYW5kbGVyKGhhbmRsZXIpIHtcbiAgY29uc3QgdHlwZSA9ICdkb20nO1xuICBhZGRIYW5kbGVyKHR5cGUsIGhhbmRsZXIpO1xuICBtYXliZUluc3RydW1lbnQodHlwZSwgaW5zdHJ1bWVudERPTSk7XG59XG5cbi8qKiBFeHBvcnRlZCBmb3IgdGVzdHMgb25seS4gKi9cbmZ1bmN0aW9uIGluc3RydW1lbnRET00oKSB7XG4gIGlmICghV0lORE9XLmRvY3VtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gTWFrZSBpdCBzbyB0aGF0IGFueSBjbGljayBvciBrZXlwcmVzcyB0aGF0IGlzIHVuaGFuZGxlZCAvIGJ1YmJsZWQgdXAgYWxsIHRoZSB3YXkgdG8gdGhlIGRvY3VtZW50IHRyaWdnZXJzIG91ciBkb21cbiAgLy8gaGFuZGxlcnMuIChOb3JtYWxseSB3ZSBoYXZlIG9ubHkgb25lLCB3aGljaCBjYXB0dXJlcyBhIGJyZWFkY3J1bWIgZm9yIGVhY2ggY2xpY2sgb3Iga2V5cHJlc3MuKSBEbyB0aGlzIGJlZm9yZVxuICAvLyB3ZSBpbnN0cnVtZW50IGBhZGRFdmVudExpc3RlbmVyYCBzbyB0aGF0IHdlIGRvbid0IGVuZCB1cCBhdHRhY2hpbmcgdGhpcyBoYW5kbGVyIHR3aWNlLlxuICBjb25zdCB0cmlnZ2VyRE9NSGFuZGxlciA9IHRyaWdnZXJIYW5kbGVycy5iaW5kKG51bGwsICdkb20nKTtcbiAgY29uc3QgZ2xvYmFsRE9NRXZlbnRIYW5kbGVyID0gbWFrZURPTUV2ZW50SGFuZGxlcih0cmlnZ2VyRE9NSGFuZGxlciwgdHJ1ZSk7XG4gIFdJTkRPVy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGdsb2JhbERPTUV2ZW50SGFuZGxlciwgZmFsc2UpO1xuICBXSU5ET1cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCBnbG9iYWxET01FdmVudEhhbmRsZXIsIGZhbHNlKTtcblxuICAvLyBBZnRlciBob29raW5nIGludG8gY2xpY2sgYW5kIGtleXByZXNzIGV2ZW50cyBidWJibGVkIHVwIHRvIGBkb2N1bWVudGAsIHdlIGFsc28gaG9vayBpbnRvIHVzZXItaGFuZGxlZFxuICAvLyBjbGlja3MgJiBrZXlwcmVzc2VzLCBieSBhZGRpbmcgYW4gZXZlbnQgbGlzdGVuZXIgb2Ygb3VyIG93biB0byBhbnkgZWxlbWVudCB0byB3aGljaCB0aGV5IGFkZCBhIGxpc3RlbmVyLiBUaGF0XG4gIC8vIHdheSwgd2hlbmV2ZXIgb25lIG9mIHRoZWlyIGhhbmRsZXJzIGlzIHRyaWdnZXJlZCwgb3VycyB3aWxsIGJlLCB0b28uIChUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHRoZWlyIGhhbmRsZXJcbiAgLy8gY291bGQgcG90ZW50aWFsbHkgcHJldmVudCB0aGUgZXZlbnQgZnJvbSBidWJibGluZyB1cCB0byBvdXIgZ2xvYmFsIGxpc3RlbmVycy4gVGhpcyB3YXksIG91ciBoYW5kbGVyIGFyZSBzdGlsbFxuICAvLyBndWFyYW50ZWVkIHRvIGZpcmUgYXQgbGVhc3Qgb25jZS4pXG4gIFsnRXZlbnRUYXJnZXQnLCAnTm9kZSddLmZvckVhY2goKHRhcmdldCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbE9iamVjdCA9IFdJTkRPVyA7XG4gICAgY29uc3QgcHJvdG8gPSBnbG9iYWxPYmplY3RbdGFyZ2V0XT8ucHJvdG90eXBlO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIGlmICghcHJvdG8/Lmhhc093blByb3BlcnR5Py4oJ2FkZEV2ZW50TGlzdGVuZXInKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZpbGwocHJvdG8sICdhZGRFdmVudExpc3RlbmVyJywgZnVuY3Rpb24gKG9yaWdpbmFsQWRkRXZlbnRMaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICggdHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdjbGljaycgfHwgdHlwZSA9PSAna2V5cHJlc3MnKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJzID0gKHRoaXMuX19zZW50cnlfaW5zdHJ1bWVudGF0aW9uX2hhbmRsZXJzX18gPVxuICAgICAgICAgICAgICB0aGlzLl9fc2VudHJ5X2luc3RydW1lbnRhdGlvbl9oYW5kbGVyc19fIHx8IHt9KTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJGb3JUeXBlID0gKGhhbmRsZXJzW3R5cGVdID0gaGFuZGxlcnNbdHlwZV0gfHwgeyByZWZDb3VudDogMCB9KTtcblxuICAgICAgICAgICAgaWYgKCFoYW5kbGVyRm9yVHlwZS5oYW5kbGVyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBtYWtlRE9NRXZlbnRIYW5kbGVyKHRyaWdnZXJET01IYW5kbGVyKTtcbiAgICAgICAgICAgICAgaGFuZGxlckZvclR5cGUuaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgICAgICAgICAgIG9yaWdpbmFsQWRkRXZlbnRMaXN0ZW5lci5jYWxsKHRoaXMsIHR5cGUsIGhhbmRsZXIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBoYW5kbGVyRm9yVHlwZS5yZWZDb3VudCsrO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gQWNjZXNzaW5nIGRvbSBwcm9wZXJ0aWVzIGlzIGFsd2F5cyBmcmFnaWxlLlxuICAgICAgICAgICAgLy8gQWxzbyBhbGxvd3MgdXMgdG8gc2tpcCBgYWRkRXZlbnRMaXN0ZW5lcnNgIGNhbGxzIHdpdGggbm8gcHJvcGVyIGB0aGlzYCBjb250ZXh0LlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcmlnaW5hbEFkZEV2ZW50TGlzdGVuZXIuY2FsbCh0aGlzLCB0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgZmlsbChcbiAgICAgIHByb3RvLFxuICAgICAgJ3JlbW92ZUV2ZW50TGlzdGVuZXInLFxuICAgICAgZnVuY3Rpb24gKG9yaWdpbmFsUmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCB0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICAgICAgICAgIGlmICh0eXBlID09PSAnY2xpY2snIHx8IHR5cGUgPT0gJ2tleXByZXNzJykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLl9fc2VudHJ5X2luc3RydW1lbnRhdGlvbl9oYW5kbGVyc19fIHx8IHt9O1xuICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyRm9yVHlwZSA9IGhhbmRsZXJzW3R5cGVdO1xuXG4gICAgICAgICAgICAgIGlmIChoYW5kbGVyRm9yVHlwZSkge1xuICAgICAgICAgICAgICAgIGhhbmRsZXJGb3JUeXBlLnJlZkNvdW50LS07XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGxvbmdlciBhbnkgY3VzdG9tIGhhbmRsZXJzIG9mIHRoZSBjdXJyZW50IHR5cGUgb24gdGhpcyBlbGVtZW50LCB3ZSBjYW4gcmVtb3ZlIG91cnMsIHRvby5cbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlckZvclR5cGUucmVmQ291bnQgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxSZW1vdmVFdmVudExpc3RlbmVyLmNhbGwodGhpcywgdHlwZSwgaGFuZGxlckZvclR5cGUuaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICBoYW5kbGVyRm9yVHlwZS5oYW5kbGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgZGVsZXRlIGhhbmRsZXJzW3R5cGVdOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBsb25nZXIgYW55IGN1c3RvbSBoYW5kbGVycyBvZiBhbnkgdHlwZSBvbiB0aGlzIGVsZW1lbnQsIGNsZWFudXAgZXZlcnl0aGluZy5cbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoaGFuZGxlcnMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX19zZW50cnlfaW5zdHJ1bWVudGF0aW9uX2hhbmRsZXJzX187XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgLy8gQWNjZXNzaW5nIGRvbSBwcm9wZXJ0aWVzIGlzIGFsd2F5cyBmcmFnaWxlLlxuICAgICAgICAgICAgICAvLyBBbHNvIGFsbG93cyB1cyB0byBza2lwIGBhZGRFdmVudExpc3RlbmVyc2AgY2FsbHMgd2l0aCBubyBwcm9wZXIgYHRoaXNgIGNvbnRleHQuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVtb3ZlRXZlbnRMaXN0ZW5lci5jYWxsKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgZXZlbnQgaXMgc2ltaWxhciB0byB0aGUgbGFzdCBjYXB0dXJlZCBvbmUuIEZvciBleGFtcGxlLCB0d28gY2xpY2sgZXZlbnRzIG9uIHRoZSBzYW1lIGJ1dHRvbi5cbiAqL1xuZnVuY3Rpb24gaXNTaW1pbGFyVG9MYXN0Q2FwdHVyZWRFdmVudChldmVudCkge1xuICAvLyBJZiBib3RoIGV2ZW50cyBoYXZlIGRpZmZlcmVudCB0eXBlLCB0aGVuIHVzZXIgZGVmaW5pdGVseSBwZXJmb3JtZWQgdHdvIHNlcGFyYXRlIGFjdGlvbnMuIGUuZy4gY2xpY2sgKyBrZXlwcmVzcy5cbiAgaWYgKGV2ZW50LnR5cGUgIT09IGxhc3RDYXB0dXJlZEV2ZW50VHlwZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gSWYgYm90aCBldmVudHMgaGF2ZSB0aGUgc2FtZSB0eXBlLCBpdCdzIHN0aWxsIHBvc3NpYmxlIHRoYXQgYWN0aW9ucyB3ZXJlIHBlcmZvcm1lZCBvbiBkaWZmZXJlbnQgdGFyZ2V0cy5cbiAgICAvLyBlLmcuIDIgY2xpY2tzIG9uIGRpZmZlcmVudCBidXR0b25zLlxuICAgIGlmICghZXZlbnQudGFyZ2V0IHx8IChldmVudC50YXJnZXQgKS5fc2VudHJ5SWQgIT09IGxhc3RDYXB0dXJlZEV2ZW50VGFyZ2V0SWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGp1c3QgYWNjZXNzaW5nIGB0YXJnZXRgIHByb3BlcnR5IGNhbiB0aHJvdyBhbiBleGNlcHRpb24gaW4gc29tZSByYXJlIGNpcmN1bXN0YW5jZXNcbiAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzgzOFxuICB9XG5cbiAgLy8gSWYgYm90aCBldmVudHMgaGF2ZSB0aGUgc2FtZSB0eXBlIF9hbmRfIHNhbWUgYHRhcmdldGAgKGFuIGVsZW1lbnQgd2hpY2ggdHJpZ2dlcmVkIGFuIGV2ZW50LCBfbm90IG5lY2Vzc2FyaWx5X1xuICAvLyB0byB3aGljaCBhbiBldmVudCBsaXN0ZW5lciB3YXMgYXR0YWNoZWQpLCB3ZSB0cmVhdCB0aGVtIGFzIHRoZSBzYW1lIGFjdGlvbiwgYXMgd2Ugd2FudCB0byBjYXB0dXJlXG4gIC8vIG9ubHkgb25lIGJyZWFkY3J1bWIuIGUuZy4gbXVsdGlwbGUgY2xpY2tzIG9uIHRoZSBzYW1lIGJ1dHRvbiwgb3IgdHlwaW5nIGluc2lkZSBhIHVzZXIgaW5wdXQgYm94LlxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBEZWNpZGUgd2hldGhlciBhbiBldmVudCBzaG91bGQgYmUgY2FwdHVyZWQuXG4gKiBAcGFyYW0gZXZlbnQgZXZlbnQgdG8gYmUgY2FwdHVyZWRcbiAqL1xuZnVuY3Rpb24gc2hvdWxkU2tpcERPTUV2ZW50KGV2ZW50VHlwZSwgdGFyZ2V0KSB7XG4gIC8vIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gZmlsdGVyaW5nIGBrZXlwcmVzc2AgZXZlbnRzIGZvciBub3cuXG4gIGlmIChldmVudFR5cGUgIT09ICdrZXlwcmVzcycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIXRhcmdldD8udGFnTmFtZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gT25seSBjb25zaWRlciBrZXlwcmVzcyBldmVudHMgb24gYWN0dWFsIGlucHV0IGVsZW1lbnRzLiBUaGlzIHdpbGwgZGlzcmVnYXJkIGtleXByZXNzZXMgdGFyZ2V0aW5nIGJvZHlcbiAgLy8gZS5nLnRhYmJpbmcgdGhyb3VnaCBlbGVtZW50cywgaG90a2V5cywgZXRjLlxuICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdJTlBVVCcgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdURVhUQVJFQScgfHwgdGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogV3JhcHMgYWRkRXZlbnRMaXN0ZW5lciB0byBjYXB0dXJlIFVJIGJyZWFkY3J1bWJzXG4gKi9cbmZ1bmN0aW9uIG1ha2VET01FdmVudEhhbmRsZXIoXG4gIGhhbmRsZXIsXG4gIGdsb2JhbExpc3RlbmVyID0gZmFsc2UsXG4pIHtcbiAgcmV0dXJuIChldmVudCkgPT4ge1xuICAgIC8vIEl0J3MgcG9zc2libGUgdGhpcyBoYW5kbGVyIG1pZ2h0IHRyaWdnZXIgbXVsdGlwbGUgdGltZXMgZm9yIHRoZSBzYW1lXG4gICAgLy8gZXZlbnQgKGUuZy4gZXZlbnQgcHJvcGFnYXRpb24gdGhyb3VnaCBub2RlIGFuY2VzdG9ycykuXG4gICAgLy8gSWdub3JlIGlmIHdlJ3ZlIGFscmVhZHkgY2FwdHVyZWQgdGhhdCBldmVudC5cbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50Wydfc2VudHJ5Q2FwdHVyZWQnXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGV2ZW50KTtcblxuICAgIC8vIFdlIGFsd2F5cyB3YW50IHRvIHNraXAgX3NvbWVfIGV2ZW50cy5cbiAgICBpZiAoc2hvdWxkU2tpcERPTUV2ZW50KGV2ZW50LnR5cGUsIHRhcmdldCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBNYXJrIGV2ZW50IGFzIFwic2VlblwiXG4gICAgYWRkTm9uRW51bWVyYWJsZVByb3BlcnR5KGV2ZW50LCAnX3NlbnRyeUNhcHR1cmVkJywgdHJ1ZSk7XG5cbiAgICBpZiAodGFyZ2V0ICYmICF0YXJnZXQuX3NlbnRyeUlkKSB7XG4gICAgICAvLyBBZGQgVVVJRCB0byBldmVudCB0YXJnZXQgc28gd2UgY2FuIGlkZW50aWZ5IGlmXG4gICAgICBhZGROb25FbnVtZXJhYmxlUHJvcGVydHkodGFyZ2V0LCAnX3NlbnRyeUlkJywgdXVpZDQoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZSA9IGV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycgPyAnaW5wdXQnIDogZXZlbnQudHlwZTtcblxuICAgIC8vIElmIHRoZXJlIGlzIG5vIGxhc3QgY2FwdHVyZWQgZXZlbnQsIGl0IG1lYW5zIHRoYXQgd2UgY2FuIHNhZmVseSBjYXB0dXJlIHRoZSBuZXcgZXZlbnQgYW5kIHN0b3JlIGl0IGZvciBmdXR1cmUgY29tcGFyaXNvbnMuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSBsYXN0IGNhcHR1cmVkIGV2ZW50LCBzZWUgaWYgdGhlIG5ldyBldmVudCBpcyBkaWZmZXJlbnQgZW5vdWdoIHRvIHRyZWF0IGl0IGFzIGEgdW5pcXVlIG9uZS5cbiAgICAvLyBJZiB0aGF0J3MgdGhlIGNhc2UsIGVtaXQgdGhlIHByZXZpb3VzIGV2ZW50IGFuZCBzdG9yZSBsb2NhbGx5IHRoZSBuZXdseS1jYXB0dXJlZCBET00gZXZlbnQuXG4gICAgaWYgKCFpc1NpbWlsYXJUb0xhc3RDYXB0dXJlZEV2ZW50KGV2ZW50KSkge1xuICAgICAgY29uc3QgaGFuZGxlckRhdGEgPSB7IGV2ZW50LCBuYW1lLCBnbG9iYWw6IGdsb2JhbExpc3RlbmVyIH07XG4gICAgICBoYW5kbGVyKGhhbmRsZXJEYXRhKTtcbiAgICAgIGxhc3RDYXB0dXJlZEV2ZW50VHlwZSA9IGV2ZW50LnR5cGU7XG4gICAgICBsYXN0Q2FwdHVyZWRFdmVudFRhcmdldElkID0gdGFyZ2V0ID8gdGFyZ2V0Ll9zZW50cnlJZCA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBTdGFydCBhIG5ldyBkZWJvdW5jZSB0aW1lciB0aGF0IHdpbGwgcHJldmVudCB1cyBmcm9tIGNhcHR1cmluZyBtdWx0aXBsZSBldmVudHMgdGhhdCBzaG91bGQgYmUgZ3JvdXBlZCB0b2dldGhlci5cbiAgICBjbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lcklEKTtcbiAgICBkZWJvdW5jZVRpbWVySUQgPSBXSU5ET1cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBsYXN0Q2FwdHVyZWRFdmVudFRhcmdldElkID0gdW5kZWZpbmVkO1xuICAgICAgbGFzdENhcHR1cmVkRXZlbnRUeXBlID0gdW5kZWZpbmVkO1xuICAgIH0sIERFQk9VTkNFX0RVUkFUSU9OKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RXZlbnRUYXJnZXQoZXZlbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZlbnQudGFyZ2V0IDtcbiAgfSBjYXRjaCB7XG4gICAgLy8ganVzdCBhY2Nlc3NpbmcgYHRhcmdldGAgcHJvcGVydHkgY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBzb21lIHJhcmUgY2lyY3Vtc3RhbmNlc1xuICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvODM4XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IHsgYWRkQ2xpY2tLZXlwcmVzc0luc3RydW1lbnRhdGlvbkhhbmRsZXIsIGluc3RydW1lbnRET00gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRvbS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/instrument/dom.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/instrument/history.js":
/*!**********************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/instrument/history.js ***!
  \**********************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addHistoryInstrumentationHandler: () => (/* binding */ addHistoryInstrumentationHandler),\n/* harmony export */   instrumentHistory: () => (/* binding */ instrumentHistory)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../types.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/types.js\");\n\n\n\nlet lastHref;\n\n/**\n * Add an instrumentation handler for when a fetch request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addHistoryInstrumentationHandler(handler) {\n  const type = 'history';\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addHandler)(type, handler);\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.maybeInstrument)(type, instrumentHistory);\n}\n\n/**\n * Exported just for testing\n */\nfunction instrumentHistory() {\n  // The `popstate` event may also be triggered on `pushState`, but it may not always reliably be emitted by the browser\n  // Which is why we also monkey-patch methods below, in addition to this\n  _types_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.addEventListener('popstate', () => {\n    const to = _types_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.location.href;\n    // keep track of the current URL state, as we always receive only the updated state\n    const from = lastHref;\n    lastHref = to;\n\n    if (from === to) {\n      return;\n    }\n\n    const handlerData = { from, to } ;\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.triggerHandlers)('history', handlerData);\n  });\n\n  // Just guard against this not being available, in weird environments\n  if (!(0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.supportsHistory)()) {\n    return;\n  }\n\n  function historyReplacementFunction(originalHistoryFunction) {\n    return function ( ...args) {\n      const url = args.length > 2 ? args[2] : undefined;\n      if (url) {\n        const from = lastHref;\n\n        // Ensure the URL is absolute\n        // this can be either a path, then it is relative to the current origin\n        // or a full URL of the current origin - other origins are not allowed\n        // See: https://developer.mozilla.org/en-US/docs/Web/API/History/pushState#url\n        // coerce to string (this is what pushState does)\n        const to = getAbsoluteUrl(String(url));\n\n        // keep track of the current URL state, as we always receive only the updated state\n        lastHref = to;\n\n        if (from === to) {\n          return originalHistoryFunction.apply(this, args);\n        }\n\n        const handlerData = { from, to } ;\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.triggerHandlers)('history', handlerData);\n      }\n      return originalHistoryFunction.apply(this, args);\n    };\n  }\n\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.fill)(_types_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.history, 'pushState', historyReplacementFunction);\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.fill)(_types_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.history, 'replaceState', historyReplacementFunction);\n}\n\nfunction getAbsoluteUrl(urlOrPath) {\n  try {\n    const url = new URL(urlOrPath, _types_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.location.origin);\n    return url.toString();\n  } catch {\n    // fallback, just do nothing\n    return urlOrPath;\n  }\n}\n\n\n//# sourceMappingURL=history.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL2luc3RydW1lbnQvaGlzdG9yeS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQW1HO0FBQzlEOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsd0RBQVU7QUFDWixFQUFFLDZEQUFlO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsNkNBQU07QUFDUixlQUFlLDZDQUFNO0FBQ3JCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCO0FBQzFCLElBQUksNkRBQWU7QUFDbkIsR0FBRzs7QUFFSDtBQUNBLE9BQU8sNkRBQWU7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw4QkFBOEI7QUFDOUIsUUFBUSw2REFBZTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLGtEQUFJLENBQUMsNkNBQU07QUFDYixFQUFFLGtEQUFJLENBQUMsNkNBQU07QUFDYjs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DLDZDQUFNO0FBQ3pDO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUUrRDtBQUMvRCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL2luc3RydW1lbnQvaGlzdG9yeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZGRIYW5kbGVyLCBtYXliZUluc3RydW1lbnQsIHRyaWdnZXJIYW5kbGVycywgc3VwcG9ydHNIaXN0b3J5LCBmaWxsIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IFdJTkRPVyB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxubGV0IGxhc3RIcmVmO1xuXG4vKipcbiAqIEFkZCBhbiBpbnN0cnVtZW50YXRpb24gaGFuZGxlciBmb3Igd2hlbiBhIGZldGNoIHJlcXVlc3QgaGFwcGVucy5cbiAqIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIHdoZW4gdGhlIHJlcXVlc3Qgc3RhcnRzIGFuZCBvbmNlIHdoZW4gaXQgZW5kcyxcbiAqIHdoaWNoIGNhbiBiZSBpZGVudGlmaWVkIGJ5IGNoZWNraW5nIGlmIGl0IGhhcyBhbiBgZW5kVGltZXN0YW1wYC5cbiAqXG4gKiBVc2UgYXQgeW91ciBvd24gcmlzaywgdGhpcyBtaWdodCBicmVhayB3aXRob3V0IGNoYW5nZWxvZyBub3RpY2UsIG9ubHkgdXNlZCBpbnRlcm5hbGx5LlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBhZGRIaXN0b3J5SW5zdHJ1bWVudGF0aW9uSGFuZGxlcihoYW5kbGVyKSB7XG4gIGNvbnN0IHR5cGUgPSAnaGlzdG9yeSc7XG4gIGFkZEhhbmRsZXIodHlwZSwgaGFuZGxlcik7XG4gIG1heWJlSW5zdHJ1bWVudCh0eXBlLCBpbnN0cnVtZW50SGlzdG9yeSk7XG59XG5cbi8qKlxuICogRXhwb3J0ZWQganVzdCBmb3IgdGVzdGluZ1xuICovXG5mdW5jdGlvbiBpbnN0cnVtZW50SGlzdG9yeSgpIHtcbiAgLy8gVGhlIGBwb3BzdGF0ZWAgZXZlbnQgbWF5IGFsc28gYmUgdHJpZ2dlcmVkIG9uIGBwdXNoU3RhdGVgLCBidXQgaXQgbWF5IG5vdCBhbHdheXMgcmVsaWFibHkgYmUgZW1pdHRlZCBieSB0aGUgYnJvd3NlclxuICAvLyBXaGljaCBpcyB3aHkgd2UgYWxzbyBtb25rZXktcGF0Y2ggbWV0aG9kcyBiZWxvdywgaW4gYWRkaXRpb24gdG8gdGhpc1xuICBXSU5ET1cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCAoKSA9PiB7XG4gICAgY29uc3QgdG8gPSBXSU5ET1cubG9jYXRpb24uaHJlZjtcbiAgICAvLyBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IFVSTCBzdGF0ZSwgYXMgd2UgYWx3YXlzIHJlY2VpdmUgb25seSB0aGUgdXBkYXRlZCBzdGF0ZVxuICAgIGNvbnN0IGZyb20gPSBsYXN0SHJlZjtcbiAgICBsYXN0SHJlZiA9IHRvO1xuXG4gICAgaWYgKGZyb20gPT09IHRvKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlckRhdGEgPSB7IGZyb20sIHRvIH0gO1xuICAgIHRyaWdnZXJIYW5kbGVycygnaGlzdG9yeScsIGhhbmRsZXJEYXRhKTtcbiAgfSk7XG5cbiAgLy8gSnVzdCBndWFyZCBhZ2FpbnN0IHRoaXMgbm90IGJlaW5nIGF2YWlsYWJsZSwgaW4gd2VpcmQgZW52aXJvbm1lbnRzXG4gIGlmICghc3VwcG9ydHNIaXN0b3J5KCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiBoaXN0b3J5UmVwbGFjZW1lbnRGdW5jdGlvbihvcmlnaW5hbEhpc3RvcnlGdW5jdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoIC4uLmFyZ3MpIHtcbiAgICAgIGNvbnN0IHVybCA9IGFyZ3MubGVuZ3RoID4gMiA/IGFyZ3NbMl0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIGNvbnN0IGZyb20gPSBsYXN0SHJlZjtcblxuICAgICAgICAvLyBFbnN1cmUgdGhlIFVSTCBpcyBhYnNvbHV0ZVxuICAgICAgICAvLyB0aGlzIGNhbiBiZSBlaXRoZXIgYSBwYXRoLCB0aGVuIGl0IGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IG9yaWdpblxuICAgICAgICAvLyBvciBhIGZ1bGwgVVJMIG9mIHRoZSBjdXJyZW50IG9yaWdpbiAtIG90aGVyIG9yaWdpbnMgYXJlIG5vdCBhbGxvd2VkXG4gICAgICAgIC8vIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hpc3RvcnkvcHVzaFN0YXRlI3VybFxuICAgICAgICAvLyBjb2VyY2UgdG8gc3RyaW5nICh0aGlzIGlzIHdoYXQgcHVzaFN0YXRlIGRvZXMpXG4gICAgICAgIGNvbnN0IHRvID0gZ2V0QWJzb2x1dGVVcmwoU3RyaW5nKHVybCkpO1xuXG4gICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgVVJMIHN0YXRlLCBhcyB3ZSBhbHdheXMgcmVjZWl2ZSBvbmx5IHRoZSB1cGRhdGVkIHN0YXRlXG4gICAgICAgIGxhc3RIcmVmID0gdG87XG5cbiAgICAgICAgaWYgKGZyb20gPT09IHRvKSB7XG4gICAgICAgICAgcmV0dXJuIG9yaWdpbmFsSGlzdG9yeUZ1bmN0aW9uLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGFuZGxlckRhdGEgPSB7IGZyb20sIHRvIH0gO1xuICAgICAgICB0cmlnZ2VySGFuZGxlcnMoJ2hpc3RvcnknLCBoYW5kbGVyRGF0YSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3JpZ2luYWxIaXN0b3J5RnVuY3Rpb24uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfVxuXG4gIGZpbGwoV0lORE9XLmhpc3RvcnksICdwdXNoU3RhdGUnLCBoaXN0b3J5UmVwbGFjZW1lbnRGdW5jdGlvbik7XG4gIGZpbGwoV0lORE9XLmhpc3RvcnksICdyZXBsYWNlU3RhdGUnLCBoaXN0b3J5UmVwbGFjZW1lbnRGdW5jdGlvbik7XG59XG5cbmZ1bmN0aW9uIGdldEFic29sdXRlVXJsKHVybE9yUGF0aCkge1xuICB0cnkge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwodXJsT3JQYXRoLCBXSU5ET1cubG9jYXRpb24ub3JpZ2luKTtcbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIGZhbGxiYWNrLCBqdXN0IGRvIG5vdGhpbmdcbiAgICByZXR1cm4gdXJsT3JQYXRoO1xuICB9XG59XG5cbmV4cG9ydCB7IGFkZEhpc3RvcnlJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBpbnN0cnVtZW50SGlzdG9yeSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGlzdG9yeS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/instrument/history.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/instrument/xhr.js":
/*!******************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/instrument/xhr.js ***!
  \******************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   SENTRY_XHR_DATA_KEY: () => (/* binding */ SENTRY_XHR_DATA_KEY),\n/* harmony export */   addXhrInstrumentationHandler: () => (/* binding */ addXhrInstrumentationHandler),\n/* harmony export */   instrumentXHR: () => (/* binding */ instrumentXHR)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../types.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/types.js\");\n\n\n\nconst SENTRY_XHR_DATA_KEY = '__sentry_xhr_v3__';\n\n/**\n * Add an instrumentation handler for when an XHR request happens.\n * The handler function is called once when the request starts and once when it ends,\n * which can be identified by checking if it has an `endTimestamp`.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nfunction addXhrInstrumentationHandler(handler) {\n  const type = 'xhr';\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addHandler)(type, handler);\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.maybeInstrument)(type, instrumentXHR);\n}\n\n/** Exported only for tests. */\nfunction instrumentXHR() {\n  if (!(_types_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW ).XMLHttpRequest) {\n    return;\n  }\n\n  const xhrproto = XMLHttpRequest.prototype;\n\n  // eslint-disable-next-line @typescript-eslint/unbound-method\n  xhrproto.open = new Proxy(xhrproto.open, {\n    apply(\n      originalOpen,\n      xhrOpenThisArg,\n      xhrOpenArgArray\n\n,\n    ) {\n      // NOTE: If you are a Sentry user, and you are seeing this stack frame,\n      //       it means the error, that was caused by your XHR call did not\n      //       have a stack trace. If you are using HttpClient integration,\n      //       this is the expected behavior, as we are using this virtual error to capture\n      //       the location of your XHR call, and group your HttpClient events accordingly.\n      const virtualError = new Error();\n\n      const startTimestamp = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.timestampInSeconds)() * 1000;\n\n      // open() should always be called with two or more arguments\n      // But to be on the safe side, we actually validate this and bail out if we don't have a method & url\n      const method = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isString)(xhrOpenArgArray[0]) ? xhrOpenArgArray[0].toUpperCase() : undefined;\n      const url = parseXhrUrlArg(xhrOpenArgArray[1]);\n\n      if (!method || !url) {\n        return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray);\n      }\n\n      xhrOpenThisArg[SENTRY_XHR_DATA_KEY] = {\n        method,\n        url,\n        request_headers: {},\n      };\n\n      // if Sentry key appears in URL, don't capture it as a request\n      if (method === 'POST' && url.match(/sentry_key/)) {\n        xhrOpenThisArg.__sentry_own_request__ = true;\n      }\n\n      const onreadystatechangeHandler = () => {\n        // For whatever reason, this is not the same instance here as from the outer method\n        const xhrInfo = xhrOpenThisArg[SENTRY_XHR_DATA_KEY];\n\n        if (!xhrInfo) {\n          return;\n        }\n\n        if (xhrOpenThisArg.readyState === 4) {\n          try {\n            // touching statusCode in some platforms throws\n            // an exception\n            xhrInfo.status_code = xhrOpenThisArg.status;\n          } catch {\n            /* do nothing */\n          }\n\n          const handlerData = {\n            endTimestamp: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.timestampInSeconds)() * 1000,\n            startTimestamp,\n            xhr: xhrOpenThisArg,\n            virtualError,\n          };\n          (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.triggerHandlers)('xhr', handlerData);\n        }\n      };\n\n      if ('onreadystatechange' in xhrOpenThisArg && typeof xhrOpenThisArg.onreadystatechange === 'function') {\n        xhrOpenThisArg.onreadystatechange = new Proxy(xhrOpenThisArg.onreadystatechange, {\n          apply(originalOnreadystatechange, onreadystatechangeThisArg, onreadystatechangeArgArray) {\n            onreadystatechangeHandler();\n            return originalOnreadystatechange.apply(onreadystatechangeThisArg, onreadystatechangeArgArray);\n          },\n        });\n      } else {\n        xhrOpenThisArg.addEventListener('readystatechange', onreadystatechangeHandler);\n      }\n\n      // Intercepting `setRequestHeader` to access the request headers of XHR instance.\n      // This will only work for user/library defined headers, not for the default/browser-assigned headers.\n      // Request cookies are also unavailable for XHR, as `Cookie` header can't be defined by `setRequestHeader`.\n      xhrOpenThisArg.setRequestHeader = new Proxy(xhrOpenThisArg.setRequestHeader, {\n        apply(\n          originalSetRequestHeader,\n          setRequestHeaderThisArg,\n          setRequestHeaderArgArray,\n        ) {\n          const [header, value] = setRequestHeaderArgArray;\n\n          const xhrInfo = setRequestHeaderThisArg[SENTRY_XHR_DATA_KEY];\n\n          if (xhrInfo && (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isString)(header) && (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isString)(value)) {\n            xhrInfo.request_headers[header.toLowerCase()] = value;\n          }\n\n          return originalSetRequestHeader.apply(setRequestHeaderThisArg, setRequestHeaderArgArray);\n        },\n      });\n\n      return originalOpen.apply(xhrOpenThisArg, xhrOpenArgArray);\n    },\n  });\n\n  // eslint-disable-next-line @typescript-eslint/unbound-method\n  xhrproto.send = new Proxy(xhrproto.send, {\n    apply(originalSend, sendThisArg, sendArgArray) {\n      const sentryXhrData = sendThisArg[SENTRY_XHR_DATA_KEY];\n\n      if (!sentryXhrData) {\n        return originalSend.apply(sendThisArg, sendArgArray);\n      }\n\n      if (sendArgArray[0] !== undefined) {\n        sentryXhrData.body = sendArgArray[0];\n      }\n\n      const handlerData = {\n        startTimestamp: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.timestampInSeconds)() * 1000,\n        xhr: sendThisArg,\n      };\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.triggerHandlers)('xhr', handlerData);\n\n      return originalSend.apply(sendThisArg, sendArgArray);\n    },\n  });\n}\n\n/**\n * Parses the URL argument of a XHR method to a string.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/open#url\n * url: A string or any other object with a stringifier — including a URL object — that provides the URL of the resource to send the request to.\n *\n * @param url - The URL argument of an XHR method\n * @returns The parsed URL string or undefined if the URL is invalid\n */\nfunction parseXhrUrlArg(url) {\n  if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isString)(url)) {\n    return url;\n  }\n\n  try {\n    // If the passed in argument is not a string, it should have a `toString` method as a stringifier.\n    // If that fails, we just return undefined (like in IE11 where URL is not available)\n    return (url ).toString();\n  } catch {} // eslint-disable-line no-empty\n\n  return undefined;\n}\n\n\n//# sourceMappingURL=xhr.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL2luc3RydW1lbnQveGhyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQTBHO0FBQ3JFOztBQUVyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsd0RBQVU7QUFDWixFQUFFLDZEQUFlO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQSxRQUFRLDZDQUFNO0FBQ2Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsZ0VBQWtCOztBQUUvQztBQUNBO0FBQ0EscUJBQXFCLHNEQUFRO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEIsZ0VBQWtCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSw2REFBZTtBQUN6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNULFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHlCQUF5QixzREFBUSxZQUFZLHNEQUFRO0FBQ3JEO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1QsT0FBTzs7QUFFUDtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsZ0VBQWtCO0FBQzFDO0FBQ0E7QUFDQSxNQUFNLDZEQUFlOztBQUVyQjtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLHNEQUFRO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUzs7QUFFYjtBQUNBOztBQUU0RTtBQUM1RSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL2luc3RydW1lbnQveGhyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZEhhbmRsZXIsIG1heWJlSW5zdHJ1bWVudCwgdGltZXN0YW1wSW5TZWNvbmRzLCBpc1N0cmluZywgdHJpZ2dlckhhbmRsZXJzIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IFdJTkRPVyB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuY29uc3QgU0VOVFJZX1hIUl9EQVRBX0tFWSA9ICdfX3NlbnRyeV94aHJfdjNfXyc7XG5cbi8qKlxuICogQWRkIGFuIGluc3RydW1lbnRhdGlvbiBoYW5kbGVyIGZvciB3aGVuIGFuIFhIUiByZXF1ZXN0IGhhcHBlbnMuXG4gKiBUaGUgaGFuZGxlciBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSByZXF1ZXN0IHN0YXJ0cyBhbmQgb25jZSB3aGVuIGl0IGVuZHMsXG4gKiB3aGljaCBjYW4gYmUgaWRlbnRpZmllZCBieSBjaGVja2luZyBpZiBpdCBoYXMgYW4gYGVuZFRpbWVzdGFtcGAuXG4gKlxuICogVXNlIGF0IHlvdXIgb3duIHJpc2ssIHRoaXMgbWlnaHQgYnJlYWsgd2l0aG91dCBjaGFuZ2Vsb2cgbm90aWNlLCBvbmx5IHVzZWQgaW50ZXJuYWxseS5cbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gYWRkWGhySW5zdHJ1bWVudGF0aW9uSGFuZGxlcihoYW5kbGVyKSB7XG4gIGNvbnN0IHR5cGUgPSAneGhyJztcbiAgYWRkSGFuZGxlcih0eXBlLCBoYW5kbGVyKTtcbiAgbWF5YmVJbnN0cnVtZW50KHR5cGUsIGluc3RydW1lbnRYSFIpO1xufVxuXG4vKiogRXhwb3J0ZWQgb25seSBmb3IgdGVzdHMuICovXG5mdW5jdGlvbiBpbnN0cnVtZW50WEhSKCkge1xuICBpZiAoIShXSU5ET1cgKS5YTUxIdHRwUmVxdWVzdCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHhocnByb3RvID0gWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgeGhycHJvdG8ub3BlbiA9IG5ldyBQcm94eSh4aHJwcm90by5vcGVuLCB7XG4gICAgYXBwbHkoXG4gICAgICBvcmlnaW5hbE9wZW4sXG4gICAgICB4aHJPcGVuVGhpc0FyZyxcbiAgICAgIHhock9wZW5BcmdBcnJheVxuXG4sXG4gICAgKSB7XG4gICAgICAvLyBOT1RFOiBJZiB5b3UgYXJlIGEgU2VudHJ5IHVzZXIsIGFuZCB5b3UgYXJlIHNlZWluZyB0aGlzIHN0YWNrIGZyYW1lLFxuICAgICAgLy8gICAgICAgaXQgbWVhbnMgdGhlIGVycm9yLCB0aGF0IHdhcyBjYXVzZWQgYnkgeW91ciBYSFIgY2FsbCBkaWQgbm90XG4gICAgICAvLyAgICAgICBoYXZlIGEgc3RhY2sgdHJhY2UuIElmIHlvdSBhcmUgdXNpbmcgSHR0cENsaWVudCBpbnRlZ3JhdGlvbixcbiAgICAgIC8vICAgICAgIHRoaXMgaXMgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLCBhcyB3ZSBhcmUgdXNpbmcgdGhpcyB2aXJ0dWFsIGVycm9yIHRvIGNhcHR1cmVcbiAgICAgIC8vICAgICAgIHRoZSBsb2NhdGlvbiBvZiB5b3VyIFhIUiBjYWxsLCBhbmQgZ3JvdXAgeW91ciBIdHRwQ2xpZW50IGV2ZW50cyBhY2NvcmRpbmdseS5cbiAgICAgIGNvbnN0IHZpcnR1YWxFcnJvciA9IG5ldyBFcnJvcigpO1xuXG4gICAgICBjb25zdCBzdGFydFRpbWVzdGFtcCA9IHRpbWVzdGFtcEluU2Vjb25kcygpICogMTAwMDtcblxuICAgICAgLy8gb3BlbigpIHNob3VsZCBhbHdheXMgYmUgY2FsbGVkIHdpdGggdHdvIG9yIG1vcmUgYXJndW1lbnRzXG4gICAgICAvLyBCdXQgdG8gYmUgb24gdGhlIHNhZmUgc2lkZSwgd2UgYWN0dWFsbHkgdmFsaWRhdGUgdGhpcyBhbmQgYmFpbCBvdXQgaWYgd2UgZG9uJ3QgaGF2ZSBhIG1ldGhvZCAmIHVybFxuICAgICAgY29uc3QgbWV0aG9kID0gaXNTdHJpbmcoeGhyT3BlbkFyZ0FycmF5WzBdKSA/IHhock9wZW5BcmdBcnJheVswXS50b1VwcGVyQ2FzZSgpIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdXJsID0gcGFyc2VYaHJVcmxBcmcoeGhyT3BlbkFyZ0FycmF5WzFdKTtcblxuICAgICAgaWYgKCFtZXRob2QgfHwgIXVybCkge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWxPcGVuLmFwcGx5KHhock9wZW5UaGlzQXJnLCB4aHJPcGVuQXJnQXJyYXkpO1xuICAgICAgfVxuXG4gICAgICB4aHJPcGVuVGhpc0FyZ1tTRU5UUllfWEhSX0RBVEFfS0VZXSA9IHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICB1cmwsXG4gICAgICAgIHJlcXVlc3RfaGVhZGVyczoge30sXG4gICAgICB9O1xuXG4gICAgICAvLyBpZiBTZW50cnkga2V5IGFwcGVhcnMgaW4gVVJMLCBkb24ndCBjYXB0dXJlIGl0IGFzIGEgcmVxdWVzdFxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ1BPU1QnICYmIHVybC5tYXRjaCgvc2VudHJ5X2tleS8pKSB7XG4gICAgICAgIHhock9wZW5UaGlzQXJnLl9fc2VudHJ5X293bl9yZXF1ZXN0X18gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvbnJlYWR5c3RhdGVjaGFuZ2VIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAvLyBGb3Igd2hhdGV2ZXIgcmVhc29uLCB0aGlzIGlzIG5vdCB0aGUgc2FtZSBpbnN0YW5jZSBoZXJlIGFzIGZyb20gdGhlIG91dGVyIG1ldGhvZFxuICAgICAgICBjb25zdCB4aHJJbmZvID0geGhyT3BlblRoaXNBcmdbU0VOVFJZX1hIUl9EQVRBX0tFWV07XG5cbiAgICAgICAgaWYgKCF4aHJJbmZvKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHhock9wZW5UaGlzQXJnLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gdG91Y2hpbmcgc3RhdHVzQ29kZSBpbiBzb21lIHBsYXRmb3JtcyB0aHJvd3NcbiAgICAgICAgICAgIC8vIGFuIGV4Y2VwdGlvblxuICAgICAgICAgICAgeGhySW5mby5zdGF0dXNfY29kZSA9IHhock9wZW5UaGlzQXJnLnN0YXR1cztcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi9cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBoYW5kbGVyRGF0YSA9IHtcbiAgICAgICAgICAgIGVuZFRpbWVzdGFtcDogdGltZXN0YW1wSW5TZWNvbmRzKCkgKiAxMDAwLFxuICAgICAgICAgICAgc3RhcnRUaW1lc3RhbXAsXG4gICAgICAgICAgICB4aHI6IHhock9wZW5UaGlzQXJnLFxuICAgICAgICAgICAgdmlydHVhbEVycm9yLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdHJpZ2dlckhhbmRsZXJzKCd4aHInLCBoYW5kbGVyRGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmICgnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiB4aHJPcGVuVGhpc0FyZyAmJiB0eXBlb2YgeGhyT3BlblRoaXNBcmcub25yZWFkeXN0YXRlY2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHhock9wZW5UaGlzQXJnLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG5ldyBQcm94eSh4aHJPcGVuVGhpc0FyZy5vbnJlYWR5c3RhdGVjaGFuZ2UsIHtcbiAgICAgICAgICBhcHBseShvcmlnaW5hbE9ucmVhZHlzdGF0ZWNoYW5nZSwgb25yZWFkeXN0YXRlY2hhbmdlVGhpc0FyZywgb25yZWFkeXN0YXRlY2hhbmdlQXJnQXJyYXkpIHtcbiAgICAgICAgICAgIG9ucmVhZHlzdGF0ZWNoYW5nZUhhbmRsZXIoKTtcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbE9ucmVhZHlzdGF0ZWNoYW5nZS5hcHBseShvbnJlYWR5c3RhdGVjaGFuZ2VUaGlzQXJnLCBvbnJlYWR5c3RhdGVjaGFuZ2VBcmdBcnJheSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB4aHJPcGVuVGhpc0FyZy5hZGRFdmVudExpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdlJywgb25yZWFkeXN0YXRlY2hhbmdlSGFuZGxlcik7XG4gICAgICB9XG5cbiAgICAgIC8vIEludGVyY2VwdGluZyBgc2V0UmVxdWVzdEhlYWRlcmAgdG8gYWNjZXNzIHRoZSByZXF1ZXN0IGhlYWRlcnMgb2YgWEhSIGluc3RhbmNlLlxuICAgICAgLy8gVGhpcyB3aWxsIG9ubHkgd29yayBmb3IgdXNlci9saWJyYXJ5IGRlZmluZWQgaGVhZGVycywgbm90IGZvciB0aGUgZGVmYXVsdC9icm93c2VyLWFzc2lnbmVkIGhlYWRlcnMuXG4gICAgICAvLyBSZXF1ZXN0IGNvb2tpZXMgYXJlIGFsc28gdW5hdmFpbGFibGUgZm9yIFhIUiwgYXMgYENvb2tpZWAgaGVhZGVyIGNhbid0IGJlIGRlZmluZWQgYnkgYHNldFJlcXVlc3RIZWFkZXJgLlxuICAgICAgeGhyT3BlblRoaXNBcmcuc2V0UmVxdWVzdEhlYWRlciA9IG5ldyBQcm94eSh4aHJPcGVuVGhpc0FyZy5zZXRSZXF1ZXN0SGVhZGVyLCB7XG4gICAgICAgIGFwcGx5KFxuICAgICAgICAgIG9yaWdpbmFsU2V0UmVxdWVzdEhlYWRlcixcbiAgICAgICAgICBzZXRSZXF1ZXN0SGVhZGVyVGhpc0FyZyxcbiAgICAgICAgICBzZXRSZXF1ZXN0SGVhZGVyQXJnQXJyYXksXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IFtoZWFkZXIsIHZhbHVlXSA9IHNldFJlcXVlc3RIZWFkZXJBcmdBcnJheTtcblxuICAgICAgICAgIGNvbnN0IHhockluZm8gPSBzZXRSZXF1ZXN0SGVhZGVyVGhpc0FyZ1tTRU5UUllfWEhSX0RBVEFfS0VZXTtcblxuICAgICAgICAgIGlmICh4aHJJbmZvICYmIGlzU3RyaW5nKGhlYWRlcikgJiYgaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgICAgICB4aHJJbmZvLnJlcXVlc3RfaGVhZGVyc1toZWFkZXIudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gb3JpZ2luYWxTZXRSZXF1ZXN0SGVhZGVyLmFwcGx5KHNldFJlcXVlc3RIZWFkZXJUaGlzQXJnLCBzZXRSZXF1ZXN0SGVhZGVyQXJnQXJyYXkpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBvcmlnaW5hbE9wZW4uYXBwbHkoeGhyT3BlblRoaXNBcmcsIHhock9wZW5BcmdBcnJheSk7XG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICB4aHJwcm90by5zZW5kID0gbmV3IFByb3h5KHhocnByb3RvLnNlbmQsIHtcbiAgICBhcHBseShvcmlnaW5hbFNlbmQsIHNlbmRUaGlzQXJnLCBzZW5kQXJnQXJyYXkpIHtcbiAgICAgIGNvbnN0IHNlbnRyeVhockRhdGEgPSBzZW5kVGhpc0FyZ1tTRU5UUllfWEhSX0RBVEFfS0VZXTtcblxuICAgICAgaWYgKCFzZW50cnlYaHJEYXRhKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbFNlbmQuYXBwbHkoc2VuZFRoaXNBcmcsIHNlbmRBcmdBcnJheSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzZW5kQXJnQXJyYXlbMF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZW50cnlYaHJEYXRhLmJvZHkgPSBzZW5kQXJnQXJyYXlbMF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJEYXRhID0ge1xuICAgICAgICBzdGFydFRpbWVzdGFtcDogdGltZXN0YW1wSW5TZWNvbmRzKCkgKiAxMDAwLFxuICAgICAgICB4aHI6IHNlbmRUaGlzQXJnLFxuICAgICAgfTtcbiAgICAgIHRyaWdnZXJIYW5kbGVycygneGhyJywgaGFuZGxlckRhdGEpO1xuXG4gICAgICByZXR1cm4gb3JpZ2luYWxTZW5kLmFwcGx5KHNlbmRUaGlzQXJnLCBzZW5kQXJnQXJyYXkpO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgVVJMIGFyZ3VtZW50IG9mIGEgWEhSIG1ldGhvZCB0byBhIHN0cmluZy5cbiAqXG4gKiBTZWU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9YTUxIdHRwUmVxdWVzdC9vcGVuI3VybFxuICogdXJsOiBBIHN0cmluZyBvciBhbnkgb3RoZXIgb2JqZWN0IHdpdGggYSBzdHJpbmdpZmllciDigJQgaW5jbHVkaW5nIGEgVVJMIG9iamVjdCDigJQgdGhhdCBwcm92aWRlcyB0aGUgVVJMIG9mIHRoZSByZXNvdXJjZSB0byBzZW5kIHRoZSByZXF1ZXN0IHRvLlxuICpcbiAqIEBwYXJhbSB1cmwgLSBUaGUgVVJMIGFyZ3VtZW50IG9mIGFuIFhIUiBtZXRob2RcbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgVVJMIHN0cmluZyBvciB1bmRlZmluZWQgaWYgdGhlIFVSTCBpcyBpbnZhbGlkXG4gKi9cbmZ1bmN0aW9uIHBhcnNlWGhyVXJsQXJnKHVybCkge1xuICBpZiAoaXNTdHJpbmcodXJsKSkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIElmIHRoZSBwYXNzZWQgaW4gYXJndW1lbnQgaXMgbm90IGEgc3RyaW5nLCBpdCBzaG91bGQgaGF2ZSBhIGB0b1N0cmluZ2AgbWV0aG9kIGFzIGEgc3RyaW5naWZpZXIuXG4gICAgLy8gSWYgdGhhdCBmYWlscywgd2UganVzdCByZXR1cm4gdW5kZWZpbmVkIChsaWtlIGluIElFMTEgd2hlcmUgVVJMIGlzIG5vdCBhdmFpbGFibGUpXG4gICAgcmV0dXJuICh1cmwgKS50b1N0cmluZygpO1xuICB9IGNhdGNoIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgeyBTRU5UUllfWEhSX0RBVEFfS0VZLCBhZGRYaHJJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBpbnN0cnVtZW50WEhSIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD14aHIuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/instrument/xhr.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/browserMetrics.js":
/*!**************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/browserMetrics.js ***!
  \**************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   _addMeasureSpans: () => (/* binding */ _addMeasureSpans),\n/* harmony export */   _addNavigationSpans: () => (/* binding */ _addNavigationSpans),\n/* harmony export */   _addResourceSpans: () => (/* binding */ _addResourceSpans),\n/* harmony export */   addPerformanceEntries: () => (/* binding */ addPerformanceEntries),\n/* harmony export */   startTrackingInteractions: () => (/* binding */ startTrackingInteractions),\n/* harmony export */   startTrackingLongAnimationFrames: () => (/* binding */ startTrackingLongAnimationFrames),\n/* harmony export */   startTrackingLongTasks: () => (/* binding */ startTrackingLongTasks),\n/* harmony export */   startTrackingWebVitals: () => (/* binding */ startTrackingWebVitals)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../types.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/types.js\");\n/* harmony import */ var _cls_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cls.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/cls.js\");\n/* harmony import */ var _instrument_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./instrument.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/instrument.js\");\n/* harmony import */ var _lcp_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lcp.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/lcp.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/utils.js\");\n/* harmony import */ var _web_vitals_lib_getActivationStart_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./web-vitals/lib/getActivationStart.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getActivationStart.js\");\n/* harmony import */ var _web_vitals_lib_getNavigationEntry_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./web-vitals/lib/getNavigationEntry.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getNavigationEntry.js\");\n/* harmony import */ var _web_vitals_lib_getVisibilityWatcher_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./web-vitals/lib/getVisibilityWatcher.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getVisibilityWatcher.js\");\n\n\n\n\n\n\n\n\n\n\nconst MAX_INT_AS_BYTES = 2147483647;\n\nlet _performanceCursor = 0;\n\nlet _measurements = {};\nlet _lcpEntry;\nlet _clsEntry;\n\n/**\n * Start tracking web vitals.\n * The callback returned by this function can be used to stop tracking & ensure all measurements are final & captured.\n *\n * @returns A function that forces web vitals collection\n */\nfunction startTrackingWebVitals({\n  recordClsStandaloneSpans,\n  recordLcpStandaloneSpans,\n  client,\n}) {\n  const performance = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.getBrowserPerformanceAPI)();\n  if (performance && (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.browserPerformanceTimeOrigin)()) {\n    // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n    if (performance.mark) {\n      _types_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.performance.mark('sentry-tracing-init');\n    }\n    const fidCleanupCallback = _trackFID();\n    const lcpCleanupCallback = recordLcpStandaloneSpans ? (0,_lcp_js__WEBPACK_IMPORTED_MODULE_4__.trackLcpAsStandaloneSpan)(client) : _trackLCP();\n    const ttfbCleanupCallback = _trackTtfb();\n    const clsCleanupCallback = recordClsStandaloneSpans ? (0,_cls_js__WEBPACK_IMPORTED_MODULE_2__.trackClsAsStandaloneSpan)(client) : _trackCLS();\n\n    return () => {\n      fidCleanupCallback();\n      lcpCleanupCallback?.();\n      ttfbCleanupCallback();\n      clsCleanupCallback?.();\n    };\n  }\n\n  return () => undefined;\n}\n\n/**\n * Start tracking long tasks.\n */\nfunction startTrackingLongTasks() {\n  (0,_instrument_js__WEBPACK_IMPORTED_MODULE_3__.addPerformanceInstrumentationHandler)('longtask', ({ entries }) => {\n    const parent = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n    if (!parent) {\n      return;\n    }\n\n    const { op: parentOp, start_timestamp: parentStartTimestamp } = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(parent);\n\n    for (const entry of entries) {\n      const startTime = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.msToSec)(((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.browserPerformanceTimeOrigin)() ) + entry.startTime);\n      const duration = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.msToSec)(entry.duration);\n\n      if (parentOp === 'navigation' && parentStartTimestamp && startTime < parentStartTimestamp) {\n        // Skip adding a span if the long task started before the navigation started.\n        // `startAndEndSpan` will otherwise adjust the parent's start time to the span's start\n        // time, potentially skewing the duration of the actual navigation as reported via our\n        // routing instrumentations\n        continue;\n      }\n\n      (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.startAndEndSpan)(parent, startTime, startTime + duration, {\n        name: 'Main UI thread blocked',\n        op: 'ui.long-task',\n        attributes: {\n          [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n        },\n      });\n    }\n  });\n}\n\n/**\n * Start tracking long animation frames.\n */\nfunction startTrackingLongAnimationFrames() {\n  // NOTE: the current web-vitals version (3.5.2) does not support long-animation-frame, so\n  // we directly observe `long-animation-frame` events instead of through the web-vitals\n  // `observe` helper function.\n  const observer = new PerformanceObserver(list => {\n    const parent = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n    if (!parent) {\n      return;\n    }\n    for (const entry of list.getEntries() ) {\n      if (!entry.scripts[0]) {\n        continue;\n      }\n\n      const startTime = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.msToSec)(((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.browserPerformanceTimeOrigin)() ) + entry.startTime);\n\n      const { start_timestamp: parentStartTimestamp, op: parentOp } = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(parent);\n\n      if (parentOp === 'navigation' && parentStartTimestamp && startTime < parentStartTimestamp) {\n        // Skip adding the span if the long animation frame started before the navigation started.\n        // `startAndEndSpan` will otherwise adjust the parent's start time to the span's start\n        // time, potentially skewing the duration of the actual navigation as reported via our\n        // routing instrumentations\n        continue;\n      }\n      const duration = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.msToSec)(entry.duration);\n\n      const attributes = {\n        [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n      };\n\n      const initialScript = entry.scripts[0];\n      const { invoker, invokerType, sourceURL, sourceFunctionName, sourceCharPosition } = initialScript;\n      attributes['browser.script.invoker'] = invoker;\n      attributes['browser.script.invoker_type'] = invokerType;\n      if (sourceURL) {\n        attributes['code.filepath'] = sourceURL;\n      }\n      if (sourceFunctionName) {\n        attributes['code.function'] = sourceFunctionName;\n      }\n      if (sourceCharPosition !== -1) {\n        attributes['browser.script.source_char_position'] = sourceCharPosition;\n      }\n\n      (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.startAndEndSpan)(parent, startTime, startTime + duration, {\n        name: 'Main UI thread blocked',\n        op: 'ui.long-animation-frame',\n        attributes,\n      });\n    }\n  });\n\n  observer.observe({ type: 'long-animation-frame', buffered: true });\n}\n\n/**\n * Start tracking interaction events.\n */\nfunction startTrackingInteractions() {\n  (0,_instrument_js__WEBPACK_IMPORTED_MODULE_3__.addPerformanceInstrumentationHandler)('event', ({ entries }) => {\n    const parent = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n    if (!parent) {\n      return;\n    }\n    for (const entry of entries) {\n      if (entry.name === 'click') {\n        const startTime = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.msToSec)(((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.browserPerformanceTimeOrigin)() ) + entry.startTime);\n        const duration = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.msToSec)(entry.duration);\n\n        const spanOptions = {\n          name: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.htmlTreeAsString)(entry.target),\n          op: `ui.interaction.${entry.name}`,\n          startTime: startTime,\n          attributes: {\n            [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n          },\n        };\n\n        const componentName = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getComponentName)(entry.target);\n        if (componentName) {\n          spanOptions.attributes['ui.component_name'] = componentName;\n        }\n\n        (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.startAndEndSpan)(parent, startTime, startTime + duration, spanOptions);\n      }\n    }\n  });\n}\n\n/**\n * Starts tracking the Cumulative Layout Shift on the current page and collects the value and last entry\n * to the `_measurements` object which ultimately is applied to the pageload span's measurements.\n */\nfunction _trackCLS() {\n  return (0,_instrument_js__WEBPACK_IMPORTED_MODULE_3__.addClsInstrumentationHandler)(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1] ;\n    if (!entry) {\n      return;\n    }\n    _measurements['cls'] = { value: metric.value, unit: '' };\n    _clsEntry = entry;\n  }, true);\n}\n\n/** Starts tracking the Largest Contentful Paint on the current page. */\nfunction _trackLCP() {\n  return (0,_instrument_js__WEBPACK_IMPORTED_MODULE_3__.addLcpInstrumentationHandler)(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    _measurements['lcp'] = { value: metric.value, unit: 'millisecond' };\n    _lcpEntry = entry ;\n  }, true);\n}\n\n/** Starts tracking the First Input Delay on the current page. */\nfunction _trackFID() {\n  return (0,_instrument_js__WEBPACK_IMPORTED_MODULE_3__.addFidInstrumentationHandler)(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    const timeOrigin = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.msToSec)((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.browserPerformanceTimeOrigin)() );\n    const startTime = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.msToSec)(entry.startTime);\n    _measurements['fid'] = { value: metric.value, unit: 'millisecond' };\n    _measurements['mark.fid'] = { value: timeOrigin + startTime, unit: 'second' };\n  });\n}\n\nfunction _trackTtfb() {\n  return (0,_instrument_js__WEBPACK_IMPORTED_MODULE_3__.addTtfbInstrumentationHandler)(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1];\n    if (!entry) {\n      return;\n    }\n\n    _measurements['ttfb'] = { value: metric.value, unit: 'millisecond' };\n  });\n}\n\n/** Add performance related spans to a transaction */\nfunction addPerformanceEntries(span, options) {\n  const performance = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.getBrowserPerformanceAPI)();\n  const origin = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.browserPerformanceTimeOrigin)();\n  if (!performance?.getEntries || !origin) {\n    // Gatekeeper if performance API not available\n    return;\n  }\n\n  const timeOrigin = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.msToSec)(origin);\n\n  const performanceEntries = performance.getEntries();\n\n  const { op, start_timestamp: transactionStartTime } = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(span);\n\n  performanceEntries.slice(_performanceCursor).forEach(entry => {\n    const startTime = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.msToSec)(entry.startTime);\n    const duration = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.msToSec)(\n      // Inexplicably, Chrome sometimes emits a negative duration. We need to work around this.\n      // There is a SO post attempting to explain this, but it leaves one with open questions: https://stackoverflow.com/questions/23191918/peformance-getentries-and-negative-duration-display\n      // The way we clamp the value is probably not accurate, since we have observed this happen for things that may take a while to load, like for example the replay worker.\n      // TODO: Investigate why this happens and how to properly mitigate. For now, this is a workaround to prevent transactions being dropped due to negative duration spans.\n      Math.max(0, entry.duration),\n    );\n\n    if (op === 'navigation' && transactionStartTime && timeOrigin + startTime < transactionStartTime) {\n      return;\n    }\n\n    switch (entry.entryType) {\n      case 'navigation': {\n        _addNavigationSpans(span, entry , timeOrigin);\n        break;\n      }\n      case 'mark':\n      case 'paint':\n      case 'measure': {\n        _addMeasureSpans(span, entry, startTime, duration, timeOrigin, options.ignorePerformanceApiSpans);\n\n        // capture web vitals\n        const firstHidden = (0,_web_vitals_lib_getVisibilityWatcher_js__WEBPACK_IMPORTED_MODULE_8__.getVisibilityWatcher)();\n        // Only report if the page wasn't hidden prior to the web vital.\n        const shouldRecord = entry.startTime < firstHidden.firstHiddenTime;\n\n        if (entry.name === 'first-paint' && shouldRecord) {\n          _measurements['fp'] = { value: entry.startTime, unit: 'millisecond' };\n        }\n        if (entry.name === 'first-contentful-paint' && shouldRecord) {\n          _measurements['fcp'] = { value: entry.startTime, unit: 'millisecond' };\n        }\n        break;\n      }\n      case 'resource': {\n        _addResourceSpans(\n          span,\n          entry ,\n          entry.name,\n          startTime,\n          duration,\n          timeOrigin,\n          options.ignoreResourceSpans,\n        );\n        break;\n      }\n      // Ignore other entry types.\n    }\n  });\n\n  _performanceCursor = Math.max(performanceEntries.length - 1, 0);\n\n  _trackNavigator(span);\n\n  // Measurements are only available for pageload transactions\n  if (op === 'pageload') {\n    _addTtfbRequestTimeToMeasurements(_measurements);\n\n    const fidMark = _measurements['mark.fid'];\n    if (fidMark && _measurements['fid']) {\n      // create span for FID\n      (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.startAndEndSpan)(span, fidMark.value, fidMark.value + (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.msToSec)(_measurements['fid'].value), {\n        name: 'first input delay',\n        op: 'ui.action',\n        attributes: {\n          [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n        },\n      });\n\n      // Delete mark.fid as we don't want it to be part of final payload\n      delete _measurements['mark.fid'];\n    }\n\n    // If CLS standalone spans are enabled, don't record CLS as a measurement\n    if (!options.recordClsOnPageloadSpan) {\n      delete _measurements.cls;\n    }\n\n    // If LCP standalone spans are enabled, don't record LCP as a measurement\n    if (!options.recordLcpOnPageloadSpan) {\n      delete _measurements.lcp;\n    }\n\n    Object.entries(_measurements).forEach(([measurementName, measurement]) => {\n      (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.setMeasurement)(measurementName, measurement.value, measurement.unit);\n    });\n\n    // Set timeOrigin which denotes the timestamp which to base the LCP/FCP/FP/TTFB measurements on\n    span.setAttribute('performance.timeOrigin', timeOrigin);\n\n    // In prerendering scenarios, where a page might be prefetched and pre-rendered before the user clicks the link,\n    // the navigation starts earlier than when the user clicks it. Web Vitals should always be based on the\n    // user-perceived time, so they are not reported from the actual start of the navigation, but rather from the\n    // time where the user actively started the navigation, for example by clicking a link.\n    // This is user action is called \"activation\" and the time between navigation and activation is stored in\n    // the `activationStart` attribute of the \"navigation\" PerformanceEntry.\n    span.setAttribute('performance.activationStart', (0,_web_vitals_lib_getActivationStart_js__WEBPACK_IMPORTED_MODULE_6__.getActivationStart)());\n\n    _setWebVitalAttributes(span, options);\n  }\n\n  _lcpEntry = undefined;\n  _clsEntry = undefined;\n  _measurements = {};\n}\n\n/**\n * Create measure related spans.\n * Exported only for tests.\n */\nfunction _addMeasureSpans(\n  span,\n  entry,\n  startTime,\n  duration,\n  timeOrigin,\n  ignorePerformanceApiSpans,\n) {\n  if (\n    ['mark', 'measure'].includes(entry.entryType) &&\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.stringMatchesSomePattern)(entry.name, ignorePerformanceApiSpans)\n  ) {\n    return;\n  }\n\n  const navEntry = (0,_web_vitals_lib_getNavigationEntry_js__WEBPACK_IMPORTED_MODULE_7__.getNavigationEntry)(false);\n  const requestTime = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.msToSec)(navEntry ? navEntry.requestStart : 0);\n  // Because performance.measure accepts arbitrary timestamps it can produce\n  // spans that happen before the browser even makes a request for the page.\n  //\n  // An example of this is the automatically generated Next.js-before-hydration\n  // spans created by the Next.js framework.\n  //\n  // To prevent this we will pin the start timestamp to the request start time\n  // This does make duration inaccurate, so if this does happen, we will add\n  // an attribute to the span\n  const measureStartTimestamp = timeOrigin + Math.max(startTime, requestTime);\n  const startTimeStamp = timeOrigin + startTime;\n  const measureEndTimestamp = startTimeStamp + duration;\n\n  const attributes = {\n    [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics',\n  };\n\n  if (measureStartTimestamp !== startTimeStamp) {\n    attributes['sentry.browser.measure_happened_before_request'] = true;\n    attributes['sentry.browser.measure_start_time'] = measureStartTimestamp;\n  }\n\n  _addDetailToSpanAttributes(attributes, entry );\n\n  // Measurements from third parties can be off, which would create invalid spans, dropping transactions in the process.\n  if (measureStartTimestamp <= measureEndTimestamp) {\n    (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.startAndEndSpan)(span, measureStartTimestamp, measureEndTimestamp, {\n      name: entry.name ,\n      op: entry.entryType ,\n      attributes,\n    });\n  }\n}\n\nfunction _addDetailToSpanAttributes(attributes, performanceMeasure) {\n  try {\n    // Accessing detail might throw in some browsers (e.g., Firefox) due to security restrictions\n    const detail = performanceMeasure.detail;\n\n    if (!detail) {\n      return;\n    }\n\n    // Process detail based on its type\n    if (typeof detail === 'object') {\n      // Handle object details\n      for (const [key, value] of Object.entries(detail)) {\n        if (value && (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isPrimitive)(value)) {\n          attributes[`sentry.browser.measure.detail.${key}`] = value ;\n        } else if (value !== undefined) {\n          try {\n            // This is user defined so we can't guarantee it's serializable\n            attributes[`sentry.browser.measure.detail.${key}`] = JSON.stringify(value);\n          } catch {\n            // Skip values that can't be stringified\n          }\n        }\n      }\n      return;\n    }\n\n    if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isPrimitive)(detail)) {\n      // Handle primitive details\n      attributes['sentry.browser.measure.detail'] = detail ;\n      return;\n    }\n\n    try {\n      attributes['sentry.browser.measure.detail'] = JSON.stringify(detail);\n    } catch {\n      // Skip if stringification fails\n    }\n  } catch {\n    // Silently ignore any errors when accessing detail\n    // This handles the Firefox \"Permission denied to access object\" error\n  }\n}\n\n/**\n * Instrument navigation entries\n * exported only for tests\n */\nfunction _addNavigationSpans(span, entry, timeOrigin) {\n  (['unloadEvent', 'redirect', 'domContentLoadedEvent', 'loadEvent', 'connect'] ).forEach(event => {\n    _addPerformanceNavigationTiming(span, entry, event, timeOrigin);\n  });\n  _addPerformanceNavigationTiming(span, entry, 'secureConnection', timeOrigin, 'TLS/SSL');\n  _addPerformanceNavigationTiming(span, entry, 'fetch', timeOrigin, 'cache');\n  _addPerformanceNavigationTiming(span, entry, 'domainLookup', timeOrigin, 'DNS');\n\n  _addRequest(span, entry, timeOrigin);\n}\n\n/** Create performance navigation related spans */\nfunction _addPerformanceNavigationTiming(\n  span,\n  entry,\n  event,\n  timeOrigin,\n  name = event,\n) {\n  const eventEnd = _getEndPropertyNameForNavigationTiming(event) ;\n  const end = entry[eventEnd];\n  const start = entry[`${event}Start`];\n  if (!start || !end) {\n    return;\n  }\n  (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.startAndEndSpan)(span, timeOrigin + (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.msToSec)(start), timeOrigin + (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.msToSec)(end), {\n    op: `browser.${name}`,\n    name: entry.name,\n    attributes: {\n      [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n      ...(event === 'redirect' && entry.redirectCount != null ? { 'http.redirect_count': entry.redirectCount } : {}),\n    },\n  });\n}\n\nfunction _getEndPropertyNameForNavigationTiming(event) {\n  if (event === 'secureConnection') {\n    return 'connectEnd';\n  }\n  if (event === 'fetch') {\n    return 'domainLookupStart';\n  }\n  return `${event}End`;\n}\n\n/** Create request and response related spans */\nfunction _addRequest(span, entry, timeOrigin) {\n  const requestStartTimestamp = timeOrigin + (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.msToSec)(entry.requestStart );\n  const responseEndTimestamp = timeOrigin + (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.msToSec)(entry.responseEnd );\n  const responseStartTimestamp = timeOrigin + (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.msToSec)(entry.responseStart );\n  if (entry.responseEnd) {\n    // It is possible that we are collecting these metrics when the page hasn't finished loading yet, for example when the HTML slowly streams in.\n    // In this case, ie. when the document request hasn't finished yet, `entry.responseEnd` will be 0.\n    // In order not to produce faulty spans, where the end timestamp is before the start timestamp, we will only collect\n    // these spans when the responseEnd value is available. The backend (Relay) would drop the entire span if it contained faulty spans.\n    (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.startAndEndSpan)(span, requestStartTimestamp, responseEndTimestamp, {\n      op: 'browser.request',\n      name: entry.name,\n      attributes: {\n        [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n      },\n    });\n\n    (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.startAndEndSpan)(span, responseStartTimestamp, responseEndTimestamp, {\n      op: 'browser.response',\n      name: entry.name,\n      attributes: {\n        [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.metrics',\n      },\n    });\n  }\n}\n\n/**\n * Create resource-related spans.\n * Exported only for tests.\n */\nfunction _addResourceSpans(\n  span,\n  entry,\n  resourceUrl,\n  startTime,\n  duration,\n  timeOrigin,\n  ignoreResourceSpans,\n) {\n  // we already instrument based on fetch and xhr, so we don't need to\n  // duplicate spans here.\n  if (entry.initiatorType === 'xmlhttprequest' || entry.initiatorType === 'fetch') {\n    return;\n  }\n\n  const op = entry.initiatorType ? `resource.${entry.initiatorType}` : 'resource.other';\n  if (ignoreResourceSpans?.includes(op)) {\n    return;\n  }\n\n  const parsedUrl = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.parseUrl)(resourceUrl);\n\n  const attributes = {\n    [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.resource.browser.metrics',\n  };\n  setResourceEntrySizeData(attributes, entry, 'transferSize', 'http.response_transfer_size');\n  setResourceEntrySizeData(attributes, entry, 'encodedBodySize', 'http.response_content_length');\n  setResourceEntrySizeData(attributes, entry, 'decodedBodySize', 'http.decoded_response_content_length');\n\n  // `deliveryType` is experimental and does not exist everywhere\n  const deliveryType = (entry ).deliveryType;\n  if (deliveryType != null) {\n    attributes['http.response_delivery_type'] = deliveryType;\n  }\n\n  // Types do not reflect this property yet\n  const renderBlockingStatus = (entry )\n    .renderBlockingStatus;\n  if (renderBlockingStatus) {\n    attributes['resource.render_blocking_status'] = renderBlockingStatus;\n  }\n\n  if (parsedUrl.protocol) {\n    attributes['url.scheme'] = parsedUrl.protocol.split(':').pop(); // the protocol returned by parseUrl includes a :, but OTEL spec does not, so we remove it.\n  }\n\n  if (parsedUrl.host) {\n    attributes['server.address'] = parsedUrl.host;\n  }\n\n  attributes['url.same_origin'] = resourceUrl.includes(_types_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.location.origin);\n\n  // Checking for only `undefined` and `null` is intentional because it's\n  // valid for `nextHopProtocol` to be an empty string.\n  if (entry.nextHopProtocol != null) {\n    const { name, version } = (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.extractNetworkProtocol)(entry.nextHopProtocol);\n    attributes['network.protocol.name'] = name;\n    attributes['network.protocol.version'] = version;\n  }\n\n  const startTimestamp = timeOrigin + startTime;\n  const endTimestamp = startTimestamp + duration;\n\n  (0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.startAndEndSpan)(span, startTimestamp, endTimestamp, {\n    name: resourceUrl.replace(_types_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.location.origin, ''),\n    op,\n    attributes,\n  });\n}\n\n/**\n * Capture the information of the user agent.\n */\nfunction _trackNavigator(span) {\n  const navigator = _types_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.navigator ;\n  if (!navigator) {\n    return;\n  }\n\n  // track network connectivity\n  const connection = navigator.connection;\n  if (connection) {\n    if (connection.effectiveType) {\n      span.setAttribute('effectiveConnectionType', connection.effectiveType);\n    }\n\n    if (connection.type) {\n      span.setAttribute('connectionType', connection.type);\n    }\n\n    if ((0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.isMeasurementValue)(connection.rtt)) {\n      _measurements['connection.rtt'] = { value: connection.rtt, unit: 'millisecond' };\n    }\n  }\n\n  if ((0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.isMeasurementValue)(navigator.deviceMemory)) {\n    span.setAttribute('deviceMemory', `${navigator.deviceMemory} GB`);\n  }\n\n  if ((0,_utils_js__WEBPACK_IMPORTED_MODULE_5__.isMeasurementValue)(navigator.hardwareConcurrency)) {\n    span.setAttribute('hardwareConcurrency', String(navigator.hardwareConcurrency));\n  }\n}\n\n/** Add LCP / CLS data to span to allow debugging */\nfunction _setWebVitalAttributes(span, options) {\n  // Only add LCP attributes if LCP is being recorded on the pageload span\n  if (_lcpEntry && options.recordLcpOnPageloadSpan) {\n    // Capture Properties of the LCP element that contributes to the LCP.\n\n    if (_lcpEntry.element) {\n      span.setAttribute('lcp.element', (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.htmlTreeAsString)(_lcpEntry.element));\n    }\n\n    if (_lcpEntry.id) {\n      span.setAttribute('lcp.id', _lcpEntry.id);\n    }\n\n    if (_lcpEntry.url) {\n      // Trim URL to the first 200 characters.\n      span.setAttribute('lcp.url', _lcpEntry.url.trim().slice(0, 200));\n    }\n\n    if (_lcpEntry.loadTime != null) {\n      // loadTime is the time of LCP that's related to receiving the LCP element response..\n      span.setAttribute('lcp.loadTime', _lcpEntry.loadTime);\n    }\n\n    if (_lcpEntry.renderTime != null) {\n      // renderTime is loadTime + rendering time\n      // it's 0 if the LCP element is loaded from a 3rd party origin that doesn't send the\n      // `Timing-Allow-Origin` header.\n      span.setAttribute('lcp.renderTime', _lcpEntry.renderTime);\n    }\n\n    span.setAttribute('lcp.size', _lcpEntry.size);\n  }\n\n  // Only add CLS attributes if CLS is being recorded on the pageload span\n  if (_clsEntry?.sources && options.recordClsOnPageloadSpan) {\n    _clsEntry.sources.forEach((source, index) =>\n      span.setAttribute(`cls.source.${index + 1}`, (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.htmlTreeAsString)(source.node)),\n    );\n  }\n}\n\nfunction setResourceEntrySizeData(\n  attributes,\n  entry,\n  key,\n  dataKey,\n) {\n  const entryVal = entry[key];\n  if (entryVal != null && entryVal < MAX_INT_AS_BYTES) {\n    attributes[dataKey] = entryVal;\n  }\n}\n\n/**\n * Add ttfb request time information to measurements.\n *\n * ttfb information is added via vendored web vitals library.\n */\nfunction _addTtfbRequestTimeToMeasurements(_measurements) {\n  const navEntry = (0,_web_vitals_lib_getNavigationEntry_js__WEBPACK_IMPORTED_MODULE_7__.getNavigationEntry)(false);\n  if (!navEntry) {\n    return;\n  }\n\n  const { responseStart, requestStart } = navEntry;\n\n  if (requestStart <= responseStart) {\n    _measurements['ttfb.requestTime'] = {\n      value: responseStart - requestStart,\n      unit: 'millisecond',\n    };\n  }\n}\n\n\n//# sourceMappingURL=browserMetrics.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3MvYnJvd3Nlck1ldHJpY3MuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBOE47QUFDekw7QUFDZTtBQUM0STtBQUM1STtBQUN3RTtBQUNoRDtBQUNBO0FBQ0k7O0FBRWhGOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxzQkFBc0IsbUVBQXdCO0FBQzlDLHFCQUFxQiwwRUFBNEI7QUFDakQ7QUFDQTtBQUNBLE1BQU0sNkNBQU07QUFDWjtBQUNBO0FBQ0EsMERBQTBELGlFQUF3QjtBQUNsRjtBQUNBLDBEQUEwRCxpRUFBd0I7O0FBRWxGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG9GQUFvQyxnQkFBZ0IsU0FBUztBQUMvRCxtQkFBbUIsMkRBQWE7QUFDaEM7QUFDQTtBQUNBOztBQUVBLFlBQVksc0RBQXNELEVBQUUsd0RBQVU7O0FBRTlFO0FBQ0Esd0JBQXdCLGtEQUFPLEVBQUUsMEVBQTRCO0FBQzdELHVCQUF1QixrREFBTzs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSwwREFBZTtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBFQUFnQztBQUMzQyxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsMkRBQWE7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCLGtEQUFPLEVBQUUsMEVBQTRCOztBQUU3RCxjQUFjLHNEQUFzRCxFQUFFLHdEQUFVOztBQUVoRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixrREFBTzs7QUFFOUI7QUFDQSxTQUFTLDBFQUFnQztBQUN6Qzs7QUFFQTtBQUNBLGNBQWMsMEVBQTBFO0FBQ3hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSwwREFBZTtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHOztBQUVILHFCQUFxQiw4Q0FBOEM7QUFDbkU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLG9GQUFvQyxhQUFhLFNBQVM7QUFDNUQsbUJBQW1CLDJEQUFhO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsa0RBQU8sRUFBRSwwRUFBNEI7QUFDL0QseUJBQXlCLGtEQUFPOztBQUVoQztBQUNBLGdCQUFnQiw4REFBZ0I7QUFDaEMsZ0NBQWdDLFdBQVc7QUFDM0M7QUFDQTtBQUNBLGFBQWEsMEVBQWdDO0FBQzdDLFdBQVc7QUFDWDs7QUFFQSw4QkFBOEIsOERBQWdCO0FBQzlDO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLDBEQUFlO0FBQ3ZCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsNEVBQTRCLElBQUksUUFBUTtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EsU0FBUyw0RUFBNEIsSUFBSSxRQUFRO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QjtBQUM3QjtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EsU0FBUyw0RUFBNEIsSUFBSSxRQUFRO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixrREFBTyxDQUFDLDBFQUE0QjtBQUMzRCxzQkFBc0Isa0RBQU87QUFDN0IsNkJBQTZCO0FBQzdCLGtDQUFrQztBQUNsQyxHQUFHO0FBQ0g7O0FBRUE7QUFDQSxTQUFTLDZFQUE2QixJQUFJLFFBQVE7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOEJBQThCO0FBQzlCLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCLG1FQUF3QjtBQUM5QyxpQkFBaUIsMEVBQTRCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixrREFBTzs7QUFFNUI7O0FBRUEsVUFBVSw0Q0FBNEMsRUFBRSx3REFBVTs7QUFFbEU7QUFDQSxzQkFBc0Isa0RBQU87QUFDN0IscUJBQXFCLGtEQUFPO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEJBQTRCLDZGQUFvQjtBQUNoRDtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sMERBQWUsc0NBQXNDLGtEQUFPO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBLFdBQVcsMEVBQWdDO0FBQzNDLFNBQVM7QUFDVCxPQUFPOztBQUVQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU0sNERBQWM7QUFDcEIsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCx5RkFBa0I7O0FBRXZFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksc0VBQXdCO0FBQzVCO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIseUZBQWtCO0FBQ3JDLHNCQUFzQixrREFBTztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLLDBFQUFnQztBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSSwwREFBZTtBQUNuQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIseURBQVc7QUFDaEMsc0RBQXNELElBQUk7QUFDMUQsVUFBVTtBQUNWO0FBQ0E7QUFDQSx3REFBd0QsSUFBSTtBQUM1RCxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFFBQVEseURBQVc7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLE1BQU07QUFDL0I7QUFDQTtBQUNBO0FBQ0EsRUFBRSwwREFBZSxvQkFBb0Isa0RBQU8sc0JBQXNCLGtEQUFPO0FBQ3pFLG1CQUFtQixLQUFLO0FBQ3hCO0FBQ0E7QUFDQSxPQUFPLDBFQUFnQztBQUN2QyxrRUFBa0UsNkNBQTZDLElBQUk7QUFDbkgsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQjs7QUFFQTtBQUNBO0FBQ0EsNkNBQTZDLGtEQUFPO0FBQ3BELDRDQUE0QyxrREFBTztBQUNuRCw4Q0FBOEMsa0RBQU87QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksMERBQWU7QUFDbkI7QUFDQTtBQUNBO0FBQ0EsU0FBUywwRUFBZ0M7QUFDekMsT0FBTztBQUNQLEtBQUs7O0FBRUwsSUFBSSwwREFBZTtBQUNuQjtBQUNBO0FBQ0E7QUFDQSxTQUFTLDBFQUFnQztBQUN6QyxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLCtDQUErQyxvQkFBb0I7QUFDbkU7QUFDQTtBQUNBOztBQUVBLG9CQUFvQixzREFBUTs7QUFFNUI7QUFDQSxLQUFLLDBFQUFnQztBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9FQUFvRTtBQUNwRTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsdURBQXVELDZDQUFNOztBQUU3RDtBQUNBO0FBQ0E7QUFDQSxZQUFZLGdCQUFnQixFQUFFLGlFQUFzQjtBQUNwRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxFQUFFLDBEQUFlO0FBQ2pCLDhCQUE4Qiw2Q0FBTTtBQUNwQztBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLDZDQUFNO0FBQzFCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFFBQVEsNkRBQWtCO0FBQzFCLDBDQUEwQztBQUMxQztBQUNBOztBQUVBLE1BQU0sNkRBQWtCO0FBQ3hCLHlDQUF5Qyx3QkFBd0I7QUFDakU7O0FBRUEsTUFBTSw2REFBa0I7QUFDeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx1Q0FBdUMsOERBQWdCO0FBQ3ZEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsVUFBVSxHQUFHLDhEQUFnQjtBQUNuRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIseUZBQWtCO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLDhCQUE4Qjs7QUFFeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRXdNO0FBQ3hNIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vbWV0cmljcy9icm93c2VyTWV0cmljcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBicm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luLCBzcGFuVG9KU09OLCBzZXRNZWFzdXJlbWVudCwgZ2V0QWN0aXZlU3BhbiwgcGFyc2VVcmwsIHN0cmluZ01hdGNoZXNTb21lUGF0dGVybiwgaXNQcmltaXRpdmUsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOLCBodG1sVHJlZUFzU3RyaW5nLCBnZXRDb21wb25lbnROYW1lIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IFdJTkRPVyB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IHRyYWNrQ2xzQXNTdGFuZGFsb25lU3BhbiB9IGZyb20gJy4vY2xzLmpzJztcbmltcG9ydCB7IGFkZFBlcmZvcm1hbmNlSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgYWRkRmlkSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgYWRkTGNwSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgYWRkVHRmYkluc3RydW1lbnRhdGlvbkhhbmRsZXIsIGFkZENsc0luc3RydW1lbnRhdGlvbkhhbmRsZXIgfSBmcm9tICcuL2luc3RydW1lbnQuanMnO1xuaW1wb3J0IHsgdHJhY2tMY3BBc1N0YW5kYWxvbmVTcGFuIH0gZnJvbSAnLi9sY3AuanMnO1xuaW1wb3J0IHsgZ2V0QnJvd3NlclBlcmZvcm1hbmNlQVBJLCBtc1RvU2VjLCBzdGFydEFuZEVuZFNwYW4sIGV4dHJhY3ROZXR3b3JrUHJvdG9jb2wsIGlzTWVhc3VyZW1lbnRWYWx1ZSB9IGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IHsgZ2V0QWN0aXZhdGlvblN0YXJ0IH0gZnJvbSAnLi93ZWItdml0YWxzL2xpYi9nZXRBY3RpdmF0aW9uU3RhcnQuanMnO1xuaW1wb3J0IHsgZ2V0TmF2aWdhdGlvbkVudHJ5IH0gZnJvbSAnLi93ZWItdml0YWxzL2xpYi9nZXROYXZpZ2F0aW9uRW50cnkuanMnO1xuaW1wb3J0IHsgZ2V0VmlzaWJpbGl0eVdhdGNoZXIgfSBmcm9tICcuL3dlYi12aXRhbHMvbGliL2dldFZpc2liaWxpdHlXYXRjaGVyLmpzJztcblxuY29uc3QgTUFYX0lOVF9BU19CWVRFUyA9IDIxNDc0ODM2NDc7XG5cbmxldCBfcGVyZm9ybWFuY2VDdXJzb3IgPSAwO1xuXG5sZXQgX21lYXN1cmVtZW50cyA9IHt9O1xubGV0IF9sY3BFbnRyeTtcbmxldCBfY2xzRW50cnk7XG5cbi8qKlxuICogU3RhcnQgdHJhY2tpbmcgd2ViIHZpdGFscy5cbiAqIFRoZSBjYWxsYmFjayByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHN0b3AgdHJhY2tpbmcgJiBlbnN1cmUgYWxsIG1lYXN1cmVtZW50cyBhcmUgZmluYWwgJiBjYXB0dXJlZC5cbiAqXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgZm9yY2VzIHdlYiB2aXRhbHMgY29sbGVjdGlvblxuICovXG5mdW5jdGlvbiBzdGFydFRyYWNraW5nV2ViVml0YWxzKHtcbiAgcmVjb3JkQ2xzU3RhbmRhbG9uZVNwYW5zLFxuICByZWNvcmRMY3BTdGFuZGFsb25lU3BhbnMsXG4gIGNsaWVudCxcbn0pIHtcbiAgY29uc3QgcGVyZm9ybWFuY2UgPSBnZXRCcm93c2VyUGVyZm9ybWFuY2VBUEkoKTtcbiAgaWYgKHBlcmZvcm1hbmNlICYmIGJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4oKSkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igd2Ugd2FudCB0byBtYWtlIHN1cmUgYWxsIG9mIHRoZXNlIGFyZSBhdmFpbGFibGUsIGV2ZW4gaWYgVFMgaXMgc3VyZSB0aGV5IGFyZVxuICAgIGlmIChwZXJmb3JtYW5jZS5tYXJrKSB7XG4gICAgICBXSU5ET1cucGVyZm9ybWFuY2UubWFyaygnc2VudHJ5LXRyYWNpbmctaW5pdCcpO1xuICAgIH1cbiAgICBjb25zdCBmaWRDbGVhbnVwQ2FsbGJhY2sgPSBfdHJhY2tGSUQoKTtcbiAgICBjb25zdCBsY3BDbGVhbnVwQ2FsbGJhY2sgPSByZWNvcmRMY3BTdGFuZGFsb25lU3BhbnMgPyB0cmFja0xjcEFzU3RhbmRhbG9uZVNwYW4oY2xpZW50KSA6IF90cmFja0xDUCgpO1xuICAgIGNvbnN0IHR0ZmJDbGVhbnVwQ2FsbGJhY2sgPSBfdHJhY2tUdGZiKCk7XG4gICAgY29uc3QgY2xzQ2xlYW51cENhbGxiYWNrID0gcmVjb3JkQ2xzU3RhbmRhbG9uZVNwYW5zID8gdHJhY2tDbHNBc1N0YW5kYWxvbmVTcGFuKGNsaWVudCkgOiBfdHJhY2tDTFMoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBmaWRDbGVhbnVwQ2FsbGJhY2soKTtcbiAgICAgIGxjcENsZWFudXBDYWxsYmFjaz8uKCk7XG4gICAgICB0dGZiQ2xlYW51cENhbGxiYWNrKCk7XG4gICAgICBjbHNDbGVhbnVwQ2FsbGJhY2s/LigpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gKCkgPT4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFN0YXJ0IHRyYWNraW5nIGxvbmcgdGFza3MuXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0VHJhY2tpbmdMb25nVGFza3MoKSB7XG4gIGFkZFBlcmZvcm1hbmNlSW5zdHJ1bWVudGF0aW9uSGFuZGxlcignbG9uZ3Rhc2snLCAoeyBlbnRyaWVzIH0pID0+IHtcbiAgICBjb25zdCBwYXJlbnQgPSBnZXRBY3RpdmVTcGFuKCk7XG4gICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IG9wOiBwYXJlbnRPcCwgc3RhcnRfdGltZXN0YW1wOiBwYXJlbnRTdGFydFRpbWVzdGFtcCB9ID0gc3BhblRvSlNPTihwYXJlbnQpO1xuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBtc1RvU2VjKChicm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luKCkgKSArIGVudHJ5LnN0YXJ0VGltZSk7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IG1zVG9TZWMoZW50cnkuZHVyYXRpb24pO1xuXG4gICAgICBpZiAocGFyZW50T3AgPT09ICduYXZpZ2F0aW9uJyAmJiBwYXJlbnRTdGFydFRpbWVzdGFtcCAmJiBzdGFydFRpbWUgPCBwYXJlbnRTdGFydFRpbWVzdGFtcCkge1xuICAgICAgICAvLyBTa2lwIGFkZGluZyBhIHNwYW4gaWYgdGhlIGxvbmcgdGFzayBzdGFydGVkIGJlZm9yZSB0aGUgbmF2aWdhdGlvbiBzdGFydGVkLlxuICAgICAgICAvLyBgc3RhcnRBbmRFbmRTcGFuYCB3aWxsIG90aGVyd2lzZSBhZGp1c3QgdGhlIHBhcmVudCdzIHN0YXJ0IHRpbWUgdG8gdGhlIHNwYW4ncyBzdGFydFxuICAgICAgICAvLyB0aW1lLCBwb3RlbnRpYWxseSBza2V3aW5nIHRoZSBkdXJhdGlvbiBvZiB0aGUgYWN0dWFsIG5hdmlnYXRpb24gYXMgcmVwb3J0ZWQgdmlhIG91clxuICAgICAgICAvLyByb3V0aW5nIGluc3RydW1lbnRhdGlvbnNcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHN0YXJ0QW5kRW5kU3BhbihwYXJlbnQsIHN0YXJ0VGltZSwgc3RhcnRUaW1lICsgZHVyYXRpb24sIHtcbiAgICAgICAgbmFtZTogJ01haW4gVUkgdGhyZWFkIGJsb2NrZWQnLFxuICAgICAgICBvcDogJ3VpLmxvbmctdGFzaycsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiAnYXV0by51aS5icm93c2VyLm1ldHJpY3MnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBTdGFydCB0cmFja2luZyBsb25nIGFuaW1hdGlvbiBmcmFtZXMuXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0VHJhY2tpbmdMb25nQW5pbWF0aW9uRnJhbWVzKCkge1xuICAvLyBOT1RFOiB0aGUgY3VycmVudCB3ZWItdml0YWxzIHZlcnNpb24gKDMuNS4yKSBkb2VzIG5vdCBzdXBwb3J0IGxvbmctYW5pbWF0aW9uLWZyYW1lLCBzb1xuICAvLyB3ZSBkaXJlY3RseSBvYnNlcnZlIGBsb25nLWFuaW1hdGlvbi1mcmFtZWAgZXZlbnRzIGluc3RlYWQgb2YgdGhyb3VnaCB0aGUgd2ViLXZpdGFsc1xuICAvLyBgb2JzZXJ2ZWAgaGVscGVyIGZ1bmN0aW9uLlxuICBjb25zdCBvYnNlcnZlciA9IG5ldyBQZXJmb3JtYW5jZU9ic2VydmVyKGxpc3QgPT4ge1xuICAgIGNvbnN0IHBhcmVudCA9IGdldEFjdGl2ZVNwYW4oKTtcbiAgICBpZiAoIXBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGxpc3QuZ2V0RW50cmllcygpICkge1xuICAgICAgaWYgKCFlbnRyeS5zY3JpcHRzWzBdKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBtc1RvU2VjKChicm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luKCkgKSArIGVudHJ5LnN0YXJ0VGltZSk7XG5cbiAgICAgIGNvbnN0IHsgc3RhcnRfdGltZXN0YW1wOiBwYXJlbnRTdGFydFRpbWVzdGFtcCwgb3A6IHBhcmVudE9wIH0gPSBzcGFuVG9KU09OKHBhcmVudCk7XG5cbiAgICAgIGlmIChwYXJlbnRPcCA9PT0gJ25hdmlnYXRpb24nICYmIHBhcmVudFN0YXJ0VGltZXN0YW1wICYmIHN0YXJ0VGltZSA8IHBhcmVudFN0YXJ0VGltZXN0YW1wKSB7XG4gICAgICAgIC8vIFNraXAgYWRkaW5nIHRoZSBzcGFuIGlmIHRoZSBsb25nIGFuaW1hdGlvbiBmcmFtZSBzdGFydGVkIGJlZm9yZSB0aGUgbmF2aWdhdGlvbiBzdGFydGVkLlxuICAgICAgICAvLyBgc3RhcnRBbmRFbmRTcGFuYCB3aWxsIG90aGVyd2lzZSBhZGp1c3QgdGhlIHBhcmVudCdzIHN0YXJ0IHRpbWUgdG8gdGhlIHNwYW4ncyBzdGFydFxuICAgICAgICAvLyB0aW1lLCBwb3RlbnRpYWxseSBza2V3aW5nIHRoZSBkdXJhdGlvbiBvZiB0aGUgYWN0dWFsIG5hdmlnYXRpb24gYXMgcmVwb3J0ZWQgdmlhIG91clxuICAgICAgICAvLyByb3V0aW5nIGluc3RydW1lbnRhdGlvbnNcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IG1zVG9TZWMoZW50cnkuZHVyYXRpb24pO1xuXG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiAnYXV0by51aS5icm93c2VyLm1ldHJpY3MnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgaW5pdGlhbFNjcmlwdCA9IGVudHJ5LnNjcmlwdHNbMF07XG4gICAgICBjb25zdCB7IGludm9rZXIsIGludm9rZXJUeXBlLCBzb3VyY2VVUkwsIHNvdXJjZUZ1bmN0aW9uTmFtZSwgc291cmNlQ2hhclBvc2l0aW9uIH0gPSBpbml0aWFsU2NyaXB0O1xuICAgICAgYXR0cmlidXRlc1snYnJvd3Nlci5zY3JpcHQuaW52b2tlciddID0gaW52b2tlcjtcbiAgICAgIGF0dHJpYnV0ZXNbJ2Jyb3dzZXIuc2NyaXB0Lmludm9rZXJfdHlwZSddID0gaW52b2tlclR5cGU7XG4gICAgICBpZiAoc291cmNlVVJMKSB7XG4gICAgICAgIGF0dHJpYnV0ZXNbJ2NvZGUuZmlsZXBhdGgnXSA9IHNvdXJjZVVSTDtcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2VGdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgYXR0cmlidXRlc1snY29kZS5mdW5jdGlvbiddID0gc291cmNlRnVuY3Rpb25OYW1lO1xuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZUNoYXJQb3NpdGlvbiAhPT0gLTEpIHtcbiAgICAgICAgYXR0cmlidXRlc1snYnJvd3Nlci5zY3JpcHQuc291cmNlX2NoYXJfcG9zaXRpb24nXSA9IHNvdXJjZUNoYXJQb3NpdGlvbjtcbiAgICAgIH1cblxuICAgICAgc3RhcnRBbmRFbmRTcGFuKHBhcmVudCwgc3RhcnRUaW1lLCBzdGFydFRpbWUgKyBkdXJhdGlvbiwge1xuICAgICAgICBuYW1lOiAnTWFpbiBVSSB0aHJlYWQgYmxvY2tlZCcsXG4gICAgICAgIG9wOiAndWkubG9uZy1hbmltYXRpb24tZnJhbWUnLFxuICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICBvYnNlcnZlci5vYnNlcnZlKHsgdHlwZTogJ2xvbmctYW5pbWF0aW9uLWZyYW1lJywgYnVmZmVyZWQ6IHRydWUgfSk7XG59XG5cbi8qKlxuICogU3RhcnQgdHJhY2tpbmcgaW50ZXJhY3Rpb24gZXZlbnRzLlxuICovXG5mdW5jdGlvbiBzdGFydFRyYWNraW5nSW50ZXJhY3Rpb25zKCkge1xuICBhZGRQZXJmb3JtYW5jZUluc3RydW1lbnRhdGlvbkhhbmRsZXIoJ2V2ZW50JywgKHsgZW50cmllcyB9KSA9PiB7XG4gICAgY29uc3QgcGFyZW50ID0gZ2V0QWN0aXZlU3BhbigpO1xuICAgIGlmICghcGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgaWYgKGVudHJ5Lm5hbWUgPT09ICdjbGljaycpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gbXNUb1NlYygoYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbigpICkgKyBlbnRyeS5zdGFydFRpbWUpO1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IG1zVG9TZWMoZW50cnkuZHVyYXRpb24pO1xuXG4gICAgICAgIGNvbnN0IHNwYW5PcHRpb25zID0ge1xuICAgICAgICAgIG5hbWU6IGh0bWxUcmVlQXNTdHJpbmcoZW50cnkudGFyZ2V0KSxcbiAgICAgICAgICBvcDogYHVpLmludGVyYWN0aW9uLiR7ZW50cnkubmFtZX1gLFxuICAgICAgICAgIHN0YXJ0VGltZTogc3RhcnRUaW1lLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06ICdhdXRvLnVpLmJyb3dzZXIubWV0cmljcycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShlbnRyeS50YXJnZXQpO1xuICAgICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAgIHNwYW5PcHRpb25zLmF0dHJpYnV0ZXNbJ3VpLmNvbXBvbmVudF9uYW1lJ10gPSBjb21wb25lbnROYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRBbmRFbmRTcGFuKHBhcmVudCwgc3RhcnRUaW1lLCBzdGFydFRpbWUgKyBkdXJhdGlvbiwgc3Bhbk9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogU3RhcnRzIHRyYWNraW5nIHRoZSBDdW11bGF0aXZlIExheW91dCBTaGlmdCBvbiB0aGUgY3VycmVudCBwYWdlIGFuZCBjb2xsZWN0cyB0aGUgdmFsdWUgYW5kIGxhc3QgZW50cnlcbiAqIHRvIHRoZSBgX21lYXN1cmVtZW50c2Agb2JqZWN0IHdoaWNoIHVsdGltYXRlbHkgaXMgYXBwbGllZCB0byB0aGUgcGFnZWxvYWQgc3BhbidzIG1lYXN1cmVtZW50cy5cbiAqL1xuZnVuY3Rpb24gX3RyYWNrQ0xTKCkge1xuICByZXR1cm4gYWRkQ2xzSW5zdHJ1bWVudGF0aW9uSGFuZGxlcigoeyBtZXRyaWMgfSkgPT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gbWV0cmljLmVudHJpZXNbbWV0cmljLmVudHJpZXMubGVuZ3RoIC0gMV0gO1xuICAgIGlmICghZW50cnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgX21lYXN1cmVtZW50c1snY2xzJ10gPSB7IHZhbHVlOiBtZXRyaWMudmFsdWUsIHVuaXQ6ICcnIH07XG4gICAgX2Nsc0VudHJ5ID0gZW50cnk7XG4gIH0sIHRydWUpO1xufVxuXG4vKiogU3RhcnRzIHRyYWNraW5nIHRoZSBMYXJnZXN0IENvbnRlbnRmdWwgUGFpbnQgb24gdGhlIGN1cnJlbnQgcGFnZS4gKi9cbmZ1bmN0aW9uIF90cmFja0xDUCgpIHtcbiAgcmV0dXJuIGFkZExjcEluc3RydW1lbnRhdGlvbkhhbmRsZXIoKHsgbWV0cmljIH0pID0+IHtcbiAgICBjb25zdCBlbnRyeSA9IG1ldHJpYy5lbnRyaWVzW21ldHJpYy5lbnRyaWVzLmxlbmd0aCAtIDFdO1xuICAgIGlmICghZW50cnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBfbWVhc3VyZW1lbnRzWydsY3AnXSA9IHsgdmFsdWU6IG1ldHJpYy52YWx1ZSwgdW5pdDogJ21pbGxpc2Vjb25kJyB9O1xuICAgIF9sY3BFbnRyeSA9IGVudHJ5IDtcbiAgfSwgdHJ1ZSk7XG59XG5cbi8qKiBTdGFydHMgdHJhY2tpbmcgdGhlIEZpcnN0IElucHV0IERlbGF5IG9uIHRoZSBjdXJyZW50IHBhZ2UuICovXG5mdW5jdGlvbiBfdHJhY2tGSUQoKSB7XG4gIHJldHVybiBhZGRGaWRJbnN0cnVtZW50YXRpb25IYW5kbGVyKCh7IG1ldHJpYyB9KSA9PiB7XG4gICAgY29uc3QgZW50cnkgPSBtZXRyaWMuZW50cmllc1ttZXRyaWMuZW50cmllcy5sZW5ndGggLSAxXTtcbiAgICBpZiAoIWVudHJ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGltZU9yaWdpbiA9IG1zVG9TZWMoYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbigpICk7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gbXNUb1NlYyhlbnRyeS5zdGFydFRpbWUpO1xuICAgIF9tZWFzdXJlbWVudHNbJ2ZpZCddID0geyB2YWx1ZTogbWV0cmljLnZhbHVlLCB1bml0OiAnbWlsbGlzZWNvbmQnIH07XG4gICAgX21lYXN1cmVtZW50c1snbWFyay5maWQnXSA9IHsgdmFsdWU6IHRpbWVPcmlnaW4gKyBzdGFydFRpbWUsIHVuaXQ6ICdzZWNvbmQnIH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfdHJhY2tUdGZiKCkge1xuICByZXR1cm4gYWRkVHRmYkluc3RydW1lbnRhdGlvbkhhbmRsZXIoKHsgbWV0cmljIH0pID0+IHtcbiAgICBjb25zdCBlbnRyeSA9IG1ldHJpYy5lbnRyaWVzW21ldHJpYy5lbnRyaWVzLmxlbmd0aCAtIDFdO1xuICAgIGlmICghZW50cnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBfbWVhc3VyZW1lbnRzWyd0dGZiJ10gPSB7IHZhbHVlOiBtZXRyaWMudmFsdWUsIHVuaXQ6ICdtaWxsaXNlY29uZCcgfTtcbiAgfSk7XG59XG5cbi8qKiBBZGQgcGVyZm9ybWFuY2UgcmVsYXRlZCBzcGFucyB0byBhIHRyYW5zYWN0aW9uICovXG5mdW5jdGlvbiBhZGRQZXJmb3JtYW5jZUVudHJpZXMoc3Bhbiwgb3B0aW9ucykge1xuICBjb25zdCBwZXJmb3JtYW5jZSA9IGdldEJyb3dzZXJQZXJmb3JtYW5jZUFQSSgpO1xuICBjb25zdCBvcmlnaW4gPSBicm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luKCk7XG4gIGlmICghcGVyZm9ybWFuY2U/LmdldEVudHJpZXMgfHwgIW9yaWdpbikge1xuICAgIC8vIEdhdGVrZWVwZXIgaWYgcGVyZm9ybWFuY2UgQVBJIG5vdCBhdmFpbGFibGVcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0aW1lT3JpZ2luID0gbXNUb1NlYyhvcmlnaW4pO1xuXG4gIGNvbnN0IHBlcmZvcm1hbmNlRW50cmllcyA9IHBlcmZvcm1hbmNlLmdldEVudHJpZXMoKTtcblxuICBjb25zdCB7IG9wLCBzdGFydF90aW1lc3RhbXA6IHRyYW5zYWN0aW9uU3RhcnRUaW1lIH0gPSBzcGFuVG9KU09OKHNwYW4pO1xuXG4gIHBlcmZvcm1hbmNlRW50cmllcy5zbGljZShfcGVyZm9ybWFuY2VDdXJzb3IpLmZvckVhY2goZW50cnkgPT4ge1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IG1zVG9TZWMoZW50cnkuc3RhcnRUaW1lKTtcbiAgICBjb25zdCBkdXJhdGlvbiA9IG1zVG9TZWMoXG4gICAgICAvLyBJbmV4cGxpY2FibHksIENocm9tZSBzb21ldGltZXMgZW1pdHMgYSBuZWdhdGl2ZSBkdXJhdGlvbi4gV2UgbmVlZCB0byB3b3JrIGFyb3VuZCB0aGlzLlxuICAgICAgLy8gVGhlcmUgaXMgYSBTTyBwb3N0IGF0dGVtcHRpbmcgdG8gZXhwbGFpbiB0aGlzLCBidXQgaXQgbGVhdmVzIG9uZSB3aXRoIG9wZW4gcXVlc3Rpb25zOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMzE5MTkxOC9wZWZvcm1hbmNlLWdldGVudHJpZXMtYW5kLW5lZ2F0aXZlLWR1cmF0aW9uLWRpc3BsYXlcbiAgICAgIC8vIFRoZSB3YXkgd2UgY2xhbXAgdGhlIHZhbHVlIGlzIHByb2JhYmx5IG5vdCBhY2N1cmF0ZSwgc2luY2Ugd2UgaGF2ZSBvYnNlcnZlZCB0aGlzIGhhcHBlbiBmb3IgdGhpbmdzIHRoYXQgbWF5IHRha2UgYSB3aGlsZSB0byBsb2FkLCBsaWtlIGZvciBleGFtcGxlIHRoZSByZXBsYXkgd29ya2VyLlxuICAgICAgLy8gVE9ETzogSW52ZXN0aWdhdGUgd2h5IHRoaXMgaGFwcGVucyBhbmQgaG93IHRvIHByb3Blcmx5IG1pdGlnYXRlLiBGb3Igbm93LCB0aGlzIGlzIGEgd29ya2Fyb3VuZCB0byBwcmV2ZW50IHRyYW5zYWN0aW9ucyBiZWluZyBkcm9wcGVkIGR1ZSB0byBuZWdhdGl2ZSBkdXJhdGlvbiBzcGFucy5cbiAgICAgIE1hdGgubWF4KDAsIGVudHJ5LmR1cmF0aW9uKSxcbiAgICApO1xuXG4gICAgaWYgKG9wID09PSAnbmF2aWdhdGlvbicgJiYgdHJhbnNhY3Rpb25TdGFydFRpbWUgJiYgdGltZU9yaWdpbiArIHN0YXJ0VGltZSA8IHRyYW5zYWN0aW9uU3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChlbnRyeS5lbnRyeVR5cGUpIHtcbiAgICAgIGNhc2UgJ25hdmlnYXRpb24nOiB7XG4gICAgICAgIF9hZGROYXZpZ2F0aW9uU3BhbnMoc3BhbiwgZW50cnkgLCB0aW1lT3JpZ2luKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdtYXJrJzpcbiAgICAgIGNhc2UgJ3BhaW50JzpcbiAgICAgIGNhc2UgJ21lYXN1cmUnOiB7XG4gICAgICAgIF9hZGRNZWFzdXJlU3BhbnMoc3BhbiwgZW50cnksIHN0YXJ0VGltZSwgZHVyYXRpb24sIHRpbWVPcmlnaW4sIG9wdGlvbnMuaWdub3JlUGVyZm9ybWFuY2VBcGlTcGFucyk7XG5cbiAgICAgICAgLy8gY2FwdHVyZSB3ZWIgdml0YWxzXG4gICAgICAgIGNvbnN0IGZpcnN0SGlkZGVuID0gZ2V0VmlzaWJpbGl0eVdhdGNoZXIoKTtcbiAgICAgICAgLy8gT25seSByZXBvcnQgaWYgdGhlIHBhZ2Ugd2Fzbid0IGhpZGRlbiBwcmlvciB0byB0aGUgd2ViIHZpdGFsLlxuICAgICAgICBjb25zdCBzaG91bGRSZWNvcmQgPSBlbnRyeS5zdGFydFRpbWUgPCBmaXJzdEhpZGRlbi5maXJzdEhpZGRlblRpbWU7XG5cbiAgICAgICAgaWYgKGVudHJ5Lm5hbWUgPT09ICdmaXJzdC1wYWludCcgJiYgc2hvdWxkUmVjb3JkKSB7XG4gICAgICAgICAgX21lYXN1cmVtZW50c1snZnAnXSA9IHsgdmFsdWU6IGVudHJ5LnN0YXJ0VGltZSwgdW5pdDogJ21pbGxpc2Vjb25kJyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyeS5uYW1lID09PSAnZmlyc3QtY29udGVudGZ1bC1wYWludCcgJiYgc2hvdWxkUmVjb3JkKSB7XG4gICAgICAgICAgX21lYXN1cmVtZW50c1snZmNwJ10gPSB7IHZhbHVlOiBlbnRyeS5zdGFydFRpbWUsIHVuaXQ6ICdtaWxsaXNlY29uZCcgfTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3Jlc291cmNlJzoge1xuICAgICAgICBfYWRkUmVzb3VyY2VTcGFucyhcbiAgICAgICAgICBzcGFuLFxuICAgICAgICAgIGVudHJ5ICxcbiAgICAgICAgICBlbnRyeS5uYW1lLFxuICAgICAgICAgIHN0YXJ0VGltZSxcbiAgICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgICB0aW1lT3JpZ2luLFxuICAgICAgICAgIG9wdGlvbnMuaWdub3JlUmVzb3VyY2VTcGFucyxcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBJZ25vcmUgb3RoZXIgZW50cnkgdHlwZXMuXG4gICAgfVxuICB9KTtcblxuICBfcGVyZm9ybWFuY2VDdXJzb3IgPSBNYXRoLm1heChwZXJmb3JtYW5jZUVudHJpZXMubGVuZ3RoIC0gMSwgMCk7XG5cbiAgX3RyYWNrTmF2aWdhdG9yKHNwYW4pO1xuXG4gIC8vIE1lYXN1cmVtZW50cyBhcmUgb25seSBhdmFpbGFibGUgZm9yIHBhZ2Vsb2FkIHRyYW5zYWN0aW9uc1xuICBpZiAob3AgPT09ICdwYWdlbG9hZCcpIHtcbiAgICBfYWRkVHRmYlJlcXVlc3RUaW1lVG9NZWFzdXJlbWVudHMoX21lYXN1cmVtZW50cyk7XG5cbiAgICBjb25zdCBmaWRNYXJrID0gX21lYXN1cmVtZW50c1snbWFyay5maWQnXTtcbiAgICBpZiAoZmlkTWFyayAmJiBfbWVhc3VyZW1lbnRzWydmaWQnXSkge1xuICAgICAgLy8gY3JlYXRlIHNwYW4gZm9yIEZJRFxuICAgICAgc3RhcnRBbmRFbmRTcGFuKHNwYW4sIGZpZE1hcmsudmFsdWUsIGZpZE1hcmsudmFsdWUgKyBtc1RvU2VjKF9tZWFzdXJlbWVudHNbJ2ZpZCddLnZhbHVlKSwge1xuICAgICAgICBuYW1lOiAnZmlyc3QgaW5wdXQgZGVsYXknLFxuICAgICAgICBvcDogJ3VpLmFjdGlvbicsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiAnYXV0by51aS5icm93c2VyLm1ldHJpY3MnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIERlbGV0ZSBtYXJrLmZpZCBhcyB3ZSBkb24ndCB3YW50IGl0IHRvIGJlIHBhcnQgb2YgZmluYWwgcGF5bG9hZFxuICAgICAgZGVsZXRlIF9tZWFzdXJlbWVudHNbJ21hcmsuZmlkJ107XG4gICAgfVxuXG4gICAgLy8gSWYgQ0xTIHN0YW5kYWxvbmUgc3BhbnMgYXJlIGVuYWJsZWQsIGRvbid0IHJlY29yZCBDTFMgYXMgYSBtZWFzdXJlbWVudFxuICAgIGlmICghb3B0aW9ucy5yZWNvcmRDbHNPblBhZ2Vsb2FkU3Bhbikge1xuICAgICAgZGVsZXRlIF9tZWFzdXJlbWVudHMuY2xzO1xuICAgIH1cblxuICAgIC8vIElmIExDUCBzdGFuZGFsb25lIHNwYW5zIGFyZSBlbmFibGVkLCBkb24ndCByZWNvcmQgTENQIGFzIGEgbWVhc3VyZW1lbnRcbiAgICBpZiAoIW9wdGlvbnMucmVjb3JkTGNwT25QYWdlbG9hZFNwYW4pIHtcbiAgICAgIGRlbGV0ZSBfbWVhc3VyZW1lbnRzLmxjcDtcbiAgICB9XG5cbiAgICBPYmplY3QuZW50cmllcyhfbWVhc3VyZW1lbnRzKS5mb3JFYWNoKChbbWVhc3VyZW1lbnROYW1lLCBtZWFzdXJlbWVudF0pID0+IHtcbiAgICAgIHNldE1lYXN1cmVtZW50KG1lYXN1cmVtZW50TmFtZSwgbWVhc3VyZW1lbnQudmFsdWUsIG1lYXN1cmVtZW50LnVuaXQpO1xuICAgIH0pO1xuXG4gICAgLy8gU2V0IHRpbWVPcmlnaW4gd2hpY2ggZGVub3RlcyB0aGUgdGltZXN0YW1wIHdoaWNoIHRvIGJhc2UgdGhlIExDUC9GQ1AvRlAvVFRGQiBtZWFzdXJlbWVudHMgb25cbiAgICBzcGFuLnNldEF0dHJpYnV0ZSgncGVyZm9ybWFuY2UudGltZU9yaWdpbicsIHRpbWVPcmlnaW4pO1xuXG4gICAgLy8gSW4gcHJlcmVuZGVyaW5nIHNjZW5hcmlvcywgd2hlcmUgYSBwYWdlIG1pZ2h0IGJlIHByZWZldGNoZWQgYW5kIHByZS1yZW5kZXJlZCBiZWZvcmUgdGhlIHVzZXIgY2xpY2tzIHRoZSBsaW5rLFxuICAgIC8vIHRoZSBuYXZpZ2F0aW9uIHN0YXJ0cyBlYXJsaWVyIHRoYW4gd2hlbiB0aGUgdXNlciBjbGlja3MgaXQuIFdlYiBWaXRhbHMgc2hvdWxkIGFsd2F5cyBiZSBiYXNlZCBvbiB0aGVcbiAgICAvLyB1c2VyLXBlcmNlaXZlZCB0aW1lLCBzbyB0aGV5IGFyZSBub3QgcmVwb3J0ZWQgZnJvbSB0aGUgYWN0dWFsIHN0YXJ0IG9mIHRoZSBuYXZpZ2F0aW9uLCBidXQgcmF0aGVyIGZyb20gdGhlXG4gICAgLy8gdGltZSB3aGVyZSB0aGUgdXNlciBhY3RpdmVseSBzdGFydGVkIHRoZSBuYXZpZ2F0aW9uLCBmb3IgZXhhbXBsZSBieSBjbGlja2luZyBhIGxpbmsuXG4gICAgLy8gVGhpcyBpcyB1c2VyIGFjdGlvbiBpcyBjYWxsZWQgXCJhY3RpdmF0aW9uXCIgYW5kIHRoZSB0aW1lIGJldHdlZW4gbmF2aWdhdGlvbiBhbmQgYWN0aXZhdGlvbiBpcyBzdG9yZWQgaW5cbiAgICAvLyB0aGUgYGFjdGl2YXRpb25TdGFydGAgYXR0cmlidXRlIG9mIHRoZSBcIm5hdmlnYXRpb25cIiBQZXJmb3JtYW5jZUVudHJ5LlxuICAgIHNwYW4uc2V0QXR0cmlidXRlKCdwZXJmb3JtYW5jZS5hY3RpdmF0aW9uU3RhcnQnLCBnZXRBY3RpdmF0aW9uU3RhcnQoKSk7XG5cbiAgICBfc2V0V2ViVml0YWxBdHRyaWJ1dGVzKHNwYW4sIG9wdGlvbnMpO1xuICB9XG5cbiAgX2xjcEVudHJ5ID0gdW5kZWZpbmVkO1xuICBfY2xzRW50cnkgPSB1bmRlZmluZWQ7XG4gIF9tZWFzdXJlbWVudHMgPSB7fTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgbWVhc3VyZSByZWxhdGVkIHNwYW5zLlxuICogRXhwb3J0ZWQgb25seSBmb3IgdGVzdHMuXG4gKi9cbmZ1bmN0aW9uIF9hZGRNZWFzdXJlU3BhbnMoXG4gIHNwYW4sXG4gIGVudHJ5LFxuICBzdGFydFRpbWUsXG4gIGR1cmF0aW9uLFxuICB0aW1lT3JpZ2luLFxuICBpZ25vcmVQZXJmb3JtYW5jZUFwaVNwYW5zLFxuKSB7XG4gIGlmIChcbiAgICBbJ21hcmsnLCAnbWVhc3VyZSddLmluY2x1ZGVzKGVudHJ5LmVudHJ5VHlwZSkgJiZcbiAgICBzdHJpbmdNYXRjaGVzU29tZVBhdHRlcm4oZW50cnkubmFtZSwgaWdub3JlUGVyZm9ybWFuY2VBcGlTcGFucylcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbmF2RW50cnkgPSBnZXROYXZpZ2F0aW9uRW50cnkoZmFsc2UpO1xuICBjb25zdCByZXF1ZXN0VGltZSA9IG1zVG9TZWMobmF2RW50cnkgPyBuYXZFbnRyeS5yZXF1ZXN0U3RhcnQgOiAwKTtcbiAgLy8gQmVjYXVzZSBwZXJmb3JtYW5jZS5tZWFzdXJlIGFjY2VwdHMgYXJiaXRyYXJ5IHRpbWVzdGFtcHMgaXQgY2FuIHByb2R1Y2VcbiAgLy8gc3BhbnMgdGhhdCBoYXBwZW4gYmVmb3JlIHRoZSBicm93c2VyIGV2ZW4gbWFrZXMgYSByZXF1ZXN0IGZvciB0aGUgcGFnZS5cbiAgLy9cbiAgLy8gQW4gZXhhbXBsZSBvZiB0aGlzIGlzIHRoZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBOZXh0LmpzLWJlZm9yZS1oeWRyYXRpb25cbiAgLy8gc3BhbnMgY3JlYXRlZCBieSB0aGUgTmV4dC5qcyBmcmFtZXdvcmsuXG4gIC8vXG4gIC8vIFRvIHByZXZlbnQgdGhpcyB3ZSB3aWxsIHBpbiB0aGUgc3RhcnQgdGltZXN0YW1wIHRvIHRoZSByZXF1ZXN0IHN0YXJ0IHRpbWVcbiAgLy8gVGhpcyBkb2VzIG1ha2UgZHVyYXRpb24gaW5hY2N1cmF0ZSwgc28gaWYgdGhpcyBkb2VzIGhhcHBlbiwgd2Ugd2lsbCBhZGRcbiAgLy8gYW4gYXR0cmlidXRlIHRvIHRoZSBzcGFuXG4gIGNvbnN0IG1lYXN1cmVTdGFydFRpbWVzdGFtcCA9IHRpbWVPcmlnaW4gKyBNYXRoLm1heChzdGFydFRpbWUsIHJlcXVlc3RUaW1lKTtcbiAgY29uc3Qgc3RhcnRUaW1lU3RhbXAgPSB0aW1lT3JpZ2luICsgc3RhcnRUaW1lO1xuICBjb25zdCBtZWFzdXJlRW5kVGltZXN0YW1wID0gc3RhcnRUaW1lU3RhbXAgKyBkdXJhdGlvbjtcblxuICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06ICdhdXRvLnJlc291cmNlLmJyb3dzZXIubWV0cmljcycsXG4gIH07XG5cbiAgaWYgKG1lYXN1cmVTdGFydFRpbWVzdGFtcCAhPT0gc3RhcnRUaW1lU3RhbXApIHtcbiAgICBhdHRyaWJ1dGVzWydzZW50cnkuYnJvd3Nlci5tZWFzdXJlX2hhcHBlbmVkX2JlZm9yZV9yZXF1ZXN0J10gPSB0cnVlO1xuICAgIGF0dHJpYnV0ZXNbJ3NlbnRyeS5icm93c2VyLm1lYXN1cmVfc3RhcnRfdGltZSddID0gbWVhc3VyZVN0YXJ0VGltZXN0YW1wO1xuICB9XG5cbiAgX2FkZERldGFpbFRvU3BhbkF0dHJpYnV0ZXMoYXR0cmlidXRlcywgZW50cnkgKTtcblxuICAvLyBNZWFzdXJlbWVudHMgZnJvbSB0aGlyZCBwYXJ0aWVzIGNhbiBiZSBvZmYsIHdoaWNoIHdvdWxkIGNyZWF0ZSBpbnZhbGlkIHNwYW5zLCBkcm9wcGluZyB0cmFuc2FjdGlvbnMgaW4gdGhlIHByb2Nlc3MuXG4gIGlmIChtZWFzdXJlU3RhcnRUaW1lc3RhbXAgPD0gbWVhc3VyZUVuZFRpbWVzdGFtcCkge1xuICAgIHN0YXJ0QW5kRW5kU3BhbihzcGFuLCBtZWFzdXJlU3RhcnRUaW1lc3RhbXAsIG1lYXN1cmVFbmRUaW1lc3RhbXAsIHtcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWUgLFxuICAgICAgb3A6IGVudHJ5LmVudHJ5VHlwZSAsXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hZGREZXRhaWxUb1NwYW5BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMsIHBlcmZvcm1hbmNlTWVhc3VyZSkge1xuICB0cnkge1xuICAgIC8vIEFjY2Vzc2luZyBkZXRhaWwgbWlnaHQgdGhyb3cgaW4gc29tZSBicm93c2VycyAoZS5nLiwgRmlyZWZveCkgZHVlIHRvIHNlY3VyaXR5IHJlc3RyaWN0aW9uc1xuICAgIGNvbnN0IGRldGFpbCA9IHBlcmZvcm1hbmNlTWVhc3VyZS5kZXRhaWw7XG5cbiAgICBpZiAoIWRldGFpbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3MgZGV0YWlsIGJhc2VkIG9uIGl0cyB0eXBlXG4gICAgaWYgKHR5cGVvZiBkZXRhaWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAvLyBIYW5kbGUgb2JqZWN0IGRldGFpbHNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRldGFpbCkpIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIGlzUHJpbWl0aXZlKHZhbHVlKSkge1xuICAgICAgICAgIGF0dHJpYnV0ZXNbYHNlbnRyeS5icm93c2VyLm1lYXN1cmUuZGV0YWlsLiR7a2V5fWBdID0gdmFsdWUgO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyB1c2VyIGRlZmluZWQgc28gd2UgY2FuJ3QgZ3VhcmFudGVlIGl0J3Mgc2VyaWFsaXphYmxlXG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2BzZW50cnkuYnJvd3Nlci5tZWFzdXJlLmRldGFpbC4ke2tleX1gXSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIFNraXAgdmFsdWVzIHRoYXQgY2FuJ3QgYmUgc3RyaW5naWZpZWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNQcmltaXRpdmUoZGV0YWlsKSkge1xuICAgICAgLy8gSGFuZGxlIHByaW1pdGl2ZSBkZXRhaWxzXG4gICAgICBhdHRyaWJ1dGVzWydzZW50cnkuYnJvd3Nlci5tZWFzdXJlLmRldGFpbCddID0gZGV0YWlsIDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXR0cmlidXRlc1snc2VudHJ5LmJyb3dzZXIubWVhc3VyZS5kZXRhaWwnXSA9IEpTT04uc3RyaW5naWZ5KGRldGFpbCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBTa2lwIGlmIHN0cmluZ2lmaWNhdGlvbiBmYWlsc1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gU2lsZW50bHkgaWdub3JlIGFueSBlcnJvcnMgd2hlbiBhY2Nlc3NpbmcgZGV0YWlsXG4gICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBGaXJlZm94IFwiUGVybWlzc2lvbiBkZW5pZWQgdG8gYWNjZXNzIG9iamVjdFwiIGVycm9yXG4gIH1cbn1cblxuLyoqXG4gKiBJbnN0cnVtZW50IG5hdmlnYXRpb24gZW50cmllc1xuICogZXhwb3J0ZWQgb25seSBmb3IgdGVzdHNcbiAqL1xuZnVuY3Rpb24gX2FkZE5hdmlnYXRpb25TcGFucyhzcGFuLCBlbnRyeSwgdGltZU9yaWdpbikge1xuICAoWyd1bmxvYWRFdmVudCcsICdyZWRpcmVjdCcsICdkb21Db250ZW50TG9hZGVkRXZlbnQnLCAnbG9hZEV2ZW50JywgJ2Nvbm5lY3QnXSApLmZvckVhY2goZXZlbnQgPT4ge1xuICAgIF9hZGRQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmcoc3BhbiwgZW50cnksIGV2ZW50LCB0aW1lT3JpZ2luKTtcbiAgfSk7XG4gIF9hZGRQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmcoc3BhbiwgZW50cnksICdzZWN1cmVDb25uZWN0aW9uJywgdGltZU9yaWdpbiwgJ1RMUy9TU0wnKTtcbiAgX2FkZFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyhzcGFuLCBlbnRyeSwgJ2ZldGNoJywgdGltZU9yaWdpbiwgJ2NhY2hlJyk7XG4gIF9hZGRQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmcoc3BhbiwgZW50cnksICdkb21haW5Mb29rdXAnLCB0aW1lT3JpZ2luLCAnRE5TJyk7XG5cbiAgX2FkZFJlcXVlc3Qoc3BhbiwgZW50cnksIHRpbWVPcmlnaW4pO1xufVxuXG4vKiogQ3JlYXRlIHBlcmZvcm1hbmNlIG5hdmlnYXRpb24gcmVsYXRlZCBzcGFucyAqL1xuZnVuY3Rpb24gX2FkZFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyhcbiAgc3BhbixcbiAgZW50cnksXG4gIGV2ZW50LFxuICB0aW1lT3JpZ2luLFxuICBuYW1lID0gZXZlbnQsXG4pIHtcbiAgY29uc3QgZXZlbnRFbmQgPSBfZ2V0RW5kUHJvcGVydHlOYW1lRm9yTmF2aWdhdGlvblRpbWluZyhldmVudCkgO1xuICBjb25zdCBlbmQgPSBlbnRyeVtldmVudEVuZF07XG4gIGNvbnN0IHN0YXJ0ID0gZW50cnlbYCR7ZXZlbnR9U3RhcnRgXTtcbiAgaWYgKCFzdGFydCB8fCAhZW5kKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHN0YXJ0QW5kRW5kU3BhbihzcGFuLCB0aW1lT3JpZ2luICsgbXNUb1NlYyhzdGFydCksIHRpbWVPcmlnaW4gKyBtc1RvU2VjKGVuZCksIHtcbiAgICBvcDogYGJyb3dzZXIuJHtuYW1lfWAsXG4gICAgbmFtZTogZW50cnkubmFtZSxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiAnYXV0by51aS5icm93c2VyLm1ldHJpY3MnLFxuICAgICAgLi4uKGV2ZW50ID09PSAncmVkaXJlY3QnICYmIGVudHJ5LnJlZGlyZWN0Q291bnQgIT0gbnVsbCA/IHsgJ2h0dHAucmVkaXJlY3RfY291bnQnOiBlbnRyeS5yZWRpcmVjdENvdW50IH0gOiB7fSksXG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9nZXRFbmRQcm9wZXJ0eU5hbWVGb3JOYXZpZ2F0aW9uVGltaW5nKGV2ZW50KSB7XG4gIGlmIChldmVudCA9PT0gJ3NlY3VyZUNvbm5lY3Rpb24nKSB7XG4gICAgcmV0dXJuICdjb25uZWN0RW5kJztcbiAgfVxuICBpZiAoZXZlbnQgPT09ICdmZXRjaCcpIHtcbiAgICByZXR1cm4gJ2RvbWFpbkxvb2t1cFN0YXJ0JztcbiAgfVxuICByZXR1cm4gYCR7ZXZlbnR9RW5kYDtcbn1cblxuLyoqIENyZWF0ZSByZXF1ZXN0IGFuZCByZXNwb25zZSByZWxhdGVkIHNwYW5zICovXG5mdW5jdGlvbiBfYWRkUmVxdWVzdChzcGFuLCBlbnRyeSwgdGltZU9yaWdpbikge1xuICBjb25zdCByZXF1ZXN0U3RhcnRUaW1lc3RhbXAgPSB0aW1lT3JpZ2luICsgbXNUb1NlYyhlbnRyeS5yZXF1ZXN0U3RhcnQgKTtcbiAgY29uc3QgcmVzcG9uc2VFbmRUaW1lc3RhbXAgPSB0aW1lT3JpZ2luICsgbXNUb1NlYyhlbnRyeS5yZXNwb25zZUVuZCApO1xuICBjb25zdCByZXNwb25zZVN0YXJ0VGltZXN0YW1wID0gdGltZU9yaWdpbiArIG1zVG9TZWMoZW50cnkucmVzcG9uc2VTdGFydCApO1xuICBpZiAoZW50cnkucmVzcG9uc2VFbmQpIHtcbiAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHdlIGFyZSBjb2xsZWN0aW5nIHRoZXNlIG1ldHJpY3Mgd2hlbiB0aGUgcGFnZSBoYXNuJ3QgZmluaXNoZWQgbG9hZGluZyB5ZXQsIGZvciBleGFtcGxlIHdoZW4gdGhlIEhUTUwgc2xvd2x5IHN0cmVhbXMgaW4uXG4gICAgLy8gSW4gdGhpcyBjYXNlLCBpZS4gd2hlbiB0aGUgZG9jdW1lbnQgcmVxdWVzdCBoYXNuJ3QgZmluaXNoZWQgeWV0LCBgZW50cnkucmVzcG9uc2VFbmRgIHdpbGwgYmUgMC5cbiAgICAvLyBJbiBvcmRlciBub3QgdG8gcHJvZHVjZSBmYXVsdHkgc3BhbnMsIHdoZXJlIHRoZSBlbmQgdGltZXN0YW1wIGlzIGJlZm9yZSB0aGUgc3RhcnQgdGltZXN0YW1wLCB3ZSB3aWxsIG9ubHkgY29sbGVjdFxuICAgIC8vIHRoZXNlIHNwYW5zIHdoZW4gdGhlIHJlc3BvbnNlRW5kIHZhbHVlIGlzIGF2YWlsYWJsZS4gVGhlIGJhY2tlbmQgKFJlbGF5KSB3b3VsZCBkcm9wIHRoZSBlbnRpcmUgc3BhbiBpZiBpdCBjb250YWluZWQgZmF1bHR5IHNwYW5zLlxuICAgIHN0YXJ0QW5kRW5kU3BhbihzcGFuLCByZXF1ZXN0U3RhcnRUaW1lc3RhbXAsIHJlc3BvbnNlRW5kVGltZXN0YW1wLCB7XG4gICAgICBvcDogJ2Jyb3dzZXIucmVxdWVzdCcsXG4gICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiAnYXV0by51aS5icm93c2VyLm1ldHJpY3MnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHN0YXJ0QW5kRW5kU3BhbihzcGFuLCByZXNwb25zZVN0YXJ0VGltZXN0YW1wLCByZXNwb25zZUVuZFRpbWVzdGFtcCwge1xuICAgICAgb3A6ICdicm93c2VyLnJlc3BvbnNlJyxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06ICdhdXRvLnVpLmJyb3dzZXIubWV0cmljcycsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIHJlc291cmNlLXJlbGF0ZWQgc3BhbnMuXG4gKiBFeHBvcnRlZCBvbmx5IGZvciB0ZXN0cy5cbiAqL1xuZnVuY3Rpb24gX2FkZFJlc291cmNlU3BhbnMoXG4gIHNwYW4sXG4gIGVudHJ5LFxuICByZXNvdXJjZVVybCxcbiAgc3RhcnRUaW1lLFxuICBkdXJhdGlvbixcbiAgdGltZU9yaWdpbixcbiAgaWdub3JlUmVzb3VyY2VTcGFucyxcbikge1xuICAvLyB3ZSBhbHJlYWR5IGluc3RydW1lbnQgYmFzZWQgb24gZmV0Y2ggYW5kIHhociwgc28gd2UgZG9uJ3QgbmVlZCB0b1xuICAvLyBkdXBsaWNhdGUgc3BhbnMgaGVyZS5cbiAgaWYgKGVudHJ5LmluaXRpYXRvclR5cGUgPT09ICd4bWxodHRwcmVxdWVzdCcgfHwgZW50cnkuaW5pdGlhdG9yVHlwZSA9PT0gJ2ZldGNoJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG9wID0gZW50cnkuaW5pdGlhdG9yVHlwZSA/IGByZXNvdXJjZS4ke2VudHJ5LmluaXRpYXRvclR5cGV9YCA6ICdyZXNvdXJjZS5vdGhlcic7XG4gIGlmIChpZ25vcmVSZXNvdXJjZVNwYW5zPy5pbmNsdWRlcyhvcCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYXJzZWRVcmwgPSBwYXJzZVVybChyZXNvdXJjZVVybCk7XG5cbiAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiAnYXV0by5yZXNvdXJjZS5icm93c2VyLm1ldHJpY3MnLFxuICB9O1xuICBzZXRSZXNvdXJjZUVudHJ5U2l6ZURhdGEoYXR0cmlidXRlcywgZW50cnksICd0cmFuc2ZlclNpemUnLCAnaHR0cC5yZXNwb25zZV90cmFuc2Zlcl9zaXplJyk7XG4gIHNldFJlc291cmNlRW50cnlTaXplRGF0YShhdHRyaWJ1dGVzLCBlbnRyeSwgJ2VuY29kZWRCb2R5U2l6ZScsICdodHRwLnJlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoJyk7XG4gIHNldFJlc291cmNlRW50cnlTaXplRGF0YShhdHRyaWJ1dGVzLCBlbnRyeSwgJ2RlY29kZWRCb2R5U2l6ZScsICdodHRwLmRlY29kZWRfcmVzcG9uc2VfY29udGVudF9sZW5ndGgnKTtcblxuICAvLyBgZGVsaXZlcnlUeXBlYCBpcyBleHBlcmltZW50YWwgYW5kIGRvZXMgbm90IGV4aXN0IGV2ZXJ5d2hlcmVcbiAgY29uc3QgZGVsaXZlcnlUeXBlID0gKGVudHJ5ICkuZGVsaXZlcnlUeXBlO1xuICBpZiAoZGVsaXZlcnlUeXBlICE9IG51bGwpIHtcbiAgICBhdHRyaWJ1dGVzWydodHRwLnJlc3BvbnNlX2RlbGl2ZXJ5X3R5cGUnXSA9IGRlbGl2ZXJ5VHlwZTtcbiAgfVxuXG4gIC8vIFR5cGVzIGRvIG5vdCByZWZsZWN0IHRoaXMgcHJvcGVydHkgeWV0XG4gIGNvbnN0IHJlbmRlckJsb2NraW5nU3RhdHVzID0gKGVudHJ5IClcbiAgICAucmVuZGVyQmxvY2tpbmdTdGF0dXM7XG4gIGlmIChyZW5kZXJCbG9ja2luZ1N0YXR1cykge1xuICAgIGF0dHJpYnV0ZXNbJ3Jlc291cmNlLnJlbmRlcl9ibG9ja2luZ19zdGF0dXMnXSA9IHJlbmRlckJsb2NraW5nU3RhdHVzO1xuICB9XG5cbiAgaWYgKHBhcnNlZFVybC5wcm90b2NvbCkge1xuICAgIGF0dHJpYnV0ZXNbJ3VybC5zY2hlbWUnXSA9IHBhcnNlZFVybC5wcm90b2NvbC5zcGxpdCgnOicpLnBvcCgpOyAvLyB0aGUgcHJvdG9jb2wgcmV0dXJuZWQgYnkgcGFyc2VVcmwgaW5jbHVkZXMgYSA6LCBidXQgT1RFTCBzcGVjIGRvZXMgbm90LCBzbyB3ZSByZW1vdmUgaXQuXG4gIH1cblxuICBpZiAocGFyc2VkVXJsLmhvc3QpIHtcbiAgICBhdHRyaWJ1dGVzWydzZXJ2ZXIuYWRkcmVzcyddID0gcGFyc2VkVXJsLmhvc3Q7XG4gIH1cblxuICBhdHRyaWJ1dGVzWyd1cmwuc2FtZV9vcmlnaW4nXSA9IHJlc291cmNlVXJsLmluY2x1ZGVzKFdJTkRPVy5sb2NhdGlvbi5vcmlnaW4pO1xuXG4gIC8vIENoZWNraW5nIGZvciBvbmx5IGB1bmRlZmluZWRgIGFuZCBgbnVsbGAgaXMgaW50ZW50aW9uYWwgYmVjYXVzZSBpdCdzXG4gIC8vIHZhbGlkIGZvciBgbmV4dEhvcFByb3RvY29sYCB0byBiZSBhbiBlbXB0eSBzdHJpbmcuXG4gIGlmIChlbnRyeS5uZXh0SG9wUHJvdG9jb2wgIT0gbnVsbCkge1xuICAgIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gZXh0cmFjdE5ldHdvcmtQcm90b2NvbChlbnRyeS5uZXh0SG9wUHJvdG9jb2wpO1xuICAgIGF0dHJpYnV0ZXNbJ25ldHdvcmsucHJvdG9jb2wubmFtZSddID0gbmFtZTtcbiAgICBhdHRyaWJ1dGVzWyduZXR3b3JrLnByb3RvY29sLnZlcnNpb24nXSA9IHZlcnNpb247XG4gIH1cblxuICBjb25zdCBzdGFydFRpbWVzdGFtcCA9IHRpbWVPcmlnaW4gKyBzdGFydFRpbWU7XG4gIGNvbnN0IGVuZFRpbWVzdGFtcCA9IHN0YXJ0VGltZXN0YW1wICsgZHVyYXRpb247XG5cbiAgc3RhcnRBbmRFbmRTcGFuKHNwYW4sIHN0YXJ0VGltZXN0YW1wLCBlbmRUaW1lc3RhbXAsIHtcbiAgICBuYW1lOiByZXNvdXJjZVVybC5yZXBsYWNlKFdJTkRPVy5sb2NhdGlvbi5vcmlnaW4sICcnKSxcbiAgICBvcCxcbiAgICBhdHRyaWJ1dGVzLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDYXB0dXJlIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgdXNlciBhZ2VudC5cbiAqL1xuZnVuY3Rpb24gX3RyYWNrTmF2aWdhdG9yKHNwYW4pIHtcbiAgY29uc3QgbmF2aWdhdG9yID0gV0lORE9XLm5hdmlnYXRvciA7XG4gIGlmICghbmF2aWdhdG9yKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gdHJhY2sgbmV0d29yayBjb25uZWN0aXZpdHlcbiAgY29uc3QgY29ubmVjdGlvbiA9IG5hdmlnYXRvci5jb25uZWN0aW9uO1xuICBpZiAoY29ubmVjdGlvbikge1xuICAgIGlmIChjb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGUpIHtcbiAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdlZmZlY3RpdmVDb25uZWN0aW9uVHlwZScsIGNvbm5lY3Rpb24uZWZmZWN0aXZlVHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3Rpb24udHlwZSkge1xuICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2Nvbm5lY3Rpb25UeXBlJywgY29ubmVjdGlvbi50eXBlKTtcbiAgICB9XG5cbiAgICBpZiAoaXNNZWFzdXJlbWVudFZhbHVlKGNvbm5lY3Rpb24ucnR0KSkge1xuICAgICAgX21lYXN1cmVtZW50c1snY29ubmVjdGlvbi5ydHQnXSA9IHsgdmFsdWU6IGNvbm5lY3Rpb24ucnR0LCB1bml0OiAnbWlsbGlzZWNvbmQnIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzTWVhc3VyZW1lbnRWYWx1ZShuYXZpZ2F0b3IuZGV2aWNlTWVtb3J5KSkge1xuICAgIHNwYW4uc2V0QXR0cmlidXRlKCdkZXZpY2VNZW1vcnknLCBgJHtuYXZpZ2F0b3IuZGV2aWNlTWVtb3J5fSBHQmApO1xuICB9XG5cbiAgaWYgKGlzTWVhc3VyZW1lbnRWYWx1ZShuYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeSkpIHtcbiAgICBzcGFuLnNldEF0dHJpYnV0ZSgnaGFyZHdhcmVDb25jdXJyZW5jeScsIFN0cmluZyhuYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeSkpO1xuICB9XG59XG5cbi8qKiBBZGQgTENQIC8gQ0xTIGRhdGEgdG8gc3BhbiB0byBhbGxvdyBkZWJ1Z2dpbmcgKi9cbmZ1bmN0aW9uIF9zZXRXZWJWaXRhbEF0dHJpYnV0ZXMoc3Bhbiwgb3B0aW9ucykge1xuICAvLyBPbmx5IGFkZCBMQ1AgYXR0cmlidXRlcyBpZiBMQ1AgaXMgYmVpbmcgcmVjb3JkZWQgb24gdGhlIHBhZ2Vsb2FkIHNwYW5cbiAgaWYgKF9sY3BFbnRyeSAmJiBvcHRpb25zLnJlY29yZExjcE9uUGFnZWxvYWRTcGFuKSB7XG4gICAgLy8gQ2FwdHVyZSBQcm9wZXJ0aWVzIG9mIHRoZSBMQ1AgZWxlbWVudCB0aGF0IGNvbnRyaWJ1dGVzIHRvIHRoZSBMQ1AuXG5cbiAgICBpZiAoX2xjcEVudHJ5LmVsZW1lbnQpIHtcbiAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdsY3AuZWxlbWVudCcsIGh0bWxUcmVlQXNTdHJpbmcoX2xjcEVudHJ5LmVsZW1lbnQpKTtcbiAgICB9XG5cbiAgICBpZiAoX2xjcEVudHJ5LmlkKSB7XG4gICAgICBzcGFuLnNldEF0dHJpYnV0ZSgnbGNwLmlkJywgX2xjcEVudHJ5LmlkKTtcbiAgICB9XG5cbiAgICBpZiAoX2xjcEVudHJ5LnVybCkge1xuICAgICAgLy8gVHJpbSBVUkwgdG8gdGhlIGZpcnN0IDIwMCBjaGFyYWN0ZXJzLlxuICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2xjcC51cmwnLCBfbGNwRW50cnkudXJsLnRyaW0oKS5zbGljZSgwLCAyMDApKTtcbiAgICB9XG5cbiAgICBpZiAoX2xjcEVudHJ5LmxvYWRUaW1lICE9IG51bGwpIHtcbiAgICAgIC8vIGxvYWRUaW1lIGlzIHRoZSB0aW1lIG9mIExDUCB0aGF0J3MgcmVsYXRlZCB0byByZWNlaXZpbmcgdGhlIExDUCBlbGVtZW50IHJlc3BvbnNlLi5cbiAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdsY3AubG9hZFRpbWUnLCBfbGNwRW50cnkubG9hZFRpbWUpO1xuICAgIH1cblxuICAgIGlmIChfbGNwRW50cnkucmVuZGVyVGltZSAhPSBudWxsKSB7XG4gICAgICAvLyByZW5kZXJUaW1lIGlzIGxvYWRUaW1lICsgcmVuZGVyaW5nIHRpbWVcbiAgICAgIC8vIGl0J3MgMCBpZiB0aGUgTENQIGVsZW1lbnQgaXMgbG9hZGVkIGZyb20gYSAzcmQgcGFydHkgb3JpZ2luIHRoYXQgZG9lc24ndCBzZW5kIHRoZVxuICAgICAgLy8gYFRpbWluZy1BbGxvdy1PcmlnaW5gIGhlYWRlci5cbiAgICAgIHNwYW4uc2V0QXR0cmlidXRlKCdsY3AucmVuZGVyVGltZScsIF9sY3BFbnRyeS5yZW5kZXJUaW1lKTtcbiAgICB9XG5cbiAgICBzcGFuLnNldEF0dHJpYnV0ZSgnbGNwLnNpemUnLCBfbGNwRW50cnkuc2l6ZSk7XG4gIH1cblxuICAvLyBPbmx5IGFkZCBDTFMgYXR0cmlidXRlcyBpZiBDTFMgaXMgYmVpbmcgcmVjb3JkZWQgb24gdGhlIHBhZ2Vsb2FkIHNwYW5cbiAgaWYgKF9jbHNFbnRyeT8uc291cmNlcyAmJiBvcHRpb25zLnJlY29yZENsc09uUGFnZWxvYWRTcGFuKSB7XG4gICAgX2Nsc0VudHJ5LnNvdXJjZXMuZm9yRWFjaCgoc291cmNlLCBpbmRleCkgPT5cbiAgICAgIHNwYW4uc2V0QXR0cmlidXRlKGBjbHMuc291cmNlLiR7aW5kZXggKyAxfWAsIGh0bWxUcmVlQXNTdHJpbmcoc291cmNlLm5vZGUpKSxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldFJlc291cmNlRW50cnlTaXplRGF0YShcbiAgYXR0cmlidXRlcyxcbiAgZW50cnksXG4gIGtleSxcbiAgZGF0YUtleSxcbikge1xuICBjb25zdCBlbnRyeVZhbCA9IGVudHJ5W2tleV07XG4gIGlmIChlbnRyeVZhbCAhPSBudWxsICYmIGVudHJ5VmFsIDwgTUFYX0lOVF9BU19CWVRFUykge1xuICAgIGF0dHJpYnV0ZXNbZGF0YUtleV0gPSBlbnRyeVZhbDtcbiAgfVxufVxuXG4vKipcbiAqIEFkZCB0dGZiIHJlcXVlc3QgdGltZSBpbmZvcm1hdGlvbiB0byBtZWFzdXJlbWVudHMuXG4gKlxuICogdHRmYiBpbmZvcm1hdGlvbiBpcyBhZGRlZCB2aWEgdmVuZG9yZWQgd2ViIHZpdGFscyBsaWJyYXJ5LlxuICovXG5mdW5jdGlvbiBfYWRkVHRmYlJlcXVlc3RUaW1lVG9NZWFzdXJlbWVudHMoX21lYXN1cmVtZW50cykge1xuICBjb25zdCBuYXZFbnRyeSA9IGdldE5hdmlnYXRpb25FbnRyeShmYWxzZSk7XG4gIGlmICghbmF2RW50cnkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7IHJlc3BvbnNlU3RhcnQsIHJlcXVlc3RTdGFydCB9ID0gbmF2RW50cnk7XG5cbiAgaWYgKHJlcXVlc3RTdGFydCA8PSByZXNwb25zZVN0YXJ0KSB7XG4gICAgX21lYXN1cmVtZW50c1sndHRmYi5yZXF1ZXN0VGltZSddID0ge1xuICAgICAgdmFsdWU6IHJlc3BvbnNlU3RhcnQgLSByZXF1ZXN0U3RhcnQsXG4gICAgICB1bml0OiAnbWlsbGlzZWNvbmQnLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IHsgX2FkZE1lYXN1cmVTcGFucywgX2FkZE5hdmlnYXRpb25TcGFucywgX2FkZFJlc291cmNlU3BhbnMsIGFkZFBlcmZvcm1hbmNlRW50cmllcywgc3RhcnRUcmFja2luZ0ludGVyYWN0aW9ucywgc3RhcnRUcmFja2luZ0xvbmdBbmltYXRpb25GcmFtZXMsIHN0YXJ0VHJhY2tpbmdMb25nVGFza3MsIHN0YXJ0VHJhY2tpbmdXZWJWaXRhbHMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJyb3dzZXJNZXRyaWNzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/browserMetrics.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/cls.js":
/*!***************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/cls.js ***!
  \***************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   trackClsAsStandaloneSpan: () => (/* binding */ trackClsAsStandaloneSpan)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/debug-build.js\");\n/* harmony import */ var _instrument_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./instrument.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/instrument.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/utils.js\");\n\n\n\n\n\n/**\n * Starts tracking the Cumulative Layout Shift on the current page and collects the value once\n *\n * - the page visibility is hidden\n * - a navigation span is started (to stop CLS measurement for SPA soft navigations)\n *\n * Once either of these events triggers, the CLS value is sent as a standalone span and we stop\n * measuring CLS.\n */\nfunction trackClsAsStandaloneSpan(client) {\n  let standaloneCLsValue = 0;\n  let standaloneClsEntry;\n\n  if (!(0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.supportsWebVital)('layout-shift')) {\n    return;\n  }\n\n  const cleanupClsHandler = (0,_instrument_js__WEBPACK_IMPORTED_MODULE_2__.addClsInstrumentationHandler)(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1] ;\n    if (!entry) {\n      return;\n    }\n    standaloneCLsValue = metric.value;\n    standaloneClsEntry = entry;\n  }, true);\n\n  (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.listenForWebVitalReportEvents)(client, (reportEvent, pageloadSpanId) => {\n    sendStandaloneClsSpan(standaloneCLsValue, standaloneClsEntry, pageloadSpanId, reportEvent);\n    cleanupClsHandler();\n  });\n}\n\nfunction sendStandaloneClsSpan(\n  clsValue,\n  entry,\n  pageloadSpanId,\n  reportEvent,\n) {\n  _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log(`Sending CLS span (${clsValue})`);\n\n  const startTime = (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.msToSec)(((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.browserPerformanceTimeOrigin)() || 0) + (entry?.startTime || 0));\n  const routeName = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)().getScopeData().transactionName;\n\n  const name = entry ? (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.htmlTreeAsString)(entry.sources[0]?.node) : 'Layout shift';\n\n  const attributes = {\n    [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser.cls',\n    [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'ui.webvital.cls',\n    [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: entry?.duration || 0,\n    // attach the pageload span id to the CLS span so that we can link them in the UI\n    'sentry.pageload.span_id': pageloadSpanId,\n    // describes what triggered the web vital to be reported\n    'sentry.report_event': reportEvent,\n  };\n\n  // Add CLS sources as span attributes to help with debugging layout shifts\n  // See: https://developer.mozilla.org/en-US/docs/Web/API/LayoutShift/sources\n  if (entry?.sources) {\n    entry.sources.forEach((source, index) => {\n      attributes[`cls.source.${index + 1}`] = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.htmlTreeAsString)(source.node);\n    });\n  }\n\n  const span = (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.startStandaloneWebVitalSpan)({\n    name,\n    transaction: routeName,\n    attributes,\n    startTime,\n  });\n\n  if (span) {\n    span.addEvent('cls', {\n      [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: '',\n      [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: clsValue,\n    });\n\n    // LayoutShift performance entries always have a duration of 0, so we don't need to add `entry.duration` here\n    // see: https://developer.mozilla.org/en-US/docs/Web/API/PerformanceEntry/duration\n    span.end(startTime);\n  }\n}\n\n\n//# sourceMappingURL=cls.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3MvY2xzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQWtTO0FBQ2xQO0FBQ2U7QUFDb0Q7O0FBRW5IO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPLDJEQUFnQjtBQUN2QjtBQUNBOztBQUVBLDRCQUE0Qiw0RUFBNEIsSUFBSSxRQUFRO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsRUFBRSx3RUFBNkI7QUFDL0I7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHdEQUFXLElBQUksK0NBQUssMEJBQTBCLFNBQVM7O0FBRXpELG9CQUFvQixrREFBTyxFQUFFLDBFQUE0QjtBQUN6RCxvQkFBb0IsNkRBQWU7O0FBRW5DLHVCQUF1Qiw4REFBZ0I7O0FBRXZDO0FBQ0EsS0FBSywwRUFBZ0M7QUFDckMsS0FBSyxzRUFBNEI7QUFDakMsS0FBSywyRUFBaUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixVQUFVLEtBQUssOERBQWdCO0FBQzlELEtBQUs7QUFDTDs7QUFFQSxlQUFlLHNFQUEyQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLE9BQU8sb0ZBQTBDO0FBQ2pELE9BQU8scUZBQTJDO0FBQ2xELEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFb0M7QUFDcEMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeS1pbnRlcm5hbCticm93c2VyLXV0aWxzQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC9icm93c2VyLXV0aWxzL2J1aWxkL2VzbS9tZXRyaWNzL2Nscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWJ1ZywgYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiwgZ2V0Q3VycmVudFNjb3BlLCBodG1sVHJlZUFzU3RyaW5nLCBTRU1BTlRJQ19BVFRSSUJVVEVfRVhDTFVTSVZFX1RJTUUsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfTUVBU1VSRU1FTlRfVkFMVUUsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfTUVBU1VSRU1FTlRfVU5JVCwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUCwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU4gfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBhZGRDbHNJbnN0cnVtZW50YXRpb25IYW5kbGVyIH0gZnJvbSAnLi9pbnN0cnVtZW50LmpzJztcbmltcG9ydCB7IHN1cHBvcnRzV2ViVml0YWwsIGxpc3RlbkZvcldlYlZpdGFsUmVwb3J0RXZlbnRzLCBtc1RvU2VjLCBzdGFydFN0YW5kYWxvbmVXZWJWaXRhbFNwYW4gfSBmcm9tICcuL3V0aWxzLmpzJztcblxuLyoqXG4gKiBTdGFydHMgdHJhY2tpbmcgdGhlIEN1bXVsYXRpdmUgTGF5b3V0IFNoaWZ0IG9uIHRoZSBjdXJyZW50IHBhZ2UgYW5kIGNvbGxlY3RzIHRoZSB2YWx1ZSBvbmNlXG4gKlxuICogLSB0aGUgcGFnZSB2aXNpYmlsaXR5IGlzIGhpZGRlblxuICogLSBhIG5hdmlnYXRpb24gc3BhbiBpcyBzdGFydGVkICh0byBzdG9wIENMUyBtZWFzdXJlbWVudCBmb3IgU1BBIHNvZnQgbmF2aWdhdGlvbnMpXG4gKlxuICogT25jZSBlaXRoZXIgb2YgdGhlc2UgZXZlbnRzIHRyaWdnZXJzLCB0aGUgQ0xTIHZhbHVlIGlzIHNlbnQgYXMgYSBzdGFuZGFsb25lIHNwYW4gYW5kIHdlIHN0b3BcbiAqIG1lYXN1cmluZyBDTFMuXG4gKi9cbmZ1bmN0aW9uIHRyYWNrQ2xzQXNTdGFuZGFsb25lU3BhbihjbGllbnQpIHtcbiAgbGV0IHN0YW5kYWxvbmVDTHNWYWx1ZSA9IDA7XG4gIGxldCBzdGFuZGFsb25lQ2xzRW50cnk7XG5cbiAgaWYgKCFzdXBwb3J0c1dlYlZpdGFsKCdsYXlvdXQtc2hpZnQnKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNsZWFudXBDbHNIYW5kbGVyID0gYWRkQ2xzSW5zdHJ1bWVudGF0aW9uSGFuZGxlcigoeyBtZXRyaWMgfSkgPT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gbWV0cmljLmVudHJpZXNbbWV0cmljLmVudHJpZXMubGVuZ3RoIC0gMV0gO1xuICAgIGlmICghZW50cnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhbmRhbG9uZUNMc1ZhbHVlID0gbWV0cmljLnZhbHVlO1xuICAgIHN0YW5kYWxvbmVDbHNFbnRyeSA9IGVudHJ5O1xuICB9LCB0cnVlKTtcblxuICBsaXN0ZW5Gb3JXZWJWaXRhbFJlcG9ydEV2ZW50cyhjbGllbnQsIChyZXBvcnRFdmVudCwgcGFnZWxvYWRTcGFuSWQpID0+IHtcbiAgICBzZW5kU3RhbmRhbG9uZUNsc1NwYW4oc3RhbmRhbG9uZUNMc1ZhbHVlLCBzdGFuZGFsb25lQ2xzRW50cnksIHBhZ2Vsb2FkU3BhbklkLCByZXBvcnRFdmVudCk7XG4gICAgY2xlYW51cENsc0hhbmRsZXIoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNlbmRTdGFuZGFsb25lQ2xzU3BhbihcbiAgY2xzVmFsdWUsXG4gIGVudHJ5LFxuICBwYWdlbG9hZFNwYW5JZCxcbiAgcmVwb3J0RXZlbnQsXG4pIHtcbiAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKGBTZW5kaW5nIENMUyBzcGFuICgke2Nsc1ZhbHVlfSlgKTtcblxuICBjb25zdCBzdGFydFRpbWUgPSBtc1RvU2VjKChicm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luKCkgfHwgMCkgKyAoZW50cnk/LnN0YXJ0VGltZSB8fCAwKSk7XG4gIGNvbnN0IHJvdXRlTmFtZSA9IGdldEN1cnJlbnRTY29wZSgpLmdldFNjb3BlRGF0YSgpLnRyYW5zYWN0aW9uTmFtZTtcblxuICBjb25zdCBuYW1lID0gZW50cnkgPyBodG1sVHJlZUFzU3RyaW5nKGVudHJ5LnNvdXJjZXNbMF0/Lm5vZGUpIDogJ0xheW91dCBzaGlmdCc7XG5cbiAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiAnYXV0by5odHRwLmJyb3dzZXIuY2xzJyxcbiAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUF06ICd1aS53ZWJ2aXRhbC5jbHMnLFxuICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfRVhDTFVTSVZFX1RJTUVdOiBlbnRyeT8uZHVyYXRpb24gfHwgMCxcbiAgICAvLyBhdHRhY2ggdGhlIHBhZ2Vsb2FkIHNwYW4gaWQgdG8gdGhlIENMUyBzcGFuIHNvIHRoYXQgd2UgY2FuIGxpbmsgdGhlbSBpbiB0aGUgVUlcbiAgICAnc2VudHJ5LnBhZ2Vsb2FkLnNwYW5faWQnOiBwYWdlbG9hZFNwYW5JZCxcbiAgICAvLyBkZXNjcmliZXMgd2hhdCB0cmlnZ2VyZWQgdGhlIHdlYiB2aXRhbCB0byBiZSByZXBvcnRlZFxuICAgICdzZW50cnkucmVwb3J0X2V2ZW50JzogcmVwb3J0RXZlbnQsXG4gIH07XG5cbiAgLy8gQWRkIENMUyBzb3VyY2VzIGFzIHNwYW4gYXR0cmlidXRlcyB0byBoZWxwIHdpdGggZGVidWdnaW5nIGxheW91dCBzaGlmdHNcbiAgLy8gU2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTGF5b3V0U2hpZnQvc291cmNlc1xuICBpZiAoZW50cnk/LnNvdXJjZXMpIHtcbiAgICBlbnRyeS5zb3VyY2VzLmZvckVhY2goKHNvdXJjZSwgaW5kZXgpID0+IHtcbiAgICAgIGF0dHJpYnV0ZXNbYGNscy5zb3VyY2UuJHtpbmRleCArIDF9YF0gPSBodG1sVHJlZUFzU3RyaW5nKHNvdXJjZS5ub2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHNwYW4gPSBzdGFydFN0YW5kYWxvbmVXZWJWaXRhbFNwYW4oe1xuICAgIG5hbWUsXG4gICAgdHJhbnNhY3Rpb246IHJvdXRlTmFtZSxcbiAgICBhdHRyaWJ1dGVzLFxuICAgIHN0YXJ0VGltZSxcbiAgfSk7XG5cbiAgaWYgKHNwYW4pIHtcbiAgICBzcGFuLmFkZEV2ZW50KCdjbHMnLCB7XG4gICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9NRUFTVVJFTUVOVF9VTklUXTogJycsXG4gICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9NRUFTVVJFTUVOVF9WQUxVRV06IGNsc1ZhbHVlLFxuICAgIH0pO1xuXG4gICAgLy8gTGF5b3V0U2hpZnQgcGVyZm9ybWFuY2UgZW50cmllcyBhbHdheXMgaGF2ZSBhIGR1cmF0aW9uIG9mIDAsIHNvIHdlIGRvbid0IG5lZWQgdG8gYWRkIGBlbnRyeS5kdXJhdGlvbmAgaGVyZVxuICAgIC8vIHNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1BlcmZvcm1hbmNlRW50cnkvZHVyYXRpb25cbiAgICBzcGFuLmVuZChzdGFydFRpbWUpO1xuICB9XG59XG5cbmV4cG9ydCB7IHRyYWNrQ2xzQXNTdGFuZGFsb25lU3BhbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2xzLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/cls.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/elementTiming.js":
/*!*************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/elementTiming.js ***!
  \*************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   _onElementTiming: () => (/* binding */ _onElementTiming),\n/* harmony export */   startTrackingElementTiming: () => (/* binding */ startTrackingElementTiming)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _instrument_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instrument.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/instrument.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/utils.js\");\n\n\n\n\n// ElementTiming interface based on the W3C spec\n\n/**\n * Start tracking ElementTiming performance entries.\n */\nfunction startTrackingElementTiming() {\n  const performance = (0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.getBrowserPerformanceAPI)();\n  if (performance && (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.browserPerformanceTimeOrigin)()) {\n    return (0,_instrument_js__WEBPACK_IMPORTED_MODULE_1__.addPerformanceInstrumentationHandler)('element', _onElementTiming);\n  }\n\n  return () => undefined;\n}\n\n/**\n * exported only for testing\n */\nconst _onElementTiming = ({ entries }) => {\n  const activeSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n  const rootSpan = activeSpan ? (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(activeSpan) : undefined;\n  const transactionName = rootSpan\n    ? (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(rootSpan).description\n    : (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)().getScopeData().transactionName;\n\n  entries.forEach(entry => {\n    const elementEntry = entry ;\n\n    // Skip entries without identifier (elementtiming attribute)\n    if (!elementEntry.identifier) {\n      return;\n    }\n\n    // `name` contains the type of the element paint. Can be `'image-paint'` or `'text-paint'`.\n    // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceElementTiming#instance_properties\n    const paintType = elementEntry.name ;\n\n    const renderTime = elementEntry.renderTime;\n    const loadTime = elementEntry.loadTime;\n\n    // starting the span at:\n    // - `loadTime` if available (should be available for all \"image-paint\" entries, 0 otherwise)\n    // - `renderTime` if available (available for all entries, except 3rd party images, but these should be covered by `loadTime`, 0 otherwise)\n    // - `timestampInSeconds()` as a safeguard\n    // see https://developer.mozilla.org/en-US/docs/Web/API/PerformanceElementTiming/renderTime#cross-origin_image_render_time\n    const [spanStartTime, spanStartTimeSource] = loadTime\n      ? [(0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.msToSec)(loadTime), 'load-time']\n      : renderTime\n        ? [(0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.msToSec)(renderTime), 'render-time']\n        : [(0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.timestampInSeconds)(), 'entry-emission'];\n\n    const duration =\n      paintType === 'image-paint'\n        ? // for image paints, we can acually get a duration because image-paint entries also have a `loadTime`\n          // and `renderTime`. `loadTime` is the time when the image finished loading and `renderTime` is the\n          // time when the image finished rendering.\n          (0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.msToSec)(Math.max(0, (renderTime ?? 0) - (loadTime ?? 0)))\n        : // for `'text-paint'` entries, we can't get a duration because the `loadTime` is always zero.\n          0;\n\n    const attributes = {\n      [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.browser.elementtiming',\n      [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'ui.elementtiming',\n      // name must be user-entered, so we can assume low cardinality\n      [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'component',\n      // recording the source of the span start time, as it varies depending on available data\n      'sentry.span_start_time_source': spanStartTimeSource,\n      'sentry.transaction_name': transactionName,\n      'element.id': elementEntry.id,\n      'element.type': elementEntry.element?.tagName?.toLowerCase() || 'unknown',\n      'element.size':\n        elementEntry.naturalWidth && elementEntry.naturalHeight\n          ? `${elementEntry.naturalWidth}x${elementEntry.naturalHeight}`\n          : undefined,\n      'element.render_time': renderTime,\n      'element.load_time': loadTime,\n      // `url` is `0`(number) for text paints (hence we fall back to undefined)\n      'element.url': elementEntry.url || undefined,\n      'element.identifier': elementEntry.identifier,\n      'element.paint_type': paintType,\n    };\n\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.startSpan)(\n      {\n        name: `element[${elementEntry.identifier}]`,\n        attributes,\n        startTime: spanStartTime,\n        onlyIfParent: true,\n      },\n      span => {\n        span.end(spanStartTime + duration);\n      },\n    );\n  });\n};\n\n\n//# sourceMappingURL=elementTiming.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3MvZWxlbWVudFRpbWluZy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFzUDtBQUMvSztBQUNSOztBQUUvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixtRUFBd0I7QUFDOUMscUJBQXFCLDBFQUE0QjtBQUNqRCxXQUFXLG9GQUFvQztBQUMvQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixTQUFTO0FBQ3JDLHFCQUFxQiwyREFBYTtBQUNsQyxnQ0FBZ0MseURBQVc7QUFDM0M7QUFDQSxNQUFNLHdEQUFVO0FBQ2hCLE1BQU0sNkRBQWU7O0FBRXJCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxrREFBTztBQUNoQjtBQUNBLFdBQVcsa0RBQU87QUFDbEIsV0FBVyxnRUFBa0I7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLGtEQUFPO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQSxPQUFPLDBFQUFnQztBQUN2QyxPQUFPLHNFQUE0QjtBQUNuQztBQUNBLE9BQU8sMEVBQWdDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwwQkFBMEIsR0FBRywyQkFBMkI7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxJQUFJLHVEQUFTO0FBQ2I7QUFDQSx5QkFBeUIsd0JBQXdCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIOztBQUV3RDtBQUN4RCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3MvZWxlbWVudFRpbWluZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBicm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luLCBnZXRBY3RpdmVTcGFuLCBnZXRSb290U3Bhbiwgc3BhblRvSlNPTiwgZ2V0Q3VycmVudFNjb3BlLCB0aW1lc3RhbXBJblNlY29uZHMsIHN0YXJ0U3BhbiwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0UsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1AsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1JJR0lOIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGFkZFBlcmZvcm1hbmNlSW5zdHJ1bWVudGF0aW9uSGFuZGxlciB9IGZyb20gJy4vaW5zdHJ1bWVudC5qcyc7XG5pbXBvcnQgeyBnZXRCcm93c2VyUGVyZm9ybWFuY2VBUEksIG1zVG9TZWMgfSBmcm9tICcuL3V0aWxzLmpzJztcblxuLy8gRWxlbWVudFRpbWluZyBpbnRlcmZhY2UgYmFzZWQgb24gdGhlIFczQyBzcGVjXG5cbi8qKlxuICogU3RhcnQgdHJhY2tpbmcgRWxlbWVudFRpbWluZyBwZXJmb3JtYW5jZSBlbnRyaWVzLlxuICovXG5mdW5jdGlvbiBzdGFydFRyYWNraW5nRWxlbWVudFRpbWluZygpIHtcbiAgY29uc3QgcGVyZm9ybWFuY2UgPSBnZXRCcm93c2VyUGVyZm9ybWFuY2VBUEkoKTtcbiAgaWYgKHBlcmZvcm1hbmNlICYmIGJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4oKSkge1xuICAgIHJldHVybiBhZGRQZXJmb3JtYW5jZUluc3RydW1lbnRhdGlvbkhhbmRsZXIoJ2VsZW1lbnQnLCBfb25FbGVtZW50VGltaW5nKTtcbiAgfVxuXG4gIHJldHVybiAoKSA9PiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogZXhwb3J0ZWQgb25seSBmb3IgdGVzdGluZ1xuICovXG5jb25zdCBfb25FbGVtZW50VGltaW5nID0gKHsgZW50cmllcyB9KSA9PiB7XG4gIGNvbnN0IGFjdGl2ZVNwYW4gPSBnZXRBY3RpdmVTcGFuKCk7XG4gIGNvbnN0IHJvb3RTcGFuID0gYWN0aXZlU3BhbiA/IGdldFJvb3RTcGFuKGFjdGl2ZVNwYW4pIDogdW5kZWZpbmVkO1xuICBjb25zdCB0cmFuc2FjdGlvbk5hbWUgPSByb290U3BhblxuICAgID8gc3BhblRvSlNPTihyb290U3BhbikuZGVzY3JpcHRpb25cbiAgICA6IGdldEN1cnJlbnRTY29wZSgpLmdldFNjb3BlRGF0YSgpLnRyYW5zYWN0aW9uTmFtZTtcblxuICBlbnRyaWVzLmZvckVhY2goZW50cnkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnRFbnRyeSA9IGVudHJ5IDtcblxuICAgIC8vIFNraXAgZW50cmllcyB3aXRob3V0IGlkZW50aWZpZXIgKGVsZW1lbnR0aW1pbmcgYXR0cmlidXRlKVxuICAgIGlmICghZWxlbWVudEVudHJ5LmlkZW50aWZpZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBgbmFtZWAgY29udGFpbnMgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQgcGFpbnQuIENhbiBiZSBgJ2ltYWdlLXBhaW50J2Agb3IgYCd0ZXh0LXBhaW50J2AuXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1BlcmZvcm1hbmNlRWxlbWVudFRpbWluZyNpbnN0YW5jZV9wcm9wZXJ0aWVzXG4gICAgY29uc3QgcGFpbnRUeXBlID0gZWxlbWVudEVudHJ5Lm5hbWUgO1xuXG4gICAgY29uc3QgcmVuZGVyVGltZSA9IGVsZW1lbnRFbnRyeS5yZW5kZXJUaW1lO1xuICAgIGNvbnN0IGxvYWRUaW1lID0gZWxlbWVudEVudHJ5LmxvYWRUaW1lO1xuXG4gICAgLy8gc3RhcnRpbmcgdGhlIHNwYW4gYXQ6XG4gICAgLy8gLSBgbG9hZFRpbWVgIGlmIGF2YWlsYWJsZSAoc2hvdWxkIGJlIGF2YWlsYWJsZSBmb3IgYWxsIFwiaW1hZ2UtcGFpbnRcIiBlbnRyaWVzLCAwIG90aGVyd2lzZSlcbiAgICAvLyAtIGByZW5kZXJUaW1lYCBpZiBhdmFpbGFibGUgKGF2YWlsYWJsZSBmb3IgYWxsIGVudHJpZXMsIGV4Y2VwdCAzcmQgcGFydHkgaW1hZ2VzLCBidXQgdGhlc2Ugc2hvdWxkIGJlIGNvdmVyZWQgYnkgYGxvYWRUaW1lYCwgMCBvdGhlcndpc2UpXG4gICAgLy8gLSBgdGltZXN0YW1wSW5TZWNvbmRzKClgIGFzIGEgc2FmZWd1YXJkXG4gICAgLy8gc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9QZXJmb3JtYW5jZUVsZW1lbnRUaW1pbmcvcmVuZGVyVGltZSNjcm9zcy1vcmlnaW5faW1hZ2VfcmVuZGVyX3RpbWVcbiAgICBjb25zdCBbc3BhblN0YXJ0VGltZSwgc3BhblN0YXJ0VGltZVNvdXJjZV0gPSBsb2FkVGltZVxuICAgICAgPyBbbXNUb1NlYyhsb2FkVGltZSksICdsb2FkLXRpbWUnXVxuICAgICAgOiByZW5kZXJUaW1lXG4gICAgICAgID8gW21zVG9TZWMocmVuZGVyVGltZSksICdyZW5kZXItdGltZSddXG4gICAgICAgIDogW3RpbWVzdGFtcEluU2Vjb25kcygpLCAnZW50cnktZW1pc3Npb24nXTtcblxuICAgIGNvbnN0IGR1cmF0aW9uID1cbiAgICAgIHBhaW50VHlwZSA9PT0gJ2ltYWdlLXBhaW50J1xuICAgICAgICA/IC8vIGZvciBpbWFnZSBwYWludHMsIHdlIGNhbiBhY3VhbGx5IGdldCBhIGR1cmF0aW9uIGJlY2F1c2UgaW1hZ2UtcGFpbnQgZW50cmllcyBhbHNvIGhhdmUgYSBgbG9hZFRpbWVgXG4gICAgICAgICAgLy8gYW5kIGByZW5kZXJUaW1lYC4gYGxvYWRUaW1lYCBpcyB0aGUgdGltZSB3aGVuIHRoZSBpbWFnZSBmaW5pc2hlZCBsb2FkaW5nIGFuZCBgcmVuZGVyVGltZWAgaXMgdGhlXG4gICAgICAgICAgLy8gdGltZSB3aGVuIHRoZSBpbWFnZSBmaW5pc2hlZCByZW5kZXJpbmcuXG4gICAgICAgICAgbXNUb1NlYyhNYXRoLm1heCgwLCAocmVuZGVyVGltZSA/PyAwKSAtIChsb2FkVGltZSA/PyAwKSkpXG4gICAgICAgIDogLy8gZm9yIGAndGV4dC1wYWludCdgIGVudHJpZXMsIHdlIGNhbid0IGdldCBhIGR1cmF0aW9uIGJlY2F1c2UgdGhlIGBsb2FkVGltZWAgaXMgYWx3YXlzIHplcm8uXG4gICAgICAgICAgMDtcblxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiAnYXV0by51aS5icm93c2VyLmVsZW1lbnR0aW1pbmcnLFxuICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfT1BdOiAndWkuZWxlbWVudHRpbWluZycsXG4gICAgICAvLyBuYW1lIG11c3QgYmUgdXNlci1lbnRlcmVkLCBzbyB3ZSBjYW4gYXNzdW1lIGxvdyBjYXJkaW5hbGl0eVxuICAgICAgW1NFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfU09VUkNFXTogJ2NvbXBvbmVudCcsXG4gICAgICAvLyByZWNvcmRpbmcgdGhlIHNvdXJjZSBvZiB0aGUgc3BhbiBzdGFydCB0aW1lLCBhcyBpdCB2YXJpZXMgZGVwZW5kaW5nIG9uIGF2YWlsYWJsZSBkYXRhXG4gICAgICAnc2VudHJ5LnNwYW5fc3RhcnRfdGltZV9zb3VyY2UnOiBzcGFuU3RhcnRUaW1lU291cmNlLFxuICAgICAgJ3NlbnRyeS50cmFuc2FjdGlvbl9uYW1lJzogdHJhbnNhY3Rpb25OYW1lLFxuICAgICAgJ2VsZW1lbnQuaWQnOiBlbGVtZW50RW50cnkuaWQsXG4gICAgICAnZWxlbWVudC50eXBlJzogZWxlbWVudEVudHJ5LmVsZW1lbnQ/LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgfHwgJ3Vua25vd24nLFxuICAgICAgJ2VsZW1lbnQuc2l6ZSc6XG4gICAgICAgIGVsZW1lbnRFbnRyeS5uYXR1cmFsV2lkdGggJiYgZWxlbWVudEVudHJ5Lm5hdHVyYWxIZWlnaHRcbiAgICAgICAgICA/IGAke2VsZW1lbnRFbnRyeS5uYXR1cmFsV2lkdGh9eCR7ZWxlbWVudEVudHJ5Lm5hdHVyYWxIZWlnaHR9YFxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgJ2VsZW1lbnQucmVuZGVyX3RpbWUnOiByZW5kZXJUaW1lLFxuICAgICAgJ2VsZW1lbnQubG9hZF90aW1lJzogbG9hZFRpbWUsXG4gICAgICAvLyBgdXJsYCBpcyBgMGAobnVtYmVyKSBmb3IgdGV4dCBwYWludHMgKGhlbmNlIHdlIGZhbGwgYmFjayB0byB1bmRlZmluZWQpXG4gICAgICAnZWxlbWVudC51cmwnOiBlbGVtZW50RW50cnkudXJsIHx8IHVuZGVmaW5lZCxcbiAgICAgICdlbGVtZW50LmlkZW50aWZpZXInOiBlbGVtZW50RW50cnkuaWRlbnRpZmllcixcbiAgICAgICdlbGVtZW50LnBhaW50X3R5cGUnOiBwYWludFR5cGUsXG4gICAgfTtcblxuICAgIHN0YXJ0U3BhbihcbiAgICAgIHtcbiAgICAgICAgbmFtZTogYGVsZW1lbnRbJHtlbGVtZW50RW50cnkuaWRlbnRpZmllcn1dYCxcbiAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgc3RhcnRUaW1lOiBzcGFuU3RhcnRUaW1lLFxuICAgICAgICBvbmx5SWZQYXJlbnQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgc3BhbiA9PiB7XG4gICAgICAgIHNwYW4uZW5kKHNwYW5TdGFydFRpbWUgKyBkdXJhdGlvbik7XG4gICAgICB9LFxuICAgICk7XG4gIH0pO1xufTtcblxuZXhwb3J0IHsgX29uRWxlbWVudFRpbWluZywgc3RhcnRUcmFja2luZ0VsZW1lbnRUaW1pbmcgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVsZW1lbnRUaW1pbmcuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/elementTiming.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/inp.js":
/*!***************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/inp.js ***!
  \***************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   _onInp: () => (/* binding */ _onInp),\n/* harmony export */   _trackINP: () => (/* binding */ _trackINP),\n/* harmony export */   registerInpInteractionListener: () => (/* binding */ registerInpInteractionListener),\n/* harmony export */   startTrackingINP: () => (/* binding */ startTrackingINP)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _instrument_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instrument.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/instrument.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/utils.js\");\n\n\n\n\nconst LAST_INTERACTIONS = [];\nconst INTERACTIONS_SPAN_MAP = new Map();\n\n/**\n * 60 seconds is the maximum for a plausible INP value\n * (source: Me)\n */\nconst MAX_PLAUSIBLE_INP_DURATION = 60;\n/**\n * Start tracking INP webvital events.\n */\nfunction startTrackingINP() {\n  const performance = (0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.getBrowserPerformanceAPI)();\n  if (performance && (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.browserPerformanceTimeOrigin)()) {\n    const inpCallback = _trackINP();\n\n    return () => {\n      inpCallback();\n    };\n  }\n\n  return () => undefined;\n}\n\nconst INP_ENTRY_MAP = {\n  click: 'click',\n  pointerdown: 'click',\n  pointerup: 'click',\n  mousedown: 'click',\n  mouseup: 'click',\n  touchstart: 'click',\n  touchend: 'click',\n  mouseover: 'hover',\n  mouseout: 'hover',\n  mouseenter: 'hover',\n  mouseleave: 'hover',\n  pointerover: 'hover',\n  pointerout: 'hover',\n  pointerenter: 'hover',\n  pointerleave: 'hover',\n  dragstart: 'drag',\n  dragend: 'drag',\n  drag: 'drag',\n  dragenter: 'drag',\n  dragleave: 'drag',\n  dragover: 'drag',\n  drop: 'drag',\n  keydown: 'press',\n  keyup: 'press',\n  keypress: 'press',\n  input: 'press',\n};\n\n/** Starts tracking the Interaction to Next Paint on the current page. #\n * exported only for testing\n */\nfunction _trackINP() {\n  return (0,_instrument_js__WEBPACK_IMPORTED_MODULE_1__.addInpInstrumentationHandler)(_onInp);\n}\n\n/**\n * exported only for testing\n */\nconst _onInp = ({ metric }) => {\n  if (metric.value == undefined) {\n    return;\n  }\n\n  const duration = (0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.msToSec)(metric.value);\n\n  // We received occasional reports of hour-long INP values.\n  // Therefore, we add a sanity check to avoid creating spans for\n  // unrealistically long INP durations.\n  if (duration > MAX_PLAUSIBLE_INP_DURATION) {\n    return;\n  }\n\n  const entry = metric.entries.find(entry => entry.duration === metric.value && INP_ENTRY_MAP[entry.name]);\n\n  if (!entry) {\n    return;\n  }\n\n  const { interactionId } = entry;\n  const interactionType = INP_ENTRY_MAP[entry.name];\n\n  /** Build the INP span, create an envelope from the span, and then send the envelope */\n  const startTime = (0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.msToSec)(((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.browserPerformanceTimeOrigin)() ) + entry.startTime);\n  const activeSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n  const rootSpan = activeSpan ? (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(activeSpan) : undefined;\n\n  // We first try to lookup the span from our INTERACTIONS_SPAN_MAP,\n  // where we cache the route per interactionId\n  const cachedSpan = interactionId != null ? INTERACTIONS_SPAN_MAP.get(interactionId) : undefined;\n\n  const spanToUse = cachedSpan || rootSpan;\n\n  // Else, we try to use the active span.\n  // Finally, we fall back to look at the transactionName on the scope\n  const routeName = spanToUse ? (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(spanToUse).description : (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)().getScopeData().transactionName;\n\n  const name = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.htmlTreeAsString)(entry.target);\n  const attributes = {\n    [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser.inp',\n    [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: `ui.interaction.${interactionType}`,\n    [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: entry.duration,\n  };\n\n  const span = (0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.startStandaloneWebVitalSpan)({\n    name,\n    transaction: routeName,\n    attributes,\n    startTime,\n  });\n\n  if (span) {\n    span.addEvent('inp', {\n      [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: 'millisecond',\n      [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: metric.value,\n    });\n\n    span.end(startTime + duration);\n  }\n};\n\n/**\n * Register a listener to cache route information for INP interactions.\n */\nfunction registerInpInteractionListener() {\n  const handleEntries = ({ entries }) => {\n    const activeSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n    const activeRootSpan = activeSpan && (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(activeSpan);\n\n    entries.forEach(entry => {\n      if (!(0,_instrument_js__WEBPACK_IMPORTED_MODULE_1__.isPerformanceEventTiming)(entry) || !activeRootSpan) {\n        return;\n      }\n\n      const interactionId = entry.interactionId;\n      if (interactionId == null) {\n        return;\n      }\n\n      // If the interaction was already recorded before, nothing more to do\n      if (INTERACTIONS_SPAN_MAP.has(interactionId)) {\n        return;\n      }\n\n      // We keep max. 10 interactions in the list, then remove the oldest one & clean up\n      if (LAST_INTERACTIONS.length > 10) {\n        const last = LAST_INTERACTIONS.shift() ;\n        INTERACTIONS_SPAN_MAP.delete(last);\n      }\n\n      // We add the interaction to the list of recorded interactions\n      // and store the span for this interaction\n      LAST_INTERACTIONS.push(interactionId);\n      INTERACTIONS_SPAN_MAP.set(interactionId, activeRootSpan);\n    });\n  };\n\n  (0,_instrument_js__WEBPACK_IMPORTED_MODULE_1__.addPerformanceInstrumentationHandler)('event', handleEntries);\n  (0,_instrument_js__WEBPACK_IMPORTED_MODULE_1__.addPerformanceInstrumentationHandler)('first-input', handleEntries);\n}\n\n\n//# sourceMappingURL=inp.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3MvaW5wLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBbVU7QUFDcE07QUFDbkM7O0FBRTVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLG1FQUF3QjtBQUM5QyxxQkFBcUIsMEVBQTRCO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLDRFQUE0QjtBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGtEQUFPOztBQUUxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFVBQVUsZ0JBQWdCO0FBQzFCOztBQUVBO0FBQ0Esb0JBQW9CLGtEQUFPLEVBQUUsMEVBQTRCO0FBQ3pELHFCQUFxQiwyREFBYTtBQUNsQyxnQ0FBZ0MseURBQVc7O0FBRTNDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsZ0NBQWdDLHdEQUFVLDBCQUEwQiw2REFBZTs7QUFFbkYsZUFBZSw4REFBZ0I7QUFDL0I7QUFDQSxLQUFLLDBFQUFnQztBQUNyQyxLQUFLLHNFQUE0QixxQkFBcUIsZ0JBQWdCO0FBQ3RFLEtBQUssMkVBQWlDO0FBQ3RDOztBQUVBLGVBQWUsc0VBQTJCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsT0FBTyxvRkFBMEM7QUFDakQsT0FBTyxxRkFBMkM7QUFDbEQsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsU0FBUztBQUNwQyx1QkFBdUIsMkRBQWE7QUFDcEMseUNBQXlDLHlEQUFXOztBQUVwRDtBQUNBLFdBQVcsd0VBQXdCO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQSxFQUFFLG9GQUFvQztBQUN0QyxFQUFFLG9GQUFvQztBQUN0Qzs7QUFFK0U7QUFDL0UiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeS1pbnRlcm5hbCticm93c2VyLXV0aWxzQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC9icm93c2VyLXV0aWxzL2J1aWxkL2VzbS9tZXRyaWNzL2lucC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBicm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luLCBnZXRBY3RpdmVTcGFuLCBnZXRSb290U3Bhbiwgc3BhblRvSlNPTiwgZ2V0Q3VycmVudFNjb3BlLCBodG1sVHJlZUFzU3RyaW5nLCBTRU1BTlRJQ19BVFRSSUJVVEVfRVhDTFVTSVZFX1RJTUUsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfTUVBU1VSRU1FTlRfVkFMVUUsIFNFTUFOVElDX0FUVFJJQlVURV9TRU5UUllfTUVBU1VSRU1FTlRfVU5JVCwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUCwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU4gfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgYWRkUGVyZm9ybWFuY2VJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBhZGRJbnBJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBpc1BlcmZvcm1hbmNlRXZlbnRUaW1pbmcgfSBmcm9tICcuL2luc3RydW1lbnQuanMnO1xuaW1wb3J0IHsgZ2V0QnJvd3NlclBlcmZvcm1hbmNlQVBJLCBtc1RvU2VjLCBzdGFydFN0YW5kYWxvbmVXZWJWaXRhbFNwYW4gfSBmcm9tICcuL3V0aWxzLmpzJztcblxuY29uc3QgTEFTVF9JTlRFUkFDVElPTlMgPSBbXTtcbmNvbnN0IElOVEVSQUNUSU9OU19TUEFOX01BUCA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiA2MCBzZWNvbmRzIGlzIHRoZSBtYXhpbXVtIGZvciBhIHBsYXVzaWJsZSBJTlAgdmFsdWVcbiAqIChzb3VyY2U6IE1lKVxuICovXG5jb25zdCBNQVhfUExBVVNJQkxFX0lOUF9EVVJBVElPTiA9IDYwO1xuLyoqXG4gKiBTdGFydCB0cmFja2luZyBJTlAgd2Vidml0YWwgZXZlbnRzLlxuICovXG5mdW5jdGlvbiBzdGFydFRyYWNraW5nSU5QKCkge1xuICBjb25zdCBwZXJmb3JtYW5jZSA9IGdldEJyb3dzZXJQZXJmb3JtYW5jZUFQSSgpO1xuICBpZiAocGVyZm9ybWFuY2UgJiYgYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbigpKSB7XG4gICAgY29uc3QgaW5wQ2FsbGJhY2sgPSBfdHJhY2tJTlAoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpbnBDYWxsYmFjaygpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gKCkgPT4gdW5kZWZpbmVkO1xufVxuXG5jb25zdCBJTlBfRU5UUllfTUFQID0ge1xuICBjbGljazogJ2NsaWNrJyxcbiAgcG9pbnRlcmRvd246ICdjbGljaycsXG4gIHBvaW50ZXJ1cDogJ2NsaWNrJyxcbiAgbW91c2Vkb3duOiAnY2xpY2snLFxuICBtb3VzZXVwOiAnY2xpY2snLFxuICB0b3VjaHN0YXJ0OiAnY2xpY2snLFxuICB0b3VjaGVuZDogJ2NsaWNrJyxcbiAgbW91c2VvdmVyOiAnaG92ZXInLFxuICBtb3VzZW91dDogJ2hvdmVyJyxcbiAgbW91c2VlbnRlcjogJ2hvdmVyJyxcbiAgbW91c2VsZWF2ZTogJ2hvdmVyJyxcbiAgcG9pbnRlcm92ZXI6ICdob3ZlcicsXG4gIHBvaW50ZXJvdXQ6ICdob3ZlcicsXG4gIHBvaW50ZXJlbnRlcjogJ2hvdmVyJyxcbiAgcG9pbnRlcmxlYXZlOiAnaG92ZXInLFxuICBkcmFnc3RhcnQ6ICdkcmFnJyxcbiAgZHJhZ2VuZDogJ2RyYWcnLFxuICBkcmFnOiAnZHJhZycsXG4gIGRyYWdlbnRlcjogJ2RyYWcnLFxuICBkcmFnbGVhdmU6ICdkcmFnJyxcbiAgZHJhZ292ZXI6ICdkcmFnJyxcbiAgZHJvcDogJ2RyYWcnLFxuICBrZXlkb3duOiAncHJlc3MnLFxuICBrZXl1cDogJ3ByZXNzJyxcbiAga2V5cHJlc3M6ICdwcmVzcycsXG4gIGlucHV0OiAncHJlc3MnLFxufTtcblxuLyoqIFN0YXJ0cyB0cmFja2luZyB0aGUgSW50ZXJhY3Rpb24gdG8gTmV4dCBQYWludCBvbiB0aGUgY3VycmVudCBwYWdlLiAjXG4gKiBleHBvcnRlZCBvbmx5IGZvciB0ZXN0aW5nXG4gKi9cbmZ1bmN0aW9uIF90cmFja0lOUCgpIHtcbiAgcmV0dXJuIGFkZElucEluc3RydW1lbnRhdGlvbkhhbmRsZXIoX29uSW5wKTtcbn1cblxuLyoqXG4gKiBleHBvcnRlZCBvbmx5IGZvciB0ZXN0aW5nXG4gKi9cbmNvbnN0IF9vbklucCA9ICh7IG1ldHJpYyB9KSA9PiB7XG4gIGlmIChtZXRyaWMudmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZHVyYXRpb24gPSBtc1RvU2VjKG1ldHJpYy52YWx1ZSk7XG5cbiAgLy8gV2UgcmVjZWl2ZWQgb2NjYXNpb25hbCByZXBvcnRzIG9mIGhvdXItbG9uZyBJTlAgdmFsdWVzLlxuICAvLyBUaGVyZWZvcmUsIHdlIGFkZCBhIHNhbml0eSBjaGVjayB0byBhdm9pZCBjcmVhdGluZyBzcGFucyBmb3JcbiAgLy8gdW5yZWFsaXN0aWNhbGx5IGxvbmcgSU5QIGR1cmF0aW9ucy5cbiAgaWYgKGR1cmF0aW9uID4gTUFYX1BMQVVTSUJMRV9JTlBfRFVSQVRJT04pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBlbnRyeSA9IG1ldHJpYy5lbnRyaWVzLmZpbmQoZW50cnkgPT4gZW50cnkuZHVyYXRpb24gPT09IG1ldHJpYy52YWx1ZSAmJiBJTlBfRU5UUllfTUFQW2VudHJ5Lm5hbWVdKTtcblxuICBpZiAoIWVudHJ5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBpbnRlcmFjdGlvbklkIH0gPSBlbnRyeTtcbiAgY29uc3QgaW50ZXJhY3Rpb25UeXBlID0gSU5QX0VOVFJZX01BUFtlbnRyeS5uYW1lXTtcblxuICAvKiogQnVpbGQgdGhlIElOUCBzcGFuLCBjcmVhdGUgYW4gZW52ZWxvcGUgZnJvbSB0aGUgc3BhbiwgYW5kIHRoZW4gc2VuZCB0aGUgZW52ZWxvcGUgKi9cbiAgY29uc3Qgc3RhcnRUaW1lID0gbXNUb1NlYygoYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbigpICkgKyBlbnRyeS5zdGFydFRpbWUpO1xuICBjb25zdCBhY3RpdmVTcGFuID0gZ2V0QWN0aXZlU3BhbigpO1xuICBjb25zdCByb290U3BhbiA9IGFjdGl2ZVNwYW4gPyBnZXRSb290U3BhbihhY3RpdmVTcGFuKSA6IHVuZGVmaW5lZDtcblxuICAvLyBXZSBmaXJzdCB0cnkgdG8gbG9va3VwIHRoZSBzcGFuIGZyb20gb3VyIElOVEVSQUNUSU9OU19TUEFOX01BUCxcbiAgLy8gd2hlcmUgd2UgY2FjaGUgdGhlIHJvdXRlIHBlciBpbnRlcmFjdGlvbklkXG4gIGNvbnN0IGNhY2hlZFNwYW4gPSBpbnRlcmFjdGlvbklkICE9IG51bGwgPyBJTlRFUkFDVElPTlNfU1BBTl9NQVAuZ2V0KGludGVyYWN0aW9uSWQpIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHNwYW5Ub1VzZSA9IGNhY2hlZFNwYW4gfHwgcm9vdFNwYW47XG5cbiAgLy8gRWxzZSwgd2UgdHJ5IHRvIHVzZSB0aGUgYWN0aXZlIHNwYW4uXG4gIC8vIEZpbmFsbHksIHdlIGZhbGwgYmFjayB0byBsb29rIGF0IHRoZSB0cmFuc2FjdGlvbk5hbWUgb24gdGhlIHNjb3BlXG4gIGNvbnN0IHJvdXRlTmFtZSA9IHNwYW5Ub1VzZSA/IHNwYW5Ub0pTT04oc3BhblRvVXNlKS5kZXNjcmlwdGlvbiA6IGdldEN1cnJlbnRTY29wZSgpLmdldFNjb3BlRGF0YSgpLnRyYW5zYWN0aW9uTmFtZTtcblxuICBjb25zdCBuYW1lID0gaHRtbFRyZWVBc1N0cmluZyhlbnRyeS50YXJnZXQpO1xuICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09SSUdJTl06ICdhdXRvLmh0dHAuYnJvd3Nlci5pbnAnLFxuICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX09QXTogYHVpLmludGVyYWN0aW9uLiR7aW50ZXJhY3Rpb25UeXBlfWAsXG4gICAgW1NFTUFOVElDX0FUVFJJQlVURV9FWENMVVNJVkVfVElNRV06IGVudHJ5LmR1cmF0aW9uLFxuICB9O1xuXG4gIGNvbnN0IHNwYW4gPSBzdGFydFN0YW5kYWxvbmVXZWJWaXRhbFNwYW4oe1xuICAgIG5hbWUsXG4gICAgdHJhbnNhY3Rpb246IHJvdXRlTmFtZSxcbiAgICBhdHRyaWJ1dGVzLFxuICAgIHN0YXJ0VGltZSxcbiAgfSk7XG5cbiAgaWYgKHNwYW4pIHtcbiAgICBzcGFuLmFkZEV2ZW50KCdpbnAnLCB7XG4gICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9NRUFTVVJFTUVOVF9VTklUXTogJ21pbGxpc2Vjb25kJyxcbiAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX01FQVNVUkVNRU5UX1ZBTFVFXTogbWV0cmljLnZhbHVlLFxuICAgIH0pO1xuXG4gICAgc3Bhbi5lbmQoc3RhcnRUaW1lICsgZHVyYXRpb24pO1xuICB9XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgbGlzdGVuZXIgdG8gY2FjaGUgcm91dGUgaW5mb3JtYXRpb24gZm9yIElOUCBpbnRlcmFjdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVySW5wSW50ZXJhY3Rpb25MaXN0ZW5lcigpIHtcbiAgY29uc3QgaGFuZGxlRW50cmllcyA9ICh7IGVudHJpZXMgfSkgPT4ge1xuICAgIGNvbnN0IGFjdGl2ZVNwYW4gPSBnZXRBY3RpdmVTcGFuKCk7XG4gICAgY29uc3QgYWN0aXZlUm9vdFNwYW4gPSBhY3RpdmVTcGFuICYmIGdldFJvb3RTcGFuKGFjdGl2ZVNwYW4pO1xuXG4gICAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICAgIGlmICghaXNQZXJmb3JtYW5jZUV2ZW50VGltaW5nKGVudHJ5KSB8fCAhYWN0aXZlUm9vdFNwYW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbnRlcmFjdGlvbklkID0gZW50cnkuaW50ZXJhY3Rpb25JZDtcbiAgICAgIGlmIChpbnRlcmFjdGlvbklkID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgaW50ZXJhY3Rpb24gd2FzIGFscmVhZHkgcmVjb3JkZWQgYmVmb3JlLCBub3RoaW5nIG1vcmUgdG8gZG9cbiAgICAgIGlmIChJTlRFUkFDVElPTlNfU1BBTl9NQVAuaGFzKGludGVyYWN0aW9uSWQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gV2Uga2VlcCBtYXguIDEwIGludGVyYWN0aW9ucyBpbiB0aGUgbGlzdCwgdGhlbiByZW1vdmUgdGhlIG9sZGVzdCBvbmUgJiBjbGVhbiB1cFxuICAgICAgaWYgKExBU1RfSU5URVJBQ1RJT05TLmxlbmd0aCA+IDEwKSB7XG4gICAgICAgIGNvbnN0IGxhc3QgPSBMQVNUX0lOVEVSQUNUSU9OUy5zaGlmdCgpIDtcbiAgICAgICAgSU5URVJBQ1RJT05TX1NQQU5fTUFQLmRlbGV0ZShsYXN0KTtcbiAgICAgIH1cblxuICAgICAgLy8gV2UgYWRkIHRoZSBpbnRlcmFjdGlvbiB0byB0aGUgbGlzdCBvZiByZWNvcmRlZCBpbnRlcmFjdGlvbnNcbiAgICAgIC8vIGFuZCBzdG9yZSB0aGUgc3BhbiBmb3IgdGhpcyBpbnRlcmFjdGlvblxuICAgICAgTEFTVF9JTlRFUkFDVElPTlMucHVzaChpbnRlcmFjdGlvbklkKTtcbiAgICAgIElOVEVSQUNUSU9OU19TUEFOX01BUC5zZXQoaW50ZXJhY3Rpb25JZCwgYWN0aXZlUm9vdFNwYW4pO1xuICAgIH0pO1xuICB9O1xuXG4gIGFkZFBlcmZvcm1hbmNlSW5zdHJ1bWVudGF0aW9uSGFuZGxlcignZXZlbnQnLCBoYW5kbGVFbnRyaWVzKTtcbiAgYWRkUGVyZm9ybWFuY2VJbnN0cnVtZW50YXRpb25IYW5kbGVyKCdmaXJzdC1pbnB1dCcsIGhhbmRsZUVudHJpZXMpO1xufVxuXG5leHBvcnQgeyBfb25JbnAsIF90cmFja0lOUCwgcmVnaXN0ZXJJbnBJbnRlcmFjdGlvbkxpc3RlbmVyLCBzdGFydFRyYWNraW5nSU5QIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnAuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/inp.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/instrument.js":
/*!**********************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/instrument.js ***!
  \**********************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   addClsInstrumentationHandler: () => (/* binding */ addClsInstrumentationHandler),\n/* harmony export */   addFidInstrumentationHandler: () => (/* binding */ addFidInstrumentationHandler),\n/* harmony export */   addInpInstrumentationHandler: () => (/* binding */ addInpInstrumentationHandler),\n/* harmony export */   addLcpInstrumentationHandler: () => (/* binding */ addLcpInstrumentationHandler),\n/* harmony export */   addPerformanceInstrumentationHandler: () => (/* binding */ addPerformanceInstrumentationHandler),\n/* harmony export */   addTtfbInstrumentationHandler: () => (/* binding */ addTtfbInstrumentationHandler),\n/* harmony export */   isPerformanceEventTiming: () => (/* binding */ isPerformanceEventTiming)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/debug-build.js\");\n/* harmony import */ var _web_vitals_getCLS_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./web-vitals/getCLS.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getCLS.js\");\n/* harmony import */ var _web_vitals_getFID_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./web-vitals/getFID.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getFID.js\");\n/* harmony import */ var _web_vitals_getINP_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./web-vitals/getINP.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getINP.js\");\n/* harmony import */ var _web_vitals_getLCP_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./web-vitals/getLCP.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getLCP.js\");\n/* harmony import */ var _web_vitals_lib_observe_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./web-vitals/lib/observe.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/observe.js\");\n/* harmony import */ var _web_vitals_onTTFB_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./web-vitals/onTTFB.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/onTTFB.js\");\n\n\n\n\n\n\n\n\n\nconst handlers = {};\nconst instrumented = {};\n\nlet _previousCls;\nlet _previousFid;\nlet _previousLcp;\nlet _previousTtfb;\nlet _previousInp;\n\n/**\n * Add a callback that will be triggered when a CLS metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for CLS when the cleanup callback is called.\n * This will lead to the CLS being finalized and frozen.\n */\nfunction addClsInstrumentationHandler(\n  callback,\n  stopOnCallback = false,\n) {\n  return addMetricObserver('cls', callback, instrumentCls, _previousCls, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a LCP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n *\n * Pass `stopOnCallback = true` to stop listening for LCP when the cleanup callback is called.\n * This will lead to the LCP being finalized and frozen.\n */\nfunction addLcpInstrumentationHandler(\n  callback,\n  stopOnCallback = false,\n) {\n  return addMetricObserver('lcp', callback, instrumentLcp, _previousLcp, stopOnCallback);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addFidInstrumentationHandler(callback) {\n  return addMetricObserver('fid', callback, instrumentFid, _previousFid);\n}\n\n/**\n * Add a callback that will be triggered when a FID metric is available.\n */\nfunction addTtfbInstrumentationHandler(callback) {\n  return addMetricObserver('ttfb', callback, instrumentTtfb, _previousTtfb);\n}\n\n/**\n * Add a callback that will be triggered when a INP metric is available.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addInpInstrumentationHandler(callback) {\n  return addMetricObserver('inp', callback, instrumentInp, _previousInp);\n}\n\n/**\n * Add a callback that will be triggered when a performance observer is triggered,\n * and receives the entries of the observer.\n * Returns a cleanup callback which can be called to remove the instrumentation handler.\n */\nfunction addPerformanceInstrumentationHandler(\n  type,\n  callback,\n) {\n  addHandler(type, callback);\n\n  if (!instrumented[type]) {\n    instrumentPerformanceObserver(type);\n    instrumented[type] = true;\n  }\n\n  return getCleanupCallback(type, callback);\n}\n\n/** Trigger all handlers of a given type. */\nfunction triggerHandlers(type, data) {\n  const typeHandlers = handlers[type];\n\n  if (!typeHandlers?.length) {\n    return;\n  }\n\n  for (const handler of typeHandlers) {\n    try {\n      handler(data);\n    } catch (e) {\n      _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD &&\n        _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.error(\n          `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${(0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getFunctionName)(handler)}\\nError:`,\n          e,\n        );\n    }\n  }\n}\n\nfunction instrumentCls() {\n  return (0,_web_vitals_getCLS_js__WEBPACK_IMPORTED_MODULE_2__.onCLS)(\n    metric => {\n      triggerHandlers('cls', {\n        metric,\n      });\n      _previousCls = metric;\n    },\n    // We want the callback to be called whenever the CLS value updates.\n    // By default, the callback is only called when the tab goes to the background.\n    { reportAllChanges: true },\n  );\n}\n\nfunction instrumentFid() {\n  return (0,_web_vitals_getFID_js__WEBPACK_IMPORTED_MODULE_3__.onFID)(metric => {\n    triggerHandlers('fid', {\n      metric,\n    });\n    _previousFid = metric;\n  });\n}\n\nfunction instrumentLcp() {\n  return (0,_web_vitals_getLCP_js__WEBPACK_IMPORTED_MODULE_5__.onLCP)(\n    metric => {\n      triggerHandlers('lcp', {\n        metric,\n      });\n      _previousLcp = metric;\n    },\n    // We want the callback to be called whenever the LCP value updates.\n    // By default, the callback is only called when the tab goes to the background.\n    { reportAllChanges: true },\n  );\n}\n\nfunction instrumentTtfb() {\n  return (0,_web_vitals_onTTFB_js__WEBPACK_IMPORTED_MODULE_7__.onTTFB)(metric => {\n    triggerHandlers('ttfb', {\n      metric,\n    });\n    _previousTtfb = metric;\n  });\n}\n\nfunction instrumentInp() {\n  return (0,_web_vitals_getINP_js__WEBPACK_IMPORTED_MODULE_4__.onINP)(metric => {\n    triggerHandlers('inp', {\n      metric,\n    });\n    _previousInp = metric;\n  });\n}\n\nfunction addMetricObserver(\n  type,\n  callback,\n  instrumentFn,\n  previousValue,\n  stopOnCallback = false,\n) {\n  addHandler(type, callback);\n\n  let stopListening;\n\n  if (!instrumented[type]) {\n    stopListening = instrumentFn();\n    instrumented[type] = true;\n  }\n\n  if (previousValue) {\n    callback({ metric: previousValue });\n  }\n\n  return getCleanupCallback(type, callback, stopOnCallback ? stopListening : undefined);\n}\n\nfunction instrumentPerformanceObserver(type) {\n  const options = {};\n\n  // Special per-type options we want to use\n  if (type === 'event') {\n    options.durationThreshold = 0;\n  }\n\n  (0,_web_vitals_lib_observe_js__WEBPACK_IMPORTED_MODULE_6__.observe)(\n    type,\n    entries => {\n      triggerHandlers(type, { entries });\n    },\n    options,\n  );\n}\n\nfunction addHandler(type, handler) {\n  handlers[type] = handlers[type] || [];\n  (handlers[type] ).push(handler);\n}\n\n// Get a callback which can be called to remove the instrumentation handler\nfunction getCleanupCallback(\n  type,\n  callback,\n  stopListening,\n) {\n  return () => {\n    if (stopListening) {\n      stopListening();\n    }\n\n    const typeHandlers = handlers[type];\n\n    if (!typeHandlers) {\n      return;\n    }\n\n    const index = typeHandlers.indexOf(callback);\n    if (index !== -1) {\n      typeHandlers.splice(index, 1);\n    }\n  };\n}\n\n/**\n * Check if a PerformanceEntry is a PerformanceEventTiming by checking for the `duration` property.\n */\nfunction isPerformanceEventTiming(entry) {\n  return 'duration' in entry;\n}\n\n\n//# sourceMappingURL=instrument.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3MvaW5zdHJ1bWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBc0Q7QUFDTjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDTjs7QUFFaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLE1BQU0sd0RBQVc7QUFDakIsUUFBUSwrQ0FBSztBQUNiLG9FQUFvRSxLQUFLLFVBQVUsNkRBQWUsVUFBVTtBQUM1RztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUyw0REFBSztBQUNkO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsTUFBTSx3QkFBd0I7QUFDOUI7QUFDQTs7QUFFQTtBQUNBLFNBQVMsNERBQUs7QUFDZDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsU0FBUyw0REFBSztBQUNkO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsTUFBTSx3QkFBd0I7QUFDOUI7QUFDQTs7QUFFQTtBQUNBLFNBQVMsNkRBQU07QUFDZjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsU0FBUyw0REFBSztBQUNkO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsdUJBQXVCO0FBQ3RDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLG1FQUFPO0FBQ1Q7QUFDQTtBQUNBLDhCQUE4QixTQUFTO0FBQ3ZDLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWlPO0FBQ2pPIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vbWV0cmljcy9pbnN0cnVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlYnVnLCBnZXRGdW5jdGlvbk5hbWUgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBvbkNMUyB9IGZyb20gJy4vd2ViLXZpdGFscy9nZXRDTFMuanMnO1xuaW1wb3J0IHsgb25GSUQgfSBmcm9tICcuL3dlYi12aXRhbHMvZ2V0RklELmpzJztcbmltcG9ydCB7IG9uSU5QIH0gZnJvbSAnLi93ZWItdml0YWxzL2dldElOUC5qcyc7XG5pbXBvcnQgeyBvbkxDUCB9IGZyb20gJy4vd2ViLXZpdGFscy9nZXRMQ1AuanMnO1xuaW1wb3J0IHsgb2JzZXJ2ZSB9IGZyb20gJy4vd2ViLXZpdGFscy9saWIvb2JzZXJ2ZS5qcyc7XG5pbXBvcnQgeyBvblRURkIgfSBmcm9tICcuL3dlYi12aXRhbHMvb25UVEZCLmpzJztcblxuY29uc3QgaGFuZGxlcnMgPSB7fTtcbmNvbnN0IGluc3RydW1lbnRlZCA9IHt9O1xuXG5sZXQgX3ByZXZpb3VzQ2xzO1xubGV0IF9wcmV2aW91c0ZpZDtcbmxldCBfcHJldmlvdXNMY3A7XG5sZXQgX3ByZXZpb3VzVHRmYjtcbmxldCBfcHJldmlvdXNJbnA7XG5cbi8qKlxuICogQWRkIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIGEgQ0xTIG1ldHJpYyBpcyBhdmFpbGFibGUuXG4gKiBSZXR1cm5zIGEgY2xlYW51cCBjYWxsYmFjayB3aGljaCBjYW4gYmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgaW5zdHJ1bWVudGF0aW9uIGhhbmRsZXIuXG4gKlxuICogUGFzcyBgc3RvcE9uQ2FsbGJhY2sgPSB0cnVlYCB0byBzdG9wIGxpc3RlbmluZyBmb3IgQ0xTIHdoZW4gdGhlIGNsZWFudXAgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICogVGhpcyB3aWxsIGxlYWQgdG8gdGhlIENMUyBiZWluZyBmaW5hbGl6ZWQgYW5kIGZyb3plbi5cbiAqL1xuZnVuY3Rpb24gYWRkQ2xzSW5zdHJ1bWVudGF0aW9uSGFuZGxlcihcbiAgY2FsbGJhY2ssXG4gIHN0b3BPbkNhbGxiYWNrID0gZmFsc2UsXG4pIHtcbiAgcmV0dXJuIGFkZE1ldHJpY09ic2VydmVyKCdjbHMnLCBjYWxsYmFjaywgaW5zdHJ1bWVudENscywgX3ByZXZpb3VzQ2xzLCBzdG9wT25DYWxsYmFjayk7XG59XG5cbi8qKlxuICogQWRkIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIGEgTENQIG1ldHJpYyBpcyBhdmFpbGFibGUuXG4gKiBSZXR1cm5zIGEgY2xlYW51cCBjYWxsYmFjayB3aGljaCBjYW4gYmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgaW5zdHJ1bWVudGF0aW9uIGhhbmRsZXIuXG4gKlxuICogUGFzcyBgc3RvcE9uQ2FsbGJhY2sgPSB0cnVlYCB0byBzdG9wIGxpc3RlbmluZyBmb3IgTENQIHdoZW4gdGhlIGNsZWFudXAgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICogVGhpcyB3aWxsIGxlYWQgdG8gdGhlIExDUCBiZWluZyBmaW5hbGl6ZWQgYW5kIGZyb3plbi5cbiAqL1xuZnVuY3Rpb24gYWRkTGNwSW5zdHJ1bWVudGF0aW9uSGFuZGxlcihcbiAgY2FsbGJhY2ssXG4gIHN0b3BPbkNhbGxiYWNrID0gZmFsc2UsXG4pIHtcbiAgcmV0dXJuIGFkZE1ldHJpY09ic2VydmVyKCdsY3AnLCBjYWxsYmFjaywgaW5zdHJ1bWVudExjcCwgX3ByZXZpb3VzTGNwLCBzdG9wT25DYWxsYmFjayk7XG59XG5cbi8qKlxuICogQWRkIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIGEgRklEIG1ldHJpYyBpcyBhdmFpbGFibGUuXG4gKiBSZXR1cm5zIGEgY2xlYW51cCBjYWxsYmFjayB3aGljaCBjYW4gYmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgaW5zdHJ1bWVudGF0aW9uIGhhbmRsZXIuXG4gKi9cbmZ1bmN0aW9uIGFkZEZpZEluc3RydW1lbnRhdGlvbkhhbmRsZXIoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGFkZE1ldHJpY09ic2VydmVyKCdmaWQnLCBjYWxsYmFjaywgaW5zdHJ1bWVudEZpZCwgX3ByZXZpb3VzRmlkKTtcbn1cblxuLyoqXG4gKiBBZGQgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gYSBGSUQgbWV0cmljIGlzIGF2YWlsYWJsZS5cbiAqL1xuZnVuY3Rpb24gYWRkVHRmYkluc3RydW1lbnRhdGlvbkhhbmRsZXIoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGFkZE1ldHJpY09ic2VydmVyKCd0dGZiJywgY2FsbGJhY2ssIGluc3RydW1lbnRUdGZiLCBfcHJldmlvdXNUdGZiKTtcbn1cblxuLyoqXG4gKiBBZGQgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gYSBJTlAgbWV0cmljIGlzIGF2YWlsYWJsZS5cbiAqIFJldHVybnMgYSBjbGVhbnVwIGNhbGxiYWNrIHdoaWNoIGNhbiBiZSBjYWxsZWQgdG8gcmVtb3ZlIHRoZSBpbnN0cnVtZW50YXRpb24gaGFuZGxlci5cbiAqL1xuZnVuY3Rpb24gYWRkSW5wSW5zdHJ1bWVudGF0aW9uSGFuZGxlcihjYWxsYmFjaykge1xuICByZXR1cm4gYWRkTWV0cmljT2JzZXJ2ZXIoJ2lucCcsIGNhbGxiYWNrLCBpbnN0cnVtZW50SW5wLCBfcHJldmlvdXNJbnApO1xufVxuXG4vKipcbiAqIEFkZCBhIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiBhIHBlcmZvcm1hbmNlIG9ic2VydmVyIGlzIHRyaWdnZXJlZCxcbiAqIGFuZCByZWNlaXZlcyB0aGUgZW50cmllcyBvZiB0aGUgb2JzZXJ2ZXIuXG4gKiBSZXR1cm5zIGEgY2xlYW51cCBjYWxsYmFjayB3aGljaCBjYW4gYmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgaW5zdHJ1bWVudGF0aW9uIGhhbmRsZXIuXG4gKi9cbmZ1bmN0aW9uIGFkZFBlcmZvcm1hbmNlSW5zdHJ1bWVudGF0aW9uSGFuZGxlcihcbiAgdHlwZSxcbiAgY2FsbGJhY2ssXG4pIHtcbiAgYWRkSGFuZGxlcih0eXBlLCBjYWxsYmFjayk7XG5cbiAgaWYgKCFpbnN0cnVtZW50ZWRbdHlwZV0pIHtcbiAgICBpbnN0cnVtZW50UGVyZm9ybWFuY2VPYnNlcnZlcih0eXBlKTtcbiAgICBpbnN0cnVtZW50ZWRbdHlwZV0gPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGdldENsZWFudXBDYWxsYmFjayh0eXBlLCBjYWxsYmFjayk7XG59XG5cbi8qKiBUcmlnZ2VyIGFsbCBoYW5kbGVycyBvZiBhIGdpdmVuIHR5cGUuICovXG5mdW5jdGlvbiB0cmlnZ2VySGFuZGxlcnModHlwZSwgZGF0YSkge1xuICBjb25zdCB0eXBlSGFuZGxlcnMgPSBoYW5kbGVyc1t0eXBlXTtcblxuICBpZiAoIXR5cGVIYW5kbGVycz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHR5cGVIYW5kbGVycykge1xuICAgIHRyeSB7XG4gICAgICBoYW5kbGVyKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIERFQlVHX0JVSUxEICYmXG4gICAgICAgIGRlYnVnLmVycm9yKFxuICAgICAgICAgIGBFcnJvciB3aGlsZSB0cmlnZ2VyaW5nIGluc3RydW1lbnRhdGlvbiBoYW5kbGVyLlxcblR5cGU6ICR7dHlwZX1cXG5OYW1lOiAke2dldEZ1bmN0aW9uTmFtZShoYW5kbGVyKX1cXG5FcnJvcjpgLFxuICAgICAgICAgIGUsXG4gICAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluc3RydW1lbnRDbHMoKSB7XG4gIHJldHVybiBvbkNMUyhcbiAgICBtZXRyaWMgPT4ge1xuICAgICAgdHJpZ2dlckhhbmRsZXJzKCdjbHMnLCB7XG4gICAgICAgIG1ldHJpYyxcbiAgICAgIH0pO1xuICAgICAgX3ByZXZpb3VzQ2xzID0gbWV0cmljO1xuICAgIH0sXG4gICAgLy8gV2Ugd2FudCB0aGUgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBDTFMgdmFsdWUgdXBkYXRlcy5cbiAgICAvLyBCeSBkZWZhdWx0LCB0aGUgY2FsbGJhY2sgaXMgb25seSBjYWxsZWQgd2hlbiB0aGUgdGFiIGdvZXMgdG8gdGhlIGJhY2tncm91bmQuXG4gICAgeyByZXBvcnRBbGxDaGFuZ2VzOiB0cnVlIH0sXG4gICk7XG59XG5cbmZ1bmN0aW9uIGluc3RydW1lbnRGaWQoKSB7XG4gIHJldHVybiBvbkZJRChtZXRyaWMgPT4ge1xuICAgIHRyaWdnZXJIYW5kbGVycygnZmlkJywge1xuICAgICAgbWV0cmljLFxuICAgIH0pO1xuICAgIF9wcmV2aW91c0ZpZCA9IG1ldHJpYztcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGluc3RydW1lbnRMY3AoKSB7XG4gIHJldHVybiBvbkxDUChcbiAgICBtZXRyaWMgPT4ge1xuICAgICAgdHJpZ2dlckhhbmRsZXJzKCdsY3AnLCB7XG4gICAgICAgIG1ldHJpYyxcbiAgICAgIH0pO1xuICAgICAgX3ByZXZpb3VzTGNwID0gbWV0cmljO1xuICAgIH0sXG4gICAgLy8gV2Ugd2FudCB0aGUgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBMQ1AgdmFsdWUgdXBkYXRlcy5cbiAgICAvLyBCeSBkZWZhdWx0LCB0aGUgY2FsbGJhY2sgaXMgb25seSBjYWxsZWQgd2hlbiB0aGUgdGFiIGdvZXMgdG8gdGhlIGJhY2tncm91bmQuXG4gICAgeyByZXBvcnRBbGxDaGFuZ2VzOiB0cnVlIH0sXG4gICk7XG59XG5cbmZ1bmN0aW9uIGluc3RydW1lbnRUdGZiKCkge1xuICByZXR1cm4gb25UVEZCKG1ldHJpYyA9PiB7XG4gICAgdHJpZ2dlckhhbmRsZXJzKCd0dGZiJywge1xuICAgICAgbWV0cmljLFxuICAgIH0pO1xuICAgIF9wcmV2aW91c1R0ZmIgPSBtZXRyaWM7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnN0cnVtZW50SW5wKCkge1xuICByZXR1cm4gb25JTlAobWV0cmljID0+IHtcbiAgICB0cmlnZ2VySGFuZGxlcnMoJ2lucCcsIHtcbiAgICAgIG1ldHJpYyxcbiAgICB9KTtcbiAgICBfcHJldmlvdXNJbnAgPSBtZXRyaWM7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRNZXRyaWNPYnNlcnZlcihcbiAgdHlwZSxcbiAgY2FsbGJhY2ssXG4gIGluc3RydW1lbnRGbixcbiAgcHJldmlvdXNWYWx1ZSxcbiAgc3RvcE9uQ2FsbGJhY2sgPSBmYWxzZSxcbikge1xuICBhZGRIYW5kbGVyKHR5cGUsIGNhbGxiYWNrKTtcblxuICBsZXQgc3RvcExpc3RlbmluZztcblxuICBpZiAoIWluc3RydW1lbnRlZFt0eXBlXSkge1xuICAgIHN0b3BMaXN0ZW5pbmcgPSBpbnN0cnVtZW50Rm4oKTtcbiAgICBpbnN0cnVtZW50ZWRbdHlwZV0gPSB0cnVlO1xuICB9XG5cbiAgaWYgKHByZXZpb3VzVmFsdWUpIHtcbiAgICBjYWxsYmFjayh7IG1ldHJpYzogcHJldmlvdXNWYWx1ZSB9KTtcbiAgfVxuXG4gIHJldHVybiBnZXRDbGVhbnVwQ2FsbGJhY2sodHlwZSwgY2FsbGJhY2ssIHN0b3BPbkNhbGxiYWNrID8gc3RvcExpc3RlbmluZyA6IHVuZGVmaW5lZCk7XG59XG5cbmZ1bmN0aW9uIGluc3RydW1lbnRQZXJmb3JtYW5jZU9ic2VydmVyKHR5cGUpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gIC8vIFNwZWNpYWwgcGVyLXR5cGUgb3B0aW9ucyB3ZSB3YW50IHRvIHVzZVxuICBpZiAodHlwZSA9PT0gJ2V2ZW50Jykge1xuICAgIG9wdGlvbnMuZHVyYXRpb25UaHJlc2hvbGQgPSAwO1xuICB9XG5cbiAgb2JzZXJ2ZShcbiAgICB0eXBlLFxuICAgIGVudHJpZXMgPT4ge1xuICAgICAgdHJpZ2dlckhhbmRsZXJzKHR5cGUsIHsgZW50cmllcyB9KTtcbiAgICB9LFxuICAgIG9wdGlvbnMsXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFkZEhhbmRsZXIodHlwZSwgaGFuZGxlcikge1xuICBoYW5kbGVyc1t0eXBlXSA9IGhhbmRsZXJzW3R5cGVdIHx8IFtdO1xuICAoaGFuZGxlcnNbdHlwZV0gKS5wdXNoKGhhbmRsZXIpO1xufVxuXG4vLyBHZXQgYSBjYWxsYmFjayB3aGljaCBjYW4gYmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgaW5zdHJ1bWVudGF0aW9uIGhhbmRsZXJcbmZ1bmN0aW9uIGdldENsZWFudXBDYWxsYmFjayhcbiAgdHlwZSxcbiAgY2FsbGJhY2ssXG4gIHN0b3BMaXN0ZW5pbmcsXG4pIHtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAoc3RvcExpc3RlbmluZykge1xuICAgICAgc3RvcExpc3RlbmluZygpO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVIYW5kbGVycyA9IGhhbmRsZXJzW3R5cGVdO1xuXG4gICAgaWYgKCF0eXBlSGFuZGxlcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHR5cGVIYW5kbGVycy5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0eXBlSGFuZGxlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBQZXJmb3JtYW5jZUVudHJ5IGlzIGEgUGVyZm9ybWFuY2VFdmVudFRpbWluZyBieSBjaGVja2luZyBmb3IgdGhlIGBkdXJhdGlvbmAgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGlzUGVyZm9ybWFuY2VFdmVudFRpbWluZyhlbnRyeSkge1xuICByZXR1cm4gJ2R1cmF0aW9uJyBpbiBlbnRyeTtcbn1cblxuZXhwb3J0IHsgYWRkQ2xzSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgYWRkRmlkSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgYWRkSW5wSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgYWRkTGNwSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgYWRkUGVyZm9ybWFuY2VJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBhZGRUdGZiSW5zdHJ1bWVudGF0aW9uSGFuZGxlciwgaXNQZXJmb3JtYW5jZUV2ZW50VGltaW5nIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnN0cnVtZW50LmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/instrument.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/lcp.js":
/*!***************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/lcp.js ***!
  \***************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   _sendStandaloneLcpSpan: () => (/* binding */ _sendStandaloneLcpSpan),\n/* harmony export */   trackLcpAsStandaloneSpan: () => (/* binding */ trackLcpAsStandaloneSpan)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/debug-build.js\");\n/* harmony import */ var _instrument_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./instrument.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/instrument.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/utils.js\");\n\n\n\n\n\n/**\n * Starts tracking the Largest Contentful Paint on the current page and collects the value once\n *\n * - the page visibility is hidden\n * - a navigation span is started (to stop LCP measurement for SPA soft navigations)\n *\n * Once either of these events triggers, the LCP value is sent as a standalone span and we stop\n * measuring LCP for subsequent routes.\n */\nfunction trackLcpAsStandaloneSpan(client) {\n  let standaloneLcpValue = 0;\n  let standaloneLcpEntry;\n\n  if (!(0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.supportsWebVital)('largest-contentful-paint')) {\n    return;\n  }\n\n  const cleanupLcpHandler = (0,_instrument_js__WEBPACK_IMPORTED_MODULE_2__.addLcpInstrumentationHandler)(({ metric }) => {\n    const entry = metric.entries[metric.entries.length - 1] ;\n    if (!entry) {\n      return;\n    }\n    standaloneLcpValue = metric.value;\n    standaloneLcpEntry = entry;\n  }, true);\n\n  (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.listenForWebVitalReportEvents)(client, (reportEvent, pageloadSpanId) => {\n    _sendStandaloneLcpSpan(standaloneLcpValue, standaloneLcpEntry, pageloadSpanId, reportEvent);\n    cleanupLcpHandler();\n  });\n}\n\n/**\n * Exported only for testing!\n */\nfunction _sendStandaloneLcpSpan(\n  lcpValue,\n  entry,\n  pageloadSpanId,\n  reportEvent,\n) {\n  _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log(`Sending LCP span (${lcpValue})`);\n\n  const startTime = (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.msToSec)(((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.browserPerformanceTimeOrigin)() || 0) + (entry?.startTime || 0));\n  const routeName = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)().getScopeData().transactionName;\n\n  const name = entry ? (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.htmlTreeAsString)(entry.element) : 'Largest contentful paint';\n\n  const attributes = {\n    [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.browser.lcp',\n    [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'ui.webvital.lcp',\n    [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME]: 0, // LCP is a point-in-time metric\n    // attach the pageload span id to the LCP span so that we can link them in the UI\n    'sentry.pageload.span_id': pageloadSpanId,\n    // describes what triggered the web vital to be reported\n    'sentry.report_event': reportEvent,\n  };\n\n  if (entry) {\n    entry.element && (attributes['lcp.element'] = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.htmlTreeAsString)(entry.element));\n    entry.id && (attributes['lcp.id'] = entry.id);\n\n    // Trim URL to the first 200 characters.\n    entry.url && (attributes['lcp.url'] = entry.url.trim().slice(0, 200));\n\n    // loadTime is the time of LCP that's related to receiving the LCP element response..\n    entry.loadTime != null && (attributes['lcp.loadTime'] = entry.loadTime);\n\n    // renderTime is loadTime + rendering time\n    // it's 0 if the LCP element is loaded from a 3rd party origin that doesn't send the\n    // `Timing-Allow-Origin` header.\n    entry.renderTime != null && (attributes['lcp.renderTime'] = entry.renderTime);\n\n    entry.size != null && (attributes['lcp.size'] = entry.size);\n  }\n\n  const span = (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.startStandaloneWebVitalSpan)({\n    name,\n    transaction: routeName,\n    attributes,\n    startTime,\n  });\n\n  if (span) {\n    span.addEvent('lcp', {\n      [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT]: 'millisecond',\n      [_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE]: lcpValue,\n    });\n\n    // LCP is a point-in-time metric, so we end the span immediately\n    span.end(startTime);\n  }\n}\n\n\n//# sourceMappingURL=lcp.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3MvbGNwLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFrUztBQUNsUDtBQUNlO0FBQ29EOztBQUVuSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTywyREFBZ0I7QUFDdkI7QUFDQTs7QUFFQSw0QkFBNEIsNEVBQTRCLElBQUksUUFBUTtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILEVBQUUsd0VBQTZCO0FBQy9CO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSx3REFBVyxJQUFJLCtDQUFLLDBCQUEwQixTQUFTOztBQUV6RCxvQkFBb0Isa0RBQU8sRUFBRSwwRUFBNEI7QUFDekQsb0JBQW9CLDZEQUFlOztBQUVuQyx1QkFBdUIsOERBQWdCOztBQUV2QztBQUNBLEtBQUssMEVBQWdDO0FBQ3JDLEtBQUssc0VBQTRCO0FBQ2pDLEtBQUssMkVBQWlDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrREFBa0QsOERBQWdCO0FBQ2xFOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGVBQWUsc0VBQTJCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsT0FBTyxvRkFBMEM7QUFDakQsT0FBTyxxRkFBMkM7QUFDbEQsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFNEQ7QUFDNUQiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeS1pbnRlcm5hbCticm93c2VyLXV0aWxzQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC9icm93c2VyLXV0aWxzL2J1aWxkL2VzbS9tZXRyaWNzL2xjcC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWJ1ZywgYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiwgZ2V0Q3VycmVudFNjb3BlLCBodG1sVHJlZUFzU3RyaW5nLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX01FQVNVUkVNRU5UX1ZBTFVFLCBTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX01FQVNVUkVNRU5UX1VOSVQsIFNFTUFOVElDX0FUVFJJQlVURV9FWENMVVNJVkVfVElNRSwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUCwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU4gfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuLi9kZWJ1Zy1idWlsZC5qcyc7XG5pbXBvcnQgeyBhZGRMY3BJbnN0cnVtZW50YXRpb25IYW5kbGVyIH0gZnJvbSAnLi9pbnN0cnVtZW50LmpzJztcbmltcG9ydCB7IHN1cHBvcnRzV2ViVml0YWwsIGxpc3RlbkZvcldlYlZpdGFsUmVwb3J0RXZlbnRzLCBtc1RvU2VjLCBzdGFydFN0YW5kYWxvbmVXZWJWaXRhbFNwYW4gfSBmcm9tICcuL3V0aWxzLmpzJztcblxuLyoqXG4gKiBTdGFydHMgdHJhY2tpbmcgdGhlIExhcmdlc3QgQ29udGVudGZ1bCBQYWludCBvbiB0aGUgY3VycmVudCBwYWdlIGFuZCBjb2xsZWN0cyB0aGUgdmFsdWUgb25jZVxuICpcbiAqIC0gdGhlIHBhZ2UgdmlzaWJpbGl0eSBpcyBoaWRkZW5cbiAqIC0gYSBuYXZpZ2F0aW9uIHNwYW4gaXMgc3RhcnRlZCAodG8gc3RvcCBMQ1AgbWVhc3VyZW1lbnQgZm9yIFNQQSBzb2Z0IG5hdmlnYXRpb25zKVxuICpcbiAqIE9uY2UgZWl0aGVyIG9mIHRoZXNlIGV2ZW50cyB0cmlnZ2VycywgdGhlIExDUCB2YWx1ZSBpcyBzZW50IGFzIGEgc3RhbmRhbG9uZSBzcGFuIGFuZCB3ZSBzdG9wXG4gKiBtZWFzdXJpbmcgTENQIGZvciBzdWJzZXF1ZW50IHJvdXRlcy5cbiAqL1xuZnVuY3Rpb24gdHJhY2tMY3BBc1N0YW5kYWxvbmVTcGFuKGNsaWVudCkge1xuICBsZXQgc3RhbmRhbG9uZUxjcFZhbHVlID0gMDtcbiAgbGV0IHN0YW5kYWxvbmVMY3BFbnRyeTtcblxuICBpZiAoIXN1cHBvcnRzV2ViVml0YWwoJ2xhcmdlc3QtY29udGVudGZ1bC1wYWludCcpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY2xlYW51cExjcEhhbmRsZXIgPSBhZGRMY3BJbnN0cnVtZW50YXRpb25IYW5kbGVyKCh7IG1ldHJpYyB9KSA9PiB7XG4gICAgY29uc3QgZW50cnkgPSBtZXRyaWMuZW50cmllc1ttZXRyaWMuZW50cmllcy5sZW5ndGggLSAxXSA7XG4gICAgaWYgKCFlbnRyeSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdGFuZGFsb25lTGNwVmFsdWUgPSBtZXRyaWMudmFsdWU7XG4gICAgc3RhbmRhbG9uZUxjcEVudHJ5ID0gZW50cnk7XG4gIH0sIHRydWUpO1xuXG4gIGxpc3RlbkZvcldlYlZpdGFsUmVwb3J0RXZlbnRzKGNsaWVudCwgKHJlcG9ydEV2ZW50LCBwYWdlbG9hZFNwYW5JZCkgPT4ge1xuICAgIF9zZW5kU3RhbmRhbG9uZUxjcFNwYW4oc3RhbmRhbG9uZUxjcFZhbHVlLCBzdGFuZGFsb25lTGNwRW50cnksIHBhZ2Vsb2FkU3BhbklkLCByZXBvcnRFdmVudCk7XG4gICAgY2xlYW51cExjcEhhbmRsZXIoKTtcbiAgfSk7XG59XG5cbi8qKlxuICogRXhwb3J0ZWQgb25seSBmb3IgdGVzdGluZyFcbiAqL1xuZnVuY3Rpb24gX3NlbmRTdGFuZGFsb25lTGNwU3BhbihcbiAgbGNwVmFsdWUsXG4gIGVudHJ5LFxuICBwYWdlbG9hZFNwYW5JZCxcbiAgcmVwb3J0RXZlbnQsXG4pIHtcbiAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKGBTZW5kaW5nIExDUCBzcGFuICgke2xjcFZhbHVlfSlgKTtcblxuICBjb25zdCBzdGFydFRpbWUgPSBtc1RvU2VjKChicm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luKCkgfHwgMCkgKyAoZW50cnk/LnN0YXJ0VGltZSB8fCAwKSk7XG4gIGNvbnN0IHJvdXRlTmFtZSA9IGdldEN1cnJlbnRTY29wZSgpLmdldFNjb3BlRGF0YSgpLnRyYW5zYWN0aW9uTmFtZTtcblxuICBjb25zdCBuYW1lID0gZW50cnkgPyBodG1sVHJlZUFzU3RyaW5nKGVudHJ5LmVsZW1lbnQpIDogJ0xhcmdlc3QgY29udGVudGZ1bCBwYWludCc7XG5cbiAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUklHSU5dOiAnYXV0by5odHRwLmJyb3dzZXIubGNwJyxcbiAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9PUF06ICd1aS53ZWJ2aXRhbC5sY3AnLFxuICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfRVhDTFVTSVZFX1RJTUVdOiAwLCAvLyBMQ1AgaXMgYSBwb2ludC1pbi10aW1lIG1ldHJpY1xuICAgIC8vIGF0dGFjaCB0aGUgcGFnZWxvYWQgc3BhbiBpZCB0byB0aGUgTENQIHNwYW4gc28gdGhhdCB3ZSBjYW4gbGluayB0aGVtIGluIHRoZSBVSVxuICAgICdzZW50cnkucGFnZWxvYWQuc3Bhbl9pZCc6IHBhZ2Vsb2FkU3BhbklkLFxuICAgIC8vIGRlc2NyaWJlcyB3aGF0IHRyaWdnZXJlZCB0aGUgd2ViIHZpdGFsIHRvIGJlIHJlcG9ydGVkXG4gICAgJ3NlbnRyeS5yZXBvcnRfZXZlbnQnOiByZXBvcnRFdmVudCxcbiAgfTtcblxuICBpZiAoZW50cnkpIHtcbiAgICBlbnRyeS5lbGVtZW50ICYmIChhdHRyaWJ1dGVzWydsY3AuZWxlbWVudCddID0gaHRtbFRyZWVBc1N0cmluZyhlbnRyeS5lbGVtZW50KSk7XG4gICAgZW50cnkuaWQgJiYgKGF0dHJpYnV0ZXNbJ2xjcC5pZCddID0gZW50cnkuaWQpO1xuXG4gICAgLy8gVHJpbSBVUkwgdG8gdGhlIGZpcnN0IDIwMCBjaGFyYWN0ZXJzLlxuICAgIGVudHJ5LnVybCAmJiAoYXR0cmlidXRlc1snbGNwLnVybCddID0gZW50cnkudXJsLnRyaW0oKS5zbGljZSgwLCAyMDApKTtcblxuICAgIC8vIGxvYWRUaW1lIGlzIHRoZSB0aW1lIG9mIExDUCB0aGF0J3MgcmVsYXRlZCB0byByZWNlaXZpbmcgdGhlIExDUCBlbGVtZW50IHJlc3BvbnNlLi5cbiAgICBlbnRyeS5sb2FkVGltZSAhPSBudWxsICYmIChhdHRyaWJ1dGVzWydsY3AubG9hZFRpbWUnXSA9IGVudHJ5LmxvYWRUaW1lKTtcblxuICAgIC8vIHJlbmRlclRpbWUgaXMgbG9hZFRpbWUgKyByZW5kZXJpbmcgdGltZVxuICAgIC8vIGl0J3MgMCBpZiB0aGUgTENQIGVsZW1lbnQgaXMgbG9hZGVkIGZyb20gYSAzcmQgcGFydHkgb3JpZ2luIHRoYXQgZG9lc24ndCBzZW5kIHRoZVxuICAgIC8vIGBUaW1pbmctQWxsb3ctT3JpZ2luYCBoZWFkZXIuXG4gICAgZW50cnkucmVuZGVyVGltZSAhPSBudWxsICYmIChhdHRyaWJ1dGVzWydsY3AucmVuZGVyVGltZSddID0gZW50cnkucmVuZGVyVGltZSk7XG5cbiAgICBlbnRyeS5zaXplICE9IG51bGwgJiYgKGF0dHJpYnV0ZXNbJ2xjcC5zaXplJ10gPSBlbnRyeS5zaXplKTtcbiAgfVxuXG4gIGNvbnN0IHNwYW4gPSBzdGFydFN0YW5kYWxvbmVXZWJWaXRhbFNwYW4oe1xuICAgIG5hbWUsXG4gICAgdHJhbnNhY3Rpb246IHJvdXRlTmFtZSxcbiAgICBhdHRyaWJ1dGVzLFxuICAgIHN0YXJ0VGltZSxcbiAgfSk7XG5cbiAgaWYgKHNwYW4pIHtcbiAgICBzcGFuLmFkZEV2ZW50KCdsY3AnLCB7XG4gICAgICBbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9NRUFTVVJFTUVOVF9VTklUXTogJ21pbGxpc2Vjb25kJyxcbiAgICAgIFtTRU1BTlRJQ19BVFRSSUJVVEVfU0VOVFJZX01FQVNVUkVNRU5UX1ZBTFVFXTogbGNwVmFsdWUsXG4gICAgfSk7XG5cbiAgICAvLyBMQ1AgaXMgYSBwb2ludC1pbi10aW1lIG1ldHJpYywgc28gd2UgZW5kIHRoZSBzcGFuIGltbWVkaWF0ZWx5XG4gICAgc3Bhbi5lbmQoc3RhcnRUaW1lKTtcbiAgfVxufVxuXG5leHBvcnQgeyBfc2VuZFN0YW5kYWxvbmVMY3BTcGFuLCB0cmFja0xjcEFzU3RhbmRhbG9uZVNwYW4gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxjcC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/lcp.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/utils.js":
/*!*****************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/utils.js ***!
  \*****************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   extractNetworkProtocol: () => (/* binding */ extractNetworkProtocol),\n/* harmony export */   getBrowserPerformanceAPI: () => (/* binding */ getBrowserPerformanceAPI),\n/* harmony export */   isMeasurementValue: () => (/* binding */ isMeasurementValue),\n/* harmony export */   listenForWebVitalReportEvents: () => (/* binding */ listenForWebVitalReportEvents),\n/* harmony export */   msToSec: () => (/* binding */ msToSec),\n/* harmony export */   startAndEndSpan: () => (/* binding */ startAndEndSpan),\n/* harmony export */   startStandaloneWebVitalSpan: () => (/* binding */ startStandaloneWebVitalSpan),\n/* harmony export */   supportsWebVital: () => (/* binding */ supportsWebVital)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../types.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/types.js\");\n/* harmony import */ var _web_vitals_lib_onHidden_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./web-vitals/lib/onHidden.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/onHidden.js\");\n\n\n\n\n/**\n * Checks if a given value is a valid measurement value.\n */\nfunction isMeasurementValue(value) {\n  return typeof value === 'number' && isFinite(value);\n}\n\n/**\n * Helper function to start child on transactions. This function will make sure that the transaction will\n * use the start timestamp of the created child span if it is earlier than the transactions actual\n * start timestamp.\n */\nfunction startAndEndSpan(\n  parentSpan,\n  startTimeInSeconds,\n  endTime,\n  { ...ctx },\n) {\n  const parentStartTime = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(parentSpan).start_timestamp;\n  if (parentStartTime && parentStartTime > startTimeInSeconds) {\n    // We can only do this for SentrySpans...\n    if (typeof (parentSpan ).updateStartTime === 'function') {\n      (parentSpan ).updateStartTime(startTimeInSeconds);\n    }\n  }\n\n  // The return value only exists for tests\n  return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.withActiveSpan)(parentSpan, () => {\n    const span = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.startInactiveSpan)({\n      startTime: startTimeInSeconds,\n      ...ctx,\n    });\n\n    if (span) {\n      span.end(endTime);\n    }\n\n    return span;\n  });\n}\n\n/**\n * Starts an inactive, standalone span used to send web vital values to Sentry.\n * DO NOT use this for arbitrary spans, as these spans require special handling\n * during ingestion to extract metrics.\n *\n * This function adds a bunch of attributes and data to the span that's shared\n * by all web vital standalone spans. However, you need to take care of adding\n * the actual web vital value as an event to the span. Also, you need to assign\n * a transaction name and some other values that are specific to the web vital.\n *\n * Ultimately, you also need to take care of ending the span to send it off.\n *\n * @param options\n *\n * @returns an inactive, standalone and NOT YET ended span\n */\nfunction startStandaloneWebVitalSpan(options) {\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  if (!client) {\n    return;\n  }\n\n  const { name, transaction, attributes: passedAttributes, startTime } = options;\n\n  const { release, environment, sendDefaultPii } = client.getOptions();\n  // We need to get the replay, user, and activeTransaction from the current scope\n  // so that we can associate replay id, profile id, and a user display to the span\n  const replay = client.getIntegrationByName('Replay');\n  const replayId = replay?.getReplayId();\n\n  const scope = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n\n  const user = scope.getUser();\n  const userDisplay = user !== undefined ? user.email || user.id || user.ip_address : undefined;\n\n  let profileId;\n  try {\n    // @ts-expect-error skip optional chaining to save bundle size with try catch\n    profileId = scope.getScopeData().contexts.profile.profile_id;\n  } catch {\n    // do nothing\n  }\n\n  const attributes = {\n    release,\n    environment,\n\n    user: userDisplay || undefined,\n    profile_id: profileId || undefined,\n    replay_id: replayId || undefined,\n\n    transaction,\n\n    // Web vital score calculation relies on the user agent to account for different\n    // browsers setting different thresholds for what is considered a good/meh/bad value.\n    // For example: Chrome vs. Chrome Mobile\n    'user_agent.original': _types_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.navigator?.userAgent,\n\n    // This tells Sentry to infer the IP address from the request\n    'client.address': sendDefaultPii ? '{{auto}}' : undefined,\n\n    ...passedAttributes,\n  };\n\n  return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.startInactiveSpan)({\n    name,\n    attributes,\n    startTime,\n    experimental: {\n      standalone: true,\n    },\n  });\n}\n\n/** Get the browser performance API. */\nfunction getBrowserPerformanceAPI() {\n  // @ts-expect-error we want to make sure all of these are available, even if TS is sure they are\n  return _types_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.addEventListener && _types_js__WEBPACK_IMPORTED_MODULE_1__.WINDOW.performance;\n}\n\n/**\n * Converts from milliseconds to seconds\n * @param time time in ms\n */\nfunction msToSec(time) {\n  return time / 1000;\n}\n\n/**\n * Converts ALPN protocol ids to name and version.\n *\n * (https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids)\n * @param nextHopProtocol PerformanceResourceTiming.nextHopProtocol\n */\nfunction extractNetworkProtocol(nextHopProtocol) {\n  let name = 'unknown';\n  let version = 'unknown';\n  let _name = '';\n  for (const char of nextHopProtocol) {\n    // http/1.1 etc.\n    if (char === '/') {\n      [name, version] = nextHopProtocol.split('/') ;\n      break;\n    }\n    // h2, h3 etc.\n    if (!isNaN(Number(char))) {\n      name = _name === 'h' ? 'http' : _name;\n      version = nextHopProtocol.split(_name)[1] ;\n      break;\n    }\n    _name += char;\n  }\n  if (_name === nextHopProtocol) {\n    // webrtc, ftp, etc.\n    name = _name;\n  }\n  return { name, version };\n}\n\n/**\n * Generic support check for web vitals\n */\nfunction supportsWebVital(entryType) {\n  try {\n    return PerformanceObserver.supportedEntryTypes.includes(entryType);\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Listens for events on which we want to collect a previously accumulated web vital value.\n * Currently, this includes:\n *\n * - pagehide (i.e. user minimizes browser window, hides tab, etc)\n * - soft navigation (we only care about the vital of the initially loaded route)\n *\n * As a \"side-effect\", this function will also collect the span id of the pageload span.\n *\n * @param collectorCallback the callback to be called when the first of these events is triggered. Parameters:\n * - event: the event that triggered the reporting of the web vital value.\n * - pageloadSpanId: the span id of the pageload span. This is used to link the web vital span to the pageload span.\n */\nfunction listenForWebVitalReportEvents(\n  client,\n  collectorCallback,\n) {\n  let pageloadSpanId;\n\n  let collected = false;\n  function _runCollectorCallbackOnce(event) {\n    if (!collected && pageloadSpanId) {\n      collectorCallback(event, pageloadSpanId);\n    }\n    collected = true;\n  }\n\n  (0,_web_vitals_lib_onHidden_js__WEBPACK_IMPORTED_MODULE_2__.onHidden)(() => {\n    _runCollectorCallbackOnce('pagehide');\n  });\n\n  const unsubscribeStartNavigation = client.on('beforeStartNavigationSpan', (_, options) => {\n    // we only want to collect LCP if we actually navigate. Redirects should be ignored.\n    if (!options?.isRedirect) {\n      _runCollectorCallbackOnce('navigation');\n      unsubscribeStartNavigation?.();\n      unsubscribeAfterStartPageLoadSpan?.();\n    }\n  });\n\n  const unsubscribeAfterStartPageLoadSpan = client.on('afterStartPageLoadSpan', span => {\n    pageloadSpanId = span.spanContext().spanId;\n    unsubscribeAfterStartPageLoadSpan?.();\n  });\n}\n\n\n//# sourceMappingURL=utils.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3MvdXRpbHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBeUc7QUFDcEU7QUFDbUI7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFFBQVE7QUFDWjtBQUNBLDBCQUEwQix3REFBVTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTLDREQUFjO0FBQ3ZCLGlCQUFpQiwrREFBaUI7QUFDbEM7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsdURBQVM7QUFDMUI7QUFDQTtBQUNBOztBQUVBLFVBQVUsNkRBQTZEOztBQUV2RSxVQUFVLHVDQUF1QztBQUNqRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQkFBZ0IsNkRBQWU7O0FBRS9CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiw2Q0FBTTs7QUFFakM7QUFDQSwwQ0FBMEMsTUFBTTs7QUFFaEQ7QUFDQTs7QUFFQSxTQUFTLCtEQUFpQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLDZDQUFNLHFCQUFxQiw2Q0FBTTtBQUMxQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFLHFFQUFRO0FBQ1Y7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRXdMO0FBQ3hMIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vbWV0cmljcy91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGFuVG9KU09OLCB3aXRoQWN0aXZlU3Bhbiwgc3RhcnRJbmFjdGl2ZVNwYW4sIGdldENsaWVudCwgZ2V0Q3VycmVudFNjb3BlIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IFdJTkRPVyB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IG9uSGlkZGVuIH0gZnJvbSAnLi93ZWItdml0YWxzL2xpYi9vbkhpZGRlbi5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZ2l2ZW4gdmFsdWUgaXMgYSB2YWxpZCBtZWFzdXJlbWVudCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaXNNZWFzdXJlbWVudFZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gc3RhcnQgY2hpbGQgb24gdHJhbnNhY3Rpb25zLiBUaGlzIGZ1bmN0aW9uIHdpbGwgbWFrZSBzdXJlIHRoYXQgdGhlIHRyYW5zYWN0aW9uIHdpbGxcbiAqIHVzZSB0aGUgc3RhcnQgdGltZXN0YW1wIG9mIHRoZSBjcmVhdGVkIGNoaWxkIHNwYW4gaWYgaXQgaXMgZWFybGllciB0aGFuIHRoZSB0cmFuc2FjdGlvbnMgYWN0dWFsXG4gKiBzdGFydCB0aW1lc3RhbXAuXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0QW5kRW5kU3BhbihcbiAgcGFyZW50U3BhbixcbiAgc3RhcnRUaW1lSW5TZWNvbmRzLFxuICBlbmRUaW1lLFxuICB7IC4uLmN0eCB9LFxuKSB7XG4gIGNvbnN0IHBhcmVudFN0YXJ0VGltZSA9IHNwYW5Ub0pTT04ocGFyZW50U3Bhbikuc3RhcnRfdGltZXN0YW1wO1xuICBpZiAocGFyZW50U3RhcnRUaW1lICYmIHBhcmVudFN0YXJ0VGltZSA+IHN0YXJ0VGltZUluU2Vjb25kcykge1xuICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMgZm9yIFNlbnRyeVNwYW5zLi4uXG4gICAgaWYgKHR5cGVvZiAocGFyZW50U3BhbiApLnVwZGF0ZVN0YXJ0VGltZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgKHBhcmVudFNwYW4gKS51cGRhdGVTdGFydFRpbWUoc3RhcnRUaW1lSW5TZWNvbmRzKTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgcmV0dXJuIHZhbHVlIG9ubHkgZXhpc3RzIGZvciB0ZXN0c1xuICByZXR1cm4gd2l0aEFjdGl2ZVNwYW4ocGFyZW50U3BhbiwgKCkgPT4ge1xuICAgIGNvbnN0IHNwYW4gPSBzdGFydEluYWN0aXZlU3Bhbih7XG4gICAgICBzdGFydFRpbWU6IHN0YXJ0VGltZUluU2Vjb25kcyxcbiAgICAgIC4uLmN0eCxcbiAgICB9KTtcblxuICAgIGlmIChzcGFuKSB7XG4gICAgICBzcGFuLmVuZChlbmRUaW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3BhbjtcbiAgfSk7XG59XG5cbi8qKlxuICogU3RhcnRzIGFuIGluYWN0aXZlLCBzdGFuZGFsb25lIHNwYW4gdXNlZCB0byBzZW5kIHdlYiB2aXRhbCB2YWx1ZXMgdG8gU2VudHJ5LlxuICogRE8gTk9UIHVzZSB0aGlzIGZvciBhcmJpdHJhcnkgc3BhbnMsIGFzIHRoZXNlIHNwYW5zIHJlcXVpcmUgc3BlY2lhbCBoYW5kbGluZ1xuICogZHVyaW5nIGluZ2VzdGlvbiB0byBleHRyYWN0IG1ldHJpY3MuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBhZGRzIGEgYnVuY2ggb2YgYXR0cmlidXRlcyBhbmQgZGF0YSB0byB0aGUgc3BhbiB0aGF0J3Mgc2hhcmVkXG4gKiBieSBhbGwgd2ViIHZpdGFsIHN0YW5kYWxvbmUgc3BhbnMuIEhvd2V2ZXIsIHlvdSBuZWVkIHRvIHRha2UgY2FyZSBvZiBhZGRpbmdcbiAqIHRoZSBhY3R1YWwgd2ViIHZpdGFsIHZhbHVlIGFzIGFuIGV2ZW50IHRvIHRoZSBzcGFuLiBBbHNvLCB5b3UgbmVlZCB0byBhc3NpZ25cbiAqIGEgdHJhbnNhY3Rpb24gbmFtZSBhbmQgc29tZSBvdGhlciB2YWx1ZXMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIHdlYiB2aXRhbC5cbiAqXG4gKiBVbHRpbWF0ZWx5LCB5b3UgYWxzbyBuZWVkIHRvIHRha2UgY2FyZSBvZiBlbmRpbmcgdGhlIHNwYW4gdG8gc2VuZCBpdCBvZmYuXG4gKlxuICogQHBhcmFtIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBhbiBpbmFjdGl2ZSwgc3RhbmRhbG9uZSBhbmQgTk9UIFlFVCBlbmRlZCBzcGFuXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0U3RhbmRhbG9uZVdlYlZpdGFsU3BhbihvcHRpb25zKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuICBpZiAoIWNsaWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgbmFtZSwgdHJhbnNhY3Rpb24sIGF0dHJpYnV0ZXM6IHBhc3NlZEF0dHJpYnV0ZXMsIHN0YXJ0VGltZSB9ID0gb3B0aW9ucztcblxuICBjb25zdCB7IHJlbGVhc2UsIGVudmlyb25tZW50LCBzZW5kRGVmYXVsdFBpaSB9ID0gY2xpZW50LmdldE9wdGlvbnMoKTtcbiAgLy8gV2UgbmVlZCB0byBnZXQgdGhlIHJlcGxheSwgdXNlciwgYW5kIGFjdGl2ZVRyYW5zYWN0aW9uIGZyb20gdGhlIGN1cnJlbnQgc2NvcGVcbiAgLy8gc28gdGhhdCB3ZSBjYW4gYXNzb2NpYXRlIHJlcGxheSBpZCwgcHJvZmlsZSBpZCwgYW5kIGEgdXNlciBkaXNwbGF5IHRvIHRoZSBzcGFuXG4gIGNvbnN0IHJlcGxheSA9IGNsaWVudC5nZXRJbnRlZ3JhdGlvbkJ5TmFtZSgnUmVwbGF5Jyk7XG4gIGNvbnN0IHJlcGxheUlkID0gcmVwbGF5Py5nZXRSZXBsYXlJZCgpO1xuXG4gIGNvbnN0IHNjb3BlID0gZ2V0Q3VycmVudFNjb3BlKCk7XG5cbiAgY29uc3QgdXNlciA9IHNjb3BlLmdldFVzZXIoKTtcbiAgY29uc3QgdXNlckRpc3BsYXkgPSB1c2VyICE9PSB1bmRlZmluZWQgPyB1c2VyLmVtYWlsIHx8IHVzZXIuaWQgfHwgdXNlci5pcF9hZGRyZXNzIDogdW5kZWZpbmVkO1xuXG4gIGxldCBwcm9maWxlSWQ7XG4gIHRyeSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBza2lwIG9wdGlvbmFsIGNoYWluaW5nIHRvIHNhdmUgYnVuZGxlIHNpemUgd2l0aCB0cnkgY2F0Y2hcbiAgICBwcm9maWxlSWQgPSBzY29wZS5nZXRTY29wZURhdGEoKS5jb250ZXh0cy5wcm9maWxlLnByb2ZpbGVfaWQ7XG4gIH0gY2F0Y2gge1xuICAgIC8vIGRvIG5vdGhpbmdcbiAgfVxuXG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgcmVsZWFzZSxcbiAgICBlbnZpcm9ubWVudCxcblxuICAgIHVzZXI6IHVzZXJEaXNwbGF5IHx8IHVuZGVmaW5lZCxcbiAgICBwcm9maWxlX2lkOiBwcm9maWxlSWQgfHwgdW5kZWZpbmVkLFxuICAgIHJlcGxheV9pZDogcmVwbGF5SWQgfHwgdW5kZWZpbmVkLFxuXG4gICAgdHJhbnNhY3Rpb24sXG5cbiAgICAvLyBXZWIgdml0YWwgc2NvcmUgY2FsY3VsYXRpb24gcmVsaWVzIG9uIHRoZSB1c2VyIGFnZW50IHRvIGFjY291bnQgZm9yIGRpZmZlcmVudFxuICAgIC8vIGJyb3dzZXJzIHNldHRpbmcgZGlmZmVyZW50IHRocmVzaG9sZHMgZm9yIHdoYXQgaXMgY29uc2lkZXJlZCBhIGdvb2QvbWVoL2JhZCB2YWx1ZS5cbiAgICAvLyBGb3IgZXhhbXBsZTogQ2hyb21lIHZzLiBDaHJvbWUgTW9iaWxlXG4gICAgJ3VzZXJfYWdlbnQub3JpZ2luYWwnOiBXSU5ET1cubmF2aWdhdG9yPy51c2VyQWdlbnQsXG5cbiAgICAvLyBUaGlzIHRlbGxzIFNlbnRyeSB0byBpbmZlciB0aGUgSVAgYWRkcmVzcyBmcm9tIHRoZSByZXF1ZXN0XG4gICAgJ2NsaWVudC5hZGRyZXNzJzogc2VuZERlZmF1bHRQaWkgPyAne3thdXRvfX0nIDogdW5kZWZpbmVkLFxuXG4gICAgLi4ucGFzc2VkQXR0cmlidXRlcyxcbiAgfTtcblxuICByZXR1cm4gc3RhcnRJbmFjdGl2ZVNwYW4oe1xuICAgIG5hbWUsXG4gICAgYXR0cmlidXRlcyxcbiAgICBzdGFydFRpbWUsXG4gICAgZXhwZXJpbWVudGFsOiB7XG4gICAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIH0sXG4gIH0pO1xufVxuXG4vKiogR2V0IHRoZSBicm93c2VyIHBlcmZvcm1hbmNlIEFQSS4gKi9cbmZ1bmN0aW9uIGdldEJyb3dzZXJQZXJmb3JtYW5jZUFQSSgpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB3ZSB3YW50IHRvIG1ha2Ugc3VyZSBhbGwgb2YgdGhlc2UgYXJlIGF2YWlsYWJsZSwgZXZlbiBpZiBUUyBpcyBzdXJlIHRoZXkgYXJlXG4gIHJldHVybiBXSU5ET1cuYWRkRXZlbnRMaXN0ZW5lciAmJiBXSU5ET1cucGVyZm9ybWFuY2U7XG59XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBtaWxsaXNlY29uZHMgdG8gc2Vjb25kc1xuICogQHBhcmFtIHRpbWUgdGltZSBpbiBtc1xuICovXG5mdW5jdGlvbiBtc1RvU2VjKHRpbWUpIHtcbiAgcmV0dXJuIHRpbWUgLyAxMDAwO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIEFMUE4gcHJvdG9jb2wgaWRzIHRvIG5hbWUgYW5kIHZlcnNpb24uXG4gKlxuICogKGh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3Rscy1leHRlbnNpb250eXBlLXZhbHVlcy90bHMtZXh0ZW5zaW9udHlwZS12YWx1ZXMueGh0bWwjYWxwbi1wcm90b2NvbC1pZHMpXG4gKiBAcGFyYW0gbmV4dEhvcFByb3RvY29sIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcubmV4dEhvcFByb3RvY29sXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3ROZXR3b3JrUHJvdG9jb2wobmV4dEhvcFByb3RvY29sKSB7XG4gIGxldCBuYW1lID0gJ3Vua25vd24nO1xuICBsZXQgdmVyc2lvbiA9ICd1bmtub3duJztcbiAgbGV0IF9uYW1lID0gJyc7XG4gIGZvciAoY29uc3QgY2hhciBvZiBuZXh0SG9wUHJvdG9jb2wpIHtcbiAgICAvLyBodHRwLzEuMSBldGMuXG4gICAgaWYgKGNoYXIgPT09ICcvJykge1xuICAgICAgW25hbWUsIHZlcnNpb25dID0gbmV4dEhvcFByb3RvY29sLnNwbGl0KCcvJykgO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIGgyLCBoMyBldGMuXG4gICAgaWYgKCFpc05hTihOdW1iZXIoY2hhcikpKSB7XG4gICAgICBuYW1lID0gX25hbWUgPT09ICdoJyA/ICdodHRwJyA6IF9uYW1lO1xuICAgICAgdmVyc2lvbiA9IG5leHRIb3BQcm90b2NvbC5zcGxpdChfbmFtZSlbMV0gO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIF9uYW1lICs9IGNoYXI7XG4gIH1cbiAgaWYgKF9uYW1lID09PSBuZXh0SG9wUHJvdG9jb2wpIHtcbiAgICAvLyB3ZWJydGMsIGZ0cCwgZXRjLlxuICAgIG5hbWUgPSBfbmFtZTtcbiAgfVxuICByZXR1cm4geyBuYW1lLCB2ZXJzaW9uIH07XG59XG5cbi8qKlxuICogR2VuZXJpYyBzdXBwb3J0IGNoZWNrIGZvciB3ZWIgdml0YWxzXG4gKi9cbmZ1bmN0aW9uIHN1cHBvcnRzV2ViVml0YWwoZW50cnlUeXBlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIFBlcmZvcm1hbmNlT2JzZXJ2ZXIuc3VwcG9ydGVkRW50cnlUeXBlcy5pbmNsdWRlcyhlbnRyeVR5cGUpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBMaXN0ZW5zIGZvciBldmVudHMgb24gd2hpY2ggd2Ugd2FudCB0byBjb2xsZWN0IGEgcHJldmlvdXNseSBhY2N1bXVsYXRlZCB3ZWIgdml0YWwgdmFsdWUuXG4gKiBDdXJyZW50bHksIHRoaXMgaW5jbHVkZXM6XG4gKlxuICogLSBwYWdlaGlkZSAoaS5lLiB1c2VyIG1pbmltaXplcyBicm93c2VyIHdpbmRvdywgaGlkZXMgdGFiLCBldGMpXG4gKiAtIHNvZnQgbmF2aWdhdGlvbiAod2Ugb25seSBjYXJlIGFib3V0IHRoZSB2aXRhbCBvZiB0aGUgaW5pdGlhbGx5IGxvYWRlZCByb3V0ZSlcbiAqXG4gKiBBcyBhIFwic2lkZS1lZmZlY3RcIiwgdGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gY29sbGVjdCB0aGUgc3BhbiBpZCBvZiB0aGUgcGFnZWxvYWQgc3Bhbi5cbiAqXG4gKiBAcGFyYW0gY29sbGVjdG9yQ2FsbGJhY2sgdGhlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBmaXJzdCBvZiB0aGVzZSBldmVudHMgaXMgdHJpZ2dlcmVkLiBQYXJhbWV0ZXJzOlxuICogLSBldmVudDogdGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSByZXBvcnRpbmcgb2YgdGhlIHdlYiB2aXRhbCB2YWx1ZS5cbiAqIC0gcGFnZWxvYWRTcGFuSWQ6IHRoZSBzcGFuIGlkIG9mIHRoZSBwYWdlbG9hZCBzcGFuLiBUaGlzIGlzIHVzZWQgdG8gbGluayB0aGUgd2ViIHZpdGFsIHNwYW4gdG8gdGhlIHBhZ2Vsb2FkIHNwYW4uXG4gKi9cbmZ1bmN0aW9uIGxpc3RlbkZvcldlYlZpdGFsUmVwb3J0RXZlbnRzKFxuICBjbGllbnQsXG4gIGNvbGxlY3RvckNhbGxiYWNrLFxuKSB7XG4gIGxldCBwYWdlbG9hZFNwYW5JZDtcblxuICBsZXQgY29sbGVjdGVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIF9ydW5Db2xsZWN0b3JDYWxsYmFja09uY2UoZXZlbnQpIHtcbiAgICBpZiAoIWNvbGxlY3RlZCAmJiBwYWdlbG9hZFNwYW5JZCkge1xuICAgICAgY29sbGVjdG9yQ2FsbGJhY2soZXZlbnQsIHBhZ2Vsb2FkU3BhbklkKTtcbiAgICB9XG4gICAgY29sbGVjdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIG9uSGlkZGVuKCgpID0+IHtcbiAgICBfcnVuQ29sbGVjdG9yQ2FsbGJhY2tPbmNlKCdwYWdlaGlkZScpO1xuICB9KTtcblxuICBjb25zdCB1bnN1YnNjcmliZVN0YXJ0TmF2aWdhdGlvbiA9IGNsaWVudC5vbignYmVmb3JlU3RhcnROYXZpZ2F0aW9uU3BhbicsIChfLCBvcHRpb25zKSA9PiB7XG4gICAgLy8gd2Ugb25seSB3YW50IHRvIGNvbGxlY3QgTENQIGlmIHdlIGFjdHVhbGx5IG5hdmlnYXRlLiBSZWRpcmVjdHMgc2hvdWxkIGJlIGlnbm9yZWQuXG4gICAgaWYgKCFvcHRpb25zPy5pc1JlZGlyZWN0KSB7XG4gICAgICBfcnVuQ29sbGVjdG9yQ2FsbGJhY2tPbmNlKCduYXZpZ2F0aW9uJyk7XG4gICAgICB1bnN1YnNjcmliZVN0YXJ0TmF2aWdhdGlvbj8uKCk7XG4gICAgICB1bnN1YnNjcmliZUFmdGVyU3RhcnRQYWdlTG9hZFNwYW4/LigpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmVBZnRlclN0YXJ0UGFnZUxvYWRTcGFuID0gY2xpZW50Lm9uKCdhZnRlclN0YXJ0UGFnZUxvYWRTcGFuJywgc3BhbiA9PiB7XG4gICAgcGFnZWxvYWRTcGFuSWQgPSBzcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkO1xuICAgIHVuc3Vic2NyaWJlQWZ0ZXJTdGFydFBhZ2VMb2FkU3Bhbj8uKCk7XG4gIH0pO1xufVxuXG5leHBvcnQgeyBleHRyYWN0TmV0d29ya1Byb3RvY29sLCBnZXRCcm93c2VyUGVyZm9ybWFuY2VBUEksIGlzTWVhc3VyZW1lbnRWYWx1ZSwgbGlzdGVuRm9yV2ViVml0YWxSZXBvcnRFdmVudHMsIG1zVG9TZWMsIHN0YXJ0QW5kRW5kU3Bhbiwgc3RhcnRTdGFuZGFsb25lV2ViVml0YWxTcGFuLCBzdXBwb3J0c1dlYlZpdGFsIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD11dGlscy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/utils.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getCLS.js":
/*!*****************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getCLS.js ***!
  \*****************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   CLSThresholds: () => (/* binding */ CLSThresholds),\n/* harmony export */   onCLS: () => (/* binding */ onCLS)\n/* harmony export */ });\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../types.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/types.js\");\n/* harmony import */ var _lib_bindReporter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/bindReporter.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/bindReporter.js\");\n/* harmony import */ var _lib_initMetric_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/initMetric.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initMetric.js\");\n/* harmony import */ var _lib_initUnique_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/initUnique.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initUnique.js\");\n/* harmony import */ var _lib_LayoutShiftManager_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/LayoutShiftManager.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/LayoutShiftManager.js\");\n/* harmony import */ var _lib_observe_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/observe.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/observe.js\");\n/* harmony import */ var _lib_runOnce_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/runOnce.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/runOnce.js\");\n/* harmony import */ var _onFCP_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./onFCP.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/onFCP.js\");\n\n\n\n\n\n\n\n\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for CLS. See https://web.dev/articles/cls#what_is_a_good_cls_score */\nconst CLSThresholds = [0.1, 0.25];\n\n/**\n * Calculates the [CLS](https://web.dev/articles/cls) value for the current page and\n * calls the `callback` function once the value is ready to be reported, along\n * with all `layout-shift` performance entries that were used in the metric\n * value calculation. The reported value is a `double` (corresponding to a\n * [layout shift score](https://web.dev/articles/cls#layout_shift_score)).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** CLS should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nconst onCLS = (onReport, opts = {}) => {\n  // Start monitoring FCP so we can only report CLS if FCP is also reported.\n  // Note: this is done to match the current behavior of CrUX.\n  (0,_onFCP_js__WEBPACK_IMPORTED_MODULE_7__.onFCP)(\n    (0,_lib_runOnce_js__WEBPACK_IMPORTED_MODULE_6__.runOnce)(() => {\n      const metric = (0,_lib_initMetric_js__WEBPACK_IMPORTED_MODULE_2__.initMetric)('CLS', 0);\n      let report;\n\n      const layoutShiftManager = (0,_lib_initUnique_js__WEBPACK_IMPORTED_MODULE_3__.initUnique)(opts, _lib_LayoutShiftManager_js__WEBPACK_IMPORTED_MODULE_4__.LayoutShiftManager);\n\n      const handleEntries = (entries) => {\n        for (const entry of entries) {\n          layoutShiftManager._processEntry(entry);\n        }\n\n        // If the current session value is larger than the current CLS value,\n        // update CLS and the entries contributing to it.\n        if (layoutShiftManager._sessionValue > metric.value) {\n          metric.value = layoutShiftManager._sessionValue;\n          metric.entries = layoutShiftManager._sessionEntries;\n          report();\n        }\n      };\n\n      const po = (0,_lib_observe_js__WEBPACK_IMPORTED_MODULE_5__.observe)('layout-shift', handleEntries);\n      if (po) {\n        report = (0,_lib_bindReporter_js__WEBPACK_IMPORTED_MODULE_1__.bindReporter)(onReport, metric, CLSThresholds, opts.reportAllChanges);\n\n        _types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.document?.addEventListener('visibilitychange', () => {\n          if (_types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.document?.visibilityState === 'hidden') {\n            handleEntries(po.takeRecords() );\n            report(true);\n          }\n        });\n\n        // Queue a task to report (if nothing else triggers a report first).\n        // This allows CLS to be reported as soon as FCP fires when\n        // `reportAllChanges` is true.\n        _types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW?.setTimeout?.(report);\n      }\n    }),\n  );\n};\n\n\n//# sourceMappingURL=getCLS.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9nZXRDTFMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUF3QztBQUNhO0FBQ0o7QUFDQTtBQUNnQjtBQUN0QjtBQUNBO0FBQ1I7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBLEVBQUUsZ0RBQUs7QUFDUCxJQUFJLHdEQUFPO0FBQ1gscUJBQXFCLDhEQUFVO0FBQy9COztBQUVBLGlDQUFpQyw4REFBVSxPQUFPLDBFQUFrQjs7QUFFcEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsd0RBQU87QUFDeEI7QUFDQSxpQkFBaUIsa0VBQVk7O0FBRTdCLFFBQVEsNkNBQU07QUFDZCxjQUFjLDZDQUFNO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsUUFBUSw2Q0FBTTtBQUNkO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRWdDO0FBQ2hDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vbWV0cmljcy93ZWItdml0YWxzL2dldENMUy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXSU5ET1cgfSBmcm9tICcuLi8uLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBiaW5kUmVwb3J0ZXIgfSBmcm9tICcuL2xpYi9iaW5kUmVwb3J0ZXIuanMnO1xuaW1wb3J0IHsgaW5pdE1ldHJpYyB9IGZyb20gJy4vbGliL2luaXRNZXRyaWMuanMnO1xuaW1wb3J0IHsgaW5pdFVuaXF1ZSB9IGZyb20gJy4vbGliL2luaXRVbmlxdWUuanMnO1xuaW1wb3J0IHsgTGF5b3V0U2hpZnRNYW5hZ2VyIH0gZnJvbSAnLi9saWIvTGF5b3V0U2hpZnRNYW5hZ2VyLmpzJztcbmltcG9ydCB7IG9ic2VydmUgfSBmcm9tICcuL2xpYi9vYnNlcnZlLmpzJztcbmltcG9ydCB7IHJ1bk9uY2UgfSBmcm9tICcuL2xpYi9ydW5PbmNlLmpzJztcbmltcG9ydCB7IG9uRkNQIH0gZnJvbSAnLi9vbkZDUC5qcyc7XG5cbi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5cbi8qKiBUaHJlc2hvbGRzIGZvciBDTFMuIFNlZSBodHRwczovL3dlYi5kZXYvYXJ0aWNsZXMvY2xzI3doYXRfaXNfYV9nb29kX2Nsc19zY29yZSAqL1xuY29uc3QgQ0xTVGhyZXNob2xkcyA9IFswLjEsIDAuMjVdO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIFtDTFNdKGh0dHBzOi8vd2ViLmRldi9hcnRpY2xlcy9jbHMpIHZhbHVlIGZvciB0aGUgY3VycmVudCBwYWdlIGFuZFxuICogY2FsbHMgdGhlIGBjYWxsYmFja2AgZnVuY3Rpb24gb25jZSB0aGUgdmFsdWUgaXMgcmVhZHkgdG8gYmUgcmVwb3J0ZWQsIGFsb25nXG4gKiB3aXRoIGFsbCBgbGF5b3V0LXNoaWZ0YCBwZXJmb3JtYW5jZSBlbnRyaWVzIHRoYXQgd2VyZSB1c2VkIGluIHRoZSBtZXRyaWNcbiAqIHZhbHVlIGNhbGN1bGF0aW9uLiBUaGUgcmVwb3J0ZWQgdmFsdWUgaXMgYSBgZG91YmxlYCAoY29ycmVzcG9uZGluZyB0byBhXG4gKiBbbGF5b3V0IHNoaWZ0IHNjb3JlXShodHRwczovL3dlYi5kZXYvYXJ0aWNsZXMvY2xzI2xheW91dF9zaGlmdF9zY29yZSkpLlxuICpcbiAqIElmIHRoZSBgcmVwb3J0QWxsQ2hhbmdlc2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgc2V0IHRvIGB0cnVlYCwgdGhlXG4gKiBgY2FsbGJhY2tgIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFzIHNvb24gYXMgdGhlIHZhbHVlIGlzIGluaXRpYWxseVxuICogZGV0ZXJtaW5lZCBhcyB3ZWxsIGFzIGFueSB0aW1lIHRoZSB2YWx1ZSBjaGFuZ2VzIHRocm91Z2hvdXQgdGhlIHBhZ2VcbiAqIGxpZmVzcGFuLlxuICpcbiAqIF8qKkltcG9ydGFudDoqKiBDTFMgc2hvdWxkIGJlIGNvbnRpbnVhbGx5IG1vbml0b3JlZCBmb3IgY2hhbmdlcyB0aHJvdWdob3V0XG4gKiB0aGUgZW50aXJlIGxpZmVzcGFuIG9mIGEgcGFnZeKAlGluY2x1ZGluZyBpZiB0aGUgdXNlciByZXR1cm5zIHRvIHRoZSBwYWdlIGFmdGVyXG4gKiBpdCdzIGJlZW4gaGlkZGVuL2JhY2tncm91bmRlZC4gSG93ZXZlciwgc2luY2UgYnJvd3NlcnMgb2Z0ZW4gW3dpbGwgbm90IGZpcmVcbiAqIGFkZGl0aW9uYWwgY2FsbGJhY2tzIG9uY2UgdGhlIHVzZXIgaGFzIGJhY2tncm91bmRlZCBhXG4gKiBwYWdlXShodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2Jsb2cvcGFnZS1saWZlY3ljbGUtYXBpLyNhZHZpY2UtaGlkZGVuKSxcbiAqIGBjYWxsYmFja2AgaXMgYWx3YXlzIGNhbGxlZCB3aGVuIHRoZSBwYWdlJ3MgdmlzaWJpbGl0eSBzdGF0ZSBjaGFuZ2VzIHRvXG4gKiBoaWRkZW4uIEFzIGEgcmVzdWx0LCB0aGUgYGNhbGxiYWNrYCBmdW5jdGlvbiBtaWdodCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXNcbiAqIGR1cmluZyB0aGUgc2FtZSBwYWdlIGxvYWQuX1xuICovXG5jb25zdCBvbkNMUyA9IChvblJlcG9ydCwgb3B0cyA9IHt9KSA9PiB7XG4gIC8vIFN0YXJ0IG1vbml0b3JpbmcgRkNQIHNvIHdlIGNhbiBvbmx5IHJlcG9ydCBDTFMgaWYgRkNQIGlzIGFsc28gcmVwb3J0ZWQuXG4gIC8vIE5vdGU6IHRoaXMgaXMgZG9uZSB0byBtYXRjaCB0aGUgY3VycmVudCBiZWhhdmlvciBvZiBDclVYLlxuICBvbkZDUChcbiAgICBydW5PbmNlKCgpID0+IHtcbiAgICAgIGNvbnN0IG1ldHJpYyA9IGluaXRNZXRyaWMoJ0NMUycsIDApO1xuICAgICAgbGV0IHJlcG9ydDtcblxuICAgICAgY29uc3QgbGF5b3V0U2hpZnRNYW5hZ2VyID0gaW5pdFVuaXF1ZShvcHRzLCBMYXlvdXRTaGlmdE1hbmFnZXIpO1xuXG4gICAgICBjb25zdCBoYW5kbGVFbnRyaWVzID0gKGVudHJpZXMpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgbGF5b3V0U2hpZnRNYW5hZ2VyLl9wcm9jZXNzRW50cnkoZW50cnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgc2Vzc2lvbiB2YWx1ZSBpcyBsYXJnZXIgdGhhbiB0aGUgY3VycmVudCBDTFMgdmFsdWUsXG4gICAgICAgIC8vIHVwZGF0ZSBDTFMgYW5kIHRoZSBlbnRyaWVzIGNvbnRyaWJ1dGluZyB0byBpdC5cbiAgICAgICAgaWYgKGxheW91dFNoaWZ0TWFuYWdlci5fc2Vzc2lvblZhbHVlID4gbWV0cmljLnZhbHVlKSB7XG4gICAgICAgICAgbWV0cmljLnZhbHVlID0gbGF5b3V0U2hpZnRNYW5hZ2VyLl9zZXNzaW9uVmFsdWU7XG4gICAgICAgICAgbWV0cmljLmVudHJpZXMgPSBsYXlvdXRTaGlmdE1hbmFnZXIuX3Nlc3Npb25FbnRyaWVzO1xuICAgICAgICAgIHJlcG9ydCgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwbyA9IG9ic2VydmUoJ2xheW91dC1zaGlmdCcsIGhhbmRsZUVudHJpZXMpO1xuICAgICAgaWYgKHBvKSB7XG4gICAgICAgIHJlcG9ydCA9IGJpbmRSZXBvcnRlcihvblJlcG9ydCwgbWV0cmljLCBDTFNUaHJlc2hvbGRzLCBvcHRzLnJlcG9ydEFsbENoYW5nZXMpO1xuXG4gICAgICAgIFdJTkRPVy5kb2N1bWVudD8uYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsICgpID0+IHtcbiAgICAgICAgICBpZiAoV0lORE9XLmRvY3VtZW50Py52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICBoYW5kbGVFbnRyaWVzKHBvLnRha2VSZWNvcmRzKCkgKTtcbiAgICAgICAgICAgIHJlcG9ydCh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFF1ZXVlIGEgdGFzayB0byByZXBvcnQgKGlmIG5vdGhpbmcgZWxzZSB0cmlnZ2VycyBhIHJlcG9ydCBmaXJzdCkuXG4gICAgICAgIC8vIFRoaXMgYWxsb3dzIENMUyB0byBiZSByZXBvcnRlZCBhcyBzb29uIGFzIEZDUCBmaXJlcyB3aGVuXG4gICAgICAgIC8vIGByZXBvcnRBbGxDaGFuZ2VzYCBpcyB0cnVlLlxuICAgICAgICBXSU5ET1c/LnNldFRpbWVvdXQ/LihyZXBvcnQpO1xuICAgICAgfVxuICAgIH0pLFxuICApO1xufTtcblxuZXhwb3J0IHsgQ0xTVGhyZXNob2xkcywgb25DTFMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldENMUy5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getCLS.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getFID.js":
/*!*****************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getFID.js ***!
  \*****************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   FIDThresholds: () => (/* binding */ FIDThresholds),\n/* harmony export */   onFID: () => (/* binding */ onFID)\n/* harmony export */ });\n/* harmony import */ var _lib_bindReporter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/bindReporter.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/bindReporter.js\");\n/* harmony import */ var _lib_getVisibilityWatcher_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/getVisibilityWatcher.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getVisibilityWatcher.js\");\n/* harmony import */ var _lib_initMetric_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/initMetric.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initMetric.js\");\n/* harmony import */ var _lib_observe_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/observe.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/observe.js\");\n/* harmony import */ var _lib_onHidden_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/onHidden.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/onHidden.js\");\n/* harmony import */ var _lib_runOnce_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/runOnce.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/runOnce.js\");\n/* harmony import */ var _lib_whenActivated_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/whenActivated.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenActivated.js\");\n\n\n\n\n\n\n\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * // Sentry: web-vitals removed FID reporting from v5. We're keeping it around\n * for the time being.\n * // TODO(v10): Remove FID reporting!\n */\n\n\n/** Thresholds for FID. See https://web.dev/articles/fid#what_is_a_good_fid_score */\nconst FIDThresholds = [100, 300];\n\n/**\n * Calculates the [FID](https://web.dev/articles/fid) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `first-input` performance entry used to determine the value. The\n * reported value is a `DOMHighResTimeStamp`.\n *\n * _**Important:** since FID is only reported after the user interacts with the\n * page, it's possible that it will not be reported for some page loads._\n */\nconst onFID = (onReport, opts = {}) => {\n  (0,_lib_whenActivated_js__WEBPACK_IMPORTED_MODULE_6__.whenActivated)(() => {\n    const visibilityWatcher = (0,_lib_getVisibilityWatcher_js__WEBPACK_IMPORTED_MODULE_1__.getVisibilityWatcher)();\n    const metric = (0,_lib_initMetric_js__WEBPACK_IMPORTED_MODULE_2__.initMetric)('FID');\n    // eslint-disable-next-line prefer-const\n    let report;\n\n    const handleEntry = (entry) => {\n      // Only report if the page wasn't hidden prior to the first input.\n      if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n        metric.value = entry.processingStart - entry.startTime;\n        metric.entries.push(entry);\n        report(true);\n      }\n    };\n\n    const handleEntries = (entries) => {\n      (entries ).forEach(handleEntry);\n    };\n\n    const po = (0,_lib_observe_js__WEBPACK_IMPORTED_MODULE_3__.observe)('first-input', handleEntries);\n\n    report = (0,_lib_bindReporter_js__WEBPACK_IMPORTED_MODULE_0__.bindReporter)(onReport, metric, FIDThresholds, opts.reportAllChanges);\n\n    if (po) {\n      // sentry: TODO: Figure out if we can use new whinIdleOrHidden insteard of onHidden\n      (0,_lib_onHidden_js__WEBPACK_IMPORTED_MODULE_4__.onHidden)(\n        (0,_lib_runOnce_js__WEBPACK_IMPORTED_MODULE_5__.runOnce)(() => {\n          handleEntries(po.takeRecords() );\n          po.disconnect();\n        }),\n      );\n    }\n  });\n};\n\n\n//# sourceMappingURL=getFID.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9nZXRGSUQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQXFEO0FBQ2dCO0FBQ3BCO0FBQ047QUFDRTtBQUNGO0FBQ1k7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxFQUFFLG9FQUFhO0FBQ2YsOEJBQThCLGtGQUFvQjtBQUNsRCxtQkFBbUIsOERBQVU7QUFDN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLHdEQUFPOztBQUV0QixhQUFhLGtFQUFZOztBQUV6QjtBQUNBO0FBQ0EsTUFBTSwwREFBUTtBQUNkLFFBQVEsd0RBQU87QUFDZjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRWdDO0FBQ2hDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vbWV0cmljcy93ZWItdml0YWxzL2dldEZJRC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBiaW5kUmVwb3J0ZXIgfSBmcm9tICcuL2xpYi9iaW5kUmVwb3J0ZXIuanMnO1xuaW1wb3J0IHsgZ2V0VmlzaWJpbGl0eVdhdGNoZXIgfSBmcm9tICcuL2xpYi9nZXRWaXNpYmlsaXR5V2F0Y2hlci5qcyc7XG5pbXBvcnQgeyBpbml0TWV0cmljIH0gZnJvbSAnLi9saWIvaW5pdE1ldHJpYy5qcyc7XG5pbXBvcnQgeyBvYnNlcnZlIH0gZnJvbSAnLi9saWIvb2JzZXJ2ZS5qcyc7XG5pbXBvcnQgeyBvbkhpZGRlbiB9IGZyb20gJy4vbGliL29uSGlkZGVuLmpzJztcbmltcG9ydCB7IHJ1bk9uY2UgfSBmcm9tICcuL2xpYi9ydW5PbmNlLmpzJztcbmltcG9ydCB7IHdoZW5BY3RpdmF0ZWQgfSBmcm9tICcuL2xpYi93aGVuQWN0aXZhdGVkLmpzJztcblxuLypcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqIC8vIFNlbnRyeTogd2ViLXZpdGFscyByZW1vdmVkIEZJRCByZXBvcnRpbmcgZnJvbSB2NS4gV2UncmUga2VlcGluZyBpdCBhcm91bmRcbiAqIGZvciB0aGUgdGltZSBiZWluZy5cbiAqIC8vIFRPRE8odjEwKTogUmVtb3ZlIEZJRCByZXBvcnRpbmchXG4gKi9cblxuXG4vKiogVGhyZXNob2xkcyBmb3IgRklELiBTZWUgaHR0cHM6Ly93ZWIuZGV2L2FydGljbGVzL2ZpZCN3aGF0X2lzX2FfZ29vZF9maWRfc2NvcmUgKi9cbmNvbnN0IEZJRFRocmVzaG9sZHMgPSBbMTAwLCAzMDBdO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIFtGSURdKGh0dHBzOi8vd2ViLmRldi9hcnRpY2xlcy9maWQpIHZhbHVlIGZvciB0aGUgY3VycmVudCBwYWdlIGFuZFxuICogY2FsbHMgdGhlIGBjYWxsYmFja2AgZnVuY3Rpb24gb25jZSB0aGUgdmFsdWUgaXMgcmVhZHksIGFsb25nIHdpdGggdGhlXG4gKiByZWxldmFudCBgZmlyc3QtaW5wdXRgIHBlcmZvcm1hbmNlIGVudHJ5IHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB2YWx1ZS4gVGhlXG4gKiByZXBvcnRlZCB2YWx1ZSBpcyBhIGBET01IaWdoUmVzVGltZVN0YW1wYC5cbiAqXG4gKiBfKipJbXBvcnRhbnQ6Kiogc2luY2UgRklEIGlzIG9ubHkgcmVwb3J0ZWQgYWZ0ZXIgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhlXG4gKiBwYWdlLCBpdCdzIHBvc3NpYmxlIHRoYXQgaXQgd2lsbCBub3QgYmUgcmVwb3J0ZWQgZm9yIHNvbWUgcGFnZSBsb2Fkcy5fXG4gKi9cbmNvbnN0IG9uRklEID0gKG9uUmVwb3J0LCBvcHRzID0ge30pID0+IHtcbiAgd2hlbkFjdGl2YXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdmlzaWJpbGl0eVdhdGNoZXIgPSBnZXRWaXNpYmlsaXR5V2F0Y2hlcigpO1xuICAgIGNvbnN0IG1ldHJpYyA9IGluaXRNZXRyaWMoJ0ZJRCcpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBsZXQgcmVwb3J0O1xuXG4gICAgY29uc3QgaGFuZGxlRW50cnkgPSAoZW50cnkpID0+IHtcbiAgICAgIC8vIE9ubHkgcmVwb3J0IGlmIHRoZSBwYWdlIHdhc24ndCBoaWRkZW4gcHJpb3IgdG8gdGhlIGZpcnN0IGlucHV0LlxuICAgICAgaWYgKGVudHJ5LnN0YXJ0VGltZSA8IHZpc2liaWxpdHlXYXRjaGVyLmZpcnN0SGlkZGVuVGltZSkge1xuICAgICAgICBtZXRyaWMudmFsdWUgPSBlbnRyeS5wcm9jZXNzaW5nU3RhcnQgLSBlbnRyeS5zdGFydFRpbWU7XG4gICAgICAgIG1ldHJpYy5lbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgICByZXBvcnQodHJ1ZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZUVudHJpZXMgPSAoZW50cmllcykgPT4ge1xuICAgICAgKGVudHJpZXMgKS5mb3JFYWNoKGhhbmRsZUVudHJ5KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcG8gPSBvYnNlcnZlKCdmaXJzdC1pbnB1dCcsIGhhbmRsZUVudHJpZXMpO1xuXG4gICAgcmVwb3J0ID0gYmluZFJlcG9ydGVyKG9uUmVwb3J0LCBtZXRyaWMsIEZJRFRocmVzaG9sZHMsIG9wdHMucmVwb3J0QWxsQ2hhbmdlcyk7XG5cbiAgICBpZiAocG8pIHtcbiAgICAgIC8vIHNlbnRyeTogVE9ETzogRmlndXJlIG91dCBpZiB3ZSBjYW4gdXNlIG5ldyB3aGluSWRsZU9ySGlkZGVuIGluc3RlYXJkIG9mIG9uSGlkZGVuXG4gICAgICBvbkhpZGRlbihcbiAgICAgICAgcnVuT25jZSgoKSA9PiB7XG4gICAgICAgICAgaGFuZGxlRW50cmllcyhwby50YWtlUmVjb3JkcygpICk7XG4gICAgICAgICAgcG8uZGlzY29ubmVjdCgpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IEZJRFRocmVzaG9sZHMsIG9uRklEIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRGSUQuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getFID.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getINP.js":
/*!*****************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getINP.js ***!
  \*****************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   INPThresholds: () => (/* binding */ INPThresholds),\n/* harmony export */   onINP: () => (/* binding */ onINP)\n/* harmony export */ });\n/* harmony import */ var _lib_bindReporter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/bindReporter.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/bindReporter.js\");\n/* harmony import */ var _lib_initMetric_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/initMetric.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initMetric.js\");\n/* harmony import */ var _lib_initUnique_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/initUnique.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initUnique.js\");\n/* harmony import */ var _lib_InteractionManager_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/InteractionManager.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/InteractionManager.js\");\n/* harmony import */ var _lib_observe_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/observe.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/observe.js\");\n/* harmony import */ var _lib_onHidden_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/onHidden.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/onHidden.js\");\n/* harmony import */ var _lib_polyfills_interactionCountPolyfill_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/polyfills/interactionCountPolyfill.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/polyfills/interactionCountPolyfill.js\");\n/* harmony import */ var _lib_whenActivated_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./lib/whenActivated.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenActivated.js\");\n/* harmony import */ var _lib_whenIdleOrHidden_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./lib/whenIdleOrHidden.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenIdleOrHidden.js\");\n\n\n\n\n\n\n\n\n\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for INP. See https://web.dev/articles/inp#what_is_a_good_inp_score */\nconst INPThresholds = [200, 500];\n\n// The default `durationThreshold` used across this library for observing\n// `event` entries via PerformanceObserver.\nconst DEFAULT_DURATION_THRESHOLD = 40;\n\n/**\n * Calculates the [INP](https://web.dev/articles/inp) value for the current\n * page and calls the `callback` function once the value is ready, along with\n * the `event` performance entries reported for that interaction. The reported\n * value is a `DOMHighResTimeStamp`.\n *\n * A custom `durationThreshold` configuration option can optionally be passed\n * to control what `event-timing` entries are considered for INP reporting. The\n * default threshold is `40`, which means INP scores of less than 40 will not\n * be reported. To avoid reporting no interactions in these cases, the library\n * will fall back to the input delay of the first interaction. Note that this\n * will not affect your 75th percentile INP value unless that value is also\n * less than 40 (well below the recommended\n * [good](https://web.dev/articles/inp#what_is_a_good_inp_score) threshold).\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called as soon as the value is initially\n * determined as well as any time the value changes throughout the page\n * lifespan.\n *\n * _**Important:** INP should be continually monitored for changes throughout\n * the entire lifespan of a page—including if the user returns to the page after\n * it's been hidden/backgrounded. However, since browsers often [will not fire\n * additional callbacks once the user has backgrounded a\n * page](https://developer.chrome.com/blog/page-lifecycle-api/#advice-hidden),\n * `callback` is always called when the page's visibility state changes to\n * hidden. As a result, the `callback` function might be called multiple times\n * during the same page load._\n */\nconst onINP = (onReport, opts = {}) => {\n  // Return if the browser doesn't support all APIs needed to measure INP.\n  if (!(globalThis.PerformanceEventTiming && 'interactionId' in PerformanceEventTiming.prototype)) {\n    return;\n  }\n\n  (0,_lib_whenActivated_js__WEBPACK_IMPORTED_MODULE_7__.whenActivated)(() => {\n    // TODO(philipwalton): remove once the polyfill is no longer needed.\n    (0,_lib_polyfills_interactionCountPolyfill_js__WEBPACK_IMPORTED_MODULE_6__.initInteractionCountPolyfill)();\n\n    const metric = (0,_lib_initMetric_js__WEBPACK_IMPORTED_MODULE_1__.initMetric)('INP');\n    // eslint-disable-next-line prefer-const\n    let report;\n\n    const interactionManager = (0,_lib_initUnique_js__WEBPACK_IMPORTED_MODULE_2__.initUnique)(opts, _lib_InteractionManager_js__WEBPACK_IMPORTED_MODULE_3__.InteractionManager);\n\n    const handleEntries = (entries) => {\n      // Queue the `handleEntries()` callback in the next idle task.\n      // This is needed to increase the chances that all event entries that\n      // occurred between the user interaction and the next paint\n      // have been dispatched. Note: there is currently an experiment\n      // running in Chrome (EventTimingKeypressAndCompositionInteractionId)\n      // 123+ that if rolled out fully may make this no longer necessary.\n      (0,_lib_whenIdleOrHidden_js__WEBPACK_IMPORTED_MODULE_8__.whenIdleOrHidden)(() => {\n        for (const entry of entries) {\n          interactionManager._processEntry(entry);\n        }\n\n        const inp = interactionManager._estimateP98LongestInteraction();\n\n        if (inp && inp._latency !== metric.value) {\n          metric.value = inp._latency;\n          metric.entries = inp.entries;\n          report();\n        }\n      });\n    };\n\n    const po = (0,_lib_observe_js__WEBPACK_IMPORTED_MODULE_4__.observe)('event', handleEntries, {\n      // Event Timing entries have their durations rounded to the nearest 8ms,\n      // so a duration of 40ms would be any event that spans 2.5 or more frames\n      // at 60Hz. This threshold is chosen to strike a balance between usefulness\n      // and performance. Running this callback for any interaction that spans\n      // just one or two frames is likely not worth the insight that could be\n      // gained.\n      durationThreshold: opts.durationThreshold ?? DEFAULT_DURATION_THRESHOLD,\n    });\n\n    report = (0,_lib_bindReporter_js__WEBPACK_IMPORTED_MODULE_0__.bindReporter)(onReport, metric, INPThresholds, opts.reportAllChanges);\n\n    if (po) {\n      // Also observe entries of type `first-input`. This is useful in cases\n      // where the first interaction is less than the `durationThreshold`.\n      po.observe({ type: 'first-input', buffered: true });\n\n      // sentry: we use onHidden instead of directly listening to visibilitychange\n      // because some browsers we still support (Safari <14.4) don't fully support\n      // `visibilitychange` or have known bugs w.r.t the `visibilitychange` event.\n      (0,_lib_onHidden_js__WEBPACK_IMPORTED_MODULE_5__.onHidden)(() => {\n        handleEntries(po.takeRecords() );\n        report(true);\n      });\n    }\n  });\n};\n\n\n//# sourceMappingURL=getINP.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9nZXRJTlAuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBcUQ7QUFDSjtBQUNBO0FBQ2dCO0FBQ3RCO0FBQ0U7QUFDOEM7QUFDcEM7QUFDTTs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEVBQUUsb0VBQWE7QUFDZjtBQUNBLElBQUksd0dBQTRCOztBQUVoQyxtQkFBbUIsOERBQVU7QUFDN0I7QUFDQTs7QUFFQSwrQkFBK0IsOERBQVUsT0FBTywwRUFBa0I7O0FBRWxFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSwwRUFBZ0I7QUFDdEI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUEsZUFBZSx3REFBTztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUwsYUFBYSxrRUFBWTs7QUFFekI7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHFDQUFxQzs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0EsTUFBTSwwREFBUTtBQUNkO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7O0FBRWdDO0FBQ2hDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vbWV0cmljcy93ZWItdml0YWxzL2dldElOUC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBiaW5kUmVwb3J0ZXIgfSBmcm9tICcuL2xpYi9iaW5kUmVwb3J0ZXIuanMnO1xuaW1wb3J0IHsgaW5pdE1ldHJpYyB9IGZyb20gJy4vbGliL2luaXRNZXRyaWMuanMnO1xuaW1wb3J0IHsgaW5pdFVuaXF1ZSB9IGZyb20gJy4vbGliL2luaXRVbmlxdWUuanMnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25NYW5hZ2VyIH0gZnJvbSAnLi9saWIvSW50ZXJhY3Rpb25NYW5hZ2VyLmpzJztcbmltcG9ydCB7IG9ic2VydmUgfSBmcm9tICcuL2xpYi9vYnNlcnZlLmpzJztcbmltcG9ydCB7IG9uSGlkZGVuIH0gZnJvbSAnLi9saWIvb25IaWRkZW4uanMnO1xuaW1wb3J0IHsgaW5pdEludGVyYWN0aW9uQ291bnRQb2x5ZmlsbCB9IGZyb20gJy4vbGliL3BvbHlmaWxscy9pbnRlcmFjdGlvbkNvdW50UG9seWZpbGwuanMnO1xuaW1wb3J0IHsgd2hlbkFjdGl2YXRlZCB9IGZyb20gJy4vbGliL3doZW5BY3RpdmF0ZWQuanMnO1xuaW1wb3J0IHsgd2hlbklkbGVPckhpZGRlbiB9IGZyb20gJy4vbGliL3doZW5JZGxlT3JIaWRkZW4uanMnO1xuXG4vKlxuICogQ29weXJpZ2h0IDIwMjIgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuXG4vKiogVGhyZXNob2xkcyBmb3IgSU5QLiBTZWUgaHR0cHM6Ly93ZWIuZGV2L2FydGljbGVzL2lucCN3aGF0X2lzX2FfZ29vZF9pbnBfc2NvcmUgKi9cbmNvbnN0IElOUFRocmVzaG9sZHMgPSBbMjAwLCA1MDBdO1xuXG4vLyBUaGUgZGVmYXVsdCBgZHVyYXRpb25UaHJlc2hvbGRgIHVzZWQgYWNyb3NzIHRoaXMgbGlicmFyeSBmb3Igb2JzZXJ2aW5nXG4vLyBgZXZlbnRgIGVudHJpZXMgdmlhIFBlcmZvcm1hbmNlT2JzZXJ2ZXIuXG5jb25zdCBERUZBVUxUX0RVUkFUSU9OX1RIUkVTSE9MRCA9IDQwO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIFtJTlBdKGh0dHBzOi8vd2ViLmRldi9hcnRpY2xlcy9pbnApIHZhbHVlIGZvciB0aGUgY3VycmVudFxuICogcGFnZSBhbmQgY2FsbHMgdGhlIGBjYWxsYmFja2AgZnVuY3Rpb24gb25jZSB0aGUgdmFsdWUgaXMgcmVhZHksIGFsb25nIHdpdGhcbiAqIHRoZSBgZXZlbnRgIHBlcmZvcm1hbmNlIGVudHJpZXMgcmVwb3J0ZWQgZm9yIHRoYXQgaW50ZXJhY3Rpb24uIFRoZSByZXBvcnRlZFxuICogdmFsdWUgaXMgYSBgRE9NSGlnaFJlc1RpbWVTdGFtcGAuXG4gKlxuICogQSBjdXN0b20gYGR1cmF0aW9uVGhyZXNob2xkYCBjb25maWd1cmF0aW9uIG9wdGlvbiBjYW4gb3B0aW9uYWxseSBiZSBwYXNzZWRcbiAqIHRvIGNvbnRyb2wgd2hhdCBgZXZlbnQtdGltaW5nYCBlbnRyaWVzIGFyZSBjb25zaWRlcmVkIGZvciBJTlAgcmVwb3J0aW5nLiBUaGVcbiAqIGRlZmF1bHQgdGhyZXNob2xkIGlzIGA0MGAsIHdoaWNoIG1lYW5zIElOUCBzY29yZXMgb2YgbGVzcyB0aGFuIDQwIHdpbGwgbm90XG4gKiBiZSByZXBvcnRlZC4gVG8gYXZvaWQgcmVwb3J0aW5nIG5vIGludGVyYWN0aW9ucyBpbiB0aGVzZSBjYXNlcywgdGhlIGxpYnJhcnlcbiAqIHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBpbnB1dCBkZWxheSBvZiB0aGUgZmlyc3QgaW50ZXJhY3Rpb24uIE5vdGUgdGhhdCB0aGlzXG4gKiB3aWxsIG5vdCBhZmZlY3QgeW91ciA3NXRoIHBlcmNlbnRpbGUgSU5QIHZhbHVlIHVubGVzcyB0aGF0IHZhbHVlIGlzIGFsc29cbiAqIGxlc3MgdGhhbiA0MCAod2VsbCBiZWxvdyB0aGUgcmVjb21tZW5kZWRcbiAqIFtnb29kXShodHRwczovL3dlYi5kZXYvYXJ0aWNsZXMvaW5wI3doYXRfaXNfYV9nb29kX2lucF9zY29yZSkgdGhyZXNob2xkKS5cbiAqXG4gKiBJZiB0aGUgYHJlcG9ydEFsbENoYW5nZXNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHNldCB0byBgdHJ1ZWAsIHRoZVxuICogYGNhbGxiYWNrYCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhcyBzb29uIGFzIHRoZSB2YWx1ZSBpcyBpbml0aWFsbHlcbiAqIGRldGVybWluZWQgYXMgd2VsbCBhcyBhbnkgdGltZSB0aGUgdmFsdWUgY2hhbmdlcyB0aHJvdWdob3V0IHRoZSBwYWdlXG4gKiBsaWZlc3Bhbi5cbiAqXG4gKiBfKipJbXBvcnRhbnQ6KiogSU5QIHNob3VsZCBiZSBjb250aW51YWxseSBtb25pdG9yZWQgZm9yIGNoYW5nZXMgdGhyb3VnaG91dFxuICogdGhlIGVudGlyZSBsaWZlc3BhbiBvZiBhIHBhZ2XigJRpbmNsdWRpbmcgaWYgdGhlIHVzZXIgcmV0dXJucyB0byB0aGUgcGFnZSBhZnRlclxuICogaXQncyBiZWVuIGhpZGRlbi9iYWNrZ3JvdW5kZWQuIEhvd2V2ZXIsIHNpbmNlIGJyb3dzZXJzIG9mdGVuIFt3aWxsIG5vdCBmaXJlXG4gKiBhZGRpdGlvbmFsIGNhbGxiYWNrcyBvbmNlIHRoZSB1c2VyIGhhcyBiYWNrZ3JvdW5kZWQgYVxuICogcGFnZV0oaHR0cHM6Ly9kZXZlbG9wZXIuY2hyb21lLmNvbS9ibG9nL3BhZ2UtbGlmZWN5Y2xlLWFwaS8jYWR2aWNlLWhpZGRlbiksXG4gKiBgY2FsbGJhY2tgIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiB0aGUgcGFnZSdzIHZpc2liaWxpdHkgc3RhdGUgY2hhbmdlcyB0b1xuICogaGlkZGVuLiBBcyBhIHJlc3VsdCwgdGhlIGBjYWxsYmFja2AgZnVuY3Rpb24gbWlnaHQgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzXG4gKiBkdXJpbmcgdGhlIHNhbWUgcGFnZSBsb2FkLl9cbiAqL1xuY29uc3Qgb25JTlAgPSAob25SZXBvcnQsIG9wdHMgPSB7fSkgPT4ge1xuICAvLyBSZXR1cm4gaWYgdGhlIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGFsbCBBUElzIG5lZWRlZCB0byBtZWFzdXJlIElOUC5cbiAgaWYgKCEoZ2xvYmFsVGhpcy5QZXJmb3JtYW5jZUV2ZW50VGltaW5nICYmICdpbnRlcmFjdGlvbklkJyBpbiBQZXJmb3JtYW5jZUV2ZW50VGltaW5nLnByb3RvdHlwZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB3aGVuQWN0aXZhdGVkKCgpID0+IHtcbiAgICAvLyBUT0RPKHBoaWxpcHdhbHRvbik6IHJlbW92ZSBvbmNlIHRoZSBwb2x5ZmlsbCBpcyBubyBsb25nZXIgbmVlZGVkLlxuICAgIGluaXRJbnRlcmFjdGlvbkNvdW50UG9seWZpbGwoKTtcblxuICAgIGNvbnN0IG1ldHJpYyA9IGluaXRNZXRyaWMoJ0lOUCcpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBsZXQgcmVwb3J0O1xuXG4gICAgY29uc3QgaW50ZXJhY3Rpb25NYW5hZ2VyID0gaW5pdFVuaXF1ZShvcHRzLCBJbnRlcmFjdGlvbk1hbmFnZXIpO1xuXG4gICAgY29uc3QgaGFuZGxlRW50cmllcyA9IChlbnRyaWVzKSA9PiB7XG4gICAgICAvLyBRdWV1ZSB0aGUgYGhhbmRsZUVudHJpZXMoKWAgY2FsbGJhY2sgaW4gdGhlIG5leHQgaWRsZSB0YXNrLlxuICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gaW5jcmVhc2UgdGhlIGNoYW5jZXMgdGhhdCBhbGwgZXZlbnQgZW50cmllcyB0aGF0XG4gICAgICAvLyBvY2N1cnJlZCBiZXR3ZWVuIHRoZSB1c2VyIGludGVyYWN0aW9uIGFuZCB0aGUgbmV4dCBwYWludFxuICAgICAgLy8gaGF2ZSBiZWVuIGRpc3BhdGNoZWQuIE5vdGU6IHRoZXJlIGlzIGN1cnJlbnRseSBhbiBleHBlcmltZW50XG4gICAgICAvLyBydW5uaW5nIGluIENocm9tZSAoRXZlbnRUaW1pbmdLZXlwcmVzc0FuZENvbXBvc2l0aW9uSW50ZXJhY3Rpb25JZClcbiAgICAgIC8vIDEyMysgdGhhdCBpZiByb2xsZWQgb3V0IGZ1bGx5IG1heSBtYWtlIHRoaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS5cbiAgICAgIHdoZW5JZGxlT3JIaWRkZW4oKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbk1hbmFnZXIuX3Byb2Nlc3NFbnRyeShlbnRyeSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbnAgPSBpbnRlcmFjdGlvbk1hbmFnZXIuX2VzdGltYXRlUDk4TG9uZ2VzdEludGVyYWN0aW9uKCk7XG5cbiAgICAgICAgaWYgKGlucCAmJiBpbnAuX2xhdGVuY3kgIT09IG1ldHJpYy52YWx1ZSkge1xuICAgICAgICAgIG1ldHJpYy52YWx1ZSA9IGlucC5fbGF0ZW5jeTtcbiAgICAgICAgICBtZXRyaWMuZW50cmllcyA9IGlucC5lbnRyaWVzO1xuICAgICAgICAgIHJlcG9ydCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcG8gPSBvYnNlcnZlKCdldmVudCcsIGhhbmRsZUVudHJpZXMsIHtcbiAgICAgIC8vIEV2ZW50IFRpbWluZyBlbnRyaWVzIGhhdmUgdGhlaXIgZHVyYXRpb25zIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgOG1zLFxuICAgICAgLy8gc28gYSBkdXJhdGlvbiBvZiA0MG1zIHdvdWxkIGJlIGFueSBldmVudCB0aGF0IHNwYW5zIDIuNSBvciBtb3JlIGZyYW1lc1xuICAgICAgLy8gYXQgNjBIei4gVGhpcyB0aHJlc2hvbGQgaXMgY2hvc2VuIHRvIHN0cmlrZSBhIGJhbGFuY2UgYmV0d2VlbiB1c2VmdWxuZXNzXG4gICAgICAvLyBhbmQgcGVyZm9ybWFuY2UuIFJ1bm5pbmcgdGhpcyBjYWxsYmFjayBmb3IgYW55IGludGVyYWN0aW9uIHRoYXQgc3BhbnNcbiAgICAgIC8vIGp1c3Qgb25lIG9yIHR3byBmcmFtZXMgaXMgbGlrZWx5IG5vdCB3b3J0aCB0aGUgaW5zaWdodCB0aGF0IGNvdWxkIGJlXG4gICAgICAvLyBnYWluZWQuXG4gICAgICBkdXJhdGlvblRocmVzaG9sZDogb3B0cy5kdXJhdGlvblRocmVzaG9sZCA/PyBERUZBVUxUX0RVUkFUSU9OX1RIUkVTSE9MRCxcbiAgICB9KTtcblxuICAgIHJlcG9ydCA9IGJpbmRSZXBvcnRlcihvblJlcG9ydCwgbWV0cmljLCBJTlBUaHJlc2hvbGRzLCBvcHRzLnJlcG9ydEFsbENoYW5nZXMpO1xuXG4gICAgaWYgKHBvKSB7XG4gICAgICAvLyBBbHNvIG9ic2VydmUgZW50cmllcyBvZiB0eXBlIGBmaXJzdC1pbnB1dGAuIFRoaXMgaXMgdXNlZnVsIGluIGNhc2VzXG4gICAgICAvLyB3aGVyZSB0aGUgZmlyc3QgaW50ZXJhY3Rpb24gaXMgbGVzcyB0aGFuIHRoZSBgZHVyYXRpb25UaHJlc2hvbGRgLlxuICAgICAgcG8ub2JzZXJ2ZSh7IHR5cGU6ICdmaXJzdC1pbnB1dCcsIGJ1ZmZlcmVkOiB0cnVlIH0pO1xuXG4gICAgICAvLyBzZW50cnk6IHdlIHVzZSBvbkhpZGRlbiBpbnN0ZWFkIG9mIGRpcmVjdGx5IGxpc3RlbmluZyB0byB2aXNpYmlsaXR5Y2hhbmdlXG4gICAgICAvLyBiZWNhdXNlIHNvbWUgYnJvd3NlcnMgd2Ugc3RpbGwgc3VwcG9ydCAoU2FmYXJpIDwxNC40KSBkb24ndCBmdWxseSBzdXBwb3J0XG4gICAgICAvLyBgdmlzaWJpbGl0eWNoYW5nZWAgb3IgaGF2ZSBrbm93biBidWdzIHcuci50IHRoZSBgdmlzaWJpbGl0eWNoYW5nZWAgZXZlbnQuXG4gICAgICBvbkhpZGRlbigoKSA9PiB7XG4gICAgICAgIGhhbmRsZUVudHJpZXMocG8udGFrZVJlY29yZHMoKSApO1xuICAgICAgICByZXBvcnQodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufTtcblxuZXhwb3J0IHsgSU5QVGhyZXNob2xkcywgb25JTlAgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldElOUC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getINP.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getLCP.js":
/*!*****************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getLCP.js ***!
  \*****************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   LCPThresholds: () => (/* binding */ LCPThresholds),\n/* harmony export */   onLCP: () => (/* binding */ onLCP)\n/* harmony export */ });\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../types.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/types.js\");\n/* harmony import */ var _lib_bindReporter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/bindReporter.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/bindReporter.js\");\n/* harmony import */ var _lib_getActivationStart_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/getActivationStart.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getActivationStart.js\");\n/* harmony import */ var _lib_getVisibilityWatcher_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/getVisibilityWatcher.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getVisibilityWatcher.js\");\n/* harmony import */ var _lib_initMetric_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/initMetric.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initMetric.js\");\n/* harmony import */ var _lib_initUnique_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/initUnique.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initUnique.js\");\n/* harmony import */ var _lib_LCPEntryManager_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/LCPEntryManager.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/LCPEntryManager.js\");\n/* harmony import */ var _lib_observe_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./lib/observe.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/observe.js\");\n/* harmony import */ var _lib_runOnce_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./lib/runOnce.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/runOnce.js\");\n/* harmony import */ var _lib_whenActivated_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./lib/whenActivated.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenActivated.js\");\n/* harmony import */ var _lib_whenIdleOrHidden_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./lib/whenIdleOrHidden.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenIdleOrHidden.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for LCP. See https://web.dev/articles/lcp#what_is_a_good_lcp_score */\nconst LCPThresholds = [2500, 4000];\n\n/**\n * Calculates the [LCP](https://web.dev/articles/lcp) value for the current page and\n * calls the `callback` function once the value is ready (along with the\n * relevant `largest-contentful-paint` performance entry used to determine the\n * value). The reported value is a `DOMHighResTimeStamp`.\n *\n * If the `reportAllChanges` configuration option is set to `true`, the\n * `callback` function will be called any time a new `largest-contentful-paint`\n * performance entry is dispatched, or once the final value of the metric has\n * been determined.\n */\nconst onLCP = (onReport, opts = {}) => {\n  (0,_lib_whenActivated_js__WEBPACK_IMPORTED_MODULE_9__.whenActivated)(() => {\n    const visibilityWatcher = (0,_lib_getVisibilityWatcher_js__WEBPACK_IMPORTED_MODULE_3__.getVisibilityWatcher)();\n    const metric = (0,_lib_initMetric_js__WEBPACK_IMPORTED_MODULE_4__.initMetric)('LCP');\n    let report;\n\n    const lcpEntryManager = (0,_lib_initUnique_js__WEBPACK_IMPORTED_MODULE_5__.initUnique)(opts, _lib_LCPEntryManager_js__WEBPACK_IMPORTED_MODULE_6__.LCPEntryManager);\n\n    const handleEntries = (entries) => {\n      // If reportAllChanges is set then call this function for each entry,\n      // otherwise only consider the last one.\n      if (!opts.reportAllChanges) {\n        // eslint-disable-next-line no-param-reassign\n        entries = entries.slice(-1);\n      }\n\n      for (const entry of entries) {\n        lcpEntryManager._processEntry(entry);\n\n        // Only report if the page wasn't hidden prior to LCP.\n        if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n          // The startTime attribute returns the value of the renderTime if it is\n          // not 0, and the value of the loadTime otherwise. The activationStart\n          // reference is used because LCP should be relative to page activation\n          // rather than navigation start if the page was prerendered. But in cases\n          // where `activationStart` occurs after the LCP, this time should be\n          // clamped at 0.\n          metric.value = Math.max(entry.startTime - (0,_lib_getActivationStart_js__WEBPACK_IMPORTED_MODULE_2__.getActivationStart)(), 0);\n          metric.entries = [entry];\n          report();\n        }\n      }\n    };\n\n    const po = (0,_lib_observe_js__WEBPACK_IMPORTED_MODULE_7__.observe)('largest-contentful-paint', handleEntries);\n\n    if (po) {\n      report = (0,_lib_bindReporter_js__WEBPACK_IMPORTED_MODULE_1__.bindReporter)(onReport, metric, LCPThresholds, opts.reportAllChanges);\n\n      // Ensure this logic only runs once, since it can be triggered from\n      // any of three different event listeners below.\n      const stopListening = (0,_lib_runOnce_js__WEBPACK_IMPORTED_MODULE_8__.runOnce)(() => {\n        handleEntries(po.takeRecords() );\n        po.disconnect();\n        report(true);\n      });\n\n      // Stop listening after input or visibilitychange.\n      // Note: while scrolling is an input that stops LCP observation, it's\n      // unreliable since it can be programmatically generated.\n      // See: https://github.com/GoogleChrome/web-vitals/issues/75\n      for (const type of ['keydown', 'click', 'visibilitychange']) {\n        // Wrap the listener in an idle callback so it's run in a separate\n        // task to reduce potential INP impact.\n        // https://github.com/GoogleChrome/web-vitals/issues/383\n        if (_types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.document) {\n          addEventListener(type, () => (0,_lib_whenIdleOrHidden_js__WEBPACK_IMPORTED_MODULE_10__.whenIdleOrHidden)(stopListening), {\n            capture: true,\n            once: true,\n          });\n        }\n      }\n    }\n  });\n};\n\n\n//# sourceMappingURL=getLCP.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9nZXRMQ1AuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUF3QztBQUNhO0FBQ1k7QUFDSTtBQUNwQjtBQUNBO0FBQ1U7QUFDaEI7QUFDQTtBQUNZO0FBQ007O0FBRTdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLEVBQUUsb0VBQWE7QUFDZiw4QkFBOEIsa0ZBQW9CO0FBQ2xELG1CQUFtQiw4REFBVTtBQUM3Qjs7QUFFQSw0QkFBNEIsOERBQVUsT0FBTyxvRUFBZTs7QUFFNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELDhFQUFrQjtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWUsd0RBQU87O0FBRXRCO0FBQ0EsZUFBZSxrRUFBWTs7QUFFM0I7QUFDQTtBQUNBLDRCQUE0Qix3REFBTztBQUNuQztBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDZDQUFNO0FBQ2xCLHVDQUF1QywyRUFBZ0I7QUFDdkQ7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRWdDO0FBQ2hDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vbWV0cmljcy93ZWItdml0YWxzL2dldExDUC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXSU5ET1cgfSBmcm9tICcuLi8uLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBiaW5kUmVwb3J0ZXIgfSBmcm9tICcuL2xpYi9iaW5kUmVwb3J0ZXIuanMnO1xuaW1wb3J0IHsgZ2V0QWN0aXZhdGlvblN0YXJ0IH0gZnJvbSAnLi9saWIvZ2V0QWN0aXZhdGlvblN0YXJ0LmpzJztcbmltcG9ydCB7IGdldFZpc2liaWxpdHlXYXRjaGVyIH0gZnJvbSAnLi9saWIvZ2V0VmlzaWJpbGl0eVdhdGNoZXIuanMnO1xuaW1wb3J0IHsgaW5pdE1ldHJpYyB9IGZyb20gJy4vbGliL2luaXRNZXRyaWMuanMnO1xuaW1wb3J0IHsgaW5pdFVuaXF1ZSB9IGZyb20gJy4vbGliL2luaXRVbmlxdWUuanMnO1xuaW1wb3J0IHsgTENQRW50cnlNYW5hZ2VyIH0gZnJvbSAnLi9saWIvTENQRW50cnlNYW5hZ2VyLmpzJztcbmltcG9ydCB7IG9ic2VydmUgfSBmcm9tICcuL2xpYi9vYnNlcnZlLmpzJztcbmltcG9ydCB7IHJ1bk9uY2UgfSBmcm9tICcuL2xpYi9ydW5PbmNlLmpzJztcbmltcG9ydCB7IHdoZW5BY3RpdmF0ZWQgfSBmcm9tICcuL2xpYi93aGVuQWN0aXZhdGVkLmpzJztcbmltcG9ydCB7IHdoZW5JZGxlT3JIaWRkZW4gfSBmcm9tICcuL2xpYi93aGVuSWRsZU9ySGlkZGVuLmpzJztcblxuLypcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cblxuLyoqIFRocmVzaG9sZHMgZm9yIExDUC4gU2VlIGh0dHBzOi8vd2ViLmRldi9hcnRpY2xlcy9sY3Ajd2hhdF9pc19hX2dvb2RfbGNwX3Njb3JlICovXG5jb25zdCBMQ1BUaHJlc2hvbGRzID0gWzI1MDAsIDQwMDBdO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIFtMQ1BdKGh0dHBzOi8vd2ViLmRldi9hcnRpY2xlcy9sY3ApIHZhbHVlIGZvciB0aGUgY3VycmVudCBwYWdlIGFuZFxuICogY2FsbHMgdGhlIGBjYWxsYmFja2AgZnVuY3Rpb24gb25jZSB0aGUgdmFsdWUgaXMgcmVhZHkgKGFsb25nIHdpdGggdGhlXG4gKiByZWxldmFudCBgbGFyZ2VzdC1jb250ZW50ZnVsLXBhaW50YCBwZXJmb3JtYW5jZSBlbnRyeSB1c2VkIHRvIGRldGVybWluZSB0aGVcbiAqIHZhbHVlKS4gVGhlIHJlcG9ydGVkIHZhbHVlIGlzIGEgYERPTUhpZ2hSZXNUaW1lU3RhbXBgLlxuICpcbiAqIElmIHRoZSBgcmVwb3J0QWxsQ2hhbmdlc2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgc2V0IHRvIGB0cnVlYCwgdGhlXG4gKiBgY2FsbGJhY2tgIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFueSB0aW1lIGEgbmV3IGBsYXJnZXN0LWNvbnRlbnRmdWwtcGFpbnRgXG4gKiBwZXJmb3JtYW5jZSBlbnRyeSBpcyBkaXNwYXRjaGVkLCBvciBvbmNlIHRoZSBmaW5hbCB2YWx1ZSBvZiB0aGUgbWV0cmljIGhhc1xuICogYmVlbiBkZXRlcm1pbmVkLlxuICovXG5jb25zdCBvbkxDUCA9IChvblJlcG9ydCwgb3B0cyA9IHt9KSA9PiB7XG4gIHdoZW5BY3RpdmF0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHZpc2liaWxpdHlXYXRjaGVyID0gZ2V0VmlzaWJpbGl0eVdhdGNoZXIoKTtcbiAgICBjb25zdCBtZXRyaWMgPSBpbml0TWV0cmljKCdMQ1AnKTtcbiAgICBsZXQgcmVwb3J0O1xuXG4gICAgY29uc3QgbGNwRW50cnlNYW5hZ2VyID0gaW5pdFVuaXF1ZShvcHRzLCBMQ1BFbnRyeU1hbmFnZXIpO1xuXG4gICAgY29uc3QgaGFuZGxlRW50cmllcyA9IChlbnRyaWVzKSA9PiB7XG4gICAgICAvLyBJZiByZXBvcnRBbGxDaGFuZ2VzIGlzIHNldCB0aGVuIGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgZWFjaCBlbnRyeSxcbiAgICAgIC8vIG90aGVyd2lzZSBvbmx5IGNvbnNpZGVyIHRoZSBsYXN0IG9uZS5cbiAgICAgIGlmICghb3B0cy5yZXBvcnRBbGxDaGFuZ2VzKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBlbnRyaWVzID0gZW50cmllcy5zbGljZSgtMSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBsY3BFbnRyeU1hbmFnZXIuX3Byb2Nlc3NFbnRyeShlbnRyeSk7XG5cbiAgICAgICAgLy8gT25seSByZXBvcnQgaWYgdGhlIHBhZ2Ugd2Fzbid0IGhpZGRlbiBwcmlvciB0byBMQ1AuXG4gICAgICAgIGlmIChlbnRyeS5zdGFydFRpbWUgPCB2aXNpYmlsaXR5V2F0Y2hlci5maXJzdEhpZGRlblRpbWUpIHtcbiAgICAgICAgICAvLyBUaGUgc3RhcnRUaW1lIGF0dHJpYnV0ZSByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgcmVuZGVyVGltZSBpZiBpdCBpc1xuICAgICAgICAgIC8vIG5vdCAwLCBhbmQgdGhlIHZhbHVlIG9mIHRoZSBsb2FkVGltZSBvdGhlcndpc2UuIFRoZSBhY3RpdmF0aW9uU3RhcnRcbiAgICAgICAgICAvLyByZWZlcmVuY2UgaXMgdXNlZCBiZWNhdXNlIExDUCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gcGFnZSBhY3RpdmF0aW9uXG4gICAgICAgICAgLy8gcmF0aGVyIHRoYW4gbmF2aWdhdGlvbiBzdGFydCBpZiB0aGUgcGFnZSB3YXMgcHJlcmVuZGVyZWQuIEJ1dCBpbiBjYXNlc1xuICAgICAgICAgIC8vIHdoZXJlIGBhY3RpdmF0aW9uU3RhcnRgIG9jY3VycyBhZnRlciB0aGUgTENQLCB0aGlzIHRpbWUgc2hvdWxkIGJlXG4gICAgICAgICAgLy8gY2xhbXBlZCBhdCAwLlxuICAgICAgICAgIG1ldHJpYy52YWx1ZSA9IE1hdGgubWF4KGVudHJ5LnN0YXJ0VGltZSAtIGdldEFjdGl2YXRpb25TdGFydCgpLCAwKTtcbiAgICAgICAgICBtZXRyaWMuZW50cmllcyA9IFtlbnRyeV07XG4gICAgICAgICAgcmVwb3J0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcG8gPSBvYnNlcnZlKCdsYXJnZXN0LWNvbnRlbnRmdWwtcGFpbnQnLCBoYW5kbGVFbnRyaWVzKTtcblxuICAgIGlmIChwbykge1xuICAgICAgcmVwb3J0ID0gYmluZFJlcG9ydGVyKG9uUmVwb3J0LCBtZXRyaWMsIExDUFRocmVzaG9sZHMsIG9wdHMucmVwb3J0QWxsQ2hhbmdlcyk7XG5cbiAgICAgIC8vIEVuc3VyZSB0aGlzIGxvZ2ljIG9ubHkgcnVucyBvbmNlLCBzaW5jZSBpdCBjYW4gYmUgdHJpZ2dlcmVkIGZyb21cbiAgICAgIC8vIGFueSBvZiB0aHJlZSBkaWZmZXJlbnQgZXZlbnQgbGlzdGVuZXJzIGJlbG93LlxuICAgICAgY29uc3Qgc3RvcExpc3RlbmluZyA9IHJ1bk9uY2UoKCkgPT4ge1xuICAgICAgICBoYW5kbGVFbnRyaWVzKHBvLnRha2VSZWNvcmRzKCkgKTtcbiAgICAgICAgcG8uZGlzY29ubmVjdCgpO1xuICAgICAgICByZXBvcnQodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gU3RvcCBsaXN0ZW5pbmcgYWZ0ZXIgaW5wdXQgb3IgdmlzaWJpbGl0eWNoYW5nZS5cbiAgICAgIC8vIE5vdGU6IHdoaWxlIHNjcm9sbGluZyBpcyBhbiBpbnB1dCB0aGF0IHN0b3BzIExDUCBvYnNlcnZhdGlvbiwgaXQnc1xuICAgICAgLy8gdW5yZWxpYWJsZSBzaW5jZSBpdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBnZW5lcmF0ZWQuXG4gICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWUvd2ViLXZpdGFscy9pc3N1ZXMvNzVcbiAgICAgIGZvciAoY29uc3QgdHlwZSBvZiBbJ2tleWRvd24nLCAnY2xpY2snLCAndmlzaWJpbGl0eWNoYW5nZSddKSB7XG4gICAgICAgIC8vIFdyYXAgdGhlIGxpc3RlbmVyIGluIGFuIGlkbGUgY2FsbGJhY2sgc28gaXQncyBydW4gaW4gYSBzZXBhcmF0ZVxuICAgICAgICAvLyB0YXNrIHRvIHJlZHVjZSBwb3RlbnRpYWwgSU5QIGltcGFjdC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZS93ZWItdml0YWxzL2lzc3Vlcy8zODNcbiAgICAgICAgaWYgKFdJTkRPVy5kb2N1bWVudCkge1xuICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgKCkgPT4gd2hlbklkbGVPckhpZGRlbihzdG9wTGlzdGVuaW5nKSwge1xuICAgICAgICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICAgICAgICAgIG9uY2U6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxuZXhwb3J0IHsgTENQVGhyZXNob2xkcywgb25MQ1AgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldExDUC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/getLCP.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/InteractionManager.js":
/*!*********************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/InteractionManager.js ***!
  \*********************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   InteractionManager: () => (/* binding */ InteractionManager)\n/* harmony export */ });\n/* harmony import */ var _polyfills_interactionCountPolyfill_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./polyfills/interactionCountPolyfill.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/polyfills/interactionCountPolyfill.js\");\n\n\n/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n// To prevent unnecessary memory usage on pages with lots of interactions,\n// store at most 10 of the longest interactions to consider as INP candidates.\nconst MAX_INTERACTIONS_TO_CONSIDER = 10;\n\n// Used to store the interaction count after a bfcache restore, since p98\n// interaction latencies should only consider the current navigation.\nlet prevInteractionCount = 0;\n\n/**\n * Returns the interaction count since the last bfcache restore (or for the\n * full page lifecycle if there were no bfcache restores).\n */\nconst getInteractionCountForNavigation = () => {\n  return (0,_polyfills_interactionCountPolyfill_js__WEBPACK_IMPORTED_MODULE_0__.getInteractionCount)() - prevInteractionCount;\n};\n\n/**\n *\n */\nclass InteractionManager {constructor() { InteractionManager.prototype.__init.call(this);InteractionManager.prototype.__init2.call(this); }\n  /**\n   * A list of longest interactions on the page (by latency) sorted so the\n   * longest one is first. The list is at most MAX_INTERACTIONS_TO_CONSIDER\n   * long.\n   */\n  // eslint-disable-next-line @sentry-internal/sdk/no-class-field-initializers, @typescript-eslint/explicit-member-accessibility\n  __init() {this._longestInteractionList = [];}\n\n  /**\n   * A mapping of longest interactions by their interaction ID.\n   * This is used for faster lookup.\n   */\n  // eslint-disable-next-line @sentry-internal/sdk/no-class-field-initializers, @typescript-eslint/explicit-member-accessibility\n  __init2() {this._longestInteractionMap = new Map();}\n\n  // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility\n\n  // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility\n\n  // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility, jsdoc/require-jsdoc\n  _resetInteractions() {\n    prevInteractionCount = (0,_polyfills_interactionCountPolyfill_js__WEBPACK_IMPORTED_MODULE_0__.getInteractionCount)();\n    this._longestInteractionList.length = 0;\n    this._longestInteractionMap.clear();\n  }\n\n  /**\n   * Returns the estimated p98 longest interaction based on the stored\n   * interaction candidates and the interaction count for the current page.\n   */\n  // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility\n  _estimateP98LongestInteraction() {\n    const candidateInteractionIndex = Math.min(\n      this._longestInteractionList.length - 1,\n      Math.floor(getInteractionCountForNavigation() / 50),\n    );\n\n    return this._longestInteractionList[candidateInteractionIndex];\n  }\n\n  /**\n   * Takes a performance entry and adds it to the list of worst interactions\n   * if its duration is long enough to make it among the worst. If the\n   * entry is part of an existing interaction, it is merged and the latency\n   * and entries list is updated as needed.\n   */\n  // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility\n  _processEntry(entry) {\n    this._onBeforeProcessingEntry?.(entry);\n\n    // Skip further processing for entries that cannot be INP candidates.\n    if (!(entry.interactionId || entry.entryType === 'first-input')) return;\n\n    // The least-long of the 10 longest interactions.\n    const minLongestInteraction = this._longestInteractionList.at(-1);\n\n    let interaction = this._longestInteractionMap.get(entry.interactionId);\n\n    // Only process the entry if it's possibly one of the ten longest,\n    // or if it's part of an existing interaction.\n    if (\n      interaction ||\n      this._longestInteractionList.length < MAX_INTERACTIONS_TO_CONSIDER ||\n      // If the above conditions are false, `minLongestInteraction` will be set.\n      entry.duration > minLongestInteraction._latency\n    ) {\n      // If the interaction already exists, update it. Otherwise create one.\n      if (interaction) {\n        // If the new entry has a longer duration, replace the old entries,\n        // otherwise add to the array.\n        if (entry.duration > interaction._latency) {\n          interaction.entries = [entry];\n          interaction._latency = entry.duration;\n        } else if (entry.duration === interaction._latency && entry.startTime === interaction.entries[0].startTime) {\n          interaction.entries.push(entry);\n        }\n      } else {\n        interaction = {\n          id: entry.interactionId,\n          entries: [entry],\n          _latency: entry.duration,\n        };\n        this._longestInteractionMap.set(interaction.id, interaction);\n        this._longestInteractionList.push(interaction);\n      }\n\n      // Sort the entries by latency (descending) and keep only the top ten.\n      this._longestInteractionList.sort((a, b) => b._latency - a._latency);\n      if (this._longestInteractionList.length > MAX_INTERACTIONS_TO_CONSIDER) {\n        const removedInteractions = this._longestInteractionList.splice(MAX_INTERACTIONS_TO_CONSIDER);\n\n        for (const interaction of removedInteractions) {\n          this._longestInteractionMap.delete(interaction.id);\n        }\n      }\n\n      // Call any post-processing on the interaction\n      this._onAfterProcessingINPCandidate?.(interaction);\n    }\n  }\n}\n\n\n//# sourceMappingURL=InteractionManager.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvSW50ZXJhY3Rpb25NYW5hZ2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQThFOztBQUU5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsMkZBQW1CO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixnQkFBZ0IsK0NBQStDO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQiwyRkFBbUI7QUFDOUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRThCO0FBQzlCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vbWV0cmljcy93ZWItdml0YWxzL2xpYi9JbnRlcmFjdGlvbk1hbmFnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0SW50ZXJhY3Rpb25Db3VudCB9IGZyb20gJy4vcG9seWZpbGxzL2ludGVyYWN0aW9uQ291bnRQb2x5ZmlsbC5qcyc7XG5cbi8qXG4gKiBDb3B5cmlnaHQgMjAyNCBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5cbi8vIFRvIHByZXZlbnQgdW5uZWNlc3NhcnkgbWVtb3J5IHVzYWdlIG9uIHBhZ2VzIHdpdGggbG90cyBvZiBpbnRlcmFjdGlvbnMsXG4vLyBzdG9yZSBhdCBtb3N0IDEwIG9mIHRoZSBsb25nZXN0IGludGVyYWN0aW9ucyB0byBjb25zaWRlciBhcyBJTlAgY2FuZGlkYXRlcy5cbmNvbnN0IE1BWF9JTlRFUkFDVElPTlNfVE9fQ09OU0lERVIgPSAxMDtcblxuLy8gVXNlZCB0byBzdG9yZSB0aGUgaW50ZXJhY3Rpb24gY291bnQgYWZ0ZXIgYSBiZmNhY2hlIHJlc3RvcmUsIHNpbmNlIHA5OFxuLy8gaW50ZXJhY3Rpb24gbGF0ZW5jaWVzIHNob3VsZCBvbmx5IGNvbnNpZGVyIHRoZSBjdXJyZW50IG5hdmlnYXRpb24uXG5sZXQgcHJldkludGVyYWN0aW9uQ291bnQgPSAwO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGludGVyYWN0aW9uIGNvdW50IHNpbmNlIHRoZSBsYXN0IGJmY2FjaGUgcmVzdG9yZSAob3IgZm9yIHRoZVxuICogZnVsbCBwYWdlIGxpZmVjeWNsZSBpZiB0aGVyZSB3ZXJlIG5vIGJmY2FjaGUgcmVzdG9yZXMpLlxuICovXG5jb25zdCBnZXRJbnRlcmFjdGlvbkNvdW50Rm9yTmF2aWdhdGlvbiA9ICgpID0+IHtcbiAgcmV0dXJuIGdldEludGVyYWN0aW9uQ291bnQoKSAtIHByZXZJbnRlcmFjdGlvbkNvdW50O1xufTtcblxuLyoqXG4gKlxuICovXG5jbGFzcyBJbnRlcmFjdGlvbk1hbmFnZXIge2NvbnN0cnVjdG9yKCkgeyBJbnRlcmFjdGlvbk1hbmFnZXIucHJvdG90eXBlLl9faW5pdC5jYWxsKHRoaXMpO0ludGVyYWN0aW9uTWFuYWdlci5wcm90b3R5cGUuX19pbml0Mi5jYWxsKHRoaXMpOyB9XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgbG9uZ2VzdCBpbnRlcmFjdGlvbnMgb24gdGhlIHBhZ2UgKGJ5IGxhdGVuY3kpIHNvcnRlZCBzbyB0aGVcbiAgICogbG9uZ2VzdCBvbmUgaXMgZmlyc3QuIFRoZSBsaXN0IGlzIGF0IG1vc3QgTUFYX0lOVEVSQUNUSU9OU19UT19DT05TSURFUlxuICAgKiBsb25nLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBzZW50cnktaW50ZXJuYWwvc2RrL25vLWNsYXNzLWZpZWxkLWluaXRpYWxpemVycywgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1lbWJlci1hY2Nlc3NpYmlsaXR5XG4gIF9faW5pdCgpIHt0aGlzLl9sb25nZXN0SW50ZXJhY3Rpb25MaXN0ID0gW107fVxuXG4gIC8qKlxuICAgKiBBIG1hcHBpbmcgb2YgbG9uZ2VzdCBpbnRlcmFjdGlvbnMgYnkgdGhlaXIgaW50ZXJhY3Rpb24gSUQuXG4gICAqIFRoaXMgaXMgdXNlZCBmb3IgZmFzdGVyIGxvb2t1cC5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2VudHJ5LWludGVybmFsL3Nkay9uby1jbGFzcy1maWVsZC1pbml0aWFsaXplcnMsIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tZW1iZXItYWNjZXNzaWJpbGl0eVxuICBfX2luaXQyKCkge3RoaXMuX2xvbmdlc3RJbnRlcmFjdGlvbk1hcCA9IG5ldyBNYXAoKTt9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tZW1iZXItYWNjZXNzaWJpbGl0eVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbWVtYmVyLWFjY2Vzc2liaWxpdHlcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1lbWJlci1hY2Nlc3NpYmlsaXR5LCBqc2RvYy9yZXF1aXJlLWpzZG9jXG4gIF9yZXNldEludGVyYWN0aW9ucygpIHtcbiAgICBwcmV2SW50ZXJhY3Rpb25Db3VudCA9IGdldEludGVyYWN0aW9uQ291bnQoKTtcbiAgICB0aGlzLl9sb25nZXN0SW50ZXJhY3Rpb25MaXN0Lmxlbmd0aCA9IDA7XG4gICAgdGhpcy5fbG9uZ2VzdEludGVyYWN0aW9uTWFwLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXN0aW1hdGVkIHA5OCBsb25nZXN0IGludGVyYWN0aW9uIGJhc2VkIG9uIHRoZSBzdG9yZWRcbiAgICogaW50ZXJhY3Rpb24gY2FuZGlkYXRlcyBhbmQgdGhlIGludGVyYWN0aW9uIGNvdW50IGZvciB0aGUgY3VycmVudCBwYWdlLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tZW1iZXItYWNjZXNzaWJpbGl0eVxuICBfZXN0aW1hdGVQOThMb25nZXN0SW50ZXJhY3Rpb24oKSB7XG4gICAgY29uc3QgY2FuZGlkYXRlSW50ZXJhY3Rpb25JbmRleCA9IE1hdGgubWluKFxuICAgICAgdGhpcy5fbG9uZ2VzdEludGVyYWN0aW9uTGlzdC5sZW5ndGggLSAxLFxuICAgICAgTWF0aC5mbG9vcihnZXRJbnRlcmFjdGlvbkNvdW50Rm9yTmF2aWdhdGlvbigpIC8gNTApLFxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5fbG9uZ2VzdEludGVyYWN0aW9uTGlzdFtjYW5kaWRhdGVJbnRlcmFjdGlvbkluZGV4XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBhIHBlcmZvcm1hbmNlIGVudHJ5IGFuZCBhZGRzIGl0IHRvIHRoZSBsaXN0IG9mIHdvcnN0IGludGVyYWN0aW9uc1xuICAgKiBpZiBpdHMgZHVyYXRpb24gaXMgbG9uZyBlbm91Z2ggdG8gbWFrZSBpdCBhbW9uZyB0aGUgd29yc3QuIElmIHRoZVxuICAgKiBlbnRyeSBpcyBwYXJ0IG9mIGFuIGV4aXN0aW5nIGludGVyYWN0aW9uLCBpdCBpcyBtZXJnZWQgYW5kIHRoZSBsYXRlbmN5XG4gICAqIGFuZCBlbnRyaWVzIGxpc3QgaXMgdXBkYXRlZCBhcyBuZWVkZWQuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1lbWJlci1hY2Nlc3NpYmlsaXR5XG4gIF9wcm9jZXNzRW50cnkoZW50cnkpIHtcbiAgICB0aGlzLl9vbkJlZm9yZVByb2Nlc3NpbmdFbnRyeT8uKGVudHJ5KTtcblxuICAgIC8vIFNraXAgZnVydGhlciBwcm9jZXNzaW5nIGZvciBlbnRyaWVzIHRoYXQgY2Fubm90IGJlIElOUCBjYW5kaWRhdGVzLlxuICAgIGlmICghKGVudHJ5LmludGVyYWN0aW9uSWQgfHwgZW50cnkuZW50cnlUeXBlID09PSAnZmlyc3QtaW5wdXQnKSkgcmV0dXJuO1xuXG4gICAgLy8gVGhlIGxlYXN0LWxvbmcgb2YgdGhlIDEwIGxvbmdlc3QgaW50ZXJhY3Rpb25zLlxuICAgIGNvbnN0IG1pbkxvbmdlc3RJbnRlcmFjdGlvbiA9IHRoaXMuX2xvbmdlc3RJbnRlcmFjdGlvbkxpc3QuYXQoLTEpO1xuXG4gICAgbGV0IGludGVyYWN0aW9uID0gdGhpcy5fbG9uZ2VzdEludGVyYWN0aW9uTWFwLmdldChlbnRyeS5pbnRlcmFjdGlvbklkKTtcblxuICAgIC8vIE9ubHkgcHJvY2VzcyB0aGUgZW50cnkgaWYgaXQncyBwb3NzaWJseSBvbmUgb2YgdGhlIHRlbiBsb25nZXN0LFxuICAgIC8vIG9yIGlmIGl0J3MgcGFydCBvZiBhbiBleGlzdGluZyBpbnRlcmFjdGlvbi5cbiAgICBpZiAoXG4gICAgICBpbnRlcmFjdGlvbiB8fFxuICAgICAgdGhpcy5fbG9uZ2VzdEludGVyYWN0aW9uTGlzdC5sZW5ndGggPCBNQVhfSU5URVJBQ1RJT05TX1RPX0NPTlNJREVSIHx8XG4gICAgICAvLyBJZiB0aGUgYWJvdmUgY29uZGl0aW9ucyBhcmUgZmFsc2UsIGBtaW5Mb25nZXN0SW50ZXJhY3Rpb25gIHdpbGwgYmUgc2V0LlxuICAgICAgZW50cnkuZHVyYXRpb24gPiBtaW5Mb25nZXN0SW50ZXJhY3Rpb24uX2xhdGVuY3lcbiAgICApIHtcbiAgICAgIC8vIElmIHRoZSBpbnRlcmFjdGlvbiBhbHJlYWR5IGV4aXN0cywgdXBkYXRlIGl0LiBPdGhlcndpc2UgY3JlYXRlIG9uZS5cbiAgICAgIGlmIChpbnRlcmFjdGlvbikge1xuICAgICAgICAvLyBJZiB0aGUgbmV3IGVudHJ5IGhhcyBhIGxvbmdlciBkdXJhdGlvbiwgcmVwbGFjZSB0aGUgb2xkIGVudHJpZXMsXG4gICAgICAgIC8vIG90aGVyd2lzZSBhZGQgdG8gdGhlIGFycmF5LlxuICAgICAgICBpZiAoZW50cnkuZHVyYXRpb24gPiBpbnRlcmFjdGlvbi5fbGF0ZW5jeSkge1xuICAgICAgICAgIGludGVyYWN0aW9uLmVudHJpZXMgPSBbZW50cnldO1xuICAgICAgICAgIGludGVyYWN0aW9uLl9sYXRlbmN5ID0gZW50cnkuZHVyYXRpb247XG4gICAgICAgIH0gZWxzZSBpZiAoZW50cnkuZHVyYXRpb24gPT09IGludGVyYWN0aW9uLl9sYXRlbmN5ICYmIGVudHJ5LnN0YXJ0VGltZSA9PT0gaW50ZXJhY3Rpb24uZW50cmllc1swXS5zdGFydFRpbWUpIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5lbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnRlcmFjdGlvbiA9IHtcbiAgICAgICAgICBpZDogZW50cnkuaW50ZXJhY3Rpb25JZCxcbiAgICAgICAgICBlbnRyaWVzOiBbZW50cnldLFxuICAgICAgICAgIF9sYXRlbmN5OiBlbnRyeS5kdXJhdGlvbixcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fbG9uZ2VzdEludGVyYWN0aW9uTWFwLnNldChpbnRlcmFjdGlvbi5pZCwgaW50ZXJhY3Rpb24pO1xuICAgICAgICB0aGlzLl9sb25nZXN0SW50ZXJhY3Rpb25MaXN0LnB1c2goaW50ZXJhY3Rpb24pO1xuICAgICAgfVxuXG4gICAgICAvLyBTb3J0IHRoZSBlbnRyaWVzIGJ5IGxhdGVuY3kgKGRlc2NlbmRpbmcpIGFuZCBrZWVwIG9ubHkgdGhlIHRvcCB0ZW4uXG4gICAgICB0aGlzLl9sb25nZXN0SW50ZXJhY3Rpb25MaXN0LnNvcnQoKGEsIGIpID0+IGIuX2xhdGVuY3kgLSBhLl9sYXRlbmN5KTtcbiAgICAgIGlmICh0aGlzLl9sb25nZXN0SW50ZXJhY3Rpb25MaXN0Lmxlbmd0aCA+IE1BWF9JTlRFUkFDVElPTlNfVE9fQ09OU0lERVIpIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlZEludGVyYWN0aW9ucyA9IHRoaXMuX2xvbmdlc3RJbnRlcmFjdGlvbkxpc3Quc3BsaWNlKE1BWF9JTlRFUkFDVElPTlNfVE9fQ09OU0lERVIpO1xuXG4gICAgICAgIGZvciAoY29uc3QgaW50ZXJhY3Rpb24gb2YgcmVtb3ZlZEludGVyYWN0aW9ucykge1xuICAgICAgICAgIHRoaXMuX2xvbmdlc3RJbnRlcmFjdGlvbk1hcC5kZWxldGUoaW50ZXJhY3Rpb24uaWQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENhbGwgYW55IHBvc3QtcHJvY2Vzc2luZyBvbiB0aGUgaW50ZXJhY3Rpb25cbiAgICAgIHRoaXMuX29uQWZ0ZXJQcm9jZXNzaW5nSU5QQ2FuZGlkYXRlPy4oaW50ZXJhY3Rpb24pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgeyBJbnRlcmFjdGlvbk1hbmFnZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUludGVyYWN0aW9uTWFuYWdlci5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/InteractionManager.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/LCPEntryManager.js":
/*!******************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/LCPEntryManager.js ***!
  \******************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   LCPEntryManager: () => (/* binding */ LCPEntryManager)\n/* harmony export */ });\n/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// eslint-disable-next-line jsdoc/require-jsdoc\nclass LCPEntryManager {\n  // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility\n\n  // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility, jsdoc/require-jsdoc\n  _processEntry(entry) {\n    this._onBeforeProcessingEntry?.(entry);\n  }\n}\n\n\n//# sourceMappingURL=LCPEntryManager.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvTENQRW50cnlNYW5hZ2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRTJCO0FBQzNCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vbWV0cmljcy93ZWItdml0YWxzL2xpYi9MQ1BFbnRyeU1hbmFnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDI0IEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5jbGFzcyBMQ1BFbnRyeU1hbmFnZXIge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1lbWJlci1hY2Nlc3NpYmlsaXR5XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tZW1iZXItYWNjZXNzaWJpbGl0eSwganNkb2MvcmVxdWlyZS1qc2RvY1xuICBfcHJvY2Vzc0VudHJ5KGVudHJ5KSB7XG4gICAgdGhpcy5fb25CZWZvcmVQcm9jZXNzaW5nRW50cnk/LihlbnRyeSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgTENQRW50cnlNYW5hZ2VyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1MQ1BFbnRyeU1hbmFnZXIuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/LCPEntryManager.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/LayoutShiftManager.js":
/*!*********************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/LayoutShiftManager.js ***!
  \*********************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   LayoutShiftManager: () => (/* binding */ LayoutShiftManager)\n/* harmony export */ });\n/* eslint-disable jsdoc/require-jsdoc */\n/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass LayoutShiftManager {constructor() { LayoutShiftManager.prototype.__init.call(this);LayoutShiftManager.prototype.__init2.call(this); }\n  // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility\n\n  // eslint-disable-next-line @sentry-internal/sdk/no-class-field-initializers, @typescript-eslint/explicit-member-accessibility\n  __init() {this._sessionValue = 0;}\n  // eslint-disable-next-line @sentry-internal/sdk/no-class-field-initializers, @typescript-eslint/explicit-member-accessibility\n  __init2() {this._sessionEntries = [];}\n\n  // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility\n  _processEntry(entry) {\n    // Only count layout shifts without recent user input.\n    if (entry.hadRecentInput) return;\n\n    const firstSessionEntry = this._sessionEntries[0];\n    // This previously used `this._sessionEntries.at(-1)` but that is ES2022. We support ES2021 and earlier.\n    const lastSessionEntry = this._sessionEntries[this._sessionEntries.length - 1];\n\n    // If the entry occurred less than 1 second after the previous entry\n    // and less than 5 seconds after the first entry in the session,\n    // include the entry in the current session. Otherwise, start a new\n    // session.\n    if (\n      this._sessionValue &&\n      firstSessionEntry &&\n      lastSessionEntry &&\n      entry.startTime - lastSessionEntry.startTime < 1000 &&\n      entry.startTime - firstSessionEntry.startTime < 5000\n    ) {\n      this._sessionValue += entry.value;\n      this._sessionEntries.push(entry);\n    } else {\n      this._sessionValue = entry.value;\n      this._sessionEntries = [entry];\n    }\n\n    this._onAfterProcessingUnexpectedShift?.(entry);\n  }\n}\n\n\n//# sourceMappingURL=LayoutShiftManager.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvTGF5b3V0U2hpZnRNYW5hZ2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQkFBMEIsZ0JBQWdCLCtDQUErQztBQUN6Rjs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRThCO0FBQzlCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vbWV0cmljcy93ZWItdml0YWxzL2xpYi9MYXlvdXRTaGlmdE1hbmFnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1qc2RvYyAqL1xuLypcbiAqIENvcHlyaWdodCAyMDI0IEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmNsYXNzIExheW91dFNoaWZ0TWFuYWdlciB7Y29uc3RydWN0b3IoKSB7IExheW91dFNoaWZ0TWFuYWdlci5wcm90b3R5cGUuX19pbml0LmNhbGwodGhpcyk7TGF5b3V0U2hpZnRNYW5hZ2VyLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7IH1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tZW1iZXItYWNjZXNzaWJpbGl0eVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2VudHJ5LWludGVybmFsL3Nkay9uby1jbGFzcy1maWVsZC1pbml0aWFsaXplcnMsIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tZW1iZXItYWNjZXNzaWJpbGl0eVxuICBfX2luaXQoKSB7dGhpcy5fc2Vzc2lvblZhbHVlID0gMDt9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2VudHJ5LWludGVybmFsL3Nkay9uby1jbGFzcy1maWVsZC1pbml0aWFsaXplcnMsIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tZW1iZXItYWNjZXNzaWJpbGl0eVxuICBfX2luaXQyKCkge3RoaXMuX3Nlc3Npb25FbnRyaWVzID0gW107fVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbWVtYmVyLWFjY2Vzc2liaWxpdHlcbiAgX3Byb2Nlc3NFbnRyeShlbnRyeSkge1xuICAgIC8vIE9ubHkgY291bnQgbGF5b3V0IHNoaWZ0cyB3aXRob3V0IHJlY2VudCB1c2VyIGlucHV0LlxuICAgIGlmIChlbnRyeS5oYWRSZWNlbnRJbnB1dCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZmlyc3RTZXNzaW9uRW50cnkgPSB0aGlzLl9zZXNzaW9uRW50cmllc1swXTtcbiAgICAvLyBUaGlzIHByZXZpb3VzbHkgdXNlZCBgdGhpcy5fc2Vzc2lvbkVudHJpZXMuYXQoLTEpYCBidXQgdGhhdCBpcyBFUzIwMjIuIFdlIHN1cHBvcnQgRVMyMDIxIGFuZCBlYXJsaWVyLlxuICAgIGNvbnN0IGxhc3RTZXNzaW9uRW50cnkgPSB0aGlzLl9zZXNzaW9uRW50cmllc1t0aGlzLl9zZXNzaW9uRW50cmllcy5sZW5ndGggLSAxXTtcblxuICAgIC8vIElmIHRoZSBlbnRyeSBvY2N1cnJlZCBsZXNzIHRoYW4gMSBzZWNvbmQgYWZ0ZXIgdGhlIHByZXZpb3VzIGVudHJ5XG4gICAgLy8gYW5kIGxlc3MgdGhhbiA1IHNlY29uZHMgYWZ0ZXIgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBzZXNzaW9uLFxuICAgIC8vIGluY2x1ZGUgdGhlIGVudHJ5IGluIHRoZSBjdXJyZW50IHNlc3Npb24uIE90aGVyd2lzZSwgc3RhcnQgYSBuZXdcbiAgICAvLyBzZXNzaW9uLlxuICAgIGlmIChcbiAgICAgIHRoaXMuX3Nlc3Npb25WYWx1ZSAmJlxuICAgICAgZmlyc3RTZXNzaW9uRW50cnkgJiZcbiAgICAgIGxhc3RTZXNzaW9uRW50cnkgJiZcbiAgICAgIGVudHJ5LnN0YXJ0VGltZSAtIGxhc3RTZXNzaW9uRW50cnkuc3RhcnRUaW1lIDwgMTAwMCAmJlxuICAgICAgZW50cnkuc3RhcnRUaW1lIC0gZmlyc3RTZXNzaW9uRW50cnkuc3RhcnRUaW1lIDwgNTAwMFxuICAgICkge1xuICAgICAgdGhpcy5fc2Vzc2lvblZhbHVlICs9IGVudHJ5LnZhbHVlO1xuICAgICAgdGhpcy5fc2Vzc2lvbkVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Nlc3Npb25WYWx1ZSA9IGVudHJ5LnZhbHVlO1xuICAgICAgdGhpcy5fc2Vzc2lvbkVudHJpZXMgPSBbZW50cnldO1xuICAgIH1cblxuICAgIHRoaXMuX29uQWZ0ZXJQcm9jZXNzaW5nVW5leHBlY3RlZFNoaWZ0Py4oZW50cnkpO1xuICB9XG59XG5cbmV4cG9ydCB7IExheW91dFNoaWZ0TWFuYWdlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TGF5b3V0U2hpZnRNYW5hZ2VyLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/LayoutShiftManager.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/bindReporter.js":
/*!***************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/bindReporter.js ***!
  \***************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   bindReporter: () => (/* binding */ bindReporter)\n/* harmony export */ });\nconst getRating = (value, thresholds) => {\n  if (value > thresholds[1]) {\n    return 'poor';\n  }\n  if (value > thresholds[0]) {\n    return 'needs-improvement';\n  }\n  return 'good';\n};\n\nconst bindReporter = (\n  callback,\n  metric,\n  thresholds,\n  reportAllChanges,\n) => {\n  let prevValue;\n  let delta;\n  return (forceReport) => {\n    if (metric.value >= 0) {\n      if (forceReport || reportAllChanges) {\n        delta = metric.value - (prevValue ?? 0);\n\n        // Report the metric if there's a non-zero delta or if no previous\n        // value exists (which can happen in the case of the document becoming\n        // hidden when the metric value is 0).\n        // See: https://github.com/GoogleChrome/web-vitals/issues/14\n        if (delta || prevValue === undefined) {\n          prevValue = metric.value;\n          metric.delta = delta;\n          metric.rating = getRating(metric.value, thresholds);\n          callback(metric);\n        }\n      }\n    }\n  };\n};\n\n\n//# sourceMappingURL=bindReporter.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvYmluZFJlcG9ydGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRXdCO0FBQ3hCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vbWV0cmljcy93ZWItdml0YWxzL2xpYi9iaW5kUmVwb3J0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZ2V0UmF0aW5nID0gKHZhbHVlLCB0aHJlc2hvbGRzKSA9PiB7XG4gIGlmICh2YWx1ZSA+IHRocmVzaG9sZHNbMV0pIHtcbiAgICByZXR1cm4gJ3Bvb3InO1xuICB9XG4gIGlmICh2YWx1ZSA+IHRocmVzaG9sZHNbMF0pIHtcbiAgICByZXR1cm4gJ25lZWRzLWltcHJvdmVtZW50JztcbiAgfVxuICByZXR1cm4gJ2dvb2QnO1xufTtcblxuY29uc3QgYmluZFJlcG9ydGVyID0gKFxuICBjYWxsYmFjayxcbiAgbWV0cmljLFxuICB0aHJlc2hvbGRzLFxuICByZXBvcnRBbGxDaGFuZ2VzLFxuKSA9PiB7XG4gIGxldCBwcmV2VmFsdWU7XG4gIGxldCBkZWx0YTtcbiAgcmV0dXJuIChmb3JjZVJlcG9ydCkgPT4ge1xuICAgIGlmIChtZXRyaWMudmFsdWUgPj0gMCkge1xuICAgICAgaWYgKGZvcmNlUmVwb3J0IHx8IHJlcG9ydEFsbENoYW5nZXMpIHtcbiAgICAgICAgZGVsdGEgPSBtZXRyaWMudmFsdWUgLSAocHJldlZhbHVlID8/IDApO1xuXG4gICAgICAgIC8vIFJlcG9ydCB0aGUgbWV0cmljIGlmIHRoZXJlJ3MgYSBub24temVybyBkZWx0YSBvciBpZiBubyBwcmV2aW91c1xuICAgICAgICAvLyB2YWx1ZSBleGlzdHMgKHdoaWNoIGNhbiBoYXBwZW4gaW4gdGhlIGNhc2Ugb2YgdGhlIGRvY3VtZW50IGJlY29taW5nXG4gICAgICAgIC8vIGhpZGRlbiB3aGVuIHRoZSBtZXRyaWMgdmFsdWUgaXMgMCkuXG4gICAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZS93ZWItdml0YWxzL2lzc3Vlcy8xNFxuICAgICAgICBpZiAoZGVsdGEgfHwgcHJldlZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcmV2VmFsdWUgPSBtZXRyaWMudmFsdWU7XG4gICAgICAgICAgbWV0cmljLmRlbHRhID0gZGVsdGE7XG4gICAgICAgICAgbWV0cmljLnJhdGluZyA9IGdldFJhdGluZyhtZXRyaWMudmFsdWUsIHRocmVzaG9sZHMpO1xuICAgICAgICAgIGNhbGxiYWNrKG1ldHJpYyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgeyBiaW5kUmVwb3J0ZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJpbmRSZXBvcnRlci5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/bindReporter.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/generateUniqueID.js":
/*!*******************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/generateUniqueID.js ***!
  \*******************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   generateUniqueID: () => (/* binding */ generateUniqueID)\n/* harmony export */ });\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Performantly generate a unique, 30-char string by combining a version\n * number, the current timestamp with a 13-digit number integer.\n * @return {string}\n */\nconst generateUniqueID = () => {\n  return `v5-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;\n};\n\n\n//# sourceMappingURL=generateUniqueID.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvZ2VuZXJhdGVVbmlxdWVJRC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsZUFBZSxXQUFXLEdBQUcsOENBQThDO0FBQzNFOztBQUU0QjtBQUM1QiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvZ2VuZXJhdGVVbmlxdWVJRC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLyoqXG4gKiBQZXJmb3JtYW50bHkgZ2VuZXJhdGUgYSB1bmlxdWUsIDMwLWNoYXIgc3RyaW5nIGJ5IGNvbWJpbmluZyBhIHZlcnNpb25cbiAqIG51bWJlciwgdGhlIGN1cnJlbnQgdGltZXN0YW1wIHdpdGggYSAxMy1kaWdpdCBudW1iZXIgaW50ZWdlci5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuY29uc3QgZ2VuZXJhdGVVbmlxdWVJRCA9ICgpID0+IHtcbiAgcmV0dXJuIGB2NS0ke0RhdGUubm93KCl9LSR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKDllMTIgLSAxKSkgKyAxZTEyfWA7XG59O1xuXG5leHBvcnQgeyBnZW5lcmF0ZVVuaXF1ZUlEIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZW5lcmF0ZVVuaXF1ZUlELmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/generateUniqueID.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getActivationStart.js":
/*!*********************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getActivationStart.js ***!
  \*********************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getActivationStart: () => (/* binding */ getActivationStart)\n/* harmony export */ });\n/* harmony import */ var _getNavigationEntry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNavigationEntry.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getNavigationEntry.js\");\n\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nconst getActivationStart = () => {\n  const navEntry = (0,_getNavigationEntry_js__WEBPACK_IMPORTED_MODULE_0__.getNavigationEntry)();\n  return navEntry?.activationStart ?? 0;\n};\n\n\n//# sourceMappingURL=getActivationStart.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvZ2V0QWN0aXZhdGlvblN0YXJ0LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTZEOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsbUJBQW1CLDBFQUFrQjtBQUNyQztBQUNBOztBQUU4QjtBQUM5QiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvZ2V0QWN0aXZhdGlvblN0YXJ0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldE5hdmlnYXRpb25FbnRyeSB9IGZyb20gJy4vZ2V0TmF2aWdhdGlvbkVudHJ5LmpzJztcblxuLypcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cblxuY29uc3QgZ2V0QWN0aXZhdGlvblN0YXJ0ID0gKCkgPT4ge1xuICBjb25zdCBuYXZFbnRyeSA9IGdldE5hdmlnYXRpb25FbnRyeSgpO1xuICByZXR1cm4gbmF2RW50cnk/LmFjdGl2YXRpb25TdGFydCA/PyAwO1xufTtcblxuZXhwb3J0IHsgZ2V0QWN0aXZhdGlvblN0YXJ0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRBY3RpdmF0aW9uU3RhcnQuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getActivationStart.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getNavigationEntry.js":
/*!*********************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getNavigationEntry.js ***!
  \*********************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getNavigationEntry: () => (/* binding */ getNavigationEntry)\n/* harmony export */ });\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../types.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/types.js\");\n\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n// sentry-specific change:\n// add optional param to not check for responseStart (see comment below)\nconst getNavigationEntry = (checkResponseStart = true) => {\n  const navigationEntry = _types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.performance?.getEntriesByType?.('navigation')[0];\n  // Check to ensure the `responseStart` property is present and valid.\n  // In some cases a zero value is reported by the browser (for\n  // privacy/security reasons), and in other cases (bugs) the value is\n  // negative or is larger than the current page time. Ignore these cases:\n  // - https://github.com/GoogleChrome/web-vitals/issues/137\n  // - https://github.com/GoogleChrome/web-vitals/issues/162\n  // - https://github.com/GoogleChrome/web-vitals/issues/275\n  if (\n    // sentry-specific change:\n    // We don't want to check for responseStart for our own use of `getNavigationEntry`\n    !checkResponseStart ||\n    (navigationEntry && navigationEntry.responseStart > 0 && navigationEntry.responseStart < performance.now())\n  ) {\n    return navigationEntry;\n  }\n};\n\n\n//# sourceMappingURL=getNavigationEntry.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvZ2V0TmF2aWdhdGlvbkVudHJ5LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTJDOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiw2Q0FBTTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFOEI7QUFDOUIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeS1pbnRlcm5hbCticm93c2VyLXV0aWxzQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC9icm93c2VyLXV0aWxzL2J1aWxkL2VzbS9tZXRyaWNzL3dlYi12aXRhbHMvbGliL2dldE5hdmlnYXRpb25FbnRyeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXSU5ET1cgfSBmcm9tICcuLi8uLi8uLi90eXBlcy5qcyc7XG5cbi8qXG4gKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5cbi8vIHNlbnRyeS1zcGVjaWZpYyBjaGFuZ2U6XG4vLyBhZGQgb3B0aW9uYWwgcGFyYW0gdG8gbm90IGNoZWNrIGZvciByZXNwb25zZVN0YXJ0IChzZWUgY29tbWVudCBiZWxvdylcbmNvbnN0IGdldE5hdmlnYXRpb25FbnRyeSA9IChjaGVja1Jlc3BvbnNlU3RhcnQgPSB0cnVlKSA9PiB7XG4gIGNvbnN0IG5hdmlnYXRpb25FbnRyeSA9IFdJTkRPVy5wZXJmb3JtYW5jZT8uZ2V0RW50cmllc0J5VHlwZT8uKCduYXZpZ2F0aW9uJylbMF07XG4gIC8vIENoZWNrIHRvIGVuc3VyZSB0aGUgYHJlc3BvbnNlU3RhcnRgIHByb3BlcnR5IGlzIHByZXNlbnQgYW5kIHZhbGlkLlxuICAvLyBJbiBzb21lIGNhc2VzIGEgemVybyB2YWx1ZSBpcyByZXBvcnRlZCBieSB0aGUgYnJvd3NlciAoZm9yXG4gIC8vIHByaXZhY3kvc2VjdXJpdHkgcmVhc29ucyksIGFuZCBpbiBvdGhlciBjYXNlcyAoYnVncykgdGhlIHZhbHVlIGlzXG4gIC8vIG5lZ2F0aXZlIG9yIGlzIGxhcmdlciB0aGFuIHRoZSBjdXJyZW50IHBhZ2UgdGltZS4gSWdub3JlIHRoZXNlIGNhc2VzOlxuICAvLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWUvd2ViLXZpdGFscy9pc3N1ZXMvMTM3XG4gIC8vIC0gaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZS93ZWItdml0YWxzL2lzc3Vlcy8xNjJcbiAgLy8gLSBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2hyb21lL3dlYi12aXRhbHMvaXNzdWVzLzI3NVxuICBpZiAoXG4gICAgLy8gc2VudHJ5LXNwZWNpZmljIGNoYW5nZTpcbiAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNoZWNrIGZvciByZXNwb25zZVN0YXJ0IGZvciBvdXIgb3duIHVzZSBvZiBgZ2V0TmF2aWdhdGlvbkVudHJ5YFxuICAgICFjaGVja1Jlc3BvbnNlU3RhcnQgfHxcbiAgICAobmF2aWdhdGlvbkVudHJ5ICYmIG5hdmlnYXRpb25FbnRyeS5yZXNwb25zZVN0YXJ0ID4gMCAmJiBuYXZpZ2F0aW9uRW50cnkucmVzcG9uc2VTdGFydCA8IHBlcmZvcm1hbmNlLm5vdygpKVxuICApIHtcbiAgICByZXR1cm4gbmF2aWdhdGlvbkVudHJ5O1xuICB9XG59O1xuXG5leHBvcnQgeyBnZXROYXZpZ2F0aW9uRW50cnkgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldE5hdmlnYXRpb25FbnRyeS5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getNavigationEntry.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getVisibilityWatcher.js":
/*!***********************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getVisibilityWatcher.js ***!
  \***********************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getVisibilityWatcher: () => (/* binding */ getVisibilityWatcher)\n/* harmony export */ });\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../types.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/types.js\");\n/* harmony import */ var _getActivationStart_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getActivationStart.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getActivationStart.js\");\n\n\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nlet firstHiddenTime = -1;\n\nconst initHiddenTime = () => {\n  // If the document is hidden when this code runs, assume it was always\n  // hidden and the page was loaded in the background, with the one exception\n  // that visibility state is always 'hidden' during prerendering, so we have\n  // to ignore that case until prerendering finishes (see: `prerenderingchange`\n  // event logic below).\n  return _types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.document?.visibilityState === 'hidden' && !_types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.document?.prerendering ? 0 : Infinity;\n};\n\nconst onVisibilityUpdate = (event) => {\n  // If the document is 'hidden' and no previous hidden timestamp has been\n  // set, update it based on the current event data.\n  if (_types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.document.visibilityState === 'hidden' && firstHiddenTime > -1) {\n    // If the event is a 'visibilitychange' event, it means the page was\n    // visible prior to this change, so the event timestamp is the first\n    // hidden time.\n    // However, if the event is not a 'visibilitychange' event, then it must\n    // be a 'prerenderingchange' event, and the fact that the document is\n    // still 'hidden' from the above check means the tab was activated\n    // in a background state and so has always been hidden.\n    firstHiddenTime = event.type === 'visibilitychange' ? event.timeStamp : 0;\n\n    // Remove all listeners now that a `firstHiddenTime` value has been set.\n    removeChangeListeners();\n  }\n};\n\nconst addChangeListeners = () => {\n  addEventListener('visibilitychange', onVisibilityUpdate, true);\n  // IMPORTANT: when a page is prerendering, its `visibilityState` is\n  // 'hidden', so in order to account for cases where this module checks for\n  // visibility during prerendering, an additional check after prerendering\n  // completes is also required.\n  addEventListener('prerenderingchange', onVisibilityUpdate, true);\n};\n\nconst removeChangeListeners = () => {\n  removeEventListener('visibilitychange', onVisibilityUpdate, true);\n  removeEventListener('prerenderingchange', onVisibilityUpdate, true);\n};\n\nconst getVisibilityWatcher = () => {\n  if (_types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.document && firstHiddenTime < 0) {\n    // Check if we have a previous hidden `visibility-state` performance entry.\n    const activationStart = (0,_getActivationStart_js__WEBPACK_IMPORTED_MODULE_1__.getActivationStart)();\n    const firstVisibilityStateHiddenTime = !_types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.document.prerendering\n      ? globalThis.performance\n          .getEntriesByType('visibility-state')\n          .filter(e => e.name === 'hidden' && e.startTime > activationStart)[0]?.startTime\n      : undefined;\n\n    // Prefer that, but if it's not available and the document is hidden when\n    // this code runs, assume it was hidden since navigation start. This isn't\n    // a perfect heuristic, but it's the best we can do until the\n    // `visibility-state` performance entry becomes available in all browsers.\n    firstHiddenTime = firstVisibilityStateHiddenTime ?? initHiddenTime();\n    // We're still going to listen to for changes so we can handle things like\n    // bfcache restores and/or prerender without having to examine individual\n    // timestamps in detail.\n    addChangeListeners();\n  }\n  return {\n    get firstHiddenTime() {\n      return firstHiddenTime;\n    },\n  };\n};\n\n\n//# sourceMappingURL=getVisibilityWatcher.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvZ2V0VmlzaWJpbGl0eVdhdGNoZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQTJDO0FBQ2tCOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsNkNBQU0sNENBQTRDLDZDQUFNO0FBQ2pFOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sNkNBQU07QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLDZDQUFNO0FBQ1o7QUFDQSw0QkFBNEIsMEVBQWtCO0FBQzlDLDRDQUE0Qyw2Q0FBTTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVnQztBQUNoQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvZ2V0VmlzaWJpbGl0eVdhdGNoZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMuanMnO1xuaW1wb3J0IHsgZ2V0QWN0aXZhdGlvblN0YXJ0IH0gZnJvbSAnLi9nZXRBY3RpdmF0aW9uU3RhcnQuanMnO1xuXG4vKlxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuXG5sZXQgZmlyc3RIaWRkZW5UaW1lID0gLTE7XG5cbmNvbnN0IGluaXRIaWRkZW5UaW1lID0gKCkgPT4ge1xuICAvLyBJZiB0aGUgZG9jdW1lbnQgaXMgaGlkZGVuIHdoZW4gdGhpcyBjb2RlIHJ1bnMsIGFzc3VtZSBpdCB3YXMgYWx3YXlzXG4gIC8vIGhpZGRlbiBhbmQgdGhlIHBhZ2Ugd2FzIGxvYWRlZCBpbiB0aGUgYmFja2dyb3VuZCwgd2l0aCB0aGUgb25lIGV4Y2VwdGlvblxuICAvLyB0aGF0IHZpc2liaWxpdHkgc3RhdGUgaXMgYWx3YXlzICdoaWRkZW4nIGR1cmluZyBwcmVyZW5kZXJpbmcsIHNvIHdlIGhhdmVcbiAgLy8gdG8gaWdub3JlIHRoYXQgY2FzZSB1bnRpbCBwcmVyZW5kZXJpbmcgZmluaXNoZXMgKHNlZTogYHByZXJlbmRlcmluZ2NoYW5nZWBcbiAgLy8gZXZlbnQgbG9naWMgYmVsb3cpLlxuICByZXR1cm4gV0lORE9XLmRvY3VtZW50Py52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nICYmICFXSU5ET1cuZG9jdW1lbnQ/LnByZXJlbmRlcmluZyA/IDAgOiBJbmZpbml0eTtcbn07XG5cbmNvbnN0IG9uVmlzaWJpbGl0eVVwZGF0ZSA9IChldmVudCkgPT4ge1xuICAvLyBJZiB0aGUgZG9jdW1lbnQgaXMgJ2hpZGRlbicgYW5kIG5vIHByZXZpb3VzIGhpZGRlbiB0aW1lc3RhbXAgaGFzIGJlZW5cbiAgLy8gc2V0LCB1cGRhdGUgaXQgYmFzZWQgb24gdGhlIGN1cnJlbnQgZXZlbnQgZGF0YS5cbiAgaWYgKFdJTkRPVy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nICYmIGZpcnN0SGlkZGVuVGltZSA+IC0xKSB7XG4gICAgLy8gSWYgdGhlIGV2ZW50IGlzIGEgJ3Zpc2liaWxpdHljaGFuZ2UnIGV2ZW50LCBpdCBtZWFucyB0aGUgcGFnZSB3YXNcbiAgICAvLyB2aXNpYmxlIHByaW9yIHRvIHRoaXMgY2hhbmdlLCBzbyB0aGUgZXZlbnQgdGltZXN0YW1wIGlzIHRoZSBmaXJzdFxuICAgIC8vIGhpZGRlbiB0aW1lLlxuICAgIC8vIEhvd2V2ZXIsIGlmIHRoZSBldmVudCBpcyBub3QgYSAndmlzaWJpbGl0eWNoYW5nZScgZXZlbnQsIHRoZW4gaXQgbXVzdFxuICAgIC8vIGJlIGEgJ3ByZXJlbmRlcmluZ2NoYW5nZScgZXZlbnQsIGFuZCB0aGUgZmFjdCB0aGF0IHRoZSBkb2N1bWVudCBpc1xuICAgIC8vIHN0aWxsICdoaWRkZW4nIGZyb20gdGhlIGFib3ZlIGNoZWNrIG1lYW5zIHRoZSB0YWIgd2FzIGFjdGl2YXRlZFxuICAgIC8vIGluIGEgYmFja2dyb3VuZCBzdGF0ZSBhbmQgc28gaGFzIGFsd2F5cyBiZWVuIGhpZGRlbi5cbiAgICBmaXJzdEhpZGRlblRpbWUgPSBldmVudC50eXBlID09PSAndmlzaWJpbGl0eWNoYW5nZScgPyBldmVudC50aW1lU3RhbXAgOiAwO1xuXG4gICAgLy8gUmVtb3ZlIGFsbCBsaXN0ZW5lcnMgbm93IHRoYXQgYSBgZmlyc3RIaWRkZW5UaW1lYCB2YWx1ZSBoYXMgYmVlbiBzZXQuXG4gICAgcmVtb3ZlQ2hhbmdlTGlzdGVuZXJzKCk7XG4gIH1cbn07XG5cbmNvbnN0IGFkZENoYW5nZUxpc3RlbmVycyA9ICgpID0+IHtcbiAgYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uVmlzaWJpbGl0eVVwZGF0ZSwgdHJ1ZSk7XG4gIC8vIElNUE9SVEFOVDogd2hlbiBhIHBhZ2UgaXMgcHJlcmVuZGVyaW5nLCBpdHMgYHZpc2liaWxpdHlTdGF0ZWAgaXNcbiAgLy8gJ2hpZGRlbicsIHNvIGluIG9yZGVyIHRvIGFjY291bnQgZm9yIGNhc2VzIHdoZXJlIHRoaXMgbW9kdWxlIGNoZWNrcyBmb3JcbiAgLy8gdmlzaWJpbGl0eSBkdXJpbmcgcHJlcmVuZGVyaW5nLCBhbiBhZGRpdGlvbmFsIGNoZWNrIGFmdGVyIHByZXJlbmRlcmluZ1xuICAvLyBjb21wbGV0ZXMgaXMgYWxzbyByZXF1aXJlZC5cbiAgYWRkRXZlbnRMaXN0ZW5lcigncHJlcmVuZGVyaW5nY2hhbmdlJywgb25WaXNpYmlsaXR5VXBkYXRlLCB0cnVlKTtcbn07XG5cbmNvbnN0IHJlbW92ZUNoYW5nZUxpc3RlbmVycyA9ICgpID0+IHtcbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uVmlzaWJpbGl0eVVwZGF0ZSwgdHJ1ZSk7XG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIoJ3ByZXJlbmRlcmluZ2NoYW5nZScsIG9uVmlzaWJpbGl0eVVwZGF0ZSwgdHJ1ZSk7XG59O1xuXG5jb25zdCBnZXRWaXNpYmlsaXR5V2F0Y2hlciA9ICgpID0+IHtcbiAgaWYgKFdJTkRPVy5kb2N1bWVudCAmJiBmaXJzdEhpZGRlblRpbWUgPCAwKSB7XG4gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIHByZXZpb3VzIGhpZGRlbiBgdmlzaWJpbGl0eS1zdGF0ZWAgcGVyZm9ybWFuY2UgZW50cnkuXG4gICAgY29uc3QgYWN0aXZhdGlvblN0YXJ0ID0gZ2V0QWN0aXZhdGlvblN0YXJ0KCk7XG4gICAgY29uc3QgZmlyc3RWaXNpYmlsaXR5U3RhdGVIaWRkZW5UaW1lID0gIVdJTkRPVy5kb2N1bWVudC5wcmVyZW5kZXJpbmdcbiAgICAgID8gZ2xvYmFsVGhpcy5wZXJmb3JtYW5jZVxuICAgICAgICAgIC5nZXRFbnRyaWVzQnlUeXBlKCd2aXNpYmlsaXR5LXN0YXRlJylcbiAgICAgICAgICAuZmlsdGVyKGUgPT4gZS5uYW1lID09PSAnaGlkZGVuJyAmJiBlLnN0YXJ0VGltZSA+IGFjdGl2YXRpb25TdGFydClbMF0/LnN0YXJ0VGltZVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBQcmVmZXIgdGhhdCwgYnV0IGlmIGl0J3Mgbm90IGF2YWlsYWJsZSBhbmQgdGhlIGRvY3VtZW50IGlzIGhpZGRlbiB3aGVuXG4gICAgLy8gdGhpcyBjb2RlIHJ1bnMsIGFzc3VtZSBpdCB3YXMgaGlkZGVuIHNpbmNlIG5hdmlnYXRpb24gc3RhcnQuIFRoaXMgaXNuJ3RcbiAgICAvLyBhIHBlcmZlY3QgaGV1cmlzdGljLCBidXQgaXQncyB0aGUgYmVzdCB3ZSBjYW4gZG8gdW50aWwgdGhlXG4gICAgLy8gYHZpc2liaWxpdHktc3RhdGVgIHBlcmZvcm1hbmNlIGVudHJ5IGJlY29tZXMgYXZhaWxhYmxlIGluIGFsbCBicm93c2Vycy5cbiAgICBmaXJzdEhpZGRlblRpbWUgPSBmaXJzdFZpc2liaWxpdHlTdGF0ZUhpZGRlblRpbWUgPz8gaW5pdEhpZGRlblRpbWUoKTtcbiAgICAvLyBXZSdyZSBzdGlsbCBnb2luZyB0byBsaXN0ZW4gdG8gZm9yIGNoYW5nZXMgc28gd2UgY2FuIGhhbmRsZSB0aGluZ3MgbGlrZVxuICAgIC8vIGJmY2FjaGUgcmVzdG9yZXMgYW5kL29yIHByZXJlbmRlciB3aXRob3V0IGhhdmluZyB0byBleGFtaW5lIGluZGl2aWR1YWxcbiAgICAvLyB0aW1lc3RhbXBzIGluIGRldGFpbC5cbiAgICBhZGRDaGFuZ2VMaXN0ZW5lcnMoKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGdldCBmaXJzdEhpZGRlblRpbWUoKSB7XG4gICAgICByZXR1cm4gZmlyc3RIaWRkZW5UaW1lO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgeyBnZXRWaXNpYmlsaXR5V2F0Y2hlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0VmlzaWJpbGl0eVdhdGNoZXIuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getVisibilityWatcher.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initMetric.js":
/*!*************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initMetric.js ***!
  \*************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   initMetric: () => (/* binding */ initMetric)\n/* harmony export */ });\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../types.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/types.js\");\n/* harmony import */ var _generateUniqueID_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./generateUniqueID.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/generateUniqueID.js\");\n/* harmony import */ var _getActivationStart_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getActivationStart.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getActivationStart.js\");\n/* harmony import */ var _getNavigationEntry_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getNavigationEntry.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getNavigationEntry.js\");\n\n\n\n\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nconst initMetric = (name, value = -1) => {\n  const navEntry = (0,_getNavigationEntry_js__WEBPACK_IMPORTED_MODULE_3__.getNavigationEntry)();\n  let navigationType = 'navigate';\n\n  if (navEntry) {\n    if (_types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.document?.prerendering || (0,_getActivationStart_js__WEBPACK_IMPORTED_MODULE_2__.getActivationStart)() > 0) {\n      navigationType = 'prerender';\n    } else if (_types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.document?.wasDiscarded) {\n      navigationType = 'restore';\n    } else if (navEntry.type) {\n      navigationType = navEntry.type.replace(/_/g, '-') ;\n    }\n  }\n\n  // Use `entries` type specific for the metric.\n  const entries = [];\n\n  return {\n    name,\n    value,\n    rating: 'good' , // If needed, will be updated when reported. `const` to keep the type from widening to `string`.\n    delta: 0,\n    entries,\n    id: (0,_generateUniqueID_js__WEBPACK_IMPORTED_MODULE_1__.generateUniqueID)(),\n    navigationType,\n  };\n};\n\n\n//# sourceMappingURL=initMetric.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvaW5pdE1ldHJpYy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUEyQztBQUNjO0FBQ0k7QUFDQTs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLG1CQUFtQiwwRUFBa0I7QUFDckM7O0FBRUE7QUFDQSxRQUFRLDZDQUFNLDJCQUEyQiwwRUFBa0I7QUFDM0Q7QUFDQSxNQUFNLFNBQVMsNkNBQU07QUFDckI7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxzRUFBZ0I7QUFDeEI7QUFDQTtBQUNBOztBQUVzQjtBQUN0QiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvaW5pdE1ldHJpYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXSU5ET1cgfSBmcm9tICcuLi8uLi8uLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVVuaXF1ZUlEIH0gZnJvbSAnLi9nZW5lcmF0ZVVuaXF1ZUlELmpzJztcbmltcG9ydCB7IGdldEFjdGl2YXRpb25TdGFydCB9IGZyb20gJy4vZ2V0QWN0aXZhdGlvblN0YXJ0LmpzJztcbmltcG9ydCB7IGdldE5hdmlnYXRpb25FbnRyeSB9IGZyb20gJy4vZ2V0TmF2aWdhdGlvbkVudHJ5LmpzJztcblxuLypcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cblxuY29uc3QgaW5pdE1ldHJpYyA9IChuYW1lLCB2YWx1ZSA9IC0xKSA9PiB7XG4gIGNvbnN0IG5hdkVudHJ5ID0gZ2V0TmF2aWdhdGlvbkVudHJ5KCk7XG4gIGxldCBuYXZpZ2F0aW9uVHlwZSA9ICduYXZpZ2F0ZSc7XG5cbiAgaWYgKG5hdkVudHJ5KSB7XG4gICAgaWYgKFdJTkRPVy5kb2N1bWVudD8ucHJlcmVuZGVyaW5nIHx8IGdldEFjdGl2YXRpb25TdGFydCgpID4gMCkge1xuICAgICAgbmF2aWdhdGlvblR5cGUgPSAncHJlcmVuZGVyJztcbiAgICB9IGVsc2UgaWYgKFdJTkRPVy5kb2N1bWVudD8ud2FzRGlzY2FyZGVkKSB7XG4gICAgICBuYXZpZ2F0aW9uVHlwZSA9ICdyZXN0b3JlJztcbiAgICB9IGVsc2UgaWYgKG5hdkVudHJ5LnR5cGUpIHtcbiAgICAgIG5hdmlnYXRpb25UeXBlID0gbmF2RW50cnkudHlwZS5yZXBsYWNlKC9fL2csICctJykgO1xuICAgIH1cbiAgfVxuXG4gIC8vIFVzZSBgZW50cmllc2AgdHlwZSBzcGVjaWZpYyBmb3IgdGhlIG1ldHJpYy5cbiAgY29uc3QgZW50cmllcyA9IFtdO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZSxcbiAgICB2YWx1ZSxcbiAgICByYXRpbmc6ICdnb29kJyAsIC8vIElmIG5lZWRlZCwgd2lsbCBiZSB1cGRhdGVkIHdoZW4gcmVwb3J0ZWQuIGBjb25zdGAgdG8ga2VlcCB0aGUgdHlwZSBmcm9tIHdpZGVuaW5nIHRvIGBzdHJpbmdgLlxuICAgIGRlbHRhOiAwLFxuICAgIGVudHJpZXMsXG4gICAgaWQ6IGdlbmVyYXRlVW5pcXVlSUQoKSxcbiAgICBuYXZpZ2F0aW9uVHlwZSxcbiAgfTtcbn07XG5cbmV4cG9ydCB7IGluaXRNZXRyaWMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluaXRNZXRyaWMuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initMetric.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initUnique.js":
/*!*************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initUnique.js ***!
  \*************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   initUnique: () => (/* binding */ initUnique)\n/* harmony export */ });\n/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst instanceMap = new WeakMap();\n\n/**\n * A function that accepts and identity object and a class object and returns\n * either a new instance of that class or an existing instance, if the\n * identity object was previously used.\n */\nfunction initUnique(identityObj, ClassObj) {\n  if (!instanceMap.get(identityObj)) {\n    instanceMap.set(identityObj, new ClassObj());\n  }\n  return instanceMap.get(identityObj) ;\n}\n\n\n//# sourceMappingURL=initUnique.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvaW5pdFVuaXF1ZS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRXNCO0FBQ3RCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vbWV0cmljcy93ZWItdml0YWxzL2xpYi9pbml0VW5pcXVlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAyNCBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5jb25zdCBpbnN0YW5jZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYW5kIGlkZW50aXR5IG9iamVjdCBhbmQgYSBjbGFzcyBvYmplY3QgYW5kIHJldHVybnNcbiAqIGVpdGhlciBhIG5ldyBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIG9yIGFuIGV4aXN0aW5nIGluc3RhbmNlLCBpZiB0aGVcbiAqIGlkZW50aXR5IG9iamVjdCB3YXMgcHJldmlvdXNseSB1c2VkLlxuICovXG5mdW5jdGlvbiBpbml0VW5pcXVlKGlkZW50aXR5T2JqLCBDbGFzc09iaikge1xuICBpZiAoIWluc3RhbmNlTWFwLmdldChpZGVudGl0eU9iaikpIHtcbiAgICBpbnN0YW5jZU1hcC5zZXQoaWRlbnRpdHlPYmosIG5ldyBDbGFzc09iaigpKTtcbiAgfVxuICByZXR1cm4gaW5zdGFuY2VNYXAuZ2V0KGlkZW50aXR5T2JqKSA7XG59XG5cbmV4cG9ydCB7IGluaXRVbmlxdWUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluaXRVbmlxdWUuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initUnique.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/observe.js":
/*!**********************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/observe.js ***!
  \**********************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   observe: () => (/* binding */ observe)\n/* harmony export */ });\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Takes a performance entry type and a callback function, and creates a\n * `PerformanceObserver` instance that will observe the specified entry type\n * with buffering enabled and call the callback _for each entry_.\n *\n * This function also feature-detects entry support and wraps the logic in a\n * try/catch to avoid errors in unsupporting browsers.\n */\nconst observe = (\n  type,\n  callback,\n  opts = {},\n) => {\n  try {\n    if (PerformanceObserver.supportedEntryTypes.includes(type)) {\n      const po = new PerformanceObserver(list => {\n        // Delay by a microtask to workaround a bug in Safari where the\n        // callback is invoked immediately, rather than in a separate task.\n        // See: https://github.com/GoogleChrome/web-vitals/issues/277\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        Promise.resolve().then(() => {\n          callback(list.getEntries() );\n        });\n      });\n      po.observe({ type, buffered: true, ...opts });\n      return po;\n    }\n  } catch {\n    // Do nothing.\n  }\n  return;\n};\n\n\n//# sourceMappingURL=observe.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvb2JzZXJ2ZS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQLG1CQUFtQiwrQkFBK0I7QUFDbEQ7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFbUI7QUFDbkIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeS1pbnRlcm5hbCticm93c2VyLXV0aWxzQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC9icm93c2VyLXV0aWxzL2J1aWxkL2VzbS9tZXRyaWNzL3dlYi12aXRhbHMvbGliL29ic2VydmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qKlxuICogVGFrZXMgYSBwZXJmb3JtYW5jZSBlbnRyeSB0eXBlIGFuZCBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBhbmQgY3JlYXRlcyBhXG4gKiBgUGVyZm9ybWFuY2VPYnNlcnZlcmAgaW5zdGFuY2UgdGhhdCB3aWxsIG9ic2VydmUgdGhlIHNwZWNpZmllZCBlbnRyeSB0eXBlXG4gKiB3aXRoIGJ1ZmZlcmluZyBlbmFibGVkIGFuZCBjYWxsIHRoZSBjYWxsYmFjayBfZm9yIGVhY2ggZW50cnlfLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gYWxzbyBmZWF0dXJlLWRldGVjdHMgZW50cnkgc3VwcG9ydCBhbmQgd3JhcHMgdGhlIGxvZ2ljIGluIGFcbiAqIHRyeS9jYXRjaCB0byBhdm9pZCBlcnJvcnMgaW4gdW5zdXBwb3J0aW5nIGJyb3dzZXJzLlxuICovXG5jb25zdCBvYnNlcnZlID0gKFxuICB0eXBlLFxuICBjYWxsYmFjayxcbiAgb3B0cyA9IHt9LFxuKSA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKFBlcmZvcm1hbmNlT2JzZXJ2ZXIuc3VwcG9ydGVkRW50cnlUeXBlcy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgY29uc3QgcG8gPSBuZXcgUGVyZm9ybWFuY2VPYnNlcnZlcihsaXN0ID0+IHtcbiAgICAgICAgLy8gRGVsYXkgYnkgYSBtaWNyb3Rhc2sgdG8gd29ya2Fyb3VuZCBhIGJ1ZyBpbiBTYWZhcmkgd2hlcmUgdGhlXG4gICAgICAgIC8vIGNhbGxiYWNrIGlzIGludm9rZWQgaW1tZWRpYXRlbHksIHJhdGhlciB0aGFuIGluIGEgc2VwYXJhdGUgdGFzay5cbiAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2hyb21lL3dlYi12aXRhbHMvaXNzdWVzLzI3N1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNhbGxiYWNrKGxpc3QuZ2V0RW50cmllcygpICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBwby5vYnNlcnZlKHsgdHlwZSwgYnVmZmVyZWQ6IHRydWUsIC4uLm9wdHMgfSk7XG4gICAgICByZXR1cm4gcG87XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBEbyBub3RoaW5nLlxuICB9XG4gIHJldHVybjtcbn07XG5cbmV4cG9ydCB7IG9ic2VydmUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9ic2VydmUuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/observe.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/onHidden.js":
/*!***********************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/onHidden.js ***!
  \***********************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   onHidden: () => (/* binding */ onHidden)\n/* harmony export */ });\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../types.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/types.js\");\n\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n// Sentry-specific change:\n// This function's logic was NOT updated to web-vitals 4.2.4 or 5.x but we continue\n// to use the web-vitals 3.5.2 versiondue to us having stricter browser support.\n// PR with context that made the changes: https://github.com/GoogleChrome/web-vitals/pull/442/files#r1530492402\n// The PR removed listening to the `pagehide` event, in favour of only listening to `visibilitychange` event.\n// This is \"more correct\" but some browsers we still support (Safari <14.4) don't fully support `visibilitychange`\n// or have known bugs w.r.t the `visibilitychange` event.\n// TODO (v10): If we decide to drop support for Safari 14.4, we can use the logic from web-vitals 4.2.4\n// In this case, we also need to update the integration tests that currently trigger the `pagehide` event to\n// simulate the page being hidden.\nconst onHidden = (cb) => {\n  const onHiddenOrPageHide = (event) => {\n    if (event.type === 'pagehide' || _types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.document?.visibilityState === 'hidden') {\n      cb(event);\n    }\n  };\n\n  if (_types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.document) {\n    addEventListener('visibilitychange', onHiddenOrPageHide, true);\n    // Some browsers have buggy implementations of visibilitychange,\n    // so we use pagehide in addition, just to be safe.\n    addEventListener('pagehide', onHiddenOrPageHide, true);\n  }\n};\n\n\n//# sourceMappingURL=onHidden.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvb25IaWRkZW4uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBMkM7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLDZDQUFNO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLDZDQUFNO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVvQjtBQUNwQiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvb25IaWRkZW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV0lORE9XIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMuanMnO1xuXG4vKlxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuXG4vLyBTZW50cnktc3BlY2lmaWMgY2hhbmdlOlxuLy8gVGhpcyBmdW5jdGlvbidzIGxvZ2ljIHdhcyBOT1QgdXBkYXRlZCB0byB3ZWItdml0YWxzIDQuMi40IG9yIDUueCBidXQgd2UgY29udGludWVcbi8vIHRvIHVzZSB0aGUgd2ViLXZpdGFscyAzLjUuMiB2ZXJzaW9uZHVlIHRvIHVzIGhhdmluZyBzdHJpY3RlciBicm93c2VyIHN1cHBvcnQuXG4vLyBQUiB3aXRoIGNvbnRleHQgdGhhdCBtYWRlIHRoZSBjaGFuZ2VzOiBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2hyb21lL3dlYi12aXRhbHMvcHVsbC80NDIvZmlsZXMjcjE1MzA0OTI0MDJcbi8vIFRoZSBQUiByZW1vdmVkIGxpc3RlbmluZyB0byB0aGUgYHBhZ2VoaWRlYCBldmVudCwgaW4gZmF2b3VyIG9mIG9ubHkgbGlzdGVuaW5nIHRvIGB2aXNpYmlsaXR5Y2hhbmdlYCBldmVudC5cbi8vIFRoaXMgaXMgXCJtb3JlIGNvcnJlY3RcIiBidXQgc29tZSBicm93c2VycyB3ZSBzdGlsbCBzdXBwb3J0IChTYWZhcmkgPDE0LjQpIGRvbid0IGZ1bGx5IHN1cHBvcnQgYHZpc2liaWxpdHljaGFuZ2VgXG4vLyBvciBoYXZlIGtub3duIGJ1Z3Mgdy5yLnQgdGhlIGB2aXNpYmlsaXR5Y2hhbmdlYCBldmVudC5cbi8vIFRPRE8gKHYxMCk6IElmIHdlIGRlY2lkZSB0byBkcm9wIHN1cHBvcnQgZm9yIFNhZmFyaSAxNC40LCB3ZSBjYW4gdXNlIHRoZSBsb2dpYyBmcm9tIHdlYi12aXRhbHMgNC4yLjRcbi8vIEluIHRoaXMgY2FzZSwgd2UgYWxzbyBuZWVkIHRvIHVwZGF0ZSB0aGUgaW50ZWdyYXRpb24gdGVzdHMgdGhhdCBjdXJyZW50bHkgdHJpZ2dlciB0aGUgYHBhZ2VoaWRlYCBldmVudCB0b1xuLy8gc2ltdWxhdGUgdGhlIHBhZ2UgYmVpbmcgaGlkZGVuLlxuY29uc3Qgb25IaWRkZW4gPSAoY2IpID0+IHtcbiAgY29uc3Qgb25IaWRkZW5PclBhZ2VIaWRlID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdwYWdlaGlkZScgfHwgV0lORE9XLmRvY3VtZW50Py52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICBjYihldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIGlmIChXSU5ET1cuZG9jdW1lbnQpIHtcbiAgICBhZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgb25IaWRkZW5PclBhZ2VIaWRlLCB0cnVlKTtcbiAgICAvLyBTb21lIGJyb3dzZXJzIGhhdmUgYnVnZ3kgaW1wbGVtZW50YXRpb25zIG9mIHZpc2liaWxpdHljaGFuZ2UsXG4gICAgLy8gc28gd2UgdXNlIHBhZ2VoaWRlIGluIGFkZGl0aW9uLCBqdXN0IHRvIGJlIHNhZmUuXG4gICAgYWRkRXZlbnRMaXN0ZW5lcigncGFnZWhpZGUnLCBvbkhpZGRlbk9yUGFnZUhpZGUsIHRydWUpO1xuICB9XG59O1xuXG5leHBvcnQgeyBvbkhpZGRlbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b25IaWRkZW4uanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/onHidden.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/polyfills/interactionCountPolyfill.js":
/*!*************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/polyfills/interactionCountPolyfill.js ***!
  \*************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getInteractionCount: () => (/* binding */ getInteractionCount),\n/* harmony export */   initInteractionCountPolyfill: () => (/* binding */ initInteractionCountPolyfill)\n/* harmony export */ });\n/* harmony import */ var _observe_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../observe.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/observe.js\");\n\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nlet interactionCountEstimate = 0;\nlet minKnownInteractionId = Infinity;\nlet maxKnownInteractionId = 0;\n\nconst updateEstimate = (entries) => {\n  entries.forEach(e => {\n    if (e.interactionId) {\n      minKnownInteractionId = Math.min(minKnownInteractionId, e.interactionId);\n      maxKnownInteractionId = Math.max(maxKnownInteractionId, e.interactionId);\n\n      interactionCountEstimate = maxKnownInteractionId ? (maxKnownInteractionId - minKnownInteractionId) / 7 + 1 : 0;\n    }\n  });\n};\n\nlet po;\n\n/**\n * Returns the `interactionCount` value using the native API (if available)\n * or the polyfill estimate in this module.\n */\nconst getInteractionCount = () => {\n  return po ? interactionCountEstimate : performance.interactionCount || 0;\n};\n\n/**\n * Feature detects native support or initializes the polyfill if needed.\n */\nconst initInteractionCountPolyfill = () => {\n  if ('interactionCount' in performance || po) return;\n\n  po = (0,_observe_js__WEBPACK_IMPORTED_MODULE_0__.observe)('event', updateEstimate, {\n    type: 'event',\n    buffered: true,\n    durationThreshold: 0,\n  } );\n};\n\n\n//# sourceMappingURL=interactionCountPolyfill.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvcG9seWZpbGxzL2ludGVyYWN0aW9uQ291bnRQb2x5ZmlsbC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBd0M7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU8sb0RBQU87QUFDZDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRTZEO0FBQzdEIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vbWV0cmljcy93ZWItdml0YWxzL2xpYi9wb2x5ZmlsbHMvaW50ZXJhY3Rpb25Db3VudFBvbHlmaWxsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG9ic2VydmUgfSBmcm9tICcuLi9vYnNlcnZlLmpzJztcblxuLypcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cblxubGV0IGludGVyYWN0aW9uQ291bnRFc3RpbWF0ZSA9IDA7XG5sZXQgbWluS25vd25JbnRlcmFjdGlvbklkID0gSW5maW5pdHk7XG5sZXQgbWF4S25vd25JbnRlcmFjdGlvbklkID0gMDtcblxuY29uc3QgdXBkYXRlRXN0aW1hdGUgPSAoZW50cmllcykgPT4ge1xuICBlbnRyaWVzLmZvckVhY2goZSA9PiB7XG4gICAgaWYgKGUuaW50ZXJhY3Rpb25JZCkge1xuICAgICAgbWluS25vd25JbnRlcmFjdGlvbklkID0gTWF0aC5taW4obWluS25vd25JbnRlcmFjdGlvbklkLCBlLmludGVyYWN0aW9uSWQpO1xuICAgICAgbWF4S25vd25JbnRlcmFjdGlvbklkID0gTWF0aC5tYXgobWF4S25vd25JbnRlcmFjdGlvbklkLCBlLmludGVyYWN0aW9uSWQpO1xuXG4gICAgICBpbnRlcmFjdGlvbkNvdW50RXN0aW1hdGUgPSBtYXhLbm93bkludGVyYWN0aW9uSWQgPyAobWF4S25vd25JbnRlcmFjdGlvbklkIC0gbWluS25vd25JbnRlcmFjdGlvbklkKSAvIDcgKyAxIDogMDtcbiAgICB9XG4gIH0pO1xufTtcblxubGV0IHBvO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGBpbnRlcmFjdGlvbkNvdW50YCB2YWx1ZSB1c2luZyB0aGUgbmF0aXZlIEFQSSAoaWYgYXZhaWxhYmxlKVxuICogb3IgdGhlIHBvbHlmaWxsIGVzdGltYXRlIGluIHRoaXMgbW9kdWxlLlxuICovXG5jb25zdCBnZXRJbnRlcmFjdGlvbkNvdW50ID0gKCkgPT4ge1xuICByZXR1cm4gcG8gPyBpbnRlcmFjdGlvbkNvdW50RXN0aW1hdGUgOiBwZXJmb3JtYW5jZS5pbnRlcmFjdGlvbkNvdW50IHx8IDA7XG59O1xuXG4vKipcbiAqIEZlYXR1cmUgZGV0ZWN0cyBuYXRpdmUgc3VwcG9ydCBvciBpbml0aWFsaXplcyB0aGUgcG9seWZpbGwgaWYgbmVlZGVkLlxuICovXG5jb25zdCBpbml0SW50ZXJhY3Rpb25Db3VudFBvbHlmaWxsID0gKCkgPT4ge1xuICBpZiAoJ2ludGVyYWN0aW9uQ291bnQnIGluIHBlcmZvcm1hbmNlIHx8IHBvKSByZXR1cm47XG5cbiAgcG8gPSBvYnNlcnZlKCdldmVudCcsIHVwZGF0ZUVzdGltYXRlLCB7XG4gICAgdHlwZTogJ2V2ZW50JyxcbiAgICBidWZmZXJlZDogdHJ1ZSxcbiAgICBkdXJhdGlvblRocmVzaG9sZDogMCxcbiAgfSApO1xufTtcblxuZXhwb3J0IHsgZ2V0SW50ZXJhY3Rpb25Db3VudCwgaW5pdEludGVyYWN0aW9uQ291bnRQb2x5ZmlsbCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJhY3Rpb25Db3VudFBvbHlmaWxsLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/polyfills/interactionCountPolyfill.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/runOnce.js":
/*!**********************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/runOnce.js ***!
  \**********************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   runOnce: () => (/* binding */ runOnce)\n/* harmony export */ });\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst runOnce = (cb) => {\n  let called = false;\n  return () => {\n    if (!called) {\n      cb();\n      called = true;\n    }\n  };\n};\n\n\n//# sourceMappingURL=runOnce.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvcnVuT25jZS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFbUI7QUFDbkIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeS1pbnRlcm5hbCticm93c2VyLXV0aWxzQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC9icm93c2VyLXV0aWxzL2J1aWxkL2VzbS9tZXRyaWNzL3dlYi12aXRhbHMvbGliL3J1bk9uY2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmNvbnN0IHJ1bk9uY2UgPSAoY2IpID0+IHtcbiAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICBjYigpO1xuICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgeyBydW5PbmNlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ydW5PbmNlLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/runOnce.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenActivated.js":
/*!****************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenActivated.js ***!
  \****************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   whenActivated: () => (/* binding */ whenActivated)\n/* harmony export */ });\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../types.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/types.js\");\n\n\n/*\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nconst whenActivated = (callback) => {\n  if (_types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.document?.prerendering) {\n    addEventListener('prerenderingchange', () => callback(), true);\n  } else {\n    callback();\n  }\n};\n\n\n//# sourceMappingURL=whenActivated.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvd2hlbkFjdGl2YXRlZC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUEyQzs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLE1BQU0sNkNBQU07QUFDWjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRXlCO0FBQ3pCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vbWV0cmljcy93ZWItdml0YWxzL2xpYi93aGVuQWN0aXZhdGVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdJTkRPVyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzLmpzJztcblxuLypcbiAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cblxuY29uc3Qgd2hlbkFjdGl2YXRlZCA9IChjYWxsYmFjaykgPT4ge1xuICBpZiAoV0lORE9XLmRvY3VtZW50Py5wcmVyZW5kZXJpbmcpIHtcbiAgICBhZGRFdmVudExpc3RlbmVyKCdwcmVyZW5kZXJpbmdjaGFuZ2UnLCAoKSA9PiBjYWxsYmFjaygpLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygpO1xuICB9XG59O1xuXG5leHBvcnQgeyB3aGVuQWN0aXZhdGVkIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD13aGVuQWN0aXZhdGVkLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenActivated.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenIdleOrHidden.js":
/*!*******************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenIdleOrHidden.js ***!
  \*******************************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   whenIdleOrHidden: () => (/* binding */ whenIdleOrHidden)\n/* harmony export */ });\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../types.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/types.js\");\n/* harmony import */ var _onHidden_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./onHidden.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/onHidden.js\");\n/* harmony import */ var _runOnce_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./runOnce.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/runOnce.js\");\n\n\n\n\n/*\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * Runs the passed callback during the next idle period, or immediately\n * if the browser's visibility state is (or becomes) hidden.\n */\nconst whenIdleOrHidden = (cb) => {\n  const rIC = _types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.requestIdleCallback || _types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.setTimeout;\n\n  // If the document is hidden, run the callback immediately, otherwise\n  // race an idle callback with the next `visibilitychange` event.\n  if (_types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.document?.visibilityState === 'hidden') {\n    cb();\n  } else {\n    // eslint-disable-next-line no-param-reassign\n    cb = (0,_runOnce_js__WEBPACK_IMPORTED_MODULE_2__.runOnce)(cb);\n    rIC(cb);\n    // sentry: we use onHidden instead of directly listening to visibilitychange\n    // because some browsers we still support (Safari <14.4) don't fully support\n    // `visibilitychange` or have known bugs w.r.t the `visibilitychange` event.\n    (0,_onHidden_js__WEBPACK_IMPORTED_MODULE_1__.onHidden)(cb);\n  }\n};\n\n\n//# sourceMappingURL=whenIdleOrHidden.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9saWIvd2hlbklkbGVPckhpZGRlbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQTJDO0FBQ0Y7QUFDRjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyw2Q0FBTSx3QkFBd0IsNkNBQU07O0FBRWxEO0FBQ0E7QUFDQSxNQUFNLDZDQUFNO0FBQ1o7QUFDQSxJQUFJO0FBQ0o7QUFDQSxTQUFTLG9EQUFPO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxzREFBUTtBQUNaO0FBQ0E7O0FBRTRCO0FBQzVCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vbWV0cmljcy93ZWItdml0YWxzL2xpYi93aGVuSWRsZU9ySGlkZGVuLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdJTkRPVyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IG9uSGlkZGVuIH0gZnJvbSAnLi9vbkhpZGRlbi5qcyc7XG5pbXBvcnQgeyBydW5PbmNlIH0gZnJvbSAnLi9ydW5PbmNlLmpzJztcblxuLypcbiAqIENvcHlyaWdodCAyMDI0IEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cblxuLyoqXG4gKiBSdW5zIHRoZSBwYXNzZWQgY2FsbGJhY2sgZHVyaW5nIHRoZSBuZXh0IGlkbGUgcGVyaW9kLCBvciBpbW1lZGlhdGVseVxuICogaWYgdGhlIGJyb3dzZXIncyB2aXNpYmlsaXR5IHN0YXRlIGlzIChvciBiZWNvbWVzKSBoaWRkZW4uXG4gKi9cbmNvbnN0IHdoZW5JZGxlT3JIaWRkZW4gPSAoY2IpID0+IHtcbiAgY29uc3QgcklDID0gV0lORE9XLnJlcXVlc3RJZGxlQ2FsbGJhY2sgfHwgV0lORE9XLnNldFRpbWVvdXQ7XG5cbiAgLy8gSWYgdGhlIGRvY3VtZW50IGlzIGhpZGRlbiwgcnVuIHRoZSBjYWxsYmFjayBpbW1lZGlhdGVseSwgb3RoZXJ3aXNlXG4gIC8vIHJhY2UgYW4gaWRsZSBjYWxsYmFjayB3aXRoIHRoZSBuZXh0IGB2aXNpYmlsaXR5Y2hhbmdlYCBldmVudC5cbiAgaWYgKFdJTkRPVy5kb2N1bWVudD8udmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJykge1xuICAgIGNiKCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgY2IgPSBydW5PbmNlKGNiKTtcbiAgICBySUMoY2IpO1xuICAgIC8vIHNlbnRyeTogd2UgdXNlIG9uSGlkZGVuIGluc3RlYWQgb2YgZGlyZWN0bHkgbGlzdGVuaW5nIHRvIHZpc2liaWxpdHljaGFuZ2VcbiAgICAvLyBiZWNhdXNlIHNvbWUgYnJvd3NlcnMgd2Ugc3RpbGwgc3VwcG9ydCAoU2FmYXJpIDwxNC40KSBkb24ndCBmdWxseSBzdXBwb3J0XG4gICAgLy8gYHZpc2liaWxpdHljaGFuZ2VgIG9yIGhhdmUga25vd24gYnVncyB3LnIudCB0aGUgYHZpc2liaWxpdHljaGFuZ2VgIGV2ZW50LlxuICAgIG9uSGlkZGVuKGNiKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgd2hlbklkbGVPckhpZGRlbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2hlbklkbGVPckhpZGRlbi5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenIdleOrHidden.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/onFCP.js":
/*!****************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/onFCP.js ***!
  \****************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   FCPThresholds: () => (/* binding */ FCPThresholds),\n/* harmony export */   onFCP: () => (/* binding */ onFCP)\n/* harmony export */ });\n/* harmony import */ var _lib_bindReporter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/bindReporter.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/bindReporter.js\");\n/* harmony import */ var _lib_getActivationStart_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/getActivationStart.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getActivationStart.js\");\n/* harmony import */ var _lib_getVisibilityWatcher_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/getVisibilityWatcher.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getVisibilityWatcher.js\");\n/* harmony import */ var _lib_initMetric_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/initMetric.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initMetric.js\");\n/* harmony import */ var _lib_observe_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/observe.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/observe.js\");\n/* harmony import */ var _lib_whenActivated_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/whenActivated.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenActivated.js\");\n\n\n\n\n\n\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for FCP. See https://web.dev/articles/fcp#what_is_a_good_fcp_score */\nconst FCPThresholds = [1800, 3000];\n\n/**\n * Calculates the [FCP](https://web.dev/articles/fcp) value for the current page and\n * calls the `callback` function once the value is ready, along with the\n * relevant `paint` performance entry used to determine the value. The reported\n * value is a `DOMHighResTimeStamp`.\n */\nconst onFCP = (onReport, opts = {}) => {\n  (0,_lib_whenActivated_js__WEBPACK_IMPORTED_MODULE_5__.whenActivated)(() => {\n    const visibilityWatcher = (0,_lib_getVisibilityWatcher_js__WEBPACK_IMPORTED_MODULE_2__.getVisibilityWatcher)();\n    const metric = (0,_lib_initMetric_js__WEBPACK_IMPORTED_MODULE_3__.initMetric)('FCP');\n    let report;\n\n    const handleEntries = (entries) => {\n      for (const entry of entries) {\n        if (entry.name === 'first-contentful-paint') {\n          po.disconnect();\n\n          // Only report if the page wasn't hidden prior to the first paint.\n          if (entry.startTime < visibilityWatcher.firstHiddenTime) {\n            // The activationStart reference is used because FCP should be\n            // relative to page activation rather than navigation start if the\n            // page was prerendered. But in cases where `activationStart` occurs\n            // after the FCP, this time should be clamped at 0.\n            metric.value = Math.max(entry.startTime - (0,_lib_getActivationStart_js__WEBPACK_IMPORTED_MODULE_1__.getActivationStart)(), 0);\n            metric.entries.push(entry);\n            report(true);\n          }\n        }\n      }\n    };\n\n    const po = (0,_lib_observe_js__WEBPACK_IMPORTED_MODULE_4__.observe)('paint', handleEntries);\n\n    if (po) {\n      report = (0,_lib_bindReporter_js__WEBPACK_IMPORTED_MODULE_0__.bindReporter)(onReport, metric, FCPThresholds, opts.reportAllChanges);\n    }\n  });\n};\n\n\n//# sourceMappingURL=onFCP.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9vbkZDUC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFxRDtBQUNZO0FBQ0k7QUFDcEI7QUFDTjtBQUNZOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDLEVBQUUsb0VBQWE7QUFDZiw4QkFBOEIsa0ZBQW9CO0FBQ2xELG1CQUFtQiw4REFBVTtBQUM3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QsOEVBQWtCO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLHdEQUFPOztBQUV0QjtBQUNBLGVBQWUsa0VBQVk7QUFDM0I7QUFDQSxHQUFHO0FBQ0g7O0FBRWdDO0FBQ2hDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrYnJvd3Nlci11dGlsc0A5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvYnJvd3Nlci11dGlscy9idWlsZC9lc20vbWV0cmljcy93ZWItdml0YWxzL29uRkNQLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJpbmRSZXBvcnRlciB9IGZyb20gJy4vbGliL2JpbmRSZXBvcnRlci5qcyc7XG5pbXBvcnQgeyBnZXRBY3RpdmF0aW9uU3RhcnQgfSBmcm9tICcuL2xpYi9nZXRBY3RpdmF0aW9uU3RhcnQuanMnO1xuaW1wb3J0IHsgZ2V0VmlzaWJpbGl0eVdhdGNoZXIgfSBmcm9tICcuL2xpYi9nZXRWaXNpYmlsaXR5V2F0Y2hlci5qcyc7XG5pbXBvcnQgeyBpbml0TWV0cmljIH0gZnJvbSAnLi9saWIvaW5pdE1ldHJpYy5qcyc7XG5pbXBvcnQgeyBvYnNlcnZlIH0gZnJvbSAnLi9saWIvb2JzZXJ2ZS5qcyc7XG5pbXBvcnQgeyB3aGVuQWN0aXZhdGVkIH0gZnJvbSAnLi9saWIvd2hlbkFjdGl2YXRlZC5qcyc7XG5cbi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5cbi8qKiBUaHJlc2hvbGRzIGZvciBGQ1AuIFNlZSBodHRwczovL3dlYi5kZXYvYXJ0aWNsZXMvZmNwI3doYXRfaXNfYV9nb29kX2ZjcF9zY29yZSAqL1xuY29uc3QgRkNQVGhyZXNob2xkcyA9IFsxODAwLCAzMDAwXTtcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBbRkNQXShodHRwczovL3dlYi5kZXYvYXJ0aWNsZXMvZmNwKSB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgcGFnZSBhbmRcbiAqIGNhbGxzIHRoZSBgY2FsbGJhY2tgIGZ1bmN0aW9uIG9uY2UgdGhlIHZhbHVlIGlzIHJlYWR5LCBhbG9uZyB3aXRoIHRoZVxuICogcmVsZXZhbnQgYHBhaW50YCBwZXJmb3JtYW5jZSBlbnRyeSB1c2VkIHRvIGRldGVybWluZSB0aGUgdmFsdWUuIFRoZSByZXBvcnRlZFxuICogdmFsdWUgaXMgYSBgRE9NSGlnaFJlc1RpbWVTdGFtcGAuXG4gKi9cbmNvbnN0IG9uRkNQID0gKG9uUmVwb3J0LCBvcHRzID0ge30pID0+IHtcbiAgd2hlbkFjdGl2YXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdmlzaWJpbGl0eVdhdGNoZXIgPSBnZXRWaXNpYmlsaXR5V2F0Y2hlcigpO1xuICAgIGNvbnN0IG1ldHJpYyA9IGluaXRNZXRyaWMoJ0ZDUCcpO1xuICAgIGxldCByZXBvcnQ7XG5cbiAgICBjb25zdCBoYW5kbGVFbnRyaWVzID0gKGVudHJpZXMpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBpZiAoZW50cnkubmFtZSA9PT0gJ2ZpcnN0LWNvbnRlbnRmdWwtcGFpbnQnKSB7XG4gICAgICAgICAgcG8uZGlzY29ubmVjdCgpO1xuXG4gICAgICAgICAgLy8gT25seSByZXBvcnQgaWYgdGhlIHBhZ2Ugd2Fzbid0IGhpZGRlbiBwcmlvciB0byB0aGUgZmlyc3QgcGFpbnQuXG4gICAgICAgICAgaWYgKGVudHJ5LnN0YXJ0VGltZSA8IHZpc2liaWxpdHlXYXRjaGVyLmZpcnN0SGlkZGVuVGltZSkge1xuICAgICAgICAgICAgLy8gVGhlIGFjdGl2YXRpb25TdGFydCByZWZlcmVuY2UgaXMgdXNlZCBiZWNhdXNlIEZDUCBzaG91bGQgYmVcbiAgICAgICAgICAgIC8vIHJlbGF0aXZlIHRvIHBhZ2UgYWN0aXZhdGlvbiByYXRoZXIgdGhhbiBuYXZpZ2F0aW9uIHN0YXJ0IGlmIHRoZVxuICAgICAgICAgICAgLy8gcGFnZSB3YXMgcHJlcmVuZGVyZWQuIEJ1dCBpbiBjYXNlcyB3aGVyZSBgYWN0aXZhdGlvblN0YXJ0YCBvY2N1cnNcbiAgICAgICAgICAgIC8vIGFmdGVyIHRoZSBGQ1AsIHRoaXMgdGltZSBzaG91bGQgYmUgY2xhbXBlZCBhdCAwLlxuICAgICAgICAgICAgbWV0cmljLnZhbHVlID0gTWF0aC5tYXgoZW50cnkuc3RhcnRUaW1lIC0gZ2V0QWN0aXZhdGlvblN0YXJ0KCksIDApO1xuICAgICAgICAgICAgbWV0cmljLmVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICAgICAgICByZXBvcnQodHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHBvID0gb2JzZXJ2ZSgncGFpbnQnLCBoYW5kbGVFbnRyaWVzKTtcblxuICAgIGlmIChwbykge1xuICAgICAgcmVwb3J0ID0gYmluZFJlcG9ydGVyKG9uUmVwb3J0LCBtZXRyaWMsIEZDUFRocmVzaG9sZHMsIG9wdHMucmVwb3J0QWxsQ2hhbmdlcyk7XG4gICAgfVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IEZDUFRocmVzaG9sZHMsIG9uRkNQIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbkZDUC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/onFCP.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/onTTFB.js":
/*!*****************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/onTTFB.js ***!
  \*****************************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   TTFBThresholds: () => (/* binding */ TTFBThresholds),\n/* harmony export */   onTTFB: () => (/* binding */ onTTFB)\n/* harmony export */ });\n/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../types.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/types.js\");\n/* harmony import */ var _lib_bindReporter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/bindReporter.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/bindReporter.js\");\n/* harmony import */ var _lib_getActivationStart_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/getActivationStart.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getActivationStart.js\");\n/* harmony import */ var _lib_getNavigationEntry_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/getNavigationEntry.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/getNavigationEntry.js\");\n/* harmony import */ var _lib_initMetric_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/initMetric.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/initMetric.js\");\n/* harmony import */ var _lib_whenActivated_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/whenActivated.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/lib/whenActivated.js\");\n\n\n\n\n\n\n\n/*\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/** Thresholds for TTFB. See https://web.dev/articles/ttfb#what_is_a_good_ttfb_score */\nconst TTFBThresholds = [800, 1800];\n\n/**\n * Runs in the next task after the page is done loading and/or prerendering.\n * @param callback\n */\nconst whenReady = (callback) => {\n  if (_types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.document?.prerendering) {\n    (0,_lib_whenActivated_js__WEBPACK_IMPORTED_MODULE_5__.whenActivated)(() => whenReady(callback));\n  } else if (_types_js__WEBPACK_IMPORTED_MODULE_0__.WINDOW.document?.readyState !== 'complete') {\n    addEventListener('load', () => whenReady(callback), true);\n  } else {\n    // Queue a task so the callback runs after `loadEventEnd`.\n    setTimeout(callback);\n  }\n};\n\n/**\n * Calculates the [TTFB](https://web.dev/articles/ttfb) value for the\n * current page and calls the `callback` function once the page has loaded,\n * along with the relevant `navigation` performance entry used to determine the\n * value. The reported value is a `DOMHighResTimeStamp`.\n *\n * Note, this function waits until after the page is loaded to call `callback`\n * in order to ensure all properties of the `navigation` entry are populated.\n * This is useful if you want to report on other metrics exposed by the\n * [Navigation Timing API](https://w3c.github.io/navigation-timing/). For\n * example, the TTFB metric starts from the page's [time\n * origin](https://www.w3.org/TR/hr-time-2/#sec-time-origin), which means it\n * includes time spent on DNS lookup, connection negotiation, network latency,\n * and server processing time.\n */\nconst onTTFB = (onReport, opts = {}) => {\n  const metric = (0,_lib_initMetric_js__WEBPACK_IMPORTED_MODULE_4__.initMetric)('TTFB');\n  const report = (0,_lib_bindReporter_js__WEBPACK_IMPORTED_MODULE_1__.bindReporter)(onReport, metric, TTFBThresholds, opts.reportAllChanges);\n\n  whenReady(() => {\n    const navigationEntry = (0,_lib_getNavigationEntry_js__WEBPACK_IMPORTED_MODULE_3__.getNavigationEntry)();\n\n    if (navigationEntry) {\n      // The activationStart reference is used because TTFB should be\n      // relative to page activation rather than navigation start if the\n      // page was prerendered. But in cases where `activationStart` occurs\n      // after the first byte is received, this time should be clamped at 0.\n      metric.value = Math.max(navigationEntry.responseStart - (0,_lib_getActivationStart_js__WEBPACK_IMPORTED_MODULE_2__.getActivationStart)(), 0);\n\n      metric.entries = [navigationEntry];\n      report(true);\n    }\n  });\n};\n\n\n//# sourceMappingURL=onTTFB.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL21ldHJpY3Mvd2ViLXZpdGFscy9vblRURkIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBd0M7QUFDYTtBQUNZO0FBQ0E7QUFDaEI7QUFDTTs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLDZDQUFNO0FBQ1osSUFBSSxvRUFBYTtBQUNqQixJQUFJLFNBQVMsNkNBQU07QUFDbkI7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DLGlCQUFpQiw4REFBVTtBQUMzQixpQkFBaUIsa0VBQVk7O0FBRTdCO0FBQ0EsNEJBQTRCLDhFQUFrQjs7QUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RCw4RUFBa0I7O0FBRWhGO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFa0M7QUFDbEMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeS1pbnRlcm5hbCticm93c2VyLXV0aWxzQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC9icm93c2VyLXV0aWxzL2J1aWxkL2VzbS9tZXRyaWNzL3dlYi12aXRhbHMvb25UVEZCLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdJTkRPVyB9IGZyb20gJy4uLy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IGJpbmRSZXBvcnRlciB9IGZyb20gJy4vbGliL2JpbmRSZXBvcnRlci5qcyc7XG5pbXBvcnQgeyBnZXRBY3RpdmF0aW9uU3RhcnQgfSBmcm9tICcuL2xpYi9nZXRBY3RpdmF0aW9uU3RhcnQuanMnO1xuaW1wb3J0IHsgZ2V0TmF2aWdhdGlvbkVudHJ5IH0gZnJvbSAnLi9saWIvZ2V0TmF2aWdhdGlvbkVudHJ5LmpzJztcbmltcG9ydCB7IGluaXRNZXRyaWMgfSBmcm9tICcuL2xpYi9pbml0TWV0cmljLmpzJztcbmltcG9ydCB7IHdoZW5BY3RpdmF0ZWQgfSBmcm9tICcuL2xpYi93aGVuQWN0aXZhdGVkLmpzJztcblxuLypcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cblxuLyoqIFRocmVzaG9sZHMgZm9yIFRURkIuIFNlZSBodHRwczovL3dlYi5kZXYvYXJ0aWNsZXMvdHRmYiN3aGF0X2lzX2FfZ29vZF90dGZiX3Njb3JlICovXG5jb25zdCBUVEZCVGhyZXNob2xkcyA9IFs4MDAsIDE4MDBdO1xuXG4vKipcbiAqIFJ1bnMgaW4gdGhlIG5leHQgdGFzayBhZnRlciB0aGUgcGFnZSBpcyBkb25lIGxvYWRpbmcgYW5kL29yIHByZXJlbmRlcmluZy5cbiAqIEBwYXJhbSBjYWxsYmFja1xuICovXG5jb25zdCB3aGVuUmVhZHkgPSAoY2FsbGJhY2spID0+IHtcbiAgaWYgKFdJTkRPVy5kb2N1bWVudD8ucHJlcmVuZGVyaW5nKSB7XG4gICAgd2hlbkFjdGl2YXRlZCgoKSA9PiB3aGVuUmVhZHkoY2FsbGJhY2spKTtcbiAgfSBlbHNlIGlmIChXSU5ET1cuZG9jdW1lbnQ/LnJlYWR5U3RhdGUgIT09ICdjb21wbGV0ZScpIHtcbiAgICBhZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4gd2hlblJlYWR5KGNhbGxiYWNrKSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUXVldWUgYSB0YXNrIHNvIHRoZSBjYWxsYmFjayBydW5zIGFmdGVyIGBsb2FkRXZlbnRFbmRgLlxuICAgIHNldFRpbWVvdXQoY2FsbGJhY2spO1xuICB9XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIFtUVEZCXShodHRwczovL3dlYi5kZXYvYXJ0aWNsZXMvdHRmYikgdmFsdWUgZm9yIHRoZVxuICogY3VycmVudCBwYWdlIGFuZCBjYWxscyB0aGUgYGNhbGxiYWNrYCBmdW5jdGlvbiBvbmNlIHRoZSBwYWdlIGhhcyBsb2FkZWQsXG4gKiBhbG9uZyB3aXRoIHRoZSByZWxldmFudCBgbmF2aWdhdGlvbmAgcGVyZm9ybWFuY2UgZW50cnkgdXNlZCB0byBkZXRlcm1pbmUgdGhlXG4gKiB2YWx1ZS4gVGhlIHJlcG9ydGVkIHZhbHVlIGlzIGEgYERPTUhpZ2hSZXNUaW1lU3RhbXBgLlxuICpcbiAqIE5vdGUsIHRoaXMgZnVuY3Rpb24gd2FpdHMgdW50aWwgYWZ0ZXIgdGhlIHBhZ2UgaXMgbG9hZGVkIHRvIGNhbGwgYGNhbGxiYWNrYFxuICogaW4gb3JkZXIgdG8gZW5zdXJlIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBgbmF2aWdhdGlvbmAgZW50cnkgYXJlIHBvcHVsYXRlZC5cbiAqIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIHJlcG9ydCBvbiBvdGhlciBtZXRyaWNzIGV4cG9zZWQgYnkgdGhlXG4gKiBbTmF2aWdhdGlvbiBUaW1pbmcgQVBJXShodHRwczovL3czYy5naXRodWIuaW8vbmF2aWdhdGlvbi10aW1pbmcvKS4gRm9yXG4gKiBleGFtcGxlLCB0aGUgVFRGQiBtZXRyaWMgc3RhcnRzIGZyb20gdGhlIHBhZ2UncyBbdGltZVxuICogb3JpZ2luXShodHRwczovL3d3dy53My5vcmcvVFIvaHItdGltZS0yLyNzZWMtdGltZS1vcmlnaW4pLCB3aGljaCBtZWFucyBpdFxuICogaW5jbHVkZXMgdGltZSBzcGVudCBvbiBETlMgbG9va3VwLCBjb25uZWN0aW9uIG5lZ290aWF0aW9uLCBuZXR3b3JrIGxhdGVuY3ksXG4gKiBhbmQgc2VydmVyIHByb2Nlc3NpbmcgdGltZS5cbiAqL1xuY29uc3Qgb25UVEZCID0gKG9uUmVwb3J0LCBvcHRzID0ge30pID0+IHtcbiAgY29uc3QgbWV0cmljID0gaW5pdE1ldHJpYygnVFRGQicpO1xuICBjb25zdCByZXBvcnQgPSBiaW5kUmVwb3J0ZXIob25SZXBvcnQsIG1ldHJpYywgVFRGQlRocmVzaG9sZHMsIG9wdHMucmVwb3J0QWxsQ2hhbmdlcyk7XG5cbiAgd2hlblJlYWR5KCgpID0+IHtcbiAgICBjb25zdCBuYXZpZ2F0aW9uRW50cnkgPSBnZXROYXZpZ2F0aW9uRW50cnkoKTtcblxuICAgIGlmIChuYXZpZ2F0aW9uRW50cnkpIHtcbiAgICAgIC8vIFRoZSBhY3RpdmF0aW9uU3RhcnQgcmVmZXJlbmNlIGlzIHVzZWQgYmVjYXVzZSBUVEZCIHNob3VsZCBiZVxuICAgICAgLy8gcmVsYXRpdmUgdG8gcGFnZSBhY3RpdmF0aW9uIHJhdGhlciB0aGFuIG5hdmlnYXRpb24gc3RhcnQgaWYgdGhlXG4gICAgICAvLyBwYWdlIHdhcyBwcmVyZW5kZXJlZC4gQnV0IGluIGNhc2VzIHdoZXJlIGBhY3RpdmF0aW9uU3RhcnRgIG9jY3Vyc1xuICAgICAgLy8gYWZ0ZXIgdGhlIGZpcnN0IGJ5dGUgaXMgcmVjZWl2ZWQsIHRoaXMgdGltZSBzaG91bGQgYmUgY2xhbXBlZCBhdCAwLlxuICAgICAgbWV0cmljLnZhbHVlID0gTWF0aC5tYXgobmF2aWdhdGlvbkVudHJ5LnJlc3BvbnNlU3RhcnQgLSBnZXRBY3RpdmF0aW9uU3RhcnQoKSwgMCk7XG5cbiAgICAgIG1ldHJpYy5lbnRyaWVzID0gW25hdmlnYXRpb25FbnRyeV07XG4gICAgICByZXBvcnQodHJ1ZSk7XG4gICAgfVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IFRURkJUaHJlc2hvbGRzLCBvblRURkIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9uVFRGQi5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/metrics/web-vitals/onTTFB.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/networkUtils.js":
/*!****************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/networkUtils.js ***!
  \****************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getBodyString: () => (/* binding */ getBodyString),\n/* harmony export */   getFetchRequestArgBody: () => (/* binding */ getFetchRequestArgBody),\n/* harmony export */   serializeFormData: () => (/* binding */ serializeFormData)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _debug_build_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./debug-build.js */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/debug-build.js\");\n\n\n\n/**\n * Serializes FormData.\n *\n * This is a bit simplified, but gives us a decent estimate.\n * This converts e.g. { name: 'Anne Smith', age: 13 } to 'name=Anne+Smith&age=13'.\n *\n */\nfunction serializeFormData(formData) {\n  // @ts-expect-error passing FormData to URLSearchParams actually works\n  return new URLSearchParams(formData).toString();\n}\n\n/** Get the string representation of a body. */\nfunction getBodyString(body, _debug = _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug) {\n  try {\n    if (typeof body === 'string') {\n      return [body];\n    }\n\n    if (body instanceof URLSearchParams) {\n      return [body.toString()];\n    }\n\n    if (body instanceof FormData) {\n      return [serializeFormData(body)];\n    }\n\n    if (!body) {\n      return [undefined];\n    }\n  } catch (error) {\n    _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _debug.error(error, 'Failed to serialize body', body);\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n\n  _debug_build_js__WEBPACK_IMPORTED_MODULE_1__.DEBUG_BUILD && _debug.log('Skipping network body because of body type', body);\n\n  return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\n/**\n * Parses the fetch arguments to extract the request payload.\n *\n * We only support getting the body from the fetch options.\n */\nfunction getFetchRequestArgBody(fetchArgs = []) {\n  if (fetchArgs.length !== 2 || typeof fetchArgs[1] !== 'object') {\n    return undefined;\n  }\n\n  return (fetchArgs[1] ).body;\n}\n\n\n//# sourceMappingURL=networkUtils.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL25ldHdvcmtVdGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFxQztBQUNVOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qiw4QkFBOEI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXNDLCtDQUFLO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLElBQUksd0RBQVc7QUFDZjtBQUNBOztBQUVBLEVBQUUsd0RBQVc7O0FBRWI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFb0U7QUFDcEUiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeS1pbnRlcm5hbCticm93c2VyLXV0aWxzQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC9icm93c2VyLXV0aWxzL2J1aWxkL2VzbS9uZXR3b3JrVXRpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVidWcgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgREVCVUdfQlVJTEQgfSBmcm9tICcuL2RlYnVnLWJ1aWxkLmpzJztcblxuLyoqXG4gKiBTZXJpYWxpemVzIEZvcm1EYXRhLlxuICpcbiAqIFRoaXMgaXMgYSBiaXQgc2ltcGxpZmllZCwgYnV0IGdpdmVzIHVzIGEgZGVjZW50IGVzdGltYXRlLlxuICogVGhpcyBjb252ZXJ0cyBlLmcuIHsgbmFtZTogJ0FubmUgU21pdGgnLCBhZ2U6IDEzIH0gdG8gJ25hbWU9QW5uZStTbWl0aCZhZ2U9MTMnLlxuICpcbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplRm9ybURhdGEoZm9ybURhdGEpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBwYXNzaW5nIEZvcm1EYXRhIHRvIFVSTFNlYXJjaFBhcmFtcyBhY3R1YWxseSB3b3Jrc1xuICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyhmb3JtRGF0YSkudG9TdHJpbmcoKTtcbn1cblxuLyoqIEdldCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgYm9keS4gKi9cbmZ1bmN0aW9uIGdldEJvZHlTdHJpbmcoYm9keSwgX2RlYnVnID0gZGVidWcpIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gW2JvZHldO1xuICAgIH1cblxuICAgIGlmIChib2R5IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgICByZXR1cm4gW2JvZHkudG9TdHJpbmcoKV07XG4gICAgfVxuXG4gICAgaWYgKGJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIFtzZXJpYWxpemVGb3JtRGF0YShib2R5KV07XG4gICAgfVxuXG4gICAgaWYgKCFib2R5KSB7XG4gICAgICByZXR1cm4gW3VuZGVmaW5lZF07XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIERFQlVHX0JVSUxEICYmIF9kZWJ1Zy5lcnJvcihlcnJvciwgJ0ZhaWxlZCB0byBzZXJpYWxpemUgYm9keScsIGJvZHkpO1xuICAgIHJldHVybiBbdW5kZWZpbmVkLCAnQk9EWV9QQVJTRV9FUlJPUiddO1xuICB9XG5cbiAgREVCVUdfQlVJTEQgJiYgX2RlYnVnLmxvZygnU2tpcHBpbmcgbmV0d29yayBib2R5IGJlY2F1c2Ugb2YgYm9keSB0eXBlJywgYm9keSk7XG5cbiAgcmV0dXJuIFt1bmRlZmluZWQsICdVTlBBUlNFQUJMRV9CT0RZX1RZUEUnXTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgdGhlIGZldGNoIGFyZ3VtZW50cyB0byBleHRyYWN0IHRoZSByZXF1ZXN0IHBheWxvYWQuXG4gKlxuICogV2Ugb25seSBzdXBwb3J0IGdldHRpbmcgdGhlIGJvZHkgZnJvbSB0aGUgZmV0Y2ggb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0RmV0Y2hSZXF1ZXN0QXJnQm9keShmZXRjaEFyZ3MgPSBbXSkge1xuICBpZiAoZmV0Y2hBcmdzLmxlbmd0aCAhPT0gMiB8fCB0eXBlb2YgZmV0Y2hBcmdzWzFdICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gKGZldGNoQXJnc1sxXSApLmJvZHk7XG59XG5cbmV4cG9ydCB7IGdldEJvZHlTdHJpbmcsIGdldEZldGNoUmVxdWVzdEFyZ0JvZHksIHNlcmlhbGl6ZUZvcm1EYXRhIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1uZXR3b3JrVXRpbHMuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/networkUtils.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/types.js":
/*!*********************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/types.js ***!
  \*********************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   WINDOW: () => (/* binding */ WINDOW)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\nconst WINDOW = _sentry_core__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ\n\n;\n\n\n//# sourceMappingURL=types.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2Jyb3dzZXItdXRpbHNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2Jyb3dzZXItdXRpbHMvYnVpbGQvZXNtL3R5cGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTBDOztBQUUxQyxlQUFlLG9EQUFVOztBQUV6Qjs7QUFFa0I7QUFDbEIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeS1pbnRlcm5hbCticm93c2VyLXV0aWxzQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC9icm93c2VyLXV0aWxzL2J1aWxkL2VzbS90eXBlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHTE9CQUxfT0JKIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcblxuY29uc3QgV0lORE9XID0gR0xPQkFMX09CSlxuXG47XG5cbmV4cG9ydCB7IFdJTkRPVyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/types.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+feedback@9.46.0/node_modules/@sentry-internal/feedback/build/npm/esm/index.js":
/*!***************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+feedback@9.46.0/node_modules/@sentry-internal/feedback/build/npm/esm/index.js ***!
  \***************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   buildFeedbackIntegration: () => (/* binding */ buildFeedbackIntegration),\n/* harmony export */   feedbackModalIntegration: () => (/* binding */ feedbackModalIntegration),\n/* harmony export */   feedbackScreenshotIntegration: () => (/* binding */ feedbackScreenshotIntegration),\n/* harmony export */   getFeedback: () => (/* binding */ getFeedback),\n/* harmony export */   sendFeedback: () => (/* binding */ sendFeedback)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\n// exporting a separate copy of `WINDOW` rather than exporting the one from `@sentry/browser`\n// prevents the browser package from being bundled in the CDN bundle, and avoids a\n// circular dependency between the browser and feedback packages\nconst WINDOW = _sentry_core__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ ;\nconst DOCUMENT = WINDOW.document;\nconst NAVIGATOR = WINDOW.navigator;\n\nconst TRIGGER_LABEL = 'Report a Bug';\nconst CANCEL_BUTTON_LABEL = 'Cancel';\nconst SUBMIT_BUTTON_LABEL = 'Send Bug Report';\nconst CONFIRM_BUTTON_LABEL = 'Confirm';\nconst FORM_TITLE = 'Report a Bug';\nconst EMAIL_PLACEHOLDER = 'your.email@example.org';\nconst EMAIL_LABEL = 'Email';\nconst MESSAGE_PLACEHOLDER = \"What's the bug? What did you expect?\";\nconst MESSAGE_LABEL = 'Description';\nconst NAME_PLACEHOLDER = 'Your Name';\nconst NAME_LABEL = 'Name';\nconst SUCCESS_MESSAGE_TEXT = 'Thank you for your report!';\nconst IS_REQUIRED_LABEL = '(required)';\nconst ADD_SCREENSHOT_LABEL = 'Add a screenshot';\nconst REMOVE_SCREENSHOT_LABEL = 'Remove screenshot';\n\nconst FEEDBACK_WIDGET_SOURCE = 'widget';\nconst FEEDBACK_API_SOURCE = 'api';\n\nconst SUCCESS_MESSAGE_TIMEOUT = 5000;\n\n/**\n * Public API to send a Feedback item to Sentry\n */\nconst sendFeedback = (\n  params,\n  hint = { includeReplay: true },\n) => {\n  if (!params.message) {\n    throw new Error('Unable to submit feedback with empty message');\n  }\n\n  // We want to wait for the feedback to be sent (or not)\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n\n  if (!client) {\n    throw new Error('No client setup, cannot send feedback.');\n  }\n\n  if (params.tags && Object.keys(params.tags).length) {\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)().setTags(params.tags);\n  }\n  const eventId = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureFeedback)(\n    {\n      source: FEEDBACK_API_SOURCE,\n      url: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getLocationHref)(),\n      ...params,\n    },\n    hint,\n  );\n\n  // We want to wait for the feedback to be sent (or not)\n  return new Promise((resolve, reject) => {\n    // After 30s, we want to clear anyhow\n    const timeout = setTimeout(() => reject('Unable to determine if Feedback was correctly sent.'), 30000);\n\n    const cleanup = client.on('afterSendEvent', (event, response) => {\n      if (event.event_id !== eventId) {\n        return;\n      }\n\n      clearTimeout(timeout);\n      cleanup();\n\n      // Require valid status codes, otherwise can assume feedback was not sent successfully\n      if (\n        response &&\n        typeof response.statusCode === 'number' &&\n        response.statusCode >= 200 &&\n        response.statusCode < 300\n      ) {\n        return resolve(eventId);\n      }\n\n      if (response && typeof response.statusCode === 'number' && response.statusCode === 0) {\n        return reject(\n          'Unable to send Feedback. This is because of network issues, or because you are using an ad-blocker.',\n        );\n      }\n\n      if (response && typeof response.statusCode === 'number' && response.statusCode === 403) {\n        return reject(\n          'Unable to send Feedback. This could be because this domain is not in your list of allowed domains.',\n        );\n      }\n\n      return reject(\n        'Unable to send Feedback. This could be because of network issues, or because you are using an ad-blocker',\n      );\n    });\n  });\n};\n\n/*\n * For reference, the fully built event looks something like this:\n * {\n *     \"type\": \"feedback\",\n *     \"event_id\": \"d2132d31b39445f1938d7e21b6bf0ec4\",\n *     \"timestamp\": 1597977777.6189718,\n *     \"dist\": \"1.12\",\n *     \"platform\": \"javascript\",\n *     \"environment\": \"production\",\n *     \"release\": 42,\n *     \"tags\": {\"transaction\": \"/organizations/:orgId/performance/:eventSlug/\"},\n *     \"sdk\": {\"name\": \"name\", \"version\": \"version\"},\n *     \"user\": {\n *         \"id\": \"123\",\n *         \"username\": \"user\",\n *         \"email\": \"user@site.com\",\n *         \"ip_address\": \"192.168.11.12\",\n *     },\n *     \"request\": {\n *         \"url\": None,\n *         \"headers\": {\n *             \"user-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15\"\n *         },\n *     },\n *     \"contexts\": {\n *         \"feedback\": {\n *             \"message\": \"test message\",\n *             \"contact_email\": \"test@example.com\",\n *             \"type\": \"feedback\",\n *         },\n *         \"trace\": {\n *             \"trace_id\": \"4C79F60C11214EB38604F4AE0781BFB2\",\n *             \"span_id\": \"FA90FDEAD5F74052\",\n *             \"type\": \"trace\",\n *         },\n *         \"replay\": {\n *             \"replay_id\": \"e2d42047b1c5431c8cba85ee2a8ab25d\",\n *         },\n *     },\n *   }\n */\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = ( false || false);\n\n/**\n * Mobile browsers do not support `mediaDevices.getDisplayMedia` even though they have the api implemented\n * Instead they return things like `NotAllowedError` when called.\n *\n * It's simpler for us to browser sniff first, and avoid loading the integration if we can.\n *\n * https://stackoverflow.com/a/58879212\n * https://stackoverflow.com/a/3540295\n *\n * `mediaDevices.getDisplayMedia` is also only supported in secure contexts, and return a `mediaDevices is not supported` error, so we should also avoid loading the integration if we can.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\n */\nfunction isScreenshotSupported() {\n  if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(NAVIGATOR.userAgent)) {\n    return false;\n  }\n  /**\n   * User agent on iPads show as Macintosh, so we need extra checks\n   *\n   * https://forums.developer.apple.com/forums/thread/119186\n   * https://stackoverflow.com/questions/60482650/how-to-detect-ipad-useragent-on-safari-browser\n   */\n  if (/Macintosh/i.test(NAVIGATOR.userAgent) && NAVIGATOR.maxTouchPoints && NAVIGATOR.maxTouchPoints > 1) {\n    return false;\n  }\n  if (!isSecureContext) {\n    return false;\n  }\n  return true;\n}\n\n/**\n * Quick and dirty deep merge for the Feedback integration options\n */\nfunction mergeOptions(\n  defaultOptions,\n  optionOverrides,\n) {\n  return {\n    ...defaultOptions,\n    ...optionOverrides,\n    tags: {\n      ...defaultOptions.tags,\n      ...optionOverrides.tags,\n    },\n    onFormOpen: () => {\n      optionOverrides.onFormOpen?.();\n      defaultOptions.onFormOpen?.();\n    },\n    onFormClose: () => {\n      optionOverrides.onFormClose?.();\n      defaultOptions.onFormClose?.();\n    },\n    onSubmitSuccess: (data, eventId) => {\n      optionOverrides.onSubmitSuccess?.(data, eventId);\n      defaultOptions.onSubmitSuccess?.(data, eventId);\n    },\n    onSubmitError: (error) => {\n      optionOverrides.onSubmitError?.(error);\n      defaultOptions.onSubmitError?.(error);\n    },\n    onFormSubmitted: () => {\n      optionOverrides.onFormSubmitted?.();\n      defaultOptions.onFormSubmitted?.();\n    },\n    themeDark: {\n      ...defaultOptions.themeDark,\n      ...optionOverrides.themeDark,\n    },\n    themeLight: {\n      ...defaultOptions.themeLight,\n      ...optionOverrides.themeLight,\n    },\n  };\n}\n\n/**\n * Creates <style> element for widget actor (button that opens the dialog)\n */\nfunction createActorStyles(styleNonce) {\n  const style = DOCUMENT.createElement('style');\n  style.textContent = `\n.widget__actor {\n  position: fixed;\n  z-index: var(--z-index);\n  margin: var(--page-margin);\n  inset: var(--actor-inset);\n\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 16px;\n\n  font-family: inherit;\n  font-size: var(--font-size);\n  font-weight: 600;\n  line-height: 1.14em;\n  text-decoration: none;\n\n  background: var(--actor-background, var(--background));\n  border-radius: var(--actor-border-radius, 1.7em/50%);\n  border: var(--actor-border, var(--border));\n  box-shadow: var(--actor-box-shadow, var(--box-shadow));\n  color: var(--actor-color, var(--foreground));\n  fill: var(--actor-color, var(--foreground));\n  cursor: pointer;\n  opacity: 1;\n  transition: transform 0.2s ease-in-out;\n  transform: translate(0, 0) scale(1);\n}\n.widget__actor[aria-hidden=\"true\"] {\n  opacity: 0;\n  pointer-events: none;\n  visibility: hidden;\n  transform: translate(0, 16px) scale(0.98);\n}\n\n.widget__actor:hover {\n  background: var(--actor-hover-background, var(--background));\n  filter: var(--interactive-filter);\n}\n\n.widget__actor svg {\n  width: 1.14em;\n  height: 1.14em;\n}\n\n@media (max-width: 600px) {\n  .widget__actor span {\n    display: none;\n  }\n}\n`;\n\n  if (styleNonce) {\n    style.setAttribute('nonce', styleNonce);\n  }\n\n  return style;\n}\n\n/**\n * Helper function to set a dict of attributes on element (w/ specified namespace)\n */\nfunction setAttributesNS(el, attributes) {\n  Object.entries(attributes).forEach(([key, val]) => {\n    el.setAttributeNS(null, key, val);\n  });\n  return el;\n}\n\nconst SIZE = 20;\nconst XMLNS$2 = 'http://www.w3.org/2000/svg';\n\n/**\n * Feedback Icon\n */\nfunction FeedbackIcon() {\n  const createElementNS = (tagName) =>\n    WINDOW.document.createElementNS(XMLNS$2, tagName);\n  const svg = setAttributesNS(createElementNS('svg'), {\n    width: `${SIZE}`,\n    height: `${SIZE}`,\n    viewBox: `0 0 ${SIZE} ${SIZE}`,\n    fill: 'var(--actor-color, var(--foreground))',\n  });\n\n  const g = setAttributesNS(createElementNS('g'), {\n    clipPath: 'url(#clip0_57_80)',\n  });\n\n  const path = setAttributesNS(createElementNS('path'), {\n    ['fill-rule']: 'evenodd',\n    ['clip-rule']: 'evenodd',\n    d: 'M15.6622 15H12.3997C12.2129 14.9959 12.031 14.9396 11.8747 14.8375L8.04965 12.2H7.49956V19.1C7.4875 19.3348 7.3888 19.5568 7.22256 19.723C7.05632 19.8892 6.83435 19.9879 6.59956 20H2.04956C1.80193 19.9968 1.56535 19.8969 1.39023 19.7218C1.21511 19.5467 1.1153 19.3101 1.11206 19.0625V12.2H0.949652C0.824431 12.2017 0.700142 12.1783 0.584123 12.1311C0.468104 12.084 0.362708 12.014 0.274155 11.9255C0.185602 11.8369 0.115689 11.7315 0.0685419 11.6155C0.0213952 11.4995 -0.00202913 11.3752 -0.00034808 11.25V3.75C-0.00900498 3.62067 0.0092504 3.49095 0.0532651 3.36904C0.0972798 3.24712 0.166097 3.13566 0.255372 3.04168C0.344646 2.94771 0.452437 2.87327 0.571937 2.82307C0.691437 2.77286 0.82005 2.74798 0.949652 2.75H8.04965L11.8747 0.1625C12.031 0.0603649 12.2129 0.00407221 12.3997 0H15.6622C15.9098 0.00323746 16.1464 0.103049 16.3215 0.278167C16.4966 0.453286 16.5964 0.689866 16.5997 0.9375V3.25269C17.3969 3.42959 18.1345 3.83026 18.7211 4.41679C19.5322 5.22788 19.9878 6.32796 19.9878 7.47502C19.9878 8.62209 19.5322 9.72217 18.7211 10.5333C18.1345 11.1198 17.3969 11.5205 16.5997 11.6974V14.0125C16.6047 14.1393 16.5842 14.2659 16.5395 14.3847C16.4948 14.5035 16.4268 14.6121 16.3394 14.7042C16.252 14.7962 16.147 14.8698 16.0307 14.9206C15.9144 14.9714 15.7891 14.9984 15.6622 15ZM1.89695 10.325H1.88715V4.625H8.33715C8.52423 4.62301 8.70666 4.56654 8.86215 4.4625L12.6872 1.875H14.7247V13.125H12.6872L8.86215 10.4875C8.70666 10.3835 8.52423 10.327 8.33715 10.325H2.20217C2.15205 10.3167 2.10102 10.3125 2.04956 10.3125C1.9981 10.3125 1.94708 10.3167 1.89695 10.325ZM2.98706 12.2V18.1625H5.66206V12.2H2.98706ZM16.5997 9.93612V5.01393C16.6536 5.02355 16.7072 5.03495 16.7605 5.04814C17.1202 5.13709 17.4556 5.30487 17.7425 5.53934C18.0293 5.77381 18.2605 6.06912 18.4192 6.40389C18.578 6.73866 18.6603 7.10452 18.6603 7.47502C18.6603 7.84552 18.578 8.21139 18.4192 8.54616C18.2605 8.88093 18.0293 9.17624 17.7425 9.41071C17.4556 9.64518 17.1202 9.81296 16.7605 9.90191C16.7072 9.91509 16.6536 9.9265 16.5997 9.93612Z',\n  });\n  svg.appendChild(g).appendChild(path);\n\n  const speakerDefs = createElementNS('defs');\n  const speakerClipPathDef = setAttributesNS(createElementNS('clipPath'), {\n    id: 'clip0_57_80',\n  });\n\n  const speakerRect = setAttributesNS(createElementNS('rect'), {\n    width: `${SIZE}`,\n    height: `${SIZE}`,\n    fill: 'white',\n  });\n\n  speakerClipPathDef.appendChild(speakerRect);\n  speakerDefs.appendChild(speakerClipPathDef);\n\n  svg.appendChild(speakerDefs).appendChild(speakerClipPathDef).appendChild(speakerRect);\n\n  return svg;\n}\n\n/**\n * The sentry-provided button to open the feedback modal\n */\nfunction Actor({ triggerLabel, triggerAriaLabel, shadow, styleNonce }) {\n  const el = DOCUMENT.createElement('button');\n  el.type = 'button';\n  el.className = 'widget__actor';\n  el.ariaHidden = 'false';\n  el.ariaLabel = triggerAriaLabel || triggerLabel || TRIGGER_LABEL;\n  el.appendChild(FeedbackIcon());\n  if (triggerLabel) {\n    const label = DOCUMENT.createElement('span');\n    label.appendChild(DOCUMENT.createTextNode(triggerLabel));\n    el.appendChild(label);\n  }\n\n  const style = createActorStyles(styleNonce);\n\n  return {\n    el,\n    appendToDom() {\n      shadow.appendChild(style);\n      shadow.appendChild(el);\n    },\n    removeFromDom() {\n      el.remove();\n      style.remove();\n    },\n    show() {\n      el.ariaHidden = 'false';\n    },\n    hide() {\n      el.ariaHidden = 'true';\n    },\n  };\n}\n\nconst PURPLE = 'rgba(88, 74, 192, 1)';\n\nconst DEFAULT_LIGHT = {\n  foreground: '#2b2233',\n  background: '#ffffff',\n  accentForeground: 'white',\n  accentBackground: PURPLE,\n  successColor: '#268d75',\n  errorColor: '#df3338',\n  border: '1.5px solid rgba(41, 35, 47, 0.13)',\n  boxShadow: '0px 4px 24px 0px rgba(43, 34, 51, 0.12)',\n  outline: '1px auto var(--accent-background)',\n  interactiveFilter: 'brightness(95%)',\n};\nconst DEFAULT_DARK = {\n  foreground: '#ebe6ef',\n  background: '#29232f',\n  accentForeground: 'white',\n  accentBackground: PURPLE,\n  successColor: '#2da98c',\n  errorColor: '#f55459',\n  border: '1.5px solid rgba(235, 230, 239, 0.15)',\n  boxShadow: '0px 4px 24px 0px rgba(43, 34, 51, 0.12)',\n  outline: '1px auto var(--accent-background)',\n  interactiveFilter: 'brightness(150%)',\n};\n\nfunction getThemedCssVariables(theme) {\n  return `\n  --foreground: ${theme.foreground};\n  --background: ${theme.background};\n  --accent-foreground: ${theme.accentForeground};\n  --accent-background: ${theme.accentBackground};\n  --success-color: ${theme.successColor};\n  --error-color: ${theme.errorColor};\n  --border: ${theme.border};\n  --box-shadow: ${theme.boxShadow};\n  --outline: ${theme.outline};\n  --interactive-filter: ${theme.interactiveFilter};\n  `;\n}\n\n/**\n * Creates <style> element for widget actor (button that opens the dialog)\n */\nfunction createMainStyles({\n  colorScheme,\n  themeDark,\n  themeLight,\n  styleNonce,\n}) {\n  const style = DOCUMENT.createElement('style');\n  style.textContent = `\n:host {\n  --font-family: system-ui, 'Helvetica Neue', Arial, sans-serif;\n  --font-size: 14px;\n  --z-index: 100000;\n\n  --page-margin: 16px;\n  --inset: auto 0 0 auto;\n  --actor-inset: var(--inset);\n\n  font-family: var(--font-family);\n  font-size: var(--font-size);\n\n  ${colorScheme !== 'system' ? 'color-scheme: only light;' : ''}\n\n  ${getThemedCssVariables(\n    colorScheme === 'dark' ? { ...DEFAULT_DARK, ...themeDark } : { ...DEFAULT_LIGHT, ...themeLight },\n  )}\n}\n\n${\n  colorScheme === 'system'\n    ? `\n@media (prefers-color-scheme: dark) {\n  :host {\n    ${getThemedCssVariables({ ...DEFAULT_DARK, ...themeDark })}\n  }\n}`\n    : ''\n}\n}\n`;\n\n  if (styleNonce) {\n    style.setAttribute('nonce', styleNonce);\n  }\n\n  return style;\n}\n\nconst buildFeedbackIntegration = ({\n  lazyLoadIntegration,\n  getModalIntegration,\n  getScreenshotIntegration,\n}\n\n) => {\n  const feedbackIntegration = (({\n    // FeedbackGeneralConfiguration\n    id = 'sentry-feedback',\n    autoInject = true,\n    showBranding = true,\n    isEmailRequired = false,\n    isNameRequired = false,\n    showEmail = true,\n    showName = true,\n    enableScreenshot = true,\n    useSentryUser = {\n      email: 'email',\n      name: 'username',\n    },\n    tags,\n    styleNonce,\n    scriptNonce,\n\n    // FeedbackThemeConfiguration\n    colorScheme = 'system',\n    themeLight = {},\n    themeDark = {},\n\n    // FeedbackTextConfiguration\n    addScreenshotButtonLabel = ADD_SCREENSHOT_LABEL,\n    cancelButtonLabel = CANCEL_BUTTON_LABEL,\n    confirmButtonLabel = CONFIRM_BUTTON_LABEL,\n    emailLabel = EMAIL_LABEL,\n    emailPlaceholder = EMAIL_PLACEHOLDER,\n    formTitle = FORM_TITLE,\n    isRequiredLabel = IS_REQUIRED_LABEL,\n    messageLabel = MESSAGE_LABEL,\n    messagePlaceholder = MESSAGE_PLACEHOLDER,\n    nameLabel = NAME_LABEL,\n    namePlaceholder = NAME_PLACEHOLDER,\n    removeScreenshotButtonLabel = REMOVE_SCREENSHOT_LABEL,\n    submitButtonLabel = SUBMIT_BUTTON_LABEL,\n    successMessageText = SUCCESS_MESSAGE_TEXT,\n    triggerLabel = TRIGGER_LABEL,\n    triggerAriaLabel = '',\n\n    // FeedbackCallbacks\n    onFormOpen,\n    onFormClose,\n    onSubmitSuccess,\n    onSubmitError,\n    onFormSubmitted,\n  } = {}) => {\n    const _options = {\n      id,\n      autoInject,\n      showBranding,\n      isEmailRequired,\n      isNameRequired,\n      showEmail,\n      showName,\n      enableScreenshot,\n      useSentryUser,\n      tags,\n      styleNonce,\n      scriptNonce,\n\n      colorScheme,\n      themeDark,\n      themeLight,\n\n      triggerLabel,\n      triggerAriaLabel,\n      cancelButtonLabel,\n      submitButtonLabel,\n      confirmButtonLabel,\n      formTitle,\n      emailLabel,\n      emailPlaceholder,\n      messageLabel,\n      messagePlaceholder,\n      nameLabel,\n      namePlaceholder,\n      successMessageText,\n      isRequiredLabel,\n      addScreenshotButtonLabel,\n      removeScreenshotButtonLabel,\n\n      onFormClose,\n      onFormOpen,\n      onSubmitError,\n      onSubmitSuccess,\n      onFormSubmitted,\n    };\n\n    let _shadow = null;\n    let _subscriptions = [];\n\n    /**\n     * Get the shadow root where we will append css\n     */\n    const _createShadow = (options) => {\n      if (!_shadow) {\n        const host = DOCUMENT.createElement('div');\n        host.id = String(options.id);\n        DOCUMENT.body.appendChild(host);\n\n        _shadow = host.attachShadow({ mode: 'open' });\n        _shadow.appendChild(createMainStyles(options));\n      }\n      return _shadow ;\n    };\n\n    const _loadAndRenderDialog = async (\n      options,\n    ) => {\n      const screenshotRequired = options.enableScreenshot && isScreenshotSupported();\n\n      let modalIntegration;\n      let screenshotIntegration;\n\n      try {\n        const modalIntegrationFn = getModalIntegration\n          ? getModalIntegration()\n          : await lazyLoadIntegration('feedbackModalIntegration', scriptNonce);\n        modalIntegration = modalIntegrationFn() ;\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addIntegration)(modalIntegration);\n      } catch {\n        DEBUG_BUILD &&\n          _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.error(\n            '[Feedback] Error when trying to load feedback integrations. Try using `feedbackSyncIntegration` in your `Sentry.init`.',\n          );\n        throw new Error('[Feedback] Missing feedback modal integration!');\n      }\n\n      try {\n        const screenshotIntegrationFn = screenshotRequired\n          ? getScreenshotIntegration\n            ? getScreenshotIntegration()\n            : await lazyLoadIntegration('feedbackScreenshotIntegration', scriptNonce)\n          : undefined;\n\n        if (screenshotIntegrationFn) {\n          screenshotIntegration = screenshotIntegrationFn() ;\n          (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addIntegration)(screenshotIntegration);\n        }\n      } catch {\n        DEBUG_BUILD &&\n          _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.error('[Feedback] Missing feedback screenshot integration. Proceeding without screenshots.');\n      }\n\n      const dialog = modalIntegration.createDialog({\n        options: {\n          ...options,\n          onFormClose: () => {\n            dialog?.close();\n            options.onFormClose?.();\n          },\n          onFormSubmitted: () => {\n            dialog?.close();\n            options.onFormSubmitted?.();\n          },\n        },\n        screenshotIntegration,\n        sendFeedback,\n        shadow: _createShadow(options),\n      });\n\n      return dialog;\n    };\n\n    const _attachTo = (el, optionOverrides = {}) => {\n      const mergedOptions = mergeOptions(_options, optionOverrides);\n\n      const targetEl =\n        typeof el === 'string' ? DOCUMENT.querySelector(el) : typeof el.addEventListener === 'function' ? el : null;\n\n      if (!targetEl) {\n        DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.error('[Feedback] Unable to attach to target element');\n        throw new Error('Unable to attach to target element');\n      }\n\n      let dialog = null;\n      const handleClick = async () => {\n        if (!dialog) {\n          dialog = await _loadAndRenderDialog({\n            ...mergedOptions,\n            onFormSubmitted: () => {\n              dialog?.removeFromDom();\n              mergedOptions.onFormSubmitted?.();\n            },\n          });\n        }\n        dialog.appendToDom();\n        dialog.open();\n      };\n      targetEl.addEventListener('click', handleClick);\n      const unsubscribe = () => {\n        _subscriptions = _subscriptions.filter(sub => sub !== unsubscribe);\n        dialog?.removeFromDom();\n        dialog = null;\n        targetEl.removeEventListener('click', handleClick);\n      };\n      _subscriptions.push(unsubscribe);\n      return unsubscribe;\n    };\n\n    const _createActor = (optionOverrides = {}) => {\n      const mergedOptions = mergeOptions(_options, optionOverrides);\n      const shadow = _createShadow(mergedOptions);\n      const actor = Actor({\n        triggerLabel: mergedOptions.triggerLabel,\n        triggerAriaLabel: mergedOptions.triggerAriaLabel,\n        shadow,\n        styleNonce,\n      });\n      _attachTo(actor.el, {\n        ...mergedOptions,\n        onFormOpen() {\n          actor.hide();\n        },\n        onFormClose() {\n          actor.show();\n        },\n        onFormSubmitted() {\n          actor.show();\n        },\n      });\n      return actor;\n    };\n\n    return {\n      name: 'Feedback',\n      setupOnce() {\n        if (!(0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isBrowser)() || !_options.autoInject) {\n          return;\n        }\n\n        if (DOCUMENT.readyState === 'loading') {\n          DOCUMENT.addEventListener('DOMContentLoaded', () => _createActor().appendToDom());\n        } else {\n          _createActor().appendToDom();\n        }\n      },\n\n      /**\n       * Adds click listener to the element to open a feedback dialog\n       *\n       * The returned function can be used to remove the click listener\n       */\n      attachTo: _attachTo,\n\n      /**\n       * Creates a new widget which is composed of a Button which triggers a Dialog.\n       * Accepts partial options to override any options passed to constructor.\n       */\n      createWidget(optionOverrides = {}) {\n        const actor = _createActor(mergeOptions(_options, optionOverrides));\n        actor.appendToDom();\n        return actor;\n      },\n\n      /**\n       * Creates a new Form which you can\n       * Accepts partial options to override any options passed to constructor.\n       */\n      async createForm(\n        optionOverrides = {},\n      ) {\n        return _loadAndRenderDialog(mergeOptions(_options, optionOverrides));\n      },\n\n      /**\n       * Removes the Feedback integration (including host, shadow DOM, and all widgets)\n       */\n      remove() {\n        if (_shadow) {\n          _shadow.parentElement?.remove();\n          _shadow = null;\n        }\n        // Remove any lingering subscriptions\n        _subscriptions.forEach(sub => sub());\n        _subscriptions = [];\n      },\n    };\n  }) ;\n\n  return feedbackIntegration;\n};\n\n/**\n * This is a small utility to get a type-safe instance of the Feedback integration.\n */\nfunction getFeedback() {\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  return client?.getIntegrationByName('Feedback');\n}\n\nvar n,l$1,u$1,i$1,o$1,r$1,f$1,c$1={},s$1=[],a$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,h$1=Array.isArray;function v$1(n,l){for(var u in l)n[u]=l[u];return n}function p$1(n){var l=n.parentNode;l&&l.removeChild(n);}function y$1(l,u,t){var i,o,r,f={};for(r in u)\"key\"==r?i=u[r]:\"ref\"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps) void 0===f[r]&&(f[r]=l.defaultProps[r]);return d$1(l,f,i,o,null)}function d$1(n,t,i,o,r){var f={type:n,props:t,key:i,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:null==r?++u$1:r,__i:-1,__u:0};return null==r&&null!=l$1.vnode&&l$1.vnode(f),f}function g$1(n){return n.children}function b$1(n,l){this.props=n,this.context=l;}function m$1(n,l){if(null==l)return n.__?m$1(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return \"function\"==typeof n.type?m$1(n):null}function w$1(n,u,t){var i,o=n.__v,r=o.__e,f=n.__P;if(f)return (i=v$1({},o)).__v=o.__v+1,l$1.vnode&&l$1.vnode(i),M(f,i,o,n.__n,void 0!==f.ownerSVGElement,32&o.__u?[r]:null,u,null==r?m$1(o):r,!!(32&o.__u),t),i.__.__k[i.__i]=i,i.__d=void 0,i.__e!=r&&k$1(i),i}function k$1(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return k$1(n)}}function x$1(n){(!n.__d&&(n.__d=true)&&i$1.push(n)&&!C$1.__r++||o$1!==l$1.debounceRendering)&&((o$1=l$1.debounceRendering)||r$1)(C$1);}function C$1(){var n,u,t,o=[],r=[];for(i$1.sort(f$1);n=i$1.shift();)n.__d&&(t=i$1.length,u=w$1(n,o,r)||u,0===t||i$1.length>t?(j$1(o,u,r),r.length=o.length=0,u=void 0,i$1.sort(f$1)):u&&l$1.__c&&l$1.__c(u,s$1));u&&j$1(o,u,r),C$1.__r=0;}function P$1(n,l,u,t,i,o,r,f,e,a,h){var v,p,y,d,_,g=t&&t.__k||s$1,b=l.length;for(u.__d=e,S(u,l,g),e=u.__d,v=0;v<b;v++)null!=(y=u.__k[v])&&\"boolean\"!=typeof y&&\"function\"!=typeof y&&(p=-1===y.__i?c$1:g[y.__i]||c$1,y.__i=v,M(n,y,p,i,o,r,f,e,a,h),d=y.__e,y.ref&&p.ref!=y.ref&&(p.ref&&N(p.ref,null,y),h.push(y.ref,y.__c||d,y)),null==_&&null!=d&&(_=d),65536&y.__u||p.__k===y.__k?e=$(y,e,n):\"function\"==typeof y.type&&void 0!==y.__d?e=y.__d:d&&(e=d.nextSibling),y.__d=void 0,y.__u&=-196609);u.__d=e,u.__e=_;}function S(n,l,u){var t,i,o,r,f,e=l.length,c=u.length,s=c,a=0;for(n.__k=[],t=0;t<e;t++)null!=(i=n.__k[t]=null==(i=l[t])||\"boolean\"==typeof i||\"function\"==typeof i?null:\"string\"==typeof i||\"number\"==typeof i||\"bigint\"==typeof i||i.constructor==String?d$1(null,i,null,null,i):h$1(i)?d$1(g$1,{children:i},null,null,null):void 0===i.constructor&&i.__b>0?d$1(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):i)?(i.__=n,i.__b=n.__b+1,f=I(i,u,r=t+a,s),i.__i=f,o=null,-1!==f&&(s--,(o=u[f])&&(o.__u|=131072)),null==o||null===o.__v?(-1==f&&a--,\"function\"!=typeof i.type&&(i.__u|=65536)):f!==r&&(f===r+1?a++:f>r?s>e-r?a+=f-r:a--:a=f<r&&f==r-1?f-r:0,f!==t+a&&(i.__u|=65536))):(o=u[t])&&null==o.key&&o.__e&&(o.__e==n.__d&&(n.__d=m$1(o)),O(o,o,false),u[t]=null,s--);if(s)for(t=0;t<c;t++)null!=(o=u[t])&&0==(131072&o.__u)&&(o.__e==n.__d&&(n.__d=m$1(o)),O(o,o));}function $(n,l,u){var t,i;if(\"function\"==typeof n.type){for(t=n.__k,i=0;t&&i<t.length;i++)t[i]&&(t[i].__=n,l=$(t[i],l,u));return l}n.__e!=l&&(u.insertBefore(n.__e,l||null),l=n.__e);do{l=l&&l.nextSibling;}while(null!=l&&8===l.nodeType);return l}function I(n,l,u,t){var i=n.key,o=n.type,r=u-1,f=u+1,e=l[u];if(null===e||e&&i==e.key&&o===e.type)return u;if(t>(null!=e&&0==(131072&e.__u)?1:0))for(;r>=0||f<l.length;){if(r>=0){if((e=l[r])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return r;r--;}if(f<l.length){if((e=l[f])&&0==(131072&e.__u)&&i==e.key&&o===e.type)return f;f++;}}return  -1}function T$1(n,l,u){\"-\"===l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||a$1.test(l)?u:u+\"px\";}function A$1(n,l,u,t,i){var o;n:if(\"style\"===l)if(\"string\"==typeof u)n.style.cssText=u;else {if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||T$1(n.style,l,\"\");if(u)for(l in u)t&&u[l]===t[l]||T$1(n.style,l,u[l]);}else if(\"o\"===l[0]&&\"n\"===l[1])o=l!==(l=l.replace(/(PointerCapture)$|Capture$/i,\"$1\")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?t?u.u=t.u:(u.u=Date.now(),n.addEventListener(l,o?L:D$1,o)):n.removeEventListener(l,o?L:D$1,o);else {if(i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!==l&&\"height\"!==l&&\"href\"!==l&&\"list\"!==l&&\"form\"!==l&&\"tabIndex\"!==l&&\"download\"!==l&&\"rowSpan\"!==l&&\"colSpan\"!==l&&\"role\"!==l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||false===u&&\"-\"!==l[4]?n.removeAttribute(l):n.setAttribute(l,u));}}function D$1(n){if(this.l){var u=this.l[n.type+false];if(n.t){if(n.t<=u.u)return}else n.t=Date.now();return u(l$1.event?l$1.event(n):n)}}function L(n){if(this.l)return this.l[n.type+true](l$1.event?l$1.event(n):n)}function M(n,u,t,i,o,r,f,e,c,s){var a,p,y,d,_,m,w,k,x,C,S,$,H,I,T,A=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),r=[e=u.__e=t.__e]),(a=l$1.__b)&&a(u);n:if(\"function\"==typeof A)try{if(k=u.props,x=(a=A.contextType)&&i[a.__c],C=a?x?x.props.value:a.__:i,t.__c?w=(p=u.__c=t.__c).__=p.__E:(\"prototype\"in A&&A.prototype.render?u.__c=p=new A(k,C):(u.__c=p=new b$1(k,C),p.constructor=A,p.render=q$1),x&&x.sub(p),p.props=k,p.state||(p.state={}),p.context=C,p.__n=i,y=p.__d=!0,p.__h=[],p._sb=[]),null==p.__s&&(p.__s=p.state),null!=A.getDerivedStateFromProps&&(p.__s==p.state&&(p.__s=v$1({},p.__s)),v$1(p.__s,A.getDerivedStateFromProps(k,p.__s))),d=p.props,_=p.state,p.__v=u,y)null==A.getDerivedStateFromProps&&null!=p.componentWillMount&&p.componentWillMount(),null!=p.componentDidMount&&p.__h.push(p.componentDidMount);else {if(null==A.getDerivedStateFromProps&&k!==d&&null!=p.componentWillReceiveProps&&p.componentWillReceiveProps(k,C),!p.__e&&(null!=p.shouldComponentUpdate&&!1===p.shouldComponentUpdate(k,p.__s,C)||u.__v===t.__v)){for(u.__v!==t.__v&&(p.props=k,p.state=p.__s,p.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.forEach(function(n){n&&(n.__=u);}),S=0;S<p._sb.length;S++)p.__h.push(p._sb[S]);p._sb=[],p.__h.length&&f.push(p);break n}null!=p.componentWillUpdate&&p.componentWillUpdate(k,p.__s,C),null!=p.componentDidUpdate&&p.__h.push(function(){p.componentDidUpdate(d,_,m);});}if(p.context=C,p.props=k,p.__P=n,p.__e=!1,$=l$1.__r,H=0,\"prototype\"in A&&A.prototype.render){for(p.state=p.__s,p.__d=!1,$&&$(u),a=p.render(p.props,p.state,p.context),I=0;I<p._sb.length;I++)p.__h.push(p._sb[I]);p._sb=[];}else do{p.__d=!1,$&&$(u),a=p.render(p.props,p.state,p.context),p.state=p.__s;}while(p.__d&&++H<25);p.state=p.__s,null!=p.getChildContext&&(i=v$1(v$1({},i),p.getChildContext())),y||null==p.getSnapshotBeforeUpdate||(m=p.getSnapshotBeforeUpdate(d,_)),P$1(n,h$1(T=null!=a&&a.type===g$1&&null==a.key?a.props.children:a)?T:[T],u,t,i,o,r,f,e,c,s),p.base=u.__e,u.__u&=-161,p.__h.length&&f.push(p),w&&(p.__E=p.__=null);}catch(n){u.__v=null,c||null!=r?(u.__e=e,u.__u|=c?160:32,r[r.indexOf(e)]=null):(u.__e=t.__e,u.__k=t.__k),l$1.__e(n,u,t);}else null==r&&u.__v===t.__v?(u.__k=t.__k,u.__e=t.__e):u.__e=z$1(t.__e,u,t,i,o,r,f,c,s);(a=l$1.diffed)&&a(u);}function j$1(n,u,t){for(var i=0;i<t.length;i++)N(t[i],t[++i],t[++i]);l$1.__c&&l$1.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u);});}catch(n){l$1.__e(n,u.__v);}});}function z$1(l,u,t,i,o,r,f,e,s){var a,v,y,d,_,g,b,w=t.props,k=u.props,x=u.type;if(\"svg\"===x&&(o=true),null!=r)for(a=0;a<r.length;a++)if((_=r[a])&&\"setAttribute\"in _==!!x&&(x?_.localName===x:3===_.nodeType)){l=_,r[a]=null;break}if(null==l){if(null===x)return document.createTextNode(k);l=o?document.createElementNS(\"http://www.w3.org/2000/svg\",x):document.createElement(x,k.is&&k),r=null,e=false;}if(null===x)w===k||e&&l.data===k||(l.data=k);else {if(r=r&&n.call(l.childNodes),w=t.props||c$1,!e&&null!=r)for(w={},a=0;a<l.attributes.length;a++)w[(_=l.attributes[a]).name]=_.value;for(a in w)_=w[a],\"children\"==a||(\"dangerouslySetInnerHTML\"==a?y=_:\"key\"===a||a in k||A$1(l,a,null,_,o));for(a in k)_=k[a],\"children\"==a?d=_:\"dangerouslySetInnerHTML\"==a?v=_:\"value\"==a?g=_:\"checked\"==a?b=_:\"key\"===a||e&&\"function\"!=typeof _||w[a]===_||A$1(l,a,_,w[a],o);if(v)e||y&&(v.__html===y.__html||v.__html===l.innerHTML)||(l.innerHTML=v.__html),u.__k=[];else if(y&&(l.innerHTML=\"\"),P$1(l,h$1(d)?d:[d],u,t,i,o&&\"foreignObject\"!==x,r,f,r?r[0]:t.__k&&m$1(t,0),e,s),null!=r)for(a=r.length;a--;)null!=r[a]&&p$1(r[a]);e||(a=\"value\",void 0!==g&&(g!==l[a]||\"progress\"===x&&!g||\"option\"===x&&g!==w[a])&&A$1(l,a,g,w[a],false),a=\"checked\",void 0!==b&&b!==l[a]&&A$1(l,a,b,w[a],false));}return l}function N(n,u,t){try{\"function\"==typeof n?n(u):n.current=u;}catch(n){l$1.__e(n,t);}}function O(n,u,t){var i,o;if(l$1.unmount&&l$1.unmount(n),(i=n.ref)&&(i.current&&i.current!==n.__e||N(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount();}catch(n){l$1.__e(n,u);}i.base=i.__P=null,n.__c=void 0;}if(i=n.__k)for(o=0;o<i.length;o++)i[o]&&O(i[o],u,t||\"function\"!=typeof n.type);t||null==n.__e||p$1(n.__e),n.__=n.__e=n.__d=void 0;}function q$1(n,l,u){return this.constructor(n,u)}function B$1(u,t,i){var o,r,f,e;l$1.__&&l$1.__(u,t),r=(o=\"function\"==\"undefined\")?null:t.__k,f=[],e=[],M(t,u=(t).__k=y$1(g$1,null,[u]),r||c$1,c$1,void 0!==t.ownerSVGElement,r?null:t.firstChild?n.call(t.childNodes):null,f,r?r.__e:t.firstChild,o,e),u.__d=void 0,j$1(f,u,e);}n=s$1.slice,l$1={__e:function(n,l,u,t){for(var i,o,r;l=l.__;)if((i=l.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(n)),r=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),r=i.__d),r)return i.__E=i}catch(l){n=l;}throw n}},u$1=0,b$1.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=v$1({},this.state),\"function\"==typeof n&&(n=n(v$1({},u),this.props)),n&&v$1(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),x$1(this));},b$1.prototype.forceUpdate=function(n){this.__v&&(this.__e=true,n&&this.__h.push(n),x$1(this));},b$1.prototype.render=g$1,i$1=[],r$1=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f$1=function(n,l){return n.__v.__b-l.__v.__b},C$1.__r=0;\n\nvar t,r,u,i,o=0,f=[],c=[],e=l$1,a=e.__b,v=e.__r,l=e.diffed,m=e.__c,s=e.unmount,d=e.__;function h(n,t){e.__h&&e.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({__V:c}),u.__[n]}function p(n){return o=1,y(D,n)}function y(n,u,i){var o=h(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):D(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}));}],o.__c=r,!r.u)){var f=function(n,t,r){if(!o.__c.__H)return  true;var u=o.__c.__H.__.filter(function(n){return !!n.__c});if(u.every(function(n){return !n.__N}))return !c||c.call(this,n,t,r);var i=false;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=true);}}),!(!i&&o.__c.props===n)&&(!c||c.call(this,n,t,r))};r.u=true;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u;}e&&e.call(this,n,t,r);},r.shouldComponentUpdate=f;}return o.__N||o.__}function _(n,u){var i=h(t++,3);!e.__s&&C(i.__H,u)&&(i.__=n,i.i=u,r.__H.__h.push(i));}function A(n,u){var i=h(t++,4);!e.__s&&C(i.__H,u)&&(i.__=n,i.i=u,r.__h.push(i));}function F(n){return o=5,q(function(){return {current:n}},[])}function T(n,t,r){o=6,A(function(){return \"function\"==typeof n?(n(t()),function(){return n(null)}):n?(n.current=t(),function(){return n.current=null}):void 0},null==r?r:r.concat(n));}function q(n,r){var u=h(t++,7);return C(u.__H,r)?(u.__V=n(),u.i=r,u.__h=n,u.__V):u.__}function x(n,t){return o=8,q(function(){return n},t)}function P(n){var u=r.context[n.__c],i=h(t++,9);return i.c=n,u?(null==i.__&&(i.__=true,u.sub(r)),u.props.value):n.__}function V(n,t){e.useDebugValue&&e.useDebugValue(t?t(n):n);}function b(n){var u=h(t++,10),i=p();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n);}),[i[0],function(){i[1](void 0);}]}function g(){var n=h(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++;}return n.__}function j(){for(var n;n=f.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(z),n.__H.__h.forEach(B),n.__H.__h=[];}catch(t){n.__H.__h=[],e.__e(t,n.__v);}}e.__b=function(n){r=null,a&&a(n);},e.__=function(n,t){t.__k&&t.__k.__m&&(n.__m=t.__k.__m),d&&d(n,t);},e.__r=function(n){v&&v(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=c,n.__N=n.i=void 0;})):(i.__h.forEach(z),i.__h.forEach(B),i.__h=[],t=0)),u=r;},e.diffed=function(n){l&&l(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===e.requestAnimationFrame||((i=e.requestAnimationFrame)||w)(j)),t.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==c&&(n.__=n.__V),n.i=void 0,n.__V=c;})),u=r=null;},e.__c=function(n,t){t.some(function(n){try{n.__h.forEach(z),n.__h=n.__h.filter(function(n){return !n.__||B(n)});}catch(r){t.some(function(n){n.__h&&(n.__h=[]);}),t=[],e.__e(r,n.__v);}}),m&&m(n,t);},e.unmount=function(n){s&&s(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{z(n);}catch(n){t=n;}}),r.__H=void 0,t&&e.__e(t,r.__v));};var k=\"function\"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n);},u=setTimeout(r,100);k&&(t=requestAnimationFrame(r));}function z(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t;}function B(n){var t=r;n.__c=n.__(),r=t;}function C(n,t){return !n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function D(n,t){return \"function\"==typeof t?t(n):t}\n\nconst hooks = /*#__PURE__*/Object.defineProperty({\n  __proto__: null,\n  useCallback: x,\n  useContext: P,\n  useDebugValue: V,\n  useEffect: _,\n  useErrorBoundary: b,\n  useId: g,\n  useImperativeHandle: T,\n  useLayoutEffect: A,\n  useMemo: q,\n  useReducer: y,\n  useRef: F,\n  useState: p\n}, Symbol.toStringTag, { value: 'Module' });\n\nconst XMLNS$1 = 'http://www.w3.org/2000/svg';\n\n/**\n * Sentry Logo\n */\nfunction SentryLogo() {\n  const createElementNS = (tagName) =>\n    DOCUMENT.createElementNS(XMLNS$1, tagName);\n  const svg = setAttributesNS(createElementNS('svg'), {\n    width: '32',\n    height: '30',\n    viewBox: '0 0 72 66',\n    fill: 'inherit',\n  });\n\n  const path = setAttributesNS(createElementNS('path'), {\n    transform: 'translate(11, 11)',\n    d: 'M29,2.26a4.67,4.67,0,0,0-8,0L14.42,13.53A32.21,32.21,0,0,1,32.17,40.19H27.55A27.68,27.68,0,0,0,12.09,17.47L6,28a15.92,15.92,0,0,1,9.23,12.17H4.62A.76.76,0,0,1,4,39.06l2.94-5a10.74,10.74,0,0,0-3.36-1.9l-2.91,5a4.54,4.54,0,0,0,1.69,6.24A4.66,4.66,0,0,0,4.62,44H19.15a19.4,19.4,0,0,0-8-17.31l2.31-4A23.87,23.87,0,0,1,23.76,44H36.07a35.88,35.88,0,0,0-16.41-31.8l4.67-8a.77.77,0,0,1,1.05-.27c.53.29,20.29,34.77,20.66,35.17a.76.76,0,0,1-.68,1.13H40.6q.09,1.91,0,3.81h4.78A4.59,4.59,0,0,0,50,39.43a4.49,4.49,0,0,0-.62-2.28Z',\n  });\n  svg.appendChild(path);\n\n  return svg;\n}\n\nfunction DialogHeader({ options }) {\n  const logoHtml = q(() => ({ __html: SentryLogo().outerHTML }), []);\n\n  return (\n    y$1('h2', { class: \"dialog__header\",}\n      , y$1('span', { class: \"dialog__title\",}, options.formTitle)\n      , options.showBranding ? (\n        y$1('a', {\n          class: \"brand-link\",\n          target: \"_blank\",\n          href: \"https://sentry.io/welcome/\",\n          title: \"Powered by Sentry\"  ,\n          rel: \"noopener noreferrer\" ,\n          dangerouslySetInnerHTML: logoHtml,}\n        )\n      ) : null\n    )\n  );\n}\n\n/**\n * Validate that a given feedback submission has the required fields\n */\nfunction getMissingFields(feedback, props) {\n  const emptyFields = [];\n  if (props.isNameRequired && !feedback.name) {\n    emptyFields.push(props.nameLabel);\n  }\n  if (props.isEmailRequired && !feedback.email) {\n    emptyFields.push(props.emailLabel);\n  }\n  if (!feedback.message) {\n    emptyFields.push(props.messageLabel);\n  }\n\n  return emptyFields;\n}\n\nfunction retrieveStringValue(formData, key) {\n  const value = formData.get(key);\n  if (typeof value === 'string') {\n    return value.trim();\n  }\n  return '';\n}\n\nfunction Form({\n  options,\n  defaultEmail,\n  defaultName,\n\n  onFormClose,\n  onSubmit,\n  onSubmitSuccess,\n  onSubmitError,\n  showEmail,\n  showName,\n  screenshotInput,\n}) {\n  const {\n    tags,\n    addScreenshotButtonLabel,\n    removeScreenshotButtonLabel,\n    cancelButtonLabel,\n    emailLabel,\n    emailPlaceholder,\n    isEmailRequired,\n    isNameRequired,\n    messageLabel,\n    messagePlaceholder,\n    nameLabel,\n    namePlaceholder,\n    submitButtonLabel,\n    isRequiredLabel,\n  } = options;\n  const [isSubmitting, setIsSubmitting] = p(false);\n  // TODO: set a ref on the form, and whenever an input changes call processForm() and setError()\n  const [error, setError] = p(null);\n\n  const [showScreenshotInput, setShowScreenshotInput] = p(false);\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const ScreenshotInputComponent = screenshotInput?.input;\n\n  const [screenshotError, setScreenshotError] = p(null);\n  const onScreenshotError = x((error) => {\n    setScreenshotError(error);\n    setShowScreenshotInput(false);\n  }, []);\n\n  const hasAllRequiredFields = x(\n    (data) => {\n      const missingFields = getMissingFields(data, {\n        emailLabel,\n        isEmailRequired,\n        isNameRequired,\n        messageLabel,\n        nameLabel,\n      });\n\n      if (missingFields.length > 0) {\n        setError(`Please enter in the following required fields: ${missingFields.join(', ')}`);\n      } else {\n        setError(null);\n      }\n\n      return missingFields.length === 0;\n    },\n    [emailLabel, isEmailRequired, isNameRequired, messageLabel, nameLabel],\n  );\n\n  const handleSubmit = x(\n    async (e) => {\n      setIsSubmitting(true);\n      try {\n        e.preventDefault();\n        if (!(e.target instanceof HTMLFormElement)) {\n          return;\n        }\n        const formData = new FormData(e.target);\n        const attachment = await (screenshotInput && showScreenshotInput ? screenshotInput.value() : undefined);\n\n        const data = {\n          name: retrieveStringValue(formData, 'name'),\n          email: retrieveStringValue(formData, 'email'),\n          message: retrieveStringValue(formData, 'message'),\n          attachments: attachment ? [attachment] : undefined,\n        };\n\n        if (!hasAllRequiredFields(data)) {\n          return;\n        }\n\n        try {\n          const eventId = await onSubmit(\n            {\n              name: data.name,\n              email: data.email,\n              message: data.message,\n              source: FEEDBACK_WIDGET_SOURCE,\n              tags,\n            },\n            { attachments: data.attachments },\n          );\n          onSubmitSuccess(data, eventId);\n        } catch (error) {\n          DEBUG_BUILD && _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.error(error);\n          setError(error );\n          onSubmitError(error );\n        }\n      } finally {\n        setIsSubmitting(false);\n      }\n    },\n    [screenshotInput && showScreenshotInput, onSubmitSuccess, onSubmitError],\n  );\n\n  return (\n    y$1('form', { class: \"form\", onSubmit: handleSubmit,}\n      , ScreenshotInputComponent && showScreenshotInput ? (\n        y$1(ScreenshotInputComponent, { onError: onScreenshotError,} )\n      ) : null\n\n      , y$1('fieldset', { class: \"form__right\", 'data-sentry-feedback': true, disabled: isSubmitting,}\n        , y$1('div', { class: \"form__top\",}\n          , error ? y$1('div', { class: \"form__error-container\",}, error) : null\n\n          , showName ? (\n            y$1('label', { for: \"name\", class: \"form__label\",}\n              , y$1(LabelText, { label: nameLabel, isRequiredLabel: isRequiredLabel, isRequired: isNameRequired,} )\n              , y$1('input', {\n                class: \"form__input\",\n                defaultValue: defaultName,\n                id: \"name\",\n                name: \"name\",\n                placeholder: namePlaceholder,\n                required: isNameRequired,\n                type: \"text\",}\n              )\n            )\n          ) : (\n            y$1('input', { 'aria-hidden': true, value: defaultName, name: \"name\", type: \"hidden\",} )\n          )\n\n          , showEmail ? (\n            y$1('label', { for: \"email\", class: \"form__label\",}\n              , y$1(LabelText, { label: emailLabel, isRequiredLabel: isRequiredLabel, isRequired: isEmailRequired,} )\n              , y$1('input', {\n                class: \"form__input\",\n                defaultValue: defaultEmail,\n                id: \"email\",\n                name: \"email\",\n                placeholder: emailPlaceholder,\n                required: isEmailRequired,\n                type: \"email\",}\n)\n            )\n          ) : (\n            y$1('input', { 'aria-hidden': true, value: defaultEmail, name: \"email\", type: \"hidden\",} )\n          )\n\n          , y$1('label', { for: \"message\", class: \"form__label\",}\n            , y$1(LabelText, { label: messageLabel, isRequiredLabel: isRequiredLabel, isRequired: true,} )\n            , y$1('textarea', {\n              autoFocus: true,\n              class: \"form__input form__input--textarea\" ,\n              id: \"message\",\n              name: \"message\",\n              placeholder: messagePlaceholder,\n              required: true,\n              rows: 5,}\n            )\n          )\n\n          , ScreenshotInputComponent ? (\n            y$1('label', { for: \"screenshot\", class: \"form__label\",}\n              , y$1('button', {\n                class: \"btn btn--default\" ,\n                disabled: isSubmitting,\n                type: \"button\",\n                onClick: () => {\n                  setScreenshotError(null);\n                  setShowScreenshotInput(prev => !prev);\n                },}\n\n                , showScreenshotInput ? removeScreenshotButtonLabel : addScreenshotButtonLabel\n              )\n              , screenshotError ? y$1('div', { class: \"form__error-container\",}, screenshotError.message) : null\n            )\n          ) : null\n        )\n        , y$1('div', { class: \"btn-group\",}\n          , y$1('button', { class: \"btn btn--primary\" , disabled: isSubmitting, type: \"submit\",}\n            , submitButtonLabel\n          )\n          , y$1('button', { class: \"btn btn--default\" , disabled: isSubmitting, type: \"button\", onClick: onFormClose,}\n            , cancelButtonLabel\n          )\n        )\n      )\n    )\n  );\n}\n\nfunction LabelText({\n  label,\n  isRequired,\n  isRequiredLabel,\n}\n\n) {\n  return (\n    y$1('span', { class: \"form__label__text\",}\n      , label\n      , isRequired && y$1('span', { class: \"form__label__text--required\",}, isRequiredLabel)\n    )\n  );\n}\n\nconst WIDTH = 16;\nconst HEIGHT = 17;\nconst XMLNS = 'http://www.w3.org/2000/svg';\n\n/**\n * Success Icon (checkmark)\n */\nfunction SuccessIcon() {\n  const createElementNS = (tagName) =>\n    WINDOW.document.createElementNS(XMLNS, tagName);\n  const svg = setAttributesNS(createElementNS('svg'), {\n    width: `${WIDTH}`,\n    height: `${HEIGHT}`,\n    viewBox: `0 0 ${WIDTH} ${HEIGHT}`,\n    fill: 'inherit',\n  });\n\n  const g = setAttributesNS(createElementNS('g'), {\n    clipPath: 'url(#clip0_57_156)',\n  });\n\n  const path2 = setAttributesNS(createElementNS('path'), {\n    ['fill-rule']: 'evenodd',\n    ['clip-rule']: 'evenodd',\n    d: 'M3.55544 15.1518C4.87103 16.0308 6.41775 16.5 8 16.5C10.1217 16.5 12.1566 15.6571 13.6569 14.1569C15.1571 12.6566 16 10.6217 16 8.5C16 6.91775 15.5308 5.37103 14.6518 4.05544C13.7727 2.73985 12.5233 1.71447 11.0615 1.10897C9.59966 0.503466 7.99113 0.34504 6.43928 0.653721C4.88743 0.962403 3.46197 1.72433 2.34315 2.84315C1.22433 3.96197 0.462403 5.38743 0.153721 6.93928C-0.15496 8.49113 0.00346625 10.0997 0.608967 11.5615C1.21447 13.0233 2.23985 14.2727 3.55544 15.1518ZM4.40546 3.1204C5.46945 2.40946 6.72036 2.03 8 2.03C9.71595 2.03 11.3616 2.71166 12.575 3.92502C13.7883 5.13838 14.47 6.78405 14.47 8.5C14.47 9.77965 14.0905 11.0306 13.3796 12.0945C12.6687 13.1585 11.6582 13.9878 10.476 14.4775C9.29373 14.9672 7.99283 15.0953 6.73777 14.8457C5.48271 14.596 4.32987 13.9798 3.42502 13.075C2.52018 12.1701 1.90397 11.0173 1.65432 9.76224C1.40468 8.50718 1.5328 7.20628 2.0225 6.02404C2.5122 4.8418 3.34148 3.83133 4.40546 3.1204Z',\n  });\n  const path = setAttributesNS(createElementNS('path'), {\n    d: 'M6.68775 12.4297C6.78586 12.4745 6.89218 12.4984 7 12.5C7.11275 12.4955 7.22315 12.4664 7.32337 12.4145C7.4236 12.3627 7.51121 12.2894 7.58 12.2L12 5.63999C12.0848 5.47724 12.1071 5.28902 12.0625 5.11098C12.0178 4.93294 11.9095 4.77744 11.7579 4.67392C11.6064 4.57041 11.4221 4.52608 11.24 4.54931C11.0579 4.57254 10.8907 4.66173 10.77 4.79999L6.88 10.57L5.13 8.56999C5.06508 8.49566 4.98613 8.43488 4.89768 8.39111C4.80922 8.34735 4.713 8.32148 4.61453 8.31498C4.51605 8.30847 4.41727 8.32147 4.32382 8.35322C4.23038 8.38497 4.14413 8.43484 4.07 8.49999C3.92511 8.63217 3.83692 8.81523 3.82387 9.01092C3.81083 9.2066 3.87393 9.39976 4 9.54999L6.43 12.24C6.50187 12.3204 6.58964 12.385 6.68775 12.4297Z',\n  });\n\n  svg.appendChild(g).append(path, path2);\n\n  const speakerDefs = createElementNS('defs');\n  const speakerClipPathDef = setAttributesNS(createElementNS('clipPath'), {\n    id: 'clip0_57_156',\n  });\n\n  const speakerRect = setAttributesNS(createElementNS('rect'), {\n    width: `${WIDTH}`,\n    height: `${WIDTH}`,\n    fill: 'white',\n    transform: 'translate(0 0.5)',\n  });\n\n  speakerClipPathDef.appendChild(speakerRect);\n  speakerDefs.appendChild(speakerClipPathDef);\n\n  svg.appendChild(speakerDefs).appendChild(speakerClipPathDef).appendChild(speakerRect);\n\n  return svg;\n}\n\nfunction Dialog({ open, onFormSubmitted, ...props }) {\n  const options = props.options;\n  const successIconHtml = q(() => ({ __html: SuccessIcon().outerHTML }), []);\n\n  const [timeoutId, setTimeoutId] = p(null);\n\n  const handleOnSuccessClick = x(() => {\n    if (timeoutId) {\n      clearTimeout(timeoutId);\n      setTimeoutId(null);\n    }\n    onFormSubmitted();\n  }, [timeoutId]);\n\n  const onSubmitSuccess = x(\n    (data, eventId) => {\n      props.onSubmitSuccess(data, eventId);\n      setTimeoutId(\n        setTimeout(() => {\n          onFormSubmitted();\n          setTimeoutId(null);\n        }, SUCCESS_MESSAGE_TIMEOUT),\n      );\n    },\n    [onFormSubmitted],\n  );\n\n  return (\n    y$1(g$1, null\n      , timeoutId ? (\n        y$1('div', { class: \"success__position\", onClick: handleOnSuccessClick,}\n          , y$1('div', { class: \"success__content\",}\n            , options.successMessageText\n            , y$1('span', { class: \"success__icon\", dangerouslySetInnerHTML: successIconHtml,} )\n          )\n        )\n      ) : (\n        y$1('dialog', { class: \"dialog\", onClick: options.onFormClose, open: open,}\n          , y$1('div', { class: \"dialog__position\",}\n            , y$1('div', {\n              class: \"dialog__content\",\n              onClick: e => {\n                // Stop event propagation so clicks on content modal do not propagate to dialog (which will close dialog)\n                e.stopPropagation();\n              },}\n\n              , y$1(DialogHeader, { options: options,} )\n              , y$1(Form, { ...props, onSubmitSuccess: onSubmitSuccess,} )\n            )\n          )\n        )\n      )\n    )\n  );\n}\n\nconst DIALOG = `\n.dialog {\n  position: fixed;\n  z-index: var(--z-index);\n  margin: 0;\n  inset: 0;\n\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 0;\n  height: 100vh;\n  width: 100vw;\n\n  color: var(--dialog-color, var(--foreground));\n  fill: var(--dialog-color, var(--foreground));\n  line-height: 1.75em;\n\n  background-color: rgba(0, 0, 0, 0.05);\n  border: none;\n  inset: 0;\n  opacity: 1;\n  transition: opacity 0.2s ease-in-out;\n}\n\n.dialog__position {\n  position: fixed;\n  z-index: var(--z-index);\n  inset: var(--dialog-inset);\n  padding: var(--page-margin);\n  display: flex;\n  max-height: calc(100vh - (2 * var(--page-margin)));\n}\n@media (max-width: 600px) {\n  .dialog__position {\n    inset: var(--page-margin);\n    padding: 0;\n  }\n}\n\n.dialog__position:has(.editor) {\n  inset: var(--page-margin);\n  padding: 0;\n}\n\n.dialog:not([open]) {\n  opacity: 0;\n  pointer-events: none;\n  visibility: hidden;\n}\n.dialog:not([open]) .dialog__content {\n  transform: translate(0, -16px) scale(0.98);\n}\n\n.dialog__content {\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n  padding: var(--dialog-padding, 24px);\n  max-width: 100%;\n  width: 100%;\n  max-height: 100%;\n  overflow: auto;\n\n  background: var(--dialog-background, var(--background));\n  border-radius: var(--dialog-border-radius, 20px);\n  border: var(--dialog-border, var(--border));\n  box-shadow: var(--dialog-box-shadow, var(--box-shadow));\n  transform: translate(0, 0) scale(1);\n  transition: transform 0.2s ease-in-out;\n}\n\n`;\n\nconst DIALOG_HEADER = `\n.dialog__header {\n  display: flex;\n  gap: 4px;\n  justify-content: space-between;\n  font-weight: var(--dialog-header-weight, 600);\n  margin: 0;\n}\n.dialog__title {\n  align-self: center;\n  width: var(--form-width, 272px);\n}\n\n@media (max-width: 600px) {\n  .dialog__title {\n    width: auto;\n  }\n}\n\n.dialog__position:has(.editor) .dialog__title {\n  width: auto;\n}\n\n\n.brand-link {\n  display: inline-flex;\n}\n.brand-link:focus-visible {\n  outline: var(--outline);\n}\n`;\n\nconst FORM = `\n.form {\n  display: flex;\n  overflow: auto;\n  flex-direction: row;\n  gap: 16px;\n  flex: 1 0;\n}\n\n.form fieldset {\n  border: none;\n  margin: 0;\n  padding: 0;\n}\n\n.form__right {\n  flex: 0 0 auto;\n  display: flex;\n  overflow: auto;\n  flex-direction: column;\n  justify-content: space-between;\n  gap: 20px;\n  width: var(--form-width, 100%);\n}\n\n.dialog__position:has(.editor) .form__right {\n  width: var(--form-width, 272px);\n}\n\n.form__top {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n\n.form__error-container {\n  color: var(--error-color);\n  fill: var(--error-color);\n}\n\n.form__label {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  margin: 0px;\n}\n\n.form__label__text {\n  display: flex;\n  gap: 4px;\n  align-items: center;\n}\n\n.form__label__text--required {\n  font-size: 0.85em;\n}\n\n.form__input {\n  font-family: inherit;\n  line-height: inherit;\n  background: transparent;\n  box-sizing: border-box;\n  border: var(--input-border, var(--border));\n  border-radius: var(--input-border-radius, 6px);\n  color: var(--input-color, inherit);\n  fill: var(--input-color, inherit);\n  font-size: var(--input-font-size, inherit);\n  font-weight: var(--input-font-weight, 500);\n  padding: 6px 12px;\n}\n\n.form__input::placeholder {\n  opacity: 0.65;\n  color: var(--input-placeholder-color, inherit);\n  filter: var(--interactive-filter);\n}\n\n.form__input:focus-visible {\n  outline: var(--input-focus-outline, var(--outline));\n}\n\n.form__input--textarea {\n  font-family: inherit;\n  resize: vertical;\n}\n\n.error {\n  color: var(--error-color);\n  fill: var(--error-color);\n}\n`;\n\nconst BUTTON = `\n.btn-group {\n  display: grid;\n  gap: 8px;\n}\n\n.btn {\n  line-height: inherit;\n  border: var(--button-border, var(--border));\n  border-radius: var(--button-border-radius, 6px);\n  cursor: pointer;\n  font-family: inherit;\n  font-size: var(--button-font-size, inherit);\n  font-weight: var(--button-font-weight, 600);\n  padding: var(--button-padding, 6px 16px);\n}\n.btn[disabled] {\n  opacity: 0.6;\n  pointer-events: none;\n}\n\n.btn--primary {\n  color: var(--button-primary-color, var(--accent-foreground));\n  fill: var(--button-primary-color, var(--accent-foreground));\n  background: var(--button-primary-background, var(--accent-background));\n  border: var(--button-primary-border, var(--border));\n  border-radius: var(--button-primary-border-radius, 6px);\n  font-weight: var(--button-primary-font-weight, 500);\n}\n.btn--primary:hover {\n  color: var(--button-primary-hover-color, var(--accent-foreground));\n  fill: var(--button-primary-hover-color, var(--accent-foreground));\n  background: var(--button-primary-hover-background, var(--accent-background));\n  filter: var(--interactive-filter);\n}\n.btn--primary:focus-visible {\n  background: var(--button-primary-hover-background, var(--accent-background));\n  filter: var(--interactive-filter);\n  outline: var(--button-primary-focus-outline, var(--outline));\n}\n\n.btn--default {\n  color: var(--button-color, var(--foreground));\n  fill: var(--button-color, var(--foreground));\n  background: var(--button-background, var(--background));\n  border: var(--button-border, var(--border));\n  border-radius: var(--button-border-radius, 6px);\n  font-weight: var(--button-font-weight, 500);\n}\n.btn--default:hover {\n  color: var(--button-color, var(--foreground));\n  fill: var(--button-color, var(--foreground));\n  background: var(--button-hover-background, var(--background));\n  filter: var(--interactive-filter);\n}\n.btn--default:focus-visible {\n  background: var(--button-hover-background, var(--background));\n  filter: var(--interactive-filter);\n  outline: var(--button-focus-outline, var(--outline));\n}\n`;\n\nconst SUCCESS = `\n.success__position {\n  position: fixed;\n  inset: var(--dialog-inset);\n  padding: var(--page-margin);\n  z-index: var(--z-index);\n}\n.success__content {\n  background: var(--success-background, var(--background));\n  border: var(--success-border, var(--border));\n  border-radius: var(--success-border-radius, 1.7em/50%);\n  box-shadow: var(--success-box-shadow, var(--box-shadow));\n  font-weight: var(--success-font-weight, 600);\n  color: var(--success-color);\n  fill: var(--success-color);\n  padding: 12px 24px;\n  line-height: 1.75em;\n\n  display: grid;\n  align-items: center;\n  grid-auto-flow: column;\n  gap: 6px;\n  cursor: default;\n}\n\n.success__icon {\n  display: flex;\n}\n`;\n\n/**\n * Creates <style> element for widget dialog\n */\nfunction createDialogStyles(styleNonce) {\n  const style = DOCUMENT.createElement('style');\n\n  style.textContent = `\n:host {\n  --dialog-inset: var(--inset);\n}\n\n${DIALOG}\n${DIALOG_HEADER}\n${FORM}\n${BUTTON}\n${SUCCESS}\n`;\n\n  if (styleNonce) {\n    style.setAttribute('nonce', styleNonce);\n  }\n\n  return style;\n}\n\nfunction getUser() {\n  const currentUser = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)().getUser();\n  const isolationUser = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)().getUser();\n  const globalUser = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getGlobalScope)().getUser();\n  if (currentUser && Object.keys(currentUser).length) {\n    return currentUser;\n  }\n  if (isolationUser && Object.keys(isolationUser).length) {\n    return isolationUser;\n  }\n  return globalUser;\n}\n\nconst feedbackModalIntegration = (() => {\n  return {\n    name: 'FeedbackModal',\n    setupOnce() {},\n    createDialog: ({ options, screenshotIntegration, sendFeedback, shadow }) => {\n      const shadowRoot = shadow ;\n      const userKey = options.useSentryUser;\n      const user = getUser();\n\n      const el = DOCUMENT.createElement('div');\n      const style = createDialogStyles(options.styleNonce);\n\n      let originalOverflow = '';\n      const dialog = {\n        get el() {\n          return el;\n        },\n        appendToDom() {\n          if (!shadowRoot.contains(style) && !shadowRoot.contains(el)) {\n            shadowRoot.appendChild(style);\n            shadowRoot.appendChild(el);\n          }\n        },\n        removeFromDom() {\n          el.remove();\n          style.remove();\n          DOCUMENT.body.style.overflow = originalOverflow;\n        },\n        open() {\n          renderContent(true);\n          options.onFormOpen?.();\n          (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)()?.emit('openFeedbackWidget');\n          originalOverflow = DOCUMENT.body.style.overflow;\n          DOCUMENT.body.style.overflow = 'hidden';\n        },\n        close() {\n          renderContent(false);\n          DOCUMENT.body.style.overflow = originalOverflow;\n        },\n      };\n\n      const screenshotInput = screenshotIntegration?.createInput({ h: y$1, hooks, dialog, options });\n\n      const renderContent = (open) => {\n        B$1(\n          y$1(Dialog, {\n            options: options,\n            screenshotInput: screenshotInput,\n            showName: options.showName || options.isNameRequired,\n            showEmail: options.showEmail || options.isEmailRequired,\n            defaultName: (userKey && user?.[userKey.name]) || '',\n            defaultEmail: (userKey && user?.[userKey.email]) || '',\n            onFormClose: () => {\n              renderContent(false);\n              options.onFormClose?.();\n            },\n            onSubmit: sendFeedback,\n            onSubmitSuccess: (data, eventId) => {\n              renderContent(false);\n              options.onSubmitSuccess?.(data, eventId);\n            },\n            onSubmitError: (error) => {\n              options.onSubmitError?.(error);\n            },\n            onFormSubmitted: () => {\n              options.onFormSubmitted?.();\n            },\n            open: open,}\n          ),\n          el,\n        );\n      };\n\n      return dialog;\n    },\n  };\n}) ;\n\nfunction IconCloseFactory({\n  h, // eslint-disable-line @typescript-eslint/no-unused-vars\n}) {\n  return function IconClose() {\n    return (\n      h('svg', { 'data-test-id': \"icon-close\", viewBox: \"0 0 16 16\"   , fill: \"#2B2233\", height: \"25px\", width: \"25px\",}\n        , h('circle', { r: \"7\", cx: \"8\", cy: \"8\", fill: \"white\",} )\n        , h('path', {\n          strokeWidth: \"1.5\",\n          d: \"M8,16a8,8,0,1,1,8-8A8,8,0,0,1,8,16ZM8,1.53A6.47,6.47,0,1,0,14.47,8,6.47,6.47,0,0,0,8,1.53Z\",}\n)\n        , h('path', {\n          strokeWidth: \"1.5\",\n          d: \"M5.34,11.41a.71.71,0,0,1-.53-.22.74.74,0,0,1,0-1.06l5.32-5.32a.75.75,0,0,1,1.06,1.06L5.87,11.19A.74.74,0,0,1,5.34,11.41Z\",}\n)\n        , h('path', {\n          strokeWidth: \"1.5\",\n          d: \"M10.66,11.41a.74.74,0,0,1-.53-.22L4.81,5.87A.75.75,0,0,1,5.87,4.81l5.32,5.32a.74.74,0,0,1,0,1.06A.71.71,0,0,1,10.66,11.41Z\",}\n)\n      )\n    );\n  };\n}\n\n/**\n * Creates <style> element for widget dialog\n */\nfunction createScreenshotInputStyles(styleNonce) {\n  const style = DOCUMENT.createElement('style');\n\n  const surface200 = '#1A141F';\n  const gray100 = '#302735';\n\n  style.textContent = `\n.editor {\n  display: flex;\n  flex-grow: 1;\n  flex-direction: column;\n}\n\n.editor__image-container {\n  justify-items: center;\n  padding: 15px;\n  position: relative;\n  height: 100%;\n  border-radius: var(--menu-border-radius, 6px);\n\n  background-color: ${surface200};\n  background-image: repeating-linear-gradient(\n      -145deg,\n      transparent,\n      transparent 8px,\n      ${surface200} 8px,\n      ${surface200} 11px\n    ),\n    repeating-linear-gradient(\n      -45deg,\n      transparent,\n      transparent 15px,\n      ${gray100} 15px,\n      ${gray100} 16px\n    );\n}\n\n.editor__canvas-container {\n  width: 100%;\n  height: 100%;\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.editor__canvas-container > * {\n  object-fit: contain;\n  position: absolute;\n}\n\n.editor__tool-container {\n  padding-top: 8px;\n  display: flex;\n  justify-content: center;\n}\n\n.editor__tool-bar {\n  display: flex;\n  gap: 8px;\n}\n\n.editor__tool {\n  display: flex;\n  padding: 8px 12px;\n  justify-content: center;\n  align-items: center;\n  border: var(--button-border, var(--border));\n  border-radius: var(--button-border-radius, 6px);\n  background: var(--button-background, var(--background));\n  color: var(--button-color, var(--foreground));\n}\n\n.editor__tool--active {\n  background: var(--button-primary-background, var(--accent-background));\n  color: var(--button-primary-color, var(--accent-foreground));\n}\n\n.editor__rect {\n  position: absolute;\n  z-index: 2;\n}\n\n.editor__rect button {\n  opacity: 0;\n  position: absolute;\n  top: -12px;\n  right: -12px;\n  cursor: pointer;\n  padding: 0;\n  z-index: 3;\n  border: none;\n  background: none;\n}\n\n.editor__rect:hover button {\n  opacity: 1;\n}\n`;\n\n  if (styleNonce) {\n    style.setAttribute('nonce', styleNonce);\n  }\n\n  return style;\n}\n\nfunction ToolbarFactory({\n  h, // eslint-disable-line @typescript-eslint/no-unused-vars\n}) {\n  return function Toolbar({\n    action,\n    setAction,\n  }\n\n) {\n    return (\n      h('div', { class: \"editor__tool-container\",}\n        , h('div', { class: \"editor__tool-bar\",}\n          , h('button', {\n            type: \"button\",\n            class: `editor__tool ${action === 'highlight' ? 'editor__tool--active' : ''}`,\n            onClick: () => {\n              setAction(action === 'highlight' ? '' : 'highlight');\n            },}\n, \"Highlight\"\n\n          )\n          , h('button', {\n            type: \"button\",\n            class: `editor__tool ${action === 'hide' ? 'editor__tool--active' : ''}`,\n            onClick: () => {\n              setAction(action === 'hide' ? '' : 'hide');\n            },}\n, \"Hide\"\n\n          )\n        )\n      )\n    );\n  };\n}\n\nfunction useTakeScreenshotFactory({ hooks }) {\n  function useDpi() {\n    const [dpi, setDpi] = hooks.useState(WINDOW.devicePixelRatio ?? 1);\n    hooks.useEffect(() => {\n      const onChange = () => {\n        setDpi(WINDOW.devicePixelRatio);\n      };\n      const media = matchMedia(`(resolution: ${WINDOW.devicePixelRatio}dppx)`);\n      media.addEventListener('change', onChange);\n      return () => {\n        media.removeEventListener('change', onChange);\n      };\n    }, []);\n\n    return dpi;\n  }\n\n  return function useTakeScreenshot({ onBeforeScreenshot, onScreenshot, onAfterScreenshot, onError }) {\n    const dpi = useDpi();\n\n    hooks.useEffect(() => {\n      const takeScreenshot = async () => {\n        onBeforeScreenshot();\n\n        // Chrome will animate a top-bar which can shrink the window height by a\n        // few pixels. The exact amount depends on how fast it takes to exec\n        // the onloadedmetadata callback.\n        // https://stackoverflow.com/q/75833049\n        const stream = await NAVIGATOR.mediaDevices.getDisplayMedia({\n          video: {\n            width: WINDOW.innerWidth * dpi,\n            height: WINDOW.innerHeight * dpi,\n          },\n          audio: false,\n          // @ts-expect-error experimental flags: https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia#prefercurrenttab\n          monitorTypeSurfaces: 'exclude',\n          preferCurrentTab: true,\n          selfBrowserSurface: 'include',\n          surfaceSwitching: 'exclude',\n        });\n\n        const video = DOCUMENT.createElement('video');\n        await new Promise((resolve, reject) => {\n          video.srcObject = stream;\n          video.onloadedmetadata = () => {\n            onScreenshot(video, dpi);\n            stream.getTracks().forEach(track => track.stop());\n            resolve();\n          };\n          video.play().catch(reject);\n        });\n        onAfterScreenshot();\n      };\n\n      takeScreenshot().catch(onError);\n    }, []);\n  };\n}\n\nfunction drawRect(command, ctx, color) {\n  switch (command.type) {\n    case 'highlight': {\n      // creates a shadow around\n      ctx.shadowColor = 'rgba(0, 0, 0, 0.7)';\n      ctx.shadowBlur = 50;\n\n      // draws a rectangle first with a shadow\n      ctx.fillStyle = color;\n      ctx.fillRect(command.x - 1, command.y - 1, command.w + 2, command.h + 2);\n\n      // cut out the inside of the rectangle\n      ctx.clearRect(command.x, command.y, command.w, command.h);\n\n      break;\n    }\n    case 'hide':\n      ctx.fillStyle = 'rgb(0, 0, 0)';\n      ctx.fillRect(command.x, command.y, command.w, command.h);\n\n      break;\n  }\n}\n\nfunction with2dContext(\n  canvas,\n  options,\n  callback,\n) {\n  if (!canvas) {\n    return;\n  }\n  const ctx = canvas.getContext('2d', options);\n  if (!ctx) {\n    return;\n  }\n  callback(canvas, ctx);\n}\n\nfunction paintImage(maybeDest, source) {\n  with2dContext(maybeDest, { alpha: true }, (destCanvas, destCtx) => {\n    destCtx.drawImage(source, 0, 0, source.width, source.height, 0, 0, destCanvas.width, destCanvas.height);\n  });\n}\n\n// Paint the array of drawCommands into a canvas.\n// Assuming this is the canvas foreground, and the background is cleaned.\nfunction paintForeground(maybeCanvas, strokeColor, drawCommands) {\n  with2dContext(maybeCanvas, { alpha: true }, (canvas, ctx) => {\n    // If there's anything to draw, then we'll first clear the canvas with\n    // a transparent grey background\n    if (drawCommands.length) {\n      ctx.fillStyle = 'rgba(0, 0, 0, 0.25)';\n      ctx.fillRect(0, 0, canvas.width, canvas.height);\n    }\n\n    drawCommands.forEach(command => {\n      drawRect(command, ctx, strokeColor);\n    });\n  });\n}\n\nfunction ScreenshotEditorFactory({\n  h,\n  hooks,\n  outputBuffer,\n  dialog,\n  options,\n}) {\n  const useTakeScreenshot = useTakeScreenshotFactory({ hooks });\n  const Toolbar = ToolbarFactory({ h });\n  const IconClose = IconCloseFactory({ h });\n  const editorStyleInnerText = { __html: createScreenshotInputStyles(options.styleNonce).innerText };\n\n  const dialogStyle = (dialog.el ).style;\n\n  const ScreenshotEditor = ({ screenshot }) => {\n    // Data for rendering:\n    const [action, setAction] = hooks.useState('highlight');\n    const [drawCommands, setDrawCommands] = hooks.useState([]);\n\n    // Refs to our html components:\n    const measurementRef = hooks.useRef(null);\n    const backgroundRef = hooks.useRef(null);\n    const foregroundRef = hooks.useRef(null);\n    const mouseRef = hooks.useRef(null);\n\n    // The size of our window, relative to the imageSource\n    const [scaleFactor, setScaleFactor] = hooks.useState(1);\n\n    const strokeColor = hooks.useMemo(() => {\n      const sentryFeedback = DOCUMENT.getElementById(options.id);\n      if (!sentryFeedback) {\n        return 'white';\n      }\n      const computedStyle = getComputedStyle(sentryFeedback);\n      return (\n        computedStyle.getPropertyValue('--button-primary-background') ||\n        computedStyle.getPropertyValue('--accent-background')\n      );\n    }, [options.id]);\n\n    // The initial resize, to measure the area and set the children to the correct size\n    hooks.useLayoutEffect(() => {\n      const handleResize = () => {\n        const measurementDiv = measurementRef.current;\n        if (!measurementDiv) {\n          return;\n        }\n\n        with2dContext(screenshot.canvas, { alpha: false }, canvas => {\n          const scale = Math.min(\n            measurementDiv.clientWidth / canvas.width,\n            measurementDiv.clientHeight / canvas.height,\n          );\n          setScaleFactor(scale);\n        });\n\n        // For Firefox, the canvas is not yet measured, so we need to wait for it to get the correct size\n        if (measurementDiv.clientHeight === 0 || measurementDiv.clientWidth === 0) {\n          setTimeout(handleResize, 0);\n        }\n      };\n\n      handleResize();\n      WINDOW.addEventListener('resize', handleResize);\n      return () => {\n        WINDOW.removeEventListener('resize', handleResize);\n      };\n    }, [screenshot]);\n\n    // Set the size of the canvas element to match our screenshot\n    const setCanvasSize = hooks.useCallback(\n      (maybeCanvas, scale) => {\n        with2dContext(maybeCanvas, { alpha: true }, (canvas, ctx) => {\n          // Must call `scale()` before setting `width` & `height`\n          ctx.scale(scale, scale);\n          canvas.width = screenshot.canvas.width;\n          canvas.height = screenshot.canvas.height;\n        });\n      },\n      [screenshot],\n    );\n\n    // Draw the screenshot into the background\n    hooks.useEffect(() => {\n      setCanvasSize(backgroundRef.current, screenshot.dpi);\n      paintImage(backgroundRef.current, screenshot.canvas);\n    }, [screenshot]);\n\n    // Draw the commands into the foreground\n    hooks.useEffect(() => {\n      setCanvasSize(foregroundRef.current, screenshot.dpi);\n      with2dContext(foregroundRef.current, { alpha: true }, (canvas, ctx) => {\n        ctx.clearRect(0, 0, canvas.width, canvas.height);\n      });\n      paintForeground(foregroundRef.current, strokeColor, drawCommands);\n    }, [drawCommands, strokeColor]);\n\n    // Draw into the output outputBuffer\n    hooks.useEffect(() => {\n      setCanvasSize(outputBuffer, screenshot.dpi);\n      paintImage(outputBuffer, screenshot.canvas);\n      with2dContext(DOCUMENT.createElement('canvas'), { alpha: true }, (foreground, ctx) => {\n        ctx.scale(screenshot.dpi, screenshot.dpi); // The scale needs to be set before we set the width/height and paint\n        foreground.width = screenshot.canvas.width;\n        foreground.height = screenshot.canvas.height;\n        paintForeground(foreground, strokeColor, drawCommands);\n        paintImage(outputBuffer, foreground);\n      });\n    }, [drawCommands, screenshot, strokeColor]);\n\n    const handleMouseDown = (e) => {\n      if (!action || !mouseRef.current) {\n        return;\n      }\n\n      const boundingRect = mouseRef.current.getBoundingClientRect();\n      const startingPoint = {\n        type: action,\n        x: e.offsetX / scaleFactor,\n        y: e.offsetY / scaleFactor};\n\n      const getDrawCommand = (startingPoint, e) => {\n        const x = (e.clientX - boundingRect.x) / scaleFactor;\n        const y = (e.clientY - boundingRect.y) / scaleFactor;\n        return {\n          type: startingPoint.type,\n          x: Math.min(startingPoint.x, x),\n          y: Math.min(startingPoint.y, y),\n          w: Math.abs(x - startingPoint.x),\n          h: Math.abs(y - startingPoint.y),\n        } ;\n      };\n\n      const handleMouseMove = (e) => {\n        with2dContext(foregroundRef.current, { alpha: true }, (canvas, ctx) => {\n          ctx.clearRect(0, 0, canvas.width, canvas.height);\n        });\n        paintForeground(foregroundRef.current, strokeColor, [...drawCommands, getDrawCommand(startingPoint, e)]);\n      };\n\n      const handleMouseUp = (e) => {\n        const drawCommand = getDrawCommand(startingPoint, e);\n\n        // Prevent just clicking onto the canvas, mouse has to move at least 1 pixel\n        if (drawCommand.w * scaleFactor >= 1 && drawCommand.h * scaleFactor >= 1) {\n          setDrawCommands(prev => [...prev, drawCommand]);\n        }\n        DOCUMENT.removeEventListener('mousemove', handleMouseMove);\n        DOCUMENT.removeEventListener('mouseup', handleMouseUp);\n      };\n\n      DOCUMENT.addEventListener('mousemove', handleMouseMove);\n      DOCUMENT.addEventListener('mouseup', handleMouseUp);\n    };\n\n    const deleteRect = hooks.useCallback((index) => {\n      return (e) => {\n        e.preventDefault();\n        e.stopPropagation();\n        setDrawCommands(prev => {\n          const updatedRects = [...prev];\n          updatedRects.splice(index, 1);\n          return updatedRects;\n        });\n      };\n    }, []);\n\n    const dimensions = {\n      width: `${screenshot.canvas.width * scaleFactor}px`,\n      height: `${screenshot.canvas.height * scaleFactor}px`,\n    };\n\n    const handleStopPropagation = (e) => {\n      e.stopPropagation();\n    };\n\n    return (\n      h('div', { class: \"editor\",}\n        , h('style', { nonce: options.styleNonce, dangerouslySetInnerHTML: editorStyleInnerText,} )\n        , h('div', { class: \"editor__image-container\",}\n          , h('div', { class: \"editor__canvas-container\", ref: measurementRef,}\n            , h('canvas', { ref: backgroundRef, id: \"background\", style: dimensions,} )\n            , h('canvas', { ref: foregroundRef, id: \"foreground\", style: dimensions,} )\n            , h('div', { ref: mouseRef, onMouseDown: handleMouseDown, style: dimensions,}\n              , drawCommands.map((rect, index) => (\n                h('div', {\n                  key: index,\n                  class: \"editor__rect\",\n                  style: {\n                    top: `${rect.y * scaleFactor}px`,\n                    left: `${rect.x * scaleFactor}px`,\n                    width: `${rect.w * scaleFactor}px`,\n                    height: `${rect.h * scaleFactor}px`,\n                  },}\n\n                  , h('button', {\n                    'aria-label': \"Remove\",\n                    onClick: deleteRect(index),\n                    onMouseDown: handleStopPropagation,\n                    onMouseUp: handleStopPropagation,\n                    type: \"button\",}\n\n                    , h(IconClose, null )\n                  )\n                )\n              ))\n            )\n          )\n        )\n        , h(Toolbar, { action: action, setAction: setAction,} )\n      )\n    );\n  };\n\n  return function Wrapper({ onError }) {\n    const [screenshot, setScreenshot] = hooks.useState();\n\n    useTakeScreenshot({\n      onBeforeScreenshot: hooks.useCallback(() => {\n        dialogStyle.display = 'none';\n      }, []),\n      onScreenshot: hooks.useCallback((screenshotVideo, dpi) => {\n        // Stash the original screenshot image so we can (re)draw it multiple times\n        with2dContext(DOCUMENT.createElement('canvas'), { alpha: false }, (canvas, ctx) => {\n          ctx.scale(dpi, dpi); // The scale needs to be set before we set the width/height and paint\n          canvas.width = screenshotVideo.videoWidth;\n          canvas.height = screenshotVideo.videoHeight;\n          ctx.drawImage(screenshotVideo, 0, 0, canvas.width, canvas.height);\n\n          setScreenshot({ canvas, dpi });\n        });\n\n        // The output buffer, we only need to set the width/height on this once, it stays the same forever\n        outputBuffer.width = screenshotVideo.videoWidth;\n        outputBuffer.height = screenshotVideo.videoHeight;\n      }, []),\n      onAfterScreenshot: hooks.useCallback(() => {\n        dialogStyle.display = 'block';\n      }, []),\n      onError: hooks.useCallback(error => {\n        dialogStyle.display = 'block';\n        onError(error);\n      }, []),\n    });\n\n    if (screenshot) {\n      return h(ScreenshotEditor, { screenshot: screenshot,} );\n    }\n\n    return h('div', null );\n  };\n}\n\nconst feedbackScreenshotIntegration = (() => {\n  return {\n    name: 'FeedbackScreenshot',\n    setupOnce() {},\n    createInput: ({ h, hooks, dialog, options }) => {\n      const outputBuffer = DOCUMENT.createElement('canvas');\n\n      return {\n        input: ScreenshotEditorFactory({\n          h: h ,\n          hooks: hooks ,\n          outputBuffer,\n          dialog,\n          options,\n        }) , // eslint-disable-line @typescript-eslint/no-explicit-any\n\n        value: async () => {\n          const blob = await new Promise(resolve => {\n            outputBuffer.toBlob(resolve, 'image/png');\n          });\n          if (blob) {\n            const data = new Uint8Array(await blob.arrayBuffer());\n            const attachment = {\n              data,\n              filename: 'screenshot.png',\n              contentType: 'application/png',\n              // attachmentType?: string;\n            };\n            return attachment;\n          }\n          return undefined;\n        },\n      };\n    },\n  };\n}) ;\n\n\n//# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK2ZlZWRiYWNrQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC9mZWVkYmFjay9idWlsZC9ucG0vZXNtL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUE2Szs7QUFFN0s7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvREFBVTtBQUN6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFCQUFxQjtBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQix1REFBUzs7QUFFMUI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSw2REFBZTtBQUNuQjtBQUNBLGtCQUFrQiw2REFBZTtBQUNqQztBQUNBO0FBQ0EsV0FBVyw2REFBZTtBQUMxQjtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLCtEQUErRDtBQUMvRSxlQUFlLHFDQUFxQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RCxZQUFZO0FBQ1osUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFlBQVk7QUFDWixRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLE1BQXVDLElBQUksS0FBZ0I7O0FBRWhGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxLQUFLO0FBQ25CLGVBQWUsS0FBSztBQUNwQixvQkFBb0IsTUFBTSxFQUFFLEtBQUs7QUFDakM7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxjQUFjLEtBQUs7QUFDbkIsZUFBZSxLQUFLO0FBQ3BCO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG9EQUFvRDtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQix5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQixtQkFBbUI7QUFDbkIsY0FBYztBQUNkLGtCQUFrQjtBQUNsQixlQUFlO0FBQ2YsMEJBQTBCO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsSUFBSSxxREFBcUQ7O0FBRXpELElBQUk7QUFDSiwrQkFBK0IsZ0NBQWdDLElBQUksaUNBQWlDO0FBQ3BHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sd0JBQXdCLCtCQUErQjtBQUM3RDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkIsa0JBQWtCOztBQUVsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQyxjQUFjO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsNERBQWM7QUFDdEIsUUFBUTtBQUNSO0FBQ0EsVUFBVSwrQ0FBSztBQUNmO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSw0REFBYztBQUN4QjtBQUNBLFFBQVE7QUFDUjtBQUNBLFVBQVUsK0NBQUs7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUEsK0NBQStDO0FBQy9DOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUIsK0NBQUs7QUFDNUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSx1REFBUztBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHVEQUFTO0FBQzFCO0FBQ0E7O0FBRUEsb0NBQW9DLGtHQUFrRyxrQkFBa0IseUJBQXlCLFNBQVMsZ0JBQWdCLG1CQUFtQixxQkFBcUIsb0JBQW9CLGVBQWUscURBQXFELHlMQUF5TCx5QkFBeUIsd0JBQXdCLE9BQU8sb0lBQW9JLGdEQUFnRCxnQkFBZ0Isa0JBQWtCLGtCQUFrQiw2QkFBNkIsa0JBQWtCLDhDQUE4QyxVQUFVLGVBQWUsb0RBQW9ELDZDQUE2QyxvQkFBb0IsOEJBQThCLHFCQUFxQix5TEFBeUwsZ0JBQWdCLFFBQVEsZ0NBQWdDLDhCQUE4QixlQUFlLHdDQUF3Qyx1QkFBdUIsTUFBTSxlQUFlLGdCQUFnQix1SEFBdUgsZUFBZSxvQkFBb0Isa0JBQWtCLGNBQWMsOElBQThJLHlCQUF5QixvQ0FBb0MseUNBQXlDLGlDQUFpQyxJQUFJLG1YQUFtWCxpQkFBaUIsa0JBQWtCLDRDQUE0QyxpQkFBaUIsSUFBSSwrTUFBK00sV0FBVywrYkFBK2IsYUFBYSxJQUFJLDhFQUE4RSxrQkFBa0IsUUFBUSw4QkFBOEIsZ0JBQWdCLGNBQWMsb0NBQW9DLFNBQVMsa0RBQWtELEdBQUcsb0JBQW9CLCtCQUErQixTQUFTLG9CQUFvQix3Q0FBd0MsOENBQThDLDJDQUEyQyxpQkFBaUIsRUFBRSxTQUFTLDhEQUE4RCxLQUFLLGVBQWUsOERBQThELE1BQU0sV0FBVyxvQkFBb0IsbUdBQW1HLHdCQUF3QixNQUFNLHlEQUF5RCxNQUFNLHdGQUF3RixxREFBcUQsNkpBQTZKLDZHQUE2RyxNQUFNLDBEQUEwRCw0SkFBNEosa0JBQWtCLFFBQVEsVUFBVSxrR0FBa0csZ0JBQWdCLFdBQVcsMkJBQTJCLFFBQVEsbUJBQW1CLG9CQUFvQixvQ0FBb0MsY0FBYywrREFBK0QsZ0NBQWdDLDJDQUEyQyxzQ0FBc0MsZ0VBQWdFLDhCQUE4Qiw2UEFBNlAsaUpBQWlKLHVPQUF1TyxNQUFNLGlOQUFpTix3R0FBd0csYUFBYSxNQUFNLGVBQWUseUJBQXlCLGlDQUFpQyxRQUFRLGdIQUFnSCw2QkFBNkIsR0FBRyw2RkFBNkYsNkVBQTZFLGVBQWUseUJBQXlCLFVBQVUsUUFBUSxzRUFBc0UscUJBQXFCLG9EQUFvRCxvUUFBb1EsU0FBUywrR0FBK0csdUZBQXVGLHNCQUFzQixvQkFBb0IsWUFBWSxXQUFXLDBCQUEwQix5Q0FBeUMsSUFBSSxvQ0FBb0MsV0FBVyxHQUFHLFNBQVMsbUJBQW1CLEdBQUcsZ0NBQWdDLCtDQUErQyx1Q0FBdUMsV0FBVyw4RUFBOEUsY0FBYyxNQUFNLFlBQVksOENBQThDLCtHQUErRyw2Q0FBNkMsTUFBTSxnRUFBZ0UsS0FBSyxzQkFBc0Isd0NBQXdDLHlHQUF5RyxxS0FBcUssMEZBQTBGLG1JQUFtSSxJQUFJLHVCQUF1QixrS0FBa0ssU0FBUyxrQkFBa0IsSUFBSSx1Q0FBdUMsU0FBUyxlQUFlLGtCQUFrQixRQUFRLHVHQUF1Ryw4QkFBOEIsMEJBQTBCLFNBQVMsY0FBYyxnQ0FBZ0MsbUJBQW1CLFdBQVcsaURBQWlELG9EQUFvRCxvQkFBb0IsNkJBQTZCLG9CQUFvQixZQUFZLGdQQUFnUCxpQkFBaUIsc0JBQXNCLGNBQWMsT0FBTyx5QkFBeUIsbUtBQW1LLDRCQUE0QixTQUFTLEtBQUssU0FBUyw0Q0FBNEMsTUFBTSxnRUFBZ0UsOENBQThDLGlGQUFpRix1Q0FBdUMseURBQXlELDRJQUE0SSwyQkFBMkI7O0FBRW5nVSxzRkFBc0YsZ0JBQWdCLDJCQUEyQixxQkFBcUIsYUFBYSxFQUFFLGtDQUFrQyxNQUFNLFVBQVUsY0FBYyxrQkFBa0Isa0JBQWtCLGVBQWUsdURBQXVELHdDQUF3QywyQ0FBMkMsSUFBSSxpQkFBaUIsc0JBQXNCLDJCQUEyQixzQ0FBc0MsZUFBZSxFQUFFLHVCQUF1QixjQUFjLGdDQUFnQyxZQUFZLDZCQUE2QixVQUFVLGNBQWMsZ0RBQWdELG9EQUFvRCxTQUFTLHNEQUFzRCxzQ0FBc0MsYUFBYSxRQUFRLHVCQUF1Qix1QkFBdUIsNEJBQTRCLG1CQUFtQixnQkFBZ0IsZUFBZSxzREFBc0QsZ0JBQWdCLGVBQWUsa0RBQWtELGNBQWMsd0JBQXdCLFFBQVEsV0FBVyxLQUFLLGtCQUFrQixpQkFBaUIsK0NBQStDLGVBQWUsOEJBQThCLHNCQUFzQixTQUFTLHlCQUF5QixnQkFBZ0IsZUFBZSx1REFBdUQsZ0JBQWdCLHdCQUF3QixTQUFTLElBQUksY0FBYyxrQ0FBa0MscUVBQXFFLGdCQUFnQiw0Q0FBNEMsY0FBYyxzQkFBc0Isc0VBQXNFLHlCQUF5QixtQkFBbUIsY0FBYyxFQUFFLGFBQWEsZ0JBQWdCLFVBQVUsZ0JBQWdCLDhCQUE4QixRQUFRLDJCQUEyQiwwQkFBMEIsWUFBWSxhQUFhLFVBQVUsWUFBWSxxQkFBcUIsd0RBQXdELFNBQVMsOEJBQThCLGtCQUFrQixnQkFBZ0Isb0JBQW9CLCtDQUErQyxtQkFBbUIsWUFBWSxvQkFBb0Isc0RBQXNELDhDQUE4QywwREFBMEQsc0JBQXNCLFFBQVEsWUFBWSw0SUFBNEksNkRBQTZELGFBQWEscUJBQXFCLG1CQUFtQixJQUFJLGdEQUFnRCxtQkFBbUIsR0FBRyxTQUFTLG1CQUFtQixtQkFBbUIsd0JBQXdCLGFBQWEsdUJBQXVCLFFBQVEsY0FBYyx3Q0FBd0MsSUFBSSxNQUFNLFNBQVMsTUFBTSxvQ0FBb0MsK0NBQStDLGNBQWMsbUJBQW1CLDBEQUEwRCxxQkFBcUIsaUNBQWlDLGNBQWMsZ0JBQWdCLDhDQUE4QyxjQUFjLFFBQVEsa0JBQWtCLGdCQUFnQixxREFBcUQsZ0JBQWdCLEVBQUUsZ0JBQWdCOztBQUUzN0c7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsd0JBQXdCLGlCQUFpQjs7QUFFMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUEsd0JBQXdCLFNBQVM7QUFDakMsOEJBQThCLGdDQUFnQzs7QUFFOUQ7QUFDQSxnQkFBZ0I7QUFDaEIsc0JBQXNCLHdCQUF3QjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0EsbUVBQW1FLHlCQUF5QjtBQUM1RixRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixjQUFjLCtCQUErQjtBQUM3QztBQUNBO0FBQ0EsVUFBVTtBQUNWLHlCQUF5QiwrQ0FBSztBQUM5QjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0Esd0NBQXdDLDZCQUE2QjtBQUNyRTs7QUFFQSwwQkFBMEI7QUFDMUIsdUJBQXVCO0FBQ3ZCLGlDQUFpQyxnQ0FBZ0M7O0FBRWpFO0FBQ0EsMkJBQTJCO0FBQzNCLGlDQUFpQyxpRkFBaUY7QUFDbEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQix3RUFBd0U7QUFDbkc7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0IsaUNBQWlDLG1GQUFtRjtBQUNwSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLDBFQUEwRTtBQUNyRzs7QUFFQSwyQkFBMkI7QUFDM0IsK0JBQStCLDBFQUEwRTtBQUN6RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBLCtDQUErQyxnQ0FBZ0M7QUFDL0U7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLG9DQUFvQyxzQ0FBc0M7QUFDMUU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsTUFBTTtBQUNwQixlQUFlLE9BQU87QUFDdEIsb0JBQW9CLE9BQU8sRUFBRSxPQUFPO0FBQ3BDO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsY0FBYyxNQUFNO0FBQ3BCLGVBQWUsTUFBTTtBQUNyQjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLGlDQUFpQztBQUNuRDtBQUNBLHFDQUFxQyxpQ0FBaUM7O0FBRXRFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIseUJBQXlCO0FBQ3pCO0FBQ0EsNEJBQTRCLG1FQUFtRTtBQUMvRjtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEIseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlOztBQUVmLG9DQUFvQyxtQkFBbUI7QUFDdkQsNEJBQTRCLDZDQUE2QztBQUN6RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxFQUFFO0FBQ0YsRUFBRTtBQUNGLEVBQUU7QUFDRixFQUFFO0FBQ0YsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esc0JBQXNCLDZEQUFlO0FBQ3JDLHdCQUF3QiwrREFBaUI7QUFDekMscUJBQXFCLDREQUFjO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCLHFCQUFxQixzREFBc0Q7QUFDM0U7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxVQUFVLHVEQUFTO0FBQ25CO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBLG1FQUFtRSxnQ0FBZ0M7O0FBRW5HO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLHdCQUF3QiwwQ0FBMEM7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxZQUFZO0FBQ3BCLFFBQVEsWUFBWTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxTQUFTO0FBQ2pCLFFBQVEsU0FBUztBQUNqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixxQkFBcUI7QUFDckI7QUFDQTtBQUNBLG1DQUFtQyxxREFBcUQ7QUFDeEY7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0RBQWdEO0FBQ25GO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9DQUFvQyxPQUFPO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyx3QkFBd0I7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUEsc0NBQXNDLDhEQUE4RDtBQUNwRzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2QkFBNkIsYUFBYTtBQUMxQztBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsYUFBYTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELHVEQUF1RCxPQUFPO0FBQzlELG1DQUFtQyxHQUFHO0FBQ3RDLHVDQUF1QyxHQUFHO0FBQzFDLGlDQUFpQzs7QUFFakM7O0FBRUEsOEJBQThCLFlBQVk7QUFDMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDLGNBQWM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsYUFBYTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLGFBQWE7QUFDMUQ7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdELGFBQWE7QUFDckUsbURBQW1EO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0NBQStDLGFBQWE7QUFDNUQ7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLGdCQUFnQixzQ0FBc0M7QUFDdEQsaUJBQWlCLHVDQUF1QztBQUN4RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7QUFDakIsdUJBQXVCLDJFQUEyRTtBQUNsRyxxQkFBcUI7QUFDckIsdUJBQXVCO0FBQ3ZCLDRCQUE0QiwwREFBMEQ7QUFDdEYsNEJBQTRCLDBEQUEwRDtBQUN0Rix5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixxQkFBcUI7QUFDakQsNkJBQTZCLHFCQUFxQjtBQUNsRCw4QkFBOEIscUJBQXFCO0FBQ25ELCtCQUErQixxQkFBcUI7QUFDcEQsbUJBQW1COztBQUVuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsdUNBQXVDO0FBQzlEO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEIsU0FBUztBQUNyQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLDBEQUEwRCxjQUFjO0FBQ3hFLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCLGFBQWE7QUFDdkMsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBLG1DQUFtQyx5QkFBeUI7QUFDNUQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQixvQkFBb0IsMkJBQTJCO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7O0FBRXVIO0FBQ3hIIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0BzZW50cnktaW50ZXJuYWwrZmVlZGJhY2tAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL2ZlZWRiYWNrL2J1aWxkL25wbS9lc20vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR0xPQkFMX09CSiwgZ2V0Q2xpZW50LCBnZXRDdXJyZW50U2NvcGUsIGNhcHR1cmVGZWVkYmFjaywgZ2V0TG9jYXRpb25IcmVmLCBpc0Jyb3dzZXIsIGRlYnVnLCBhZGRJbnRlZ3JhdGlvbiwgZ2V0SXNvbGF0aW9uU2NvcGUsIGdldEdsb2JhbFNjb3BlIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcblxuLy8gZXhwb3J0aW5nIGEgc2VwYXJhdGUgY29weSBvZiBgV0lORE9XYCByYXRoZXIgdGhhbiBleHBvcnRpbmcgdGhlIG9uZSBmcm9tIGBAc2VudHJ5L2Jyb3dzZXJgXG4vLyBwcmV2ZW50cyB0aGUgYnJvd3NlciBwYWNrYWdlIGZyb20gYmVpbmcgYnVuZGxlZCBpbiB0aGUgQ0ROIGJ1bmRsZSwgYW5kIGF2b2lkcyBhXG4vLyBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gdGhlIGJyb3dzZXIgYW5kIGZlZWRiYWNrIHBhY2thZ2VzXG5jb25zdCBXSU5ET1cgPSBHTE9CQUxfT0JKIDtcbmNvbnN0IERPQ1VNRU5UID0gV0lORE9XLmRvY3VtZW50O1xuY29uc3QgTkFWSUdBVE9SID0gV0lORE9XLm5hdmlnYXRvcjtcblxuY29uc3QgVFJJR0dFUl9MQUJFTCA9ICdSZXBvcnQgYSBCdWcnO1xuY29uc3QgQ0FOQ0VMX0JVVFRPTl9MQUJFTCA9ICdDYW5jZWwnO1xuY29uc3QgU1VCTUlUX0JVVFRPTl9MQUJFTCA9ICdTZW5kIEJ1ZyBSZXBvcnQnO1xuY29uc3QgQ09ORklSTV9CVVRUT05fTEFCRUwgPSAnQ29uZmlybSc7XG5jb25zdCBGT1JNX1RJVExFID0gJ1JlcG9ydCBhIEJ1Zyc7XG5jb25zdCBFTUFJTF9QTEFDRUhPTERFUiA9ICd5b3VyLmVtYWlsQGV4YW1wbGUub3JnJztcbmNvbnN0IEVNQUlMX0xBQkVMID0gJ0VtYWlsJztcbmNvbnN0IE1FU1NBR0VfUExBQ0VIT0xERVIgPSBcIldoYXQncyB0aGUgYnVnPyBXaGF0IGRpZCB5b3UgZXhwZWN0P1wiO1xuY29uc3QgTUVTU0FHRV9MQUJFTCA9ICdEZXNjcmlwdGlvbic7XG5jb25zdCBOQU1FX1BMQUNFSE9MREVSID0gJ1lvdXIgTmFtZSc7XG5jb25zdCBOQU1FX0xBQkVMID0gJ05hbWUnO1xuY29uc3QgU1VDQ0VTU19NRVNTQUdFX1RFWFQgPSAnVGhhbmsgeW91IGZvciB5b3VyIHJlcG9ydCEnO1xuY29uc3QgSVNfUkVRVUlSRURfTEFCRUwgPSAnKHJlcXVpcmVkKSc7XG5jb25zdCBBRERfU0NSRUVOU0hPVF9MQUJFTCA9ICdBZGQgYSBzY3JlZW5zaG90JztcbmNvbnN0IFJFTU9WRV9TQ1JFRU5TSE9UX0xBQkVMID0gJ1JlbW92ZSBzY3JlZW5zaG90JztcblxuY29uc3QgRkVFREJBQ0tfV0lER0VUX1NPVVJDRSA9ICd3aWRnZXQnO1xuY29uc3QgRkVFREJBQ0tfQVBJX1NPVVJDRSA9ICdhcGknO1xuXG5jb25zdCBTVUNDRVNTX01FU1NBR0VfVElNRU9VVCA9IDUwMDA7XG5cbi8qKlxuICogUHVibGljIEFQSSB0byBzZW5kIGEgRmVlZGJhY2sgaXRlbSB0byBTZW50cnlcbiAqL1xuY29uc3Qgc2VuZEZlZWRiYWNrID0gKFxuICBwYXJhbXMsXG4gIGhpbnQgPSB7IGluY2x1ZGVSZXBsYXk6IHRydWUgfSxcbikgPT4ge1xuICBpZiAoIXBhcmFtcy5tZXNzYWdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gc3VibWl0IGZlZWRiYWNrIHdpdGggZW1wdHkgbWVzc2FnZScpO1xuICB9XG5cbiAgLy8gV2Ugd2FudCB0byB3YWl0IGZvciB0aGUgZmVlZGJhY2sgdG8gYmUgc2VudCAob3Igbm90KVxuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcblxuICBpZiAoIWNsaWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gY2xpZW50IHNldHVwLCBjYW5ub3Qgc2VuZCBmZWVkYmFjay4nKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMudGFncyAmJiBPYmplY3Qua2V5cyhwYXJhbXMudGFncykubGVuZ3RoKSB7XG4gICAgZ2V0Q3VycmVudFNjb3BlKCkuc2V0VGFncyhwYXJhbXMudGFncyk7XG4gIH1cbiAgY29uc3QgZXZlbnRJZCA9IGNhcHR1cmVGZWVkYmFjayhcbiAgICB7XG4gICAgICBzb3VyY2U6IEZFRURCQUNLX0FQSV9TT1VSQ0UsXG4gICAgICB1cmw6IGdldExvY2F0aW9uSHJlZigpLFxuICAgICAgLi4ucGFyYW1zLFxuICAgIH0sXG4gICAgaGludCxcbiAgKTtcblxuICAvLyBXZSB3YW50IHRvIHdhaXQgZm9yIHRoZSBmZWVkYmFjayB0byBiZSBzZW50IChvciBub3QpXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgLy8gQWZ0ZXIgMzBzLCB3ZSB3YW50IHRvIGNsZWFyIGFueWhvd1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHJlamVjdCgnVW5hYmxlIHRvIGRldGVybWluZSBpZiBGZWVkYmFjayB3YXMgY29ycmVjdGx5IHNlbnQuJyksIDMwMDAwKTtcblxuICAgIGNvbnN0IGNsZWFudXAgPSBjbGllbnQub24oJ2FmdGVyU2VuZEV2ZW50JywgKGV2ZW50LCByZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmV2ZW50X2lkICE9PSBldmVudElkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgY2xlYW51cCgpO1xuXG4gICAgICAvLyBSZXF1aXJlIHZhbGlkIHN0YXR1cyBjb2Rlcywgb3RoZXJ3aXNlIGNhbiBhc3N1bWUgZmVlZGJhY2sgd2FzIG5vdCBzZW50IHN1Y2Nlc3NmdWxseVxuICAgICAgaWYgKFxuICAgICAgICByZXNwb25zZSAmJlxuICAgICAgICB0eXBlb2YgcmVzcG9uc2Uuc3RhdHVzQ29kZSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAyMDAgJiZcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSA8IDMwMFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKGV2ZW50SWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2UgJiYgdHlwZW9mIHJlc3BvbnNlLnN0YXR1c0NvZGUgPT09ICdudW1iZXInICYmIHJlc3BvbnNlLnN0YXR1c0NvZGUgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChcbiAgICAgICAgICAnVW5hYmxlIHRvIHNlbmQgRmVlZGJhY2suIFRoaXMgaXMgYmVjYXVzZSBvZiBuZXR3b3JrIGlzc3Vlcywgb3IgYmVjYXVzZSB5b3UgYXJlIHVzaW5nIGFuIGFkLWJsb2NrZXIuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3BvbnNlICYmIHR5cGVvZiByZXNwb25zZS5zdGF0dXNDb2RlID09PSAnbnVtYmVyJyAmJiByZXNwb25zZS5zdGF0dXNDb2RlID09PSA0MDMpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChcbiAgICAgICAgICAnVW5hYmxlIHRvIHNlbmQgRmVlZGJhY2suIFRoaXMgY291bGQgYmUgYmVjYXVzZSB0aGlzIGRvbWFpbiBpcyBub3QgaW4geW91ciBsaXN0IG9mIGFsbG93ZWQgZG9tYWlucy4nLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVqZWN0KFxuICAgICAgICAnVW5hYmxlIHRvIHNlbmQgRmVlZGJhY2suIFRoaXMgY291bGQgYmUgYmVjYXVzZSBvZiBuZXR3b3JrIGlzc3Vlcywgb3IgYmVjYXVzZSB5b3UgYXJlIHVzaW5nIGFuIGFkLWJsb2NrZXInLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKlxuICogRm9yIHJlZmVyZW5jZSwgdGhlIGZ1bGx5IGJ1aWx0IGV2ZW50IGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4gKiB7XG4gKiAgICAgXCJ0eXBlXCI6IFwiZmVlZGJhY2tcIixcbiAqICAgICBcImV2ZW50X2lkXCI6IFwiZDIxMzJkMzFiMzk0NDVmMTkzOGQ3ZTIxYjZiZjBlYzRcIixcbiAqICAgICBcInRpbWVzdGFtcFwiOiAxNTk3OTc3Nzc3LjYxODk3MTgsXG4gKiAgICAgXCJkaXN0XCI6IFwiMS4xMlwiLFxuICogICAgIFwicGxhdGZvcm1cIjogXCJqYXZhc2NyaXB0XCIsXG4gKiAgICAgXCJlbnZpcm9ubWVudFwiOiBcInByb2R1Y3Rpb25cIixcbiAqICAgICBcInJlbGVhc2VcIjogNDIsXG4gKiAgICAgXCJ0YWdzXCI6IHtcInRyYW5zYWN0aW9uXCI6IFwiL29yZ2FuaXphdGlvbnMvOm9yZ0lkL3BlcmZvcm1hbmNlLzpldmVudFNsdWcvXCJ9LFxuICogICAgIFwic2RrXCI6IHtcIm5hbWVcIjogXCJuYW1lXCIsIFwidmVyc2lvblwiOiBcInZlcnNpb25cIn0sXG4gKiAgICAgXCJ1c2VyXCI6IHtcbiAqICAgICAgICAgXCJpZFwiOiBcIjEyM1wiLFxuICogICAgICAgICBcInVzZXJuYW1lXCI6IFwidXNlclwiLFxuICogICAgICAgICBcImVtYWlsXCI6IFwidXNlckBzaXRlLmNvbVwiLFxuICogICAgICAgICBcImlwX2FkZHJlc3NcIjogXCIxOTIuMTY4LjExLjEyXCIsXG4gKiAgICAgfSxcbiAqICAgICBcInJlcXVlc3RcIjoge1xuICogICAgICAgICBcInVybFwiOiBOb25lLFxuICogICAgICAgICBcImhlYWRlcnNcIjoge1xuICogICAgICAgICAgICAgXCJ1c2VyLUFnZW50XCI6IFwiTW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTVfNykgQXBwbGVXZWJLaXQvNjA1LjEuMTUgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzE1LjUgU2FmYXJpLzYwNS4xLjE1XCJcbiAqICAgICAgICAgfSxcbiAqICAgICB9LFxuICogICAgIFwiY29udGV4dHNcIjoge1xuICogICAgICAgICBcImZlZWRiYWNrXCI6IHtcbiAqICAgICAgICAgICAgIFwibWVzc2FnZVwiOiBcInRlc3QgbWVzc2FnZVwiLFxuICogICAgICAgICAgICAgXCJjb250YWN0X2VtYWlsXCI6IFwidGVzdEBleGFtcGxlLmNvbVwiLFxuICogICAgICAgICAgICAgXCJ0eXBlXCI6IFwiZmVlZGJhY2tcIixcbiAqICAgICAgICAgfSxcbiAqICAgICAgICAgXCJ0cmFjZVwiOiB7XG4gKiAgICAgICAgICAgICBcInRyYWNlX2lkXCI6IFwiNEM3OUY2MEMxMTIxNEVCMzg2MDRGNEFFMDc4MUJGQjJcIixcbiAqICAgICAgICAgICAgIFwic3Bhbl9pZFwiOiBcIkZBOTBGREVBRDVGNzQwNTJcIixcbiAqICAgICAgICAgICAgIFwidHlwZVwiOiBcInRyYWNlXCIsXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICAgIFwicmVwbGF5XCI6IHtcbiAqICAgICAgICAgICAgIFwicmVwbGF5X2lkXCI6IFwiZTJkNDIwNDdiMWM1NDMxYzhjYmE4NWVlMmE4YWIyNWRcIixcbiAqICAgICAgICAgfSxcbiAqICAgICB9LFxuICogICB9XG4gKi9cblxuLyoqXG4gKiBUaGlzIHNlcnZlcyBhcyBhIGJ1aWxkIHRpbWUgZmxhZyB0aGF0IHdpbGwgYmUgdHJ1ZSBieSBkZWZhdWx0LCBidXQgZmFsc2UgaW4gbm9uLWRlYnVnIGJ1aWxkcyBvciBpZiB1c2VycyByZXBsYWNlIGBfX1NFTlRSWV9ERUJVR19fYCBpbiB0aGVpciBnZW5lcmF0ZWQgY29kZS5cbiAqXG4gKiBBVFRFTlRJT046IFRoaXMgY29uc3RhbnQgbXVzdCBuZXZlciBjcm9zcyBwYWNrYWdlIGJvdW5kYXJpZXMgKGkuZS4gYmUgZXhwb3J0ZWQpIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciB0cmVlIHNoYWtpbmcuXG4gKi9cbmNvbnN0IERFQlVHX0JVSUxEID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTtcblxuLyoqXG4gKiBNb2JpbGUgYnJvd3NlcnMgZG8gbm90IHN1cHBvcnQgYG1lZGlhRGV2aWNlcy5nZXREaXNwbGF5TWVkaWFgIGV2ZW4gdGhvdWdoIHRoZXkgaGF2ZSB0aGUgYXBpIGltcGxlbWVudGVkXG4gKiBJbnN0ZWFkIHRoZXkgcmV0dXJuIHRoaW5ncyBsaWtlIGBOb3RBbGxvd2VkRXJyb3JgIHdoZW4gY2FsbGVkLlxuICpcbiAqIEl0J3Mgc2ltcGxlciBmb3IgdXMgdG8gYnJvd3NlciBzbmlmZiBmaXJzdCwgYW5kIGF2b2lkIGxvYWRpbmcgdGhlIGludGVncmF0aW9uIGlmIHdlIGNhbi5cbiAqXG4gKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTg4NzkyMTJcbiAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zNTQwMjk1XG4gKlxuICogYG1lZGlhRGV2aWNlcy5nZXREaXNwbGF5TWVkaWFgIGlzIGFsc28gb25seSBzdXBwb3J0ZWQgaW4gc2VjdXJlIGNvbnRleHRzLCBhbmQgcmV0dXJuIGEgYG1lZGlhRGV2aWNlcyBpcyBub3Qgc3VwcG9ydGVkYCBlcnJvciwgc28gd2Ugc2hvdWxkIGFsc28gYXZvaWQgbG9hZGluZyB0aGUgaW50ZWdyYXRpb24gaWYgd2UgY2FuLlxuICpcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9NZWRpYURldmljZXMvZ2V0RGlzcGxheU1lZGlhXG4gKi9cbmZ1bmN0aW9uIGlzU2NyZWVuc2hvdFN1cHBvcnRlZCgpIHtcbiAgaWYgKC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChOQVZJR0FUT1IudXNlckFnZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogVXNlciBhZ2VudCBvbiBpUGFkcyBzaG93IGFzIE1hY2ludG9zaCwgc28gd2UgbmVlZCBleHRyYSBjaGVja3NcbiAgICpcbiAgICogaHR0cHM6Ly9mb3J1bXMuZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb3J1bXMvdGhyZWFkLzExOTE4NlxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy82MDQ4MjY1MC9ob3ctdG8tZGV0ZWN0LWlwYWQtdXNlcmFnZW50LW9uLXNhZmFyaS1icm93c2VyXG4gICAqL1xuICBpZiAoL01hY2ludG9zaC9pLnRlc3QoTkFWSUdBVE9SLnVzZXJBZ2VudCkgJiYgTkFWSUdBVE9SLm1heFRvdWNoUG9pbnRzICYmIE5BVklHQVRPUi5tYXhUb3VjaFBvaW50cyA+IDEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCFpc1NlY3VyZUNvbnRleHQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogUXVpY2sgYW5kIGRpcnR5IGRlZXAgbWVyZ2UgZm9yIHRoZSBGZWVkYmFjayBpbnRlZ3JhdGlvbiBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhcbiAgZGVmYXVsdE9wdGlvbnMsXG4gIG9wdGlvbk92ZXJyaWRlcyxcbikge1xuICByZXR1cm4ge1xuICAgIC4uLmRlZmF1bHRPcHRpb25zLFxuICAgIC4uLm9wdGlvbk92ZXJyaWRlcyxcbiAgICB0YWdzOiB7XG4gICAgICAuLi5kZWZhdWx0T3B0aW9ucy50YWdzLFxuICAgICAgLi4ub3B0aW9uT3ZlcnJpZGVzLnRhZ3MsXG4gICAgfSxcbiAgICBvbkZvcm1PcGVuOiAoKSA9PiB7XG4gICAgICBvcHRpb25PdmVycmlkZXMub25Gb3JtT3Blbj8uKCk7XG4gICAgICBkZWZhdWx0T3B0aW9ucy5vbkZvcm1PcGVuPy4oKTtcbiAgICB9LFxuICAgIG9uRm9ybUNsb3NlOiAoKSA9PiB7XG4gICAgICBvcHRpb25PdmVycmlkZXMub25Gb3JtQ2xvc2U/LigpO1xuICAgICAgZGVmYXVsdE9wdGlvbnMub25Gb3JtQ2xvc2U/LigpO1xuICAgIH0sXG4gICAgb25TdWJtaXRTdWNjZXNzOiAoZGF0YSwgZXZlbnRJZCkgPT4ge1xuICAgICAgb3B0aW9uT3ZlcnJpZGVzLm9uU3VibWl0U3VjY2Vzcz8uKGRhdGEsIGV2ZW50SWQpO1xuICAgICAgZGVmYXVsdE9wdGlvbnMub25TdWJtaXRTdWNjZXNzPy4oZGF0YSwgZXZlbnRJZCk7XG4gICAgfSxcbiAgICBvblN1Ym1pdEVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgIG9wdGlvbk92ZXJyaWRlcy5vblN1Ym1pdEVycm9yPy4oZXJyb3IpO1xuICAgICAgZGVmYXVsdE9wdGlvbnMub25TdWJtaXRFcnJvcj8uKGVycm9yKTtcbiAgICB9LFxuICAgIG9uRm9ybVN1Ym1pdHRlZDogKCkgPT4ge1xuICAgICAgb3B0aW9uT3ZlcnJpZGVzLm9uRm9ybVN1Ym1pdHRlZD8uKCk7XG4gICAgICBkZWZhdWx0T3B0aW9ucy5vbkZvcm1TdWJtaXR0ZWQ/LigpO1xuICAgIH0sXG4gICAgdGhlbWVEYXJrOiB7XG4gICAgICAuLi5kZWZhdWx0T3B0aW9ucy50aGVtZURhcmssXG4gICAgICAuLi5vcHRpb25PdmVycmlkZXMudGhlbWVEYXJrLFxuICAgIH0sXG4gICAgdGhlbWVMaWdodDoge1xuICAgICAgLi4uZGVmYXVsdE9wdGlvbnMudGhlbWVMaWdodCxcbiAgICAgIC4uLm9wdGlvbk92ZXJyaWRlcy50aGVtZUxpZ2h0LFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyA8c3R5bGU+IGVsZW1lbnQgZm9yIHdpZGdldCBhY3RvciAoYnV0dG9uIHRoYXQgb3BlbnMgdGhlIGRpYWxvZylcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQWN0b3JTdHlsZXMoc3R5bGVOb25jZSkge1xuICBjb25zdCBzdHlsZSA9IERPQ1VNRU5ULmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLnRleHRDb250ZW50ID0gYFxuLndpZGdldF9fYWN0b3Ige1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IHZhcigtLXotaW5kZXgpO1xuICBtYXJnaW46IHZhcigtLXBhZ2UtbWFyZ2luKTtcbiAgaW5zZXQ6IHZhcigtLWFjdG9yLWluc2V0KTtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDhweDtcbiAgcGFkZGluZzogMTZweDtcblxuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUpO1xuICBmb250LXdlaWdodDogNjAwO1xuICBsaW5lLWhlaWdodDogMS4xNGVtO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cbiAgYmFja2dyb3VuZDogdmFyKC0tYWN0b3ItYmFja2dyb3VuZCwgdmFyKC0tYmFja2dyb3VuZCkpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1hY3Rvci1ib3JkZXItcmFkaXVzLCAxLjdlbS81MCUpO1xuICBib3JkZXI6IHZhcigtLWFjdG9yLWJvcmRlciwgdmFyKC0tYm9yZGVyKSk7XG4gIGJveC1zaGFkb3c6IHZhcigtLWFjdG9yLWJveC1zaGFkb3csIHZhcigtLWJveC1zaGFkb3cpKTtcbiAgY29sb3I6IHZhcigtLWFjdG9yLWNvbG9yLCB2YXIoLS1mb3JlZ3JvdW5kKSk7XG4gIGZpbGw6IHZhcigtLWFjdG9yLWNvbG9yLCB2YXIoLS1mb3JlZ3JvdW5kKSk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgb3BhY2l0eTogMTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZS1pbi1vdXQ7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApIHNjYWxlKDEpO1xufVxuLndpZGdldF9fYWN0b3JbYXJpYS1oaWRkZW49XCJ0cnVlXCJdIHtcbiAgb3BhY2l0eTogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMTZweCkgc2NhbGUoMC45OCk7XG59XG5cbi53aWRnZXRfX2FjdG9yOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tYWN0b3ItaG92ZXItYmFja2dyb3VuZCwgdmFyKC0tYmFja2dyb3VuZCkpO1xuICBmaWx0ZXI6IHZhcigtLWludGVyYWN0aXZlLWZpbHRlcik7XG59XG5cbi53aWRnZXRfX2FjdG9yIHN2ZyB7XG4gIHdpZHRoOiAxLjE0ZW07XG4gIGhlaWdodDogMS4xNGVtO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcbiAgLndpZGdldF9fYWN0b3Igc3BhbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuYDtcblxuICBpZiAoc3R5bGVOb25jZSkge1xuICAgIHN0eWxlLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBzdHlsZU5vbmNlKTtcbiAgfVxuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2V0IGEgZGljdCBvZiBhdHRyaWJ1dGVzIG9uIGVsZW1lbnQgKHcvIHNwZWNpZmllZCBuYW1lc3BhY2UpXG4gKi9cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXNOUyhlbCwgYXR0cmlidXRlcykge1xuICBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKS5mb3JFYWNoKChba2V5LCB2YWxdKSA9PiB7XG4gICAgZWwuc2V0QXR0cmlidXRlTlMobnVsbCwga2V5LCB2YWwpO1xuICB9KTtcbiAgcmV0dXJuIGVsO1xufVxuXG5jb25zdCBTSVpFID0gMjA7XG5jb25zdCBYTUxOUyQyID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcblxuLyoqXG4gKiBGZWVkYmFjayBJY29uXG4gKi9cbmZ1bmN0aW9uIEZlZWRiYWNrSWNvbigpIHtcbiAgY29uc3QgY3JlYXRlRWxlbWVudE5TID0gKHRhZ05hbWUpID0+XG4gICAgV0lORE9XLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhYTUxOUyQyLCB0YWdOYW1lKTtcbiAgY29uc3Qgc3ZnID0gc2V0QXR0cmlidXRlc05TKGNyZWF0ZUVsZW1lbnROUygnc3ZnJyksIHtcbiAgICB3aWR0aDogYCR7U0laRX1gLFxuICAgIGhlaWdodDogYCR7U0laRX1gLFxuICAgIHZpZXdCb3g6IGAwIDAgJHtTSVpFfSAke1NJWkV9YCxcbiAgICBmaWxsOiAndmFyKC0tYWN0b3ItY29sb3IsIHZhcigtLWZvcmVncm91bmQpKScsXG4gIH0pO1xuXG4gIGNvbnN0IGcgPSBzZXRBdHRyaWJ1dGVzTlMoY3JlYXRlRWxlbWVudE5TKCdnJyksIHtcbiAgICBjbGlwUGF0aDogJ3VybCgjY2xpcDBfNTdfODApJyxcbiAgfSk7XG5cbiAgY29uc3QgcGF0aCA9IHNldEF0dHJpYnV0ZXNOUyhjcmVhdGVFbGVtZW50TlMoJ3BhdGgnKSwge1xuICAgIFsnZmlsbC1ydWxlJ106ICdldmVub2RkJyxcbiAgICBbJ2NsaXAtcnVsZSddOiAnZXZlbm9kZCcsXG4gICAgZDogJ00xNS42NjIyIDE1SDEyLjM5OTdDMTIuMjEyOSAxNC45OTU5IDEyLjAzMSAxNC45Mzk2IDExLjg3NDcgMTQuODM3NUw4LjA0OTY1IDEyLjJINy40OTk1NlYxOS4xQzcuNDg3NSAxOS4zMzQ4IDcuMzg4OCAxOS41NTY4IDcuMjIyNTYgMTkuNzIzQzcuMDU2MzIgMTkuODg5MiA2LjgzNDM1IDE5Ljk4NzkgNi41OTk1NiAyMEgyLjA0OTU2QzEuODAxOTMgMTkuOTk2OCAxLjU2NTM1IDE5Ljg5NjkgMS4zOTAyMyAxOS43MjE4QzEuMjE1MTEgMTkuNTQ2NyAxLjExNTMgMTkuMzEwMSAxLjExMjA2IDE5LjA2MjVWMTIuMkgwLjk0OTY1MkMwLjgyNDQzMSAxMi4yMDE3IDAuNzAwMTQyIDEyLjE3ODMgMC41ODQxMjMgMTIuMTMxMUMwLjQ2ODEwNCAxMi4wODQgMC4zNjI3MDggMTIuMDE0IDAuMjc0MTU1IDExLjkyNTVDMC4xODU2MDIgMTEuODM2OSAwLjExNTY4OSAxMS43MzE1IDAuMDY4NTQxOSAxMS42MTU1QzAuMDIxMzk1MiAxMS40OTk1IC0wLjAwMjAyOTEzIDExLjM3NTIgLTAuMDAwMzQ4MDggMTEuMjVWMy43NUMtMC4wMDkwMDQ5OCAzLjYyMDY3IDAuMDA5MjUwNCAzLjQ5MDk1IDAuMDUzMjY1MSAzLjM2OTA0QzAuMDk3Mjc5OCAzLjI0NzEyIDAuMTY2MDk3IDMuMTM1NjYgMC4yNTUzNzIgMy4wNDE2OEMwLjM0NDY0NiAyLjk0NzcxIDAuNDUyNDM3IDIuODczMjcgMC41NzE5MzcgMi44MjMwN0MwLjY5MTQzNyAyLjc3Mjg2IDAuODIwMDUgMi43NDc5OCAwLjk0OTY1MiAyLjc1SDguMDQ5NjVMMTEuODc0NyAwLjE2MjVDMTIuMDMxIDAuMDYwMzY0OSAxMi4yMTI5IDAuMDA0MDcyMjEgMTIuMzk5NyAwSDE1LjY2MjJDMTUuOTA5OCAwLjAwMzIzNzQ2IDE2LjE0NjQgMC4xMDMwNDkgMTYuMzIxNSAwLjI3ODE2N0MxNi40OTY2IDAuNDUzMjg2IDE2LjU5NjQgMC42ODk4NjYgMTYuNTk5NyAwLjkzNzVWMy4yNTI2OUMxNy4zOTY5IDMuNDI5NTkgMTguMTM0NSAzLjgzMDI2IDE4LjcyMTEgNC40MTY3OUMxOS41MzIyIDUuMjI3ODggMTkuOTg3OCA2LjMyNzk2IDE5Ljk4NzggNy40NzUwMkMxOS45ODc4IDguNjIyMDkgMTkuNTMyMiA5LjcyMjE3IDE4LjcyMTEgMTAuNTMzM0MxOC4xMzQ1IDExLjExOTggMTcuMzk2OSAxMS41MjA1IDE2LjU5OTcgMTEuNjk3NFYxNC4wMTI1QzE2LjYwNDcgMTQuMTM5MyAxNi41ODQyIDE0LjI2NTkgMTYuNTM5NSAxNC4zODQ3QzE2LjQ5NDggMTQuNTAzNSAxNi40MjY4IDE0LjYxMjEgMTYuMzM5NCAxNC43MDQyQzE2LjI1MiAxNC43OTYyIDE2LjE0NyAxNC44Njk4IDE2LjAzMDcgMTQuOTIwNkMxNS45MTQ0IDE0Ljk3MTQgMTUuNzg5MSAxNC45OTg0IDE1LjY2MjIgMTVaTTEuODk2OTUgMTAuMzI1SDEuODg3MTVWNC42MjVIOC4zMzcxNUM4LjUyNDIzIDQuNjIzMDEgOC43MDY2NiA0LjU2NjU0IDguODYyMTUgNC40NjI1TDEyLjY4NzIgMS44NzVIMTQuNzI0N1YxMy4xMjVIMTIuNjg3Mkw4Ljg2MjE1IDEwLjQ4NzVDOC43MDY2NiAxMC4zODM1IDguNTI0MjMgMTAuMzI3IDguMzM3MTUgMTAuMzI1SDIuMjAyMTdDMi4xNTIwNSAxMC4zMTY3IDIuMTAxMDIgMTAuMzEyNSAyLjA0OTU2IDEwLjMxMjVDMS45OTgxIDEwLjMxMjUgMS45NDcwOCAxMC4zMTY3IDEuODk2OTUgMTAuMzI1Wk0yLjk4NzA2IDEyLjJWMTguMTYyNUg1LjY2MjA2VjEyLjJIMi45ODcwNlpNMTYuNTk5NyA5LjkzNjEyVjUuMDEzOTNDMTYuNjUzNiA1LjAyMzU1IDE2LjcwNzIgNS4wMzQ5NSAxNi43NjA1IDUuMDQ4MTRDMTcuMTIwMiA1LjEzNzA5IDE3LjQ1NTYgNS4zMDQ4NyAxNy43NDI1IDUuNTM5MzRDMTguMDI5MyA1Ljc3MzgxIDE4LjI2MDUgNi4wNjkxMiAxOC40MTkyIDYuNDAzODlDMTguNTc4IDYuNzM4NjYgMTguNjYwMyA3LjEwNDUyIDE4LjY2MDMgNy40NzUwMkMxOC42NjAzIDcuODQ1NTIgMTguNTc4IDguMjExMzkgMTguNDE5MiA4LjU0NjE2QzE4LjI2MDUgOC44ODA5MyAxOC4wMjkzIDkuMTc2MjQgMTcuNzQyNSA5LjQxMDcxQzE3LjQ1NTYgOS42NDUxOCAxNy4xMjAyIDkuODEyOTYgMTYuNzYwNSA5LjkwMTkxQzE2LjcwNzIgOS45MTUwOSAxNi42NTM2IDkuOTI2NSAxNi41OTk3IDkuOTM2MTJaJyxcbiAgfSk7XG4gIHN2Zy5hcHBlbmRDaGlsZChnKS5hcHBlbmRDaGlsZChwYXRoKTtcblxuICBjb25zdCBzcGVha2VyRGVmcyA9IGNyZWF0ZUVsZW1lbnROUygnZGVmcycpO1xuICBjb25zdCBzcGVha2VyQ2xpcFBhdGhEZWYgPSBzZXRBdHRyaWJ1dGVzTlMoY3JlYXRlRWxlbWVudE5TKCdjbGlwUGF0aCcpLCB7XG4gICAgaWQ6ICdjbGlwMF81N184MCcsXG4gIH0pO1xuXG4gIGNvbnN0IHNwZWFrZXJSZWN0ID0gc2V0QXR0cmlidXRlc05TKGNyZWF0ZUVsZW1lbnROUygncmVjdCcpLCB7XG4gICAgd2lkdGg6IGAke1NJWkV9YCxcbiAgICBoZWlnaHQ6IGAke1NJWkV9YCxcbiAgICBmaWxsOiAnd2hpdGUnLFxuICB9KTtcblxuICBzcGVha2VyQ2xpcFBhdGhEZWYuYXBwZW5kQ2hpbGQoc3BlYWtlclJlY3QpO1xuICBzcGVha2VyRGVmcy5hcHBlbmRDaGlsZChzcGVha2VyQ2xpcFBhdGhEZWYpO1xuXG4gIHN2Zy5hcHBlbmRDaGlsZChzcGVha2VyRGVmcykuYXBwZW5kQ2hpbGQoc3BlYWtlckNsaXBQYXRoRGVmKS5hcHBlbmRDaGlsZChzcGVha2VyUmVjdCk7XG5cbiAgcmV0dXJuIHN2Zztcbn1cblxuLyoqXG4gKiBUaGUgc2VudHJ5LXByb3ZpZGVkIGJ1dHRvbiB0byBvcGVuIHRoZSBmZWVkYmFjayBtb2RhbFxuICovXG5mdW5jdGlvbiBBY3Rvcih7IHRyaWdnZXJMYWJlbCwgdHJpZ2dlckFyaWFMYWJlbCwgc2hhZG93LCBzdHlsZU5vbmNlIH0pIHtcbiAgY29uc3QgZWwgPSBET0NVTUVOVC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgZWwudHlwZSA9ICdidXR0b24nO1xuICBlbC5jbGFzc05hbWUgPSAnd2lkZ2V0X19hY3Rvcic7XG4gIGVsLmFyaWFIaWRkZW4gPSAnZmFsc2UnO1xuICBlbC5hcmlhTGFiZWwgPSB0cmlnZ2VyQXJpYUxhYmVsIHx8IHRyaWdnZXJMYWJlbCB8fCBUUklHR0VSX0xBQkVMO1xuICBlbC5hcHBlbmRDaGlsZChGZWVkYmFja0ljb24oKSk7XG4gIGlmICh0cmlnZ2VyTGFiZWwpIHtcbiAgICBjb25zdCBsYWJlbCA9IERPQ1VNRU5ULmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICBsYWJlbC5hcHBlbmRDaGlsZChET0NVTUVOVC5jcmVhdGVUZXh0Tm9kZSh0cmlnZ2VyTGFiZWwpKTtcbiAgICBlbC5hcHBlbmRDaGlsZChsYWJlbCk7XG4gIH1cblxuICBjb25zdCBzdHlsZSA9IGNyZWF0ZUFjdG9yU3R5bGVzKHN0eWxlTm9uY2UpO1xuXG4gIHJldHVybiB7XG4gICAgZWwsXG4gICAgYXBwZW5kVG9Eb20oKSB7XG4gICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgICAgc2hhZG93LmFwcGVuZENoaWxkKGVsKTtcbiAgICB9LFxuICAgIHJlbW92ZUZyb21Eb20oKSB7XG4gICAgICBlbC5yZW1vdmUoKTtcbiAgICAgIHN0eWxlLnJlbW92ZSgpO1xuICAgIH0sXG4gICAgc2hvdygpIHtcbiAgICAgIGVsLmFyaWFIaWRkZW4gPSAnZmFsc2UnO1xuICAgIH0sXG4gICAgaGlkZSgpIHtcbiAgICAgIGVsLmFyaWFIaWRkZW4gPSAndHJ1ZSc7XG4gICAgfSxcbiAgfTtcbn1cblxuY29uc3QgUFVSUExFID0gJ3JnYmEoODgsIDc0LCAxOTIsIDEpJztcblxuY29uc3QgREVGQVVMVF9MSUdIVCA9IHtcbiAgZm9yZWdyb3VuZDogJyMyYjIyMzMnLFxuICBiYWNrZ3JvdW5kOiAnI2ZmZmZmZicsXG4gIGFjY2VudEZvcmVncm91bmQ6ICd3aGl0ZScsXG4gIGFjY2VudEJhY2tncm91bmQ6IFBVUlBMRSxcbiAgc3VjY2Vzc0NvbG9yOiAnIzI2OGQ3NScsXG4gIGVycm9yQ29sb3I6ICcjZGYzMzM4JyxcbiAgYm9yZGVyOiAnMS41cHggc29saWQgcmdiYSg0MSwgMzUsIDQ3LCAwLjEzKScsXG4gIGJveFNoYWRvdzogJzBweCA0cHggMjRweCAwcHggcmdiYSg0MywgMzQsIDUxLCAwLjEyKScsXG4gIG91dGxpbmU6ICcxcHggYXV0byB2YXIoLS1hY2NlbnQtYmFja2dyb3VuZCknLFxuICBpbnRlcmFjdGl2ZUZpbHRlcjogJ2JyaWdodG5lc3MoOTUlKScsXG59O1xuY29uc3QgREVGQVVMVF9EQVJLID0ge1xuICBmb3JlZ3JvdW5kOiAnI2ViZTZlZicsXG4gIGJhY2tncm91bmQ6ICcjMjkyMzJmJyxcbiAgYWNjZW50Rm9yZWdyb3VuZDogJ3doaXRlJyxcbiAgYWNjZW50QmFja2dyb3VuZDogUFVSUExFLFxuICBzdWNjZXNzQ29sb3I6ICcjMmRhOThjJyxcbiAgZXJyb3JDb2xvcjogJyNmNTU0NTknLFxuICBib3JkZXI6ICcxLjVweCBzb2xpZCByZ2JhKDIzNSwgMjMwLCAyMzksIDAuMTUpJyxcbiAgYm94U2hhZG93OiAnMHB4IDRweCAyNHB4IDBweCByZ2JhKDQzLCAzNCwgNTEsIDAuMTIpJyxcbiAgb3V0bGluZTogJzFweCBhdXRvIHZhcigtLWFjY2VudC1iYWNrZ3JvdW5kKScsXG4gIGludGVyYWN0aXZlRmlsdGVyOiAnYnJpZ2h0bmVzcygxNTAlKScsXG59O1xuXG5mdW5jdGlvbiBnZXRUaGVtZWRDc3NWYXJpYWJsZXModGhlbWUpIHtcbiAgcmV0dXJuIGBcbiAgLS1mb3JlZ3JvdW5kOiAke3RoZW1lLmZvcmVncm91bmR9O1xuICAtLWJhY2tncm91bmQ6ICR7dGhlbWUuYmFja2dyb3VuZH07XG4gIC0tYWNjZW50LWZvcmVncm91bmQ6ICR7dGhlbWUuYWNjZW50Rm9yZWdyb3VuZH07XG4gIC0tYWNjZW50LWJhY2tncm91bmQ6ICR7dGhlbWUuYWNjZW50QmFja2dyb3VuZH07XG4gIC0tc3VjY2Vzcy1jb2xvcjogJHt0aGVtZS5zdWNjZXNzQ29sb3J9O1xuICAtLWVycm9yLWNvbG9yOiAke3RoZW1lLmVycm9yQ29sb3J9O1xuICAtLWJvcmRlcjogJHt0aGVtZS5ib3JkZXJ9O1xuICAtLWJveC1zaGFkb3c6ICR7dGhlbWUuYm94U2hhZG93fTtcbiAgLS1vdXRsaW5lOiAke3RoZW1lLm91dGxpbmV9O1xuICAtLWludGVyYWN0aXZlLWZpbHRlcjogJHt0aGVtZS5pbnRlcmFjdGl2ZUZpbHRlcn07XG4gIGA7XG59XG5cbi8qKlxuICogQ3JlYXRlcyA8c3R5bGU+IGVsZW1lbnQgZm9yIHdpZGdldCBhY3RvciAoYnV0dG9uIHRoYXQgb3BlbnMgdGhlIGRpYWxvZylcbiAqL1xuZnVuY3Rpb24gY3JlYXRlTWFpblN0eWxlcyh7XG4gIGNvbG9yU2NoZW1lLFxuICB0aGVtZURhcmssXG4gIHRoZW1lTGlnaHQsXG4gIHN0eWxlTm9uY2UsXG59KSB7XG4gIGNvbnN0IHN0eWxlID0gRE9DVU1FTlQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGUudGV4dENvbnRlbnQgPSBgXG46aG9zdCB7XG4gIC0tZm9udC1mYW1pbHk6IHN5c3RlbS11aSwgJ0hlbHZldGljYSBOZXVlJywgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIC0tZm9udC1zaXplOiAxNHB4O1xuICAtLXotaW5kZXg6IDEwMDAwMDtcblxuICAtLXBhZ2UtbWFyZ2luOiAxNnB4O1xuICAtLWluc2V0OiBhdXRvIDAgMCBhdXRvO1xuICAtLWFjdG9yLWluc2V0OiB2YXIoLS1pbnNldCk7XG5cbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtZmFtaWx5KTtcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUpO1xuXG4gICR7Y29sb3JTY2hlbWUgIT09ICdzeXN0ZW0nID8gJ2NvbG9yLXNjaGVtZTogb25seSBsaWdodDsnIDogJyd9XG5cbiAgJHtnZXRUaGVtZWRDc3NWYXJpYWJsZXMoXG4gICAgY29sb3JTY2hlbWUgPT09ICdkYXJrJyA/IHsgLi4uREVGQVVMVF9EQVJLLCAuLi50aGVtZURhcmsgfSA6IHsgLi4uREVGQVVMVF9MSUdIVCwgLi4udGhlbWVMaWdodCB9LFxuICApfVxufVxuXG4ke1xuICBjb2xvclNjaGVtZSA9PT0gJ3N5c3RlbSdcbiAgICA/IGBcbkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgOmhvc3Qge1xuICAgICR7Z2V0VGhlbWVkQ3NzVmFyaWFibGVzKHsgLi4uREVGQVVMVF9EQVJLLCAuLi50aGVtZURhcmsgfSl9XG4gIH1cbn1gXG4gICAgOiAnJ1xufVxufVxuYDtcblxuICBpZiAoc3R5bGVOb25jZSkge1xuICAgIHN0eWxlLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBzdHlsZU5vbmNlKTtcbiAgfVxuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuY29uc3QgYnVpbGRGZWVkYmFja0ludGVncmF0aW9uID0gKHtcbiAgbGF6eUxvYWRJbnRlZ3JhdGlvbixcbiAgZ2V0TW9kYWxJbnRlZ3JhdGlvbixcbiAgZ2V0U2NyZWVuc2hvdEludGVncmF0aW9uLFxufVxuXG4pID0+IHtcbiAgY29uc3QgZmVlZGJhY2tJbnRlZ3JhdGlvbiA9ICgoe1xuICAgIC8vIEZlZWRiYWNrR2VuZXJhbENvbmZpZ3VyYXRpb25cbiAgICBpZCA9ICdzZW50cnktZmVlZGJhY2snLFxuICAgIGF1dG9JbmplY3QgPSB0cnVlLFxuICAgIHNob3dCcmFuZGluZyA9IHRydWUsXG4gICAgaXNFbWFpbFJlcXVpcmVkID0gZmFsc2UsXG4gICAgaXNOYW1lUmVxdWlyZWQgPSBmYWxzZSxcbiAgICBzaG93RW1haWwgPSB0cnVlLFxuICAgIHNob3dOYW1lID0gdHJ1ZSxcbiAgICBlbmFibGVTY3JlZW5zaG90ID0gdHJ1ZSxcbiAgICB1c2VTZW50cnlVc2VyID0ge1xuICAgICAgZW1haWw6ICdlbWFpbCcsXG4gICAgICBuYW1lOiAndXNlcm5hbWUnLFxuICAgIH0sXG4gICAgdGFncyxcbiAgICBzdHlsZU5vbmNlLFxuICAgIHNjcmlwdE5vbmNlLFxuXG4gICAgLy8gRmVlZGJhY2tUaGVtZUNvbmZpZ3VyYXRpb25cbiAgICBjb2xvclNjaGVtZSA9ICdzeXN0ZW0nLFxuICAgIHRoZW1lTGlnaHQgPSB7fSxcbiAgICB0aGVtZURhcmsgPSB7fSxcblxuICAgIC8vIEZlZWRiYWNrVGV4dENvbmZpZ3VyYXRpb25cbiAgICBhZGRTY3JlZW5zaG90QnV0dG9uTGFiZWwgPSBBRERfU0NSRUVOU0hPVF9MQUJFTCxcbiAgICBjYW5jZWxCdXR0b25MYWJlbCA9IENBTkNFTF9CVVRUT05fTEFCRUwsXG4gICAgY29uZmlybUJ1dHRvbkxhYmVsID0gQ09ORklSTV9CVVRUT05fTEFCRUwsXG4gICAgZW1haWxMYWJlbCA9IEVNQUlMX0xBQkVMLFxuICAgIGVtYWlsUGxhY2Vob2xkZXIgPSBFTUFJTF9QTEFDRUhPTERFUixcbiAgICBmb3JtVGl0bGUgPSBGT1JNX1RJVExFLFxuICAgIGlzUmVxdWlyZWRMYWJlbCA9IElTX1JFUVVJUkVEX0xBQkVMLFxuICAgIG1lc3NhZ2VMYWJlbCA9IE1FU1NBR0VfTEFCRUwsXG4gICAgbWVzc2FnZVBsYWNlaG9sZGVyID0gTUVTU0FHRV9QTEFDRUhPTERFUixcbiAgICBuYW1lTGFiZWwgPSBOQU1FX0xBQkVMLFxuICAgIG5hbWVQbGFjZWhvbGRlciA9IE5BTUVfUExBQ0VIT0xERVIsXG4gICAgcmVtb3ZlU2NyZWVuc2hvdEJ1dHRvbkxhYmVsID0gUkVNT1ZFX1NDUkVFTlNIT1RfTEFCRUwsXG4gICAgc3VibWl0QnV0dG9uTGFiZWwgPSBTVUJNSVRfQlVUVE9OX0xBQkVMLFxuICAgIHN1Y2Nlc3NNZXNzYWdlVGV4dCA9IFNVQ0NFU1NfTUVTU0FHRV9URVhULFxuICAgIHRyaWdnZXJMYWJlbCA9IFRSSUdHRVJfTEFCRUwsXG4gICAgdHJpZ2dlckFyaWFMYWJlbCA9ICcnLFxuXG4gICAgLy8gRmVlZGJhY2tDYWxsYmFja3NcbiAgICBvbkZvcm1PcGVuLFxuICAgIG9uRm9ybUNsb3NlLFxuICAgIG9uU3VibWl0U3VjY2VzcyxcbiAgICBvblN1Ym1pdEVycm9yLFxuICAgIG9uRm9ybVN1Ym1pdHRlZCxcbiAgfSA9IHt9KSA9PiB7XG4gICAgY29uc3QgX29wdGlvbnMgPSB7XG4gICAgICBpZCxcbiAgICAgIGF1dG9JbmplY3QsXG4gICAgICBzaG93QnJhbmRpbmcsXG4gICAgICBpc0VtYWlsUmVxdWlyZWQsXG4gICAgICBpc05hbWVSZXF1aXJlZCxcbiAgICAgIHNob3dFbWFpbCxcbiAgICAgIHNob3dOYW1lLFxuICAgICAgZW5hYmxlU2NyZWVuc2hvdCxcbiAgICAgIHVzZVNlbnRyeVVzZXIsXG4gICAgICB0YWdzLFxuICAgICAgc3R5bGVOb25jZSxcbiAgICAgIHNjcmlwdE5vbmNlLFxuXG4gICAgICBjb2xvclNjaGVtZSxcbiAgICAgIHRoZW1lRGFyayxcbiAgICAgIHRoZW1lTGlnaHQsXG5cbiAgICAgIHRyaWdnZXJMYWJlbCxcbiAgICAgIHRyaWdnZXJBcmlhTGFiZWwsXG4gICAgICBjYW5jZWxCdXR0b25MYWJlbCxcbiAgICAgIHN1Ym1pdEJ1dHRvbkxhYmVsLFxuICAgICAgY29uZmlybUJ1dHRvbkxhYmVsLFxuICAgICAgZm9ybVRpdGxlLFxuICAgICAgZW1haWxMYWJlbCxcbiAgICAgIGVtYWlsUGxhY2Vob2xkZXIsXG4gICAgICBtZXNzYWdlTGFiZWwsXG4gICAgICBtZXNzYWdlUGxhY2Vob2xkZXIsXG4gICAgICBuYW1lTGFiZWwsXG4gICAgICBuYW1lUGxhY2Vob2xkZXIsXG4gICAgICBzdWNjZXNzTWVzc2FnZVRleHQsXG4gICAgICBpc1JlcXVpcmVkTGFiZWwsXG4gICAgICBhZGRTY3JlZW5zaG90QnV0dG9uTGFiZWwsXG4gICAgICByZW1vdmVTY3JlZW5zaG90QnV0dG9uTGFiZWwsXG5cbiAgICAgIG9uRm9ybUNsb3NlLFxuICAgICAgb25Gb3JtT3BlbixcbiAgICAgIG9uU3VibWl0RXJyb3IsXG4gICAgICBvblN1Ym1pdFN1Y2Nlc3MsXG4gICAgICBvbkZvcm1TdWJtaXR0ZWQsXG4gICAgfTtcblxuICAgIGxldCBfc2hhZG93ID0gbnVsbDtcbiAgICBsZXQgX3N1YnNjcmlwdGlvbnMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgc2hhZG93IHJvb3Qgd2hlcmUgd2Ugd2lsbCBhcHBlbmQgY3NzXG4gICAgICovXG4gICAgY29uc3QgX2NyZWF0ZVNoYWRvdyA9IChvcHRpb25zKSA9PiB7XG4gICAgICBpZiAoIV9zaGFkb3cpIHtcbiAgICAgICAgY29uc3QgaG9zdCA9IERPQ1VNRU5ULmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBob3N0LmlkID0gU3RyaW5nKG9wdGlvbnMuaWQpO1xuICAgICAgICBET0NVTUVOVC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuXG4gICAgICAgIF9zaGFkb3cgPSBob3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6ICdvcGVuJyB9KTtcbiAgICAgICAgX3NoYWRvdy5hcHBlbmRDaGlsZChjcmVhdGVNYWluU3R5bGVzKG9wdGlvbnMpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfc2hhZG93IDtcbiAgICB9O1xuXG4gICAgY29uc3QgX2xvYWRBbmRSZW5kZXJEaWFsb2cgPSBhc3luYyAoXG4gICAgICBvcHRpb25zLFxuICAgICkgPT4ge1xuICAgICAgY29uc3Qgc2NyZWVuc2hvdFJlcXVpcmVkID0gb3B0aW9ucy5lbmFibGVTY3JlZW5zaG90ICYmIGlzU2NyZWVuc2hvdFN1cHBvcnRlZCgpO1xuXG4gICAgICBsZXQgbW9kYWxJbnRlZ3JhdGlvbjtcbiAgICAgIGxldCBzY3JlZW5zaG90SW50ZWdyYXRpb247XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1vZGFsSW50ZWdyYXRpb25GbiA9IGdldE1vZGFsSW50ZWdyYXRpb25cbiAgICAgICAgICA/IGdldE1vZGFsSW50ZWdyYXRpb24oKVxuICAgICAgICAgIDogYXdhaXQgbGF6eUxvYWRJbnRlZ3JhdGlvbignZmVlZGJhY2tNb2RhbEludGVncmF0aW9uJywgc2NyaXB0Tm9uY2UpO1xuICAgICAgICBtb2RhbEludGVncmF0aW9uID0gbW9kYWxJbnRlZ3JhdGlvbkZuKCkgO1xuICAgICAgICBhZGRJbnRlZ3JhdGlvbihtb2RhbEludGVncmF0aW9uKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBERUJVR19CVUlMRCAmJlxuICAgICAgICAgIGRlYnVnLmVycm9yKFxuICAgICAgICAgICAgJ1tGZWVkYmFja10gRXJyb3Igd2hlbiB0cnlpbmcgdG8gbG9hZCBmZWVkYmFjayBpbnRlZ3JhdGlvbnMuIFRyeSB1c2luZyBgZmVlZGJhY2tTeW5jSW50ZWdyYXRpb25gIGluIHlvdXIgYFNlbnRyeS5pbml0YC4nLFxuICAgICAgICAgICk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignW0ZlZWRiYWNrXSBNaXNzaW5nIGZlZWRiYWNrIG1vZGFsIGludGVncmF0aW9uIScpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzY3JlZW5zaG90SW50ZWdyYXRpb25GbiA9IHNjcmVlbnNob3RSZXF1aXJlZFxuICAgICAgICAgID8gZ2V0U2NyZWVuc2hvdEludGVncmF0aW9uXG4gICAgICAgICAgICA/IGdldFNjcmVlbnNob3RJbnRlZ3JhdGlvbigpXG4gICAgICAgICAgICA6IGF3YWl0IGxhenlMb2FkSW50ZWdyYXRpb24oJ2ZlZWRiYWNrU2NyZWVuc2hvdEludGVncmF0aW9uJywgc2NyaXB0Tm9uY2UpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKHNjcmVlbnNob3RJbnRlZ3JhdGlvbkZuKSB7XG4gICAgICAgICAgc2NyZWVuc2hvdEludGVncmF0aW9uID0gc2NyZWVuc2hvdEludGVncmF0aW9uRm4oKSA7XG4gICAgICAgICAgYWRkSW50ZWdyYXRpb24oc2NyZWVuc2hvdEludGVncmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIERFQlVHX0JVSUxEICYmXG4gICAgICAgICAgZGVidWcuZXJyb3IoJ1tGZWVkYmFja10gTWlzc2luZyBmZWVkYmFjayBzY3JlZW5zaG90IGludGVncmF0aW9uLiBQcm9jZWVkaW5nIHdpdGhvdXQgc2NyZWVuc2hvdHMuJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpYWxvZyA9IG1vZGFsSW50ZWdyYXRpb24uY3JlYXRlRGlhbG9nKHtcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgb25Gb3JtQ2xvc2U6ICgpID0+IHtcbiAgICAgICAgICAgIGRpYWxvZz8uY2xvc2UoKTtcbiAgICAgICAgICAgIG9wdGlvbnMub25Gb3JtQ2xvc2U/LigpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Gb3JtU3VibWl0dGVkOiAoKSA9PiB7XG4gICAgICAgICAgICBkaWFsb2c/LmNsb3NlKCk7XG4gICAgICAgICAgICBvcHRpb25zLm9uRm9ybVN1Ym1pdHRlZD8uKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2NyZWVuc2hvdEludGVncmF0aW9uLFxuICAgICAgICBzZW5kRmVlZGJhY2ssXG4gICAgICAgIHNoYWRvdzogX2NyZWF0ZVNoYWRvdyhvcHRpb25zKSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGlhbG9nO1xuICAgIH07XG5cbiAgICBjb25zdCBfYXR0YWNoVG8gPSAoZWwsIG9wdGlvbk92ZXJyaWRlcyA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBtZXJnZWRPcHRpb25zID0gbWVyZ2VPcHRpb25zKF9vcHRpb25zLCBvcHRpb25PdmVycmlkZXMpO1xuXG4gICAgICBjb25zdCB0YXJnZXRFbCA9XG4gICAgICAgIHR5cGVvZiBlbCA9PT0gJ3N0cmluZycgPyBET0NVTUVOVC5xdWVyeVNlbGVjdG9yKGVsKSA6IHR5cGVvZiBlbC5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nID8gZWwgOiBudWxsO1xuXG4gICAgICBpZiAoIXRhcmdldEVsKSB7XG4gICAgICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLmVycm9yKCdbRmVlZGJhY2tdIFVuYWJsZSB0byBhdHRhY2ggdG8gdGFyZ2V0IGVsZW1lbnQnKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gYXR0YWNoIHRvIHRhcmdldCBlbGVtZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGxldCBkaWFsb2cgPSBudWxsO1xuICAgICAgY29uc3QgaGFuZGxlQ2xpY2sgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmICghZGlhbG9nKSB7XG4gICAgICAgICAgZGlhbG9nID0gYXdhaXQgX2xvYWRBbmRSZW5kZXJEaWFsb2coe1xuICAgICAgICAgICAgLi4ubWVyZ2VkT3B0aW9ucyxcbiAgICAgICAgICAgIG9uRm9ybVN1Ym1pdHRlZDogKCkgPT4ge1xuICAgICAgICAgICAgICBkaWFsb2c/LnJlbW92ZUZyb21Eb20oKTtcbiAgICAgICAgICAgICAgbWVyZ2VkT3B0aW9ucy5vbkZvcm1TdWJtaXR0ZWQ/LigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkaWFsb2cuYXBwZW5kVG9Eb20oKTtcbiAgICAgICAgZGlhbG9nLm9wZW4oKTtcbiAgICAgIH07XG4gICAgICB0YXJnZXRFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrKTtcbiAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgICAgICBfc3Vic2NyaXB0aW9ucyA9IF9zdWJzY3JpcHRpb25zLmZpbHRlcihzdWIgPT4gc3ViICE9PSB1bnN1YnNjcmliZSk7XG4gICAgICAgIGRpYWxvZz8ucmVtb3ZlRnJvbURvbSgpO1xuICAgICAgICBkaWFsb2cgPSBudWxsO1xuICAgICAgICB0YXJnZXRFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrKTtcbiAgICAgIH07XG4gICAgICBfc3Vic2NyaXB0aW9ucy5wdXNoKHVuc3Vic2NyaWJlKTtcbiAgICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgICB9O1xuXG4gICAgY29uc3QgX2NyZWF0ZUFjdG9yID0gKG9wdGlvbk92ZXJyaWRlcyA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBtZXJnZWRPcHRpb25zID0gbWVyZ2VPcHRpb25zKF9vcHRpb25zLCBvcHRpb25PdmVycmlkZXMpO1xuICAgICAgY29uc3Qgc2hhZG93ID0gX2NyZWF0ZVNoYWRvdyhtZXJnZWRPcHRpb25zKTtcbiAgICAgIGNvbnN0IGFjdG9yID0gQWN0b3Ioe1xuICAgICAgICB0cmlnZ2VyTGFiZWw6IG1lcmdlZE9wdGlvbnMudHJpZ2dlckxhYmVsLFxuICAgICAgICB0cmlnZ2VyQXJpYUxhYmVsOiBtZXJnZWRPcHRpb25zLnRyaWdnZXJBcmlhTGFiZWwsXG4gICAgICAgIHNoYWRvdyxcbiAgICAgICAgc3R5bGVOb25jZSxcbiAgICAgIH0pO1xuICAgICAgX2F0dGFjaFRvKGFjdG9yLmVsLCB7XG4gICAgICAgIC4uLm1lcmdlZE9wdGlvbnMsXG4gICAgICAgIG9uRm9ybU9wZW4oKSB7XG4gICAgICAgICAgYWN0b3IuaGlkZSgpO1xuICAgICAgICB9LFxuICAgICAgICBvbkZvcm1DbG9zZSgpIHtcbiAgICAgICAgICBhY3Rvci5zaG93KCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRm9ybVN1Ym1pdHRlZCgpIHtcbiAgICAgICAgICBhY3Rvci5zaG93KCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhY3RvcjtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdGZWVkYmFjaycsXG4gICAgICBzZXR1cE9uY2UoKSB7XG4gICAgICAgIGlmICghaXNCcm93c2VyKCkgfHwgIV9vcHRpb25zLmF1dG9JbmplY3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoRE9DVU1FTlQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgRE9DVU1FTlQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IF9jcmVhdGVBY3RvcigpLmFwcGVuZFRvRG9tKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF9jcmVhdGVBY3RvcigpLmFwcGVuZFRvRG9tKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogQWRkcyBjbGljayBsaXN0ZW5lciB0byB0aGUgZWxlbWVudCB0byBvcGVuIGEgZmVlZGJhY2sgZGlhbG9nXG4gICAgICAgKlxuICAgICAgICogVGhlIHJldHVybmVkIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHJlbW92ZSB0aGUgY2xpY2sgbGlzdGVuZXJcbiAgICAgICAqL1xuICAgICAgYXR0YWNoVG86IF9hdHRhY2hUbyxcblxuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGEgbmV3IHdpZGdldCB3aGljaCBpcyBjb21wb3NlZCBvZiBhIEJ1dHRvbiB3aGljaCB0cmlnZ2VycyBhIERpYWxvZy5cbiAgICAgICAqIEFjY2VwdHMgcGFydGlhbCBvcHRpb25zIHRvIG92ZXJyaWRlIGFueSBvcHRpb25zIHBhc3NlZCB0byBjb25zdHJ1Y3Rvci5cbiAgICAgICAqL1xuICAgICAgY3JlYXRlV2lkZ2V0KG9wdGlvbk92ZXJyaWRlcyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IGFjdG9yID0gX2NyZWF0ZUFjdG9yKG1lcmdlT3B0aW9ucyhfb3B0aW9ucywgb3B0aW9uT3ZlcnJpZGVzKSk7XG4gICAgICAgIGFjdG9yLmFwcGVuZFRvRG9tKCk7XG4gICAgICAgIHJldHVybiBhY3RvcjtcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogQ3JlYXRlcyBhIG5ldyBGb3JtIHdoaWNoIHlvdSBjYW5cbiAgICAgICAqIEFjY2VwdHMgcGFydGlhbCBvcHRpb25zIHRvIG92ZXJyaWRlIGFueSBvcHRpb25zIHBhc3NlZCB0byBjb25zdHJ1Y3Rvci5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgY3JlYXRlRm9ybShcbiAgICAgICAgb3B0aW9uT3ZlcnJpZGVzID0ge30sXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIF9sb2FkQW5kUmVuZGVyRGlhbG9nKG1lcmdlT3B0aW9ucyhfb3B0aW9ucywgb3B0aW9uT3ZlcnJpZGVzKSk7XG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIFJlbW92ZXMgdGhlIEZlZWRiYWNrIGludGVncmF0aW9uIChpbmNsdWRpbmcgaG9zdCwgc2hhZG93IERPTSwgYW5kIGFsbCB3aWRnZXRzKVxuICAgICAgICovXG4gICAgICByZW1vdmUoKSB7XG4gICAgICAgIGlmIChfc2hhZG93KSB7XG4gICAgICAgICAgX3NoYWRvdy5wYXJlbnRFbGVtZW50Py5yZW1vdmUoKTtcbiAgICAgICAgICBfc2hhZG93ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZW1vdmUgYW55IGxpbmdlcmluZyBzdWJzY3JpcHRpb25zXG4gICAgICAgIF9zdWJzY3JpcHRpb25zLmZvckVhY2goc3ViID0+IHN1YigpKTtcbiAgICAgICAgX3N1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSkgO1xuXG4gIHJldHVybiBmZWVkYmFja0ludGVncmF0aW9uO1xufTtcblxuLyoqXG4gKiBUaGlzIGlzIGEgc21hbGwgdXRpbGl0eSB0byBnZXQgYSB0eXBlLXNhZmUgaW5zdGFuY2Ugb2YgdGhlIEZlZWRiYWNrIGludGVncmF0aW9uLlxuICovXG5mdW5jdGlvbiBnZXRGZWVkYmFjaygpIHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7XG4gIHJldHVybiBjbGllbnQ/LmdldEludGVncmF0aW9uQnlOYW1lKCdGZWVkYmFjaycpO1xufVxuXG52YXIgbixsJDEsdSQxLGkkMSxvJDEsciQxLGYkMSxjJDE9e30scyQxPVtdLGEkMT0vYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofGdyaWR8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZHxpdGVyYS9pLGgkMT1BcnJheS5pc0FycmF5O2Z1bmN0aW9uIHYkMShuLGwpe2Zvcih2YXIgdSBpbiBsKW5bdV09bFt1XTtyZXR1cm4gbn1mdW5jdGlvbiBwJDEobil7dmFyIGw9bi5wYXJlbnROb2RlO2wmJmwucmVtb3ZlQ2hpbGQobik7fWZ1bmN0aW9uIHkkMShsLHUsdCl7dmFyIGksbyxyLGY9e307Zm9yKHIgaW4gdSlcImtleVwiPT1yP2k9dVtyXTpcInJlZlwiPT1yP289dVtyXTpmW3JdPXVbcl07aWYoYXJndW1lbnRzLmxlbmd0aD4yJiYoZi5jaGlsZHJlbj1hcmd1bWVudHMubGVuZ3RoPjM/bi5jYWxsKGFyZ3VtZW50cywyKTp0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBsJiZudWxsIT1sLmRlZmF1bHRQcm9wcylmb3IociBpbiBsLmRlZmF1bHRQcm9wcykgdm9pZCAwPT09ZltyXSYmKGZbcl09bC5kZWZhdWx0UHJvcHNbcl0pO3JldHVybiBkJDEobCxmLGksbyxudWxsKX1mdW5jdGlvbiBkJDEobix0LGksbyxyKXt2YXIgZj17dHlwZTpuLHByb3BzOnQsa2V5OmkscmVmOm8sX19rOm51bGwsX186bnVsbCxfX2I6MCxfX2U6bnVsbCxfX2Q6dm9pZCAwLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6bnVsbD09cj8rK3UkMTpyLF9faTotMSxfX3U6MH07cmV0dXJuIG51bGw9PXImJm51bGwhPWwkMS52bm9kZSYmbCQxLnZub2RlKGYpLGZ9ZnVuY3Rpb24gZyQxKG4pe3JldHVybiBuLmNoaWxkcmVufWZ1bmN0aW9uIGIkMShuLGwpe3RoaXMucHJvcHM9bix0aGlzLmNvbnRleHQ9bDt9ZnVuY3Rpb24gbSQxKG4sbCl7aWYobnVsbD09bClyZXR1cm4gbi5fXz9tJDEobi5fXyxuLl9faSsxKTpudWxsO2Zvcih2YXIgdTtsPG4uX19rLmxlbmd0aDtsKyspaWYobnVsbCE9KHU9bi5fX2tbbF0pJiZudWxsIT11Ll9fZSlyZXR1cm4gdS5fX2U7cmV0dXJuIFwiZnVuY3Rpb25cIj09dHlwZW9mIG4udHlwZT9tJDEobik6bnVsbH1mdW5jdGlvbiB3JDEobix1LHQpe3ZhciBpLG89bi5fX3Yscj1vLl9fZSxmPW4uX19QO2lmKGYpcmV0dXJuIChpPXYkMSh7fSxvKSkuX192PW8uX192KzEsbCQxLnZub2RlJiZsJDEudm5vZGUoaSksTShmLGksbyxuLl9fbix2b2lkIDAhPT1mLm93bmVyU1ZHRWxlbWVudCwzMiZvLl9fdT9bcl06bnVsbCx1LG51bGw9PXI/bSQxKG8pOnIsISEoMzImby5fX3UpLHQpLGkuX18uX19rW2kuX19pXT1pLGkuX19kPXZvaWQgMCxpLl9fZSE9ciYmayQxKGkpLGl9ZnVuY3Rpb24gayQxKG4pe3ZhciBsLHU7aWYobnVsbCE9KG49bi5fXykmJm51bGwhPW4uX19jKXtmb3Iobi5fX2U9bi5fX2MuYmFzZT1udWxsLGw9MDtsPG4uX19rLmxlbmd0aDtsKyspaWYobnVsbCE9KHU9bi5fX2tbbF0pJiZudWxsIT11Ll9fZSl7bi5fX2U9bi5fX2MuYmFzZT11Ll9fZTticmVha31yZXR1cm4gayQxKG4pfX1mdW5jdGlvbiB4JDEobil7KCFuLl9fZCYmKG4uX19kPXRydWUpJiZpJDEucHVzaChuKSYmIUMkMS5fX3IrK3x8byQxIT09bCQxLmRlYm91bmNlUmVuZGVyaW5nKSYmKChvJDE9bCQxLmRlYm91bmNlUmVuZGVyaW5nKXx8ciQxKShDJDEpO31mdW5jdGlvbiBDJDEoKXt2YXIgbix1LHQsbz1bXSxyPVtdO2ZvcihpJDEuc29ydChmJDEpO249aSQxLnNoaWZ0KCk7KW4uX19kJiYodD1pJDEubGVuZ3RoLHU9dyQxKG4sbyxyKXx8dSwwPT09dHx8aSQxLmxlbmd0aD50PyhqJDEobyx1LHIpLHIubGVuZ3RoPW8ubGVuZ3RoPTAsdT12b2lkIDAsaSQxLnNvcnQoZiQxKSk6dSYmbCQxLl9fYyYmbCQxLl9fYyh1LHMkMSkpO3UmJmokMShvLHUsciksQyQxLl9fcj0wO31mdW5jdGlvbiBQJDEobixsLHUsdCxpLG8scixmLGUsYSxoKXt2YXIgdixwLHksZCxfLGc9dCYmdC5fX2t8fHMkMSxiPWwubGVuZ3RoO2Zvcih1Ll9fZD1lLFModSxsLGcpLGU9dS5fX2Qsdj0wO3Y8Yjt2KyspbnVsbCE9KHk9dS5fX2tbdl0pJiZcImJvb2xlYW5cIiE9dHlwZW9mIHkmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHkmJihwPS0xPT09eS5fX2k/YyQxOmdbeS5fX2ldfHxjJDEseS5fX2k9dixNKG4seSxwLGksbyxyLGYsZSxhLGgpLGQ9eS5fX2UseS5yZWYmJnAucmVmIT15LnJlZiYmKHAucmVmJiZOKHAucmVmLG51bGwseSksaC5wdXNoKHkucmVmLHkuX19jfHxkLHkpKSxudWxsPT1fJiZudWxsIT1kJiYoXz1kKSw2NTUzNiZ5Ll9fdXx8cC5fX2s9PT15Ll9faz9lPSQoeSxlLG4pOlwiZnVuY3Rpb25cIj09dHlwZW9mIHkudHlwZSYmdm9pZCAwIT09eS5fX2Q/ZT15Ll9fZDpkJiYoZT1kLm5leHRTaWJsaW5nKSx5Ll9fZD12b2lkIDAseS5fX3UmPS0xOTY2MDkpO3UuX19kPWUsdS5fX2U9Xzt9ZnVuY3Rpb24gUyhuLGwsdSl7dmFyIHQsaSxvLHIsZixlPWwubGVuZ3RoLGM9dS5sZW5ndGgscz1jLGE9MDtmb3Iobi5fX2s9W10sdD0wO3Q8ZTt0KyspbnVsbCE9KGk9bi5fX2tbdF09bnVsbD09KGk9bFt0XSl8fFwiYm9vbGVhblwiPT10eXBlb2YgaXx8XCJmdW5jdGlvblwiPT10eXBlb2YgaT9udWxsOlwic3RyaW5nXCI9PXR5cGVvZiBpfHxcIm51bWJlclwiPT10eXBlb2YgaXx8XCJiaWdpbnRcIj09dHlwZW9mIGl8fGkuY29uc3RydWN0b3I9PVN0cmluZz9kJDEobnVsbCxpLG51bGwsbnVsbCxpKTpoJDEoaSk/ZCQxKGckMSx7Y2hpbGRyZW46aX0sbnVsbCxudWxsLG51bGwpOnZvaWQgMD09PWkuY29uc3RydWN0b3ImJmkuX19iPjA/ZCQxKGkudHlwZSxpLnByb3BzLGkua2V5LGkucmVmP2kucmVmOm51bGwsaS5fX3YpOmkpPyhpLl9fPW4saS5fX2I9bi5fX2IrMSxmPUkoaSx1LHI9dCthLHMpLGkuX19pPWYsbz1udWxsLC0xIT09ZiYmKHMtLSwobz11W2ZdKSYmKG8uX191fD0xMzEwNzIpKSxudWxsPT1vfHxudWxsPT09by5fX3Y/KC0xPT1mJiZhLS0sXCJmdW5jdGlvblwiIT10eXBlb2YgaS50eXBlJiYoaS5fX3V8PTY1NTM2KSk6ZiE9PXImJihmPT09cisxP2ErKzpmPnI/cz5lLXI/YSs9Zi1yOmEtLTphPWY8ciYmZj09ci0xP2YtcjowLGYhPT10K2EmJihpLl9fdXw9NjU1MzYpKSk6KG89dVt0XSkmJm51bGw9PW8ua2V5JiZvLl9fZSYmKG8uX19lPT1uLl9fZCYmKG4uX19kPW0kMShvKSksTyhvLG8sZmFsc2UpLHVbdF09bnVsbCxzLS0pO2lmKHMpZm9yKHQ9MDt0PGM7dCsrKW51bGwhPShvPXVbdF0pJiYwPT0oMTMxMDcyJm8uX191KSYmKG8uX19lPT1uLl9fZCYmKG4uX19kPW0kMShvKSksTyhvLG8pKTt9ZnVuY3Rpb24gJChuLGwsdSl7dmFyIHQsaTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnR5cGUpe2Zvcih0PW4uX19rLGk9MDt0JiZpPHQubGVuZ3RoO2krKyl0W2ldJiYodFtpXS5fXz1uLGw9JCh0W2ldLGwsdSkpO3JldHVybiBsfW4uX19lIT1sJiYodS5pbnNlcnRCZWZvcmUobi5fX2UsbHx8bnVsbCksbD1uLl9fZSk7ZG97bD1sJiZsLm5leHRTaWJsaW5nO313aGlsZShudWxsIT1sJiY4PT09bC5ub2RlVHlwZSk7cmV0dXJuIGx9ZnVuY3Rpb24gSShuLGwsdSx0KXt2YXIgaT1uLmtleSxvPW4udHlwZSxyPXUtMSxmPXUrMSxlPWxbdV07aWYobnVsbD09PWV8fGUmJmk9PWUua2V5JiZvPT09ZS50eXBlKXJldHVybiB1O2lmKHQ+KG51bGwhPWUmJjA9PSgxMzEwNzImZS5fX3UpPzE6MCkpZm9yKDtyPj0wfHxmPGwubGVuZ3RoOyl7aWYocj49MCl7aWYoKGU9bFtyXSkmJjA9PSgxMzEwNzImZS5fX3UpJiZpPT1lLmtleSYmbz09PWUudHlwZSlyZXR1cm4gcjtyLS07fWlmKGY8bC5sZW5ndGgpe2lmKChlPWxbZl0pJiYwPT0oMTMxMDcyJmUuX191KSYmaT09ZS5rZXkmJm89PT1lLnR5cGUpcmV0dXJuIGY7ZisrO319cmV0dXJuICAtMX1mdW5jdGlvbiBUJDEobixsLHUpe1wiLVwiPT09bFswXT9uLnNldFByb3BlcnR5KGwsbnVsbD09dT9cIlwiOnUpOm5bbF09bnVsbD09dT9cIlwiOlwibnVtYmVyXCIhPXR5cGVvZiB1fHxhJDEudGVzdChsKT91OnUrXCJweFwiO31mdW5jdGlvbiBBJDEobixsLHUsdCxpKXt2YXIgbztuOmlmKFwic3R5bGVcIj09PWwpaWYoXCJzdHJpbmdcIj09dHlwZW9mIHUpbi5zdHlsZS5jc3NUZXh0PXU7ZWxzZSB7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJihuLnN0eWxlLmNzc1RleHQ9dD1cIlwiKSx0KWZvcihsIGluIHQpdSYmbCBpbiB1fHxUJDEobi5zdHlsZSxsLFwiXCIpO2lmKHUpZm9yKGwgaW4gdSl0JiZ1W2xdPT09dFtsXXx8VCQxKG4uc3R5bGUsbCx1W2xdKTt9ZWxzZSBpZihcIm9cIj09PWxbMF0mJlwiblwiPT09bFsxXSlvPWwhPT0obD1sLnJlcGxhY2UoLyhQb2ludGVyQ2FwdHVyZSkkfENhcHR1cmUkL2ksXCIkMVwiKSksbD1sLnRvTG93ZXJDYXNlKClpbiBuP2wudG9Mb3dlckNhc2UoKS5zbGljZSgyKTpsLnNsaWNlKDIpLG4ubHx8KG4ubD17fSksbi5sW2wrb109dSx1P3Q/dS51PXQudToodS51PURhdGUubm93KCksbi5hZGRFdmVudExpc3RlbmVyKGwsbz9MOkQkMSxvKSk6bi5yZW1vdmVFdmVudExpc3RlbmVyKGwsbz9MOkQkMSxvKTtlbHNlIHtpZihpKWw9bC5yZXBsYWNlKC94bGluayhIfDpoKS8sXCJoXCIpLnJlcGxhY2UoL3NOYW1lJC8sXCJzXCIpO2Vsc2UgaWYoXCJ3aWR0aFwiIT09bCYmXCJoZWlnaHRcIiE9PWwmJlwiaHJlZlwiIT09bCYmXCJsaXN0XCIhPT1sJiZcImZvcm1cIiE9PWwmJlwidGFiSW5kZXhcIiE9PWwmJlwiZG93bmxvYWRcIiE9PWwmJlwicm93U3BhblwiIT09bCYmXCJjb2xTcGFuXCIhPT1sJiZcInJvbGVcIiE9PWwmJmwgaW4gbil0cnl7bltsXT1udWxsPT11P1wiXCI6dTticmVhayBufWNhdGNoKG4pe31cImZ1bmN0aW9uXCI9PXR5cGVvZiB1fHwobnVsbD09dXx8ZmFsc2U9PT11JiZcIi1cIiE9PWxbNF0/bi5yZW1vdmVBdHRyaWJ1dGUobCk6bi5zZXRBdHRyaWJ1dGUobCx1KSk7fX1mdW5jdGlvbiBEJDEobil7aWYodGhpcy5sKXt2YXIgdT10aGlzLmxbbi50eXBlK2ZhbHNlXTtpZihuLnQpe2lmKG4udDw9dS51KXJldHVybn1lbHNlIG4udD1EYXRlLm5vdygpO3JldHVybiB1KGwkMS5ldmVudD9sJDEuZXZlbnQobik6bil9fWZ1bmN0aW9uIEwobil7aWYodGhpcy5sKXJldHVybiB0aGlzLmxbbi50eXBlK3RydWVdKGwkMS5ldmVudD9sJDEuZXZlbnQobik6bil9ZnVuY3Rpb24gTShuLHUsdCxpLG8scixmLGUsYyxzKXt2YXIgYSxwLHksZCxfLG0sdyxrLHgsQyxTLCQsSCxJLFQsQT11LnR5cGU7aWYodm9pZCAwIT09dS5jb25zdHJ1Y3RvcilyZXR1cm4gbnVsbDsxMjgmdC5fX3UmJihjPSEhKDMyJnQuX191KSxyPVtlPXUuX19lPXQuX19lXSksKGE9bCQxLl9fYikmJmEodSk7bjppZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBBKXRyeXtpZihrPXUucHJvcHMseD0oYT1BLmNvbnRleHRUeXBlKSYmaVthLl9fY10sQz1hP3g/eC5wcm9wcy52YWx1ZTphLl9fOmksdC5fX2M/dz0ocD11Ll9fYz10Ll9fYykuX189cC5fX0U6KFwicHJvdG90eXBlXCJpbiBBJiZBLnByb3RvdHlwZS5yZW5kZXI/dS5fX2M9cD1uZXcgQShrLEMpOih1Ll9fYz1wPW5ldyBiJDEoayxDKSxwLmNvbnN0cnVjdG9yPUEscC5yZW5kZXI9cSQxKSx4JiZ4LnN1YihwKSxwLnByb3BzPWsscC5zdGF0ZXx8KHAuc3RhdGU9e30pLHAuY29udGV4dD1DLHAuX19uPWkseT1wLl9fZD0hMCxwLl9faD1bXSxwLl9zYj1bXSksbnVsbD09cC5fX3MmJihwLl9fcz1wLnN0YXRlKSxudWxsIT1BLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmKHAuX19zPT1wLnN0YXRlJiYocC5fX3M9diQxKHt9LHAuX19zKSksdiQxKHAuX19zLEEuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKGsscC5fX3MpKSksZD1wLnByb3BzLF89cC5zdGF0ZSxwLl9fdj11LHkpbnVsbD09QS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMmJm51bGwhPXAuY29tcG9uZW50V2lsbE1vdW50JiZwLmNvbXBvbmVudFdpbGxNb3VudCgpLG51bGwhPXAuY29tcG9uZW50RGlkTW91bnQmJnAuX19oLnB1c2gocC5jb21wb25lbnREaWRNb3VudCk7ZWxzZSB7aWYobnVsbD09QS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMmJmshPT1kJiZudWxsIT1wLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJnAuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhrLEMpLCFwLl9fZSYmKG51bGwhPXAuc2hvdWxkQ29tcG9uZW50VXBkYXRlJiYhMT09PXAuc2hvdWxkQ29tcG9uZW50VXBkYXRlKGsscC5fX3MsQyl8fHUuX192PT09dC5fX3YpKXtmb3IodS5fX3YhPT10Ll9fdiYmKHAucHJvcHM9ayxwLnN0YXRlPXAuX19zLHAuX19kPSExKSx1Ll9fZT10Ll9fZSx1Ll9faz10Ll9fayx1Ll9fay5mb3JFYWNoKGZ1bmN0aW9uKG4pe24mJihuLl9fPXUpO30pLFM9MDtTPHAuX3NiLmxlbmd0aDtTKyspcC5fX2gucHVzaChwLl9zYltTXSk7cC5fc2I9W10scC5fX2gubGVuZ3RoJiZmLnB1c2gocCk7YnJlYWsgbn1udWxsIT1wLmNvbXBvbmVudFdpbGxVcGRhdGUmJnAuY29tcG9uZW50V2lsbFVwZGF0ZShrLHAuX19zLEMpLG51bGwhPXAuY29tcG9uZW50RGlkVXBkYXRlJiZwLl9faC5wdXNoKGZ1bmN0aW9uKCl7cC5jb21wb25lbnREaWRVcGRhdGUoZCxfLG0pO30pO31pZihwLmNvbnRleHQ9QyxwLnByb3BzPWsscC5fX1A9bixwLl9fZT0hMSwkPWwkMS5fX3IsSD0wLFwicHJvdG90eXBlXCJpbiBBJiZBLnByb3RvdHlwZS5yZW5kZXIpe2ZvcihwLnN0YXRlPXAuX19zLHAuX19kPSExLCQmJiQodSksYT1wLnJlbmRlcihwLnByb3BzLHAuc3RhdGUscC5jb250ZXh0KSxJPTA7STxwLl9zYi5sZW5ndGg7SSsrKXAuX19oLnB1c2gocC5fc2JbSV0pO3AuX3NiPVtdO31lbHNlIGRve3AuX19kPSExLCQmJiQodSksYT1wLnJlbmRlcihwLnByb3BzLHAuc3RhdGUscC5jb250ZXh0KSxwLnN0YXRlPXAuX19zO313aGlsZShwLl9fZCYmKytIPDI1KTtwLnN0YXRlPXAuX19zLG51bGwhPXAuZ2V0Q2hpbGRDb250ZXh0JiYoaT12JDEodiQxKHt9LGkpLHAuZ2V0Q2hpbGRDb250ZXh0KCkpKSx5fHxudWxsPT1wLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlfHwobT1wLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKGQsXykpLFAkMShuLGgkMShUPW51bGwhPWEmJmEudHlwZT09PWckMSYmbnVsbD09YS5rZXk/YS5wcm9wcy5jaGlsZHJlbjphKT9UOltUXSx1LHQsaSxvLHIsZixlLGMscykscC5iYXNlPXUuX19lLHUuX191Jj0tMTYxLHAuX19oLmxlbmd0aCYmZi5wdXNoKHApLHcmJihwLl9fRT1wLl9fPW51bGwpO31jYXRjaChuKXt1Ll9fdj1udWxsLGN8fG51bGwhPXI/KHUuX19lPWUsdS5fX3V8PWM/MTYwOjMyLHJbci5pbmRleE9mKGUpXT1udWxsKToodS5fX2U9dC5fX2UsdS5fX2s9dC5fX2spLGwkMS5fX2Uobix1LHQpO31lbHNlIG51bGw9PXImJnUuX192PT09dC5fX3Y/KHUuX19rPXQuX19rLHUuX19lPXQuX19lKTp1Ll9fZT16JDEodC5fX2UsdSx0LGksbyxyLGYsYyxzKTsoYT1sJDEuZGlmZmVkKSYmYSh1KTt9ZnVuY3Rpb24gaiQxKG4sdSx0KXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylOKHRbaV0sdFsrK2ldLHRbKytpXSk7bCQxLl9fYyYmbCQxLl9fYyh1LG4pLG4uc29tZShmdW5jdGlvbih1KXt0cnl7bj11Ll9faCx1Ll9faD1bXSxuLnNvbWUoZnVuY3Rpb24obil7bi5jYWxsKHUpO30pO31jYXRjaChuKXtsJDEuX19lKG4sdS5fX3YpO319KTt9ZnVuY3Rpb24geiQxKGwsdSx0LGksbyxyLGYsZSxzKXt2YXIgYSx2LHksZCxfLGcsYix3PXQucHJvcHMsaz11LnByb3BzLHg9dS50eXBlO2lmKFwic3ZnXCI9PT14JiYobz10cnVlKSxudWxsIT1yKWZvcihhPTA7YTxyLmxlbmd0aDthKyspaWYoKF89clthXSkmJlwic2V0QXR0cmlidXRlXCJpbiBfPT0hIXgmJih4P18ubG9jYWxOYW1lPT09eDozPT09Xy5ub2RlVHlwZSkpe2w9XyxyW2FdPW51bGw7YnJlYWt9aWYobnVsbD09bCl7aWYobnVsbD09PXgpcmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGspO2w9bz9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHgpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoeCxrLmlzJiZrKSxyPW51bGwsZT1mYWxzZTt9aWYobnVsbD09PXgpdz09PWt8fGUmJmwuZGF0YT09PWt8fChsLmRhdGE9ayk7ZWxzZSB7aWYocj1yJiZuLmNhbGwobC5jaGlsZE5vZGVzKSx3PXQucHJvcHN8fGMkMSwhZSYmbnVsbCE9cilmb3Iodz17fSxhPTA7YTxsLmF0dHJpYnV0ZXMubGVuZ3RoO2ErKyl3WyhfPWwuYXR0cmlidXRlc1thXSkubmFtZV09Xy52YWx1ZTtmb3IoYSBpbiB3KV89d1thXSxcImNoaWxkcmVuXCI9PWF8fChcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI9PWE/eT1fOlwia2V5XCI9PT1hfHxhIGluIGt8fEEkMShsLGEsbnVsbCxfLG8pKTtmb3IoYSBpbiBrKV89a1thXSxcImNoaWxkcmVuXCI9PWE/ZD1fOlwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIj09YT92PV86XCJ2YWx1ZVwiPT1hP2c9XzpcImNoZWNrZWRcIj09YT9iPV86XCJrZXlcIj09PWF8fGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIF98fHdbYV09PT1ffHxBJDEobCxhLF8sd1thXSxvKTtpZih2KWV8fHkmJih2Ll9faHRtbD09PXkuX19odG1sfHx2Ll9faHRtbD09PWwuaW5uZXJIVE1MKXx8KGwuaW5uZXJIVE1MPXYuX19odG1sKSx1Ll9faz1bXTtlbHNlIGlmKHkmJihsLmlubmVySFRNTD1cIlwiKSxQJDEobCxoJDEoZCk/ZDpbZF0sdSx0LGksbyYmXCJmb3JlaWduT2JqZWN0XCIhPT14LHIsZixyP3JbMF06dC5fX2smJm0kMSh0LDApLGUscyksbnVsbCE9cilmb3IoYT1yLmxlbmd0aDthLS07KW51bGwhPXJbYV0mJnAkMShyW2FdKTtlfHwoYT1cInZhbHVlXCIsdm9pZCAwIT09ZyYmKGchPT1sW2FdfHxcInByb2dyZXNzXCI9PT14JiYhZ3x8XCJvcHRpb25cIj09PXgmJmchPT13W2FdKSYmQSQxKGwsYSxnLHdbYV0sZmFsc2UpLGE9XCJjaGVja2VkXCIsdm9pZCAwIT09YiYmYiE9PWxbYV0mJkEkMShsLGEsYix3W2FdLGZhbHNlKSk7fXJldHVybiBsfWZ1bmN0aW9uIE4obix1LHQpe3RyeXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuP24odSk6bi5jdXJyZW50PXU7fWNhdGNoKG4pe2wkMS5fX2Uobix0KTt9fWZ1bmN0aW9uIE8obix1LHQpe3ZhciBpLG87aWYobCQxLnVubW91bnQmJmwkMS51bm1vdW50KG4pLChpPW4ucmVmKSYmKGkuY3VycmVudCYmaS5jdXJyZW50IT09bi5fX2V8fE4oaSxudWxsLHUpKSxudWxsIT0oaT1uLl9fYykpe2lmKGkuY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e2kuY29tcG9uZW50V2lsbFVubW91bnQoKTt9Y2F0Y2gobil7bCQxLl9fZShuLHUpO31pLmJhc2U9aS5fX1A9bnVsbCxuLl9fYz12b2lkIDA7fWlmKGk9bi5fX2spZm9yKG89MDtvPGkubGVuZ3RoO28rKylpW29dJiZPKGlbb10sdSx0fHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBuLnR5cGUpO3R8fG51bGw9PW4uX19lfHxwJDEobi5fX2UpLG4uX189bi5fX2U9bi5fX2Q9dm9pZCAwO31mdW5jdGlvbiBxJDEobixsLHUpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yKG4sdSl9ZnVuY3Rpb24gQiQxKHUsdCxpKXt2YXIgbyxyLGYsZTtsJDEuX18mJmwkMS5fXyh1LHQpLHI9KG89XCJmdW5jdGlvblwiPT1cInVuZGVmaW5lZFwiKT9udWxsOnQuX19rLGY9W10sZT1bXSxNKHQsdT0odCkuX19rPXkkMShnJDEsbnVsbCxbdV0pLHJ8fGMkMSxjJDEsdm9pZCAwIT09dC5vd25lclNWR0VsZW1lbnQscj9udWxsOnQuZmlyc3RDaGlsZD9uLmNhbGwodC5jaGlsZE5vZGVzKTpudWxsLGYscj9yLl9fZTp0LmZpcnN0Q2hpbGQsbyxlKSx1Ll9fZD12b2lkIDAsaiQxKGYsdSxlKTt9bj1zJDEuc2xpY2UsbCQxPXtfX2U6ZnVuY3Rpb24obixsLHUsdCl7Zm9yKHZhciBpLG8scjtsPWwuX187KWlmKChpPWwuX19jKSYmIWkuX18pdHJ5e2lmKChvPWkuY29uc3RydWN0b3IpJiZudWxsIT1vLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciYmKGkuc2V0U3RhdGUoby5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IobikpLHI9aS5fX2QpLG51bGwhPWkuY29tcG9uZW50RGlkQ2F0Y2gmJihpLmNvbXBvbmVudERpZENhdGNoKG4sdHx8e30pLHI9aS5fX2QpLHIpcmV0dXJuIGkuX19FPWl9Y2F0Y2gobCl7bj1sO310aHJvdyBufX0sdSQxPTAsYiQxLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihuLGwpe3ZhciB1O3U9bnVsbCE9dGhpcy5fX3MmJnRoaXMuX19zIT09dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz12JDEoe30sdGhpcy5zdGF0ZSksXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKG49bih2JDEoe30sdSksdGhpcy5wcm9wcykpLG4mJnYkMSh1LG4pLG51bGwhPW4mJnRoaXMuX192JiYobCYmdGhpcy5fc2IucHVzaChsKSx4JDEodGhpcykpO30sYiQxLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLl9fdiYmKHRoaXMuX19lPXRydWUsbiYmdGhpcy5fX2gucHVzaChuKSx4JDEodGhpcykpO30sYiQxLnByb3RvdHlwZS5yZW5kZXI9ZyQxLGkkMT1bXSxyJDE9XCJmdW5jdGlvblwiPT10eXBlb2YgUHJvbWlzZT9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsZiQxPWZ1bmN0aW9uKG4sbCl7cmV0dXJuIG4uX192Ll9fYi1sLl9fdi5fX2J9LEMkMS5fX3I9MDtcblxudmFyIHQscix1LGksbz0wLGY9W10sYz1bXSxlPWwkMSxhPWUuX19iLHY9ZS5fX3IsbD1lLmRpZmZlZCxtPWUuX19jLHM9ZS51bm1vdW50LGQ9ZS5fXztmdW5jdGlvbiBoKG4sdCl7ZS5fX2gmJmUuX19oKHIsbixvfHx0KSxvPTA7dmFyIHU9ci5fX0h8fChyLl9fSD17X186W10sX19oOltdfSk7cmV0dXJuIG4+PXUuX18ubGVuZ3RoJiZ1Ll9fLnB1c2goe19fVjpjfSksdS5fX1tuXX1mdW5jdGlvbiBwKG4pe3JldHVybiBvPTEseShELG4pfWZ1bmN0aW9uIHkobix1LGkpe3ZhciBvPWgodCsrLDIpO2lmKG8udD1uLCFvLl9fYyYmKG8uX189W2k/aSh1KTpEKHZvaWQgMCx1KSxmdW5jdGlvbihuKXt2YXIgdD1vLl9fTj9vLl9fTlswXTpvLl9fWzBdLHI9by50KHQsbik7dCE9PXImJihvLl9fTj1bcixvLl9fWzFdXSxvLl9fYy5zZXRTdGF0ZSh7fSkpO31dLG8uX19jPXIsIXIudSkpe3ZhciBmPWZ1bmN0aW9uKG4sdCxyKXtpZighby5fX2MuX19IKXJldHVybiAgdHJ1ZTt2YXIgdT1vLl9fYy5fX0guX18uZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiAhIW4uX19jfSk7aWYodS5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4gIW4uX19OfSkpcmV0dXJuICFjfHxjLmNhbGwodGhpcyxuLHQscik7dmFyIGk9ZmFsc2U7cmV0dXJuIHUuZm9yRWFjaChmdW5jdGlvbihuKXtpZihuLl9fTil7dmFyIHQ9bi5fX1swXTtuLl9fPW4uX19OLG4uX19OPXZvaWQgMCx0IT09bi5fX1swXSYmKGk9dHJ1ZSk7fX0pLCEoIWkmJm8uX19jLnByb3BzPT09bikmJighY3x8Yy5jYWxsKHRoaXMsbix0LHIpKX07ci51PXRydWU7dmFyIGM9ci5zaG91bGRDb21wb25lbnRVcGRhdGUsZT1yLmNvbXBvbmVudFdpbGxVcGRhdGU7ci5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKG4sdCxyKXtpZih0aGlzLl9fZSl7dmFyIHU9YztjPXZvaWQgMCxmKG4sdCxyKSxjPXU7fWUmJmUuY2FsbCh0aGlzLG4sdCxyKTt9LHIuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWY7fXJldHVybiBvLl9fTnx8by5fX31mdW5jdGlvbiBfKG4sdSl7dmFyIGk9aCh0KyssMyk7IWUuX19zJiZDKGkuX19ILHUpJiYoaS5fXz1uLGkuaT11LHIuX19ILl9faC5wdXNoKGkpKTt9ZnVuY3Rpb24gQShuLHUpe3ZhciBpPWgodCsrLDQpOyFlLl9fcyYmQyhpLl9fSCx1KSYmKGkuX189bixpLmk9dSxyLl9faC5wdXNoKGkpKTt9ZnVuY3Rpb24gRihuKXtyZXR1cm4gbz01LHEoZnVuY3Rpb24oKXtyZXR1cm4ge2N1cnJlbnQ6bn19LFtdKX1mdW5jdGlvbiBUKG4sdCxyKXtvPTYsQShmdW5jdGlvbigpe3JldHVybiBcImZ1bmN0aW9uXCI9PXR5cGVvZiBuPyhuKHQoKSksZnVuY3Rpb24oKXtyZXR1cm4gbihudWxsKX0pOm4/KG4uY3VycmVudD10KCksZnVuY3Rpb24oKXtyZXR1cm4gbi5jdXJyZW50PW51bGx9KTp2b2lkIDB9LG51bGw9PXI/cjpyLmNvbmNhdChuKSk7fWZ1bmN0aW9uIHEobixyKXt2YXIgdT1oKHQrKyw3KTtyZXR1cm4gQyh1Ll9fSCxyKT8odS5fX1Y9bigpLHUuaT1yLHUuX19oPW4sdS5fX1YpOnUuX199ZnVuY3Rpb24geChuLHQpe3JldHVybiBvPTgscShmdW5jdGlvbigpe3JldHVybiBufSx0KX1mdW5jdGlvbiBQKG4pe3ZhciB1PXIuY29udGV4dFtuLl9fY10saT1oKHQrKyw5KTtyZXR1cm4gaS5jPW4sdT8obnVsbD09aS5fXyYmKGkuX189dHJ1ZSx1LnN1YihyKSksdS5wcm9wcy52YWx1ZSk6bi5fX31mdW5jdGlvbiBWKG4sdCl7ZS51c2VEZWJ1Z1ZhbHVlJiZlLnVzZURlYnVnVmFsdWUodD90KG4pOm4pO31mdW5jdGlvbiBiKG4pe3ZhciB1PWgodCsrLDEwKSxpPXAoKTtyZXR1cm4gdS5fXz1uLHIuY29tcG9uZW50RGlkQ2F0Y2h8fChyLmNvbXBvbmVudERpZENhdGNoPWZ1bmN0aW9uKG4sdCl7dS5fXyYmdS5fXyhuLHQpLGlbMV0obik7fSksW2lbMF0sZnVuY3Rpb24oKXtpWzFdKHZvaWQgMCk7fV19ZnVuY3Rpb24gZygpe3ZhciBuPWgodCsrLDExKTtpZighbi5fXyl7Zm9yKHZhciB1PXIuX192O251bGwhPT11JiYhdS5fX20mJm51bGwhPT11Ll9fOyl1PXUuX187dmFyIGk9dS5fX218fCh1Ll9fbT1bMCwwXSk7bi5fXz1cIlBcIitpWzBdK1wiLVwiK2lbMV0rKzt9cmV0dXJuIG4uX199ZnVuY3Rpb24gaigpe2Zvcih2YXIgbjtuPWYuc2hpZnQoKTspaWYobi5fX1AmJm4uX19IKXRyeXtuLl9fSC5fX2guZm9yRWFjaCh6KSxuLl9fSC5fX2guZm9yRWFjaChCKSxuLl9fSC5fX2g9W107fWNhdGNoKHQpe24uX19ILl9faD1bXSxlLl9fZSh0LG4uX192KTt9fWUuX19iPWZ1bmN0aW9uKG4pe3I9bnVsbCxhJiZhKG4pO30sZS5fXz1mdW5jdGlvbihuLHQpe3QuX19rJiZ0Ll9fay5fX20mJihuLl9fbT10Ll9fay5fX20pLGQmJmQobix0KTt9LGUuX19yPWZ1bmN0aW9uKG4pe3YmJnYobiksdD0wO3ZhciBpPShyPW4uX19jKS5fX0g7aSYmKHU9PT1yPyhpLl9faD1bXSxyLl9faD1bXSxpLl9fLmZvckVhY2goZnVuY3Rpb24obil7bi5fX04mJihuLl9fPW4uX19OKSxuLl9fVj1jLG4uX19OPW4uaT12b2lkIDA7fSkpOihpLl9faC5mb3JFYWNoKHopLGkuX19oLmZvckVhY2goQiksaS5fX2g9W10sdD0wKSksdT1yO30sZS5kaWZmZWQ9ZnVuY3Rpb24obil7bCYmbChuKTt2YXIgdD1uLl9fYzt0JiZ0Ll9fSCYmKHQuX19ILl9faC5sZW5ndGgmJigxIT09Zi5wdXNoKHQpJiZpPT09ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fCgoaT1lLnJlcXVlc3RBbmltYXRpb25GcmFtZSl8fHcpKGopKSx0Ll9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uaSYmKG4uX19IPW4uaSksbi5fX1YhPT1jJiYobi5fXz1uLl9fViksbi5pPXZvaWQgMCxuLl9fVj1jO30pKSx1PXI9bnVsbDt9LGUuX19jPWZ1bmN0aW9uKG4sdCl7dC5zb21lKGZ1bmN0aW9uKG4pe3RyeXtuLl9faC5mb3JFYWNoKHopLG4uX19oPW4uX19oLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gIW4uX198fEIobil9KTt9Y2F0Y2gocil7dC5zb21lKGZ1bmN0aW9uKG4pe24uX19oJiYobi5fX2g9W10pO30pLHQ9W10sZS5fX2UocixuLl9fdik7fX0pLG0mJm0obix0KTt9LGUudW5tb3VudD1mdW5jdGlvbihuKXtzJiZzKG4pO3ZhciB0LHI9bi5fX2M7ciYmci5fX0gmJihyLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3RyeXt6KG4pO31jYXRjaChuKXt0PW47fX0pLHIuX19IPXZvaWQgMCx0JiZlLl9fZSh0LHIuX192KSk7fTt2YXIgaz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ZnVuY3Rpb24gdyhuKXt2YXIgdCxyPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHUpLGsmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHQpLHNldFRpbWVvdXQobik7fSx1PXNldFRpbWVvdXQociwxMDApO2smJih0PXJlcXVlc3RBbmltYXRpb25GcmFtZShyKSk7fWZ1bmN0aW9uIHoobil7dmFyIHQ9cix1PW4uX19jO1wiZnVuY3Rpb25cIj09dHlwZW9mIHUmJihuLl9fYz12b2lkIDAsdSgpKSxyPXQ7fWZ1bmN0aW9uIEIobil7dmFyIHQ9cjtuLl9fYz1uLl9fKCkscj10O31mdW5jdGlvbiBDKG4sdCl7cmV0dXJuICFufHxuLmxlbmd0aCE9PXQubGVuZ3RofHx0LnNvbWUoZnVuY3Rpb24odCxyKXtyZXR1cm4gdCE9PW5bcl19KX1mdW5jdGlvbiBEKG4sdCl7cmV0dXJuIFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dChuKTp0fVxuXG5jb25zdCBob29rcyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZGVmaW5lUHJvcGVydHkoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIHVzZUNhbGxiYWNrOiB4LFxuICB1c2VDb250ZXh0OiBQLFxuICB1c2VEZWJ1Z1ZhbHVlOiBWLFxuICB1c2VFZmZlY3Q6IF8sXG4gIHVzZUVycm9yQm91bmRhcnk6IGIsXG4gIHVzZUlkOiBnLFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBULFxuICB1c2VMYXlvdXRFZmZlY3Q6IEEsXG4gIHVzZU1lbW86IHEsXG4gIHVzZVJlZHVjZXI6IHksXG4gIHVzZVJlZjogRixcbiAgdXNlU3RhdGU6IHBcbn0sIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cbmNvbnN0IFhNTE5TJDEgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuXG4vKipcbiAqIFNlbnRyeSBMb2dvXG4gKi9cbmZ1bmN0aW9uIFNlbnRyeUxvZ28oKSB7XG4gIGNvbnN0IGNyZWF0ZUVsZW1lbnROUyA9ICh0YWdOYW1lKSA9PlxuICAgIERPQ1VNRU5ULmNyZWF0ZUVsZW1lbnROUyhYTUxOUyQxLCB0YWdOYW1lKTtcbiAgY29uc3Qgc3ZnID0gc2V0QXR0cmlidXRlc05TKGNyZWF0ZUVsZW1lbnROUygnc3ZnJyksIHtcbiAgICB3aWR0aDogJzMyJyxcbiAgICBoZWlnaHQ6ICczMCcsXG4gICAgdmlld0JveDogJzAgMCA3MiA2NicsXG4gICAgZmlsbDogJ2luaGVyaXQnLFxuICB9KTtcblxuICBjb25zdCBwYXRoID0gc2V0QXR0cmlidXRlc05TKGNyZWF0ZUVsZW1lbnROUygncGF0aCcpLCB7XG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDExLCAxMSknLFxuICAgIGQ6ICdNMjksMi4yNmE0LjY3LDQuNjcsMCwwLDAtOCwwTDE0LjQyLDEzLjUzQTMyLjIxLDMyLjIxLDAsMCwxLDMyLjE3LDQwLjE5SDI3LjU1QTI3LjY4LDI3LjY4LDAsMCwwLDEyLjA5LDE3LjQ3TDYsMjhhMTUuOTIsMTUuOTIsMCwwLDEsOS4yMywxMi4xN0g0LjYyQS43Ni43NiwwLDAsMSw0LDM5LjA2bDIuOTQtNWExMC43NCwxMC43NCwwLDAsMC0zLjM2LTEuOWwtMi45MSw1YTQuNTQsNC41NCwwLDAsMCwxLjY5LDYuMjRBNC42Niw0LjY2LDAsMCwwLDQuNjIsNDRIMTkuMTVhMTkuNCwxOS40LDAsMCwwLTgtMTcuMzFsMi4zMS00QTIzLjg3LDIzLjg3LDAsMCwxLDIzLjc2LDQ0SDM2LjA3YTM1Ljg4LDM1Ljg4LDAsMCwwLTE2LjQxLTMxLjhsNC42Ny04YS43Ny43NywwLDAsMSwxLjA1LS4yN2MuNTMuMjksMjAuMjksMzQuNzcsMjAuNjYsMzUuMTdhLjc2Ljc2LDAsMCwxLS42OCwxLjEzSDQwLjZxLjA5LDEuOTEsMCwzLjgxaDQuNzhBNC41OSw0LjU5LDAsMCwwLDUwLDM5LjQzYTQuNDksNC40OSwwLDAsMC0uNjItMi4yOFonLFxuICB9KTtcbiAgc3ZnLmFwcGVuZENoaWxkKHBhdGgpO1xuXG4gIHJldHVybiBzdmc7XG59XG5cbmZ1bmN0aW9uIERpYWxvZ0hlYWRlcih7IG9wdGlvbnMgfSkge1xuICBjb25zdCBsb2dvSHRtbCA9IHEoKCkgPT4gKHsgX19odG1sOiBTZW50cnlMb2dvKCkub3V0ZXJIVE1MIH0pLCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICB5JDEoJ2gyJywgeyBjbGFzczogXCJkaWFsb2dfX2hlYWRlclwiLH1cbiAgICAgICwgeSQxKCdzcGFuJywgeyBjbGFzczogXCJkaWFsb2dfX3RpdGxlXCIsfSwgb3B0aW9ucy5mb3JtVGl0bGUpXG4gICAgICAsIG9wdGlvbnMuc2hvd0JyYW5kaW5nID8gKFxuICAgICAgICB5JDEoJ2EnLCB7XG4gICAgICAgICAgY2xhc3M6IFwiYnJhbmQtbGlua1wiLFxuICAgICAgICAgIHRhcmdldDogXCJfYmxhbmtcIixcbiAgICAgICAgICBocmVmOiBcImh0dHBzOi8vc2VudHJ5LmlvL3dlbGNvbWUvXCIsXG4gICAgICAgICAgdGl0bGU6IFwiUG93ZXJlZCBieSBTZW50cnlcIiAgLFxuICAgICAgICAgIHJlbDogXCJub29wZW5lciBub3JlZmVycmVyXCIgLFxuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiBsb2dvSHRtbCx9XG4gICAgICAgIClcbiAgICAgICkgOiBudWxsXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHRoYXQgYSBnaXZlbiBmZWVkYmFjayBzdWJtaXNzaW9uIGhhcyB0aGUgcmVxdWlyZWQgZmllbGRzXG4gKi9cbmZ1bmN0aW9uIGdldE1pc3NpbmdGaWVsZHMoZmVlZGJhY2ssIHByb3BzKSB7XG4gIGNvbnN0IGVtcHR5RmllbGRzID0gW107XG4gIGlmIChwcm9wcy5pc05hbWVSZXF1aXJlZCAmJiAhZmVlZGJhY2submFtZSkge1xuICAgIGVtcHR5RmllbGRzLnB1c2gocHJvcHMubmFtZUxhYmVsKTtcbiAgfVxuICBpZiAocHJvcHMuaXNFbWFpbFJlcXVpcmVkICYmICFmZWVkYmFjay5lbWFpbCkge1xuICAgIGVtcHR5RmllbGRzLnB1c2gocHJvcHMuZW1haWxMYWJlbCk7XG4gIH1cbiAgaWYgKCFmZWVkYmFjay5tZXNzYWdlKSB7XG4gICAgZW1wdHlGaWVsZHMucHVzaChwcm9wcy5tZXNzYWdlTGFiZWwpO1xuICB9XG5cbiAgcmV0dXJuIGVtcHR5RmllbGRzO1xufVxuXG5mdW5jdGlvbiByZXRyaWV2ZVN0cmluZ1ZhbHVlKGZvcm1EYXRhLCBrZXkpIHtcbiAgY29uc3QgdmFsdWUgPSBmb3JtRGF0YS5nZXQoa2V5KTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUudHJpbSgpO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gRm9ybSh7XG4gIG9wdGlvbnMsXG4gIGRlZmF1bHRFbWFpbCxcbiAgZGVmYXVsdE5hbWUsXG5cbiAgb25Gb3JtQ2xvc2UsXG4gIG9uU3VibWl0LFxuICBvblN1Ym1pdFN1Y2Nlc3MsXG4gIG9uU3VibWl0RXJyb3IsXG4gIHNob3dFbWFpbCxcbiAgc2hvd05hbWUsXG4gIHNjcmVlbnNob3RJbnB1dCxcbn0pIHtcbiAgY29uc3Qge1xuICAgIHRhZ3MsXG4gICAgYWRkU2NyZWVuc2hvdEJ1dHRvbkxhYmVsLFxuICAgIHJlbW92ZVNjcmVlbnNob3RCdXR0b25MYWJlbCxcbiAgICBjYW5jZWxCdXR0b25MYWJlbCxcbiAgICBlbWFpbExhYmVsLFxuICAgIGVtYWlsUGxhY2Vob2xkZXIsXG4gICAgaXNFbWFpbFJlcXVpcmVkLFxuICAgIGlzTmFtZVJlcXVpcmVkLFxuICAgIG1lc3NhZ2VMYWJlbCxcbiAgICBtZXNzYWdlUGxhY2Vob2xkZXIsXG4gICAgbmFtZUxhYmVsLFxuICAgIG5hbWVQbGFjZWhvbGRlcixcbiAgICBzdWJtaXRCdXR0b25MYWJlbCxcbiAgICBpc1JlcXVpcmVkTGFiZWwsXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBbaXNTdWJtaXR0aW5nLCBzZXRJc1N1Ym1pdHRpbmddID0gcChmYWxzZSk7XG4gIC8vIFRPRE86IHNldCBhIHJlZiBvbiB0aGUgZm9ybSwgYW5kIHdoZW5ldmVyIGFuIGlucHV0IGNoYW5nZXMgY2FsbCBwcm9jZXNzRm9ybSgpIGFuZCBzZXRFcnJvcigpXG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gcChudWxsKTtcblxuICBjb25zdCBbc2hvd1NjcmVlbnNob3RJbnB1dCwgc2V0U2hvd1NjcmVlbnNob3RJbnB1dF0gPSBwKGZhbHNlKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgY29uc3QgU2NyZWVuc2hvdElucHV0Q29tcG9uZW50ID0gc2NyZWVuc2hvdElucHV0Py5pbnB1dDtcblxuICBjb25zdCBbc2NyZWVuc2hvdEVycm9yLCBzZXRTY3JlZW5zaG90RXJyb3JdID0gcChudWxsKTtcbiAgY29uc3Qgb25TY3JlZW5zaG90RXJyb3IgPSB4KChlcnJvcikgPT4ge1xuICAgIHNldFNjcmVlbnNob3RFcnJvcihlcnJvcik7XG4gICAgc2V0U2hvd1NjcmVlbnNob3RJbnB1dChmYWxzZSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYXNBbGxSZXF1aXJlZEZpZWxkcyA9IHgoXG4gICAgKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IG1pc3NpbmdGaWVsZHMgPSBnZXRNaXNzaW5nRmllbGRzKGRhdGEsIHtcbiAgICAgICAgZW1haWxMYWJlbCxcbiAgICAgICAgaXNFbWFpbFJlcXVpcmVkLFxuICAgICAgICBpc05hbWVSZXF1aXJlZCxcbiAgICAgICAgbWVzc2FnZUxhYmVsLFxuICAgICAgICBuYW1lTGFiZWwsXG4gICAgICB9KTtcblxuICAgICAgaWYgKG1pc3NpbmdGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICBzZXRFcnJvcihgUGxlYXNlIGVudGVyIGluIHRoZSBmb2xsb3dpbmcgcmVxdWlyZWQgZmllbGRzOiAke21pc3NpbmdGaWVsZHMuam9pbignLCAnKX1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWlzc2luZ0ZpZWxkcy5sZW5ndGggPT09IDA7XG4gICAgfSxcbiAgICBbZW1haWxMYWJlbCwgaXNFbWFpbFJlcXVpcmVkLCBpc05hbWVSZXF1aXJlZCwgbWVzc2FnZUxhYmVsLCBuYW1lTGFiZWxdLFxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHgoXG4gICAgYXN5bmMgKGUpID0+IHtcbiAgICAgIHNldElzU3VibWl0dGluZyh0cnVlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCEoZS50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGUudGFyZ2V0KTtcbiAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IGF3YWl0IChzY3JlZW5zaG90SW5wdXQgJiYgc2hvd1NjcmVlbnNob3RJbnB1dCA/IHNjcmVlbnNob3RJbnB1dC52YWx1ZSgpIDogdW5kZWZpbmVkKTtcblxuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgIG5hbWU6IHJldHJpZXZlU3RyaW5nVmFsdWUoZm9ybURhdGEsICduYW1lJyksXG4gICAgICAgICAgZW1haWw6IHJldHJpZXZlU3RyaW5nVmFsdWUoZm9ybURhdGEsICdlbWFpbCcpLFxuICAgICAgICAgIG1lc3NhZ2U6IHJldHJpZXZlU3RyaW5nVmFsdWUoZm9ybURhdGEsICdtZXNzYWdlJyksXG4gICAgICAgICAgYXR0YWNobWVudHM6IGF0dGFjaG1lbnQgPyBbYXR0YWNobWVudF0gOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCFoYXNBbGxSZXF1aXJlZEZpZWxkcyhkYXRhKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZXZlbnRJZCA9IGF3YWl0IG9uU3VibWl0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBkYXRhLm5hbWUsXG4gICAgICAgICAgICAgIGVtYWlsOiBkYXRhLmVtYWlsLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBkYXRhLm1lc3NhZ2UsXG4gICAgICAgICAgICAgIHNvdXJjZTogRkVFREJBQ0tfV0lER0VUX1NPVVJDRSxcbiAgICAgICAgICAgICAgdGFncyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGF0dGFjaG1lbnRzOiBkYXRhLmF0dGFjaG1lbnRzIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgICBvblN1Ym1pdFN1Y2Nlc3MoZGF0YSwgZXZlbnRJZCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHNldEVycm9yKGVycm9yICk7XG4gICAgICAgICAgb25TdWJtaXRFcnJvcihlcnJvciApO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRJc1N1Ym1pdHRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW3NjcmVlbnNob3RJbnB1dCAmJiBzaG93U2NyZWVuc2hvdElucHV0LCBvblN1Ym1pdFN1Y2Nlc3MsIG9uU3VibWl0RXJyb3JdLFxuICApO1xuXG4gIHJldHVybiAoXG4gICAgeSQxKCdmb3JtJywgeyBjbGFzczogXCJmb3JtXCIsIG9uU3VibWl0OiBoYW5kbGVTdWJtaXQsfVxuICAgICAgLCBTY3JlZW5zaG90SW5wdXRDb21wb25lbnQgJiYgc2hvd1NjcmVlbnNob3RJbnB1dCA/IChcbiAgICAgICAgeSQxKFNjcmVlbnNob3RJbnB1dENvbXBvbmVudCwgeyBvbkVycm9yOiBvblNjcmVlbnNob3RFcnJvcix9IClcbiAgICAgICkgOiBudWxsXG5cbiAgICAgICwgeSQxKCdmaWVsZHNldCcsIHsgY2xhc3M6IFwiZm9ybV9fcmlnaHRcIiwgJ2RhdGEtc2VudHJ5LWZlZWRiYWNrJzogdHJ1ZSwgZGlzYWJsZWQ6IGlzU3VibWl0dGluZyx9XG4gICAgICAgICwgeSQxKCdkaXYnLCB7IGNsYXNzOiBcImZvcm1fX3RvcFwiLH1cbiAgICAgICAgICAsIGVycm9yID8geSQxKCdkaXYnLCB7IGNsYXNzOiBcImZvcm1fX2Vycm9yLWNvbnRhaW5lclwiLH0sIGVycm9yKSA6IG51bGxcblxuICAgICAgICAgICwgc2hvd05hbWUgPyAoXG4gICAgICAgICAgICB5JDEoJ2xhYmVsJywgeyBmb3I6IFwibmFtZVwiLCBjbGFzczogXCJmb3JtX19sYWJlbFwiLH1cbiAgICAgICAgICAgICAgLCB5JDEoTGFiZWxUZXh0LCB7IGxhYmVsOiBuYW1lTGFiZWwsIGlzUmVxdWlyZWRMYWJlbDogaXNSZXF1aXJlZExhYmVsLCBpc1JlcXVpcmVkOiBpc05hbWVSZXF1aXJlZCx9IClcbiAgICAgICAgICAgICAgLCB5JDEoJ2lucHV0Jywge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBcImZvcm1fX2lucHV0XCIsXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0TmFtZSxcbiAgICAgICAgICAgICAgICBpZDogXCJuYW1lXCIsXG4gICAgICAgICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IG5hbWVQbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogaXNOYW1lUmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIHkkMSgnaW5wdXQnLCB7ICdhcmlhLWhpZGRlbic6IHRydWUsIHZhbHVlOiBkZWZhdWx0TmFtZSwgbmFtZTogXCJuYW1lXCIsIHR5cGU6IFwiaGlkZGVuXCIsfSApXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgLCBzaG93RW1haWwgPyAoXG4gICAgICAgICAgICB5JDEoJ2xhYmVsJywgeyBmb3I6IFwiZW1haWxcIiwgY2xhc3M6IFwiZm9ybV9fbGFiZWxcIix9XG4gICAgICAgICAgICAgICwgeSQxKExhYmVsVGV4dCwgeyBsYWJlbDogZW1haWxMYWJlbCwgaXNSZXF1aXJlZExhYmVsOiBpc1JlcXVpcmVkTGFiZWwsIGlzUmVxdWlyZWQ6IGlzRW1haWxSZXF1aXJlZCx9IClcbiAgICAgICAgICAgICAgLCB5JDEoJ2lucHV0Jywge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBcImZvcm1fX2lucHV0XCIsXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0RW1haWwsXG4gICAgICAgICAgICAgICAgaWQ6IFwiZW1haWxcIixcbiAgICAgICAgICAgICAgICBuYW1lOiBcImVtYWlsXCIsXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGVtYWlsUGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGlzRW1haWxSZXF1aXJlZCxcbiAgICAgICAgICAgICAgICB0eXBlOiBcImVtYWlsXCIsfVxuKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICB5JDEoJ2lucHV0JywgeyAnYXJpYS1oaWRkZW4nOiB0cnVlLCB2YWx1ZTogZGVmYXVsdEVtYWlsLCBuYW1lOiBcImVtYWlsXCIsIHR5cGU6IFwiaGlkZGVuXCIsfSApXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgLCB5JDEoJ2xhYmVsJywgeyBmb3I6IFwibWVzc2FnZVwiLCBjbGFzczogXCJmb3JtX19sYWJlbFwiLH1cbiAgICAgICAgICAgICwgeSQxKExhYmVsVGV4dCwgeyBsYWJlbDogbWVzc2FnZUxhYmVsLCBpc1JlcXVpcmVkTGFiZWw6IGlzUmVxdWlyZWRMYWJlbCwgaXNSZXF1aXJlZDogdHJ1ZSx9IClcbiAgICAgICAgICAgICwgeSQxKCd0ZXh0YXJlYScsIHtcbiAgICAgICAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgICBjbGFzczogXCJmb3JtX19pbnB1dCBmb3JtX19pbnB1dC0tdGV4dGFyZWFcIiAsXG4gICAgICAgICAgICAgIGlkOiBcIm1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgbmFtZTogXCJtZXNzYWdlXCIsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBtZXNzYWdlUGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICByb3dzOiA1LH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG5cbiAgICAgICAgICAsIFNjcmVlbnNob3RJbnB1dENvbXBvbmVudCA/IChcbiAgICAgICAgICAgIHkkMSgnbGFiZWwnLCB7IGZvcjogXCJzY3JlZW5zaG90XCIsIGNsYXNzOiBcImZvcm1fX2xhYmVsXCIsfVxuICAgICAgICAgICAgICAsIHkkMSgnYnV0dG9uJywge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBcImJ0biBidG4tLWRlZmF1bHRcIiAsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGlzU3VibWl0dGluZyxcbiAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHNldFNjcmVlbnNob3RFcnJvcihudWxsKTtcbiAgICAgICAgICAgICAgICAgIHNldFNob3dTY3JlZW5zaG90SW5wdXQocHJldiA9PiAhcHJldik7XG4gICAgICAgICAgICAgICAgfSx9XG5cbiAgICAgICAgICAgICAgICAsIHNob3dTY3JlZW5zaG90SW5wdXQgPyByZW1vdmVTY3JlZW5zaG90QnV0dG9uTGFiZWwgOiBhZGRTY3JlZW5zaG90QnV0dG9uTGFiZWxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAsIHNjcmVlbnNob3RFcnJvciA/IHkkMSgnZGl2JywgeyBjbGFzczogXCJmb3JtX19lcnJvci1jb250YWluZXJcIix9LCBzY3JlZW5zaG90RXJyb3IubWVzc2FnZSkgOiBudWxsXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSA6IG51bGxcbiAgICAgICAgKVxuICAgICAgICAsIHkkMSgnZGl2JywgeyBjbGFzczogXCJidG4tZ3JvdXBcIix9XG4gICAgICAgICAgLCB5JDEoJ2J1dHRvbicsIHsgY2xhc3M6IFwiYnRuIGJ0bi0tcHJpbWFyeVwiICwgZGlzYWJsZWQ6IGlzU3VibWl0dGluZywgdHlwZTogXCJzdWJtaXRcIix9XG4gICAgICAgICAgICAsIHN1Ym1pdEJ1dHRvbkxhYmVsXG4gICAgICAgICAgKVxuICAgICAgICAgICwgeSQxKCdidXR0b24nLCB7IGNsYXNzOiBcImJ0biBidG4tLWRlZmF1bHRcIiAsIGRpc2FibGVkOiBpc1N1Ym1pdHRpbmcsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IG9uRm9ybUNsb3NlLH1cbiAgICAgICAgICAgICwgY2FuY2VsQnV0dG9uTGFiZWxcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG59XG5cbmZ1bmN0aW9uIExhYmVsVGV4dCh7XG4gIGxhYmVsLFxuICBpc1JlcXVpcmVkLFxuICBpc1JlcXVpcmVkTGFiZWwsXG59XG5cbikge1xuICByZXR1cm4gKFxuICAgIHkkMSgnc3BhbicsIHsgY2xhc3M6IFwiZm9ybV9fbGFiZWxfX3RleHRcIix9XG4gICAgICAsIGxhYmVsXG4gICAgICAsIGlzUmVxdWlyZWQgJiYgeSQxKCdzcGFuJywgeyBjbGFzczogXCJmb3JtX19sYWJlbF9fdGV4dC0tcmVxdWlyZWRcIix9LCBpc1JlcXVpcmVkTGFiZWwpXG4gICAgKVxuICApO1xufVxuXG5jb25zdCBXSURUSCA9IDE2O1xuY29uc3QgSEVJR0hUID0gMTc7XG5jb25zdCBYTUxOUyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG5cbi8qKlxuICogU3VjY2VzcyBJY29uIChjaGVja21hcmspXG4gKi9cbmZ1bmN0aW9uIFN1Y2Nlc3NJY29uKCkge1xuICBjb25zdCBjcmVhdGVFbGVtZW50TlMgPSAodGFnTmFtZSkgPT5cbiAgICBXSU5ET1cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFhNTE5TLCB0YWdOYW1lKTtcbiAgY29uc3Qgc3ZnID0gc2V0QXR0cmlidXRlc05TKGNyZWF0ZUVsZW1lbnROUygnc3ZnJyksIHtcbiAgICB3aWR0aDogYCR7V0lEVEh9YCxcbiAgICBoZWlnaHQ6IGAke0hFSUdIVH1gLFxuICAgIHZpZXdCb3g6IGAwIDAgJHtXSURUSH0gJHtIRUlHSFR9YCxcbiAgICBmaWxsOiAnaW5oZXJpdCcsXG4gIH0pO1xuXG4gIGNvbnN0IGcgPSBzZXRBdHRyaWJ1dGVzTlMoY3JlYXRlRWxlbWVudE5TKCdnJyksIHtcbiAgICBjbGlwUGF0aDogJ3VybCgjY2xpcDBfNTdfMTU2KScsXG4gIH0pO1xuXG4gIGNvbnN0IHBhdGgyID0gc2V0QXR0cmlidXRlc05TKGNyZWF0ZUVsZW1lbnROUygncGF0aCcpLCB7XG4gICAgWydmaWxsLXJ1bGUnXTogJ2V2ZW5vZGQnLFxuICAgIFsnY2xpcC1ydWxlJ106ICdldmVub2RkJyxcbiAgICBkOiAnTTMuNTU1NDQgMTUuMTUxOEM0Ljg3MTAzIDE2LjAzMDggNi40MTc3NSAxNi41IDggMTYuNUMxMC4xMjE3IDE2LjUgMTIuMTU2NiAxNS42NTcxIDEzLjY1NjkgMTQuMTU2OUMxNS4xNTcxIDEyLjY1NjYgMTYgMTAuNjIxNyAxNiA4LjVDMTYgNi45MTc3NSAxNS41MzA4IDUuMzcxMDMgMTQuNjUxOCA0LjA1NTQ0QzEzLjc3MjcgMi43Mzk4NSAxMi41MjMzIDEuNzE0NDcgMTEuMDYxNSAxLjEwODk3QzkuNTk5NjYgMC41MDM0NjYgNy45OTExMyAwLjM0NTA0IDYuNDM5MjggMC42NTM3MjFDNC44ODc0MyAwLjk2MjQwMyAzLjQ2MTk3IDEuNzI0MzMgMi4zNDMxNSAyLjg0MzE1QzEuMjI0MzMgMy45NjE5NyAwLjQ2MjQwMyA1LjM4NzQzIDAuMTUzNzIxIDYuOTM5MjhDLTAuMTU0OTYgOC40OTExMyAwLjAwMzQ2NjI1IDEwLjA5OTcgMC42MDg5NjcgMTEuNTYxNUMxLjIxNDQ3IDEzLjAyMzMgMi4yMzk4NSAxNC4yNzI3IDMuNTU1NDQgMTUuMTUxOFpNNC40MDU0NiAzLjEyMDRDNS40Njk0NSAyLjQwOTQ2IDYuNzIwMzYgMi4wMyA4IDIuMDNDOS43MTU5NSAyLjAzIDExLjM2MTYgMi43MTE2NiAxMi41NzUgMy45MjUwMkMxMy43ODgzIDUuMTM4MzggMTQuNDcgNi43ODQwNSAxNC40NyA4LjVDMTQuNDcgOS43Nzk2NSAxNC4wOTA1IDExLjAzMDYgMTMuMzc5NiAxMi4wOTQ1QzEyLjY2ODcgMTMuMTU4NSAxMS42NTgyIDEzLjk4NzggMTAuNDc2IDE0LjQ3NzVDOS4yOTM3MyAxNC45NjcyIDcuOTkyODMgMTUuMDk1MyA2LjczNzc3IDE0Ljg0NTdDNS40ODI3MSAxNC41OTYgNC4zMjk4NyAxMy45Nzk4IDMuNDI1MDIgMTMuMDc1QzIuNTIwMTggMTIuMTcwMSAxLjkwMzk3IDExLjAxNzMgMS42NTQzMiA5Ljc2MjI0QzEuNDA0NjggOC41MDcxOCAxLjUzMjggNy4yMDYyOCAyLjAyMjUgNi4wMjQwNEMyLjUxMjIgNC44NDE4IDMuMzQxNDggMy44MzEzMyA0LjQwNTQ2IDMuMTIwNFonLFxuICB9KTtcbiAgY29uc3QgcGF0aCA9IHNldEF0dHJpYnV0ZXNOUyhjcmVhdGVFbGVtZW50TlMoJ3BhdGgnKSwge1xuICAgIGQ6ICdNNi42ODc3NSAxMi40Mjk3QzYuNzg1ODYgMTIuNDc0NSA2Ljg5MjE4IDEyLjQ5ODQgNyAxMi41QzcuMTEyNzUgMTIuNDk1NSA3LjIyMzE1IDEyLjQ2NjQgNy4zMjMzNyAxMi40MTQ1QzcuNDIzNiAxMi4zNjI3IDcuNTExMjEgMTIuMjg5NCA3LjU4IDEyLjJMMTIgNS42Mzk5OUMxMi4wODQ4IDUuNDc3MjQgMTIuMTA3MSA1LjI4OTAyIDEyLjA2MjUgNS4xMTA5OEMxMi4wMTc4IDQuOTMyOTQgMTEuOTA5NSA0Ljc3NzQ0IDExLjc1NzkgNC42NzM5MkMxMS42MDY0IDQuNTcwNDEgMTEuNDIyMSA0LjUyNjA4IDExLjI0IDQuNTQ5MzFDMTEuMDU3OSA0LjU3MjU0IDEwLjg5MDcgNC42NjE3MyAxMC43NyA0Ljc5OTk5TDYuODggMTAuNTdMNS4xMyA4LjU2OTk5QzUuMDY1MDggOC40OTU2NiA0Ljk4NjEzIDguNDM0ODggNC44OTc2OCA4LjM5MTExQzQuODA5MjIgOC4zNDczNSA0LjcxMyA4LjMyMTQ4IDQuNjE0NTMgOC4zMTQ5OEM0LjUxNjA1IDguMzA4NDcgNC40MTcyNyA4LjMyMTQ3IDQuMzIzODIgOC4zNTMyMkM0LjIzMDM4IDguMzg0OTcgNC4xNDQxMyA4LjQzNDg0IDQuMDcgOC40OTk5OUMzLjkyNTExIDguNjMyMTcgMy44MzY5MiA4LjgxNTIzIDMuODIzODcgOS4wMTA5MkMzLjgxMDgzIDkuMjA2NiAzLjg3MzkzIDkuMzk5NzYgNCA5LjU0OTk5TDYuNDMgMTIuMjRDNi41MDE4NyAxMi4zMjA0IDYuNTg5NjQgMTIuMzg1IDYuNjg3NzUgMTIuNDI5N1onLFxuICB9KTtcblxuICBzdmcuYXBwZW5kQ2hpbGQoZykuYXBwZW5kKHBhdGgsIHBhdGgyKTtcblxuICBjb25zdCBzcGVha2VyRGVmcyA9IGNyZWF0ZUVsZW1lbnROUygnZGVmcycpO1xuICBjb25zdCBzcGVha2VyQ2xpcFBhdGhEZWYgPSBzZXRBdHRyaWJ1dGVzTlMoY3JlYXRlRWxlbWVudE5TKCdjbGlwUGF0aCcpLCB7XG4gICAgaWQ6ICdjbGlwMF81N18xNTYnLFxuICB9KTtcblxuICBjb25zdCBzcGVha2VyUmVjdCA9IHNldEF0dHJpYnV0ZXNOUyhjcmVhdGVFbGVtZW50TlMoJ3JlY3QnKSwge1xuICAgIHdpZHRoOiBgJHtXSURUSH1gLFxuICAgIGhlaWdodDogYCR7V0lEVEh9YCxcbiAgICBmaWxsOiAnd2hpdGUnLFxuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgwIDAuNSknLFxuICB9KTtcblxuICBzcGVha2VyQ2xpcFBhdGhEZWYuYXBwZW5kQ2hpbGQoc3BlYWtlclJlY3QpO1xuICBzcGVha2VyRGVmcy5hcHBlbmRDaGlsZChzcGVha2VyQ2xpcFBhdGhEZWYpO1xuXG4gIHN2Zy5hcHBlbmRDaGlsZChzcGVha2VyRGVmcykuYXBwZW5kQ2hpbGQoc3BlYWtlckNsaXBQYXRoRGVmKS5hcHBlbmRDaGlsZChzcGVha2VyUmVjdCk7XG5cbiAgcmV0dXJuIHN2Zztcbn1cblxuZnVuY3Rpb24gRGlhbG9nKHsgb3Blbiwgb25Gb3JtU3VibWl0dGVkLCAuLi5wcm9wcyB9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwcm9wcy5vcHRpb25zO1xuICBjb25zdCBzdWNjZXNzSWNvbkh0bWwgPSBxKCgpID0+ICh7IF9faHRtbDogU3VjY2Vzc0ljb24oKS5vdXRlckhUTUwgfSksIFtdKTtcblxuICBjb25zdCBbdGltZW91dElkLCBzZXRUaW1lb3V0SWRdID0gcChudWxsKTtcblxuICBjb25zdCBoYW5kbGVPblN1Y2Nlc3NDbGljayA9IHgoKCkgPT4ge1xuICAgIGlmICh0aW1lb3V0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgc2V0VGltZW91dElkKG51bGwpO1xuICAgIH1cbiAgICBvbkZvcm1TdWJtaXR0ZWQoKTtcbiAgfSwgW3RpbWVvdXRJZF0pO1xuXG4gIGNvbnN0IG9uU3VibWl0U3VjY2VzcyA9IHgoXG4gICAgKGRhdGEsIGV2ZW50SWQpID0+IHtcbiAgICAgIHByb3BzLm9uU3VibWl0U3VjY2VzcyhkYXRhLCBldmVudElkKTtcbiAgICAgIHNldFRpbWVvdXRJZChcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb25Gb3JtU3VibWl0dGVkKCk7XG4gICAgICAgICAgc2V0VGltZW91dElkKG51bGwpO1xuICAgICAgICB9LCBTVUNDRVNTX01FU1NBR0VfVElNRU9VVCksXG4gICAgICApO1xuICAgIH0sXG4gICAgW29uRm9ybVN1Ym1pdHRlZF0sXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICB5JDEoZyQxLCBudWxsXG4gICAgICAsIHRpbWVvdXRJZCA/IChcbiAgICAgICAgeSQxKCdkaXYnLCB7IGNsYXNzOiBcInN1Y2Nlc3NfX3Bvc2l0aW9uXCIsIG9uQ2xpY2s6IGhhbmRsZU9uU3VjY2Vzc0NsaWNrLH1cbiAgICAgICAgICAsIHkkMSgnZGl2JywgeyBjbGFzczogXCJzdWNjZXNzX19jb250ZW50XCIsfVxuICAgICAgICAgICAgLCBvcHRpb25zLnN1Y2Nlc3NNZXNzYWdlVGV4dFxuICAgICAgICAgICAgLCB5JDEoJ3NwYW4nLCB7IGNsYXNzOiBcInN1Y2Nlc3NfX2ljb25cIiwgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHN1Y2Nlc3NJY29uSHRtbCx9IClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICkgOiAoXG4gICAgICAgIHkkMSgnZGlhbG9nJywgeyBjbGFzczogXCJkaWFsb2dcIiwgb25DbGljazogb3B0aW9ucy5vbkZvcm1DbG9zZSwgb3Blbjogb3Blbix9XG4gICAgICAgICAgLCB5JDEoJ2RpdicsIHsgY2xhc3M6IFwiZGlhbG9nX19wb3NpdGlvblwiLH1cbiAgICAgICAgICAgICwgeSQxKCdkaXYnLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBcImRpYWxvZ19fY29udGVudFwiLFxuICAgICAgICAgICAgICBvbkNsaWNrOiBlID0+IHtcbiAgICAgICAgICAgICAgICAvLyBTdG9wIGV2ZW50IHByb3BhZ2F0aW9uIHNvIGNsaWNrcyBvbiBjb250ZW50IG1vZGFsIGRvIG5vdCBwcm9wYWdhdGUgdG8gZGlhbG9nICh3aGljaCB3aWxsIGNsb3NlIGRpYWxvZylcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB9LH1cblxuICAgICAgICAgICAgICAsIHkkMShEaWFsb2dIZWFkZXIsIHsgb3B0aW9uczogb3B0aW9ucyx9IClcbiAgICAgICAgICAgICAgLCB5JDEoRm9ybSwgeyAuLi5wcm9wcywgb25TdWJtaXRTdWNjZXNzOiBvblN1Ym1pdFN1Y2Nlc3MsfSApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xufVxuXG5jb25zdCBESUFMT0cgPSBgXG4uZGlhbG9nIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiB2YXIoLS16LWluZGV4KTtcbiAgbWFyZ2luOiAwO1xuICBpbnNldDogMDtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcGFkZGluZzogMDtcbiAgaGVpZ2h0OiAxMDB2aDtcbiAgd2lkdGg6IDEwMHZ3O1xuXG4gIGNvbG9yOiB2YXIoLS1kaWFsb2ctY29sb3IsIHZhcigtLWZvcmVncm91bmQpKTtcbiAgZmlsbDogdmFyKC0tZGlhbG9nLWNvbG9yLCB2YXIoLS1mb3JlZ3JvdW5kKSk7XG4gIGxpbmUtaGVpZ2h0OiAxLjc1ZW07XG5cbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgYm9yZGVyOiBub25lO1xuICBpbnNldDogMDtcbiAgb3BhY2l0eTogMTtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UtaW4tb3V0O1xufVxuXG4uZGlhbG9nX19wb3NpdGlvbiB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgei1pbmRleDogdmFyKC0tei1pbmRleCk7XG4gIGluc2V0OiB2YXIoLS1kaWFsb2ctaW5zZXQpO1xuICBwYWRkaW5nOiB2YXIoLS1wYWdlLW1hcmdpbik7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAoMiAqIHZhcigtLXBhZ2UtbWFyZ2luKSkpO1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG4gIC5kaWFsb2dfX3Bvc2l0aW9uIHtcbiAgICBpbnNldDogdmFyKC0tcGFnZS1tYXJnaW4pO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cblxuLmRpYWxvZ19fcG9zaXRpb246aGFzKC5lZGl0b3IpIHtcbiAgaW5zZXQ6IHZhcigtLXBhZ2UtbWFyZ2luKTtcbiAgcGFkZGluZzogMDtcbn1cblxuLmRpYWxvZzpub3QoW29wZW5dKSB7XG4gIG9wYWNpdHk6IDA7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG4uZGlhbG9nOm5vdChbb3Blbl0pIC5kaWFsb2dfX2NvbnRlbnQge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMTZweCkgc2NhbGUoMC45OCk7XG59XG5cbi5kaWFsb2dfX2NvbnRlbnQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDE2cHg7XG4gIHBhZGRpbmc6IHZhcigtLWRpYWxvZy1wYWRkaW5nLCAyNHB4KTtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LWhlaWdodDogMTAwJTtcbiAgb3ZlcmZsb3c6IGF1dG87XG5cbiAgYmFja2dyb3VuZDogdmFyKC0tZGlhbG9nLWJhY2tncm91bmQsIHZhcigtLWJhY2tncm91bmQpKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZGlhbG9nLWJvcmRlci1yYWRpdXMsIDIwcHgpO1xuICBib3JkZXI6IHZhcigtLWRpYWxvZy1ib3JkZXIsIHZhcigtLWJvcmRlcikpO1xuICBib3gtc2hhZG93OiB2YXIoLS1kaWFsb2ctYm94LXNoYWRvdywgdmFyKC0tYm94LXNoYWRvdykpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKSBzY2FsZSgxKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZS1pbi1vdXQ7XG59XG5cbmA7XG5cbmNvbnN0IERJQUxPR19IRUFERVIgPSBgXG4uZGlhbG9nX19oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDRweDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBmb250LXdlaWdodDogdmFyKC0tZGlhbG9nLWhlYWRlci13ZWlnaHQsIDYwMCk7XG4gIG1hcmdpbjogMDtcbn1cbi5kaWFsb2dfX3RpdGxlIHtcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xuICB3aWR0aDogdmFyKC0tZm9ybS13aWR0aCwgMjcycHgpO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcbiAgLmRpYWxvZ19fdGl0bGUge1xuICAgIHdpZHRoOiBhdXRvO1xuICB9XG59XG5cbi5kaWFsb2dfX3Bvc2l0aW9uOmhhcyguZWRpdG9yKSAuZGlhbG9nX190aXRsZSB7XG4gIHdpZHRoOiBhdXRvO1xufVxuXG5cbi5icmFuZC1saW5rIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG59XG4uYnJhbmQtbGluazpmb2N1cy12aXNpYmxlIHtcbiAgb3V0bGluZTogdmFyKC0tb3V0bGluZSk7XG59XG5gO1xuXG5jb25zdCBGT1JNID0gYFxuLmZvcm0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBvdmVyZmxvdzogYXV0bztcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZ2FwOiAxNnB4O1xuICBmbGV4OiAxIDA7XG59XG5cbi5mb3JtIGZpZWxkc2V0IHtcbiAgYm9yZGVyOiBub25lO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi5mb3JtX19yaWdodCB7XG4gIGZsZXg6IDAgMCBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xuICBvdmVyZmxvdzogYXV0bztcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBnYXA6IDIwcHg7XG4gIHdpZHRoOiB2YXIoLS1mb3JtLXdpZHRoLCAxMDAlKTtcbn1cblxuLmRpYWxvZ19fcG9zaXRpb246aGFzKC5lZGl0b3IpIC5mb3JtX19yaWdodCB7XG4gIHdpZHRoOiB2YXIoLS1mb3JtLXdpZHRoLCAyNzJweCk7XG59XG5cbi5mb3JtX190b3Age1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDhweDtcbn1cblxuLmZvcm1fX2Vycm9yLWNvbnRhaW5lciB7XG4gIGNvbG9yOiB2YXIoLS1lcnJvci1jb2xvcik7XG4gIGZpbGw6IHZhcigtLWVycm9yLWNvbG9yKTtcbn1cblxuLmZvcm1fX2xhYmVsIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiA0cHg7XG4gIG1hcmdpbjogMHB4O1xufVxuXG4uZm9ybV9fbGFiZWxfX3RleHQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDRweDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmZvcm1fX2xhYmVsX190ZXh0LS1yZXF1aXJlZCB7XG4gIGZvbnQtc2l6ZTogMC44NWVtO1xufVxuXG4uZm9ybV9faW5wdXQge1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXI6IHZhcigtLWlucHV0LWJvcmRlciwgdmFyKC0tYm9yZGVyKSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWlucHV0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gIGNvbG9yOiB2YXIoLS1pbnB1dC1jb2xvciwgaW5oZXJpdCk7XG4gIGZpbGw6IHZhcigtLWlucHV0LWNvbG9yLCBpbmhlcml0KTtcbiAgZm9udC1zaXplOiB2YXIoLS1pbnB1dC1mb250LXNpemUsIGluaGVyaXQpO1xuICBmb250LXdlaWdodDogdmFyKC0taW5wdXQtZm9udC13ZWlnaHQsIDUwMCk7XG4gIHBhZGRpbmc6IDZweCAxMnB4O1xufVxuXG4uZm9ybV9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgb3BhY2l0eTogMC42NTtcbiAgY29sb3I6IHZhcigtLWlucHV0LXBsYWNlaG9sZGVyLWNvbG9yLCBpbmhlcml0KTtcbiAgZmlsdGVyOiB2YXIoLS1pbnRlcmFjdGl2ZS1maWx0ZXIpO1xufVxuXG4uZm9ybV9faW5wdXQ6Zm9jdXMtdmlzaWJsZSB7XG4gIG91dGxpbmU6IHZhcigtLWlucHV0LWZvY3VzLW91dGxpbmUsIHZhcigtLW91dGxpbmUpKTtcbn1cblxuLmZvcm1fX2lucHV0LS10ZXh0YXJlYSB7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICByZXNpemU6IHZlcnRpY2FsO1xufVxuXG4uZXJyb3Ige1xuICBjb2xvcjogdmFyKC0tZXJyb3ItY29sb3IpO1xuICBmaWxsOiB2YXIoLS1lcnJvci1jb2xvcik7XG59XG5gO1xuXG5jb25zdCBCVVRUT04gPSBgXG4uYnRuLWdyb3VwIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ2FwOiA4cHg7XG59XG5cbi5idG4ge1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgYm9yZGVyOiB2YXIoLS1idXR0b24tYm9yZGVyLCB2YXIoLS1ib3JkZXIpKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYnV0dG9uLWJvcmRlci1yYWRpdXMsIDZweCk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGZvbnQtc2l6ZTogdmFyKC0tYnV0dG9uLWZvbnQtc2l6ZSwgaW5oZXJpdCk7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1idXR0b24tZm9udC13ZWlnaHQsIDYwMCk7XG4gIHBhZGRpbmc6IHZhcigtLWJ1dHRvbi1wYWRkaW5nLCA2cHggMTZweCk7XG59XG4uYnRuW2Rpc2FibGVkXSB7XG4gIG9wYWNpdHk6IDAuNjtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5idG4tLXByaW1hcnkge1xuICBjb2xvcjogdmFyKC0tYnV0dG9uLXByaW1hcnktY29sb3IsIHZhcigtLWFjY2VudC1mb3JlZ3JvdW5kKSk7XG4gIGZpbGw6IHZhcigtLWJ1dHRvbi1wcmltYXJ5LWNvbG9yLCB2YXIoLS1hY2NlbnQtZm9yZWdyb3VuZCkpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1idXR0b24tcHJpbWFyeS1iYWNrZ3JvdW5kLCB2YXIoLS1hY2NlbnQtYmFja2dyb3VuZCkpO1xuICBib3JkZXI6IHZhcigtLWJ1dHRvbi1wcmltYXJ5LWJvcmRlciwgdmFyKC0tYm9yZGVyKSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJ1dHRvbi1wcmltYXJ5LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1idXR0b24tcHJpbWFyeS1mb250LXdlaWdodCwgNTAwKTtcbn1cbi5idG4tLXByaW1hcnk6aG92ZXIge1xuICBjb2xvcjogdmFyKC0tYnV0dG9uLXByaW1hcnktaG92ZXItY29sb3IsIHZhcigtLWFjY2VudC1mb3JlZ3JvdW5kKSk7XG4gIGZpbGw6IHZhcigtLWJ1dHRvbi1wcmltYXJ5LWhvdmVyLWNvbG9yLCB2YXIoLS1hY2NlbnQtZm9yZWdyb3VuZCkpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1idXR0b24tcHJpbWFyeS1ob3Zlci1iYWNrZ3JvdW5kLCB2YXIoLS1hY2NlbnQtYmFja2dyb3VuZCkpO1xuICBmaWx0ZXI6IHZhcigtLWludGVyYWN0aXZlLWZpbHRlcik7XG59XG4uYnRuLS1wcmltYXJ5OmZvY3VzLXZpc2libGUge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1idXR0b24tcHJpbWFyeS1ob3Zlci1iYWNrZ3JvdW5kLCB2YXIoLS1hY2NlbnQtYmFja2dyb3VuZCkpO1xuICBmaWx0ZXI6IHZhcigtLWludGVyYWN0aXZlLWZpbHRlcik7XG4gIG91dGxpbmU6IHZhcigtLWJ1dHRvbi1wcmltYXJ5LWZvY3VzLW91dGxpbmUsIHZhcigtLW91dGxpbmUpKTtcbn1cblxuLmJ0bi0tZGVmYXVsdCB7XG4gIGNvbG9yOiB2YXIoLS1idXR0b24tY29sb3IsIHZhcigtLWZvcmVncm91bmQpKTtcbiAgZmlsbDogdmFyKC0tYnV0dG9uLWNvbG9yLCB2YXIoLS1mb3JlZ3JvdW5kKSk7XG4gIGJhY2tncm91bmQ6IHZhcigtLWJ1dHRvbi1iYWNrZ3JvdW5kLCB2YXIoLS1iYWNrZ3JvdW5kKSk7XG4gIGJvcmRlcjogdmFyKC0tYnV0dG9uLWJvcmRlciwgdmFyKC0tYm9yZGVyKSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJ1dHRvbi1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICBmb250LXdlaWdodDogdmFyKC0tYnV0dG9uLWZvbnQtd2VpZ2h0LCA1MDApO1xufVxuLmJ0bi0tZGVmYXVsdDpob3ZlciB7XG4gIGNvbG9yOiB2YXIoLS1idXR0b24tY29sb3IsIHZhcigtLWZvcmVncm91bmQpKTtcbiAgZmlsbDogdmFyKC0tYnV0dG9uLWNvbG9yLCB2YXIoLS1mb3JlZ3JvdW5kKSk7XG4gIGJhY2tncm91bmQ6IHZhcigtLWJ1dHRvbi1ob3Zlci1iYWNrZ3JvdW5kLCB2YXIoLS1iYWNrZ3JvdW5kKSk7XG4gIGZpbHRlcjogdmFyKC0taW50ZXJhY3RpdmUtZmlsdGVyKTtcbn1cbi5idG4tLWRlZmF1bHQ6Zm9jdXMtdmlzaWJsZSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWJ1dHRvbi1ob3Zlci1iYWNrZ3JvdW5kLCB2YXIoLS1iYWNrZ3JvdW5kKSk7XG4gIGZpbHRlcjogdmFyKC0taW50ZXJhY3RpdmUtZmlsdGVyKTtcbiAgb3V0bGluZTogdmFyKC0tYnV0dG9uLWZvY3VzLW91dGxpbmUsIHZhcigtLW91dGxpbmUpKTtcbn1cbmA7XG5cbmNvbnN0IFNVQ0NFU1MgPSBgXG4uc3VjY2Vzc19fcG9zaXRpb24ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGluc2V0OiB2YXIoLS1kaWFsb2ctaW5zZXQpO1xuICBwYWRkaW5nOiB2YXIoLS1wYWdlLW1hcmdpbik7XG4gIHotaW5kZXg6IHZhcigtLXotaW5kZXgpO1xufVxuLnN1Y2Nlc3NfX2NvbnRlbnQge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1zdWNjZXNzLWJhY2tncm91bmQsIHZhcigtLWJhY2tncm91bmQpKTtcbiAgYm9yZGVyOiB2YXIoLS1zdWNjZXNzLWJvcmRlciwgdmFyKC0tYm9yZGVyKSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXN1Y2Nlc3MtYm9yZGVyLXJhZGl1cywgMS43ZW0vNTAlKTtcbiAgYm94LXNoYWRvdzogdmFyKC0tc3VjY2Vzcy1ib3gtc2hhZG93LCB2YXIoLS1ib3gtc2hhZG93KSk7XG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1zdWNjZXNzLWZvbnQtd2VpZ2h0LCA2MDApO1xuICBjb2xvcjogdmFyKC0tc3VjY2Vzcy1jb2xvcik7XG4gIGZpbGw6IHZhcigtLXN1Y2Nlc3MtY29sb3IpO1xuICBwYWRkaW5nOiAxMnB4IDI0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjc1ZW07XG5cbiAgZGlzcGxheTogZ3JpZDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ3JpZC1hdXRvLWZsb3c6IGNvbHVtbjtcbiAgZ2FwOiA2cHg7XG4gIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLnN1Y2Nlc3NfX2ljb24ge1xuICBkaXNwbGF5OiBmbGV4O1xufVxuYDtcblxuLyoqXG4gKiBDcmVhdGVzIDxzdHlsZT4gZWxlbWVudCBmb3Igd2lkZ2V0IGRpYWxvZ1xuICovXG5mdW5jdGlvbiBjcmVhdGVEaWFsb2dTdHlsZXMoc3R5bGVOb25jZSkge1xuICBjb25zdCBzdHlsZSA9IERPQ1VNRU5ULmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cbiAgc3R5bGUudGV4dENvbnRlbnQgPSBgXG46aG9zdCB7XG4gIC0tZGlhbG9nLWluc2V0OiB2YXIoLS1pbnNldCk7XG59XG5cbiR7RElBTE9HfVxuJHtESUFMT0dfSEVBREVSfVxuJHtGT1JNfVxuJHtCVVRUT059XG4ke1NVQ0NFU1N9XG5gO1xuXG4gIGlmIChzdHlsZU5vbmNlKSB7XG4gICAgc3R5bGUuc2V0QXR0cmlidXRlKCdub25jZScsIHN0eWxlTm9uY2UpO1xuICB9XG5cbiAgcmV0dXJuIHN0eWxlO1xufVxuXG5mdW5jdGlvbiBnZXRVc2VyKCkge1xuICBjb25zdCBjdXJyZW50VXNlciA9IGdldEN1cnJlbnRTY29wZSgpLmdldFVzZXIoKTtcbiAgY29uc3QgaXNvbGF0aW9uVXNlciA9IGdldElzb2xhdGlvblNjb3BlKCkuZ2V0VXNlcigpO1xuICBjb25zdCBnbG9iYWxVc2VyID0gZ2V0R2xvYmFsU2NvcGUoKS5nZXRVc2VyKCk7XG4gIGlmIChjdXJyZW50VXNlciAmJiBPYmplY3Qua2V5cyhjdXJyZW50VXNlcikubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRVc2VyO1xuICB9XG4gIGlmIChpc29sYXRpb25Vc2VyICYmIE9iamVjdC5rZXlzKGlzb2xhdGlvblVzZXIpLmxlbmd0aCkge1xuICAgIHJldHVybiBpc29sYXRpb25Vc2VyO1xuICB9XG4gIHJldHVybiBnbG9iYWxVc2VyO1xufVxuXG5jb25zdCBmZWVkYmFja01vZGFsSW50ZWdyYXRpb24gPSAoKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdGZWVkYmFja01vZGFsJyxcbiAgICBzZXR1cE9uY2UoKSB7fSxcbiAgICBjcmVhdGVEaWFsb2c6ICh7IG9wdGlvbnMsIHNjcmVlbnNob3RJbnRlZ3JhdGlvbiwgc2VuZEZlZWRiYWNrLCBzaGFkb3cgfSkgPT4ge1xuICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IHNoYWRvdyA7XG4gICAgICBjb25zdCB1c2VyS2V5ID0gb3B0aW9ucy51c2VTZW50cnlVc2VyO1xuICAgICAgY29uc3QgdXNlciA9IGdldFVzZXIoKTtcblxuICAgICAgY29uc3QgZWwgPSBET0NVTUVOVC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGNvbnN0IHN0eWxlID0gY3JlYXRlRGlhbG9nU3R5bGVzKG9wdGlvbnMuc3R5bGVOb25jZSk7XG5cbiAgICAgIGxldCBvcmlnaW5hbE92ZXJmbG93ID0gJyc7XG4gICAgICBjb25zdCBkaWFsb2cgPSB7XG4gICAgICAgIGdldCBlbCgpIHtcbiAgICAgICAgICByZXR1cm4gZWw7XG4gICAgICAgIH0sXG4gICAgICAgIGFwcGVuZFRvRG9tKCkge1xuICAgICAgICAgIGlmICghc2hhZG93Um9vdC5jb250YWlucyhzdHlsZSkgJiYgIXNoYWRvd1Jvb3QuY29udGFpbnMoZWwpKSB7XG4gICAgICAgICAgICBzaGFkb3dSb290LmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICAgICAgICAgIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVtb3ZlRnJvbURvbSgpIHtcbiAgICAgICAgICBlbC5yZW1vdmUoKTtcbiAgICAgICAgICBzdHlsZS5yZW1vdmUoKTtcbiAgICAgICAgICBET0NVTUVOVC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gb3JpZ2luYWxPdmVyZmxvdztcbiAgICAgICAgfSxcbiAgICAgICAgb3BlbigpIHtcbiAgICAgICAgICByZW5kZXJDb250ZW50KHRydWUpO1xuICAgICAgICAgIG9wdGlvbnMub25Gb3JtT3Blbj8uKCk7XG4gICAgICAgICAgZ2V0Q2xpZW50KCk/LmVtaXQoJ29wZW5GZWVkYmFja1dpZGdldCcpO1xuICAgICAgICAgIG9yaWdpbmFsT3ZlcmZsb3cgPSBET0NVTUVOVC5ib2R5LnN0eWxlLm92ZXJmbG93O1xuICAgICAgICAgIERPQ1VNRU5ULmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgICAgfSxcbiAgICAgICAgY2xvc2UoKSB7XG4gICAgICAgICAgcmVuZGVyQ29udGVudChmYWxzZSk7XG4gICAgICAgICAgRE9DVU1FTlQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IG9yaWdpbmFsT3ZlcmZsb3c7XG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzY3JlZW5zaG90SW5wdXQgPSBzY3JlZW5zaG90SW50ZWdyYXRpb24/LmNyZWF0ZUlucHV0KHsgaDogeSQxLCBob29rcywgZGlhbG9nLCBvcHRpb25zIH0pO1xuXG4gICAgICBjb25zdCByZW5kZXJDb250ZW50ID0gKG9wZW4pID0+IHtcbiAgICAgICAgQiQxKFxuICAgICAgICAgIHkkMShEaWFsb2csIHtcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgICBzY3JlZW5zaG90SW5wdXQ6IHNjcmVlbnNob3RJbnB1dCxcbiAgICAgICAgICAgIHNob3dOYW1lOiBvcHRpb25zLnNob3dOYW1lIHx8IG9wdGlvbnMuaXNOYW1lUmVxdWlyZWQsXG4gICAgICAgICAgICBzaG93RW1haWw6IG9wdGlvbnMuc2hvd0VtYWlsIHx8IG9wdGlvbnMuaXNFbWFpbFJlcXVpcmVkLFxuICAgICAgICAgICAgZGVmYXVsdE5hbWU6ICh1c2VyS2V5ICYmIHVzZXI/Llt1c2VyS2V5Lm5hbWVdKSB8fCAnJyxcbiAgICAgICAgICAgIGRlZmF1bHRFbWFpbDogKHVzZXJLZXkgJiYgdXNlcj8uW3VzZXJLZXkuZW1haWxdKSB8fCAnJyxcbiAgICAgICAgICAgIG9uRm9ybUNsb3NlOiAoKSA9PiB7XG4gICAgICAgICAgICAgIHJlbmRlckNvbnRlbnQoZmFsc2UpO1xuICAgICAgICAgICAgICBvcHRpb25zLm9uRm9ybUNsb3NlPy4oKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblN1Ym1pdDogc2VuZEZlZWRiYWNrLFxuICAgICAgICAgICAgb25TdWJtaXRTdWNjZXNzOiAoZGF0YSwgZXZlbnRJZCkgPT4ge1xuICAgICAgICAgICAgICByZW5kZXJDb250ZW50KGZhbHNlKTtcbiAgICAgICAgICAgICAgb3B0aW9ucy5vblN1Ym1pdFN1Y2Nlc3M/LihkYXRhLCBldmVudElkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblN1Ym1pdEVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgb3B0aW9ucy5vblN1Ym1pdEVycm9yPy4oZXJyb3IpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRm9ybVN1Ym1pdHRlZDogKCkgPT4ge1xuICAgICAgICAgICAgICBvcHRpb25zLm9uRm9ybVN1Ym1pdHRlZD8uKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3Blbjogb3Blbix9XG4gICAgICAgICAgKSxcbiAgICAgICAgICBlbCxcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBkaWFsb2c7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuZnVuY3Rpb24gSWNvbkNsb3NlRmFjdG9yeSh7XG4gIGgsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG59KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJY29uQ2xvc2UoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGgoJ3N2ZycsIHsgJ2RhdGEtdGVzdC1pZCc6IFwiaWNvbi1jbG9zZVwiLCB2aWV3Qm94OiBcIjAgMCAxNiAxNlwiICAgLCBmaWxsOiBcIiMyQjIyMzNcIiwgaGVpZ2h0OiBcIjI1cHhcIiwgd2lkdGg6IFwiMjVweFwiLH1cbiAgICAgICAgLCBoKCdjaXJjbGUnLCB7IHI6IFwiN1wiLCBjeDogXCI4XCIsIGN5OiBcIjhcIiwgZmlsbDogXCJ3aGl0ZVwiLH0gKVxuICAgICAgICAsIGgoJ3BhdGgnLCB7XG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IFwiMS41XCIsXG4gICAgICAgICAgZDogXCJNOCwxNmE4LDgsMCwxLDEsOC04QTgsOCwwLDAsMSw4LDE2Wk04LDEuNTNBNi40Nyw2LjQ3LDAsMSwwLDE0LjQ3LDgsNi40Nyw2LjQ3LDAsMCwwLDgsMS41M1pcIix9XG4pXG4gICAgICAgICwgaCgncGF0aCcsIHtcbiAgICAgICAgICBzdHJva2VXaWR0aDogXCIxLjVcIixcbiAgICAgICAgICBkOiBcIk01LjM0LDExLjQxYS43MS43MSwwLDAsMS0uNTMtLjIyLjc0Ljc0LDAsMCwxLDAtMS4wNmw1LjMyLTUuMzJhLjc1Ljc1LDAsMCwxLDEuMDYsMS4wNkw1Ljg3LDExLjE5QS43NC43NCwwLDAsMSw1LjM0LDExLjQxWlwiLH1cbilcbiAgICAgICAgLCBoKCdwYXRoJywge1xuICAgICAgICAgIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICAgICAgICAgIGQ6IFwiTTEwLjY2LDExLjQxYS43NC43NCwwLDAsMS0uNTMtLjIyTDQuODEsNS44N0EuNzUuNzUsMCwwLDEsNS44Nyw0LjgxbDUuMzIsNS4zMmEuNzQuNzQsMCwwLDEsMCwxLjA2QS43MS43MSwwLDAsMSwxMC42NiwxMS40MVpcIix9XG4pXG4gICAgICApXG4gICAgKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIDxzdHlsZT4gZWxlbWVudCBmb3Igd2lkZ2V0IGRpYWxvZ1xuICovXG5mdW5jdGlvbiBjcmVhdGVTY3JlZW5zaG90SW5wdXRTdHlsZXMoc3R5bGVOb25jZSkge1xuICBjb25zdCBzdHlsZSA9IERPQ1VNRU5ULmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cbiAgY29uc3Qgc3VyZmFjZTIwMCA9ICcjMUExNDFGJztcbiAgY29uc3QgZ3JheTEwMCA9ICcjMzAyNzM1JztcblxuICBzdHlsZS50ZXh0Q29udGVudCA9IGBcbi5lZGl0b3Ige1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWdyb3c6IDE7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG5cbi5lZGl0b3JfX2ltYWdlLWNvbnRhaW5lciB7XG4gIGp1c3RpZnktaXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMTVweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLW1lbnUtYm9yZGVyLXJhZGl1cywgNnB4KTtcblxuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3N1cmZhY2UyMDB9O1xuICBiYWNrZ3JvdW5kLWltYWdlOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KFxuICAgICAgLTE0NWRlZyxcbiAgICAgIHRyYW5zcGFyZW50LFxuICAgICAgdHJhbnNwYXJlbnQgOHB4LFxuICAgICAgJHtzdXJmYWNlMjAwfSA4cHgsXG4gICAgICAke3N1cmZhY2UyMDB9IDExcHhcbiAgICApLFxuICAgIHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoXG4gICAgICAtNDVkZWcsXG4gICAgICB0cmFuc3BhcmVudCxcbiAgICAgIHRyYW5zcGFyZW50IDE1cHgsXG4gICAgICAke2dyYXkxMDB9IDE1cHgsXG4gICAgICAke2dyYXkxMDB9IDE2cHhcbiAgICApO1xufVxuXG4uZWRpdG9yX19jYW52YXMtY29udGFpbmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLmVkaXRvcl9fY2FudmFzLWNvbnRhaW5lciA+ICoge1xuICBvYmplY3QtZml0OiBjb250YWluO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG59XG5cbi5lZGl0b3JfX3Rvb2wtY29udGFpbmVyIHtcbiAgcGFkZGluZy10b3A6IDhweDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5lZGl0b3JfX3Rvb2wtYmFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiA4cHg7XG59XG5cbi5lZGl0b3JfX3Rvb2wge1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiA4cHggMTJweDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJvcmRlcjogdmFyKC0tYnV0dG9uLWJvcmRlciwgdmFyKC0tYm9yZGVyKSk7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJ1dHRvbi1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1idXR0b24tYmFja2dyb3VuZCwgdmFyKC0tYmFja2dyb3VuZCkpO1xuICBjb2xvcjogdmFyKC0tYnV0dG9uLWNvbG9yLCB2YXIoLS1mb3JlZ3JvdW5kKSk7XG59XG5cbi5lZGl0b3JfX3Rvb2wtLWFjdGl2ZSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWJ1dHRvbi1wcmltYXJ5LWJhY2tncm91bmQsIHZhcigtLWFjY2VudC1iYWNrZ3JvdW5kKSk7XG4gIGNvbG9yOiB2YXIoLS1idXR0b24tcHJpbWFyeS1jb2xvciwgdmFyKC0tYWNjZW50LWZvcmVncm91bmQpKTtcbn1cblxuLmVkaXRvcl9fcmVjdCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbn1cblxuLmVkaXRvcl9fcmVjdCBidXR0b24ge1xuICBvcGFjaXR5OiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogLTEycHg7XG4gIHJpZ2h0OiAtMTJweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwYWRkaW5nOiAwO1xuICB6LWluZGV4OiAzO1xuICBib3JkZXI6IG5vbmU7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG59XG5cbi5lZGl0b3JfX3JlY3Q6aG92ZXIgYnV0dG9uIHtcbiAgb3BhY2l0eTogMTtcbn1cbmA7XG5cbiAgaWYgKHN0eWxlTm9uY2UpIHtcbiAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgc3R5bGVOb25jZSk7XG4gIH1cblxuICByZXR1cm4gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIFRvb2xiYXJGYWN0b3J5KHtcbiAgaCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbn0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFRvb2xiYXIoe1xuICAgIGFjdGlvbixcbiAgICBzZXRBY3Rpb24sXG4gIH1cblxuKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGgoJ2RpdicsIHsgY2xhc3M6IFwiZWRpdG9yX190b29sLWNvbnRhaW5lclwiLH1cbiAgICAgICAgLCBoKCdkaXYnLCB7IGNsYXNzOiBcImVkaXRvcl9fdG9vbC1iYXJcIix9XG4gICAgICAgICAgLCBoKCdidXR0b24nLCB7XG4gICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgY2xhc3M6IGBlZGl0b3JfX3Rvb2wgJHthY3Rpb24gPT09ICdoaWdobGlnaHQnID8gJ2VkaXRvcl9fdG9vbC0tYWN0aXZlJyA6ICcnfWAsXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgIHNldEFjdGlvbihhY3Rpb24gPT09ICdoaWdobGlnaHQnID8gJycgOiAnaGlnaGxpZ2h0Jyk7XG4gICAgICAgICAgICB9LH1cbiwgXCJIaWdobGlnaHRcIlxuXG4gICAgICAgICAgKVxuICAgICAgICAgICwgaCgnYnV0dG9uJywge1xuICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgIGNsYXNzOiBgZWRpdG9yX190b29sICR7YWN0aW9uID09PSAnaGlkZScgPyAnZWRpdG9yX190b29sLS1hY3RpdmUnIDogJyd9YCxcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgc2V0QWN0aW9uKGFjdGlvbiA9PT0gJ2hpZGUnID8gJycgOiAnaGlkZScpO1xuICAgICAgICAgICAgfSx9XG4sIFwiSGlkZVwiXG5cbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VUYWtlU2NyZWVuc2hvdEZhY3RvcnkoeyBob29rcyB9KSB7XG4gIGZ1bmN0aW9uIHVzZURwaSgpIHtcbiAgICBjb25zdCBbZHBpLCBzZXREcGldID0gaG9va3MudXNlU3RhdGUoV0lORE9XLmRldmljZVBpeGVsUmF0aW8gPz8gMSk7XG4gICAgaG9va3MudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgICBzZXREcGkoV0lORE9XLmRldmljZVBpeGVsUmF0aW8pO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IG1lZGlhID0gbWF0Y2hNZWRpYShgKHJlc29sdXRpb246ICR7V0lORE9XLmRldmljZVBpeGVsUmF0aW99ZHBweClgKTtcbiAgICAgIG1lZGlhLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIG9uQ2hhbmdlKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIG1lZGlhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIG9uQ2hhbmdlKTtcbiAgICAgIH07XG4gICAgfSwgW10pO1xuXG4gICAgcmV0dXJuIGRwaTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiB1c2VUYWtlU2NyZWVuc2hvdCh7IG9uQmVmb3JlU2NyZWVuc2hvdCwgb25TY3JlZW5zaG90LCBvbkFmdGVyU2NyZWVuc2hvdCwgb25FcnJvciB9KSB7XG4gICAgY29uc3QgZHBpID0gdXNlRHBpKCk7XG5cbiAgICBob29rcy51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgdGFrZVNjcmVlbnNob3QgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIG9uQmVmb3JlU2NyZWVuc2hvdCgpO1xuXG4gICAgICAgIC8vIENocm9tZSB3aWxsIGFuaW1hdGUgYSB0b3AtYmFyIHdoaWNoIGNhbiBzaHJpbmsgdGhlIHdpbmRvdyBoZWlnaHQgYnkgYVxuICAgICAgICAvLyBmZXcgcGl4ZWxzLiBUaGUgZXhhY3QgYW1vdW50IGRlcGVuZHMgb24gaG93IGZhc3QgaXQgdGFrZXMgdG8gZXhlY1xuICAgICAgICAvLyB0aGUgb25sb2FkZWRtZXRhZGF0YSBjYWxsYmFjay5cbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzc1ODMzMDQ5XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IE5BVklHQVRPUi5tZWRpYURldmljZXMuZ2V0RGlzcGxheU1lZGlhKHtcbiAgICAgICAgICB2aWRlbzoge1xuICAgICAgICAgICAgd2lkdGg6IFdJTkRPVy5pbm5lcldpZHRoICogZHBpLFxuICAgICAgICAgICAgaGVpZ2h0OiBXSU5ET1cuaW5uZXJIZWlnaHQgKiBkcGksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhdWRpbzogZmFsc2UsXG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBleHBlcmltZW50YWwgZmxhZ3M6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9NZWRpYURldmljZXMvZ2V0RGlzcGxheU1lZGlhI3ByZWZlcmN1cnJlbnR0YWJcbiAgICAgICAgICBtb25pdG9yVHlwZVN1cmZhY2VzOiAnZXhjbHVkZScsXG4gICAgICAgICAgcHJlZmVyQ3VycmVudFRhYjogdHJ1ZSxcbiAgICAgICAgICBzZWxmQnJvd3NlclN1cmZhY2U6ICdpbmNsdWRlJyxcbiAgICAgICAgICBzdXJmYWNlU3dpdGNoaW5nOiAnZXhjbHVkZScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHZpZGVvID0gRE9DVU1FTlQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHZpZGVvLnNyY09iamVjdCA9IHN0cmVhbTtcbiAgICAgICAgICB2aWRlby5vbmxvYWRlZG1ldGFkYXRhID0gKCkgPT4ge1xuICAgICAgICAgICAgb25TY3JlZW5zaG90KHZpZGVvLCBkcGkpO1xuICAgICAgICAgICAgc3RyZWFtLmdldFRyYWNrcygpLmZvckVhY2godHJhY2sgPT4gdHJhY2suc3RvcCgpKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHZpZGVvLnBsYXkoKS5jYXRjaChyZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgICAgb25BZnRlclNjcmVlbnNob3QoKTtcbiAgICAgIH07XG5cbiAgICAgIHRha2VTY3JlZW5zaG90KCkuY2F0Y2gob25FcnJvcik7XG4gICAgfSwgW10pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkcmF3UmVjdChjb21tYW5kLCBjdHgsIGNvbG9yKSB7XG4gIHN3aXRjaCAoY29tbWFuZC50eXBlKSB7XG4gICAgY2FzZSAnaGlnaGxpZ2h0Jzoge1xuICAgICAgLy8gY3JlYXRlcyBhIHNoYWRvdyBhcm91bmRcbiAgICAgIGN0eC5zaGFkb3dDb2xvciA9ICdyZ2JhKDAsIDAsIDAsIDAuNyknO1xuICAgICAgY3R4LnNoYWRvd0JsdXIgPSA1MDtcblxuICAgICAgLy8gZHJhd3MgYSByZWN0YW5nbGUgZmlyc3Qgd2l0aCBhIHNoYWRvd1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IGNvbG9yO1xuICAgICAgY3R4LmZpbGxSZWN0KGNvbW1hbmQueCAtIDEsIGNvbW1hbmQueSAtIDEsIGNvbW1hbmQudyArIDIsIGNvbW1hbmQuaCArIDIpO1xuXG4gICAgICAvLyBjdXQgb3V0IHRoZSBpbnNpZGUgb2YgdGhlIHJlY3RhbmdsZVxuICAgICAgY3R4LmNsZWFyUmVjdChjb21tYW5kLngsIGNvbW1hbmQueSwgY29tbWFuZC53LCBjb21tYW5kLmgpO1xuXG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAnaGlkZSc6XG4gICAgICBjdHguZmlsbFN0eWxlID0gJ3JnYigwLCAwLCAwKSc7XG4gICAgICBjdHguZmlsbFJlY3QoY29tbWFuZC54LCBjb21tYW5kLnksIGNvbW1hbmQudywgY29tbWFuZC5oKTtcblxuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gd2l0aDJkQ29udGV4dChcbiAgY2FudmFzLFxuICBvcHRpb25zLFxuICBjYWxsYmFjayxcbikge1xuICBpZiAoIWNhbnZhcykge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnLCBvcHRpb25zKTtcbiAgaWYgKCFjdHgpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY2FsbGJhY2soY2FudmFzLCBjdHgpO1xufVxuXG5mdW5jdGlvbiBwYWludEltYWdlKG1heWJlRGVzdCwgc291cmNlKSB7XG4gIHdpdGgyZENvbnRleHQobWF5YmVEZXN0LCB7IGFscGhhOiB0cnVlIH0sIChkZXN0Q2FudmFzLCBkZXN0Q3R4KSA9PiB7XG4gICAgZGVzdEN0eC5kcmF3SW1hZ2Uoc291cmNlLCAwLCAwLCBzb3VyY2Uud2lkdGgsIHNvdXJjZS5oZWlnaHQsIDAsIDAsIGRlc3RDYW52YXMud2lkdGgsIGRlc3RDYW52YXMuaGVpZ2h0KTtcbiAgfSk7XG59XG5cbi8vIFBhaW50IHRoZSBhcnJheSBvZiBkcmF3Q29tbWFuZHMgaW50byBhIGNhbnZhcy5cbi8vIEFzc3VtaW5nIHRoaXMgaXMgdGhlIGNhbnZhcyBmb3JlZ3JvdW5kLCBhbmQgdGhlIGJhY2tncm91bmQgaXMgY2xlYW5lZC5cbmZ1bmN0aW9uIHBhaW50Rm9yZWdyb3VuZChtYXliZUNhbnZhcywgc3Ryb2tlQ29sb3IsIGRyYXdDb21tYW5kcykge1xuICB3aXRoMmRDb250ZXh0KG1heWJlQ2FudmFzLCB7IGFscGhhOiB0cnVlIH0sIChjYW52YXMsIGN0eCkgPT4ge1xuICAgIC8vIElmIHRoZXJlJ3MgYW55dGhpbmcgdG8gZHJhdywgdGhlbiB3ZSdsbCBmaXJzdCBjbGVhciB0aGUgY2FudmFzIHdpdGhcbiAgICAvLyBhIHRyYW5zcGFyZW50IGdyZXkgYmFja2dyb3VuZFxuICAgIGlmIChkcmF3Q29tbWFuZHMubGVuZ3RoKSB7XG4gICAgICBjdHguZmlsbFN0eWxlID0gJ3JnYmEoMCwgMCwgMCwgMC4yNSknO1xuICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgfVxuXG4gICAgZHJhd0NvbW1hbmRzLmZvckVhY2goY29tbWFuZCA9PiB7XG4gICAgICBkcmF3UmVjdChjb21tYW5kLCBjdHgsIHN0cm9rZUNvbG9yKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIFNjcmVlbnNob3RFZGl0b3JGYWN0b3J5KHtcbiAgaCxcbiAgaG9va3MsXG4gIG91dHB1dEJ1ZmZlcixcbiAgZGlhbG9nLFxuICBvcHRpb25zLFxufSkge1xuICBjb25zdCB1c2VUYWtlU2NyZWVuc2hvdCA9IHVzZVRha2VTY3JlZW5zaG90RmFjdG9yeSh7IGhvb2tzIH0pO1xuICBjb25zdCBUb29sYmFyID0gVG9vbGJhckZhY3RvcnkoeyBoIH0pO1xuICBjb25zdCBJY29uQ2xvc2UgPSBJY29uQ2xvc2VGYWN0b3J5KHsgaCB9KTtcbiAgY29uc3QgZWRpdG9yU3R5bGVJbm5lclRleHQgPSB7IF9faHRtbDogY3JlYXRlU2NyZWVuc2hvdElucHV0U3R5bGVzKG9wdGlvbnMuc3R5bGVOb25jZSkuaW5uZXJUZXh0IH07XG5cbiAgY29uc3QgZGlhbG9nU3R5bGUgPSAoZGlhbG9nLmVsICkuc3R5bGU7XG5cbiAgY29uc3QgU2NyZWVuc2hvdEVkaXRvciA9ICh7IHNjcmVlbnNob3QgfSkgPT4ge1xuICAgIC8vIERhdGEgZm9yIHJlbmRlcmluZzpcbiAgICBjb25zdCBbYWN0aW9uLCBzZXRBY3Rpb25dID0gaG9va3MudXNlU3RhdGUoJ2hpZ2hsaWdodCcpO1xuICAgIGNvbnN0IFtkcmF3Q29tbWFuZHMsIHNldERyYXdDb21tYW5kc10gPSBob29rcy51c2VTdGF0ZShbXSk7XG5cbiAgICAvLyBSZWZzIHRvIG91ciBodG1sIGNvbXBvbmVudHM6XG4gICAgY29uc3QgbWVhc3VyZW1lbnRSZWYgPSBob29rcy51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgYmFja2dyb3VuZFJlZiA9IGhvb2tzLnVzZVJlZihudWxsKTtcbiAgICBjb25zdCBmb3JlZ3JvdW5kUmVmID0gaG9va3MudXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IG1vdXNlUmVmID0gaG9va3MudXNlUmVmKG51bGwpO1xuXG4gICAgLy8gVGhlIHNpemUgb2Ygb3VyIHdpbmRvdywgcmVsYXRpdmUgdG8gdGhlIGltYWdlU291cmNlXG4gICAgY29uc3QgW3NjYWxlRmFjdG9yLCBzZXRTY2FsZUZhY3Rvcl0gPSBob29rcy51c2VTdGF0ZSgxKTtcblxuICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gaG9va3MudXNlTWVtbygoKSA9PiB7XG4gICAgICBjb25zdCBzZW50cnlGZWVkYmFjayA9IERPQ1VNRU5ULmdldEVsZW1lbnRCeUlkKG9wdGlvbnMuaWQpO1xuICAgICAgaWYgKCFzZW50cnlGZWVkYmFjaykge1xuICAgICAgICByZXR1cm4gJ3doaXRlJztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHNlbnRyeUZlZWRiYWNrKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnLS1idXR0b24tcHJpbWFyeS1iYWNrZ3JvdW5kJykgfHxcbiAgICAgICAgY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLWFjY2VudC1iYWNrZ3JvdW5kJylcbiAgICAgICk7XG4gICAgfSwgW29wdGlvbnMuaWRdKTtcblxuICAgIC8vIFRoZSBpbml0aWFsIHJlc2l6ZSwgdG8gbWVhc3VyZSB0aGUgYXJlYSBhbmQgc2V0IHRoZSBjaGlsZHJlbiB0byB0aGUgY29ycmVjdCBzaXplXG4gICAgaG9va3MudXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZVJlc2l6ZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgbWVhc3VyZW1lbnREaXYgPSBtZWFzdXJlbWVudFJlZi5jdXJyZW50O1xuICAgICAgICBpZiAoIW1lYXN1cmVtZW50RGl2KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgd2l0aDJkQ29udGV4dChzY3JlZW5zaG90LmNhbnZhcywgeyBhbHBoYTogZmFsc2UgfSwgY2FudmFzID0+IHtcbiAgICAgICAgICBjb25zdCBzY2FsZSA9IE1hdGgubWluKFxuICAgICAgICAgICAgbWVhc3VyZW1lbnREaXYuY2xpZW50V2lkdGggLyBjYW52YXMud2lkdGgsXG4gICAgICAgICAgICBtZWFzdXJlbWVudERpdi5jbGllbnRIZWlnaHQgLyBjYW52YXMuaGVpZ2h0LFxuICAgICAgICAgICk7XG4gICAgICAgICAgc2V0U2NhbGVGYWN0b3Ioc2NhbGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBGb3IgRmlyZWZveCwgdGhlIGNhbnZhcyBpcyBub3QgeWV0IG1lYXN1cmVkLCBzbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIGl0IHRvIGdldCB0aGUgY29ycmVjdCBzaXplXG4gICAgICAgIGlmIChtZWFzdXJlbWVudERpdi5jbGllbnRIZWlnaHQgPT09IDAgfHwgbWVhc3VyZW1lbnREaXYuY2xpZW50V2lkdGggPT09IDApIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KGhhbmRsZVJlc2l6ZSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGhhbmRsZVJlc2l6ZSgpO1xuICAgICAgV0lORE9XLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBXSU5ET1cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgICAgIH07XG4gICAgfSwgW3NjcmVlbnNob3RdKTtcblxuICAgIC8vIFNldCB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzIGVsZW1lbnQgdG8gbWF0Y2ggb3VyIHNjcmVlbnNob3RcbiAgICBjb25zdCBzZXRDYW52YXNTaXplID0gaG9va3MudXNlQ2FsbGJhY2soXG4gICAgICAobWF5YmVDYW52YXMsIHNjYWxlKSA9PiB7XG4gICAgICAgIHdpdGgyZENvbnRleHQobWF5YmVDYW52YXMsIHsgYWxwaGE6IHRydWUgfSwgKGNhbnZhcywgY3R4KSA9PiB7XG4gICAgICAgICAgLy8gTXVzdCBjYWxsIGBzY2FsZSgpYCBiZWZvcmUgc2V0dGluZyBgd2lkdGhgICYgYGhlaWdodGBcbiAgICAgICAgICBjdHguc2NhbGUoc2NhbGUsIHNjYWxlKTtcbiAgICAgICAgICBjYW52YXMud2lkdGggPSBzY3JlZW5zaG90LmNhbnZhcy53aWR0aDtcbiAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gc2NyZWVuc2hvdC5jYW52YXMuaGVpZ2h0O1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBbc2NyZWVuc2hvdF0sXG4gICAgKTtcblxuICAgIC8vIERyYXcgdGhlIHNjcmVlbnNob3QgaW50byB0aGUgYmFja2dyb3VuZFxuICAgIGhvb2tzLnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBzZXRDYW52YXNTaXplKGJhY2tncm91bmRSZWYuY3VycmVudCwgc2NyZWVuc2hvdC5kcGkpO1xuICAgICAgcGFpbnRJbWFnZShiYWNrZ3JvdW5kUmVmLmN1cnJlbnQsIHNjcmVlbnNob3QuY2FudmFzKTtcbiAgICB9LCBbc2NyZWVuc2hvdF0pO1xuXG4gICAgLy8gRHJhdyB0aGUgY29tbWFuZHMgaW50byB0aGUgZm9yZWdyb3VuZFxuICAgIGhvb2tzLnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBzZXRDYW52YXNTaXplKGZvcmVncm91bmRSZWYuY3VycmVudCwgc2NyZWVuc2hvdC5kcGkpO1xuICAgICAgd2l0aDJkQ29udGV4dChmb3JlZ3JvdW5kUmVmLmN1cnJlbnQsIHsgYWxwaGE6IHRydWUgfSwgKGNhbnZhcywgY3R4KSA9PiB7XG4gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICAgIH0pO1xuICAgICAgcGFpbnRGb3JlZ3JvdW5kKGZvcmVncm91bmRSZWYuY3VycmVudCwgc3Ryb2tlQ29sb3IsIGRyYXdDb21tYW5kcyk7XG4gICAgfSwgW2RyYXdDb21tYW5kcywgc3Ryb2tlQ29sb3JdKTtcblxuICAgIC8vIERyYXcgaW50byB0aGUgb3V0cHV0IG91dHB1dEJ1ZmZlclxuICAgIGhvb2tzLnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBzZXRDYW52YXNTaXplKG91dHB1dEJ1ZmZlciwgc2NyZWVuc2hvdC5kcGkpO1xuICAgICAgcGFpbnRJbWFnZShvdXRwdXRCdWZmZXIsIHNjcmVlbnNob3QuY2FudmFzKTtcbiAgICAgIHdpdGgyZENvbnRleHQoRE9DVU1FTlQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyksIHsgYWxwaGE6IHRydWUgfSwgKGZvcmVncm91bmQsIGN0eCkgPT4ge1xuICAgICAgICBjdHguc2NhbGUoc2NyZWVuc2hvdC5kcGksIHNjcmVlbnNob3QuZHBpKTsgLy8gVGhlIHNjYWxlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgd2Ugc2V0IHRoZSB3aWR0aC9oZWlnaHQgYW5kIHBhaW50XG4gICAgICAgIGZvcmVncm91bmQud2lkdGggPSBzY3JlZW5zaG90LmNhbnZhcy53aWR0aDtcbiAgICAgICAgZm9yZWdyb3VuZC5oZWlnaHQgPSBzY3JlZW5zaG90LmNhbnZhcy5oZWlnaHQ7XG4gICAgICAgIHBhaW50Rm9yZWdyb3VuZChmb3JlZ3JvdW5kLCBzdHJva2VDb2xvciwgZHJhd0NvbW1hbmRzKTtcbiAgICAgICAgcGFpbnRJbWFnZShvdXRwdXRCdWZmZXIsIGZvcmVncm91bmQpO1xuICAgICAgfSk7XG4gICAgfSwgW2RyYXdDb21tYW5kcywgc2NyZWVuc2hvdCwgc3Ryb2tlQ29sb3JdKTtcblxuICAgIGNvbnN0IGhhbmRsZU1vdXNlRG93biA9IChlKSA9PiB7XG4gICAgICBpZiAoIWFjdGlvbiB8fCAhbW91c2VSZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJvdW5kaW5nUmVjdCA9IG1vdXNlUmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBzdGFydGluZ1BvaW50ID0ge1xuICAgICAgICB0eXBlOiBhY3Rpb24sXG4gICAgICAgIHg6IGUub2Zmc2V0WCAvIHNjYWxlRmFjdG9yLFxuICAgICAgICB5OiBlLm9mZnNldFkgLyBzY2FsZUZhY3Rvcn07XG5cbiAgICAgIGNvbnN0IGdldERyYXdDb21tYW5kID0gKHN0YXJ0aW5nUG9pbnQsIGUpID0+IHtcbiAgICAgICAgY29uc3QgeCA9IChlLmNsaWVudFggLSBib3VuZGluZ1JlY3QueCkgLyBzY2FsZUZhY3RvcjtcbiAgICAgICAgY29uc3QgeSA9IChlLmNsaWVudFkgLSBib3VuZGluZ1JlY3QueSkgLyBzY2FsZUZhY3RvcjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBzdGFydGluZ1BvaW50LnR5cGUsXG4gICAgICAgICAgeDogTWF0aC5taW4oc3RhcnRpbmdQb2ludC54LCB4KSxcbiAgICAgICAgICB5OiBNYXRoLm1pbihzdGFydGluZ1BvaW50LnksIHkpLFxuICAgICAgICAgIHc6IE1hdGguYWJzKHggLSBzdGFydGluZ1BvaW50LngpLFxuICAgICAgICAgIGg6IE1hdGguYWJzKHkgLSBzdGFydGluZ1BvaW50LnkpLFxuICAgICAgICB9IDtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhhbmRsZU1vdXNlTW92ZSA9IChlKSA9PiB7XG4gICAgICAgIHdpdGgyZENvbnRleHQoZm9yZWdyb3VuZFJlZi5jdXJyZW50LCB7IGFscGhhOiB0cnVlIH0sIChjYW52YXMsIGN0eCkgPT4ge1xuICAgICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBhaW50Rm9yZWdyb3VuZChmb3JlZ3JvdW5kUmVmLmN1cnJlbnQsIHN0cm9rZUNvbG9yLCBbLi4uZHJhd0NvbW1hbmRzLCBnZXREcmF3Q29tbWFuZChzdGFydGluZ1BvaW50LCBlKV0pO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgaGFuZGxlTW91c2VVcCA9IChlKSA9PiB7XG4gICAgICAgIGNvbnN0IGRyYXdDb21tYW5kID0gZ2V0RHJhd0NvbW1hbmQoc3RhcnRpbmdQb2ludCwgZSk7XG5cbiAgICAgICAgLy8gUHJldmVudCBqdXN0IGNsaWNraW5nIG9udG8gdGhlIGNhbnZhcywgbW91c2UgaGFzIHRvIG1vdmUgYXQgbGVhc3QgMSBwaXhlbFxuICAgICAgICBpZiAoZHJhd0NvbW1hbmQudyAqIHNjYWxlRmFjdG9yID49IDEgJiYgZHJhd0NvbW1hbmQuaCAqIHNjYWxlRmFjdG9yID49IDEpIHtcbiAgICAgICAgICBzZXREcmF3Q29tbWFuZHMocHJldiA9PiBbLi4ucHJldiwgZHJhd0NvbW1hbmRdKTtcbiAgICAgICAgfVxuICAgICAgICBET0NVTUVOVC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVNb3VzZU1vdmUpO1xuICAgICAgICBET0NVTUVOVC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgaGFuZGxlTW91c2VVcCk7XG4gICAgICB9O1xuXG4gICAgICBET0NVTUVOVC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVNb3VzZU1vdmUpO1xuICAgICAgRE9DVU1FTlQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGhhbmRsZU1vdXNlVXApO1xuICAgIH07XG5cbiAgICBjb25zdCBkZWxldGVSZWN0ID0gaG9va3MudXNlQ2FsbGJhY2soKGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gKGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBzZXREcmF3Q29tbWFuZHMocHJldiA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZFJlY3RzID0gWy4uLnByZXZdO1xuICAgICAgICAgIHVwZGF0ZWRSZWN0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVkUmVjdHM7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBkaW1lbnNpb25zID0ge1xuICAgICAgd2lkdGg6IGAke3NjcmVlbnNob3QuY2FudmFzLndpZHRoICogc2NhbGVGYWN0b3J9cHhgLFxuICAgICAgaGVpZ2h0OiBgJHtzY3JlZW5zaG90LmNhbnZhcy5oZWlnaHQgKiBzY2FsZUZhY3Rvcn1weGAsXG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZVN0b3BQcm9wYWdhdGlvbiA9IChlKSA9PiB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgaCgnZGl2JywgeyBjbGFzczogXCJlZGl0b3JcIix9XG4gICAgICAgICwgaCgnc3R5bGUnLCB7IG5vbmNlOiBvcHRpb25zLnN0eWxlTm9uY2UsIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiBlZGl0b3JTdHlsZUlubmVyVGV4dCx9IClcbiAgICAgICAgLCBoKCdkaXYnLCB7IGNsYXNzOiBcImVkaXRvcl9faW1hZ2UtY29udGFpbmVyXCIsfVxuICAgICAgICAgICwgaCgnZGl2JywgeyBjbGFzczogXCJlZGl0b3JfX2NhbnZhcy1jb250YWluZXJcIiwgcmVmOiBtZWFzdXJlbWVudFJlZix9XG4gICAgICAgICAgICAsIGgoJ2NhbnZhcycsIHsgcmVmOiBiYWNrZ3JvdW5kUmVmLCBpZDogXCJiYWNrZ3JvdW5kXCIsIHN0eWxlOiBkaW1lbnNpb25zLH0gKVxuICAgICAgICAgICAgLCBoKCdjYW52YXMnLCB7IHJlZjogZm9yZWdyb3VuZFJlZiwgaWQ6IFwiZm9yZWdyb3VuZFwiLCBzdHlsZTogZGltZW5zaW9ucyx9IClcbiAgICAgICAgICAgICwgaCgnZGl2JywgeyByZWY6IG1vdXNlUmVmLCBvbk1vdXNlRG93bjogaGFuZGxlTW91c2VEb3duLCBzdHlsZTogZGltZW5zaW9ucyx9XG4gICAgICAgICAgICAgICwgZHJhd0NvbW1hbmRzLm1hcCgocmVjdCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICBoKCdkaXYnLCB7XG4gICAgICAgICAgICAgICAgICBrZXk6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IFwiZWRpdG9yX19yZWN0XCIsXG4gICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IGAke3JlY3QueSAqIHNjYWxlRmFjdG9yfXB4YCxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogYCR7cmVjdC54ICogc2NhbGVGYWN0b3J9cHhgLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogYCR7cmVjdC53ICogc2NhbGVGYWN0b3J9cHhgLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGAke3JlY3QuaCAqIHNjYWxlRmFjdG9yfXB4YCxcbiAgICAgICAgICAgICAgICAgIH0sfVxuXG4gICAgICAgICAgICAgICAgICAsIGgoJ2J1dHRvbicsIHtcbiAgICAgICAgICAgICAgICAgICAgJ2FyaWEtbGFiZWwnOiBcIlJlbW92ZVwiLFxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiBkZWxldGVSZWN0KGluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZURvd246IGhhbmRsZVN0b3BQcm9wYWdhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZVVwOiBoYW5kbGVTdG9wUHJvcGFnYXRpb24sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsfVxuXG4gICAgICAgICAgICAgICAgICAgICwgaChJY29uQ2xvc2UsIG51bGwgKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgLCBoKFRvb2xiYXIsIHsgYWN0aW9uOiBhY3Rpb24sIHNldEFjdGlvbjogc2V0QWN0aW9uLH0gKVxuICAgICAgKVxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIFdyYXBwZXIoeyBvbkVycm9yIH0pIHtcbiAgICBjb25zdCBbc2NyZWVuc2hvdCwgc2V0U2NyZWVuc2hvdF0gPSBob29rcy51c2VTdGF0ZSgpO1xuXG4gICAgdXNlVGFrZVNjcmVlbnNob3Qoe1xuICAgICAgb25CZWZvcmVTY3JlZW5zaG90OiBob29rcy51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIGRpYWxvZ1N0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9LCBbXSksXG4gICAgICBvblNjcmVlbnNob3Q6IGhvb2tzLnVzZUNhbGxiYWNrKChzY3JlZW5zaG90VmlkZW8sIGRwaSkgPT4ge1xuICAgICAgICAvLyBTdGFzaCB0aGUgb3JpZ2luYWwgc2NyZWVuc2hvdCBpbWFnZSBzbyB3ZSBjYW4gKHJlKWRyYXcgaXQgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgd2l0aDJkQ29udGV4dChET0NVTUVOVC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSwgeyBhbHBoYTogZmFsc2UgfSwgKGNhbnZhcywgY3R4KSA9PiB7XG4gICAgICAgICAgY3R4LnNjYWxlKGRwaSwgZHBpKTsgLy8gVGhlIHNjYWxlIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgd2Ugc2V0IHRoZSB3aWR0aC9oZWlnaHQgYW5kIHBhaW50XG4gICAgICAgICAgY2FudmFzLndpZHRoID0gc2NyZWVuc2hvdFZpZGVvLnZpZGVvV2lkdGg7XG4gICAgICAgICAgY2FudmFzLmhlaWdodCA9IHNjcmVlbnNob3RWaWRlby52aWRlb0hlaWdodDtcbiAgICAgICAgICBjdHguZHJhd0ltYWdlKHNjcmVlbnNob3RWaWRlbywgMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcblxuICAgICAgICAgIHNldFNjcmVlbnNob3QoeyBjYW52YXMsIGRwaSB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVGhlIG91dHB1dCBidWZmZXIsIHdlIG9ubHkgbmVlZCB0byBzZXQgdGhlIHdpZHRoL2hlaWdodCBvbiB0aGlzIG9uY2UsIGl0IHN0YXlzIHRoZSBzYW1lIGZvcmV2ZXJcbiAgICAgICAgb3V0cHV0QnVmZmVyLndpZHRoID0gc2NyZWVuc2hvdFZpZGVvLnZpZGVvV2lkdGg7XG4gICAgICAgIG91dHB1dEJ1ZmZlci5oZWlnaHQgPSBzY3JlZW5zaG90VmlkZW8udmlkZW9IZWlnaHQ7XG4gICAgICB9LCBbXSksXG4gICAgICBvbkFmdGVyU2NyZWVuc2hvdDogaG9va3MudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBkaWFsb2dTdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIH0sIFtdKSxcbiAgICAgIG9uRXJyb3I6IGhvb2tzLnVzZUNhbGxiYWNrKGVycm9yID0+IHtcbiAgICAgICAgZGlhbG9nU3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIG9uRXJyb3IoZXJyb3IpO1xuICAgICAgfSwgW10pLFxuICAgIH0pO1xuXG4gICAgaWYgKHNjcmVlbnNob3QpIHtcbiAgICAgIHJldHVybiBoKFNjcmVlbnNob3RFZGl0b3IsIHsgc2NyZWVuc2hvdDogc2NyZWVuc2hvdCx9ICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGgoJ2RpdicsIG51bGwgKTtcbiAgfTtcbn1cblxuY29uc3QgZmVlZGJhY2tTY3JlZW5zaG90SW50ZWdyYXRpb24gPSAoKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdGZWVkYmFja1NjcmVlbnNob3QnLFxuICAgIHNldHVwT25jZSgpIHt9LFxuICAgIGNyZWF0ZUlucHV0OiAoeyBoLCBob29rcywgZGlhbG9nLCBvcHRpb25zIH0pID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dEJ1ZmZlciA9IERPQ1VNRU5ULmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbnB1dDogU2NyZWVuc2hvdEVkaXRvckZhY3Rvcnkoe1xuICAgICAgICAgIGg6IGggLFxuICAgICAgICAgIGhvb2tzOiBob29rcyAsXG4gICAgICAgICAgb3V0cHV0QnVmZmVyLFxuICAgICAgICAgIGRpYWxvZyxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KSAsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXG4gICAgICAgIHZhbHVlOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgb3V0cHV0QnVmZmVyLnRvQmxvYihyZXNvbHZlLCAnaW1hZ2UvcG5nJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGJsb2IpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheShhd2FpdCBibG9iLmFycmF5QnVmZmVyKCkpO1xuICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IHtcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgZmlsZW5hbWU6ICdzY3JlZW5zaG90LnBuZycsXG4gICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vcG5nJyxcbiAgICAgICAgICAgICAgLy8gYXR0YWNobWVudFR5cGU/OiBzdHJpbmc7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGF0dGFjaG1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0sXG4gIH07XG59KSA7XG5cbmV4cG9ydCB7IGJ1aWxkRmVlZGJhY2tJbnRlZ3JhdGlvbiwgZmVlZGJhY2tNb2RhbEludGVncmF0aW9uLCBmZWVkYmFja1NjcmVlbnNob3RJbnRlZ3JhdGlvbiwgZ2V0RmVlZGJhY2ssIHNlbmRGZWVkYmFjayB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+feedback@9.46.0/node_modules/@sentry-internal/feedback/build/npm/esm/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+replay-canvas@9.46.0/node_modules/@sentry-internal/replay-canvas/build/npm/esm/index.js":
/*!*************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+replay-canvas@9.46.0/node_modules/@sentry-internal/replay-canvas/build/npm/esm/index.js ***!
  \*************************************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   replayCanvasIntegration: () => (/* binding */ replayCanvasIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n\n\nvar __defProp$1 = Object.defineProperty;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nclass Mirror {\n  constructor() {\n    __publicField$1(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n    __publicField$1(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n  }\n  getId(n2) {\n    if (!n2) return -1;\n    const id = this.getMeta(n2)?.id;\n    return id ?? -1;\n  }\n  getNode(id) {\n    return this.idNodeMap.get(id) || null;\n  }\n  getIds() {\n    return Array.from(this.idNodeMap.keys());\n  }\n  getMeta(n2) {\n    return this.nodeMetaMap.get(n2) || null;\n  }\n  // removes the node from idNodeMap\n  // doesn't remove the node from nodeMetaMap\n  removeNodeFromMap(n2) {\n    const id = this.getId(n2);\n    this.idNodeMap.delete(id);\n    if (n2.childNodes) {\n      n2.childNodes.forEach(\n        (childNode) => this.removeNodeFromMap(childNode)\n      );\n    }\n  }\n  has(id) {\n    return this.idNodeMap.has(id);\n  }\n  hasNode(node) {\n    return this.nodeMetaMap.has(node);\n  }\n  add(n2, meta) {\n    const id = meta.id;\n    this.idNodeMap.set(id, n2);\n    this.nodeMetaMap.set(n2, meta);\n  }\n  replace(id, n2) {\n    const oldNode = this.getNode(id);\n    if (oldNode) {\n      const meta = this.nodeMetaMap.get(oldNode);\n      if (meta) this.nodeMetaMap.set(n2, meta);\n    }\n    this.idNodeMap.set(id, n2);\n  }\n  reset() {\n    this.idNodeMap = /* @__PURE__ */ new Map();\n    this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n  }\n}\nfunction createMirror$2() {\n  return new Mirror();\n}\nfunction elementClassMatchesRegex(el, regex) {\n  for (let eIndex = el.classList.length; eIndex--; ) {\n    const className = el.classList[eIndex];\n    if (regex.test(className)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\n  if (!node) return -1;\n  if (node.nodeType !== node.ELEMENT_NODE) return -1;\n  if (distance > limit) return -1;\n  if (matchPredicate(node)) return distance;\n  return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\n}\nfunction createMatchPredicate(className, selector) {\n  return (node) => {\n    const el = node;\n    if (el === null) return false;\n    try {\n      if (className) {\n        if (typeof className === \"string\") {\n          if (el.matches(`.${className}`)) return true;\n        } else if (elementClassMatchesRegex(el, className)) {\n          return true;\n        }\n      }\n      if (selector && el.matches(selector)) return true;\n      return false;\n    } catch {\n      return false;\n    }\n  };\n}\nconst DEPARTED_MIRROR_ACCESS_WARNING = \"Please stop import mirror directly. Instead of that,\\r\\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\\r\\nor you can use record.mirror to access the mirror instance during recording.\";\nlet _mirror = {\n  map: {},\n  getId() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    return -1;\n  },\n  getNode() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    return null;\n  },\n  removeNodeFromMap() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n  },\n  has() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    return false;\n  },\n  reset() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n  }\n};\nif (typeof window !== \"undefined\" && window.Proxy && window.Reflect) {\n  _mirror = new Proxy(_mirror, {\n    get(target, prop, receiver) {\n      if (prop === \"map\") {\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction hookSetter(target, key, d, isRevoked, win = window) {\n  const original = win.Object.getOwnPropertyDescriptor(target, key);\n  win.Object.defineProperty(\n    target,\n    key,\n    isRevoked ? d : {\n      set(value) {\n        setTimeout$1(() => {\n          d.set.call(this, value);\n        }, 0);\n        if (original && original.set) {\n          original.set.call(this, value);\n        }\n      }\n    }\n  );\n  return () => hookSetter(target, key, original || {}, true);\n}\nfunction patch(source, name, replacement) {\n  try {\n    if (!(name in source)) {\n      return () => {\n      };\n    }\n    const original = source[name];\n    const wrapped = replacement(original);\n    if (typeof wrapped === \"function\") {\n      wrapped.prototype = wrapped.prototype || {};\n      Object.defineProperties(wrapped, {\n        __rrweb_original__: {\n          enumerable: false,\n          value: original\n        }\n      });\n    }\n    source[name] = wrapped;\n    return () => {\n      source[name] = original;\n    };\n  } catch {\n    return () => {\n    };\n  }\n}\nif (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) ;\nfunction closestElementOfNode(node) {\n  if (!node) {\n    return null;\n  }\n  try {\n    const el = node.nodeType === node.ELEMENT_NODE ? node : node.parentElement;\n    return el;\n  } catch (error) {\n    return null;\n  }\n}\nfunction isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {\n  if (!node) {\n    return false;\n  }\n  const el = closestElementOfNode(node);\n  if (!el) {\n    return false;\n  }\n  const blockedPredicate = createMatchPredicate(blockClass, blockSelector);\n  if (!checkAncestors) {\n    const isUnblocked = unblockSelector && el.matches(unblockSelector);\n    return blockedPredicate(el) && !isUnblocked;\n  }\n  const blockDistance = distanceToMatch(el, blockedPredicate);\n  let unblockDistance = -1;\n  if (blockDistance < 0) {\n    return false;\n  }\n  if (unblockSelector) {\n    unblockDistance = distanceToMatch(\n      el,\n      createMatchPredicate(null, unblockSelector)\n    );\n  }\n  if (blockDistance > -1 && unblockDistance < 0) {\n    return true;\n  }\n  return blockDistance < unblockDistance;\n}\nconst cachedImplementations = {};\nfunction getImplementation(name) {\n  const cached = cachedImplementations[name];\n  if (cached) {\n    return cached;\n  }\n  const document2 = window.document;\n  let impl = window[name];\n  if (document2 && typeof document2.createElement === \"function\") {\n    try {\n      const sandbox = document2.createElement(\"iframe\");\n      sandbox.hidden = true;\n      document2.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow && contentWindow[name]) {\n        impl = // eslint-disable-next-line @typescript-eslint/unbound-method\n        contentWindow[name];\n      }\n      document2.head.removeChild(sandbox);\n    } catch (e2) {\n    }\n  }\n  return cachedImplementations[name] = impl.bind(\n    window\n  );\n}\nfunction onRequestAnimationFrame(...rest) {\n  return getImplementation(\"requestAnimationFrame\")(...rest);\n}\nfunction setTimeout$1(...rest) {\n  return getImplementation(\"setTimeout\")(...rest);\n}\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n  CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n  CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n  CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n  return CanvasContext2;\n})(CanvasContext || {});\nlet errorHandler;\nfunction registerErrorHandler(handler) {\n  errorHandler = handler;\n}\nconst callbackWrapper = (cb) => {\n  if (!errorHandler) {\n    return cb;\n  }\n  const rrwebWrapped = (...rest) => {\n    try {\n      return cb(...rest);\n    } catch (error) {\n      if (errorHandler && errorHandler(error) === true) {\n        return () => {\n        };\n      }\n      throw error;\n    }\n  };\n  return rrwebWrapped;\n};\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar lookup = typeof Uint8Array === \"undefined\" ? [] : new Uint8Array(256);\nfor (var i$1 = 0; i$1 < chars.length; i$1++) {\n  lookup[chars.charCodeAt(i$1)] = i$1;\n}\nvar encode = function(arraybuffer) {\n  var bytes = new Uint8Array(arraybuffer), i2, len = bytes.length, base64 = \"\";\n  for (i2 = 0; i2 < len; i2 += 3) {\n    base64 += chars[bytes[i2] >> 2];\n    base64 += chars[(bytes[i2] & 3) << 4 | bytes[i2 + 1] >> 4];\n    base64 += chars[(bytes[i2 + 1] & 15) << 2 | bytes[i2 + 2] >> 6];\n    base64 += chars[bytes[i2 + 2] & 63];\n  }\n  if (len % 3 === 2) {\n    base64 = base64.substring(0, base64.length - 1) + \"=\";\n  } else if (len % 3 === 1) {\n    base64 = base64.substring(0, base64.length - 2) + \"==\";\n  }\n  return base64;\n};\nconst canvasVarMap = /* @__PURE__ */ new Map();\nfunction variableListFor$1(ctx, ctor) {\n  let contextMap = canvasVarMap.get(ctx);\n  if (!contextMap) {\n    contextMap = /* @__PURE__ */ new Map();\n    canvasVarMap.set(ctx, contextMap);\n  }\n  if (!contextMap.has(ctor)) {\n    contextMap.set(ctor, []);\n  }\n  return contextMap.get(ctor);\n}\nconst saveWebGLVar = (value, win, ctx) => {\n  if (!value || !(isInstanceOfWebGLObject(value, win) || typeof value === \"object\"))\n    return;\n  const name = value.constructor.name;\n  const list = variableListFor$1(ctx, name);\n  let index = list.indexOf(value);\n  if (index === -1) {\n    index = list.length;\n    list.push(value);\n  }\n  return index;\n};\nfunction serializeArg(value, win, ctx) {\n  if (value instanceof Array) {\n    return value.map((arg) => serializeArg(arg, win, ctx));\n  } else if (value === null) {\n    return value;\n  } else if (value instanceof Float32Array || value instanceof Float64Array || value instanceof Int32Array || value instanceof Uint32Array || value instanceof Uint8Array || value instanceof Uint16Array || value instanceof Int16Array || value instanceof Int8Array || value instanceof Uint8ClampedArray) {\n    const name = value.constructor.name;\n    return {\n      rr_type: name,\n      args: [Object.values(value)]\n    };\n  } else if (\n    // SharedArrayBuffer disabled on most browsers due to spectre.\n    // More info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/SharedArrayBuffer\n    // value instanceof SharedArrayBuffer ||\n    value instanceof ArrayBuffer\n  ) {\n    const name = value.constructor.name;\n    const base64 = encode(value);\n    return {\n      rr_type: name,\n      base64\n    };\n  } else if (value instanceof DataView) {\n    const name = value.constructor.name;\n    return {\n      rr_type: name,\n      args: [\n        serializeArg(value.buffer, win, ctx),\n        value.byteOffset,\n        value.byteLength\n      ]\n    };\n  } else if (value instanceof HTMLImageElement) {\n    const name = value.constructor.name;\n    const { src } = value;\n    return {\n      rr_type: name,\n      src\n    };\n  } else if (value instanceof HTMLCanvasElement) {\n    const name = \"HTMLImageElement\";\n    const src = value.toDataURL();\n    return {\n      rr_type: name,\n      src\n    };\n  } else if (value instanceof ImageData) {\n    const name = value.constructor.name;\n    return {\n      rr_type: name,\n      args: [serializeArg(value.data, win, ctx), value.width, value.height]\n    };\n  } else if (isInstanceOfWebGLObject(value, win) || typeof value === \"object\") {\n    const name = value.constructor.name;\n    const index = saveWebGLVar(value, win, ctx);\n    return {\n      rr_type: name,\n      index\n    };\n  }\n  return value;\n}\nconst serializeArgs = (args, win, ctx) => {\n  return args.map((arg) => serializeArg(arg, win, ctx));\n};\nconst isInstanceOfWebGLObject = (value, win) => {\n  const webGLConstructorNames = [\n    \"WebGLActiveInfo\",\n    \"WebGLBuffer\",\n    \"WebGLFramebuffer\",\n    \"WebGLProgram\",\n    \"WebGLRenderbuffer\",\n    \"WebGLShader\",\n    \"WebGLShaderPrecisionFormat\",\n    \"WebGLTexture\",\n    \"WebGLUniformLocation\",\n    \"WebGLVertexArrayObject\",\n    // In old Chrome versions, value won't be an instanceof WebGLVertexArrayObject.\n    \"WebGLVertexArrayObjectOES\"\n  ];\n  const supportedWebGLConstructorNames = webGLConstructorNames.filter(\n    (name) => typeof win[name] === \"function\"\n  );\n  return Boolean(\n    supportedWebGLConstructorNames.find(\n      (name) => value instanceof win[name]\n    )\n  );\n};\nfunction initCanvas2DMutationObserver(cb, win, blockClass2, blockSelector, unblockSelector) {\n  const handlers = [];\n  const props2D = Object.getOwnPropertyNames(\n    win.CanvasRenderingContext2D.prototype\n  );\n  for (const prop of props2D) {\n    try {\n      if (typeof win.CanvasRenderingContext2D.prototype[prop] !== \"function\") {\n        continue;\n      }\n      const restoreHandler = patch(\n        win.CanvasRenderingContext2D.prototype,\n        prop,\n        function(original) {\n          return function(...args) {\n            if (!isBlocked(\n              this.canvas,\n              blockClass2,\n              blockSelector,\n              unblockSelector,\n              true\n            )) {\n              setTimeout$1(() => {\n                const recordArgs = serializeArgs(args, win, this);\n                cb(this.canvas, {\n                  type: CanvasContext[\"2D\"],\n                  property: prop,\n                  args: recordArgs\n                });\n              }, 0);\n            }\n            return original.apply(this, args);\n          };\n        }\n      );\n      handlers.push(restoreHandler);\n    } catch {\n      const hookHandler = hookSetter(\n        win.CanvasRenderingContext2D.prototype,\n        prop,\n        {\n          set(v2) {\n            cb(this.canvas, {\n              type: CanvasContext[\"2D\"],\n              property: prop,\n              args: [v2],\n              setter: true\n            });\n          }\n        }\n      );\n      handlers.push(hookHandler);\n    }\n  }\n  return () => {\n    handlers.forEach((h) => h());\n  };\n}\nfunction getNormalizedContextName(contextType) {\n  return contextType === \"experimental-webgl\" ? \"webgl\" : contextType;\n}\nfunction initCanvasContextObserver(win, blockClass, blockSelector, unblockSelector, setPreserveDrawingBufferToTrue) {\n  const handlers = [];\n  try {\n    const restoreHandler = patch(\n      win.HTMLCanvasElement.prototype,\n      \"getContext\",\n      function(original) {\n        return function(contextType, ...args) {\n          if (!isBlocked(this, blockClass, blockSelector, unblockSelector, true)) {\n            const ctxName = getNormalizedContextName(contextType);\n            if (!(\"__context\" in this)) this.__context = ctxName;\n            if (setPreserveDrawingBufferToTrue && [\"webgl\", \"webgl2\"].includes(ctxName)) {\n              if (args[0] && typeof args[0] === \"object\") {\n                const contextAttributes = args[0];\n                if (!contextAttributes.preserveDrawingBuffer) {\n                  contextAttributes.preserveDrawingBuffer = true;\n                }\n              } else {\n                args.splice(0, 1, {\n                  preserveDrawingBuffer: true\n                });\n              }\n            }\n          }\n          return original.apply(this, [contextType, ...args]);\n        };\n      }\n    );\n    handlers.push(restoreHandler);\n  } catch {\n    console.error(\"failed to patch HTMLCanvasElement.prototype.getContext\");\n  }\n  return () => {\n    handlers.forEach((h) => h());\n  };\n}\nfunction patchGLPrototype(prototype, type, cb, blockClass2, blockSelector, unblockSelector, _mirror2, win) {\n  const handlers = [];\n  const props = Object.getOwnPropertyNames(prototype);\n  for (const prop of props) {\n    if (\n      //prop.startsWith('get') ||  // e.g. getProgramParameter, but too risky\n      [\n        \"isContextLost\",\n        \"canvas\",\n        \"drawingBufferWidth\",\n        \"drawingBufferHeight\"\n      ].includes(prop)\n    ) {\n      continue;\n    }\n    try {\n      if (typeof prototype[prop] !== \"function\") {\n        continue;\n      }\n      const restoreHandler = patch(\n        prototype,\n        prop,\n        function(original) {\n          return function(...args) {\n            const result = original.apply(this, args);\n            saveWebGLVar(result, win, this);\n            if (\"tagName\" in this.canvas && !isBlocked(\n              this.canvas,\n              blockClass2,\n              blockSelector,\n              unblockSelector,\n              true\n            )) {\n              const recordArgs = serializeArgs(args, win, this);\n              const mutation = {\n                type,\n                property: prop,\n                args: recordArgs\n              };\n              cb(this.canvas, mutation);\n            }\n            return result;\n          };\n        }\n      );\n      handlers.push(restoreHandler);\n    } catch {\n      const hookHandler = hookSetter(prototype, prop, {\n        set(v2) {\n          cb(this.canvas, {\n            type,\n            property: prop,\n            args: [v2],\n            setter: true\n          });\n        }\n      });\n      handlers.push(hookHandler);\n    }\n  }\n  return handlers;\n}\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass2, blockSelector, unblockSelector, mirror2) {\n  const handlers = [];\n  handlers.push(\n    ...patchGLPrototype(\n      win.WebGLRenderingContext.prototype,\n      CanvasContext.WebGL,\n      cb,\n      blockClass2,\n      blockSelector,\n      unblockSelector,\n      mirror2,\n      win\n    )\n  );\n  if (typeof win.WebGL2RenderingContext !== \"undefined\") {\n    handlers.push(\n      ...patchGLPrototype(\n        win.WebGL2RenderingContext.prototype,\n        CanvasContext.WebGL2,\n        cb,\n        blockClass2,\n        blockSelector,\n        unblockSelector,\n        mirror2,\n        win\n      )\n    );\n  }\n  return () => {\n    handlers.forEach((h) => h());\n  };\n}\nconst r$1 = `for(var e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",t=\"undefined\"==typeof Uint8Array?[]:new Uint8Array(256),a=0;a<64;a++)t[e.charCodeAt(a)]=a;var n=function(t){var a,n=new Uint8Array(t),r=n.length,s=\"\";for(a=0;a<r;a+=3)s+=e[n[a]>>2],s+=e[(3&n[a])<<4|n[a+1]>>4],s+=e[(15&n[a+1])<<2|n[a+2]>>6],s+=e[63&n[a+2]];return r%3==2?s=s.substring(0,s.length-1)+\"=\":r%3==1&&(s=s.substring(0,s.length-2)+\"==\"),s};const r=new Map,s=new Map;const i=self;i.onmessage=async function(e){if(!(\"OffscreenCanvas\"in globalThis))return i.postMessage({id:e.data.id});{const{id:t,bitmap:a,width:o,height:f,maxCanvasSize:c,dataURLOptions:g}=e.data,u=async function(e,t,a){const r=e+\"-\"+t;if(\"OffscreenCanvas\"in globalThis){if(s.has(r))return s.get(r);const i=new OffscreenCanvas(e,t);i.getContext(\"2d\");const o=await i.convertToBlob(a),f=await o.arrayBuffer(),c=n(f);return s.set(r,c),c}return\"\"}(o,f,g),[h,d]=function(e,t,a){if(!a)return[e,t];const[n,r]=a;if(e<=n&&t<=r)return[e,t];let s=e,i=t;return s>n&&(i=Math.floor(n*t/e),s=n),i>r&&(s=Math.floor(r*e/t),i=r),[s,i]}(o,f,c),l=new OffscreenCanvas(h,d),w=l.getContext(\"bitmaprenderer\"),p=h===o&&d===f?a:await createImageBitmap(a,{resizeWidth:h,resizeHeight:d,resizeQuality:\"low\"});w.transferFromImageBitmap(p),a.close();const y=await l.convertToBlob(g),v=y.type,b=await y.arrayBuffer(),m=n(b);if(p.close(),!r.has(t)&&await u===m)return r.set(t,m),i.postMessage({id:t});if(r.get(t)===m)return i.postMessage({id:t});i.postMessage({id:t,type:v,base64:m,width:o,height:f}),r.set(t,m)}};`;\nfunction t$1() {\n  const t2 = new Blob([r$1]);\n  return URL.createObjectURL(t2);\n}\nclass CanvasManager {\n  constructor(options) {\n    this.pendingCanvasMutations = /* @__PURE__ */ new Map();\n    this.rafStamps = { latestId: 0, invokeId: null };\n    this.shadowDoms = /* @__PURE__ */ new Set();\n    this.windowsSet = /* @__PURE__ */ new WeakSet();\n    this.windows = [];\n    this.restoreHandlers = [];\n    this.frozen = false;\n    this.locked = false;\n    this.snapshotInProgressMap = /* @__PURE__ */ new Map();\n    this.worker = null;\n    this.lastSnapshotTime = 0;\n    this.processMutation = (target, mutation) => {\n      const newFrame = this.rafStamps.invokeId && this.rafStamps.latestId !== this.rafStamps.invokeId;\n      if (newFrame || !this.rafStamps.invokeId)\n        this.rafStamps.invokeId = this.rafStamps.latestId;\n      if (!this.pendingCanvasMutations.has(target)) {\n        this.pendingCanvasMutations.set(target, []);\n      }\n      this.pendingCanvasMutations.get(target).push(mutation);\n    };\n    const {\n      sampling = \"all\",\n      win,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      maxCanvasSize,\n      recordCanvas,\n      dataURLOptions,\n      errorHandler: errorHandler2\n    } = options;\n    this.mutationCb = options.mutationCb;\n    this.mirror = options.mirror;\n    this.options = options;\n    if (errorHandler2) {\n      registerErrorHandler(errorHandler2);\n    }\n    if (recordCanvas && typeof sampling === \"number\" || options.enableManualSnapshot) {\n      this.worker = this.initFPSWorker();\n    }\n    this.addWindow(win);\n    if (options.enableManualSnapshot) {\n      return;\n    }\n    callbackWrapper(() => {\n      if (recordCanvas && sampling === \"all\") {\n        this.startRAFTimestamping();\n        this.startPendingCanvasMutationFlusher();\n      }\n      if (recordCanvas && typeof sampling === \"number\") {\n        this.initCanvasFPSObserver(\n          sampling,\n          blockClass,\n          blockSelector,\n          unblockSelector,\n          maxCanvasSize,\n          {\n            dataURLOptions\n          }\n        );\n      }\n    })();\n  }\n  reset() {\n    this.pendingCanvasMutations.clear();\n    this.restoreHandlers.forEach((handler) => {\n      try {\n        handler();\n      } catch (e2) {\n      }\n    });\n    this.restoreHandlers = [];\n    this.windowsSet = /* @__PURE__ */ new WeakSet();\n    this.windows = [];\n    this.shadowDoms = /* @__PURE__ */ new Set();\n    this.worker?.terminate();\n    this.worker = null;\n    this.snapshotInProgressMap = /* @__PURE__ */ new Map();\n  }\n  freeze() {\n    this.frozen = true;\n  }\n  unfreeze() {\n    this.frozen = false;\n  }\n  lock() {\n    this.locked = true;\n  }\n  unlock() {\n    this.locked = false;\n  }\n  addWindow(win) {\n    const {\n      sampling = \"all\",\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      recordCanvas,\n      enableManualSnapshot\n    } = this.options;\n    if (this.windowsSet.has(win)) return;\n    if (enableManualSnapshot) {\n      this.windowsSet.add(win);\n      this.windows.push(new WeakRef(win));\n      return;\n    }\n    callbackWrapper(() => {\n      if (recordCanvas && sampling === \"all\") {\n        this.initCanvasMutationObserver(\n          win,\n          blockClass,\n          blockSelector,\n          unblockSelector\n        );\n      }\n      if (recordCanvas && typeof sampling === \"number\") {\n        const canvasContextReset = initCanvasContextObserver(\n          win,\n          blockClass,\n          blockSelector,\n          unblockSelector,\n          true\n        );\n        this.restoreHandlers.push(() => {\n          canvasContextReset();\n        });\n      }\n    })();\n    this.windowsSet.add(win);\n    this.windows.push(new WeakRef(win));\n  }\n  addShadowRoot(shadowRoot) {\n    this.shadowDoms.add(new WeakRef(shadowRoot));\n  }\n  resetShadowRoots() {\n    this.shadowDoms = /* @__PURE__ */ new Set();\n  }\n  initFPSWorker() {\n    const worker = new Worker(t$1());\n    worker.onmessage = (e2) => {\n      const data = e2.data;\n      const { id } = data;\n      this.snapshotInProgressMap.set(id, false);\n      if (!(\"base64\" in data)) return;\n      const { base64, type, width, height } = data;\n      this.mutationCb({\n        id,\n        type: CanvasContext[\"2D\"],\n        commands: [\n          {\n            property: \"clearRect\",\n            // wipe canvas\n            args: [0, 0, width, height]\n          },\n          {\n            property: \"drawImage\",\n            // draws (semi-transparent) image\n            args: [\n              {\n                rr_type: \"ImageBitmap\",\n                args: [\n                  {\n                    rr_type: \"Blob\",\n                    data: [{ rr_type: \"ArrayBuffer\", base64 }],\n                    type\n                  }\n                ]\n              },\n              0,\n              0,\n              // The below args are needed if we enforce a max size, we want to\n              // retain the original size when drawing the image (which should be smaller)\n              width,\n              height\n            ]\n          }\n        ]\n      });\n    };\n    return worker;\n  }\n  initCanvasFPSObserver(fps, blockClass, blockSelector, unblockSelector, maxCanvasSize, options) {\n    const rafId = this.takeSnapshot(\n      false,\n      fps,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      maxCanvasSize,\n      options.dataURLOptions\n    );\n    this.restoreHandlers.push(() => {\n      cancelAnimationFrame(rafId);\n    });\n  }\n  initCanvasMutationObserver(win, blockClass, blockSelector, unblockSelector) {\n    const canvasContextReset = initCanvasContextObserver(\n      win,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      false\n    );\n    const canvas2DReset = initCanvas2DMutationObserver(\n      this.processMutation.bind(this),\n      win,\n      blockClass,\n      blockSelector,\n      unblockSelector\n    );\n    const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(\n      this.processMutation.bind(this),\n      win,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      this.mirror\n    );\n    this.restoreHandlers.push(() => {\n      canvasContextReset();\n      canvas2DReset();\n      canvasWebGL1and2Reset();\n    });\n  }\n  snapshot(canvasElement) {\n    const { options } = this;\n    const rafId = this.takeSnapshot(\n      true,\n      options.sampling === \"all\" ? 2 : options.sampling || 2,\n      options.blockClass,\n      options.blockSelector,\n      options.unblockSelector,\n      options.maxCanvasSize,\n      options.dataURLOptions,\n      canvasElement\n    );\n    this.restoreHandlers.push(() => {\n      cancelAnimationFrame(rafId);\n    });\n  }\n  takeSnapshot(isManualSnapshot, fps, blockClass, blockSelector, unblockSelector, maxCanvasSize, dataURLOptions, canvasElement) {\n    const timeBetweenSnapshots = 1e3 / fps;\n    let rafId;\n    const getCanvas = (canvasElement2) => {\n      if (canvasElement2) {\n        return [canvasElement2];\n      }\n      const matchedCanvas = [];\n      const searchCanvas = (root) => {\n        root.querySelectorAll(\"canvas\").forEach((canvas) => {\n          if (!isBlocked(canvas, blockClass, blockSelector, unblockSelector, true)) {\n            matchedCanvas.push(canvas);\n          }\n        });\n      };\n      for (const item of this.windows) {\n        const window2 = item.deref();\n        let _document;\n        try {\n          _document = window2 && window2.document;\n        } catch {\n        }\n        if (_document) {\n          searchCanvas(_document);\n        }\n      }\n      for (const item of this.shadowDoms) {\n        const shadowRoot = item.deref();\n        if (shadowRoot) {\n          searchCanvas(shadowRoot);\n        }\n      }\n      return matchedCanvas;\n    };\n    const takeCanvasSnapshots = (timestamp) => {\n      if (!this.windows.length) {\n        return;\n      }\n      if (this.lastSnapshotTime && timestamp - this.lastSnapshotTime < timeBetweenSnapshots) {\n        rafId = onRequestAnimationFrame(takeCanvasSnapshots);\n        return;\n      }\n      this.lastSnapshotTime = timestamp;\n      getCanvas(canvasElement).forEach((canvas) => {\n        if (!this.mirror.hasNode(canvas)) {\n          return;\n        }\n        const id = this.mirror.getId(canvas);\n        if (this.snapshotInProgressMap.get(id)) return;\n        if (!canvas.width || !canvas.height) return;\n        this.snapshotInProgressMap.set(id, true);\n        if (!isManualSnapshot && [\"webgl\", \"webgl2\"].includes(canvas.__context)) {\n          const context = canvas.getContext(canvas.__context);\n          if (context?.getContextAttributes()?.preserveDrawingBuffer === false) {\n            context.clear(context.COLOR_BUFFER_BIT);\n          }\n        }\n        createImageBitmap(canvas).then((bitmap) => {\n          this.worker?.postMessage(\n            {\n              id,\n              bitmap,\n              width: canvas.width,\n              height: canvas.height,\n              dataURLOptions,\n              maxCanvasSize\n            },\n            [bitmap]\n          );\n        }).catch((error) => {\n          callbackWrapper(() => {\n            throw error;\n          })();\n        });\n      });\n      if (!isManualSnapshot) {\n        rafId = onRequestAnimationFrame(takeCanvasSnapshots);\n      }\n    };\n    rafId = onRequestAnimationFrame(takeCanvasSnapshots);\n    return rafId;\n  }\n  startPendingCanvasMutationFlusher() {\n    onRequestAnimationFrame(() => this.flushPendingCanvasMutations());\n  }\n  startRAFTimestamping() {\n    const setLatestRAFTimestamp = (timestamp) => {\n      this.rafStamps.latestId = timestamp;\n      onRequestAnimationFrame(setLatestRAFTimestamp);\n    };\n    onRequestAnimationFrame(setLatestRAFTimestamp);\n  }\n  flushPendingCanvasMutations() {\n    this.pendingCanvasMutations.forEach(\n      (_values, canvas) => {\n        const id = this.mirror.getId(canvas);\n        this.flushPendingCanvasMutationFor(canvas, id);\n      }\n    );\n    onRequestAnimationFrame(() => this.flushPendingCanvasMutations());\n  }\n  flushPendingCanvasMutationFor(canvas, id) {\n    if (this.frozen || this.locked) {\n      return;\n    }\n    const valuesWithType = this.pendingCanvasMutations.get(canvas);\n    if (!valuesWithType || id === -1) return;\n    const values = valuesWithType.map((value) => {\n      const { type: type2, ...rest } = value;\n      return rest;\n    });\n    const { type } = valuesWithType[0];\n    this.mutationCb({ id, type, commands: values });\n    this.pendingCanvasMutations.delete(canvas);\n  }\n}\ntry {\n  if (Array.from([1], (x) => x * 2)[0] !== 2) {\n    const cleanFrame = document.createElement(\"iframe\");\n    document.body.appendChild(cleanFrame);\n    Array.from = cleanFrame.contentWindow?.Array.from || Array.from;\n    document.body.removeChild(cleanFrame);\n  }\n} catch (err) {\n  console.debug(\"Unable to override Array.from\", err);\n}\ncreateMirror$2();\nvar n;\n!function(t2) {\n  t2[t2.NotStarted = 0] = \"NotStarted\", t2[t2.Running = 1] = \"Running\", t2[t2.Stopped = 2] = \"Stopped\";\n}(n || (n = {}));\n\nconst CANVAS_QUALITY = {\n  low: {\n    sampling: {\n      canvas: 1,\n    },\n    dataURLOptions: {\n      type: 'image/webp',\n      quality: 0.25,\n    },\n  },\n  medium: {\n    sampling: {\n      canvas: 2,\n    },\n    dataURLOptions: {\n      type: 'image/webp',\n      quality: 0.4,\n    },\n  },\n  high: {\n    sampling: {\n      canvas: 4,\n    },\n    dataURLOptions: {\n      type: 'image/webp',\n      quality: 0.5,\n    },\n  },\n};\n\nconst INTEGRATION_NAME = 'ReplayCanvas';\nconst DEFAULT_MAX_CANVAS_SIZE = 1280;\n\n/** Exported only for type safe tests. */\nconst _replayCanvasIntegration = ((options = {}) => {\n  const [maxCanvasWidth, maxCanvasHeight] = options.maxCanvasSize || [];\n  const _canvasOptions = {\n    quality: options.quality || 'medium',\n    enableManualSnapshot: options.enableManualSnapshot,\n    maxCanvasSize: [\n      maxCanvasWidth ? Math.min(maxCanvasWidth, DEFAULT_MAX_CANVAS_SIZE) : DEFAULT_MAX_CANVAS_SIZE,\n      maxCanvasHeight ? Math.min(maxCanvasHeight, DEFAULT_MAX_CANVAS_SIZE) : DEFAULT_MAX_CANVAS_SIZE,\n    ] ,\n  };\n\n  let canvasManagerResolve;\n  const _canvasManager = new Promise(resolve => (canvasManagerResolve = resolve));\n\n  return {\n    name: INTEGRATION_NAME,\n    getOptions() {\n      const { quality, enableManualSnapshot, maxCanvasSize } = _canvasOptions;\n\n      return {\n        enableManualSnapshot,\n        recordCanvas: true,\n        getCanvasManager: (getCanvasManagerOptions) => {\n          const manager = new CanvasManager({\n            ...getCanvasManagerOptions,\n            enableManualSnapshot,\n            maxCanvasSize,\n            errorHandler: (err) => {\n              try {\n                if (typeof err === 'object') {\n                  (err ).__rrweb__ = true;\n                }\n              } catch {\n                // ignore errors here\n                // this can happen if the error is frozen or does not allow mutation for other reasons\n              }\n            },\n          });\n          canvasManagerResolve(manager);\n          return manager;\n        },\n        ...(CANVAS_QUALITY[quality] || CANVAS_QUALITY.medium),\n      };\n    },\n    async snapshot(canvasElement) {\n      const canvasManager = await _canvasManager;\n      canvasManager.snapshot(canvasElement);\n    },\n  };\n}) ;\n\n/**\n * Add this in addition to `replayIntegration()` to enable canvas recording.\n */\nconst replayCanvasIntegration = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.defineIntegration)(\n  _replayCanvasIntegration,\n) ;\n\n\n//# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK3JlcGxheS1jYW52YXNAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL3JlcGxheS1jYW52YXMvYnVpbGQvbnBtL2VzbS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFpRDs7QUFFakQ7QUFDQSxrRkFBa0YsNkRBQTZEO0FBQy9JO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsVUFBVTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsVUFBVTtBQUN2QyxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsR0FBRztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMscUJBQXFCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixvQkFBb0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLFlBQVksTUFBTTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzSkFBc0osS0FBSyx5QkFBeUIsa0JBQWtCLDBDQUEwQyxRQUFRLElBQUksOEZBQThGLDRGQUE0RiwwQkFBMEIsYUFBYSw4QkFBOEIsMkRBQTJELGFBQWEsR0FBRyxNQUFNLGdFQUFnRSxnQ0FBZ0MsZ0JBQWdCLG1DQUFtQyw0QkFBNEIsaUNBQWlDLG1CQUFtQixnRUFBZ0Usb0JBQW9CLFNBQVMsOEJBQThCLGtCQUFrQixhQUFhLDBCQUEwQixZQUFZLDJFQUEyRSxnSEFBZ0gsaURBQWlELEVBQUUsdUNBQXVDLHlFQUF5RSxxRUFBcUUsS0FBSyxFQUFFLHNDQUFzQyxLQUFLLEVBQUUsZUFBZSxzQ0FBc0MsZUFBZTtBQUMxZ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsS0FBSztBQUNuQjtBQUNBO0FBQ0EsY0FBYyw4QkFBOEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsZ0NBQWdDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxZQUFZLFVBQVU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLHVCQUF1QjtBQUNyQztBQUNBLEtBQUs7QUFDTCxZQUFZLE9BQU87QUFDbkIsc0JBQXNCLDRCQUE0QjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLGFBQWE7O0FBRWQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsK0NBQStDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsK0NBQStDOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQywrREFBaUI7QUFDakQ7QUFDQTs7QUFFbUM7QUFDbkMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeS1pbnRlcm5hbCtyZXBsYXktY2FudmFzQDkuNDYuMC9ub2RlX21vZHVsZXMvQHNlbnRyeS1pbnRlcm5hbC9yZXBsYXktY2FudmFzL2J1aWxkL25wbS9lc20vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lSW50ZWdyYXRpb24gfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuXG52YXIgX19kZWZQcm9wJDEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19kZWZOb3JtYWxQcm9wJDEgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wJDEob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fcHVibGljRmllbGQkMSA9IChvYmosIGtleSwgdmFsdWUpID0+IF9fZGVmTm9ybWFsUHJvcCQxKG9iaiwgdHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIiA/IGtleSArIFwiXCIgOiBrZXksIHZhbHVlKTtcbmNsYXNzIE1pcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIF9fcHVibGljRmllbGQkMSh0aGlzLCBcImlkTm9kZU1hcFwiLCAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpKTtcbiAgICBfX3B1YmxpY0ZpZWxkJDEodGhpcywgXCJub2RlTWV0YU1hcFwiLCAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSk7XG4gIH1cbiAgZ2V0SWQobjIpIHtcbiAgICBpZiAoIW4yKSByZXR1cm4gLTE7XG4gICAgY29uc3QgaWQgPSB0aGlzLmdldE1ldGEobjIpPy5pZDtcbiAgICByZXR1cm4gaWQgPz8gLTE7XG4gIH1cbiAgZ2V0Tm9kZShpZCkge1xuICAgIHJldHVybiB0aGlzLmlkTm9kZU1hcC5nZXQoaWQpIHx8IG51bGw7XG4gIH1cbiAgZ2V0SWRzKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuaWROb2RlTWFwLmtleXMoKSk7XG4gIH1cbiAgZ2V0TWV0YShuMikge1xuICAgIHJldHVybiB0aGlzLm5vZGVNZXRhTWFwLmdldChuMikgfHwgbnVsbDtcbiAgfVxuICAvLyByZW1vdmVzIHRoZSBub2RlIGZyb20gaWROb2RlTWFwXG4gIC8vIGRvZXNuJ3QgcmVtb3ZlIHRoZSBub2RlIGZyb20gbm9kZU1ldGFNYXBcbiAgcmVtb3ZlTm9kZUZyb21NYXAobjIpIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SWQobjIpO1xuICAgIHRoaXMuaWROb2RlTWFwLmRlbGV0ZShpZCk7XG4gICAgaWYgKG4yLmNoaWxkTm9kZXMpIHtcbiAgICAgIG4yLmNoaWxkTm9kZXMuZm9yRWFjaChcbiAgICAgICAgKGNoaWxkTm9kZSkgPT4gdGhpcy5yZW1vdmVOb2RlRnJvbU1hcChjaGlsZE5vZGUpXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBoYXMoaWQpIHtcbiAgICByZXR1cm4gdGhpcy5pZE5vZGVNYXAuaGFzKGlkKTtcbiAgfVxuICBoYXNOb2RlKG5vZGUpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlTWV0YU1hcC5oYXMobm9kZSk7XG4gIH1cbiAgYWRkKG4yLCBtZXRhKSB7XG4gICAgY29uc3QgaWQgPSBtZXRhLmlkO1xuICAgIHRoaXMuaWROb2RlTWFwLnNldChpZCwgbjIpO1xuICAgIHRoaXMubm9kZU1ldGFNYXAuc2V0KG4yLCBtZXRhKTtcbiAgfVxuICByZXBsYWNlKGlkLCBuMikge1xuICAgIGNvbnN0IG9sZE5vZGUgPSB0aGlzLmdldE5vZGUoaWQpO1xuICAgIGlmIChvbGROb2RlKSB7XG4gICAgICBjb25zdCBtZXRhID0gdGhpcy5ub2RlTWV0YU1hcC5nZXQob2xkTm9kZSk7XG4gICAgICBpZiAobWV0YSkgdGhpcy5ub2RlTWV0YU1hcC5zZXQobjIsIG1ldGEpO1xuICAgIH1cbiAgICB0aGlzLmlkTm9kZU1hcC5zZXQoaWQsIG4yKTtcbiAgfVxuICByZXNldCgpIHtcbiAgICB0aGlzLmlkTm9kZU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgdGhpcy5ub2RlTWV0YU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVNaXJyb3IkMigpIHtcbiAgcmV0dXJuIG5ldyBNaXJyb3IoKTtcbn1cbmZ1bmN0aW9uIGVsZW1lbnRDbGFzc01hdGNoZXNSZWdleChlbCwgcmVnZXgpIHtcbiAgZm9yIChsZXQgZUluZGV4ID0gZWwuY2xhc3NMaXN0Lmxlbmd0aDsgZUluZGV4LS07ICkge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IGVsLmNsYXNzTGlzdFtlSW5kZXhdO1xuICAgIGlmIChyZWdleC50ZXN0KGNsYXNzTmFtZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBkaXN0YW5jZVRvTWF0Y2gobm9kZSwgbWF0Y2hQcmVkaWNhdGUsIGxpbWl0ID0gSW5maW5pdHksIGRpc3RhbmNlID0gMCkge1xuICBpZiAoIW5vZGUpIHJldHVybiAtMTtcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IG5vZGUuRUxFTUVOVF9OT0RFKSByZXR1cm4gLTE7XG4gIGlmIChkaXN0YW5jZSA+IGxpbWl0KSByZXR1cm4gLTE7XG4gIGlmIChtYXRjaFByZWRpY2F0ZShub2RlKSkgcmV0dXJuIGRpc3RhbmNlO1xuICByZXR1cm4gZGlzdGFuY2VUb01hdGNoKG5vZGUucGFyZW50Tm9kZSwgbWF0Y2hQcmVkaWNhdGUsIGxpbWl0LCBkaXN0YW5jZSArIDEpO1xufVxuZnVuY3Rpb24gY3JlYXRlTWF0Y2hQcmVkaWNhdGUoY2xhc3NOYW1lLCBzZWxlY3Rvcikge1xuICByZXR1cm4gKG5vZGUpID0+IHtcbiAgICBjb25zdCBlbCA9IG5vZGU7XG4gICAgaWYgKGVsID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChjbGFzc05hbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGFzc05hbWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBpZiAoZWwubWF0Y2hlcyhgLiR7Y2xhc3NOYW1lfWApKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50Q2xhc3NNYXRjaGVzUmVnZXgoZWwsIGNsYXNzTmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHNlbGVjdG9yICYmIGVsLm1hdGNoZXMoc2VsZWN0b3IpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG59XG5jb25zdCBERVBBUlRFRF9NSVJST1JfQUNDRVNTX1dBUk5JTkcgPSBcIlBsZWFzZSBzdG9wIGltcG9ydCBtaXJyb3IgZGlyZWN0bHkuIEluc3RlYWQgb2YgdGhhdCxcXHJcXG5ub3cgeW91IGNhbiB1c2UgcmVwbGF5ZXIuZ2V0TWlycm9yKCkgdG8gYWNjZXNzIHRoZSBtaXJyb3IgaW5zdGFuY2Ugb2YgYSByZXBsYXllcixcXHJcXG5vciB5b3UgY2FuIHVzZSByZWNvcmQubWlycm9yIHRvIGFjY2VzcyB0aGUgbWlycm9yIGluc3RhbmNlIGR1cmluZyByZWNvcmRpbmcuXCI7XG5sZXQgX21pcnJvciA9IHtcbiAgbWFwOiB7fSxcbiAgZ2V0SWQoKSB7XG4gICAgY29uc29sZS5lcnJvcihERVBBUlRFRF9NSVJST1JfQUNDRVNTX1dBUk5JTkcpO1xuICAgIHJldHVybiAtMTtcbiAgfSxcbiAgZ2V0Tm9kZSgpIHtcbiAgICBjb25zb2xlLmVycm9yKERFUEFSVEVEX01JUlJPUl9BQ0NFU1NfV0FSTklORyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIHJlbW92ZU5vZGVGcm9tTWFwKCkge1xuICAgIGNvbnNvbGUuZXJyb3IoREVQQVJURURfTUlSUk9SX0FDQ0VTU19XQVJOSU5HKTtcbiAgfSxcbiAgaGFzKCkge1xuICAgIGNvbnNvbGUuZXJyb3IoREVQQVJURURfTUlSUk9SX0FDQ0VTU19XQVJOSU5HKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIHJlc2V0KCkge1xuICAgIGNvbnNvbGUuZXJyb3IoREVQQVJURURfTUlSUk9SX0FDQ0VTU19XQVJOSU5HKTtcbiAgfVxufTtcbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5Qcm94eSAmJiB3aW5kb3cuUmVmbGVjdCkge1xuICBfbWlycm9yID0gbmV3IFByb3h5KF9taXJyb3IsIHtcbiAgICBnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuICAgICAgaWYgKHByb3AgPT09IFwibWFwXCIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihERVBBUlRFRF9NSVJST1JfQUNDRVNTX1dBUk5JTkcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBob29rU2V0dGVyKHRhcmdldCwga2V5LCBkLCBpc1Jldm9rZWQsIHdpbiA9IHdpbmRvdykge1xuICBjb25zdCBvcmlnaW5hbCA9IHdpbi5PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgd2luLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICB0YXJnZXQsXG4gICAga2V5LFxuICAgIGlzUmV2b2tlZCA/IGQgOiB7XG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgc2V0VGltZW91dCQxKCgpID0+IHtcbiAgICAgICAgICBkLnNldC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICAgIGlmIChvcmlnaW5hbCAmJiBvcmlnaW5hbC5zZXQpIHtcbiAgICAgICAgICBvcmlnaW5hbC5zZXQuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICk7XG4gIHJldHVybiAoKSA9PiBob29rU2V0dGVyKHRhcmdldCwga2V5LCBvcmlnaW5hbCB8fCB7fSwgdHJ1ZSk7XG59XG5mdW5jdGlvbiBwYXRjaChzb3VyY2UsIG5hbWUsIHJlcGxhY2VtZW50KSB7XG4gIHRyeSB7XG4gICAgaWYgKCEobmFtZSBpbiBzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBzb3VyY2VbbmFtZV07XG4gICAgY29uc3Qgd3JhcHBlZCA9IHJlcGxhY2VtZW50KG9yaWdpbmFsKTtcbiAgICBpZiAodHlwZW9mIHdyYXBwZWQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgd3JhcHBlZC5wcm90b3R5cGUgPSB3cmFwcGVkLnByb3RvdHlwZSB8fCB7fTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdyYXBwZWQsIHtcbiAgICAgICAgX19ycndlYl9vcmlnaW5hbF9fOiB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IG9yaWdpbmFsXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBzb3VyY2VbbmFtZV0gPSB3cmFwcGVkO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBzb3VyY2VbbmFtZV0gPSBvcmlnaW5hbDtcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgIH07XG4gIH1cbn1cbmlmICghLyogQF9fUFVSRV9fICovIC9bMS05XVswLTldezEyfS8udGVzdChEYXRlLm5vdygpLnRvU3RyaW5nKCkpKSA7XG5mdW5jdGlvbiBjbG9zZXN0RWxlbWVudE9mTm9kZShub2RlKSB7XG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgZWwgPSBub2RlLm5vZGVUeXBlID09PSBub2RlLkVMRU1FTlRfTk9ERSA/IG5vZGUgOiBub2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgcmV0dXJuIGVsO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBpc0Jsb2NrZWQobm9kZSwgYmxvY2tDbGFzcywgYmxvY2tTZWxlY3RvciwgdW5ibG9ja1NlbGVjdG9yLCBjaGVja0FuY2VzdG9ycykge1xuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZWwgPSBjbG9zZXN0RWxlbWVudE9mTm9kZShub2RlKTtcbiAgaWYgKCFlbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBibG9ja2VkUHJlZGljYXRlID0gY3JlYXRlTWF0Y2hQcmVkaWNhdGUoYmxvY2tDbGFzcywgYmxvY2tTZWxlY3Rvcik7XG4gIGlmICghY2hlY2tBbmNlc3RvcnMpIHtcbiAgICBjb25zdCBpc1VuYmxvY2tlZCA9IHVuYmxvY2tTZWxlY3RvciAmJiBlbC5tYXRjaGVzKHVuYmxvY2tTZWxlY3Rvcik7XG4gICAgcmV0dXJuIGJsb2NrZWRQcmVkaWNhdGUoZWwpICYmICFpc1VuYmxvY2tlZDtcbiAgfVxuICBjb25zdCBibG9ja0Rpc3RhbmNlID0gZGlzdGFuY2VUb01hdGNoKGVsLCBibG9ja2VkUHJlZGljYXRlKTtcbiAgbGV0IHVuYmxvY2tEaXN0YW5jZSA9IC0xO1xuICBpZiAoYmxvY2tEaXN0YW5jZSA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHVuYmxvY2tTZWxlY3Rvcikge1xuICAgIHVuYmxvY2tEaXN0YW5jZSA9IGRpc3RhbmNlVG9NYXRjaChcbiAgICAgIGVsLFxuICAgICAgY3JlYXRlTWF0Y2hQcmVkaWNhdGUobnVsbCwgdW5ibG9ja1NlbGVjdG9yKVxuICAgICk7XG4gIH1cbiAgaWYgKGJsb2NrRGlzdGFuY2UgPiAtMSAmJiB1bmJsb2NrRGlzdGFuY2UgPCAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGJsb2NrRGlzdGFuY2UgPCB1bmJsb2NrRGlzdGFuY2U7XG59XG5jb25zdCBjYWNoZWRJbXBsZW1lbnRhdGlvbnMgPSB7fTtcbmZ1bmN0aW9uIGdldEltcGxlbWVudGF0aW9uKG5hbWUpIHtcbiAgY29uc3QgY2FjaGVkID0gY2FjaGVkSW1wbGVtZW50YXRpb25zW25hbWVdO1xuICBpZiAoY2FjaGVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuICBjb25zdCBkb2N1bWVudDIgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGxldCBpbXBsID0gd2luZG93W25hbWVdO1xuICBpZiAoZG9jdW1lbnQyICYmIHR5cGVvZiBkb2N1bWVudDIuY3JlYXRlRWxlbWVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhbmRib3ggPSBkb2N1bWVudDIuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcbiAgICAgIHNhbmRib3guaGlkZGVuID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50Mi5oZWFkLmFwcGVuZENoaWxkKHNhbmRib3gpO1xuICAgICAgY29uc3QgY29udGVudFdpbmRvdyA9IHNhbmRib3guY29udGVudFdpbmRvdztcbiAgICAgIGlmIChjb250ZW50V2luZG93ICYmIGNvbnRlbnRXaW5kb3dbbmFtZV0pIHtcbiAgICAgICAgaW1wbCA9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgICAgY29udGVudFdpbmRvd1tuYW1lXTtcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50Mi5oZWFkLnJlbW92ZUNoaWxkKHNhbmRib3gpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgfVxuICB9XG4gIHJldHVybiBjYWNoZWRJbXBsZW1lbnRhdGlvbnNbbmFtZV0gPSBpbXBsLmJpbmQoXG4gICAgd2luZG93XG4gICk7XG59XG5mdW5jdGlvbiBvblJlcXVlc3RBbmltYXRpb25GcmFtZSguLi5yZXN0KSB7XG4gIHJldHVybiBnZXRJbXBsZW1lbnRhdGlvbihcInJlcXVlc3RBbmltYXRpb25GcmFtZVwiKSguLi5yZXN0KTtcbn1cbmZ1bmN0aW9uIHNldFRpbWVvdXQkMSguLi5yZXN0KSB7XG4gIHJldHVybiBnZXRJbXBsZW1lbnRhdGlvbihcInNldFRpbWVvdXRcIikoLi4ucmVzdCk7XG59XG52YXIgQ2FudmFzQ29udGV4dCA9IC8qIEBfX1BVUkVfXyAqLyAoKENhbnZhc0NvbnRleHQyKSA9PiB7XG4gIENhbnZhc0NvbnRleHQyW0NhbnZhc0NvbnRleHQyW1wiMkRcIl0gPSAwXSA9IFwiMkRcIjtcbiAgQ2FudmFzQ29udGV4dDJbQ2FudmFzQ29udGV4dDJbXCJXZWJHTFwiXSA9IDFdID0gXCJXZWJHTFwiO1xuICBDYW52YXNDb250ZXh0MltDYW52YXNDb250ZXh0MltcIldlYkdMMlwiXSA9IDJdID0gXCJXZWJHTDJcIjtcbiAgcmV0dXJuIENhbnZhc0NvbnRleHQyO1xufSkoQ2FudmFzQ29udGV4dCB8fCB7fSk7XG5sZXQgZXJyb3JIYW5kbGVyO1xuZnVuY3Rpb24gcmVnaXN0ZXJFcnJvckhhbmRsZXIoaGFuZGxlcikge1xuICBlcnJvckhhbmRsZXIgPSBoYW5kbGVyO1xufVxuY29uc3QgY2FsbGJhY2tXcmFwcGVyID0gKGNiKSA9PiB7XG4gIGlmICghZXJyb3JIYW5kbGVyKSB7XG4gICAgcmV0dXJuIGNiO1xuICB9XG4gIGNvbnN0IHJyd2ViV3JhcHBlZCA9ICguLi5yZXN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjYiguLi5yZXN0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9ySGFuZGxlciAmJiBlcnJvckhhbmRsZXIoZXJyb3IpID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG4gIHJldHVybiBycndlYldyYXBwZWQ7XG59O1xudmFyIGNoYXJzID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCI7XG52YXIgbG9va3VwID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09IFwidW5kZWZpbmVkXCIgPyBbXSA6IG5ldyBVaW50OEFycmF5KDI1Nik7XG5mb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBjaGFycy5sZW5ndGg7IGkkMSsrKSB7XG4gIGxvb2t1cFtjaGFycy5jaGFyQ29kZUF0KGkkMSldID0gaSQxO1xufVxudmFyIGVuY29kZSA9IGZ1bmN0aW9uKGFycmF5YnVmZmVyKSB7XG4gIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGFycmF5YnVmZmVyKSwgaTIsIGxlbiA9IGJ5dGVzLmxlbmd0aCwgYmFzZTY0ID0gXCJcIjtcbiAgZm9yIChpMiA9IDA7IGkyIDwgbGVuOyBpMiArPSAzKSB7XG4gICAgYmFzZTY0ICs9IGNoYXJzW2J5dGVzW2kyXSA+PiAyXTtcbiAgICBiYXNlNjQgKz0gY2hhcnNbKGJ5dGVzW2kyXSAmIDMpIDw8IDQgfCBieXRlc1tpMiArIDFdID4+IDRdO1xuICAgIGJhc2U2NCArPSBjaGFyc1soYnl0ZXNbaTIgKyAxXSAmIDE1KSA8PCAyIHwgYnl0ZXNbaTIgKyAyXSA+PiA2XTtcbiAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaTIgKyAyXSAmIDYzXTtcbiAgfVxuICBpZiAobGVuICUgMyA9PT0gMikge1xuICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgXCI9XCI7XG4gIH0gZWxzZSBpZiAobGVuICUgMyA9PT0gMSkge1xuICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgXCI9PVwiO1xuICB9XG4gIHJldHVybiBiYXNlNjQ7XG59O1xuY29uc3QgY2FudmFzVmFyTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbmZ1bmN0aW9uIHZhcmlhYmxlTGlzdEZvciQxKGN0eCwgY3Rvcikge1xuICBsZXQgY29udGV4dE1hcCA9IGNhbnZhc1Zhck1hcC5nZXQoY3R4KTtcbiAgaWYgKCFjb250ZXh0TWFwKSB7XG4gICAgY29udGV4dE1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgY2FudmFzVmFyTWFwLnNldChjdHgsIGNvbnRleHRNYXApO1xuICB9XG4gIGlmICghY29udGV4dE1hcC5oYXMoY3RvcikpIHtcbiAgICBjb250ZXh0TWFwLnNldChjdG9yLCBbXSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHRNYXAuZ2V0KGN0b3IpO1xufVxuY29uc3Qgc2F2ZVdlYkdMVmFyID0gKHZhbHVlLCB3aW4sIGN0eCkgPT4ge1xuICBpZiAoIXZhbHVlIHx8ICEoaXNJbnN0YW5jZU9mV2ViR0xPYmplY3QodmFsdWUsIHdpbikgfHwgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSlcbiAgICByZXR1cm47XG4gIGNvbnN0IG5hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICBjb25zdCBsaXN0ID0gdmFyaWFibGVMaXN0Rm9yJDEoY3R4LCBuYW1lKTtcbiAgbGV0IGluZGV4ID0gbGlzdC5pbmRleE9mKHZhbHVlKTtcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIGluZGV4ID0gbGlzdC5sZW5ndGg7XG4gICAgbGlzdC5wdXNoKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gaW5kZXg7XG59O1xuZnVuY3Rpb24gc2VyaWFsaXplQXJnKHZhbHVlLCB3aW4sIGN0eCkge1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIHJldHVybiB2YWx1ZS5tYXAoKGFyZykgPT4gc2VyaWFsaXplQXJnKGFyZywgd2luLCBjdHgpKTtcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSB8fCB2YWx1ZSBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSB8fCB2YWx1ZSBpbnN0YW5jZW9mIEludDMyQXJyYXkgfHwgdmFsdWUgaW5zdGFuY2VvZiBVaW50MzJBcnJheSB8fCB2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgdmFsdWUgaW5zdGFuY2VvZiBVaW50MTZBcnJheSB8fCB2YWx1ZSBpbnN0YW5jZW9mIEludDE2QXJyYXkgfHwgdmFsdWUgaW5zdGFuY2VvZiBJbnQ4QXJyYXkgfHwgdmFsdWUgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSkge1xuICAgIGNvbnN0IG5hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIHJldHVybiB7XG4gICAgICBycl90eXBlOiBuYW1lLFxuICAgICAgYXJnczogW09iamVjdC52YWx1ZXModmFsdWUpXVxuICAgIH07XG4gIH0gZWxzZSBpZiAoXG4gICAgLy8gU2hhcmVkQXJyYXlCdWZmZXIgZGlzYWJsZWQgb24gbW9zdCBicm93c2VycyBkdWUgdG8gc3BlY3RyZS5cbiAgICAvLyBNb3JlIGluZm86IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1NoYXJlZEFycmF5QnVmZmVyL1NoYXJlZEFycmF5QnVmZmVyXG4gICAgLy8gdmFsdWUgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlciB8fFxuICAgIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJcbiAgKSB7XG4gICAgY29uc3QgbmFtZSA9IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgY29uc3QgYmFzZTY0ID0gZW5jb2RlKHZhbHVlKTtcbiAgICByZXR1cm4ge1xuICAgICAgcnJfdHlwZTogbmFtZSxcbiAgICAgIGJhc2U2NFxuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRhVmlldykge1xuICAgIGNvbnN0IG5hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIHJldHVybiB7XG4gICAgICBycl90eXBlOiBuYW1lLFxuICAgICAgYXJnczogW1xuICAgICAgICBzZXJpYWxpemVBcmcodmFsdWUuYnVmZmVyLCB3aW4sIGN0eCksXG4gICAgICAgIHZhbHVlLmJ5dGVPZmZzZXQsXG4gICAgICAgIHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIF1cbiAgICB9O1xuICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCkge1xuICAgIGNvbnN0IG5hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIGNvbnN0IHsgc3JjIH0gPSB2YWx1ZTtcbiAgICByZXR1cm4ge1xuICAgICAgcnJfdHlwZTogbmFtZSxcbiAgICAgIHNyY1xuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCkge1xuICAgIGNvbnN0IG5hbWUgPSBcIkhUTUxJbWFnZUVsZW1lbnRcIjtcbiAgICBjb25zdCBzcmMgPSB2YWx1ZS50b0RhdGFVUkwoKTtcbiAgICByZXR1cm4ge1xuICAgICAgcnJfdHlwZTogbmFtZSxcbiAgICAgIHNyY1xuICAgIH07XG4gIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBJbWFnZURhdGEpIHtcbiAgICBjb25zdCBuYW1lID0gdmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgICByZXR1cm4ge1xuICAgICAgcnJfdHlwZTogbmFtZSxcbiAgICAgIGFyZ3M6IFtzZXJpYWxpemVBcmcodmFsdWUuZGF0YSwgd2luLCBjdHgpLCB2YWx1ZS53aWR0aCwgdmFsdWUuaGVpZ2h0XVxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNJbnN0YW5jZU9mV2ViR0xPYmplY3QodmFsdWUsIHdpbikgfHwgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgY29uc3QgbmFtZSA9IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgY29uc3QgaW5kZXggPSBzYXZlV2ViR0xWYXIodmFsdWUsIHdpbiwgY3R4KTtcbiAgICByZXR1cm4ge1xuICAgICAgcnJfdHlwZTogbmFtZSxcbiAgICAgIGluZGV4XG4gICAgfTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5jb25zdCBzZXJpYWxpemVBcmdzID0gKGFyZ3MsIHdpbiwgY3R4KSA9PiB7XG4gIHJldHVybiBhcmdzLm1hcCgoYXJnKSA9PiBzZXJpYWxpemVBcmcoYXJnLCB3aW4sIGN0eCkpO1xufTtcbmNvbnN0IGlzSW5zdGFuY2VPZldlYkdMT2JqZWN0ID0gKHZhbHVlLCB3aW4pID0+IHtcbiAgY29uc3Qgd2ViR0xDb25zdHJ1Y3Rvck5hbWVzID0gW1xuICAgIFwiV2ViR0xBY3RpdmVJbmZvXCIsXG4gICAgXCJXZWJHTEJ1ZmZlclwiLFxuICAgIFwiV2ViR0xGcmFtZWJ1ZmZlclwiLFxuICAgIFwiV2ViR0xQcm9ncmFtXCIsXG4gICAgXCJXZWJHTFJlbmRlcmJ1ZmZlclwiLFxuICAgIFwiV2ViR0xTaGFkZXJcIixcbiAgICBcIldlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0XCIsXG4gICAgXCJXZWJHTFRleHR1cmVcIixcbiAgICBcIldlYkdMVW5pZm9ybUxvY2F0aW9uXCIsXG4gICAgXCJXZWJHTFZlcnRleEFycmF5T2JqZWN0XCIsXG4gICAgLy8gSW4gb2xkIENocm9tZSB2ZXJzaW9ucywgdmFsdWUgd29uJ3QgYmUgYW4gaW5zdGFuY2VvZiBXZWJHTFZlcnRleEFycmF5T2JqZWN0LlxuICAgIFwiV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FU1wiXG4gIF07XG4gIGNvbnN0IHN1cHBvcnRlZFdlYkdMQ29uc3RydWN0b3JOYW1lcyA9IHdlYkdMQ29uc3RydWN0b3JOYW1lcy5maWx0ZXIoXG4gICAgKG5hbWUpID0+IHR5cGVvZiB3aW5bbmFtZV0gPT09IFwiZnVuY3Rpb25cIlxuICApO1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBzdXBwb3J0ZWRXZWJHTENvbnN0cnVjdG9yTmFtZXMuZmluZChcbiAgICAgIChuYW1lKSA9PiB2YWx1ZSBpbnN0YW5jZW9mIHdpbltuYW1lXVxuICAgIClcbiAgKTtcbn07XG5mdW5jdGlvbiBpbml0Q2FudmFzMkRNdXRhdGlvbk9ic2VydmVyKGNiLCB3aW4sIGJsb2NrQ2xhc3MyLCBibG9ja1NlbGVjdG9yLCB1bmJsb2NrU2VsZWN0b3IpIHtcbiAgY29uc3QgaGFuZGxlcnMgPSBbXTtcbiAgY29uc3QgcHJvcHMyRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFxuICAgIHdpbi5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQucHJvdG90eXBlXG4gICk7XG4gIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wczJEKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2Ygd2luLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5wcm90b3R5cGVbcHJvcF0gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3RvcmVIYW5kbGVyID0gcGF0Y2goXG4gICAgICAgIHdpbi5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQucHJvdG90eXBlLFxuICAgICAgICBwcm9wLFxuICAgICAgICBmdW5jdGlvbihvcmlnaW5hbCkge1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgICAgICAgICBpZiAoIWlzQmxvY2tlZChcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMsXG4gICAgICAgICAgICAgIGJsb2NrQ2xhc3MyLFxuICAgICAgICAgICAgICBibG9ja1NlbGVjdG9yLFxuICAgICAgICAgICAgICB1bmJsb2NrU2VsZWN0b3IsXG4gICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dCQxKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNvcmRBcmdzID0gc2VyaWFsaXplQXJncyhhcmdzLCB3aW4sIHRoaXMpO1xuICAgICAgICAgICAgICAgIGNiKHRoaXMuY2FudmFzLCB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBDYW52YXNDb250ZXh0W1wiMkRcIl0sXG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogcHJvcCxcbiAgICAgICAgICAgICAgICAgIGFyZ3M6IHJlY29yZEFyZ3NcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGhhbmRsZXJzLnB1c2gocmVzdG9yZUhhbmRsZXIpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29uc3QgaG9va0hhbmRsZXIgPSBob29rU2V0dGVyKFxuICAgICAgICB3aW4uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELnByb3RvdHlwZSxcbiAgICAgICAgcHJvcCxcbiAgICAgICAge1xuICAgICAgICAgIHNldCh2Mikge1xuICAgICAgICAgICAgY2IodGhpcy5jYW52YXMsIHtcbiAgICAgICAgICAgICAgdHlwZTogQ2FudmFzQ29udGV4dFtcIjJEXCJdLFxuICAgICAgICAgICAgICBwcm9wZXJ0eTogcHJvcCxcbiAgICAgICAgICAgICAgYXJnczogW3YyXSxcbiAgICAgICAgICAgICAgc2V0dGVyOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBoYW5kbGVycy5wdXNoKGhvb2tIYW5kbGVyKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICgpID0+IHtcbiAgICBoYW5kbGVycy5mb3JFYWNoKChoKSA9PiBoKCkpO1xuICB9O1xufVxuZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZENvbnRleHROYW1lKGNvbnRleHRUeXBlKSB7XG4gIHJldHVybiBjb250ZXh0VHlwZSA9PT0gXCJleHBlcmltZW50YWwtd2ViZ2xcIiA/IFwid2ViZ2xcIiA6IGNvbnRleHRUeXBlO1xufVxuZnVuY3Rpb24gaW5pdENhbnZhc0NvbnRleHRPYnNlcnZlcih3aW4sIGJsb2NrQ2xhc3MsIGJsb2NrU2VsZWN0b3IsIHVuYmxvY2tTZWxlY3Rvciwgc2V0UHJlc2VydmVEcmF3aW5nQnVmZmVyVG9UcnVlKSB7XG4gIGNvbnN0IGhhbmRsZXJzID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdG9yZUhhbmRsZXIgPSBwYXRjaChcbiAgICAgIHdpbi5IVE1MQ2FudmFzRWxlbWVudC5wcm90b3R5cGUsXG4gICAgICBcImdldENvbnRleHRcIixcbiAgICAgIGZ1bmN0aW9uKG9yaWdpbmFsKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihjb250ZXh0VHlwZSwgLi4uYXJncykge1xuICAgICAgICAgIGlmICghaXNCbG9ja2VkKHRoaXMsIGJsb2NrQ2xhc3MsIGJsb2NrU2VsZWN0b3IsIHVuYmxvY2tTZWxlY3RvciwgdHJ1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eE5hbWUgPSBnZXROb3JtYWxpemVkQ29udGV4dE5hbWUoY29udGV4dFR5cGUpO1xuICAgICAgICAgICAgaWYgKCEoXCJfX2NvbnRleHRcIiBpbiB0aGlzKSkgdGhpcy5fX2NvbnRleHQgPSBjdHhOYW1lO1xuICAgICAgICAgICAgaWYgKHNldFByZXNlcnZlRHJhd2luZ0J1ZmZlclRvVHJ1ZSAmJiBbXCJ3ZWJnbFwiLCBcIndlYmdsMlwiXS5pbmNsdWRlcyhjdHhOYW1lKSkge1xuICAgICAgICAgICAgICBpZiAoYXJnc1swXSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHRBdHRyaWJ1dGVzID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHRBdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgY29udGV4dEF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJncy5zcGxpY2UoMCwgMSwge1xuICAgICAgICAgICAgICAgICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIFtjb250ZXh0VHlwZSwgLi4uYXJnc10pO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICk7XG4gICAgaGFuZGxlcnMucHVzaChyZXN0b3JlSGFuZGxlcik7XG4gIH0gY2F0Y2gge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gcGF0Y2ggSFRNTENhbnZhc0VsZW1lbnQucHJvdG90eXBlLmdldENvbnRleHRcIik7XG4gIH1cbiAgcmV0dXJuICgpID0+IHtcbiAgICBoYW5kbGVycy5mb3JFYWNoKChoKSA9PiBoKCkpO1xuICB9O1xufVxuZnVuY3Rpb24gcGF0Y2hHTFByb3RvdHlwZShwcm90b3R5cGUsIHR5cGUsIGNiLCBibG9ja0NsYXNzMiwgYmxvY2tTZWxlY3RvciwgdW5ibG9ja1NlbGVjdG9yLCBfbWlycm9yMiwgd2luKSB7XG4gIGNvbnN0IGhhbmRsZXJzID0gW107XG4gIGNvbnN0IHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG90eXBlKTtcbiAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzKSB7XG4gICAgaWYgKFxuICAgICAgLy9wcm9wLnN0YXJ0c1dpdGgoJ2dldCcpIHx8ICAvLyBlLmcuIGdldFByb2dyYW1QYXJhbWV0ZXIsIGJ1dCB0b28gcmlza3lcbiAgICAgIFtcbiAgICAgICAgXCJpc0NvbnRleHRMb3N0XCIsXG4gICAgICAgIFwiY2FudmFzXCIsXG4gICAgICAgIFwiZHJhd2luZ0J1ZmZlcldpZHRoXCIsXG4gICAgICAgIFwiZHJhd2luZ0J1ZmZlckhlaWdodFwiXG4gICAgICBdLmluY2x1ZGVzKHByb3ApXG4gICAgKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgcHJvdG90eXBlW3Byb3BdICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZXN0b3JlSGFuZGxlciA9IHBhdGNoKFxuICAgICAgICBwcm90b3R5cGUsXG4gICAgICAgIHByb3AsXG4gICAgICAgIGZ1bmN0aW9uKG9yaWdpbmFsKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgc2F2ZVdlYkdMVmFyKHJlc3VsdCwgd2luLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChcInRhZ05hbWVcIiBpbiB0aGlzLmNhbnZhcyAmJiAhaXNCbG9ja2VkKFxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcyxcbiAgICAgICAgICAgICAgYmxvY2tDbGFzczIsXG4gICAgICAgICAgICAgIGJsb2NrU2VsZWN0b3IsXG4gICAgICAgICAgICAgIHVuYmxvY2tTZWxlY3RvcixcbiAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCByZWNvcmRBcmdzID0gc2VyaWFsaXplQXJncyhhcmdzLCB3aW4sIHRoaXMpO1xuICAgICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wLFxuICAgICAgICAgICAgICAgIGFyZ3M6IHJlY29yZEFyZ3NcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgY2IodGhpcy5jYW52YXMsIG11dGF0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGhhbmRsZXJzLnB1c2gocmVzdG9yZUhhbmRsZXIpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29uc3QgaG9va0hhbmRsZXIgPSBob29rU2V0dGVyKHByb3RvdHlwZSwgcHJvcCwge1xuICAgICAgICBzZXQodjIpIHtcbiAgICAgICAgICBjYih0aGlzLmNhbnZhcywge1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wLFxuICAgICAgICAgICAgYXJnczogW3YyXSxcbiAgICAgICAgICAgIHNldHRlcjogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGhhbmRsZXJzLnB1c2goaG9va0hhbmRsZXIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaGFuZGxlcnM7XG59XG5mdW5jdGlvbiBpbml0Q2FudmFzV2ViR0xNdXRhdGlvbk9ic2VydmVyKGNiLCB3aW4sIGJsb2NrQ2xhc3MyLCBibG9ja1NlbGVjdG9yLCB1bmJsb2NrU2VsZWN0b3IsIG1pcnJvcjIpIHtcbiAgY29uc3QgaGFuZGxlcnMgPSBbXTtcbiAgaGFuZGxlcnMucHVzaChcbiAgICAuLi5wYXRjaEdMUHJvdG90eXBlKFxuICAgICAgd2luLldlYkdMUmVuZGVyaW5nQ29udGV4dC5wcm90b3R5cGUsXG4gICAgICBDYW52YXNDb250ZXh0LldlYkdMLFxuICAgICAgY2IsXG4gICAgICBibG9ja0NsYXNzMixcbiAgICAgIGJsb2NrU2VsZWN0b3IsXG4gICAgICB1bmJsb2NrU2VsZWN0b3IsXG4gICAgICBtaXJyb3IyLFxuICAgICAgd2luXG4gICAgKVxuICApO1xuICBpZiAodHlwZW9mIHdpbi5XZWJHTDJSZW5kZXJpbmdDb250ZXh0ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgaGFuZGxlcnMucHVzaChcbiAgICAgIC4uLnBhdGNoR0xQcm90b3R5cGUoXG4gICAgICAgIHdpbi5XZWJHTDJSZW5kZXJpbmdDb250ZXh0LnByb3RvdHlwZSxcbiAgICAgICAgQ2FudmFzQ29udGV4dC5XZWJHTDIsXG4gICAgICAgIGNiLFxuICAgICAgICBibG9ja0NsYXNzMixcbiAgICAgICAgYmxvY2tTZWxlY3RvcixcbiAgICAgICAgdW5ibG9ja1NlbGVjdG9yLFxuICAgICAgICBtaXJyb3IyLFxuICAgICAgICB3aW5cbiAgICAgIClcbiAgICApO1xuICB9XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaGFuZGxlcnMuZm9yRWFjaCgoaCkgPT4gaCgpKTtcbiAgfTtcbn1cbmNvbnN0IHIkMSA9IGBmb3IodmFyIGU9XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIsdD1cInVuZGVmaW5lZFwiPT10eXBlb2YgVWludDhBcnJheT9bXTpuZXcgVWludDhBcnJheSgyNTYpLGE9MDthPDY0O2ErKyl0W2UuY2hhckNvZGVBdChhKV09YTt2YXIgbj1mdW5jdGlvbih0KXt2YXIgYSxuPW5ldyBVaW50OEFycmF5KHQpLHI9bi5sZW5ndGgscz1cIlwiO2ZvcihhPTA7YTxyO2ErPTMpcys9ZVtuW2FdPj4yXSxzKz1lWygzJm5bYV0pPDw0fG5bYSsxXT4+NF0scys9ZVsoMTUmblthKzFdKTw8MnxuW2ErMl0+PjZdLHMrPWVbNjMmblthKzJdXTtyZXR1cm4gciUzPT0yP3M9cy5zdWJzdHJpbmcoMCxzLmxlbmd0aC0xKStcIj1cIjpyJTM9PTEmJihzPXMuc3Vic3RyaW5nKDAscy5sZW5ndGgtMikrXCI9PVwiKSxzfTtjb25zdCByPW5ldyBNYXAscz1uZXcgTWFwO2NvbnN0IGk9c2VsZjtpLm9ubWVzc2FnZT1hc3luYyBmdW5jdGlvbihlKXtpZighKFwiT2Zmc2NyZWVuQ2FudmFzXCJpbiBnbG9iYWxUaGlzKSlyZXR1cm4gaS5wb3N0TWVzc2FnZSh7aWQ6ZS5kYXRhLmlkfSk7e2NvbnN0e2lkOnQsYml0bWFwOmEsd2lkdGg6byxoZWlnaHQ6ZixtYXhDYW52YXNTaXplOmMsZGF0YVVSTE9wdGlvbnM6Z309ZS5kYXRhLHU9YXN5bmMgZnVuY3Rpb24oZSx0LGEpe2NvbnN0IHI9ZStcIi1cIit0O2lmKFwiT2Zmc2NyZWVuQ2FudmFzXCJpbiBnbG9iYWxUaGlzKXtpZihzLmhhcyhyKSlyZXR1cm4gcy5nZXQocik7Y29uc3QgaT1uZXcgT2Zmc2NyZWVuQ2FudmFzKGUsdCk7aS5nZXRDb250ZXh0KFwiMmRcIik7Y29uc3Qgbz1hd2FpdCBpLmNvbnZlcnRUb0Jsb2IoYSksZj1hd2FpdCBvLmFycmF5QnVmZmVyKCksYz1uKGYpO3JldHVybiBzLnNldChyLGMpLGN9cmV0dXJuXCJcIn0obyxmLGcpLFtoLGRdPWZ1bmN0aW9uKGUsdCxhKXtpZighYSlyZXR1cm5bZSx0XTtjb25zdFtuLHJdPWE7aWYoZTw9biYmdDw9cilyZXR1cm5bZSx0XTtsZXQgcz1lLGk9dDtyZXR1cm4gcz5uJiYoaT1NYXRoLmZsb29yKG4qdC9lKSxzPW4pLGk+ciYmKHM9TWF0aC5mbG9vcihyKmUvdCksaT1yKSxbcyxpXX0obyxmLGMpLGw9bmV3IE9mZnNjcmVlbkNhbnZhcyhoLGQpLHc9bC5nZXRDb250ZXh0KFwiYml0bWFwcmVuZGVyZXJcIikscD1oPT09byYmZD09PWY/YTphd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChhLHtyZXNpemVXaWR0aDpoLHJlc2l6ZUhlaWdodDpkLHJlc2l6ZVF1YWxpdHk6XCJsb3dcIn0pO3cudHJhbnNmZXJGcm9tSW1hZ2VCaXRtYXAocCksYS5jbG9zZSgpO2NvbnN0IHk9YXdhaXQgbC5jb252ZXJ0VG9CbG9iKGcpLHY9eS50eXBlLGI9YXdhaXQgeS5hcnJheUJ1ZmZlcigpLG09bihiKTtpZihwLmNsb3NlKCksIXIuaGFzKHQpJiZhd2FpdCB1PT09bSlyZXR1cm4gci5zZXQodCxtKSxpLnBvc3RNZXNzYWdlKHtpZDp0fSk7aWYoci5nZXQodCk9PT1tKXJldHVybiBpLnBvc3RNZXNzYWdlKHtpZDp0fSk7aS5wb3N0TWVzc2FnZSh7aWQ6dCx0eXBlOnYsYmFzZTY0Om0sd2lkdGg6byxoZWlnaHQ6Zn0pLHIuc2V0KHQsbSl9fTtgO1xuZnVuY3Rpb24gdCQxKCkge1xuICBjb25zdCB0MiA9IG5ldyBCbG9iKFtyJDFdKTtcbiAgcmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwodDIpO1xufVxuY2xhc3MgQ2FudmFzTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLnBlbmRpbmdDYW52YXNNdXRhdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgIHRoaXMucmFmU3RhbXBzID0geyBsYXRlc3RJZDogMCwgaW52b2tlSWQ6IG51bGwgfTtcbiAgICB0aGlzLnNoYWRvd0RvbXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICAgIHRoaXMud2luZG93c1NldCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha1NldCgpO1xuICAgIHRoaXMud2luZG93cyA9IFtdO1xuICAgIHRoaXMucmVzdG9yZUhhbmRsZXJzID0gW107XG4gICAgdGhpcy5mcm96ZW4gPSBmYWxzZTtcbiAgICB0aGlzLmxvY2tlZCA9IGZhbHNlO1xuICAgIHRoaXMuc25hcHNob3RJblByb2dyZXNzTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICB0aGlzLndvcmtlciA9IG51bGw7XG4gICAgdGhpcy5sYXN0U25hcHNob3RUaW1lID0gMDtcbiAgICB0aGlzLnByb2Nlc3NNdXRhdGlvbiA9ICh0YXJnZXQsIG11dGF0aW9uKSA9PiB7XG4gICAgICBjb25zdCBuZXdGcmFtZSA9IHRoaXMucmFmU3RhbXBzLmludm9rZUlkICYmIHRoaXMucmFmU3RhbXBzLmxhdGVzdElkICE9PSB0aGlzLnJhZlN0YW1wcy5pbnZva2VJZDtcbiAgICAgIGlmIChuZXdGcmFtZSB8fCAhdGhpcy5yYWZTdGFtcHMuaW52b2tlSWQpXG4gICAgICAgIHRoaXMucmFmU3RhbXBzLmludm9rZUlkID0gdGhpcy5yYWZTdGFtcHMubGF0ZXN0SWQ7XG4gICAgICBpZiAoIXRoaXMucGVuZGluZ0NhbnZhc011dGF0aW9ucy5oYXModGFyZ2V0KSkge1xuICAgICAgICB0aGlzLnBlbmRpbmdDYW52YXNNdXRhdGlvbnMuc2V0KHRhcmdldCwgW10pO1xuICAgICAgfVxuICAgICAgdGhpcy5wZW5kaW5nQ2FudmFzTXV0YXRpb25zLmdldCh0YXJnZXQpLnB1c2gobXV0YXRpb24pO1xuICAgIH07XG4gICAgY29uc3Qge1xuICAgICAgc2FtcGxpbmcgPSBcImFsbFwiLFxuICAgICAgd2luLFxuICAgICAgYmxvY2tDbGFzcyxcbiAgICAgIGJsb2NrU2VsZWN0b3IsXG4gICAgICB1bmJsb2NrU2VsZWN0b3IsXG4gICAgICBtYXhDYW52YXNTaXplLFxuICAgICAgcmVjb3JkQ2FudmFzLFxuICAgICAgZGF0YVVSTE9wdGlvbnMsXG4gICAgICBlcnJvckhhbmRsZXI6IGVycm9ySGFuZGxlcjJcbiAgICB9ID0gb3B0aW9ucztcbiAgICB0aGlzLm11dGF0aW9uQ2IgPSBvcHRpb25zLm11dGF0aW9uQ2I7XG4gICAgdGhpcy5taXJyb3IgPSBvcHRpb25zLm1pcnJvcjtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIGlmIChlcnJvckhhbmRsZXIyKSB7XG4gICAgICByZWdpc3RlckVycm9ySGFuZGxlcihlcnJvckhhbmRsZXIyKTtcbiAgICB9XG4gICAgaWYgKHJlY29yZENhbnZhcyAmJiB0eXBlb2Ygc2FtcGxpbmcgPT09IFwibnVtYmVyXCIgfHwgb3B0aW9ucy5lbmFibGVNYW51YWxTbmFwc2hvdCkge1xuICAgICAgdGhpcy53b3JrZXIgPSB0aGlzLmluaXRGUFNXb3JrZXIoKTtcbiAgICB9XG4gICAgdGhpcy5hZGRXaW5kb3cod2luKTtcbiAgICBpZiAob3B0aW9ucy5lbmFibGVNYW51YWxTbmFwc2hvdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYWxsYmFja1dyYXBwZXIoKCkgPT4ge1xuICAgICAgaWYgKHJlY29yZENhbnZhcyAmJiBzYW1wbGluZyA9PT0gXCJhbGxcIikge1xuICAgICAgICB0aGlzLnN0YXJ0UkFGVGltZXN0YW1waW5nKCk7XG4gICAgICAgIHRoaXMuc3RhcnRQZW5kaW5nQ2FudmFzTXV0YXRpb25GbHVzaGVyKCk7XG4gICAgICB9XG4gICAgICBpZiAocmVjb3JkQ2FudmFzICYmIHR5cGVvZiBzYW1wbGluZyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICB0aGlzLmluaXRDYW52YXNGUFNPYnNlcnZlcihcbiAgICAgICAgICBzYW1wbGluZyxcbiAgICAgICAgICBibG9ja0NsYXNzLFxuICAgICAgICAgIGJsb2NrU2VsZWN0b3IsXG4gICAgICAgICAgdW5ibG9ja1NlbGVjdG9yLFxuICAgICAgICAgIG1heENhbnZhc1NpemUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGF0YVVSTE9wdGlvbnNcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgfVxuICByZXNldCgpIHtcbiAgICB0aGlzLnBlbmRpbmdDYW52YXNNdXRhdGlvbnMuY2xlYXIoKTtcbiAgICB0aGlzLnJlc3RvcmVIYW5kbGVycy5mb3JFYWNoKChoYW5kbGVyKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBoYW5kbGVyKCk7XG4gICAgICB9IGNhdGNoIChlMikge1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucmVzdG9yZUhhbmRsZXJzID0gW107XG4gICAgdGhpcy53aW5kb3dzU2V0ID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCk7XG4gICAgdGhpcy53aW5kb3dzID0gW107XG4gICAgdGhpcy5zaGFkb3dEb21zID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICB0aGlzLndvcmtlcj8udGVybWluYXRlKCk7XG4gICAgdGhpcy53b3JrZXIgPSBudWxsO1xuICAgIHRoaXMuc25hcHNob3RJblByb2dyZXNzTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBmcmVlemUoKSB7XG4gICAgdGhpcy5mcm96ZW4gPSB0cnVlO1xuICB9XG4gIHVuZnJlZXplKCkge1xuICAgIHRoaXMuZnJvemVuID0gZmFsc2U7XG4gIH1cbiAgbG9jaygpIHtcbiAgICB0aGlzLmxvY2tlZCA9IHRydWU7XG4gIH1cbiAgdW5sb2NrKCkge1xuICAgIHRoaXMubG9ja2VkID0gZmFsc2U7XG4gIH1cbiAgYWRkV2luZG93KHdpbikge1xuICAgIGNvbnN0IHtcbiAgICAgIHNhbXBsaW5nID0gXCJhbGxcIixcbiAgICAgIGJsb2NrQ2xhc3MsXG4gICAgICBibG9ja1NlbGVjdG9yLFxuICAgICAgdW5ibG9ja1NlbGVjdG9yLFxuICAgICAgcmVjb3JkQ2FudmFzLFxuICAgICAgZW5hYmxlTWFudWFsU25hcHNob3RcbiAgICB9ID0gdGhpcy5vcHRpb25zO1xuICAgIGlmICh0aGlzLndpbmRvd3NTZXQuaGFzKHdpbikpIHJldHVybjtcbiAgICBpZiAoZW5hYmxlTWFudWFsU25hcHNob3QpIHtcbiAgICAgIHRoaXMud2luZG93c1NldC5hZGQod2luKTtcbiAgICAgIHRoaXMud2luZG93cy5wdXNoKG5ldyBXZWFrUmVmKHdpbikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYWxsYmFja1dyYXBwZXIoKCkgPT4ge1xuICAgICAgaWYgKHJlY29yZENhbnZhcyAmJiBzYW1wbGluZyA9PT0gXCJhbGxcIikge1xuICAgICAgICB0aGlzLmluaXRDYW52YXNNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgICAgIHdpbixcbiAgICAgICAgICBibG9ja0NsYXNzLFxuICAgICAgICAgIGJsb2NrU2VsZWN0b3IsXG4gICAgICAgICAgdW5ibG9ja1NlbGVjdG9yXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocmVjb3JkQ2FudmFzICYmIHR5cGVvZiBzYW1wbGluZyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBjb25zdCBjYW52YXNDb250ZXh0UmVzZXQgPSBpbml0Q2FudmFzQ29udGV4dE9ic2VydmVyKFxuICAgICAgICAgIHdpbixcbiAgICAgICAgICBibG9ja0NsYXNzLFxuICAgICAgICAgIGJsb2NrU2VsZWN0b3IsXG4gICAgICAgICAgdW5ibG9ja1NlbGVjdG9yLFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZXN0b3JlSGFuZGxlcnMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgY2FudmFzQ29udGV4dFJlc2V0KCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pKCk7XG4gICAgdGhpcy53aW5kb3dzU2V0LmFkZCh3aW4pO1xuICAgIHRoaXMud2luZG93cy5wdXNoKG5ldyBXZWFrUmVmKHdpbikpO1xuICB9XG4gIGFkZFNoYWRvd1Jvb3Qoc2hhZG93Um9vdCkge1xuICAgIHRoaXMuc2hhZG93RG9tcy5hZGQobmV3IFdlYWtSZWYoc2hhZG93Um9vdCkpO1xuICB9XG4gIHJlc2V0U2hhZG93Um9vdHMoKSB7XG4gICAgdGhpcy5zaGFkb3dEb21zID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgfVxuICBpbml0RlBTV29ya2VyKCkge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIodCQxKCkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSAoZTIpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBlMi5kYXRhO1xuICAgICAgY29uc3QgeyBpZCB9ID0gZGF0YTtcbiAgICAgIHRoaXMuc25hcHNob3RJblByb2dyZXNzTWFwLnNldChpZCwgZmFsc2UpO1xuICAgICAgaWYgKCEoXCJiYXNlNjRcIiBpbiBkYXRhKSkgcmV0dXJuO1xuICAgICAgY29uc3QgeyBiYXNlNjQsIHR5cGUsIHdpZHRoLCBoZWlnaHQgfSA9IGRhdGE7XG4gICAgICB0aGlzLm11dGF0aW9uQ2Ioe1xuICAgICAgICBpZCxcbiAgICAgICAgdHlwZTogQ2FudmFzQ29udGV4dFtcIjJEXCJdLFxuICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb3BlcnR5OiBcImNsZWFyUmVjdFwiLFxuICAgICAgICAgICAgLy8gd2lwZSBjYW52YXNcbiAgICAgICAgICAgIGFyZ3M6IFswLCAwLCB3aWR0aCwgaGVpZ2h0XVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvcGVydHk6IFwiZHJhd0ltYWdlXCIsXG4gICAgICAgICAgICAvLyBkcmF3cyAoc2VtaS10cmFuc3BhcmVudCkgaW1hZ2VcbiAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJyX3R5cGU6IFwiSW1hZ2VCaXRtYXBcIixcbiAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJyX3R5cGU6IFwiQmxvYlwiLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBbeyBycl90eXBlOiBcIkFycmF5QnVmZmVyXCIsIGJhc2U2NCB9XSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgLy8gVGhlIGJlbG93IGFyZ3MgYXJlIG5lZWRlZCBpZiB3ZSBlbmZvcmNlIGEgbWF4IHNpemUsIHdlIHdhbnQgdG9cbiAgICAgICAgICAgICAgLy8gcmV0YWluIHRoZSBvcmlnaW5hbCBzaXplIHdoZW4gZHJhd2luZyB0aGUgaW1hZ2UgKHdoaWNoIHNob3VsZCBiZSBzbWFsbGVyKVxuICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgaGVpZ2h0XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiB3b3JrZXI7XG4gIH1cbiAgaW5pdENhbnZhc0ZQU09ic2VydmVyKGZwcywgYmxvY2tDbGFzcywgYmxvY2tTZWxlY3RvciwgdW5ibG9ja1NlbGVjdG9yLCBtYXhDYW52YXNTaXplLCBvcHRpb25zKSB7XG4gICAgY29uc3QgcmFmSWQgPSB0aGlzLnRha2VTbmFwc2hvdChcbiAgICAgIGZhbHNlLFxuICAgICAgZnBzLFxuICAgICAgYmxvY2tDbGFzcyxcbiAgICAgIGJsb2NrU2VsZWN0b3IsXG4gICAgICB1bmJsb2NrU2VsZWN0b3IsXG4gICAgICBtYXhDYW52YXNTaXplLFxuICAgICAgb3B0aW9ucy5kYXRhVVJMT3B0aW9uc1xuICAgICk7XG4gICAgdGhpcy5yZXN0b3JlSGFuZGxlcnMucHVzaCgoKSA9PiB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7XG4gICAgfSk7XG4gIH1cbiAgaW5pdENhbnZhc011dGF0aW9uT2JzZXJ2ZXIod2luLCBibG9ja0NsYXNzLCBibG9ja1NlbGVjdG9yLCB1bmJsb2NrU2VsZWN0b3IpIHtcbiAgICBjb25zdCBjYW52YXNDb250ZXh0UmVzZXQgPSBpbml0Q2FudmFzQ29udGV4dE9ic2VydmVyKFxuICAgICAgd2luLFxuICAgICAgYmxvY2tDbGFzcyxcbiAgICAgIGJsb2NrU2VsZWN0b3IsXG4gICAgICB1bmJsb2NrU2VsZWN0b3IsXG4gICAgICBmYWxzZVxuICAgICk7XG4gICAgY29uc3QgY2FudmFzMkRSZXNldCA9IGluaXRDYW52YXMyRE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICB0aGlzLnByb2Nlc3NNdXRhdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgd2luLFxuICAgICAgYmxvY2tDbGFzcyxcbiAgICAgIGJsb2NrU2VsZWN0b3IsXG4gICAgICB1bmJsb2NrU2VsZWN0b3JcbiAgICApO1xuICAgIGNvbnN0IGNhbnZhc1dlYkdMMWFuZDJSZXNldCA9IGluaXRDYW52YXNXZWJHTE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICB0aGlzLnByb2Nlc3NNdXRhdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgd2luLFxuICAgICAgYmxvY2tDbGFzcyxcbiAgICAgIGJsb2NrU2VsZWN0b3IsXG4gICAgICB1bmJsb2NrU2VsZWN0b3IsXG4gICAgICB0aGlzLm1pcnJvclxuICAgICk7XG4gICAgdGhpcy5yZXN0b3JlSGFuZGxlcnMucHVzaCgoKSA9PiB7XG4gICAgICBjYW52YXNDb250ZXh0UmVzZXQoKTtcbiAgICAgIGNhbnZhczJEUmVzZXQoKTtcbiAgICAgIGNhbnZhc1dlYkdMMWFuZDJSZXNldCgpO1xuICAgIH0pO1xuICB9XG4gIHNuYXBzaG90KGNhbnZhc0VsZW1lbnQpIHtcbiAgICBjb25zdCB7IG9wdGlvbnMgfSA9IHRoaXM7XG4gICAgY29uc3QgcmFmSWQgPSB0aGlzLnRha2VTbmFwc2hvdChcbiAgICAgIHRydWUsXG4gICAgICBvcHRpb25zLnNhbXBsaW5nID09PSBcImFsbFwiID8gMiA6IG9wdGlvbnMuc2FtcGxpbmcgfHwgMixcbiAgICAgIG9wdGlvbnMuYmxvY2tDbGFzcyxcbiAgICAgIG9wdGlvbnMuYmxvY2tTZWxlY3RvcixcbiAgICAgIG9wdGlvbnMudW5ibG9ja1NlbGVjdG9yLFxuICAgICAgb3B0aW9ucy5tYXhDYW52YXNTaXplLFxuICAgICAgb3B0aW9ucy5kYXRhVVJMT3B0aW9ucyxcbiAgICAgIGNhbnZhc0VsZW1lbnRcbiAgICApO1xuICAgIHRoaXMucmVzdG9yZUhhbmRsZXJzLnB1c2goKCkgPT4ge1xuICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICAgIH0pO1xuICB9XG4gIHRha2VTbmFwc2hvdChpc01hbnVhbFNuYXBzaG90LCBmcHMsIGJsb2NrQ2xhc3MsIGJsb2NrU2VsZWN0b3IsIHVuYmxvY2tTZWxlY3RvciwgbWF4Q2FudmFzU2l6ZSwgZGF0YVVSTE9wdGlvbnMsIGNhbnZhc0VsZW1lbnQpIHtcbiAgICBjb25zdCB0aW1lQmV0d2VlblNuYXBzaG90cyA9IDFlMyAvIGZwcztcbiAgICBsZXQgcmFmSWQ7XG4gICAgY29uc3QgZ2V0Q2FudmFzID0gKGNhbnZhc0VsZW1lbnQyKSA9PiB7XG4gICAgICBpZiAoY2FudmFzRWxlbWVudDIpIHtcbiAgICAgICAgcmV0dXJuIFtjYW52YXNFbGVtZW50Ml07XG4gICAgICB9XG4gICAgICBjb25zdCBtYXRjaGVkQ2FudmFzID0gW107XG4gICAgICBjb25zdCBzZWFyY2hDYW52YXMgPSAocm9vdCkgPT4ge1xuICAgICAgICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCJjYW52YXNcIikuZm9yRWFjaCgoY2FudmFzKSA9PiB7XG4gICAgICAgICAgaWYgKCFpc0Jsb2NrZWQoY2FudmFzLCBibG9ja0NsYXNzLCBibG9ja1NlbGVjdG9yLCB1bmJsb2NrU2VsZWN0b3IsIHRydWUpKSB7XG4gICAgICAgICAgICBtYXRjaGVkQ2FudmFzLnB1c2goY2FudmFzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLndpbmRvd3MpIHtcbiAgICAgICAgY29uc3Qgd2luZG93MiA9IGl0ZW0uZGVyZWYoKTtcbiAgICAgICAgbGV0IF9kb2N1bWVudDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBfZG9jdW1lbnQgPSB3aW5kb3cyICYmIHdpbmRvdzIuZG9jdW1lbnQ7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICB9XG4gICAgICAgIGlmIChfZG9jdW1lbnQpIHtcbiAgICAgICAgICBzZWFyY2hDYW52YXMoX2RvY3VtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuc2hhZG93RG9tcykge1xuICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gaXRlbS5kZXJlZigpO1xuICAgICAgICBpZiAoc2hhZG93Um9vdCkge1xuICAgICAgICAgIHNlYXJjaENhbnZhcyhzaGFkb3dSb290KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG1hdGNoZWRDYW52YXM7XG4gICAgfTtcbiAgICBjb25zdCB0YWtlQ2FudmFzU25hcHNob3RzID0gKHRpbWVzdGFtcCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLndpbmRvd3MubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmxhc3RTbmFwc2hvdFRpbWUgJiYgdGltZXN0YW1wIC0gdGhpcy5sYXN0U25hcHNob3RUaW1lIDwgdGltZUJldHdlZW5TbmFwc2hvdHMpIHtcbiAgICAgICAgcmFmSWQgPSBvblJlcXVlc3RBbmltYXRpb25GcmFtZSh0YWtlQ2FudmFzU25hcHNob3RzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXN0U25hcHNob3RUaW1lID0gdGltZXN0YW1wO1xuICAgICAgZ2V0Q2FudmFzKGNhbnZhc0VsZW1lbnQpLmZvckVhY2goKGNhbnZhcykgPT4ge1xuICAgICAgICBpZiAoIXRoaXMubWlycm9yLmhhc05vZGUoY2FudmFzKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IHRoaXMubWlycm9yLmdldElkKGNhbnZhcyk7XG4gICAgICAgIGlmICh0aGlzLnNuYXBzaG90SW5Qcm9ncmVzc01hcC5nZXQoaWQpKSByZXR1cm47XG4gICAgICAgIGlmICghY2FudmFzLndpZHRoIHx8ICFjYW52YXMuaGVpZ2h0KSByZXR1cm47XG4gICAgICAgIHRoaXMuc25hcHNob3RJblByb2dyZXNzTWFwLnNldChpZCwgdHJ1ZSk7XG4gICAgICAgIGlmICghaXNNYW51YWxTbmFwc2hvdCAmJiBbXCJ3ZWJnbFwiLCBcIndlYmdsMlwiXS5pbmNsdWRlcyhjYW52YXMuX19jb250ZXh0KSkge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dChjYW52YXMuX19jb250ZXh0KTtcbiAgICAgICAgICBpZiAoY29udGV4dD8uZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKT8ucHJlc2VydmVEcmF3aW5nQnVmZmVyID09PSBmYWxzZSkge1xuICAgICAgICAgICAgY29udGV4dC5jbGVhcihjb250ZXh0LkNPTE9SX0JVRkZFUl9CSVQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVJbWFnZUJpdG1hcChjYW52YXMpLnRoZW4oKGJpdG1hcCkgPT4ge1xuICAgICAgICAgIHRoaXMud29ya2VyPy5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgIGJpdG1hcCxcbiAgICAgICAgICAgICAgd2lkdGg6IGNhbnZhcy53aWR0aCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBjYW52YXMuaGVpZ2h0LFxuICAgICAgICAgICAgICBkYXRhVVJMT3B0aW9ucyxcbiAgICAgICAgICAgICAgbWF4Q2FudmFzU2l6ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtiaXRtYXBdXG4gICAgICAgICAgKTtcbiAgICAgICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgY2FsbGJhY2tXcmFwcGVyKCgpID0+IHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgIH0pKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBpZiAoIWlzTWFudWFsU25hcHNob3QpIHtcbiAgICAgICAgcmFmSWQgPSBvblJlcXVlc3RBbmltYXRpb25GcmFtZSh0YWtlQ2FudmFzU25hcHNob3RzKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJhZklkID0gb25SZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGFrZUNhbnZhc1NuYXBzaG90cyk7XG4gICAgcmV0dXJuIHJhZklkO1xuICB9XG4gIHN0YXJ0UGVuZGluZ0NhbnZhc011dGF0aW9uRmx1c2hlcigpIHtcbiAgICBvblJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmZsdXNoUGVuZGluZ0NhbnZhc011dGF0aW9ucygpKTtcbiAgfVxuICBzdGFydFJBRlRpbWVzdGFtcGluZygpIHtcbiAgICBjb25zdCBzZXRMYXRlc3RSQUZUaW1lc3RhbXAgPSAodGltZXN0YW1wKSA9PiB7XG4gICAgICB0aGlzLnJhZlN0YW1wcy5sYXRlc3RJZCA9IHRpbWVzdGFtcDtcbiAgICAgIG9uUmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNldExhdGVzdFJBRlRpbWVzdGFtcCk7XG4gICAgfTtcbiAgICBvblJlcXVlc3RBbmltYXRpb25GcmFtZShzZXRMYXRlc3RSQUZUaW1lc3RhbXApO1xuICB9XG4gIGZsdXNoUGVuZGluZ0NhbnZhc011dGF0aW9ucygpIHtcbiAgICB0aGlzLnBlbmRpbmdDYW52YXNNdXRhdGlvbnMuZm9yRWFjaChcbiAgICAgIChfdmFsdWVzLCBjYW52YXMpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLm1pcnJvci5nZXRJZChjYW52YXMpO1xuICAgICAgICB0aGlzLmZsdXNoUGVuZGluZ0NhbnZhc011dGF0aW9uRm9yKGNhbnZhcywgaWQpO1xuICAgICAgfVxuICAgICk7XG4gICAgb25SZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5mbHVzaFBlbmRpbmdDYW52YXNNdXRhdGlvbnMoKSk7XG4gIH1cbiAgZmx1c2hQZW5kaW5nQ2FudmFzTXV0YXRpb25Gb3IoY2FudmFzLCBpZCkge1xuICAgIGlmICh0aGlzLmZyb3plbiB8fCB0aGlzLmxvY2tlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZXNXaXRoVHlwZSA9IHRoaXMucGVuZGluZ0NhbnZhc011dGF0aW9ucy5nZXQoY2FudmFzKTtcbiAgICBpZiAoIXZhbHVlc1dpdGhUeXBlIHx8IGlkID09PSAtMSkgcmV0dXJuO1xuICAgIGNvbnN0IHZhbHVlcyA9IHZhbHVlc1dpdGhUeXBlLm1hcCgodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IHsgdHlwZTogdHlwZTIsIC4uLnJlc3QgfSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHJlc3Q7XG4gICAgfSk7XG4gICAgY29uc3QgeyB0eXBlIH0gPSB2YWx1ZXNXaXRoVHlwZVswXTtcbiAgICB0aGlzLm11dGF0aW9uQ2IoeyBpZCwgdHlwZSwgY29tbWFuZHM6IHZhbHVlcyB9KTtcbiAgICB0aGlzLnBlbmRpbmdDYW52YXNNdXRhdGlvbnMuZGVsZXRlKGNhbnZhcyk7XG4gIH1cbn1cbnRyeSB7XG4gIGlmIChBcnJheS5mcm9tKFsxXSwgKHgpID0+IHggKiAyKVswXSAhPT0gMikge1xuICAgIGNvbnN0IGNsZWFuRnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2xlYW5GcmFtZSk7XG4gICAgQXJyYXkuZnJvbSA9IGNsZWFuRnJhbWUuY29udGVudFdpbmRvdz8uQXJyYXkuZnJvbSB8fCBBcnJheS5mcm9tO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoY2xlYW5GcmFtZSk7XG4gIH1cbn0gY2F0Y2ggKGVycikge1xuICBjb25zb2xlLmRlYnVnKFwiVW5hYmxlIHRvIG92ZXJyaWRlIEFycmF5LmZyb21cIiwgZXJyKTtcbn1cbmNyZWF0ZU1pcnJvciQyKCk7XG52YXIgbjtcbiFmdW5jdGlvbih0Mikge1xuICB0Mlt0Mi5Ob3RTdGFydGVkID0gMF0gPSBcIk5vdFN0YXJ0ZWRcIiwgdDJbdDIuUnVubmluZyA9IDFdID0gXCJSdW5uaW5nXCIsIHQyW3QyLlN0b3BwZWQgPSAyXSA9IFwiU3RvcHBlZFwiO1xufShuIHx8IChuID0ge30pKTtcblxuY29uc3QgQ0FOVkFTX1FVQUxJVFkgPSB7XG4gIGxvdzoge1xuICAgIHNhbXBsaW5nOiB7XG4gICAgICBjYW52YXM6IDEsXG4gICAgfSxcbiAgICBkYXRhVVJMT3B0aW9uczoge1xuICAgICAgdHlwZTogJ2ltYWdlL3dlYnAnLFxuICAgICAgcXVhbGl0eTogMC4yNSxcbiAgICB9LFxuICB9LFxuICBtZWRpdW06IHtcbiAgICBzYW1wbGluZzoge1xuICAgICAgY2FudmFzOiAyLFxuICAgIH0sXG4gICAgZGF0YVVSTE9wdGlvbnM6IHtcbiAgICAgIHR5cGU6ICdpbWFnZS93ZWJwJyxcbiAgICAgIHF1YWxpdHk6IDAuNCxcbiAgICB9LFxuICB9LFxuICBoaWdoOiB7XG4gICAgc2FtcGxpbmc6IHtcbiAgICAgIGNhbnZhczogNCxcbiAgICB9LFxuICAgIGRhdGFVUkxPcHRpb25zOiB7XG4gICAgICB0eXBlOiAnaW1hZ2Uvd2VicCcsXG4gICAgICBxdWFsaXR5OiAwLjUsXG4gICAgfSxcbiAgfSxcbn07XG5cbmNvbnN0IElOVEVHUkFUSU9OX05BTUUgPSAnUmVwbGF5Q2FudmFzJztcbmNvbnN0IERFRkFVTFRfTUFYX0NBTlZBU19TSVpFID0gMTI4MDtcblxuLyoqIEV4cG9ydGVkIG9ubHkgZm9yIHR5cGUgc2FmZSB0ZXN0cy4gKi9cbmNvbnN0IF9yZXBsYXlDYW52YXNJbnRlZ3JhdGlvbiA9ICgob3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IFttYXhDYW52YXNXaWR0aCwgbWF4Q2FudmFzSGVpZ2h0XSA9IG9wdGlvbnMubWF4Q2FudmFzU2l6ZSB8fCBbXTtcbiAgY29uc3QgX2NhbnZhc09wdGlvbnMgPSB7XG4gICAgcXVhbGl0eTogb3B0aW9ucy5xdWFsaXR5IHx8ICdtZWRpdW0nLFxuICAgIGVuYWJsZU1hbnVhbFNuYXBzaG90OiBvcHRpb25zLmVuYWJsZU1hbnVhbFNuYXBzaG90LFxuICAgIG1heENhbnZhc1NpemU6IFtcbiAgICAgIG1heENhbnZhc1dpZHRoID8gTWF0aC5taW4obWF4Q2FudmFzV2lkdGgsIERFRkFVTFRfTUFYX0NBTlZBU19TSVpFKSA6IERFRkFVTFRfTUFYX0NBTlZBU19TSVpFLFxuICAgICAgbWF4Q2FudmFzSGVpZ2h0ID8gTWF0aC5taW4obWF4Q2FudmFzSGVpZ2h0LCBERUZBVUxUX01BWF9DQU5WQVNfU0laRSkgOiBERUZBVUxUX01BWF9DQU5WQVNfU0laRSxcbiAgICBdICxcbiAgfTtcblxuICBsZXQgY2FudmFzTWFuYWdlclJlc29sdmU7XG4gIGNvbnN0IF9jYW52YXNNYW5hZ2VyID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiAoY2FudmFzTWFuYWdlclJlc29sdmUgPSByZXNvbHZlKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBJTlRFR1JBVElPTl9OQU1FLFxuICAgIGdldE9wdGlvbnMoKSB7XG4gICAgICBjb25zdCB7IHF1YWxpdHksIGVuYWJsZU1hbnVhbFNuYXBzaG90LCBtYXhDYW52YXNTaXplIH0gPSBfY2FudmFzT3B0aW9ucztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW5hYmxlTWFudWFsU25hcHNob3QsXG4gICAgICAgIHJlY29yZENhbnZhczogdHJ1ZSxcbiAgICAgICAgZ2V0Q2FudmFzTWFuYWdlcjogKGdldENhbnZhc01hbmFnZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWFuYWdlciA9IG5ldyBDYW52YXNNYW5hZ2VyKHtcbiAgICAgICAgICAgIC4uLmdldENhbnZhc01hbmFnZXJPcHRpb25zLFxuICAgICAgICAgICAgZW5hYmxlTWFudWFsU25hcHNob3QsXG4gICAgICAgICAgICBtYXhDYW52YXNTaXplLFxuICAgICAgICAgICAgZXJyb3JIYW5kbGVyOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlcnIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAoZXJyICkuX19ycndlYl9fID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnMgaGVyZVxuICAgICAgICAgICAgICAgIC8vIHRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgZXJyb3IgaXMgZnJvemVuIG9yIGRvZXMgbm90IGFsbG93IG11dGF0aW9uIGZvciBvdGhlciByZWFzb25zXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2FudmFzTWFuYWdlclJlc29sdmUobWFuYWdlcik7XG4gICAgICAgICAgcmV0dXJuIG1hbmFnZXI7XG4gICAgICAgIH0sXG4gICAgICAgIC4uLihDQU5WQVNfUVVBTElUWVtxdWFsaXR5XSB8fCBDQU5WQVNfUVVBTElUWS5tZWRpdW0pLFxuICAgICAgfTtcbiAgICB9LFxuICAgIGFzeW5jIHNuYXBzaG90KGNhbnZhc0VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGNhbnZhc01hbmFnZXIgPSBhd2FpdCBfY2FudmFzTWFuYWdlcjtcbiAgICAgIGNhbnZhc01hbmFnZXIuc25hcHNob3QoY2FudmFzRWxlbWVudCk7XG4gICAgfSxcbiAgfTtcbn0pIDtcblxuLyoqXG4gKiBBZGQgdGhpcyBpbiBhZGRpdGlvbiB0byBgcmVwbGF5SW50ZWdyYXRpb24oKWAgdG8gZW5hYmxlIGNhbnZhcyByZWNvcmRpbmcuXG4gKi9cbmNvbnN0IHJlcGxheUNhbnZhc0ludGVncmF0aW9uID0gZGVmaW5lSW50ZWdyYXRpb24oXG4gIF9yZXBsYXlDYW52YXNJbnRlZ3JhdGlvbixcbikgO1xuXG5leHBvcnQgeyByZXBsYXlDYW52YXNJbnRlZ3JhdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+replay-canvas@9.46.0/node_modules/@sentry-internal/replay-canvas/build/npm/esm/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+replay@9.46.0/node_modules/@sentry-internal/replay/build/npm/esm/index.js":
/*!***********************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@sentry-internal+replay@9.46.0/node_modules/@sentry-internal/replay/build/npm/esm/index.js ***!
  \***********************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   getReplay: () => (/* binding */ getReplay),\n/* harmony export */   replayIntegration: () => (/* binding */ replayIntegration)\n/* harmony export */ });\n/* harmony import */ var _sentry_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/core */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+core@9.46.0/node_modules/@sentry/core/build/esm/index.js\");\n/* harmony import */ var _sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sentry-internal/browser-utils */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+browser-utils@9.46.0/node_modules/@sentry-internal/browser-utils/build/esm/index.js\");\n\n\n\n// exporting a separate copy of `WINDOW` rather than exporting the one from `@sentry/browser`\n// prevents the browser package from being bundled in the CDN bundle, and avoids a\n// circular dependency between the browser and replay packages should `@sentry/browser` import\n// from `@sentry/replay` in the future\nconst WINDOW = _sentry_core__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ ;\n\nconst REPLAY_SESSION_KEY = 'sentryReplaySession';\nconst REPLAY_EVENT_NAME = 'replay_event';\nconst UNABLE_TO_SEND_REPLAY = 'Unable to send Replay';\n\n// The idle limit for a session after which recording is paused.\nconst SESSION_IDLE_PAUSE_DURATION = 300000; // 5 minutes in ms\n\n// The idle limit for a session after which the session expires.\nconst SESSION_IDLE_EXPIRE_DURATION = 900000; // 15 minutes in ms\n\n/** Default flush delays */\nconst DEFAULT_FLUSH_MIN_DELAY = 5000;\n// XXX: Temp fix for our debounce logic where `maxWait` would never occur if it\n// was the same as `wait`\nconst DEFAULT_FLUSH_MAX_DELAY = 5500;\n\n/* How long to wait for error checkouts */\nconst BUFFER_CHECKOUT_TIME = 60000;\n\nconst RETRY_BASE_INTERVAL = 5000;\nconst RETRY_MAX_COUNT = 3;\n\n/* The max (uncompressed) size in bytes of a network body. Any body larger than this will be truncated. */\nconst NETWORK_BODY_MAX_SIZE = 150000;\n\n/* The max size of a single console arg that is captured. Any arg larger than this will be truncated. */\nconst CONSOLE_ARG_MAX_SIZE = 5000;\n\n/* Min. time to wait before we consider something a slow click. */\nconst SLOW_CLICK_THRESHOLD = 3000;\n/* For scroll actions after a click, we only look for a very short time period to detect programmatic scrolling. */\nconst SLOW_CLICK_SCROLL_TIMEOUT = 300;\n\n/** When encountering a total segment size exceeding this size, stop the replay (as we cannot properly ingest it). */\nconst REPLAY_MAX_EVENT_BUFFER_SIZE = 20000000; // ~20MB\n\n/** Replays must be min. 5s long before we send them. */\nconst MIN_REPLAY_DURATION = 4999;\n/* The max. allowed value that the minReplayDuration can be set to. */\nconst MIN_REPLAY_DURATION_LIMIT = 15000;\n\n/** The max. length of a replay. */\nconst MAX_REPLAY_DURATION = 3600000; // 60 minutes in ms;\n\nvar __defProp$1 = Object.defineProperty;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField$1 = (obj, key, value) => __defNormalProp$1(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar NodeType$2 = /* @__PURE__ */ ((NodeType2) => {\n  NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n  NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n  NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n  NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n  NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n  NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n  return NodeType2;\n})(NodeType$2 || {});\nfunction isElement$1(n2) {\n  return n2.nodeType === n2.ELEMENT_NODE;\n}\nfunction isShadowRoot(n2) {\n  const host = n2?.host;\n  return Boolean(host?.shadowRoot === n2);\n}\nfunction isNativeShadowDom(shadowRoot) {\n  return Object.prototype.toString.call(shadowRoot) === \"[object ShadowRoot]\";\n}\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\n  if (cssText.includes(\" background-clip: text;\") && !cssText.includes(\" -webkit-background-clip: text;\")) {\n    cssText = cssText.replace(\n      /\\sbackground-clip:\\s*text;/g,\n      \" -webkit-background-clip: text; background-clip: text;\"\n    );\n  }\n  return cssText;\n}\nfunction escapeImportStatement(rule) {\n  const { cssText } = rule;\n  if (cssText.split('\"').length < 3) return cssText;\n  const statement = [\"@import\", `url(${JSON.stringify(rule.href)})`];\n  if (rule.layerName === \"\") {\n    statement.push(`layer`);\n  } else if (rule.layerName) {\n    statement.push(`layer(${rule.layerName})`);\n  }\n  if (rule.supportsText) {\n    statement.push(`supports(${rule.supportsText})`);\n  }\n  if (rule.media.length) {\n    statement.push(rule.media.mediaText);\n  }\n  return statement.join(\" \") + \";\";\n}\nfunction stringifyStylesheet(s2) {\n  try {\n    const rules2 = s2.rules || s2.cssRules;\n    return rules2 ? fixBrowserCompatibilityIssuesInCSS(\n      Array.from(rules2, stringifyRule).join(\"\")\n    ) : null;\n  } catch (error) {\n    return null;\n  }\n}\nfunction fixAllCssProperty(rule) {\n  let styles = \"\";\n  for (let i2 = 0; i2 < rule.style.length; i2++) {\n    const styleDeclaration = rule.style;\n    const attribute = styleDeclaration[i2];\n    const isImportant = styleDeclaration.getPropertyPriority(attribute);\n    styles += `${attribute}:${styleDeclaration.getPropertyValue(attribute)}${isImportant ? ` !important` : \"\"};`;\n  }\n  return `${rule.selectorText} { ${styles} }`;\n}\nfunction stringifyRule(rule) {\n  let importStringified;\n  if (isCSSImportRule(rule)) {\n    try {\n      importStringified = // for same-origin stylesheets,\n      // we can access the imported stylesheet rules directly\n      stringifyStylesheet(rule.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement\n      escapeImportStatement(rule);\n    } catch (error) {\n    }\n  } else if (isCSSStyleRule(rule)) {\n    let cssText = rule.cssText;\n    const needsSafariColonFix = rule.selectorText.includes(\":\");\n    const needsAllFix = typeof rule.style[\"all\"] === \"string\" && rule.style[\"all\"];\n    if (needsAllFix) {\n      cssText = fixAllCssProperty(rule);\n    }\n    if (needsSafariColonFix) {\n      cssText = fixSafariColons(cssText);\n    }\n    if (needsSafariColonFix || needsAllFix) {\n      return cssText;\n    }\n  }\n  return importStringified || rule.cssText;\n}\nfunction fixSafariColons(cssStringified) {\n  const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n  return cssStringified.replace(regex, \"$1\\\\$2\");\n}\nfunction isCSSImportRule(rule) {\n  return \"styleSheet\" in rule;\n}\nfunction isCSSStyleRule(rule) {\n  return \"selectorText\" in rule;\n}\nclass Mirror {\n  constructor() {\n    __publicField$1(this, \"idNodeMap\", /* @__PURE__ */ new Map());\n    __publicField$1(this, \"nodeMetaMap\", /* @__PURE__ */ new WeakMap());\n  }\n  getId(n2) {\n    if (!n2) return -1;\n    const id = this.getMeta(n2)?.id;\n    return id ?? -1;\n  }\n  getNode(id) {\n    return this.idNodeMap.get(id) || null;\n  }\n  getIds() {\n    return Array.from(this.idNodeMap.keys());\n  }\n  getMeta(n2) {\n    return this.nodeMetaMap.get(n2) || null;\n  }\n  // removes the node from idNodeMap\n  // doesn't remove the node from nodeMetaMap\n  removeNodeFromMap(n2) {\n    const id = this.getId(n2);\n    this.idNodeMap.delete(id);\n    if (n2.childNodes) {\n      n2.childNodes.forEach(\n        (childNode) => this.removeNodeFromMap(childNode)\n      );\n    }\n  }\n  has(id) {\n    return this.idNodeMap.has(id);\n  }\n  hasNode(node) {\n    return this.nodeMetaMap.has(node);\n  }\n  add(n2, meta) {\n    const id = meta.id;\n    this.idNodeMap.set(id, n2);\n    this.nodeMetaMap.set(n2, meta);\n  }\n  replace(id, n2) {\n    const oldNode = this.getNode(id);\n    if (oldNode) {\n      const meta = this.nodeMetaMap.get(oldNode);\n      if (meta) this.nodeMetaMap.set(n2, meta);\n    }\n    this.idNodeMap.set(id, n2);\n  }\n  reset() {\n    this.idNodeMap = /* @__PURE__ */ new Map();\n    this.nodeMetaMap = /* @__PURE__ */ new WeakMap();\n  }\n}\nfunction createMirror$2() {\n  return new Mirror();\n}\nfunction shouldMaskInput({\n  maskInputOptions,\n  tagName,\n  type\n}) {\n  if (tagName === \"OPTION\") {\n    tagName = \"SELECT\";\n  }\n  return Boolean(\n    maskInputOptions[tagName.toLowerCase()] || type && maskInputOptions[type] || type === \"password\" || // Default to \"text\" option for inputs without a \"type\" attribute defined\n    tagName === \"INPUT\" && !type && maskInputOptions[\"text\"]\n  );\n}\nfunction maskInputValue({\n  isMasked,\n  element,\n  value,\n  maskInputFn\n}) {\n  let text = value || \"\";\n  if (!isMasked) {\n    return text;\n  }\n  if (maskInputFn) {\n    text = maskInputFn(text, element);\n  }\n  return \"*\".repeat(text.length);\n}\nfunction toLowerCase(str) {\n  return str.toLowerCase();\n}\nfunction toUpperCase(str) {\n  return str.toUpperCase();\n}\nconst ORIGINAL_ATTRIBUTE_NAME = \"__rrweb_original__\";\nfunction is2DCanvasBlank(canvas) {\n  const ctx = canvas.getContext(\"2d\");\n  if (!ctx) return true;\n  const chunkSize = 50;\n  for (let x = 0; x < canvas.width; x += chunkSize) {\n    for (let y = 0; y < canvas.height; y += chunkSize) {\n      const getImageData = ctx.getImageData;\n      const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData ? getImageData[ORIGINAL_ATTRIBUTE_NAME] : getImageData;\n      const pixelBuffer = new Uint32Array(\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n        originalGetImageData.call(\n          ctx,\n          x,\n          y,\n          Math.min(chunkSize, canvas.width - x),\n          Math.min(chunkSize, canvas.height - y)\n        ).data.buffer\n      );\n      if (pixelBuffer.some((pixel) => pixel !== 0)) return false;\n    }\n  }\n  return true;\n}\nfunction getInputType(element) {\n  const type = element.type;\n  return element.hasAttribute(\"data-rr-is-password\") ? \"password\" : type ? (\n    // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n    toLowerCase(type)\n  ) : null;\n}\nfunction getInputValue(el, tagName, type) {\n  if (tagName === \"INPUT\" && (type === \"radio\" || type === \"checkbox\")) {\n    return el.getAttribute(\"value\") || \"\";\n  }\n  return el.value;\n}\nfunction extractFileExtension(path, baseURL) {\n  let url;\n  try {\n    url = new URL(path, baseURL ?? window.location.href);\n  } catch (err) {\n    return null;\n  }\n  const regex = /\\.([0-9a-z]+)(?:$)/i;\n  const match = url.pathname.match(regex);\n  return match?.[1] ?? null;\n}\nconst cachedImplementations$1 = {};\nfunction getImplementation$1(name) {\n  const cached = cachedImplementations$1[name];\n  if (cached) {\n    return cached;\n  }\n  const document2 = window.document;\n  let impl = window[name];\n  if (document2 && typeof document2.createElement === \"function\") {\n    try {\n      const sandbox = document2.createElement(\"iframe\");\n      sandbox.hidden = true;\n      document2.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow && contentWindow[name]) {\n        impl = // eslint-disable-next-line @typescript-eslint/unbound-method\n        contentWindow[name];\n      }\n      document2.head.removeChild(sandbox);\n    } catch (e2) {\n    }\n  }\n  return cachedImplementations$1[name] = impl.bind(\n    window\n  );\n}\nfunction setTimeout$2(...rest) {\n  return getImplementation$1(\"setTimeout\")(...rest);\n}\nfunction clearTimeout$1(...rest) {\n  return getImplementation$1(\"clearTimeout\")(...rest);\n}\nfunction getIframeContentDocument(iframe) {\n  try {\n    return iframe.contentDocument;\n  } catch (e2) {\n  }\n}\nlet _id = 1;\nconst tagNameRegex = new RegExp(\"[^a-z0-9-_:]\");\nconst IGNORED_NODE = -2;\nfunction genId() {\n  return _id++;\n}\nfunction getValidTagName$1(element) {\n  if (element instanceof HTMLFormElement) {\n    return \"form\";\n  }\n  const processedTagName = toLowerCase(element.tagName);\n  if (tagNameRegex.test(processedTagName)) {\n    return \"div\";\n  }\n  return processedTagName;\n}\nfunction extractOrigin(url) {\n  let origin = \"\";\n  if (url.indexOf(\"//\") > -1) {\n    origin = url.split(\"/\").slice(0, 3).join(\"/\");\n  } else {\n    origin = url.split(\"/\")[0];\n  }\n  origin = origin.split(\"?\")[0];\n  return origin;\n}\nlet canvasService;\nlet canvasCtx;\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nfunction absoluteToStylesheet(cssText, href) {\n  return (cssText || \"\").replace(\n    URL_IN_CSS_REF,\n    (origin, quote1, path1, quote2, path2, path3) => {\n      const filePath = path1 || path2 || path3;\n      const maybeQuote = quote1 || quote2 || \"\";\n      if (!filePath) {\n        return origin;\n      }\n      if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n        return `url(${maybeQuote}${filePath}${maybeQuote})`;\n      }\n      if (DATA_URI.test(filePath)) {\n        return `url(${maybeQuote}${filePath}${maybeQuote})`;\n      }\n      if (filePath[0] === \"/\") {\n        return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;\n      }\n      const stack = href.split(\"/\");\n      const parts = filePath.split(\"/\");\n      stack.pop();\n      for (const part of parts) {\n        if (part === \".\") {\n          continue;\n        } else if (part === \"..\") {\n          stack.pop();\n        } else {\n          stack.push(part);\n        }\n      }\n      return `url(${maybeQuote}${stack.join(\"/\")}${maybeQuote})`;\n    }\n  );\n}\nconst SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\nconst SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\n  if (attributeValue.trim() === \"\") {\n    return attributeValue;\n  }\n  let pos = 0;\n  function collectCharacters(regEx) {\n    let chars2;\n    const match = regEx.exec(attributeValue.substring(pos));\n    if (match) {\n      chars2 = match[0];\n      pos += chars2.length;\n      return chars2;\n    }\n    return \"\";\n  }\n  const output = [];\n  while (true) {\n    collectCharacters(SRCSET_COMMAS_OR_SPACES);\n    if (pos >= attributeValue.length) {\n      break;\n    }\n    let url = collectCharacters(SRCSET_NOT_SPACES);\n    if (url.slice(-1) === \",\") {\n      url = absoluteToDoc(doc, url.substring(0, url.length - 1));\n      output.push(url);\n    } else {\n      let descriptorsStr = \"\";\n      url = absoluteToDoc(doc, url);\n      let inParens = false;\n      while (true) {\n        const c2 = attributeValue.charAt(pos);\n        if (c2 === \"\") {\n          output.push((url + descriptorsStr).trim());\n          break;\n        } else if (!inParens) {\n          if (c2 === \",\") {\n            pos += 1;\n            output.push((url + descriptorsStr).trim());\n            break;\n          } else if (c2 === \"(\") {\n            inParens = true;\n          }\n        } else {\n          if (c2 === \")\") {\n            inParens = false;\n          }\n        }\n        descriptorsStr += c2;\n        pos += 1;\n      }\n    }\n  }\n  return output.join(\", \");\n}\nconst cachedDocument = /* @__PURE__ */ new WeakMap();\nfunction absoluteToDoc(doc, attributeValue) {\n  if (!attributeValue || attributeValue.trim() === \"\") {\n    return attributeValue;\n  }\n  return getHref(doc, attributeValue);\n}\nfunction isSVGElement(el) {\n  return Boolean(el.tagName === \"svg\" || el.ownerSVGElement);\n}\nfunction getHref(doc, customHref) {\n  let a2 = cachedDocument.get(doc);\n  if (!a2) {\n    a2 = doc.createElement(\"a\");\n    cachedDocument.set(doc, a2);\n  }\n  if (!customHref) {\n    customHref = \"\";\n  } else if (customHref.startsWith(\"blob:\") || customHref.startsWith(\"data:\")) {\n    return customHref;\n  }\n  a2.setAttribute(\"href\", customHref);\n  return a2.href;\n}\nfunction transformAttribute(doc, tagName, name, value, element, maskAttributeFn) {\n  if (!value) {\n    return value;\n  }\n  if (name === \"src\" || name === \"href\" && !(tagName === \"use\" && value[0] === \"#\")) {\n    return absoluteToDoc(doc, value);\n  } else if (name === \"xlink:href\" && value[0] !== \"#\") {\n    return absoluteToDoc(doc, value);\n  } else if (name === \"background\" && (tagName === \"table\" || tagName === \"td\" || tagName === \"th\")) {\n    return absoluteToDoc(doc, value);\n  } else if (name === \"srcset\") {\n    return getAbsoluteSrcsetString(doc, value);\n  } else if (name === \"style\") {\n    return absoluteToStylesheet(value, getHref(doc));\n  } else if (tagName === \"object\" && name === \"data\") {\n    return absoluteToDoc(doc, value);\n  }\n  if (typeof maskAttributeFn === \"function\") {\n    return maskAttributeFn(name, value, element);\n  }\n  return value;\n}\nfunction ignoreAttribute(tagName, name, _value) {\n  return (tagName === \"video\" || tagName === \"audio\") && name === \"autoplay\";\n}\nfunction _isBlockedElement(element, blockClass, blockSelector, unblockSelector) {\n  try {\n    if (unblockSelector && element.matches(unblockSelector)) {\n      return false;\n    }\n    if (typeof blockClass === \"string\") {\n      if (element.classList.contains(blockClass)) {\n        return true;\n      }\n    } else {\n      for (let eIndex = element.classList.length; eIndex--; ) {\n        const className = element.classList[eIndex];\n        if (blockClass.test(className)) {\n          return true;\n        }\n      }\n    }\n    if (blockSelector) {\n      return element.matches(blockSelector);\n    }\n  } catch (e2) {\n  }\n  return false;\n}\nfunction elementClassMatchesRegex(el, regex) {\n  for (let eIndex = el.classList.length; eIndex--; ) {\n    const className = el.classList[eIndex];\n    if (regex.test(className)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction distanceToMatch(node, matchPredicate, limit = Infinity, distance = 0) {\n  if (!node) return -1;\n  if (node.nodeType !== node.ELEMENT_NODE) return -1;\n  if (distance > limit) return -1;\n  if (matchPredicate(node)) return distance;\n  return distanceToMatch(node.parentNode, matchPredicate, limit, distance + 1);\n}\nfunction createMatchPredicate(className, selector) {\n  return (node) => {\n    const el = node;\n    if (el === null) return false;\n    try {\n      if (className) {\n        if (typeof className === \"string\") {\n          if (el.matches(`.${className}`)) return true;\n        } else if (elementClassMatchesRegex(el, className)) {\n          return true;\n        }\n      }\n      if (selector && el.matches(selector)) return true;\n      return false;\n    } catch {\n      return false;\n    }\n  };\n}\nfunction needMaskingText(node, maskTextClass, maskTextSelector, unmaskTextClass, unmaskTextSelector, maskAllText) {\n  try {\n    const el = node.nodeType === node.ELEMENT_NODE ? node : node.parentElement;\n    if (el === null) return false;\n    if (el.tagName === \"INPUT\") {\n      const autocomplete = el.getAttribute(\"autocomplete\");\n      const disallowedAutocompleteValues = [\n        \"current-password\",\n        \"new-password\",\n        \"cc-number\",\n        \"cc-exp\",\n        \"cc-exp-month\",\n        \"cc-exp-year\",\n        \"cc-csc\"\n      ];\n      if (disallowedAutocompleteValues.includes(autocomplete)) {\n        return true;\n      }\n    }\n    let maskDistance = -1;\n    let unmaskDistance = -1;\n    if (maskAllText) {\n      unmaskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(unmaskTextClass, unmaskTextSelector)\n      );\n      if (unmaskDistance < 0) {\n        return true;\n      }\n      maskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(maskTextClass, maskTextSelector),\n        unmaskDistance >= 0 ? unmaskDistance : Infinity\n      );\n    } else {\n      maskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(maskTextClass, maskTextSelector)\n      );\n      if (maskDistance < 0) {\n        return false;\n      }\n      unmaskDistance = distanceToMatch(\n        el,\n        createMatchPredicate(unmaskTextClass, unmaskTextSelector),\n        maskDistance >= 0 ? maskDistance : Infinity\n      );\n    }\n    return maskDistance >= 0 ? unmaskDistance >= 0 ? maskDistance <= unmaskDistance : true : unmaskDistance >= 0 ? false : !!maskAllText;\n  } catch (e2) {\n  }\n  return !!maskAllText;\n}\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\n  const win = iframeEl.contentWindow;\n  if (!win) {\n    return;\n  }\n  let fired = false;\n  let readyState;\n  try {\n    readyState = win.document.readyState;\n  } catch (error) {\n    return;\n  }\n  if (readyState !== \"complete\") {\n    const timer = setTimeout$2(() => {\n      if (!fired) {\n        listener();\n        fired = true;\n      }\n    }, iframeLoadTimeout);\n    iframeEl.addEventListener(\"load\", () => {\n      clearTimeout$1(timer);\n      fired = true;\n      listener();\n    });\n    return;\n  }\n  const blankUrl = \"about:blank\";\n  if (win.location.href !== blankUrl || iframeEl.src === blankUrl || iframeEl.src === \"\") {\n    setTimeout$2(listener, 0);\n    return iframeEl.addEventListener(\"load\", listener);\n  }\n  iframeEl.addEventListener(\"load\", listener);\n}\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\n  let fired = false;\n  let styleSheetLoaded;\n  try {\n    styleSheetLoaded = link.sheet;\n  } catch (error) {\n    return;\n  }\n  if (styleSheetLoaded) return;\n  const timer = setTimeout$2(() => {\n    if (!fired) {\n      listener();\n      fired = true;\n    }\n  }, styleSheetLoadTimeout);\n  link.addEventListener(\"load\", () => {\n    clearTimeout$1(timer);\n    fired = true;\n    listener();\n  });\n}\nfunction serializeNode(n2, options) {\n  const {\n    doc,\n    mirror: mirror2,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    maskAllText,\n    maskAttributeFn,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    inlineStylesheet,\n    maskInputOptions = {},\n    maskTextFn,\n    maskInputFn,\n    dataURLOptions = {},\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement = false\n  } = options;\n  const rootId = getRootId(doc, mirror2);\n  switch (n2.nodeType) {\n    case n2.DOCUMENT_NODE:\n      if (n2.compatMode !== \"CSS1Compat\") {\n        return {\n          type: NodeType$2.Document,\n          childNodes: [],\n          compatMode: n2.compatMode\n          // probably \"BackCompat\"\n        };\n      } else {\n        return {\n          type: NodeType$2.Document,\n          childNodes: []\n        };\n      }\n    case n2.DOCUMENT_TYPE_NODE:\n      return {\n        type: NodeType$2.DocumentType,\n        name: n2.name,\n        publicId: n2.publicId,\n        systemId: n2.systemId,\n        rootId\n      };\n    case n2.ELEMENT_NODE:\n      return serializeElementNode(n2, {\n        doc,\n        blockClass,\n        blockSelector,\n        unblockSelector,\n        inlineStylesheet,\n        maskAttributeFn,\n        maskInputOptions,\n        maskInputFn,\n        dataURLOptions,\n        inlineImages,\n        recordCanvas,\n        keepIframeSrcFn,\n        newlyAddedElement,\n        rootId,\n        maskTextClass,\n        unmaskTextClass,\n        maskTextSelector,\n        unmaskTextSelector\n      });\n    case n2.TEXT_NODE:\n      return serializeTextNode(n2, {\n        doc,\n        maskAllText,\n        maskTextClass,\n        unmaskTextClass,\n        maskTextSelector,\n        unmaskTextSelector,\n        maskTextFn,\n        maskInputOptions,\n        maskInputFn,\n        rootId\n      });\n    case n2.CDATA_SECTION_NODE:\n      return {\n        type: NodeType$2.CDATA,\n        textContent: \"\",\n        rootId\n      };\n    case n2.COMMENT_NODE:\n      return {\n        type: NodeType$2.Comment,\n        textContent: n2.textContent || \"\",\n        rootId\n      };\n    default:\n      return false;\n  }\n}\nfunction getRootId(doc, mirror2) {\n  if (!mirror2.hasNode(doc)) return void 0;\n  const docId = mirror2.getId(doc);\n  return docId === 1 ? void 0 : docId;\n}\nfunction serializeTextNode(n2, options) {\n  const {\n    maskAllText,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    maskTextFn,\n    maskInputOptions,\n    maskInputFn,\n    rootId\n  } = options;\n  const parentTagName = n2.parentNode && n2.parentNode.tagName;\n  let textContent = n2.textContent;\n  const isStyle = parentTagName === \"STYLE\" ? true : void 0;\n  const isScript = parentTagName === \"SCRIPT\" ? true : void 0;\n  const isTextarea = parentTagName === \"TEXTAREA\" ? true : void 0;\n  if (isStyle && textContent) {\n    try {\n      if (n2.nextSibling || n2.previousSibling) {\n      } else if (n2.parentNode.sheet?.cssRules) {\n        textContent = stringifyStylesheet(\n          n2.parentNode.sheet\n        );\n      }\n    } catch (err) {\n      console.warn(\n        `Cannot get CSS styles from text's parentNode. Error: ${err}`,\n        n2\n      );\n    }\n    textContent = absoluteToStylesheet(textContent, getHref(options.doc));\n  }\n  if (isScript) {\n    textContent = \"SCRIPT_PLACEHOLDER\";\n  }\n  const forceMask = needMaskingText(\n    n2,\n    maskTextClass,\n    maskTextSelector,\n    unmaskTextClass,\n    unmaskTextSelector,\n    maskAllText\n  );\n  if (!isStyle && !isScript && !isTextarea && textContent && forceMask) {\n    textContent = maskTextFn ? maskTextFn(textContent, n2.parentElement) : textContent.replace(/[\\S]/g, \"*\");\n  }\n  if (isTextarea && textContent && (maskInputOptions.textarea || forceMask)) {\n    textContent = maskInputFn ? maskInputFn(textContent, n2.parentNode) : textContent.replace(/[\\S]/g, \"*\");\n  }\n  if (parentTagName === \"OPTION\" && textContent) {\n    const isInputMasked = shouldMaskInput({\n      type: null,\n      tagName: parentTagName,\n      maskInputOptions\n    });\n    textContent = maskInputValue({\n      isMasked: needMaskingText(\n        n2,\n        maskTextClass,\n        maskTextSelector,\n        unmaskTextClass,\n        unmaskTextSelector,\n        isInputMasked\n      ),\n      element: n2,\n      value: textContent,\n      maskInputFn\n    });\n  }\n  return {\n    type: NodeType$2.Text,\n    textContent: textContent || \"\",\n    isStyle,\n    rootId\n  };\n}\nfunction serializeElementNode(n2, options) {\n  const {\n    doc,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    inlineStylesheet,\n    maskInputOptions = {},\n    maskAttributeFn,\n    maskInputFn,\n    dataURLOptions = {},\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement = false,\n    rootId,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector\n  } = options;\n  const needBlock = _isBlockedElement(\n    n2,\n    blockClass,\n    blockSelector,\n    unblockSelector\n  );\n  const tagName = getValidTagName$1(n2);\n  let attributes2 = {};\n  const len = n2.attributes.length;\n  for (let i2 = 0; i2 < len; i2++) {\n    const attr = n2.attributes[i2];\n    if (attr.name && !ignoreAttribute(tagName, attr.name, attr.value)) {\n      attributes2[attr.name] = transformAttribute(\n        doc,\n        tagName,\n        toLowerCase(attr.name),\n        attr.value,\n        n2,\n        maskAttributeFn\n      );\n    }\n  }\n  if (tagName === \"link\" && inlineStylesheet) {\n    const stylesheet = Array.from(doc.styleSheets).find((s2) => {\n      return s2.href === n2.href;\n    });\n    let cssText = null;\n    if (stylesheet) {\n      cssText = stringifyStylesheet(stylesheet);\n    }\n    if (cssText) {\n      attributes2.rel = null;\n      attributes2.href = null;\n      attributes2.crossorigin = null;\n      attributes2._cssText = absoluteToStylesheet(cssText, stylesheet.href);\n    }\n  }\n  if (tagName === \"style\" && n2.sheet && // TODO: Currently we only try to get dynamic stylesheet when it is an empty style element\n  !(n2.innerText || n2.textContent || \"\").trim().length) {\n    const cssText = stringifyStylesheet(\n      n2.sheet\n    );\n    if (cssText) {\n      attributes2._cssText = absoluteToStylesheet(cssText, getHref(doc));\n    }\n  }\n  if (tagName === \"input\" || tagName === \"textarea\" || tagName === \"select\" || tagName === \"option\") {\n    const el = n2;\n    const type = getInputType(el);\n    const value = getInputValue(el, toUpperCase(tagName), type);\n    const checked = el.checked;\n    if (type !== \"submit\" && type !== \"button\" && value) {\n      const forceMask = needMaskingText(\n        el,\n        maskTextClass,\n        maskTextSelector,\n        unmaskTextClass,\n        unmaskTextSelector,\n        shouldMaskInput({\n          type,\n          tagName: toUpperCase(tagName),\n          maskInputOptions\n        })\n      );\n      attributes2.value = maskInputValue({\n        isMasked: forceMask,\n        element: el,\n        value,\n        maskInputFn\n      });\n    }\n    if (checked) {\n      attributes2.checked = checked;\n    }\n  }\n  if (tagName === \"option\") {\n    if (n2.selected && !maskInputOptions[\"select\"]) {\n      attributes2.selected = true;\n    } else {\n      delete attributes2.selected;\n    }\n  }\n  if (tagName === \"canvas\" && recordCanvas) {\n    if (n2.__context === \"2d\") {\n      if (!is2DCanvasBlank(n2)) {\n        attributes2.rr_dataURL = n2.toDataURL(\n          dataURLOptions.type,\n          dataURLOptions.quality\n        );\n      }\n    } else if (!(\"__context\" in n2)) {\n      const canvasDataURL = n2.toDataURL(\n        dataURLOptions.type,\n        dataURLOptions.quality\n      );\n      const blankCanvas = doc.createElement(\"canvas\");\n      blankCanvas.width = n2.width;\n      blankCanvas.height = n2.height;\n      const blankCanvasDataURL = blankCanvas.toDataURL(\n        dataURLOptions.type,\n        dataURLOptions.quality\n      );\n      if (canvasDataURL !== blankCanvasDataURL) {\n        attributes2.rr_dataURL = canvasDataURL;\n      }\n    }\n  }\n  if (tagName === \"img\" && inlineImages) {\n    if (!canvasService) {\n      canvasService = doc.createElement(\"canvas\");\n      canvasCtx = canvasService.getContext(\"2d\");\n    }\n    const image = n2;\n    const imageSrc = image.currentSrc || image.getAttribute(\"src\") || \"<unknown-src>\";\n    const priorCrossOrigin = image.crossOrigin;\n    const recordInlineImage = () => {\n      image.removeEventListener(\"load\", recordInlineImage);\n      try {\n        canvasService.width = image.naturalWidth;\n        canvasService.height = image.naturalHeight;\n        canvasCtx.drawImage(image, 0, 0);\n        attributes2.rr_dataURL = canvasService.toDataURL(\n          dataURLOptions.type,\n          dataURLOptions.quality\n        );\n      } catch (err) {\n        if (image.crossOrigin !== \"anonymous\") {\n          image.crossOrigin = \"anonymous\";\n          if (image.complete && image.naturalWidth !== 0)\n            recordInlineImage();\n          else image.addEventListener(\"load\", recordInlineImage);\n          return;\n        } else {\n          console.warn(\n            `Cannot inline img src=${imageSrc}! Error: ${err}`\n          );\n        }\n      }\n      if (image.crossOrigin === \"anonymous\") {\n        priorCrossOrigin ? attributes2.crossOrigin = priorCrossOrigin : image.removeAttribute(\"crossorigin\");\n      }\n    };\n    if (image.complete && image.naturalWidth !== 0) recordInlineImage();\n    else image.addEventListener(\"load\", recordInlineImage);\n  }\n  if (tagName === \"audio\" || tagName === \"video\") {\n    attributes2.rr_mediaState = n2.paused ? \"paused\" : \"played\";\n    attributes2.rr_mediaCurrentTime = n2.currentTime;\n  }\n  if (!newlyAddedElement) {\n    if (n2.scrollLeft) {\n      attributes2.rr_scrollLeft = n2.scrollLeft;\n    }\n    if (n2.scrollTop) {\n      attributes2.rr_scrollTop = n2.scrollTop;\n    }\n  }\n  if (needBlock) {\n    const { width, height } = n2.getBoundingClientRect();\n    attributes2 = {\n      class: attributes2.class,\n      rr_width: `${width}px`,\n      rr_height: `${height}px`\n    };\n  }\n  if (tagName === \"iframe\" && !keepIframeSrcFn(attributes2.src)) {\n    if (!needBlock && !getIframeContentDocument(n2)) {\n      attributes2.rr_src = attributes2.src;\n    }\n    delete attributes2.src;\n  }\n  let isCustomElement;\n  try {\n    if (customElements.get(tagName)) isCustomElement = true;\n  } catch (e2) {\n  }\n  return {\n    type: NodeType$2.Element,\n    tagName,\n    attributes: attributes2,\n    childNodes: [],\n    isSVG: isSVGElement(n2) || void 0,\n    needBlock,\n    rootId,\n    isCustom: isCustomElement\n  };\n}\nfunction lowerIfExists(maybeAttr) {\n  if (maybeAttr === void 0 || maybeAttr === null) {\n    return \"\";\n  } else {\n    return maybeAttr.toLowerCase();\n  }\n}\nfunction slimDOMExcluded(sn, slimDOMOptions) {\n  if (slimDOMOptions.comment && sn.type === NodeType$2.Comment) {\n    return true;\n  } else if (sn.type === NodeType$2.Element) {\n    if (slimDOMOptions.script && // script tag\n    (sn.tagName === \"script\" || // (module)preload link\n    sn.tagName === \"link\" && (sn.attributes.rel === \"preload\" || sn.attributes.rel === \"modulepreload\") || // prefetch link\n    sn.tagName === \"link\" && sn.attributes.rel === \"prefetch\" && typeof sn.attributes.href === \"string\" && extractFileExtension(sn.attributes.href) === \"js\")) {\n      return true;\n    } else if (slimDOMOptions.headFavicon && (sn.tagName === \"link\" && sn.attributes.rel === \"shortcut icon\" || sn.tagName === \"meta\" && (lowerIfExists(sn.attributes.name).match(\n      /^msapplication-tile(image|color)$/\n    ) || lowerIfExists(sn.attributes.name) === \"application-name\" || lowerIfExists(sn.attributes.rel) === \"icon\" || lowerIfExists(sn.attributes.rel) === \"apple-touch-icon\" || lowerIfExists(sn.attributes.rel) === \"shortcut icon\"))) {\n      return true;\n    } else if (sn.tagName === \"meta\") {\n      if (slimDOMOptions.headMetaDescKeywords && lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\n        return true;\n      } else if (slimDOMOptions.headMetaSocial && (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) || // og = opengraph (facebook)\n      lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) || lowerIfExists(sn.attributes.name) === \"pinterest\")) {\n        return true;\n      } else if (slimDOMOptions.headMetaRobots && (lowerIfExists(sn.attributes.name) === \"robots\" || lowerIfExists(sn.attributes.name) === \"googlebot\" || lowerIfExists(sn.attributes.name) === \"bingbot\")) {\n        return true;\n      } else if (slimDOMOptions.headMetaHttpEquiv && sn.attributes[\"http-equiv\"] !== void 0) {\n        return true;\n      } else if (slimDOMOptions.headMetaAuthorship && (lowerIfExists(sn.attributes.name) === \"author\" || lowerIfExists(sn.attributes.name) === \"generator\" || lowerIfExists(sn.attributes.name) === \"framework\" || lowerIfExists(sn.attributes.name) === \"publisher\" || lowerIfExists(sn.attributes.name) === \"progid\" || lowerIfExists(sn.attributes.property).match(/^article:/) || lowerIfExists(sn.attributes.property).match(/^product:/))) {\n        return true;\n      } else if (slimDOMOptions.headMetaVerification && (lowerIfExists(sn.attributes.name) === \"google-site-verification\" || lowerIfExists(sn.attributes.name) === \"yandex-verification\" || lowerIfExists(sn.attributes.name) === \"csrf-token\" || lowerIfExists(sn.attributes.name) === \"p:domain_verify\" || lowerIfExists(sn.attributes.name) === \"verify-v1\" || lowerIfExists(sn.attributes.name) === \"verification\" || lowerIfExists(sn.attributes.name) === \"shopify-checkout-api-token\")) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\nfunction serializeNodeWithId(n2, options) {\n  const {\n    doc,\n    mirror: mirror2,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    maskAllText,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    skipChild = false,\n    inlineStylesheet = true,\n    maskInputOptions = {},\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    slimDOMOptions,\n    dataURLOptions = {},\n    inlineImages = false,\n    recordCanvas = false,\n    onSerialize,\n    onIframeLoad,\n    iframeLoadTimeout = 5e3,\n    onStylesheetLoad,\n    stylesheetLoadTimeout = 5e3,\n    keepIframeSrcFn = () => false,\n    newlyAddedElement = false\n  } = options;\n  let { preserveWhiteSpace = true } = options;\n  const _serializedNode = serializeNode(n2, {\n    doc,\n    mirror: mirror2,\n    blockClass,\n    blockSelector,\n    maskAllText,\n    unblockSelector,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    inlineStylesheet,\n    maskInputOptions,\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    dataURLOptions,\n    inlineImages,\n    recordCanvas,\n    keepIframeSrcFn,\n    newlyAddedElement\n  });\n  if (!_serializedNode) {\n    console.warn(n2, \"not serialized\");\n    return null;\n  }\n  let id;\n  if (mirror2.hasNode(n2)) {\n    id = mirror2.getId(n2);\n  } else if (slimDOMExcluded(_serializedNode, slimDOMOptions) || !preserveWhiteSpace && _serializedNode.type === NodeType$2.Text && !_serializedNode.isStyle && !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, \"\").length) {\n    id = IGNORED_NODE;\n  } else {\n    id = genId();\n  }\n  const serializedNode2 = Object.assign(_serializedNode, { id });\n  mirror2.add(n2, serializedNode2);\n  if (id === IGNORED_NODE) {\n    return null;\n  }\n  if (onSerialize) {\n    onSerialize(n2);\n  }\n  let recordChild = !skipChild;\n  if (serializedNode2.type === NodeType$2.Element) {\n    recordChild = recordChild && !serializedNode2.needBlock;\n    delete serializedNode2.needBlock;\n    const shadowRoot = n2.shadowRoot;\n    if (shadowRoot && isNativeShadowDom(shadowRoot))\n      serializedNode2.isShadowHost = true;\n  }\n  if ((serializedNode2.type === NodeType$2.Document || serializedNode2.type === NodeType$2.Element) && recordChild) {\n    if (slimDOMOptions.headWhitespace && serializedNode2.type === NodeType$2.Element && serializedNode2.tagName === \"head\") {\n      preserveWhiteSpace = false;\n    }\n    const bypassOptions = {\n      doc,\n      mirror: mirror2,\n      blockClass,\n      blockSelector,\n      maskAllText,\n      unblockSelector,\n      maskTextClass,\n      unmaskTextClass,\n      maskTextSelector,\n      unmaskTextSelector,\n      skipChild,\n      inlineStylesheet,\n      maskInputOptions,\n      maskAttributeFn,\n      maskTextFn,\n      maskInputFn,\n      slimDOMOptions,\n      dataURLOptions,\n      inlineImages,\n      recordCanvas,\n      preserveWhiteSpace,\n      onSerialize,\n      onIframeLoad,\n      iframeLoadTimeout,\n      onStylesheetLoad,\n      stylesheetLoadTimeout,\n      keepIframeSrcFn\n    };\n    for (const childN of Array.from(n2.childNodes)) {\n      const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n      if (serializedChildNode) {\n        serializedNode2.childNodes.push(serializedChildNode);\n      }\n    }\n    if (isElement$1(n2) && n2.shadowRoot) {\n      for (const childN of Array.from(n2.shadowRoot.childNodes)) {\n        const serializedChildNode = serializeNodeWithId(childN, bypassOptions);\n        if (serializedChildNode) {\n          isNativeShadowDom(n2.shadowRoot) && (serializedChildNode.isShadow = true);\n          serializedNode2.childNodes.push(serializedChildNode);\n        }\n      }\n    }\n  }\n  if (n2.parentNode && isShadowRoot(n2.parentNode) && isNativeShadowDom(n2.parentNode)) {\n    serializedNode2.isShadow = true;\n  }\n  if (serializedNode2.type === NodeType$2.Element && serializedNode2.tagName === \"iframe\" && !_isBlockedElement(\n    n2,\n    blockClass,\n    blockSelector,\n    unblockSelector\n  )) {\n    onceIframeLoaded(\n      n2,\n      () => {\n        const iframeDoc = getIframeContentDocument(n2);\n        if (iframeDoc && onIframeLoad) {\n          const serializedIframeNode = serializeNodeWithId(iframeDoc, {\n            doc: iframeDoc,\n            mirror: mirror2,\n            blockClass,\n            blockSelector,\n            unblockSelector,\n            maskAllText,\n            maskTextClass,\n            unmaskTextClass,\n            maskTextSelector,\n            unmaskTextSelector,\n            skipChild: false,\n            inlineStylesheet,\n            maskInputOptions,\n            maskAttributeFn,\n            maskTextFn,\n            maskInputFn,\n            slimDOMOptions,\n            dataURLOptions,\n            inlineImages,\n            recordCanvas,\n            preserveWhiteSpace,\n            onSerialize,\n            onIframeLoad,\n            iframeLoadTimeout,\n            onStylesheetLoad,\n            stylesheetLoadTimeout,\n            keepIframeSrcFn\n          });\n          if (serializedIframeNode) {\n            onIframeLoad(\n              n2,\n              serializedIframeNode\n            );\n          }\n        }\n      },\n      iframeLoadTimeout\n    );\n  }\n  if (serializedNode2.type === NodeType$2.Element && serializedNode2.tagName === \"link\" && typeof serializedNode2.attributes.rel === \"string\" && (serializedNode2.attributes.rel === \"stylesheet\" || serializedNode2.attributes.rel === \"preload\" && typeof serializedNode2.attributes.href === \"string\" && extractFileExtension(serializedNode2.attributes.href) === \"css\")) {\n    onceStylesheetLoaded(\n      n2,\n      () => {\n        if (onStylesheetLoad) {\n          const serializedLinkNode = serializeNodeWithId(n2, {\n            doc,\n            mirror: mirror2,\n            blockClass,\n            blockSelector,\n            unblockSelector,\n            maskAllText,\n            maskTextClass,\n            unmaskTextClass,\n            maskTextSelector,\n            unmaskTextSelector,\n            skipChild: false,\n            inlineStylesheet,\n            maskInputOptions,\n            maskAttributeFn,\n            maskTextFn,\n            maskInputFn,\n            slimDOMOptions,\n            dataURLOptions,\n            inlineImages,\n            recordCanvas,\n            preserveWhiteSpace,\n            onSerialize,\n            onIframeLoad,\n            iframeLoadTimeout,\n            onStylesheetLoad,\n            stylesheetLoadTimeout,\n            keepIframeSrcFn\n          });\n          if (serializedLinkNode) {\n            onStylesheetLoad(\n              n2,\n              serializedLinkNode\n            );\n          }\n        }\n      },\n      stylesheetLoadTimeout\n    );\n  }\n  return serializedNode2;\n}\nfunction snapshot(n2, options) {\n  const {\n    mirror: mirror2 = new Mirror(),\n    blockClass = \"rr-block\",\n    blockSelector = null,\n    unblockSelector = null,\n    maskAllText = false,\n    maskTextClass = \"rr-mask\",\n    unmaskTextClass = null,\n    maskTextSelector = null,\n    unmaskTextSelector = null,\n    inlineStylesheet = true,\n    inlineImages = false,\n    recordCanvas = false,\n    maskAllInputs = false,\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    slimDOM = false,\n    dataURLOptions,\n    preserveWhiteSpace,\n    onSerialize,\n    onIframeLoad,\n    iframeLoadTimeout,\n    onStylesheetLoad,\n    stylesheetLoadTimeout,\n    keepIframeSrcFn = () => false\n  } = options || {};\n  const maskInputOptions = maskAllInputs === true ? {\n    color: true,\n    date: true,\n    \"datetime-local\": true,\n    email: true,\n    month: true,\n    number: true,\n    range: true,\n    search: true,\n    tel: true,\n    text: true,\n    time: true,\n    url: true,\n    week: true,\n    textarea: true,\n    select: true\n  } : maskAllInputs === false ? {} : maskAllInputs;\n  const slimDOMOptions = slimDOM === true || slimDOM === \"all\" ? (\n    // if true: set of sensible options that should not throw away any information\n    {\n      script: true,\n      comment: true,\n      headFavicon: true,\n      headWhitespace: true,\n      headMetaDescKeywords: slimDOM === \"all\",\n      // destructive\n      headMetaSocial: true,\n      headMetaRobots: true,\n      headMetaHttpEquiv: true,\n      headMetaAuthorship: true,\n      headMetaVerification: true\n    }\n  ) : slimDOM === false ? {} : slimDOM;\n  return serializeNodeWithId(n2, {\n    doc: n2,\n    mirror: mirror2,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    maskAllText,\n    maskTextClass,\n    unmaskTextClass,\n    maskTextSelector,\n    unmaskTextSelector,\n    skipChild: false,\n    inlineStylesheet,\n    maskInputOptions,\n    maskAttributeFn,\n    maskTextFn,\n    maskInputFn,\n    slimDOMOptions,\n    dataURLOptions,\n    inlineImages,\n    recordCanvas,\n    preserveWhiteSpace,\n    onSerialize,\n    onIframeLoad,\n    iframeLoadTimeout,\n    onStylesheetLoad,\n    stylesheetLoadTimeout,\n    keepIframeSrcFn,\n    newlyAddedElement: false\n  });\n}\nfunction on(type, fn, target = document) {\n  const options = { capture: true, passive: true };\n  target.addEventListener(type, fn, options);\n  return () => target.removeEventListener(type, fn, options);\n}\nconst DEPARTED_MIRROR_ACCESS_WARNING = \"Please stop import mirror directly. Instead of that,\\r\\nnow you can use replayer.getMirror() to access the mirror instance of a replayer,\\r\\nor you can use record.mirror to access the mirror instance during recording.\";\nlet _mirror = {\n  map: {},\n  getId() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    return -1;\n  },\n  getNode() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    return null;\n  },\n  removeNodeFromMap() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n  },\n  has() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n    return false;\n  },\n  reset() {\n    console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n  }\n};\nif (typeof window !== \"undefined\" && window.Proxy && window.Reflect) {\n  _mirror = new Proxy(_mirror, {\n    get(target, prop, receiver) {\n      if (prop === \"map\") {\n        console.error(DEPARTED_MIRROR_ACCESS_WARNING);\n      }\n      return Reflect.get(target, prop, receiver);\n    }\n  });\n}\nfunction throttle$1(func, wait, options = {}) {\n  let timeout = null;\n  let previous = 0;\n  return function(...args) {\n    const now = Date.now();\n    if (!previous && options.leading === false) {\n      previous = now;\n    }\n    const remaining = wait - (now - previous);\n    const context = this;\n    if (remaining <= 0 || remaining > wait) {\n      if (timeout) {\n        clearTimeout$2(timeout);\n        timeout = null;\n      }\n      previous = now;\n      func.apply(context, args);\n    } else if (!timeout && options.trailing !== false) {\n      timeout = setTimeout$1(() => {\n        previous = options.leading === false ? 0 : Date.now();\n        timeout = null;\n        func.apply(context, args);\n      }, remaining);\n    }\n  };\n}\nfunction hookSetter(target, key, d, isRevoked, win = window) {\n  const original = win.Object.getOwnPropertyDescriptor(target, key);\n  win.Object.defineProperty(\n    target,\n    key,\n    isRevoked ? d : {\n      set(value) {\n        setTimeout$1(() => {\n          d.set.call(this, value);\n        }, 0);\n        if (original && original.set) {\n          original.set.call(this, value);\n        }\n      }\n    }\n  );\n  return () => hookSetter(target, key, original || {}, true);\n}\nfunction patch(source, name, replacement) {\n  try {\n    if (!(name in source)) {\n      return () => {\n      };\n    }\n    const original = source[name];\n    const wrapped = replacement(original);\n    if (typeof wrapped === \"function\") {\n      wrapped.prototype = wrapped.prototype || {};\n      Object.defineProperties(wrapped, {\n        __rrweb_original__: {\n          enumerable: false,\n          value: original\n        }\n      });\n    }\n    source[name] = wrapped;\n    return () => {\n      source[name] = original;\n    };\n  } catch {\n    return () => {\n    };\n  }\n}\nlet nowTimestamp = Date.now;\nif (!/* @__PURE__ */ /[1-9][0-9]{12}/.test(Date.now().toString())) {\n  nowTimestamp = () => (/* @__PURE__ */ new Date()).getTime();\n}\nfunction getWindowScroll(win) {\n  const doc = win.document;\n  return {\n    left: doc.scrollingElement ? doc.scrollingElement.scrollLeft : win.pageXOffset !== void 0 ? win.pageXOffset : doc?.documentElement.scrollLeft || doc?.body?.parentElement?.scrollLeft || doc?.body?.scrollLeft || 0,\n    top: doc.scrollingElement ? doc.scrollingElement.scrollTop : win.pageYOffset !== void 0 ? win.pageYOffset : doc?.documentElement.scrollTop || doc?.body?.parentElement?.scrollTop || doc?.body?.scrollTop || 0\n  };\n}\nfunction getWindowHeight() {\n  return window.innerHeight || document.documentElement && document.documentElement.clientHeight || document.body && document.body.clientHeight;\n}\nfunction getWindowWidth() {\n  return window.innerWidth || document.documentElement && document.documentElement.clientWidth || document.body && document.body.clientWidth;\n}\nfunction closestElementOfNode$1(node) {\n  if (!node) {\n    return null;\n  }\n  try {\n    const el = node.nodeType === node.ELEMENT_NODE ? node : node.parentElement;\n    return el;\n  } catch (error) {\n    return null;\n  }\n}\nfunction isBlocked(node, blockClass, blockSelector, unblockSelector, checkAncestors) {\n  if (!node) {\n    return false;\n  }\n  const el = closestElementOfNode$1(node);\n  if (!el) {\n    return false;\n  }\n  const blockedPredicate = createMatchPredicate(blockClass, blockSelector);\n  if (!checkAncestors) {\n    const isUnblocked = unblockSelector && el.matches(unblockSelector);\n    return blockedPredicate(el) && !isUnblocked;\n  }\n  const blockDistance = distanceToMatch(el, blockedPredicate);\n  let unblockDistance = -1;\n  if (blockDistance < 0) {\n    return false;\n  }\n  if (unblockSelector) {\n    unblockDistance = distanceToMatch(\n      el,\n      createMatchPredicate(null, unblockSelector)\n    );\n  }\n  if (blockDistance > -1 && unblockDistance < 0) {\n    return true;\n  }\n  return blockDistance < unblockDistance;\n}\nfunction isSerialized(n2, mirror2) {\n  return mirror2.getId(n2) !== -1;\n}\nfunction isIgnored(n2, mirror2) {\n  return mirror2.getId(n2) === IGNORED_NODE;\n}\nfunction isAncestorRemoved(target, mirror2) {\n  if (isShadowRoot(target)) {\n    return false;\n  }\n  const id = mirror2.getId(target);\n  if (!mirror2.has(id)) {\n    return true;\n  }\n  if (target.parentNode && target.parentNode.nodeType === target.DOCUMENT_NODE) {\n    return false;\n  }\n  if (!target.parentNode) {\n    return true;\n  }\n  return isAncestorRemoved(target.parentNode, mirror2);\n}\nfunction legacy_isTouchEvent(event) {\n  return Boolean(event.changedTouches);\n}\nfunction polyfill$1(win = window) {\n  if (\"NodeList\" in win && !win.NodeList.prototype.forEach) {\n    win.NodeList.prototype.forEach = Array.prototype.forEach;\n  }\n  if (\"DOMTokenList\" in win && !win.DOMTokenList.prototype.forEach) {\n    win.DOMTokenList.prototype.forEach = Array.prototype.forEach;\n  }\n  if (!Node.prototype.contains) {\n    Node.prototype.contains = (...args) => {\n      let node = args[0];\n      if (!(0 in args)) {\n        throw new TypeError(\"1 argument is required\");\n      }\n      do {\n        if (this === node) {\n          return true;\n        }\n      } while (node = node && node.parentNode);\n      return false;\n    };\n  }\n}\nfunction isSerializedIframe(n2, mirror2) {\n  return Boolean(n2.nodeName === \"IFRAME\" && mirror2.getMeta(n2));\n}\nfunction isSerializedStylesheet(n2, mirror2) {\n  return Boolean(\n    n2.nodeName === \"LINK\" && n2.nodeType === n2.ELEMENT_NODE && n2.getAttribute && n2.getAttribute(\"rel\") === \"stylesheet\" && mirror2.getMeta(n2)\n  );\n}\nfunction hasShadowRoot(n2) {\n  return Boolean(n2?.shadowRoot);\n}\nclass StyleSheetMirror {\n  constructor() {\n    this.id = 1;\n    this.styleIDMap = /* @__PURE__ */ new WeakMap();\n    this.idStyleMap = /* @__PURE__ */ new Map();\n  }\n  getId(stylesheet) {\n    return this.styleIDMap.get(stylesheet) ?? -1;\n  }\n  has(stylesheet) {\n    return this.styleIDMap.has(stylesheet);\n  }\n  /**\n   * @returns If the stylesheet is in the mirror, returns the id of the stylesheet. If not, return the new assigned id.\n   */\n  add(stylesheet, id) {\n    if (this.has(stylesheet)) return this.getId(stylesheet);\n    let newId;\n    if (id === void 0) {\n      newId = this.id++;\n    } else newId = id;\n    this.styleIDMap.set(stylesheet, newId);\n    this.idStyleMap.set(newId, stylesheet);\n    return newId;\n  }\n  getStyle(id) {\n    return this.idStyleMap.get(id) || null;\n  }\n  reset() {\n    this.styleIDMap = /* @__PURE__ */ new WeakMap();\n    this.idStyleMap = /* @__PURE__ */ new Map();\n    this.id = 1;\n  }\n  generateId() {\n    return this.id++;\n  }\n}\nfunction getShadowHost(n2) {\n  let shadowHost = null;\n  if (n2.getRootNode?.()?.nodeType === Node.DOCUMENT_FRAGMENT_NODE && n2.getRootNode().host)\n    shadowHost = n2.getRootNode().host;\n  return shadowHost;\n}\nfunction getRootShadowHost(n2) {\n  let rootShadowHost = n2;\n  let shadowHost;\n  while (shadowHost = getShadowHost(rootShadowHost))\n    rootShadowHost = shadowHost;\n  return rootShadowHost;\n}\nfunction shadowHostInDom(n2) {\n  const doc = n2.ownerDocument;\n  if (!doc) return false;\n  const shadowHost = getRootShadowHost(n2);\n  return doc.contains(shadowHost);\n}\nfunction inDom(n2) {\n  const doc = n2.ownerDocument;\n  if (!doc) return false;\n  return doc.contains(n2) || shadowHostInDom(n2);\n}\nconst cachedImplementations = {};\nfunction getImplementation(name) {\n  const cached = cachedImplementations[name];\n  if (cached) {\n    return cached;\n  }\n  const document2 = window.document;\n  let impl = window[name];\n  if (document2 && typeof document2.createElement === \"function\") {\n    try {\n      const sandbox = document2.createElement(\"iframe\");\n      sandbox.hidden = true;\n      document2.head.appendChild(sandbox);\n      const contentWindow = sandbox.contentWindow;\n      if (contentWindow && contentWindow[name]) {\n        impl = // eslint-disable-next-line @typescript-eslint/unbound-method\n        contentWindow[name];\n      }\n      document2.head.removeChild(sandbox);\n    } catch (e2) {\n    }\n  }\n  return cachedImplementations[name] = impl.bind(\n    window\n  );\n}\nfunction onRequestAnimationFrame(...rest) {\n  return getImplementation(\"requestAnimationFrame\")(...rest);\n}\nfunction setTimeout$1(...rest) {\n  return getImplementation(\"setTimeout\")(...rest);\n}\nfunction clearTimeout$2(...rest) {\n  return getImplementation(\"clearTimeout\")(...rest);\n}\nvar EventType = /* @__PURE__ */ ((EventType2) => {\n  EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n  EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n  EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n  EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n  EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n  EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n  EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n  return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n  IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n  IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n  IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n  IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n  IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n  IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n  IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n  IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n  IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n  IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n  IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n  IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n  IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n  IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n  IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n  IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n  IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n  return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n  MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n  MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n  MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n  MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n  MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n  MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n  MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n  MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n  MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n  MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n  MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n  return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n  PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n  PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n  PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n  return PointerTypes2;\n})(PointerTypes || {});\nvar MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {\n  MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n  MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n  MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n  MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n  MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n  return MediaInteractions2;\n})(MediaInteractions || {});\nfunction getIFrameContentDocument(iframe) {\n  try {\n    return iframe.contentDocument;\n  } catch (e2) {\n  }\n}\nfunction getIFrameContentWindow(iframe) {\n  try {\n    return iframe.contentWindow;\n  } catch (e2) {\n  }\n}\nfunction isNodeInLinkedList(n2) {\n  return \"__ln\" in n2;\n}\nclass DoubleLinkedList {\n  constructor() {\n    this.length = 0;\n    this.head = null;\n    this.tail = null;\n  }\n  get(position) {\n    if (position >= this.length) {\n      throw new Error(\"Position outside of list range\");\n    }\n    let current = this.head;\n    for (let index = 0; index < position; index++) {\n      current = current?.next || null;\n    }\n    return current;\n  }\n  addNode(n2) {\n    const node = {\n      value: n2,\n      previous: null,\n      next: null\n    };\n    n2.__ln = node;\n    if (n2.previousSibling && isNodeInLinkedList(n2.previousSibling)) {\n      const current = n2.previousSibling.__ln.next;\n      node.next = current;\n      node.previous = n2.previousSibling.__ln;\n      n2.previousSibling.__ln.next = node;\n      if (current) {\n        current.previous = node;\n      }\n    } else if (n2.nextSibling && isNodeInLinkedList(n2.nextSibling) && n2.nextSibling.__ln.previous) {\n      const current = n2.nextSibling.__ln.previous;\n      node.previous = current;\n      node.next = n2.nextSibling.__ln;\n      n2.nextSibling.__ln.previous = node;\n      if (current) {\n        current.next = node;\n      }\n    } else {\n      if (this.head) {\n        this.head.previous = node;\n      }\n      node.next = this.head;\n      this.head = node;\n    }\n    if (node.next === null) {\n      this.tail = node;\n    }\n    this.length++;\n  }\n  removeNode(n2) {\n    const current = n2.__ln;\n    if (!this.head) {\n      return;\n    }\n    if (!current.previous) {\n      this.head = current.next;\n      if (this.head) {\n        this.head.previous = null;\n      } else {\n        this.tail = null;\n      }\n    } else {\n      current.previous.next = current.next;\n      if (current.next) {\n        current.next.previous = current.previous;\n      } else {\n        this.tail = current.previous;\n      }\n    }\n    if (n2.__ln) {\n      delete n2.__ln;\n    }\n    this.length--;\n  }\n}\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\nclass MutationBuffer {\n  constructor() {\n    this.frozen = false;\n    this.locked = false;\n    this.texts = [];\n    this.attributes = [];\n    this.attributeMap = /* @__PURE__ */ new WeakMap();\n    this.removes = [];\n    this.mapRemoves = [];\n    this.movedMap = {};\n    this.addedSet = /* @__PURE__ */ new Set();\n    this.movedSet = /* @__PURE__ */ new Set();\n    this.droppedSet = /* @__PURE__ */ new Set();\n    this.processMutations = (mutations) => {\n      mutations.forEach(this.processMutation);\n      this.emit();\n    };\n    this.emit = () => {\n      if (this.frozen || this.locked) {\n        return;\n      }\n      const adds = [];\n      const addedIds = /* @__PURE__ */ new Set();\n      const addList = new DoubleLinkedList();\n      const getNextId = (n2) => {\n        let ns = n2;\n        let nextId = IGNORED_NODE;\n        while (nextId === IGNORED_NODE) {\n          ns = ns && ns.nextSibling;\n          nextId = ns && this.mirror.getId(ns);\n        }\n        return nextId;\n      };\n      const pushAdd = (n2) => {\n        if (!n2.parentNode || !inDom(n2)) {\n          return;\n        }\n        const parentId = isShadowRoot(n2.parentNode) ? this.mirror.getId(getShadowHost(n2)) : this.mirror.getId(n2.parentNode);\n        const nextId = getNextId(n2);\n        if (parentId === -1 || nextId === -1) {\n          return addList.addNode(n2);\n        }\n        const sn = serializeNodeWithId(n2, {\n          doc: this.doc,\n          mirror: this.mirror,\n          blockClass: this.blockClass,\n          blockSelector: this.blockSelector,\n          maskAllText: this.maskAllText,\n          unblockSelector: this.unblockSelector,\n          maskTextClass: this.maskTextClass,\n          unmaskTextClass: this.unmaskTextClass,\n          maskTextSelector: this.maskTextSelector,\n          unmaskTextSelector: this.unmaskTextSelector,\n          skipChild: true,\n          newlyAddedElement: true,\n          inlineStylesheet: this.inlineStylesheet,\n          maskInputOptions: this.maskInputOptions,\n          maskAttributeFn: this.maskAttributeFn,\n          maskTextFn: this.maskTextFn,\n          maskInputFn: this.maskInputFn,\n          slimDOMOptions: this.slimDOMOptions,\n          dataURLOptions: this.dataURLOptions,\n          recordCanvas: this.recordCanvas,\n          inlineImages: this.inlineImages,\n          onSerialize: (currentN) => {\n            if (isSerializedIframe(currentN, this.mirror) && !isBlocked(\n              currentN,\n              this.blockClass,\n              this.blockSelector,\n              this.unblockSelector,\n              false\n            )) {\n              this.iframeManager.addIframe(currentN);\n            }\n            if (isSerializedStylesheet(currentN, this.mirror)) {\n              this.stylesheetManager.trackLinkElement(\n                currentN\n              );\n            }\n            if (hasShadowRoot(n2)) {\n              this.shadowDomManager.addShadowRoot(n2.shadowRoot, this.doc);\n            }\n          },\n          onIframeLoad: (iframe, childSn) => {\n            if (isBlocked(\n              iframe,\n              this.blockClass,\n              this.blockSelector,\n              this.unblockSelector,\n              false\n            )) {\n              return;\n            }\n            this.iframeManager.attachIframe(iframe, childSn);\n            if (iframe.contentWindow) {\n              this.canvasManager.addWindow(iframe.contentWindow);\n            }\n            this.shadowDomManager.observeAttachShadow(iframe);\n          },\n          onStylesheetLoad: (link, childSn) => {\n            this.stylesheetManager.attachLinkElement(link, childSn);\n          }\n        });\n        if (sn) {\n          adds.push({\n            parentId,\n            nextId,\n            node: sn\n          });\n          addedIds.add(sn.id);\n        }\n      };\n      while (this.mapRemoves.length) {\n        this.mirror.removeNodeFromMap(this.mapRemoves.shift());\n      }\n      for (const n2 of this.movedSet) {\n        if (isParentRemoved(this.removes, n2, this.mirror) && !this.movedSet.has(n2.parentNode)) {\n          continue;\n        }\n        pushAdd(n2);\n      }\n      for (const n2 of this.addedSet) {\n        if (!isAncestorInSet(this.droppedSet, n2) && !isParentRemoved(this.removes, n2, this.mirror)) {\n          pushAdd(n2);\n        } else if (isAncestorInSet(this.movedSet, n2)) {\n          pushAdd(n2);\n        } else {\n          this.droppedSet.add(n2);\n        }\n      }\n      let candidate = null;\n      while (addList.length) {\n        let node = null;\n        if (candidate) {\n          const parentId = this.mirror.getId(candidate.value.parentNode);\n          const nextId = getNextId(candidate.value);\n          if (parentId !== -1 && nextId !== -1) {\n            node = candidate;\n          }\n        }\n        if (!node) {\n          let tailNode = addList.tail;\n          while (tailNode) {\n            const _node = tailNode;\n            tailNode = tailNode.previous;\n            if (_node) {\n              const parentId = this.mirror.getId(_node.value.parentNode);\n              const nextId = getNextId(_node.value);\n              if (nextId === -1) continue;\n              else if (parentId !== -1) {\n                node = _node;\n                break;\n              } else {\n                const unhandledNode = _node.value;\n                if (unhandledNode.parentNode && unhandledNode.parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n                  const shadowHost = unhandledNode.parentNode.host;\n                  const parentId2 = this.mirror.getId(shadowHost);\n                  if (parentId2 !== -1) {\n                    node = _node;\n                    break;\n                  }\n                }\n              }\n            }\n          }\n        }\n        if (!node) {\n          while (addList.head) {\n            addList.removeNode(addList.head.value);\n          }\n          break;\n        }\n        candidate = node.previous;\n        addList.removeNode(node.value);\n        pushAdd(node.value);\n      }\n      const payload = {\n        texts: this.texts.map((text) => ({\n          id: this.mirror.getId(text.node),\n          value: text.value\n        })).filter((text) => !addedIds.has(text.id)).filter((text) => this.mirror.has(text.id)),\n        attributes: this.attributes.map((attribute) => {\n          const { attributes } = attribute;\n          if (typeof attributes.style === \"string\") {\n            const diffAsStr = JSON.stringify(attribute.styleDiff);\n            const unchangedAsStr = JSON.stringify(attribute._unchangedStyles);\n            if (diffAsStr.length < attributes.style.length) {\n              if ((diffAsStr + unchangedAsStr).split(\"var(\").length === attributes.style.split(\"var(\").length) {\n                attributes.style = attribute.styleDiff;\n              }\n            }\n          }\n          return {\n            id: this.mirror.getId(attribute.node),\n            attributes\n          };\n        }).filter((attribute) => !addedIds.has(attribute.id)).filter((attribute) => this.mirror.has(attribute.id)),\n        removes: this.removes,\n        adds\n      };\n      if (!payload.texts.length && !payload.attributes.length && !payload.removes.length && !payload.adds.length) {\n        return;\n      }\n      this.texts = [];\n      this.attributes = [];\n      this.attributeMap = /* @__PURE__ */ new WeakMap();\n      this.removes = [];\n      this.addedSet = /* @__PURE__ */ new Set();\n      this.movedSet = /* @__PURE__ */ new Set();\n      this.droppedSet = /* @__PURE__ */ new Set();\n      this.movedMap = {};\n      this.mutationCb(payload);\n    };\n    this.processMutation = (m) => {\n      if (isIgnored(m.target, this.mirror)) {\n        return;\n      }\n      switch (m.type) {\n        case \"characterData\": {\n          const value = m.target.textContent;\n          if (!isBlocked(\n            m.target,\n            this.blockClass,\n            this.blockSelector,\n            this.unblockSelector,\n            false\n          ) && value !== m.oldValue) {\n            this.texts.push({\n              value: needMaskingText(\n                m.target,\n                this.maskTextClass,\n                this.maskTextSelector,\n                this.unmaskTextClass,\n                this.unmaskTextSelector,\n                this.maskAllText\n              ) && value ? this.maskTextFn ? this.maskTextFn(value, closestElementOfNode$1(m.target)) : value.replace(/[\\S]/g, \"*\") : value,\n              node: m.target\n            });\n          }\n          break;\n        }\n        case \"attributes\": {\n          const target = m.target;\n          let attributeName = m.attributeName;\n          let value = m.target.getAttribute(attributeName);\n          if (attributeName === \"value\") {\n            const type = getInputType(target);\n            const tagName = target.tagName;\n            value = getInputValue(target, tagName, type);\n            const isInputMasked = shouldMaskInput({\n              maskInputOptions: this.maskInputOptions,\n              tagName,\n              type\n            });\n            const forceMask = needMaskingText(\n              m.target,\n              this.maskTextClass,\n              this.maskTextSelector,\n              this.unmaskTextClass,\n              this.unmaskTextSelector,\n              isInputMasked\n            );\n            value = maskInputValue({\n              isMasked: forceMask,\n              element: target,\n              value,\n              maskInputFn: this.maskInputFn\n            });\n          }\n          if (isBlocked(\n            m.target,\n            this.blockClass,\n            this.blockSelector,\n            this.unblockSelector,\n            false\n          ) || value === m.oldValue) {\n            return;\n          }\n          let item = this.attributeMap.get(m.target);\n          if (target.tagName === \"IFRAME\" && attributeName === \"src\" && !this.keepIframeSrcFn(value)) {\n            const iframeDoc = getIFrameContentDocument(\n              target\n            );\n            if (!iframeDoc) {\n              attributeName = \"rr_src\";\n            } else {\n              return;\n            }\n          }\n          if (!item) {\n            item = {\n              node: m.target,\n              attributes: {},\n              styleDiff: {},\n              _unchangedStyles: {}\n            };\n            this.attributes.push(item);\n            this.attributeMap.set(m.target, item);\n          }\n          if (attributeName === \"type\" && target.tagName === \"INPUT\" && (m.oldValue || \"\").toLowerCase() === \"password\") {\n            target.setAttribute(\"data-rr-is-password\", \"true\");\n          }\n          if (!ignoreAttribute(target.tagName, attributeName)) {\n            item.attributes[attributeName] = transformAttribute(\n              this.doc,\n              toLowerCase(target.tagName),\n              toLowerCase(attributeName),\n              value,\n              target,\n              this.maskAttributeFn\n            );\n            if (attributeName === \"style\") {\n              if (!this.unattachedDoc) {\n                try {\n                  this.unattachedDoc = document.implementation.createHTMLDocument();\n                } catch (e2) {\n                  this.unattachedDoc = this.doc;\n                }\n              }\n              const old = this.unattachedDoc.createElement(\"span\");\n              if (m.oldValue) {\n                old.setAttribute(\"style\", m.oldValue);\n              }\n              for (const pname of Array.from(target.style)) {\n                const newValue = target.style.getPropertyValue(pname);\n                const newPriority = target.style.getPropertyPriority(pname);\n                if (newValue !== old.style.getPropertyValue(pname) || newPriority !== old.style.getPropertyPriority(pname)) {\n                  if (newPriority === \"\") {\n                    item.styleDiff[pname] = newValue;\n                  } else {\n                    item.styleDiff[pname] = [newValue, newPriority];\n                  }\n                } else {\n                  item._unchangedStyles[pname] = [newValue, newPriority];\n                }\n              }\n              for (const pname of Array.from(old.style)) {\n                if (target.style.getPropertyValue(pname) === \"\") {\n                  item.styleDiff[pname] = false;\n                }\n              }\n            }\n          }\n          break;\n        }\n        case \"childList\": {\n          if (isBlocked(\n            m.target,\n            this.blockClass,\n            this.blockSelector,\n            this.unblockSelector,\n            true\n          )) {\n            return;\n          }\n          m.addedNodes.forEach((n2) => this.genAdds(n2, m.target));\n          m.removedNodes.forEach((n2) => {\n            const nodeId = this.mirror.getId(n2);\n            const parentId = isShadowRoot(m.target) ? this.mirror.getId(m.target.host) : this.mirror.getId(m.target);\n            if (isBlocked(\n              m.target,\n              this.blockClass,\n              this.blockSelector,\n              this.unblockSelector,\n              false\n            ) || isIgnored(n2, this.mirror) || !isSerialized(n2, this.mirror)) {\n              return;\n            }\n            if (this.addedSet.has(n2)) {\n              deepDelete(this.addedSet, n2);\n              this.droppedSet.add(n2);\n            } else if (this.addedSet.has(m.target) && nodeId === -1) ;\n            else if (isAncestorRemoved(m.target, this.mirror)) ;\n            else if (this.movedSet.has(n2) && this.movedMap[moveKey(nodeId, parentId)]) {\n              deepDelete(this.movedSet, n2);\n            } else {\n              this.removes.push({\n                parentId,\n                id: nodeId,\n                isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target) ? true : void 0\n              });\n            }\n            this.mapRemoves.push(n2);\n          });\n          break;\n        }\n      }\n    };\n    this.genAdds = (n2, target) => {\n      if (this.processedNodeManager.inOtherBuffer(n2, this)) return;\n      if (this.addedSet.has(n2) || this.movedSet.has(n2)) return;\n      if (this.mirror.hasNode(n2)) {\n        if (isIgnored(n2, this.mirror)) {\n          return;\n        }\n        this.movedSet.add(n2);\n        let targetId = null;\n        if (target && this.mirror.hasNode(target)) {\n          targetId = this.mirror.getId(target);\n        }\n        if (targetId && targetId !== -1) {\n          this.movedMap[moveKey(this.mirror.getId(n2), targetId)] = true;\n        }\n      } else {\n        this.addedSet.add(n2);\n        this.droppedSet.delete(n2);\n      }\n      if (!isBlocked(\n        n2,\n        this.blockClass,\n        this.blockSelector,\n        this.unblockSelector,\n        false\n      )) {\n        n2.childNodes.forEach((childN) => this.genAdds(childN));\n        if (hasShadowRoot(n2)) {\n          n2.shadowRoot.childNodes.forEach((childN) => {\n            this.processedNodeManager.add(childN, this);\n            this.genAdds(childN, n2);\n          });\n        }\n      }\n    };\n  }\n  init(options) {\n    [\n      \"mutationCb\",\n      \"blockClass\",\n      \"blockSelector\",\n      \"unblockSelector\",\n      \"maskAllText\",\n      \"maskTextClass\",\n      \"unmaskTextClass\",\n      \"maskTextSelector\",\n      \"unmaskTextSelector\",\n      \"inlineStylesheet\",\n      \"maskInputOptions\",\n      \"maskAttributeFn\",\n      \"maskTextFn\",\n      \"maskInputFn\",\n      \"keepIframeSrcFn\",\n      \"recordCanvas\",\n      \"inlineImages\",\n      \"slimDOMOptions\",\n      \"dataURLOptions\",\n      \"doc\",\n      \"mirror\",\n      \"iframeManager\",\n      \"stylesheetManager\",\n      \"shadowDomManager\",\n      \"canvasManager\",\n      \"processedNodeManager\"\n    ].forEach((key) => {\n      this[key] = options[key];\n    });\n  }\n  freeze() {\n    this.frozen = true;\n    this.canvasManager.freeze();\n  }\n  unfreeze() {\n    this.frozen = false;\n    this.canvasManager.unfreeze();\n    this.emit();\n  }\n  isFrozen() {\n    return this.frozen;\n  }\n  lock() {\n    this.locked = true;\n    this.canvasManager.lock();\n  }\n  unlock() {\n    this.locked = false;\n    this.canvasManager.unlock();\n    this.emit();\n  }\n  reset() {\n    this.shadowDomManager.reset();\n    this.canvasManager.reset();\n  }\n}\nfunction deepDelete(addsSet, n2) {\n  addsSet.delete(n2);\n  n2.childNodes.forEach((childN) => deepDelete(addsSet, childN));\n}\nfunction isParentRemoved(removes, n2, mirror2) {\n  if (removes.length === 0) return false;\n  return _isParentRemoved(removes, n2, mirror2);\n}\nfunction _isParentRemoved(removes, n2, mirror2) {\n  let node = n2.parentNode;\n  while (node) {\n    const parentId = mirror2.getId(node);\n    if (removes.some((r2) => r2.id === parentId)) {\n      return true;\n    }\n    node = node.parentNode;\n  }\n  return false;\n}\nfunction isAncestorInSet(set, n2) {\n  if (set.size === 0) return false;\n  return _isAncestorInSet(set, n2);\n}\nfunction _isAncestorInSet(set, n2) {\n  const { parentNode } = n2;\n  if (!parentNode) {\n    return false;\n  }\n  if (set.has(parentNode)) {\n    return true;\n  }\n  return _isAncestorInSet(set, parentNode);\n}\nlet errorHandler;\nfunction registerErrorHandler(handler) {\n  errorHandler = handler;\n}\nfunction unregisterErrorHandler() {\n  errorHandler = void 0;\n}\nconst callbackWrapper = (cb) => {\n  if (!errorHandler) {\n    return cb;\n  }\n  const rrwebWrapped = (...rest) => {\n    try {\n      return cb(...rest);\n    } catch (error) {\n      if (errorHandler && errorHandler(error) === true) {\n        return () => {\n        };\n      }\n      throw error;\n    }\n  };\n  return rrwebWrapped;\n};\nconst mutationBuffers = [];\nfunction getEventTarget(event) {\n  try {\n    if (\"composedPath\" in event) {\n      const path = event.composedPath();\n      if (path.length) {\n        return path[0];\n      }\n    } else if (\"path\" in event && event.path.length) {\n      return event.path[0];\n    }\n  } catch {\n  }\n  return event && event.target;\n}\nfunction initMutationObserver(options, rootEl) {\n  const mutationBuffer = new MutationBuffer();\n  mutationBuffers.push(mutationBuffer);\n  mutationBuffer.init(options);\n  let mutationObserverCtor = window.MutationObserver || /**\n  * Some websites may disable MutationObserver by removing it from the window object.\n  * If someone is using rrweb to build a browser extention or things like it, they\n  * could not change the website's code but can have an opportunity to inject some\n  * code before the website executing its JS logic.\n  * Then they can do this to store the native MutationObserver:\n  * window.__rrMutationObserver = MutationObserver\n  */\n  window.__rrMutationObserver;\n  const angularZoneSymbol = window?.Zone?.__symbol__?.(\"MutationObserver\");\n  if (angularZoneSymbol && window[angularZoneSymbol]) {\n    mutationObserverCtor = window[angularZoneSymbol];\n  }\n  const observer = new mutationObserverCtor(\n    callbackWrapper((mutations) => {\n      if (options.onMutation && options.onMutation(mutations) === false) {\n        return;\n      }\n      mutationBuffer.processMutations.bind(mutationBuffer)(mutations);\n    })\n  );\n  observer.observe(rootEl, {\n    attributes: true,\n    attributeOldValue: true,\n    characterData: true,\n    characterDataOldValue: true,\n    childList: true,\n    subtree: true\n  });\n  return observer;\n}\nfunction initMoveObserver({\n  mousemoveCb,\n  sampling,\n  doc,\n  mirror: mirror2\n}) {\n  if (sampling.mousemove === false) {\n    return () => {\n    };\n  }\n  const threshold = typeof sampling.mousemove === \"number\" ? sampling.mousemove : 50;\n  const callbackThreshold = typeof sampling.mousemoveCallback === \"number\" ? sampling.mousemoveCallback : 500;\n  let positions = [];\n  let timeBaseline;\n  const wrappedCb = throttle$1(\n    callbackWrapper(\n      (source) => {\n        const totalOffset = Date.now() - timeBaseline;\n        mousemoveCb(\n          positions.map((p) => {\n            p.timeOffset -= totalOffset;\n            return p;\n          }),\n          source\n        );\n        positions = [];\n        timeBaseline = null;\n      }\n    ),\n    callbackThreshold\n  );\n  const updatePosition = callbackWrapper(\n    throttle$1(\n      callbackWrapper((evt) => {\n        const target = getEventTarget(evt);\n        const { clientX, clientY } = legacy_isTouchEvent(evt) ? evt.changedTouches[0] : evt;\n        if (!timeBaseline) {\n          timeBaseline = nowTimestamp();\n        }\n        positions.push({\n          x: clientX,\n          y: clientY,\n          id: mirror2.getId(target),\n          timeOffset: nowTimestamp() - timeBaseline\n        });\n        wrappedCb(\n          typeof DragEvent !== \"undefined\" && evt instanceof DragEvent ? IncrementalSource.Drag : evt instanceof MouseEvent ? IncrementalSource.MouseMove : IncrementalSource.TouchMove\n        );\n      }),\n      threshold,\n      {\n        trailing: false\n      }\n    )\n  );\n  const handlers = [\n    on(\"mousemove\", updatePosition, doc),\n    on(\"touchmove\", updatePosition, doc),\n    on(\"drag\", updatePosition, doc)\n  ];\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction initMouseInteractionObserver({\n  mouseInteractionCb,\n  doc,\n  mirror: mirror2,\n  blockClass,\n  blockSelector,\n  unblockSelector,\n  sampling\n}) {\n  if (sampling.mouseInteraction === false) {\n    return () => {\n    };\n  }\n  const disableMap = sampling.mouseInteraction === true || sampling.mouseInteraction === void 0 ? {} : sampling.mouseInteraction;\n  const handlers = [];\n  let currentPointerType = null;\n  const getHandler = (eventKey) => {\n    return (event) => {\n      const target = getEventTarget(event);\n      if (isBlocked(target, blockClass, blockSelector, unblockSelector, true)) {\n        return;\n      }\n      let pointerType = null;\n      let thisEventKey = eventKey;\n      if (\"pointerType\" in event) {\n        switch (event.pointerType) {\n          case \"mouse\":\n            pointerType = PointerTypes.Mouse;\n            break;\n          case \"touch\":\n            pointerType = PointerTypes.Touch;\n            break;\n          case \"pen\":\n            pointerType = PointerTypes.Pen;\n            break;\n        }\n        if (pointerType === PointerTypes.Touch) {\n          if (MouseInteractions[eventKey] === MouseInteractions.MouseDown) {\n            thisEventKey = \"TouchStart\";\n          } else if (MouseInteractions[eventKey] === MouseInteractions.MouseUp) {\n            thisEventKey = \"TouchEnd\";\n          }\n        } else if (pointerType === PointerTypes.Pen) ;\n      } else if (legacy_isTouchEvent(event)) {\n        pointerType = PointerTypes.Touch;\n      }\n      if (pointerType !== null) {\n        currentPointerType = pointerType;\n        if (thisEventKey.startsWith(\"Touch\") && pointerType === PointerTypes.Touch || thisEventKey.startsWith(\"Mouse\") && pointerType === PointerTypes.Mouse) {\n          pointerType = null;\n        }\n      } else if (MouseInteractions[eventKey] === MouseInteractions.Click) {\n        pointerType = currentPointerType;\n        currentPointerType = null;\n      }\n      const e2 = legacy_isTouchEvent(event) ? event.changedTouches[0] : event;\n      if (!e2) {\n        return;\n      }\n      const id = mirror2.getId(target);\n      const { clientX, clientY } = e2;\n      callbackWrapper(mouseInteractionCb)({\n        type: MouseInteractions[thisEventKey],\n        id,\n        x: clientX,\n        y: clientY,\n        ...pointerType !== null && { pointerType }\n      });\n    };\n  };\n  Object.keys(MouseInteractions).filter(\n    (key) => Number.isNaN(Number(key)) && !key.endsWith(\"_Departed\") && disableMap[key] !== false\n  ).forEach((eventKey) => {\n    let eventName = toLowerCase(eventKey);\n    const handler = getHandler(eventKey);\n    if (window.PointerEvent) {\n      switch (MouseInteractions[eventKey]) {\n        case MouseInteractions.MouseDown:\n        case MouseInteractions.MouseUp:\n          eventName = eventName.replace(\n            \"mouse\",\n            \"pointer\"\n          );\n          break;\n        case MouseInteractions.TouchStart:\n        case MouseInteractions.TouchEnd:\n          return;\n      }\n    }\n    handlers.push(on(eventName, handler, doc));\n  });\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction initScrollObserver({\n  scrollCb,\n  doc,\n  mirror: mirror2,\n  blockClass,\n  blockSelector,\n  unblockSelector,\n  sampling\n}) {\n  const updatePosition = callbackWrapper(\n    throttle$1(\n      callbackWrapper((evt) => {\n        const target = getEventTarget(evt);\n        if (!target || isBlocked(\n          target,\n          blockClass,\n          blockSelector,\n          unblockSelector,\n          true\n        )) {\n          return;\n        }\n        const id = mirror2.getId(target);\n        if (target === doc && doc.defaultView) {\n          const scrollLeftTop = getWindowScroll(doc.defaultView);\n          scrollCb({\n            id,\n            x: scrollLeftTop.left,\n            y: scrollLeftTop.top\n          });\n        } else {\n          scrollCb({\n            id,\n            x: target.scrollLeft,\n            y: target.scrollTop\n          });\n        }\n      }),\n      sampling.scroll || 100\n    )\n  );\n  return on(\"scroll\", updatePosition, doc);\n}\nfunction initViewportResizeObserver({ viewportResizeCb }, { win }) {\n  let lastH = -1;\n  let lastW = -1;\n  const updateDimension = callbackWrapper(\n    throttle$1(\n      callbackWrapper(() => {\n        const height = getWindowHeight();\n        const width = getWindowWidth();\n        if (lastH !== height || lastW !== width) {\n          viewportResizeCb({\n            width: Number(width),\n            height: Number(height)\n          });\n          lastH = height;\n          lastW = width;\n        }\n      }),\n      200\n    )\n  );\n  return on(\"resize\", updateDimension, win);\n}\nconst INPUT_TAGS = [\"INPUT\", \"TEXTAREA\", \"SELECT\"];\nconst lastInputValueMap = /* @__PURE__ */ new WeakMap();\nfunction initInputObserver({\n  inputCb,\n  doc,\n  mirror: mirror2,\n  blockClass,\n  blockSelector,\n  unblockSelector,\n  ignoreClass,\n  ignoreSelector,\n  maskInputOptions,\n  maskInputFn,\n  sampling,\n  userTriggeredOnInput,\n  maskTextClass,\n  unmaskTextClass,\n  maskTextSelector,\n  unmaskTextSelector\n}) {\n  function eventHandler(event) {\n    let target = getEventTarget(event);\n    const userTriggered = event.isTrusted;\n    const tagName = target && toUpperCase(target.tagName);\n    if (tagName === \"OPTION\") target = target.parentElement;\n    if (!target || !tagName || INPUT_TAGS.indexOf(tagName) < 0 || isBlocked(\n      target,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      true\n    )) {\n      return;\n    }\n    const el = target;\n    if (el.classList.contains(ignoreClass) || ignoreSelector && el.matches(ignoreSelector)) {\n      return;\n    }\n    const type = getInputType(target);\n    let text = getInputValue(el, tagName, type);\n    let isChecked = false;\n    const isInputMasked = shouldMaskInput({\n      maskInputOptions,\n      tagName,\n      type\n    });\n    const forceMask = needMaskingText(\n      target,\n      maskTextClass,\n      maskTextSelector,\n      unmaskTextClass,\n      unmaskTextSelector,\n      isInputMasked\n    );\n    if (type === \"radio\" || type === \"checkbox\") {\n      isChecked = target.checked;\n    }\n    text = maskInputValue({\n      isMasked: forceMask,\n      element: target,\n      value: text,\n      maskInputFn\n    });\n    cbWithDedup(\n      target,\n      userTriggeredOnInput ? { text, isChecked, userTriggered } : { text, isChecked }\n    );\n    const name = target.name;\n    if (type === \"radio\" && name && isChecked) {\n      doc.querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`).forEach((el2) => {\n        if (el2 !== target) {\n          const text2 = maskInputValue({\n            // share mask behavior of `target`\n            isMasked: forceMask,\n            element: el2,\n            value: getInputValue(el2, tagName, type),\n            maskInputFn\n          });\n          cbWithDedup(\n            el2,\n            userTriggeredOnInput ? { text: text2, isChecked: !isChecked, userTriggered: false } : { text: text2, isChecked: !isChecked }\n          );\n        }\n      });\n    }\n  }\n  function cbWithDedup(target, v2) {\n    const lastInputValue = lastInputValueMap.get(target);\n    if (!lastInputValue || lastInputValue.text !== v2.text || lastInputValue.isChecked !== v2.isChecked) {\n      lastInputValueMap.set(target, v2);\n      const id = mirror2.getId(target);\n      callbackWrapper(inputCb)({\n        ...v2,\n        id\n      });\n    }\n  }\n  const events = sampling.input === \"last\" ? [\"change\"] : [\"input\", \"change\"];\n  const handlers = events.map(\n    (eventName) => on(eventName, callbackWrapper(eventHandler), doc)\n  );\n  const currentWindow = doc.defaultView;\n  if (!currentWindow) {\n    return () => {\n      handlers.forEach((h) => h());\n    };\n  }\n  const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(\n    currentWindow.HTMLInputElement.prototype,\n    \"value\"\n  );\n  const hookProperties = [\n    [currentWindow.HTMLInputElement.prototype, \"value\"],\n    [currentWindow.HTMLInputElement.prototype, \"checked\"],\n    [currentWindow.HTMLSelectElement.prototype, \"value\"],\n    [currentWindow.HTMLTextAreaElement.prototype, \"value\"],\n    // Some UI library use selectedIndex to set select value\n    [currentWindow.HTMLSelectElement.prototype, \"selectedIndex\"],\n    [currentWindow.HTMLOptionElement.prototype, \"selected\"]\n  ];\n  if (propertyDescriptor && propertyDescriptor.set) {\n    handlers.push(\n      ...hookProperties.map(\n        (p) => hookSetter(\n          p[0],\n          p[1],\n          {\n            set() {\n              callbackWrapper(eventHandler)({\n                target: this,\n                isTrusted: false\n                // userTriggered to false as this could well be programmatic\n              });\n            }\n          },\n          false,\n          currentWindow\n        )\n      )\n    );\n  }\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction getNestedCSSRulePositions(rule) {\n  const positions = [];\n  function recurse(childRule, pos) {\n    if (hasNestedCSSRule(\"CSSGroupingRule\") && childRule.parentRule instanceof CSSGroupingRule || hasNestedCSSRule(\"CSSMediaRule\") && childRule.parentRule instanceof CSSMediaRule || hasNestedCSSRule(\"CSSSupportsRule\") && childRule.parentRule instanceof CSSSupportsRule || hasNestedCSSRule(\"CSSConditionRule\") && childRule.parentRule instanceof CSSConditionRule) {\n      const rules2 = Array.from(\n        childRule.parentRule.cssRules\n      );\n      const index = rules2.indexOf(childRule);\n      pos.unshift(index);\n    } else if (childRule.parentStyleSheet) {\n      const rules2 = Array.from(childRule.parentStyleSheet.cssRules);\n      const index = rules2.indexOf(childRule);\n      pos.unshift(index);\n    }\n    return pos;\n  }\n  return recurse(rule, positions);\n}\nfunction getIdAndStyleId(sheet, mirror2, styleMirror) {\n  let id, styleId;\n  if (!sheet) return {};\n  if (sheet.ownerNode) id = mirror2.getId(sheet.ownerNode);\n  else styleId = styleMirror.getId(sheet);\n  return {\n    styleId,\n    id\n  };\n}\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror: mirror2, stylesheetManager }, { win }) {\n  if (!win.CSSStyleSheet || !win.CSSStyleSheet.prototype) {\n    return () => {\n    };\n  }\n  const insertRule = win.CSSStyleSheet.prototype.insertRule;\n  win.CSSStyleSheet.prototype.insertRule = new Proxy(insertRule, {\n    apply: callbackWrapper(\n      (target, thisArg, argumentsList) => {\n        const [rule, index] = argumentsList;\n        const { id, styleId } = getIdAndStyleId(\n          thisArg,\n          mirror2,\n          stylesheetManager.styleMirror\n        );\n        if (id && id !== -1 || styleId && styleId !== -1) {\n          styleSheetRuleCb({\n            id,\n            styleId,\n            adds: [{ rule, index }]\n          });\n        }\n        return target.apply(thisArg, argumentsList);\n      }\n    )\n  });\n  const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\n  win.CSSStyleSheet.prototype.deleteRule = new Proxy(deleteRule, {\n    apply: callbackWrapper(\n      (target, thisArg, argumentsList) => {\n        const [index] = argumentsList;\n        const { id, styleId } = getIdAndStyleId(\n          thisArg,\n          mirror2,\n          stylesheetManager.styleMirror\n        );\n        if (id && id !== -1 || styleId && styleId !== -1) {\n          styleSheetRuleCb({\n            id,\n            styleId,\n            removes: [{ index }]\n          });\n        }\n        return target.apply(thisArg, argumentsList);\n      }\n    )\n  });\n  let replace;\n  if (win.CSSStyleSheet.prototype.replace) {\n    replace = win.CSSStyleSheet.prototype.replace;\n    win.CSSStyleSheet.prototype.replace = new Proxy(replace, {\n      apply: callbackWrapper(\n        (target, thisArg, argumentsList) => {\n          const [text] = argumentsList;\n          const { id, styleId } = getIdAndStyleId(\n            thisArg,\n            mirror2,\n            stylesheetManager.styleMirror\n          );\n          if (id && id !== -1 || styleId && styleId !== -1) {\n            styleSheetRuleCb({\n              id,\n              styleId,\n              replace: text\n            });\n          }\n          return target.apply(thisArg, argumentsList);\n        }\n      )\n    });\n  }\n  let replaceSync;\n  if (win.CSSStyleSheet.prototype.replaceSync) {\n    replaceSync = win.CSSStyleSheet.prototype.replaceSync;\n    win.CSSStyleSheet.prototype.replaceSync = new Proxy(replaceSync, {\n      apply: callbackWrapper(\n        (target, thisArg, argumentsList) => {\n          const [text] = argumentsList;\n          const { id, styleId } = getIdAndStyleId(\n            thisArg,\n            mirror2,\n            stylesheetManager.styleMirror\n          );\n          if (id && id !== -1 || styleId && styleId !== -1) {\n            styleSheetRuleCb({\n              id,\n              styleId,\n              replaceSync: text\n            });\n          }\n          return target.apply(thisArg, argumentsList);\n        }\n      )\n    });\n  }\n  const supportedNestedCSSRuleTypes = {};\n  if (canMonkeyPatchNestedCSSRule(\"CSSGroupingRule\")) {\n    supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\n  } else {\n    if (canMonkeyPatchNestedCSSRule(\"CSSMediaRule\")) {\n      supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\n    }\n    if (canMonkeyPatchNestedCSSRule(\"CSSConditionRule\")) {\n      supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\n    }\n    if (canMonkeyPatchNestedCSSRule(\"CSSSupportsRule\")) {\n      supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\n    }\n  }\n  const unmodifiedFunctions = {};\n  Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n    unmodifiedFunctions[typeKey] = {\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      insertRule: type.prototype.insertRule,\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      deleteRule: type.prototype.deleteRule\n    };\n    type.prototype.insertRule = new Proxy(\n      unmodifiedFunctions[typeKey].insertRule,\n      {\n        apply: callbackWrapper(\n          (target, thisArg, argumentsList) => {\n            const [rule, index] = argumentsList;\n            const { id, styleId } = getIdAndStyleId(\n              thisArg.parentStyleSheet,\n              mirror2,\n              stylesheetManager.styleMirror\n            );\n            if (id && id !== -1 || styleId && styleId !== -1) {\n              styleSheetRuleCb({\n                id,\n                styleId,\n                adds: [\n                  {\n                    rule,\n                    index: [\n                      ...getNestedCSSRulePositions(thisArg),\n                      index || 0\n                      // defaults to 0\n                    ]\n                  }\n                ]\n              });\n            }\n            return target.apply(thisArg, argumentsList);\n          }\n        )\n      }\n    );\n    type.prototype.deleteRule = new Proxy(\n      unmodifiedFunctions[typeKey].deleteRule,\n      {\n        apply: callbackWrapper(\n          (target, thisArg, argumentsList) => {\n            const [index] = argumentsList;\n            const { id, styleId } = getIdAndStyleId(\n              thisArg.parentStyleSheet,\n              mirror2,\n              stylesheetManager.styleMirror\n            );\n            if (id && id !== -1 || styleId && styleId !== -1) {\n              styleSheetRuleCb({\n                id,\n                styleId,\n                removes: [\n                  { index: [...getNestedCSSRulePositions(thisArg), index] }\n                ]\n              });\n            }\n            return target.apply(thisArg, argumentsList);\n          }\n        )\n      }\n    );\n  });\n  return callbackWrapper(() => {\n    win.CSSStyleSheet.prototype.insertRule = insertRule;\n    win.CSSStyleSheet.prototype.deleteRule = deleteRule;\n    replace && (win.CSSStyleSheet.prototype.replace = replace);\n    replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\n    Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\n      type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\n      type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\n    });\n  });\n}\nfunction initAdoptedStyleSheetObserver({\n  mirror: mirror2,\n  stylesheetManager\n}, host) {\n  let hostId = null;\n  if (host.nodeName === \"#document\") hostId = mirror2.getId(host);\n  else hostId = mirror2.getId(host.host);\n  const patchTarget = host.nodeName === \"#document\" ? host.defaultView?.Document : host.ownerDocument?.defaultView?.ShadowRoot;\n  const originalPropertyDescriptor = patchTarget?.prototype ? Object.getOwnPropertyDescriptor(\n    patchTarget?.prototype,\n    \"adoptedStyleSheets\"\n  ) : void 0;\n  if (hostId === null || hostId === -1 || !patchTarget || !originalPropertyDescriptor)\n    return () => {\n    };\n  Object.defineProperty(host, \"adoptedStyleSheets\", {\n    configurable: originalPropertyDescriptor.configurable,\n    enumerable: originalPropertyDescriptor.enumerable,\n    get() {\n      return originalPropertyDescriptor.get?.call(this);\n    },\n    set(sheets) {\n      const result = originalPropertyDescriptor.set?.call(this, sheets);\n      if (hostId !== null && hostId !== -1) {\n        try {\n          stylesheetManager.adoptStyleSheets(sheets, hostId);\n        } catch (e2) {\n        }\n      }\n      return result;\n    }\n  });\n  return callbackWrapper(() => {\n    Object.defineProperty(host, \"adoptedStyleSheets\", {\n      configurable: originalPropertyDescriptor.configurable,\n      enumerable: originalPropertyDescriptor.enumerable,\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      get: originalPropertyDescriptor.get,\n      // eslint-disable-next-line @typescript-eslint/unbound-method\n      set: originalPropertyDescriptor.set\n    });\n  });\n}\nfunction initStyleDeclarationObserver({\n  styleDeclarationCb,\n  mirror: mirror2,\n  ignoreCSSAttributes,\n  stylesheetManager\n}, { win }) {\n  const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\n  win.CSSStyleDeclaration.prototype.setProperty = new Proxy(setProperty, {\n    apply: callbackWrapper(\n      (target, thisArg, argumentsList) => {\n        const [property, value, priority] = argumentsList;\n        if (ignoreCSSAttributes.has(property)) {\n          return setProperty.apply(thisArg, [property, value, priority]);\n        }\n        const { id, styleId } = getIdAndStyleId(\n          thisArg.parentRule?.parentStyleSheet,\n          mirror2,\n          stylesheetManager.styleMirror\n        );\n        if (id && id !== -1 || styleId && styleId !== -1) {\n          styleDeclarationCb({\n            id,\n            styleId,\n            set: {\n              property,\n              value,\n              priority\n            },\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            index: getNestedCSSRulePositions(thisArg.parentRule)\n          });\n        }\n        return target.apply(thisArg, argumentsList);\n      }\n    )\n  });\n  const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\n  win.CSSStyleDeclaration.prototype.removeProperty = new Proxy(removeProperty, {\n    apply: callbackWrapper(\n      (target, thisArg, argumentsList) => {\n        const [property] = argumentsList;\n        if (ignoreCSSAttributes.has(property)) {\n          return removeProperty.apply(thisArg, [property]);\n        }\n        const { id, styleId } = getIdAndStyleId(\n          thisArg.parentRule?.parentStyleSheet,\n          mirror2,\n          stylesheetManager.styleMirror\n        );\n        if (id && id !== -1 || styleId && styleId !== -1) {\n          styleDeclarationCb({\n            id,\n            styleId,\n            remove: {\n              property\n            },\n            // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n            index: getNestedCSSRulePositions(thisArg.parentRule)\n          });\n        }\n        return target.apply(thisArg, argumentsList);\n      }\n    )\n  });\n  return callbackWrapper(() => {\n    win.CSSStyleDeclaration.prototype.setProperty = setProperty;\n    win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\n  });\n}\nfunction initMediaInteractionObserver({\n  mediaInteractionCb,\n  blockClass,\n  blockSelector,\n  unblockSelector,\n  mirror: mirror2,\n  sampling,\n  doc\n}) {\n  const handler = callbackWrapper(\n    (type) => throttle$1(\n      callbackWrapper((event) => {\n        const target = getEventTarget(event);\n        if (!target || isBlocked(\n          target,\n          blockClass,\n          blockSelector,\n          unblockSelector,\n          true\n        )) {\n          return;\n        }\n        const { currentTime, volume, muted, playbackRate } = target;\n        mediaInteractionCb({\n          type,\n          id: mirror2.getId(target),\n          currentTime,\n          volume,\n          muted,\n          playbackRate\n        });\n      }),\n      sampling.media || 500\n    )\n  );\n  const handlers = [\n    on(\"play\", handler(MediaInteractions.Play), doc),\n    on(\"pause\", handler(MediaInteractions.Pause), doc),\n    on(\"seeked\", handler(MediaInteractions.Seeked), doc),\n    on(\"volumechange\", handler(MediaInteractions.VolumeChange), doc),\n    on(\"ratechange\", handler(MediaInteractions.RateChange), doc)\n  ];\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction initFontObserver({ fontCb, doc }) {\n  const win = doc.defaultView;\n  if (!win) {\n    return () => {\n    };\n  }\n  const handlers = [];\n  const fontMap = /* @__PURE__ */ new WeakMap();\n  const originalFontFace = win.FontFace;\n  win.FontFace = function FontFace2(family, source, descriptors) {\n    const fontFace = new originalFontFace(family, source, descriptors);\n    fontMap.set(fontFace, {\n      family,\n      buffer: typeof source !== \"string\",\n      descriptors,\n      fontSource: typeof source === \"string\" ? source : JSON.stringify(Array.from(new Uint8Array(source)))\n    });\n    return fontFace;\n  };\n  const restoreHandler = patch(\n    doc.fonts,\n    \"add\",\n    function(original) {\n      return function(fontFace) {\n        setTimeout$1(\n          callbackWrapper(() => {\n            const p = fontMap.get(fontFace);\n            if (p) {\n              fontCb(p);\n              fontMap.delete(fontFace);\n            }\n          }),\n          0\n        );\n        return original.apply(this, [fontFace]);\n      };\n    }\n  );\n  handlers.push(() => {\n    win.FontFace = originalFontFace;\n  });\n  handlers.push(restoreHandler);\n  return callbackWrapper(() => {\n    handlers.forEach((h) => h());\n  });\n}\nfunction initSelectionObserver(param) {\n  const {\n    doc,\n    mirror: mirror2,\n    blockClass,\n    blockSelector,\n    unblockSelector,\n    selectionCb\n  } = param;\n  let collapsed = true;\n  const updateSelection = callbackWrapper(() => {\n    const selection = doc.getSelection();\n    if (!selection || collapsed && selection?.isCollapsed) return;\n    collapsed = selection.isCollapsed || false;\n    const ranges = [];\n    const count = selection.rangeCount || 0;\n    for (let i2 = 0; i2 < count; i2++) {\n      const range = selection.getRangeAt(i2);\n      const { startContainer, startOffset, endContainer, endOffset } = range;\n      const blocked = isBlocked(\n        startContainer,\n        blockClass,\n        blockSelector,\n        unblockSelector,\n        true\n      ) || isBlocked(\n        endContainer,\n        blockClass,\n        blockSelector,\n        unblockSelector,\n        true\n      );\n      if (blocked) continue;\n      ranges.push({\n        start: mirror2.getId(startContainer),\n        startOffset,\n        end: mirror2.getId(endContainer),\n        endOffset\n      });\n    }\n    selectionCb({ ranges });\n  });\n  updateSelection();\n  return on(\"selectionchange\", updateSelection);\n}\nfunction initCustomElementObserver({\n  doc,\n  customElementCb\n}) {\n  const win = doc.defaultView;\n  if (!win || !win.customElements) return () => {\n  };\n  const restoreHandler = patch(\n    win.customElements,\n    \"define\",\n    function(original) {\n      return function(name, constructor, options) {\n        try {\n          customElementCb({\n            define: {\n              name\n            }\n          });\n        } catch (e2) {\n        }\n        return original.apply(this, [name, constructor, options]);\n      };\n    }\n  );\n  return restoreHandler;\n}\nfunction initObservers(o2, _hooks = {}) {\n  const currentWindow = o2.doc.defaultView;\n  if (!currentWindow) {\n    return () => {\n    };\n  }\n  let mutationObserver;\n  if (o2.recordDOM) {\n    mutationObserver = initMutationObserver(o2, o2.doc);\n  }\n  const mousemoveHandler = initMoveObserver(o2);\n  const mouseInteractionHandler = initMouseInteractionObserver(o2);\n  const scrollHandler = initScrollObserver(o2);\n  const viewportResizeHandler = initViewportResizeObserver(o2, {\n    win: currentWindow\n  });\n  const inputHandler = initInputObserver(o2);\n  const mediaInteractionHandler = initMediaInteractionObserver(o2);\n  let styleSheetObserver = () => {\n  };\n  let adoptedStyleSheetObserver = () => {\n  };\n  let styleDeclarationObserver = () => {\n  };\n  let fontObserver = () => {\n  };\n  if (o2.recordDOM) {\n    styleSheetObserver = initStyleSheetObserver(o2, { win: currentWindow });\n    adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o2, o2.doc);\n    styleDeclarationObserver = initStyleDeclarationObserver(o2, {\n      win: currentWindow\n    });\n    if (o2.collectFonts) {\n      fontObserver = initFontObserver(o2);\n    }\n  }\n  const selectionObserver = initSelectionObserver(o2);\n  const customElementObserver = initCustomElementObserver(o2);\n  const pluginHandlers = [];\n  for (const plugin of o2.plugins) {\n    pluginHandlers.push(\n      plugin.observer(plugin.callback, currentWindow, plugin.options)\n    );\n  }\n  return callbackWrapper(() => {\n    mutationBuffers.forEach((b) => b.reset());\n    mutationObserver?.disconnect();\n    mousemoveHandler();\n    mouseInteractionHandler();\n    scrollHandler();\n    viewportResizeHandler();\n    inputHandler();\n    mediaInteractionHandler();\n    styleSheetObserver();\n    adoptedStyleSheetObserver();\n    styleDeclarationObserver();\n    fontObserver();\n    selectionObserver();\n    customElementObserver();\n    pluginHandlers.forEach((h) => h());\n  });\n}\nfunction hasNestedCSSRule(prop) {\n  return typeof window[prop] !== \"undefined\";\n}\nfunction canMonkeyPatchNestedCSSRule(prop) {\n  return Boolean(\n    typeof window[prop] !== \"undefined\" && // Note: Generally, this check _shouldn't_ be necessary\n    // However, in some scenarios (e.g. jsdom) this can sometimes fail, so we check for it here\n    window[prop].prototype && \"insertRule\" in window[prop].prototype && \"deleteRule\" in window[prop].prototype\n  );\n}\nclass CrossOriginIframeMirror {\n  constructor(generateIdFn) {\n    this.generateIdFn = generateIdFn;\n    this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap();\n    this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap();\n  }\n  getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\n    const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\n    const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\n    let id = idToRemoteIdMap.get(remoteId);\n    if (!id) {\n      id = this.generateIdFn();\n      idToRemoteIdMap.set(remoteId, id);\n      remoteIdToIdMap.set(id, remoteId);\n    }\n    return id;\n  }\n  getIds(iframe, remoteId) {\n    const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\n    const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n    return remoteId.map(\n      (id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap)\n    );\n  }\n  getRemoteId(iframe, id, map) {\n    const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\n    if (typeof id !== \"number\") return id;\n    const remoteId = remoteIdToIdMap.get(id);\n    if (!remoteId) return -1;\n    return remoteId;\n  }\n  getRemoteIds(iframe, ids) {\n    const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\n    return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\n  }\n  reset(iframe) {\n    if (!iframe) {\n      this.iframeIdToRemoteIdMap = /* @__PURE__ */ new WeakMap();\n      this.iframeRemoteIdToIdMap = /* @__PURE__ */ new WeakMap();\n      return;\n    }\n    this.iframeIdToRemoteIdMap.delete(iframe);\n    this.iframeRemoteIdToIdMap.delete(iframe);\n  }\n  getIdToRemoteIdMap(iframe) {\n    let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\n    if (!idToRemoteIdMap) {\n      idToRemoteIdMap = /* @__PURE__ */ new Map();\n      this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\n    }\n    return idToRemoteIdMap;\n  }\n  getRemoteIdToIdMap(iframe) {\n    let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\n    if (!remoteIdToIdMap) {\n      remoteIdToIdMap = /* @__PURE__ */ new Map();\n      this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\n    }\n    return remoteIdToIdMap;\n  }\n}\nclass IframeManagerNoop {\n  constructor() {\n    this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n    this.crossOriginIframeRootIdMap = /* @__PURE__ */ new WeakMap();\n  }\n  addIframe() {\n  }\n  addLoadListener() {\n  }\n  attachIframe() {\n  }\n}\nclass IframeManager {\n  constructor(options) {\n    this.iframes = /* @__PURE__ */ new WeakMap();\n    this.crossOriginIframeMap = /* @__PURE__ */ new WeakMap();\n    this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\n    this.crossOriginIframeRootIdMap = /* @__PURE__ */ new WeakMap();\n    this.mutationCb = options.mutationCb;\n    this.wrappedEmit = options.wrappedEmit;\n    this.stylesheetManager = options.stylesheetManager;\n    this.recordCrossOriginIframes = options.recordCrossOriginIframes;\n    this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(\n      this.stylesheetManager.styleMirror.generateId.bind(\n        this.stylesheetManager.styleMirror\n      )\n    );\n    this.mirror = options.mirror;\n    if (this.recordCrossOriginIframes) {\n      window.addEventListener(\"message\", this.handleMessage.bind(this));\n    }\n  }\n  addIframe(iframeEl) {\n    this.iframes.set(iframeEl, true);\n    if (iframeEl.contentWindow)\n      this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\n  }\n  addLoadListener(cb) {\n    this.loadListener = cb;\n  }\n  attachIframe(iframeEl, childSn) {\n    this.mutationCb({\n      adds: [\n        {\n          parentId: this.mirror.getId(iframeEl),\n          nextId: null,\n          node: childSn\n        }\n      ],\n      removes: [],\n      texts: [],\n      attributes: [],\n      isAttachIframe: true\n    });\n    if (this.recordCrossOriginIframes)\n      iframeEl.contentWindow?.addEventListener(\n        \"message\",\n        this.handleMessage.bind(this)\n      );\n    this.loadListener?.(iframeEl);\n    const iframeDoc = getIFrameContentDocument(iframeEl);\n    if (iframeDoc && iframeDoc.adoptedStyleSheets && iframeDoc.adoptedStyleSheets.length > 0)\n      this.stylesheetManager.adoptStyleSheets(\n        iframeDoc.adoptedStyleSheets,\n        this.mirror.getId(iframeDoc)\n      );\n  }\n  handleMessage(message) {\n    const crossOriginMessageEvent = message;\n    if (crossOriginMessageEvent.data.type !== \"rrweb\" || // To filter out the rrweb messages which are forwarded by some sites.\n    crossOriginMessageEvent.origin !== crossOriginMessageEvent.data.origin)\n      return;\n    const iframeSourceWindow = message.source;\n    if (!iframeSourceWindow) return;\n    const iframeEl = this.crossOriginIframeMap.get(message.source);\n    if (!iframeEl) return;\n    const transformedEvent = this.transformCrossOriginEvent(\n      iframeEl,\n      crossOriginMessageEvent.data.event\n    );\n    if (transformedEvent)\n      this.wrappedEmit(\n        transformedEvent,\n        crossOriginMessageEvent.data.isCheckout\n      );\n  }\n  transformCrossOriginEvent(iframeEl, e2) {\n    switch (e2.type) {\n      case EventType.FullSnapshot: {\n        this.crossOriginIframeMirror.reset(iframeEl);\n        this.crossOriginIframeStyleMirror.reset(iframeEl);\n        this.replaceIdOnNode(e2.data.node, iframeEl);\n        const rootId = e2.data.node.id;\n        this.crossOriginIframeRootIdMap.set(iframeEl, rootId);\n        this.patchRootIdOnNode(e2.data.node, rootId);\n        return {\n          timestamp: e2.timestamp,\n          type: EventType.IncrementalSnapshot,\n          data: {\n            source: IncrementalSource.Mutation,\n            adds: [\n              {\n                parentId: this.mirror.getId(iframeEl),\n                nextId: null,\n                node: e2.data.node\n              }\n            ],\n            removes: [],\n            texts: [],\n            attributes: [],\n            isAttachIframe: true\n          }\n        };\n      }\n      case EventType.Meta:\n      case EventType.Load:\n      case EventType.DomContentLoaded: {\n        return false;\n      }\n      case EventType.Plugin: {\n        return e2;\n      }\n      case EventType.Custom: {\n        this.replaceIds(\n          e2.data.payload,\n          iframeEl,\n          [\"id\", \"parentId\", \"previousId\", \"nextId\"]\n        );\n        return e2;\n      }\n      case EventType.IncrementalSnapshot: {\n        switch (e2.data.source) {\n          case IncrementalSource.Mutation: {\n            e2.data.adds.forEach((n2) => {\n              this.replaceIds(n2, iframeEl, [\n                \"parentId\",\n                \"nextId\",\n                \"previousId\"\n              ]);\n              this.replaceIdOnNode(n2.node, iframeEl);\n              const rootId = this.crossOriginIframeRootIdMap.get(iframeEl);\n              rootId && this.patchRootIdOnNode(n2.node, rootId);\n            });\n            e2.data.removes.forEach((n2) => {\n              this.replaceIds(n2, iframeEl, [\"parentId\", \"id\"]);\n            });\n            e2.data.attributes.forEach((n2) => {\n              this.replaceIds(n2, iframeEl, [\"id\"]);\n            });\n            e2.data.texts.forEach((n2) => {\n              this.replaceIds(n2, iframeEl, [\"id\"]);\n            });\n            return e2;\n          }\n          case IncrementalSource.Drag:\n          case IncrementalSource.TouchMove:\n          case IncrementalSource.MouseMove: {\n            e2.data.positions.forEach((p) => {\n              this.replaceIds(p, iframeEl, [\"id\"]);\n            });\n            return e2;\n          }\n          case IncrementalSource.ViewportResize: {\n            return false;\n          }\n          case IncrementalSource.MediaInteraction:\n          case IncrementalSource.MouseInteraction:\n          case IncrementalSource.Scroll:\n          case IncrementalSource.CanvasMutation:\n          case IncrementalSource.Input: {\n            this.replaceIds(e2.data, iframeEl, [\"id\"]);\n            return e2;\n          }\n          case IncrementalSource.StyleSheetRule:\n          case IncrementalSource.StyleDeclaration: {\n            this.replaceIds(e2.data, iframeEl, [\"id\"]);\n            this.replaceStyleIds(e2.data, iframeEl, [\"styleId\"]);\n            return e2;\n          }\n          case IncrementalSource.Font: {\n            return e2;\n          }\n          case IncrementalSource.Selection: {\n            e2.data.ranges.forEach((range) => {\n              this.replaceIds(range, iframeEl, [\"start\", \"end\"]);\n            });\n            return e2;\n          }\n          case IncrementalSource.AdoptedStyleSheet: {\n            this.replaceIds(e2.data, iframeEl, [\"id\"]);\n            this.replaceStyleIds(e2.data, iframeEl, [\"styleIds\"]);\n            e2.data.styles?.forEach((style) => {\n              this.replaceStyleIds(style, iframeEl, [\"styleId\"]);\n            });\n            return e2;\n          }\n        }\n      }\n    }\n    return false;\n  }\n  replace(iframeMirror, obj, iframeEl, keys) {\n    for (const key of keys) {\n      if (!Array.isArray(obj[key]) && typeof obj[key] !== \"number\") continue;\n      if (Array.isArray(obj[key])) {\n        obj[key] = iframeMirror.getIds(\n          iframeEl,\n          obj[key]\n        );\n      } else {\n        obj[key] = iframeMirror.getId(iframeEl, obj[key]);\n      }\n    }\n    return obj;\n  }\n  replaceIds(obj, iframeEl, keys) {\n    return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\n  }\n  replaceStyleIds(obj, iframeEl, keys) {\n    return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\n  }\n  replaceIdOnNode(node, iframeEl) {\n    this.replaceIds(node, iframeEl, [\"id\", \"rootId\"]);\n    if (\"childNodes\" in node) {\n      node.childNodes.forEach((child) => {\n        this.replaceIdOnNode(child, iframeEl);\n      });\n    }\n  }\n  patchRootIdOnNode(node, rootId) {\n    if (node.type !== NodeType$2.Document && !node.rootId) node.rootId = rootId;\n    if (\"childNodes\" in node) {\n      node.childNodes.forEach((child) => {\n        this.patchRootIdOnNode(child, rootId);\n      });\n    }\n  }\n}\nclass ShadowDomManagerNoop {\n  init() {\n  }\n  addShadowRoot() {\n  }\n  observeAttachShadow() {\n  }\n  reset() {\n  }\n}\nclass ShadowDomManager {\n  constructor(options) {\n    this.shadowDoms = /* @__PURE__ */ new WeakSet();\n    this.restoreHandlers = [];\n    this.mutationCb = options.mutationCb;\n    this.scrollCb = options.scrollCb;\n    this.bypassOptions = options.bypassOptions;\n    this.mirror = options.mirror;\n    this.init();\n  }\n  init() {\n    this.reset();\n    this.patchAttachShadow(Element, document);\n  }\n  addShadowRoot(shadowRoot, doc) {\n    if (!isNativeShadowDom(shadowRoot)) return;\n    if (this.shadowDoms.has(shadowRoot)) return;\n    this.shadowDoms.add(shadowRoot);\n    this.bypassOptions.canvasManager.addShadowRoot(shadowRoot);\n    const observer = initMutationObserver(\n      {\n        ...this.bypassOptions,\n        doc,\n        mutationCb: this.mutationCb,\n        mirror: this.mirror,\n        shadowDomManager: this\n      },\n      shadowRoot\n    );\n    this.restoreHandlers.push(() => observer.disconnect());\n    this.restoreHandlers.push(\n      initScrollObserver({\n        ...this.bypassOptions,\n        scrollCb: this.scrollCb,\n        // https://gist.github.com/praveenpuglia/0832da687ed5a5d7a0907046c9ef1813\n        // scroll is not allowed to pass the boundary, so we need to listen the shadow document\n        doc: shadowRoot,\n        mirror: this.mirror\n      })\n    );\n    setTimeout$1(() => {\n      if (shadowRoot.adoptedStyleSheets && shadowRoot.adoptedStyleSheets.length > 0)\n        this.bypassOptions.stylesheetManager.adoptStyleSheets(\n          shadowRoot.adoptedStyleSheets,\n          this.mirror.getId(shadowRoot.host)\n        );\n      this.restoreHandlers.push(\n        initAdoptedStyleSheetObserver(\n          {\n            mirror: this.mirror,\n            stylesheetManager: this.bypassOptions.stylesheetManager\n          },\n          shadowRoot\n        )\n      );\n    }, 0);\n  }\n  /**\n   * Monkey patch 'attachShadow' of an IFrameElement to observe newly added shadow doms.\n   */\n  observeAttachShadow(iframeElement) {\n    const iframeDoc = getIFrameContentDocument(iframeElement);\n    const iframeWindow = getIFrameContentWindow(iframeElement);\n    if (!iframeDoc || !iframeWindow) return;\n    this.patchAttachShadow(\n      iframeWindow.Element,\n      iframeDoc\n    );\n  }\n  /**\n   * Patch 'attachShadow' to observe newly added shadow doms.\n   */\n  patchAttachShadow(element, doc) {\n    const manager = this;\n    this.restoreHandlers.push(\n      patch(\n        element.prototype,\n        \"attachShadow\",\n        function(original) {\n          return function(option) {\n            const shadowRoot = original.call(this, option);\n            if (this.shadowRoot && inDom(this))\n              manager.addShadowRoot(this.shadowRoot, doc);\n            return shadowRoot;\n          };\n        }\n      )\n    );\n  }\n  reset() {\n    this.restoreHandlers.forEach((handler) => {\n      try {\n        handler();\n      } catch (e2) {\n      }\n    });\n    this.restoreHandlers = [];\n    this.shadowDoms = /* @__PURE__ */ new WeakSet();\n    this.bypassOptions.canvasManager.resetShadowRoots();\n  }\n}\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar lookup = typeof Uint8Array === \"undefined\" ? [] : new Uint8Array(256);\nfor (var i$1 = 0; i$1 < chars.length; i$1++) {\n  lookup[chars.charCodeAt(i$1)] = i$1;\n}\nclass CanvasManagerNoop {\n  reset() {\n  }\n  freeze() {\n  }\n  unfreeze() {\n  }\n  lock() {\n  }\n  unlock() {\n  }\n  snapshot() {\n  }\n  addWindow() {\n  }\n  addShadowRoot() {\n  }\n  resetShadowRoots() {\n  }\n}\nclass StylesheetManager {\n  constructor(options) {\n    this.trackedLinkElements = /* @__PURE__ */ new WeakSet();\n    this.styleMirror = new StyleSheetMirror();\n    this.mutationCb = options.mutationCb;\n    this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\n  }\n  attachLinkElement(linkEl, childSn) {\n    if (\"_cssText\" in childSn.attributes)\n      this.mutationCb({\n        adds: [],\n        removes: [],\n        texts: [],\n        attributes: [\n          {\n            id: childSn.id,\n            attributes: childSn.attributes\n          }\n        ]\n      });\n    this.trackLinkElement(linkEl);\n  }\n  trackLinkElement(linkEl) {\n    if (this.trackedLinkElements.has(linkEl)) return;\n    this.trackedLinkElements.add(linkEl);\n    this.trackStylesheetInLinkElement(linkEl);\n  }\n  adoptStyleSheets(sheets, hostId) {\n    if (sheets.length === 0) return;\n    const adoptedStyleSheetData = {\n      id: hostId,\n      styleIds: []\n    };\n    const styles = [];\n    for (const sheet of sheets) {\n      let styleId;\n      if (!this.styleMirror.has(sheet)) {\n        styleId = this.styleMirror.add(sheet);\n        styles.push({\n          styleId,\n          rules: Array.from(sheet.rules || CSSRule, (r2, index) => ({\n            rule: stringifyRule(r2),\n            index\n          }))\n        });\n      } else styleId = this.styleMirror.getId(sheet);\n      adoptedStyleSheetData.styleIds.push(styleId);\n    }\n    if (styles.length > 0) adoptedStyleSheetData.styles = styles;\n    this.adoptedStyleSheetCb(adoptedStyleSheetData);\n  }\n  reset() {\n    this.styleMirror.reset();\n    this.trackedLinkElements = /* @__PURE__ */ new WeakSet();\n  }\n  // TODO: take snapshot on stylesheet reload by applying event listener\n  trackStylesheetInLinkElement(_linkEl) {\n  }\n}\nclass ProcessedNodeManager {\n  constructor() {\n    this.nodeMap = /* @__PURE__ */ new WeakMap();\n    this.active = false;\n  }\n  inOtherBuffer(node, thisBuffer) {\n    const buffers = this.nodeMap.get(node);\n    return buffers && Array.from(buffers).some((buffer) => buffer !== thisBuffer);\n  }\n  add(node, buffer) {\n    if (!this.active) {\n      this.active = true;\n      onRequestAnimationFrame(() => {\n        this.nodeMap = /* @__PURE__ */ new WeakMap();\n        this.active = false;\n      });\n    }\n    this.nodeMap.set(node, (this.nodeMap.get(node) || /* @__PURE__ */ new Set()).add(buffer));\n  }\n  destroy() {\n  }\n}\nlet wrappedEmit;\nlet _takeFullSnapshot;\ntry {\n  if (Array.from([1], (x) => x * 2)[0] !== 2) {\n    const cleanFrame = document.createElement(\"iframe\");\n    document.body.appendChild(cleanFrame);\n    Array.from = cleanFrame.contentWindow?.Array.from || Array.from;\n    document.body.removeChild(cleanFrame);\n  }\n} catch (err) {\n  console.debug(\"Unable to override Array.from\", err);\n}\nconst mirror = createMirror$2();\nfunction record(options = {}) {\n  const {\n    emit,\n    checkoutEveryNms,\n    checkoutEveryNth,\n    blockClass = \"rr-block\",\n    blockSelector = null,\n    unblockSelector = null,\n    ignoreClass = \"rr-ignore\",\n    ignoreSelector = null,\n    maskAllText = false,\n    maskTextClass = \"rr-mask\",\n    unmaskTextClass = null,\n    maskTextSelector = null,\n    unmaskTextSelector = null,\n    inlineStylesheet = true,\n    maskAllInputs,\n    maskInputOptions: _maskInputOptions,\n    slimDOMOptions: _slimDOMOptions,\n    maskAttributeFn,\n    maskInputFn,\n    maskTextFn,\n    maxCanvasSize = null,\n    packFn,\n    sampling = {},\n    dataURLOptions = {},\n    mousemoveWait,\n    recordDOM = true,\n    recordCanvas = false,\n    recordCrossOriginIframes = false,\n    recordAfter = options.recordAfter === \"DOMContentLoaded\" ? options.recordAfter : \"load\",\n    userTriggeredOnInput = false,\n    collectFonts = false,\n    inlineImages = false,\n    plugins,\n    keepIframeSrcFn = () => false,\n    ignoreCSSAttributes = /* @__PURE__ */ new Set([]),\n    errorHandler: errorHandler2,\n    onMutation,\n    getCanvasManager\n  } = options;\n  registerErrorHandler(errorHandler2);\n  const inEmittingFrame = recordCrossOriginIframes ? window.parent === window : true;\n  let passEmitsToParent = false;\n  if (!inEmittingFrame) {\n    try {\n      if (window.parent.document) {\n        passEmitsToParent = false;\n      }\n    } catch (e2) {\n      passEmitsToParent = true;\n    }\n  }\n  if (inEmittingFrame && !emit) {\n    throw new Error(\"emit function is required\");\n  }\n  if (!inEmittingFrame && !passEmitsToParent) {\n    return () => {\n    };\n  }\n  if (mousemoveWait !== void 0 && sampling.mousemove === void 0) {\n    sampling.mousemove = mousemoveWait;\n  }\n  mirror.reset();\n  const maskInputOptions = maskAllInputs === true ? {\n    color: true,\n    date: true,\n    \"datetime-local\": true,\n    email: true,\n    month: true,\n    number: true,\n    range: true,\n    search: true,\n    tel: true,\n    text: true,\n    time: true,\n    url: true,\n    week: true,\n    textarea: true,\n    select: true,\n    radio: true,\n    checkbox: true\n  } : _maskInputOptions !== void 0 ? _maskInputOptions : {};\n  const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === \"all\" ? {\n    script: true,\n    comment: true,\n    headFavicon: true,\n    headWhitespace: true,\n    headMetaSocial: true,\n    headMetaRobots: true,\n    headMetaHttpEquiv: true,\n    headMetaVerification: true,\n    // the following are off for slimDOMOptions === true,\n    // as they destroy some (hidden) info:\n    headMetaAuthorship: _slimDOMOptions === \"all\",\n    headMetaDescKeywords: _slimDOMOptions === \"all\"\n  } : _slimDOMOptions ? _slimDOMOptions : {};\n  polyfill$1();\n  let lastFullSnapshotEvent;\n  let incrementalSnapshotCount = 0;\n  const eventProcessor = (e2) => {\n    for (const plugin of plugins || []) {\n      if (plugin.eventProcessor) {\n        e2 = plugin.eventProcessor(e2);\n      }\n    }\n    if (packFn && // Disable packing events which will be emitted to parent frames.\n    !passEmitsToParent) {\n      e2 = packFn(e2);\n    }\n    return e2;\n  };\n  wrappedEmit = (r2, isCheckout) => {\n    const e2 = r2;\n    e2.timestamp = nowTimestamp();\n    if (mutationBuffers[0]?.isFrozen() && e2.type !== EventType.FullSnapshot && !(e2.type === EventType.IncrementalSnapshot && e2.data.source === IncrementalSource.Mutation)) {\n      mutationBuffers.forEach((buf) => buf.unfreeze());\n    }\n    if (inEmittingFrame) {\n      emit?.(eventProcessor(e2), isCheckout);\n    } else if (passEmitsToParent) {\n      const message = {\n        type: \"rrweb\",\n        event: eventProcessor(e2),\n        origin: window.location.origin,\n        isCheckout\n      };\n      window.parent.postMessage(message, \"*\");\n    }\n    if (e2.type === EventType.FullSnapshot) {\n      lastFullSnapshotEvent = e2;\n      incrementalSnapshotCount = 0;\n    } else if (e2.type === EventType.IncrementalSnapshot) {\n      if (e2.data.source === IncrementalSource.Mutation && e2.data.isAttachIframe) {\n        return;\n      }\n      incrementalSnapshotCount++;\n      const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\n      const exceedTime = checkoutEveryNms && lastFullSnapshotEvent && e2.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\n      if (exceedCount || exceedTime) {\n        takeFullSnapshot2(true);\n      }\n    }\n  };\n  const wrappedMutationEmit = (m) => {\n    wrappedEmit({\n      type: EventType.IncrementalSnapshot,\n      data: {\n        source: IncrementalSource.Mutation,\n        ...m\n      }\n    });\n  };\n  const wrappedScrollEmit = (p) => wrappedEmit({\n    type: EventType.IncrementalSnapshot,\n    data: {\n      source: IncrementalSource.Scroll,\n      ...p\n    }\n  });\n  const wrappedCanvasMutationEmit = (p) => wrappedEmit({\n    type: EventType.IncrementalSnapshot,\n    data: {\n      source: IncrementalSource.CanvasMutation,\n      ...p\n    }\n  });\n  const wrappedAdoptedStyleSheetEmit = (a2) => wrappedEmit({\n    type: EventType.IncrementalSnapshot,\n    data: {\n      source: IncrementalSource.AdoptedStyleSheet,\n      ...a2\n    }\n  });\n  const stylesheetManager = new StylesheetManager({\n    mutationCb: wrappedMutationEmit,\n    adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit\n  });\n  const iframeManager = typeof __RRWEB_EXCLUDE_IFRAME__ === \"boolean\" && __RRWEB_EXCLUDE_IFRAME__ ? new IframeManagerNoop() : new IframeManager({\n    mirror,\n    mutationCb: wrappedMutationEmit,\n    stylesheetManager,\n    recordCrossOriginIframes,\n    wrappedEmit\n  });\n  for (const plugin of plugins || []) {\n    if (plugin.getMirror)\n      plugin.getMirror({\n        nodeMirror: mirror,\n        crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\n        crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror\n      });\n  }\n  const processedNodeManager = new ProcessedNodeManager();\n  const canvasManager = _getCanvasManager(\n    getCanvasManager,\n    {\n      mirror,\n      win: window,\n      mutationCb: (p) => wrappedEmit({\n        type: EventType.IncrementalSnapshot,\n        data: {\n          source: IncrementalSource.CanvasMutation,\n          ...p\n        }\n      }),\n      recordCanvas,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      maxCanvasSize,\n      sampling: sampling[\"canvas\"],\n      dataURLOptions,\n      errorHandler: errorHandler2\n    }\n  );\n  const shadowDomManager = typeof __RRWEB_EXCLUDE_SHADOW_DOM__ === \"boolean\" && __RRWEB_EXCLUDE_SHADOW_DOM__ ? new ShadowDomManagerNoop() : new ShadowDomManager({\n    mutationCb: wrappedMutationEmit,\n    scrollCb: wrappedScrollEmit,\n    bypassOptions: {\n      onMutation,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      maskAllText,\n      maskTextClass,\n      unmaskTextClass,\n      maskTextSelector,\n      unmaskTextSelector,\n      inlineStylesheet,\n      maskInputOptions,\n      dataURLOptions,\n      maskAttributeFn,\n      maskTextFn,\n      maskInputFn,\n      recordCanvas,\n      inlineImages,\n      sampling,\n      slimDOMOptions,\n      iframeManager,\n      stylesheetManager,\n      canvasManager,\n      keepIframeSrcFn,\n      processedNodeManager\n    },\n    mirror\n  });\n  const takeFullSnapshot2 = (isCheckout = false) => {\n    if (!recordDOM) {\n      return;\n    }\n    wrappedEmit(\n      {\n        type: EventType.Meta,\n        data: {\n          href: window.location.href,\n          width: getWindowWidth(),\n          height: getWindowHeight()\n        }\n      },\n      isCheckout\n    );\n    stylesheetManager.reset();\n    shadowDomManager.init();\n    mutationBuffers.forEach((buf) => buf.lock());\n    const node = snapshot(document, {\n      mirror,\n      blockClass,\n      blockSelector,\n      unblockSelector,\n      maskAllText,\n      maskTextClass,\n      unmaskTextClass,\n      maskTextSelector,\n      unmaskTextSelector,\n      inlineStylesheet,\n      maskAllInputs: maskInputOptions,\n      maskAttributeFn,\n      maskInputFn,\n      maskTextFn,\n      slimDOM: slimDOMOptions,\n      dataURLOptions,\n      recordCanvas,\n      inlineImages,\n      onSerialize: (n2) => {\n        if (isSerializedIframe(n2, mirror)) {\n          iframeManager.addIframe(n2);\n        }\n        if (isSerializedStylesheet(n2, mirror)) {\n          stylesheetManager.trackLinkElement(n2);\n        }\n        if (hasShadowRoot(n2)) {\n          shadowDomManager.addShadowRoot(n2.shadowRoot, document);\n        }\n      },\n      onIframeLoad: (iframe, childSn) => {\n        iframeManager.attachIframe(iframe, childSn);\n        if (iframe.contentWindow) {\n          canvasManager.addWindow(iframe.contentWindow);\n        }\n        shadowDomManager.observeAttachShadow(iframe);\n      },\n      onStylesheetLoad: (linkEl, childSn) => {\n        stylesheetManager.attachLinkElement(linkEl, childSn);\n      },\n      keepIframeSrcFn\n    });\n    if (!node) {\n      return console.warn(\"Failed to snapshot the document\");\n    }\n    wrappedEmit({\n      type: EventType.FullSnapshot,\n      data: {\n        node,\n        initialOffset: getWindowScroll(window)\n      }\n    });\n    mutationBuffers.forEach((buf) => buf.unlock());\n    if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\n      stylesheetManager.adoptStyleSheets(\n        document.adoptedStyleSheets,\n        mirror.getId(document)\n      );\n  };\n  _takeFullSnapshot = takeFullSnapshot2;\n  try {\n    const handlers = [];\n    const observe = (doc) => {\n      return callbackWrapper(initObservers)(\n        {\n          onMutation,\n          mutationCb: wrappedMutationEmit,\n          mousemoveCb: (positions, source) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source,\n              positions\n            }\n          }),\n          mouseInteractionCb: (d) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.MouseInteraction,\n              ...d\n            }\n          }),\n          scrollCb: wrappedScrollEmit,\n          viewportResizeCb: (d) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.ViewportResize,\n              ...d\n            }\n          }),\n          inputCb: (v2) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.Input,\n              ...v2\n            }\n          }),\n          mediaInteractionCb: (p) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.MediaInteraction,\n              ...p\n            }\n          }),\n          styleSheetRuleCb: (r2) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.StyleSheetRule,\n              ...r2\n            }\n          }),\n          styleDeclarationCb: (r2) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.StyleDeclaration,\n              ...r2\n            }\n          }),\n          canvasMutationCb: wrappedCanvasMutationEmit,\n          fontCb: (p) => wrappedEmit({\n            type: EventType.IncrementalSnapshot,\n            data: {\n              source: IncrementalSource.Font,\n              ...p\n            }\n          }),\n          selectionCb: (p) => {\n            wrappedEmit({\n              type: EventType.IncrementalSnapshot,\n              data: {\n                source: IncrementalSource.Selection,\n                ...p\n              }\n            });\n          },\n          customElementCb: (c2) => {\n            wrappedEmit({\n              type: EventType.IncrementalSnapshot,\n              data: {\n                source: IncrementalSource.CustomElement,\n                ...c2\n              }\n            });\n          },\n          blockClass,\n          ignoreClass,\n          ignoreSelector,\n          maskAllText,\n          maskTextClass,\n          unmaskTextClass,\n          maskTextSelector,\n          unmaskTextSelector,\n          maskInputOptions,\n          inlineStylesheet,\n          sampling,\n          recordDOM,\n          recordCanvas,\n          inlineImages,\n          userTriggeredOnInput,\n          collectFonts,\n          doc,\n          maskAttributeFn,\n          maskInputFn,\n          maskTextFn,\n          keepIframeSrcFn,\n          blockSelector,\n          unblockSelector,\n          slimDOMOptions,\n          dataURLOptions,\n          mirror,\n          iframeManager,\n          stylesheetManager,\n          shadowDomManager,\n          processedNodeManager,\n          canvasManager,\n          ignoreCSSAttributes,\n          plugins: plugins?.filter((p) => p.observer)?.map((p) => ({\n            observer: p.observer,\n            options: p.options,\n            callback: (payload) => wrappedEmit({\n              type: EventType.Plugin,\n              data: {\n                plugin: p.name,\n                payload\n              }\n            })\n          })) || []\n        },\n        {}\n      );\n    };\n    iframeManager.addLoadListener((iframeEl) => {\n      try {\n        handlers.push(observe(iframeEl.contentDocument));\n      } catch (error) {\n        console.warn(error);\n      }\n    });\n    const init = () => {\n      takeFullSnapshot2();\n      handlers.push(observe(document));\n    };\n    if (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n      init();\n    } else {\n      handlers.push(\n        on(\"DOMContentLoaded\", () => {\n          wrappedEmit({\n            type: EventType.DomContentLoaded,\n            data: {}\n          });\n          if (recordAfter === \"DOMContentLoaded\") init();\n        })\n      );\n      handlers.push(\n        on(\n          \"load\",\n          () => {\n            wrappedEmit({\n              type: EventType.Load,\n              data: {}\n            });\n            if (recordAfter === \"load\") init();\n          },\n          window\n        )\n      );\n    }\n    return () => {\n      handlers.forEach((h) => h());\n      processedNodeManager.destroy();\n      _takeFullSnapshot = void 0;\n      unregisterErrorHandler();\n    };\n  } catch (error) {\n    console.warn(error);\n  }\n}\nfunction takeFullSnapshot(isCheckout) {\n  if (!_takeFullSnapshot) {\n    throw new Error(\"please take full snapshot after start recording\");\n  }\n  _takeFullSnapshot(isCheckout);\n}\nrecord.mirror = mirror;\nrecord.takeFullSnapshot = takeFullSnapshot;\nfunction _getCanvasManager(getCanvasManagerFn, options) {\n  try {\n    return getCanvasManagerFn ? getCanvasManagerFn(options) : new CanvasManagerNoop();\n  } catch {\n    console.warn(\"Unable to initialize CanvasManager\");\n    return new CanvasManagerNoop();\n  }\n}\nvar n;\n!function(t2) {\n  t2[t2.NotStarted = 0] = \"NotStarted\", t2[t2.Running = 1] = \"Running\", t2[t2.Stopped = 2] = \"Stopped\";\n}(n || (n = {}));\n\nconst ReplayEventTypeIncrementalSnapshot = 3;\nconst ReplayEventTypeCustom = 5;\n\n/**\n * Converts a timestamp to ms, if it was in s, or keeps it as ms.\n */\nfunction timestampToMs(timestamp) {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp : timestamp * 1000;\n}\n\n/**\n * Converts a timestamp to s, if it was in ms, or keeps it as s.\n */\nfunction timestampToS(timestamp) {\n  const isMs = timestamp > 9999999999;\n  return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Add a breadcrumb event to replay.\n */\nfunction addBreadcrumbEvent(replay, breadcrumb) {\n  if (breadcrumb.category === 'sentry.transaction') {\n    return;\n  }\n\n  if (['ui.click', 'ui.input'].includes(breadcrumb.category )) {\n    replay.triggerUserActivity();\n  } else {\n    replay.checkAndHandleExpiredSession();\n  }\n\n  replay.addUpdate(() => {\n    // This should never reject\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    replay.throttledAddEvent({\n      type: EventType.Custom,\n      // TODO: We were converting from ms to seconds for breadcrumbs, spans,\n      // but maybe we should just keep them as milliseconds\n      timestamp: (breadcrumb.timestamp || 0) * 1000,\n      data: {\n        tag: 'breadcrumb',\n        // normalize to max. 10 depth and 1_000 properties per object\n        payload: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.normalize)(breadcrumb, 10, 1000),\n      },\n    });\n\n    // Do not flush after console log messages\n    return breadcrumb.category === 'console';\n  });\n}\n\nconst INTERACTIVE_SELECTOR = 'button,a';\n\n/** Get the closest interactive parent element, or else return the given element. */\nfunction getClosestInteractive(element) {\n  const closestInteractive = element.closest(INTERACTIVE_SELECTOR);\n  return closestInteractive || element;\n}\n\n/**\n * For clicks, we check if the target is inside of a button or link\n * If so, we use this as the target instead\n * This is useful because if you click on the image in <button><img></button>,\n * The target will be the image, not the button, which we don't want here\n */\nfunction getClickTargetNode(event) {\n  const target = getTargetNode(event);\n\n  if (!target || !(target instanceof Element)) {\n    return target;\n  }\n\n  return getClosestInteractive(target);\n}\n\n/** Get the event target node. */\nfunction getTargetNode(event) {\n  if (isEventWithTarget(event)) {\n    return event.target ;\n  }\n\n  return event;\n}\n\nfunction isEventWithTarget(event) {\n  return typeof event === 'object' && !!event && 'target' in event;\n}\n\nlet handlers;\n\n/**\n * Register a handler to be called when `window.open()` is called.\n * Returns a cleanup function.\n */\nfunction onWindowOpen(cb) {\n  // Ensure to only register this once\n  if (!handlers) {\n    handlers = [];\n    monkeyPatchWindowOpen();\n  }\n\n  handlers.push(cb);\n\n  return () => {\n    const pos = handlers ? handlers.indexOf(cb) : -1;\n    if (pos > -1) {\n      (handlers ).splice(pos, 1);\n    }\n  };\n}\n\nfunction monkeyPatchWindowOpen() {\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.fill)(WINDOW, 'open', function (originalWindowOpen) {\n    return function (...args) {\n      if (handlers) {\n        try {\n          handlers.forEach(handler => handler());\n        } catch {\n          // ignore errors in here\n        }\n      }\n\n      return originalWindowOpen.apply(WINDOW, args);\n    };\n  });\n}\n\n/** Any IncrementalSource for rrweb that we interpret as a kind of mutation. */\nconst IncrementalMutationSources = new Set([\n  IncrementalSource.Mutation,\n  IncrementalSource.StyleSheetRule,\n  IncrementalSource.StyleDeclaration,\n  IncrementalSource.AdoptedStyleSheet,\n  IncrementalSource.CanvasMutation,\n  IncrementalSource.Selection,\n  IncrementalSource.MediaInteraction,\n]);\n\n/** Handle a click. */\nfunction handleClick(clickDetector, clickBreadcrumb, node) {\n  clickDetector.handleClick(clickBreadcrumb, node);\n}\n\n/** A click detector class that can be used to detect slow or rage clicks on elements. */\nclass ClickDetector  {\n  // protected for testing\n\n   constructor(\n    replay,\n    slowClickConfig,\n    // Just for easier testing\n    _addBreadcrumbEvent = addBreadcrumbEvent,\n  ) {\n    this._lastMutation = 0;\n    this._lastScroll = 0;\n    this._clicks = [];\n\n    // We want everything in s, but options are in ms\n    this._timeout = slowClickConfig.timeout / 1000;\n    this._threshold = slowClickConfig.threshold / 1000;\n    this._scrollTimeout = slowClickConfig.scrollTimeout / 1000;\n    this._replay = replay;\n    this._ignoreSelector = slowClickConfig.ignoreSelector;\n    this._addBreadcrumbEvent = _addBreadcrumbEvent;\n  }\n\n  /** Register click detection handlers on mutation or scroll. */\n   addListeners() {\n    const cleanupWindowOpen = onWindowOpen(() => {\n      // Treat window.open as mutation\n      this._lastMutation = nowInSeconds();\n    });\n\n    this._teardown = () => {\n      cleanupWindowOpen();\n\n      this._clicks = [];\n      this._lastMutation = 0;\n      this._lastScroll = 0;\n    };\n  }\n\n  /** Clean up listeners. */\n   removeListeners() {\n    if (this._teardown) {\n      this._teardown();\n    }\n\n    if (this._checkClickTimeout) {\n      clearTimeout(this._checkClickTimeout);\n    }\n  }\n\n  /** @inheritDoc */\n   handleClick(breadcrumb, node) {\n    if (ignoreElement(node, this._ignoreSelector) || !isClickBreadcrumb(breadcrumb)) {\n      return;\n    }\n\n    const newClick = {\n      timestamp: timestampToS(breadcrumb.timestamp),\n      clickBreadcrumb: breadcrumb,\n      // Set this to 0 so we know it originates from the click breadcrumb\n      clickCount: 0,\n      node,\n    };\n\n    // If there was a click in the last 1s on the same element, ignore it - only keep a single reference per second\n    if (\n      this._clicks.some(click => click.node === newClick.node && Math.abs(click.timestamp - newClick.timestamp) < 1)\n    ) {\n      return;\n    }\n\n    this._clicks.push(newClick);\n\n    // If this is the first new click, set a timeout to check for multi clicks\n    if (this._clicks.length === 1) {\n      this._scheduleCheckClicks();\n    }\n  }\n\n  /** @inheritDoc */\n   registerMutation(timestamp = Date.now()) {\n    this._lastMutation = timestampToS(timestamp);\n  }\n\n  /** @inheritDoc */\n   registerScroll(timestamp = Date.now()) {\n    this._lastScroll = timestampToS(timestamp);\n  }\n\n  /** @inheritDoc */\n   registerClick(element) {\n    const node = getClosestInteractive(element);\n    this._handleMultiClick(node );\n  }\n\n  /** Count multiple clicks on elements. */\n   _handleMultiClick(node) {\n    this._getClicks(node).forEach(click => {\n      click.clickCount++;\n    });\n  }\n\n  /** Get all pending clicks for a given node. */\n   _getClicks(node) {\n    return this._clicks.filter(click => click.node === node);\n  }\n\n  /** Check the clicks that happened. */\n   _checkClicks() {\n    const timedOutClicks = [];\n\n    const now = nowInSeconds();\n\n    this._clicks.forEach(click => {\n      if (!click.mutationAfter && this._lastMutation) {\n        click.mutationAfter = click.timestamp <= this._lastMutation ? this._lastMutation - click.timestamp : undefined;\n      }\n      if (!click.scrollAfter && this._lastScroll) {\n        click.scrollAfter = click.timestamp <= this._lastScroll ? this._lastScroll - click.timestamp : undefined;\n      }\n\n      // All of these are in seconds!\n      if (click.timestamp + this._timeout <= now) {\n        timedOutClicks.push(click);\n      }\n    });\n\n    // Remove \"old\" clicks\n    for (const click of timedOutClicks) {\n      const pos = this._clicks.indexOf(click);\n\n      if (pos > -1) {\n        this._generateBreadcrumbs(click);\n        this._clicks.splice(pos, 1);\n      }\n    }\n\n    // Trigger new check, unless no clicks left\n    if (this._clicks.length) {\n      this._scheduleCheckClicks();\n    }\n  }\n\n  /** Generate matching breadcrumb(s) for the click. */\n   _generateBreadcrumbs(click) {\n    const replay = this._replay;\n    const hadScroll = click.scrollAfter && click.scrollAfter <= this._scrollTimeout;\n    const hadMutation = click.mutationAfter && click.mutationAfter <= this._threshold;\n\n    const isSlowClick = !hadScroll && !hadMutation;\n    const { clickCount, clickBreadcrumb } = click;\n\n    // Slow click\n    if (isSlowClick) {\n      // If `mutationAfter` is set, it means a mutation happened after the threshold, but before the timeout\n      // If not, it means we just timed out without scroll & mutation\n      const timeAfterClickMs = Math.min(click.mutationAfter || this._timeout, this._timeout) * 1000;\n      const endReason = timeAfterClickMs < this._timeout * 1000 ? 'mutation' : 'timeout';\n\n      const breadcrumb = {\n        type: 'default',\n        message: clickBreadcrumb.message,\n        timestamp: clickBreadcrumb.timestamp,\n        category: 'ui.slowClickDetected',\n        data: {\n          ...clickBreadcrumb.data,\n          url: WINDOW.location.href,\n          route: replay.getCurrentRoute(),\n          timeAfterClickMs,\n          endReason,\n          // If clickCount === 0, it means multiClick was not correctly captured here\n          // - we still want to send 1 in this case\n          clickCount: clickCount || 1,\n        },\n      };\n\n      this._addBreadcrumbEvent(replay, breadcrumb);\n      return;\n    }\n\n    // Multi click\n    if (clickCount > 1) {\n      const breadcrumb = {\n        type: 'default',\n        message: clickBreadcrumb.message,\n        timestamp: clickBreadcrumb.timestamp,\n        category: 'ui.multiClick',\n        data: {\n          ...clickBreadcrumb.data,\n          url: WINDOW.location.href,\n          route: replay.getCurrentRoute(),\n          clickCount,\n          metric: true,\n        },\n      };\n\n      this._addBreadcrumbEvent(replay, breadcrumb);\n    }\n  }\n\n  /** Schedule to check current clicks. */\n   _scheduleCheckClicks() {\n    if (this._checkClickTimeout) {\n      clearTimeout(this._checkClickTimeout);\n    }\n\n    this._checkClickTimeout = (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.setTimeout)(() => this._checkClicks(), 1000);\n  }\n}\n\nconst SLOW_CLICK_TAGS = ['A', 'BUTTON', 'INPUT'];\n\n/** exported for tests only */\nfunction ignoreElement(node, ignoreSelector) {\n  if (!SLOW_CLICK_TAGS.includes(node.tagName)) {\n    return true;\n  }\n\n  // If <input> tag, we only want to consider input[type='submit'] & input[type='button']\n  if (node.tagName === 'INPUT' && !['submit', 'button'].includes(node.getAttribute('type') || '')) {\n    return true;\n  }\n\n  // If <a> tag, detect special variants that may not lead to an action\n  // If target !== _self, we may open the link somewhere else, which would lead to no action\n  // Also, when downloading a file, we may not leave the page, but still not trigger an action\n  if (\n    node.tagName === 'A' &&\n    (node.hasAttribute('download') || (node.hasAttribute('target') && node.getAttribute('target') !== '_self'))\n  ) {\n    return true;\n  }\n\n  if (ignoreSelector && node.matches(ignoreSelector)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction isClickBreadcrumb(breadcrumb) {\n  return !!(breadcrumb.data && typeof breadcrumb.data.nodeId === 'number' && breadcrumb.timestamp);\n}\n\n// This is good enough for us, and is easier to test/mock than `timestampInSeconds`\nfunction nowInSeconds() {\n  return Date.now() / 1000;\n}\n\n/** Update the click detector based on a recording event of rrweb. */\nfunction updateClickDetectorForRecordingEvent(clickDetector, event) {\n  try {\n    // note: We only consider incremental snapshots here\n    // This means that any full snapshot is ignored for mutation detection - the reason is that we simply cannot know if a mutation happened here.\n    // E.g. think that we are buffering, an error happens and we take a full snapshot because we switched to session mode -\n    // in this scenario, we would not know if a dead click happened because of the error, which is a key dead click scenario.\n    // Instead, by ignoring full snapshots, we have the risk that we generate a false positive\n    // (if a mutation _did_ happen but was \"swallowed\" by the full snapshot)\n    // But this should be more unlikely as we'd generally capture the incremental snapshot right away\n\n    if (!isIncrementalEvent(event)) {\n      return;\n    }\n\n    const { source } = event.data;\n    if (IncrementalMutationSources.has(source)) {\n      clickDetector.registerMutation(event.timestamp);\n    }\n\n    if (source === IncrementalSource.Scroll) {\n      clickDetector.registerScroll(event.timestamp);\n    }\n\n    if (isIncrementalMouseInteraction(event)) {\n      const { type, id } = event.data;\n      const node = record.mirror.getNode(id);\n\n      if (node instanceof HTMLElement && type === MouseInteractions.Click) {\n        clickDetector.registerClick(node);\n      }\n    }\n  } catch {\n    // ignore errors here, e.g. if accessing something that does not exist\n  }\n}\n\nfunction isIncrementalEvent(event) {\n  return event.type === ReplayEventTypeIncrementalSnapshot;\n}\n\nfunction isIncrementalMouseInteraction(\n  event,\n) {\n  return event.data.source === IncrementalSource.MouseInteraction;\n}\n\n/**\n * Create a breadcrumb for a replay.\n */\nfunction createBreadcrumb(\n  breadcrumb,\n) {\n  return {\n    timestamp: Date.now() / 1000,\n    type: 'default',\n    ...breadcrumb,\n  };\n}\n\nvar NodeType = /* @__PURE__ */ ((NodeType2) => {\n  NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n  NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n  NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n  NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n  NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n  NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n  return NodeType2;\n})(NodeType || {});\n\n// Note that these are the serialized attributes and not attributes directly on\n// the DOM Node. Attributes we are interested in:\nconst ATTRIBUTES_TO_RECORD = new Set([\n  'id',\n  'class',\n  'aria-label',\n  'role',\n  'name',\n  'alt',\n  'title',\n  'data-test-id',\n  'data-testid',\n  'disabled',\n  'aria-disabled',\n  'data-sentry-component',\n]);\n\n/**\n * Inclusion list of attributes that we want to record from the DOM element\n */\nfunction getAttributesToRecord(attributes) {\n  const obj = {};\n  if (!attributes['data-sentry-component'] && attributes['data-sentry-element']) {\n    attributes['data-sentry-component'] = attributes['data-sentry-element'];\n  }\n  for (const key in attributes) {\n    if (ATTRIBUTES_TO_RECORD.has(key)) {\n      let normalizedKey = key;\n\n      if (key === 'data-testid' || key === 'data-test-id') {\n        normalizedKey = 'testId';\n      }\n\n      obj[normalizedKey] = attributes[key];\n    }\n  }\n\n  return obj;\n}\n\nconst handleDomListener = (\n  replay,\n) => {\n  return (handlerData) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleDom(handlerData);\n\n    if (!result) {\n      return;\n    }\n\n    const isClick = handlerData.name === 'click';\n    const event = isClick ? (handlerData.event ) : undefined;\n    // Ignore clicks if ctrl/alt/meta/shift keys are held down as they alter behavior of clicks (e.g. open in new tab)\n    if (\n      isClick &&\n      replay.clickDetector &&\n      event?.target &&\n      !event.altKey &&\n      !event.metaKey &&\n      !event.ctrlKey &&\n      !event.shiftKey\n    ) {\n      handleClick(\n        replay.clickDetector,\n        result ,\n        getClickTargetNode(handlerData.event ) ,\n      );\n    }\n\n    addBreadcrumbEvent(replay, result);\n  };\n};\n\n/** Get the base DOM breadcrumb. */\nfunction getBaseDomBreadcrumb(target, message) {\n  const nodeId = record.mirror.getId(target);\n  const node = nodeId && record.mirror.getNode(nodeId);\n  const meta = node && record.mirror.getMeta(node);\n  const element = meta && isElement(meta) ? meta : null;\n\n  return {\n    message,\n    data: element\n      ? {\n          nodeId,\n          node: {\n            id: nodeId,\n            tagName: element.tagName,\n            textContent: Array.from(element.childNodes)\n              .map((node) => node.type === NodeType.Text && node.textContent)\n              .filter(Boolean) // filter out empty values\n              .map(text => (text ).trim())\n              .join(''),\n            attributes: getAttributesToRecord(element.attributes),\n          },\n        }\n      : {},\n  };\n}\n\n/**\n * An event handler to react to DOM events.\n * Exported for tests.\n */\nfunction handleDom(handlerData) {\n  const { target, message } = getDomTarget(handlerData);\n\n  return createBreadcrumb({\n    category: `ui.${handlerData.name}`,\n    ...getBaseDomBreadcrumb(target, message),\n  });\n}\n\nfunction getDomTarget(handlerData) {\n  const isClick = handlerData.name === 'click';\n\n  let message;\n  let target = null;\n\n  // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n  try {\n    target = isClick ? getClickTargetNode(handlerData.event ) : getTargetNode(handlerData.event );\n    message = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.htmlTreeAsString)(target, { maxStringLength: 200 }) || '<unknown>';\n  } catch {\n    message = '<unknown>';\n  }\n\n  return { target, message };\n}\n\nfunction isElement(node) {\n  return node.type === NodeType.Element;\n}\n\n/** Handle keyboard events & create breadcrumbs. */\nfunction handleKeyboardEvent(replay, event) {\n  if (!replay.isEnabled()) {\n    return;\n  }\n\n  // Update user activity, but do not restart recording as it can create\n  // noisy/low-value replays (e.g. user comes back from idle, hits alt-tab, new\n  // session with a single \"keydown\" breadcrumb is created)\n  replay.updateUserActivity();\n\n  const breadcrumb = getKeyboardBreadcrumb(event);\n\n  if (!breadcrumb) {\n    return;\n  }\n\n  addBreadcrumbEvent(replay, breadcrumb);\n}\n\n/** exported only for tests */\nfunction getKeyboardBreadcrumb(event) {\n  const { metaKey, shiftKey, ctrlKey, altKey, key, target } = event;\n\n  // never capture for input fields\n  if (!target || isInputElement(target ) || !key) {\n    return null;\n  }\n\n  // Note: We do not consider shift here, as that means \"uppercase\"\n  const hasModifierKey = metaKey || ctrlKey || altKey;\n  const isCharacterKey = key.length === 1; // other keys like Escape, Tab, etc have a longer length\n\n  // Do not capture breadcrumb if only a word key is pressed\n  // This could leak e.g. user input\n  if (!hasModifierKey && isCharacterKey) {\n    return null;\n  }\n\n  const message = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.htmlTreeAsString)(target, { maxStringLength: 200 }) || '<unknown>';\n  const baseBreadcrumb = getBaseDomBreadcrumb(target , message);\n\n  return createBreadcrumb({\n    category: 'ui.keyDown',\n    message,\n    data: {\n      ...baseBreadcrumb.data,\n      metaKey,\n      shiftKey,\n      ctrlKey,\n      altKey,\n      key,\n    },\n  });\n}\n\nfunction isInputElement(target) {\n  return target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n}\n\n// Map entryType -> function to normalize data for event\nconst ENTRY_TYPES\n\n = {\n  // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n  resource: createResourceEntry,\n  paint: createPaintEntry,\n  // @ts-expect-error TODO: entry type does not fit the create* functions entry type\n  navigation: createNavigationEntry,\n};\n\n/**\n * Handler creater for web vitals\n */\nfunction webVitalHandler(\n  getter,\n  replay,\n) {\n  return ({ metric }) => void replay.replayPerformanceEntries.push(getter(metric));\n}\n\n/**\n * Create replay performance entries from the browser performance entries.\n */\nfunction createPerformanceEntries(\n  entries,\n) {\n  return entries.map(createPerformanceEntry).filter(Boolean) ;\n}\n\nfunction createPerformanceEntry(entry) {\n  const entryType = ENTRY_TYPES[entry.entryType];\n  if (!entryType) {\n    return null;\n  }\n\n  return entryType(entry);\n}\n\nfunction getAbsoluteTime(time) {\n  // browserPerformanceTimeOrigin can be undefined if `performance` or\n  // `performance.now` doesn't exist, but this is already checked by this integration\n  return (((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.browserPerformanceTimeOrigin)() || WINDOW.performance.timeOrigin) + time) / 1000;\n}\n\nfunction createPaintEntry(entry) {\n  const { duration, entryType, name, startTime } = entry;\n\n  const start = getAbsoluteTime(startTime);\n  return {\n    type: entryType,\n    name,\n    start,\n    end: start + duration,\n    data: undefined,\n  };\n}\n\nfunction createNavigationEntry(entry) {\n  const {\n    entryType,\n    name,\n    decodedBodySize,\n    duration,\n    domComplete,\n    encodedBodySize,\n    domContentLoadedEventStart,\n    domContentLoadedEventEnd,\n    domInteractive,\n    loadEventStart,\n    loadEventEnd,\n    redirectCount,\n    startTime,\n    transferSize,\n    type,\n  } = entry;\n\n  // Ignore entries with no duration, they do not seem to be useful and cause dupes\n  if (duration === 0) {\n    return null;\n  }\n\n  return {\n    type: `${entryType}.${type}`,\n    start: getAbsoluteTime(startTime),\n    end: getAbsoluteTime(domComplete),\n    name,\n    data: {\n      size: transferSize,\n      decodedBodySize,\n      encodedBodySize,\n      duration,\n      domInteractive,\n      domContentLoadedEventStart,\n      domContentLoadedEventEnd,\n      loadEventStart,\n      loadEventEnd,\n      domComplete,\n      redirectCount,\n    },\n  };\n}\n\nfunction createResourceEntry(\n  entry,\n) {\n  const {\n    entryType,\n    initiatorType,\n    name,\n    responseEnd,\n    startTime,\n    decodedBodySize,\n    encodedBodySize,\n    responseStatus,\n    transferSize,\n  } = entry;\n\n  // Core SDK handles these\n  if (['fetch', 'xmlhttprequest'].includes(initiatorType)) {\n    return null;\n  }\n\n  return {\n    type: `${entryType}.${initiatorType}`,\n    start: getAbsoluteTime(startTime),\n    end: getAbsoluteTime(responseEnd),\n    name,\n    data: {\n      size: transferSize,\n      statusCode: responseStatus,\n      decodedBodySize,\n      encodedBodySize,\n    },\n  };\n}\n\n/**\n * Add a LCP event to the replay based on a LCP metric.\n */\nfunction getLargestContentfulPaint(metric) {\n  const lastEntry = metric.entries[metric.entries.length - 1] ;\n  const node = lastEntry?.element ? [lastEntry.element] : undefined;\n  return getWebVital(metric, 'largest-contentful-paint', node);\n}\n\nfunction isLayoutShift(entry) {\n  return (entry ).sources !== undefined;\n}\n\n/**\n * Add a CLS event to the replay based on a CLS metric.\n */\nfunction getCumulativeLayoutShift(metric) {\n  const layoutShifts = [];\n  const nodes = [];\n  for (const entry of metric.entries) {\n    if (isLayoutShift(entry)) {\n      const nodeIds = [];\n      for (const source of entry.sources) {\n        if (source.node) {\n          nodes.push(source.node);\n          const nodeId = record.mirror.getId(source.node);\n          if (nodeId) {\n            nodeIds.push(nodeId);\n          }\n        }\n      }\n      layoutShifts.push({ value: entry.value, nodeIds: nodeIds.length ? nodeIds : undefined });\n    }\n  }\n\n  return getWebVital(metric, 'cumulative-layout-shift', nodes, layoutShifts);\n}\n\n/**\n * Add a FID event to the replay based on a FID metric.\n */\nfunction getFirstInputDelay(metric) {\n  const lastEntry = metric.entries[metric.entries.length - 1] ;\n  const node = lastEntry?.target ? [lastEntry.target] : undefined;\n  return getWebVital(metric, 'first-input-delay', node);\n}\n\n/**\n * Add an INP event to the replay based on an INP metric.\n */\nfunction getInteractionToNextPaint(metric) {\n  const lastEntry = metric.entries[metric.entries.length - 1] ;\n  const node = lastEntry?.target ? [lastEntry.target] : undefined;\n  return getWebVital(metric, 'interaction-to-next-paint', node);\n}\n\n/**\n * Add an web vital event to the replay based on the web vital metric.\n */\nfunction getWebVital(\n  metric,\n  name,\n  nodes,\n  attributions,\n) {\n  const value = metric.value;\n  const rating = metric.rating;\n\n  const end = getAbsoluteTime(value);\n\n  return {\n    type: 'web-vital',\n    name,\n    start: end,\n    end,\n    data: {\n      value,\n      size: value,\n      rating,\n      nodeIds: nodes ? nodes.map(node => record.mirror.getId(node)) : undefined,\n      attributions,\n    },\n  };\n}\n\n/**\n * Sets up a PerformanceObserver to listen to all performance entry types.\n * Returns a callback to stop observing.\n */\nfunction setupPerformanceObserver(replay) {\n  function addPerformanceEntry(entry) {\n    // It is possible for entries to come up multiple times\n    if (!replay.performanceEntries.includes(entry)) {\n      replay.performanceEntries.push(entry);\n    }\n  }\n\n  function onEntries({ entries }) {\n    entries.forEach(addPerformanceEntry);\n  }\n\n  const clearCallbacks = [];\n\n  (['navigation', 'paint', 'resource'] ).forEach(type => {\n    clearCallbacks.push((0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.addPerformanceInstrumentationHandler)(type, onEntries));\n  });\n\n  clearCallbacks.push(\n    (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.addLcpInstrumentationHandler)(webVitalHandler(getLargestContentfulPaint, replay)),\n    (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.addClsInstrumentationHandler)(webVitalHandler(getCumulativeLayoutShift, replay)),\n    (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.addFidInstrumentationHandler)(webVitalHandler(getFirstInputDelay, replay)),\n    (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.addInpInstrumentationHandler)(webVitalHandler(getInteractionToNextPaint, replay)),\n  );\n\n  // A callback to cleanup all handlers\n  return () => {\n    clearCallbacks.forEach(clearCallback => clearCallback());\n  };\n}\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = ( false || false);\n\nconst r = `var t=Uint8Array,n=Uint16Array,r=Int32Array,e=new t([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),i=new t([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),s=new t([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a=function(t,e){for(var i=new n(31),s=0;s<31;++s)i[s]=e+=1<<t[s-1];var a=new r(i[30]);for(s=1;s<30;++s)for(var o=i[s];o<i[s+1];++o)a[o]=o-i[s]<<5|s;return{b:i,r:a}},o=a(e,2),h=o.b,f=o.r;h[28]=258,f[258]=28;for(var l=a(i,0).r,u=new n(32768),c=0;c<32768;++c){var v=(43690&c)>>1|(21845&c)<<1;v=(61680&(v=(52428&v)>>2|(13107&v)<<2))>>4|(3855&v)<<4,u[c]=((65280&v)>>8|(255&v)<<8)>>1}var d=function(t,r,e){for(var i=t.length,s=0,a=new n(r);s<i;++s)t[s]&&++a[t[s]-1];var o,h=new n(r);for(s=1;s<r;++s)h[s]=h[s-1]+a[s-1]<<1;if(e){o=new n(1<<r);var f=15-r;for(s=0;s<i;++s)if(t[s])for(var l=s<<4|t[s],c=r-t[s],v=h[t[s]-1]++<<c,d=v|(1<<c)-1;v<=d;++v)o[u[v]>>f]=l}else for(o=new n(i),s=0;s<i;++s)t[s]&&(o[s]=u[h[t[s]-1]++]>>15-t[s]);return o},p=new t(288);for(c=0;c<144;++c)p[c]=8;for(c=144;c<256;++c)p[c]=9;for(c=256;c<280;++c)p[c]=7;for(c=280;c<288;++c)p[c]=8;var g=new t(32);for(c=0;c<32;++c)g[c]=5;var w=d(p,9,0),y=d(g,5,0),m=function(t){return(t+7)/8|0},b=function(n,r,e){return(null==e||e>n.length)&&(e=n.length),new t(n.subarray(r,e))},M=[\"unexpected EOF\",\"invalid block type\",\"invalid length/literal\",\"invalid distance\",\"stream finished\",\"no stream handler\",,\"no callback\",\"invalid UTF-8 data\",\"extra field too long\",\"date not in range 1980-2099\",\"filename too long\",\"stream finishing\",\"invalid zip data\"],E=function(t,n,r){var e=new Error(n||M[t]);if(e.code=t,Error.captureStackTrace&&Error.captureStackTrace(e,E),!r)throw e;return e},z=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8},_=function(t,n,r){r<<=7&n;var e=n/8|0;t[e]|=r,t[e+1]|=r>>8,t[e+2]|=r>>16},x=function(r,e){for(var i=[],s=0;s<r.length;++s)r[s]&&i.push({s:s,f:r[s]});var a=i.length,o=i.slice();if(!a)return{t:F,l:0};if(1==a){var h=new t(i[0].s+1);return h[i[0].s]=1,{t:h,l:1}}i.sort(function(t,n){return t.f-n.f}),i.push({s:-1,f:25001});var f=i[0],l=i[1],u=0,c=1,v=2;for(i[0]={s:-1,f:f.f+l.f,l:f,r:l};c!=a-1;)f=i[i[u].f<i[v].f?u++:v++],l=i[u!=c&&i[u].f<i[v].f?u++:v++],i[c++]={s:-1,f:f.f+l.f,l:f,r:l};var d=o[0].s;for(s=1;s<a;++s)o[s].s>d&&(d=o[s].s);var p=new n(d+1),g=A(i[c-1],p,0);if(g>e){s=0;var w=0,y=g-e,m=1<<y;for(o.sort(function(t,n){return p[n.s]-p[t.s]||t.f-n.f});s<a;++s){var b=o[s].s;if(!(p[b]>e))break;w+=m-(1<<g-p[b]),p[b]=e}for(w>>=y;w>0;){var M=o[s].s;p[M]<e?w-=1<<e-p[M]++-1:++s}for(;s>=0&&w;--s){var E=o[s].s;p[E]==e&&(--p[E],++w)}g=e}return{t:new t(p),l:g}},A=function(t,n,r){return-1==t.s?Math.max(A(t.l,n,r+1),A(t.r,n,r+1)):n[t.s]=r},D=function(t){for(var r=t.length;r&&!t[--r];);for(var e=new n(++r),i=0,s=t[0],a=1,o=function(t){e[i++]=t},h=1;h<=r;++h)if(t[h]==s&&h!=r)++a;else{if(!s&&a>2){for(;a>138;a-=138)o(32754);a>2&&(o(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(o(s),--a;a>6;a-=6)o(8304);a>2&&(o(a-3<<5|8208),a=0)}for(;a--;)o(s);a=1,s=t[h]}return{c:e.subarray(0,i),n:r}},T=function(t,n){for(var r=0,e=0;e<n.length;++e)r+=t[e]*n[e];return r},k=function(t,n,r){var e=r.length,i=m(n+2);t[i]=255&e,t[i+1]=e>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var s=0;s<e;++s)t[i+s+4]=r[s];return 8*(i+4+e)},U=function(t,r,a,o,h,f,l,u,c,v,m){z(r,m++,a),++h[256];for(var b=x(h,15),M=b.t,E=b.l,A=x(f,15),U=A.t,C=A.l,F=D(M),I=F.c,S=F.n,L=D(U),O=L.c,j=L.n,q=new n(19),B=0;B<I.length;++B)++q[31&I[B]];for(B=0;B<O.length;++B)++q[31&O[B]];for(var G=x(q,7),H=G.t,J=G.l,K=19;K>4&&!H[s[K-1]];--K);var N,P,Q,R,V=v+5<<3,W=T(h,p)+T(f,g)+l,X=T(h,M)+T(f,U)+l+14+3*K+T(q,H)+2*q[16]+3*q[17]+7*q[18];if(c>=0&&V<=W&&V<=X)return k(r,m,t.subarray(c,c+v));if(z(r,m,1+(X<W)),m+=2,X<W){N=d(M,E,0),P=M,Q=d(U,C,0),R=U;var Y=d(H,J,0);z(r,m,S-257),z(r,m+5,j-1),z(r,m+10,K-4),m+=14;for(B=0;B<K;++B)z(r,m+3*B,H[s[B]]);m+=3*K;for(var Z=[I,O],$=0;$<2;++$){var tt=Z[$];for(B=0;B<tt.length;++B){var nt=31&tt[B];z(r,m,Y[nt]),m+=H[nt],nt>15&&(z(r,m,tt[B]>>5&127),m+=tt[B]>>12)}}}else N=w,P=p,Q=y,R=g;for(B=0;B<u;++B){var rt=o[B];if(rt>255){_(r,m,N[(nt=rt>>18&31)+257]),m+=P[nt+257],nt>7&&(z(r,m,rt>>23&31),m+=e[nt]);var et=31&rt;_(r,m,Q[et]),m+=R[et],et>3&&(_(r,m,rt>>5&8191),m+=i[et])}else _(r,m,N[rt]),m+=P[rt]}return _(r,m,N[256]),m+P[256]},C=new r([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),F=new t(0),I=function(){for(var t=new Int32Array(256),n=0;n<256;++n){for(var r=n,e=9;--e;)r=(1&r&&-306674912)^r>>>1;t[n]=r}return t}(),S=function(){var t=1,n=0;return{p:function(r){for(var e=t,i=n,s=0|r.length,a=0;a!=s;){for(var o=Math.min(a+2655,s);a<o;++a)i+=e+=r[a];e=(65535&e)+15*(e>>16),i=(65535&i)+15*(i>>16)}t=e,n=i},d:function(){return(255&(t%=65521))<<24|(65280&t)<<8|(255&(n%=65521))<<8|n>>8}}},L=function(s,a,o,h,u){if(!u&&(u={l:1},a.dictionary)){var c=a.dictionary.subarray(-32768),v=new t(c.length+s.length);v.set(c),v.set(s,c.length),s=v,u.w=c.length}return function(s,a,o,h,u,c){var v=c.z||s.length,d=new t(h+v+5*(1+Math.ceil(v/7e3))+u),p=d.subarray(h,d.length-u),g=c.l,w=7&(c.r||0);if(a){w&&(p[0]=c.r>>3);for(var y=C[a-1],M=y>>13,E=8191&y,z=(1<<o)-1,_=c.p||new n(32768),x=c.h||new n(z+1),A=Math.ceil(o/3),D=2*A,T=function(t){return(s[t]^s[t+1]<<A^s[t+2]<<D)&z},F=new r(25e3),I=new n(288),S=new n(32),L=0,O=0,j=c.i||0,q=0,B=c.w||0,G=0;j+2<v;++j){var H=T(j),J=32767&j,K=x[H];if(_[J]=K,x[H]=J,B<=j){var N=v-j;if((L>7e3||q>24576)&&(N>423||!g)){w=U(s,p,0,F,I,S,O,q,G,j-G,w),q=L=O=0,G=j;for(var P=0;P<286;++P)I[P]=0;for(P=0;P<30;++P)S[P]=0}var Q=2,R=0,V=E,W=J-K&32767;if(N>2&&H==T(j-W))for(var X=Math.min(M,N)-1,Y=Math.min(32767,j),Z=Math.min(258,N);W<=Y&&--V&&J!=K;){if(s[j+Q]==s[j+Q-W]){for(var $=0;$<Z&&s[j+$]==s[j+$-W];++$);if($>Q){if(Q=$,R=W,$>X)break;var tt=Math.min(W,$-2),nt=0;for(P=0;P<tt;++P){var rt=j-W+P&32767,et=rt-_[rt]&32767;et>nt&&(nt=et,K=rt)}}}W+=(J=K)-(K=_[J])&32767}if(R){F[q++]=268435456|f[Q]<<18|l[R];var it=31&f[Q],st=31&l[R];O+=e[it]+i[st],++I[257+it],++S[st],B=j+Q,++L}else F[q++]=s[j],++I[s[j]]}}for(j=Math.max(j,B);j<v;++j)F[q++]=s[j],++I[s[j]];w=U(s,p,g,F,I,S,O,q,G,j-G,w),g||(c.r=7&w|p[w/8|0]<<3,w-=7,c.h=x,c.p=_,c.i=j,c.w=B)}else{for(j=c.w||0;j<v+g;j+=65535){var at=j+65535;at>=v&&(p[w/8|0]=g,at=v),w=k(p,w+1,s.subarray(j,at))}c.i=v}return b(d,0,h+m(w)+u)}(s,null==a.level?6:a.level,null==a.mem?u.l?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(s.length)))):20:12+a.mem,o,h,u)},O=function(t,n,r){for(;r;++n)t[n]=r,r>>>=8},j=function(){function n(n,r){if(\"function\"==typeof n&&(r=n,n={}),this.ondata=r,this.o=n||{},this.s={l:0,i:32768,w:32768,z:32768},this.b=new t(98304),this.o.dictionary){var e=this.o.dictionary.subarray(-32768);this.b.set(e,32768-e.length),this.s.i=32768-e.length}}return n.prototype.p=function(t,n){this.ondata(L(t,this.o,0,0,this.s),n)},n.prototype.push=function(n,r){this.ondata||E(5),this.s.l&&E(4);var e=n.length+this.s.z;if(e>this.b.length){if(e>2*this.b.length-32768){var i=new t(-32768&e);i.set(this.b.subarray(0,this.s.z)),this.b=i}var s=this.b.length-this.s.z;this.b.set(n.subarray(0,s),this.s.z),this.s.z=this.b.length,this.p(this.b,!1),this.b.set(this.b.subarray(-32768)),this.b.set(n.subarray(s),32768),this.s.z=n.length-s+32768,this.s.i=32766,this.s.w=32768}else this.b.set(n,this.s.z),this.s.z+=n.length;this.s.l=1&r,(this.s.z>this.s.w+8191||r)&&(this.p(this.b,r||!1),this.s.w=this.s.i,this.s.i-=2)},n.prototype.flush=function(){this.ondata||E(5),this.s.l&&E(4),this.p(this.b,!1),this.s.w=this.s.i,this.s.i-=2},n}();function q(t,n){n||(n={});var r=function(){var t=-1;return{p:function(n){for(var r=t,e=0;e<n.length;++e)r=I[255&r^n[e]]^r>>>8;t=r},d:function(){return~t}}}(),e=t.length;r.p(t);var i,s=L(t,n,10+((i=n).filename?i.filename.length+1:0),8),a=s.length;return function(t,n){var r=n.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=n.level<2?4:9==n.level?2:0,t[9]=3,0!=n.mtime&&O(t,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),r){t[3]=8;for(var e=0;e<=r.length;++e)t[e+10]=r.charCodeAt(e)}}(s,n),O(s,a-8,r.d()),O(s,a-4,e),s}var B=function(){function t(t,n){this.c=S(),this.v=1,j.call(this,t,n)}return t.prototype.push=function(t,n){this.c.p(t),j.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){var r=L(t,this.o,this.v&&(this.o.dictionary?6:2),n&&4,this.s);this.v&&(function(t,n){var r=n.level,e=0==r?0:r<6?1:9==r?3:2;if(t[0]=120,t[1]=e<<6|(n.dictionary&&32),t[1]|=31-(t[0]<<8|t[1])%31,n.dictionary){var i=S();i.p(n.dictionary),O(t,2,i.d())}}(r,this.o),this.v=0),n&&O(r,r.length-4,this.c.d()),this.ondata(r,n)},t.prototype.flush=function(){j.prototype.flush.call(this)},t}(),G=\"undefined\"!=typeof TextEncoder&&new TextEncoder,H=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{H.decode(F,{stream:!0})}catch(t){}var J=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||E(5),this.d&&E(4),this.ondata(K(t),this.d=n||!1)},t}();function K(n,r){if(G)return G.encode(n);for(var e=n.length,i=new t(n.length+(n.length>>1)),s=0,a=function(t){i[s++]=t},o=0;o<e;++o){if(s+5>i.length){var h=new t(s+8+(e-o<<1));h.set(i),i=h}var f=n.charCodeAt(o);f<128||r?a(f):f<2048?(a(192|f>>6),a(128|63&f)):f>55295&&f<57344?(a(240|(f=65536+(1047552&f)|1023&n.charCodeAt(++o))>>18),a(128|f>>12&63),a(128|f>>6&63),a(128|63&f)):(a(224|f>>12),a(128|f>>6&63),a(128|63&f))}return b(i,0,s)}const N=new class{constructor(){this._init()}clear(){this._init()}addEvent(t){if(!t)throw new Error(\"Adding invalid event\");const n=this._hasEvents?\",\":\"\";this.stream.push(n+t),this._hasEvents=!0}finish(){this.stream.push(\"]\",!0);const t=function(t){let n=0;for(const r of t)n+=r.length;const r=new Uint8Array(n);for(let n=0,e=0,i=t.length;n<i;n++){const i=t[n];r.set(i,e),e+=i.length}return r}(this._deflatedData);return this._init(),t}_init(){this._hasEvents=!1,this._deflatedData=[],this.deflate=new B,this.deflate.ondata=(t,n)=>{this._deflatedData.push(t)},this.stream=new J((t,n)=>{this.deflate.push(t,n)}),this.stream.push(\"[\")}},P={clear:()=>{N.clear()},addEvent:t=>N.addEvent(t),finish:()=>N.finish(),compress:t=>function(t){return q(K(t))}(t)};addEventListener(\"message\",function(t){const n=t.data.method,r=t.data.id,e=t.data.arg;if(n in P&&\"function\"==typeof P[n])try{const t=P[n](e);postMessage({id:r,method:n,success:!0,response:t})}catch(t){postMessage({id:r,method:n,success:!1,response:t.message}),console.error(t)}}),postMessage({id:void 0,method:\"init\",success:!0,response:void 0});`;\n\nfunction e(){const e=new Blob([r]);return URL.createObjectURL(e)}\n\nconst CONSOLE_LEVELS = ['log', 'warn', 'error'] ;\nconst PREFIX = '[Replay] ';\n\nfunction _addBreadcrumb(message, level = 'info') {\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addBreadcrumb)(\n    {\n      category: 'console',\n      data: {\n        logger: 'replay',\n      },\n      level,\n      message: `${PREFIX}${message}`,\n    },\n    { level },\n  );\n}\n\nfunction makeReplayDebugLogger() {\n  let _capture = false;\n  let _trace = false;\n\n  const _debug = {\n    exception: () => undefined,\n    infoTick: () => undefined,\n    setConfig: (opts) => {\n      _capture = !!opts.captureExceptions;\n      _trace = !!opts.traceInternals;\n    },\n  };\n\n  if (DEBUG_BUILD) {\n    CONSOLE_LEVELS.forEach(name => {\n      _debug[name] = (...args) => {\n        _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug[name](PREFIX, ...args);\n        if (_trace) {\n          _addBreadcrumb(args.join(''), (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.severityLevelFromString)(name));\n        }\n      };\n    });\n\n    _debug.exception = (error, ...message) => {\n      if (message.length && _debug.error) {\n        _debug.error(...message);\n      }\n\n      _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.error(PREFIX, error);\n\n      if (_capture) {\n        (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.captureException)(error);\n      } else if (_trace) {\n        // No need for a breadcrumb if `_capture` is enabled since it should be\n        // captured as an exception\n        _addBreadcrumb(error, 'error');\n      }\n    };\n\n    _debug.infoTick = (...args) => {\n      _sentry_core__WEBPACK_IMPORTED_MODULE_0__.debug.log(PREFIX, ...args);\n      if (_trace) {\n        // Wait a tick here to avoid race conditions for some initial logs\n        // which may be added before replay is initialized\n        setTimeout(() => _addBreadcrumb(args[0]), 0);\n      }\n    };\n  } else {\n    CONSOLE_LEVELS.forEach(name => {\n      _debug[name] = () => undefined;\n    });\n  }\n\n  return _debug ;\n}\n\nconst debug = makeReplayDebugLogger();\n\n/** This error indicates that the event buffer size exceeded the limit.. */\nclass EventBufferSizeExceededError extends Error {\n   constructor() {\n    super(`Event buffer exceeded maximum size of ${REPLAY_MAX_EVENT_BUFFER_SIZE}.`);\n  }\n}\n\n/**\n * A basic event buffer that does not do any compression.\n * Used as fallback if the compression worker cannot be loaded or is disabled.\n */\nclass EventBufferArray  {\n  /** All the events that are buffered to be sent. */\n\n  /** @inheritdoc */\n\n  /** @inheritdoc */\n\n   constructor() {\n    this.events = [];\n    this._totalSize = 0;\n    this.hasCheckout = false;\n    this.waitForCheckout = false;\n  }\n\n  /** @inheritdoc */\n   get hasEvents() {\n    return this.events.length > 0;\n  }\n\n  /** @inheritdoc */\n   get type() {\n    return 'sync';\n  }\n\n  /** @inheritdoc */\n   destroy() {\n    this.events = [];\n  }\n\n  /** @inheritdoc */\n   async addEvent(event) {\n    const eventSize = JSON.stringify(event).length;\n    this._totalSize += eventSize;\n    if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n      throw new EventBufferSizeExceededError();\n    }\n\n    this.events.push(event);\n  }\n\n  /** @inheritdoc */\n   finish() {\n    return new Promise(resolve => {\n      // Make a copy of the events array reference and immediately clear the\n      // events member so that we do not lose new events while uploading\n      // attachment.\n      const eventsRet = this.events;\n      this.clear();\n      resolve(JSON.stringify(eventsRet));\n    });\n  }\n\n  /** @inheritdoc */\n   clear() {\n    this.events = [];\n    this._totalSize = 0;\n    this.hasCheckout = false;\n  }\n\n  /** @inheritdoc */\n   getEarliestTimestamp() {\n    const timestamp = this.events.map(event => event.timestamp).sort()[0];\n\n    if (!timestamp) {\n      return null;\n    }\n\n    return timestampToMs(timestamp);\n  }\n}\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nclass WorkerHandler {\n\n   constructor(worker) {\n    this._worker = worker;\n    this._id = 0;\n  }\n\n  /**\n   * Ensure the worker is ready (or not).\n   * This will either resolve when the worker is ready, or reject if an error occurred.\n   */\n   ensureReady() {\n    // Ensure we only check once\n    if (this._ensureReadyPromise) {\n      return this._ensureReadyPromise;\n    }\n\n    this._ensureReadyPromise = new Promise((resolve, reject) => {\n      this._worker.addEventListener(\n        'message',\n        ({ data }) => {\n          if ((data ).success) {\n            resolve();\n          } else {\n            reject();\n          }\n        },\n        { once: true },\n      );\n\n      this._worker.addEventListener(\n        'error',\n        error => {\n          reject(error);\n        },\n        { once: true },\n      );\n    });\n\n    return this._ensureReadyPromise;\n  }\n\n  /**\n   * Destroy the worker.\n   */\n   destroy() {\n    DEBUG_BUILD && debug.log('Destroying compression worker');\n    this._worker.terminate();\n  }\n\n  /**\n   * Post message to worker and wait for response before resolving promise.\n   */\n   postMessage(method, arg) {\n    const id = this._getAndIncrementId();\n\n    return new Promise((resolve, reject) => {\n      const listener = ({ data }) => {\n        const response = data ;\n        if (response.method !== method) {\n          return;\n        }\n\n        // There can be multiple listeners for a single method, the id ensures\n        // that the response matches the caller.\n        if (response.id !== id) {\n          return;\n        }\n\n        // At this point, we'll always want to remove listener regardless of result status\n        this._worker.removeEventListener('message', listener);\n\n        if (!response.success) {\n          // TODO: Do some error handling, not sure what\n          DEBUG_BUILD && debug.error('Error in compression worker: ', response.response);\n\n          reject(new Error('Error in compression worker'));\n          return;\n        }\n\n        resolve(response.response );\n      };\n\n      // Note: we can't use `once` option because it's possible it needs to\n      // listen to multiple messages\n      this._worker.addEventListener('message', listener);\n      this._worker.postMessage({ id, method, arg });\n    });\n  }\n\n  /** Get the current ID and increment it for the next call. */\n   _getAndIncrementId() {\n    return this._id++;\n  }\n}\n\n/**\n * Event buffer that uses a web worker to compress events.\n * Exported only for testing.\n */\nclass EventBufferCompressionWorker  {\n  /** @inheritdoc */\n\n  /** @inheritdoc */\n\n   constructor(worker) {\n    this._worker = new WorkerHandler(worker);\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n    this.hasCheckout = false;\n    this.waitForCheckout = false;\n  }\n\n  /** @inheritdoc */\n   get hasEvents() {\n    return !!this._earliestTimestamp;\n  }\n\n  /** @inheritdoc */\n   get type() {\n    return 'worker';\n  }\n\n  /**\n   * Ensure the worker is ready (or not).\n   * This will either resolve when the worker is ready, or reject if an error occurred.\n   */\n   ensureReady() {\n    return this._worker.ensureReady();\n  }\n\n  /**\n   * Destroy the event buffer.\n   */\n   destroy() {\n    this._worker.destroy();\n  }\n\n  /**\n   * Add an event to the event buffer.\n   *\n   * Returns true if event was successfully received and processed by worker.\n   */\n   addEvent(event) {\n    const timestamp = timestampToMs(event.timestamp);\n    if (!this._earliestTimestamp || timestamp < this._earliestTimestamp) {\n      this._earliestTimestamp = timestamp;\n    }\n\n    const data = JSON.stringify(event);\n    this._totalSize += data.length;\n\n    if (this._totalSize > REPLAY_MAX_EVENT_BUFFER_SIZE) {\n      return Promise.reject(new EventBufferSizeExceededError());\n    }\n\n    return this._sendEventToWorker(data);\n  }\n\n  /**\n   * Finish the event buffer and return the compressed data.\n   */\n   finish() {\n    return this._finishRequest();\n  }\n\n  /** @inheritdoc */\n   clear() {\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n    this.hasCheckout = false;\n\n    // We do not wait on this, as we assume the order of messages is consistent for the worker\n    this._worker.postMessage('clear').then(null, e => {\n      DEBUG_BUILD && debug.exception(e, 'Sending \"clear\" message to worker failed', e);\n    });\n  }\n\n  /** @inheritdoc */\n   getEarliestTimestamp() {\n    return this._earliestTimestamp;\n  }\n\n  /**\n   * Send the event to the worker.\n   */\n   _sendEventToWorker(data) {\n    return this._worker.postMessage('addEvent', data);\n  }\n\n  /**\n   * Finish the request and return the compressed data from the worker.\n   */\n   async _finishRequest() {\n    const response = await this._worker.postMessage('finish');\n\n    this._earliestTimestamp = null;\n    this._totalSize = 0;\n\n    return response;\n  }\n}\n\n/**\n * This proxy will try to use the compression worker, and fall back to use the simple buffer if an error occurs there.\n * This can happen e.g. if the worker cannot be loaded.\n * Exported only for testing.\n */\nclass EventBufferProxy  {\n\n   constructor(worker) {\n    this._fallback = new EventBufferArray();\n    this._compression = new EventBufferCompressionWorker(worker);\n    this._used = this._fallback;\n\n    this._ensureWorkerIsLoadedPromise = this._ensureWorkerIsLoaded();\n  }\n\n  /** @inheritdoc */\n   get waitForCheckout() {\n    return this._used.waitForCheckout;\n  }\n\n  /** @inheritdoc */\n   get type() {\n    return this._used.type;\n  }\n\n  /** @inheritDoc */\n   get hasEvents() {\n    return this._used.hasEvents;\n  }\n\n  /** @inheritdoc */\n   get hasCheckout() {\n    return this._used.hasCheckout;\n  }\n  /** @inheritdoc */\n   set hasCheckout(value) {\n    this._used.hasCheckout = value;\n  }\n\n  /** @inheritdoc */\n  // eslint-disable-next-line @typescript-eslint/adjacent-overload-signatures\n   set waitForCheckout(value) {\n    this._used.waitForCheckout = value;\n  }\n\n  /** @inheritDoc */\n   destroy() {\n    this._fallback.destroy();\n    this._compression.destroy();\n  }\n\n  /** @inheritdoc */\n   clear() {\n    return this._used.clear();\n  }\n\n  /** @inheritdoc */\n   getEarliestTimestamp() {\n    return this._used.getEarliestTimestamp();\n  }\n\n  /**\n   * Add an event to the event buffer.\n   *\n   * Returns true if event was successfully added.\n   */\n   addEvent(event) {\n    return this._used.addEvent(event);\n  }\n\n  /** @inheritDoc */\n   async finish() {\n    // Ensure the worker is loaded, so the sent event is compressed\n    await this.ensureWorkerIsLoaded();\n\n    return this._used.finish();\n  }\n\n  /** Ensure the worker has loaded. */\n   ensureWorkerIsLoaded() {\n    return this._ensureWorkerIsLoadedPromise;\n  }\n\n  /** Actually check if the worker has been loaded. */\n   async _ensureWorkerIsLoaded() {\n    try {\n      await this._compression.ensureReady();\n    } catch (error) {\n      // If the worker fails to load, we fall back to the simple buffer.\n      // Nothing more to do from our side here\n      DEBUG_BUILD && debug.exception(error, 'Failed to load the compression worker, falling back to simple buffer');\n      return;\n    }\n\n    // Now we need to switch over the array buffer to the compression worker\n    await this._switchToCompressionWorker();\n  }\n\n  /** Switch the used buffer to the compression worker. */\n   async _switchToCompressionWorker() {\n    const { events, hasCheckout, waitForCheckout } = this._fallback;\n\n    const addEventPromises = [];\n    for (const event of events) {\n      addEventPromises.push(this._compression.addEvent(event));\n    }\n\n    this._compression.hasCheckout = hasCheckout;\n    this._compression.waitForCheckout = waitForCheckout;\n\n    // We switch over to the new buffer immediately - any further events will be added\n    // after the previously buffered ones\n    this._used = this._compression;\n\n    // Wait for original events to be re-added before resolving\n    try {\n      await Promise.all(addEventPromises);\n\n      // Can now clear fallback buffer as it's no longer necessary\n      this._fallback.clear();\n    } catch (error) {\n      DEBUG_BUILD && debug.exception(error, 'Failed to add events when switching buffers.');\n    }\n  }\n}\n\n/**\n * Create an event buffer for replays.\n */\nfunction createEventBuffer({\n  useCompression,\n  workerUrl: customWorkerUrl,\n}) {\n  if (\n    useCompression &&\n    // eslint-disable-next-line no-restricted-globals\n    window.Worker\n  ) {\n    const worker = _loadWorker(customWorkerUrl);\n\n    if (worker) {\n      return worker;\n    }\n  }\n\n  DEBUG_BUILD && debug.log('Using simple buffer');\n  return new EventBufferArray();\n}\n\nfunction _loadWorker(customWorkerUrl) {\n  try {\n    const workerUrl = customWorkerUrl || _getWorkerUrl();\n\n    if (!workerUrl) {\n      return;\n    }\n\n    DEBUG_BUILD && debug.log(`Using compression worker${customWorkerUrl ? ` from ${customWorkerUrl}` : ''}`);\n    const worker = new Worker(workerUrl);\n    return new EventBufferProxy(worker);\n  } catch (error) {\n    DEBUG_BUILD && debug.exception(error, 'Failed to create compression worker');\n    // Fall back to use simple event buffer array\n  }\n}\n\nfunction _getWorkerUrl() {\n  if (typeof __SENTRY_EXCLUDE_REPLAY_WORKER__ === 'undefined' || !__SENTRY_EXCLUDE_REPLAY_WORKER__) {\n    return e();\n  }\n\n  return '';\n}\n\n/** If sessionStorage is available. */\nfunction hasSessionStorage() {\n  try {\n    // This can throw, e.g. when being accessed in a sandboxed iframe\n    return 'sessionStorage' in WINDOW && !!WINDOW.sessionStorage;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Removes the session from Session Storage and unsets session in replay instance\n */\nfunction clearSession(replay) {\n  deleteSession();\n  replay.session = undefined;\n}\n\n/**\n * Deletes a session from storage\n */\nfunction deleteSession() {\n  if (!hasSessionStorage()) {\n    return;\n  }\n\n  try {\n    WINDOW.sessionStorage.removeItem(REPLAY_SESSION_KEY);\n  } catch {\n    // Ignore potential SecurityError exceptions\n  }\n}\n\n/**\n * Given a sample rate, returns true if replay should be sampled.\n *\n * 1.0 = 100% sampling\n * 0.0 = 0% sampling\n */\nfunction isSampled(sampleRate) {\n  if (sampleRate === undefined) {\n    return false;\n  }\n\n  // Math.random() returns a number in range of 0 to 1 (inclusive of 0, but not 1)\n  return Math.random() < sampleRate;\n}\n\n/**\n * Save a session to session storage.\n */\nfunction saveSession(session) {\n  if (!hasSessionStorage()) {\n    return;\n  }\n\n  try {\n    WINDOW.sessionStorage.setItem(REPLAY_SESSION_KEY, JSON.stringify(session));\n  } catch {\n    // Ignore potential SecurityError exceptions\n  }\n}\n\n/**\n * Get a session with defaults & applied sampling.\n */\nfunction makeSession(session) {\n  const now = Date.now();\n  const id = session.id || (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.uuid4)();\n  // Note that this means we cannot set a started/lastActivity of `0`, but this should not be relevant outside of tests.\n  const started = session.started || now;\n  const lastActivity = session.lastActivity || now;\n  const segmentId = session.segmentId || 0;\n  const sampled = session.sampled;\n  const previousSessionId = session.previousSessionId;\n\n  return {\n    id,\n    started,\n    lastActivity,\n    segmentId,\n    sampled,\n    previousSessionId,\n  };\n}\n\n/**\n * Get the sampled status for a session based on sample rates & current sampled status.\n */\nfunction getSessionSampleType(sessionSampleRate, allowBuffering) {\n  return isSampled(sessionSampleRate) ? 'session' : allowBuffering ? 'buffer' : false;\n}\n\n/**\n * Create a new session, which in its current implementation is a Sentry event\n * that all replays will be saved to as attachments. Currently, we only expect\n * one of these Sentry events per \"replay session\".\n */\nfunction createSession(\n  { sessionSampleRate, allowBuffering, stickySession = false },\n  { previousSessionId } = {},\n) {\n  const sampled = getSessionSampleType(sessionSampleRate, allowBuffering);\n  const session = makeSession({\n    sampled,\n    previousSessionId,\n  });\n\n  if (stickySession) {\n    saveSession(session);\n  }\n\n  return session;\n}\n\n/**\n * Fetches a session from storage\n */\nfunction fetchSession() {\n  if (!hasSessionStorage()) {\n    return null;\n  }\n\n  try {\n    // This can throw if cookies are disabled\n    const sessionStringFromStorage = WINDOW.sessionStorage.getItem(REPLAY_SESSION_KEY);\n\n    if (!sessionStringFromStorage) {\n      return null;\n    }\n\n    const sessionObj = JSON.parse(sessionStringFromStorage) ;\n\n    DEBUG_BUILD && debug.infoTick('Loading existing session');\n\n    return makeSession(sessionObj);\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Given an initial timestamp and an expiry duration, checks to see if current\n * time should be considered as expired.\n */\nfunction isExpired(\n  initialTime,\n  expiry,\n  targetTime = +new Date(),\n) {\n  // Always expired if < 0\n  if (initialTime === null || expiry === undefined || expiry < 0) {\n    return true;\n  }\n\n  // Never expires if == 0\n  if (expiry === 0) {\n    return false;\n  }\n\n  return initialTime + expiry <= targetTime;\n}\n\n/**\n * Checks to see if session is expired\n */\nfunction isSessionExpired(\n  session,\n  {\n    maxReplayDuration,\n    sessionIdleExpire,\n    targetTime = Date.now(),\n  },\n) {\n  return (\n    // First, check that maximum session length has not been exceeded\n    isExpired(session.started, maxReplayDuration, targetTime) ||\n    // check that the idle timeout has not been exceeded (i.e. user has\n    // performed an action within the last `sessionIdleExpire` ms)\n    isExpired(session.lastActivity, sessionIdleExpire, targetTime)\n  );\n}\n\n/** If the session should be refreshed or not. */\nfunction shouldRefreshSession(\n  session,\n  { sessionIdleExpire, maxReplayDuration },\n) {\n  // If not expired, all good, just keep the session\n  if (!isSessionExpired(session, { sessionIdleExpire, maxReplayDuration })) {\n    return false;\n  }\n\n  // If we are buffering & haven't ever flushed yet, always continue\n  if (session.sampled === 'buffer' && session.segmentId === 0) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Get or create a session, when initializing the replay.\n * Returns a session that may be unsampled.\n */\nfunction loadOrCreateSession(\n  {\n    sessionIdleExpire,\n    maxReplayDuration,\n    previousSessionId,\n  }\n\n,\n  sessionOptions,\n) {\n  const existingSession = sessionOptions.stickySession && fetchSession();\n\n  // No session exists yet, just create a new one\n  if (!existingSession) {\n    DEBUG_BUILD && debug.infoTick('Creating new session');\n    return createSession(sessionOptions, { previousSessionId });\n  }\n\n  if (!shouldRefreshSession(existingSession, { sessionIdleExpire, maxReplayDuration })) {\n    return existingSession;\n  }\n\n  DEBUG_BUILD && debug.infoTick('Session in sessionStorage is expired, creating new one...');\n  return createSession(sessionOptions, { previousSessionId: existingSession.id });\n}\n\nfunction isCustomEvent(event) {\n  return event.type === EventType.Custom;\n}\n\n/**\n * Add an event to the event buffer.\n * In contrast to `addEvent`, this does not return a promise & does not wait for the adding of the event to succeed/fail.\n * Instead this returns `true` if we tried to add the event, else false.\n * It returns `false` e.g. if we are paused, disabled, or out of the max replay duration.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nfunction addEventSync(replay, event, isCheckout) {\n  if (!shouldAddEvent(replay, event)) {\n    return false;\n  }\n\n  // This should never reject\n  // eslint-disable-next-line @typescript-eslint/no-floating-promises\n  _addEvent(replay, event, isCheckout);\n\n  return true;\n}\n\n/**\n * Add an event to the event buffer.\n * Resolves to `null` if no event was added, else to `void`.\n *\n * `isCheckout` is true if this is either the very first event, or an event triggered by `checkoutEveryNms`.\n */\nfunction addEvent(\n  replay,\n  event,\n  isCheckout,\n) {\n  if (!shouldAddEvent(replay, event)) {\n    return Promise.resolve(null);\n  }\n\n  return _addEvent(replay, event, isCheckout);\n}\n\nasync function _addEvent(\n  replay,\n  event,\n  isCheckout,\n) {\n  const { eventBuffer } = replay;\n\n  if (!eventBuffer || (eventBuffer.waitForCheckout && !isCheckout)) {\n    return null;\n  }\n\n  const isBufferMode = replay.recordingMode === 'buffer';\n\n  try {\n    if (isCheckout && isBufferMode) {\n      eventBuffer.clear();\n    }\n\n    if (isCheckout) {\n      eventBuffer.hasCheckout = true;\n      eventBuffer.waitForCheckout = false;\n    }\n\n    const replayOptions = replay.getOptions();\n\n    const eventAfterPossibleCallback = maybeApplyCallback(event, replayOptions.beforeAddRecordingEvent);\n\n    if (!eventAfterPossibleCallback) {\n      return;\n    }\n\n    return await eventBuffer.addEvent(eventAfterPossibleCallback);\n  } catch (error) {\n    const isExceeded = error && error instanceof EventBufferSizeExceededError;\n    const reason = isExceeded ? 'addEventSizeExceeded' : 'addEvent';\n\n    if (isExceeded && isBufferMode) {\n      // Clear buffer and wait for next checkout\n      eventBuffer.clear();\n      eventBuffer.waitForCheckout = true;\n\n      return null;\n    }\n\n    replay.handleException(error);\n\n    await replay.stop({ reason });\n\n    const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n\n    if (client) {\n      client.recordDroppedEvent('internal_sdk_error', 'replay');\n    }\n  }\n}\n\n/** Exported only for tests. */\nfunction shouldAddEvent(replay, event) {\n  if (!replay.eventBuffer || replay.isPaused() || !replay.isEnabled()) {\n    return false;\n  }\n\n  const timestampInMs = timestampToMs(event.timestamp);\n\n  // Throw out events that happen more than 5 minutes ago. This can happen if\n  // page has been left open and idle for a long period of time and user\n  // comes back to trigger a new session. The performance entries rely on\n  // `performance.timeOrigin`, which is when the page first opened.\n  if (timestampInMs + replay.timeouts.sessionIdlePause < Date.now()) {\n    return false;\n  }\n\n  // Throw out events that are +60min from the initial timestamp\n  if (timestampInMs > replay.getContext().initialTimestamp + replay.getOptions().maxReplayDuration) {\n    DEBUG_BUILD &&\n      debug.infoTick(`Skipping event with timestamp ${timestampInMs} because it is after maxReplayDuration`);\n    return false;\n  }\n\n  return true;\n}\n\nfunction maybeApplyCallback(\n  event,\n  callback,\n) {\n  try {\n    if (typeof callback === 'function' && isCustomEvent(event)) {\n      return callback(event);\n    }\n  } catch (error) {\n    DEBUG_BUILD &&\n      debug.exception(error, 'An error occurred in the `beforeAddRecordingEvent` callback, skipping the event...');\n    return null;\n  }\n\n  return event;\n}\n\n/** If the event is an error event */\nfunction isErrorEvent(event) {\n  return !event.type;\n}\n\n/** If the event is a transaction event */\nfunction isTransactionEvent(event) {\n  return event.type === 'transaction';\n}\n\n/** If the event is an replay event */\nfunction isReplayEvent(event) {\n  return event.type === 'replay_event';\n}\n\n/** If the event is a feedback event */\nfunction isFeedbackEvent(event) {\n  return event.type === 'feedback';\n}\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nfunction handleAfterSendEvent(replay) {\n  return (event, sendResponse) => {\n    if (!replay.isEnabled() || (!isErrorEvent(event) && !isTransactionEvent(event))) {\n      return;\n    }\n\n    const statusCode = sendResponse?.statusCode;\n\n    // We only want to do stuff on successful error sending, otherwise you get error replays without errors attached\n    // If not using the base transport, we allow `undefined` response (as a custom transport may not implement this correctly yet)\n    // If we do use the base transport, we skip if we encountered an non-OK status code\n    if (!statusCode || statusCode < 200 || statusCode >= 300) {\n      return;\n    }\n\n    if (isTransactionEvent(event)) {\n      handleTransactionEvent(replay, event);\n      return;\n    }\n\n    handleErrorEvent(replay, event);\n  };\n}\n\nfunction handleTransactionEvent(replay, event) {\n  const replayContext = replay.getContext();\n\n  // Collect traceIds in _context regardless of `recordingMode`\n  // In error mode, _context gets cleared on every checkout\n  // We limit to max. 100 transactions linked\n  if (event.contexts?.trace?.trace_id && replayContext.traceIds.size < 100) {\n    replayContext.traceIds.add(event.contexts.trace.trace_id);\n  }\n}\n\nfunction handleErrorEvent(replay, event) {\n  const replayContext = replay.getContext();\n\n  // Add error to list of errorIds of replay. This is ok to do even if not\n  // sampled because context will get reset at next checkout.\n  // XXX: There is also a race condition where it's possible to capture an\n  // error to Sentry before Replay SDK has loaded, but response returns after\n  // it was loaded, and this gets called.\n  // We limit to max. 100 errors linked\n  if (event.event_id && replayContext.errorIds.size < 100) {\n    replayContext.errorIds.add(event.event_id);\n  }\n\n  // If error event is tagged with replay id it means it was sampled (when in buffer mode)\n  // Need to be very careful that this does not cause an infinite loop\n  if (replay.recordingMode !== 'buffer' || !event.tags || !event.tags.replayId) {\n    return;\n  }\n\n  const { beforeErrorSampling } = replay.getOptions();\n  if (typeof beforeErrorSampling === 'function' && !beforeErrorSampling(event)) {\n    return;\n  }\n\n  (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.setTimeout)(async () => {\n    try {\n      // Capture current event buffer as new replay\n      await replay.sendBufferedReplayOrFlush();\n    } catch (err) {\n      replay.handleException(err);\n    }\n  });\n}\n\n/**\n * Returns a listener to be added to `client.on('afterSendErrorEvent, listener)`.\n */\nfunction handleBeforeSendEvent(replay) {\n  return (event) => {\n    if (!replay.isEnabled() || !isErrorEvent(event)) {\n      return;\n    }\n\n    handleHydrationError(replay, event);\n  };\n}\n\nfunction handleHydrationError(replay, event) {\n  const exceptionValue = event.exception?.values?.[0]?.value;\n  if (typeof exceptionValue !== 'string') {\n    return;\n  }\n\n  if (\n    // Only matches errors in production builds of react-dom\n    // Example https://reactjs.org/docs/error-decoder.html?invariant=423\n    // With newer React versions, the messages changed to a different website https://react.dev/errors/418\n    exceptionValue.match(\n      /(reactjs\\.org\\/docs\\/error-decoder\\.html\\?invariant=|react\\.dev\\/errors\\/)(418|419|422|423|425)/,\n    ) ||\n    // Development builds of react-dom\n    // Error 1: Hydration failed because the initial UI does not match what was rendered on the server.\n    // Error 2: Text content does not match server-rendered HTML. Warning: Text content did not match.\n    exceptionValue.match(/(does not match server-rendered HTML|Hydration failed because)/i)\n  ) {\n    const breadcrumb = createBreadcrumb({\n      category: 'replay.hydrate-error',\n      data: {\n        url: (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getLocationHref)(),\n      },\n    });\n    addBreadcrumbEvent(replay, breadcrumb);\n  }\n}\n\n/**\n * Handle breadcrumbs that Sentry captures, and make sure to capture relevant breadcrumbs to Replay as well.\n */\nfunction handleBreadcrumbs(replay) {\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n\n  if (!client) {\n    return;\n  }\n\n  client.on('beforeAddBreadcrumb', breadcrumb => beforeAddBreadcrumb(replay, breadcrumb));\n}\n\nfunction beforeAddBreadcrumb(replay, breadcrumb) {\n  if (!replay.isEnabled() || !isBreadcrumbWithCategory(breadcrumb)) {\n    return;\n  }\n\n  const result = normalizeBreadcrumb(breadcrumb);\n  if (result) {\n    addBreadcrumbEvent(replay, result);\n  }\n}\n\n/** Exported only for tests. */\nfunction normalizeBreadcrumb(breadcrumb) {\n  if (\n    !isBreadcrumbWithCategory(breadcrumb) ||\n    [\n      // fetch & xhr are handled separately,in handleNetworkBreadcrumbs\n      'fetch',\n      'xhr',\n      // These two are breadcrumbs for emitted sentry events, we don't care about them\n      'sentry.event',\n      'sentry.transaction',\n    ].includes(breadcrumb.category) ||\n    // We capture UI breadcrumbs separately\n    breadcrumb.category.startsWith('ui.')\n  ) {\n    return null;\n  }\n\n  if (breadcrumb.category === 'console') {\n    return normalizeConsoleBreadcrumb(breadcrumb);\n  }\n\n  return createBreadcrumb(breadcrumb);\n}\n\n/** exported for tests only */\nfunction normalizeConsoleBreadcrumb(\n  breadcrumb,\n) {\n  const args = breadcrumb.data?.arguments;\n\n  if (!Array.isArray(args) || args.length === 0) {\n    return createBreadcrumb(breadcrumb);\n  }\n\n  let isTruncated = false;\n\n  // Avoid giant args captures\n  const normalizedArgs = args.map(arg => {\n    if (!arg) {\n      return arg;\n    }\n    if (typeof arg === 'string') {\n      if (arg.length > CONSOLE_ARG_MAX_SIZE) {\n        isTruncated = true;\n        return `${arg.slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n      }\n\n      return arg;\n    }\n    if (typeof arg === 'object') {\n      try {\n        const normalizedArg = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.normalize)(arg, 7);\n        const stringified = JSON.stringify(normalizedArg);\n        if (stringified.length > CONSOLE_ARG_MAX_SIZE) {\n          isTruncated = true;\n          // We use the pretty printed JSON string here as a base\n          return `${JSON.stringify(normalizedArg, null, 2).slice(0, CONSOLE_ARG_MAX_SIZE)}…`;\n        }\n        return normalizedArg;\n      } catch {\n        // fall back to default\n      }\n    }\n\n    return arg;\n  });\n\n  return createBreadcrumb({\n    ...breadcrumb,\n    data: {\n      ...breadcrumb.data,\n      arguments: normalizedArgs,\n      ...(isTruncated ? { _meta: { warnings: ['CONSOLE_ARG_TRUNCATED'] } } : {}),\n    },\n  });\n}\n\nfunction isBreadcrumbWithCategory(breadcrumb) {\n  return !!breadcrumb.category;\n}\n\n/**\n * Returns true if we think the given event is an error originating inside of rrweb.\n */\nfunction isRrwebError(event, hint) {\n  if (event.type || !event.exception?.values?.length) {\n    return false;\n  }\n\n  // @ts-expect-error this may be set by rrweb when it finds errors\n  if (hint.originalException?.__rrweb__) {\n    return true;\n  }\n\n  return false;\n}\n\n/**\n * Reset the `replay_id` field on the DSC.\n */\nfunction resetReplayIdOnDynamicSamplingContext() {\n  // Reset DSC on the current scope, if there is one\n  const dsc = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)().getPropagationContext().dsc;\n  if (dsc) {\n    delete dsc.replay_id;\n  }\n\n  // Clear it from frozen DSC on the active span\n  const activeSpan = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n  if (activeSpan) {\n    const dsc = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getDynamicSamplingContextFromSpan)(activeSpan);\n    delete (dsc ).replay_id;\n  }\n}\n\n/**\n * Add a feedback breadcrumb event to replay.\n */\nfunction addFeedbackBreadcrumb(replay, event) {\n  replay.triggerUserActivity();\n  replay.addUpdate(() => {\n    if (!event.timestamp) {\n      // Ignore events that don't have timestamps (this shouldn't happen, more of a typing issue)\n      // Return true here so that we don't flush\n      return true;\n    }\n\n    // This should never reject\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    replay.throttledAddEvent({\n      type: EventType.Custom,\n      timestamp: event.timestamp * 1000,\n      data: {\n        tag: 'breadcrumb',\n        payload: {\n          timestamp: event.timestamp,\n          type: 'default',\n          category: 'sentry.feedback',\n          data: {\n            feedbackId: event.event_id,\n          },\n        },\n      },\n    } );\n\n    return false;\n  });\n}\n\n/**\n * Determine if event should be sampled (only applies in buffer mode).\n * When an event is captured by `handleGlobalEvent`, when in buffer mode\n * we determine if we want to sample the error or not.\n */\nfunction shouldSampleForBufferEvent(replay, event) {\n  if (replay.recordingMode !== 'buffer') {\n    return false;\n  }\n\n  // ignore this error because otherwise we could loop indefinitely with\n  // trying to capture replay and failing\n  if (event.message === UNABLE_TO_SEND_REPLAY) {\n    return false;\n  }\n\n  // Require the event to be an error event & to have an exception\n  if (!event.exception || event.type) {\n    return false;\n  }\n\n  return isSampled(replay.getOptions().errorSampleRate);\n}\n\n/**\n * Returns a listener to be added to `addEventProcessor(listener)`.\n */\nfunction handleGlobalEventListener(replay) {\n  return Object.assign(\n    (event, hint) => {\n      // Do nothing if replay has been disabled or paused\n      if (!replay.isEnabled() || replay.isPaused()) {\n        return event;\n      }\n\n      if (isReplayEvent(event)) {\n        // Replays have separate set of breadcrumbs, do not include breadcrumbs\n        // from core SDK\n        delete event.breadcrumbs;\n        return event;\n      }\n\n      // We only want to handle errors, transactions, and feedbacks, nothing else\n      if (!isErrorEvent(event) && !isTransactionEvent(event) && !isFeedbackEvent(event)) {\n        return event;\n      }\n\n      // Ensure we do not add replay_id if the session is expired\n      const isSessionActive = replay.checkAndHandleExpiredSession();\n      if (!isSessionActive) {\n        // prevent exceeding replay durations by removing the expired replayId from the DSC\n        resetReplayIdOnDynamicSamplingContext();\n        return event;\n      }\n\n      if (isFeedbackEvent(event)) {\n        // This should never reject\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        replay.flush();\n        event.contexts.feedback.replay_id = replay.getSessionId();\n        // Add a replay breadcrumb for this piece of feedback\n        addFeedbackBreadcrumb(replay, event);\n        return event;\n      }\n\n      // Unless `captureExceptions` is enabled, we want to ignore errors coming from rrweb\n      // As there can be a bunch of stuff going wrong in internals there, that we don't want to bubble up to users\n      if (isRrwebError(event, hint) && !replay.getOptions()._experiments.captureExceptions) {\n        DEBUG_BUILD && debug.log('Ignoring error from rrweb internals', event);\n        return null;\n      }\n\n      // When in buffer mode, we decide to sample here.\n      // Later, in `handleAfterSendEvent`, if the replayId is set, we know that we sampled\n      // And convert the buffer session to a full session\n      const isErrorEventSampled = shouldSampleForBufferEvent(replay, event);\n\n      // Tag errors if it has been sampled in buffer mode, or if it is session mode\n      // Only tag transactions if in session mode\n      const shouldTagReplayId = isErrorEventSampled || replay.recordingMode === 'session';\n\n      if (shouldTagReplayId) {\n        event.tags = { ...event.tags, replayId: replay.getSessionId() };\n      }\n\n      return event;\n    },\n    { id: 'Replay' },\n  );\n}\n\n/**\n * Create a \"span\" for each performance entry.\n */\nfunction createPerformanceSpans(\n  replay,\n  entries,\n) {\n  return entries.map(({ type, start, end, name, data }) => {\n    const response = replay.throttledAddEvent({\n      type: EventType.Custom,\n      timestamp: start,\n      data: {\n        tag: 'performanceSpan',\n        payload: {\n          op: type,\n          description: name,\n          startTimestamp: start,\n          endTimestamp: end,\n          data,\n        },\n      },\n    });\n\n    // If response is a string, it means its either THROTTLED or SKIPPED\n    return typeof response === 'string' ? Promise.resolve(null) : response;\n  });\n}\n\nfunction handleHistory(handlerData) {\n  const { from, to } = handlerData;\n\n  const now = Date.now() / 1000;\n\n  return {\n    type: 'navigation.push',\n    start: now,\n    end: now,\n    name: to,\n    data: {\n      previous: from,\n    },\n  };\n}\n\n/**\n * Returns a listener to be added to `addHistoryInstrumentationHandler(listener)`.\n */\nfunction handleHistorySpanListener(replay) {\n  return (handlerData) => {\n    if (!replay.isEnabled()) {\n      return;\n    }\n\n    const result = handleHistory(handlerData);\n\n    if (result === null) {\n      return;\n    }\n\n    // Need to collect visited URLs\n    replay.getContext().urls.push(result.name);\n    replay.triggerUserActivity();\n\n    replay.addUpdate(() => {\n      createPerformanceSpans(replay, [result]);\n      // Returning false to flush\n      return false;\n    });\n  };\n}\n\n/**\n * Check whether a given request URL should be filtered out. This is so we\n * don't log Sentry ingest requests.\n */\nfunction shouldFilterRequest(replay, url) {\n  // If we enabled the `traceInternals` experiment, we want to trace everything\n  if (DEBUG_BUILD && replay.getOptions()._experiments.traceInternals) {\n    return false;\n  }\n\n  return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isSentryRequestUrl)(url, (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)());\n}\n\n/** Add a performance entry breadcrumb */\nfunction addNetworkBreadcrumb(\n  replay,\n  result,\n) {\n  if (!replay.isEnabled()) {\n    return;\n  }\n\n  if (result === null) {\n    return;\n  }\n\n  if (shouldFilterRequest(replay, result.name)) {\n    return;\n  }\n\n  replay.addUpdate(() => {\n    createPerformanceSpans(replay, [result]);\n    // Returning true will cause `addUpdate` to not flush\n    // We do not want network requests to cause a flush. This will prevent\n    // recurring/polling requests from keeping the replay session alive.\n    return true;\n  });\n}\n\n/** Get the size of a body. */\nfunction getBodySize(body) {\n  if (!body) {\n    return undefined;\n  }\n\n  const textEncoder = new TextEncoder();\n\n  try {\n    if (typeof body === 'string') {\n      return textEncoder.encode(body).length;\n    }\n\n    if (body instanceof URLSearchParams) {\n      return textEncoder.encode(body.toString()).length;\n    }\n\n    if (body instanceof FormData) {\n      const formDataStr = (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.serializeFormData)(body);\n      return textEncoder.encode(formDataStr).length;\n    }\n\n    if (body instanceof Blob) {\n      return body.size;\n    }\n\n    if (body instanceof ArrayBuffer) {\n      return body.byteLength;\n    }\n\n    // Currently unhandled types: ArrayBufferView, ReadableStream\n  } catch {\n    // just return undefined\n  }\n\n  return undefined;\n}\n\n/** Convert a Content-Length header to number/undefined.  */\nfunction parseContentLengthHeader(header) {\n  if (!header) {\n    return undefined;\n  }\n\n  const size = parseInt(header, 10);\n  return isNaN(size) ? undefined : size;\n}\n\n/** Merge a warning into an existing network request/response. */\nfunction mergeWarning(\n  info,\n  warning,\n) {\n  if (!info) {\n    return {\n      headers: {},\n      size: undefined,\n      _meta: {\n        warnings: [warning],\n      },\n    };\n  }\n\n  const newMeta = { ...info._meta };\n  const existingWarnings = newMeta.warnings || [];\n  newMeta.warnings = [...existingWarnings, warning];\n\n  info._meta = newMeta;\n  return info;\n}\n\n/** Convert ReplayNetworkRequestData to a PerformanceEntry. */\nfunction makeNetworkReplayBreadcrumb(\n  type,\n  data,\n) {\n  if (!data) {\n    return null;\n  }\n\n  const { startTimestamp, endTimestamp, url, method, statusCode, request, response } = data;\n\n  const result = {\n    type,\n    start: startTimestamp / 1000,\n    end: endTimestamp / 1000,\n    name: url,\n    data: {\n      method,\n      statusCode,\n      request,\n      response,\n    },\n  };\n\n  return result;\n}\n\n/** Build the request or response part of a replay network breadcrumb that was skipped. */\nfunction buildSkippedNetworkRequestOrResponse(bodySize) {\n  return {\n    headers: {},\n    size: bodySize,\n    _meta: {\n      warnings: ['URL_SKIPPED'],\n    },\n  };\n}\n\n/** Build the request or response part of a replay network breadcrumb. */\nfunction buildNetworkRequestOrResponse(\n  headers,\n  bodySize,\n  body,\n) {\n  if (!bodySize && Object.keys(headers).length === 0) {\n    return undefined;\n  }\n\n  if (!bodySize) {\n    return {\n      headers,\n    };\n  }\n\n  if (!body) {\n    return {\n      headers,\n      size: bodySize,\n    };\n  }\n\n  const info = {\n    headers,\n    size: bodySize,\n  };\n\n  const { body: normalizedBody, warnings } = normalizeNetworkBody(body);\n  info.body = normalizedBody;\n  if (warnings?.length) {\n    info._meta = {\n      warnings,\n    };\n  }\n\n  return info;\n}\n\n/** Filter a set of headers */\nfunction getAllowedHeaders(headers, allowedHeaders) {\n  return Object.entries(headers).reduce((filteredHeaders, [key, value]) => {\n    const normalizedKey = key.toLowerCase();\n    // Avoid putting empty strings into the headers\n    if (allowedHeaders.includes(normalizedKey) && headers[key]) {\n      filteredHeaders[normalizedKey] = value;\n    }\n    return filteredHeaders;\n  }, {});\n}\n\nfunction normalizeNetworkBody(body)\n\n {\n  if (!body || typeof body !== 'string') {\n    return {\n      body,\n    };\n  }\n\n  const exceedsSizeLimit = body.length > NETWORK_BODY_MAX_SIZE;\n  const isProbablyJson = _strIsProbablyJson(body);\n\n  if (exceedsSizeLimit) {\n    const truncatedBody = body.slice(0, NETWORK_BODY_MAX_SIZE);\n\n    if (isProbablyJson) {\n      return {\n        body: truncatedBody,\n        warnings: ['MAYBE_JSON_TRUNCATED'],\n      };\n    }\n\n    return {\n      body: `${truncatedBody}…`,\n      warnings: ['TEXT_TRUNCATED'],\n    };\n  }\n\n  if (isProbablyJson) {\n    try {\n      const jsonBody = JSON.parse(body);\n      return {\n        body: jsonBody,\n      };\n    } catch {\n      // fall back to just send the body as string\n    }\n  }\n\n  return {\n    body,\n  };\n}\n\nfunction _strIsProbablyJson(str) {\n  const first = str[0];\n  const last = str[str.length - 1];\n\n  // Simple check: If this does not start & end with {} or [], it's not JSON\n  return (first === '[' && last === ']') || (first === '{' && last === '}');\n}\n\n/** Match an URL against a list of strings/Regex. */\nfunction urlMatches(url, urls) {\n  const fullUrl = getFullUrl(url);\n\n  return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.stringMatchesSomePattern)(fullUrl, urls);\n}\n\n/** exported for tests */\nfunction getFullUrl(url, baseURI = WINDOW.document.baseURI) {\n  // Short circuit for common cases:\n  if (url.startsWith('http://') || url.startsWith('https://') || url.startsWith(WINDOW.location.origin)) {\n    return url;\n  }\n  const fixedUrl = new URL(url, baseURI);\n\n  // If these do not match, we are not dealing with a relative URL, so just return it\n  if (fixedUrl.origin !== new URL(baseURI).origin) {\n    return url;\n  }\n\n  const fullUrl = fixedUrl.href;\n\n  // Remove trailing slashes, if they don't match the original URL\n  if (!url.endsWith('/') && fullUrl.endsWith('/')) {\n    return fullUrl.slice(0, -1);\n  }\n\n  return fullUrl;\n}\n\n/**\n * Capture a fetch breadcrumb to a replay.\n * This adds additional data (where appropriate).\n */\nasync function captureFetchBreadcrumbToReplay(\n  breadcrumb,\n  hint,\n  options\n\n,\n) {\n  try {\n    const data = await _prepareFetchData(breadcrumb, hint, options);\n\n    // Create a replay performance entry from this breadcrumb\n    const result = makeNetworkReplayBreadcrumb('resource.fetch', data);\n    addNetworkBreadcrumb(options.replay, result);\n  } catch (error) {\n    DEBUG_BUILD && debug.exception(error, 'Failed to capture fetch breadcrumb');\n  }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nfunction enrichFetchBreadcrumb(\n  breadcrumb,\n  hint,\n) {\n  const { input, response } = hint;\n\n  const body = input ? (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.getFetchRequestArgBody)(input) : undefined;\n  const reqSize = getBodySize(body);\n\n  const resSize = response ? parseContentLengthHeader(response.headers.get('content-length')) : undefined;\n\n  if (reqSize !== undefined) {\n    breadcrumb.data.request_body_size = reqSize;\n  }\n  if (resSize !== undefined) {\n    breadcrumb.data.response_body_size = resSize;\n  }\n}\n\nasync function _prepareFetchData(\n  breadcrumb,\n  hint,\n  options,\n) {\n  const now = Date.now();\n  const { startTimestamp = now, endTimestamp = now } = hint;\n\n  const {\n    url,\n    method,\n    status_code: statusCode = 0,\n    request_body_size: requestBodySize,\n    response_body_size: responseBodySize,\n  } = breadcrumb.data;\n\n  const captureDetails =\n    urlMatches(url, options.networkDetailAllowUrls) && !urlMatches(url, options.networkDetailDenyUrls);\n\n  const request = captureDetails\n    ? _getRequestInfo(options, hint.input, requestBodySize)\n    : buildSkippedNetworkRequestOrResponse(requestBodySize);\n  const response = await _getResponseInfo(captureDetails, options, hint.response, responseBodySize);\n\n  return {\n    startTimestamp,\n    endTimestamp,\n    url,\n    method,\n    statusCode,\n    request,\n    response,\n  };\n}\n\nfunction _getRequestInfo(\n  { networkCaptureBodies, networkRequestHeaders },\n  input,\n  requestBodySize,\n) {\n  const headers = input ? getRequestHeaders(input, networkRequestHeaders) : {};\n\n  if (!networkCaptureBodies) {\n    return buildNetworkRequestOrResponse(headers, requestBodySize, undefined);\n  }\n\n  // We only want to transmit string or string-like bodies\n  const requestBody = (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.getFetchRequestArgBody)(input);\n  const [bodyStr, warning] = (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.getBodyString)(requestBody, debug);\n  const data = buildNetworkRequestOrResponse(headers, requestBodySize, bodyStr);\n\n  if (warning) {\n    return mergeWarning(data, warning);\n  }\n\n  return data;\n}\n\n/** Exported only for tests. */\nasync function _getResponseInfo(\n  captureDetails,\n  {\n    networkCaptureBodies,\n    networkResponseHeaders,\n  },\n  response,\n  responseBodySize,\n) {\n  if (!captureDetails && responseBodySize !== undefined) {\n    return buildSkippedNetworkRequestOrResponse(responseBodySize);\n  }\n\n  const headers = response ? getAllHeaders(response.headers, networkResponseHeaders) : {};\n\n  if (!response || (!networkCaptureBodies && responseBodySize !== undefined)) {\n    return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n  }\n\n  const [bodyText, warning] = await _parseFetchResponseBody(response);\n  const result = getResponseData(bodyText, {\n    networkCaptureBodies,\n\n    responseBodySize,\n    captureDetails,\n    headers,\n  });\n\n  if (warning) {\n    return mergeWarning(result, warning);\n  }\n\n  return result;\n}\n\nfunction getResponseData(\n  bodyText,\n  {\n    networkCaptureBodies,\n    responseBodySize,\n    captureDetails,\n    headers,\n  }\n\n,\n) {\n  try {\n    const size = bodyText?.length && responseBodySize === undefined ? getBodySize(bodyText) : responseBodySize;\n\n    if (!captureDetails) {\n      return buildSkippedNetworkRequestOrResponse(size);\n    }\n\n    if (networkCaptureBodies) {\n      return buildNetworkRequestOrResponse(headers, size, bodyText);\n    }\n\n    return buildNetworkRequestOrResponse(headers, size, undefined);\n  } catch (error) {\n    DEBUG_BUILD && debug.exception(error, 'Failed to serialize response body');\n    // fallback\n    return buildNetworkRequestOrResponse(headers, responseBodySize, undefined);\n  }\n}\n\nasync function _parseFetchResponseBody(response) {\n  const res = _tryCloneResponse(response);\n\n  if (!res) {\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n\n  try {\n    const text = await _tryGetResponseText(res);\n    return [text];\n  } catch (error) {\n    if (error instanceof Error && error.message.indexOf('Timeout') > -1) {\n      DEBUG_BUILD && debug.warn('Parsing text body from response timed out');\n      return [undefined, 'BODY_PARSE_TIMEOUT'];\n    }\n\n    DEBUG_BUILD && debug.exception(error, 'Failed to get text body from response');\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n}\n\nfunction getAllHeaders(headers, allowedHeaders) {\n  const allHeaders = {};\n\n  allowedHeaders.forEach(header => {\n    if (headers.get(header)) {\n      allHeaders[header] = headers.get(header) ;\n    }\n  });\n\n  return allHeaders;\n}\n\nfunction getRequestHeaders(fetchArgs, allowedHeaders) {\n  if (fetchArgs.length === 1 && typeof fetchArgs[0] !== 'string') {\n    return getHeadersFromOptions(fetchArgs[0] , allowedHeaders);\n  }\n\n  if (fetchArgs.length === 2) {\n    return getHeadersFromOptions(fetchArgs[1] , allowedHeaders);\n  }\n\n  return {};\n}\n\nfunction getHeadersFromOptions(\n  input,\n  allowedHeaders,\n) {\n  if (!input) {\n    return {};\n  }\n\n  const headers = input.headers;\n\n  if (!headers) {\n    return {};\n  }\n\n  if (headers instanceof Headers) {\n    return getAllHeaders(headers, allowedHeaders);\n  }\n\n  // We do not support this, as it is not really documented (anymore?)\n  if (Array.isArray(headers)) {\n    return {};\n  }\n\n  return getAllowedHeaders(headers, allowedHeaders);\n}\n\nfunction _tryCloneResponse(response) {\n  try {\n    // We have to clone this, as the body can only be read once\n    return response.clone();\n  } catch (error) {\n    // this can throw if the response was already consumed before\n    DEBUG_BUILD && debug.exception(error, 'Failed to clone response body');\n  }\n}\n\n/**\n * Get the response body of a fetch request, or timeout after 500ms.\n * Fetch can return a streaming body, that may not resolve (or not for a long time).\n * If that happens, we rather abort after a short time than keep waiting for this.\n */\nfunction _tryGetResponseText(response) {\n  return new Promise((resolve, reject) => {\n    const timeout = (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.setTimeout)(() => reject(new Error('Timeout while trying to read response body')), 500);\n\n    _getResponseText(response)\n      .then(\n        txt => resolve(txt),\n        reason => reject(reason),\n      )\n      .finally(() => clearTimeout(timeout));\n  });\n}\n\nasync function _getResponseText(response) {\n  // Force this to be a promise, just to be safe\n  // eslint-disable-next-line no-return-await\n  return await response.text();\n}\n\n/**\n * Capture an XHR breadcrumb to a replay.\n * This adds additional data (where appropriate).\n */\nasync function captureXhrBreadcrumbToReplay(\n  breadcrumb,\n  hint,\n  options,\n) {\n  try {\n    const data = _prepareXhrData(breadcrumb, hint, options);\n\n    // Create a replay performance entry from this breadcrumb\n    const result = makeNetworkReplayBreadcrumb('resource.xhr', data);\n    addNetworkBreadcrumb(options.replay, result);\n  } catch (error) {\n    DEBUG_BUILD && debug.exception(error, 'Failed to capture xhr breadcrumb');\n  }\n}\n\n/**\n * Enrich a breadcrumb with additional data.\n * This has to be sync & mutate the given breadcrumb,\n * as the breadcrumb is afterwards consumed by other handlers.\n */\nfunction enrichXhrBreadcrumb(\n  breadcrumb,\n  hint,\n) {\n  const { xhr, input } = hint;\n\n  if (!xhr) {\n    return;\n  }\n\n  const reqSize = getBodySize(input);\n  const resSize = xhr.getResponseHeader('content-length')\n    ? parseContentLengthHeader(xhr.getResponseHeader('content-length'))\n    : _getBodySize(xhr.response, xhr.responseType);\n\n  if (reqSize !== undefined) {\n    breadcrumb.data.request_body_size = reqSize;\n  }\n  if (resSize !== undefined) {\n    breadcrumb.data.response_body_size = resSize;\n  }\n}\n\nfunction _prepareXhrData(\n  breadcrumb,\n  hint,\n  options,\n) {\n  const now = Date.now();\n  const { startTimestamp = now, endTimestamp = now, input, xhr } = hint;\n\n  const {\n    url,\n    method,\n    status_code: statusCode = 0,\n    request_body_size: requestBodySize,\n    response_body_size: responseBodySize,\n  } = breadcrumb.data;\n\n  if (!url) {\n    return null;\n  }\n\n  if (!xhr || !urlMatches(url, options.networkDetailAllowUrls) || urlMatches(url, options.networkDetailDenyUrls)) {\n    const request = buildSkippedNetworkRequestOrResponse(requestBodySize);\n    const response = buildSkippedNetworkRequestOrResponse(responseBodySize);\n    return {\n      startTimestamp,\n      endTimestamp,\n      url,\n      method,\n      statusCode,\n      request,\n      response,\n    };\n  }\n\n  // ---- This additional network data below is only captured for URLs defined in `networkDetailAllowUrls` ----\n\n  const xhrInfo = xhr[_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.SENTRY_XHR_DATA_KEY];\n  const networkRequestHeaders = xhrInfo\n    ? getAllowedHeaders(xhrInfo.request_headers, options.networkRequestHeaders)\n    : {};\n  const networkResponseHeaders = getAllowedHeaders(getResponseHeaders(xhr), options.networkResponseHeaders);\n\n  const [requestBody, requestWarning] = options.networkCaptureBodies ? (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.getBodyString)(input, debug) : [undefined];\n  const [responseBody, responseWarning] = options.networkCaptureBodies ? _getXhrResponseBody(xhr) : [undefined];\n\n  const request = buildNetworkRequestOrResponse(networkRequestHeaders, requestBodySize, requestBody);\n  const response = buildNetworkRequestOrResponse(networkResponseHeaders, responseBodySize, responseBody);\n\n  return {\n    startTimestamp,\n    endTimestamp,\n    url,\n    method,\n    statusCode,\n    request: requestWarning ? mergeWarning(request, requestWarning) : request,\n    response: responseWarning ? mergeWarning(response, responseWarning) : response,\n  };\n}\n\nfunction getResponseHeaders(xhr) {\n  const headers = xhr.getAllResponseHeaders();\n\n  if (!headers) {\n    return {};\n  }\n\n  return headers.split('\\r\\n').reduce((acc, line) => {\n    const [key, value] = line.split(': ') ;\n    if (value) {\n      acc[key.toLowerCase()] = value;\n    }\n    return acc;\n  }, {});\n}\n\nfunction _getXhrResponseBody(xhr) {\n  // We collect errors that happen, but only log them if we can't get any response body\n  const errors = [];\n\n  try {\n    return [xhr.responseText];\n  } catch (e) {\n    errors.push(e);\n  }\n\n  // Try to manually parse the response body, if responseText fails\n  try {\n    return _parseXhrResponse(xhr.response, xhr.responseType);\n  } catch (e) {\n    errors.push(e);\n  }\n\n  DEBUG_BUILD && debug.warn('Failed to get xhr response body', ...errors);\n\n  return [undefined];\n}\n\n/**\n * Get the string representation of the XHR response.\n * Based on MDN, these are the possible types of the response:\n * string\n * ArrayBuffer\n * Blob\n * Document\n * POJO\n *\n * Exported only for tests.\n */\nfunction _parseXhrResponse(\n  body,\n  responseType,\n) {\n  try {\n    if (typeof body === 'string') {\n      return [body];\n    }\n\n    if (body instanceof Document) {\n      return [body.body.outerHTML];\n    }\n\n    if (responseType === 'json' && body && typeof body === 'object') {\n      return [JSON.stringify(body)];\n    }\n\n    if (!body) {\n      return [undefined];\n    }\n  } catch (error) {\n    DEBUG_BUILD && debug.exception(error, 'Failed to serialize body', body);\n    return [undefined, 'BODY_PARSE_ERROR'];\n  }\n\n  DEBUG_BUILD && debug.log('Skipping network body because of body type', body);\n\n  return [undefined, 'UNPARSEABLE_BODY_TYPE'];\n}\n\nfunction _getBodySize(\n  body,\n  responseType,\n) {\n  try {\n    const bodyStr = responseType === 'json' && body && typeof body === 'object' ? JSON.stringify(body) : body;\n    return getBodySize(bodyStr);\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * This method does two things:\n * - It enriches the regular XHR/fetch breadcrumbs with request/response size data\n * - It captures the XHR/fetch breadcrumbs to the replay\n *   (enriching it with further data that is _not_ added to the regular breadcrumbs)\n */\nfunction handleNetworkBreadcrumbs(replay) {\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n\n  try {\n    const {\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders,\n      networkResponseHeaders,\n    } = replay.getOptions();\n\n    const options = {\n      replay,\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders,\n      networkResponseHeaders,\n    };\n\n    if (client) {\n      client.on('beforeAddBreadcrumb', (breadcrumb, hint) => beforeAddNetworkBreadcrumb(options, breadcrumb, hint));\n    }\n  } catch {\n    // Do nothing\n  }\n}\n\n/** just exported for tests */\nfunction beforeAddNetworkBreadcrumb(\n  options,\n  breadcrumb,\n  hint,\n) {\n  if (!breadcrumb.data) {\n    return;\n  }\n\n  try {\n    if (_isXhrBreadcrumb(breadcrumb) && _isXhrHint(hint)) {\n      // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n      // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n      // So any async mutations to it will not be reflected in the final breadcrumb\n      enrichXhrBreadcrumb(breadcrumb, hint);\n\n      // This call should not reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      captureXhrBreadcrumbToReplay(breadcrumb, hint, options);\n    }\n\n    if (_isFetchBreadcrumb(breadcrumb) && _isFetchHint(hint)) {\n      // This has to be sync, as we need to ensure the breadcrumb is enriched in the same tick\n      // Because the hook runs synchronously, and the breadcrumb is afterwards passed on\n      // So any async mutations to it will not be reflected in the final breadcrumb\n      enrichFetchBreadcrumb(breadcrumb, hint);\n\n      // This call should not reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      captureFetchBreadcrumbToReplay(breadcrumb, hint, options);\n    }\n  } catch (e) {\n    DEBUG_BUILD && debug.exception(e, 'Error when enriching network breadcrumb');\n  }\n}\n\nfunction _isXhrBreadcrumb(breadcrumb) {\n  return breadcrumb.category === 'xhr';\n}\n\nfunction _isFetchBreadcrumb(breadcrumb) {\n  return breadcrumb.category === 'fetch';\n}\n\nfunction _isXhrHint(hint) {\n  return hint?.xhr;\n}\n\nfunction _isFetchHint(hint) {\n  return hint?.response;\n}\n\n/**\n * Add global listeners that cannot be removed.\n */\nfunction addGlobalListeners(replay) {\n  // Listeners from core SDK //\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n\n  (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.addClickKeypressInstrumentationHandler)(handleDomListener(replay));\n  (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.addHistoryInstrumentationHandler)(handleHistorySpanListener(replay));\n  handleBreadcrumbs(replay);\n  handleNetworkBreadcrumbs(replay);\n\n  // Tag all (non replay) events that get sent to Sentry with the current\n  // replay ID so that we can reference them later in the UI\n  const eventProcessor = handleGlobalEventListener(replay);\n  (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.addEventProcessor)(eventProcessor);\n\n  // If a custom client has no hooks yet, we continue to use the \"old\" implementation\n  if (client) {\n    client.on('beforeSendEvent', handleBeforeSendEvent(replay));\n    client.on('afterSendEvent', handleAfterSendEvent(replay));\n    client.on('createDsc', (dsc) => {\n      const replayId = replay.getSessionId();\n      // We do not want to set the DSC when in buffer mode, as that means the replay has not been sent (yet)\n      if (replayId && replay.isEnabled() && replay.recordingMode === 'session') {\n        // Ensure to check that the session is still active - it could have expired in the meanwhile\n        const isSessionActive = replay.checkAndHandleExpiredSession();\n        if (isSessionActive) {\n          dsc.replay_id = replayId;\n        }\n      }\n    });\n\n    client.on('spanStart', span => {\n      replay.lastActiveSpan = span;\n    });\n\n    // We may be missing the initial spanStart due to timing issues,\n    // so we capture it on finish again.\n    client.on('spanEnd', span => {\n      replay.lastActiveSpan = span;\n    });\n\n    // We want to attach the replay id to the feedback event\n    client.on('beforeSendFeedback', async (feedbackEvent, options) => {\n      const replayId = replay.getSessionId();\n      if (options?.includeReplay && replay.isEnabled() && replayId && feedbackEvent.contexts?.feedback) {\n        // In case the feedback is sent via API and not through our widget, we want to flush replay\n        if (feedbackEvent.contexts.feedback.source === 'api') {\n          await replay.sendBufferedReplayOrFlush();\n        }\n        feedbackEvent.contexts.feedback.replay_id = replayId;\n      }\n    });\n\n    client.on('openFeedbackWidget', async () => {\n      await replay.sendBufferedReplayOrFlush();\n    });\n  }\n}\n\n/**\n * Create a \"span\" for the total amount of memory being used by JS objects\n * (including v8 internal objects).\n */\nasync function addMemoryEntry(replay) {\n  // window.performance.memory is a non-standard API and doesn't work on all browsers, so we try-catch this\n  try {\n    return Promise.all(\n      createPerformanceSpans(replay, [\n        // @ts-expect-error memory doesn't exist on type Performance as the API is non-standard (we check that it exists above)\n        createMemoryEntry(WINDOW.performance.memory),\n      ]),\n    );\n  } catch {\n    // Do nothing\n    return [];\n  }\n}\n\nfunction createMemoryEntry(memoryEntry) {\n  const { jsHeapSizeLimit, totalJSHeapSize, usedJSHeapSize } = memoryEntry;\n  // we don't want to use `getAbsoluteTime` because it adds the event time to the\n  // time origin, so we get the current timestamp instead\n  const time = Date.now() / 1000;\n  return {\n    type: 'memory',\n    name: 'memory',\n    start: time,\n    end: time,\n    data: {\n      memory: {\n        jsHeapSizeLimit,\n        totalJSHeapSize,\n        usedJSHeapSize,\n      },\n    },\n  };\n}\n\n/**\n * Heavily simplified debounce function based on lodash.debounce.\n *\n * This function takes a callback function (@param fun) and delays its invocation\n * by @param wait milliseconds. Optionally, a maxWait can be specified in @param options,\n * which ensures that the callback is invoked at least once after the specified max. wait time.\n *\n * @param func the function whose invocation is to be debounced\n * @param wait the minimum time until the function is invoked after it was called once\n * @param options the options object, which can contain the `maxWait` property\n *\n * @returns the debounced version of the function, which needs to be called at least once to start the\n *          debouncing process. Subsequent calls will reset the debouncing timer and, in case @paramfunc\n *          was already invoked in the meantime, return @param func's return value.\n *          The debounced function has two additional properties:\n *          - `flush`: Invokes the debounced function immediately and returns its return value\n *          - `cancel`: Cancels the debouncing process and resets the debouncing timer\n */\nfunction debounce(func, wait, options) {\n  return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.debounce)(func, wait, {\n    ...options,\n    // @ts-expect-error - Not quite sure why these types do not match, but this is fine\n    setTimeoutImpl: _sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.setTimeout,\n  });\n}\n\nconst NAVIGATOR = _sentry_core__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ.navigator;\n\n/**\n *  Disable sampling mousemove events on iOS browsers as this can cause blocking the main thread\n *  https://github.com/getsentry/sentry-javascript/issues/14534\n */\nfunction getRecordingSamplingOptions() {\n  if (\n    /iPhone|iPad|iPod/i.test(NAVIGATOR?.userAgent ?? '') ||\n    (/Macintosh/i.test(NAVIGATOR?.userAgent ?? '') && NAVIGATOR?.maxTouchPoints && NAVIGATOR?.maxTouchPoints > 1)\n  ) {\n    return {\n      sampling: {\n        mousemove: false,\n      },\n    };\n  }\n\n  return {};\n}\n\n/**\n * Handler for recording events.\n *\n * Adds to event buffer, and has varying flushing behaviors if the event was a checkout.\n */\nfunction getHandleRecordingEmit(replay) {\n  let hadFirstEvent = false;\n\n  return (event, _isCheckout) => {\n    // If this is false, it means session is expired, create and a new session and wait for checkout\n    if (!replay.checkAndHandleExpiredSession()) {\n      DEBUG_BUILD && debug.warn('Received replay event after session expired.');\n\n      return;\n    }\n\n    // `_isCheckout` is only set when the checkout is due to `checkoutEveryNms`\n    // We also want to treat the first event as a checkout, so we handle this specifically here\n    const isCheckout = _isCheckout || !hadFirstEvent;\n    hadFirstEvent = true;\n\n    if (replay.clickDetector) {\n      updateClickDetectorForRecordingEvent(replay.clickDetector, event);\n    }\n\n    // The handler returns `true` if we do not want to trigger debounced flush, `false` if we want to debounce flush.\n    replay.addUpdate(() => {\n      // The session is always started immediately on pageload/init, but for\n      // error-only replays, it should reflect the most recent checkout\n      // when an error occurs. Clear any state that happens before this current\n      // checkout. This needs to happen before `addEvent()` which updates state\n      // dependent on this reset.\n      if (replay.recordingMode === 'buffer' && isCheckout) {\n        replay.setInitialState();\n      }\n\n      // If the event is not added (e.g. due to being paused, disabled, or out of the max replay duration),\n      // Skip all further steps\n      if (!addEventSync(replay, event, isCheckout)) {\n        // Return true to skip scheduling a debounced flush\n        return true;\n      }\n\n      // Different behavior for full snapshots (type=2), ignore other event types\n      // See https://github.com/rrweb-io/rrweb/blob/d8f9290ca496712aa1e7d472549480c4e7876594/packages/rrweb/src/types.ts#L16\n      if (!isCheckout) {\n        return false;\n      }\n\n      const session = replay.session;\n\n      // Additionally, create a meta event that will capture certain SDK settings.\n      // In order to handle buffer mode, this needs to either be done when we\n      // receive checkout events or at flush time. We have an experimental mode\n      // to perform multiple checkouts a session (the idea is to improve\n      // seeking during playback), so also only include if segmentId is 0\n      // (handled in `addSettingsEvent`).\n      //\n      // `isCheckout` is always true, but want to be explicit that it should\n      // only be added for checkouts\n      addSettingsEvent(replay, isCheckout);\n\n      // When in buffer mode, make sure we adjust the session started date to the current earliest event of the buffer\n      // this should usually be the timestamp of the checkout event, but to be safe...\n      if (replay.recordingMode === 'buffer' && session && replay.eventBuffer) {\n        const earliestEvent = replay.eventBuffer.getEarliestTimestamp();\n        if (earliestEvent) {\n          DEBUG_BUILD &&\n            debug.log(`Updating session start time to earliest event in buffer to ${new Date(earliestEvent)}`);\n\n          session.started = earliestEvent;\n\n          if (replay.getOptions().stickySession) {\n            saveSession(session);\n          }\n        }\n      }\n\n      // If there is a previousSessionId after a full snapshot occurs, then\n      // the replay session was started due to session expiration. The new session\n      // is started before triggering a new checkout and contains the id\n      // of the previous session. Do not immediately flush in this case\n      // to avoid capturing only the checkout and instead the replay will\n      // be captured if they perform any follow-up actions.\n      if (session?.previousSessionId) {\n        return true;\n      }\n\n      if (replay.recordingMode === 'session') {\n        // If the full snapshot is due to an initial load, we will not have\n        // a previous session ID. In this case, we want to buffer events\n        // for a set amount of time before flushing. This can help avoid\n        // capturing replays of users that immediately close the window.\n\n        // This should never reject\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\n        void replay.flush();\n      }\n\n      return true;\n    });\n  };\n}\n\n/**\n * Exported for tests\n */\nfunction createOptionsEvent(replay) {\n  const options = replay.getOptions();\n  return {\n    type: EventType.Custom,\n    timestamp: Date.now(),\n    data: {\n      tag: 'options',\n      payload: {\n        shouldRecordCanvas: replay.isRecordingCanvas(),\n        sessionSampleRate: options.sessionSampleRate,\n        errorSampleRate: options.errorSampleRate,\n        useCompressionOption: options.useCompression,\n        blockAllMedia: options.blockAllMedia,\n        maskAllText: options.maskAllText,\n        maskAllInputs: options.maskAllInputs,\n        useCompression: replay.eventBuffer ? replay.eventBuffer.type === 'worker' : false,\n        networkDetailHasUrls: options.networkDetailAllowUrls.length > 0,\n        networkCaptureBodies: options.networkCaptureBodies,\n        networkRequestHasHeaders: options.networkRequestHeaders.length > 0,\n        networkResponseHasHeaders: options.networkResponseHeaders.length > 0,\n      },\n    },\n  };\n}\n\n/**\n * Add a \"meta\" event that contains a simplified view on current configuration\n * options. This should only be included on the first segment of a recording.\n */\nfunction addSettingsEvent(replay, isCheckout) {\n  // Only need to add this event when sending the first segment\n  if (!isCheckout || !replay.session || replay.session.segmentId !== 0) {\n    return;\n  }\n\n  addEventSync(replay, createOptionsEvent(replay), false);\n}\n\n/**\n * Vendored in from @sentry-internal/rrweb.\n *\n * This is a copy of the function from rrweb, it is not nicely exported there.\n */\nfunction closestElementOfNode(node) {\n  if (!node) {\n    return null;\n  }\n\n  // Catch access to node properties to avoid Firefox \"permission denied\" errors\n  try {\n    const el = node.nodeType === node.ELEMENT_NODE ? (node ) : node.parentElement;\n    return el;\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Create a replay envelope ready to be sent.\n * This includes both the replay event, as well as the recording data.\n */\nfunction createReplayEnvelope(\n  replayEvent,\n  recordingData,\n  dsn,\n  tunnel,\n) {\n  return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.createEnvelope)(\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.createEventEnvelopeHeaders)(replayEvent, (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getSdkMetadataForEnvelopeHeader)(replayEvent), tunnel, dsn),\n    [\n      [{ type: 'replay_event' }, replayEvent],\n      [\n        {\n          type: 'replay_recording',\n          // If string then we need to encode to UTF8, otherwise will have\n          // wrong size. TextEncoder has similar browser support to\n          // MutationObserver, although it does not accept IE11.\n          length:\n            typeof recordingData === 'string' ? new TextEncoder().encode(recordingData).length : recordingData.length,\n        },\n        recordingData,\n      ],\n    ],\n  );\n}\n\n/**\n * Prepare the recording data ready to be sent.\n */\nfunction prepareRecordingData({\n  recordingData,\n  headers,\n}\n\n) {\n  let payloadWithSequence;\n\n  // XXX: newline is needed to separate sequence id from events\n  const replayHeaders = `${JSON.stringify(headers)}\n`;\n\n  if (typeof recordingData === 'string') {\n    payloadWithSequence = `${replayHeaders}${recordingData}`;\n  } else {\n    const enc = new TextEncoder();\n    // XXX: newline is needed to separate sequence id from events\n    const sequence = enc.encode(replayHeaders);\n    // Merge the two Uint8Arrays\n    payloadWithSequence = new Uint8Array(sequence.length + recordingData.length);\n    payloadWithSequence.set(sequence);\n    payloadWithSequence.set(recordingData, sequence.length);\n  }\n\n  return payloadWithSequence;\n}\n\n/**\n * Prepare a replay event & enrich it with the SDK metadata.\n */\nasync function prepareReplayEvent({\n  client,\n  scope,\n  replayId: event_id,\n  event,\n}\n\n) {\n  const integrations =\n    typeof client['_integrations'] === 'object' &&\n    client['_integrations'] !== null &&\n    !Array.isArray(client['_integrations'])\n      ? Object.keys(client['_integrations'])\n      : undefined;\n\n  const eventHint = { event_id, integrations };\n\n  client.emit('preprocessEvent', event, eventHint);\n\n  const preparedEvent = (await (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.prepareEvent)(\n    client.getOptions(),\n    event,\n    eventHint,\n    scope,\n    client,\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getIsolationScope)(),\n  )) ;\n\n  // If e.g. a global event processor returned null\n  if (!preparedEvent) {\n    return null;\n  }\n\n  client.emit('postprocessEvent', preparedEvent, eventHint);\n\n  // This normally happens in browser client \"_prepareEvent\"\n  // but since we do not use this private method from the client, but rather the plain import\n  // we need to do this manually.\n  preparedEvent.platform = preparedEvent.platform || 'javascript';\n\n  // extract the SDK name because `client._prepareEvent` doesn't add it to the event\n  const metadata = client.getSdkMetadata();\n  const { name, version } = metadata?.sdk || {};\n\n  preparedEvent.sdk = {\n    ...preparedEvent.sdk,\n    name: name || 'sentry.javascript.unknown',\n    version: version || '0.0.0',\n  };\n\n  return preparedEvent;\n}\n\n/**\n * Send replay attachment using `fetch()`\n */\nasync function sendReplayRequest({\n  recordingData,\n  replayId,\n  segmentId: segment_id,\n  eventContext,\n  timestamp,\n  session,\n}) {\n  const preparedRecordingData = prepareRecordingData({\n    recordingData,\n    headers: {\n      segment_id,\n    },\n  });\n\n  const { urls, errorIds, traceIds, initialTimestamp } = eventContext;\n\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  const scope = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getCurrentScope)();\n  const transport = client?.getTransport();\n  const dsn = client?.getDsn();\n\n  if (!client || !transport || !dsn || !session.sampled) {\n    return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.resolvedSyncPromise)({});\n  }\n\n  const baseEvent = {\n    type: REPLAY_EVENT_NAME,\n    replay_start_timestamp: initialTimestamp / 1000,\n    timestamp: timestamp / 1000,\n    error_ids: errorIds,\n    trace_ids: traceIds,\n    urls,\n    replay_id: replayId,\n    segment_id,\n    replay_type: session.sampled,\n  };\n\n  const replayEvent = await prepareReplayEvent({ scope, client, replayId, event: baseEvent });\n\n  if (!replayEvent) {\n    // Taken from baseclient's `_processEvent` method, where this is handled for errors/transactions\n    client.recordDroppedEvent('event_processor', 'replay');\n    DEBUG_BUILD && debug.log('An event processor returned `null`, will not send event.');\n    return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.resolvedSyncPromise)({});\n  }\n\n  /*\n  For reference, the fully built event looks something like this:\n  {\n      \"type\": \"replay_event\",\n      \"timestamp\": 1670837008.634,\n      \"error_ids\": [\n          \"errorId\"\n      ],\n      \"trace_ids\": [\n          \"traceId\"\n      ],\n      \"urls\": [\n          \"https://example.com\"\n      ],\n      \"replay_id\": \"eventId\",\n      \"segment_id\": 3,\n      \"replay_type\": \"error\",\n      \"platform\": \"javascript\",\n      \"event_id\": \"eventId\",\n      \"environment\": \"production\",\n      \"sdk\": {\n          \"integrations\": [\n              \"BrowserTracing\",\n              \"Replay\"\n          ],\n          \"name\": \"sentry.javascript.browser\",\n          \"version\": \"7.25.0\"\n      },\n      \"sdkProcessingMetadata\": {},\n      \"contexts\": {\n      },\n  }\n  */\n\n  // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n  // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n  // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n  // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n  delete replayEvent.sdkProcessingMetadata;\n\n  const envelope = createReplayEnvelope(replayEvent, preparedRecordingData, dsn, client.getOptions().tunnel);\n\n  let response;\n\n  try {\n    response = await transport.send(envelope);\n  } catch (err) {\n    const error = new Error(UNABLE_TO_SEND_REPLAY);\n\n    try {\n      // In case browsers don't allow this property to be writable\n      // @ts-expect-error This needs lib es2022 and newer\n      error.cause = err;\n    } catch {\n      // nothing to do\n    }\n    throw error;\n  }\n\n  // If the status code is invalid, we want to immediately stop & not retry\n  if (typeof response.statusCode === 'number' && (response.statusCode < 200 || response.statusCode >= 300)) {\n    throw new TransportStatusCodeError(response.statusCode);\n  }\n\n  const rateLimits = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.updateRateLimits)({}, response);\n  if ((0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isRateLimited)(rateLimits, 'replay')) {\n    throw new RateLimitError(rateLimits);\n  }\n\n  return response;\n}\n\n/**\n * This error indicates that the transport returned an invalid status code.\n */\nclass TransportStatusCodeError extends Error {\n   constructor(statusCode) {\n    super(`Transport returned status code ${statusCode}`);\n  }\n}\n\n/**\n * This error indicates that we hit a rate limit API error.\n */\nclass RateLimitError extends Error {\n\n   constructor(rateLimits) {\n    super('Rate limit hit');\n    this.rateLimits = rateLimits;\n  }\n}\n\n/**\n * Finalize and send the current replay event to Sentry\n */\nasync function sendReplay(\n  replayData,\n  retryConfig = {\n    count: 0,\n    interval: RETRY_BASE_INTERVAL,\n  },\n) {\n  const { recordingData, onError } = replayData;\n\n  // short circuit if there's no events to upload (this shouldn't happen as _runFlush makes this check)\n  if (!recordingData.length) {\n    return;\n  }\n\n  try {\n    await sendReplayRequest(replayData);\n    return true;\n  } catch (err) {\n    if (err instanceof TransportStatusCodeError || err instanceof RateLimitError) {\n      throw err;\n    }\n\n    // Capture error for every failed replay\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.setContext)('Replays', {\n      _retryCount: retryConfig.count,\n    });\n\n    if (onError) {\n      onError(err);\n    }\n\n    // If an error happened here, it's likely that uploading the attachment\n    // failed, we'll can retry with the same events payload\n    if (retryConfig.count >= RETRY_MAX_COUNT) {\n      const error = new Error(`${UNABLE_TO_SEND_REPLAY} - max retries exceeded`);\n\n      try {\n        // In case browsers don't allow this property to be writable\n        // @ts-expect-error This needs lib es2022 and newer\n        error.cause = err;\n      } catch {\n        // nothing to do\n      }\n\n      throw error;\n    }\n\n    // will retry in intervals of 5, 10, 30\n    retryConfig.interval *= ++retryConfig.count;\n\n    return new Promise((resolve, reject) => {\n      (0,_sentry_internal_browser_utils__WEBPACK_IMPORTED_MODULE_1__.setTimeout)(async () => {\n        try {\n          await sendReplay(replayData, retryConfig);\n          resolve(true);\n        } catch (err) {\n          reject(err);\n        }\n      }, retryConfig.interval);\n    });\n  }\n}\n\nconst THROTTLED = '__THROTTLED';\nconst SKIPPED = '__SKIPPED';\n\n/**\n * Create a throttled function off a given function.\n * When calling the throttled function, it will call the original function only\n * if it hasn't been called more than `maxCount` times in the last `durationSeconds`.\n *\n * Returns `THROTTLED` if throttled for the first time, after that `SKIPPED`,\n * or else the return value of the original function.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction throttle(\n  fn,\n  maxCount,\n  durationSeconds,\n) {\n  const counter = new Map();\n\n  const _cleanup = (now) => {\n    const threshold = now - durationSeconds;\n    counter.forEach((_value, key) => {\n      if (key < threshold) {\n        counter.delete(key);\n      }\n    });\n  };\n\n  const _getTotalCount = () => {\n    return [...counter.values()].reduce((a, b) => a + b, 0);\n  };\n\n  let isThrottled = false;\n\n  return (...rest) => {\n    // Date in second-precision, which we use as basis for the throttling\n    const now = Math.floor(Date.now() / 1000);\n\n    // First, make sure to delete any old entries\n    _cleanup(now);\n\n    // If already over limit, do nothing\n    if (_getTotalCount() >= maxCount) {\n      const wasThrottled = isThrottled;\n      isThrottled = true;\n      return wasThrottled ? SKIPPED : THROTTLED;\n    }\n\n    isThrottled = false;\n    const count = counter.get(now) || 0;\n    counter.set(now, count + 1);\n\n    return fn(...rest);\n  };\n}\n\n/**\n * The main replay container class, which holds all the state and methods for recording and sending replays.\n */\nclass ReplayContainer  {\n\n  /**\n   * Recording can happen in one of two modes:\n   *   - session: Record the whole session, sending it continuously\n   *   - buffer: Always keep the last 60s of recording, requires:\n   *     - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs\n   *     - or calling `flush()` to send the replay\n   */\n\n  /**\n   * The current or last active span.\n   * This is only available when performance is enabled.\n   */\n\n  /**\n   * These are here so we can overwrite them in tests etc.\n   * @hidden\n   */\n\n  /** The replay has to be manually started, because no sample rate (neither session or error) was provided. */\n\n  /**\n   * Options to pass to `rrweb.record()`\n   */\n\n  /**\n   * Timestamp of the last user activity. This lives across sessions.\n   */\n\n  /**\n   * Is the integration currently active?\n   */\n\n  /**\n   * Paused is a state where:\n   * - DOM Recording is not listening at all\n   * - Nothing will be added to event buffer (e.g. core SDK events)\n   */\n\n  /**\n   * Have we attached listeners to the core SDK?\n   * Note we have to track this as there is no way to remove instrumentation handlers.\n   */\n\n  /**\n   * Function to stop recording\n   */\n\n  /**\n   * Internal use for canvas recording options\n   */\n\n  /**\n   * Handle when visibility of the page content changes. Opening a new tab will\n   * cause the state to change to hidden because of content of current page will\n   * be hidden. Likewise, moving a different window to cover the contents of the\n   * page will also trigger a change to a hidden state.\n   */\n\n  /**\n   * Handle when page is blurred\n   */\n\n  /**\n   * Handle when page is focused\n   */\n\n  /** Ensure page remains active when a key is pressed. */\n\n   constructor({\n    options,\n    recordingOptions,\n  }\n\n) {\n    this.eventBuffer = null;\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n    this.recordingMode = 'session';\n    this.timeouts = {\n      sessionIdlePause: SESSION_IDLE_PAUSE_DURATION,\n      sessionIdleExpire: SESSION_IDLE_EXPIRE_DURATION,\n    } ;\n    this._lastActivity = Date.now();\n    this._isEnabled = false;\n    this._isPaused = false;\n    this._requiresManualStart = false;\n    this._hasInitializedCoreListeners = false;\n    this._context = {\n      errorIds: new Set(),\n      traceIds: new Set(),\n      urls: [],\n      initialTimestamp: Date.now(),\n      initialUrl: '',\n    };\n\n    this._recordingOptions = recordingOptions;\n    this._options = options;\n\n    this._debouncedFlush = debounce(() => this._flush(), this._options.flushMinDelay, {\n      maxWait: this._options.flushMaxDelay,\n    });\n\n    this._throttledAddEvent = throttle(\n      (event, isCheckout) => addEvent(this, event, isCheckout),\n      // Max 300 events...\n      300,\n      // ... per 5s\n      5,\n    );\n\n    const { slowClickTimeout, slowClickIgnoreSelectors } = this.getOptions();\n\n    const slowClickConfig = slowClickTimeout\n      ? {\n          threshold: Math.min(SLOW_CLICK_THRESHOLD, slowClickTimeout),\n          timeout: slowClickTimeout,\n          scrollTimeout: SLOW_CLICK_SCROLL_TIMEOUT,\n          ignoreSelector: slowClickIgnoreSelectors ? slowClickIgnoreSelectors.join(',') : '',\n        }\n      : undefined;\n\n    if (slowClickConfig) {\n      this.clickDetector = new ClickDetector(this, slowClickConfig);\n    }\n\n    // Configure replay debug logger w/ experimental options\n    if (DEBUG_BUILD) {\n      const experiments = options._experiments;\n      debug.setConfig({\n        captureExceptions: !!experiments.captureExceptions,\n        traceInternals: !!experiments.traceInternals,\n      });\n    }\n\n    // We set these handler properties as class properties, to make binding/unbinding them easier\n    this._handleVisibilityChange = () => {\n      if (WINDOW.document.visibilityState === 'visible') {\n        this._doChangeToForegroundTasks();\n      } else {\n        this._doChangeToBackgroundTasks();\n      }\n    };\n\n    /**\n     * Handle when page is blurred\n     */\n    this._handleWindowBlur = () => {\n      const breadcrumb = createBreadcrumb({\n        category: 'ui.blur',\n      });\n\n      // Do not count blur as a user action -- it's part of the process of them\n      // leaving the page\n      this._doChangeToBackgroundTasks(breadcrumb);\n    };\n\n    this._handleWindowFocus = () => {\n      const breadcrumb = createBreadcrumb({\n        category: 'ui.focus',\n      });\n\n      // Do not count focus as a user action -- instead wait until they focus and\n      // interactive with page\n      this._doChangeToForegroundTasks(breadcrumb);\n    };\n\n    /** Ensure page remains active when a key is pressed. */\n    this._handleKeyboardEvent = (event) => {\n      handleKeyboardEvent(this, event);\n    };\n  }\n\n  /** Get the event context. */\n   getContext() {\n    return this._context;\n  }\n\n  /** If recording is currently enabled. */\n   isEnabled() {\n    return this._isEnabled;\n  }\n\n  /** If recording is currently paused. */\n   isPaused() {\n    return this._isPaused;\n  }\n\n  /**\n   * Determine if canvas recording is enabled\n   */\n   isRecordingCanvas() {\n    return Boolean(this._canvas);\n  }\n\n  /** Get the replay integration options. */\n   getOptions() {\n    return this._options;\n  }\n\n  /** A wrapper to conditionally capture exceptions. */\n   handleException(error) {\n    DEBUG_BUILD && debug.exception(error);\n    if (this._options.onError) {\n      this._options.onError(error);\n    }\n  }\n\n  /**\n   * Initializes the plugin based on sampling configuration. Should not be\n   * called outside of constructor.\n   */\n   initializeSampling(previousSessionId) {\n    const { errorSampleRate, sessionSampleRate } = this._options;\n\n    // If neither sample rate is > 0, then do nothing - user will need to call one of\n    // `start()` or `startBuffering` themselves.\n    const requiresManualStart = errorSampleRate <= 0 && sessionSampleRate <= 0;\n\n    this._requiresManualStart = requiresManualStart;\n\n    if (requiresManualStart) {\n      return;\n    }\n\n    // Otherwise if there is _any_ sample rate set, try to load an existing\n    // session, or create a new one.\n    this._initializeSessionForSampling(previousSessionId);\n\n    if (!this.session) {\n      // This should not happen, something wrong has occurred\n      DEBUG_BUILD && debug.exception(new Error('Unable to initialize and create session'));\n      return;\n    }\n\n    if (this.session.sampled === false) {\n      // This should only occur if `errorSampleRate` is 0 and was unsampled for\n      // session-based replay. In this case there is nothing to do.\n      return;\n    }\n\n    // If segmentId > 0, it means we've previously already captured this session\n    // In this case, we still want to continue in `session` recording mode\n    this.recordingMode = this.session.sampled === 'buffer' && this.session.segmentId === 0 ? 'buffer' : 'session';\n\n    DEBUG_BUILD && debug.infoTick(`Starting replay in ${this.recordingMode} mode`);\n\n    this._initializeRecording();\n  }\n\n  /**\n   * Start a replay regardless of sampling rate. Calling this will always\n   * create a new session. Will log a message if replay is already in progress.\n   *\n   * Creates or loads a session, attaches listeners to varying events (DOM,\n   * _performanceObserver, Recording, Sentry SDK, etc)\n   */\n   start() {\n    if (this._isEnabled && this.recordingMode === 'session') {\n      DEBUG_BUILD && debug.log('Recording is already in progress');\n      return;\n    }\n\n    if (this._isEnabled && this.recordingMode === 'buffer') {\n      DEBUG_BUILD && debug.log('Buffering is in progress, call `flush()` to save the replay');\n      return;\n    }\n\n    DEBUG_BUILD && debug.infoTick('Starting replay in session mode');\n\n    // Required as user activity is initially set in\n    // constructor, so if `start()` is called after\n    // session idle expiration, a replay will not be\n    // created due to an idle timeout.\n    this._updateUserActivity();\n\n    const session = loadOrCreateSession(\n      {\n        maxReplayDuration: this._options.maxReplayDuration,\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n      },\n      {\n        stickySession: this._options.stickySession,\n        // This is intentional: create a new session-based replay when calling `start()`\n        sessionSampleRate: 1,\n        allowBuffering: false,\n      },\n    );\n\n    this.session = session;\n    this.recordingMode = 'session';\n\n    this._initializeRecording();\n  }\n\n  /**\n   * Start replay buffering. Buffers until `flush()` is called or, if\n   * `replaysOnErrorSampleRate` > 0, an error occurs.\n   */\n   startBuffering() {\n    if (this._isEnabled) {\n      DEBUG_BUILD && debug.log('Buffering is in progress, call `flush()` to save the replay');\n      return;\n    }\n\n    DEBUG_BUILD && debug.infoTick('Starting replay in buffer mode');\n\n    const session = loadOrCreateSession(\n      {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n      },\n      {\n        stickySession: this._options.stickySession,\n        sessionSampleRate: 0,\n        allowBuffering: true,\n      },\n    );\n\n    this.session = session;\n\n    this.recordingMode = 'buffer';\n    this._initializeRecording();\n  }\n\n  /**\n   * Start recording.\n   *\n   * Note that this will cause a new DOM checkout\n   */\n   startRecording() {\n    try {\n      const canvasOptions = this._canvas;\n\n      this._stopRecording = record({\n        ...this._recordingOptions,\n        // When running in error sampling mode, we need to overwrite `checkoutEveryNms`\n        // Without this, it would record forever, until an error happens, which we don't want\n        // instead, we'll always keep the last 60 seconds of replay before an error happened\n        ...(this.recordingMode === 'buffer'\n          ? { checkoutEveryNms: BUFFER_CHECKOUT_TIME }\n          : // Otherwise, use experimental option w/ min checkout time of 6 minutes\n            // This is to improve playback seeking as there could potentially be\n            // less mutations to process in the worse cases.\n            //\n            // checkout by \"N\" events is probably ideal, but means we have less\n            // control about the number of checkouts we make (which generally\n            // increases replay size)\n            this._options._experiments.continuousCheckout && {\n              // Minimum checkout time is 6 minutes\n              checkoutEveryNms: Math.max(360000, this._options._experiments.continuousCheckout),\n            }),\n        emit: getHandleRecordingEmit(this),\n        ...getRecordingSamplingOptions(),\n        onMutation: this._onMutationHandler.bind(this),\n        ...(canvasOptions\n          ? {\n              recordCanvas: canvasOptions.recordCanvas,\n              getCanvasManager: canvasOptions.getCanvasManager,\n              sampling: canvasOptions.sampling,\n              dataURLOptions: canvasOptions.dataURLOptions,\n            }\n          : {}),\n      });\n    } catch (err) {\n      this.handleException(err);\n    }\n  }\n\n  /**\n   * Stops the recording, if it was running.\n   *\n   * Returns true if it was previously stopped, or is now stopped,\n   * otherwise false.\n   */\n   stopRecording() {\n    try {\n      if (this._stopRecording) {\n        this._stopRecording();\n        this._stopRecording = undefined;\n      }\n\n      return true;\n    } catch (err) {\n      this.handleException(err);\n      return false;\n    }\n  }\n\n  /**\n   * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n   * does not support a teardown\n   */\n   async stop({ forceFlush = false, reason } = {}) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    // We can't move `_isEnabled` after awaiting a flush, otherwise we can\n    // enter into an infinite loop when `stop()` is called while flushing.\n    this._isEnabled = false;\n\n    // Make sure to reset `recordingMode` to `buffer` to avoid any additional\n    // breadcrumbs to trigger a flush (e.g. in `addUpdate()`)\n    this.recordingMode = 'buffer';\n\n    try {\n      DEBUG_BUILD && debug.log(`Stopping Replay${reason ? ` triggered by ${reason}` : ''}`);\n\n      resetReplayIdOnDynamicSamplingContext();\n\n      this._removeListeners();\n      this.stopRecording();\n\n      this._debouncedFlush.cancel();\n      // See comment above re: `_isEnabled`, we \"force\" a flush, ignoring the\n      // `_isEnabled` state of the plugin since it was disabled above.\n      if (forceFlush) {\n        await this._flush({ force: true });\n      }\n\n      // After flush, destroy event buffer\n      this.eventBuffer?.destroy();\n      this.eventBuffer = null;\n\n      // Clear session from session storage, note this means if a new session\n      // is started after, it will not have `previousSessionId`\n      clearSession(this);\n    } catch (err) {\n      this.handleException(err);\n    }\n  }\n\n  /**\n   * Pause some replay functionality. See comments for `_isPaused`.\n   * This differs from stop as this only stops DOM recording, it is\n   * not as thorough of a shutdown as `stop()`.\n   */\n   pause() {\n    if (this._isPaused) {\n      return;\n    }\n\n    this._isPaused = true;\n    this.stopRecording();\n\n    DEBUG_BUILD && debug.log('Pausing replay');\n  }\n\n  /**\n   * Resumes recording, see notes for `pause().\n   *\n   * Note that calling `startRecording()` here will cause a\n   * new DOM checkout.`\n   */\n   resume() {\n    if (!this._isPaused || !this._checkSession()) {\n      return;\n    }\n\n    this._isPaused = false;\n    this.startRecording();\n\n    DEBUG_BUILD && debug.log('Resuming replay');\n  }\n\n  /**\n   * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n   * Unless `continueRecording` is false, the replay will continue to record and\n   * behave as a \"session\"-based replay.\n   *\n   * Otherwise, queue up a flush.\n   */\n   async sendBufferedReplayOrFlush({ continueRecording = true } = {}) {\n    if (this.recordingMode === 'session') {\n      return this.flushImmediate();\n    }\n\n    const activityTime = Date.now();\n\n    DEBUG_BUILD && debug.log('Converting buffer to session');\n\n    // Allow flush to complete before resuming as a session recording, otherwise\n    // the checkout from `startRecording` may be included in the payload.\n    // Prefer to keep the error replay as a separate (and smaller) segment\n    // than the session replay.\n    await this.flushImmediate();\n\n    const hasStoppedRecording = this.stopRecording();\n\n    if (!continueRecording || !hasStoppedRecording) {\n      return;\n    }\n\n    // To avoid race conditions where this is called multiple times, we check here again that we are still buffering\n    if ((this.recordingMode ) === 'session') {\n      return;\n    }\n\n    // Re-start recording in session-mode\n    this.recordingMode = 'session';\n\n    // Once this session ends, we do not want to refresh it\n    if (this.session) {\n      this._updateUserActivity(activityTime);\n      this._updateSessionActivity(activityTime);\n      this._maybeSaveSession();\n    }\n\n    this.startRecording();\n  }\n\n  /**\n   * We want to batch uploads of replay events. Save events only if\n   * `<flushMinDelay>` milliseconds have elapsed since the last event\n   * *OR* if `<flushMaxDelay>` milliseconds have elapsed.\n   *\n   * Accepts a callback to perform side-effects and returns true to stop batch\n   * processing and hand back control to caller.\n   */\n   addUpdate(cb) {\n    // We need to always run `cb` (e.g. in the case of `this.recordingMode == 'buffer'`)\n    const cbResult = cb();\n\n    // If this option is turned on then we will only want to call `flush`\n    // explicitly\n    if (this.recordingMode === 'buffer' || !this._isEnabled) {\n      return;\n    }\n\n    // If callback is true, we do not want to continue with flushing -- the\n    // caller will need to handle it.\n    if (cbResult === true) {\n      return;\n    }\n\n    // addUpdate is called quite frequently - use _debouncedFlush so that it\n    // respects the flush delays and does not flush immediately\n    this._debouncedFlush();\n  }\n\n  /**\n   * Updates the user activity timestamp and resumes recording. This should be\n   * called in an event handler for a user action that we consider as the user\n   * being \"active\" (e.g. a mouse click).\n   */\n   triggerUserActivity() {\n    this._updateUserActivity();\n\n    // This case means that recording was once stopped due to inactivity.\n    // Ensure that recording is resumed.\n    if (!this._stopRecording) {\n      // Create a new session, otherwise when the user action is flushed, it\n      // will get rejected due to an expired session.\n      if (!this._checkSession()) {\n        return;\n      }\n\n      // Note: This will cause a new DOM checkout\n      this.resume();\n      return;\n    }\n\n    // Otherwise... recording was never suspended, continue as normalish\n    this.checkAndHandleExpiredSession();\n\n    this._updateSessionActivity();\n  }\n\n  /**\n   * Updates the user activity timestamp *without* resuming\n   * recording. Some user events (e.g. keydown) can be create\n   * low-value replays that only contain the keypress as a\n   * breadcrumb. Instead this would require other events to\n   * create a new replay after a session has expired.\n   */\n   updateUserActivity() {\n    this._updateUserActivity();\n    this._updateSessionActivity();\n  }\n\n  /**\n   * Only flush if `this.recordingMode === 'session'`\n   */\n   conditionalFlush() {\n    if (this.recordingMode === 'buffer') {\n      return Promise.resolve();\n    }\n\n    return this.flushImmediate();\n  }\n\n  /**\n   * Flush using debounce flush\n   */\n   flush() {\n    return this._debouncedFlush() ;\n  }\n\n  /**\n   * Always flush via `_debouncedFlush` so that we do not have flushes triggered\n   * from calling both `flush` and `_debouncedFlush`. Otherwise, there could be\n   * cases of multiple flushes happening closely together.\n   */\n   flushImmediate() {\n    this._debouncedFlush();\n    // `.flush` is provided by the debounced function, analogously to lodash.debounce\n    return this._debouncedFlush.flush() ;\n  }\n\n  /**\n   * Cancels queued up flushes.\n   */\n   cancelFlush() {\n    this._debouncedFlush.cancel();\n  }\n\n  /** Get the current session (=replay) ID */\n   getSessionId() {\n    return this.session?.id;\n  }\n\n  /**\n   * Checks if recording should be stopped due to user inactivity. Otherwise\n   * check if session is expired and create a new session if so. Triggers a new\n   * full snapshot on new session.\n   *\n   * Returns true if session is not expired, false otherwise.\n   * @hidden\n   */\n   checkAndHandleExpiredSession() {\n    // Prevent starting a new session if the last user activity is older than\n    // SESSION_IDLE_PAUSE_DURATION. Otherwise non-user activity can trigger a new\n    // session+recording. This creates noisy replays that do not have much\n    // content in them.\n    if (\n      this._lastActivity &&\n      isExpired(this._lastActivity, this.timeouts.sessionIdlePause) &&\n      this.session &&\n      this.session.sampled === 'session'\n    ) {\n      // Pause recording only for session-based replays. Otherwise, resuming\n      // will create a new replay and will conflict with users who only choose\n      // to record error-based replays only. (e.g. the resumed replay will not\n      // contain a reference to an error)\n      this.pause();\n      return;\n    }\n\n    // --- There is recent user activity --- //\n    // This will create a new session if expired, based on expiry length\n    if (!this._checkSession()) {\n      // Check session handles the refreshing itself\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Capture some initial state that can change throughout the lifespan of the\n   * replay. This is required because otherwise they would be captured at the\n   * first flush.\n   */\n   setInitialState() {\n    const urlPath = `${WINDOW.location.pathname}${WINDOW.location.hash}${WINDOW.location.search}`;\n    const url = `${WINDOW.location.origin}${urlPath}`;\n\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n\n    // Reset _context as well\n    this._clearContext();\n\n    this._context.initialUrl = url;\n    this._context.initialTimestamp = Date.now();\n    this._context.urls.push(url);\n  }\n\n  /**\n   * Add a breadcrumb event, that may be throttled.\n   * If it was throttled, we add a custom breadcrumb to indicate that.\n   */\n   throttledAddEvent(\n    event,\n    isCheckout,\n  ) {\n    const res = this._throttledAddEvent(event, isCheckout);\n\n    // If this is THROTTLED, it means we have throttled the event for the first time\n    // In this case, we want to add a breadcrumb indicating that something was skipped\n    if (res === THROTTLED) {\n      const breadcrumb = createBreadcrumb({\n        category: 'replay.throttled',\n      });\n\n      this.addUpdate(() => {\n        // Return `false` if the event _was_ added, as that means we schedule a flush\n        return !addEventSync(this, {\n          type: ReplayEventTypeCustom,\n          timestamp: breadcrumb.timestamp || 0,\n          data: {\n            tag: 'breadcrumb',\n            payload: breadcrumb,\n            metric: true,\n          },\n        });\n      });\n    }\n\n    return res;\n  }\n\n  /**\n   * This will get the parametrized route name of the current page.\n   * This is only available if performance is enabled, and if an instrumented router is used.\n   */\n   getCurrentRoute() {\n    const lastActiveSpan = this.lastActiveSpan || (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getActiveSpan)();\n    const lastRootSpan = lastActiveSpan && (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getRootSpan)(lastActiveSpan);\n\n    const attributes = (lastRootSpan && (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(lastRootSpan).data) || {};\n    const source = attributes[_sentry_core__WEBPACK_IMPORTED_MODULE_0__.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n    if (!lastRootSpan || !source || !['route', 'custom'].includes(source)) {\n      return undefined;\n    }\n\n    return (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.spanToJSON)(lastRootSpan).description;\n  }\n\n  /**\n   * Initialize and start all listeners to varying events (DOM,\n   * Performance Observer, Recording, Sentry SDK, etc)\n   */\n   _initializeRecording() {\n    this.setInitialState();\n\n    // this method is generally called on page load or manually - in both cases\n    // we should treat it as an activity\n    this._updateSessionActivity();\n\n    this.eventBuffer = createEventBuffer({\n      useCompression: this._options.useCompression,\n      workerUrl: this._options.workerUrl,\n    });\n\n    this._removeListeners();\n    this._addListeners();\n\n    // Need to set as enabled before we start recording, as `record()` can trigger a flush with a new checkout\n    this._isEnabled = true;\n    this._isPaused = false;\n\n    this.startRecording();\n  }\n\n  /**\n   * Loads (or refreshes) the current session.\n   */\n   _initializeSessionForSampling(previousSessionId) {\n    // Whenever there is _any_ error sample rate, we always allow buffering\n    // Because we decide on sampling when an error occurs, we need to buffer at all times if sampling for errors\n    const allowBuffering = this._options.errorSampleRate > 0;\n\n    const session = loadOrCreateSession(\n      {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n        previousSessionId,\n      },\n      {\n        stickySession: this._options.stickySession,\n        sessionSampleRate: this._options.sessionSampleRate,\n        allowBuffering,\n      },\n    );\n\n    this.session = session;\n  }\n\n  /**\n   * Checks and potentially refreshes the current session.\n   * Returns false if session is not recorded.\n   */\n   _checkSession() {\n    // If there is no session yet, we do not want to refresh anything\n    // This should generally not happen, but to be safe....\n    if (!this.session) {\n      return false;\n    }\n\n    const currentSession = this.session;\n\n    if (\n      shouldRefreshSession(currentSession, {\n        sessionIdleExpire: this.timeouts.sessionIdleExpire,\n        maxReplayDuration: this._options.maxReplayDuration,\n      })\n    ) {\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this._refreshSession(currentSession);\n      return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Refresh a session with a new one.\n   * This stops the current session (without forcing a flush, as that would never work since we are expired),\n   * and then does a new sampling based on the refreshed session.\n   */\n   async _refreshSession(session) {\n    if (!this._isEnabled) {\n      return;\n    }\n    await this.stop({ reason: 'refresh session' });\n    this.initializeSampling(session.id);\n  }\n\n  /**\n   * Adds listeners to record events for the replay\n   */\n   _addListeners() {\n    try {\n      WINDOW.document.addEventListener('visibilitychange', this._handleVisibilityChange);\n      WINDOW.addEventListener('blur', this._handleWindowBlur);\n      WINDOW.addEventListener('focus', this._handleWindowFocus);\n      WINDOW.addEventListener('keydown', this._handleKeyboardEvent);\n\n      if (this.clickDetector) {\n        this.clickDetector.addListeners();\n      }\n\n      // There is no way to remove these listeners, so ensure they are only added once\n      if (!this._hasInitializedCoreListeners) {\n        addGlobalListeners(this);\n\n        this._hasInitializedCoreListeners = true;\n      }\n    } catch (err) {\n      this.handleException(err);\n    }\n\n    this._performanceCleanupCallback = setupPerformanceObserver(this);\n  }\n\n  /**\n   * Cleans up listeners that were created in `_addListeners`\n   */\n   _removeListeners() {\n    try {\n      WINDOW.document.removeEventListener('visibilitychange', this._handleVisibilityChange);\n\n      WINDOW.removeEventListener('blur', this._handleWindowBlur);\n      WINDOW.removeEventListener('focus', this._handleWindowFocus);\n      WINDOW.removeEventListener('keydown', this._handleKeyboardEvent);\n\n      if (this.clickDetector) {\n        this.clickDetector.removeListeners();\n      }\n\n      if (this._performanceCleanupCallback) {\n        this._performanceCleanupCallback();\n      }\n    } catch (err) {\n      this.handleException(err);\n    }\n  }\n\n  /**\n   * Tasks to run when we consider a page to be hidden (via blurring and/or visibility)\n   */\n   _doChangeToBackgroundTasks(breadcrumb) {\n    if (!this.session) {\n      return;\n    }\n\n    const expired = isSessionExpired(this.session, {\n      maxReplayDuration: this._options.maxReplayDuration,\n      sessionIdleExpire: this.timeouts.sessionIdleExpire,\n    });\n\n    if (expired) {\n      return;\n    }\n\n    if (breadcrumb) {\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n\n    // Send replay when the page/tab becomes hidden. There is no reason to send\n    // replay if it becomes visible, since no actions we care about were done\n    // while it was hidden\n    // This should never reject\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\n    void this.conditionalFlush();\n  }\n\n  /**\n   * Tasks to run when we consider a page to be visible (via focus and/or visibility)\n   */\n   _doChangeToForegroundTasks(breadcrumb) {\n    if (!this.session) {\n      return;\n    }\n\n    const isSessionActive = this.checkAndHandleExpiredSession();\n\n    if (!isSessionActive) {\n      // If the user has come back to the page within SESSION_IDLE_PAUSE_DURATION\n      // ms, we will re-use the existing session, otherwise create a new\n      // session\n      DEBUG_BUILD && debug.log('Document has become active, but session has expired');\n      return;\n    }\n\n    if (breadcrumb) {\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n  }\n\n  /**\n   * Update user activity (across session lifespans)\n   */\n   _updateUserActivity(_lastActivity = Date.now()) {\n    this._lastActivity = _lastActivity;\n  }\n\n  /**\n   * Updates the session's last activity timestamp\n   */\n   _updateSessionActivity(_lastActivity = Date.now()) {\n    if (this.session) {\n      this.session.lastActivity = _lastActivity;\n      this._maybeSaveSession();\n    }\n  }\n\n  /**\n   * Helper to create (and buffer) a replay breadcrumb from a core SDK breadcrumb\n   */\n   _createCustomBreadcrumb(breadcrumb) {\n    this.addUpdate(() => {\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this.throttledAddEvent({\n        type: EventType.Custom,\n        timestamp: breadcrumb.timestamp || 0,\n        data: {\n          tag: 'breadcrumb',\n          payload: breadcrumb,\n        },\n      });\n    });\n  }\n\n  /**\n   * Observed performance events are added to `this.performanceEntries`. These\n   * are included in the replay event before it is finished and sent to Sentry.\n   */\n   _addPerformanceEntries() {\n    let performanceEntries = createPerformanceEntries(this.performanceEntries).concat(this.replayPerformanceEntries);\n\n    this.performanceEntries = [];\n    this.replayPerformanceEntries = [];\n\n    // If we are manually starting, we want to ensure we only include performance entries\n    // that are after the initial timestamp\n    // The reason for this is that we may have performance entries from the page load, but may decide to start\n    // the replay later on, in which case we do not want to include these entries.\n    // without this, manually started replays can have events long before the actual replay recording starts,\n    // which messes with the timeline etc.\n    if (this._requiresManualStart) {\n      const initialTimestampInSeconds = this._context.initialTimestamp / 1000;\n      performanceEntries = performanceEntries.filter(entry => entry.start >= initialTimestampInSeconds);\n    }\n\n    return Promise.all(createPerformanceSpans(this, performanceEntries));\n  }\n\n  /**\n   * Clear _context\n   */\n   _clearContext() {\n    // XXX: `initialTimestamp` and `initialUrl` do not get cleared\n    this._context.errorIds.clear();\n    this._context.traceIds.clear();\n    this._context.urls = [];\n  }\n\n  /** Update the initial timestamp based on the buffer content. */\n   _updateInitialTimestampFromEventBuffer() {\n    const { session, eventBuffer } = this;\n    // If replay was started manually (=no sample rate was given),\n    // We do not want to back-port the initial timestamp\n    if (!session || !eventBuffer || this._requiresManualStart) {\n      return;\n    }\n\n    // we only ever update this on the initial segment\n    if (session.segmentId) {\n      return;\n    }\n\n    const earliestEvent = eventBuffer.getEarliestTimestamp();\n    if (earliestEvent && earliestEvent < this._context.initialTimestamp) {\n      this._context.initialTimestamp = earliestEvent;\n    }\n  }\n\n  /**\n   * Return and clear _context\n   */\n   _popEventContext() {\n    const _context = {\n      initialTimestamp: this._context.initialTimestamp,\n      initialUrl: this._context.initialUrl,\n      errorIds: Array.from(this._context.errorIds),\n      traceIds: Array.from(this._context.traceIds),\n      urls: this._context.urls,\n    };\n\n    this._clearContext();\n\n    return _context;\n  }\n\n  /**\n   * Flushes replay event buffer to Sentry.\n   *\n   * Performance events are only added right before flushing - this is\n   * due to the buffered performance observer events.\n   *\n   * Should never be called directly, only by `flush`\n   */\n   async _runFlush() {\n    const replayId = this.getSessionId();\n\n    if (!this.session || !this.eventBuffer || !replayId) {\n      DEBUG_BUILD && debug.error('No session or eventBuffer found to flush.');\n      return;\n    }\n\n    await this._addPerformanceEntries();\n\n    // Check eventBuffer again, as it could have been stopped in the meanwhile\n    if (!this.eventBuffer?.hasEvents) {\n      return;\n    }\n\n    // Only attach memory event if eventBuffer is not empty\n    await addMemoryEntry(this);\n\n    // Check eventBuffer again, as it could have been stopped in the meanwhile\n    if (!this.eventBuffer) {\n      return;\n    }\n\n    // if this changed in the meanwhile, e.g. because the session was refreshed or similar, we abort here\n    if (replayId !== this.getSessionId()) {\n      return;\n    }\n\n    try {\n      // This uses the data from the eventBuffer, so we need to call this before `finish()\n      this._updateInitialTimestampFromEventBuffer();\n\n      const timestamp = Date.now();\n\n      // Check total duration again, to avoid sending outdated stuff\n      // We leave 30s wiggle room to accommodate late flushing etc.\n      // This _could_ happen when the browser is suspended during flushing, in which case we just want to stop\n      if (timestamp - this._context.initialTimestamp > this._options.maxReplayDuration + 30000) {\n        throw new Error('Session is too long, not sending replay');\n      }\n\n      const eventContext = this._popEventContext();\n      // Always increment segmentId regardless of outcome of sending replay\n      const segmentId = this.session.segmentId++;\n      this._maybeSaveSession();\n\n      // Note this empties the event buffer regardless of outcome of sending replay\n      const recordingData = await this.eventBuffer.finish();\n\n      await sendReplay({\n        replayId,\n        recordingData,\n        segmentId,\n        eventContext,\n        session: this.session,\n        timestamp,\n        onError: err => this.handleException(err),\n      });\n    } catch (err) {\n      this.handleException(err);\n\n      // This means we retried 3 times and all of them failed,\n      // or we ran into a problem we don't want to retry, like rate limiting.\n      // In this case, we want to completely stop the replay - otherwise, we may get inconsistent segments\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this.stop({ reason: 'sendReplay' });\n\n      const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n\n      if (client) {\n        const dropReason = err instanceof RateLimitError ? 'ratelimit_backoff' : 'send_error';\n        client.recordDroppedEvent(dropReason, 'replay');\n      }\n    }\n  }\n\n  /**\n   * Flush recording data to Sentry. Creates a lock so that only a single flush\n   * can be active at a time. Do not call this directly.\n   */\n   async _flush({\n    force = false,\n  }\n\n = {}) {\n    if (!this._isEnabled && !force) {\n      // This can happen if e.g. the replay was stopped because of exceeding the retry limit\n      return;\n    }\n\n    if (!this.checkAndHandleExpiredSession()) {\n      DEBUG_BUILD && debug.error('Attempting to finish replay event after session expired.');\n      return;\n    }\n\n    if (!this.session) {\n      // should never happen, as we would have bailed out before\n      return;\n    }\n\n    const start = this.session.started;\n    const now = Date.now();\n    const duration = now - start;\n\n    // A flush is about to happen, cancel any queued flushes\n    this._debouncedFlush.cancel();\n\n    // If session is too short, or too long (allow some wiggle room over maxReplayDuration), do not send it\n    // This _should_ not happen, but it may happen if flush is triggered due to a page activity change or similar\n    const tooShort = duration < this._options.minReplayDuration;\n    const tooLong = duration > this._options.maxReplayDuration + 5000;\n    if (tooShort || tooLong) {\n      DEBUG_BUILD &&\n        debug.log(\n          `Session duration (${Math.floor(duration / 1000)}s) is too ${\n            tooShort ? 'short' : 'long'\n          }, not sending replay.`,\n        );\n\n      if (tooShort) {\n        this._debouncedFlush();\n      }\n      return;\n    }\n\n    const eventBuffer = this.eventBuffer;\n    if (eventBuffer && this.session.segmentId === 0 && !eventBuffer.hasCheckout) {\n      DEBUG_BUILD && debug.log('Flushing initial segment without checkout.');\n      // TODO FN: Evaluate if we want to stop here, or remove this again?\n    }\n\n    const _flushInProgress = !!this._flushLock;\n\n    // this._flushLock acts as a lock so that future calls to `_flush()` will\n    // be blocked until current flush is finished (i.e. this promise resolves)\n    if (!this._flushLock) {\n      this._flushLock = this._runFlush();\n    }\n\n    try {\n      await this._flushLock;\n    } catch (err) {\n      this.handleException(err);\n    } finally {\n      this._flushLock = undefined;\n\n      if (_flushInProgress) {\n        // Wait for previous flush to finish, then call the debounced\n        // `_flush()`. It's possible there are other flush requests queued and\n        // waiting for it to resolve. We want to reduce all outstanding\n        // requests (as well as any new flush requests that occur within a\n        // second of the locked flush completing) into a single flush.\n        this._debouncedFlush();\n      }\n    }\n  }\n\n  /** Save the session, if it is sticky */\n   _maybeSaveSession() {\n    if (this.session && this._options.stickySession) {\n      saveSession(this.session);\n    }\n  }\n\n  /** Handler for rrweb.record.onMutation */\n   _onMutationHandler(mutations) {\n    const { ignoreMutations } = this._options._experiments;\n    if (ignoreMutations?.length) {\n      if (\n        mutations.some(mutation => {\n          const el = closestElementOfNode(mutation.target);\n          const selector = ignoreMutations.join(',');\n          return el?.matches(selector);\n        })\n      ) {\n        return false;\n      }\n    }\n\n    const count = mutations.length;\n\n    const mutationLimit = this._options.mutationLimit;\n    const mutationBreadcrumbLimit = this._options.mutationBreadcrumbLimit;\n    const overMutationLimit = mutationLimit && count > mutationLimit;\n\n    // Create a breadcrumb if a lot of mutations happen at the same time\n    // We can show this in the UI as an information with potential performance improvements\n    if (count > mutationBreadcrumbLimit || overMutationLimit) {\n      const breadcrumb = createBreadcrumb({\n        category: 'replay.mutations',\n        data: {\n          count,\n          limit: overMutationLimit,\n        },\n      });\n      this._createCustomBreadcrumb(breadcrumb);\n    }\n\n    // Stop replay if over the mutation limit\n    if (overMutationLimit) {\n      // This should never reject\n      // eslint-disable-next-line @typescript-eslint/no-floating-promises\n      this.stop({ reason: 'mutationLimit', forceFlush: this.recordingMode === 'session' });\n      return false;\n    }\n\n    // `true` means we use the regular mutation handling by rrweb\n    return true;\n  }\n}\n\nfunction getOption(selectors, defaultSelectors) {\n  return [\n    ...selectors,\n    // sentry defaults\n    ...defaultSelectors,\n  ].join(',');\n}\n\n/**\n * Returns privacy related configuration for use in rrweb\n */\nfunction getPrivacyOptions({ mask, unmask, block, unblock, ignore }) {\n  const defaultBlockedElements = ['base', 'iframe[srcdoc]:not([src])'];\n\n  const maskSelector = getOption(mask, ['.sentry-mask', '[data-sentry-mask]']);\n  const unmaskSelector = getOption(unmask, []);\n\n  const options = {\n    // We are making the decision to make text and input selectors the same\n    maskTextSelector: maskSelector,\n    unmaskTextSelector: unmaskSelector,\n\n    blockSelector: getOption(block, ['.sentry-block', '[data-sentry-block]', ...defaultBlockedElements]),\n    unblockSelector: getOption(unblock, []),\n    ignoreSelector: getOption(ignore, ['.sentry-ignore', '[data-sentry-ignore]', 'input[type=\"file\"]']),\n  };\n\n  return options;\n}\n\n/**\n * Masks an attribute if necessary, otherwise return attribute value as-is.\n */\nfunction maskAttribute({\n  el,\n  key,\n  maskAttributes,\n  maskAllText,\n  privacyOptions,\n  value,\n}) {\n  // We only mask attributes if `maskAllText` is true\n  if (!maskAllText) {\n    return value;\n  }\n\n  // unmaskTextSelector takes precedence\n  if (privacyOptions.unmaskTextSelector && el.matches(privacyOptions.unmaskTextSelector)) {\n    return value;\n  }\n\n  if (\n    maskAttributes.includes(key) ||\n    // Need to mask `value` attribute for `<input>` if it's a button-like\n    // type\n    (key === 'value' && el.tagName === 'INPUT' && ['submit', 'button'].includes(el.getAttribute('type') || ''))\n  ) {\n    return value.replace(/[\\S]/g, '*');\n  }\n\n  return value;\n}\n\nconst MEDIA_SELECTORS =\n  'img,image,svg,video,object,picture,embed,map,audio,link[rel=\"icon\"],link[rel=\"apple-touch-icon\"]';\n\nconst DEFAULT_NETWORK_HEADERS = ['content-length', 'content-type', 'accept'];\n\nlet _initialized = false;\n\n/**\n * Sentry integration for [Session Replay](https://sentry.io/for/session-replay/).\n *\n * See the [Replay documentation](https://docs.sentry.io/platforms/javascript/guides/session-replay/) for more information.\n *\n * @example\n *\n * ```\n * Sentry.init({\n *   dsn: '__DSN__',\n *   integrations: [Sentry.replayIntegration()],\n * });\n * ```\n */\nconst replayIntegration = ((options) => {\n  return new Replay(options);\n}) ;\n\n/**\n * Replay integration\n */\nclass Replay  {\n  /**\n   * @inheritDoc\n   */\n\n  /**\n   * Options to pass to `rrweb.record()`\n   */\n\n  /**\n   * Initial options passed to the replay integration, merged with default values.\n   * Note: `sessionSampleRate` and `errorSampleRate` are not required here, as they\n   * can only be finally set when setupOnce() is called.\n   *\n   * @private\n   */\n\n   constructor({\n    flushMinDelay = DEFAULT_FLUSH_MIN_DELAY,\n    flushMaxDelay = DEFAULT_FLUSH_MAX_DELAY,\n    minReplayDuration = MIN_REPLAY_DURATION,\n    maxReplayDuration = MAX_REPLAY_DURATION,\n    stickySession = true,\n    useCompression = true,\n    workerUrl,\n    _experiments = {},\n    maskAllText = true,\n    maskAllInputs = true,\n    blockAllMedia = true,\n\n    mutationBreadcrumbLimit = 750,\n    mutationLimit = 10000,\n\n    slowClickTimeout = 7000,\n    slowClickIgnoreSelectors = [],\n\n    networkDetailAllowUrls = [],\n    networkDetailDenyUrls = [],\n    networkCaptureBodies = true,\n    networkRequestHeaders = [],\n    networkResponseHeaders = [],\n\n    mask = [],\n    maskAttributes = ['title', 'placeholder', 'aria-label'],\n    unmask = [],\n    block = [],\n    unblock = [],\n    ignore = [],\n    maskFn,\n\n    beforeAddRecordingEvent,\n    beforeErrorSampling,\n    onError,\n  } = {}) {\n    this.name = 'Replay';\n\n    const privacyOptions = getPrivacyOptions({\n      mask,\n      unmask,\n      block,\n      unblock,\n      ignore,\n    });\n\n    this._recordingOptions = {\n      maskAllInputs,\n      maskAllText,\n      maskInputOptions: { password: true },\n      maskTextFn: maskFn,\n      maskInputFn: maskFn,\n      maskAttributeFn: (key, value, el) =>\n        maskAttribute({\n          maskAttributes,\n          maskAllText,\n          privacyOptions,\n          key,\n          value,\n          el,\n        }),\n\n      ...privacyOptions,\n\n      // Our defaults\n      slimDOMOptions: 'all',\n      inlineStylesheet: true,\n      // Disable inline images as it will increase segment/replay size\n      inlineImages: false,\n      // collect fonts, but be aware that `sentry.io` needs to be an allowed\n      // origin for playback\n      collectFonts: true,\n      errorHandler: (err) => {\n        try {\n          err.__rrweb__ = true;\n        } catch {\n          // ignore errors here\n          // this can happen if the error is frozen or does not allow mutation for other reasons\n        }\n      },\n      // experimental support for recording iframes from different origins\n      recordCrossOriginIframes: Boolean(_experiments.recordCrossOriginIframes),\n    };\n\n    this._initialOptions = {\n      flushMinDelay,\n      flushMaxDelay,\n      minReplayDuration: Math.min(minReplayDuration, MIN_REPLAY_DURATION_LIMIT),\n      maxReplayDuration: Math.min(maxReplayDuration, MAX_REPLAY_DURATION),\n      stickySession,\n      useCompression,\n      workerUrl,\n      blockAllMedia,\n      maskAllInputs,\n      maskAllText,\n      mutationBreadcrumbLimit,\n      mutationLimit,\n      slowClickTimeout,\n      slowClickIgnoreSelectors,\n      networkDetailAllowUrls,\n      networkDetailDenyUrls,\n      networkCaptureBodies,\n      networkRequestHeaders: _getMergedNetworkHeaders(networkRequestHeaders),\n      networkResponseHeaders: _getMergedNetworkHeaders(networkResponseHeaders),\n      beforeAddRecordingEvent,\n      beforeErrorSampling,\n      onError,\n\n      _experiments,\n    };\n\n    if (this._initialOptions.blockAllMedia) {\n      // `blockAllMedia` is a more user friendly option to configure blocking\n      // embedded media elements\n      this._recordingOptions.blockSelector = !this._recordingOptions.blockSelector\n        ? MEDIA_SELECTORS\n        : `${this._recordingOptions.blockSelector},${MEDIA_SELECTORS}`;\n    }\n\n    if (this._isInitialized && (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isBrowser)()) {\n      throw new Error('Multiple Sentry Session Replay instances are not supported');\n    }\n\n    this._isInitialized = true;\n  }\n\n  /** If replay has already been initialized */\n   get _isInitialized() {\n    return _initialized;\n  }\n\n  /** Update _isInitialized */\n   set _isInitialized(value) {\n    _initialized = value;\n  }\n\n  /**\n   * Setup and initialize replay container\n   */\n   afterAllSetup(client) {\n    if (!(0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.isBrowser)() || this._replay) {\n      return;\n    }\n\n    this._setup(client);\n    this._initialize(client);\n  }\n\n  /**\n   * Start a replay regardless of sampling rate. Calling this will always\n   * create a new session. Will log a message if replay is already in progress.\n   *\n   * Creates or loads a session, attaches listeners to varying events (DOM,\n   * PerformanceObserver, Recording, Sentry SDK, etc)\n   */\n   start() {\n    if (!this._replay) {\n      return;\n    }\n    this._replay.start();\n  }\n\n  /**\n   * Start replay buffering. Buffers until `flush()` is called or, if\n   * `replaysOnErrorSampleRate` > 0, until an error occurs.\n   */\n   startBuffering() {\n    if (!this._replay) {\n      return;\n    }\n\n    this._replay.startBuffering();\n  }\n\n  /**\n   * Currently, this needs to be manually called (e.g. for tests). Sentry SDK\n   * does not support a teardown\n   */\n   stop() {\n    if (!this._replay) {\n      return Promise.resolve();\n    }\n\n    return this._replay.stop({ forceFlush: this._replay.recordingMode === 'session' });\n  }\n\n  /**\n   * If not in \"session\" recording mode, flush event buffer which will create a new replay.\n   * If replay is not enabled, a new session replay is started.\n   * Unless `continueRecording` is false, the replay will continue to record and\n   * behave as a \"session\"-based replay.\n   *\n   * Otherwise, queue up a flush.\n   */\n   flush(options) {\n    if (!this._replay) {\n      return Promise.resolve();\n    }\n\n    // assuming a session should be recorded in this case\n    if (!this._replay.isEnabled()) {\n      this._replay.start();\n      return Promise.resolve();\n    }\n\n    return this._replay.sendBufferedReplayOrFlush(options);\n  }\n\n  /**\n   * Get the current session ID.\n   */\n   getReplayId() {\n    if (!this._replay?.isEnabled()) {\n      return;\n    }\n\n    return this._replay.getSessionId();\n  }\n\n  /**\n   * Get the current recording mode. This can be either `session` or `buffer`.\n   *\n   * `session`: Recording the whole session, sending it continuously\n   * `buffer`: Always keeping the last 60s of recording, requires:\n   *   - having replaysOnErrorSampleRate > 0 to capture replay when an error occurs\n   *   - or calling `flush()` to send the replay\n   */\n   getRecordingMode() {\n    if (!this._replay?.isEnabled()) {\n      return;\n    }\n\n    return this._replay.recordingMode;\n  }\n\n  /**\n   * Initializes replay.\n   */\n   _initialize(client) {\n    if (!this._replay) {\n      return;\n    }\n\n    this._maybeLoadFromReplayCanvasIntegration(client);\n    this._replay.initializeSampling();\n  }\n\n  /** Setup the integration. */\n   _setup(client) {\n    // Client is not available in constructor, so we need to wait until setupOnce\n    const finalOptions = loadReplayOptionsFromClient(this._initialOptions, client);\n\n    this._replay = new ReplayContainer({\n      options: finalOptions,\n      recordingOptions: this._recordingOptions,\n    });\n  }\n\n  /** Get canvas options from ReplayCanvas integration, if it is also added. */\n   _maybeLoadFromReplayCanvasIntegration(client) {\n    // To save bundle size, we skip checking for stuff here\n    // and instead just try-catch everything - as generally this should all be defined\n    /* eslint-disable @typescript-eslint/no-non-null-assertion */\n    try {\n      const canvasIntegration = client.getIntegrationByName('ReplayCanvas')\n\n;\n      if (!canvasIntegration) {\n        return;\n      }\n\n      this._replay['_canvas'] = canvasIntegration.getOptions();\n    } catch {\n      // ignore errors here\n    }\n    /* eslint-enable @typescript-eslint/no-non-null-assertion */\n  }\n}\n\n/** Parse Replay-related options from SDK options */\nfunction loadReplayOptionsFromClient(initialOptions, client) {\n  const opt = client.getOptions() ;\n\n  const finalOptions = {\n    sessionSampleRate: 0,\n    errorSampleRate: 0,\n    ...initialOptions,\n  };\n\n  const replaysSessionSampleRate = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.parseSampleRate)(opt.replaysSessionSampleRate);\n  const replaysOnErrorSampleRate = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.parseSampleRate)(opt.replaysOnErrorSampleRate);\n\n  if (replaysSessionSampleRate == null && replaysOnErrorSampleRate == null) {\n    (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.consoleSandbox)(() => {\n      // eslint-disable-next-line no-console\n      console.warn(\n        'Replay is disabled because neither `replaysSessionSampleRate` nor `replaysOnErrorSampleRate` are set.',\n      );\n    });\n  }\n\n  if (replaysSessionSampleRate != null) {\n    finalOptions.sessionSampleRate = replaysSessionSampleRate;\n  }\n\n  if (replaysOnErrorSampleRate != null) {\n    finalOptions.errorSampleRate = replaysOnErrorSampleRate;\n  }\n\n  return finalOptions;\n}\n\nfunction _getMergedNetworkHeaders(headers) {\n  return [...DEFAULT_NETWORK_HEADERS, ...headers.map(header => header.toLowerCase())];\n}\n\n/**\n * This is a small utility to get a type-safe instance of the Replay integration.\n */\nfunction getReplay() {\n  const client = (0,_sentry_core__WEBPACK_IMPORTED_MODULE_0__.getClient)();\n  return client?.getIntegrationByName('Replay');\n}\n\n\n//# sourceMappingURL=index.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2VudHJ5LWludGVybmFsK3JlcGxheUA5LjQ2LjAvbm9kZV9tb2R1bGVzL0BzZW50cnktaW50ZXJuYWwvcmVwbGF5L2J1aWxkL25wbS9lc20vaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUE2b0I7QUFDMVE7O0FBRW5ZO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvREFBVTs7QUFFekI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNENBQTRDOztBQUU1QztBQUNBLDZDQUE2Qzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0NBQStDOztBQUUvQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQSxrRkFBa0YsNkRBQTZEO0FBQy9JO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsa0JBQWtCO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0Msd0RBQXdEO0FBQ3ZHO0FBQ0EsaUNBQWlDO0FBQ2pDLHVDQUF1QyxzQkFBc0I7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsVUFBVTtBQUNwQjtBQUNBLHVDQUF1QywwQkFBMEI7QUFDakU7QUFDQTtBQUNBLElBQUk7QUFDSiw0QkFBNEIsZUFBZTtBQUMzQztBQUNBO0FBQ0EsK0JBQStCLGtCQUFrQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHdCQUF3QjtBQUMzQztBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsVUFBVSxHQUFHLDZDQUE2QyxFQUFFLGtDQUFrQztBQUMvRztBQUNBLFlBQVkscUJBQXFCLEVBQUUsU0FBUztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGtCQUFrQjtBQUNwQyxvQkFBb0IsbUJBQW1CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXO0FBQ3pEO0FBQ0E7QUFDQSxzQkFBc0IsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXO0FBQ3pEO0FBQ0E7QUFDQSxzQkFBc0IsV0FBVyxFQUFFLCtCQUErQixFQUFFLFdBQVc7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLGtEQUFrRCxVQUFVO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxVQUFVO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixVQUFVO0FBQ3ZDLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxnRUFBZ0UsSUFBSTtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsVUFBVTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EscUNBQXFDLFNBQVMsV0FBVyxJQUFJO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGdCQUFnQjtBQUM1QjtBQUNBO0FBQ0EsbUJBQW1CLE1BQU07QUFDekIsb0JBQW9CLE9BQU87QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixRQUFRLDRCQUE0QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLDJEQUEyRCxJQUFJO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSwrQkFBK0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLEdBQUc7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxpQkFBaUI7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHlCQUF5QjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMseUJBQXlCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLG9CQUFvQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMseUJBQXlCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxHQUFHLEdBQUcsU0FBUztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLGtCQUFrQixhQUFhO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QiwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxhQUFhO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxR0FBcUc7QUFDckc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVixRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsbUJBQW1CO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0Msa0JBQWtCLElBQUksS0FBSztBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLCtCQUErQixpQ0FBaUMsSUFBSTtBQUNwRTtBQUNBO0FBQ0E7QUFDQSx3REFBd0QsS0FBSztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EscUNBQXFDLDJEQUEyRCxJQUFJO0FBQ3BHO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0Msc0RBQXNELElBQUksS0FBSztBQUNqRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsY0FBYztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGFBQWE7QUFDbEMsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsY0FBYztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLE9BQU87QUFDL0IsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGNBQWM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsY0FBYztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGNBQWM7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixjQUFjO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLElBQUksS0FBSztBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsY0FBYztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDJDQUEyQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsNEJBQTRCLGFBQWE7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLFlBQVk7QUFDakM7QUFDQSxjQUFjLHVEQUF1RDtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLGtCQUFrQixRQUFRO0FBQzFCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRCxvQkFBb0I7QUFDMUU7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0Isb0JBQW9CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQix1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLGFBQWE7O0FBRWQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix1REFBUztBQUMxQixPQUFPO0FBQ1AsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRSxrREFBSTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZLDhCQUE4Qjs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhCQUE4QiwwRUFBWTtBQUMxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsWUFBWSxTQUFTO0FBQ3JCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxjQUFjLFdBQVc7QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxnQkFBZ0I7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsa0JBQWtCOztBQUU1QjtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsOERBQWdCLFdBQVcsc0JBQXNCO0FBQy9ELElBQUk7QUFDSjtBQUNBOztBQUVBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxrREFBa0Q7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLDhEQUFnQixXQUFXLHNCQUFzQjtBQUNuRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFFBQVE7QUFDcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVywwRUFBNEI7QUFDdkM7O0FBRUE7QUFDQSxVQUFVLHVDQUF1Qzs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxVQUFVLEdBQUcsS0FBSztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLFVBQVUsR0FBRyxjQUFjO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsbUVBQW1FO0FBQzdGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsU0FBUztBQUNoQztBQUNBOztBQUVBOztBQUVBO0FBQ0Esd0JBQXdCLG9HQUFvQztBQUM1RCxHQUFHOztBQUVIO0FBQ0EsSUFBSSw0RkFBNEI7QUFDaEMsSUFBSSw0RkFBNEI7QUFDaEMsSUFBSSw0RkFBNEI7QUFDaEMsSUFBSSw0RkFBNEI7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLE1BQXVDLElBQUksS0FBZ0I7O0FBRWhGLCtSQUErUix3QkFBd0IsS0FBSyxzQkFBc0IsbUJBQW1CLFFBQVEsS0FBSyxtQkFBbUIsU0FBUyxxQkFBcUIsT0FBTyxTQUFTLHNCQUFzQixvQkFBb0Isc0NBQXNDLFFBQVEsS0FBSyxnQ0FBZ0MseUZBQXlGLHNCQUFzQixrQ0FBa0MsSUFBSSxzQkFBc0IsaUJBQWlCLFFBQVEsSUFBSSwwQkFBMEIsTUFBTSxjQUFjLFdBQVcsUUFBUSxJQUFJLHVFQUF1RSxLQUFLLGlCQUFpQix3QkFBd0IsSUFBSSx5Q0FBeUMsU0FBUyxjQUFjLFFBQVEsTUFBTSxXQUFXLFVBQVUsTUFBTSxXQUFXLFVBQVUsTUFBTSxXQUFXLFVBQVUsTUFBTSxXQUFXLGdCQUFnQixRQUFRLEtBQUssV0FBVyx3Q0FBd0MsZ0JBQWdCLG1CQUFtQixpRUFBaUUsa1NBQWtTLHlCQUF5Qiw2RUFBNkUsU0FBUyxtQkFBbUIsUUFBUSxZQUFZLHFCQUFxQixtQkFBbUIsUUFBUSxZQUFZLG1DQUFtQyxpQkFBaUIsaUJBQWlCLFdBQVcsa0JBQWtCLFdBQVcsRUFBRSwyQkFBMkIsYUFBYSxTQUFTLFNBQVMsc0JBQXNCLG9CQUFvQixTQUFTLHFCQUFxQixlQUFlLFVBQVUsYUFBYSxFQUFFLDhCQUE4QixVQUFVLHdCQUF3QixPQUFPLHFFQUFxRSx3QkFBd0IsYUFBYSxRQUFRLElBQUkseUJBQXlCLGlDQUFpQyxRQUFRLElBQUkscUJBQXFCLHlCQUF5Qiw4QkFBOEIsRUFBRSxJQUFJLEtBQUssYUFBYSxtQkFBbUIsd0JBQXdCLFVBQVUsSUFBSSxFQUFFLGFBQWEsNEJBQTRCLEtBQUssUUFBUSxLQUFLLGFBQWEsc0JBQXNCLElBQUksT0FBTyxnQkFBZ0IsbUJBQW1CLDJEQUEyRCxlQUFlLG1CQUFtQixXQUFXLEVBQUUsa0RBQWtELFNBQVMsS0FBSyxLQUFLLHlCQUF5QixLQUFLLFlBQVksS0FBSyxNQUFNLGdCQUFnQiw4Q0FBOEMsYUFBYSxhQUFhLElBQUksYUFBYSwwQkFBMEIsS0FBSyxJQUFJLE1BQU0sV0FBVyxPQUFPLHVCQUF1QixpQkFBaUIsZ0JBQWdCLFdBQVcsaUJBQWlCLFNBQVMsbUJBQW1CLHdCQUF3Qix5REFBeUQsWUFBWSxJQUFJLGtCQUFrQixpQkFBaUIsbUNBQW1DLG9CQUFvQiwwR0FBMEcsV0FBVyxpQkFBaUIsUUFBUSxXQUFXLGlCQUFpQixrQ0FBa0MsZ0JBQWdCLEtBQUssK0ZBQStGLG9EQUFvRCw0QkFBNEIsOEJBQThCLGVBQWUsOENBQThDLFFBQVEsSUFBSSx1QkFBdUIsT0FBTyxvQkFBb0IsSUFBSSxLQUFLLFlBQVksUUFBUSxZQUFZLEtBQUssZ0JBQWdCLGtFQUFrRSxxQkFBcUIsUUFBUSxJQUFJLEtBQUssWUFBWSxXQUFXLDRFQUE0RSxhQUFhLHlEQUF5RCwyQkFBMkIsOEJBQThCLHNHQUFzRyxrQ0FBa0MsTUFBTSxLQUFLLGdCQUFnQixJQUFJLDJCQUEyQixPQUFPLFNBQVMsZ0JBQWdCLFlBQVksT0FBTyxjQUFjLGlDQUFpQyxLQUFLLEVBQUUsNkJBQTZCLElBQUksZUFBZSw4Q0FBOEMsUUFBUSxjQUFjLG1FQUFtRSx1QkFBdUIsV0FBVyxJQUFJLGdCQUFnQiwrREFBK0QsNENBQTRDLDZCQUE2Qix3R0FBd0csTUFBTSxpQkFBaUIsd0hBQXdILG1DQUFtQywwRUFBMEUsTUFBTSxLQUFLLDRCQUE0Qix1QkFBdUIsVUFBVSxrQ0FBa0MseUNBQXlDLFlBQVksTUFBTSxXQUFXLFFBQVEsS0FBSyxXQUFXLDRCQUE0QixrRkFBa0YsZ0JBQWdCLEVBQUUscUJBQXFCLFlBQVksc0JBQXNCLEtBQUssUUFBUSxxQkFBcUIsNEJBQTRCLFFBQVEsS0FBSyxLQUFLLHFDQUFxQyxzQkFBc0Isd0JBQXdCLE1BQU0sK0JBQStCLDBCQUEwQiw2Q0FBNkMsNEJBQTRCLG9CQUFvQixJQUFJLDBCQUEwQixtRkFBbUYsS0FBSyxhQUFhLE1BQU0sVUFBVSxlQUFlLHFEQUFxRCxNQUFNLHVCQUF1Qix5SEFBeUgsbUJBQW1CLEtBQUssRUFBRSxrQkFBa0IsY0FBYyxnQkFBZ0Isa0NBQWtDLDRCQUE0QixTQUFTLDRCQUE0Qix3Q0FBd0MseUNBQXlDLHNEQUFzRCxtQ0FBbUMsc0NBQXNDLGdDQUFnQyxpQ0FBaUMsd0JBQXdCLG9CQUFvQiw0QkFBNEIsc0JBQXNCLDRDQUE0Qyw2QkFBNkIsME1BQTBNLCtDQUErQywrRkFBK0YsOEJBQThCLGlGQUFpRixHQUFHLEdBQUcsZ0JBQWdCLFFBQVEsRUFBRSxpQkFBaUIsU0FBUyxPQUFPLGNBQWMsZ0JBQWdCLFdBQVcsMEJBQTBCLElBQUksY0FBYyxXQUFXLGNBQWMsT0FBTyxzRUFBc0UscUJBQXFCLGlCQUFpQixzSUFBc0ksT0FBTyxZQUFZLFlBQVksNkJBQTZCLGtDQUFrQyxpQkFBaUIsZ0JBQWdCLHFDQUFxQyxzQ0FBc0MsNENBQTRDLDZCQUE2Qiw4REFBOEQsdUJBQXVCLHNDQUFzQyxrRkFBa0YsVUFBVSxnQ0FBZ0Msb0VBQW9FLDhCQUE4Qiw2QkFBNkIsR0FBRyx5R0FBeUcsSUFBSSxZQUFZLFVBQVUsRUFBRSxVQUFVLGlCQUFpQixjQUFjLGNBQWMsc0NBQXNDLDhEQUE4RCxHQUFHLEdBQUcsZ0JBQWdCLHdCQUF3QixxRUFBcUUsU0FBUyxLQUFLLElBQUksS0FBSyxpQkFBaUIsMEJBQTBCLGFBQWEsc0JBQXNCLCtNQUErTSxnQkFBZ0Isa0JBQWtCLGNBQWMsYUFBYSxRQUFRLGFBQWEsWUFBWSw4Q0FBOEMsK0JBQStCLHlDQUF5QyxTQUFTLHlCQUF5QixvQkFBb0IsUUFBUSw2QkFBNkIsMEJBQTBCLDJCQUEyQixJQUFJLEtBQUssYUFBYSx1QkFBdUIsU0FBUyxxQkFBcUIsc0JBQXNCLFFBQVEsd0ZBQXdGLDJCQUEyQiwyQkFBMkIsdUJBQXVCLHlCQUF5QixJQUFJLFdBQVcsVUFBVSx5RUFBeUUsZUFBZSxLQUFLLHVDQUF1QywrQ0FBK0MsdUNBQXVDLGdCQUFnQixhQUFhLG9DQUFvQyxFQUFFLFNBQVMsYUFBYSw0Q0FBNEMsb0JBQW9CLGVBQWUsbURBQW1ELEVBQUU7O0FBRXBtVSxhQUFhLHNCQUFzQjs7QUFFbkM7QUFDQTs7QUFFQTtBQUNBLEVBQUUsMkRBQWE7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLGtCQUFrQixPQUFPLEVBQUUsUUFBUTtBQUNuQyxLQUFLO0FBQ0wsTUFBTSxPQUFPO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsK0NBQU87QUFDZjtBQUNBLHdDQUF3QyxxRUFBdUI7QUFDL0Q7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSwrQ0FBTzs7QUFFYjtBQUNBLFFBQVEsOERBQWdCO0FBQ3hCLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSwrQ0FBTztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELDZCQUE2QjtBQUNoRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsVUFBVSxZQUFZO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULFVBQVUsWUFBWTtBQUN0QjtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCLE1BQU07QUFDaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsaUJBQWlCO0FBQ2xELEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZLHVDQUF1Qzs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx3REFBd0QsMkJBQTJCLGdCQUFnQixPQUFPO0FBQzFHO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixtREFBSztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLDBEQUEwRDtBQUM5RCxJQUFJLG9CQUFvQixJQUFJO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHNDQUFzQztBQUMxQztBQUNBO0FBQ0EsbUNBQW1DLHNDQUFzQztBQUN6RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLG1CQUFtQjtBQUM5RDs7QUFFQSwrQ0FBK0Msc0NBQXNDO0FBQ3JGO0FBQ0E7O0FBRUE7QUFDQSx5Q0FBeUMsdUNBQXVDO0FBQ2hGOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLGNBQWM7O0FBRXhCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLHdCQUF3QixRQUFROztBQUVoQyxtQkFBbUIsdURBQVM7O0FBRTVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QsZUFBZTtBQUNyRTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxzQkFBc0I7QUFDaEM7QUFDQTtBQUNBOztBQUVBLEVBQUUsMEVBQVk7QUFDZDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsNkRBQWU7QUFDNUIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsdURBQVM7O0FBRTFCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLG1DQUFtQztBQUNyRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qix1REFBUztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixzRUFBc0U7QUFDMUY7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsU0FBUyx3Q0FBd0MsSUFBSTtBQUMvRSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLDZEQUFlO0FBQzdCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQiwyREFBYTtBQUNsQztBQUNBLGdCQUFnQiwrRUFBaUM7QUFDakQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUCxNQUFNOztBQUVOO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCO0FBQ3ZCOztBQUVBO0FBQ0EsS0FBSztBQUNMLE1BQU0sY0FBYztBQUNwQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDhCQUE4QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQSxVQUFVLFdBQVc7O0FBRXJCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsZ0VBQWtCLE1BQU0sdURBQVM7QUFDMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQixpRkFBaUI7QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSxvQkFBb0I7QUFDcEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLDJFQUEyRTs7QUFFckY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFVBQVUsaUNBQWlDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsSUFBSTtBQUNQOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSxjQUFjO0FBQzdCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx3REFBd0Q7QUFDeEQseURBQXlELGdCQUFnQjtBQUN6RTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUyxzRUFBd0I7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxrQkFBa0I7O0FBRTVCLHVCQUF1QixzRkFBc0I7QUFDN0M7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSwyQ0FBMkM7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUksNkNBQTZDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNCQUFzQixzRkFBc0I7QUFDNUMsNkJBQTZCLDZFQUFhO0FBQzFDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiwwRUFBWTs7QUFFaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsYUFBYTs7QUFFdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsdURBQXVEOztBQUVqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxzQkFBc0IsK0VBQW1CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVFQUF1RSw2RUFBYTtBQUNwRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsSUFBSTtBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsdURBQVM7O0FBRTFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix1REFBUzs7QUFFMUIsRUFBRSxzR0FBc0M7QUFDeEMsRUFBRSxnR0FBZ0M7QUFDbEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLCtEQUFpQjs7QUFFbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVLG1EQUFtRDtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsc0RBQVU7QUFDbkI7QUFDQTtBQUNBLG9CQUFvQixzRUFBWTtBQUNoQyxHQUFHO0FBQ0g7O0FBRUEsa0JBQWtCLG9EQUFVOztBQUU1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9GQUFvRix3QkFBd0I7O0FBRTVHOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLDREQUFjO0FBQ3ZCLElBQUksd0VBQTBCLGNBQWMsNkVBQStCO0FBQzNFO0FBQ0EsU0FBUyxzQkFBc0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7O0FBRUE7QUFDQSw2QkFBNkIsY0FBYyxFQUFFLGNBQWM7QUFDM0QsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCOztBQUV0Qjs7QUFFQSwrQkFBK0IsMERBQVk7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksK0RBQWlCO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLGdCQUFnQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUgsVUFBVSw2Q0FBNkM7O0FBRXZELGlCQUFpQix1REFBUztBQUMxQixnQkFBZ0IsNkRBQWU7QUFDL0I7QUFDQTs7QUFFQTtBQUNBLFdBQVcsaUVBQW1CLEdBQUc7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpREFBaUQsMkNBQTJDOztBQUU1RjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsaUVBQW1CLEdBQUc7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLGlDQUFpQztBQUNqQztBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsOERBQWdCLEdBQUc7QUFDeEMsTUFBTSwyREFBYTtBQUNuQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxXQUFXO0FBQ3ZEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsVUFBVSx5QkFBeUI7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLHdEQUFVO0FBQ2Q7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsdUJBQXVCOztBQUV4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLE1BQU0sMEVBQVk7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsWUFBWSw2Q0FBNkM7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHFDQUFxQzs7QUFFakQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx3REFBd0Qsb0JBQW9COztBQUU1RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLDZCQUE2QixJQUFJO0FBQ2pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaURBQWlELDBCQUEwQixPQUFPLE9BQU87O0FBRXpGOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsYUFBYTtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQywyQkFBMkIsSUFBSTtBQUNwRTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qix5QkFBeUIsRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUI7QUFDaEcsbUJBQW1CLHVCQUF1QixFQUFFLFFBQVE7O0FBRXBEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVCxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELDJEQUFhO0FBQy9ELDJDQUEyQyx5REFBVzs7QUFFdEQsd0NBQXdDLHdEQUFVO0FBQ2xELDhCQUE4QiwwRUFBZ0M7QUFDOUQ7QUFDQTtBQUNBOztBQUVBLFdBQVcsd0RBQVU7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwyQkFBMkI7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVksdUJBQXVCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixzQkFBc0I7O0FBRXhDLHFCQUFxQix1REFBUzs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQiw0QkFBNEI7QUFDM0Q7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFlBQVksa0JBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQix1RUFBdUU7QUFDekY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsc0NBQXNDO0FBQ25FOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsZ0JBQWdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHFDQUFxQyxHQUFHLGdCQUFnQjtBQUNyRTs7QUFFQSwrQkFBK0IsdURBQVM7QUFDeEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyx1REFBUztBQUNsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0Isc0RBQXNEO0FBQ3JGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DLDZEQUFlO0FBQ2xELG1DQUFtQyw2REFBZTs7QUFFbEQ7QUFDQSxJQUFJLDREQUFjO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsdURBQVM7QUFDMUI7QUFDQTs7QUFFd0M7QUFDeEMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHNlbnRyeS1pbnRlcm5hbCtyZXBsYXlAOS40Ni4wL25vZGVfbW9kdWxlcy9Ac2VudHJ5LWludGVybmFsL3JlcGxheS9idWlsZC9ucG0vZXNtL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdMT0JBTF9PQkosIG5vcm1hbGl6ZSwgZmlsbCwgaHRtbFRyZWVBc1N0cmluZywgYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiwgZGVidWcgYXMgZGVidWckMSwgc2V2ZXJpdHlMZXZlbEZyb21TdHJpbmcsIGNhcHR1cmVFeGNlcHRpb24sIGFkZEJyZWFkY3J1bWIsIHV1aWQ0LCBnZXRDbGllbnQsIGdldExvY2F0aW9uSHJlZiwgZ2V0Q3VycmVudFNjb3BlLCBnZXRBY3RpdmVTcGFuLCBnZXREeW5hbWljU2FtcGxpbmdDb250ZXh0RnJvbVNwYW4sIGlzU2VudHJ5UmVxdWVzdFVybCwgc3RyaW5nTWF0Y2hlc1NvbWVQYXR0ZXJuLCBhZGRFdmVudFByb2Nlc3NvciwgZGVib3VuY2UgYXMgZGVib3VuY2UkMSwgY3JlYXRlRW52ZWxvcGUsIGNyZWF0ZUV2ZW50RW52ZWxvcGVIZWFkZXJzLCBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyLCBwcmVwYXJlRXZlbnQsIGdldElzb2xhdGlvblNjb3BlLCByZXNvbHZlZFN5bmNQcm9taXNlLCB1cGRhdGVSYXRlTGltaXRzLCBpc1JhdGVMaW1pdGVkLCBzZXRDb250ZXh0LCBnZXRSb290U3Bhbiwgc3BhblRvSlNPTiwgU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0UsIGlzQnJvd3NlciwgcGFyc2VTYW1wbGVSYXRlLCBjb25zb2xlU2FuZGJveCB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IGFzIHNldFRpbWVvdXQkMywgYWRkUGVyZm9ybWFuY2VJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBhZGRMY3BJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBhZGRDbHNJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBhZGRGaWRJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBhZGRJbnBJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBzZXJpYWxpemVGb3JtRGF0YSwgZ2V0RmV0Y2hSZXF1ZXN0QXJnQm9keSwgZ2V0Qm9keVN0cmluZywgU0VOVFJZX1hIUl9EQVRBX0tFWSwgYWRkQ2xpY2tLZXlwcmVzc0luc3RydW1lbnRhdGlvbkhhbmRsZXIsIGFkZEhpc3RvcnlJbnN0cnVtZW50YXRpb25IYW5kbGVyIH0gZnJvbSAnQHNlbnRyeS1pbnRlcm5hbC9icm93c2VyLXV0aWxzJztcblxuLy8gZXhwb3J0aW5nIGEgc2VwYXJhdGUgY29weSBvZiBgV0lORE9XYCByYXRoZXIgdGhhbiBleHBvcnRpbmcgdGhlIG9uZSBmcm9tIGBAc2VudHJ5L2Jyb3dzZXJgXG4vLyBwcmV2ZW50cyB0aGUgYnJvd3NlciBwYWNrYWdlIGZyb20gYmVpbmcgYnVuZGxlZCBpbiB0aGUgQ0ROIGJ1bmRsZSwgYW5kIGF2b2lkcyBhXG4vLyBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gdGhlIGJyb3dzZXIgYW5kIHJlcGxheSBwYWNrYWdlcyBzaG91bGQgYEBzZW50cnkvYnJvd3NlcmAgaW1wb3J0XG4vLyBmcm9tIGBAc2VudHJ5L3JlcGxheWAgaW4gdGhlIGZ1dHVyZVxuY29uc3QgV0lORE9XID0gR0xPQkFMX09CSiA7XG5cbmNvbnN0IFJFUExBWV9TRVNTSU9OX0tFWSA9ICdzZW50cnlSZXBsYXlTZXNzaW9uJztcbmNvbnN0IFJFUExBWV9FVkVOVF9OQU1FID0gJ3JlcGxheV9ldmVudCc7XG5jb25zdCBVTkFCTEVfVE9fU0VORF9SRVBMQVkgPSAnVW5hYmxlIHRvIHNlbmQgUmVwbGF5JztcblxuLy8gVGhlIGlkbGUgbGltaXQgZm9yIGEgc2Vzc2lvbiBhZnRlciB3aGljaCByZWNvcmRpbmcgaXMgcGF1c2VkLlxuY29uc3QgU0VTU0lPTl9JRExFX1BBVVNFX0RVUkFUSU9OID0gMzAwMDAwOyAvLyA1IG1pbnV0ZXMgaW4gbXNcblxuLy8gVGhlIGlkbGUgbGltaXQgZm9yIGEgc2Vzc2lvbiBhZnRlciB3aGljaCB0aGUgc2Vzc2lvbiBleHBpcmVzLlxuY29uc3QgU0VTU0lPTl9JRExFX0VYUElSRV9EVVJBVElPTiA9IDkwMDAwMDsgLy8gMTUgbWludXRlcyBpbiBtc1xuXG4vKiogRGVmYXVsdCBmbHVzaCBkZWxheXMgKi9cbmNvbnN0IERFRkFVTFRfRkxVU0hfTUlOX0RFTEFZID0gNTAwMDtcbi8vIFhYWDogVGVtcCBmaXggZm9yIG91ciBkZWJvdW5jZSBsb2dpYyB3aGVyZSBgbWF4V2FpdGAgd291bGQgbmV2ZXIgb2NjdXIgaWYgaXRcbi8vIHdhcyB0aGUgc2FtZSBhcyBgd2FpdGBcbmNvbnN0IERFRkFVTFRfRkxVU0hfTUFYX0RFTEFZID0gNTUwMDtcblxuLyogSG93IGxvbmcgdG8gd2FpdCBmb3IgZXJyb3IgY2hlY2tvdXRzICovXG5jb25zdCBCVUZGRVJfQ0hFQ0tPVVRfVElNRSA9IDYwMDAwO1xuXG5jb25zdCBSRVRSWV9CQVNFX0lOVEVSVkFMID0gNTAwMDtcbmNvbnN0IFJFVFJZX01BWF9DT1VOVCA9IDM7XG5cbi8qIFRoZSBtYXggKHVuY29tcHJlc3NlZCkgc2l6ZSBpbiBieXRlcyBvZiBhIG5ldHdvcmsgYm9keS4gQW55IGJvZHkgbGFyZ2VyIHRoYW4gdGhpcyB3aWxsIGJlIHRydW5jYXRlZC4gKi9cbmNvbnN0IE5FVFdPUktfQk9EWV9NQVhfU0laRSA9IDE1MDAwMDtcblxuLyogVGhlIG1heCBzaXplIG9mIGEgc2luZ2xlIGNvbnNvbGUgYXJnIHRoYXQgaXMgY2FwdHVyZWQuIEFueSBhcmcgbGFyZ2VyIHRoYW4gdGhpcyB3aWxsIGJlIHRydW5jYXRlZC4gKi9cbmNvbnN0IENPTlNPTEVfQVJHX01BWF9TSVpFID0gNTAwMDtcblxuLyogTWluLiB0aW1lIHRvIHdhaXQgYmVmb3JlIHdlIGNvbnNpZGVyIHNvbWV0aGluZyBhIHNsb3cgY2xpY2suICovXG5jb25zdCBTTE9XX0NMSUNLX1RIUkVTSE9MRCA9IDMwMDA7XG4vKiBGb3Igc2Nyb2xsIGFjdGlvbnMgYWZ0ZXIgYSBjbGljaywgd2Ugb25seSBsb29rIGZvciBhIHZlcnkgc2hvcnQgdGltZSBwZXJpb2QgdG8gZGV0ZWN0IHByb2dyYW1tYXRpYyBzY3JvbGxpbmcuICovXG5jb25zdCBTTE9XX0NMSUNLX1NDUk9MTF9USU1FT1VUID0gMzAwO1xuXG4vKiogV2hlbiBlbmNvdW50ZXJpbmcgYSB0b3RhbCBzZWdtZW50IHNpemUgZXhjZWVkaW5nIHRoaXMgc2l6ZSwgc3RvcCB0aGUgcmVwbGF5IChhcyB3ZSBjYW5ub3QgcHJvcGVybHkgaW5nZXN0IGl0KS4gKi9cbmNvbnN0IFJFUExBWV9NQVhfRVZFTlRfQlVGRkVSX1NJWkUgPSAyMDAwMDAwMDsgLy8gfjIwTUJcblxuLyoqIFJlcGxheXMgbXVzdCBiZSBtaW4uIDVzIGxvbmcgYmVmb3JlIHdlIHNlbmQgdGhlbS4gKi9cbmNvbnN0IE1JTl9SRVBMQVlfRFVSQVRJT04gPSA0OTk5O1xuLyogVGhlIG1heC4gYWxsb3dlZCB2YWx1ZSB0aGF0IHRoZSBtaW5SZXBsYXlEdXJhdGlvbiBjYW4gYmUgc2V0IHRvLiAqL1xuY29uc3QgTUlOX1JFUExBWV9EVVJBVElPTl9MSU1JVCA9IDE1MDAwO1xuXG4vKiogVGhlIG1heC4gbGVuZ3RoIG9mIGEgcmVwbGF5LiAqL1xuY29uc3QgTUFYX1JFUExBWV9EVVJBVElPTiA9IDM2MDAwMDA7IC8vIDYwIG1pbnV0ZXMgaW4gbXM7XG5cbnZhciBfX2RlZlByb3AkMSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2RlZk5vcm1hbFByb3AkMSA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3AkMShvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19wdWJsaWNGaWVsZCQxID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4gX19kZWZOb3JtYWxQcm9wJDEob2JqLCB0eXBlb2Yga2V5ICE9PSBcInN5bWJvbFwiID8ga2V5ICsgXCJcIiA6IGtleSwgdmFsdWUpO1xudmFyIE5vZGVUeXBlJDIgPSAvKiBAX19QVVJFX18gKi8gKChOb2RlVHlwZTIpID0+IHtcbiAgTm9kZVR5cGUyW05vZGVUeXBlMltcIkRvY3VtZW50XCJdID0gMF0gPSBcIkRvY3VtZW50XCI7XG4gIE5vZGVUeXBlMltOb2RlVHlwZTJbXCJEb2N1bWVudFR5cGVcIl0gPSAxXSA9IFwiRG9jdW1lbnRUeXBlXCI7XG4gIE5vZGVUeXBlMltOb2RlVHlwZTJbXCJFbGVtZW50XCJdID0gMl0gPSBcIkVsZW1lbnRcIjtcbiAgTm9kZVR5cGUyW05vZGVUeXBlMltcIlRleHRcIl0gPSAzXSA9IFwiVGV4dFwiO1xuICBOb2RlVHlwZTJbTm9kZVR5cGUyW1wiQ0RBVEFcIl0gPSA0XSA9IFwiQ0RBVEFcIjtcbiAgTm9kZVR5cGUyW05vZGVUeXBlMltcIkNvbW1lbnRcIl0gPSA1XSA9IFwiQ29tbWVudFwiO1xuICByZXR1cm4gTm9kZVR5cGUyO1xufSkoTm9kZVR5cGUkMiB8fCB7fSk7XG5mdW5jdGlvbiBpc0VsZW1lbnQkMShuMikge1xuICByZXR1cm4gbjIubm9kZVR5cGUgPT09IG4yLkVMRU1FTlRfTk9ERTtcbn1cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdChuMikge1xuICBjb25zdCBob3N0ID0gbjI/Lmhvc3Q7XG4gIHJldHVybiBCb29sZWFuKGhvc3Q/LnNoYWRvd1Jvb3QgPT09IG4yKTtcbn1cbmZ1bmN0aW9uIGlzTmF0aXZlU2hhZG93RG9tKHNoYWRvd1Jvb3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzaGFkb3dSb290KSA9PT0gXCJbb2JqZWN0IFNoYWRvd1Jvb3RdXCI7XG59XG5mdW5jdGlvbiBmaXhCcm93c2VyQ29tcGF0aWJpbGl0eUlzc3Vlc0luQ1NTKGNzc1RleHQpIHtcbiAgaWYgKGNzc1RleHQuaW5jbHVkZXMoXCIgYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1wiKSAmJiAhY3NzVGV4dC5pbmNsdWRlcyhcIiAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDtcIikpIHtcbiAgICBjc3NUZXh0ID0gY3NzVGV4dC5yZXBsYWNlKFxuICAgICAgL1xcc2JhY2tncm91bmQtY2xpcDpcXHMqdGV4dDsvZyxcbiAgICAgIFwiIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0OyBiYWNrZ3JvdW5kLWNsaXA6IHRleHQ7XCJcbiAgICApO1xuICB9XG4gIHJldHVybiBjc3NUZXh0O1xufVxuZnVuY3Rpb24gZXNjYXBlSW1wb3J0U3RhdGVtZW50KHJ1bGUpIHtcbiAgY29uc3QgeyBjc3NUZXh0IH0gPSBydWxlO1xuICBpZiAoY3NzVGV4dC5zcGxpdCgnXCInKS5sZW5ndGggPCAzKSByZXR1cm4gY3NzVGV4dDtcbiAgY29uc3Qgc3RhdGVtZW50ID0gW1wiQGltcG9ydFwiLCBgdXJsKCR7SlNPTi5zdHJpbmdpZnkocnVsZS5ocmVmKX0pYF07XG4gIGlmIChydWxlLmxheWVyTmFtZSA9PT0gXCJcIikge1xuICAgIHN0YXRlbWVudC5wdXNoKGBsYXllcmApO1xuICB9IGVsc2UgaWYgKHJ1bGUubGF5ZXJOYW1lKSB7XG4gICAgc3RhdGVtZW50LnB1c2goYGxheWVyKCR7cnVsZS5sYXllck5hbWV9KWApO1xuICB9XG4gIGlmIChydWxlLnN1cHBvcnRzVGV4dCkge1xuICAgIHN0YXRlbWVudC5wdXNoKGBzdXBwb3J0cygke3J1bGUuc3VwcG9ydHNUZXh0fSlgKTtcbiAgfVxuICBpZiAocnVsZS5tZWRpYS5sZW5ndGgpIHtcbiAgICBzdGF0ZW1lbnQucHVzaChydWxlLm1lZGlhLm1lZGlhVGV4dCk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlbWVudC5qb2luKFwiIFwiKSArIFwiO1wiO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5U3R5bGVzaGVldChzMikge1xuICB0cnkge1xuICAgIGNvbnN0IHJ1bGVzMiA9IHMyLnJ1bGVzIHx8IHMyLmNzc1J1bGVzO1xuICAgIHJldHVybiBydWxlczIgPyBmaXhCcm93c2VyQ29tcGF0aWJpbGl0eUlzc3Vlc0luQ1NTKFxuICAgICAgQXJyYXkuZnJvbShydWxlczIsIHN0cmluZ2lmeVJ1bGUpLmpvaW4oXCJcIilcbiAgICApIDogbnVsbDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gZml4QWxsQ3NzUHJvcGVydHkocnVsZSkge1xuICBsZXQgc3R5bGVzID0gXCJcIjtcbiAgZm9yIChsZXQgaTIgPSAwOyBpMiA8IHJ1bGUuc3R5bGUubGVuZ3RoOyBpMisrKSB7XG4gICAgY29uc3Qgc3R5bGVEZWNsYXJhdGlvbiA9IHJ1bGUuc3R5bGU7XG4gICAgY29uc3QgYXR0cmlidXRlID0gc3R5bGVEZWNsYXJhdGlvbltpMl07XG4gICAgY29uc3QgaXNJbXBvcnRhbnQgPSBzdHlsZURlY2xhcmF0aW9uLmdldFByb3BlcnR5UHJpb3JpdHkoYXR0cmlidXRlKTtcbiAgICBzdHlsZXMgKz0gYCR7YXR0cmlidXRlfToke3N0eWxlRGVjbGFyYXRpb24uZ2V0UHJvcGVydHlWYWx1ZShhdHRyaWJ1dGUpfSR7aXNJbXBvcnRhbnQgPyBgICFpbXBvcnRhbnRgIDogXCJcIn07YDtcbiAgfVxuICByZXR1cm4gYCR7cnVsZS5zZWxlY3RvclRleHR9IHsgJHtzdHlsZXN9IH1gO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5UnVsZShydWxlKSB7XG4gIGxldCBpbXBvcnRTdHJpbmdpZmllZDtcbiAgaWYgKGlzQ1NTSW1wb3J0UnVsZShydWxlKSkge1xuICAgIHRyeSB7XG4gICAgICBpbXBvcnRTdHJpbmdpZmllZCA9IC8vIGZvciBzYW1lLW9yaWdpbiBzdHlsZXNoZWV0cyxcbiAgICAgIC8vIHdlIGNhbiBhY2Nlc3MgdGhlIGltcG9ydGVkIHN0eWxlc2hlZXQgcnVsZXMgZGlyZWN0bHlcbiAgICAgIHN0cmluZ2lmeVN0eWxlc2hlZXQocnVsZS5zdHlsZVNoZWV0KSB8fCAvLyB3b3JrIGFyb3VuZCBicm93c2VyIGlzc3VlcyB3aXRoIHRoZSByYXcgc3RyaW5nIGBAaW1wb3J0IHVybCguLi4pYCBzdGF0ZW1lbnRcbiAgICAgIGVzY2FwZUltcG9ydFN0YXRlbWVudChydWxlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0NTU1N0eWxlUnVsZShydWxlKSkge1xuICAgIGxldCBjc3NUZXh0ID0gcnVsZS5jc3NUZXh0O1xuICAgIGNvbnN0IG5lZWRzU2FmYXJpQ29sb25GaXggPSBydWxlLnNlbGVjdG9yVGV4dC5pbmNsdWRlcyhcIjpcIik7XG4gICAgY29uc3QgbmVlZHNBbGxGaXggPSB0eXBlb2YgcnVsZS5zdHlsZVtcImFsbFwiXSA9PT0gXCJzdHJpbmdcIiAmJiBydWxlLnN0eWxlW1wiYWxsXCJdO1xuICAgIGlmIChuZWVkc0FsbEZpeCkge1xuICAgICAgY3NzVGV4dCA9IGZpeEFsbENzc1Byb3BlcnR5KHJ1bGUpO1xuICAgIH1cbiAgICBpZiAobmVlZHNTYWZhcmlDb2xvbkZpeCkge1xuICAgICAgY3NzVGV4dCA9IGZpeFNhZmFyaUNvbG9ucyhjc3NUZXh0KTtcbiAgICB9XG4gICAgaWYgKG5lZWRzU2FmYXJpQ29sb25GaXggfHwgbmVlZHNBbGxGaXgpIHtcbiAgICAgIHJldHVybiBjc3NUZXh0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gaW1wb3J0U3RyaW5naWZpZWQgfHwgcnVsZS5jc3NUZXh0O1xufVxuZnVuY3Rpb24gZml4U2FmYXJpQ29sb25zKGNzc1N0cmluZ2lmaWVkKSB7XG4gIGNvbnN0IHJlZ2V4ID0gLyhcXFsoPzpbXFx3LV0rKVteXFxcXF0pKDooPzpbXFx3LV0rKVxcXSkvZ207XG4gIHJldHVybiBjc3NTdHJpbmdpZmllZC5yZXBsYWNlKHJlZ2V4LCBcIiQxXFxcXCQyXCIpO1xufVxuZnVuY3Rpb24gaXNDU1NJbXBvcnRSdWxlKHJ1bGUpIHtcbiAgcmV0dXJuIFwic3R5bGVTaGVldFwiIGluIHJ1bGU7XG59XG5mdW5jdGlvbiBpc0NTU1N0eWxlUnVsZShydWxlKSB7XG4gIHJldHVybiBcInNlbGVjdG9yVGV4dFwiIGluIHJ1bGU7XG59XG5jbGFzcyBNaXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBfX3B1YmxpY0ZpZWxkJDEodGhpcywgXCJpZE5vZGVNYXBcIiwgLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG4gICAgX19wdWJsaWNGaWVsZCQxKHRoaXMsIFwibm9kZU1ldGFNYXBcIiwgLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xuICB9XG4gIGdldElkKG4yKSB7XG4gICAgaWYgKCFuMikgcmV0dXJuIC0xO1xuICAgIGNvbnN0IGlkID0gdGhpcy5nZXRNZXRhKG4yKT8uaWQ7XG4gICAgcmV0dXJuIGlkID8/IC0xO1xuICB9XG4gIGdldE5vZGUoaWQpIHtcbiAgICByZXR1cm4gdGhpcy5pZE5vZGVNYXAuZ2V0KGlkKSB8fCBudWxsO1xuICB9XG4gIGdldElkcygpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmlkTm9kZU1hcC5rZXlzKCkpO1xuICB9XG4gIGdldE1ldGEobjIpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlTWV0YU1hcC5nZXQobjIpIHx8IG51bGw7XG4gIH1cbiAgLy8gcmVtb3ZlcyB0aGUgbm9kZSBmcm9tIGlkTm9kZU1hcFxuICAvLyBkb2Vzbid0IHJlbW92ZSB0aGUgbm9kZSBmcm9tIG5vZGVNZXRhTWFwXG4gIHJlbW92ZU5vZGVGcm9tTWFwKG4yKSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmdldElkKG4yKTtcbiAgICB0aGlzLmlkTm9kZU1hcC5kZWxldGUoaWQpO1xuICAgIGlmIChuMi5jaGlsZE5vZGVzKSB7XG4gICAgICBuMi5jaGlsZE5vZGVzLmZvckVhY2goXG4gICAgICAgIChjaGlsZE5vZGUpID0+IHRoaXMucmVtb3ZlTm9kZUZyb21NYXAoY2hpbGROb2RlKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaGFzKGlkKSB7XG4gICAgcmV0dXJuIHRoaXMuaWROb2RlTWFwLmhhcyhpZCk7XG4gIH1cbiAgaGFzTm9kZShub2RlKSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZU1ldGFNYXAuaGFzKG5vZGUpO1xuICB9XG4gIGFkZChuMiwgbWV0YSkge1xuICAgIGNvbnN0IGlkID0gbWV0YS5pZDtcbiAgICB0aGlzLmlkTm9kZU1hcC5zZXQoaWQsIG4yKTtcbiAgICB0aGlzLm5vZGVNZXRhTWFwLnNldChuMiwgbWV0YSk7XG4gIH1cbiAgcmVwbGFjZShpZCwgbjIpIHtcbiAgICBjb25zdCBvbGROb2RlID0gdGhpcy5nZXROb2RlKGlkKTtcbiAgICBpZiAob2xkTm9kZSkge1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMubm9kZU1ldGFNYXAuZ2V0KG9sZE5vZGUpO1xuICAgICAgaWYgKG1ldGEpIHRoaXMubm9kZU1ldGFNYXAuc2V0KG4yLCBtZXRhKTtcbiAgICB9XG4gICAgdGhpcy5pZE5vZGVNYXAuc2V0KGlkLCBuMik7XG4gIH1cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5pZE5vZGVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgIHRoaXMubm9kZU1ldGFNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlTWlycm9yJDIoKSB7XG4gIHJldHVybiBuZXcgTWlycm9yKCk7XG59XG5mdW5jdGlvbiBzaG91bGRNYXNrSW5wdXQoe1xuICBtYXNrSW5wdXRPcHRpb25zLFxuICB0YWdOYW1lLFxuICB0eXBlXG59KSB7XG4gIGlmICh0YWdOYW1lID09PSBcIk9QVElPTlwiKSB7XG4gICAgdGFnTmFtZSA9IFwiU0VMRUNUXCI7XG4gIH1cbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgbWFza0lucHV0T3B0aW9uc1t0YWdOYW1lLnRvTG93ZXJDYXNlKCldIHx8IHR5cGUgJiYgbWFza0lucHV0T3B0aW9uc1t0eXBlXSB8fCB0eXBlID09PSBcInBhc3N3b3JkXCIgfHwgLy8gRGVmYXVsdCB0byBcInRleHRcIiBvcHRpb24gZm9yIGlucHV0cyB3aXRob3V0IGEgXCJ0eXBlXCIgYXR0cmlidXRlIGRlZmluZWRcbiAgICB0YWdOYW1lID09PSBcIklOUFVUXCIgJiYgIXR5cGUgJiYgbWFza0lucHV0T3B0aW9uc1tcInRleHRcIl1cbiAgKTtcbn1cbmZ1bmN0aW9uIG1hc2tJbnB1dFZhbHVlKHtcbiAgaXNNYXNrZWQsXG4gIGVsZW1lbnQsXG4gIHZhbHVlLFxuICBtYXNrSW5wdXRGblxufSkge1xuICBsZXQgdGV4dCA9IHZhbHVlIHx8IFwiXCI7XG4gIGlmICghaXNNYXNrZWQpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuICBpZiAobWFza0lucHV0Rm4pIHtcbiAgICB0ZXh0ID0gbWFza0lucHV0Rm4odGV4dCwgZWxlbWVudCk7XG4gIH1cbiAgcmV0dXJuIFwiKlwiLnJlcGVhdCh0ZXh0Lmxlbmd0aCk7XG59XG5mdW5jdGlvbiB0b0xvd2VyQ2FzZShzdHIpIHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xufVxuZnVuY3Rpb24gdG9VcHBlckNhc2Uoc3RyKSB7XG4gIHJldHVybiBzdHIudG9VcHBlckNhc2UoKTtcbn1cbmNvbnN0IE9SSUdJTkFMX0FUVFJJQlVURV9OQU1FID0gXCJfX3Jyd2ViX29yaWdpbmFsX19cIjtcbmZ1bmN0aW9uIGlzMkRDYW52YXNCbGFuayhjYW52YXMpIHtcbiAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgaWYgKCFjdHgpIHJldHVybiB0cnVlO1xuICBjb25zdCBjaHVua1NpemUgPSA1MDtcbiAgZm9yIChsZXQgeCA9IDA7IHggPCBjYW52YXMud2lkdGg7IHggKz0gY2h1bmtTaXplKSB7XG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCBjYW52YXMuaGVpZ2h0OyB5ICs9IGNodW5rU2l6ZSkge1xuICAgICAgY29uc3QgZ2V0SW1hZ2VEYXRhID0gY3R4LmdldEltYWdlRGF0YTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsR2V0SW1hZ2VEYXRhID0gT1JJR0lOQUxfQVRUUklCVVRFX05BTUUgaW4gZ2V0SW1hZ2VEYXRhID8gZ2V0SW1hZ2VEYXRhW09SSUdJTkFMX0FUVFJJQlVURV9OQU1FXSA6IGdldEltYWdlRGF0YTtcbiAgICAgIGNvbnN0IHBpeGVsQnVmZmVyID0gbmV3IFVpbnQzMkFycmF5KFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudCwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgIG9yaWdpbmFsR2V0SW1hZ2VEYXRhLmNhbGwoXG4gICAgICAgICAgY3R4LFxuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgICBNYXRoLm1pbihjaHVua1NpemUsIGNhbnZhcy53aWR0aCAtIHgpLFxuICAgICAgICAgIE1hdGgubWluKGNodW5rU2l6ZSwgY2FudmFzLmhlaWdodCAtIHkpXG4gICAgICAgICkuZGF0YS5idWZmZXJcbiAgICAgICk7XG4gICAgICBpZiAocGl4ZWxCdWZmZXIuc29tZSgocGl4ZWwpID0+IHBpeGVsICE9PSAwKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGdldElucHV0VHlwZShlbGVtZW50KSB7XG4gIGNvbnN0IHR5cGUgPSBlbGVtZW50LnR5cGU7XG4gIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShcImRhdGEtcnItaXMtcGFzc3dvcmRcIikgPyBcInBhc3N3b3JkXCIgOiB0eXBlID8gKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgICB0b0xvd2VyQ2FzZSh0eXBlKVxuICApIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGdldElucHV0VmFsdWUoZWwsIHRhZ05hbWUsIHR5cGUpIHtcbiAgaWYgKHRhZ05hbWUgPT09IFwiSU5QVVRcIiAmJiAodHlwZSA9PT0gXCJyYWRpb1wiIHx8IHR5cGUgPT09IFwiY2hlY2tib3hcIikpIHtcbiAgICByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKFwidmFsdWVcIikgfHwgXCJcIjtcbiAgfVxuICByZXR1cm4gZWwudmFsdWU7XG59XG5mdW5jdGlvbiBleHRyYWN0RmlsZUV4dGVuc2lvbihwYXRoLCBiYXNlVVJMKSB7XG4gIGxldCB1cmw7XG4gIHRyeSB7XG4gICAgdXJsID0gbmV3IFVSTChwYXRoLCBiYXNlVVJMID8/IHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcmVnZXggPSAvXFwuKFswLTlhLXpdKykoPzokKS9pO1xuICBjb25zdCBtYXRjaCA9IHVybC5wYXRobmFtZS5tYXRjaChyZWdleCk7XG4gIHJldHVybiBtYXRjaD8uWzFdID8/IG51bGw7XG59XG5jb25zdCBjYWNoZWRJbXBsZW1lbnRhdGlvbnMkMSA9IHt9O1xuZnVuY3Rpb24gZ2V0SW1wbGVtZW50YXRpb24kMShuYW1lKSB7XG4gIGNvbnN0IGNhY2hlZCA9IGNhY2hlZEltcGxlbWVudGF0aW9ucyQxW25hbWVdO1xuICBpZiAoY2FjaGVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuICBjb25zdCBkb2N1bWVudDIgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGxldCBpbXBsID0gd2luZG93W25hbWVdO1xuICBpZiAoZG9jdW1lbnQyICYmIHR5cGVvZiBkb2N1bWVudDIuY3JlYXRlRWxlbWVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhbmRib3ggPSBkb2N1bWVudDIuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcbiAgICAgIHNhbmRib3guaGlkZGVuID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50Mi5oZWFkLmFwcGVuZENoaWxkKHNhbmRib3gpO1xuICAgICAgY29uc3QgY29udGVudFdpbmRvdyA9IHNhbmRib3guY29udGVudFdpbmRvdztcbiAgICAgIGlmIChjb250ZW50V2luZG93ICYmIGNvbnRlbnRXaW5kb3dbbmFtZV0pIHtcbiAgICAgICAgaW1wbCA9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgICAgY29udGVudFdpbmRvd1tuYW1lXTtcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50Mi5oZWFkLnJlbW92ZUNoaWxkKHNhbmRib3gpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgfVxuICB9XG4gIHJldHVybiBjYWNoZWRJbXBsZW1lbnRhdGlvbnMkMVtuYW1lXSA9IGltcGwuYmluZChcbiAgICB3aW5kb3dcbiAgKTtcbn1cbmZ1bmN0aW9uIHNldFRpbWVvdXQkMiguLi5yZXN0KSB7XG4gIHJldHVybiBnZXRJbXBsZW1lbnRhdGlvbiQxKFwic2V0VGltZW91dFwiKSguLi5yZXN0KTtcbn1cbmZ1bmN0aW9uIGNsZWFyVGltZW91dCQxKC4uLnJlc3QpIHtcbiAgcmV0dXJuIGdldEltcGxlbWVudGF0aW9uJDEoXCJjbGVhclRpbWVvdXRcIikoLi4ucmVzdCk7XG59XG5mdW5jdGlvbiBnZXRJZnJhbWVDb250ZW50RG9jdW1lbnQoaWZyYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGlmcmFtZS5jb250ZW50RG9jdW1lbnQ7XG4gIH0gY2F0Y2ggKGUyKSB7XG4gIH1cbn1cbmxldCBfaWQgPSAxO1xuY29uc3QgdGFnTmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cChcIlteYS16MC05LV86XVwiKTtcbmNvbnN0IElHTk9SRURfTk9ERSA9IC0yO1xuZnVuY3Rpb24gZ2VuSWQoKSB7XG4gIHJldHVybiBfaWQrKztcbn1cbmZ1bmN0aW9uIGdldFZhbGlkVGFnTmFtZSQxKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQpIHtcbiAgICByZXR1cm4gXCJmb3JtXCI7XG4gIH1cbiAgY29uc3QgcHJvY2Vzc2VkVGFnTmFtZSA9IHRvTG93ZXJDYXNlKGVsZW1lbnQudGFnTmFtZSk7XG4gIGlmICh0YWdOYW1lUmVnZXgudGVzdChwcm9jZXNzZWRUYWdOYW1lKSkge1xuICAgIHJldHVybiBcImRpdlwiO1xuICB9XG4gIHJldHVybiBwcm9jZXNzZWRUYWdOYW1lO1xufVxuZnVuY3Rpb24gZXh0cmFjdE9yaWdpbih1cmwpIHtcbiAgbGV0IG9yaWdpbiA9IFwiXCI7XG4gIGlmICh1cmwuaW5kZXhPZihcIi8vXCIpID4gLTEpIHtcbiAgICBvcmlnaW4gPSB1cmwuc3BsaXQoXCIvXCIpLnNsaWNlKDAsIDMpLmpvaW4oXCIvXCIpO1xuICB9IGVsc2Uge1xuICAgIG9yaWdpbiA9IHVybC5zcGxpdChcIi9cIilbMF07XG4gIH1cbiAgb3JpZ2luID0gb3JpZ2luLnNwbGl0KFwiP1wiKVswXTtcbiAgcmV0dXJuIG9yaWdpbjtcbn1cbmxldCBjYW52YXNTZXJ2aWNlO1xubGV0IGNhbnZhc0N0eDtcbmNvbnN0IFVSTF9JTl9DU1NfUkVGID0gL3VybFxcKCg/OignKShbXiddKiknfChcIikoLio/KVwifChbXildKikpXFwpL2dtO1xuY29uc3QgVVJMX1BST1RPQ09MX01BVENIID0gL14oPzpbYS16K10rOik/XFwvXFwvL2k7XG5jb25zdCBVUkxfV1dXX01BVENIID0gL153d3dcXC4uKi9pO1xuY29uc3QgREFUQV9VUkkgPSAvXihkYXRhOikoW14sXSopLCguKikvaTtcbmZ1bmN0aW9uIGFic29sdXRlVG9TdHlsZXNoZWV0KGNzc1RleHQsIGhyZWYpIHtcbiAgcmV0dXJuIChjc3NUZXh0IHx8IFwiXCIpLnJlcGxhY2UoXG4gICAgVVJMX0lOX0NTU19SRUYsXG4gICAgKG9yaWdpbiwgcXVvdGUxLCBwYXRoMSwgcXVvdGUyLCBwYXRoMiwgcGF0aDMpID0+IHtcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aDEgfHwgcGF0aDIgfHwgcGF0aDM7XG4gICAgICBjb25zdCBtYXliZVF1b3RlID0gcXVvdGUxIHx8IHF1b3RlMiB8fCBcIlwiO1xuICAgICAgaWYgKCFmaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gb3JpZ2luO1xuICAgICAgfVxuICAgICAgaWYgKFVSTF9QUk9UT0NPTF9NQVRDSC50ZXN0KGZpbGVQYXRoKSB8fCBVUkxfV1dXX01BVENILnRlc3QoZmlsZVBhdGgpKSB7XG4gICAgICAgIHJldHVybiBgdXJsKCR7bWF5YmVRdW90ZX0ke2ZpbGVQYXRofSR7bWF5YmVRdW90ZX0pYDtcbiAgICAgIH1cbiAgICAgIGlmIChEQVRBX1VSSS50ZXN0KGZpbGVQYXRoKSkge1xuICAgICAgICByZXR1cm4gYHVybCgke21heWJlUXVvdGV9JHtmaWxlUGF0aH0ke21heWJlUXVvdGV9KWA7XG4gICAgICB9XG4gICAgICBpZiAoZmlsZVBhdGhbMF0gPT09IFwiL1wiKSB7XG4gICAgICAgIHJldHVybiBgdXJsKCR7bWF5YmVRdW90ZX0ke2V4dHJhY3RPcmlnaW4oaHJlZikgKyBmaWxlUGF0aH0ke21heWJlUXVvdGV9KWA7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFjayA9IGhyZWYuc3BsaXQoXCIvXCIpO1xuICAgICAgY29uc3QgcGFydHMgPSBmaWxlUGF0aC5zcGxpdChcIi9cIik7XG4gICAgICBzdGFjay5wb3AoKTtcbiAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgICBpZiAocGFydCA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0ID09PSBcIi4uXCIpIHtcbiAgICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGFjay5wdXNoKHBhcnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYHVybCgke21heWJlUXVvdGV9JHtzdGFjay5qb2luKFwiL1wiKX0ke21heWJlUXVvdGV9KWA7XG4gICAgfVxuICApO1xufVxuY29uc3QgU1JDU0VUX05PVF9TUEFDRVMgPSAvXlteIFxcdFxcblxcclxcdTAwMGNdKy87XG5jb25zdCBTUkNTRVRfQ09NTUFTX09SX1NQQUNFUyA9IC9eWywgXFx0XFxuXFxyXFx1MDAwY10rLztcbmZ1bmN0aW9uIGdldEFic29sdXRlU3Jjc2V0U3RyaW5nKGRvYywgYXR0cmlidXRlVmFsdWUpIHtcbiAgaWYgKGF0dHJpYnV0ZVZhbHVlLnRyaW0oKSA9PT0gXCJcIikge1xuICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZTtcbiAgfVxuICBsZXQgcG9zID0gMDtcbiAgZnVuY3Rpb24gY29sbGVjdENoYXJhY3RlcnMocmVnRXgpIHtcbiAgICBsZXQgY2hhcnMyO1xuICAgIGNvbnN0IG1hdGNoID0gcmVnRXguZXhlYyhhdHRyaWJ1dGVWYWx1ZS5zdWJzdHJpbmcocG9zKSk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBjaGFyczIgPSBtYXRjaFswXTtcbiAgICAgIHBvcyArPSBjaGFyczIubGVuZ3RoO1xuICAgICAgcmV0dXJuIGNoYXJzMjtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgY29uc3Qgb3V0cHV0ID0gW107XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29sbGVjdENoYXJhY3RlcnMoU1JDU0VUX0NPTU1BU19PUl9TUEFDRVMpO1xuICAgIGlmIChwb3MgPj0gYXR0cmlidXRlVmFsdWUubGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgbGV0IHVybCA9IGNvbGxlY3RDaGFyYWN0ZXJzKFNSQ1NFVF9OT1RfU1BBQ0VTKTtcbiAgICBpZiAodXJsLnNsaWNlKC0xKSA9PT0gXCIsXCIpIHtcbiAgICAgIHVybCA9IGFic29sdXRlVG9Eb2MoZG9jLCB1cmwuc3Vic3RyaW5nKDAsIHVybC5sZW5ndGggLSAxKSk7XG4gICAgICBvdXRwdXQucHVzaCh1cmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZGVzY3JpcHRvcnNTdHIgPSBcIlwiO1xuICAgICAgdXJsID0gYWJzb2x1dGVUb0RvYyhkb2MsIHVybCk7XG4gICAgICBsZXQgaW5QYXJlbnMgPSBmYWxzZTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IGMyID0gYXR0cmlidXRlVmFsdWUuY2hhckF0KHBvcyk7XG4gICAgICAgIGlmIChjMiA9PT0gXCJcIikge1xuICAgICAgICAgIG91dHB1dC5wdXNoKCh1cmwgKyBkZXNjcmlwdG9yc1N0cikudHJpbSgpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICghaW5QYXJlbnMpIHtcbiAgICAgICAgICBpZiAoYzIgPT09IFwiLFwiKSB7XG4gICAgICAgICAgICBwb3MgKz0gMTtcbiAgICAgICAgICAgIG91dHB1dC5wdXNoKCh1cmwgKyBkZXNjcmlwdG9yc1N0cikudHJpbSgpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYzIgPT09IFwiKFwiKSB7XG4gICAgICAgICAgICBpblBhcmVucyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChjMiA9PT0gXCIpXCIpIHtcbiAgICAgICAgICAgIGluUGFyZW5zID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlc2NyaXB0b3JzU3RyICs9IGMyO1xuICAgICAgICBwb3MgKz0gMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKFwiLCBcIik7XG59XG5jb25zdCBjYWNoZWREb2N1bWVudCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xuZnVuY3Rpb24gYWJzb2x1dGVUb0RvYyhkb2MsIGF0dHJpYnV0ZVZhbHVlKSB7XG4gIGlmICghYXR0cmlidXRlVmFsdWUgfHwgYXR0cmlidXRlVmFsdWUudHJpbSgpID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlO1xuICB9XG4gIHJldHVybiBnZXRIcmVmKGRvYywgYXR0cmlidXRlVmFsdWUpO1xufVxuZnVuY3Rpb24gaXNTVkdFbGVtZW50KGVsKSB7XG4gIHJldHVybiBCb29sZWFuKGVsLnRhZ05hbWUgPT09IFwic3ZnXCIgfHwgZWwub3duZXJTVkdFbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGdldEhyZWYoZG9jLCBjdXN0b21IcmVmKSB7XG4gIGxldCBhMiA9IGNhY2hlZERvY3VtZW50LmdldChkb2MpO1xuICBpZiAoIWEyKSB7XG4gICAgYTIgPSBkb2MuY3JlYXRlRWxlbWVudChcImFcIik7XG4gICAgY2FjaGVkRG9jdW1lbnQuc2V0KGRvYywgYTIpO1xuICB9XG4gIGlmICghY3VzdG9tSHJlZikge1xuICAgIGN1c3RvbUhyZWYgPSBcIlwiO1xuICB9IGVsc2UgaWYgKGN1c3RvbUhyZWYuc3RhcnRzV2l0aChcImJsb2I6XCIpIHx8IGN1c3RvbUhyZWYuc3RhcnRzV2l0aChcImRhdGE6XCIpKSB7XG4gICAgcmV0dXJuIGN1c3RvbUhyZWY7XG4gIH1cbiAgYTIuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBjdXN0b21IcmVmKTtcbiAgcmV0dXJuIGEyLmhyZWY7XG59XG5mdW5jdGlvbiB0cmFuc2Zvcm1BdHRyaWJ1dGUoZG9jLCB0YWdOYW1lLCBuYW1lLCB2YWx1ZSwgZWxlbWVudCwgbWFza0F0dHJpYnV0ZUZuKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKG5hbWUgPT09IFwic3JjXCIgfHwgbmFtZSA9PT0gXCJocmVmXCIgJiYgISh0YWdOYW1lID09PSBcInVzZVwiICYmIHZhbHVlWzBdID09PSBcIiNcIikpIHtcbiAgICByZXR1cm4gYWJzb2x1dGVUb0RvYyhkb2MsIHZhbHVlKTtcbiAgfSBlbHNlIGlmIChuYW1lID09PSBcInhsaW5rOmhyZWZcIiAmJiB2YWx1ZVswXSAhPT0gXCIjXCIpIHtcbiAgICByZXR1cm4gYWJzb2x1dGVUb0RvYyhkb2MsIHZhbHVlKTtcbiAgfSBlbHNlIGlmIChuYW1lID09PSBcImJhY2tncm91bmRcIiAmJiAodGFnTmFtZSA9PT0gXCJ0YWJsZVwiIHx8IHRhZ05hbWUgPT09IFwidGRcIiB8fCB0YWdOYW1lID09PSBcInRoXCIpKSB7XG4gICAgcmV0dXJuIGFic29sdXRlVG9Eb2MoZG9jLCB2YWx1ZSk7XG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gXCJzcmNzZXRcIikge1xuICAgIHJldHVybiBnZXRBYnNvbHV0ZVNyY3NldFN0cmluZyhkb2MsIHZhbHVlKTtcbiAgfSBlbHNlIGlmIChuYW1lID09PSBcInN0eWxlXCIpIHtcbiAgICByZXR1cm4gYWJzb2x1dGVUb1N0eWxlc2hlZXQodmFsdWUsIGdldEhyZWYoZG9jKSk7XG4gIH0gZWxzZSBpZiAodGFnTmFtZSA9PT0gXCJvYmplY3RcIiAmJiBuYW1lID09PSBcImRhdGFcIikge1xuICAgIHJldHVybiBhYnNvbHV0ZVRvRG9jKGRvYywgdmFsdWUpO1xuICB9XG4gIGlmICh0eXBlb2YgbWFza0F0dHJpYnV0ZUZuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gbWFza0F0dHJpYnV0ZUZuKG5hbWUsIHZhbHVlLCBlbGVtZW50KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBpZ25vcmVBdHRyaWJ1dGUodGFnTmFtZSwgbmFtZSwgX3ZhbHVlKSB7XG4gIHJldHVybiAodGFnTmFtZSA9PT0gXCJ2aWRlb1wiIHx8IHRhZ05hbWUgPT09IFwiYXVkaW9cIikgJiYgbmFtZSA9PT0gXCJhdXRvcGxheVwiO1xufVxuZnVuY3Rpb24gX2lzQmxvY2tlZEVsZW1lbnQoZWxlbWVudCwgYmxvY2tDbGFzcywgYmxvY2tTZWxlY3RvciwgdW5ibG9ja1NlbGVjdG9yKSB7XG4gIHRyeSB7XG4gICAgaWYgKHVuYmxvY2tTZWxlY3RvciAmJiBlbGVtZW50Lm1hdGNoZXModW5ibG9ja1NlbGVjdG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJsb2NrQ2xhc3MgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhibG9ja0NsYXNzKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgZUluZGV4ID0gZWxlbWVudC5jbGFzc0xpc3QubGVuZ3RoOyBlSW5kZXgtLTsgKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NMaXN0W2VJbmRleF07XG4gICAgICAgIGlmIChibG9ja0NsYXNzLnRlc3QoY2xhc3NOYW1lKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChibG9ja1NlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gZWxlbWVudC5tYXRjaGVzKGJsb2NrU2VsZWN0b3IpO1xuICAgIH1cbiAgfSBjYXRjaCAoZTIpIHtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBlbGVtZW50Q2xhc3NNYXRjaGVzUmVnZXgoZWwsIHJlZ2V4KSB7XG4gIGZvciAobGV0IGVJbmRleCA9IGVsLmNsYXNzTGlzdC5sZW5ndGg7IGVJbmRleC0tOyApIHtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBlbC5jbGFzc0xpc3RbZUluZGV4XTtcbiAgICBpZiAocmVnZXgudGVzdChjbGFzc05hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZGlzdGFuY2VUb01hdGNoKG5vZGUsIG1hdGNoUHJlZGljYXRlLCBsaW1pdCA9IEluZmluaXR5LCBkaXN0YW5jZSA9IDApIHtcbiAgaWYgKCFub2RlKSByZXR1cm4gLTE7XG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBub2RlLkVMRU1FTlRfTk9ERSkgcmV0dXJuIC0xO1xuICBpZiAoZGlzdGFuY2UgPiBsaW1pdCkgcmV0dXJuIC0xO1xuICBpZiAobWF0Y2hQcmVkaWNhdGUobm9kZSkpIHJldHVybiBkaXN0YW5jZTtcbiAgcmV0dXJuIGRpc3RhbmNlVG9NYXRjaChub2RlLnBhcmVudE5vZGUsIG1hdGNoUHJlZGljYXRlLCBsaW1pdCwgZGlzdGFuY2UgKyAxKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZU1hdGNoUHJlZGljYXRlKGNsYXNzTmFtZSwgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIChub2RlKSA9PiB7XG4gICAgY29uc3QgZWwgPSBub2RlO1xuICAgIGlmIChlbCA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xhc3NOYW1lID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgaWYgKGVsLm1hdGNoZXMoYC4ke2NsYXNzTmFtZX1gKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudENsYXNzTWF0Y2hlc1JlZ2V4KGVsLCBjbGFzc05hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzZWxlY3RvciAmJiBlbC5tYXRjaGVzKHNlbGVjdG9yKSkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gbmVlZE1hc2tpbmdUZXh0KG5vZGUsIG1hc2tUZXh0Q2xhc3MsIG1hc2tUZXh0U2VsZWN0b3IsIHVubWFza1RleHRDbGFzcywgdW5tYXNrVGV4dFNlbGVjdG9yLCBtYXNrQWxsVGV4dCkge1xuICB0cnkge1xuICAgIGNvbnN0IGVsID0gbm9kZS5ub2RlVHlwZSA9PT0gbm9kZS5FTEVNRU5UX05PREUgPyBub2RlIDogbm9kZS5wYXJlbnRFbGVtZW50O1xuICAgIGlmIChlbCA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChlbC50YWdOYW1lID09PSBcIklOUFVUXCIpIHtcbiAgICAgIGNvbnN0IGF1dG9jb21wbGV0ZSA9IGVsLmdldEF0dHJpYnV0ZShcImF1dG9jb21wbGV0ZVwiKTtcbiAgICAgIGNvbnN0IGRpc2FsbG93ZWRBdXRvY29tcGxldGVWYWx1ZXMgPSBbXG4gICAgICAgIFwiY3VycmVudC1wYXNzd29yZFwiLFxuICAgICAgICBcIm5ldy1wYXNzd29yZFwiLFxuICAgICAgICBcImNjLW51bWJlclwiLFxuICAgICAgICBcImNjLWV4cFwiLFxuICAgICAgICBcImNjLWV4cC1tb250aFwiLFxuICAgICAgICBcImNjLWV4cC15ZWFyXCIsXG4gICAgICAgIFwiY2MtY3NjXCJcbiAgICAgIF07XG4gICAgICBpZiAoZGlzYWxsb3dlZEF1dG9jb21wbGV0ZVZhbHVlcy5pbmNsdWRlcyhhdXRvY29tcGxldGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgbWFza0Rpc3RhbmNlID0gLTE7XG4gICAgbGV0IHVubWFza0Rpc3RhbmNlID0gLTE7XG4gICAgaWYgKG1hc2tBbGxUZXh0KSB7XG4gICAgICB1bm1hc2tEaXN0YW5jZSA9IGRpc3RhbmNlVG9NYXRjaChcbiAgICAgICAgZWwsXG4gICAgICAgIGNyZWF0ZU1hdGNoUHJlZGljYXRlKHVubWFza1RleHRDbGFzcywgdW5tYXNrVGV4dFNlbGVjdG9yKVxuICAgICAgKTtcbiAgICAgIGlmICh1bm1hc2tEaXN0YW5jZSA8IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBtYXNrRGlzdGFuY2UgPSBkaXN0YW5jZVRvTWF0Y2goXG4gICAgICAgIGVsLFxuICAgICAgICBjcmVhdGVNYXRjaFByZWRpY2F0ZShtYXNrVGV4dENsYXNzLCBtYXNrVGV4dFNlbGVjdG9yKSxcbiAgICAgICAgdW5tYXNrRGlzdGFuY2UgPj0gMCA/IHVubWFza0Rpc3RhbmNlIDogSW5maW5pdHlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hc2tEaXN0YW5jZSA9IGRpc3RhbmNlVG9NYXRjaChcbiAgICAgICAgZWwsXG4gICAgICAgIGNyZWF0ZU1hdGNoUHJlZGljYXRlKG1hc2tUZXh0Q2xhc3MsIG1hc2tUZXh0U2VsZWN0b3IpXG4gICAgICApO1xuICAgICAgaWYgKG1hc2tEaXN0YW5jZSA8IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdW5tYXNrRGlzdGFuY2UgPSBkaXN0YW5jZVRvTWF0Y2goXG4gICAgICAgIGVsLFxuICAgICAgICBjcmVhdGVNYXRjaFByZWRpY2F0ZSh1bm1hc2tUZXh0Q2xhc3MsIHVubWFza1RleHRTZWxlY3RvciksXG4gICAgICAgIG1hc2tEaXN0YW5jZSA+PSAwID8gbWFza0Rpc3RhbmNlIDogSW5maW5pdHlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBtYXNrRGlzdGFuY2UgPj0gMCA/IHVubWFza0Rpc3RhbmNlID49IDAgPyBtYXNrRGlzdGFuY2UgPD0gdW5tYXNrRGlzdGFuY2UgOiB0cnVlIDogdW5tYXNrRGlzdGFuY2UgPj0gMCA/IGZhbHNlIDogISFtYXNrQWxsVGV4dDtcbiAgfSBjYXRjaCAoZTIpIHtcbiAgfVxuICByZXR1cm4gISFtYXNrQWxsVGV4dDtcbn1cbmZ1bmN0aW9uIG9uY2VJZnJhbWVMb2FkZWQoaWZyYW1lRWwsIGxpc3RlbmVyLCBpZnJhbWVMb2FkVGltZW91dCkge1xuICBjb25zdCB3aW4gPSBpZnJhbWVFbC5jb250ZW50V2luZG93O1xuICBpZiAoIXdpbikge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgZmlyZWQgPSBmYWxzZTtcbiAgbGV0IHJlYWR5U3RhdGU7XG4gIHRyeSB7XG4gICAgcmVhZHlTdGF0ZSA9IHdpbi5kb2N1bWVudC5yZWFkeVN0YXRlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocmVhZHlTdGF0ZSAhPT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0JDIoKCkgPT4ge1xuICAgICAgaWYgKCFmaXJlZCkge1xuICAgICAgICBsaXN0ZW5lcigpO1xuICAgICAgICBmaXJlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSwgaWZyYW1lTG9hZFRpbWVvdXQpO1xuICAgIGlmcmFtZUVsLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCQxKHRpbWVyKTtcbiAgICAgIGZpcmVkID0gdHJ1ZTtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGJsYW5rVXJsID0gXCJhYm91dDpibGFua1wiO1xuICBpZiAod2luLmxvY2F0aW9uLmhyZWYgIT09IGJsYW5rVXJsIHx8IGlmcmFtZUVsLnNyYyA9PT0gYmxhbmtVcmwgfHwgaWZyYW1lRWwuc3JjID09PSBcIlwiKSB7XG4gICAgc2V0VGltZW91dCQyKGxpc3RlbmVyLCAwKTtcbiAgICByZXR1cm4gaWZyYW1lRWwuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgbGlzdGVuZXIpO1xuICB9XG4gIGlmcmFtZUVsLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGxpc3RlbmVyKTtcbn1cbmZ1bmN0aW9uIG9uY2VTdHlsZXNoZWV0TG9hZGVkKGxpbmssIGxpc3RlbmVyLCBzdHlsZVNoZWV0TG9hZFRpbWVvdXQpIHtcbiAgbGV0IGZpcmVkID0gZmFsc2U7XG4gIGxldCBzdHlsZVNoZWV0TG9hZGVkO1xuICB0cnkge1xuICAgIHN0eWxlU2hlZXRMb2FkZWQgPSBsaW5rLnNoZWV0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoc3R5bGVTaGVldExvYWRlZCkgcmV0dXJuO1xuICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQkMigoKSA9PiB7XG4gICAgaWYgKCFmaXJlZCkge1xuICAgICAgbGlzdGVuZXIoKTtcbiAgICAgIGZpcmVkID0gdHJ1ZTtcbiAgICB9XG4gIH0sIHN0eWxlU2hlZXRMb2FkVGltZW91dCk7XG4gIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCQxKHRpbWVyKTtcbiAgICBmaXJlZCA9IHRydWU7XG4gICAgbGlzdGVuZXIoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVOb2RlKG4yLCBvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICBkb2MsXG4gICAgbWlycm9yOiBtaXJyb3IyLFxuICAgIGJsb2NrQ2xhc3MsXG4gICAgYmxvY2tTZWxlY3RvcixcbiAgICB1bmJsb2NrU2VsZWN0b3IsXG4gICAgbWFza0FsbFRleHQsXG4gICAgbWFza0F0dHJpYnV0ZUZuLFxuICAgIG1hc2tUZXh0Q2xhc3MsXG4gICAgdW5tYXNrVGV4dENsYXNzLFxuICAgIG1hc2tUZXh0U2VsZWN0b3IsXG4gICAgdW5tYXNrVGV4dFNlbGVjdG9yLFxuICAgIGlubGluZVN0eWxlc2hlZXQsXG4gICAgbWFza0lucHV0T3B0aW9ucyA9IHt9LFxuICAgIG1hc2tUZXh0Rm4sXG4gICAgbWFza0lucHV0Rm4sXG4gICAgZGF0YVVSTE9wdGlvbnMgPSB7fSxcbiAgICBpbmxpbmVJbWFnZXMsXG4gICAgcmVjb3JkQ2FudmFzLFxuICAgIGtlZXBJZnJhbWVTcmNGbixcbiAgICBuZXdseUFkZGVkRWxlbWVudCA9IGZhbHNlXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCByb290SWQgPSBnZXRSb290SWQoZG9jLCBtaXJyb3IyKTtcbiAgc3dpdGNoIChuMi5ub2RlVHlwZSkge1xuICAgIGNhc2UgbjIuRE9DVU1FTlRfTk9ERTpcbiAgICAgIGlmIChuMi5jb21wYXRNb2RlICE9PSBcIkNTUzFDb21wYXRcIikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IE5vZGVUeXBlJDIuRG9jdW1lbnQsXG4gICAgICAgICAgY2hpbGROb2RlczogW10sXG4gICAgICAgICAgY29tcGF0TW9kZTogbjIuY29tcGF0TW9kZVxuICAgICAgICAgIC8vIHByb2JhYmx5IFwiQmFja0NvbXBhdFwiXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IE5vZGVUeXBlJDIuRG9jdW1lbnQsXG4gICAgICAgICAgY2hpbGROb2RlczogW11cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICBjYXNlIG4yLkRPQ1VNRU5UX1RZUEVfTk9ERTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IE5vZGVUeXBlJDIuRG9jdW1lbnRUeXBlLFxuICAgICAgICBuYW1lOiBuMi5uYW1lLFxuICAgICAgICBwdWJsaWNJZDogbjIucHVibGljSWQsXG4gICAgICAgIHN5c3RlbUlkOiBuMi5zeXN0ZW1JZCxcbiAgICAgICAgcm9vdElkXG4gICAgICB9O1xuICAgIGNhc2UgbjIuRUxFTUVOVF9OT0RFOlxuICAgICAgcmV0dXJuIHNlcmlhbGl6ZUVsZW1lbnROb2RlKG4yLCB7XG4gICAgICAgIGRvYyxcbiAgICAgICAgYmxvY2tDbGFzcyxcbiAgICAgICAgYmxvY2tTZWxlY3RvcixcbiAgICAgICAgdW5ibG9ja1NlbGVjdG9yLFxuICAgICAgICBpbmxpbmVTdHlsZXNoZWV0LFxuICAgICAgICBtYXNrQXR0cmlidXRlRm4sXG4gICAgICAgIG1hc2tJbnB1dE9wdGlvbnMsXG4gICAgICAgIG1hc2tJbnB1dEZuLFxuICAgICAgICBkYXRhVVJMT3B0aW9ucyxcbiAgICAgICAgaW5saW5lSW1hZ2VzLFxuICAgICAgICByZWNvcmRDYW52YXMsXG4gICAgICAgIGtlZXBJZnJhbWVTcmNGbixcbiAgICAgICAgbmV3bHlBZGRlZEVsZW1lbnQsXG4gICAgICAgIHJvb3RJZCxcbiAgICAgICAgbWFza1RleHRDbGFzcyxcbiAgICAgICAgdW5tYXNrVGV4dENsYXNzLFxuICAgICAgICBtYXNrVGV4dFNlbGVjdG9yLFxuICAgICAgICB1bm1hc2tUZXh0U2VsZWN0b3JcbiAgICAgIH0pO1xuICAgIGNhc2UgbjIuVEVYVF9OT0RFOlxuICAgICAgcmV0dXJuIHNlcmlhbGl6ZVRleHROb2RlKG4yLCB7XG4gICAgICAgIGRvYyxcbiAgICAgICAgbWFza0FsbFRleHQsXG4gICAgICAgIG1hc2tUZXh0Q2xhc3MsXG4gICAgICAgIHVubWFza1RleHRDbGFzcyxcbiAgICAgICAgbWFza1RleHRTZWxlY3RvcixcbiAgICAgICAgdW5tYXNrVGV4dFNlbGVjdG9yLFxuICAgICAgICBtYXNrVGV4dEZuLFxuICAgICAgICBtYXNrSW5wdXRPcHRpb25zLFxuICAgICAgICBtYXNrSW5wdXRGbixcbiAgICAgICAgcm9vdElkXG4gICAgICB9KTtcbiAgICBjYXNlIG4yLkNEQVRBX1NFQ1RJT05fTk9ERTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IE5vZGVUeXBlJDIuQ0RBVEEsXG4gICAgICAgIHRleHRDb250ZW50OiBcIlwiLFxuICAgICAgICByb290SWRcbiAgICAgIH07XG4gICAgY2FzZSBuMi5DT01NRU5UX05PREU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBOb2RlVHlwZSQyLkNvbW1lbnQsXG4gICAgICAgIHRleHRDb250ZW50OiBuMi50ZXh0Q29udGVudCB8fCBcIlwiLFxuICAgICAgICByb290SWRcbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0Um9vdElkKGRvYywgbWlycm9yMikge1xuICBpZiAoIW1pcnJvcjIuaGFzTm9kZShkb2MpKSByZXR1cm4gdm9pZCAwO1xuICBjb25zdCBkb2NJZCA9IG1pcnJvcjIuZ2V0SWQoZG9jKTtcbiAgcmV0dXJuIGRvY0lkID09PSAxID8gdm9pZCAwIDogZG9jSWQ7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVUZXh0Tm9kZShuMiwgb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgbWFza0FsbFRleHQsXG4gICAgbWFza1RleHRDbGFzcyxcbiAgICB1bm1hc2tUZXh0Q2xhc3MsXG4gICAgbWFza1RleHRTZWxlY3RvcixcbiAgICB1bm1hc2tUZXh0U2VsZWN0b3IsXG4gICAgbWFza1RleHRGbixcbiAgICBtYXNrSW5wdXRPcHRpb25zLFxuICAgIG1hc2tJbnB1dEZuLFxuICAgIHJvb3RJZFxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcGFyZW50VGFnTmFtZSA9IG4yLnBhcmVudE5vZGUgJiYgbjIucGFyZW50Tm9kZS50YWdOYW1lO1xuICBsZXQgdGV4dENvbnRlbnQgPSBuMi50ZXh0Q29udGVudDtcbiAgY29uc3QgaXNTdHlsZSA9IHBhcmVudFRhZ05hbWUgPT09IFwiU1RZTEVcIiA/IHRydWUgOiB2b2lkIDA7XG4gIGNvbnN0IGlzU2NyaXB0ID0gcGFyZW50VGFnTmFtZSA9PT0gXCJTQ1JJUFRcIiA/IHRydWUgOiB2b2lkIDA7XG4gIGNvbnN0IGlzVGV4dGFyZWEgPSBwYXJlbnRUYWdOYW1lID09PSBcIlRFWFRBUkVBXCIgPyB0cnVlIDogdm9pZCAwO1xuICBpZiAoaXNTdHlsZSAmJiB0ZXh0Q29udGVudCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAobjIubmV4dFNpYmxpbmcgfHwgbjIucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICB9IGVsc2UgaWYgKG4yLnBhcmVudE5vZGUuc2hlZXQ/LmNzc1J1bGVzKSB7XG4gICAgICAgIHRleHRDb250ZW50ID0gc3RyaW5naWZ5U3R5bGVzaGVldChcbiAgICAgICAgICBuMi5wYXJlbnROb2RlLnNoZWV0XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBDYW5ub3QgZ2V0IENTUyBzdHlsZXMgZnJvbSB0ZXh0J3MgcGFyZW50Tm9kZS4gRXJyb3I6ICR7ZXJyfWAsXG4gICAgICAgIG4yXG4gICAgICApO1xuICAgIH1cbiAgICB0ZXh0Q29udGVudCA9IGFic29sdXRlVG9TdHlsZXNoZWV0KHRleHRDb250ZW50LCBnZXRIcmVmKG9wdGlvbnMuZG9jKSk7XG4gIH1cbiAgaWYgKGlzU2NyaXB0KSB7XG4gICAgdGV4dENvbnRlbnQgPSBcIlNDUklQVF9QTEFDRUhPTERFUlwiO1xuICB9XG4gIGNvbnN0IGZvcmNlTWFzayA9IG5lZWRNYXNraW5nVGV4dChcbiAgICBuMixcbiAgICBtYXNrVGV4dENsYXNzLFxuICAgIG1hc2tUZXh0U2VsZWN0b3IsXG4gICAgdW5tYXNrVGV4dENsYXNzLFxuICAgIHVubWFza1RleHRTZWxlY3RvcixcbiAgICBtYXNrQWxsVGV4dFxuICApO1xuICBpZiAoIWlzU3R5bGUgJiYgIWlzU2NyaXB0ICYmICFpc1RleHRhcmVhICYmIHRleHRDb250ZW50ICYmIGZvcmNlTWFzaykge1xuICAgIHRleHRDb250ZW50ID0gbWFza1RleHRGbiA/IG1hc2tUZXh0Rm4odGV4dENvbnRlbnQsIG4yLnBhcmVudEVsZW1lbnQpIDogdGV4dENvbnRlbnQucmVwbGFjZSgvW1xcU10vZywgXCIqXCIpO1xuICB9XG4gIGlmIChpc1RleHRhcmVhICYmIHRleHRDb250ZW50ICYmIChtYXNrSW5wdXRPcHRpb25zLnRleHRhcmVhIHx8IGZvcmNlTWFzaykpIHtcbiAgICB0ZXh0Q29udGVudCA9IG1hc2tJbnB1dEZuID8gbWFza0lucHV0Rm4odGV4dENvbnRlbnQsIG4yLnBhcmVudE5vZGUpIDogdGV4dENvbnRlbnQucmVwbGFjZSgvW1xcU10vZywgXCIqXCIpO1xuICB9XG4gIGlmIChwYXJlbnRUYWdOYW1lID09PSBcIk9QVElPTlwiICYmIHRleHRDb250ZW50KSB7XG4gICAgY29uc3QgaXNJbnB1dE1hc2tlZCA9IHNob3VsZE1hc2tJbnB1dCh7XG4gICAgICB0eXBlOiBudWxsLFxuICAgICAgdGFnTmFtZTogcGFyZW50VGFnTmFtZSxcbiAgICAgIG1hc2tJbnB1dE9wdGlvbnNcbiAgICB9KTtcbiAgICB0ZXh0Q29udGVudCA9IG1hc2tJbnB1dFZhbHVlKHtcbiAgICAgIGlzTWFza2VkOiBuZWVkTWFza2luZ1RleHQoXG4gICAgICAgIG4yLFxuICAgICAgICBtYXNrVGV4dENsYXNzLFxuICAgICAgICBtYXNrVGV4dFNlbGVjdG9yLFxuICAgICAgICB1bm1hc2tUZXh0Q2xhc3MsXG4gICAgICAgIHVubWFza1RleHRTZWxlY3RvcixcbiAgICAgICAgaXNJbnB1dE1hc2tlZFxuICAgICAgKSxcbiAgICAgIGVsZW1lbnQ6IG4yLFxuICAgICAgdmFsdWU6IHRleHRDb250ZW50LFxuICAgICAgbWFza0lucHV0Rm5cbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHR5cGU6IE5vZGVUeXBlJDIuVGV4dCxcbiAgICB0ZXh0Q29udGVudDogdGV4dENvbnRlbnQgfHwgXCJcIixcbiAgICBpc1N0eWxlLFxuICAgIHJvb3RJZFxuICB9O1xufVxuZnVuY3Rpb24gc2VyaWFsaXplRWxlbWVudE5vZGUobjIsIG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIGRvYyxcbiAgICBibG9ja0NsYXNzLFxuICAgIGJsb2NrU2VsZWN0b3IsXG4gICAgdW5ibG9ja1NlbGVjdG9yLFxuICAgIGlubGluZVN0eWxlc2hlZXQsXG4gICAgbWFza0lucHV0T3B0aW9ucyA9IHt9LFxuICAgIG1hc2tBdHRyaWJ1dGVGbixcbiAgICBtYXNrSW5wdXRGbixcbiAgICBkYXRhVVJMT3B0aW9ucyA9IHt9LFxuICAgIGlubGluZUltYWdlcyxcbiAgICByZWNvcmRDYW52YXMsXG4gICAga2VlcElmcmFtZVNyY0ZuLFxuICAgIG5ld2x5QWRkZWRFbGVtZW50ID0gZmFsc2UsXG4gICAgcm9vdElkLFxuICAgIG1hc2tUZXh0Q2xhc3MsXG4gICAgdW5tYXNrVGV4dENsYXNzLFxuICAgIG1hc2tUZXh0U2VsZWN0b3IsXG4gICAgdW5tYXNrVGV4dFNlbGVjdG9yXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBuZWVkQmxvY2sgPSBfaXNCbG9ja2VkRWxlbWVudChcbiAgICBuMixcbiAgICBibG9ja0NsYXNzLFxuICAgIGJsb2NrU2VsZWN0b3IsXG4gICAgdW5ibG9ja1NlbGVjdG9yXG4gICk7XG4gIGNvbnN0IHRhZ05hbWUgPSBnZXRWYWxpZFRhZ05hbWUkMShuMik7XG4gIGxldCBhdHRyaWJ1dGVzMiA9IHt9O1xuICBjb25zdCBsZW4gPSBuMi5hdHRyaWJ1dGVzLmxlbmd0aDtcbiAgZm9yIChsZXQgaTIgPSAwOyBpMiA8IGxlbjsgaTIrKykge1xuICAgIGNvbnN0IGF0dHIgPSBuMi5hdHRyaWJ1dGVzW2kyXTtcbiAgICBpZiAoYXR0ci5uYW1lICYmICFpZ25vcmVBdHRyaWJ1dGUodGFnTmFtZSwgYXR0ci5uYW1lLCBhdHRyLnZhbHVlKSkge1xuICAgICAgYXR0cmlidXRlczJbYXR0ci5uYW1lXSA9IHRyYW5zZm9ybUF0dHJpYnV0ZShcbiAgICAgICAgZG9jLFxuICAgICAgICB0YWdOYW1lLFxuICAgICAgICB0b0xvd2VyQ2FzZShhdHRyLm5hbWUpLFxuICAgICAgICBhdHRyLnZhbHVlLFxuICAgICAgICBuMixcbiAgICAgICAgbWFza0F0dHJpYnV0ZUZuXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAodGFnTmFtZSA9PT0gXCJsaW5rXCIgJiYgaW5saW5lU3R5bGVzaGVldCkge1xuICAgIGNvbnN0IHN0eWxlc2hlZXQgPSBBcnJheS5mcm9tKGRvYy5zdHlsZVNoZWV0cykuZmluZCgoczIpID0+IHtcbiAgICAgIHJldHVybiBzMi5ocmVmID09PSBuMi5ocmVmO1xuICAgIH0pO1xuICAgIGxldCBjc3NUZXh0ID0gbnVsbDtcbiAgICBpZiAoc3R5bGVzaGVldCkge1xuICAgICAgY3NzVGV4dCA9IHN0cmluZ2lmeVN0eWxlc2hlZXQoc3R5bGVzaGVldCk7XG4gICAgfVxuICAgIGlmIChjc3NUZXh0KSB7XG4gICAgICBhdHRyaWJ1dGVzMi5yZWwgPSBudWxsO1xuICAgICAgYXR0cmlidXRlczIuaHJlZiA9IG51bGw7XG4gICAgICBhdHRyaWJ1dGVzMi5jcm9zc29yaWdpbiA9IG51bGw7XG4gICAgICBhdHRyaWJ1dGVzMi5fY3NzVGV4dCA9IGFic29sdXRlVG9TdHlsZXNoZWV0KGNzc1RleHQsIHN0eWxlc2hlZXQuaHJlZik7XG4gICAgfVxuICB9XG4gIGlmICh0YWdOYW1lID09PSBcInN0eWxlXCIgJiYgbjIuc2hlZXQgJiYgLy8gVE9ETzogQ3VycmVudGx5IHdlIG9ubHkgdHJ5IHRvIGdldCBkeW5hbWljIHN0eWxlc2hlZXQgd2hlbiBpdCBpcyBhbiBlbXB0eSBzdHlsZSBlbGVtZW50XG4gICEobjIuaW5uZXJUZXh0IHx8IG4yLnRleHRDb250ZW50IHx8IFwiXCIpLnRyaW0oKS5sZW5ndGgpIHtcbiAgICBjb25zdCBjc3NUZXh0ID0gc3RyaW5naWZ5U3R5bGVzaGVldChcbiAgICAgIG4yLnNoZWV0XG4gICAgKTtcbiAgICBpZiAoY3NzVGV4dCkge1xuICAgICAgYXR0cmlidXRlczIuX2Nzc1RleHQgPSBhYnNvbHV0ZVRvU3R5bGVzaGVldChjc3NUZXh0LCBnZXRIcmVmKGRvYykpO1xuICAgIH1cbiAgfVxuICBpZiAodGFnTmFtZSA9PT0gXCJpbnB1dFwiIHx8IHRhZ05hbWUgPT09IFwidGV4dGFyZWFcIiB8fCB0YWdOYW1lID09PSBcInNlbGVjdFwiIHx8IHRhZ05hbWUgPT09IFwib3B0aW9uXCIpIHtcbiAgICBjb25zdCBlbCA9IG4yO1xuICAgIGNvbnN0IHR5cGUgPSBnZXRJbnB1dFR5cGUoZWwpO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0SW5wdXRWYWx1ZShlbCwgdG9VcHBlckNhc2UodGFnTmFtZSksIHR5cGUpO1xuICAgIGNvbnN0IGNoZWNrZWQgPSBlbC5jaGVja2VkO1xuICAgIGlmICh0eXBlICE9PSBcInN1Ym1pdFwiICYmIHR5cGUgIT09IFwiYnV0dG9uXCIgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGZvcmNlTWFzayA9IG5lZWRNYXNraW5nVGV4dChcbiAgICAgICAgZWwsXG4gICAgICAgIG1hc2tUZXh0Q2xhc3MsXG4gICAgICAgIG1hc2tUZXh0U2VsZWN0b3IsXG4gICAgICAgIHVubWFza1RleHRDbGFzcyxcbiAgICAgICAgdW5tYXNrVGV4dFNlbGVjdG9yLFxuICAgICAgICBzaG91bGRNYXNrSW5wdXQoe1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgdGFnTmFtZTogdG9VcHBlckNhc2UodGFnTmFtZSksXG4gICAgICAgICAgbWFza0lucHV0T3B0aW9uc1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIGF0dHJpYnV0ZXMyLnZhbHVlID0gbWFza0lucHV0VmFsdWUoe1xuICAgICAgICBpc01hc2tlZDogZm9yY2VNYXNrLFxuICAgICAgICBlbGVtZW50OiBlbCxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG1hc2tJbnB1dEZuXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgIGF0dHJpYnV0ZXMyLmNoZWNrZWQgPSBjaGVja2VkO1xuICAgIH1cbiAgfVxuICBpZiAodGFnTmFtZSA9PT0gXCJvcHRpb25cIikge1xuICAgIGlmIChuMi5zZWxlY3RlZCAmJiAhbWFza0lucHV0T3B0aW9uc1tcInNlbGVjdFwiXSkge1xuICAgICAgYXR0cmlidXRlczIuc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgYXR0cmlidXRlczIuc2VsZWN0ZWQ7XG4gICAgfVxuICB9XG4gIGlmICh0YWdOYW1lID09PSBcImNhbnZhc1wiICYmIHJlY29yZENhbnZhcykge1xuICAgIGlmIChuMi5fX2NvbnRleHQgPT09IFwiMmRcIikge1xuICAgICAgaWYgKCFpczJEQ2FudmFzQmxhbmsobjIpKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMyLnJyX2RhdGFVUkwgPSBuMi50b0RhdGFVUkwoXG4gICAgICAgICAgZGF0YVVSTE9wdGlvbnMudHlwZSxcbiAgICAgICAgICBkYXRhVVJMT3B0aW9ucy5xdWFsaXR5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghKFwiX19jb250ZXh0XCIgaW4gbjIpKSB7XG4gICAgICBjb25zdCBjYW52YXNEYXRhVVJMID0gbjIudG9EYXRhVVJMKFxuICAgICAgICBkYXRhVVJMT3B0aW9ucy50eXBlLFxuICAgICAgICBkYXRhVVJMT3B0aW9ucy5xdWFsaXR5XG4gICAgICApO1xuICAgICAgY29uc3QgYmxhbmtDYW52YXMgPSBkb2MuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICAgIGJsYW5rQ2FudmFzLndpZHRoID0gbjIud2lkdGg7XG4gICAgICBibGFua0NhbnZhcy5oZWlnaHQgPSBuMi5oZWlnaHQ7XG4gICAgICBjb25zdCBibGFua0NhbnZhc0RhdGFVUkwgPSBibGFua0NhbnZhcy50b0RhdGFVUkwoXG4gICAgICAgIGRhdGFVUkxPcHRpb25zLnR5cGUsXG4gICAgICAgIGRhdGFVUkxPcHRpb25zLnF1YWxpdHlcbiAgICAgICk7XG4gICAgICBpZiAoY2FudmFzRGF0YVVSTCAhPT0gYmxhbmtDYW52YXNEYXRhVVJMKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMyLnJyX2RhdGFVUkwgPSBjYW52YXNEYXRhVVJMO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAodGFnTmFtZSA9PT0gXCJpbWdcIiAmJiBpbmxpbmVJbWFnZXMpIHtcbiAgICBpZiAoIWNhbnZhc1NlcnZpY2UpIHtcbiAgICAgIGNhbnZhc1NlcnZpY2UgPSBkb2MuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICAgIGNhbnZhc0N0eCA9IGNhbnZhc1NlcnZpY2UuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIH1cbiAgICBjb25zdCBpbWFnZSA9IG4yO1xuICAgIGNvbnN0IGltYWdlU3JjID0gaW1hZ2UuY3VycmVudFNyYyB8fCBpbWFnZS5nZXRBdHRyaWJ1dGUoXCJzcmNcIikgfHwgXCI8dW5rbm93bi1zcmM+XCI7XG4gICAgY29uc3QgcHJpb3JDcm9zc09yaWdpbiA9IGltYWdlLmNyb3NzT3JpZ2luO1xuICAgIGNvbnN0IHJlY29yZElubGluZUltYWdlID0gKCkgPT4ge1xuICAgICAgaW1hZ2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgcmVjb3JkSW5saW5lSW1hZ2UpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2FudmFzU2VydmljZS53aWR0aCA9IGltYWdlLm5hdHVyYWxXaWR0aDtcbiAgICAgICAgY2FudmFzU2VydmljZS5oZWlnaHQgPSBpbWFnZS5uYXR1cmFsSGVpZ2h0O1xuICAgICAgICBjYW52YXNDdHguZHJhd0ltYWdlKGltYWdlLCAwLCAwKTtcbiAgICAgICAgYXR0cmlidXRlczIucnJfZGF0YVVSTCA9IGNhbnZhc1NlcnZpY2UudG9EYXRhVVJMKFxuICAgICAgICAgIGRhdGFVUkxPcHRpb25zLnR5cGUsXG4gICAgICAgICAgZGF0YVVSTE9wdGlvbnMucXVhbGl0eVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChpbWFnZS5jcm9zc09yaWdpbiAhPT0gXCJhbm9ueW1vdXNcIikge1xuICAgICAgICAgIGltYWdlLmNyb3NzT3JpZ2luID0gXCJhbm9ueW1vdXNcIjtcbiAgICAgICAgICBpZiAoaW1hZ2UuY29tcGxldGUgJiYgaW1hZ2UubmF0dXJhbFdpZHRoICE9PSAwKVxuICAgICAgICAgICAgcmVjb3JkSW5saW5lSW1hZ2UoKTtcbiAgICAgICAgICBlbHNlIGltYWdlLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHJlY29yZElubGluZUltYWdlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYENhbm5vdCBpbmxpbmUgaW1nIHNyYz0ke2ltYWdlU3JjfSEgRXJyb3I6ICR7ZXJyfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaW1hZ2UuY3Jvc3NPcmlnaW4gPT09IFwiYW5vbnltb3VzXCIpIHtcbiAgICAgICAgcHJpb3JDcm9zc09yaWdpbiA/IGF0dHJpYnV0ZXMyLmNyb3NzT3JpZ2luID0gcHJpb3JDcm9zc09yaWdpbiA6IGltYWdlLnJlbW92ZUF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKGltYWdlLmNvbXBsZXRlICYmIGltYWdlLm5hdHVyYWxXaWR0aCAhPT0gMCkgcmVjb3JkSW5saW5lSW1hZ2UoKTtcbiAgICBlbHNlIGltYWdlLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHJlY29yZElubGluZUltYWdlKTtcbiAgfVxuICBpZiAodGFnTmFtZSA9PT0gXCJhdWRpb1wiIHx8IHRhZ05hbWUgPT09IFwidmlkZW9cIikge1xuICAgIGF0dHJpYnV0ZXMyLnJyX21lZGlhU3RhdGUgPSBuMi5wYXVzZWQgPyBcInBhdXNlZFwiIDogXCJwbGF5ZWRcIjtcbiAgICBhdHRyaWJ1dGVzMi5ycl9tZWRpYUN1cnJlbnRUaW1lID0gbjIuY3VycmVudFRpbWU7XG4gIH1cbiAgaWYgKCFuZXdseUFkZGVkRWxlbWVudCkge1xuICAgIGlmIChuMi5zY3JvbGxMZWZ0KSB7XG4gICAgICBhdHRyaWJ1dGVzMi5ycl9zY3JvbGxMZWZ0ID0gbjIuc2Nyb2xsTGVmdDtcbiAgICB9XG4gICAgaWYgKG4yLnNjcm9sbFRvcCkge1xuICAgICAgYXR0cmlidXRlczIucnJfc2Nyb2xsVG9wID0gbjIuc2Nyb2xsVG9wO1xuICAgIH1cbiAgfVxuICBpZiAobmVlZEJsb2NrKSB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBuMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBhdHRyaWJ1dGVzMiA9IHtcbiAgICAgIGNsYXNzOiBhdHRyaWJ1dGVzMi5jbGFzcyxcbiAgICAgIHJyX3dpZHRoOiBgJHt3aWR0aH1weGAsXG4gICAgICBycl9oZWlnaHQ6IGAke2hlaWdodH1weGBcbiAgICB9O1xuICB9XG4gIGlmICh0YWdOYW1lID09PSBcImlmcmFtZVwiICYmICFrZWVwSWZyYW1lU3JjRm4oYXR0cmlidXRlczIuc3JjKSkge1xuICAgIGlmICghbmVlZEJsb2NrICYmICFnZXRJZnJhbWVDb250ZW50RG9jdW1lbnQobjIpKSB7XG4gICAgICBhdHRyaWJ1dGVzMi5ycl9zcmMgPSBhdHRyaWJ1dGVzMi5zcmM7XG4gICAgfVxuICAgIGRlbGV0ZSBhdHRyaWJ1dGVzMi5zcmM7XG4gIH1cbiAgbGV0IGlzQ3VzdG9tRWxlbWVudDtcbiAgdHJ5IHtcbiAgICBpZiAoY3VzdG9tRWxlbWVudHMuZ2V0KHRhZ05hbWUpKSBpc0N1c3RvbUVsZW1lbnQgPSB0cnVlO1xuICB9IGNhdGNoIChlMikge1xuICB9XG4gIHJldHVybiB7XG4gICAgdHlwZTogTm9kZVR5cGUkMi5FbGVtZW50LFxuICAgIHRhZ05hbWUsXG4gICAgYXR0cmlidXRlczogYXR0cmlidXRlczIsXG4gICAgY2hpbGROb2RlczogW10sXG4gICAgaXNTVkc6IGlzU1ZHRWxlbWVudChuMikgfHwgdm9pZCAwLFxuICAgIG5lZWRCbG9jayxcbiAgICByb290SWQsXG4gICAgaXNDdXN0b206IGlzQ3VzdG9tRWxlbWVudFxuICB9O1xufVxuZnVuY3Rpb24gbG93ZXJJZkV4aXN0cyhtYXliZUF0dHIpIHtcbiAgaWYgKG1heWJlQXR0ciA9PT0gdm9pZCAwIHx8IG1heWJlQXR0ciA9PT0gbnVsbCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBtYXliZUF0dHIudG9Mb3dlckNhc2UoKTtcbiAgfVxufVxuZnVuY3Rpb24gc2xpbURPTUV4Y2x1ZGVkKHNuLCBzbGltRE9NT3B0aW9ucykge1xuICBpZiAoc2xpbURPTU9wdGlvbnMuY29tbWVudCAmJiBzbi50eXBlID09PSBOb2RlVHlwZSQyLkNvbW1lbnQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChzbi50eXBlID09PSBOb2RlVHlwZSQyLkVsZW1lbnQpIHtcbiAgICBpZiAoc2xpbURPTU9wdGlvbnMuc2NyaXB0ICYmIC8vIHNjcmlwdCB0YWdcbiAgICAoc24udGFnTmFtZSA9PT0gXCJzY3JpcHRcIiB8fCAvLyAobW9kdWxlKXByZWxvYWQgbGlua1xuICAgIHNuLnRhZ05hbWUgPT09IFwibGlua1wiICYmIChzbi5hdHRyaWJ1dGVzLnJlbCA9PT0gXCJwcmVsb2FkXCIgfHwgc24uYXR0cmlidXRlcy5yZWwgPT09IFwibW9kdWxlcHJlbG9hZFwiKSB8fCAvLyBwcmVmZXRjaCBsaW5rXG4gICAgc24udGFnTmFtZSA9PT0gXCJsaW5rXCIgJiYgc24uYXR0cmlidXRlcy5yZWwgPT09IFwicHJlZmV0Y2hcIiAmJiB0eXBlb2Ygc24uYXR0cmlidXRlcy5ocmVmID09PSBcInN0cmluZ1wiICYmIGV4dHJhY3RGaWxlRXh0ZW5zaW9uKHNuLmF0dHJpYnV0ZXMuaHJlZikgPT09IFwianNcIikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoc2xpbURPTU9wdGlvbnMuaGVhZEZhdmljb24gJiYgKHNuLnRhZ05hbWUgPT09IFwibGlua1wiICYmIHNuLmF0dHJpYnV0ZXMucmVsID09PSBcInNob3J0Y3V0IGljb25cIiB8fCBzbi50YWdOYW1lID09PSBcIm1ldGFcIiAmJiAobG93ZXJJZkV4aXN0cyhzbi5hdHRyaWJ1dGVzLm5hbWUpLm1hdGNoKFxuICAgICAgL15tc2FwcGxpY2F0aW9uLXRpbGUoaW1hZ2V8Y29sb3IpJC9cbiAgICApIHx8IGxvd2VySWZFeGlzdHMoc24uYXR0cmlidXRlcy5uYW1lKSA9PT0gXCJhcHBsaWNhdGlvbi1uYW1lXCIgfHwgbG93ZXJJZkV4aXN0cyhzbi5hdHRyaWJ1dGVzLnJlbCkgPT09IFwiaWNvblwiIHx8IGxvd2VySWZFeGlzdHMoc24uYXR0cmlidXRlcy5yZWwpID09PSBcImFwcGxlLXRvdWNoLWljb25cIiB8fCBsb3dlcklmRXhpc3RzKHNuLmF0dHJpYnV0ZXMucmVsKSA9PT0gXCJzaG9ydGN1dCBpY29uXCIpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChzbi50YWdOYW1lID09PSBcIm1ldGFcIikge1xuICAgICAgaWYgKHNsaW1ET01PcHRpb25zLmhlYWRNZXRhRGVzY0tleXdvcmRzICYmIGxvd2VySWZFeGlzdHMoc24uYXR0cmlidXRlcy5uYW1lKS5tYXRjaCgvXmRlc2NyaXB0aW9ufGtleXdvcmRzJC8pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChzbGltRE9NT3B0aW9ucy5oZWFkTWV0YVNvY2lhbCAmJiAobG93ZXJJZkV4aXN0cyhzbi5hdHRyaWJ1dGVzLnByb3BlcnR5KS5tYXRjaCgvXihvZ3x0d2l0dGVyfGZiKTovKSB8fCAvLyBvZyA9IG9wZW5ncmFwaCAoZmFjZWJvb2spXG4gICAgICBsb3dlcklmRXhpc3RzKHNuLmF0dHJpYnV0ZXMubmFtZSkubWF0Y2goL14ob2d8dHdpdHRlcik6LykgfHwgbG93ZXJJZkV4aXN0cyhzbi5hdHRyaWJ1dGVzLm5hbWUpID09PSBcInBpbnRlcmVzdFwiKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoc2xpbURPTU9wdGlvbnMuaGVhZE1ldGFSb2JvdHMgJiYgKGxvd2VySWZFeGlzdHMoc24uYXR0cmlidXRlcy5uYW1lKSA9PT0gXCJyb2JvdHNcIiB8fCBsb3dlcklmRXhpc3RzKHNuLmF0dHJpYnV0ZXMubmFtZSkgPT09IFwiZ29vZ2xlYm90XCIgfHwgbG93ZXJJZkV4aXN0cyhzbi5hdHRyaWJ1dGVzLm5hbWUpID09PSBcImJpbmdib3RcIikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHNsaW1ET01PcHRpb25zLmhlYWRNZXRhSHR0cEVxdWl2ICYmIHNuLmF0dHJpYnV0ZXNbXCJodHRwLWVxdWl2XCJdICE9PSB2b2lkIDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHNsaW1ET01PcHRpb25zLmhlYWRNZXRhQXV0aG9yc2hpcCAmJiAobG93ZXJJZkV4aXN0cyhzbi5hdHRyaWJ1dGVzLm5hbWUpID09PSBcImF1dGhvclwiIHx8IGxvd2VySWZFeGlzdHMoc24uYXR0cmlidXRlcy5uYW1lKSA9PT0gXCJnZW5lcmF0b3JcIiB8fCBsb3dlcklmRXhpc3RzKHNuLmF0dHJpYnV0ZXMubmFtZSkgPT09IFwiZnJhbWV3b3JrXCIgfHwgbG93ZXJJZkV4aXN0cyhzbi5hdHRyaWJ1dGVzLm5hbWUpID09PSBcInB1Ymxpc2hlclwiIHx8IGxvd2VySWZFeGlzdHMoc24uYXR0cmlidXRlcy5uYW1lKSA9PT0gXCJwcm9naWRcIiB8fCBsb3dlcklmRXhpc3RzKHNuLmF0dHJpYnV0ZXMucHJvcGVydHkpLm1hdGNoKC9eYXJ0aWNsZTovKSB8fCBsb3dlcklmRXhpc3RzKHNuLmF0dHJpYnV0ZXMucHJvcGVydHkpLm1hdGNoKC9ecHJvZHVjdDovKSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHNsaW1ET01PcHRpb25zLmhlYWRNZXRhVmVyaWZpY2F0aW9uICYmIChsb3dlcklmRXhpc3RzKHNuLmF0dHJpYnV0ZXMubmFtZSkgPT09IFwiZ29vZ2xlLXNpdGUtdmVyaWZpY2F0aW9uXCIgfHwgbG93ZXJJZkV4aXN0cyhzbi5hdHRyaWJ1dGVzLm5hbWUpID09PSBcInlhbmRleC12ZXJpZmljYXRpb25cIiB8fCBsb3dlcklmRXhpc3RzKHNuLmF0dHJpYnV0ZXMubmFtZSkgPT09IFwiY3NyZi10b2tlblwiIHx8IGxvd2VySWZFeGlzdHMoc24uYXR0cmlidXRlcy5uYW1lKSA9PT0gXCJwOmRvbWFpbl92ZXJpZnlcIiB8fCBsb3dlcklmRXhpc3RzKHNuLmF0dHJpYnV0ZXMubmFtZSkgPT09IFwidmVyaWZ5LXYxXCIgfHwgbG93ZXJJZkV4aXN0cyhzbi5hdHRyaWJ1dGVzLm5hbWUpID09PSBcInZlcmlmaWNhdGlvblwiIHx8IGxvd2VySWZFeGlzdHMoc24uYXR0cmlidXRlcy5uYW1lKSA9PT0gXCJzaG9waWZ5LWNoZWNrb3V0LWFwaS10b2tlblwiKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplTm9kZVdpdGhJZChuMiwgb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgZG9jLFxuICAgIG1pcnJvcjogbWlycm9yMixcbiAgICBibG9ja0NsYXNzLFxuICAgIGJsb2NrU2VsZWN0b3IsXG4gICAgdW5ibG9ja1NlbGVjdG9yLFxuICAgIG1hc2tBbGxUZXh0LFxuICAgIG1hc2tUZXh0Q2xhc3MsXG4gICAgdW5tYXNrVGV4dENsYXNzLFxuICAgIG1hc2tUZXh0U2VsZWN0b3IsXG4gICAgdW5tYXNrVGV4dFNlbGVjdG9yLFxuICAgIHNraXBDaGlsZCA9IGZhbHNlLFxuICAgIGlubGluZVN0eWxlc2hlZXQgPSB0cnVlLFxuICAgIG1hc2tJbnB1dE9wdGlvbnMgPSB7fSxcbiAgICBtYXNrQXR0cmlidXRlRm4sXG4gICAgbWFza1RleHRGbixcbiAgICBtYXNrSW5wdXRGbixcbiAgICBzbGltRE9NT3B0aW9ucyxcbiAgICBkYXRhVVJMT3B0aW9ucyA9IHt9LFxuICAgIGlubGluZUltYWdlcyA9IGZhbHNlLFxuICAgIHJlY29yZENhbnZhcyA9IGZhbHNlLFxuICAgIG9uU2VyaWFsaXplLFxuICAgIG9uSWZyYW1lTG9hZCxcbiAgICBpZnJhbWVMb2FkVGltZW91dCA9IDVlMyxcbiAgICBvblN0eWxlc2hlZXRMb2FkLFxuICAgIHN0eWxlc2hlZXRMb2FkVGltZW91dCA9IDVlMyxcbiAgICBrZWVwSWZyYW1lU3JjRm4gPSAoKSA9PiBmYWxzZSxcbiAgICBuZXdseUFkZGVkRWxlbWVudCA9IGZhbHNlXG4gIH0gPSBvcHRpb25zO1xuICBsZXQgeyBwcmVzZXJ2ZVdoaXRlU3BhY2UgPSB0cnVlIH0gPSBvcHRpb25zO1xuICBjb25zdCBfc2VyaWFsaXplZE5vZGUgPSBzZXJpYWxpemVOb2RlKG4yLCB7XG4gICAgZG9jLFxuICAgIG1pcnJvcjogbWlycm9yMixcbiAgICBibG9ja0NsYXNzLFxuICAgIGJsb2NrU2VsZWN0b3IsXG4gICAgbWFza0FsbFRleHQsXG4gICAgdW5ibG9ja1NlbGVjdG9yLFxuICAgIG1hc2tUZXh0Q2xhc3MsXG4gICAgdW5tYXNrVGV4dENsYXNzLFxuICAgIG1hc2tUZXh0U2VsZWN0b3IsXG4gICAgdW5tYXNrVGV4dFNlbGVjdG9yLFxuICAgIGlubGluZVN0eWxlc2hlZXQsXG4gICAgbWFza0lucHV0T3B0aW9ucyxcbiAgICBtYXNrQXR0cmlidXRlRm4sXG4gICAgbWFza1RleHRGbixcbiAgICBtYXNrSW5wdXRGbixcbiAgICBkYXRhVVJMT3B0aW9ucyxcbiAgICBpbmxpbmVJbWFnZXMsXG4gICAgcmVjb3JkQ2FudmFzLFxuICAgIGtlZXBJZnJhbWVTcmNGbixcbiAgICBuZXdseUFkZGVkRWxlbWVudFxuICB9KTtcbiAgaWYgKCFfc2VyaWFsaXplZE5vZGUpIHtcbiAgICBjb25zb2xlLndhcm4objIsIFwibm90IHNlcmlhbGl6ZWRcIik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgbGV0IGlkO1xuICBpZiAobWlycm9yMi5oYXNOb2RlKG4yKSkge1xuICAgIGlkID0gbWlycm9yMi5nZXRJZChuMik7XG4gIH0gZWxzZSBpZiAoc2xpbURPTUV4Y2x1ZGVkKF9zZXJpYWxpemVkTm9kZSwgc2xpbURPTU9wdGlvbnMpIHx8ICFwcmVzZXJ2ZVdoaXRlU3BhY2UgJiYgX3NlcmlhbGl6ZWROb2RlLnR5cGUgPT09IE5vZGVUeXBlJDIuVGV4dCAmJiAhX3NlcmlhbGl6ZWROb2RlLmlzU3R5bGUgJiYgIV9zZXJpYWxpemVkTm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nbSwgXCJcIikubGVuZ3RoKSB7XG4gICAgaWQgPSBJR05PUkVEX05PREU7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBnZW5JZCgpO1xuICB9XG4gIGNvbnN0IHNlcmlhbGl6ZWROb2RlMiA9IE9iamVjdC5hc3NpZ24oX3NlcmlhbGl6ZWROb2RlLCB7IGlkIH0pO1xuICBtaXJyb3IyLmFkZChuMiwgc2VyaWFsaXplZE5vZGUyKTtcbiAgaWYgKGlkID09PSBJR05PUkVEX05PREUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAob25TZXJpYWxpemUpIHtcbiAgICBvblNlcmlhbGl6ZShuMik7XG4gIH1cbiAgbGV0IHJlY29yZENoaWxkID0gIXNraXBDaGlsZDtcbiAgaWYgKHNlcmlhbGl6ZWROb2RlMi50eXBlID09PSBOb2RlVHlwZSQyLkVsZW1lbnQpIHtcbiAgICByZWNvcmRDaGlsZCA9IHJlY29yZENoaWxkICYmICFzZXJpYWxpemVkTm9kZTIubmVlZEJsb2NrO1xuICAgIGRlbGV0ZSBzZXJpYWxpemVkTm9kZTIubmVlZEJsb2NrO1xuICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBuMi5zaGFkb3dSb290O1xuICAgIGlmIChzaGFkb3dSb290ICYmIGlzTmF0aXZlU2hhZG93RG9tKHNoYWRvd1Jvb3QpKVxuICAgICAgc2VyaWFsaXplZE5vZGUyLmlzU2hhZG93SG9zdCA9IHRydWU7XG4gIH1cbiAgaWYgKChzZXJpYWxpemVkTm9kZTIudHlwZSA9PT0gTm9kZVR5cGUkMi5Eb2N1bWVudCB8fCBzZXJpYWxpemVkTm9kZTIudHlwZSA9PT0gTm9kZVR5cGUkMi5FbGVtZW50KSAmJiByZWNvcmRDaGlsZCkge1xuICAgIGlmIChzbGltRE9NT3B0aW9ucy5oZWFkV2hpdGVzcGFjZSAmJiBzZXJpYWxpemVkTm9kZTIudHlwZSA9PT0gTm9kZVR5cGUkMi5FbGVtZW50ICYmIHNlcmlhbGl6ZWROb2RlMi50YWdOYW1lID09PSBcImhlYWRcIikge1xuICAgICAgcHJlc2VydmVXaGl0ZVNwYWNlID0gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGJ5cGFzc09wdGlvbnMgPSB7XG4gICAgICBkb2MsXG4gICAgICBtaXJyb3I6IG1pcnJvcjIsXG4gICAgICBibG9ja0NsYXNzLFxuICAgICAgYmxvY2tTZWxlY3RvcixcbiAgICAgIG1hc2tBbGxUZXh0LFxuICAgICAgdW5ibG9ja1NlbGVjdG9yLFxuICAgICAgbWFza1RleHRDbGFzcyxcbiAgICAgIHVubWFza1RleHRDbGFzcyxcbiAgICAgIG1hc2tUZXh0U2VsZWN0b3IsXG4gICAgICB1bm1hc2tUZXh0U2VsZWN0b3IsXG4gICAgICBza2lwQ2hpbGQsXG4gICAgICBpbmxpbmVTdHlsZXNoZWV0LFxuICAgICAgbWFza0lucHV0T3B0aW9ucyxcbiAgICAgIG1hc2tBdHRyaWJ1dGVGbixcbiAgICAgIG1hc2tUZXh0Rm4sXG4gICAgICBtYXNrSW5wdXRGbixcbiAgICAgIHNsaW1ET01PcHRpb25zLFxuICAgICAgZGF0YVVSTE9wdGlvbnMsXG4gICAgICBpbmxpbmVJbWFnZXMsXG4gICAgICByZWNvcmRDYW52YXMsXG4gICAgICBwcmVzZXJ2ZVdoaXRlU3BhY2UsXG4gICAgICBvblNlcmlhbGl6ZSxcbiAgICAgIG9uSWZyYW1lTG9hZCxcbiAgICAgIGlmcmFtZUxvYWRUaW1lb3V0LFxuICAgICAgb25TdHlsZXNoZWV0TG9hZCxcbiAgICAgIHN0eWxlc2hlZXRMb2FkVGltZW91dCxcbiAgICAgIGtlZXBJZnJhbWVTcmNGblxuICAgIH07XG4gICAgZm9yIChjb25zdCBjaGlsZE4gb2YgQXJyYXkuZnJvbShuMi5jaGlsZE5vZGVzKSkge1xuICAgICAgY29uc3Qgc2VyaWFsaXplZENoaWxkTm9kZSA9IHNlcmlhbGl6ZU5vZGVXaXRoSWQoY2hpbGROLCBieXBhc3NPcHRpb25zKTtcbiAgICAgIGlmIChzZXJpYWxpemVkQ2hpbGROb2RlKSB7XG4gICAgICAgIHNlcmlhbGl6ZWROb2RlMi5jaGlsZE5vZGVzLnB1c2goc2VyaWFsaXplZENoaWxkTm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc0VsZW1lbnQkMShuMikgJiYgbjIuc2hhZG93Um9vdCkge1xuICAgICAgZm9yIChjb25zdCBjaGlsZE4gb2YgQXJyYXkuZnJvbShuMi5zaGFkb3dSb290LmNoaWxkTm9kZXMpKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRDaGlsZE5vZGUgPSBzZXJpYWxpemVOb2RlV2l0aElkKGNoaWxkTiwgYnlwYXNzT3B0aW9ucyk7XG4gICAgICAgIGlmIChzZXJpYWxpemVkQ2hpbGROb2RlKSB7XG4gICAgICAgICAgaXNOYXRpdmVTaGFkb3dEb20objIuc2hhZG93Um9vdCkgJiYgKHNlcmlhbGl6ZWRDaGlsZE5vZGUuaXNTaGFkb3cgPSB0cnVlKTtcbiAgICAgICAgICBzZXJpYWxpemVkTm9kZTIuY2hpbGROb2Rlcy5wdXNoKHNlcmlhbGl6ZWRDaGlsZE5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChuMi5wYXJlbnROb2RlICYmIGlzU2hhZG93Um9vdChuMi5wYXJlbnROb2RlKSAmJiBpc05hdGl2ZVNoYWRvd0RvbShuMi5wYXJlbnROb2RlKSkge1xuICAgIHNlcmlhbGl6ZWROb2RlMi5pc1NoYWRvdyA9IHRydWU7XG4gIH1cbiAgaWYgKHNlcmlhbGl6ZWROb2RlMi50eXBlID09PSBOb2RlVHlwZSQyLkVsZW1lbnQgJiYgc2VyaWFsaXplZE5vZGUyLnRhZ05hbWUgPT09IFwiaWZyYW1lXCIgJiYgIV9pc0Jsb2NrZWRFbGVtZW50KFxuICAgIG4yLFxuICAgIGJsb2NrQ2xhc3MsXG4gICAgYmxvY2tTZWxlY3RvcixcbiAgICB1bmJsb2NrU2VsZWN0b3JcbiAgKSkge1xuICAgIG9uY2VJZnJhbWVMb2FkZWQoXG4gICAgICBuMixcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgaWZyYW1lRG9jID0gZ2V0SWZyYW1lQ29udGVudERvY3VtZW50KG4yKTtcbiAgICAgICAgaWYgKGlmcmFtZURvYyAmJiBvbklmcmFtZUxvYWQpIHtcbiAgICAgICAgICBjb25zdCBzZXJpYWxpemVkSWZyYW1lTm9kZSA9IHNlcmlhbGl6ZU5vZGVXaXRoSWQoaWZyYW1lRG9jLCB7XG4gICAgICAgICAgICBkb2M6IGlmcmFtZURvYyxcbiAgICAgICAgICAgIG1pcnJvcjogbWlycm9yMixcbiAgICAgICAgICAgIGJsb2NrQ2xhc3MsXG4gICAgICAgICAgICBibG9ja1NlbGVjdG9yLFxuICAgICAgICAgICAgdW5ibG9ja1NlbGVjdG9yLFxuICAgICAgICAgICAgbWFza0FsbFRleHQsXG4gICAgICAgICAgICBtYXNrVGV4dENsYXNzLFxuICAgICAgICAgICAgdW5tYXNrVGV4dENsYXNzLFxuICAgICAgICAgICAgbWFza1RleHRTZWxlY3RvcixcbiAgICAgICAgICAgIHVubWFza1RleHRTZWxlY3RvcixcbiAgICAgICAgICAgIHNraXBDaGlsZDogZmFsc2UsXG4gICAgICAgICAgICBpbmxpbmVTdHlsZXNoZWV0LFxuICAgICAgICAgICAgbWFza0lucHV0T3B0aW9ucyxcbiAgICAgICAgICAgIG1hc2tBdHRyaWJ1dGVGbixcbiAgICAgICAgICAgIG1hc2tUZXh0Rm4sXG4gICAgICAgICAgICBtYXNrSW5wdXRGbixcbiAgICAgICAgICAgIHNsaW1ET01PcHRpb25zLFxuICAgICAgICAgICAgZGF0YVVSTE9wdGlvbnMsXG4gICAgICAgICAgICBpbmxpbmVJbWFnZXMsXG4gICAgICAgICAgICByZWNvcmRDYW52YXMsXG4gICAgICAgICAgICBwcmVzZXJ2ZVdoaXRlU3BhY2UsXG4gICAgICAgICAgICBvblNlcmlhbGl6ZSxcbiAgICAgICAgICAgIG9uSWZyYW1lTG9hZCxcbiAgICAgICAgICAgIGlmcmFtZUxvYWRUaW1lb3V0LFxuICAgICAgICAgICAgb25TdHlsZXNoZWV0TG9hZCxcbiAgICAgICAgICAgIHN0eWxlc2hlZXRMb2FkVGltZW91dCxcbiAgICAgICAgICAgIGtlZXBJZnJhbWVTcmNGblxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChzZXJpYWxpemVkSWZyYW1lTm9kZSkge1xuICAgICAgICAgICAgb25JZnJhbWVMb2FkKFxuICAgICAgICAgICAgICBuMixcbiAgICAgICAgICAgICAgc2VyaWFsaXplZElmcmFtZU5vZGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaWZyYW1lTG9hZFRpbWVvdXRcbiAgICApO1xuICB9XG4gIGlmIChzZXJpYWxpemVkTm9kZTIudHlwZSA9PT0gTm9kZVR5cGUkMi5FbGVtZW50ICYmIHNlcmlhbGl6ZWROb2RlMi50YWdOYW1lID09PSBcImxpbmtcIiAmJiB0eXBlb2Ygc2VyaWFsaXplZE5vZGUyLmF0dHJpYnV0ZXMucmVsID09PSBcInN0cmluZ1wiICYmIChzZXJpYWxpemVkTm9kZTIuYXR0cmlidXRlcy5yZWwgPT09IFwic3R5bGVzaGVldFwiIHx8IHNlcmlhbGl6ZWROb2RlMi5hdHRyaWJ1dGVzLnJlbCA9PT0gXCJwcmVsb2FkXCIgJiYgdHlwZW9mIHNlcmlhbGl6ZWROb2RlMi5hdHRyaWJ1dGVzLmhyZWYgPT09IFwic3RyaW5nXCIgJiYgZXh0cmFjdEZpbGVFeHRlbnNpb24oc2VyaWFsaXplZE5vZGUyLmF0dHJpYnV0ZXMuaHJlZikgPT09IFwiY3NzXCIpKSB7XG4gICAgb25jZVN0eWxlc2hlZXRMb2FkZWQoXG4gICAgICBuMixcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKG9uU3R5bGVzaGVldExvYWQpIHtcbiAgICAgICAgICBjb25zdCBzZXJpYWxpemVkTGlua05vZGUgPSBzZXJpYWxpemVOb2RlV2l0aElkKG4yLCB7XG4gICAgICAgICAgICBkb2MsXG4gICAgICAgICAgICBtaXJyb3I6IG1pcnJvcjIsXG4gICAgICAgICAgICBibG9ja0NsYXNzLFxuICAgICAgICAgICAgYmxvY2tTZWxlY3RvcixcbiAgICAgICAgICAgIHVuYmxvY2tTZWxlY3RvcixcbiAgICAgICAgICAgIG1hc2tBbGxUZXh0LFxuICAgICAgICAgICAgbWFza1RleHRDbGFzcyxcbiAgICAgICAgICAgIHVubWFza1RleHRDbGFzcyxcbiAgICAgICAgICAgIG1hc2tUZXh0U2VsZWN0b3IsXG4gICAgICAgICAgICB1bm1hc2tUZXh0U2VsZWN0b3IsXG4gICAgICAgICAgICBza2lwQ2hpbGQ6IGZhbHNlLFxuICAgICAgICAgICAgaW5saW5lU3R5bGVzaGVldCxcbiAgICAgICAgICAgIG1hc2tJbnB1dE9wdGlvbnMsXG4gICAgICAgICAgICBtYXNrQXR0cmlidXRlRm4sXG4gICAgICAgICAgICBtYXNrVGV4dEZuLFxuICAgICAgICAgICAgbWFza0lucHV0Rm4sXG4gICAgICAgICAgICBzbGltRE9NT3B0aW9ucyxcbiAgICAgICAgICAgIGRhdGFVUkxPcHRpb25zLFxuICAgICAgICAgICAgaW5saW5lSW1hZ2VzLFxuICAgICAgICAgICAgcmVjb3JkQ2FudmFzLFxuICAgICAgICAgICAgcHJlc2VydmVXaGl0ZVNwYWNlLFxuICAgICAgICAgICAgb25TZXJpYWxpemUsXG4gICAgICAgICAgICBvbklmcmFtZUxvYWQsXG4gICAgICAgICAgICBpZnJhbWVMb2FkVGltZW91dCxcbiAgICAgICAgICAgIG9uU3R5bGVzaGVldExvYWQsXG4gICAgICAgICAgICBzdHlsZXNoZWV0TG9hZFRpbWVvdXQsXG4gICAgICAgICAgICBrZWVwSWZyYW1lU3JjRm5cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoc2VyaWFsaXplZExpbmtOb2RlKSB7XG4gICAgICAgICAgICBvblN0eWxlc2hlZXRMb2FkKFxuICAgICAgICAgICAgICBuMixcbiAgICAgICAgICAgICAgc2VyaWFsaXplZExpbmtOb2RlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHN0eWxlc2hlZXRMb2FkVGltZW91dFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHNlcmlhbGl6ZWROb2RlMjtcbn1cbmZ1bmN0aW9uIHNuYXBzaG90KG4yLCBvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICBtaXJyb3I6IG1pcnJvcjIgPSBuZXcgTWlycm9yKCksXG4gICAgYmxvY2tDbGFzcyA9IFwicnItYmxvY2tcIixcbiAgICBibG9ja1NlbGVjdG9yID0gbnVsbCxcbiAgICB1bmJsb2NrU2VsZWN0b3IgPSBudWxsLFxuICAgIG1hc2tBbGxUZXh0ID0gZmFsc2UsXG4gICAgbWFza1RleHRDbGFzcyA9IFwicnItbWFza1wiLFxuICAgIHVubWFza1RleHRDbGFzcyA9IG51bGwsXG4gICAgbWFza1RleHRTZWxlY3RvciA9IG51bGwsXG4gICAgdW5tYXNrVGV4dFNlbGVjdG9yID0gbnVsbCxcbiAgICBpbmxpbmVTdHlsZXNoZWV0ID0gdHJ1ZSxcbiAgICBpbmxpbmVJbWFnZXMgPSBmYWxzZSxcbiAgICByZWNvcmRDYW52YXMgPSBmYWxzZSxcbiAgICBtYXNrQWxsSW5wdXRzID0gZmFsc2UsXG4gICAgbWFza0F0dHJpYnV0ZUZuLFxuICAgIG1hc2tUZXh0Rm4sXG4gICAgbWFza0lucHV0Rm4sXG4gICAgc2xpbURPTSA9IGZhbHNlLFxuICAgIGRhdGFVUkxPcHRpb25zLFxuICAgIHByZXNlcnZlV2hpdGVTcGFjZSxcbiAgICBvblNlcmlhbGl6ZSxcbiAgICBvbklmcmFtZUxvYWQsXG4gICAgaWZyYW1lTG9hZFRpbWVvdXQsXG4gICAgb25TdHlsZXNoZWV0TG9hZCxcbiAgICBzdHlsZXNoZWV0TG9hZFRpbWVvdXQsXG4gICAga2VlcElmcmFtZVNyY0ZuID0gKCkgPT4gZmFsc2VcbiAgfSA9IG9wdGlvbnMgfHwge307XG4gIGNvbnN0IG1hc2tJbnB1dE9wdGlvbnMgPSBtYXNrQWxsSW5wdXRzID09PSB0cnVlID8ge1xuICAgIGNvbG9yOiB0cnVlLFxuICAgIGRhdGU6IHRydWUsXG4gICAgXCJkYXRldGltZS1sb2NhbFwiOiB0cnVlLFxuICAgIGVtYWlsOiB0cnVlLFxuICAgIG1vbnRoOiB0cnVlLFxuICAgIG51bWJlcjogdHJ1ZSxcbiAgICByYW5nZTogdHJ1ZSxcbiAgICBzZWFyY2g6IHRydWUsXG4gICAgdGVsOiB0cnVlLFxuICAgIHRleHQ6IHRydWUsXG4gICAgdGltZTogdHJ1ZSxcbiAgICB1cmw6IHRydWUsXG4gICAgd2VlazogdHJ1ZSxcbiAgICB0ZXh0YXJlYTogdHJ1ZSxcbiAgICBzZWxlY3Q6IHRydWVcbiAgfSA6IG1hc2tBbGxJbnB1dHMgPT09IGZhbHNlID8ge30gOiBtYXNrQWxsSW5wdXRzO1xuICBjb25zdCBzbGltRE9NT3B0aW9ucyA9IHNsaW1ET00gPT09IHRydWUgfHwgc2xpbURPTSA9PT0gXCJhbGxcIiA/IChcbiAgICAvLyBpZiB0cnVlOiBzZXQgb2Ygc2Vuc2libGUgb3B0aW9ucyB0aGF0IHNob3VsZCBub3QgdGhyb3cgYXdheSBhbnkgaW5mb3JtYXRpb25cbiAgICB7XG4gICAgICBzY3JpcHQ6IHRydWUsXG4gICAgICBjb21tZW50OiB0cnVlLFxuICAgICAgaGVhZEZhdmljb246IHRydWUsXG4gICAgICBoZWFkV2hpdGVzcGFjZTogdHJ1ZSxcbiAgICAgIGhlYWRNZXRhRGVzY0tleXdvcmRzOiBzbGltRE9NID09PSBcImFsbFwiLFxuICAgICAgLy8gZGVzdHJ1Y3RpdmVcbiAgICAgIGhlYWRNZXRhU29jaWFsOiB0cnVlLFxuICAgICAgaGVhZE1ldGFSb2JvdHM6IHRydWUsXG4gICAgICBoZWFkTWV0YUh0dHBFcXVpdjogdHJ1ZSxcbiAgICAgIGhlYWRNZXRhQXV0aG9yc2hpcDogdHJ1ZSxcbiAgICAgIGhlYWRNZXRhVmVyaWZpY2F0aW9uOiB0cnVlXG4gICAgfVxuICApIDogc2xpbURPTSA9PT0gZmFsc2UgPyB7fSA6IHNsaW1ET007XG4gIHJldHVybiBzZXJpYWxpemVOb2RlV2l0aElkKG4yLCB7XG4gICAgZG9jOiBuMixcbiAgICBtaXJyb3I6IG1pcnJvcjIsXG4gICAgYmxvY2tDbGFzcyxcbiAgICBibG9ja1NlbGVjdG9yLFxuICAgIHVuYmxvY2tTZWxlY3RvcixcbiAgICBtYXNrQWxsVGV4dCxcbiAgICBtYXNrVGV4dENsYXNzLFxuICAgIHVubWFza1RleHRDbGFzcyxcbiAgICBtYXNrVGV4dFNlbGVjdG9yLFxuICAgIHVubWFza1RleHRTZWxlY3RvcixcbiAgICBza2lwQ2hpbGQ6IGZhbHNlLFxuICAgIGlubGluZVN0eWxlc2hlZXQsXG4gICAgbWFza0lucHV0T3B0aW9ucyxcbiAgICBtYXNrQXR0cmlidXRlRm4sXG4gICAgbWFza1RleHRGbixcbiAgICBtYXNrSW5wdXRGbixcbiAgICBzbGltRE9NT3B0aW9ucyxcbiAgICBkYXRhVVJMT3B0aW9ucyxcbiAgICBpbmxpbmVJbWFnZXMsXG4gICAgcmVjb3JkQ2FudmFzLFxuICAgIHByZXNlcnZlV2hpdGVTcGFjZSxcbiAgICBvblNlcmlhbGl6ZSxcbiAgICBvbklmcmFtZUxvYWQsXG4gICAgaWZyYW1lTG9hZFRpbWVvdXQsXG4gICAgb25TdHlsZXNoZWV0TG9hZCxcbiAgICBzdHlsZXNoZWV0TG9hZFRpbWVvdXQsXG4gICAga2VlcElmcmFtZVNyY0ZuLFxuICAgIG5ld2x5QWRkZWRFbGVtZW50OiBmYWxzZVxuICB9KTtcbn1cbmZ1bmN0aW9uIG9uKHR5cGUsIGZuLCB0YXJnZXQgPSBkb2N1bWVudCkge1xuICBjb25zdCBvcHRpb25zID0geyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZuLCBvcHRpb25zKTtcbiAgcmV0dXJuICgpID0+IHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGZuLCBvcHRpb25zKTtcbn1cbmNvbnN0IERFUEFSVEVEX01JUlJPUl9BQ0NFU1NfV0FSTklORyA9IFwiUGxlYXNlIHN0b3AgaW1wb3J0IG1pcnJvciBkaXJlY3RseS4gSW5zdGVhZCBvZiB0aGF0LFxcclxcbm5vdyB5b3UgY2FuIHVzZSByZXBsYXllci5nZXRNaXJyb3IoKSB0byBhY2Nlc3MgdGhlIG1pcnJvciBpbnN0YW5jZSBvZiBhIHJlcGxheWVyLFxcclxcbm9yIHlvdSBjYW4gdXNlIHJlY29yZC5taXJyb3IgdG8gYWNjZXNzIHRoZSBtaXJyb3IgaW5zdGFuY2UgZHVyaW5nIHJlY29yZGluZy5cIjtcbmxldCBfbWlycm9yID0ge1xuICBtYXA6IHt9LFxuICBnZXRJZCgpIHtcbiAgICBjb25zb2xlLmVycm9yKERFUEFSVEVEX01JUlJPUl9BQ0NFU1NfV0FSTklORyk7XG4gICAgcmV0dXJuIC0xO1xuICB9LFxuICBnZXROb2RlKCkge1xuICAgIGNvbnNvbGUuZXJyb3IoREVQQVJURURfTUlSUk9SX0FDQ0VTU19XQVJOSU5HKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgcmVtb3ZlTm9kZUZyb21NYXAoKSB7XG4gICAgY29uc29sZS5lcnJvcihERVBBUlRFRF9NSVJST1JfQUNDRVNTX1dBUk5JTkcpO1xuICB9LFxuICBoYXMoKSB7XG4gICAgY29uc29sZS5lcnJvcihERVBBUlRFRF9NSVJST1JfQUNDRVNTX1dBUk5JTkcpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgcmVzZXQoKSB7XG4gICAgY29uc29sZS5lcnJvcihERVBBUlRFRF9NSVJST1JfQUNDRVNTX1dBUk5JTkcpO1xuICB9XG59O1xuaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LlByb3h5ICYmIHdpbmRvdy5SZWZsZWN0KSB7XG4gIF9taXJyb3IgPSBuZXcgUHJveHkoX21pcnJvciwge1xuICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICBpZiAocHJvcCA9PT0gXCJtYXBcIikge1xuICAgICAgICBjb25zb2xlLmVycm9yKERFUEFSVEVEX01JUlJPUl9BQ0NFU1NfV0FSTklORyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcik7XG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIHRocm90dGxlJDEoZnVuYywgd2FpdCwgb3B0aW9ucyA9IHt9KSB7XG4gIGxldCB0aW1lb3V0ID0gbnVsbDtcbiAgbGV0IHByZXZpb3VzID0gMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkge1xuICAgICAgcHJldmlvdXMgPSBub3c7XG4gICAgfVxuICAgIGNvbnN0IHJlbWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzO1xuICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiB3YWl0KSB7XG4gICAgICBpZiAodGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQkMih0aW1lb3V0KTtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICB9XG4gICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfSBlbHNlIGlmICghdGltZW91dCAmJiBvcHRpb25zLnRyYWlsaW5nICE9PSBmYWxzZSkge1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQkMSgoKSA9PiB7XG4gICAgICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBEYXRlLm5vdygpO1xuICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIH0sIHJlbWFpbmluZyk7XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gaG9va1NldHRlcih0YXJnZXQsIGtleSwgZCwgaXNSZXZva2VkLCB3aW4gPSB3aW5kb3cpIHtcbiAgY29uc3Qgb3JpZ2luYWwgPSB3aW4uT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gIHdpbi5PYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgdGFyZ2V0LFxuICAgIGtleSxcbiAgICBpc1Jldm9rZWQgPyBkIDoge1xuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHNldFRpbWVvdXQkMSgoKSA9PiB7XG4gICAgICAgICAgZC5zZXQuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgIH0sIDApO1xuICAgICAgICBpZiAob3JpZ2luYWwgJiYgb3JpZ2luYWwuc2V0KSB7XG4gICAgICAgICAgb3JpZ2luYWwuc2V0LmNhbGwodGhpcywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICApO1xuICByZXR1cm4gKCkgPT4gaG9va1NldHRlcih0YXJnZXQsIGtleSwgb3JpZ2luYWwgfHwge30sIHRydWUpO1xufVxuZnVuY3Rpb24gcGF0Y2goc291cmNlLCBuYW1lLCByZXBsYWNlbWVudCkge1xuICB0cnkge1xuICAgIGlmICghKG5hbWUgaW4gc291cmNlKSkge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IG9yaWdpbmFsID0gc291cmNlW25hbWVdO1xuICAgIGNvbnN0IHdyYXBwZWQgPSByZXBsYWNlbWVudChvcmlnaW5hbCk7XG4gICAgaWYgKHR5cGVvZiB3cmFwcGVkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHdyYXBwZWQucHJvdG90eXBlID0gd3JhcHBlZC5wcm90b3R5cGUgfHwge307XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3cmFwcGVkLCB7XG4gICAgICAgIF9fcnJ3ZWJfb3JpZ2luYWxfXzoge1xuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiBvcmlnaW5hbFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgc291cmNlW25hbWVdID0gd3JhcHBlZDtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgc291cmNlW25hbWVdID0gb3JpZ2luYWw7XG4gICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICB9O1xuICB9XG59XG5sZXQgbm93VGltZXN0YW1wID0gRGF0ZS5ub3c7XG5pZiAoIS8qIEBfX1BVUkVfXyAqLyAvWzEtOV1bMC05XXsxMn0vLnRlc3QoRGF0ZS5ub3coKS50b1N0cmluZygpKSkge1xuICBub3dUaW1lc3RhbXAgPSAoKSA9PiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbn1cbmZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbCh3aW4pIHtcbiAgY29uc3QgZG9jID0gd2luLmRvY3VtZW50O1xuICByZXR1cm4ge1xuICAgIGxlZnQ6IGRvYy5zY3JvbGxpbmdFbGVtZW50ID8gZG9jLnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCA6IHdpbi5wYWdlWE9mZnNldCAhPT0gdm9pZCAwID8gd2luLnBhZ2VYT2Zmc2V0IDogZG9jPy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCB8fCBkb2M/LmJvZHk/LnBhcmVudEVsZW1lbnQ/LnNjcm9sbExlZnQgfHwgZG9jPy5ib2R5Py5zY3JvbGxMZWZ0IHx8IDAsXG4gICAgdG9wOiBkb2Muc2Nyb2xsaW5nRWxlbWVudCA/IGRvYy5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCA6IHdpbi5wYWdlWU9mZnNldCAhPT0gdm9pZCAwID8gd2luLnBhZ2VZT2Zmc2V0IDogZG9jPy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IGRvYz8uYm9keT8ucGFyZW50RWxlbWVudD8uc2Nyb2xsVG9wIHx8IGRvYz8uYm9keT8uc2Nyb2xsVG9wIHx8IDBcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFdpbmRvd0hlaWdodCgpIHtcbiAgcmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCB8fCBkb2N1bWVudC5ib2R5ICYmIGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0O1xufVxuZnVuY3Rpb24gZ2V0V2luZG93V2lkdGgoKSB7XG4gIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIHx8IGRvY3VtZW50LmJvZHkgJiYgZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDtcbn1cbmZ1bmN0aW9uIGNsb3Nlc3RFbGVtZW50T2ZOb2RlJDEobm9kZSkge1xuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGVsID0gbm9kZS5ub2RlVHlwZSA9PT0gbm9kZS5FTEVNRU5UX05PREUgPyBub2RlIDogbm9kZS5wYXJlbnRFbGVtZW50O1xuICAgIHJldHVybiBlbDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gaXNCbG9ja2VkKG5vZGUsIGJsb2NrQ2xhc3MsIGJsb2NrU2VsZWN0b3IsIHVuYmxvY2tTZWxlY3RvciwgY2hlY2tBbmNlc3RvcnMpIHtcbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGVsID0gY2xvc2VzdEVsZW1lbnRPZk5vZGUkMShub2RlKTtcbiAgaWYgKCFlbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBibG9ja2VkUHJlZGljYXRlID0gY3JlYXRlTWF0Y2hQcmVkaWNhdGUoYmxvY2tDbGFzcywgYmxvY2tTZWxlY3Rvcik7XG4gIGlmICghY2hlY2tBbmNlc3RvcnMpIHtcbiAgICBjb25zdCBpc1VuYmxvY2tlZCA9IHVuYmxvY2tTZWxlY3RvciAmJiBlbC5tYXRjaGVzKHVuYmxvY2tTZWxlY3Rvcik7XG4gICAgcmV0dXJuIGJsb2NrZWRQcmVkaWNhdGUoZWwpICYmICFpc1VuYmxvY2tlZDtcbiAgfVxuICBjb25zdCBibG9ja0Rpc3RhbmNlID0gZGlzdGFuY2VUb01hdGNoKGVsLCBibG9ja2VkUHJlZGljYXRlKTtcbiAgbGV0IHVuYmxvY2tEaXN0YW5jZSA9IC0xO1xuICBpZiAoYmxvY2tEaXN0YW5jZSA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHVuYmxvY2tTZWxlY3Rvcikge1xuICAgIHVuYmxvY2tEaXN0YW5jZSA9IGRpc3RhbmNlVG9NYXRjaChcbiAgICAgIGVsLFxuICAgICAgY3JlYXRlTWF0Y2hQcmVkaWNhdGUobnVsbCwgdW5ibG9ja1NlbGVjdG9yKVxuICAgICk7XG4gIH1cbiAgaWYgKGJsb2NrRGlzdGFuY2UgPiAtMSAmJiB1bmJsb2NrRGlzdGFuY2UgPCAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGJsb2NrRGlzdGFuY2UgPCB1bmJsb2NrRGlzdGFuY2U7XG59XG5mdW5jdGlvbiBpc1NlcmlhbGl6ZWQobjIsIG1pcnJvcjIpIHtcbiAgcmV0dXJuIG1pcnJvcjIuZ2V0SWQobjIpICE9PSAtMTtcbn1cbmZ1bmN0aW9uIGlzSWdub3JlZChuMiwgbWlycm9yMikge1xuICByZXR1cm4gbWlycm9yMi5nZXRJZChuMikgPT09IElHTk9SRURfTk9ERTtcbn1cbmZ1bmN0aW9uIGlzQW5jZXN0b3JSZW1vdmVkKHRhcmdldCwgbWlycm9yMikge1xuICBpZiAoaXNTaGFkb3dSb290KHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgaWQgPSBtaXJyb3IyLmdldElkKHRhcmdldCk7XG4gIGlmICghbWlycm9yMi5oYXMoaWQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHRhcmdldC5wYXJlbnROb2RlICYmIHRhcmdldC5wYXJlbnROb2RlLm5vZGVUeXBlID09PSB0YXJnZXQuRE9DVU1FTlRfTk9ERSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoIXRhcmdldC5wYXJlbnROb2RlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGlzQW5jZXN0b3JSZW1vdmVkKHRhcmdldC5wYXJlbnROb2RlLCBtaXJyb3IyKTtcbn1cbmZ1bmN0aW9uIGxlZ2FjeV9pc1RvdWNoRXZlbnQoZXZlbnQpIHtcbiAgcmV0dXJuIEJvb2xlYW4oZXZlbnQuY2hhbmdlZFRvdWNoZXMpO1xufVxuZnVuY3Rpb24gcG9seWZpbGwkMSh3aW4gPSB3aW5kb3cpIHtcbiAgaWYgKFwiTm9kZUxpc3RcIiBpbiB3aW4gJiYgIXdpbi5Ob2RlTGlzdC5wcm90b3R5cGUuZm9yRWFjaCkge1xuICAgIHdpbi5Ob2RlTGlzdC5wcm90b3R5cGUuZm9yRWFjaCA9IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoO1xuICB9XG4gIGlmIChcIkRPTVRva2VuTGlzdFwiIGluIHdpbiAmJiAhd2luLkRPTVRva2VuTGlzdC5wcm90b3R5cGUuZm9yRWFjaCkge1xuICAgIHdpbi5ET01Ub2tlbkxpc3QucHJvdG90eXBlLmZvckVhY2ggPSBBcnJheS5wcm90b3R5cGUuZm9yRWFjaDtcbiAgfVxuICBpZiAoIU5vZGUucHJvdG90eXBlLmNvbnRhaW5zKSB7XG4gICAgTm9kZS5wcm90b3R5cGUuY29udGFpbnMgPSAoLi4uYXJncykgPT4ge1xuICAgICAgbGV0IG5vZGUgPSBhcmdzWzBdO1xuICAgICAgaWYgKCEoMCBpbiBhcmdzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiMSBhcmd1bWVudCBpcyByZXF1aXJlZFwiKTtcbiAgICAgIH1cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMgPT09IG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAobm9kZSA9IG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBpc1NlcmlhbGl6ZWRJZnJhbWUobjIsIG1pcnJvcjIpIHtcbiAgcmV0dXJuIEJvb2xlYW4objIubm9kZU5hbWUgPT09IFwiSUZSQU1FXCIgJiYgbWlycm9yMi5nZXRNZXRhKG4yKSk7XG59XG5mdW5jdGlvbiBpc1NlcmlhbGl6ZWRTdHlsZXNoZWV0KG4yLCBtaXJyb3IyKSB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIG4yLm5vZGVOYW1lID09PSBcIkxJTktcIiAmJiBuMi5ub2RlVHlwZSA9PT0gbjIuRUxFTUVOVF9OT0RFICYmIG4yLmdldEF0dHJpYnV0ZSAmJiBuMi5nZXRBdHRyaWJ1dGUoXCJyZWxcIikgPT09IFwic3R5bGVzaGVldFwiICYmIG1pcnJvcjIuZ2V0TWV0YShuMilcbiAgKTtcbn1cbmZ1bmN0aW9uIGhhc1NoYWRvd1Jvb3QobjIpIHtcbiAgcmV0dXJuIEJvb2xlYW4objI/LnNoYWRvd1Jvb3QpO1xufVxuY2xhc3MgU3R5bGVTaGVldE1pcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaWQgPSAxO1xuICAgIHRoaXMuc3R5bGVJRE1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xuICAgIHRoaXMuaWRTdHlsZU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgZ2V0SWQoc3R5bGVzaGVldCkge1xuICAgIHJldHVybiB0aGlzLnN0eWxlSURNYXAuZ2V0KHN0eWxlc2hlZXQpID8/IC0xO1xuICB9XG4gIGhhcyhzdHlsZXNoZWV0KSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVJRE1hcC5oYXMoc3R5bGVzaGVldCk7XG4gIH1cbiAgLyoqXG4gICAqIEByZXR1cm5zIElmIHRoZSBzdHlsZXNoZWV0IGlzIGluIHRoZSBtaXJyb3IsIHJldHVybnMgdGhlIGlkIG9mIHRoZSBzdHlsZXNoZWV0LiBJZiBub3QsIHJldHVybiB0aGUgbmV3IGFzc2lnbmVkIGlkLlxuICAgKi9cbiAgYWRkKHN0eWxlc2hlZXQsIGlkKSB7XG4gICAgaWYgKHRoaXMuaGFzKHN0eWxlc2hlZXQpKSByZXR1cm4gdGhpcy5nZXRJZChzdHlsZXNoZWV0KTtcbiAgICBsZXQgbmV3SWQ7XG4gICAgaWYgKGlkID09PSB2b2lkIDApIHtcbiAgICAgIG5ld0lkID0gdGhpcy5pZCsrO1xuICAgIH0gZWxzZSBuZXdJZCA9IGlkO1xuICAgIHRoaXMuc3R5bGVJRE1hcC5zZXQoc3R5bGVzaGVldCwgbmV3SWQpO1xuICAgIHRoaXMuaWRTdHlsZU1hcC5zZXQobmV3SWQsIHN0eWxlc2hlZXQpO1xuICAgIHJldHVybiBuZXdJZDtcbiAgfVxuICBnZXRTdHlsZShpZCkge1xuICAgIHJldHVybiB0aGlzLmlkU3R5bGVNYXAuZ2V0KGlkKSB8fCBudWxsO1xuICB9XG4gIHJlc2V0KCkge1xuICAgIHRoaXMuc3R5bGVJRE1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xuICAgIHRoaXMuaWRTdHlsZU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgdGhpcy5pZCA9IDE7XG4gIH1cbiAgZ2VuZXJhdGVJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pZCsrO1xuICB9XG59XG5mdW5jdGlvbiBnZXRTaGFkb3dIb3N0KG4yKSB7XG4gIGxldCBzaGFkb3dIb3N0ID0gbnVsbDtcbiAgaWYgKG4yLmdldFJvb3ROb2RlPy4oKT8ubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSAmJiBuMi5nZXRSb290Tm9kZSgpLmhvc3QpXG4gICAgc2hhZG93SG9zdCA9IG4yLmdldFJvb3ROb2RlKCkuaG9zdDtcbiAgcmV0dXJuIHNoYWRvd0hvc3Q7XG59XG5mdW5jdGlvbiBnZXRSb290U2hhZG93SG9zdChuMikge1xuICBsZXQgcm9vdFNoYWRvd0hvc3QgPSBuMjtcbiAgbGV0IHNoYWRvd0hvc3Q7XG4gIHdoaWxlIChzaGFkb3dIb3N0ID0gZ2V0U2hhZG93SG9zdChyb290U2hhZG93SG9zdCkpXG4gICAgcm9vdFNoYWRvd0hvc3QgPSBzaGFkb3dIb3N0O1xuICByZXR1cm4gcm9vdFNoYWRvd0hvc3Q7XG59XG5mdW5jdGlvbiBzaGFkb3dIb3N0SW5Eb20objIpIHtcbiAgY29uc3QgZG9jID0gbjIub3duZXJEb2N1bWVudDtcbiAgaWYgKCFkb2MpIHJldHVybiBmYWxzZTtcbiAgY29uc3Qgc2hhZG93SG9zdCA9IGdldFJvb3RTaGFkb3dIb3N0KG4yKTtcbiAgcmV0dXJuIGRvYy5jb250YWlucyhzaGFkb3dIb3N0KTtcbn1cbmZ1bmN0aW9uIGluRG9tKG4yKSB7XG4gIGNvbnN0IGRvYyA9IG4yLm93bmVyRG9jdW1lbnQ7XG4gIGlmICghZG9jKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBkb2MuY29udGFpbnMobjIpIHx8IHNoYWRvd0hvc3RJbkRvbShuMik7XG59XG5jb25zdCBjYWNoZWRJbXBsZW1lbnRhdGlvbnMgPSB7fTtcbmZ1bmN0aW9uIGdldEltcGxlbWVudGF0aW9uKG5hbWUpIHtcbiAgY29uc3QgY2FjaGVkID0gY2FjaGVkSW1wbGVtZW50YXRpb25zW25hbWVdO1xuICBpZiAoY2FjaGVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuICBjb25zdCBkb2N1bWVudDIgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gIGxldCBpbXBsID0gd2luZG93W25hbWVdO1xuICBpZiAoZG9jdW1lbnQyICYmIHR5cGVvZiBkb2N1bWVudDIuY3JlYXRlRWxlbWVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhbmRib3ggPSBkb2N1bWVudDIuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcbiAgICAgIHNhbmRib3guaGlkZGVuID0gdHJ1ZTtcbiAgICAgIGRvY3VtZW50Mi5oZWFkLmFwcGVuZENoaWxkKHNhbmRib3gpO1xuICAgICAgY29uc3QgY29udGVudFdpbmRvdyA9IHNhbmRib3guY29udGVudFdpbmRvdztcbiAgICAgIGlmIChjb250ZW50V2luZG93ICYmIGNvbnRlbnRXaW5kb3dbbmFtZV0pIHtcbiAgICAgICAgaW1wbCA9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgICAgY29udGVudFdpbmRvd1tuYW1lXTtcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50Mi5oZWFkLnJlbW92ZUNoaWxkKHNhbmRib3gpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgfVxuICB9XG4gIHJldHVybiBjYWNoZWRJbXBsZW1lbnRhdGlvbnNbbmFtZV0gPSBpbXBsLmJpbmQoXG4gICAgd2luZG93XG4gICk7XG59XG5mdW5jdGlvbiBvblJlcXVlc3RBbmltYXRpb25GcmFtZSguLi5yZXN0KSB7XG4gIHJldHVybiBnZXRJbXBsZW1lbnRhdGlvbihcInJlcXVlc3RBbmltYXRpb25GcmFtZVwiKSguLi5yZXN0KTtcbn1cbmZ1bmN0aW9uIHNldFRpbWVvdXQkMSguLi5yZXN0KSB7XG4gIHJldHVybiBnZXRJbXBsZW1lbnRhdGlvbihcInNldFRpbWVvdXRcIikoLi4ucmVzdCk7XG59XG5mdW5jdGlvbiBjbGVhclRpbWVvdXQkMiguLi5yZXN0KSB7XG4gIHJldHVybiBnZXRJbXBsZW1lbnRhdGlvbihcImNsZWFyVGltZW91dFwiKSguLi5yZXN0KTtcbn1cbnZhciBFdmVudFR5cGUgPSAvKiBAX19QVVJFX18gKi8gKChFdmVudFR5cGUyKSA9PiB7XG4gIEV2ZW50VHlwZTJbRXZlbnRUeXBlMltcIkRvbUNvbnRlbnRMb2FkZWRcIl0gPSAwXSA9IFwiRG9tQ29udGVudExvYWRlZFwiO1xuICBFdmVudFR5cGUyW0V2ZW50VHlwZTJbXCJMb2FkXCJdID0gMV0gPSBcIkxvYWRcIjtcbiAgRXZlbnRUeXBlMltFdmVudFR5cGUyW1wiRnVsbFNuYXBzaG90XCJdID0gMl0gPSBcIkZ1bGxTbmFwc2hvdFwiO1xuICBFdmVudFR5cGUyW0V2ZW50VHlwZTJbXCJJbmNyZW1lbnRhbFNuYXBzaG90XCJdID0gM10gPSBcIkluY3JlbWVudGFsU25hcHNob3RcIjtcbiAgRXZlbnRUeXBlMltFdmVudFR5cGUyW1wiTWV0YVwiXSA9IDRdID0gXCJNZXRhXCI7XG4gIEV2ZW50VHlwZTJbRXZlbnRUeXBlMltcIkN1c3RvbVwiXSA9IDVdID0gXCJDdXN0b21cIjtcbiAgRXZlbnRUeXBlMltFdmVudFR5cGUyW1wiUGx1Z2luXCJdID0gNl0gPSBcIlBsdWdpblwiO1xuICByZXR1cm4gRXZlbnRUeXBlMjtcbn0pKEV2ZW50VHlwZSB8fCB7fSk7XG52YXIgSW5jcmVtZW50YWxTb3VyY2UgPSAvKiBAX19QVVJFX18gKi8gKChJbmNyZW1lbnRhbFNvdXJjZTIpID0+IHtcbiAgSW5jcmVtZW50YWxTb3VyY2UyW0luY3JlbWVudGFsU291cmNlMltcIk11dGF0aW9uXCJdID0gMF0gPSBcIk11dGF0aW9uXCI7XG4gIEluY3JlbWVudGFsU291cmNlMltJbmNyZW1lbnRhbFNvdXJjZTJbXCJNb3VzZU1vdmVcIl0gPSAxXSA9IFwiTW91c2VNb3ZlXCI7XG4gIEluY3JlbWVudGFsU291cmNlMltJbmNyZW1lbnRhbFNvdXJjZTJbXCJNb3VzZUludGVyYWN0aW9uXCJdID0gMl0gPSBcIk1vdXNlSW50ZXJhY3Rpb25cIjtcbiAgSW5jcmVtZW50YWxTb3VyY2UyW0luY3JlbWVudGFsU291cmNlMltcIlNjcm9sbFwiXSA9IDNdID0gXCJTY3JvbGxcIjtcbiAgSW5jcmVtZW50YWxTb3VyY2UyW0luY3JlbWVudGFsU291cmNlMltcIlZpZXdwb3J0UmVzaXplXCJdID0gNF0gPSBcIlZpZXdwb3J0UmVzaXplXCI7XG4gIEluY3JlbWVudGFsU291cmNlMltJbmNyZW1lbnRhbFNvdXJjZTJbXCJJbnB1dFwiXSA9IDVdID0gXCJJbnB1dFwiO1xuICBJbmNyZW1lbnRhbFNvdXJjZTJbSW5jcmVtZW50YWxTb3VyY2UyW1wiVG91Y2hNb3ZlXCJdID0gNl0gPSBcIlRvdWNoTW92ZVwiO1xuICBJbmNyZW1lbnRhbFNvdXJjZTJbSW5jcmVtZW50YWxTb3VyY2UyW1wiTWVkaWFJbnRlcmFjdGlvblwiXSA9IDddID0gXCJNZWRpYUludGVyYWN0aW9uXCI7XG4gIEluY3JlbWVudGFsU291cmNlMltJbmNyZW1lbnRhbFNvdXJjZTJbXCJTdHlsZVNoZWV0UnVsZVwiXSA9IDhdID0gXCJTdHlsZVNoZWV0UnVsZVwiO1xuICBJbmNyZW1lbnRhbFNvdXJjZTJbSW5jcmVtZW50YWxTb3VyY2UyW1wiQ2FudmFzTXV0YXRpb25cIl0gPSA5XSA9IFwiQ2FudmFzTXV0YXRpb25cIjtcbiAgSW5jcmVtZW50YWxTb3VyY2UyW0luY3JlbWVudGFsU291cmNlMltcIkZvbnRcIl0gPSAxMF0gPSBcIkZvbnRcIjtcbiAgSW5jcmVtZW50YWxTb3VyY2UyW0luY3JlbWVudGFsU291cmNlMltcIkxvZ1wiXSA9IDExXSA9IFwiTG9nXCI7XG4gIEluY3JlbWVudGFsU291cmNlMltJbmNyZW1lbnRhbFNvdXJjZTJbXCJEcmFnXCJdID0gMTJdID0gXCJEcmFnXCI7XG4gIEluY3JlbWVudGFsU291cmNlMltJbmNyZW1lbnRhbFNvdXJjZTJbXCJTdHlsZURlY2xhcmF0aW9uXCJdID0gMTNdID0gXCJTdHlsZURlY2xhcmF0aW9uXCI7XG4gIEluY3JlbWVudGFsU291cmNlMltJbmNyZW1lbnRhbFNvdXJjZTJbXCJTZWxlY3Rpb25cIl0gPSAxNF0gPSBcIlNlbGVjdGlvblwiO1xuICBJbmNyZW1lbnRhbFNvdXJjZTJbSW5jcmVtZW50YWxTb3VyY2UyW1wiQWRvcHRlZFN0eWxlU2hlZXRcIl0gPSAxNV0gPSBcIkFkb3B0ZWRTdHlsZVNoZWV0XCI7XG4gIEluY3JlbWVudGFsU291cmNlMltJbmNyZW1lbnRhbFNvdXJjZTJbXCJDdXN0b21FbGVtZW50XCJdID0gMTZdID0gXCJDdXN0b21FbGVtZW50XCI7XG4gIHJldHVybiBJbmNyZW1lbnRhbFNvdXJjZTI7XG59KShJbmNyZW1lbnRhbFNvdXJjZSB8fCB7fSk7XG52YXIgTW91c2VJbnRlcmFjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gKChNb3VzZUludGVyYWN0aW9uczIpID0+IHtcbiAgTW91c2VJbnRlcmFjdGlvbnMyW01vdXNlSW50ZXJhY3Rpb25zMltcIk1vdXNlVXBcIl0gPSAwXSA9IFwiTW91c2VVcFwiO1xuICBNb3VzZUludGVyYWN0aW9uczJbTW91c2VJbnRlcmFjdGlvbnMyW1wiTW91c2VEb3duXCJdID0gMV0gPSBcIk1vdXNlRG93blwiO1xuICBNb3VzZUludGVyYWN0aW9uczJbTW91c2VJbnRlcmFjdGlvbnMyW1wiQ2xpY2tcIl0gPSAyXSA9IFwiQ2xpY2tcIjtcbiAgTW91c2VJbnRlcmFjdGlvbnMyW01vdXNlSW50ZXJhY3Rpb25zMltcIkNvbnRleHRNZW51XCJdID0gM10gPSBcIkNvbnRleHRNZW51XCI7XG4gIE1vdXNlSW50ZXJhY3Rpb25zMltNb3VzZUludGVyYWN0aW9uczJbXCJEYmxDbGlja1wiXSA9IDRdID0gXCJEYmxDbGlja1wiO1xuICBNb3VzZUludGVyYWN0aW9uczJbTW91c2VJbnRlcmFjdGlvbnMyW1wiRm9jdXNcIl0gPSA1XSA9IFwiRm9jdXNcIjtcbiAgTW91c2VJbnRlcmFjdGlvbnMyW01vdXNlSW50ZXJhY3Rpb25zMltcIkJsdXJcIl0gPSA2XSA9IFwiQmx1clwiO1xuICBNb3VzZUludGVyYWN0aW9uczJbTW91c2VJbnRlcmFjdGlvbnMyW1wiVG91Y2hTdGFydFwiXSA9IDddID0gXCJUb3VjaFN0YXJ0XCI7XG4gIE1vdXNlSW50ZXJhY3Rpb25zMltNb3VzZUludGVyYWN0aW9uczJbXCJUb3VjaE1vdmVfRGVwYXJ0ZWRcIl0gPSA4XSA9IFwiVG91Y2hNb3ZlX0RlcGFydGVkXCI7XG4gIE1vdXNlSW50ZXJhY3Rpb25zMltNb3VzZUludGVyYWN0aW9uczJbXCJUb3VjaEVuZFwiXSA9IDldID0gXCJUb3VjaEVuZFwiO1xuICBNb3VzZUludGVyYWN0aW9uczJbTW91c2VJbnRlcmFjdGlvbnMyW1wiVG91Y2hDYW5jZWxcIl0gPSAxMF0gPSBcIlRvdWNoQ2FuY2VsXCI7XG4gIHJldHVybiBNb3VzZUludGVyYWN0aW9uczI7XG59KShNb3VzZUludGVyYWN0aW9ucyB8fCB7fSk7XG52YXIgUG9pbnRlclR5cGVzID0gLyogQF9fUFVSRV9fICovICgoUG9pbnRlclR5cGVzMikgPT4ge1xuICBQb2ludGVyVHlwZXMyW1BvaW50ZXJUeXBlczJbXCJNb3VzZVwiXSA9IDBdID0gXCJNb3VzZVwiO1xuICBQb2ludGVyVHlwZXMyW1BvaW50ZXJUeXBlczJbXCJQZW5cIl0gPSAxXSA9IFwiUGVuXCI7XG4gIFBvaW50ZXJUeXBlczJbUG9pbnRlclR5cGVzMltcIlRvdWNoXCJdID0gMl0gPSBcIlRvdWNoXCI7XG4gIHJldHVybiBQb2ludGVyVHlwZXMyO1xufSkoUG9pbnRlclR5cGVzIHx8IHt9KTtcbnZhciBNZWRpYUludGVyYWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyAoKE1lZGlhSW50ZXJhY3Rpb25zMikgPT4ge1xuICBNZWRpYUludGVyYWN0aW9uczJbTWVkaWFJbnRlcmFjdGlvbnMyW1wiUGxheVwiXSA9IDBdID0gXCJQbGF5XCI7XG4gIE1lZGlhSW50ZXJhY3Rpb25zMltNZWRpYUludGVyYWN0aW9uczJbXCJQYXVzZVwiXSA9IDFdID0gXCJQYXVzZVwiO1xuICBNZWRpYUludGVyYWN0aW9uczJbTWVkaWFJbnRlcmFjdGlvbnMyW1wiU2Vla2VkXCJdID0gMl0gPSBcIlNlZWtlZFwiO1xuICBNZWRpYUludGVyYWN0aW9uczJbTWVkaWFJbnRlcmFjdGlvbnMyW1wiVm9sdW1lQ2hhbmdlXCJdID0gM10gPSBcIlZvbHVtZUNoYW5nZVwiO1xuICBNZWRpYUludGVyYWN0aW9uczJbTWVkaWFJbnRlcmFjdGlvbnMyW1wiUmF0ZUNoYW5nZVwiXSA9IDRdID0gXCJSYXRlQ2hhbmdlXCI7XG4gIHJldHVybiBNZWRpYUludGVyYWN0aW9uczI7XG59KShNZWRpYUludGVyYWN0aW9ucyB8fCB7fSk7XG5mdW5jdGlvbiBnZXRJRnJhbWVDb250ZW50RG9jdW1lbnQoaWZyYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGlmcmFtZS5jb250ZW50RG9jdW1lbnQ7XG4gIH0gY2F0Y2ggKGUyKSB7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldElGcmFtZUNvbnRlbnRXaW5kb3coaWZyYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGlmcmFtZS5jb250ZW50V2luZG93O1xuICB9IGNhdGNoIChlMikge1xuICB9XG59XG5mdW5jdGlvbiBpc05vZGVJbkxpbmtlZExpc3QobjIpIHtcbiAgcmV0dXJuIFwiX19sblwiIGluIG4yO1xufVxuY2xhc3MgRG91YmxlTGlua2VkTGlzdCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmhlYWQgPSBudWxsO1xuICAgIHRoaXMudGFpbCA9IG51bGw7XG4gIH1cbiAgZ2V0KHBvc2l0aW9uKSB7XG4gICAgaWYgKHBvc2l0aW9uID49IHRoaXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb3NpdGlvbiBvdXRzaWRlIG9mIGxpc3QgcmFuZ2VcIik7XG4gICAgfVxuICAgIGxldCBjdXJyZW50ID0gdGhpcy5oZWFkO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwb3NpdGlvbjsgaW5kZXgrKykge1xuICAgICAgY3VycmVudCA9IGN1cnJlbnQ/Lm5leHQgfHwgbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cbiAgYWRkTm9kZShuMikge1xuICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICB2YWx1ZTogbjIsXG4gICAgICBwcmV2aW91czogbnVsbCxcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuICAgIG4yLl9fbG4gPSBub2RlO1xuICAgIGlmIChuMi5wcmV2aW91c1NpYmxpbmcgJiYgaXNOb2RlSW5MaW5rZWRMaXN0KG4yLnByZXZpb3VzU2libGluZykpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBuMi5wcmV2aW91c1NpYmxpbmcuX19sbi5uZXh0O1xuICAgICAgbm9kZS5uZXh0ID0gY3VycmVudDtcbiAgICAgIG5vZGUucHJldmlvdXMgPSBuMi5wcmV2aW91c1NpYmxpbmcuX19sbjtcbiAgICAgIG4yLnByZXZpb3VzU2libGluZy5fX2xuLm5leHQgPSBub2RlO1xuICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgY3VycmVudC5wcmV2aW91cyA9IG5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuMi5uZXh0U2libGluZyAmJiBpc05vZGVJbkxpbmtlZExpc3QobjIubmV4dFNpYmxpbmcpICYmIG4yLm5leHRTaWJsaW5nLl9fbG4ucHJldmlvdXMpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBuMi5uZXh0U2libGluZy5fX2xuLnByZXZpb3VzO1xuICAgICAgbm9kZS5wcmV2aW91cyA9IGN1cnJlbnQ7XG4gICAgICBub2RlLm5leHQgPSBuMi5uZXh0U2libGluZy5fX2xuO1xuICAgICAgbjIubmV4dFNpYmxpbmcuX19sbi5wcmV2aW91cyA9IG5vZGU7XG4gICAgICBpZiAoY3VycmVudCkge1xuICAgICAgICBjdXJyZW50Lm5leHQgPSBub2RlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5oZWFkKSB7XG4gICAgICAgIHRoaXMuaGVhZC5wcmV2aW91cyA9IG5vZGU7XG4gICAgICB9XG4gICAgICBub2RlLm5leHQgPSB0aGlzLmhlYWQ7XG4gICAgICB0aGlzLmhlYWQgPSBub2RlO1xuICAgIH1cbiAgICBpZiAobm9kZS5uZXh0ID09PSBudWxsKSB7XG4gICAgICB0aGlzLnRhaWwgPSBub2RlO1xuICAgIH1cbiAgICB0aGlzLmxlbmd0aCsrO1xuICB9XG4gIHJlbW92ZU5vZGUobjIpIHtcbiAgICBjb25zdCBjdXJyZW50ID0gbjIuX19sbjtcbiAgICBpZiAoIXRoaXMuaGVhZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWN1cnJlbnQucHJldmlvdXMpIHtcbiAgICAgIHRoaXMuaGVhZCA9IGN1cnJlbnQubmV4dDtcbiAgICAgIGlmICh0aGlzLmhlYWQpIHtcbiAgICAgICAgdGhpcy5oZWFkLnByZXZpb3VzID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFpbCA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnQucHJldmlvdXMubmV4dCA9IGN1cnJlbnQubmV4dDtcbiAgICAgIGlmIChjdXJyZW50Lm5leHQpIHtcbiAgICAgICAgY3VycmVudC5uZXh0LnByZXZpb3VzID0gY3VycmVudC5wcmV2aW91cztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFpbCA9IGN1cnJlbnQucHJldmlvdXM7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChuMi5fX2xuKSB7XG4gICAgICBkZWxldGUgbjIuX19sbjtcbiAgICB9XG4gICAgdGhpcy5sZW5ndGgtLTtcbiAgfVxufVxuY29uc3QgbW92ZUtleSA9IChpZCwgcGFyZW50SWQpID0+IGAke2lkfUAke3BhcmVudElkfWA7XG5jbGFzcyBNdXRhdGlvbkJ1ZmZlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZnJvemVuID0gZmFsc2U7XG4gICAgdGhpcy5sb2NrZWQgPSBmYWxzZTtcbiAgICB0aGlzLnRleHRzID0gW107XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gW107XG4gICAgdGhpcy5hdHRyaWJ1dGVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbiAgICB0aGlzLnJlbW92ZXMgPSBbXTtcbiAgICB0aGlzLm1hcFJlbW92ZXMgPSBbXTtcbiAgICB0aGlzLm1vdmVkTWFwID0ge307XG4gICAgdGhpcy5hZGRlZFNldCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgdGhpcy5tb3ZlZFNldCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgdGhpcy5kcm9wcGVkU2V0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICB0aGlzLnByb2Nlc3NNdXRhdGlvbnMgPSAobXV0YXRpb25zKSA9PiB7XG4gICAgICBtdXRhdGlvbnMuZm9yRWFjaCh0aGlzLnByb2Nlc3NNdXRhdGlvbik7XG4gICAgICB0aGlzLmVtaXQoKTtcbiAgICB9O1xuICAgIHRoaXMuZW1pdCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmZyb3plbiB8fCB0aGlzLmxvY2tlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBhZGRzID0gW107XG4gICAgICBjb25zdCBhZGRlZElkcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgICBjb25zdCBhZGRMaXN0ID0gbmV3IERvdWJsZUxpbmtlZExpc3QoKTtcbiAgICAgIGNvbnN0IGdldE5leHRJZCA9IChuMikgPT4ge1xuICAgICAgICBsZXQgbnMgPSBuMjtcbiAgICAgICAgbGV0IG5leHRJZCA9IElHTk9SRURfTk9ERTtcbiAgICAgICAgd2hpbGUgKG5leHRJZCA9PT0gSUdOT1JFRF9OT0RFKSB7XG4gICAgICAgICAgbnMgPSBucyAmJiBucy5uZXh0U2libGluZztcbiAgICAgICAgICBuZXh0SWQgPSBucyAmJiB0aGlzLm1pcnJvci5nZXRJZChucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHRJZDtcbiAgICAgIH07XG4gICAgICBjb25zdCBwdXNoQWRkID0gKG4yKSA9PiB7XG4gICAgICAgIGlmICghbjIucGFyZW50Tm9kZSB8fCAhaW5Eb20objIpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudElkID0gaXNTaGFkb3dSb290KG4yLnBhcmVudE5vZGUpID8gdGhpcy5taXJyb3IuZ2V0SWQoZ2V0U2hhZG93SG9zdChuMikpIDogdGhpcy5taXJyb3IuZ2V0SWQobjIucGFyZW50Tm9kZSk7XG4gICAgICAgIGNvbnN0IG5leHRJZCA9IGdldE5leHRJZChuMik7XG4gICAgICAgIGlmIChwYXJlbnRJZCA9PT0gLTEgfHwgbmV4dElkID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiBhZGRMaXN0LmFkZE5vZGUobjIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNuID0gc2VyaWFsaXplTm9kZVdpdGhJZChuMiwge1xuICAgICAgICAgIGRvYzogdGhpcy5kb2MsXG4gICAgICAgICAgbWlycm9yOiB0aGlzLm1pcnJvcixcbiAgICAgICAgICBibG9ja0NsYXNzOiB0aGlzLmJsb2NrQ2xhc3MsXG4gICAgICAgICAgYmxvY2tTZWxlY3RvcjogdGhpcy5ibG9ja1NlbGVjdG9yLFxuICAgICAgICAgIG1hc2tBbGxUZXh0OiB0aGlzLm1hc2tBbGxUZXh0LFxuICAgICAgICAgIHVuYmxvY2tTZWxlY3RvcjogdGhpcy51bmJsb2NrU2VsZWN0b3IsXG4gICAgICAgICAgbWFza1RleHRDbGFzczogdGhpcy5tYXNrVGV4dENsYXNzLFxuICAgICAgICAgIHVubWFza1RleHRDbGFzczogdGhpcy51bm1hc2tUZXh0Q2xhc3MsXG4gICAgICAgICAgbWFza1RleHRTZWxlY3RvcjogdGhpcy5tYXNrVGV4dFNlbGVjdG9yLFxuICAgICAgICAgIHVubWFza1RleHRTZWxlY3RvcjogdGhpcy51bm1hc2tUZXh0U2VsZWN0b3IsXG4gICAgICAgICAgc2tpcENoaWxkOiB0cnVlLFxuICAgICAgICAgIG5ld2x5QWRkZWRFbGVtZW50OiB0cnVlLFxuICAgICAgICAgIGlubGluZVN0eWxlc2hlZXQ6IHRoaXMuaW5saW5lU3R5bGVzaGVldCxcbiAgICAgICAgICBtYXNrSW5wdXRPcHRpb25zOiB0aGlzLm1hc2tJbnB1dE9wdGlvbnMsXG4gICAgICAgICAgbWFza0F0dHJpYnV0ZUZuOiB0aGlzLm1hc2tBdHRyaWJ1dGVGbixcbiAgICAgICAgICBtYXNrVGV4dEZuOiB0aGlzLm1hc2tUZXh0Rm4sXG4gICAgICAgICAgbWFza0lucHV0Rm46IHRoaXMubWFza0lucHV0Rm4sXG4gICAgICAgICAgc2xpbURPTU9wdGlvbnM6IHRoaXMuc2xpbURPTU9wdGlvbnMsXG4gICAgICAgICAgZGF0YVVSTE9wdGlvbnM6IHRoaXMuZGF0YVVSTE9wdGlvbnMsXG4gICAgICAgICAgcmVjb3JkQ2FudmFzOiB0aGlzLnJlY29yZENhbnZhcyxcbiAgICAgICAgICBpbmxpbmVJbWFnZXM6IHRoaXMuaW5saW5lSW1hZ2VzLFxuICAgICAgICAgIG9uU2VyaWFsaXplOiAoY3VycmVudE4pID0+IHtcbiAgICAgICAgICAgIGlmIChpc1NlcmlhbGl6ZWRJZnJhbWUoY3VycmVudE4sIHRoaXMubWlycm9yKSAmJiAhaXNCbG9ja2VkKFxuICAgICAgICAgICAgICBjdXJyZW50TixcbiAgICAgICAgICAgICAgdGhpcy5ibG9ja0NsYXNzLFxuICAgICAgICAgICAgICB0aGlzLmJsb2NrU2VsZWN0b3IsXG4gICAgICAgICAgICAgIHRoaXMudW5ibG9ja1NlbGVjdG9yLFxuICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICB0aGlzLmlmcmFtZU1hbmFnZXIuYWRkSWZyYW1lKGN1cnJlbnROKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1NlcmlhbGl6ZWRTdHlsZXNoZWV0KGN1cnJlbnROLCB0aGlzLm1pcnJvcikpIHtcbiAgICAgICAgICAgICAgdGhpcy5zdHlsZXNoZWV0TWFuYWdlci50cmFja0xpbmtFbGVtZW50KFxuICAgICAgICAgICAgICAgIGN1cnJlbnROXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzU2hhZG93Um9vdChuMikpIHtcbiAgICAgICAgICAgICAgdGhpcy5zaGFkb3dEb21NYW5hZ2VyLmFkZFNoYWRvd1Jvb3QobjIuc2hhZG93Um9vdCwgdGhpcy5kb2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25JZnJhbWVMb2FkOiAoaWZyYW1lLCBjaGlsZFNuKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNCbG9ja2VkKFxuICAgICAgICAgICAgICBpZnJhbWUsXG4gICAgICAgICAgICAgIHRoaXMuYmxvY2tDbGFzcyxcbiAgICAgICAgICAgICAgdGhpcy5ibG9ja1NlbGVjdG9yLFxuICAgICAgICAgICAgICB0aGlzLnVuYmxvY2tTZWxlY3RvcixcbiAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pZnJhbWVNYW5hZ2VyLmF0dGFjaElmcmFtZShpZnJhbWUsIGNoaWxkU24pO1xuICAgICAgICAgICAgaWYgKGlmcmFtZS5jb250ZW50V2luZG93KSB7XG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzTWFuYWdlci5hZGRXaW5kb3coaWZyYW1lLmNvbnRlbnRXaW5kb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zaGFkb3dEb21NYW5hZ2VyLm9ic2VydmVBdHRhY2hTaGFkb3coaWZyYW1lKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uU3R5bGVzaGVldExvYWQ6IChsaW5rLCBjaGlsZFNuKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlc2hlZXRNYW5hZ2VyLmF0dGFjaExpbmtFbGVtZW50KGxpbmssIGNoaWxkU24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChzbikge1xuICAgICAgICAgIGFkZHMucHVzaCh7XG4gICAgICAgICAgICBwYXJlbnRJZCxcbiAgICAgICAgICAgIG5leHRJZCxcbiAgICAgICAgICAgIG5vZGU6IHNuXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYWRkZWRJZHMuYWRkKHNuLmlkKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHdoaWxlICh0aGlzLm1hcFJlbW92ZXMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWlycm9yLnJlbW92ZU5vZGVGcm9tTWFwKHRoaXMubWFwUmVtb3Zlcy5zaGlmdCgpKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgbjIgb2YgdGhpcy5tb3ZlZFNldCkge1xuICAgICAgICBpZiAoaXNQYXJlbnRSZW1vdmVkKHRoaXMucmVtb3ZlcywgbjIsIHRoaXMubWlycm9yKSAmJiAhdGhpcy5tb3ZlZFNldC5oYXMobjIucGFyZW50Tm9kZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBwdXNoQWRkKG4yKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgbjIgb2YgdGhpcy5hZGRlZFNldCkge1xuICAgICAgICBpZiAoIWlzQW5jZXN0b3JJblNldCh0aGlzLmRyb3BwZWRTZXQsIG4yKSAmJiAhaXNQYXJlbnRSZW1vdmVkKHRoaXMucmVtb3ZlcywgbjIsIHRoaXMubWlycm9yKSkge1xuICAgICAgICAgIHB1c2hBZGQobjIpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQW5jZXN0b3JJblNldCh0aGlzLm1vdmVkU2V0LCBuMikpIHtcbiAgICAgICAgICBwdXNoQWRkKG4yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRyb3BwZWRTZXQuYWRkKG4yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IGNhbmRpZGF0ZSA9IG51bGw7XG4gICAgICB3aGlsZSAoYWRkTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgbGV0IG5vZGUgPSBudWxsO1xuICAgICAgICBpZiAoY2FuZGlkYXRlKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLm1pcnJvci5nZXRJZChjYW5kaWRhdGUudmFsdWUucGFyZW50Tm9kZSk7XG4gICAgICAgICAgY29uc3QgbmV4dElkID0gZ2V0TmV4dElkKGNhbmRpZGF0ZS52YWx1ZSk7XG4gICAgICAgICAgaWYgKHBhcmVudElkICE9PSAtMSAmJiBuZXh0SWQgIT09IC0xKSB7XG4gICAgICAgICAgICBub2RlID0gY2FuZGlkYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICBsZXQgdGFpbE5vZGUgPSBhZGRMaXN0LnRhaWw7XG4gICAgICAgICAgd2hpbGUgKHRhaWxOb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBfbm9kZSA9IHRhaWxOb2RlO1xuICAgICAgICAgICAgdGFpbE5vZGUgPSB0YWlsTm9kZS5wcmV2aW91cztcbiAgICAgICAgICAgIGlmIChfbm9kZSkge1xuICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMubWlycm9yLmdldElkKF9ub2RlLnZhbHVlLnBhcmVudE5vZGUpO1xuICAgICAgICAgICAgICBjb25zdCBuZXh0SWQgPSBnZXROZXh0SWQoX25vZGUudmFsdWUpO1xuICAgICAgICAgICAgICBpZiAobmV4dElkID09PSAtMSkgY29udGludWU7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKHBhcmVudElkICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIG5vZGUgPSBfbm9kZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1bmhhbmRsZWROb2RlID0gX25vZGUudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHVuaGFuZGxlZE5vZGUucGFyZW50Tm9kZSAmJiB1bmhhbmRsZWROb2RlLnBhcmVudE5vZGUubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSkge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhZG93SG9zdCA9IHVuaGFuZGxlZE5vZGUucGFyZW50Tm9kZS5ob3N0O1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQyID0gdGhpcy5taXJyb3IuZ2V0SWQoc2hhZG93SG9zdCk7XG4gICAgICAgICAgICAgICAgICBpZiAocGFyZW50SWQyICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlID0gX25vZGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICB3aGlsZSAoYWRkTGlzdC5oZWFkKSB7XG4gICAgICAgICAgICBhZGRMaXN0LnJlbW92ZU5vZGUoYWRkTGlzdC5oZWFkLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FuZGlkYXRlID0gbm9kZS5wcmV2aW91cztcbiAgICAgICAgYWRkTGlzdC5yZW1vdmVOb2RlKG5vZGUudmFsdWUpO1xuICAgICAgICBwdXNoQWRkKG5vZGUudmFsdWUpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgdGV4dHM6IHRoaXMudGV4dHMubWFwKCh0ZXh0KSA9PiAoe1xuICAgICAgICAgIGlkOiB0aGlzLm1pcnJvci5nZXRJZCh0ZXh0Lm5vZGUpLFxuICAgICAgICAgIHZhbHVlOiB0ZXh0LnZhbHVlXG4gICAgICAgIH0pKS5maWx0ZXIoKHRleHQpID0+ICFhZGRlZElkcy5oYXModGV4dC5pZCkpLmZpbHRlcigodGV4dCkgPT4gdGhpcy5taXJyb3IuaGFzKHRleHQuaWQpKSxcbiAgICAgICAgYXR0cmlidXRlczogdGhpcy5hdHRyaWJ1dGVzLm1hcCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBhdHRyaWJ1dGVzIH0gPSBhdHRyaWJ1dGU7XG4gICAgICAgICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzLnN0eWxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCBkaWZmQXNTdHIgPSBKU09OLnN0cmluZ2lmeShhdHRyaWJ1dGUuc3R5bGVEaWZmKTtcbiAgICAgICAgICAgIGNvbnN0IHVuY2hhbmdlZEFzU3RyID0gSlNPTi5zdHJpbmdpZnkoYXR0cmlidXRlLl91bmNoYW5nZWRTdHlsZXMpO1xuICAgICAgICAgICAgaWYgKGRpZmZBc1N0ci5sZW5ndGggPCBhdHRyaWJ1dGVzLnN0eWxlLmxlbmd0aCkge1xuICAgICAgICAgICAgICBpZiAoKGRpZmZBc1N0ciArIHVuY2hhbmdlZEFzU3RyKS5zcGxpdChcInZhcihcIikubGVuZ3RoID09PSBhdHRyaWJ1dGVzLnN0eWxlLnNwbGl0KFwidmFyKFwiKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnN0eWxlID0gYXR0cmlidXRlLnN0eWxlRGlmZjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHRoaXMubWlycm9yLmdldElkKGF0dHJpYnV0ZS5ub2RlKSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNcbiAgICAgICAgICB9O1xuICAgICAgICB9KS5maWx0ZXIoKGF0dHJpYnV0ZSkgPT4gIWFkZGVkSWRzLmhhcyhhdHRyaWJ1dGUuaWQpKS5maWx0ZXIoKGF0dHJpYnV0ZSkgPT4gdGhpcy5taXJyb3IuaGFzKGF0dHJpYnV0ZS5pZCkpLFxuICAgICAgICByZW1vdmVzOiB0aGlzLnJlbW92ZXMsXG4gICAgICAgIGFkZHNcbiAgICAgIH07XG4gICAgICBpZiAoIXBheWxvYWQudGV4dHMubGVuZ3RoICYmICFwYXlsb2FkLmF0dHJpYnV0ZXMubGVuZ3RoICYmICFwYXlsb2FkLnJlbW92ZXMubGVuZ3RoICYmICFwYXlsb2FkLmFkZHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMudGV4dHMgPSBbXTtcbiAgICAgIHRoaXMuYXR0cmlidXRlcyA9IFtdO1xuICAgICAgdGhpcy5hdHRyaWJ1dGVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbiAgICAgIHRoaXMucmVtb3ZlcyA9IFtdO1xuICAgICAgdGhpcy5hZGRlZFNldCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgICB0aGlzLm1vdmVkU2V0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICAgIHRoaXMuZHJvcHBlZFNldCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgICB0aGlzLm1vdmVkTWFwID0ge307XG4gICAgICB0aGlzLm11dGF0aW9uQ2IocGF5bG9hZCk7XG4gICAgfTtcbiAgICB0aGlzLnByb2Nlc3NNdXRhdGlvbiA9IChtKSA9PiB7XG4gICAgICBpZiAoaXNJZ25vcmVkKG0udGFyZ2V0LCB0aGlzLm1pcnJvcikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChtLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImNoYXJhY3RlckRhdGFcIjoge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gbS50YXJnZXQudGV4dENvbnRlbnQ7XG4gICAgICAgICAgaWYgKCFpc0Jsb2NrZWQoXG4gICAgICAgICAgICBtLnRhcmdldCxcbiAgICAgICAgICAgIHRoaXMuYmxvY2tDbGFzcyxcbiAgICAgICAgICAgIHRoaXMuYmxvY2tTZWxlY3RvcixcbiAgICAgICAgICAgIHRoaXMudW5ibG9ja1NlbGVjdG9yLFxuICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICApICYmIHZhbHVlICE9PSBtLm9sZFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnRleHRzLnB1c2goe1xuICAgICAgICAgICAgICB2YWx1ZTogbmVlZE1hc2tpbmdUZXh0KFxuICAgICAgICAgICAgICAgIG0udGFyZ2V0LFxuICAgICAgICAgICAgICAgIHRoaXMubWFza1RleHRDbGFzcyxcbiAgICAgICAgICAgICAgICB0aGlzLm1hc2tUZXh0U2VsZWN0b3IsXG4gICAgICAgICAgICAgICAgdGhpcy51bm1hc2tUZXh0Q2xhc3MsXG4gICAgICAgICAgICAgICAgdGhpcy51bm1hc2tUZXh0U2VsZWN0b3IsXG4gICAgICAgICAgICAgICAgdGhpcy5tYXNrQWxsVGV4dFxuICAgICAgICAgICAgICApICYmIHZhbHVlID8gdGhpcy5tYXNrVGV4dEZuID8gdGhpcy5tYXNrVGV4dEZuKHZhbHVlLCBjbG9zZXN0RWxlbWVudE9mTm9kZSQxKG0udGFyZ2V0KSkgOiB2YWx1ZS5yZXBsYWNlKC9bXFxTXS9nLCBcIipcIikgOiB2YWx1ZSxcbiAgICAgICAgICAgICAgbm9kZTogbS50YXJnZXRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiYXR0cmlidXRlc1wiOiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0gbS50YXJnZXQ7XG4gICAgICAgICAgbGV0IGF0dHJpYnV0ZU5hbWUgPSBtLmF0dHJpYnV0ZU5hbWU7XG4gICAgICAgICAgbGV0IHZhbHVlID0gbS50YXJnZXQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09PSBcInZhbHVlXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBnZXRJbnB1dFR5cGUodGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0IHRhZ05hbWUgPSB0YXJnZXQudGFnTmFtZTtcbiAgICAgICAgICAgIHZhbHVlID0gZ2V0SW5wdXRWYWx1ZSh0YXJnZXQsIHRhZ05hbWUsIHR5cGUpO1xuICAgICAgICAgICAgY29uc3QgaXNJbnB1dE1hc2tlZCA9IHNob3VsZE1hc2tJbnB1dCh7XG4gICAgICAgICAgICAgIG1hc2tJbnB1dE9wdGlvbnM6IHRoaXMubWFza0lucHV0T3B0aW9ucyxcbiAgICAgICAgICAgICAgdGFnTmFtZSxcbiAgICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmb3JjZU1hc2sgPSBuZWVkTWFza2luZ1RleHQoXG4gICAgICAgICAgICAgIG0udGFyZ2V0LFxuICAgICAgICAgICAgICB0aGlzLm1hc2tUZXh0Q2xhc3MsXG4gICAgICAgICAgICAgIHRoaXMubWFza1RleHRTZWxlY3RvcixcbiAgICAgICAgICAgICAgdGhpcy51bm1hc2tUZXh0Q2xhc3MsXG4gICAgICAgICAgICAgIHRoaXMudW5tYXNrVGV4dFNlbGVjdG9yLFxuICAgICAgICAgICAgICBpc0lucHV0TWFza2VkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdmFsdWUgPSBtYXNrSW5wdXRWYWx1ZSh7XG4gICAgICAgICAgICAgIGlzTWFza2VkOiBmb3JjZU1hc2ssXG4gICAgICAgICAgICAgIGVsZW1lbnQ6IHRhcmdldCxcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIG1hc2tJbnB1dEZuOiB0aGlzLm1hc2tJbnB1dEZuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzQmxvY2tlZChcbiAgICAgICAgICAgIG0udGFyZ2V0LFxuICAgICAgICAgICAgdGhpcy5ibG9ja0NsYXNzLFxuICAgICAgICAgICAgdGhpcy5ibG9ja1NlbGVjdG9yLFxuICAgICAgICAgICAgdGhpcy51bmJsb2NrU2VsZWN0b3IsXG4gICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICkgfHwgdmFsdWUgPT09IG0ub2xkVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLmF0dHJpYnV0ZU1hcC5nZXQobS50YXJnZXQpO1xuICAgICAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gXCJJRlJBTUVcIiAmJiBhdHRyaWJ1dGVOYW1lID09PSBcInNyY1wiICYmICF0aGlzLmtlZXBJZnJhbWVTcmNGbih2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGlmcmFtZURvYyA9IGdldElGcmFtZUNvbnRlbnREb2N1bWVudChcbiAgICAgICAgICAgICAgdGFyZ2V0XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFpZnJhbWVEb2MpIHtcbiAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9IFwicnJfc3JjXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgaXRlbSA9IHtcbiAgICAgICAgICAgICAgbm9kZTogbS50YXJnZXQsXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgICAgICAgICBzdHlsZURpZmY6IHt9LFxuICAgICAgICAgICAgICBfdW5jaGFuZ2VkU3R5bGVzOiB7fVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVNYXAuc2V0KG0udGFyZ2V0LCBpdGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT09IFwidHlwZVwiICYmIHRhcmdldC50YWdOYW1lID09PSBcIklOUFVUXCIgJiYgKG0ub2xkVmFsdWUgfHwgXCJcIikudG9Mb3dlckNhc2UoKSA9PT0gXCJwYXNzd29yZFwiKSB7XG4gICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKFwiZGF0YS1yci1pcy1wYXNzd29yZFwiLCBcInRydWVcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghaWdub3JlQXR0cmlidXRlKHRhcmdldC50YWdOYW1lLCBhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgICAgICAgaXRlbS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdID0gdHJhbnNmb3JtQXR0cmlidXRlKFxuICAgICAgICAgICAgICB0aGlzLmRvYyxcbiAgICAgICAgICAgICAgdG9Mb3dlckNhc2UodGFyZ2V0LnRhZ05hbWUpLFxuICAgICAgICAgICAgICB0b0xvd2VyQ2FzZShhdHRyaWJ1dGVOYW1lKSxcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgICAgdGhpcy5tYXNrQXR0cmlidXRlRm5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PT0gXCJzdHlsZVwiKSB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy51bmF0dGFjaGVkRG9jKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudW5hdHRhY2hlZERvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnVuYXR0YWNoZWREb2MgPSB0aGlzLmRvYztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgb2xkID0gdGhpcy51bmF0dGFjaGVkRG9jLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgICAgICAgICBpZiAobS5vbGRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIG9sZC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBtLm9sZFZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBuYW1lIG9mIEFycmF5LmZyb20odGFyZ2V0LnN0eWxlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGFyZ2V0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUocG5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ByaW9yaXR5ID0gdGFyZ2V0LnN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkocG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkLnN0eWxlLmdldFByb3BlcnR5VmFsdWUocG5hbWUpIHx8IG5ld1ByaW9yaXR5ICE9PSBvbGQuc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShwbmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChuZXdQcmlvcml0eSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnN0eWxlRGlmZltwbmFtZV0gPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGVEaWZmW3BuYW1lXSA9IFtuZXdWYWx1ZSwgbmV3UHJpb3JpdHldO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpdGVtLl91bmNoYW5nZWRTdHlsZXNbcG5hbWVdID0gW25ld1ZhbHVlLCBuZXdQcmlvcml0eV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgcG5hbWUgb2YgQXJyYXkuZnJvbShvbGQuc3R5bGUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHBuYW1lKSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgaXRlbS5zdHlsZURpZmZbcG5hbWVdID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJjaGlsZExpc3RcIjoge1xuICAgICAgICAgIGlmIChpc0Jsb2NrZWQoXG4gICAgICAgICAgICBtLnRhcmdldCxcbiAgICAgICAgICAgIHRoaXMuYmxvY2tDbGFzcyxcbiAgICAgICAgICAgIHRoaXMuYmxvY2tTZWxlY3RvcixcbiAgICAgICAgICAgIHRoaXMudW5ibG9ja1NlbGVjdG9yLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbS5hZGRlZE5vZGVzLmZvckVhY2goKG4yKSA9PiB0aGlzLmdlbkFkZHMobjIsIG0udGFyZ2V0KSk7XG4gICAgICAgICAgbS5yZW1vdmVkTm9kZXMuZm9yRWFjaCgobjIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IHRoaXMubWlycm9yLmdldElkKG4yKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gaXNTaGFkb3dSb290KG0udGFyZ2V0KSA/IHRoaXMubWlycm9yLmdldElkKG0udGFyZ2V0Lmhvc3QpIDogdGhpcy5taXJyb3IuZ2V0SWQobS50YXJnZXQpO1xuICAgICAgICAgICAgaWYgKGlzQmxvY2tlZChcbiAgICAgICAgICAgICAgbS50YXJnZXQsXG4gICAgICAgICAgICAgIHRoaXMuYmxvY2tDbGFzcyxcbiAgICAgICAgICAgICAgdGhpcy5ibG9ja1NlbGVjdG9yLFxuICAgICAgICAgICAgICB0aGlzLnVuYmxvY2tTZWxlY3RvcixcbiAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICkgfHwgaXNJZ25vcmVkKG4yLCB0aGlzLm1pcnJvcikgfHwgIWlzU2VyaWFsaXplZChuMiwgdGhpcy5taXJyb3IpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmFkZGVkU2V0LmhhcyhuMikpIHtcbiAgICAgICAgICAgICAgZGVlcERlbGV0ZSh0aGlzLmFkZGVkU2V0LCBuMik7XG4gICAgICAgICAgICAgIHRoaXMuZHJvcHBlZFNldC5hZGQobjIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFkZGVkU2V0LmhhcyhtLnRhcmdldCkgJiYgbm9kZUlkID09PSAtMSkgO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNBbmNlc3RvclJlbW92ZWQobS50YXJnZXQsIHRoaXMubWlycm9yKSkgO1xuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tb3ZlZFNldC5oYXMobjIpICYmIHRoaXMubW92ZWRNYXBbbW92ZUtleShub2RlSWQsIHBhcmVudElkKV0pIHtcbiAgICAgICAgICAgICAgZGVlcERlbGV0ZSh0aGlzLm1vdmVkU2V0LCBuMik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnJlbW92ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgcGFyZW50SWQsXG4gICAgICAgICAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgICAgICAgICBpc1NoYWRvdzogaXNTaGFkb3dSb290KG0udGFyZ2V0KSAmJiBpc05hdGl2ZVNoYWRvd0RvbShtLnRhcmdldCkgPyB0cnVlIDogdm9pZCAwXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5tYXBSZW1vdmVzLnB1c2gobjIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmdlbkFkZHMgPSAobjIsIHRhcmdldCkgPT4ge1xuICAgICAgaWYgKHRoaXMucHJvY2Vzc2VkTm9kZU1hbmFnZXIuaW5PdGhlckJ1ZmZlcihuMiwgdGhpcykpIHJldHVybjtcbiAgICAgIGlmICh0aGlzLmFkZGVkU2V0LmhhcyhuMikgfHwgdGhpcy5tb3ZlZFNldC5oYXMobjIpKSByZXR1cm47XG4gICAgICBpZiAodGhpcy5taXJyb3IuaGFzTm9kZShuMikpIHtcbiAgICAgICAgaWYgKGlzSWdub3JlZChuMiwgdGhpcy5taXJyb3IpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW92ZWRTZXQuYWRkKG4yKTtcbiAgICAgICAgbGV0IHRhcmdldElkID0gbnVsbDtcbiAgICAgICAgaWYgKHRhcmdldCAmJiB0aGlzLm1pcnJvci5oYXNOb2RlKHRhcmdldCkpIHtcbiAgICAgICAgICB0YXJnZXRJZCA9IHRoaXMubWlycm9yLmdldElkKHRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldElkICYmIHRhcmdldElkICE9PSAtMSkge1xuICAgICAgICAgIHRoaXMubW92ZWRNYXBbbW92ZUtleSh0aGlzLm1pcnJvci5nZXRJZChuMiksIHRhcmdldElkKV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFkZGVkU2V0LmFkZChuMik7XG4gICAgICAgIHRoaXMuZHJvcHBlZFNldC5kZWxldGUobjIpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0Jsb2NrZWQoXG4gICAgICAgIG4yLFxuICAgICAgICB0aGlzLmJsb2NrQ2xhc3MsXG4gICAgICAgIHRoaXMuYmxvY2tTZWxlY3RvcixcbiAgICAgICAgdGhpcy51bmJsb2NrU2VsZWN0b3IsXG4gICAgICAgIGZhbHNlXG4gICAgICApKSB7XG4gICAgICAgIG4yLmNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGROKSA9PiB0aGlzLmdlbkFkZHMoY2hpbGROKSk7XG4gICAgICAgIGlmIChoYXNTaGFkb3dSb290KG4yKSkge1xuICAgICAgICAgIG4yLnNoYWRvd1Jvb3QuY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE4pID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc2VkTm9kZU1hbmFnZXIuYWRkKGNoaWxkTiwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLmdlbkFkZHMoY2hpbGROLCBuMik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGluaXQob3B0aW9ucykge1xuICAgIFtcbiAgICAgIFwibXV0YXRpb25DYlwiLFxuICAgICAgXCJibG9ja0NsYXNzXCIsXG4gICAgICBcImJsb2NrU2VsZWN0b3JcIixcbiAgICAgIFwidW5ibG9ja1NlbGVjdG9yXCIsXG4gICAgICBcIm1hc2tBbGxUZXh0XCIsXG4gICAgICBcIm1hc2tUZXh0Q2xhc3NcIixcbiAgICAgIFwidW5tYXNrVGV4dENsYXNzXCIsXG4gICAgICBcIm1hc2tUZXh0U2VsZWN0b3JcIixcbiAgICAgIFwidW5tYXNrVGV4dFNlbGVjdG9yXCIsXG4gICAgICBcImlubGluZVN0eWxlc2hlZXRcIixcbiAgICAgIFwibWFza0lucHV0T3B0aW9uc1wiLFxuICAgICAgXCJtYXNrQXR0cmlidXRlRm5cIixcbiAgICAgIFwibWFza1RleHRGblwiLFxuICAgICAgXCJtYXNrSW5wdXRGblwiLFxuICAgICAgXCJrZWVwSWZyYW1lU3JjRm5cIixcbiAgICAgIFwicmVjb3JkQ2FudmFzXCIsXG4gICAgICBcImlubGluZUltYWdlc1wiLFxuICAgICAgXCJzbGltRE9NT3B0aW9uc1wiLFxuICAgICAgXCJkYXRhVVJMT3B0aW9uc1wiLFxuICAgICAgXCJkb2NcIixcbiAgICAgIFwibWlycm9yXCIsXG4gICAgICBcImlmcmFtZU1hbmFnZXJcIixcbiAgICAgIFwic3R5bGVzaGVldE1hbmFnZXJcIixcbiAgICAgIFwic2hhZG93RG9tTWFuYWdlclwiLFxuICAgICAgXCJjYW52YXNNYW5hZ2VyXCIsXG4gICAgICBcInByb2Nlc3NlZE5vZGVNYW5hZ2VyXCJcbiAgICBdLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgdGhpc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgIH0pO1xuICB9XG4gIGZyZWV6ZSgpIHtcbiAgICB0aGlzLmZyb3plbiA9IHRydWU7XG4gICAgdGhpcy5jYW52YXNNYW5hZ2VyLmZyZWV6ZSgpO1xuICB9XG4gIHVuZnJlZXplKCkge1xuICAgIHRoaXMuZnJvemVuID0gZmFsc2U7XG4gICAgdGhpcy5jYW52YXNNYW5hZ2VyLnVuZnJlZXplKCk7XG4gICAgdGhpcy5lbWl0KCk7XG4gIH1cbiAgaXNGcm96ZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJvemVuO1xuICB9XG4gIGxvY2soKSB7XG4gICAgdGhpcy5sb2NrZWQgPSB0cnVlO1xuICAgIHRoaXMuY2FudmFzTWFuYWdlci5sb2NrKCk7XG4gIH1cbiAgdW5sb2NrKCkge1xuICAgIHRoaXMubG9ja2VkID0gZmFsc2U7XG4gICAgdGhpcy5jYW52YXNNYW5hZ2VyLnVubG9jaygpO1xuICAgIHRoaXMuZW1pdCgpO1xuICB9XG4gIHJlc2V0KCkge1xuICAgIHRoaXMuc2hhZG93RG9tTWFuYWdlci5yZXNldCgpO1xuICAgIHRoaXMuY2FudmFzTWFuYWdlci5yZXNldCgpO1xuICB9XG59XG5mdW5jdGlvbiBkZWVwRGVsZXRlKGFkZHNTZXQsIG4yKSB7XG4gIGFkZHNTZXQuZGVsZXRlKG4yKTtcbiAgbjIuY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE4pID0+IGRlZXBEZWxldGUoYWRkc1NldCwgY2hpbGROKSk7XG59XG5mdW5jdGlvbiBpc1BhcmVudFJlbW92ZWQocmVtb3ZlcywgbjIsIG1pcnJvcjIpIHtcbiAgaWYgKHJlbW92ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBfaXNQYXJlbnRSZW1vdmVkKHJlbW92ZXMsIG4yLCBtaXJyb3IyKTtcbn1cbmZ1bmN0aW9uIF9pc1BhcmVudFJlbW92ZWQocmVtb3ZlcywgbjIsIG1pcnJvcjIpIHtcbiAgbGV0IG5vZGUgPSBuMi5wYXJlbnROb2RlO1xuICB3aGlsZSAobm9kZSkge1xuICAgIGNvbnN0IHBhcmVudElkID0gbWlycm9yMi5nZXRJZChub2RlKTtcbiAgICBpZiAocmVtb3Zlcy5zb21lKChyMikgPT4gcjIuaWQgPT09IHBhcmVudElkKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNBbmNlc3RvckluU2V0KHNldCwgbjIpIHtcbiAgaWYgKHNldC5zaXplID09PSAwKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBfaXNBbmNlc3RvckluU2V0KHNldCwgbjIpO1xufVxuZnVuY3Rpb24gX2lzQW5jZXN0b3JJblNldChzZXQsIG4yKSB7XG4gIGNvbnN0IHsgcGFyZW50Tm9kZSB9ID0gbjI7XG4gIGlmICghcGFyZW50Tm9kZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoc2V0LmhhcyhwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBfaXNBbmNlc3RvckluU2V0KHNldCwgcGFyZW50Tm9kZSk7XG59XG5sZXQgZXJyb3JIYW5kbGVyO1xuZnVuY3Rpb24gcmVnaXN0ZXJFcnJvckhhbmRsZXIoaGFuZGxlcikge1xuICBlcnJvckhhbmRsZXIgPSBoYW5kbGVyO1xufVxuZnVuY3Rpb24gdW5yZWdpc3RlckVycm9ySGFuZGxlcigpIHtcbiAgZXJyb3JIYW5kbGVyID0gdm9pZCAwO1xufVxuY29uc3QgY2FsbGJhY2tXcmFwcGVyID0gKGNiKSA9PiB7XG4gIGlmICghZXJyb3JIYW5kbGVyKSB7XG4gICAgcmV0dXJuIGNiO1xuICB9XG4gIGNvbnN0IHJyd2ViV3JhcHBlZCA9ICguLi5yZXN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjYiguLi5yZXN0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9ySGFuZGxlciAmJiBlcnJvckhhbmRsZXIoZXJyb3IpID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG4gIHJldHVybiBycndlYldyYXBwZWQ7XG59O1xuY29uc3QgbXV0YXRpb25CdWZmZXJzID0gW107XG5mdW5jdGlvbiBnZXRFdmVudFRhcmdldChldmVudCkge1xuICB0cnkge1xuICAgIGlmIChcImNvbXBvc2VkUGF0aFwiIGluIGV2ZW50KSB7XG4gICAgICBjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG4gICAgICBpZiAocGF0aC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHBhdGhbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcInBhdGhcIiBpbiBldmVudCAmJiBldmVudC5wYXRoLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGV2ZW50LnBhdGhbMF07XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgfVxuICByZXR1cm4gZXZlbnQgJiYgZXZlbnQudGFyZ2V0O1xufVxuZnVuY3Rpb24gaW5pdE11dGF0aW9uT2JzZXJ2ZXIob3B0aW9ucywgcm9vdEVsKSB7XG4gIGNvbnN0IG11dGF0aW9uQnVmZmVyID0gbmV3IE11dGF0aW9uQnVmZmVyKCk7XG4gIG11dGF0aW9uQnVmZmVycy5wdXNoKG11dGF0aW9uQnVmZmVyKTtcbiAgbXV0YXRpb25CdWZmZXIuaW5pdChvcHRpb25zKTtcbiAgbGV0IG11dGF0aW9uT2JzZXJ2ZXJDdG9yID0gd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIgfHwgLyoqXG4gICogU29tZSB3ZWJzaXRlcyBtYXkgZGlzYWJsZSBNdXRhdGlvbk9ic2VydmVyIGJ5IHJlbW92aW5nIGl0IGZyb20gdGhlIHdpbmRvdyBvYmplY3QuXG4gICogSWYgc29tZW9uZSBpcyB1c2luZyBycndlYiB0byBidWlsZCBhIGJyb3dzZXIgZXh0ZW50aW9uIG9yIHRoaW5ncyBsaWtlIGl0LCB0aGV5XG4gICogY291bGQgbm90IGNoYW5nZSB0aGUgd2Vic2l0ZSdzIGNvZGUgYnV0IGNhbiBoYXZlIGFuIG9wcG9ydHVuaXR5IHRvIGluamVjdCBzb21lXG4gICogY29kZSBiZWZvcmUgdGhlIHdlYnNpdGUgZXhlY3V0aW5nIGl0cyBKUyBsb2dpYy5cbiAgKiBUaGVuIHRoZXkgY2FuIGRvIHRoaXMgdG8gc3RvcmUgdGhlIG5hdGl2ZSBNdXRhdGlvbk9ic2VydmVyOlxuICAqIHdpbmRvdy5fX3JyTXV0YXRpb25PYnNlcnZlciA9IE11dGF0aW9uT2JzZXJ2ZXJcbiAgKi9cbiAgd2luZG93Ll9fcnJNdXRhdGlvbk9ic2VydmVyO1xuICBjb25zdCBhbmd1bGFyWm9uZVN5bWJvbCA9IHdpbmRvdz8uWm9uZT8uX19zeW1ib2xfXz8uKFwiTXV0YXRpb25PYnNlcnZlclwiKTtcbiAgaWYgKGFuZ3VsYXJab25lU3ltYm9sICYmIHdpbmRvd1thbmd1bGFyWm9uZVN5bWJvbF0pIHtcbiAgICBtdXRhdGlvbk9ic2VydmVyQ3RvciA9IHdpbmRvd1thbmd1bGFyWm9uZVN5bWJvbF07XG4gIH1cbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgbXV0YXRpb25PYnNlcnZlckN0b3IoXG4gICAgY2FsbGJhY2tXcmFwcGVyKChtdXRhdGlvbnMpID0+IHtcbiAgICAgIGlmIChvcHRpb25zLm9uTXV0YXRpb24gJiYgb3B0aW9ucy5vbk11dGF0aW9uKG11dGF0aW9ucykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG11dGF0aW9uQnVmZmVyLnByb2Nlc3NNdXRhdGlvbnMuYmluZChtdXRhdGlvbkJ1ZmZlcikobXV0YXRpb25zKTtcbiAgICB9KVxuICApO1xuICBvYnNlcnZlci5vYnNlcnZlKHJvb3RFbCwge1xuICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgYXR0cmlidXRlT2xkVmFsdWU6IHRydWUsXG4gICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICBjaGFyYWN0ZXJEYXRhT2xkVmFsdWU6IHRydWUsXG4gICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgIHN1YnRyZWU6IHRydWVcbiAgfSk7XG4gIHJldHVybiBvYnNlcnZlcjtcbn1cbmZ1bmN0aW9uIGluaXRNb3ZlT2JzZXJ2ZXIoe1xuICBtb3VzZW1vdmVDYixcbiAgc2FtcGxpbmcsXG4gIGRvYyxcbiAgbWlycm9yOiBtaXJyb3IyXG59KSB7XG4gIGlmIChzYW1wbGluZy5tb3VzZW1vdmUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICB9O1xuICB9XG4gIGNvbnN0IHRocmVzaG9sZCA9IHR5cGVvZiBzYW1wbGluZy5tb3VzZW1vdmUgPT09IFwibnVtYmVyXCIgPyBzYW1wbGluZy5tb3VzZW1vdmUgOiA1MDtcbiAgY29uc3QgY2FsbGJhY2tUaHJlc2hvbGQgPSB0eXBlb2Ygc2FtcGxpbmcubW91c2Vtb3ZlQ2FsbGJhY2sgPT09IFwibnVtYmVyXCIgPyBzYW1wbGluZy5tb3VzZW1vdmVDYWxsYmFjayA6IDUwMDtcbiAgbGV0IHBvc2l0aW9ucyA9IFtdO1xuICBsZXQgdGltZUJhc2VsaW5lO1xuICBjb25zdCB3cmFwcGVkQ2IgPSB0aHJvdHRsZSQxKFxuICAgIGNhbGxiYWNrV3JhcHBlcihcbiAgICAgIChzb3VyY2UpID0+IHtcbiAgICAgICAgY29uc3QgdG90YWxPZmZzZXQgPSBEYXRlLm5vdygpIC0gdGltZUJhc2VsaW5lO1xuICAgICAgICBtb3VzZW1vdmVDYihcbiAgICAgICAgICBwb3NpdGlvbnMubWFwKChwKSA9PiB7XG4gICAgICAgICAgICBwLnRpbWVPZmZzZXQgLT0gdG90YWxPZmZzZXQ7XG4gICAgICAgICAgICByZXR1cm4gcDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzb3VyY2VcbiAgICAgICAgKTtcbiAgICAgICAgcG9zaXRpb25zID0gW107XG4gICAgICAgIHRpbWVCYXNlbGluZSA9IG51bGw7XG4gICAgICB9XG4gICAgKSxcbiAgICBjYWxsYmFja1RocmVzaG9sZFxuICApO1xuICBjb25zdCB1cGRhdGVQb3NpdGlvbiA9IGNhbGxiYWNrV3JhcHBlcihcbiAgICB0aHJvdHRsZSQxKFxuICAgICAgY2FsbGJhY2tXcmFwcGVyKChldnQpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoZXZ0KTtcbiAgICAgICAgY29uc3QgeyBjbGllbnRYLCBjbGllbnRZIH0gPSBsZWdhY3lfaXNUb3VjaEV2ZW50KGV2dCkgPyBldnQuY2hhbmdlZFRvdWNoZXNbMF0gOiBldnQ7XG4gICAgICAgIGlmICghdGltZUJhc2VsaW5lKSB7XG4gICAgICAgICAgdGltZUJhc2VsaW5lID0gbm93VGltZXN0YW1wKCk7XG4gICAgICAgIH1cbiAgICAgICAgcG9zaXRpb25zLnB1c2goe1xuICAgICAgICAgIHg6IGNsaWVudFgsXG4gICAgICAgICAgeTogY2xpZW50WSxcbiAgICAgICAgICBpZDogbWlycm9yMi5nZXRJZCh0YXJnZXQpLFxuICAgICAgICAgIHRpbWVPZmZzZXQ6IG5vd1RpbWVzdGFtcCgpIC0gdGltZUJhc2VsaW5lXG4gICAgICAgIH0pO1xuICAgICAgICB3cmFwcGVkQ2IoXG4gICAgICAgICAgdHlwZW9mIERyYWdFdmVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBldnQgaW5zdGFuY2VvZiBEcmFnRXZlbnQgPyBJbmNyZW1lbnRhbFNvdXJjZS5EcmFnIDogZXZ0IGluc3RhbmNlb2YgTW91c2VFdmVudCA/IEluY3JlbWVudGFsU291cmNlLk1vdXNlTW92ZSA6IEluY3JlbWVudGFsU291cmNlLlRvdWNoTW92ZVxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgICB0aHJlc2hvbGQsXG4gICAgICB7XG4gICAgICAgIHRyYWlsaW5nOiBmYWxzZVxuICAgICAgfVxuICAgIClcbiAgKTtcbiAgY29uc3QgaGFuZGxlcnMgPSBbXG4gICAgb24oXCJtb3VzZW1vdmVcIiwgdXBkYXRlUG9zaXRpb24sIGRvYyksXG4gICAgb24oXCJ0b3VjaG1vdmVcIiwgdXBkYXRlUG9zaXRpb24sIGRvYyksXG4gICAgb24oXCJkcmFnXCIsIHVwZGF0ZVBvc2l0aW9uLCBkb2MpXG4gIF07XG4gIHJldHVybiBjYWxsYmFja1dyYXBwZXIoKCkgPT4ge1xuICAgIGhhbmRsZXJzLmZvckVhY2goKGgpID0+IGgoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gaW5pdE1vdXNlSW50ZXJhY3Rpb25PYnNlcnZlcih7XG4gIG1vdXNlSW50ZXJhY3Rpb25DYixcbiAgZG9jLFxuICBtaXJyb3I6IG1pcnJvcjIsXG4gIGJsb2NrQ2xhc3MsXG4gIGJsb2NrU2VsZWN0b3IsXG4gIHVuYmxvY2tTZWxlY3RvcixcbiAgc2FtcGxpbmdcbn0pIHtcbiAgaWYgKHNhbXBsaW5nLm1vdXNlSW50ZXJhY3Rpb24gPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICB9O1xuICB9XG4gIGNvbnN0IGRpc2FibGVNYXAgPSBzYW1wbGluZy5tb3VzZUludGVyYWN0aW9uID09PSB0cnVlIHx8IHNhbXBsaW5nLm1vdXNlSW50ZXJhY3Rpb24gPT09IHZvaWQgMCA/IHt9IDogc2FtcGxpbmcubW91c2VJbnRlcmFjdGlvbjtcbiAgY29uc3QgaGFuZGxlcnMgPSBbXTtcbiAgbGV0IGN1cnJlbnRQb2ludGVyVHlwZSA9IG51bGw7XG4gIGNvbnN0IGdldEhhbmRsZXIgPSAoZXZlbnRLZXkpID0+IHtcbiAgICByZXR1cm4gKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBnZXRFdmVudFRhcmdldChldmVudCk7XG4gICAgICBpZiAoaXNCbG9ja2VkKHRhcmdldCwgYmxvY2tDbGFzcywgYmxvY2tTZWxlY3RvciwgdW5ibG9ja1NlbGVjdG9yLCB0cnVlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgcG9pbnRlclR5cGUgPSBudWxsO1xuICAgICAgbGV0IHRoaXNFdmVudEtleSA9IGV2ZW50S2V5O1xuICAgICAgaWYgKFwicG9pbnRlclR5cGVcIiBpbiBldmVudCkge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LnBvaW50ZXJUeXBlKSB7XG4gICAgICAgICAgY2FzZSBcIm1vdXNlXCI6XG4gICAgICAgICAgICBwb2ludGVyVHlwZSA9IFBvaW50ZXJUeXBlcy5Nb3VzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJ0b3VjaFwiOlxuICAgICAgICAgICAgcG9pbnRlclR5cGUgPSBQb2ludGVyVHlwZXMuVG91Y2g7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwicGVuXCI6XG4gICAgICAgICAgICBwb2ludGVyVHlwZSA9IFBvaW50ZXJUeXBlcy5QZW47XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9pbnRlclR5cGUgPT09IFBvaW50ZXJUeXBlcy5Ub3VjaCkge1xuICAgICAgICAgIGlmIChNb3VzZUludGVyYWN0aW9uc1tldmVudEtleV0gPT09IE1vdXNlSW50ZXJhY3Rpb25zLk1vdXNlRG93bikge1xuICAgICAgICAgICAgdGhpc0V2ZW50S2V5ID0gXCJUb3VjaFN0YXJ0XCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChNb3VzZUludGVyYWN0aW9uc1tldmVudEtleV0gPT09IE1vdXNlSW50ZXJhY3Rpb25zLk1vdXNlVXApIHtcbiAgICAgICAgICAgIHRoaXNFdmVudEtleSA9IFwiVG91Y2hFbmRcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocG9pbnRlclR5cGUgPT09IFBvaW50ZXJUeXBlcy5QZW4pIDtcbiAgICAgIH0gZWxzZSBpZiAobGVnYWN5X2lzVG91Y2hFdmVudChldmVudCkpIHtcbiAgICAgICAgcG9pbnRlclR5cGUgPSBQb2ludGVyVHlwZXMuVG91Y2g7XG4gICAgICB9XG4gICAgICBpZiAocG9pbnRlclR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgY3VycmVudFBvaW50ZXJUeXBlID0gcG9pbnRlclR5cGU7XG4gICAgICAgIGlmICh0aGlzRXZlbnRLZXkuc3RhcnRzV2l0aChcIlRvdWNoXCIpICYmIHBvaW50ZXJUeXBlID09PSBQb2ludGVyVHlwZXMuVG91Y2ggfHwgdGhpc0V2ZW50S2V5LnN0YXJ0c1dpdGgoXCJNb3VzZVwiKSAmJiBwb2ludGVyVHlwZSA9PT0gUG9pbnRlclR5cGVzLk1vdXNlKSB7XG4gICAgICAgICAgcG9pbnRlclR5cGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKE1vdXNlSW50ZXJhY3Rpb25zW2V2ZW50S2V5XSA9PT0gTW91c2VJbnRlcmFjdGlvbnMuQ2xpY2spIHtcbiAgICAgICAgcG9pbnRlclR5cGUgPSBjdXJyZW50UG9pbnRlclR5cGU7XG4gICAgICAgIGN1cnJlbnRQb2ludGVyVHlwZSA9IG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBlMiA9IGxlZ2FjeV9pc1RvdWNoRXZlbnQoZXZlbnQpID8gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0gOiBldmVudDtcbiAgICAgIGlmICghZTIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaWQgPSBtaXJyb3IyLmdldElkKHRhcmdldCk7XG4gICAgICBjb25zdCB7IGNsaWVudFgsIGNsaWVudFkgfSA9IGUyO1xuICAgICAgY2FsbGJhY2tXcmFwcGVyKG1vdXNlSW50ZXJhY3Rpb25DYikoe1xuICAgICAgICB0eXBlOiBNb3VzZUludGVyYWN0aW9uc1t0aGlzRXZlbnRLZXldLFxuICAgICAgICBpZCxcbiAgICAgICAgeDogY2xpZW50WCxcbiAgICAgICAgeTogY2xpZW50WSxcbiAgICAgICAgLi4ucG9pbnRlclR5cGUgIT09IG51bGwgJiYgeyBwb2ludGVyVHlwZSB9XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xuICBPYmplY3Qua2V5cyhNb3VzZUludGVyYWN0aW9ucykuZmlsdGVyKFxuICAgIChrZXkpID0+IE51bWJlci5pc05hTihOdW1iZXIoa2V5KSkgJiYgIWtleS5lbmRzV2l0aChcIl9EZXBhcnRlZFwiKSAmJiBkaXNhYmxlTWFwW2tleV0gIT09IGZhbHNlXG4gICkuZm9yRWFjaCgoZXZlbnRLZXkpID0+IHtcbiAgICBsZXQgZXZlbnROYW1lID0gdG9Mb3dlckNhc2UoZXZlbnRLZXkpO1xuICAgIGNvbnN0IGhhbmRsZXIgPSBnZXRIYW5kbGVyKGV2ZW50S2V5KTtcbiAgICBpZiAod2luZG93LlBvaW50ZXJFdmVudCkge1xuICAgICAgc3dpdGNoIChNb3VzZUludGVyYWN0aW9uc1tldmVudEtleV0pIHtcbiAgICAgICAgY2FzZSBNb3VzZUludGVyYWN0aW9ucy5Nb3VzZURvd246XG4gICAgICAgIGNhc2UgTW91c2VJbnRlcmFjdGlvbnMuTW91c2VVcDpcbiAgICAgICAgICBldmVudE5hbWUgPSBldmVudE5hbWUucmVwbGFjZShcbiAgICAgICAgICAgIFwibW91c2VcIixcbiAgICAgICAgICAgIFwicG9pbnRlclwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBNb3VzZUludGVyYWN0aW9ucy5Ub3VjaFN0YXJ0OlxuICAgICAgICBjYXNlIE1vdXNlSW50ZXJhY3Rpb25zLlRvdWNoRW5kOlxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlcnMucHVzaChvbihldmVudE5hbWUsIGhhbmRsZXIsIGRvYykpO1xuICB9KTtcbiAgcmV0dXJuIGNhbGxiYWNrV3JhcHBlcigoKSA9PiB7XG4gICAgaGFuZGxlcnMuZm9yRWFjaCgoaCkgPT4gaCgpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBpbml0U2Nyb2xsT2JzZXJ2ZXIoe1xuICBzY3JvbGxDYixcbiAgZG9jLFxuICBtaXJyb3I6IG1pcnJvcjIsXG4gIGJsb2NrQ2xhc3MsXG4gIGJsb2NrU2VsZWN0b3IsXG4gIHVuYmxvY2tTZWxlY3RvcixcbiAgc2FtcGxpbmdcbn0pIHtcbiAgY29uc3QgdXBkYXRlUG9zaXRpb24gPSBjYWxsYmFja1dyYXBwZXIoXG4gICAgdGhyb3R0bGUkMShcbiAgICAgIGNhbGxiYWNrV3JhcHBlcigoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGV2dCk7XG4gICAgICAgIGlmICghdGFyZ2V0IHx8IGlzQmxvY2tlZChcbiAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgYmxvY2tDbGFzcyxcbiAgICAgICAgICBibG9ja1NlbGVjdG9yLFxuICAgICAgICAgIHVuYmxvY2tTZWxlY3RvcixcbiAgICAgICAgICB0cnVlXG4gICAgICAgICkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWQgPSBtaXJyb3IyLmdldElkKHRhcmdldCk7XG4gICAgICAgIGlmICh0YXJnZXQgPT09IGRvYyAmJiBkb2MuZGVmYXVsdFZpZXcpIHtcbiAgICAgICAgICBjb25zdCBzY3JvbGxMZWZ0VG9wID0gZ2V0V2luZG93U2Nyb2xsKGRvYy5kZWZhdWx0Vmlldyk7XG4gICAgICAgICAgc2Nyb2xsQ2Ioe1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICB4OiBzY3JvbGxMZWZ0VG9wLmxlZnQsXG4gICAgICAgICAgICB5OiBzY3JvbGxMZWZ0VG9wLnRvcFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjcm9sbENiKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgeDogdGFyZ2V0LnNjcm9sbExlZnQsXG4gICAgICAgICAgICB5OiB0YXJnZXQuc2Nyb2xsVG9wXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc2FtcGxpbmcuc2Nyb2xsIHx8IDEwMFxuICAgIClcbiAgKTtcbiAgcmV0dXJuIG9uKFwic2Nyb2xsXCIsIHVwZGF0ZVBvc2l0aW9uLCBkb2MpO1xufVxuZnVuY3Rpb24gaW5pdFZpZXdwb3J0UmVzaXplT2JzZXJ2ZXIoeyB2aWV3cG9ydFJlc2l6ZUNiIH0sIHsgd2luIH0pIHtcbiAgbGV0IGxhc3RIID0gLTE7XG4gIGxldCBsYXN0VyA9IC0xO1xuICBjb25zdCB1cGRhdGVEaW1lbnNpb24gPSBjYWxsYmFja1dyYXBwZXIoXG4gICAgdGhyb3R0bGUkMShcbiAgICAgIGNhbGxiYWNrV3JhcHBlcigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IGdldFdpbmRvd0hlaWdodCgpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IGdldFdpbmRvd1dpZHRoKCk7XG4gICAgICAgIGlmIChsYXN0SCAhPT0gaGVpZ2h0IHx8IGxhc3RXICE9PSB3aWR0aCkge1xuICAgICAgICAgIHZpZXdwb3J0UmVzaXplQ2Ioe1xuICAgICAgICAgICAgd2lkdGg6IE51bWJlcih3aWR0aCksXG4gICAgICAgICAgICBoZWlnaHQ6IE51bWJlcihoZWlnaHQpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGFzdEggPSBoZWlnaHQ7XG4gICAgICAgICAgbGFzdFcgPSB3aWR0aDtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICAyMDBcbiAgICApXG4gICk7XG4gIHJldHVybiBvbihcInJlc2l6ZVwiLCB1cGRhdGVEaW1lbnNpb24sIHdpbik7XG59XG5jb25zdCBJTlBVVF9UQUdTID0gW1wiSU5QVVRcIiwgXCJURVhUQVJFQVwiLCBcIlNFTEVDVFwiXTtcbmNvbnN0IGxhc3RJbnB1dFZhbHVlTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG5mdW5jdGlvbiBpbml0SW5wdXRPYnNlcnZlcih7XG4gIGlucHV0Q2IsXG4gIGRvYyxcbiAgbWlycm9yOiBtaXJyb3IyLFxuICBibG9ja0NsYXNzLFxuICBibG9ja1NlbGVjdG9yLFxuICB1bmJsb2NrU2VsZWN0b3IsXG4gIGlnbm9yZUNsYXNzLFxuICBpZ25vcmVTZWxlY3RvcixcbiAgbWFza0lucHV0T3B0aW9ucyxcbiAgbWFza0lucHV0Rm4sXG4gIHNhbXBsaW5nLFxuICB1c2VyVHJpZ2dlcmVkT25JbnB1dCxcbiAgbWFza1RleHRDbGFzcyxcbiAgdW5tYXNrVGV4dENsYXNzLFxuICBtYXNrVGV4dFNlbGVjdG9yLFxuICB1bm1hc2tUZXh0U2VsZWN0b3Jcbn0pIHtcbiAgZnVuY3Rpb24gZXZlbnRIYW5kbGVyKGV2ZW50KSB7XG4gICAgbGV0IHRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGV2ZW50KTtcbiAgICBjb25zdCB1c2VyVHJpZ2dlcmVkID0gZXZlbnQuaXNUcnVzdGVkO1xuICAgIGNvbnN0IHRhZ05hbWUgPSB0YXJnZXQgJiYgdG9VcHBlckNhc2UodGFyZ2V0LnRhZ05hbWUpO1xuICAgIGlmICh0YWdOYW1lID09PSBcIk9QVElPTlwiKSB0YXJnZXQgPSB0YXJnZXQucGFyZW50RWxlbWVudDtcbiAgICBpZiAoIXRhcmdldCB8fCAhdGFnTmFtZSB8fCBJTlBVVF9UQUdTLmluZGV4T2YodGFnTmFtZSkgPCAwIHx8IGlzQmxvY2tlZChcbiAgICAgIHRhcmdldCxcbiAgICAgIGJsb2NrQ2xhc3MsXG4gICAgICBibG9ja1NlbGVjdG9yLFxuICAgICAgdW5ibG9ja1NlbGVjdG9yLFxuICAgICAgdHJ1ZVxuICAgICkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWwgPSB0YXJnZXQ7XG4gICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhpZ25vcmVDbGFzcykgfHwgaWdub3JlU2VsZWN0b3IgJiYgZWwubWF0Y2hlcyhpZ25vcmVTZWxlY3RvcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IGdldElucHV0VHlwZSh0YXJnZXQpO1xuICAgIGxldCB0ZXh0ID0gZ2V0SW5wdXRWYWx1ZShlbCwgdGFnTmFtZSwgdHlwZSk7XG4gICAgbGV0IGlzQ2hlY2tlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGlzSW5wdXRNYXNrZWQgPSBzaG91bGRNYXNrSW5wdXQoe1xuICAgICAgbWFza0lucHV0T3B0aW9ucyxcbiAgICAgIHRhZ05hbWUsXG4gICAgICB0eXBlXG4gICAgfSk7XG4gICAgY29uc3QgZm9yY2VNYXNrID0gbmVlZE1hc2tpbmdUZXh0KFxuICAgICAgdGFyZ2V0LFxuICAgICAgbWFza1RleHRDbGFzcyxcbiAgICAgIG1hc2tUZXh0U2VsZWN0b3IsXG4gICAgICB1bm1hc2tUZXh0Q2xhc3MsXG4gICAgICB1bm1hc2tUZXh0U2VsZWN0b3IsXG4gICAgICBpc0lucHV0TWFza2VkXG4gICAgKTtcbiAgICBpZiAodHlwZSA9PT0gXCJyYWRpb1wiIHx8IHR5cGUgPT09IFwiY2hlY2tib3hcIikge1xuICAgICAgaXNDaGVja2VkID0gdGFyZ2V0LmNoZWNrZWQ7XG4gICAgfVxuICAgIHRleHQgPSBtYXNrSW5wdXRWYWx1ZSh7XG4gICAgICBpc01hc2tlZDogZm9yY2VNYXNrLFxuICAgICAgZWxlbWVudDogdGFyZ2V0LFxuICAgICAgdmFsdWU6IHRleHQsXG4gICAgICBtYXNrSW5wdXRGblxuICAgIH0pO1xuICAgIGNiV2l0aERlZHVwKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdXNlclRyaWdnZXJlZE9uSW5wdXQgPyB7IHRleHQsIGlzQ2hlY2tlZCwgdXNlclRyaWdnZXJlZCB9IDogeyB0ZXh0LCBpc0NoZWNrZWQgfVxuICAgICk7XG4gICAgY29uc3QgbmFtZSA9IHRhcmdldC5uYW1lO1xuICAgIGlmICh0eXBlID09PSBcInJhZGlvXCIgJiYgbmFtZSAmJiBpc0NoZWNrZWQpIHtcbiAgICAgIGRvYy5xdWVyeVNlbGVjdG9yQWxsKGBpbnB1dFt0eXBlPVwicmFkaW9cIl1bbmFtZT1cIiR7bmFtZX1cIl1gKS5mb3JFYWNoKChlbDIpID0+IHtcbiAgICAgICAgaWYgKGVsMiAhPT0gdGFyZ2V0KSB7XG4gICAgICAgICAgY29uc3QgdGV4dDIgPSBtYXNrSW5wdXRWYWx1ZSh7XG4gICAgICAgICAgICAvLyBzaGFyZSBtYXNrIGJlaGF2aW9yIG9mIGB0YXJnZXRgXG4gICAgICAgICAgICBpc01hc2tlZDogZm9yY2VNYXNrLFxuICAgICAgICAgICAgZWxlbWVudDogZWwyLFxuICAgICAgICAgICAgdmFsdWU6IGdldElucHV0VmFsdWUoZWwyLCB0YWdOYW1lLCB0eXBlKSxcbiAgICAgICAgICAgIG1hc2tJbnB1dEZuXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY2JXaXRoRGVkdXAoXG4gICAgICAgICAgICBlbDIsXG4gICAgICAgICAgICB1c2VyVHJpZ2dlcmVkT25JbnB1dCA/IHsgdGV4dDogdGV4dDIsIGlzQ2hlY2tlZDogIWlzQ2hlY2tlZCwgdXNlclRyaWdnZXJlZDogZmFsc2UgfSA6IHsgdGV4dDogdGV4dDIsIGlzQ2hlY2tlZDogIWlzQ2hlY2tlZCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGNiV2l0aERlZHVwKHRhcmdldCwgdjIpIHtcbiAgICBjb25zdCBsYXN0SW5wdXRWYWx1ZSA9IGxhc3RJbnB1dFZhbHVlTWFwLmdldCh0YXJnZXQpO1xuICAgIGlmICghbGFzdElucHV0VmFsdWUgfHwgbGFzdElucHV0VmFsdWUudGV4dCAhPT0gdjIudGV4dCB8fCBsYXN0SW5wdXRWYWx1ZS5pc0NoZWNrZWQgIT09IHYyLmlzQ2hlY2tlZCkge1xuICAgICAgbGFzdElucHV0VmFsdWVNYXAuc2V0KHRhcmdldCwgdjIpO1xuICAgICAgY29uc3QgaWQgPSBtaXJyb3IyLmdldElkKHRhcmdldCk7XG4gICAgICBjYWxsYmFja1dyYXBwZXIoaW5wdXRDYikoe1xuICAgICAgICAuLi52MixcbiAgICAgICAgaWRcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBjb25zdCBldmVudHMgPSBzYW1wbGluZy5pbnB1dCA9PT0gXCJsYXN0XCIgPyBbXCJjaGFuZ2VcIl0gOiBbXCJpbnB1dFwiLCBcImNoYW5nZVwiXTtcbiAgY29uc3QgaGFuZGxlcnMgPSBldmVudHMubWFwKFxuICAgIChldmVudE5hbWUpID0+IG9uKGV2ZW50TmFtZSwgY2FsbGJhY2tXcmFwcGVyKGV2ZW50SGFuZGxlciksIGRvYylcbiAgKTtcbiAgY29uc3QgY3VycmVudFdpbmRvdyA9IGRvYy5kZWZhdWx0VmlldztcbiAgaWYgKCFjdXJyZW50V2luZG93KSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGhhbmRsZXJzLmZvckVhY2goKGgpID0+IGgoKSk7XG4gICAgfTtcbiAgfVxuICBjb25zdCBwcm9wZXJ0eURlc2NyaXB0b3IgPSBjdXJyZW50V2luZG93Lk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgY3VycmVudFdpbmRvdy5IVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSxcbiAgICBcInZhbHVlXCJcbiAgKTtcbiAgY29uc3QgaG9va1Byb3BlcnRpZXMgPSBbXG4gICAgW2N1cnJlbnRXaW5kb3cuSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwidmFsdWVcIl0sXG4gICAgW2N1cnJlbnRXaW5kb3cuSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwiY2hlY2tlZFwiXSxcbiAgICBbY3VycmVudFdpbmRvdy5IVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUsIFwidmFsdWVcIl0sXG4gICAgW2N1cnJlbnRXaW5kb3cuSFRNTFRleHRBcmVhRWxlbWVudC5wcm90b3R5cGUsIFwidmFsdWVcIl0sXG4gICAgLy8gU29tZSBVSSBsaWJyYXJ5IHVzZSBzZWxlY3RlZEluZGV4IHRvIHNldCBzZWxlY3QgdmFsdWVcbiAgICBbY3VycmVudFdpbmRvdy5IVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUsIFwic2VsZWN0ZWRJbmRleFwiXSxcbiAgICBbY3VycmVudFdpbmRvdy5IVE1MT3B0aW9uRWxlbWVudC5wcm90b3R5cGUsIFwic2VsZWN0ZWRcIl1cbiAgXTtcbiAgaWYgKHByb3BlcnR5RGVzY3JpcHRvciAmJiBwcm9wZXJ0eURlc2NyaXB0b3Iuc2V0KSB7XG4gICAgaGFuZGxlcnMucHVzaChcbiAgICAgIC4uLmhvb2tQcm9wZXJ0aWVzLm1hcChcbiAgICAgICAgKHApID0+IGhvb2tTZXR0ZXIoXG4gICAgICAgICAgcFswXSxcbiAgICAgICAgICBwWzFdLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNldCgpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tXcmFwcGVyKGV2ZW50SGFuZGxlcikoe1xuICAgICAgICAgICAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgICAgICAgICAgICBpc1RydXN0ZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgLy8gdXNlclRyaWdnZXJlZCB0byBmYWxzZSBhcyB0aGlzIGNvdWxkIHdlbGwgYmUgcHJvZ3JhbW1hdGljXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgY3VycmVudFdpbmRvd1xuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuICByZXR1cm4gY2FsbGJhY2tXcmFwcGVyKCgpID0+IHtcbiAgICBoYW5kbGVycy5mb3JFYWNoKChoKSA9PiBoKCkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGdldE5lc3RlZENTU1J1bGVQb3NpdGlvbnMocnVsZSkge1xuICBjb25zdCBwb3NpdGlvbnMgPSBbXTtcbiAgZnVuY3Rpb24gcmVjdXJzZShjaGlsZFJ1bGUsIHBvcykge1xuICAgIGlmIChoYXNOZXN0ZWRDU1NSdWxlKFwiQ1NTR3JvdXBpbmdSdWxlXCIpICYmIGNoaWxkUnVsZS5wYXJlbnRSdWxlIGluc3RhbmNlb2YgQ1NTR3JvdXBpbmdSdWxlIHx8IGhhc05lc3RlZENTU1J1bGUoXCJDU1NNZWRpYVJ1bGVcIikgJiYgY2hpbGRSdWxlLnBhcmVudFJ1bGUgaW5zdGFuY2VvZiBDU1NNZWRpYVJ1bGUgfHwgaGFzTmVzdGVkQ1NTUnVsZShcIkNTU1N1cHBvcnRzUnVsZVwiKSAmJiBjaGlsZFJ1bGUucGFyZW50UnVsZSBpbnN0YW5jZW9mIENTU1N1cHBvcnRzUnVsZSB8fCBoYXNOZXN0ZWRDU1NSdWxlKFwiQ1NTQ29uZGl0aW9uUnVsZVwiKSAmJiBjaGlsZFJ1bGUucGFyZW50UnVsZSBpbnN0YW5jZW9mIENTU0NvbmRpdGlvblJ1bGUpIHtcbiAgICAgIGNvbnN0IHJ1bGVzMiA9IEFycmF5LmZyb20oXG4gICAgICAgIGNoaWxkUnVsZS5wYXJlbnRSdWxlLmNzc1J1bGVzXG4gICAgICApO1xuICAgICAgY29uc3QgaW5kZXggPSBydWxlczIuaW5kZXhPZihjaGlsZFJ1bGUpO1xuICAgICAgcG9zLnVuc2hpZnQoaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoY2hpbGRSdWxlLnBhcmVudFN0eWxlU2hlZXQpIHtcbiAgICAgIGNvbnN0IHJ1bGVzMiA9IEFycmF5LmZyb20oY2hpbGRSdWxlLnBhcmVudFN0eWxlU2hlZXQuY3NzUnVsZXMpO1xuICAgICAgY29uc3QgaW5kZXggPSBydWxlczIuaW5kZXhPZihjaGlsZFJ1bGUpO1xuICAgICAgcG9zLnVuc2hpZnQoaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcG9zO1xuICB9XG4gIHJldHVybiByZWN1cnNlKHJ1bGUsIHBvc2l0aW9ucyk7XG59XG5mdW5jdGlvbiBnZXRJZEFuZFN0eWxlSWQoc2hlZXQsIG1pcnJvcjIsIHN0eWxlTWlycm9yKSB7XG4gIGxldCBpZCwgc3R5bGVJZDtcbiAgaWYgKCFzaGVldCkgcmV0dXJuIHt9O1xuICBpZiAoc2hlZXQub3duZXJOb2RlKSBpZCA9IG1pcnJvcjIuZ2V0SWQoc2hlZXQub3duZXJOb2RlKTtcbiAgZWxzZSBzdHlsZUlkID0gc3R5bGVNaXJyb3IuZ2V0SWQoc2hlZXQpO1xuICByZXR1cm4ge1xuICAgIHN0eWxlSWQsXG4gICAgaWRcbiAgfTtcbn1cbmZ1bmN0aW9uIGluaXRTdHlsZVNoZWV0T2JzZXJ2ZXIoeyBzdHlsZVNoZWV0UnVsZUNiLCBtaXJyb3I6IG1pcnJvcjIsIHN0eWxlc2hlZXRNYW5hZ2VyIH0sIHsgd2luIH0pIHtcbiAgaWYgKCF3aW4uQ1NTU3R5bGVTaGVldCB8fCAhd2luLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICB9O1xuICB9XG4gIGNvbnN0IGluc2VydFJ1bGUgPSB3aW4uQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuaW5zZXJ0UnVsZTtcbiAgd2luLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlLmluc2VydFJ1bGUgPSBuZXcgUHJveHkoaW5zZXJ0UnVsZSwge1xuICAgIGFwcGx5OiBjYWxsYmFja1dyYXBwZXIoXG4gICAgICAodGFyZ2V0LCB0aGlzQXJnLCBhcmd1bWVudHNMaXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IFtydWxlLCBpbmRleF0gPSBhcmd1bWVudHNMaXN0O1xuICAgICAgICBjb25zdCB7IGlkLCBzdHlsZUlkIH0gPSBnZXRJZEFuZFN0eWxlSWQoXG4gICAgICAgICAgdGhpc0FyZyxcbiAgICAgICAgICBtaXJyb3IyLFxuICAgICAgICAgIHN0eWxlc2hlZXRNYW5hZ2VyLnN0eWxlTWlycm9yXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpZCAmJiBpZCAhPT0gLTEgfHwgc3R5bGVJZCAmJiBzdHlsZUlkICE9PSAtMSkge1xuICAgICAgICAgIHN0eWxlU2hlZXRSdWxlQ2Ioe1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBzdHlsZUlkLFxuICAgICAgICAgICAgYWRkczogW3sgcnVsZSwgaW5kZXggfV1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50c0xpc3QpO1xuICAgICAgfVxuICAgIClcbiAgfSk7XG4gIGNvbnN0IGRlbGV0ZVJ1bGUgPSB3aW4uQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuZGVsZXRlUnVsZTtcbiAgd2luLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlLmRlbGV0ZVJ1bGUgPSBuZXcgUHJveHkoZGVsZXRlUnVsZSwge1xuICAgIGFwcGx5OiBjYWxsYmFja1dyYXBwZXIoXG4gICAgICAodGFyZ2V0LCB0aGlzQXJnLCBhcmd1bWVudHNMaXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IFtpbmRleF0gPSBhcmd1bWVudHNMaXN0O1xuICAgICAgICBjb25zdCB7IGlkLCBzdHlsZUlkIH0gPSBnZXRJZEFuZFN0eWxlSWQoXG4gICAgICAgICAgdGhpc0FyZyxcbiAgICAgICAgICBtaXJyb3IyLFxuICAgICAgICAgIHN0eWxlc2hlZXRNYW5hZ2VyLnN0eWxlTWlycm9yXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpZCAmJiBpZCAhPT0gLTEgfHwgc3R5bGVJZCAmJiBzdHlsZUlkICE9PSAtMSkge1xuICAgICAgICAgIHN0eWxlU2hlZXRSdWxlQ2Ioe1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBzdHlsZUlkLFxuICAgICAgICAgICAgcmVtb3ZlczogW3sgaW5kZXggfV1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50c0xpc3QpO1xuICAgICAgfVxuICAgIClcbiAgfSk7XG4gIGxldCByZXBsYWNlO1xuICBpZiAod2luLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlLnJlcGxhY2UpIHtcbiAgICByZXBsYWNlID0gd2luLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlLnJlcGxhY2U7XG4gICAgd2luLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlLnJlcGxhY2UgPSBuZXcgUHJveHkocmVwbGFjZSwge1xuICAgICAgYXBwbHk6IGNhbGxiYWNrV3JhcHBlcihcbiAgICAgICAgKHRhcmdldCwgdGhpc0FyZywgYXJndW1lbnRzTGlzdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IFt0ZXh0XSA9IGFyZ3VtZW50c0xpc3Q7XG4gICAgICAgICAgY29uc3QgeyBpZCwgc3R5bGVJZCB9ID0gZ2V0SWRBbmRTdHlsZUlkKFxuICAgICAgICAgICAgdGhpc0FyZyxcbiAgICAgICAgICAgIG1pcnJvcjIsXG4gICAgICAgICAgICBzdHlsZXNoZWV0TWFuYWdlci5zdHlsZU1pcnJvclxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGlkICYmIGlkICE9PSAtMSB8fCBzdHlsZUlkICYmIHN0eWxlSWQgIT09IC0xKSB7XG4gICAgICAgICAgICBzdHlsZVNoZWV0UnVsZUNiKHtcbiAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgIHN0eWxlSWQsXG4gICAgICAgICAgICAgIHJlcGxhY2U6IHRleHRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50c0xpc3QpO1xuICAgICAgICB9XG4gICAgICApXG4gICAgfSk7XG4gIH1cbiAgbGV0IHJlcGxhY2VTeW5jO1xuICBpZiAod2luLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlLnJlcGxhY2VTeW5jKSB7XG4gICAgcmVwbGFjZVN5bmMgPSB3aW4uQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUucmVwbGFjZVN5bmM7XG4gICAgd2luLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlLnJlcGxhY2VTeW5jID0gbmV3IFByb3h5KHJlcGxhY2VTeW5jLCB7XG4gICAgICBhcHBseTogY2FsbGJhY2tXcmFwcGVyKFxuICAgICAgICAodGFyZ2V0LCB0aGlzQXJnLCBhcmd1bWVudHNMaXN0KSA9PiB7XG4gICAgICAgICAgY29uc3QgW3RleHRdID0gYXJndW1lbnRzTGlzdDtcbiAgICAgICAgICBjb25zdCB7IGlkLCBzdHlsZUlkIH0gPSBnZXRJZEFuZFN0eWxlSWQoXG4gICAgICAgICAgICB0aGlzQXJnLFxuICAgICAgICAgICAgbWlycm9yMixcbiAgICAgICAgICAgIHN0eWxlc2hlZXRNYW5hZ2VyLnN0eWxlTWlycm9yXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoaWQgJiYgaWQgIT09IC0xIHx8IHN0eWxlSWQgJiYgc3R5bGVJZCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHN0eWxlU2hlZXRSdWxlQ2Ioe1xuICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgc3R5bGVJZCxcbiAgICAgICAgICAgICAgcmVwbGFjZVN5bmM6IHRleHRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50c0xpc3QpO1xuICAgICAgICB9XG4gICAgICApXG4gICAgfSk7XG4gIH1cbiAgY29uc3Qgc3VwcG9ydGVkTmVzdGVkQ1NTUnVsZVR5cGVzID0ge307XG4gIGlmIChjYW5Nb25rZXlQYXRjaE5lc3RlZENTU1J1bGUoXCJDU1NHcm91cGluZ1J1bGVcIikpIHtcbiAgICBzdXBwb3J0ZWROZXN0ZWRDU1NSdWxlVHlwZXMuQ1NTR3JvdXBpbmdSdWxlID0gd2luLkNTU0dyb3VwaW5nUnVsZTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoY2FuTW9ua2V5UGF0Y2hOZXN0ZWRDU1NSdWxlKFwiQ1NTTWVkaWFSdWxlXCIpKSB7XG4gICAgICBzdXBwb3J0ZWROZXN0ZWRDU1NSdWxlVHlwZXMuQ1NTTWVkaWFSdWxlID0gd2luLkNTU01lZGlhUnVsZTtcbiAgICB9XG4gICAgaWYgKGNhbk1vbmtleVBhdGNoTmVzdGVkQ1NTUnVsZShcIkNTU0NvbmRpdGlvblJ1bGVcIikpIHtcbiAgICAgIHN1cHBvcnRlZE5lc3RlZENTU1J1bGVUeXBlcy5DU1NDb25kaXRpb25SdWxlID0gd2luLkNTU0NvbmRpdGlvblJ1bGU7XG4gICAgfVxuICAgIGlmIChjYW5Nb25rZXlQYXRjaE5lc3RlZENTU1J1bGUoXCJDU1NTdXBwb3J0c1J1bGVcIikpIHtcbiAgICAgIHN1cHBvcnRlZE5lc3RlZENTU1J1bGVUeXBlcy5DU1NTdXBwb3J0c1J1bGUgPSB3aW4uQ1NTU3VwcG9ydHNSdWxlO1xuICAgIH1cbiAgfVxuICBjb25zdCB1bm1vZGlmaWVkRnVuY3Rpb25zID0ge307XG4gIE9iamVjdC5lbnRyaWVzKHN1cHBvcnRlZE5lc3RlZENTU1J1bGVUeXBlcykuZm9yRWFjaCgoW3R5cGVLZXksIHR5cGVdKSA9PiB7XG4gICAgdW5tb2RpZmllZEZ1bmN0aW9uc1t0eXBlS2V5XSA9IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgIGluc2VydFJ1bGU6IHR5cGUucHJvdG90eXBlLmluc2VydFJ1bGUsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgICBkZWxldGVSdWxlOiB0eXBlLnByb3RvdHlwZS5kZWxldGVSdWxlXG4gICAgfTtcbiAgICB0eXBlLnByb3RvdHlwZS5pbnNlcnRSdWxlID0gbmV3IFByb3h5KFxuICAgICAgdW5tb2RpZmllZEZ1bmN0aW9uc1t0eXBlS2V5XS5pbnNlcnRSdWxlLFxuICAgICAge1xuICAgICAgICBhcHBseTogY2FsbGJhY2tXcmFwcGVyKFxuICAgICAgICAgICh0YXJnZXQsIHRoaXNBcmcsIGFyZ3VtZW50c0xpc3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IFtydWxlLCBpbmRleF0gPSBhcmd1bWVudHNMaXN0O1xuICAgICAgICAgICAgY29uc3QgeyBpZCwgc3R5bGVJZCB9ID0gZ2V0SWRBbmRTdHlsZUlkKFxuICAgICAgICAgICAgICB0aGlzQXJnLnBhcmVudFN0eWxlU2hlZXQsXG4gICAgICAgICAgICAgIG1pcnJvcjIsXG4gICAgICAgICAgICAgIHN0eWxlc2hlZXRNYW5hZ2VyLnN0eWxlTWlycm9yXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGlkICYmIGlkICE9PSAtMSB8fCBzdHlsZUlkICYmIHN0eWxlSWQgIT09IC0xKSB7XG4gICAgICAgICAgICAgIHN0eWxlU2hlZXRSdWxlQ2Ioe1xuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIHN0eWxlSWQsXG4gICAgICAgICAgICAgICAgYWRkczogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBydWxlLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogW1xuICAgICAgICAgICAgICAgICAgICAgIC4uLmdldE5lc3RlZENTU1J1bGVQb3NpdGlvbnModGhpc0FyZyksXG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXggfHwgMFxuICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHRzIHRvIDBcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50c0xpc3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfVxuICAgICk7XG4gICAgdHlwZS5wcm90b3R5cGUuZGVsZXRlUnVsZSA9IG5ldyBQcm94eShcbiAgICAgIHVubW9kaWZpZWRGdW5jdGlvbnNbdHlwZUtleV0uZGVsZXRlUnVsZSxcbiAgICAgIHtcbiAgICAgICAgYXBwbHk6IGNhbGxiYWNrV3JhcHBlcihcbiAgICAgICAgICAodGFyZ2V0LCB0aGlzQXJnLCBhcmd1bWVudHNMaXN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBbaW5kZXhdID0gYXJndW1lbnRzTGlzdDtcbiAgICAgICAgICAgIGNvbnN0IHsgaWQsIHN0eWxlSWQgfSA9IGdldElkQW5kU3R5bGVJZChcbiAgICAgICAgICAgICAgdGhpc0FyZy5wYXJlbnRTdHlsZVNoZWV0LFxuICAgICAgICAgICAgICBtaXJyb3IyLFxuICAgICAgICAgICAgICBzdHlsZXNoZWV0TWFuYWdlci5zdHlsZU1pcnJvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChpZCAmJiBpZCAhPT0gLTEgfHwgc3R5bGVJZCAmJiBzdHlsZUlkICE9PSAtMSkge1xuICAgICAgICAgICAgICBzdHlsZVNoZWV0UnVsZUNiKHtcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBzdHlsZUlkLFxuICAgICAgICAgICAgICAgIHJlbW92ZXM6IFtcbiAgICAgICAgICAgICAgICAgIHsgaW5kZXg6IFsuLi5nZXROZXN0ZWRDU1NSdWxlUG9zaXRpb25zKHRoaXNBcmcpLCBpbmRleF0gfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50c0xpc3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfVxuICAgICk7XG4gIH0pO1xuICByZXR1cm4gY2FsbGJhY2tXcmFwcGVyKCgpID0+IHtcbiAgICB3aW4uQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUuaW5zZXJ0UnVsZSA9IGluc2VydFJ1bGU7XG4gICAgd2luLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlLmRlbGV0ZVJ1bGUgPSBkZWxldGVSdWxlO1xuICAgIHJlcGxhY2UgJiYgKHdpbi5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5yZXBsYWNlID0gcmVwbGFjZSk7XG4gICAgcmVwbGFjZVN5bmMgJiYgKHdpbi5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZS5yZXBsYWNlU3luYyA9IHJlcGxhY2VTeW5jKTtcbiAgICBPYmplY3QuZW50cmllcyhzdXBwb3J0ZWROZXN0ZWRDU1NSdWxlVHlwZXMpLmZvckVhY2goKFt0eXBlS2V5LCB0eXBlXSkgPT4ge1xuICAgICAgdHlwZS5wcm90b3R5cGUuaW5zZXJ0UnVsZSA9IHVubW9kaWZpZWRGdW5jdGlvbnNbdHlwZUtleV0uaW5zZXJ0UnVsZTtcbiAgICAgIHR5cGUucHJvdG90eXBlLmRlbGV0ZVJ1bGUgPSB1bm1vZGlmaWVkRnVuY3Rpb25zW3R5cGVLZXldLmRlbGV0ZVJ1bGU7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gaW5pdEFkb3B0ZWRTdHlsZVNoZWV0T2JzZXJ2ZXIoe1xuICBtaXJyb3I6IG1pcnJvcjIsXG4gIHN0eWxlc2hlZXRNYW5hZ2VyXG59LCBob3N0KSB7XG4gIGxldCBob3N0SWQgPSBudWxsO1xuICBpZiAoaG9zdC5ub2RlTmFtZSA9PT0gXCIjZG9jdW1lbnRcIikgaG9zdElkID0gbWlycm9yMi5nZXRJZChob3N0KTtcbiAgZWxzZSBob3N0SWQgPSBtaXJyb3IyLmdldElkKGhvc3QuaG9zdCk7XG4gIGNvbnN0IHBhdGNoVGFyZ2V0ID0gaG9zdC5ub2RlTmFtZSA9PT0gXCIjZG9jdW1lbnRcIiA/IGhvc3QuZGVmYXVsdFZpZXc/LkRvY3VtZW50IDogaG9zdC5vd25lckRvY3VtZW50Py5kZWZhdWx0Vmlldz8uU2hhZG93Um9vdDtcbiAgY29uc3Qgb3JpZ2luYWxQcm9wZXJ0eURlc2NyaXB0b3IgPSBwYXRjaFRhcmdldD8ucHJvdG90eXBlID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICBwYXRjaFRhcmdldD8ucHJvdG90eXBlLFxuICAgIFwiYWRvcHRlZFN0eWxlU2hlZXRzXCJcbiAgKSA6IHZvaWQgMDtcbiAgaWYgKGhvc3RJZCA9PT0gbnVsbCB8fCBob3N0SWQgPT09IC0xIHx8ICFwYXRjaFRhcmdldCB8fCAhb3JpZ2luYWxQcm9wZXJ0eURlc2NyaXB0b3IpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICB9O1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaG9zdCwgXCJhZG9wdGVkU3R5bGVTaGVldHNcIiwge1xuICAgIGNvbmZpZ3VyYWJsZTogb3JpZ2luYWxQcm9wZXJ0eURlc2NyaXB0b3IuY29uZmlndXJhYmxlLFxuICAgIGVudW1lcmFibGU6IG9yaWdpbmFsUHJvcGVydHlEZXNjcmlwdG9yLmVudW1lcmFibGUsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsUHJvcGVydHlEZXNjcmlwdG9yLmdldD8uY2FsbCh0aGlzKTtcbiAgICB9LFxuICAgIHNldChzaGVldHMpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsUHJvcGVydHlEZXNjcmlwdG9yLnNldD8uY2FsbCh0aGlzLCBzaGVldHMpO1xuICAgICAgaWYgKGhvc3RJZCAhPT0gbnVsbCAmJiBob3N0SWQgIT09IC0xKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3R5bGVzaGVldE1hbmFnZXIuYWRvcHRTdHlsZVNoZWV0cyhzaGVldHMsIGhvc3RJZCk7XG4gICAgICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNhbGxiYWNrV3JhcHBlcigoKSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGhvc3QsIFwiYWRvcHRlZFN0eWxlU2hlZXRzXCIsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogb3JpZ2luYWxQcm9wZXJ0eURlc2NyaXB0b3IuY29uZmlndXJhYmxlLFxuICAgICAgZW51bWVyYWJsZTogb3JpZ2luYWxQcm9wZXJ0eURlc2NyaXB0b3IuZW51bWVyYWJsZSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICAgIGdldDogb3JpZ2luYWxQcm9wZXJ0eURlc2NyaXB0b3IuZ2V0LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgICAgc2V0OiBvcmlnaW5hbFByb3BlcnR5RGVzY3JpcHRvci5zZXRcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBpbml0U3R5bGVEZWNsYXJhdGlvbk9ic2VydmVyKHtcbiAgc3R5bGVEZWNsYXJhdGlvbkNiLFxuICBtaXJyb3I6IG1pcnJvcjIsXG4gIGlnbm9yZUNTU0F0dHJpYnV0ZXMsXG4gIHN0eWxlc2hlZXRNYW5hZ2VyXG59LCB7IHdpbiB9KSB7XG4gIGNvbnN0IHNldFByb3BlcnR5ID0gd2luLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLnNldFByb3BlcnR5O1xuICB3aW4uQ1NTU3R5bGVEZWNsYXJhdGlvbi5wcm90b3R5cGUuc2V0UHJvcGVydHkgPSBuZXcgUHJveHkoc2V0UHJvcGVydHksIHtcbiAgICBhcHBseTogY2FsbGJhY2tXcmFwcGVyKFxuICAgICAgKHRhcmdldCwgdGhpc0FyZywgYXJndW1lbnRzTGlzdCkgPT4ge1xuICAgICAgICBjb25zdCBbcHJvcGVydHksIHZhbHVlLCBwcmlvcml0eV0gPSBhcmd1bWVudHNMaXN0O1xuICAgICAgICBpZiAoaWdub3JlQ1NTQXR0cmlidXRlcy5oYXMocHJvcGVydHkpKSB7XG4gICAgICAgICAgcmV0dXJuIHNldFByb3BlcnR5LmFwcGx5KHRoaXNBcmcsIFtwcm9wZXJ0eSwgdmFsdWUsIHByaW9yaXR5XSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBpZCwgc3R5bGVJZCB9ID0gZ2V0SWRBbmRTdHlsZUlkKFxuICAgICAgICAgIHRoaXNBcmcucGFyZW50UnVsZT8ucGFyZW50U3R5bGVTaGVldCxcbiAgICAgICAgICBtaXJyb3IyLFxuICAgICAgICAgIHN0eWxlc2hlZXRNYW5hZ2VyLnN0eWxlTWlycm9yXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpZCAmJiBpZCAhPT0gLTEgfHwgc3R5bGVJZCAmJiBzdHlsZUlkICE9PSAtMSkge1xuICAgICAgICAgIHN0eWxlRGVjbGFyYXRpb25DYih7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIHN0eWxlSWQsXG4gICAgICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICBwcmlvcml0eVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICBpbmRleDogZ2V0TmVzdGVkQ1NTUnVsZVBvc2l0aW9ucyh0aGlzQXJnLnBhcmVudFJ1bGUpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHNMaXN0KTtcbiAgICAgIH1cbiAgICApXG4gIH0pO1xuICBjb25zdCByZW1vdmVQcm9wZXJ0eSA9IHdpbi5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5yZW1vdmVQcm9wZXJ0eTtcbiAgd2luLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLnJlbW92ZVByb3BlcnR5ID0gbmV3IFByb3h5KHJlbW92ZVByb3BlcnR5LCB7XG4gICAgYXBwbHk6IGNhbGxiYWNrV3JhcHBlcihcbiAgICAgICh0YXJnZXQsIHRoaXNBcmcsIGFyZ3VtZW50c0xpc3QpID0+IHtcbiAgICAgICAgY29uc3QgW3Byb3BlcnR5XSA9IGFyZ3VtZW50c0xpc3Q7XG4gICAgICAgIGlmIChpZ25vcmVDU1NBdHRyaWJ1dGVzLmhhcyhwcm9wZXJ0eSkpIHtcbiAgICAgICAgICByZXR1cm4gcmVtb3ZlUHJvcGVydHkuYXBwbHkodGhpc0FyZywgW3Byb3BlcnR5XSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBpZCwgc3R5bGVJZCB9ID0gZ2V0SWRBbmRTdHlsZUlkKFxuICAgICAgICAgIHRoaXNBcmcucGFyZW50UnVsZT8ucGFyZW50U3R5bGVTaGVldCxcbiAgICAgICAgICBtaXJyb3IyLFxuICAgICAgICAgIHN0eWxlc2hlZXRNYW5hZ2VyLnN0eWxlTWlycm9yXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpZCAmJiBpZCAhPT0gLTEgfHwgc3R5bGVJZCAmJiBzdHlsZUlkICE9PSAtMSkge1xuICAgICAgICAgIHN0eWxlRGVjbGFyYXRpb25DYih7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIHN0eWxlSWQsXG4gICAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgICAgcHJvcGVydHlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgaW5kZXg6IGdldE5lc3RlZENTU1J1bGVQb3NpdGlvbnModGhpc0FyZy5wYXJlbnRSdWxlKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkodGhpc0FyZywgYXJndW1lbnRzTGlzdCk7XG4gICAgICB9XG4gICAgKVxuICB9KTtcbiAgcmV0dXJuIGNhbGxiYWNrV3JhcHBlcigoKSA9PiB7XG4gICAgd2luLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLnNldFByb3BlcnR5ID0gc2V0UHJvcGVydHk7XG4gICAgd2luLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLnJlbW92ZVByb3BlcnR5ID0gcmVtb3ZlUHJvcGVydHk7XG4gIH0pO1xufVxuZnVuY3Rpb24gaW5pdE1lZGlhSW50ZXJhY3Rpb25PYnNlcnZlcih7XG4gIG1lZGlhSW50ZXJhY3Rpb25DYixcbiAgYmxvY2tDbGFzcyxcbiAgYmxvY2tTZWxlY3RvcixcbiAgdW5ibG9ja1NlbGVjdG9yLFxuICBtaXJyb3I6IG1pcnJvcjIsXG4gIHNhbXBsaW5nLFxuICBkb2Ncbn0pIHtcbiAgY29uc3QgaGFuZGxlciA9IGNhbGxiYWNrV3JhcHBlcihcbiAgICAodHlwZSkgPT4gdGhyb3R0bGUkMShcbiAgICAgIGNhbGxiYWNrV3JhcHBlcigoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoZXZlbnQpO1xuICAgICAgICBpZiAoIXRhcmdldCB8fCBpc0Jsb2NrZWQoXG4gICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgIGJsb2NrQ2xhc3MsXG4gICAgICAgICAgYmxvY2tTZWxlY3RvcixcbiAgICAgICAgICB1bmJsb2NrU2VsZWN0b3IsXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgY3VycmVudFRpbWUsIHZvbHVtZSwgbXV0ZWQsIHBsYXliYWNrUmF0ZSB9ID0gdGFyZ2V0O1xuICAgICAgICBtZWRpYUludGVyYWN0aW9uQ2Ioe1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgaWQ6IG1pcnJvcjIuZ2V0SWQodGFyZ2V0KSxcbiAgICAgICAgICBjdXJyZW50VGltZSxcbiAgICAgICAgICB2b2x1bWUsXG4gICAgICAgICAgbXV0ZWQsXG4gICAgICAgICAgcGxheWJhY2tSYXRlXG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBzYW1wbGluZy5tZWRpYSB8fCA1MDBcbiAgICApXG4gICk7XG4gIGNvbnN0IGhhbmRsZXJzID0gW1xuICAgIG9uKFwicGxheVwiLCBoYW5kbGVyKE1lZGlhSW50ZXJhY3Rpb25zLlBsYXkpLCBkb2MpLFxuICAgIG9uKFwicGF1c2VcIiwgaGFuZGxlcihNZWRpYUludGVyYWN0aW9ucy5QYXVzZSksIGRvYyksXG4gICAgb24oXCJzZWVrZWRcIiwgaGFuZGxlcihNZWRpYUludGVyYWN0aW9ucy5TZWVrZWQpLCBkb2MpLFxuICAgIG9uKFwidm9sdW1lY2hhbmdlXCIsIGhhbmRsZXIoTWVkaWFJbnRlcmFjdGlvbnMuVm9sdW1lQ2hhbmdlKSwgZG9jKSxcbiAgICBvbihcInJhdGVjaGFuZ2VcIiwgaGFuZGxlcihNZWRpYUludGVyYWN0aW9ucy5SYXRlQ2hhbmdlKSwgZG9jKVxuICBdO1xuICByZXR1cm4gY2FsbGJhY2tXcmFwcGVyKCgpID0+IHtcbiAgICBoYW5kbGVycy5mb3JFYWNoKChoKSA9PiBoKCkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGluaXRGb250T2JzZXJ2ZXIoeyBmb250Q2IsIGRvYyB9KSB7XG4gIGNvbnN0IHdpbiA9IGRvYy5kZWZhdWx0VmlldztcbiAgaWYgKCF3aW4pIHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgIH07XG4gIH1cbiAgY29uc3QgaGFuZGxlcnMgPSBbXTtcbiAgY29uc3QgZm9udE1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xuICBjb25zdCBvcmlnaW5hbEZvbnRGYWNlID0gd2luLkZvbnRGYWNlO1xuICB3aW4uRm9udEZhY2UgPSBmdW5jdGlvbiBGb250RmFjZTIoZmFtaWx5LCBzb3VyY2UsIGRlc2NyaXB0b3JzKSB7XG4gICAgY29uc3QgZm9udEZhY2UgPSBuZXcgb3JpZ2luYWxGb250RmFjZShmYW1pbHksIHNvdXJjZSwgZGVzY3JpcHRvcnMpO1xuICAgIGZvbnRNYXAuc2V0KGZvbnRGYWNlLCB7XG4gICAgICBmYW1pbHksXG4gICAgICBidWZmZXI6IHR5cGVvZiBzb3VyY2UgIT09IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdG9ycyxcbiAgICAgIGZvbnRTb3VyY2U6IHR5cGVvZiBzb3VyY2UgPT09IFwic3RyaW5nXCIgPyBzb3VyY2UgOiBKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KHNvdXJjZSkpKVxuICAgIH0pO1xuICAgIHJldHVybiBmb250RmFjZTtcbiAgfTtcbiAgY29uc3QgcmVzdG9yZUhhbmRsZXIgPSBwYXRjaChcbiAgICBkb2MuZm9udHMsXG4gICAgXCJhZGRcIixcbiAgICBmdW5jdGlvbihvcmlnaW5hbCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGZvbnRGYWNlKSB7XG4gICAgICAgIHNldFRpbWVvdXQkMShcbiAgICAgICAgICBjYWxsYmFja1dyYXBwZXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcCA9IGZvbnRNYXAuZ2V0KGZvbnRGYWNlKTtcbiAgICAgICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICAgIGZvbnRDYihwKTtcbiAgICAgICAgICAgICAgZm9udE1hcC5kZWxldGUoZm9udEZhY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIDBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsLmFwcGx5KHRoaXMsIFtmb250RmFjZV0pO1xuICAgICAgfTtcbiAgICB9XG4gICk7XG4gIGhhbmRsZXJzLnB1c2goKCkgPT4ge1xuICAgIHdpbi5Gb250RmFjZSA9IG9yaWdpbmFsRm9udEZhY2U7XG4gIH0pO1xuICBoYW5kbGVycy5wdXNoKHJlc3RvcmVIYW5kbGVyKTtcbiAgcmV0dXJuIGNhbGxiYWNrV3JhcHBlcigoKSA9PiB7XG4gICAgaGFuZGxlcnMuZm9yRWFjaCgoaCkgPT4gaCgpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBpbml0U2VsZWN0aW9uT2JzZXJ2ZXIocGFyYW0pIHtcbiAgY29uc3Qge1xuICAgIGRvYyxcbiAgICBtaXJyb3I6IG1pcnJvcjIsXG4gICAgYmxvY2tDbGFzcyxcbiAgICBibG9ja1NlbGVjdG9yLFxuICAgIHVuYmxvY2tTZWxlY3RvcixcbiAgICBzZWxlY3Rpb25DYlxuICB9ID0gcGFyYW07XG4gIGxldCBjb2xsYXBzZWQgPSB0cnVlO1xuICBjb25zdCB1cGRhdGVTZWxlY3Rpb24gPSBjYWxsYmFja1dyYXBwZXIoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IGRvYy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBjb2xsYXBzZWQgJiYgc2VsZWN0aW9uPy5pc0NvbGxhcHNlZCkgcmV0dXJuO1xuICAgIGNvbGxhcHNlZCA9IHNlbGVjdGlvbi5pc0NvbGxhcHNlZCB8fCBmYWxzZTtcbiAgICBjb25zdCByYW5nZXMgPSBbXTtcbiAgICBjb25zdCBjb3VudCA9IHNlbGVjdGlvbi5yYW5nZUNvdW50IHx8IDA7XG4gICAgZm9yIChsZXQgaTIgPSAwOyBpMiA8IGNvdW50OyBpMisrKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KGkyKTtcbiAgICAgIGNvbnN0IHsgc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0LCBlbmRDb250YWluZXIsIGVuZE9mZnNldCB9ID0gcmFuZ2U7XG4gICAgICBjb25zdCBibG9ja2VkID0gaXNCbG9ja2VkKFxuICAgICAgICBzdGFydENvbnRhaW5lcixcbiAgICAgICAgYmxvY2tDbGFzcyxcbiAgICAgICAgYmxvY2tTZWxlY3RvcixcbiAgICAgICAgdW5ibG9ja1NlbGVjdG9yLFxuICAgICAgICB0cnVlXG4gICAgICApIHx8IGlzQmxvY2tlZChcbiAgICAgICAgZW5kQ29udGFpbmVyLFxuICAgICAgICBibG9ja0NsYXNzLFxuICAgICAgICBibG9ja1NlbGVjdG9yLFxuICAgICAgICB1bmJsb2NrU2VsZWN0b3IsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBpZiAoYmxvY2tlZCkgY29udGludWU7XG4gICAgICByYW5nZXMucHVzaCh7XG4gICAgICAgIHN0YXJ0OiBtaXJyb3IyLmdldElkKHN0YXJ0Q29udGFpbmVyKSxcbiAgICAgICAgc3RhcnRPZmZzZXQsXG4gICAgICAgIGVuZDogbWlycm9yMi5nZXRJZChlbmRDb250YWluZXIpLFxuICAgICAgICBlbmRPZmZzZXRcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzZWxlY3Rpb25DYih7IHJhbmdlcyB9KTtcbiAgfSk7XG4gIHVwZGF0ZVNlbGVjdGlvbigpO1xuICByZXR1cm4gb24oXCJzZWxlY3Rpb25jaGFuZ2VcIiwgdXBkYXRlU2VsZWN0aW9uKTtcbn1cbmZ1bmN0aW9uIGluaXRDdXN0b21FbGVtZW50T2JzZXJ2ZXIoe1xuICBkb2MsXG4gIGN1c3RvbUVsZW1lbnRDYlxufSkge1xuICBjb25zdCB3aW4gPSBkb2MuZGVmYXVsdFZpZXc7XG4gIGlmICghd2luIHx8ICF3aW4uY3VzdG9tRWxlbWVudHMpIHJldHVybiAoKSA9PiB7XG4gIH07XG4gIGNvbnN0IHJlc3RvcmVIYW5kbGVyID0gcGF0Y2goXG4gICAgd2luLmN1c3RvbUVsZW1lbnRzLFxuICAgIFwiZGVmaW5lXCIsXG4gICAgZnVuY3Rpb24ob3JpZ2luYWwpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihuYW1lLCBjb25zdHJ1Y3Rvciwgb3B0aW9ucykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGN1c3RvbUVsZW1lbnRDYih7XG4gICAgICAgICAgICBkZWZpbmU6IHtcbiAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlMikge1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBbbmFtZSwgY29uc3RydWN0b3IsIG9wdGlvbnNdKTtcbiAgICAgIH07XG4gICAgfVxuICApO1xuICByZXR1cm4gcmVzdG9yZUhhbmRsZXI7XG59XG5mdW5jdGlvbiBpbml0T2JzZXJ2ZXJzKG8yLCBfaG9va3MgPSB7fSkge1xuICBjb25zdCBjdXJyZW50V2luZG93ID0gbzIuZG9jLmRlZmF1bHRWaWV3O1xuICBpZiAoIWN1cnJlbnRXaW5kb3cpIHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgIH07XG4gIH1cbiAgbGV0IG11dGF0aW9uT2JzZXJ2ZXI7XG4gIGlmIChvMi5yZWNvcmRET00pIHtcbiAgICBtdXRhdGlvbk9ic2VydmVyID0gaW5pdE11dGF0aW9uT2JzZXJ2ZXIobzIsIG8yLmRvYyk7XG4gIH1cbiAgY29uc3QgbW91c2Vtb3ZlSGFuZGxlciA9IGluaXRNb3ZlT2JzZXJ2ZXIobzIpO1xuICBjb25zdCBtb3VzZUludGVyYWN0aW9uSGFuZGxlciA9IGluaXRNb3VzZUludGVyYWN0aW9uT2JzZXJ2ZXIobzIpO1xuICBjb25zdCBzY3JvbGxIYW5kbGVyID0gaW5pdFNjcm9sbE9ic2VydmVyKG8yKTtcbiAgY29uc3Qgdmlld3BvcnRSZXNpemVIYW5kbGVyID0gaW5pdFZpZXdwb3J0UmVzaXplT2JzZXJ2ZXIobzIsIHtcbiAgICB3aW46IGN1cnJlbnRXaW5kb3dcbiAgfSk7XG4gIGNvbnN0IGlucHV0SGFuZGxlciA9IGluaXRJbnB1dE9ic2VydmVyKG8yKTtcbiAgY29uc3QgbWVkaWFJbnRlcmFjdGlvbkhhbmRsZXIgPSBpbml0TWVkaWFJbnRlcmFjdGlvbk9ic2VydmVyKG8yKTtcbiAgbGV0IHN0eWxlU2hlZXRPYnNlcnZlciA9ICgpID0+IHtcbiAgfTtcbiAgbGV0IGFkb3B0ZWRTdHlsZVNoZWV0T2JzZXJ2ZXIgPSAoKSA9PiB7XG4gIH07XG4gIGxldCBzdHlsZURlY2xhcmF0aW9uT2JzZXJ2ZXIgPSAoKSA9PiB7XG4gIH07XG4gIGxldCBmb250T2JzZXJ2ZXIgPSAoKSA9PiB7XG4gIH07XG4gIGlmIChvMi5yZWNvcmRET00pIHtcbiAgICBzdHlsZVNoZWV0T2JzZXJ2ZXIgPSBpbml0U3R5bGVTaGVldE9ic2VydmVyKG8yLCB7IHdpbjogY3VycmVudFdpbmRvdyB9KTtcbiAgICBhZG9wdGVkU3R5bGVTaGVldE9ic2VydmVyID0gaW5pdEFkb3B0ZWRTdHlsZVNoZWV0T2JzZXJ2ZXIobzIsIG8yLmRvYyk7XG4gICAgc3R5bGVEZWNsYXJhdGlvbk9ic2VydmVyID0gaW5pdFN0eWxlRGVjbGFyYXRpb25PYnNlcnZlcihvMiwge1xuICAgICAgd2luOiBjdXJyZW50V2luZG93XG4gICAgfSk7XG4gICAgaWYgKG8yLmNvbGxlY3RGb250cykge1xuICAgICAgZm9udE9ic2VydmVyID0gaW5pdEZvbnRPYnNlcnZlcihvMik7XG4gICAgfVxuICB9XG4gIGNvbnN0IHNlbGVjdGlvbk9ic2VydmVyID0gaW5pdFNlbGVjdGlvbk9ic2VydmVyKG8yKTtcbiAgY29uc3QgY3VzdG9tRWxlbWVudE9ic2VydmVyID0gaW5pdEN1c3RvbUVsZW1lbnRPYnNlcnZlcihvMik7XG4gIGNvbnN0IHBsdWdpbkhhbmRsZXJzID0gW107XG4gIGZvciAoY29uc3QgcGx1Z2luIG9mIG8yLnBsdWdpbnMpIHtcbiAgICBwbHVnaW5IYW5kbGVycy5wdXNoKFxuICAgICAgcGx1Z2luLm9ic2VydmVyKHBsdWdpbi5jYWxsYmFjaywgY3VycmVudFdpbmRvdywgcGx1Z2luLm9wdGlvbnMpXG4gICAgKTtcbiAgfVxuICByZXR1cm4gY2FsbGJhY2tXcmFwcGVyKCgpID0+IHtcbiAgICBtdXRhdGlvbkJ1ZmZlcnMuZm9yRWFjaCgoYikgPT4gYi5yZXNldCgpKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgbW91c2Vtb3ZlSGFuZGxlcigpO1xuICAgIG1vdXNlSW50ZXJhY3Rpb25IYW5kbGVyKCk7XG4gICAgc2Nyb2xsSGFuZGxlcigpO1xuICAgIHZpZXdwb3J0UmVzaXplSGFuZGxlcigpO1xuICAgIGlucHV0SGFuZGxlcigpO1xuICAgIG1lZGlhSW50ZXJhY3Rpb25IYW5kbGVyKCk7XG4gICAgc3R5bGVTaGVldE9ic2VydmVyKCk7XG4gICAgYWRvcHRlZFN0eWxlU2hlZXRPYnNlcnZlcigpO1xuICAgIHN0eWxlRGVjbGFyYXRpb25PYnNlcnZlcigpO1xuICAgIGZvbnRPYnNlcnZlcigpO1xuICAgIHNlbGVjdGlvbk9ic2VydmVyKCk7XG4gICAgY3VzdG9tRWxlbWVudE9ic2VydmVyKCk7XG4gICAgcGx1Z2luSGFuZGxlcnMuZm9yRWFjaCgoaCkgPT4gaCgpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBoYXNOZXN0ZWRDU1NSdWxlKHByb3ApIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3dbcHJvcF0gIT09IFwidW5kZWZpbmVkXCI7XG59XG5mdW5jdGlvbiBjYW5Nb25rZXlQYXRjaE5lc3RlZENTU1J1bGUocHJvcCkge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICB0eXBlb2Ygd2luZG93W3Byb3BdICE9PSBcInVuZGVmaW5lZFwiICYmIC8vIE5vdGU6IEdlbmVyYWxseSwgdGhpcyBjaGVjayBfc2hvdWxkbid0XyBiZSBuZWNlc3NhcnlcbiAgICAvLyBIb3dldmVyLCBpbiBzb21lIHNjZW5hcmlvcyAoZS5nLiBqc2RvbSkgdGhpcyBjYW4gc29tZXRpbWVzIGZhaWwsIHNvIHdlIGNoZWNrIGZvciBpdCBoZXJlXG4gICAgd2luZG93W3Byb3BdLnByb3RvdHlwZSAmJiBcImluc2VydFJ1bGVcIiBpbiB3aW5kb3dbcHJvcF0ucHJvdG90eXBlICYmIFwiZGVsZXRlUnVsZVwiIGluIHdpbmRvd1twcm9wXS5wcm90b3R5cGVcbiAgKTtcbn1cbmNsYXNzIENyb3NzT3JpZ2luSWZyYW1lTWlycm9yIHtcbiAgY29uc3RydWN0b3IoZ2VuZXJhdGVJZEZuKSB7XG4gICAgdGhpcy5nZW5lcmF0ZUlkRm4gPSBnZW5lcmF0ZUlkRm47XG4gICAgdGhpcy5pZnJhbWVJZFRvUmVtb3RlSWRNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbiAgICB0aGlzLmlmcmFtZVJlbW90ZUlkVG9JZE1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xuICB9XG4gIGdldElkKGlmcmFtZSwgcmVtb3RlSWQsIGlkVG9SZW1vdGVNYXAsIHJlbW90ZVRvSWRNYXApIHtcbiAgICBjb25zdCBpZFRvUmVtb3RlSWRNYXAgPSBpZFRvUmVtb3RlTWFwIHx8IHRoaXMuZ2V0SWRUb1JlbW90ZUlkTWFwKGlmcmFtZSk7XG4gICAgY29uc3QgcmVtb3RlSWRUb0lkTWFwID0gcmVtb3RlVG9JZE1hcCB8fCB0aGlzLmdldFJlbW90ZUlkVG9JZE1hcChpZnJhbWUpO1xuICAgIGxldCBpZCA9IGlkVG9SZW1vdGVJZE1hcC5nZXQocmVtb3RlSWQpO1xuICAgIGlmICghaWQpIHtcbiAgICAgIGlkID0gdGhpcy5nZW5lcmF0ZUlkRm4oKTtcbiAgICAgIGlkVG9SZW1vdGVJZE1hcC5zZXQocmVtb3RlSWQsIGlkKTtcbiAgICAgIHJlbW90ZUlkVG9JZE1hcC5zZXQoaWQsIHJlbW90ZUlkKTtcbiAgICB9XG4gICAgcmV0dXJuIGlkO1xuICB9XG4gIGdldElkcyhpZnJhbWUsIHJlbW90ZUlkKSB7XG4gICAgY29uc3QgaWRUb1JlbW90ZUlkTWFwID0gdGhpcy5nZXRJZFRvUmVtb3RlSWRNYXAoaWZyYW1lKTtcbiAgICBjb25zdCByZW1vdGVJZFRvSWRNYXAgPSB0aGlzLmdldFJlbW90ZUlkVG9JZE1hcChpZnJhbWUpO1xuICAgIHJldHVybiByZW1vdGVJZC5tYXAoXG4gICAgICAoaWQpID0+IHRoaXMuZ2V0SWQoaWZyYW1lLCBpZCwgaWRUb1JlbW90ZUlkTWFwLCByZW1vdGVJZFRvSWRNYXApXG4gICAgKTtcbiAgfVxuICBnZXRSZW1vdGVJZChpZnJhbWUsIGlkLCBtYXApIHtcbiAgICBjb25zdCByZW1vdGVJZFRvSWRNYXAgPSBtYXAgfHwgdGhpcy5nZXRSZW1vdGVJZFRvSWRNYXAoaWZyYW1lKTtcbiAgICBpZiAodHlwZW9mIGlkICE9PSBcIm51bWJlclwiKSByZXR1cm4gaWQ7XG4gICAgY29uc3QgcmVtb3RlSWQgPSByZW1vdGVJZFRvSWRNYXAuZ2V0KGlkKTtcbiAgICBpZiAoIXJlbW90ZUlkKSByZXR1cm4gLTE7XG4gICAgcmV0dXJuIHJlbW90ZUlkO1xuICB9XG4gIGdldFJlbW90ZUlkcyhpZnJhbWUsIGlkcykge1xuICAgIGNvbnN0IHJlbW90ZUlkVG9JZE1hcCA9IHRoaXMuZ2V0UmVtb3RlSWRUb0lkTWFwKGlmcmFtZSk7XG4gICAgcmV0dXJuIGlkcy5tYXAoKGlkKSA9PiB0aGlzLmdldFJlbW90ZUlkKGlmcmFtZSwgaWQsIHJlbW90ZUlkVG9JZE1hcCkpO1xuICB9XG4gIHJlc2V0KGlmcmFtZSkge1xuICAgIGlmICghaWZyYW1lKSB7XG4gICAgICB0aGlzLmlmcmFtZUlkVG9SZW1vdGVJZE1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xuICAgICAgdGhpcy5pZnJhbWVSZW1vdGVJZFRvSWRNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pZnJhbWVJZFRvUmVtb3RlSWRNYXAuZGVsZXRlKGlmcmFtZSk7XG4gICAgdGhpcy5pZnJhbWVSZW1vdGVJZFRvSWRNYXAuZGVsZXRlKGlmcmFtZSk7XG4gIH1cbiAgZ2V0SWRUb1JlbW90ZUlkTWFwKGlmcmFtZSkge1xuICAgIGxldCBpZFRvUmVtb3RlSWRNYXAgPSB0aGlzLmlmcmFtZUlkVG9SZW1vdGVJZE1hcC5nZXQoaWZyYW1lKTtcbiAgICBpZiAoIWlkVG9SZW1vdGVJZE1hcCkge1xuICAgICAgaWRUb1JlbW90ZUlkTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgIHRoaXMuaWZyYW1lSWRUb1JlbW90ZUlkTWFwLnNldChpZnJhbWUsIGlkVG9SZW1vdGVJZE1hcCk7XG4gICAgfVxuICAgIHJldHVybiBpZFRvUmVtb3RlSWRNYXA7XG4gIH1cbiAgZ2V0UmVtb3RlSWRUb0lkTWFwKGlmcmFtZSkge1xuICAgIGxldCByZW1vdGVJZFRvSWRNYXAgPSB0aGlzLmlmcmFtZVJlbW90ZUlkVG9JZE1hcC5nZXQoaWZyYW1lKTtcbiAgICBpZiAoIXJlbW90ZUlkVG9JZE1hcCkge1xuICAgICAgcmVtb3RlSWRUb0lkTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgIHRoaXMuaWZyYW1lUmVtb3RlSWRUb0lkTWFwLnNldChpZnJhbWUsIHJlbW90ZUlkVG9JZE1hcCk7XG4gICAgfVxuICAgIHJldHVybiByZW1vdGVJZFRvSWRNYXA7XG4gIH1cbn1cbmNsYXNzIElmcmFtZU1hbmFnZXJOb29wIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jcm9zc09yaWdpbklmcmFtZU1pcnJvciA9IG5ldyBDcm9zc09yaWdpbklmcmFtZU1pcnJvcihnZW5JZCk7XG4gICAgdGhpcy5jcm9zc09yaWdpbklmcmFtZVJvb3RJZE1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xuICB9XG4gIGFkZElmcmFtZSgpIHtcbiAgfVxuICBhZGRMb2FkTGlzdGVuZXIoKSB7XG4gIH1cbiAgYXR0YWNoSWZyYW1lKCkge1xuICB9XG59XG5jbGFzcyBJZnJhbWVNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHRoaXMuaWZyYW1lcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xuICAgIHRoaXMuY3Jvc3NPcmlnaW5JZnJhbWVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbiAgICB0aGlzLmNyb3NzT3JpZ2luSWZyYW1lTWlycm9yID0gbmV3IENyb3NzT3JpZ2luSWZyYW1lTWlycm9yKGdlbklkKTtcbiAgICB0aGlzLmNyb3NzT3JpZ2luSWZyYW1lUm9vdElkTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG4gICAgdGhpcy5tdXRhdGlvbkNiID0gb3B0aW9ucy5tdXRhdGlvbkNiO1xuICAgIHRoaXMud3JhcHBlZEVtaXQgPSBvcHRpb25zLndyYXBwZWRFbWl0O1xuICAgIHRoaXMuc3R5bGVzaGVldE1hbmFnZXIgPSBvcHRpb25zLnN0eWxlc2hlZXRNYW5hZ2VyO1xuICAgIHRoaXMucmVjb3JkQ3Jvc3NPcmlnaW5JZnJhbWVzID0gb3B0aW9ucy5yZWNvcmRDcm9zc09yaWdpbklmcmFtZXM7XG4gICAgdGhpcy5jcm9zc09yaWdpbklmcmFtZVN0eWxlTWlycm9yID0gbmV3IENyb3NzT3JpZ2luSWZyYW1lTWlycm9yKFxuICAgICAgdGhpcy5zdHlsZXNoZWV0TWFuYWdlci5zdHlsZU1pcnJvci5nZW5lcmF0ZUlkLmJpbmQoXG4gICAgICAgIHRoaXMuc3R5bGVzaGVldE1hbmFnZXIuc3R5bGVNaXJyb3JcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMubWlycm9yID0gb3B0aW9ucy5taXJyb3I7XG4gICAgaWYgKHRoaXMucmVjb3JkQ3Jvc3NPcmlnaW5JZnJhbWVzKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuICBhZGRJZnJhbWUoaWZyYW1lRWwpIHtcbiAgICB0aGlzLmlmcmFtZXMuc2V0KGlmcmFtZUVsLCB0cnVlKTtcbiAgICBpZiAoaWZyYW1lRWwuY29udGVudFdpbmRvdylcbiAgICAgIHRoaXMuY3Jvc3NPcmlnaW5JZnJhbWVNYXAuc2V0KGlmcmFtZUVsLmNvbnRlbnRXaW5kb3csIGlmcmFtZUVsKTtcbiAgfVxuICBhZGRMb2FkTGlzdGVuZXIoY2IpIHtcbiAgICB0aGlzLmxvYWRMaXN0ZW5lciA9IGNiO1xuICB9XG4gIGF0dGFjaElmcmFtZShpZnJhbWVFbCwgY2hpbGRTbikge1xuICAgIHRoaXMubXV0YXRpb25DYih7XG4gICAgICBhZGRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJlbnRJZDogdGhpcy5taXJyb3IuZ2V0SWQoaWZyYW1lRWwpLFxuICAgICAgICAgIG5leHRJZDogbnVsbCxcbiAgICAgICAgICBub2RlOiBjaGlsZFNuXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICByZW1vdmVzOiBbXSxcbiAgICAgIHRleHRzOiBbXSxcbiAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgaXNBdHRhY2hJZnJhbWU6IHRydWVcbiAgICB9KTtcbiAgICBpZiAodGhpcy5yZWNvcmRDcm9zc09yaWdpbklmcmFtZXMpXG4gICAgICBpZnJhbWVFbC5jb250ZW50V2luZG93Py5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcIm1lc3NhZ2VcIixcbiAgICAgICAgdGhpcy5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcylcbiAgICAgICk7XG4gICAgdGhpcy5sb2FkTGlzdGVuZXI/LihpZnJhbWVFbCk7XG4gICAgY29uc3QgaWZyYW1lRG9jID0gZ2V0SUZyYW1lQ29udGVudERvY3VtZW50KGlmcmFtZUVsKTtcbiAgICBpZiAoaWZyYW1lRG9jICYmIGlmcmFtZURvYy5hZG9wdGVkU3R5bGVTaGVldHMgJiYgaWZyYW1lRG9jLmFkb3B0ZWRTdHlsZVNoZWV0cy5sZW5ndGggPiAwKVxuICAgICAgdGhpcy5zdHlsZXNoZWV0TWFuYWdlci5hZG9wdFN0eWxlU2hlZXRzKFxuICAgICAgICBpZnJhbWVEb2MuYWRvcHRlZFN0eWxlU2hlZXRzLFxuICAgICAgICB0aGlzLm1pcnJvci5nZXRJZChpZnJhbWVEb2MpXG4gICAgICApO1xuICB9XG4gIGhhbmRsZU1lc3NhZ2UobWVzc2FnZSkge1xuICAgIGNvbnN0IGNyb3NzT3JpZ2luTWVzc2FnZUV2ZW50ID0gbWVzc2FnZTtcbiAgICBpZiAoY3Jvc3NPcmlnaW5NZXNzYWdlRXZlbnQuZGF0YS50eXBlICE9PSBcInJyd2ViXCIgfHwgLy8gVG8gZmlsdGVyIG91dCB0aGUgcnJ3ZWIgbWVzc2FnZXMgd2hpY2ggYXJlIGZvcndhcmRlZCBieSBzb21lIHNpdGVzLlxuICAgIGNyb3NzT3JpZ2luTWVzc2FnZUV2ZW50Lm9yaWdpbiAhPT0gY3Jvc3NPcmlnaW5NZXNzYWdlRXZlbnQuZGF0YS5vcmlnaW4pXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgaWZyYW1lU291cmNlV2luZG93ID0gbWVzc2FnZS5zb3VyY2U7XG4gICAgaWYgKCFpZnJhbWVTb3VyY2VXaW5kb3cpIHJldHVybjtcbiAgICBjb25zdCBpZnJhbWVFbCA9IHRoaXMuY3Jvc3NPcmlnaW5JZnJhbWVNYXAuZ2V0KG1lc3NhZ2Uuc291cmNlKTtcbiAgICBpZiAoIWlmcmFtZUVsKSByZXR1cm47XG4gICAgY29uc3QgdHJhbnNmb3JtZWRFdmVudCA9IHRoaXMudHJhbnNmb3JtQ3Jvc3NPcmlnaW5FdmVudChcbiAgICAgIGlmcmFtZUVsLFxuICAgICAgY3Jvc3NPcmlnaW5NZXNzYWdlRXZlbnQuZGF0YS5ldmVudFxuICAgICk7XG4gICAgaWYgKHRyYW5zZm9ybWVkRXZlbnQpXG4gICAgICB0aGlzLndyYXBwZWRFbWl0KFxuICAgICAgICB0cmFuc2Zvcm1lZEV2ZW50LFxuICAgICAgICBjcm9zc09yaWdpbk1lc3NhZ2VFdmVudC5kYXRhLmlzQ2hlY2tvdXRcbiAgICAgICk7XG4gIH1cbiAgdHJhbnNmb3JtQ3Jvc3NPcmlnaW5FdmVudChpZnJhbWVFbCwgZTIpIHtcbiAgICBzd2l0Y2ggKGUyLnR5cGUpIHtcbiAgICAgIGNhc2UgRXZlbnRUeXBlLkZ1bGxTbmFwc2hvdDoge1xuICAgICAgICB0aGlzLmNyb3NzT3JpZ2luSWZyYW1lTWlycm9yLnJlc2V0KGlmcmFtZUVsKTtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbklmcmFtZVN0eWxlTWlycm9yLnJlc2V0KGlmcmFtZUVsKTtcbiAgICAgICAgdGhpcy5yZXBsYWNlSWRPbk5vZGUoZTIuZGF0YS5ub2RlLCBpZnJhbWVFbCk7XG4gICAgICAgIGNvbnN0IHJvb3RJZCA9IGUyLmRhdGEubm9kZS5pZDtcbiAgICAgICAgdGhpcy5jcm9zc09yaWdpbklmcmFtZVJvb3RJZE1hcC5zZXQoaWZyYW1lRWwsIHJvb3RJZCk7XG4gICAgICAgIHRoaXMucGF0Y2hSb290SWRPbk5vZGUoZTIuZGF0YS5ub2RlLCByb290SWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRpbWVzdGFtcDogZTIudGltZXN0YW1wLFxuICAgICAgICAgIHR5cGU6IEV2ZW50VHlwZS5JbmNyZW1lbnRhbFNuYXBzaG90LFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHNvdXJjZTogSW5jcmVtZW50YWxTb3VyY2UuTXV0YXRpb24sXG4gICAgICAgICAgICBhZGRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogdGhpcy5taXJyb3IuZ2V0SWQoaWZyYW1lRWwpLFxuICAgICAgICAgICAgICAgIG5leHRJZDogbnVsbCxcbiAgICAgICAgICAgICAgICBub2RlOiBlMi5kYXRhLm5vZGVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHJlbW92ZXM6IFtdLFxuICAgICAgICAgICAgdGV4dHM6IFtdLFxuICAgICAgICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICAgICAgICBpc0F0dGFjaElmcmFtZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgRXZlbnRUeXBlLk1ldGE6XG4gICAgICBjYXNlIEV2ZW50VHlwZS5Mb2FkOlxuICAgICAgY2FzZSBFdmVudFR5cGUuRG9tQ29udGVudExvYWRlZDoge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjYXNlIEV2ZW50VHlwZS5QbHVnaW46IHtcbiAgICAgICAgcmV0dXJuIGUyO1xuICAgICAgfVxuICAgICAgY2FzZSBFdmVudFR5cGUuQ3VzdG9tOiB7XG4gICAgICAgIHRoaXMucmVwbGFjZUlkcyhcbiAgICAgICAgICBlMi5kYXRhLnBheWxvYWQsXG4gICAgICAgICAgaWZyYW1lRWwsXG4gICAgICAgICAgW1wiaWRcIiwgXCJwYXJlbnRJZFwiLCBcInByZXZpb3VzSWRcIiwgXCJuZXh0SWRcIl1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGUyO1xuICAgICAgfVxuICAgICAgY2FzZSBFdmVudFR5cGUuSW5jcmVtZW50YWxTbmFwc2hvdDoge1xuICAgICAgICBzd2l0Y2ggKGUyLmRhdGEuc291cmNlKSB7XG4gICAgICAgICAgY2FzZSBJbmNyZW1lbnRhbFNvdXJjZS5NdXRhdGlvbjoge1xuICAgICAgICAgICAgZTIuZGF0YS5hZGRzLmZvckVhY2goKG4yKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMucmVwbGFjZUlkcyhuMiwgaWZyYW1lRWwsIFtcbiAgICAgICAgICAgICAgICBcInBhcmVudElkXCIsXG4gICAgICAgICAgICAgICAgXCJuZXh0SWRcIixcbiAgICAgICAgICAgICAgICBcInByZXZpb3VzSWRcIlxuICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgdGhpcy5yZXBsYWNlSWRPbk5vZGUobjIubm9kZSwgaWZyYW1lRWwpO1xuICAgICAgICAgICAgICBjb25zdCByb290SWQgPSB0aGlzLmNyb3NzT3JpZ2luSWZyYW1lUm9vdElkTWFwLmdldChpZnJhbWVFbCk7XG4gICAgICAgICAgICAgIHJvb3RJZCAmJiB0aGlzLnBhdGNoUm9vdElkT25Ob2RlKG4yLm5vZGUsIHJvb3RJZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGUyLmRhdGEucmVtb3Zlcy5mb3JFYWNoKChuMikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VJZHMobjIsIGlmcmFtZUVsLCBbXCJwYXJlbnRJZFwiLCBcImlkXCJdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZTIuZGF0YS5hdHRyaWJ1dGVzLmZvckVhY2goKG4yKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMucmVwbGFjZUlkcyhuMiwgaWZyYW1lRWwsIFtcImlkXCJdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZTIuZGF0YS50ZXh0cy5mb3JFYWNoKChuMikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VJZHMobjIsIGlmcmFtZUVsLCBbXCJpZFwiXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBlMjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBJbmNyZW1lbnRhbFNvdXJjZS5EcmFnOlxuICAgICAgICAgIGNhc2UgSW5jcmVtZW50YWxTb3VyY2UuVG91Y2hNb3ZlOlxuICAgICAgICAgIGNhc2UgSW5jcmVtZW50YWxTb3VyY2UuTW91c2VNb3ZlOiB7XG4gICAgICAgICAgICBlMi5kYXRhLnBvc2l0aW9ucy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMucmVwbGFjZUlkcyhwLCBpZnJhbWVFbCwgW1wiaWRcIl0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZTI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgSW5jcmVtZW50YWxTb3VyY2UuVmlld3BvcnRSZXNpemU6IHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBJbmNyZW1lbnRhbFNvdXJjZS5NZWRpYUludGVyYWN0aW9uOlxuICAgICAgICAgIGNhc2UgSW5jcmVtZW50YWxTb3VyY2UuTW91c2VJbnRlcmFjdGlvbjpcbiAgICAgICAgICBjYXNlIEluY3JlbWVudGFsU291cmNlLlNjcm9sbDpcbiAgICAgICAgICBjYXNlIEluY3JlbWVudGFsU291cmNlLkNhbnZhc011dGF0aW9uOlxuICAgICAgICAgIGNhc2UgSW5jcmVtZW50YWxTb3VyY2UuSW5wdXQ6IHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUlkcyhlMi5kYXRhLCBpZnJhbWVFbCwgW1wiaWRcIl0pO1xuICAgICAgICAgICAgcmV0dXJuIGUyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEluY3JlbWVudGFsU291cmNlLlN0eWxlU2hlZXRSdWxlOlxuICAgICAgICAgIGNhc2UgSW5jcmVtZW50YWxTb3VyY2UuU3R5bGVEZWNsYXJhdGlvbjoge1xuICAgICAgICAgICAgdGhpcy5yZXBsYWNlSWRzKGUyLmRhdGEsIGlmcmFtZUVsLCBbXCJpZFwiXSk7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VTdHlsZUlkcyhlMi5kYXRhLCBpZnJhbWVFbCwgW1wic3R5bGVJZFwiXSk7XG4gICAgICAgICAgICByZXR1cm4gZTI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgSW5jcmVtZW50YWxTb3VyY2UuRm9udDoge1xuICAgICAgICAgICAgcmV0dXJuIGUyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEluY3JlbWVudGFsU291cmNlLlNlbGVjdGlvbjoge1xuICAgICAgICAgICAgZTIuZGF0YS5yYW5nZXMuZm9yRWFjaCgocmFuZ2UpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5yZXBsYWNlSWRzKHJhbmdlLCBpZnJhbWVFbCwgW1wic3RhcnRcIiwgXCJlbmRcIl0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZTI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgSW5jcmVtZW50YWxTb3VyY2UuQWRvcHRlZFN0eWxlU2hlZXQ6IHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUlkcyhlMi5kYXRhLCBpZnJhbWVFbCwgW1wiaWRcIl0pO1xuICAgICAgICAgICAgdGhpcy5yZXBsYWNlU3R5bGVJZHMoZTIuZGF0YSwgaWZyYW1lRWwsIFtcInN0eWxlSWRzXCJdKTtcbiAgICAgICAgICAgIGUyLmRhdGEuc3R5bGVzPy5mb3JFYWNoKChzdHlsZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VTdHlsZUlkcyhzdHlsZSwgaWZyYW1lRWwsIFtcInN0eWxlSWRcIl0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZTI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXBsYWNlKGlmcmFtZU1pcnJvciwgb2JqLCBpZnJhbWVFbCwga2V5cykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmpba2V5XSkgJiYgdHlwZW9mIG9ialtrZXldICE9PSBcIm51bWJlclwiKSBjb250aW51ZTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9ialtrZXldKSkge1xuICAgICAgICBvYmpba2V5XSA9IGlmcmFtZU1pcnJvci5nZXRJZHMoXG4gICAgICAgICAgaWZyYW1lRWwsXG4gICAgICAgICAgb2JqW2tleV1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0gaWZyYW1lTWlycm9yLmdldElkKGlmcmFtZUVsLCBvYmpba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cbiAgcmVwbGFjZUlkcyhvYmosIGlmcmFtZUVsLCBrZXlzKSB7XG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZSh0aGlzLmNyb3NzT3JpZ2luSWZyYW1lTWlycm9yLCBvYmosIGlmcmFtZUVsLCBrZXlzKTtcbiAgfVxuICByZXBsYWNlU3R5bGVJZHMob2JqLCBpZnJhbWVFbCwga2V5cykge1xuICAgIHJldHVybiB0aGlzLnJlcGxhY2UodGhpcy5jcm9zc09yaWdpbklmcmFtZVN0eWxlTWlycm9yLCBvYmosIGlmcmFtZUVsLCBrZXlzKTtcbiAgfVxuICByZXBsYWNlSWRPbk5vZGUobm9kZSwgaWZyYW1lRWwpIHtcbiAgICB0aGlzLnJlcGxhY2VJZHMobm9kZSwgaWZyYW1lRWwsIFtcImlkXCIsIFwicm9vdElkXCJdKTtcbiAgICBpZiAoXCJjaGlsZE5vZGVzXCIgaW4gbm9kZSkge1xuICAgICAgbm9kZS5jaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgIHRoaXMucmVwbGFjZUlkT25Ob2RlKGNoaWxkLCBpZnJhbWVFbCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcGF0Y2hSb290SWRPbk5vZGUobm9kZSwgcm9vdElkKSB7XG4gICAgaWYgKG5vZGUudHlwZSAhPT0gTm9kZVR5cGUkMi5Eb2N1bWVudCAmJiAhbm9kZS5yb290SWQpIG5vZGUucm9vdElkID0gcm9vdElkO1xuICAgIGlmIChcImNoaWxkTm9kZXNcIiBpbiBub2RlKSB7XG4gICAgICBub2RlLmNoaWxkTm9kZXMuZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgdGhpcy5wYXRjaFJvb3RJZE9uTm9kZShjaGlsZCwgcm9vdElkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuY2xhc3MgU2hhZG93RG9tTWFuYWdlck5vb3Age1xuICBpbml0KCkge1xuICB9XG4gIGFkZFNoYWRvd1Jvb3QoKSB7XG4gIH1cbiAgb2JzZXJ2ZUF0dGFjaFNoYWRvdygpIHtcbiAgfVxuICByZXNldCgpIHtcbiAgfVxufVxuY2xhc3MgU2hhZG93RG9tTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLnNoYWRvd0RvbXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKTtcbiAgICB0aGlzLnJlc3RvcmVIYW5kbGVycyA9IFtdO1xuICAgIHRoaXMubXV0YXRpb25DYiA9IG9wdGlvbnMubXV0YXRpb25DYjtcbiAgICB0aGlzLnNjcm9sbENiID0gb3B0aW9ucy5zY3JvbGxDYjtcbiAgICB0aGlzLmJ5cGFzc09wdGlvbnMgPSBvcHRpb25zLmJ5cGFzc09wdGlvbnM7XG4gICAgdGhpcy5taXJyb3IgPSBvcHRpb25zLm1pcnJvcjtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuICBpbml0KCkge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgICB0aGlzLnBhdGNoQXR0YWNoU2hhZG93KEVsZW1lbnQsIGRvY3VtZW50KTtcbiAgfVxuICBhZGRTaGFkb3dSb290KHNoYWRvd1Jvb3QsIGRvYykge1xuICAgIGlmICghaXNOYXRpdmVTaGFkb3dEb20oc2hhZG93Um9vdCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5zaGFkb3dEb21zLmhhcyhzaGFkb3dSb290KSkgcmV0dXJuO1xuICAgIHRoaXMuc2hhZG93RG9tcy5hZGQoc2hhZG93Um9vdCk7XG4gICAgdGhpcy5ieXBhc3NPcHRpb25zLmNhbnZhc01hbmFnZXIuYWRkU2hhZG93Um9vdChzaGFkb3dSb290KTtcbiAgICBjb25zdCBvYnNlcnZlciA9IGluaXRNdXRhdGlvbk9ic2VydmVyKFxuICAgICAge1xuICAgICAgICAuLi50aGlzLmJ5cGFzc09wdGlvbnMsXG4gICAgICAgIGRvYyxcbiAgICAgICAgbXV0YXRpb25DYjogdGhpcy5tdXRhdGlvbkNiLFxuICAgICAgICBtaXJyb3I6IHRoaXMubWlycm9yLFxuICAgICAgICBzaGFkb3dEb21NYW5hZ2VyOiB0aGlzXG4gICAgICB9LFxuICAgICAgc2hhZG93Um9vdFxuICAgICk7XG4gICAgdGhpcy5yZXN0b3JlSGFuZGxlcnMucHVzaCgoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KCkpO1xuICAgIHRoaXMucmVzdG9yZUhhbmRsZXJzLnB1c2goXG4gICAgICBpbml0U2Nyb2xsT2JzZXJ2ZXIoe1xuICAgICAgICAuLi50aGlzLmJ5cGFzc09wdGlvbnMsXG4gICAgICAgIHNjcm9sbENiOiB0aGlzLnNjcm9sbENiLFxuICAgICAgICAvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9wcmF2ZWVucHVnbGlhLzA4MzJkYTY4N2VkNWE1ZDdhMDkwNzA0NmM5ZWYxODEzXG4gICAgICAgIC8vIHNjcm9sbCBpcyBub3QgYWxsb3dlZCB0byBwYXNzIHRoZSBib3VuZGFyeSwgc28gd2UgbmVlZCB0byBsaXN0ZW4gdGhlIHNoYWRvdyBkb2N1bWVudFxuICAgICAgICBkb2M6IHNoYWRvd1Jvb3QsXG4gICAgICAgIG1pcnJvcjogdGhpcy5taXJyb3JcbiAgICAgIH0pXG4gICAgKTtcbiAgICBzZXRUaW1lb3V0JDEoKCkgPT4ge1xuICAgICAgaWYgKHNoYWRvd1Jvb3QuYWRvcHRlZFN0eWxlU2hlZXRzICYmIHNoYWRvd1Jvb3QuYWRvcHRlZFN0eWxlU2hlZXRzLmxlbmd0aCA+IDApXG4gICAgICAgIHRoaXMuYnlwYXNzT3B0aW9ucy5zdHlsZXNoZWV0TWFuYWdlci5hZG9wdFN0eWxlU2hlZXRzKFxuICAgICAgICAgIHNoYWRvd1Jvb3QuYWRvcHRlZFN0eWxlU2hlZXRzLFxuICAgICAgICAgIHRoaXMubWlycm9yLmdldElkKHNoYWRvd1Jvb3QuaG9zdClcbiAgICAgICAgKTtcbiAgICAgIHRoaXMucmVzdG9yZUhhbmRsZXJzLnB1c2goXG4gICAgICAgIGluaXRBZG9wdGVkU3R5bGVTaGVldE9ic2VydmVyKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1pcnJvcjogdGhpcy5taXJyb3IsXG4gICAgICAgICAgICBzdHlsZXNoZWV0TWFuYWdlcjogdGhpcy5ieXBhc3NPcHRpb25zLnN0eWxlc2hlZXRNYW5hZ2VyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaGFkb3dSb290XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH1cbiAgLyoqXG4gICAqIE1vbmtleSBwYXRjaCAnYXR0YWNoU2hhZG93JyBvZiBhbiBJRnJhbWVFbGVtZW50IHRvIG9ic2VydmUgbmV3bHkgYWRkZWQgc2hhZG93IGRvbXMuXG4gICAqL1xuICBvYnNlcnZlQXR0YWNoU2hhZG93KGlmcmFtZUVsZW1lbnQpIHtcbiAgICBjb25zdCBpZnJhbWVEb2MgPSBnZXRJRnJhbWVDb250ZW50RG9jdW1lbnQoaWZyYW1lRWxlbWVudCk7XG4gICAgY29uc3QgaWZyYW1lV2luZG93ID0gZ2V0SUZyYW1lQ29udGVudFdpbmRvdyhpZnJhbWVFbGVtZW50KTtcbiAgICBpZiAoIWlmcmFtZURvYyB8fCAhaWZyYW1lV2luZG93KSByZXR1cm47XG4gICAgdGhpcy5wYXRjaEF0dGFjaFNoYWRvdyhcbiAgICAgIGlmcmFtZVdpbmRvdy5FbGVtZW50LFxuICAgICAgaWZyYW1lRG9jXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogUGF0Y2ggJ2F0dGFjaFNoYWRvdycgdG8gb2JzZXJ2ZSBuZXdseSBhZGRlZCBzaGFkb3cgZG9tcy5cbiAgICovXG4gIHBhdGNoQXR0YWNoU2hhZG93KGVsZW1lbnQsIGRvYykge1xuICAgIGNvbnN0IG1hbmFnZXIgPSB0aGlzO1xuICAgIHRoaXMucmVzdG9yZUhhbmRsZXJzLnB1c2goXG4gICAgICBwYXRjaChcbiAgICAgICAgZWxlbWVudC5wcm90b3R5cGUsXG4gICAgICAgIFwiYXR0YWNoU2hhZG93XCIsXG4gICAgICAgIGZ1bmN0aW9uKG9yaWdpbmFsKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9wdGlvbikge1xuICAgICAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IG9yaWdpbmFsLmNhbGwodGhpcywgb3B0aW9uKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QgJiYgaW5Eb20odGhpcykpXG4gICAgICAgICAgICAgIG1hbmFnZXIuYWRkU2hhZG93Um9vdCh0aGlzLnNoYWRvd1Jvb3QsIGRvYyk7XG4gICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdDtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgfVxuICByZXNldCgpIHtcbiAgICB0aGlzLnJlc3RvcmVIYW5kbGVycy5mb3JFYWNoKChoYW5kbGVyKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBoYW5kbGVyKCk7XG4gICAgICB9IGNhdGNoIChlMikge1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucmVzdG9yZUhhbmRsZXJzID0gW107XG4gICAgdGhpcy5zaGFkb3dEb21zID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCk7XG4gICAgdGhpcy5ieXBhc3NPcHRpb25zLmNhbnZhc01hbmFnZXIucmVzZXRTaGFkb3dSb290cygpO1xuICB9XG59XG52YXIgY2hhcnMgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIjtcbnZhciBsb29rdXAgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gXCJ1bmRlZmluZWRcIiA/IFtdIDogbmV3IFVpbnQ4QXJyYXkoMjU2KTtcbmZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNoYXJzLmxlbmd0aDsgaSQxKyspIHtcbiAgbG9va3VwW2NoYXJzLmNoYXJDb2RlQXQoaSQxKV0gPSBpJDE7XG59XG5jbGFzcyBDYW52YXNNYW5hZ2VyTm9vcCB7XG4gIHJlc2V0KCkge1xuICB9XG4gIGZyZWV6ZSgpIHtcbiAgfVxuICB1bmZyZWV6ZSgpIHtcbiAgfVxuICBsb2NrKCkge1xuICB9XG4gIHVubG9jaygpIHtcbiAgfVxuICBzbmFwc2hvdCgpIHtcbiAgfVxuICBhZGRXaW5kb3coKSB7XG4gIH1cbiAgYWRkU2hhZG93Um9vdCgpIHtcbiAgfVxuICByZXNldFNoYWRvd1Jvb3RzKCkge1xuICB9XG59XG5jbGFzcyBTdHlsZXNoZWV0TWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLnRyYWNrZWRMaW5rRWxlbWVudHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKTtcbiAgICB0aGlzLnN0eWxlTWlycm9yID0gbmV3IFN0eWxlU2hlZXRNaXJyb3IoKTtcbiAgICB0aGlzLm11dGF0aW9uQ2IgPSBvcHRpb25zLm11dGF0aW9uQ2I7XG4gICAgdGhpcy5hZG9wdGVkU3R5bGVTaGVldENiID0gb3B0aW9ucy5hZG9wdGVkU3R5bGVTaGVldENiO1xuICB9XG4gIGF0dGFjaExpbmtFbGVtZW50KGxpbmtFbCwgY2hpbGRTbikge1xuICAgIGlmIChcIl9jc3NUZXh0XCIgaW4gY2hpbGRTbi5hdHRyaWJ1dGVzKVxuICAgICAgdGhpcy5tdXRhdGlvbkNiKHtcbiAgICAgICAgYWRkczogW10sXG4gICAgICAgIHJlbW92ZXM6IFtdLFxuICAgICAgICB0ZXh0czogW10sXG4gICAgICAgIGF0dHJpYnV0ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogY2hpbGRTbi5pZCxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGNoaWxkU24uYXR0cmlidXRlc1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG4gICAgdGhpcy50cmFja0xpbmtFbGVtZW50KGxpbmtFbCk7XG4gIH1cbiAgdHJhY2tMaW5rRWxlbWVudChsaW5rRWwpIHtcbiAgICBpZiAodGhpcy50cmFja2VkTGlua0VsZW1lbnRzLmhhcyhsaW5rRWwpKSByZXR1cm47XG4gICAgdGhpcy50cmFja2VkTGlua0VsZW1lbnRzLmFkZChsaW5rRWwpO1xuICAgIHRoaXMudHJhY2tTdHlsZXNoZWV0SW5MaW5rRWxlbWVudChsaW5rRWwpO1xuICB9XG4gIGFkb3B0U3R5bGVTaGVldHMoc2hlZXRzLCBob3N0SWQpIHtcbiAgICBpZiAoc2hlZXRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGFkb3B0ZWRTdHlsZVNoZWV0RGF0YSA9IHtcbiAgICAgIGlkOiBob3N0SWQsXG4gICAgICBzdHlsZUlkczogW11cbiAgICB9O1xuICAgIGNvbnN0IHN0eWxlcyA9IFtdO1xuICAgIGZvciAoY29uc3Qgc2hlZXQgb2Ygc2hlZXRzKSB7XG4gICAgICBsZXQgc3R5bGVJZDtcbiAgICAgIGlmICghdGhpcy5zdHlsZU1pcnJvci5oYXMoc2hlZXQpKSB7XG4gICAgICAgIHN0eWxlSWQgPSB0aGlzLnN0eWxlTWlycm9yLmFkZChzaGVldCk7XG4gICAgICAgIHN0eWxlcy5wdXNoKHtcbiAgICAgICAgICBzdHlsZUlkLFxuICAgICAgICAgIHJ1bGVzOiBBcnJheS5mcm9tKHNoZWV0LnJ1bGVzIHx8IENTU1J1bGUsIChyMiwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICBydWxlOiBzdHJpbmdpZnlSdWxlKHIyKSxcbiAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgfSkpXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHN0eWxlSWQgPSB0aGlzLnN0eWxlTWlycm9yLmdldElkKHNoZWV0KTtcbiAgICAgIGFkb3B0ZWRTdHlsZVNoZWV0RGF0YS5zdHlsZUlkcy5wdXNoKHN0eWxlSWQpO1xuICAgIH1cbiAgICBpZiAoc3R5bGVzLmxlbmd0aCA+IDApIGFkb3B0ZWRTdHlsZVNoZWV0RGF0YS5zdHlsZXMgPSBzdHlsZXM7XG4gICAgdGhpcy5hZG9wdGVkU3R5bGVTaGVldENiKGFkb3B0ZWRTdHlsZVNoZWV0RGF0YSk7XG4gIH1cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5zdHlsZU1pcnJvci5yZXNldCgpO1xuICAgIHRoaXMudHJhY2tlZExpbmtFbGVtZW50cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha1NldCgpO1xuICB9XG4gIC8vIFRPRE86IHRha2Ugc25hcHNob3Qgb24gc3R5bGVzaGVldCByZWxvYWQgYnkgYXBwbHlpbmcgZXZlbnQgbGlzdGVuZXJcbiAgdHJhY2tTdHlsZXNoZWV0SW5MaW5rRWxlbWVudChfbGlua0VsKSB7XG4gIH1cbn1cbmNsYXNzIFByb2Nlc3NlZE5vZGVNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5ub2RlTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG4gICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgfVxuICBpbk90aGVyQnVmZmVyKG5vZGUsIHRoaXNCdWZmZXIpIHtcbiAgICBjb25zdCBidWZmZXJzID0gdGhpcy5ub2RlTWFwLmdldChub2RlKTtcbiAgICByZXR1cm4gYnVmZmVycyAmJiBBcnJheS5mcm9tKGJ1ZmZlcnMpLnNvbWUoKGJ1ZmZlcikgPT4gYnVmZmVyICE9PSB0aGlzQnVmZmVyKTtcbiAgfVxuICBhZGQobm9kZSwgYnVmZmVyKSB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZSkge1xuICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgICAgb25SZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLm5vZGVNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLm5vZGVNYXAuc2V0KG5vZGUsICh0aGlzLm5vZGVNYXAuZ2V0KG5vZGUpIHx8IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpLmFkZChidWZmZXIpKTtcbiAgfVxuICBkZXN0cm95KCkge1xuICB9XG59XG5sZXQgd3JhcHBlZEVtaXQ7XG5sZXQgX3Rha2VGdWxsU25hcHNob3Q7XG50cnkge1xuICBpZiAoQXJyYXkuZnJvbShbMV0sICh4KSA9PiB4ICogMilbMF0gIT09IDIpIHtcbiAgICBjb25zdCBjbGVhbkZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNsZWFuRnJhbWUpO1xuICAgIEFycmF5LmZyb20gPSBjbGVhbkZyYW1lLmNvbnRlbnRXaW5kb3c/LkFycmF5LmZyb20gfHwgQXJyYXkuZnJvbTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGNsZWFuRnJhbWUpO1xuICB9XG59IGNhdGNoIChlcnIpIHtcbiAgY29uc29sZS5kZWJ1ZyhcIlVuYWJsZSB0byBvdmVycmlkZSBBcnJheS5mcm9tXCIsIGVycik7XG59XG5jb25zdCBtaXJyb3IgPSBjcmVhdGVNaXJyb3IkMigpO1xuZnVuY3Rpb24gcmVjb3JkKG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgZW1pdCxcbiAgICBjaGVja291dEV2ZXJ5Tm1zLFxuICAgIGNoZWNrb3V0RXZlcnlOdGgsXG4gICAgYmxvY2tDbGFzcyA9IFwicnItYmxvY2tcIixcbiAgICBibG9ja1NlbGVjdG9yID0gbnVsbCxcbiAgICB1bmJsb2NrU2VsZWN0b3IgPSBudWxsLFxuICAgIGlnbm9yZUNsYXNzID0gXCJyci1pZ25vcmVcIixcbiAgICBpZ25vcmVTZWxlY3RvciA9IG51bGwsXG4gICAgbWFza0FsbFRleHQgPSBmYWxzZSxcbiAgICBtYXNrVGV4dENsYXNzID0gXCJyci1tYXNrXCIsXG4gICAgdW5tYXNrVGV4dENsYXNzID0gbnVsbCxcbiAgICBtYXNrVGV4dFNlbGVjdG9yID0gbnVsbCxcbiAgICB1bm1hc2tUZXh0U2VsZWN0b3IgPSBudWxsLFxuICAgIGlubGluZVN0eWxlc2hlZXQgPSB0cnVlLFxuICAgIG1hc2tBbGxJbnB1dHMsXG4gICAgbWFza0lucHV0T3B0aW9uczogX21hc2tJbnB1dE9wdGlvbnMsXG4gICAgc2xpbURPTU9wdGlvbnM6IF9zbGltRE9NT3B0aW9ucyxcbiAgICBtYXNrQXR0cmlidXRlRm4sXG4gICAgbWFza0lucHV0Rm4sXG4gICAgbWFza1RleHRGbixcbiAgICBtYXhDYW52YXNTaXplID0gbnVsbCxcbiAgICBwYWNrRm4sXG4gICAgc2FtcGxpbmcgPSB7fSxcbiAgICBkYXRhVVJMT3B0aW9ucyA9IHt9LFxuICAgIG1vdXNlbW92ZVdhaXQsXG4gICAgcmVjb3JkRE9NID0gdHJ1ZSxcbiAgICByZWNvcmRDYW52YXMgPSBmYWxzZSxcbiAgICByZWNvcmRDcm9zc09yaWdpbklmcmFtZXMgPSBmYWxzZSxcbiAgICByZWNvcmRBZnRlciA9IG9wdGlvbnMucmVjb3JkQWZ0ZXIgPT09IFwiRE9NQ29udGVudExvYWRlZFwiID8gb3B0aW9ucy5yZWNvcmRBZnRlciA6IFwibG9hZFwiLFxuICAgIHVzZXJUcmlnZ2VyZWRPbklucHV0ID0gZmFsc2UsXG4gICAgY29sbGVjdEZvbnRzID0gZmFsc2UsXG4gICAgaW5saW5lSW1hZ2VzID0gZmFsc2UsXG4gICAgcGx1Z2lucyxcbiAgICBrZWVwSWZyYW1lU3JjRm4gPSAoKSA9PiBmYWxzZSxcbiAgICBpZ25vcmVDU1NBdHRyaWJ1dGVzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoW10pLFxuICAgIGVycm9ySGFuZGxlcjogZXJyb3JIYW5kbGVyMixcbiAgICBvbk11dGF0aW9uLFxuICAgIGdldENhbnZhc01hbmFnZXJcbiAgfSA9IG9wdGlvbnM7XG4gIHJlZ2lzdGVyRXJyb3JIYW5kbGVyKGVycm9ySGFuZGxlcjIpO1xuICBjb25zdCBpbkVtaXR0aW5nRnJhbWUgPSByZWNvcmRDcm9zc09yaWdpbklmcmFtZXMgPyB3aW5kb3cucGFyZW50ID09PSB3aW5kb3cgOiB0cnVlO1xuICBsZXQgcGFzc0VtaXRzVG9QYXJlbnQgPSBmYWxzZTtcbiAgaWYgKCFpbkVtaXR0aW5nRnJhbWUpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQpIHtcbiAgICAgICAgcGFzc0VtaXRzVG9QYXJlbnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlMikge1xuICAgICAgcGFzc0VtaXRzVG9QYXJlbnQgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoaW5FbWl0dGluZ0ZyYW1lICYmICFlbWl0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZW1pdCBmdW5jdGlvbiBpcyByZXF1aXJlZFwiKTtcbiAgfVxuICBpZiAoIWluRW1pdHRpbmdGcmFtZSAmJiAhcGFzc0VtaXRzVG9QYXJlbnQpIHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgIH07XG4gIH1cbiAgaWYgKG1vdXNlbW92ZVdhaXQgIT09IHZvaWQgMCAmJiBzYW1wbGluZy5tb3VzZW1vdmUgPT09IHZvaWQgMCkge1xuICAgIHNhbXBsaW5nLm1vdXNlbW92ZSA9IG1vdXNlbW92ZVdhaXQ7XG4gIH1cbiAgbWlycm9yLnJlc2V0KCk7XG4gIGNvbnN0IG1hc2tJbnB1dE9wdGlvbnMgPSBtYXNrQWxsSW5wdXRzID09PSB0cnVlID8ge1xuICAgIGNvbG9yOiB0cnVlLFxuICAgIGRhdGU6IHRydWUsXG4gICAgXCJkYXRldGltZS1sb2NhbFwiOiB0cnVlLFxuICAgIGVtYWlsOiB0cnVlLFxuICAgIG1vbnRoOiB0cnVlLFxuICAgIG51bWJlcjogdHJ1ZSxcbiAgICByYW5nZTogdHJ1ZSxcbiAgICBzZWFyY2g6IHRydWUsXG4gICAgdGVsOiB0cnVlLFxuICAgIHRleHQ6IHRydWUsXG4gICAgdGltZTogdHJ1ZSxcbiAgICB1cmw6IHRydWUsXG4gICAgd2VlazogdHJ1ZSxcbiAgICB0ZXh0YXJlYTogdHJ1ZSxcbiAgICBzZWxlY3Q6IHRydWUsXG4gICAgcmFkaW86IHRydWUsXG4gICAgY2hlY2tib3g6IHRydWVcbiAgfSA6IF9tYXNrSW5wdXRPcHRpb25zICE9PSB2b2lkIDAgPyBfbWFza0lucHV0T3B0aW9ucyA6IHt9O1xuICBjb25zdCBzbGltRE9NT3B0aW9ucyA9IF9zbGltRE9NT3B0aW9ucyA9PT0gdHJ1ZSB8fCBfc2xpbURPTU9wdGlvbnMgPT09IFwiYWxsXCIgPyB7XG4gICAgc2NyaXB0OiB0cnVlLFxuICAgIGNvbW1lbnQ6IHRydWUsXG4gICAgaGVhZEZhdmljb246IHRydWUsXG4gICAgaGVhZFdoaXRlc3BhY2U6IHRydWUsXG4gICAgaGVhZE1ldGFTb2NpYWw6IHRydWUsXG4gICAgaGVhZE1ldGFSb2JvdHM6IHRydWUsXG4gICAgaGVhZE1ldGFIdHRwRXF1aXY6IHRydWUsXG4gICAgaGVhZE1ldGFWZXJpZmljYXRpb246IHRydWUsXG4gICAgLy8gdGhlIGZvbGxvd2luZyBhcmUgb2ZmIGZvciBzbGltRE9NT3B0aW9ucyA9PT0gdHJ1ZSxcbiAgICAvLyBhcyB0aGV5IGRlc3Ryb3kgc29tZSAoaGlkZGVuKSBpbmZvOlxuICAgIGhlYWRNZXRhQXV0aG9yc2hpcDogX3NsaW1ET01PcHRpb25zID09PSBcImFsbFwiLFxuICAgIGhlYWRNZXRhRGVzY0tleXdvcmRzOiBfc2xpbURPTU9wdGlvbnMgPT09IFwiYWxsXCJcbiAgfSA6IF9zbGltRE9NT3B0aW9ucyA/IF9zbGltRE9NT3B0aW9ucyA6IHt9O1xuICBwb2x5ZmlsbCQxKCk7XG4gIGxldCBsYXN0RnVsbFNuYXBzaG90RXZlbnQ7XG4gIGxldCBpbmNyZW1lbnRhbFNuYXBzaG90Q291bnQgPSAwO1xuICBjb25zdCBldmVudFByb2Nlc3NvciA9IChlMikgPT4ge1xuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMgfHwgW10pIHtcbiAgICAgIGlmIChwbHVnaW4uZXZlbnRQcm9jZXNzb3IpIHtcbiAgICAgICAgZTIgPSBwbHVnaW4uZXZlbnRQcm9jZXNzb3IoZTIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFja0ZuICYmIC8vIERpc2FibGUgcGFja2luZyBldmVudHMgd2hpY2ggd2lsbCBiZSBlbWl0dGVkIHRvIHBhcmVudCBmcmFtZXMuXG4gICAgIXBhc3NFbWl0c1RvUGFyZW50KSB7XG4gICAgICBlMiA9IHBhY2tGbihlMik7XG4gICAgfVxuICAgIHJldHVybiBlMjtcbiAgfTtcbiAgd3JhcHBlZEVtaXQgPSAocjIsIGlzQ2hlY2tvdXQpID0+IHtcbiAgICBjb25zdCBlMiA9IHIyO1xuICAgIGUyLnRpbWVzdGFtcCA9IG5vd1RpbWVzdGFtcCgpO1xuICAgIGlmIChtdXRhdGlvbkJ1ZmZlcnNbMF0/LmlzRnJvemVuKCkgJiYgZTIudHlwZSAhPT0gRXZlbnRUeXBlLkZ1bGxTbmFwc2hvdCAmJiAhKGUyLnR5cGUgPT09IEV2ZW50VHlwZS5JbmNyZW1lbnRhbFNuYXBzaG90ICYmIGUyLmRhdGEuc291cmNlID09PSBJbmNyZW1lbnRhbFNvdXJjZS5NdXRhdGlvbikpIHtcbiAgICAgIG11dGF0aW9uQnVmZmVycy5mb3JFYWNoKChidWYpID0+IGJ1Zi51bmZyZWV6ZSgpKTtcbiAgICB9XG4gICAgaWYgKGluRW1pdHRpbmdGcmFtZSkge1xuICAgICAgZW1pdD8uKGV2ZW50UHJvY2Vzc29yKGUyKSwgaXNDaGVja291dCk7XG4gICAgfSBlbHNlIGlmIChwYXNzRW1pdHNUb1BhcmVudCkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgdHlwZTogXCJycndlYlwiLFxuICAgICAgICBldmVudDogZXZlbnRQcm9jZXNzb3IoZTIpLFxuICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXG4gICAgICAgIGlzQ2hlY2tvdXRcbiAgICAgIH07XG4gICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKG1lc3NhZ2UsIFwiKlwiKTtcbiAgICB9XG4gICAgaWYgKGUyLnR5cGUgPT09IEV2ZW50VHlwZS5GdWxsU25hcHNob3QpIHtcbiAgICAgIGxhc3RGdWxsU25hcHNob3RFdmVudCA9IGUyO1xuICAgICAgaW5jcmVtZW50YWxTbmFwc2hvdENvdW50ID0gMDtcbiAgICB9IGVsc2UgaWYgKGUyLnR5cGUgPT09IEV2ZW50VHlwZS5JbmNyZW1lbnRhbFNuYXBzaG90KSB7XG4gICAgICBpZiAoZTIuZGF0YS5zb3VyY2UgPT09IEluY3JlbWVudGFsU291cmNlLk11dGF0aW9uICYmIGUyLmRhdGEuaXNBdHRhY2hJZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaW5jcmVtZW50YWxTbmFwc2hvdENvdW50Kys7XG4gICAgICBjb25zdCBleGNlZWRDb3VudCA9IGNoZWNrb3V0RXZlcnlOdGggJiYgaW5jcmVtZW50YWxTbmFwc2hvdENvdW50ID49IGNoZWNrb3V0RXZlcnlOdGg7XG4gICAgICBjb25zdCBleGNlZWRUaW1lID0gY2hlY2tvdXRFdmVyeU5tcyAmJiBsYXN0RnVsbFNuYXBzaG90RXZlbnQgJiYgZTIudGltZXN0YW1wIC0gbGFzdEZ1bGxTbmFwc2hvdEV2ZW50LnRpbWVzdGFtcCA+IGNoZWNrb3V0RXZlcnlObXM7XG4gICAgICBpZiAoZXhjZWVkQ291bnQgfHwgZXhjZWVkVGltZSkge1xuICAgICAgICB0YWtlRnVsbFNuYXBzaG90Mih0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IHdyYXBwZWRNdXRhdGlvbkVtaXQgPSAobSkgPT4ge1xuICAgIHdyYXBwZWRFbWl0KHtcbiAgICAgIHR5cGU6IEV2ZW50VHlwZS5JbmNyZW1lbnRhbFNuYXBzaG90LFxuICAgICAgZGF0YToge1xuICAgICAgICBzb3VyY2U6IEluY3JlbWVudGFsU291cmNlLk11dGF0aW9uLFxuICAgICAgICAuLi5tXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IHdyYXBwZWRTY3JvbGxFbWl0ID0gKHApID0+IHdyYXBwZWRFbWl0KHtcbiAgICB0eXBlOiBFdmVudFR5cGUuSW5jcmVtZW50YWxTbmFwc2hvdCxcbiAgICBkYXRhOiB7XG4gICAgICBzb3VyY2U6IEluY3JlbWVudGFsU291cmNlLlNjcm9sbCxcbiAgICAgIC4uLnBcbiAgICB9XG4gIH0pO1xuICBjb25zdCB3cmFwcGVkQ2FudmFzTXV0YXRpb25FbWl0ID0gKHApID0+IHdyYXBwZWRFbWl0KHtcbiAgICB0eXBlOiBFdmVudFR5cGUuSW5jcmVtZW50YWxTbmFwc2hvdCxcbiAgICBkYXRhOiB7XG4gICAgICBzb3VyY2U6IEluY3JlbWVudGFsU291cmNlLkNhbnZhc011dGF0aW9uLFxuICAgICAgLi4ucFxuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHdyYXBwZWRBZG9wdGVkU3R5bGVTaGVldEVtaXQgPSAoYTIpID0+IHdyYXBwZWRFbWl0KHtcbiAgICB0eXBlOiBFdmVudFR5cGUuSW5jcmVtZW50YWxTbmFwc2hvdCxcbiAgICBkYXRhOiB7XG4gICAgICBzb3VyY2U6IEluY3JlbWVudGFsU291cmNlLkFkb3B0ZWRTdHlsZVNoZWV0LFxuICAgICAgLi4uYTJcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzdHlsZXNoZWV0TWFuYWdlciA9IG5ldyBTdHlsZXNoZWV0TWFuYWdlcih7XG4gICAgbXV0YXRpb25DYjogd3JhcHBlZE11dGF0aW9uRW1pdCxcbiAgICBhZG9wdGVkU3R5bGVTaGVldENiOiB3cmFwcGVkQWRvcHRlZFN0eWxlU2hlZXRFbWl0XG4gIH0pO1xuICBjb25zdCBpZnJhbWVNYW5hZ2VyID0gdHlwZW9mIF9fUlJXRUJfRVhDTFVERV9JRlJBTUVfXyA9PT0gXCJib29sZWFuXCIgJiYgX19SUldFQl9FWENMVURFX0lGUkFNRV9fID8gbmV3IElmcmFtZU1hbmFnZXJOb29wKCkgOiBuZXcgSWZyYW1lTWFuYWdlcih7XG4gICAgbWlycm9yLFxuICAgIG11dGF0aW9uQ2I6IHdyYXBwZWRNdXRhdGlvbkVtaXQsXG4gICAgc3R5bGVzaGVldE1hbmFnZXIsXG4gICAgcmVjb3JkQ3Jvc3NPcmlnaW5JZnJhbWVzLFxuICAgIHdyYXBwZWRFbWl0XG4gIH0pO1xuICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBwbHVnaW5zIHx8IFtdKSB7XG4gICAgaWYgKHBsdWdpbi5nZXRNaXJyb3IpXG4gICAgICBwbHVnaW4uZ2V0TWlycm9yKHtcbiAgICAgICAgbm9kZU1pcnJvcjogbWlycm9yLFxuICAgICAgICBjcm9zc09yaWdpbklmcmFtZU1pcnJvcjogaWZyYW1lTWFuYWdlci5jcm9zc09yaWdpbklmcmFtZU1pcnJvcixcbiAgICAgICAgY3Jvc3NPcmlnaW5JZnJhbWVTdHlsZU1pcnJvcjogaWZyYW1lTWFuYWdlci5jcm9zc09yaWdpbklmcmFtZVN0eWxlTWlycm9yXG4gICAgICB9KTtcbiAgfVxuICBjb25zdCBwcm9jZXNzZWROb2RlTWFuYWdlciA9IG5ldyBQcm9jZXNzZWROb2RlTWFuYWdlcigpO1xuICBjb25zdCBjYW52YXNNYW5hZ2VyID0gX2dldENhbnZhc01hbmFnZXIoXG4gICAgZ2V0Q2FudmFzTWFuYWdlcixcbiAgICB7XG4gICAgICBtaXJyb3IsXG4gICAgICB3aW46IHdpbmRvdyxcbiAgICAgIG11dGF0aW9uQ2I6IChwKSA9PiB3cmFwcGVkRW1pdCh7XG4gICAgICAgIHR5cGU6IEV2ZW50VHlwZS5JbmNyZW1lbnRhbFNuYXBzaG90LFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgc291cmNlOiBJbmNyZW1lbnRhbFNvdXJjZS5DYW52YXNNdXRhdGlvbixcbiAgICAgICAgICAuLi5wXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgcmVjb3JkQ2FudmFzLFxuICAgICAgYmxvY2tDbGFzcyxcbiAgICAgIGJsb2NrU2VsZWN0b3IsXG4gICAgICB1bmJsb2NrU2VsZWN0b3IsXG4gICAgICBtYXhDYW52YXNTaXplLFxuICAgICAgc2FtcGxpbmc6IHNhbXBsaW5nW1wiY2FudmFzXCJdLFxuICAgICAgZGF0YVVSTE9wdGlvbnMsXG4gICAgICBlcnJvckhhbmRsZXI6IGVycm9ySGFuZGxlcjJcbiAgICB9XG4gICk7XG4gIGNvbnN0IHNoYWRvd0RvbU1hbmFnZXIgPSB0eXBlb2YgX19SUldFQl9FWENMVURFX1NIQURPV19ET01fXyA9PT0gXCJib29sZWFuXCIgJiYgX19SUldFQl9FWENMVURFX1NIQURPV19ET01fXyA/IG5ldyBTaGFkb3dEb21NYW5hZ2VyTm9vcCgpIDogbmV3IFNoYWRvd0RvbU1hbmFnZXIoe1xuICAgIG11dGF0aW9uQ2I6IHdyYXBwZWRNdXRhdGlvbkVtaXQsXG4gICAgc2Nyb2xsQ2I6IHdyYXBwZWRTY3JvbGxFbWl0LFxuICAgIGJ5cGFzc09wdGlvbnM6IHtcbiAgICAgIG9uTXV0YXRpb24sXG4gICAgICBibG9ja0NsYXNzLFxuICAgICAgYmxvY2tTZWxlY3RvcixcbiAgICAgIHVuYmxvY2tTZWxlY3RvcixcbiAgICAgIG1hc2tBbGxUZXh0LFxuICAgICAgbWFza1RleHRDbGFzcyxcbiAgICAgIHVubWFza1RleHRDbGFzcyxcbiAgICAgIG1hc2tUZXh0U2VsZWN0b3IsXG4gICAgICB1bm1hc2tUZXh0U2VsZWN0b3IsXG4gICAgICBpbmxpbmVTdHlsZXNoZWV0LFxuICAgICAgbWFza0lucHV0T3B0aW9ucyxcbiAgICAgIGRhdGFVUkxPcHRpb25zLFxuICAgICAgbWFza0F0dHJpYnV0ZUZuLFxuICAgICAgbWFza1RleHRGbixcbiAgICAgIG1hc2tJbnB1dEZuLFxuICAgICAgcmVjb3JkQ2FudmFzLFxuICAgICAgaW5saW5lSW1hZ2VzLFxuICAgICAgc2FtcGxpbmcsXG4gICAgICBzbGltRE9NT3B0aW9ucyxcbiAgICAgIGlmcmFtZU1hbmFnZXIsXG4gICAgICBzdHlsZXNoZWV0TWFuYWdlcixcbiAgICAgIGNhbnZhc01hbmFnZXIsXG4gICAgICBrZWVwSWZyYW1lU3JjRm4sXG4gICAgICBwcm9jZXNzZWROb2RlTWFuYWdlclxuICAgIH0sXG4gICAgbWlycm9yXG4gIH0pO1xuICBjb25zdCB0YWtlRnVsbFNuYXBzaG90MiA9IChpc0NoZWNrb3V0ID0gZmFsc2UpID0+IHtcbiAgICBpZiAoIXJlY29yZERPTSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3cmFwcGVkRW1pdChcbiAgICAgIHtcbiAgICAgICAgdHlwZTogRXZlbnRUeXBlLk1ldGEsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBocmVmOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgICAgICB3aWR0aDogZ2V0V2luZG93V2lkdGgoKSxcbiAgICAgICAgICBoZWlnaHQ6IGdldFdpbmRvd0hlaWdodCgpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBpc0NoZWNrb3V0XG4gICAgKTtcbiAgICBzdHlsZXNoZWV0TWFuYWdlci5yZXNldCgpO1xuICAgIHNoYWRvd0RvbU1hbmFnZXIuaW5pdCgpO1xuICAgIG11dGF0aW9uQnVmZmVycy5mb3JFYWNoKChidWYpID0+IGJ1Zi5sb2NrKCkpO1xuICAgIGNvbnN0IG5vZGUgPSBzbmFwc2hvdChkb2N1bWVudCwge1xuICAgICAgbWlycm9yLFxuICAgICAgYmxvY2tDbGFzcyxcbiAgICAgIGJsb2NrU2VsZWN0b3IsXG4gICAgICB1bmJsb2NrU2VsZWN0b3IsXG4gICAgICBtYXNrQWxsVGV4dCxcbiAgICAgIG1hc2tUZXh0Q2xhc3MsXG4gICAgICB1bm1hc2tUZXh0Q2xhc3MsXG4gICAgICBtYXNrVGV4dFNlbGVjdG9yLFxuICAgICAgdW5tYXNrVGV4dFNlbGVjdG9yLFxuICAgICAgaW5saW5lU3R5bGVzaGVldCxcbiAgICAgIG1hc2tBbGxJbnB1dHM6IG1hc2tJbnB1dE9wdGlvbnMsXG4gICAgICBtYXNrQXR0cmlidXRlRm4sXG4gICAgICBtYXNrSW5wdXRGbixcbiAgICAgIG1hc2tUZXh0Rm4sXG4gICAgICBzbGltRE9NOiBzbGltRE9NT3B0aW9ucyxcbiAgICAgIGRhdGFVUkxPcHRpb25zLFxuICAgICAgcmVjb3JkQ2FudmFzLFxuICAgICAgaW5saW5lSW1hZ2VzLFxuICAgICAgb25TZXJpYWxpemU6IChuMikgPT4ge1xuICAgICAgICBpZiAoaXNTZXJpYWxpemVkSWZyYW1lKG4yLCBtaXJyb3IpKSB7XG4gICAgICAgICAgaWZyYW1lTWFuYWdlci5hZGRJZnJhbWUobjIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1NlcmlhbGl6ZWRTdHlsZXNoZWV0KG4yLCBtaXJyb3IpKSB7XG4gICAgICAgICAgc3R5bGVzaGVldE1hbmFnZXIudHJhY2tMaW5rRWxlbWVudChuMik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc1NoYWRvd1Jvb3QobjIpKSB7XG4gICAgICAgICAgc2hhZG93RG9tTWFuYWdlci5hZGRTaGFkb3dSb290KG4yLnNoYWRvd1Jvb3QsIGRvY3VtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uSWZyYW1lTG9hZDogKGlmcmFtZSwgY2hpbGRTbikgPT4ge1xuICAgICAgICBpZnJhbWVNYW5hZ2VyLmF0dGFjaElmcmFtZShpZnJhbWUsIGNoaWxkU24pO1xuICAgICAgICBpZiAoaWZyYW1lLmNvbnRlbnRXaW5kb3cpIHtcbiAgICAgICAgICBjYW52YXNNYW5hZ2VyLmFkZFdpbmRvdyhpZnJhbWUuY29udGVudFdpbmRvdyk7XG4gICAgICAgIH1cbiAgICAgICAgc2hhZG93RG9tTWFuYWdlci5vYnNlcnZlQXR0YWNoU2hhZG93KGlmcmFtZSk7XG4gICAgICB9LFxuICAgICAgb25TdHlsZXNoZWV0TG9hZDogKGxpbmtFbCwgY2hpbGRTbikgPT4ge1xuICAgICAgICBzdHlsZXNoZWV0TWFuYWdlci5hdHRhY2hMaW5rRWxlbWVudChsaW5rRWwsIGNoaWxkU24pO1xuICAgICAgfSxcbiAgICAgIGtlZXBJZnJhbWVTcmNGblxuICAgIH0pO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuIGNvbnNvbGUud2FybihcIkZhaWxlZCB0byBzbmFwc2hvdCB0aGUgZG9jdW1lbnRcIik7XG4gICAgfVxuICAgIHdyYXBwZWRFbWl0KHtcbiAgICAgIHR5cGU6IEV2ZW50VHlwZS5GdWxsU25hcHNob3QsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIG5vZGUsXG4gICAgICAgIGluaXRpYWxPZmZzZXQ6IGdldFdpbmRvd1Njcm9sbCh3aW5kb3cpXG4gICAgICB9XG4gICAgfSk7XG4gICAgbXV0YXRpb25CdWZmZXJzLmZvckVhY2goKGJ1ZikgPT4gYnVmLnVubG9jaygpKTtcbiAgICBpZiAoZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzICYmIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5sZW5ndGggPiAwKVxuICAgICAgc3R5bGVzaGVldE1hbmFnZXIuYWRvcHRTdHlsZVNoZWV0cyhcbiAgICAgICAgZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLFxuICAgICAgICBtaXJyb3IuZ2V0SWQoZG9jdW1lbnQpXG4gICAgICApO1xuICB9O1xuICBfdGFrZUZ1bGxTbmFwc2hvdCA9IHRha2VGdWxsU25hcHNob3QyO1xuICB0cnkge1xuICAgIGNvbnN0IGhhbmRsZXJzID0gW107XG4gICAgY29uc3Qgb2JzZXJ2ZSA9IChkb2MpID0+IHtcbiAgICAgIHJldHVybiBjYWxsYmFja1dyYXBwZXIoaW5pdE9ic2VydmVycykoXG4gICAgICAgIHtcbiAgICAgICAgICBvbk11dGF0aW9uLFxuICAgICAgICAgIG11dGF0aW9uQ2I6IHdyYXBwZWRNdXRhdGlvbkVtaXQsXG4gICAgICAgICAgbW91c2Vtb3ZlQ2I6IChwb3NpdGlvbnMsIHNvdXJjZSkgPT4gd3JhcHBlZEVtaXQoe1xuICAgICAgICAgICAgdHlwZTogRXZlbnRUeXBlLkluY3JlbWVudGFsU25hcHNob3QsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgcG9zaXRpb25zXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbW91c2VJbnRlcmFjdGlvbkNiOiAoZCkgPT4gd3JhcHBlZEVtaXQoe1xuICAgICAgICAgICAgdHlwZTogRXZlbnRUeXBlLkluY3JlbWVudGFsU25hcHNob3QsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIHNvdXJjZTogSW5jcmVtZW50YWxTb3VyY2UuTW91c2VJbnRlcmFjdGlvbixcbiAgICAgICAgICAgICAgLi4uZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNjcm9sbENiOiB3cmFwcGVkU2Nyb2xsRW1pdCxcbiAgICAgICAgICB2aWV3cG9ydFJlc2l6ZUNiOiAoZCkgPT4gd3JhcHBlZEVtaXQoe1xuICAgICAgICAgICAgdHlwZTogRXZlbnRUeXBlLkluY3JlbWVudGFsU25hcHNob3QsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIHNvdXJjZTogSW5jcmVtZW50YWxTb3VyY2UuVmlld3BvcnRSZXNpemUsXG4gICAgICAgICAgICAgIC4uLmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBpbnB1dENiOiAodjIpID0+IHdyYXBwZWRFbWl0KHtcbiAgICAgICAgICAgIHR5cGU6IEV2ZW50VHlwZS5JbmNyZW1lbnRhbFNuYXBzaG90LFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBzb3VyY2U6IEluY3JlbWVudGFsU291cmNlLklucHV0LFxuICAgICAgICAgICAgICAuLi52MlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG1lZGlhSW50ZXJhY3Rpb25DYjogKHApID0+IHdyYXBwZWRFbWl0KHtcbiAgICAgICAgICAgIHR5cGU6IEV2ZW50VHlwZS5JbmNyZW1lbnRhbFNuYXBzaG90LFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBzb3VyY2U6IEluY3JlbWVudGFsU291cmNlLk1lZGlhSW50ZXJhY3Rpb24sXG4gICAgICAgICAgICAgIC4uLnBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzdHlsZVNoZWV0UnVsZUNiOiAocjIpID0+IHdyYXBwZWRFbWl0KHtcbiAgICAgICAgICAgIHR5cGU6IEV2ZW50VHlwZS5JbmNyZW1lbnRhbFNuYXBzaG90LFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBzb3VyY2U6IEluY3JlbWVudGFsU291cmNlLlN0eWxlU2hlZXRSdWxlLFxuICAgICAgICAgICAgICAuLi5yMlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHN0eWxlRGVjbGFyYXRpb25DYjogKHIyKSA9PiB3cmFwcGVkRW1pdCh7XG4gICAgICAgICAgICB0eXBlOiBFdmVudFR5cGUuSW5jcmVtZW50YWxTbmFwc2hvdCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgc291cmNlOiBJbmNyZW1lbnRhbFNvdXJjZS5TdHlsZURlY2xhcmF0aW9uLFxuICAgICAgICAgICAgICAuLi5yMlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhbnZhc011dGF0aW9uQ2I6IHdyYXBwZWRDYW52YXNNdXRhdGlvbkVtaXQsXG4gICAgICAgICAgZm9udENiOiAocCkgPT4gd3JhcHBlZEVtaXQoe1xuICAgICAgICAgICAgdHlwZTogRXZlbnRUeXBlLkluY3JlbWVudGFsU25hcHNob3QsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIHNvdXJjZTogSW5jcmVtZW50YWxTb3VyY2UuRm9udCxcbiAgICAgICAgICAgICAgLi4ucFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNlbGVjdGlvbkNiOiAocCkgPT4ge1xuICAgICAgICAgICAgd3JhcHBlZEVtaXQoe1xuICAgICAgICAgICAgICB0eXBlOiBFdmVudFR5cGUuSW5jcmVtZW50YWxTbmFwc2hvdCxcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHNvdXJjZTogSW5jcmVtZW50YWxTb3VyY2UuU2VsZWN0aW9uLFxuICAgICAgICAgICAgICAgIC4uLnBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjdXN0b21FbGVtZW50Q2I6IChjMikgPT4ge1xuICAgICAgICAgICAgd3JhcHBlZEVtaXQoe1xuICAgICAgICAgICAgICB0eXBlOiBFdmVudFR5cGUuSW5jcmVtZW50YWxTbmFwc2hvdCxcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIHNvdXJjZTogSW5jcmVtZW50YWxTb3VyY2UuQ3VzdG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAuLi5jMlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJsb2NrQ2xhc3MsXG4gICAgICAgICAgaWdub3JlQ2xhc3MsXG4gICAgICAgICAgaWdub3JlU2VsZWN0b3IsXG4gICAgICAgICAgbWFza0FsbFRleHQsXG4gICAgICAgICAgbWFza1RleHRDbGFzcyxcbiAgICAgICAgICB1bm1hc2tUZXh0Q2xhc3MsXG4gICAgICAgICAgbWFza1RleHRTZWxlY3RvcixcbiAgICAgICAgICB1bm1hc2tUZXh0U2VsZWN0b3IsXG4gICAgICAgICAgbWFza0lucHV0T3B0aW9ucyxcbiAgICAgICAgICBpbmxpbmVTdHlsZXNoZWV0LFxuICAgICAgICAgIHNhbXBsaW5nLFxuICAgICAgICAgIHJlY29yZERPTSxcbiAgICAgICAgICByZWNvcmRDYW52YXMsXG4gICAgICAgICAgaW5saW5lSW1hZ2VzLFxuICAgICAgICAgIHVzZXJUcmlnZ2VyZWRPbklucHV0LFxuICAgICAgICAgIGNvbGxlY3RGb250cyxcbiAgICAgICAgICBkb2MsXG4gICAgICAgICAgbWFza0F0dHJpYnV0ZUZuLFxuICAgICAgICAgIG1hc2tJbnB1dEZuLFxuICAgICAgICAgIG1hc2tUZXh0Rm4sXG4gICAgICAgICAga2VlcElmcmFtZVNyY0ZuLFxuICAgICAgICAgIGJsb2NrU2VsZWN0b3IsXG4gICAgICAgICAgdW5ibG9ja1NlbGVjdG9yLFxuICAgICAgICAgIHNsaW1ET01PcHRpb25zLFxuICAgICAgICAgIGRhdGFVUkxPcHRpb25zLFxuICAgICAgICAgIG1pcnJvcixcbiAgICAgICAgICBpZnJhbWVNYW5hZ2VyLFxuICAgICAgICAgIHN0eWxlc2hlZXRNYW5hZ2VyLFxuICAgICAgICAgIHNoYWRvd0RvbU1hbmFnZXIsXG4gICAgICAgICAgcHJvY2Vzc2VkTm9kZU1hbmFnZXIsXG4gICAgICAgICAgY2FudmFzTWFuYWdlcixcbiAgICAgICAgICBpZ25vcmVDU1NBdHRyaWJ1dGVzLFxuICAgICAgICAgIHBsdWdpbnM6IHBsdWdpbnM/LmZpbHRlcigocCkgPT4gcC5vYnNlcnZlcik/Lm1hcCgocCkgPT4gKHtcbiAgICAgICAgICAgIG9ic2VydmVyOiBwLm9ic2VydmVyLFxuICAgICAgICAgICAgb3B0aW9uczogcC5vcHRpb25zLFxuICAgICAgICAgICAgY2FsbGJhY2s6IChwYXlsb2FkKSA9PiB3cmFwcGVkRW1pdCh7XG4gICAgICAgICAgICAgIHR5cGU6IEV2ZW50VHlwZS5QbHVnaW4sXG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBwbHVnaW46IHAubmFtZSxcbiAgICAgICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSkpIHx8IFtdXG4gICAgICAgIH0sXG4gICAgICAgIHt9XG4gICAgICApO1xuICAgIH07XG4gICAgaWZyYW1lTWFuYWdlci5hZGRMb2FkTGlzdGVuZXIoKGlmcmFtZUVsKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBoYW5kbGVycy5wdXNoKG9ic2VydmUoaWZyYW1lRWwuY29udGVudERvY3VtZW50KSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGluaXQgPSAoKSA9PiB7XG4gICAgICB0YWtlRnVsbFNuYXBzaG90MigpO1xuICAgICAgaGFuZGxlcnMucHVzaChvYnNlcnZlKGRvY3VtZW50KSk7XG4gICAgfTtcbiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJpbnRlcmFjdGl2ZVwiIHx8IGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgaW5pdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoYW5kbGVycy5wdXNoKFxuICAgICAgICBvbihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgKCkgPT4ge1xuICAgICAgICAgIHdyYXBwZWRFbWl0KHtcbiAgICAgICAgICAgIHR5cGU6IEV2ZW50VHlwZS5Eb21Db250ZW50TG9hZGVkLFxuICAgICAgICAgICAgZGF0YToge31cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAocmVjb3JkQWZ0ZXIgPT09IFwiRE9NQ29udGVudExvYWRlZFwiKSBpbml0KCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgaGFuZGxlcnMucHVzaChcbiAgICAgICAgb24oXG4gICAgICAgICAgXCJsb2FkXCIsXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgd3JhcHBlZEVtaXQoe1xuICAgICAgICAgICAgICB0eXBlOiBFdmVudFR5cGUuTG9hZCxcbiAgICAgICAgICAgICAgZGF0YToge31cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHJlY29yZEFmdGVyID09PSBcImxvYWRcIikgaW5pdCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgd2luZG93XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBoYW5kbGVycy5mb3JFYWNoKChoKSA9PiBoKCkpO1xuICAgICAgcHJvY2Vzc2VkTm9kZU1hbmFnZXIuZGVzdHJveSgpO1xuICAgICAgX3Rha2VGdWxsU25hcHNob3QgPSB2b2lkIDA7XG4gICAgICB1bnJlZ2lzdGVyRXJyb3JIYW5kbGVyKCk7XG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oZXJyb3IpO1xuICB9XG59XG5mdW5jdGlvbiB0YWtlRnVsbFNuYXBzaG90KGlzQ2hlY2tvdXQpIHtcbiAgaWYgKCFfdGFrZUZ1bGxTbmFwc2hvdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInBsZWFzZSB0YWtlIGZ1bGwgc25hcHNob3QgYWZ0ZXIgc3RhcnQgcmVjb3JkaW5nXCIpO1xuICB9XG4gIF90YWtlRnVsbFNuYXBzaG90KGlzQ2hlY2tvdXQpO1xufVxucmVjb3JkLm1pcnJvciA9IG1pcnJvcjtcbnJlY29yZC50YWtlRnVsbFNuYXBzaG90ID0gdGFrZUZ1bGxTbmFwc2hvdDtcbmZ1bmN0aW9uIF9nZXRDYW52YXNNYW5hZ2VyKGdldENhbnZhc01hbmFnZXJGbiwgb3B0aW9ucykge1xuICB0cnkge1xuICAgIHJldHVybiBnZXRDYW52YXNNYW5hZ2VyRm4gPyBnZXRDYW52YXNNYW5hZ2VyRm4ob3B0aW9ucykgOiBuZXcgQ2FudmFzTWFuYWdlck5vb3AoKTtcbiAgfSBjYXRjaCB7XG4gICAgY29uc29sZS53YXJuKFwiVW5hYmxlIHRvIGluaXRpYWxpemUgQ2FudmFzTWFuYWdlclwiKTtcbiAgICByZXR1cm4gbmV3IENhbnZhc01hbmFnZXJOb29wKCk7XG4gIH1cbn1cbnZhciBuO1xuIWZ1bmN0aW9uKHQyKSB7XG4gIHQyW3QyLk5vdFN0YXJ0ZWQgPSAwXSA9IFwiTm90U3RhcnRlZFwiLCB0Mlt0Mi5SdW5uaW5nID0gMV0gPSBcIlJ1bm5pbmdcIiwgdDJbdDIuU3RvcHBlZCA9IDJdID0gXCJTdG9wcGVkXCI7XG59KG4gfHwgKG4gPSB7fSkpO1xuXG5jb25zdCBSZXBsYXlFdmVudFR5cGVJbmNyZW1lbnRhbFNuYXBzaG90ID0gMztcbmNvbnN0IFJlcGxheUV2ZW50VHlwZUN1c3RvbSA9IDU7XG5cbi8qKlxuICogQ29udmVydHMgYSB0aW1lc3RhbXAgdG8gbXMsIGlmIGl0IHdhcyBpbiBzLCBvciBrZWVwcyBpdCBhcyBtcy5cbiAqL1xuZnVuY3Rpb24gdGltZXN0YW1wVG9Ncyh0aW1lc3RhbXApIHtcbiAgY29uc3QgaXNNcyA9IHRpbWVzdGFtcCA+IDk5OTk5OTk5OTk7XG4gIHJldHVybiBpc01zID8gdGltZXN0YW1wIDogdGltZXN0YW1wICogMTAwMDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHRpbWVzdGFtcCB0byBzLCBpZiBpdCB3YXMgaW4gbXMsIG9yIGtlZXBzIGl0IGFzIHMuXG4gKi9cbmZ1bmN0aW9uIHRpbWVzdGFtcFRvUyh0aW1lc3RhbXApIHtcbiAgY29uc3QgaXNNcyA9IHRpbWVzdGFtcCA+IDk5OTk5OTk5OTk7XG4gIHJldHVybiBpc01zID8gdGltZXN0YW1wIC8gMTAwMCA6IHRpbWVzdGFtcDtcbn1cblxuLyoqXG4gKiBBZGQgYSBicmVhZGNydW1iIGV2ZW50IHRvIHJlcGxheS5cbiAqL1xuZnVuY3Rpb24gYWRkQnJlYWRjcnVtYkV2ZW50KHJlcGxheSwgYnJlYWRjcnVtYikge1xuICBpZiAoYnJlYWRjcnVtYi5jYXRlZ29yeSA9PT0gJ3NlbnRyeS50cmFuc2FjdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoWyd1aS5jbGljaycsICd1aS5pbnB1dCddLmluY2x1ZGVzKGJyZWFkY3J1bWIuY2F0ZWdvcnkgKSkge1xuICAgIHJlcGxheS50cmlnZ2VyVXNlckFjdGl2aXR5KCk7XG4gIH0gZWxzZSB7XG4gICAgcmVwbGF5LmNoZWNrQW5kSGFuZGxlRXhwaXJlZFNlc3Npb24oKTtcbiAgfVxuXG4gIHJlcGxheS5hZGRVcGRhdGUoKCkgPT4ge1xuICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIHJlamVjdFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICByZXBsYXkudGhyb3R0bGVkQWRkRXZlbnQoe1xuICAgICAgdHlwZTogRXZlbnRUeXBlLkN1c3RvbSxcbiAgICAgIC8vIFRPRE86IFdlIHdlcmUgY29udmVydGluZyBmcm9tIG1zIHRvIHNlY29uZHMgZm9yIGJyZWFkY3J1bWJzLCBzcGFucyxcbiAgICAgIC8vIGJ1dCBtYXliZSB3ZSBzaG91bGQganVzdCBrZWVwIHRoZW0gYXMgbWlsbGlzZWNvbmRzXG4gICAgICB0aW1lc3RhbXA6IChicmVhZGNydW1iLnRpbWVzdGFtcCB8fCAwKSAqIDEwMDAsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRhZzogJ2JyZWFkY3J1bWInLFxuICAgICAgICAvLyBub3JtYWxpemUgdG8gbWF4LiAxMCBkZXB0aCBhbmQgMV8wMDAgcHJvcGVydGllcyBwZXIgb2JqZWN0XG4gICAgICAgIHBheWxvYWQ6IG5vcm1hbGl6ZShicmVhZGNydW1iLCAxMCwgMTAwMCksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gRG8gbm90IGZsdXNoIGFmdGVyIGNvbnNvbGUgbG9nIG1lc3NhZ2VzXG4gICAgcmV0dXJuIGJyZWFkY3J1bWIuY2F0ZWdvcnkgPT09ICdjb25zb2xlJztcbiAgfSk7XG59XG5cbmNvbnN0IElOVEVSQUNUSVZFX1NFTEVDVE9SID0gJ2J1dHRvbixhJztcblxuLyoqIEdldCB0aGUgY2xvc2VzdCBpbnRlcmFjdGl2ZSBwYXJlbnQgZWxlbWVudCwgb3IgZWxzZSByZXR1cm4gdGhlIGdpdmVuIGVsZW1lbnQuICovXG5mdW5jdGlvbiBnZXRDbG9zZXN0SW50ZXJhY3RpdmUoZWxlbWVudCkge1xuICBjb25zdCBjbG9zZXN0SW50ZXJhY3RpdmUgPSBlbGVtZW50LmNsb3Nlc3QoSU5URVJBQ1RJVkVfU0VMRUNUT1IpO1xuICByZXR1cm4gY2xvc2VzdEludGVyYWN0aXZlIHx8IGVsZW1lbnQ7XG59XG5cbi8qKlxuICogRm9yIGNsaWNrcywgd2UgY2hlY2sgaWYgdGhlIHRhcmdldCBpcyBpbnNpZGUgb2YgYSBidXR0b24gb3IgbGlua1xuICogSWYgc28sIHdlIHVzZSB0aGlzIGFzIHRoZSB0YXJnZXQgaW5zdGVhZFxuICogVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSBpZiB5b3UgY2xpY2sgb24gdGhlIGltYWdlIGluIDxidXR0b24+PGltZz48L2J1dHRvbj4sXG4gKiBUaGUgdGFyZ2V0IHdpbGwgYmUgdGhlIGltYWdlLCBub3QgdGhlIGJ1dHRvbiwgd2hpY2ggd2UgZG9uJ3Qgd2FudCBoZXJlXG4gKi9cbmZ1bmN0aW9uIGdldENsaWNrVGFyZ2V0Tm9kZShldmVudCkge1xuICBjb25zdCB0YXJnZXQgPSBnZXRUYXJnZXROb2RlKGV2ZW50KTtcblxuICBpZiAoIXRhcmdldCB8fCAhKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIHJldHVybiBnZXRDbG9zZXN0SW50ZXJhY3RpdmUodGFyZ2V0KTtcbn1cblxuLyoqIEdldCB0aGUgZXZlbnQgdGFyZ2V0IG5vZGUuICovXG5mdW5jdGlvbiBnZXRUYXJnZXROb2RlKGV2ZW50KSB7XG4gIGlmIChpc0V2ZW50V2l0aFRhcmdldChldmVudCkpIHtcbiAgICByZXR1cm4gZXZlbnQudGFyZ2V0IDtcbiAgfVxuXG4gIHJldHVybiBldmVudDtcbn1cblxuZnVuY3Rpb24gaXNFdmVudFdpdGhUYXJnZXQoZXZlbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBldmVudCA9PT0gJ29iamVjdCcgJiYgISFldmVudCAmJiAndGFyZ2V0JyBpbiBldmVudDtcbn1cblxubGV0IGhhbmRsZXJzO1xuXG4vKipcbiAqIFJlZ2lzdGVyIGEgaGFuZGxlciB0byBiZSBjYWxsZWQgd2hlbiBgd2luZG93Lm9wZW4oKWAgaXMgY2FsbGVkLlxuICogUmV0dXJucyBhIGNsZWFudXAgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG9uV2luZG93T3BlbihjYikge1xuICAvLyBFbnN1cmUgdG8gb25seSByZWdpc3RlciB0aGlzIG9uY2VcbiAgaWYgKCFoYW5kbGVycykge1xuICAgIGhhbmRsZXJzID0gW107XG4gICAgbW9ua2V5UGF0Y2hXaW5kb3dPcGVuKCk7XG4gIH1cblxuICBoYW5kbGVycy5wdXNoKGNiKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGNvbnN0IHBvcyA9IGhhbmRsZXJzID8gaGFuZGxlcnMuaW5kZXhPZihjYikgOiAtMTtcbiAgICBpZiAocG9zID4gLTEpIHtcbiAgICAgIChoYW5kbGVycyApLnNwbGljZShwb3MsIDEpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gbW9ua2V5UGF0Y2hXaW5kb3dPcGVuKCkge1xuICBmaWxsKFdJTkRPVywgJ29wZW4nLCBmdW5jdGlvbiAob3JpZ2luYWxXaW5kb3dPcGVuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBoYW5kbGVycy5mb3JFYWNoKGhhbmRsZXIgPT4gaGFuZGxlcigpKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gaWdub3JlIGVycm9ycyBpbiBoZXJlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9yaWdpbmFsV2luZG93T3Blbi5hcHBseShXSU5ET1csIGFyZ3MpO1xuICAgIH07XG4gIH0pO1xufVxuXG4vKiogQW55IEluY3JlbWVudGFsU291cmNlIGZvciBycndlYiB0aGF0IHdlIGludGVycHJldCBhcyBhIGtpbmQgb2YgbXV0YXRpb24uICovXG5jb25zdCBJbmNyZW1lbnRhbE11dGF0aW9uU291cmNlcyA9IG5ldyBTZXQoW1xuICBJbmNyZW1lbnRhbFNvdXJjZS5NdXRhdGlvbixcbiAgSW5jcmVtZW50YWxTb3VyY2UuU3R5bGVTaGVldFJ1bGUsXG4gIEluY3JlbWVudGFsU291cmNlLlN0eWxlRGVjbGFyYXRpb24sXG4gIEluY3JlbWVudGFsU291cmNlLkFkb3B0ZWRTdHlsZVNoZWV0LFxuICBJbmNyZW1lbnRhbFNvdXJjZS5DYW52YXNNdXRhdGlvbixcbiAgSW5jcmVtZW50YWxTb3VyY2UuU2VsZWN0aW9uLFxuICBJbmNyZW1lbnRhbFNvdXJjZS5NZWRpYUludGVyYWN0aW9uLFxuXSk7XG5cbi8qKiBIYW5kbGUgYSBjbGljay4gKi9cbmZ1bmN0aW9uIGhhbmRsZUNsaWNrKGNsaWNrRGV0ZWN0b3IsIGNsaWNrQnJlYWRjcnVtYiwgbm9kZSkge1xuICBjbGlja0RldGVjdG9yLmhhbmRsZUNsaWNrKGNsaWNrQnJlYWRjcnVtYiwgbm9kZSk7XG59XG5cbi8qKiBBIGNsaWNrIGRldGVjdG9yIGNsYXNzIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IHNsb3cgb3IgcmFnZSBjbGlja3Mgb24gZWxlbWVudHMuICovXG5jbGFzcyBDbGlja0RldGVjdG9yICB7XG4gIC8vIHByb3RlY3RlZCBmb3IgdGVzdGluZ1xuXG4gICBjb25zdHJ1Y3RvcihcbiAgICByZXBsYXksXG4gICAgc2xvd0NsaWNrQ29uZmlnLFxuICAgIC8vIEp1c3QgZm9yIGVhc2llciB0ZXN0aW5nXG4gICAgX2FkZEJyZWFkY3J1bWJFdmVudCA9IGFkZEJyZWFkY3J1bWJFdmVudCxcbiAgKSB7XG4gICAgdGhpcy5fbGFzdE11dGF0aW9uID0gMDtcbiAgICB0aGlzLl9sYXN0U2Nyb2xsID0gMDtcbiAgICB0aGlzLl9jbGlja3MgPSBbXTtcblxuICAgIC8vIFdlIHdhbnQgZXZlcnl0aGluZyBpbiBzLCBidXQgb3B0aW9ucyBhcmUgaW4gbXNcbiAgICB0aGlzLl90aW1lb3V0ID0gc2xvd0NsaWNrQ29uZmlnLnRpbWVvdXQgLyAxMDAwO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHNsb3dDbGlja0NvbmZpZy50aHJlc2hvbGQgLyAxMDAwO1xuICAgIHRoaXMuX3Njcm9sbFRpbWVvdXQgPSBzbG93Q2xpY2tDb25maWcuc2Nyb2xsVGltZW91dCAvIDEwMDA7XG4gICAgdGhpcy5fcmVwbGF5ID0gcmVwbGF5O1xuICAgIHRoaXMuX2lnbm9yZVNlbGVjdG9yID0gc2xvd0NsaWNrQ29uZmlnLmlnbm9yZVNlbGVjdG9yO1xuICAgIHRoaXMuX2FkZEJyZWFkY3J1bWJFdmVudCA9IF9hZGRCcmVhZGNydW1iRXZlbnQ7XG4gIH1cblxuICAvKiogUmVnaXN0ZXIgY2xpY2sgZGV0ZWN0aW9uIGhhbmRsZXJzIG9uIG11dGF0aW9uIG9yIHNjcm9sbC4gKi9cbiAgIGFkZExpc3RlbmVycygpIHtcbiAgICBjb25zdCBjbGVhbnVwV2luZG93T3BlbiA9IG9uV2luZG93T3BlbigoKSA9PiB7XG4gICAgICAvLyBUcmVhdCB3aW5kb3cub3BlbiBhcyBtdXRhdGlvblxuICAgICAgdGhpcy5fbGFzdE11dGF0aW9uID0gbm93SW5TZWNvbmRzKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl90ZWFyZG93biA9ICgpID0+IHtcbiAgICAgIGNsZWFudXBXaW5kb3dPcGVuKCk7XG5cbiAgICAgIHRoaXMuX2NsaWNrcyA9IFtdO1xuICAgICAgdGhpcy5fbGFzdE11dGF0aW9uID0gMDtcbiAgICAgIHRoaXMuX2xhc3RTY3JvbGwgPSAwO1xuICAgIH07XG4gIH1cblxuICAvKiogQ2xlYW4gdXAgbGlzdGVuZXJzLiAqL1xuICAgcmVtb3ZlTGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLl90ZWFyZG93bikge1xuICAgICAgdGhpcy5fdGVhcmRvd24oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2hlY2tDbGlja1RpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jaGVja0NsaWNrVGltZW91dCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gICBoYW5kbGVDbGljayhicmVhZGNydW1iLCBub2RlKSB7XG4gICAgaWYgKGlnbm9yZUVsZW1lbnQobm9kZSwgdGhpcy5faWdub3JlU2VsZWN0b3IpIHx8ICFpc0NsaWNrQnJlYWRjcnVtYihicmVhZGNydW1iKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0NsaWNrID0ge1xuICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXBUb1MoYnJlYWRjcnVtYi50aW1lc3RhbXApLFxuICAgICAgY2xpY2tCcmVhZGNydW1iOiBicmVhZGNydW1iLFxuICAgICAgLy8gU2V0IHRoaXMgdG8gMCBzbyB3ZSBrbm93IGl0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgY2xpY2sgYnJlYWRjcnVtYlxuICAgICAgY2xpY2tDb3VudDogMCxcbiAgICAgIG5vZGUsXG4gICAgfTtcblxuICAgIC8vIElmIHRoZXJlIHdhcyBhIGNsaWNrIGluIHRoZSBsYXN0IDFzIG9uIHRoZSBzYW1lIGVsZW1lbnQsIGlnbm9yZSBpdCAtIG9ubHkga2VlcCBhIHNpbmdsZSByZWZlcmVuY2UgcGVyIHNlY29uZFxuICAgIGlmIChcbiAgICAgIHRoaXMuX2NsaWNrcy5zb21lKGNsaWNrID0+IGNsaWNrLm5vZGUgPT09IG5ld0NsaWNrLm5vZGUgJiYgTWF0aC5hYnMoY2xpY2sudGltZXN0YW1wIC0gbmV3Q2xpY2sudGltZXN0YW1wKSA8IDEpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY2xpY2tzLnB1c2gobmV3Q2xpY2spO1xuXG4gICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgbmV3IGNsaWNrLCBzZXQgYSB0aW1lb3V0IHRvIGNoZWNrIGZvciBtdWx0aSBjbGlja3NcbiAgICBpZiAodGhpcy5fY2xpY2tzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5fc2NoZWR1bGVDaGVja0NsaWNrcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICAgcmVnaXN0ZXJNdXRhdGlvbih0aW1lc3RhbXAgPSBEYXRlLm5vdygpKSB7XG4gICAgdGhpcy5fbGFzdE11dGF0aW9uID0gdGltZXN0YW1wVG9TKHRpbWVzdGFtcCk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgIHJlZ2lzdGVyU2Nyb2xsKHRpbWVzdGFtcCA9IERhdGUubm93KCkpIHtcbiAgICB0aGlzLl9sYXN0U2Nyb2xsID0gdGltZXN0YW1wVG9TKHRpbWVzdGFtcCk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgIHJlZ2lzdGVyQ2xpY2soZWxlbWVudCkge1xuICAgIGNvbnN0IG5vZGUgPSBnZXRDbG9zZXN0SW50ZXJhY3RpdmUoZWxlbWVudCk7XG4gICAgdGhpcy5faGFuZGxlTXVsdGlDbGljayhub2RlICk7XG4gIH1cblxuICAvKiogQ291bnQgbXVsdGlwbGUgY2xpY2tzIG9uIGVsZW1lbnRzLiAqL1xuICAgX2hhbmRsZU11bHRpQ2xpY2sobm9kZSkge1xuICAgIHRoaXMuX2dldENsaWNrcyhub2RlKS5mb3JFYWNoKGNsaWNrID0+IHtcbiAgICAgIGNsaWNrLmNsaWNrQ291bnQrKztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBHZXQgYWxsIHBlbmRpbmcgY2xpY2tzIGZvciBhIGdpdmVuIG5vZGUuICovXG4gICBfZ2V0Q2xpY2tzKG5vZGUpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xpY2tzLmZpbHRlcihjbGljayA9PiBjbGljay5ub2RlID09PSBub2RlKTtcbiAgfVxuXG4gIC8qKiBDaGVjayB0aGUgY2xpY2tzIHRoYXQgaGFwcGVuZWQuICovXG4gICBfY2hlY2tDbGlja3MoKSB7XG4gICAgY29uc3QgdGltZWRPdXRDbGlja3MgPSBbXTtcblxuICAgIGNvbnN0IG5vdyA9IG5vd0luU2Vjb25kcygpO1xuXG4gICAgdGhpcy5fY2xpY2tzLmZvckVhY2goY2xpY2sgPT4ge1xuICAgICAgaWYgKCFjbGljay5tdXRhdGlvbkFmdGVyICYmIHRoaXMuX2xhc3RNdXRhdGlvbikge1xuICAgICAgICBjbGljay5tdXRhdGlvbkFmdGVyID0gY2xpY2sudGltZXN0YW1wIDw9IHRoaXMuX2xhc3RNdXRhdGlvbiA/IHRoaXMuX2xhc3RNdXRhdGlvbiAtIGNsaWNrLnRpbWVzdGFtcCA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICghY2xpY2suc2Nyb2xsQWZ0ZXIgJiYgdGhpcy5fbGFzdFNjcm9sbCkge1xuICAgICAgICBjbGljay5zY3JvbGxBZnRlciA9IGNsaWNrLnRpbWVzdGFtcCA8PSB0aGlzLl9sYXN0U2Nyb2xsID8gdGhpcy5fbGFzdFNjcm9sbCAtIGNsaWNrLnRpbWVzdGFtcCA6IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gQWxsIG9mIHRoZXNlIGFyZSBpbiBzZWNvbmRzIVxuICAgICAgaWYgKGNsaWNrLnRpbWVzdGFtcCArIHRoaXMuX3RpbWVvdXQgPD0gbm93KSB7XG4gICAgICAgIHRpbWVkT3V0Q2xpY2tzLnB1c2goY2xpY2spO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gUmVtb3ZlIFwib2xkXCIgY2xpY2tzXG4gICAgZm9yIChjb25zdCBjbGljayBvZiB0aW1lZE91dENsaWNrcykge1xuICAgICAgY29uc3QgcG9zID0gdGhpcy5fY2xpY2tzLmluZGV4T2YoY2xpY2spO1xuXG4gICAgICBpZiAocG9zID4gLTEpIHtcbiAgICAgICAgdGhpcy5fZ2VuZXJhdGVCcmVhZGNydW1icyhjbGljayk7XG4gICAgICAgIHRoaXMuX2NsaWNrcy5zcGxpY2UocG9zLCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyIG5ldyBjaGVjaywgdW5sZXNzIG5vIGNsaWNrcyBsZWZ0XG4gICAgaWYgKHRoaXMuX2NsaWNrcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3NjaGVkdWxlQ2hlY2tDbGlja3MoKTtcbiAgICB9XG4gIH1cblxuICAvKiogR2VuZXJhdGUgbWF0Y2hpbmcgYnJlYWRjcnVtYihzKSBmb3IgdGhlIGNsaWNrLiAqL1xuICAgX2dlbmVyYXRlQnJlYWRjcnVtYnMoY2xpY2spIHtcbiAgICBjb25zdCByZXBsYXkgPSB0aGlzLl9yZXBsYXk7XG4gICAgY29uc3QgaGFkU2Nyb2xsID0gY2xpY2suc2Nyb2xsQWZ0ZXIgJiYgY2xpY2suc2Nyb2xsQWZ0ZXIgPD0gdGhpcy5fc2Nyb2xsVGltZW91dDtcbiAgICBjb25zdCBoYWRNdXRhdGlvbiA9IGNsaWNrLm11dGF0aW9uQWZ0ZXIgJiYgY2xpY2subXV0YXRpb25BZnRlciA8PSB0aGlzLl90aHJlc2hvbGQ7XG5cbiAgICBjb25zdCBpc1Nsb3dDbGljayA9ICFoYWRTY3JvbGwgJiYgIWhhZE11dGF0aW9uO1xuICAgIGNvbnN0IHsgY2xpY2tDb3VudCwgY2xpY2tCcmVhZGNydW1iIH0gPSBjbGljaztcblxuICAgIC8vIFNsb3cgY2xpY2tcbiAgICBpZiAoaXNTbG93Q2xpY2spIHtcbiAgICAgIC8vIElmIGBtdXRhdGlvbkFmdGVyYCBpcyBzZXQsIGl0IG1lYW5zIGEgbXV0YXRpb24gaGFwcGVuZWQgYWZ0ZXIgdGhlIHRocmVzaG9sZCwgYnV0IGJlZm9yZSB0aGUgdGltZW91dFxuICAgICAgLy8gSWYgbm90LCBpdCBtZWFucyB3ZSBqdXN0IHRpbWVkIG91dCB3aXRob3V0IHNjcm9sbCAmIG11dGF0aW9uXG4gICAgICBjb25zdCB0aW1lQWZ0ZXJDbGlja01zID0gTWF0aC5taW4oY2xpY2subXV0YXRpb25BZnRlciB8fCB0aGlzLl90aW1lb3V0LCB0aGlzLl90aW1lb3V0KSAqIDEwMDA7XG4gICAgICBjb25zdCBlbmRSZWFzb24gPSB0aW1lQWZ0ZXJDbGlja01zIDwgdGhpcy5fdGltZW91dCAqIDEwMDAgPyAnbXV0YXRpb24nIDogJ3RpbWVvdXQnO1xuXG4gICAgICBjb25zdCBicmVhZGNydW1iID0ge1xuICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgIG1lc3NhZ2U6IGNsaWNrQnJlYWRjcnVtYi5tZXNzYWdlLFxuICAgICAgICB0aW1lc3RhbXA6IGNsaWNrQnJlYWRjcnVtYi50aW1lc3RhbXAsXG4gICAgICAgIGNhdGVnb3J5OiAndWkuc2xvd0NsaWNrRGV0ZWN0ZWQnLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgLi4uY2xpY2tCcmVhZGNydW1iLmRhdGEsXG4gICAgICAgICAgdXJsOiBXSU5ET1cubG9jYXRpb24uaHJlZixcbiAgICAgICAgICByb3V0ZTogcmVwbGF5LmdldEN1cnJlbnRSb3V0ZSgpLFxuICAgICAgICAgIHRpbWVBZnRlckNsaWNrTXMsXG4gICAgICAgICAgZW5kUmVhc29uLFxuICAgICAgICAgIC8vIElmIGNsaWNrQ291bnQgPT09IDAsIGl0IG1lYW5zIG11bHRpQ2xpY2sgd2FzIG5vdCBjb3JyZWN0bHkgY2FwdHVyZWQgaGVyZVxuICAgICAgICAgIC8vIC0gd2Ugc3RpbGwgd2FudCB0byBzZW5kIDEgaW4gdGhpcyBjYXNlXG4gICAgICAgICAgY2xpY2tDb3VudDogY2xpY2tDb3VudCB8fCAxLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgdGhpcy5fYWRkQnJlYWRjcnVtYkV2ZW50KHJlcGxheSwgYnJlYWRjcnVtYik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gTXVsdGkgY2xpY2tcbiAgICBpZiAoY2xpY2tDb3VudCA+IDEpIHtcbiAgICAgIGNvbnN0IGJyZWFkY3J1bWIgPSB7XG4gICAgICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICAgICAgbWVzc2FnZTogY2xpY2tCcmVhZGNydW1iLm1lc3NhZ2UsXG4gICAgICAgIHRpbWVzdGFtcDogY2xpY2tCcmVhZGNydW1iLnRpbWVzdGFtcCxcbiAgICAgICAgY2F0ZWdvcnk6ICd1aS5tdWx0aUNsaWNrJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIC4uLmNsaWNrQnJlYWRjcnVtYi5kYXRhLFxuICAgICAgICAgIHVybDogV0lORE9XLmxvY2F0aW9uLmhyZWYsXG4gICAgICAgICAgcm91dGU6IHJlcGxheS5nZXRDdXJyZW50Um91dGUoKSxcbiAgICAgICAgICBjbGlja0NvdW50LFxuICAgICAgICAgIG1ldHJpYzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX2FkZEJyZWFkY3J1bWJFdmVudChyZXBsYXksIGJyZWFkY3J1bWIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTY2hlZHVsZSB0byBjaGVjayBjdXJyZW50IGNsaWNrcy4gKi9cbiAgIF9zY2hlZHVsZUNoZWNrQ2xpY2tzKCkge1xuICAgIGlmICh0aGlzLl9jaGVja0NsaWNrVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2NoZWNrQ2xpY2tUaW1lb3V0KTtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGVja0NsaWNrVGltZW91dCA9IHNldFRpbWVvdXQkMygoKSA9PiB0aGlzLl9jaGVja0NsaWNrcygpLCAxMDAwKTtcbiAgfVxufVxuXG5jb25zdCBTTE9XX0NMSUNLX1RBR1MgPSBbJ0EnLCAnQlVUVE9OJywgJ0lOUFVUJ107XG5cbi8qKiBleHBvcnRlZCBmb3IgdGVzdHMgb25seSAqL1xuZnVuY3Rpb24gaWdub3JlRWxlbWVudChub2RlLCBpZ25vcmVTZWxlY3Rvcikge1xuICBpZiAoIVNMT1dfQ0xJQ0tfVEFHUy5pbmNsdWRlcyhub2RlLnRhZ05hbWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBJZiA8aW5wdXQ+IHRhZywgd2Ugb25seSB3YW50IHRvIGNvbnNpZGVyIGlucHV0W3R5cGU9J3N1Ym1pdCddICYgaW5wdXRbdHlwZT0nYnV0dG9uJ11cbiAgaWYgKG5vZGUudGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiAhWydzdWJtaXQnLCAnYnV0dG9uJ10uaW5jbHVkZXMobm9kZS5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSB8fCAnJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIElmIDxhPiB0YWcsIGRldGVjdCBzcGVjaWFsIHZhcmlhbnRzIHRoYXQgbWF5IG5vdCBsZWFkIHRvIGFuIGFjdGlvblxuICAvLyBJZiB0YXJnZXQgIT09IF9zZWxmLCB3ZSBtYXkgb3BlbiB0aGUgbGluayBzb21ld2hlcmUgZWxzZSwgd2hpY2ggd291bGQgbGVhZCB0byBubyBhY3Rpb25cbiAgLy8gQWxzbywgd2hlbiBkb3dubG9hZGluZyBhIGZpbGUsIHdlIG1heSBub3QgbGVhdmUgdGhlIHBhZ2UsIGJ1dCBzdGlsbCBub3QgdHJpZ2dlciBhbiBhY3Rpb25cbiAgaWYgKFxuICAgIG5vZGUudGFnTmFtZSA9PT0gJ0EnICYmXG4gICAgKG5vZGUuaGFzQXR0cmlidXRlKCdkb3dubG9hZCcpIHx8IChub2RlLmhhc0F0dHJpYnV0ZSgndGFyZ2V0JykgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpICE9PSAnX3NlbGYnKSlcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaWdub3JlU2VsZWN0b3IgJiYgbm9kZS5tYXRjaGVzKGlnbm9yZVNlbGVjdG9yKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0NsaWNrQnJlYWRjcnVtYihicmVhZGNydW1iKSB7XG4gIHJldHVybiAhIShicmVhZGNydW1iLmRhdGEgJiYgdHlwZW9mIGJyZWFkY3J1bWIuZGF0YS5ub2RlSWQgPT09ICdudW1iZXInICYmIGJyZWFkY3J1bWIudGltZXN0YW1wKTtcbn1cblxuLy8gVGhpcyBpcyBnb29kIGVub3VnaCBmb3IgdXMsIGFuZCBpcyBlYXNpZXIgdG8gdGVzdC9tb2NrIHRoYW4gYHRpbWVzdGFtcEluU2Vjb25kc2BcbmZ1bmN0aW9uIG5vd0luU2Vjb25kcygpIHtcbiAgcmV0dXJuIERhdGUubm93KCkgLyAxMDAwO1xufVxuXG4vKiogVXBkYXRlIHRoZSBjbGljayBkZXRlY3RvciBiYXNlZCBvbiBhIHJlY29yZGluZyBldmVudCBvZiBycndlYi4gKi9cbmZ1bmN0aW9uIHVwZGF0ZUNsaWNrRGV0ZWN0b3JGb3JSZWNvcmRpbmdFdmVudChjbGlja0RldGVjdG9yLCBldmVudCkge1xuICB0cnkge1xuICAgIC8vIG5vdGU6IFdlIG9ubHkgY29uc2lkZXIgaW5jcmVtZW50YWwgc25hcHNob3RzIGhlcmVcbiAgICAvLyBUaGlzIG1lYW5zIHRoYXQgYW55IGZ1bGwgc25hcHNob3QgaXMgaWdub3JlZCBmb3IgbXV0YXRpb24gZGV0ZWN0aW9uIC0gdGhlIHJlYXNvbiBpcyB0aGF0IHdlIHNpbXBseSBjYW5ub3Qga25vdyBpZiBhIG11dGF0aW9uIGhhcHBlbmVkIGhlcmUuXG4gICAgLy8gRS5nLiB0aGluayB0aGF0IHdlIGFyZSBidWZmZXJpbmcsIGFuIGVycm9yIGhhcHBlbnMgYW5kIHdlIHRha2UgYSBmdWxsIHNuYXBzaG90IGJlY2F1c2Ugd2Ugc3dpdGNoZWQgdG8gc2Vzc2lvbiBtb2RlIC1cbiAgICAvLyBpbiB0aGlzIHNjZW5hcmlvLCB3ZSB3b3VsZCBub3Qga25vdyBpZiBhIGRlYWQgY2xpY2sgaGFwcGVuZWQgYmVjYXVzZSBvZiB0aGUgZXJyb3IsIHdoaWNoIGlzIGEga2V5IGRlYWQgY2xpY2sgc2NlbmFyaW8uXG4gICAgLy8gSW5zdGVhZCwgYnkgaWdub3JpbmcgZnVsbCBzbmFwc2hvdHMsIHdlIGhhdmUgdGhlIHJpc2sgdGhhdCB3ZSBnZW5lcmF0ZSBhIGZhbHNlIHBvc2l0aXZlXG4gICAgLy8gKGlmIGEgbXV0YXRpb24gX2RpZF8gaGFwcGVuIGJ1dCB3YXMgXCJzd2FsbG93ZWRcIiBieSB0aGUgZnVsbCBzbmFwc2hvdClcbiAgICAvLyBCdXQgdGhpcyBzaG91bGQgYmUgbW9yZSB1bmxpa2VseSBhcyB3ZSdkIGdlbmVyYWxseSBjYXB0dXJlIHRoZSBpbmNyZW1lbnRhbCBzbmFwc2hvdCByaWdodCBhd2F5XG5cbiAgICBpZiAoIWlzSW5jcmVtZW50YWxFdmVudChldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHNvdXJjZSB9ID0gZXZlbnQuZGF0YTtcbiAgICBpZiAoSW5jcmVtZW50YWxNdXRhdGlvblNvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgIGNsaWNrRGV0ZWN0b3IucmVnaXN0ZXJNdXRhdGlvbihldmVudC50aW1lc3RhbXApO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2UgPT09IEluY3JlbWVudGFsU291cmNlLlNjcm9sbCkge1xuICAgICAgY2xpY2tEZXRlY3Rvci5yZWdpc3RlclNjcm9sbChldmVudC50aW1lc3RhbXApO1xuICAgIH1cblxuICAgIGlmIChpc0luY3JlbWVudGFsTW91c2VJbnRlcmFjdGlvbihldmVudCkpIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgaWQgfSA9IGV2ZW50LmRhdGE7XG4gICAgICBjb25zdCBub2RlID0gcmVjb3JkLm1pcnJvci5nZXROb2RlKGlkKTtcblxuICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0eXBlID09PSBNb3VzZUludGVyYWN0aW9ucy5DbGljaykge1xuICAgICAgICBjbGlja0RldGVjdG9yLnJlZ2lzdGVyQ2xpY2sobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBpZ25vcmUgZXJyb3JzIGhlcmUsIGUuZy4gaWYgYWNjZXNzaW5nIHNvbWV0aGluZyB0aGF0IGRvZXMgbm90IGV4aXN0XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNJbmNyZW1lbnRhbEV2ZW50KGV2ZW50KSB7XG4gIHJldHVybiBldmVudC50eXBlID09PSBSZXBsYXlFdmVudFR5cGVJbmNyZW1lbnRhbFNuYXBzaG90O1xufVxuXG5mdW5jdGlvbiBpc0luY3JlbWVudGFsTW91c2VJbnRlcmFjdGlvbihcbiAgZXZlbnQsXG4pIHtcbiAgcmV0dXJuIGV2ZW50LmRhdGEuc291cmNlID09PSBJbmNyZW1lbnRhbFNvdXJjZS5Nb3VzZUludGVyYWN0aW9uO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIGJyZWFkY3J1bWIgZm9yIGEgcmVwbGF5LlxuICovXG5mdW5jdGlvbiBjcmVhdGVCcmVhZGNydW1iKFxuICBicmVhZGNydW1iLFxuKSB7XG4gIHJldHVybiB7XG4gICAgdGltZXN0YW1wOiBEYXRlLm5vdygpIC8gMTAwMCxcbiAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgLi4uYnJlYWRjcnVtYixcbiAgfTtcbn1cblxudmFyIE5vZGVUeXBlID0gLyogQF9fUFVSRV9fICovICgoTm9kZVR5cGUyKSA9PiB7XG4gIE5vZGVUeXBlMltOb2RlVHlwZTJbXCJEb2N1bWVudFwiXSA9IDBdID0gXCJEb2N1bWVudFwiO1xuICBOb2RlVHlwZTJbTm9kZVR5cGUyW1wiRG9jdW1lbnRUeXBlXCJdID0gMV0gPSBcIkRvY3VtZW50VHlwZVwiO1xuICBOb2RlVHlwZTJbTm9kZVR5cGUyW1wiRWxlbWVudFwiXSA9IDJdID0gXCJFbGVtZW50XCI7XG4gIE5vZGVUeXBlMltOb2RlVHlwZTJbXCJUZXh0XCJdID0gM10gPSBcIlRleHRcIjtcbiAgTm9kZVR5cGUyW05vZGVUeXBlMltcIkNEQVRBXCJdID0gNF0gPSBcIkNEQVRBXCI7XG4gIE5vZGVUeXBlMltOb2RlVHlwZTJbXCJDb21tZW50XCJdID0gNV0gPSBcIkNvbW1lbnRcIjtcbiAgcmV0dXJuIE5vZGVUeXBlMjtcbn0pKE5vZGVUeXBlIHx8IHt9KTtcblxuLy8gTm90ZSB0aGF0IHRoZXNlIGFyZSB0aGUgc2VyaWFsaXplZCBhdHRyaWJ1dGVzIGFuZCBub3QgYXR0cmlidXRlcyBkaXJlY3RseSBvblxuLy8gdGhlIERPTSBOb2RlLiBBdHRyaWJ1dGVzIHdlIGFyZSBpbnRlcmVzdGVkIGluOlxuY29uc3QgQVRUUklCVVRFU19UT19SRUNPUkQgPSBuZXcgU2V0KFtcbiAgJ2lkJyxcbiAgJ2NsYXNzJyxcbiAgJ2FyaWEtbGFiZWwnLFxuICAncm9sZScsXG4gICduYW1lJyxcbiAgJ2FsdCcsXG4gICd0aXRsZScsXG4gICdkYXRhLXRlc3QtaWQnLFxuICAnZGF0YS10ZXN0aWQnLFxuICAnZGlzYWJsZWQnLFxuICAnYXJpYS1kaXNhYmxlZCcsXG4gICdkYXRhLXNlbnRyeS1jb21wb25lbnQnLFxuXSk7XG5cbi8qKlxuICogSW5jbHVzaW9uIGxpc3Qgb2YgYXR0cmlidXRlcyB0aGF0IHdlIHdhbnQgdG8gcmVjb3JkIGZyb20gdGhlIERPTSBlbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZXNUb1JlY29yZChhdHRyaWJ1dGVzKSB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuICBpZiAoIWF0dHJpYnV0ZXNbJ2RhdGEtc2VudHJ5LWNvbXBvbmVudCddICYmIGF0dHJpYnV0ZXNbJ2RhdGEtc2VudHJ5LWVsZW1lbnQnXSkge1xuICAgIGF0dHJpYnV0ZXNbJ2RhdGEtc2VudHJ5LWNvbXBvbmVudCddID0gYXR0cmlidXRlc1snZGF0YS1zZW50cnktZWxlbWVudCddO1xuICB9XG4gIGZvciAoY29uc3Qga2V5IGluIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoQVRUUklCVVRFU19UT19SRUNPUkQuaGFzKGtleSkpIHtcbiAgICAgIGxldCBub3JtYWxpemVkS2V5ID0ga2V5O1xuXG4gICAgICBpZiAoa2V5ID09PSAnZGF0YS10ZXN0aWQnIHx8IGtleSA9PT0gJ2RhdGEtdGVzdC1pZCcpIHtcbiAgICAgICAgbm9ybWFsaXplZEtleSA9ICd0ZXN0SWQnO1xuICAgICAgfVxuXG4gICAgICBvYmpbbm9ybWFsaXplZEtleV0gPSBhdHRyaWJ1dGVzW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuY29uc3QgaGFuZGxlRG9tTGlzdGVuZXIgPSAoXG4gIHJlcGxheSxcbikgPT4ge1xuICByZXR1cm4gKGhhbmRsZXJEYXRhKSA9PiB7XG4gICAgaWYgKCFyZXBsYXkuaXNFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBoYW5kbGVEb20oaGFuZGxlckRhdGEpO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc0NsaWNrID0gaGFuZGxlckRhdGEubmFtZSA9PT0gJ2NsaWNrJztcbiAgICBjb25zdCBldmVudCA9IGlzQ2xpY2sgPyAoaGFuZGxlckRhdGEuZXZlbnQgKSA6IHVuZGVmaW5lZDtcbiAgICAvLyBJZ25vcmUgY2xpY2tzIGlmIGN0cmwvYWx0L21ldGEvc2hpZnQga2V5cyBhcmUgaGVsZCBkb3duIGFzIHRoZXkgYWx0ZXIgYmVoYXZpb3Igb2YgY2xpY2tzIChlLmcuIG9wZW4gaW4gbmV3IHRhYilcbiAgICBpZiAoXG4gICAgICBpc0NsaWNrICYmXG4gICAgICByZXBsYXkuY2xpY2tEZXRlY3RvciAmJlxuICAgICAgZXZlbnQ/LnRhcmdldCAmJlxuICAgICAgIWV2ZW50LmFsdEtleSAmJlxuICAgICAgIWV2ZW50Lm1ldGFLZXkgJiZcbiAgICAgICFldmVudC5jdHJsS2V5ICYmXG4gICAgICAhZXZlbnQuc2hpZnRLZXlcbiAgICApIHtcbiAgICAgIGhhbmRsZUNsaWNrKFxuICAgICAgICByZXBsYXkuY2xpY2tEZXRlY3RvcixcbiAgICAgICAgcmVzdWx0ICxcbiAgICAgICAgZ2V0Q2xpY2tUYXJnZXROb2RlKGhhbmRsZXJEYXRhLmV2ZW50ICkgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBhZGRCcmVhZGNydW1iRXZlbnQocmVwbGF5LCByZXN1bHQpO1xuICB9O1xufTtcblxuLyoqIEdldCB0aGUgYmFzZSBET00gYnJlYWRjcnVtYi4gKi9cbmZ1bmN0aW9uIGdldEJhc2VEb21CcmVhZGNydW1iKHRhcmdldCwgbWVzc2FnZSkge1xuICBjb25zdCBub2RlSWQgPSByZWNvcmQubWlycm9yLmdldElkKHRhcmdldCk7XG4gIGNvbnN0IG5vZGUgPSBub2RlSWQgJiYgcmVjb3JkLm1pcnJvci5nZXROb2RlKG5vZGVJZCk7XG4gIGNvbnN0IG1ldGEgPSBub2RlICYmIHJlY29yZC5taXJyb3IuZ2V0TWV0YShub2RlKTtcbiAgY29uc3QgZWxlbWVudCA9IG1ldGEgJiYgaXNFbGVtZW50KG1ldGEpID8gbWV0YSA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlLFxuICAgIGRhdGE6IGVsZW1lbnRcbiAgICAgID8ge1xuICAgICAgICAgIG5vZGVJZCxcbiAgICAgICAgICBub2RlOiB7XG4gICAgICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICAgICAgdGFnTmFtZTogZWxlbWVudC50YWdOYW1lLFxuICAgICAgICAgICAgdGV4dENvbnRlbnQ6IEFycmF5LmZyb20oZWxlbWVudC5jaGlsZE5vZGVzKVxuICAgICAgICAgICAgICAubWFwKChub2RlKSA9PiBub2RlLnR5cGUgPT09IE5vZGVUeXBlLlRleHQgJiYgbm9kZS50ZXh0Q29udGVudClcbiAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKSAvLyBmaWx0ZXIgb3V0IGVtcHR5IHZhbHVlc1xuICAgICAgICAgICAgICAubWFwKHRleHQgPT4gKHRleHQgKS50cmltKCkpXG4gICAgICAgICAgICAgIC5qb2luKCcnKSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGdldEF0dHJpYnV0ZXNUb1JlY29yZChlbGVtZW50LmF0dHJpYnV0ZXMpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIDoge30sXG4gIH07XG59XG5cbi8qKlxuICogQW4gZXZlbnQgaGFuZGxlciB0byByZWFjdCB0byBET00gZXZlbnRzLlxuICogRXhwb3J0ZWQgZm9yIHRlc3RzLlxuICovXG5mdW5jdGlvbiBoYW5kbGVEb20oaGFuZGxlckRhdGEpIHtcbiAgY29uc3QgeyB0YXJnZXQsIG1lc3NhZ2UgfSA9IGdldERvbVRhcmdldChoYW5kbGVyRGF0YSk7XG5cbiAgcmV0dXJuIGNyZWF0ZUJyZWFkY3J1bWIoe1xuICAgIGNhdGVnb3J5OiBgdWkuJHtoYW5kbGVyRGF0YS5uYW1lfWAsXG4gICAgLi4uZ2V0QmFzZURvbUJyZWFkY3J1bWIodGFyZ2V0LCBtZXNzYWdlKSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldERvbVRhcmdldChoYW5kbGVyRGF0YSkge1xuICBjb25zdCBpc0NsaWNrID0gaGFuZGxlckRhdGEubmFtZSA9PT0gJ2NsaWNrJztcblxuICBsZXQgbWVzc2FnZTtcbiAgbGV0IHRhcmdldCA9IG51bGw7XG5cbiAgLy8gQWNjZXNzaW5nIGV2ZW50LnRhcmdldCBjYW4gdGhyb3cgKHNlZSBnZXRzZW50cnkvcmF2ZW4tanMjODM4LCAjNzY4KVxuICB0cnkge1xuICAgIHRhcmdldCA9IGlzQ2xpY2sgPyBnZXRDbGlja1RhcmdldE5vZGUoaGFuZGxlckRhdGEuZXZlbnQgKSA6IGdldFRhcmdldE5vZGUoaGFuZGxlckRhdGEuZXZlbnQgKTtcbiAgICBtZXNzYWdlID0gaHRtbFRyZWVBc1N0cmluZyh0YXJnZXQsIHsgbWF4U3RyaW5nTGVuZ3RoOiAyMDAgfSkgfHwgJzx1bmtub3duPic7XG4gIH0gY2F0Y2gge1xuICAgIG1lc3NhZ2UgPSAnPHVua25vd24+JztcbiAgfVxuXG4gIHJldHVybiB7IHRhcmdldCwgbWVzc2FnZSB9O1xufVxuXG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSBOb2RlVHlwZS5FbGVtZW50O1xufVxuXG4vKiogSGFuZGxlIGtleWJvYXJkIGV2ZW50cyAmIGNyZWF0ZSBicmVhZGNydW1icy4gKi9cbmZ1bmN0aW9uIGhhbmRsZUtleWJvYXJkRXZlbnQocmVwbGF5LCBldmVudCkge1xuICBpZiAoIXJlcGxheS5pc0VuYWJsZWQoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFVwZGF0ZSB1c2VyIGFjdGl2aXR5LCBidXQgZG8gbm90IHJlc3RhcnQgcmVjb3JkaW5nIGFzIGl0IGNhbiBjcmVhdGVcbiAgLy8gbm9pc3kvbG93LXZhbHVlIHJlcGxheXMgKGUuZy4gdXNlciBjb21lcyBiYWNrIGZyb20gaWRsZSwgaGl0cyBhbHQtdGFiLCBuZXdcbiAgLy8gc2Vzc2lvbiB3aXRoIGEgc2luZ2xlIFwia2V5ZG93blwiIGJyZWFkY3J1bWIgaXMgY3JlYXRlZClcbiAgcmVwbGF5LnVwZGF0ZVVzZXJBY3Rpdml0eSgpO1xuXG4gIGNvbnN0IGJyZWFkY3J1bWIgPSBnZXRLZXlib2FyZEJyZWFkY3J1bWIoZXZlbnQpO1xuXG4gIGlmICghYnJlYWRjcnVtYikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFkZEJyZWFkY3J1bWJFdmVudChyZXBsYXksIGJyZWFkY3J1bWIpO1xufVxuXG4vKiogZXhwb3J0ZWQgb25seSBmb3IgdGVzdHMgKi9cbmZ1bmN0aW9uIGdldEtleWJvYXJkQnJlYWRjcnVtYihldmVudCkge1xuICBjb25zdCB7IG1ldGFLZXksIHNoaWZ0S2V5LCBjdHJsS2V5LCBhbHRLZXksIGtleSwgdGFyZ2V0IH0gPSBldmVudDtcblxuICAvLyBuZXZlciBjYXB0dXJlIGZvciBpbnB1dCBmaWVsZHNcbiAgaWYgKCF0YXJnZXQgfHwgaXNJbnB1dEVsZW1lbnQodGFyZ2V0ICkgfHwgIWtleSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gTm90ZTogV2UgZG8gbm90IGNvbnNpZGVyIHNoaWZ0IGhlcmUsIGFzIHRoYXQgbWVhbnMgXCJ1cHBlcmNhc2VcIlxuICBjb25zdCBoYXNNb2RpZmllcktleSA9IG1ldGFLZXkgfHwgY3RybEtleSB8fCBhbHRLZXk7XG4gIGNvbnN0IGlzQ2hhcmFjdGVyS2V5ID0ga2V5Lmxlbmd0aCA9PT0gMTsgLy8gb3RoZXIga2V5cyBsaWtlIEVzY2FwZSwgVGFiLCBldGMgaGF2ZSBhIGxvbmdlciBsZW5ndGhcblxuICAvLyBEbyBub3QgY2FwdHVyZSBicmVhZGNydW1iIGlmIG9ubHkgYSB3b3JkIGtleSBpcyBwcmVzc2VkXG4gIC8vIFRoaXMgY291bGQgbGVhayBlLmcuIHVzZXIgaW5wdXRcbiAgaWYgKCFoYXNNb2RpZmllcktleSAmJiBpc0NoYXJhY3RlcktleSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbWVzc2FnZSA9IGh0bWxUcmVlQXNTdHJpbmcodGFyZ2V0LCB7IG1heFN0cmluZ0xlbmd0aDogMjAwIH0pIHx8ICc8dW5rbm93bj4nO1xuICBjb25zdCBiYXNlQnJlYWRjcnVtYiA9IGdldEJhc2VEb21CcmVhZGNydW1iKHRhcmdldCAsIG1lc3NhZ2UpO1xuXG4gIHJldHVybiBjcmVhdGVCcmVhZGNydW1iKHtcbiAgICBjYXRlZ29yeTogJ3VpLmtleURvd24nLFxuICAgIG1lc3NhZ2UsXG4gICAgZGF0YToge1xuICAgICAgLi4uYmFzZUJyZWFkY3J1bWIuZGF0YSxcbiAgICAgIG1ldGFLZXksXG4gICAgICBzaGlmdEtleSxcbiAgICAgIGN0cmxLZXksXG4gICAgICBhbHRLZXksXG4gICAgICBrZXksXG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzSW5wdXRFbGVtZW50KHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0LnRhZ05hbWUgPT09ICdJTlBVVCcgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdURVhUQVJFQScgfHwgdGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlO1xufVxuXG4vLyBNYXAgZW50cnlUeXBlIC0+IGZ1bmN0aW9uIHRvIG5vcm1hbGl6ZSBkYXRhIGZvciBldmVudFxuY29uc3QgRU5UUllfVFlQRVNcblxuID0ge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE86IGVudHJ5IHR5cGUgZG9lcyBub3QgZml0IHRoZSBjcmVhdGUqIGZ1bmN0aW9ucyBlbnRyeSB0eXBlXG4gIHJlc291cmNlOiBjcmVhdGVSZXNvdXJjZUVudHJ5LFxuICBwYWludDogY3JlYXRlUGFpbnRFbnRyeSxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBUT0RPOiBlbnRyeSB0eXBlIGRvZXMgbm90IGZpdCB0aGUgY3JlYXRlKiBmdW5jdGlvbnMgZW50cnkgdHlwZVxuICBuYXZpZ2F0aW9uOiBjcmVhdGVOYXZpZ2F0aW9uRW50cnksXG59O1xuXG4vKipcbiAqIEhhbmRsZXIgY3JlYXRlciBmb3Igd2ViIHZpdGFsc1xuICovXG5mdW5jdGlvbiB3ZWJWaXRhbEhhbmRsZXIoXG4gIGdldHRlcixcbiAgcmVwbGF5LFxuKSB7XG4gIHJldHVybiAoeyBtZXRyaWMgfSkgPT4gdm9pZCByZXBsYXkucmVwbGF5UGVyZm9ybWFuY2VFbnRyaWVzLnB1c2goZ2V0dGVyKG1ldHJpYykpO1xufVxuXG4vKipcbiAqIENyZWF0ZSByZXBsYXkgcGVyZm9ybWFuY2UgZW50cmllcyBmcm9tIHRoZSBicm93c2VyIHBlcmZvcm1hbmNlIGVudHJpZXMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBlcmZvcm1hbmNlRW50cmllcyhcbiAgZW50cmllcyxcbikge1xuICByZXR1cm4gZW50cmllcy5tYXAoY3JlYXRlUGVyZm9ybWFuY2VFbnRyeSkuZmlsdGVyKEJvb2xlYW4pIDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGVyZm9ybWFuY2VFbnRyeShlbnRyeSkge1xuICBjb25zdCBlbnRyeVR5cGUgPSBFTlRSWV9UWVBFU1tlbnRyeS5lbnRyeVR5cGVdO1xuICBpZiAoIWVudHJ5VHlwZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGVudHJ5VHlwZShlbnRyeSk7XG59XG5cbmZ1bmN0aW9uIGdldEFic29sdXRlVGltZSh0aW1lKSB7XG4gIC8vIGJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4gY2FuIGJlIHVuZGVmaW5lZCBpZiBgcGVyZm9ybWFuY2VgIG9yXG4gIC8vIGBwZXJmb3JtYW5jZS5ub3dgIGRvZXNuJ3QgZXhpc3QsIGJ1dCB0aGlzIGlzIGFscmVhZHkgY2hlY2tlZCBieSB0aGlzIGludGVncmF0aW9uXG4gIHJldHVybiAoKGJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4oKSB8fCBXSU5ET1cucGVyZm9ybWFuY2UudGltZU9yaWdpbikgKyB0aW1lKSAvIDEwMDA7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBhaW50RW50cnkoZW50cnkpIHtcbiAgY29uc3QgeyBkdXJhdGlvbiwgZW50cnlUeXBlLCBuYW1lLCBzdGFydFRpbWUgfSA9IGVudHJ5O1xuXG4gIGNvbnN0IHN0YXJ0ID0gZ2V0QWJzb2x1dGVUaW1lKHN0YXJ0VGltZSk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogZW50cnlUeXBlLFxuICAgIG5hbWUsXG4gICAgc3RhcnQsXG4gICAgZW5kOiBzdGFydCArIGR1cmF0aW9uLFxuICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTmF2aWdhdGlvbkVudHJ5KGVudHJ5KSB7XG4gIGNvbnN0IHtcbiAgICBlbnRyeVR5cGUsXG4gICAgbmFtZSxcbiAgICBkZWNvZGVkQm9keVNpemUsXG4gICAgZHVyYXRpb24sXG4gICAgZG9tQ29tcGxldGUsXG4gICAgZW5jb2RlZEJvZHlTaXplLFxuICAgIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0LFxuICAgIGRvbUNvbnRlbnRMb2FkZWRFdmVudEVuZCxcbiAgICBkb21JbnRlcmFjdGl2ZSxcbiAgICBsb2FkRXZlbnRTdGFydCxcbiAgICBsb2FkRXZlbnRFbmQsXG4gICAgcmVkaXJlY3RDb3VudCxcbiAgICBzdGFydFRpbWUsXG4gICAgdHJhbnNmZXJTaXplLFxuICAgIHR5cGUsXG4gIH0gPSBlbnRyeTtcblxuICAvLyBJZ25vcmUgZW50cmllcyB3aXRoIG5vIGR1cmF0aW9uLCB0aGV5IGRvIG5vdCBzZWVtIHRvIGJlIHVzZWZ1bCBhbmQgY2F1c2UgZHVwZXNcbiAgaWYgKGR1cmF0aW9uID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6IGAke2VudHJ5VHlwZX0uJHt0eXBlfWAsXG4gICAgc3RhcnQ6IGdldEFic29sdXRlVGltZShzdGFydFRpbWUpLFxuICAgIGVuZDogZ2V0QWJzb2x1dGVUaW1lKGRvbUNvbXBsZXRlKSxcbiAgICBuYW1lLFxuICAgIGRhdGE6IHtcbiAgICAgIHNpemU6IHRyYW5zZmVyU2l6ZSxcbiAgICAgIGRlY29kZWRCb2R5U2l6ZSxcbiAgICAgIGVuY29kZWRCb2R5U2l6ZSxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgZG9tSW50ZXJhY3RpdmUsXG4gICAgICBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCxcbiAgICAgIGRvbUNvbnRlbnRMb2FkZWRFdmVudEVuZCxcbiAgICAgIGxvYWRFdmVudFN0YXJ0LFxuICAgICAgbG9hZEV2ZW50RW5kLFxuICAgICAgZG9tQ29tcGxldGUsXG4gICAgICByZWRpcmVjdENvdW50LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlc291cmNlRW50cnkoXG4gIGVudHJ5LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBlbnRyeVR5cGUsXG4gICAgaW5pdGlhdG9yVHlwZSxcbiAgICBuYW1lLFxuICAgIHJlc3BvbnNlRW5kLFxuICAgIHN0YXJ0VGltZSxcbiAgICBkZWNvZGVkQm9keVNpemUsXG4gICAgZW5jb2RlZEJvZHlTaXplLFxuICAgIHJlc3BvbnNlU3RhdHVzLFxuICAgIHRyYW5zZmVyU2l6ZSxcbiAgfSA9IGVudHJ5O1xuXG4gIC8vIENvcmUgU0RLIGhhbmRsZXMgdGhlc2VcbiAgaWYgKFsnZmV0Y2gnLCAneG1saHR0cHJlcXVlc3QnXS5pbmNsdWRlcyhpbml0aWF0b3JUeXBlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgJHtlbnRyeVR5cGV9LiR7aW5pdGlhdG9yVHlwZX1gLFxuICAgIHN0YXJ0OiBnZXRBYnNvbHV0ZVRpbWUoc3RhcnRUaW1lKSxcbiAgICBlbmQ6IGdldEFic29sdXRlVGltZShyZXNwb25zZUVuZCksXG4gICAgbmFtZSxcbiAgICBkYXRhOiB7XG4gICAgICBzaXplOiB0cmFuc2ZlclNpemUsXG4gICAgICBzdGF0dXNDb2RlOiByZXNwb25zZVN0YXR1cyxcbiAgICAgIGRlY29kZWRCb2R5U2l6ZSxcbiAgICAgIGVuY29kZWRCb2R5U2l6ZSxcbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIEFkZCBhIExDUCBldmVudCB0byB0aGUgcmVwbGF5IGJhc2VkIG9uIGEgTENQIG1ldHJpYy5cbiAqL1xuZnVuY3Rpb24gZ2V0TGFyZ2VzdENvbnRlbnRmdWxQYWludChtZXRyaWMpIHtcbiAgY29uc3QgbGFzdEVudHJ5ID0gbWV0cmljLmVudHJpZXNbbWV0cmljLmVudHJpZXMubGVuZ3RoIC0gMV0gO1xuICBjb25zdCBub2RlID0gbGFzdEVudHJ5Py5lbGVtZW50ID8gW2xhc3RFbnRyeS5lbGVtZW50XSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIGdldFdlYlZpdGFsKG1ldHJpYywgJ2xhcmdlc3QtY29udGVudGZ1bC1wYWludCcsIG5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc0xheW91dFNoaWZ0KGVudHJ5KSB7XG4gIHJldHVybiAoZW50cnkgKS5zb3VyY2VzICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQWRkIGEgQ0xTIGV2ZW50IHRvIHRoZSByZXBsYXkgYmFzZWQgb24gYSBDTFMgbWV0cmljLlxuICovXG5mdW5jdGlvbiBnZXRDdW11bGF0aXZlTGF5b3V0U2hpZnQobWV0cmljKSB7XG4gIGNvbnN0IGxheW91dFNoaWZ0cyA9IFtdO1xuICBjb25zdCBub2RlcyA9IFtdO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIG1ldHJpYy5lbnRyaWVzKSB7XG4gICAgaWYgKGlzTGF5b3V0U2hpZnQoZW50cnkpKSB7XG4gICAgICBjb25zdCBub2RlSWRzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBlbnRyeS5zb3VyY2VzKSB7XG4gICAgICAgIGlmIChzb3VyY2Uubm9kZSkge1xuICAgICAgICAgIG5vZGVzLnB1c2goc291cmNlLm5vZGUpO1xuICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IHJlY29yZC5taXJyb3IuZ2V0SWQoc291cmNlLm5vZGUpO1xuICAgICAgICAgIGlmIChub2RlSWQpIHtcbiAgICAgICAgICAgIG5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGF5b3V0U2hpZnRzLnB1c2goeyB2YWx1ZTogZW50cnkudmFsdWUsIG5vZGVJZHM6IG5vZGVJZHMubGVuZ3RoID8gbm9kZUlkcyA6IHVuZGVmaW5lZCB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0V2ViVml0YWwobWV0cmljLCAnY3VtdWxhdGl2ZS1sYXlvdXQtc2hpZnQnLCBub2RlcywgbGF5b3V0U2hpZnRzKTtcbn1cblxuLyoqXG4gKiBBZGQgYSBGSUQgZXZlbnQgdG8gdGhlIHJlcGxheSBiYXNlZCBvbiBhIEZJRCBtZXRyaWMuXG4gKi9cbmZ1bmN0aW9uIGdldEZpcnN0SW5wdXREZWxheShtZXRyaWMpIHtcbiAgY29uc3QgbGFzdEVudHJ5ID0gbWV0cmljLmVudHJpZXNbbWV0cmljLmVudHJpZXMubGVuZ3RoIC0gMV0gO1xuICBjb25zdCBub2RlID0gbGFzdEVudHJ5Py50YXJnZXQgPyBbbGFzdEVudHJ5LnRhcmdldF0gOiB1bmRlZmluZWQ7XG4gIHJldHVybiBnZXRXZWJWaXRhbChtZXRyaWMsICdmaXJzdC1pbnB1dC1kZWxheScsIG5vZGUpO1xufVxuXG4vKipcbiAqIEFkZCBhbiBJTlAgZXZlbnQgdG8gdGhlIHJlcGxheSBiYXNlZCBvbiBhbiBJTlAgbWV0cmljLlxuICovXG5mdW5jdGlvbiBnZXRJbnRlcmFjdGlvblRvTmV4dFBhaW50KG1ldHJpYykge1xuICBjb25zdCBsYXN0RW50cnkgPSBtZXRyaWMuZW50cmllc1ttZXRyaWMuZW50cmllcy5sZW5ndGggLSAxXSA7XG4gIGNvbnN0IG5vZGUgPSBsYXN0RW50cnk/LnRhcmdldCA/IFtsYXN0RW50cnkudGFyZ2V0XSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIGdldFdlYlZpdGFsKG1ldHJpYywgJ2ludGVyYWN0aW9uLXRvLW5leHQtcGFpbnQnLCBub2RlKTtcbn1cblxuLyoqXG4gKiBBZGQgYW4gd2ViIHZpdGFsIGV2ZW50IHRvIHRoZSByZXBsYXkgYmFzZWQgb24gdGhlIHdlYiB2aXRhbCBtZXRyaWMuXG4gKi9cbmZ1bmN0aW9uIGdldFdlYlZpdGFsKFxuICBtZXRyaWMsXG4gIG5hbWUsXG4gIG5vZGVzLFxuICBhdHRyaWJ1dGlvbnMsXG4pIHtcbiAgY29uc3QgdmFsdWUgPSBtZXRyaWMudmFsdWU7XG4gIGNvbnN0IHJhdGluZyA9IG1ldHJpYy5yYXRpbmc7XG5cbiAgY29uc3QgZW5kID0gZ2V0QWJzb2x1dGVUaW1lKHZhbHVlKTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICd3ZWItdml0YWwnLFxuICAgIG5hbWUsXG4gICAgc3RhcnQ6IGVuZCxcbiAgICBlbmQsXG4gICAgZGF0YToge1xuICAgICAgdmFsdWUsXG4gICAgICBzaXplOiB2YWx1ZSxcbiAgICAgIHJhdGluZyxcbiAgICAgIG5vZGVJZHM6IG5vZGVzID8gbm9kZXMubWFwKG5vZGUgPT4gcmVjb3JkLm1pcnJvci5nZXRJZChub2RlKSkgOiB1bmRlZmluZWQsXG4gICAgICBhdHRyaWJ1dGlvbnMsXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBTZXRzIHVwIGEgUGVyZm9ybWFuY2VPYnNlcnZlciB0byBsaXN0ZW4gdG8gYWxsIHBlcmZvcm1hbmNlIGVudHJ5IHR5cGVzLlxuICogUmV0dXJucyBhIGNhbGxiYWNrIHRvIHN0b3Agb2JzZXJ2aW5nLlxuICovXG5mdW5jdGlvbiBzZXR1cFBlcmZvcm1hbmNlT2JzZXJ2ZXIocmVwbGF5KSB7XG4gIGZ1bmN0aW9uIGFkZFBlcmZvcm1hbmNlRW50cnkoZW50cnkpIHtcbiAgICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgZW50cmllcyB0byBjb21lIHVwIG11bHRpcGxlIHRpbWVzXG4gICAgaWYgKCFyZXBsYXkucGVyZm9ybWFuY2VFbnRyaWVzLmluY2x1ZGVzKGVudHJ5KSkge1xuICAgICAgcmVwbGF5LnBlcmZvcm1hbmNlRW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbkVudHJpZXMoeyBlbnRyaWVzIH0pIHtcbiAgICBlbnRyaWVzLmZvckVhY2goYWRkUGVyZm9ybWFuY2VFbnRyeSk7XG4gIH1cblxuICBjb25zdCBjbGVhckNhbGxiYWNrcyA9IFtdO1xuXG4gIChbJ25hdmlnYXRpb24nLCAncGFpbnQnLCAncmVzb3VyY2UnXSApLmZvckVhY2godHlwZSA9PiB7XG4gICAgY2xlYXJDYWxsYmFja3MucHVzaChhZGRQZXJmb3JtYW5jZUluc3RydW1lbnRhdGlvbkhhbmRsZXIodHlwZSwgb25FbnRyaWVzKSk7XG4gIH0pO1xuXG4gIGNsZWFyQ2FsbGJhY2tzLnB1c2goXG4gICAgYWRkTGNwSW5zdHJ1bWVudGF0aW9uSGFuZGxlcih3ZWJWaXRhbEhhbmRsZXIoZ2V0TGFyZ2VzdENvbnRlbnRmdWxQYWludCwgcmVwbGF5KSksXG4gICAgYWRkQ2xzSW5zdHJ1bWVudGF0aW9uSGFuZGxlcih3ZWJWaXRhbEhhbmRsZXIoZ2V0Q3VtdWxhdGl2ZUxheW91dFNoaWZ0LCByZXBsYXkpKSxcbiAgICBhZGRGaWRJbnN0cnVtZW50YXRpb25IYW5kbGVyKHdlYlZpdGFsSGFuZGxlcihnZXRGaXJzdElucHV0RGVsYXksIHJlcGxheSkpLFxuICAgIGFkZElucEluc3RydW1lbnRhdGlvbkhhbmRsZXIod2ViVml0YWxIYW5kbGVyKGdldEludGVyYWN0aW9uVG9OZXh0UGFpbnQsIHJlcGxheSkpLFxuICApO1xuXG4gIC8vIEEgY2FsbGJhY2sgdG8gY2xlYW51cCBhbGwgaGFuZGxlcnNcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbGVhckNhbGxiYWNrcy5mb3JFYWNoKGNsZWFyQ2FsbGJhY2sgPT4gY2xlYXJDYWxsYmFjaygpKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGlzIHNlcnZlcyBhcyBhIGJ1aWxkIHRpbWUgZmxhZyB0aGF0IHdpbGwgYmUgdHJ1ZSBieSBkZWZhdWx0LCBidXQgZmFsc2UgaW4gbm9uLWRlYnVnIGJ1aWxkcyBvciBpZiB1c2VycyByZXBsYWNlIGBfX1NFTlRSWV9ERUJVR19fYCBpbiB0aGVpciBnZW5lcmF0ZWQgY29kZS5cbiAqXG4gKiBBVFRFTlRJT046IFRoaXMgY29uc3RhbnQgbXVzdCBuZXZlciBjcm9zcyBwYWNrYWdlIGJvdW5kYXJpZXMgKGkuZS4gYmUgZXhwb3J0ZWQpIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciB0cmVlIHNoYWtpbmcuXG4gKi9cbmNvbnN0IERFQlVHX0JVSUxEID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTtcblxuY29uc3QgciA9IGB2YXIgdD1VaW50OEFycmF5LG49VWludDE2QXJyYXkscj1JbnQzMkFycmF5LGU9bmV3IHQoWzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMCwwLDAsMF0pLGk9bmV3IHQoWzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTMsMCwwXSkscz1uZXcgdChbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLGE9ZnVuY3Rpb24odCxlKXtmb3IodmFyIGk9bmV3IG4oMzEpLHM9MDtzPDMxOysrcylpW3NdPWUrPTE8PHRbcy0xXTt2YXIgYT1uZXcgcihpWzMwXSk7Zm9yKHM9MTtzPDMwOysrcylmb3IodmFyIG89aVtzXTtvPGlbcysxXTsrK28pYVtvXT1vLWlbc108PDV8cztyZXR1cm57YjppLHI6YX19LG89YShlLDIpLGg9by5iLGY9by5yO2hbMjhdPTI1OCxmWzI1OF09Mjg7Zm9yKHZhciBsPWEoaSwwKS5yLHU9bmV3IG4oMzI3NjgpLGM9MDtjPDMyNzY4OysrYyl7dmFyIHY9KDQzNjkwJmMpPj4xfCgyMTg0NSZjKTw8MTt2PSg2MTY4MCYodj0oNTI0Mjgmdik+PjJ8KDEzMTA3JnYpPDwyKSk+PjR8KDM4NTUmdik8PDQsdVtjXT0oKDY1MjgwJnYpPj44fCgyNTUmdik8PDgpPj4xfXZhciBkPWZ1bmN0aW9uKHQscixlKXtmb3IodmFyIGk9dC5sZW5ndGgscz0wLGE9bmV3IG4ocik7czxpOysrcyl0W3NdJiYrK2FbdFtzXS0xXTt2YXIgbyxoPW5ldyBuKHIpO2ZvcihzPTE7czxyOysrcyloW3NdPWhbcy0xXSthW3MtMV08PDE7aWYoZSl7bz1uZXcgbigxPDxyKTt2YXIgZj0xNS1yO2ZvcihzPTA7czxpOysrcylpZih0W3NdKWZvcih2YXIgbD1zPDw0fHRbc10sYz1yLXRbc10sdj1oW3Rbc10tMV0rKzw8YyxkPXZ8KDE8PGMpLTE7djw9ZDsrK3Ypb1t1W3ZdPj5mXT1sfWVsc2UgZm9yKG89bmV3IG4oaSkscz0wO3M8aTsrK3MpdFtzXSYmKG9bc109dVtoW3Rbc10tMV0rK10+PjE1LXRbc10pO3JldHVybiBvfSxwPW5ldyB0KDI4OCk7Zm9yKGM9MDtjPDE0NDsrK2MpcFtjXT04O2ZvcihjPTE0NDtjPDI1NjsrK2MpcFtjXT05O2ZvcihjPTI1NjtjPDI4MDsrK2MpcFtjXT03O2ZvcihjPTI4MDtjPDI4ODsrK2MpcFtjXT04O3ZhciBnPW5ldyB0KDMyKTtmb3IoYz0wO2M8MzI7KytjKWdbY109NTt2YXIgdz1kKHAsOSwwKSx5PWQoZyw1LDApLG09ZnVuY3Rpb24odCl7cmV0dXJuKHQrNykvOHwwfSxiPWZ1bmN0aW9uKG4scixlKXtyZXR1cm4obnVsbD09ZXx8ZT5uLmxlbmd0aCkmJihlPW4ubGVuZ3RoKSxuZXcgdChuLnN1YmFycmF5KHIsZSkpfSxNPVtcInVuZXhwZWN0ZWQgRU9GXCIsXCJpbnZhbGlkIGJsb2NrIHR5cGVcIixcImludmFsaWQgbGVuZ3RoL2xpdGVyYWxcIixcImludmFsaWQgZGlzdGFuY2VcIixcInN0cmVhbSBmaW5pc2hlZFwiLFwibm8gc3RyZWFtIGhhbmRsZXJcIiwsXCJubyBjYWxsYmFja1wiLFwiaW52YWxpZCBVVEYtOCBkYXRhXCIsXCJleHRyYSBmaWVsZCB0b28gbG9uZ1wiLFwiZGF0ZSBub3QgaW4gcmFuZ2UgMTk4MC0yMDk5XCIsXCJmaWxlbmFtZSB0b28gbG9uZ1wiLFwic3RyZWFtIGZpbmlzaGluZ1wiLFwiaW52YWxpZCB6aXAgZGF0YVwiXSxFPWZ1bmN0aW9uKHQsbixyKXt2YXIgZT1uZXcgRXJyb3Iobnx8TVt0XSk7aWYoZS5jb2RlPXQsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGUsRSksIXIpdGhyb3cgZTtyZXR1cm4gZX0sej1mdW5jdGlvbih0LG4scil7cjw8PTcmbjt2YXIgZT1uLzh8MDt0W2VdfD1yLHRbZSsxXXw9cj4+OH0sXz1mdW5jdGlvbih0LG4scil7cjw8PTcmbjt2YXIgZT1uLzh8MDt0W2VdfD1yLHRbZSsxXXw9cj4+OCx0W2UrMl18PXI+PjE2fSx4PWZ1bmN0aW9uKHIsZSl7Zm9yKHZhciBpPVtdLHM9MDtzPHIubGVuZ3RoOysrcylyW3NdJiZpLnB1c2goe3M6cyxmOnJbc119KTt2YXIgYT1pLmxlbmd0aCxvPWkuc2xpY2UoKTtpZighYSlyZXR1cm57dDpGLGw6MH07aWYoMT09YSl7dmFyIGg9bmV3IHQoaVswXS5zKzEpO3JldHVybiBoW2lbMF0uc109MSx7dDpoLGw6MX19aS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQuZi1uLmZ9KSxpLnB1c2goe3M6LTEsZjoyNTAwMX0pO3ZhciBmPWlbMF0sbD1pWzFdLHU9MCxjPTEsdj0yO2ZvcihpWzBdPXtzOi0xLGY6Zi5mK2wuZixsOmYscjpsfTtjIT1hLTE7KWY9aVtpW3VdLmY8aVt2XS5mP3UrKzp2KytdLGw9aVt1IT1jJiZpW3VdLmY8aVt2XS5mP3UrKzp2KytdLGlbYysrXT17czotMSxmOmYuZitsLmYsbDpmLHI6bH07dmFyIGQ9b1swXS5zO2ZvcihzPTE7czxhOysrcylvW3NdLnM+ZCYmKGQ9b1tzXS5zKTt2YXIgcD1uZXcgbihkKzEpLGc9QShpW2MtMV0scCwwKTtpZihnPmUpe3M9MDt2YXIgdz0wLHk9Zy1lLG09MTw8eTtmb3Ioby5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIHBbbi5zXS1wW3Quc118fHQuZi1uLmZ9KTtzPGE7KytzKXt2YXIgYj1vW3NdLnM7aWYoIShwW2JdPmUpKWJyZWFrO3crPW0tKDE8PGctcFtiXSkscFtiXT1lfWZvcih3Pj49eTt3PjA7KXt2YXIgTT1vW3NdLnM7cFtNXTxlP3ctPTE8PGUtcFtNXSsrLTE6KytzfWZvcig7cz49MCYmdzstLXMpe3ZhciBFPW9bc10ucztwW0VdPT1lJiYoLS1wW0VdLCsrdyl9Zz1lfXJldHVybnt0Om5ldyB0KHApLGw6Z319LEE9ZnVuY3Rpb24odCxuLHIpe3JldHVybi0xPT10LnM/TWF0aC5tYXgoQSh0LmwsbixyKzEpLEEodC5yLG4scisxKSk6blt0LnNdPXJ9LEQ9ZnVuY3Rpb24odCl7Zm9yKHZhciByPXQubGVuZ3RoO3ImJiF0Wy0tcl07KTtmb3IodmFyIGU9bmV3IG4oKytyKSxpPTAscz10WzBdLGE9MSxvPWZ1bmN0aW9uKHQpe2VbaSsrXT10fSxoPTE7aDw9cjsrK2gpaWYodFtoXT09cyYmaCE9cikrK2E7ZWxzZXtpZighcyYmYT4yKXtmb3IoO2E+MTM4O2EtPTEzOClvKDMyNzU0KTthPjImJihvKGE+MTA/YS0xMTw8NXwyODY5MDphLTM8PDV8MTIzMDUpLGE9MCl9ZWxzZSBpZihhPjMpe2ZvcihvKHMpLC0tYTthPjY7YS09NilvKDgzMDQpO2E+MiYmKG8oYS0zPDw1fDgyMDgpLGE9MCl9Zm9yKDthLS07KW8ocyk7YT0xLHM9dFtoXX1yZXR1cm57YzplLnN1YmFycmF5KDAsaSksbjpyfX0sVD1mdW5jdGlvbih0LG4pe2Zvcih2YXIgcj0wLGU9MDtlPG4ubGVuZ3RoOysrZSlyKz10W2VdKm5bZV07cmV0dXJuIHJ9LGs9ZnVuY3Rpb24odCxuLHIpe3ZhciBlPXIubGVuZ3RoLGk9bShuKzIpO3RbaV09MjU1JmUsdFtpKzFdPWU+PjgsdFtpKzJdPTI1NV50W2ldLHRbaSszXT0yNTVedFtpKzFdO2Zvcih2YXIgcz0wO3M8ZTsrK3MpdFtpK3MrNF09cltzXTtyZXR1cm4gOCooaSs0K2UpfSxVPWZ1bmN0aW9uKHQscixhLG8saCxmLGwsdSxjLHYsbSl7eihyLG0rKyxhKSwrK2hbMjU2XTtmb3IodmFyIGI9eChoLDE1KSxNPWIudCxFPWIubCxBPXgoZiwxNSksVT1BLnQsQz1BLmwsRj1EKE0pLEk9Ri5jLFM9Ri5uLEw9RChVKSxPPUwuYyxqPUwubixxPW5ldyBuKDE5KSxCPTA7QjxJLmxlbmd0aDsrK0IpKytxWzMxJklbQl1dO2ZvcihCPTA7QjxPLmxlbmd0aDsrK0IpKytxWzMxJk9bQl1dO2Zvcih2YXIgRz14KHEsNyksSD1HLnQsSj1HLmwsSz0xOTtLPjQmJiFIW3NbSy0xXV07LS1LKTt2YXIgTixQLFEsUixWPXYrNTw8MyxXPVQoaCxwKStUKGYsZykrbCxYPVQoaCxNKStUKGYsVSkrbCsxNCszKksrVChxLEgpKzIqcVsxNl0rMypxWzE3XSs3KnFbMThdO2lmKGM+PTAmJlY8PVcmJlY8PVgpcmV0dXJuIGsocixtLHQuc3ViYXJyYXkoYyxjK3YpKTtpZih6KHIsbSwxKyhYPFcpKSxtKz0yLFg8Vyl7Tj1kKE0sRSwwKSxQPU0sUT1kKFUsQywwKSxSPVU7dmFyIFk9ZChILEosMCk7eihyLG0sUy0yNTcpLHoocixtKzUsai0xKSx6KHIsbSsxMCxLLTQpLG0rPTE0O2ZvcihCPTA7QjxLOysrQil6KHIsbSszKkIsSFtzW0JdXSk7bSs9MypLO2Zvcih2YXIgWj1bSSxPXSwkPTA7JDwyOysrJCl7dmFyIHR0PVpbJF07Zm9yKEI9MDtCPHR0Lmxlbmd0aDsrK0Ipe3ZhciBudD0zMSZ0dFtCXTt6KHIsbSxZW250XSksbSs9SFtudF0sbnQ+MTUmJih6KHIsbSx0dFtCXT4+NSYxMjcpLG0rPXR0W0JdPj4xMil9fX1lbHNlIE49dyxQPXAsUT15LFI9Zztmb3IoQj0wO0I8dTsrK0Ipe3ZhciBydD1vW0JdO2lmKHJ0PjI1NSl7XyhyLG0sTlsobnQ9cnQ+PjE4JjMxKSsyNTddKSxtKz1QW250KzI1N10sbnQ+NyYmKHoocixtLHJ0Pj4yMyYzMSksbSs9ZVtudF0pO3ZhciBldD0zMSZydDtfKHIsbSxRW2V0XSksbSs9UltldF0sZXQ+MyYmKF8ocixtLHJ0Pj41JjgxOTEpLG0rPWlbZXRdKX1lbHNlIF8ocixtLE5bcnRdKSxtKz1QW3J0XX1yZXR1cm4gXyhyLG0sTlsyNTZdKSxtK1BbMjU2XX0sQz1uZXcgcihbNjU1NDAsMTMxMDgwLDEzMTA4OCwxMzExMDQsMjYyMTc2LDEwNDg3MDQsMTA0ODgzMiwyMTE0NTYwLDIxMTc2MzJdKSxGPW5ldyB0KDApLEk9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IEludDMyQXJyYXkoMjU2KSxuPTA7bjwyNTY7KytuKXtmb3IodmFyIHI9bixlPTk7LS1lOylyPSgxJnImJi0zMDY2NzQ5MTIpXnI+Pj4xO3Rbbl09cn1yZXR1cm4gdH0oKSxTPWZ1bmN0aW9uKCl7dmFyIHQ9MSxuPTA7cmV0dXJue3A6ZnVuY3Rpb24ocil7Zm9yKHZhciBlPXQsaT1uLHM9MHxyLmxlbmd0aCxhPTA7YSE9czspe2Zvcih2YXIgbz1NYXRoLm1pbihhKzI2NTUscyk7YTxvOysrYSlpKz1lKz1yW2FdO2U9KDY1NTM1JmUpKzE1KihlPj4xNiksaT0oNjU1MzUmaSkrMTUqKGk+PjE2KX10PWUsbj1pfSxkOmZ1bmN0aW9uKCl7cmV0dXJuKDI1NSYodCU9NjU1MjEpKTw8MjR8KDY1MjgwJnQpPDw4fCgyNTUmKG4lPTY1NTIxKSk8PDh8bj4+OH19fSxMPWZ1bmN0aW9uKHMsYSxvLGgsdSl7aWYoIXUmJih1PXtsOjF9LGEuZGljdGlvbmFyeSkpe3ZhciBjPWEuZGljdGlvbmFyeS5zdWJhcnJheSgtMzI3NjgpLHY9bmV3IHQoYy5sZW5ndGgrcy5sZW5ndGgpO3Yuc2V0KGMpLHYuc2V0KHMsYy5sZW5ndGgpLHM9dix1Lnc9Yy5sZW5ndGh9cmV0dXJuIGZ1bmN0aW9uKHMsYSxvLGgsdSxjKXt2YXIgdj1jLnp8fHMubGVuZ3RoLGQ9bmV3IHQoaCt2KzUqKDErTWF0aC5jZWlsKHYvN2UzKSkrdSkscD1kLnN1YmFycmF5KGgsZC5sZW5ndGgtdSksZz1jLmwsdz03JihjLnJ8fDApO2lmKGEpe3cmJihwWzBdPWMucj4+Myk7Zm9yKHZhciB5PUNbYS0xXSxNPXk+PjEzLEU9ODE5MSZ5LHo9KDE8PG8pLTEsXz1jLnB8fG5ldyBuKDMyNzY4KSx4PWMuaHx8bmV3IG4oeisxKSxBPU1hdGguY2VpbChvLzMpLEQ9MipBLFQ9ZnVuY3Rpb24odCl7cmV0dXJuKHNbdF1ec1t0KzFdPDxBXnNbdCsyXTw8RCkmen0sRj1uZXcgcigyNWUzKSxJPW5ldyBuKDI4OCksUz1uZXcgbigzMiksTD0wLE89MCxqPWMuaXx8MCxxPTAsQj1jLnd8fDAsRz0wO2orMjx2Oysrail7dmFyIEg9VChqKSxKPTMyNzY3JmosSz14W0hdO2lmKF9bSl09Syx4W0hdPUosQjw9ail7dmFyIE49di1qO2lmKChMPjdlM3x8cT4yNDU3NikmJihOPjQyM3x8IWcpKXt3PVUocyxwLDAsRixJLFMsTyxxLEcsai1HLHcpLHE9TD1PPTAsRz1qO2Zvcih2YXIgUD0wO1A8Mjg2OysrUClJW1BdPTA7Zm9yKFA9MDtQPDMwOysrUClTW1BdPTB9dmFyIFE9MixSPTAsVj1FLFc9Si1LJjMyNzY3O2lmKE4+MiYmSD09VChqLVcpKWZvcih2YXIgWD1NYXRoLm1pbihNLE4pLTEsWT1NYXRoLm1pbigzMjc2NyxqKSxaPU1hdGgubWluKDI1OCxOKTtXPD1ZJiYtLVYmJkohPUs7KXtpZihzW2orUV09PXNbaitRLVddKXtmb3IodmFyICQ9MDskPFomJnNbaiskXT09c1tqKyQtV107KyskKTtpZigkPlEpe2lmKFE9JCxSPVcsJD5YKWJyZWFrO3ZhciB0dD1NYXRoLm1pbihXLCQtMiksbnQ9MDtmb3IoUD0wO1A8dHQ7KytQKXt2YXIgcnQ9ai1XK1AmMzI3NjcsZXQ9cnQtX1tydF0mMzI3Njc7ZXQ+bnQmJihudD1ldCxLPXJ0KX19fVcrPShKPUspLShLPV9bSl0pJjMyNzY3fWlmKFIpe0ZbcSsrXT0yNjg0MzU0NTZ8ZltRXTw8MTh8bFtSXTt2YXIgaXQ9MzEmZltRXSxzdD0zMSZsW1JdO08rPWVbaXRdK2lbc3RdLCsrSVsyNTcraXRdLCsrU1tzdF0sQj1qK1EsKytMfWVsc2UgRltxKytdPXNbal0sKytJW3Nbal1dfX1mb3Ioaj1NYXRoLm1heChqLEIpO2o8djsrK2opRltxKytdPXNbal0sKytJW3Nbal1dO3c9VShzLHAsZyxGLEksUyxPLHEsRyxqLUcsdyksZ3x8KGMucj03Jnd8cFt3Lzh8MF08PDMsdy09NyxjLmg9eCxjLnA9XyxjLmk9aixjLnc9Qil9ZWxzZXtmb3Ioaj1jLnd8fDA7ajx2K2c7ais9NjU1MzUpe3ZhciBhdD1qKzY1NTM1O2F0Pj12JiYocFt3Lzh8MF09ZyxhdD12KSx3PWsocCx3KzEscy5zdWJhcnJheShqLGF0KSl9Yy5pPXZ9cmV0dXJuIGIoZCwwLGgrbSh3KSt1KX0ocyxudWxsPT1hLmxldmVsPzY6YS5sZXZlbCxudWxsPT1hLm1lbT91Lmw/TWF0aC5jZWlsKDEuNSpNYXRoLm1heCg4LE1hdGgubWluKDEzLE1hdGgubG9nKHMubGVuZ3RoKSkpKToyMDoxMithLm1lbSxvLGgsdSl9LE89ZnVuY3Rpb24odCxuLHIpe2Zvcig7cjsrK24pdFtuXT1yLHI+Pj49OH0saj1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixyKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiYocj1uLG49e30pLHRoaXMub25kYXRhPXIsdGhpcy5vPW58fHt9LHRoaXMucz17bDowLGk6MzI3NjgsdzozMjc2OCx6OjMyNzY4fSx0aGlzLmI9bmV3IHQoOTgzMDQpLHRoaXMuby5kaWN0aW9uYXJ5KXt2YXIgZT10aGlzLm8uZGljdGlvbmFyeS5zdWJhcnJheSgtMzI3NjgpO3RoaXMuYi5zZXQoZSwzMjc2OC1lLmxlbmd0aCksdGhpcy5zLmk9MzI3NjgtZS5sZW5ndGh9fXJldHVybiBuLnByb3RvdHlwZS5wPWZ1bmN0aW9uKHQsbil7dGhpcy5vbmRhdGEoTCh0LHRoaXMubywwLDAsdGhpcy5zKSxuKX0sbi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihuLHIpe3RoaXMub25kYXRhfHxFKDUpLHRoaXMucy5sJiZFKDQpO3ZhciBlPW4ubGVuZ3RoK3RoaXMucy56O2lmKGU+dGhpcy5iLmxlbmd0aCl7aWYoZT4yKnRoaXMuYi5sZW5ndGgtMzI3Njgpe3ZhciBpPW5ldyB0KC0zMjc2OCZlKTtpLnNldCh0aGlzLmIuc3ViYXJyYXkoMCx0aGlzLnMueikpLHRoaXMuYj1pfXZhciBzPXRoaXMuYi5sZW5ndGgtdGhpcy5zLno7dGhpcy5iLnNldChuLnN1YmFycmF5KDAscyksdGhpcy5zLnopLHRoaXMucy56PXRoaXMuYi5sZW5ndGgsdGhpcy5wKHRoaXMuYiwhMSksdGhpcy5iLnNldCh0aGlzLmIuc3ViYXJyYXkoLTMyNzY4KSksdGhpcy5iLnNldChuLnN1YmFycmF5KHMpLDMyNzY4KSx0aGlzLnMuej1uLmxlbmd0aC1zKzMyNzY4LHRoaXMucy5pPTMyNzY2LHRoaXMucy53PTMyNzY4fWVsc2UgdGhpcy5iLnNldChuLHRoaXMucy56KSx0aGlzLnMueis9bi5sZW5ndGg7dGhpcy5zLmw9MSZyLCh0aGlzLnMuej50aGlzLnMudys4MTkxfHxyKSYmKHRoaXMucCh0aGlzLmIscnx8ITEpLHRoaXMucy53PXRoaXMucy5pLHRoaXMucy5pLT0yKX0sbi5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXt0aGlzLm9uZGF0YXx8RSg1KSx0aGlzLnMubCYmRSg0KSx0aGlzLnAodGhpcy5iLCExKSx0aGlzLnMudz10aGlzLnMuaSx0aGlzLnMuaS09Mn0sbn0oKTtmdW5jdGlvbiBxKHQsbil7bnx8KG49e30pO3ZhciByPWZ1bmN0aW9uKCl7dmFyIHQ9LTE7cmV0dXJue3A6ZnVuY3Rpb24obil7Zm9yKHZhciByPXQsZT0wO2U8bi5sZW5ndGg7KytlKXI9SVsyNTUmcl5uW2VdXV5yPj4+ODt0PXJ9LGQ6ZnVuY3Rpb24oKXtyZXR1cm5+dH19fSgpLGU9dC5sZW5ndGg7ci5wKHQpO3ZhciBpLHM9TCh0LG4sMTArKChpPW4pLmZpbGVuYW1lP2kuZmlsZW5hbWUubGVuZ3RoKzE6MCksOCksYT1zLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcj1uLmZpbGVuYW1lO2lmKHRbMF09MzEsdFsxXT0xMzksdFsyXT04LHRbOF09bi5sZXZlbDwyPzQ6OT09bi5sZXZlbD8yOjAsdFs5XT0zLDAhPW4ubXRpbWUmJk8odCw0LE1hdGguZmxvb3IobmV3IERhdGUobi5tdGltZXx8RGF0ZS5ub3coKSkvMWUzKSkscil7dFszXT04O2Zvcih2YXIgZT0wO2U8PXIubGVuZ3RoOysrZSl0W2UrMTBdPXIuY2hhckNvZGVBdChlKX19KHMsbiksTyhzLGEtOCxyLmQoKSksTyhzLGEtNCxlKSxzfXZhciBCPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LG4pe3RoaXMuYz1TKCksdGhpcy52PTEsai5jYWxsKHRoaXMsdCxuKX1yZXR1cm4gdC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0LG4pe3RoaXMuYy5wKHQpLGoucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLHQsbil9LHQucHJvdG90eXBlLnA9ZnVuY3Rpb24odCxuKXt2YXIgcj1MKHQsdGhpcy5vLHRoaXMudiYmKHRoaXMuby5kaWN0aW9uYXJ5PzY6MiksbiYmNCx0aGlzLnMpO3RoaXMudiYmKGZ1bmN0aW9uKHQsbil7dmFyIHI9bi5sZXZlbCxlPTA9PXI/MDpyPDY/MTo5PT1yPzM6MjtpZih0WzBdPTEyMCx0WzFdPWU8PDZ8KG4uZGljdGlvbmFyeSYmMzIpLHRbMV18PTMxLSh0WzBdPDw4fHRbMV0pJTMxLG4uZGljdGlvbmFyeSl7dmFyIGk9UygpO2kucChuLmRpY3Rpb25hcnkpLE8odCwyLGkuZCgpKX19KHIsdGhpcy5vKSx0aGlzLnY9MCksbiYmTyhyLHIubGVuZ3RoLTQsdGhpcy5jLmQoKSksdGhpcy5vbmRhdGEocixuKX0sdC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtqLnByb3RvdHlwZS5mbHVzaC5jYWxsKHRoaXMpfSx0fSgpLEc9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFRleHRFbmNvZGVyJiZuZXcgVGV4dEVuY29kZXIsSD1cInVuZGVmaW5lZFwiIT10eXBlb2YgVGV4dERlY29kZXImJm5ldyBUZXh0RGVjb2Rlcjt0cnl7SC5kZWNvZGUoRix7c3RyZWFtOiEwfSl9Y2F0Y2godCl7fXZhciBKPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0aGlzLm9uZGF0YT10fXJldHVybiB0LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHQsbil7dGhpcy5vbmRhdGF8fEUoNSksdGhpcy5kJiZFKDQpLHRoaXMub25kYXRhKEsodCksdGhpcy5kPW58fCExKX0sdH0oKTtmdW5jdGlvbiBLKG4scil7aWYoRylyZXR1cm4gRy5lbmNvZGUobik7Zm9yKHZhciBlPW4ubGVuZ3RoLGk9bmV3IHQobi5sZW5ndGgrKG4ubGVuZ3RoPj4xKSkscz0wLGE9ZnVuY3Rpb24odCl7aVtzKytdPXR9LG89MDtvPGU7KytvKXtpZihzKzU+aS5sZW5ndGgpe3ZhciBoPW5ldyB0KHMrOCsoZS1vPDwxKSk7aC5zZXQoaSksaT1ofXZhciBmPW4uY2hhckNvZGVBdChvKTtmPDEyOHx8cj9hKGYpOmY8MjA0OD8oYSgxOTJ8Zj4+NiksYSgxMjh8NjMmZikpOmY+NTUyOTUmJmY8NTczNDQ/KGEoMjQwfChmPTY1NTM2KygxMDQ3NTUyJmYpfDEwMjMmbi5jaGFyQ29kZUF0KCsrbykpPj4xOCksYSgxMjh8Zj4+MTImNjMpLGEoMTI4fGY+PjYmNjMpLGEoMTI4fDYzJmYpKTooYSgyMjR8Zj4+MTIpLGEoMTI4fGY+PjYmNjMpLGEoMTI4fDYzJmYpKX1yZXR1cm4gYihpLDAscyl9Y29uc3QgTj1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9pbml0KCl9Y2xlYXIoKXt0aGlzLl9pbml0KCl9YWRkRXZlbnQodCl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKFwiQWRkaW5nIGludmFsaWQgZXZlbnRcIik7Y29uc3Qgbj10aGlzLl9oYXNFdmVudHM/XCIsXCI6XCJcIjt0aGlzLnN0cmVhbS5wdXNoKG4rdCksdGhpcy5faGFzRXZlbnRzPSEwfWZpbmlzaCgpe3RoaXMuc3RyZWFtLnB1c2goXCJdXCIsITApO2NvbnN0IHQ9ZnVuY3Rpb24odCl7bGV0IG49MDtmb3IoY29uc3QgciBvZiB0KW4rPXIubGVuZ3RoO2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkobik7Zm9yKGxldCBuPTAsZT0wLGk9dC5sZW5ndGg7bjxpO24rKyl7Y29uc3QgaT10W25dO3Iuc2V0KGksZSksZSs9aS5sZW5ndGh9cmV0dXJuIHJ9KHRoaXMuX2RlZmxhdGVkRGF0YSk7cmV0dXJuIHRoaXMuX2luaXQoKSx0fV9pbml0KCl7dGhpcy5faGFzRXZlbnRzPSExLHRoaXMuX2RlZmxhdGVkRGF0YT1bXSx0aGlzLmRlZmxhdGU9bmV3IEIsdGhpcy5kZWZsYXRlLm9uZGF0YT0odCxuKT0+e3RoaXMuX2RlZmxhdGVkRGF0YS5wdXNoKHQpfSx0aGlzLnN0cmVhbT1uZXcgSigodCxuKT0+e3RoaXMuZGVmbGF0ZS5wdXNoKHQsbil9KSx0aGlzLnN0cmVhbS5wdXNoKFwiW1wiKX19LFA9e2NsZWFyOigpPT57Ti5jbGVhcigpfSxhZGRFdmVudDp0PT5OLmFkZEV2ZW50KHQpLGZpbmlzaDooKT0+Ti5maW5pc2goKSxjb21wcmVzczp0PT5mdW5jdGlvbih0KXtyZXR1cm4gcShLKHQpKX0odCl9O2FkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsZnVuY3Rpb24odCl7Y29uc3Qgbj10LmRhdGEubWV0aG9kLHI9dC5kYXRhLmlkLGU9dC5kYXRhLmFyZztpZihuIGluIFAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFBbbl0pdHJ5e2NvbnN0IHQ9UFtuXShlKTtwb3N0TWVzc2FnZSh7aWQ6cixtZXRob2Q6bixzdWNjZXNzOiEwLHJlc3BvbnNlOnR9KX1jYXRjaCh0KXtwb3N0TWVzc2FnZSh7aWQ6cixtZXRob2Q6bixzdWNjZXNzOiExLHJlc3BvbnNlOnQubWVzc2FnZX0pLGNvbnNvbGUuZXJyb3IodCl9fSkscG9zdE1lc3NhZ2Uoe2lkOnZvaWQgMCxtZXRob2Q6XCJpbml0XCIsc3VjY2VzczohMCxyZXNwb25zZTp2b2lkIDB9KTtgO1xuXG5mdW5jdGlvbiBlKCl7Y29uc3QgZT1uZXcgQmxvYihbcl0pO3JldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKGUpfVxuXG5jb25zdCBDT05TT0xFX0xFVkVMUyA9IFsnbG9nJywgJ3dhcm4nLCAnZXJyb3InXSA7XG5jb25zdCBQUkVGSVggPSAnW1JlcGxheV0gJztcblxuZnVuY3Rpb24gX2FkZEJyZWFkY3J1bWIobWVzc2FnZSwgbGV2ZWwgPSAnaW5mbycpIHtcbiAgYWRkQnJlYWRjcnVtYihcbiAgICB7XG4gICAgICBjYXRlZ29yeTogJ2NvbnNvbGUnLFxuICAgICAgZGF0YToge1xuICAgICAgICBsb2dnZXI6ICdyZXBsYXknLFxuICAgICAgfSxcbiAgICAgIGxldmVsLFxuICAgICAgbWVzc2FnZTogYCR7UFJFRklYfSR7bWVzc2FnZX1gLFxuICAgIH0sXG4gICAgeyBsZXZlbCB9LFxuICApO1xufVxuXG5mdW5jdGlvbiBtYWtlUmVwbGF5RGVidWdMb2dnZXIoKSB7XG4gIGxldCBfY2FwdHVyZSA9IGZhbHNlO1xuICBsZXQgX3RyYWNlID0gZmFsc2U7XG5cbiAgY29uc3QgX2RlYnVnID0ge1xuICAgIGV4Y2VwdGlvbjogKCkgPT4gdW5kZWZpbmVkLFxuICAgIGluZm9UaWNrOiAoKSA9PiB1bmRlZmluZWQsXG4gICAgc2V0Q29uZmlnOiAob3B0cykgPT4ge1xuICAgICAgX2NhcHR1cmUgPSAhIW9wdHMuY2FwdHVyZUV4Y2VwdGlvbnM7XG4gICAgICBfdHJhY2UgPSAhIW9wdHMudHJhY2VJbnRlcm5hbHM7XG4gICAgfSxcbiAgfTtcblxuICBpZiAoREVCVUdfQlVJTEQpIHtcbiAgICBDT05TT0xFX0xFVkVMUy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgX2RlYnVnW25hbWVdID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgZGVidWckMVtuYW1lXShQUkVGSVgsIC4uLmFyZ3MpO1xuICAgICAgICBpZiAoX3RyYWNlKSB7XG4gICAgICAgICAgX2FkZEJyZWFkY3J1bWIoYXJncy5qb2luKCcnKSwgc2V2ZXJpdHlMZXZlbEZyb21TdHJpbmcobmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgX2RlYnVnLmV4Y2VwdGlvbiA9IChlcnJvciwgLi4ubWVzc2FnZSkgPT4ge1xuICAgICAgaWYgKG1lc3NhZ2UubGVuZ3RoICYmIF9kZWJ1Zy5lcnJvcikge1xuICAgICAgICBfZGVidWcuZXJyb3IoLi4ubWVzc2FnZSk7XG4gICAgICB9XG5cbiAgICAgIGRlYnVnJDEuZXJyb3IoUFJFRklYLCBlcnJvcik7XG5cbiAgICAgIGlmIChfY2FwdHVyZSkge1xuICAgICAgICBjYXB0dXJlRXhjZXB0aW9uKGVycm9yKTtcbiAgICAgIH0gZWxzZSBpZiAoX3RyYWNlKSB7XG4gICAgICAgIC8vIE5vIG5lZWQgZm9yIGEgYnJlYWRjcnVtYiBpZiBgX2NhcHR1cmVgIGlzIGVuYWJsZWQgc2luY2UgaXQgc2hvdWxkIGJlXG4gICAgICAgIC8vIGNhcHR1cmVkIGFzIGFuIGV4Y2VwdGlvblxuICAgICAgICBfYWRkQnJlYWRjcnVtYihlcnJvciwgJ2Vycm9yJyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9kZWJ1Zy5pbmZvVGljayA9ICguLi5hcmdzKSA9PiB7XG4gICAgICBkZWJ1ZyQxLmxvZyhQUkVGSVgsIC4uLmFyZ3MpO1xuICAgICAgaWYgKF90cmFjZSkge1xuICAgICAgICAvLyBXYWl0IGEgdGljayBoZXJlIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBmb3Igc29tZSBpbml0aWFsIGxvZ3NcbiAgICAgICAgLy8gd2hpY2ggbWF5IGJlIGFkZGVkIGJlZm9yZSByZXBsYXkgaXMgaW5pdGlhbGl6ZWRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBfYWRkQnJlYWRjcnVtYihhcmdzWzBdKSwgMCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBDT05TT0xFX0xFVkVMUy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgX2RlYnVnW25hbWVdID0gKCkgPT4gdW5kZWZpbmVkO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIF9kZWJ1ZyA7XG59XG5cbmNvbnN0IGRlYnVnID0gbWFrZVJlcGxheURlYnVnTG9nZ2VyKCk7XG5cbi8qKiBUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBldmVudCBidWZmZXIgc2l6ZSBleGNlZWRlZCB0aGUgbGltaXQuLiAqL1xuY2xhc3MgRXZlbnRCdWZmZXJTaXplRXhjZWVkZWRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKGBFdmVudCBidWZmZXIgZXhjZWVkZWQgbWF4aW11bSBzaXplIG9mICR7UkVQTEFZX01BWF9FVkVOVF9CVUZGRVJfU0laRX0uYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGJhc2ljIGV2ZW50IGJ1ZmZlciB0aGF0IGRvZXMgbm90IGRvIGFueSBjb21wcmVzc2lvbi5cbiAqIFVzZWQgYXMgZmFsbGJhY2sgaWYgdGhlIGNvbXByZXNzaW9uIHdvcmtlciBjYW5ub3QgYmUgbG9hZGVkIG9yIGlzIGRpc2FibGVkLlxuICovXG5jbGFzcyBFdmVudEJ1ZmZlckFycmF5ICB7XG4gIC8qKiBBbGwgdGhlIGV2ZW50cyB0aGF0IGFyZSBidWZmZXJlZCB0byBiZSBzZW50LiAqL1xuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuXG4gICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmV2ZW50cyA9IFtdO1xuICAgIHRoaXMuX3RvdGFsU2l6ZSA9IDA7XG4gICAgdGhpcy5oYXNDaGVja291dCA9IGZhbHNlO1xuICAgIHRoaXMud2FpdEZvckNoZWNrb3V0ID0gZmFsc2U7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIGdldCBoYXNFdmVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnRzLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIGdldCB0eXBlKCkge1xuICAgIHJldHVybiAnc3luYyc7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5ldmVudHMgPSBbXTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgYXN5bmMgYWRkRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCBldmVudFNpemUgPSBKU09OLnN0cmluZ2lmeShldmVudCkubGVuZ3RoO1xuICAgIHRoaXMuX3RvdGFsU2l6ZSArPSBldmVudFNpemU7XG4gICAgaWYgKHRoaXMuX3RvdGFsU2l6ZSA+IFJFUExBWV9NQVhfRVZFTlRfQlVGRkVSX1NJWkUpIHtcbiAgICAgIHRocm93IG5ldyBFdmVudEJ1ZmZlclNpemVFeGNlZWRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgdGhpcy5ldmVudHMucHVzaChldmVudCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIGZpbmlzaCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAvLyBNYWtlIGEgY29weSBvZiB0aGUgZXZlbnRzIGFycmF5IHJlZmVyZW5jZSBhbmQgaW1tZWRpYXRlbHkgY2xlYXIgdGhlXG4gICAgICAvLyBldmVudHMgbWVtYmVyIHNvIHRoYXQgd2UgZG8gbm90IGxvc2UgbmV3IGV2ZW50cyB3aGlsZSB1cGxvYWRpbmdcbiAgICAgIC8vIGF0dGFjaG1lbnQuXG4gICAgICBjb25zdCBldmVudHNSZXQgPSB0aGlzLmV2ZW50cztcbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgIHJlc29sdmUoSlNPTi5zdHJpbmdpZnkoZXZlbnRzUmV0KSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIGNsZWFyKCkge1xuICAgIHRoaXMuZXZlbnRzID0gW107XG4gICAgdGhpcy5fdG90YWxTaXplID0gMDtcbiAgICB0aGlzLmhhc0NoZWNrb3V0ID0gZmFsc2U7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIGdldEVhcmxpZXN0VGltZXN0YW1wKCkge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IHRoaXMuZXZlbnRzLm1hcChldmVudCA9PiBldmVudC50aW1lc3RhbXApLnNvcnQoKVswXTtcblxuICAgIGlmICghdGltZXN0YW1wKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGltZXN0YW1wVG9Ncyh0aW1lc3RhbXApO1xuICB9XG59XG5cbi8qKlxuICogRXZlbnQgYnVmZmVyIHRoYXQgdXNlcyBhIHdlYiB3b3JrZXIgdG8gY29tcHJlc3MgZXZlbnRzLlxuICogRXhwb3J0ZWQgb25seSBmb3IgdGVzdGluZy5cbiAqL1xuY2xhc3MgV29ya2VySGFuZGxlciB7XG5cbiAgIGNvbnN0cnVjdG9yKHdvcmtlcikge1xuICAgIHRoaXMuX3dvcmtlciA9IHdvcmtlcjtcbiAgICB0aGlzLl9pZCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIHRoZSB3b3JrZXIgaXMgcmVhZHkgKG9yIG5vdCkuXG4gICAqIFRoaXMgd2lsbCBlaXRoZXIgcmVzb2x2ZSB3aGVuIHRoZSB3b3JrZXIgaXMgcmVhZHksIG9yIHJlamVjdCBpZiBhbiBlcnJvciBvY2N1cnJlZC5cbiAgICovXG4gICBlbnN1cmVSZWFkeSgpIHtcbiAgICAvLyBFbnN1cmUgd2Ugb25seSBjaGVjayBvbmNlXG4gICAgaWYgKHRoaXMuX2Vuc3VyZVJlYWR5UHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Vuc3VyZVJlYWR5UHJvbWlzZTtcbiAgICB9XG5cbiAgICB0aGlzLl9lbnN1cmVSZWFkeVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl93b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ21lc3NhZ2UnLFxuICAgICAgICAoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgICBpZiAoKGRhdGEgKS5zdWNjZXNzKSB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBvbmNlOiB0cnVlIH0sXG4gICAgICApO1xuXG4gICAgICB0aGlzLl93b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgIHsgb25jZTogdHJ1ZSB9LFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLl9lbnN1cmVSZWFkeVByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveSB0aGUgd29ya2VyLlxuICAgKi9cbiAgIGRlc3Ryb3koKSB7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKCdEZXN0cm95aW5nIGNvbXByZXNzaW9uIHdvcmtlcicpO1xuICAgIHRoaXMuX3dvcmtlci50ZXJtaW5hdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3N0IG1lc3NhZ2UgdG8gd29ya2VyIGFuZCB3YWl0IGZvciByZXNwb25zZSBiZWZvcmUgcmVzb2x2aW5nIHByb21pc2UuXG4gICAqL1xuICAgcG9zdE1lc3NhZ2UobWV0aG9kLCBhcmcpIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuX2dldEFuZEluY3JlbWVudElkKCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgbGlzdGVuZXIgPSAoeyBkYXRhIH0pID0+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBkYXRhIDtcbiAgICAgICAgaWYgKHJlc3BvbnNlLm1ldGhvZCAhPT0gbWV0aG9kKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlcmUgY2FuIGJlIG11bHRpcGxlIGxpc3RlbmVycyBmb3IgYSBzaW5nbGUgbWV0aG9kLCB0aGUgaWQgZW5zdXJlc1xuICAgICAgICAvLyB0aGF0IHRoZSByZXNwb25zZSBtYXRjaGVzIHRoZSBjYWxsZXIuXG4gICAgICAgIGlmIChyZXNwb25zZS5pZCAhPT0gaWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSdsbCBhbHdheXMgd2FudCB0byByZW1vdmUgbGlzdGVuZXIgcmVnYXJkbGVzcyBvZiByZXN1bHQgc3RhdHVzXG4gICAgICAgIHRoaXMuX3dvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIpO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgIC8vIFRPRE86IERvIHNvbWUgZXJyb3IgaGFuZGxpbmcsIG5vdCBzdXJlIHdoYXRcbiAgICAgICAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5lcnJvcignRXJyb3IgaW4gY29tcHJlc3Npb24gd29ya2VyOiAnLCByZXNwb25zZS5yZXNwb25zZSk7XG5cbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdFcnJvciBpbiBjb21wcmVzc2lvbiB3b3JrZXInKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5yZXNwb25zZSApO1xuICAgICAgfTtcblxuICAgICAgLy8gTm90ZTogd2UgY2FuJ3QgdXNlIGBvbmNlYCBvcHRpb24gYmVjYXVzZSBpdCdzIHBvc3NpYmxlIGl0IG5lZWRzIHRvXG4gICAgICAvLyBsaXN0ZW4gdG8gbXVsdGlwbGUgbWVzc2FnZXNcbiAgICAgIHRoaXMuX3dvcmtlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIpO1xuICAgICAgdGhpcy5fd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQsIG1ldGhvZCwgYXJnIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgY3VycmVudCBJRCBhbmQgaW5jcmVtZW50IGl0IGZvciB0aGUgbmV4dCBjYWxsLiAqL1xuICAgX2dldEFuZEluY3JlbWVudElkKCkge1xuICAgIHJldHVybiB0aGlzLl9pZCsrO1xuICB9XG59XG5cbi8qKlxuICogRXZlbnQgYnVmZmVyIHRoYXQgdXNlcyBhIHdlYiB3b3JrZXIgdG8gY29tcHJlc3MgZXZlbnRzLlxuICogRXhwb3J0ZWQgb25seSBmb3IgdGVzdGluZy5cbiAqL1xuY2xhc3MgRXZlbnRCdWZmZXJDb21wcmVzc2lvbldvcmtlciAge1xuICAvKiogQGluaGVyaXRkb2MgKi9cblxuICAvKiogQGluaGVyaXRkb2MgKi9cblxuICAgY29uc3RydWN0b3Iod29ya2VyKSB7XG4gICAgdGhpcy5fd29ya2VyID0gbmV3IFdvcmtlckhhbmRsZXIod29ya2VyKTtcbiAgICB0aGlzLl9lYXJsaWVzdFRpbWVzdGFtcCA9IG51bGw7XG4gICAgdGhpcy5fdG90YWxTaXplID0gMDtcbiAgICB0aGlzLmhhc0NoZWNrb3V0ID0gZmFsc2U7XG4gICAgdGhpcy53YWl0Rm9yQ2hlY2tvdXQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgZ2V0IGhhc0V2ZW50cygpIHtcbiAgICByZXR1cm4gISF0aGlzLl9lYXJsaWVzdFRpbWVzdGFtcDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuICd3b3JrZXInO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZSB0aGUgd29ya2VyIGlzIHJlYWR5IChvciBub3QpLlxuICAgKiBUaGlzIHdpbGwgZWl0aGVyIHJlc29sdmUgd2hlbiB0aGUgd29ya2VyIGlzIHJlYWR5LCBvciByZWplY3QgaWYgYW4gZXJyb3Igb2NjdXJyZWQuXG4gICAqL1xuICAgZW5zdXJlUmVhZHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtlci5lbnN1cmVSZWFkeSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgdGhlIGV2ZW50IGJ1ZmZlci5cbiAgICovXG4gICBkZXN0cm95KCkge1xuICAgIHRoaXMuX3dvcmtlci5kZXN0cm95KCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGV2ZW50IHRvIHRoZSBldmVudCBidWZmZXIuXG4gICAqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBldmVudCB3YXMgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGFuZCBwcm9jZXNzZWQgYnkgd29ya2VyLlxuICAgKi9cbiAgIGFkZEV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gdGltZXN0YW1wVG9NcyhldmVudC50aW1lc3RhbXApO1xuICAgIGlmICghdGhpcy5fZWFybGllc3RUaW1lc3RhbXAgfHwgdGltZXN0YW1wIDwgdGhpcy5fZWFybGllc3RUaW1lc3RhbXApIHtcbiAgICAgIHRoaXMuX2VhcmxpZXN0VGltZXN0YW1wID0gdGltZXN0YW1wO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShldmVudCk7XG4gICAgdGhpcy5fdG90YWxTaXplICs9IGRhdGEubGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMuX3RvdGFsU2l6ZSA+IFJFUExBWV9NQVhfRVZFTlRfQlVGRkVSX1NJWkUpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXZlbnRCdWZmZXJTaXplRXhjZWVkZWRFcnJvcigpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2VuZEV2ZW50VG9Xb3JrZXIoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogRmluaXNoIHRoZSBldmVudCBidWZmZXIgYW5kIHJldHVybiB0aGUgY29tcHJlc3NlZCBkYXRhLlxuICAgKi9cbiAgIGZpbmlzaCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmluaXNoUmVxdWVzdCgpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gICBjbGVhcigpIHtcbiAgICB0aGlzLl9lYXJsaWVzdFRpbWVzdGFtcCA9IG51bGw7XG4gICAgdGhpcy5fdG90YWxTaXplID0gMDtcbiAgICB0aGlzLmhhc0NoZWNrb3V0ID0gZmFsc2U7XG5cbiAgICAvLyBXZSBkbyBub3Qgd2FpdCBvbiB0aGlzLCBhcyB3ZSBhc3N1bWUgdGhlIG9yZGVyIG9mIG1lc3NhZ2VzIGlzIGNvbnNpc3RlbnQgZm9yIHRoZSB3b3JrZXJcbiAgICB0aGlzLl93b3JrZXIucG9zdE1lc3NhZ2UoJ2NsZWFyJykudGhlbihudWxsLCBlID0+IHtcbiAgICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLmV4Y2VwdGlvbihlLCAnU2VuZGluZyBcImNsZWFyXCIgbWVzc2FnZSB0byB3b3JrZXIgZmFpbGVkJywgZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIGdldEVhcmxpZXN0VGltZXN0YW1wKCkge1xuICAgIHJldHVybiB0aGlzLl9lYXJsaWVzdFRpbWVzdGFtcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIHRoZSBldmVudCB0byB0aGUgd29ya2VyLlxuICAgKi9cbiAgIF9zZW5kRXZlbnRUb1dvcmtlcihkYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dvcmtlci5wb3N0TWVzc2FnZSgnYWRkRXZlbnQnLCBkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5pc2ggdGhlIHJlcXVlc3QgYW5kIHJldHVybiB0aGUgY29tcHJlc3NlZCBkYXRhIGZyb20gdGhlIHdvcmtlci5cbiAgICovXG4gICBhc3luYyBfZmluaXNoUmVxdWVzdCgpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuX3dvcmtlci5wb3N0TWVzc2FnZSgnZmluaXNoJyk7XG5cbiAgICB0aGlzLl9lYXJsaWVzdFRpbWVzdGFtcCA9IG51bGw7XG4gICAgdGhpcy5fdG90YWxTaXplID0gMDtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgcHJveHkgd2lsbCB0cnkgdG8gdXNlIHRoZSBjb21wcmVzc2lvbiB3b3JrZXIsIGFuZCBmYWxsIGJhY2sgdG8gdXNlIHRoZSBzaW1wbGUgYnVmZmVyIGlmIGFuIGVycm9yIG9jY3VycyB0aGVyZS5cbiAqIFRoaXMgY2FuIGhhcHBlbiBlLmcuIGlmIHRoZSB3b3JrZXIgY2Fubm90IGJlIGxvYWRlZC5cbiAqIEV4cG9ydGVkIG9ubHkgZm9yIHRlc3RpbmcuXG4gKi9cbmNsYXNzIEV2ZW50QnVmZmVyUHJveHkgIHtcblxuICAgY29uc3RydWN0b3Iod29ya2VyKSB7XG4gICAgdGhpcy5fZmFsbGJhY2sgPSBuZXcgRXZlbnRCdWZmZXJBcnJheSgpO1xuICAgIHRoaXMuX2NvbXByZXNzaW9uID0gbmV3IEV2ZW50QnVmZmVyQ29tcHJlc3Npb25Xb3JrZXIod29ya2VyKTtcbiAgICB0aGlzLl91c2VkID0gdGhpcy5fZmFsbGJhY2s7XG5cbiAgICB0aGlzLl9lbnN1cmVXb3JrZXJJc0xvYWRlZFByb21pc2UgPSB0aGlzLl9lbnN1cmVXb3JrZXJJc0xvYWRlZCgpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gICBnZXQgd2FpdEZvckNoZWNrb3V0KCkge1xuICAgIHJldHVybiB0aGlzLl91c2VkLndhaXRGb3JDaGVja291dDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZWQudHlwZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICAgZ2V0IGhhc0V2ZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlZC5oYXNFdmVudHM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIGdldCBoYXNDaGVja291dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlZC5oYXNDaGVja291dDtcbiAgfVxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIHNldCBoYXNDaGVja291dCh2YWx1ZSkge1xuICAgIHRoaXMuX3VzZWQuaGFzQ2hlY2tvdXQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2FkamFjZW50LW92ZXJsb2FkLXNpZ25hdHVyZXNcbiAgIHNldCB3YWl0Rm9yQ2hlY2tvdXQodmFsdWUpIHtcbiAgICB0aGlzLl91c2VkLndhaXRGb3JDaGVja291dCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gICBkZXN0cm95KCkge1xuICAgIHRoaXMuX2ZhbGxiYWNrLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9jb21wcmVzc2lvbi5kZXN0cm95KCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIGNsZWFyKCkge1xuICAgIHJldHVybiB0aGlzLl91c2VkLmNsZWFyKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgIGdldEVhcmxpZXN0VGltZXN0YW1wKCkge1xuICAgIHJldHVybiB0aGlzLl91c2VkLmdldEVhcmxpZXN0VGltZXN0YW1wKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGV2ZW50IHRvIHRoZSBldmVudCBidWZmZXIuXG4gICAqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBldmVudCB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLlxuICAgKi9cbiAgIGFkZEV2ZW50KGV2ZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZWQuYWRkRXZlbnQoZXZlbnQpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gICBhc3luYyBmaW5pc2goKSB7XG4gICAgLy8gRW5zdXJlIHRoZSB3b3JrZXIgaXMgbG9hZGVkLCBzbyB0aGUgc2VudCBldmVudCBpcyBjb21wcmVzc2VkXG4gICAgYXdhaXQgdGhpcy5lbnN1cmVXb3JrZXJJc0xvYWRlZCgpO1xuXG4gICAgcmV0dXJuIHRoaXMuX3VzZWQuZmluaXNoKCk7XG4gIH1cblxuICAvKiogRW5zdXJlIHRoZSB3b3JrZXIgaGFzIGxvYWRlZC4gKi9cbiAgIGVuc3VyZVdvcmtlcklzTG9hZGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9lbnN1cmVXb3JrZXJJc0xvYWRlZFByb21pc2U7XG4gIH1cblxuICAvKiogQWN0dWFsbHkgY2hlY2sgaWYgdGhlIHdvcmtlciBoYXMgYmVlbiBsb2FkZWQuICovXG4gICBhc3luYyBfZW5zdXJlV29ya2VySXNMb2FkZWQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2NvbXByZXNzaW9uLmVuc3VyZVJlYWR5KCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIElmIHRoZSB3b3JrZXIgZmFpbHMgdG8gbG9hZCwgd2UgZmFsbCBiYWNrIHRvIHRoZSBzaW1wbGUgYnVmZmVyLlxuICAgICAgLy8gTm90aGluZyBtb3JlIHRvIGRvIGZyb20gb3VyIHNpZGUgaGVyZVxuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcuZXhjZXB0aW9uKGVycm9yLCAnRmFpbGVkIHRvIGxvYWQgdGhlIGNvbXByZXNzaW9uIHdvcmtlciwgZmFsbGluZyBiYWNrIHRvIHNpbXBsZSBidWZmZXInKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgbmVlZCB0byBzd2l0Y2ggb3ZlciB0aGUgYXJyYXkgYnVmZmVyIHRvIHRoZSBjb21wcmVzc2lvbiB3b3JrZXJcbiAgICBhd2FpdCB0aGlzLl9zd2l0Y2hUb0NvbXByZXNzaW9uV29ya2VyKCk7XG4gIH1cblxuICAvKiogU3dpdGNoIHRoZSB1c2VkIGJ1ZmZlciB0byB0aGUgY29tcHJlc3Npb24gd29ya2VyLiAqL1xuICAgYXN5bmMgX3N3aXRjaFRvQ29tcHJlc3Npb25Xb3JrZXIoKSB7XG4gICAgY29uc3QgeyBldmVudHMsIGhhc0NoZWNrb3V0LCB3YWl0Rm9yQ2hlY2tvdXQgfSA9IHRoaXMuX2ZhbGxiYWNrO1xuXG4gICAgY29uc3QgYWRkRXZlbnRQcm9taXNlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICBhZGRFdmVudFByb21pc2VzLnB1c2godGhpcy5fY29tcHJlc3Npb24uYWRkRXZlbnQoZXZlbnQpKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jb21wcmVzc2lvbi5oYXNDaGVja291dCA9IGhhc0NoZWNrb3V0O1xuICAgIHRoaXMuX2NvbXByZXNzaW9uLndhaXRGb3JDaGVja291dCA9IHdhaXRGb3JDaGVja291dDtcblxuICAgIC8vIFdlIHN3aXRjaCBvdmVyIHRvIHRoZSBuZXcgYnVmZmVyIGltbWVkaWF0ZWx5IC0gYW55IGZ1cnRoZXIgZXZlbnRzIHdpbGwgYmUgYWRkZWRcbiAgICAvLyBhZnRlciB0aGUgcHJldmlvdXNseSBidWZmZXJlZCBvbmVzXG4gICAgdGhpcy5fdXNlZCA9IHRoaXMuX2NvbXByZXNzaW9uO1xuXG4gICAgLy8gV2FpdCBmb3Igb3JpZ2luYWwgZXZlbnRzIHRvIGJlIHJlLWFkZGVkIGJlZm9yZSByZXNvbHZpbmdcbiAgICB0cnkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoYWRkRXZlbnRQcm9taXNlcyk7XG5cbiAgICAgIC8vIENhbiBub3cgY2xlYXIgZmFsbGJhY2sgYnVmZmVyIGFzIGl0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeVxuICAgICAgdGhpcy5fZmFsbGJhY2suY2xlYXIoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcuZXhjZXB0aW9uKGVycm9yLCAnRmFpbGVkIHRvIGFkZCBldmVudHMgd2hlbiBzd2l0Y2hpbmcgYnVmZmVycy4nKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gZXZlbnQgYnVmZmVyIGZvciByZXBsYXlzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVFdmVudEJ1ZmZlcih7XG4gIHVzZUNvbXByZXNzaW9uLFxuICB3b3JrZXJVcmw6IGN1c3RvbVdvcmtlclVybCxcbn0pIHtcbiAgaWYgKFxuICAgIHVzZUNvbXByZXNzaW9uICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgIHdpbmRvdy5Xb3JrZXJcbiAgKSB7XG4gICAgY29uc3Qgd29ya2VyID0gX2xvYWRXb3JrZXIoY3VzdG9tV29ya2VyVXJsKTtcblxuICAgIGlmICh3b3JrZXIpIHtcbiAgICAgIHJldHVybiB3b3JrZXI7XG4gICAgfVxuICB9XG5cbiAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKCdVc2luZyBzaW1wbGUgYnVmZmVyJyk7XG4gIHJldHVybiBuZXcgRXZlbnRCdWZmZXJBcnJheSgpO1xufVxuXG5mdW5jdGlvbiBfbG9hZFdvcmtlcihjdXN0b21Xb3JrZXJVcmwpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB3b3JrZXJVcmwgPSBjdXN0b21Xb3JrZXJVcmwgfHwgX2dldFdvcmtlclVybCgpO1xuXG4gICAgaWYgKCF3b3JrZXJVcmwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5sb2coYFVzaW5nIGNvbXByZXNzaW9uIHdvcmtlciR7Y3VzdG9tV29ya2VyVXJsID8gYCBmcm9tICR7Y3VzdG9tV29ya2VyVXJsfWAgOiAnJ31gKTtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlclVybCk7XG4gICAgcmV0dXJuIG5ldyBFdmVudEJ1ZmZlclByb3h5KHdvcmtlcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcuZXhjZXB0aW9uKGVycm9yLCAnRmFpbGVkIHRvIGNyZWF0ZSBjb21wcmVzc2lvbiB3b3JrZXInKTtcbiAgICAvLyBGYWxsIGJhY2sgdG8gdXNlIHNpbXBsZSBldmVudCBidWZmZXIgYXJyYXlcbiAgfVxufVxuXG5mdW5jdGlvbiBfZ2V0V29ya2VyVXJsKCkge1xuICBpZiAodHlwZW9mIF9fU0VOVFJZX0VYQ0xVREVfUkVQTEFZX1dPUktFUl9fID09PSAndW5kZWZpbmVkJyB8fCAhX19TRU5UUllfRVhDTFVERV9SRVBMQVlfV09SS0VSX18pIHtcbiAgICByZXR1cm4gZSgpO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG4vKiogSWYgc2Vzc2lvblN0b3JhZ2UgaXMgYXZhaWxhYmxlLiAqL1xuZnVuY3Rpb24gaGFzU2Vzc2lvblN0b3JhZ2UoKSB7XG4gIHRyeSB7XG4gICAgLy8gVGhpcyBjYW4gdGhyb3csIGUuZy4gd2hlbiBiZWluZyBhY2Nlc3NlZCBpbiBhIHNhbmRib3hlZCBpZnJhbWVcbiAgICByZXR1cm4gJ3Nlc3Npb25TdG9yYWdlJyBpbiBXSU5ET1cgJiYgISFXSU5ET1cuc2Vzc2lvblN0b3JhZ2U7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIHNlc3Npb24gZnJvbSBTZXNzaW9uIFN0b3JhZ2UgYW5kIHVuc2V0cyBzZXNzaW9uIGluIHJlcGxheSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBjbGVhclNlc3Npb24ocmVwbGF5KSB7XG4gIGRlbGV0ZVNlc3Npb24oKTtcbiAgcmVwbGF5LnNlc3Npb24gPSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRGVsZXRlcyBhIHNlc3Npb24gZnJvbSBzdG9yYWdlXG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZVNlc3Npb24oKSB7XG4gIGlmICghaGFzU2Vzc2lvblN0b3JhZ2UoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgV0lORE9XLnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oUkVQTEFZX1NFU1NJT05fS0VZKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIHBvdGVudGlhbCBTZWN1cml0eUVycm9yIGV4Y2VwdGlvbnNcbiAgfVxufVxuXG4vKipcbiAqIEdpdmVuIGEgc2FtcGxlIHJhdGUsIHJldHVybnMgdHJ1ZSBpZiByZXBsYXkgc2hvdWxkIGJlIHNhbXBsZWQuXG4gKlxuICogMS4wID0gMTAwJSBzYW1wbGluZ1xuICogMC4wID0gMCUgc2FtcGxpbmdcbiAqL1xuZnVuY3Rpb24gaXNTYW1wbGVkKHNhbXBsZVJhdGUpIHtcbiAgaWYgKHNhbXBsZVJhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIE1hdGgucmFuZG9tKCkgcmV0dXJucyBhIG51bWJlciBpbiByYW5nZSBvZiAwIHRvIDEgKGluY2x1c2l2ZSBvZiAwLCBidXQgbm90IDEpXG4gIHJldHVybiBNYXRoLnJhbmRvbSgpIDwgc2FtcGxlUmF0ZTtcbn1cblxuLyoqXG4gKiBTYXZlIGEgc2Vzc2lvbiB0byBzZXNzaW9uIHN0b3JhZ2UuXG4gKi9cbmZ1bmN0aW9uIHNhdmVTZXNzaW9uKHNlc3Npb24pIHtcbiAgaWYgKCFoYXNTZXNzaW9uU3RvcmFnZSgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBXSU5ET1cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShSRVBMQVlfU0VTU0lPTl9LRVksIEpTT04uc3RyaW5naWZ5KHNlc3Npb24pKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIHBvdGVudGlhbCBTZWN1cml0eUVycm9yIGV4Y2VwdGlvbnNcbiAgfVxufVxuXG4vKipcbiAqIEdldCBhIHNlc3Npb24gd2l0aCBkZWZhdWx0cyAmIGFwcGxpZWQgc2FtcGxpbmcuXG4gKi9cbmZ1bmN0aW9uIG1ha2VTZXNzaW9uKHNlc3Npb24pIHtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgaWQgPSBzZXNzaW9uLmlkIHx8IHV1aWQ0KCk7XG4gIC8vIE5vdGUgdGhhdCB0aGlzIG1lYW5zIHdlIGNhbm5vdCBzZXQgYSBzdGFydGVkL2xhc3RBY3Rpdml0eSBvZiBgMGAsIGJ1dCB0aGlzIHNob3VsZCBub3QgYmUgcmVsZXZhbnQgb3V0c2lkZSBvZiB0ZXN0cy5cbiAgY29uc3Qgc3RhcnRlZCA9IHNlc3Npb24uc3RhcnRlZCB8fCBub3c7XG4gIGNvbnN0IGxhc3RBY3Rpdml0eSA9IHNlc3Npb24ubGFzdEFjdGl2aXR5IHx8IG5vdztcbiAgY29uc3Qgc2VnbWVudElkID0gc2Vzc2lvbi5zZWdtZW50SWQgfHwgMDtcbiAgY29uc3Qgc2FtcGxlZCA9IHNlc3Npb24uc2FtcGxlZDtcbiAgY29uc3QgcHJldmlvdXNTZXNzaW9uSWQgPSBzZXNzaW9uLnByZXZpb3VzU2Vzc2lvbklkO1xuXG4gIHJldHVybiB7XG4gICAgaWQsXG4gICAgc3RhcnRlZCxcbiAgICBsYXN0QWN0aXZpdHksXG4gICAgc2VnbWVudElkLFxuICAgIHNhbXBsZWQsXG4gICAgcHJldmlvdXNTZXNzaW9uSWQsXG4gIH07XG59XG5cbi8qKlxuICogR2V0IHRoZSBzYW1wbGVkIHN0YXR1cyBmb3IgYSBzZXNzaW9uIGJhc2VkIG9uIHNhbXBsZSByYXRlcyAmIGN1cnJlbnQgc2FtcGxlZCBzdGF0dXMuXG4gKi9cbmZ1bmN0aW9uIGdldFNlc3Npb25TYW1wbGVUeXBlKHNlc3Npb25TYW1wbGVSYXRlLCBhbGxvd0J1ZmZlcmluZykge1xuICByZXR1cm4gaXNTYW1wbGVkKHNlc3Npb25TYW1wbGVSYXRlKSA/ICdzZXNzaW9uJyA6IGFsbG93QnVmZmVyaW5nID8gJ2J1ZmZlcicgOiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgc2Vzc2lvbiwgd2hpY2ggaW4gaXRzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgYSBTZW50cnkgZXZlbnRcbiAqIHRoYXQgYWxsIHJlcGxheXMgd2lsbCBiZSBzYXZlZCB0byBhcyBhdHRhY2htZW50cy4gQ3VycmVudGx5LCB3ZSBvbmx5IGV4cGVjdFxuICogb25lIG9mIHRoZXNlIFNlbnRyeSBldmVudHMgcGVyIFwicmVwbGF5IHNlc3Npb25cIi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlU2Vzc2lvbihcbiAgeyBzZXNzaW9uU2FtcGxlUmF0ZSwgYWxsb3dCdWZmZXJpbmcsIHN0aWNreVNlc3Npb24gPSBmYWxzZSB9LFxuICB7IHByZXZpb3VzU2Vzc2lvbklkIH0gPSB7fSxcbikge1xuICBjb25zdCBzYW1wbGVkID0gZ2V0U2Vzc2lvblNhbXBsZVR5cGUoc2Vzc2lvblNhbXBsZVJhdGUsIGFsbG93QnVmZmVyaW5nKTtcbiAgY29uc3Qgc2Vzc2lvbiA9IG1ha2VTZXNzaW9uKHtcbiAgICBzYW1wbGVkLFxuICAgIHByZXZpb3VzU2Vzc2lvbklkLFxuICB9KTtcblxuICBpZiAoc3RpY2t5U2Vzc2lvbikge1xuICAgIHNhdmVTZXNzaW9uKHNlc3Npb24pO1xuICB9XG5cbiAgcmV0dXJuIHNlc3Npb247XG59XG5cbi8qKlxuICogRmV0Y2hlcyBhIHNlc3Npb24gZnJvbSBzdG9yYWdlXG4gKi9cbmZ1bmN0aW9uIGZldGNoU2Vzc2lvbigpIHtcbiAgaWYgKCFoYXNTZXNzaW9uU3RvcmFnZSgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgY2FuIHRocm93IGlmIGNvb2tpZXMgYXJlIGRpc2FibGVkXG4gICAgY29uc3Qgc2Vzc2lvblN0cmluZ0Zyb21TdG9yYWdlID0gV0lORE9XLnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oUkVQTEFZX1NFU1NJT05fS0VZKTtcblxuICAgIGlmICghc2Vzc2lvblN0cmluZ0Zyb21TdG9yYWdlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzZXNzaW9uT2JqID0gSlNPTi5wYXJzZShzZXNzaW9uU3RyaW5nRnJvbVN0b3JhZ2UpIDtcblxuICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLmluZm9UaWNrKCdMb2FkaW5nIGV4aXN0aW5nIHNlc3Npb24nKTtcblxuICAgIHJldHVybiBtYWtlU2Vzc2lvbihzZXNzaW9uT2JqKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhbiBpbml0aWFsIHRpbWVzdGFtcCBhbmQgYW4gZXhwaXJ5IGR1cmF0aW9uLCBjaGVja3MgdG8gc2VlIGlmIGN1cnJlbnRcbiAqIHRpbWUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYXMgZXhwaXJlZC5cbiAqL1xuZnVuY3Rpb24gaXNFeHBpcmVkKFxuICBpbml0aWFsVGltZSxcbiAgZXhwaXJ5LFxuICB0YXJnZXRUaW1lID0gK25ldyBEYXRlKCksXG4pIHtcbiAgLy8gQWx3YXlzIGV4cGlyZWQgaWYgPCAwXG4gIGlmIChpbml0aWFsVGltZSA9PT0gbnVsbCB8fCBleHBpcnkgPT09IHVuZGVmaW5lZCB8fCBleHBpcnkgPCAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBOZXZlciBleHBpcmVzIGlmID09IDBcbiAgaWYgKGV4cGlyeSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBpbml0aWFsVGltZSArIGV4cGlyeSA8PSB0YXJnZXRUaW1lO1xufVxuXG4vKipcbiAqIENoZWNrcyB0byBzZWUgaWYgc2Vzc2lvbiBpcyBleHBpcmVkXG4gKi9cbmZ1bmN0aW9uIGlzU2Vzc2lvbkV4cGlyZWQoXG4gIHNlc3Npb24sXG4gIHtcbiAgICBtYXhSZXBsYXlEdXJhdGlvbixcbiAgICBzZXNzaW9uSWRsZUV4cGlyZSxcbiAgICB0YXJnZXRUaW1lID0gRGF0ZS5ub3coKSxcbiAgfSxcbikge1xuICByZXR1cm4gKFxuICAgIC8vIEZpcnN0LCBjaGVjayB0aGF0IG1heGltdW0gc2Vzc2lvbiBsZW5ndGggaGFzIG5vdCBiZWVuIGV4Y2VlZGVkXG4gICAgaXNFeHBpcmVkKHNlc3Npb24uc3RhcnRlZCwgbWF4UmVwbGF5RHVyYXRpb24sIHRhcmdldFRpbWUpIHx8XG4gICAgLy8gY2hlY2sgdGhhdCB0aGUgaWRsZSB0aW1lb3V0IGhhcyBub3QgYmVlbiBleGNlZWRlZCAoaS5lLiB1c2VyIGhhc1xuICAgIC8vIHBlcmZvcm1lZCBhbiBhY3Rpb24gd2l0aGluIHRoZSBsYXN0IGBzZXNzaW9uSWRsZUV4cGlyZWAgbXMpXG4gICAgaXNFeHBpcmVkKHNlc3Npb24ubGFzdEFjdGl2aXR5LCBzZXNzaW9uSWRsZUV4cGlyZSwgdGFyZ2V0VGltZSlcbiAgKTtcbn1cblxuLyoqIElmIHRoZSBzZXNzaW9uIHNob3VsZCBiZSByZWZyZXNoZWQgb3Igbm90LiAqL1xuZnVuY3Rpb24gc2hvdWxkUmVmcmVzaFNlc3Npb24oXG4gIHNlc3Npb24sXG4gIHsgc2Vzc2lvbklkbGVFeHBpcmUsIG1heFJlcGxheUR1cmF0aW9uIH0sXG4pIHtcbiAgLy8gSWYgbm90IGV4cGlyZWQsIGFsbCBnb29kLCBqdXN0IGtlZXAgdGhlIHNlc3Npb25cbiAgaWYgKCFpc1Nlc3Npb25FeHBpcmVkKHNlc3Npb24sIHsgc2Vzc2lvbklkbGVFeHBpcmUsIG1heFJlcGxheUR1cmF0aW9uIH0pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gSWYgd2UgYXJlIGJ1ZmZlcmluZyAmIGhhdmVuJ3QgZXZlciBmbHVzaGVkIHlldCwgYWx3YXlzIGNvbnRpbnVlXG4gIGlmIChzZXNzaW9uLnNhbXBsZWQgPT09ICdidWZmZXInICYmIHNlc3Npb24uc2VnbWVudElkID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogR2V0IG9yIGNyZWF0ZSBhIHNlc3Npb24sIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSByZXBsYXkuXG4gKiBSZXR1cm5zIGEgc2Vzc2lvbiB0aGF0IG1heSBiZSB1bnNhbXBsZWQuXG4gKi9cbmZ1bmN0aW9uIGxvYWRPckNyZWF0ZVNlc3Npb24oXG4gIHtcbiAgICBzZXNzaW9uSWRsZUV4cGlyZSxcbiAgICBtYXhSZXBsYXlEdXJhdGlvbixcbiAgICBwcmV2aW91c1Nlc3Npb25JZCxcbiAgfVxuXG4sXG4gIHNlc3Npb25PcHRpb25zLFxuKSB7XG4gIGNvbnN0IGV4aXN0aW5nU2Vzc2lvbiA9IHNlc3Npb25PcHRpb25zLnN0aWNreVNlc3Npb24gJiYgZmV0Y2hTZXNzaW9uKCk7XG5cbiAgLy8gTm8gc2Vzc2lvbiBleGlzdHMgeWV0LCBqdXN0IGNyZWF0ZSBhIG5ldyBvbmVcbiAgaWYgKCFleGlzdGluZ1Nlc3Npb24pIHtcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5pbmZvVGljaygnQ3JlYXRpbmcgbmV3IHNlc3Npb24nKTtcbiAgICByZXR1cm4gY3JlYXRlU2Vzc2lvbihzZXNzaW9uT3B0aW9ucywgeyBwcmV2aW91c1Nlc3Npb25JZCB9KTtcbiAgfVxuXG4gIGlmICghc2hvdWxkUmVmcmVzaFNlc3Npb24oZXhpc3RpbmdTZXNzaW9uLCB7IHNlc3Npb25JZGxlRXhwaXJlLCBtYXhSZXBsYXlEdXJhdGlvbiB9KSkge1xuICAgIHJldHVybiBleGlzdGluZ1Nlc3Npb247XG4gIH1cblxuICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5pbmZvVGljaygnU2Vzc2lvbiBpbiBzZXNzaW9uU3RvcmFnZSBpcyBleHBpcmVkLCBjcmVhdGluZyBuZXcgb25lLi4uJyk7XG4gIHJldHVybiBjcmVhdGVTZXNzaW9uKHNlc3Npb25PcHRpb25zLCB7IHByZXZpb3VzU2Vzc2lvbklkOiBleGlzdGluZ1Nlc3Npb24uaWQgfSk7XG59XG5cbmZ1bmN0aW9uIGlzQ3VzdG9tRXZlbnQoZXZlbnQpIHtcbiAgcmV0dXJuIGV2ZW50LnR5cGUgPT09IEV2ZW50VHlwZS5DdXN0b207XG59XG5cbi8qKlxuICogQWRkIGFuIGV2ZW50IHRvIHRoZSBldmVudCBidWZmZXIuXG4gKiBJbiBjb250cmFzdCB0byBgYWRkRXZlbnRgLCB0aGlzIGRvZXMgbm90IHJldHVybiBhIHByb21pc2UgJiBkb2VzIG5vdCB3YWl0IGZvciB0aGUgYWRkaW5nIG9mIHRoZSBldmVudCB0byBzdWNjZWVkL2ZhaWwuXG4gKiBJbnN0ZWFkIHRoaXMgcmV0dXJucyBgdHJ1ZWAgaWYgd2UgdHJpZWQgdG8gYWRkIHRoZSBldmVudCwgZWxzZSBmYWxzZS5cbiAqIEl0IHJldHVybnMgYGZhbHNlYCBlLmcuIGlmIHdlIGFyZSBwYXVzZWQsIGRpc2FibGVkLCBvciBvdXQgb2YgdGhlIG1heCByZXBsYXkgZHVyYXRpb24uXG4gKlxuICogYGlzQ2hlY2tvdXRgIGlzIHRydWUgaWYgdGhpcyBpcyBlaXRoZXIgdGhlIHZlcnkgZmlyc3QgZXZlbnQsIG9yIGFuIGV2ZW50IHRyaWdnZXJlZCBieSBgY2hlY2tvdXRFdmVyeU5tc2AuXG4gKi9cbmZ1bmN0aW9uIGFkZEV2ZW50U3luYyhyZXBsYXksIGV2ZW50LCBpc0NoZWNrb3V0KSB7XG4gIGlmICghc2hvdWxkQWRkRXZlbnQocmVwbGF5LCBldmVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBUaGlzIHNob3VsZCBuZXZlciByZWplY3RcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICBfYWRkRXZlbnQocmVwbGF5LCBldmVudCwgaXNDaGVja291dCk7XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQWRkIGFuIGV2ZW50IHRvIHRoZSBldmVudCBidWZmZXIuXG4gKiBSZXNvbHZlcyB0byBgbnVsbGAgaWYgbm8gZXZlbnQgd2FzIGFkZGVkLCBlbHNlIHRvIGB2b2lkYC5cbiAqXG4gKiBgaXNDaGVja291dGAgaXMgdHJ1ZSBpZiB0aGlzIGlzIGVpdGhlciB0aGUgdmVyeSBmaXJzdCBldmVudCwgb3IgYW4gZXZlbnQgdHJpZ2dlcmVkIGJ5IGBjaGVja291dEV2ZXJ5Tm1zYC5cbiAqL1xuZnVuY3Rpb24gYWRkRXZlbnQoXG4gIHJlcGxheSxcbiAgZXZlbnQsXG4gIGlzQ2hlY2tvdXQsXG4pIHtcbiAgaWYgKCFzaG91bGRBZGRFdmVudChyZXBsYXksIGV2ZW50KSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gIH1cblxuICByZXR1cm4gX2FkZEV2ZW50KHJlcGxheSwgZXZlbnQsIGlzQ2hlY2tvdXQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfYWRkRXZlbnQoXG4gIHJlcGxheSxcbiAgZXZlbnQsXG4gIGlzQ2hlY2tvdXQsXG4pIHtcbiAgY29uc3QgeyBldmVudEJ1ZmZlciB9ID0gcmVwbGF5O1xuXG4gIGlmICghZXZlbnRCdWZmZXIgfHwgKGV2ZW50QnVmZmVyLndhaXRGb3JDaGVja291dCAmJiAhaXNDaGVja291dCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGlzQnVmZmVyTW9kZSA9IHJlcGxheS5yZWNvcmRpbmdNb2RlID09PSAnYnVmZmVyJztcblxuICB0cnkge1xuICAgIGlmIChpc0NoZWNrb3V0ICYmIGlzQnVmZmVyTW9kZSkge1xuICAgICAgZXZlbnRCdWZmZXIuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNDaGVja291dCkge1xuICAgICAgZXZlbnRCdWZmZXIuaGFzQ2hlY2tvdXQgPSB0cnVlO1xuICAgICAgZXZlbnRCdWZmZXIud2FpdEZvckNoZWNrb3V0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcmVwbGF5T3B0aW9ucyA9IHJlcGxheS5nZXRPcHRpb25zKCk7XG5cbiAgICBjb25zdCBldmVudEFmdGVyUG9zc2libGVDYWxsYmFjayA9IG1heWJlQXBwbHlDYWxsYmFjayhldmVudCwgcmVwbGF5T3B0aW9ucy5iZWZvcmVBZGRSZWNvcmRpbmdFdmVudCk7XG5cbiAgICBpZiAoIWV2ZW50QWZ0ZXJQb3NzaWJsZUNhbGxiYWNrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IGV2ZW50QnVmZmVyLmFkZEV2ZW50KGV2ZW50QWZ0ZXJQb3NzaWJsZUNhbGxiYWNrKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBpc0V4Y2VlZGVkID0gZXJyb3IgJiYgZXJyb3IgaW5zdGFuY2VvZiBFdmVudEJ1ZmZlclNpemVFeGNlZWRlZEVycm9yO1xuICAgIGNvbnN0IHJlYXNvbiA9IGlzRXhjZWVkZWQgPyAnYWRkRXZlbnRTaXplRXhjZWVkZWQnIDogJ2FkZEV2ZW50JztcblxuICAgIGlmIChpc0V4Y2VlZGVkICYmIGlzQnVmZmVyTW9kZSkge1xuICAgICAgLy8gQ2xlYXIgYnVmZmVyIGFuZCB3YWl0IGZvciBuZXh0IGNoZWNrb3V0XG4gICAgICBldmVudEJ1ZmZlci5jbGVhcigpO1xuICAgICAgZXZlbnRCdWZmZXIud2FpdEZvckNoZWNrb3V0ID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmVwbGF5LmhhbmRsZUV4Y2VwdGlvbihlcnJvcik7XG5cbiAgICBhd2FpdCByZXBsYXkuc3RvcCh7IHJlYXNvbiB9KTtcblxuICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuXG4gICAgaWYgKGNsaWVudCkge1xuICAgICAgY2xpZW50LnJlY29yZERyb3BwZWRFdmVudCgnaW50ZXJuYWxfc2RrX2Vycm9yJywgJ3JlcGxheScpO1xuICAgIH1cbiAgfVxufVxuXG4vKiogRXhwb3J0ZWQgb25seSBmb3IgdGVzdHMuICovXG5mdW5jdGlvbiBzaG91bGRBZGRFdmVudChyZXBsYXksIGV2ZW50KSB7XG4gIGlmICghcmVwbGF5LmV2ZW50QnVmZmVyIHx8IHJlcGxheS5pc1BhdXNlZCgpIHx8ICFyZXBsYXkuaXNFbmFibGVkKCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB0aW1lc3RhbXBJbk1zID0gdGltZXN0YW1wVG9NcyhldmVudC50aW1lc3RhbXApO1xuXG4gIC8vIFRocm93IG91dCBldmVudHMgdGhhdCBoYXBwZW4gbW9yZSB0aGFuIDUgbWludXRlcyBhZ28uIFRoaXMgY2FuIGhhcHBlbiBpZlxuICAvLyBwYWdlIGhhcyBiZWVuIGxlZnQgb3BlbiBhbmQgaWRsZSBmb3IgYSBsb25nIHBlcmlvZCBvZiB0aW1lIGFuZCB1c2VyXG4gIC8vIGNvbWVzIGJhY2sgdG8gdHJpZ2dlciBhIG5ldyBzZXNzaW9uLiBUaGUgcGVyZm9ybWFuY2UgZW50cmllcyByZWx5IG9uXG4gIC8vIGBwZXJmb3JtYW5jZS50aW1lT3JpZ2luYCwgd2hpY2ggaXMgd2hlbiB0aGUgcGFnZSBmaXJzdCBvcGVuZWQuXG4gIGlmICh0aW1lc3RhbXBJbk1zICsgcmVwbGF5LnRpbWVvdXRzLnNlc3Npb25JZGxlUGF1c2UgPCBEYXRlLm5vdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gVGhyb3cgb3V0IGV2ZW50cyB0aGF0IGFyZSArNjBtaW4gZnJvbSB0aGUgaW5pdGlhbCB0aW1lc3RhbXBcbiAgaWYgKHRpbWVzdGFtcEluTXMgPiByZXBsYXkuZ2V0Q29udGV4dCgpLmluaXRpYWxUaW1lc3RhbXAgKyByZXBsYXkuZ2V0T3B0aW9ucygpLm1heFJlcGxheUR1cmF0aW9uKSB7XG4gICAgREVCVUdfQlVJTEQgJiZcbiAgICAgIGRlYnVnLmluZm9UaWNrKGBTa2lwcGluZyBldmVudCB3aXRoIHRpbWVzdGFtcCAke3RpbWVzdGFtcEluTXN9IGJlY2F1c2UgaXQgaXMgYWZ0ZXIgbWF4UmVwbGF5RHVyYXRpb25gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbWF5YmVBcHBseUNhbGxiYWNrKFxuICBldmVudCxcbiAgY2FsbGJhY2ssXG4pIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nICYmIGlzQ3VzdG9tRXZlbnQoZXZlbnQpKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZXZlbnQpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBERUJVR19CVUlMRCAmJlxuICAgICAgZGVidWcuZXhjZXB0aW9uKGVycm9yLCAnQW4gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIGBiZWZvcmVBZGRSZWNvcmRpbmdFdmVudGAgY2FsbGJhY2ssIHNraXBwaW5nIHRoZSBldmVudC4uLicpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGV2ZW50O1xufVxuXG4vKiogSWYgdGhlIGV2ZW50IGlzIGFuIGVycm9yIGV2ZW50ICovXG5mdW5jdGlvbiBpc0Vycm9yRXZlbnQoZXZlbnQpIHtcbiAgcmV0dXJuICFldmVudC50eXBlO1xufVxuXG4vKiogSWYgdGhlIGV2ZW50IGlzIGEgdHJhbnNhY3Rpb24gZXZlbnQgKi9cbmZ1bmN0aW9uIGlzVHJhbnNhY3Rpb25FdmVudChldmVudCkge1xuICByZXR1cm4gZXZlbnQudHlwZSA9PT0gJ3RyYW5zYWN0aW9uJztcbn1cblxuLyoqIElmIHRoZSBldmVudCBpcyBhbiByZXBsYXkgZXZlbnQgKi9cbmZ1bmN0aW9uIGlzUmVwbGF5RXZlbnQoZXZlbnQpIHtcbiAgcmV0dXJuIGV2ZW50LnR5cGUgPT09ICdyZXBsYXlfZXZlbnQnO1xufVxuXG4vKiogSWYgdGhlIGV2ZW50IGlzIGEgZmVlZGJhY2sgZXZlbnQgKi9cbmZ1bmN0aW9uIGlzRmVlZGJhY2tFdmVudChldmVudCkge1xuICByZXR1cm4gZXZlbnQudHlwZSA9PT0gJ2ZlZWRiYWNrJztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbGlzdGVuZXIgdG8gYmUgYWRkZWQgdG8gYGNsaWVudC5vbignYWZ0ZXJTZW5kRXJyb3JFdmVudCwgbGlzdGVuZXIpYC5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlQWZ0ZXJTZW5kRXZlbnQocmVwbGF5KSB7XG4gIHJldHVybiAoZXZlbnQsIHNlbmRSZXNwb25zZSkgPT4ge1xuICAgIGlmICghcmVwbGF5LmlzRW5hYmxlZCgpIHx8ICghaXNFcnJvckV2ZW50KGV2ZW50KSAmJiAhaXNUcmFuc2FjdGlvbkV2ZW50KGV2ZW50KSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXNDb2RlID0gc2VuZFJlc3BvbnNlPy5zdGF0dXNDb2RlO1xuXG4gICAgLy8gV2Ugb25seSB3YW50IHRvIGRvIHN0dWZmIG9uIHN1Y2Nlc3NmdWwgZXJyb3Igc2VuZGluZywgb3RoZXJ3aXNlIHlvdSBnZXQgZXJyb3IgcmVwbGF5cyB3aXRob3V0IGVycm9ycyBhdHRhY2hlZFxuICAgIC8vIElmIG5vdCB1c2luZyB0aGUgYmFzZSB0cmFuc3BvcnQsIHdlIGFsbG93IGB1bmRlZmluZWRgIHJlc3BvbnNlIChhcyBhIGN1c3RvbSB0cmFuc3BvcnQgbWF5IG5vdCBpbXBsZW1lbnQgdGhpcyBjb3JyZWN0bHkgeWV0KVxuICAgIC8vIElmIHdlIGRvIHVzZSB0aGUgYmFzZSB0cmFuc3BvcnQsIHdlIHNraXAgaWYgd2UgZW5jb3VudGVyZWQgYW4gbm9uLU9LIHN0YXR1cyBjb2RlXG4gICAgaWYgKCFzdGF0dXNDb2RlIHx8IHN0YXR1c0NvZGUgPCAyMDAgfHwgc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNUcmFuc2FjdGlvbkV2ZW50KGV2ZW50KSkge1xuICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FdmVudChyZXBsYXksIGV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBoYW5kbGVFcnJvckV2ZW50KHJlcGxheSwgZXZlbnQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBoYW5kbGVUcmFuc2FjdGlvbkV2ZW50KHJlcGxheSwgZXZlbnQpIHtcbiAgY29uc3QgcmVwbGF5Q29udGV4dCA9IHJlcGxheS5nZXRDb250ZXh0KCk7XG5cbiAgLy8gQ29sbGVjdCB0cmFjZUlkcyBpbiBfY29udGV4dCByZWdhcmRsZXNzIG9mIGByZWNvcmRpbmdNb2RlYFxuICAvLyBJbiBlcnJvciBtb2RlLCBfY29udGV4dCBnZXRzIGNsZWFyZWQgb24gZXZlcnkgY2hlY2tvdXRcbiAgLy8gV2UgbGltaXQgdG8gbWF4LiAxMDAgdHJhbnNhY3Rpb25zIGxpbmtlZFxuICBpZiAoZXZlbnQuY29udGV4dHM/LnRyYWNlPy50cmFjZV9pZCAmJiByZXBsYXlDb250ZXh0LnRyYWNlSWRzLnNpemUgPCAxMDApIHtcbiAgICByZXBsYXlDb250ZXh0LnRyYWNlSWRzLmFkZChldmVudC5jb250ZXh0cy50cmFjZS50cmFjZV9pZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRXJyb3JFdmVudChyZXBsYXksIGV2ZW50KSB7XG4gIGNvbnN0IHJlcGxheUNvbnRleHQgPSByZXBsYXkuZ2V0Q29udGV4dCgpO1xuXG4gIC8vIEFkZCBlcnJvciB0byBsaXN0IG9mIGVycm9ySWRzIG9mIHJlcGxheS4gVGhpcyBpcyBvayB0byBkbyBldmVuIGlmIG5vdFxuICAvLyBzYW1wbGVkIGJlY2F1c2UgY29udGV4dCB3aWxsIGdldCByZXNldCBhdCBuZXh0IGNoZWNrb3V0LlxuICAvLyBYWFg6IFRoZXJlIGlzIGFsc28gYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBpdCdzIHBvc3NpYmxlIHRvIGNhcHR1cmUgYW5cbiAgLy8gZXJyb3IgdG8gU2VudHJ5IGJlZm9yZSBSZXBsYXkgU0RLIGhhcyBsb2FkZWQsIGJ1dCByZXNwb25zZSByZXR1cm5zIGFmdGVyXG4gIC8vIGl0IHdhcyBsb2FkZWQsIGFuZCB0aGlzIGdldHMgY2FsbGVkLlxuICAvLyBXZSBsaW1pdCB0byBtYXguIDEwMCBlcnJvcnMgbGlua2VkXG4gIGlmIChldmVudC5ldmVudF9pZCAmJiByZXBsYXlDb250ZXh0LmVycm9ySWRzLnNpemUgPCAxMDApIHtcbiAgICByZXBsYXlDb250ZXh0LmVycm9ySWRzLmFkZChldmVudC5ldmVudF9pZCk7XG4gIH1cblxuICAvLyBJZiBlcnJvciBldmVudCBpcyB0YWdnZWQgd2l0aCByZXBsYXkgaWQgaXQgbWVhbnMgaXQgd2FzIHNhbXBsZWQgKHdoZW4gaW4gYnVmZmVyIG1vZGUpXG4gIC8vIE5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsIHRoYXQgdGhpcyBkb2VzIG5vdCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wXG4gIGlmIChyZXBsYXkucmVjb3JkaW5nTW9kZSAhPT0gJ2J1ZmZlcicgfHwgIWV2ZW50LnRhZ3MgfHwgIWV2ZW50LnRhZ3MucmVwbGF5SWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7IGJlZm9yZUVycm9yU2FtcGxpbmcgfSA9IHJlcGxheS5nZXRPcHRpb25zKCk7XG4gIGlmICh0eXBlb2YgYmVmb3JlRXJyb3JTYW1wbGluZyA9PT0gJ2Z1bmN0aW9uJyAmJiAhYmVmb3JlRXJyb3JTYW1wbGluZyhldmVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzZXRUaW1lb3V0JDMoYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBDYXB0dXJlIGN1cnJlbnQgZXZlbnQgYnVmZmVyIGFzIG5ldyByZXBsYXlcbiAgICAgIGF3YWl0IHJlcGxheS5zZW5kQnVmZmVyZWRSZXBsYXlPckZsdXNoKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXBsYXkuaGFuZGxlRXhjZXB0aW9uKGVycik7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbGlzdGVuZXIgdG8gYmUgYWRkZWQgdG8gYGNsaWVudC5vbignYWZ0ZXJTZW5kRXJyb3JFdmVudCwgbGlzdGVuZXIpYC5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlQmVmb3JlU2VuZEV2ZW50KHJlcGxheSkge1xuICByZXR1cm4gKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFyZXBsYXkuaXNFbmFibGVkKCkgfHwgIWlzRXJyb3JFdmVudChldmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBoYW5kbGVIeWRyYXRpb25FcnJvcihyZXBsYXksIGV2ZW50KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlSHlkcmF0aW9uRXJyb3IocmVwbGF5LCBldmVudCkge1xuICBjb25zdCBleGNlcHRpb25WYWx1ZSA9IGV2ZW50LmV4Y2VwdGlvbj8udmFsdWVzPy5bMF0/LnZhbHVlO1xuICBpZiAodHlwZW9mIGV4Y2VwdGlvblZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChcbiAgICAvLyBPbmx5IG1hdGNoZXMgZXJyb3JzIGluIHByb2R1Y3Rpb24gYnVpbGRzIG9mIHJlYWN0LWRvbVxuICAgIC8vIEV4YW1wbGUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9NDIzXG4gICAgLy8gV2l0aCBuZXdlciBSZWFjdCB2ZXJzaW9ucywgdGhlIG1lc3NhZ2VzIGNoYW5nZWQgdG8gYSBkaWZmZXJlbnQgd2Vic2l0ZSBodHRwczovL3JlYWN0LmRldi9lcnJvcnMvNDE4XG4gICAgZXhjZXB0aW9uVmFsdWUubWF0Y2goXG4gICAgICAvKHJlYWN0anNcXC5vcmdcXC9kb2NzXFwvZXJyb3ItZGVjb2RlclxcLmh0bWxcXD9pbnZhcmlhbnQ9fHJlYWN0XFwuZGV2XFwvZXJyb3JzXFwvKSg0MTh8NDE5fDQyMnw0MjN8NDI1KS8sXG4gICAgKSB8fFxuICAgIC8vIERldmVsb3BtZW50IGJ1aWxkcyBvZiByZWFjdC1kb21cbiAgICAvLyBFcnJvciAxOiBIeWRyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIGluaXRpYWwgVUkgZG9lcyBub3QgbWF0Y2ggd2hhdCB3YXMgcmVuZGVyZWQgb24gdGhlIHNlcnZlci5cbiAgICAvLyBFcnJvciAyOiBUZXh0IGNvbnRlbnQgZG9lcyBub3QgbWF0Y2ggc2VydmVyLXJlbmRlcmVkIEhUTUwuIFdhcm5pbmc6IFRleHQgY29udGVudCBkaWQgbm90IG1hdGNoLlxuICAgIGV4Y2VwdGlvblZhbHVlLm1hdGNoKC8oZG9lcyBub3QgbWF0Y2ggc2VydmVyLXJlbmRlcmVkIEhUTUx8SHlkcmF0aW9uIGZhaWxlZCBiZWNhdXNlKS9pKVxuICApIHtcbiAgICBjb25zdCBicmVhZGNydW1iID0gY3JlYXRlQnJlYWRjcnVtYih7XG4gICAgICBjYXRlZ29yeTogJ3JlcGxheS5oeWRyYXRlLWVycm9yJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdXJsOiBnZXRMb2NhdGlvbkhyZWYoKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgYWRkQnJlYWRjcnVtYkV2ZW50KHJlcGxheSwgYnJlYWRjcnVtYik7XG4gIH1cbn1cblxuLyoqXG4gKiBIYW5kbGUgYnJlYWRjcnVtYnMgdGhhdCBTZW50cnkgY2FwdHVyZXMsIGFuZCBtYWtlIHN1cmUgdG8gY2FwdHVyZSByZWxldmFudCBicmVhZGNydW1icyB0byBSZXBsYXkgYXMgd2VsbC5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlQnJlYWRjcnVtYnMocmVwbGF5KSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuXG4gIGlmICghY2xpZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY2xpZW50Lm9uKCdiZWZvcmVBZGRCcmVhZGNydW1iJywgYnJlYWRjcnVtYiA9PiBiZWZvcmVBZGRCcmVhZGNydW1iKHJlcGxheSwgYnJlYWRjcnVtYikpO1xufVxuXG5mdW5jdGlvbiBiZWZvcmVBZGRCcmVhZGNydW1iKHJlcGxheSwgYnJlYWRjcnVtYikge1xuICBpZiAoIXJlcGxheS5pc0VuYWJsZWQoKSB8fCAhaXNCcmVhZGNydW1iV2l0aENhdGVnb3J5KGJyZWFkY3J1bWIpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gbm9ybWFsaXplQnJlYWRjcnVtYihicmVhZGNydW1iKTtcbiAgaWYgKHJlc3VsdCkge1xuICAgIGFkZEJyZWFkY3J1bWJFdmVudChyZXBsYXksIHJlc3VsdCk7XG4gIH1cbn1cblxuLyoqIEV4cG9ydGVkIG9ubHkgZm9yIHRlc3RzLiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQnJlYWRjcnVtYihicmVhZGNydW1iKSB7XG4gIGlmIChcbiAgICAhaXNCcmVhZGNydW1iV2l0aENhdGVnb3J5KGJyZWFkY3J1bWIpIHx8XG4gICAgW1xuICAgICAgLy8gZmV0Y2ggJiB4aHIgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSxpbiBoYW5kbGVOZXR3b3JrQnJlYWRjcnVtYnNcbiAgICAgICdmZXRjaCcsXG4gICAgICAneGhyJyxcbiAgICAgIC8vIFRoZXNlIHR3byBhcmUgYnJlYWRjcnVtYnMgZm9yIGVtaXR0ZWQgc2VudHJ5IGV2ZW50cywgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGVtXG4gICAgICAnc2VudHJ5LmV2ZW50JyxcbiAgICAgICdzZW50cnkudHJhbnNhY3Rpb24nLFxuICAgIF0uaW5jbHVkZXMoYnJlYWRjcnVtYi5jYXRlZ29yeSkgfHxcbiAgICAvLyBXZSBjYXB0dXJlIFVJIGJyZWFkY3J1bWJzIHNlcGFyYXRlbHlcbiAgICBicmVhZGNydW1iLmNhdGVnb3J5LnN0YXJ0c1dpdGgoJ3VpLicpXG4gICkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGJyZWFkY3J1bWIuY2F0ZWdvcnkgPT09ICdjb25zb2xlJykge1xuICAgIHJldHVybiBub3JtYWxpemVDb25zb2xlQnJlYWRjcnVtYihicmVhZGNydW1iKTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVCcmVhZGNydW1iKGJyZWFkY3J1bWIpO1xufVxuXG4vKiogZXhwb3J0ZWQgZm9yIHRlc3RzIG9ubHkgKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbnNvbGVCcmVhZGNydW1iKFxuICBicmVhZGNydW1iLFxuKSB7XG4gIGNvbnN0IGFyZ3MgPSBicmVhZGNydW1iLmRhdGE/LmFyZ3VtZW50cztcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJncykgfHwgYXJncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnJlYWRjcnVtYihicmVhZGNydW1iKTtcbiAgfVxuXG4gIGxldCBpc1RydW5jYXRlZCA9IGZhbHNlO1xuXG4gIC8vIEF2b2lkIGdpYW50IGFyZ3MgY2FwdHVyZXNcbiAgY29uc3Qgbm9ybWFsaXplZEFyZ3MgPSBhcmdzLm1hcChhcmcgPT4ge1xuICAgIGlmICghYXJnKSB7XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChhcmcubGVuZ3RoID4gQ09OU09MRV9BUkdfTUFYX1NJWkUpIHtcbiAgICAgICAgaXNUcnVuY2F0ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gYCR7YXJnLnNsaWNlKDAsIENPTlNPTEVfQVJHX01BWF9TSVpFKX3igKZgO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXJnO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRBcmcgPSBub3JtYWxpemUoYXJnLCA3KTtcbiAgICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeShub3JtYWxpemVkQXJnKTtcbiAgICAgICAgaWYgKHN0cmluZ2lmaWVkLmxlbmd0aCA+IENPTlNPTEVfQVJHX01BWF9TSVpFKSB7XG4gICAgICAgICAgaXNUcnVuY2F0ZWQgPSB0cnVlO1xuICAgICAgICAgIC8vIFdlIHVzZSB0aGUgcHJldHR5IHByaW50ZWQgSlNPTiBzdHJpbmcgaGVyZSBhcyBhIGJhc2VcbiAgICAgICAgICByZXR1cm4gYCR7SlNPTi5zdHJpbmdpZnkobm9ybWFsaXplZEFyZywgbnVsbCwgMikuc2xpY2UoMCwgQ09OU09MRV9BUkdfTUFYX1NJWkUpfeKApmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRBcmc7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gZmFsbCBiYWNrIHRvIGRlZmF1bHRcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXJnO1xuICB9KTtcblxuICByZXR1cm4gY3JlYXRlQnJlYWRjcnVtYih7XG4gICAgLi4uYnJlYWRjcnVtYixcbiAgICBkYXRhOiB7XG4gICAgICAuLi5icmVhZGNydW1iLmRhdGEsXG4gICAgICBhcmd1bWVudHM6IG5vcm1hbGl6ZWRBcmdzLFxuICAgICAgLi4uKGlzVHJ1bmNhdGVkID8geyBfbWV0YTogeyB3YXJuaW5nczogWydDT05TT0xFX0FSR19UUlVOQ0FURUQnXSB9IH0gOiB7fSksXG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzQnJlYWRjcnVtYldpdGhDYXRlZ29yeShicmVhZGNydW1iKSB7XG4gIHJldHVybiAhIWJyZWFkY3J1bWIuY2F0ZWdvcnk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHdlIHRoaW5rIHRoZSBnaXZlbiBldmVudCBpcyBhbiBlcnJvciBvcmlnaW5hdGluZyBpbnNpZGUgb2YgcnJ3ZWIuXG4gKi9cbmZ1bmN0aW9uIGlzUnJ3ZWJFcnJvcihldmVudCwgaGludCkge1xuICBpZiAoZXZlbnQudHlwZSB8fCAhZXZlbnQuZXhjZXB0aW9uPy52YWx1ZXM/Lmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhpcyBtYXkgYmUgc2V0IGJ5IHJyd2ViIHdoZW4gaXQgZmluZHMgZXJyb3JzXG4gIGlmIChoaW50Lm9yaWdpbmFsRXhjZXB0aW9uPy5fX3Jyd2ViX18pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXNldCB0aGUgYHJlcGxheV9pZGAgZmllbGQgb24gdGhlIERTQy5cbiAqL1xuZnVuY3Rpb24gcmVzZXRSZXBsYXlJZE9uRHluYW1pY1NhbXBsaW5nQ29udGV4dCgpIHtcbiAgLy8gUmVzZXQgRFNDIG9uIHRoZSBjdXJyZW50IHNjb3BlLCBpZiB0aGVyZSBpcyBvbmVcbiAgY29uc3QgZHNjID0gZ2V0Q3VycmVudFNjb3BlKCkuZ2V0UHJvcGFnYXRpb25Db250ZXh0KCkuZHNjO1xuICBpZiAoZHNjKSB7XG4gICAgZGVsZXRlIGRzYy5yZXBsYXlfaWQ7XG4gIH1cblxuICAvLyBDbGVhciBpdCBmcm9tIGZyb3plbiBEU0Mgb24gdGhlIGFjdGl2ZSBzcGFuXG4gIGNvbnN0IGFjdGl2ZVNwYW4gPSBnZXRBY3RpdmVTcGFuKCk7XG4gIGlmIChhY3RpdmVTcGFuKSB7XG4gICAgY29uc3QgZHNjID0gZ2V0RHluYW1pY1NhbXBsaW5nQ29udGV4dEZyb21TcGFuKGFjdGl2ZVNwYW4pO1xuICAgIGRlbGV0ZSAoZHNjICkucmVwbGF5X2lkO1xuICB9XG59XG5cbi8qKlxuICogQWRkIGEgZmVlZGJhY2sgYnJlYWRjcnVtYiBldmVudCB0byByZXBsYXkuXG4gKi9cbmZ1bmN0aW9uIGFkZEZlZWRiYWNrQnJlYWRjcnVtYihyZXBsYXksIGV2ZW50KSB7XG4gIHJlcGxheS50cmlnZ2VyVXNlckFjdGl2aXR5KCk7XG4gIHJlcGxheS5hZGRVcGRhdGUoKCkgPT4ge1xuICAgIGlmICghZXZlbnQudGltZXN0YW1wKSB7XG4gICAgICAvLyBJZ25vcmUgZXZlbnRzIHRoYXQgZG9uJ3QgaGF2ZSB0aW1lc3RhbXBzICh0aGlzIHNob3VsZG4ndCBoYXBwZW4sIG1vcmUgb2YgYSB0eXBpbmcgaXNzdWUpXG4gICAgICAvLyBSZXR1cm4gdHJ1ZSBoZXJlIHNvIHRoYXQgd2UgZG9uJ3QgZmx1c2hcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIHJlamVjdFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICByZXBsYXkudGhyb3R0bGVkQWRkRXZlbnQoe1xuICAgICAgdHlwZTogRXZlbnRUeXBlLkN1c3RvbSxcbiAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wICogMTAwMCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGFnOiAnYnJlYWRjcnVtYicsXG4gICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcCxcbiAgICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgICAgY2F0ZWdvcnk6ICdzZW50cnkuZmVlZGJhY2snLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGZlZWRiYWNrSWQ6IGV2ZW50LmV2ZW50X2lkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0gKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGV2ZW50IHNob3VsZCBiZSBzYW1wbGVkIChvbmx5IGFwcGxpZXMgaW4gYnVmZmVyIG1vZGUpLlxuICogV2hlbiBhbiBldmVudCBpcyBjYXB0dXJlZCBieSBgaGFuZGxlR2xvYmFsRXZlbnRgLCB3aGVuIGluIGJ1ZmZlciBtb2RlXG4gKiB3ZSBkZXRlcm1pbmUgaWYgd2Ugd2FudCB0byBzYW1wbGUgdGhlIGVycm9yIG9yIG5vdC5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkU2FtcGxlRm9yQnVmZmVyRXZlbnQocmVwbGF5LCBldmVudCkge1xuICBpZiAocmVwbGF5LnJlY29yZGluZ01vZGUgIT09ICdidWZmZXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gaWdub3JlIHRoaXMgZXJyb3IgYmVjYXVzZSBvdGhlcndpc2Ugd2UgY291bGQgbG9vcCBpbmRlZmluaXRlbHkgd2l0aFxuICAvLyB0cnlpbmcgdG8gY2FwdHVyZSByZXBsYXkgYW5kIGZhaWxpbmdcbiAgaWYgKGV2ZW50Lm1lc3NhZ2UgPT09IFVOQUJMRV9UT19TRU5EX1JFUExBWSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFJlcXVpcmUgdGhlIGV2ZW50IHRvIGJlIGFuIGVycm9yIGV2ZW50ICYgdG8gaGF2ZSBhbiBleGNlcHRpb25cbiAgaWYgKCFldmVudC5leGNlcHRpb24gfHwgZXZlbnQudHlwZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBpc1NhbXBsZWQocmVwbGF5LmdldE9wdGlvbnMoKS5lcnJvclNhbXBsZVJhdGUpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBsaXN0ZW5lciB0byBiZSBhZGRlZCB0byBgYWRkRXZlbnRQcm9jZXNzb3IobGlzdGVuZXIpYC5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlR2xvYmFsRXZlbnRMaXN0ZW5lcihyZXBsYXkpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXG4gICAgKGV2ZW50LCBoaW50KSA9PiB7XG4gICAgICAvLyBEbyBub3RoaW5nIGlmIHJlcGxheSBoYXMgYmVlbiBkaXNhYmxlZCBvciBwYXVzZWRcbiAgICAgIGlmICghcmVwbGF5LmlzRW5hYmxlZCgpIHx8IHJlcGxheS5pc1BhdXNlZCgpKSB7XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzUmVwbGF5RXZlbnQoZXZlbnQpKSB7XG4gICAgICAgIC8vIFJlcGxheXMgaGF2ZSBzZXBhcmF0ZSBzZXQgb2YgYnJlYWRjcnVtYnMsIGRvIG5vdCBpbmNsdWRlIGJyZWFkY3J1bWJzXG4gICAgICAgIC8vIGZyb20gY29yZSBTREtcbiAgICAgICAgZGVsZXRlIGV2ZW50LmJyZWFkY3J1bWJzO1xuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG9ubHkgd2FudCB0byBoYW5kbGUgZXJyb3JzLCB0cmFuc2FjdGlvbnMsIGFuZCBmZWVkYmFja3MsIG5vdGhpbmcgZWxzZVxuICAgICAgaWYgKCFpc0Vycm9yRXZlbnQoZXZlbnQpICYmICFpc1RyYW5zYWN0aW9uRXZlbnQoZXZlbnQpICYmICFpc0ZlZWRiYWNrRXZlbnQoZXZlbnQpKSB7XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH1cblxuICAgICAgLy8gRW5zdXJlIHdlIGRvIG5vdCBhZGQgcmVwbGF5X2lkIGlmIHRoZSBzZXNzaW9uIGlzIGV4cGlyZWRcbiAgICAgIGNvbnN0IGlzU2Vzc2lvbkFjdGl2ZSA9IHJlcGxheS5jaGVja0FuZEhhbmRsZUV4cGlyZWRTZXNzaW9uKCk7XG4gICAgICBpZiAoIWlzU2Vzc2lvbkFjdGl2ZSkge1xuICAgICAgICAvLyBwcmV2ZW50IGV4Y2VlZGluZyByZXBsYXkgZHVyYXRpb25zIGJ5IHJlbW92aW5nIHRoZSBleHBpcmVkIHJlcGxheUlkIGZyb20gdGhlIERTQ1xuICAgICAgICByZXNldFJlcGxheUlkT25EeW5hbWljU2FtcGxpbmdDb250ZXh0KCk7XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzRmVlZGJhY2tFdmVudChldmVudCkpIHtcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgcmVqZWN0XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICAgICAgcmVwbGF5LmZsdXNoKCk7XG4gICAgICAgIGV2ZW50LmNvbnRleHRzLmZlZWRiYWNrLnJlcGxheV9pZCA9IHJlcGxheS5nZXRTZXNzaW9uSWQoKTtcbiAgICAgICAgLy8gQWRkIGEgcmVwbGF5IGJyZWFkY3J1bWIgZm9yIHRoaXMgcGllY2Ugb2YgZmVlZGJhY2tcbiAgICAgICAgYWRkRmVlZGJhY2tCcmVhZGNydW1iKHJlcGxheSwgZXZlbnQpO1xuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIFVubGVzcyBgY2FwdHVyZUV4Y2VwdGlvbnNgIGlzIGVuYWJsZWQsIHdlIHdhbnQgdG8gaWdub3JlIGVycm9ycyBjb21pbmcgZnJvbSBycndlYlxuICAgICAgLy8gQXMgdGhlcmUgY2FuIGJlIGEgYnVuY2ggb2Ygc3R1ZmYgZ29pbmcgd3JvbmcgaW4gaW50ZXJuYWxzIHRoZXJlLCB0aGF0IHdlIGRvbid0IHdhbnQgdG8gYnViYmxlIHVwIHRvIHVzZXJzXG4gICAgICBpZiAoaXNScndlYkVycm9yKGV2ZW50LCBoaW50KSAmJiAhcmVwbGF5LmdldE9wdGlvbnMoKS5fZXhwZXJpbWVudHMuY2FwdHVyZUV4Y2VwdGlvbnMpIHtcbiAgICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKCdJZ25vcmluZyBlcnJvciBmcm9tIHJyd2ViIGludGVybmFscycsIGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIFdoZW4gaW4gYnVmZmVyIG1vZGUsIHdlIGRlY2lkZSB0byBzYW1wbGUgaGVyZS5cbiAgICAgIC8vIExhdGVyLCBpbiBgaGFuZGxlQWZ0ZXJTZW5kRXZlbnRgLCBpZiB0aGUgcmVwbGF5SWQgaXMgc2V0LCB3ZSBrbm93IHRoYXQgd2Ugc2FtcGxlZFxuICAgICAgLy8gQW5kIGNvbnZlcnQgdGhlIGJ1ZmZlciBzZXNzaW9uIHRvIGEgZnVsbCBzZXNzaW9uXG4gICAgICBjb25zdCBpc0Vycm9yRXZlbnRTYW1wbGVkID0gc2hvdWxkU2FtcGxlRm9yQnVmZmVyRXZlbnQocmVwbGF5LCBldmVudCk7XG5cbiAgICAgIC8vIFRhZyBlcnJvcnMgaWYgaXQgaGFzIGJlZW4gc2FtcGxlZCBpbiBidWZmZXIgbW9kZSwgb3IgaWYgaXQgaXMgc2Vzc2lvbiBtb2RlXG4gICAgICAvLyBPbmx5IHRhZyB0cmFuc2FjdGlvbnMgaWYgaW4gc2Vzc2lvbiBtb2RlXG4gICAgICBjb25zdCBzaG91bGRUYWdSZXBsYXlJZCA9IGlzRXJyb3JFdmVudFNhbXBsZWQgfHwgcmVwbGF5LnJlY29yZGluZ01vZGUgPT09ICdzZXNzaW9uJztcblxuICAgICAgaWYgKHNob3VsZFRhZ1JlcGxheUlkKSB7XG4gICAgICAgIGV2ZW50LnRhZ3MgPSB7IC4uLmV2ZW50LnRhZ3MsIHJlcGxheUlkOiByZXBsYXkuZ2V0U2Vzc2lvbklkKCkgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH0sXG4gICAgeyBpZDogJ1JlcGxheScgfSxcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBcInNwYW5cIiBmb3IgZWFjaCBwZXJmb3JtYW5jZSBlbnRyeS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGVyZm9ybWFuY2VTcGFucyhcbiAgcmVwbGF5LFxuICBlbnRyaWVzLFxuKSB7XG4gIHJldHVybiBlbnRyaWVzLm1hcCgoeyB0eXBlLCBzdGFydCwgZW5kLCBuYW1lLCBkYXRhIH0pID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IHJlcGxheS50aHJvdHRsZWRBZGRFdmVudCh7XG4gICAgICB0eXBlOiBFdmVudFR5cGUuQ3VzdG9tLFxuICAgICAgdGltZXN0YW1wOiBzdGFydCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGFnOiAncGVyZm9ybWFuY2VTcGFuJyxcbiAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgIG9wOiB0eXBlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBuYW1lLFxuICAgICAgICAgIHN0YXJ0VGltZXN0YW1wOiBzdGFydCxcbiAgICAgICAgICBlbmRUaW1lc3RhbXA6IGVuZCxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIElmIHJlc3BvbnNlIGlzIGEgc3RyaW5nLCBpdCBtZWFucyBpdHMgZWl0aGVyIFRIUk9UVExFRCBvciBTS0lQUEVEXG4gICAgcmV0dXJuIHR5cGVvZiByZXNwb25zZSA9PT0gJ3N0cmluZycgPyBQcm9taXNlLnJlc29sdmUobnVsbCkgOiByZXNwb25zZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUhpc3RvcnkoaGFuZGxlckRhdGEpIHtcbiAgY29uc3QgeyBmcm9tLCB0byB9ID0gaGFuZGxlckRhdGE7XG5cbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKSAvIDEwMDA7XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnbmF2aWdhdGlvbi5wdXNoJyxcbiAgICBzdGFydDogbm93LFxuICAgIGVuZDogbm93LFxuICAgIG5hbWU6IHRvLFxuICAgIGRhdGE6IHtcbiAgICAgIHByZXZpb3VzOiBmcm9tLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3RlbmVyIHRvIGJlIGFkZGVkIHRvIGBhZGRIaXN0b3J5SW5zdHJ1bWVudGF0aW9uSGFuZGxlcihsaXN0ZW5lcilgLlxuICovXG5mdW5jdGlvbiBoYW5kbGVIaXN0b3J5U3Bhbkxpc3RlbmVyKHJlcGxheSkge1xuICByZXR1cm4gKGhhbmRsZXJEYXRhKSA9PiB7XG4gICAgaWYgKCFyZXBsYXkuaXNFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBoYW5kbGVIaXN0b3J5KGhhbmRsZXJEYXRhKTtcblxuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBOZWVkIHRvIGNvbGxlY3QgdmlzaXRlZCBVUkxzXG4gICAgcmVwbGF5LmdldENvbnRleHQoKS51cmxzLnB1c2gocmVzdWx0Lm5hbWUpO1xuICAgIHJlcGxheS50cmlnZ2VyVXNlckFjdGl2aXR5KCk7XG5cbiAgICByZXBsYXkuYWRkVXBkYXRlKCgpID0+IHtcbiAgICAgIGNyZWF0ZVBlcmZvcm1hbmNlU3BhbnMocmVwbGF5LCBbcmVzdWx0XSk7XG4gICAgICAvLyBSZXR1cm5pbmcgZmFsc2UgdG8gZmx1c2hcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfTtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgZ2l2ZW4gcmVxdWVzdCBVUkwgc2hvdWxkIGJlIGZpbHRlcmVkIG91dC4gVGhpcyBpcyBzbyB3ZVxuICogZG9uJ3QgbG9nIFNlbnRyeSBpbmdlc3QgcmVxdWVzdHMuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZEZpbHRlclJlcXVlc3QocmVwbGF5LCB1cmwpIHtcbiAgLy8gSWYgd2UgZW5hYmxlZCB0aGUgYHRyYWNlSW50ZXJuYWxzYCBleHBlcmltZW50LCB3ZSB3YW50IHRvIHRyYWNlIGV2ZXJ5dGhpbmdcbiAgaWYgKERFQlVHX0JVSUxEICYmIHJlcGxheS5nZXRPcHRpb25zKCkuX2V4cGVyaW1lbnRzLnRyYWNlSW50ZXJuYWxzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzU2VudHJ5UmVxdWVzdFVybCh1cmwsIGdldENsaWVudCgpKTtcbn1cblxuLyoqIEFkZCBhIHBlcmZvcm1hbmNlIGVudHJ5IGJyZWFkY3J1bWIgKi9cbmZ1bmN0aW9uIGFkZE5ldHdvcmtCcmVhZGNydW1iKFxuICByZXBsYXksXG4gIHJlc3VsdCxcbikge1xuICBpZiAoIXJlcGxheS5pc0VuYWJsZWQoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc2hvdWxkRmlsdGVyUmVxdWVzdChyZXBsYXksIHJlc3VsdC5uYW1lKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJlcGxheS5hZGRVcGRhdGUoKCkgPT4ge1xuICAgIGNyZWF0ZVBlcmZvcm1hbmNlU3BhbnMocmVwbGF5LCBbcmVzdWx0XSk7XG4gICAgLy8gUmV0dXJuaW5nIHRydWUgd2lsbCBjYXVzZSBgYWRkVXBkYXRlYCB0byBub3QgZmx1c2hcbiAgICAvLyBXZSBkbyBub3Qgd2FudCBuZXR3b3JrIHJlcXVlc3RzIHRvIGNhdXNlIGEgZmx1c2guIFRoaXMgd2lsbCBwcmV2ZW50XG4gICAgLy8gcmVjdXJyaW5nL3BvbGxpbmcgcmVxdWVzdHMgZnJvbSBrZWVwaW5nIHRoZSByZXBsYXkgc2Vzc2lvbiBhbGl2ZS5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG5cbi8qKiBHZXQgdGhlIHNpemUgb2YgYSBib2R5LiAqL1xuZnVuY3Rpb24gZ2V0Qm9keVNpemUoYm9keSkge1xuICBpZiAoIWJvZHkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdGV4dEVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcblxuICB0cnkge1xuICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0ZXh0RW5jb2Rlci5lbmNvZGUoYm9keSkubGVuZ3RoO1xuICAgIH1cblxuICAgIGlmIChib2R5IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGV4dEVuY29kZXIuZW5jb2RlKGJvZHkudG9TdHJpbmcoKSkubGVuZ3RoO1xuICAgIH1cblxuICAgIGlmIChib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgIGNvbnN0IGZvcm1EYXRhU3RyID0gc2VyaWFsaXplRm9ybURhdGEoYm9keSk7XG4gICAgICByZXR1cm4gdGV4dEVuY29kZXIuZW5jb2RlKGZvcm1EYXRhU3RyKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKGJvZHkgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICByZXR1cm4gYm9keS5zaXplO1xuICAgIH1cblxuICAgIGlmIChib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gQ3VycmVudGx5IHVuaGFuZGxlZCB0eXBlczogQXJyYXlCdWZmZXJWaWV3LCBSZWFkYWJsZVN0cmVhbVxuICB9IGNhdGNoIHtcbiAgICAvLyBqdXN0IHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiBDb252ZXJ0IGEgQ29udGVudC1MZW5ndGggaGVhZGVyIHRvIG51bWJlci91bmRlZmluZWQuICAqL1xuZnVuY3Rpb24gcGFyc2VDb250ZW50TGVuZ3RoSGVhZGVyKGhlYWRlcikge1xuICBpZiAoIWhlYWRlcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzaXplID0gcGFyc2VJbnQoaGVhZGVyLCAxMCk7XG4gIHJldHVybiBpc05hTihzaXplKSA/IHVuZGVmaW5lZCA6IHNpemU7XG59XG5cbi8qKiBNZXJnZSBhIHdhcm5pbmcgaW50byBhbiBleGlzdGluZyBuZXR3b3JrIHJlcXVlc3QvcmVzcG9uc2UuICovXG5mdW5jdGlvbiBtZXJnZVdhcm5pbmcoXG4gIGluZm8sXG4gIHdhcm5pbmcsXG4pIHtcbiAgaWYgKCFpbmZvKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgc2l6ZTogdW5kZWZpbmVkLFxuICAgICAgX21ldGE6IHtcbiAgICAgICAgd2FybmluZ3M6IFt3YXJuaW5nXSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG5ld01ldGEgPSB7IC4uLmluZm8uX21ldGEgfTtcbiAgY29uc3QgZXhpc3RpbmdXYXJuaW5ncyA9IG5ld01ldGEud2FybmluZ3MgfHwgW107XG4gIG5ld01ldGEud2FybmluZ3MgPSBbLi4uZXhpc3RpbmdXYXJuaW5ncywgd2FybmluZ107XG5cbiAgaW5mby5fbWV0YSA9IG5ld01ldGE7XG4gIHJldHVybiBpbmZvO1xufVxuXG4vKiogQ29udmVydCBSZXBsYXlOZXR3b3JrUmVxdWVzdERhdGEgdG8gYSBQZXJmb3JtYW5jZUVudHJ5LiAqL1xuZnVuY3Rpb24gbWFrZU5ldHdvcmtSZXBsYXlCcmVhZGNydW1iKFxuICB0eXBlLFxuICBkYXRhLFxuKSB7XG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgeyBzdGFydFRpbWVzdGFtcCwgZW5kVGltZXN0YW1wLCB1cmwsIG1ldGhvZCwgc3RhdHVzQ29kZSwgcmVxdWVzdCwgcmVzcG9uc2UgfSA9IGRhdGE7XG5cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHR5cGUsXG4gICAgc3RhcnQ6IHN0YXJ0VGltZXN0YW1wIC8gMTAwMCxcbiAgICBlbmQ6IGVuZFRpbWVzdGFtcCAvIDEwMDAsXG4gICAgbmFtZTogdXJsLFxuICAgIGRhdGE6IHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHN0YXR1c0NvZGUsXG4gICAgICByZXF1ZXN0LFxuICAgICAgcmVzcG9uc2UsXG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKiogQnVpbGQgdGhlIHJlcXVlc3Qgb3IgcmVzcG9uc2UgcGFydCBvZiBhIHJlcGxheSBuZXR3b3JrIGJyZWFkY3J1bWIgdGhhdCB3YXMgc2tpcHBlZC4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2tpcHBlZE5ldHdvcmtSZXF1ZXN0T3JSZXNwb25zZShib2R5U2l6ZSkge1xuICByZXR1cm4ge1xuICAgIGhlYWRlcnM6IHt9LFxuICAgIHNpemU6IGJvZHlTaXplLFxuICAgIF9tZXRhOiB7XG4gICAgICB3YXJuaW5nczogWydVUkxfU0tJUFBFRCddLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKiBCdWlsZCB0aGUgcmVxdWVzdCBvciByZXNwb25zZSBwYXJ0IG9mIGEgcmVwbGF5IG5ldHdvcmsgYnJlYWRjcnVtYi4gKi9cbmZ1bmN0aW9uIGJ1aWxkTmV0d29ya1JlcXVlc3RPclJlc3BvbnNlKFxuICBoZWFkZXJzLFxuICBib2R5U2l6ZSxcbiAgYm9keSxcbikge1xuICBpZiAoIWJvZHlTaXplICYmIE9iamVjdC5rZXlzKGhlYWRlcnMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoIWJvZHlTaXplKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgfTtcbiAgfVxuXG4gIGlmICghYm9keSkge1xuICAgIHJldHVybiB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgc2l6ZTogYm9keVNpemUsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGluZm8gPSB7XG4gICAgaGVhZGVycyxcbiAgICBzaXplOiBib2R5U2l6ZSxcbiAgfTtcblxuICBjb25zdCB7IGJvZHk6IG5vcm1hbGl6ZWRCb2R5LCB3YXJuaW5ncyB9ID0gbm9ybWFsaXplTmV0d29ya0JvZHkoYm9keSk7XG4gIGluZm8uYm9keSA9IG5vcm1hbGl6ZWRCb2R5O1xuICBpZiAod2FybmluZ3M/Lmxlbmd0aCkge1xuICAgIGluZm8uX21ldGEgPSB7XG4gICAgICB3YXJuaW5ncyxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGluZm87XG59XG5cbi8qKiBGaWx0ZXIgYSBzZXQgb2YgaGVhZGVycyAqL1xuZnVuY3Rpb24gZ2V0QWxsb3dlZEhlYWRlcnMoaGVhZGVycywgYWxsb3dlZEhlYWRlcnMpIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpLnJlZHVjZSgoZmlsdGVyZWRIZWFkZXJzLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkS2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgLy8gQXZvaWQgcHV0dGluZyBlbXB0eSBzdHJpbmdzIGludG8gdGhlIGhlYWRlcnNcbiAgICBpZiAoYWxsb3dlZEhlYWRlcnMuaW5jbHVkZXMobm9ybWFsaXplZEtleSkgJiYgaGVhZGVyc1trZXldKSB7XG4gICAgICBmaWx0ZXJlZEhlYWRlcnNbbm9ybWFsaXplZEtleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcmVkSGVhZGVycztcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVOZXR3b3JrQm9keShib2R5KVxuXG4ge1xuICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvZHksXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGV4Y2VlZHNTaXplTGltaXQgPSBib2R5Lmxlbmd0aCA+IE5FVFdPUktfQk9EWV9NQVhfU0laRTtcbiAgY29uc3QgaXNQcm9iYWJseUpzb24gPSBfc3RySXNQcm9iYWJseUpzb24oYm9keSk7XG5cbiAgaWYgKGV4Y2VlZHNTaXplTGltaXQpIHtcbiAgICBjb25zdCB0cnVuY2F0ZWRCb2R5ID0gYm9keS5zbGljZSgwLCBORVRXT1JLX0JPRFlfTUFYX1NJWkUpO1xuXG4gICAgaWYgKGlzUHJvYmFibHlKc29uKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBib2R5OiB0cnVuY2F0ZWRCb2R5LFxuICAgICAgICB3YXJuaW5nczogWydNQVlCRV9KU09OX1RSVU5DQVRFRCddLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYm9keTogYCR7dHJ1bmNhdGVkQm9keX3igKZgLFxuICAgICAgd2FybmluZ3M6IFsnVEVYVF9UUlVOQ0FURUQnXSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGlzUHJvYmFibHlKc29uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGpzb25Cb2R5ID0gSlNPTi5wYXJzZShib2R5KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHk6IGpzb25Cb2R5LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGZhbGwgYmFjayB0byBqdXN0IHNlbmQgdGhlIGJvZHkgYXMgc3RyaW5nXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBib2R5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBfc3RySXNQcm9iYWJseUpzb24oc3RyKSB7XG4gIGNvbnN0IGZpcnN0ID0gc3RyWzBdO1xuICBjb25zdCBsYXN0ID0gc3RyW3N0ci5sZW5ndGggLSAxXTtcblxuICAvLyBTaW1wbGUgY2hlY2s6IElmIHRoaXMgZG9lcyBub3Qgc3RhcnQgJiBlbmQgd2l0aCB7fSBvciBbXSwgaXQncyBub3QgSlNPTlxuICByZXR1cm4gKGZpcnN0ID09PSAnWycgJiYgbGFzdCA9PT0gJ10nKSB8fCAoZmlyc3QgPT09ICd7JyAmJiBsYXN0ID09PSAnfScpO1xufVxuXG4vKiogTWF0Y2ggYW4gVVJMIGFnYWluc3QgYSBsaXN0IG9mIHN0cmluZ3MvUmVnZXguICovXG5mdW5jdGlvbiB1cmxNYXRjaGVzKHVybCwgdXJscykge1xuICBjb25zdCBmdWxsVXJsID0gZ2V0RnVsbFVybCh1cmwpO1xuXG4gIHJldHVybiBzdHJpbmdNYXRjaGVzU29tZVBhdHRlcm4oZnVsbFVybCwgdXJscyk7XG59XG5cbi8qKiBleHBvcnRlZCBmb3IgdGVzdHMgKi9cbmZ1bmN0aW9uIGdldEZ1bGxVcmwodXJsLCBiYXNlVVJJID0gV0lORE9XLmRvY3VtZW50LmJhc2VVUkkpIHtcbiAgLy8gU2hvcnQgY2lyY3VpdCBmb3IgY29tbW9uIGNhc2VzOlxuICBpZiAodXJsLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCB1cmwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSB8fCB1cmwuc3RhcnRzV2l0aChXSU5ET1cubG9jYXRpb24ub3JpZ2luKSkge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgY29uc3QgZml4ZWRVcmwgPSBuZXcgVVJMKHVybCwgYmFzZVVSSSk7XG5cbiAgLy8gSWYgdGhlc2UgZG8gbm90IG1hdGNoLCB3ZSBhcmUgbm90IGRlYWxpbmcgd2l0aCBhIHJlbGF0aXZlIFVSTCwgc28ganVzdCByZXR1cm4gaXRcbiAgaWYgKGZpeGVkVXJsLm9yaWdpbiAhPT0gbmV3IFVSTChiYXNlVVJJKS5vcmlnaW4pIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgY29uc3QgZnVsbFVybCA9IGZpeGVkVXJsLmhyZWY7XG5cbiAgLy8gUmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMsIGlmIHRoZXkgZG9uJ3QgbWF0Y2ggdGhlIG9yaWdpbmFsIFVSTFxuICBpZiAoIXVybC5lbmRzV2l0aCgnLycpICYmIGZ1bGxVcmwuZW5kc1dpdGgoJy8nKSkge1xuICAgIHJldHVybiBmdWxsVXJsLnNsaWNlKDAsIC0xKTtcbiAgfVxuXG4gIHJldHVybiBmdWxsVXJsO1xufVxuXG4vKipcbiAqIENhcHR1cmUgYSBmZXRjaCBicmVhZGNydW1iIHRvIGEgcmVwbGF5LlxuICogVGhpcyBhZGRzIGFkZGl0aW9uYWwgZGF0YSAod2hlcmUgYXBwcm9wcmlhdGUpLlxuICovXG5hc3luYyBmdW5jdGlvbiBjYXB0dXJlRmV0Y2hCcmVhZGNydW1iVG9SZXBsYXkoXG4gIGJyZWFkY3J1bWIsXG4gIGhpbnQsXG4gIG9wdGlvbnNcblxuLFxuKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IF9wcmVwYXJlRmV0Y2hEYXRhKGJyZWFkY3J1bWIsIGhpbnQsIG9wdGlvbnMpO1xuXG4gICAgLy8gQ3JlYXRlIGEgcmVwbGF5IHBlcmZvcm1hbmNlIGVudHJ5IGZyb20gdGhpcyBicmVhZGNydW1iXG4gICAgY29uc3QgcmVzdWx0ID0gbWFrZU5ldHdvcmtSZXBsYXlCcmVhZGNydW1iKCdyZXNvdXJjZS5mZXRjaCcsIGRhdGEpO1xuICAgIGFkZE5ldHdvcmtCcmVhZGNydW1iKG9wdGlvbnMucmVwbGF5LCByZXN1bHQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLmV4Y2VwdGlvbihlcnJvciwgJ0ZhaWxlZCB0byBjYXB0dXJlIGZldGNoIGJyZWFkY3J1bWInKTtcbiAgfVxufVxuXG4vKipcbiAqIEVucmljaCBhIGJyZWFkY3J1bWIgd2l0aCBhZGRpdGlvbmFsIGRhdGEuXG4gKiBUaGlzIGhhcyB0byBiZSBzeW5jICYgbXV0YXRlIHRoZSBnaXZlbiBicmVhZGNydW1iLFxuICogYXMgdGhlIGJyZWFkY3J1bWIgaXMgYWZ0ZXJ3YXJkcyBjb25zdW1lZCBieSBvdGhlciBoYW5kbGVycy5cbiAqL1xuZnVuY3Rpb24gZW5yaWNoRmV0Y2hCcmVhZGNydW1iKFxuICBicmVhZGNydW1iLFxuICBoaW50LFxuKSB7XG4gIGNvbnN0IHsgaW5wdXQsIHJlc3BvbnNlIH0gPSBoaW50O1xuXG4gIGNvbnN0IGJvZHkgPSBpbnB1dCA/IGdldEZldGNoUmVxdWVzdEFyZ0JvZHkoaW5wdXQpIDogdW5kZWZpbmVkO1xuICBjb25zdCByZXFTaXplID0gZ2V0Qm9keVNpemUoYm9keSk7XG5cbiAgY29uc3QgcmVzU2l6ZSA9IHJlc3BvbnNlID8gcGFyc2VDb250ZW50TGVuZ3RoSGVhZGVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcpKSA6IHVuZGVmaW5lZDtcblxuICBpZiAocmVxU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYnJlYWRjcnVtYi5kYXRhLnJlcXVlc3RfYm9keV9zaXplID0gcmVxU2l6ZTtcbiAgfVxuICBpZiAocmVzU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYnJlYWRjcnVtYi5kYXRhLnJlc3BvbnNlX2JvZHlfc2l6ZSA9IHJlc1NpemU7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3ByZXBhcmVGZXRjaERhdGEoXG4gIGJyZWFkY3J1bWIsXG4gIGhpbnQsXG4gIG9wdGlvbnMsXG4pIHtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgeyBzdGFydFRpbWVzdGFtcCA9IG5vdywgZW5kVGltZXN0YW1wID0gbm93IH0gPSBoaW50O1xuXG4gIGNvbnN0IHtcbiAgICB1cmwsXG4gICAgbWV0aG9kLFxuICAgIHN0YXR1c19jb2RlOiBzdGF0dXNDb2RlID0gMCxcbiAgICByZXF1ZXN0X2JvZHlfc2l6ZTogcmVxdWVzdEJvZHlTaXplLFxuICAgIHJlc3BvbnNlX2JvZHlfc2l6ZTogcmVzcG9uc2VCb2R5U2l6ZSxcbiAgfSA9IGJyZWFkY3J1bWIuZGF0YTtcblxuICBjb25zdCBjYXB0dXJlRGV0YWlscyA9XG4gICAgdXJsTWF0Y2hlcyh1cmwsIG9wdGlvbnMubmV0d29ya0RldGFpbEFsbG93VXJscykgJiYgIXVybE1hdGNoZXModXJsLCBvcHRpb25zLm5ldHdvcmtEZXRhaWxEZW55VXJscyk7XG5cbiAgY29uc3QgcmVxdWVzdCA9IGNhcHR1cmVEZXRhaWxzXG4gICAgPyBfZ2V0UmVxdWVzdEluZm8ob3B0aW9ucywgaGludC5pbnB1dCwgcmVxdWVzdEJvZHlTaXplKVxuICAgIDogYnVpbGRTa2lwcGVkTmV0d29ya1JlcXVlc3RPclJlc3BvbnNlKHJlcXVlc3RCb2R5U2l6ZSk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgX2dldFJlc3BvbnNlSW5mbyhjYXB0dXJlRGV0YWlscywgb3B0aW9ucywgaGludC5yZXNwb25zZSwgcmVzcG9uc2VCb2R5U2l6ZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFRpbWVzdGFtcCxcbiAgICBlbmRUaW1lc3RhbXAsXG4gICAgdXJsLFxuICAgIG1ldGhvZCxcbiAgICBzdGF0dXNDb2RlLFxuICAgIHJlcXVlc3QsXG4gICAgcmVzcG9uc2UsXG4gIH07XG59XG5cbmZ1bmN0aW9uIF9nZXRSZXF1ZXN0SW5mbyhcbiAgeyBuZXR3b3JrQ2FwdHVyZUJvZGllcywgbmV0d29ya1JlcXVlc3RIZWFkZXJzIH0sXG4gIGlucHV0LFxuICByZXF1ZXN0Qm9keVNpemUsXG4pIHtcbiAgY29uc3QgaGVhZGVycyA9IGlucHV0ID8gZ2V0UmVxdWVzdEhlYWRlcnMoaW5wdXQsIG5ldHdvcmtSZXF1ZXN0SGVhZGVycykgOiB7fTtcblxuICBpZiAoIW5ldHdvcmtDYXB0dXJlQm9kaWVzKSB7XG4gICAgcmV0dXJuIGJ1aWxkTmV0d29ya1JlcXVlc3RPclJlc3BvbnNlKGhlYWRlcnMsIHJlcXVlc3RCb2R5U2l6ZSwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8vIFdlIG9ubHkgd2FudCB0byB0cmFuc21pdCBzdHJpbmcgb3Igc3RyaW5nLWxpa2UgYm9kaWVzXG4gIGNvbnN0IHJlcXVlc3RCb2R5ID0gZ2V0RmV0Y2hSZXF1ZXN0QXJnQm9keShpbnB1dCk7XG4gIGNvbnN0IFtib2R5U3RyLCB3YXJuaW5nXSA9IGdldEJvZHlTdHJpbmcocmVxdWVzdEJvZHksIGRlYnVnKTtcbiAgY29uc3QgZGF0YSA9IGJ1aWxkTmV0d29ya1JlcXVlc3RPclJlc3BvbnNlKGhlYWRlcnMsIHJlcXVlc3RCb2R5U2l6ZSwgYm9keVN0cik7XG5cbiAgaWYgKHdhcm5pbmcpIHtcbiAgICByZXR1cm4gbWVyZ2VXYXJuaW5nKGRhdGEsIHdhcm5pbmcpO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKiBFeHBvcnRlZCBvbmx5IGZvciB0ZXN0cy4gKi9cbmFzeW5jIGZ1bmN0aW9uIF9nZXRSZXNwb25zZUluZm8oXG4gIGNhcHR1cmVEZXRhaWxzLFxuICB7XG4gICAgbmV0d29ya0NhcHR1cmVCb2RpZXMsXG4gICAgbmV0d29ya1Jlc3BvbnNlSGVhZGVycyxcbiAgfSxcbiAgcmVzcG9uc2UsXG4gIHJlc3BvbnNlQm9keVNpemUsXG4pIHtcbiAgaWYgKCFjYXB0dXJlRGV0YWlscyAmJiByZXNwb25zZUJvZHlTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYnVpbGRTa2lwcGVkTmV0d29ya1JlcXVlc3RPclJlc3BvbnNlKHJlc3BvbnNlQm9keVNpemUpO1xuICB9XG5cbiAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlID8gZ2V0QWxsSGVhZGVycyhyZXNwb25zZS5oZWFkZXJzLCBuZXR3b3JrUmVzcG9uc2VIZWFkZXJzKSA6IHt9O1xuXG4gIGlmICghcmVzcG9uc2UgfHwgKCFuZXR3b3JrQ2FwdHVyZUJvZGllcyAmJiByZXNwb25zZUJvZHlTaXplICE9PSB1bmRlZmluZWQpKSB7XG4gICAgcmV0dXJuIGJ1aWxkTmV0d29ya1JlcXVlc3RPclJlc3BvbnNlKGhlYWRlcnMsIHJlc3BvbnNlQm9keVNpemUsIHVuZGVmaW5lZCk7XG4gIH1cblxuICBjb25zdCBbYm9keVRleHQsIHdhcm5pbmddID0gYXdhaXQgX3BhcnNlRmV0Y2hSZXNwb25zZUJvZHkocmVzcG9uc2UpO1xuICBjb25zdCByZXN1bHQgPSBnZXRSZXNwb25zZURhdGEoYm9keVRleHQsIHtcbiAgICBuZXR3b3JrQ2FwdHVyZUJvZGllcyxcblxuICAgIHJlc3BvbnNlQm9keVNpemUsXG4gICAgY2FwdHVyZURldGFpbHMsXG4gICAgaGVhZGVycyxcbiAgfSk7XG5cbiAgaWYgKHdhcm5pbmcpIHtcbiAgICByZXR1cm4gbWVyZ2VXYXJuaW5nKHJlc3VsdCwgd2FybmluZyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBnZXRSZXNwb25zZURhdGEoXG4gIGJvZHlUZXh0LFxuICB7XG4gICAgbmV0d29ya0NhcHR1cmVCb2RpZXMsXG4gICAgcmVzcG9uc2VCb2R5U2l6ZSxcbiAgICBjYXB0dXJlRGV0YWlscyxcbiAgICBoZWFkZXJzLFxuICB9XG5cbixcbikge1xuICB0cnkge1xuICAgIGNvbnN0IHNpemUgPSBib2R5VGV4dD8ubGVuZ3RoICYmIHJlc3BvbnNlQm9keVNpemUgPT09IHVuZGVmaW5lZCA/IGdldEJvZHlTaXplKGJvZHlUZXh0KSA6IHJlc3BvbnNlQm9keVNpemU7XG5cbiAgICBpZiAoIWNhcHR1cmVEZXRhaWxzKSB7XG4gICAgICByZXR1cm4gYnVpbGRTa2lwcGVkTmV0d29ya1JlcXVlc3RPclJlc3BvbnNlKHNpemUpO1xuICAgIH1cblxuICAgIGlmIChuZXR3b3JrQ2FwdHVyZUJvZGllcykge1xuICAgICAgcmV0dXJuIGJ1aWxkTmV0d29ya1JlcXVlc3RPclJlc3BvbnNlKGhlYWRlcnMsIHNpemUsIGJvZHlUZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVpbGROZXR3b3JrUmVxdWVzdE9yUmVzcG9uc2UoaGVhZGVycywgc2l6ZSwgdW5kZWZpbmVkKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5leGNlcHRpb24oZXJyb3IsICdGYWlsZWQgdG8gc2VyaWFsaXplIHJlc3BvbnNlIGJvZHknKTtcbiAgICAvLyBmYWxsYmFja1xuICAgIHJldHVybiBidWlsZE5ldHdvcmtSZXF1ZXN0T3JSZXNwb25zZShoZWFkZXJzLCByZXNwb25zZUJvZHlTaXplLCB1bmRlZmluZWQpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9wYXJzZUZldGNoUmVzcG9uc2VCb2R5KHJlc3BvbnNlKSB7XG4gIGNvbnN0IHJlcyA9IF90cnlDbG9uZVJlc3BvbnNlKHJlc3BvbnNlKTtcblxuICBpZiAoIXJlcykge1xuICAgIHJldHVybiBbdW5kZWZpbmVkLCAnQk9EWV9QQVJTRV9FUlJPUiddO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB0ZXh0ID0gYXdhaXQgX3RyeUdldFJlc3BvbnNlVGV4dChyZXMpO1xuICAgIHJldHVybiBbdGV4dF07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubWVzc2FnZS5pbmRleE9mKCdUaW1lb3V0JykgPiAtMSkge1xuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcud2FybignUGFyc2luZyB0ZXh0IGJvZHkgZnJvbSByZXNwb25zZSB0aW1lZCBvdXQnKTtcbiAgICAgIHJldHVybiBbdW5kZWZpbmVkLCAnQk9EWV9QQVJTRV9USU1FT1VUJ107XG4gICAgfVxuXG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcuZXhjZXB0aW9uKGVycm9yLCAnRmFpbGVkIHRvIGdldCB0ZXh0IGJvZHkgZnJvbSByZXNwb25zZScpO1xuICAgIHJldHVybiBbdW5kZWZpbmVkLCAnQk9EWV9QQVJTRV9FUlJPUiddO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEFsbEhlYWRlcnMoaGVhZGVycywgYWxsb3dlZEhlYWRlcnMpIHtcbiAgY29uc3QgYWxsSGVhZGVycyA9IHt9O1xuXG4gIGFsbG93ZWRIZWFkZXJzLmZvckVhY2goaGVhZGVyID0+IHtcbiAgICBpZiAoaGVhZGVycy5nZXQoaGVhZGVyKSkge1xuICAgICAgYWxsSGVhZGVyc1toZWFkZXJdID0gaGVhZGVycy5nZXQoaGVhZGVyKSA7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYWxsSGVhZGVycztcbn1cblxuZnVuY3Rpb24gZ2V0UmVxdWVzdEhlYWRlcnMoZmV0Y2hBcmdzLCBhbGxvd2VkSGVhZGVycykge1xuICBpZiAoZmV0Y2hBcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgZmV0Y2hBcmdzWzBdICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBnZXRIZWFkZXJzRnJvbU9wdGlvbnMoZmV0Y2hBcmdzWzBdICwgYWxsb3dlZEhlYWRlcnMpO1xuICB9XG5cbiAgaWYgKGZldGNoQXJncy5sZW5ndGggPT09IDIpIHtcbiAgICByZXR1cm4gZ2V0SGVhZGVyc0Zyb21PcHRpb25zKGZldGNoQXJnc1sxXSAsIGFsbG93ZWRIZWFkZXJzKTtcbiAgfVxuXG4gIHJldHVybiB7fTtcbn1cblxuZnVuY3Rpb24gZ2V0SGVhZGVyc0Zyb21PcHRpb25zKFxuICBpbnB1dCxcbiAgYWxsb3dlZEhlYWRlcnMsXG4pIHtcbiAgaWYgKCFpbnB1dCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IGhlYWRlcnMgPSBpbnB1dC5oZWFkZXJzO1xuXG4gIGlmICghaGVhZGVycykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgIHJldHVybiBnZXRBbGxIZWFkZXJzKGhlYWRlcnMsIGFsbG93ZWRIZWFkZXJzKTtcbiAgfVxuXG4gIC8vIFdlIGRvIG5vdCBzdXBwb3J0IHRoaXMsIGFzIGl0IGlzIG5vdCByZWFsbHkgZG9jdW1lbnRlZCAoYW55bW9yZT8pXG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIGdldEFsbG93ZWRIZWFkZXJzKGhlYWRlcnMsIGFsbG93ZWRIZWFkZXJzKTtcbn1cblxuZnVuY3Rpb24gX3RyeUNsb25lUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgdHJ5IHtcbiAgICAvLyBXZSBoYXZlIHRvIGNsb25lIHRoaXMsIGFzIHRoZSBib2R5IGNhbiBvbmx5IGJlIHJlYWQgb25jZVxuICAgIHJldHVybiByZXNwb25zZS5jbG9uZSgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIHRoaXMgY2FuIHRocm93IGlmIHRoZSByZXNwb25zZSB3YXMgYWxyZWFkeSBjb25zdW1lZCBiZWZvcmVcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5leGNlcHRpb24oZXJyb3IsICdGYWlsZWQgdG8gY2xvbmUgcmVzcG9uc2UgYm9keScpO1xuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSByZXNwb25zZSBib2R5IG9mIGEgZmV0Y2ggcmVxdWVzdCwgb3IgdGltZW91dCBhZnRlciA1MDBtcy5cbiAqIEZldGNoIGNhbiByZXR1cm4gYSBzdHJlYW1pbmcgYm9keSwgdGhhdCBtYXkgbm90IHJlc29sdmUgKG9yIG5vdCBmb3IgYSBsb25nIHRpbWUpLlxuICogSWYgdGhhdCBoYXBwZW5zLCB3ZSByYXRoZXIgYWJvcnQgYWZ0ZXIgYSBzaG9ydCB0aW1lIHRoYW4ga2VlcCB3YWl0aW5nIGZvciB0aGlzLlxuICovXG5mdW5jdGlvbiBfdHJ5R2V0UmVzcG9uc2VUZXh0KHJlc3BvbnNlKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQkMygoKSA9PiByZWplY3QobmV3IEVycm9yKCdUaW1lb3V0IHdoaWxlIHRyeWluZyB0byByZWFkIHJlc3BvbnNlIGJvZHknKSksIDUwMCk7XG5cbiAgICBfZ2V0UmVzcG9uc2VUZXh0KHJlc3BvbnNlKVxuICAgICAgLnRoZW4oXG4gICAgICAgIHR4dCA9PiByZXNvbHZlKHR4dCksXG4gICAgICAgIHJlYXNvbiA9PiByZWplY3QocmVhc29uKSxcbiAgICAgIClcbiAgICAgIC5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfZ2V0UmVzcG9uc2VUZXh0KHJlc3BvbnNlKSB7XG4gIC8vIEZvcmNlIHRoaXMgdG8gYmUgYSBwcm9taXNlLCBqdXN0IHRvIGJlIHNhZmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJldHVybi1hd2FpdFxuICByZXR1cm4gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xufVxuXG4vKipcbiAqIENhcHR1cmUgYW4gWEhSIGJyZWFkY3J1bWIgdG8gYSByZXBsYXkuXG4gKiBUaGlzIGFkZHMgYWRkaXRpb25hbCBkYXRhICh3aGVyZSBhcHByb3ByaWF0ZSkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVYaHJCcmVhZGNydW1iVG9SZXBsYXkoXG4gIGJyZWFkY3J1bWIsXG4gIGhpbnQsXG4gIG9wdGlvbnMsXG4pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gX3ByZXBhcmVYaHJEYXRhKGJyZWFkY3J1bWIsIGhpbnQsIG9wdGlvbnMpO1xuXG4gICAgLy8gQ3JlYXRlIGEgcmVwbGF5IHBlcmZvcm1hbmNlIGVudHJ5IGZyb20gdGhpcyBicmVhZGNydW1iXG4gICAgY29uc3QgcmVzdWx0ID0gbWFrZU5ldHdvcmtSZXBsYXlCcmVhZGNydW1iKCdyZXNvdXJjZS54aHInLCBkYXRhKTtcbiAgICBhZGROZXR3b3JrQnJlYWRjcnVtYihvcHRpb25zLnJlcGxheSwgcmVzdWx0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5leGNlcHRpb24oZXJyb3IsICdGYWlsZWQgdG8gY2FwdHVyZSB4aHIgYnJlYWRjcnVtYicpO1xuICB9XG59XG5cbi8qKlxuICogRW5yaWNoIGEgYnJlYWRjcnVtYiB3aXRoIGFkZGl0aW9uYWwgZGF0YS5cbiAqIFRoaXMgaGFzIHRvIGJlIHN5bmMgJiBtdXRhdGUgdGhlIGdpdmVuIGJyZWFkY3J1bWIsXG4gKiBhcyB0aGUgYnJlYWRjcnVtYiBpcyBhZnRlcndhcmRzIGNvbnN1bWVkIGJ5IG90aGVyIGhhbmRsZXJzLlxuICovXG5mdW5jdGlvbiBlbnJpY2hYaHJCcmVhZGNydW1iKFxuICBicmVhZGNydW1iLFxuICBoaW50LFxuKSB7XG4gIGNvbnN0IHsgeGhyLCBpbnB1dCB9ID0gaGludDtcblxuICBpZiAoIXhocikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlcVNpemUgPSBnZXRCb2R5U2l6ZShpbnB1dCk7XG4gIGNvbnN0IHJlc1NpemUgPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJylcbiAgICA/IHBhcnNlQ29udGVudExlbmd0aEhlYWRlcih4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJykpXG4gICAgOiBfZ2V0Qm9keVNpemUoeGhyLnJlc3BvbnNlLCB4aHIucmVzcG9uc2VUeXBlKTtcblxuICBpZiAocmVxU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYnJlYWRjcnVtYi5kYXRhLnJlcXVlc3RfYm9keV9zaXplID0gcmVxU2l6ZTtcbiAgfVxuICBpZiAocmVzU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYnJlYWRjcnVtYi5kYXRhLnJlc3BvbnNlX2JvZHlfc2l6ZSA9IHJlc1NpemU7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3ByZXBhcmVYaHJEYXRhKFxuICBicmVhZGNydW1iLFxuICBoaW50LFxuICBvcHRpb25zLFxuKSB7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IHsgc3RhcnRUaW1lc3RhbXAgPSBub3csIGVuZFRpbWVzdGFtcCA9IG5vdywgaW5wdXQsIHhociB9ID0gaGludDtcblxuICBjb25zdCB7XG4gICAgdXJsLFxuICAgIG1ldGhvZCxcbiAgICBzdGF0dXNfY29kZTogc3RhdHVzQ29kZSA9IDAsXG4gICAgcmVxdWVzdF9ib2R5X3NpemU6IHJlcXVlc3RCb2R5U2l6ZSxcbiAgICByZXNwb25zZV9ib2R5X3NpemU6IHJlc3BvbnNlQm9keVNpemUsXG4gIH0gPSBicmVhZGNydW1iLmRhdGE7XG5cbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICgheGhyIHx8ICF1cmxNYXRjaGVzKHVybCwgb3B0aW9ucy5uZXR3b3JrRGV0YWlsQWxsb3dVcmxzKSB8fCB1cmxNYXRjaGVzKHVybCwgb3B0aW9ucy5uZXR3b3JrRGV0YWlsRGVueVVybHMpKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IGJ1aWxkU2tpcHBlZE5ldHdvcmtSZXF1ZXN0T3JSZXNwb25zZShyZXF1ZXN0Qm9keVNpemUpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYnVpbGRTa2lwcGVkTmV0d29ya1JlcXVlc3RPclJlc3BvbnNlKHJlc3BvbnNlQm9keVNpemUpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydFRpbWVzdGFtcCxcbiAgICAgIGVuZFRpbWVzdGFtcCxcbiAgICAgIHVybCxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHN0YXR1c0NvZGUsXG4gICAgICByZXF1ZXN0LFxuICAgICAgcmVzcG9uc2UsXG4gICAgfTtcbiAgfVxuXG4gIC8vIC0tLS0gVGhpcyBhZGRpdGlvbmFsIG5ldHdvcmsgZGF0YSBiZWxvdyBpcyBvbmx5IGNhcHR1cmVkIGZvciBVUkxzIGRlZmluZWQgaW4gYG5ldHdvcmtEZXRhaWxBbGxvd1VybHNgIC0tLS1cblxuICBjb25zdCB4aHJJbmZvID0geGhyW1NFTlRSWV9YSFJfREFUQV9LRVldO1xuICBjb25zdCBuZXR3b3JrUmVxdWVzdEhlYWRlcnMgPSB4aHJJbmZvXG4gICAgPyBnZXRBbGxvd2VkSGVhZGVycyh4aHJJbmZvLnJlcXVlc3RfaGVhZGVycywgb3B0aW9ucy5uZXR3b3JrUmVxdWVzdEhlYWRlcnMpXG4gICAgOiB7fTtcbiAgY29uc3QgbmV0d29ya1Jlc3BvbnNlSGVhZGVycyA9IGdldEFsbG93ZWRIZWFkZXJzKGdldFJlc3BvbnNlSGVhZGVycyh4aHIpLCBvcHRpb25zLm5ldHdvcmtSZXNwb25zZUhlYWRlcnMpO1xuXG4gIGNvbnN0IFtyZXF1ZXN0Qm9keSwgcmVxdWVzdFdhcm5pbmddID0gb3B0aW9ucy5uZXR3b3JrQ2FwdHVyZUJvZGllcyA/IGdldEJvZHlTdHJpbmcoaW5wdXQsIGRlYnVnKSA6IFt1bmRlZmluZWRdO1xuICBjb25zdCBbcmVzcG9uc2VCb2R5LCByZXNwb25zZVdhcm5pbmddID0gb3B0aW9ucy5uZXR3b3JrQ2FwdHVyZUJvZGllcyA/IF9nZXRYaHJSZXNwb25zZUJvZHkoeGhyKSA6IFt1bmRlZmluZWRdO1xuXG4gIGNvbnN0IHJlcXVlc3QgPSBidWlsZE5ldHdvcmtSZXF1ZXN0T3JSZXNwb25zZShuZXR3b3JrUmVxdWVzdEhlYWRlcnMsIHJlcXVlc3RCb2R5U2l6ZSwgcmVxdWVzdEJvZHkpO1xuICBjb25zdCByZXNwb25zZSA9IGJ1aWxkTmV0d29ya1JlcXVlc3RPclJlc3BvbnNlKG5ldHdvcmtSZXNwb25zZUhlYWRlcnMsIHJlc3BvbnNlQm9keVNpemUsIHJlc3BvbnNlQm9keSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydFRpbWVzdGFtcCxcbiAgICBlbmRUaW1lc3RhbXAsXG4gICAgdXJsLFxuICAgIG1ldGhvZCxcbiAgICBzdGF0dXNDb2RlLFxuICAgIHJlcXVlc3Q6IHJlcXVlc3RXYXJuaW5nID8gbWVyZ2VXYXJuaW5nKHJlcXVlc3QsIHJlcXVlc3RXYXJuaW5nKSA6IHJlcXVlc3QsXG4gICAgcmVzcG9uc2U6IHJlc3BvbnNlV2FybmluZyA/IG1lcmdlV2FybmluZyhyZXNwb25zZSwgcmVzcG9uc2VXYXJuaW5nKSA6IHJlc3BvbnNlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZXNwb25zZUhlYWRlcnMoeGhyKSB7XG4gIGNvbnN0IGhlYWRlcnMgPSB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIGhlYWRlcnMuc3BsaXQoJ1xcclxcbicpLnJlZHVjZSgoYWNjLCBsaW5lKSA9PiB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gbGluZS5zcGxpdCgnOiAnKSA7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBhY2Nba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gX2dldFhoclJlc3BvbnNlQm9keSh4aHIpIHtcbiAgLy8gV2UgY29sbGVjdCBlcnJvcnMgdGhhdCBoYXBwZW4sIGJ1dCBvbmx5IGxvZyB0aGVtIGlmIHdlIGNhbid0IGdldCBhbnkgcmVzcG9uc2UgYm9keVxuICBjb25zdCBlcnJvcnMgPSBbXTtcblxuICB0cnkge1xuICAgIHJldHVybiBbeGhyLnJlc3BvbnNlVGV4dF07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvcnMucHVzaChlKTtcbiAgfVxuXG4gIC8vIFRyeSB0byBtYW51YWxseSBwYXJzZSB0aGUgcmVzcG9uc2UgYm9keSwgaWYgcmVzcG9uc2VUZXh0IGZhaWxzXG4gIHRyeSB7XG4gICAgcmV0dXJuIF9wYXJzZVhoclJlc3BvbnNlKHhoci5yZXNwb25zZSwgeGhyLnJlc3BvbnNlVHlwZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvcnMucHVzaChlKTtcbiAgfVxuXG4gIERFQlVHX0JVSUxEICYmIGRlYnVnLndhcm4oJ0ZhaWxlZCB0byBnZXQgeGhyIHJlc3BvbnNlIGJvZHknLCAuLi5lcnJvcnMpO1xuXG4gIHJldHVybiBbdW5kZWZpbmVkXTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgWEhSIHJlc3BvbnNlLlxuICogQmFzZWQgb24gTUROLCB0aGVzZSBhcmUgdGhlIHBvc3NpYmxlIHR5cGVzIG9mIHRoZSByZXNwb25zZTpcbiAqIHN0cmluZ1xuICogQXJyYXlCdWZmZXJcbiAqIEJsb2JcbiAqIERvY3VtZW50XG4gKiBQT0pPXG4gKlxuICogRXhwb3J0ZWQgb25seSBmb3IgdGVzdHMuXG4gKi9cbmZ1bmN0aW9uIF9wYXJzZVhoclJlc3BvbnNlKFxuICBib2R5LFxuICByZXNwb25zZVR5cGUsXG4pIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gW2JvZHldO1xuICAgIH1cblxuICAgIGlmIChib2R5IGluc3RhbmNlb2YgRG9jdW1lbnQpIHtcbiAgICAgIHJldHVybiBbYm9keS5ib2R5Lm91dGVySFRNTF07XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nICYmIGJvZHkgJiYgdHlwZW9mIGJvZHkgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gW0pTT04uc3RyaW5naWZ5KGJvZHkpXTtcbiAgICB9XG5cbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHJldHVybiBbdW5kZWZpbmVkXTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcuZXhjZXB0aW9uKGVycm9yLCAnRmFpbGVkIHRvIHNlcmlhbGl6ZSBib2R5JywgYm9keSk7XG4gICAgcmV0dXJuIFt1bmRlZmluZWQsICdCT0RZX1BBUlNFX0VSUk9SJ107XG4gIH1cblxuICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5sb2coJ1NraXBwaW5nIG5ldHdvcmsgYm9keSBiZWNhdXNlIG9mIGJvZHkgdHlwZScsIGJvZHkpO1xuXG4gIHJldHVybiBbdW5kZWZpbmVkLCAnVU5QQVJTRUFCTEVfQk9EWV9UWVBFJ107XG59XG5cbmZ1bmN0aW9uIF9nZXRCb2R5U2l6ZShcbiAgYm9keSxcbiAgcmVzcG9uc2VUeXBlLFxuKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgYm9keVN0ciA9IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nICYmIGJvZHkgJiYgdHlwZW9mIGJvZHkgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoYm9keSkgOiBib2R5O1xuICAgIHJldHVybiBnZXRCb2R5U2l6ZShib2R5U3RyKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGRvZXMgdHdvIHRoaW5nczpcbiAqIC0gSXQgZW5yaWNoZXMgdGhlIHJlZ3VsYXIgWEhSL2ZldGNoIGJyZWFkY3J1bWJzIHdpdGggcmVxdWVzdC9yZXNwb25zZSBzaXplIGRhdGFcbiAqIC0gSXQgY2FwdHVyZXMgdGhlIFhIUi9mZXRjaCBicmVhZGNydW1icyB0byB0aGUgcmVwbGF5XG4gKiAgIChlbnJpY2hpbmcgaXQgd2l0aCBmdXJ0aGVyIGRhdGEgdGhhdCBpcyBfbm90XyBhZGRlZCB0byB0aGUgcmVndWxhciBicmVhZGNydW1icylcbiAqL1xuZnVuY3Rpb24gaGFuZGxlTmV0d29ya0JyZWFkY3J1bWJzKHJlcGxheSkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHtcbiAgICAgIG5ldHdvcmtEZXRhaWxBbGxvd1VybHMsXG4gICAgICBuZXR3b3JrRGV0YWlsRGVueVVybHMsXG4gICAgICBuZXR3b3JrQ2FwdHVyZUJvZGllcyxcbiAgICAgIG5ldHdvcmtSZXF1ZXN0SGVhZGVycyxcbiAgICAgIG5ldHdvcmtSZXNwb25zZUhlYWRlcnMsXG4gICAgfSA9IHJlcGxheS5nZXRPcHRpb25zKCk7XG5cbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcmVwbGF5LFxuICAgICAgbmV0d29ya0RldGFpbEFsbG93VXJscyxcbiAgICAgIG5ldHdvcmtEZXRhaWxEZW55VXJscyxcbiAgICAgIG5ldHdvcmtDYXB0dXJlQm9kaWVzLFxuICAgICAgbmV0d29ya1JlcXVlc3RIZWFkZXJzLFxuICAgICAgbmV0d29ya1Jlc3BvbnNlSGVhZGVycyxcbiAgICB9O1xuXG4gICAgaWYgKGNsaWVudCkge1xuICAgICAgY2xpZW50Lm9uKCdiZWZvcmVBZGRCcmVhZGNydW1iJywgKGJyZWFkY3J1bWIsIGhpbnQpID0+IGJlZm9yZUFkZE5ldHdvcmtCcmVhZGNydW1iKG9wdGlvbnMsIGJyZWFkY3J1bWIsIGhpbnQpKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxufVxuXG4vKioganVzdCBleHBvcnRlZCBmb3IgdGVzdHMgKi9cbmZ1bmN0aW9uIGJlZm9yZUFkZE5ldHdvcmtCcmVhZGNydW1iKFxuICBvcHRpb25zLFxuICBicmVhZGNydW1iLFxuICBoaW50LFxuKSB7XG4gIGlmICghYnJlYWRjcnVtYi5kYXRhKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoX2lzWGhyQnJlYWRjcnVtYihicmVhZGNydW1iKSAmJiBfaXNYaHJIaW50KGhpbnQpKSB7XG4gICAgICAvLyBUaGlzIGhhcyB0byBiZSBzeW5jLCBhcyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgYnJlYWRjcnVtYiBpcyBlbnJpY2hlZCBpbiB0aGUgc2FtZSB0aWNrXG4gICAgICAvLyBCZWNhdXNlIHRoZSBob29rIHJ1bnMgc3luY2hyb25vdXNseSwgYW5kIHRoZSBicmVhZGNydW1iIGlzIGFmdGVyd2FyZHMgcGFzc2VkIG9uXG4gICAgICAvLyBTbyBhbnkgYXN5bmMgbXV0YXRpb25zIHRvIGl0IHdpbGwgbm90IGJlIHJlZmxlY3RlZCBpbiB0aGUgZmluYWwgYnJlYWRjcnVtYlxuICAgICAgZW5yaWNoWGhyQnJlYWRjcnVtYihicmVhZGNydW1iLCBoaW50KTtcblxuICAgICAgLy8gVGhpcyBjYWxsIHNob3VsZCBub3QgcmVqZWN0XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICBjYXB0dXJlWGhyQnJlYWRjcnVtYlRvUmVwbGF5KGJyZWFkY3J1bWIsIGhpbnQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChfaXNGZXRjaEJyZWFkY3J1bWIoYnJlYWRjcnVtYikgJiYgX2lzRmV0Y2hIaW50KGhpbnQpKSB7XG4gICAgICAvLyBUaGlzIGhhcyB0byBiZSBzeW5jLCBhcyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgYnJlYWRjcnVtYiBpcyBlbnJpY2hlZCBpbiB0aGUgc2FtZSB0aWNrXG4gICAgICAvLyBCZWNhdXNlIHRoZSBob29rIHJ1bnMgc3luY2hyb25vdXNseSwgYW5kIHRoZSBicmVhZGNydW1iIGlzIGFmdGVyd2FyZHMgcGFzc2VkIG9uXG4gICAgICAvLyBTbyBhbnkgYXN5bmMgbXV0YXRpb25zIHRvIGl0IHdpbGwgbm90IGJlIHJlZmxlY3RlZCBpbiB0aGUgZmluYWwgYnJlYWRjcnVtYlxuICAgICAgZW5yaWNoRmV0Y2hCcmVhZGNydW1iKGJyZWFkY3J1bWIsIGhpbnQpO1xuXG4gICAgICAvLyBUaGlzIGNhbGwgc2hvdWxkIG5vdCByZWplY3RcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICAgIGNhcHR1cmVGZXRjaEJyZWFkY3J1bWJUb1JlcGxheShicmVhZGNydW1iLCBoaW50LCBvcHRpb25zKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5leGNlcHRpb24oZSwgJ0Vycm9yIHdoZW4gZW5yaWNoaW5nIG5ldHdvcmsgYnJlYWRjcnVtYicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9pc1hockJyZWFkY3J1bWIoYnJlYWRjcnVtYikge1xuICByZXR1cm4gYnJlYWRjcnVtYi5jYXRlZ29yeSA9PT0gJ3hocic7XG59XG5cbmZ1bmN0aW9uIF9pc0ZldGNoQnJlYWRjcnVtYihicmVhZGNydW1iKSB7XG4gIHJldHVybiBicmVhZGNydW1iLmNhdGVnb3J5ID09PSAnZmV0Y2gnO1xufVxuXG5mdW5jdGlvbiBfaXNYaHJIaW50KGhpbnQpIHtcbiAgcmV0dXJuIGhpbnQ/Lnhocjtcbn1cblxuZnVuY3Rpb24gX2lzRmV0Y2hIaW50KGhpbnQpIHtcbiAgcmV0dXJuIGhpbnQ/LnJlc3BvbnNlO1xufVxuXG4vKipcbiAqIEFkZCBnbG9iYWwgbGlzdGVuZXJzIHRoYXQgY2Fubm90IGJlIHJlbW92ZWQuXG4gKi9cbmZ1bmN0aW9uIGFkZEdsb2JhbExpc3RlbmVycyhyZXBsYXkpIHtcbiAgLy8gTGlzdGVuZXJzIGZyb20gY29yZSBTREsgLy9cbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KCk7XG5cbiAgYWRkQ2xpY2tLZXlwcmVzc0luc3RydW1lbnRhdGlvbkhhbmRsZXIoaGFuZGxlRG9tTGlzdGVuZXIocmVwbGF5KSk7XG4gIGFkZEhpc3RvcnlJbnN0cnVtZW50YXRpb25IYW5kbGVyKGhhbmRsZUhpc3RvcnlTcGFuTGlzdGVuZXIocmVwbGF5KSk7XG4gIGhhbmRsZUJyZWFkY3J1bWJzKHJlcGxheSk7XG4gIGhhbmRsZU5ldHdvcmtCcmVhZGNydW1icyhyZXBsYXkpO1xuXG4gIC8vIFRhZyBhbGwgKG5vbiByZXBsYXkpIGV2ZW50cyB0aGF0IGdldCBzZW50IHRvIFNlbnRyeSB3aXRoIHRoZSBjdXJyZW50XG4gIC8vIHJlcGxheSBJRCBzbyB0aGF0IHdlIGNhbiByZWZlcmVuY2UgdGhlbSBsYXRlciBpbiB0aGUgVUlcbiAgY29uc3QgZXZlbnRQcm9jZXNzb3IgPSBoYW5kbGVHbG9iYWxFdmVudExpc3RlbmVyKHJlcGxheSk7XG4gIGFkZEV2ZW50UHJvY2Vzc29yKGV2ZW50UHJvY2Vzc29yKTtcblxuICAvLyBJZiBhIGN1c3RvbSBjbGllbnQgaGFzIG5vIGhvb2tzIHlldCwgd2UgY29udGludWUgdG8gdXNlIHRoZSBcIm9sZFwiIGltcGxlbWVudGF0aW9uXG4gIGlmIChjbGllbnQpIHtcbiAgICBjbGllbnQub24oJ2JlZm9yZVNlbmRFdmVudCcsIGhhbmRsZUJlZm9yZVNlbmRFdmVudChyZXBsYXkpKTtcbiAgICBjbGllbnQub24oJ2FmdGVyU2VuZEV2ZW50JywgaGFuZGxlQWZ0ZXJTZW5kRXZlbnQocmVwbGF5KSk7XG4gICAgY2xpZW50Lm9uKCdjcmVhdGVEc2MnLCAoZHNjKSA9PiB7XG4gICAgICBjb25zdCByZXBsYXlJZCA9IHJlcGxheS5nZXRTZXNzaW9uSWQoKTtcbiAgICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIHNldCB0aGUgRFNDIHdoZW4gaW4gYnVmZmVyIG1vZGUsIGFzIHRoYXQgbWVhbnMgdGhlIHJlcGxheSBoYXMgbm90IGJlZW4gc2VudCAoeWV0KVxuICAgICAgaWYgKHJlcGxheUlkICYmIHJlcGxheS5pc0VuYWJsZWQoKSAmJiByZXBsYXkucmVjb3JkaW5nTW9kZSA9PT0gJ3Nlc3Npb24nKSB7XG4gICAgICAgIC8vIEVuc3VyZSB0byBjaGVjayB0aGF0IHRoZSBzZXNzaW9uIGlzIHN0aWxsIGFjdGl2ZSAtIGl0IGNvdWxkIGhhdmUgZXhwaXJlZCBpbiB0aGUgbWVhbndoaWxlXG4gICAgICAgIGNvbnN0IGlzU2Vzc2lvbkFjdGl2ZSA9IHJlcGxheS5jaGVja0FuZEhhbmRsZUV4cGlyZWRTZXNzaW9uKCk7XG4gICAgICAgIGlmIChpc1Nlc3Npb25BY3RpdmUpIHtcbiAgICAgICAgICBkc2MucmVwbGF5X2lkID0gcmVwbGF5SWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNsaWVudC5vbignc3BhblN0YXJ0Jywgc3BhbiA9PiB7XG4gICAgICByZXBsYXkubGFzdEFjdGl2ZVNwYW4gPSBzcGFuO1xuICAgIH0pO1xuXG4gICAgLy8gV2UgbWF5IGJlIG1pc3NpbmcgdGhlIGluaXRpYWwgc3BhblN0YXJ0IGR1ZSB0byB0aW1pbmcgaXNzdWVzLFxuICAgIC8vIHNvIHdlIGNhcHR1cmUgaXQgb24gZmluaXNoIGFnYWluLlxuICAgIGNsaWVudC5vbignc3BhbkVuZCcsIHNwYW4gPT4ge1xuICAgICAgcmVwbGF5Lmxhc3RBY3RpdmVTcGFuID0gc3BhbjtcbiAgICB9KTtcblxuICAgIC8vIFdlIHdhbnQgdG8gYXR0YWNoIHRoZSByZXBsYXkgaWQgdG8gdGhlIGZlZWRiYWNrIGV2ZW50XG4gICAgY2xpZW50Lm9uKCdiZWZvcmVTZW5kRmVlZGJhY2snLCBhc3luYyAoZmVlZGJhY2tFdmVudCwgb3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgcmVwbGF5SWQgPSByZXBsYXkuZ2V0U2Vzc2lvbklkKCk7XG4gICAgICBpZiAob3B0aW9ucz8uaW5jbHVkZVJlcGxheSAmJiByZXBsYXkuaXNFbmFibGVkKCkgJiYgcmVwbGF5SWQgJiYgZmVlZGJhY2tFdmVudC5jb250ZXh0cz8uZmVlZGJhY2spIHtcbiAgICAgICAgLy8gSW4gY2FzZSB0aGUgZmVlZGJhY2sgaXMgc2VudCB2aWEgQVBJIGFuZCBub3QgdGhyb3VnaCBvdXIgd2lkZ2V0LCB3ZSB3YW50IHRvIGZsdXNoIHJlcGxheVxuICAgICAgICBpZiAoZmVlZGJhY2tFdmVudC5jb250ZXh0cy5mZWVkYmFjay5zb3VyY2UgPT09ICdhcGknKSB7XG4gICAgICAgICAgYXdhaXQgcmVwbGF5LnNlbmRCdWZmZXJlZFJlcGxheU9yRmx1c2goKTtcbiAgICAgICAgfVxuICAgICAgICBmZWVkYmFja0V2ZW50LmNvbnRleHRzLmZlZWRiYWNrLnJlcGxheV9pZCA9IHJlcGxheUlkO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY2xpZW50Lm9uKCdvcGVuRmVlZGJhY2tXaWRnZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCByZXBsYXkuc2VuZEJ1ZmZlcmVkUmVwbGF5T3JGbHVzaCgpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgXCJzcGFuXCIgZm9yIHRoZSB0b3RhbCBhbW91bnQgb2YgbWVtb3J5IGJlaW5nIHVzZWQgYnkgSlMgb2JqZWN0c1xuICogKGluY2x1ZGluZyB2OCBpbnRlcm5hbCBvYmplY3RzKS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gYWRkTWVtb3J5RW50cnkocmVwbGF5KSB7XG4gIC8vIHdpbmRvdy5wZXJmb3JtYW5jZS5tZW1vcnkgaXMgYSBub24tc3RhbmRhcmQgQVBJIGFuZCBkb2Vzbid0IHdvcmsgb24gYWxsIGJyb3dzZXJzLCBzbyB3ZSB0cnktY2F0Y2ggdGhpc1xuICB0cnkge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgIGNyZWF0ZVBlcmZvcm1hbmNlU3BhbnMocmVwbGF5LCBbXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbWVtb3J5IGRvZXNuJ3QgZXhpc3Qgb24gdHlwZSBQZXJmb3JtYW5jZSBhcyB0aGUgQVBJIGlzIG5vbi1zdGFuZGFyZCAod2UgY2hlY2sgdGhhdCBpdCBleGlzdHMgYWJvdmUpXG4gICAgICAgIGNyZWF0ZU1lbW9yeUVudHJ5KFdJTkRPVy5wZXJmb3JtYW5jZS5tZW1vcnkpLFxuICAgICAgXSksXG4gICAgKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gRG8gbm90aGluZ1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVNZW1vcnlFbnRyeShtZW1vcnlFbnRyeSkge1xuICBjb25zdCB7IGpzSGVhcFNpemVMaW1pdCwgdG90YWxKU0hlYXBTaXplLCB1c2VkSlNIZWFwU2l6ZSB9ID0gbWVtb3J5RW50cnk7XG4gIC8vIHdlIGRvbid0IHdhbnQgdG8gdXNlIGBnZXRBYnNvbHV0ZVRpbWVgIGJlY2F1c2UgaXQgYWRkcyB0aGUgZXZlbnQgdGltZSB0byB0aGVcbiAgLy8gdGltZSBvcmlnaW4sIHNvIHdlIGdldCB0aGUgY3VycmVudCB0aW1lc3RhbXAgaW5zdGVhZFxuICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKSAvIDEwMDA7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ21lbW9yeScsXG4gICAgbmFtZTogJ21lbW9yeScsXG4gICAgc3RhcnQ6IHRpbWUsXG4gICAgZW5kOiB0aW1lLFxuICAgIGRhdGE6IHtcbiAgICAgIG1lbW9yeToge1xuICAgICAgICBqc0hlYXBTaXplTGltaXQsXG4gICAgICAgIHRvdGFsSlNIZWFwU2l6ZSxcbiAgICAgICAgdXNlZEpTSGVhcFNpemUsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogSGVhdmlseSBzaW1wbGlmaWVkIGRlYm91bmNlIGZ1bmN0aW9uIGJhc2VkIG9uIGxvZGFzaC5kZWJvdW5jZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgY2FsbGJhY2sgZnVuY3Rpb24gKEBwYXJhbSBmdW4pIGFuZCBkZWxheXMgaXRzIGludm9jYXRpb25cbiAqIGJ5IEBwYXJhbSB3YWl0IG1pbGxpc2Vjb25kcy4gT3B0aW9uYWxseSwgYSBtYXhXYWl0IGNhbiBiZSBzcGVjaWZpZWQgaW4gQHBhcmFtIG9wdGlvbnMsXG4gKiB3aGljaCBlbnN1cmVzIHRoYXQgdGhlIGNhbGxiYWNrIGlzIGludm9rZWQgYXQgbGVhc3Qgb25jZSBhZnRlciB0aGUgc3BlY2lmaWVkIG1heC4gd2FpdCB0aW1lLlxuICpcbiAqIEBwYXJhbSBmdW5jIHRoZSBmdW5jdGlvbiB3aG9zZSBpbnZvY2F0aW9uIGlzIHRvIGJlIGRlYm91bmNlZFxuICogQHBhcmFtIHdhaXQgdGhlIG1pbmltdW0gdGltZSB1bnRpbCB0aGUgZnVuY3Rpb24gaXMgaW52b2tlZCBhZnRlciBpdCB3YXMgY2FsbGVkIG9uY2VcbiAqIEBwYXJhbSBvcHRpb25zIHRoZSBvcHRpb25zIG9iamVjdCwgd2hpY2ggY2FuIGNvbnRhaW4gdGhlIGBtYXhXYWl0YCBwcm9wZXJ0eVxuICpcbiAqIEByZXR1cm5zIHRoZSBkZWJvdW5jZWQgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24sIHdoaWNoIG5lZWRzIHRvIGJlIGNhbGxlZCBhdCBsZWFzdCBvbmNlIHRvIHN0YXJ0IHRoZVxuICogICAgICAgICAgZGVib3VuY2luZyBwcm9jZXNzLiBTdWJzZXF1ZW50IGNhbGxzIHdpbGwgcmVzZXQgdGhlIGRlYm91bmNpbmcgdGltZXIgYW5kLCBpbiBjYXNlIEBwYXJhbWZ1bmNcbiAqICAgICAgICAgIHdhcyBhbHJlYWR5IGludm9rZWQgaW4gdGhlIG1lYW50aW1lLCByZXR1cm4gQHBhcmFtIGZ1bmMncyByZXR1cm4gdmFsdWUuXG4gKiAgICAgICAgICBUaGUgZGVib3VuY2VkIGZ1bmN0aW9uIGhhcyB0d28gYWRkaXRpb25hbCBwcm9wZXJ0aWVzOlxuICogICAgICAgICAgLSBgZmx1c2hgOiBJbnZva2VzIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gaW1tZWRpYXRlbHkgYW5kIHJldHVybnMgaXRzIHJldHVybiB2YWx1ZVxuICogICAgICAgICAgLSBgY2FuY2VsYDogQ2FuY2VscyB0aGUgZGVib3VuY2luZyBwcm9jZXNzIGFuZCByZXNldHMgdGhlIGRlYm91bmNpbmcgdGltZXJcbiAqL1xuZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICByZXR1cm4gZGVib3VuY2UkMShmdW5jLCB3YWl0LCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gTm90IHF1aXRlIHN1cmUgd2h5IHRoZXNlIHR5cGVzIGRvIG5vdCBtYXRjaCwgYnV0IHRoaXMgaXMgZmluZVxuICAgIHNldFRpbWVvdXRJbXBsOiBzZXRUaW1lb3V0JDMsXG4gIH0pO1xufVxuXG5jb25zdCBOQVZJR0FUT1IgPSBHTE9CQUxfT0JKLm5hdmlnYXRvcjtcblxuLyoqXG4gKiAgRGlzYWJsZSBzYW1wbGluZyBtb3VzZW1vdmUgZXZlbnRzIG9uIGlPUyBicm93c2VycyBhcyB0aGlzIGNhbiBjYXVzZSBibG9ja2luZyB0aGUgbWFpbiB0aHJlYWRcbiAqICBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8xNDUzNFxuICovXG5mdW5jdGlvbiBnZXRSZWNvcmRpbmdTYW1wbGluZ09wdGlvbnMoKSB7XG4gIGlmIChcbiAgICAvaVBob25lfGlQYWR8aVBvZC9pLnRlc3QoTkFWSUdBVE9SPy51c2VyQWdlbnQgPz8gJycpIHx8XG4gICAgKC9NYWNpbnRvc2gvaS50ZXN0KE5BVklHQVRPUj8udXNlckFnZW50ID8/ICcnKSAmJiBOQVZJR0FUT1I/Lm1heFRvdWNoUG9pbnRzICYmIE5BVklHQVRPUj8ubWF4VG91Y2hQb2ludHMgPiAxKVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2FtcGxpbmc6IHtcbiAgICAgICAgbW91c2Vtb3ZlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7fTtcbn1cblxuLyoqXG4gKiBIYW5kbGVyIGZvciByZWNvcmRpbmcgZXZlbnRzLlxuICpcbiAqIEFkZHMgdG8gZXZlbnQgYnVmZmVyLCBhbmQgaGFzIHZhcnlpbmcgZmx1c2hpbmcgYmVoYXZpb3JzIGlmIHRoZSBldmVudCB3YXMgYSBjaGVja291dC5cbiAqL1xuZnVuY3Rpb24gZ2V0SGFuZGxlUmVjb3JkaW5nRW1pdChyZXBsYXkpIHtcbiAgbGV0IGhhZEZpcnN0RXZlbnQgPSBmYWxzZTtcblxuICByZXR1cm4gKGV2ZW50LCBfaXNDaGVja291dCkgPT4ge1xuICAgIC8vIElmIHRoaXMgaXMgZmFsc2UsIGl0IG1lYW5zIHNlc3Npb24gaXMgZXhwaXJlZCwgY3JlYXRlIGFuZCBhIG5ldyBzZXNzaW9uIGFuZCB3YWl0IGZvciBjaGVja291dFxuICAgIGlmICghcmVwbGF5LmNoZWNrQW5kSGFuZGxlRXhwaXJlZFNlc3Npb24oKSkge1xuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcud2FybignUmVjZWl2ZWQgcmVwbGF5IGV2ZW50IGFmdGVyIHNlc3Npb24gZXhwaXJlZC4nKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGBfaXNDaGVja291dGAgaXMgb25seSBzZXQgd2hlbiB0aGUgY2hlY2tvdXQgaXMgZHVlIHRvIGBjaGVja291dEV2ZXJ5Tm1zYFxuICAgIC8vIFdlIGFsc28gd2FudCB0byB0cmVhdCB0aGUgZmlyc3QgZXZlbnQgYXMgYSBjaGVja291dCwgc28gd2UgaGFuZGxlIHRoaXMgc3BlY2lmaWNhbGx5IGhlcmVcbiAgICBjb25zdCBpc0NoZWNrb3V0ID0gX2lzQ2hlY2tvdXQgfHwgIWhhZEZpcnN0RXZlbnQ7XG4gICAgaGFkRmlyc3RFdmVudCA9IHRydWU7XG5cbiAgICBpZiAocmVwbGF5LmNsaWNrRGV0ZWN0b3IpIHtcbiAgICAgIHVwZGF0ZUNsaWNrRGV0ZWN0b3JGb3JSZWNvcmRpbmdFdmVudChyZXBsYXkuY2xpY2tEZXRlY3RvciwgZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIFRoZSBoYW5kbGVyIHJldHVybnMgYHRydWVgIGlmIHdlIGRvIG5vdCB3YW50IHRvIHRyaWdnZXIgZGVib3VuY2VkIGZsdXNoLCBgZmFsc2VgIGlmIHdlIHdhbnQgdG8gZGVib3VuY2UgZmx1c2guXG4gICAgcmVwbGF5LmFkZFVwZGF0ZSgoKSA9PiB7XG4gICAgICAvLyBUaGUgc2Vzc2lvbiBpcyBhbHdheXMgc3RhcnRlZCBpbW1lZGlhdGVseSBvbiBwYWdlbG9hZC9pbml0LCBidXQgZm9yXG4gICAgICAvLyBlcnJvci1vbmx5IHJlcGxheXMsIGl0IHNob3VsZCByZWZsZWN0IHRoZSBtb3N0IHJlY2VudCBjaGVja291dFxuICAgICAgLy8gd2hlbiBhbiBlcnJvciBvY2N1cnMuIENsZWFyIGFueSBzdGF0ZSB0aGF0IGhhcHBlbnMgYmVmb3JlIHRoaXMgY3VycmVudFxuICAgICAgLy8gY2hlY2tvdXQuIFRoaXMgbmVlZHMgdG8gaGFwcGVuIGJlZm9yZSBgYWRkRXZlbnQoKWAgd2hpY2ggdXBkYXRlcyBzdGF0ZVxuICAgICAgLy8gZGVwZW5kZW50IG9uIHRoaXMgcmVzZXQuXG4gICAgICBpZiAocmVwbGF5LnJlY29yZGluZ01vZGUgPT09ICdidWZmZXInICYmIGlzQ2hlY2tvdXQpIHtcbiAgICAgICAgcmVwbGF5LnNldEluaXRpYWxTdGF0ZSgpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgZXZlbnQgaXMgbm90IGFkZGVkIChlLmcuIGR1ZSB0byBiZWluZyBwYXVzZWQsIGRpc2FibGVkLCBvciBvdXQgb2YgdGhlIG1heCByZXBsYXkgZHVyYXRpb24pLFxuICAgICAgLy8gU2tpcCBhbGwgZnVydGhlciBzdGVwc1xuICAgICAgaWYgKCFhZGRFdmVudFN5bmMocmVwbGF5LCBldmVudCwgaXNDaGVja291dCkpIHtcbiAgICAgICAgLy8gUmV0dXJuIHRydWUgdG8gc2tpcCBzY2hlZHVsaW5nIGEgZGVib3VuY2VkIGZsdXNoXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBEaWZmZXJlbnQgYmVoYXZpb3IgZm9yIGZ1bGwgc25hcHNob3RzICh0eXBlPTIpLCBpZ25vcmUgb3RoZXIgZXZlbnQgdHlwZXNcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcnJ3ZWItaW8vcnJ3ZWIvYmxvYi9kOGY5MjkwY2E0OTY3MTJhYTFlN2Q0NzI1NDk0ODBjNGU3ODc2NTk0L3BhY2thZ2VzL3Jyd2ViL3NyYy90eXBlcy50cyNMMTZcbiAgICAgIGlmICghaXNDaGVja291dCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlc3Npb24gPSByZXBsYXkuc2Vzc2lvbjtcblxuICAgICAgLy8gQWRkaXRpb25hbGx5LCBjcmVhdGUgYSBtZXRhIGV2ZW50IHRoYXQgd2lsbCBjYXB0dXJlIGNlcnRhaW4gU0RLIHNldHRpbmdzLlxuICAgICAgLy8gSW4gb3JkZXIgdG8gaGFuZGxlIGJ1ZmZlciBtb2RlLCB0aGlzIG5lZWRzIHRvIGVpdGhlciBiZSBkb25lIHdoZW4gd2VcbiAgICAgIC8vIHJlY2VpdmUgY2hlY2tvdXQgZXZlbnRzIG9yIGF0IGZsdXNoIHRpbWUuIFdlIGhhdmUgYW4gZXhwZXJpbWVudGFsIG1vZGVcbiAgICAgIC8vIHRvIHBlcmZvcm0gbXVsdGlwbGUgY2hlY2tvdXRzIGEgc2Vzc2lvbiAodGhlIGlkZWEgaXMgdG8gaW1wcm92ZVxuICAgICAgLy8gc2Vla2luZyBkdXJpbmcgcGxheWJhY2spLCBzbyBhbHNvIG9ubHkgaW5jbHVkZSBpZiBzZWdtZW50SWQgaXMgMFxuICAgICAgLy8gKGhhbmRsZWQgaW4gYGFkZFNldHRpbmdzRXZlbnRgKS5cbiAgICAgIC8vXG4gICAgICAvLyBgaXNDaGVja291dGAgaXMgYWx3YXlzIHRydWUsIGJ1dCB3YW50IHRvIGJlIGV4cGxpY2l0IHRoYXQgaXQgc2hvdWxkXG4gICAgICAvLyBvbmx5IGJlIGFkZGVkIGZvciBjaGVja291dHNcbiAgICAgIGFkZFNldHRpbmdzRXZlbnQocmVwbGF5LCBpc0NoZWNrb3V0KTtcblxuICAgICAgLy8gV2hlbiBpbiBidWZmZXIgbW9kZSwgbWFrZSBzdXJlIHdlIGFkanVzdCB0aGUgc2Vzc2lvbiBzdGFydGVkIGRhdGUgdG8gdGhlIGN1cnJlbnQgZWFybGllc3QgZXZlbnQgb2YgdGhlIGJ1ZmZlclxuICAgICAgLy8gdGhpcyBzaG91bGQgdXN1YWxseSBiZSB0aGUgdGltZXN0YW1wIG9mIHRoZSBjaGVja291dCBldmVudCwgYnV0IHRvIGJlIHNhZmUuLi5cbiAgICAgIGlmIChyZXBsYXkucmVjb3JkaW5nTW9kZSA9PT0gJ2J1ZmZlcicgJiYgc2Vzc2lvbiAmJiByZXBsYXkuZXZlbnRCdWZmZXIpIHtcbiAgICAgICAgY29uc3QgZWFybGllc3RFdmVudCA9IHJlcGxheS5ldmVudEJ1ZmZlci5nZXRFYXJsaWVzdFRpbWVzdGFtcCgpO1xuICAgICAgICBpZiAoZWFybGllc3RFdmVudCkge1xuICAgICAgICAgIERFQlVHX0JVSUxEICYmXG4gICAgICAgICAgICBkZWJ1Zy5sb2coYFVwZGF0aW5nIHNlc3Npb24gc3RhcnQgdGltZSB0byBlYXJsaWVzdCBldmVudCBpbiBidWZmZXIgdG8gJHtuZXcgRGF0ZShlYXJsaWVzdEV2ZW50KX1gKTtcblxuICAgICAgICAgIHNlc3Npb24uc3RhcnRlZCA9IGVhcmxpZXN0RXZlbnQ7XG5cbiAgICAgICAgICBpZiAocmVwbGF5LmdldE9wdGlvbnMoKS5zdGlja3lTZXNzaW9uKSB7XG4gICAgICAgICAgICBzYXZlU2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlcmUgaXMgYSBwcmV2aW91c1Nlc3Npb25JZCBhZnRlciBhIGZ1bGwgc25hcHNob3Qgb2NjdXJzLCB0aGVuXG4gICAgICAvLyB0aGUgcmVwbGF5IHNlc3Npb24gd2FzIHN0YXJ0ZWQgZHVlIHRvIHNlc3Npb24gZXhwaXJhdGlvbi4gVGhlIG5ldyBzZXNzaW9uXG4gICAgICAvLyBpcyBzdGFydGVkIGJlZm9yZSB0cmlnZ2VyaW5nIGEgbmV3IGNoZWNrb3V0IGFuZCBjb250YWlucyB0aGUgaWRcbiAgICAgIC8vIG9mIHRoZSBwcmV2aW91cyBzZXNzaW9uLiBEbyBub3QgaW1tZWRpYXRlbHkgZmx1c2ggaW4gdGhpcyBjYXNlXG4gICAgICAvLyB0byBhdm9pZCBjYXB0dXJpbmcgb25seSB0aGUgY2hlY2tvdXQgYW5kIGluc3RlYWQgdGhlIHJlcGxheSB3aWxsXG4gICAgICAvLyBiZSBjYXB0dXJlZCBpZiB0aGV5IHBlcmZvcm0gYW55IGZvbGxvdy11cCBhY3Rpb25zLlxuICAgICAgaWYgKHNlc3Npb24/LnByZXZpb3VzU2Vzc2lvbklkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVwbGF5LnJlY29yZGluZ01vZGUgPT09ICdzZXNzaW9uJykge1xuICAgICAgICAvLyBJZiB0aGUgZnVsbCBzbmFwc2hvdCBpcyBkdWUgdG8gYW4gaW5pdGlhbCBsb2FkLCB3ZSB3aWxsIG5vdCBoYXZlXG4gICAgICAgIC8vIGEgcHJldmlvdXMgc2Vzc2lvbiBJRC4gSW4gdGhpcyBjYXNlLCB3ZSB3YW50IHRvIGJ1ZmZlciBldmVudHNcbiAgICAgICAgLy8gZm9yIGEgc2V0IGFtb3VudCBvZiB0aW1lIGJlZm9yZSBmbHVzaGluZy4gVGhpcyBjYW4gaGVscCBhdm9pZFxuICAgICAgICAvLyBjYXB0dXJpbmcgcmVwbGF5cyBvZiB1c2VycyB0aGF0IGltbWVkaWF0ZWx5IGNsb3NlIHRoZSB3aW5kb3cuXG5cbiAgICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgcmVqZWN0XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICAgICAgdm9pZCByZXBsYXkuZmx1c2goKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH07XG59XG5cbi8qKlxuICogRXhwb3J0ZWQgZm9yIHRlc3RzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnNFdmVudChyZXBsYXkpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHJlcGxheS5nZXRPcHRpb25zKCk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogRXZlbnRUeXBlLkN1c3RvbSxcbiAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgZGF0YToge1xuICAgICAgdGFnOiAnb3B0aW9ucycsXG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIHNob3VsZFJlY29yZENhbnZhczogcmVwbGF5LmlzUmVjb3JkaW5nQ2FudmFzKCksXG4gICAgICAgIHNlc3Npb25TYW1wbGVSYXRlOiBvcHRpb25zLnNlc3Npb25TYW1wbGVSYXRlLFxuICAgICAgICBlcnJvclNhbXBsZVJhdGU6IG9wdGlvbnMuZXJyb3JTYW1wbGVSYXRlLFxuICAgICAgICB1c2VDb21wcmVzc2lvbk9wdGlvbjogb3B0aW9ucy51c2VDb21wcmVzc2lvbixcbiAgICAgICAgYmxvY2tBbGxNZWRpYTogb3B0aW9ucy5ibG9ja0FsbE1lZGlhLFxuICAgICAgICBtYXNrQWxsVGV4dDogb3B0aW9ucy5tYXNrQWxsVGV4dCxcbiAgICAgICAgbWFza0FsbElucHV0czogb3B0aW9ucy5tYXNrQWxsSW5wdXRzLFxuICAgICAgICB1c2VDb21wcmVzc2lvbjogcmVwbGF5LmV2ZW50QnVmZmVyID8gcmVwbGF5LmV2ZW50QnVmZmVyLnR5cGUgPT09ICd3b3JrZXInIDogZmFsc2UsXG4gICAgICAgIG5ldHdvcmtEZXRhaWxIYXNVcmxzOiBvcHRpb25zLm5ldHdvcmtEZXRhaWxBbGxvd1VybHMubGVuZ3RoID4gMCxcbiAgICAgICAgbmV0d29ya0NhcHR1cmVCb2RpZXM6IG9wdGlvbnMubmV0d29ya0NhcHR1cmVCb2RpZXMsXG4gICAgICAgIG5ldHdvcmtSZXF1ZXN0SGFzSGVhZGVyczogb3B0aW9ucy5uZXR3b3JrUmVxdWVzdEhlYWRlcnMubGVuZ3RoID4gMCxcbiAgICAgICAgbmV0d29ya1Jlc3BvbnNlSGFzSGVhZGVyczogb3B0aW9ucy5uZXR3b3JrUmVzcG9uc2VIZWFkZXJzLmxlbmd0aCA+IDAsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogQWRkIGEgXCJtZXRhXCIgZXZlbnQgdGhhdCBjb250YWlucyBhIHNpbXBsaWZpZWQgdmlldyBvbiBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAqIG9wdGlvbnMuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgb24gdGhlIGZpcnN0IHNlZ21lbnQgb2YgYSByZWNvcmRpbmcuXG4gKi9cbmZ1bmN0aW9uIGFkZFNldHRpbmdzRXZlbnQocmVwbGF5LCBpc0NoZWNrb3V0KSB7XG4gIC8vIE9ubHkgbmVlZCB0byBhZGQgdGhpcyBldmVudCB3aGVuIHNlbmRpbmcgdGhlIGZpcnN0IHNlZ21lbnRcbiAgaWYgKCFpc0NoZWNrb3V0IHx8ICFyZXBsYXkuc2Vzc2lvbiB8fCByZXBsYXkuc2Vzc2lvbi5zZWdtZW50SWQgIT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhZGRFdmVudFN5bmMocmVwbGF5LCBjcmVhdGVPcHRpb25zRXZlbnQocmVwbGF5KSwgZmFsc2UpO1xufVxuXG4vKipcbiAqIFZlbmRvcmVkIGluIGZyb20gQHNlbnRyeS1pbnRlcm5hbC9ycndlYi5cbiAqXG4gKiBUaGlzIGlzIGEgY29weSBvZiB0aGUgZnVuY3Rpb24gZnJvbSBycndlYiwgaXQgaXMgbm90IG5pY2VseSBleHBvcnRlZCB0aGVyZS5cbiAqL1xuZnVuY3Rpb24gY2xvc2VzdEVsZW1lbnRPZk5vZGUobm9kZSkge1xuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENhdGNoIGFjY2VzcyB0byBub2RlIHByb3BlcnRpZXMgdG8gYXZvaWQgRmlyZWZveCBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzXG4gIHRyeSB7XG4gICAgY29uc3QgZWwgPSBub2RlLm5vZGVUeXBlID09PSBub2RlLkVMRU1FTlRfTk9ERSA/IChub2RlICkgOiBub2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgcmV0dXJuIGVsO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIHJlcGxheSBlbnZlbG9wZSByZWFkeSB0byBiZSBzZW50LlxuICogVGhpcyBpbmNsdWRlcyBib3RoIHRoZSByZXBsYXkgZXZlbnQsIGFzIHdlbGwgYXMgdGhlIHJlY29yZGluZyBkYXRhLlxuICovXG5mdW5jdGlvbiBjcmVhdGVSZXBsYXlFbnZlbG9wZShcbiAgcmVwbGF5RXZlbnQsXG4gIHJlY29yZGluZ0RhdGEsXG4gIGRzbixcbiAgdHVubmVsLFxuKSB7XG4gIHJldHVybiBjcmVhdGVFbnZlbG9wZShcbiAgICBjcmVhdGVFdmVudEVudmVsb3BlSGVhZGVycyhyZXBsYXlFdmVudCwgZ2V0U2RrTWV0YWRhdGFGb3JFbnZlbG9wZUhlYWRlcihyZXBsYXlFdmVudCksIHR1bm5lbCwgZHNuKSxcbiAgICBbXG4gICAgICBbeyB0eXBlOiAncmVwbGF5X2V2ZW50JyB9LCByZXBsYXlFdmVudF0sXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAncmVwbGF5X3JlY29yZGluZycsXG4gICAgICAgICAgLy8gSWYgc3RyaW5nIHRoZW4gd2UgbmVlZCB0byBlbmNvZGUgdG8gVVRGOCwgb3RoZXJ3aXNlIHdpbGwgaGF2ZVxuICAgICAgICAgIC8vIHdyb25nIHNpemUuIFRleHRFbmNvZGVyIGhhcyBzaW1pbGFyIGJyb3dzZXIgc3VwcG9ydCB0b1xuICAgICAgICAgIC8vIE11dGF0aW9uT2JzZXJ2ZXIsIGFsdGhvdWdoIGl0IGRvZXMgbm90IGFjY2VwdCBJRTExLlxuICAgICAgICAgIGxlbmd0aDpcbiAgICAgICAgICAgIHR5cGVvZiByZWNvcmRpbmdEYXRhID09PSAnc3RyaW5nJyA/IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShyZWNvcmRpbmdEYXRhKS5sZW5ndGggOiByZWNvcmRpbmdEYXRhLmxlbmd0aCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVjb3JkaW5nRGF0YSxcbiAgICAgIF0sXG4gICAgXSxcbiAgKTtcbn1cblxuLyoqXG4gKiBQcmVwYXJlIHRoZSByZWNvcmRpbmcgZGF0YSByZWFkeSB0byBiZSBzZW50LlxuICovXG5mdW5jdGlvbiBwcmVwYXJlUmVjb3JkaW5nRGF0YSh7XG4gIHJlY29yZGluZ0RhdGEsXG4gIGhlYWRlcnMsXG59XG5cbikge1xuICBsZXQgcGF5bG9hZFdpdGhTZXF1ZW5jZTtcblxuICAvLyBYWFg6IG5ld2xpbmUgaXMgbmVlZGVkIHRvIHNlcGFyYXRlIHNlcXVlbmNlIGlkIGZyb20gZXZlbnRzXG4gIGNvbnN0IHJlcGxheUhlYWRlcnMgPSBgJHtKU09OLnN0cmluZ2lmeShoZWFkZXJzKX1cbmA7XG5cbiAgaWYgKHR5cGVvZiByZWNvcmRpbmdEYXRhID09PSAnc3RyaW5nJykge1xuICAgIHBheWxvYWRXaXRoU2VxdWVuY2UgPSBgJHtyZXBsYXlIZWFkZXJzfSR7cmVjb3JkaW5nRGF0YX1gO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVuYyA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgIC8vIFhYWDogbmV3bGluZSBpcyBuZWVkZWQgdG8gc2VwYXJhdGUgc2VxdWVuY2UgaWQgZnJvbSBldmVudHNcbiAgICBjb25zdCBzZXF1ZW5jZSA9IGVuYy5lbmNvZGUocmVwbGF5SGVhZGVycyk7XG4gICAgLy8gTWVyZ2UgdGhlIHR3byBVaW50OEFycmF5c1xuICAgIHBheWxvYWRXaXRoU2VxdWVuY2UgPSBuZXcgVWludDhBcnJheShzZXF1ZW5jZS5sZW5ndGggKyByZWNvcmRpbmdEYXRhLmxlbmd0aCk7XG4gICAgcGF5bG9hZFdpdGhTZXF1ZW5jZS5zZXQoc2VxdWVuY2UpO1xuICAgIHBheWxvYWRXaXRoU2VxdWVuY2Uuc2V0KHJlY29yZGluZ0RhdGEsIHNlcXVlbmNlLmxlbmd0aCk7XG4gIH1cblxuICByZXR1cm4gcGF5bG9hZFdpdGhTZXF1ZW5jZTtcbn1cblxuLyoqXG4gKiBQcmVwYXJlIGEgcmVwbGF5IGV2ZW50ICYgZW5yaWNoIGl0IHdpdGggdGhlIFNESyBtZXRhZGF0YS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJlcGFyZVJlcGxheUV2ZW50KHtcbiAgY2xpZW50LFxuICBzY29wZSxcbiAgcmVwbGF5SWQ6IGV2ZW50X2lkLFxuICBldmVudCxcbn1cblxuKSB7XG4gIGNvbnN0IGludGVncmF0aW9ucyA9XG4gICAgdHlwZW9mIGNsaWVudFsnX2ludGVncmF0aW9ucyddID09PSAnb2JqZWN0JyAmJlxuICAgIGNsaWVudFsnX2ludGVncmF0aW9ucyddICE9PSBudWxsICYmXG4gICAgIUFycmF5LmlzQXJyYXkoY2xpZW50WydfaW50ZWdyYXRpb25zJ10pXG4gICAgICA/IE9iamVjdC5rZXlzKGNsaWVudFsnX2ludGVncmF0aW9ucyddKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgZXZlbnRIaW50ID0geyBldmVudF9pZCwgaW50ZWdyYXRpb25zIH07XG5cbiAgY2xpZW50LmVtaXQoJ3ByZXByb2Nlc3NFdmVudCcsIGV2ZW50LCBldmVudEhpbnQpO1xuXG4gIGNvbnN0IHByZXBhcmVkRXZlbnQgPSAoYXdhaXQgcHJlcGFyZUV2ZW50KFxuICAgIGNsaWVudC5nZXRPcHRpb25zKCksXG4gICAgZXZlbnQsXG4gICAgZXZlbnRIaW50LFxuICAgIHNjb3BlLFxuICAgIGNsaWVudCxcbiAgICBnZXRJc29sYXRpb25TY29wZSgpLFxuICApKSA7XG5cbiAgLy8gSWYgZS5nLiBhIGdsb2JhbCBldmVudCBwcm9jZXNzb3IgcmV0dXJuZWQgbnVsbFxuICBpZiAoIXByZXBhcmVkRXZlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNsaWVudC5lbWl0KCdwb3N0cHJvY2Vzc0V2ZW50JywgcHJlcGFyZWRFdmVudCwgZXZlbnRIaW50KTtcblxuICAvLyBUaGlzIG5vcm1hbGx5IGhhcHBlbnMgaW4gYnJvd3NlciBjbGllbnQgXCJfcHJlcGFyZUV2ZW50XCJcbiAgLy8gYnV0IHNpbmNlIHdlIGRvIG5vdCB1c2UgdGhpcyBwcml2YXRlIG1ldGhvZCBmcm9tIHRoZSBjbGllbnQsIGJ1dCByYXRoZXIgdGhlIHBsYWluIGltcG9ydFxuICAvLyB3ZSBuZWVkIHRvIGRvIHRoaXMgbWFudWFsbHkuXG4gIHByZXBhcmVkRXZlbnQucGxhdGZvcm0gPSBwcmVwYXJlZEV2ZW50LnBsYXRmb3JtIHx8ICdqYXZhc2NyaXB0JztcblxuICAvLyBleHRyYWN0IHRoZSBTREsgbmFtZSBiZWNhdXNlIGBjbGllbnQuX3ByZXBhcmVFdmVudGAgZG9lc24ndCBhZGQgaXQgdG8gdGhlIGV2ZW50XG4gIGNvbnN0IG1ldGFkYXRhID0gY2xpZW50LmdldFNka01ldGFkYXRhKCk7XG4gIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gbWV0YWRhdGE/LnNkayB8fCB7fTtcblxuICBwcmVwYXJlZEV2ZW50LnNkayA9IHtcbiAgICAuLi5wcmVwYXJlZEV2ZW50LnNkayxcbiAgICBuYW1lOiBuYW1lIHx8ICdzZW50cnkuamF2YXNjcmlwdC51bmtub3duJyxcbiAgICB2ZXJzaW9uOiB2ZXJzaW9uIHx8ICcwLjAuMCcsXG4gIH07XG5cbiAgcmV0dXJuIHByZXBhcmVkRXZlbnQ7XG59XG5cbi8qKlxuICogU2VuZCByZXBsYXkgYXR0YWNobWVudCB1c2luZyBgZmV0Y2goKWBcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2VuZFJlcGxheVJlcXVlc3Qoe1xuICByZWNvcmRpbmdEYXRhLFxuICByZXBsYXlJZCxcbiAgc2VnbWVudElkOiBzZWdtZW50X2lkLFxuICBldmVudENvbnRleHQsXG4gIHRpbWVzdGFtcCxcbiAgc2Vzc2lvbixcbn0pIHtcbiAgY29uc3QgcHJlcGFyZWRSZWNvcmRpbmdEYXRhID0gcHJlcGFyZVJlY29yZGluZ0RhdGEoe1xuICAgIHJlY29yZGluZ0RhdGEsXG4gICAgaGVhZGVyczoge1xuICAgICAgc2VnbWVudF9pZCxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCB7IHVybHMsIGVycm9ySWRzLCB0cmFjZUlkcywgaW5pdGlhbFRpbWVzdGFtcCB9ID0gZXZlbnRDb250ZXh0O1xuXG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudCgpO1xuICBjb25zdCBzY29wZSA9IGdldEN1cnJlbnRTY29wZSgpO1xuICBjb25zdCB0cmFuc3BvcnQgPSBjbGllbnQ/LmdldFRyYW5zcG9ydCgpO1xuICBjb25zdCBkc24gPSBjbGllbnQ/LmdldERzbigpO1xuXG4gIGlmICghY2xpZW50IHx8ICF0cmFuc3BvcnQgfHwgIWRzbiB8fCAhc2Vzc2lvbi5zYW1wbGVkKSB7XG4gICAgcmV0dXJuIHJlc29sdmVkU3luY1Byb21pc2Uoe30pO1xuICB9XG5cbiAgY29uc3QgYmFzZUV2ZW50ID0ge1xuICAgIHR5cGU6IFJFUExBWV9FVkVOVF9OQU1FLFxuICAgIHJlcGxheV9zdGFydF90aW1lc3RhbXA6IGluaXRpYWxUaW1lc3RhbXAgLyAxMDAwLFxuICAgIHRpbWVzdGFtcDogdGltZXN0YW1wIC8gMTAwMCxcbiAgICBlcnJvcl9pZHM6IGVycm9ySWRzLFxuICAgIHRyYWNlX2lkczogdHJhY2VJZHMsXG4gICAgdXJscyxcbiAgICByZXBsYXlfaWQ6IHJlcGxheUlkLFxuICAgIHNlZ21lbnRfaWQsXG4gICAgcmVwbGF5X3R5cGU6IHNlc3Npb24uc2FtcGxlZCxcbiAgfTtcblxuICBjb25zdCByZXBsYXlFdmVudCA9IGF3YWl0IHByZXBhcmVSZXBsYXlFdmVudCh7IHNjb3BlLCBjbGllbnQsIHJlcGxheUlkLCBldmVudDogYmFzZUV2ZW50IH0pO1xuXG4gIGlmICghcmVwbGF5RXZlbnQpIHtcbiAgICAvLyBUYWtlbiBmcm9tIGJhc2VjbGllbnQncyBgX3Byb2Nlc3NFdmVudGAgbWV0aG9kLCB3aGVyZSB0aGlzIGlzIGhhbmRsZWQgZm9yIGVycm9ycy90cmFuc2FjdGlvbnNcbiAgICBjbGllbnQucmVjb3JkRHJvcHBlZEV2ZW50KCdldmVudF9wcm9jZXNzb3InLCAncmVwbGF5Jyk7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKCdBbiBldmVudCBwcm9jZXNzb3IgcmV0dXJuZWQgYG51bGxgLCB3aWxsIG5vdCBzZW5kIGV2ZW50LicpO1xuICAgIHJldHVybiByZXNvbHZlZFN5bmNQcm9taXNlKHt9KTtcbiAgfVxuXG4gIC8qXG4gIEZvciByZWZlcmVuY2UsIHRoZSBmdWxseSBidWlsdCBldmVudCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOlxuICB7XG4gICAgICBcInR5cGVcIjogXCJyZXBsYXlfZXZlbnRcIixcbiAgICAgIFwidGltZXN0YW1wXCI6IDE2NzA4MzcwMDguNjM0LFxuICAgICAgXCJlcnJvcl9pZHNcIjogW1xuICAgICAgICAgIFwiZXJyb3JJZFwiXG4gICAgICBdLFxuICAgICAgXCJ0cmFjZV9pZHNcIjogW1xuICAgICAgICAgIFwidHJhY2VJZFwiXG4gICAgICBdLFxuICAgICAgXCJ1cmxzXCI6IFtcbiAgICAgICAgICBcImh0dHBzOi8vZXhhbXBsZS5jb21cIlxuICAgICAgXSxcbiAgICAgIFwicmVwbGF5X2lkXCI6IFwiZXZlbnRJZFwiLFxuICAgICAgXCJzZWdtZW50X2lkXCI6IDMsXG4gICAgICBcInJlcGxheV90eXBlXCI6IFwiZXJyb3JcIixcbiAgICAgIFwicGxhdGZvcm1cIjogXCJqYXZhc2NyaXB0XCIsXG4gICAgICBcImV2ZW50X2lkXCI6IFwiZXZlbnRJZFwiLFxuICAgICAgXCJlbnZpcm9ubWVudFwiOiBcInByb2R1Y3Rpb25cIixcbiAgICAgIFwic2RrXCI6IHtcbiAgICAgICAgICBcImludGVncmF0aW9uc1wiOiBbXG4gICAgICAgICAgICAgIFwiQnJvd3NlclRyYWNpbmdcIixcbiAgICAgICAgICAgICAgXCJSZXBsYXlcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJuYW1lXCI6IFwic2VudHJ5LmphdmFzY3JpcHQuYnJvd3NlclwiLFxuICAgICAgICAgIFwidmVyc2lvblwiOiBcIjcuMjUuMFwiXG4gICAgICB9LFxuICAgICAgXCJzZGtQcm9jZXNzaW5nTWV0YWRhdGFcIjoge30sXG4gICAgICBcImNvbnRleHRzXCI6IHtcbiAgICAgIH0sXG4gIH1cbiAgKi9cblxuICAvLyBQcmV2ZW50IHRoaXMgZGF0YSAod2hpY2gsIGlmIGl0IGV4aXN0cywgd2FzIHVzZWQgaW4gZWFybGllciBzdGVwcyBpbiB0aGUgcHJvY2Vzc2luZyBwaXBlbGluZSkgZnJvbSBiZWluZyBzZW50IHRvXG4gIC8vIHNlbnRyeS4gKE5vdGU6IE91ciB1c2Ugb2YgdGhpcyBwcm9wZXJ0eSBjb21lcyBhbmQgZ29lcyB3aXRoIHdoYXRldmVyIHdlIG1pZ2h0IGJlIGRlYnVnZ2luZywgd2hhdGV2ZXIgaGFja3Mgd2UgbWF5XG4gIC8vIGhhdmUgdGVtcG9yYXJpbHkgYWRkZWQsIGV0Yy4gRXZlbiBpZiB3ZSBkb24ndCBoYXBwZW4gdG8gYmUgdXNpbmcgaXQgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLCBsZXQncyBub3QgZ2V0IHJpZFxuICAvLyBvZiB0aGlzIGBkZWxldGVgLCBsZXN0IHdlIG1pc3MgcHV0dGluZyBpdCBiYWNrIGluIHRoZSBuZXh0IHRpbWUgdGhlIHByb3BlcnR5IGlzIGluIHVzZS4pXG4gIGRlbGV0ZSByZXBsYXlFdmVudC5zZGtQcm9jZXNzaW5nTWV0YWRhdGE7XG5cbiAgY29uc3QgZW52ZWxvcGUgPSBjcmVhdGVSZXBsYXlFbnZlbG9wZShyZXBsYXlFdmVudCwgcHJlcGFyZWRSZWNvcmRpbmdEYXRhLCBkc24sIGNsaWVudC5nZXRPcHRpb25zKCkudHVubmVsKTtcblxuICBsZXQgcmVzcG9uc2U7XG5cbiAgdHJ5IHtcbiAgICByZXNwb25zZSA9IGF3YWl0IHRyYW5zcG9ydC5zZW5kKGVudmVsb3BlKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoVU5BQkxFX1RPX1NFTkRfUkVQTEFZKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBJbiBjYXNlIGJyb3dzZXJzIGRvbid0IGFsbG93IHRoaXMgcHJvcGVydHkgdG8gYmUgd3JpdGFibGVcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVGhpcyBuZWVkcyBsaWIgZXMyMDIyIGFuZCBuZXdlclxuICAgICAgZXJyb3IuY2F1c2UgPSBlcnI7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgLy8gSWYgdGhlIHN0YXR1cyBjb2RlIGlzIGludmFsaWQsIHdlIHdhbnQgdG8gaW1tZWRpYXRlbHkgc3RvcCAmIG5vdCByZXRyeVxuICBpZiAodHlwZW9mIHJlc3BvbnNlLnN0YXR1c0NvZGUgPT09ICdudW1iZXInICYmIChyZXNwb25zZS5zdGF0dXNDb2RlIDwgMjAwIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgPj0gMzAwKSkge1xuICAgIHRocm93IG5ldyBUcmFuc3BvcnRTdGF0dXNDb2RlRXJyb3IocmVzcG9uc2Uuc3RhdHVzQ29kZSk7XG4gIH1cblxuICBjb25zdCByYXRlTGltaXRzID0gdXBkYXRlUmF0ZUxpbWl0cyh7fSwgcmVzcG9uc2UpO1xuICBpZiAoaXNSYXRlTGltaXRlZChyYXRlTGltaXRzLCAncmVwbGF5JykpIHtcbiAgICB0aHJvdyBuZXcgUmF0ZUxpbWl0RXJyb3IocmF0ZUxpbWl0cyk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbi8qKlxuICogVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB0aGUgdHJhbnNwb3J0IHJldHVybmVkIGFuIGludmFsaWQgc3RhdHVzIGNvZGUuXG4gKi9cbmNsYXNzIFRyYW5zcG9ydFN0YXR1c0NvZGVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgIGNvbnN0cnVjdG9yKHN0YXR1c0NvZGUpIHtcbiAgICBzdXBlcihgVHJhbnNwb3J0IHJldHVybmVkIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgd2UgaGl0IGEgcmF0ZSBsaW1pdCBBUEkgZXJyb3IuXG4gKi9cbmNsYXNzIFJhdGVMaW1pdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXG4gICBjb25zdHJ1Y3RvcihyYXRlTGltaXRzKSB7XG4gICAgc3VwZXIoJ1JhdGUgbGltaXQgaGl0Jyk7XG4gICAgdGhpcy5yYXRlTGltaXRzID0gcmF0ZUxpbWl0cztcbiAgfVxufVxuXG4vKipcbiAqIEZpbmFsaXplIGFuZCBzZW5kIHRoZSBjdXJyZW50IHJlcGxheSBldmVudCB0byBTZW50cnlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2VuZFJlcGxheShcbiAgcmVwbGF5RGF0YSxcbiAgcmV0cnlDb25maWcgPSB7XG4gICAgY291bnQ6IDAsXG4gICAgaW50ZXJ2YWw6IFJFVFJZX0JBU0VfSU5URVJWQUwsXG4gIH0sXG4pIHtcbiAgY29uc3QgeyByZWNvcmRpbmdEYXRhLCBvbkVycm9yIH0gPSByZXBsYXlEYXRhO1xuXG4gIC8vIHNob3J0IGNpcmN1aXQgaWYgdGhlcmUncyBubyBldmVudHMgdG8gdXBsb2FkICh0aGlzIHNob3VsZG4ndCBoYXBwZW4gYXMgX3J1bkZsdXNoIG1ha2VzIHRoaXMgY2hlY2spXG4gIGlmICghcmVjb3JkaW5nRGF0YS5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IHNlbmRSZXBsYXlSZXF1ZXN0KHJlcGxheURhdGEpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgVHJhbnNwb3J0U3RhdHVzQ29kZUVycm9yIHx8IGVyciBpbnN0YW5jZW9mIFJhdGVMaW1pdEVycm9yKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgLy8gQ2FwdHVyZSBlcnJvciBmb3IgZXZlcnkgZmFpbGVkIHJlcGxheVxuICAgIHNldENvbnRleHQoJ1JlcGxheXMnLCB7XG4gICAgICBfcmV0cnlDb3VudDogcmV0cnlDb25maWcuY291bnQsXG4gICAgfSk7XG5cbiAgICBpZiAob25FcnJvcikge1xuICAgICAgb25FcnJvcihlcnIpO1xuICAgIH1cblxuICAgIC8vIElmIGFuIGVycm9yIGhhcHBlbmVkIGhlcmUsIGl0J3MgbGlrZWx5IHRoYXQgdXBsb2FkaW5nIHRoZSBhdHRhY2htZW50XG4gICAgLy8gZmFpbGVkLCB3ZSdsbCBjYW4gcmV0cnkgd2l0aCB0aGUgc2FtZSBldmVudHMgcGF5bG9hZFxuICAgIGlmIChyZXRyeUNvbmZpZy5jb3VudCA+PSBSRVRSWV9NQVhfQ09VTlQpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGAke1VOQUJMRV9UT19TRU5EX1JFUExBWX0gLSBtYXggcmV0cmllcyBleGNlZWRlZGApO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBJbiBjYXNlIGJyb3dzZXJzIGRvbid0IGFsbG93IHRoaXMgcHJvcGVydHkgdG8gYmUgd3JpdGFibGVcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUaGlzIG5lZWRzIGxpYiBlczIwMjIgYW5kIG5ld2VyXG4gICAgICAgIGVycm9yLmNhdXNlID0gZXJyO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgLy8gd2lsbCByZXRyeSBpbiBpbnRlcnZhbHMgb2YgNSwgMTAsIDMwXG4gICAgcmV0cnlDb25maWcuaW50ZXJ2YWwgKj0gKytyZXRyeUNvbmZpZy5jb3VudDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXRUaW1lb3V0JDMoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHNlbmRSZXBsYXkocmVwbGF5RGF0YSwgcmV0cnlDb25maWcpO1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9LCByZXRyeUNvbmZpZy5pbnRlcnZhbCk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgVEhST1RUTEVEID0gJ19fVEhST1RUTEVEJztcbmNvbnN0IFNLSVBQRUQgPSAnX19TS0lQUEVEJztcblxuLyoqXG4gKiBDcmVhdGUgYSB0aHJvdHRsZWQgZnVuY3Rpb24gb2ZmIGEgZ2l2ZW4gZnVuY3Rpb24uXG4gKiBXaGVuIGNhbGxpbmcgdGhlIHRocm90dGxlZCBmdW5jdGlvbiwgaXQgd2lsbCBjYWxsIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBvbmx5XG4gKiBpZiBpdCBoYXNuJ3QgYmVlbiBjYWxsZWQgbW9yZSB0aGFuIGBtYXhDb3VudGAgdGltZXMgaW4gdGhlIGxhc3QgYGR1cmF0aW9uU2Vjb25kc2AuXG4gKlxuICogUmV0dXJucyBgVEhST1RUTEVEYCBpZiB0aHJvdHRsZWQgZm9yIHRoZSBmaXJzdCB0aW1lLCBhZnRlciB0aGF0IGBTS0lQUEVEYCxcbiAqIG9yIGVsc2UgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiB0aHJvdHRsZShcbiAgZm4sXG4gIG1heENvdW50LFxuICBkdXJhdGlvblNlY29uZHMsXG4pIHtcbiAgY29uc3QgY291bnRlciA9IG5ldyBNYXAoKTtcblxuICBjb25zdCBfY2xlYW51cCA9IChub3cpID0+IHtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSBub3cgLSBkdXJhdGlvblNlY29uZHM7XG4gICAgY291bnRlci5mb3JFYWNoKChfdmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKGtleSA8IHRocmVzaG9sZCkge1xuICAgICAgICBjb3VudGVyLmRlbGV0ZShrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IF9nZXRUb3RhbENvdW50ID0gKCkgPT4ge1xuICAgIHJldHVybiBbLi4uY291bnRlci52YWx1ZXMoKV0ucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG4gIH07XG5cbiAgbGV0IGlzVGhyb3R0bGVkID0gZmFsc2U7XG5cbiAgcmV0dXJuICguLi5yZXN0KSA9PiB7XG4gICAgLy8gRGF0ZSBpbiBzZWNvbmQtcHJlY2lzaW9uLCB3aGljaCB3ZSB1c2UgYXMgYmFzaXMgZm9yIHRoZSB0aHJvdHRsaW5nXG4gICAgY29uc3Qgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSBzdXJlIHRvIGRlbGV0ZSBhbnkgb2xkIGVudHJpZXNcbiAgICBfY2xlYW51cChub3cpO1xuXG4gICAgLy8gSWYgYWxyZWFkeSBvdmVyIGxpbWl0LCBkbyBub3RoaW5nXG4gICAgaWYgKF9nZXRUb3RhbENvdW50KCkgPj0gbWF4Q291bnQpIHtcbiAgICAgIGNvbnN0IHdhc1Rocm90dGxlZCA9IGlzVGhyb3R0bGVkO1xuICAgICAgaXNUaHJvdHRsZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHdhc1Rocm90dGxlZCA/IFNLSVBQRUQgOiBUSFJPVFRMRUQ7XG4gICAgfVxuXG4gICAgaXNUaHJvdHRsZWQgPSBmYWxzZTtcbiAgICBjb25zdCBjb3VudCA9IGNvdW50ZXIuZ2V0KG5vdykgfHwgMDtcbiAgICBjb3VudGVyLnNldChub3csIGNvdW50ICsgMSk7XG5cbiAgICByZXR1cm4gZm4oLi4ucmVzdCk7XG4gIH07XG59XG5cbi8qKlxuICogVGhlIG1haW4gcmVwbGF5IGNvbnRhaW5lciBjbGFzcywgd2hpY2ggaG9sZHMgYWxsIHRoZSBzdGF0ZSBhbmQgbWV0aG9kcyBmb3IgcmVjb3JkaW5nIGFuZCBzZW5kaW5nIHJlcGxheXMuXG4gKi9cbmNsYXNzIFJlcGxheUNvbnRhaW5lciAge1xuXG4gIC8qKlxuICAgKiBSZWNvcmRpbmcgY2FuIGhhcHBlbiBpbiBvbmUgb2YgdHdvIG1vZGVzOlxuICAgKiAgIC0gc2Vzc2lvbjogUmVjb3JkIHRoZSB3aG9sZSBzZXNzaW9uLCBzZW5kaW5nIGl0IGNvbnRpbnVvdXNseVxuICAgKiAgIC0gYnVmZmVyOiBBbHdheXMga2VlcCB0aGUgbGFzdCA2MHMgb2YgcmVjb3JkaW5nLCByZXF1aXJlczpcbiAgICogICAgIC0gaGF2aW5nIHJlcGxheXNPbkVycm9yU2FtcGxlUmF0ZSA+IDAgdG8gY2FwdHVyZSByZXBsYXkgd2hlbiBhbiBlcnJvciBvY2N1cnNcbiAgICogICAgIC0gb3IgY2FsbGluZyBgZmx1c2goKWAgdG8gc2VuZCB0aGUgcmVwbGF5XG4gICAqL1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBvciBsYXN0IGFjdGl2ZSBzcGFuLlxuICAgKiBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gcGVyZm9ybWFuY2UgaXMgZW5hYmxlZC5cbiAgICovXG5cbiAgLyoqXG4gICAqIFRoZXNlIGFyZSBoZXJlIHNvIHdlIGNhbiBvdmVyd3JpdGUgdGhlbSBpbiB0ZXN0cyBldGMuXG4gICAqIEBoaWRkZW5cbiAgICovXG5cbiAgLyoqIFRoZSByZXBsYXkgaGFzIHRvIGJlIG1hbnVhbGx5IHN0YXJ0ZWQsIGJlY2F1c2Ugbm8gc2FtcGxlIHJhdGUgKG5laXRoZXIgc2Vzc2lvbiBvciBlcnJvcikgd2FzIHByb3ZpZGVkLiAqL1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIHRvIHBhc3MgdG8gYHJyd2ViLnJlY29yZCgpYFxuICAgKi9cblxuICAvKipcbiAgICogVGltZXN0YW1wIG9mIHRoZSBsYXN0IHVzZXIgYWN0aXZpdHkuIFRoaXMgbGl2ZXMgYWNyb3NzIHNlc3Npb25zLlxuICAgKi9cblxuICAvKipcbiAgICogSXMgdGhlIGludGVncmF0aW9uIGN1cnJlbnRseSBhY3RpdmU/XG4gICAqL1xuXG4gIC8qKlxuICAgKiBQYXVzZWQgaXMgYSBzdGF0ZSB3aGVyZTpcbiAgICogLSBET00gUmVjb3JkaW5nIGlzIG5vdCBsaXN0ZW5pbmcgYXQgYWxsXG4gICAqIC0gTm90aGluZyB3aWxsIGJlIGFkZGVkIHRvIGV2ZW50IGJ1ZmZlciAoZS5nLiBjb3JlIFNESyBldmVudHMpXG4gICAqL1xuXG4gIC8qKlxuICAgKiBIYXZlIHdlIGF0dGFjaGVkIGxpc3RlbmVycyB0byB0aGUgY29yZSBTREs/XG4gICAqIE5vdGUgd2UgaGF2ZSB0byB0cmFjayB0aGlzIGFzIHRoZXJlIGlzIG5vIHdheSB0byByZW1vdmUgaW5zdHJ1bWVudGF0aW9uIGhhbmRsZXJzLlxuICAgKi9cblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gc3RvcCByZWNvcmRpbmdcbiAgICovXG5cbiAgLyoqXG4gICAqIEludGVybmFsIHVzZSBmb3IgY2FudmFzIHJlY29yZGluZyBvcHRpb25zXG4gICAqL1xuXG4gIC8qKlxuICAgKiBIYW5kbGUgd2hlbiB2aXNpYmlsaXR5IG9mIHRoZSBwYWdlIGNvbnRlbnQgY2hhbmdlcy4gT3BlbmluZyBhIG5ldyB0YWIgd2lsbFxuICAgKiBjYXVzZSB0aGUgc3RhdGUgdG8gY2hhbmdlIHRvIGhpZGRlbiBiZWNhdXNlIG9mIGNvbnRlbnQgb2YgY3VycmVudCBwYWdlIHdpbGxcbiAgICogYmUgaGlkZGVuLiBMaWtld2lzZSwgbW92aW5nIGEgZGlmZmVyZW50IHdpbmRvdyB0byBjb3ZlciB0aGUgY29udGVudHMgb2YgdGhlXG4gICAqIHBhZ2Ugd2lsbCBhbHNvIHRyaWdnZXIgYSBjaGFuZ2UgdG8gYSBoaWRkZW4gc3RhdGUuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBIYW5kbGUgd2hlbiBwYWdlIGlzIGJsdXJyZWRcbiAgICovXG5cbiAgLyoqXG4gICAqIEhhbmRsZSB3aGVuIHBhZ2UgaXMgZm9jdXNlZFxuICAgKi9cblxuICAvKiogRW5zdXJlIHBhZ2UgcmVtYWlucyBhY3RpdmUgd2hlbiBhIGtleSBpcyBwcmVzc2VkLiAqL1xuXG4gICBjb25zdHJ1Y3Rvcih7XG4gICAgb3B0aW9ucyxcbiAgICByZWNvcmRpbmdPcHRpb25zLFxuICB9XG5cbikge1xuICAgIHRoaXMuZXZlbnRCdWZmZXIgPSBudWxsO1xuICAgIHRoaXMucGVyZm9ybWFuY2VFbnRyaWVzID0gW107XG4gICAgdGhpcy5yZXBsYXlQZXJmb3JtYW5jZUVudHJpZXMgPSBbXTtcbiAgICB0aGlzLnJlY29yZGluZ01vZGUgPSAnc2Vzc2lvbic7XG4gICAgdGhpcy50aW1lb3V0cyA9IHtcbiAgICAgIHNlc3Npb25JZGxlUGF1c2U6IFNFU1NJT05fSURMRV9QQVVTRV9EVVJBVElPTixcbiAgICAgIHNlc3Npb25JZGxlRXhwaXJlOiBTRVNTSU9OX0lETEVfRVhQSVJFX0RVUkFUSU9OLFxuICAgIH0gO1xuICAgIHRoaXMuX2xhc3RBY3Rpdml0eSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5faXNFbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5faXNQYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9yZXF1aXJlc01hbnVhbFN0YXJ0ID0gZmFsc2U7XG4gICAgdGhpcy5faGFzSW5pdGlhbGl6ZWRDb3JlTGlzdGVuZXJzID0gZmFsc2U7XG4gICAgdGhpcy5fY29udGV4dCA9IHtcbiAgICAgIGVycm9ySWRzOiBuZXcgU2V0KCksXG4gICAgICB0cmFjZUlkczogbmV3IFNldCgpLFxuICAgICAgdXJsczogW10sXG4gICAgICBpbml0aWFsVGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgaW5pdGlhbFVybDogJycsXG4gICAgfTtcblxuICAgIHRoaXMuX3JlY29yZGluZ09wdGlvbnMgPSByZWNvcmRpbmdPcHRpb25zO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgdGhpcy5fZGVib3VuY2VkRmx1c2ggPSBkZWJvdW5jZSgoKSA9PiB0aGlzLl9mbHVzaCgpLCB0aGlzLl9vcHRpb25zLmZsdXNoTWluRGVsYXksIHtcbiAgICAgIG1heFdhaXQ6IHRoaXMuX29wdGlvbnMuZmx1c2hNYXhEZWxheSxcbiAgICB9KTtcblxuICAgIHRoaXMuX3Rocm90dGxlZEFkZEV2ZW50ID0gdGhyb3R0bGUoXG4gICAgICAoZXZlbnQsIGlzQ2hlY2tvdXQpID0+IGFkZEV2ZW50KHRoaXMsIGV2ZW50LCBpc0NoZWNrb3V0KSxcbiAgICAgIC8vIE1heCAzMDAgZXZlbnRzLi4uXG4gICAgICAzMDAsXG4gICAgICAvLyAuLi4gcGVyIDVzXG4gICAgICA1LFxuICAgICk7XG5cbiAgICBjb25zdCB7IHNsb3dDbGlja1RpbWVvdXQsIHNsb3dDbGlja0lnbm9yZVNlbGVjdG9ycyB9ID0gdGhpcy5nZXRPcHRpb25zKCk7XG5cbiAgICBjb25zdCBzbG93Q2xpY2tDb25maWcgPSBzbG93Q2xpY2tUaW1lb3V0XG4gICAgICA/IHtcbiAgICAgICAgICB0aHJlc2hvbGQ6IE1hdGgubWluKFNMT1dfQ0xJQ0tfVEhSRVNIT0xELCBzbG93Q2xpY2tUaW1lb3V0KSxcbiAgICAgICAgICB0aW1lb3V0OiBzbG93Q2xpY2tUaW1lb3V0LFxuICAgICAgICAgIHNjcm9sbFRpbWVvdXQ6IFNMT1dfQ0xJQ0tfU0NST0xMX1RJTUVPVVQsXG4gICAgICAgICAgaWdub3JlU2VsZWN0b3I6IHNsb3dDbGlja0lnbm9yZVNlbGVjdG9ycyA/IHNsb3dDbGlja0lnbm9yZVNlbGVjdG9ycy5qb2luKCcsJykgOiAnJyxcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoc2xvd0NsaWNrQ29uZmlnKSB7XG4gICAgICB0aGlzLmNsaWNrRGV0ZWN0b3IgPSBuZXcgQ2xpY2tEZXRlY3Rvcih0aGlzLCBzbG93Q2xpY2tDb25maWcpO1xuICAgIH1cblxuICAgIC8vIENvbmZpZ3VyZSByZXBsYXkgZGVidWcgbG9nZ2VyIHcvIGV4cGVyaW1lbnRhbCBvcHRpb25zXG4gICAgaWYgKERFQlVHX0JVSUxEKSB7XG4gICAgICBjb25zdCBleHBlcmltZW50cyA9IG9wdGlvbnMuX2V4cGVyaW1lbnRzO1xuICAgICAgZGVidWcuc2V0Q29uZmlnKHtcbiAgICAgICAgY2FwdHVyZUV4Y2VwdGlvbnM6ICEhZXhwZXJpbWVudHMuY2FwdHVyZUV4Y2VwdGlvbnMsXG4gICAgICAgIHRyYWNlSW50ZXJuYWxzOiAhIWV4cGVyaW1lbnRzLnRyYWNlSW50ZXJuYWxzLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gV2Ugc2V0IHRoZXNlIGhhbmRsZXIgcHJvcGVydGllcyBhcyBjbGFzcyBwcm9wZXJ0aWVzLCB0byBtYWtlIGJpbmRpbmcvdW5iaW5kaW5nIHRoZW0gZWFzaWVyXG4gICAgdGhpcy5faGFuZGxlVmlzaWJpbGl0eUNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmIChXSU5ET1cuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAndmlzaWJsZScpIHtcbiAgICAgICAgdGhpcy5fZG9DaGFuZ2VUb0ZvcmVncm91bmRUYXNrcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZG9DaGFuZ2VUb0JhY2tncm91bmRUYXNrcygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgd2hlbiBwYWdlIGlzIGJsdXJyZWRcbiAgICAgKi9cbiAgICB0aGlzLl9oYW5kbGVXaW5kb3dCbHVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgYnJlYWRjcnVtYiA9IGNyZWF0ZUJyZWFkY3J1bWIoe1xuICAgICAgICBjYXRlZ29yeTogJ3VpLmJsdXInLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIERvIG5vdCBjb3VudCBibHVyIGFzIGEgdXNlciBhY3Rpb24gLS0gaXQncyBwYXJ0IG9mIHRoZSBwcm9jZXNzIG9mIHRoZW1cbiAgICAgIC8vIGxlYXZpbmcgdGhlIHBhZ2VcbiAgICAgIHRoaXMuX2RvQ2hhbmdlVG9CYWNrZ3JvdW5kVGFza3MoYnJlYWRjcnVtYik7XG4gICAgfTtcblxuICAgIHRoaXMuX2hhbmRsZVdpbmRvd0ZvY3VzID0gKCkgPT4ge1xuICAgICAgY29uc3QgYnJlYWRjcnVtYiA9IGNyZWF0ZUJyZWFkY3J1bWIoe1xuICAgICAgICBjYXRlZ29yeTogJ3VpLmZvY3VzJyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBEbyBub3QgY291bnQgZm9jdXMgYXMgYSB1c2VyIGFjdGlvbiAtLSBpbnN0ZWFkIHdhaXQgdW50aWwgdGhleSBmb2N1cyBhbmRcbiAgICAgIC8vIGludGVyYWN0aXZlIHdpdGggcGFnZVxuICAgICAgdGhpcy5fZG9DaGFuZ2VUb0ZvcmVncm91bmRUYXNrcyhicmVhZGNydW1iKTtcbiAgICB9O1xuXG4gICAgLyoqIEVuc3VyZSBwYWdlIHJlbWFpbnMgYWN0aXZlIHdoZW4gYSBrZXkgaXMgcHJlc3NlZC4gKi9cbiAgICB0aGlzLl9oYW5kbGVLZXlib2FyZEV2ZW50ID0gKGV2ZW50KSA9PiB7XG4gICAgICBoYW5kbGVLZXlib2FyZEV2ZW50KHRoaXMsIGV2ZW50KTtcbiAgICB9O1xuICB9XG5cbiAgLyoqIEdldCB0aGUgZXZlbnQgY29udGV4dC4gKi9cbiAgIGdldENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHQ7XG4gIH1cblxuICAvKiogSWYgcmVjb3JkaW5nIGlzIGN1cnJlbnRseSBlbmFibGVkLiAqL1xuICAgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc0VuYWJsZWQ7XG4gIH1cblxuICAvKiogSWYgcmVjb3JkaW5nIGlzIGN1cnJlbnRseSBwYXVzZWQuICovXG4gICBpc1BhdXNlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNQYXVzZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIGNhbnZhcyByZWNvcmRpbmcgaXMgZW5hYmxlZFxuICAgKi9cbiAgIGlzUmVjb3JkaW5nQ2FudmFzKCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuX2NhbnZhcyk7XG4gIH1cblxuICAvKiogR2V0IHRoZSByZXBsYXkgaW50ZWdyYXRpb24gb3B0aW9ucy4gKi9cbiAgIGdldE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICAvKiogQSB3cmFwcGVyIHRvIGNvbmRpdGlvbmFsbHkgY2FwdHVyZSBleGNlcHRpb25zLiAqL1xuICAgaGFuZGxlRXhjZXB0aW9uKGVycm9yKSB7XG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcuZXhjZXB0aW9uKGVycm9yKTtcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5vbkVycm9yKSB7XG4gICAgICB0aGlzLl9vcHRpb25zLm9uRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgcGx1Z2luIGJhc2VkIG9uIHNhbXBsaW5nIGNvbmZpZ3VyYXRpb24uIFNob3VsZCBub3QgYmVcbiAgICogY2FsbGVkIG91dHNpZGUgb2YgY29uc3RydWN0b3IuXG4gICAqL1xuICAgaW5pdGlhbGl6ZVNhbXBsaW5nKHByZXZpb3VzU2Vzc2lvbklkKSB7XG4gICAgY29uc3QgeyBlcnJvclNhbXBsZVJhdGUsIHNlc3Npb25TYW1wbGVSYXRlIH0gPSB0aGlzLl9vcHRpb25zO1xuXG4gICAgLy8gSWYgbmVpdGhlciBzYW1wbGUgcmF0ZSBpcyA+IDAsIHRoZW4gZG8gbm90aGluZyAtIHVzZXIgd2lsbCBuZWVkIHRvIGNhbGwgb25lIG9mXG4gICAgLy8gYHN0YXJ0KClgIG9yIGBzdGFydEJ1ZmZlcmluZ2AgdGhlbXNlbHZlcy5cbiAgICBjb25zdCByZXF1aXJlc01hbnVhbFN0YXJ0ID0gZXJyb3JTYW1wbGVSYXRlIDw9IDAgJiYgc2Vzc2lvblNhbXBsZVJhdGUgPD0gMDtcblxuICAgIHRoaXMuX3JlcXVpcmVzTWFudWFsU3RhcnQgPSByZXF1aXJlc01hbnVhbFN0YXJ0O1xuXG4gICAgaWYgKHJlcXVpcmVzTWFudWFsU3RhcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UgaWYgdGhlcmUgaXMgX2FueV8gc2FtcGxlIHJhdGUgc2V0LCB0cnkgdG8gbG9hZCBhbiBleGlzdGluZ1xuICAgIC8vIHNlc3Npb24sIG9yIGNyZWF0ZSBhIG5ldyBvbmUuXG4gICAgdGhpcy5faW5pdGlhbGl6ZVNlc3Npb25Gb3JTYW1wbGluZyhwcmV2aW91c1Nlc3Npb25JZCk7XG5cbiAgICBpZiAoIXRoaXMuc2Vzc2lvbikge1xuICAgICAgLy8gVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgc29tZXRoaW5nIHdyb25nIGhhcyBvY2N1cnJlZFxuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcuZXhjZXB0aW9uKG5ldyBFcnJvcignVW5hYmxlIHRvIGluaXRpYWxpemUgYW5kIGNyZWF0ZSBzZXNzaW9uJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlc3Npb24uc2FtcGxlZCA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgb2NjdXIgaWYgYGVycm9yU2FtcGxlUmF0ZWAgaXMgMCBhbmQgd2FzIHVuc2FtcGxlZCBmb3JcbiAgICAgIC8vIHNlc3Npb24tYmFzZWQgcmVwbGF5LiBJbiB0aGlzIGNhc2UgdGhlcmUgaXMgbm90aGluZyB0byBkby5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBzZWdtZW50SWQgPiAwLCBpdCBtZWFucyB3ZSd2ZSBwcmV2aW91c2x5IGFscmVhZHkgY2FwdHVyZWQgdGhpcyBzZXNzaW9uXG4gICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBzdGlsbCB3YW50IHRvIGNvbnRpbnVlIGluIGBzZXNzaW9uYCByZWNvcmRpbmcgbW9kZVxuICAgIHRoaXMucmVjb3JkaW5nTW9kZSA9IHRoaXMuc2Vzc2lvbi5zYW1wbGVkID09PSAnYnVmZmVyJyAmJiB0aGlzLnNlc3Npb24uc2VnbWVudElkID09PSAwID8gJ2J1ZmZlcicgOiAnc2Vzc2lvbic7XG5cbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5pbmZvVGljayhgU3RhcnRpbmcgcmVwbGF5IGluICR7dGhpcy5yZWNvcmRpbmdNb2RlfSBtb2RlYCk7XG5cbiAgICB0aGlzLl9pbml0aWFsaXplUmVjb3JkaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYSByZXBsYXkgcmVnYXJkbGVzcyBvZiBzYW1wbGluZyByYXRlLiBDYWxsaW5nIHRoaXMgd2lsbCBhbHdheXNcbiAgICogY3JlYXRlIGEgbmV3IHNlc3Npb24uIFdpbGwgbG9nIGEgbWVzc2FnZSBpZiByZXBsYXkgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcy5cbiAgICpcbiAgICogQ3JlYXRlcyBvciBsb2FkcyBhIHNlc3Npb24sIGF0dGFjaGVzIGxpc3RlbmVycyB0byB2YXJ5aW5nIGV2ZW50cyAoRE9NLFxuICAgKiBfcGVyZm9ybWFuY2VPYnNlcnZlciwgUmVjb3JkaW5nLCBTZW50cnkgU0RLLCBldGMpXG4gICAqL1xuICAgc3RhcnQoKSB7XG4gICAgaWYgKHRoaXMuX2lzRW5hYmxlZCAmJiB0aGlzLnJlY29yZGluZ01vZGUgPT09ICdzZXNzaW9uJykge1xuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKCdSZWNvcmRpbmcgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc0VuYWJsZWQgJiYgdGhpcy5yZWNvcmRpbmdNb2RlID09PSAnYnVmZmVyJykge1xuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKCdCdWZmZXJpbmcgaXMgaW4gcHJvZ3Jlc3MsIGNhbGwgYGZsdXNoKClgIHRvIHNhdmUgdGhlIHJlcGxheScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLmluZm9UaWNrKCdTdGFydGluZyByZXBsYXkgaW4gc2Vzc2lvbiBtb2RlJyk7XG5cbiAgICAvLyBSZXF1aXJlZCBhcyB1c2VyIGFjdGl2aXR5IGlzIGluaXRpYWxseSBzZXQgaW5cbiAgICAvLyBjb25zdHJ1Y3Rvciwgc28gaWYgYHN0YXJ0KClgIGlzIGNhbGxlZCBhZnRlclxuICAgIC8vIHNlc3Npb24gaWRsZSBleHBpcmF0aW9uLCBhIHJlcGxheSB3aWxsIG5vdCBiZVxuICAgIC8vIGNyZWF0ZWQgZHVlIHRvIGFuIGlkbGUgdGltZW91dC5cbiAgICB0aGlzLl91cGRhdGVVc2VyQWN0aXZpdHkoKTtcblxuICAgIGNvbnN0IHNlc3Npb24gPSBsb2FkT3JDcmVhdGVTZXNzaW9uKFxuICAgICAge1xuICAgICAgICBtYXhSZXBsYXlEdXJhdGlvbjogdGhpcy5fb3B0aW9ucy5tYXhSZXBsYXlEdXJhdGlvbixcbiAgICAgICAgc2Vzc2lvbklkbGVFeHBpcmU6IHRoaXMudGltZW91dHMuc2Vzc2lvbklkbGVFeHBpcmUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzdGlja3lTZXNzaW9uOiB0aGlzLl9vcHRpb25zLnN0aWNreVNlc3Npb24sXG4gICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWw6IGNyZWF0ZSBhIG5ldyBzZXNzaW9uLWJhc2VkIHJlcGxheSB3aGVuIGNhbGxpbmcgYHN0YXJ0KClgXG4gICAgICAgIHNlc3Npb25TYW1wbGVSYXRlOiAxLFxuICAgICAgICBhbGxvd0J1ZmZlcmluZzogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uO1xuICAgIHRoaXMucmVjb3JkaW5nTW9kZSA9ICdzZXNzaW9uJztcblxuICAgIHRoaXMuX2luaXRpYWxpemVSZWNvcmRpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCByZXBsYXkgYnVmZmVyaW5nLiBCdWZmZXJzIHVudGlsIGBmbHVzaCgpYCBpcyBjYWxsZWQgb3IsIGlmXG4gICAqIGByZXBsYXlzT25FcnJvclNhbXBsZVJhdGVgID4gMCwgYW4gZXJyb3Igb2NjdXJzLlxuICAgKi9cbiAgIHN0YXJ0QnVmZmVyaW5nKCkge1xuICAgIGlmICh0aGlzLl9pc0VuYWJsZWQpIHtcbiAgICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLmxvZygnQnVmZmVyaW5nIGlzIGluIHByb2dyZXNzLCBjYWxsIGBmbHVzaCgpYCB0byBzYXZlIHRoZSByZXBsYXknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5pbmZvVGljaygnU3RhcnRpbmcgcmVwbGF5IGluIGJ1ZmZlciBtb2RlJyk7XG5cbiAgICBjb25zdCBzZXNzaW9uID0gbG9hZE9yQ3JlYXRlU2Vzc2lvbihcbiAgICAgIHtcbiAgICAgICAgc2Vzc2lvbklkbGVFeHBpcmU6IHRoaXMudGltZW91dHMuc2Vzc2lvbklkbGVFeHBpcmUsXG4gICAgICAgIG1heFJlcGxheUR1cmF0aW9uOiB0aGlzLl9vcHRpb25zLm1heFJlcGxheUR1cmF0aW9uLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc3RpY2t5U2Vzc2lvbjogdGhpcy5fb3B0aW9ucy5zdGlja3lTZXNzaW9uLFxuICAgICAgICBzZXNzaW9uU2FtcGxlUmF0ZTogMCxcbiAgICAgICAgYWxsb3dCdWZmZXJpbmc6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uO1xuXG4gICAgdGhpcy5yZWNvcmRpbmdNb2RlID0gJ2J1ZmZlcic7XG4gICAgdGhpcy5faW5pdGlhbGl6ZVJlY29yZGluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHJlY29yZGluZy5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoaXMgd2lsbCBjYXVzZSBhIG5ldyBET00gY2hlY2tvdXRcbiAgICovXG4gICBzdGFydFJlY29yZGluZygpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY2FudmFzT3B0aW9ucyA9IHRoaXMuX2NhbnZhcztcblxuICAgICAgdGhpcy5fc3RvcFJlY29yZGluZyA9IHJlY29yZCh7XG4gICAgICAgIC4uLnRoaXMuX3JlY29yZGluZ09wdGlvbnMsXG4gICAgICAgIC8vIFdoZW4gcnVubmluZyBpbiBlcnJvciBzYW1wbGluZyBtb2RlLCB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSBgY2hlY2tvdXRFdmVyeU5tc2BcbiAgICAgICAgLy8gV2l0aG91dCB0aGlzLCBpdCB3b3VsZCByZWNvcmQgZm9yZXZlciwgdW50aWwgYW4gZXJyb3IgaGFwcGVucywgd2hpY2ggd2UgZG9uJ3Qgd2FudFxuICAgICAgICAvLyBpbnN0ZWFkLCB3ZSdsbCBhbHdheXMga2VlcCB0aGUgbGFzdCA2MCBzZWNvbmRzIG9mIHJlcGxheSBiZWZvcmUgYW4gZXJyb3IgaGFwcGVuZWRcbiAgICAgICAgLi4uKHRoaXMucmVjb3JkaW5nTW9kZSA9PT0gJ2J1ZmZlcidcbiAgICAgICAgICA/IHsgY2hlY2tvdXRFdmVyeU5tczogQlVGRkVSX0NIRUNLT1VUX1RJTUUgfVxuICAgICAgICAgIDogLy8gT3RoZXJ3aXNlLCB1c2UgZXhwZXJpbWVudGFsIG9wdGlvbiB3LyBtaW4gY2hlY2tvdXQgdGltZSBvZiA2IG1pbnV0ZXNcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgdG8gaW1wcm92ZSBwbGF5YmFjayBzZWVraW5nIGFzIHRoZXJlIGNvdWxkIHBvdGVudGlhbGx5IGJlXG4gICAgICAgICAgICAvLyBsZXNzIG11dGF0aW9ucyB0byBwcm9jZXNzIGluIHRoZSB3b3JzZSBjYXNlcy5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBjaGVja291dCBieSBcIk5cIiBldmVudHMgaXMgcHJvYmFibHkgaWRlYWwsIGJ1dCBtZWFucyB3ZSBoYXZlIGxlc3NcbiAgICAgICAgICAgIC8vIGNvbnRyb2wgYWJvdXQgdGhlIG51bWJlciBvZiBjaGVja291dHMgd2UgbWFrZSAod2hpY2ggZ2VuZXJhbGx5XG4gICAgICAgICAgICAvLyBpbmNyZWFzZXMgcmVwbGF5IHNpemUpXG4gICAgICAgICAgICB0aGlzLl9vcHRpb25zLl9leHBlcmltZW50cy5jb250aW51b3VzQ2hlY2tvdXQgJiYge1xuICAgICAgICAgICAgICAvLyBNaW5pbXVtIGNoZWNrb3V0IHRpbWUgaXMgNiBtaW51dGVzXG4gICAgICAgICAgICAgIGNoZWNrb3V0RXZlcnlObXM6IE1hdGgubWF4KDM2MDAwMCwgdGhpcy5fb3B0aW9ucy5fZXhwZXJpbWVudHMuY29udGludW91c0NoZWNrb3V0KSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBlbWl0OiBnZXRIYW5kbGVSZWNvcmRpbmdFbWl0KHRoaXMpLFxuICAgICAgICAuLi5nZXRSZWNvcmRpbmdTYW1wbGluZ09wdGlvbnMoKSxcbiAgICAgICAgb25NdXRhdGlvbjogdGhpcy5fb25NdXRhdGlvbkhhbmRsZXIuYmluZCh0aGlzKSxcbiAgICAgICAgLi4uKGNhbnZhc09wdGlvbnNcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcmVjb3JkQ2FudmFzOiBjYW52YXNPcHRpb25zLnJlY29yZENhbnZhcyxcbiAgICAgICAgICAgICAgZ2V0Q2FudmFzTWFuYWdlcjogY2FudmFzT3B0aW9ucy5nZXRDYW52YXNNYW5hZ2VyLFxuICAgICAgICAgICAgICBzYW1wbGluZzogY2FudmFzT3B0aW9ucy5zYW1wbGluZyxcbiAgICAgICAgICAgICAgZGF0YVVSTE9wdGlvbnM6IGNhbnZhc09wdGlvbnMuZGF0YVVSTE9wdGlvbnMsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuaGFuZGxlRXhjZXB0aW9uKGVycik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN0b3BzIHRoZSByZWNvcmRpbmcsIGlmIGl0IHdhcyBydW5uaW5nLlxuICAgKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgaXQgd2FzIHByZXZpb3VzbHkgc3RvcHBlZCwgb3IgaXMgbm93IHN0b3BwZWQsXG4gICAqIG90aGVyd2lzZSBmYWxzZS5cbiAgICovXG4gICBzdG9wUmVjb3JkaW5nKCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5fc3RvcFJlY29yZGluZykge1xuICAgICAgICB0aGlzLl9zdG9wUmVjb3JkaW5nKCk7XG4gICAgICAgIHRoaXMuX3N0b3BSZWNvcmRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5oYW5kbGVFeGNlcHRpb24oZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3VycmVudGx5LCB0aGlzIG5lZWRzIHRvIGJlIG1hbnVhbGx5IGNhbGxlZCAoZS5nLiBmb3IgdGVzdHMpLiBTZW50cnkgU0RLXG4gICAqIGRvZXMgbm90IHN1cHBvcnQgYSB0ZWFyZG93blxuICAgKi9cbiAgIGFzeW5jIHN0b3AoeyBmb3JjZUZsdXNoID0gZmFsc2UsIHJlYXNvbiB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFdlIGNhbid0IG1vdmUgYF9pc0VuYWJsZWRgIGFmdGVyIGF3YWl0aW5nIGEgZmx1c2gsIG90aGVyd2lzZSB3ZSBjYW5cbiAgICAvLyBlbnRlciBpbnRvIGFuIGluZmluaXRlIGxvb3Agd2hlbiBgc3RvcCgpYCBpcyBjYWxsZWQgd2hpbGUgZmx1c2hpbmcuXG4gICAgdGhpcy5faXNFbmFibGVkID0gZmFsc2U7XG5cbiAgICAvLyBNYWtlIHN1cmUgdG8gcmVzZXQgYHJlY29yZGluZ01vZGVgIHRvIGBidWZmZXJgIHRvIGF2b2lkIGFueSBhZGRpdGlvbmFsXG4gICAgLy8gYnJlYWRjcnVtYnMgdG8gdHJpZ2dlciBhIGZsdXNoIChlLmcuIGluIGBhZGRVcGRhdGUoKWApXG4gICAgdGhpcy5yZWNvcmRpbmdNb2RlID0gJ2J1ZmZlcic7XG5cbiAgICB0cnkge1xuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKGBTdG9wcGluZyBSZXBsYXkke3JlYXNvbiA/IGAgdHJpZ2dlcmVkIGJ5ICR7cmVhc29ufWAgOiAnJ31gKTtcblxuICAgICAgcmVzZXRSZXBsYXlJZE9uRHluYW1pY1NhbXBsaW5nQ29udGV4dCgpO1xuXG4gICAgICB0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICAgIHRoaXMuc3RvcFJlY29yZGluZygpO1xuXG4gICAgICB0aGlzLl9kZWJvdW5jZWRGbHVzaC5jYW5jZWwoKTtcbiAgICAgIC8vIFNlZSBjb21tZW50IGFib3ZlIHJlOiBgX2lzRW5hYmxlZGAsIHdlIFwiZm9yY2VcIiBhIGZsdXNoLCBpZ25vcmluZyB0aGVcbiAgICAgIC8vIGBfaXNFbmFibGVkYCBzdGF0ZSBvZiB0aGUgcGx1Z2luIHNpbmNlIGl0IHdhcyBkaXNhYmxlZCBhYm92ZS5cbiAgICAgIGlmIChmb3JjZUZsdXNoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2ZsdXNoKHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFmdGVyIGZsdXNoLCBkZXN0cm95IGV2ZW50IGJ1ZmZlclxuICAgICAgdGhpcy5ldmVudEJ1ZmZlcj8uZGVzdHJveSgpO1xuICAgICAgdGhpcy5ldmVudEJ1ZmZlciA9IG51bGw7XG5cbiAgICAgIC8vIENsZWFyIHNlc3Npb24gZnJvbSBzZXNzaW9uIHN0b3JhZ2UsIG5vdGUgdGhpcyBtZWFucyBpZiBhIG5ldyBzZXNzaW9uXG4gICAgICAvLyBpcyBzdGFydGVkIGFmdGVyLCBpdCB3aWxsIG5vdCBoYXZlIGBwcmV2aW91c1Nlc3Npb25JZGBcbiAgICAgIGNsZWFyU2Vzc2lvbih0aGlzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuaGFuZGxlRXhjZXB0aW9uKGVycik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBhdXNlIHNvbWUgcmVwbGF5IGZ1bmN0aW9uYWxpdHkuIFNlZSBjb21tZW50cyBmb3IgYF9pc1BhdXNlZGAuXG4gICAqIFRoaXMgZGlmZmVycyBmcm9tIHN0b3AgYXMgdGhpcyBvbmx5IHN0b3BzIERPTSByZWNvcmRpbmcsIGl0IGlzXG4gICAqIG5vdCBhcyB0aG9yb3VnaCBvZiBhIHNodXRkb3duIGFzIGBzdG9wKClgLlxuICAgKi9cbiAgIHBhdXNlKCkge1xuICAgIGlmICh0aGlzLl9pc1BhdXNlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzUGF1c2VkID0gdHJ1ZTtcbiAgICB0aGlzLnN0b3BSZWNvcmRpbmcoKTtcblxuICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLmxvZygnUGF1c2luZyByZXBsYXknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWVzIHJlY29yZGluZywgc2VlIG5vdGVzIGZvciBgcGF1c2UoKS5cbiAgICpcbiAgICogTm90ZSB0aGF0IGNhbGxpbmcgYHN0YXJ0UmVjb3JkaW5nKClgIGhlcmUgd2lsbCBjYXVzZSBhXG4gICAqIG5ldyBET00gY2hlY2tvdXQuYFxuICAgKi9cbiAgIHJlc3VtZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzUGF1c2VkIHx8ICF0aGlzLl9jaGVja1Nlc3Npb24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzUGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5zdGFydFJlY29yZGluZygpO1xuXG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKCdSZXN1bWluZyByZXBsYXknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBub3QgaW4gXCJzZXNzaW9uXCIgcmVjb3JkaW5nIG1vZGUsIGZsdXNoIGV2ZW50IGJ1ZmZlciB3aGljaCB3aWxsIGNyZWF0ZSBhIG5ldyByZXBsYXkuXG4gICAqIFVubGVzcyBgY29udGludWVSZWNvcmRpbmdgIGlzIGZhbHNlLCB0aGUgcmVwbGF5IHdpbGwgY29udGludWUgdG8gcmVjb3JkIGFuZFxuICAgKiBiZWhhdmUgYXMgYSBcInNlc3Npb25cIi1iYXNlZCByZXBsYXkuXG4gICAqXG4gICAqIE90aGVyd2lzZSwgcXVldWUgdXAgYSBmbHVzaC5cbiAgICovXG4gICBhc3luYyBzZW5kQnVmZmVyZWRSZXBsYXlPckZsdXNoKHsgY29udGludWVSZWNvcmRpbmcgPSB0cnVlIH0gPSB7fSkge1xuICAgIGlmICh0aGlzLnJlY29yZGluZ01vZGUgPT09ICdzZXNzaW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMuZmx1c2hJbW1lZGlhdGUoKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY3Rpdml0eVRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKCdDb252ZXJ0aW5nIGJ1ZmZlciB0byBzZXNzaW9uJyk7XG5cbiAgICAvLyBBbGxvdyBmbHVzaCB0byBjb21wbGV0ZSBiZWZvcmUgcmVzdW1pbmcgYXMgYSBzZXNzaW9uIHJlY29yZGluZywgb3RoZXJ3aXNlXG4gICAgLy8gdGhlIGNoZWNrb3V0IGZyb20gYHN0YXJ0UmVjb3JkaW5nYCBtYXkgYmUgaW5jbHVkZWQgaW4gdGhlIHBheWxvYWQuXG4gICAgLy8gUHJlZmVyIHRvIGtlZXAgdGhlIGVycm9yIHJlcGxheSBhcyBhIHNlcGFyYXRlIChhbmQgc21hbGxlcikgc2VnbWVudFxuICAgIC8vIHRoYW4gdGhlIHNlc3Npb24gcmVwbGF5LlxuICAgIGF3YWl0IHRoaXMuZmx1c2hJbW1lZGlhdGUoKTtcblxuICAgIGNvbnN0IGhhc1N0b3BwZWRSZWNvcmRpbmcgPSB0aGlzLnN0b3BSZWNvcmRpbmcoKTtcblxuICAgIGlmICghY29udGludWVSZWNvcmRpbmcgfHwgIWhhc1N0b3BwZWRSZWNvcmRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUbyBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2hlcmUgdGhpcyBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIHdlIGNoZWNrIGhlcmUgYWdhaW4gdGhhdCB3ZSBhcmUgc3RpbGwgYnVmZmVyaW5nXG4gICAgaWYgKCh0aGlzLnJlY29yZGluZ01vZGUgKSA9PT0gJ3Nlc3Npb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmUtc3RhcnQgcmVjb3JkaW5nIGluIHNlc3Npb24tbW9kZVxuICAgIHRoaXMucmVjb3JkaW5nTW9kZSA9ICdzZXNzaW9uJztcblxuICAgIC8vIE9uY2UgdGhpcyBzZXNzaW9uIGVuZHMsIHdlIGRvIG5vdCB3YW50IHRvIHJlZnJlc2ggaXRcbiAgICBpZiAodGhpcy5zZXNzaW9uKSB7XG4gICAgICB0aGlzLl91cGRhdGVVc2VyQWN0aXZpdHkoYWN0aXZpdHlUaW1lKTtcbiAgICAgIHRoaXMuX3VwZGF0ZVNlc3Npb25BY3Rpdml0eShhY3Rpdml0eVRpbWUpO1xuICAgICAgdGhpcy5fbWF5YmVTYXZlU2Vzc2lvbigpO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRSZWNvcmRpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXZSB3YW50IHRvIGJhdGNoIHVwbG9hZHMgb2YgcmVwbGF5IGV2ZW50cy4gU2F2ZSBldmVudHMgb25seSBpZlxuICAgKiBgPGZsdXNoTWluRGVsYXk+YCBtaWxsaXNlY29uZHMgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0IGV2ZW50XG4gICAqICpPUiogaWYgYDxmbHVzaE1heERlbGF5PmAgbWlsbGlzZWNvbmRzIGhhdmUgZWxhcHNlZC5cbiAgICpcbiAgICogQWNjZXB0cyBhIGNhbGxiYWNrIHRvIHBlcmZvcm0gc2lkZS1lZmZlY3RzIGFuZCByZXR1cm5zIHRydWUgdG8gc3RvcCBiYXRjaFxuICAgKiBwcm9jZXNzaW5nIGFuZCBoYW5kIGJhY2sgY29udHJvbCB0byBjYWxsZXIuXG4gICAqL1xuICAgYWRkVXBkYXRlKGNiKSB7XG4gICAgLy8gV2UgbmVlZCB0byBhbHdheXMgcnVuIGBjYmAgKGUuZy4gaW4gdGhlIGNhc2Ugb2YgYHRoaXMucmVjb3JkaW5nTW9kZSA9PSAnYnVmZmVyJ2ApXG4gICAgY29uc3QgY2JSZXN1bHQgPSBjYigpO1xuXG4gICAgLy8gSWYgdGhpcyBvcHRpb24gaXMgdHVybmVkIG9uIHRoZW4gd2Ugd2lsbCBvbmx5IHdhbnQgdG8gY2FsbCBgZmx1c2hgXG4gICAgLy8gZXhwbGljaXRseVxuICAgIGlmICh0aGlzLnJlY29yZGluZ01vZGUgPT09ICdidWZmZXInIHx8ICF0aGlzLl9pc0VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBjYWxsYmFjayBpcyB0cnVlLCB3ZSBkbyBub3Qgd2FudCB0byBjb250aW51ZSB3aXRoIGZsdXNoaW5nIC0tIHRoZVxuICAgIC8vIGNhbGxlciB3aWxsIG5lZWQgdG8gaGFuZGxlIGl0LlxuICAgIGlmIChjYlJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGFkZFVwZGF0ZSBpcyBjYWxsZWQgcXVpdGUgZnJlcXVlbnRseSAtIHVzZSBfZGVib3VuY2VkRmx1c2ggc28gdGhhdCBpdFxuICAgIC8vIHJlc3BlY3RzIHRoZSBmbHVzaCBkZWxheXMgYW5kIGRvZXMgbm90IGZsdXNoIGltbWVkaWF0ZWx5XG4gICAgdGhpcy5fZGVib3VuY2VkRmx1c2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB1c2VyIGFjdGl2aXR5IHRpbWVzdGFtcCBhbmQgcmVzdW1lcyByZWNvcmRpbmcuIFRoaXMgc2hvdWxkIGJlXG4gICAqIGNhbGxlZCBpbiBhbiBldmVudCBoYW5kbGVyIGZvciBhIHVzZXIgYWN0aW9uIHRoYXQgd2UgY29uc2lkZXIgYXMgdGhlIHVzZXJcbiAgICogYmVpbmcgXCJhY3RpdmVcIiAoZS5nLiBhIG1vdXNlIGNsaWNrKS5cbiAgICovXG4gICB0cmlnZ2VyVXNlckFjdGl2aXR5KCkge1xuICAgIHRoaXMuX3VwZGF0ZVVzZXJBY3Rpdml0eSgpO1xuXG4gICAgLy8gVGhpcyBjYXNlIG1lYW5zIHRoYXQgcmVjb3JkaW5nIHdhcyBvbmNlIHN0b3BwZWQgZHVlIHRvIGluYWN0aXZpdHkuXG4gICAgLy8gRW5zdXJlIHRoYXQgcmVjb3JkaW5nIGlzIHJlc3VtZWQuXG4gICAgaWYgKCF0aGlzLl9zdG9wUmVjb3JkaW5nKSB7XG4gICAgICAvLyBDcmVhdGUgYSBuZXcgc2Vzc2lvbiwgb3RoZXJ3aXNlIHdoZW4gdGhlIHVzZXIgYWN0aW9uIGlzIGZsdXNoZWQsIGl0XG4gICAgICAvLyB3aWxsIGdldCByZWplY3RlZCBkdWUgdG8gYW4gZXhwaXJlZCBzZXNzaW9uLlxuICAgICAgaWYgKCF0aGlzLl9jaGVja1Nlc3Npb24oKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdGU6IFRoaXMgd2lsbCBjYXVzZSBhIG5ldyBET00gY2hlY2tvdXRcbiAgICAgIHRoaXMucmVzdW1lKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlLi4uIHJlY29yZGluZyB3YXMgbmV2ZXIgc3VzcGVuZGVkLCBjb250aW51ZSBhcyBub3JtYWxpc2hcbiAgICB0aGlzLmNoZWNrQW5kSGFuZGxlRXhwaXJlZFNlc3Npb24oKTtcblxuICAgIHRoaXMuX3VwZGF0ZVNlc3Npb25BY3Rpdml0eSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgYWN0aXZpdHkgdGltZXN0YW1wICp3aXRob3V0KiByZXN1bWluZ1xuICAgKiByZWNvcmRpbmcuIFNvbWUgdXNlciBldmVudHMgKGUuZy4ga2V5ZG93bikgY2FuIGJlIGNyZWF0ZVxuICAgKiBsb3ctdmFsdWUgcmVwbGF5cyB0aGF0IG9ubHkgY29udGFpbiB0aGUga2V5cHJlc3MgYXMgYVxuICAgKiBicmVhZGNydW1iLiBJbnN0ZWFkIHRoaXMgd291bGQgcmVxdWlyZSBvdGhlciBldmVudHMgdG9cbiAgICogY3JlYXRlIGEgbmV3IHJlcGxheSBhZnRlciBhIHNlc3Npb24gaGFzIGV4cGlyZWQuXG4gICAqL1xuICAgdXBkYXRlVXNlckFjdGl2aXR5KCkge1xuICAgIHRoaXMuX3VwZGF0ZVVzZXJBY3Rpdml0eSgpO1xuICAgIHRoaXMuX3VwZGF0ZVNlc3Npb25BY3Rpdml0eSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ubHkgZmx1c2ggaWYgYHRoaXMucmVjb3JkaW5nTW9kZSA9PT0gJ3Nlc3Npb24nYFxuICAgKi9cbiAgIGNvbmRpdGlvbmFsRmx1c2goKSB7XG4gICAgaWYgKHRoaXMucmVjb3JkaW5nTW9kZSA9PT0gJ2J1ZmZlcicpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mbHVzaEltbWVkaWF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsdXNoIHVzaW5nIGRlYm91bmNlIGZsdXNoXG4gICAqL1xuICAgZmx1c2goKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlYm91bmNlZEZsdXNoKCkgO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsd2F5cyBmbHVzaCB2aWEgYF9kZWJvdW5jZWRGbHVzaGAgc28gdGhhdCB3ZSBkbyBub3QgaGF2ZSBmbHVzaGVzIHRyaWdnZXJlZFxuICAgKiBmcm9tIGNhbGxpbmcgYm90aCBgZmx1c2hgIGFuZCBgX2RlYm91bmNlZEZsdXNoYC4gT3RoZXJ3aXNlLCB0aGVyZSBjb3VsZCBiZVxuICAgKiBjYXNlcyBvZiBtdWx0aXBsZSBmbHVzaGVzIGhhcHBlbmluZyBjbG9zZWx5IHRvZ2V0aGVyLlxuICAgKi9cbiAgIGZsdXNoSW1tZWRpYXRlKCkge1xuICAgIHRoaXMuX2RlYm91bmNlZEZsdXNoKCk7XG4gICAgLy8gYC5mbHVzaGAgaXMgcHJvdmlkZWQgYnkgdGhlIGRlYm91bmNlZCBmdW5jdGlvbiwgYW5hbG9nb3VzbHkgdG8gbG9kYXNoLmRlYm91bmNlXG4gICAgcmV0dXJuIHRoaXMuX2RlYm91bmNlZEZsdXNoLmZsdXNoKCkgO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgcXVldWVkIHVwIGZsdXNoZXMuXG4gICAqL1xuICAgY2FuY2VsRmx1c2goKSB7XG4gICAgdGhpcy5fZGVib3VuY2VkRmx1c2guY2FuY2VsKCk7XG4gIH1cblxuICAvKiogR2V0IHRoZSBjdXJyZW50IHNlc3Npb24gKD1yZXBsYXkpIElEICovXG4gICBnZXRTZXNzaW9uSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbj8uaWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHJlY29yZGluZyBzaG91bGQgYmUgc3RvcHBlZCBkdWUgdG8gdXNlciBpbmFjdGl2aXR5LiBPdGhlcndpc2VcbiAgICogY2hlY2sgaWYgc2Vzc2lvbiBpcyBleHBpcmVkIGFuZCBjcmVhdGUgYSBuZXcgc2Vzc2lvbiBpZiBzby4gVHJpZ2dlcnMgYSBuZXdcbiAgICogZnVsbCBzbmFwc2hvdCBvbiBuZXcgc2Vzc2lvbi5cbiAgICpcbiAgICogUmV0dXJucyB0cnVlIGlmIHNlc3Npb24gaXMgbm90IGV4cGlyZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQGhpZGRlblxuICAgKi9cbiAgIGNoZWNrQW5kSGFuZGxlRXhwaXJlZFNlc3Npb24oKSB7XG4gICAgLy8gUHJldmVudCBzdGFydGluZyBhIG5ldyBzZXNzaW9uIGlmIHRoZSBsYXN0IHVzZXIgYWN0aXZpdHkgaXMgb2xkZXIgdGhhblxuICAgIC8vIFNFU1NJT05fSURMRV9QQVVTRV9EVVJBVElPTi4gT3RoZXJ3aXNlIG5vbi11c2VyIGFjdGl2aXR5IGNhbiB0cmlnZ2VyIGEgbmV3XG4gICAgLy8gc2Vzc2lvbityZWNvcmRpbmcuIFRoaXMgY3JlYXRlcyBub2lzeSByZXBsYXlzIHRoYXQgZG8gbm90IGhhdmUgbXVjaFxuICAgIC8vIGNvbnRlbnQgaW4gdGhlbS5cbiAgICBpZiAoXG4gICAgICB0aGlzLl9sYXN0QWN0aXZpdHkgJiZcbiAgICAgIGlzRXhwaXJlZCh0aGlzLl9sYXN0QWN0aXZpdHksIHRoaXMudGltZW91dHMuc2Vzc2lvbklkbGVQYXVzZSkgJiZcbiAgICAgIHRoaXMuc2Vzc2lvbiAmJlxuICAgICAgdGhpcy5zZXNzaW9uLnNhbXBsZWQgPT09ICdzZXNzaW9uJ1xuICAgICkge1xuICAgICAgLy8gUGF1c2UgcmVjb3JkaW5nIG9ubHkgZm9yIHNlc3Npb24tYmFzZWQgcmVwbGF5cy4gT3RoZXJ3aXNlLCByZXN1bWluZ1xuICAgICAgLy8gd2lsbCBjcmVhdGUgYSBuZXcgcmVwbGF5IGFuZCB3aWxsIGNvbmZsaWN0IHdpdGggdXNlcnMgd2hvIG9ubHkgY2hvb3NlXG4gICAgICAvLyB0byByZWNvcmQgZXJyb3ItYmFzZWQgcmVwbGF5cyBvbmx5LiAoZS5nLiB0aGUgcmVzdW1lZCByZXBsYXkgd2lsbCBub3RcbiAgICAgIC8vIGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gYW4gZXJyb3IpXG4gICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gLS0tIFRoZXJlIGlzIHJlY2VudCB1c2VyIGFjdGl2aXR5IC0tLSAvL1xuICAgIC8vIFRoaXMgd2lsbCBjcmVhdGUgYSBuZXcgc2Vzc2lvbiBpZiBleHBpcmVkLCBiYXNlZCBvbiBleHBpcnkgbGVuZ3RoXG4gICAgaWYgKCF0aGlzLl9jaGVja1Nlc3Npb24oKSkge1xuICAgICAgLy8gQ2hlY2sgc2Vzc2lvbiBoYW5kbGVzIHRoZSByZWZyZXNoaW5nIGl0c2VsZlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmUgc29tZSBpbml0aWFsIHN0YXRlIHRoYXQgY2FuIGNoYW5nZSB0aHJvdWdob3V0IHRoZSBsaWZlc3BhbiBvZiB0aGVcbiAgICogcmVwbGF5LiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZXkgd291bGQgYmUgY2FwdHVyZWQgYXQgdGhlXG4gICAqIGZpcnN0IGZsdXNoLlxuICAgKi9cbiAgIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICBjb25zdCB1cmxQYXRoID0gYCR7V0lORE9XLmxvY2F0aW9uLnBhdGhuYW1lfSR7V0lORE9XLmxvY2F0aW9uLmhhc2h9JHtXSU5ET1cubG9jYXRpb24uc2VhcmNofWA7XG4gICAgY29uc3QgdXJsID0gYCR7V0lORE9XLmxvY2F0aW9uLm9yaWdpbn0ke3VybFBhdGh9YDtcblxuICAgIHRoaXMucGVyZm9ybWFuY2VFbnRyaWVzID0gW107XG4gICAgdGhpcy5yZXBsYXlQZXJmb3JtYW5jZUVudHJpZXMgPSBbXTtcblxuICAgIC8vIFJlc2V0IF9jb250ZXh0IGFzIHdlbGxcbiAgICB0aGlzLl9jbGVhckNvbnRleHQoKTtcblxuICAgIHRoaXMuX2NvbnRleHQuaW5pdGlhbFVybCA9IHVybDtcbiAgICB0aGlzLl9jb250ZXh0LmluaXRpYWxUaW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX2NvbnRleHQudXJscy5wdXNoKHVybCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgYnJlYWRjcnVtYiBldmVudCwgdGhhdCBtYXkgYmUgdGhyb3R0bGVkLlxuICAgKiBJZiBpdCB3YXMgdGhyb3R0bGVkLCB3ZSBhZGQgYSBjdXN0b20gYnJlYWRjcnVtYiB0byBpbmRpY2F0ZSB0aGF0LlxuICAgKi9cbiAgIHRocm90dGxlZEFkZEV2ZW50KFxuICAgIGV2ZW50LFxuICAgIGlzQ2hlY2tvdXQsXG4gICkge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMuX3Rocm90dGxlZEFkZEV2ZW50KGV2ZW50LCBpc0NoZWNrb3V0KTtcblxuICAgIC8vIElmIHRoaXMgaXMgVEhST1RUTEVELCBpdCBtZWFucyB3ZSBoYXZlIHRocm90dGxlZCB0aGUgZXZlbnQgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSB3YW50IHRvIGFkZCBhIGJyZWFkY3J1bWIgaW5kaWNhdGluZyB0aGF0IHNvbWV0aGluZyB3YXMgc2tpcHBlZFxuICAgIGlmIChyZXMgPT09IFRIUk9UVExFRCkge1xuICAgICAgY29uc3QgYnJlYWRjcnVtYiA9IGNyZWF0ZUJyZWFkY3J1bWIoe1xuICAgICAgICBjYXRlZ29yeTogJ3JlcGxheS50aHJvdHRsZWQnLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYWRkVXBkYXRlKCgpID0+IHtcbiAgICAgICAgLy8gUmV0dXJuIGBmYWxzZWAgaWYgdGhlIGV2ZW50IF93YXNfIGFkZGVkLCBhcyB0aGF0IG1lYW5zIHdlIHNjaGVkdWxlIGEgZmx1c2hcbiAgICAgICAgcmV0dXJuICFhZGRFdmVudFN5bmModGhpcywge1xuICAgICAgICAgIHR5cGU6IFJlcGxheUV2ZW50VHlwZUN1c3RvbSxcbiAgICAgICAgICB0aW1lc3RhbXA6IGJyZWFkY3J1bWIudGltZXN0YW1wIHx8IDAsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdGFnOiAnYnJlYWRjcnVtYicsXG4gICAgICAgICAgICBwYXlsb2FkOiBicmVhZGNydW1iLFxuICAgICAgICAgICAgbWV0cmljOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgZ2V0IHRoZSBwYXJhbWV0cml6ZWQgcm91dGUgbmFtZSBvZiB0aGUgY3VycmVudCBwYWdlLlxuICAgKiBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGlmIHBlcmZvcm1hbmNlIGlzIGVuYWJsZWQsIGFuZCBpZiBhbiBpbnN0cnVtZW50ZWQgcm91dGVyIGlzIHVzZWQuXG4gICAqL1xuICAgZ2V0Q3VycmVudFJvdXRlKCkge1xuICAgIGNvbnN0IGxhc3RBY3RpdmVTcGFuID0gdGhpcy5sYXN0QWN0aXZlU3BhbiB8fCBnZXRBY3RpdmVTcGFuKCk7XG4gICAgY29uc3QgbGFzdFJvb3RTcGFuID0gbGFzdEFjdGl2ZVNwYW4gJiYgZ2V0Um9vdFNwYW4obGFzdEFjdGl2ZVNwYW4pO1xuXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IChsYXN0Um9vdFNwYW4gJiYgc3BhblRvSlNPTihsYXN0Um9vdFNwYW4pLmRhdGEpIHx8IHt9O1xuICAgIGNvbnN0IHNvdXJjZSA9IGF0dHJpYnV0ZXNbU0VNQU5USUNfQVRUUklCVVRFX1NFTlRSWV9TT1VSQ0VdO1xuICAgIGlmICghbGFzdFJvb3RTcGFuIHx8ICFzb3VyY2UgfHwgIVsncm91dGUnLCAnY3VzdG9tJ10uaW5jbHVkZXMoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gc3BhblRvSlNPTihsYXN0Um9vdFNwYW4pLmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYW5kIHN0YXJ0IGFsbCBsaXN0ZW5lcnMgdG8gdmFyeWluZyBldmVudHMgKERPTSxcbiAgICogUGVyZm9ybWFuY2UgT2JzZXJ2ZXIsIFJlY29yZGluZywgU2VudHJ5IFNESywgZXRjKVxuICAgKi9cbiAgIF9pbml0aWFsaXplUmVjb3JkaW5nKCkge1xuICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XG5cbiAgICAvLyB0aGlzIG1ldGhvZCBpcyBnZW5lcmFsbHkgY2FsbGVkIG9uIHBhZ2UgbG9hZCBvciBtYW51YWxseSAtIGluIGJvdGggY2FzZXNcbiAgICAvLyB3ZSBzaG91bGQgdHJlYXQgaXQgYXMgYW4gYWN0aXZpdHlcbiAgICB0aGlzLl91cGRhdGVTZXNzaW9uQWN0aXZpdHkoKTtcblxuICAgIHRoaXMuZXZlbnRCdWZmZXIgPSBjcmVhdGVFdmVudEJ1ZmZlcih7XG4gICAgICB1c2VDb21wcmVzc2lvbjogdGhpcy5fb3B0aW9ucy51c2VDb21wcmVzc2lvbixcbiAgICAgIHdvcmtlclVybDogdGhpcy5fb3B0aW9ucy53b3JrZXJVcmwsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLl9hZGRMaXN0ZW5lcnMoKTtcblxuICAgIC8vIE5lZWQgdG8gc2V0IGFzIGVuYWJsZWQgYmVmb3JlIHdlIHN0YXJ0IHJlY29yZGluZywgYXMgYHJlY29yZCgpYCBjYW4gdHJpZ2dlciBhIGZsdXNoIHdpdGggYSBuZXcgY2hlY2tvdXRcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuX2lzUGF1c2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLnN0YXJ0UmVjb3JkaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgKG9yIHJlZnJlc2hlcykgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cbiAgICovXG4gICBfaW5pdGlhbGl6ZVNlc3Npb25Gb3JTYW1wbGluZyhwcmV2aW91c1Nlc3Npb25JZCkge1xuICAgIC8vIFdoZW5ldmVyIHRoZXJlIGlzIF9hbnlfIGVycm9yIHNhbXBsZSByYXRlLCB3ZSBhbHdheXMgYWxsb3cgYnVmZmVyaW5nXG4gICAgLy8gQmVjYXVzZSB3ZSBkZWNpZGUgb24gc2FtcGxpbmcgd2hlbiBhbiBlcnJvciBvY2N1cnMsIHdlIG5lZWQgdG8gYnVmZmVyIGF0IGFsbCB0aW1lcyBpZiBzYW1wbGluZyBmb3IgZXJyb3JzXG4gICAgY29uc3QgYWxsb3dCdWZmZXJpbmcgPSB0aGlzLl9vcHRpb25zLmVycm9yU2FtcGxlUmF0ZSA+IDA7XG5cbiAgICBjb25zdCBzZXNzaW9uID0gbG9hZE9yQ3JlYXRlU2Vzc2lvbihcbiAgICAgIHtcbiAgICAgICAgc2Vzc2lvbklkbGVFeHBpcmU6IHRoaXMudGltZW91dHMuc2Vzc2lvbklkbGVFeHBpcmUsXG4gICAgICAgIG1heFJlcGxheUR1cmF0aW9uOiB0aGlzLl9vcHRpb25zLm1heFJlcGxheUR1cmF0aW9uLFxuICAgICAgICBwcmV2aW91c1Nlc3Npb25JZCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHN0aWNreVNlc3Npb246IHRoaXMuX29wdGlvbnMuc3RpY2t5U2Vzc2lvbixcbiAgICAgICAgc2Vzc2lvblNhbXBsZVJhdGU6IHRoaXMuX29wdGlvbnMuc2Vzc2lvblNhbXBsZVJhdGUsXG4gICAgICAgIGFsbG93QnVmZmVyaW5nLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgYW5kIHBvdGVudGlhbGx5IHJlZnJlc2hlcyB0aGUgY3VycmVudCBzZXNzaW9uLlxuICAgKiBSZXR1cm5zIGZhbHNlIGlmIHNlc3Npb24gaXMgbm90IHJlY29yZGVkLlxuICAgKi9cbiAgIF9jaGVja1Nlc3Npb24oKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gc2Vzc2lvbiB5ZXQsIHdlIGRvIG5vdCB3YW50IHRvIHJlZnJlc2ggYW55dGhpbmdcbiAgICAvLyBUaGlzIHNob3VsZCBnZW5lcmFsbHkgbm90IGhhcHBlbiwgYnV0IHRvIGJlIHNhZmUuLi4uXG4gICAgaWYgKCF0aGlzLnNlc3Npb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50U2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjtcblxuICAgIGlmIChcbiAgICAgIHNob3VsZFJlZnJlc2hTZXNzaW9uKGN1cnJlbnRTZXNzaW9uLCB7XG4gICAgICAgIHNlc3Npb25JZGxlRXhwaXJlOiB0aGlzLnRpbWVvdXRzLnNlc3Npb25JZGxlRXhwaXJlLFxuICAgICAgICBtYXhSZXBsYXlEdXJhdGlvbjogdGhpcy5fb3B0aW9ucy5tYXhSZXBsYXlEdXJhdGlvbixcbiAgICAgIH0pXG4gICAgKSB7XG4gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciByZWplY3RcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICAgIHRoaXMuX3JlZnJlc2hTZXNzaW9uKGN1cnJlbnRTZXNzaW9uKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIGEgc2Vzc2lvbiB3aXRoIGEgbmV3IG9uZS5cbiAgICogVGhpcyBzdG9wcyB0aGUgY3VycmVudCBzZXNzaW9uICh3aXRob3V0IGZvcmNpbmcgYSBmbHVzaCwgYXMgdGhhdCB3b3VsZCBuZXZlciB3b3JrIHNpbmNlIHdlIGFyZSBleHBpcmVkKSxcbiAgICogYW5kIHRoZW4gZG9lcyBhIG5ldyBzYW1wbGluZyBiYXNlZCBvbiB0aGUgcmVmcmVzaGVkIHNlc3Npb24uXG4gICAqL1xuICAgYXN5bmMgX3JlZnJlc2hTZXNzaW9uKHNlc3Npb24pIHtcbiAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnN0b3AoeyByZWFzb246ICdyZWZyZXNoIHNlc3Npb24nIH0pO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVNhbXBsaW5nKHNlc3Npb24uaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgbGlzdGVuZXJzIHRvIHJlY29yZCBldmVudHMgZm9yIHRoZSByZXBsYXlcbiAgICovXG4gICBfYWRkTGlzdGVuZXJzKCkge1xuICAgIHRyeSB7XG4gICAgICBXSU5ET1cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIHRoaXMuX2hhbmRsZVZpc2liaWxpdHlDaGFuZ2UpO1xuICAgICAgV0lORE9XLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLl9oYW5kbGVXaW5kb3dCbHVyKTtcbiAgICAgIFdJTkRPVy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuX2hhbmRsZVdpbmRvd0ZvY3VzKTtcbiAgICAgIFdJTkRPVy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5faGFuZGxlS2V5Ym9hcmRFdmVudCk7XG5cbiAgICAgIGlmICh0aGlzLmNsaWNrRGV0ZWN0b3IpIHtcbiAgICAgICAgdGhpcy5jbGlja0RldGVjdG9yLmFkZExpc3RlbmVycygpO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGVyZSBpcyBubyB3YXkgdG8gcmVtb3ZlIHRoZXNlIGxpc3RlbmVycywgc28gZW5zdXJlIHRoZXkgYXJlIG9ubHkgYWRkZWQgb25jZVxuICAgICAgaWYgKCF0aGlzLl9oYXNJbml0aWFsaXplZENvcmVMaXN0ZW5lcnMpIHtcbiAgICAgICAgYWRkR2xvYmFsTGlzdGVuZXJzKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuX2hhc0luaXRpYWxpemVkQ29yZUxpc3RlbmVycyA9IHRydWU7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmhhbmRsZUV4Y2VwdGlvbihlcnIpO1xuICAgIH1cblxuICAgIHRoaXMuX3BlcmZvcm1hbmNlQ2xlYW51cENhbGxiYWNrID0gc2V0dXBQZXJmb3JtYW5jZU9ic2VydmVyKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFucyB1cCBsaXN0ZW5lcnMgdGhhdCB3ZXJlIGNyZWF0ZWQgaW4gYF9hZGRMaXN0ZW5lcnNgXG4gICAqL1xuICAgX3JlbW92ZUxpc3RlbmVycygpIHtcbiAgICB0cnkge1xuICAgICAgV0lORE9XLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCB0aGlzLl9oYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKTtcblxuICAgICAgV0lORE9XLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLl9oYW5kbGVXaW5kb3dCbHVyKTtcbiAgICAgIFdJTkRPVy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMuX2hhbmRsZVdpbmRvd0ZvY3VzKTtcbiAgICAgIFdJTkRPVy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5faGFuZGxlS2V5Ym9hcmRFdmVudCk7XG5cbiAgICAgIGlmICh0aGlzLmNsaWNrRGV0ZWN0b3IpIHtcbiAgICAgICAgdGhpcy5jbGlja0RldGVjdG9yLnJlbW92ZUxpc3RlbmVycygpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fcGVyZm9ybWFuY2VDbGVhbnVwQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fcGVyZm9ybWFuY2VDbGVhbnVwQ2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuaGFuZGxlRXhjZXB0aW9uKGVycik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRhc2tzIHRvIHJ1biB3aGVuIHdlIGNvbnNpZGVyIGEgcGFnZSB0byBiZSBoaWRkZW4gKHZpYSBibHVycmluZyBhbmQvb3IgdmlzaWJpbGl0eSlcbiAgICovXG4gICBfZG9DaGFuZ2VUb0JhY2tncm91bmRUYXNrcyhicmVhZGNydW1iKSB7XG4gICAgaWYgKCF0aGlzLnNlc3Npb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBleHBpcmVkID0gaXNTZXNzaW9uRXhwaXJlZCh0aGlzLnNlc3Npb24sIHtcbiAgICAgIG1heFJlcGxheUR1cmF0aW9uOiB0aGlzLl9vcHRpb25zLm1heFJlcGxheUR1cmF0aW9uLFxuICAgICAgc2Vzc2lvbklkbGVFeHBpcmU6IHRoaXMudGltZW91dHMuc2Vzc2lvbklkbGVFeHBpcmUsXG4gICAgfSk7XG5cbiAgICBpZiAoZXhwaXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChicmVhZGNydW1iKSB7XG4gICAgICB0aGlzLl9jcmVhdGVDdXN0b21CcmVhZGNydW1iKGJyZWFkY3J1bWIpO1xuICAgIH1cblxuICAgIC8vIFNlbmQgcmVwbGF5IHdoZW4gdGhlIHBhZ2UvdGFiIGJlY29tZXMgaGlkZGVuLiBUaGVyZSBpcyBubyByZWFzb24gdG8gc2VuZFxuICAgIC8vIHJlcGxheSBpZiBpdCBiZWNvbWVzIHZpc2libGUsIHNpbmNlIG5vIGFjdGlvbnMgd2UgY2FyZSBhYm91dCB3ZXJlIGRvbmVcbiAgICAvLyB3aGlsZSBpdCB3YXMgaGlkZGVuXG4gICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgcmVqZWN0XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgIHZvaWQgdGhpcy5jb25kaXRpb25hbEZsdXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogVGFza3MgdG8gcnVuIHdoZW4gd2UgY29uc2lkZXIgYSBwYWdlIHRvIGJlIHZpc2libGUgKHZpYSBmb2N1cyBhbmQvb3IgdmlzaWJpbGl0eSlcbiAgICovXG4gICBfZG9DaGFuZ2VUb0ZvcmVncm91bmRUYXNrcyhicmVhZGNydW1iKSB7XG4gICAgaWYgKCF0aGlzLnNlc3Npb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc1Nlc3Npb25BY3RpdmUgPSB0aGlzLmNoZWNrQW5kSGFuZGxlRXhwaXJlZFNlc3Npb24oKTtcblxuICAgIGlmICghaXNTZXNzaW9uQWN0aXZlKSB7XG4gICAgICAvLyBJZiB0aGUgdXNlciBoYXMgY29tZSBiYWNrIHRvIHRoZSBwYWdlIHdpdGhpbiBTRVNTSU9OX0lETEVfUEFVU0VfRFVSQVRJT05cbiAgICAgIC8vIG1zLCB3ZSB3aWxsIHJlLXVzZSB0aGUgZXhpc3Rpbmcgc2Vzc2lvbiwgb3RoZXJ3aXNlIGNyZWF0ZSBhIG5ld1xuICAgICAgLy8gc2Vzc2lvblxuICAgICAgREVCVUdfQlVJTEQgJiYgZGVidWcubG9nKCdEb2N1bWVudCBoYXMgYmVjb21lIGFjdGl2ZSwgYnV0IHNlc3Npb24gaGFzIGV4cGlyZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYnJlYWRjcnVtYikge1xuICAgICAgdGhpcy5fY3JlYXRlQ3VzdG9tQnJlYWRjcnVtYihicmVhZGNydW1iKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHVzZXIgYWN0aXZpdHkgKGFjcm9zcyBzZXNzaW9uIGxpZmVzcGFucylcbiAgICovXG4gICBfdXBkYXRlVXNlckFjdGl2aXR5KF9sYXN0QWN0aXZpdHkgPSBEYXRlLm5vdygpKSB7XG4gICAgdGhpcy5fbGFzdEFjdGl2aXR5ID0gX2xhc3RBY3Rpdml0eTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBzZXNzaW9uJ3MgbGFzdCBhY3Rpdml0eSB0aW1lc3RhbXBcbiAgICovXG4gICBfdXBkYXRlU2Vzc2lvbkFjdGl2aXR5KF9sYXN0QWN0aXZpdHkgPSBEYXRlLm5vdygpKSB7XG4gICAgaWYgKHRoaXMuc2Vzc2lvbikge1xuICAgICAgdGhpcy5zZXNzaW9uLmxhc3RBY3Rpdml0eSA9IF9sYXN0QWN0aXZpdHk7XG4gICAgICB0aGlzLl9tYXliZVNhdmVTZXNzaW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciB0byBjcmVhdGUgKGFuZCBidWZmZXIpIGEgcmVwbGF5IGJyZWFkY3J1bWIgZnJvbSBhIGNvcmUgU0RLIGJyZWFkY3J1bWJcbiAgICovXG4gICBfY3JlYXRlQ3VzdG9tQnJlYWRjcnVtYihicmVhZGNydW1iKSB7XG4gICAgdGhpcy5hZGRVcGRhdGUoKCkgPT4ge1xuICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgcmVqZWN0XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICB0aGlzLnRocm90dGxlZEFkZEV2ZW50KHtcbiAgICAgICAgdHlwZTogRXZlbnRUeXBlLkN1c3RvbSxcbiAgICAgICAgdGltZXN0YW1wOiBicmVhZGNydW1iLnRpbWVzdGFtcCB8fCAwLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdGFnOiAnYnJlYWRjcnVtYicsXG4gICAgICAgICAgcGF5bG9hZDogYnJlYWRjcnVtYixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ic2VydmVkIHBlcmZvcm1hbmNlIGV2ZW50cyBhcmUgYWRkZWQgdG8gYHRoaXMucGVyZm9ybWFuY2VFbnRyaWVzYC4gVGhlc2VcbiAgICogYXJlIGluY2x1ZGVkIGluIHRoZSByZXBsYXkgZXZlbnQgYmVmb3JlIGl0IGlzIGZpbmlzaGVkIGFuZCBzZW50IHRvIFNlbnRyeS5cbiAgICovXG4gICBfYWRkUGVyZm9ybWFuY2VFbnRyaWVzKCkge1xuICAgIGxldCBwZXJmb3JtYW5jZUVudHJpZXMgPSBjcmVhdGVQZXJmb3JtYW5jZUVudHJpZXModGhpcy5wZXJmb3JtYW5jZUVudHJpZXMpLmNvbmNhdCh0aGlzLnJlcGxheVBlcmZvcm1hbmNlRW50cmllcyk7XG5cbiAgICB0aGlzLnBlcmZvcm1hbmNlRW50cmllcyA9IFtdO1xuICAgIHRoaXMucmVwbGF5UGVyZm9ybWFuY2VFbnRyaWVzID0gW107XG5cbiAgICAvLyBJZiB3ZSBhcmUgbWFudWFsbHkgc3RhcnRpbmcsIHdlIHdhbnQgdG8gZW5zdXJlIHdlIG9ubHkgaW5jbHVkZSBwZXJmb3JtYW5jZSBlbnRyaWVzXG4gICAgLy8gdGhhdCBhcmUgYWZ0ZXIgdGhlIGluaXRpYWwgdGltZXN0YW1wXG4gICAgLy8gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHdlIG1heSBoYXZlIHBlcmZvcm1hbmNlIGVudHJpZXMgZnJvbSB0aGUgcGFnZSBsb2FkLCBidXQgbWF5IGRlY2lkZSB0byBzdGFydFxuICAgIC8vIHRoZSByZXBsYXkgbGF0ZXIgb24sIGluIHdoaWNoIGNhc2Ugd2UgZG8gbm90IHdhbnQgdG8gaW5jbHVkZSB0aGVzZSBlbnRyaWVzLlxuICAgIC8vIHdpdGhvdXQgdGhpcywgbWFudWFsbHkgc3RhcnRlZCByZXBsYXlzIGNhbiBoYXZlIGV2ZW50cyBsb25nIGJlZm9yZSB0aGUgYWN0dWFsIHJlcGxheSByZWNvcmRpbmcgc3RhcnRzLFxuICAgIC8vIHdoaWNoIG1lc3NlcyB3aXRoIHRoZSB0aW1lbGluZSBldGMuXG4gICAgaWYgKHRoaXMuX3JlcXVpcmVzTWFudWFsU3RhcnQpIHtcbiAgICAgIGNvbnN0IGluaXRpYWxUaW1lc3RhbXBJblNlY29uZHMgPSB0aGlzLl9jb250ZXh0LmluaXRpYWxUaW1lc3RhbXAgLyAxMDAwO1xuICAgICAgcGVyZm9ybWFuY2VFbnRyaWVzID0gcGVyZm9ybWFuY2VFbnRyaWVzLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5zdGFydCA+PSBpbml0aWFsVGltZXN0YW1wSW5TZWNvbmRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoY3JlYXRlUGVyZm9ybWFuY2VTcGFucyh0aGlzLCBwZXJmb3JtYW5jZUVudHJpZXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBfY29udGV4dFxuICAgKi9cbiAgIF9jbGVhckNvbnRleHQoKSB7XG4gICAgLy8gWFhYOiBgaW5pdGlhbFRpbWVzdGFtcGAgYW5kIGBpbml0aWFsVXJsYCBkbyBub3QgZ2V0IGNsZWFyZWRcbiAgICB0aGlzLl9jb250ZXh0LmVycm9ySWRzLmNsZWFyKCk7XG4gICAgdGhpcy5fY29udGV4dC50cmFjZUlkcy5jbGVhcigpO1xuICAgIHRoaXMuX2NvbnRleHQudXJscyA9IFtdO1xuICB9XG5cbiAgLyoqIFVwZGF0ZSB0aGUgaW5pdGlhbCB0aW1lc3RhbXAgYmFzZWQgb24gdGhlIGJ1ZmZlciBjb250ZW50LiAqL1xuICAgX3VwZGF0ZUluaXRpYWxUaW1lc3RhbXBGcm9tRXZlbnRCdWZmZXIoKSB7XG4gICAgY29uc3QgeyBzZXNzaW9uLCBldmVudEJ1ZmZlciB9ID0gdGhpcztcbiAgICAvLyBJZiByZXBsYXkgd2FzIHN0YXJ0ZWQgbWFudWFsbHkgKD1ubyBzYW1wbGUgcmF0ZSB3YXMgZ2l2ZW4pLFxuICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIGJhY2stcG9ydCB0aGUgaW5pdGlhbCB0aW1lc3RhbXBcbiAgICBpZiAoIXNlc3Npb24gfHwgIWV2ZW50QnVmZmVyIHx8IHRoaXMuX3JlcXVpcmVzTWFudWFsU3RhcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB3ZSBvbmx5IGV2ZXIgdXBkYXRlIHRoaXMgb24gdGhlIGluaXRpYWwgc2VnbWVudFxuICAgIGlmIChzZXNzaW9uLnNlZ21lbnRJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVhcmxpZXN0RXZlbnQgPSBldmVudEJ1ZmZlci5nZXRFYXJsaWVzdFRpbWVzdGFtcCgpO1xuICAgIGlmIChlYXJsaWVzdEV2ZW50ICYmIGVhcmxpZXN0RXZlbnQgPCB0aGlzLl9jb250ZXh0LmluaXRpYWxUaW1lc3RhbXApIHtcbiAgICAgIHRoaXMuX2NvbnRleHQuaW5pdGlhbFRpbWVzdGFtcCA9IGVhcmxpZXN0RXZlbnQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbmQgY2xlYXIgX2NvbnRleHRcbiAgICovXG4gICBfcG9wRXZlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IF9jb250ZXh0ID0ge1xuICAgICAgaW5pdGlhbFRpbWVzdGFtcDogdGhpcy5fY29udGV4dC5pbml0aWFsVGltZXN0YW1wLFxuICAgICAgaW5pdGlhbFVybDogdGhpcy5fY29udGV4dC5pbml0aWFsVXJsLFxuICAgICAgZXJyb3JJZHM6IEFycmF5LmZyb20odGhpcy5fY29udGV4dC5lcnJvcklkcyksXG4gICAgICB0cmFjZUlkczogQXJyYXkuZnJvbSh0aGlzLl9jb250ZXh0LnRyYWNlSWRzKSxcbiAgICAgIHVybHM6IHRoaXMuX2NvbnRleHQudXJscyxcbiAgICB9O1xuXG4gICAgdGhpcy5fY2xlYXJDb250ZXh0KCk7XG5cbiAgICByZXR1cm4gX2NvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogRmx1c2hlcyByZXBsYXkgZXZlbnQgYnVmZmVyIHRvIFNlbnRyeS5cbiAgICpcbiAgICogUGVyZm9ybWFuY2UgZXZlbnRzIGFyZSBvbmx5IGFkZGVkIHJpZ2h0IGJlZm9yZSBmbHVzaGluZyAtIHRoaXMgaXNcbiAgICogZHVlIHRvIHRoZSBidWZmZXJlZCBwZXJmb3JtYW5jZSBvYnNlcnZlciBldmVudHMuXG4gICAqXG4gICAqIFNob3VsZCBuZXZlciBiZSBjYWxsZWQgZGlyZWN0bHksIG9ubHkgYnkgYGZsdXNoYFxuICAgKi9cbiAgIGFzeW5jIF9ydW5GbHVzaCgpIHtcbiAgICBjb25zdCByZXBsYXlJZCA9IHRoaXMuZ2V0U2Vzc2lvbklkKCk7XG5cbiAgICBpZiAoIXRoaXMuc2Vzc2lvbiB8fCAhdGhpcy5ldmVudEJ1ZmZlciB8fCAhcmVwbGF5SWQpIHtcbiAgICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLmVycm9yKCdObyBzZXNzaW9uIG9yIGV2ZW50QnVmZmVyIGZvdW5kIHRvIGZsdXNoLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuX2FkZFBlcmZvcm1hbmNlRW50cmllcygpO1xuXG4gICAgLy8gQ2hlY2sgZXZlbnRCdWZmZXIgYWdhaW4sIGFzIGl0IGNvdWxkIGhhdmUgYmVlbiBzdG9wcGVkIGluIHRoZSBtZWFud2hpbGVcbiAgICBpZiAoIXRoaXMuZXZlbnRCdWZmZXI/Lmhhc0V2ZW50cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE9ubHkgYXR0YWNoIG1lbW9yeSBldmVudCBpZiBldmVudEJ1ZmZlciBpcyBub3QgZW1wdHlcbiAgICBhd2FpdCBhZGRNZW1vcnlFbnRyeSh0aGlzKTtcblxuICAgIC8vIENoZWNrIGV2ZW50QnVmZmVyIGFnYWluLCBhcyBpdCBjb3VsZCBoYXZlIGJlZW4gc3RvcHBlZCBpbiB0aGUgbWVhbndoaWxlXG4gICAgaWYgKCF0aGlzLmV2ZW50QnVmZmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhpcyBjaGFuZ2VkIGluIHRoZSBtZWFud2hpbGUsIGUuZy4gYmVjYXVzZSB0aGUgc2Vzc2lvbiB3YXMgcmVmcmVzaGVkIG9yIHNpbWlsYXIsIHdlIGFib3J0IGhlcmVcbiAgICBpZiAocmVwbGF5SWQgIT09IHRoaXMuZ2V0U2Vzc2lvbklkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVGhpcyB1c2VzIHRoZSBkYXRhIGZyb20gdGhlIGV2ZW50QnVmZmVyLCBzbyB3ZSBuZWVkIHRvIGNhbGwgdGhpcyBiZWZvcmUgYGZpbmlzaCgpXG4gICAgICB0aGlzLl91cGRhdGVJbml0aWFsVGltZXN0YW1wRnJvbUV2ZW50QnVmZmVyKCk7XG5cbiAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IERhdGUubm93KCk7XG5cbiAgICAgIC8vIENoZWNrIHRvdGFsIGR1cmF0aW9uIGFnYWluLCB0byBhdm9pZCBzZW5kaW5nIG91dGRhdGVkIHN0dWZmXG4gICAgICAvLyBXZSBsZWF2ZSAzMHMgd2lnZ2xlIHJvb20gdG8gYWNjb21tb2RhdGUgbGF0ZSBmbHVzaGluZyBldGMuXG4gICAgICAvLyBUaGlzIF9jb3VsZF8gaGFwcGVuIHdoZW4gdGhlIGJyb3dzZXIgaXMgc3VzcGVuZGVkIGR1cmluZyBmbHVzaGluZywgaW4gd2hpY2ggY2FzZSB3ZSBqdXN0IHdhbnQgdG8gc3RvcFxuICAgICAgaWYgKHRpbWVzdGFtcCAtIHRoaXMuX2NvbnRleHQuaW5pdGlhbFRpbWVzdGFtcCA+IHRoaXMuX29wdGlvbnMubWF4UmVwbGF5RHVyYXRpb24gKyAzMDAwMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nlc3Npb24gaXMgdG9vIGxvbmcsIG5vdCBzZW5kaW5nIHJlcGxheScpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBldmVudENvbnRleHQgPSB0aGlzLl9wb3BFdmVudENvbnRleHQoKTtcbiAgICAgIC8vIEFsd2F5cyBpbmNyZW1lbnQgc2VnbWVudElkIHJlZ2FyZGxlc3Mgb2Ygb3V0Y29tZSBvZiBzZW5kaW5nIHJlcGxheVxuICAgICAgY29uc3Qgc2VnbWVudElkID0gdGhpcy5zZXNzaW9uLnNlZ21lbnRJZCsrO1xuICAgICAgdGhpcy5fbWF5YmVTYXZlU2Vzc2lvbigpO1xuXG4gICAgICAvLyBOb3RlIHRoaXMgZW1wdGllcyB0aGUgZXZlbnQgYnVmZmVyIHJlZ2FyZGxlc3Mgb2Ygb3V0Y29tZSBvZiBzZW5kaW5nIHJlcGxheVxuICAgICAgY29uc3QgcmVjb3JkaW5nRGF0YSA9IGF3YWl0IHRoaXMuZXZlbnRCdWZmZXIuZmluaXNoKCk7XG5cbiAgICAgIGF3YWl0IHNlbmRSZXBsYXkoe1xuICAgICAgICByZXBsYXlJZCxcbiAgICAgICAgcmVjb3JkaW5nRGF0YSxcbiAgICAgICAgc2VnbWVudElkLFxuICAgICAgICBldmVudENvbnRleHQsXG4gICAgICAgIHNlc3Npb246IHRoaXMuc2Vzc2lvbixcbiAgICAgICAgdGltZXN0YW1wLFxuICAgICAgICBvbkVycm9yOiBlcnIgPT4gdGhpcy5oYW5kbGVFeGNlcHRpb24oZXJyKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5oYW5kbGVFeGNlcHRpb24oZXJyKTtcblxuICAgICAgLy8gVGhpcyBtZWFucyB3ZSByZXRyaWVkIDMgdGltZXMgYW5kIGFsbCBvZiB0aGVtIGZhaWxlZCxcbiAgICAgIC8vIG9yIHdlIHJhbiBpbnRvIGEgcHJvYmxlbSB3ZSBkb24ndCB3YW50IHRvIHJldHJ5LCBsaWtlIHJhdGUgbGltaXRpbmcuXG4gICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIHdhbnQgdG8gY29tcGxldGVseSBzdG9wIHRoZSByZXBsYXkgLSBvdGhlcndpc2UsIHdlIG1heSBnZXQgaW5jb25zaXN0ZW50IHNlZ21lbnRzXG4gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciByZWplY3RcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICAgIHRoaXMuc3RvcCh7IHJlYXNvbjogJ3NlbmRSZXBsYXknIH0pO1xuXG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcblxuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICBjb25zdCBkcm9wUmVhc29uID0gZXJyIGluc3RhbmNlb2YgUmF0ZUxpbWl0RXJyb3IgPyAncmF0ZWxpbWl0X2JhY2tvZmYnIDogJ3NlbmRfZXJyb3InO1xuICAgICAgICBjbGllbnQucmVjb3JkRHJvcHBlZEV2ZW50KGRyb3BSZWFzb24sICdyZXBsYXknKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggcmVjb3JkaW5nIGRhdGEgdG8gU2VudHJ5LiBDcmVhdGVzIGEgbG9jayBzbyB0aGF0IG9ubHkgYSBzaW5nbGUgZmx1c2hcbiAgICogY2FuIGJlIGFjdGl2ZSBhdCBhIHRpbWUuIERvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHkuXG4gICAqL1xuICAgYXN5bmMgX2ZsdXNoKHtcbiAgICBmb3JjZSA9IGZhbHNlLFxuICB9XG5cbiA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQgJiYgIWZvcmNlKSB7XG4gICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgZS5nLiB0aGUgcmVwbGF5IHdhcyBzdG9wcGVkIGJlY2F1c2Ugb2YgZXhjZWVkaW5nIHRoZSByZXRyeSBsaW1pdFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jaGVja0FuZEhhbmRsZUV4cGlyZWRTZXNzaW9uKCkpIHtcbiAgICAgIERFQlVHX0JVSUxEICYmIGRlYnVnLmVycm9yKCdBdHRlbXB0aW5nIHRvIGZpbmlzaCByZXBsYXkgZXZlbnQgYWZ0ZXIgc2Vzc2lvbiBleHBpcmVkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zZXNzaW9uKSB7XG4gICAgICAvLyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBhcyB3ZSB3b3VsZCBoYXZlIGJhaWxlZCBvdXQgYmVmb3JlXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLnNlc3Npb24uc3RhcnRlZDtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gbm93IC0gc3RhcnQ7XG5cbiAgICAvLyBBIGZsdXNoIGlzIGFib3V0IHRvIGhhcHBlbiwgY2FuY2VsIGFueSBxdWV1ZWQgZmx1c2hlc1xuICAgIHRoaXMuX2RlYm91bmNlZEZsdXNoLmNhbmNlbCgpO1xuXG4gICAgLy8gSWYgc2Vzc2lvbiBpcyB0b28gc2hvcnQsIG9yIHRvbyBsb25nIChhbGxvdyBzb21lIHdpZ2dsZSByb29tIG92ZXIgbWF4UmVwbGF5RHVyYXRpb24pLCBkbyBub3Qgc2VuZCBpdFxuICAgIC8vIFRoaXMgX3Nob3VsZF8gbm90IGhhcHBlbiwgYnV0IGl0IG1heSBoYXBwZW4gaWYgZmx1c2ggaXMgdHJpZ2dlcmVkIGR1ZSB0byBhIHBhZ2UgYWN0aXZpdHkgY2hhbmdlIG9yIHNpbWlsYXJcbiAgICBjb25zdCB0b29TaG9ydCA9IGR1cmF0aW9uIDwgdGhpcy5fb3B0aW9ucy5taW5SZXBsYXlEdXJhdGlvbjtcbiAgICBjb25zdCB0b29Mb25nID0gZHVyYXRpb24gPiB0aGlzLl9vcHRpb25zLm1heFJlcGxheUR1cmF0aW9uICsgNTAwMDtcbiAgICBpZiAodG9vU2hvcnQgfHwgdG9vTG9uZykge1xuICAgICAgREVCVUdfQlVJTEQgJiZcbiAgICAgICAgZGVidWcubG9nKFxuICAgICAgICAgIGBTZXNzaW9uIGR1cmF0aW9uICgke01hdGguZmxvb3IoZHVyYXRpb24gLyAxMDAwKX1zKSBpcyB0b28gJHtcbiAgICAgICAgICAgIHRvb1Nob3J0ID8gJ3Nob3J0JyA6ICdsb25nJ1xuICAgICAgICAgIH0sIG5vdCBzZW5kaW5nIHJlcGxheS5gLFxuICAgICAgICApO1xuXG4gICAgICBpZiAodG9vU2hvcnQpIHtcbiAgICAgICAgdGhpcy5fZGVib3VuY2VkRmx1c2goKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBldmVudEJ1ZmZlciA9IHRoaXMuZXZlbnRCdWZmZXI7XG4gICAgaWYgKGV2ZW50QnVmZmVyICYmIHRoaXMuc2Vzc2lvbi5zZWdtZW50SWQgPT09IDAgJiYgIWV2ZW50QnVmZmVyLmhhc0NoZWNrb3V0KSB7XG4gICAgICBERUJVR19CVUlMRCAmJiBkZWJ1Zy5sb2coJ0ZsdXNoaW5nIGluaXRpYWwgc2VnbWVudCB3aXRob3V0IGNoZWNrb3V0LicpO1xuICAgICAgLy8gVE9ETyBGTjogRXZhbHVhdGUgaWYgd2Ugd2FudCB0byBzdG9wIGhlcmUsIG9yIHJlbW92ZSB0aGlzIGFnYWluP1xuICAgIH1cblxuICAgIGNvbnN0IF9mbHVzaEluUHJvZ3Jlc3MgPSAhIXRoaXMuX2ZsdXNoTG9jaztcblxuICAgIC8vIHRoaXMuX2ZsdXNoTG9jayBhY3RzIGFzIGEgbG9jayBzbyB0aGF0IGZ1dHVyZSBjYWxscyB0byBgX2ZsdXNoKClgIHdpbGxcbiAgICAvLyBiZSBibG9ja2VkIHVudGlsIGN1cnJlbnQgZmx1c2ggaXMgZmluaXNoZWQgKGkuZS4gdGhpcyBwcm9taXNlIHJlc29sdmVzKVxuICAgIGlmICghdGhpcy5fZmx1c2hMb2NrKSB7XG4gICAgICB0aGlzLl9mbHVzaExvY2sgPSB0aGlzLl9ydW5GbHVzaCgpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9mbHVzaExvY2s7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmhhbmRsZUV4Y2VwdGlvbihlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9mbHVzaExvY2sgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChfZmx1c2hJblByb2dyZXNzKSB7XG4gICAgICAgIC8vIFdhaXQgZm9yIHByZXZpb3VzIGZsdXNoIHRvIGZpbmlzaCwgdGhlbiBjYWxsIHRoZSBkZWJvdW5jZWRcbiAgICAgICAgLy8gYF9mbHVzaCgpYC4gSXQncyBwb3NzaWJsZSB0aGVyZSBhcmUgb3RoZXIgZmx1c2ggcmVxdWVzdHMgcXVldWVkIGFuZFxuICAgICAgICAvLyB3YWl0aW5nIGZvciBpdCB0byByZXNvbHZlLiBXZSB3YW50IHRvIHJlZHVjZSBhbGwgb3V0c3RhbmRpbmdcbiAgICAgICAgLy8gcmVxdWVzdHMgKGFzIHdlbGwgYXMgYW55IG5ldyBmbHVzaCByZXF1ZXN0cyB0aGF0IG9jY3VyIHdpdGhpbiBhXG4gICAgICAgIC8vIHNlY29uZCBvZiB0aGUgbG9ja2VkIGZsdXNoIGNvbXBsZXRpbmcpIGludG8gYSBzaW5nbGUgZmx1c2guXG4gICAgICAgIHRoaXMuX2RlYm91bmNlZEZsdXNoKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIFNhdmUgdGhlIHNlc3Npb24sIGlmIGl0IGlzIHN0aWNreSAqL1xuICAgX21heWJlU2F2ZVNlc3Npb24oKSB7XG4gICAgaWYgKHRoaXMuc2Vzc2lvbiAmJiB0aGlzLl9vcHRpb25zLnN0aWNreVNlc3Npb24pIHtcbiAgICAgIHNhdmVTZXNzaW9uKHRoaXMuc2Vzc2lvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmRsZXIgZm9yIHJyd2ViLnJlY29yZC5vbk11dGF0aW9uICovXG4gICBfb25NdXRhdGlvbkhhbmRsZXIobXV0YXRpb25zKSB7XG4gICAgY29uc3QgeyBpZ25vcmVNdXRhdGlvbnMgfSA9IHRoaXMuX29wdGlvbnMuX2V4cGVyaW1lbnRzO1xuICAgIGlmIChpZ25vcmVNdXRhdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgaWYgKFxuICAgICAgICBtdXRhdGlvbnMuc29tZShtdXRhdGlvbiA9PiB7XG4gICAgICAgICAgY29uc3QgZWwgPSBjbG9zZXN0RWxlbWVudE9mTm9kZShtdXRhdGlvbi50YXJnZXQpO1xuICAgICAgICAgIGNvbnN0IHNlbGVjdG9yID0gaWdub3JlTXV0YXRpb25zLmpvaW4oJywnKTtcbiAgICAgICAgICByZXR1cm4gZWw/Lm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgICAgICB9KVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb3VudCA9IG11dGF0aW9ucy5sZW5ndGg7XG5cbiAgICBjb25zdCBtdXRhdGlvbkxpbWl0ID0gdGhpcy5fb3B0aW9ucy5tdXRhdGlvbkxpbWl0O1xuICAgIGNvbnN0IG11dGF0aW9uQnJlYWRjcnVtYkxpbWl0ID0gdGhpcy5fb3B0aW9ucy5tdXRhdGlvbkJyZWFkY3J1bWJMaW1pdDtcbiAgICBjb25zdCBvdmVyTXV0YXRpb25MaW1pdCA9IG11dGF0aW9uTGltaXQgJiYgY291bnQgPiBtdXRhdGlvbkxpbWl0O1xuXG4gICAgLy8gQ3JlYXRlIGEgYnJlYWRjcnVtYiBpZiBhIGxvdCBvZiBtdXRhdGlvbnMgaGFwcGVuIGF0IHRoZSBzYW1lIHRpbWVcbiAgICAvLyBXZSBjYW4gc2hvdyB0aGlzIGluIHRoZSBVSSBhcyBhbiBpbmZvcm1hdGlvbiB3aXRoIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHNcbiAgICBpZiAoY291bnQgPiBtdXRhdGlvbkJyZWFkY3J1bWJMaW1pdCB8fCBvdmVyTXV0YXRpb25MaW1pdCkge1xuICAgICAgY29uc3QgYnJlYWRjcnVtYiA9IGNyZWF0ZUJyZWFkY3J1bWIoe1xuICAgICAgICBjYXRlZ29yeTogJ3JlcGxheS5tdXRhdGlvbnMnLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgY291bnQsXG4gICAgICAgICAgbGltaXQ6IG92ZXJNdXRhdGlvbkxpbWl0LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICB0aGlzLl9jcmVhdGVDdXN0b21CcmVhZGNydW1iKGJyZWFkY3J1bWIpO1xuICAgIH1cblxuICAgIC8vIFN0b3AgcmVwbGF5IGlmIG92ZXIgdGhlIG11dGF0aW9uIGxpbWl0XG4gICAgaWYgKG92ZXJNdXRhdGlvbkxpbWl0KSB7XG4gICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciByZWplY3RcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICAgIHRoaXMuc3RvcCh7IHJlYXNvbjogJ211dGF0aW9uTGltaXQnLCBmb3JjZUZsdXNoOiB0aGlzLnJlY29yZGluZ01vZGUgPT09ICdzZXNzaW9uJyB9KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBgdHJ1ZWAgbWVhbnMgd2UgdXNlIHRoZSByZWd1bGFyIG11dGF0aW9uIGhhbmRsaW5nIGJ5IHJyd2ViXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0T3B0aW9uKHNlbGVjdG9ycywgZGVmYXVsdFNlbGVjdG9ycykge1xuICByZXR1cm4gW1xuICAgIC4uLnNlbGVjdG9ycyxcbiAgICAvLyBzZW50cnkgZGVmYXVsdHNcbiAgICAuLi5kZWZhdWx0U2VsZWN0b3JzLFxuICBdLmpvaW4oJywnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHByaXZhY3kgcmVsYXRlZCBjb25maWd1cmF0aW9uIGZvciB1c2UgaW4gcnJ3ZWJcbiAqL1xuZnVuY3Rpb24gZ2V0UHJpdmFjeU9wdGlvbnMoeyBtYXNrLCB1bm1hc2ssIGJsb2NrLCB1bmJsb2NrLCBpZ25vcmUgfSkge1xuICBjb25zdCBkZWZhdWx0QmxvY2tlZEVsZW1lbnRzID0gWydiYXNlJywgJ2lmcmFtZVtzcmNkb2NdOm5vdChbc3JjXSknXTtcblxuICBjb25zdCBtYXNrU2VsZWN0b3IgPSBnZXRPcHRpb24obWFzaywgWycuc2VudHJ5LW1hc2snLCAnW2RhdGEtc2VudHJ5LW1hc2tdJ10pO1xuICBjb25zdCB1bm1hc2tTZWxlY3RvciA9IGdldE9wdGlvbih1bm1hc2ssIFtdKTtcblxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIC8vIFdlIGFyZSBtYWtpbmcgdGhlIGRlY2lzaW9uIHRvIG1ha2UgdGV4dCBhbmQgaW5wdXQgc2VsZWN0b3JzIHRoZSBzYW1lXG4gICAgbWFza1RleHRTZWxlY3RvcjogbWFza1NlbGVjdG9yLFxuICAgIHVubWFza1RleHRTZWxlY3RvcjogdW5tYXNrU2VsZWN0b3IsXG5cbiAgICBibG9ja1NlbGVjdG9yOiBnZXRPcHRpb24oYmxvY2ssIFsnLnNlbnRyeS1ibG9jaycsICdbZGF0YS1zZW50cnktYmxvY2tdJywgLi4uZGVmYXVsdEJsb2NrZWRFbGVtZW50c10pLFxuICAgIHVuYmxvY2tTZWxlY3RvcjogZ2V0T3B0aW9uKHVuYmxvY2ssIFtdKSxcbiAgICBpZ25vcmVTZWxlY3RvcjogZ2V0T3B0aW9uKGlnbm9yZSwgWycuc2VudHJ5LWlnbm9yZScsICdbZGF0YS1zZW50cnktaWdub3JlXScsICdpbnB1dFt0eXBlPVwiZmlsZVwiXSddKSxcbiAgfTtcblxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBNYXNrcyBhbiBhdHRyaWJ1dGUgaWYgbmVjZXNzYXJ5LCBvdGhlcndpc2UgcmV0dXJuIGF0dHJpYnV0ZSB2YWx1ZSBhcy1pcy5cbiAqL1xuZnVuY3Rpb24gbWFza0F0dHJpYnV0ZSh7XG4gIGVsLFxuICBrZXksXG4gIG1hc2tBdHRyaWJ1dGVzLFxuICBtYXNrQWxsVGV4dCxcbiAgcHJpdmFjeU9wdGlvbnMsXG4gIHZhbHVlLFxufSkge1xuICAvLyBXZSBvbmx5IG1hc2sgYXR0cmlidXRlcyBpZiBgbWFza0FsbFRleHRgIGlzIHRydWVcbiAgaWYgKCFtYXNrQWxsVGV4dCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vIHVubWFza1RleHRTZWxlY3RvciB0YWtlcyBwcmVjZWRlbmNlXG4gIGlmIChwcml2YWN5T3B0aW9ucy51bm1hc2tUZXh0U2VsZWN0b3IgJiYgZWwubWF0Y2hlcyhwcml2YWN5T3B0aW9ucy51bm1hc2tUZXh0U2VsZWN0b3IpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgaWYgKFxuICAgIG1hc2tBdHRyaWJ1dGVzLmluY2x1ZGVzKGtleSkgfHxcbiAgICAvLyBOZWVkIHRvIG1hc2sgYHZhbHVlYCBhdHRyaWJ1dGUgZm9yIGA8aW5wdXQ+YCBpZiBpdCdzIGEgYnV0dG9uLWxpa2VcbiAgICAvLyB0eXBlXG4gICAgKGtleSA9PT0gJ3ZhbHVlJyAmJiBlbC50YWdOYW1lID09PSAnSU5QVVQnICYmIFsnc3VibWl0JywgJ2J1dHRvbiddLmluY2x1ZGVzKGVsLmdldEF0dHJpYnV0ZSgndHlwZScpIHx8ICcnKSlcbiAgKSB7XG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1tcXFNdL2csICcqJyk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmNvbnN0IE1FRElBX1NFTEVDVE9SUyA9XG4gICdpbWcsaW1hZ2Usc3ZnLHZpZGVvLG9iamVjdCxwaWN0dXJlLGVtYmVkLG1hcCxhdWRpbyxsaW5rW3JlbD1cImljb25cIl0sbGlua1tyZWw9XCJhcHBsZS10b3VjaC1pY29uXCJdJztcblxuY29uc3QgREVGQVVMVF9ORVRXT1JLX0hFQURFUlMgPSBbJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdhY2NlcHQnXTtcblxubGV0IF9pbml0aWFsaXplZCA9IGZhbHNlO1xuXG4vKipcbiAqIFNlbnRyeSBpbnRlZ3JhdGlvbiBmb3IgW1Nlc3Npb24gUmVwbGF5XShodHRwczovL3NlbnRyeS5pby9mb3Ivc2Vzc2lvbi1yZXBsYXkvKS5cbiAqXG4gKiBTZWUgdGhlIFtSZXBsYXkgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9kb2NzLnNlbnRyeS5pby9wbGF0Zm9ybXMvamF2YXNjcmlwdC9ndWlkZXMvc2Vzc2lvbi1yZXBsYXkvKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYFxuICogU2VudHJ5LmluaXQoe1xuICogICBkc246ICdfX0RTTl9fJyxcbiAqICAgaW50ZWdyYXRpb25zOiBbU2VudHJ5LnJlcGxheUludGVncmF0aW9uKCldLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgcmVwbGF5SW50ZWdyYXRpb24gPSAoKG9wdGlvbnMpID0+IHtcbiAgcmV0dXJuIG5ldyBSZXBsYXkob3B0aW9ucyk7XG59KSA7XG5cbi8qKlxuICogUmVwbGF5IGludGVncmF0aW9uXG4gKi9cbmNsYXNzIFJlcGxheSAge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgdG8gcGFzcyB0byBgcnJ3ZWIucmVjb3JkKClgXG4gICAqL1xuXG4gIC8qKlxuICAgKiBJbml0aWFsIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSByZXBsYXkgaW50ZWdyYXRpb24sIG1lcmdlZCB3aXRoIGRlZmF1bHQgdmFsdWVzLlxuICAgKiBOb3RlOiBgc2Vzc2lvblNhbXBsZVJhdGVgIGFuZCBgZXJyb3JTYW1wbGVSYXRlYCBhcmUgbm90IHJlcXVpcmVkIGhlcmUsIGFzIHRoZXlcbiAgICogY2FuIG9ubHkgYmUgZmluYWxseSBzZXQgd2hlbiBzZXR1cE9uY2UoKSBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gICBjb25zdHJ1Y3Rvcih7XG4gICAgZmx1c2hNaW5EZWxheSA9IERFRkFVTFRfRkxVU0hfTUlOX0RFTEFZLFxuICAgIGZsdXNoTWF4RGVsYXkgPSBERUZBVUxUX0ZMVVNIX01BWF9ERUxBWSxcbiAgICBtaW5SZXBsYXlEdXJhdGlvbiA9IE1JTl9SRVBMQVlfRFVSQVRJT04sXG4gICAgbWF4UmVwbGF5RHVyYXRpb24gPSBNQVhfUkVQTEFZX0RVUkFUSU9OLFxuICAgIHN0aWNreVNlc3Npb24gPSB0cnVlLFxuICAgIHVzZUNvbXByZXNzaW9uID0gdHJ1ZSxcbiAgICB3b3JrZXJVcmwsXG4gICAgX2V4cGVyaW1lbnRzID0ge30sXG4gICAgbWFza0FsbFRleHQgPSB0cnVlLFxuICAgIG1hc2tBbGxJbnB1dHMgPSB0cnVlLFxuICAgIGJsb2NrQWxsTWVkaWEgPSB0cnVlLFxuXG4gICAgbXV0YXRpb25CcmVhZGNydW1iTGltaXQgPSA3NTAsXG4gICAgbXV0YXRpb25MaW1pdCA9IDEwMDAwLFxuXG4gICAgc2xvd0NsaWNrVGltZW91dCA9IDcwMDAsXG4gICAgc2xvd0NsaWNrSWdub3JlU2VsZWN0b3JzID0gW10sXG5cbiAgICBuZXR3b3JrRGV0YWlsQWxsb3dVcmxzID0gW10sXG4gICAgbmV0d29ya0RldGFpbERlbnlVcmxzID0gW10sXG4gICAgbmV0d29ya0NhcHR1cmVCb2RpZXMgPSB0cnVlLFxuICAgIG5ldHdvcmtSZXF1ZXN0SGVhZGVycyA9IFtdLFxuICAgIG5ldHdvcmtSZXNwb25zZUhlYWRlcnMgPSBbXSxcblxuICAgIG1hc2sgPSBbXSxcbiAgICBtYXNrQXR0cmlidXRlcyA9IFsndGl0bGUnLCAncGxhY2Vob2xkZXInLCAnYXJpYS1sYWJlbCddLFxuICAgIHVubWFzayA9IFtdLFxuICAgIGJsb2NrID0gW10sXG4gICAgdW5ibG9jayA9IFtdLFxuICAgIGlnbm9yZSA9IFtdLFxuICAgIG1hc2tGbixcblxuICAgIGJlZm9yZUFkZFJlY29yZGluZ0V2ZW50LFxuICAgIGJlZm9yZUVycm9yU2FtcGxpbmcsXG4gICAgb25FcnJvcixcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5uYW1lID0gJ1JlcGxheSc7XG5cbiAgICBjb25zdCBwcml2YWN5T3B0aW9ucyA9IGdldFByaXZhY3lPcHRpb25zKHtcbiAgICAgIG1hc2ssXG4gICAgICB1bm1hc2ssXG4gICAgICBibG9jayxcbiAgICAgIHVuYmxvY2ssXG4gICAgICBpZ25vcmUsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9yZWNvcmRpbmdPcHRpb25zID0ge1xuICAgICAgbWFza0FsbElucHV0cyxcbiAgICAgIG1hc2tBbGxUZXh0LFxuICAgICAgbWFza0lucHV0T3B0aW9uczogeyBwYXNzd29yZDogdHJ1ZSB9LFxuICAgICAgbWFza1RleHRGbjogbWFza0ZuLFxuICAgICAgbWFza0lucHV0Rm46IG1hc2tGbixcbiAgICAgIG1hc2tBdHRyaWJ1dGVGbjogKGtleSwgdmFsdWUsIGVsKSA9PlxuICAgICAgICBtYXNrQXR0cmlidXRlKHtcbiAgICAgICAgICBtYXNrQXR0cmlidXRlcyxcbiAgICAgICAgICBtYXNrQWxsVGV4dCxcbiAgICAgICAgICBwcml2YWN5T3B0aW9ucyxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgZWwsXG4gICAgICAgIH0pLFxuXG4gICAgICAuLi5wcml2YWN5T3B0aW9ucyxcblxuICAgICAgLy8gT3VyIGRlZmF1bHRzXG4gICAgICBzbGltRE9NT3B0aW9uczogJ2FsbCcsXG4gICAgICBpbmxpbmVTdHlsZXNoZWV0OiB0cnVlLFxuICAgICAgLy8gRGlzYWJsZSBpbmxpbmUgaW1hZ2VzIGFzIGl0IHdpbGwgaW5jcmVhc2Ugc2VnbWVudC9yZXBsYXkgc2l6ZVxuICAgICAgaW5saW5lSW1hZ2VzOiBmYWxzZSxcbiAgICAgIC8vIGNvbGxlY3QgZm9udHMsIGJ1dCBiZSBhd2FyZSB0aGF0IGBzZW50cnkuaW9gIG5lZWRzIHRvIGJlIGFuIGFsbG93ZWRcbiAgICAgIC8vIG9yaWdpbiBmb3IgcGxheWJhY2tcbiAgICAgIGNvbGxlY3RGb250czogdHJ1ZSxcbiAgICAgIGVycm9ySGFuZGxlcjogKGVycikgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGVyci5fX3Jyd2ViX18gPSB0cnVlO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzIGhlcmVcbiAgICAgICAgICAvLyB0aGlzIGNhbiBoYXBwZW4gaWYgdGhlIGVycm9yIGlzIGZyb3plbiBvciBkb2VzIG5vdCBhbGxvdyBtdXRhdGlvbiBmb3Igb3RoZXIgcmVhc29uc1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gZXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIHJlY29yZGluZyBpZnJhbWVzIGZyb20gZGlmZmVyZW50IG9yaWdpbnNcbiAgICAgIHJlY29yZENyb3NzT3JpZ2luSWZyYW1lczogQm9vbGVhbihfZXhwZXJpbWVudHMucmVjb3JkQ3Jvc3NPcmlnaW5JZnJhbWVzKSxcbiAgICB9O1xuXG4gICAgdGhpcy5faW5pdGlhbE9wdGlvbnMgPSB7XG4gICAgICBmbHVzaE1pbkRlbGF5LFxuICAgICAgZmx1c2hNYXhEZWxheSxcbiAgICAgIG1pblJlcGxheUR1cmF0aW9uOiBNYXRoLm1pbihtaW5SZXBsYXlEdXJhdGlvbiwgTUlOX1JFUExBWV9EVVJBVElPTl9MSU1JVCksXG4gICAgICBtYXhSZXBsYXlEdXJhdGlvbjogTWF0aC5taW4obWF4UmVwbGF5RHVyYXRpb24sIE1BWF9SRVBMQVlfRFVSQVRJT04pLFxuICAgICAgc3RpY2t5U2Vzc2lvbixcbiAgICAgIHVzZUNvbXByZXNzaW9uLFxuICAgICAgd29ya2VyVXJsLFxuICAgICAgYmxvY2tBbGxNZWRpYSxcbiAgICAgIG1hc2tBbGxJbnB1dHMsXG4gICAgICBtYXNrQWxsVGV4dCxcbiAgICAgIG11dGF0aW9uQnJlYWRjcnVtYkxpbWl0LFxuICAgICAgbXV0YXRpb25MaW1pdCxcbiAgICAgIHNsb3dDbGlja1RpbWVvdXQsXG4gICAgICBzbG93Q2xpY2tJZ25vcmVTZWxlY3RvcnMsXG4gICAgICBuZXR3b3JrRGV0YWlsQWxsb3dVcmxzLFxuICAgICAgbmV0d29ya0RldGFpbERlbnlVcmxzLFxuICAgICAgbmV0d29ya0NhcHR1cmVCb2RpZXMsXG4gICAgICBuZXR3b3JrUmVxdWVzdEhlYWRlcnM6IF9nZXRNZXJnZWROZXR3b3JrSGVhZGVycyhuZXR3b3JrUmVxdWVzdEhlYWRlcnMpLFxuICAgICAgbmV0d29ya1Jlc3BvbnNlSGVhZGVyczogX2dldE1lcmdlZE5ldHdvcmtIZWFkZXJzKG5ldHdvcmtSZXNwb25zZUhlYWRlcnMpLFxuICAgICAgYmVmb3JlQWRkUmVjb3JkaW5nRXZlbnQsXG4gICAgICBiZWZvcmVFcnJvclNhbXBsaW5nLFxuICAgICAgb25FcnJvcixcblxuICAgICAgX2V4cGVyaW1lbnRzLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5faW5pdGlhbE9wdGlvbnMuYmxvY2tBbGxNZWRpYSkge1xuICAgICAgLy8gYGJsb2NrQWxsTWVkaWFgIGlzIGEgbW9yZSB1c2VyIGZyaWVuZGx5IG9wdGlvbiB0byBjb25maWd1cmUgYmxvY2tpbmdcbiAgICAgIC8vIGVtYmVkZGVkIG1lZGlhIGVsZW1lbnRzXG4gICAgICB0aGlzLl9yZWNvcmRpbmdPcHRpb25zLmJsb2NrU2VsZWN0b3IgPSAhdGhpcy5fcmVjb3JkaW5nT3B0aW9ucy5ibG9ja1NlbGVjdG9yXG4gICAgICAgID8gTUVESUFfU0VMRUNUT1JTXG4gICAgICAgIDogYCR7dGhpcy5fcmVjb3JkaW5nT3B0aW9ucy5ibG9ja1NlbGVjdG9yfSwke01FRElBX1NFTEVDVE9SU31gO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc0luaXRpYWxpemVkICYmIGlzQnJvd3NlcigpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ011bHRpcGxlIFNlbnRyeSBTZXNzaW9uIFJlcGxheSBpbnN0YW5jZXMgYXJlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBJZiByZXBsYXkgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZCAqL1xuICAgZ2V0IF9pc0luaXRpYWxpemVkKCkge1xuICAgIHJldHVybiBfaW5pdGlhbGl6ZWQ7XG4gIH1cblxuICAvKiogVXBkYXRlIF9pc0luaXRpYWxpemVkICovXG4gICBzZXQgX2lzSW5pdGlhbGl6ZWQodmFsdWUpIHtcbiAgICBfaW5pdGlhbGl6ZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR1cCBhbmQgaW5pdGlhbGl6ZSByZXBsYXkgY29udGFpbmVyXG4gICAqL1xuICAgYWZ0ZXJBbGxTZXR1cChjbGllbnQpIHtcbiAgICBpZiAoIWlzQnJvd3NlcigpIHx8IHRoaXMuX3JlcGxheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3NldHVwKGNsaWVudCk7XG4gICAgdGhpcy5faW5pdGlhbGl6ZShjbGllbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgcmVwbGF5IHJlZ2FyZGxlc3Mgb2Ygc2FtcGxpbmcgcmF0ZS4gQ2FsbGluZyB0aGlzIHdpbGwgYWx3YXlzXG4gICAqIGNyZWF0ZSBhIG5ldyBzZXNzaW9uLiBXaWxsIGxvZyBhIG1lc3NhZ2UgaWYgcmVwbGF5IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuXG4gICAqXG4gICAqIENyZWF0ZXMgb3IgbG9hZHMgYSBzZXNzaW9uLCBhdHRhY2hlcyBsaXN0ZW5lcnMgdG8gdmFyeWluZyBldmVudHMgKERPTSxcbiAgICogUGVyZm9ybWFuY2VPYnNlcnZlciwgUmVjb3JkaW5nLCBTZW50cnkgU0RLLCBldGMpXG4gICAqL1xuICAgc3RhcnQoKSB7XG4gICAgaWYgKCF0aGlzLl9yZXBsYXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fcmVwbGF5LnN0YXJ0KCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgcmVwbGF5IGJ1ZmZlcmluZy4gQnVmZmVycyB1bnRpbCBgZmx1c2goKWAgaXMgY2FsbGVkIG9yLCBpZlxuICAgKiBgcmVwbGF5c09uRXJyb3JTYW1wbGVSYXRlYCA+IDAsIHVudGlsIGFuIGVycm9yIG9jY3Vycy5cbiAgICovXG4gICBzdGFydEJ1ZmZlcmluZygpIHtcbiAgICBpZiAoIXRoaXMuX3JlcGxheSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3JlcGxheS5zdGFydEJ1ZmZlcmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEN1cnJlbnRseSwgdGhpcyBuZWVkcyB0byBiZSBtYW51YWxseSBjYWxsZWQgKGUuZy4gZm9yIHRlc3RzKS4gU2VudHJ5IFNES1xuICAgKiBkb2VzIG5vdCBzdXBwb3J0IGEgdGVhcmRvd25cbiAgICovXG4gICBzdG9wKCkge1xuICAgIGlmICghdGhpcy5fcmVwbGF5KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3JlcGxheS5zdG9wKHsgZm9yY2VGbHVzaDogdGhpcy5fcmVwbGF5LnJlY29yZGluZ01vZGUgPT09ICdzZXNzaW9uJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBub3QgaW4gXCJzZXNzaW9uXCIgcmVjb3JkaW5nIG1vZGUsIGZsdXNoIGV2ZW50IGJ1ZmZlciB3aGljaCB3aWxsIGNyZWF0ZSBhIG5ldyByZXBsYXkuXG4gICAqIElmIHJlcGxheSBpcyBub3QgZW5hYmxlZCwgYSBuZXcgc2Vzc2lvbiByZXBsYXkgaXMgc3RhcnRlZC5cbiAgICogVW5sZXNzIGBjb250aW51ZVJlY29yZGluZ2AgaXMgZmFsc2UsIHRoZSByZXBsYXkgd2lsbCBjb250aW51ZSB0byByZWNvcmQgYW5kXG4gICAqIGJlaGF2ZSBhcyBhIFwic2Vzc2lvblwiLWJhc2VkIHJlcGxheS5cbiAgICpcbiAgICogT3RoZXJ3aXNlLCBxdWV1ZSB1cCBhIGZsdXNoLlxuICAgKi9cbiAgIGZsdXNoKG9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMuX3JlcGxheSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIC8vIGFzc3VtaW5nIGEgc2Vzc2lvbiBzaG91bGQgYmUgcmVjb3JkZWQgaW4gdGhpcyBjYXNlXG4gICAgaWYgKCF0aGlzLl9yZXBsYXkuaXNFbmFibGVkKCkpIHtcbiAgICAgIHRoaXMuX3JlcGxheS5zdGFydCgpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9yZXBsYXkuc2VuZEJ1ZmZlcmVkUmVwbGF5T3JGbHVzaChvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgc2Vzc2lvbiBJRC5cbiAgICovXG4gICBnZXRSZXBsYXlJZCgpIHtcbiAgICBpZiAoIXRoaXMuX3JlcGxheT8uaXNFbmFibGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcmVwbGF5LmdldFNlc3Npb25JZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCByZWNvcmRpbmcgbW9kZS4gVGhpcyBjYW4gYmUgZWl0aGVyIGBzZXNzaW9uYCBvciBgYnVmZmVyYC5cbiAgICpcbiAgICogYHNlc3Npb25gOiBSZWNvcmRpbmcgdGhlIHdob2xlIHNlc3Npb24sIHNlbmRpbmcgaXQgY29udGludW91c2x5XG4gICAqIGBidWZmZXJgOiBBbHdheXMga2VlcGluZyB0aGUgbGFzdCA2MHMgb2YgcmVjb3JkaW5nLCByZXF1aXJlczpcbiAgICogICAtIGhhdmluZyByZXBsYXlzT25FcnJvclNhbXBsZVJhdGUgPiAwIHRvIGNhcHR1cmUgcmVwbGF5IHdoZW4gYW4gZXJyb3Igb2NjdXJzXG4gICAqICAgLSBvciBjYWxsaW5nIGBmbHVzaCgpYCB0byBzZW5kIHRoZSByZXBsYXlcbiAgICovXG4gICBnZXRSZWNvcmRpbmdNb2RlKCkge1xuICAgIGlmICghdGhpcy5fcmVwbGF5Py5pc0VuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9yZXBsYXkucmVjb3JkaW5nTW9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyByZXBsYXkuXG4gICAqL1xuICAgX2luaXRpYWxpemUoY2xpZW50KSB7XG4gICAgaWYgKCF0aGlzLl9yZXBsYXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9tYXliZUxvYWRGcm9tUmVwbGF5Q2FudmFzSW50ZWdyYXRpb24oY2xpZW50KTtcbiAgICB0aGlzLl9yZXBsYXkuaW5pdGlhbGl6ZVNhbXBsaW5nKCk7XG4gIH1cblxuICAvKiogU2V0dXAgdGhlIGludGVncmF0aW9uLiAqL1xuICAgX3NldHVwKGNsaWVudCkge1xuICAgIC8vIENsaWVudCBpcyBub3QgYXZhaWxhYmxlIGluIGNvbnN0cnVjdG9yLCBzbyB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgc2V0dXBPbmNlXG4gICAgY29uc3QgZmluYWxPcHRpb25zID0gbG9hZFJlcGxheU9wdGlvbnNGcm9tQ2xpZW50KHRoaXMuX2luaXRpYWxPcHRpb25zLCBjbGllbnQpO1xuXG4gICAgdGhpcy5fcmVwbGF5ID0gbmV3IFJlcGxheUNvbnRhaW5lcih7XG4gICAgICBvcHRpb25zOiBmaW5hbE9wdGlvbnMsXG4gICAgICByZWNvcmRpbmdPcHRpb25zOiB0aGlzLl9yZWNvcmRpbmdPcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEdldCBjYW52YXMgb3B0aW9ucyBmcm9tIFJlcGxheUNhbnZhcyBpbnRlZ3JhdGlvbiwgaWYgaXQgaXMgYWxzbyBhZGRlZC4gKi9cbiAgIF9tYXliZUxvYWRGcm9tUmVwbGF5Q2FudmFzSW50ZWdyYXRpb24oY2xpZW50KSB7XG4gICAgLy8gVG8gc2F2ZSBidW5kbGUgc2l6ZSwgd2Ugc2tpcCBjaGVja2luZyBmb3Igc3R1ZmYgaGVyZVxuICAgIC8vIGFuZCBpbnN0ZWFkIGp1c3QgdHJ5LWNhdGNoIGV2ZXJ5dGhpbmcgLSBhcyBnZW5lcmFsbHkgdGhpcyBzaG91bGQgYWxsIGJlIGRlZmluZWRcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uICovXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhbnZhc0ludGVncmF0aW9uID0gY2xpZW50LmdldEludGVncmF0aW9uQnlOYW1lKCdSZXBsYXlDYW52YXMnKVxuXG47XG4gICAgICBpZiAoIWNhbnZhc0ludGVncmF0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVwbGF5WydfY2FudmFzJ10gPSBjYW52YXNJbnRlZ3JhdGlvbi5nZXRPcHRpb25zKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBpZ25vcmUgZXJyb3JzIGhlcmVcbiAgICB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uICovXG4gIH1cbn1cblxuLyoqIFBhcnNlIFJlcGxheS1yZWxhdGVkIG9wdGlvbnMgZnJvbSBTREsgb3B0aW9ucyAqL1xuZnVuY3Rpb24gbG9hZFJlcGxheU9wdGlvbnNGcm9tQ2xpZW50KGluaXRpYWxPcHRpb25zLCBjbGllbnQpIHtcbiAgY29uc3Qgb3B0ID0gY2xpZW50LmdldE9wdGlvbnMoKSA7XG5cbiAgY29uc3QgZmluYWxPcHRpb25zID0ge1xuICAgIHNlc3Npb25TYW1wbGVSYXRlOiAwLFxuICAgIGVycm9yU2FtcGxlUmF0ZTogMCxcbiAgICAuLi5pbml0aWFsT3B0aW9ucyxcbiAgfTtcblxuICBjb25zdCByZXBsYXlzU2Vzc2lvblNhbXBsZVJhdGUgPSBwYXJzZVNhbXBsZVJhdGUob3B0LnJlcGxheXNTZXNzaW9uU2FtcGxlUmF0ZSk7XG4gIGNvbnN0IHJlcGxheXNPbkVycm9yU2FtcGxlUmF0ZSA9IHBhcnNlU2FtcGxlUmF0ZShvcHQucmVwbGF5c09uRXJyb3JTYW1wbGVSYXRlKTtcblxuICBpZiAocmVwbGF5c1Nlc3Npb25TYW1wbGVSYXRlID09IG51bGwgJiYgcmVwbGF5c09uRXJyb3JTYW1wbGVSYXRlID09IG51bGwpIHtcbiAgICBjb25zb2xlU2FuZGJveCgoKSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnUmVwbGF5IGlzIGRpc2FibGVkIGJlY2F1c2UgbmVpdGhlciBgcmVwbGF5c1Nlc3Npb25TYW1wbGVSYXRlYCBub3IgYHJlcGxheXNPbkVycm9yU2FtcGxlUmF0ZWAgYXJlIHNldC4nLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXBsYXlzU2Vzc2lvblNhbXBsZVJhdGUgIT0gbnVsbCkge1xuICAgIGZpbmFsT3B0aW9ucy5zZXNzaW9uU2FtcGxlUmF0ZSA9IHJlcGxheXNTZXNzaW9uU2FtcGxlUmF0ZTtcbiAgfVxuXG4gIGlmIChyZXBsYXlzT25FcnJvclNhbXBsZVJhdGUgIT0gbnVsbCkge1xuICAgIGZpbmFsT3B0aW9ucy5lcnJvclNhbXBsZVJhdGUgPSByZXBsYXlzT25FcnJvclNhbXBsZVJhdGU7XG4gIH1cblxuICByZXR1cm4gZmluYWxPcHRpb25zO1xufVxuXG5mdW5jdGlvbiBfZ2V0TWVyZ2VkTmV0d29ya0hlYWRlcnMoaGVhZGVycykge1xuICByZXR1cm4gWy4uLkRFRkFVTFRfTkVUV09SS19IRUFERVJTLCAuLi5oZWFkZXJzLm1hcChoZWFkZXIgPT4gaGVhZGVyLnRvTG93ZXJDYXNlKCkpXTtcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGEgc21hbGwgdXRpbGl0eSB0byBnZXQgYSB0eXBlLXNhZmUgaW5zdGFuY2Ugb2YgdGhlIFJlcGxheSBpbnRlZ3JhdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0UmVwbGF5KCkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnQoKTtcbiAgcmV0dXJuIGNsaWVudD8uZ2V0SW50ZWdyYXRpb25CeU5hbWUoJ1JlcGxheScpO1xufVxuXG5leHBvcnQgeyBnZXRSZXBsYXksIHJlcGxheUludGVncmF0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@sentry-internal+replay@9.46.0/node_modules/@sentry-internal/replay/build/npm/esm/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_class_private_field_loose_base.js":
/*!*****************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_class_private_field_loose_base.js ***!
  \*****************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   _: () => (/* binding */ _class_private_field_loose_base)\n/* harmony export */ });\nfunction _class_private_field_loose_base(receiver, privateKey) {\n    if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n        throw new TypeError(\"attempted to use private field on non-instance\");\n    }\n\n    return receiver;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjE1L25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDZ0QiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHN3YytoZWxwZXJzQDAuNS4xNS9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9fY2xhc3NfcHJpdmF0ZV9maWVsZF9sb29zZV9iYXNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2Jhc2UocmVjZWl2ZXIsIHByaXZhdGVLZXkpIHtcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWNlaXZlciwgcHJpdmF0ZUtleSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byB1c2UgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY2VpdmVyO1xufVxuZXhwb3J0IHsgX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2VfYmFzZSBhcyBfIH07XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_class_private_field_loose_base.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_class_private_field_loose_key.js":
/*!****************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_class_private_field_loose_key.js ***!
  \****************************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   _: () => (/* binding */ _class_private_field_loose_key)\n/* harmony export */ });\nvar id = 0;\n\nfunction _class_private_field_loose_key(name) {\n    return \"__private_\" + id++ + \"_\" + name;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjE1L25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQytDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL0Bzd2MraGVscGVyc0AwLjUuMTUvbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX2NsYXNzX3ByaXZhdGVfZmllbGRfbG9vc2Vfa2V5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBpZCA9IDA7XG5cbmZ1bmN0aW9uIF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleShuYW1lKSB7XG4gICAgcmV0dXJuIFwiX19wcml2YXRlX1wiICsgaWQrKyArIFwiX1wiICsgbmFtZTtcbn1cbmV4cG9ydCB7IF9jbGFzc19wcml2YXRlX2ZpZWxkX2xvb3NlX2tleSBhcyBfIH07XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_class_private_field_loose_key.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js":
/*!**********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js ***!
  \**********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   _: () => (/* binding */ _interop_require_default)\n/* harmony export */ });\nfunction _interop_require_default(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjE1L25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDeUMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHN3YytoZWxwZXJzQDAuNS4xNS9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9O1xufVxuZXhwb3J0IHsgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0IGFzIF8gfTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js":
/*!***********************************************************************************************************!*\
  !*** ./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js ***!
  \***********************************************************************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   _: () => (/* binding */ _interop_require_wildcard)\n/* harmony export */ });\nfunction _getRequireWildcardCache(nodeInterop) {\n    if (typeof WeakMap !== \"function\") return null;\n\n    var cacheBabelInterop = new WeakMap();\n    var cacheNodeInterop = new WeakMap();\n\n    return (_getRequireWildcardCache = function(nodeInterop) {\n        return nodeInterop ? cacheNodeInterop : cacheBabelInterop;\n    })(nodeInterop);\n}\nfunction _interop_require_wildcard(obj, nodeInterop) {\n    if (!nodeInterop && obj && obj.__esModule) return obj;\n    if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") return { default: obj };\n\n    var cache = _getRequireWildcardCache(nodeInterop);\n\n    if (cache && cache.has(obj)) return cache.get(obj);\n\n    var newObj = { __proto__: null };\n    var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;\n\n    for (var key in obj) {\n        if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) {\n            var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;\n            if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);\n            else newObj[key] = obj[key];\n        }\n    }\n\n    newObj.default = obj;\n\n    if (cache) cache.set(obj, newObj);\n\n    return newObj;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjE1L25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLHVGQUF1Rjs7QUFFdkY7O0FBRUE7O0FBRUEsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDMEMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vQHN3YytoZWxwZXJzQDAuNS4xNS9ub2RlX21vZHVsZXMvQHN3Yy9oZWxwZXJzL2VzbS9faW50ZXJvcF9yZXF1aXJlX3dpbGRjYXJkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShub2RlSW50ZXJvcCkge1xuICAgIGlmICh0eXBlb2YgV2Vha01hcCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDtcblxuICAgIHZhciBjYWNoZUJhYmVsSW50ZXJvcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgdmFyIGNhY2hlTm9kZUludGVyb3AgPSBuZXcgV2Vha01hcCgpO1xuXG4gICAgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbihub2RlSW50ZXJvcCkge1xuICAgICAgICByZXR1cm4gbm9kZUludGVyb3AgPyBjYWNoZU5vZGVJbnRlcm9wIDogY2FjaGVCYWJlbEludGVyb3A7XG4gICAgfSkobm9kZUludGVyb3ApO1xufVxuZnVuY3Rpb24gX2ludGVyb3BfcmVxdWlyZV93aWxkY2FyZChvYmosIG5vZGVJbnRlcm9wKSB7XG4gICAgaWYgKCFub2RlSW50ZXJvcCAmJiBvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHJldHVybiBvYmo7XG4gICAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmogIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHsgZGVmYXVsdDogb2JqIH07XG5cbiAgICB2YXIgY2FjaGUgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUobm9kZUludGVyb3ApO1xuXG4gICAgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSByZXR1cm4gY2FjaGUuZ2V0KG9iaik7XG5cbiAgICB2YXIgbmV3T2JqID0geyBfX3Byb3RvX186IG51bGwgfTtcbiAgICB2YXIgaGFzUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChrZXkgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld09iaiwga2V5LCBkZXNjKTtcbiAgICAgICAgICAgIGVsc2UgbmV3T2JqW2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5ld09iai5kZWZhdWx0ID0gb2JqO1xuXG4gICAgaWYgKGNhY2hlKSBjYWNoZS5zZXQob2JqLCBuZXdPYmopO1xuXG4gICAgcmV0dXJuIG5ld09iajtcbn1cbmV4cG9ydCB7IF9pbnRlcm9wX3JlcXVpcmVfd2lsZGNhcmQgYXMgXyB9O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/hoist-non-react-statics@3.3.2/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js":
/*!***********************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/hoist-non-react-statics@3.3.2/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js ***!
  \***********************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\n\nvar reactIs = __webpack_require__(/*! react-is */ \"(app-pages-browser)/./node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/index.js\");\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true\n};\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\nvar FORWARD_REF_STATICS = {\n  '$$typeof': true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true\n};\nvar MEMO_STATICS = {\n  '$$typeof': true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n  // React v16.11 and below\n  if (reactIs.isMemo(component)) {\n    return MEMO_STATICS;\n  } // React v16.12 and above\n\n\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n    if (objectPrototype) {\n      var inheritedComponent = getPrototypeOf(sourceComponent);\n\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n      }\n    }\n\n    var keys = getOwnPropertyNames(sourceComponent);\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n    }\n\n    var targetStatics = getStatics(targetComponent);\n    var sourceStatics = getStatics(sourceComponent);\n\n    for (var i = 0; i < keys.length; ++i) {\n      var key = keys[i];\n\n      if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n        var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor);\n        } catch (e) {}\n      }\n    }\n  }\n\n  return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9ob2lzdC1ub24tcmVhY3Qtc3RhdGljc0AzLjMuMi9ub2RlX21vZHVsZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MvZGlzdC9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy5janMuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsY0FBYyxtQkFBTyxDQUFDLDBHQUFVOztBQUVoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG9CQUFvQixpQkFBaUI7QUFDckM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3NAMy4zLjIvbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4vKipcbiAqIENvcHlyaWdodCAyMDE1LCBZYWhvbyEgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG52YXIgUkVBQ1RfU1RBVElDUyA9IHtcbiAgY2hpbGRDb250ZXh0VHlwZXM6IHRydWUsXG4gIGNvbnRleHRUeXBlOiB0cnVlLFxuICBjb250ZXh0VHlwZXM6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM6IHRydWUsXG4gIG1peGluczogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XG4gIG5hbWU6IHRydWUsXG4gIGxlbmd0aDogdHJ1ZSxcbiAgcHJvdG90eXBlOiB0cnVlLFxuICBjYWxsZXI6IHRydWUsXG4gIGNhbGxlZTogdHJ1ZSxcbiAgYXJndW1lbnRzOiB0cnVlLFxuICBhcml0eTogdHJ1ZVxufTtcbnZhciBGT1JXQVJEX1JFRl9TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICByZW5kZXI6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZVxufTtcbnZhciBNRU1PX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIGNvbXBhcmU6IHRydWUsXG4gIGRlZmF1bHRQcm9wczogdHJ1ZSxcbiAgZGlzcGxheU5hbWU6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBUWVBFX1NUQVRJQ1MgPSB7fTtcblRZUEVfU1RBVElDU1tyZWFjdElzLkZvcndhcmRSZWZdID0gRk9SV0FSRF9SRUZfU1RBVElDUztcblRZUEVfU1RBVElDU1tyZWFjdElzLk1lbW9dID0gTUVNT19TVEFUSUNTO1xuXG5mdW5jdGlvbiBnZXRTdGF0aWNzKGNvbXBvbmVudCkge1xuICAvLyBSZWFjdCB2MTYuMTEgYW5kIGJlbG93XG4gIGlmIChyZWFjdElzLmlzTWVtbyhjb21wb25lbnQpKSB7XG4gICAgcmV0dXJuIE1FTU9fU1RBVElDUztcbiAgfSAvLyBSZWFjdCB2MTYuMTIgYW5kIGFib3ZlXG5cblxuICByZXR1cm4gVFlQRV9TVEFUSUNTW2NvbXBvbmVudFsnJCR0eXBlb2YnXV0gfHwgUkVBQ1RfU1RBVElDUztcbn1cblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgb2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcbiAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcbiAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICB2YXIgaW5oZXJpdGVkQ29tcG9uZW50ID0gZ2V0UHJvdG90eXBlT2Yoc291cmNlQ29tcG9uZW50KTtcblxuICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcblxuICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlQ29tcG9uZW50KSk7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldFN0YXRpY3MgPSBnZXRTdGF0aWNzKHRhcmdldENvbXBvbmVudCk7XG4gICAgdmFyIHNvdXJjZVN0YXRpY3MgPSBnZXRTdGF0aWNzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAhKGJsYWNrbGlzdCAmJiBibGFja2xpc3Rba2V5XSkgJiYgIShzb3VyY2VTdGF0aWNzICYmIHNvdXJjZVN0YXRpY3Nba2V5XSkgJiYgISh0YXJnZXRTdGF0aWNzICYmIHRhcmdldFN0YXRpY3Nba2V5XSkpIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlQ29tcG9uZW50LCBrZXkpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhvaXN0Tm9uUmVhY3RTdGF0aWNzO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/hoist-non-react-statics@3.3.2/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/api/constants.js":
/*!*********************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/api/constants.js ***!
  \*********************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _shared_lib_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/lib/constants */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/constants.js\");\n/* harmony import */ var _shared_lib_constants__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_shared_lib_constants__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _shared_lib_constants__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _shared_lib_constants__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9hcGkvY29uc3RhbnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF3Qzs7QUFFeEMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS40LjdfQGJhYmVsK2NvcmVANy4yOC4zX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMF9AcGxheXdyaWdodCt0ZXN0QDEuNTUuMF9yZWFjdC1kXzQ3ZmYzODEzZDc5MDU2NmRmMjU0YTIxNjM1NTBjMmQ1L25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL2NvbnN0YW50cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuLi9zaGFyZWQvbGliL2NvbnN0YW50cyc7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/api/constants.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/api/router.js":
/*!******************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/api/router.js ***!
  \******************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (/* reexport default from dynamic */ _client_router__WEBPACK_IMPORTED_MODULE_0___default.a)\n/* harmony export */ });\n/* harmony import */ var _client_router__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../client/router */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/router.js\");\n/* harmony import */ var _client_router__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_client_router__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _client_router__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _client_router__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n\n//# sourceMappingURL=router.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9hcGkvcm91dGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUEyQztBQUNWOztBQUVqQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9hcGkvcm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tICcuLi9jbGllbnQvcm91dGVyJztcbmV4cG9ydCAqIGZyb20gJy4uL2NsaWVudC9yb3V0ZXInO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yb3V0ZXIuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/api/router.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/build/deployment-id.js":
/*!***************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/build/deployment-id.js ***!
  \***************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"getDeploymentIdQueryOrEmptyString\", ({\n    enumerable: true,\n    get: function() {\n        return getDeploymentIdQueryOrEmptyString;\n    }\n}));\nfunction getDeploymentIdQueryOrEmptyString() {\n    if (false) {}\n    return '';\n}\n\n//# sourceMappingURL=deployment-id.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9idWlsZC9kZXBsb3ltZW50LWlkLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YscUVBQW9FO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDO0FBQ0Y7QUFDQSxRQUFRLEtBQThCLEVBQUUsRUFFbkM7QUFDTDtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNC43X0BiYWJlbCtjb3JlQDcuMjguM19Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHBsYXl3cmlnaHQrdGVzdEAxLjU1LjBfcmVhY3QtZF80N2ZmMzgxM2Q3OTA1NjZkZjI1NGEyMTYzNTUwYzJkNS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2J1aWxkL2RlcGxveW1lbnQtaWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmdcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldERlcGxveW1lbnRJZFF1ZXJ5T3JFbXB0eVN0cmluZztcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGdldERlcGxveW1lbnRJZFF1ZXJ5T3JFbXB0eVN0cmluZygpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEKSB7XG4gICAgICAgIHJldHVybiBgP2RwbD0ke3Byb2Nlc3MuZW52Lk5FWFRfREVQTE9ZTUVOVF9JRH1gO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlcGxveW1lbnQtaWQuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/build/deployment-id.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/build/polyfills/polyfill-module.js":
/*!***************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/build/polyfills/polyfill-module.js ***!
  \***************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
 
eval(__webpack_require__.ts("\"trimStart\"in String.prototype||(String.prototype.trimStart=String.prototype.trimLeft),\"trimEnd\"in String.prototype||(String.prototype.trimEnd=String.prototype.trimRight),\"description\"in Symbol.prototype||Object.defineProperty(Symbol.prototype,\"description\",{configurable:!0,get:function(){var t=/\\((.*)\\)/.exec(this.toString());return t?t[1]:void 0}}),Array.prototype.flat||(Array.prototype.flat=function(t,r){return r=this.concat.apply([],this),t>1&&r.some(Array.isArray)?r.flat(t-1):r},Array.prototype.flatMap=function(t,r){return this.map(t,r).flat()}),Promise.prototype.finally||(Promise.prototype.finally=function(t){if(\"function\"!=typeof t)return this.then(t,t);var r=this.constructor||Promise;return this.then(function(n){return r.resolve(t()).then(function(){return n})},function(n){return r.resolve(t()).then(function(){throw n})})}),Object.fromEntries||(Object.fromEntries=function(t){return Array.from(t).reduce(function(t,r){return t[r[0]]=r[1],t},{})}),Array.prototype.at||(Array.prototype.at=function(t){var r=Math.trunc(t)||0;if(r<0&&(r+=this.length),!(r<0||r>=this.length))return this[r]}),Object.hasOwn||(Object.hasOwn=function(t,r){if(null==t)throw new TypeError(\"Cannot convert undefined or null to object\");return Object.prototype.hasOwnProperty.call(Object(t),r)}),\"canParse\"in URL||(URL.canParse=function(t,r){try{return!!new URL(t,r)}catch(t){return!1}});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9idWlsZC9wb2x5ZmlsbHMvcG9seWZpbGwtbW9kdWxlLmpzIiwibWFwcGluZ3MiOiJBQUFBLG1RQUFtUSwrQkFBK0IsdUNBQXVDLHNCQUFzQiw0REFBNEQsNkVBQTZFLHVDQUF1Qyw0QkFBNEIsb0VBQW9FLDhDQUE4QyxnQ0FBZ0MsNkJBQTZCLHNDQUFzQyxTQUFTLEVBQUUsYUFBYSxzQ0FBc0MsUUFBUSxFQUFFLEVBQUUsc0RBQXNELDBDQUEwQyxzQkFBc0IsR0FBRyxFQUFFLHNEQUFzRCx1QkFBdUIsK0RBQStELDhDQUE4Qyw2RUFBNkUseURBQXlELGdEQUFnRCxJQUFJLHFCQUFxQixTQUFTLFVBQVUiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS40LjdfQGJhYmVsK2NvcmVANy4yOC4zX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMF9AcGxheXdyaWdodCt0ZXN0QDEuNTUuMF9yZWFjdC1kXzQ3ZmYzODEzZDc5MDU2NmRmMjU0YTIxNjM1NTBjMmQ1L25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvcG9seWZpbGxzL3BvbHlmaWxsLW1vZHVsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInRyaW1TdGFydFwiaW4gU3RyaW5nLnByb3RvdHlwZXx8KFN0cmluZy5wcm90b3R5cGUudHJpbVN0YXJ0PVN0cmluZy5wcm90b3R5cGUudHJpbUxlZnQpLFwidHJpbUVuZFwiaW4gU3RyaW5nLnByb3RvdHlwZXx8KFN0cmluZy5wcm90b3R5cGUudHJpbUVuZD1TdHJpbmcucHJvdG90eXBlLnRyaW1SaWdodCksXCJkZXNjcmlwdGlvblwiaW4gU3ltYm9sLnByb3RvdHlwZXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KFN5bWJvbC5wcm90b3R5cGUsXCJkZXNjcmlwdGlvblwiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9L1xcKCguKilcXCkvLmV4ZWModGhpcy50b1N0cmluZygpKTtyZXR1cm4gdD90WzFdOnZvaWQgMH19KSxBcnJheS5wcm90b3R5cGUuZmxhdHx8KEFycmF5LnByb3RvdHlwZS5mbGF0PWZ1bmN0aW9uKHQscil7cmV0dXJuIHI9dGhpcy5jb25jYXQuYXBwbHkoW10sdGhpcyksdD4xJiZyLnNvbWUoQXJyYXkuaXNBcnJheSk/ci5mbGF0KHQtMSk6cn0sQXJyYXkucHJvdG90eXBlLmZsYXRNYXA9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5tYXAodCxyKS5mbGF0KCl9KSxQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5fHwoUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXJldHVybiB0aGlzLnRoZW4odCx0KTt2YXIgcj10aGlzLmNvbnN0cnVjdG9yfHxQcm9taXNlO3JldHVybiB0aGlzLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIHIucmVzb2x2ZSh0KCkpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gbn0pfSxmdW5jdGlvbihuKXtyZXR1cm4gci5yZXNvbHZlKHQoKSkudGhlbihmdW5jdGlvbigpe3Rocm93IG59KX0pfSksT2JqZWN0LmZyb21FbnRyaWVzfHwoT2JqZWN0LmZyb21FbnRyaWVzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5mcm9tKHQpLnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiB0W3JbMF1dPXJbMV0sdH0se30pfSksQXJyYXkucHJvdG90eXBlLmF0fHwoQXJyYXkucHJvdG90eXBlLmF0PWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgudHJ1bmModCl8fDA7aWYocjwwJiYocis9dGhpcy5sZW5ndGgpLCEocjwwfHxyPj10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXNbcl19KSxPYmplY3QuaGFzT3dufHwoT2JqZWN0Lmhhc093bj1mdW5jdGlvbih0LHIpe2lmKG51bGw9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdFwiKTtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE9iamVjdCh0KSxyKX0pLFwiY2FuUGFyc2VcImluIFVSTHx8KFVSTC5jYW5QYXJzZT1mdW5jdGlvbih0LHIpe3RyeXtyZXR1cm4hIW5ldyBVUkwodCxyKX1jYXRjaCh0KXtyZXR1cm4hMX19KTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/build/polyfills/polyfill-module.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/add-base-path.js":
/*!****************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/add-base-path.js ***!
  \****************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"addBasePath\", ({\n    enumerable: true,\n    get: function() {\n        return addBasePath;\n    }\n}));\nconst _addpathprefix = __webpack_require__(/*! ../shared/lib/router/utils/add-path-prefix */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst basePath =  false || '';\nfunction addBasePath(path, required) {\n    return (0, _normalizetrailingslash.normalizePathTrailingSlash)( false ? 0 : (0, _addpathprefix.addPathPrefix)(path, basePath));\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=add-base-path.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvYWRkLWJhc2UtcGF0aC5qcyIsIm1hcHBpbmdzIjoiOzs7OytDQUtnQkE7OztlQUFBQTs7OzJDQUxjO29EQUNhO0FBRTNDLE1BQU1DLFdBQVlDLE1BQWtDLElBQWU7QUFFNUQsU0FBU0YsWUFBWUssSUFBWSxFQUFFQyxRQUFrQjtJQUMxRCxPQUFPQyxDQUFBQSxHQUFBQSx3QkFBQUEsMEJBQUFBLEVBQ0xMLE1BQXVESSxHQUNuREQsQ0FBSUEsR0FDSkksQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBY0osTUFBTUo7QUFFNUIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3NyYy9jbGllbnQvYWRkLWJhc2UtcGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZGRQYXRoUHJlZml4IH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLXBhdGgtcHJlZml4J1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2ggfSBmcm9tICcuL25vcm1hbGl6ZS10cmFpbGluZy1zbGFzaCdcblxuY29uc3QgYmFzZVBhdGggPSAocHJvY2Vzcy5lbnYuX19ORVhUX1JPVVRFUl9CQVNFUEFUSCBhcyBzdHJpbmcpIHx8ICcnXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRCYXNlUGF0aChwYXRoOiBzdHJpbmcsIHJlcXVpcmVkPzogYm9vbGVhbik6IHN0cmluZyB7XG4gIHJldHVybiBub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaChcbiAgICBwcm9jZXNzLmVudi5fX05FWFRfTUFOVUFMX0NMSUVOVF9CQVNFX1BBVEggJiYgIXJlcXVpcmVkXG4gICAgICA/IHBhdGhcbiAgICAgIDogYWRkUGF0aFByZWZpeChwYXRoLCBiYXNlUGF0aClcbiAgKVxufVxuIl0sIm5hbWVzIjpbImFkZEJhc2VQYXRoIiwiYmFzZVBhdGgiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX1JPVVRFUl9CQVNFUEFUSCIsInBhdGgiLCJyZXF1aXJlZCIsIm5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoIiwiX19ORVhUX01BTlVBTF9DTElFTlRfQkFTRV9QQVRIIiwiYWRkUGF0aFByZWZpeCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/add-base-path.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/add-locale.js":
/*!*************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/add-locale.js ***!
  \*************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"addLocale\", ({\n    enumerable: true,\n    get: function() {\n        return addLocale;\n    }\n}));\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst addLocale = function(path) {\n    for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n        args[_key - 1] = arguments[_key];\n    }\n    if (false) {}\n    return path;\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=add-locale.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvYWRkLWxvY2FsZS5qcyIsIm1hcHBpbmdzIjoiOzs7OzZDQUdhQTs7O2VBQUFBOzs7b0RBRjhCO0FBRXBDLE1BQU1BLFlBQXVCLFNBQUNDLElBQUFBO3FDQUFTQyxPQUFBQSxJQUFBQSxNQUFBQSxPQUFBQSxJQUFBQSxPQUFBQSxJQUFBQSxJQUFBQSxPQUFBQSxHQUFBQSxPQUFBQSxNQUFBQSxPQUFBQTtRQUFBQSxJQUFBQSxDQUFBQSxPQUFBQSxFQUFBQSxHQUFBQSxTQUFBQSxDQUFBQSxLQUFBQTs7SUFDNUMsSUFBSUMsS0FBK0IsRUFBRSxFQU1wQztJQUNELE9BQU9GO0FBQ1QiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3NyYy9jbGllbnQvYWRkLWxvY2FsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IGFkZExvY2FsZSBhcyBGbiB9IGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FkZC1sb2NhbGUnXG5pbXBvcnQgeyBub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCB9IGZyb20gJy4vbm9ybWFsaXplLXRyYWlsaW5nLXNsYXNoJ1xuXG5leHBvcnQgY29uc3QgYWRkTG9jYWxlOiB0eXBlb2YgRm4gPSAocGF0aCwgLi4uYXJncykgPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgIHJldHVybiBub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaChcbiAgICAgIChcbiAgICAgICAgcmVxdWlyZSgnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvYWRkLWxvY2FsZScpIGFzIHR5cGVvZiBpbXBvcnQoJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FkZC1sb2NhbGUnKVxuICAgICAgKS5hZGRMb2NhbGUocGF0aCwgLi4uYXJncylcbiAgICApXG4gIH1cbiAgcmV0dXJuIHBhdGhcbn1cbiJdLCJuYW1lcyI6WyJhZGRMb2NhbGUiLCJwYXRoIiwiYXJncyIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfSTE4Tl9TVVBQT1JUIiwibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJyZXF1aXJlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/add-locale.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-bootstrap.js":
/*!****************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-bootstrap.js ***!
  \****************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/**\n * Before starting the Next.js runtime and requiring any module, we need to make\n * sure the following scripts are executed in the correct order:\n * - Polyfills\n * - next/script with `beforeInteractive` strategy\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"appBootstrap\", ({\n    enumerable: true,\n    get: function() {\n        return appBootstrap;\n    }\n}));\nconst version = \"15.4.7\";\nwindow.next = {\n    version,\n    appDir: true\n};\nfunction loadScriptsInSequence(scripts, hydrate) {\n    if (!scripts || !scripts.length) {\n        return hydrate();\n    }\n    return scripts.reduce((promise, param)=>{\n        let [src, props] = param;\n        return promise.then(()=>{\n            return new Promise((resolve, reject)=>{\n                const el = document.createElement('script');\n                if (props) {\n                    for(const key in props){\n                        if (key !== 'children') {\n                            el.setAttribute(key, props[key]);\n                        }\n                    }\n                }\n                if (src) {\n                    el.src = src;\n                    el.onload = ()=>resolve();\n                    el.onerror = reject;\n                } else if (props) {\n                    el.innerHTML = props.children;\n                    setTimeout(resolve);\n                }\n                document.head.appendChild(el);\n            });\n        });\n    }, Promise.resolve()).catch((err)=>{\n        console.error(err);\n    // Still try to hydrate even if there's an error.\n    }).then(()=>{\n        hydrate();\n    });\n}\nfunction appBootstrap(hydrate) {\n    loadScriptsInSequence(self.__next_s, ()=>{\n        // If the static shell is being debugged, skip hydration if the\n        // `__nextppronly` query is present. This is only enabled when the\n        // environment variable `__NEXT_EXPERIMENTAL_STATIC_SHELL_DEBUGGING` is\n        // set to `1`. Otherwise the following is optimized out.\n        if (false) {}\n        hydrate();\n    });\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=app-bootstrap.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvYXBwLWJvb3RzdHJhcC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Q0FLQzs7OztnREFxRGVBOzs7ZUFBQUE7OztBQW5EaEIsTUFBTUMsVUFBVUMsUUFBUUM7QUFFeEJFLE9BQU9DLElBQUksR0FBRztJQUNaTDtJQUNBTSxRQUFRO0FBQ1Y7QUFFQSxTQUFTQyxzQkFDUEMsT0FBd0QsRUFDeERDLE9BQW1CO0lBRW5CLElBQUksQ0FBQ0QsV0FBVyxDQUFDQSxRQUFRRSxNQUFNLEVBQUU7UUFDL0IsT0FBT0Q7SUFDVDtJQUVBLE9BQU9ELFFBQ0pHLE1BQU0sQ0FBQyxDQUFDQyxTQUFBQTtZQUFTLENBQUNDLEtBQUtDLE1BQU07UUFDNUIsT0FBT0YsUUFBUUcsSUFBSSxDQUFDO1lBQ2xCLE9BQU8sSUFBSUMsUUFBYyxDQUFDQyxTQUFTQztnQkFDakMsTUFBTUMsS0FBS0MsU0FBU0MsYUFBYSxDQUFDO2dCQUVsQyxJQUFJUCxPQUFPO29CQUNULElBQUssTUFBTVEsT0FBT1IsTUFBTzt3QkFDdkIsSUFBSVEsUUFBUSxZQUFZOzRCQUN0QkgsR0FBR0ksWUFBWSxDQUFDRCxLQUFLUixLQUFLLENBQUNRLElBQUk7d0JBQ2pDO29CQUNGO2dCQUNGO2dCQUVBLElBQUlULEtBQUs7b0JBQ1BNLEdBQUdOLEdBQUcsR0FBR0E7b0JBQ1RNLEdBQUdLLE1BQU0sR0FBRyxJQUFNUDtvQkFDbEJFLEdBQUdNLE9BQU8sR0FBR1A7Z0JBQ2YsT0FBTyxJQUFJSixPQUFPO29CQUNoQkssR0FBR08sU0FBUyxHQUFHWixNQUFNYSxRQUFRO29CQUM3QkMsV0FBV1g7Z0JBQ2I7Z0JBRUFHLFNBQVNTLElBQUksQ0FBQ0MsV0FBVyxDQUFDWDtZQUM1QjtRQUNGO0lBQ0YsR0FBR0gsUUFBUUMsT0FBTyxJQUNqQmMsS0FBSyxDQUFDLENBQUNDO1FBQ05DLFFBQVFDLEtBQUssQ0FBQ0Y7SUFDZCxpREFBaUQ7SUFDbkQsR0FDQ2pCLElBQUksQ0FBQztRQUNKTjtJQUNGO0FBQ0o7QUFFTyxTQUFTVixhQUFhVSxPQUFtQjtJQUM5Q0Ysc0JBQXVCNEIsS0FBYUMsUUFBUSxFQUFFO1FBQzVDLCtEQUErRDtRQUMvRCxrRUFBa0U7UUFDbEUsdUVBQXVFO1FBQ3ZFLHdEQUF3RDtRQUN4RCxJQUFJbkMsS0FBOEQsRUFBRSxFQVduRTtRQUVEUTtJQUNGO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3NyYy9jbGllbnQvYXBwLWJvb3RzdHJhcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJlZm9yZSBzdGFydGluZyB0aGUgTmV4dC5qcyBydW50aW1lIGFuZCByZXF1aXJpbmcgYW55IG1vZHVsZSwgd2UgbmVlZCB0byBtYWtlXG4gKiBzdXJlIHRoZSBmb2xsb3dpbmcgc2NyaXB0cyBhcmUgZXhlY3V0ZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXI6XG4gKiAtIFBvbHlmaWxsc1xuICogLSBuZXh0L3NjcmlwdCB3aXRoIGBiZWZvcmVJbnRlcmFjdGl2ZWAgc3RyYXRlZ3lcbiAqL1xuXG5jb25zdCB2ZXJzaW9uID0gcHJvY2Vzcy5lbnYuX19ORVhUX1ZFUlNJT05cblxud2luZG93Lm5leHQgPSB7XG4gIHZlcnNpb24sXG4gIGFwcERpcjogdHJ1ZSxcbn1cblxuZnVuY3Rpb24gbG9hZFNjcmlwdHNJblNlcXVlbmNlKFxuICBzY3JpcHRzOiBbc3JjOiBzdHJpbmcsIHByb3BzOiB7IFtwcm9wOiBzdHJpbmddOiBhbnkgfV1bXSxcbiAgaHlkcmF0ZTogKCkgPT4gdm9pZFxuKSB7XG4gIGlmICghc2NyaXB0cyB8fCAhc2NyaXB0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gaHlkcmF0ZSgpXG4gIH1cblxuICByZXR1cm4gc2NyaXB0c1xuICAgIC5yZWR1Y2UoKHByb21pc2UsIFtzcmMsIHByb3BzXSkgPT4ge1xuICAgICAgcmV0dXJuIHByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKVxuXG4gICAgICAgICAgaWYgKHByb3BzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wcykge1xuICAgICAgICAgICAgICBpZiAoa2V5ICE9PSAnY2hpbGRyZW4nKSB7XG4gICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKGtleSwgcHJvcHNba2V5XSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgICAgIGVsLnNyYyA9IHNyY1xuICAgICAgICAgICAgZWwub25sb2FkID0gKCkgPT4gcmVzb2x2ZSgpXG4gICAgICAgICAgICBlbC5vbmVycm9yID0gcmVqZWN0XG4gICAgICAgICAgfSBlbHNlIGlmIChwcm9wcykge1xuICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gcHJvcHMuY2hpbGRyZW5cbiAgICAgICAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGVsKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9LCBQcm9taXNlLnJlc29sdmUoKSlcbiAgICAuY2F0Y2goKGVycjogRXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgLy8gU3RpbGwgdHJ5IHRvIGh5ZHJhdGUgZXZlbiBpZiB0aGVyZSdzIGFuIGVycm9yLlxuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgaHlkcmF0ZSgpXG4gICAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcEJvb3RzdHJhcChoeWRyYXRlOiAoKSA9PiB2b2lkKSB7XG4gIGxvYWRTY3JpcHRzSW5TZXF1ZW5jZSgoc2VsZiBhcyBhbnkpLl9fbmV4dF9zLCAoKSA9PiB7XG4gICAgLy8gSWYgdGhlIHN0YXRpYyBzaGVsbCBpcyBiZWluZyBkZWJ1Z2dlZCwgc2tpcCBoeWRyYXRpb24gaWYgdGhlXG4gICAgLy8gYF9fbmV4dHBwcm9ubHlgIHF1ZXJ5IGlzIHByZXNlbnQuIFRoaXMgaXMgb25seSBlbmFibGVkIHdoZW4gdGhlXG4gICAgLy8gZW52aXJvbm1lbnQgdmFyaWFibGUgYF9fTkVYVF9FWFBFUklNRU5UQUxfU1RBVElDX1NIRUxMX0RFQlVHR0lOR2AgaXNcbiAgICAvLyBzZXQgdG8gYDFgLiBPdGhlcndpc2UgdGhlIGZvbGxvd2luZyBpcyBvcHRpbWl6ZWQgb3V0LlxuICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfRVhQRVJJTUVOVEFMX1NUQVRJQ19TSEVMTF9ERUJVR0dJTkcgPT09ICcxJykge1xuICAgICAgY29uc3Qgc2VhcmNoID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKVxuICAgICAgaWYgKFxuICAgICAgICBzZWFyY2guZ2V0KCdfX25leHRwcHJvbmx5JykgPT09ICdmYWxsYmFjaycgfHxcbiAgICAgICAgc2VhcmNoLmdldCgnX19uZXh0cHByb25seScpID09PSAnMSdcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFNraXBwaW5nIGh5ZHJhdGlvbiBkdWUgdG8gX19uZXh0cHByb25seT0ke3NlYXJjaC5nZXQoJ19fbmV4dHBwcm9ubHknKX1gXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaHlkcmF0ZSgpXG4gIH0pXG59XG4iXSwibmFtZXMiOlsiYXBwQm9vdHN0cmFwIiwidmVyc2lvbiIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfVkVSU0lPTiIsIndpbmRvdyIsIm5leHQiLCJhcHBEaXIiLCJsb2FkU2NyaXB0c0luU2VxdWVuY2UiLCJzY3JpcHRzIiwiaHlkcmF0ZSIsImxlbmd0aCIsInJlZHVjZSIsInByb21pc2UiLCJzcmMiLCJwcm9wcyIsInRoZW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImVsIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwia2V5Iiwic2V0QXR0cmlidXRlIiwib25sb2FkIiwib25lcnJvciIsImlubmVySFRNTCIsImNoaWxkcmVuIiwic2V0VGltZW91dCIsImhlYWQiLCJhcHBlbmRDaGlsZCIsImNhdGNoIiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwic2VsZiIsIl9fbmV4dF9zIiwiX19ORVhUX0VYUEVSSU1FTlRBTF9TVEFUSUNfU0hFTExfREVCVUdHSU5HIiwic2VhcmNoIiwiVVJMU2VhcmNoUGFyYW1zIiwibG9jYXRpb24iLCJnZXQiLCJ3YXJuIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-bootstrap.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-build-id.js":
/*!***************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-build-id.js ***!
  \***************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("// This gets assigned as a side-effect during app initialization. Because it\n// represents the build used to create the JS bundle, it should never change\n// after being set, so we store it in a global variable.\n//\n// When performing RSC requests, if the incoming data has a different build ID,\n// we perform an MPA navigation/refresh to load the updated build and ensure\n// that the client and server in sync.\n// Starts as an empty string. In practice, because setAppBuildId is called\n// during initialization before hydration starts, this will always get\n// reassigned to the actual build ID before it's ever needed by a navigation.\n// If for some reasons it didn't, due to a bug or race condition, then on\n// navigation the build comparision would fail and trigger an MPA navigation.\n\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    getAppBuildId: function() {\n        return getAppBuildId;\n    },\n    setAppBuildId: function() {\n        return setAppBuildId;\n    }\n});\nlet globalBuildId = '';\nfunction setAppBuildId(buildId) {\n    globalBuildId = buildId;\n}\nfunction getAppBuildId() {\n    return globalBuildId;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=app-build-id.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvYXBwLWJ1aWxkLWlkLmpzIiwibWFwcGluZ3MiOiJBQUFBLDRFQUE0RTtBQUM1RSw0RUFBNEU7QUFDNUUsd0RBQXdEO0FBQ3hELEVBQUU7QUFDRiwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLHNDQUFzQztBQUV0QywwRUFBMEU7QUFDMUUsc0VBQXNFO0FBQ3RFLDZFQUE2RTtBQUM3RSx5RUFBeUU7QUFDekUsNkVBQTZFOzs7Ozs7Ozs7Ozs7O0lBTzdEQSxhQUFhO2VBQWJBOztJQUpBQyxhQUFhO2VBQWJBOzs7QUFGaEIsSUFBSUMsZ0JBQXdCO0FBRXJCLFNBQVNELGNBQWNFLE9BQWU7SUFDM0NELGdCQUFnQkM7QUFDbEI7QUFFTyxTQUFTSDtJQUNkLE9BQU9FO0FBQ1QiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3NyYy9jbGllbnQvYXBwLWJ1aWxkLWlkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgZ2V0cyBhc3NpZ25lZCBhcyBhIHNpZGUtZWZmZWN0IGR1cmluZyBhcHAgaW5pdGlhbGl6YXRpb24uIEJlY2F1c2UgaXRcbi8vIHJlcHJlc2VudHMgdGhlIGJ1aWxkIHVzZWQgdG8gY3JlYXRlIHRoZSBKUyBidW5kbGUsIGl0IHNob3VsZCBuZXZlciBjaGFuZ2Vcbi8vIGFmdGVyIGJlaW5nIHNldCwgc28gd2Ugc3RvcmUgaXQgaW4gYSBnbG9iYWwgdmFyaWFibGUuXG4vL1xuLy8gV2hlbiBwZXJmb3JtaW5nIFJTQyByZXF1ZXN0cywgaWYgdGhlIGluY29taW5nIGRhdGEgaGFzIGEgZGlmZmVyZW50IGJ1aWxkIElELFxuLy8gd2UgcGVyZm9ybSBhbiBNUEEgbmF2aWdhdGlvbi9yZWZyZXNoIHRvIGxvYWQgdGhlIHVwZGF0ZWQgYnVpbGQgYW5kIGVuc3VyZVxuLy8gdGhhdCB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgaW4gc3luYy5cblxuLy8gU3RhcnRzIGFzIGFuIGVtcHR5IHN0cmluZy4gSW4gcHJhY3RpY2UsIGJlY2F1c2Ugc2V0QXBwQnVpbGRJZCBpcyBjYWxsZWRcbi8vIGR1cmluZyBpbml0aWFsaXphdGlvbiBiZWZvcmUgaHlkcmF0aW9uIHN0YXJ0cywgdGhpcyB3aWxsIGFsd2F5cyBnZXRcbi8vIHJlYXNzaWduZWQgdG8gdGhlIGFjdHVhbCBidWlsZCBJRCBiZWZvcmUgaXQncyBldmVyIG5lZWRlZCBieSBhIG5hdmlnYXRpb24uXG4vLyBJZiBmb3Igc29tZSByZWFzb25zIGl0IGRpZG4ndCwgZHVlIHRvIGEgYnVnIG9yIHJhY2UgY29uZGl0aW9uLCB0aGVuIG9uXG4vLyBuYXZpZ2F0aW9uIHRoZSBidWlsZCBjb21wYXJpc2lvbiB3b3VsZCBmYWlsIGFuZCB0cmlnZ2VyIGFuIE1QQSBuYXZpZ2F0aW9uLlxubGV0IGdsb2JhbEJ1aWxkSWQ6IHN0cmluZyA9ICcnXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBcHBCdWlsZElkKGJ1aWxkSWQ6IHN0cmluZykge1xuICBnbG9iYWxCdWlsZElkID0gYnVpbGRJZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwQnVpbGRJZCgpOiBzdHJpbmcge1xuICByZXR1cm4gZ2xvYmFsQnVpbGRJZFxufVxuIl0sIm5hbWVzIjpbImdldEFwcEJ1aWxkSWQiLCJzZXRBcHBCdWlsZElkIiwiZ2xvYmFsQnVpbGRJZCIsImJ1aWxkSWQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-build-id.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-call-server.js":
/*!******************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-call-server.js ***!
  \******************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"callServer\", ({\n    enumerable: true,\n    get: function() {\n        return callServer;\n    }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./components/router-reducer/router-reducer-types */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _useactionqueue = __webpack_require__(/*! ./components/use-action-queue */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/use-action-queue.js\");\nasync function callServer(actionId, actionArgs) {\n    return new Promise((resolve, reject)=>{\n        (0, _react.startTransition)(()=>{\n            (0, _useactionqueue.dispatchAppRouterAction)({\n                type: _routerreducertypes.ACTION_SERVER_ACTION,\n                actionId,\n                actionArgs,\n                resolve,\n                reject\n            });\n        });\n    });\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=app-call-server.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvYXBwLWNhbGwtc2VydmVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7OENBSXNCQTs7O2VBQUFBOzs7bUNBSlU7Z0RBQ0s7NENBQ0c7QUFFakMsZUFBZUEsV0FBV0MsUUFBZ0IsRUFBRUMsVUFBaUI7SUFDbEUsT0FBTyxJQUFJQyxRQUFRLENBQUNDLFNBQVNDO1FBQzNCQyxDQUFBQSxHQUFBQSxPQUFBQSxlQUFBQSxFQUFnQjtZQUNkQyxDQUFBQSxHQUFBQSxnQkFBQUEsdUJBQUFBLEVBQXdCO2dCQUN0QkMsTUFBTUMsb0JBQUFBLG9CQUFvQjtnQkFDMUJSO2dCQUNBQztnQkFDQUU7Z0JBQ0FDO1lBQ0Y7UUFDRjtJQUNGO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3NyYy9jbGllbnQvYXBwLWNhbGwtc2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0YXJ0VHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQUNUSU9OX1NFUlZFUl9BQ1RJT04gfSBmcm9tICcuL2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcm91dGVyLXJlZHVjZXItdHlwZXMnXG5pbXBvcnQgeyBkaXNwYXRjaEFwcFJvdXRlckFjdGlvbiB9IGZyb20gJy4vY29tcG9uZW50cy91c2UtYWN0aW9uLXF1ZXVlJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2FsbFNlcnZlcihhY3Rpb25JZDogc3RyaW5nLCBhY3Rpb25BcmdzOiBhbnlbXSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PiB7XG4gICAgICBkaXNwYXRjaEFwcFJvdXRlckFjdGlvbih7XG4gICAgICAgIHR5cGU6IEFDVElPTl9TRVJWRVJfQUNUSU9OLFxuICAgICAgICBhY3Rpb25JZCxcbiAgICAgICAgYWN0aW9uQXJncyxcbiAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgcmVqZWN0LFxuICAgICAgfSlcbiAgICB9KVxuICB9KVxufVxuIl0sIm5hbWVzIjpbImNhbGxTZXJ2ZXIiLCJhY3Rpb25JZCIsImFjdGlvbkFyZ3MiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInN0YXJ0VHJhbnNpdGlvbiIsImRpc3BhdGNoQXBwUm91dGVyQWN0aW9uIiwidHlwZSIsIkFDVElPTl9TRVJWRVJfQUNUSU9OIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-call-server.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-find-source-map-url.js":
/*!**************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-find-source-map-url.js ***!
  \**************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"findSourceMapURL\", ({\n    enumerable: true,\n    get: function() {\n        return findSourceMapURL;\n    }\n}));\nconst basePath =  false || '';\nconst pathname = \"\" + basePath + \"/__nextjs_source-map\";\nconst findSourceMapURL =  true ? function findSourceMapURL(filename) {\n    if (filename === '') {\n        return null;\n    }\n    if (filename.startsWith(document.location.origin) && filename.includes('/_next/static')) {\n        // This is a request for a client chunk. This can only happen when\n        // using Turbopack. In this case, since we control how those source\n        // maps are generated, we can safely assume that the sourceMappingURL\n        // is relative to the filename, with an added `.map` extension. The\n        // browser can just request this file, and it gets served through the\n        // normal dev server, without the need to route this through\n        // the `/__nextjs_source-map` dev middleware.\n        return \"\" + filename + \".map\";\n    }\n    const url = new URL(pathname, document.location.origin);\n    url.searchParams.set('filename', filename);\n    return url.href;\n} : 0;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=app-find-source-map-url.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvYXBwLWZpbmQtc291cmNlLW1hcC11cmwuanMiLCJtYXBwaW5ncyI6Ijs7OztvREFHYUE7OztlQUFBQTs7O0FBSGIsTUFBTUMsV0FBV0MsTUFBa0MsSUFBSTtBQUN2RCxNQUFNRyxXQUFZLEtBQUVKLFdBQVM7QUFFdEIsTUFBTUQsbUJBQ1hFLEtBQW9CLEdBQ2hCLFNBQVNGLGlCQUFpQk8sUUFBZ0I7SUFDeEMsSUFBSUEsYUFBYSxJQUFJO1FBQ25CLE9BQU87SUFDVDtJQUVBLElBQ0VBLFNBQVNDLFVBQVUsQ0FBQ0MsU0FBU0MsUUFBUSxDQUFDQyxNQUFNLEtBQzVDSixTQUFTSyxRQUFRLENBQUMsa0JBQ2xCO1FBQ0Esa0VBQWtFO1FBQ2xFLG1FQUFtRTtRQUNuRSxxRUFBcUU7UUFDckUsbUVBQW1FO1FBQ25FLHFFQUFxRTtRQUNyRSw0REFBNEQ7UUFDNUQsNkNBQTZDO1FBQzdDLE9BQVEsS0FBRUwsV0FBUztJQUNyQjtJQUVBLE1BQU1NLE1BQU0sSUFBSUMsSUFBSVQsVUFBVUksU0FBU0MsUUFBUSxDQUFDQyxNQUFNO0lBQ3RERSxJQUFJRSxZQUFZLENBQUNDLEdBQUcsQ0FBQyxZQUFZVDtJQUVqQyxPQUFPTSxJQUFJSSxJQUFJO0FBQ2pCLElBQ0FDLENBQVNBIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9zcmMvY2xpZW50L2FwcC1maW5kLXNvdXJjZS1tYXAtdXJsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGJhc2VQYXRoID0gcHJvY2Vzcy5lbnYuX19ORVhUX1JPVVRFUl9CQVNFUEFUSCB8fCAnJ1xuY29uc3QgcGF0aG5hbWUgPSBgJHtiYXNlUGF0aH0vX19uZXh0anNfc291cmNlLW1hcGBcblxuZXhwb3J0IGNvbnN0IGZpbmRTb3VyY2VNYXBVUkwgPVxuICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50J1xuICAgID8gZnVuY3Rpb24gZmluZFNvdXJjZU1hcFVSTChmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmIChmaWxlbmFtZSA9PT0gJycpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZpbGVuYW1lLnN0YXJ0c1dpdGgoZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKSAmJlxuICAgICAgICAgIGZpbGVuYW1lLmluY2x1ZGVzKCcvX25leHQvc3RhdGljJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBhIHJlcXVlc3QgZm9yIGEgY2xpZW50IGNodW5rLiBUaGlzIGNhbiBvbmx5IGhhcHBlbiB3aGVuXG4gICAgICAgICAgLy8gdXNpbmcgVHVyYm9wYWNrLiBJbiB0aGlzIGNhc2UsIHNpbmNlIHdlIGNvbnRyb2wgaG93IHRob3NlIHNvdXJjZVxuICAgICAgICAgIC8vIG1hcHMgYXJlIGdlbmVyYXRlZCwgd2UgY2FuIHNhZmVseSBhc3N1bWUgdGhhdCB0aGUgc291cmNlTWFwcGluZ1VSTFxuICAgICAgICAgIC8vIGlzIHJlbGF0aXZlIHRvIHRoZSBmaWxlbmFtZSwgd2l0aCBhbiBhZGRlZCBgLm1hcGAgZXh0ZW5zaW9uLiBUaGVcbiAgICAgICAgICAvLyBicm93c2VyIGNhbiBqdXN0IHJlcXVlc3QgdGhpcyBmaWxlLCBhbmQgaXQgZ2V0cyBzZXJ2ZWQgdGhyb3VnaCB0aGVcbiAgICAgICAgICAvLyBub3JtYWwgZGV2IHNlcnZlciwgd2l0aG91dCB0aGUgbmVlZCB0byByb3V0ZSB0aGlzIHRocm91Z2hcbiAgICAgICAgICAvLyB0aGUgYC9fX25leHRqc19zb3VyY2UtbWFwYCBkZXYgbWlkZGxld2FyZS5cbiAgICAgICAgICByZXR1cm4gYCR7ZmlsZW5hbWV9Lm1hcGBcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocGF0aG5hbWUsIGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpbilcbiAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2ZpbGVuYW1lJywgZmlsZW5hbWUpXG5cbiAgICAgICAgcmV0dXJuIHVybC5ocmVmXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWRcbiJdLCJuYW1lcyI6WyJmaW5kU291cmNlTWFwVVJMIiwiYmFzZVBhdGgiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX1JPVVRFUl9CQVNFUEFUSCIsInBhdGhuYW1lIiwiTk9ERV9FTlYiLCJmaWxlbmFtZSIsInN0YXJ0c1dpdGgiLCJkb2N1bWVudCIsImxvY2F0aW9uIiwib3JpZ2luIiwiaW5jbHVkZXMiLCJ1cmwiLCJVUkwiLCJzZWFyY2hQYXJhbXMiLCJzZXQiLCJocmVmIiwidW5kZWZpbmVkIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-find-source-map-url.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-globals.js":
/*!**************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-globals.js ***!
  \**************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("// imports polyfill from `@next/polyfill-module` after build.\n\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n__webpack_require__(/*! ../build/polyfills/polyfill-module */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/build/polyfills/polyfill-module.js\");\n// Only setup devtools in development\nif (true) {\n    __webpack_require__(/*! ../next-devtools/userspace/app/app-dev-overlay-setup */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-setup.js\");\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=app-globals.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvYXBwLWdsb2JhbHMuanMiLCJtYXBwaW5ncyI6IkFBQUEsNkRBQTZEOzs7OztvQkFDdEQ7QUFFUCxxQ0FBcUM7QUFDckMsSUFBSUEsSUFBb0IsRUFBbUI7SUFDekNHLG1CQUFPQSxDQUFDLDJTQUFzRDtBQUNoRSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvc3JjL2NsaWVudC9hcHAtZ2xvYmFscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnRzIHBvbHlmaWxsIGZyb20gYEBuZXh0L3BvbHlmaWxsLW1vZHVsZWAgYWZ0ZXIgYnVpbGQuXG5pbXBvcnQgJy4uL2J1aWxkL3BvbHlmaWxscy9wb2x5ZmlsbC1tb2R1bGUnXG5cbi8vIE9ubHkgc2V0dXAgZGV2dG9vbHMgaW4gZGV2ZWxvcG1lbnRcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHJlcXVpcmUoJy4uL25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9hcHAtZGV2LW92ZXJsYXktc2V0dXAnKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvYXBwLWRldi1vdmVybGF5LXNldHVwJylcbn1cbiJdLCJuYW1lcyI6WyJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJyZXF1aXJlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-globals.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-index.js":
/*!************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-index.js ***!
  \************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"hydrate\", ({\n    enumerable: true,\n    get: function() {\n        return hydrate;\n    }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/jsx-runtime.js\");\n__webpack_require__(/*! ./app-globals */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-globals.js\");\nconst _client = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react-dom/client */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/client.js\"));\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"));\nconst _client1 = __webpack_require__(/*! react-server-dom-webpack/client */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-server-dom-webpack/client.browser.js\");\nconst _headmanagercontextsharedruntime = __webpack_require__(/*! ../shared/lib/head-manager-context.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\");\nconst _onrecoverableerror = __webpack_require__(/*! ./react-client-callbacks/on-recoverable-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js\");\nconst _errorboundarycallbacks = __webpack_require__(/*! ./react-client-callbacks/error-boundary-callbacks */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/react-client-callbacks/error-boundary-callbacks.js\");\nconst _appcallserver = __webpack_require__(/*! ./app-call-server */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-call-server.js\");\nconst _appfindsourcemapurl = __webpack_require__(/*! ./app-find-source-map-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-find-source-map-url.js\");\nconst _approuterinstance = __webpack_require__(/*! ./components/app-router-instance */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router-instance.js\");\nconst _approuter = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./components/app-router */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router.js\"));\nconst _createinitialrouterstate = __webpack_require__(/*! ./components/router-reducer/create-initial-router-state */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _appbuildid = __webpack_require__(/*! ./app-build-id */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-build-id.js\");\nconst _isbot = __webpack_require__(/*! ../shared/lib/router/utils/is-bot */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/is-bot.js\");\n/// <reference types=\"react-dom/experimental\" />\nconst createFromReadableStream = _client1.createFromReadableStream;\nconst appElement = document;\nconst encoder = new TextEncoder();\nlet initialServerDataBuffer = undefined;\nlet initialServerDataWriter = undefined;\nlet initialServerDataLoaded = false;\nlet initialServerDataFlushed = false;\nlet initialFormStateData = null;\nfunction nextServerDataCallback(seg) {\n    if (seg[0] === 0) {\n        initialServerDataBuffer = [];\n    } else if (seg[0] === 1) {\n        if (!initialServerDataBuffer) throw Object.defineProperty(new Error('Unexpected server data: missing bootstrap script.'), \"__NEXT_ERROR_CODE\", {\n            value: \"E18\",\n            enumerable: false,\n            configurable: true\n        });\n        if (initialServerDataWriter) {\n            initialServerDataWriter.enqueue(encoder.encode(seg[1]));\n        } else {\n            initialServerDataBuffer.push(seg[1]);\n        }\n    } else if (seg[0] === 2) {\n        initialFormStateData = seg[1];\n    } else if (seg[0] === 3) {\n        if (!initialServerDataBuffer) throw Object.defineProperty(new Error('Unexpected server data: missing bootstrap script.'), \"__NEXT_ERROR_CODE\", {\n            value: \"E18\",\n            enumerable: false,\n            configurable: true\n        });\n        // Decode the base64 string back to binary data.\n        const binaryString = atob(seg[1]);\n        const decodedChunk = new Uint8Array(binaryString.length);\n        for(var i = 0; i < binaryString.length; i++){\n            decodedChunk[i] = binaryString.charCodeAt(i);\n        }\n        if (initialServerDataWriter) {\n            initialServerDataWriter.enqueue(decodedChunk);\n        } else {\n            initialServerDataBuffer.push(decodedChunk);\n        }\n    }\n}\nfunction isStreamErrorOrUnfinished(ctr) {\n    // If `desiredSize` is null, it means the stream is closed or errored. If it is lower than 0, the stream is still unfinished.\n    return ctr.desiredSize === null || ctr.desiredSize < 0;\n}\n// There might be race conditions between `nextServerDataRegisterWriter` and\n// `DOMContentLoaded`. The former will be called when React starts to hydrate\n// the root, the latter will be called when the DOM is fully loaded.\n// For streaming, the former is called first due to partial hydration.\n// For non-streaming, the latter can be called first.\n// Hence, we use two variables `initialServerDataLoaded` and\n// `initialServerDataFlushed` to make sure the writer will be closed and\n// `initialServerDataBuffer` will be cleared in the right time.\nfunction nextServerDataRegisterWriter(ctr) {\n    if (initialServerDataBuffer) {\n        initialServerDataBuffer.forEach((val)=>{\n            ctr.enqueue(typeof val === 'string' ? encoder.encode(val) : val);\n        });\n        if (initialServerDataLoaded && !initialServerDataFlushed) {\n            if (isStreamErrorOrUnfinished(ctr)) {\n                ctr.error(Object.defineProperty(new Error('The connection to the page was unexpectedly closed, possibly due to the stop button being clicked, loss of Wi-Fi, or an unstable internet connection.'), \"__NEXT_ERROR_CODE\", {\n                    value: \"E117\",\n                    enumerable: false,\n                    configurable: true\n                }));\n            } else {\n                ctr.close();\n            }\n            initialServerDataFlushed = true;\n            initialServerDataBuffer = undefined;\n        }\n    }\n    initialServerDataWriter = ctr;\n}\n// When `DOMContentLoaded`, we can close all pending writers to finish hydration.\nconst DOMContentLoaded = function() {\n    if (initialServerDataWriter && !initialServerDataFlushed) {\n        initialServerDataWriter.close();\n        initialServerDataFlushed = true;\n        initialServerDataBuffer = undefined;\n    }\n    initialServerDataLoaded = true;\n};\n_c = DOMContentLoaded;\n// It's possible that the DOM is already loaded.\nif (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', DOMContentLoaded, false);\n} else {\n    // Delayed in marco task to ensure it's executed later than hydration\n    setTimeout(DOMContentLoaded);\n}\nconst nextServerDataLoadingGlobal = self.__next_f = self.__next_f || [];\nnextServerDataLoadingGlobal.forEach(nextServerDataCallback);\nnextServerDataLoadingGlobal.push = nextServerDataCallback;\nconst readable = new ReadableStream({\n    start (controller) {\n        nextServerDataRegisterWriter(controller);\n    }\n});\nconst initialServerResponse = createFromReadableStream(readable, {\n    callServer: _appcallserver.callServer,\n    findSourceMapURL: _appfindsourcemapurl.findSourceMapURL\n});\nfunction ServerRoot(param) {\n    let { pendingActionQueue } = param;\n    const initialRSCPayload = (0, _react.use)(initialServerResponse);\n    const actionQueue = (0, _react.use)(pendingActionQueue);\n    const router = /*#__PURE__*/ (0, _jsxruntime.jsx)(_approuter.default, {\n        gracefullyDegrade: (0, _isbot.isBot)(window.navigator.userAgent),\n        actionQueue: actionQueue,\n        globalErrorState: initialRSCPayload.G,\n        assetPrefix: initialRSCPayload.p\n    });\n    if ( true && initialRSCPayload.m) {\n        // We provide missing slot information in a context provider only during development\n        // as we log some additional information about the missing slots in the console.\n        return /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.MissingSlotContext, {\n            value: initialRSCPayload.m,\n            children: router\n        });\n    }\n    return router;\n}\n_c1 = ServerRoot;\nconst StrictModeIfEnabled =  true ? _react.default.StrictMode : 0;\nfunction Root(param) {\n    let { children } = param;\n    if (false) {}\n    return children;\n}\n_c2 = Root;\nfunction onDefaultTransitionIndicator() {\n    // TODO: Compose default with user-configureable (e.g. nprogress)\n    // TODO: Use React's default once we figure out hanging indicators: https://codesandbox.io/p/sandbox/charming-moon-hktkp6?file=%2Fsrc%2Findex.js%3A106%2C30\n    return ()=>{};\n}\nconst reactRootOptions = {\n    onDefaultTransitionIndicator: onDefaultTransitionIndicator,\n    onRecoverableError: _onrecoverableerror.onRecoverableError,\n    onCaughtError: _errorboundarycallbacks.onCaughtError,\n    onUncaughtError: _errorboundarycallbacks.onUncaughtError\n};\nfunction hydrate(instrumentationHooks) {\n    // React overrides `.then` and doesn't return a new promise chain,\n    // so we wrap the action queue in a promise to ensure that its value\n    // is defined when the promise resolves.\n    // https://github.com/facebook/react/blob/163365a07872337e04826c4f501565d43dbd2fd4/packages/react-client/src/ReactFlightClient.js#L189-L190\n    const pendingActionQueue = new Promise((resolve, reject)=>{\n        initialServerResponse.then((initialRSCPayload)=>{\n            // setAppBuildId should be called only once, during JS initialization\n            // and before any components have hydrated.\n            (0, _appbuildid.setAppBuildId)(initialRSCPayload.b);\n            const initialTimestamp = Date.now();\n            resolve((0, _approuterinstance.createMutableActionQueue)((0, _createinitialrouterstate.createInitialRouterState)({\n                navigatedAt: initialTimestamp,\n                initialFlightData: initialRSCPayload.f,\n                initialCanonicalUrlParts: initialRSCPayload.c,\n                initialParallelRoutes: new Map(),\n                location: window.location,\n                couldBeIntercepted: initialRSCPayload.i,\n                postponed: initialRSCPayload.s,\n                prerendered: initialRSCPayload.S\n            }), instrumentationHooks));\n        }, (err)=>reject(err));\n    });\n    const reactEl = /*#__PURE__*/ (0, _jsxruntime.jsx)(StrictModeIfEnabled, {\n        children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_headmanagercontextsharedruntime.HeadManagerContext.Provider, {\n            value: {\n                appDir: true\n            },\n            children: /*#__PURE__*/ (0, _jsxruntime.jsx)(Root, {\n                children: /*#__PURE__*/ (0, _jsxruntime.jsx)(ServerRoot, {\n                    pendingActionQueue: pendingActionQueue\n                })\n            })\n        })\n    });\n    if (document.documentElement.id === '__next_error__') {\n        let element = reactEl;\n        // Server rendering failed, fall back to client-side rendering\n        if (true) {\n            const { createRootLevelDevOverlayElement } = __webpack_require__(/*! ../next-devtools/userspace/app/client-entry */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/client-entry.js\");\n            // Note this won't cause hydration mismatch because we are doing CSR w/o hydration\n            element = createRootLevelDevOverlayElement(element);\n        }\n        _client.default.createRoot(appElement, reactRootOptions).render(element);\n    } else {\n        _react.default.startTransition(()=>{\n            _client.default.hydrateRoot(appElement, reactEl, {\n                ...reactRootOptions,\n                formState: initialFormStateData\n            });\n        });\n    }\n    // TODO-APP: Remove this logic when Float has GC built-in in development.\n    if (true) {\n        const { linkGc } = __webpack_require__(/*! ./app-link-gc */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-link-gc.js\");\n        linkGc();\n    }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=app-index.js.map\nvar _c, _c1, _c2;\n$RefreshReg$(_c, \"DOMContentLoaded\");\n$RefreshReg$(_c1, \"ServerRoot\");\n$RefreshReg$(_c2, \"Root\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvYXBwLWluZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7MkNBb09nQkE7OztlQUFBQTs7Ozs7O29CQXBPVDs2RUFDb0I7NkVBQ0E7cUNBR2lEOzZEQUN6QztnREFDQTtvREFJNUI7MkNBQ29CO2lEQUNNOytDQUkxQjtnRkFDZTtzREFFbUI7MkRBQ047d0NBQ0w7bUNBQ1I7QUFFdEIsZ0RBQWdEO0FBRWhELE1BQU1DLDJCQUNKQyxTQUFBQSx3QkFBK0I7QUFFakMsTUFBTUMsYUFBcUNDO0FBRTNDLE1BQU1DLFVBQVUsSUFBSUM7QUFFcEIsSUFBSUMsMEJBQStEQztBQUNuRSxJQUFJQywwQkFDRkQ7QUFDRixJQUFJRSwwQkFBMEI7QUFDOUIsSUFBSUMsMkJBQTJCO0FBRS9CLElBQUlDLHVCQUFtQztBQW1CdkMsU0FBU0MsdUJBQXVCQyxHQUFrQjtJQUNoRCxJQUFJQSxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUc7UUFDaEJQLDBCQUEwQixFQUFFO0lBQzlCLE9BQU8sSUFBSU8sR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHO1FBQ3ZCLElBQUksQ0FBQ1AseUJBQ0gsTUFBTSxxQkFBOEQsQ0FBOUQsSUFBSVEsTUFBTSxzREFBVjttQkFBQTt3QkFBQTswQkFBQTtRQUE2RDtRQUVyRSxJQUFJTix5QkFBeUI7WUFDM0JBLHdCQUF3Qk8sT0FBTyxDQUFDWCxRQUFRWSxNQUFNLENBQUNILEdBQUcsQ0FBQyxFQUFFO1FBQ3ZELE9BQU87WUFDTFAsd0JBQXdCVyxJQUFJLENBQUNKLEdBQUcsQ0FBQyxFQUFFO1FBQ3JDO0lBQ0YsT0FBTyxJQUFJQSxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUc7UUFDdkJGLHVCQUF1QkUsR0FBRyxDQUFDLEVBQUU7SUFDL0IsT0FBTyxJQUFJQSxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUc7UUFDdkIsSUFBSSxDQUFDUCx5QkFDSCxNQUFNLHFCQUE4RCxDQUE5RCxJQUFJUSxNQUFNLHNEQUFWO21CQUFBO3dCQUFBOzBCQUFBO1FBQTZEO1FBRXJFLGdEQUFnRDtRQUNoRCxNQUFNSSxlQUFlQyxLQUFLTixHQUFHLENBQUMsRUFBRTtRQUNoQyxNQUFNTyxlQUFlLElBQUlDLFdBQVdILGFBQWFJLE1BQU07UUFDdkQsSUFBSyxJQUFJQyxJQUFJLEdBQUdBLElBQUlMLGFBQWFJLE1BQU0sRUFBRUMsSUFBSztZQUM1Q0gsWUFBWSxDQUFDRyxFQUFFLEdBQUdMLGFBQWFNLFVBQVUsQ0FBQ0Q7UUFDNUM7UUFFQSxJQUFJZix5QkFBeUI7WUFDM0JBLHdCQUF3Qk8sT0FBTyxDQUFDSztRQUNsQyxPQUFPO1lBQ0xkLHdCQUF3QlcsSUFBSSxDQUFDRztRQUMvQjtJQUNGO0FBQ0Y7QUFFQSxTQUFTSywwQkFBMEJDLEdBQW9DO0lBQ3JFLDZIQUE2SDtJQUM3SCxPQUFPQSxJQUFJQyxXQUFXLEtBQUssUUFBUUQsSUFBSUMsV0FBVyxHQUFHO0FBQ3ZEO0FBRUEsNEVBQTRFO0FBQzVFLDZFQUE2RTtBQUM3RSxvRUFBb0U7QUFDcEUsc0VBQXNFO0FBQ3RFLHFEQUFxRDtBQUNyRCw0REFBNEQ7QUFDNUQsd0VBQXdFO0FBQ3hFLCtEQUErRDtBQUMvRCxTQUFTQyw2QkFBNkJGLEdBQW9DO0lBQ3hFLElBQUlwQix5QkFBeUI7UUFDM0JBLHdCQUF3QnVCLE9BQU8sQ0FBQyxDQUFDQztZQUMvQkosSUFBSVgsT0FBTyxDQUFDLE9BQU9lLFFBQVEsV0FBVzFCLFFBQVFZLE1BQU0sQ0FBQ2MsT0FBT0E7UUFDOUQ7UUFDQSxJQUFJckIsMkJBQTJCLENBQUNDLDBCQUEwQjtZQUN4RCxJQUFJZSwwQkFBMEJDLE1BQU07Z0JBQ2xDQSxJQUFJSyxLQUFLLENBQ1AscUJBRUMsQ0FGRCxJQUFJakIsTUFDRiwwSkFERjsyQkFBQTtnQ0FBQTtrQ0FBQTtnQkFFQTtZQUVKLE9BQU87Z0JBQ0xZLElBQUlNLEtBQUs7WUFDWDtZQUNBdEIsMkJBQTJCO1lBQzNCSiwwQkFBMEJDO1FBQzVCO0lBQ0Y7SUFFQUMsMEJBQTBCa0I7QUFDNUI7QUFFQSxpRkFBaUY7QUFDakYsTUFBTU8sbUJBQW1CO0lBQ3ZCLElBQUl6QiwyQkFBMkIsQ0FBQ0UsMEJBQTBCO1FBQ3hERix3QkFBd0J3QixLQUFLO1FBQzdCdEIsMkJBQTJCO1FBQzNCSiwwQkFBMEJDO0lBQzVCO0lBQ0FFLDBCQUEwQjtBQUM1Qjs7QUFFQSxnREFBZ0Q7QUFDaEQsSUFBSU4sU0FBUytCLFVBQVUsS0FBSyxXQUFXO0lBQ3JDL0IsU0FBU2dDLGdCQUFnQixDQUFDLG9CQUFvQkYsa0JBQWtCO0FBQ2xFLE9BQU87SUFDTCxxRUFBcUU7SUFDckVHLFdBQVdIO0FBQ2I7QUFFQSxNQUFNSSw4QkFBK0JDLEtBQUtDLFFBQVEsR0FBR0QsS0FBS0MsUUFBUSxJQUFJLEVBQUU7QUFDeEVGLDRCQUE0QlIsT0FBTyxDQUFDakI7QUFDcEN5Qiw0QkFBNEJwQixJQUFJLEdBQUdMO0FBRW5DLE1BQU00QixXQUFXLElBQUlDLGVBQWU7SUFDbENDLE9BQU1DLFVBQVU7UUFDZGYsNkJBQTZCZTtJQUMvQjtBQUNGO0FBRUEsTUFBTUMsd0JBQXdCNUMseUJBQzVCd0MsVUFDQTtJQUFFSyxZQUFBQSxlQUFBQSxVQUFVO0lBQUVDLGtCQUFBQSxxQkFBQUEsZ0JBQWdCO0FBQUM7QUFHakMsb0JBQW9CLEtBSW5CO0lBSm1CLE1BQ2xCRSxrQkFBa0IsRUFHbkIsR0FKbUI7SUFLbEIsTUFBTUMsb0JBQW9CQyxDQUFBQSxHQUFBQSxPQUFBQSxHQUFHLEVBQUNOO0lBQzlCLE1BQU1PLGNBQWNELENBQUFBLEdBQUFBLE9BQUFBLEdBQUFBLEVBQTBCRjtJQUU5QyxNQUFNSSxTQUFBQSxXQUFBQSxHQUNKLHFCQUFDQyxXQUFBQSxPQUFTO1FBQ1JDLG1CQUFtQkMsQ0FBQUEsR0FBQUEsT0FBQUEsS0FBQUEsRUFBTUMsT0FBT0MsU0FBUyxDQUFDQyxTQUFTO1FBQ25EUCxhQUFhQTtRQUNiUSxrQkFBa0JWLGtCQUFrQlcsQ0FBQztRQUNyQ0MsYUFBYVosa0JBQWtCYSxDQUFDOztJQUlwQyxJQUFJQyxLQUFvQixJQUFzQmQsa0JBQWtCaUIsQ0FBQyxFQUFFO1FBQ2pFLG9GQUFvRjtRQUNwRixnRkFBZ0Y7UUFDaEYsT0FDRSxXQURGLEdBQ0UscUJBQUNDLCtCQUFBQSxrQkFBa0I7WUFBQ0MsT0FBT25CLGtCQUFrQmlCLENBQUM7c0JBQzNDZDs7SUFHUDtJQUVBLE9BQU9BO0FBQ1Q7TUE1QlNMO0FBOEJULE1BQU1zQixzQkFBc0JOLEtBQWtDLEdBQzFEUSxPQUFBQSxPQUFLLENBQUNDLFVBQVUsR0FDaEJELENBQWM7QUFFbEIsU0FBU0csS0FBSyxLQUF5QztJQUF6QyxNQUFFQyxRQUFRLEVBQStCLEdBQXpDO0lBQ1osSUFBSVosS0FBNEIsRUFBRSxFQU9qQztJQUVELE9BQU9ZO0FBQ1Q7O0FBRUEsU0FBU1E7SUFDUCxpRUFBaUU7SUFDakUsMkpBQTJKO0lBQzNKLE9BQU8sS0FBTztBQUNoQjtBQUVBLE1BQU1DLG1CQUErQztJQUNuREQsOEJBQThCQTtJQUM5QkUsb0JBQUFBLG9CQUFBQSxrQkFBa0I7SUFDbEJDLGVBQUFBLHdCQUFBQSxhQUFhO0lBQ2JDLGlCQUFBQSx3QkFBQUEsZUFBZTtBQUNqQjtBQVNPLFNBQVN4RixRQUNkeUYsb0JBQXVEO0lBRXZELGtFQUFrRTtJQUNsRSxvRUFBb0U7SUFDcEUsd0NBQXdDO0lBQ3hDLDJJQUEySTtJQUMzSSxNQUFNeEMscUJBQW9ELElBQUl5QyxRQUM1RCxDQUFDQyxTQUFTQztRQUNSL0Msc0JBQXNCZ0QsSUFBSSxDQUN4QixDQUFDM0M7WUFDQyxxRUFBcUU7WUFDckUsMkNBQTJDO1lBQzNDNEMsQ0FBQUEsR0FBQUEsWUFBQUEsYUFBQUEsRUFBYzVDLGtCQUFrQjZDLENBQUM7WUFFakMsTUFBTUMsbUJBQW1CQyxLQUFLZixHQUFHO1lBRWpDUyxRQUNFTyxDQUFBQSxHQUFBQSxtQkFBQUEsd0JBQUFBLEVBQ0VDLENBQUFBLEdBQUFBLDBCQUFBQSx3QkFBQUEsRUFBeUI7Z0JBQ3ZCQyxhQUFhSjtnQkFDYkssbUJBQW1CbkQsa0JBQWtCb0QsQ0FBQztnQkFDdENDLDBCQUEwQnJELGtCQUFrQnNELENBQUM7Z0JBQzdDQyx1QkFBdUIsSUFBSUM7Z0JBQzNCQyxVQUFVbEQsT0FBT2tELFFBQVE7Z0JBQ3pCQyxvQkFBb0IxRCxrQkFBa0IxQixDQUFDO2dCQUN2Q3FGLFdBQVczRCxrQkFBa0I0RCxDQUFDO2dCQUM5QkMsYUFBYTdELGtCQUFrQjhELENBQUM7WUFDbEMsSUFDQXZCO1FBR04sR0FDQSxDQUFDd0IsTUFBZXJCLE9BQU9xQjtJQUUzQjtJQUdGLE1BQU1DLFVBQUFBLFdBQUFBLEdBQ0oscUJBQUM1QyxxQkFBQUE7a0JBQ0MsbUNBQUM2QyxpQ0FBQUEsa0JBQWtCLENBQUNDLFFBQVE7WUFBQy9DLE9BQU87Z0JBQUVnRCxRQUFRO1lBQUs7c0JBQ2pELG1DQUFDMUMsTUFBQUE7MEJBQ0MsbUNBQUMzQixZQUFBQTtvQkFBV0Msb0JBQW9CQTs7Ozs7SUFNeEMsSUFBSTdDLFNBQVNrSCxlQUFlLENBQUNDLEVBQUUsS0FBSyxrQkFBa0I7UUFDcEQsSUFBSUMsVUFBVU47UUFDZCw4REFBOEQ7UUFDOUQsSUFBSWxELElBQW9CLEVBQW1CO1lBQ3pDLE1BQU0sRUFBRXlELGdDQUFnQyxFQUFFLEdBQ3hDQyxtQkFBT0EsQ0FBQyx5UkFBNkM7WUFFdkQsa0ZBQWtGO1lBQ2xGRixVQUFVQyxpQ0FBaUNEO1FBQzdDO1FBRUFHLFFBQUFBLE9BQWMsQ0FBQ0MsVUFBVSxDQUFDekgsWUFBWWtGLGtCQUFrQndDLE1BQU0sQ0FBQ0w7SUFDakUsT0FBTztRQUNMaEQsT0FBQUEsT0FBSyxDQUFDc0QsZUFBZSxDQUFDO1lBQ3BCSCxRQUFBQSxPQUFjLENBQUNJLFdBQVcsQ0FBQzVILFlBQVkrRyxTQUFTO2dCQUM5QyxHQUFHN0IsZ0JBQWdCO2dCQUNuQjJDLFdBQVdwSDtZQUNiO1FBQ0Y7SUFDRjtJQUVBLHlFQUF5RTtJQUN6RSxJQUFJb0QsSUFBb0IsRUFBbUI7UUFDekMsTUFBTSxFQUFFaUUsTUFBTSxFQUFFLEdBQ2RQLG1CQUFPQSxDQUFDLHFPQUFlO1FBQ3pCTztJQUNGO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3NyYy9jbGllbnQvYXBwLWluZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJy4vYXBwLWdsb2JhbHMnXG5pbXBvcnQgUmVhY3RET01DbGllbnQgZnJvbSAncmVhY3QtZG9tL2NsaWVudCdcbmltcG9ydCBSZWFjdCwgeyB1c2UgfSBmcm9tICdyZWFjdCdcbi8vIFRPRE86IEV4cGxpY2l0bHkgaW1wb3J0IGZyb20gY2xpZW50LmJyb3dzZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCB7IGNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbSBhcyBjcmVhdGVGcm9tUmVhZGFibGVTdHJlYW1Ccm93c2VyIH0gZnJvbSAncmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrL2NsaWVudCdcbmltcG9ydCB7IEhlYWRNYW5hZ2VyQ29udGV4dCB9IGZyb20gJy4uL3NoYXJlZC9saWIvaGVhZC1tYW5hZ2VyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyBvblJlY292ZXJhYmxlRXJyb3IgfSBmcm9tICcuL3JlYWN0LWNsaWVudC1jYWxsYmFja3Mvb24tcmVjb3ZlcmFibGUtZXJyb3InXG5pbXBvcnQge1xuICBvbkNhdWdodEVycm9yLFxuICBvblVuY2F1Z2h0RXJyb3IsXG59IGZyb20gJy4vcmVhY3QtY2xpZW50LWNhbGxiYWNrcy9lcnJvci1ib3VuZGFyeS1jYWxsYmFja3MnXG5pbXBvcnQgeyBjYWxsU2VydmVyIH0gZnJvbSAnLi9hcHAtY2FsbC1zZXJ2ZXInXG5pbXBvcnQgeyBmaW5kU291cmNlTWFwVVJMIH0gZnJvbSAnLi9hcHAtZmluZC1zb3VyY2UtbWFwLXVybCdcbmltcG9ydCB7XG4gIHR5cGUgQXBwUm91dGVyQWN0aW9uUXVldWUsXG4gIGNyZWF0ZU11dGFibGVBY3Rpb25RdWV1ZSxcbn0gZnJvbSAnLi9jb21wb25lbnRzL2FwcC1yb3V0ZXItaW5zdGFuY2UnXG5pbXBvcnQgQXBwUm91dGVyIGZyb20gJy4vY29tcG9uZW50cy9hcHAtcm91dGVyJ1xuaW1wb3J0IHR5cGUgeyBJbml0aWFsUlNDUGF5bG9hZCB9IGZyb20gJy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHsgY3JlYXRlSW5pdGlhbFJvdXRlclN0YXRlIH0gZnJvbSAnLi9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2NyZWF0ZS1pbml0aWFsLXJvdXRlci1zdGF0ZSdcbmltcG9ydCB7IE1pc3NpbmdTbG90Q29udGV4dCB9IGZyb20gJy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgc2V0QXBwQnVpbGRJZCB9IGZyb20gJy4vYXBwLWJ1aWxkLWlkJ1xuaW1wb3J0IHsgaXNCb3QgfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pcy1ib3QnXG5cbi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwicmVhY3QtZG9tL2V4cGVyaW1lbnRhbFwiIC8+XG5cbmNvbnN0IGNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbSA9XG4gIGNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbUJyb3dzZXIgYXMgKHR5cGVvZiBpbXBvcnQoJ3JlYWN0LXNlcnZlci1kb20td2VicGFjay9jbGllbnQuYnJvd3NlcicpKVsnY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtJ11cblxuY29uc3QgYXBwRWxlbWVudDogSFRNTEVsZW1lbnQgfCBEb2N1bWVudCA9IGRvY3VtZW50XG5cbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKVxuXG5sZXQgaW5pdGlhbFNlcnZlckRhdGFCdWZmZXI6IChzdHJpbmcgfCBVaW50OEFycmF5KVtdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5sZXQgaW5pdGlhbFNlcnZlckRhdGFXcml0ZXI6IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgfCB1bmRlZmluZWQgPVxuICB1bmRlZmluZWRcbmxldCBpbml0aWFsU2VydmVyRGF0YUxvYWRlZCA9IGZhbHNlXG5sZXQgaW5pdGlhbFNlcnZlckRhdGFGbHVzaGVkID0gZmFsc2VcblxubGV0IGluaXRpYWxGb3JtU3RhdGVEYXRhOiBudWxsIHwgYW55ID0gbnVsbFxuXG50eXBlIEZsaWdodFNlZ21lbnQgPVxuICB8IFtpc0Jvb3RTdHJhcDogMF1cbiAgfCBbaXNOb3RCb290c3RyYXA6IDEsIHJlc3BvbnNlUGFydGlhbDogc3RyaW5nXVxuICB8IFtpc0Zvcm1TdGF0ZTogMiwgZm9ybVN0YXRlOiBhbnldXG4gIHwgW2lzQmluYXJ5OiAzLCByZXNwb25zZUJhc2U2NFBhcnRpYWw6IHN0cmluZ11cblxudHlwZSBOZXh0RmxpZ2h0ID0gT21pdDxBcnJheTxGbGlnaHRTZWdtZW50PiwgJ3B1c2gnPiAmIHtcbiAgcHVzaDogKHNlZzogRmxpZ2h0U2VnbWVudCkgPT4gdm9pZFxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIC8vIElmIHlvdSdyZSB3b3JraW5nIGluIGEgYnJvd3NlciBlbnZpcm9ubWVudFxuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBfX25leHRfZjogTmV4dEZsaWdodFxuICB9XG59XG5cbmZ1bmN0aW9uIG5leHRTZXJ2ZXJEYXRhQ2FsbGJhY2soc2VnOiBGbGlnaHRTZWdtZW50KTogdm9pZCB7XG4gIGlmIChzZWdbMF0gPT09IDApIHtcbiAgICBpbml0aWFsU2VydmVyRGF0YUJ1ZmZlciA9IFtdXG4gIH0gZWxzZSBpZiAoc2VnWzBdID09PSAxKSB7XG4gICAgaWYgKCFpbml0aWFsU2VydmVyRGF0YUJ1ZmZlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzZXJ2ZXIgZGF0YTogbWlzc2luZyBib290c3RyYXAgc2NyaXB0LicpXG5cbiAgICBpZiAoaW5pdGlhbFNlcnZlckRhdGFXcml0ZXIpIHtcbiAgICAgIGluaXRpYWxTZXJ2ZXJEYXRhV3JpdGVyLmVucXVldWUoZW5jb2Rlci5lbmNvZGUoc2VnWzFdKSlcbiAgICB9IGVsc2Uge1xuICAgICAgaW5pdGlhbFNlcnZlckRhdGFCdWZmZXIucHVzaChzZWdbMV0pXG4gICAgfVxuICB9IGVsc2UgaWYgKHNlZ1swXSA9PT0gMikge1xuICAgIGluaXRpYWxGb3JtU3RhdGVEYXRhID0gc2VnWzFdXG4gIH0gZWxzZSBpZiAoc2VnWzBdID09PSAzKSB7XG4gICAgaWYgKCFpbml0aWFsU2VydmVyRGF0YUJ1ZmZlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzZXJ2ZXIgZGF0YTogbWlzc2luZyBib290c3RyYXAgc2NyaXB0LicpXG5cbiAgICAvLyBEZWNvZGUgdGhlIGJhc2U2NCBzdHJpbmcgYmFjayB0byBiaW5hcnkgZGF0YS5cbiAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSBhdG9iKHNlZ1sxXSlcbiAgICBjb25zdCBkZWNvZGVkQ2h1bmsgPSBuZXcgVWludDhBcnJheShiaW5hcnlTdHJpbmcubGVuZ3RoKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmluYXJ5U3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZWNvZGVkQ2h1bmtbaV0gPSBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpKVxuICAgIH1cblxuICAgIGlmIChpbml0aWFsU2VydmVyRGF0YVdyaXRlcikge1xuICAgICAgaW5pdGlhbFNlcnZlckRhdGFXcml0ZXIuZW5xdWV1ZShkZWNvZGVkQ2h1bmspXG4gICAgfSBlbHNlIHtcbiAgICAgIGluaXRpYWxTZXJ2ZXJEYXRhQnVmZmVyLnB1c2goZGVjb2RlZENodW5rKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N0cmVhbUVycm9yT3JVbmZpbmlzaGVkKGN0cjogUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcikge1xuICAvLyBJZiBgZGVzaXJlZFNpemVgIGlzIG51bGwsIGl0IG1lYW5zIHRoZSBzdHJlYW0gaXMgY2xvc2VkIG9yIGVycm9yZWQuIElmIGl0IGlzIGxvd2VyIHRoYW4gMCwgdGhlIHN0cmVhbSBpcyBzdGlsbCB1bmZpbmlzaGVkLlxuICByZXR1cm4gY3RyLmRlc2lyZWRTaXplID09PSBudWxsIHx8IGN0ci5kZXNpcmVkU2l6ZSA8IDBcbn1cblxuLy8gVGhlcmUgbWlnaHQgYmUgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gYG5leHRTZXJ2ZXJEYXRhUmVnaXN0ZXJXcml0ZXJgIGFuZFxuLy8gYERPTUNvbnRlbnRMb2FkZWRgLiBUaGUgZm9ybWVyIHdpbGwgYmUgY2FsbGVkIHdoZW4gUmVhY3Qgc3RhcnRzIHRvIGh5ZHJhdGVcbi8vIHRoZSByb290LCB0aGUgbGF0dGVyIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIERPTSBpcyBmdWxseSBsb2FkZWQuXG4vLyBGb3Igc3RyZWFtaW5nLCB0aGUgZm9ybWVyIGlzIGNhbGxlZCBmaXJzdCBkdWUgdG8gcGFydGlhbCBoeWRyYXRpb24uXG4vLyBGb3Igbm9uLXN0cmVhbWluZywgdGhlIGxhdHRlciBjYW4gYmUgY2FsbGVkIGZpcnN0LlxuLy8gSGVuY2UsIHdlIHVzZSB0d28gdmFyaWFibGVzIGBpbml0aWFsU2VydmVyRGF0YUxvYWRlZGAgYW5kXG4vLyBgaW5pdGlhbFNlcnZlckRhdGFGbHVzaGVkYCB0byBtYWtlIHN1cmUgdGhlIHdyaXRlciB3aWxsIGJlIGNsb3NlZCBhbmRcbi8vIGBpbml0aWFsU2VydmVyRGF0YUJ1ZmZlcmAgd2lsbCBiZSBjbGVhcmVkIGluIHRoZSByaWdodCB0aW1lLlxuZnVuY3Rpb24gbmV4dFNlcnZlckRhdGFSZWdpc3RlcldyaXRlcihjdHI6IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIpIHtcbiAgaWYgKGluaXRpYWxTZXJ2ZXJEYXRhQnVmZmVyKSB7XG4gICAgaW5pdGlhbFNlcnZlckRhdGFCdWZmZXIuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICBjdHIuZW5xdWV1ZSh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/IGVuY29kZXIuZW5jb2RlKHZhbCkgOiB2YWwpXG4gICAgfSlcbiAgICBpZiAoaW5pdGlhbFNlcnZlckRhdGFMb2FkZWQgJiYgIWluaXRpYWxTZXJ2ZXJEYXRhRmx1c2hlZCkge1xuICAgICAgaWYgKGlzU3RyZWFtRXJyb3JPclVuZmluaXNoZWQoY3RyKSkge1xuICAgICAgICBjdHIuZXJyb3IoXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ1RoZSBjb25uZWN0aW9uIHRvIHRoZSBwYWdlIHdhcyB1bmV4cGVjdGVkbHkgY2xvc2VkLCBwb3NzaWJseSBkdWUgdG8gdGhlIHN0b3AgYnV0dG9uIGJlaW5nIGNsaWNrZWQsIGxvc3Mgb2YgV2ktRmksIG9yIGFuIHVuc3RhYmxlIGludGVybmV0IGNvbm5lY3Rpb24uJ1xuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3RyLmNsb3NlKClcbiAgICAgIH1cbiAgICAgIGluaXRpYWxTZXJ2ZXJEYXRhRmx1c2hlZCA9IHRydWVcbiAgICAgIGluaXRpYWxTZXJ2ZXJEYXRhQnVmZmVyID0gdW5kZWZpbmVkXG4gICAgfVxuICB9XG5cbiAgaW5pdGlhbFNlcnZlckRhdGFXcml0ZXIgPSBjdHJcbn1cblxuLy8gV2hlbiBgRE9NQ29udGVudExvYWRlZGAsIHdlIGNhbiBjbG9zZSBhbGwgcGVuZGluZyB3cml0ZXJzIHRvIGZpbmlzaCBoeWRyYXRpb24uXG5jb25zdCBET01Db250ZW50TG9hZGVkID0gZnVuY3Rpb24gKCkge1xuICBpZiAoaW5pdGlhbFNlcnZlckRhdGFXcml0ZXIgJiYgIWluaXRpYWxTZXJ2ZXJEYXRhRmx1c2hlZCkge1xuICAgIGluaXRpYWxTZXJ2ZXJEYXRhV3JpdGVyLmNsb3NlKClcbiAgICBpbml0aWFsU2VydmVyRGF0YUZsdXNoZWQgPSB0cnVlXG4gICAgaW5pdGlhbFNlcnZlckRhdGFCdWZmZXIgPSB1bmRlZmluZWRcbiAgfVxuICBpbml0aWFsU2VydmVyRGF0YUxvYWRlZCA9IHRydWVcbn1cblxuLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBET00gaXMgYWxyZWFkeSBsb2FkZWQuXG5pZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBET01Db250ZW50TG9hZGVkLCBmYWxzZSlcbn0gZWxzZSB7XG4gIC8vIERlbGF5ZWQgaW4gbWFyY28gdGFzayB0byBlbnN1cmUgaXQncyBleGVjdXRlZCBsYXRlciB0aGFuIGh5ZHJhdGlvblxuICBzZXRUaW1lb3V0KERPTUNvbnRlbnRMb2FkZWQpXG59XG5cbmNvbnN0IG5leHRTZXJ2ZXJEYXRhTG9hZGluZ0dsb2JhbCA9IChzZWxmLl9fbmV4dF9mID0gc2VsZi5fX25leHRfZiB8fCBbXSlcbm5leHRTZXJ2ZXJEYXRhTG9hZGluZ0dsb2JhbC5mb3JFYWNoKG5leHRTZXJ2ZXJEYXRhQ2FsbGJhY2spXG5uZXh0U2VydmVyRGF0YUxvYWRpbmdHbG9iYWwucHVzaCA9IG5leHRTZXJ2ZXJEYXRhQ2FsbGJhY2tcblxuY29uc3QgcmVhZGFibGUgPSBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICBzdGFydChjb250cm9sbGVyKSB7XG4gICAgbmV4dFNlcnZlckRhdGFSZWdpc3RlcldyaXRlcihjb250cm9sbGVyKVxuICB9LFxufSlcblxuY29uc3QgaW5pdGlhbFNlcnZlclJlc3BvbnNlID0gY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtPEluaXRpYWxSU0NQYXlsb2FkPihcbiAgcmVhZGFibGUsXG4gIHsgY2FsbFNlcnZlciwgZmluZFNvdXJjZU1hcFVSTCB9XG4pXG5cbmZ1bmN0aW9uIFNlcnZlclJvb3Qoe1xuICBwZW5kaW5nQWN0aW9uUXVldWUsXG59OiB7XG4gIHBlbmRpbmdBY3Rpb25RdWV1ZTogUHJvbWlzZTxBcHBSb3V0ZXJBY3Rpb25RdWV1ZT5cbn0pOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBpbml0aWFsUlNDUGF5bG9hZCA9IHVzZShpbml0aWFsU2VydmVyUmVzcG9uc2UpXG4gIGNvbnN0IGFjdGlvblF1ZXVlID0gdXNlPEFwcFJvdXRlckFjdGlvblF1ZXVlPihwZW5kaW5nQWN0aW9uUXVldWUpXG5cbiAgY29uc3Qgcm91dGVyID0gKFxuICAgIDxBcHBSb3V0ZXJcbiAgICAgIGdyYWNlZnVsbHlEZWdyYWRlPXtpc0JvdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCl9XG4gICAgICBhY3Rpb25RdWV1ZT17YWN0aW9uUXVldWV9XG4gICAgICBnbG9iYWxFcnJvclN0YXRlPXtpbml0aWFsUlNDUGF5bG9hZC5HfVxuICAgICAgYXNzZXRQcmVmaXg9e2luaXRpYWxSU0NQYXlsb2FkLnB9XG4gICAgLz5cbiAgKVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyAmJiBpbml0aWFsUlNDUGF5bG9hZC5tKSB7XG4gICAgLy8gV2UgcHJvdmlkZSBtaXNzaW5nIHNsb3QgaW5mb3JtYXRpb24gaW4gYSBjb250ZXh0IHByb3ZpZGVyIG9ubHkgZHVyaW5nIGRldmVsb3BtZW50XG4gICAgLy8gYXMgd2UgbG9nIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWlzc2luZyBzbG90cyBpbiB0aGUgY29uc29sZS5cbiAgICByZXR1cm4gKFxuICAgICAgPE1pc3NpbmdTbG90Q29udGV4dCB2YWx1ZT17aW5pdGlhbFJTQ1BheWxvYWQubX0+XG4gICAgICAgIHtyb3V0ZXJ9XG4gICAgICA8L01pc3NpbmdTbG90Q29udGV4dD5cbiAgICApXG4gIH1cblxuICByZXR1cm4gcm91dGVyXG59XG5cbmNvbnN0IFN0cmljdE1vZGVJZkVuYWJsZWQgPSBwcm9jZXNzLmVudi5fX05FWFRfU1RSSUNUX01PREVfQVBQXG4gID8gUmVhY3QuU3RyaWN0TW9kZVxuICA6IFJlYWN0LkZyYWdtZW50XG5cbmZ1bmN0aW9uIFJvb3QoeyBjaGlsZHJlbiB9OiBSZWFjdC5Qcm9wc1dpdGhDaGlsZHJlbjx7fT4pIHtcbiAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9URVNUX01PREUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgd2luZG93Ll9fTkVYVF9IWURSQVRFRCA9IHRydWVcbiAgICAgIHdpbmRvdy5fX05FWFRfSFlEUkFURURfQVQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgICAgd2luZG93Ll9fTkVYVF9IWURSQVRFRF9DQj8uKClcbiAgICB9LCBbXSlcbiAgfVxuXG4gIHJldHVybiBjaGlsZHJlblxufVxuXG5mdW5jdGlvbiBvbkRlZmF1bHRUcmFuc2l0aW9uSW5kaWNhdG9yKCkge1xuICAvLyBUT0RPOiBDb21wb3NlIGRlZmF1bHQgd2l0aCB1c2VyLWNvbmZpZ3VyZWFibGUgKGUuZy4gbnByb2dyZXNzKVxuICAvLyBUT0RPOiBVc2UgUmVhY3QncyBkZWZhdWx0IG9uY2Ugd2UgZmlndXJlIG91dCBoYW5naW5nIGluZGljYXRvcnM6IGh0dHBzOi8vY29kZXNhbmRib3guaW8vcC9zYW5kYm94L2NoYXJtaW5nLW1vb24taGt0a3A2P2ZpbGU9JTJGc3JjJTJGaW5kZXguanMlM0ExMDYlMkMzMFxuICByZXR1cm4gKCkgPT4ge31cbn1cblxuY29uc3QgcmVhY3RSb290T3B0aW9uczogUmVhY3RET01DbGllbnQuUm9vdE9wdGlvbnMgPSB7XG4gIG9uRGVmYXVsdFRyYW5zaXRpb25JbmRpY2F0b3I6IG9uRGVmYXVsdFRyYW5zaXRpb25JbmRpY2F0b3IsXG4gIG9uUmVjb3ZlcmFibGVFcnJvcixcbiAgb25DYXVnaHRFcnJvcixcbiAgb25VbmNhdWdodEVycm9yLFxufVxuXG5leHBvcnQgdHlwZSBDbGllbnRJbnN0cnVtZW50YXRpb25Ib29rcyA9IHtcbiAgb25Sb3V0ZXJUcmFuc2l0aW9uU3RhcnQ/OiAoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgbmF2aWdhdGlvblR5cGU6ICdwdXNoJyB8ICdyZXBsYWNlJyB8ICd0cmF2ZXJzZSdcbiAgKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoeWRyYXRlKFxuICBpbnN0cnVtZW50YXRpb25Ib29rczogQ2xpZW50SW5zdHJ1bWVudGF0aW9uSG9va3MgfCBudWxsXG4pIHtcbiAgLy8gUmVhY3Qgb3ZlcnJpZGVzIGAudGhlbmAgYW5kIGRvZXNuJ3QgcmV0dXJuIGEgbmV3IHByb21pc2UgY2hhaW4sXG4gIC8vIHNvIHdlIHdyYXAgdGhlIGFjdGlvbiBxdWV1ZSBpbiBhIHByb21pc2UgdG8gZW5zdXJlIHRoYXQgaXRzIHZhbHVlXG4gIC8vIGlzIGRlZmluZWQgd2hlbiB0aGUgcHJvbWlzZSByZXNvbHZlcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvMTYzMzY1YTA3ODcyMzM3ZTA0ODI2YzRmNTAxNTY1ZDQzZGJkMmZkNC9wYWNrYWdlcy9yZWFjdC1jbGllbnQvc3JjL1JlYWN0RmxpZ2h0Q2xpZW50LmpzI0wxODktTDE5MFxuICBjb25zdCBwZW5kaW5nQWN0aW9uUXVldWU6IFByb21pc2U8QXBwUm91dGVyQWN0aW9uUXVldWU+ID0gbmV3IFByb21pc2UoXG4gICAgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaW5pdGlhbFNlcnZlclJlc3BvbnNlLnRoZW4oXG4gICAgICAgIChpbml0aWFsUlNDUGF5bG9hZCkgPT4ge1xuICAgICAgICAgIC8vIHNldEFwcEJ1aWxkSWQgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IG9uY2UsIGR1cmluZyBKUyBpbml0aWFsaXphdGlvblxuICAgICAgICAgIC8vIGFuZCBiZWZvcmUgYW55IGNvbXBvbmVudHMgaGF2ZSBoeWRyYXRlZC5cbiAgICAgICAgICBzZXRBcHBCdWlsZElkKGluaXRpYWxSU0NQYXlsb2FkLmIpXG5cbiAgICAgICAgICBjb25zdCBpbml0aWFsVGltZXN0YW1wID0gRGF0ZS5ub3coKVxuXG4gICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgIGNyZWF0ZU11dGFibGVBY3Rpb25RdWV1ZShcbiAgICAgICAgICAgICAgY3JlYXRlSW5pdGlhbFJvdXRlclN0YXRlKHtcbiAgICAgICAgICAgICAgICBuYXZpZ2F0ZWRBdDogaW5pdGlhbFRpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICBpbml0aWFsRmxpZ2h0RGF0YTogaW5pdGlhbFJTQ1BheWxvYWQuZixcbiAgICAgICAgICAgICAgICBpbml0aWFsQ2Fub25pY2FsVXJsUGFydHM6IGluaXRpYWxSU0NQYXlsb2FkLmMsXG4gICAgICAgICAgICAgICAgaW5pdGlhbFBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKCksXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHdpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgICAgICAgICBjb3VsZEJlSW50ZXJjZXB0ZWQ6IGluaXRpYWxSU0NQYXlsb2FkLmksXG4gICAgICAgICAgICAgICAgcG9zdHBvbmVkOiBpbml0aWFsUlNDUGF5bG9hZC5zLFxuICAgICAgICAgICAgICAgIHByZXJlbmRlcmVkOiBpbml0aWFsUlNDUGF5bG9hZC5TLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uSG9va3NcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICAgIChlcnI6IEVycm9yKSA9PiByZWplY3QoZXJyKVxuICAgICAgKVxuICAgIH1cbiAgKVxuXG4gIGNvbnN0IHJlYWN0RWwgPSAoXG4gICAgPFN0cmljdE1vZGVJZkVuYWJsZWQ+XG4gICAgICA8SGVhZE1hbmFnZXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt7IGFwcERpcjogdHJ1ZSB9fT5cbiAgICAgICAgPFJvb3Q+XG4gICAgICAgICAgPFNlcnZlclJvb3QgcGVuZGluZ0FjdGlvblF1ZXVlPXtwZW5kaW5nQWN0aW9uUXVldWV9IC8+XG4gICAgICAgIDwvUm9vdD5cbiAgICAgIDwvSGVhZE1hbmFnZXJDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvU3RyaWN0TW9kZUlmRW5hYmxlZD5cbiAgKVxuXG4gIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuaWQgPT09ICdfX25leHRfZXJyb3JfXycpIHtcbiAgICBsZXQgZWxlbWVudCA9IHJlYWN0RWxcbiAgICAvLyBTZXJ2ZXIgcmVuZGVyaW5nIGZhaWxlZCwgZmFsbCBiYWNrIHRvIGNsaWVudC1zaWRlIHJlbmRlcmluZ1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zdCB7IGNyZWF0ZVJvb3RMZXZlbERldk92ZXJsYXlFbGVtZW50IH0gPVxuICAgICAgICByZXF1aXJlKCcuLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvY2xpZW50LWVudHJ5JykgYXMgdHlwZW9mIGltcG9ydCgnLi4vbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2NsaWVudC1lbnRyeScpXG5cbiAgICAgIC8vIE5vdGUgdGhpcyB3b24ndCBjYXVzZSBoeWRyYXRpb24gbWlzbWF0Y2ggYmVjYXVzZSB3ZSBhcmUgZG9pbmcgQ1NSIHcvbyBoeWRyYXRpb25cbiAgICAgIGVsZW1lbnQgPSBjcmVhdGVSb290TGV2ZWxEZXZPdmVybGF5RWxlbWVudChlbGVtZW50KVxuICAgIH1cblxuICAgIFJlYWN0RE9NQ2xpZW50LmNyZWF0ZVJvb3QoYXBwRWxlbWVudCwgcmVhY3RSb290T3B0aW9ucykucmVuZGVyKGVsZW1lbnQpXG4gIH0gZWxzZSB7XG4gICAgUmVhY3Quc3RhcnRUcmFuc2l0aW9uKCgpID0+IHtcbiAgICAgIFJlYWN0RE9NQ2xpZW50Lmh5ZHJhdGVSb290KGFwcEVsZW1lbnQsIHJlYWN0RWwsIHtcbiAgICAgICAgLi4ucmVhY3RSb290T3B0aW9ucyxcbiAgICAgICAgZm9ybVN0YXRlOiBpbml0aWFsRm9ybVN0YXRlRGF0YSxcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8vIFRPRE8tQVBQOiBSZW1vdmUgdGhpcyBsb2dpYyB3aGVuIEZsb2F0IGhhcyBHQyBidWlsdC1pbiBpbiBkZXZlbG9wbWVudC5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zdCB7IGxpbmtHYyB9ID1cbiAgICAgIHJlcXVpcmUoJy4vYXBwLWxpbmstZ2MnKSBhcyB0eXBlb2YgaW1wb3J0KCcuL2FwcC1saW5rLWdjJylcbiAgICBsaW5rR2MoKVxuICB9XG59XG4iXSwibmFtZXMiOlsiaHlkcmF0ZSIsImNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbSIsImNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbUJyb3dzZXIiLCJhcHBFbGVtZW50IiwiZG9jdW1lbnQiLCJlbmNvZGVyIiwiVGV4dEVuY29kZXIiLCJpbml0aWFsU2VydmVyRGF0YUJ1ZmZlciIsInVuZGVmaW5lZCIsImluaXRpYWxTZXJ2ZXJEYXRhV3JpdGVyIiwiaW5pdGlhbFNlcnZlckRhdGFMb2FkZWQiLCJpbml0aWFsU2VydmVyRGF0YUZsdXNoZWQiLCJpbml0aWFsRm9ybVN0YXRlRGF0YSIsIm5leHRTZXJ2ZXJEYXRhQ2FsbGJhY2siLCJzZWciLCJFcnJvciIsImVucXVldWUiLCJlbmNvZGUiLCJwdXNoIiwiYmluYXJ5U3RyaW5nIiwiYXRvYiIsImRlY29kZWRDaHVuayIsIlVpbnQ4QXJyYXkiLCJsZW5ndGgiLCJpIiwiY2hhckNvZGVBdCIsImlzU3RyZWFtRXJyb3JPclVuZmluaXNoZWQiLCJjdHIiLCJkZXNpcmVkU2l6ZSIsIm5leHRTZXJ2ZXJEYXRhUmVnaXN0ZXJXcml0ZXIiLCJmb3JFYWNoIiwidmFsIiwiZXJyb3IiLCJjbG9zZSIsIkRPTUNvbnRlbnRMb2FkZWQiLCJyZWFkeVN0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInNldFRpbWVvdXQiLCJuZXh0U2VydmVyRGF0YUxvYWRpbmdHbG9iYWwiLCJzZWxmIiwiX19uZXh0X2YiLCJyZWFkYWJsZSIsIlJlYWRhYmxlU3RyZWFtIiwic3RhcnQiLCJjb250cm9sbGVyIiwiaW5pdGlhbFNlcnZlclJlc3BvbnNlIiwiY2FsbFNlcnZlciIsImZpbmRTb3VyY2VNYXBVUkwiLCJTZXJ2ZXJSb290IiwicGVuZGluZ0FjdGlvblF1ZXVlIiwiaW5pdGlhbFJTQ1BheWxvYWQiLCJ1c2UiLCJhY3Rpb25RdWV1ZSIsInJvdXRlciIsIkFwcFJvdXRlciIsImdyYWNlZnVsbHlEZWdyYWRlIiwiaXNCb3QiLCJ3aW5kb3ciLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJnbG9iYWxFcnJvclN0YXRlIiwiRyIsImFzc2V0UHJlZml4IiwicCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIm0iLCJNaXNzaW5nU2xvdENvbnRleHQiLCJ2YWx1ZSIsIlN0cmljdE1vZGVJZkVuYWJsZWQiLCJfX05FWFRfU1RSSUNUX01PREVfQVBQIiwiUmVhY3QiLCJTdHJpY3RNb2RlIiwiRnJhZ21lbnQiLCJSb290IiwiY2hpbGRyZW4iLCJfX05FWFRfVEVTVF9NT0RFIiwidXNlRWZmZWN0IiwiX19ORVhUX0hZRFJBVEVEIiwiX19ORVhUX0hZRFJBVEVEX0FUIiwicGVyZm9ybWFuY2UiLCJub3ciLCJfX05FWFRfSFlEUkFURURfQ0IiLCJvbkRlZmF1bHRUcmFuc2l0aW9uSW5kaWNhdG9yIiwicmVhY3RSb290T3B0aW9ucyIsIm9uUmVjb3ZlcmFibGVFcnJvciIsIm9uQ2F1Z2h0RXJyb3IiLCJvblVuY2F1Z2h0RXJyb3IiLCJpbnN0cnVtZW50YXRpb25Ib29rcyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwidGhlbiIsInNldEFwcEJ1aWxkSWQiLCJiIiwiaW5pdGlhbFRpbWVzdGFtcCIsIkRhdGUiLCJjcmVhdGVNdXRhYmxlQWN0aW9uUXVldWUiLCJjcmVhdGVJbml0aWFsUm91dGVyU3RhdGUiLCJuYXZpZ2F0ZWRBdCIsImluaXRpYWxGbGlnaHREYXRhIiwiZiIsImluaXRpYWxDYW5vbmljYWxVcmxQYXJ0cyIsImMiLCJpbml0aWFsUGFyYWxsZWxSb3V0ZXMiLCJNYXAiLCJsb2NhdGlvbiIsImNvdWxkQmVJbnRlcmNlcHRlZCIsInBvc3Rwb25lZCIsInMiLCJwcmVyZW5kZXJlZCIsIlMiLCJlcnIiLCJyZWFjdEVsIiwiSGVhZE1hbmFnZXJDb250ZXh0IiwiUHJvdmlkZXIiLCJhcHBEaXIiLCJkb2N1bWVudEVsZW1lbnQiLCJpZCIsImVsZW1lbnQiLCJjcmVhdGVSb290TGV2ZWxEZXZPdmVybGF5RWxlbWVudCIsInJlcXVpcmUiLCJSZWFjdERPTUNsaWVudCIsImNyZWF0ZVJvb3QiLCJyZW5kZXIiLCJzdGFydFRyYW5zaXRpb24iLCJoeWRyYXRlUm9vdCIsImZvcm1TdGF0ZSIsImxpbmtHYyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-link-gc.js":
/*!**************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-link-gc.js ***!
  \**************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"linkGc\", ({\n    enumerable: true,\n    get: function() {\n        return linkGc;\n    }\n}));\nfunction linkGc() {\n    // TODO-APP: Remove this logic when Float has GC built-in in development.\n    if (true) {\n        const callback = (mutationList)=>{\n            for (const mutation of mutationList){\n                if (mutation.type === 'childList') {\n                    for (const node of mutation.addedNodes){\n                        if ('tagName' in node && node.tagName === 'LINK') {\n                            var _link_dataset_precedence;\n                            const link = node;\n                            if ((_link_dataset_precedence = link.dataset.precedence) == null ? void 0 : _link_dataset_precedence.startsWith('next')) {\n                                const href = link.getAttribute('href');\n                                if (href) {\n                                    const [resource, version] = href.split('?v=', 2);\n                                    if (version) {\n                                        const currentOrigin = window.location.origin;\n                                        const allLinks = [\n                                            ...document.querySelectorAll('link[href^=\"' + resource + '\"]'),\n                                            // It's possible that the resource is a full URL or only pathname,\n                                            // so we need to remove the alternative href as well.\n                                            ...document.querySelectorAll('link[href^=\"' + (resource.startsWith(currentOrigin) ? resource.slice(currentOrigin.length) : currentOrigin + resource) + '\"]')\n                                        ];\n                                        for (const otherLink of allLinks){\n                                            var _otherLink_dataset_precedence;\n                                            if ((_otherLink_dataset_precedence = otherLink.dataset.precedence) == null ? void 0 : _otherLink_dataset_precedence.startsWith('next')) {\n                                                const otherHref = otherLink.getAttribute('href');\n                                                if (otherHref) {\n                                                    const [, otherVersion] = otherHref.split('?v=', 2);\n                                                    if (!otherVersion || +otherVersion < +version) {\n                                                        // Delay the removal of the stylesheet to avoid FOUC\n                                                        // caused by `@font-face` rules, as they seem to be\n                                                        // a couple of ticks delayed between the old and new\n                                                        // styles being swapped even if the font is cached.\n                                                        setTimeout(()=>{\n                                                            otherLink.remove();\n                                                        }, 5);\n                                                        const preloadLink = document.querySelector('link[rel=\"preload\"][as=\"style\"][href=\"' + otherHref + '\"]');\n                                                        if (preloadLink) {\n                                                            preloadLink.remove();\n                                                        }\n                                                    }\n                                                }\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        };\n        // Create an observer instance linked to the callback function\n        const observer = new MutationObserver(callback);\n        observer.observe(document.head, {\n            childList: true\n        });\n    }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=app-link-gc.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvYXBwLWxpbmstZ2MuanMiLCJtYXBwaW5ncyI6Ijs7OzswQ0FBZ0JBOzs7ZUFBQUE7OztBQUFULFNBQVNBO0lBQ2QseUVBQXlFO0lBQ3pFLElBQUlDLElBQW9CLEVBQW1CO1FBQ3pDLE1BQU1HLFdBQVcsQ0FBQ0M7WUFDaEIsS0FBSyxNQUFNQyxZQUFZRCxhQUFjO2dCQUNuQyxJQUFJQyxTQUFTQyxJQUFJLEtBQUssYUFBYTtvQkFDakMsS0FBSyxNQUFNQyxRQUFRRixTQUFTRyxVQUFVLENBQUU7d0JBQ3RDLElBQ0UsYUFBYUQsUUFDWkEsS0FBeUJFLE9BQU8sS0FBSyxRQUN0QztnQ0FFSUM7NEJBREosTUFBTUEsT0FBT0g7NEJBQ2IsS0FBSUcsMkJBQUFBLEtBQUtDLE9BQU8sQ0FBQ0MsVUFBQUEsS0FBVSxnQkFBdkJGLHlCQUF5QkcsVUFBVSxDQUFDLFNBQVM7Z0NBQy9DLE1BQU1DLE9BQU9KLEtBQUtLLFlBQVksQ0FBQztnQ0FDL0IsSUFBSUQsTUFBTTtvQ0FDUixNQUFNLENBQUNFLFVBQVVDLFFBQVEsR0FBR0gsS0FBS0ksS0FBSyxDQUFDLE9BQU87b0NBQzlDLElBQUlELFNBQVM7d0NBQ1gsTUFBTUUsZ0JBQWdCQyxPQUFPQyxRQUFRLENBQUNDLE1BQU07d0NBQzVDLE1BQU1DLFdBQVc7K0NBQ1pDLFNBQVNDLGdCQUFnQixDQUMxQixpQkFBaUJULFdBQVc7NENBRTlCLGtFQUFrRTs0Q0FDbEUscURBQXFEOytDQUNsRFEsU0FBU0MsZ0JBQWdCLENBQzFCLGlCQUNHVCxDQUFBQSxTQUFTSCxVQUFVLENBQUNNLGlCQUNqQkgsU0FBU1UsS0FBSyxDQUFDUCxjQUFjUSxNQUFNLElBQ25DUixnQkFBZ0JILFFBQUFBLENBQU8sR0FDM0I7eUNBRUw7d0NBRUQsS0FBSyxNQUFNWSxhQUFhTCxTQUFVO2dEQUM1Qks7NENBQUosS0FBSUEsZ0NBQUFBLFVBQVVqQixPQUFPLENBQUNDLFVBQUFBLEtBQVUsZ0JBQTVCZ0IsOEJBQThCZixVQUFVLENBQUMsU0FBUztnREFDcEQsTUFBTWdCLFlBQVlELFVBQVViLFlBQVksQ0FBQztnREFDekMsSUFBSWMsV0FBVztvREFDYixNQUFNLEdBQUdDLGFBQWEsR0FBR0QsVUFBVVgsS0FBSyxDQUFDLE9BQU87b0RBQ2hELElBQUksQ0FBQ1ksZ0JBQWdCLENBQUNBLGVBQWUsQ0FBQ2IsU0FBUzt3REFDN0Msb0RBQW9EO3dEQUNwRCxtREFBbUQ7d0RBQ25ELG9EQUFvRDt3REFDcEQsbURBQW1EO3dEQUNuRGMsV0FBVzs0REFDVEgsVUFBVUksTUFBTTt3REFDbEIsR0FBRzt3REFDSCxNQUFNQyxjQUFjVCxTQUFTVSxhQUFhLENBQ3ZDLDJDQUF3Q0wsWUFBVTt3REFFckQsSUFBSUksYUFBYTs0REFDZkEsWUFBWUQsTUFBTTt3REFDcEI7b0RBQ0Y7Z0RBQ0Y7NENBQ0Y7d0NBQ0Y7b0NBQ0Y7Z0NBQ0Y7NEJBQ0Y7d0JBQ0Y7b0JBQ0Y7Z0JBQ0Y7WUFDRjtRQUNGO1FBRUEsOERBQThEO1FBQzlELE1BQU1HLFdBQVcsSUFBSUMsaUJBQWlCakM7UUFDdENnQyxTQUFTRSxPQUFPLENBQUNiLFNBQVNjLElBQUksRUFBRTtZQUM5QkMsV0FBVztRQUNiO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvc3JjL2NsaWVudC9hcHAtbGluay1nYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gbGlua0djKCkge1xuICAvLyBUT0RPLUFQUDogUmVtb3ZlIHRoaXMgbG9naWMgd2hlbiBGbG9hdCBoYXMgR0MgYnVpbHQtaW4gaW4gZGV2ZWxvcG1lbnQuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAobXV0YXRpb25MaXN0OiBNdXRhdGlvblJlY29yZFtdKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uTGlzdCkge1xuICAgICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gJ2NoaWxkTGlzdCcpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgbXV0YXRpb24uYWRkZWROb2Rlcykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAndGFnTmFtZScgaW4gbm9kZSAmJlxuICAgICAgICAgICAgICAobm9kZSBhcyBIVE1MTGlua0VsZW1lbnQpLnRhZ05hbWUgPT09ICdMSU5LJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBub2RlIGFzIEhUTUxMaW5rRWxlbWVudFxuICAgICAgICAgICAgICBpZiAobGluay5kYXRhc2V0LnByZWNlZGVuY2U/LnN0YXJ0c1dpdGgoJ25leHQnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhyZWYgPSBsaW5rLmdldEF0dHJpYnV0ZSgnaHJlZicpXG4gICAgICAgICAgICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IFtyZXNvdXJjZSwgdmVyc2lvbl0gPSBocmVmLnNwbGl0KCc/dj0nLCAyKVxuICAgICAgICAgICAgICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudE9yaWdpbiA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsTGlua3MgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICdsaW5rW2hyZWZePVwiJyArIHJlc291cmNlICsgJ1wiXSdcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgcmVzb3VyY2UgaXMgYSBmdWxsIFVSTCBvciBvbmx5IHBhdGhuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBhbHRlcm5hdGl2ZSBocmVmIGFzIHdlbGwuXG4gICAgICAgICAgICAgICAgICAgICAgLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICdsaW5rW2hyZWZePVwiJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChyZXNvdXJjZS5zdGFydHNXaXRoKGN1cnJlbnRPcmlnaW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByZXNvdXJjZS5zbGljZShjdXJyZW50T3JpZ2luLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnRPcmlnaW4gKyByZXNvdXJjZSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnXCJdJ1xuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIF0gYXMgSFRNTExpbmtFbGVtZW50W11cblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG90aGVyTGluayBvZiBhbGxMaW5rcykge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChvdGhlckxpbmsuZGF0YXNldC5wcmVjZWRlbmNlPy5zdGFydHNXaXRoKCduZXh0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90aGVySHJlZiA9IG90aGVyTGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVySHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbLCBvdGhlclZlcnNpb25dID0gb3RoZXJIcmVmLnNwbGl0KCc/dj0nLCAyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW90aGVyVmVyc2lvbiB8fCArb3RoZXJWZXJzaW9uIDwgK3ZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxheSB0aGUgcmVtb3ZhbCBvZiB0aGUgc3R5bGVzaGVldCB0byBhdm9pZCBGT1VDXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2F1c2VkIGJ5IGBAZm9udC1mYWNlYCBydWxlcywgYXMgdGhleSBzZWVtIHRvIGJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBjb3VwbGUgb2YgdGlja3MgZGVsYXllZCBiZXR3ZWVuIHRoZSBvbGQgYW5kIG5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0eWxlcyBiZWluZyBzd2FwcGVkIGV2ZW4gaWYgdGhlIGZvbnQgaXMgY2FjaGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJMaW5rLnJlbW92ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgNSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVsb2FkTGluayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgbGlua1tyZWw9XCJwcmVsb2FkXCJdW2FzPVwic3R5bGVcIl1baHJlZj1cIiR7b3RoZXJIcmVmfVwiXWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWxvYWRMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVsb2FkTGluay5yZW1vdmUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhbiBvYnNlcnZlciBpbnN0YW5jZSBsaW5rZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihjYWxsYmFjaylcbiAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmhlYWQsIHtcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICB9KVxuICB9XG59XG4iXSwibmFtZXMiOlsibGlua0djIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiY2FsbGJhY2siLCJtdXRhdGlvbkxpc3QiLCJtdXRhdGlvbiIsInR5cGUiLCJub2RlIiwiYWRkZWROb2RlcyIsInRhZ05hbWUiLCJsaW5rIiwiZGF0YXNldCIsInByZWNlZGVuY2UiLCJzdGFydHNXaXRoIiwiaHJlZiIsImdldEF0dHJpYnV0ZSIsInJlc291cmNlIiwidmVyc2lvbiIsInNwbGl0IiwiY3VycmVudE9yaWdpbiIsIndpbmRvdyIsImxvY2F0aW9uIiwib3JpZ2luIiwiYWxsTGlua3MiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJzbGljZSIsImxlbmd0aCIsIm90aGVyTGluayIsIm90aGVySHJlZiIsIm90aGVyVmVyc2lvbiIsInNldFRpbWVvdXQiLCJyZW1vdmUiLCJwcmVsb2FkTGluayIsInF1ZXJ5U2VsZWN0b3IiLCJvYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJvYnNlcnZlIiwiaGVhZCIsImNoaWxkTGlzdCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-link-gc.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-next-dev.js":
/*!***************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-next-dev.js ***!
  \***************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("// TODO-APP: hydration warning\n\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n__webpack_require__(/*! ./app-webpack */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-webpack.js\");\nconst _nextdevtools = __webpack_require__(/*! next/dist/compiled/next-devtools */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/next-devtools/index.js\");\nconst _appbootstrap = __webpack_require__(/*! ./app-bootstrap */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-bootstrap.js\");\nconst _stitchederror = __webpack_require__(/*! ../next-devtools/userspace/app/errors/stitched-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\");\nconst _onrecoverableerror = __webpack_require__(/*! ./react-client-callbacks/on-recoverable-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js\");\n// eslint-disable-next-line @next/internal/typechecked-require\nconst instrumentationHooks = __webpack_require__(/*! ../lib/require-instrumentation-client */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/require-instrumentation-client.js\");\n(0, _appbootstrap.appBootstrap)(()=>{\n    const { hydrate } = __webpack_require__(/*! ./app-index */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-index.js\");\n    try {\n        hydrate(instrumentationHooks);\n    } finally{\n        (0, _nextdevtools.renderAppDevOverlay)(_stitchederror.getComponentStack, _stitchederror.getOwnerStack, _onrecoverableerror.isRecoverableError);\n    }\n});\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=app-next-dev.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvYXBwLW5leHQtZGV2LmpzIiwibWFwcGluZ3MiOiJBQUFBLDhCQUE4Qjs7Ozs7b0JBRXZCOzBDQUU2QjswQ0FDUDsyQ0FJdEI7Z0RBQzRCO0FBRW5DLDhEQUE4RDtBQUM5RCxNQUFNQSx1QkFBdUJDLG1CQUFPQSxDQUFDLDZRQUF1QztBQUU1RUMsQ0FBQUEsR0FBQUEsY0FBQUEsWUFBQUEsRUFBYTtJQUNYLE1BQU0sRUFBRUMsT0FBTyxFQUFFLEdBQUdGLG1CQUFPQSxDQUFDLGlPQUFhO0lBQ3pDLElBQUk7UUFDRkUsUUFBUUg7SUFDVixTQUFVO1FBQ1JJLENBQUFBLEdBQUFBLGNBQUFBLG1CQUFBQSxFQUFvQkMsZUFBQUEsaUJBQWlCLEVBQUVDLGVBQUFBLGFBQWEsRUFBRUMsb0JBQUFBLGtCQUFrQjtJQUMxRTtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9zcmMvY2xpZW50L2FwcC1uZXh0LWRldi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUT0RPLUFQUDogaHlkcmF0aW9uIHdhcm5pbmdcblxuaW1wb3J0ICcuL2FwcC13ZWJwYWNrJ1xuXG5pbXBvcnQgeyByZW5kZXJBcHBEZXZPdmVybGF5IH0gZnJvbSAnbmV4dC9kaXN0L2NvbXBpbGVkL25leHQtZGV2dG9vbHMnXG5pbXBvcnQgeyBhcHBCb290c3RyYXAgfSBmcm9tICcuL2FwcC1ib290c3RyYXAnXG5pbXBvcnQge1xuICBnZXRDb21wb25lbnRTdGFjayxcbiAgZ2V0T3duZXJTdGFjayxcbn0gZnJvbSAnLi4vbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy9zdGl0Y2hlZC1lcnJvcidcbmltcG9ydCB7IGlzUmVjb3ZlcmFibGVFcnJvciB9IGZyb20gJy4vcmVhY3QtY2xpZW50LWNhbGxiYWNrcy9vbi1yZWNvdmVyYWJsZS1lcnJvcidcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBuZXh0L2ludGVybmFsL3R5cGVjaGVja2VkLXJlcXVpcmVcbmNvbnN0IGluc3RydW1lbnRhdGlvbkhvb2tzID0gcmVxdWlyZSgnLi4vbGliL3JlcXVpcmUtaW5zdHJ1bWVudGF0aW9uLWNsaWVudCcpXG5cbmFwcEJvb3RzdHJhcCgoKSA9PiB7XG4gIGNvbnN0IHsgaHlkcmF0ZSB9ID0gcmVxdWlyZSgnLi9hcHAtaW5kZXgnKSBhcyB0eXBlb2YgaW1wb3J0KCcuL2FwcC1pbmRleCcpXG4gIHRyeSB7XG4gICAgaHlkcmF0ZShpbnN0cnVtZW50YXRpb25Ib29rcylcbiAgfSBmaW5hbGx5IHtcbiAgICByZW5kZXJBcHBEZXZPdmVybGF5KGdldENvbXBvbmVudFN0YWNrLCBnZXRPd25lclN0YWNrLCBpc1JlY292ZXJhYmxlRXJyb3IpXG4gIH1cbn0pXG4iXSwibmFtZXMiOlsiaW5zdHJ1bWVudGF0aW9uSG9va3MiLCJyZXF1aXJlIiwiYXBwQm9vdHN0cmFwIiwiaHlkcmF0ZSIsInJlbmRlckFwcERldk92ZXJsYXkiLCJnZXRDb21wb25lbnRTdGFjayIsImdldE93bmVyU3RhY2siLCJpc1JlY292ZXJhYmxlRXJyb3IiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-next-dev.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-webpack.js":
/*!**************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-webpack.js ***!
  \**************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("// Override chunk URL mapping in the webpack runtime\n// https://github.com/webpack/webpack/blob/2738eebc7880835d88c727d364ad37f3ec557593/lib/RuntimeGlobals.js#L204\n\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nconst _deploymentid = __webpack_require__(/*! ../build/deployment-id */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/build/deployment-id.js\");\nconst _encodeuripath = __webpack_require__(/*! ../shared/lib/encode-uri-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/encode-uri-path.js\");\n// If we have a deployment ID, we need to append it to the webpack chunk names\n// I am keeping the process check explicit so this can be statically optimized\nif (false) {} else {\n    // eslint-disable-next-line no-undef\n    const getChunkScriptFilename = __webpack_require__.u;\n    // eslint-disable-next-line no-undef\n    __webpack_require__.u = function() {\n        for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n            args[_key] = arguments[_key];\n        }\n        return(// filename path.\n        (0, _encodeuripath.encodeURIPath)(getChunkScriptFilename(...args)));\n    };\n// We don't need to override __webpack_require__.k because we don't modify\n// the css chunk name when not using deployment id suffixes\n// WE don't need to override __webpack_require__.miniCssF because we don't modify\n// the mini css chunk name when not using deployment id suffixes\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=app-webpack.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvYXBwLXdlYnBhY2suanMiLCJtYXBwaW5ncyI6IkFBQUEsb0RBQW9EO0FBQ3BELDhHQUE4Rzs7Ozs7MENBRTVEOzJDQUNwQjtBQUk5Qiw4RUFBOEU7QUFDOUUsOEVBQThFO0FBQzlFLElBQUlBLEtBQThCLEVBQUUsRUFxQm5DLE1BQU07SUFDTCxvQ0FBb0M7SUFDcEMsTUFBTUsseUJBQXlCQyxtQkFBbUJBLENBQUNDLENBQUM7SUFDcEQsb0NBQW9DO0lBQ3BDRCxtQkFBbUJBLENBQUNDLENBQUMsR0FBRzt5Q0FBSUMsT0FBQUEsSUFBQUEsTUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsT0FBQUEsTUFBQUEsT0FBQUE7WUFBQUEsSUFBQUEsQ0FBQUEsS0FBQUEsR0FBQUEsU0FBQUEsQ0FBQUEsS0FBQUE7O2VBRTFCLGlCQUFpQjtRQUNqQkMsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBY0osMEJBQTBCRzs7QUFFMUMsMEVBQTBFO0FBQzFFLDJEQUEyRDtBQUUzRCxpRkFBaUY7QUFDakYsZ0VBQWdFO0FBQ2xFIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9zcmMvY2xpZW50L2FwcC13ZWJwYWNrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIE92ZXJyaWRlIGNodW5rIFVSTCBtYXBwaW5nIGluIHRoZSB3ZWJwYWNrIHJ1bnRpbWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrL3dlYnBhY2svYmxvYi8yNzM4ZWViYzc4ODA4MzVkODhjNzI3ZDM2NGFkMzdmM2VjNTU3NTkzL2xpYi9SdW50aW1lR2xvYmFscy5qcyNMMjA0XG5cbmltcG9ydCB7IGdldERlcGxveW1lbnRJZFF1ZXJ5T3JFbXB0eVN0cmluZyB9IGZyb20gJy4uL2J1aWxkL2RlcGxveW1lbnQtaWQnXG5pbXBvcnQgeyBlbmNvZGVVUklQYXRoIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9lbmNvZGUtdXJpLXBhdGgnXG5cbmRlY2xhcmUgY29uc3QgX193ZWJwYWNrX3JlcXVpcmVfXzogYW55XG5cbi8vIElmIHdlIGhhdmUgYSBkZXBsb3ltZW50IElELCB3ZSBuZWVkIHRvIGFwcGVuZCBpdCB0byB0aGUgd2VicGFjayBjaHVuayBuYW1lc1xuLy8gSSBhbSBrZWVwaW5nIHRoZSBwcm9jZXNzIGNoZWNrIGV4cGxpY2l0IHNvIHRoaXMgY2FuIGJlIHN0YXRpY2FsbHkgb3B0aW1pemVkXG5pZiAocHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEKSB7XG4gIGNvbnN0IHN1ZmZpeCA9IGdldERlcGxveW1lbnRJZFF1ZXJ5T3JFbXB0eVN0cmluZygpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBjb25zdCBnZXRDaHVua1NjcmlwdEZpbGVuYW1lID0gX193ZWJwYWNrX3JlcXVpcmVfXy51XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBfX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoLi4uYXJnczogYW55W10pID0+XG4gICAgLy8gV2UgZW5jb2RlIHRoZSBjaHVuayBmaWxlbmFtZSBiZWNhdXNlIG91ciBzdGF0aWMgc2VydmVyIG1hdGNoZXMgYWdhaW5zdCBhbmQgZW5jb2RlZFxuICAgIC8vIGZpbGVuYW1lIHBhdGguXG4gICAgZW5jb2RlVVJJUGF0aChnZXRDaHVua1NjcmlwdEZpbGVuYW1lKC4uLmFyZ3MpKSArIHN1ZmZpeFxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBjb25zdCBnZXRDaHVua0Nzc0ZpbGVuYW1lID0gX193ZWJwYWNrX3JlcXVpcmVfXy5rXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBfX3dlYnBhY2tfcmVxdWlyZV9fLmsgPSAoLi4uYXJnczogYW55W10pID0+XG4gICAgZ2V0Q2h1bmtDc3NGaWxlbmFtZSguLi5hcmdzKSArIHN1ZmZpeFxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBjb25zdCBnZXRNaW5pQ3NzRmlsZW5hbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm1pbmlDc3NGXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBfX3dlYnBhY2tfcmVxdWlyZV9fLm1pbmlDc3NGID0gKC4uLmFyZ3M6IGFueVtdKSA9PlxuICAgIGdldE1pbmlDc3NGaWxlbmFtZSguLi5hcmdzKSArIHN1ZmZpeFxufSBlbHNlIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIGNvbnN0IGdldENodW5rU2NyaXB0RmlsZW5hbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLnVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIF9fd2VicGFja19yZXF1aXJlX18udSA9ICguLi5hcmdzOiBhbnlbXSkgPT5cbiAgICAvLyBXZSBlbmNvZGUgdGhlIGNodW5rIGZpbGVuYW1lIGJlY2F1c2Ugb3VyIHN0YXRpYyBzZXJ2ZXIgbWF0Y2hlcyBhZ2FpbnN0IGFuZCBlbmNvZGVkXG4gICAgLy8gZmlsZW5hbWUgcGF0aC5cbiAgICBlbmNvZGVVUklQYXRoKGdldENodW5rU2NyaXB0RmlsZW5hbWUoLi4uYXJncykpXG5cbiAgLy8gV2UgZG9uJ3QgbmVlZCB0byBvdmVycmlkZSBfX3dlYnBhY2tfcmVxdWlyZV9fLmsgYmVjYXVzZSB3ZSBkb24ndCBtb2RpZnlcbiAgLy8gdGhlIGNzcyBjaHVuayBuYW1lIHdoZW4gbm90IHVzaW5nIGRlcGxveW1lbnQgaWQgc3VmZml4ZXNcblxuICAvLyBXRSBkb24ndCBuZWVkIHRvIG92ZXJyaWRlIF9fd2VicGFja19yZXF1aXJlX18ubWluaUNzc0YgYmVjYXVzZSB3ZSBkb24ndCBtb2RpZnlcbiAgLy8gdGhlIG1pbmkgY3NzIGNodW5rIG5hbWUgd2hlbiBub3QgdXNpbmcgZGVwbG95bWVudCBpZCBzdWZmaXhlc1xufVxuXG5leHBvcnQge31cbiJdLCJuYW1lcyI6WyJwcm9jZXNzIiwiZW52IiwiTkVYVF9ERVBMT1lNRU5UX0lEIiwic3VmZml4IiwiZ2V0RGVwbG95bWVudElkUXVlcnlPckVtcHR5U3RyaW5nIiwiZ2V0Q2h1bmtTY3JpcHRGaWxlbmFtZSIsIl9fd2VicGFja19yZXF1aXJlX18iLCJ1IiwiYXJncyIsImVuY29kZVVSSVBhdGgiLCJnZXRDaHVua0Nzc0ZpbGVuYW1lIiwiayIsImdldE1pbmlDc3NGaWxlbmFtZSIsIm1pbmlDc3NGIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-webpack.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/assign-location.js":
/*!******************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/assign-location.js ***!
  \******************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"assignLocation\", ({\n    enumerable: true,\n    get: function() {\n        return assignLocation;\n    }\n}));\nconst _addbasepath = __webpack_require__(/*! ./add-base-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/add-base-path.js\");\nfunction assignLocation(location, url) {\n    if (location.startsWith('.')) {\n        const urlBase = url.origin + url.pathname;\n        return new URL(// new URL('./relative', 'https://example.com/subdir').href -> 'https://example.com/relative'\n        // new URL('./relative', 'https://example.com/subdir/').href -> 'https://example.com/subdir/relative'\n        (urlBase.endsWith('/') ? urlBase : urlBase + '/') + location);\n    }\n    return new URL((0, _addbasepath.addBasePath)(location), url.href);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=assign-location.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvYXNzaWduLWxvY2F0aW9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7a0RBU2dCQTs7O2VBQUFBOzs7eUNBVFk7QUFTckIsU0FBU0EsZUFBZUMsUUFBZ0IsRUFBRUMsR0FBUTtJQUN2RCxJQUFJRCxTQUFTRSxVQUFVLENBQUMsTUFBTTtRQUM1QixNQUFNQyxVQUFVRixJQUFJRyxNQUFNLEdBQUdILElBQUlJLFFBQVE7UUFDekMsT0FBTyxJQUFJQyxJQUNULDZGQUM2RjtRQUM3RixxR0FBcUc7U0FDcEdILFFBQVFJLFFBQVEsQ0FBQyxPQUFPSixVQUFVQSxVQUFVLElBQUUsR0FBS0g7SUFFeEQ7SUFFQSxPQUFPLElBQUlNLElBQUlFLENBQUFBLEdBQUFBLGFBQUFBLFdBQUFBLEVBQVlSLFdBQVdDLElBQUlRLElBQUk7QUFDaEQiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3NyYy9jbGllbnQvYXNzaWduLWxvY2F0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZEJhc2VQYXRoIH0gZnJvbSAnLi9hZGQtYmFzZS1wYXRoJ1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNvcnJlY3RseSBhc3NpZ24gbG9jYXRpb24gdG8gVVJMXG4gKlxuICogVGhlIG1ldGhvZCB3aWxsIGFkZCBiYXNlUGF0aCwgYW5kIHdpbGwgYWxzbyBjb3JyZWN0bHkgYWRkIGxvY2F0aW9uIChpbmNsdWRpbmcgaWYgaXQgaXMgYSByZWxhdGl2ZSBwYXRoKVxuICogQHBhcmFtIGxvY2F0aW9uIExvY2F0aW9uIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSB1cmxcbiAqIEBwYXJhbSB1cmwgQmFzZSBVUkwgdG8gd2hpY2ggdGhlIGxvY2F0aW9uIHNob3VsZCBiZSBhc3NpZ25lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduTG9jYXRpb24obG9jYXRpb246IHN0cmluZywgdXJsOiBVUkwpOiBVUkwge1xuICBpZiAobG9jYXRpb24uc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgY29uc3QgdXJsQmFzZSA9IHVybC5vcmlnaW4gKyB1cmwucGF0aG5hbWVcbiAgICByZXR1cm4gbmV3IFVSTChcbiAgICAgIC8vIEluIG9yZGVyIGZvciBhIHJlbGF0aXZlIHBhdGggdG8gYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdXJsIGNvcnJlY3RseSwgdGhlIGN1cnJlbnQgdXJsIG11c3QgZW5kIHdpdGggYSBzbGFzaFxuICAgICAgLy8gbmV3IFVSTCgnLi9yZWxhdGl2ZScsICdodHRwczovL2V4YW1wbGUuY29tL3N1YmRpcicpLmhyZWYgLT4gJ2h0dHBzOi8vZXhhbXBsZS5jb20vcmVsYXRpdmUnXG4gICAgICAvLyBuZXcgVVJMKCcuL3JlbGF0aXZlJywgJ2h0dHBzOi8vZXhhbXBsZS5jb20vc3ViZGlyLycpLmhyZWYgLT4gJ2h0dHBzOi8vZXhhbXBsZS5jb20vc3ViZGlyL3JlbGF0aXZlJ1xuICAgICAgKHVybEJhc2UuZW5kc1dpdGgoJy8nKSA/IHVybEJhc2UgOiB1cmxCYXNlICsgJy8nKSArIGxvY2F0aW9uXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBVUkwoYWRkQmFzZVBhdGgobG9jYXRpb24pLCB1cmwuaHJlZilcbn1cbiJdLCJuYW1lcyI6WyJhc3NpZ25Mb2NhdGlvbiIsImxvY2F0aW9uIiwidXJsIiwic3RhcnRzV2l0aCIsInVybEJhc2UiLCJvcmlnaW4iLCJwYXRobmFtZSIsIlVSTCIsImVuZHNXaXRoIiwiYWRkQmFzZVBhdGgiLCJocmVmIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/assign-location.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router-announcer.js":
/*!**********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router-announcer.js ***!
  \**********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"AppRouterAnnouncer\", ({\n    enumerable: true,\n    get: function() {\n        return AppRouterAnnouncer;\n    }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\nconst _reactdom = __webpack_require__(/*! react-dom */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/index.js\");\nconst ANNOUNCER_TYPE = 'next-route-announcer';\nconst ANNOUNCER_ID = '__next-route-announcer__';\nfunction getAnnouncerNode() {\n    var _existingAnnouncer_shadowRoot;\n    const existingAnnouncer = document.getElementsByName(ANNOUNCER_TYPE)[0];\n    if (existingAnnouncer == null ? void 0 : (_existingAnnouncer_shadowRoot = existingAnnouncer.shadowRoot) == null ? void 0 : _existingAnnouncer_shadowRoot.childNodes[0]) {\n        return existingAnnouncer.shadowRoot.childNodes[0];\n    } else {\n        const container = document.createElement(ANNOUNCER_TYPE);\n        container.style.cssText = 'position:absolute';\n        const announcer = document.createElement('div');\n        announcer.ariaLive = 'assertive';\n        announcer.id = ANNOUNCER_ID;\n        announcer.role = 'alert';\n        announcer.style.cssText = 'position:absolute;border:0;height:1px;margin:-1px;padding:0;width:1px;clip:rect(0 0 0 0);overflow:hidden;white-space:nowrap;word-wrap:normal';\n        // Use shadow DOM here to avoid any potential CSS bleed\n        const shadow = container.attachShadow({\n            mode: 'open'\n        });\n        shadow.appendChild(announcer);\n        document.body.appendChild(container);\n        return announcer;\n    }\n}\nfunction AppRouterAnnouncer(param) {\n    let { tree } = param;\n    const [portalNode, setPortalNode] = (0, _react.useState)(null);\n    (0, _react.useEffect)(()=>{\n        const announcer = getAnnouncerNode();\n        setPortalNode(announcer);\n        return ()=>{\n            const container = document.getElementsByTagName(ANNOUNCER_TYPE)[0];\n            if (container == null ? void 0 : container.isConnected) {\n                document.body.removeChild(container);\n            }\n        };\n    }, []);\n    const [routeAnnouncement, setRouteAnnouncement] = (0, _react.useState)('');\n    const previousTitle = (0, _react.useRef)(undefined);\n    (0, _react.useEffect)(()=>{\n        let currentTitle = '';\n        if (document.title) {\n            currentTitle = document.title;\n        } else {\n            const pageHeader = document.querySelector('h1');\n            if (pageHeader) {\n                currentTitle = pageHeader.innerText || pageHeader.textContent || '';\n            }\n        }\n        // Only announce the title change, but not for the first load because screen\n        // readers do that automatically.\n        if (previousTitle.current !== undefined && previousTitle.current !== currentTitle) {\n            setRouteAnnouncement(currentTitle);\n        }\n        previousTitle.current = currentTitle;\n    }, [\n        tree\n    ]);\n    return portalNode ? /*#__PURE__*/ (0, _reactdom.createPortal)(routeAnnouncement, portalNode) : null;\n}\n_c = AppRouterAnnouncer;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=app-router-announcer.js.map\nvar _c;\n$RefreshReg$(_c, \"AppRouterAnnouncer\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9hcHAtcm91dGVyLWFubm91bmNlci5qcyIsIm1hcHBpbmdzIjoiOzs7O3NEQTZCZ0JBOzs7ZUFBQUE7OzttQ0E3QjRCO3NDQUNmO0FBRzdCLE1BQU1DLGlCQUFpQjtBQUN2QixNQUFNQyxlQUFlO0FBRXJCLFNBQVNDO1FBRUhDO0lBREosTUFBTUEsb0JBQW9CQyxTQUFTQyxpQkFBaUIsQ0FBQ0wsZUFBZSxDQUFDLEVBQUU7SUFDdkUsSUFBSUcscUJBQUFBLE9BQUFBLEtBQUFBLElBQUFBLENBQUFBLGdDQUFBQSxrQkFBbUJHLFVBQUFBLEtBQVUsZ0JBQTdCSCw4QkFBK0JJLFVBQVUsQ0FBQyxFQUFFLEVBQUU7UUFDaEQsT0FBT0osa0JBQWtCRyxVQUFVLENBQUNDLFVBQVUsQ0FBQyxFQUFFO0lBQ25ELE9BQU87UUFDTCxNQUFNQyxZQUFZSixTQUFTSyxhQUFhLENBQUNUO1FBQ3pDUSxVQUFVRSxLQUFLLENBQUNDLE9BQU8sR0FBRztRQUMxQixNQUFNQyxZQUFZUixTQUFTSyxhQUFhLENBQUM7UUFDekNHLFVBQVVDLFFBQVEsR0FBRztRQUNyQkQsVUFBVUUsRUFBRSxHQUFHYjtRQUNmVyxVQUFVRyxJQUFJLEdBQUc7UUFDakJILFVBQVVGLEtBQUssQ0FBQ0MsT0FBTyxHQUNyQjtRQUVGLHVEQUF1RDtRQUN2RCxNQUFNSyxTQUFTUixVQUFVUyxZQUFZLENBQUM7WUFBRUMsTUFBTTtRQUFPO1FBQ3JERixPQUFPRyxXQUFXLENBQUNQO1FBQ25CUixTQUFTZ0IsSUFBSSxDQUFDRCxXQUFXLENBQUNYO1FBQzFCLE9BQU9JO0lBQ1Q7QUFDRjtBQUVPLDRCQUE0QixLQUFxQztJQUFyQyxNQUFFUyxJQUFJLEVBQStCLEdBQXJDO0lBQ2pDLE1BQU0sQ0FBQ0MsWUFBWUMsY0FBYyxHQUFHQyxDQUFBQSxHQUFBQSxPQUFBQSxRQUFBQSxFQUE2QjtJQUVqRUMsQ0FBQUEsR0FBQUEsT0FBQUEsU0FBQUEsRUFBVTtRQUNSLE1BQU1iLFlBQVlWO1FBQ2xCcUIsY0FBY1g7UUFDZCxPQUFPO1lBQ0wsTUFBTUosWUFBWUosU0FBU3NCLG9CQUFvQixDQUFDMUIsZUFBZSxDQUFDLEVBQUU7WUFDbEUsSUFBSVEsYUFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsVUFBV21CLFdBQVcsRUFBRTtnQkFDMUJ2QixTQUFTZ0IsSUFBSSxDQUFDUSxXQUFXLENBQUNwQjtZQUM1QjtRQUNGO0lBQ0YsR0FBRyxFQUFFO0lBRUwsTUFBTSxDQUFDcUIsbUJBQW1CQyxxQkFBcUIsR0FBR04sQ0FBQUEsR0FBQUEsT0FBQUEsUUFBQUEsRUFBUztJQUMzRCxNQUFNTyxnQkFBZ0JDLENBQUFBLEdBQUFBLE9BQUFBLE1BQUFBLEVBQTJCQztJQUVqRFIsQ0FBQUEsR0FBQUEsT0FBQUEsU0FBQUEsRUFBVTtRQUNSLElBQUlTLGVBQWU7UUFDbkIsSUFBSTlCLFNBQVMrQixLQUFLLEVBQUU7WUFDbEJELGVBQWU5QixTQUFTK0IsS0FBSztRQUMvQixPQUFPO1lBQ0wsTUFBTUMsYUFBYWhDLFNBQVNpQyxhQUFhLENBQUM7WUFDMUMsSUFBSUQsWUFBWTtnQkFDZEYsZUFBZUUsV0FBV0UsU0FBUyxJQUFJRixXQUFXRyxXQUFXLElBQUk7WUFDbkU7UUFDRjtRQUVBLDRFQUE0RTtRQUM1RSxpQ0FBaUM7UUFDakMsSUFDRVIsY0FBY1MsT0FBTyxLQUFLUCxhQUMxQkYsY0FBY1MsT0FBTyxLQUFLTixjQUMxQjtZQUNBSixxQkFBcUJJO1FBQ3ZCO1FBQ0FILGNBQWNTLE9BQU8sR0FBR047SUFDMUIsR0FBRztRQUFDYjtLQUFLO0lBRVQsT0FBT0MsYUFBQUEsV0FBQUEsR0FBYW1CLENBQUFBLEdBQUFBLFVBQUFBLFlBQUFBLEVBQWFaLG1CQUFtQlAsY0FBYztBQUNwRTtLQXhDZ0J2QiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9zcmMvY2xpZW50L2NvbXBvbmVudHMvYXBwLXJvdXRlci1hbm5vdW5jZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHR5cGUgeyBGbGlnaHRSb3V0ZXJTdGF0ZSB9IGZyb20gJy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuXG5jb25zdCBBTk5PVU5DRVJfVFlQRSA9ICduZXh0LXJvdXRlLWFubm91bmNlcidcbmNvbnN0IEFOTk9VTkNFUl9JRCA9ICdfX25leHQtcm91dGUtYW5ub3VuY2VyX18nXG5cbmZ1bmN0aW9uIGdldEFubm91bmNlck5vZGUoKSB7XG4gIGNvbnN0IGV4aXN0aW5nQW5ub3VuY2VyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoQU5OT1VOQ0VSX1RZUEUpWzBdXG4gIGlmIChleGlzdGluZ0Fubm91bmNlcj8uc2hhZG93Um9vdD8uY2hpbGROb2Rlc1swXSkge1xuICAgIHJldHVybiBleGlzdGluZ0Fubm91bmNlci5zaGFkb3dSb290LmNoaWxkTm9kZXNbMF0gYXMgSFRNTEVsZW1lbnRcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KEFOTk9VTkNFUl9UWVBFKVxuICAgIGNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gJ3Bvc2l0aW9uOmFic29sdXRlJ1xuICAgIGNvbnN0IGFubm91bmNlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgYW5ub3VuY2VyLmFyaWFMaXZlID0gJ2Fzc2VydGl2ZSdcbiAgICBhbm5vdW5jZXIuaWQgPSBBTk5PVU5DRVJfSURcbiAgICBhbm5vdW5jZXIucm9sZSA9ICdhbGVydCdcbiAgICBhbm5vdW5jZXIuc3R5bGUuY3NzVGV4dCA9XG4gICAgICAncG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7aGVpZ2h0OjFweDttYXJnaW46LTFweDtwYWRkaW5nOjA7d2lkdGg6MXB4O2NsaXA6cmVjdCgwIDAgMCAwKTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3dvcmQtd3JhcDpub3JtYWwnXG5cbiAgICAvLyBVc2Ugc2hhZG93IERPTSBoZXJlIHRvIGF2b2lkIGFueSBwb3RlbnRpYWwgQ1NTIGJsZWVkXG4gICAgY29uc3Qgc2hhZG93ID0gY29udGFpbmVyLmF0dGFjaFNoYWRvdyh7IG1vZGU6ICdvcGVuJyB9KVxuICAgIHNoYWRvdy5hcHBlbmRDaGlsZChhbm5vdW5jZXIpXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpXG4gICAgcmV0dXJuIGFubm91bmNlclxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBcHBSb3V0ZXJBbm5vdW5jZXIoeyB0cmVlIH06IHsgdHJlZTogRmxpZ2h0Um91dGVyU3RhdGUgfSkge1xuICBjb25zdCBbcG9ydGFsTm9kZSwgc2V0UG9ydGFsTm9kZV0gPSB1c2VTdGF0ZTxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBhbm5vdW5jZXIgPSBnZXRBbm5vdW5jZXJOb2RlKClcbiAgICBzZXRQb3J0YWxOb2RlKGFubm91bmNlcilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoQU5OT1VOQ0VSX1RZUEUpWzBdXG4gICAgICBpZiAoY29udGFpbmVyPy5pc0Nvbm5lY3RlZCkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGNvbnRhaW5lcilcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IFtyb3V0ZUFubm91bmNlbWVudCwgc2V0Um91dGVBbm5vdW5jZW1lbnRdID0gdXNlU3RhdGUoJycpXG4gIGNvbnN0IHByZXZpb3VzVGl0bGUgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgY3VycmVudFRpdGxlID0gJydcbiAgICBpZiAoZG9jdW1lbnQudGl0bGUpIHtcbiAgICAgIGN1cnJlbnRUaXRsZSA9IGRvY3VtZW50LnRpdGxlXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBhZ2VIZWFkZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoMScpXG4gICAgICBpZiAocGFnZUhlYWRlcikge1xuICAgICAgICBjdXJyZW50VGl0bGUgPSBwYWdlSGVhZGVyLmlubmVyVGV4dCB8fCBwYWdlSGVhZGVyLnRleHRDb250ZW50IHx8ICcnXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT25seSBhbm5vdW5jZSB0aGUgdGl0bGUgY2hhbmdlLCBidXQgbm90IGZvciB0aGUgZmlyc3QgbG9hZCBiZWNhdXNlIHNjcmVlblxuICAgIC8vIHJlYWRlcnMgZG8gdGhhdCBhdXRvbWF0aWNhbGx5LlxuICAgIGlmIChcbiAgICAgIHByZXZpb3VzVGl0bGUuY3VycmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBwcmV2aW91c1RpdGxlLmN1cnJlbnQgIT09IGN1cnJlbnRUaXRsZVxuICAgICkge1xuICAgICAgc2V0Um91dGVBbm5vdW5jZW1lbnQoY3VycmVudFRpdGxlKVxuICAgIH1cbiAgICBwcmV2aW91c1RpdGxlLmN1cnJlbnQgPSBjdXJyZW50VGl0bGVcbiAgfSwgW3RyZWVdKVxuXG4gIHJldHVybiBwb3J0YWxOb2RlID8gY3JlYXRlUG9ydGFsKHJvdXRlQW5ub3VuY2VtZW50LCBwb3J0YWxOb2RlKSA6IG51bGxcbn1cbiJdLCJuYW1lcyI6WyJBcHBSb3V0ZXJBbm5vdW5jZXIiLCJBTk5PVU5DRVJfVFlQRSIsIkFOTk9VTkNFUl9JRCIsImdldEFubm91bmNlck5vZGUiLCJleGlzdGluZ0Fubm91bmNlciIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeU5hbWUiLCJzaGFkb3dSb290IiwiY2hpbGROb2RlcyIsImNvbnRhaW5lciIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsImNzc1RleHQiLCJhbm5vdW5jZXIiLCJhcmlhTGl2ZSIsImlkIiwicm9sZSIsInNoYWRvdyIsImF0dGFjaFNoYWRvdyIsIm1vZGUiLCJhcHBlbmRDaGlsZCIsImJvZHkiLCJ0cmVlIiwicG9ydGFsTm9kZSIsInNldFBvcnRhbE5vZGUiLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiaXNDb25uZWN0ZWQiLCJyZW1vdmVDaGlsZCIsInJvdXRlQW5ub3VuY2VtZW50Iiwic2V0Um91dGVBbm5vdW5jZW1lbnQiLCJwcmV2aW91c1RpdGxlIiwidXNlUmVmIiwidW5kZWZpbmVkIiwiY3VycmVudFRpdGxlIiwidGl0bGUiLCJwYWdlSGVhZGVyIiwicXVlcnlTZWxlY3RvciIsImlubmVyVGV4dCIsInRleHRDb250ZW50IiwiY3VycmVudCIsImNyZWF0ZVBvcnRhbCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router-announcer.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router-headers.js":
/*!********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router-headers.js ***!
  \********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    ACTION_HEADER: function() {\n        return ACTION_HEADER;\n    },\n    FLIGHT_HEADERS: function() {\n        return FLIGHT_HEADERS;\n    },\n    NEXT_ACTION_NOT_FOUND_HEADER: function() {\n        return NEXT_ACTION_NOT_FOUND_HEADER;\n    },\n    NEXT_DID_POSTPONE_HEADER: function() {\n        return NEXT_DID_POSTPONE_HEADER;\n    },\n    NEXT_HMR_REFRESH_HASH_COOKIE: function() {\n        return NEXT_HMR_REFRESH_HASH_COOKIE;\n    },\n    NEXT_HMR_REFRESH_HEADER: function() {\n        return NEXT_HMR_REFRESH_HEADER;\n    },\n    NEXT_IS_PRERENDER_HEADER: function() {\n        return NEXT_IS_PRERENDER_HEADER;\n    },\n    NEXT_REWRITTEN_PATH_HEADER: function() {\n        return NEXT_REWRITTEN_PATH_HEADER;\n    },\n    NEXT_REWRITTEN_QUERY_HEADER: function() {\n        return NEXT_REWRITTEN_QUERY_HEADER;\n    },\n    NEXT_ROUTER_PREFETCH_HEADER: function() {\n        return NEXT_ROUTER_PREFETCH_HEADER;\n    },\n    NEXT_ROUTER_SEGMENT_PREFETCH_HEADER: function() {\n        return NEXT_ROUTER_SEGMENT_PREFETCH_HEADER;\n    },\n    NEXT_ROUTER_STALE_TIME_HEADER: function() {\n        return NEXT_ROUTER_STALE_TIME_HEADER;\n    },\n    NEXT_ROUTER_STATE_TREE_HEADER: function() {\n        return NEXT_ROUTER_STATE_TREE_HEADER;\n    },\n    NEXT_RSC_UNION_QUERY: function() {\n        return NEXT_RSC_UNION_QUERY;\n    },\n    NEXT_URL: function() {\n        return NEXT_URL;\n    },\n    RSC_CONTENT_TYPE_HEADER: function() {\n        return RSC_CONTENT_TYPE_HEADER;\n    },\n    RSC_HEADER: function() {\n        return RSC_HEADER;\n    }\n});\nconst RSC_HEADER = 'RSC';\nconst ACTION_HEADER = 'Next-Action';\nconst NEXT_ROUTER_STATE_TREE_HEADER = 'Next-Router-State-Tree';\nconst NEXT_ROUTER_PREFETCH_HEADER = 'Next-Router-Prefetch';\nconst NEXT_ROUTER_SEGMENT_PREFETCH_HEADER = 'Next-Router-Segment-Prefetch';\nconst NEXT_HMR_REFRESH_HEADER = 'Next-HMR-Refresh';\nconst NEXT_HMR_REFRESH_HASH_COOKIE = '__next_hmr_refresh_hash__';\nconst NEXT_URL = 'Next-Url';\nconst RSC_CONTENT_TYPE_HEADER = 'text/x-component';\nconst FLIGHT_HEADERS = [\n    RSC_HEADER,\n    NEXT_ROUTER_STATE_TREE_HEADER,\n    NEXT_ROUTER_PREFETCH_HEADER,\n    NEXT_HMR_REFRESH_HEADER,\n    NEXT_ROUTER_SEGMENT_PREFETCH_HEADER\n];\nconst NEXT_RSC_UNION_QUERY = '_rsc';\nconst NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time';\nconst NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed';\nconst NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path';\nconst NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query';\nconst NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender';\nconst NEXT_ACTION_NOT_FOUND_HEADER = 'x-nextjs-action-not-found';\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=app-router-headers.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9hcHAtcm91dGVyLWhlYWRlcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQ2FBLGFBQWE7ZUFBYkE7O0lBaUJBQyxjQUFjO2VBQWRBOztJQWVBQyw0QkFBNEI7ZUFBNUJBOztJQUpBQyx3QkFBd0I7ZUFBeEJBOztJQWZBQyw0QkFBNEI7ZUFBNUJBOztJQURBQyx1QkFBdUI7ZUFBdkJBOztJQW1CQUMsd0JBQXdCO2VBQXhCQTs7SUFGQUMsMEJBQTBCO2VBQTFCQTs7SUFDQUMsMkJBQTJCO2VBQTNCQTs7SUF6QkFDLDJCQUEyQjtlQUEzQkE7O0lBS0FDLG1DQUFtQztlQUFuQ0E7O0lBaUJBQyw2QkFBNkI7ZUFBN0JBOztJQXZCQUMsNkJBQTZCO2VBQTdCQTs7SUFxQkFDLG9CQUFvQjtlQUFwQkE7O0lBWEFDLFFBQVE7ZUFBUkE7O0lBQ0FDLHVCQUF1QjtlQUF2QkE7O0lBaEJBQyxVQUFVO2VBQVZBOzs7QUFBTixNQUFNQSxhQUFhO0FBQ25CLE1BQU1oQixnQkFBZ0I7QUFJdEIsTUFBTVksZ0NBQWdDO0FBQ3RDLE1BQU1ILDhCQUE4QjtBQUtwQyxNQUFNQyxzQ0FDWDtBQUNLLE1BQU1MLDBCQUEwQjtBQUNoQyxNQUFNRCwrQkFBK0I7QUFDckMsTUFBTVUsV0FBVztBQUNqQixNQUFNQywwQkFBMEI7QUFFaEMsTUFBTWQsaUJBQWlCO0lBQzVCZTtJQUNBSjtJQUNBSDtJQUNBSjtJQUNBSztDQUNEO0FBRU0sTUFBTUcsdUJBQXVCO0FBRTdCLE1BQU1GLGdDQUFnQztBQUN0QyxNQUFNUiwyQkFBMkI7QUFDakMsTUFBTUksNkJBQTZCO0FBQ25DLE1BQU1DLDhCQUE4QjtBQUNwQyxNQUFNRiwyQkFBMkI7QUFDakMsTUFBTUosK0JBQStCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL3NyYy9jbGllbnQvY29tcG9uZW50cy9hcHAtcm91dGVyLWhlYWRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFJTQ19IRUFERVIgPSAnUlNDJyBhcyBjb25zdFxuZXhwb3J0IGNvbnN0IEFDVElPTl9IRUFERVIgPSAnTmV4dC1BY3Rpb24nIGFzIGNvbnN0XG4vLyBUT0RPOiBJbnN0ZWFkIG9mIHNlbmRpbmcgdGhlIGZ1bGwgcm91dGVyIHN0YXRlLCB3ZSBvbmx5IG5lZWQgdG8gc2VuZCB0aGVcbi8vIHNlZ21lbnQgcGF0aC4gU2F2ZXMgYnl0ZXMuIFRoZW4gd2UgY291bGQgYWxzbyB1c2UgdGhpcyBmaWVsZCBmb3Igc2VnbWVudFxuLy8gcHJlZmV0Y2hlcywgd2hpY2ggYWxzbyBuZWVkIHRvIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIHNlZ21lbnQuXG5leHBvcnQgY29uc3QgTkVYVF9ST1VURVJfU1RBVEVfVFJFRV9IRUFERVIgPSAnTmV4dC1Sb3V0ZXItU3RhdGUtVHJlZScgYXMgY29uc3RcbmV4cG9ydCBjb25zdCBORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVIgPSAnTmV4dC1Sb3V0ZXItUHJlZmV0Y2gnIGFzIGNvbnN0XG4vLyBUaGlzIGNvbnRhaW5zIHRoZSBwYXRoIHRvIHRoZSBzZWdtZW50IGJlaW5nIHByZWZldGNoZWQuXG4vLyBUT0RPOiBJZiB3ZSBjaGFuZ2UgTmV4dC1Sb3V0ZXItU3RhdGUtVHJlZSB0byBiZSBhIHNlZ21lbnQgcGF0aCwgd2UgY2FuIHVzZVxuLy8gdGhhdCBpbnN0ZWFkLiBUaGVuIE5leHQtUm91dGVyLVByZWZldGNoIGFuZCBOZXh0LVJvdXRlci1TZWdtZW50LVByZWZldGNoIGNhblxuLy8gYmUgbWVyZ2VkIGludG8gYSBzaW5nbGUgZW51bS5cbmV4cG9ydCBjb25zdCBORVhUX1JPVVRFUl9TRUdNRU5UX1BSRUZFVENIX0hFQURFUiA9XG4gICdOZXh0LVJvdXRlci1TZWdtZW50LVByZWZldGNoJyBhcyBjb25zdFxuZXhwb3J0IGNvbnN0IE5FWFRfSE1SX1JFRlJFU0hfSEVBREVSID0gJ05leHQtSE1SLVJlZnJlc2gnIGFzIGNvbnN0XG5leHBvcnQgY29uc3QgTkVYVF9ITVJfUkVGUkVTSF9IQVNIX0NPT0tJRSA9ICdfX25leHRfaG1yX3JlZnJlc2hfaGFzaF9fJyBhcyBjb25zdFxuZXhwb3J0IGNvbnN0IE5FWFRfVVJMID0gJ05leHQtVXJsJyBhcyBjb25zdFxuZXhwb3J0IGNvbnN0IFJTQ19DT05URU5UX1RZUEVfSEVBREVSID0gJ3RleHQveC1jb21wb25lbnQnIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBGTElHSFRfSEVBREVSUyA9IFtcbiAgUlNDX0hFQURFUixcbiAgTkVYVF9ST1VURVJfU1RBVEVfVFJFRV9IRUFERVIsXG4gIE5FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUixcbiAgTkVYVF9ITVJfUkVGUkVTSF9IRUFERVIsXG4gIE5FWFRfUk9VVEVSX1NFR01FTlRfUFJFRkVUQ0hfSEVBREVSLFxuXSBhcyBjb25zdFxuXG5leHBvcnQgY29uc3QgTkVYVF9SU0NfVU5JT05fUVVFUlkgPSAnX3JzYycgYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IE5FWFRfUk9VVEVSX1NUQUxFX1RJTUVfSEVBREVSID0gJ3gtbmV4dGpzLXN0YWxlLXRpbWUnIGFzIGNvbnN0XG5leHBvcnQgY29uc3QgTkVYVF9ESURfUE9TVFBPTkVfSEVBREVSID0gJ3gtbmV4dGpzLXBvc3Rwb25lZCcgYXMgY29uc3RcbmV4cG9ydCBjb25zdCBORVhUX1JFV1JJVFRFTl9QQVRIX0hFQURFUiA9ICd4LW5leHRqcy1yZXdyaXR0ZW4tcGF0aCcgYXMgY29uc3RcbmV4cG9ydCBjb25zdCBORVhUX1JFV1JJVFRFTl9RVUVSWV9IRUFERVIgPSAneC1uZXh0anMtcmV3cml0dGVuLXF1ZXJ5JyBhcyBjb25zdFxuZXhwb3J0IGNvbnN0IE5FWFRfSVNfUFJFUkVOREVSX0hFQURFUiA9ICd4LW5leHRqcy1wcmVyZW5kZXInIGFzIGNvbnN0XG5leHBvcnQgY29uc3QgTkVYVF9BQ1RJT05fTk9UX0ZPVU5EX0hFQURFUiA9ICd4LW5leHRqcy1hY3Rpb24tbm90LWZvdW5kJyBhcyBjb25zdFxuIl0sIm5hbWVzIjpbIkFDVElPTl9IRUFERVIiLCJGTElHSFRfSEVBREVSUyIsIk5FWFRfQUNUSU9OX05PVF9GT1VORF9IRUFERVIiLCJORVhUX0RJRF9QT1NUUE9ORV9IRUFERVIiLCJORVhUX0hNUl9SRUZSRVNIX0hBU0hfQ09PS0lFIiwiTkVYVF9ITVJfUkVGUkVTSF9IRUFERVIiLCJORVhUX0lTX1BSRVJFTkRFUl9IRUFERVIiLCJORVhUX1JFV1JJVFRFTl9QQVRIX0hFQURFUiIsIk5FWFRfUkVXUklUVEVOX1FVRVJZX0hFQURFUiIsIk5FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUiIsIk5FWFRfUk9VVEVSX1NFR01FTlRfUFJFRkVUQ0hfSEVBREVSIiwiTkVYVF9ST1VURVJfU1RBTEVfVElNRV9IRUFERVIiLCJORVhUX1JPVVRFUl9TVEFURV9UUkVFX0hFQURFUiIsIk5FWFRfUlNDX1VOSU9OX1FVRVJZIiwiTkVYVF9VUkwiLCJSU0NfQ09OVEVOVF9UWVBFX0hFQURFUiIsIlJTQ19IRUFERVIiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router-headers.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router-instance.js":
/*!*********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router-instance.js ***!
  \*********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    createMutableActionQueue: function() {\n        return createMutableActionQueue;\n    },\n    dispatchNavigateAction: function() {\n        return dispatchNavigateAction;\n    },\n    dispatchTraverseAction: function() {\n        return dispatchTraverseAction;\n    },\n    getCurrentAppRouterState: function() {\n        return getCurrentAppRouterState;\n    },\n    publicAppRouterInstance: function() {\n        return publicAppRouterInstance;\n    }\n});\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer/router-reducer-types */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _routerreducer = __webpack_require__(/*! ./router-reducer/router-reducer */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/router-reducer.js\");\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\nconst _isthenable = __webpack_require__(/*! ../../shared/lib/is-thenable */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/is-thenable.js\");\nconst _segmentcache = __webpack_require__(/*! ./segment-cache */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/segment-cache.js\");\nconst _useactionqueue = __webpack_require__(/*! ./use-action-queue */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/use-action-queue.js\");\nconst _addbasepath = __webpack_require__(/*! ../add-base-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/add-base-path.js\");\nconst _approuter = __webpack_require__(/*! ./app-router */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router.js\");\nconst _prefetchreducer = __webpack_require__(/*! ./router-reducer/reducers/prefetch-reducer */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js\");\nconst _links = __webpack_require__(/*! ./links */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/links.js\");\nfunction runRemainingActions(actionQueue, setState) {\n    if (actionQueue.pending !== null) {\n        actionQueue.pending = actionQueue.pending.next;\n        if (actionQueue.pending !== null) {\n            // eslint-disable-next-line @typescript-eslint/no-use-before-define\n            runAction({\n                actionQueue,\n                action: actionQueue.pending,\n                setState\n            });\n        } else {\n            // No more actions are pending, check if a refresh is needed\n            if (actionQueue.needsRefresh) {\n                actionQueue.needsRefresh = false;\n                actionQueue.dispatch({\n                    type: _routerreducertypes.ACTION_REFRESH,\n                    origin: window.location.origin\n                }, setState);\n            }\n        }\n    }\n}\nasync function runAction(param) {\n    let { actionQueue, action, setState } = param;\n    const prevState = actionQueue.state;\n    actionQueue.pending = action;\n    const payload = action.payload;\n    const actionResult = actionQueue.action(prevState, payload);\n    function handleResult(nextState) {\n        // if we discarded this action, the state should also be discarded\n        if (action.discarded) {\n            return;\n        }\n        actionQueue.state = nextState;\n        runRemainingActions(actionQueue, setState);\n        action.resolve(nextState);\n    }\n    // if the action is a promise, set up a callback to resolve it\n    if ((0, _isthenable.isThenable)(actionResult)) {\n        actionResult.then(handleResult, (err)=>{\n            runRemainingActions(actionQueue, setState);\n            action.reject(err);\n        });\n    } else {\n        handleResult(actionResult);\n    }\n}\nfunction dispatchAction(actionQueue, payload, setState) {\n    let resolvers = {\n        resolve: setState,\n        reject: ()=>{}\n    };\n    // most of the action types are async with the exception of restore\n    // it's important that restore is handled quickly since it's fired on the popstate event\n    // and we don't want to add any delay on a back/forward nav\n    // this only creates a promise for the async actions\n    if (payload.type !== _routerreducertypes.ACTION_RESTORE) {\n        // Create the promise and assign the resolvers to the object.\n        const deferredPromise = new Promise((resolve, reject)=>{\n            resolvers = {\n                resolve,\n                reject\n            };\n        });\n        (0, _react.startTransition)(()=>{\n            // we immediately notify React of the pending promise -- the resolver is attached to the action node\n            // and will be called when the associated action promise resolves\n            setState(deferredPromise);\n        });\n    }\n    const newAction = {\n        payload,\n        next: null,\n        resolve: resolvers.resolve,\n        reject: resolvers.reject\n    };\n    // Check if the queue is empty\n    if (actionQueue.pending === null) {\n        // The queue is empty, so add the action and start it immediately\n        // Mark this action as the last in the queue\n        actionQueue.last = newAction;\n        runAction({\n            actionQueue,\n            action: newAction,\n            setState\n        });\n    } else if (payload.type === _routerreducertypes.ACTION_NAVIGATE || payload.type === _routerreducertypes.ACTION_RESTORE) {\n        // Navigations (including back/forward) take priority over any pending actions.\n        // Mark the pending action as discarded (so the state is never applied) and start the navigation action immediately.\n        actionQueue.pending.discarded = true;\n        // The rest of the current queue should still execute after this navigation.\n        // (Note that it can't contain any earlier navigations, because we always put those into `actionQueue.pending` by calling `runAction`)\n        newAction.next = actionQueue.pending.next;\n        // if the pending action was a server action, mark the queue as needing a refresh once events are processed\n        if (actionQueue.pending.payload.type === _routerreducertypes.ACTION_SERVER_ACTION) {\n            actionQueue.needsRefresh = true;\n        }\n        runAction({\n            actionQueue,\n            action: newAction,\n            setState\n        });\n    } else {\n        // The queue is not empty, so add the action to the end of the queue\n        // It will be started by runRemainingActions after the previous action finishes\n        if (actionQueue.last !== null) {\n            actionQueue.last.next = newAction;\n        }\n        actionQueue.last = newAction;\n    }\n}\nlet globalActionQueue = null;\nfunction createMutableActionQueue(initialState, instrumentationHooks) {\n    const actionQueue = {\n        state: initialState,\n        dispatch: (payload, setState)=>dispatchAction(actionQueue, payload, setState),\n        action: async (state, action)=>{\n            const result = (0, _routerreducer.reducer)(state, action);\n            return result;\n        },\n        pending: null,\n        last: null,\n        onRouterTransitionStart: instrumentationHooks !== null && typeof instrumentationHooks.onRouterTransitionStart === 'function' ? instrumentationHooks.onRouterTransitionStart : null\n    };\n    if (true) {\n        // The action queue is lazily created on hydration, but after that point\n        // it doesn't change. So we can store it in a global rather than pass\n        // it around everywhere via props/context.\n        if (globalActionQueue !== null) {\n            throw Object.defineProperty(new Error('Internal Next.js Error: createMutableActionQueue was called more ' + 'than once'), \"__NEXT_ERROR_CODE\", {\n                value: \"E624\",\n                enumerable: false,\n                configurable: true\n            });\n        }\n        globalActionQueue = actionQueue;\n    }\n    return actionQueue;\n}\nfunction getCurrentAppRouterState() {\n    return globalActionQueue !== null ? globalActionQueue.state : null;\n}\nfunction getAppRouterActionQueue() {\n    if (globalActionQueue === null) {\n        throw Object.defineProperty(new Error('Internal Next.js error: Router action dispatched before initialization.'), \"__NEXT_ERROR_CODE\", {\n            value: \"E668\",\n            enumerable: false,\n            configurable: true\n        });\n    }\n    return globalActionQueue;\n}\nfunction getProfilingHookForOnNavigationStart() {\n    if (globalActionQueue !== null) {\n        return globalActionQueue.onRouterTransitionStart;\n    }\n    return null;\n}\nfunction dispatchNavigateAction(href, navigateType, shouldScroll, linkInstanceRef) {\n    // TODO: This stuff could just go into the reducer. Leaving as-is for now\n    // since we're about to rewrite all the router reducer stuff anyway.\n    const url = new URL((0, _addbasepath.addBasePath)(href), location.href);\n    if (false) {}\n    (0, _links.setLinkForCurrentNavigation)(linkInstanceRef);\n    const onRouterTransitionStart = getProfilingHookForOnNavigationStart();\n    if (onRouterTransitionStart !== null) {\n        onRouterTransitionStart(href, navigateType);\n    }\n    (0, _useactionqueue.dispatchAppRouterAction)({\n        type: _routerreducertypes.ACTION_NAVIGATE,\n        url,\n        isExternalUrl: (0, _approuter.isExternalURL)(url),\n        locationSearch: location.search,\n        shouldScroll,\n        navigateType,\n        allowAliasing: true\n    });\n}\nfunction dispatchTraverseAction(href, tree) {\n    const onRouterTransitionStart = getProfilingHookForOnNavigationStart();\n    if (onRouterTransitionStart !== null) {\n        onRouterTransitionStart(href, 'traverse');\n    }\n    (0, _useactionqueue.dispatchAppRouterAction)({\n        type: _routerreducertypes.ACTION_RESTORE,\n        url: new URL(href),\n        tree\n    });\n}\nconst publicAppRouterInstance = {\n    back: ()=>window.history.back(),\n    forward: ()=>window.history.forward(),\n    prefetch:  false ? // cache. So we don't need to dispatch an action.\n    0 : (href, options)=>{\n        // Use the old prefetch implementation.\n        const actionQueue = getAppRouterActionQueue();\n        const url = (0, _approuter.createPrefetchURL)(href);\n        if (url !== null) {\n            var _options_kind;\n            // The prefetch reducer doesn't actually update any state or\n            // trigger a rerender. It just writes to a mutable cache. So we\n            // shouldn't bother calling setState/dispatch; we can just re-run\n            // the reducer directly using the current state.\n            // TODO: Refactor this away from a \"reducer\" so it's\n            // less confusing.\n            (0, _prefetchreducer.prefetchReducer)(actionQueue.state, {\n                type: _routerreducertypes.ACTION_PREFETCH,\n                url,\n                kind: (_options_kind = options == null ? void 0 : options.kind) != null ? _options_kind : _routerreducertypes.PrefetchKind.FULL\n            });\n        }\n    },\n    replace: (href, options)=>{\n        (0, _react.startTransition)(()=>{\n            var _options_scroll;\n            dispatchNavigateAction(href, 'replace', (_options_scroll = options == null ? void 0 : options.scroll) != null ? _options_scroll : true, null);\n        });\n    },\n    push: (href, options)=>{\n        (0, _react.startTransition)(()=>{\n            var _options_scroll;\n            dispatchNavigateAction(href, 'push', (_options_scroll = options == null ? void 0 : options.scroll) != null ? _options_scroll : true, null);\n        });\n    },\n    refresh: ()=>{\n        (0, _react.startTransition)(()=>{\n            (0, _useactionqueue.dispatchAppRouterAction)({\n                type: _routerreducertypes.ACTION_REFRESH,\n                origin: window.location.origin\n            });\n        });\n    },\n    hmrRefresh: ()=>{\n        if (false) {} else {\n            (0, _react.startTransition)(()=>{\n                (0, _useactionqueue.dispatchAppRouterAction)({\n                    type: _routerreducertypes.ACTION_HMR_REFRESH,\n                    origin: window.location.origin\n                });\n            });\n        }\n    }\n};\n// Exists for debugging purposes. Don't use in application code.\nif ( true && window.next) {\n    window.next.router = publicAppRouterInstance;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=app-router-instance.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9hcHAtcm91dGVyLWluc3RhbmNlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQStNZ0JBLHdCQUF3QjtlQUF4QkE7O0lBMERBQyxzQkFBc0I7ZUFBdEJBOztJQStCQUMsc0JBQXNCO2VBQXRCQTs7SUFuREFDLHdCQUF3QjtlQUF4QkE7O0lBdUVIQyx1QkFBdUI7ZUFBdkJBOzs7Z0RBaFROOzJDQUNpQjttQ0FDUTt3Q0FDTDswQ0FDMEI7NENBQ2I7eUNBQ1o7dUNBQ3FCOzZDQUNqQjttQ0FNK0I7QUFrQy9ELFNBQVNDLG9CQUNQQyxXQUFpQyxFQUNqQ0MsUUFBOEI7SUFFOUIsSUFBSUQsWUFBWUUsT0FBTyxLQUFLLE1BQU07UUFDaENGLFlBQVlFLE9BQU8sR0FBR0YsWUFBWUUsT0FBTyxDQUFDQyxJQUFJO1FBQzlDLElBQUlILFlBQVlFLE9BQU8sS0FBSyxNQUFNO1lBQ2hDLG1FQUFtRTtZQUNuRUUsVUFBVTtnQkFDUko7Z0JBQ0FLLFFBQVFMLFlBQVlFLE9BQU87Z0JBQzNCRDtZQUNGO1FBQ0YsT0FBTztZQUNMLDREQUE0RDtZQUM1RCxJQUFJRCxZQUFZTSxZQUFZLEVBQUU7Z0JBQzVCTixZQUFZTSxZQUFZLEdBQUc7Z0JBQzNCTixZQUFZTyxRQUFRLENBQ2xCO29CQUNFQyxNQUFNQyxvQkFBQUEsY0FBYztvQkFDcEJDLFFBQVFDLE9BQU9DLFFBQVEsQ0FBQ0YsTUFBTTtnQkFDaEMsR0FDQVQ7WUFFSjtRQUNGO0lBQ0Y7QUFDRjtBQUVBLGVBQWVHLFVBQVUsS0FReEI7SUFSd0IsTUFDdkJKLFdBQVcsRUFDWEssTUFBTSxFQUNOSixRQUFRLEVBS1QsR0FSd0I7SUFTdkIsTUFBTVksWUFBWWIsWUFBWWMsS0FBSztJQUVuQ2QsWUFBWUUsT0FBTyxHQUFHRztJQUV0QixNQUFNVSxVQUFVVixPQUFPVSxPQUFPO0lBQzlCLE1BQU1DLGVBQWVoQixZQUFZSyxNQUFNLENBQUNRLFdBQVdFO0lBRW5ELFNBQVNFLGFBQWFDLFNBQXlCO1FBQzdDLGtFQUFrRTtRQUNsRSxJQUFJYixPQUFPYyxTQUFTLEVBQUU7WUFDcEI7UUFDRjtRQUVBbkIsWUFBWWMsS0FBSyxHQUFHSTtRQUVwQm5CLG9CQUFvQkMsYUFBYUM7UUFDakNJLE9BQU9lLE9BQU8sQ0FBQ0Y7SUFDakI7SUFFQSw4REFBOEQ7SUFDOUQsSUFBSUcsQ0FBQUEsR0FBQUEsWUFBQUEsVUFBQUEsRUFBV0wsZUFBZTtRQUM1QkEsYUFBYU0sSUFBSSxDQUFDTCxjQUFjLENBQUNNO1lBQy9CeEIsb0JBQW9CQyxhQUFhQztZQUNqQ0ksT0FBT21CLE1BQU0sQ0FBQ0Q7UUFDaEI7SUFDRixPQUFPO1FBQ0xOLGFBQWFEO0lBQ2Y7QUFDRjtBQUVBLFNBQVNTLGVBQ1B6QixXQUFpQyxFQUNqQ2UsT0FBdUIsRUFDdkJkLFFBQThCO0lBRTlCLElBQUl5QixZQUdBO1FBQUVOLFNBQVNuQjtRQUFVdUIsUUFBUSxLQUFPO0lBQUU7SUFFMUMsbUVBQW1FO0lBQ25FLHdGQUF3RjtJQUN4RiwyREFBMkQ7SUFDM0Qsb0RBQW9EO0lBQ3BELElBQUlULFFBQVFQLElBQUksS0FBS21CLG9CQUFBQSxjQUFjLEVBQUU7UUFDbkMsNkRBQTZEO1FBQzdELE1BQU1DLGtCQUFrQixJQUFJQyxRQUF3QixDQUFDVCxTQUFTSTtZQUM1REUsWUFBWTtnQkFBRU47Z0JBQVNJO1lBQU87UUFDaEM7UUFFQU0sQ0FBQUEsR0FBQUEsT0FBQUEsZUFBZSxFQUFDO1lBQ2Qsb0dBQW9HO1lBQ3BHLGlFQUFpRTtZQUNqRTdCLFNBQVMyQjtRQUNYO0lBQ0Y7SUFFQSxNQUFNRyxZQUE2QjtRQUNqQ2hCO1FBQ0FaLE1BQU07UUFDTmlCLFNBQVNNLFVBQVVOLE9BQU87UUFDMUJJLFFBQVFFLFVBQVVGLE1BQU07SUFDMUI7SUFFQSw4QkFBOEI7SUFDOUIsSUFBSXhCLFlBQVlFLE9BQU8sS0FBSyxNQUFNO1FBQ2hDLGlFQUFpRTtRQUNqRSw0Q0FBNEM7UUFDNUNGLFlBQVlnQyxJQUFJLEdBQUdEO1FBRW5CM0IsVUFBVTtZQUNSSjtZQUNBSyxRQUFRMEI7WUFDUjlCO1FBQ0Y7SUFDRixPQUFPLElBQ0xjLFFBQVFQLElBQUksS0FBS3lCLG9CQUFBQSxlQUFlLElBQ2hDbEIsUUFBUVAsSUFBSSxLQUFLbUIsb0JBQUFBLGNBQWMsRUFDL0I7UUFDQSwrRUFBK0U7UUFDL0Usb0hBQW9IO1FBQ3BIM0IsWUFBWUUsT0FBTyxDQUFDaUIsU0FBUyxHQUFHO1FBRWhDLDRFQUE0RTtRQUM1RSxzSUFBc0k7UUFDdElZLFVBQVU1QixJQUFJLEdBQUdILFlBQVlFLE9BQU8sQ0FBQ0MsSUFBSTtRQUV6QywyR0FBMkc7UUFDM0csSUFBSUgsWUFBWUUsT0FBTyxDQUFDYSxPQUFPLENBQUNQLElBQUksS0FBSzBCLG9CQUFBQSxvQkFBb0IsRUFBRTtZQUM3RGxDLFlBQVlNLFlBQVksR0FBRztRQUM3QjtRQUVBRixVQUFVO1lBQ1JKO1lBQ0FLLFFBQVEwQjtZQUNSOUI7UUFDRjtJQUNGLE9BQU87UUFDTCxvRUFBb0U7UUFDcEUsK0VBQStFO1FBQy9FLElBQUlELFlBQVlnQyxJQUFJLEtBQUssTUFBTTtZQUM3QmhDLFlBQVlnQyxJQUFJLENBQUM3QixJQUFJLEdBQUc0QjtRQUMxQjtRQUNBL0IsWUFBWWdDLElBQUksR0FBR0Q7SUFDckI7QUFDRjtBQUVBLElBQUlJLG9CQUFpRDtBQUU5QyxTQUFTekMseUJBQ2QwQyxZQUE0QixFQUM1QkMsb0JBQXVEO0lBRXZELE1BQU1yQyxjQUFvQztRQUN4Q2MsT0FBT3NCO1FBQ1A3QixVQUFVLENBQUNRLFNBQXlCZCxXQUNsQ3dCLGVBQWV6QixhQUFhZSxTQUFTZDtRQUN2Q0ksUUFBUSxPQUFPUyxPQUF1QlQ7WUFDcEMsTUFBTWlDLFNBQVNDLENBQUFBLEdBQUFBLGVBQUFBLE9BQUFBLEVBQVF6QixPQUFPVDtZQUM5QixPQUFPaUM7UUFDVDtRQUNBcEMsU0FBUztRQUNUOEIsTUFBTTtRQUNOUSx5QkFDRUgseUJBQXlCLFFBQ3pCLE9BQU9BLHFCQUFxQkcsdUJBQXVCLEtBQUssYUFFcERILHFCQUFxQkcsdUJBQXVCLEdBQzVDO0lBQ1I7SUFFQSxJQUFJLElBQTZCLEVBQUU7UUFDakMsd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSwwQ0FBMEM7UUFDMUMsSUFBSUwsc0JBQXNCLE1BQU07WUFDOUIsTUFBTSxxQkFHTCxDQUhLLElBQUlNLE1BQ1Isc0VBQ0UsY0FGRTt1QkFBQTs0QkFBQTs4QkFBQTtZQUdOO1FBQ0Y7UUFDQU4sb0JBQW9CbkM7SUFDdEI7SUFFQSxPQUFPQTtBQUNUO0FBRU8sU0FBU0g7SUFDZCxPQUFPc0Msc0JBQXNCLE9BQU9BLGtCQUFrQnJCLEtBQUssR0FBRztBQUNoRTtBQUVBLFNBQVM0QjtJQUNQLElBQUlQLHNCQUFzQixNQUFNO1FBQzlCLE1BQU0scUJBRUwsQ0FGSyxJQUFJTSxNQUNSLDRFQURJO21CQUFBO3dCQUFBOzBCQUFBO1FBRU47SUFDRjtJQUNBLE9BQU9OO0FBQ1Q7QUFFQSxTQUFTUTtJQUNQLElBQUlSLHNCQUFzQixNQUFNO1FBQzlCLE9BQU9BLGtCQUFrQkssdUJBQXVCO0lBQ2xEO0lBQ0EsT0FBTztBQUNUO0FBRU8sU0FBUzdDLHVCQUNkaUQsSUFBWSxFQUNaQyxZQUE0QyxFQUM1Q0MsWUFBcUIsRUFDckJDLGVBQW9DO0lBRXBDLHlFQUF5RTtJQUN6RSxvRUFBb0U7SUFDcEUsTUFBTUMsTUFBTSxJQUFJQyxJQUFJQyxDQUFBQSxHQUFBQSxhQUFBQSxXQUFXLEVBQUNOLE9BQU9oQyxTQUFTZ0MsSUFBSTtJQUNwRCxJQUFJTyxLQUF3QyxFQUFFLEVBRTdDO0lBRURJLENBQUFBLEdBQUFBLE9BQUFBLDJCQUFBQSxFQUE0QlI7SUFFNUIsTUFBTVAsMEJBQTBCRztJQUNoQyxJQUFJSCw0QkFBNEIsTUFBTTtRQUNwQ0Esd0JBQXdCSSxNQUFNQztJQUNoQztJQUVBVyxDQUFBQSxHQUFBQSxnQkFBQUEsdUJBQUFBLEVBQXdCO1FBQ3RCaEQsTUFBTXlCLG9CQUFBQSxlQUFlO1FBQ3JCZTtRQUNBUyxlQUFlQyxDQUFBQSxHQUFBQSxXQUFBQSxhQUFBQSxFQUFjVjtRQUM3QlcsZ0JBQWdCL0MsU0FBU2dELE1BQU07UUFDL0JkO1FBQ0FEO1FBQ0FnQixlQUFlO0lBQ2pCO0FBQ0Y7QUFFTyxTQUFTakUsdUJBQ2RnRCxJQUFZLEVBQ1prQixJQUFtQztJQUVuQyxNQUFNdEIsMEJBQTBCRztJQUNoQyxJQUFJSCw0QkFBNEIsTUFBTTtRQUNwQ0Esd0JBQXdCSSxNQUFNO0lBQ2hDO0lBQ0FZLENBQUFBLEdBQUFBLGdCQUFBQSx1QkFBQUEsRUFBd0I7UUFDdEJoRCxNQUFNbUIsb0JBQUFBLGNBQWM7UUFDcEJxQixLQUFLLElBQUlDLElBQUlMO1FBQ2JrQjtJQUNGO0FBQ0Y7QUFPTyxNQUFNaEUsMEJBQTZDO0lBQ3hEaUUsTUFBTSxJQUFNcEQsT0FBT3FELE9BQU8sQ0FBQ0QsSUFBSTtJQUMvQkUsU0FBUyxJQUFNdEQsT0FBT3FELE9BQU8sQ0FBQ0MsT0FBTztJQUNyQ0MsVUFBVWYsTUFBdUMsR0FFN0MsaURBQ2lEO0lBQ2pELENBU0MsR0FDRCxDQUFDUCxNQUFjd0I7UUFDYix1Q0FBdUM7UUFDdkMsTUFBTXBFLGNBQWMwQztRQUNwQixNQUFNTSxNQUFNMkIsQ0FBQUEsR0FBQUEsV0FBQUEsaUJBQUFBLEVBQWtCL0I7UUFDOUIsSUFBSUksUUFBUSxNQUFNO2dCQVVSb0I7WUFUUiw0REFBNEQ7WUFDNUQsK0RBQStEO1lBQy9ELGlFQUFpRTtZQUNqRSxnREFBZ0Q7WUFDaEQsb0RBQW9EO1lBQ3BELGtCQUFrQjtZQUNsQlEsQ0FBQUEsR0FBQUEsaUJBQUFBLGVBQUFBLEVBQWdCNUUsWUFBWWMsS0FBSyxFQUFFO2dCQUNqQ04sTUFBTXFFLG9CQUFBQSxlQUFlO2dCQUNyQjdCO2dCQUNBdUIsTUFBTUgsaUJBQUFBLFdBQUFBLE9BQUFBLEtBQUFBLElBQUFBLFFBQVNHLElBQUFBLEtBQUksT0FBYkgsZ0JBQWlCSSxvQkFBQUEsWUFBWSxDQUFDQyxJQUFJO1lBQzFDO1FBQ0Y7SUFDRjtJQUNKSyxTQUFTLENBQUNsQyxNQUFjd0I7UUFDdEJ0QyxDQUFBQSxHQUFBQSxPQUFBQSxlQUFBQSxFQUFnQjtnQkFDMEJzQztZQUF4Q3pFLHVCQUF1QmlELE1BQU0sV0FBV3dCLENBQUFBLGtCQUFBQSxXQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxRQUFTVyxNQUFBQSxLQUFNLE9BQWZYLGtCQUFtQixNQUFNO1FBQ25FO0lBQ0Y7SUFDQVksTUFBTSxDQUFDcEMsTUFBY3dCO1FBQ25CdEMsQ0FBQUEsR0FBQUEsT0FBQUEsZUFBQUEsRUFBZ0I7Z0JBQ3VCc0M7WUFBckN6RSx1QkFBdUJpRCxNQUFNLFFBQVF3QixDQUFBQSxrQkFBQUEsV0FBQUEsT0FBQUEsS0FBQUEsSUFBQUEsUUFBU1csTUFBQUEsS0FBTSxPQUFmWCxrQkFBbUIsTUFBTTtRQUNoRTtJQUNGO0lBQ0FhLFNBQVM7UUFDUG5ELENBQUFBLEdBQUFBLE9BQUFBLGVBQUFBLEVBQWdCO1lBQ2QwQixDQUFBQSxHQUFBQSxnQkFBQUEsdUJBQUFBLEVBQXdCO2dCQUN0QmhELE1BQU1DLG9CQUFBQSxjQUFjO2dCQUNwQkMsUUFBUUMsT0FBT0MsUUFBUSxDQUFDRixNQUFNO1lBQ2hDO1FBQ0Y7SUFDRjtJQUNBd0UsWUFBWTtRQUNWLElBQUkvQixLQUFvQixFQUFvQixFQUkzQyxNQUFNO1lBQ0xyQixDQUFBQSxHQUFBQSxPQUFBQSxlQUFlLEVBQUM7Z0JBQ2QwQixDQUFBQSxHQUFBQSxnQkFBQUEsdUJBQUFBLEVBQXdCO29CQUN0QmhELE1BQU00RSxvQkFBQUEsa0JBQWtCO29CQUN4QjFFLFFBQVFDLE9BQU9DLFFBQVEsQ0FBQ0YsTUFBTTtnQkFDaEM7WUFDRjtRQUNGO0lBQ0Y7QUFDRjtBQUVBLGdFQUFnRTtBQUNoRSxJQUFJLEtBQTZCLElBQUlDLE9BQU9SLElBQUksRUFBRTtJQUNoRFEsT0FBT1IsSUFBSSxDQUFDa0YsTUFBTSxHQUFHdkY7QUFDdkIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL2NsaWVudC9jb21wb25lbnRzL2FwcC1yb3V0ZXItaW5zdGFuY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBBcHBSb3V0ZXJTdGF0ZSxcbiAgdHlwZSBSZWR1Y2VyQWN0aW9ucyxcbiAgdHlwZSBSZWR1Y2VyU3RhdGUsXG4gIEFDVElPTl9SRUZSRVNILFxuICBBQ1RJT05fU0VSVkVSX0FDVElPTixcbiAgQUNUSU9OX05BVklHQVRFLFxuICBBQ1RJT05fUkVTVE9SRSxcbiAgdHlwZSBOYXZpZ2F0ZUFjdGlvbixcbiAgQUNUSU9OX0hNUl9SRUZSRVNILFxuICBQcmVmZXRjaEtpbmQsXG4gIEFDVElPTl9QUkVGRVRDSCxcbn0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci9yb3V0ZXItcmVkdWNlci10eXBlcydcbmltcG9ydCB7IHJlZHVjZXIgfSBmcm9tICcuL3JvdXRlci1yZWR1Y2VyL3JvdXRlci1yZWR1Y2VyJ1xuaW1wb3J0IHsgc3RhcnRUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBpc1RoZW5hYmxlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9pcy10aGVuYWJsZSdcbmltcG9ydCB7IHByZWZldGNoIGFzIHByZWZldGNoV2l0aFNlZ21lbnRDYWNoZSB9IGZyb20gJy4vc2VnbWVudC1jYWNoZSdcbmltcG9ydCB7IGRpc3BhdGNoQXBwUm91dGVyQWN0aW9uIH0gZnJvbSAnLi91c2UtYWN0aW9uLXF1ZXVlJ1xuaW1wb3J0IHsgYWRkQmFzZVBhdGggfSBmcm9tICcuLi9hZGQtYmFzZS1wYXRoJ1xuaW1wb3J0IHsgY3JlYXRlUHJlZmV0Y2hVUkwsIGlzRXh0ZXJuYWxVUkwgfSBmcm9tICcuL2FwcC1yb3V0ZXInXG5pbXBvcnQgeyBwcmVmZXRjaFJlZHVjZXIgfSBmcm9tICcuL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL3ByZWZldGNoLXJlZHVjZXInXG5pbXBvcnQgdHlwZSB7XG4gIEFwcFJvdXRlckluc3RhbmNlLFxuICBOYXZpZ2F0ZU9wdGlvbnMsXG4gIFByZWZldGNoT3B0aW9ucyxcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyBzZXRMaW5rRm9yQ3VycmVudE5hdmlnYXRpb24sIHR5cGUgTGlua0luc3RhbmNlIH0gZnJvbSAnLi9saW5rcydcbmltcG9ydCB0eXBlIHsgRmxpZ2h0Um91dGVyU3RhdGUgfSBmcm9tICcuLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2xpZW50SW5zdHJ1bWVudGF0aW9uSG9va3MgfSBmcm9tICcuLi9hcHAtaW5kZXgnXG5pbXBvcnQgdHlwZSB7IEdsb2JhbEVycm9yQ29tcG9uZW50IH0gZnJvbSAnLi9idWlsdGluL2dsb2JhbC1lcnJvcidcblxuZXhwb3J0IHR5cGUgRGlzcGF0Y2hTdGF0ZVByb21pc2UgPSBSZWFjdC5EaXNwYXRjaDxSZWR1Y2VyU3RhdGU+XG5cbmV4cG9ydCB0eXBlIEFwcFJvdXRlckFjdGlvblF1ZXVlID0ge1xuICBzdGF0ZTogQXBwUm91dGVyU3RhdGVcbiAgZGlzcGF0Y2g6IChwYXlsb2FkOiBSZWR1Y2VyQWN0aW9ucywgc2V0U3RhdGU6IERpc3BhdGNoU3RhdGVQcm9taXNlKSA9PiB2b2lkXG4gIGFjdGlvbjogKHN0YXRlOiBBcHBSb3V0ZXJTdGF0ZSwgYWN0aW9uOiBSZWR1Y2VyQWN0aW9ucykgPT4gUmVkdWNlclN0YXRlXG5cbiAgb25Sb3V0ZXJUcmFuc2l0aW9uU3RhcnQ6XG4gICAgfCAoKHVybDogc3RyaW5nLCB0eXBlOiAncHVzaCcgfCAncmVwbGFjZScgfCAndHJhdmVyc2UnKSA9PiB2b2lkKVxuICAgIHwgbnVsbFxuXG4gIHBlbmRpbmc6IEFjdGlvblF1ZXVlTm9kZSB8IG51bGxcbiAgbmVlZHNSZWZyZXNoPzogYm9vbGVhblxuICBsYXN0OiBBY3Rpb25RdWV1ZU5vZGUgfCBudWxsXG59XG5cbmV4cG9ydCB0eXBlIEdsb2JhbEVycm9yU3RhdGUgPSBbXG4gIEdsb2JhbEVycm9yOiBHbG9iYWxFcnJvckNvbXBvbmVudCxcbiAgc3R5bGVzOiBSZWFjdC5SZWFjdE5vZGUsXG5dXG5cbmV4cG9ydCB0eXBlIEFjdGlvblF1ZXVlTm9kZSA9IHtcbiAgcGF5bG9hZDogUmVkdWNlckFjdGlvbnNcbiAgbmV4dDogQWN0aW9uUXVldWVOb2RlIHwgbnVsbFxuICByZXNvbHZlOiAodmFsdWU6IFJlZHVjZXJTdGF0ZSkgPT4gdm9pZFxuICByZWplY3Q6IChlcnI6IEVycm9yKSA9PiB2b2lkXG4gIGRpc2NhcmRlZD86IGJvb2xlYW5cbn1cblxuZnVuY3Rpb24gcnVuUmVtYWluaW5nQWN0aW9ucyhcbiAgYWN0aW9uUXVldWU6IEFwcFJvdXRlckFjdGlvblF1ZXVlLFxuICBzZXRTdGF0ZTogRGlzcGF0Y2hTdGF0ZVByb21pc2Vcbikge1xuICBpZiAoYWN0aW9uUXVldWUucGVuZGluZyAhPT0gbnVsbCkge1xuICAgIGFjdGlvblF1ZXVlLnBlbmRpbmcgPSBhY3Rpb25RdWV1ZS5wZW5kaW5nLm5leHRcbiAgICBpZiAoYWN0aW9uUXVldWUucGVuZGluZyAhPT0gbnVsbCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgcnVuQWN0aW9uKHtcbiAgICAgICAgYWN0aW9uUXVldWUsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uUXVldWUucGVuZGluZyxcbiAgICAgICAgc2V0U3RhdGUsXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBtb3JlIGFjdGlvbnMgYXJlIHBlbmRpbmcsIGNoZWNrIGlmIGEgcmVmcmVzaCBpcyBuZWVkZWRcbiAgICAgIGlmIChhY3Rpb25RdWV1ZS5uZWVkc1JlZnJlc2gpIHtcbiAgICAgICAgYWN0aW9uUXVldWUubmVlZHNSZWZyZXNoID0gZmFsc2VcbiAgICAgICAgYWN0aW9uUXVldWUuZGlzcGF0Y2goXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogQUNUSU9OX1JFRlJFU0gsXG4gICAgICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXRTdGF0ZVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bkFjdGlvbih7XG4gIGFjdGlvblF1ZXVlLFxuICBhY3Rpb24sXG4gIHNldFN0YXRlLFxufToge1xuICBhY3Rpb25RdWV1ZTogQXBwUm91dGVyQWN0aW9uUXVldWVcbiAgYWN0aW9uOiBBY3Rpb25RdWV1ZU5vZGVcbiAgc2V0U3RhdGU6IERpc3BhdGNoU3RhdGVQcm9taXNlXG59KSB7XG4gIGNvbnN0IHByZXZTdGF0ZSA9IGFjdGlvblF1ZXVlLnN0YXRlXG5cbiAgYWN0aW9uUXVldWUucGVuZGluZyA9IGFjdGlvblxuXG4gIGNvbnN0IHBheWxvYWQgPSBhY3Rpb24ucGF5bG9hZFxuICBjb25zdCBhY3Rpb25SZXN1bHQgPSBhY3Rpb25RdWV1ZS5hY3Rpb24ocHJldlN0YXRlLCBwYXlsb2FkKVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVJlc3VsdChuZXh0U3RhdGU6IEFwcFJvdXRlclN0YXRlKSB7XG4gICAgLy8gaWYgd2UgZGlzY2FyZGVkIHRoaXMgYWN0aW9uLCB0aGUgc3RhdGUgc2hvdWxkIGFsc28gYmUgZGlzY2FyZGVkXG4gICAgaWYgKGFjdGlvbi5kaXNjYXJkZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFjdGlvblF1ZXVlLnN0YXRlID0gbmV4dFN0YXRlXG5cbiAgICBydW5SZW1haW5pbmdBY3Rpb25zKGFjdGlvblF1ZXVlLCBzZXRTdGF0ZSlcbiAgICBhY3Rpb24ucmVzb2x2ZShuZXh0U3RhdGUpXG4gIH1cblxuICAvLyBpZiB0aGUgYWN0aW9uIGlzIGEgcHJvbWlzZSwgc2V0IHVwIGEgY2FsbGJhY2sgdG8gcmVzb2x2ZSBpdFxuICBpZiAoaXNUaGVuYWJsZShhY3Rpb25SZXN1bHQpKSB7XG4gICAgYWN0aW9uUmVzdWx0LnRoZW4oaGFuZGxlUmVzdWx0LCAoZXJyKSA9PiB7XG4gICAgICBydW5SZW1haW5pbmdBY3Rpb25zKGFjdGlvblF1ZXVlLCBzZXRTdGF0ZSlcbiAgICAgIGFjdGlvbi5yZWplY3QoZXJyKVxuICAgIH0pXG4gIH0gZWxzZSB7XG4gICAgaGFuZGxlUmVzdWx0KGFjdGlvblJlc3VsdClcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEFjdGlvbihcbiAgYWN0aW9uUXVldWU6IEFwcFJvdXRlckFjdGlvblF1ZXVlLFxuICBwYXlsb2FkOiBSZWR1Y2VyQWN0aW9ucyxcbiAgc2V0U3RhdGU6IERpc3BhdGNoU3RhdGVQcm9taXNlXG4pIHtcbiAgbGV0IHJlc29sdmVyczoge1xuICAgIHJlc29sdmU6ICh2YWx1ZTogUmVkdWNlclN0YXRlKSA9PiB2b2lkXG4gICAgcmVqZWN0OiAocmVhc29uOiBhbnkpID0+IHZvaWRcbiAgfSA9IHsgcmVzb2x2ZTogc2V0U3RhdGUsIHJlamVjdDogKCkgPT4ge30gfVxuXG4gIC8vIG1vc3Qgb2YgdGhlIGFjdGlvbiB0eXBlcyBhcmUgYXN5bmMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHJlc3RvcmVcbiAgLy8gaXQncyBpbXBvcnRhbnQgdGhhdCByZXN0b3JlIGlzIGhhbmRsZWQgcXVpY2tseSBzaW5jZSBpdCdzIGZpcmVkIG9uIHRoZSBwb3BzdGF0ZSBldmVudFxuICAvLyBhbmQgd2UgZG9uJ3Qgd2FudCB0byBhZGQgYW55IGRlbGF5IG9uIGEgYmFjay9mb3J3YXJkIG5hdlxuICAvLyB0aGlzIG9ubHkgY3JlYXRlcyBhIHByb21pc2UgZm9yIHRoZSBhc3luYyBhY3Rpb25zXG4gIGlmIChwYXlsb2FkLnR5cGUgIT09IEFDVElPTl9SRVNUT1JFKSB7XG4gICAgLy8gQ3JlYXRlIHRoZSBwcm9taXNlIGFuZCBhc3NpZ24gdGhlIHJlc29sdmVycyB0byB0aGUgb2JqZWN0LlxuICAgIGNvbnN0IGRlZmVycmVkUHJvbWlzZSA9IG5ldyBQcm9taXNlPEFwcFJvdXRlclN0YXRlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXNvbHZlcnMgPSB7IHJlc29sdmUsIHJlamVjdCB9XG4gICAgfSlcblxuICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PiB7XG4gICAgICAvLyB3ZSBpbW1lZGlhdGVseSBub3RpZnkgUmVhY3Qgb2YgdGhlIHBlbmRpbmcgcHJvbWlzZSAtLSB0aGUgcmVzb2x2ZXIgaXMgYXR0YWNoZWQgdG8gdGhlIGFjdGlvbiBub2RlXG4gICAgICAvLyBhbmQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgYXNzb2NpYXRlZCBhY3Rpb24gcHJvbWlzZSByZXNvbHZlc1xuICAgICAgc2V0U3RhdGUoZGVmZXJyZWRQcm9taXNlKVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBuZXdBY3Rpb246IEFjdGlvblF1ZXVlTm9kZSA9IHtcbiAgICBwYXlsb2FkLFxuICAgIG5leHQ6IG51bGwsXG4gICAgcmVzb2x2ZTogcmVzb2x2ZXJzLnJlc29sdmUsXG4gICAgcmVqZWN0OiByZXNvbHZlcnMucmVqZWN0LFxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5XG4gIGlmIChhY3Rpb25RdWV1ZS5wZW5kaW5nID09PSBudWxsKSB7XG4gICAgLy8gVGhlIHF1ZXVlIGlzIGVtcHR5LCBzbyBhZGQgdGhlIGFjdGlvbiBhbmQgc3RhcnQgaXQgaW1tZWRpYXRlbHlcbiAgICAvLyBNYXJrIHRoaXMgYWN0aW9uIGFzIHRoZSBsYXN0IGluIHRoZSBxdWV1ZVxuICAgIGFjdGlvblF1ZXVlLmxhc3QgPSBuZXdBY3Rpb25cblxuICAgIHJ1bkFjdGlvbih7XG4gICAgICBhY3Rpb25RdWV1ZSxcbiAgICAgIGFjdGlvbjogbmV3QWN0aW9uLFxuICAgICAgc2V0U3RhdGUsXG4gICAgfSlcbiAgfSBlbHNlIGlmIChcbiAgICBwYXlsb2FkLnR5cGUgPT09IEFDVElPTl9OQVZJR0FURSB8fFxuICAgIHBheWxvYWQudHlwZSA9PT0gQUNUSU9OX1JFU1RPUkVcbiAgKSB7XG4gICAgLy8gTmF2aWdhdGlvbnMgKGluY2x1ZGluZyBiYWNrL2ZvcndhcmQpIHRha2UgcHJpb3JpdHkgb3ZlciBhbnkgcGVuZGluZyBhY3Rpb25zLlxuICAgIC8vIE1hcmsgdGhlIHBlbmRpbmcgYWN0aW9uIGFzIGRpc2NhcmRlZCAoc28gdGhlIHN0YXRlIGlzIG5ldmVyIGFwcGxpZWQpIGFuZCBzdGFydCB0aGUgbmF2aWdhdGlvbiBhY3Rpb24gaW1tZWRpYXRlbHkuXG4gICAgYWN0aW9uUXVldWUucGVuZGluZy5kaXNjYXJkZWQgPSB0cnVlXG5cbiAgICAvLyBUaGUgcmVzdCBvZiB0aGUgY3VycmVudCBxdWV1ZSBzaG91bGQgc3RpbGwgZXhlY3V0ZSBhZnRlciB0aGlzIG5hdmlnYXRpb24uXG4gICAgLy8gKE5vdGUgdGhhdCBpdCBjYW4ndCBjb250YWluIGFueSBlYXJsaWVyIG5hdmlnYXRpb25zLCBiZWNhdXNlIHdlIGFsd2F5cyBwdXQgdGhvc2UgaW50byBgYWN0aW9uUXVldWUucGVuZGluZ2AgYnkgY2FsbGluZyBgcnVuQWN0aW9uYClcbiAgICBuZXdBY3Rpb24ubmV4dCA9IGFjdGlvblF1ZXVlLnBlbmRpbmcubmV4dFxuXG4gICAgLy8gaWYgdGhlIHBlbmRpbmcgYWN0aW9uIHdhcyBhIHNlcnZlciBhY3Rpb24sIG1hcmsgdGhlIHF1ZXVlIGFzIG5lZWRpbmcgYSByZWZyZXNoIG9uY2UgZXZlbnRzIGFyZSBwcm9jZXNzZWRcbiAgICBpZiAoYWN0aW9uUXVldWUucGVuZGluZy5wYXlsb2FkLnR5cGUgPT09IEFDVElPTl9TRVJWRVJfQUNUSU9OKSB7XG4gICAgICBhY3Rpb25RdWV1ZS5uZWVkc1JlZnJlc2ggPSB0cnVlXG4gICAgfVxuXG4gICAgcnVuQWN0aW9uKHtcbiAgICAgIGFjdGlvblF1ZXVlLFxuICAgICAgYWN0aW9uOiBuZXdBY3Rpb24sXG4gICAgICBzZXRTdGF0ZSxcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIC8vIFRoZSBxdWV1ZSBpcyBub3QgZW1wdHksIHNvIGFkZCB0aGUgYWN0aW9uIHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlXG4gICAgLy8gSXQgd2lsbCBiZSBzdGFydGVkIGJ5IHJ1blJlbWFpbmluZ0FjdGlvbnMgYWZ0ZXIgdGhlIHByZXZpb3VzIGFjdGlvbiBmaW5pc2hlc1xuICAgIGlmIChhY3Rpb25RdWV1ZS5sYXN0ICE9PSBudWxsKSB7XG4gICAgICBhY3Rpb25RdWV1ZS5sYXN0Lm5leHQgPSBuZXdBY3Rpb25cbiAgICB9XG4gICAgYWN0aW9uUXVldWUubGFzdCA9IG5ld0FjdGlvblxuICB9XG59XG5cbmxldCBnbG9iYWxBY3Rpb25RdWV1ZTogQXBwUm91dGVyQWN0aW9uUXVldWUgfCBudWxsID0gbnVsbFxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXV0YWJsZUFjdGlvblF1ZXVlKFxuICBpbml0aWFsU3RhdGU6IEFwcFJvdXRlclN0YXRlLFxuICBpbnN0cnVtZW50YXRpb25Ib29rczogQ2xpZW50SW5zdHJ1bWVudGF0aW9uSG9va3MgfCBudWxsXG4pOiBBcHBSb3V0ZXJBY3Rpb25RdWV1ZSB7XG4gIGNvbnN0IGFjdGlvblF1ZXVlOiBBcHBSb3V0ZXJBY3Rpb25RdWV1ZSA9IHtcbiAgICBzdGF0ZTogaW5pdGlhbFN0YXRlLFxuICAgIGRpc3BhdGNoOiAocGF5bG9hZDogUmVkdWNlckFjdGlvbnMsIHNldFN0YXRlOiBEaXNwYXRjaFN0YXRlUHJvbWlzZSkgPT5cbiAgICAgIGRpc3BhdGNoQWN0aW9uKGFjdGlvblF1ZXVlLCBwYXlsb2FkLCBzZXRTdGF0ZSksXG4gICAgYWN0aW9uOiBhc3luYyAoc3RhdGU6IEFwcFJvdXRlclN0YXRlLCBhY3Rpb246IFJlZHVjZXJBY3Rpb25zKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSxcbiAgICBwZW5kaW5nOiBudWxsLFxuICAgIGxhc3Q6IG51bGwsXG4gICAgb25Sb3V0ZXJUcmFuc2l0aW9uU3RhcnQ6XG4gICAgICBpbnN0cnVtZW50YXRpb25Ib29rcyAhPT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIGluc3RydW1lbnRhdGlvbkhvb2tzLm9uUm91dGVyVHJhbnNpdGlvblN0YXJ0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gLy8gVGhpcyBwcm9maWxpbmcgaG9vayB3aWxsIGJlIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgZXZlcnkgbmF2aWdhdGlvbi5cbiAgICAgICAgICBpbnN0cnVtZW50YXRpb25Ib29rcy5vblJvdXRlclRyYW5zaXRpb25TdGFydFxuICAgICAgICA6IG51bGwsXG4gIH1cblxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBUaGUgYWN0aW9uIHF1ZXVlIGlzIGxhemlseSBjcmVhdGVkIG9uIGh5ZHJhdGlvbiwgYnV0IGFmdGVyIHRoYXQgcG9pbnRcbiAgICAvLyBpdCBkb2Vzbid0IGNoYW5nZS4gU28gd2UgY2FuIHN0b3JlIGl0IGluIGEgZ2xvYmFsIHJhdGhlciB0aGFuIHBhc3NcbiAgICAvLyBpdCBhcm91bmQgZXZlcnl3aGVyZSB2aWEgcHJvcHMvY29udGV4dC5cbiAgICBpZiAoZ2xvYmFsQWN0aW9uUXVldWUgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0ludGVybmFsIE5leHQuanMgRXJyb3I6IGNyZWF0ZU11dGFibGVBY3Rpb25RdWV1ZSB3YXMgY2FsbGVkIG1vcmUgJyArXG4gICAgICAgICAgJ3RoYW4gb25jZSdcbiAgICAgIClcbiAgICB9XG4gICAgZ2xvYmFsQWN0aW9uUXVldWUgPSBhY3Rpb25RdWV1ZVxuICB9XG5cbiAgcmV0dXJuIGFjdGlvblF1ZXVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJyZW50QXBwUm91dGVyU3RhdGUoKTogQXBwUm91dGVyU3RhdGUgfCBudWxsIHtcbiAgcmV0dXJuIGdsb2JhbEFjdGlvblF1ZXVlICE9PSBudWxsID8gZ2xvYmFsQWN0aW9uUXVldWUuc3RhdGUgOiBudWxsXG59XG5cbmZ1bmN0aW9uIGdldEFwcFJvdXRlckFjdGlvblF1ZXVlKCk6IEFwcFJvdXRlckFjdGlvblF1ZXVlIHtcbiAgaWYgKGdsb2JhbEFjdGlvblF1ZXVlID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0ludGVybmFsIE5leHQuanMgZXJyb3I6IFJvdXRlciBhY3Rpb24gZGlzcGF0Y2hlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24uJ1xuICAgIClcbiAgfVxuICByZXR1cm4gZ2xvYmFsQWN0aW9uUXVldWVcbn1cblxuZnVuY3Rpb24gZ2V0UHJvZmlsaW5nSG9va0Zvck9uTmF2aWdhdGlvblN0YXJ0KCkge1xuICBpZiAoZ2xvYmFsQWN0aW9uUXVldWUgIT09IG51bGwpIHtcbiAgICByZXR1cm4gZ2xvYmFsQWN0aW9uUXVldWUub25Sb3V0ZXJUcmFuc2l0aW9uU3RhcnRcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hOYXZpZ2F0ZUFjdGlvbihcbiAgaHJlZjogc3RyaW5nLFxuICBuYXZpZ2F0ZVR5cGU6IE5hdmlnYXRlQWN0aW9uWyduYXZpZ2F0ZVR5cGUnXSxcbiAgc2hvdWxkU2Nyb2xsOiBib29sZWFuLFxuICBsaW5rSW5zdGFuY2VSZWY6IExpbmtJbnN0YW5jZSB8IG51bGxcbik6IHZvaWQge1xuICAvLyBUT0RPOiBUaGlzIHN0dWZmIGNvdWxkIGp1c3QgZ28gaW50byB0aGUgcmVkdWNlci4gTGVhdmluZyBhcy1pcyBmb3Igbm93XG4gIC8vIHNpbmNlIHdlJ3JlIGFib3V0IHRvIHJld3JpdGUgYWxsIHRoZSByb3V0ZXIgcmVkdWNlciBzdHVmZiBhbnl3YXkuXG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYWRkQmFzZVBhdGgoaHJlZiksIGxvY2F0aW9uLmhyZWYpXG4gIGlmIChwcm9jZXNzLmVudi5fX05FWFRfQVBQX05BVl9GQUlMX0hBTkRMSU5HKSB7XG4gICAgd2luZG93Lm5leHQuX19wZW5kaW5nVXJsID0gdXJsXG4gIH1cblxuICBzZXRMaW5rRm9yQ3VycmVudE5hdmlnYXRpb24obGlua0luc3RhbmNlUmVmKVxuXG4gIGNvbnN0IG9uUm91dGVyVHJhbnNpdGlvblN0YXJ0ID0gZ2V0UHJvZmlsaW5nSG9va0Zvck9uTmF2aWdhdGlvblN0YXJ0KClcbiAgaWYgKG9uUm91dGVyVHJhbnNpdGlvblN0YXJ0ICE9PSBudWxsKSB7XG4gICAgb25Sb3V0ZXJUcmFuc2l0aW9uU3RhcnQoaHJlZiwgbmF2aWdhdGVUeXBlKVxuICB9XG5cbiAgZGlzcGF0Y2hBcHBSb3V0ZXJBY3Rpb24oe1xuICAgIHR5cGU6IEFDVElPTl9OQVZJR0FURSxcbiAgICB1cmwsXG4gICAgaXNFeHRlcm5hbFVybDogaXNFeHRlcm5hbFVSTCh1cmwpLFxuICAgIGxvY2F0aW9uU2VhcmNoOiBsb2NhdGlvbi5zZWFyY2gsXG4gICAgc2hvdWxkU2Nyb2xsLFxuICAgIG5hdmlnYXRlVHlwZSxcbiAgICBhbGxvd0FsaWFzaW5nOiB0cnVlLFxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hUcmF2ZXJzZUFjdGlvbihcbiAgaHJlZjogc3RyaW5nLFxuICB0cmVlOiBGbGlnaHRSb3V0ZXJTdGF0ZSB8IHVuZGVmaW5lZFxuKSB7XG4gIGNvbnN0IG9uUm91dGVyVHJhbnNpdGlvblN0YXJ0ID0gZ2V0UHJvZmlsaW5nSG9va0Zvck9uTmF2aWdhdGlvblN0YXJ0KClcbiAgaWYgKG9uUm91dGVyVHJhbnNpdGlvblN0YXJ0ICE9PSBudWxsKSB7XG4gICAgb25Sb3V0ZXJUcmFuc2l0aW9uU3RhcnQoaHJlZiwgJ3RyYXZlcnNlJylcbiAgfVxuICBkaXNwYXRjaEFwcFJvdXRlckFjdGlvbih7XG4gICAgdHlwZTogQUNUSU9OX1JFU1RPUkUsXG4gICAgdXJsOiBuZXcgVVJMKGhyZWYpLFxuICAgIHRyZWUsXG4gIH0pXG59XG5cbi8qKlxuICogVGhlIGFwcCByb3V0ZXIgdGhhdCBpcyBleHBvc2VkIHRocm91Z2ggYHVzZVJvdXRlcmAuIFRoZXNlIGFyZSBwdWJsaWMgQVBJXG4gKiBtZXRob2RzLiBJbnRlcm5hbCBOZXh0LmpzIGNvZGUgc2hvdWxkIGNhbGwgdGhlIGxvd2VyIGxldmVsIG1ldGhvZHMgZGlyZWN0bHlcbiAqIChhbHRob3VnaCB0aGVyZSdzIGxvdHMgb2YgZXhpc3RpbmcgY29kZSB0aGF0IGRvZXNuJ3QgZG8gdGhhdCkuXG4gKi9cbmV4cG9ydCBjb25zdCBwdWJsaWNBcHBSb3V0ZXJJbnN0YW5jZTogQXBwUm91dGVySW5zdGFuY2UgPSB7XG4gIGJhY2s6ICgpID0+IHdpbmRvdy5oaXN0b3J5LmJhY2soKSxcbiAgZm9yd2FyZDogKCkgPT4gd2luZG93Lmhpc3RvcnkuZm9yd2FyZCgpLFxuICBwcmVmZXRjaDogcHJvY2Vzcy5lbnYuX19ORVhUX0NMSUVOVF9TRUdNRU5UX0NBQ0hFXG4gICAgPyAvLyBVbmxpa2UgdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiwgdGhlIFNlZ21lbnQgQ2FjaGUgZG9lc24ndCBzdG9yZSBpdHNcbiAgICAgIC8vIGRhdGEgaW4gdGhlIHJvdXRlciByZWR1Y2VyIHN0YXRlOyBpdCB3cml0ZXMgaW50byBhIGdsb2JhbCBtdXRhYmxlXG4gICAgICAvLyBjYWNoZS4gU28gd2UgZG9uJ3QgbmVlZCB0byBkaXNwYXRjaCBhbiBhY3Rpb24uXG4gICAgICAoaHJlZjogc3RyaW5nLCBvcHRpb25zPzogUHJlZmV0Y2hPcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGlvblF1ZXVlID0gZ2V0QXBwUm91dGVyQWN0aW9uUXVldWUoKVxuICAgICAgICBwcmVmZXRjaFdpdGhTZWdtZW50Q2FjaGUoXG4gICAgICAgICAgaHJlZixcbiAgICAgICAgICBhY3Rpb25RdWV1ZS5zdGF0ZS5uZXh0VXJsLFxuICAgICAgICAgIGFjdGlvblF1ZXVlLnN0YXRlLnRyZWUsXG4gICAgICAgICAgb3B0aW9ucz8ua2luZCA9PT0gUHJlZmV0Y2hLaW5kLkZVTEwsXG4gICAgICAgICAgb3B0aW9ucz8ub25JbnZhbGlkYXRlID8/IG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIDogKGhyZWY6IHN0cmluZywgb3B0aW9ucz86IFByZWZldGNoT3B0aW9ucykgPT4ge1xuICAgICAgICAvLyBVc2UgdGhlIG9sZCBwcmVmZXRjaCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgY29uc3QgYWN0aW9uUXVldWUgPSBnZXRBcHBSb3V0ZXJBY3Rpb25RdWV1ZSgpXG4gICAgICAgIGNvbnN0IHVybCA9IGNyZWF0ZVByZWZldGNoVVJMKGhyZWYpXG4gICAgICAgIGlmICh1cmwgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUaGUgcHJlZmV0Y2ggcmVkdWNlciBkb2Vzbid0IGFjdHVhbGx5IHVwZGF0ZSBhbnkgc3RhdGUgb3JcbiAgICAgICAgICAvLyB0cmlnZ2VyIGEgcmVyZW5kZXIuIEl0IGp1c3Qgd3JpdGVzIHRvIGEgbXV0YWJsZSBjYWNoZS4gU28gd2VcbiAgICAgICAgICAvLyBzaG91bGRuJ3QgYm90aGVyIGNhbGxpbmcgc2V0U3RhdGUvZGlzcGF0Y2g7IHdlIGNhbiBqdXN0IHJlLXJ1blxuICAgICAgICAgIC8vIHRoZSByZWR1Y2VyIGRpcmVjdGx5IHVzaW5nIHRoZSBjdXJyZW50IHN0YXRlLlxuICAgICAgICAgIC8vIFRPRE86IFJlZmFjdG9yIHRoaXMgYXdheSBmcm9tIGEgXCJyZWR1Y2VyXCIgc28gaXQnc1xuICAgICAgICAgIC8vIGxlc3MgY29uZnVzaW5nLlxuICAgICAgICAgIHByZWZldGNoUmVkdWNlcihhY3Rpb25RdWV1ZS5zdGF0ZSwge1xuICAgICAgICAgICAgdHlwZTogQUNUSU9OX1BSRUZFVENILFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAga2luZDogb3B0aW9ucz8ua2luZCA/PyBQcmVmZXRjaEtpbmQuRlVMTCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9LFxuICByZXBsYWNlOiAoaHJlZjogc3RyaW5nLCBvcHRpb25zPzogTmF2aWdhdGVPcHRpb25zKSA9PiB7XG4gICAgc3RhcnRUcmFuc2l0aW9uKCgpID0+IHtcbiAgICAgIGRpc3BhdGNoTmF2aWdhdGVBY3Rpb24oaHJlZiwgJ3JlcGxhY2UnLCBvcHRpb25zPy5zY3JvbGwgPz8gdHJ1ZSwgbnVsbClcbiAgICB9KVxuICB9LFxuICBwdXNoOiAoaHJlZjogc3RyaW5nLCBvcHRpb25zPzogTmF2aWdhdGVPcHRpb25zKSA9PiB7XG4gICAgc3RhcnRUcmFuc2l0aW9uKCgpID0+IHtcbiAgICAgIGRpc3BhdGNoTmF2aWdhdGVBY3Rpb24oaHJlZiwgJ3B1c2gnLCBvcHRpb25zPy5zY3JvbGwgPz8gdHJ1ZSwgbnVsbClcbiAgICB9KVxuICB9LFxuICByZWZyZXNoOiAoKSA9PiB7XG4gICAgc3RhcnRUcmFuc2l0aW9uKCgpID0+IHtcbiAgICAgIGRpc3BhdGNoQXBwUm91dGVyQWN0aW9uKHtcbiAgICAgICAgdHlwZTogQUNUSU9OX1JFRlJFU0gsXG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgIH0pXG4gICAgfSlcbiAgfSxcbiAgaG1yUmVmcmVzaDogKCkgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnaG1yUmVmcmVzaCBjYW4gb25seSBiZSB1c2VkIGluIGRldmVsb3BtZW50IG1vZGUuIFBsZWFzZSB1c2UgcmVmcmVzaCBpbnN0ZWFkLidcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRUcmFuc2l0aW9uKCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2hBcHBSb3V0ZXJBY3Rpb24oe1xuICAgICAgICAgIHR5cGU6IEFDVElPTl9ITVJfUkVGUkVTSCxcbiAgICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfSxcbn1cblxuLy8gRXhpc3RzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIERvbid0IHVzZSBpbiBhcHBsaWNhdGlvbiBjb2RlLlxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5uZXh0KSB7XG4gIHdpbmRvdy5uZXh0LnJvdXRlciA9IHB1YmxpY0FwcFJvdXRlckluc3RhbmNlXG59XG4iXSwibmFtZXMiOlsiY3JlYXRlTXV0YWJsZUFjdGlvblF1ZXVlIiwiZGlzcGF0Y2hOYXZpZ2F0ZUFjdGlvbiIsImRpc3BhdGNoVHJhdmVyc2VBY3Rpb24iLCJnZXRDdXJyZW50QXBwUm91dGVyU3RhdGUiLCJwdWJsaWNBcHBSb3V0ZXJJbnN0YW5jZSIsInJ1blJlbWFpbmluZ0FjdGlvbnMiLCJhY3Rpb25RdWV1ZSIsInNldFN0YXRlIiwicGVuZGluZyIsIm5leHQiLCJydW5BY3Rpb24iLCJhY3Rpb24iLCJuZWVkc1JlZnJlc2giLCJkaXNwYXRjaCIsInR5cGUiLCJBQ1RJT05fUkVGUkVTSCIsIm9yaWdpbiIsIndpbmRvdyIsImxvY2F0aW9uIiwicHJldlN0YXRlIiwic3RhdGUiLCJwYXlsb2FkIiwiYWN0aW9uUmVzdWx0IiwiaGFuZGxlUmVzdWx0IiwibmV4dFN0YXRlIiwiZGlzY2FyZGVkIiwicmVzb2x2ZSIsImlzVGhlbmFibGUiLCJ0aGVuIiwiZXJyIiwicmVqZWN0IiwiZGlzcGF0Y2hBY3Rpb24iLCJyZXNvbHZlcnMiLCJBQ1RJT05fUkVTVE9SRSIsImRlZmVycmVkUHJvbWlzZSIsIlByb21pc2UiLCJzdGFydFRyYW5zaXRpb24iLCJuZXdBY3Rpb24iLCJsYXN0IiwiQUNUSU9OX05BVklHQVRFIiwiQUNUSU9OX1NFUlZFUl9BQ1RJT04iLCJnbG9iYWxBY3Rpb25RdWV1ZSIsImluaXRpYWxTdGF0ZSIsImluc3RydW1lbnRhdGlvbkhvb2tzIiwicmVzdWx0IiwicmVkdWNlciIsIm9uUm91dGVyVHJhbnNpdGlvblN0YXJ0IiwiRXJyb3IiLCJnZXRBcHBSb3V0ZXJBY3Rpb25RdWV1ZSIsImdldFByb2ZpbGluZ0hvb2tGb3JPbk5hdmlnYXRpb25TdGFydCIsImhyZWYiLCJuYXZpZ2F0ZVR5cGUiLCJzaG91bGRTY3JvbGwiLCJsaW5rSW5zdGFuY2VSZWYiLCJ1cmwiLCJVUkwiLCJhZGRCYXNlUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfQVBQX05BVl9GQUlMX0hBTkRMSU5HIiwiX19wZW5kaW5nVXJsIiwic2V0TGlua0ZvckN1cnJlbnROYXZpZ2F0aW9uIiwiZGlzcGF0Y2hBcHBSb3V0ZXJBY3Rpb24iLCJpc0V4dGVybmFsVXJsIiwiaXNFeHRlcm5hbFVSTCIsImxvY2F0aW9uU2VhcmNoIiwic2VhcmNoIiwiYWxsb3dBbGlhc2luZyIsInRyZWUiLCJiYWNrIiwiaGlzdG9yeSIsImZvcndhcmQiLCJwcmVmZXRjaCIsIl9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRSIsIm9wdGlvbnMiLCJwcmVmZXRjaFdpdGhTZWdtZW50Q2FjaGUiLCJuZXh0VXJsIiwia2luZCIsIlByZWZldGNoS2luZCIsIkZVTEwiLCJvbkludmFsaWRhdGUiLCJjcmVhdGVQcmVmZXRjaFVSTCIsInByZWZldGNoUmVkdWNlciIsIkFDVElPTl9QUkVGRVRDSCIsInJlcGxhY2UiLCJzY3JvbGwiLCJwdXNoIiwicmVmcmVzaCIsImhtclJlZnJlc2giLCJOT0RFX0VOViIsIkFDVElPTl9ITVJfUkVGUkVTSCIsInJvdXRlciJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router-instance.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router.js":
/*!************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router.js ***!
  \************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__  cjs */ \nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    createEmptyCacheNode: function() {\n        return createEmptyCacheNode;\n    },\n    createPrefetchURL: function() {\n        return createPrefetchURL;\n    },\n    default: function() {\n        return AppRouter;\n    },\n    isExternalURL: function() {\n        return isExternalURL;\n    }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"));\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer/router-reducer-types */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _createhreffromurl = __webpack_require__(/*! ./router-reducer/create-href-from-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../../shared/lib/hooks-client-context.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\");\nconst _useactionqueue = __webpack_require__(/*! ./use-action-queue */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/use-action-queue.js\");\nconst _errorboundary = __webpack_require__(/*! ./error-boundary */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/error-boundary.js\");\nconst _globalerror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./builtin/global-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/builtin/global-error.js\"));\nconst _isbot = __webpack_require__(/*! ../../shared/lib/router/utils/is-bot */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/is-bot.js\");\nconst _addbasepath = __webpack_require__(/*! ../add-base-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/add-base-path.js\");\nconst _approuterannouncer = __webpack_require__(/*! ./app-router-announcer */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router-announcer.js\");\nconst _redirectboundary = __webpack_require__(/*! ./redirect-boundary */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect-boundary.js\");\nconst _findheadincache = __webpack_require__(/*! ./router-reducer/reducers/find-head-in-cache */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js\");\nconst _unresolvedthenable = __webpack_require__(/*! ./unresolved-thenable */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/unresolved-thenable.js\");\nconst _removebasepath = __webpack_require__(/*! ../remove-base-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/remove-base-path.js\");\nconst _hasbasepath = __webpack_require__(/*! ../has-base-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/has-base-path.js\");\nconst _computechangedpath = __webpack_require__(/*! ./router-reducer/compute-changed-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\");\nconst _navfailurehandler = __webpack_require__(/*! ./nav-failure-handler */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/nav-failure-handler.js\");\nconst _approuterinstance = __webpack_require__(/*! ./app-router-instance */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router-instance.js\");\nconst _redirect = __webpack_require__(/*! ./redirect */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect.js\");\nconst _redirecterror = __webpack_require__(/*! ./redirect-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect-error.js\");\nconst _links = __webpack_require__(/*! ./links */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/links.js\");\nconst _gracefuldegradeboundary = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./errors/graceful-degrade-boundary */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/errors/graceful-degrade-boundary.js\"));\nconst globalMutable = {};\nfunction isExternalURL(url) {\n    return url.origin !== window.location.origin;\n}\nfunction createPrefetchURL(href) {\n    // Don't prefetch for bots as they don't navigate.\n    if ((0, _isbot.isBot)(window.navigator.userAgent)) {\n        return null;\n    }\n    let url;\n    try {\n        url = new URL((0, _addbasepath.addBasePath)(href), window.location.href);\n    } catch (_) {\n        // TODO: Does this need to throw or can we just console.error instead? Does\n        // anyone rely on this throwing? (Seems unlikely.)\n        throw Object.defineProperty(new Error(\"Cannot prefetch '\" + href + \"' because it cannot be converted to a URL.\"), \"__NEXT_ERROR_CODE\", {\n            value: \"E234\",\n            enumerable: false,\n            configurable: true\n        });\n    }\n    // Don't prefetch during development (improves compilation performance)\n    if (true) {\n        return null;\n    }\n    // External urls can't be prefetched in the same way.\n    if (isExternalURL(url)) {\n        return null;\n    }\n    return url;\n}\nfunction HistoryUpdater(param) {\n    let { appRouterState } = param;\n    (0, _react.useInsertionEffect)(()=>{\n        if (false) {}\n        const { tree, pushRef, canonicalUrl } = appRouterState;\n        const historyState = {\n            ...pushRef.preserveCustomHistoryState ? window.history.state : {},\n            // Identifier is shortened intentionally.\n            // __NA is used to identify if the history entry can be handled by the app-router.\n            // __N is used to identify if the history entry can be handled by the old router.\n            __NA: true,\n            __PRIVATE_NEXTJS_INTERNALS_TREE: tree\n        };\n        if (pushRef.pendingPush && // Skip pushing an additional history entry if the canonicalUrl is the same as the current url.\n        // This mirrors the browser behavior for normal navigation.\n        (0, _createhreffromurl.createHrefFromUrl)(new URL(window.location.href)) !== canonicalUrl) {\n            // This intentionally mutates React state, pushRef is overwritten to ensure additional push/replace calls do not trigger an additional history entry.\n            pushRef.pendingPush = false;\n            window.history.pushState(historyState, '', canonicalUrl);\n        } else {\n            window.history.replaceState(historyState, '', canonicalUrl);\n        }\n    }, [\n        appRouterState\n    ]);\n    (0, _react.useEffect)(()=>{\n        // The Next-Url and the base tree may affect the result of a prefetch\n        // task. Re-prefetch all visible links with the updated values. In most\n        // cases, this will not result in any new network requests, only if\n        // the prefetch result actually varies on one of these inputs.\n        if (false) {}\n    }, [\n        appRouterState.nextUrl,\n        appRouterState.tree\n    ]);\n    return null;\n}\n_c = HistoryUpdater;\nfunction createEmptyCacheNode() {\n    return {\n        lazyData: null,\n        rsc: null,\n        prefetchRsc: null,\n        head: null,\n        prefetchHead: null,\n        parallelRoutes: new Map(),\n        loading: null,\n        navigatedAt: -1\n    };\n}\nfunction copyNextJsInternalHistoryState(data) {\n    if (data == null) data = {};\n    const currentState = window.history.state;\n    const __NA = currentState == null ? void 0 : currentState.__NA;\n    if (__NA) {\n        data.__NA = __NA;\n    }\n    const __PRIVATE_NEXTJS_INTERNALS_TREE = currentState == null ? void 0 : currentState.__PRIVATE_NEXTJS_INTERNALS_TREE;\n    if (__PRIVATE_NEXTJS_INTERNALS_TREE) {\n        data.__PRIVATE_NEXTJS_INTERNALS_TREE = __PRIVATE_NEXTJS_INTERNALS_TREE;\n    }\n    return data;\n}\nfunction Head(param) {\n    let { headCacheNode } = param;\n    // If this segment has a `prefetchHead`, it's the statically prefetched data.\n    // We should use that on initial render instead of `head`. Then we'll switch\n    // to `head` when the dynamic response streams in.\n    const head = headCacheNode !== null ? headCacheNode.head : null;\n    const prefetchHead = headCacheNode !== null ? headCacheNode.prefetchHead : null;\n    // If no prefetch data is available, then we go straight to rendering `head`.\n    const resolvedPrefetchRsc = prefetchHead !== null ? prefetchHead : head;\n    // We use `useDeferredValue` to handle switching between the prefetched and\n    // final values. The second argument is returned on initial render, then it\n    // re-renders with the first argument.\n    return (0, _react.useDeferredValue)(head, resolvedPrefetchRsc);\n}\n_c1 = Head;\n/**\n * The global router that wraps the application components.\n */ function Router(param) {\n    let { actionQueue, assetPrefix, globalError, gracefullyDegrade } = param;\n    const state = (0, _useactionqueue.useActionQueue)(actionQueue);\n    const { canonicalUrl } = state;\n    // Add memoized pathname/query for useSearchParams and usePathname.\n    const { searchParams, pathname } = (0, _react.useMemo)(()=>{\n        const url = new URL(canonicalUrl,  false ? 0 : window.location.href);\n        return {\n            // This is turned into a readonly class in `useSearchParams`\n            searchParams: url.searchParams,\n            pathname: (0, _hasbasepath.hasBasePath)(url.pathname) ? (0, _removebasepath.removeBasePath)(url.pathname) : url.pathname\n        };\n    }, [\n        canonicalUrl\n    ]);\n    if (true) {\n        // eslint-disable-next-line react-hooks/rules-of-hooks\n        const { cache, prefetchCache, tree } = state;\n        // This hook is in a conditional but that is ok because `process.env.NODE_ENV` never changes\n        // eslint-disable-next-line react-hooks/rules-of-hooks\n        (0, _react.useEffect)(()=>{\n            // Add `window.nd` for debugging purposes.\n            // This is not meant for use in applications as concurrent rendering will affect the cache/tree/router.\n            // @ts-ignore this is for debugging\n            window.nd = {\n                router: _approuterinstance.publicAppRouterInstance,\n                cache,\n                prefetchCache,\n                tree\n            };\n        }, [\n            cache,\n            prefetchCache,\n            tree\n        ]);\n    }\n    (0, _react.useEffect)(()=>{\n        // If the app is restored from bfcache, it's possible that\n        // pushRef.mpaNavigation is true, which would mean that any re-render of this component\n        // would trigger the mpa navigation logic again from the lines below.\n        // This will restore the router to the initial state in the event that the app is restored from bfcache.\n        function handlePageShow(event) {\n            var _window_history_state;\n            if (!event.persisted || !((_window_history_state = window.history.state) == null ? void 0 : _window_history_state.__PRIVATE_NEXTJS_INTERNALS_TREE)) {\n                return;\n            }\n            // Clear the pendingMpaPath value so that a subsequent MPA navigation to the same URL can be triggered.\n            // This is necessary because if the browser restored from bfcache, the pendingMpaPath would still be set to the value\n            // of the last MPA navigation.\n            globalMutable.pendingMpaPath = undefined;\n            (0, _useactionqueue.dispatchAppRouterAction)({\n                type: _routerreducertypes.ACTION_RESTORE,\n                url: new URL(window.location.href),\n                tree: window.history.state.__PRIVATE_NEXTJS_INTERNALS_TREE\n            });\n        }\n        window.addEventListener('pageshow', handlePageShow);\n        return ()=>{\n            window.removeEventListener('pageshow', handlePageShow);\n        };\n    }, []);\n    (0, _react.useEffect)(()=>{\n        // Ensure that any redirect errors that bubble up outside of the RedirectBoundary\n        // are caught and handled by the router.\n        function handleUnhandledRedirect(event) {\n            const error = 'reason' in event ? event.reason : event.error;\n            if ((0, _redirecterror.isRedirectError)(error)) {\n                event.preventDefault();\n                const url = (0, _redirect.getURLFromRedirectError)(error);\n                const redirectType = (0, _redirect.getRedirectTypeFromError)(error);\n                // TODO: This should access the router methods directly, rather than\n                // go through the public interface.\n                if (redirectType === _redirecterror.RedirectType.push) {\n                    _approuterinstance.publicAppRouterInstance.push(url, {});\n                } else {\n                    _approuterinstance.publicAppRouterInstance.replace(url, {});\n                }\n            }\n        }\n        window.addEventListener('error', handleUnhandledRedirect);\n        window.addEventListener('unhandledrejection', handleUnhandledRedirect);\n        return ()=>{\n            window.removeEventListener('error', handleUnhandledRedirect);\n            window.removeEventListener('unhandledrejection', handleUnhandledRedirect);\n        };\n    }, []);\n    // When mpaNavigation flag is set do a hard navigation to the new url.\n    // Infinitely suspend because we don't actually want to rerender any child\n    // components with the new URL and any entangled state updates shouldn't\n    // commit either (eg: useTransition isPending should stay true until the page\n    // unloads).\n    //\n    // This is a side effect in render. Don't try this at home, kids. It's\n    // probably safe because we know this is a singleton component and it's never\n    // in <Offscreen>. At least I hope so. (It will run twice in dev strict mode,\n    // but that's... fine?)\n    const { pushRef } = state;\n    if (pushRef.mpaNavigation) {\n        // if there's a re-render, we don't want to trigger another redirect if one is already in flight to the same URL\n        if (globalMutable.pendingMpaPath !== canonicalUrl) {\n            const location = window.location;\n            if (pushRef.pendingPush) {\n                location.assign(canonicalUrl);\n            } else {\n                location.replace(canonicalUrl);\n            }\n            globalMutable.pendingMpaPath = canonicalUrl;\n        }\n        // TODO-APP: Should we listen to navigateerror here to catch failed\n        // navigations somehow? And should we call window.stop() if a SPA navigation\n        // should interrupt an MPA one?\n        // NOTE: This is intentionally using `throw` instead of `use` because we're\n        // inside an externally mutable condition (pushRef.mpaNavigation), which\n        // violates the rules of hooks.\n        throw _unresolvedthenable.unresolvedThenable;\n    }\n    (0, _react.useEffect)(()=>{\n        const originalPushState = window.history.pushState.bind(window.history);\n        const originalReplaceState = window.history.replaceState.bind(window.history);\n        // Ensure the canonical URL in the Next.js Router is updated when the URL is changed so that `usePathname` and `useSearchParams` hold the pushed values.\n        const applyUrlFromHistoryPushReplace = (url)=>{\n            var _window_history_state;\n            const href = window.location.href;\n            const tree = (_window_history_state = window.history.state) == null ? void 0 : _window_history_state.__PRIVATE_NEXTJS_INTERNALS_TREE;\n            (0, _react.startTransition)(()=>{\n                (0, _useactionqueue.dispatchAppRouterAction)({\n                    type: _routerreducertypes.ACTION_RESTORE,\n                    url: new URL(url != null ? url : href, href),\n                    tree\n                });\n            });\n        };\n        /**\n     * Patch pushState to ensure external changes to the history are reflected in the Next.js Router.\n     * Ensures Next.js internal history state is copied to the new history entry.\n     * Ensures usePathname and useSearchParams hold the newly provided url.\n     */ window.history.pushState = function pushState(data, _unused, url) {\n            // Avoid a loop when Next.js internals trigger pushState/replaceState\n            if ((data == null ? void 0 : data.__NA) || (data == null ? void 0 : data._N)) {\n                return originalPushState(data, _unused, url);\n            }\n            data = copyNextJsInternalHistoryState(data);\n            if (url) {\n                applyUrlFromHistoryPushReplace(url);\n            }\n            return originalPushState(data, _unused, url);\n        };\n        /**\n     * Patch replaceState to ensure external changes to the history are reflected in the Next.js Router.\n     * Ensures Next.js internal history state is copied to the new history entry.\n     * Ensures usePathname and useSearchParams hold the newly provided url.\n     */ window.history.replaceState = function replaceState(data, _unused, url) {\n            // Avoid a loop when Next.js internals trigger pushState/replaceState\n            if ((data == null ? void 0 : data.__NA) || (data == null ? void 0 : data._N)) {\n                return originalReplaceState(data, _unused, url);\n            }\n            data = copyNextJsInternalHistoryState(data);\n            if (url) {\n                applyUrlFromHistoryPushReplace(url);\n            }\n            return originalReplaceState(data, _unused, url);\n        };\n        /**\n     * Handle popstate event, this is used to handle back/forward in the browser.\n     * By default dispatches ACTION_RESTORE, however if the history entry was not pushed/replaced by app-router it will reload the page.\n     * That case can happen when the old router injected the history entry.\n     */ const onPopState = (event)=>{\n            if (!event.state) {\n                // TODO-APP: this case only happens when pushState/replaceState was called outside of Next.js. It should probably reload the page in this case.\n                return;\n            }\n            // This case happens when the history entry was pushed by the `pages` router.\n            if (!event.state.__NA) {\n                window.location.reload();\n                return;\n            }\n            // TODO-APP: Ideally the back button should not use startTransition as it should apply the updates synchronously\n            // Without startTransition works if the cache is there for this path\n            (0, _react.startTransition)(()=>{\n                (0, _approuterinstance.dispatchTraverseAction)(window.location.href, event.state.__PRIVATE_NEXTJS_INTERNALS_TREE);\n            });\n        };\n        // Register popstate event to call onPopstate.\n        window.addEventListener('popstate', onPopState);\n        return ()=>{\n            window.history.pushState = originalPushState;\n            window.history.replaceState = originalReplaceState;\n            window.removeEventListener('popstate', onPopState);\n        };\n    }, []);\n    const { cache, tree, nextUrl, focusAndScrollRef } = state;\n    const matchingHead = (0, _react.useMemo)(()=>{\n        return (0, _findheadincache.findHeadInCache)(cache, tree[1]);\n    }, [\n        cache,\n        tree\n    ]);\n    // Add memoized pathParams for useParams.\n    const pathParams = (0, _react.useMemo)(()=>{\n        return (0, _computechangedpath.getSelectedParams)(tree);\n    }, [\n        tree\n    ]);\n    const layoutRouterContext = (0, _react.useMemo)(()=>{\n        return {\n            parentTree: tree,\n            parentCacheNode: cache,\n            parentSegmentPath: null,\n            // Root node always has `url`\n            // Provided in AppTreeContext to ensure it can be overwritten in layout-router\n            url: canonicalUrl\n        };\n    }, [\n        tree,\n        cache,\n        canonicalUrl\n    ]);\n    const globalLayoutRouterContext = (0, _react.useMemo)(()=>{\n        return {\n            tree,\n            focusAndScrollRef,\n            nextUrl\n        };\n    }, [\n        tree,\n        focusAndScrollRef,\n        nextUrl\n    ]);\n    let head;\n    if (matchingHead !== null) {\n        // The head is wrapped in an extra component so we can use\n        // `useDeferredValue` to swap between the prefetched and final versions of\n        // the head. (This is what LayoutRouter does for segment data, too.)\n        //\n        // The `key` is used to remount the component whenever the head moves to\n        // a different segment.\n        const [headCacheNode, headKey] = matchingHead;\n        head = /*#__PURE__*/ (0, _jsxruntime.jsx)(Head, {\n            headCacheNode: headCacheNode\n        }, headKey);\n    } else {\n        head = null;\n    }\n    let content = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_redirectboundary.RedirectBoundary, {\n        children: [\n            head,\n            cache.rsc,\n            /*#__PURE__*/ (0, _jsxruntime.jsx)(_approuterannouncer.AppRouterAnnouncer, {\n                tree: tree\n            })\n        ]\n    });\n    if (true) {\n        // In development, we apply few error boundaries and hot-reloader:\n        // - DevRootHTTPAccessFallbackBoundary: avoid using navigation API like notFound() in root layout\n        // - HotReloader:\n        //  - hot-reload the app when the code changes\n        //  - render dev overlay\n        //  - catch runtime errors and display global-error when necessary\n        if (true) {\n            const { DevRootHTTPAccessFallbackBoundary } = __webpack_require__(/*! ./dev-root-http-access-fallback-boundary */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/dev-root-http-access-fallback-boundary.js\");\n            content = /*#__PURE__*/ (0, _jsxruntime.jsx)(DevRootHTTPAccessFallbackBoundary, {\n                children: content\n            });\n        }\n        const HotReloader = (__webpack_require__(/*! ../dev/hot-reloader/app/hot-reloader-app */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/app/hot-reloader-app.js\")[\"default\"]);\n        content = /*#__PURE__*/ (0, _jsxruntime.jsx)(HotReloader, {\n            assetPrefix: assetPrefix,\n            globalError: globalError,\n            children: content\n        });\n    } else {}\n    return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n        children: [\n            /*#__PURE__*/ (0, _jsxruntime.jsx)(HistoryUpdater, {\n                appRouterState: state\n            }),\n            /*#__PURE__*/ (0, _jsxruntime.jsx)(RuntimeStyles, {}),\n            /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathParamsContext.Provider, {\n                value: pathParams,\n                children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.PathnameContext.Provider, {\n                    value: pathname,\n                    children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_hooksclientcontextsharedruntime.SearchParamsContext.Provider, {\n                        value: searchParams,\n                        children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.GlobalLayoutRouterContext.Provider, {\n                            value: globalLayoutRouterContext,\n                            children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.AppRouterContext.Provider, {\n                                value: _approuterinstance.publicAppRouterInstance,\n                                children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_approutercontextsharedruntime.LayoutRouterContext.Provider, {\n                                    value: layoutRouterContext,\n                                    children: content\n                                })\n                            })\n                        })\n                    })\n                })\n            })\n        ]\n    });\n}\n_c2 = Router;\nfunction AppRouter(param) {\n    let { actionQueue, globalErrorState, assetPrefix, gracefullyDegrade } = param;\n    (0, _navfailurehandler.useNavFailureHandler)();\n    const router = /*#__PURE__*/ (0, _jsxruntime.jsx)(Router, {\n        actionQueue: actionQueue,\n        assetPrefix: assetPrefix,\n        globalError: globalErrorState,\n        gracefullyDegrade: gracefullyDegrade\n    });\n    if (gracefullyDegrade) {\n        return router;\n    } else {\n        return /*#__PURE__*/ (0, _jsxruntime.jsx)(_errorboundary.ErrorBoundary, {\n            // At the very top level, use the default GlobalError component as the final fallback.\n            // When the app router itself fails, which means the framework itself fails, we show the default error.\n            errorComponent: _globalerror.default,\n            children: router\n        });\n    }\n}\n_c3 = AppRouter;\nconst runtimeStyles = new Set();\nlet runtimeStyleChanged = new Set();\nglobalThis._N_E_STYLE_LOAD = function(href) {\n    let len = runtimeStyles.size;\n    runtimeStyles.add(href);\n    if (runtimeStyles.size !== len) {\n        runtimeStyleChanged.forEach((cb)=>cb());\n    }\n    // TODO figure out how to get a promise here\n    // But maybe it's not necessary as react would block rendering until it's loaded\n    return Promise.resolve();\n};\nfunction RuntimeStyles() {\n    _s();\n    const [, forceUpdate] = _react.default.useState(0);\n    const renderedStylesSize = runtimeStyles.size;\n    (0, _react.useEffect)(()=>{\n        const changed = ()=>forceUpdate((c)=>c + 1);\n        runtimeStyleChanged.add(changed);\n        if (renderedStylesSize !== runtimeStyles.size) {\n            changed();\n        }\n        return ()=>{\n            runtimeStyleChanged.delete(changed);\n        };\n    }, [\n        renderedStylesSize,\n        forceUpdate\n    ]);\n    const dplId =  false ? 0 : '';\n    return [\n        ...runtimeStyles\n    ].map((href, i)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n            rel: \"stylesheet\",\n            href: \"\" + href + dplId,\n            // @ts-ignore\n            precedence: \"next\"\n        }, i));\n}\n_s(RuntimeStyles, \"Eht7Kgdrrgt5B4LSklQ7qDPo8Aw=\");\n_c4 = RuntimeStyles;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=app-router.js.map\nvar _c, _c1, _c2, _c3, _c4;\n$RefreshReg$(_c, \"HistoryUpdater\");\n$RefreshReg$(_c1, \"Head\");\n$RefreshReg$(_c2, \"Router\");\n$RefreshReg$(_c3, \"AppRouter\");\n$RefreshReg$(_c4, \"RuntimeStyles\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9hcHAtcm91dGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0lBNklnQkEsb0JBQW9CO2VBQXBCQTs7SUE5RUFDLGlCQUFpQjtlQUFqQkE7O0lBb2ZoQixPQW1DQztlQW5DdUJDOztJQS9mUkMsYUFBYTtlQUFiQTs7Ozs7OzZFQTVDVDsyREFLQTtnREFFd0I7K0NBRUc7NkRBSzNCOzRDQUNpRDsyQ0FDMUI7a0ZBQ0M7bUNBQ1Q7eUNBQ007Z0RBQ087OENBQ0Y7NkNBQ0Q7Z0RBQ0c7NENBQ0o7eUNBQ0g7Z0RBQ007K0NBRUc7K0NBTTlCO3NDQUMyRDsyQ0FDcEI7bUNBQ2I7OEZBQ0c7QUFFcEMsTUFBTUMsZ0JBRUYsQ0FBQztBQUVFLFNBQVNELGNBQWNFLEdBQVE7SUFDcEMsT0FBT0EsSUFBSUMsTUFBTSxLQUFLQyxPQUFPQyxRQUFRLENBQUNGLE1BQU07QUFDOUM7QUFTTyxTQUFTTCxrQkFBa0JRLElBQVk7SUFDNUMsa0RBQWtEO0lBQ2xELElBQUlDLENBQUFBLEdBQUFBLE9BQUFBLEtBQUFBLEVBQU1ILE9BQU9JLFNBQVMsQ0FBQ0MsU0FBUyxHQUFHO1FBQ3JDLE9BQU87SUFDVDtJQUVBLElBQUlQO0lBQ0osSUFBSTtRQUNGQSxNQUFNLElBQUlRLElBQUlDLENBQUFBLEdBQUFBLGFBQUFBLFdBQVcsRUFBQ0wsT0FBT0YsT0FBT0MsUUFBUSxDQUFDQyxJQUFJO0lBQ3ZELEVBQUUsT0FBT00sR0FBRztRQUNWLDJFQUEyRTtRQUMzRSxrREFBa0Q7UUFDbEQsTUFBTSxxQkFFTCxDQUZLLElBQUlDLE1BQ1Asc0JBQW1CUCxPQUFLLCtDQURyQjttQkFBQTt3QkFBQTswQkFBQTtRQUVOO0lBQ0Y7SUFFQSx1RUFBdUU7SUFDdkUsSUFBSVEsSUFBb0IsRUFBb0I7UUFDMUMsT0FBTztJQUNUO0lBRUEscURBQXFEO0lBQ3JELElBQUlkLGNBQWNFLE1BQU07UUFDdEIsT0FBTztJQUNUO0lBRUEsT0FBT0E7QUFDVDtBQUVBLFNBQVNlLGVBQWUsS0FJdkI7SUFKdUIsTUFDdEJDLGNBQWMsRUFHZixHQUp1QjtJQUt0QkMsQ0FBQUEsR0FBQUEsT0FBQUEsa0JBQUFBLEVBQW1CO1FBQ2pCLElBQUlMLEtBQXdDLEVBQUUsRUFJN0M7UUFFRCxNQUFNLEVBQUVVLElBQUksRUFBRUMsT0FBTyxFQUFFQyxZQUFZLEVBQUUsR0FBR1I7UUFDeEMsTUFBTVMsZUFBZTtZQUNuQixHQUFJRixRQUFRRywwQkFBMEIsR0FBR3hCLE9BQU95QixPQUFPLENBQUNDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDbEUseUNBQXlDO1lBQ3pDLGtGQUFrRjtZQUNsRixpRkFBaUY7WUFDakZDLE1BQU07WUFDTkMsaUNBQWlDUjtRQUNuQztRQUNBLElBQ0VDLFFBQVFRLFdBQVcsSUFHbkJDLCtGQUYrRjtRQUMvRiwyREFBMkQ7UUFDM0RBLENBQUFBLEdBQUFBLG1CQUFBQSxpQkFBQUEsRUFBa0IsSUFBSXhCLElBQUlOLE9BQU9DLFFBQVEsQ0FBQ0MsSUFBSSxPQUFPb0IsY0FDckQ7WUFDQSxxSkFBcUo7WUFDckpELFFBQVFRLFdBQVcsR0FBRztZQUN0QjdCLE9BQU95QixPQUFPLENBQUNNLFNBQVMsQ0FBQ1IsY0FBYyxJQUFJRDtRQUM3QyxPQUFPO1lBQ0x0QixPQUFPeUIsT0FBTyxDQUFDTyxZQUFZLENBQUNULGNBQWMsSUFBSUQ7UUFDaEQ7SUFDRixHQUFHO1FBQUNSO0tBQWU7SUFFbkJtQixDQUFBQSxHQUFBQSxPQUFBQSxTQUFBQSxFQUFVO1FBQ1IscUVBQXFFO1FBQ3JFLHVFQUF1RTtRQUN2RSxtRUFBbUU7UUFDbkUsOERBQThEO1FBQzlELElBQUl2QixLQUF1QyxFQUFFLEVBRTVDO0lBQ0gsR0FBRztRQUFDSSxlQUFlc0IsT0FBTztRQUFFdEIsZUFBZU0sSUFBSTtLQUFDO0lBRWhELE9BQU87QUFDVDs7QUFFTyxTQUFTM0I7SUFDZCxPQUFPO1FBQ0w0QyxVQUFVO1FBQ1ZDLEtBQUs7UUFDTEMsYUFBYTtRQUNiQyxNQUFNO1FBQ05DLGNBQWM7UUFDZEMsZ0JBQWdCLElBQUlDO1FBQ3BCQyxTQUFTO1FBQ1RDLGFBQWEsQ0FBQztJQUNoQjtBQUNGO0FBRUEsU0FBU0MsK0JBQStCQyxJQUFTO0lBQy9DLElBQUlBLFFBQVEsTUFBTUEsT0FBTyxDQUFDO0lBQzFCLE1BQU1DLGVBQWVoRCxPQUFPeUIsT0FBTyxDQUFDQyxLQUFLO0lBQ3pDLE1BQU1DLE9BQU9xQixnQkFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsYUFBY3JCLElBQUk7SUFDL0IsSUFBSUEsTUFBTTtRQUNSb0IsS0FBS3BCLElBQUksR0FBR0E7SUFDZDtJQUNBLE1BQU1DLGtDQUNKb0IsZ0JBQUFBLE9BQUFBLEtBQUFBLElBQUFBLGFBQWNwQiwrQkFBK0I7SUFDL0MsSUFBSUEsaUNBQWlDO1FBQ25DbUIsS0FBS25CLCtCQUErQixHQUFHQTtJQUN6QztJQUVBLE9BQU9tQjtBQUNUO0FBRUEsY0FBYyxLQUliO0lBSmEsTUFDWkcsYUFBYSxFQUdkLEdBSmE7SUFLWiw2RUFBNkU7SUFDN0UsNEVBQTRFO0lBQzVFLGtEQUFrRDtJQUNsRCxNQUFNVixPQUFPVSxrQkFBa0IsT0FBT0EsY0FBY1YsSUFBSSxHQUFHO0lBQzNELE1BQU1DLGVBQ0pTLGtCQUFrQixPQUFPQSxjQUFjVCxZQUFZLEdBQUc7SUFFeEQsNkVBQTZFO0lBQzdFLE1BQU1VLHNCQUFzQlYsaUJBQWlCLE9BQU9BLGVBQWVEO0lBRW5FLDJFQUEyRTtJQUMzRSwyRUFBMkU7SUFDM0Usc0NBQXNDO0lBQ3RDLE9BQU9ZLENBQUFBLEdBQUFBLE9BQUFBLGdCQUFBQSxFQUFpQlosTUFBTVc7QUFDaEM7TUFuQlNGO0FBcUJUOztDQUVDLEdBQ0QsZ0JBQWdCLEtBVWY7SUFWZSxNQUNkSyxXQUFXLEVBQ1hDLFdBQVcsRUFDWEMsV0FBVyxFQUNYQyxpQkFBaUIsRUFNbEIsR0FWZTtJQVdkLE1BQU0vQixRQUFRZ0MsQ0FBQUEsR0FBQUEsZ0JBQUFBLGNBQUFBLEVBQWVKO0lBQzdCLE1BQU0sRUFBRWhDLFlBQVksRUFBRSxHQUFHSTtJQUN6QixtRUFBbUU7SUFDbkUsTUFBTSxFQUFFaUMsWUFBWSxFQUFFQyxRQUFRLEVBQUUsR0FBR0MsQ0FBQUEsR0FBQUEsT0FBQUEsT0FBQUEsRUFBUTtRQUN6QyxNQUFNL0QsTUFBTSxJQUFJUSxJQUNkZ0IsY0FDQSxNQUE2QixHQUFHLENBQVUsR0FBR3RCLE9BQU9DLFFBQVEsQ0FBQ0MsSUFBSTtRQUduRSxPQUFPO1lBQ0wsNERBQTREO1lBQzVEeUQsY0FBYzdELElBQUk2RCxZQUFZO1lBQzlCQyxVQUFVRSxDQUFBQSxHQUFBQSxhQUFBQSxXQUFBQSxFQUFZaEUsSUFBSThELFFBQVEsSUFDOUJHLENBQUFBLEdBQUFBLGdCQUFBQSxjQUFBQSxFQUFlakUsSUFBSThELFFBQVEsSUFDM0I5RCxJQUFJOEQsUUFBUTtRQUNsQjtJQUNGLEdBQUc7UUFBQ3RDO0tBQWE7SUFFakIsSUFBSVosSUFBb0IsRUFBbUI7UUFDekMsc0RBQXNEO1FBQ3RELE1BQU0sRUFBRXNELEtBQUssRUFBRUMsYUFBYSxFQUFFN0MsSUFBSSxFQUFFLEdBQUdNO1FBRXZDLDRGQUE0RjtRQUM1RixzREFBc0Q7UUFDdERPLENBQUFBLEdBQUFBLE9BQUFBLFNBQUFBLEVBQVU7WUFDUiwwQ0FBMEM7WUFDMUMsdUdBQXVHO1lBQ3ZHLG1DQUFtQztZQUNuQ2pDLE9BQU9rRSxFQUFFLEdBQUc7Z0JBQ1ZDLFFBQVFDLG1CQUFBQSx1QkFBdUI7Z0JBQy9CSjtnQkFDQUM7Z0JBQ0E3QztZQUNGO1FBQ0YsR0FBRztZQUFDNEM7WUFBT0M7WUFBZTdDO1NBQUs7SUFDakM7SUFFQWEsQ0FBQUEsR0FBQUEsT0FBQUEsU0FBQUEsRUFBVTtRQUNSLDBEQUEwRDtRQUMxRCx1RkFBdUY7UUFDdkYscUVBQXFFO1FBQ3JFLHdHQUF3RztRQUN4RyxTQUFTb0MsZUFBZUMsS0FBMEI7Z0JBRzdDdEU7WUFGSCxJQUNFLENBQUNzRSxNQUFNQyxTQUFTLElBQ2hCLEdBQUN2RSx3QkFBQUEsT0FBT3lCLE9BQU8sQ0FBQ0MsS0FBQUEsS0FBSyxnQkFBcEIxQixzQkFBc0I0QiwrQkFBQUEsR0FDdkI7Z0JBQ0E7WUFDRjtZQUVBLHVHQUF1RztZQUN2RyxxSEFBcUg7WUFDckgsOEJBQThCO1lBQzlCL0IsY0FBYzJFLGNBQWMsR0FBR3JEO1lBRS9Cc0QsQ0FBQUEsR0FBQUEsZ0JBQUFBLHVCQUFBQSxFQUF3QjtnQkFDdEJDLE1BQU1DLG9CQUFBQSxjQUFjO2dCQUNwQjdFLEtBQUssSUFBSVEsSUFBSU4sT0FBT0MsUUFBUSxDQUFDQyxJQUFJO2dCQUNqQ2tCLE1BQU1wQixPQUFPeUIsT0FBTyxDQUFDQyxLQUFLLENBQUNFLCtCQUErQjtZQUM1RDtRQUNGO1FBRUE1QixPQUFPNEUsZ0JBQWdCLENBQUMsWUFBWVA7UUFFcEMsT0FBTztZQUNMckUsT0FBTzZFLG1CQUFtQixDQUFDLFlBQVlSO1FBQ3pDO0lBQ0YsR0FBRyxFQUFFO0lBRUxwQyxDQUFBQSxHQUFBQSxPQUFBQSxTQUFBQSxFQUFVO1FBQ1IsaUZBQWlGO1FBQ2pGLHdDQUF3QztRQUN4QyxTQUFTNkMsd0JBQ1BSLEtBQXlDO1lBRXpDLE1BQU1TLFFBQVEsWUFBWVQsUUFBUUEsTUFBTVUsTUFBTSxHQUFHVixNQUFNUyxLQUFLO1lBQzVELElBQUlFLENBQUFBLEdBQUFBLGVBQUFBLGVBQUFBLEVBQWdCRixRQUFRO2dCQUMxQlQsTUFBTVksY0FBYztnQkFDcEIsTUFBTXBGLE1BQU1xRixDQUFBQSxHQUFBQSxVQUFBQSx1QkFBQUEsRUFBd0JKO2dCQUNwQyxNQUFNSyxlQUFlQyxDQUFBQSxHQUFBQSxVQUFBQSx3QkFBQUEsRUFBeUJOO2dCQUM5QyxvRUFBb0U7Z0JBQ3BFLG1DQUFtQztnQkFDbkMsSUFBSUssaUJBQWlCRSxlQUFBQSxZQUFZLENBQUNDLElBQUksRUFBRTtvQkFDdENuQixtQkFBQUEsdUJBQXVCLENBQUNtQixJQUFJLENBQUN6RixLQUFLLENBQUM7Z0JBQ3JDLE9BQU87b0JBQ0xzRSxtQkFBQUEsdUJBQXVCLENBQUNvQixPQUFPLENBQUMxRixLQUFLLENBQUM7Z0JBQ3hDO1lBQ0Y7UUFDRjtRQUNBRSxPQUFPNEUsZ0JBQWdCLENBQUMsU0FBU0U7UUFDakM5RSxPQUFPNEUsZ0JBQWdCLENBQUMsc0JBQXNCRTtRQUU5QyxPQUFPO1lBQ0w5RSxPQUFPNkUsbUJBQW1CLENBQUMsU0FBU0M7WUFDcEM5RSxPQUFPNkUsbUJBQW1CLENBQUMsc0JBQXNCQztRQUNuRDtJQUNGLEdBQUcsRUFBRTtJQUVMLHNFQUFzRTtJQUN0RSwwRUFBMEU7SUFDMUUsd0VBQXdFO0lBQ3hFLDZFQUE2RTtJQUM3RSxZQUFZO0lBQ1osRUFBRTtJQUNGLHNFQUFzRTtJQUN0RSw2RUFBNkU7SUFDN0UsNkVBQTZFO0lBQzdFLHVCQUF1QjtJQUN2QixNQUFNLEVBQUV6RCxPQUFPLEVBQUUsR0FBR0s7SUFDcEIsSUFBSUwsUUFBUW9FLGFBQWEsRUFBRTtRQUN6QixnSEFBZ0g7UUFDaEgsSUFBSTVGLGNBQWMyRSxjQUFjLEtBQUtsRCxjQUFjO1lBQ2pELE1BQU1yQixXQUFXRCxPQUFPQyxRQUFRO1lBQ2hDLElBQUlvQixRQUFRUSxXQUFXLEVBQUU7Z0JBQ3ZCNUIsU0FBU3lGLE1BQU0sQ0FBQ3BFO1lBQ2xCLE9BQU87Z0JBQ0xyQixTQUFTdUYsT0FBTyxDQUFDbEU7WUFDbkI7WUFFQXpCLGNBQWMyRSxjQUFjLEdBQUdsRDtRQUNqQztRQUNBLG1FQUFtRTtRQUNuRSw0RUFBNEU7UUFDNUUsK0JBQStCO1FBQy9CLDJFQUEyRTtRQUMzRSx3RUFBd0U7UUFDeEUsK0JBQStCO1FBQy9CLE1BQU1xRSxvQkFBQUEsa0JBQWtCO0lBQzFCO0lBRUExRCxDQUFBQSxHQUFBQSxPQUFBQSxTQUFBQSxFQUFVO1FBQ1IsTUFBTTJELG9CQUFvQjVGLE9BQU95QixPQUFPLENBQUNNLFNBQVMsQ0FBQzhELElBQUksQ0FBQzdGLE9BQU95QixPQUFPO1FBQ3RFLE1BQU1xRSx1QkFBdUI5RixPQUFPeUIsT0FBTyxDQUFDTyxZQUFZLENBQUM2RCxJQUFJLENBQzNEN0YsT0FBT3lCLE9BQU87UUFHaEIsd0pBQXdKO1FBQ3hKLE1BQU1zRSxpQ0FBaUMsQ0FDckNqRztnQkFJRUU7WUFGRixNQUFNRSxPQUFPRixPQUFPQyxRQUFRLENBQUNDLElBQUk7WUFDakMsTUFBTWtCLE9BQUFBLENBQ0pwQix3QkFBQUEsT0FBT3lCLE9BQU8sQ0FBQ0MsS0FBQUEsS0FBSyxnQkFBcEIxQixzQkFBc0I0QiwrQkFBK0I7WUFFdkRvRSxDQUFBQSxHQUFBQSxPQUFBQSxlQUFlLEVBQUM7Z0JBQ2R2QixDQUFBQSxHQUFBQSxnQkFBQUEsdUJBQUFBLEVBQXdCO29CQUN0QkMsTUFBTUMsb0JBQUFBLGNBQWM7b0JBQ3BCN0UsS0FBSyxJQUFJUSxJQUFJUixPQUFBQSxPQUFBQSxNQUFPSSxNQUFNQTtvQkFDMUJrQjtnQkFDRjtZQUNGO1FBQ0Y7UUFFQTs7OztLQUlDLEdBQ0RwQixPQUFPeUIsT0FBTyxDQUFDTSxTQUFTLEdBQUcsU0FBU0EsVUFDbENnQixJQUFTLEVBQ1RrRCxPQUFlLEVBQ2ZuRyxHQUF5QjtZQUV6QixxRUFBcUU7WUFDckUsSUFBSWlELENBQUFBLFFBQUFBLE9BQUFBLEtBQUFBLElBQUFBLEtBQU1wQixJQUFJLE1BQUlvQixRQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxLQUFNbUQsRUFBQUEsR0FBSTtnQkFDMUIsT0FBT04sa0JBQWtCN0MsTUFBTWtELFNBQVNuRztZQUMxQztZQUVBaUQsT0FBT0QsK0JBQStCQztZQUV0QyxJQUFJakQsS0FBSztnQkFDUGlHLCtCQUErQmpHO1lBQ2pDO1lBRUEsT0FBTzhGLGtCQUFrQjdDLE1BQU1rRCxTQUFTbkc7UUFDMUM7UUFFQTs7OztLQUlDLEdBQ0RFLE9BQU95QixPQUFPLENBQUNPLFlBQVksR0FBRyxTQUFTQSxhQUNyQ2UsSUFBUyxFQUNUa0QsT0FBZSxFQUNmbkcsR0FBeUI7WUFFekIscUVBQXFFO1lBQ3JFLElBQUlpRCxDQUFBQSxRQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxLQUFNcEIsSUFBQUEsTUFBUW9CLFFBQUFBLE9BQUFBLEtBQUFBLElBQUFBLEtBQU1tRCxFQUFBQSxHQUFJO2dCQUMxQixPQUFPSixxQkFBcUIvQyxNQUFNa0QsU0FBU25HO1lBQzdDO1lBQ0FpRCxPQUFPRCwrQkFBK0JDO1lBRXRDLElBQUlqRCxLQUFLO2dCQUNQaUcsK0JBQStCakc7WUFDakM7WUFDQSxPQUFPZ0cscUJBQXFCL0MsTUFBTWtELFNBQVNuRztRQUM3QztRQUVBOzs7O0tBSUMsR0FDRCxNQUFNcUcsYUFBYSxDQUFDN0I7WUFDbEIsSUFBSSxDQUFDQSxNQUFNNUMsS0FBSyxFQUFFO2dCQUNoQiwrSUFBK0k7Z0JBQy9JO1lBQ0Y7WUFFQSw2RUFBNkU7WUFDN0UsSUFBSSxDQUFDNEMsTUFBTTVDLEtBQUssQ0FBQ0MsSUFBSSxFQUFFO2dCQUNyQjNCLE9BQU9DLFFBQVEsQ0FBQ21HLE1BQU07Z0JBQ3RCO1lBQ0Y7WUFFQSxnSEFBZ0g7WUFDaEgsb0VBQW9FO1lBQ3BFSixDQUFBQSxHQUFBQSxPQUFBQSxlQUFBQSxFQUFnQjtnQkFDZEssQ0FBQUEsR0FBQUEsbUJBQUFBLHNCQUFBQSxFQUNFckcsT0FBT0MsUUFBUSxDQUFDQyxJQUFJLEVBQ3BCb0UsTUFBTTVDLEtBQUssQ0FBQ0UsK0JBQStCO1lBRS9DO1FBQ0Y7UUFFQSw4Q0FBOEM7UUFDOUM1QixPQUFPNEUsZ0JBQWdCLENBQUMsWUFBWXVCO1FBQ3BDLE9BQU87WUFDTG5HLE9BQU95QixPQUFPLENBQUNNLFNBQVMsR0FBRzZEO1lBQzNCNUYsT0FBT3lCLE9BQU8sQ0FBQ08sWUFBWSxHQUFHOEQ7WUFDOUI5RixPQUFPNkUsbUJBQW1CLENBQUMsWUFBWXNCO1FBQ3pDO0lBQ0YsR0FBRyxFQUFFO0lBRUwsTUFBTSxFQUFFbkMsS0FBSyxFQUFFNUMsSUFBSSxFQUFFZ0IsT0FBTyxFQUFFa0UsaUJBQWlCLEVBQUUsR0FBRzVFO0lBRXBELE1BQU02RSxlQUFlMUMsQ0FBQUEsR0FBQUEsT0FBQUEsT0FBQUEsRUFBUTtRQUMzQixPQUFPMkMsQ0FBQUEsR0FBQUEsaUJBQUFBLGVBQUFBLEVBQWdCeEMsT0FBTzVDLElBQUksQ0FBQyxFQUFFO0lBQ3ZDLEdBQUc7UUFBQzRDO1FBQU81QztLQUFLO0lBRWhCLHlDQUF5QztJQUN6QyxNQUFNcUYsYUFBYTVDLENBQUFBLEdBQUFBLE9BQUFBLE9BQUFBLEVBQVE7UUFDekIsT0FBTzZDLENBQUFBLEdBQUFBLG9CQUFBQSxpQkFBQUEsRUFBa0J0RjtJQUMzQixHQUFHO1FBQUNBO0tBQUs7SUFFVCxNQUFNdUYsc0JBQXNCOUMsQ0FBQUEsR0FBQUEsT0FBQUEsT0FBQUEsRUFBUTtRQUNsQyxPQUFPO1lBQ0wrQyxZQUFZeEY7WUFDWnlGLGlCQUFpQjdDO1lBQ2pCOEMsbUJBQW1CO1lBQ25CLDZCQUE2QjtZQUM3Qiw4RUFBOEU7WUFDOUVoSCxLQUFLd0I7UUFDUDtJQUNGLEdBQUc7UUFBQ0Y7UUFBTTRDO1FBQU8xQztLQUFhO0lBRTlCLE1BQU15Riw0QkFBNEJsRCxDQUFBQSxHQUFBQSxPQUFBQSxPQUFBQSxFQUFRO1FBQ3hDLE9BQU87WUFDTHpDO1lBQ0FrRjtZQUNBbEU7UUFDRjtJQUNGLEdBQUc7UUFBQ2hCO1FBQU1rRjtRQUFtQmxFO0tBQVE7SUFFckMsSUFBSUk7SUFDSixJQUFJK0QsaUJBQWlCLE1BQU07UUFDekIsMERBQTBEO1FBQzFELDBFQUEwRTtRQUMxRSxvRUFBb0U7UUFDcEUsRUFBRTtRQUNGLHdFQUF3RTtRQUN4RSx1QkFBdUI7UUFDdkIsTUFBTSxDQUFDckQsZUFBZThELFFBQVEsR0FBR1Q7UUFDakMvRCxPQUFBQSxXQUFBQSxHQUFPLHFCQUFDUyxNQUFBQTtZQUFtQkMsZUFBZUE7V0FBeEI4RDtJQUNwQixPQUFPO1FBQ0x4RSxPQUFPO0lBQ1Q7SUFFQSxJQUFJeUUsVUFBQUEsV0FBQUEsR0FDRixzQkFBQ0Msa0JBQUFBLGdCQUFnQjs7WUFDZDFFO1lBQ0F3QixNQUFNMUIsR0FBRzswQkFDVixxQkFBQzZFLG9CQUFBQSxrQkFBa0I7Z0JBQUMvRixNQUFNQTs7OztJQUk5QixJQUFJVixJQUFvQixFQUFtQjtRQUN6QyxrRUFBa0U7UUFDbEUsaUdBQWlHO1FBQ2pHLGlCQUFpQjtRQUNqQiw4Q0FBOEM7UUFDOUMsd0JBQXdCO1FBQ3hCLGtFQUFrRTtRQUNsRSxJQUFJLElBQTZCLEVBQUU7WUFDakMsTUFBTSxFQUFFMEcsaUNBQWlDLEVBQUUsR0FDekNDLG1CQUFPQSxDQUFDLHNTQUEwQztZQUNwREosVUFDRSxXQURGQSxHQUNFLHFCQUFDRyxtQ0FBQUE7MEJBQ0VIOztRQUdQO1FBQ0EsTUFBTUssY0FFRkQsNFRBQ087UUFFWEosVUFBQUEsV0FBQUEsR0FDRSxxQkFBQ0ssYUFBQUE7WUFBWS9ELGFBQWFBO1lBQWFDLGFBQWFBO3NCQUNqRHlEOztJQUdQLE9BQU8sRUFlTjtJQUVELE9BQ0UsV0FERixHQUNFOzswQkFDRSxxQkFBQ3BHLGdCQUFBQTtnQkFBZUMsZ0JBQWdCWTs7MEJBQ2hDLHFCQUFDa0csZUFBQUEsQ0FBQUE7MEJBQ0QscUJBQUNDLGlDQUFBQSxpQkFBaUIsQ0FBQ0MsUUFBUTtnQkFBQ0MsT0FBT3RCOzBCQUNqQyxtQ0FBQ3VCLGlDQUFBQSxlQUFlLENBQUNGLFFBQVE7b0JBQUNDLE9BQU9uRTs4QkFDL0IsbUNBQUNxRSxpQ0FBQUEsbUJBQW1CLENBQUNILFFBQVE7d0JBQUNDLE9BQU9wRTtrQ0FDbkMsbUNBQUN1RSwrQkFBQUEseUJBQXlCLENBQUNKLFFBQVE7NEJBQ2pDQyxPQUFPaEI7c0NBT1AsbUNBQUNvQiwrQkFBQUEsZ0JBQWdCLENBQUNMLFFBQVE7Z0NBQUNDLE9BQU8zRCxtQkFBQUEsdUJBQXVCOzBDQUN2RCxtQ0FBQ2dFLCtCQUFBQSxtQkFBbUIsQ0FBQ04sUUFBUTtvQ0FBQ0MsT0FBT3BCOzhDQUNsQ007Ozs7Ozs7OztBQVNuQjtNQS9XUzVEO0FBaVhNLG1CQUFtQixLQVVqQztJQVZpQyxNQUNoQ0MsV0FBVyxFQUNYK0UsZ0JBQWdCLEVBQ2hCOUUsV0FBVyxFQUNYRSxpQkFBaUIsRUFNbEIsR0FWaUM7SUFXaEM2RSxDQUFBQSxHQUFBQSxtQkFBQUEsb0JBQW9CO0lBRXBCLE1BQU1uRSxTQUFBQSxXQUFBQSxHQUNKLHFCQUFDZCxRQUFBQTtRQUNDQyxhQUFhQTtRQUNiQyxhQUFhQTtRQUNiQyxhQUFhNkU7UUFDYjVFLG1CQUFtQkE7O0lBSXZCLElBQUlBLG1CQUFtQjtRQUNyQixPQUFPVTtJQUNULE9BQU87UUFDTCxxQkFDRSxxQkFBQ3NELGVBQUFBLGFBQWE7WUFDWixzRkFBc0Y7WUFDdEYsdUdBQXVHO1lBQ3ZHQyxnQkFBZ0JhLGFBQUFBLE9BQWtCO3NCQUVqQ3BFOztJQUdQO0FBQ0Y7TUFuQ3dCeEU7QUFxQ3hCLE1BQU02SSxnQkFBZ0IsSUFBSUM7QUFDMUIsSUFBSUMsc0JBQXNCLElBQUlEO0FBRTlCRSxXQUFXQyxlQUFlLEdBQUcsU0FBVTFJLElBQVk7SUFDakQsSUFBSTJJLE1BQU1MLGNBQWNNLElBQUk7SUFDNUJOLGNBQWNPLEdBQUcsQ0FBQzdJO0lBQ2xCLElBQUlzSSxjQUFjTSxJQUFJLEtBQUtELEtBQUs7UUFDOUJILG9CQUFvQk0sT0FBTyxDQUFDLENBQUNDLEtBQU9BO0lBQ3RDO0lBQ0EsNENBQTRDO0lBQzVDLGdGQUFnRjtJQUNoRixPQUFPQyxRQUFRQyxPQUFPO0FBQ3hCO0FBRUE7O0lBQ0UsTUFBTSxHQUFHQyxZQUFZLEdBQUdDLE9BQUFBLE9BQUssQ0FBQ0MsUUFBUSxDQUFDO0lBQ3ZDLE1BQU1DLHFCQUFxQmYsY0FBY00sSUFBSTtJQUM3QzdHLENBQUFBLEdBQUFBLE9BQUFBLFNBQUFBLEVBQVU7UUFDUixNQUFNdUgsVUFBVSxJQUFNSixZQUFZLENBQUNLLElBQU1BLElBQUk7UUFDN0NmLG9CQUFvQkssR0FBRyxDQUFDUztRQUN4QixJQUFJRCx1QkFBdUJmLGNBQWNNLElBQUksRUFBRTtZQUM3Q1U7UUFDRjtRQUNBLE9BQU87WUFDTGQsb0JBQW9CZ0IsTUFBTSxDQUFDRjtRQUM3QjtJQUNGLEdBQUc7UUFBQ0Q7UUFBb0JIO0tBQVk7SUFFcEMsTUFBTU8sUUFBUWpKLE1BQThCLEdBQ3ZDLENBQXFDLEdBQ3RDO0lBQ0osT0FBTztXQUFJOEg7S0FBYyxDQUFDcUIsR0FBRyxDQUFDLENBQUMzSixNQUFNNEosSUFBQUEsV0FBQUEsR0FDbkMscUJBQUNDLFFBQUFBO1lBRUNDLEtBQUk7WUFDSjlKLE1BQU8sS0FBRUEsT0FBT3lKO1lBQ2hCLGFBQWE7WUFDYk0sWUFBVztXQUpOSDtBQVVYOztNQTdCU2xDIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL3NyYy9jbGllbnQvY29tcG9uZW50cy9hcHAtcm91dGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuaW1wb3J0IFJlYWN0LCB7XG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgc3RhcnRUcmFuc2l0aW9uLFxuICB1c2VJbnNlcnRpb25FZmZlY3QsXG4gIHVzZURlZmVycmVkVmFsdWUsXG59IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHtcbiAgQXBwUm91dGVyQ29udGV4dCxcbiAgTGF5b3V0Um91dGVyQ29udGV4dCxcbiAgR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCxcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgdHlwZSB7IENhY2hlTm9kZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgQUNUSU9OX1JFU1RPUkUgfSBmcm9tICcuL3JvdXRlci1yZWR1Y2VyL3JvdXRlci1yZWR1Y2VyLXR5cGVzJ1xuaW1wb3J0IHR5cGUgeyBBcHBSb3V0ZXJTdGF0ZSB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXIvcm91dGVyLXJlZHVjZXItdHlwZXMnXG5pbXBvcnQgeyBjcmVhdGVIcmVmRnJvbVVybCB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXIvY3JlYXRlLWhyZWYtZnJvbS11cmwnXG5pbXBvcnQge1xuICBTZWFyY2hQYXJhbXNDb250ZXh0LFxuICBQYXRobmFtZUNvbnRleHQsXG4gIFBhdGhQYXJhbXNDb250ZXh0LFxufSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2hvb2tzLWNsaWVudC1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgZGlzcGF0Y2hBcHBSb3V0ZXJBY3Rpb24sIHVzZUFjdGlvblF1ZXVlIH0gZnJvbSAnLi91c2UtYWN0aW9uLXF1ZXVlJ1xuaW1wb3J0IHsgRXJyb3JCb3VuZGFyeSB9IGZyb20gJy4vZXJyb3ItYm91bmRhcnknXG5pbXBvcnQgRGVmYXVsdEdsb2JhbEVycm9yIGZyb20gJy4vYnVpbHRpbi9nbG9iYWwtZXJyb3InXG5pbXBvcnQgeyBpc0JvdCB9IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2lzLWJvdCdcbmltcG9ydCB7IGFkZEJhc2VQYXRoIH0gZnJvbSAnLi4vYWRkLWJhc2UtcGF0aCdcbmltcG9ydCB7IEFwcFJvdXRlckFubm91bmNlciB9IGZyb20gJy4vYXBwLXJvdXRlci1hbm5vdW5jZXInXG5pbXBvcnQgeyBSZWRpcmVjdEJvdW5kYXJ5IH0gZnJvbSAnLi9yZWRpcmVjdC1ib3VuZGFyeSdcbmltcG9ydCB7IGZpbmRIZWFkSW5DYWNoZSB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvZmluZC1oZWFkLWluLWNhY2hlJ1xuaW1wb3J0IHsgdW5yZXNvbHZlZFRoZW5hYmxlIH0gZnJvbSAnLi91bnJlc29sdmVkLXRoZW5hYmxlJ1xuaW1wb3J0IHsgcmVtb3ZlQmFzZVBhdGggfSBmcm9tICcuLi9yZW1vdmUtYmFzZS1wYXRoJ1xuaW1wb3J0IHsgaGFzQmFzZVBhdGggfSBmcm9tICcuLi9oYXMtYmFzZS1wYXRoJ1xuaW1wb3J0IHsgZ2V0U2VsZWN0ZWRQYXJhbXMgfSBmcm9tICcuL3JvdXRlci1yZWR1Y2VyL2NvbXB1dGUtY2hhbmdlZC1wYXRoJ1xuaW1wb3J0IHR5cGUgeyBGbGlnaHRSb3V0ZXJTdGF0ZSB9IGZyb20gJy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlTmF2RmFpbHVyZUhhbmRsZXIgfSBmcm9tICcuL25hdi1mYWlsdXJlLWhhbmRsZXInXG5pbXBvcnQge1xuICBkaXNwYXRjaFRyYXZlcnNlQWN0aW9uLFxuICBwdWJsaWNBcHBSb3V0ZXJJbnN0YW5jZSxcbiAgdHlwZSBBcHBSb3V0ZXJBY3Rpb25RdWV1ZSxcbiAgdHlwZSBHbG9iYWxFcnJvclN0YXRlLFxufSBmcm9tICcuL2FwcC1yb3V0ZXItaW5zdGFuY2UnXG5pbXBvcnQgeyBnZXRSZWRpcmVjdFR5cGVGcm9tRXJyb3IsIGdldFVSTEZyb21SZWRpcmVjdEVycm9yIH0gZnJvbSAnLi9yZWRpcmVjdCdcbmltcG9ydCB7IGlzUmVkaXJlY3RFcnJvciwgUmVkaXJlY3RUeXBlIH0gZnJvbSAnLi9yZWRpcmVjdC1lcnJvcidcbmltcG9ydCB7IHBpbmdWaXNpYmxlTGlua3MgfSBmcm9tICcuL2xpbmtzJ1xuaW1wb3J0IEdyYWNlZnVsRGVncmFkZUJvdW5kYXJ5IGZyb20gJy4vZXJyb3JzL2dyYWNlZnVsLWRlZ3JhZGUtYm91bmRhcnknXG5cbmNvbnN0IGdsb2JhbE11dGFibGU6IHtcbiAgcGVuZGluZ01wYVBhdGg/OiBzdHJpbmdcbn0gPSB7fVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFeHRlcm5hbFVSTCh1cmw6IFVSTCkge1xuICByZXR1cm4gdXJsLm9yaWdpbiAhPT0gd2luZG93LmxvY2F0aW9uLm9yaWdpblxufVxuXG4vKipcbiAqIEdpdmVuIGEgbGluayBocmVmLCBjb25zdHJ1Y3RzIHRoZSBVUkwgdGhhdCBzaG91bGQgYmUgcHJlZmV0Y2hlZC4gUmV0dXJucyBudWxsXG4gKiBpbiBjYXNlcyB3aGVyZSBwcmVmZXRjaGluZyBzaG91bGQgYmUgZGlzYWJsZWQsIGxpa2UgZXh0ZXJuYWwgVVJMcywgb3JcbiAqIGR1cmluZyBkZXZlbG9wbWVudC5cbiAqIEBwYXJhbSBocmVmIFRoZSBocmVmIHBhc3NlZCB0byA8TGluaz4sIHJvdXRlci5wcmVmZXRjaCgpLCBvciBzaW1pbGFyXG4gKiBAcmV0dXJucyBBIFVSTCBvYmplY3QgdG8gcHJlZmV0Y2gsIG9yIG51bGwgaWYgcHJlZmV0Y2hpbmcgc2hvdWxkIGJlIGRpc2FibGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcmVmZXRjaFVSTChocmVmOiBzdHJpbmcpOiBVUkwgfCBudWxsIHtcbiAgLy8gRG9uJ3QgcHJlZmV0Y2ggZm9yIGJvdHMgYXMgdGhleSBkb24ndCBuYXZpZ2F0ZS5cbiAgaWYgKGlzQm90KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBsZXQgdXJsOiBVUkxcbiAgdHJ5IHtcbiAgICB1cmwgPSBuZXcgVVJMKGFkZEJhc2VQYXRoKGhyZWYpLCB3aW5kb3cubG9jYXRpb24uaHJlZilcbiAgfSBjYXRjaCAoXykge1xuICAgIC8vIFRPRE86IERvZXMgdGhpcyBuZWVkIHRvIHRocm93IG9yIGNhbiB3ZSBqdXN0IGNvbnNvbGUuZXJyb3IgaW5zdGVhZD8gRG9lc1xuICAgIC8vIGFueW9uZSByZWx5IG9uIHRoaXMgdGhyb3dpbmc/IChTZWVtcyB1bmxpa2VseS4pXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENhbm5vdCBwcmVmZXRjaCAnJHtocmVmfScgYmVjYXVzZSBpdCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgVVJMLmBcbiAgICApXG4gIH1cblxuICAvLyBEb24ndCBwcmVmZXRjaCBkdXJpbmcgZGV2ZWxvcG1lbnQgKGltcHJvdmVzIGNvbXBpbGF0aW9uIHBlcmZvcm1hbmNlKVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gRXh0ZXJuYWwgdXJscyBjYW4ndCBiZSBwcmVmZXRjaGVkIGluIHRoZSBzYW1lIHdheS5cbiAgaWYgKGlzRXh0ZXJuYWxVUkwodXJsKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIEhpc3RvcnlVcGRhdGVyKHtcbiAgYXBwUm91dGVyU3RhdGUsXG59OiB7XG4gIGFwcFJvdXRlclN0YXRlOiBBcHBSb3V0ZXJTdGF0ZVxufSkge1xuICB1c2VJbnNlcnRpb25FZmZlY3QoKCkgPT4ge1xuICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfQVBQX05BVl9GQUlMX0hBTkRMSU5HKSB7XG4gICAgICAvLyBjbGVhciBwZW5kaW5nIFVSTCBhcyBuYXZpZ2F0aW9uIGlzIG5vIGxvbmdlclxuICAgICAgLy8gaW4gZmxpZ2h0XG4gICAgICB3aW5kb3cubmV4dC5fX3BlbmRpbmdVcmwgPSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCB7IHRyZWUsIHB1c2hSZWYsIGNhbm9uaWNhbFVybCB9ID0gYXBwUm91dGVyU3RhdGVcbiAgICBjb25zdCBoaXN0b3J5U3RhdGUgPSB7XG4gICAgICAuLi4ocHVzaFJlZi5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSA/IHdpbmRvdy5oaXN0b3J5LnN0YXRlIDoge30pLFxuICAgICAgLy8gSWRlbnRpZmllciBpcyBzaG9ydGVuZWQgaW50ZW50aW9uYWxseS5cbiAgICAgIC8vIF9fTkEgaXMgdXNlZCB0byBpZGVudGlmeSBpZiB0aGUgaGlzdG9yeSBlbnRyeSBjYW4gYmUgaGFuZGxlZCBieSB0aGUgYXBwLXJvdXRlci5cbiAgICAgIC8vIF9fTiBpcyB1c2VkIHRvIGlkZW50aWZ5IGlmIHRoZSBoaXN0b3J5IGVudHJ5IGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBvbGQgcm91dGVyLlxuICAgICAgX19OQTogdHJ1ZSxcbiAgICAgIF9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUU6IHRyZWUsXG4gICAgfVxuICAgIGlmIChcbiAgICAgIHB1c2hSZWYucGVuZGluZ1B1c2ggJiZcbiAgICAgIC8vIFNraXAgcHVzaGluZyBhbiBhZGRpdGlvbmFsIGhpc3RvcnkgZW50cnkgaWYgdGhlIGNhbm9uaWNhbFVybCBpcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCB1cmwuXG4gICAgICAvLyBUaGlzIG1pcnJvcnMgdGhlIGJyb3dzZXIgYmVoYXZpb3IgZm9yIG5vcm1hbCBuYXZpZ2F0aW9uLlxuICAgICAgY3JlYXRlSHJlZkZyb21VcmwobmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikpICE9PSBjYW5vbmljYWxVcmxcbiAgICApIHtcbiAgICAgIC8vIFRoaXMgaW50ZW50aW9uYWxseSBtdXRhdGVzIFJlYWN0IHN0YXRlLCBwdXNoUmVmIGlzIG92ZXJ3cml0dGVuIHRvIGVuc3VyZSBhZGRpdGlvbmFsIHB1c2gvcmVwbGFjZSBjYWxscyBkbyBub3QgdHJpZ2dlciBhbiBhZGRpdGlvbmFsIGhpc3RvcnkgZW50cnkuXG4gICAgICBwdXNoUmVmLnBlbmRpbmdQdXNoID0gZmFsc2VcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShoaXN0b3J5U3RhdGUsICcnLCBjYW5vbmljYWxVcmwpXG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShoaXN0b3J5U3RhdGUsICcnLCBjYW5vbmljYWxVcmwpXG4gICAgfVxuICB9LCBbYXBwUm91dGVyU3RhdGVdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gVGhlIE5leHQtVXJsIGFuZCB0aGUgYmFzZSB0cmVlIG1heSBhZmZlY3QgdGhlIHJlc3VsdCBvZiBhIHByZWZldGNoXG4gICAgLy8gdGFzay4gUmUtcHJlZmV0Y2ggYWxsIHZpc2libGUgbGlua3Mgd2l0aCB0aGUgdXBkYXRlZCB2YWx1ZXMuIEluIG1vc3RcbiAgICAvLyBjYXNlcywgdGhpcyB3aWxsIG5vdCByZXN1bHQgaW4gYW55IG5ldyBuZXR3b3JrIHJlcXVlc3RzLCBvbmx5IGlmXG4gICAgLy8gdGhlIHByZWZldGNoIHJlc3VsdCBhY3R1YWxseSB2YXJpZXMgb24gb25lIG9mIHRoZXNlIGlucHV0cy5cbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0NMSUVOVF9TRUdNRU5UX0NBQ0hFKSB7XG4gICAgICBwaW5nVmlzaWJsZUxpbmtzKGFwcFJvdXRlclN0YXRlLm5leHRVcmwsIGFwcFJvdXRlclN0YXRlLnRyZWUpXG4gICAgfVxuICB9LCBbYXBwUm91dGVyU3RhdGUubmV4dFVybCwgYXBwUm91dGVyU3RhdGUudHJlZV0pXG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVtcHR5Q2FjaGVOb2RlKCk6IENhY2hlTm9kZSB7XG4gIHJldHVybiB7XG4gICAgbGF6eURhdGE6IG51bGwsXG4gICAgcnNjOiBudWxsLFxuICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgIGhlYWQ6IG51bGwsXG4gICAgcHJlZmV0Y2hIZWFkOiBudWxsLFxuICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKCksXG4gICAgbG9hZGluZzogbnVsbCxcbiAgICBuYXZpZ2F0ZWRBdDogLTEsXG4gIH1cbn1cblxuZnVuY3Rpb24gY29weU5leHRKc0ludGVybmFsSGlzdG9yeVN0YXRlKGRhdGE6IGFueSkge1xuICBpZiAoZGF0YSA9PSBudWxsKSBkYXRhID0ge31cbiAgY29uc3QgY3VycmVudFN0YXRlID0gd2luZG93Lmhpc3Rvcnkuc3RhdGVcbiAgY29uc3QgX19OQSA9IGN1cnJlbnRTdGF0ZT8uX19OQVxuICBpZiAoX19OQSkge1xuICAgIGRhdGEuX19OQSA9IF9fTkFcbiAgfVxuICBjb25zdCBfX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFID1cbiAgICBjdXJyZW50U3RhdGU/Ll9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUVcbiAgaWYgKF9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUUpIHtcbiAgICBkYXRhLl9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUUgPSBfX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFXG4gIH1cblxuICByZXR1cm4gZGF0YVxufVxuXG5mdW5jdGlvbiBIZWFkKHtcbiAgaGVhZENhY2hlTm9kZSxcbn06IHtcbiAgaGVhZENhY2hlTm9kZTogQ2FjaGVOb2RlIHwgbnVsbFxufSk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIC8vIElmIHRoaXMgc2VnbWVudCBoYXMgYSBgcHJlZmV0Y2hIZWFkYCwgaXQncyB0aGUgc3RhdGljYWxseSBwcmVmZXRjaGVkIGRhdGEuXG4gIC8vIFdlIHNob3VsZCB1c2UgdGhhdCBvbiBpbml0aWFsIHJlbmRlciBpbnN0ZWFkIG9mIGBoZWFkYC4gVGhlbiB3ZSdsbCBzd2l0Y2hcbiAgLy8gdG8gYGhlYWRgIHdoZW4gdGhlIGR5bmFtaWMgcmVzcG9uc2Ugc3RyZWFtcyBpbi5cbiAgY29uc3QgaGVhZCA9IGhlYWRDYWNoZU5vZGUgIT09IG51bGwgPyBoZWFkQ2FjaGVOb2RlLmhlYWQgOiBudWxsXG4gIGNvbnN0IHByZWZldGNoSGVhZCA9XG4gICAgaGVhZENhY2hlTm9kZSAhPT0gbnVsbCA/IGhlYWRDYWNoZU5vZGUucHJlZmV0Y2hIZWFkIDogbnVsbFxuXG4gIC8vIElmIG5vIHByZWZldGNoIGRhdGEgaXMgYXZhaWxhYmxlLCB0aGVuIHdlIGdvIHN0cmFpZ2h0IHRvIHJlbmRlcmluZyBgaGVhZGAuXG4gIGNvbnN0IHJlc29sdmVkUHJlZmV0Y2hSc2MgPSBwcmVmZXRjaEhlYWQgIT09IG51bGwgPyBwcmVmZXRjaEhlYWQgOiBoZWFkXG5cbiAgLy8gV2UgdXNlIGB1c2VEZWZlcnJlZFZhbHVlYCB0byBoYW5kbGUgc3dpdGNoaW5nIGJldHdlZW4gdGhlIHByZWZldGNoZWQgYW5kXG4gIC8vIGZpbmFsIHZhbHVlcy4gVGhlIHNlY29uZCBhcmd1bWVudCBpcyByZXR1cm5lZCBvbiBpbml0aWFsIHJlbmRlciwgdGhlbiBpdFxuICAvLyByZS1yZW5kZXJzIHdpdGggdGhlIGZpcnN0IGFyZ3VtZW50LlxuICByZXR1cm4gdXNlRGVmZXJyZWRWYWx1ZShoZWFkLCByZXNvbHZlZFByZWZldGNoUnNjKVxufVxuXG4vKipcbiAqIFRoZSBnbG9iYWwgcm91dGVyIHRoYXQgd3JhcHMgdGhlIGFwcGxpY2F0aW9uIGNvbXBvbmVudHMuXG4gKi9cbmZ1bmN0aW9uIFJvdXRlcih7XG4gIGFjdGlvblF1ZXVlLFxuICBhc3NldFByZWZpeCxcbiAgZ2xvYmFsRXJyb3IsXG4gIGdyYWNlZnVsbHlEZWdyYWRlLFxufToge1xuICBhY3Rpb25RdWV1ZTogQXBwUm91dGVyQWN0aW9uUXVldWVcbiAgYXNzZXRQcmVmaXg6IHN0cmluZ1xuICBnbG9iYWxFcnJvcjogR2xvYmFsRXJyb3JTdGF0ZVxuICBncmFjZWZ1bGx5RGVncmFkZTogYm9vbGVhblxufSkge1xuICBjb25zdCBzdGF0ZSA9IHVzZUFjdGlvblF1ZXVlKGFjdGlvblF1ZXVlKVxuICBjb25zdCB7IGNhbm9uaWNhbFVybCB9ID0gc3RhdGVcbiAgLy8gQWRkIG1lbW9pemVkIHBhdGhuYW1lL3F1ZXJ5IGZvciB1c2VTZWFyY2hQYXJhbXMgYW5kIHVzZVBhdGhuYW1lLlxuICBjb25zdCB7IHNlYXJjaFBhcmFtcywgcGF0aG5hbWUgfSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoXG4gICAgICBjYW5vbmljYWxVcmwsXG4gICAgICB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/ICdodHRwOi8vbicgOiB3aW5kb3cubG9jYXRpb24uaHJlZlxuICAgIClcblxuICAgIHJldHVybiB7XG4gICAgICAvLyBUaGlzIGlzIHR1cm5lZCBpbnRvIGEgcmVhZG9ubHkgY2xhc3MgaW4gYHVzZVNlYXJjaFBhcmFtc2BcbiAgICAgIHNlYXJjaFBhcmFtczogdXJsLnNlYXJjaFBhcmFtcyxcbiAgICAgIHBhdGhuYW1lOiBoYXNCYXNlUGF0aCh1cmwucGF0aG5hbWUpXG4gICAgICAgID8gcmVtb3ZlQmFzZVBhdGgodXJsLnBhdGhuYW1lKVxuICAgICAgICA6IHVybC5wYXRobmFtZSxcbiAgICB9XG4gIH0sIFtjYW5vbmljYWxVcmxdKVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgY29uc3QgeyBjYWNoZSwgcHJlZmV0Y2hDYWNoZSwgdHJlZSB9ID0gc3RhdGVcblxuICAgIC8vIFRoaXMgaG9vayBpcyBpbiBhIGNvbmRpdGlvbmFsIGJ1dCB0aGF0IGlzIG9rIGJlY2F1c2UgYHByb2Nlc3MuZW52Lk5PREVfRU5WYCBuZXZlciBjaGFuZ2VzXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIC8vIEFkZCBgd2luZG93Lm5kYCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuICAgICAgLy8gVGhpcyBpcyBub3QgbWVhbnQgZm9yIHVzZSBpbiBhcHBsaWNhdGlvbnMgYXMgY29uY3VycmVudCByZW5kZXJpbmcgd2lsbCBhZmZlY3QgdGhlIGNhY2hlL3RyZWUvcm91dGVyLlxuICAgICAgLy8gQHRzLWlnbm9yZSB0aGlzIGlzIGZvciBkZWJ1Z2dpbmdcbiAgICAgIHdpbmRvdy5uZCA9IHtcbiAgICAgICAgcm91dGVyOiBwdWJsaWNBcHBSb3V0ZXJJbnN0YW5jZSxcbiAgICAgICAgY2FjaGUsXG4gICAgICAgIHByZWZldGNoQ2FjaGUsXG4gICAgICAgIHRyZWUsXG4gICAgICB9XG4gICAgfSwgW2NhY2hlLCBwcmVmZXRjaENhY2hlLCB0cmVlXSlcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gSWYgdGhlIGFwcCBpcyByZXN0b3JlZCBmcm9tIGJmY2FjaGUsIGl0J3MgcG9zc2libGUgdGhhdFxuICAgIC8vIHB1c2hSZWYubXBhTmF2aWdhdGlvbiBpcyB0cnVlLCB3aGljaCB3b3VsZCBtZWFuIHRoYXQgYW55IHJlLXJlbmRlciBvZiB0aGlzIGNvbXBvbmVudFxuICAgIC8vIHdvdWxkIHRyaWdnZXIgdGhlIG1wYSBuYXZpZ2F0aW9uIGxvZ2ljIGFnYWluIGZyb20gdGhlIGxpbmVzIGJlbG93LlxuICAgIC8vIFRoaXMgd2lsbCByZXN0b3JlIHRoZSByb3V0ZXIgdG8gdGhlIGluaXRpYWwgc3RhdGUgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIGFwcCBpcyByZXN0b3JlZCBmcm9tIGJmY2FjaGUuXG4gICAgZnVuY3Rpb24gaGFuZGxlUGFnZVNob3coZXZlbnQ6IFBhZ2VUcmFuc2l0aW9uRXZlbnQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIWV2ZW50LnBlcnNpc3RlZCB8fFxuICAgICAgICAhd2luZG93Lmhpc3Rvcnkuc3RhdGU/Ll9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUVcbiAgICAgICkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgdGhlIHBlbmRpbmdNcGFQYXRoIHZhbHVlIHNvIHRoYXQgYSBzdWJzZXF1ZW50IE1QQSBuYXZpZ2F0aW9uIHRvIHRoZSBzYW1lIFVSTCBjYW4gYmUgdHJpZ2dlcmVkLlxuICAgICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBpZiB0aGUgYnJvd3NlciByZXN0b3JlZCBmcm9tIGJmY2FjaGUsIHRoZSBwZW5kaW5nTXBhUGF0aCB3b3VsZCBzdGlsbCBiZSBzZXQgdG8gdGhlIHZhbHVlXG4gICAgICAvLyBvZiB0aGUgbGFzdCBNUEEgbmF2aWdhdGlvbi5cbiAgICAgIGdsb2JhbE11dGFibGUucGVuZGluZ01wYVBhdGggPSB1bmRlZmluZWRcblxuICAgICAgZGlzcGF0Y2hBcHBSb3V0ZXJBY3Rpb24oe1xuICAgICAgICB0eXBlOiBBQ1RJT05fUkVTVE9SRSxcbiAgICAgICAgdXJsOiBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxcbiAgICAgICAgdHJlZTogd2luZG93Lmhpc3Rvcnkuc3RhdGUuX19QUklWQVRFX05FWFRKU19JTlRFUk5BTFNfVFJFRSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BhZ2VzaG93JywgaGFuZGxlUGFnZVNob3cpXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BhZ2VzaG93JywgaGFuZGxlUGFnZVNob3cpXG4gICAgfVxuICB9LCBbXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIEVuc3VyZSB0aGF0IGFueSByZWRpcmVjdCBlcnJvcnMgdGhhdCBidWJibGUgdXAgb3V0c2lkZSBvZiB0aGUgUmVkaXJlY3RCb3VuZGFyeVxuICAgIC8vIGFyZSBjYXVnaHQgYW5kIGhhbmRsZWQgYnkgdGhlIHJvdXRlci5cbiAgICBmdW5jdGlvbiBoYW5kbGVVbmhhbmRsZWRSZWRpcmVjdChcbiAgICAgIGV2ZW50OiBFcnJvckV2ZW50IHwgUHJvbWlzZVJlamVjdGlvbkV2ZW50XG4gICAgKSB7XG4gICAgICBjb25zdCBlcnJvciA9ICdyZWFzb24nIGluIGV2ZW50ID8gZXZlbnQucmVhc29uIDogZXZlbnQuZXJyb3JcbiAgICAgIGlmIChpc1JlZGlyZWN0RXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgY29uc3QgdXJsID0gZ2V0VVJMRnJvbVJlZGlyZWN0RXJyb3IoZXJyb3IpXG4gICAgICAgIGNvbnN0IHJlZGlyZWN0VHlwZSA9IGdldFJlZGlyZWN0VHlwZUZyb21FcnJvcihlcnJvcilcbiAgICAgICAgLy8gVE9ETzogVGhpcyBzaG91bGQgYWNjZXNzIHRoZSByb3V0ZXIgbWV0aG9kcyBkaXJlY3RseSwgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgcHVibGljIGludGVyZmFjZS5cbiAgICAgICAgaWYgKHJlZGlyZWN0VHlwZSA9PT0gUmVkaXJlY3RUeXBlLnB1c2gpIHtcbiAgICAgICAgICBwdWJsaWNBcHBSb3V0ZXJJbnN0YW5jZS5wdXNoKHVybCwge30pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHVibGljQXBwUm91dGVySW5zdGFuY2UucmVwbGFjZSh1cmwsIHt9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGhhbmRsZVVuaGFuZGxlZFJlZGlyZWN0KVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmhhbmRsZWRyZWplY3Rpb24nLCBoYW5kbGVVbmhhbmRsZWRSZWRpcmVjdClcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBoYW5kbGVVbmhhbmRsZWRSZWRpcmVjdClcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd1bmhhbmRsZWRyZWplY3Rpb24nLCBoYW5kbGVVbmhhbmRsZWRSZWRpcmVjdClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIFdoZW4gbXBhTmF2aWdhdGlvbiBmbGFnIGlzIHNldCBkbyBhIGhhcmQgbmF2aWdhdGlvbiB0byB0aGUgbmV3IHVybC5cbiAgLy8gSW5maW5pdGVseSBzdXNwZW5kIGJlY2F1c2Ugd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byByZXJlbmRlciBhbnkgY2hpbGRcbiAgLy8gY29tcG9uZW50cyB3aXRoIHRoZSBuZXcgVVJMIGFuZCBhbnkgZW50YW5nbGVkIHN0YXRlIHVwZGF0ZXMgc2hvdWxkbid0XG4gIC8vIGNvbW1pdCBlaXRoZXIgKGVnOiB1c2VUcmFuc2l0aW9uIGlzUGVuZGluZyBzaG91bGQgc3RheSB0cnVlIHVudGlsIHRoZSBwYWdlXG4gIC8vIHVubG9hZHMpLlxuICAvL1xuICAvLyBUaGlzIGlzIGEgc2lkZSBlZmZlY3QgaW4gcmVuZGVyLiBEb24ndCB0cnkgdGhpcyBhdCBob21lLCBraWRzLiBJdCdzXG4gIC8vIHByb2JhYmx5IHNhZmUgYmVjYXVzZSB3ZSBrbm93IHRoaXMgaXMgYSBzaW5nbGV0b24gY29tcG9uZW50IGFuZCBpdCdzIG5ldmVyXG4gIC8vIGluIDxPZmZzY3JlZW4+LiBBdCBsZWFzdCBJIGhvcGUgc28uIChJdCB3aWxsIHJ1biB0d2ljZSBpbiBkZXYgc3RyaWN0IG1vZGUsXG4gIC8vIGJ1dCB0aGF0J3MuLi4gZmluZT8pXG4gIGNvbnN0IHsgcHVzaFJlZiB9ID0gc3RhdGVcbiAgaWYgKHB1c2hSZWYubXBhTmF2aWdhdGlvbikge1xuICAgIC8vIGlmIHRoZXJlJ3MgYSByZS1yZW5kZXIsIHdlIGRvbid0IHdhbnQgdG8gdHJpZ2dlciBhbm90aGVyIHJlZGlyZWN0IGlmIG9uZSBpcyBhbHJlYWR5IGluIGZsaWdodCB0byB0aGUgc2FtZSBVUkxcbiAgICBpZiAoZ2xvYmFsTXV0YWJsZS5wZW5kaW5nTXBhUGF0aCAhPT0gY2Fub25pY2FsVXJsKSB7XG4gICAgICBjb25zdCBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvblxuICAgICAgaWYgKHB1c2hSZWYucGVuZGluZ1B1c2gpIHtcbiAgICAgICAgbG9jYXRpb24uYXNzaWduKGNhbm9uaWNhbFVybClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvY2F0aW9uLnJlcGxhY2UoY2Fub25pY2FsVXJsKVxuICAgICAgfVxuXG4gICAgICBnbG9iYWxNdXRhYmxlLnBlbmRpbmdNcGFQYXRoID0gY2Fub25pY2FsVXJsXG4gICAgfVxuICAgIC8vIFRPRE8tQVBQOiBTaG91bGQgd2UgbGlzdGVuIHRvIG5hdmlnYXRlZXJyb3IgaGVyZSB0byBjYXRjaCBmYWlsZWRcbiAgICAvLyBuYXZpZ2F0aW9ucyBzb21laG93PyBBbmQgc2hvdWxkIHdlIGNhbGwgd2luZG93LnN0b3AoKSBpZiBhIFNQQSBuYXZpZ2F0aW9uXG4gICAgLy8gc2hvdWxkIGludGVycnVwdCBhbiBNUEEgb25lP1xuICAgIC8vIE5PVEU6IFRoaXMgaXMgaW50ZW50aW9uYWxseSB1c2luZyBgdGhyb3dgIGluc3RlYWQgb2YgYHVzZWAgYmVjYXVzZSB3ZSdyZVxuICAgIC8vIGluc2lkZSBhbiBleHRlcm5hbGx5IG11dGFibGUgY29uZGl0aW9uIChwdXNoUmVmLm1wYU5hdmlnYXRpb24pLCB3aGljaFxuICAgIC8vIHZpb2xhdGVzIHRoZSBydWxlcyBvZiBob29rcy5cbiAgICB0aHJvdyB1bnJlc29sdmVkVGhlbmFibGVcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxQdXNoU3RhdGUgPSB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUuYmluZCh3aW5kb3cuaGlzdG9yeSlcbiAgICBjb25zdCBvcmlnaW5hbFJlcGxhY2VTdGF0ZSA9IHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZS5iaW5kKFxuICAgICAgd2luZG93Lmhpc3RvcnlcbiAgICApXG5cbiAgICAvLyBFbnN1cmUgdGhlIGNhbm9uaWNhbCBVUkwgaW4gdGhlIE5leHQuanMgUm91dGVyIGlzIHVwZGF0ZWQgd2hlbiB0aGUgVVJMIGlzIGNoYW5nZWQgc28gdGhhdCBgdXNlUGF0aG5hbWVgIGFuZCBgdXNlU2VhcmNoUGFyYW1zYCBob2xkIHRoZSBwdXNoZWQgdmFsdWVzLlxuICAgIGNvbnN0IGFwcGx5VXJsRnJvbUhpc3RvcnlQdXNoUmVwbGFjZSA9IChcbiAgICAgIHVybDogc3RyaW5nIHwgVVJMIHwgbnVsbCB8IHVuZGVmaW5lZFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmXG4gICAgICBjb25zdCB0cmVlOiBGbGlnaHRSb3V0ZXJTdGF0ZSB8IHVuZGVmaW5lZCA9XG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnN0YXRlPy5fX1BSSVZBVEVfTkVYVEpTX0lOVEVSTkFMU19UUkVFXG5cbiAgICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoQXBwUm91dGVyQWN0aW9uKHtcbiAgICAgICAgICB0eXBlOiBBQ1RJT05fUkVTVE9SRSxcbiAgICAgICAgICB1cmw6IG5ldyBVUkwodXJsID8/IGhyZWYsIGhyZWYpLFxuICAgICAgICAgIHRyZWUsXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhdGNoIHB1c2hTdGF0ZSB0byBlbnN1cmUgZXh0ZXJuYWwgY2hhbmdlcyB0byB0aGUgaGlzdG9yeSBhcmUgcmVmbGVjdGVkIGluIHRoZSBOZXh0LmpzIFJvdXRlci5cbiAgICAgKiBFbnN1cmVzIE5leHQuanMgaW50ZXJuYWwgaGlzdG9yeSBzdGF0ZSBpcyBjb3BpZWQgdG8gdGhlIG5ldyBoaXN0b3J5IGVudHJ5LlxuICAgICAqIEVuc3VyZXMgdXNlUGF0aG5hbWUgYW5kIHVzZVNlYXJjaFBhcmFtcyBob2xkIHRoZSBuZXdseSBwcm92aWRlZCB1cmwuXG4gICAgICovXG4gICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlID0gZnVuY3Rpb24gcHVzaFN0YXRlKFxuICAgICAgZGF0YTogYW55LFxuICAgICAgX3VudXNlZDogc3RyaW5nLFxuICAgICAgdXJsPzogc3RyaW5nIHwgVVJMIHwgbnVsbFxuICAgICk6IHZvaWQge1xuICAgICAgLy8gQXZvaWQgYSBsb29wIHdoZW4gTmV4dC5qcyBpbnRlcm5hbHMgdHJpZ2dlciBwdXNoU3RhdGUvcmVwbGFjZVN0YXRlXG4gICAgICBpZiAoZGF0YT8uX19OQSB8fCBkYXRhPy5fTikge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWxQdXNoU3RhdGUoZGF0YSwgX3VudXNlZCwgdXJsKVxuICAgICAgfVxuXG4gICAgICBkYXRhID0gY29weU5leHRKc0ludGVybmFsSGlzdG9yeVN0YXRlKGRhdGEpXG5cbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgYXBwbHlVcmxGcm9tSGlzdG9yeVB1c2hSZXBsYWNlKHVybClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9yaWdpbmFsUHVzaFN0YXRlKGRhdGEsIF91bnVzZWQsIHVybClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXRjaCByZXBsYWNlU3RhdGUgdG8gZW5zdXJlIGV4dGVybmFsIGNoYW5nZXMgdG8gdGhlIGhpc3RvcnkgYXJlIHJlZmxlY3RlZCBpbiB0aGUgTmV4dC5qcyBSb3V0ZXIuXG4gICAgICogRW5zdXJlcyBOZXh0LmpzIGludGVybmFsIGhpc3Rvcnkgc3RhdGUgaXMgY29waWVkIHRvIHRoZSBuZXcgaGlzdG9yeSBlbnRyeS5cbiAgICAgKiBFbnN1cmVzIHVzZVBhdGhuYW1lIGFuZCB1c2VTZWFyY2hQYXJhbXMgaG9sZCB0aGUgbmV3bHkgcHJvdmlkZWQgdXJsLlxuICAgICAqL1xuICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSA9IGZ1bmN0aW9uIHJlcGxhY2VTdGF0ZShcbiAgICAgIGRhdGE6IGFueSxcbiAgICAgIF91bnVzZWQ6IHN0cmluZyxcbiAgICAgIHVybD86IHN0cmluZyB8IFVSTCB8IG51bGxcbiAgICApOiB2b2lkIHtcbiAgICAgIC8vIEF2b2lkIGEgbG9vcCB3aGVuIE5leHQuanMgaW50ZXJuYWxzIHRyaWdnZXIgcHVzaFN0YXRlL3JlcGxhY2VTdGF0ZVxuICAgICAgaWYgKGRhdGE/Ll9fTkEgfHwgZGF0YT8uX04pIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVwbGFjZVN0YXRlKGRhdGEsIF91bnVzZWQsIHVybClcbiAgICAgIH1cbiAgICAgIGRhdGEgPSBjb3B5TmV4dEpzSW50ZXJuYWxIaXN0b3J5U3RhdGUoZGF0YSlcblxuICAgICAgaWYgKHVybCkge1xuICAgICAgICBhcHBseVVybEZyb21IaXN0b3J5UHVzaFJlcGxhY2UodXJsKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9yaWdpbmFsUmVwbGFjZVN0YXRlKGRhdGEsIF91bnVzZWQsIHVybClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgcG9wc3RhdGUgZXZlbnQsIHRoaXMgaXMgdXNlZCB0byBoYW5kbGUgYmFjay9mb3J3YXJkIGluIHRoZSBicm93c2VyLlxuICAgICAqIEJ5IGRlZmF1bHQgZGlzcGF0Y2hlcyBBQ1RJT05fUkVTVE9SRSwgaG93ZXZlciBpZiB0aGUgaGlzdG9yeSBlbnRyeSB3YXMgbm90IHB1c2hlZC9yZXBsYWNlZCBieSBhcHAtcm91dGVyIGl0IHdpbGwgcmVsb2FkIHRoZSBwYWdlLlxuICAgICAqIFRoYXQgY2FzZSBjYW4gaGFwcGVuIHdoZW4gdGhlIG9sZCByb3V0ZXIgaW5qZWN0ZWQgdGhlIGhpc3RvcnkgZW50cnkuXG4gICAgICovXG4gICAgY29uc3Qgb25Qb3BTdGF0ZSA9IChldmVudDogUG9wU3RhdGVFdmVudCkgPT4ge1xuICAgICAgaWYgKCFldmVudC5zdGF0ZSkge1xuICAgICAgICAvLyBUT0RPLUFQUDogdGhpcyBjYXNlIG9ubHkgaGFwcGVucyB3aGVuIHB1c2hTdGF0ZS9yZXBsYWNlU3RhdGUgd2FzIGNhbGxlZCBvdXRzaWRlIG9mIE5leHQuanMuIEl0IHNob3VsZCBwcm9iYWJseSByZWxvYWQgdGhlIHBhZ2UgaW4gdGhpcyBjYXNlLlxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gVGhpcyBjYXNlIGhhcHBlbnMgd2hlbiB0aGUgaGlzdG9yeSBlbnRyeSB3YXMgcHVzaGVkIGJ5IHRoZSBgcGFnZXNgIHJvdXRlci5cbiAgICAgIGlmICghZXZlbnQuc3RhdGUuX19OQSkge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIFRPRE8tQVBQOiBJZGVhbGx5IHRoZSBiYWNrIGJ1dHRvbiBzaG91bGQgbm90IHVzZSBzdGFydFRyYW5zaXRpb24gYXMgaXQgc2hvdWxkIGFwcGx5IHRoZSB1cGRhdGVzIHN5bmNocm9ub3VzbHlcbiAgICAgIC8vIFdpdGhvdXQgc3RhcnRUcmFuc2l0aW9uIHdvcmtzIGlmIHRoZSBjYWNoZSBpcyB0aGVyZSBmb3IgdGhpcyBwYXRoXG4gICAgICBzdGFydFRyYW5zaXRpb24oKCkgPT4ge1xuICAgICAgICBkaXNwYXRjaFRyYXZlcnNlQWN0aW9uKFxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgICAgIGV2ZW50LnN0YXRlLl9fUFJJVkFURV9ORVhUSlNfSU5URVJOQUxTX1RSRUVcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBSZWdpc3RlciBwb3BzdGF0ZSBldmVudCB0byBjYWxsIG9uUG9wc3RhdGUuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgb25Qb3BTdGF0ZSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlID0gb3JpZ2luYWxQdXNoU3RhdGVcbiAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSA9IG9yaWdpbmFsUmVwbGFjZVN0YXRlXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCBvblBvcFN0YXRlKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgeyBjYWNoZSwgdHJlZSwgbmV4dFVybCwgZm9jdXNBbmRTY3JvbGxSZWYgfSA9IHN0YXRlXG5cbiAgY29uc3QgbWF0Y2hpbmdIZWFkID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGZpbmRIZWFkSW5DYWNoZShjYWNoZSwgdHJlZVsxXSlcbiAgfSwgW2NhY2hlLCB0cmVlXSlcblxuICAvLyBBZGQgbWVtb2l6ZWQgcGF0aFBhcmFtcyBmb3IgdXNlUGFyYW1zLlxuICBjb25zdCBwYXRoUGFyYW1zID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGdldFNlbGVjdGVkUGFyYW1zKHRyZWUpXG4gIH0sIFt0cmVlXSlcblxuICBjb25zdCBsYXlvdXRSb3V0ZXJDb250ZXh0ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudFRyZWU6IHRyZWUsXG4gICAgICBwYXJlbnRDYWNoZU5vZGU6IGNhY2hlLFxuICAgICAgcGFyZW50U2VnbWVudFBhdGg6IG51bGwsXG4gICAgICAvLyBSb290IG5vZGUgYWx3YXlzIGhhcyBgdXJsYFxuICAgICAgLy8gUHJvdmlkZWQgaW4gQXBwVHJlZUNvbnRleHQgdG8gZW5zdXJlIGl0IGNhbiBiZSBvdmVyd3JpdHRlbiBpbiBsYXlvdXQtcm91dGVyXG4gICAgICB1cmw6IGNhbm9uaWNhbFVybCxcbiAgICB9XG4gIH0sIFt0cmVlLCBjYWNoZSwgY2Fub25pY2FsVXJsXSlcblxuICBjb25zdCBnbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRyZWUsXG4gICAgICBmb2N1c0FuZFNjcm9sbFJlZixcbiAgICAgIG5leHRVcmwsXG4gICAgfVxuICB9LCBbdHJlZSwgZm9jdXNBbmRTY3JvbGxSZWYsIG5leHRVcmxdKVxuXG4gIGxldCBoZWFkXG4gIGlmIChtYXRjaGluZ0hlYWQgIT09IG51bGwpIHtcbiAgICAvLyBUaGUgaGVhZCBpcyB3cmFwcGVkIGluIGFuIGV4dHJhIGNvbXBvbmVudCBzbyB3ZSBjYW4gdXNlXG4gICAgLy8gYHVzZURlZmVycmVkVmFsdWVgIHRvIHN3YXAgYmV0d2VlbiB0aGUgcHJlZmV0Y2hlZCBhbmQgZmluYWwgdmVyc2lvbnMgb2ZcbiAgICAvLyB0aGUgaGVhZC4gKFRoaXMgaXMgd2hhdCBMYXlvdXRSb3V0ZXIgZG9lcyBmb3Igc2VnbWVudCBkYXRhLCB0b28uKVxuICAgIC8vXG4gICAgLy8gVGhlIGBrZXlgIGlzIHVzZWQgdG8gcmVtb3VudCB0aGUgY29tcG9uZW50IHdoZW5ldmVyIHRoZSBoZWFkIG1vdmVzIHRvXG4gICAgLy8gYSBkaWZmZXJlbnQgc2VnbWVudC5cbiAgICBjb25zdCBbaGVhZENhY2hlTm9kZSwgaGVhZEtleV0gPSBtYXRjaGluZ0hlYWRcbiAgICBoZWFkID0gPEhlYWQga2V5PXtoZWFkS2V5fSBoZWFkQ2FjaGVOb2RlPXtoZWFkQ2FjaGVOb2RlfSAvPlxuICB9IGVsc2Uge1xuICAgIGhlYWQgPSBudWxsXG4gIH1cblxuICBsZXQgY29udGVudCA9IChcbiAgICA8UmVkaXJlY3RCb3VuZGFyeT5cbiAgICAgIHtoZWFkfVxuICAgICAge2NhY2hlLnJzY31cbiAgICAgIDxBcHBSb3V0ZXJBbm5vdW5jZXIgdHJlZT17dHJlZX0gLz5cbiAgICA8L1JlZGlyZWN0Qm91bmRhcnk+XG4gIClcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIEluIGRldmVsb3BtZW50LCB3ZSBhcHBseSBmZXcgZXJyb3IgYm91bmRhcmllcyBhbmQgaG90LXJlbG9hZGVyOlxuICAgIC8vIC0gRGV2Um9vdEhUVFBBY2Nlc3NGYWxsYmFja0JvdW5kYXJ5OiBhdm9pZCB1c2luZyBuYXZpZ2F0aW9uIEFQSSBsaWtlIG5vdEZvdW5kKCkgaW4gcm9vdCBsYXlvdXRcbiAgICAvLyAtIEhvdFJlbG9hZGVyOlxuICAgIC8vICAtIGhvdC1yZWxvYWQgdGhlIGFwcCB3aGVuIHRoZSBjb2RlIGNoYW5nZXNcbiAgICAvLyAgLSByZW5kZXIgZGV2IG92ZXJsYXlcbiAgICAvLyAgLSBjYXRjaCBydW50aW1lIGVycm9ycyBhbmQgZGlzcGxheSBnbG9iYWwtZXJyb3Igd2hlbiBuZWNlc3NhcnlcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnN0IHsgRGV2Um9vdEhUVFBBY2Nlc3NGYWxsYmFja0JvdW5kYXJ5IH0gPVxuICAgICAgICByZXF1aXJlKCcuL2Rldi1yb290LWh0dHAtYWNjZXNzLWZhbGxiYWNrLWJvdW5kYXJ5JykgYXMgdHlwZW9mIGltcG9ydCgnLi9kZXYtcm9vdC1odHRwLWFjY2Vzcy1mYWxsYmFjay1ib3VuZGFyeScpXG4gICAgICBjb250ZW50ID0gKFxuICAgICAgICA8RGV2Um9vdEhUVFBBY2Nlc3NGYWxsYmFja0JvdW5kYXJ5PlxuICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICA8L0RldlJvb3RIVFRQQWNjZXNzRmFsbGJhY2tCb3VuZGFyeT5cbiAgICAgIClcbiAgICB9XG4gICAgY29uc3QgSG90UmVsb2FkZXI6IHR5cGVvZiBpbXBvcnQoJy4uL2Rldi9ob3QtcmVsb2FkZXIvYXBwL2hvdC1yZWxvYWRlci1hcHAnKS5kZWZhdWx0ID1cbiAgICAgIChcbiAgICAgICAgcmVxdWlyZSgnLi4vZGV2L2hvdC1yZWxvYWRlci9hcHAvaG90LXJlbG9hZGVyLWFwcCcpIGFzIHR5cGVvZiBpbXBvcnQoJy4uL2Rldi9ob3QtcmVsb2FkZXIvYXBwL2hvdC1yZWxvYWRlci1hcHAnKVxuICAgICAgKS5kZWZhdWx0XG5cbiAgICBjb250ZW50ID0gKFxuICAgICAgPEhvdFJlbG9hZGVyIGFzc2V0UHJlZml4PXthc3NldFByZWZpeH0gZ2xvYmFsRXJyb3I9e2dsb2JhbEVycm9yfT5cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICA8L0hvdFJlbG9hZGVyPlxuICAgIClcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBncmFjZWZ1bGx5IGRlZ3JhZGluZyBpcyBhcHBsaWVkIGluIHByb2R1Y3Rpb24sXG4gICAgLy8gbGVhdmUgdGhlIGFwcCBhcyBpdCBpcyByYXRoZXIgdGhhbiBjYXVnaHQgYnkgR2xvYmFsRXJyb3IgYm91bmRhcnkuXG4gICAgaWYgKGdyYWNlZnVsbHlEZWdyYWRlKSB7XG4gICAgICBjb250ZW50ID0gPEdyYWNlZnVsRGVncmFkZUJvdW5kYXJ5Pntjb250ZW50fTwvR3JhY2VmdWxEZWdyYWRlQm91bmRhcnk+XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnQgPSAoXG4gICAgICAgIDxFcnJvckJvdW5kYXJ5XG4gICAgICAgICAgZXJyb3JDb21wb25lbnQ9e2dsb2JhbEVycm9yWzBdfVxuICAgICAgICAgIGVycm9yU3R5bGVzPXtnbG9iYWxFcnJvclsxXX1cbiAgICAgICAgPlxuICAgICAgICAgIHtjb250ZW50fVxuICAgICAgICA8L0Vycm9yQm91bmRhcnk+XG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEhpc3RvcnlVcGRhdGVyIGFwcFJvdXRlclN0YXRlPXtzdGF0ZX0gLz5cbiAgICAgIDxSdW50aW1lU3R5bGVzIC8+XG4gICAgICA8UGF0aFBhcmFtc0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3BhdGhQYXJhbXN9PlxuICAgICAgICA8UGF0aG5hbWVDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtwYXRobmFtZX0+XG4gICAgICAgICAgPFNlYXJjaFBhcmFtc0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3NlYXJjaFBhcmFtc30+XG4gICAgICAgICAgICA8R2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dC5Qcm92aWRlclxuICAgICAgICAgICAgICB2YWx1ZT17Z2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgey8qIFRPRE86IFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlbW92ZSB0aGlzIGNvbnRleHQuIHVzZVJvdXRlclxuICAgICAgICAgICAgICAgICAgc2hvdWxkIGltcG9ydCBmcm9tIGFwcC1yb3V0ZXItaW5zdGFuY2UgaW5zdGVhZC4gSXQncyBvbmx5XG4gICAgICAgICAgICAgICAgICBuZWNlc3NhcnkgYmVjYXVzZSB1c2VSb3V0ZXIgaXMgc2hhcmVkIGJldHdlZW4gUGFnZXMgYW5kXG4gICAgICAgICAgICAgICAgICBBcHAgUm91dGVyLiBXZSBzaG91bGQgZm9yayB0aGF0IG1vZHVsZSwgdGhlbiByZW1vdmUgdGhpc1xuICAgICAgICAgICAgICAgICAgY29udGV4dCBwcm92aWRlci4gKi99XG4gICAgICAgICAgICAgIDxBcHBSb3V0ZXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtwdWJsaWNBcHBSb3V0ZXJJbnN0YW5jZX0+XG4gICAgICAgICAgICAgICAgPExheW91dFJvdXRlckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2xheW91dFJvdXRlckNvbnRleHR9PlxuICAgICAgICAgICAgICAgICAge2NvbnRlbnR9XG4gICAgICAgICAgICAgICAgPC9MYXlvdXRSb3V0ZXJDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgICAgICA8L0FwcFJvdXRlckNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgICA8L0dsb2JhbExheW91dFJvdXRlckNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgPC9TZWFyY2hQYXJhbXNDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICA8L1BhdGhuYW1lQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgIDwvUGF0aFBhcmFtc0NvbnRleHQuUHJvdmlkZXI+XG4gICAgPC8+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQXBwUm91dGVyKHtcbiAgYWN0aW9uUXVldWUsXG4gIGdsb2JhbEVycm9yU3RhdGUsXG4gIGFzc2V0UHJlZml4LFxuICBncmFjZWZ1bGx5RGVncmFkZSxcbn06IHtcbiAgYWN0aW9uUXVldWU6IEFwcFJvdXRlckFjdGlvblF1ZXVlXG4gIGdsb2JhbEVycm9yU3RhdGU6IEdsb2JhbEVycm9yU3RhdGVcbiAgYXNzZXRQcmVmaXg6IHN0cmluZ1xuICBncmFjZWZ1bGx5RGVncmFkZTogYm9vbGVhblxufSkge1xuICB1c2VOYXZGYWlsdXJlSGFuZGxlcigpXG5cbiAgY29uc3Qgcm91dGVyID0gKFxuICAgIDxSb3V0ZXJcbiAgICAgIGFjdGlvblF1ZXVlPXthY3Rpb25RdWV1ZX1cbiAgICAgIGFzc2V0UHJlZml4PXthc3NldFByZWZpeH1cbiAgICAgIGdsb2JhbEVycm9yPXtnbG9iYWxFcnJvclN0YXRlfVxuICAgICAgZ3JhY2VmdWxseURlZ3JhZGU9e2dyYWNlZnVsbHlEZWdyYWRlfVxuICAgIC8+XG4gIClcblxuICBpZiAoZ3JhY2VmdWxseURlZ3JhZGUpIHtcbiAgICByZXR1cm4gcm91dGVyXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFcnJvckJvdW5kYXJ5XG4gICAgICAgIC8vIEF0IHRoZSB2ZXJ5IHRvcCBsZXZlbCwgdXNlIHRoZSBkZWZhdWx0IEdsb2JhbEVycm9yIGNvbXBvbmVudCBhcyB0aGUgZmluYWwgZmFsbGJhY2suXG4gICAgICAgIC8vIFdoZW4gdGhlIGFwcCByb3V0ZXIgaXRzZWxmIGZhaWxzLCB3aGljaCBtZWFucyB0aGUgZnJhbWV3b3JrIGl0c2VsZiBmYWlscywgd2Ugc2hvdyB0aGUgZGVmYXVsdCBlcnJvci5cbiAgICAgICAgZXJyb3JDb21wb25lbnQ9e0RlZmF1bHRHbG9iYWxFcnJvcn1cbiAgICAgID5cbiAgICAgICAge3JvdXRlcn1cbiAgICAgIDwvRXJyb3JCb3VuZGFyeT5cbiAgICApXG4gIH1cbn1cblxuY29uc3QgcnVudGltZVN0eWxlcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5sZXQgcnVudGltZVN0eWxlQ2hhbmdlZCA9IG5ldyBTZXQ8KCkgPT4gdm9pZD4oKVxuXG5nbG9iYWxUaGlzLl9OX0VfU1RZTEVfTE9BRCA9IGZ1bmN0aW9uIChocmVmOiBzdHJpbmcpIHtcbiAgbGV0IGxlbiA9IHJ1bnRpbWVTdHlsZXMuc2l6ZVxuICBydW50aW1lU3R5bGVzLmFkZChocmVmKVxuICBpZiAocnVudGltZVN0eWxlcy5zaXplICE9PSBsZW4pIHtcbiAgICBydW50aW1lU3R5bGVDaGFuZ2VkLmZvckVhY2goKGNiKSA9PiBjYigpKVxuICB9XG4gIC8vIFRPRE8gZmlndXJlIG91dCBob3cgdG8gZ2V0IGEgcHJvbWlzZSBoZXJlXG4gIC8vIEJ1dCBtYXliZSBpdCdzIG5vdCBuZWNlc3NhcnkgYXMgcmVhY3Qgd291bGQgYmxvY2sgcmVuZGVyaW5nIHVudGlsIGl0J3MgbG9hZGVkXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxufVxuXG5mdW5jdGlvbiBSdW50aW1lU3R5bGVzKCkge1xuICBjb25zdCBbLCBmb3JjZVVwZGF0ZV0gPSBSZWFjdC51c2VTdGF0ZSgwKVxuICBjb25zdCByZW5kZXJlZFN0eWxlc1NpemUgPSBydW50aW1lU3R5bGVzLnNpemVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjaGFuZ2VkID0gKCkgPT4gZm9yY2VVcGRhdGUoKGMpID0+IGMgKyAxKVxuICAgIHJ1bnRpbWVTdHlsZUNoYW5nZWQuYWRkKGNoYW5nZWQpXG4gICAgaWYgKHJlbmRlcmVkU3R5bGVzU2l6ZSAhPT0gcnVudGltZVN0eWxlcy5zaXplKSB7XG4gICAgICBjaGFuZ2VkKClcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHJ1bnRpbWVTdHlsZUNoYW5nZWQuZGVsZXRlKGNoYW5nZWQpXG4gICAgfVxuICB9LCBbcmVuZGVyZWRTdHlsZXNTaXplLCBmb3JjZVVwZGF0ZV0pXG5cbiAgY29uc3QgZHBsSWQgPSBwcm9jZXNzLmVudi5ORVhUX0RFUExPWU1FTlRfSURcbiAgICA/IGA/ZHBsPSR7cHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEfWBcbiAgICA6ICcnXG4gIHJldHVybiBbLi4ucnVudGltZVN0eWxlc10ubWFwKChocmVmLCBpKSA9PiAoXG4gICAgPGxpbmtcbiAgICAgIGtleT17aX1cbiAgICAgIHJlbD1cInN0eWxlc2hlZXRcIlxuICAgICAgaHJlZj17YCR7aHJlZn0ke2RwbElkfWB9XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBwcmVjZWRlbmNlPVwibmV4dFwiXG4gICAgICAvLyBUT0RPIGZpZ3VyZSBvdXQgY3Jvc3NPcmlnaW4gYW5kIG5vbmNlXG4gICAgICAvLyBjcm9zc09yaWdpbj17VE9ET31cbiAgICAgIC8vIG5vbmNlPXtUT0RPfVxuICAgIC8+XG4gICkpXG59XG4iXSwibmFtZXMiOlsiY3JlYXRlRW1wdHlDYWNoZU5vZGUiLCJjcmVhdGVQcmVmZXRjaFVSTCIsIkFwcFJvdXRlciIsImlzRXh0ZXJuYWxVUkwiLCJnbG9iYWxNdXRhYmxlIiwidXJsIiwib3JpZ2luIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiaXNCb3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJVUkwiLCJhZGRCYXNlUGF0aCIsIl8iLCJFcnJvciIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIkhpc3RvcnlVcGRhdGVyIiwiYXBwUm91dGVyU3RhdGUiLCJ1c2VJbnNlcnRpb25FZmZlY3QiLCJfX05FWFRfQVBQX05BVl9GQUlMX0hBTkRMSU5HIiwibmV4dCIsIl9fcGVuZGluZ1VybCIsInVuZGVmaW5lZCIsInRyZWUiLCJwdXNoUmVmIiwiY2Fub25pY2FsVXJsIiwiaGlzdG9yeVN0YXRlIiwicHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUiLCJoaXN0b3J5Iiwic3RhdGUiLCJfX05BIiwiX19QUklWQVRFX05FWFRKU19JTlRFUk5BTFNfVFJFRSIsInBlbmRpbmdQdXNoIiwiY3JlYXRlSHJlZkZyb21VcmwiLCJwdXNoU3RhdGUiLCJyZXBsYWNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJfX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEUiLCJwaW5nVmlzaWJsZUxpbmtzIiwibmV4dFVybCIsImxhenlEYXRhIiwicnNjIiwicHJlZmV0Y2hSc2MiLCJoZWFkIiwicHJlZmV0Y2hIZWFkIiwicGFyYWxsZWxSb3V0ZXMiLCJNYXAiLCJsb2FkaW5nIiwibmF2aWdhdGVkQXQiLCJjb3B5TmV4dEpzSW50ZXJuYWxIaXN0b3J5U3RhdGUiLCJkYXRhIiwiY3VycmVudFN0YXRlIiwiSGVhZCIsImhlYWRDYWNoZU5vZGUiLCJyZXNvbHZlZFByZWZldGNoUnNjIiwidXNlRGVmZXJyZWRWYWx1ZSIsIlJvdXRlciIsImFjdGlvblF1ZXVlIiwiYXNzZXRQcmVmaXgiLCJnbG9iYWxFcnJvciIsImdyYWNlZnVsbHlEZWdyYWRlIiwidXNlQWN0aW9uUXVldWUiLCJzZWFyY2hQYXJhbXMiLCJwYXRobmFtZSIsInVzZU1lbW8iLCJoYXNCYXNlUGF0aCIsInJlbW92ZUJhc2VQYXRoIiwiY2FjaGUiLCJwcmVmZXRjaENhY2hlIiwibmQiLCJyb3V0ZXIiLCJwdWJsaWNBcHBSb3V0ZXJJbnN0YW5jZSIsImhhbmRsZVBhZ2VTaG93IiwiZXZlbnQiLCJwZXJzaXN0ZWQiLCJwZW5kaW5nTXBhUGF0aCIsImRpc3BhdGNoQXBwUm91dGVyQWN0aW9uIiwidHlwZSIsIkFDVElPTl9SRVNUT1JFIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVVbmhhbmRsZWRSZWRpcmVjdCIsImVycm9yIiwicmVhc29uIiwiaXNSZWRpcmVjdEVycm9yIiwicHJldmVudERlZmF1bHQiLCJnZXRVUkxGcm9tUmVkaXJlY3RFcnJvciIsInJlZGlyZWN0VHlwZSIsImdldFJlZGlyZWN0VHlwZUZyb21FcnJvciIsIlJlZGlyZWN0VHlwZSIsInB1c2giLCJyZXBsYWNlIiwibXBhTmF2aWdhdGlvbiIsImFzc2lnbiIsInVucmVzb2x2ZWRUaGVuYWJsZSIsIm9yaWdpbmFsUHVzaFN0YXRlIiwiYmluZCIsIm9yaWdpbmFsUmVwbGFjZVN0YXRlIiwiYXBwbHlVcmxGcm9tSGlzdG9yeVB1c2hSZXBsYWNlIiwic3RhcnRUcmFuc2l0aW9uIiwiX3VudXNlZCIsIl9OIiwib25Qb3BTdGF0ZSIsInJlbG9hZCIsImRpc3BhdGNoVHJhdmVyc2VBY3Rpb24iLCJmb2N1c0FuZFNjcm9sbFJlZiIsIm1hdGNoaW5nSGVhZCIsImZpbmRIZWFkSW5DYWNoZSIsInBhdGhQYXJhbXMiLCJnZXRTZWxlY3RlZFBhcmFtcyIsImxheW91dFJvdXRlckNvbnRleHQiLCJwYXJlbnRUcmVlIiwicGFyZW50Q2FjaGVOb2RlIiwicGFyZW50U2VnbWVudFBhdGgiLCJnbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0IiwiaGVhZEtleSIsImNvbnRlbnQiLCJSZWRpcmVjdEJvdW5kYXJ5IiwiQXBwUm91dGVyQW5ub3VuY2VyIiwiRGV2Um9vdEhUVFBBY2Nlc3NGYWxsYmFja0JvdW5kYXJ5IiwicmVxdWlyZSIsIkhvdFJlbG9hZGVyIiwiZGVmYXVsdCIsIkdyYWNlZnVsRGVncmFkZUJvdW5kYXJ5IiwiRXJyb3JCb3VuZGFyeSIsImVycm9yQ29tcG9uZW50IiwiZXJyb3JTdHlsZXMiLCJSdW50aW1lU3R5bGVzIiwiUGF0aFBhcmFtc0NvbnRleHQiLCJQcm92aWRlciIsInZhbHVlIiwiUGF0aG5hbWVDb250ZXh0IiwiU2VhcmNoUGFyYW1zQ29udGV4dCIsIkdsb2JhbExheW91dFJvdXRlckNvbnRleHQiLCJBcHBSb3V0ZXJDb250ZXh0IiwiTGF5b3V0Um91dGVyQ29udGV4dCIsImdsb2JhbEVycm9yU3RhdGUiLCJ1c2VOYXZGYWlsdXJlSGFuZGxlciIsIkRlZmF1bHRHbG9iYWxFcnJvciIsInJ1bnRpbWVTdHlsZXMiLCJTZXQiLCJydW50aW1lU3R5bGVDaGFuZ2VkIiwiZ2xvYmFsVGhpcyIsIl9OX0VfU1RZTEVfTE9BRCIsImxlbiIsInNpemUiLCJhZGQiLCJmb3JFYWNoIiwiY2IiLCJQcm9taXNlIiwicmVzb2x2ZSIsImZvcmNlVXBkYXRlIiwiUmVhY3QiLCJ1c2VTdGF0ZSIsInJlbmRlcmVkU3R5bGVzU2l6ZSIsImNoYW5nZWQiLCJjIiwiZGVsZXRlIiwiZHBsSWQiLCJORVhUX0RFUExPWU1FTlRfSUQiLCJtYXAiLCJpIiwibGluayIsInJlbCIsInByZWNlZGVuY2UiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/builtin/global-error.js":
/*!**********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/builtin/global-error.js ***!
  \**********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__  cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n    enumerable: true,\n    get: function() {\n        return _default;\n    }\n}));\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _handleisrerror = __webpack_require__(/*! ../handle-isr-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/handle-isr-error.js\");\nconst styles = {\n    error: {\n        // https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L38-L52\n        fontFamily: 'system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"',\n        height: '100vh',\n        textAlign: 'center',\n        display: 'flex',\n        flexDirection: 'column',\n        alignItems: 'center',\n        justifyContent: 'center'\n    },\n    text: {\n        fontSize: '14px',\n        fontWeight: 400,\n        lineHeight: '28px',\n        margin: '0 8px'\n    }\n};\nfunction DefaultGlobalError(param) {\n    let { error } = param;\n    const digest = error == null ? void 0 : error.digest;\n    return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"html\", {\n        id: \"__next_error__\",\n        children: [\n            /*#__PURE__*/ (0, _jsxruntime.jsx)(\"head\", {}),\n            /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"body\", {\n                children: [\n                    /*#__PURE__*/ (0, _jsxruntime.jsx)(_handleisrerror.HandleISRError, {\n                        error: error\n                    }),\n                    /*#__PURE__*/ (0, _jsxruntime.jsx)(\"div\", {\n                        style: styles.error,\n                        children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"div\", {\n                            children: [\n                                /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"h2\", {\n                                    style: styles.text,\n                                    children: [\n                                        \"Application error: a \",\n                                        digest ? 'server' : 'client',\n                                        \"-side exception has occurred while loading \",\n                                        window.location.hostname,\n                                        \" (see the\",\n                                        ' ',\n                                        digest ? 'server logs' : 'browser console',\n                                        \" for more information).\"\n                                    ]\n                                }),\n                                digest ? /*#__PURE__*/ (0, _jsxruntime.jsx)(\"p\", {\n                                    style: styles.text,\n                                    children: \"Digest: \" + digest\n                                }) : null\n                            ]\n                        })\n                    })\n                ]\n            })\n        ]\n    });\n}\n_c = DefaultGlobalError;\nconst _default = DefaultGlobalError;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=global-error.js.map\nvar _c;\n$RefreshReg$(_c, \"DefaultGlobalError\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9idWlsdGluL2dsb2JhbC1lcnJvci5qcyIsIm1hcHBpbmdzIjoiOzs7OzJDQW9EQTs7O2VBQUE7Ozs7NENBbEQrQjtBQUUvQixNQUFNQSxTQUFTO0lBQ2JDLE9BQU87UUFDTCwwRkFBMEY7UUFDMUZDLFlBQ0U7UUFDRkMsUUFBUTtRQUNSQyxXQUFXO1FBQ1hDLFNBQVM7UUFDVEMsZUFBZTtRQUNmQyxZQUFZO1FBQ1pDLGdCQUFnQjtJQUNsQjtJQUNBQyxNQUFNO1FBQ0pDLFVBQVU7UUFDVkMsWUFBWTtRQUNaQyxZQUFZO1FBQ1pDLFFBQVE7SUFDVjtBQUNGO0FBS0EsNEJBQTRCLEtBQXlCO0lBQXpCLE1BQUVaLEtBQUssRUFBa0IsR0FBekI7SUFDMUIsTUFBTWMsU0FBNkJkLFNBQUFBLE9BQUFBLEtBQUFBLElBQUFBLE1BQU9jLE1BQU07SUFDaEQscUJBQ0Usc0JBQUNDLFFBQUFBO1FBQUtDLElBQUc7OzBCQUNQLHFCQUFDQyxRQUFBQSxDQUFBQTswQkFDRCxzQkFBQ0MsUUFBQUE7O2tDQUNDLHFCQUFDQyxnQkFBQUEsY0FBYzt3QkFBQ25CLE9BQU9BOztrQ0FDdkIscUJBQUNvQixPQUFBQTt3QkFBSUMsT0FBT3RCLE9BQU9DLEtBQUs7a0NBQ3RCLG9DQUFDb0IsT0FBQUE7OzhDQUNDLHNCQUFDRSxNQUFBQTtvQ0FBR0QsT0FBT3RCLE9BQU9TLElBQUk7O3dDQUFFO3dDQUNBTSxTQUFTLFdBQVc7d0NBQVM7d0NBQ3ZCUyxPQUFPQyxRQUFRLENBQUNDLFFBQVE7d0NBQUM7d0NBQVU7d0NBQzlEWCxTQUFTLGdCQUFnQjt3Q0FBa0I7OztnQ0FHN0NBLFNBQUFBLFdBQUFBLEdBQVMscUJBQUNZLEtBQUFBO29DQUFFTCxPQUFPdEIsT0FBT1MsSUFBSTs4Q0FBSSxhQUFVTTtxQ0FBZ0I7Ozs7Ozs7O0FBTXpFO0tBckJTRDtNQXlCVCxXQUFlQSIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9jb21wb25lbnRzL2J1aWx0aW4vZ2xvYmFsLWVycm9yLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuaW1wb3J0IHsgSGFuZGxlSVNSRXJyb3IgfSBmcm9tICcuLi9oYW5kbGUtaXNyLWVycm9yJ1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIGVycm9yOiB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9tb2Rlcm4tbm9ybWFsaXplL2Jsb2IvbWFpbi9tb2Rlcm4tbm9ybWFsaXplLmNzcyNMMzgtTDUyXG4gICAgZm9udEZhbWlseTpcbiAgICAgICdzeXN0ZW0tdWksXCJTZWdvZSBVSVwiLFJvYm90byxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZixcIkFwcGxlIENvbG9yIEVtb2ppXCIsXCJTZWdvZSBVSSBFbW9qaVwiJyxcbiAgICBoZWlnaHQ6ICcxMDB2aCcsXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICB9LFxuICB0ZXh0OiB7XG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBmb250V2VpZ2h0OiA0MDAsXG4gICAgbGluZUhlaWdodDogJzI4cHgnLFxuICAgIG1hcmdpbjogJzAgOHB4JyxcbiAgfSxcbn0gYXMgY29uc3RcblxuZXhwb3J0IHR5cGUgR2xvYmFsRXJyb3JDb21wb25lbnQgPSBSZWFjdC5Db21wb25lbnRUeXBlPHtcbiAgZXJyb3I6IGFueVxufT5cbmZ1bmN0aW9uIERlZmF1bHRHbG9iYWxFcnJvcih7IGVycm9yIH06IHsgZXJyb3I6IGFueSB9KSB7XG4gIGNvbnN0IGRpZ2VzdDogc3RyaW5nIHwgdW5kZWZpbmVkID0gZXJyb3I/LmRpZ2VzdFxuICByZXR1cm4gKFxuICAgIDxodG1sIGlkPVwiX19uZXh0X2Vycm9yX19cIj5cbiAgICAgIDxoZWFkPjwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8SGFuZGxlSVNSRXJyb3IgZXJyb3I9e2Vycm9yfSAvPlxuICAgICAgICA8ZGl2IHN0eWxlPXtzdHlsZXMuZXJyb3J9PlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aDIgc3R5bGU9e3N0eWxlcy50ZXh0fT5cbiAgICAgICAgICAgICAgQXBwbGljYXRpb24gZXJyb3I6IGEge2RpZ2VzdCA/ICdzZXJ2ZXInIDogJ2NsaWVudCd9LXNpZGUgZXhjZXB0aW9uXG4gICAgICAgICAgICAgIGhhcyBvY2N1cnJlZCB3aGlsZSBsb2FkaW5nIHt3aW5kb3cubG9jYXRpb24uaG9zdG5hbWV9IChzZWUgdGhleycgJ31cbiAgICAgICAgICAgICAge2RpZ2VzdCA/ICdzZXJ2ZXIgbG9ncycgOiAnYnJvd3NlciBjb25zb2xlJ30gZm9yIG1vcmVcbiAgICAgICAgICAgICAgaW5mb3JtYXRpb24pLlxuICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgIHtkaWdlc3QgPyA8cCBzdHlsZT17c3R5bGVzLnRleHR9PntgRGlnZXN0OiAke2RpZ2VzdH1gfTwvcD4gOiBudWxsfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYm9keT5cbiAgICA8L2h0bWw+XG4gIClcbn1cblxuLy8gRXhwb3J0ZWQgc28gdGhhdCB0aGUgaW1wb3J0IHNpZ25hdHVyZSBpbiB0aGUgbG9hZGVycyBjYW4gYmUgaWRlbnRpY2FsIHRvIHVzZXJcbi8vIHN1cHBsaWVkIGN1c3RvbSBnbG9iYWwgZXJyb3Igc2lnbmF0dXJlcy5cbmV4cG9ydCBkZWZhdWx0IERlZmF1bHRHbG9iYWxFcnJvclxuIl0sIm5hbWVzIjpbInN0eWxlcyIsImVycm9yIiwiZm9udEZhbWlseSIsImhlaWdodCIsInRleHRBbGlnbiIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwidGV4dCIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsImxpbmVIZWlnaHQiLCJtYXJnaW4iLCJEZWZhdWx0R2xvYmFsRXJyb3IiLCJkaWdlc3QiLCJodG1sIiwiaWQiLCJoZWFkIiwiYm9keSIsIkhhbmRsZUlTUkVycm9yIiwiZGl2Iiwic3R5bGUiLCJoMiIsIndpbmRvdyIsImxvY2F0aW9uIiwiaG9zdG5hbWUiLCJwIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/builtin/global-error.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/dev-root-http-access-fallback-boundary.js":
/*!****************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/dev-root-http-access-fallback-boundary.js ***!
  \****************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__  cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    DevRootHTTPAccessFallbackBoundary: function() {\n        return DevRootHTTPAccessFallbackBoundary;\n    },\n    bailOnRootNotFound: function() {\n        return bailOnRootNotFound;\n    }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"));\nconst _errorboundary = __webpack_require__(/*! ./http-access-fallback/error-boundary */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js\");\nfunction bailOnRootNotFound() {\n    throw Object.defineProperty(new Error('notFound() is not allowed to use in root layout'), \"__NEXT_ERROR_CODE\", {\n        value: \"E192\",\n        enumerable: false,\n        configurable: true\n    });\n}\nfunction NotAllowedRootHTTPFallbackError() {\n    bailOnRootNotFound();\n    return null;\n}\n_c = NotAllowedRootHTTPFallbackError;\nfunction DevRootHTTPAccessFallbackBoundary(param) {\n    let { children } = param;\n    return /*#__PURE__*/ (0, _jsxruntime.jsx)(_errorboundary.HTTPAccessFallbackBoundary, {\n        notFound: /*#__PURE__*/ (0, _jsxruntime.jsx)(NotAllowedRootHTTPFallbackError, {}),\n        children: children\n    });\n}\n_c1 = DevRootHTTPAccessFallbackBoundary;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=dev-root-http-access-fallback-boundary.js.map\nvar _c, _c1;\n$RefreshReg$(_c, \"NotAllowedRootHTTPFallbackError\");\n$RefreshReg$(_c1, \"DevRootHTTPAccessFallbackBoundary\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9kZXYtcm9vdC1odHRwLWFjY2Vzcy1mYWxsYmFjay1ib3VuZGFyeS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFlZ0JBLGlDQUFpQztlQUFqQ0E7O0lBVEFDLGtCQUFrQjtlQUFsQkE7Ozs7OzRFQUpFOzJDQUN5QjtBQUdwQyxTQUFTQTtJQUNkLE1BQU0scUJBQTRELENBQTVELElBQUlDLE1BQU0sb0RBQVY7ZUFBQTtvQkFBQTtzQkFBQTtJQUEyRDtBQUNuRTtBQUVBO0lBQ0VEO0lBQ0EsT0FBTztBQUNUO0tBSFNFO0FBS0YsMkNBQTJDLEtBSWpEO0lBSmlELE1BQ2hEQyxRQUFRLEVBR1QsR0FKaUQ7SUFLaEQscUJBQ0UscUJBQUNDLGVBQUFBLDBCQUEwQjtRQUFDQyxVQUFBQSxXQUFBQSxHQUFVLHFCQUFDSCxpQ0FBQUEsQ0FBQUE7a0JBQ3BDQzs7QUFHUDtNQVZnQkoiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL2NsaWVudC9jb21wb25lbnRzL2Rldi1yb290LWh0dHAtYWNjZXNzLWZhbGxiYWNrLWJvdW5kYXJ5LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgSFRUUEFjY2Vzc0ZhbGxiYWNrQm91bmRhcnkgfSBmcm9tICcuL2h0dHAtYWNjZXNzLWZhbGxiYWNrL2Vycm9yLWJvdW5kYXJ5J1xuXG4vLyBUT0RPOiBlcnJvciBvbiB1c2luZyBmb3JiaWRkZW4gYW5kIHVuYXV0aG9yaXplZCBpbiByb290IGxheW91dFxuZXhwb3J0IGZ1bmN0aW9uIGJhaWxPblJvb3ROb3RGb3VuZCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdub3RGb3VuZCgpIGlzIG5vdCBhbGxvd2VkIHRvIHVzZSBpbiByb290IGxheW91dCcpXG59XG5cbmZ1bmN0aW9uIE5vdEFsbG93ZWRSb290SFRUUEZhbGxiYWNrRXJyb3IoKSB7XG4gIGJhaWxPblJvb3ROb3RGb3VuZCgpXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEZXZSb290SFRUUEFjY2Vzc0ZhbGxiYWNrQm91bmRhcnkoe1xuICBjaGlsZHJlbixcbn06IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufSkge1xuICByZXR1cm4gKFxuICAgIDxIVFRQQWNjZXNzRmFsbGJhY2tCb3VuZGFyeSBub3RGb3VuZD17PE5vdEFsbG93ZWRSb290SFRUUEZhbGxiYWNrRXJyb3IgLz59PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvSFRUUEFjY2Vzc0ZhbGxiYWNrQm91bmRhcnk+XG4gIClcbn1cbiJdLCJuYW1lcyI6WyJEZXZSb290SFRUUEFjY2Vzc0ZhbGxiYWNrQm91bmRhcnkiLCJiYWlsT25Sb290Tm90Rm91bmQiLCJFcnJvciIsIk5vdEFsbG93ZWRSb290SFRUUEZhbGxiYWNrRXJyb3IiLCJjaGlsZHJlbiIsIkhUVFBBY2Nlc3NGYWxsYmFja0JvdW5kYXJ5Iiwibm90Rm91bmQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/dev-root-http-access-fallback-boundary.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/error-boundary.js":
/*!****************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/error-boundary.js ***!
  \****************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__  cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    ErrorBoundary: function() {\n        return ErrorBoundary;\n    },\n    ErrorBoundaryHandler: function() {\n        return ErrorBoundaryHandler;\n    }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"));\nconst _navigationuntracked = __webpack_require__(/*! ./navigation-untracked */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/navigation-untracked.js\");\nconst _isnextroutererror = __webpack_require__(/*! ./is-next-router-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/is-next-router-error.js\");\nconst _navfailurehandler = __webpack_require__(/*! ./nav-failure-handler */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/nav-failure-handler.js\");\nconst _handleisrerror = __webpack_require__(/*! ./handle-isr-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/handle-isr-error.js\");\nclass ErrorBoundaryHandler extends _react.default.Component {\n    static getDerivedStateFromError(error) {\n        if ((0, _isnextroutererror.isNextRouterError)(error)) {\n            // Re-throw if an expected internal Next.js router error occurs\n            // this means it should be handled by a different boundary (such as a NotFound boundary in a parent segment)\n            throw error;\n        }\n        return {\n            error\n        };\n    }\n    static getDerivedStateFromProps(props, state) {\n        const { error } = state;\n        // if we encounter an error while\n        // a navigation is pending we shouldn't render\n        // the error boundary and instead should fallback\n        // to a hard navigation to attempt recovering\n        if (false) {}\n        /**\n     * Handles reset of the error boundary when a navigation happens.\n     * Ensures the error boundary does not stay enabled when navigating to a new page.\n     * Approach of setState in render is safe as it checks the previous pathname and then overrides\n     * it as outlined in https://react.dev/reference/react/useState#storing-information-from-previous-renders\n     */ if (props.pathname !== state.previousPathname && state.error) {\n            return {\n                error: null,\n                previousPathname: props.pathname\n            };\n        }\n        return {\n            error: state.error,\n            previousPathname: props.pathname\n        };\n    }\n    // Explicit type is needed to avoid the generated `.d.ts` having a wide return type that could be specific to the `@types/react` version.\n    render() {\n        if (this.state.error) {\n            return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n                children: [\n                    /*#__PURE__*/ (0, _jsxruntime.jsx)(_handleisrerror.HandleISRError, {\n                        error: this.state.error\n                    }),\n                    this.props.errorStyles,\n                    this.props.errorScripts,\n                    /*#__PURE__*/ (0, _jsxruntime.jsx)(this.props.errorComponent, {\n                        error: this.state.error,\n                        reset: this.reset\n                    })\n                ]\n            });\n        }\n        return this.props.children;\n    }\n    constructor(props){\n        super(props), this.reset = ()=>{\n            this.setState({\n                error: null\n            });\n        };\n        this.state = {\n            error: null,\n            previousPathname: this.props.pathname\n        };\n    }\n}\nfunction ErrorBoundary(param) {\n    let { errorComponent, errorStyles, errorScripts, children } = param;\n    // When we're rendering the missing params shell, this will return null. This\n    // is because we won't be rendering any not found boundaries or error\n    // boundaries for the missing params shell. When this runs on the client\n    // (where these errors can occur), we will get the correct pathname.\n    const pathname = (0, _navigationuntracked.useUntrackedPathname)();\n    if (errorComponent) {\n        return /*#__PURE__*/ (0, _jsxruntime.jsx)(ErrorBoundaryHandler, {\n            pathname: pathname,\n            errorComponent: errorComponent,\n            errorStyles: errorStyles,\n            errorScripts: errorScripts,\n            children: children\n        });\n    }\n    return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n        children: children\n    });\n}\n_c = ErrorBoundary;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=error-boundary.js.map\nvar _c;\n$RefreshReg$(_c, \"ErrorBoundary\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9lcnJvci1ib3VuZGFyeS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUEwSGdCQSxhQUFhO2VBQWJBOztJQTFGSEMsb0JBQW9CO2VBQXBCQTs7Ozs7NEVBOUJtQjtpREFDSzsrQ0FDSDsrQ0FDQzs0Q0FDSjtBQTBCeEIsTUFBTUEsNkJBQTZCQyxPQUFBQSxPQUFLLENBQUNDLFNBQVM7SUFTdkQsT0FBT0MseUJBQXlCQyxLQUFZLEVBQUU7UUFDNUMsSUFBSUMsQ0FBQUEsR0FBQUEsbUJBQUFBLGlCQUFBQSxFQUFrQkQsUUFBUTtZQUM1QiwrREFBK0Q7WUFDL0QsNEdBQTRHO1lBQzVHLE1BQU1BO1FBQ1I7UUFFQSxPQUFPO1lBQUVBO1FBQU07SUFDakI7SUFFQSxPQUFPRSx5QkFDTEMsS0FBZ0MsRUFDaENDLEtBQWdDLEVBQ0U7UUFDbEMsTUFBTSxFQUFFSixLQUFLLEVBQUUsR0FBR0k7UUFFbEIsaUNBQWlDO1FBQ2pDLDhDQUE4QztRQUM5QyxpREFBaUQ7UUFDakQsNkNBQTZDO1FBQzdDLElBQUlDLEtBQXdDLEVBQUUsRUFRN0M7UUFFRDs7Ozs7S0FLQyxHQUNELElBQUlGLE1BQU1PLFFBQVEsS0FBS04sTUFBTUssZ0JBQWdCLElBQUlMLE1BQU1KLEtBQUssRUFBRTtZQUM1RCxPQUFPO2dCQUNMQSxPQUFPO2dCQUNQUyxrQkFBa0JOLE1BQU1PLFFBQVE7WUFDbEM7UUFDRjtRQUNBLE9BQU87WUFDTFYsT0FBT0ksTUFBTUosS0FBSztZQUNsQlMsa0JBQWtCTixNQUFNTyxRQUFRO1FBQ2xDO0lBQ0Y7SUFNQSx5SUFBeUk7SUFDeklDLFNBQTBCO1FBQ3hCLElBQUksSUFBSSxDQUFDUCxLQUFLLENBQUNKLEtBQUssRUFBRTtZQUNwQixxQkFDRTs7a0NBQ0UscUJBQUNZLGdCQUFBQSxjQUFjO3dCQUFDWixPQUFPLElBQUksQ0FBQ0ksS0FBSyxDQUFDSixLQUFLOztvQkFDdEMsSUFBSSxDQUFDRyxLQUFLLENBQUNVLFdBQVc7b0JBQ3RCLElBQUksQ0FBQ1YsS0FBSyxDQUFDVyxZQUFZO2tDQUN4QixxQkFBQ0MsSUFBSSxDQUFDWixLQUFLLENBQUNhLGNBQWM7d0JBQ3hCaEIsT0FBTyxJQUFJLENBQUNJLEtBQUssQ0FBQ0osS0FBSzt3QkFDdkJpQixPQUFPLElBQUksQ0FBQ0EsS0FBSzs7OztRQUl6QjtRQUVBLE9BQU8sSUFBSSxDQUFDZCxLQUFLLENBQUNlLFFBQVE7SUFDNUI7SUExRUFDLFlBQVloQixLQUFnQyxDQUFFO1FBQzVDLEtBQUssQ0FBQ0EsUUFBQUEsSUFBQUEsQ0FvRFJjLEtBQUFBLEdBQVE7WUFDTixJQUFJLENBQUNHLFFBQVEsQ0FBQztnQkFBRXBCLE9BQU87WUFBSztRQUM5QjtRQXJERSxJQUFJLENBQUNJLEtBQUssR0FBRztZQUFFSixPQUFPO1lBQU1TLGtCQUFrQixJQUFJLENBQUNOLEtBQUssQ0FBQ08sUUFBUTtRQUFDO0lBQ3BFO0FBd0VGO0FBV08sdUJBQXVCLEtBTzdCO0lBUDZCLE1BQzVCTSxjQUFjLEVBQ2RILFdBQVcsRUFDWEMsWUFBWSxFQUNaSSxRQUFRLEVBR1QsR0FQNkI7SUFRNUIsNkVBQTZFO0lBQzdFLHFFQUFxRTtJQUNyRSx3RUFBd0U7SUFDeEUsb0VBQW9FO0lBQ3BFLE1BQU1SLFdBQVdXLENBQUFBLEdBQUFBLHFCQUFBQSxvQkFBQUE7SUFDakIsSUFBSUwsZ0JBQWdCO1FBQ2xCLHFCQUNFLHFCQUFDcEIsc0JBQUFBO1lBQ0NjLFVBQVVBO1lBQ1ZNLGdCQUFnQkE7WUFDaEJILGFBQWFBO1lBQ2JDLGNBQWNBO3NCQUViSTs7SUFHUDtJQUVBLHFCQUFPO2tCQUFHQTs7QUFDWjtLQTNCZ0J2QiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9zcmMvY2xpZW50L2NvbXBvbmVudHMvZXJyb3ItYm91bmRhcnkudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgUmVhY3QsIHsgdHlwZSBKU1ggfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVVudHJhY2tlZFBhdGhuYW1lIH0gZnJvbSAnLi9uYXZpZ2F0aW9uLXVudHJhY2tlZCdcbmltcG9ydCB7IGlzTmV4dFJvdXRlckVycm9yIH0gZnJvbSAnLi9pcy1uZXh0LXJvdXRlci1lcnJvcidcbmltcG9ydCB7IGhhbmRsZUhhcmROYXZFcnJvciB9IGZyb20gJy4vbmF2LWZhaWx1cmUtaGFuZGxlcidcbmltcG9ydCB7IEhhbmRsZUlTUkVycm9yIH0gZnJvbSAnLi9oYW5kbGUtaXNyLWVycm9yJ1xuXG5leHBvcnQgdHlwZSBFcnJvckNvbXBvbmVudCA9IFJlYWN0LkNvbXBvbmVudFR5cGU8e1xuICBlcnJvcjogRXJyb3JcbiAgLy8gZ2xvYmFsLWVycm9yLCB0aGVyZSdzIG5vIGByZXNldGAgZnVuY3Rpb247XG4gIC8vIHJlZ3VsYXIgZXJyb3IgYm91bmRhcnksIHRoZXJlJ3MgYSBgcmVzZXRgIGZ1bmN0aW9uLlxuICByZXNldD86ICgpID0+IHZvaWRcbn0+XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JCb3VuZGFyeVByb3BzIHtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcbiAgZXJyb3JDb21wb25lbnQ6IEVycm9yQ29tcG9uZW50IHwgdW5kZWZpbmVkXG4gIGVycm9yU3R5bGVzPzogUmVhY3QuUmVhY3ROb2RlIHwgdW5kZWZpbmVkXG4gIGVycm9yU2NyaXB0cz86IFJlYWN0LlJlYWN0Tm9kZSB8IHVuZGVmaW5lZFxufVxuXG5pbnRlcmZhY2UgRXJyb3JCb3VuZGFyeUhhbmRsZXJQcm9wcyBleHRlbmRzIEVycm9yQm91bmRhcnlQcm9wcyB7XG4gIHBhdGhuYW1lOiBzdHJpbmcgfCBudWxsXG4gIGVycm9yQ29tcG9uZW50OiBFcnJvckNvbXBvbmVudFxufVxuXG5pbnRlcmZhY2UgRXJyb3JCb3VuZGFyeUhhbmRsZXJTdGF0ZSB7XG4gIGVycm9yOiBFcnJvciB8IG51bGxcbiAgcHJldmlvdXNQYXRobmFtZTogc3RyaW5nIHwgbnVsbFxufVxuXG5leHBvcnQgY2xhc3MgRXJyb3JCb3VuZGFyeUhhbmRsZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIEVycm9yQm91bmRhcnlIYW5kbGVyUHJvcHMsXG4gIEVycm9yQm91bmRhcnlIYW5kbGVyU3RhdGVcbj4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogRXJyb3JCb3VuZGFyeUhhbmRsZXJQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKVxuICAgIHRoaXMuc3RhdGUgPSB7IGVycm9yOiBudWxsLCBwcmV2aW91c1BhdGhuYW1lOiB0aGlzLnByb3BzLnBhdGhuYW1lIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3I6IEVycm9yKSB7XG4gICAgaWYgKGlzTmV4dFJvdXRlckVycm9yKGVycm9yKSkge1xuICAgICAgLy8gUmUtdGhyb3cgaWYgYW4gZXhwZWN0ZWQgaW50ZXJuYWwgTmV4dC5qcyByb3V0ZXIgZXJyb3Igb2NjdXJzXG4gICAgICAvLyB0aGlzIG1lYW5zIGl0IHNob3VsZCBiZSBoYW5kbGVkIGJ5IGEgZGlmZmVyZW50IGJvdW5kYXJ5IChzdWNoIGFzIGEgTm90Rm91bmQgYm91bmRhcnkgaW4gYSBwYXJlbnQgc2VnbWVudClcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZXJyb3IgfVxuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICBwcm9wczogRXJyb3JCb3VuZGFyeUhhbmRsZXJQcm9wcyxcbiAgICBzdGF0ZTogRXJyb3JCb3VuZGFyeUhhbmRsZXJTdGF0ZVxuICApOiBFcnJvckJvdW5kYXJ5SGFuZGxlclN0YXRlIHwgbnVsbCB7XG4gICAgY29uc3QgeyBlcnJvciB9ID0gc3RhdGVcblxuICAgIC8vIGlmIHdlIGVuY291bnRlciBhbiBlcnJvciB3aGlsZVxuICAgIC8vIGEgbmF2aWdhdGlvbiBpcyBwZW5kaW5nIHdlIHNob3VsZG4ndCByZW5kZXJcbiAgICAvLyB0aGUgZXJyb3IgYm91bmRhcnkgYW5kIGluc3RlYWQgc2hvdWxkIGZhbGxiYWNrXG4gICAgLy8gdG8gYSBoYXJkIG5hdmlnYXRpb24gdG8gYXR0ZW1wdCByZWNvdmVyaW5nXG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9BUFBfTkFWX0ZBSUxfSEFORExJTkcpIHtcbiAgICAgIGlmIChlcnJvciAmJiBoYW5kbGVIYXJkTmF2RXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIC8vIGNsZWFyIGVycm9yIHNvIHdlIGRvbid0IHJlbmRlciBhbnl0aGluZ1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIHByZXZpb3VzUGF0aG5hbWU6IHByb3BzLnBhdGhuYW1lLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyByZXNldCBvZiB0aGUgZXJyb3IgYm91bmRhcnkgd2hlbiBhIG5hdmlnYXRpb24gaGFwcGVucy5cbiAgICAgKiBFbnN1cmVzIHRoZSBlcnJvciBib3VuZGFyeSBkb2VzIG5vdCBzdGF5IGVuYWJsZWQgd2hlbiBuYXZpZ2F0aW5nIHRvIGEgbmV3IHBhZ2UuXG4gICAgICogQXBwcm9hY2ggb2Ygc2V0U3RhdGUgaW4gcmVuZGVyIGlzIHNhZmUgYXMgaXQgY2hlY2tzIHRoZSBwcmV2aW91cyBwYXRobmFtZSBhbmQgdGhlbiBvdmVycmlkZXNcbiAgICAgKiBpdCBhcyBvdXRsaW5lZCBpbiBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlU3RhdGUjc3RvcmluZy1pbmZvcm1hdGlvbi1mcm9tLXByZXZpb3VzLXJlbmRlcnNcbiAgICAgKi9cbiAgICBpZiAocHJvcHMucGF0aG5hbWUgIT09IHN0YXRlLnByZXZpb3VzUGF0aG5hbWUgJiYgc3RhdGUuZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICBwcmV2aW91c1BhdGhuYW1lOiBwcm9wcy5wYXRobmFtZSxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiBzdGF0ZS5lcnJvcixcbiAgICAgIHByZXZpb3VzUGF0aG5hbWU6IHByb3BzLnBhdGhuYW1lLFxuICAgIH1cbiAgfVxuXG4gIHJlc2V0ID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBlcnJvcjogbnVsbCB9KVxuICB9XG5cbiAgLy8gRXhwbGljaXQgdHlwZSBpcyBuZWVkZWQgdG8gYXZvaWQgdGhlIGdlbmVyYXRlZCBgLmQudHNgIGhhdmluZyBhIHdpZGUgcmV0dXJuIHR5cGUgdGhhdCBjb3VsZCBiZSBzcGVjaWZpYyB0byB0aGUgYEB0eXBlcy9yZWFjdGAgdmVyc2lvbi5cbiAgcmVuZGVyKCk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZXJyb3IpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPEhhbmRsZUlTUkVycm9yIGVycm9yPXt0aGlzLnN0YXRlLmVycm9yfSAvPlxuICAgICAgICAgIHt0aGlzLnByb3BzLmVycm9yU3R5bGVzfVxuICAgICAgICAgIHt0aGlzLnByb3BzLmVycm9yU2NyaXB0c31cbiAgICAgICAgICA8dGhpcy5wcm9wcy5lcnJvckNvbXBvbmVudFxuICAgICAgICAgICAgZXJyb3I9e3RoaXMuc3RhdGUuZXJyb3J9XG4gICAgICAgICAgICByZXNldD17dGhpcy5yZXNldH1cbiAgICAgICAgICAvPlxuICAgICAgICA8Lz5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlblxuICB9XG59XG5cbi8qKlxuICogSGFuZGxlcyBlcnJvcnMgdGhyb3VnaCBgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yYC5cbiAqIFJlbmRlcnMgdGhlIHByb3ZpZGVkIGVycm9yIGNvbXBvbmVudCBhbmQgcHJvdmlkZXMgYSB3YXkgdG8gYHJlc2V0YCB0aGUgZXJyb3IgYm91bmRhcnkgc3RhdGUuXG4gKi9cblxuLyoqXG4gKiBSZW5kZXJzIGVycm9yIGJvdW5kYXJ5IHdpdGggdGhlIHByb3ZpZGVkIFwiZXJyb3JDb21wb25lbnRcIiBwcm9wZXJ0eSBhcyB0aGUgZmFsbGJhY2suXG4gKiBJZiBubyBcImVycm9yQ29tcG9uZW50XCIgcHJvcGVydHkgaXMgcHJvdmlkZWQgaXQgcmVuZGVycyB0aGUgY2hpbGRyZW4gd2l0aG91dCBhbiBlcnJvciBib3VuZGFyeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEVycm9yQm91bmRhcnkoe1xuICBlcnJvckNvbXBvbmVudCxcbiAgZXJyb3JTdHlsZXMsXG4gIGVycm9yU2NyaXB0cyxcbiAgY2hpbGRyZW4sXG59OiBFcnJvckJvdW5kYXJ5UHJvcHMgJiB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbn0pOiBKU1guRWxlbWVudCB7XG4gIC8vIFdoZW4gd2UncmUgcmVuZGVyaW5nIHRoZSBtaXNzaW5nIHBhcmFtcyBzaGVsbCwgdGhpcyB3aWxsIHJldHVybiBudWxsLiBUaGlzXG4gIC8vIGlzIGJlY2F1c2Ugd2Ugd29uJ3QgYmUgcmVuZGVyaW5nIGFueSBub3QgZm91bmQgYm91bmRhcmllcyBvciBlcnJvclxuICAvLyBib3VuZGFyaWVzIGZvciB0aGUgbWlzc2luZyBwYXJhbXMgc2hlbGwuIFdoZW4gdGhpcyBydW5zIG9uIHRoZSBjbGllbnRcbiAgLy8gKHdoZXJlIHRoZXNlIGVycm9ycyBjYW4gb2NjdXIpLCB3ZSB3aWxsIGdldCB0aGUgY29ycmVjdCBwYXRobmFtZS5cbiAgY29uc3QgcGF0aG5hbWUgPSB1c2VVbnRyYWNrZWRQYXRobmFtZSgpXG4gIGlmIChlcnJvckNvbXBvbmVudCkge1xuICAgIHJldHVybiAoXG4gICAgICA8RXJyb3JCb3VuZGFyeUhhbmRsZXJcbiAgICAgICAgcGF0aG5hbWU9e3BhdGhuYW1lfVxuICAgICAgICBlcnJvckNvbXBvbmVudD17ZXJyb3JDb21wb25lbnR9XG4gICAgICAgIGVycm9yU3R5bGVzPXtlcnJvclN0eWxlc31cbiAgICAgICAgZXJyb3JTY3JpcHRzPXtlcnJvclNjcmlwdHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvRXJyb3JCb3VuZGFyeUhhbmRsZXI+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIDw+e2NoaWxkcmVufTwvPlxufVxuIl0sIm5hbWVzIjpbIkVycm9yQm91bmRhcnkiLCJFcnJvckJvdW5kYXJ5SGFuZGxlciIsIlJlYWN0IiwiQ29tcG9uZW50IiwiZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIiwiZXJyb3IiLCJpc05leHRSb3V0ZXJFcnJvciIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsInByb3BzIiwic3RhdGUiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX0FQUF9OQVZfRkFJTF9IQU5ETElORyIsImhhbmRsZUhhcmROYXZFcnJvciIsInByZXZpb3VzUGF0aG5hbWUiLCJwYXRobmFtZSIsInJlbmRlciIsIkhhbmRsZUlTUkVycm9yIiwiZXJyb3JTdHlsZXMiLCJlcnJvclNjcmlwdHMiLCJ0aGlzIiwiZXJyb3JDb21wb25lbnQiLCJyZXNldCIsImNoaWxkcmVuIiwiY29uc3RydWN0b3IiLCJzZXRTdGF0ZSIsInVzZVVudHJhY2tlZFBhdGhuYW1lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/error-boundary.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/errors/graceful-degrade-boundary.js":
/*!**********************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/errors/graceful-degrade-boundary.js ***!
  \**********************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__  cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    GracefulDegradeBoundary: function() {\n        return GracefulDegradeBoundary;\n    },\n    default: function() {\n        return _default;\n    }\n});\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\nfunction getDomNodeAttributes(node) {\n    const result = {};\n    for(let i = 0; i < node.attributes.length; i++){\n        const attr = node.attributes[i];\n        result[attr.name] = attr.value;\n    }\n    return result;\n}\nclass GracefulDegradeBoundary extends _react.Component {\n    static getDerivedStateFromError(_) {\n        return {\n            hasError: true\n        };\n    }\n    componentDidMount() {\n        const htmlNode = this.htmlRef.current;\n        if (this.state.hasError && htmlNode) {\n            // Reapply the cached HTML attributes to the root element\n            Object.entries(this.htmlAttributes).forEach((param)=>{\n                let [key, value] = param;\n                htmlNode.setAttribute(key, value);\n            });\n        }\n    }\n    render() {\n        const { hasError } = this.state;\n        // Cache the root HTML content on the first render\n        if ( true && !this.rootHtml) {\n            this.rootHtml = document.documentElement.innerHTML;\n            this.htmlAttributes = getDomNodeAttributes(document.documentElement);\n        }\n        if (hasError) {\n            // Render the current HTML content without hydration\n            return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"html\", {\n                ref: this.htmlRef,\n                suppressHydrationWarning: true,\n                dangerouslySetInnerHTML: {\n                    __html: this.rootHtml\n                }\n            });\n        }\n        return this.props.children;\n    }\n    constructor(props){\n        super(props);\n        this.state = {\n            hasError: false\n        };\n        this.rootHtml = '';\n        this.htmlAttributes = {};\n        this.htmlRef = /*#__PURE__*/ (0, _react.createRef)();\n    }\n}\nconst _default = GracefulDegradeBoundary;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=graceful-degrade-boundary.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9lcnJvcnMvZ3JhY2VmdWwtZGVncmFkZS1ib3VuZGFyeS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFxQmFBLHVCQUF1QjtlQUF2QkE7O0lBdURiLE9BQXNDO2VBQXRDOzs7O21DQTFFcUQ7QUFVckQsU0FBU0MscUJBQXFCQyxJQUFpQjtJQUM3QyxNQUFNQyxTQUFpQyxDQUFDO0lBQ3hDLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJRixLQUFLRyxVQUFVLENBQUNDLE1BQU0sRUFBRUYsSUFBSztRQUMvQyxNQUFNRyxPQUFPTCxLQUFLRyxVQUFVLENBQUNELEVBQUU7UUFDL0JELE1BQU0sQ0FBQ0ksS0FBS0MsSUFBSSxDQUFDLEdBQUdELEtBQUtFLEtBQUs7SUFDaEM7SUFDQSxPQUFPTjtBQUNUO0FBRU8sTUFBTUgsZ0NBQWdDVSxPQUFBQSxTQUFTO0lBZ0JwRCxPQUFPQyx5QkFBeUJDLENBQVUsRUFBc0I7UUFDOUQsT0FBTztZQUFFQyxVQUFVO1FBQUs7SUFDMUI7SUFFQUMsb0JBQW9CO1FBQ2xCLE1BQU1DLFdBQVcsSUFBSSxDQUFDQyxPQUFPLENBQUNDLE9BQU87UUFDckMsSUFBSSxJQUFJLENBQUNDLEtBQUssQ0FBQ0wsUUFBUSxJQUFJRSxVQUFVO1lBQ25DLHlEQUF5RDtZQUN6REksT0FBT0MsT0FBTyxDQUFDLElBQUksQ0FBQ0MsY0FBYyxFQUFFQyxPQUFPLENBQUM7b0JBQUMsQ0FBQ0MsS0FBS2QsTUFBTTtnQkFDdkRNLFNBQVNTLFlBQVksQ0FBQ0QsS0FBS2Q7WUFDN0I7UUFDRjtJQUNGO0lBRUFnQixTQUFTO1FBQ1AsTUFBTSxFQUFFWixRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUNLLEtBQUs7UUFDL0Isa0RBQWtEO1FBQ2xELElBQUksS0FBNkIsSUFBSSxDQUFDLElBQUksQ0FBQ1MsUUFBUSxFQUFFO1lBQ25ELElBQUksQ0FBQ0EsUUFBUSxHQUFHQyxTQUFTQyxlQUFlLENBQUNDLFNBQVM7WUFDbEQsSUFBSSxDQUFDVCxjQUFjLEdBQUdwQixxQkFBcUIyQixTQUFTQyxlQUFlO1FBQ3JFO1FBRUEsSUFBSWhCLFVBQVU7WUFDWixvREFBb0Q7WUFDcEQscUJBQ0UscUJBQUNrQixRQUFBQTtnQkFDQ0MsS0FBSyxJQUFJLENBQUNoQixPQUFPO2dCQUNqQmlCLHdCQUF3QjtnQkFDeEJDLHlCQUF5QjtvQkFDdkJDLFFBQVEsSUFBSSxDQUFDUixRQUFRO2dCQUN2Qjs7UUFHTjtRQUVBLE9BQU8sSUFBSSxDQUFDUyxLQUFLLENBQUNDLFFBQVE7SUFDNUI7SUE1Q0FDLFlBQVlGLEtBQXlCLENBQUU7UUFDckMsS0FBSyxDQUFDQTtRQUNOLElBQUksQ0FBQ2xCLEtBQUssR0FBRztZQUFFTCxVQUFVO1FBQU07UUFDL0IsSUFBSSxDQUFDYyxRQUFRLEdBQUc7UUFDaEIsSUFBSSxDQUFDTixjQUFjLEdBQUcsQ0FBQztRQUN2QixJQUFJLENBQUNMLE9BQU8saUJBQUd1QixDQUFBQSxHQUFBQSxPQUFBQSxTQUFBQTtJQUNqQjtBQXVDRjtNQUVBLFdBQWV2QyIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9jb21wb25lbnRzL2Vycm9ycy9ncmFjZWZ1bC1kZWdyYWRlLWJvdW5kYXJ5LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuaW1wb3J0IHsgQ29tcG9uZW50LCBjcmVhdGVSZWYsIHR5cGUgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnXG5cbmludGVyZmFjZSBFcnJvckJvdW5kYXJ5UHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlXG59XG5cbmludGVyZmFjZSBFcnJvckJvdW5kYXJ5U3RhdGUge1xuICBoYXNFcnJvcjogYm9vbGVhblxufVxuXG5mdW5jdGlvbiBnZXREb21Ob2RlQXR0cmlidXRlcyhub2RlOiBIVE1MRWxlbWVudCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGF0dHIgPSBub2RlLmF0dHJpYnV0ZXNbaV1cbiAgICByZXN1bHRbYXR0ci5uYW1lXSA9IGF0dHIudmFsdWVcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbmV4cG9ydCBjbGFzcyBHcmFjZWZ1bERlZ3JhZGVCb3VuZGFyeSBleHRlbmRzIENvbXBvbmVudDxcbiAgRXJyb3JCb3VuZGFyeVByb3BzLFxuICBFcnJvckJvdW5kYXJ5U3RhdGVcbj4ge1xuICBwcml2YXRlIHJvb3RIdG1sOiBzdHJpbmdcbiAgcHJpdmF0ZSBodG1sQXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICBwcml2YXRlIGh0bWxSZWY6IFJlYWN0LlJlZk9iamVjdDxIVE1MSHRtbEVsZW1lbnQgfCBudWxsPlxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBFcnJvckJvdW5kYXJ5UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcylcbiAgICB0aGlzLnN0YXRlID0geyBoYXNFcnJvcjogZmFsc2UgfVxuICAgIHRoaXMucm9vdEh0bWwgPSAnJ1xuICAgIHRoaXMuaHRtbEF0dHJpYnV0ZXMgPSB7fVxuICAgIHRoaXMuaHRtbFJlZiA9IGNyZWF0ZVJlZjxIVE1MSHRtbEVsZW1lbnQ+KClcbiAgfVxuXG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoXzogdW5rbm93bik6IEVycm9yQm91bmRhcnlTdGF0ZSB7XG4gICAgcmV0dXJuIHsgaGFzRXJyb3I6IHRydWUgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgaHRtbE5vZGUgPSB0aGlzLmh0bWxSZWYuY3VycmVudFxuICAgIGlmICh0aGlzLnN0YXRlLmhhc0Vycm9yICYmIGh0bWxOb2RlKSB7XG4gICAgICAvLyBSZWFwcGx5IHRoZSBjYWNoZWQgSFRNTCBhdHRyaWJ1dGVzIHRvIHRoZSByb290IGVsZW1lbnRcbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuaHRtbEF0dHJpYnV0ZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBodG1sTm9kZS5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgaGFzRXJyb3IgfSA9IHRoaXMuc3RhdGVcbiAgICAvLyBDYWNoZSB0aGUgcm9vdCBIVE1MIGNvbnRlbnQgb24gdGhlIGZpcnN0IHJlbmRlclxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAhdGhpcy5yb290SHRtbCkge1xuICAgICAgdGhpcy5yb290SHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUxcbiAgICAgIHRoaXMuaHRtbEF0dHJpYnV0ZXMgPSBnZXREb21Ob2RlQXR0cmlidXRlcyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgfVxuXG4gICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAvLyBSZW5kZXIgdGhlIGN1cnJlbnQgSFRNTCBjb250ZW50IHdpdGhvdXQgaHlkcmF0aW9uXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8aHRtbFxuICAgICAgICAgIHJlZj17dGhpcy5odG1sUmVmfVxuICAgICAgICAgIHN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1xuICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICBfX2h0bWw6IHRoaXMucm9vdEh0bWwsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlblxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdyYWNlZnVsRGVncmFkZUJvdW5kYXJ5XG4iXSwibmFtZXMiOlsiR3JhY2VmdWxEZWdyYWRlQm91bmRhcnkiLCJnZXREb21Ob2RlQXR0cmlidXRlcyIsIm5vZGUiLCJyZXN1bHQiLCJpIiwiYXR0cmlidXRlcyIsImxlbmd0aCIsImF0dHIiLCJuYW1lIiwidmFsdWUiLCJDb21wb25lbnQiLCJnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IiLCJfIiwiaGFzRXJyb3IiLCJjb21wb25lbnREaWRNb3VudCIsImh0bWxOb2RlIiwiaHRtbFJlZiIsImN1cnJlbnQiLCJzdGF0ZSIsIk9iamVjdCIsImVudHJpZXMiLCJodG1sQXR0cmlidXRlcyIsImZvckVhY2giLCJrZXkiLCJzZXRBdHRyaWJ1dGUiLCJyZW5kZXIiLCJ3aW5kb3ciLCJyb290SHRtbCIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiwiaW5uZXJIVE1MIiwiaHRtbCIsInJlZiIsInN1cHByZXNzSHlkcmF0aW9uV2FybmluZyIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX19odG1sIiwicHJvcHMiLCJjaGlsZHJlbiIsImNvbnN0cnVjdG9yIiwiY3JlYXRlUmVmIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/errors/graceful-degrade-boundary.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/forbidden.js":
/*!***********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/forbidden.js ***!
  \***********************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"forbidden\", ({\n    enumerable: true,\n    get: function() {\n        return forbidden;\n    }\n}));\nconst _httpaccessfallback = __webpack_require__(/*! ./http-access-fallback/http-access-fallback */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js\");\n// TODO: Add `forbidden` docs\n/**\n * @experimental\n * This function allows you to render the [forbidden.js file](https://nextjs.org/docs/app/api-reference/file-conventions/forbidden)\n * within a route segment as well as inject a tag.\n *\n * `forbidden()` can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n * Read more: [Next.js Docs: `forbidden`](https://nextjs.org/docs/app/api-reference/functions/forbidden)\n */ const DIGEST = \"\" + _httpaccessfallback.HTTP_ERROR_FALLBACK_ERROR_CODE + \";403\";\nfunction forbidden() {\n    if (true) {\n        throw Object.defineProperty(new Error(\"`forbidden()` is experimental and only allowed to be enabled when `experimental.authInterrupts` is enabled.\"), \"__NEXT_ERROR_CODE\", {\n            value: \"E488\",\n            enumerable: false,\n            configurable: true\n        });\n    }\n    // eslint-disable-next-line no-throw-literal\n    const error = Object.defineProperty(new Error(DIGEST), \"__NEXT_ERROR_CODE\", {\n        value: \"E394\",\n        enumerable: false,\n        configurable: true\n    });\n    error.digest = DIGEST;\n    throw error;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=forbidden.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9mb3JiaWRkZW4uanMiLCJtYXBwaW5ncyI6Ijs7Ozs2Q0FxQmdCQTs7O2VBQUFBOzs7Z0RBbEJUO0FBRVAsNkJBQTZCO0FBQzdCOzs7Ozs7Ozs7OztDQVdDLEdBRUQsTUFBTUMsU0FBVSxLQUFFQyxvQkFBQUEsOEJBQThCLEdBQUM7QUFFMUMsU0FBU0Y7SUFDZCxJQUFJLElBQWdELEVBQUU7UUFDcEQsTUFBTSxxQkFFTCxDQUZLLElBQUlNLE1BQ1AsZ0hBREc7bUJBQUE7d0JBQUE7MEJBQUE7UUFFTjtJQUNGO0lBRUEsNENBQTRDO0lBQzVDLE1BQU1DLFFBQVEscUJBQWlCLENBQWpCLElBQUlELE1BQU1MLFNBQVY7ZUFBQTtvQkFBQTtzQkFBQTtJQUFnQjtJQUM1Qk0sTUFBa0NDLE1BQU0sR0FBR1A7SUFDN0MsTUFBTU07QUFDUiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9zcmMvY2xpZW50L2NvbXBvbmVudHMvZm9yYmlkZGVuLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEhUVFBfRVJST1JfRkFMTEJBQ0tfRVJST1JfQ09ERSxcbiAgdHlwZSBIVFRQQWNjZXNzRmFsbGJhY2tFcnJvcixcbn0gZnJvbSAnLi9odHRwLWFjY2Vzcy1mYWxsYmFjay9odHRwLWFjY2Vzcy1mYWxsYmFjaydcblxuLy8gVE9ETzogQWRkIGBmb3JiaWRkZW5gIGRvY3Ncbi8qKlxuICogQGV4cGVyaW1lbnRhbFxuICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHJlbmRlciB0aGUgW2ZvcmJpZGRlbi5qcyBmaWxlXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9maWxlLWNvbnZlbnRpb25zL2ZvcmJpZGRlbilcbiAqIHdpdGhpbiBhIHJvdXRlIHNlZ21lbnQgYXMgd2VsbCBhcyBpbmplY3QgYSB0YWcuXG4gKlxuICogYGZvcmJpZGRlbigpYCBjYW4gYmUgdXNlZCBpblxuICogW1NlcnZlciBDb21wb25lbnRzXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yZW5kZXJpbmcvc2VydmVyLWNvbXBvbmVudHMpLFxuICogW1JvdXRlIEhhbmRsZXJzXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yb3V0aW5nL3JvdXRlLWhhbmRsZXJzKSwgYW5kXG4gKiBbU2VydmVyIEFjdGlvbnNdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL2RhdGEtZmV0Y2hpbmcvc2VydmVyLWFjdGlvbnMtYW5kLW11dGF0aW9ucykuXG4gKlxuICogUmVhZCBtb3JlOiBbTmV4dC5qcyBEb2NzOiBgZm9yYmlkZGVuYF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvZnVuY3Rpb25zL2ZvcmJpZGRlbilcbiAqL1xuXG5jb25zdCBESUdFU1QgPSBgJHtIVFRQX0VSUk9SX0ZBTExCQUNLX0VSUk9SX0NPREV9OzQwM2BcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcmJpZGRlbigpOiBuZXZlciB7XG4gIGlmICghcHJvY2Vzcy5lbnYuX19ORVhUX0VYUEVSSU1FTlRBTF9BVVRIX0lOVEVSUlVQVFMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgXFxgZm9yYmlkZGVuKClcXGAgaXMgZXhwZXJpbWVudGFsIGFuZCBvbmx5IGFsbG93ZWQgdG8gYmUgZW5hYmxlZCB3aGVuIFxcYGV4cGVyaW1lbnRhbC5hdXRoSW50ZXJydXB0c1xcYCBpcyBlbmFibGVkLmBcbiAgICApXG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihESUdFU1QpIGFzIEhUVFBBY2Nlc3NGYWxsYmFja0Vycm9yXG4gIDsoZXJyb3IgYXMgSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3IpLmRpZ2VzdCA9IERJR0VTVFxuICB0aHJvdyBlcnJvclxufVxuIl0sIm5hbWVzIjpbImZvcmJpZGRlbiIsIkRJR0VTVCIsIkhUVFBfRVJST1JfRkFMTEJBQ0tfRVJST1JfQ09ERSIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfRVhQRVJJTUVOVEFMX0FVVEhfSU5URVJSVVBUUyIsIkVycm9yIiwiZXJyb3IiLCJkaWdlc3QiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/forbidden.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/handle-isr-error.js":
/*!******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/handle-isr-error.js ***!
  \******************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"HandleISRError\", ({\n    enumerable: true,\n    get: function() {\n        return HandleISRError;\n    }\n}));\nconst workAsyncStorage =  false ? 0 : undefined;\nfunction HandleISRError(param) {\n    let { error } = param;\n    if (workAsyncStorage) {\n        const store = workAsyncStorage.getStore();\n        if ((store == null ? void 0 : store.isRevalidate) || (store == null ? void 0 : store.isStaticGeneration)) {\n            console.error(error);\n            throw error;\n        }\n    }\n    return null;\n}\n_c = HandleISRError;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=handle-isr-error.js.map\nvar _c;\n$RefreshReg$(_c, \"HandleISRError\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9oYW5kbGUtaXNyLWVycm9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7a0RBVWdCQTs7O2VBQUFBOzs7QUFWaEIsTUFBTUMsbUJBQ0osTUFBNkIsR0FFdkJFLENBQ2dCLEdBQ2xCQztBQUtDLHdCQUF3QixLQUF5QjtJQUF6QixNQUFFQyxLQUFLLEVBQWtCLEdBQXpCO0lBQzdCLElBQUlKLGtCQUFrQjtRQUNwQixNQUFNSyxRQUFRTCxpQkFBaUJNLFFBQVE7UUFDdkMsSUFBSUQsQ0FBQUEsU0FBQUEsT0FBQUEsS0FBQUEsSUFBQUEsTUFBT0UsWUFBQUEsTUFBZ0JGLFNBQUFBLE9BQUFBLEtBQUFBLElBQUFBLE1BQU9HLGtCQUFBQSxHQUFvQjtZQUNwREMsUUFBUUwsS0FBSyxDQUFDQTtZQUNkLE1BQU1BO1FBQ1I7SUFDRjtJQUVBLE9BQU87QUFDVDtLQVZnQkwiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL2NsaWVudC9jb21wb25lbnRzL2hhbmRsZS1pc3ItZXJyb3IudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHdvcmtBc3luY1N0b3JhZ2UgPVxuICB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJ1xuICAgID8gKFxuICAgICAgICByZXF1aXJlKCcuLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci93b3JrLWFzeW5jLXN0b3JhZ2UuZXh0ZXJuYWwnKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci93b3JrLWFzeW5jLXN0b3JhZ2UuZXh0ZXJuYWwnKVxuICAgICAgKS53b3JrQXN5bmNTdG9yYWdlXG4gICAgOiB1bmRlZmluZWRcblxuLy8gaWYgd2UgYXJlIHJldmFsaWRhdGluZyB3ZSB3YW50IHRvIHJlLXRocm93IHRoZSBlcnJvciBzbyB0aGVcbi8vIGZ1bmN0aW9uIGNyYXNoZXMgc28gd2UgY2FuIG1haW50YWluIG91ciBwcmV2aW91cyBjYWNoZVxuLy8gaW5zdGVhZCBvZiBjYWNoaW5nIHRoZSBlcnJvciBwYWdlXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlSVNSRXJyb3IoeyBlcnJvciB9OiB7IGVycm9yOiBhbnkgfSkge1xuICBpZiAod29ya0FzeW5jU3RvcmFnZSkge1xuICAgIGNvbnN0IHN0b3JlID0gd29ya0FzeW5jU3RvcmFnZS5nZXRTdG9yZSgpXG4gICAgaWYgKHN0b3JlPy5pc1JldmFsaWRhdGUgfHwgc3RvcmU/LmlzU3RhdGljR2VuZXJhdGlvbikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cbiJdLCJuYW1lcyI6WyJIYW5kbGVJU1JFcnJvciIsIndvcmtBc3luY1N0b3JhZ2UiLCJ3aW5kb3ciLCJyZXF1aXJlIiwidW5kZWZpbmVkIiwiZXJyb3IiLCJzdG9yZSIsImdldFN0b3JlIiwiaXNSZXZhbGlkYXRlIiwiaXNTdGF0aWNHZW5lcmF0aW9uIiwiY29uc29sZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/handle-isr-error.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":
/*!*************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js ***!
  \*************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__  cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"HTTPAccessFallbackBoundary\", ({\n    enumerable: true,\n    get: function() {\n        return HTTPAccessFallbackBoundary;\n    }\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"));\nconst _navigationuntracked = __webpack_require__(/*! ../navigation-untracked */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/navigation-untracked.js\");\nconst _httpaccessfallback = __webpack_require__(/*! ./http-access-fallback */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js\");\nconst _warnonce = __webpack_require__(/*! ../../../shared/lib/utils/warn-once */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/utils/warn-once.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nclass HTTPAccessFallbackErrorBoundary extends _react.default.Component {\n    componentDidCatch() {\n        if ( true && this.props.missingSlots && this.props.missingSlots.size > 0 && // A missing children slot is the typical not-found case, so no need to warn\n        !this.props.missingSlots.has('children')) {\n            let warningMessage = 'No default component was found for a parallel route rendered on this page. Falling back to nearest NotFound boundary.\\n' + 'Learn more: https://nextjs.org/docs/app/building-your-application/routing/parallel-routes#defaultjs\\n\\n';\n            const formattedSlots = Array.from(this.props.missingSlots).sort((a, b)=>a.localeCompare(b)).map((slot)=>\"@\" + slot).join(', ');\n            warningMessage += 'Missing slots: ' + formattedSlots;\n            (0, _warnonce.warnOnce)(warningMessage);\n        }\n    }\n    static getDerivedStateFromError(error) {\n        if ((0, _httpaccessfallback.isHTTPAccessFallbackError)(error)) {\n            const httpStatus = (0, _httpaccessfallback.getAccessFallbackHTTPStatus)(error);\n            return {\n                triggeredStatus: httpStatus\n            };\n        }\n        // Re-throw if error is not for 404\n        throw error;\n    }\n    static getDerivedStateFromProps(props, state) {\n        /**\n     * Handles reset of the error boundary when a navigation happens.\n     * Ensures the error boundary does not stay enabled when navigating to a new page.\n     * Approach of setState in render is safe as it checks the previous pathname and then overrides\n     * it as outlined in https://react.dev/reference/react/useState#storing-information-from-previous-renders\n     */ if (props.pathname !== state.previousPathname && state.triggeredStatus) {\n            return {\n                triggeredStatus: undefined,\n                previousPathname: props.pathname\n            };\n        }\n        return {\n            triggeredStatus: state.triggeredStatus,\n            previousPathname: props.pathname\n        };\n    }\n    render() {\n        const { notFound, forbidden, unauthorized, children } = this.props;\n        const { triggeredStatus } = this.state;\n        const errorComponents = {\n            [_httpaccessfallback.HTTPAccessErrorStatus.NOT_FOUND]: notFound,\n            [_httpaccessfallback.HTTPAccessErrorStatus.FORBIDDEN]: forbidden,\n            [_httpaccessfallback.HTTPAccessErrorStatus.UNAUTHORIZED]: unauthorized\n        };\n        if (triggeredStatus) {\n            const isNotFound = triggeredStatus === _httpaccessfallback.HTTPAccessErrorStatus.NOT_FOUND && notFound;\n            const isForbidden = triggeredStatus === _httpaccessfallback.HTTPAccessErrorStatus.FORBIDDEN && forbidden;\n            const isUnauthorized = triggeredStatus === _httpaccessfallback.HTTPAccessErrorStatus.UNAUTHORIZED && unauthorized;\n            // If there's no matched boundary in this layer, keep throwing the error by rendering the children\n            if (!(isNotFound || isForbidden || isUnauthorized)) {\n                return children;\n            }\n            return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n                children: [\n                    /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n                        name: \"robots\",\n                        content: \"noindex\"\n                    }),\n                     true && /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n                        name: \"boundary-next-error\",\n                        content: (0, _httpaccessfallback.getAccessFallbackErrorTypeByStatus)(triggeredStatus)\n                    }),\n                    errorComponents[triggeredStatus]\n                ]\n            });\n        }\n        return children;\n    }\n    constructor(props){\n        super(props);\n        this.state = {\n            triggeredStatus: undefined,\n            previousPathname: props.pathname\n        };\n    }\n}\nfunction HTTPAccessFallbackBoundary(param) {\n    let { notFound, forbidden, unauthorized, children } = param;\n    // When we're rendering the missing params shell, this will return null. This\n    // is because we won't be rendering any not found boundaries or error\n    // boundaries for the missing params shell. When this runs on the client\n    // (where these error can occur), we will get the correct pathname.\n    const pathname = (0, _navigationuntracked.useUntrackedPathname)();\n    const missingSlots = (0, _react.useContext)(_approutercontextsharedruntime.MissingSlotContext);\n    const hasErrorFallback = !!(notFound || forbidden || unauthorized);\n    if (hasErrorFallback) {\n        return /*#__PURE__*/ (0, _jsxruntime.jsx)(HTTPAccessFallbackErrorBoundary, {\n            pathname: pathname,\n            notFound: notFound,\n            forbidden: forbidden,\n            unauthorized: unauthorized,\n            missingSlots: missingSlots,\n            children: children\n        });\n    }\n    return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, {\n        children: children\n    });\n}\n_c = HTTPAccessFallbackBoundary;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=error-boundary.js.map\nvar _c;\n$RefreshReg$(_c, \"HTTPAccessFallbackBoundary\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9odHRwLWFjY2Vzcy1mYWxsYmFjay9lcnJvci1ib3VuZGFyeS5qcyIsIm1hcHBpbmdzIjoiOzs7OzhEQXVKZ0JBOzs7ZUFBQUE7Ozs7OzZFQTFJa0I7aURBQ0c7Z0RBTTlCO3NDQUNrQjsyREFDVTtBQXFCbkMsTUFBTUMsd0NBQXdDQyxPQUFBQSxPQUFLLENBQUNDLFNBQVM7SUFZM0RDLG9CQUEwQjtRQUN4QixJQWJFSCxLQWNvQixJQUNwQixJQUFJLENBQUNPLEtBQUssQ0FBQ0MsWUFBWSxJQUN2QixJQUFJLENBQUNELEtBQUssQ0FBQ0MsWUFBWSxDQUFDQyxJQUFJLEdBQUcsS0FDL0IsNEVBQTRFO1FBQzVFLENBQUMsSUFBSSxDQUFDRixLQUFLLENBQUNDLFlBQVksQ0FBQ0UsR0FBRyxDQUFDLGFBQzdCO1lBQ0EsSUFBSUMsaUJBQ0YsNEhBQ0E7WUFFRixNQUFNQyxpQkFBaUJDLE1BQU1DLElBQUksQ0FBQyxJQUFJLENBQUNQLEtBQUssQ0FBQ0MsWUFBWSxFQUN0RE8sSUFBSSxDQUFDLENBQUNDLEdBQUdDLElBQU1ELEVBQUVFLGFBQWEsQ0FBQ0QsSUFDL0JFLEdBQUcsQ0FBQyxDQUFDQyxPQUFVLE1BQUdBLE1BQ2xCQyxJQUFJLENBQUM7WUFFUlYsa0JBQWtCLG9CQUFvQkM7WUFFdENVLENBQUFBLEdBQUFBLFVBQUFBLFFBQUFBLEVBQVNYO1FBQ1g7SUFDRjtJQUVBLE9BQU9ZLHlCQUF5QkMsS0FBVSxFQUFFO1FBQzFDLElBQUlDLENBQUFBLEdBQUFBLG9CQUFBQSx5QkFBQUEsRUFBMEJELFFBQVE7WUFDcEMsTUFBTUUsYUFBYUMsQ0FBQUEsR0FBQUEsb0JBQUFBLDJCQUFBQSxFQUE0Qkg7WUFDL0MsT0FBTztnQkFDTEksaUJBQWlCRjtZQUNuQjtRQUNGO1FBQ0EsbUNBQW1DO1FBQ25DLE1BQU1GO0lBQ1I7SUFFQSxPQUFPSyx5QkFDTHRCLEtBQTJDLEVBQzNDdUIsS0FBOEIsRUFDRTtRQUNoQzs7Ozs7S0FLQyxHQUNELElBQUl2QixNQUFNd0IsUUFBUSxLQUFLRCxNQUFNRSxnQkFBZ0IsSUFBSUYsTUFBTUYsZUFBZSxFQUFFO1lBQ3RFLE9BQU87Z0JBQ0xBLGlCQUFpQks7Z0JBQ2pCRCxrQkFBa0J6QixNQUFNd0IsUUFBUTtZQUNsQztRQUNGO1FBQ0EsT0FBTztZQUNMSCxpQkFBaUJFLE1BQU1GLGVBQWU7WUFDdENJLGtCQUFrQnpCLE1BQU13QixRQUFRO1FBQ2xDO0lBQ0Y7SUFFQUcsU0FBUztRQUNQLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxTQUFTLEVBQUVDLFlBQVksRUFBRUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDL0IsS0FBSztRQUNsRSxNQUFNLEVBQUVxQixlQUFlLEVBQUUsR0FBRyxJQUFJLENBQUNFLEtBQUs7UUFDdEMsTUFBTVMsa0JBQWtCO1lBQ3RCLENBQUNDLG9CQUFBQSxxQkFBcUIsQ0FBQ0MsU0FBUyxDQUFDLEVBQUVOO1lBQ25DLENBQUNLLG9CQUFBQSxxQkFBcUIsQ0FBQ0UsU0FBUyxDQUFDLEVBQUVOO1lBQ25DLENBQUNJLG9CQUFBQSxxQkFBcUIsQ0FBQ0csWUFBWSxDQUFDLEVBQUVOO1FBQ3hDO1FBRUEsSUFBSVQsaUJBQWlCO1lBQ25CLE1BQU1nQixhQUNKaEIsb0JBQW9CWSxvQkFBQUEscUJBQXFCLENBQUNDLFNBQVMsSUFBSU47WUFDekQsTUFBTVUsY0FDSmpCLG9CQUFvQlksb0JBQUFBLHFCQUFxQixDQUFDRSxTQUFTLElBQUlOO1lBQ3pELE1BQU1VLGlCQUNKbEIsb0JBQW9CWSxvQkFBQUEscUJBQXFCLENBQUNHLFlBQVksSUFBSU47WUFFNUQsa0dBQWtHO1lBQ2xHLElBQUksQ0FBRU8sQ0FBQUEsY0FBY0MsZUFBZUMsY0FBQUEsQ0FBYSxFQUFJO2dCQUNsRCxPQUFPUjtZQUNUO1lBRUEscUJBQ0U7O2tDQUNFLHFCQUFDUyxRQUFBQTt3QkFBS0MsTUFBSzt3QkFBU0MsU0FBUTs7b0JBNUZoQ2pELEtBNkYyQyxJQUFiLGNBQ3hCLHFCQUFDK0MsUUFBQUE7d0JBQ0NDLE1BQUs7d0JBQ0xDLFNBQVNDLENBQUFBLEdBQUFBLG9CQUFBQSxrQ0FBQUEsRUFBbUN0Qjs7b0JBRy9DVyxlQUFlLENBQUNYLGdCQUFnQjs7O1FBR3ZDO1FBRUEsT0FBT1U7SUFDVDtJQXJHQWEsWUFBWTVDLEtBQTJDLENBQUU7UUFDdkQsS0FBSyxDQUFDQTtRQUNOLElBQUksQ0FBQ3VCLEtBQUssR0FBRztZQUNYRixpQkFBaUJLO1lBQ2pCRCxrQkFBa0J6QixNQUFNd0IsUUFBUTtRQUNsQztJQUNGO0FBZ0dGO0FBRU8sb0NBQW9DLEtBS1Q7SUFMUyxNQUN6Q0ksUUFBUSxFQUNSQyxTQUFTLEVBQ1RDLFlBQVksRUFDWkMsUUFBUSxFQUN3QixHQUxTO0lBTXpDLDZFQUE2RTtJQUM3RSxxRUFBcUU7SUFDckUsd0VBQXdFO0lBQ3hFLG1FQUFtRTtJQUNuRSxNQUFNUCxXQUFXcUIsQ0FBQUEsR0FBQUEscUJBQUFBLG9CQUFBQTtJQUNqQixNQUFNNUMsZUFBZTZDLENBQUFBLEdBQUFBLE9BQUFBLFVBQUFBLEVBQVdDLCtCQUFBQSxrQkFBa0I7SUFDbEQsTUFBTUMsbUJBQW1CLENBQUMsQ0FBRXBCLENBQUFBLFlBQVlDLGFBQWFDLFlBQUFBLENBQVc7SUFFaEUsSUFBSWtCLGtCQUFrQjtRQUNwQixPQUNFLFdBREYsR0FDRSxxQkFBQ3ZELGlDQUFBQTtZQUNDK0IsVUFBVUE7WUFDVkksVUFBVUE7WUFDVkMsV0FBV0E7WUFDWEMsY0FBY0E7WUFDZDdCLGNBQWNBO3NCQUViOEI7O0lBR1A7SUFFQSxxQkFBTztrQkFBR0E7O0FBQ1o7S0E3QmdCdkMiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9odHRwLWFjY2Vzcy1mYWxsYmFjay9lcnJvci1ib3VuZGFyeS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbi8qKlxuICogSFRUUEFjY2Vzc0ZhbGxiYWNrQm91bmRhcnkgaXMgYSBib3VuZGFyeSB0aGF0IGNhdGNoZXMgZXJyb3JzIGFuZCByZW5kZXJzIGFcbiAqIGZhbGxiYWNrIGNvbXBvbmVudCBmb3IgSFRUUCBlcnJvcnMuXG4gKlxuICogSXQgcmVjZWl2ZXMgdGhlIHN0YXR1cyBjb2RlLCBhbmQgZGV0ZXJtaW5lIGlmIGl0IHNob3VsZCByZW5kZXIgZmFsbGJhY2tzIGZvciBmZXcgSFRUUCA0eHggZXJyb3JzLlxuICpcbiAqIGUuZy4gNDA0XG4gKiA0MDQgcmVwcmVzZW50cyBub3QgZm91bmQsIGFuZCB0aGUgZmFsbGJhY2sgY29tcG9uZW50IHBhaXIgY29udGFpbnMgdGhlIGNvbXBvbmVudCBhbmQgaXRzIHN0eWxlcy5cbiAqXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVVudHJhY2tlZFBhdGhuYW1lIH0gZnJvbSAnLi4vbmF2aWdhdGlvbi11bnRyYWNrZWQnXG5pbXBvcnQge1xuICBIVFRQQWNjZXNzRXJyb3JTdGF0dXMsXG4gIGdldEFjY2Vzc0ZhbGxiYWNrSFRUUFN0YXR1cyxcbiAgZ2V0QWNjZXNzRmFsbGJhY2tFcnJvclR5cGVCeVN0YXR1cyxcbiAgaXNIVFRQQWNjZXNzRmFsbGJhY2tFcnJvcixcbn0gZnJvbSAnLi9odHRwLWFjY2Vzcy1mYWxsYmFjaydcbmltcG9ydCB7IHdhcm5PbmNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2xpYi91dGlscy93YXJuLW9uY2UnXG5pbXBvcnQgeyBNaXNzaW5nU2xvdENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcblxuaW50ZXJmYWNlIEhUVFBBY2Nlc3NGYWxsYmFja0JvdW5kYXJ5UHJvcHMge1xuICBub3RGb3VuZD86IFJlYWN0LlJlYWN0Tm9kZVxuICBmb3JiaWRkZW4/OiBSZWFjdC5SZWFjdE5vZGVcbiAgdW5hdXRob3JpemVkPzogUmVhY3QuUmVhY3ROb2RlXG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbiAgbWlzc2luZ1Nsb3RzPzogU2V0PHN0cmluZz5cbn1cblxuaW50ZXJmYWNlIEhUVFBBY2Nlc3NGYWxsYmFja0Vycm9yQm91bmRhcnlQcm9wc1xuICBleHRlbmRzIEhUVFBBY2Nlc3NGYWxsYmFja0JvdW5kYXJ5UHJvcHMge1xuICBwYXRobmFtZTogc3RyaW5nIHwgbnVsbFxuICBtaXNzaW5nU2xvdHM/OiBTZXQ8c3RyaW5nPlxufVxuXG5pbnRlcmZhY2UgSFRUUEFjY2Vzc0JvdW5kYXJ5U3RhdGUge1xuICB0cmlnZ2VyZWRTdGF0dXM6IG51bWJlciB8IHVuZGVmaW5lZFxuICBwcmV2aW91c1BhdGhuYW1lOiBzdHJpbmcgfCBudWxsXG59XG5cbmNsYXNzIEhUVFBBY2Nlc3NGYWxsYmFja0Vycm9yQm91bmRhcnkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIEhUVFBBY2Nlc3NGYWxsYmFja0Vycm9yQm91bmRhcnlQcm9wcyxcbiAgSFRUUEFjY2Vzc0JvdW5kYXJ5U3RhdGVcbj4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3JCb3VuZGFyeVByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHRyaWdnZXJlZFN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgcHJldmlvdXNQYXRobmFtZTogcHJvcHMucGF0aG5hbWUsXG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkQ2F0Y2goKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcgJiZcbiAgICAgIHRoaXMucHJvcHMubWlzc2luZ1Nsb3RzICYmXG4gICAgICB0aGlzLnByb3BzLm1pc3NpbmdTbG90cy5zaXplID4gMCAmJlxuICAgICAgLy8gQSBtaXNzaW5nIGNoaWxkcmVuIHNsb3QgaXMgdGhlIHR5cGljYWwgbm90LWZvdW5kIGNhc2UsIHNvIG5vIG5lZWQgdG8gd2FyblxuICAgICAgIXRoaXMucHJvcHMubWlzc2luZ1Nsb3RzLmhhcygnY2hpbGRyZW4nKVxuICAgICkge1xuICAgICAgbGV0IHdhcm5pbmdNZXNzYWdlID1cbiAgICAgICAgJ05vIGRlZmF1bHQgY29tcG9uZW50IHdhcyBmb3VuZCBmb3IgYSBwYXJhbGxlbCByb3V0ZSByZW5kZXJlZCBvbiB0aGlzIHBhZ2UuIEZhbGxpbmcgYmFjayB0byBuZWFyZXN0IE5vdEZvdW5kIGJvdW5kYXJ5LlxcbicgK1xuICAgICAgICAnTGVhcm4gbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcm91dGluZy9wYXJhbGxlbC1yb3V0ZXMjZGVmYXVsdGpzXFxuXFxuJ1xuXG4gICAgICBjb25zdCBmb3JtYXR0ZWRTbG90cyA9IEFycmF5LmZyb20odGhpcy5wcm9wcy5taXNzaW5nU2xvdHMpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpXG4gICAgICAgIC5tYXAoKHNsb3QpID0+IGBAJHtzbG90fWApXG4gICAgICAgIC5qb2luKCcsICcpXG5cbiAgICAgIHdhcm5pbmdNZXNzYWdlICs9ICdNaXNzaW5nIHNsb3RzOiAnICsgZm9ybWF0dGVkU2xvdHNcblxuICAgICAgd2Fybk9uY2Uod2FybmluZ01lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvcjogYW55KSB7XG4gICAgaWYgKGlzSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3IoZXJyb3IpKSB7XG4gICAgICBjb25zdCBodHRwU3RhdHVzID0gZ2V0QWNjZXNzRmFsbGJhY2tIVFRQU3RhdHVzKGVycm9yKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHJpZ2dlcmVkU3RhdHVzOiBodHRwU3RhdHVzLFxuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZS10aHJvdyBpZiBlcnJvciBpcyBub3QgZm9yIDQwNFxuICAgIHRocm93IGVycm9yXG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgIHByb3BzOiBIVFRQQWNjZXNzRmFsbGJhY2tFcnJvckJvdW5kYXJ5UHJvcHMsXG4gICAgc3RhdGU6IEhUVFBBY2Nlc3NCb3VuZGFyeVN0YXRlXG4gICk6IEhUVFBBY2Nlc3NCb3VuZGFyeVN0YXRlIHwgbnVsbCB7XG4gICAgLyoqXG4gICAgICogSGFuZGxlcyByZXNldCBvZiB0aGUgZXJyb3IgYm91bmRhcnkgd2hlbiBhIG5hdmlnYXRpb24gaGFwcGVucy5cbiAgICAgKiBFbnN1cmVzIHRoZSBlcnJvciBib3VuZGFyeSBkb2VzIG5vdCBzdGF5IGVuYWJsZWQgd2hlbiBuYXZpZ2F0aW5nIHRvIGEgbmV3IHBhZ2UuXG4gICAgICogQXBwcm9hY2ggb2Ygc2V0U3RhdGUgaW4gcmVuZGVyIGlzIHNhZmUgYXMgaXQgY2hlY2tzIHRoZSBwcmV2aW91cyBwYXRobmFtZSBhbmQgdGhlbiBvdmVycmlkZXNcbiAgICAgKiBpdCBhcyBvdXRsaW5lZCBpbiBodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvdXNlU3RhdGUjc3RvcmluZy1pbmZvcm1hdGlvbi1mcm9tLXByZXZpb3VzLXJlbmRlcnNcbiAgICAgKi9cbiAgICBpZiAocHJvcHMucGF0aG5hbWUgIT09IHN0YXRlLnByZXZpb3VzUGF0aG5hbWUgJiYgc3RhdGUudHJpZ2dlcmVkU3RhdHVzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0cmlnZ2VyZWRTdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgICAgcHJldmlvdXNQYXRobmFtZTogcHJvcHMucGF0aG5hbWUsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0cmlnZ2VyZWRTdGF0dXM6IHN0YXRlLnRyaWdnZXJlZFN0YXR1cyxcbiAgICAgIHByZXZpb3VzUGF0aG5hbWU6IHByb3BzLnBhdGhuYW1lLFxuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IG5vdEZvdW5kLCBmb3JiaWRkZW4sIHVuYXV0aG9yaXplZCwgY2hpbGRyZW4gfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7IHRyaWdnZXJlZFN0YXR1cyB9ID0gdGhpcy5zdGF0ZVxuICAgIGNvbnN0IGVycm9yQ29tcG9uZW50cyA9IHtcbiAgICAgIFtIVFRQQWNjZXNzRXJyb3JTdGF0dXMuTk9UX0ZPVU5EXTogbm90Rm91bmQsXG4gICAgICBbSFRUUEFjY2Vzc0Vycm9yU3RhdHVzLkZPUkJJRERFTl06IGZvcmJpZGRlbixcbiAgICAgIFtIVFRQQWNjZXNzRXJyb3JTdGF0dXMuVU5BVVRIT1JJWkVEXTogdW5hdXRob3JpemVkLFxuICAgIH1cblxuICAgIGlmICh0cmlnZ2VyZWRTdGF0dXMpIHtcbiAgICAgIGNvbnN0IGlzTm90Rm91bmQgPVxuICAgICAgICB0cmlnZ2VyZWRTdGF0dXMgPT09IEhUVFBBY2Nlc3NFcnJvclN0YXR1cy5OT1RfRk9VTkQgJiYgbm90Rm91bmRcbiAgICAgIGNvbnN0IGlzRm9yYmlkZGVuID1cbiAgICAgICAgdHJpZ2dlcmVkU3RhdHVzID09PSBIVFRQQWNjZXNzRXJyb3JTdGF0dXMuRk9SQklEREVOICYmIGZvcmJpZGRlblxuICAgICAgY29uc3QgaXNVbmF1dGhvcml6ZWQgPVxuICAgICAgICB0cmlnZ2VyZWRTdGF0dXMgPT09IEhUVFBBY2Nlc3NFcnJvclN0YXR1cy5VTkFVVEhPUklaRUQgJiYgdW5hdXRob3JpemVkXG5cbiAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gbWF0Y2hlZCBib3VuZGFyeSBpbiB0aGlzIGxheWVyLCBrZWVwIHRocm93aW5nIHRoZSBlcnJvciBieSByZW5kZXJpbmcgdGhlIGNoaWxkcmVuXG4gICAgICBpZiAoIShpc05vdEZvdW5kIHx8IGlzRm9yYmlkZGVuIHx8IGlzVW5hdXRob3JpemVkKSkge1xuICAgICAgICByZXR1cm4gY2hpbGRyZW5cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8bWV0YSBuYW1lPVwicm9ib3RzXCIgY29udGVudD1cIm5vaW5kZXhcIiAvPlxuICAgICAgICAgIHtwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyAmJiAoXG4gICAgICAgICAgICA8bWV0YVxuICAgICAgICAgICAgICBuYW1lPVwiYm91bmRhcnktbmV4dC1lcnJvclwiXG4gICAgICAgICAgICAgIGNvbnRlbnQ9e2dldEFjY2Vzc0ZhbGxiYWNrRXJyb3JUeXBlQnlTdGF0dXModHJpZ2dlcmVkU3RhdHVzKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7ZXJyb3JDb21wb25lbnRzW3RyaWdnZXJlZFN0YXR1c119XG4gICAgICAgIDwvPlxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBjaGlsZHJlblxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIVFRQQWNjZXNzRmFsbGJhY2tCb3VuZGFyeSh7XG4gIG5vdEZvdW5kLFxuICBmb3JiaWRkZW4sXG4gIHVuYXV0aG9yaXplZCxcbiAgY2hpbGRyZW4sXG59OiBIVFRQQWNjZXNzRmFsbGJhY2tCb3VuZGFyeVByb3BzKSB7XG4gIC8vIFdoZW4gd2UncmUgcmVuZGVyaW5nIHRoZSBtaXNzaW5nIHBhcmFtcyBzaGVsbCwgdGhpcyB3aWxsIHJldHVybiBudWxsLiBUaGlzXG4gIC8vIGlzIGJlY2F1c2Ugd2Ugd29uJ3QgYmUgcmVuZGVyaW5nIGFueSBub3QgZm91bmQgYm91bmRhcmllcyBvciBlcnJvclxuICAvLyBib3VuZGFyaWVzIGZvciB0aGUgbWlzc2luZyBwYXJhbXMgc2hlbGwuIFdoZW4gdGhpcyBydW5zIG9uIHRoZSBjbGllbnRcbiAgLy8gKHdoZXJlIHRoZXNlIGVycm9yIGNhbiBvY2N1ciksIHdlIHdpbGwgZ2V0IHRoZSBjb3JyZWN0IHBhdGhuYW1lLlxuICBjb25zdCBwYXRobmFtZSA9IHVzZVVudHJhY2tlZFBhdGhuYW1lKClcbiAgY29uc3QgbWlzc2luZ1Nsb3RzID0gdXNlQ29udGV4dChNaXNzaW5nU2xvdENvbnRleHQpXG4gIGNvbnN0IGhhc0Vycm9yRmFsbGJhY2sgPSAhIShub3RGb3VuZCB8fCBmb3JiaWRkZW4gfHwgdW5hdXRob3JpemVkKVxuXG4gIGlmIChoYXNFcnJvckZhbGxiYWNrKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxIVFRQQWNjZXNzRmFsbGJhY2tFcnJvckJvdW5kYXJ5XG4gICAgICAgIHBhdGhuYW1lPXtwYXRobmFtZX1cbiAgICAgICAgbm90Rm91bmQ9e25vdEZvdW5kfVxuICAgICAgICBmb3JiaWRkZW49e2ZvcmJpZGRlbn1cbiAgICAgICAgdW5hdXRob3JpemVkPXt1bmF1dGhvcml6ZWR9XG4gICAgICAgIG1pc3NpbmdTbG90cz17bWlzc2luZ1Nsb3RzfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0hUVFBBY2Nlc3NGYWxsYmFja0Vycm9yQm91bmRhcnk+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIDw+e2NoaWxkcmVufTwvPlxufVxuIl0sIm5hbWVzIjpbIkhUVFBBY2Nlc3NGYWxsYmFja0JvdW5kYXJ5IiwiSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3JCb3VuZGFyeSIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29tcG9uZW50RGlkQ2F0Y2giLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJwcm9wcyIsIm1pc3NpbmdTbG90cyIsInNpemUiLCJoYXMiLCJ3YXJuaW5nTWVzc2FnZSIsImZvcm1hdHRlZFNsb3RzIiwiQXJyYXkiLCJmcm9tIiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsIm1hcCIsInNsb3QiLCJqb2luIiwid2Fybk9uY2UiLCJnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IiLCJlcnJvciIsImlzSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3IiLCJodHRwU3RhdHVzIiwiZ2V0QWNjZXNzRmFsbGJhY2tIVFRQU3RhdHVzIiwidHJpZ2dlcmVkU3RhdHVzIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwic3RhdGUiLCJwYXRobmFtZSIsInByZXZpb3VzUGF0aG5hbWUiLCJ1bmRlZmluZWQiLCJyZW5kZXIiLCJub3RGb3VuZCIsImZvcmJpZGRlbiIsInVuYXV0aG9yaXplZCIsImNoaWxkcmVuIiwiZXJyb3JDb21wb25lbnRzIiwiSFRUUEFjY2Vzc0Vycm9yU3RhdHVzIiwiTk9UX0ZPVU5EIiwiRk9SQklEREVOIiwiVU5BVVRIT1JJWkVEIiwiaXNOb3RGb3VuZCIsImlzRm9yYmlkZGVuIiwiaXNVbmF1dGhvcml6ZWQiLCJtZXRhIiwibmFtZSIsImNvbnRlbnQiLCJnZXRBY2Nlc3NGYWxsYmFja0Vycm9yVHlwZUJ5U3RhdHVzIiwiY29uc3RydWN0b3IiLCJ1c2VVbnRyYWNrZWRQYXRobmFtZSIsInVzZUNvbnRleHQiLCJNaXNzaW5nU2xvdENvbnRleHQiLCJoYXNFcnJvckZhbGxiYWNrIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js":
/*!*******************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js ***!
  \*******************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    HTTPAccessErrorStatus: function() {\n        return HTTPAccessErrorStatus;\n    },\n    HTTP_ERROR_FALLBACK_ERROR_CODE: function() {\n        return HTTP_ERROR_FALLBACK_ERROR_CODE;\n    },\n    getAccessFallbackErrorTypeByStatus: function() {\n        return getAccessFallbackErrorTypeByStatus;\n    },\n    getAccessFallbackHTTPStatus: function() {\n        return getAccessFallbackHTTPStatus;\n    },\n    isHTTPAccessFallbackError: function() {\n        return isHTTPAccessFallbackError;\n    }\n});\nconst HTTPAccessErrorStatus = {\n    NOT_FOUND: 404,\n    FORBIDDEN: 403,\n    UNAUTHORIZED: 401\n};\nconst ALLOWED_CODES = new Set(Object.values(HTTPAccessErrorStatus));\nconst HTTP_ERROR_FALLBACK_ERROR_CODE = 'NEXT_HTTP_ERROR_FALLBACK';\nfunction isHTTPAccessFallbackError(error) {\n    if (typeof error !== 'object' || error === null || !('digest' in error) || typeof error.digest !== 'string') {\n        return false;\n    }\n    const [prefix, httpStatus] = error.digest.split(';');\n    return prefix === HTTP_ERROR_FALLBACK_ERROR_CODE && ALLOWED_CODES.has(Number(httpStatus));\n}\nfunction getAccessFallbackHTTPStatus(error) {\n    const httpStatus = error.digest.split(';')[1];\n    return Number(httpStatus);\n}\nfunction getAccessFallbackErrorTypeByStatus(status) {\n    switch(status){\n        case 401:\n            return 'unauthorized';\n        case 403:\n            return 'forbidden';\n        case 404:\n            return 'not-found';\n        default:\n            return;\n    }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=http-access-fallback.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9odHRwLWFjY2Vzcy1mYWxsYmFjay9odHRwLWFjY2Vzcy1mYWxsYmFjay5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFBYUEscUJBQXFCO2VBQXJCQTs7SUFRQUMsOEJBQThCO2VBQTlCQTs7SUF1Q0dDLGtDQUFrQztlQUFsQ0E7O0lBUEFDLDJCQUEyQjtlQUEzQkE7O0lBbkJBQyx5QkFBeUI7ZUFBekJBOzs7QUFyQlQsTUFBTUosd0JBQXdCO0lBQ25DSyxXQUFXO0lBQ1hDLFdBQVc7SUFDWEMsY0FBYztBQUNoQjtBQUVBLE1BQU1DLGdCQUFnQixJQUFJQyxJQUFJQyxPQUFPQyxNQUFNLENBQUNYO0FBRXJDLE1BQU1DLGlDQUFpQztBQWF2QyxTQUFTRywwQkFDZFEsS0FBYztJQUVkLElBQ0UsT0FBT0EsVUFBVSxZQUNqQkEsVUFBVSxRQUNWLENBQUUsYUFBWUEsS0FBQUEsQ0FBSSxJQUNsQixPQUFPQSxNQUFNQyxNQUFNLEtBQUssVUFDeEI7UUFDQSxPQUFPO0lBQ1Q7SUFDQSxNQUFNLENBQUNDLFFBQVFDLFdBQVcsR0FBR0gsTUFBTUMsTUFBTSxDQUFDRyxLQUFLLENBQUM7SUFFaEQsT0FDRUYsV0FBV2Isa0NBQ1hPLGNBQWNTLEdBQUcsQ0FBQ0MsT0FBT0g7QUFFN0I7QUFFTyxTQUFTWiw0QkFDZFMsS0FBOEI7SUFFOUIsTUFBTUcsYUFBYUgsTUFBTUMsTUFBTSxDQUFDRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7SUFDN0MsT0FBT0UsT0FBT0g7QUFDaEI7QUFFTyxTQUFTYixtQ0FDZGlCLE1BQWM7SUFFZCxPQUFRQTtRQUNOLEtBQUs7WUFDSCxPQUFPO1FBQ1QsS0FBSztZQUNILE9BQU87UUFDVCxLQUFLO1lBQ0gsT0FBTztRQUNUO1lBQ0U7SUFDSjtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2NvbXBvbmVudHMvaHR0cC1hY2Nlc3MtZmFsbGJhY2svaHR0cC1hY2Nlc3MtZmFsbGJhY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEhUVFBBY2Nlc3NFcnJvclN0YXR1cyA9IHtcbiAgTk9UX0ZPVU5EOiA0MDQsXG4gIEZPUkJJRERFTjogNDAzLFxuICBVTkFVVEhPUklaRUQ6IDQwMSxcbn1cblxuY29uc3QgQUxMT1dFRF9DT0RFUyA9IG5ldyBTZXQoT2JqZWN0LnZhbHVlcyhIVFRQQWNjZXNzRXJyb3JTdGF0dXMpKVxuXG5leHBvcnQgY29uc3QgSFRUUF9FUlJPUl9GQUxMQkFDS19FUlJPUl9DT0RFID0gJ05FWFRfSFRUUF9FUlJPUl9GQUxMQkFDSydcblxuZXhwb3J0IHR5cGUgSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3IgPSBFcnJvciAmIHtcbiAgZGlnZXN0OiBgJHt0eXBlb2YgSFRUUF9FUlJPUl9GQUxMQkFDS19FUlJPUl9DT0RFfTske3N0cmluZ31gXG59XG5cbi8qKlxuICogQ2hlY2tzIGFuIGVycm9yIHRvIGRldGVybWluZSBpZiBpdCdzIGFuIGVycm9yIGdlbmVyYXRlZCBieVxuICogdGhlIEhUVFAgbmF2aWdhdGlvbiBBUElzIGBub3RGb3VuZCgpYCwgYGZvcmJpZGRlbigpYCBvciBgdW5hdXRob3JpemVkKClgLlxuICpcbiAqIEBwYXJhbSBlcnJvciB0aGUgZXJyb3IgdGhhdCBtYXkgcmVmZXJlbmNlIGEgSFRUUCBhY2Nlc3MgZXJyb3JcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGVycm9yIGlzIGEgSFRUUCBhY2Nlc3MgZXJyb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3IoXG4gIGVycm9yOiB1bmtub3duXG4pOiBlcnJvciBpcyBIVFRQQWNjZXNzRmFsbGJhY2tFcnJvciB7XG4gIGlmIChcbiAgICB0eXBlb2YgZXJyb3IgIT09ICdvYmplY3QnIHx8XG4gICAgZXJyb3IgPT09IG51bGwgfHxcbiAgICAhKCdkaWdlc3QnIGluIGVycm9yKSB8fFxuICAgIHR5cGVvZiBlcnJvci5kaWdlc3QgIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IFtwcmVmaXgsIGh0dHBTdGF0dXNdID0gZXJyb3IuZGlnZXN0LnNwbGl0KCc7JylcblxuICByZXR1cm4gKFxuICAgIHByZWZpeCA9PT0gSFRUUF9FUlJPUl9GQUxMQkFDS19FUlJPUl9DT0RFICYmXG4gICAgQUxMT1dFRF9DT0RFUy5oYXMoTnVtYmVyKGh0dHBTdGF0dXMpKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY2Nlc3NGYWxsYmFja0hUVFBTdGF0dXMoXG4gIGVycm9yOiBIVFRQQWNjZXNzRmFsbGJhY2tFcnJvclxuKTogbnVtYmVyIHtcbiAgY29uc3QgaHR0cFN0YXR1cyA9IGVycm9yLmRpZ2VzdC5zcGxpdCgnOycpWzFdXG4gIHJldHVybiBOdW1iZXIoaHR0cFN0YXR1cylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFjY2Vzc0ZhbGxiYWNrRXJyb3JUeXBlQnlTdGF0dXMoXG4gIHN0YXR1czogbnVtYmVyXG4pOiAnbm90LWZvdW5kJyB8ICdmb3JiaWRkZW4nIHwgJ3VuYXV0aG9yaXplZCcgfCB1bmRlZmluZWQge1xuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgNDAxOlxuICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnXG4gICAgY2FzZSA0MDM6XG4gICAgICByZXR1cm4gJ2ZvcmJpZGRlbidcbiAgICBjYXNlIDQwNDpcbiAgICAgIHJldHVybiAnbm90LWZvdW5kJ1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm5cbiAgfVxufVxuIl0sIm5hbWVzIjpbIkhUVFBBY2Nlc3NFcnJvclN0YXR1cyIsIkhUVFBfRVJST1JfRkFMTEJBQ0tfRVJST1JfQ09ERSIsImdldEFjY2Vzc0ZhbGxiYWNrRXJyb3JUeXBlQnlTdGF0dXMiLCJnZXRBY2Nlc3NGYWxsYmFja0hUVFBTdGF0dXMiLCJpc0hUVFBBY2Nlc3NGYWxsYmFja0Vycm9yIiwiTk9UX0ZPVU5EIiwiRk9SQklEREVOIiwiVU5BVVRIT1JJWkVEIiwiQUxMT1dFRF9DT0RFUyIsIlNldCIsIk9iamVjdCIsInZhbHVlcyIsImVycm9yIiwiZGlnZXN0IiwicHJlZml4IiwiaHR0cFN0YXR1cyIsInNwbGl0IiwiaGFzIiwiTnVtYmVyIiwic3RhdHVzIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/is-next-router-error.js":
/*!**********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/is-next-router-error.js ***!
  \**********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"isNextRouterError\", ({\n    enumerable: true,\n    get: function() {\n        return isNextRouterError;\n    }\n}));\nconst _httpaccessfallback = __webpack_require__(/*! ./http-access-fallback/http-access-fallback */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js\");\nconst _redirecterror = __webpack_require__(/*! ./redirect-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect-error.js\");\nfunction isNextRouterError(error) {\n    return (0, _redirecterror.isRedirectError)(error) || (0, _httpaccessfallback.isHTTPAccessFallbackError)(error);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=is-next-router-error.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9pcy1uZXh0LXJvdXRlci1lcnJvci5qcyIsIm1hcHBpbmdzIjoiOzs7O3FEQVdnQkE7OztlQUFBQTs7O2dEQVJUOzJDQUM2QztBQU83QyxTQUFTQSxrQkFDZEMsS0FBYztJQUVkLE9BQU9DLENBQUFBLEdBQUFBLGVBQUFBLGVBQUFBLEVBQWdCRCxVQUFVRSxDQUFBQSxHQUFBQSxvQkFBQUEseUJBQUFBLEVBQTBCRjtBQUM3RCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9zcmMvY2xpZW50L2NvbXBvbmVudHMvaXMtbmV4dC1yb3V0ZXItZXJyb3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgaXNIVFRQQWNjZXNzRmFsbGJhY2tFcnJvcixcbiAgdHlwZSBIVFRQQWNjZXNzRmFsbGJhY2tFcnJvcixcbn0gZnJvbSAnLi9odHRwLWFjY2Vzcy1mYWxsYmFjay9odHRwLWFjY2Vzcy1mYWxsYmFjaydcbmltcG9ydCB7IGlzUmVkaXJlY3RFcnJvciwgdHlwZSBSZWRpcmVjdEVycm9yIH0gZnJvbSAnLi9yZWRpcmVjdC1lcnJvcidcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVycm9yIGlzIGEgbmF2aWdhdGlvbiBzaWduYWwgZXJyb3IuIFRoZXNlIGVycm9ycyBhcmVcbiAqIHRocm93biBieSB1c2VyIGNvZGUgdG8gcGVyZm9ybSBuYXZpZ2F0aW9uIG9wZXJhdGlvbnMgYW5kIGludGVycnVwdCB0aGUgUmVhY3RcbiAqIHJlbmRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTmV4dFJvdXRlckVycm9yKFxuICBlcnJvcjogdW5rbm93blxuKTogZXJyb3IgaXMgUmVkaXJlY3RFcnJvciB8IEhUVFBBY2Nlc3NGYWxsYmFja0Vycm9yIHtcbiAgcmV0dXJuIGlzUmVkaXJlY3RFcnJvcihlcnJvcikgfHwgaXNIVFRQQWNjZXNzRmFsbGJhY2tFcnJvcihlcnJvcilcbn1cbiJdLCJuYW1lcyI6WyJpc05leHRSb3V0ZXJFcnJvciIsImVycm9yIiwiaXNSZWRpcmVjdEVycm9yIiwiaXNIVFRQQWNjZXNzRmFsbGJhY2tFcnJvciJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/is-next-router-error.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/links.js":
/*!*******************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/links.js ***!
  \*******************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    IDLE_LINK_STATUS: function() {\n        return IDLE_LINK_STATUS;\n    },\n    PENDING_LINK_STATUS: function() {\n        return PENDING_LINK_STATUS;\n    },\n    mountFormInstance: function() {\n        return mountFormInstance;\n    },\n    mountLinkInstance: function() {\n        return mountLinkInstance;\n    },\n    onLinkVisibilityChanged: function() {\n        return onLinkVisibilityChanged;\n    },\n    onNavigationIntent: function() {\n        return onNavigationIntent;\n    },\n    pingVisibleLinks: function() {\n        return pingVisibleLinks;\n    },\n    setLinkForCurrentNavigation: function() {\n        return setLinkForCurrentNavigation;\n    },\n    unmountLinkForCurrentNavigation: function() {\n        return unmountLinkForCurrentNavigation;\n    },\n    unmountPrefetchableInstance: function() {\n        return unmountPrefetchableInstance;\n    }\n});\nconst _approuterinstance = __webpack_require__(/*! ./app-router-instance */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router-instance.js\");\nconst _approuter = __webpack_require__(/*! ./app-router */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer/router-reducer-types */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _segmentcache = __webpack_require__(/*! ./segment-cache */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/segment-cache.js\");\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\n// Tracks the most recently navigated link instance. When null, indicates\n// the current navigation was not initiated by a link click.\nlet linkForMostRecentNavigation = null;\nconst PENDING_LINK_STATUS = {\n    pending: true\n};\nconst IDLE_LINK_STATUS = {\n    pending: false\n};\nfunction setLinkForCurrentNavigation(link) {\n    (0, _react.startTransition)(()=>{\n        linkForMostRecentNavigation == null ? void 0 : linkForMostRecentNavigation.setOptimisticLinkStatus(IDLE_LINK_STATUS);\n        link == null ? void 0 : link.setOptimisticLinkStatus(PENDING_LINK_STATUS);\n        linkForMostRecentNavigation = link;\n    });\n}\nfunction unmountLinkForCurrentNavigation(link) {\n    if (linkForMostRecentNavigation === link) {\n        linkForMostRecentNavigation = null;\n    }\n}\n// Use a WeakMap to associate a Link instance with its DOM element. This is\n// used by the IntersectionObserver to track the link's visibility.\nconst prefetchable = typeof WeakMap === 'function' ? new WeakMap() : new Map();\n// A Set of the currently visible links. We re-prefetch visible links after a\n// cache invalidation, or when the current URL changes. It's a separate data\n// structure from the WeakMap above because only the visible links need to\n// be enumerated.\nconst prefetchableAndVisible = new Set();\n// A single IntersectionObserver instance shared by all <Link> components.\nconst observer = typeof IntersectionObserver === 'function' ? new IntersectionObserver(handleIntersect, {\n    rootMargin: '200px'\n}) : null;\nfunction observeVisibility(element, instance) {\n    const existingInstance = prefetchable.get(element);\n    if (existingInstance !== undefined) {\n        // This shouldn't happen because each <Link> component should have its own\n        // anchor tag instance, but it's defensive coding to avoid a memory leak in\n        // case there's a logical error somewhere else.\n        unmountPrefetchableInstance(element);\n    }\n    // Only track prefetchable links that have a valid prefetch URL\n    prefetchable.set(element, instance);\n    if (observer !== null) {\n        observer.observe(element);\n    }\n}\nfunction coercePrefetchableUrl(href) {\n    try {\n        return (0, _approuter.createPrefetchURL)(href);\n    } catch (e) {\n        // createPrefetchURL sometimes throws an error if an invalid URL is\n        // provided, though I'm not sure if it's actually necessary.\n        // TODO: Consider removing the throw from the inner function, or change it\n        // to reportError. Or maybe the error isn't even necessary for automatic\n        // prefetches, just navigations.\n        const reportErrorFn = typeof reportError === 'function' ? reportError : console.error;\n        reportErrorFn(\"Cannot prefetch '\" + href + \"' because it cannot be converted to a URL.\");\n        return null;\n    }\n}\nfunction mountLinkInstance(element, href, router, kind, prefetchEnabled, setOptimisticLinkStatus) {\n    if (prefetchEnabled) {\n        const prefetchURL = coercePrefetchableUrl(href);\n        if (prefetchURL !== null) {\n            const instance = {\n                router,\n                kind,\n                isVisible: false,\n                prefetchTask: null,\n                prefetchHref: prefetchURL.href,\n                setOptimisticLinkStatus\n            };\n            // We only observe the link's visibility if it's prefetchable. For\n            // example, this excludes links to external URLs.\n            observeVisibility(element, instance);\n            return instance;\n        }\n    }\n    // If the link is not prefetchable, we still create an instance so we can\n    // track its optimistic state (i.e. useLinkStatus).\n    const instance = {\n        router,\n        kind,\n        isVisible: false,\n        prefetchTask: null,\n        prefetchHref: null,\n        setOptimisticLinkStatus\n    };\n    return instance;\n}\nfunction mountFormInstance(element, href, router, kind) {\n    const prefetchURL = coercePrefetchableUrl(href);\n    if (prefetchURL === null) {\n        // This href is not prefetchable, so we don't track it.\n        // TODO: We currently observe/unobserve a form every time its href changes.\n        // For Links, this isn't a big deal because the href doesn't usually change,\n        // but for forms it's extremely common. We should optimize this.\n        return;\n    }\n    const instance = {\n        router,\n        kind,\n        isVisible: false,\n        prefetchTask: null,\n        prefetchHref: prefetchURL.href,\n        setOptimisticLinkStatus: null\n    };\n    observeVisibility(element, instance);\n}\nfunction unmountPrefetchableInstance(element) {\n    const instance = prefetchable.get(element);\n    if (instance !== undefined) {\n        prefetchable.delete(element);\n        prefetchableAndVisible.delete(instance);\n        const prefetchTask = instance.prefetchTask;\n        if (prefetchTask !== null) {\n            (0, _segmentcache.cancelPrefetchTask)(prefetchTask);\n        }\n    }\n    if (observer !== null) {\n        observer.unobserve(element);\n    }\n}\nfunction handleIntersect(entries) {\n    for (const entry of entries){\n        // Some extremely old browsers or polyfills don't reliably support\n        // isIntersecting so we check intersectionRatio instead. (Do we care? Not\n        // really. But whatever this is fine.)\n        const isVisible = entry.intersectionRatio > 0;\n        onLinkVisibilityChanged(entry.target, isVisible);\n    }\n}\nfunction onLinkVisibilityChanged(element, isVisible) {\n    if (true) {\n        // Prefetching on viewport is disabled in development for performance\n        // reasons, because it requires compiling the target page.\n        // TODO: Investigate re-enabling this.\n        return;\n    }\n    const instance = prefetchable.get(element);\n    if (instance === undefined) {\n        return;\n    }\n    instance.isVisible = isVisible;\n    if (isVisible) {\n        prefetchableAndVisible.add(instance);\n    } else {\n        prefetchableAndVisible.delete(instance);\n    }\n    rescheduleLinkPrefetch(instance, _segmentcache.PrefetchPriority.Default);\n}\nfunction onNavigationIntent(element, unstable_upgradeToDynamicPrefetch) {\n    const instance = prefetchable.get(element);\n    if (instance === undefined) {\n        return;\n    }\n    // Prefetch the link on hover/touchstart.\n    if (instance !== undefined) {\n        if (false) {}\n        rescheduleLinkPrefetch(instance, _segmentcache.PrefetchPriority.Intent);\n    }\n}\nfunction rescheduleLinkPrefetch(instance, priority) {\n    const existingPrefetchTask = instance.prefetchTask;\n    if (!instance.isVisible) {\n        // Cancel any in-progress prefetch task. (If it already finished then this\n        // is a no-op.)\n        if (existingPrefetchTask !== null) {\n            (0, _segmentcache.cancelPrefetchTask)(existingPrefetchTask);\n        }\n        // We don't need to reset the prefetchTask to null upon cancellation; an\n        // old task object can be rescheduled with reschedulePrefetchTask. This is a\n        // micro-optimization but also makes the code simpler (don't need to\n        // worry about whether an old task object is stale).\n        return;\n    }\n    if (true) {\n        // The old prefetch implementation does not have different priority levels.\n        // Just schedule a new prefetch task.\n        prefetchWithOldCacheImplementation(instance);\n        return;\n    }\n    const appRouterState = (0, _approuterinstance.getCurrentAppRouterState)();\n    if (appRouterState !== null) {\n        const treeAtTimeOfPrefetch = appRouterState.tree;\n        if (existingPrefetchTask === null) {\n            // Initiate a prefetch task.\n            const nextUrl = appRouterState.nextUrl;\n            const cacheKey = (0, _segmentcache.createCacheKey)(instance.prefetchHref, nextUrl);\n            instance.prefetchTask = (0, _segmentcache.schedulePrefetchTask)(cacheKey, treeAtTimeOfPrefetch, instance.kind === _routerreducertypes.PrefetchKind.FULL, priority, null);\n        } else {\n            // We already have an old task object that we can reschedule. This is\n            // effectively the same as canceling the old task and creating a new one.\n            (0, _segmentcache.reschedulePrefetchTask)(existingPrefetchTask, treeAtTimeOfPrefetch, instance.kind === _routerreducertypes.PrefetchKind.FULL, priority);\n        }\n    }\n}\nfunction pingVisibleLinks(nextUrl, tree) {\n    // For each currently visible link, cancel the existing prefetch task (if it\n    // exists) and schedule a new one. This is effectively the same as if all the\n    // visible links left and then re-entered the viewport.\n    //\n    // This is called when the Next-Url or the base tree changes, since those\n    // may affect the result of a prefetch task. It's also called after a\n    // cache invalidation.\n    for (const instance of prefetchableAndVisible){\n        const task = instance.prefetchTask;\n        if (task !== null && !(0, _segmentcache.isPrefetchTaskDirty)(task, nextUrl, tree)) {\n            continue;\n        }\n        // Something changed. Cancel the existing prefetch task and schedule a\n        // new one.\n        if (task !== null) {\n            (0, _segmentcache.cancelPrefetchTask)(task);\n        }\n        const cacheKey = (0, _segmentcache.createCacheKey)(instance.prefetchHref, nextUrl);\n        instance.prefetchTask = (0, _segmentcache.schedulePrefetchTask)(cacheKey, tree, instance.kind === _routerreducertypes.PrefetchKind.FULL, _segmentcache.PrefetchPriority.Default, null);\n    }\n}\nfunction prefetchWithOldCacheImplementation(instance) {\n    // This is the path used when the Segment Cache is not enabled.\n    if (false) {}\n    const doPrefetch = async ()=>{\n        // note that `appRouter.prefetch()` is currently sync,\n        // so we have to wrap this call in an async function to be able to catch() errors below.\n        return instance.router.prefetch(instance.prefetchHref, {\n            kind: instance.kind\n        });\n    };\n    // Prefetch the page if asked (only in the client)\n    // We need to handle a prefetch error here since we may be\n    // loading with priority which can reject but we don't\n    // want to force navigation since this is only a prefetch\n    doPrefetch().catch((err)=>{\n        if (true) {\n            // rethrow to show invalid URL errors\n            throw err;\n        }\n    });\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=links.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9saW5rcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUErRGFBLGdCQUFnQjtlQUFoQkE7O0lBSEFDLG1CQUFtQjtlQUFuQkE7O0lBb0hHQyxtQkFBaUI7ZUFBakJBOztJQXRDQUMsaUJBQWlCO2VBQWpCQTs7SUF3RkFDLHVCQUF1QjtlQUF2QkE7O0lBc0JBQyxrQkFBa0I7ZUFBbEJBOztJQTBFQUMsZ0JBQWdCO2VBQWhCQTs7SUE3UEFDLDJCQUEyQjtlQUEzQkE7O0lBU0FDLCtCQUErQjtlQUEvQkE7O0lBMkhBQywyQkFBMkI7ZUFBM0JBOzs7K0NBdk15Qjt1Q0FDUDtnREFDTDswQ0FDTzttQ0FTSjtBQXlDaEMseUVBQXlFO0FBQ3pFLDREQUE0RDtBQUM1RCxJQUFJQyw4QkFBbUQ7QUFHaEQsTUFBTVQsc0JBQXNCO0lBQUVVLFNBQVM7QUFBSztBQUc1QyxNQUFNWCxtQkFBbUI7SUFBRVcsU0FBUztBQUFNO0FBTTFDLFNBQVNKLDRCQUE0QkssSUFBeUI7SUFDbkVDLENBQUFBLEdBQUFBLE9BQUFBLGVBQUFBLEVBQWdCO1FBQ2RILCtCQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSw0QkFBNkJJLHVCQUF1QixDQUFDZDtRQUNyRFksUUFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsS0FBTUUsdUJBQXVCLENBQUNiO1FBQzlCUyw4QkFBOEJFO0lBQ2hDO0FBQ0Y7QUFHTyxTQUFTSixnQ0FBZ0NJLElBQWtCO0lBQ2hFLElBQUlGLGdDQUFnQ0UsTUFBTTtRQUN4Q0YsOEJBQThCO0lBQ2hDO0FBQ0Y7QUFFQSwyRUFBMkU7QUFDM0UsbUVBQW1FO0FBQ25FLE1BQU1LLGVBR0osT0FBT0MsWUFBWSxhQUFhLElBQUlBLFlBQVksSUFBSUM7QUFFdEQsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSwwRUFBMEU7QUFDMUUsaUJBQWlCO0FBQ2pCLE1BQU1DLHlCQUFvRCxJQUFJQztBQUU5RCwwRUFBMEU7QUFDMUUsTUFBTUMsV0FDSixPQUFPQyx5QkFBeUIsYUFDNUIsSUFBSUEscUJBQXFCQyxpQkFBaUI7SUFDeENDLFlBQVk7QUFDZCxLQUNBO0FBRU4sU0FBU0Msa0JBQWtCQyxPQUFnQixFQUFFQyxRQUE4QjtJQUN6RSxNQUFNQyxtQkFBbUJaLGFBQWFhLEdBQUcsQ0FBQ0g7SUFDMUMsSUFBSUUscUJBQXFCRSxXQUFXO1FBQ2xDLDBFQUEwRTtRQUMxRSwyRUFBMkU7UUFDM0UsK0NBQStDO1FBQy9DcEIsNEJBQTRCZ0I7SUFDOUI7SUFDQSwrREFBK0Q7SUFDL0RWLGFBQWFlLEdBQUcsQ0FBQ0wsU0FBU0M7SUFDMUIsSUFBSU4sYUFBYSxNQUFNO1FBQ3JCQSxTQUFTVyxPQUFPLENBQUNOO0lBQ25CO0FBQ0Y7QUFFQSxTQUFTTyxzQkFBc0JDLElBQVk7SUFDekMsSUFBSTtRQUNGLE9BQU9DLENBQUFBLEdBQUFBLFdBQUFBLGlCQUFBQSxFQUFrQkQ7SUFDM0IsRUFBRSxVQUFNO1FBQ04sbUVBQW1FO1FBQ25FLDREQUE0RDtRQUM1RCwwRUFBMEU7UUFDMUUsd0VBQXdFO1FBQ3hFLGdDQUFnQztRQUNoQyxNQUFNRSxnQkFDSixPQUFPQyxnQkFBZ0IsYUFBYUEsY0FBY0MsUUFBUUMsS0FBSztRQUNqRUgsY0FDRyxzQkFBbUJGLE9BQUs7UUFFM0IsT0FBTztJQUNUO0FBQ0Y7QUFFTyxTQUFTOUIsa0JBQ2RzQixPQUFvQixFQUNwQlEsSUFBWSxFQUNaTSxNQUF5QixFQUN6QkMsSUFBMkMsRUFDM0NDLGVBQXdCLEVBQ3hCM0IsdUJBQStEO0lBRS9ELElBQUkyQixpQkFBaUI7UUFDbkIsTUFBTUMsY0FBY1Ysc0JBQXNCQztRQUMxQyxJQUFJUyxnQkFBZ0IsTUFBTTtZQUN4QixNQUFNaEIsV0FBcUM7Z0JBQ3pDYTtnQkFDQUM7Z0JBQ0FHLFdBQVc7Z0JBQ1hDLGNBQWM7Z0JBQ2RDLGNBQWNILFlBQVlULElBQUk7Z0JBQzlCbkI7WUFDRjtZQUNBLGtFQUFrRTtZQUNsRSxpREFBaUQ7WUFDakRVLGtCQUFrQkMsU0FBU0M7WUFDM0IsT0FBT0E7UUFDVDtJQUNGO0lBQ0EseUVBQXlFO0lBQ3pFLG1EQUFtRDtJQUNuRCxNQUFNQSxXQUF3QztRQUM1Q2E7UUFDQUM7UUFDQUcsV0FBVztRQUNYQyxjQUFjO1FBQ2RDLGNBQWM7UUFDZC9CO0lBQ0Y7SUFDQSxPQUFPWTtBQUNUO0FBRU8sU0FBU3hCLGtCQUNkdUIsT0FBd0IsRUFDeEJRLElBQVksRUFDWk0sTUFBeUIsRUFDekJDLElBQTJDO0lBRTNDLE1BQU1FLGNBQWNWLHNCQUFzQkM7SUFDMUMsSUFBSVMsZ0JBQWdCLE1BQU07UUFDeEIsdURBQXVEO1FBQ3ZELDJFQUEyRTtRQUMzRSw0RUFBNEU7UUFDNUUsZ0VBQWdFO1FBQ2hFO0lBQ0Y7SUFDQSxNQUFNaEIsV0FBeUI7UUFDN0JhO1FBQ0FDO1FBQ0FHLFdBQVc7UUFDWEMsY0FBYztRQUNkQyxjQUFjSCxZQUFZVCxJQUFJO1FBQzlCbkIseUJBQXlCO0lBQzNCO0lBQ0FVLGtCQUFrQkMsU0FBU0M7QUFDN0I7QUFFTyxTQUFTakIsNEJBQTRCZ0IsT0FBZ0I7SUFDMUQsTUFBTUMsV0FBV1gsYUFBYWEsR0FBRyxDQUFDSDtJQUNsQyxJQUFJQyxhQUFhRyxXQUFXO1FBQzFCZCxhQUFhK0IsTUFBTSxDQUFDckI7UUFDcEJQLHVCQUF1QjRCLE1BQU0sQ0FBQ3BCO1FBQzlCLE1BQU1rQixlQUFlbEIsU0FBU2tCLFlBQVk7UUFDMUMsSUFBSUEsaUJBQWlCLE1BQU07WUFDekJHLENBQUFBLEdBQUFBLGNBQUFBLGtCQUFBQSxFQUFtQkg7UUFDckI7SUFDRjtJQUNBLElBQUl4QixhQUFhLE1BQU07UUFDckJBLFNBQVM0QixTQUFTLENBQUN2QjtJQUNyQjtBQUNGO0FBRUEsU0FBU0gsZ0JBQWdCMkIsT0FBeUM7SUFDaEUsS0FBSyxNQUFNQyxTQUFTRCxRQUFTO1FBQzNCLGtFQUFrRTtRQUNsRSx5RUFBeUU7UUFDekUsc0NBQXNDO1FBQ3RDLE1BQU1OLFlBQVlPLE1BQU1DLGlCQUFpQixHQUFHO1FBQzVDL0Msd0JBQXdCOEMsTUFBTUUsTUFBTSxFQUF1QlQ7SUFDN0Q7QUFDRjtBQUVPLFNBQVN2Qyx3QkFBd0JxQixPQUFnQixFQUFFa0IsU0FBa0I7SUFDMUUsSUFBSVUsSUFBb0IsRUFBbUI7UUFDekMscUVBQXFFO1FBQ3JFLDBEQUEwRDtRQUMxRCxzQ0FBc0M7UUFDdEM7SUFDRjtJQUVBLE1BQU0zQixXQUFXWCxhQUFhYSxHQUFHLENBQUNIO0lBQ2xDLElBQUlDLGFBQWFHLFdBQVc7UUFDMUI7SUFDRjtJQUVBSCxTQUFTaUIsU0FBUyxHQUFHQTtJQUNyQixJQUFJQSxXQUFXO1FBQ2J6Qix1QkFBdUJzQyxHQUFHLENBQUM5QjtJQUM3QixPQUFPO1FBQ0xSLHVCQUF1QjRCLE1BQU0sQ0FBQ3BCO0lBQ2hDO0lBQ0ErQix1QkFBdUIvQixVQUFVZ0MsY0FBQUEsZ0JBQWdCLENBQUNDLE9BQU87QUFDM0Q7QUFFTyxTQUFTdEQsbUJBQ2RvQixPQUF3QyxFQUN4Q21DLGlDQUEwQztJQUUxQyxNQUFNbEMsV0FBV1gsYUFBYWEsR0FBRyxDQUFDSDtJQUNsQyxJQUFJQyxhQUFhRyxXQUFXO1FBQzFCO0lBQ0Y7SUFDQSx5Q0FBeUM7SUFDekMsSUFBSUgsYUFBYUcsV0FBVztRQUMxQixJQUNFd0IsS0FDaUNPLEVBQ2pDLEVBR0Q7UUFDREgsdUJBQXVCL0IsVUFBVWdDLGNBQUFBLGdCQUFnQixDQUFDTSxNQUFNO0lBQzFEO0FBQ0Y7QUFFQSxTQUFTUCx1QkFDUC9CLFFBQThCLEVBQzlCdUMsUUFBNEQ7SUFFNUQsTUFBTUMsdUJBQXVCeEMsU0FBU2tCLFlBQVk7SUFFbEQsSUFBSSxDQUFDbEIsU0FBU2lCLFNBQVMsRUFBRTtRQUN2QiwwRUFBMEU7UUFDMUUsZUFBZTtRQUNmLElBQUl1Qix5QkFBeUIsTUFBTTtZQUNqQ25CLENBQUFBLEdBQUFBLGNBQUFBLGtCQUFBQSxFQUFtQm1CO1FBQ3JCO1FBQ0Esd0VBQXdFO1FBQ3hFLDRFQUE0RTtRQUM1RSxvRUFBb0U7UUFDcEUsb0RBQW9EO1FBQ3BEO0lBQ0Y7SUFFQSxJQUFJLElBQXdDLEVBQUU7UUFDNUMsMkVBQTJFO1FBQzNFLHFDQUFxQztRQUNyQ0UsbUNBQW1DMUM7UUFDbkM7SUFDRjtJQUVBLE1BQU0yQyxpQkFBaUJDLENBQUFBLEdBQUFBLG1CQUFBQSx3QkFBQUE7SUFDdkIsSUFBSUQsbUJBQW1CLE1BQU07UUFDM0IsTUFBTUUsdUJBQXVCRixlQUFlRyxJQUFJO1FBQ2hELElBQUlOLHlCQUF5QixNQUFNO1lBQ2pDLDRCQUE0QjtZQUM1QixNQUFNTyxVQUFVSixlQUFlSSxPQUFPO1lBQ3RDLE1BQU1DLFdBQVdDLENBQUFBLEdBQUFBLGNBQUFBLGNBQUFBLEVBQWVqRCxTQUFTbUIsWUFBWSxFQUFFNEI7WUFDdkQvQyxTQUFTa0IsWUFBWSxHQUFHZ0MsQ0FBQUEsR0FBQUEsY0FBQUEsb0JBQUFBLEVBQ3RCRixVQUNBSCxzQkFDQTdDLFNBQVNjLElBQUksS0FBS3NCLG9CQUFBQSxZQUFZLENBQUNDLElBQUksRUFDbkNFLFVBQ0E7UUFFSixPQUFPO1lBQ0wscUVBQXFFO1lBQ3JFLHlFQUF5RTtZQUN6RVksQ0FBQUEsR0FBQUEsY0FBQUEsc0JBQUFBLEVBQ0VYLHNCQUNBSyxzQkFDQTdDLFNBQVNjLElBQUksS0FBS3NCLG9CQUFBQSxZQUFZLENBQUNDLElBQUksRUFDbkNFO1FBRUo7SUFDRjtBQUNGO0FBRU8sU0FBUzNELGlCQUNkbUUsT0FBc0IsRUFDdEJELElBQXVCO0lBRXZCLDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFDN0UsdURBQXVEO0lBQ3ZELEVBQUU7SUFDRix5RUFBeUU7SUFDekUscUVBQXFFO0lBQ3JFLHNCQUFzQjtJQUN0QixLQUFLLE1BQU05QyxZQUFZUix1QkFBd0I7UUFDN0MsTUFBTTRELE9BQU9wRCxTQUFTa0IsWUFBWTtRQUNsQyxJQUFJa0MsU0FBUyxRQUFRLENBQUNDLENBQUFBLEdBQUFBLGNBQUFBLG1CQUFBQSxFQUFvQkQsTUFBTUwsU0FBU0QsT0FBTztZQUc5RDtRQUNGO1FBQ0Esc0VBQXNFO1FBQ3RFLFdBQVc7UUFDWCxJQUFJTSxTQUFTLE1BQU07WUFDakIvQixDQUFBQSxHQUFBQSxjQUFBQSxrQkFBQUEsRUFBbUIrQjtRQUNyQjtRQUNBLE1BQU1KLFdBQVdDLENBQUFBLEdBQUFBLGNBQUFBLGNBQUFBLEVBQWVqRCxTQUFTbUIsWUFBWSxFQUFFNEI7UUFDdkQvQyxTQUFTa0IsWUFBWSxHQUFHZ0MsQ0FBQUEsR0FBQUEsY0FBQUEsb0JBQUFBLEVBQ3RCRixVQUNBRixNQUNBOUMsU0FBU2MsSUFBSSxLQUFLc0Isb0JBQUFBLFlBQVksQ0FBQ0MsSUFBSSxFQUNuQ0wsY0FBQUEsZ0JBQWdCLENBQUNDLE9BQU8sRUFDeEI7SUFFSjtBQUNGO0FBRUEsU0FBU1MsbUNBQW1DMUMsUUFBOEI7SUFDeEUsK0RBQStEO0lBQy9ELElBQUksS0FBNkIsRUFBRSxFQUVsQztJQUVELE1BQU11RCxhQUFhO1FBQ2pCLHNEQUFzRDtRQUN0RCx3RkFBd0Y7UUFDeEYsT0FBT3ZELFNBQVNhLE1BQU0sQ0FBQzJDLFFBQVEsQ0FBQ3hELFNBQVNtQixZQUFZLEVBQUU7WUFDckRMLE1BQU1kLFNBQVNjLElBQUk7UUFDckI7SUFDRjtJQUVBLGtEQUFrRDtJQUNsRCwwREFBMEQ7SUFDMUQsc0RBQXNEO0lBQ3RELHlEQUF5RDtJQUN6RHlDLGFBQWFFLEtBQUssQ0FBQyxDQUFDQztRQUNsQixJQXZNWWxGLElBdU1ZLEVBQW1CO1lBQ3pDLHFDQUFxQztZQUNyQyxNQUFNa0Y7UUFDUjtJQUNGO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL2NsaWVudC9jb21wb25lbnRzL2xpbmtzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmxpZ2h0Um91dGVyU3RhdGUgfSBmcm9tICcuLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcbmltcG9ydCB0eXBlIHsgQXBwUm91dGVySW5zdGFuY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IGdldEN1cnJlbnRBcHBSb3V0ZXJTdGF0ZSB9IGZyb20gJy4vYXBwLXJvdXRlci1pbnN0YW5jZSdcbmltcG9ydCB7IGNyZWF0ZVByZWZldGNoVVJMIH0gZnJvbSAnLi9hcHAtcm91dGVyJ1xuaW1wb3J0IHsgUHJlZmV0Y2hLaW5kIH0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci9yb3V0ZXItcmVkdWNlci10eXBlcydcbmltcG9ydCB7IGlzUHJlZmV0Y2hUYXNrRGlydHkgfSBmcm9tICcuL3NlZ21lbnQtY2FjaGUnXG5pbXBvcnQgeyBjcmVhdGVDYWNoZUtleSB9IGZyb20gJy4vc2VnbWVudC1jYWNoZSdcbmltcG9ydCB7XG4gIHR5cGUgUHJlZmV0Y2hUYXNrLFxuICBQcmVmZXRjaFByaW9yaXR5LFxuICBzY2hlZHVsZVByZWZldGNoVGFzayBhcyBzY2hlZHVsZVNlZ21lbnRQcmVmZXRjaFRhc2ssXG4gIGNhbmNlbFByZWZldGNoVGFzayxcbiAgcmVzY2hlZHVsZVByZWZldGNoVGFzayxcbn0gZnJvbSAnLi9zZWdtZW50LWNhY2hlJ1xuaW1wb3J0IHsgc3RhcnRUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QnXG5cbnR5cGUgTGlua0VsZW1lbnQgPSBIVE1MQW5jaG9yRWxlbWVudCB8IFNWR0FFbGVtZW50XG5cbnR5cGUgRWxlbWVudCA9IExpbmtFbGVtZW50IHwgSFRNTEZvcm1FbGVtZW50XG5cbi8vIFByb3BlcnRpZXMgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gTGluayBhbmQgRm9ybSBpbnN0YW5jZXMuIFdlIHVzZSB0aGUgc2FtZVxuLy8gc2hhcGUgZm9yIGJvdGggdG8gcHJldmVudCBhIHBvbHltb3JwaGljIGRlLW9wdCBpbiB0aGUgVk0uXG50eXBlIExpbmtPckZvcm1JbnN0YW5jZVNoYXJlZCA9IHtcbiAgcm91dGVyOiBBcHBSb3V0ZXJJbnN0YW5jZVxuICBraW5kOiBQcmVmZXRjaEtpbmQuQVVUTyB8IFByZWZldGNoS2luZC5GVUxMXG5cbiAgaXNWaXNpYmxlOiBib29sZWFuXG5cbiAgLy8gVGhlIG1vc3QgcmVjZW50bHkgaW5pdGlhdGVkIHByZWZldGNoIHRhc2suIEl0IG1heSBvciBtYXkgbm90IGhhdmVcbiAgLy8gYWxyZWFkeSBjb21wbGV0ZWQuIFRoZSBzYW1lIHByZWZldGNoIHRhc2sgb2JqZWN0IGNhbiBiZSByZXVzZWQgYWNyb3NzXG4gIC8vIG11bHRpcGxlIHByZWZldGNoZXMgb2YgdGhlIHNhbWUgbGluay5cbiAgcHJlZmV0Y2hUYXNrOiBQcmVmZXRjaFRhc2sgfCBudWxsXG59XG5cbmV4cG9ydCB0eXBlIEZvcm1JbnN0YW5jZSA9IExpbmtPckZvcm1JbnN0YW5jZVNoYXJlZCAmIHtcbiAgcHJlZmV0Y2hIcmVmOiBzdHJpbmdcbiAgc2V0T3B0aW1pc3RpY0xpbmtTdGF0dXM6IG51bGxcbn1cblxudHlwZSBQcmVmZXRjaGFibGVMaW5rSW5zdGFuY2UgPSBMaW5rT3JGb3JtSW5zdGFuY2VTaGFyZWQgJiB7XG4gIHByZWZldGNoSHJlZjogc3RyaW5nXG4gIHNldE9wdGltaXN0aWNMaW5rU3RhdHVzOiAoc3RhdHVzOiB7IHBlbmRpbmc6IGJvb2xlYW4gfSkgPT4gdm9pZFxufVxuXG50eXBlIE5vblByZWZldGNoYWJsZUxpbmtJbnN0YW5jZSA9IExpbmtPckZvcm1JbnN0YW5jZVNoYXJlZCAmIHtcbiAgcHJlZmV0Y2hIcmVmOiBudWxsXG4gIHNldE9wdGltaXN0aWNMaW5rU3RhdHVzOiAoc3RhdHVzOiB7IHBlbmRpbmc6IGJvb2xlYW4gfSkgPT4gdm9pZFxufVxuXG50eXBlIFByZWZldGNoYWJsZUluc3RhbmNlID0gUHJlZmV0Y2hhYmxlTGlua0luc3RhbmNlIHwgRm9ybUluc3RhbmNlXG5cbmV4cG9ydCB0eXBlIExpbmtJbnN0YW5jZSA9XG4gIHwgUHJlZmV0Y2hhYmxlTGlua0luc3RhbmNlXG4gIHwgTm9uUHJlZmV0Y2hhYmxlTGlua0luc3RhbmNlXG5cbi8vIFRyYWNrcyB0aGUgbW9zdCByZWNlbnRseSBuYXZpZ2F0ZWQgbGluayBpbnN0YW5jZS4gV2hlbiBudWxsLCBpbmRpY2F0ZXNcbi8vIHRoZSBjdXJyZW50IG5hdmlnYXRpb24gd2FzIG5vdCBpbml0aWF0ZWQgYnkgYSBsaW5rIGNsaWNrLlxubGV0IGxpbmtGb3JNb3N0UmVjZW50TmF2aWdhdGlvbjogTGlua0luc3RhbmNlIHwgbnVsbCA9IG51bGxcblxuLy8gU3RhdHVzIG9iamVjdCBpbmRpY2F0aW5nIGxpbmsgaXMgcGVuZGluZ1xuZXhwb3J0IGNvbnN0IFBFTkRJTkdfTElOS19TVEFUVVMgPSB7IHBlbmRpbmc6IHRydWUgfVxuXG4vLyBTdGF0dXMgb2JqZWN0IGluZGljYXRpbmcgbGluayBpcyBpZGxlXG5leHBvcnQgY29uc3QgSURMRV9MSU5LX1NUQVRVUyA9IHsgcGVuZGluZzogZmFsc2UgfVxuXG4vLyBVcGRhdGVzIHRoZSBsb2FkaW5nIHN0YXRlIHdoZW4gbmF2aWdhdGluZyBiZXR3ZWVuIGxpbmtzXG4vLyAtIFJlc2V0cyB0aGUgcHJldmlvdXMgbGluaydzIGxvYWRpbmcgc3RhdGVcbi8vIC0gU2V0cyB0aGUgbmV3IGxpbmsncyBsb2FkaW5nIHN0YXRlXG4vLyAtIFVwZGF0ZXMgdHJhY2tpbmcgb2YgY3VycmVudCBuYXZpZ2F0aW9uXG5leHBvcnQgZnVuY3Rpb24gc2V0TGlua0ZvckN1cnJlbnROYXZpZ2F0aW9uKGxpbms6IExpbmtJbnN0YW5jZSB8IG51bGwpIHtcbiAgc3RhcnRUcmFuc2l0aW9uKCgpID0+IHtcbiAgICBsaW5rRm9yTW9zdFJlY2VudE5hdmlnYXRpb24/LnNldE9wdGltaXN0aWNMaW5rU3RhdHVzKElETEVfTElOS19TVEFUVVMpXG4gICAgbGluaz8uc2V0T3B0aW1pc3RpY0xpbmtTdGF0dXMoUEVORElOR19MSU5LX1NUQVRVUylcbiAgICBsaW5rRm9yTW9zdFJlY2VudE5hdmlnYXRpb24gPSBsaW5rXG4gIH0pXG59XG5cbi8vIFVubW91bnRzIHRoZSBjdXJyZW50IGxpbmsgaW5zdGFuY2UgZnJvbSBuYXZpZ2F0aW9uIHRyYWNraW5nXG5leHBvcnQgZnVuY3Rpb24gdW5tb3VudExpbmtGb3JDdXJyZW50TmF2aWdhdGlvbihsaW5rOiBMaW5rSW5zdGFuY2UpIHtcbiAgaWYgKGxpbmtGb3JNb3N0UmVjZW50TmF2aWdhdGlvbiA9PT0gbGluaykge1xuICAgIGxpbmtGb3JNb3N0UmVjZW50TmF2aWdhdGlvbiA9IG51bGxcbiAgfVxufVxuXG4vLyBVc2UgYSBXZWFrTWFwIHRvIGFzc29jaWF0ZSBhIExpbmsgaW5zdGFuY2Ugd2l0aCBpdHMgRE9NIGVsZW1lbnQuIFRoaXMgaXNcbi8vIHVzZWQgYnkgdGhlIEludGVyc2VjdGlvbk9ic2VydmVyIHRvIHRyYWNrIHRoZSBsaW5rJ3MgdmlzaWJpbGl0eS5cbmNvbnN0IHByZWZldGNoYWJsZTpcbiAgfCBXZWFrTWFwPEVsZW1lbnQsIFByZWZldGNoYWJsZUluc3RhbmNlPlxuICB8IE1hcDxFbGVtZW50LCBQcmVmZXRjaGFibGVJbnN0YW5jZT4gPVxuICB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBXZWFrTWFwKCkgOiBuZXcgTWFwKClcblxuLy8gQSBTZXQgb2YgdGhlIGN1cnJlbnRseSB2aXNpYmxlIGxpbmtzLiBXZSByZS1wcmVmZXRjaCB2aXNpYmxlIGxpbmtzIGFmdGVyIGFcbi8vIGNhY2hlIGludmFsaWRhdGlvbiwgb3Igd2hlbiB0aGUgY3VycmVudCBVUkwgY2hhbmdlcy4gSXQncyBhIHNlcGFyYXRlIGRhdGFcbi8vIHN0cnVjdHVyZSBmcm9tIHRoZSBXZWFrTWFwIGFib3ZlIGJlY2F1c2Ugb25seSB0aGUgdmlzaWJsZSBsaW5rcyBuZWVkIHRvXG4vLyBiZSBlbnVtZXJhdGVkLlxuY29uc3QgcHJlZmV0Y2hhYmxlQW5kVmlzaWJsZTogU2V0PFByZWZldGNoYWJsZUluc3RhbmNlPiA9IG5ldyBTZXQoKVxuXG4vLyBBIHNpbmdsZSBJbnRlcnNlY3Rpb25PYnNlcnZlciBpbnN0YW5jZSBzaGFyZWQgYnkgYWxsIDxMaW5rPiBjb21wb25lbnRzLlxuY29uc3Qgb2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbCA9XG4gIHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZUludGVyc2VjdCwge1xuICAgICAgICByb290TWFyZ2luOiAnMjAwcHgnLFxuICAgICAgfSlcbiAgICA6IG51bGxcblxuZnVuY3Rpb24gb2JzZXJ2ZVZpc2liaWxpdHkoZWxlbWVudDogRWxlbWVudCwgaW5zdGFuY2U6IFByZWZldGNoYWJsZUluc3RhbmNlKSB7XG4gIGNvbnN0IGV4aXN0aW5nSW5zdGFuY2UgPSBwcmVmZXRjaGFibGUuZ2V0KGVsZW1lbnQpXG4gIGlmIChleGlzdGluZ0luc3RhbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYmVjYXVzZSBlYWNoIDxMaW5rPiBjb21wb25lbnQgc2hvdWxkIGhhdmUgaXRzIG93blxuICAgIC8vIGFuY2hvciB0YWcgaW5zdGFuY2UsIGJ1dCBpdCdzIGRlZmVuc2l2ZSBjb2RpbmcgdG8gYXZvaWQgYSBtZW1vcnkgbGVhayBpblxuICAgIC8vIGNhc2UgdGhlcmUncyBhIGxvZ2ljYWwgZXJyb3Igc29tZXdoZXJlIGVsc2UuXG4gICAgdW5tb3VudFByZWZldGNoYWJsZUluc3RhbmNlKGVsZW1lbnQpXG4gIH1cbiAgLy8gT25seSB0cmFjayBwcmVmZXRjaGFibGUgbGlua3MgdGhhdCBoYXZlIGEgdmFsaWQgcHJlZmV0Y2ggVVJMXG4gIHByZWZldGNoYWJsZS5zZXQoZWxlbWVudCwgaW5zdGFuY2UpXG4gIGlmIChvYnNlcnZlciAhPT0gbnVsbCkge1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudClcbiAgfVxufVxuXG5mdW5jdGlvbiBjb2VyY2VQcmVmZXRjaGFibGVVcmwoaHJlZjogc3RyaW5nKTogVVJMIHwgbnVsbCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNyZWF0ZVByZWZldGNoVVJMKGhyZWYpXG4gIH0gY2F0Y2gge1xuICAgIC8vIGNyZWF0ZVByZWZldGNoVVJMIHNvbWV0aW1lcyB0aHJvd3MgYW4gZXJyb3IgaWYgYW4gaW52YWxpZCBVUkwgaXNcbiAgICAvLyBwcm92aWRlZCwgdGhvdWdoIEknbSBub3Qgc3VyZSBpZiBpdCdzIGFjdHVhbGx5IG5lY2Vzc2FyeS5cbiAgICAvLyBUT0RPOiBDb25zaWRlciByZW1vdmluZyB0aGUgdGhyb3cgZnJvbSB0aGUgaW5uZXIgZnVuY3Rpb24sIG9yIGNoYW5nZSBpdFxuICAgIC8vIHRvIHJlcG9ydEVycm9yLiBPciBtYXliZSB0aGUgZXJyb3IgaXNuJ3QgZXZlbiBuZWNlc3NhcnkgZm9yIGF1dG9tYXRpY1xuICAgIC8vIHByZWZldGNoZXMsIGp1c3QgbmF2aWdhdGlvbnMuXG4gICAgY29uc3QgcmVwb3J0RXJyb3JGbiA9XG4gICAgICB0eXBlb2YgcmVwb3J0RXJyb3IgPT09ICdmdW5jdGlvbicgPyByZXBvcnRFcnJvciA6IGNvbnNvbGUuZXJyb3JcbiAgICByZXBvcnRFcnJvckZuKFxuICAgICAgYENhbm5vdCBwcmVmZXRjaCAnJHtocmVmfScgYmVjYXVzZSBpdCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgVVJMLmBcbiAgICApXG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbW91bnRMaW5rSW5zdGFuY2UoXG4gIGVsZW1lbnQ6IExpbmtFbGVtZW50LFxuICBocmVmOiBzdHJpbmcsXG4gIHJvdXRlcjogQXBwUm91dGVySW5zdGFuY2UsXG4gIGtpbmQ6IFByZWZldGNoS2luZC5BVVRPIHwgUHJlZmV0Y2hLaW5kLkZVTEwsXG4gIHByZWZldGNoRW5hYmxlZDogYm9vbGVhbixcbiAgc2V0T3B0aW1pc3RpY0xpbmtTdGF0dXM6IChzdGF0dXM6IHsgcGVuZGluZzogYm9vbGVhbiB9KSA9PiB2b2lkXG4pOiBMaW5rSW5zdGFuY2Uge1xuICBpZiAocHJlZmV0Y2hFbmFibGVkKSB7XG4gICAgY29uc3QgcHJlZmV0Y2hVUkwgPSBjb2VyY2VQcmVmZXRjaGFibGVVcmwoaHJlZilcbiAgICBpZiAocHJlZmV0Y2hVUkwgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlOiBQcmVmZXRjaGFibGVMaW5rSW5zdGFuY2UgPSB7XG4gICAgICAgIHJvdXRlcixcbiAgICAgICAga2luZCxcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZSxcbiAgICAgICAgcHJlZmV0Y2hUYXNrOiBudWxsLFxuICAgICAgICBwcmVmZXRjaEhyZWY6IHByZWZldGNoVVJMLmhyZWYsXG4gICAgICAgIHNldE9wdGltaXN0aWNMaW5rU3RhdHVzLFxuICAgICAgfVxuICAgICAgLy8gV2Ugb25seSBvYnNlcnZlIHRoZSBsaW5rJ3MgdmlzaWJpbGl0eSBpZiBpdCdzIHByZWZldGNoYWJsZS4gRm9yXG4gICAgICAvLyBleGFtcGxlLCB0aGlzIGV4Y2x1ZGVzIGxpbmtzIHRvIGV4dGVybmFsIFVSTHMuXG4gICAgICBvYnNlcnZlVmlzaWJpbGl0eShlbGVtZW50LCBpbnN0YW5jZSlcbiAgICAgIHJldHVybiBpbnN0YW5jZVxuICAgIH1cbiAgfVxuICAvLyBJZiB0aGUgbGluayBpcyBub3QgcHJlZmV0Y2hhYmxlLCB3ZSBzdGlsbCBjcmVhdGUgYW4gaW5zdGFuY2Ugc28gd2UgY2FuXG4gIC8vIHRyYWNrIGl0cyBvcHRpbWlzdGljIHN0YXRlIChpLmUuIHVzZUxpbmtTdGF0dXMpLlxuICBjb25zdCBpbnN0YW5jZTogTm9uUHJlZmV0Y2hhYmxlTGlua0luc3RhbmNlID0ge1xuICAgIHJvdXRlcixcbiAgICBraW5kLFxuICAgIGlzVmlzaWJsZTogZmFsc2UsXG4gICAgcHJlZmV0Y2hUYXNrOiBudWxsLFxuICAgIHByZWZldGNoSHJlZjogbnVsbCxcbiAgICBzZXRPcHRpbWlzdGljTGlua1N0YXR1cyxcbiAgfVxuICByZXR1cm4gaW5zdGFuY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vdW50Rm9ybUluc3RhbmNlKFxuICBlbGVtZW50OiBIVE1MRm9ybUVsZW1lbnQsXG4gIGhyZWY6IHN0cmluZyxcbiAgcm91dGVyOiBBcHBSb3V0ZXJJbnN0YW5jZSxcbiAga2luZDogUHJlZmV0Y2hLaW5kLkFVVE8gfCBQcmVmZXRjaEtpbmQuRlVMTFxuKTogdm9pZCB7XG4gIGNvbnN0IHByZWZldGNoVVJMID0gY29lcmNlUHJlZmV0Y2hhYmxlVXJsKGhyZWYpXG4gIGlmIChwcmVmZXRjaFVSTCA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaHJlZiBpcyBub3QgcHJlZmV0Y2hhYmxlLCBzbyB3ZSBkb24ndCB0cmFjayBpdC5cbiAgICAvLyBUT0RPOiBXZSBjdXJyZW50bHkgb2JzZXJ2ZS91bm9ic2VydmUgYSBmb3JtIGV2ZXJ5IHRpbWUgaXRzIGhyZWYgY2hhbmdlcy5cbiAgICAvLyBGb3IgTGlua3MsIHRoaXMgaXNuJ3QgYSBiaWcgZGVhbCBiZWNhdXNlIHRoZSBocmVmIGRvZXNuJ3QgdXN1YWxseSBjaGFuZ2UsXG4gICAgLy8gYnV0IGZvciBmb3JtcyBpdCdzIGV4dHJlbWVseSBjb21tb24uIFdlIHNob3VsZCBvcHRpbWl6ZSB0aGlzLlxuICAgIHJldHVyblxuICB9XG4gIGNvbnN0IGluc3RhbmNlOiBGb3JtSW5zdGFuY2UgPSB7XG4gICAgcm91dGVyLFxuICAgIGtpbmQsXG4gICAgaXNWaXNpYmxlOiBmYWxzZSxcbiAgICBwcmVmZXRjaFRhc2s6IG51bGwsXG4gICAgcHJlZmV0Y2hIcmVmOiBwcmVmZXRjaFVSTC5ocmVmLFxuICAgIHNldE9wdGltaXN0aWNMaW5rU3RhdHVzOiBudWxsLFxuICB9XG4gIG9ic2VydmVWaXNpYmlsaXR5KGVsZW1lbnQsIGluc3RhbmNlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5tb3VudFByZWZldGNoYWJsZUluc3RhbmNlKGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgY29uc3QgaW5zdGFuY2UgPSBwcmVmZXRjaGFibGUuZ2V0KGVsZW1lbnQpXG4gIGlmIChpbnN0YW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcHJlZmV0Y2hhYmxlLmRlbGV0ZShlbGVtZW50KVxuICAgIHByZWZldGNoYWJsZUFuZFZpc2libGUuZGVsZXRlKGluc3RhbmNlKVxuICAgIGNvbnN0IHByZWZldGNoVGFzayA9IGluc3RhbmNlLnByZWZldGNoVGFza1xuICAgIGlmIChwcmVmZXRjaFRhc2sgIT09IG51bGwpIHtcbiAgICAgIGNhbmNlbFByZWZldGNoVGFzayhwcmVmZXRjaFRhc2spXG4gICAgfVxuICB9XG4gIGlmIChvYnNlcnZlciAhPT0gbnVsbCkge1xuICAgIG9ic2VydmVyLnVub2JzZXJ2ZShlbGVtZW50KVxuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUludGVyc2VjdChlbnRyaWVzOiBBcnJheTxJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5Pikge1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAvLyBTb21lIGV4dHJlbWVseSBvbGQgYnJvd3NlcnMgb3IgcG9seWZpbGxzIGRvbid0IHJlbGlhYmx5IHN1cHBvcnRcbiAgICAvLyBpc0ludGVyc2VjdGluZyBzbyB3ZSBjaGVjayBpbnRlcnNlY3Rpb25SYXRpbyBpbnN0ZWFkLiAoRG8gd2UgY2FyZT8gTm90XG4gICAgLy8gcmVhbGx5LiBCdXQgd2hhdGV2ZXIgdGhpcyBpcyBmaW5lLilcbiAgICBjb25zdCBpc1Zpc2libGUgPSBlbnRyeS5pbnRlcnNlY3Rpb25SYXRpbyA+IDBcbiAgICBvbkxpbmtWaXNpYmlsaXR5Q2hhbmdlZChlbnRyeS50YXJnZXQgYXMgSFRNTEFuY2hvckVsZW1lbnQsIGlzVmlzaWJsZSlcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb25MaW5rVmlzaWJpbGl0eUNoYW5nZWQoZWxlbWVudDogRWxlbWVudCwgaXNWaXNpYmxlOiBib29sZWFuKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gUHJlZmV0Y2hpbmcgb24gdmlld3BvcnQgaXMgZGlzYWJsZWQgaW4gZGV2ZWxvcG1lbnQgZm9yIHBlcmZvcm1hbmNlXG4gICAgLy8gcmVhc29ucywgYmVjYXVzZSBpdCByZXF1aXJlcyBjb21waWxpbmcgdGhlIHRhcmdldCBwYWdlLlxuICAgIC8vIFRPRE86IEludmVzdGlnYXRlIHJlLWVuYWJsaW5nIHRoaXMuXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBpbnN0YW5jZSA9IHByZWZldGNoYWJsZS5nZXQoZWxlbWVudClcbiAgaWYgKGluc3RhbmNlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGluc3RhbmNlLmlzVmlzaWJsZSA9IGlzVmlzaWJsZVxuICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgcHJlZmV0Y2hhYmxlQW5kVmlzaWJsZS5hZGQoaW5zdGFuY2UpXG4gIH0gZWxzZSB7XG4gICAgcHJlZmV0Y2hhYmxlQW5kVmlzaWJsZS5kZWxldGUoaW5zdGFuY2UpXG4gIH1cbiAgcmVzY2hlZHVsZUxpbmtQcmVmZXRjaChpbnN0YW5jZSwgUHJlZmV0Y2hQcmlvcml0eS5EZWZhdWx0KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb25OYXZpZ2F0aW9uSW50ZW50KFxuICBlbGVtZW50OiBIVE1MQW5jaG9yRWxlbWVudCB8IFNWR0FFbGVtZW50LFxuICB1bnN0YWJsZV91cGdyYWRlVG9EeW5hbWljUHJlZmV0Y2g6IGJvb2xlYW5cbikge1xuICBjb25zdCBpbnN0YW5jZSA9IHByZWZldGNoYWJsZS5nZXQoZWxlbWVudClcbiAgaWYgKGluc3RhbmNlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm5cbiAgfVxuICAvLyBQcmVmZXRjaCB0aGUgbGluayBvbiBob3Zlci90b3VjaHN0YXJ0LlxuICBpZiAoaW5zdGFuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChcbiAgICAgIHByb2Nlc3MuZW52Ll9fTkVYVF9EWU5BTUlDX09OX0hPVkVSICYmXG4gICAgICB1bnN0YWJsZV91cGdyYWRlVG9EeW5hbWljUHJlZmV0Y2hcbiAgICApIHtcbiAgICAgIC8vIFN3aXRjaCB0byBhIGZ1bGwsIGR5bmFtaWMgcHJlZmV0Y2hcbiAgICAgIGluc3RhbmNlLmtpbmQgPSBQcmVmZXRjaEtpbmQuRlVMTFxuICAgIH1cbiAgICByZXNjaGVkdWxlTGlua1ByZWZldGNoKGluc3RhbmNlLCBQcmVmZXRjaFByaW9yaXR5LkludGVudClcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNjaGVkdWxlTGlua1ByZWZldGNoKFxuICBpbnN0YW5jZTogUHJlZmV0Y2hhYmxlSW5zdGFuY2UsXG4gIHByaW9yaXR5OiBQcmVmZXRjaFByaW9yaXR5LkRlZmF1bHQgfCBQcmVmZXRjaFByaW9yaXR5LkludGVudFxuKSB7XG4gIGNvbnN0IGV4aXN0aW5nUHJlZmV0Y2hUYXNrID0gaW5zdGFuY2UucHJlZmV0Y2hUYXNrXG5cbiAgaWYgKCFpbnN0YW5jZS5pc1Zpc2libGUpIHtcbiAgICAvLyBDYW5jZWwgYW55IGluLXByb2dyZXNzIHByZWZldGNoIHRhc2suIChJZiBpdCBhbHJlYWR5IGZpbmlzaGVkIHRoZW4gdGhpc1xuICAgIC8vIGlzIGEgbm8tb3AuKVxuICAgIGlmIChleGlzdGluZ1ByZWZldGNoVGFzayAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsUHJlZmV0Y2hUYXNrKGV4aXN0aW5nUHJlZmV0Y2hUYXNrKVxuICAgIH1cbiAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHJlc2V0IHRoZSBwcmVmZXRjaFRhc2sgdG8gbnVsbCB1cG9uIGNhbmNlbGxhdGlvbjsgYW5cbiAgICAvLyBvbGQgdGFzayBvYmplY3QgY2FuIGJlIHJlc2NoZWR1bGVkIHdpdGggcmVzY2hlZHVsZVByZWZldGNoVGFzay4gVGhpcyBpcyBhXG4gICAgLy8gbWljcm8tb3B0aW1pemF0aW9uIGJ1dCBhbHNvIG1ha2VzIHRoZSBjb2RlIHNpbXBsZXIgKGRvbid0IG5lZWQgdG9cbiAgICAvLyB3b3JyeSBhYm91dCB3aGV0aGVyIGFuIG9sZCB0YXNrIG9iamVjdCBpcyBzdGFsZSkuXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoIXByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRSkge1xuICAgIC8vIFRoZSBvbGQgcHJlZmV0Y2ggaW1wbGVtZW50YXRpb24gZG9lcyBub3QgaGF2ZSBkaWZmZXJlbnQgcHJpb3JpdHkgbGV2ZWxzLlxuICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBuZXcgcHJlZmV0Y2ggdGFzay5cbiAgICBwcmVmZXRjaFdpdGhPbGRDYWNoZUltcGxlbWVudGF0aW9uKGluc3RhbmNlKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgYXBwUm91dGVyU3RhdGUgPSBnZXRDdXJyZW50QXBwUm91dGVyU3RhdGUoKVxuICBpZiAoYXBwUm91dGVyU3RhdGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmVlQXRUaW1lT2ZQcmVmZXRjaCA9IGFwcFJvdXRlclN0YXRlLnRyZWVcbiAgICBpZiAoZXhpc3RpbmdQcmVmZXRjaFRhc2sgPT09IG51bGwpIHtcbiAgICAgIC8vIEluaXRpYXRlIGEgcHJlZmV0Y2ggdGFzay5cbiAgICAgIGNvbnN0IG5leHRVcmwgPSBhcHBSb3V0ZXJTdGF0ZS5uZXh0VXJsXG4gICAgICBjb25zdCBjYWNoZUtleSA9IGNyZWF0ZUNhY2hlS2V5KGluc3RhbmNlLnByZWZldGNoSHJlZiwgbmV4dFVybClcbiAgICAgIGluc3RhbmNlLnByZWZldGNoVGFzayA9IHNjaGVkdWxlU2VnbWVudFByZWZldGNoVGFzayhcbiAgICAgICAgY2FjaGVLZXksXG4gICAgICAgIHRyZWVBdFRpbWVPZlByZWZldGNoLFxuICAgICAgICBpbnN0YW5jZS5raW5kID09PSBQcmVmZXRjaEtpbmQuRlVMTCxcbiAgICAgICAgcHJpb3JpdHksXG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIG9sZCB0YXNrIG9iamVjdCB0aGF0IHdlIGNhbiByZXNjaGVkdWxlLiBUaGlzIGlzXG4gICAgICAvLyBlZmZlY3RpdmVseSB0aGUgc2FtZSBhcyBjYW5jZWxpbmcgdGhlIG9sZCB0YXNrIGFuZCBjcmVhdGluZyBhIG5ldyBvbmUuXG4gICAgICByZXNjaGVkdWxlUHJlZmV0Y2hUYXNrKFxuICAgICAgICBleGlzdGluZ1ByZWZldGNoVGFzayxcbiAgICAgICAgdHJlZUF0VGltZU9mUHJlZmV0Y2gsXG4gICAgICAgIGluc3RhbmNlLmtpbmQgPT09IFByZWZldGNoS2luZC5GVUxMLFxuICAgICAgICBwcmlvcml0eVxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGluZ1Zpc2libGVMaW5rcyhcbiAgbmV4dFVybDogc3RyaW5nIHwgbnVsbCxcbiAgdHJlZTogRmxpZ2h0Um91dGVyU3RhdGVcbikge1xuICAvLyBGb3IgZWFjaCBjdXJyZW50bHkgdmlzaWJsZSBsaW5rLCBjYW5jZWwgdGhlIGV4aXN0aW5nIHByZWZldGNoIHRhc2sgKGlmIGl0XG4gIC8vIGV4aXN0cykgYW5kIHNjaGVkdWxlIGEgbmV3IG9uZS4gVGhpcyBpcyBlZmZlY3RpdmVseSB0aGUgc2FtZSBhcyBpZiBhbGwgdGhlXG4gIC8vIHZpc2libGUgbGlua3MgbGVmdCBhbmQgdGhlbiByZS1lbnRlcmVkIHRoZSB2aWV3cG9ydC5cbiAgLy9cbiAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgTmV4dC1Vcmwgb3IgdGhlIGJhc2UgdHJlZSBjaGFuZ2VzLCBzaW5jZSB0aG9zZVxuICAvLyBtYXkgYWZmZWN0IHRoZSByZXN1bHQgb2YgYSBwcmVmZXRjaCB0YXNrLiBJdCdzIGFsc28gY2FsbGVkIGFmdGVyIGFcbiAgLy8gY2FjaGUgaW52YWxpZGF0aW9uLlxuICBmb3IgKGNvbnN0IGluc3RhbmNlIG9mIHByZWZldGNoYWJsZUFuZFZpc2libGUpIHtcbiAgICBjb25zdCB0YXNrID0gaW5zdGFuY2UucHJlZmV0Y2hUYXNrXG4gICAgaWYgKHRhc2sgIT09IG51bGwgJiYgIWlzUHJlZmV0Y2hUYXNrRGlydHkodGFzaywgbmV4dFVybCwgdHJlZSkpIHtcbiAgICAgIC8vIFRoZSBjYWNoZSBoYXMgbm90IGJlZW4gaW52YWxpZGF0ZWQsIGFuZCBub25lIG9mIHRoZSBpbnB1dHMgaGF2ZVxuICAgICAgLy8gY2hhbmdlZC4gQmFpbCBvdXQuXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICAvLyBTb21ldGhpbmcgY2hhbmdlZC4gQ2FuY2VsIHRoZSBleGlzdGluZyBwcmVmZXRjaCB0YXNrIGFuZCBzY2hlZHVsZSBhXG4gICAgLy8gbmV3IG9uZS5cbiAgICBpZiAodGFzayAhPT0gbnVsbCkge1xuICAgICAgY2FuY2VsUHJlZmV0Y2hUYXNrKHRhc2spXG4gICAgfVxuICAgIGNvbnN0IGNhY2hlS2V5ID0gY3JlYXRlQ2FjaGVLZXkoaW5zdGFuY2UucHJlZmV0Y2hIcmVmLCBuZXh0VXJsKVxuICAgIGluc3RhbmNlLnByZWZldGNoVGFzayA9IHNjaGVkdWxlU2VnbWVudFByZWZldGNoVGFzayhcbiAgICAgIGNhY2hlS2V5LFxuICAgICAgdHJlZSxcbiAgICAgIGluc3RhbmNlLmtpbmQgPT09IFByZWZldGNoS2luZC5GVUxMLFxuICAgICAgUHJlZmV0Y2hQcmlvcml0eS5EZWZhdWx0LFxuICAgICAgbnVsbFxuICAgIClcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmVmZXRjaFdpdGhPbGRDYWNoZUltcGxlbWVudGF0aW9uKGluc3RhbmNlOiBQcmVmZXRjaGFibGVJbnN0YW5jZSkge1xuICAvLyBUaGlzIGlzIHRoZSBwYXRoIHVzZWQgd2hlbiB0aGUgU2VnbWVudCBDYWNoZSBpcyBub3QgZW5hYmxlZC5cbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBkb1ByZWZldGNoID0gYXN5bmMgKCkgPT4ge1xuICAgIC8vIG5vdGUgdGhhdCBgYXBwUm91dGVyLnByZWZldGNoKClgIGlzIGN1cnJlbnRseSBzeW5jLFxuICAgIC8vIHNvIHdlIGhhdmUgdG8gd3JhcCB0aGlzIGNhbGwgaW4gYW4gYXN5bmMgZnVuY3Rpb24gdG8gYmUgYWJsZSB0byBjYXRjaCgpIGVycm9ycyBiZWxvdy5cbiAgICByZXR1cm4gaW5zdGFuY2Uucm91dGVyLnByZWZldGNoKGluc3RhbmNlLnByZWZldGNoSHJlZiwge1xuICAgICAga2luZDogaW5zdGFuY2Uua2luZCxcbiAgICB9KVxuICB9XG5cbiAgLy8gUHJlZmV0Y2ggdGhlIHBhZ2UgaWYgYXNrZWQgKG9ubHkgaW4gdGhlIGNsaWVudClcbiAgLy8gV2UgbmVlZCB0byBoYW5kbGUgYSBwcmVmZXRjaCBlcnJvciBoZXJlIHNpbmNlIHdlIG1heSBiZVxuICAvLyBsb2FkaW5nIHdpdGggcHJpb3JpdHkgd2hpY2ggY2FuIHJlamVjdCBidXQgd2UgZG9uJ3RcbiAgLy8gd2FudCB0byBmb3JjZSBuYXZpZ2F0aW9uIHNpbmNlIHRoaXMgaXMgb25seSBhIHByZWZldGNoXG4gIGRvUHJlZmV0Y2goKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIC8vIHJldGhyb3cgdG8gc2hvdyBpbnZhbGlkIFVSTCBlcnJvcnNcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfSlcbn1cbiJdLCJuYW1lcyI6WyJJRExFX0xJTktfU1RBVFVTIiwiUEVORElOR19MSU5LX1NUQVRVUyIsIm1vdW50Rm9ybUluc3RhbmNlIiwibW91bnRMaW5rSW5zdGFuY2UiLCJvbkxpbmtWaXNpYmlsaXR5Q2hhbmdlZCIsIm9uTmF2aWdhdGlvbkludGVudCIsInBpbmdWaXNpYmxlTGlua3MiLCJzZXRMaW5rRm9yQ3VycmVudE5hdmlnYXRpb24iLCJ1bm1vdW50TGlua0ZvckN1cnJlbnROYXZpZ2F0aW9uIiwidW5tb3VudFByZWZldGNoYWJsZUluc3RhbmNlIiwibGlua0Zvck1vc3RSZWNlbnROYXZpZ2F0aW9uIiwicGVuZGluZyIsImxpbmsiLCJzdGFydFRyYW5zaXRpb24iLCJzZXRPcHRpbWlzdGljTGlua1N0YXR1cyIsInByZWZldGNoYWJsZSIsIldlYWtNYXAiLCJNYXAiLCJwcmVmZXRjaGFibGVBbmRWaXNpYmxlIiwiU2V0Iiwib2JzZXJ2ZXIiLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsImhhbmRsZUludGVyc2VjdCIsInJvb3RNYXJnaW4iLCJvYnNlcnZlVmlzaWJpbGl0eSIsImVsZW1lbnQiLCJpbnN0YW5jZSIsImV4aXN0aW5nSW5zdGFuY2UiLCJnZXQiLCJ1bmRlZmluZWQiLCJzZXQiLCJvYnNlcnZlIiwiY29lcmNlUHJlZmV0Y2hhYmxlVXJsIiwiaHJlZiIsImNyZWF0ZVByZWZldGNoVVJMIiwicmVwb3J0RXJyb3JGbiIsInJlcG9ydEVycm9yIiwiY29uc29sZSIsImVycm9yIiwicm91dGVyIiwia2luZCIsInByZWZldGNoRW5hYmxlZCIsInByZWZldGNoVVJMIiwiaXNWaXNpYmxlIiwicHJlZmV0Y2hUYXNrIiwicHJlZmV0Y2hIcmVmIiwiZGVsZXRlIiwiY2FuY2VsUHJlZmV0Y2hUYXNrIiwidW5vYnNlcnZlIiwiZW50cmllcyIsImVudHJ5IiwiaW50ZXJzZWN0aW9uUmF0aW8iLCJ0YXJnZXQiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJhZGQiLCJyZXNjaGVkdWxlTGlua1ByZWZldGNoIiwiUHJlZmV0Y2hQcmlvcml0eSIsIkRlZmF1bHQiLCJ1bnN0YWJsZV91cGdyYWRlVG9EeW5hbWljUHJlZmV0Y2giLCJfX05FWFRfRFlOQU1JQ19PTl9IT1ZFUiIsIlByZWZldGNoS2luZCIsIkZVTEwiLCJJbnRlbnQiLCJwcmlvcml0eSIsImV4aXN0aW5nUHJlZmV0Y2hUYXNrIiwiX19ORVhUX0NMSUVOVF9TRUdNRU5UX0NBQ0hFIiwicHJlZmV0Y2hXaXRoT2xkQ2FjaGVJbXBsZW1lbnRhdGlvbiIsImFwcFJvdXRlclN0YXRlIiwiZ2V0Q3VycmVudEFwcFJvdXRlclN0YXRlIiwidHJlZUF0VGltZU9mUHJlZmV0Y2giLCJ0cmVlIiwibmV4dFVybCIsImNhY2hlS2V5IiwiY3JlYXRlQ2FjaGVLZXkiLCJzY2hlZHVsZVNlZ21lbnRQcmVmZXRjaFRhc2siLCJyZXNjaGVkdWxlUHJlZmV0Y2hUYXNrIiwidGFzayIsImlzUHJlZmV0Y2hUYXNrRGlydHkiLCJ3aW5kb3ciLCJkb1ByZWZldGNoIiwicHJlZmV0Y2giLCJjYXRjaCIsImVyciJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/links.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/match-segments.js":
/*!****************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/match-segments.js ***!
  \****************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"matchSegment\", ({\n    enumerable: true,\n    get: function() {\n        return matchSegment;\n    }\n}));\nconst matchSegment = (existingSegment, segment)=>{\n    // segment is either Array or string\n    if (typeof existingSegment === 'string') {\n        if (typeof segment === 'string') {\n            // Common case: segment is just a string\n            return existingSegment === segment;\n        }\n        return false;\n    }\n    if (typeof segment === 'string') {\n        return false;\n    }\n    return existingSegment[0] === segment[0] && existingSegment[1] === segment[1];\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=match-segments.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9tYXRjaC1zZWdtZW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7O2dEQUVhQTs7O2VBQUFBOzs7QUFBTixNQUFNQSxlQUFlLENBQzFCQyxpQkFDQUM7SUFFQSxvQ0FBb0M7SUFDcEMsSUFBSSxPQUFPRCxvQkFBb0IsVUFBVTtRQUN2QyxJQUFJLE9BQU9DLFlBQVksVUFBVTtZQUMvQix3Q0FBd0M7WUFDeEMsT0FBT0Qsb0JBQW9CQztRQUM3QjtRQUNBLE9BQU87SUFDVDtJQUVBLElBQUksT0FBT0EsWUFBWSxVQUFVO1FBQy9CLE9BQU87SUFDVDtJQUNBLE9BQU9ELGVBQWUsQ0FBQyxFQUFFLEtBQUtDLE9BQU8sQ0FBQyxFQUFFLElBQUlELGVBQWUsQ0FBQyxFQUFFLEtBQUtDLE9BQU8sQ0FBQyxFQUFFO0FBQy9FIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL3NyYy9jbGllbnQvY29tcG9uZW50cy9tYXRjaC1zZWdtZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNlZ21lbnQgfSBmcm9tICcuLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcblxuZXhwb3J0IGNvbnN0IG1hdGNoU2VnbWVudCA9IChcbiAgZXhpc3RpbmdTZWdtZW50OiBTZWdtZW50LFxuICBzZWdtZW50OiBTZWdtZW50XG4pOiBib29sZWFuID0+IHtcbiAgLy8gc2VnbWVudCBpcyBlaXRoZXIgQXJyYXkgb3Igc3RyaW5nXG4gIGlmICh0eXBlb2YgZXhpc3RpbmdTZWdtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGlmICh0eXBlb2Ygc2VnbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIENvbW1vbiBjYXNlOiBzZWdtZW50IGlzIGp1c3QgYSBzdHJpbmdcbiAgICAgIHJldHVybiBleGlzdGluZ1NlZ21lbnQgPT09IHNlZ21lbnRcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAodHlwZW9mIHNlZ21lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIGV4aXN0aW5nU2VnbWVudFswXSA9PT0gc2VnbWVudFswXSAmJiBleGlzdGluZ1NlZ21lbnRbMV0gPT09IHNlZ21lbnRbMV1cbn1cbiJdLCJuYW1lcyI6WyJtYXRjaFNlZ21lbnQiLCJleGlzdGluZ1NlZ21lbnQiLCJzZWdtZW50Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/match-segments.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/nav-failure-handler.js":
/*!*********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/nav-failure-handler.js ***!
  \*********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    handleHardNavError: function() {\n        return handleHardNavError;\n    },\n    useNavFailureHandler: function() {\n        return useNavFailureHandler;\n    }\n});\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\nconst _createhreffromurl = __webpack_require__(/*! ./router-reducer/create-href-from-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nfunction handleHardNavError(error) {\n    if (error && \"object\" !== 'undefined' && window.next.__pendingUrl && (0, _createhreffromurl.createHrefFromUrl)(new URL(window.location.href)) !== (0, _createhreffromurl.createHrefFromUrl)(window.next.__pendingUrl)) {\n        console.error(\"Error occurred during navigation, falling back to hard navigation\", error);\n        window.location.href = window.next.__pendingUrl.toString();\n        return true;\n    }\n    return false;\n}\nfunction useNavFailureHandler() {\n    if (false) {}\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=nav-failure-handler.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9uYXYtZmFpbHVyZS1oYW5kbGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUdnQkEsa0JBQWtCO2VBQWxCQTs7SUFrQkFDLG9CQUFvQjtlQUFwQkE7OzttQ0FyQlU7K0NBQ1E7QUFFM0IsU0FBU0QsbUJBQW1CRSxLQUFjO0lBQy9DLElBQ0VBLFNBQ0EsT0FBT0MsTUFBVyxlQUNsQkEsT0FBT0MsSUFBSSxDQUFDQyxZQUFZLElBQ3hCQyxDQUFBQSxHQUFBQSxtQkFBQUEsaUJBQUFBLEVBQWtCLElBQUlDLElBQUlKLE9BQU9LLFFBQVEsQ0FBQ0MsSUFBSSxPQUM1Q0gsQ0FBQUEsR0FBQUEsbUJBQUFBLGlCQUFBQSxFQUFrQkgsT0FBT0MsSUFBSSxDQUFDQyxZQUFZLEdBQzVDO1FBQ0FLLFFBQVFSLEtBQUssQ0FDVixxRUFDREE7UUFFRkMsT0FBT0ssUUFBUSxDQUFDQyxJQUFJLEdBQUdOLE9BQU9DLElBQUksQ0FBQ0MsWUFBWSxDQUFDTSxRQUFRO1FBQ3hELE9BQU87SUFDVDtJQUNBLE9BQU87QUFDVDtBQUVPLFNBQVNWO0lBQ2QsSUFBSVcsS0FBd0MsRUFBRSxFQXVCN0M7QUFDSCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9zcmMvY2xpZW50L2NvbXBvbmVudHMvbmF2LWZhaWx1cmUtaGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNyZWF0ZUhyZWZGcm9tVXJsIH0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci9jcmVhdGUtaHJlZi1mcm9tLXVybCdcblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUhhcmROYXZFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoXG4gICAgZXJyb3IgJiZcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHdpbmRvdy5uZXh0Ll9fcGVuZGluZ1VybCAmJlxuICAgIGNyZWF0ZUhyZWZGcm9tVXJsKG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpKSAhPT1cbiAgICAgIGNyZWF0ZUhyZWZGcm9tVXJsKHdpbmRvdy5uZXh0Ll9fcGVuZGluZ1VybClcbiAgKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBFcnJvciBvY2N1cnJlZCBkdXJpbmcgbmF2aWdhdGlvbiwgZmFsbGluZyBiYWNrIHRvIGhhcmQgbmF2aWdhdGlvbmAsXG4gICAgICBlcnJvclxuICAgIClcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHdpbmRvdy5uZXh0Ll9fcGVuZGluZ1VybC50b1N0cmluZygpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZU5hdkZhaWx1cmVIYW5kbGVyKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0FQUF9OQVZfRkFJTF9IQU5ETElORykge1xuICAgIC8vIHRoaXMgaWYgaXMgb25seSBmb3IgRENFIG9mIHRoZSBmZWF0dXJlIGZsYWcgbm90IGNvbmRpdGlvbmFsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlciA9IChcbiAgICAgICAgZXZ0OiBFcnJvckV2ZW50IHwgUHJvbWlzZVJlamVjdGlvbkV2ZW50XG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSAncmVhc29uJyBpbiBldnQgPyBldnQucmVhc29uIDogZXZ0LmVycm9yXG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi9yZWplY3Rpb24gZHVyaW5nXG4gICAgICAgIC8vIGEgbmF2aWdhdGlvbiB3ZSBmYWxsIGJhY2sgdG8gYSBoYXJkIG5hdmlnYXRpb24gdG9cbiAgICAgICAgLy8gYXR0ZW1wdCByZWNvdmVyaW5nIHRvIGEgZ29vZCBzdGF0ZVxuICAgICAgICBoYW5kbGVIYXJkTmF2RXJyb3IoZXJyb3IpXG4gICAgICB9XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVqZWN0aW9uJywgdW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyKVxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyKVxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyKVxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAndW5oYW5kbGVkcmVqZWN0aW9uJyxcbiAgICAgICAgICB1bmNhdWdodEV4Y2VwdGlvbkhhbmRsZXJcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0sIFtdKVxuICB9XG59XG4iXSwibmFtZXMiOlsiaGFuZGxlSGFyZE5hdkVycm9yIiwidXNlTmF2RmFpbHVyZUhhbmRsZXIiLCJlcnJvciIsIndpbmRvdyIsIm5leHQiLCJfX3BlbmRpbmdVcmwiLCJjcmVhdGVIcmVmRnJvbVVybCIsIlVSTCIsImxvY2F0aW9uIiwiaHJlZiIsImNvbnNvbGUiLCJ0b1N0cmluZyIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfQVBQX05BVl9GQUlMX0hBTkRMSU5HIiwidXNlRWZmZWN0IiwidW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyIiwiZXZ0IiwicmVhc29uIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/nav-failure-handler.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/navigation-untracked.js":
/*!**********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/navigation-untracked.js ***!
  \**********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"useUntrackedPathname\", ({\n    enumerable: true,\n    get: function() {\n        return useUntrackedPathname;\n    }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../../shared/lib/hooks-client-context.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\");\n/**\n * This checks to see if the current render has any unknown route parameters.\n * It's used to trigger a different render path in the error boundary.\n *\n * @returns true if there are any unknown route parameters, false otherwise\n */ function hasFallbackRouteParams() {\n    if (false) {}\n    return false;\n}\nfunction useUntrackedPathname() {\n    // If there are any unknown route parameters we would typically throw\n    // an error, but this internal method allows us to return a null value instead\n    // for components that do not propagate the pathname to the static shell (like\n    // the error boundary).\n    if (hasFallbackRouteParams()) {\n        return null;\n    }\n    // This shouldn't cause any issues related to conditional rendering because\n    // the environment will be consistent for the render.\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    return (0, _react.useContext)(_hooksclientcontextsharedruntime.PathnameContext);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=navigation-untracked.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9uYXZpZ2F0aW9uLXVudHJhY2tlZC5qcyIsIm1hcHBpbmdzIjoiOzs7O3dEQXNDZ0JBOzs7ZUFBQUE7OzttQ0F0Q1c7NkRBQ0s7QUFFaEM7Ozs7O0NBS0MsR0FDRCxTQUFTQztJQUNQLElBQUksS0FBNkIsRUFBRSxFQVlsQztJQUVELE9BQU87QUFDVDtBQWFPLFNBQVNEO0lBQ2QscUVBQXFFO0lBQ3JFLDhFQUE4RTtJQUM5RSw4RUFBOEU7SUFDOUUsdUJBQXVCO0lBQ3ZCLElBQUlDLDBCQUEwQjtRQUM1QixPQUFPO0lBQ1Q7SUFFQSwyRUFBMkU7SUFDM0UscURBQXFEO0lBQ3JELHNEQUFzRDtJQUN0RCxPQUFPUSxDQUFBQSxHQUFBQSxPQUFBQSxVQUFBQSxFQUFXQyxpQ0FBQUEsZUFBZTtBQUNuQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9zcmMvY2xpZW50L2NvbXBvbmVudHMvbmF2aWdhdGlvbi11bnRyYWNrZWQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUGF0aG5hbWVDb250ZXh0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9ob29rcy1jbGllbnQtY29udGV4dC5zaGFyZWQtcnVudGltZSdcblxuLyoqXG4gKiBUaGlzIGNoZWNrcyB0byBzZWUgaWYgdGhlIGN1cnJlbnQgcmVuZGVyIGhhcyBhbnkgdW5rbm93biByb3V0ZSBwYXJhbWV0ZXJzLlxuICogSXQncyB1c2VkIHRvIHRyaWdnZXIgYSBkaWZmZXJlbnQgcmVuZGVyIHBhdGggaW4gdGhlIGVycm9yIGJvdW5kYXJ5LlxuICpcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIGFueSB1bmtub3duIHJvdXRlIHBhcmFtZXRlcnMsIGZhbHNlIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBoYXNGYWxsYmFja1JvdXRlUGFyYW1zKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBBc3luY0xvY2FsU3RvcmFnZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBjbGllbnQgYnVuZGxlLlxuICAgIGNvbnN0IHsgd29ya0FzeW5jU3RvcmFnZSB9ID1cbiAgICAgIHJlcXVpcmUoJy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3dvcmstYXN5bmMtc3RvcmFnZS5leHRlcm5hbCcpIGFzIHR5cGVvZiBpbXBvcnQoJy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3dvcmstYXN5bmMtc3RvcmFnZS5leHRlcm5hbCcpXG5cbiAgICBjb25zdCB3b3JrU3RvcmUgPSB3b3JrQXN5bmNTdG9yYWdlLmdldFN0b3JlKClcbiAgICBpZiAoIXdvcmtTdG9yZSkgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCB7IGZhbGxiYWNrUm91dGVQYXJhbXMgfSA9IHdvcmtTdG9yZVxuICAgIGlmICghZmFsbGJhY2tSb3V0ZVBhcmFtcyB8fCBmYWxsYmFja1JvdXRlUGFyYW1zLnNpemUgPT09IDApIHJldHVybiBmYWxzZVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIFRoaXMgcmV0dXJucyBhIGBudWxsYCB2YWx1ZSBpZiB0aGVyZSBhcmUgYW55IHVua25vd24gcm91dGUgcGFyYW1ldGVycywgYW5kXG4gKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgcGF0aG5hbWUgZnJvbSB0aGUgY29udGV4dC4gVGhpcyBpcyBhbiBhbHRlcm5hdGl2ZSB0b1xuICogYHVzZVBhdGhuYW1lYCB0aGF0IGlzIHVzZWQgaW4gdGhlIGVycm9yIGJvdW5kYXJ5IHRvIGF2b2lkIHJlbmRlcmluZyB0aGVcbiAqIGVycm9yIGJvdW5kYXJ5IHdoZW4gdGhlcmUgYXJlIHVua25vd24gcm91dGUgcGFyYW1ldGVycy4gVGhpcyBkb2Vzbid0IHRocm93XG4gKiB3aGVuIGFjY2Vzc2VkIHdpdGggdW5rbm93biByb3V0ZSBwYXJhbWV0ZXJzLlxuICpcbiAqIEByZXR1cm5zXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VVbnRyYWNrZWRQYXRobmFtZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgLy8gSWYgdGhlcmUgYXJlIGFueSB1bmtub3duIHJvdXRlIHBhcmFtZXRlcnMgd2Ugd291bGQgdHlwaWNhbGx5IHRocm93XG4gIC8vIGFuIGVycm9yLCBidXQgdGhpcyBpbnRlcm5hbCBtZXRob2QgYWxsb3dzIHVzIHRvIHJldHVybiBhIG51bGwgdmFsdWUgaW5zdGVhZFxuICAvLyBmb3IgY29tcG9uZW50cyB0aGF0IGRvIG5vdCBwcm9wYWdhdGUgdGhlIHBhdGhuYW1lIHRvIHRoZSBzdGF0aWMgc2hlbGwgKGxpa2VcbiAgLy8gdGhlIGVycm9yIGJvdW5kYXJ5KS5cbiAgaWYgKGhhc0ZhbGxiYWNrUm91dGVQYXJhbXMoKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBUaGlzIHNob3VsZG4ndCBjYXVzZSBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gY29uZGl0aW9uYWwgcmVuZGVyaW5nIGJlY2F1c2VcbiAgLy8gdGhlIGVudmlyb25tZW50IHdpbGwgYmUgY29uc2lzdGVudCBmb3IgdGhlIHJlbmRlci5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gIHJldHVybiB1c2VDb250ZXh0KFBhdGhuYW1lQ29udGV4dClcbn1cbiJdLCJuYW1lcyI6WyJ1c2VVbnRyYWNrZWRQYXRobmFtZSIsImhhc0ZhbGxiYWNrUm91dGVQYXJhbXMiLCJ3aW5kb3ciLCJ3b3JrQXN5bmNTdG9yYWdlIiwicmVxdWlyZSIsIndvcmtTdG9yZSIsImdldFN0b3JlIiwiZmFsbGJhY2tSb3V0ZVBhcmFtcyIsInNpemUiLCJ1c2VDb250ZXh0IiwiUGF0aG5hbWVDb250ZXh0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/navigation-untracked.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/navigation.js":
/*!************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/navigation.js ***!
  \************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$(), _s1 = $RefreshSig$(), _s2 = $RefreshSig$(), _s3 = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    ReadonlyURLSearchParams: function() {\n        return _navigationreactserver.ReadonlyURLSearchParams;\n    },\n    RedirectType: function() {\n        return _navigationreactserver.RedirectType;\n    },\n    ServerInsertedHTMLContext: function() {\n        return _serverinsertedhtmlsharedruntime.ServerInsertedHTMLContext;\n    },\n    forbidden: function() {\n        return _navigationreactserver.forbidden;\n    },\n    notFound: function() {\n        return _navigationreactserver.notFound;\n    },\n    permanentRedirect: function() {\n        return _navigationreactserver.permanentRedirect;\n    },\n    redirect: function() {\n        return _navigationreactserver.redirect;\n    },\n    unauthorized: function() {\n        return _navigationreactserver.unauthorized;\n    },\n    unstable_rethrow: function() {\n        return _navigationreactserver.unstable_rethrow;\n    },\n    useParams: function() {\n        return useParams;\n    },\n    usePathname: function() {\n        return usePathname;\n    },\n    useRouter: function() {\n        return useRouter;\n    },\n    useSearchParams: function() {\n        return useSearchParams;\n    },\n    useSelectedLayoutSegment: function() {\n        return useSelectedLayoutSegment;\n    },\n    useSelectedLayoutSegments: function() {\n        return useSelectedLayoutSegments;\n    },\n    useServerInsertedHTML: function() {\n        return _serverinsertedhtmlsharedruntime.useServerInsertedHTML;\n    }\n});\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _hooksclientcontextsharedruntime = __webpack_require__(/*! ../../shared/lib/hooks-client-context.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\");\nconst _getsegmentvalue = __webpack_require__(/*! ./router-reducer/reducers/get-segment-value */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js\");\nconst _segment = __webpack_require__(/*! ../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/segment.js\");\nconst _navigationreactserver = __webpack_require__(/*! ./navigation.react-server */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/navigation.react-server.js\");\nconst _serverinsertedhtmlsharedruntime = __webpack_require__(/*! ../../shared/lib/server-inserted-html.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js\");\nconst useDynamicRouteParams =  false ? 0 : undefined;\nfunction useSearchParams() {\n    const searchParams = (0, _react.useContext)(_hooksclientcontextsharedruntime.SearchParamsContext);\n    // In the case where this is `null`, the compat types added in\n    // `next-env.d.ts` will add a new overload that changes the return type to\n    // include `null`.\n    const readonlySearchParams = (0, _react.useMemo)(()=>{\n        if (!searchParams) {\n            // When the router is not ready in pages, we won't have the search params\n            // available.\n            return null;\n        }\n        return new _navigationreactserver.ReadonlyURLSearchParams(searchParams);\n    }, [\n        searchParams\n    ]);\n    if (false) {}\n    return readonlySearchParams;\n}\nfunction usePathname() {\n    _s();\n    useDynamicRouteParams == null ? void 0 : useDynamicRouteParams('usePathname()');\n    // In the case where this is `null`, the compat types added in `next-env.d.ts`\n    // will add a new overload that changes the return type to include `null`.\n    return (0, _react.useContext)(_hooksclientcontextsharedruntime.PathnameContext);\n}\n_s(usePathname, \"rJhb7jJF4Q92igNmh5lAnMUEkkY=\", false, function() {\n    return [\n        useDynamicRouteParams\n    ];\n});\nfunction useRouter() {\n    const router = (0, _react.useContext)(_approutercontextsharedruntime.AppRouterContext);\n    if (router === null) {\n        throw Object.defineProperty(new Error('invariant expected app router to be mounted'), \"__NEXT_ERROR_CODE\", {\n            value: \"E238\",\n            enumerable: false,\n            configurable: true\n        });\n    }\n    return router;\n}\nfunction useParams() {\n    _s1();\n    useDynamicRouteParams == null ? void 0 : useDynamicRouteParams('useParams()');\n    return (0, _react.useContext)(_hooksclientcontextsharedruntime.PathParamsContext);\n}\n_s1(useParams, \"rJhb7jJF4Q92igNmh5lAnMUEkkY=\", false, function() {\n    return [\n        useDynamicRouteParams\n    ];\n});\n/** Get the canonical parameters from the current level to the leaf node. */ // Client components API\nfunction getSelectedLayoutSegmentPath(tree, parallelRouteKey, first, segmentPath) {\n    if (first === void 0) first = true;\n    if (segmentPath === void 0) segmentPath = [];\n    let node;\n    if (first) {\n        // Use the provided parallel route key on the first parallel route\n        node = tree[1][parallelRouteKey];\n    } else {\n        // After first parallel route prefer children, if there's no children pick the first parallel route.\n        const parallelRoutes = tree[1];\n        var _parallelRoutes_children;\n        node = (_parallelRoutes_children = parallelRoutes.children) != null ? _parallelRoutes_children : Object.values(parallelRoutes)[0];\n    }\n    if (!node) return segmentPath;\n    const segment = node[0];\n    let segmentValue = (0, _getsegmentvalue.getSegmentValue)(segment);\n    if (!segmentValue || segmentValue.startsWith(_segment.PAGE_SEGMENT_KEY)) {\n        return segmentPath;\n    }\n    segmentPath.push(segmentValue);\n    return getSelectedLayoutSegmentPath(node, parallelRouteKey, false, segmentPath);\n}\nfunction useSelectedLayoutSegments(parallelRouteKey) {\n    _s2();\n    if (parallelRouteKey === void 0) parallelRouteKey = 'children';\n    useDynamicRouteParams == null ? void 0 : useDynamicRouteParams('useSelectedLayoutSegments()');\n    const context = (0, _react.useContext)(_approutercontextsharedruntime.LayoutRouterContext);\n    // @ts-expect-error This only happens in `pages`. Type is overwritten in navigation.d.ts\n    if (!context) return null;\n    return getSelectedLayoutSegmentPath(context.parentTree, parallelRouteKey);\n}\n_s2(useSelectedLayoutSegments, \"rJhb7jJF4Q92igNmh5lAnMUEkkY=\", false, function() {\n    return [\n        useDynamicRouteParams\n    ];\n});\nfunction useSelectedLayoutSegment(parallelRouteKey) {\n    _s3();\n    if (parallelRouteKey === void 0) parallelRouteKey = 'children';\n    useDynamicRouteParams == null ? void 0 : useDynamicRouteParams('useSelectedLayoutSegment()');\n    const selectedLayoutSegments = useSelectedLayoutSegments(parallelRouteKey);\n    if (!selectedLayoutSegments || selectedLayoutSegments.length === 0) {\n        return null;\n    }\n    const selectedLayoutSegment = parallelRouteKey === 'children' ? selectedLayoutSegments[0] : selectedLayoutSegments[selectedLayoutSegments.length - 1];\n    // if the default slot is showing, we return null since it's not technically \"selected\" (it's a fallback)\n    // and returning an internal value like `__DEFAULT__` would be confusing.\n    return selectedLayoutSegment === _segment.DEFAULT_SEGMENT_KEY ? null : selectedLayoutSegment;\n}\n_s3(useSelectedLayoutSegment, \"GQkIYFIXjatgPrznv5JwL5TXjn8=\", false, function() {\n    return [\n        useDynamicRouteParams,\n        useSelectedLayoutSegments\n    ];\n});\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=navigation.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9uYXZpZ2F0aW9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0lBMFJFQSx1QkFBdUI7ZUFBdkJBLHVCQUFBQSx1QkFBdUI7O0lBRHZCQyxZQUFZO2VBQVpBLHVCQUFBQSxZQUFZOztJQXBMWkMseUJBQXlCO2VBQXpCQSxpQ0FBQUEseUJBQXlCOztJQWdMekJDLFNBQVM7ZUFBVEEsdUJBQUFBLFNBQVM7O0lBRFRDLFFBQVE7ZUFBUkEsdUJBQUFBLFFBQVE7O0lBSVJDLGlCQUFpQjtlQUFqQkEsdUJBQUFBLGlCQUFpQjs7SUFEakJDLFFBQVE7ZUFBUkEsdUJBQUFBLFFBQVE7O0lBRFJDLFlBQVk7ZUFBWkEsdUJBQUFBLFlBQVk7O0lBS1pDLGdCQUFnQjtlQUFoQkEsdUJBQUFBLGdCQUFnQjs7SUFwSUZDLFNBQVM7ZUFBVEE7O0lBNURBQyxXQUFXO2VBQVhBOztJQWlDQUMsU0FBUztlQUFUQTs7SUE5RUFDLGVBQWU7ZUFBZkE7O0lBNk1BQyx3QkFBd0I7ZUFBeEJBOztJQS9CQUMseUJBQXlCO2VBQXpCQTs7SUF0SGRDLHFCQUFxQjtlQUFyQkEsaUNBQUFBLHFCQUFxQjs7O21DQW5HYTsyREFLN0I7NkRBS0E7NkNBQ3lCO3FDQUNzQjttREFDZDs2REF1RmpDO0FBckZQLE1BQU1DLHdCQUNKLE1BQTZCLEdBRXZCRSxDQUNxQixHQUN2QkM7QUF1QkMsU0FBU1A7SUFDZCxNQUFNUSxlQUFlQyxDQUFBQSxHQUFBQSxPQUFBQSxVQUFBQSxFQUFXQyxpQ0FBQUEsbUJBQW1CO0lBRW5ELDhEQUE4RDtJQUM5RCwwRUFBMEU7SUFDMUUsa0JBQWtCO0lBQ2xCLE1BQU1DLHVCQUF1QkMsQ0FBQUEsR0FBQUEsT0FBQUEsT0FBQUEsRUFBUTtRQUNuQyxJQUFJLENBQUNKLGNBQWM7WUFDakIseUVBQXlFO1lBQ3pFLGFBQWE7WUFDYixPQUFPO1FBQ1Q7UUFFQSxPQUFPLElBQUlwQix1QkFBQUEsdUJBQXVCLENBQUNvQjtJQUNyQyxHQUFHO1FBQUNBO0tBQWE7SUFFakIsSUFBSSxLQUE2QixFQUFFLEVBTWxDO0lBRUQsT0FBT0c7QUFDVDtBQW9CTzs7SUFDTFAseUJBQUFBLE9BQUFBLEtBQUFBLDBCQUF3QjtJQUV4Qiw4RUFBOEU7SUFDOUUsMEVBQTBFO0lBQzFFLE9BQU9LLENBQUFBLEdBQUFBLE9BQUFBLFVBQUFBLEVBQVdLLGlDQUFBQSxlQUFlO0FBQ25DO0dBTmdCaEI7O1FBQ2RNOzs7QUFnQ0ssU0FBU0w7SUFDZCxNQUFNZ0IsU0FBU04sQ0FBQUEsR0FBQUEsT0FBQUEsVUFBQUEsRUFBV08sK0JBQUFBLGdCQUFnQjtJQUMxQyxJQUFJRCxXQUFXLE1BQU07UUFDbkIsTUFBTSxxQkFBd0QsQ0FBeEQsSUFBSUUsTUFBTSxnREFBVjttQkFBQTt3QkFBQTswQkFBQTtRQUF1RDtJQUMvRDtJQUVBLE9BQU9GO0FBQ1Q7QUFvQk87O0lBQ0xYLHlCQUFBQSxPQUFBQSxLQUFBQSwwQkFBd0I7SUFFeEIsT0FBT0ssQ0FBQUEsR0FBQUEsT0FBQUEsVUFBQUEsRUFBV1MsaUNBQUFBLGlCQUFpQjtBQUNyQztJQUpnQnJCOztRQUNkTzs7O0FBS0YsMEVBQTBFLEdBQzFFLHdCQUF3QjtBQUN4QixTQUFTZSw2QkFDUEMsSUFBdUIsRUFDdkJDLGdCQUF3QixFQUN4QkMsS0FBWSxFQUNaQyxXQUEwQjtJQUQxQkQsSUFBQUEsVUFBQUEsS0FBQUEsR0FBQUEsUUFBUTtJQUNSQyxJQUFBQSxnQkFBQUEsS0FBQUEsR0FBQUEsY0FBd0IsRUFBRTtJQUUxQixJQUFJQztJQUNKLElBQUlGLE9BQU87UUFDVCxrRUFBa0U7UUFDbEVFLE9BQU9KLElBQUksQ0FBQyxFQUFFLENBQUNDLGlCQUFpQjtJQUNsQyxPQUFPO1FBQ0wsb0dBQW9HO1FBQ3BHLE1BQU1JLGlCQUFpQkwsSUFBSSxDQUFDLEVBQUU7WUFDdkJLO1FBQVBELE9BQU9DLENBQUFBLDJCQUFBQSxlQUFlQyxRQUFBQSxLQUFRLE9BQXZCRCwyQkFBMkJFLE9BQU9DLE1BQU0sQ0FBQ0gsZUFBZSxDQUFDLEVBQUU7SUFDcEU7SUFFQSxJQUFJLENBQUNELE1BQU0sT0FBT0Q7SUFDbEIsTUFBTU0sVUFBVUwsSUFBSSxDQUFDLEVBQUU7SUFFdkIsSUFBSU0sZUFBZUMsQ0FBQUEsR0FBQUEsaUJBQUFBLGVBQUFBLEVBQWdCRjtJQUVuQyxJQUFJLENBQUNDLGdCQUFnQkEsYUFBYUUsVUFBVSxDQUFDQyxTQUFBQSxnQkFBZ0IsR0FBRztRQUM5RCxPQUFPVjtJQUNUO0lBRUFBLFlBQVlXLElBQUksQ0FBQ0o7SUFFakIsT0FBT1gsNkJBQ0xLLE1BQ0FILGtCQUNBLE9BQ0FFO0FBRUo7QUE0Qk8sbUNBQ0xGLGdCQUFxQzs7SUFBckNBLElBQUFBLHFCQUFBQSxLQUFBQSxHQUFBQSxtQkFBMkI7SUFFM0JqQix5QkFBQUEsT0FBQUEsS0FBQUEsMEJBQXdCO0lBRXhCLE1BQU0rQixVQUFVMUIsQ0FBQUEsR0FBQUEsT0FBQUEsVUFBQUEsRUFBVzJCLCtCQUFBQSxtQkFBbUI7SUFDOUMsd0ZBQXdGO0lBQ3hGLElBQUksQ0FBQ0QsU0FBUyxPQUFPO0lBRXJCLE9BQU9oQiw2QkFBNkJnQixRQUFRRSxVQUFVLEVBQUVoQjtBQUMxRDtJQVZnQm5COztRQUdkRTs7O0FBNEJLLGtDQUNMaUIsZ0JBQXFDOztJQUFyQ0EsSUFBQUEscUJBQUFBLEtBQUFBLEdBQUFBLG1CQUEyQjtJQUUzQmpCLHlCQUFBQSxPQUFBQSxLQUFBQSwwQkFBd0I7SUFFeEIsTUFBTWtDLG1EQUFtRGpCO0lBRXpELElBQUksQ0FBQ2lCLDBCQUEwQkEsdUJBQXVCQyxNQUFNLEtBQUssR0FBRztRQUNsRSxPQUFPO0lBQ1Q7SUFFQSxNQUFNQyx3QkFDSm5CLHFCQUFxQixhQUNqQmlCLHNCQUFzQixDQUFDLEVBQUUsR0FDekJBLHNCQUFzQixDQUFDQSx1QkFBdUJDLE1BQU0sR0FBRyxFQUFFO0lBRS9ELHlHQUF5RztJQUN6Ryx5RUFBeUU7SUFDekUsT0FBT0MsMEJBQTBCQyxTQUFBQSxtQkFBbUIsR0FDaEQsT0FDQUQ7QUFDTjtJQXJCZ0J2Qzs7UUFHZEc7UUFFK0JGIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL3NyYy9jbGllbnQvY29tcG9uZW50cy9uYXZpZ2F0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmxpZ2h0Um91dGVyU3RhdGUgfSBmcm9tICcuLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcbmltcG9ydCB0eXBlIHsgUGFyYW1zIH0gZnJvbSAnLi4vLi4vc2VydmVyL3JlcXVlc3QvcGFyYW1zJ1xuXG5pbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQge1xuICBBcHBSb3V0ZXJDb250ZXh0LFxuICBMYXlvdXRSb3V0ZXJDb250ZXh0LFxuICB0eXBlIEFwcFJvdXRlckluc3RhbmNlLFxufSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7XG4gIFNlYXJjaFBhcmFtc0NvbnRleHQsXG4gIFBhdGhuYW1lQ29udGV4dCxcbiAgUGF0aFBhcmFtc0NvbnRleHQsXG59IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvaG9va3MtY2xpZW50LWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyBnZXRTZWdtZW50VmFsdWUgfSBmcm9tICcuL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL2dldC1zZWdtZW50LXZhbHVlJ1xuaW1wb3J0IHsgUEFHRV9TRUdNRU5UX0tFWSwgREVGQVVMVF9TRUdNRU5UX0tFWSB9IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvc2VnbWVudCdcbmltcG9ydCB7IFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zIH0gZnJvbSAnLi9uYXZpZ2F0aW9uLnJlYWN0LXNlcnZlcidcblxuY29uc3QgdXNlRHluYW1pY1JvdXRlUGFyYW1zID1cbiAgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCdcbiAgICA/IChcbiAgICAgICAgcmVxdWlyZSgnLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvZHluYW1pYy1yZW5kZXJpbmcnKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci9keW5hbWljLXJlbmRlcmluZycpXG4gICAgICApLnVzZUR5bmFtaWNSb3V0ZVBhcmFtc1xuICAgIDogdW5kZWZpbmVkXG5cbi8qKlxuICogQSBbQ2xpZW50IENvbXBvbmVudF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcmVuZGVyaW5nL2NsaWVudC1jb21wb25lbnRzKSBob29rXG4gKiB0aGF0IGxldHMgeW91ICpyZWFkKiB0aGUgY3VycmVudCBVUkwncyBzZWFyY2ggcGFyYW1ldGVycy5cbiAqXG4gKiBMZWFybiBtb3JlIGFib3V0IFtgVVJMU2VhcmNoUGFyYW1zYCBvbiBNRE5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9VUkxTZWFyY2hQYXJhbXMpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBcInVzZSBjbGllbnRcIlxuICogaW1wb3J0IHsgdXNlU2VhcmNoUGFyYW1zIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uJ1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFBhZ2UoKSB7XG4gKiAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHVzZVNlYXJjaFBhcmFtcygpXG4gKiAgIHNlYXJjaFBhcmFtcy5nZXQoJ2ZvbycpIC8vIHJldHVybnMgJ2Jhcicgd2hlbiA/Zm9vPWJhclxuICogICAvLyAuLi5cbiAqIH1cbiAqIGBgYFxuICpcbiAqIFJlYWQgbW9yZTogW05leHQuanMgRG9jczogYHVzZVNlYXJjaFBhcmFtc2BdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2Z1bmN0aW9ucy91c2Utc2VhcmNoLXBhcmFtcylcbiAqL1xuLy8gQ2xpZW50IGNvbXBvbmVudHMgQVBJXG5leHBvcnQgZnVuY3Rpb24gdXNlU2VhcmNoUGFyYW1zKCk6IFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdXNlQ29udGV4dChTZWFyY2hQYXJhbXNDb250ZXh0KVxuXG4gIC8vIEluIHRoZSBjYXNlIHdoZXJlIHRoaXMgaXMgYG51bGxgLCB0aGUgY29tcGF0IHR5cGVzIGFkZGVkIGluXG4gIC8vIGBuZXh0LWVudi5kLnRzYCB3aWxsIGFkZCBhIG5ldyBvdmVybG9hZCB0aGF0IGNoYW5nZXMgdGhlIHJldHVybiB0eXBlIHRvXG4gIC8vIGluY2x1ZGUgYG51bGxgLlxuICBjb25zdCByZWFkb25seVNlYXJjaFBhcmFtcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc2VhcmNoUGFyYW1zKSB7XG4gICAgICAvLyBXaGVuIHRoZSByb3V0ZXIgaXMgbm90IHJlYWR5IGluIHBhZ2VzLCB3ZSB3b24ndCBoYXZlIHRoZSBzZWFyY2ggcGFyYW1zXG4gICAgICAvLyBhdmFpbGFibGUuXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXMoc2VhcmNoUGFyYW1zKVxuICB9LCBbc2VhcmNoUGFyYW1zXSkgYXMgUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXNcblxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBBc3luY0xvY2FsU3RvcmFnZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBjbGllbnQgYnVuZGxlLlxuICAgIGNvbnN0IHsgYmFpbG91dFRvQ2xpZW50UmVuZGVyaW5nIH0gPVxuICAgICAgcmVxdWlyZSgnLi9iYWlsb3V0LXRvLWNsaWVudC1yZW5kZXJpbmcnKSBhcyB0eXBlb2YgaW1wb3J0KCcuL2JhaWxvdXQtdG8tY2xpZW50LXJlbmRlcmluZycpXG4gICAgLy8gVE9ETy1BUFA6IGhhbmRsZSBkeW5hbWljID0gJ2ZvcmNlLXN0YXRpYycgaGVyZSBhbmQgb24gdGhlIGNsaWVudFxuICAgIGJhaWxvdXRUb0NsaWVudFJlbmRlcmluZygndXNlU2VhcmNoUGFyYW1zKCknKVxuICB9XG5cbiAgcmV0dXJuIHJlYWRvbmx5U2VhcmNoUGFyYW1zXG59XG5cbi8qKlxuICogQSBbQ2xpZW50IENvbXBvbmVudF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcmVuZGVyaW5nL2NsaWVudC1jb21wb25lbnRzKSBob29rXG4gKiB0aGF0IGxldHMgeW91IHJlYWQgdGhlIGN1cnJlbnQgVVJMJ3MgcGF0aG5hbWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBcInVzZSBjbGllbnRcIlxuICogaW1wb3J0IHsgdXNlUGF0aG5hbWUgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXG4gKlxuICogZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUGFnZSgpIHtcbiAqICBjb25zdCBwYXRobmFtZSA9IHVzZVBhdGhuYW1lKCkgLy8gcmV0dXJucyBcIi9kYXNoYm9hcmRcIiBvbiAvZGFzaGJvYXJkP2Zvbz1iYXJcbiAqICAvLyAuLi5cbiAqIH1cbiAqIGBgYFxuICpcbiAqIFJlYWQgbW9yZTogW05leHQuanMgRG9jczogYHVzZVBhdGhuYW1lYF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvZnVuY3Rpb25zL3VzZS1wYXRobmFtZSlcbiAqL1xuLy8gQ2xpZW50IGNvbXBvbmVudHMgQVBJXG5leHBvcnQgZnVuY3Rpb24gdXNlUGF0aG5hbWUoKTogc3RyaW5nIHtcbiAgdXNlRHluYW1pY1JvdXRlUGFyYW1zPy4oJ3VzZVBhdGhuYW1lKCknKVxuXG4gIC8vIEluIHRoZSBjYXNlIHdoZXJlIHRoaXMgaXMgYG51bGxgLCB0aGUgY29tcGF0IHR5cGVzIGFkZGVkIGluIGBuZXh0LWVudi5kLnRzYFxuICAvLyB3aWxsIGFkZCBhIG5ldyBvdmVybG9hZCB0aGF0IGNoYW5nZXMgdGhlIHJldHVybiB0eXBlIHRvIGluY2x1ZGUgYG51bGxgLlxuICByZXR1cm4gdXNlQ29udGV4dChQYXRobmFtZUNvbnRleHQpIGFzIHN0cmluZ1xufVxuXG4vLyBDbGllbnQgY29tcG9uZW50cyBBUElcbmV4cG9ydCB7XG4gIFNlcnZlckluc2VydGVkSFRNTENvbnRleHQsXG4gIHVzZVNlcnZlckluc2VydGVkSFRNTCxcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9zZXJ2ZXItaW5zZXJ0ZWQtaHRtbC5zaGFyZWQtcnVudGltZSdcblxuLyoqXG4gKlxuICogVGhpcyBob29rIGFsbG93cyB5b3UgdG8gcHJvZ3JhbW1hdGljYWxseSBjaGFuZ2Ugcm91dGVzIGluc2lkZSBbQ2xpZW50IENvbXBvbmVudF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcmVuZGVyaW5nL2NsaWVudC1jb21wb25lbnRzKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIFwidXNlIGNsaWVudFwiXG4gKiBpbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXG4gKlxuICogZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUGFnZSgpIHtcbiAqICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKVxuICogIC8vIC4uLlxuICogIHJvdXRlci5wdXNoKCcvZGFzaGJvYXJkJykgLy8gTmF2aWdhdGUgdG8gL2Rhc2hib2FyZFxuICogfVxuICogYGBgXG4gKlxuICogUmVhZCBtb3JlOiBbTmV4dC5qcyBEb2NzOiBgdXNlUm91dGVyYF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvZnVuY3Rpb25zL3VzZS1yb3V0ZXIpXG4gKi9cbi8vIENsaWVudCBjb21wb25lbnRzIEFQSVxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJvdXRlcigpOiBBcHBSb3V0ZXJJbnN0YW5jZSB7XG4gIGNvbnN0IHJvdXRlciA9IHVzZUNvbnRleHQoQXBwUm91dGVyQ29udGV4dClcbiAgaWYgKHJvdXRlciA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YXJpYW50IGV4cGVjdGVkIGFwcCByb3V0ZXIgdG8gYmUgbW91bnRlZCcpXG4gIH1cblxuICByZXR1cm4gcm91dGVyXG59XG5cbi8qKlxuICogQSBbQ2xpZW50IENvbXBvbmVudF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcmVuZGVyaW5nL2NsaWVudC1jb21wb25lbnRzKSBob29rXG4gKiB0aGF0IGxldHMgeW91IHJlYWQgYSByb3V0ZSdzIGR5bmFtaWMgcGFyYW1zIGZpbGxlZCBpbiBieSB0aGUgY3VycmVudCBVUkwuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBcInVzZSBjbGllbnRcIlxuICogaW1wb3J0IHsgdXNlUGFyYW1zIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uJ1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFBhZ2UoKSB7XG4gKiAgIC8vIG9uIC9kYXNoYm9hcmQvW3RlYW1dIHdoZXJlIHBhdGhuYW1lIGlzIC9kYXNoYm9hcmQvbmV4dGpzXG4gKiAgIGNvbnN0IHsgdGVhbSB9ID0gdXNlUGFyYW1zKCkgLy8gdGVhbSA9PT0gXCJuZXh0anNcIlxuICogfVxuICogYGBgXG4gKlxuICogUmVhZCBtb3JlOiBbTmV4dC5qcyBEb2NzOiBgdXNlUGFyYW1zYF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvZnVuY3Rpb25zL3VzZS1wYXJhbXMpXG4gKi9cbi8vIENsaWVudCBjb21wb25lbnRzIEFQSVxuZXhwb3J0IGZ1bmN0aW9uIHVzZVBhcmFtczxUIGV4dGVuZHMgUGFyYW1zID0gUGFyYW1zPigpOiBUIHtcbiAgdXNlRHluYW1pY1JvdXRlUGFyYW1zPy4oJ3VzZVBhcmFtcygpJylcblxuICByZXR1cm4gdXNlQ29udGV4dChQYXRoUGFyYW1zQ29udGV4dCkgYXMgVFxufVxuXG4vKiogR2V0IHRoZSBjYW5vbmljYWwgcGFyYW1ldGVycyBmcm9tIHRoZSBjdXJyZW50IGxldmVsIHRvIHRoZSBsZWFmIG5vZGUuICovXG4vLyBDbGllbnQgY29tcG9uZW50cyBBUElcbmZ1bmN0aW9uIGdldFNlbGVjdGVkTGF5b3V0U2VnbWVudFBhdGgoXG4gIHRyZWU6IEZsaWdodFJvdXRlclN0YXRlLFxuICBwYXJhbGxlbFJvdXRlS2V5OiBzdHJpbmcsXG4gIGZpcnN0ID0gdHJ1ZSxcbiAgc2VnbWVudFBhdGg6IHN0cmluZ1tdID0gW11cbik6IHN0cmluZ1tdIHtcbiAgbGV0IG5vZGU6IEZsaWdodFJvdXRlclN0YXRlXG4gIGlmIChmaXJzdCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYWxsZWwgcm91dGUga2V5IG9uIHRoZSBmaXJzdCBwYXJhbGxlbCByb3V0ZVxuICAgIG5vZGUgPSB0cmVlWzFdW3BhcmFsbGVsUm91dGVLZXldXG4gIH0gZWxzZSB7XG4gICAgLy8gQWZ0ZXIgZmlyc3QgcGFyYWxsZWwgcm91dGUgcHJlZmVyIGNoaWxkcmVuLCBpZiB0aGVyZSdzIG5vIGNoaWxkcmVuIHBpY2sgdGhlIGZpcnN0IHBhcmFsbGVsIHJvdXRlLlxuICAgIGNvbnN0IHBhcmFsbGVsUm91dGVzID0gdHJlZVsxXVxuICAgIG5vZGUgPSBwYXJhbGxlbFJvdXRlcy5jaGlsZHJlbiA/PyBPYmplY3QudmFsdWVzKHBhcmFsbGVsUm91dGVzKVswXVxuICB9XG5cbiAgaWYgKCFub2RlKSByZXR1cm4gc2VnbWVudFBhdGhcbiAgY29uc3Qgc2VnbWVudCA9IG5vZGVbMF1cblxuICBsZXQgc2VnbWVudFZhbHVlID0gZ2V0U2VnbWVudFZhbHVlKHNlZ21lbnQpXG5cbiAgaWYgKCFzZWdtZW50VmFsdWUgfHwgc2VnbWVudFZhbHVlLnN0YXJ0c1dpdGgoUEFHRV9TRUdNRU5UX0tFWSkpIHtcbiAgICByZXR1cm4gc2VnbWVudFBhdGhcbiAgfVxuXG4gIHNlZ21lbnRQYXRoLnB1c2goc2VnbWVudFZhbHVlKVxuXG4gIHJldHVybiBnZXRTZWxlY3RlZExheW91dFNlZ21lbnRQYXRoKFxuICAgIG5vZGUsXG4gICAgcGFyYWxsZWxSb3V0ZUtleSxcbiAgICBmYWxzZSxcbiAgICBzZWdtZW50UGF0aFxuICApXG59XG5cbi8qKlxuICogQSBbQ2xpZW50IENvbXBvbmVudF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcmVuZGVyaW5nL2NsaWVudC1jb21wb25lbnRzKSBob29rXG4gKiB0aGF0IGxldHMgeW91IHJlYWQgdGhlIGFjdGl2ZSByb3V0ZSBzZWdtZW50cyAqKmJlbG93KiogdGhlIExheW91dCBpdCBpcyBjYWxsZWQgZnJvbS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqICd1c2UgY2xpZW50J1xuICpcbiAqIGltcG9ydCB7IHVzZVNlbGVjdGVkTGF5b3V0U2VnbWVudHMgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXG4gKlxuICogZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRXhhbXBsZUNsaWVudENvbXBvbmVudCgpIHtcbiAqICAgY29uc3Qgc2VnbWVudHMgPSB1c2VTZWxlY3RlZExheW91dFNlZ21lbnRzKClcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPHVsPlxuICogICAgICAge3NlZ21lbnRzLm1hcCgoc2VnbWVudCwgaW5kZXgpID0+IChcbiAqICAgICAgICAgPGxpIGtleT17aW5kZXh9PntzZWdtZW50fTwvbGk+XG4gKiAgICAgICApKX1cbiAqICAgICA8L3VsPlxuICogICApXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBSZWFkIG1vcmU6IFtOZXh0LmpzIERvY3M6IGB1c2VTZWxlY3RlZExheW91dFNlZ21lbnRzYF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvZnVuY3Rpb25zL3VzZS1zZWxlY3RlZC1sYXlvdXQtc2VnbWVudHMpXG4gKi9cbi8vIENsaWVudCBjb21wb25lbnRzIEFQSVxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNlbGVjdGVkTGF5b3V0U2VnbWVudHMoXG4gIHBhcmFsbGVsUm91dGVLZXk6IHN0cmluZyA9ICdjaGlsZHJlbidcbik6IHN0cmluZ1tdIHtcbiAgdXNlRHluYW1pY1JvdXRlUGFyYW1zPy4oJ3VzZVNlbGVjdGVkTGF5b3V0U2VnbWVudHMoKScpXG5cbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoTGF5b3V0Um91dGVyQ29udGV4dClcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBUaGlzIG9ubHkgaGFwcGVucyBpbiBgcGFnZXNgLiBUeXBlIGlzIG92ZXJ3cml0dGVuIGluIG5hdmlnYXRpb24uZC50c1xuICBpZiAoIWNvbnRleHQpIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIGdldFNlbGVjdGVkTGF5b3V0U2VnbWVudFBhdGgoY29udGV4dC5wYXJlbnRUcmVlLCBwYXJhbGxlbFJvdXRlS2V5KVxufVxuXG4vKipcbiAqIEEgW0NsaWVudCBDb21wb25lbnRdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL3JlbmRlcmluZy9jbGllbnQtY29tcG9uZW50cykgaG9va1xuICogdGhhdCBsZXRzIHlvdSByZWFkIHRoZSBhY3RpdmUgcm91dGUgc2VnbWVudCAqKm9uZSBsZXZlbCBiZWxvdyoqIHRoZSBMYXlvdXQgaXQgaXMgY2FsbGVkIGZyb20uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAndXNlIGNsaWVudCdcbiAqIGltcG9ydCB7IHVzZVNlbGVjdGVkTGF5b3V0U2VnbWVudCB9IGZyb20gJ25leHQvbmF2aWdhdGlvbidcbiAqXG4gKiBleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFeGFtcGxlQ2xpZW50Q29tcG9uZW50KCkge1xuICogICBjb25zdCBzZWdtZW50ID0gdXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50KClcbiAqXG4gKiAgIHJldHVybiA8cD5BY3RpdmUgc2VnbWVudDoge3NlZ21lbnR9PC9wPlxuICogfVxuICogYGBgXG4gKlxuICogUmVhZCBtb3JlOiBbTmV4dC5qcyBEb2NzOiBgdXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50YF0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvZnVuY3Rpb25zL3VzZS1zZWxlY3RlZC1sYXlvdXQtc2VnbWVudClcbiAqL1xuLy8gQ2xpZW50IGNvbXBvbmVudHMgQVBJXG5leHBvcnQgZnVuY3Rpb24gdXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50KFxuICBwYXJhbGxlbFJvdXRlS2V5OiBzdHJpbmcgPSAnY2hpbGRyZW4nXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgdXNlRHluYW1pY1JvdXRlUGFyYW1zPy4oJ3VzZVNlbGVjdGVkTGF5b3V0U2VnbWVudCgpJylcblxuICBjb25zdCBzZWxlY3RlZExheW91dFNlZ21lbnRzID0gdXNlU2VsZWN0ZWRMYXlvdXRTZWdtZW50cyhwYXJhbGxlbFJvdXRlS2V5KVxuXG4gIGlmICghc2VsZWN0ZWRMYXlvdXRTZWdtZW50cyB8fCBzZWxlY3RlZExheW91dFNlZ21lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBzZWxlY3RlZExheW91dFNlZ21lbnQgPVxuICAgIHBhcmFsbGVsUm91dGVLZXkgPT09ICdjaGlsZHJlbidcbiAgICAgID8gc2VsZWN0ZWRMYXlvdXRTZWdtZW50c1swXVxuICAgICAgOiBzZWxlY3RlZExheW91dFNlZ21lbnRzW3NlbGVjdGVkTGF5b3V0U2VnbWVudHMubGVuZ3RoIC0gMV1cblxuICAvLyBpZiB0aGUgZGVmYXVsdCBzbG90IGlzIHNob3dpbmcsIHdlIHJldHVybiBudWxsIHNpbmNlIGl0J3Mgbm90IHRlY2huaWNhbGx5IFwic2VsZWN0ZWRcIiAoaXQncyBhIGZhbGxiYWNrKVxuICAvLyBhbmQgcmV0dXJuaW5nIGFuIGludGVybmFsIHZhbHVlIGxpa2UgYF9fREVGQVVMVF9fYCB3b3VsZCBiZSBjb25mdXNpbmcuXG4gIHJldHVybiBzZWxlY3RlZExheW91dFNlZ21lbnQgPT09IERFRkFVTFRfU0VHTUVOVF9LRVlcbiAgICA/IG51bGxcbiAgICA6IHNlbGVjdGVkTGF5b3V0U2VnbWVudFxufVxuXG4vLyBTaGFyZWQgY29tcG9uZW50cyBBUElzXG5leHBvcnQge1xuICBub3RGb3VuZCxcbiAgZm9yYmlkZGVuLFxuICB1bmF1dGhvcml6ZWQsXG4gIHJlZGlyZWN0LFxuICBwZXJtYW5lbnRSZWRpcmVjdCxcbiAgUmVkaXJlY3RUeXBlLFxuICBSZWFkb25seVVSTFNlYXJjaFBhcmFtcyxcbiAgdW5zdGFibGVfcmV0aHJvdyxcbn0gZnJvbSAnLi9uYXZpZ2F0aW9uLnJlYWN0LXNlcnZlcidcbiJdLCJuYW1lcyI6WyJSZWFkb25seVVSTFNlYXJjaFBhcmFtcyIsIlJlZGlyZWN0VHlwZSIsIlNlcnZlckluc2VydGVkSFRNTENvbnRleHQiLCJmb3JiaWRkZW4iLCJub3RGb3VuZCIsInBlcm1hbmVudFJlZGlyZWN0IiwicmVkaXJlY3QiLCJ1bmF1dGhvcml6ZWQiLCJ1bnN0YWJsZV9yZXRocm93IiwidXNlUGFyYW1zIiwidXNlUGF0aG5hbWUiLCJ1c2VSb3V0ZXIiLCJ1c2VTZWFyY2hQYXJhbXMiLCJ1c2VTZWxlY3RlZExheW91dFNlZ21lbnQiLCJ1c2VTZWxlY3RlZExheW91dFNlZ21lbnRzIiwidXNlU2VydmVySW5zZXJ0ZWRIVE1MIiwidXNlRHluYW1pY1JvdXRlUGFyYW1zIiwid2luZG93IiwicmVxdWlyZSIsInVuZGVmaW5lZCIsInNlYXJjaFBhcmFtcyIsInVzZUNvbnRleHQiLCJTZWFyY2hQYXJhbXNDb250ZXh0IiwicmVhZG9ubHlTZWFyY2hQYXJhbXMiLCJ1c2VNZW1vIiwiYmFpbG91dFRvQ2xpZW50UmVuZGVyaW5nIiwiUGF0aG5hbWVDb250ZXh0Iiwicm91dGVyIiwiQXBwUm91dGVyQ29udGV4dCIsIkVycm9yIiwiUGF0aFBhcmFtc0NvbnRleHQiLCJnZXRTZWxlY3RlZExheW91dFNlZ21lbnRQYXRoIiwidHJlZSIsInBhcmFsbGVsUm91dGVLZXkiLCJmaXJzdCIsInNlZ21lbnRQYXRoIiwibm9kZSIsInBhcmFsbGVsUm91dGVzIiwiY2hpbGRyZW4iLCJPYmplY3QiLCJ2YWx1ZXMiLCJzZWdtZW50Iiwic2VnbWVudFZhbHVlIiwiZ2V0U2VnbWVudFZhbHVlIiwic3RhcnRzV2l0aCIsIlBBR0VfU0VHTUVOVF9LRVkiLCJwdXNoIiwiY29udGV4dCIsIkxheW91dFJvdXRlckNvbnRleHQiLCJwYXJlbnRUcmVlIiwic2VsZWN0ZWRMYXlvdXRTZWdtZW50cyIsImxlbmd0aCIsInNlbGVjdGVkTGF5b3V0U2VnbWVudCIsIkRFRkFVTFRfU0VHTUVOVF9LRVkiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/navigation.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/navigation.react-server.js":
/*!*************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/navigation.react-server.js ***!
  \*************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/** @internal */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    ReadonlyURLSearchParams: function() {\n        return ReadonlyURLSearchParams;\n    },\n    RedirectType: function() {\n        return _redirecterror.RedirectType;\n    },\n    forbidden: function() {\n        return _forbidden.forbidden;\n    },\n    notFound: function() {\n        return _notfound.notFound;\n    },\n    permanentRedirect: function() {\n        return _redirect.permanentRedirect;\n    },\n    redirect: function() {\n        return _redirect.redirect;\n    },\n    unauthorized: function() {\n        return _unauthorized.unauthorized;\n    },\n    unstable_rethrow: function() {\n        return _unstablerethrow.unstable_rethrow;\n    }\n});\nconst _redirect = __webpack_require__(/*! ./redirect */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect.js\");\nconst _redirecterror = __webpack_require__(/*! ./redirect-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect-error.js\");\nconst _notfound = __webpack_require__(/*! ./not-found */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/not-found.js\");\nconst _forbidden = __webpack_require__(/*! ./forbidden */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/forbidden.js\");\nconst _unauthorized = __webpack_require__(/*! ./unauthorized */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/unauthorized.js\");\nconst _unstablerethrow = __webpack_require__(/*! ./unstable-rethrow */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/unstable-rethrow.js\");\nclass ReadonlyURLSearchParamsError extends Error {\n    constructor(){\n        super('Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams');\n    }\n}\nclass ReadonlyURLSearchParams extends URLSearchParams {\n    /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */ append() {\n        throw new ReadonlyURLSearchParamsError();\n    }\n    /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */ delete() {\n        throw new ReadonlyURLSearchParamsError();\n    }\n    /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */ set() {\n        throw new ReadonlyURLSearchParamsError();\n    }\n    /** @deprecated Method unavailable on `ReadonlyURLSearchParams`. Read more: https://nextjs.org/docs/app/api-reference/functions/use-search-params#updating-searchparams */ sort() {\n        throw new ReadonlyURLSearchParamsError();\n    }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=navigation.react-server.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9uYXZpZ2F0aW9uLnJlYWN0LXNlcnZlci5qcyIsIm1hcHBpbmdzIjoiQUFBQSxjQUFjOzs7Ozs7Ozs7Ozs7SUFrQ0xBLHVCQUF1QjtlQUF2QkE7O0lBTEFDLFlBQVk7ZUFBWkEsZUFBQUEsWUFBWTs7SUFFWkMsU0FBUztlQUFUQSxXQUFBQSxTQUFTOztJQURUQyxRQUFRO2VBQVJBLFVBQUFBLFFBQVE7O0lBRkVDLGlCQUFpQjtlQUFqQkEsVUFBQUEsaUJBQWlCOztJQUEzQkMsUUFBUTtlQUFSQSxVQUFBQSxRQUFROztJQUlSQyxZQUFZO2VBQVpBLGNBQUFBLFlBQVk7O0lBQ1pDLGdCQUFnQjtlQUFoQkEsaUJBQUFBLGdCQUFnQjs7O3NDQUxtQjsyQ0FDZjtzQ0FDSjt1Q0FDQzswQ0FDRzs2Q0FDSTtBQWhDakMsTUFBTUMscUNBQXFDQztJQUN6Q0MsYUFBYztRQUNaLEtBQUssQ0FDSDtJQUVKO0FBQ0Y7QUFFQSxNQUFNVixnQ0FBZ0NXO0lBQ3BDLHdLQUF3SyxHQUN4S0MsU0FBUztRQUNQLE1BQU0sSUFBSUo7SUFDWjtJQUNBLHdLQUF3SyxHQUN4S0ssU0FBUztRQUNQLE1BQU0sSUFBSUw7SUFDWjtJQUNBLHdLQUF3SyxHQUN4S00sTUFBTTtRQUNKLE1BQU0sSUFBSU47SUFDWjtJQUNBLHdLQUF3SyxHQUN4S08sT0FBTztRQUNMLE1BQU0sSUFBSVA7SUFDWjtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL3NyYy9jbGllbnQvY29tcG9uZW50cy9uYXZpZ2F0aW9uLnJlYWN0LXNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGludGVybmFsICovXG5jbGFzcyBSZWFkb25seVVSTFNlYXJjaFBhcmFtc0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcbiAgICAgICdNZXRob2QgdW5hdmFpbGFibGUgb24gYFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zYC4gUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9mdW5jdGlvbnMvdXNlLXNlYXJjaC1wYXJhbXMjdXBkYXRpbmctc2VhcmNocGFyYW1zJ1xuICAgIClcbiAgfVxufVxuXG5jbGFzcyBSZWFkb25seVVSTFNlYXJjaFBhcmFtcyBleHRlbmRzIFVSTFNlYXJjaFBhcmFtcyB7XG4gIC8qKiBAZGVwcmVjYXRlZCBNZXRob2QgdW5hdmFpbGFibGUgb24gYFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zYC4gUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9mdW5jdGlvbnMvdXNlLXNlYXJjaC1wYXJhbXMjdXBkYXRpbmctc2VhcmNocGFyYW1zICovXG4gIGFwcGVuZCgpIHtcbiAgICB0aHJvdyBuZXcgUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXNFcnJvcigpXG4gIH1cbiAgLyoqIEBkZXByZWNhdGVkIE1ldGhvZCB1bmF2YWlsYWJsZSBvbiBgUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXNgLiBSZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2Z1bmN0aW9ucy91c2Utc2VhcmNoLXBhcmFtcyN1cGRhdGluZy1zZWFyY2hwYXJhbXMgKi9cbiAgZGVsZXRlKCkge1xuICAgIHRocm93IG5ldyBSZWFkb25seVVSTFNlYXJjaFBhcmFtc0Vycm9yKClcbiAgfVxuICAvKiogQGRlcHJlY2F0ZWQgTWV0aG9kIHVuYXZhaWxhYmxlIG9uIGBSZWFkb25seVVSTFNlYXJjaFBhcmFtc2AuIFJlYWQgbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvZnVuY3Rpb25zL3VzZS1zZWFyY2gtcGFyYW1zI3VwZGF0aW5nLXNlYXJjaHBhcmFtcyAqL1xuICBzZXQoKSB7XG4gICAgdGhyb3cgbmV3IFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zRXJyb3IoKVxuICB9XG4gIC8qKiBAZGVwcmVjYXRlZCBNZXRob2QgdW5hdmFpbGFibGUgb24gYFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zYC4gUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9mdW5jdGlvbnMvdXNlLXNlYXJjaC1wYXJhbXMjdXBkYXRpbmctc2VhcmNocGFyYW1zICovXG4gIHNvcnQoKSB7XG4gICAgdGhyb3cgbmV3IFJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zRXJyb3IoKVxuICB9XG59XG5cbmV4cG9ydCB7IHJlZGlyZWN0LCBwZXJtYW5lbnRSZWRpcmVjdCB9IGZyb20gJy4vcmVkaXJlY3QnXG5leHBvcnQgeyBSZWRpcmVjdFR5cGUgfSBmcm9tICcuL3JlZGlyZWN0LWVycm9yJ1xuZXhwb3J0IHsgbm90Rm91bmQgfSBmcm9tICcuL25vdC1mb3VuZCdcbmV4cG9ydCB7IGZvcmJpZGRlbiB9IGZyb20gJy4vZm9yYmlkZGVuJ1xuZXhwb3J0IHsgdW5hdXRob3JpemVkIH0gZnJvbSAnLi91bmF1dGhvcml6ZWQnXG5leHBvcnQgeyB1bnN0YWJsZV9yZXRocm93IH0gZnJvbSAnLi91bnN0YWJsZS1yZXRocm93J1xuZXhwb3J0IHsgUmVhZG9ubHlVUkxTZWFyY2hQYXJhbXMgfVxuIl0sIm5hbWVzIjpbIlJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zIiwiUmVkaXJlY3RUeXBlIiwiZm9yYmlkZGVuIiwibm90Rm91bmQiLCJwZXJtYW5lbnRSZWRpcmVjdCIsInJlZGlyZWN0IiwidW5hdXRob3JpemVkIiwidW5zdGFibGVfcmV0aHJvdyIsIlJlYWRvbmx5VVJMU2VhcmNoUGFyYW1zRXJyb3IiLCJFcnJvciIsImNvbnN0cnVjdG9yIiwiVVJMU2VhcmNoUGFyYW1zIiwiYXBwZW5kIiwiZGVsZXRlIiwic2V0Iiwic29ydCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/navigation.react-server.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/not-found.js":
/*!***********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/not-found.js ***!
  \***********************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"notFound\", ({\n    enumerable: true,\n    get: function() {\n        return notFound;\n    }\n}));\nconst _httpaccessfallback = __webpack_require__(/*! ./http-access-fallback/http-access-fallback */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js\");\n/**\n * This function allows you to render the [not-found.js file](https://nextjs.org/docs/app/api-reference/file-conventions/not-found)\n * within a route segment as well as inject a tag.\n *\n * `notFound()` can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n * - In a Server Component, this will insert a `<meta name=\"robots\" content=\"noindex\" />` meta tag and set the status code to 404.\n * - In a Route Handler or Server Action, it will serve a 404 to the caller.\n *\n * Read more: [Next.js Docs: `notFound`](https://nextjs.org/docs/app/api-reference/functions/not-found)\n */ const DIGEST = \"\" + _httpaccessfallback.HTTP_ERROR_FALLBACK_ERROR_CODE + \";404\";\nfunction notFound() {\n    // eslint-disable-next-line no-throw-literal\n    const error = Object.defineProperty(new Error(DIGEST), \"__NEXT_ERROR_CODE\", {\n        value: \"E394\",\n        enumerable: false,\n        configurable: true\n    });\n    error.digest = DIGEST;\n    throw error;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=not-found.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9ub3QtZm91bmQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs0Q0FzQmdCQTs7O2VBQUFBOzs7Z0RBbkJUO0FBRVA7Ozs7Ozs7Ozs7Ozs7Q0FhQyxHQUVELE1BQU1DLFNBQVUsS0FBRUMsb0JBQUFBLDhCQUE4QixHQUFDO0FBRTFDLFNBQVNGO0lBQ2QsNENBQTRDO0lBQzVDLE1BQU1HLFFBQVEscUJBQWlCLENBQWpCLElBQUlDLE1BQU1ILFNBQVY7ZUFBQTtvQkFBQTtzQkFBQTtJQUFnQjtJQUM1QkUsTUFBa0NFLE1BQU0sR0FBR0o7SUFFN0MsTUFBTUU7QUFDUiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9zcmMvY2xpZW50L2NvbXBvbmVudHMvbm90LWZvdW5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEhUVFBfRVJST1JfRkFMTEJBQ0tfRVJST1JfQ09ERSxcbiAgdHlwZSBIVFRQQWNjZXNzRmFsbGJhY2tFcnJvcixcbn0gZnJvbSAnLi9odHRwLWFjY2Vzcy1mYWxsYmFjay9odHRwLWFjY2Vzcy1mYWxsYmFjaydcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gcmVuZGVyIHRoZSBbbm90LWZvdW5kLmpzIGZpbGVdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2ZpbGUtY29udmVudGlvbnMvbm90LWZvdW5kKVxuICogd2l0aGluIGEgcm91dGUgc2VnbWVudCBhcyB3ZWxsIGFzIGluamVjdCBhIHRhZy5cbiAqXG4gKiBgbm90Rm91bmQoKWAgY2FuIGJlIHVzZWQgaW5cbiAqIFtTZXJ2ZXIgQ29tcG9uZW50c10oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcmVuZGVyaW5nL3NlcnZlci1jb21wb25lbnRzKSxcbiAqIFtSb3V0ZSBIYW5kbGVyc10oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcm91dGluZy9yb3V0ZS1oYW5kbGVycyksIGFuZFxuICogW1NlcnZlciBBY3Rpb25zXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9kYXRhLWZldGNoaW5nL3NlcnZlci1hY3Rpb25zLWFuZC1tdXRhdGlvbnMpLlxuICpcbiAqIC0gSW4gYSBTZXJ2ZXIgQ29tcG9uZW50LCB0aGlzIHdpbGwgaW5zZXJ0IGEgYDxtZXRhIG5hbWU9XCJyb2JvdHNcIiBjb250ZW50PVwibm9pbmRleFwiIC8+YCBtZXRhIHRhZyBhbmQgc2V0IHRoZSBzdGF0dXMgY29kZSB0byA0MDQuXG4gKiAtIEluIGEgUm91dGUgSGFuZGxlciBvciBTZXJ2ZXIgQWN0aW9uLCBpdCB3aWxsIHNlcnZlIGEgNDA0IHRvIHRoZSBjYWxsZXIuXG4gKlxuICogUmVhZCBtb3JlOiBbTmV4dC5qcyBEb2NzOiBgbm90Rm91bmRgXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9mdW5jdGlvbnMvbm90LWZvdW5kKVxuICovXG5cbmNvbnN0IERJR0VTVCA9IGAke0hUVFBfRVJST1JfRkFMTEJBQ0tfRVJST1JfQ09ERX07NDA0YFxuXG5leHBvcnQgZnVuY3Rpb24gbm90Rm91bmQoKTogbmV2ZXIge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihESUdFU1QpIGFzIEhUVFBBY2Nlc3NGYWxsYmFja0Vycm9yXG4gIDsoZXJyb3IgYXMgSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3IpLmRpZ2VzdCA9IERJR0VTVFxuXG4gIHRocm93IGVycm9yXG59XG4iXSwibmFtZXMiOlsibm90Rm91bmQiLCJESUdFU1QiLCJIVFRQX0VSUk9SX0ZBTExCQUNLX0VSUk9SX0NPREUiLCJlcnJvciIsIkVycm9yIiwiZGlnZXN0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/not-found.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/promise-queue.js":
/*!***************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/promise-queue.js ***!
  \***************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/*\n    This is a simple promise queue that allows you to limit the number of concurrent promises\n    that are running at any given time. It's used to limit the number of concurrent\n    prefetch requests that are being made to the server but could be used for other\n    things as well.\n*/ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"PromiseQueue\", ({\n    enumerable: true,\n    get: function() {\n        return PromiseQueue;\n    }\n}));\nconst _class_private_field_loose_base = __webpack_require__(/*! @swc/helpers/_/_class_private_field_loose_base */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_class_private_field_loose_base.js\");\nconst _class_private_field_loose_key = __webpack_require__(/*! @swc/helpers/_/_class_private_field_loose_key */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_class_private_field_loose_key.js\");\nvar _maxConcurrency = /*#__PURE__*/ _class_private_field_loose_key._(\"_maxConcurrency\"), _runningCount = /*#__PURE__*/ _class_private_field_loose_key._(\"_runningCount\"), _queue = /*#__PURE__*/ _class_private_field_loose_key._(\"_queue\"), _processNext = /*#__PURE__*/ _class_private_field_loose_key._(\"_processNext\");\nclass PromiseQueue {\n    enqueue(promiseFn) {\n        let taskResolve;\n        let taskReject;\n        const taskPromise = new Promise((resolve, reject)=>{\n            taskResolve = resolve;\n            taskReject = reject;\n        });\n        const task = async ()=>{\n            try {\n                _class_private_field_loose_base._(this, _runningCount)[_runningCount]++;\n                const result = await promiseFn();\n                taskResolve(result);\n            } catch (error) {\n                taskReject(error);\n            } finally{\n                _class_private_field_loose_base._(this, _runningCount)[_runningCount]--;\n                _class_private_field_loose_base._(this, _processNext)[_processNext]();\n            }\n        };\n        const enqueueResult = {\n            promiseFn: taskPromise,\n            task\n        };\n        // wonder if we should take a LIFO approach here\n        _class_private_field_loose_base._(this, _queue)[_queue].push(enqueueResult);\n        _class_private_field_loose_base._(this, _processNext)[_processNext]();\n        return taskPromise;\n    }\n    bump(promiseFn) {\n        const index = _class_private_field_loose_base._(this, _queue)[_queue].findIndex((item)=>item.promiseFn === promiseFn);\n        if (index > -1) {\n            const bumpedItem = _class_private_field_loose_base._(this, _queue)[_queue].splice(index, 1)[0];\n            _class_private_field_loose_base._(this, _queue)[_queue].unshift(bumpedItem);\n            _class_private_field_loose_base._(this, _processNext)[_processNext](true);\n        }\n    }\n    constructor(maxConcurrency = 5){\n        Object.defineProperty(this, _processNext, {\n            value: processNext\n        });\n        Object.defineProperty(this, _maxConcurrency, {\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, _runningCount, {\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, _queue, {\n            writable: true,\n            value: void 0\n        });\n        _class_private_field_loose_base._(this, _maxConcurrency)[_maxConcurrency] = maxConcurrency;\n        _class_private_field_loose_base._(this, _runningCount)[_runningCount] = 0;\n        _class_private_field_loose_base._(this, _queue)[_queue] = [];\n    }\n}\nfunction processNext(forced) {\n    if (forced === void 0) forced = false;\n    if ((_class_private_field_loose_base._(this, _runningCount)[_runningCount] < _class_private_field_loose_base._(this, _maxConcurrency)[_maxConcurrency] || forced) && _class_private_field_loose_base._(this, _queue)[_queue].length > 0) {\n        var _class_private_field_loose_base__queue_shift;\n        (_class_private_field_loose_base__queue_shift = _class_private_field_loose_base._(this, _queue)[_queue].shift()) == null ? void 0 : _class_private_field_loose_base__queue_shift.task();\n    }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=promise-queue.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9wcm9taXNlLXF1ZXVlLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7OztBQUtBOzs7O2dEQUNhQTs7O2VBQUFBOzs7OztJQUNYLHFGQUNBLGlGQUNBLG1FQW1EQTtBQXRESyxNQUFNQTtJQWNYQyxRQUFXQyxTQUEyQixFQUFjO1FBQ2xELElBQUlDO1FBQ0osSUFBSUM7UUFFSixNQUFNQyxjQUFjLElBQUlDLFFBQVEsQ0FBQ0MsU0FBU0M7WUFDeENMLGNBQWNJO1lBQ2RILGFBQWFJO1FBQ2Y7UUFFQSxNQUFNQyxPQUFPO1lBQ1gsSUFBSTtnQkFDRixzQ0FBSSxFQUFDO2dCQUNMLE1BQU1DLFNBQVMsTUFBTVI7Z0JBQ3JCQyxZQUFZTztZQUNkLEVBQUUsT0FBT0MsT0FBTztnQkFDZFAsV0FBV087WUFDYixTQUFVO2dCQUNSLHNDQUFJLEVBQUM7Z0JBQ0wsc0NBQUksRUFBQztZQUNQO1FBQ0Y7UUFFQSxNQUFNQyxnQkFBZ0I7WUFBRVYsV0FBV0c7WUFBYUk7UUFBSztRQUNyRCxnREFBZ0Q7UUFDaEQsc0NBQUksRUFBQyxnQkFBT0ksSUFBSSxDQUFDRDtRQUNqQixzQ0FBSSxFQUFDO1FBRUwsT0FBT1A7SUFDVDtJQUVBUyxLQUFLWixTQUF1QixFQUFFO1FBQzVCLE1BQU1hLFFBQVEsc0NBQUksRUFBQyxnQkFBT0MsU0FBUyxDQUFDLENBQUNDLE9BQVNBLEtBQUtmLFNBQVMsS0FBS0E7UUFFakUsSUFBSWEsUUFBUSxDQUFDLEdBQUc7WUFDZCxNQUFNRyxhQUFhLHNDQUFJLEVBQUMsZ0JBQU9DLE1BQU0sQ0FBQ0osT0FBTyxFQUFFLENBQUMsRUFBRTtZQUNsRCxzQ0FBSSxFQUFDLGdCQUFPSyxPQUFPLENBQUNGO1lBQ3BCLHNDQUFJLEVBQUMsNEJBQWE7UUFDcEI7SUFDRjtJQTVDQUcsWUFBWUMsaUJBQWlCLENBQUMsQ0FBRTtRQThDaEM7bUJBQUE7O1FBckRBOzttQkFBQTs7UUFDQTs7bUJBQUE7O1FBQ0E7O21CQUFBOztRQU1FLHNDQUFJLEVBQUMsb0NBQWtCQTtRQUN2QixzQ0FBSSxFQUFDLGdDQUFnQjtRQUNyQixzQ0FBSSxFQUFDLGtCQUFTLEVBQUU7SUFDbEI7QUFrREY7QUFSRSxxQkFBYUMsTUFBYztJQUFkQSxJQUFBQSxXQUFBQSxLQUFBQSxHQUFBQSxTQUFTO0lBQ3BCLElBQ0csdUNBQUksRUFBQyxnQ0FBZ0Isc0NBQUksRUFBQyxxQ0FBbUJBLE1BQUFBLENBQUssSUFDbkQsc0NBQUksRUFBQyxnQkFBT0MsTUFBTSxHQUFHLEdBQ3JCO1lBQ0E7U0FBQSxxRkFBSSxFQUFDLGdCQUFPQyxLQUFLLHVCQUFqQiw2Q0FBcUJoQixJQUFJO0lBQzNCO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL2NsaWVudC9jb21wb25lbnRzL3Byb21pc2UtcXVldWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgICBUaGlzIGlzIGEgc2ltcGxlIHByb21pc2UgcXVldWUgdGhhdCBhbGxvd3MgeW91IHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgY29uY3VycmVudCBwcm9taXNlc1xuICAgIHRoYXQgYXJlIHJ1bm5pbmcgYXQgYW55IGdpdmVuIHRpbWUuIEl0J3MgdXNlZCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnRcbiAgICBwcmVmZXRjaCByZXF1ZXN0cyB0aGF0IGFyZSBiZWluZyBtYWRlIHRvIHRoZSBzZXJ2ZXIgYnV0IGNvdWxkIGJlIHVzZWQgZm9yIG90aGVyXG4gICAgdGhpbmdzIGFzIHdlbGwuXG4qL1xuZXhwb3J0IGNsYXNzIFByb21pc2VRdWV1ZSB7XG4gICNtYXhDb25jdXJyZW5jeTogbnVtYmVyXG4gICNydW5uaW5nQ291bnQ6IG51bWJlclxuICAjcXVldWU6IEFycmF5PHtcbiAgICBwcm9taXNlRm46IFByb21pc2U8YW55PlxuICAgIHRhc2s6ICgpID0+IHZvaWRcbiAgfT5cblxuICBjb25zdHJ1Y3RvcihtYXhDb25jdXJyZW5jeSA9IDUpIHtcbiAgICB0aGlzLiNtYXhDb25jdXJyZW5jeSA9IG1heENvbmN1cnJlbmN5XG4gICAgdGhpcy4jcnVubmluZ0NvdW50ID0gMFxuICAgIHRoaXMuI3F1ZXVlID0gW11cbiAgfVxuXG4gIGVucXVldWU8VD4ocHJvbWlzZUZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgbGV0IHRhc2tSZXNvbHZlOiAodmFsdWU6IFQgfCBQcm9taXNlTGlrZTxUPikgPT4gdm9pZFxuICAgIGxldCB0YXNrUmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkXG5cbiAgICBjb25zdCB0YXNrUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRhc2tSZXNvbHZlID0gcmVzb2x2ZVxuICAgICAgdGFza1JlamVjdCA9IHJlamVjdFxuICAgIH0pIGFzIFByb21pc2U8VD5cblxuICAgIGNvbnN0IHRhc2sgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLiNydW5uaW5nQ291bnQrK1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9taXNlRm4oKVxuICAgICAgICB0YXNrUmVzb2x2ZShyZXN1bHQpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0YXNrUmVqZWN0KGVycm9yKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy4jcnVubmluZ0NvdW50LS1cbiAgICAgICAgdGhpcy4jcHJvY2Vzc05leHQoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVucXVldWVSZXN1bHQgPSB7IHByb21pc2VGbjogdGFza1Byb21pc2UsIHRhc2sgfVxuICAgIC8vIHdvbmRlciBpZiB3ZSBzaG91bGQgdGFrZSBhIExJRk8gYXBwcm9hY2ggaGVyZVxuICAgIHRoaXMuI3F1ZXVlLnB1c2goZW5xdWV1ZVJlc3VsdClcbiAgICB0aGlzLiNwcm9jZXNzTmV4dCgpXG5cbiAgICByZXR1cm4gdGFza1Byb21pc2VcbiAgfVxuXG4gIGJ1bXAocHJvbWlzZUZuOiBQcm9taXNlPGFueT4pIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuI3F1ZXVlLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5wcm9taXNlRm4gPT09IHByb21pc2VGbilcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICBjb25zdCBidW1wZWRJdGVtID0gdGhpcy4jcXVldWUuc3BsaWNlKGluZGV4LCAxKVswXVxuICAgICAgdGhpcy4jcXVldWUudW5zaGlmdChidW1wZWRJdGVtKVxuICAgICAgdGhpcy4jcHJvY2Vzc05leHQodHJ1ZSlcbiAgICB9XG4gIH1cblxuICAjcHJvY2Vzc05leHQoZm9yY2VkID0gZmFsc2UpIHtcbiAgICBpZiAoXG4gICAgICAodGhpcy4jcnVubmluZ0NvdW50IDwgdGhpcy4jbWF4Q29uY3VycmVuY3kgfHwgZm9yY2VkKSAmJlxuICAgICAgdGhpcy4jcXVldWUubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy4jcXVldWUuc2hpZnQoKT8udGFzaygpXG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOlsiUHJvbWlzZVF1ZXVlIiwiZW5xdWV1ZSIsInByb21pc2VGbiIsInRhc2tSZXNvbHZlIiwidGFza1JlamVjdCIsInRhc2tQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ0YXNrIiwicmVzdWx0IiwiZXJyb3IiLCJlbnF1ZXVlUmVzdWx0IiwicHVzaCIsImJ1bXAiLCJpbmRleCIsImZpbmRJbmRleCIsIml0ZW0iLCJidW1wZWRJdGVtIiwic3BsaWNlIiwidW5zaGlmdCIsImNvbnN0cnVjdG9yIiwibWF4Q29uY3VycmVuY3kiLCJmb3JjZWQiLCJsZW5ndGgiLCJzaGlmdCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/promise-queue.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect-boundary.js":
/*!*******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect-boundary.js ***!
  \*******************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__  cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    RedirectBoundary: function() {\n        return RedirectBoundary;\n    },\n    RedirectErrorBoundary: function() {\n        return RedirectErrorBoundary;\n    }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"));\nconst _navigation = __webpack_require__(/*! ./navigation */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/navigation.js\");\nconst _redirect = __webpack_require__(/*! ./redirect */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect.js\");\nconst _redirecterror = __webpack_require__(/*! ./redirect-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect-error.js\");\nfunction HandleRedirect(param) {\n    let { redirect, reset, redirectType } = param;\n    const router = (0, _navigation.useRouter)();\n    (0, _react.useEffect)(()=>{\n        _react.default.startTransition(()=>{\n            if (redirectType === _redirecterror.RedirectType.push) {\n                router.push(redirect, {});\n            } else {\n                router.replace(redirect, {});\n            }\n            reset();\n        });\n    }, [\n        redirect,\n        redirectType,\n        reset,\n        router\n    ]);\n    return null;\n}\n_c = HandleRedirect;\nclass RedirectErrorBoundary extends _react.default.Component {\n    static getDerivedStateFromError(error) {\n        if ((0, _redirecterror.isRedirectError)(error)) {\n            const url = (0, _redirect.getURLFromRedirectError)(error);\n            const redirectType = (0, _redirect.getRedirectTypeFromError)(error);\n            return {\n                redirect: url,\n                redirectType\n            };\n        }\n        // Re-throw if error is not for redirect\n        throw error;\n    }\n    // Explicit type is needed to avoid the generated `.d.ts` having a wide return type that could be specific to the `@types/react` version.\n    render() {\n        const { redirect, redirectType } = this.state;\n        if (redirect !== null && redirectType !== null) {\n            return /*#__PURE__*/ (0, _jsxruntime.jsx)(HandleRedirect, {\n                redirect: redirect,\n                redirectType: redirectType,\n                reset: ()=>this.setState({\n                        redirect: null\n                    })\n            });\n        }\n        return this.props.children;\n    }\n    constructor(props){\n        super(props);\n        this.state = {\n            redirect: null,\n            redirectType: null\n        };\n    }\n}\nfunction RedirectBoundary(param) {\n    let { children } = param;\n    const router = (0, _navigation.useRouter)();\n    return /*#__PURE__*/ (0, _jsxruntime.jsx)(RedirectErrorBoundary, {\n        router: router,\n        children: children\n    });\n}\n_c1 = RedirectBoundary;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=redirect-boundary.js.map\nvar _c, _c1;\n$RefreshReg$(_c, \"HandleRedirect\");\n$RefreshReg$(_c1, \"RedirectBoundary\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWRpcmVjdC1ib3VuZGFyeS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUF5RWdCQSxnQkFBZ0I7ZUFBaEJBOztJQXBDSEMscUJBQXFCO2VBQXJCQTs7Ozs7NkVBcENvQjt3Q0FFUDtzQ0FDd0M7MkNBQ3BCO0FBTzlDLHdCQUF3QixLQVF2QjtJQVJ1QixNQUN0QkUsUUFBUSxFQUNSQyxLQUFLLEVBQ0xDLFlBQVksRUFLYixHQVJ1QjtJQVN0QixNQUFNQyxTQUFTQyxDQUFBQSxHQUFBQSxZQUFBQSxTQUFBQTtJQUVmQyxDQUFBQSxHQUFBQSxPQUFBQSxTQUFBQSxFQUFVO1FBQ1JDLE9BQUFBLE9BQUssQ0FBQ0MsZUFBZSxDQUFDO1lBQ3BCLElBQUlMLGlCQUFpQk0sZUFBQUEsWUFBWSxDQUFDQyxJQUFJLEVBQUU7Z0JBQ3RDTixPQUFPTSxJQUFJLENBQUNULFVBQVUsQ0FBQztZQUN6QixPQUFPO2dCQUNMRyxPQUFPTyxPQUFPLENBQUNWLFVBQVUsQ0FBQztZQUM1QjtZQUNBQztRQUNGO0lBQ0YsR0FBRztRQUFDRDtRQUFVRTtRQUFjRDtRQUFPRTtLQUFPO0lBRTFDLE9BQU87QUFDVDtLQXZCU0o7QUF5QkYsTUFBTUQsOEJBQThCUSxPQUFBQSxPQUFLLENBQUNLLFNBQVM7SUFTeEQsT0FBT0MseUJBQXlCQyxLQUFVLEVBQUU7UUFDMUMsSUFBSUMsQ0FBQUEsR0FBQUEsZUFBQUEsZUFBZSxFQUFDRCxRQUFRO1lBQzFCLE1BQU1FLE1BQU1DLENBQUFBLEdBQUFBLFVBQUFBLHVCQUFBQSxFQUF3Qkg7WUFDcEMsTUFBTVgsZUFBZWUsQ0FBQUEsR0FBQUEsVUFBQUEsd0JBQUFBLEVBQXlCSjtZQUM5QyxPQUFPO2dCQUFFYixVQUFVZTtnQkFBS2I7WUFBYTtRQUN2QztRQUNBLHdDQUF3QztRQUN4QyxNQUFNVztJQUNSO0lBRUEseUlBQXlJO0lBQ3pJSyxTQUEwQjtRQUN4QixNQUFNLEVBQUVsQixRQUFRLEVBQUVFLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQ2lCLEtBQUs7UUFDN0MsSUFBSW5CLGFBQWEsUUFBUUUsaUJBQWlCLE1BQU07WUFDOUMscUJBQ0UscUJBQUNILGdCQUFBQTtnQkFDQ0MsVUFBVUE7Z0JBQ1ZFLGNBQWNBO2dCQUNkRCxPQUFPLElBQU0sSUFBSSxDQUFDbUIsUUFBUSxDQUFDO3dCQUFFcEIsVUFBVTtvQkFBSzs7UUFHbEQ7UUFFQSxPQUFPLElBQUksQ0FBQ3FCLEtBQUssQ0FBQ0MsUUFBUTtJQUM1QjtJQTdCQUMsWUFBWUYsS0FBNEIsQ0FBRTtRQUN4QyxLQUFLLENBQUNBO1FBQ04sSUFBSSxDQUFDRixLQUFLLEdBQUc7WUFBRW5CLFVBQVU7WUFBTUUsY0FBYztRQUFLO0lBQ3BEO0FBMkJGO0FBRU8sMEJBQTBCLEtBQTJDO0lBQTNDLE1BQUVvQixRQUFRLEVBQWlDLEdBQTNDO0lBQy9CLE1BQU1uQixTQUFTQyxDQUFBQSxHQUFBQSxZQUFBQSxTQUFBQTtJQUNmLHFCQUNFLHFCQUFDTix1QkFBQUE7UUFBc0JLLFFBQVFBO2tCQUFTbUI7O0FBRTVDO01BTGdCekIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL2NsaWVudC9jb21wb25lbnRzL3JlZGlyZWN0LWJvdW5kYXJ5LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQXBwUm91dGVySW5zdGFuY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IHVzZVJvdXRlciB9IGZyb20gJy4vbmF2aWdhdGlvbidcbmltcG9ydCB7IGdldFJlZGlyZWN0VHlwZUZyb21FcnJvciwgZ2V0VVJMRnJvbVJlZGlyZWN0RXJyb3IgfSBmcm9tICcuL3JlZGlyZWN0J1xuaW1wb3J0IHsgUmVkaXJlY3RUeXBlLCBpc1JlZGlyZWN0RXJyb3IgfSBmcm9tICcuL3JlZGlyZWN0LWVycm9yJ1xuXG5pbnRlcmZhY2UgUmVkaXJlY3RCb3VuZGFyeVByb3BzIHtcbiAgcm91dGVyOiBBcHBSb3V0ZXJJbnN0YW5jZVxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmZ1bmN0aW9uIEhhbmRsZVJlZGlyZWN0KHtcbiAgcmVkaXJlY3QsXG4gIHJlc2V0LFxuICByZWRpcmVjdFR5cGUsXG59OiB7XG4gIHJlZGlyZWN0OiBzdHJpbmdcbiAgcmVkaXJlY3RUeXBlOiBSZWRpcmVjdFR5cGVcbiAgcmVzZXQ6ICgpID0+IHZvaWRcbn0pIHtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIFJlYWN0LnN0YXJ0VHJhbnNpdGlvbigoKSA9PiB7XG4gICAgICBpZiAocmVkaXJlY3RUeXBlID09PSBSZWRpcmVjdFR5cGUucHVzaCkge1xuICAgICAgICByb3V0ZXIucHVzaChyZWRpcmVjdCwge30pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3V0ZXIucmVwbGFjZShyZWRpcmVjdCwge30pXG4gICAgICB9XG4gICAgICByZXNldCgpXG4gICAgfSlcbiAgfSwgW3JlZGlyZWN0LCByZWRpcmVjdFR5cGUsIHJlc2V0LCByb3V0ZXJdKVxuXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBjbGFzcyBSZWRpcmVjdEVycm9yQm91bmRhcnkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8XG4gIFJlZGlyZWN0Qm91bmRhcnlQcm9wcyxcbiAgeyByZWRpcmVjdDogc3RyaW5nIHwgbnVsbDsgcmVkaXJlY3RUeXBlOiBSZWRpcmVjdFR5cGUgfCBudWxsIH1cbj4ge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUmVkaXJlY3RCb3VuZGFyeVByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpXG4gICAgdGhpcy5zdGF0ZSA9IHsgcmVkaXJlY3Q6IG51bGwsIHJlZGlyZWN0VHlwZTogbnVsbCB9XG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yOiBhbnkpIHtcbiAgICBpZiAoaXNSZWRpcmVjdEVycm9yKGVycm9yKSkge1xuICAgICAgY29uc3QgdXJsID0gZ2V0VVJMRnJvbVJlZGlyZWN0RXJyb3IoZXJyb3IpXG4gICAgICBjb25zdCByZWRpcmVjdFR5cGUgPSBnZXRSZWRpcmVjdFR5cGVGcm9tRXJyb3IoZXJyb3IpXG4gICAgICByZXR1cm4geyByZWRpcmVjdDogdXJsLCByZWRpcmVjdFR5cGUgfVxuICAgIH1cbiAgICAvLyBSZS10aHJvdyBpZiBlcnJvciBpcyBub3QgZm9yIHJlZGlyZWN0XG4gICAgdGhyb3cgZXJyb3JcbiAgfVxuXG4gIC8vIEV4cGxpY2l0IHR5cGUgaXMgbmVlZGVkIHRvIGF2b2lkIHRoZSBnZW5lcmF0ZWQgYC5kLnRzYCBoYXZpbmcgYSB3aWRlIHJldHVybiB0eXBlIHRoYXQgY291bGQgYmUgc3BlY2lmaWMgdG8gdGhlIGBAdHlwZXMvcmVhY3RgIHZlcnNpb24uXG4gIHJlbmRlcigpOiBSZWFjdC5SZWFjdE5vZGUge1xuICAgIGNvbnN0IHsgcmVkaXJlY3QsIHJlZGlyZWN0VHlwZSB9ID0gdGhpcy5zdGF0ZVxuICAgIGlmIChyZWRpcmVjdCAhPT0gbnVsbCAmJiByZWRpcmVjdFR5cGUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxIYW5kbGVSZWRpcmVjdFxuICAgICAgICAgIHJlZGlyZWN0PXtyZWRpcmVjdH1cbiAgICAgICAgICByZWRpcmVjdFR5cGU9e3JlZGlyZWN0VHlwZX1cbiAgICAgICAgICByZXNldD17KCkgPT4gdGhpcy5zZXRTdGF0ZSh7IHJlZGlyZWN0OiBudWxsIH0pfVxuICAgICAgICAvPlxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlZGlyZWN0Qm91bmRhcnkoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSkge1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKVxuICByZXR1cm4gKFxuICAgIDxSZWRpcmVjdEVycm9yQm91bmRhcnkgcm91dGVyPXtyb3V0ZXJ9PntjaGlsZHJlbn08L1JlZGlyZWN0RXJyb3JCb3VuZGFyeT5cbiAgKVxufVxuIl0sIm5hbWVzIjpbIlJlZGlyZWN0Qm91bmRhcnkiLCJSZWRpcmVjdEVycm9yQm91bmRhcnkiLCJIYW5kbGVSZWRpcmVjdCIsInJlZGlyZWN0IiwicmVzZXQiLCJyZWRpcmVjdFR5cGUiLCJyb3V0ZXIiLCJ1c2VSb3V0ZXIiLCJ1c2VFZmZlY3QiLCJSZWFjdCIsInN0YXJ0VHJhbnNpdGlvbiIsIlJlZGlyZWN0VHlwZSIsInB1c2giLCJyZXBsYWNlIiwiQ29tcG9uZW50IiwiZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIiwiZXJyb3IiLCJpc1JlZGlyZWN0RXJyb3IiLCJ1cmwiLCJnZXRVUkxGcm9tUmVkaXJlY3RFcnJvciIsImdldFJlZGlyZWN0VHlwZUZyb21FcnJvciIsInJlbmRlciIsInN0YXRlIiwic2V0U3RhdGUiLCJwcm9wcyIsImNoaWxkcmVuIiwiY29uc3RydWN0b3IiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect-boundary.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect-error.js":
/*!****************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect-error.js ***!
  \****************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    REDIRECT_ERROR_CODE: function() {\n        return REDIRECT_ERROR_CODE;\n    },\n    RedirectType: function() {\n        return RedirectType;\n    },\n    isRedirectError: function() {\n        return isRedirectError;\n    }\n});\nconst _redirectstatuscode = __webpack_require__(/*! ./redirect-status-code */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect-status-code.js\");\nconst REDIRECT_ERROR_CODE = 'NEXT_REDIRECT';\nvar RedirectType = /*#__PURE__*/ function(RedirectType) {\n    RedirectType[\"push\"] = \"push\";\n    RedirectType[\"replace\"] = \"replace\";\n    return RedirectType;\n}({});\nfunction isRedirectError(error) {\n    if (typeof error !== 'object' || error === null || !('digest' in error) || typeof error.digest !== 'string') {\n        return false;\n    }\n    const digest = error.digest.split(';');\n    const [errorCode, type] = digest;\n    const destination = digest.slice(2, -2).join(';');\n    const status = digest.at(-2);\n    const statusCode = Number(status);\n    return errorCode === REDIRECT_ERROR_CODE && (type === 'replace' || type === 'push') && typeof destination === 'string' && !isNaN(statusCode) && statusCode in _redirectstatuscode.RedirectStatusCode;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=redirect-error.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWRpcmVjdC1lcnJvci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFFYUEsbUJBQW1CO2VBQW5CQTs7SUFFREMsWUFBWTtlQUFaQTs7SUFnQklDLGVBQWU7ZUFBZkE7OztnREFwQm1CO0FBRTVCLE1BQU1GLHNCQUFzQjtBQUU1QixJQUFLQyxlQUFBQSxXQUFBQSxHQUFBQSxTQUFBQSxZQUFBQTs7O1dBQUFBOztBQWdCTCxTQUFTQyxnQkFBZ0JDLEtBQWM7SUFDNUMsSUFDRSxPQUFPQSxVQUFVLFlBQ2pCQSxVQUFVLFFBQ1YsQ0FBRSxhQUFZQSxLQUFBQSxDQUFJLElBQ2xCLE9BQU9BLE1BQU1DLE1BQU0sS0FBSyxVQUN4QjtRQUNBLE9BQU87SUFDVDtJQUVBLE1BQU1BLFNBQVNELE1BQU1DLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDO0lBQ2xDLE1BQU0sQ0FBQ0MsV0FBV0MsS0FBSyxHQUFHSDtJQUMxQixNQUFNSSxjQUFjSixPQUFPSyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUdDLElBQUksQ0FBQztJQUM3QyxNQUFNQyxTQUFTUCxPQUFPUSxFQUFFLENBQUMsQ0FBQztJQUUxQixNQUFNQyxhQUFhQyxPQUFPSDtJQUUxQixPQUNFTCxjQUFjTix1QkFDYk8sQ0FBQUEsU0FBUyxhQUFhQSxTQUFTLE9BQUssSUFDckMsT0FBT0MsZ0JBQWdCLFlBQ3ZCLENBQUNPLE1BQU1GLGVBQ1BBLGNBQWNHLG9CQUFBQSxrQkFBa0I7QUFFcEMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL2NsaWVudC9jb21wb25lbnRzL3JlZGlyZWN0LWVycm9yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlZGlyZWN0U3RhdHVzQ29kZSB9IGZyb20gJy4vcmVkaXJlY3Qtc3RhdHVzLWNvZGUnXG5cbmV4cG9ydCBjb25zdCBSRURJUkVDVF9FUlJPUl9DT0RFID0gJ05FWFRfUkVESVJFQ1QnXG5cbmV4cG9ydCBlbnVtIFJlZGlyZWN0VHlwZSB7XG4gIHB1c2ggPSAncHVzaCcsXG4gIHJlcGxhY2UgPSAncmVwbGFjZScsXG59XG5cbmV4cG9ydCB0eXBlIFJlZGlyZWN0RXJyb3IgPSBFcnJvciAmIHtcbiAgZGlnZXN0OiBgJHt0eXBlb2YgUkVESVJFQ1RfRVJST1JfQ09ERX07JHtSZWRpcmVjdFR5cGV9OyR7c3RyaW5nfTske1JlZGlyZWN0U3RhdHVzQ29kZX07YFxufVxuXG4vKipcbiAqIENoZWNrcyBhbiBlcnJvciB0byBkZXRlcm1pbmUgaWYgaXQncyBhbiBlcnJvciBnZW5lcmF0ZWQgYnkgdGhlXG4gKiBgcmVkaXJlY3QodXJsKWAgaGVscGVyLlxuICpcbiAqIEBwYXJhbSBlcnJvciB0aGUgZXJyb3IgdGhhdCBtYXkgcmVmZXJlbmNlIGEgcmVkaXJlY3QgZXJyb3JcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGVycm9yIGlzIGEgcmVkaXJlY3QgZXJyb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVkaXJlY3RFcnJvcihlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIFJlZGlyZWN0RXJyb3Ige1xuICBpZiAoXG4gICAgdHlwZW9mIGVycm9yICE9PSAnb2JqZWN0JyB8fFxuICAgIGVycm9yID09PSBudWxsIHx8XG4gICAgISgnZGlnZXN0JyBpbiBlcnJvcikgfHxcbiAgICB0eXBlb2YgZXJyb3IuZGlnZXN0ICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IGRpZ2VzdCA9IGVycm9yLmRpZ2VzdC5zcGxpdCgnOycpXG4gIGNvbnN0IFtlcnJvckNvZGUsIHR5cGVdID0gZGlnZXN0XG4gIGNvbnN0IGRlc3RpbmF0aW9uID0gZGlnZXN0LnNsaWNlKDIsIC0yKS5qb2luKCc7JylcbiAgY29uc3Qgc3RhdHVzID0gZGlnZXN0LmF0KC0yKVxuXG4gIGNvbnN0IHN0YXR1c0NvZGUgPSBOdW1iZXIoc3RhdHVzKVxuXG4gIHJldHVybiAoXG4gICAgZXJyb3JDb2RlID09PSBSRURJUkVDVF9FUlJPUl9DT0RFICYmXG4gICAgKHR5cGUgPT09ICdyZXBsYWNlJyB8fCB0eXBlID09PSAncHVzaCcpICYmXG4gICAgdHlwZW9mIGRlc3RpbmF0aW9uID09PSAnc3RyaW5nJyAmJlxuICAgICFpc05hTihzdGF0dXNDb2RlKSAmJlxuICAgIHN0YXR1c0NvZGUgaW4gUmVkaXJlY3RTdGF0dXNDb2RlXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJSRURJUkVDVF9FUlJPUl9DT0RFIiwiUmVkaXJlY3RUeXBlIiwiaXNSZWRpcmVjdEVycm9yIiwiZXJyb3IiLCJkaWdlc3QiLCJzcGxpdCIsImVycm9yQ29kZSIsInR5cGUiLCJkZXN0aW5hdGlvbiIsInNsaWNlIiwiam9pbiIsInN0YXR1cyIsImF0Iiwic3RhdHVzQ29kZSIsIk51bWJlciIsImlzTmFOIiwiUmVkaXJlY3RTdGF0dXNDb2RlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect-error.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect-status-code.js":
/*!**********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect-status-code.js ***!
  \**********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"RedirectStatusCode\", ({\n    enumerable: true,\n    get: function() {\n        return RedirectStatusCode;\n    }\n}));\nvar RedirectStatusCode = /*#__PURE__*/ function(RedirectStatusCode) {\n    RedirectStatusCode[RedirectStatusCode[\"SeeOther\"] = 303] = \"SeeOther\";\n    RedirectStatusCode[RedirectStatusCode[\"TemporaryRedirect\"] = 307] = \"TemporaryRedirect\";\n    RedirectStatusCode[RedirectStatusCode[\"PermanentRedirect\"] = 308] = \"PermanentRedirect\";\n    return RedirectStatusCode;\n}({});\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=redirect-status-code.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWRpcmVjdC1zdGF0dXMtY29kZS5qcyIsIm1hcHBpbmdzIjoiOzs7O3NEQUFZQTs7O2VBQUFBOzs7QUFBTCxJQUFLQSxxQkFBQUEsV0FBQUEsR0FBQUEsU0FBQUEsa0JBQUFBOzs7O1dBQUFBIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL3NyYy9jbGllbnQvY29tcG9uZW50cy9yZWRpcmVjdC1zdGF0dXMtY29kZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBSZWRpcmVjdFN0YXR1c0NvZGUge1xuICBTZWVPdGhlciA9IDMwMyxcbiAgVGVtcG9yYXJ5UmVkaXJlY3QgPSAzMDcsXG4gIFBlcm1hbmVudFJlZGlyZWN0ID0gMzA4LFxufVxuIl0sIm5hbWVzIjpbIlJlZGlyZWN0U3RhdHVzQ29kZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect-status-code.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect.js":
/*!**********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect.js ***!
  \**********************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    getRedirectError: function() {\n        return getRedirectError;\n    },\n    getRedirectStatusCodeFromError: function() {\n        return getRedirectStatusCodeFromError;\n    },\n    getRedirectTypeFromError: function() {\n        return getRedirectTypeFromError;\n    },\n    getURLFromRedirectError: function() {\n        return getURLFromRedirectError;\n    },\n    permanentRedirect: function() {\n        return permanentRedirect;\n    },\n    redirect: function() {\n        return redirect;\n    }\n});\nconst _redirectstatuscode = __webpack_require__(/*! ./redirect-status-code */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect-status-code.js\");\nconst _redirecterror = __webpack_require__(/*! ./redirect-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect-error.js\");\nconst actionAsyncStorage =  false ? 0 : undefined;\nfunction getRedirectError(url, type, statusCode) {\n    if (statusCode === void 0) statusCode = _redirectstatuscode.RedirectStatusCode.TemporaryRedirect;\n    const error = Object.defineProperty(new Error(_redirecterror.REDIRECT_ERROR_CODE), \"__NEXT_ERROR_CODE\", {\n        value: \"E394\",\n        enumerable: false,\n        configurable: true\n    });\n    error.digest = _redirecterror.REDIRECT_ERROR_CODE + \";\" + type + \";\" + url + \";\" + statusCode + \";\";\n    return error;\n}\nfunction redirect(/** The URL to redirect to */ url, type) {\n    var _actionAsyncStorage_getStore;\n    type != null ? type : type = (actionAsyncStorage == null ? void 0 : (_actionAsyncStorage_getStore = actionAsyncStorage.getStore()) == null ? void 0 : _actionAsyncStorage_getStore.isAction) ? _redirecterror.RedirectType.push : _redirecterror.RedirectType.replace;\n    throw getRedirectError(url, type, _redirectstatuscode.RedirectStatusCode.TemporaryRedirect);\n}\nfunction permanentRedirect(/** The URL to redirect to */ url, type) {\n    if (type === void 0) type = _redirecterror.RedirectType.replace;\n    throw getRedirectError(url, type, _redirectstatuscode.RedirectStatusCode.PermanentRedirect);\n}\nfunction getURLFromRedirectError(error) {\n    if (!(0, _redirecterror.isRedirectError)(error)) return null;\n    // Slices off the beginning of the digest that contains the code and the\n    // separating ';'.\n    return error.digest.split(';').slice(2, -2).join(';');\n}\nfunction getRedirectTypeFromError(error) {\n    if (!(0, _redirecterror.isRedirectError)(error)) {\n        throw Object.defineProperty(new Error('Not a redirect error'), \"__NEXT_ERROR_CODE\", {\n            value: \"E260\",\n            enumerable: false,\n            configurable: true\n        });\n    }\n    return error.digest.split(';', 2)[1];\n}\nfunction getRedirectStatusCodeFromError(error) {\n    if (!(0, _redirecterror.isRedirectError)(error)) {\n        throw Object.defineProperty(new Error('Not a redirect error'), \"__NEXT_ERROR_CODE\", {\n            value: \"E260\",\n            enumerable: false,\n            configurable: true\n        });\n    }\n    return Number(error.digest.split(';').at(-2));\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=redirect.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yZWRpcmVjdC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFlZ0JBLGdCQUFnQjtlQUFoQkE7O0lBNkVBQyw4QkFBOEI7ZUFBOUJBOztJQVJBQyx3QkFBd0I7ZUFBeEJBOztJQVJBQyx1QkFBdUI7ZUFBdkJBOztJQWhCQUMsaUJBQWlCO2VBQWpCQTs7SUF2QkFDLFFBQVE7ZUFBUkE7OztnREFyQ21COzJDQU01QjtBQUVQLE1BQU1DLHFCQUNKLE1BQTZCLEdBRXZCRSxDQUNrQixHQUNwQkM7QUFFQyxTQUFTVCxpQkFDZFUsR0FBVyxFQUNYQyxJQUFrQixFQUNsQkMsVUFBcUU7SUFBckVBLElBQUFBLGVBQUFBLEtBQUFBLEdBQUFBLGFBQWlDQyxvQkFBQUEsa0JBQWtCLENBQUNDLGlCQUFpQjtJQUVyRSxNQUFNQyxRQUFRLHFCQUE4QixDQUE5QixJQUFJQyxNQUFNQyxlQUFBQSxtQkFBbUIsR0FBN0I7ZUFBQTtvQkFBQTtzQkFBQTtJQUE2QjtJQUMzQ0YsTUFBTUcsTUFBTSxHQUFNRCxlQUFBQSxtQkFBbUIsR0FBQyxNQUFHTixPQUFLLE1BQUdELE1BQUksTUFBR0UsYUFBVztJQUNuRSxPQUFPRztBQUNUO0FBY08sU0FBU1YsU0FDZCwyQkFBMkIsR0FDM0JLLEdBQVcsRUFDWEMsSUFBbUI7UUFFVkw7SUFBVEssUUFBQUEsT0FBQUEsT0FBQUEsT0FBU0wsQ0FBQUEsc0JBQUFBLE9BQUFBLEtBQUFBLElBQUFBLENBQUFBLCtCQUFBQSxtQkFBb0JhLFFBQVEsdUJBQTVCYiw2QkFBZ0NjLFFBQUFBLElBQ3JDQyxlQUFBQSxZQUFZLENBQUNDLElBQUksR0FDakJELGVBQUFBLFlBQVksQ0FBQ0UsT0FBTztJQUV4QixNQUFNdkIsaUJBQWlCVSxLQUFLQyxNQUFNRSxvQkFBQUEsa0JBQWtCLENBQUNDLGlCQUFpQjtBQUN4RTtBQWFPLFNBQVNWLGtCQUNkLDJCQUEyQixHQUMzQk0sR0FBVyxFQUNYQyxJQUF5QztJQUF6Q0EsSUFBQUEsU0FBQUEsS0FBQUEsR0FBQUEsT0FBcUJVLGVBQUFBLFlBQVksQ0FBQ0UsT0FBTztJQUV6QyxNQUFNdkIsaUJBQWlCVSxLQUFLQyxNQUFNRSxvQkFBQUEsa0JBQWtCLENBQUNXLGlCQUFpQjtBQUN4RTtBQVVPLFNBQVNyQix3QkFBd0JZLEtBQWM7SUFDcEQsSUFBSSxDQUFDVSxDQUFBQSxHQUFBQSxlQUFBQSxlQUFBQSxFQUFnQlYsUUFBUSxPQUFPO0lBRXBDLHdFQUF3RTtJQUN4RSxrQkFBa0I7SUFDbEIsT0FBT0EsTUFBTUcsTUFBTSxDQUFDUSxLQUFLLENBQUMsS0FBS0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHQyxJQUFJLENBQUM7QUFDbkQ7QUFFTyxTQUFTMUIseUJBQXlCYSxLQUFvQjtJQUMzRCxJQUFJLENBQUNVLENBQUFBLEdBQUFBLGVBQUFBLGVBQUFBLEVBQWdCVixRQUFRO1FBQzNCLE1BQU0scUJBQWlDLENBQWpDLElBQUlDLE1BQU0seUJBQVY7bUJBQUE7d0JBQUE7MEJBQUE7UUFBZ0M7SUFDeEM7SUFFQSxPQUFPRCxNQUFNRyxNQUFNLENBQUNRLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFO0FBQ3RDO0FBRU8sU0FBU3pCLCtCQUErQmMsS0FBb0I7SUFDakUsSUFBSSxDQUFDVSxDQUFBQSxHQUFBQSxlQUFBQSxlQUFBQSxFQUFnQlYsUUFBUTtRQUMzQixNQUFNLHFCQUFpQyxDQUFqQyxJQUFJQyxNQUFNLHlCQUFWO21CQUFBO3dCQUFBOzBCQUFBO1FBQWdDO0lBQ3hDO0lBRUEsT0FBT2EsT0FBT2QsTUFBTUcsTUFBTSxDQUFDUSxLQUFLLENBQUMsS0FBS0ksRUFBRSxDQUFDLENBQUM7QUFDNUMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL2NsaWVudC9jb21wb25lbnRzL3JlZGlyZWN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlZGlyZWN0U3RhdHVzQ29kZSB9IGZyb20gJy4vcmVkaXJlY3Qtc3RhdHVzLWNvZGUnXG5pbXBvcnQge1xuICBSZWRpcmVjdFR5cGUsXG4gIHR5cGUgUmVkaXJlY3RFcnJvcixcbiAgaXNSZWRpcmVjdEVycm9yLFxuICBSRURJUkVDVF9FUlJPUl9DT0RFLFxufSBmcm9tICcuL3JlZGlyZWN0LWVycm9yJ1xuXG5jb25zdCBhY3Rpb25Bc3luY1N0b3JhZ2UgPVxuICB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJ1xuICAgID8gKFxuICAgICAgICByZXF1aXJlKCcuLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci9hY3Rpb24tYXN5bmMtc3RvcmFnZS5leHRlcm5hbCcpIGFzIHR5cGVvZiBpbXBvcnQoJy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL2FjdGlvbi1hc3luYy1zdG9yYWdlLmV4dGVybmFsJylcbiAgICAgICkuYWN0aW9uQXN5bmNTdG9yYWdlXG4gICAgOiB1bmRlZmluZWRcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlZGlyZWN0RXJyb3IoXG4gIHVybDogc3RyaW5nLFxuICB0eXBlOiBSZWRpcmVjdFR5cGUsXG4gIHN0YXR1c0NvZGU6IFJlZGlyZWN0U3RhdHVzQ29kZSA9IFJlZGlyZWN0U3RhdHVzQ29kZS5UZW1wb3JhcnlSZWRpcmVjdFxuKTogUmVkaXJlY3RFcnJvciB7XG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFJFRElSRUNUX0VSUk9SX0NPREUpIGFzIFJlZGlyZWN0RXJyb3JcbiAgZXJyb3IuZGlnZXN0ID0gYCR7UkVESVJFQ1RfRVJST1JfQ09ERX07JHt0eXBlfTske3VybH07JHtzdGF0dXNDb2RlfTtgXG4gIHJldHVybiBlcnJvclxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byByZWRpcmVjdCB0aGUgdXNlciB0byBhbm90aGVyIFVSTC4gSXQgY2FuIGJlIHVzZWQgaW5cbiAqIFtTZXJ2ZXIgQ29tcG9uZW50c10oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcmVuZGVyaW5nL3NlcnZlci1jb21wb25lbnRzKSxcbiAqIFtSb3V0ZSBIYW5kbGVyc10oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcm91dGluZy9yb3V0ZS1oYW5kbGVycyksIGFuZFxuICogW1NlcnZlciBBY3Rpb25zXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9kYXRhLWZldGNoaW5nL3NlcnZlci1hY3Rpb25zLWFuZC1tdXRhdGlvbnMpLlxuICpcbiAqIC0gSW4gYSBTZXJ2ZXIgQ29tcG9uZW50LCB0aGlzIHdpbGwgaW5zZXJ0IGEgbWV0YSB0YWcgdG8gcmVkaXJlY3QgdGhlIHVzZXIgdG8gdGhlIHRhcmdldCBwYWdlLlxuICogLSBJbiBhIFJvdXRlIEhhbmRsZXIgb3IgU2VydmVyIEFjdGlvbiwgaXQgd2lsbCBzZXJ2ZSBhIDMwNy8zMDMgdG8gdGhlIGNhbGxlci5cbiAqIC0gSW4gYSBTZXJ2ZXIgQWN0aW9uLCB0eXBlIGRlZmF1bHRzIHRvICdwdXNoJyBhbmQgJ3JlcGxhY2UnIGVsc2V3aGVyZS5cbiAqXG4gKiBSZWFkIG1vcmU6IFtOZXh0LmpzIERvY3M6IGByZWRpcmVjdGBdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2Z1bmN0aW9ucy9yZWRpcmVjdClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZGlyZWN0KFxuICAvKiogVGhlIFVSTCB0byByZWRpcmVjdCB0byAqL1xuICB1cmw6IHN0cmluZyxcbiAgdHlwZT86IFJlZGlyZWN0VHlwZVxuKTogbmV2ZXIge1xuICB0eXBlID8/PSBhY3Rpb25Bc3luY1N0b3JhZ2U/LmdldFN0b3JlKCk/LmlzQWN0aW9uXG4gICAgPyBSZWRpcmVjdFR5cGUucHVzaFxuICAgIDogUmVkaXJlY3RUeXBlLnJlcGxhY2VcblxuICB0aHJvdyBnZXRSZWRpcmVjdEVycm9yKHVybCwgdHlwZSwgUmVkaXJlY3RTdGF0dXNDb2RlLlRlbXBvcmFyeVJlZGlyZWN0KVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byByZWRpcmVjdCB0aGUgdXNlciB0byBhbm90aGVyIFVSTC4gSXQgY2FuIGJlIHVzZWQgaW5cbiAqIFtTZXJ2ZXIgQ29tcG9uZW50c10oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcmVuZGVyaW5nL3NlcnZlci1jb21wb25lbnRzKSxcbiAqIFtSb3V0ZSBIYW5kbGVyc10oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcm91dGluZy9yb3V0ZS1oYW5kbGVycyksIGFuZFxuICogW1NlcnZlciBBY3Rpb25zXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9kYXRhLWZldGNoaW5nL3NlcnZlci1hY3Rpb25zLWFuZC1tdXRhdGlvbnMpLlxuICpcbiAqIC0gSW4gYSBTZXJ2ZXIgQ29tcG9uZW50LCB0aGlzIHdpbGwgaW5zZXJ0IGEgbWV0YSB0YWcgdG8gcmVkaXJlY3QgdGhlIHVzZXIgdG8gdGhlIHRhcmdldCBwYWdlLlxuICogLSBJbiBhIFJvdXRlIEhhbmRsZXIgb3IgU2VydmVyIEFjdGlvbiwgaXQgd2lsbCBzZXJ2ZSBhIDMwOC8zMDMgdG8gdGhlIGNhbGxlci5cbiAqXG4gKiBSZWFkIG1vcmU6IFtOZXh0LmpzIERvY3M6IGByZWRpcmVjdGBdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2Z1bmN0aW9ucy9yZWRpcmVjdClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlcm1hbmVudFJlZGlyZWN0KFxuICAvKiogVGhlIFVSTCB0byByZWRpcmVjdCB0byAqL1xuICB1cmw6IHN0cmluZyxcbiAgdHlwZTogUmVkaXJlY3RUeXBlID0gUmVkaXJlY3RUeXBlLnJlcGxhY2Vcbik6IG5ldmVyIHtcbiAgdGhyb3cgZ2V0UmVkaXJlY3RFcnJvcih1cmwsIHR5cGUsIFJlZGlyZWN0U3RhdHVzQ29kZS5QZXJtYW5lbnRSZWRpcmVjdClcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlbmNvZGVkIFVSTCBmcm9tIHRoZSBlcnJvciBpZiBpdCdzIGEgUmVkaXJlY3RFcnJvciwgbnVsbFxuICogb3RoZXJ3aXNlLiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCB2YWxpZGF0ZSB0aGUgVVJMIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBlcnJvciB0aGUgZXJyb3IgdGhhdCBtYXkgYmUgYSByZWRpcmVjdCBlcnJvclxuICogQHJldHVybiB0aGUgdXJsIGlmIHRoZSBlcnJvciB3YXMgYSByZWRpcmVjdCBlcnJvclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VVJMRnJvbVJlZGlyZWN0RXJyb3IoZXJyb3I6IFJlZGlyZWN0RXJyb3IpOiBzdHJpbmdcbmV4cG9ydCBmdW5jdGlvbiBnZXRVUkxGcm9tUmVkaXJlY3RFcnJvcihlcnJvcjogdW5rbm93bik6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIWlzUmVkaXJlY3RFcnJvcihlcnJvcikpIHJldHVybiBudWxsXG5cbiAgLy8gU2xpY2VzIG9mZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkaWdlc3QgdGhhdCBjb250YWlucyB0aGUgY29kZSBhbmQgdGhlXG4gIC8vIHNlcGFyYXRpbmcgJzsnLlxuICByZXR1cm4gZXJyb3IuZGlnZXN0LnNwbGl0KCc7Jykuc2xpY2UoMiwgLTIpLmpvaW4oJzsnKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVkaXJlY3RUeXBlRnJvbUVycm9yKGVycm9yOiBSZWRpcmVjdEVycm9yKTogUmVkaXJlY3RUeXBlIHtcbiAgaWYgKCFpc1JlZGlyZWN0RXJyb3IoZXJyb3IpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYSByZWRpcmVjdCBlcnJvcicpXG4gIH1cblxuICByZXR1cm4gZXJyb3IuZGlnZXN0LnNwbGl0KCc7JywgMilbMV0gYXMgUmVkaXJlY3RUeXBlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWRpcmVjdFN0YXR1c0NvZGVGcm9tRXJyb3IoZXJyb3I6IFJlZGlyZWN0RXJyb3IpOiBudW1iZXIge1xuICBpZiAoIWlzUmVkaXJlY3RFcnJvcihlcnJvcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhIHJlZGlyZWN0IGVycm9yJylcbiAgfVxuXG4gIHJldHVybiBOdW1iZXIoZXJyb3IuZGlnZXN0LnNwbGl0KCc7JykuYXQoLTIpKVxufVxuIl0sIm5hbWVzIjpbImdldFJlZGlyZWN0RXJyb3IiLCJnZXRSZWRpcmVjdFN0YXR1c0NvZGVGcm9tRXJyb3IiLCJnZXRSZWRpcmVjdFR5cGVGcm9tRXJyb3IiLCJnZXRVUkxGcm9tUmVkaXJlY3RFcnJvciIsInBlcm1hbmVudFJlZGlyZWN0IiwicmVkaXJlY3QiLCJhY3Rpb25Bc3luY1N0b3JhZ2UiLCJ3aW5kb3ciLCJyZXF1aXJlIiwidW5kZWZpbmVkIiwidXJsIiwidHlwZSIsInN0YXR1c0NvZGUiLCJSZWRpcmVjdFN0YXR1c0NvZGUiLCJUZW1wb3JhcnlSZWRpcmVjdCIsImVycm9yIiwiRXJyb3IiLCJSRURJUkVDVF9FUlJPUl9DT0RFIiwiZGlnZXN0IiwiZ2V0U3RvcmUiLCJpc0FjdGlvbiIsIlJlZGlyZWN0VHlwZSIsInB1c2giLCJyZXBsYWNlIiwiUGVybWFuZW50UmVkaXJlY3QiLCJpc1JlZGlyZWN0RXJyb3IiLCJzcGxpdCIsInNsaWNlIiwiam9pbiIsIk51bWJlciIsImF0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/aliased-prefetch-navigations.js":
/*!*********************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/aliased-prefetch-navigations.js ***!
  \*********************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    addSearchParamsToPageSegments: function() {\n        return addSearchParamsToPageSegments;\n    },\n    handleAliasedPrefetchEntry: function() {\n        return handleAliasedPrefetchEntry;\n    }\n});\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/segment.js\");\nconst _approuter = __webpack_require__(/*! ../app-router */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ./apply-router-state-patch-to-tree */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _createhreffromurl = __webpack_require__(/*! ./create-href-from-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nconst _fillcachewithnewsubtreedata = __webpack_require__(/*! ./fill-cache-with-new-subtree-data */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js\");\nconst _handlemutable = __webpack_require__(/*! ./handle-mutable */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nfunction handleAliasedPrefetchEntry(navigatedAt, state, flightData, url, mutable) {\n    let currentTree = state.tree;\n    let currentCache = state.cache;\n    const href = (0, _createhreffromurl.createHrefFromUrl)(url);\n    let applied;\n    if (typeof flightData === 'string') {\n        return false;\n    }\n    for (const normalizedFlightData of flightData){\n        // If the segment doesn't have a loading component, we don't need to do anything.\n        if (!hasLoadingComponentInSeedData(normalizedFlightData.seedData)) {\n            continue;\n        }\n        let treePatch = normalizedFlightData.tree;\n        // Segments are keyed by searchParams (e.g. __PAGE__?{\"foo\":\"bar\"}). We might return a less specific, param-less entry,\n        // so we ensure that the final tree contains the correct searchParams (reflected in the URL) are provided in the updated FlightRouterState tree.\n        // We only do this on the first read, as otherwise we'd be overwriting the searchParams that may have already been set\n        treePatch = addSearchParamsToPageSegments(treePatch, Object.fromEntries(url.searchParams));\n        const { seedData, isRootRender, pathToSegment } = normalizedFlightData;\n        // TODO-APP: remove ''\n        const flightSegmentPathWithLeadingEmpty = [\n            '',\n            ...pathToSegment\n        ];\n        // Segments are keyed by searchParams (e.g. __PAGE__?{\"foo\":\"bar\"}). We might return a less specific, param-less entry,\n        // so we ensure that the final tree contains the correct searchParams (reflected in the URL) are provided in the updated FlightRouterState tree.\n        // We only do this on the first read, as otherwise we'd be overwriting the searchParams that may have already been set\n        treePatch = addSearchParamsToPageSegments(treePatch, Object.fromEntries(url.searchParams));\n        let newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTree)(flightSegmentPathWithLeadingEmpty, currentTree, treePatch, href);\n        const newCache = (0, _approuter.createEmptyCacheNode)();\n        // The prefetch cache entry was aliased -- this signals that we only fill in the cache with the\n        // loading state and not the actual parallel route seed data.\n        if (isRootRender && seedData) {\n            // Fill in the cache with the new loading / rsc data\n            const rsc = seedData[1];\n            const loading = seedData[3];\n            newCache.loading = loading;\n            newCache.rsc = rsc;\n            // Construct a new tree and apply the aliased loading state for each parallel route\n            fillNewTreeWithOnlyLoadingSegments(navigatedAt, newCache, currentCache, treePatch, seedData);\n        } else {\n            // Copy rsc for the root node of the cache.\n            newCache.rsc = currentCache.rsc;\n            newCache.prefetchRsc = currentCache.prefetchRsc;\n            newCache.loading = currentCache.loading;\n            newCache.parallelRoutes = new Map(currentCache.parallelRoutes);\n            // copy the loading state only into the leaf node (the part that changed)\n            (0, _fillcachewithnewsubtreedata.fillCacheWithNewSubTreeDataButOnlyLoading)(navigatedAt, newCache, currentCache, normalizedFlightData);\n        }\n        // If we don't have an updated tree, there's no reason to update the cache, as the tree\n        // dictates what cache nodes to render.\n        if (newTree) {\n            currentTree = newTree;\n            currentCache = newCache;\n            applied = true;\n        }\n    }\n    if (!applied) {\n        return false;\n    }\n    mutable.patchedTree = currentTree;\n    mutable.cache = currentCache;\n    mutable.canonicalUrl = href;\n    mutable.hashFragment = url.hash;\n    return (0, _handlemutable.handleMutable)(state, mutable);\n}\nfunction hasLoadingComponentInSeedData(seedData) {\n    if (!seedData) return false;\n    const parallelRoutes = seedData[2];\n    const loading = seedData[3];\n    if (loading) {\n        return true;\n    }\n    for(const key in parallelRoutes){\n        if (hasLoadingComponentInSeedData(parallelRoutes[key])) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction fillNewTreeWithOnlyLoadingSegments(navigatedAt, newCache, existingCache, routerState, cacheNodeSeedData) {\n    const isLastSegment = Object.keys(routerState[1]).length === 0;\n    if (isLastSegment) {\n        return;\n    }\n    for(const key in routerState[1]){\n        const parallelRouteState = routerState[1][key];\n        const segmentForParallelRoute = parallelRouteState[0];\n        const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segmentForParallelRoute);\n        const parallelSeedData = cacheNodeSeedData !== null && cacheNodeSeedData[2][key] !== undefined ? cacheNodeSeedData[2][key] : null;\n        let newCacheNode;\n        if (parallelSeedData !== null) {\n            // New data was sent from the server.\n            const rsc = parallelSeedData[1];\n            const loading = parallelSeedData[3];\n            newCacheNode = {\n                lazyData: null,\n                // copy the layout but null the page segment as that's not meant to be used\n                rsc: segmentForParallelRoute.includes(_segment.PAGE_SEGMENT_KEY) ? null : rsc,\n                prefetchRsc: null,\n                head: null,\n                prefetchHead: null,\n                parallelRoutes: new Map(),\n                loading,\n                navigatedAt\n            };\n        } else {\n            // No data available for this node. This will trigger a lazy fetch\n            // during render.\n            newCacheNode = {\n                lazyData: null,\n                rsc: null,\n                prefetchRsc: null,\n                head: null,\n                prefetchHead: null,\n                parallelRoutes: new Map(),\n                loading: null,\n                navigatedAt: -1\n            };\n        }\n        const existingParallelRoutes = newCache.parallelRoutes.get(key);\n        if (existingParallelRoutes) {\n            existingParallelRoutes.set(cacheKey, newCacheNode);\n        } else {\n            newCache.parallelRoutes.set(key, new Map([\n                [\n                    cacheKey,\n                    newCacheNode\n                ]\n            ]));\n        }\n        fillNewTreeWithOnlyLoadingSegments(navigatedAt, newCacheNode, existingCache, parallelRouteState, parallelSeedData);\n    }\n}\nfunction addSearchParamsToPageSegments(flightRouterState, searchParams) {\n    const [segment, parallelRoutes, ...rest] = flightRouterState;\n    // If it's a page segment, modify the segment by adding search params\n    if (segment.includes(_segment.PAGE_SEGMENT_KEY)) {\n        const newSegment = (0, _segment.addSearchParamsIfPageSegment)(segment, searchParams);\n        return [\n            newSegment,\n            parallelRoutes,\n            ...rest\n        ];\n    }\n    // Otherwise, recurse through the parallel routes and return a new tree\n    const updatedParallelRoutes = {};\n    for (const [key, parallelRoute] of Object.entries(parallelRoutes)){\n        updatedParallelRoutes[key] = addSearchParamsToPageSegments(parallelRoute, searchParams);\n    }\n    return [\n        segment,\n        updatedParallelRoutes,\n        ...rest\n    ];\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=aliased-prefetch-navigations.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9hbGlhc2VkLXByZWZldGNoLW5hdmlnYXRpb25zLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQW1PZ0JBLDZCQUE2QjtlQUE3QkE7O0lBMU1BQywwQkFBMEI7ZUFBMUJBOzs7cUNBakJUO3VDQUU4Qjt5REFDTzsrQ0FDVjtrREFDRzt5REFDcUI7MkNBQzVCO0FBVXZCLFNBQVNBLDJCQUNkQyxXQUFtQixFQUNuQkMsS0FBMkIsRUFDM0JDLFVBQTJDLEVBQzNDQyxHQUFRLEVBQ1JDLE9BQWdCO0lBRWhCLElBQUlDLGNBQWNKLE1BQU1LLElBQUk7SUFDNUIsSUFBSUMsZUFBZU4sTUFBTU8sS0FBSztJQUM5QixNQUFNQyxPQUFPQyxDQUFBQSxHQUFBQSxtQkFBQUEsaUJBQUFBLEVBQWtCUDtJQUMvQixJQUFJUTtJQUVKLElBQUksT0FBT1QsZUFBZSxVQUFVO1FBQ2xDLE9BQU87SUFDVDtJQUVBLEtBQUssTUFBTVUsd0JBQXdCVixXQUFZO1FBQzdDLGlGQUFpRjtRQUNqRixJQUFJLENBQUNXLDhCQUE4QkQscUJBQXFCRSxRQUFRLEdBQUc7WUFDakU7UUFDRjtRQUVBLElBQUlDLFlBQVlILHFCQUFxQk4sSUFBSTtRQUN6Qyx1SEFBdUg7UUFDdkgsZ0pBQWdKO1FBQ2hKLHNIQUFzSDtRQUN0SFMsWUFBWWpCLDhCQUNWaUIsV0FDQUMsT0FBT0MsV0FBVyxDQUFDZCxJQUFJZSxZQUFZO1FBR3JDLE1BQU0sRUFBRUosUUFBUSxFQUFFSyxZQUFZLEVBQUVDLGFBQWEsRUFBRSxHQUFHUjtRQUNsRCxzQkFBc0I7UUFDdEIsTUFBTVMsb0NBQW9DO1lBQUM7ZUFBT0Q7U0FBYztRQUVoRSx1SEFBdUg7UUFDdkgsZ0pBQWdKO1FBQ2hKLHNIQUFzSDtRQUN0SEwsWUFBWWpCLDhCQUNWaUIsV0FDQUMsT0FBT0MsV0FBVyxDQUFDZCxJQUFJZSxZQUFZO1FBR3JDLElBQUlJLFVBQVVDLENBQUFBLEdBQUFBLDZCQUFBQSwyQkFBQUEsRUFDWkYsbUNBQ0FoQixhQUNBVSxXQUNBTjtRQUdGLE1BQU1lLFdBQVdDLENBQUFBLEdBQUFBLFdBQUFBLG9CQUFBQTtRQUVqQiwrRkFBK0Y7UUFDL0YsNkRBQTZEO1FBQzdELElBQUlOLGdCQUFnQkwsVUFBVTtZQUM1QixvREFBb0Q7WUFDcEQsTUFBTVksTUFBTVosUUFBUSxDQUFDLEVBQUU7WUFDdkIsTUFBTWEsVUFBVWIsUUFBUSxDQUFDLEVBQUU7WUFDM0JVLFNBQVNHLE9BQU8sR0FBR0E7WUFDbkJILFNBQVNFLEdBQUcsR0FBR0E7WUFFZixtRkFBbUY7WUFDbkZFLG1DQUNFNUIsYUFDQXdCLFVBQ0FqQixjQUNBUSxXQUNBRDtRQUVKLE9BQU87WUFDTCwyQ0FBMkM7WUFDM0NVLFNBQVNFLEdBQUcsR0FBR25CLGFBQWFtQixHQUFHO1lBQy9CRixTQUFTSyxXQUFXLEdBQUd0QixhQUFhc0IsV0FBVztZQUMvQ0wsU0FBU0csT0FBTyxHQUFHcEIsYUFBYW9CLE9BQU87WUFDdkNILFNBQVNNLGNBQWMsR0FBRyxJQUFJQyxJQUFJeEIsYUFBYXVCLGNBQWM7WUFFN0QseUVBQXlFO1lBQ3pFRSxDQUFBQSxHQUFBQSw2QkFBQUEseUNBQUFBLEVBQ0VoQyxhQUNBd0IsVUFDQWpCLGNBQ0FLO1FBRUo7UUFFQSx1RkFBdUY7UUFDdkYsdUNBQXVDO1FBQ3ZDLElBQUlVLFNBQVM7WUFDWGpCLGNBQWNpQjtZQUNkZixlQUFlaUI7WUFDZmIsVUFBVTtRQUNaO0lBQ0Y7SUFFQSxJQUFJLENBQUNBLFNBQVM7UUFDWixPQUFPO0lBQ1Q7SUFFQVAsUUFBUTZCLFdBQVcsR0FBRzVCO0lBQ3RCRCxRQUFRSSxLQUFLLEdBQUdEO0lBQ2hCSCxRQUFROEIsWUFBWSxHQUFHekI7SUFDdkJMLFFBQVErQixZQUFZLEdBQUdoQyxJQUFJaUMsSUFBSTtJQUUvQixPQUFPQyxDQUFBQSxHQUFBQSxlQUFBQSxhQUFBQSxFQUFjcEMsT0FBT0c7QUFDOUI7QUFFQSxTQUFTUyw4QkFBOEJDLFFBQWtDO0lBQ3ZFLElBQUksQ0FBQ0EsVUFBVSxPQUFPO0lBRXRCLE1BQU1nQixpQkFBaUJoQixRQUFRLENBQUMsRUFBRTtJQUNsQyxNQUFNYSxVQUFVYixRQUFRLENBQUMsRUFBRTtJQUUzQixJQUFJYSxTQUFTO1FBQ1gsT0FBTztJQUNUO0lBRUEsSUFBSyxNQUFNVyxPQUFPUixlQUFnQjtRQUNoQyxJQUFJakIsOEJBQThCaUIsY0FBYyxDQUFDUSxJQUFJLEdBQUc7WUFDdEQsT0FBTztRQUNUO0lBQ0Y7SUFFQSxPQUFPO0FBQ1Q7QUFFQSxTQUFTVixtQ0FDUDVCLFdBQW1CLEVBQ25Cd0IsUUFBbUIsRUFDbkJlLGFBQXdCLEVBQ3hCQyxXQUE4QixFQUM5QkMsaUJBQTJDO0lBRTNDLE1BQU1DLGdCQUFnQjFCLE9BQU8yQixJQUFJLENBQUNILFdBQVcsQ0FBQyxFQUFFLEVBQUVJLE1BQU0sS0FBSztJQUM3RCxJQUFJRixlQUFlO1FBQ2pCO0lBQ0Y7SUFFQSxJQUFLLE1BQU1KLE9BQU9FLFdBQVcsQ0FBQyxFQUFFLENBQUU7UUFDaEMsTUFBTUsscUJBQXFCTCxXQUFXLENBQUMsRUFBRSxDQUFDRixJQUFJO1FBQzlDLE1BQU1RLDBCQUEwQkQsa0JBQWtCLENBQUMsRUFBRTtRQUNyRCxNQUFNRSxXQUFXQyxDQUFBQSxHQUFBQSxzQkFBQUEsb0JBQUFBLEVBQXFCRjtRQUV0QyxNQUFNRyxtQkFDSlIsc0JBQXNCLFFBQVFBLGlCQUFpQixDQUFDLEVBQUUsQ0FBQ0gsSUFBSSxLQUFLWSxZQUN4RFQsaUJBQWlCLENBQUMsRUFBRSxDQUFDSCxJQUFJLEdBQ3pCO1FBRU4sSUFBSWE7UUFDSixJQUFJRixxQkFBcUIsTUFBTTtZQUM3QixxQ0FBcUM7WUFDckMsTUFBTXZCLE1BQU11QixnQkFBZ0IsQ0FBQyxFQUFFO1lBQy9CLE1BQU10QixVQUFVc0IsZ0JBQWdCLENBQUMsRUFBRTtZQUNuQ0UsZUFBZTtnQkFDYkMsVUFBVTtnQkFDViwyRUFBMkU7Z0JBQzNFMUIsS0FBS29CLHdCQUF3Qk8sUUFBUSxDQUFDQyxTQUFBQSxnQkFBZ0IsSUFBSSxPQUFPNUI7Z0JBQ2pFRyxhQUFhO2dCQUNiMEIsTUFBTTtnQkFDTkMsY0FBYztnQkFDZDFCLGdCQUFnQixJQUFJQztnQkFDcEJKO2dCQUNBM0I7WUFDRjtRQUNGLE9BQU87WUFDTCxrRUFBa0U7WUFDbEUsaUJBQWlCO1lBQ2pCbUQsZUFBZTtnQkFDYkMsVUFBVTtnQkFDVjFCLEtBQUs7Z0JBQ0xHLGFBQWE7Z0JBQ2IwQixNQUFNO2dCQUNOQyxjQUFjO2dCQUNkMUIsZ0JBQWdCLElBQUlDO2dCQUNwQkosU0FBUztnQkFDVDNCLGFBQWEsQ0FBQztZQUNoQjtRQUNGO1FBRUEsTUFBTXlELHlCQUF5QmpDLFNBQVNNLGNBQWMsQ0FBQzRCLEdBQUcsQ0FBQ3BCO1FBQzNELElBQUltQix3QkFBd0I7WUFDMUJBLHVCQUF1QkUsR0FBRyxDQUFDWixVQUFVSTtRQUN2QyxPQUFPO1lBQ0wzQixTQUFTTSxjQUFjLENBQUM2QixHQUFHLENBQUNyQixLQUFLLElBQUlQLElBQUk7Z0JBQUM7b0JBQUNnQjtvQkFBVUk7aUJBQWE7YUFBQztRQUNyRTtRQUVBdkIsbUNBQ0U1QixhQUNBbUQsY0FDQVosZUFDQU0sb0JBQ0FJO0lBRUo7QUFDRjtBQVNPLFNBQVNuRCw4QkFDZDhELGlCQUFvQyxFQUNwQzFDLFlBQTJEO0lBRTNELE1BQU0sQ0FBQzJDLFNBQVMvQixnQkFBZ0IsR0FBR2dDLEtBQUssR0FBR0Y7SUFFM0MscUVBQXFFO0lBQ3JFLElBQUlDLFFBQVFSLFFBQVEsQ0FBQ0MsU0FBQUEsZ0JBQWdCLEdBQUc7UUFDdEMsTUFBTVMsYUFBYUMsQ0FBQUEsR0FBQUEsU0FBQUEsNEJBQUFBLEVBQTZCSCxTQUFTM0M7UUFDekQsT0FBTztZQUFDNkM7WUFBWWpDO2VBQW1CZ0M7U0FBSztJQUM5QztJQUVBLHVFQUF1RTtJQUN2RSxNQUFNRyx3QkFBOEQsQ0FBQztJQUVyRSxLQUFLLE1BQU0sQ0FBQzNCLEtBQUs0QixjQUFjLElBQUlsRCxPQUFPbUQsT0FBTyxDQUFDckMsZ0JBQWlCO1FBQ2pFbUMscUJBQXFCLENBQUMzQixJQUFJLEdBQUd4Qyw4QkFDM0JvRSxlQUNBaEQ7SUFFSjtJQUVBLE9BQU87UUFBQzJDO1FBQVNJO1dBQTBCSDtLQUFLO0FBQ2xEIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvYWxpYXNlZC1wcmVmZXRjaC1uYXZpZ2F0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIENhY2hlTm9kZVNlZWREYXRhLFxuICBGbGlnaHRSb3V0ZXJTdGF0ZSxcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhY2hlTm9kZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHtcbiAgYWRkU2VhcmNoUGFyYW1zSWZQYWdlU2VnbWVudCxcbiAgUEFHRV9TRUdNRU5UX0tFWSxcbn0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2xpYi9zZWdtZW50J1xuaW1wb3J0IHR5cGUgeyBOb3JtYWxpemVkRmxpZ2h0RGF0YSB9IGZyb20gJy4uLy4uL2ZsaWdodC1kYXRhLWhlbHBlcnMnXG5pbXBvcnQgeyBjcmVhdGVFbXB0eUNhY2hlTm9kZSB9IGZyb20gJy4uL2FwcC1yb3V0ZXInXG5pbXBvcnQgeyBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWUgfSBmcm9tICcuL2FwcGx5LXJvdXRlci1zdGF0ZS1wYXRjaC10by10cmVlJ1xuaW1wb3J0IHsgY3JlYXRlSHJlZkZyb21VcmwgfSBmcm9tICcuL2NyZWF0ZS1ocmVmLWZyb20tdXJsJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyQ2FjaGVLZXkgfSBmcm9tICcuL2NyZWF0ZS1yb3V0ZXItY2FjaGUta2V5J1xuaW1wb3J0IHsgZmlsbENhY2hlV2l0aE5ld1N1YlRyZWVEYXRhQnV0T25seUxvYWRpbmcgfSBmcm9tICcuL2ZpbGwtY2FjaGUtd2l0aC1uZXctc3VidHJlZS1kYXRhJ1xuaW1wb3J0IHsgaGFuZGxlTXV0YWJsZSB9IGZyb20gJy4vaGFuZGxlLW11dGFibGUnXG5pbXBvcnQgdHlwZSB7IE11dGFibGUsIFJlYWRvbmx5UmVkdWNlclN0YXRlIH0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci10eXBlcydcblxuLyoqXG4gKiBUaGlzIGlzIGEgc3RvcC1nYXAgdW50aWwgcGVyLXNlZ21lbnQgY2FjaGluZyBpcyBpbXBsZW1lbnRlZC4gSXQgbGV2ZXJhZ2VzIHRoZSBgYWxpYXNlZGAgZmxhZyB0aGF0IGlzIGFkZGVkXG4gKiB0byBwcmVmZXRjaCBlbnRyaWVzIHdoZW4gaXQncyBkZXRlcm1pbmVkIHRoYXQgdGhlIGxvYWRpbmcgc3RhdGUgZnJvbSB0aGF0IGVudHJ5IHNob3VsZCBiZSB1c2VkIGZvciB0aGlzIG5hdmlnYXRpb24uXG4gKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBhbGlhc2VkIGVudHJ5IGFuZCBvbmx5IGFwcGxpZXMgdGhlIGxvYWRpbmcgc3RhdGUgdG8gdGhlIHVwZGF0ZWQgY2FjaGUgbm9kZS5cbiAqIFdlIHNob3VsZCByZW1vdmUgdGhpcyBvbmNlIHBlci1zZWdtZW50IGZldGNoaW5nIGlzIGltcGxlbWVudGVkIGFzIGlkZWFsbHkgdGhlIHByZWZldGNoIGNhY2hlIHdpbGwgY29udGFpbiBhXG4gKiBtb3JlIGdyYW51bGFyIHNlZ21lbnQgbWFwIGFuZCBzbyB0aGUgcm91dGVyIHdpbGwgYmUgYWJsZSB0byBzaW1wbHkgcmUtdXNlIHRoZSBsb2FkaW5nIHNlZ21lbnQgZm9yIHRoZSBuZXcgbmF2aWdhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUFsaWFzZWRQcmVmZXRjaEVudHJ5KFxuICBuYXZpZ2F0ZWRBdDogbnVtYmVyLFxuICBzdGF0ZTogUmVhZG9ubHlSZWR1Y2VyU3RhdGUsXG4gIGZsaWdodERhdGE6IHN0cmluZyB8IE5vcm1hbGl6ZWRGbGlnaHREYXRhW10sXG4gIHVybDogVVJMLFxuICBtdXRhYmxlOiBNdXRhYmxlXG4pIHtcbiAgbGV0IGN1cnJlbnRUcmVlID0gc3RhdGUudHJlZVxuICBsZXQgY3VycmVudENhY2hlID0gc3RhdGUuY2FjaGVcbiAgY29uc3QgaHJlZiA9IGNyZWF0ZUhyZWZGcm9tVXJsKHVybClcbiAgbGV0IGFwcGxpZWRcblxuICBpZiAodHlwZW9mIGZsaWdodERhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGNvbnN0IG5vcm1hbGl6ZWRGbGlnaHREYXRhIG9mIGZsaWdodERhdGEpIHtcbiAgICAvLyBJZiB0aGUgc2VnbWVudCBkb2Vzbid0IGhhdmUgYSBsb2FkaW5nIGNvbXBvbmVudCwgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy5cbiAgICBpZiAoIWhhc0xvYWRpbmdDb21wb25lbnRJblNlZWREYXRhKG5vcm1hbGl6ZWRGbGlnaHREYXRhLnNlZWREYXRhKSkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBsZXQgdHJlZVBhdGNoID0gbm9ybWFsaXplZEZsaWdodERhdGEudHJlZVxuICAgIC8vIFNlZ21lbnRzIGFyZSBrZXllZCBieSBzZWFyY2hQYXJhbXMgKGUuZy4gX19QQUdFX18/e1wiZm9vXCI6XCJiYXJcIn0pLiBXZSBtaWdodCByZXR1cm4gYSBsZXNzIHNwZWNpZmljLCBwYXJhbS1sZXNzIGVudHJ5LFxuICAgIC8vIHNvIHdlIGVuc3VyZSB0aGF0IHRoZSBmaW5hbCB0cmVlIGNvbnRhaW5zIHRoZSBjb3JyZWN0IHNlYXJjaFBhcmFtcyAocmVmbGVjdGVkIGluIHRoZSBVUkwpIGFyZSBwcm92aWRlZCBpbiB0aGUgdXBkYXRlZCBGbGlnaHRSb3V0ZXJTdGF0ZSB0cmVlLlxuICAgIC8vIFdlIG9ubHkgZG8gdGhpcyBvbiB0aGUgZmlyc3QgcmVhZCwgYXMgb3RoZXJ3aXNlIHdlJ2QgYmUgb3ZlcndyaXRpbmcgdGhlIHNlYXJjaFBhcmFtcyB0aGF0IG1heSBoYXZlIGFscmVhZHkgYmVlbiBzZXRcbiAgICB0cmVlUGF0Y2ggPSBhZGRTZWFyY2hQYXJhbXNUb1BhZ2VTZWdtZW50cyhcbiAgICAgIHRyZWVQYXRjaCxcbiAgICAgIE9iamVjdC5mcm9tRW50cmllcyh1cmwuc2VhcmNoUGFyYW1zKVxuICAgIClcblxuICAgIGNvbnN0IHsgc2VlZERhdGEsIGlzUm9vdFJlbmRlciwgcGF0aFRvU2VnbWVudCB9ID0gbm9ybWFsaXplZEZsaWdodERhdGFcbiAgICAvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgY29uc3QgZmxpZ2h0U2VnbWVudFBhdGhXaXRoTGVhZGluZ0VtcHR5ID0gWycnLCAuLi5wYXRoVG9TZWdtZW50XVxuXG4gICAgLy8gU2VnbWVudHMgYXJlIGtleWVkIGJ5IHNlYXJjaFBhcmFtcyAoZS5nLiBfX1BBR0VfXz97XCJmb29cIjpcImJhclwifSkuIFdlIG1pZ2h0IHJldHVybiBhIGxlc3Mgc3BlY2lmaWMsIHBhcmFtLWxlc3MgZW50cnksXG4gICAgLy8gc28gd2UgZW5zdXJlIHRoYXQgdGhlIGZpbmFsIHRyZWUgY29udGFpbnMgdGhlIGNvcnJlY3Qgc2VhcmNoUGFyYW1zIChyZWZsZWN0ZWQgaW4gdGhlIFVSTCkgYXJlIHByb3ZpZGVkIGluIHRoZSB1cGRhdGVkIEZsaWdodFJvdXRlclN0YXRlIHRyZWUuXG4gICAgLy8gV2Ugb25seSBkbyB0aGlzIG9uIHRoZSBmaXJzdCByZWFkLCBhcyBvdGhlcndpc2Ugd2UnZCBiZSBvdmVyd3JpdGluZyB0aGUgc2VhcmNoUGFyYW1zIHRoYXQgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIHNldFxuICAgIHRyZWVQYXRjaCA9IGFkZFNlYXJjaFBhcmFtc1RvUGFnZVNlZ21lbnRzKFxuICAgICAgdHJlZVBhdGNoLFxuICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKHVybC5zZWFyY2hQYXJhbXMpXG4gICAgKVxuXG4gICAgbGV0IG5ld1RyZWUgPSBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWUoXG4gICAgICBmbGlnaHRTZWdtZW50UGF0aFdpdGhMZWFkaW5nRW1wdHksXG4gICAgICBjdXJyZW50VHJlZSxcbiAgICAgIHRyZWVQYXRjaCxcbiAgICAgIGhyZWZcbiAgICApXG5cbiAgICBjb25zdCBuZXdDYWNoZSA9IGNyZWF0ZUVtcHR5Q2FjaGVOb2RlKClcblxuICAgIC8vIFRoZSBwcmVmZXRjaCBjYWNoZSBlbnRyeSB3YXMgYWxpYXNlZCAtLSB0aGlzIHNpZ25hbHMgdGhhdCB3ZSBvbmx5IGZpbGwgaW4gdGhlIGNhY2hlIHdpdGggdGhlXG4gICAgLy8gbG9hZGluZyBzdGF0ZSBhbmQgbm90IHRoZSBhY3R1YWwgcGFyYWxsZWwgcm91dGUgc2VlZCBkYXRhLlxuICAgIGlmIChpc1Jvb3RSZW5kZXIgJiYgc2VlZERhdGEpIHtcbiAgICAgIC8vIEZpbGwgaW4gdGhlIGNhY2hlIHdpdGggdGhlIG5ldyBsb2FkaW5nIC8gcnNjIGRhdGFcbiAgICAgIGNvbnN0IHJzYyA9IHNlZWREYXRhWzFdXG4gICAgICBjb25zdCBsb2FkaW5nID0gc2VlZERhdGFbM11cbiAgICAgIG5ld0NhY2hlLmxvYWRpbmcgPSBsb2FkaW5nXG4gICAgICBuZXdDYWNoZS5yc2MgPSByc2NcblxuICAgICAgLy8gQ29uc3RydWN0IGEgbmV3IHRyZWUgYW5kIGFwcGx5IHRoZSBhbGlhc2VkIGxvYWRpbmcgc3RhdGUgZm9yIGVhY2ggcGFyYWxsZWwgcm91dGVcbiAgICAgIGZpbGxOZXdUcmVlV2l0aE9ubHlMb2FkaW5nU2VnbWVudHMoXG4gICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgICBuZXdDYWNoZSxcbiAgICAgICAgY3VycmVudENhY2hlLFxuICAgICAgICB0cmVlUGF0Y2gsXG4gICAgICAgIHNlZWREYXRhXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvcHkgcnNjIGZvciB0aGUgcm9vdCBub2RlIG9mIHRoZSBjYWNoZS5cbiAgICAgIG5ld0NhY2hlLnJzYyA9IGN1cnJlbnRDYWNoZS5yc2NcbiAgICAgIG5ld0NhY2hlLnByZWZldGNoUnNjID0gY3VycmVudENhY2hlLnByZWZldGNoUnNjXG4gICAgICBuZXdDYWNoZS5sb2FkaW5nID0gY3VycmVudENhY2hlLmxvYWRpbmdcbiAgICAgIG5ld0NhY2hlLnBhcmFsbGVsUm91dGVzID0gbmV3IE1hcChjdXJyZW50Q2FjaGUucGFyYWxsZWxSb3V0ZXMpXG5cbiAgICAgIC8vIGNvcHkgdGhlIGxvYWRpbmcgc3RhdGUgb25seSBpbnRvIHRoZSBsZWFmIG5vZGUgKHRoZSBwYXJ0IHRoYXQgY2hhbmdlZClcbiAgICAgIGZpbGxDYWNoZVdpdGhOZXdTdWJUcmVlRGF0YUJ1dE9ubHlMb2FkaW5nKFxuICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgbmV3Q2FjaGUsXG4gICAgICAgIGN1cnJlbnRDYWNoZSxcbiAgICAgICAgbm9ybWFsaXplZEZsaWdodERhdGFcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFuIHVwZGF0ZWQgdHJlZSwgdGhlcmUncyBubyByZWFzb24gdG8gdXBkYXRlIHRoZSBjYWNoZSwgYXMgdGhlIHRyZWVcbiAgICAvLyBkaWN0YXRlcyB3aGF0IGNhY2hlIG5vZGVzIHRvIHJlbmRlci5cbiAgICBpZiAobmV3VHJlZSkge1xuICAgICAgY3VycmVudFRyZWUgPSBuZXdUcmVlXG4gICAgICBjdXJyZW50Q2FjaGUgPSBuZXdDYWNoZVxuICAgICAgYXBwbGllZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICBpZiAoIWFwcGxpZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIG11dGFibGUucGF0Y2hlZFRyZWUgPSBjdXJyZW50VHJlZVxuICBtdXRhYmxlLmNhY2hlID0gY3VycmVudENhY2hlXG4gIG11dGFibGUuY2Fub25pY2FsVXJsID0gaHJlZlxuICBtdXRhYmxlLmhhc2hGcmFnbWVudCA9IHVybC5oYXNoXG5cbiAgcmV0dXJuIGhhbmRsZU11dGFibGUoc3RhdGUsIG11dGFibGUpXG59XG5cbmZ1bmN0aW9uIGhhc0xvYWRpbmdDb21wb25lbnRJblNlZWREYXRhKHNlZWREYXRhOiBDYWNoZU5vZGVTZWVkRGF0YSB8IG51bGwpIHtcbiAgaWYgKCFzZWVkRGF0YSkgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgcGFyYWxsZWxSb3V0ZXMgPSBzZWVkRGF0YVsyXVxuICBjb25zdCBsb2FkaW5nID0gc2VlZERhdGFbM11cblxuICBpZiAobG9hZGluZykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbGxlbFJvdXRlcykge1xuICAgIGlmIChoYXNMb2FkaW5nQ29tcG9uZW50SW5TZWVkRGF0YShwYXJhbGxlbFJvdXRlc1trZXldKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gZmlsbE5ld1RyZWVXaXRoT25seUxvYWRpbmdTZWdtZW50cyhcbiAgbmF2aWdhdGVkQXQ6IG51bWJlcixcbiAgbmV3Q2FjaGU6IENhY2hlTm9kZSxcbiAgZXhpc3RpbmdDYWNoZTogQ2FjaGVOb2RlLFxuICByb3V0ZXJTdGF0ZTogRmxpZ2h0Um91dGVyU3RhdGUsXG4gIGNhY2hlTm9kZVNlZWREYXRhOiBDYWNoZU5vZGVTZWVkRGF0YSB8IG51bGxcbikge1xuICBjb25zdCBpc0xhc3RTZWdtZW50ID0gT2JqZWN0LmtleXMocm91dGVyU3RhdGVbMV0pLmxlbmd0aCA9PT0gMFxuICBpZiAoaXNMYXN0U2VnbWVudCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gcm91dGVyU3RhdGVbMV0pIHtcbiAgICBjb25zdCBwYXJhbGxlbFJvdXRlU3RhdGUgPSByb3V0ZXJTdGF0ZVsxXVtrZXldXG4gICAgY29uc3Qgc2VnbWVudEZvclBhcmFsbGVsUm91dGUgPSBwYXJhbGxlbFJvdXRlU3RhdGVbMF1cbiAgICBjb25zdCBjYWNoZUtleSA9IGNyZWF0ZVJvdXRlckNhY2hlS2V5KHNlZ21lbnRGb3JQYXJhbGxlbFJvdXRlKVxuXG4gICAgY29uc3QgcGFyYWxsZWxTZWVkRGF0YSA9XG4gICAgICBjYWNoZU5vZGVTZWVkRGF0YSAhPT0gbnVsbCAmJiBjYWNoZU5vZGVTZWVkRGF0YVsyXVtrZXldICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBjYWNoZU5vZGVTZWVkRGF0YVsyXVtrZXldXG4gICAgICAgIDogbnVsbFxuXG4gICAgbGV0IG5ld0NhY2hlTm9kZTogQ2FjaGVOb2RlXG4gICAgaWYgKHBhcmFsbGVsU2VlZERhdGEgIT09IG51bGwpIHtcbiAgICAgIC8vIE5ldyBkYXRhIHdhcyBzZW50IGZyb20gdGhlIHNlcnZlci5cbiAgICAgIGNvbnN0IHJzYyA9IHBhcmFsbGVsU2VlZERhdGFbMV1cbiAgICAgIGNvbnN0IGxvYWRpbmcgPSBwYXJhbGxlbFNlZWREYXRhWzNdXG4gICAgICBuZXdDYWNoZU5vZGUgPSB7XG4gICAgICAgIGxhenlEYXRhOiBudWxsLFxuICAgICAgICAvLyBjb3B5IHRoZSBsYXlvdXQgYnV0IG51bGwgdGhlIHBhZ2Ugc2VnbWVudCBhcyB0aGF0J3Mgbm90IG1lYW50IHRvIGJlIHVzZWRcbiAgICAgICAgcnNjOiBzZWdtZW50Rm9yUGFyYWxsZWxSb3V0ZS5pbmNsdWRlcyhQQUdFX1NFR01FTlRfS0VZKSA/IG51bGwgOiByc2MsXG4gICAgICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgICAgICBoZWFkOiBudWxsLFxuICAgICAgICBwcmVmZXRjaEhlYWQ6IG51bGwsXG4gICAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKCksXG4gICAgICAgIGxvYWRpbmcsXG4gICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBkYXRhIGF2YWlsYWJsZSBmb3IgdGhpcyBub2RlLiBUaGlzIHdpbGwgdHJpZ2dlciBhIGxhenkgZmV0Y2hcbiAgICAgIC8vIGR1cmluZyByZW5kZXIuXG4gICAgICBuZXdDYWNoZU5vZGUgPSB7XG4gICAgICAgIGxhenlEYXRhOiBudWxsLFxuICAgICAgICByc2M6IG51bGwsXG4gICAgICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgICAgICBoZWFkOiBudWxsLFxuICAgICAgICBwcmVmZXRjaEhlYWQ6IG51bGwsXG4gICAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKCksXG4gICAgICAgIGxvYWRpbmc6IG51bGwsXG4gICAgICAgIG5hdmlnYXRlZEF0OiAtMSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZ1BhcmFsbGVsUm91dGVzID0gbmV3Q2FjaGUucGFyYWxsZWxSb3V0ZXMuZ2V0KGtleSlcbiAgICBpZiAoZXhpc3RpbmdQYXJhbGxlbFJvdXRlcykge1xuICAgICAgZXhpc3RpbmdQYXJhbGxlbFJvdXRlcy5zZXQoY2FjaGVLZXksIG5ld0NhY2hlTm9kZSlcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3Q2FjaGUucGFyYWxsZWxSb3V0ZXMuc2V0KGtleSwgbmV3IE1hcChbW2NhY2hlS2V5LCBuZXdDYWNoZU5vZGVdXSkpXG4gICAgfVxuXG4gICAgZmlsbE5ld1RyZWVXaXRoT25seUxvYWRpbmdTZWdtZW50cyhcbiAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgbmV3Q2FjaGVOb2RlLFxuICAgICAgZXhpc3RpbmdDYWNoZSxcbiAgICAgIHBhcmFsbGVsUm91dGVTdGF0ZSxcbiAgICAgIHBhcmFsbGVsU2VlZERhdGFcbiAgICApXG4gIH1cbn1cblxuLyoqXG4gKiBBZGQgc2VhcmNoIHBhcmFtcyB0byB0aGUgcGFnZSBzZWdtZW50cyBpbiB0aGUgZmxpZ2h0IHJvdXRlciBzdGF0ZVxuICogUGFnZSBzZWdtZW50cyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggc2VhcmNoIHBhcmFtcyBoYXZlIGEgcGFnZSBzZWdtZW50IGtleVxuICogZm9sbG93ZWQgYnkgYSBxdWVyeSBzdHJpbmcuIFRoaXMgZnVuY3Rpb24gd2lsbCBhZGQgdGhvc2UgcGFyYW1zIHRvIHRoZSBwYWdlIHNlZ21lbnQuXG4gKiBUaGlzIGlzIHVzZWZ1bCBpZiB3ZSByZXR1cm4gYW4gYWxpYXNlZCBwcmVmZXRjaCBlbnRyeSAoaWUsIHdvbid0IGhhdmUgc2VhcmNoIHBhcmFtcylcbiAqIGJ1dCB0aGUgY2Fub25pY2FsIHJvdXRlciBVUkwgaGFzIHNlYXJjaCBwYXJhbXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRTZWFyY2hQYXJhbXNUb1BhZ2VTZWdtZW50cyhcbiAgZmxpZ2h0Um91dGVyU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlLFxuICBzZWFyY2hQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkPlxuKTogRmxpZ2h0Um91dGVyU3RhdGUge1xuICBjb25zdCBbc2VnbWVudCwgcGFyYWxsZWxSb3V0ZXMsIC4uLnJlc3RdID0gZmxpZ2h0Um91dGVyU3RhdGVcblxuICAvLyBJZiBpdCdzIGEgcGFnZSBzZWdtZW50LCBtb2RpZnkgdGhlIHNlZ21lbnQgYnkgYWRkaW5nIHNlYXJjaCBwYXJhbXNcbiAgaWYgKHNlZ21lbnQuaW5jbHVkZXMoUEFHRV9TRUdNRU5UX0tFWSkpIHtcbiAgICBjb25zdCBuZXdTZWdtZW50ID0gYWRkU2VhcmNoUGFyYW1zSWZQYWdlU2VnbWVudChzZWdtZW50LCBzZWFyY2hQYXJhbXMpXG4gICAgcmV0dXJuIFtuZXdTZWdtZW50LCBwYXJhbGxlbFJvdXRlcywgLi4ucmVzdF1cbiAgfVxuXG4gIC8vIE90aGVyd2lzZSwgcmVjdXJzZSB0aHJvdWdoIHRoZSBwYXJhbGxlbCByb3V0ZXMgYW5kIHJldHVybiBhIG5ldyB0cmVlXG4gIGNvbnN0IHVwZGF0ZWRQYXJhbGxlbFJvdXRlczogeyBba2V5OiBzdHJpbmddOiBGbGlnaHRSb3V0ZXJTdGF0ZSB9ID0ge31cblxuICBmb3IgKGNvbnN0IFtrZXksIHBhcmFsbGVsUm91dGVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcmFsbGVsUm91dGVzKSkge1xuICAgIHVwZGF0ZWRQYXJhbGxlbFJvdXRlc1trZXldID0gYWRkU2VhcmNoUGFyYW1zVG9QYWdlU2VnbWVudHMoXG4gICAgICBwYXJhbGxlbFJvdXRlLFxuICAgICAgc2VhcmNoUGFyYW1zXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIFtzZWdtZW50LCB1cGRhdGVkUGFyYWxsZWxSb3V0ZXMsIC4uLnJlc3RdXG59XG4iXSwibmFtZXMiOlsiYWRkU2VhcmNoUGFyYW1zVG9QYWdlU2VnbWVudHMiLCJoYW5kbGVBbGlhc2VkUHJlZmV0Y2hFbnRyeSIsIm5hdmlnYXRlZEF0Iiwic3RhdGUiLCJmbGlnaHREYXRhIiwidXJsIiwibXV0YWJsZSIsImN1cnJlbnRUcmVlIiwidHJlZSIsImN1cnJlbnRDYWNoZSIsImNhY2hlIiwiaHJlZiIsImNyZWF0ZUhyZWZGcm9tVXJsIiwiYXBwbGllZCIsIm5vcm1hbGl6ZWRGbGlnaHREYXRhIiwiaGFzTG9hZGluZ0NvbXBvbmVudEluU2VlZERhdGEiLCJzZWVkRGF0YSIsInRyZWVQYXRjaCIsIk9iamVjdCIsImZyb21FbnRyaWVzIiwic2VhcmNoUGFyYW1zIiwiaXNSb290UmVuZGVyIiwicGF0aFRvU2VnbWVudCIsImZsaWdodFNlZ21lbnRQYXRoV2l0aExlYWRpbmdFbXB0eSIsIm5ld1RyZWUiLCJhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWUiLCJuZXdDYWNoZSIsImNyZWF0ZUVtcHR5Q2FjaGVOb2RlIiwicnNjIiwibG9hZGluZyIsImZpbGxOZXdUcmVlV2l0aE9ubHlMb2FkaW5nU2VnbWVudHMiLCJwcmVmZXRjaFJzYyIsInBhcmFsbGVsUm91dGVzIiwiTWFwIiwiZmlsbENhY2hlV2l0aE5ld1N1YlRyZWVEYXRhQnV0T25seUxvYWRpbmciLCJwYXRjaGVkVHJlZSIsImNhbm9uaWNhbFVybCIsImhhc2hGcmFnbWVudCIsImhhc2giLCJoYW5kbGVNdXRhYmxlIiwia2V5IiwiZXhpc3RpbmdDYWNoZSIsInJvdXRlclN0YXRlIiwiY2FjaGVOb2RlU2VlZERhdGEiLCJpc0xhc3RTZWdtZW50Iiwia2V5cyIsImxlbmd0aCIsInBhcmFsbGVsUm91dGVTdGF0ZSIsInNlZ21lbnRGb3JQYXJhbGxlbFJvdXRlIiwiY2FjaGVLZXkiLCJjcmVhdGVSb3V0ZXJDYWNoZUtleSIsInBhcmFsbGVsU2VlZERhdGEiLCJ1bmRlZmluZWQiLCJuZXdDYWNoZU5vZGUiLCJsYXp5RGF0YSIsImluY2x1ZGVzIiwiUEFHRV9TRUdNRU5UX0tFWSIsImhlYWQiLCJwcmVmZXRjaEhlYWQiLCJleGlzdGluZ1BhcmFsbGVsUm91dGVzIiwiZ2V0Iiwic2V0IiwiZmxpZ2h0Um91dGVyU3RhdGUiLCJzZWdtZW50IiwicmVzdCIsIm5ld1NlZ21lbnQiLCJhZGRTZWFyY2hQYXJhbXNJZlBhZ2VTZWdtZW50IiwidXBkYXRlZFBhcmFsbGVsUm91dGVzIiwicGFyYWxsZWxSb3V0ZSIsImVudHJpZXMiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/aliased-prefetch-navigations.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/apply-flight-data.js":
/*!**********************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/apply-flight-data.js ***!
  \**********************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"applyFlightData\", ({\n    enumerable: true,\n    get: function() {\n        return applyFlightData;\n    }\n}));\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ./fill-lazy-items-till-leaf-with-head */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _fillcachewithnewsubtreedata = __webpack_require__(/*! ./fill-cache-with-new-subtree-data */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js\");\nfunction applyFlightData(navigatedAt, existingCache, cache, flightData, prefetchEntry) {\n    // The one before last item is the router state tree patch\n    const { tree: treePatch, seedData, head, isRootRender } = flightData;\n    // Handles case where prefetch only returns the router tree patch without rendered components.\n    if (seedData === null) {\n        return false;\n    }\n    if (isRootRender) {\n        const rsc = seedData[1];\n        const loading = seedData[3];\n        cache.loading = loading;\n        cache.rsc = rsc;\n        // This is a PPR-only field. When PPR is enabled, we shouldn't hit\n        // this path during a navigation, but until PPR is fully implemented\n        // yet it's possible the existing node does have a non-null\n        // `prefetchRsc`. As an incremental step, we'll just de-opt to the\n        // old behavior — no PPR value.\n        cache.prefetchRsc = null;\n        (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(navigatedAt, cache, existingCache, treePatch, seedData, head, prefetchEntry);\n    } else {\n        // Copy rsc for the root node of the cache.\n        cache.rsc = existingCache.rsc;\n        // This is a PPR-only field. Unlike the previous branch, since we're\n        // just cloning the existing cache node, we might as well keep the\n        // PPR value, if it exists.\n        cache.prefetchRsc = existingCache.prefetchRsc;\n        cache.parallelRoutes = new Map(existingCache.parallelRoutes);\n        cache.loading = existingCache.loading;\n        // Create a copy of the existing cache with the rsc applied.\n        (0, _fillcachewithnewsubtreedata.fillCacheWithNewSubTreeData)(navigatedAt, cache, existingCache, flightData, prefetchEntry);\n    }\n    return true;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=apply-flight-data.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9hcHBseS1mbGlnaHQtZGF0YS5qcyIsIm1hcHBpbmdzIjoiOzs7O21EQU1nQkE7OztlQUFBQTs7OzJEQUw4Qjt5REFDRjtBQUlyQyxTQUFTQSxnQkFDZEMsV0FBbUIsRUFDbkJDLGFBQXdCLEVBQ3hCQyxLQUFnQixFQUNoQkMsVUFBZ0MsRUFDaENDLGFBQWtDO0lBRWxDLDBEQUEwRDtJQUMxRCxNQUFNLEVBQUVDLE1BQU1DLFNBQVMsRUFBRUMsUUFBUSxFQUFFQyxJQUFJLEVBQUVDLFlBQVksRUFBRSxHQUFHTjtJQUUxRCw4RkFBOEY7SUFDOUYsSUFBSUksYUFBYSxNQUFNO1FBQ3JCLE9BQU87SUFDVDtJQUVBLElBQUlFLGNBQWM7UUFDaEIsTUFBTUMsTUFBTUgsUUFBUSxDQUFDLEVBQUU7UUFDdkIsTUFBTUksVUFBVUosUUFBUSxDQUFDLEVBQUU7UUFDM0JMLE1BQU1TLE9BQU8sR0FBR0E7UUFDaEJULE1BQU1RLEdBQUcsR0FBR0E7UUFDWixrRUFBa0U7UUFDbEUsb0VBQW9FO1FBQ3BFLDJEQUEyRDtRQUMzRCxrRUFBa0U7UUFDbEUsK0JBQStCO1FBQy9CUixNQUFNVSxXQUFXLEdBQUc7UUFDcEJDLENBQUFBLEdBQUFBLCtCQUFBQSw2QkFBQUEsRUFDRWIsYUFDQUUsT0FDQUQsZUFDQUssV0FDQUMsVUFDQUMsTUFDQUo7SUFFSixPQUFPO1FBQ0wsMkNBQTJDO1FBQzNDRixNQUFNUSxHQUFHLEdBQUdULGNBQWNTLEdBQUc7UUFDN0Isb0VBQW9FO1FBQ3BFLGtFQUFrRTtRQUNsRSwyQkFBMkI7UUFDM0JSLE1BQU1VLFdBQVcsR0FBR1gsY0FBY1csV0FBVztRQUM3Q1YsTUFBTVksY0FBYyxHQUFHLElBQUlDLElBQUlkLGNBQWNhLGNBQWM7UUFDM0RaLE1BQU1TLE9BQU8sR0FBR1YsY0FBY1UsT0FBTztRQUNyQyw0REFBNEQ7UUFDNURLLENBQUFBLEdBQUFBLDZCQUFBQSwyQkFBQUEsRUFDRWhCLGFBQ0FFLE9BQ0FELGVBQ0FFLFlBQ0FDO0lBRUo7SUFFQSxPQUFPO0FBQ1QiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9hcHBseS1mbGlnaHQtZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhY2hlTm9kZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQgfSBmcm9tICcuL2ZpbGwtbGF6eS1pdGVtcy10aWxsLWxlYWYtd2l0aC1oZWFkJ1xuaW1wb3J0IHsgZmlsbENhY2hlV2l0aE5ld1N1YlRyZWVEYXRhIH0gZnJvbSAnLi9maWxsLWNhY2hlLXdpdGgtbmV3LXN1YnRyZWUtZGF0YSdcbmltcG9ydCB0eXBlIHsgUHJlZmV0Y2hDYWNoZUVudHJ5IH0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci10eXBlcydcbmltcG9ydCB0eXBlIHsgTm9ybWFsaXplZEZsaWdodERhdGEgfSBmcm9tICcuLi8uLi9mbGlnaHQtZGF0YS1oZWxwZXJzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGbGlnaHREYXRhKFxuICBuYXZpZ2F0ZWRBdDogbnVtYmVyLFxuICBleGlzdGluZ0NhY2hlOiBDYWNoZU5vZGUsXG4gIGNhY2hlOiBDYWNoZU5vZGUsXG4gIGZsaWdodERhdGE6IE5vcm1hbGl6ZWRGbGlnaHREYXRhLFxuICBwcmVmZXRjaEVudHJ5PzogUHJlZmV0Y2hDYWNoZUVudHJ5XG4pOiBib29sZWFuIHtcbiAgLy8gVGhlIG9uZSBiZWZvcmUgbGFzdCBpdGVtIGlzIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSBwYXRjaFxuICBjb25zdCB7IHRyZWU6IHRyZWVQYXRjaCwgc2VlZERhdGEsIGhlYWQsIGlzUm9vdFJlbmRlciB9ID0gZmxpZ2h0RGF0YVxuXG4gIC8vIEhhbmRsZXMgY2FzZSB3aGVyZSBwcmVmZXRjaCBvbmx5IHJldHVybnMgdGhlIHJvdXRlciB0cmVlIHBhdGNoIHdpdGhvdXQgcmVuZGVyZWQgY29tcG9uZW50cy5cbiAgaWYgKHNlZWREYXRhID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAoaXNSb290UmVuZGVyKSB7XG4gICAgY29uc3QgcnNjID0gc2VlZERhdGFbMV1cbiAgICBjb25zdCBsb2FkaW5nID0gc2VlZERhdGFbM11cbiAgICBjYWNoZS5sb2FkaW5nID0gbG9hZGluZ1xuICAgIGNhY2hlLnJzYyA9IHJzY1xuICAgIC8vIFRoaXMgaXMgYSBQUFItb25seSBmaWVsZC4gV2hlbiBQUFIgaXMgZW5hYmxlZCwgd2Ugc2hvdWxkbid0IGhpdFxuICAgIC8vIHRoaXMgcGF0aCBkdXJpbmcgYSBuYXZpZ2F0aW9uLCBidXQgdW50aWwgUFBSIGlzIGZ1bGx5IGltcGxlbWVudGVkXG4gICAgLy8geWV0IGl0J3MgcG9zc2libGUgdGhlIGV4aXN0aW5nIG5vZGUgZG9lcyBoYXZlIGEgbm9uLW51bGxcbiAgICAvLyBgcHJlZmV0Y2hSc2NgLiBBcyBhbiBpbmNyZW1lbnRhbCBzdGVwLCB3ZSdsbCBqdXN0IGRlLW9wdCB0byB0aGVcbiAgICAvLyBvbGQgYmVoYXZpb3Ig4oCUIG5vIFBQUiB2YWx1ZS5cbiAgICBjYWNoZS5wcmVmZXRjaFJzYyA9IG51bGxcbiAgICBmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZChcbiAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgY2FjaGUsXG4gICAgICBleGlzdGluZ0NhY2hlLFxuICAgICAgdHJlZVBhdGNoLFxuICAgICAgc2VlZERhdGEsXG4gICAgICBoZWFkLFxuICAgICAgcHJlZmV0Y2hFbnRyeVxuICAgIClcbiAgfSBlbHNlIHtcbiAgICAvLyBDb3B5IHJzYyBmb3IgdGhlIHJvb3Qgbm9kZSBvZiB0aGUgY2FjaGUuXG4gICAgY2FjaGUucnNjID0gZXhpc3RpbmdDYWNoZS5yc2NcbiAgICAvLyBUaGlzIGlzIGEgUFBSLW9ubHkgZmllbGQuIFVubGlrZSB0aGUgcHJldmlvdXMgYnJhbmNoLCBzaW5jZSB3ZSdyZVxuICAgIC8vIGp1c3QgY2xvbmluZyB0aGUgZXhpc3RpbmcgY2FjaGUgbm9kZSwgd2UgbWlnaHQgYXMgd2VsbCBrZWVwIHRoZVxuICAgIC8vIFBQUiB2YWx1ZSwgaWYgaXQgZXhpc3RzLlxuICAgIGNhY2hlLnByZWZldGNoUnNjID0gZXhpc3RpbmdDYWNoZS5wcmVmZXRjaFJzY1xuICAgIGNhY2hlLnBhcmFsbGVsUm91dGVzID0gbmV3IE1hcChleGlzdGluZ0NhY2hlLnBhcmFsbGVsUm91dGVzKVxuICAgIGNhY2hlLmxvYWRpbmcgPSBleGlzdGluZ0NhY2hlLmxvYWRpbmdcbiAgICAvLyBDcmVhdGUgYSBjb3B5IG9mIHRoZSBleGlzdGluZyBjYWNoZSB3aXRoIHRoZSByc2MgYXBwbGllZC5cbiAgICBmaWxsQ2FjaGVXaXRoTmV3U3ViVHJlZURhdGEoXG4gICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgIGNhY2hlLFxuICAgICAgZXhpc3RpbmdDYWNoZSxcbiAgICAgIGZsaWdodERhdGEsXG4gICAgICBwcmVmZXRjaEVudHJ5XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cbiJdLCJuYW1lcyI6WyJhcHBseUZsaWdodERhdGEiLCJuYXZpZ2F0ZWRBdCIsImV4aXN0aW5nQ2FjaGUiLCJjYWNoZSIsImZsaWdodERhdGEiLCJwcmVmZXRjaEVudHJ5IiwidHJlZSIsInRyZWVQYXRjaCIsInNlZWREYXRhIiwiaGVhZCIsImlzUm9vdFJlbmRlciIsInJzYyIsImxvYWRpbmciLCJwcmVmZXRjaFJzYyIsImZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkIiwicGFyYWxsZWxSb3V0ZXMiLCJNYXAiLCJmaWxsQ2FjaGVXaXRoTmV3U3ViVHJlZURhdGEiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/apply-flight-data.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js":
/*!*************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js ***!
  \*************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"applyRouterStatePatchToTree\", ({\n    enumerable: true,\n    get: function() {\n        return applyRouterStatePatchToTree;\n    }\n}));\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/segment.js\");\nconst _flightdatahelpers = __webpack_require__(/*! ../../flight-data-helpers */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/flight-data-helpers.js\");\nconst _matchsegments = __webpack_require__(/*! ../match-segments */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/match-segments.js\");\nconst _refetchinactiveparallelsegments = __webpack_require__(/*! ./refetch-inactive-parallel-segments */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/refetch-inactive-parallel-segments.js\");\n/**\n * Deep merge of the two router states. Parallel route keys are preserved if the patch doesn't have them.\n */ function applyPatch(initialTree, patchTree) {\n    const [initialSegment, initialParallelRoutes] = initialTree;\n    const [patchSegment, patchParallelRoutes] = patchTree;\n    // if the applied patch segment is __DEFAULT__ then it can be ignored in favor of the initial tree\n    // this is because the __DEFAULT__ segment is used as a placeholder on navigation\n    if (patchSegment === _segment.DEFAULT_SEGMENT_KEY && initialSegment !== _segment.DEFAULT_SEGMENT_KEY) {\n        return initialTree;\n    }\n    if ((0, _matchsegments.matchSegment)(initialSegment, patchSegment)) {\n        const newParallelRoutes = {};\n        for(const key in initialParallelRoutes){\n            const isInPatchTreeParallelRoutes = typeof patchParallelRoutes[key] !== 'undefined';\n            if (isInPatchTreeParallelRoutes) {\n                newParallelRoutes[key] = applyPatch(initialParallelRoutes[key], patchParallelRoutes[key]);\n            } else {\n                newParallelRoutes[key] = initialParallelRoutes[key];\n            }\n        }\n        for(const key in patchParallelRoutes){\n            if (newParallelRoutes[key]) {\n                continue;\n            }\n            newParallelRoutes[key] = patchParallelRoutes[key];\n        }\n        const tree = [\n            initialSegment,\n            newParallelRoutes\n        ];\n        // Copy over the existing tree\n        if (initialTree[2]) {\n            tree[2] = initialTree[2];\n        }\n        if (initialTree[3]) {\n            tree[3] = initialTree[3];\n        }\n        if (initialTree[4]) {\n            tree[4] = initialTree[4];\n        }\n        return tree;\n    }\n    return patchTree;\n}\nfunction applyRouterStatePatchToTree(flightSegmentPath, flightRouterState, treePatch, path) {\n    const [segment, parallelRoutes, url, refetch, isRootLayout] = flightRouterState;\n    // Root refresh\n    if (flightSegmentPath.length === 1) {\n        const tree = applyPatch(flightRouterState, treePatch);\n        (0, _refetchinactiveparallelsegments.addRefreshMarkerToActiveParallelSegments)(tree, path);\n        return tree;\n    }\n    const [currentSegment, parallelRouteKey] = flightSegmentPath;\n    // Tree path returned from the server should always match up with the current tree in the browser\n    if (!(0, _matchsegments.matchSegment)(currentSegment, segment)) {\n        return null;\n    }\n    const lastSegment = flightSegmentPath.length === 2;\n    let parallelRoutePatch;\n    if (lastSegment) {\n        parallelRoutePatch = applyPatch(parallelRoutes[parallelRouteKey], treePatch);\n    } else {\n        parallelRoutePatch = applyRouterStatePatchToTree((0, _flightdatahelpers.getNextFlightSegmentPath)(flightSegmentPath), parallelRoutes[parallelRouteKey], treePatch, path);\n        if (parallelRoutePatch === null) {\n            return null;\n        }\n    }\n    const tree = [\n        flightSegmentPath[0],\n        {\n            ...parallelRoutes,\n            [parallelRouteKey]: parallelRoutePatch\n        },\n        url,\n        refetch\n    ];\n    // Current segment is the root layout\n    if (isRootLayout) {\n        tree[4] = true;\n    }\n    (0, _refetchinactiveparallelsegments.addRefreshMarkerToActiveParallelSegments)(tree, path);\n    return tree;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=apply-router-state-patch-to-tree.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9hcHBseS1yb3V0ZXItc3RhdGUtcGF0Y2gtdG8tdHJlZS5qcyIsIm1hcHBpbmdzIjoiOzs7OytEQTZFZ0JBOzs7ZUFBQUE7OztxQ0F6RW9COytDQUNLOzJDQUNaOzZEQUM0QjtBQUV6RDs7Q0FFQyxHQUNELFNBQVNDLFdBQ1BDLFdBQThCLEVBQzlCQyxTQUE0QjtJQUU1QixNQUFNLENBQUNDLGdCQUFnQkMsc0JBQXNCLEdBQUdIO0lBQ2hELE1BQU0sQ0FBQ0ksY0FBY0Msb0JBQW9CLEdBQUdKO0lBRTVDLGtHQUFrRztJQUNsRyxpRkFBaUY7SUFDakYsSUFDRUcsaUJBQWlCRSxTQUFBQSxtQkFBbUIsSUFDcENKLG1CQUFtQkksU0FBQUEsbUJBQW1CLEVBQ3RDO1FBQ0EsT0FBT047SUFDVDtJQUVBLElBQUlPLENBQUFBLEdBQUFBLGVBQUFBLFlBQUFBLEVBQWFMLGdCQUFnQkUsZUFBZTtRQUM5QyxNQUFNSSxvQkFBMEMsQ0FBQztRQUNqRCxJQUFLLE1BQU1DLE9BQU9OLHNCQUF1QjtZQUN2QyxNQUFNTyw4QkFDSixPQUFPTCxtQkFBbUIsQ0FBQ0ksSUFBSSxLQUFLO1lBQ3RDLElBQUlDLDZCQUE2QjtnQkFDL0JGLGlCQUFpQixDQUFDQyxJQUFJLEdBQUdWLFdBQ3ZCSSxxQkFBcUIsQ0FBQ00sSUFBSSxFQUMxQkosbUJBQW1CLENBQUNJLElBQUk7WUFFNUIsT0FBTztnQkFDTEQsaUJBQWlCLENBQUNDLElBQUksR0FBR04scUJBQXFCLENBQUNNLElBQUk7WUFDckQ7UUFDRjtRQUVBLElBQUssTUFBTUEsT0FBT0osb0JBQXFCO1lBQ3JDLElBQUlHLGlCQUFpQixDQUFDQyxJQUFJLEVBQUU7Z0JBQzFCO1lBQ0Y7WUFFQUQsaUJBQWlCLENBQUNDLElBQUksR0FBR0osbUJBQW1CLENBQUNJLElBQUk7UUFDbkQ7UUFFQSxNQUFNRSxPQUEwQjtZQUFDVDtZQUFnQk07U0FBa0I7UUFFbkUsOEJBQThCO1FBQzlCLElBQUlSLFdBQVcsQ0FBQyxFQUFFLEVBQUU7WUFDbEJXLElBQUksQ0FBQyxFQUFFLEdBQUdYLFdBQVcsQ0FBQyxFQUFFO1FBQzFCO1FBRUEsSUFBSUEsV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUNsQlcsSUFBSSxDQUFDLEVBQUUsR0FBR1gsV0FBVyxDQUFDLEVBQUU7UUFDMUI7UUFFQSxJQUFJQSxXQUFXLENBQUMsRUFBRSxFQUFFO1lBQ2xCVyxJQUFJLENBQUMsRUFBRSxHQUFHWCxXQUFXLENBQUMsRUFBRTtRQUMxQjtRQUVBLE9BQU9XO0lBQ1Q7SUFFQSxPQUFPVjtBQUNUO0FBT08sU0FBU0gsNEJBQ2RjLGlCQUFvQyxFQUNwQ0MsaUJBQW9DLEVBQ3BDQyxTQUE0QixFQUM1QkMsSUFBWTtJQUVaLE1BQU0sQ0FBQ0MsU0FBU0MsZ0JBQWdCQyxLQUFLQyxTQUFTQyxhQUFhLEdBQ3pEUDtJQUVGLGVBQWU7SUFDZixJQUFJRCxrQkFBa0JTLE1BQU0sS0FBSyxHQUFHO1FBQ2xDLE1BQU1WLE9BQTBCWixXQUFXYyxtQkFBbUJDO1FBRTlEUSxDQUFBQSxHQUFBQSxpQ0FBQUEsd0NBQUFBLEVBQXlDWCxNQUFNSTtRQUUvQyxPQUFPSjtJQUNUO0lBRUEsTUFBTSxDQUFDWSxnQkFBZ0JDLGlCQUFpQixHQUFHWjtJQUUzQyxpR0FBaUc7SUFDakcsSUFBSSxDQUFDTCxDQUFBQSxHQUFBQSxlQUFBQSxZQUFBQSxFQUFhZ0IsZ0JBQWdCUCxVQUFVO1FBQzFDLE9BQU87SUFDVDtJQUVBLE1BQU1TLGNBQWNiLGtCQUFrQlMsTUFBTSxLQUFLO0lBRWpELElBQUlLO0lBQ0osSUFBSUQsYUFBYTtRQUNmQyxxQkFBcUIzQixXQUFXa0IsY0FBYyxDQUFDTyxpQkFBaUIsRUFBRVY7SUFDcEUsT0FBTztRQUNMWSxxQkFBcUI1Qiw0QkFDbkI2QixDQUFBQSxHQUFBQSxtQkFBQUEsd0JBQUFBLEVBQXlCZixvQkFDekJLLGNBQWMsQ0FBQ08saUJBQWlCLEVBQ2hDVixXQUNBQztRQUdGLElBQUlXLHVCQUF1QixNQUFNO1lBQy9CLE9BQU87UUFDVDtJQUNGO0lBRUEsTUFBTWYsT0FBMEI7UUFDOUJDLGlCQUFpQixDQUFDLEVBQUU7UUFDcEI7WUFDRSxHQUFHSyxjQUFjO1lBQ2pCLENBQUNPLGlCQUFpQixFQUFFRTtRQUN0QjtRQUNBUjtRQUNBQztLQUNEO0lBRUQscUNBQXFDO0lBQ3JDLElBQUlDLGNBQWM7UUFDaEJULElBQUksQ0FBQyxFQUFFLEdBQUc7SUFDWjtJQUVBVyxDQUFBQSxHQUFBQSxpQ0FBQUEsd0NBQUFBLEVBQXlDWCxNQUFNSTtJQUUvQyxPQUFPSjtBQUNUIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvYXBwbHktcm91dGVyLXN0YXRlLXBhdGNoLXRvLXRyZWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgRmxpZ2h0U2VnbWVudFBhdGgsXG59IGZyb20gJy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHsgREVGQVVMVF9TRUdNRU5UX0tFWSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvc2VnbWVudCdcbmltcG9ydCB7IGdldE5leHRGbGlnaHRTZWdtZW50UGF0aCB9IGZyb20gJy4uLy4uL2ZsaWdodC1kYXRhLWhlbHBlcnMnXG5pbXBvcnQgeyBtYXRjaFNlZ21lbnQgfSBmcm9tICcuLi9tYXRjaC1zZWdtZW50cydcbmltcG9ydCB7IGFkZFJlZnJlc2hNYXJrZXJUb0FjdGl2ZVBhcmFsbGVsU2VnbWVudHMgfSBmcm9tICcuL3JlZmV0Y2gtaW5hY3RpdmUtcGFyYWxsZWwtc2VnbWVudHMnXG5cbi8qKlxuICogRGVlcCBtZXJnZSBvZiB0aGUgdHdvIHJvdXRlciBzdGF0ZXMuIFBhcmFsbGVsIHJvdXRlIGtleXMgYXJlIHByZXNlcnZlZCBpZiB0aGUgcGF0Y2ggZG9lc24ndCBoYXZlIHRoZW0uXG4gKi9cbmZ1bmN0aW9uIGFwcGx5UGF0Y2goXG4gIGluaXRpYWxUcmVlOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgcGF0Y2hUcmVlOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuKTogRmxpZ2h0Um91dGVyU3RhdGUge1xuICBjb25zdCBbaW5pdGlhbFNlZ21lbnQsIGluaXRpYWxQYXJhbGxlbFJvdXRlc10gPSBpbml0aWFsVHJlZVxuICBjb25zdCBbcGF0Y2hTZWdtZW50LCBwYXRjaFBhcmFsbGVsUm91dGVzXSA9IHBhdGNoVHJlZVxuXG4gIC8vIGlmIHRoZSBhcHBsaWVkIHBhdGNoIHNlZ21lbnQgaXMgX19ERUZBVUxUX18gdGhlbiBpdCBjYW4gYmUgaWdub3JlZCBpbiBmYXZvciBvZiB0aGUgaW5pdGlhbCB0cmVlXG4gIC8vIHRoaXMgaXMgYmVjYXVzZSB0aGUgX19ERUZBVUxUX18gc2VnbWVudCBpcyB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgb24gbmF2aWdhdGlvblxuICBpZiAoXG4gICAgcGF0Y2hTZWdtZW50ID09PSBERUZBVUxUX1NFR01FTlRfS0VZICYmXG4gICAgaW5pdGlhbFNlZ21lbnQgIT09IERFRkFVTFRfU0VHTUVOVF9LRVlcbiAgKSB7XG4gICAgcmV0dXJuIGluaXRpYWxUcmVlXG4gIH1cblxuICBpZiAobWF0Y2hTZWdtZW50KGluaXRpYWxTZWdtZW50LCBwYXRjaFNlZ21lbnQpKSB7XG4gICAgY29uc3QgbmV3UGFyYWxsZWxSb3V0ZXM6IEZsaWdodFJvdXRlclN0YXRlWzFdID0ge31cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBpbml0aWFsUGFyYWxsZWxSb3V0ZXMpIHtcbiAgICAgIGNvbnN0IGlzSW5QYXRjaFRyZWVQYXJhbGxlbFJvdXRlcyA9XG4gICAgICAgIHR5cGVvZiBwYXRjaFBhcmFsbGVsUm91dGVzW2tleV0gIT09ICd1bmRlZmluZWQnXG4gICAgICBpZiAoaXNJblBhdGNoVHJlZVBhcmFsbGVsUm91dGVzKSB7XG4gICAgICAgIG5ld1BhcmFsbGVsUm91dGVzW2tleV0gPSBhcHBseVBhdGNoKFxuICAgICAgICAgIGluaXRpYWxQYXJhbGxlbFJvdXRlc1trZXldLFxuICAgICAgICAgIHBhdGNoUGFyYWxsZWxSb3V0ZXNba2V5XVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdQYXJhbGxlbFJvdXRlc1trZXldID0gaW5pdGlhbFBhcmFsbGVsUm91dGVzW2tleV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXRjaFBhcmFsbGVsUm91dGVzKSB7XG4gICAgICBpZiAobmV3UGFyYWxsZWxSb3V0ZXNba2V5XSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBuZXdQYXJhbGxlbFJvdXRlc1trZXldID0gcGF0Y2hQYXJhbGxlbFJvdXRlc1trZXldXG4gICAgfVxuXG4gICAgY29uc3QgdHJlZTogRmxpZ2h0Um91dGVyU3RhdGUgPSBbaW5pdGlhbFNlZ21lbnQsIG5ld1BhcmFsbGVsUm91dGVzXVxuXG4gICAgLy8gQ29weSBvdmVyIHRoZSBleGlzdGluZyB0cmVlXG4gICAgaWYgKGluaXRpYWxUcmVlWzJdKSB7XG4gICAgICB0cmVlWzJdID0gaW5pdGlhbFRyZWVbMl1cbiAgICB9XG5cbiAgICBpZiAoaW5pdGlhbFRyZWVbM10pIHtcbiAgICAgIHRyZWVbM10gPSBpbml0aWFsVHJlZVszXVxuICAgIH1cblxuICAgIGlmIChpbml0aWFsVHJlZVs0XSkge1xuICAgICAgdHJlZVs0XSA9IGluaXRpYWxUcmVlWzRdXG4gICAgfVxuXG4gICAgcmV0dXJuIHRyZWVcbiAgfVxuXG4gIHJldHVybiBwYXRjaFRyZWVcbn1cblxuLyoqXG4gKiBBcHBseSB0aGUgcm91dGVyIHN0YXRlIGZyb20gdGhlIEZsaWdodCByZXNwb25zZSwgYnV0IHNraXAgcGF0Y2hpbmcgZGVmYXVsdCBzZWdtZW50cy5cbiAqIFVzZWZ1bCBmb3IgcGF0Y2hpbmcgdGhlIHJvdXRlciBjYWNoZSB3aGVuIG5hdmlnYXRpbmcsIHdoZXJlIHdlIHBlcnNpc3QgdGhlIGV4aXN0aW5nIGRlZmF1bHQgc2VnbWVudCBpZiB0aGVyZSBpc24ndCBhIG5ldyBvbmUuXG4gKiBDcmVhdGVzIGEgbmV3IHJvdXRlciBzdGF0ZSB0cmVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlKFxuICBmbGlnaHRTZWdtZW50UGF0aDogRmxpZ2h0U2VnbWVudFBhdGgsXG4gIGZsaWdodFJvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgdHJlZVBhdGNoOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgcGF0aDogc3RyaW5nXG4pOiBGbGlnaHRSb3V0ZXJTdGF0ZSB8IG51bGwge1xuICBjb25zdCBbc2VnbWVudCwgcGFyYWxsZWxSb3V0ZXMsIHVybCwgcmVmZXRjaCwgaXNSb290TGF5b3V0XSA9XG4gICAgZmxpZ2h0Um91dGVyU3RhdGVcblxuICAvLyBSb290IHJlZnJlc2hcbiAgaWYgKGZsaWdodFNlZ21lbnRQYXRoLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IHRyZWU6IEZsaWdodFJvdXRlclN0YXRlID0gYXBwbHlQYXRjaChmbGlnaHRSb3V0ZXJTdGF0ZSwgdHJlZVBhdGNoKVxuXG4gICAgYWRkUmVmcmVzaE1hcmtlclRvQWN0aXZlUGFyYWxsZWxTZWdtZW50cyh0cmVlLCBwYXRoKVxuXG4gICAgcmV0dXJuIHRyZWVcbiAgfVxuXG4gIGNvbnN0IFtjdXJyZW50U2VnbWVudCwgcGFyYWxsZWxSb3V0ZUtleV0gPSBmbGlnaHRTZWdtZW50UGF0aFxuXG4gIC8vIFRyZWUgcGF0aCByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIgc2hvdWxkIGFsd2F5cyBtYXRjaCB1cCB3aXRoIHRoZSBjdXJyZW50IHRyZWUgaW4gdGhlIGJyb3dzZXJcbiAgaWYgKCFtYXRjaFNlZ21lbnQoY3VycmVudFNlZ21lbnQsIHNlZ21lbnQpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IGxhc3RTZWdtZW50ID0gZmxpZ2h0U2VnbWVudFBhdGgubGVuZ3RoID09PSAyXG5cbiAgbGV0IHBhcmFsbGVsUm91dGVQYXRjaFxuICBpZiAobGFzdFNlZ21lbnQpIHtcbiAgICBwYXJhbGxlbFJvdXRlUGF0Y2ggPSBhcHBseVBhdGNoKHBhcmFsbGVsUm91dGVzW3BhcmFsbGVsUm91dGVLZXldLCB0cmVlUGF0Y2gpXG4gIH0gZWxzZSB7XG4gICAgcGFyYWxsZWxSb3V0ZVBhdGNoID0gYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlKFxuICAgICAgZ2V0TmV4dEZsaWdodFNlZ21lbnRQYXRoKGZsaWdodFNlZ21lbnRQYXRoKSxcbiAgICAgIHBhcmFsbGVsUm91dGVzW3BhcmFsbGVsUm91dGVLZXldLFxuICAgICAgdHJlZVBhdGNoLFxuICAgICAgcGF0aFxuICAgIClcblxuICAgIGlmIChwYXJhbGxlbFJvdXRlUGF0Y2ggPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgY29uc3QgdHJlZTogRmxpZ2h0Um91dGVyU3RhdGUgPSBbXG4gICAgZmxpZ2h0U2VnbWVudFBhdGhbMF0sXG4gICAge1xuICAgICAgLi4ucGFyYWxsZWxSb3V0ZXMsXG4gICAgICBbcGFyYWxsZWxSb3V0ZUtleV06IHBhcmFsbGVsUm91dGVQYXRjaCxcbiAgICB9LFxuICAgIHVybCxcbiAgICByZWZldGNoLFxuICBdXG5cbiAgLy8gQ3VycmVudCBzZWdtZW50IGlzIHRoZSByb290IGxheW91dFxuICBpZiAoaXNSb290TGF5b3V0KSB7XG4gICAgdHJlZVs0XSA9IHRydWVcbiAgfVxuXG4gIGFkZFJlZnJlc2hNYXJrZXJUb0FjdGl2ZVBhcmFsbGVsU2VnbWVudHModHJlZSwgcGF0aClcblxuICByZXR1cm4gdHJlZVxufVxuIl0sIm5hbWVzIjpbImFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZSIsImFwcGx5UGF0Y2giLCJpbml0aWFsVHJlZSIsInBhdGNoVHJlZSIsImluaXRpYWxTZWdtZW50IiwiaW5pdGlhbFBhcmFsbGVsUm91dGVzIiwicGF0Y2hTZWdtZW50IiwicGF0Y2hQYXJhbGxlbFJvdXRlcyIsIkRFRkFVTFRfU0VHTUVOVF9LRVkiLCJtYXRjaFNlZ21lbnQiLCJuZXdQYXJhbGxlbFJvdXRlcyIsImtleSIsImlzSW5QYXRjaFRyZWVQYXJhbGxlbFJvdXRlcyIsInRyZWUiLCJmbGlnaHRTZWdtZW50UGF0aCIsImZsaWdodFJvdXRlclN0YXRlIiwidHJlZVBhdGNoIiwicGF0aCIsInNlZ21lbnQiLCJwYXJhbGxlbFJvdXRlcyIsInVybCIsInJlZmV0Y2giLCJpc1Jvb3RMYXlvdXQiLCJsZW5ndGgiLCJhZGRSZWZyZXNoTWFya2VyVG9BY3RpdmVQYXJhbGxlbFNlZ21lbnRzIiwiY3VycmVudFNlZ21lbnQiLCJwYXJhbGxlbFJvdXRlS2V5IiwibGFzdFNlZ21lbnQiLCJwYXJhbGxlbFJvdXRlUGF0Y2giLCJnZXROZXh0RmxpZ2h0U2VnbWVudFBhdGgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/clear-cache-node-data-for-segment-path.js":
/*!*******************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/clear-cache-node-data-for-segment-path.js ***!
  \*******************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"clearCacheNodeDataForSegmentPath\", ({\n    enumerable: true,\n    get: function() {\n        return clearCacheNodeDataForSegmentPath;\n    }\n}));\nconst _flightdatahelpers = __webpack_require__(/*! ../../flight-data-helpers */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/flight-data-helpers.js\");\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction clearCacheNodeDataForSegmentPath(newCache, existingCache, flightSegmentPath) {\n    const isLastEntry = flightSegmentPath.length <= 2;\n    const [parallelRouteKey, segment] = flightSegmentPath;\n    const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment);\n    const existingChildSegmentMap = existingCache.parallelRoutes.get(parallelRouteKey);\n    let childSegmentMap = newCache.parallelRoutes.get(parallelRouteKey);\n    if (!childSegmentMap || childSegmentMap === existingChildSegmentMap) {\n        childSegmentMap = new Map(existingChildSegmentMap);\n        newCache.parallelRoutes.set(parallelRouteKey, childSegmentMap);\n    }\n    const existingChildCacheNode = existingChildSegmentMap == null ? void 0 : existingChildSegmentMap.get(cacheKey);\n    let childCacheNode = childSegmentMap.get(cacheKey);\n    // In case of last segment start off the fetch at this level and don't copy further down.\n    if (isLastEntry) {\n        if (!childCacheNode || !childCacheNode.lazyData || childCacheNode === existingChildCacheNode) {\n            childSegmentMap.set(cacheKey, {\n                lazyData: null,\n                rsc: null,\n                prefetchRsc: null,\n                head: null,\n                prefetchHead: null,\n                parallelRoutes: new Map(),\n                loading: null,\n                navigatedAt: -1\n            });\n        }\n        return;\n    }\n    if (!childCacheNode || !existingChildCacheNode) {\n        // Start fetch in the place where the existing cache doesn't have the data yet.\n        if (!childCacheNode) {\n            childSegmentMap.set(cacheKey, {\n                lazyData: null,\n                rsc: null,\n                prefetchRsc: null,\n                head: null,\n                prefetchHead: null,\n                parallelRoutes: new Map(),\n                loading: null,\n                navigatedAt: -1\n            });\n        }\n        return;\n    }\n    if (childCacheNode === existingChildCacheNode) {\n        childCacheNode = {\n            lazyData: childCacheNode.lazyData,\n            rsc: childCacheNode.rsc,\n            prefetchRsc: childCacheNode.prefetchRsc,\n            head: childCacheNode.head,\n            prefetchHead: childCacheNode.prefetchHead,\n            parallelRoutes: new Map(childCacheNode.parallelRoutes),\n            loading: childCacheNode.loading\n        };\n        childSegmentMap.set(cacheKey, childCacheNode);\n    }\n    return clearCacheNodeDataForSegmentPath(childCacheNode, existingChildCacheNode, (0, _flightdatahelpers.getNextFlightSegmentPath)(flightSegmentPath));\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=clear-cache-node-data-for-segment-path.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9jbGVhci1jYWNoZS1ub2RlLWRhdGEtZm9yLXNlZ21lbnQtcGF0aC5qcyIsIm1hcHBpbmdzIjoiOzs7O29FQVFnQkE7OztlQUFBQTs7OytDQU55QjtrREFDSjtBQUs5QixTQUFTQSxpQ0FDZEMsUUFBbUIsRUFDbkJDLGFBQXdCLEVBQ3hCQyxpQkFBb0M7SUFFcEMsTUFBTUMsY0FBY0Qsa0JBQWtCRSxNQUFNLElBQUk7SUFFaEQsTUFBTSxDQUFDQyxrQkFBa0JDLFFBQVEsR0FBR0o7SUFDcEMsTUFBTUssV0FBV0MsQ0FBQUEsR0FBQUEsc0JBQUFBLG9CQUFBQSxFQUFxQkY7SUFFdEMsTUFBTUcsMEJBQ0pSLGNBQWNTLGNBQWMsQ0FBQ0MsR0FBRyxDQUFDTjtJQUVuQyxJQUFJTyxrQkFBa0JaLFNBQVNVLGNBQWMsQ0FBQ0MsR0FBRyxDQUFDTjtJQUVsRCxJQUFJLENBQUNPLG1CQUFtQkEsb0JBQW9CSCx5QkFBeUI7UUFDbkVHLGtCQUFrQixJQUFJQyxJQUFJSjtRQUMxQlQsU0FBU1UsY0FBYyxDQUFDSSxHQUFHLENBQUNULGtCQUFrQk87SUFDaEQ7SUFFQSxNQUFNRyx5QkFBeUJOLDJCQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSx3QkFBeUJFLEdBQUcsQ0FBQ0o7SUFDNUQsSUFBSVMsaUJBQWlCSixnQkFBZ0JELEdBQUcsQ0FBQ0o7SUFFekMseUZBQXlGO0lBQ3pGLElBQUlKLGFBQWE7UUFDZixJQUNFLENBQUNhLGtCQUNELENBQUNBLGVBQWVDLFFBQVEsSUFDeEJELG1CQUFtQkQsd0JBQ25CO1lBQ0FILGdCQUFnQkUsR0FBRyxDQUFDUCxVQUFVO2dCQUM1QlUsVUFBVTtnQkFDVkMsS0FBSztnQkFDTEMsYUFBYTtnQkFDYkMsTUFBTTtnQkFDTkMsY0FBYztnQkFDZFgsZ0JBQWdCLElBQUlHO2dCQUNwQlMsU0FBUztnQkFDVEMsYUFBYSxDQUFDO1lBQ2hCO1FBQ0Y7UUFDQTtJQUNGO0lBRUEsSUFBSSxDQUFDUCxrQkFBa0IsQ0FBQ0Qsd0JBQXdCO1FBQzlDLCtFQUErRTtRQUMvRSxJQUFJLENBQUNDLGdCQUFnQjtZQUNuQkosZ0JBQWdCRSxHQUFHLENBQUNQLFVBQVU7Z0JBQzVCVSxVQUFVO2dCQUNWQyxLQUFLO2dCQUNMQyxhQUFhO2dCQUNiQyxNQUFNO2dCQUNOQyxjQUFjO2dCQUNkWCxnQkFBZ0IsSUFBSUc7Z0JBQ3BCUyxTQUFTO2dCQUNUQyxhQUFhLENBQUM7WUFDaEI7UUFDRjtRQUNBO0lBQ0Y7SUFFQSxJQUFJUCxtQkFBbUJELHdCQUF3QjtRQUM3Q0MsaUJBQWlCO1lBQ2ZDLFVBQVVELGVBQWVDLFFBQVE7WUFDakNDLEtBQUtGLGVBQWVFLEdBQUc7WUFDdkJDLGFBQWFILGVBQWVHLFdBQVc7WUFDdkNDLE1BQU1KLGVBQWVJLElBQUk7WUFDekJDLGNBQWNMLGVBQWVLLFlBQVk7WUFDekNYLGdCQUFnQixJQUFJRyxJQUFJRyxlQUFlTixjQUFjO1lBQ3JEWSxTQUFTTixlQUFlTSxPQUFPO1FBQ2pDO1FBQ0FWLGdCQUFnQkUsR0FBRyxDQUFDUCxVQUFVUztJQUNoQztJQUVBLE9BQU9qQixpQ0FDTGlCLGdCQUNBRCx3QkFDQVMsQ0FBQUEsR0FBQUEsbUJBQUFBLHdCQUFBQSxFQUF5QnRCO0FBRTdCIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvY2xlYXItY2FjaGUtbm9kZS1kYXRhLWZvci1zZWdtZW50LXBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGbGlnaHRTZWdtZW50UGF0aCB9IGZyb20gJy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWNoZU5vZGUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IGdldE5leHRGbGlnaHRTZWdtZW50UGF0aCB9IGZyb20gJy4uLy4uL2ZsaWdodC1kYXRhLWhlbHBlcnMnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXJDYWNoZUtleSB9IGZyb20gJy4vY3JlYXRlLXJvdXRlci1jYWNoZS1rZXknXG5cbi8qKlxuICogVGhpcyB3aWxsIGNsZWFyIHRoZSBDYWNoZU5vZGUgZGF0YSBmb3IgYSBwYXJ0aWN1bGFyIHNlZ21lbnQgcGF0aC4gVGhpcyB3aWxsIGNhdXNlIGEgbGF6eS1mZXRjaCBpbiBsYXlvdXQgcm91dGVyIHRvIGZpbGwgaW4gbmV3IGRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckNhY2hlTm9kZURhdGFGb3JTZWdtZW50UGF0aChcbiAgbmV3Q2FjaGU6IENhY2hlTm9kZSxcbiAgZXhpc3RpbmdDYWNoZTogQ2FjaGVOb2RlLFxuICBmbGlnaHRTZWdtZW50UGF0aDogRmxpZ2h0U2VnbWVudFBhdGhcbik6IHZvaWQge1xuICBjb25zdCBpc0xhc3RFbnRyeSA9IGZsaWdodFNlZ21lbnRQYXRoLmxlbmd0aCA8PSAyXG5cbiAgY29uc3QgW3BhcmFsbGVsUm91dGVLZXksIHNlZ21lbnRdID0gZmxpZ2h0U2VnbWVudFBhdGhcbiAgY29uc3QgY2FjaGVLZXkgPSBjcmVhdGVSb3V0ZXJDYWNoZUtleShzZWdtZW50KVxuXG4gIGNvbnN0IGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwID1cbiAgICBleGlzdGluZ0NhY2hlLnBhcmFsbGVsUm91dGVzLmdldChwYXJhbGxlbFJvdXRlS2V5KVxuXG4gIGxldCBjaGlsZFNlZ21lbnRNYXAgPSBuZXdDYWNoZS5wYXJhbGxlbFJvdXRlcy5nZXQocGFyYWxsZWxSb3V0ZUtleSlcblxuICBpZiAoIWNoaWxkU2VnbWVudE1hcCB8fCBjaGlsZFNlZ21lbnRNYXAgPT09IGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwKSB7XG4gICAgY2hpbGRTZWdtZW50TWFwID0gbmV3IE1hcChleGlzdGluZ0NoaWxkU2VnbWVudE1hcClcbiAgICBuZXdDYWNoZS5wYXJhbGxlbFJvdXRlcy5zZXQocGFyYWxsZWxSb3V0ZUtleSwgY2hpbGRTZWdtZW50TWFwKVxuICB9XG5cbiAgY29uc3QgZXhpc3RpbmdDaGlsZENhY2hlTm9kZSA9IGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwPy5nZXQoY2FjaGVLZXkpXG4gIGxldCBjaGlsZENhY2hlTm9kZSA9IGNoaWxkU2VnbWVudE1hcC5nZXQoY2FjaGVLZXkpXG5cbiAgLy8gSW4gY2FzZSBvZiBsYXN0IHNlZ21lbnQgc3RhcnQgb2ZmIHRoZSBmZXRjaCBhdCB0aGlzIGxldmVsIGFuZCBkb24ndCBjb3B5IGZ1cnRoZXIgZG93bi5cbiAgaWYgKGlzTGFzdEVudHJ5KSB7XG4gICAgaWYgKFxuICAgICAgIWNoaWxkQ2FjaGVOb2RlIHx8XG4gICAgICAhY2hpbGRDYWNoZU5vZGUubGF6eURhdGEgfHxcbiAgICAgIGNoaWxkQ2FjaGVOb2RlID09PSBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlXG4gICAgKSB7XG4gICAgICBjaGlsZFNlZ21lbnRNYXAuc2V0KGNhY2hlS2V5LCB7XG4gICAgICAgIGxhenlEYXRhOiBudWxsLFxuICAgICAgICByc2M6IG51bGwsXG4gICAgICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgICAgICBoZWFkOiBudWxsLFxuICAgICAgICBwcmVmZXRjaEhlYWQ6IG51bGwsXG4gICAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKCksXG4gICAgICAgIGxvYWRpbmc6IG51bGwsXG4gICAgICAgIG5hdmlnYXRlZEF0OiAtMSxcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCFjaGlsZENhY2hlTm9kZSB8fCAhZXhpc3RpbmdDaGlsZENhY2hlTm9kZSkge1xuICAgIC8vIFN0YXJ0IGZldGNoIGluIHRoZSBwbGFjZSB3aGVyZSB0aGUgZXhpc3RpbmcgY2FjaGUgZG9lc24ndCBoYXZlIHRoZSBkYXRhIHlldC5cbiAgICBpZiAoIWNoaWxkQ2FjaGVOb2RlKSB7XG4gICAgICBjaGlsZFNlZ21lbnRNYXAuc2V0KGNhY2hlS2V5LCB7XG4gICAgICAgIGxhenlEYXRhOiBudWxsLFxuICAgICAgICByc2M6IG51bGwsXG4gICAgICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgICAgICBoZWFkOiBudWxsLFxuICAgICAgICBwcmVmZXRjaEhlYWQ6IG51bGwsXG4gICAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKCksXG4gICAgICAgIGxvYWRpbmc6IG51bGwsXG4gICAgICAgIG5hdmlnYXRlZEF0OiAtMSxcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGNoaWxkQ2FjaGVOb2RlID09PSBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlKSB7XG4gICAgY2hpbGRDYWNoZU5vZGUgPSB7XG4gICAgICBsYXp5RGF0YTogY2hpbGRDYWNoZU5vZGUubGF6eURhdGEsXG4gICAgICByc2M6IGNoaWxkQ2FjaGVOb2RlLnJzYyxcbiAgICAgIHByZWZldGNoUnNjOiBjaGlsZENhY2hlTm9kZS5wcmVmZXRjaFJzYyxcbiAgICAgIGhlYWQ6IGNoaWxkQ2FjaGVOb2RlLmhlYWQsXG4gICAgICBwcmVmZXRjaEhlYWQ6IGNoaWxkQ2FjaGVOb2RlLnByZWZldGNoSGVhZCxcbiAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKGNoaWxkQ2FjaGVOb2RlLnBhcmFsbGVsUm91dGVzKSxcbiAgICAgIGxvYWRpbmc6IGNoaWxkQ2FjaGVOb2RlLmxvYWRpbmcsXG4gICAgfSBhcyBDYWNoZU5vZGVcbiAgICBjaGlsZFNlZ21lbnRNYXAuc2V0KGNhY2hlS2V5LCBjaGlsZENhY2hlTm9kZSlcbiAgfVxuXG4gIHJldHVybiBjbGVhckNhY2hlTm9kZURhdGFGb3JTZWdtZW50UGF0aChcbiAgICBjaGlsZENhY2hlTm9kZSxcbiAgICBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlLFxuICAgIGdldE5leHRGbGlnaHRTZWdtZW50UGF0aChmbGlnaHRTZWdtZW50UGF0aClcbiAgKVxufVxuIl0sIm5hbWVzIjpbImNsZWFyQ2FjaGVOb2RlRGF0YUZvclNlZ21lbnRQYXRoIiwibmV3Q2FjaGUiLCJleGlzdGluZ0NhY2hlIiwiZmxpZ2h0U2VnbWVudFBhdGgiLCJpc0xhc3RFbnRyeSIsImxlbmd0aCIsInBhcmFsbGVsUm91dGVLZXkiLCJzZWdtZW50IiwiY2FjaGVLZXkiLCJjcmVhdGVSb3V0ZXJDYWNoZUtleSIsImV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwIiwicGFyYWxsZWxSb3V0ZXMiLCJnZXQiLCJjaGlsZFNlZ21lbnRNYXAiLCJNYXAiLCJzZXQiLCJleGlzdGluZ0NoaWxkQ2FjaGVOb2RlIiwiY2hpbGRDYWNoZU5vZGUiLCJsYXp5RGF0YSIsInJzYyIsInByZWZldGNoUnNjIiwiaGVhZCIsInByZWZldGNoSGVhZCIsImxvYWRpbmciLCJuYXZpZ2F0ZWRBdCIsImdldE5leHRGbGlnaHRTZWdtZW50UGF0aCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/clear-cache-node-data-for-segment-path.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js":
/*!*************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js ***!
  \*************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    computeChangedPath: function() {\n        return computeChangedPath;\n    },\n    extractPathFromFlightRouterState: function() {\n        return extractPathFromFlightRouterState;\n    },\n    getSelectedParams: function() {\n        return getSelectedParams;\n    }\n});\nconst _interceptionroutes = __webpack_require__(/*! ../../../shared/lib/router/utils/interception-routes */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/interception-routes.js\");\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/segment.js\");\nconst _matchsegments = __webpack_require__(/*! ../match-segments */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/match-segments.js\");\nconst removeLeadingSlash = (segment)=>{\n    return segment[0] === '/' ? segment.slice(1) : segment;\n};\nconst segmentToPathname = (segment)=>{\n    if (typeof segment === 'string') {\n        // 'children' is not a valid path -- it's technically a parallel route that corresponds with the current segment's page\n        // if we don't skip it, then the computed pathname might be something like `/children` which doesn't make sense.\n        if (segment === 'children') return '';\n        return segment;\n    }\n    return segment[1];\n};\nfunction normalizeSegments(segments) {\n    return segments.reduce((acc, segment)=>{\n        segment = removeLeadingSlash(segment);\n        if (segment === '' || (0, _segment.isGroupSegment)(segment)) {\n            return acc;\n        }\n        return acc + \"/\" + segment;\n    }, '') || '/';\n}\nfunction extractPathFromFlightRouterState(flightRouterState) {\n    const segment = Array.isArray(flightRouterState[0]) ? flightRouterState[0][1] : flightRouterState[0];\n    if (segment === _segment.DEFAULT_SEGMENT_KEY || _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>segment.startsWith(m))) return undefined;\n    if (segment.startsWith(_segment.PAGE_SEGMENT_KEY)) return '';\n    const segments = [\n        segmentToPathname(segment)\n    ];\n    var _flightRouterState_;\n    const parallelRoutes = (_flightRouterState_ = flightRouterState[1]) != null ? _flightRouterState_ : {};\n    const childrenPath = parallelRoutes.children ? extractPathFromFlightRouterState(parallelRoutes.children) : undefined;\n    if (childrenPath !== undefined) {\n        segments.push(childrenPath);\n    } else {\n        for (const [key, value] of Object.entries(parallelRoutes)){\n            if (key === 'children') continue;\n            const childPath = extractPathFromFlightRouterState(value);\n            if (childPath !== undefined) {\n                segments.push(childPath);\n            }\n        }\n    }\n    return normalizeSegments(segments);\n}\nfunction computeChangedPathImpl(treeA, treeB) {\n    const [segmentA, parallelRoutesA] = treeA;\n    const [segmentB, parallelRoutesB] = treeB;\n    const normalizedSegmentA = segmentToPathname(segmentA);\n    const normalizedSegmentB = segmentToPathname(segmentB);\n    if (_interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>normalizedSegmentA.startsWith(m) || normalizedSegmentB.startsWith(m))) {\n        return '';\n    }\n    if (!(0, _matchsegments.matchSegment)(segmentA, segmentB)) {\n        var _extractPathFromFlightRouterState;\n        // once we find where the tree changed, we compute the rest of the path by traversing the tree\n        return (_extractPathFromFlightRouterState = extractPathFromFlightRouterState(treeB)) != null ? _extractPathFromFlightRouterState : '';\n    }\n    for(const parallelRouterKey in parallelRoutesA){\n        if (parallelRoutesB[parallelRouterKey]) {\n            const changedPath = computeChangedPathImpl(parallelRoutesA[parallelRouterKey], parallelRoutesB[parallelRouterKey]);\n            if (changedPath !== null) {\n                return segmentToPathname(segmentB) + \"/\" + changedPath;\n            }\n        }\n    }\n    return null;\n}\nfunction computeChangedPath(treeA, treeB) {\n    const changedPath = computeChangedPathImpl(treeA, treeB);\n    if (changedPath == null || changedPath === '/') {\n        return changedPath;\n    }\n    // lightweight normalization to remove route groups\n    return normalizeSegments(changedPath.split('/'));\n}\nfunction getSelectedParams(currentTree, params) {\n    if (params === void 0) params = {};\n    const parallelRoutes = currentTree[1];\n    for (const parallelRoute of Object.values(parallelRoutes)){\n        const segment = parallelRoute[0];\n        const isDynamicParameter = Array.isArray(segment);\n        const segmentValue = isDynamicParameter ? segment[1] : segment;\n        if (!segmentValue || segmentValue.startsWith(_segment.PAGE_SEGMENT_KEY)) continue;\n        // Ensure catchAll and optional catchall are turned into an array\n        const isCatchAll = isDynamicParameter && (segment[2] === 'c' || segment[2] === 'oc');\n        if (isCatchAll) {\n            params[segment[0]] = segment[1].split('/');\n        } else if (isDynamicParameter) {\n            params[segment[0]] = segment[1];\n        }\n        params = getSelectedParams(parallelRoute, params);\n    }\n    return params;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=compute-changed-path.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9jb21wdXRlLWNoYW5nZWQtcGF0aC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUF3SGdCQSxrQkFBa0I7ZUFBbEJBOztJQTlFQUMsZ0NBQWdDO2VBQWhDQTs7SUErRkFDLGlCQUFpQjtlQUFqQkE7OztnREFySTJCO3FDQU1wQzsyQ0FDc0I7QUFFN0IsTUFBTUMscUJBQXFCLENBQUNDO0lBQzFCLE9BQU9BLE9BQU8sQ0FBQyxFQUFFLEtBQUssTUFBTUEsUUFBUUMsS0FBSyxDQUFDLEtBQUtEO0FBQ2pEO0FBRUEsTUFBTUUsb0JBQW9CLENBQUNGO0lBQ3pCLElBQUksT0FBT0EsWUFBWSxVQUFVO1FBQy9CLHVIQUF1SDtRQUN2SCxnSEFBZ0g7UUFDaEgsSUFBSUEsWUFBWSxZQUFZLE9BQU87UUFFbkMsT0FBT0E7SUFDVDtJQUVBLE9BQU9BLE9BQU8sQ0FBQyxFQUFFO0FBQ25CO0FBRUEsU0FBU0csa0JBQWtCQyxRQUFrQjtJQUMzQyxPQUNFQSxTQUFTQyxNQUFNLENBQUMsQ0FBQ0MsS0FBS047UUFDcEJBLFVBQVVELG1CQUFtQkM7UUFDN0IsSUFBSUEsWUFBWSxNQUFNTyxDQUFBQSxHQUFBQSxTQUFBQSxjQUFBQSxFQUFlUCxVQUFVO1lBQzdDLE9BQU9NO1FBQ1Q7UUFFQSxPQUFVQSxNQUFJLE1BQUdOO0lBQ25CLEdBQUcsT0FBTztBQUVkO0FBRU8sU0FBU0gsaUNBQ2RXLGlCQUFvQztJQUVwQyxNQUFNUixVQUFVUyxNQUFNQyxPQUFPLENBQUNGLGlCQUFpQixDQUFDLEVBQUUsSUFDOUNBLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQ3ZCQSxpQkFBaUIsQ0FBQyxFQUFFO0lBRXhCLElBQ0VSLFlBQVlXLFNBQUFBLG1CQUFtQixJQUMvQkMsb0JBQUFBLDBCQUEwQixDQUFDQyxJQUFJLENBQUMsQ0FBQ0MsSUFBTWQsUUFBUWUsVUFBVSxDQUFDRCxLQUUxRCxPQUFPRTtJQUVULElBQUloQixRQUFRZSxVQUFVLENBQUNFLFNBQUFBLGdCQUFnQixHQUFHLE9BQU87SUFFakQsTUFBTWIsV0FBVztRQUFDRixrQkFBa0JGO0tBQVM7UUFDdEJRO0lBQXZCLE1BQU1VLGlCQUFpQlYsQ0FBQUEsc0JBQUFBLGlCQUFpQixDQUFDLE9BQUUsT0FBcEJBLHNCQUF3QixDQUFDO0lBRWhELE1BQU1XLGVBQWVELGVBQWVFLFFBQVEsR0FDeEN2QixpQ0FBaUNxQixlQUFlRSxRQUFRLElBQ3hESjtJQUVKLElBQUlHLGlCQUFpQkgsV0FBVztRQUM5QlosU0FBU2lCLElBQUksQ0FBQ0Y7SUFDaEIsT0FBTztRQUNMLEtBQUssTUFBTSxDQUFDRyxLQUFLQyxNQUFNLElBQUlDLE9BQU9DLE9BQU8sQ0FBQ1AsZ0JBQWlCO1lBQ3pELElBQUlJLFFBQVEsWUFBWTtZQUV4QixNQUFNSSxZQUFZN0IsaUNBQWlDMEI7WUFFbkQsSUFBSUcsY0FBY1YsV0FBVztnQkFDM0JaLFNBQVNpQixJQUFJLENBQUNLO1lBQ2hCO1FBQ0Y7SUFDRjtJQUVBLE9BQU92QixrQkFBa0JDO0FBQzNCO0FBRUEsU0FBU3VCLHVCQUNQQyxLQUF3QixFQUN4QkMsS0FBd0I7SUFFeEIsTUFBTSxDQUFDQyxVQUFVQyxnQkFBZ0IsR0FBR0g7SUFDcEMsTUFBTSxDQUFDSSxVQUFVQyxnQkFBZ0IsR0FBR0o7SUFFcEMsTUFBTUsscUJBQXFCaEMsa0JBQWtCNEI7SUFDN0MsTUFBTUsscUJBQXFCakMsa0JBQWtCOEI7SUFFN0MsSUFDRXBCLG9CQUFBQSwwQkFBMEIsQ0FBQ0MsSUFBSSxDQUM3QixDQUFDQyxJQUNDb0IsbUJBQW1CbkIsVUFBVSxDQUFDRCxNQUFNcUIsbUJBQW1CcEIsVUFBVSxDQUFDRCxLQUV0RTtRQUNBLE9BQU87SUFDVDtJQUVBLElBQUksQ0FBQ3NCLENBQUFBLEdBQUFBLGVBQUFBLFlBQUFBLEVBQWFOLFVBQVVFLFdBQVc7WUFFOUJuQztRQURQLDhGQUE4RjtRQUM5RixPQUFPQSxDQUFBQSxvQ0FBQUEsaUNBQWlDZ0MsTUFBQUEsS0FBQUEsT0FBakNoQyxvQ0FBMkM7SUFDcEQ7SUFFQSxJQUFLLE1BQU13QyxxQkFBcUJOLGdCQUFpQjtRQUMvQyxJQUFJRSxlQUFlLENBQUNJLGtCQUFrQixFQUFFO1lBQ3RDLE1BQU1DLGNBQWNYLHVCQUNsQkksZUFBZSxDQUFDTSxrQkFBa0IsRUFDbENKLGVBQWUsQ0FBQ0ksa0JBQWtCO1lBRXBDLElBQUlDLGdCQUFnQixNQUFNO2dCQUN4QixPQUFVcEMsa0JBQWtCOEIsWUFBVSxNQUFHTTtZQUMzQztRQUNGO0lBQ0Y7SUFFQSxPQUFPO0FBQ1Q7QUFFTyxTQUFTMUMsbUJBQ2RnQyxLQUF3QixFQUN4QkMsS0FBd0I7SUFFeEIsTUFBTVMsY0FBY1gsdUJBQXVCQyxPQUFPQztJQUVsRCxJQUFJUyxlQUFlLFFBQVFBLGdCQUFnQixLQUFLO1FBQzlDLE9BQU9BO0lBQ1Q7SUFFQSxtREFBbUQ7SUFDbkQsT0FBT25DLGtCQUFrQm1DLFlBQVlDLEtBQUssQ0FBQztBQUM3QztBQUtPLFNBQVN6QyxrQkFDZDBDLFdBQThCLEVBQzlCQyxNQUFtQjtJQUFuQkEsSUFBQUEsV0FBQUEsS0FBQUEsR0FBQUEsU0FBaUIsQ0FBQztJQUVsQixNQUFNdkIsaUJBQWlCc0IsV0FBVyxDQUFDLEVBQUU7SUFFckMsS0FBSyxNQUFNRSxpQkFBaUJsQixPQUFPbUIsTUFBTSxDQUFDekIsZ0JBQWlCO1FBQ3pELE1BQU1sQixVQUFVMEMsYUFBYSxDQUFDLEVBQUU7UUFDaEMsTUFBTUUscUJBQXFCbkMsTUFBTUMsT0FBTyxDQUFDVjtRQUN6QyxNQUFNNkMsZUFBZUQscUJBQXFCNUMsT0FBTyxDQUFDLEVBQUUsR0FBR0E7UUFDdkQsSUFBSSxDQUFDNkMsZ0JBQWdCQSxhQUFhOUIsVUFBVSxDQUFDRSxTQUFBQSxnQkFBZ0IsR0FBRztRQUVoRSxpRUFBaUU7UUFDakUsTUFBTTZCLGFBQ0pGLHNCQUF1QjVDLENBQUFBLE9BQU8sQ0FBQyxFQUFFLEtBQUssT0FBT0EsT0FBTyxDQUFDLEVBQUUsS0FBSyxLQUFHO1FBRWpFLElBQUk4QyxZQUFZO1lBQ2RMLE1BQU0sQ0FBQ3pDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBR0EsT0FBTyxDQUFDLEVBQUUsQ0FBQ3VDLEtBQUssQ0FBQztRQUN4QyxPQUFPLElBQUlLLG9CQUFvQjtZQUM3QkgsTUFBTSxDQUFDekMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxPQUFPLENBQUMsRUFBRTtRQUNqQztRQUVBeUMsU0FBUzNDLGtCQUFrQjRDLGVBQWVEO0lBQzVDO0lBRUEsT0FBT0E7QUFDVCIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2NvbXB1dGUtY2hhbmdlZC1wYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgRmxpZ2h0Um91dGVyU3RhdGUsXG4gIFNlZ21lbnQsXG59IGZyb20gJy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHsgSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pbnRlcmNlcHRpb24tcm91dGVzJ1xuaW1wb3J0IHR5cGUgeyBQYXJhbXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2ZXIvcmVxdWVzdC9wYXJhbXMnXG5pbXBvcnQge1xuICBpc0dyb3VwU2VnbWVudCxcbiAgREVGQVVMVF9TRUdNRU5UX0tFWSxcbiAgUEFHRV9TRUdNRU5UX0tFWSxcbn0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2xpYi9zZWdtZW50J1xuaW1wb3J0IHsgbWF0Y2hTZWdtZW50IH0gZnJvbSAnLi4vbWF0Y2gtc2VnbWVudHMnXG5cbmNvbnN0IHJlbW92ZUxlYWRpbmdTbGFzaCA9IChzZWdtZW50OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gc2VnbWVudFswXSA9PT0gJy8nID8gc2VnbWVudC5zbGljZSgxKSA6IHNlZ21lbnRcbn1cblxuY29uc3Qgc2VnbWVudFRvUGF0aG5hbWUgPSAoc2VnbWVudDogU2VnbWVudCk6IHN0cmluZyA9PiB7XG4gIGlmICh0eXBlb2Ygc2VnbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyAnY2hpbGRyZW4nIGlzIG5vdCBhIHZhbGlkIHBhdGggLS0gaXQncyB0ZWNobmljYWxseSBhIHBhcmFsbGVsIHJvdXRlIHRoYXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgY3VycmVudCBzZWdtZW50J3MgcGFnZVxuICAgIC8vIGlmIHdlIGRvbid0IHNraXAgaXQsIHRoZW4gdGhlIGNvbXB1dGVkIHBhdGhuYW1lIG1pZ2h0IGJlIHNvbWV0aGluZyBsaWtlIGAvY2hpbGRyZW5gIHdoaWNoIGRvZXNuJ3QgbWFrZSBzZW5zZS5cbiAgICBpZiAoc2VnbWVudCA9PT0gJ2NoaWxkcmVuJykgcmV0dXJuICcnXG5cbiAgICByZXR1cm4gc2VnbWVudFxuICB9XG5cbiAgcmV0dXJuIHNlZ21lbnRbMV1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU2VnbWVudHMoc2VnbWVudHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIChcbiAgICBzZWdtZW50cy5yZWR1Y2UoKGFjYywgc2VnbWVudCkgPT4ge1xuICAgICAgc2VnbWVudCA9IHJlbW92ZUxlYWRpbmdTbGFzaChzZWdtZW50KVxuICAgICAgaWYgKHNlZ21lbnQgPT09ICcnIHx8IGlzR3JvdXBTZWdtZW50KHNlZ21lbnQpKSB7XG4gICAgICAgIHJldHVybiBhY2NcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAke2FjY30vJHtzZWdtZW50fWBcbiAgICB9LCAnJykgfHwgJy8nXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlKFxuICBmbGlnaHRSb3V0ZXJTdGF0ZTogRmxpZ2h0Um91dGVyU3RhdGVcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNlZ21lbnQgPSBBcnJheS5pc0FycmF5KGZsaWdodFJvdXRlclN0YXRlWzBdKVxuICAgID8gZmxpZ2h0Um91dGVyU3RhdGVbMF1bMV1cbiAgICA6IGZsaWdodFJvdXRlclN0YXRlWzBdXG5cbiAgaWYgKFxuICAgIHNlZ21lbnQgPT09IERFRkFVTFRfU0VHTUVOVF9LRVkgfHxcbiAgICBJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUy5zb21lKChtKSA9PiBzZWdtZW50LnN0YXJ0c1dpdGgobSkpXG4gIClcbiAgICByZXR1cm4gdW5kZWZpbmVkXG5cbiAgaWYgKHNlZ21lbnQuc3RhcnRzV2l0aChQQUdFX1NFR01FTlRfS0VZKSkgcmV0dXJuICcnXG5cbiAgY29uc3Qgc2VnbWVudHMgPSBbc2VnbWVudFRvUGF0aG5hbWUoc2VnbWVudCldXG4gIGNvbnN0IHBhcmFsbGVsUm91dGVzID0gZmxpZ2h0Um91dGVyU3RhdGVbMV0gPz8ge31cblxuICBjb25zdCBjaGlsZHJlblBhdGggPSBwYXJhbGxlbFJvdXRlcy5jaGlsZHJlblxuICAgID8gZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUocGFyYWxsZWxSb3V0ZXMuY2hpbGRyZW4pXG4gICAgOiB1bmRlZmluZWRcblxuICBpZiAoY2hpbGRyZW5QYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZWdtZW50cy5wdXNoKGNoaWxkcmVuUGF0aClcbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJhbGxlbFJvdXRlcykpIHtcbiAgICAgIGlmIChrZXkgPT09ICdjaGlsZHJlbicpIGNvbnRpbnVlXG5cbiAgICAgIGNvbnN0IGNoaWxkUGF0aCA9IGV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlKHZhbHVlKVxuXG4gICAgICBpZiAoY2hpbGRQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2VnbWVudHMucHVzaChjaGlsZFBhdGgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZVNlZ21lbnRzKHNlZ21lbnRzKVxufVxuXG5mdW5jdGlvbiBjb21wdXRlQ2hhbmdlZFBhdGhJbXBsKFxuICB0cmVlQTogRmxpZ2h0Um91dGVyU3RhdGUsXG4gIHRyZWVCOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IFtzZWdtZW50QSwgcGFyYWxsZWxSb3V0ZXNBXSA9IHRyZWVBXG4gIGNvbnN0IFtzZWdtZW50QiwgcGFyYWxsZWxSb3V0ZXNCXSA9IHRyZWVCXG5cbiAgY29uc3Qgbm9ybWFsaXplZFNlZ21lbnRBID0gc2VnbWVudFRvUGF0aG5hbWUoc2VnbWVudEEpXG4gIGNvbnN0IG5vcm1hbGl6ZWRTZWdtZW50QiA9IHNlZ21lbnRUb1BhdGhuYW1lKHNlZ21lbnRCKVxuXG4gIGlmIChcbiAgICBJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUy5zb21lKFxuICAgICAgKG0pID0+XG4gICAgICAgIG5vcm1hbGl6ZWRTZWdtZW50QS5zdGFydHNXaXRoKG0pIHx8IG5vcm1hbGl6ZWRTZWdtZW50Qi5zdGFydHNXaXRoKG0pXG4gICAgKVxuICApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghbWF0Y2hTZWdtZW50KHNlZ21lbnRBLCBzZWdtZW50QikpIHtcbiAgICAvLyBvbmNlIHdlIGZpbmQgd2hlcmUgdGhlIHRyZWUgY2hhbmdlZCwgd2UgY29tcHV0ZSB0aGUgcmVzdCBvZiB0aGUgcGF0aCBieSB0cmF2ZXJzaW5nIHRoZSB0cmVlXG4gICAgcmV0dXJuIGV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlKHRyZWVCKSA/PyAnJ1xuICB9XG5cbiAgZm9yIChjb25zdCBwYXJhbGxlbFJvdXRlcktleSBpbiBwYXJhbGxlbFJvdXRlc0EpIHtcbiAgICBpZiAocGFyYWxsZWxSb3V0ZXNCW3BhcmFsbGVsUm91dGVyS2V5XSkge1xuICAgICAgY29uc3QgY2hhbmdlZFBhdGggPSBjb21wdXRlQ2hhbmdlZFBhdGhJbXBsKFxuICAgICAgICBwYXJhbGxlbFJvdXRlc0FbcGFyYWxsZWxSb3V0ZXJLZXldLFxuICAgICAgICBwYXJhbGxlbFJvdXRlc0JbcGFyYWxsZWxSb3V0ZXJLZXldXG4gICAgICApXG4gICAgICBpZiAoY2hhbmdlZFBhdGggIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGAke3NlZ21lbnRUb1BhdGhuYW1lKHNlZ21lbnRCKX0vJHtjaGFuZ2VkUGF0aH1gXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVDaGFuZ2VkUGF0aChcbiAgdHJlZUE6IEZsaWdodFJvdXRlclN0YXRlLFxuICB0cmVlQjogRmxpZ2h0Um91dGVyU3RhdGVcbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBjaGFuZ2VkUGF0aCA9IGNvbXB1dGVDaGFuZ2VkUGF0aEltcGwodHJlZUEsIHRyZWVCKVxuXG4gIGlmIChjaGFuZ2VkUGF0aCA9PSBudWxsIHx8IGNoYW5nZWRQYXRoID09PSAnLycpIHtcbiAgICByZXR1cm4gY2hhbmdlZFBhdGhcbiAgfVxuXG4gIC8vIGxpZ2h0d2VpZ2h0IG5vcm1hbGl6YXRpb24gdG8gcmVtb3ZlIHJvdXRlIGdyb3Vwc1xuICByZXR1cm4gbm9ybWFsaXplU2VnbWVudHMoY2hhbmdlZFBhdGguc3BsaXQoJy8nKSlcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBleHRyYWN0cyBkeW5hbWljIHBhcmFtZXRlcnMgZnJvbSBGbGlnaHRSb3V0ZXJTdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGVkUGFyYW1zKFxuICBjdXJyZW50VHJlZTogRmxpZ2h0Um91dGVyU3RhdGUsXG4gIHBhcmFtczogUGFyYW1zID0ge31cbik6IFBhcmFtcyB7XG4gIGNvbnN0IHBhcmFsbGVsUm91dGVzID0gY3VycmVudFRyZWVbMV1cblxuICBmb3IgKGNvbnN0IHBhcmFsbGVsUm91dGUgb2YgT2JqZWN0LnZhbHVlcyhwYXJhbGxlbFJvdXRlcykpIHtcbiAgICBjb25zdCBzZWdtZW50ID0gcGFyYWxsZWxSb3V0ZVswXVxuICAgIGNvbnN0IGlzRHluYW1pY1BhcmFtZXRlciA9IEFycmF5LmlzQXJyYXkoc2VnbWVudClcbiAgICBjb25zdCBzZWdtZW50VmFsdWUgPSBpc0R5bmFtaWNQYXJhbWV0ZXIgPyBzZWdtZW50WzFdIDogc2VnbWVudFxuICAgIGlmICghc2VnbWVudFZhbHVlIHx8IHNlZ21lbnRWYWx1ZS5zdGFydHNXaXRoKFBBR0VfU0VHTUVOVF9LRVkpKSBjb250aW51ZVxuXG4gICAgLy8gRW5zdXJlIGNhdGNoQWxsIGFuZCBvcHRpb25hbCBjYXRjaGFsbCBhcmUgdHVybmVkIGludG8gYW4gYXJyYXlcbiAgICBjb25zdCBpc0NhdGNoQWxsID1cbiAgICAgIGlzRHluYW1pY1BhcmFtZXRlciAmJiAoc2VnbWVudFsyXSA9PT0gJ2MnIHx8IHNlZ21lbnRbMl0gPT09ICdvYycpXG5cbiAgICBpZiAoaXNDYXRjaEFsbCkge1xuICAgICAgcGFyYW1zW3NlZ21lbnRbMF1dID0gc2VnbWVudFsxXS5zcGxpdCgnLycpXG4gICAgfSBlbHNlIGlmIChpc0R5bmFtaWNQYXJhbWV0ZXIpIHtcbiAgICAgIHBhcmFtc1tzZWdtZW50WzBdXSA9IHNlZ21lbnRbMV1cbiAgICB9XG5cbiAgICBwYXJhbXMgPSBnZXRTZWxlY3RlZFBhcmFtcyhwYXJhbGxlbFJvdXRlLCBwYXJhbXMpXG4gIH1cblxuICByZXR1cm4gcGFyYW1zXG59XG4iXSwibmFtZXMiOlsiY29tcHV0ZUNoYW5nZWRQYXRoIiwiZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUiLCJnZXRTZWxlY3RlZFBhcmFtcyIsInJlbW92ZUxlYWRpbmdTbGFzaCIsInNlZ21lbnQiLCJzbGljZSIsInNlZ21lbnRUb1BhdGhuYW1lIiwibm9ybWFsaXplU2VnbWVudHMiLCJzZWdtZW50cyIsInJlZHVjZSIsImFjYyIsImlzR3JvdXBTZWdtZW50IiwiZmxpZ2h0Um91dGVyU3RhdGUiLCJBcnJheSIsImlzQXJyYXkiLCJERUZBVUxUX1NFR01FTlRfS0VZIiwiSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMiLCJzb21lIiwibSIsInN0YXJ0c1dpdGgiLCJ1bmRlZmluZWQiLCJQQUdFX1NFR01FTlRfS0VZIiwicGFyYWxsZWxSb3V0ZXMiLCJjaGlsZHJlblBhdGgiLCJjaGlsZHJlbiIsInB1c2giLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImVudHJpZXMiLCJjaGlsZFBhdGgiLCJjb21wdXRlQ2hhbmdlZFBhdGhJbXBsIiwidHJlZUEiLCJ0cmVlQiIsInNlZ21lbnRBIiwicGFyYWxsZWxSb3V0ZXNBIiwic2VnbWVudEIiLCJwYXJhbGxlbFJvdXRlc0IiLCJub3JtYWxpemVkU2VnbWVudEEiLCJub3JtYWxpemVkU2VnbWVudEIiLCJtYXRjaFNlZ21lbnQiLCJwYXJhbGxlbFJvdXRlcktleSIsImNoYW5nZWRQYXRoIiwic3BsaXQiLCJjdXJyZW50VHJlZSIsInBhcmFtcyIsInBhcmFsbGVsUm91dGUiLCJ2YWx1ZXMiLCJpc0R5bmFtaWNQYXJhbWV0ZXIiLCJzZWdtZW50VmFsdWUiLCJpc0NhdGNoQWxsIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js":
/*!*************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js ***!
  \*************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"createHrefFromUrl\", ({\n    enumerable: true,\n    get: function() {\n        return createHrefFromUrl;\n    }\n}));\nfunction createHrefFromUrl(url, includeHash) {\n    if (includeHash === void 0) includeHash = true;\n    return url.pathname + url.search + (includeHash ? url.hash : '');\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=create-href-from-url.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9jcmVhdGUtaHJlZi1mcm9tLXVybC5qcyIsIm1hcHBpbmdzIjoiOzs7O3FEQUFnQkE7OztlQUFBQTs7O0FBQVQsU0FBU0Esa0JBQ2RDLEdBQThDLEVBQzlDQyxXQUEyQjtJQUEzQkEsSUFBQUEsZ0JBQUFBLEtBQUFBLEdBQUFBLGNBQXVCO0lBRXZCLE9BQU9ELElBQUlFLFFBQVEsR0FBR0YsSUFBSUcsTUFBTSxHQUFJRixDQUFBQSxjQUFjRCxJQUFJSSxJQUFJLEdBQUcsR0FBQztBQUNoRSIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2NyZWF0ZS1ocmVmLWZyb20tdXJsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIcmVmRnJvbVVybChcbiAgdXJsOiBQaWNrPFVSTCwgJ3BhdGhuYW1lJyB8ICdzZWFyY2gnIHwgJ2hhc2gnPixcbiAgaW5jbHVkZUhhc2g6IGJvb2xlYW4gPSB0cnVlXG4pOiBzdHJpbmcge1xuICByZXR1cm4gdXJsLnBhdGhuYW1lICsgdXJsLnNlYXJjaCArIChpbmNsdWRlSGFzaCA/IHVybC5oYXNoIDogJycpXG59XG4iXSwibmFtZXMiOlsiY3JlYXRlSHJlZkZyb21VcmwiLCJ1cmwiLCJpbmNsdWRlSGFzaCIsInBhdGhuYW1lIiwic2VhcmNoIiwiaGFzaCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js":
/*!********************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js ***!
  \********************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"createInitialRouterState\", ({\n    enumerable: true,\n    get: function() {\n        return createInitialRouterState;\n    }\n}));\nconst _createhreffromurl = __webpack_require__(/*! ./create-href-from-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ./fill-lazy-items-till-leaf-with-head */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _computechangedpath = __webpack_require__(/*! ./compute-changed-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\");\nconst _prefetchcacheutils = __webpack_require__(/*! ./prefetch-cache-utils */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/prefetch-cache-utils.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer-types */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _refetchinactiveparallelsegments = __webpack_require__(/*! ./refetch-inactive-parallel-segments */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/refetch-inactive-parallel-segments.js\");\nconst _flightdatahelpers = __webpack_require__(/*! ../../flight-data-helpers */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/flight-data-helpers.js\");\nfunction createInitialRouterState(param) {\n    let { navigatedAt, initialFlightData, initialCanonicalUrlParts, initialParallelRoutes, location, couldBeIntercepted, postponed, prerendered } = param;\n    // When initialized on the server, the canonical URL is provided as an array of parts.\n    // This is to ensure that when the RSC payload streamed to the client, crawlers don't interpret it\n    // as a URL that should be crawled.\n    const initialCanonicalUrl = initialCanonicalUrlParts.join('/');\n    const normalizedFlightData = (0, _flightdatahelpers.getFlightDataPartsFromPath)(initialFlightData[0]);\n    const { tree: initialTree, seedData: initialSeedData, head: initialHead } = normalizedFlightData;\n    // For the SSR render, seed data should always be available (we only send back a `null` response\n    // in the case of a `loading` segment, pre-PPR.)\n    const rsc = initialSeedData == null ? void 0 : initialSeedData[1];\n    var _initialSeedData_;\n    const loading = (_initialSeedData_ = initialSeedData == null ? void 0 : initialSeedData[3]) != null ? _initialSeedData_ : null;\n    const cache = {\n        lazyData: null,\n        rsc,\n        prefetchRsc: null,\n        head: null,\n        prefetchHead: null,\n        // The cache gets seeded during the first render. `initialParallelRoutes` ensures the cache from the first render is there during the second render.\n        parallelRoutes: initialParallelRoutes,\n        loading,\n        navigatedAt\n    };\n    const canonicalUrl = // This is safe to do as canonicalUrl can't be rendered, it's only used to control the history updates in the useEffect further down in this file.\n    location ? (0, _createhreffromurl.createHrefFromUrl)(location) : initialCanonicalUrl;\n    (0, _refetchinactiveparallelsegments.addRefreshMarkerToActiveParallelSegments)(initialTree, canonicalUrl);\n    const prefetchCache = new Map();\n    // When the cache hasn't been seeded yet we fill the cache with the head.\n    if (initialParallelRoutes === null || initialParallelRoutes.size === 0) {\n        (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(navigatedAt, cache, undefined, initialTree, initialSeedData, initialHead, undefined);\n    }\n    var _ref;\n    const initialState = {\n        tree: initialTree,\n        cache,\n        prefetchCache,\n        pushRef: {\n            pendingPush: false,\n            mpaNavigation: false,\n            // First render needs to preserve the previous window.history.state\n            // to avoid it being overwritten on navigation back/forward with MPA Navigation.\n            preserveCustomHistoryState: true\n        },\n        focusAndScrollRef: {\n            apply: false,\n            onlyHashChange: false,\n            hashFragment: null,\n            segmentPaths: []\n        },\n        canonicalUrl,\n        nextUrl: (_ref = (0, _computechangedpath.extractPathFromFlightRouterState)(initialTree) || (location == null ? void 0 : location.pathname)) != null ? _ref : null\n    };\n    if (false) {}\n    return initialState;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=create-initial-router-state.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9jcmVhdGUtaW5pdGlhbC1yb3V0ZXItc3RhdGUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs0REF5QmdCQTs7O2VBQUFBOzs7K0NBdEJrQjsyREFDWTtnREFDRztnREFJMUM7Z0RBQytDOzZEQUNHOytDQUNkO0FBYXBDLFNBQVNBLHlCQUF5QixLQVNWO0lBVFUsaUJBQzVCLEVBQ1hFLGlCQUFpQixFQUNqQkMsd0JBQXdCLEVBQ3hCQyxxQkFBcUIsRUFDckJDLFFBQVEsRUFDUkMsa0JBQWtCLEVBQ2xCQyxTQUFTLEVBQ1RDLFdBQVcsRUFDa0IsR0FUVTtJQVV2QyxzRkFBc0Y7SUFDdEYsa0dBQWtHO0lBQ2xHLG1DQUFtQztJQUNuQyxNQUFNQyxzQkFBc0JOLHlCQUF5Qk8sSUFBSSxDQUFDO0lBQzFELE1BQU1DLHVCQUF1QkMsQ0FBQUEsR0FBQUEsbUJBQUFBLDBCQUFBQSxFQUEyQlYsaUJBQWlCLENBQUMsRUFBRTtJQUM1RSxNQUFNLEVBQ0pXLE1BQU1DLFdBQVcsRUFDakJDLFVBQVVDLGVBQWUsRUFDekJDLE1BQU1DLFdBQVcsRUFDbEIsR0FBR1A7SUFDSixnR0FBZ0c7SUFDaEcsZ0RBQWdEO0lBQ2hELE1BQU1RLE1BQU1ILG1CQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxlQUFpQixDQUFDLEVBQUU7UUFDaEJBO0lBQWhCLE1BQU1JLFVBQVVKLENBQUFBLG9CQUFBQSxtQkFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsZUFBaUIsQ0FBQyxPQUFFLE9BQXBCQSxvQkFBd0I7SUFFeEMsTUFBTUssUUFBbUI7UUFDdkJDLFVBQVU7UUFDVkg7UUFDQUksYUFBYTtRQUNiTixNQUFNO1FBQ05PLGNBQWM7UUFDZCxvSkFBb0o7UUFDcEpDLGdCQUFnQnJCO1FBQ2hCZ0I7UUFDQW5CO0lBQ0Y7SUFFQSxNQUFNeUIsZUFDSiw2RUFBNkUscUVBQ3FFO0lBQ2xKckIsV0FFSXNCLENBQUFBLEdBQUFBLG1CQUFBQSxpQkFBQUEsRUFBa0J0QixZQUNsQkk7SUFFTm1CLENBQUFBLEdBQUFBLGlDQUFBQSx3Q0FBQUEsRUFBeUNkLGFBQWFZO0lBRXRELE1BQU1HLGdCQUFnQixJQUFJQztJQUUxQix5RUFBeUU7SUFDekUsSUFBSTFCLDBCQUEwQixRQUFRQSxzQkFBc0IyQixJQUFJLEtBQUssR0FBRztRQUN0RUMsQ0FBQUEsR0FBQUEsK0JBQUFBLDZCQUFBQSxFQUNFL0IsYUFDQW9CLE9BQ0FZLFdBQ0FuQixhQUNBRSxpQkFDQUUsYUFDQWU7SUFFSjtRQXFCSTtJQW5CSixNQUFNRSxlQUFlO1FBQ25CdEIsTUFBTUM7UUFDTk87UUFDQVE7UUFDQU8sU0FBUztZQUNQQyxhQUFhO1lBQ2JDLGVBQWU7WUFDZixtRUFBbUU7WUFDbkUsZ0ZBQWdGO1lBQ2hGQyw0QkFBNEI7UUFDOUI7UUFDQUMsbUJBQW1CO1lBQ2pCQyxPQUFPO1lBQ1BDLGdCQUFnQjtZQUNoQkMsY0FBYztZQUNkQyxjQUFjLEVBQUU7UUFDbEI7UUFDQWxCO1FBQ0FtQixTQUVFLENBQUNYLE9BQUFBLENBQUFBLEdBQUFBLG9CQUFBQSxnQ0FBQUEsRUFBaUNwQixpQkFBZ0JULFlBQUFBLE9BQUFBLEtBQUFBLElBQUFBLFNBQVV5QyxRQUFBQSxDQUFRLFlBQW5FWixPQUNEO0lBQ0o7SUFFQSxJQUFJYSxLQUFrRDFDLEVBQUUsRUF1Q3ZEO0lBRUQsT0FBTzhCO0FBQ1QiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9jcmVhdGUtaW5pdGlhbC1yb3V0ZXItc3RhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDYWNoZU5vZGUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB0eXBlIHsgRmxpZ2h0RGF0YVBhdGggfSBmcm9tICcuLi8uLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcblxuaW1wb3J0IHsgY3JlYXRlSHJlZkZyb21VcmwgfSBmcm9tICcuL2NyZWF0ZS1ocmVmLWZyb20tdXJsJ1xuaW1wb3J0IHsgZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQgfSBmcm9tICcuL2ZpbGwtbGF6eS1pdGVtcy10aWxsLWxlYWYtd2l0aC1oZWFkJ1xuaW1wb3J0IHsgZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUgfSBmcm9tICcuL2NvbXB1dGUtY2hhbmdlZC1wYXRoJ1xuaW1wb3J0IHtcbiAgY3JlYXRlU2VlZGVkUHJlZmV0Y2hDYWNoZUVudHJ5LFxuICBTVEFUSUNfU1RBTEVUSU1FX01TLFxufSBmcm9tICcuL3ByZWZldGNoLWNhY2hlLXV0aWxzJ1xuaW1wb3J0IHsgUHJlZmV0Y2hLaW5kLCB0eXBlIFByZWZldGNoQ2FjaGVFbnRyeSB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXItdHlwZXMnXG5pbXBvcnQgeyBhZGRSZWZyZXNoTWFya2VyVG9BY3RpdmVQYXJhbGxlbFNlZ21lbnRzIH0gZnJvbSAnLi9yZWZldGNoLWluYWN0aXZlLXBhcmFsbGVsLXNlZ21lbnRzJ1xuaW1wb3J0IHsgZ2V0RmxpZ2h0RGF0YVBhcnRzRnJvbVBhdGggfSBmcm9tICcuLi8uLi9mbGlnaHQtZGF0YS1oZWxwZXJzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEluaXRpYWxSb3V0ZXJTdGF0ZVBhcmFtZXRlcnMge1xuICBuYXZpZ2F0ZWRBdDogbnVtYmVyXG4gIGluaXRpYWxDYW5vbmljYWxVcmxQYXJ0czogc3RyaW5nW11cbiAgaW5pdGlhbFBhcmFsbGVsUm91dGVzOiBDYWNoZU5vZGVbJ3BhcmFsbGVsUm91dGVzJ11cbiAgaW5pdGlhbEZsaWdodERhdGE6IEZsaWdodERhdGFQYXRoW11cbiAgbG9jYXRpb246IExvY2F0aW9uIHwgbnVsbFxuICBjb3VsZEJlSW50ZXJjZXB0ZWQ6IGJvb2xlYW5cbiAgcG9zdHBvbmVkOiBib29sZWFuXG4gIHByZXJlbmRlcmVkOiBib29sZWFuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbml0aWFsUm91dGVyU3RhdGUoe1xuICBuYXZpZ2F0ZWRBdCxcbiAgaW5pdGlhbEZsaWdodERhdGEsXG4gIGluaXRpYWxDYW5vbmljYWxVcmxQYXJ0cyxcbiAgaW5pdGlhbFBhcmFsbGVsUm91dGVzLFxuICBsb2NhdGlvbixcbiAgY291bGRCZUludGVyY2VwdGVkLFxuICBwb3N0cG9uZWQsXG4gIHByZXJlbmRlcmVkLFxufTogSW5pdGlhbFJvdXRlclN0YXRlUGFyYW1ldGVycykge1xuICAvLyBXaGVuIGluaXRpYWxpemVkIG9uIHRoZSBzZXJ2ZXIsIHRoZSBjYW5vbmljYWwgVVJMIGlzIHByb3ZpZGVkIGFzIGFuIGFycmF5IG9mIHBhcnRzLlxuICAvLyBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IHdoZW4gdGhlIFJTQyBwYXlsb2FkIHN0cmVhbWVkIHRvIHRoZSBjbGllbnQsIGNyYXdsZXJzIGRvbid0IGludGVycHJldCBpdFxuICAvLyBhcyBhIFVSTCB0aGF0IHNob3VsZCBiZSBjcmF3bGVkLlxuICBjb25zdCBpbml0aWFsQ2Fub25pY2FsVXJsID0gaW5pdGlhbENhbm9uaWNhbFVybFBhcnRzLmpvaW4oJy8nKVxuICBjb25zdCBub3JtYWxpemVkRmxpZ2h0RGF0YSA9IGdldEZsaWdodERhdGFQYXJ0c0Zyb21QYXRoKGluaXRpYWxGbGlnaHREYXRhWzBdKVxuICBjb25zdCB7XG4gICAgdHJlZTogaW5pdGlhbFRyZWUsXG4gICAgc2VlZERhdGE6IGluaXRpYWxTZWVkRGF0YSxcbiAgICBoZWFkOiBpbml0aWFsSGVhZCxcbiAgfSA9IG5vcm1hbGl6ZWRGbGlnaHREYXRhXG4gIC8vIEZvciB0aGUgU1NSIHJlbmRlciwgc2VlZCBkYXRhIHNob3VsZCBhbHdheXMgYmUgYXZhaWxhYmxlICh3ZSBvbmx5IHNlbmQgYmFjayBhIGBudWxsYCByZXNwb25zZVxuICAvLyBpbiB0aGUgY2FzZSBvZiBhIGBsb2FkaW5nYCBzZWdtZW50LCBwcmUtUFBSLilcbiAgY29uc3QgcnNjID0gaW5pdGlhbFNlZWREYXRhPy5bMV1cbiAgY29uc3QgbG9hZGluZyA9IGluaXRpYWxTZWVkRGF0YT8uWzNdID8/IG51bGxcblxuICBjb25zdCBjYWNoZTogQ2FjaGVOb2RlID0ge1xuICAgIGxhenlEYXRhOiBudWxsLFxuICAgIHJzYyxcbiAgICBwcmVmZXRjaFJzYzogbnVsbCxcbiAgICBoZWFkOiBudWxsLFxuICAgIHByZWZldGNoSGVhZDogbnVsbCxcbiAgICAvLyBUaGUgY2FjaGUgZ2V0cyBzZWVkZWQgZHVyaW5nIHRoZSBmaXJzdCByZW5kZXIuIGBpbml0aWFsUGFyYWxsZWxSb3V0ZXNgIGVuc3VyZXMgdGhlIGNhY2hlIGZyb20gdGhlIGZpcnN0IHJlbmRlciBpcyB0aGVyZSBkdXJpbmcgdGhlIHNlY29uZCByZW5kZXIuXG4gICAgcGFyYWxsZWxSb3V0ZXM6IGluaXRpYWxQYXJhbGxlbFJvdXRlcyxcbiAgICBsb2FkaW5nLFxuICAgIG5hdmlnYXRlZEF0LFxuICB9XG5cbiAgY29uc3QgY2Fub25pY2FsVXJsID1cbiAgICAvLyBsb2NhdGlvbi5ocmVmIGlzIHJlYWQgYXMgdGhlIGluaXRpYWwgdmFsdWUgZm9yIGNhbm9uaWNhbFVybCBpbiB0aGUgYnJvd3NlclxuICAgIC8vIFRoaXMgaXMgc2FmZSB0byBkbyBhcyBjYW5vbmljYWxVcmwgY2FuJ3QgYmUgcmVuZGVyZWQsIGl0J3Mgb25seSB1c2VkIHRvIGNvbnRyb2wgdGhlIGhpc3RvcnkgdXBkYXRlcyBpbiB0aGUgdXNlRWZmZWN0IGZ1cnRoZXIgZG93biBpbiB0aGlzIGZpbGUuXG4gICAgbG9jYXRpb25cbiAgICAgID8gLy8gd2luZG93LmxvY2F0aW9uIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBVUkwgYnV0IGhhcyBhbGwgdGhlIGZpZWxkcyBjcmVhdGVIcmVmRnJvbVVybCBuZWVkcy5cbiAgICAgICAgY3JlYXRlSHJlZkZyb21VcmwobG9jYXRpb24pXG4gICAgICA6IGluaXRpYWxDYW5vbmljYWxVcmxcblxuICBhZGRSZWZyZXNoTWFya2VyVG9BY3RpdmVQYXJhbGxlbFNlZ21lbnRzKGluaXRpYWxUcmVlLCBjYW5vbmljYWxVcmwpXG5cbiAgY29uc3QgcHJlZmV0Y2hDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBQcmVmZXRjaENhY2hlRW50cnk+KClcblxuICAvLyBXaGVuIHRoZSBjYWNoZSBoYXNuJ3QgYmVlbiBzZWVkZWQgeWV0IHdlIGZpbGwgdGhlIGNhY2hlIHdpdGggdGhlIGhlYWQuXG4gIGlmIChpbml0aWFsUGFyYWxsZWxSb3V0ZXMgPT09IG51bGwgfHwgaW5pdGlhbFBhcmFsbGVsUm91dGVzLnNpemUgPT09IDApIHtcbiAgICBmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZChcbiAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgY2FjaGUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBpbml0aWFsVHJlZSxcbiAgICAgIGluaXRpYWxTZWVkRGF0YSxcbiAgICAgIGluaXRpYWxIZWFkLFxuICAgICAgdW5kZWZpbmVkXG4gICAgKVxuICB9XG5cbiAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgIHRyZWU6IGluaXRpYWxUcmVlLFxuICAgIGNhY2hlLFxuICAgIHByZWZldGNoQ2FjaGUsXG4gICAgcHVzaFJlZjoge1xuICAgICAgcGVuZGluZ1B1c2g6IGZhbHNlLFxuICAgICAgbXBhTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgICAvLyBGaXJzdCByZW5kZXIgbmVlZHMgdG8gcHJlc2VydmUgdGhlIHByZXZpb3VzIHdpbmRvdy5oaXN0b3J5LnN0YXRlXG4gICAgICAvLyB0byBhdm9pZCBpdCBiZWluZyBvdmVyd3JpdHRlbiBvbiBuYXZpZ2F0aW9uIGJhY2svZm9yd2FyZCB3aXRoIE1QQSBOYXZpZ2F0aW9uLlxuICAgICAgcHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGU6IHRydWUsXG4gICAgfSxcbiAgICBmb2N1c0FuZFNjcm9sbFJlZjoge1xuICAgICAgYXBwbHk6IGZhbHNlLFxuICAgICAgb25seUhhc2hDaGFuZ2U6IGZhbHNlLFxuICAgICAgaGFzaEZyYWdtZW50OiBudWxsLFxuICAgICAgc2VnbWVudFBhdGhzOiBbXSxcbiAgICB9LFxuICAgIGNhbm9uaWNhbFVybCxcbiAgICBuZXh0VXJsOlxuICAgICAgLy8gdGhlIHx8IG9wZXJhdG9yIGlzIGludGVudGlvbmFsLCB0aGUgcGF0aG5hbWUgY2FuIGJlIGFuIGVtcHR5IHN0cmluZ1xuICAgICAgKGV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlKGluaXRpYWxUcmVlKSB8fCBsb2NhdGlvbj8ucGF0aG5hbWUpID8/XG4gICAgICBudWxsLFxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAnZGV2ZWxvcG1lbnQnICYmIGxvY2F0aW9uKSB7XG4gICAgLy8gU2VlZCB0aGUgcHJlZmV0Y2ggY2FjaGUgd2l0aCB0aGlzIHBhZ2UncyBkYXRhLlxuICAgIC8vIFRoaXMgaXMgdG8gcHJldmVudCBuZWVkbGVzc2x5IHJlLXByZWZldGNoaW5nIGEgcGFnZSB0aGF0IGlzIGFscmVhZHkgcmV1c2FibGUsXG4gICAgLy8gYW5kIHdpbGwgYXZvaWQgdHJpZ2dlcmluZyBhIGxvYWRpbmcgc3RhdGUvZGF0YSBmZXRjaCBzdGFsbCB3aGVuIG5hdmlnYXRpbmcgYmFjayB0byB0aGUgcGFnZS5cbiAgICAvLyBXZSBkb24ndCBjdXJyZW50bHkgZG8gdGhpcyBpbiBkZXZlbG9wbWVudCBiZWNhdXNlIGxpbmtzIGFyZW4ndCBwcmVmZXRjaGVkIGluIGRldmVsb3BtZW50XG4gICAgLy8gc28gaGF2aW5nIGEgbWlzbWF0Y2ggYmV0d2VlbiBwcmVmZXRjaC9ubyBwcmVmZXRjaCBwcm92aWRlcyBpbmNvbnNpc3RlbnQgYmVoYXZpb3IgYmFzZWQgb24gd2hpY2ggcGFnZVxuICAgIC8vIHdhcyBsb2FkZWQgZmlyc3QuXG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChcbiAgICAgIGAke2xvY2F0aW9uLnBhdGhuYW1lfSR7bG9jYXRpb24uc2VhcmNofWAsXG4gICAgICBsb2NhdGlvbi5vcmlnaW5cbiAgICApXG5cbiAgICBjcmVhdGVTZWVkZWRQcmVmZXRjaENhY2hlRW50cnkoe1xuICAgICAgdXJsLFxuICAgICAgZGF0YToge1xuICAgICAgICBmbGlnaHREYXRhOiBbbm9ybWFsaXplZEZsaWdodERhdGFdLFxuICAgICAgICBjYW5vbmljYWxVcmw6IHVuZGVmaW5lZCxcbiAgICAgICAgY291bGRCZUludGVyY2VwdGVkOiAhIWNvdWxkQmVJbnRlcmNlcHRlZCxcbiAgICAgICAgcHJlcmVuZGVyZWQsXG4gICAgICAgIHBvc3Rwb25lZCxcbiAgICAgICAgLy8gVE9ETzogVGhlIGluaXRpYWwgUlNDIHBheWxvYWQgaW5jbHVkZXMgYm90aCBzdGF0aWMgYW5kIGR5bmFtaWMgZGF0YVxuICAgICAgICAvLyBpbiB0aGUgc2FtZSByZXNwb25zZSwgZXZlbiBpZiBQUFIgaXMgZW5hYmxlZC4gU28gaWYgdGhlcmUncyBhbnlcbiAgICAgICAgLy8gZHluYW1pYyBkYXRhIGF0IGFsbCwgd2UgY2FuJ3Qgc2V0IGEgc3RhbGUgdGltZS4gSW4gdGhlIGZ1dHVyZSB3ZSBtYXlcbiAgICAgICAgLy8gYWRkIGEgd2F5IHRvIHNwbGl0IGEgc2luZ2xlIEZsaWdodCBzdHJlYW0gaW50byBzdGF0aWMgYW5kIGR5bmFtaWNcbiAgICAgICAgLy8gcGFydHMuIEJ1dCBpbiB0aGUgbWVhbnRpbWUgd2Ugc2hvdWxkIGF0IGxlYXN0IG1ha2UgdGhpcyB3b3JrIGZvclxuICAgICAgICAvLyBmdWxseSBzdGF0aWMgcGFnZXMuXG4gICAgICAgIHN0YWxlVGltZTpcbiAgICAgICAgICAvLyBJbiB0aGUgb2xkIHJvdXRlciwgdGhlcmUgd2FzIG9ubHkgYSBzaW5nbGUgY29uZmlndXJhYmxlIHN0YWxlVGltZSAoZXhwZXJpbWVudGFsLnN0YWxlVGltZXMpXG4gICAgICAgICAgLy8gQXMgYW4gYWJ1bmRhbmNlIG9mIGNhdXRpb24sIHRoaXMgd2lsbCBvbmx5IHNldCB0aGUgaW5pdGlhbCBzdGFsZVRpbWUgdG8gdGhlIGNvbmZpZ3VyZWQgdmFsdWVcbiAgICAgICAgICAvLyBpZiB3ZSdyZSBub3QgbGV2ZXJhZ2luZyB0aGUgc2VnbWVudCBjYWNoZSwgd2hpY2ggaGFzIGl0cyBvd24gcHJlZmV0Y2hpbmcgc2VtYW50aWNzLlxuICAgICAgICAgIHByZXJlbmRlcmVkICYmICFwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEVcbiAgICAgICAgICAgID8gU1RBVElDX1NUQUxFVElNRV9NU1xuICAgICAgICAgICAgOiAtMSxcbiAgICAgIH0sXG4gICAgICB0cmVlOiBpbml0aWFsU3RhdGUudHJlZSxcbiAgICAgIHByZWZldGNoQ2FjaGU6IGluaXRpYWxTdGF0ZS5wcmVmZXRjaENhY2hlLFxuICAgICAgbmV4dFVybDogaW5pdGlhbFN0YXRlLm5leHRVcmwsXG4gICAgICBraW5kOiBwcmVyZW5kZXJlZCA/IFByZWZldGNoS2luZC5GVUxMIDogUHJlZmV0Y2hLaW5kLkFVVE8sXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBpbml0aWFsU3RhdGVcbn1cbiJdLCJuYW1lcyI6WyJjcmVhdGVJbml0aWFsUm91dGVyU3RhdGUiLCJuYXZpZ2F0ZWRBdCIsImluaXRpYWxGbGlnaHREYXRhIiwiaW5pdGlhbENhbm9uaWNhbFVybFBhcnRzIiwiaW5pdGlhbFBhcmFsbGVsUm91dGVzIiwibG9jYXRpb24iLCJjb3VsZEJlSW50ZXJjZXB0ZWQiLCJwb3N0cG9uZWQiLCJwcmVyZW5kZXJlZCIsImluaXRpYWxDYW5vbmljYWxVcmwiLCJqb2luIiwibm9ybWFsaXplZEZsaWdodERhdGEiLCJnZXRGbGlnaHREYXRhUGFydHNGcm9tUGF0aCIsInRyZWUiLCJpbml0aWFsVHJlZSIsInNlZWREYXRhIiwiaW5pdGlhbFNlZWREYXRhIiwiaGVhZCIsImluaXRpYWxIZWFkIiwicnNjIiwibG9hZGluZyIsImNhY2hlIiwibGF6eURhdGEiLCJwcmVmZXRjaFJzYyIsInByZWZldGNoSGVhZCIsInBhcmFsbGVsUm91dGVzIiwiY2Fub25pY2FsVXJsIiwiY3JlYXRlSHJlZkZyb21VcmwiLCJhZGRSZWZyZXNoTWFya2VyVG9BY3RpdmVQYXJhbGxlbFNlZ21lbnRzIiwicHJlZmV0Y2hDYWNoZSIsIk1hcCIsInNpemUiLCJmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCIsInVuZGVmaW5lZCIsImV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlIiwiaW5pdGlhbFN0YXRlIiwicHVzaFJlZiIsInBlbmRpbmdQdXNoIiwibXBhTmF2aWdhdGlvbiIsInByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlIiwiZm9jdXNBbmRTY3JvbGxSZWYiLCJhcHBseSIsIm9ubHlIYXNoQ2hhbmdlIiwiaGFzaEZyYWdtZW50Iiwic2VnbWVudFBhdGhzIiwibmV4dFVybCIsInBhdGhuYW1lIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwidXJsIiwiVVJMIiwic2VhcmNoIiwib3JpZ2luIiwiY3JlYXRlU2VlZGVkUHJlZmV0Y2hDYWNoZUVudHJ5IiwiZGF0YSIsImZsaWdodERhdGEiLCJzdGFsZVRpbWUiLCJfX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEUiLCJTVEFUSUNfU1RBTEVUSU1FX01TIiwia2luZCIsIlByZWZldGNoS2luZCIsIkZVTEwiLCJBVVRPIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js":
/*!****************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js ***!
  \****************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"createRouterCacheKey\", ({\n    enumerable: true,\n    get: function() {\n        return createRouterCacheKey;\n    }\n}));\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/segment.js\");\nfunction createRouterCacheKey(segment, withoutSearchParameters) {\n    if (withoutSearchParameters === void 0) withoutSearchParameters = false;\n    // if the segment is an array, it means it's a dynamic segment\n    // for example, ['lang', 'en', 'd']. We need to convert it to a string to store it as a cache node key.\n    if (Array.isArray(segment)) {\n        return segment[0] + \"|\" + segment[1] + \"|\" + segment[2];\n    }\n    // Page segments might have search parameters, ie __PAGE__?foo=bar\n    // When `withoutSearchParameters` is true, we only want to return the page segment\n    if (withoutSearchParameters && segment.startsWith(_segment.PAGE_SEGMENT_KEY)) {\n        return _segment.PAGE_SEGMENT_KEY;\n    }\n    return segment;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=create-router-cache-key.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9jcmVhdGUtcm91dGVyLWNhY2hlLWtleS5qcyIsIm1hcHBpbmdzIjoiOzs7O3dEQUdnQkE7OztlQUFBQTs7O3FDQUZpQjtBQUUxQixTQUFTQSxxQkFDZEMsT0FBZ0IsRUFDaEJDLHVCQUF3QztJQUF4Q0EsSUFBQUEsNEJBQUFBLEtBQUFBLEdBQUFBLDBCQUFtQztJQUVuQyw4REFBOEQ7SUFDOUQsdUdBQXVHO0lBQ3ZHLElBQUlDLE1BQU1DLE9BQU8sQ0FBQ0gsVUFBVTtRQUMxQixPQUFVQSxPQUFPLENBQUMsRUFBRSxHQUFDLE1BQUdBLE9BQU8sQ0FBQyxFQUFFLEdBQUMsTUFBR0EsT0FBTyxDQUFDLEVBQUU7SUFDbEQ7SUFFQSxrRUFBa0U7SUFDbEUsa0ZBQWtGO0lBQ2xGLElBQUlDLDJCQUEyQkQsUUFBUUksVUFBVSxDQUFDQyxTQUFBQSxnQkFBZ0IsR0FBRztRQUNuRSxPQUFPQSxTQUFBQSxnQkFBZ0I7SUFDekI7SUFFQSxPQUFPTDtBQUNUIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvY3JlYXRlLXJvdXRlci1jYWNoZS1rZXkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTZWdtZW50IH0gZnJvbSAnLi4vLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5pbXBvcnQgeyBQQUdFX1NFR01FTlRfS0VZIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2xpYi9zZWdtZW50J1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUm91dGVyQ2FjaGVLZXkoXG4gIHNlZ21lbnQ6IFNlZ21lbnQsXG4gIHdpdGhvdXRTZWFyY2hQYXJhbWV0ZXJzOiBib29sZWFuID0gZmFsc2Vcbikge1xuICAvLyBpZiB0aGUgc2VnbWVudCBpcyBhbiBhcnJheSwgaXQgbWVhbnMgaXQncyBhIGR5bmFtaWMgc2VnbWVudFxuICAvLyBmb3IgZXhhbXBsZSwgWydsYW5nJywgJ2VuJywgJ2QnXS4gV2UgbmVlZCB0byBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nIHRvIHN0b3JlIGl0IGFzIGEgY2FjaGUgbm9kZSBrZXkuXG4gIGlmIChBcnJheS5pc0FycmF5KHNlZ21lbnQpKSB7XG4gICAgcmV0dXJuIGAke3NlZ21lbnRbMF19fCR7c2VnbWVudFsxXX18JHtzZWdtZW50WzJdfWBcbiAgfVxuXG4gIC8vIFBhZ2Ugc2VnbWVudHMgbWlnaHQgaGF2ZSBzZWFyY2ggcGFyYW1ldGVycywgaWUgX19QQUdFX18/Zm9vPWJhclxuICAvLyBXaGVuIGB3aXRob3V0U2VhcmNoUGFyYW1ldGVyc2AgaXMgdHJ1ZSwgd2Ugb25seSB3YW50IHRvIHJldHVybiB0aGUgcGFnZSBzZWdtZW50XG4gIGlmICh3aXRob3V0U2VhcmNoUGFyYW1ldGVycyAmJiBzZWdtZW50LnN0YXJ0c1dpdGgoUEFHRV9TRUdNRU5UX0tFWSkpIHtcbiAgICByZXR1cm4gUEFHRV9TRUdNRU5UX0tFWVxuICB9XG5cbiAgcmV0dXJuIHNlZ21lbnRcbn1cbiJdLCJuYW1lcyI6WyJjcmVhdGVSb3V0ZXJDYWNoZUtleSIsInNlZ21lbnQiLCJ3aXRob3V0U2VhcmNoUGFyYW1ldGVycyIsIkFycmF5IiwiaXNBcnJheSIsInN0YXJ0c1dpdGgiLCJQQUdFX1NFR01FTlRfS0VZIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js":
/*!**************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js ***!
  \**************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__  cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    createFetch: function() {\n        return createFetch;\n    },\n    createFromNextReadableStream: function() {\n        return createFromNextReadableStream;\n    },\n    fetchServerResponse: function() {\n        return fetchServerResponse;\n    },\n    urlToUrlWithoutFlightMarker: function() {\n        return urlToUrlWithoutFlightMarker;\n    }\n});\nconst _client = __webpack_require__(/*! react-server-dom-webpack/client */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-server-dom-webpack/client.browser.js\");\nconst _approuterheaders = __webpack_require__(/*! ../app-router-headers */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router-headers.js\");\nconst _appcallserver = __webpack_require__(/*! ../../app-call-server */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-call-server.js\");\nconst _appfindsourcemapurl = __webpack_require__(/*! ../../app-find-source-map-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-find-source-map-url.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer-types */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _flightdatahelpers = __webpack_require__(/*! ../../flight-data-helpers */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/flight-data-helpers.js\");\nconst _appbuildid = __webpack_require__(/*! ../../app-build-id */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-build-id.js\");\nconst _setcachebustingsearchparam = __webpack_require__(/*! ./set-cache-busting-search-param */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/set-cache-busting-search-param.js\");\nconst createFromReadableStream = _client.createFromReadableStream;\nfunction urlToUrlWithoutFlightMarker(url) {\n    const urlWithoutFlightParameters = new URL(url, location.origin);\n    urlWithoutFlightParameters.searchParams.delete(_approuterheaders.NEXT_RSC_UNION_QUERY);\n    if (false) {}\n    return urlWithoutFlightParameters;\n}\nfunction doMpaNavigation(url) {\n    return {\n        flightData: urlToUrlWithoutFlightMarker(url).toString(),\n        canonicalUrl: undefined,\n        couldBeIntercepted: false,\n        prerendered: false,\n        postponed: false,\n        staleTime: -1\n    };\n}\nlet abortController = new AbortController();\nif (true) {\n    // Abort any in-flight requests when the page is unloaded, e.g. due to\n    // reloading the page or performing hard navigations. This allows us to ignore\n    // what would otherwise be a thrown TypeError when the browser cancels the\n    // requests.\n    window.addEventListener('pagehide', ()=>{\n        abortController.abort();\n    });\n    // Use a fresh AbortController instance on pageshow, e.g. when navigating back\n    // and the JavaScript execution context is restored by the browser.\n    window.addEventListener('pageshow', ()=>{\n        abortController = new AbortController();\n    });\n}\nasync function fetchServerResponse(url, options) {\n    const { flightRouterState, nextUrl, prefetchKind } = options;\n    const headers = {\n        // Enable flight response\n        [_approuterheaders.RSC_HEADER]: '1',\n        // Provide the current router state\n        [_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER]: (0, _flightdatahelpers.prepareFlightRouterStateForRequest)(flightRouterState, options.isHmrRefresh)\n    };\n    /**\n   * Three cases:\n   * - `prefetchKind` is `undefined`, it means it's a normal navigation, so we want to prefetch the page data fully\n   * - `prefetchKind` is `full` - we want to prefetch the whole page so same as above\n   * - `prefetchKind` is `auto` - if the page is dynamic, prefetch the page data partially, if static prefetch the page data fully\n   */ if (prefetchKind === _routerreducertypes.PrefetchKind.AUTO) {\n        headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER] = '1';\n    }\n    if ( true && options.isHmrRefresh) {\n        headers[_approuterheaders.NEXT_HMR_REFRESH_HEADER] = '1';\n    }\n    if (nextUrl) {\n        headers[_approuterheaders.NEXT_URL] = nextUrl;\n    }\n    try {\n        var _res_headers_get;\n        // When creating a \"temporary\" prefetch (the \"on-demand\" prefetch that gets created on navigation, if one doesn't exist)\n        // we send the request with a \"high\" priority as it's in response to a user interaction that could be blocking a transition.\n        // Otherwise, all other prefetches are sent with a \"low\" priority.\n        // We use \"auto\" for in all other cases to match the existing default, as this function is shared outside of prefetching.\n        const fetchPriority = prefetchKind ? prefetchKind === _routerreducertypes.PrefetchKind.TEMPORARY ? 'high' : 'low' : 'auto';\n        if (false) {}\n        const res = await createFetch(url, headers, fetchPriority, abortController.signal);\n        const responseUrl = urlToUrlWithoutFlightMarker(res.url);\n        const canonicalUrl = res.redirected ? responseUrl : undefined;\n        const contentType = res.headers.get('content-type') || '';\n        const interception = !!((_res_headers_get = res.headers.get('vary')) == null ? void 0 : _res_headers_get.includes(_approuterheaders.NEXT_URL));\n        const postponed = !!res.headers.get(_approuterheaders.NEXT_DID_POSTPONE_HEADER);\n        const staleTimeHeaderSeconds = res.headers.get(_approuterheaders.NEXT_ROUTER_STALE_TIME_HEADER);\n        const staleTime = staleTimeHeaderSeconds !== null ? parseInt(staleTimeHeaderSeconds, 10) * 1000 : -1;\n        let isFlightResponse = contentType.startsWith(_approuterheaders.RSC_CONTENT_TYPE_HEADER);\n        if (false) {}\n        // If fetch returns something different than flight response handle it like a mpa navigation\n        // If the fetch was not 200, we also handle it like a mpa navigation\n        if (!isFlightResponse || !res.ok || !res.body) {\n            // in case the original URL came with a hash, preserve it before redirecting to the new URL\n            if (url.hash) {\n                responseUrl.hash = url.hash;\n            }\n            return doMpaNavigation(responseUrl.toString());\n        }\n        // We may navigate to a page that requires a different Webpack runtime.\n        // In prod, every page will have the same Webpack runtime.\n        // In dev, the Webpack runtime is minimal for each page.\n        // We need to ensure the Webpack runtime is updated before executing client-side JS of the new page.\n        if (true) {\n            await (__webpack_require__(/*! ../../dev/hot-reloader/app/hot-reloader-app */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/app/hot-reloader-app.js\").waitForWebpackRuntimeHotUpdate)();\n        }\n        // Handle the `fetch` readable stream that can be unwrapped by `React.use`.\n        const flightStream = postponed ? createUnclosingPrefetchStream(res.body) : res.body;\n        const response = await createFromNextReadableStream(flightStream);\n        if ((0, _appbuildid.getAppBuildId)() !== response.b) {\n            return doMpaNavigation(res.url);\n        }\n        return {\n            flightData: (0, _flightdatahelpers.normalizeFlightData)(response.f),\n            canonicalUrl: canonicalUrl,\n            couldBeIntercepted: interception,\n            prerendered: response.S,\n            postponed,\n            staleTime\n        };\n    } catch (err) {\n        if (!abortController.signal.aborted) {\n            console.error(\"Failed to fetch RSC payload for \" + url + \". Falling back to browser navigation.\", err);\n        }\n        // If fetch fails handle it like a mpa navigation\n        // TODO-APP: Add a test for the case where a CORS request fails, e.g. external url redirect coming from the response.\n        // See https://github.com/vercel/next.js/issues/43605#issuecomment-1451617521 for a reproduction.\n        return {\n            flightData: url.toString(),\n            canonicalUrl: undefined,\n            couldBeIntercepted: false,\n            prerendered: false,\n            postponed: false,\n            staleTime: -1\n        };\n    }\n}\nasync function createFetch(url, headers, fetchPriority, signal) {\n    // TODO: In output: \"export\" mode, the headers do nothing. Omit them (and the\n    // cache busting search param) from the request so they're\n    // maximally cacheable.\n    if (false) {}\n    if (false) {}\n    const fetchOptions = {\n        // Backwards compat for older browsers. `same-origin` is the default in modern browsers.\n        credentials: 'same-origin',\n        headers,\n        priority: fetchPriority || undefined,\n        signal\n    };\n    // `fetchUrl` is slightly different from `url` because we add a cache-busting\n    // search param to it. This should not leak outside of this function, so we\n    // track them separately.\n    let fetchUrl = new URL(url);\n    (0, _setcachebustingsearchparam.setCacheBustingSearchParam)(fetchUrl, headers);\n    let browserResponse = await fetch(fetchUrl, fetchOptions);\n    // If the server responds with a redirect (e.g. 307), and the redirected\n    // location does not contain the cache busting search param set in the\n    // original request, the response is likely invalid — when following the\n    // redirect, the browser forwards the request headers, but since the cache\n    // busting search param is missing, the server will reject the request due to\n    // a mismatch.\n    //\n    // Ideally, we would be able to intercept the redirect response and perform it\n    // manually, instead of letting the browser automatically follow it, but this\n    // is not allowed by the fetch API.\n    //\n    // So instead, we must \"replay\" the redirect by fetching the new location\n    // again, but this time we'll append the cache busting search param to prevent\n    // a mismatch.\n    //\n    // TODO: We can optimize Next.js's built-in middleware APIs by returning a\n    // custom status code, to prevent the browser from automatically following it.\n    //\n    // This does not affect Server Action-based redirects; those are encoded\n    // differently, as part of the Flight body. It only affects redirects that\n    // occur in a middleware or a third-party proxy.\n    let redirected = browserResponse.redirected;\n    if (false) {}\n    // Remove the cache busting search param from the response URL, to prevent it\n    // from leaking outside of this function.\n    const responseUrl = new URL(browserResponse.url, fetchUrl);\n    responseUrl.searchParams.delete(_approuterheaders.NEXT_RSC_UNION_QUERY);\n    const rscResponse = {\n        url: responseUrl.href,\n        // This is true if any redirects occurred, either automatically by the\n        // browser, or manually by us. So it's different from\n        // `browserResponse.redirected`, which only tells us whether the browser\n        // followed a redirect, and only for the last response in the chain.\n        redirected,\n        // These can be copied from the last browser response we received. We\n        // intentionally only expose the subset of fields that are actually used\n        // elsewhere in the codebase.\n        ok: browserResponse.ok,\n        headers: browserResponse.headers,\n        body: browserResponse.body,\n        status: browserResponse.status\n    };\n    return rscResponse;\n}\nfunction createFromNextReadableStream(flightStream) {\n    return createFromReadableStream(flightStream, {\n        callServer: _appcallserver.callServer,\n        findSourceMapURL: _appfindsourcemapurl.findSourceMapURL\n    });\n}\nfunction createUnclosingPrefetchStream(originalFlightStream) {\n    // When PPR is enabled, prefetch streams may contain references that never\n    // resolve, because that's how we encode dynamic data access. In the decoded\n    // object returned by the Flight client, these are reified into hanging\n    // promises that suspend during render, which is effectively what we want.\n    // The UI resolves when it switches to the dynamic data stream\n    // (via useDeferredValue(dynamic, static)).\n    //\n    // However, the Flight implementation currently errors if the server closes\n    // the response before all the references are resolved. As a cheat to work\n    // around this, we wrap the original stream in a new stream that never closes,\n    // and therefore doesn't error.\n    const reader = originalFlightStream.getReader();\n    return new ReadableStream({\n        async pull (controller) {\n            while(true){\n                const { done, value } = await reader.read();\n                if (!done) {\n                    // Pass to the target stream and keep consuming the Flight response\n                    // from the server.\n                    controller.enqueue(value);\n                    continue;\n                }\n                // The server stream has closed. Exit, but intentionally do not close\n                // the target stream.\n                return;\n            }\n        }\n    });\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=fetch-server-response.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9mZXRjaC1zZXJ2ZXItcmVzcG9uc2UuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBeVJzQkEsV0FBVztlQUFYQTs7SUFxSE5DLDRCQUE0QjtlQUE1QkE7O0lBM1JNQyxtQkFBbUI7ZUFBbkJBOztJQWxETkMsMkJBQTJCO2VBQTNCQTs7O29DQTdENEQ7OENBa0JyRTsyQ0FDb0I7aURBQ007Z0RBQ0o7K0NBS3RCO3dDQUN1Qjt3REFDYTtBQUUzQyxNQUFNQywyQkFDSkMsUUFBQUEsd0JBQStCO0FBOEIxQixTQUFTRiw0QkFBNEJHLEdBQVc7SUFDckQsTUFBTUMsNkJBQTZCLElBQUlDLElBQUlGLEtBQUtHLFNBQVNDLE1BQU07SUFDL0RILDJCQUEyQkksWUFBWSxDQUFDQyxNQUFNLENBQUNDLGtCQUFBQSxvQkFBb0I7SUFDbkUsSUFBSUMsS0FBb0IsRUFBbUIsRUFVMUM7SUFDRCxPQUFPUDtBQUNUO0FBRUEsU0FBU2UsZ0JBQWdCaEIsR0FBVztJQUNsQyxPQUFPO1FBQ0xpQixZQUFZcEIsNEJBQTRCRyxLQUFLa0IsUUFBUTtRQUNyREMsY0FBY0M7UUFDZEMsb0JBQW9CO1FBQ3BCQyxhQUFhO1FBQ2JDLFdBQVc7UUFDWEMsV0FBVyxDQUFDO0lBQ2Q7QUFDRjtBQUVBLElBQUlDLGtCQUFrQixJQUFJQztBQUUxQixJQUFJLElBQTZCLEVBQUU7SUFDakMsc0VBQXNFO0lBQ3RFLDhFQUE4RTtJQUM5RSwwRUFBMEU7SUFDMUUsWUFBWTtJQUNaQyxPQUFPQyxnQkFBZ0IsQ0FBQyxZQUFZO1FBQ2xDSCxnQkFBZ0JJLEtBQUs7SUFDdkI7SUFFQSw4RUFBOEU7SUFDOUUsbUVBQW1FO0lBQ25FRixPQUFPQyxnQkFBZ0IsQ0FBQyxZQUFZO1FBQ2xDSCxrQkFBa0IsSUFBSUM7SUFDeEI7QUFDRjtBQU1PLGVBQWU5QixvQkFDcEJJLEdBQVEsRUFDUjhCLE9BQW1DO0lBRW5DLE1BQU0sRUFBRUMsaUJBQWlCLEVBQUVDLE9BQU8sRUFBRUMsWUFBWSxFQUFFLEdBQUdIO0lBRXJELE1BQU1JLFVBQTBCO1FBQzlCLHlCQUF5QjtRQUN6QixDQUFDQyxrQkFBQUEsVUFBVSxDQUFDLEVBQUU7UUFDZCxtQ0FBbUM7UUFDbkMsQ0FBQ0Msa0JBQUFBLDZCQUE2QixDQUFDLEVBQUVDLENBQUFBLEdBQUFBLG1CQUFBQSxrQ0FBQUEsRUFDL0JOLG1CQUNBRCxRQUFRUSxZQUFZO0lBRXhCO0lBRUE7Ozs7O0dBS0MsR0FDRCxJQUFJTCxpQkFBaUJNLG9CQUFBQSxZQUFZLENBQUNDLElBQUksRUFBRTtRQUN0Q04sT0FBTyxDQUFDTyxrQkFBQUEsMkJBQTJCLENBQUMsR0FBRztJQUN6QztJQUVBLElBQUlqQyxLQUFvQixJQUFzQnNCLFFBQVFRLFlBQVksRUFBRTtRQUNsRUosT0FBTyxDQUFDUSxrQkFBQUEsdUJBQXVCLENBQUMsR0FBRztJQUNyQztJQUVBLElBQUlWLFNBQVM7UUFDWEUsT0FBTyxDQUFDUyxrQkFBQUEsUUFBUSxDQUFDLEdBQUdYO0lBQ3RCO0lBRUEsSUFBSTtZQW9DcUJZO1FBbkN2Qix3SEFBd0g7UUFDeEgsNEhBQTRIO1FBQzVILGtFQUFrRTtRQUNsRSx5SEFBeUg7UUFDekgsTUFBTUMsZ0JBQWdCWixlQUNsQkEsaUJBQWlCTSxvQkFBQUEsWUFBWSxDQUFDTyxTQUFTLEdBQ3JDLFNBQ0EsUUFDRjtRQUVKLElBQUl0QyxLQUFvQixFQUFtQixFQVkxQztRQUVELE1BQU1vQyxNQUFNLE1BQU1sRCxZQUNoQk0sS0FDQWtDLFNBQ0FXLGVBQ0FwQixnQkFBZ0JzQixNQUFNO1FBR3hCLE1BQU1DLGNBQWNuRCw0QkFBNEIrQyxJQUFJNUMsR0FBRztRQUN2RCxNQUFNbUIsZUFBZXlCLElBQUlLLFVBQVUsR0FBR0QsY0FBYzVCO1FBRXBELE1BQU04QixjQUFjTixJQUFJVixPQUFPLENBQUNpQixHQUFHLENBQUMsbUJBQW1CO1FBQ3ZELE1BQU1DLGVBQWUsQ0FBQyxHQUFDUixtQkFBQUEsSUFBSVYsT0FBTyxDQUFDaUIsR0FBRyxDQUFDLDRCQUFoQlAsaUJBQXlCUyxRQUFRLENBQUNWLGtCQUFBQSxTQUFRO1FBQ2pFLE1BQU1wQixZQUFZLENBQUMsQ0FBQ3FCLElBQUlWLE9BQU8sQ0FBQ2lCLEdBQUcsQ0FBQ0csa0JBQUFBLHdCQUF3QjtRQUM1RCxNQUFNQyx5QkFBeUJYLElBQUlWLE9BQU8sQ0FBQ2lCLEdBQUcsQ0FDNUNLLGtCQUFBQSw2QkFBNkI7UUFFL0IsTUFBTWhDLFlBQ0orQiwyQkFBMkIsT0FDdkJFLFNBQVNGLHdCQUF3QixNQUFNLE9BQ3ZDLENBQUM7UUFDUCxJQUFJRyxtQkFBbUJSLFlBQVlTLFVBQVUsQ0FBQ0Msa0JBQUFBLHVCQUF1QjtRQUVyRSxJQUFJcEQsS0FBb0IsRUFBbUIsRUFNMUM7UUFFRCw0RkFBNEY7UUFDNUYsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQ2tELG9CQUFvQixDQUFDZCxJQUFJaUIsRUFBRSxJQUFJLENBQUNqQixJQUFJa0IsSUFBSSxFQUFFO1lBQzdDLDJGQUEyRjtZQUMzRixJQUFJOUQsSUFBSStELElBQUksRUFBRTtnQkFDWmYsWUFBWWUsSUFBSSxHQUFHL0QsSUFBSStELElBQUk7WUFDN0I7WUFFQSxPQUFPL0MsZ0JBQWdCZ0MsWUFBWTlCLFFBQVE7UUFDN0M7UUFFQSx1RUFBdUU7UUFDdkUsMERBQTBEO1FBQzFELHdEQUF3RDtRQUN4RCxvR0FBb0c7UUFDcEcsSUFBSVYsSUFBK0QsRUFBRTtZQUNuRSxNQUNFeUQsbVZBQzhCO1FBQ2xDO1FBRUEsMkVBQTJFO1FBQzNFLE1BQU1FLGVBQWU1QyxZQUNqQjZDLDhCQUE4QnhCLElBQUlrQixJQUFJLElBQ3RDbEIsSUFBSWtCLElBQUk7UUFDWixNQUFNTyxXQUFXLE1BQU8xRSw2QkFDdEJ3RTtRQUdGLElBQUlHLENBQUFBLEdBQUFBLFlBQUFBLGFBQUFBLFFBQW9CRCxTQUFTRSxDQUFDLEVBQUU7WUFDbEMsT0FBT3ZELGdCQUFnQjRCLElBQUk1QyxHQUFHO1FBQ2hDO1FBRUEsT0FBTztZQUNMaUIsWUFBWXVELENBQUFBLEdBQUFBLG1CQUFBQSxtQkFBQUEsRUFBb0JILFNBQVNJLENBQUM7WUFDMUN0RCxjQUFjQTtZQUNkRSxvQkFBb0IrQjtZQUNwQjlCLGFBQWErQyxTQUFTSyxDQUFDO1lBQ3ZCbkQ7WUFDQUM7UUFDRjtJQUNGLEVBQUUsT0FBT21ELEtBQUs7UUFDWixJQUFJLENBQUNsRCxnQkFBZ0JzQixNQUFNLENBQUM2QixPQUFPLEVBQUU7WUFDbkNDLFFBQVFDLEtBQUssQ0FDVixxQ0FBa0M5RSxNQUFJLHlDQUN2QzJFO1FBRUo7UUFFQSxpREFBaUQ7UUFDakQscUhBQXFIO1FBQ3JILGlHQUFpRztRQUNqRyxPQUFPO1lBQ0wxRCxZQUFZakIsSUFBSWtCLFFBQVE7WUFDeEJDLGNBQWNDO1lBQ2RDLG9CQUFvQjtZQUNwQkMsYUFBYTtZQUNiQyxXQUFXO1lBQ1hDLFdBQVcsQ0FBQztRQUNkO0lBQ0Y7QUFDRjtBQWdCTyxlQUFlOUIsWUFDcEJNLEdBQVEsRUFDUmtDLE9BQXVCLEVBQ3ZCVyxhQUE2QyxFQUM3Q0UsTUFBb0I7SUFFcEIsNkVBQTZFO0lBQzdFLDBEQUEwRDtJQUMxRCx1QkFBdUI7SUFFdkIsSUFBSXZDLEtBQXNELEVBQUUsRUFFM0Q7SUFFRCxJQUFJQSxLQUE4QixFQUFFLEVBRW5DO0lBRUQsTUFBTXlFLGVBQTRCO1FBQ2hDLHdGQUF3RjtRQUN4RkMsYUFBYTtRQUNiaEQ7UUFDQWlELFVBQVV0QyxpQkFBaUJ6QjtRQUMzQjJCO0lBQ0Y7SUFDQSw2RUFBNkU7SUFDN0UsMkVBQTJFO0lBQzNFLHlCQUF5QjtJQUN6QixJQUFJcUMsV0FBVyxJQUFJbEYsSUFBSUY7SUFDdkJxRixDQUFBQSxHQUFBQSw0QkFBQUEsMEJBQTBCLEVBQUNELFVBQVVsRDtJQUNyQyxJQUFJb0Qsa0JBQWtCLE1BQU1DLE1BQU1ILFVBQVVIO0lBRTVDLHdFQUF3RTtJQUN4RSxzRUFBc0U7SUFDdEUsd0VBQXdFO0lBQ3hFLDBFQUEwRTtJQUMxRSw2RUFBNkU7SUFDN0UsY0FBYztJQUNkLEVBQUU7SUFDRiw4RUFBOEU7SUFDOUUsNkVBQTZFO0lBQzdFLG1DQUFtQztJQUNuQyxFQUFFO0lBQ0YseUVBQXlFO0lBQ3pFLDhFQUE4RTtJQUM5RSxjQUFjO0lBQ2QsRUFBRTtJQUNGLDBFQUEwRTtJQUMxRSw4RUFBOEU7SUFDOUUsRUFBRTtJQUNGLHdFQUF3RTtJQUN4RSwwRUFBMEU7SUFDMUUsZ0RBQWdEO0lBRWhELElBQUloQyxhQUFhcUMsZ0JBQWdCckMsVUFBVTtJQUMzQyxJQUFJekMsS0FBc0QsRUFBRSxFQWtDM0Q7SUFFRCw2RUFBNkU7SUFDN0UseUNBQXlDO0lBQ3pDLE1BQU13QyxjQUFjLElBQUk5QyxJQUFJb0YsZ0JBQWdCdEYsR0FBRyxFQUFFb0Y7SUFDakRwQyxZQUFZM0MsWUFBWSxDQUFDQyxNQUFNLENBQUNDLGtCQUFBQSxvQkFBb0I7SUFFcEQsTUFBTW9GLGNBQTJCO1FBQy9CM0YsS0FBS2dELFlBQVk0QyxJQUFJO1FBRXJCLHNFQUFzRTtRQUN0RSxxREFBcUQ7UUFDckQsd0VBQXdFO1FBQ3hFLG9FQUFvRTtRQUNwRTNDO1FBRUEscUVBQXFFO1FBQ3JFLHdFQUF3RTtRQUN4RSw2QkFBNkI7UUFDN0JZLElBQUl5QixnQkFBZ0J6QixFQUFFO1FBQ3RCM0IsU0FBU29ELGdCQUFnQnBELE9BQU87UUFDaEM0QixNQUFNd0IsZ0JBQWdCeEIsSUFBSTtRQUMxQitCLFFBQVFQLGdCQUFnQk8sTUFBTTtJQUNoQztJQUVBLE9BQU9GO0FBQ1Q7QUFFTyxTQUFTaEcsNkJBQ2R3RSxZQUF3QztJQUV4QyxPQUFPckUseUJBQXlCcUUsY0FBYztRQUM1QzJCLFlBQUFBLGVBQUFBLFVBQVU7UUFDVkMsa0JBQUFBLHFCQUFBQSxnQkFBZ0I7SUFDbEI7QUFDRjtBQUVBLFNBQVMzQiw4QkFDUDRCLG9CQUFnRDtJQUVoRCwwRUFBMEU7SUFDMUUsNEVBQTRFO0lBQzVFLHVFQUF1RTtJQUN2RSwwRUFBMEU7SUFDMUUsOERBQThEO0lBQzlELDJDQUEyQztJQUMzQyxFQUFFO0lBQ0YsMkVBQTJFO0lBQzNFLDBFQUEwRTtJQUMxRSw4RUFBOEU7SUFDOUUsK0JBQStCO0lBQy9CLE1BQU1DLFNBQVNELHFCQUFxQkUsU0FBUztJQUM3QyxPQUFPLElBQUlDLGVBQWU7UUFDeEIsTUFBTUMsTUFBS0MsVUFBVTtZQUNuQixNQUFPLEtBQU07Z0JBQ1gsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLEtBQUssRUFBRSxHQUFHLE1BQU1OLE9BQU9PLElBQUk7Z0JBQ3pDLElBQUksQ0FBQ0YsTUFBTTtvQkFDVCxtRUFBbUU7b0JBQ25FLG1CQUFtQjtvQkFDbkJELFdBQVdJLE9BQU8sQ0FBQ0Y7b0JBQ25CO2dCQUNGO2dCQUNBLHFFQUFxRTtnQkFDckUscUJBQXFCO2dCQUNyQjtZQUNGO1FBQ0Y7SUFDRjtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvZmV0Y2gtc2VydmVyLXJlc3BvbnNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG4vLyBUT0RPOiBFeHBsaWNpdGx5IGltcG9ydCBmcm9tIGNsaWVudC5icm93c2VyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG5pbXBvcnQgeyBjcmVhdGVGcm9tUmVhZGFibGVTdHJlYW0gYXMgY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtQnJvd3NlciB9IGZyb20gJ3JlYWN0LXNlcnZlci1kb20td2VicGFjay9jbGllbnQnXG5cbmltcG9ydCB0eXBlIHtcbiAgRmxpZ2h0Um91dGVyU3RhdGUsXG4gIE5hdmlnYXRpb25GbGlnaHRSZXNwb25zZSxcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5cbmltcG9ydCB0eXBlIHsgTkVYVF9ST1VURVJfU0VHTUVOVF9QUkVGRVRDSF9IRUFERVIgfSBmcm9tICcuLi9hcHAtcm91dGVyLWhlYWRlcnMnXG5pbXBvcnQge1xuICBORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVIsXG4gIE5FWFRfUk9VVEVSX1NUQVRFX1RSRUVfSEVBREVSLFxuICBORVhUX1JTQ19VTklPTl9RVUVSWSxcbiAgTkVYVF9VUkwsXG4gIFJTQ19IRUFERVIsXG4gIFJTQ19DT05URU5UX1RZUEVfSEVBREVSLFxuICBORVhUX0hNUl9SRUZSRVNIX0hFQURFUixcbiAgTkVYVF9ESURfUE9TVFBPTkVfSEVBREVSLFxuICBORVhUX1JPVVRFUl9TVEFMRV9USU1FX0hFQURFUixcbn0gZnJvbSAnLi4vYXBwLXJvdXRlci1oZWFkZXJzJ1xuaW1wb3J0IHsgY2FsbFNlcnZlciB9IGZyb20gJy4uLy4uL2FwcC1jYWxsLXNlcnZlcidcbmltcG9ydCB7IGZpbmRTb3VyY2VNYXBVUkwgfSBmcm9tICcuLi8uLi9hcHAtZmluZC1zb3VyY2UtbWFwLXVybCdcbmltcG9ydCB7IFByZWZldGNoS2luZCB9IGZyb20gJy4vcm91dGVyLXJlZHVjZXItdHlwZXMnXG5pbXBvcnQge1xuICBub3JtYWxpemVGbGlnaHREYXRhLFxuICBwcmVwYXJlRmxpZ2h0Um91dGVyU3RhdGVGb3JSZXF1ZXN0LFxuICB0eXBlIE5vcm1hbGl6ZWRGbGlnaHREYXRhLFxufSBmcm9tICcuLi8uLi9mbGlnaHQtZGF0YS1oZWxwZXJzJ1xuaW1wb3J0IHsgZ2V0QXBwQnVpbGRJZCB9IGZyb20gJy4uLy4uL2FwcC1idWlsZC1pZCdcbmltcG9ydCB7IHNldENhY2hlQnVzdGluZ1NlYXJjaFBhcmFtIH0gZnJvbSAnLi9zZXQtY2FjaGUtYnVzdGluZy1zZWFyY2gtcGFyYW0nXG5cbmNvbnN0IGNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbSA9XG4gIGNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbUJyb3dzZXIgYXMgKHR5cGVvZiBpbXBvcnQoJ3JlYWN0LXNlcnZlci1kb20td2VicGFjay9jbGllbnQuYnJvd3NlcicpKVsnY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtJ11cblxuZXhwb3J0IGludGVyZmFjZSBGZXRjaFNlcnZlclJlc3BvbnNlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGZsaWdodFJvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuICByZWFkb25seSBuZXh0VXJsOiBzdHJpbmcgfCBudWxsXG4gIHJlYWRvbmx5IHByZWZldGNoS2luZD86IFByZWZldGNoS2luZFxuICByZWFkb25seSBpc0htclJlZnJlc2g/OiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIEZldGNoU2VydmVyUmVzcG9uc2VSZXN1bHQgPSB7XG4gIGZsaWdodERhdGE6IE5vcm1hbGl6ZWRGbGlnaHREYXRhW10gfCBzdHJpbmdcbiAgY2Fub25pY2FsVXJsOiBVUkwgfCB1bmRlZmluZWRcbiAgY291bGRCZUludGVyY2VwdGVkOiBib29sZWFuXG4gIHByZXJlbmRlcmVkOiBib29sZWFuXG4gIHBvc3Rwb25lZDogYm9vbGVhblxuICBzdGFsZVRpbWU6IG51bWJlclxufVxuXG5leHBvcnQgdHlwZSBSZXF1ZXN0SGVhZGVycyA9IHtcbiAgW1JTQ19IRUFERVJdPzogJzEnXG4gIFtORVhUX1JPVVRFUl9TVEFURV9UUkVFX0hFQURFUl0/OiBzdHJpbmdcbiAgW05FWFRfVVJMXT86IHN0cmluZ1xuICBbTkVYVF9ST1VURVJfUFJFRkVUQ0hfSEVBREVSXT86ICcxJ1xuICBbTkVYVF9ST1VURVJfU0VHTUVOVF9QUkVGRVRDSF9IRUFERVJdPzogc3RyaW5nXG4gICd4LWRlcGxveW1lbnQtaWQnPzogc3RyaW5nXG4gIFtORVhUX0hNUl9SRUZSRVNIX0hFQURFUl0/OiAnMSdcbiAgLy8gQSBoZWFkZXIgdGhhdCBpcyBvbmx5IGFkZGVkIGluIHRlc3QgbW9kZSB0byBhc3NlcnQgb24gZmV0Y2ggcHJpb3JpdHlcbiAgJ05leHQtVGVzdC1GZXRjaC1Qcmlvcml0eSc/OiBSZXF1ZXN0SW5pdFsncHJpb3JpdHknXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXJsVG9VcmxXaXRob3V0RmxpZ2h0TWFya2VyKHVybDogc3RyaW5nKTogVVJMIHtcbiAgY29uc3QgdXJsV2l0aG91dEZsaWdodFBhcmFtZXRlcnMgPSBuZXcgVVJMKHVybCwgbG9jYXRpb24ub3JpZ2luKVxuICB1cmxXaXRob3V0RmxpZ2h0UGFyYW1ldGVycy5zZWFyY2hQYXJhbXMuZGVsZXRlKE5FWFRfUlNDX1VOSU9OX1FVRVJZKVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChcbiAgICAgIHByb2Nlc3MuZW52Ll9fTkVYVF9DT05GSUdfT1VUUFVUID09PSAnZXhwb3J0JyAmJlxuICAgICAgdXJsV2l0aG91dEZsaWdodFBhcmFtZXRlcnMucGF0aG5hbWUuZW5kc1dpdGgoJy50eHQnKVxuICAgICkge1xuICAgICAgY29uc3QgeyBwYXRobmFtZSB9ID0gdXJsV2l0aG91dEZsaWdodFBhcmFtZXRlcnNcbiAgICAgIGNvbnN0IGxlbmd0aCA9IHBhdGhuYW1lLmVuZHNXaXRoKCcvaW5kZXgudHh0JykgPyAxMCA6IDRcbiAgICAgIC8vIFNsaWNlIG9mZiBgL2luZGV4LnR4dGAgb3IgYC50eHRgIGZyb20gdGhlIGVuZCBvZiB0aGUgcGF0aG5hbWVcbiAgICAgIHVybFdpdGhvdXRGbGlnaHRQYXJhbWV0ZXJzLnBhdGhuYW1lID0gcGF0aG5hbWUuc2xpY2UoMCwgLWxlbmd0aClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVybFdpdGhvdXRGbGlnaHRQYXJhbWV0ZXJzXG59XG5cbmZ1bmN0aW9uIGRvTXBhTmF2aWdhdGlvbih1cmw6IHN0cmluZyk6IEZldGNoU2VydmVyUmVzcG9uc2VSZXN1bHQge1xuICByZXR1cm4ge1xuICAgIGZsaWdodERhdGE6IHVybFRvVXJsV2l0aG91dEZsaWdodE1hcmtlcih1cmwpLnRvU3RyaW5nKCksXG4gICAgY2Fub25pY2FsVXJsOiB1bmRlZmluZWQsXG4gICAgY291bGRCZUludGVyY2VwdGVkOiBmYWxzZSxcbiAgICBwcmVyZW5kZXJlZDogZmFsc2UsXG4gICAgcG9zdHBvbmVkOiBmYWxzZSxcbiAgICBzdGFsZVRpbWU6IC0xLFxuICB9XG59XG5cbmxldCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIC8vIEFib3J0IGFueSBpbi1mbGlnaHQgcmVxdWVzdHMgd2hlbiB0aGUgcGFnZSBpcyB1bmxvYWRlZCwgZS5nLiBkdWUgdG9cbiAgLy8gcmVsb2FkaW5nIHRoZSBwYWdlIG9yIHBlcmZvcm1pbmcgaGFyZCBuYXZpZ2F0aW9ucy4gVGhpcyBhbGxvd3MgdXMgdG8gaWdub3JlXG4gIC8vIHdoYXQgd291bGQgb3RoZXJ3aXNlIGJlIGEgdGhyb3duIFR5cGVFcnJvciB3aGVuIHRoZSBicm93c2VyIGNhbmNlbHMgdGhlXG4gIC8vIHJlcXVlc3RzLlxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncGFnZWhpZGUnLCAoKSA9PiB7XG4gICAgYWJvcnRDb250cm9sbGVyLmFib3J0KClcbiAgfSlcblxuICAvLyBVc2UgYSBmcmVzaCBBYm9ydENvbnRyb2xsZXIgaW5zdGFuY2Ugb24gcGFnZXNob3csIGUuZy4gd2hlbiBuYXZpZ2F0aW5nIGJhY2tcbiAgLy8gYW5kIHRoZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0IGlzIHJlc3RvcmVkIGJ5IHRoZSBicm93c2VyLlxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncGFnZXNob3cnLCAoKSA9PiB7XG4gICAgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gIH0pXG59XG5cbi8qKlxuICogRmV0Y2ggdGhlIGZsaWdodCBkYXRhIGZvciB0aGUgcHJvdmlkZWQgdXJsLiBUYWtlcyBpbiB0aGUgY3VycmVudCByb3V0ZXIgc3RhdGVcbiAqIHRvIGRlY2lkZSB3aGF0IHRvIHJlbmRlciBzZXJ2ZXItc2lkZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoU2VydmVyUmVzcG9uc2UoXG4gIHVybDogVVJMLFxuICBvcHRpb25zOiBGZXRjaFNlcnZlclJlc3BvbnNlT3B0aW9uc1xuKTogUHJvbWlzZTxGZXRjaFNlcnZlclJlc3BvbnNlUmVzdWx0PiB7XG4gIGNvbnN0IHsgZmxpZ2h0Um91dGVyU3RhdGUsIG5leHRVcmwsIHByZWZldGNoS2luZCB9ID0gb3B0aW9uc1xuXG4gIGNvbnN0IGhlYWRlcnM6IFJlcXVlc3RIZWFkZXJzID0ge1xuICAgIC8vIEVuYWJsZSBmbGlnaHQgcmVzcG9uc2VcbiAgICBbUlNDX0hFQURFUl06ICcxJyxcbiAgICAvLyBQcm92aWRlIHRoZSBjdXJyZW50IHJvdXRlciBzdGF0ZVxuICAgIFtORVhUX1JPVVRFUl9TVEFURV9UUkVFX0hFQURFUl06IHByZXBhcmVGbGlnaHRSb3V0ZXJTdGF0ZUZvclJlcXVlc3QoXG4gICAgICBmbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgICAgIG9wdGlvbnMuaXNIbXJSZWZyZXNoXG4gICAgKSxcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJlZSBjYXNlczpcbiAgICogLSBgcHJlZmV0Y2hLaW5kYCBpcyBgdW5kZWZpbmVkYCwgaXQgbWVhbnMgaXQncyBhIG5vcm1hbCBuYXZpZ2F0aW9uLCBzbyB3ZSB3YW50IHRvIHByZWZldGNoIHRoZSBwYWdlIGRhdGEgZnVsbHlcbiAgICogLSBgcHJlZmV0Y2hLaW5kYCBpcyBgZnVsbGAgLSB3ZSB3YW50IHRvIHByZWZldGNoIHRoZSB3aG9sZSBwYWdlIHNvIHNhbWUgYXMgYWJvdmVcbiAgICogLSBgcHJlZmV0Y2hLaW5kYCBpcyBgYXV0b2AgLSBpZiB0aGUgcGFnZSBpcyBkeW5hbWljLCBwcmVmZXRjaCB0aGUgcGFnZSBkYXRhIHBhcnRpYWxseSwgaWYgc3RhdGljIHByZWZldGNoIHRoZSBwYWdlIGRhdGEgZnVsbHlcbiAgICovXG4gIGlmIChwcmVmZXRjaEtpbmQgPT09IFByZWZldGNoS2luZC5BVVRPKSB7XG4gICAgaGVhZGVyc1tORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVJdID0gJzEnXG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcgJiYgb3B0aW9ucy5pc0htclJlZnJlc2gpIHtcbiAgICBoZWFkZXJzW05FWFRfSE1SX1JFRlJFU0hfSEVBREVSXSA9ICcxJ1xuICB9XG5cbiAgaWYgKG5leHRVcmwpIHtcbiAgICBoZWFkZXJzW05FWFRfVVJMXSA9IG5leHRVcmxcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gV2hlbiBjcmVhdGluZyBhIFwidGVtcG9yYXJ5XCIgcHJlZmV0Y2ggKHRoZSBcIm9uLWRlbWFuZFwiIHByZWZldGNoIHRoYXQgZ2V0cyBjcmVhdGVkIG9uIG5hdmlnYXRpb24sIGlmIG9uZSBkb2Vzbid0IGV4aXN0KVxuICAgIC8vIHdlIHNlbmQgdGhlIHJlcXVlc3Qgd2l0aCBhIFwiaGlnaFwiIHByaW9yaXR5IGFzIGl0J3MgaW4gcmVzcG9uc2UgdG8gYSB1c2VyIGludGVyYWN0aW9uIHRoYXQgY291bGQgYmUgYmxvY2tpbmcgYSB0cmFuc2l0aW9uLlxuICAgIC8vIE90aGVyd2lzZSwgYWxsIG90aGVyIHByZWZldGNoZXMgYXJlIHNlbnQgd2l0aCBhIFwibG93XCIgcHJpb3JpdHkuXG4gICAgLy8gV2UgdXNlIFwiYXV0b1wiIGZvciBpbiBhbGwgb3RoZXIgY2FzZXMgdG8gbWF0Y2ggdGhlIGV4aXN0aW5nIGRlZmF1bHQsIGFzIHRoaXMgZnVuY3Rpb24gaXMgc2hhcmVkIG91dHNpZGUgb2YgcHJlZmV0Y2hpbmcuXG4gICAgY29uc3QgZmV0Y2hQcmlvcml0eSA9IHByZWZldGNoS2luZFxuICAgICAgPyBwcmVmZXRjaEtpbmQgPT09IFByZWZldGNoS2luZC5URU1QT1JBUllcbiAgICAgICAgPyAnaGlnaCdcbiAgICAgICAgOiAnbG93J1xuICAgICAgOiAnYXV0bydcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0NPTkZJR19PVVRQVVQgPT09ICdleHBvcnQnKSB7XG4gICAgICAgIC8vIEluIFwib3V0cHV0OiBleHBvcnRcIiBtb2RlLCB3ZSBjYW4ndCByZWx5IG9uIGhlYWRlcnMgdG8gZGlzdGluZ3Vpc2hcbiAgICAgICAgLy8gYmV0d2VlbiBIVE1MIGFuZCBSU0MgcmVxdWVzdHMuIEluc3RlYWQsIHdlIGFwcGVuZCBhbiBleHRyYSBwcmVmaXhcbiAgICAgICAgLy8gdG8gdGhlIHJlcXVlc3QuXG4gICAgICAgIHVybCA9IG5ldyBVUkwodXJsKVxuICAgICAgICBpZiAodXJsLnBhdGhuYW1lLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgICB1cmwucGF0aG5hbWUgKz0gJ2luZGV4LnR4dCdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cmwucGF0aG5hbWUgKz0gJy50eHQnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCBjcmVhdGVGZXRjaChcbiAgICAgIHVybCxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBmZXRjaFByaW9yaXR5LFxuICAgICAgYWJvcnRDb250cm9sbGVyLnNpZ25hbFxuICAgIClcblxuICAgIGNvbnN0IHJlc3BvbnNlVXJsID0gdXJsVG9VcmxXaXRob3V0RmxpZ2h0TWFya2VyKHJlcy51cmwpXG4gICAgY29uc3QgY2Fub25pY2FsVXJsID0gcmVzLnJlZGlyZWN0ZWQgPyByZXNwb25zZVVybCA6IHVuZGVmaW5lZFxuXG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpIHx8ICcnXG4gICAgY29uc3QgaW50ZXJjZXB0aW9uID0gISFyZXMuaGVhZGVycy5nZXQoJ3ZhcnknKT8uaW5jbHVkZXMoTkVYVF9VUkwpXG4gICAgY29uc3QgcG9zdHBvbmVkID0gISFyZXMuaGVhZGVycy5nZXQoTkVYVF9ESURfUE9TVFBPTkVfSEVBREVSKVxuICAgIGNvbnN0IHN0YWxlVGltZUhlYWRlclNlY29uZHMgPSByZXMuaGVhZGVycy5nZXQoXG4gICAgICBORVhUX1JPVVRFUl9TVEFMRV9USU1FX0hFQURFUlxuICAgIClcbiAgICBjb25zdCBzdGFsZVRpbWUgPVxuICAgICAgc3RhbGVUaW1lSGVhZGVyU2Vjb25kcyAhPT0gbnVsbFxuICAgICAgICA/IHBhcnNlSW50KHN0YWxlVGltZUhlYWRlclNlY29uZHMsIDEwKSAqIDEwMDBcbiAgICAgICAgOiAtMVxuICAgIGxldCBpc0ZsaWdodFJlc3BvbnNlID0gY29udGVudFR5cGUuc3RhcnRzV2l0aChSU0NfQ09OVEVOVF9UWVBFX0hFQURFUilcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0NPTkZJR19PVVRQVVQgPT09ICdleHBvcnQnKSB7XG4gICAgICAgIGlmICghaXNGbGlnaHRSZXNwb25zZSkge1xuICAgICAgICAgIGlzRmxpZ2h0UmVzcG9uc2UgPSBjb250ZW50VHlwZS5zdGFydHNXaXRoKCd0ZXh0L3BsYWluJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIGZldGNoIHJldHVybnMgc29tZXRoaW5nIGRpZmZlcmVudCB0aGFuIGZsaWdodCByZXNwb25zZSBoYW5kbGUgaXQgbGlrZSBhIG1wYSBuYXZpZ2F0aW9uXG4gICAgLy8gSWYgdGhlIGZldGNoIHdhcyBub3QgMjAwLCB3ZSBhbHNvIGhhbmRsZSBpdCBsaWtlIGEgbXBhIG5hdmlnYXRpb25cbiAgICBpZiAoIWlzRmxpZ2h0UmVzcG9uc2UgfHwgIXJlcy5vayB8fCAhcmVzLmJvZHkpIHtcbiAgICAgIC8vIGluIGNhc2UgdGhlIG9yaWdpbmFsIFVSTCBjYW1lIHdpdGggYSBoYXNoLCBwcmVzZXJ2ZSBpdCBiZWZvcmUgcmVkaXJlY3RpbmcgdG8gdGhlIG5ldyBVUkxcbiAgICAgIGlmICh1cmwuaGFzaCkge1xuICAgICAgICByZXNwb25zZVVybC5oYXNoID0gdXJsLmhhc2hcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRvTXBhTmF2aWdhdGlvbihyZXNwb25zZVVybC50b1N0cmluZygpKVxuICAgIH1cblxuICAgIC8vIFdlIG1heSBuYXZpZ2F0ZSB0byBhIHBhZ2UgdGhhdCByZXF1aXJlcyBhIGRpZmZlcmVudCBXZWJwYWNrIHJ1bnRpbWUuXG4gICAgLy8gSW4gcHJvZCwgZXZlcnkgcGFnZSB3aWxsIGhhdmUgdGhlIHNhbWUgV2VicGFjayBydW50aW1lLlxuICAgIC8vIEluIGRldiwgdGhlIFdlYnBhY2sgcnVudGltZSBpcyBtaW5pbWFsIGZvciBlYWNoIHBhZ2UuXG4gICAgLy8gV2UgbmVlZCB0byBlbnN1cmUgdGhlIFdlYnBhY2sgcnVudGltZSBpcyB1cGRhdGVkIGJlZm9yZSBleGVjdXRpbmcgY2xpZW50LXNpZGUgSlMgb2YgdGhlIG5ldyBwYWdlLlxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFwcm9jZXNzLmVudi5UVVJCT1BBQ0spIHtcbiAgICAgIGF3YWl0IChcbiAgICAgICAgcmVxdWlyZSgnLi4vLi4vZGV2L2hvdC1yZWxvYWRlci9hcHAvaG90LXJlbG9hZGVyLWFwcCcpIGFzIHR5cGVvZiBpbXBvcnQoJy4uLy4uL2Rldi9ob3QtcmVsb2FkZXIvYXBwL2hvdC1yZWxvYWRlci1hcHAnKVxuICAgICAgKS53YWl0Rm9yV2VicGFja1J1bnRpbWVIb3RVcGRhdGUoKVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgYGZldGNoYCByZWFkYWJsZSBzdHJlYW0gdGhhdCBjYW4gYmUgdW53cmFwcGVkIGJ5IGBSZWFjdC51c2VgLlxuICAgIGNvbnN0IGZsaWdodFN0cmVhbSA9IHBvc3Rwb25lZFxuICAgICAgPyBjcmVhdGVVbmNsb3NpbmdQcmVmZXRjaFN0cmVhbShyZXMuYm9keSlcbiAgICAgIDogcmVzLmJvZHlcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IChjcmVhdGVGcm9tTmV4dFJlYWRhYmxlU3RyZWFtKFxuICAgICAgZmxpZ2h0U3RyZWFtXG4gICAgKSBhcyBQcm9taXNlPE5hdmlnYXRpb25GbGlnaHRSZXNwb25zZT4pXG5cbiAgICBpZiAoZ2V0QXBwQnVpbGRJZCgpICE9PSByZXNwb25zZS5iKSB7XG4gICAgICByZXR1cm4gZG9NcGFOYXZpZ2F0aW9uKHJlcy51cmwpXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZsaWdodERhdGE6IG5vcm1hbGl6ZUZsaWdodERhdGEocmVzcG9uc2UuZiksXG4gICAgICBjYW5vbmljYWxVcmw6IGNhbm9uaWNhbFVybCxcbiAgICAgIGNvdWxkQmVJbnRlcmNlcHRlZDogaW50ZXJjZXB0aW9uLFxuICAgICAgcHJlcmVuZGVyZWQ6IHJlc3BvbnNlLlMsXG4gICAgICBwb3N0cG9uZWQsXG4gICAgICBzdGFsZVRpbWUsXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoIWFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBmZXRjaCBSU0MgcGF5bG9hZCBmb3IgJHt1cmx9LiBGYWxsaW5nIGJhY2sgdG8gYnJvd3NlciBuYXZpZ2F0aW9uLmAsXG4gICAgICAgIGVyclxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIElmIGZldGNoIGZhaWxzIGhhbmRsZSBpdCBsaWtlIGEgbXBhIG5hdmlnYXRpb25cbiAgICAvLyBUT0RPLUFQUDogQWRkIGEgdGVzdCBmb3IgdGhlIGNhc2Ugd2hlcmUgYSBDT1JTIHJlcXVlc3QgZmFpbHMsIGUuZy4gZXh0ZXJuYWwgdXJsIHJlZGlyZWN0IGNvbWluZyBmcm9tIHRoZSByZXNwb25zZS5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9uZXh0LmpzL2lzc3Vlcy80MzYwNSNpc3N1ZWNvbW1lbnQtMTQ1MTYxNzUyMSBmb3IgYSByZXByb2R1Y3Rpb24uXG4gICAgcmV0dXJuIHtcbiAgICAgIGZsaWdodERhdGE6IHVybC50b1N0cmluZygpLFxuICAgICAgY2Fub25pY2FsVXJsOiB1bmRlZmluZWQsXG4gICAgICBjb3VsZEJlSW50ZXJjZXB0ZWQ6IGZhbHNlLFxuICAgICAgcHJlcmVuZGVyZWQ6IGZhbHNlLFxuICAgICAgcG9zdHBvbmVkOiBmYWxzZSxcbiAgICAgIHN0YWxlVGltZTogLTEsXG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgaXMgYSBzdWJzZXQgb2YgdGhlIHN0YW5kYXJkIFJlc3BvbnNlIHR5cGUuIFdlIHVzZSBhIGN1c3RvbSB0eXBlIGZvclxuLy8gdGhpcyBzbyB3ZSBjYW4gbGltaXQgd2hpY2ggZGV0YWlscyBhYm91dCB0aGUgcmVzcG9uc2UgbGVhayBpbnRvIHRoZSByZXN0IG9mXG4vLyB0aGUgY29kZWJhc2UuIEZvciBleGFtcGxlLCB0aGVyZSdzIHNvbWUgY3VzdG9tIGxvZ2ljIGZvciBtYW51YWxseSBmb2xsb3dpbmdcbi8vIHJlZGlyZWN0cywgc28gXCJyZWRpcmVjdGVkXCIgaW4gdGhpcyB0eXBlIGNvdWxkIGJlIGEgY29tcG9zaXRlIG9mIG11bHRpcGxlXG4vLyBicm93c2VyIGZldGNoIGNhbGxzOyBob3dldmVyLCB0aGlzIGZhY3Qgc2hvdWxkIG5vdCBsZWFrIHRvIHRoZSBjYWxsZXIuXG5leHBvcnQgdHlwZSBSU0NSZXNwb25zZSA9IHtcbiAgb2s6IGJvb2xlYW5cbiAgcmVkaXJlY3RlZDogYm9vbGVhblxuICBoZWFkZXJzOiBIZWFkZXJzXG4gIGJvZHk6IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+IHwgbnVsbFxuICBzdGF0dXM6IG51bWJlclxuICB1cmw6IHN0cmluZ1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRmV0Y2goXG4gIHVybDogVVJMLFxuICBoZWFkZXJzOiBSZXF1ZXN0SGVhZGVycyxcbiAgZmV0Y2hQcmlvcml0eTogJ2F1dG8nIHwgJ2hpZ2gnIHwgJ2xvdycgfCBudWxsLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbFxuKTogUHJvbWlzZTxSU0NSZXNwb25zZT4ge1xuICAvLyBUT0RPOiBJbiBvdXRwdXQ6IFwiZXhwb3J0XCIgbW9kZSwgdGhlIGhlYWRlcnMgZG8gbm90aGluZy4gT21pdCB0aGVtIChhbmQgdGhlXG4gIC8vIGNhY2hlIGJ1c3Rpbmcgc2VhcmNoIHBhcmFtKSBmcm9tIHRoZSByZXF1ZXN0IHNvIHRoZXkncmVcbiAgLy8gbWF4aW1hbGx5IGNhY2hlYWJsZS5cblxuICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX1RFU1RfTU9ERSAmJiBmZXRjaFByaW9yaXR5ICE9PSBudWxsKSB7XG4gICAgaGVhZGVyc1snTmV4dC1UZXN0LUZldGNoLVByaW9yaXR5J10gPSBmZXRjaFByaW9yaXR5XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEKSB7XG4gICAgaGVhZGVyc1sneC1kZXBsb3ltZW50LWlkJ10gPSBwcm9jZXNzLmVudi5ORVhUX0RFUExPWU1FTlRfSURcbiAgfVxuXG4gIGNvbnN0IGZldGNoT3B0aW9uczogUmVxdWVzdEluaXQgPSB7XG4gICAgLy8gQmFja3dhcmRzIGNvbXBhdCBmb3Igb2xkZXIgYnJvd3NlcnMuIGBzYW1lLW9yaWdpbmAgaXMgdGhlIGRlZmF1bHQgaW4gbW9kZXJuIGJyb3dzZXJzLlxuICAgIGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nLFxuICAgIGhlYWRlcnMsXG4gICAgcHJpb3JpdHk6IGZldGNoUHJpb3JpdHkgfHwgdW5kZWZpbmVkLFxuICAgIHNpZ25hbCxcbiAgfVxuICAvLyBgZmV0Y2hVcmxgIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIGB1cmxgIGJlY2F1c2Ugd2UgYWRkIGEgY2FjaGUtYnVzdGluZ1xuICAvLyBzZWFyY2ggcGFyYW0gdG8gaXQuIFRoaXMgc2hvdWxkIG5vdCBsZWFrIG91dHNpZGUgb2YgdGhpcyBmdW5jdGlvbiwgc28gd2VcbiAgLy8gdHJhY2sgdGhlbSBzZXBhcmF0ZWx5LlxuICBsZXQgZmV0Y2hVcmwgPSBuZXcgVVJMKHVybClcbiAgc2V0Q2FjaGVCdXN0aW5nU2VhcmNoUGFyYW0oZmV0Y2hVcmwsIGhlYWRlcnMpXG4gIGxldCBicm93c2VyUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChmZXRjaFVybCwgZmV0Y2hPcHRpb25zKVxuXG4gIC8vIElmIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgd2l0aCBhIHJlZGlyZWN0IChlLmcuIDMwNyksIGFuZCB0aGUgcmVkaXJlY3RlZFxuICAvLyBsb2NhdGlvbiBkb2VzIG5vdCBjb250YWluIHRoZSBjYWNoZSBidXN0aW5nIHNlYXJjaCBwYXJhbSBzZXQgaW4gdGhlXG4gIC8vIG9yaWdpbmFsIHJlcXVlc3QsIHRoZSByZXNwb25zZSBpcyBsaWtlbHkgaW52YWxpZCDigJQgd2hlbiBmb2xsb3dpbmcgdGhlXG4gIC8vIHJlZGlyZWN0LCB0aGUgYnJvd3NlciBmb3J3YXJkcyB0aGUgcmVxdWVzdCBoZWFkZXJzLCBidXQgc2luY2UgdGhlIGNhY2hlXG4gIC8vIGJ1c3Rpbmcgc2VhcmNoIHBhcmFtIGlzIG1pc3NpbmcsIHRoZSBzZXJ2ZXIgd2lsbCByZWplY3QgdGhlIHJlcXVlc3QgZHVlIHRvXG4gIC8vIGEgbWlzbWF0Y2guXG4gIC8vXG4gIC8vIElkZWFsbHksIHdlIHdvdWxkIGJlIGFibGUgdG8gaW50ZXJjZXB0IHRoZSByZWRpcmVjdCByZXNwb25zZSBhbmQgcGVyZm9ybSBpdFxuICAvLyBtYW51YWxseSwgaW5zdGVhZCBvZiBsZXR0aW5nIHRoZSBicm93c2VyIGF1dG9tYXRpY2FsbHkgZm9sbG93IGl0LCBidXQgdGhpc1xuICAvLyBpcyBub3QgYWxsb3dlZCBieSB0aGUgZmV0Y2ggQVBJLlxuICAvL1xuICAvLyBTbyBpbnN0ZWFkLCB3ZSBtdXN0IFwicmVwbGF5XCIgdGhlIHJlZGlyZWN0IGJ5IGZldGNoaW5nIHRoZSBuZXcgbG9jYXRpb25cbiAgLy8gYWdhaW4sIGJ1dCB0aGlzIHRpbWUgd2UnbGwgYXBwZW5kIHRoZSBjYWNoZSBidXN0aW5nIHNlYXJjaCBwYXJhbSB0byBwcmV2ZW50XG4gIC8vIGEgbWlzbWF0Y2guXG4gIC8vXG4gIC8vIFRPRE86IFdlIGNhbiBvcHRpbWl6ZSBOZXh0LmpzJ3MgYnVpbHQtaW4gbWlkZGxld2FyZSBBUElzIGJ5IHJldHVybmluZyBhXG4gIC8vIGN1c3RvbSBzdGF0dXMgY29kZSwgdG8gcHJldmVudCB0aGUgYnJvd3NlciBmcm9tIGF1dG9tYXRpY2FsbHkgZm9sbG93aW5nIGl0LlxuICAvL1xuICAvLyBUaGlzIGRvZXMgbm90IGFmZmVjdCBTZXJ2ZXIgQWN0aW9uLWJhc2VkIHJlZGlyZWN0czsgdGhvc2UgYXJlIGVuY29kZWRcbiAgLy8gZGlmZmVyZW50bHksIGFzIHBhcnQgb2YgdGhlIEZsaWdodCBib2R5LiBJdCBvbmx5IGFmZmVjdHMgcmVkaXJlY3RzIHRoYXRcbiAgLy8gb2NjdXIgaW4gYSBtaWRkbGV3YXJlIG9yIGEgdGhpcmQtcGFydHkgcHJveHkuXG5cbiAgbGV0IHJlZGlyZWN0ZWQgPSBicm93c2VyUmVzcG9uc2UucmVkaXJlY3RlZFxuICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0NMSUVOVF9WQUxJREFURV9SU0NfUkVRVUVTVF9IRUFERVJTKSB7XG4gICAgLy8gVGhpcyBpcyB0byBwcmV2ZW50IGEgcmVkaXJlY3QgbG9vcC4gU2FtZSBsaW1pdCB1c2VkIGJ5IENocm9tZS5cbiAgICBjb25zdCBNQVhfUkVESVJFQ1RTID0gMjBcbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IE1BWF9SRURJUkVDVFM7IG4rKykge1xuICAgICAgaWYgKCFicm93c2VyUmVzcG9uc2UucmVkaXJlY3RlZCkge1xuICAgICAgICAvLyBUaGUgc2VydmVyIGRpZCBub3QgcGVyZm9ybSBhIHJlZGlyZWN0LlxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2VVcmwgPSBuZXcgVVJMKGJyb3dzZXJSZXNwb25zZS51cmwsIGZldGNoVXJsKVxuICAgICAgaWYgKHJlc3BvbnNlVXJsLm9yaWdpbiAhPT0gZmV0Y2hVcmwub3JpZ2luKSB7XG4gICAgICAgIC8vIFRoZSBzZXJ2ZXIgcmVkaXJlY3RlZCB0byBhbiBleHRlcm5hbCBVUkwuIFRoZSByZXN0IG9mIHRoZSBsb2dpYyBiZWxvd1xuICAgICAgICAvLyBpcyBub3QgcmVsZXZhbnQsIGJlY2F1c2UgaXQgb25seSBhcHBsaWVzIHRvIGludGVybmFsIHJlZGlyZWN0cy5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgcmVzcG9uc2VVcmwuc2VhcmNoUGFyYW1zLmdldChORVhUX1JTQ19VTklPTl9RVUVSWSkgPT09XG4gICAgICAgIGZldGNoVXJsLnNlYXJjaFBhcmFtcy5nZXQoTkVYVF9SU0NfVU5JT05fUVVFUlkpXG4gICAgICApIHtcbiAgICAgICAgLy8gVGhlIHJlZGlyZWN0ZWQgVVJMIGFscmVhZHkgaW5jbHVkZXMgdGhlIGNhY2hlIGJ1c3Rpbmcgc2VhcmNoIHBhcmFtLlxuICAgICAgICAvLyBUaGlzIHdhcyBwcm9iYWJseSBpbnRlbnRpb25hbC4gUmVnYXJkbGVzcywgdGhlcmUncyBubyByZWFzb24gdG9cbiAgICAgICAgLy8gaXNzdWUgYW5vdGhlciByZXF1ZXN0IHRvIHRoaXMgVVJMIGJlY2F1c2UgaXQgYWxyZWFkeSBoYXMgdGhlIHBhcmFtXG4gICAgICAgIC8vIHZhbHVlIHRoYXQgd2Ugd291bGQgaGF2ZSBhZGRlZCBiZWxvdy5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSBSU0MgcmVxdWVzdCB3YXMgcmVkaXJlY3RlZC4gQXNzdW1lIHRoZSByZXNwb25zZSBpcyBpbnZhbGlkLlxuICAgICAgLy9cbiAgICAgIC8vIEFwcGVuZCB0aGUgY2FjaGUgYnVzdGluZyBzZWFyY2ggcGFyYW0gdG8gdGhlIHJlZGlyZWN0ZWQgVVJMIGFuZFxuICAgICAgLy8gZmV0Y2ggYWdhaW4uXG4gICAgICBmZXRjaFVybCA9IG5ldyBVUkwocmVzcG9uc2VVcmwpXG4gICAgICBzZXRDYWNoZUJ1c3RpbmdTZWFyY2hQYXJhbShmZXRjaFVybCwgaGVhZGVycylcbiAgICAgIGJyb3dzZXJSZXNwb25zZSA9IGF3YWl0IGZldGNoKGZldGNoVXJsLCBmZXRjaE9wdGlvbnMpXG4gICAgICAvLyBXZSBqdXN0IHBlcmZvcm1lZCBhIG1hbnVhbCByZWRpcmVjdCwgc28gdGhpcyBpcyBub3cgdHJ1ZS5cbiAgICAgIHJlZGlyZWN0ZWQgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgLy8gUmVtb3ZlIHRoZSBjYWNoZSBidXN0aW5nIHNlYXJjaCBwYXJhbSBmcm9tIHRoZSByZXNwb25zZSBVUkwsIHRvIHByZXZlbnQgaXRcbiAgLy8gZnJvbSBsZWFraW5nIG91dHNpZGUgb2YgdGhpcyBmdW5jdGlvbi5cbiAgY29uc3QgcmVzcG9uc2VVcmwgPSBuZXcgVVJMKGJyb3dzZXJSZXNwb25zZS51cmwsIGZldGNoVXJsKVxuICByZXNwb25zZVVybC5zZWFyY2hQYXJhbXMuZGVsZXRlKE5FWFRfUlNDX1VOSU9OX1FVRVJZKVxuXG4gIGNvbnN0IHJzY1Jlc3BvbnNlOiBSU0NSZXNwb25zZSA9IHtcbiAgICB1cmw6IHJlc3BvbnNlVXJsLmhyZWYsXG5cbiAgICAvLyBUaGlzIGlzIHRydWUgaWYgYW55IHJlZGlyZWN0cyBvY2N1cnJlZCwgZWl0aGVyIGF1dG9tYXRpY2FsbHkgYnkgdGhlXG4gICAgLy8gYnJvd3Nlciwgb3IgbWFudWFsbHkgYnkgdXMuIFNvIGl0J3MgZGlmZmVyZW50IGZyb21cbiAgICAvLyBgYnJvd3NlclJlc3BvbnNlLnJlZGlyZWN0ZWRgLCB3aGljaCBvbmx5IHRlbGxzIHVzIHdoZXRoZXIgdGhlIGJyb3dzZXJcbiAgICAvLyBmb2xsb3dlZCBhIHJlZGlyZWN0LCBhbmQgb25seSBmb3IgdGhlIGxhc3QgcmVzcG9uc2UgaW4gdGhlIGNoYWluLlxuICAgIHJlZGlyZWN0ZWQsXG5cbiAgICAvLyBUaGVzZSBjYW4gYmUgY29waWVkIGZyb20gdGhlIGxhc3QgYnJvd3NlciByZXNwb25zZSB3ZSByZWNlaXZlZC4gV2VcbiAgICAvLyBpbnRlbnRpb25hbGx5IG9ubHkgZXhwb3NlIHRoZSBzdWJzZXQgb2YgZmllbGRzIHRoYXQgYXJlIGFjdHVhbGx5IHVzZWRcbiAgICAvLyBlbHNld2hlcmUgaW4gdGhlIGNvZGViYXNlLlxuICAgIG9rOiBicm93c2VyUmVzcG9uc2Uub2ssXG4gICAgaGVhZGVyczogYnJvd3NlclJlc3BvbnNlLmhlYWRlcnMsXG4gICAgYm9keTogYnJvd3NlclJlc3BvbnNlLmJvZHksXG4gICAgc3RhdHVzOiBicm93c2VyUmVzcG9uc2Uuc3RhdHVzLFxuICB9XG5cbiAgcmV0dXJuIHJzY1Jlc3BvbnNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm9tTmV4dFJlYWRhYmxlU3RyZWFtKFxuICBmbGlnaHRTdHJlYW06IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+XG4pOiBQcm9taXNlPHVua25vd24+IHtcbiAgcmV0dXJuIGNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbShmbGlnaHRTdHJlYW0sIHtcbiAgICBjYWxsU2VydmVyLFxuICAgIGZpbmRTb3VyY2VNYXBVUkwsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVVuY2xvc2luZ1ByZWZldGNoU3RyZWFtKFxuICBvcmlnaW5hbEZsaWdodFN0cmVhbTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheT5cbik6IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+IHtcbiAgLy8gV2hlbiBQUFIgaXMgZW5hYmxlZCwgcHJlZmV0Y2ggc3RyZWFtcyBtYXkgY29udGFpbiByZWZlcmVuY2VzIHRoYXQgbmV2ZXJcbiAgLy8gcmVzb2x2ZSwgYmVjYXVzZSB0aGF0J3MgaG93IHdlIGVuY29kZSBkeW5hbWljIGRhdGEgYWNjZXNzLiBJbiB0aGUgZGVjb2RlZFxuICAvLyBvYmplY3QgcmV0dXJuZWQgYnkgdGhlIEZsaWdodCBjbGllbnQsIHRoZXNlIGFyZSByZWlmaWVkIGludG8gaGFuZ2luZ1xuICAvLyBwcm9taXNlcyB0aGF0IHN1c3BlbmQgZHVyaW5nIHJlbmRlciwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgd2hhdCB3ZSB3YW50LlxuICAvLyBUaGUgVUkgcmVzb2x2ZXMgd2hlbiBpdCBzd2l0Y2hlcyB0byB0aGUgZHluYW1pYyBkYXRhIHN0cmVhbVxuICAvLyAodmlhIHVzZURlZmVycmVkVmFsdWUoZHluYW1pYywgc3RhdGljKSkuXG4gIC8vXG4gIC8vIEhvd2V2ZXIsIHRoZSBGbGlnaHQgaW1wbGVtZW50YXRpb24gY3VycmVudGx5IGVycm9ycyBpZiB0aGUgc2VydmVyIGNsb3Nlc1xuICAvLyB0aGUgcmVzcG9uc2UgYmVmb3JlIGFsbCB0aGUgcmVmZXJlbmNlcyBhcmUgcmVzb2x2ZWQuIEFzIGEgY2hlYXQgdG8gd29ya1xuICAvLyBhcm91bmQgdGhpcywgd2Ugd3JhcCB0aGUgb3JpZ2luYWwgc3RyZWFtIGluIGEgbmV3IHN0cmVhbSB0aGF0IG5ldmVyIGNsb3NlcyxcbiAgLy8gYW5kIHRoZXJlZm9yZSBkb2Vzbid0IGVycm9yLlxuICBjb25zdCByZWFkZXIgPSBvcmlnaW5hbEZsaWdodFN0cmVhbS5nZXRSZWFkZXIoKVxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgLy8gUGFzcyB0byB0aGUgdGFyZ2V0IHN0cmVhbSBhbmQga2VlcCBjb25zdW1pbmcgdGhlIEZsaWdodCByZXNwb25zZVxuICAgICAgICAgIC8vIGZyb20gdGhlIHNlcnZlci5cbiAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUodmFsdWUpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGUgc2VydmVyIHN0cmVhbSBoYXMgY2xvc2VkLiBFeGl0LCBidXQgaW50ZW50aW9uYWxseSBkbyBub3QgY2xvc2VcbiAgICAgICAgLy8gdGhlIHRhcmdldCBzdHJlYW0uXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH0sXG4gIH0pXG59XG4iXSwibmFtZXMiOlsiY3JlYXRlRmV0Y2giLCJjcmVhdGVGcm9tTmV4dFJlYWRhYmxlU3RyZWFtIiwiZmV0Y2hTZXJ2ZXJSZXNwb25zZSIsInVybFRvVXJsV2l0aG91dEZsaWdodE1hcmtlciIsImNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbSIsImNyZWF0ZUZyb21SZWFkYWJsZVN0cmVhbUJyb3dzZXIiLCJ1cmwiLCJ1cmxXaXRob3V0RmxpZ2h0UGFyYW1ldGVycyIsIlVSTCIsImxvY2F0aW9uIiwib3JpZ2luIiwic2VhcmNoUGFyYW1zIiwiZGVsZXRlIiwiTkVYVF9SU0NfVU5JT05fUVVFUlkiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJfX05FWFRfQ09ORklHX09VVFBVVCIsInBhdGhuYW1lIiwiZW5kc1dpdGgiLCJsZW5ndGgiLCJzbGljZSIsImRvTXBhTmF2aWdhdGlvbiIsImZsaWdodERhdGEiLCJ0b1N0cmluZyIsImNhbm9uaWNhbFVybCIsInVuZGVmaW5lZCIsImNvdWxkQmVJbnRlcmNlcHRlZCIsInByZXJlbmRlcmVkIiwicG9zdHBvbmVkIiwic3RhbGVUaW1lIiwiYWJvcnRDb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImFib3J0Iiwib3B0aW9ucyIsImZsaWdodFJvdXRlclN0YXRlIiwibmV4dFVybCIsInByZWZldGNoS2luZCIsImhlYWRlcnMiLCJSU0NfSEVBREVSIiwiTkVYVF9ST1VURVJfU1RBVEVfVFJFRV9IRUFERVIiLCJwcmVwYXJlRmxpZ2h0Um91dGVyU3RhdGVGb3JSZXF1ZXN0IiwiaXNIbXJSZWZyZXNoIiwiUHJlZmV0Y2hLaW5kIiwiQVVUTyIsIk5FWFRfUk9VVEVSX1BSRUZFVENIX0hFQURFUiIsIk5FWFRfSE1SX1JFRlJFU0hfSEVBREVSIiwiTkVYVF9VUkwiLCJyZXMiLCJmZXRjaFByaW9yaXR5IiwiVEVNUE9SQVJZIiwic2lnbmFsIiwicmVzcG9uc2VVcmwiLCJyZWRpcmVjdGVkIiwiY29udGVudFR5cGUiLCJnZXQiLCJpbnRlcmNlcHRpb24iLCJpbmNsdWRlcyIsIk5FWFRfRElEX1BPU1RQT05FX0hFQURFUiIsInN0YWxlVGltZUhlYWRlclNlY29uZHMiLCJORVhUX1JPVVRFUl9TVEFMRV9USU1FX0hFQURFUiIsInBhcnNlSW50IiwiaXNGbGlnaHRSZXNwb25zZSIsInN0YXJ0c1dpdGgiLCJSU0NfQ09OVEVOVF9UWVBFX0hFQURFUiIsIm9rIiwiYm9keSIsImhhc2giLCJUVVJCT1BBQ0siLCJyZXF1aXJlIiwid2FpdEZvcldlYnBhY2tSdW50aW1lSG90VXBkYXRlIiwiZmxpZ2h0U3RyZWFtIiwiY3JlYXRlVW5jbG9zaW5nUHJlZmV0Y2hTdHJlYW0iLCJyZXNwb25zZSIsImdldEFwcEJ1aWxkSWQiLCJiIiwibm9ybWFsaXplRmxpZ2h0RGF0YSIsImYiLCJTIiwiZXJyIiwiYWJvcnRlZCIsImNvbnNvbGUiLCJlcnJvciIsIl9fTkVYVF9URVNUX01PREUiLCJORVhUX0RFUExPWU1FTlRfSUQiLCJmZXRjaE9wdGlvbnMiLCJjcmVkZW50aWFscyIsInByaW9yaXR5IiwiZmV0Y2hVcmwiLCJzZXRDYWNoZUJ1c3RpbmdTZWFyY2hQYXJhbSIsImJyb3dzZXJSZXNwb25zZSIsImZldGNoIiwiX19ORVhUX0NMSUVOVF9WQUxJREFURV9SU0NfUkVRVUVTVF9IRUFERVJTIiwiTUFYX1JFRElSRUNUUyIsIm4iLCJyc2NSZXNwb25zZSIsImhyZWYiLCJzdGF0dXMiLCJjYWxsU2VydmVyIiwiZmluZFNvdXJjZU1hcFVSTCIsIm9yaWdpbmFsRmxpZ2h0U3RyZWFtIiwicmVhZGVyIiwiZ2V0UmVhZGVyIiwiUmVhZGFibGVTdHJlYW0iLCJwdWxsIiwiY29udHJvbGxlciIsImRvbmUiLCJ2YWx1ZSIsInJlYWQiLCJlbnF1ZXVlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js":
/*!*************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js ***!
  \*************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    fillCacheWithNewSubTreeData: function() {\n        return fillCacheWithNewSubTreeData;\n    },\n    fillCacheWithNewSubTreeDataButOnlyLoading: function() {\n        return fillCacheWithNewSubTreeDataButOnlyLoading;\n    }\n});\nconst _invalidatecachebyrouterstate = __webpack_require__(/*! ./invalidate-cache-by-router-state */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/invalidate-cache-by-router-state.js\");\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ./fill-lazy-items-till-leaf-with-head */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/segment.js\");\n/**\n * Common logic for filling cache with new sub tree data.\n */ function fillCacheHelper(navigatedAt, newCache, existingCache, flightData, prefetchEntry, fillLazyItems) {\n    const { segmentPath, seedData: cacheNodeSeedData, tree: treePatch, head } = flightData;\n    let newCacheNode = newCache;\n    let existingCacheNode = existingCache;\n    for(let i = 0; i < segmentPath.length; i += 2){\n        const parallelRouteKey = segmentPath[i];\n        const segment = segmentPath[i + 1];\n        // segmentPath is a repeating tuple of parallelRouteKey and segment\n        // we know we've hit the last entry we've reached our final pair\n        const isLastEntry = i === segmentPath.length - 2;\n        const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment);\n        const existingChildSegmentMap = existingCacheNode.parallelRoutes.get(parallelRouteKey);\n        if (!existingChildSegmentMap) {\n            continue;\n        }\n        let childSegmentMap = newCacheNode.parallelRoutes.get(parallelRouteKey);\n        if (!childSegmentMap || childSegmentMap === existingChildSegmentMap) {\n            childSegmentMap = new Map(existingChildSegmentMap);\n            newCacheNode.parallelRoutes.set(parallelRouteKey, childSegmentMap);\n        }\n        const existingChildCacheNode = existingChildSegmentMap.get(cacheKey);\n        let childCacheNode = childSegmentMap.get(cacheKey);\n        if (isLastEntry) {\n            if (cacheNodeSeedData && (!childCacheNode || !childCacheNode.lazyData || childCacheNode === existingChildCacheNode)) {\n                const incomingSegment = cacheNodeSeedData[0];\n                const rsc = cacheNodeSeedData[1];\n                const loading = cacheNodeSeedData[3];\n                childCacheNode = {\n                    lazyData: null,\n                    // When `fillLazyItems` is false, we only want to fill the RSC data for the layout,\n                    // not the page segment.\n                    rsc: fillLazyItems || incomingSegment !== _segment.PAGE_SEGMENT_KEY ? rsc : null,\n                    prefetchRsc: null,\n                    head: null,\n                    prefetchHead: null,\n                    loading,\n                    parallelRoutes: fillLazyItems && existingChildCacheNode ? new Map(existingChildCacheNode.parallelRoutes) : new Map(),\n                    navigatedAt\n                };\n                if (existingChildCacheNode && fillLazyItems) {\n                    (0, _invalidatecachebyrouterstate.invalidateCacheByRouterState)(childCacheNode, existingChildCacheNode, treePatch);\n                }\n                if (fillLazyItems) {\n                    (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(navigatedAt, childCacheNode, existingChildCacheNode, treePatch, cacheNodeSeedData, head, prefetchEntry);\n                }\n                childSegmentMap.set(cacheKey, childCacheNode);\n            }\n            continue;\n        }\n        if (!childCacheNode || !existingChildCacheNode) {\n            continue;\n        }\n        if (childCacheNode === existingChildCacheNode) {\n            childCacheNode = {\n                lazyData: childCacheNode.lazyData,\n                rsc: childCacheNode.rsc,\n                prefetchRsc: childCacheNode.prefetchRsc,\n                head: childCacheNode.head,\n                prefetchHead: childCacheNode.prefetchHead,\n                parallelRoutes: new Map(childCacheNode.parallelRoutes),\n                loading: childCacheNode.loading\n            };\n            childSegmentMap.set(cacheKey, childCacheNode);\n        }\n        // Move deeper into the cache nodes\n        newCacheNode = childCacheNode;\n        existingCacheNode = existingChildCacheNode;\n    }\n}\nfunction fillCacheWithNewSubTreeData(navigatedAt, newCache, existingCache, flightData, prefetchEntry) {\n    fillCacheHelper(navigatedAt, newCache, existingCache, flightData, prefetchEntry, true);\n}\nfunction fillCacheWithNewSubTreeDataButOnlyLoading(navigatedAt, newCache, existingCache, flightData, prefetchEntry) {\n    fillCacheHelper(navigatedAt, newCache, existingCache, flightData, prefetchEntry, false);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=fill-cache-with-new-subtree-data.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9maWxsLWNhY2hlLXdpdGgtbmV3LXN1YnRyZWUtZGF0YS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUF3SWdCQSwyQkFBMkI7ZUFBM0JBOztJQWlCQUMseUNBQXlDO2VBQXpDQTs7OzBEQXZKNkI7MkRBQ0M7a0RBQ1Q7cUNBRUo7QUFHakM7O0NBRUMsR0FDRCxTQUFTQyxnQkFDUEMsV0FBbUIsRUFDbkJDLFFBQW1CLEVBQ25CQyxhQUF3QixFQUN4QkMsVUFBZ0MsRUFDaENDLGFBQTZDLEVBQzdDQyxhQUFzQjtJQUV0QixNQUFNLEVBQ0pDLFdBQVcsRUFDWEMsVUFBVUMsaUJBQWlCLEVBQzNCQyxNQUFNQyxTQUFTLEVBQ2ZDLElBQUksRUFDTCxHQUFHUjtJQUNKLElBQUlTLGVBQWVYO0lBQ25CLElBQUlZLG9CQUFvQlg7SUFFeEIsSUFBSyxJQUFJWSxJQUFJLEdBQUdBLElBQUlSLFlBQVlTLE1BQU0sRUFBRUQsS0FBSyxFQUFHO1FBQzlDLE1BQU1FLG1CQUEyQlYsV0FBVyxDQUFDUSxFQUFFO1FBQy9DLE1BQU1HLFVBQW1CWCxXQUFXLENBQUNRLElBQUksRUFBRTtRQUUzQyxtRUFBbUU7UUFDbkUsZ0VBQWdFO1FBQ2hFLE1BQU1JLGNBQWNKLE1BQU1SLFlBQVlTLE1BQU0sR0FBRztRQUMvQyxNQUFNSSxXQUFXQyxDQUFBQSxHQUFBQSxzQkFBQUEsb0JBQUFBLEVBQXFCSDtRQUV0QyxNQUFNSSwwQkFDSlIsa0JBQWtCUyxjQUFjLENBQUNDLEdBQUcsQ0FBQ1A7UUFFdkMsSUFBSSxDQUFDSyx5QkFBeUI7WUFHNUI7UUFDRjtRQUVBLElBQUlHLGtCQUFrQlosYUFBYVUsY0FBYyxDQUFDQyxHQUFHLENBQUNQO1FBQ3RELElBQUksQ0FBQ1EsbUJBQW1CQSxvQkFBb0JILHlCQUF5QjtZQUNuRUcsa0JBQWtCLElBQUlDLElBQUlKO1lBQzFCVCxhQUFhVSxjQUFjLENBQUNJLEdBQUcsQ0FBQ1Ysa0JBQWtCUTtRQUNwRDtRQUVBLE1BQU1HLHlCQUF5Qk4sd0JBQXdCRSxHQUFHLENBQUNKO1FBQzNELElBQUlTLGlCQUFpQkosZ0JBQWdCRCxHQUFHLENBQUNKO1FBRXpDLElBQUlELGFBQWE7WUFDZixJQUNFVixxQkFDQyxFQUFDb0Isa0JBQ0EsQ0FBQ0EsZUFBZUMsUUFBUSxJQUN4QkQsbUJBQW1CRCxzQkFBQUEsQ0FBcUIsRUFDMUM7Z0JBQ0EsTUFBTUcsa0JBQWtCdEIsaUJBQWlCLENBQUMsRUFBRTtnQkFDNUMsTUFBTXVCLE1BQU12QixpQkFBaUIsQ0FBQyxFQUFFO2dCQUNoQyxNQUFNd0IsVUFBVXhCLGlCQUFpQixDQUFDLEVBQUU7Z0JBRXBDb0IsaUJBQWlCO29CQUNmQyxVQUFVO29CQUNWLG1GQUFtRjtvQkFDbkYsd0JBQXdCO29CQUN4QkUsS0FDRTFCLGlCQUFpQnlCLG9CQUFvQkcsU0FBQUEsZ0JBQWdCLEdBQUdGLE1BQU07b0JBQ2hFRyxhQUFhO29CQUNidkIsTUFBTTtvQkFDTndCLGNBQWM7b0JBQ2RIO29CQUNBVixnQkFDRWpCLGlCQUFpQnNCLHlCQUNiLElBQUlGLElBQUlFLHVCQUF1QkwsY0FBYyxJQUM3QyxJQUFJRztvQkFDVnpCO2dCQUNGO2dCQUVBLElBQUkyQiwwQkFBMEJ0QixlQUFlO29CQUMzQytCLENBQUFBLEdBQUFBLDhCQUFBQSw0QkFBQUEsRUFDRVIsZ0JBQ0FELHdCQUNBakI7Z0JBRUo7Z0JBQ0EsSUFBSUwsZUFBZTtvQkFDakJnQyxDQUFBQSxHQUFBQSwrQkFBQUEsNkJBQUFBLEVBQ0VyQyxhQUNBNEIsZ0JBQ0FELHdCQUNBakIsV0FDQUYsbUJBQ0FHLE1BQ0FQO2dCQUVKO2dCQUVBb0IsZ0JBQWdCRSxHQUFHLENBQUNQLFVBQVVTO1lBQ2hDO1lBQ0E7UUFDRjtRQUVBLElBQUksQ0FBQ0Esa0JBQWtCLENBQUNELHdCQUF3QjtZQUc5QztRQUNGO1FBRUEsSUFBSUMsbUJBQW1CRCx3QkFBd0I7WUFDN0NDLGlCQUFpQjtnQkFDZkMsVUFBVUQsZUFBZUMsUUFBUTtnQkFDakNFLEtBQUtILGVBQWVHLEdBQUc7Z0JBQ3ZCRyxhQUFhTixlQUFlTSxXQUFXO2dCQUN2Q3ZCLE1BQU1pQixlQUFlakIsSUFBSTtnQkFDekJ3QixjQUFjUCxlQUFlTyxZQUFZO2dCQUN6Q2IsZ0JBQWdCLElBQUlHLElBQUlHLGVBQWVOLGNBQWM7Z0JBQ3JEVSxTQUFTSixlQUFlSSxPQUFPO1lBQ2pDO1lBQ0FSLGdCQUFnQkUsR0FBRyxDQUFDUCxVQUFVUztRQUNoQztRQUVBLG1DQUFtQztRQUNuQ2hCLGVBQWVnQjtRQUNmZixvQkFBb0JjO0lBQ3RCO0FBQ0Y7QUFLTyxTQUFTOUIsNEJBQ2RHLFdBQW1CLEVBQ25CQyxRQUFtQixFQUNuQkMsYUFBd0IsRUFDeEJDLFVBQWdDLEVBQ2hDQyxhQUFrQztJQUVsQ0wsZ0JBQ0VDLGFBQ0FDLFVBQ0FDLGVBQ0FDLFlBQ0FDLGVBQ0E7QUFFSjtBQUVPLFNBQVNOLDBDQUNkRSxXQUFtQixFQUNuQkMsUUFBbUIsRUFDbkJDLGFBQXdCLEVBQ3hCQyxVQUFnQyxFQUNoQ0MsYUFBa0M7SUFFbENMLGdCQUNFQyxhQUNBQyxVQUNBQyxlQUNBQyxZQUNBQyxlQUNBO0FBRUoiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9maWxsLWNhY2hlLXdpdGgtbmV3LXN1YnRyZWUtZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhY2hlTm9kZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHR5cGUgeyBTZWdtZW50IH0gZnJvbSAnLi4vLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5pbXBvcnQgeyBpbnZhbGlkYXRlQ2FjaGVCeVJvdXRlclN0YXRlIH0gZnJvbSAnLi9pbnZhbGlkYXRlLWNhY2hlLWJ5LXJvdXRlci1zdGF0ZSdcbmltcG9ydCB7IGZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkIH0gZnJvbSAnLi9maWxsLWxhenktaXRlbXMtdGlsbC1sZWFmLXdpdGgtaGVhZCdcbmltcG9ydCB7IGNyZWF0ZVJvdXRlckNhY2hlS2V5IH0gZnJvbSAnLi9jcmVhdGUtcm91dGVyLWNhY2hlLWtleSdcbmltcG9ydCB0eXBlIHsgUHJlZmV0Y2hDYWNoZUVudHJ5IH0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci10eXBlcydcbmltcG9ydCB7IFBBR0VfU0VHTUVOVF9LRVkgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbGliL3NlZ21lbnQnXG5pbXBvcnQgdHlwZSB7IE5vcm1hbGl6ZWRGbGlnaHREYXRhIH0gZnJvbSAnLi4vLi4vZmxpZ2h0LWRhdGEtaGVscGVycydcblxuLyoqXG4gKiBDb21tb24gbG9naWMgZm9yIGZpbGxpbmcgY2FjaGUgd2l0aCBuZXcgc3ViIHRyZWUgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZmlsbENhY2hlSGVscGVyKFxuICBuYXZpZ2F0ZWRBdDogbnVtYmVyLFxuICBuZXdDYWNoZTogQ2FjaGVOb2RlLFxuICBleGlzdGluZ0NhY2hlOiBDYWNoZU5vZGUsXG4gIGZsaWdodERhdGE6IE5vcm1hbGl6ZWRGbGlnaHREYXRhLFxuICBwcmVmZXRjaEVudHJ5OiBQcmVmZXRjaENhY2hlRW50cnkgfCB1bmRlZmluZWQsXG4gIGZpbGxMYXp5SXRlbXM6IGJvb2xlYW5cbik6IHZvaWQge1xuICBjb25zdCB7XG4gICAgc2VnbWVudFBhdGgsXG4gICAgc2VlZERhdGE6IGNhY2hlTm9kZVNlZWREYXRhLFxuICAgIHRyZWU6IHRyZWVQYXRjaCxcbiAgICBoZWFkLFxuICB9ID0gZmxpZ2h0RGF0YVxuICBsZXQgbmV3Q2FjaGVOb2RlID0gbmV3Q2FjaGVcbiAgbGV0IGV4aXN0aW5nQ2FjaGVOb2RlID0gZXhpc3RpbmdDYWNoZVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudFBhdGgubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBjb25zdCBwYXJhbGxlbFJvdXRlS2V5OiBzdHJpbmcgPSBzZWdtZW50UGF0aFtpXVxuICAgIGNvbnN0IHNlZ21lbnQ6IFNlZ21lbnQgPSBzZWdtZW50UGF0aFtpICsgMV1cblxuICAgIC8vIHNlZ21lbnRQYXRoIGlzIGEgcmVwZWF0aW5nIHR1cGxlIG9mIHBhcmFsbGVsUm91dGVLZXkgYW5kIHNlZ21lbnRcbiAgICAvLyB3ZSBrbm93IHdlJ3ZlIGhpdCB0aGUgbGFzdCBlbnRyeSB3ZSd2ZSByZWFjaGVkIG91ciBmaW5hbCBwYWlyXG4gICAgY29uc3QgaXNMYXN0RW50cnkgPSBpID09PSBzZWdtZW50UGF0aC5sZW5ndGggLSAyXG4gICAgY29uc3QgY2FjaGVLZXkgPSBjcmVhdGVSb3V0ZXJDYWNoZUtleShzZWdtZW50KVxuXG4gICAgY29uc3QgZXhpc3RpbmdDaGlsZFNlZ21lbnRNYXAgPVxuICAgICAgZXhpc3RpbmdDYWNoZU5vZGUucGFyYWxsZWxSb3V0ZXMuZ2V0KHBhcmFsbGVsUm91dGVLZXkpXG5cbiAgICBpZiAoIWV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwKSB7XG4gICAgICAvLyBCYWlsb3V0IGJlY2F1c2UgdGhlIGV4aXN0aW5nIGNhY2hlIGRvZXMgbm90IGhhdmUgdGhlIHBhdGggdG8gdGhlIGxlYWYgbm9kZVxuICAgICAgLy8gV2lsbCB0cmlnZ2VyIGxhenkgZmV0Y2ggaW4gbGF5b3V0LXJvdXRlciBiZWNhdXNlIG9mIG1pc3Npbmcgc2VnbWVudFxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBsZXQgY2hpbGRTZWdtZW50TWFwID0gbmV3Q2FjaGVOb2RlLnBhcmFsbGVsUm91dGVzLmdldChwYXJhbGxlbFJvdXRlS2V5KVxuICAgIGlmICghY2hpbGRTZWdtZW50TWFwIHx8IGNoaWxkU2VnbWVudE1hcCA9PT0gZXhpc3RpbmdDaGlsZFNlZ21lbnRNYXApIHtcbiAgICAgIGNoaWxkU2VnbWVudE1hcCA9IG5ldyBNYXAoZXhpc3RpbmdDaGlsZFNlZ21lbnRNYXApXG4gICAgICBuZXdDYWNoZU5vZGUucGFyYWxsZWxSb3V0ZXMuc2V0KHBhcmFsbGVsUm91dGVLZXksIGNoaWxkU2VnbWVudE1hcClcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlID0gZXhpc3RpbmdDaGlsZFNlZ21lbnRNYXAuZ2V0KGNhY2hlS2V5KVxuICAgIGxldCBjaGlsZENhY2hlTm9kZSA9IGNoaWxkU2VnbWVudE1hcC5nZXQoY2FjaGVLZXkpXG5cbiAgICBpZiAoaXNMYXN0RW50cnkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2FjaGVOb2RlU2VlZERhdGEgJiZcbiAgICAgICAgKCFjaGlsZENhY2hlTm9kZSB8fFxuICAgICAgICAgICFjaGlsZENhY2hlTm9kZS5sYXp5RGF0YSB8fFxuICAgICAgICAgIGNoaWxkQ2FjaGVOb2RlID09PSBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGluY29taW5nU2VnbWVudCA9IGNhY2hlTm9kZVNlZWREYXRhWzBdXG4gICAgICAgIGNvbnN0IHJzYyA9IGNhY2hlTm9kZVNlZWREYXRhWzFdXG4gICAgICAgIGNvbnN0IGxvYWRpbmcgPSBjYWNoZU5vZGVTZWVkRGF0YVszXVxuXG4gICAgICAgIGNoaWxkQ2FjaGVOb2RlID0ge1xuICAgICAgICAgIGxhenlEYXRhOiBudWxsLFxuICAgICAgICAgIC8vIFdoZW4gYGZpbGxMYXp5SXRlbXNgIGlzIGZhbHNlLCB3ZSBvbmx5IHdhbnQgdG8gZmlsbCB0aGUgUlNDIGRhdGEgZm9yIHRoZSBsYXlvdXQsXG4gICAgICAgICAgLy8gbm90IHRoZSBwYWdlIHNlZ21lbnQuXG4gICAgICAgICAgcnNjOlxuICAgICAgICAgICAgZmlsbExhenlJdGVtcyB8fCBpbmNvbWluZ1NlZ21lbnQgIT09IFBBR0VfU0VHTUVOVF9LRVkgPyByc2MgOiBudWxsLFxuICAgICAgICAgIHByZWZldGNoUnNjOiBudWxsLFxuICAgICAgICAgIGhlYWQ6IG51bGwsXG4gICAgICAgICAgcHJlZmV0Y2hIZWFkOiBudWxsLFxuICAgICAgICAgIGxvYWRpbmcsXG4gICAgICAgICAgcGFyYWxsZWxSb3V0ZXM6XG4gICAgICAgICAgICBmaWxsTGF6eUl0ZW1zICYmIGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGVcbiAgICAgICAgICAgICAgPyBuZXcgTWFwKGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUucGFyYWxsZWxSb3V0ZXMpXG4gICAgICAgICAgICAgIDogbmV3IE1hcCgpLFxuICAgICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUgJiYgZmlsbExhenlJdGVtcykge1xuICAgICAgICAgIGludmFsaWRhdGVDYWNoZUJ5Um91dGVyU3RhdGUoXG4gICAgICAgICAgICBjaGlsZENhY2hlTm9kZSxcbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUsXG4gICAgICAgICAgICB0cmVlUGF0Y2hcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGxMYXp5SXRlbXMpIHtcbiAgICAgICAgICBmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZChcbiAgICAgICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgICAgICAgY2hpbGRDYWNoZU5vZGUsXG4gICAgICAgICAgICBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlLFxuICAgICAgICAgICAgdHJlZVBhdGNoLFxuICAgICAgICAgICAgY2FjaGVOb2RlU2VlZERhdGEsXG4gICAgICAgICAgICBoZWFkLFxuICAgICAgICAgICAgcHJlZmV0Y2hFbnRyeVxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkU2VnbWVudE1hcC5zZXQoY2FjaGVLZXksIGNoaWxkQ2FjaGVOb2RlKVxuICAgICAgfVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoIWNoaWxkQ2FjaGVOb2RlIHx8ICFleGlzdGluZ0NoaWxkQ2FjaGVOb2RlKSB7XG4gICAgICAvLyBCYWlsb3V0IGJlY2F1c2UgdGhlIGV4aXN0aW5nIGNhY2hlIGRvZXMgbm90IGhhdmUgdGhlIHBhdGggdG8gdGhlIGxlYWYgbm9kZVxuICAgICAgLy8gV2lsbCB0cmlnZ2VyIGxhenkgZmV0Y2ggaW4gbGF5b3V0LXJvdXRlciBiZWNhdXNlIG9mIG1pc3Npbmcgc2VnbWVudFxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY2hpbGRDYWNoZU5vZGUgPT09IGV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUpIHtcbiAgICAgIGNoaWxkQ2FjaGVOb2RlID0ge1xuICAgICAgICBsYXp5RGF0YTogY2hpbGRDYWNoZU5vZGUubGF6eURhdGEsXG4gICAgICAgIHJzYzogY2hpbGRDYWNoZU5vZGUucnNjLFxuICAgICAgICBwcmVmZXRjaFJzYzogY2hpbGRDYWNoZU5vZGUucHJlZmV0Y2hSc2MsXG4gICAgICAgIGhlYWQ6IGNoaWxkQ2FjaGVOb2RlLmhlYWQsXG4gICAgICAgIHByZWZldGNoSGVhZDogY2hpbGRDYWNoZU5vZGUucHJlZmV0Y2hIZWFkLFxuICAgICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcChjaGlsZENhY2hlTm9kZS5wYXJhbGxlbFJvdXRlcyksXG4gICAgICAgIGxvYWRpbmc6IGNoaWxkQ2FjaGVOb2RlLmxvYWRpbmcsXG4gICAgICB9IGFzIENhY2hlTm9kZVxuICAgICAgY2hpbGRTZWdtZW50TWFwLnNldChjYWNoZUtleSwgY2hpbGRDYWNoZU5vZGUpXG4gICAgfVxuXG4gICAgLy8gTW92ZSBkZWVwZXIgaW50byB0aGUgY2FjaGUgbm9kZXNcbiAgICBuZXdDYWNoZU5vZGUgPSBjaGlsZENhY2hlTm9kZVxuICAgIGV4aXN0aW5nQ2FjaGVOb2RlID0gZXhpc3RpbmdDaGlsZENhY2hlTm9kZVxuICB9XG59XG5cbi8qKlxuICogRmlsbCBjYWNoZSB3aXRoIHJzYyBiYXNlZCBvbiBmbGlnaHREYXRhUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsbENhY2hlV2l0aE5ld1N1YlRyZWVEYXRhKFxuICBuYXZpZ2F0ZWRBdDogbnVtYmVyLFxuICBuZXdDYWNoZTogQ2FjaGVOb2RlLFxuICBleGlzdGluZ0NhY2hlOiBDYWNoZU5vZGUsXG4gIGZsaWdodERhdGE6IE5vcm1hbGl6ZWRGbGlnaHREYXRhLFxuICBwcmVmZXRjaEVudHJ5PzogUHJlZmV0Y2hDYWNoZUVudHJ5XG4pOiB2b2lkIHtcbiAgZmlsbENhY2hlSGVscGVyKFxuICAgIG5hdmlnYXRlZEF0LFxuICAgIG5ld0NhY2hlLFxuICAgIGV4aXN0aW5nQ2FjaGUsXG4gICAgZmxpZ2h0RGF0YSxcbiAgICBwcmVmZXRjaEVudHJ5LFxuICAgIHRydWVcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsbENhY2hlV2l0aE5ld1N1YlRyZWVEYXRhQnV0T25seUxvYWRpbmcoXG4gIG5hdmlnYXRlZEF0OiBudW1iZXIsXG4gIG5ld0NhY2hlOiBDYWNoZU5vZGUsXG4gIGV4aXN0aW5nQ2FjaGU6IENhY2hlTm9kZSxcbiAgZmxpZ2h0RGF0YTogTm9ybWFsaXplZEZsaWdodERhdGEsXG4gIHByZWZldGNoRW50cnk/OiBQcmVmZXRjaENhY2hlRW50cnlcbik6IHZvaWQge1xuICBmaWxsQ2FjaGVIZWxwZXIoXG4gICAgbmF2aWdhdGVkQXQsXG4gICAgbmV3Q2FjaGUsXG4gICAgZXhpc3RpbmdDYWNoZSxcbiAgICBmbGlnaHREYXRhLFxuICAgIHByZWZldGNoRW50cnksXG4gICAgZmFsc2VcbiAgKVxufVxuIl0sIm5hbWVzIjpbImZpbGxDYWNoZVdpdGhOZXdTdWJUcmVlRGF0YSIsImZpbGxDYWNoZVdpdGhOZXdTdWJUcmVlRGF0YUJ1dE9ubHlMb2FkaW5nIiwiZmlsbENhY2hlSGVscGVyIiwibmF2aWdhdGVkQXQiLCJuZXdDYWNoZSIsImV4aXN0aW5nQ2FjaGUiLCJmbGlnaHREYXRhIiwicHJlZmV0Y2hFbnRyeSIsImZpbGxMYXp5SXRlbXMiLCJzZWdtZW50UGF0aCIsInNlZWREYXRhIiwiY2FjaGVOb2RlU2VlZERhdGEiLCJ0cmVlIiwidHJlZVBhdGNoIiwiaGVhZCIsIm5ld0NhY2hlTm9kZSIsImV4aXN0aW5nQ2FjaGVOb2RlIiwiaSIsImxlbmd0aCIsInBhcmFsbGVsUm91dGVLZXkiLCJzZWdtZW50IiwiaXNMYXN0RW50cnkiLCJjYWNoZUtleSIsImNyZWF0ZVJvdXRlckNhY2hlS2V5IiwiZXhpc3RpbmdDaGlsZFNlZ21lbnRNYXAiLCJwYXJhbGxlbFJvdXRlcyIsImdldCIsImNoaWxkU2VnbWVudE1hcCIsIk1hcCIsInNldCIsImV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUiLCJjaGlsZENhY2hlTm9kZSIsImxhenlEYXRhIiwiaW5jb21pbmdTZWdtZW50IiwicnNjIiwibG9hZGluZyIsIlBBR0VfU0VHTUVOVF9LRVkiLCJwcmVmZXRjaFJzYyIsInByZWZldGNoSGVhZCIsImludmFsaWRhdGVDYWNoZUJ5Um91dGVyU3RhdGUiLCJmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fill-cache-with-new-subtree-data.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js":
/*!****************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js ***!
  \****************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"fillLazyItemsTillLeafWithHead\", ({\n    enumerable: true,\n    get: function() {\n        return fillLazyItemsTillLeafWithHead;\n    }\n}));\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer-types */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nfunction fillLazyItemsTillLeafWithHead(navigatedAt, newCache, existingCache, routerState, cacheNodeSeedData, head, prefetchEntry) {\n    const isLastSegment = Object.keys(routerState[1]).length === 0;\n    if (isLastSegment) {\n        newCache.head = head;\n        return;\n    }\n    // Remove segment that we got data for so that it is filled in during rendering of rsc.\n    for(const key in routerState[1]){\n        const parallelRouteState = routerState[1][key];\n        const segmentForParallelRoute = parallelRouteState[0];\n        const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segmentForParallelRoute);\n        // TODO: We should traverse the cacheNodeSeedData tree instead of the router\n        // state tree. Ideally, they would always be the same shape, but because of\n        // the loading.js pattern, cacheNodeSeedData sometimes only represents a\n        // partial tree. That's why this node is sometimes null. Once PPR lands,\n        // loading.js will no longer have special behavior and we can traverse the\n        // data tree instead.\n        //\n        // We should also consider merging the router state tree and the data tree\n        // in the response format, so that we don't have to send the keys twice.\n        // Then the client can convert them into separate representations.\n        const parallelSeedData = cacheNodeSeedData !== null && cacheNodeSeedData[2][key] !== undefined ? cacheNodeSeedData[2][key] : null;\n        if (existingCache) {\n            const existingParallelRoutesCacheNode = existingCache.parallelRoutes.get(key);\n            if (existingParallelRoutesCacheNode) {\n                const hasReusablePrefetch = (prefetchEntry == null ? void 0 : prefetchEntry.kind) === 'auto' && prefetchEntry.status === _routerreducertypes.PrefetchCacheEntryStatus.reusable;\n                let parallelRouteCacheNode = new Map(existingParallelRoutesCacheNode);\n                const existingCacheNode = parallelRouteCacheNode.get(cacheKey);\n                let newCacheNode;\n                if (parallelSeedData !== null) {\n                    // New data was sent from the server.\n                    const seedNode = parallelSeedData[1];\n                    const loading = parallelSeedData[3];\n                    newCacheNode = {\n                        lazyData: null,\n                        rsc: seedNode,\n                        // This is a PPR-only field. When PPR is enabled, we shouldn't hit\n                        // this path during a navigation, but until PPR is fully implemented\n                        // yet it's possible the existing node does have a non-null\n                        // `prefetchRsc`. As an incremental step, we'll just de-opt to the\n                        // old behavior — no PPR value.\n                        prefetchRsc: null,\n                        head: null,\n                        prefetchHead: null,\n                        loading,\n                        parallelRoutes: new Map(existingCacheNode == null ? void 0 : existingCacheNode.parallelRoutes),\n                        navigatedAt\n                    };\n                } else if (hasReusablePrefetch && existingCacheNode) {\n                    // No new data was sent from the server, but the existing cache node\n                    // was prefetched, so we should reuse that.\n                    newCacheNode = {\n                        lazyData: existingCacheNode.lazyData,\n                        rsc: existingCacheNode.rsc,\n                        // This is a PPR-only field. Unlike the previous branch, since we're\n                        // just cloning the existing cache node, we might as well keep the\n                        // PPR value, if it exists.\n                        prefetchRsc: existingCacheNode.prefetchRsc,\n                        head: existingCacheNode.head,\n                        prefetchHead: existingCacheNode.prefetchHead,\n                        parallelRoutes: new Map(existingCacheNode.parallelRoutes),\n                        loading: existingCacheNode.loading\n                    };\n                } else {\n                    // No data available for this node. This will trigger a lazy fetch\n                    // during render.\n                    newCacheNode = {\n                        lazyData: null,\n                        rsc: null,\n                        prefetchRsc: null,\n                        head: null,\n                        prefetchHead: null,\n                        parallelRoutes: new Map(existingCacheNode == null ? void 0 : existingCacheNode.parallelRoutes),\n                        loading: null,\n                        navigatedAt\n                    };\n                }\n                // Overrides the cache key with the new cache node.\n                parallelRouteCacheNode.set(cacheKey, newCacheNode);\n                // Traverse deeper to apply the head / fill lazy items till the head.\n                fillLazyItemsTillLeafWithHead(navigatedAt, newCacheNode, existingCacheNode, parallelRouteState, parallelSeedData ? parallelSeedData : null, head, prefetchEntry);\n                newCache.parallelRoutes.set(key, parallelRouteCacheNode);\n                continue;\n            }\n        }\n        let newCacheNode;\n        if (parallelSeedData !== null) {\n            // New data was sent from the server.\n            const seedNode = parallelSeedData[1];\n            const loading = parallelSeedData[3];\n            newCacheNode = {\n                lazyData: null,\n                rsc: seedNode,\n                prefetchRsc: null,\n                head: null,\n                prefetchHead: null,\n                parallelRoutes: new Map(),\n                loading,\n                navigatedAt\n            };\n        } else {\n            // No data available for this node. This will trigger a lazy fetch\n            // during render.\n            newCacheNode = {\n                lazyData: null,\n                rsc: null,\n                prefetchRsc: null,\n                head: null,\n                prefetchHead: null,\n                parallelRoutes: new Map(),\n                loading: null,\n                navigatedAt\n            };\n        }\n        const existingParallelRoutes = newCache.parallelRoutes.get(key);\n        if (existingParallelRoutes) {\n            existingParallelRoutes.set(cacheKey, newCacheNode);\n        } else {\n            newCache.parallelRoutes.set(key, new Map([\n                [\n                    cacheKey,\n                    newCacheNode\n                ]\n            ]));\n        }\n        fillLazyItemsTillLeafWithHead(navigatedAt, newCacheNode, undefined, parallelRouteState, parallelSeedData, head, prefetchEntry);\n    }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=fill-lazy-items-till-leaf-with-head.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9maWxsLWxhenktaXRlbXMtdGlsbC1sZWFmLXdpdGgtaGVhZC5qcyIsIm1hcHBpbmdzIjoiOzs7O2lFQVdnQkE7OztlQUFBQTs7O2tEQU5xQjtnREFJOUI7QUFFQSxTQUFTQSw4QkFDZEMsV0FBbUIsRUFDbkJDLFFBQW1CLEVBQ25CQyxhQUFvQyxFQUNwQ0MsV0FBOEIsRUFDOUJDLGlCQUEyQyxFQUMzQ0MsSUFBcUIsRUFDckJDLGFBQTZDO0lBRTdDLE1BQU1DLGdCQUFnQkMsT0FBT0MsSUFBSSxDQUFDTixXQUFXLENBQUMsRUFBRSxFQUFFTyxNQUFNLEtBQUs7SUFDN0QsSUFBSUgsZUFBZTtRQUNqQk4sU0FBU0ksSUFBSSxHQUFHQTtRQUNoQjtJQUNGO0lBQ0EsdUZBQXVGO0lBQ3ZGLElBQUssTUFBTU0sT0FBT1IsV0FBVyxDQUFDLEVBQUUsQ0FBRTtRQUNoQyxNQUFNUyxxQkFBcUJULFdBQVcsQ0FBQyxFQUFFLENBQUNRLElBQUk7UUFDOUMsTUFBTUUsMEJBQTBCRCxrQkFBa0IsQ0FBQyxFQUFFO1FBQ3JELE1BQU1FLFdBQVdDLENBQUFBLEdBQUFBLHNCQUFBQSxvQkFBQUEsRUFBcUJGO1FBRXRDLDRFQUE0RTtRQUM1RSwyRUFBMkU7UUFDM0Usd0VBQXdFO1FBQ3hFLHdFQUF3RTtRQUN4RSwwRUFBMEU7UUFDMUUscUJBQXFCO1FBQ3JCLEVBQUU7UUFDRiwwRUFBMEU7UUFDMUUsd0VBQXdFO1FBQ3hFLGtFQUFrRTtRQUNsRSxNQUFNRyxtQkFDSlosc0JBQXNCLFFBQVFBLGlCQUFpQixDQUFDLEVBQUUsQ0FBQ08sSUFBSSxLQUFLTSxZQUN4RGIsaUJBQWlCLENBQUMsRUFBRSxDQUFDTyxJQUFJLEdBQ3pCO1FBQ04sSUFBSVQsZUFBZTtZQUNqQixNQUFNZ0Isa0NBQ0poQixjQUFjaUIsY0FBYyxDQUFDQyxHQUFHLENBQUNUO1lBQ25DLElBQUlPLGlDQUFpQztnQkFDbkMsTUFBTUcsc0JBQ0pmLENBQUFBLGlCQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxjQUFlZ0IsSUFBQUEsTUFBUyxVQUN4QmhCLGNBQWNpQixNQUFNLEtBQUtDLG9CQUFBQSx3QkFBd0IsQ0FBQ0MsUUFBUTtnQkFFNUQsSUFBSUMseUJBQXlCLElBQUlDLElBQUlUO2dCQUNyQyxNQUFNVSxvQkFBb0JGLHVCQUF1Qk4sR0FBRyxDQUFDTjtnQkFDckQsSUFBSWU7Z0JBQ0osSUFBSWIscUJBQXFCLE1BQU07b0JBQzdCLHFDQUFxQztvQkFDckMsTUFBTWMsV0FBV2QsZ0JBQWdCLENBQUMsRUFBRTtvQkFDcEMsTUFBTWUsVUFBVWYsZ0JBQWdCLENBQUMsRUFBRTtvQkFDbkNhLGVBQWU7d0JBQ2JHLFVBQVU7d0JBQ1ZDLEtBQUtIO3dCQUNMLGtFQUFrRTt3QkFDbEUsb0VBQW9FO3dCQUNwRSwyREFBMkQ7d0JBQzNELGtFQUFrRTt3QkFDbEUsK0JBQStCO3dCQUMvQkksYUFBYTt3QkFDYjdCLE1BQU07d0JBQ044QixjQUFjO3dCQUNkSjt3QkFDQVosZ0JBQWdCLElBQUlRLElBQUlDLHFCQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxrQkFBbUJULGNBQWM7d0JBQ3pEbkI7b0JBQ0Y7Z0JBQ0YsT0FBTyxJQUFJcUIsdUJBQXVCTyxtQkFBbUI7b0JBQ25ELG9FQUFvRTtvQkFDcEUsMkNBQTJDO29CQUMzQ0MsZUFBZTt3QkFDYkcsVUFBVUosa0JBQWtCSSxRQUFRO3dCQUNwQ0MsS0FBS0wsa0JBQWtCSyxHQUFHO3dCQUMxQixvRUFBb0U7d0JBQ3BFLGtFQUFrRTt3QkFDbEUsMkJBQTJCO3dCQUMzQkMsYUFBYU4sa0JBQWtCTSxXQUFXO3dCQUMxQzdCLE1BQU11QixrQkFBa0J2QixJQUFJO3dCQUM1QjhCLGNBQWNQLGtCQUFrQk8sWUFBWTt3QkFDNUNoQixnQkFBZ0IsSUFBSVEsSUFBSUMsa0JBQWtCVCxjQUFjO3dCQUN4RFksU0FBU0gsa0JBQWtCRyxPQUFPO29CQUNwQztnQkFDRixPQUFPO29CQUNMLGtFQUFrRTtvQkFDbEUsaUJBQWlCO29CQUNqQkYsZUFBZTt3QkFDYkcsVUFBVTt3QkFDVkMsS0FBSzt3QkFDTEMsYUFBYTt3QkFDYjdCLE1BQU07d0JBQ044QixjQUFjO3dCQUNkaEIsZ0JBQWdCLElBQUlRLElBQUlDLHFCQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxrQkFBbUJULGNBQWM7d0JBQ3pEWSxTQUFTO3dCQUNUL0I7b0JBQ0Y7Z0JBQ0Y7Z0JBRUEsbURBQW1EO2dCQUNuRDBCLHVCQUF1QlUsR0FBRyxDQUFDdEIsVUFBVWU7Z0JBQ3JDLHFFQUFxRTtnQkFDckU5Qiw4QkFDRUMsYUFDQTZCLGNBQ0FELG1CQUNBaEIsb0JBQ0FJLG1CQUFtQkEsbUJBQW1CLE1BQ3RDWCxNQUNBQztnQkFHRkwsU0FBU2tCLGNBQWMsQ0FBQ2lCLEdBQUcsQ0FBQ3pCLEtBQUtlO2dCQUNqQztZQUNGO1FBQ0Y7UUFFQSxJQUFJRztRQUNKLElBQUliLHFCQUFxQixNQUFNO1lBQzdCLHFDQUFxQztZQUNyQyxNQUFNYyxXQUFXZCxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ3BDLE1BQU1lLFVBQVVmLGdCQUFnQixDQUFDLEVBQUU7WUFDbkNhLGVBQWU7Z0JBQ2JHLFVBQVU7Z0JBQ1ZDLEtBQUtIO2dCQUNMSSxhQUFhO2dCQUNiN0IsTUFBTTtnQkFDTjhCLGNBQWM7Z0JBQ2RoQixnQkFBZ0IsSUFBSVE7Z0JBQ3BCSTtnQkFDQS9CO1lBQ0Y7UUFDRixPQUFPO1lBQ0wsa0VBQWtFO1lBQ2xFLGlCQUFpQjtZQUNqQjZCLGVBQWU7Z0JBQ2JHLFVBQVU7Z0JBQ1ZDLEtBQUs7Z0JBQ0xDLGFBQWE7Z0JBQ2I3QixNQUFNO2dCQUNOOEIsY0FBYztnQkFDZGhCLGdCQUFnQixJQUFJUTtnQkFDcEJJLFNBQVM7Z0JBQ1QvQjtZQUNGO1FBQ0Y7UUFFQSxNQUFNcUMseUJBQXlCcEMsU0FBU2tCLGNBQWMsQ0FBQ0MsR0FBRyxDQUFDVDtRQUMzRCxJQUFJMEIsd0JBQXdCO1lBQzFCQSx1QkFBdUJELEdBQUcsQ0FBQ3RCLFVBQVVlO1FBQ3ZDLE9BQU87WUFDTDVCLFNBQVNrQixjQUFjLENBQUNpQixHQUFHLENBQUN6QixLQUFLLElBQUlnQixJQUFJO2dCQUFDO29CQUFDYjtvQkFBVWU7aUJBQWE7YUFBQztRQUNyRTtRQUVBOUIsOEJBQ0VDLGFBQ0E2QixjQUNBWixXQUNBTCxvQkFDQUksa0JBQ0FYLE1BQ0FDO0lBRUo7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2ZpbGwtbGF6eS1pdGVtcy10aWxsLWxlYWYtd2l0aC1oZWFkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2FjaGVOb2RlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgdHlwZSB7XG4gIEZsaWdodFJvdXRlclN0YXRlLFxuICBDYWNoZU5vZGVTZWVkRGF0YSxcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXJDYWNoZUtleSB9IGZyb20gJy4vY3JlYXRlLXJvdXRlci1jYWNoZS1rZXknXG5pbXBvcnQge1xuICBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMsXG4gIHR5cGUgUHJlZmV0Y2hDYWNoZUVudHJ5LFxufSBmcm9tICcuL3JvdXRlci1yZWR1Y2VyLXR5cGVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZmlsbExhenlJdGVtc1RpbGxMZWFmV2l0aEhlYWQoXG4gIG5hdmlnYXRlZEF0OiBudW1iZXIsXG4gIG5ld0NhY2hlOiBDYWNoZU5vZGUsXG4gIGV4aXN0aW5nQ2FjaGU6IENhY2hlTm9kZSB8IHVuZGVmaW5lZCxcbiAgcm91dGVyU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlLFxuICBjYWNoZU5vZGVTZWVkRGF0YTogQ2FjaGVOb2RlU2VlZERhdGEgfCBudWxsLFxuICBoZWFkOiBSZWFjdC5SZWFjdE5vZGUsXG4gIHByZWZldGNoRW50cnk6IFByZWZldGNoQ2FjaGVFbnRyeSB8IHVuZGVmaW5lZFxuKTogdm9pZCB7XG4gIGNvbnN0IGlzTGFzdFNlZ21lbnQgPSBPYmplY3Qua2V5cyhyb3V0ZXJTdGF0ZVsxXSkubGVuZ3RoID09PSAwXG4gIGlmIChpc0xhc3RTZWdtZW50KSB7XG4gICAgbmV3Q2FjaGUuaGVhZCA9IGhlYWRcbiAgICByZXR1cm5cbiAgfVxuICAvLyBSZW1vdmUgc2VnbWVudCB0aGF0IHdlIGdvdCBkYXRhIGZvciBzbyB0aGF0IGl0IGlzIGZpbGxlZCBpbiBkdXJpbmcgcmVuZGVyaW5nIG9mIHJzYy5cbiAgZm9yIChjb25zdCBrZXkgaW4gcm91dGVyU3RhdGVbMV0pIHtcbiAgICBjb25zdCBwYXJhbGxlbFJvdXRlU3RhdGUgPSByb3V0ZXJTdGF0ZVsxXVtrZXldXG4gICAgY29uc3Qgc2VnbWVudEZvclBhcmFsbGVsUm91dGUgPSBwYXJhbGxlbFJvdXRlU3RhdGVbMF1cbiAgICBjb25zdCBjYWNoZUtleSA9IGNyZWF0ZVJvdXRlckNhY2hlS2V5KHNlZ21lbnRGb3JQYXJhbGxlbFJvdXRlKVxuXG4gICAgLy8gVE9ETzogV2Ugc2hvdWxkIHRyYXZlcnNlIHRoZSBjYWNoZU5vZGVTZWVkRGF0YSB0cmVlIGluc3RlYWQgb2YgdGhlIHJvdXRlclxuICAgIC8vIHN0YXRlIHRyZWUuIElkZWFsbHksIHRoZXkgd291bGQgYWx3YXlzIGJlIHRoZSBzYW1lIHNoYXBlLCBidXQgYmVjYXVzZSBvZlxuICAgIC8vIHRoZSBsb2FkaW5nLmpzIHBhdHRlcm4sIGNhY2hlTm9kZVNlZWREYXRhIHNvbWV0aW1lcyBvbmx5IHJlcHJlc2VudHMgYVxuICAgIC8vIHBhcnRpYWwgdHJlZS4gVGhhdCdzIHdoeSB0aGlzIG5vZGUgaXMgc29tZXRpbWVzIG51bGwuIE9uY2UgUFBSIGxhbmRzLFxuICAgIC8vIGxvYWRpbmcuanMgd2lsbCBubyBsb25nZXIgaGF2ZSBzcGVjaWFsIGJlaGF2aW9yIGFuZCB3ZSBjYW4gdHJhdmVyc2UgdGhlXG4gICAgLy8gZGF0YSB0cmVlIGluc3RlYWQuXG4gICAgLy9cbiAgICAvLyBXZSBzaG91bGQgYWxzbyBjb25zaWRlciBtZXJnaW5nIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSBhbmQgdGhlIGRhdGEgdHJlZVxuICAgIC8vIGluIHRoZSByZXNwb25zZSBmb3JtYXQsIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBzZW5kIHRoZSBrZXlzIHR3aWNlLlxuICAgIC8vIFRoZW4gdGhlIGNsaWVudCBjYW4gY29udmVydCB0aGVtIGludG8gc2VwYXJhdGUgcmVwcmVzZW50YXRpb25zLlxuICAgIGNvbnN0IHBhcmFsbGVsU2VlZERhdGEgPVxuICAgICAgY2FjaGVOb2RlU2VlZERhdGEgIT09IG51bGwgJiYgY2FjaGVOb2RlU2VlZERhdGFbMl1ba2V5XSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gY2FjaGVOb2RlU2VlZERhdGFbMl1ba2V5XVxuICAgICAgICA6IG51bGxcbiAgICBpZiAoZXhpc3RpbmdDYWNoZSkge1xuICAgICAgY29uc3QgZXhpc3RpbmdQYXJhbGxlbFJvdXRlc0NhY2hlTm9kZSA9XG4gICAgICAgIGV4aXN0aW5nQ2FjaGUucGFyYWxsZWxSb3V0ZXMuZ2V0KGtleSlcbiAgICAgIGlmIChleGlzdGluZ1BhcmFsbGVsUm91dGVzQ2FjaGVOb2RlKSB7XG4gICAgICAgIGNvbnN0IGhhc1JldXNhYmxlUHJlZmV0Y2ggPVxuICAgICAgICAgIHByZWZldGNoRW50cnk/LmtpbmQgPT09ICdhdXRvJyAmJlxuICAgICAgICAgIHByZWZldGNoRW50cnkuc3RhdHVzID09PSBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMucmV1c2FibGVcblxuICAgICAgICBsZXQgcGFyYWxsZWxSb3V0ZUNhY2hlTm9kZSA9IG5ldyBNYXAoZXhpc3RpbmdQYXJhbGxlbFJvdXRlc0NhY2hlTm9kZSlcbiAgICAgICAgY29uc3QgZXhpc3RpbmdDYWNoZU5vZGUgPSBwYXJhbGxlbFJvdXRlQ2FjaGVOb2RlLmdldChjYWNoZUtleSlcbiAgICAgICAgbGV0IG5ld0NhY2hlTm9kZTogQ2FjaGVOb2RlXG4gICAgICAgIGlmIChwYXJhbGxlbFNlZWREYXRhICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gTmV3IGRhdGEgd2FzIHNlbnQgZnJvbSB0aGUgc2VydmVyLlxuICAgICAgICAgIGNvbnN0IHNlZWROb2RlID0gcGFyYWxsZWxTZWVkRGF0YVsxXVxuICAgICAgICAgIGNvbnN0IGxvYWRpbmcgPSBwYXJhbGxlbFNlZWREYXRhWzNdXG4gICAgICAgICAgbmV3Q2FjaGVOb2RlID0ge1xuICAgICAgICAgICAgbGF6eURhdGE6IG51bGwsXG4gICAgICAgICAgICByc2M6IHNlZWROb2RlLFxuICAgICAgICAgICAgLy8gVGhpcyBpcyBhIFBQUi1vbmx5IGZpZWxkLiBXaGVuIFBQUiBpcyBlbmFibGVkLCB3ZSBzaG91bGRuJ3QgaGl0XG4gICAgICAgICAgICAvLyB0aGlzIHBhdGggZHVyaW5nIGEgbmF2aWdhdGlvbiwgYnV0IHVudGlsIFBQUiBpcyBmdWxseSBpbXBsZW1lbnRlZFxuICAgICAgICAgICAgLy8geWV0IGl0J3MgcG9zc2libGUgdGhlIGV4aXN0aW5nIG5vZGUgZG9lcyBoYXZlIGEgbm9uLW51bGxcbiAgICAgICAgICAgIC8vIGBwcmVmZXRjaFJzY2AuIEFzIGFuIGluY3JlbWVudGFsIHN0ZXAsIHdlJ2xsIGp1c3QgZGUtb3B0IHRvIHRoZVxuICAgICAgICAgICAgLy8gb2xkIGJlaGF2aW9yIOKAlCBubyBQUFIgdmFsdWUuXG4gICAgICAgICAgICBwcmVmZXRjaFJzYzogbnVsbCxcbiAgICAgICAgICAgIGhlYWQ6IG51bGwsXG4gICAgICAgICAgICBwcmVmZXRjaEhlYWQ6IG51bGwsXG4gICAgICAgICAgICBsb2FkaW5nLFxuICAgICAgICAgICAgcGFyYWxsZWxSb3V0ZXM6IG5ldyBNYXAoZXhpc3RpbmdDYWNoZU5vZGU/LnBhcmFsbGVsUm91dGVzKSxcbiAgICAgICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChoYXNSZXVzYWJsZVByZWZldGNoICYmIGV4aXN0aW5nQ2FjaGVOb2RlKSB7XG4gICAgICAgICAgLy8gTm8gbmV3IGRhdGEgd2FzIHNlbnQgZnJvbSB0aGUgc2VydmVyLCBidXQgdGhlIGV4aXN0aW5nIGNhY2hlIG5vZGVcbiAgICAgICAgICAvLyB3YXMgcHJlZmV0Y2hlZCwgc28gd2Ugc2hvdWxkIHJldXNlIHRoYXQuXG4gICAgICAgICAgbmV3Q2FjaGVOb2RlID0ge1xuICAgICAgICAgICAgbGF6eURhdGE6IGV4aXN0aW5nQ2FjaGVOb2RlLmxhenlEYXRhLFxuICAgICAgICAgICAgcnNjOiBleGlzdGluZ0NhY2hlTm9kZS5yc2MsXG4gICAgICAgICAgICAvLyBUaGlzIGlzIGEgUFBSLW9ubHkgZmllbGQuIFVubGlrZSB0aGUgcHJldmlvdXMgYnJhbmNoLCBzaW5jZSB3ZSdyZVxuICAgICAgICAgICAgLy8ganVzdCBjbG9uaW5nIHRoZSBleGlzdGluZyBjYWNoZSBub2RlLCB3ZSBtaWdodCBhcyB3ZWxsIGtlZXAgdGhlXG4gICAgICAgICAgICAvLyBQUFIgdmFsdWUsIGlmIGl0IGV4aXN0cy5cbiAgICAgICAgICAgIHByZWZldGNoUnNjOiBleGlzdGluZ0NhY2hlTm9kZS5wcmVmZXRjaFJzYyxcbiAgICAgICAgICAgIGhlYWQ6IGV4aXN0aW5nQ2FjaGVOb2RlLmhlYWQsXG4gICAgICAgICAgICBwcmVmZXRjaEhlYWQ6IGV4aXN0aW5nQ2FjaGVOb2RlLnByZWZldGNoSGVhZCxcbiAgICAgICAgICAgIHBhcmFsbGVsUm91dGVzOiBuZXcgTWFwKGV4aXN0aW5nQ2FjaGVOb2RlLnBhcmFsbGVsUm91dGVzKSxcbiAgICAgICAgICAgIGxvYWRpbmc6IGV4aXN0aW5nQ2FjaGVOb2RlLmxvYWRpbmcsXG4gICAgICAgICAgfSBhcyBDYWNoZU5vZGVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBObyBkYXRhIGF2YWlsYWJsZSBmb3IgdGhpcyBub2RlLiBUaGlzIHdpbGwgdHJpZ2dlciBhIGxhenkgZmV0Y2hcbiAgICAgICAgICAvLyBkdXJpbmcgcmVuZGVyLlxuICAgICAgICAgIG5ld0NhY2hlTm9kZSA9IHtcbiAgICAgICAgICAgIGxhenlEYXRhOiBudWxsLFxuICAgICAgICAgICAgcnNjOiBudWxsLFxuICAgICAgICAgICAgcHJlZmV0Y2hSc2M6IG51bGwsXG4gICAgICAgICAgICBoZWFkOiBudWxsLFxuICAgICAgICAgICAgcHJlZmV0Y2hIZWFkOiBudWxsLFxuICAgICAgICAgICAgcGFyYWxsZWxSb3V0ZXM6IG5ldyBNYXAoZXhpc3RpbmdDYWNoZU5vZGU/LnBhcmFsbGVsUm91dGVzKSxcbiAgICAgICAgICAgIGxvYWRpbmc6IG51bGwsXG4gICAgICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPdmVycmlkZXMgdGhlIGNhY2hlIGtleSB3aXRoIHRoZSBuZXcgY2FjaGUgbm9kZS5cbiAgICAgICAgcGFyYWxsZWxSb3V0ZUNhY2hlTm9kZS5zZXQoY2FjaGVLZXksIG5ld0NhY2hlTm9kZSlcbiAgICAgICAgLy8gVHJhdmVyc2UgZGVlcGVyIHRvIGFwcGx5IHRoZSBoZWFkIC8gZmlsbCBsYXp5IGl0ZW1zIHRpbGwgdGhlIGhlYWQuXG4gICAgICAgIGZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkKFxuICAgICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgICAgIG5ld0NhY2hlTm9kZSxcbiAgICAgICAgICBleGlzdGluZ0NhY2hlTm9kZSxcbiAgICAgICAgICBwYXJhbGxlbFJvdXRlU3RhdGUsXG4gICAgICAgICAgcGFyYWxsZWxTZWVkRGF0YSA/IHBhcmFsbGVsU2VlZERhdGEgOiBudWxsLFxuICAgICAgICAgIGhlYWQsXG4gICAgICAgICAgcHJlZmV0Y2hFbnRyeVxuICAgICAgICApXG5cbiAgICAgICAgbmV3Q2FjaGUucGFyYWxsZWxSb3V0ZXMuc2V0KGtleSwgcGFyYWxsZWxSb3V0ZUNhY2hlTm9kZSlcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbmV3Q2FjaGVOb2RlOiBDYWNoZU5vZGVcbiAgICBpZiAocGFyYWxsZWxTZWVkRGF0YSAhPT0gbnVsbCkge1xuICAgICAgLy8gTmV3IGRhdGEgd2FzIHNlbnQgZnJvbSB0aGUgc2VydmVyLlxuICAgICAgY29uc3Qgc2VlZE5vZGUgPSBwYXJhbGxlbFNlZWREYXRhWzFdXG4gICAgICBjb25zdCBsb2FkaW5nID0gcGFyYWxsZWxTZWVkRGF0YVszXVxuICAgICAgbmV3Q2FjaGVOb2RlID0ge1xuICAgICAgICBsYXp5RGF0YTogbnVsbCxcbiAgICAgICAgcnNjOiBzZWVkTm9kZSxcbiAgICAgICAgcHJlZmV0Y2hSc2M6IG51bGwsXG4gICAgICAgIGhlYWQ6IG51bGwsXG4gICAgICAgIHByZWZldGNoSGVhZDogbnVsbCxcbiAgICAgICAgcGFyYWxsZWxSb3V0ZXM6IG5ldyBNYXAoKSxcbiAgICAgICAgbG9hZGluZyxcbiAgICAgICAgbmF2aWdhdGVkQXQsXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGRhdGEgYXZhaWxhYmxlIGZvciB0aGlzIG5vZGUuIFRoaXMgd2lsbCB0cmlnZ2VyIGEgbGF6eSBmZXRjaFxuICAgICAgLy8gZHVyaW5nIHJlbmRlci5cbiAgICAgIG5ld0NhY2hlTm9kZSA9IHtcbiAgICAgICAgbGF6eURhdGE6IG51bGwsXG4gICAgICAgIHJzYzogbnVsbCxcbiAgICAgICAgcHJlZmV0Y2hSc2M6IG51bGwsXG4gICAgICAgIGhlYWQ6IG51bGwsXG4gICAgICAgIHByZWZldGNoSGVhZDogbnVsbCxcbiAgICAgICAgcGFyYWxsZWxSb3V0ZXM6IG5ldyBNYXAoKSxcbiAgICAgICAgbG9hZGluZzogbnVsbCxcbiAgICAgICAgbmF2aWdhdGVkQXQsXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdQYXJhbGxlbFJvdXRlcyA9IG5ld0NhY2hlLnBhcmFsbGVsUm91dGVzLmdldChrZXkpXG4gICAgaWYgKGV4aXN0aW5nUGFyYWxsZWxSb3V0ZXMpIHtcbiAgICAgIGV4aXN0aW5nUGFyYWxsZWxSb3V0ZXMuc2V0KGNhY2hlS2V5LCBuZXdDYWNoZU5vZGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0NhY2hlLnBhcmFsbGVsUm91dGVzLnNldChrZXksIG5ldyBNYXAoW1tjYWNoZUtleSwgbmV3Q2FjaGVOb2RlXV0pKVxuICAgIH1cblxuICAgIGZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkKFxuICAgICAgbmF2aWdhdGVkQXQsXG4gICAgICBuZXdDYWNoZU5vZGUsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBwYXJhbGxlbFJvdXRlU3RhdGUsXG4gICAgICBwYXJhbGxlbFNlZWREYXRhLFxuICAgICAgaGVhZCxcbiAgICAgIHByZWZldGNoRW50cnlcbiAgICApXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCIsIm5hdmlnYXRlZEF0IiwibmV3Q2FjaGUiLCJleGlzdGluZ0NhY2hlIiwicm91dGVyU3RhdGUiLCJjYWNoZU5vZGVTZWVkRGF0YSIsImhlYWQiLCJwcmVmZXRjaEVudHJ5IiwiaXNMYXN0U2VnbWVudCIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJrZXkiLCJwYXJhbGxlbFJvdXRlU3RhdGUiLCJzZWdtZW50Rm9yUGFyYWxsZWxSb3V0ZSIsImNhY2hlS2V5IiwiY3JlYXRlUm91dGVyQ2FjaGVLZXkiLCJwYXJhbGxlbFNlZWREYXRhIiwidW5kZWZpbmVkIiwiZXhpc3RpbmdQYXJhbGxlbFJvdXRlc0NhY2hlTm9kZSIsInBhcmFsbGVsUm91dGVzIiwiZ2V0IiwiaGFzUmV1c2FibGVQcmVmZXRjaCIsImtpbmQiLCJzdGF0dXMiLCJQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMiLCJyZXVzYWJsZSIsInBhcmFsbGVsUm91dGVDYWNoZU5vZGUiLCJNYXAiLCJleGlzdGluZ0NhY2hlTm9kZSIsIm5ld0NhY2hlTm9kZSIsInNlZWROb2RlIiwibG9hZGluZyIsImxhenlEYXRhIiwicnNjIiwicHJlZmV0Y2hSc2MiLCJwcmVmZXRjaEhlYWQiLCJzZXQiLCJleGlzdGluZ1BhcmFsbGVsUm91dGVzIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/handle-mutable.js":
/*!*******************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/handle-mutable.js ***!
  \*******************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"handleMutable\", ({\n    enumerable: true,\n    get: function() {\n        return handleMutable;\n    }\n}));\nconst _computechangedpath = __webpack_require__(/*! ./compute-changed-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\");\nfunction isNotUndefined(value) {\n    return typeof value !== 'undefined';\n}\nfunction handleMutable(state, mutable) {\n    var _mutable_shouldScroll;\n    // shouldScroll is true by default, can override to false.\n    const shouldScroll = (_mutable_shouldScroll = mutable.shouldScroll) != null ? _mutable_shouldScroll : true;\n    let nextUrl = state.nextUrl;\n    if (isNotUndefined(mutable.patchedTree)) {\n        // If we received a patched tree, we need to compute the changed path.\n        const changedPath = (0, _computechangedpath.computeChangedPath)(state.tree, mutable.patchedTree);\n        if (changedPath) {\n            // If the tree changed, we need to update the nextUrl\n            nextUrl = changedPath;\n        } else if (!nextUrl) {\n            // if the tree ends up being the same (ie, no changed path), and we don't have a nextUrl, then we should use the canonicalUrl\n            nextUrl = state.canonicalUrl;\n        }\n    // otherwise this will be a no-op and continue to use the existing nextUrl\n    }\n    var _mutable_scrollableSegments;\n    return {\n        // Set href.\n        canonicalUrl: isNotUndefined(mutable.canonicalUrl) ? mutable.canonicalUrl === state.canonicalUrl ? state.canonicalUrl : mutable.canonicalUrl : state.canonicalUrl,\n        pushRef: {\n            pendingPush: isNotUndefined(mutable.pendingPush) ? mutable.pendingPush : state.pushRef.pendingPush,\n            mpaNavigation: isNotUndefined(mutable.mpaNavigation) ? mutable.mpaNavigation : state.pushRef.mpaNavigation,\n            preserveCustomHistoryState: isNotUndefined(mutable.preserveCustomHistoryState) ? mutable.preserveCustomHistoryState : state.pushRef.preserveCustomHistoryState\n        },\n        // All navigation requires scroll and focus management to trigger.\n        focusAndScrollRef: {\n            apply: shouldScroll ? isNotUndefined(mutable == null ? void 0 : mutable.scrollableSegments) ? true : state.focusAndScrollRef.apply : false,\n            onlyHashChange: mutable.onlyHashChange || false,\n            hashFragment: shouldScroll ? mutable.hashFragment && mutable.hashFragment !== '' ? decodeURIComponent(mutable.hashFragment.slice(1)) : state.focusAndScrollRef.hashFragment : null,\n            segmentPaths: shouldScroll ? (_mutable_scrollableSegments = mutable == null ? void 0 : mutable.scrollableSegments) != null ? _mutable_scrollableSegments : state.focusAndScrollRef.segmentPaths : []\n        },\n        // Apply cache.\n        cache: mutable.cache ? mutable.cache : state.cache,\n        prefetchCache: mutable.prefetchCache ? mutable.prefetchCache : state.prefetchCache,\n        // Apply patched router state.\n        tree: isNotUndefined(mutable.patchedTree) ? mutable.patchedTree : state.tree,\n        nextUrl\n    };\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=handle-mutable.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9oYW5kbGUtbXV0YWJsZS5qcyIsIm1hcHBpbmdzIjoiOzs7O2lEQVdnQkE7OztlQUFBQTs7O2dEQVhtQjtBQU9uQyxTQUFTQyxlQUFrQkMsS0FBUTtJQUNqQyxPQUFPLE9BQU9BLFVBQVU7QUFDMUI7QUFFTyxTQUFTRixjQUNkRyxLQUEyQixFQUMzQkMsT0FBZ0I7UUFHS0E7SUFEckIsMERBQTBEO0lBQzFELE1BQU1DLGVBQWVELENBQUFBLHdCQUFBQSxRQUFRQyxZQUFBQSxLQUFZLE9BQXBCRCx3QkFBd0I7SUFFN0MsSUFBSUUsVUFBVUgsTUFBTUcsT0FBTztJQUUzQixJQUFJTCxlQUFlRyxRQUFRRyxXQUFXLEdBQUc7UUFDdkMsc0VBQXNFO1FBQ3RFLE1BQU1DLGNBQWNDLENBQUFBLEdBQUFBLG9CQUFBQSxrQkFBQUEsRUFBbUJOLE1BQU1PLElBQUksRUFBRU4sUUFBUUcsV0FBVztRQUN0RSxJQUFJQyxhQUFhO1lBQ2YscURBQXFEO1lBQ3JERixVQUFVRTtRQUNaLE9BQU8sSUFBSSxDQUFDRixTQUFTO1lBQ25CLDZIQUE2SDtZQUM3SEEsVUFBVUgsTUFBTVEsWUFBWTtRQUM5QjtJQUNBLDBFQUEwRTtJQUM1RTtRQXlDUVA7SUF2Q1IsT0FBTztRQUNMLFlBQVk7UUFDWk8sY0FBY1YsZUFBZUcsUUFBUU8sWUFBWSxJQUM3Q1AsUUFBUU8sWUFBWSxLQUFLUixNQUFNUSxZQUFZLEdBQ3pDUixNQUFNUSxZQUFZLEdBQ2xCUCxRQUFRTyxZQUFZLEdBQ3RCUixNQUFNUSxZQUFZO1FBQ3RCQyxTQUFTO1lBQ1BDLGFBQWFaLGVBQWVHLFFBQVFTLFdBQVcsSUFDM0NULFFBQVFTLFdBQVcsR0FDbkJWLE1BQU1TLE9BQU8sQ0FBQ0MsV0FBVztZQUM3QkMsZUFBZWIsZUFBZUcsUUFBUVUsYUFBYSxJQUMvQ1YsUUFBUVUsYUFBYSxHQUNyQlgsTUFBTVMsT0FBTyxDQUFDRSxhQUFhO1lBQy9CQyw0QkFBNEJkLGVBQzFCRyxRQUFRVywwQkFBMEIsSUFFaENYLFFBQVFXLDBCQUEwQixHQUNsQ1osTUFBTVMsT0FBTyxDQUFDRywwQkFBMEI7UUFDOUM7UUFDQSxrRUFBa0U7UUFDbEVDLG1CQUFtQjtZQUNqQkMsT0FBT1osZUFDSEosZUFBZUcsV0FBQUEsT0FBQUEsS0FBQUEsSUFBQUEsUUFBU2Msa0JBQWtCLElBQ3hDLE9BQ0FmLE1BQU1hLGlCQUFpQixDQUFDQyxLQUFLLEdBRS9CO1lBQ0pFLGdCQUFnQmYsUUFBUWUsY0FBYyxJQUFJO1lBQzFDQyxjQUFjZixlQUVWLFFBQ1FlLFlBQVksSUFBSWhCLFFBQVFnQixJQURJLFFBQ1EsS0FBSyxLQUUvQ0MsbUJBQW1CakIsUUFBUWdCLFlBQVksQ0FBQ0UsS0FBSyxDQUFDLE1BQzlDbkIsTUFBTWEsaUJBQWlCLENBQUNJLFlBQVksR0FFdEM7WUFDSkcsY0FBY2xCLGVBQ1ZELENBQUFBLDhCQUFBQSxXQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxRQUFTYyxrQkFBQUEsS0FBa0IsT0FBM0JkLDhCQUErQkQsTUFBTWEsaUJBQWlCLENBQUNPLFlBQVksR0FFbkUsRUFBRTtRQUNSO1FBQ0EsZUFBZTtRQUNmQyxPQUFPcEIsUUFBUW9CLEtBQUssR0FBR3BCLFFBQVFvQixLQUFLLEdBQUdyQixNQUFNcUIsS0FBSztRQUNsREMsZUFBZXJCLFFBQVFxQixhQUFhLEdBQ2hDckIsUUFBUXFCLGFBQWEsR0FDckJ0QixNQUFNc0IsYUFBYTtRQUN2Qiw4QkFBOEI7UUFDOUJmLE1BQU1ULGVBQWVHLFFBQVFHLFdBQVcsSUFDcENILFFBQVFHLFdBQVcsR0FDbkJKLE1BQU1PLElBQUk7UUFDZEo7SUFDRjtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvaGFuZGxlLW11dGFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZUNoYW5nZWRQYXRoIH0gZnJvbSAnLi9jb21wdXRlLWNoYW5nZWQtcGF0aCdcbmltcG9ydCB0eXBlIHtcbiAgTXV0YWJsZSxcbiAgUmVhZG9ubHlSZWR1Y2VyU3RhdGUsXG4gIFJlZHVjZXJTdGF0ZSxcbn0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci10eXBlcydcblxuZnVuY3Rpb24gaXNOb3RVbmRlZmluZWQ8VD4odmFsdWU6IFQpOiB2YWx1ZSBpcyBFeGNsdWRlPFQsIHVuZGVmaW5lZD4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlTXV0YWJsZShcbiAgc3RhdGU6IFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBtdXRhYmxlOiBNdXRhYmxlXG4pOiBSZWR1Y2VyU3RhdGUge1xuICAvLyBzaG91bGRTY3JvbGwgaXMgdHJ1ZSBieSBkZWZhdWx0LCBjYW4gb3ZlcnJpZGUgdG8gZmFsc2UuXG4gIGNvbnN0IHNob3VsZFNjcm9sbCA9IG11dGFibGUuc2hvdWxkU2Nyb2xsID8/IHRydWVcblxuICBsZXQgbmV4dFVybCA9IHN0YXRlLm5leHRVcmxcblxuICBpZiAoaXNOb3RVbmRlZmluZWQobXV0YWJsZS5wYXRjaGVkVHJlZSkpIHtcbiAgICAvLyBJZiB3ZSByZWNlaXZlZCBhIHBhdGNoZWQgdHJlZSwgd2UgbmVlZCB0byBjb21wdXRlIHRoZSBjaGFuZ2VkIHBhdGguXG4gICAgY29uc3QgY2hhbmdlZFBhdGggPSBjb21wdXRlQ2hhbmdlZFBhdGgoc3RhdGUudHJlZSwgbXV0YWJsZS5wYXRjaGVkVHJlZSlcbiAgICBpZiAoY2hhbmdlZFBhdGgpIHtcbiAgICAgIC8vIElmIHRoZSB0cmVlIGNoYW5nZWQsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBuZXh0VXJsXG4gICAgICBuZXh0VXJsID0gY2hhbmdlZFBhdGhcbiAgICB9IGVsc2UgaWYgKCFuZXh0VXJsKSB7XG4gICAgICAvLyBpZiB0aGUgdHJlZSBlbmRzIHVwIGJlaW5nIHRoZSBzYW1lIChpZSwgbm8gY2hhbmdlZCBwYXRoKSwgYW5kIHdlIGRvbid0IGhhdmUgYSBuZXh0VXJsLCB0aGVuIHdlIHNob3VsZCB1c2UgdGhlIGNhbm9uaWNhbFVybFxuICAgICAgbmV4dFVybCA9IHN0YXRlLmNhbm9uaWNhbFVybFxuICAgIH1cbiAgICAvLyBvdGhlcndpc2UgdGhpcyB3aWxsIGJlIGEgbm8tb3AgYW5kIGNvbnRpbnVlIHRvIHVzZSB0aGUgZXhpc3RpbmcgbmV4dFVybFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBTZXQgaHJlZi5cbiAgICBjYW5vbmljYWxVcmw6IGlzTm90VW5kZWZpbmVkKG11dGFibGUuY2Fub25pY2FsVXJsKVxuICAgICAgPyBtdXRhYmxlLmNhbm9uaWNhbFVybCA9PT0gc3RhdGUuY2Fub25pY2FsVXJsXG4gICAgICAgID8gc3RhdGUuY2Fub25pY2FsVXJsXG4gICAgICAgIDogbXV0YWJsZS5jYW5vbmljYWxVcmxcbiAgICAgIDogc3RhdGUuY2Fub25pY2FsVXJsLFxuICAgIHB1c2hSZWY6IHtcbiAgICAgIHBlbmRpbmdQdXNoOiBpc05vdFVuZGVmaW5lZChtdXRhYmxlLnBlbmRpbmdQdXNoKVxuICAgICAgICA/IG11dGFibGUucGVuZGluZ1B1c2hcbiAgICAgICAgOiBzdGF0ZS5wdXNoUmVmLnBlbmRpbmdQdXNoLFxuICAgICAgbXBhTmF2aWdhdGlvbjogaXNOb3RVbmRlZmluZWQobXV0YWJsZS5tcGFOYXZpZ2F0aW9uKVxuICAgICAgICA/IG11dGFibGUubXBhTmF2aWdhdGlvblxuICAgICAgICA6IHN0YXRlLnB1c2hSZWYubXBhTmF2aWdhdGlvbixcbiAgICAgIHByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlOiBpc05vdFVuZGVmaW5lZChcbiAgICAgICAgbXV0YWJsZS5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZVxuICAgICAgKVxuICAgICAgICA/IG11dGFibGUucHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGVcbiAgICAgICAgOiBzdGF0ZS5wdXNoUmVmLnByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlLFxuICAgIH0sXG4gICAgLy8gQWxsIG5hdmlnYXRpb24gcmVxdWlyZXMgc2Nyb2xsIGFuZCBmb2N1cyBtYW5hZ2VtZW50IHRvIHRyaWdnZXIuXG4gICAgZm9jdXNBbmRTY3JvbGxSZWY6IHtcbiAgICAgIGFwcGx5OiBzaG91bGRTY3JvbGxcbiAgICAgICAgPyBpc05vdFVuZGVmaW5lZChtdXRhYmxlPy5zY3JvbGxhYmxlU2VnbWVudHMpXG4gICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgOiBzdGF0ZS5mb2N1c0FuZFNjcm9sbFJlZi5hcHBseVxuICAgICAgICA6IC8vIElmIHNob3VsZFNjcm9sbCBpcyBmYWxzZSB0aGVuIHdlIHNob3VsZCBub3QgYXBwbHkgc2Nyb2xsIGFuZCBmb2N1cyBtYW5hZ2VtZW50LlxuICAgICAgICAgIGZhbHNlLFxuICAgICAgb25seUhhc2hDaGFuZ2U6IG11dGFibGUub25seUhhc2hDaGFuZ2UgfHwgZmFsc2UsXG4gICAgICBoYXNoRnJhZ21lbnQ6IHNob3VsZFNjcm9sbFxuICAgICAgICA/IC8vIEVtcHR5IGhhc2ggc2hvdWxkIHRyaWdnZXIgZGVmYXVsdCBiZWhhdmlvciBvZiBzY3JvbGxpbmcgbGF5b3V0IGludG8gdmlldy5cbiAgICAgICAgICAvLyAjdG9wIGlzIGhhbmRsZWQgaW4gbGF5b3V0LXJvdXRlci5cbiAgICAgICAgICBtdXRhYmxlLmhhc2hGcmFnbWVudCAmJiBtdXRhYmxlLmhhc2hGcmFnbWVudCAhPT0gJydcbiAgICAgICAgICA/IC8vIFJlbW92ZSBsZWFkaW5nICMgYW5kIGRlY29kZSBoYXNoIHRvIG1ha2Ugbm9uLWxhdGluIGhhc2hlcyB3b3JrLlxuICAgICAgICAgICAgZGVjb2RlVVJJQ29tcG9uZW50KG11dGFibGUuaGFzaEZyYWdtZW50LnNsaWNlKDEpKVxuICAgICAgICAgIDogc3RhdGUuZm9jdXNBbmRTY3JvbGxSZWYuaGFzaEZyYWdtZW50XG4gICAgICAgIDogLy8gSWYgc2hvdWxkU2Nyb2xsIGlzIGZhbHNlIHRoZW4gd2Ugc2hvdWxkIG5vdCBhcHBseSBzY3JvbGwgYW5kIGZvY3VzIG1hbmFnZW1lbnQuXG4gICAgICAgICAgbnVsbCxcbiAgICAgIHNlZ21lbnRQYXRoczogc2hvdWxkU2Nyb2xsXG4gICAgICAgID8gbXV0YWJsZT8uc2Nyb2xsYWJsZVNlZ21lbnRzID8/IHN0YXRlLmZvY3VzQW5kU2Nyb2xsUmVmLnNlZ21lbnRQYXRoc1xuICAgICAgICA6IC8vIElmIHNob3VsZFNjcm9sbCBpcyBmYWxzZSB0aGVuIHdlIHNob3VsZCBub3QgYXBwbHkgc2Nyb2xsIGFuZCBmb2N1cyBtYW5hZ2VtZW50LlxuICAgICAgICAgIFtdLFxuICAgIH0sXG4gICAgLy8gQXBwbHkgY2FjaGUuXG4gICAgY2FjaGU6IG11dGFibGUuY2FjaGUgPyBtdXRhYmxlLmNhY2hlIDogc3RhdGUuY2FjaGUsXG4gICAgcHJlZmV0Y2hDYWNoZTogbXV0YWJsZS5wcmVmZXRjaENhY2hlXG4gICAgICA/IG11dGFibGUucHJlZmV0Y2hDYWNoZVxuICAgICAgOiBzdGF0ZS5wcmVmZXRjaENhY2hlLFxuICAgIC8vIEFwcGx5IHBhdGNoZWQgcm91dGVyIHN0YXRlLlxuICAgIHRyZWU6IGlzTm90VW5kZWZpbmVkKG11dGFibGUucGF0Y2hlZFRyZWUpXG4gICAgICA/IG11dGFibGUucGF0Y2hlZFRyZWVcbiAgICAgIDogc3RhdGUudHJlZSxcbiAgICBuZXh0VXJsLFxuICB9XG59XG4iXSwibmFtZXMiOlsiaGFuZGxlTXV0YWJsZSIsImlzTm90VW5kZWZpbmVkIiwidmFsdWUiLCJzdGF0ZSIsIm11dGFibGUiLCJzaG91bGRTY3JvbGwiLCJuZXh0VXJsIiwicGF0Y2hlZFRyZWUiLCJjaGFuZ2VkUGF0aCIsImNvbXB1dGVDaGFuZ2VkUGF0aCIsInRyZWUiLCJjYW5vbmljYWxVcmwiLCJwdXNoUmVmIiwicGVuZGluZ1B1c2giLCJtcGFOYXZpZ2F0aW9uIiwicHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUiLCJmb2N1c0FuZFNjcm9sbFJlZiIsImFwcGx5Iiwic2Nyb2xsYWJsZVNlZ21lbnRzIiwib25seUhhc2hDaGFuZ2UiLCJoYXNoRnJhZ21lbnQiLCJkZWNvZGVVUklDb21wb25lbnQiLCJzbGljZSIsInNlZ21lbnRQYXRocyIsImNhY2hlIiwicHJlZmV0Y2hDYWNoZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/handle-mutable.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js":
/*!****************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js ***!
  \****************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"handleSegmentMismatch\", ({\n    enumerable: true,\n    get: function() {\n        return handleSegmentMismatch;\n    }\n}));\nconst _navigatereducer = __webpack_require__(/*! ./reducers/navigate-reducer */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nfunction handleSegmentMismatch(state, action, treePatch) {\n    if (true) {\n        console.warn('Performing hard navigation because your application experienced an unrecoverable error. If this keeps occurring, please file a Next.js issue.\\n\\n' + 'Reason: Segment mismatch\\n' + (\"Last Action: \" + action.type + \"\\n\\n\") + (\"Current Tree: \" + JSON.stringify(state.tree) + \"\\n\\n\") + (\"Tree Patch Payload: \" + JSON.stringify(treePatch)));\n    }\n    return (0, _navigatereducer.handleExternalUrl)(state, {}, state.canonicalUrl, true);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=handle-segment-mismatch.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9oYW5kbGUtc2VnbWVudC1taXNtYXRjaC5qcyIsIm1hcHBpbmdzIjoiOzs7O3lEQVdnQkE7OztlQUFBQTs7OzZDQVZrQjtBQVUzQixTQUFTQSxzQkFDZEMsS0FBMkIsRUFDM0JDLE1BQXNCLEVBQ3RCQyxTQUE0QjtJQUU1QixJQUFJQyxJQUFvQixFQUFvQjtRQUMxQ0csUUFBUUMsSUFBSSxDQUNWLHNKQUNFLCtCQUNBLENBQUMsa0JBQWVOLE9BQU9PLElBQUksR0FBQyxPQUFJLElBQ2hDLG1CQUFpQkMsS0FBS0MsU0FBUyxDQUFDVixNQUFNVyxJQUFJLElBQUUsT0FBSSxJQUNoRCx5QkFBdUJGLEtBQUtDLFNBQVMsQ0FBQ1IsVUFBQUEsQ0FBVztJQUV2RDtJQUVBLE9BQU9VLENBQUFBLG9CQUFBQSxpQkFBQUEsRUFBa0JaLE9BQU8sQ0FBQyxHQUFHQSxNQUFNYSxZQUFZLEVBQUU7QUFDMUQiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9oYW5kbGUtc2VnbWVudC1taXNtYXRjaC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZsaWdodFJvdXRlclN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5pbXBvcnQgeyBoYW5kbGVFeHRlcm5hbFVybCB9IGZyb20gJy4vcmVkdWNlcnMvbmF2aWdhdGUtcmVkdWNlcidcbmltcG9ydCB0eXBlIHtcbiAgUmVhZG9ubHlSZWR1Y2VyU3RhdGUsXG4gIFJlZHVjZXJBY3Rpb25zLFxufSBmcm9tICcuL3JvdXRlci1yZWR1Y2VyLXR5cGVzJ1xuXG4vKipcbiAqIEhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgdGhlIGNsaWVudCByb3V0ZXIgYXR0ZW1wdGVkIHRvIHBhdGNoIHRoZSB0cmVlIGJ1dCwgZHVlIHRvIGEgbWlzbWF0Y2gsIHRoZSBwYXRjaCBmYWlsZWQuXG4gKiBUaGlzIHdpbGwgcGVyZm9ybSBhbiBNUEEgbmF2aWdhdGlvbiB0byByZXR1cm4gdGhlIHJvdXRlciB0byBhIHZhbGlkIHN0YXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlU2VnbWVudE1pc21hdGNoKFxuICBzdGF0ZTogUmVhZG9ubHlSZWR1Y2VyU3RhdGUsXG4gIGFjdGlvbjogUmVkdWNlckFjdGlvbnMsXG4gIHRyZWVQYXRjaDogRmxpZ2h0Um91dGVyU3RhdGVcbikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnUGVyZm9ybWluZyBoYXJkIG5hdmlnYXRpb24gYmVjYXVzZSB5b3VyIGFwcGxpY2F0aW9uIGV4cGVyaWVuY2VkIGFuIHVucmVjb3ZlcmFibGUgZXJyb3IuIElmIHRoaXMga2VlcHMgb2NjdXJyaW5nLCBwbGVhc2UgZmlsZSBhIE5leHQuanMgaXNzdWUuXFxuXFxuJyArXG4gICAgICAgICdSZWFzb246IFNlZ21lbnQgbWlzbWF0Y2hcXG4nICtcbiAgICAgICAgYExhc3QgQWN0aW9uOiAke2FjdGlvbi50eXBlfVxcblxcbmAgK1xuICAgICAgICBgQ3VycmVudCBUcmVlOiAke0pTT04uc3RyaW5naWZ5KHN0YXRlLnRyZWUpfVxcblxcbmAgK1xuICAgICAgICBgVHJlZSBQYXRjaCBQYXlsb2FkOiAke0pTT04uc3RyaW5naWZ5KHRyZWVQYXRjaCl9YFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBoYW5kbGVFeHRlcm5hbFVybChzdGF0ZSwge30sIHN0YXRlLmNhbm9uaWNhbFVybCwgdHJ1ZSlcbn1cbiJdLCJuYW1lcyI6WyJoYW5kbGVTZWdtZW50TWlzbWF0Y2giLCJzdGF0ZSIsImFjdGlvbiIsInRyZWVQYXRjaCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImNvbnNvbGUiLCJ3YXJuIiwidHlwZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0cmVlIiwiaGFuZGxlRXh0ZXJuYWxVcmwiLCJjYW5vbmljYWxVcmwiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/invalidate-cache-below-flight-segmentpath.js":
/*!**********************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/invalidate-cache-below-flight-segmentpath.js ***!
  \**********************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"invalidateCacheBelowFlightSegmentPath\", ({\n    enumerable: true,\n    get: function() {\n        return invalidateCacheBelowFlightSegmentPath;\n    }\n}));\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nconst _flightdatahelpers = __webpack_require__(/*! ../../flight-data-helpers */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/flight-data-helpers.js\");\nfunction invalidateCacheBelowFlightSegmentPath(newCache, existingCache, flightSegmentPath) {\n    const isLastEntry = flightSegmentPath.length <= 2;\n    const [parallelRouteKey, segment] = flightSegmentPath;\n    const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment);\n    const existingChildSegmentMap = existingCache.parallelRoutes.get(parallelRouteKey);\n    if (!existingChildSegmentMap) {\n        // Bailout because the existing cache does not have the path to the leaf node\n        // Will trigger lazy fetch in layout-router because of missing segment\n        return;\n    }\n    let childSegmentMap = newCache.parallelRoutes.get(parallelRouteKey);\n    if (!childSegmentMap || childSegmentMap === existingChildSegmentMap) {\n        childSegmentMap = new Map(existingChildSegmentMap);\n        newCache.parallelRoutes.set(parallelRouteKey, childSegmentMap);\n    }\n    // In case of last entry don't copy further down.\n    if (isLastEntry) {\n        childSegmentMap.delete(cacheKey);\n        return;\n    }\n    const existingChildCacheNode = existingChildSegmentMap.get(cacheKey);\n    let childCacheNode = childSegmentMap.get(cacheKey);\n    if (!childCacheNode || !existingChildCacheNode) {\n        // Bailout because the existing cache does not have the path to the leaf node\n        // Will trigger lazy fetch in layout-router because of missing segment\n        return;\n    }\n    if (childCacheNode === existingChildCacheNode) {\n        childCacheNode = {\n            lazyData: childCacheNode.lazyData,\n            rsc: childCacheNode.rsc,\n            prefetchRsc: childCacheNode.prefetchRsc,\n            head: childCacheNode.head,\n            prefetchHead: childCacheNode.prefetchHead,\n            parallelRoutes: new Map(childCacheNode.parallelRoutes)\n        };\n        childSegmentMap.set(cacheKey, childCacheNode);\n    }\n    invalidateCacheBelowFlightSegmentPath(childCacheNode, existingChildCacheNode, (0, _flightdatahelpers.getNextFlightSegmentPath)(flightSegmentPath));\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=invalidate-cache-below-flight-segmentpath.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9pbnZhbGlkYXRlLWNhY2hlLWJlbG93LWZsaWdodC1zZWdtZW50cGF0aC5qcyIsIm1hcHBpbmdzIjoiOzs7O3lFQVFnQkE7OztlQUFBQTs7O2tEQU5xQjsrQ0FDSTtBQUtsQyxTQUFTQSxzQ0FDZEMsUUFBbUIsRUFDbkJDLGFBQXdCLEVBQ3hCQyxpQkFBb0M7SUFFcEMsTUFBTUMsY0FBY0Qsa0JBQWtCRSxNQUFNLElBQUk7SUFDaEQsTUFBTSxDQUFDQyxrQkFBa0JDLFFBQVEsR0FBR0o7SUFFcEMsTUFBTUssV0FBV0MsQ0FBQUEsR0FBQUEsc0JBQUFBLG9CQUFBQSxFQUFxQkY7SUFFdEMsTUFBTUcsMEJBQ0pSLGNBQWNTLGNBQWMsQ0FBQ0MsR0FBRyxDQUFDTjtJQUVuQyxJQUFJLENBQUNJLHlCQUF5QjtRQUM1Qiw2RUFBNkU7UUFDN0Usc0VBQXNFO1FBQ3RFO0lBQ0Y7SUFFQSxJQUFJRyxrQkFBa0JaLFNBQVNVLGNBQWMsQ0FBQ0MsR0FBRyxDQUFDTjtJQUNsRCxJQUFJLENBQUNPLG1CQUFtQkEsb0JBQW9CSCx5QkFBeUI7UUFDbkVHLGtCQUFrQixJQUFJQyxJQUFJSjtRQUMxQlQsU0FBU1UsY0FBYyxDQUFDSSxHQUFHLENBQUNULGtCQUFrQk87SUFDaEQ7SUFFQSxpREFBaUQ7SUFDakQsSUFBSVQsYUFBYTtRQUNmUyxnQkFBZ0JHLE1BQU0sQ0FBQ1I7UUFDdkI7SUFDRjtJQUVBLE1BQU1TLHlCQUF5QlAsd0JBQXdCRSxHQUFHLENBQUNKO0lBQzNELElBQUlVLGlCQUFpQkwsZ0JBQWdCRCxHQUFHLENBQUNKO0lBRXpDLElBQUksQ0FBQ1Usa0JBQWtCLENBQUNELHdCQUF3QjtRQUM5Qyw2RUFBNkU7UUFDN0Usc0VBQXNFO1FBQ3RFO0lBQ0Y7SUFFQSxJQUFJQyxtQkFBbUJELHdCQUF3QjtRQUM3Q0MsaUJBQWlCO1lBQ2ZDLFVBQVVELGVBQWVDLFFBQVE7WUFDakNDLEtBQUtGLGVBQWVFLEdBQUc7WUFDdkJDLGFBQWFILGVBQWVHLFdBQVc7WUFDdkNDLE1BQU1KLGVBQWVJLElBQUk7WUFDekJDLGNBQWNMLGVBQWVLLFlBQVk7WUFDekNaLGdCQUFnQixJQUFJRyxJQUFJSSxlQUFlUCxjQUFjO1FBQ3ZEO1FBQ0FFLGdCQUFnQkUsR0FBRyxDQUFDUCxVQUFVVTtJQUNoQztJQUVBbEIsc0NBQ0VrQixnQkFDQUQsd0JBQ0FPLENBQUFBLEdBQUFBLG1CQUFBQSx3QkFBQUEsRUFBeUJyQjtBQUU3QiIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2ludmFsaWRhdGUtY2FjaGUtYmVsb3ctZmxpZ2h0LXNlZ21lbnRwYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2FjaGVOb2RlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgdHlwZSB7IEZsaWdodFNlZ21lbnRQYXRoIH0gZnJvbSAnLi4vLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXJDYWNoZUtleSB9IGZyb20gJy4vY3JlYXRlLXJvdXRlci1jYWNoZS1rZXknXG5pbXBvcnQgeyBnZXROZXh0RmxpZ2h0U2VnbWVudFBhdGggfSBmcm9tICcuLi8uLi9mbGlnaHQtZGF0YS1oZWxwZXJzJ1xuXG4vKipcbiAqIEZpbGwgY2FjaGUgdXAgdG8gdGhlIGVuZCBvZiB0aGUgZmxpZ2h0U2VnbWVudFBhdGgsIGludmFsaWRhdGluZyBhbnl0aGluZyBiZWxvdyBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludmFsaWRhdGVDYWNoZUJlbG93RmxpZ2h0U2VnbWVudFBhdGgoXG4gIG5ld0NhY2hlOiBDYWNoZU5vZGUsXG4gIGV4aXN0aW5nQ2FjaGU6IENhY2hlTm9kZSxcbiAgZmxpZ2h0U2VnbWVudFBhdGg6IEZsaWdodFNlZ21lbnRQYXRoXG4pOiB2b2lkIHtcbiAgY29uc3QgaXNMYXN0RW50cnkgPSBmbGlnaHRTZWdtZW50UGF0aC5sZW5ndGggPD0gMlxuICBjb25zdCBbcGFyYWxsZWxSb3V0ZUtleSwgc2VnbWVudF0gPSBmbGlnaHRTZWdtZW50UGF0aFxuXG4gIGNvbnN0IGNhY2hlS2V5ID0gY3JlYXRlUm91dGVyQ2FjaGVLZXkoc2VnbWVudClcblxuICBjb25zdCBleGlzdGluZ0NoaWxkU2VnbWVudE1hcCA9XG4gICAgZXhpc3RpbmdDYWNoZS5wYXJhbGxlbFJvdXRlcy5nZXQocGFyYWxsZWxSb3V0ZUtleSlcblxuICBpZiAoIWV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwKSB7XG4gICAgLy8gQmFpbG91dCBiZWNhdXNlIHRoZSBleGlzdGluZyBjYWNoZSBkb2VzIG5vdCBoYXZlIHRoZSBwYXRoIHRvIHRoZSBsZWFmIG5vZGVcbiAgICAvLyBXaWxsIHRyaWdnZXIgbGF6eSBmZXRjaCBpbiBsYXlvdXQtcm91dGVyIGJlY2F1c2Ugb2YgbWlzc2luZyBzZWdtZW50XG4gICAgcmV0dXJuXG4gIH1cblxuICBsZXQgY2hpbGRTZWdtZW50TWFwID0gbmV3Q2FjaGUucGFyYWxsZWxSb3V0ZXMuZ2V0KHBhcmFsbGVsUm91dGVLZXkpXG4gIGlmICghY2hpbGRTZWdtZW50TWFwIHx8IGNoaWxkU2VnbWVudE1hcCA9PT0gZXhpc3RpbmdDaGlsZFNlZ21lbnRNYXApIHtcbiAgICBjaGlsZFNlZ21lbnRNYXAgPSBuZXcgTWFwKGV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwKVxuICAgIG5ld0NhY2hlLnBhcmFsbGVsUm91dGVzLnNldChwYXJhbGxlbFJvdXRlS2V5LCBjaGlsZFNlZ21lbnRNYXApXG4gIH1cblxuICAvLyBJbiBjYXNlIG9mIGxhc3QgZW50cnkgZG9uJ3QgY29weSBmdXJ0aGVyIGRvd24uXG4gIGlmIChpc0xhc3RFbnRyeSkge1xuICAgIGNoaWxkU2VnbWVudE1hcC5kZWxldGUoY2FjaGVLZXkpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBleGlzdGluZ0NoaWxkQ2FjaGVOb2RlID0gZXhpc3RpbmdDaGlsZFNlZ21lbnRNYXAuZ2V0KGNhY2hlS2V5KVxuICBsZXQgY2hpbGRDYWNoZU5vZGUgPSBjaGlsZFNlZ21lbnRNYXAuZ2V0KGNhY2hlS2V5KVxuXG4gIGlmICghY2hpbGRDYWNoZU5vZGUgfHwgIWV4aXN0aW5nQ2hpbGRDYWNoZU5vZGUpIHtcbiAgICAvLyBCYWlsb3V0IGJlY2F1c2UgdGhlIGV4aXN0aW5nIGNhY2hlIGRvZXMgbm90IGhhdmUgdGhlIHBhdGggdG8gdGhlIGxlYWYgbm9kZVxuICAgIC8vIFdpbGwgdHJpZ2dlciBsYXp5IGZldGNoIGluIGxheW91dC1yb3V0ZXIgYmVjYXVzZSBvZiBtaXNzaW5nIHNlZ21lbnRcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChjaGlsZENhY2hlTm9kZSA9PT0gZXhpc3RpbmdDaGlsZENhY2hlTm9kZSkge1xuICAgIGNoaWxkQ2FjaGVOb2RlID0ge1xuICAgICAgbGF6eURhdGE6IGNoaWxkQ2FjaGVOb2RlLmxhenlEYXRhLFxuICAgICAgcnNjOiBjaGlsZENhY2hlTm9kZS5yc2MsXG4gICAgICBwcmVmZXRjaFJzYzogY2hpbGRDYWNoZU5vZGUucHJlZmV0Y2hSc2MsXG4gICAgICBoZWFkOiBjaGlsZENhY2hlTm9kZS5oZWFkLFxuICAgICAgcHJlZmV0Y2hIZWFkOiBjaGlsZENhY2hlTm9kZS5wcmVmZXRjaEhlYWQsXG4gICAgICBwYXJhbGxlbFJvdXRlczogbmV3IE1hcChjaGlsZENhY2hlTm9kZS5wYXJhbGxlbFJvdXRlcyksXG4gICAgfSBhcyBDYWNoZU5vZGVcbiAgICBjaGlsZFNlZ21lbnRNYXAuc2V0KGNhY2hlS2V5LCBjaGlsZENhY2hlTm9kZSlcbiAgfVxuXG4gIGludmFsaWRhdGVDYWNoZUJlbG93RmxpZ2h0U2VnbWVudFBhdGgoXG4gICAgY2hpbGRDYWNoZU5vZGUsXG4gICAgZXhpc3RpbmdDaGlsZENhY2hlTm9kZSxcbiAgICBnZXROZXh0RmxpZ2h0U2VnbWVudFBhdGgoZmxpZ2h0U2VnbWVudFBhdGgpXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJpbnZhbGlkYXRlQ2FjaGVCZWxvd0ZsaWdodFNlZ21lbnRQYXRoIiwibmV3Q2FjaGUiLCJleGlzdGluZ0NhY2hlIiwiZmxpZ2h0U2VnbWVudFBhdGgiLCJpc0xhc3RFbnRyeSIsImxlbmd0aCIsInBhcmFsbGVsUm91dGVLZXkiLCJzZWdtZW50IiwiY2FjaGVLZXkiLCJjcmVhdGVSb3V0ZXJDYWNoZUtleSIsImV4aXN0aW5nQ2hpbGRTZWdtZW50TWFwIiwicGFyYWxsZWxSb3V0ZXMiLCJnZXQiLCJjaGlsZFNlZ21lbnRNYXAiLCJNYXAiLCJzZXQiLCJkZWxldGUiLCJleGlzdGluZ0NoaWxkQ2FjaGVOb2RlIiwiY2hpbGRDYWNoZU5vZGUiLCJsYXp5RGF0YSIsInJzYyIsInByZWZldGNoUnNjIiwiaGVhZCIsInByZWZldGNoSGVhZCIsImdldE5leHRGbGlnaHRTZWdtZW50UGF0aCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/invalidate-cache-below-flight-segmentpath.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/invalidate-cache-by-router-state.js":
/*!*************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/invalidate-cache-by-router-state.js ***!
  \*************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"invalidateCacheByRouterState\", ({\n    enumerable: true,\n    get: function() {\n        return invalidateCacheByRouterState;\n    }\n}));\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction invalidateCacheByRouterState(newCache, existingCache, routerState) {\n    // Remove segment that we got data for so that it is filled in during rendering of rsc.\n    for(const key in routerState[1]){\n        const segmentForParallelRoute = routerState[1][key][0];\n        const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segmentForParallelRoute);\n        const existingParallelRoutesCacheNode = existingCache.parallelRoutes.get(key);\n        if (existingParallelRoutesCacheNode) {\n            let parallelRouteCacheNode = new Map(existingParallelRoutesCacheNode);\n            parallelRouteCacheNode.delete(cacheKey);\n            newCache.parallelRoutes.set(key, parallelRouteCacheNode);\n        }\n    }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=invalidate-cache-by-router-state.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9pbnZhbGlkYXRlLWNhY2hlLWJ5LXJvdXRlci1zdGF0ZS5qcyIsIm1hcHBpbmdzIjoiOzs7O2dFQU9nQkE7OztlQUFBQTs7O2tEQUxxQjtBQUs5QixTQUFTQSw2QkFDZEMsUUFBbUIsRUFDbkJDLGFBQXdCLEVBQ3hCQyxXQUE4QjtJQUU5Qix1RkFBdUY7SUFDdkYsSUFBSyxNQUFNQyxPQUFPRCxXQUFXLENBQUMsRUFBRSxDQUFFO1FBQ2hDLE1BQU1FLDBCQUEwQkYsV0FBVyxDQUFDLEVBQUUsQ0FBQ0MsSUFBSSxDQUFDLEVBQUU7UUFDdEQsTUFBTUUsV0FBV0MsQ0FBQUEsR0FBQUEsc0JBQUFBLG9CQUFBQSxFQUFxQkY7UUFDdEMsTUFBTUcsa0NBQ0pOLGNBQWNPLGNBQWMsQ0FBQ0MsR0FBRyxDQUFDTjtRQUNuQyxJQUFJSSxpQ0FBaUM7WUFDbkMsSUFBSUcseUJBQXlCLElBQUlDLElBQUlKO1lBQ3JDRyx1QkFBdUJFLE1BQU0sQ0FBQ1A7WUFDOUJMLFNBQVNRLGNBQWMsQ0FBQ0ssR0FBRyxDQUFDVixLQUFLTztRQUNuQztJQUNGO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9pbnZhbGlkYXRlLWNhY2hlLWJ5LXJvdXRlci1zdGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhY2hlTm9kZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHR5cGUgeyBGbGlnaHRSb3V0ZXJTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyQ2FjaGVLZXkgfSBmcm9tICcuL2NyZWF0ZS1yb3V0ZXItY2FjaGUta2V5J1xuXG4vKipcbiAqIEludmFsaWRhdGUgY2FjaGUgb25lIGxldmVsIGRvd24gZnJvbSB0aGUgcm91dGVyIHN0YXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW52YWxpZGF0ZUNhY2hlQnlSb3V0ZXJTdGF0ZShcbiAgbmV3Q2FjaGU6IENhY2hlTm9kZSxcbiAgZXhpc3RpbmdDYWNoZTogQ2FjaGVOb2RlLFxuICByb3V0ZXJTdGF0ZTogRmxpZ2h0Um91dGVyU3RhdGVcbik6IHZvaWQge1xuICAvLyBSZW1vdmUgc2VnbWVudCB0aGF0IHdlIGdvdCBkYXRhIGZvciBzbyB0aGF0IGl0IGlzIGZpbGxlZCBpbiBkdXJpbmcgcmVuZGVyaW5nIG9mIHJzYy5cbiAgZm9yIChjb25zdCBrZXkgaW4gcm91dGVyU3RhdGVbMV0pIHtcbiAgICBjb25zdCBzZWdtZW50Rm9yUGFyYWxsZWxSb3V0ZSA9IHJvdXRlclN0YXRlWzFdW2tleV1bMF1cbiAgICBjb25zdCBjYWNoZUtleSA9IGNyZWF0ZVJvdXRlckNhY2hlS2V5KHNlZ21lbnRGb3JQYXJhbGxlbFJvdXRlKVxuICAgIGNvbnN0IGV4aXN0aW5nUGFyYWxsZWxSb3V0ZXNDYWNoZU5vZGUgPVxuICAgICAgZXhpc3RpbmdDYWNoZS5wYXJhbGxlbFJvdXRlcy5nZXQoa2V5KVxuICAgIGlmIChleGlzdGluZ1BhcmFsbGVsUm91dGVzQ2FjaGVOb2RlKSB7XG4gICAgICBsZXQgcGFyYWxsZWxSb3V0ZUNhY2hlTm9kZSA9IG5ldyBNYXAoZXhpc3RpbmdQYXJhbGxlbFJvdXRlc0NhY2hlTm9kZSlcbiAgICAgIHBhcmFsbGVsUm91dGVDYWNoZU5vZGUuZGVsZXRlKGNhY2hlS2V5KVxuICAgICAgbmV3Q2FjaGUucGFyYWxsZWxSb3V0ZXMuc2V0KGtleSwgcGFyYWxsZWxSb3V0ZUNhY2hlTm9kZSlcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJpbnZhbGlkYXRlQ2FjaGVCeVJvdXRlclN0YXRlIiwibmV3Q2FjaGUiLCJleGlzdGluZ0NhY2hlIiwicm91dGVyU3RhdGUiLCJrZXkiLCJzZWdtZW50Rm9yUGFyYWxsZWxSb3V0ZSIsImNhY2hlS2V5IiwiY3JlYXRlUm91dGVyQ2FjaGVLZXkiLCJleGlzdGluZ1BhcmFsbGVsUm91dGVzQ2FjaGVOb2RlIiwicGFyYWxsZWxSb3V0ZXMiLCJnZXQiLCJwYXJhbGxlbFJvdXRlQ2FjaGVOb2RlIiwiTWFwIiwiZGVsZXRlIiwic2V0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/invalidate-cache-by-router-state.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js":
/*!*************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js ***!
  \*************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"isNavigatingToNewRootLayout\", ({\n    enumerable: true,\n    get: function() {\n        return isNavigatingToNewRootLayout;\n    }\n}));\nfunction isNavigatingToNewRootLayout(currentTree, nextTree) {\n    // Compare segments\n    const currentTreeSegment = currentTree[0];\n    const nextTreeSegment = nextTree[0];\n    // If any segment is different before we find the root layout, the root layout has changed.\n    // E.g. /same/(group1)/layout.js -> /same/(group2)/layout.js\n    // First segment is 'same' for both, keep looking. (group1) changed to (group2) before the root layout was found, it must have changed.\n    if (Array.isArray(currentTreeSegment) && Array.isArray(nextTreeSegment)) {\n        // Compare dynamic param name and type but ignore the value, different values would not affect the current root layout\n        // /[name] - /slug1 and /slug2, both values (slug1 & slug2) still has the same layout /[name]/layout.js\n        if (currentTreeSegment[0] !== nextTreeSegment[0] || currentTreeSegment[2] !== nextTreeSegment[2]) {\n            return true;\n        }\n    } else if (currentTreeSegment !== nextTreeSegment) {\n        return true;\n    }\n    // Current tree root layout found\n    if (currentTree[4]) {\n        // If the next tree doesn't have the root layout flag, it must have changed.\n        return !nextTree[4];\n    }\n    // Current tree didn't have its root layout here, must have changed.\n    if (nextTree[4]) {\n        return true;\n    }\n    // We can't assume it's `parallelRoutes.children` here in case the root layout is `app/@something/layout.js`\n    // But it's not possible to be more than one parallelRoutes before the root layout is found\n    // TODO-APP: change to traverse all parallel routes\n    const currentTreeChild = Object.values(currentTree[1])[0];\n    const nextTreeChild = Object.values(nextTree[1])[0];\n    if (!currentTreeChild || !nextTreeChild) return true;\n    return isNavigatingToNewRootLayout(currentTreeChild, nextTreeChild);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=is-navigating-to-new-root-layout.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9pcy1uYXZpZ2F0aW5nLXRvLW5ldy1yb290LWxheW91dC5qcyIsIm1hcHBpbmdzIjoiOzs7OytEQUVnQkE7OztlQUFBQTs7O0FBQVQsU0FBU0EsNEJBQ2RDLFdBQThCLEVBQzlCQyxRQUEyQjtJQUUzQixtQkFBbUI7SUFDbkIsTUFBTUMscUJBQXFCRixXQUFXLENBQUMsRUFBRTtJQUN6QyxNQUFNRyxrQkFBa0JGLFFBQVEsQ0FBQyxFQUFFO0lBRW5DLDJGQUEyRjtJQUMzRiw0REFBNEQ7SUFDNUQsdUlBQXVJO0lBQ3ZJLElBQUlHLE1BQU1DLE9BQU8sQ0FBQ0gsdUJBQXVCRSxNQUFNQyxPQUFPLENBQUNGLGtCQUFrQjtRQUN2RSxzSEFBc0g7UUFDdEgsdUdBQXVHO1FBQ3ZHLElBQ0VELGtCQUFrQixDQUFDLEVBQUUsS0FBS0MsZUFBZSxDQUFDLEVBQUUsSUFDNUNELGtCQUFrQixDQUFDLEVBQUUsS0FBS0MsZUFBZSxDQUFDLEVBQUUsRUFDNUM7WUFDQSxPQUFPO1FBQ1Q7SUFDRixPQUFPLElBQUlELHVCQUF1QkMsaUJBQWlCO1FBQ2pELE9BQU87SUFDVDtJQUVBLGlDQUFpQztJQUNqQyxJQUFJSCxXQUFXLENBQUMsRUFBRSxFQUFFO1FBQ2xCLDRFQUE0RTtRQUM1RSxPQUFPLENBQUNDLFFBQVEsQ0FBQyxFQUFFO0lBQ3JCO0lBQ0Esb0VBQW9FO0lBQ3BFLElBQUlBLFFBQVEsQ0FBQyxFQUFFLEVBQUU7UUFDZixPQUFPO0lBQ1Q7SUFDQSw0R0FBNEc7SUFDNUcsMkZBQTJGO0lBQzNGLG1EQUFtRDtJQUNuRCxNQUFNSyxtQkFBbUJDLE9BQU9DLE1BQU0sQ0FBQ1IsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDekQsTUFBTVMsZ0JBQWdCRixPQUFPQyxNQUFNLENBQUNQLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ25ELElBQUksQ0FBQ0ssb0JBQW9CLENBQUNHLGVBQWUsT0FBTztJQUNoRCxPQUFPViw0QkFBNEJPLGtCQUFrQkc7QUFDdkQiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9pcy1uYXZpZ2F0aW5nLXRvLW5ldy1yb290LWxheW91dC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZsaWdodFJvdXRlclN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQoXG4gIGN1cnJlbnRUcmVlOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgbmV4dFRyZWU6IEZsaWdodFJvdXRlclN0YXRlXG4pOiBib29sZWFuIHtcbiAgLy8gQ29tcGFyZSBzZWdtZW50c1xuICBjb25zdCBjdXJyZW50VHJlZVNlZ21lbnQgPSBjdXJyZW50VHJlZVswXVxuICBjb25zdCBuZXh0VHJlZVNlZ21lbnQgPSBuZXh0VHJlZVswXVxuXG4gIC8vIElmIGFueSBzZWdtZW50IGlzIGRpZmZlcmVudCBiZWZvcmUgd2UgZmluZCB0aGUgcm9vdCBsYXlvdXQsIHRoZSByb290IGxheW91dCBoYXMgY2hhbmdlZC5cbiAgLy8gRS5nLiAvc2FtZS8oZ3JvdXAxKS9sYXlvdXQuanMgLT4gL3NhbWUvKGdyb3VwMikvbGF5b3V0LmpzXG4gIC8vIEZpcnN0IHNlZ21lbnQgaXMgJ3NhbWUnIGZvciBib3RoLCBrZWVwIGxvb2tpbmcuIChncm91cDEpIGNoYW5nZWQgdG8gKGdyb3VwMikgYmVmb3JlIHRoZSByb290IGxheW91dCB3YXMgZm91bmQsIGl0IG11c3QgaGF2ZSBjaGFuZ2VkLlxuICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50VHJlZVNlZ21lbnQpICYmIEFycmF5LmlzQXJyYXkobmV4dFRyZWVTZWdtZW50KSkge1xuICAgIC8vIENvbXBhcmUgZHluYW1pYyBwYXJhbSBuYW1lIGFuZCB0eXBlIGJ1dCBpZ25vcmUgdGhlIHZhbHVlLCBkaWZmZXJlbnQgdmFsdWVzIHdvdWxkIG5vdCBhZmZlY3QgdGhlIGN1cnJlbnQgcm9vdCBsYXlvdXRcbiAgICAvLyAvW25hbWVdIC0gL3NsdWcxIGFuZCAvc2x1ZzIsIGJvdGggdmFsdWVzIChzbHVnMSAmIHNsdWcyKSBzdGlsbCBoYXMgdGhlIHNhbWUgbGF5b3V0IC9bbmFtZV0vbGF5b3V0LmpzXG4gICAgaWYgKFxuICAgICAgY3VycmVudFRyZWVTZWdtZW50WzBdICE9PSBuZXh0VHJlZVNlZ21lbnRbMF0gfHxcbiAgICAgIGN1cnJlbnRUcmVlU2VnbWVudFsyXSAhPT0gbmV4dFRyZWVTZWdtZW50WzJdXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIGlmIChjdXJyZW50VHJlZVNlZ21lbnQgIT09IG5leHRUcmVlU2VnbWVudCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBDdXJyZW50IHRyZWUgcm9vdCBsYXlvdXQgZm91bmRcbiAgaWYgKGN1cnJlbnRUcmVlWzRdKSB7XG4gICAgLy8gSWYgdGhlIG5leHQgdHJlZSBkb2Vzbid0IGhhdmUgdGhlIHJvb3QgbGF5b3V0IGZsYWcsIGl0IG11c3QgaGF2ZSBjaGFuZ2VkLlxuICAgIHJldHVybiAhbmV4dFRyZWVbNF1cbiAgfVxuICAvLyBDdXJyZW50IHRyZWUgZGlkbid0IGhhdmUgaXRzIHJvb3QgbGF5b3V0IGhlcmUsIG11c3QgaGF2ZSBjaGFuZ2VkLlxuICBpZiAobmV4dFRyZWVbNF0pIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIC8vIFdlIGNhbid0IGFzc3VtZSBpdCdzIGBwYXJhbGxlbFJvdXRlcy5jaGlsZHJlbmAgaGVyZSBpbiBjYXNlIHRoZSByb290IGxheW91dCBpcyBgYXBwL0Bzb21ldGhpbmcvbGF5b3V0LmpzYFxuICAvLyBCdXQgaXQncyBub3QgcG9zc2libGUgdG8gYmUgbW9yZSB0aGFuIG9uZSBwYXJhbGxlbFJvdXRlcyBiZWZvcmUgdGhlIHJvb3QgbGF5b3V0IGlzIGZvdW5kXG4gIC8vIFRPRE8tQVBQOiBjaGFuZ2UgdG8gdHJhdmVyc2UgYWxsIHBhcmFsbGVsIHJvdXRlc1xuICBjb25zdCBjdXJyZW50VHJlZUNoaWxkID0gT2JqZWN0LnZhbHVlcyhjdXJyZW50VHJlZVsxXSlbMF1cbiAgY29uc3QgbmV4dFRyZWVDaGlsZCA9IE9iamVjdC52YWx1ZXMobmV4dFRyZWVbMV0pWzBdXG4gIGlmICghY3VycmVudFRyZWVDaGlsZCB8fCAhbmV4dFRyZWVDaGlsZCkgcmV0dXJuIHRydWVcbiAgcmV0dXJuIGlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dChjdXJyZW50VHJlZUNoaWxkLCBuZXh0VHJlZUNoaWxkKVxufVxuIl0sIm5hbWVzIjpbImlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dCIsImN1cnJlbnRUcmVlIiwibmV4dFRyZWUiLCJjdXJyZW50VHJlZVNlZ21lbnQiLCJuZXh0VHJlZVNlZ21lbnQiLCJBcnJheSIsImlzQXJyYXkiLCJjdXJyZW50VHJlZUNoaWxkIiwiT2JqZWN0IiwidmFsdWVzIiwibmV4dFRyZWVDaGlsZCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/ppr-navigations.js":
/*!********************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/ppr-navigations.js ***!
  \********************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    abortTask: function() {\n        return abortTask;\n    },\n    listenForDynamicRequest: function() {\n        return listenForDynamicRequest;\n    },\n    startPPRNavigation: function() {\n        return startPPRNavigation;\n    },\n    updateCacheNodeOnPopstateRestoration: function() {\n        return updateCacheNodeOnPopstateRestoration;\n    }\n});\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/segment.js\");\nconst _matchsegments = __webpack_require__(/*! ../match-segments */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/match-segments.js\");\nconst _createroutercachekey = __webpack_require__(/*! ./create-router-cache-key */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ./is-navigating-to-new-root-layout */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _prefetchcacheutils = __webpack_require__(/*! ./prefetch-cache-utils */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/prefetch-cache-utils.js\");\nconst MPA_NAVIGATION_TASK = {\n    route: null,\n    node: null,\n    dynamicRequestTree: null,\n    children: null\n};\nfunction startPPRNavigation(navigatedAt, oldCacheNode, oldRouterState, newRouterState, prefetchData, prefetchHead, isPrefetchHeadPartial, isSamePageNavigation, scrollableSegmentsResult) {\n    const segmentPath = [];\n    return updateCacheNodeOnNavigation(navigatedAt, oldCacheNode, oldRouterState, newRouterState, false, prefetchData, prefetchHead, isPrefetchHeadPartial, isSamePageNavigation, segmentPath, scrollableSegmentsResult);\n}\nfunction updateCacheNodeOnNavigation(navigatedAt, oldCacheNode, oldRouterState, newRouterState, didFindRootLayout, prefetchData, prefetchHead, isPrefetchHeadPartial, isSamePageNavigation, segmentPath, scrollableSegmentsResult) {\n    // Diff the old and new trees to reuse the shared layouts.\n    const oldRouterStateChildren = oldRouterState[1];\n    const newRouterStateChildren = newRouterState[1];\n    const prefetchDataChildren = prefetchData !== null ? prefetchData[2] : null;\n    if (!didFindRootLayout) {\n        // We're currently traversing the part of the tree that was also part of\n        // the previous route. If we discover a root layout, then we don't need to\n        // trigger an MPA navigation. See beginRenderingNewRouteTree for context.\n        const isRootLayout = newRouterState[4] === true;\n        if (isRootLayout) {\n            // Found a matching root layout.\n            didFindRootLayout = true;\n        }\n    }\n    const oldParallelRoutes = oldCacheNode.parallelRoutes;\n    // Clone the current set of segment children, even if they aren't active in\n    // the new tree.\n    // TODO: We currently retain all the inactive segments indefinitely, until\n    // there's an explicit refresh, or a parent layout is lazily refreshed. We\n    // rely on this for popstate navigations, which update the Router State Tree\n    // but do not eagerly perform a data fetch, because they expect the segment\n    // data to already be in the Cache Node tree. For highly static sites that\n    // are mostly read-only, this may happen only rarely, causing memory to\n    // leak. We should figure out a better model for the lifetime of inactive\n    // segments, so we can maintain instant back/forward navigations without\n    // leaking memory indefinitely.\n    const prefetchParallelRoutes = new Map(oldParallelRoutes);\n    // As we diff the trees, we may sometimes modify (copy-on-write, not mutate)\n    // the Route Tree that was returned by the server — for example, in the case\n    // of default parallel routes, we preserve the currently active segment. To\n    // avoid mutating the original tree, we clone the router state children along\n    // the return path.\n    let patchedRouterStateChildren = {};\n    let taskChildren = null;\n    // Most navigations require a request to fetch additional data from the\n    // server, either because the data was not already prefetched, or because the\n    // target route contains dynamic data that cannot be prefetched.\n    //\n    // However, if the target route is fully static, and it's already completely\n    // loaded into the segment cache, then we can skip the server request.\n    //\n    // This starts off as `false`, and is set to `true` if any of the child\n    // routes requires a dynamic request.\n    let needsDynamicRequest = false;\n    // As we traverse the children, we'll construct a FlightRouterState that can\n    // be sent to the server to request the dynamic data. If it turns out that\n    // nothing in the subtree is dynamic (i.e. needsDynamicRequest is false at the\n    // end), then this will be discarded.\n    // TODO: We can probably optimize the format of this data structure to only\n    // include paths that are dynamic. Instead of reusing the\n    // FlightRouterState type.\n    let dynamicRequestTreeChildren = {};\n    for(let parallelRouteKey in newRouterStateChildren){\n        const newRouterStateChild = newRouterStateChildren[parallelRouteKey];\n        const oldRouterStateChild = oldRouterStateChildren[parallelRouteKey];\n        const oldSegmentMapChild = oldParallelRoutes.get(parallelRouteKey);\n        const prefetchDataChild = prefetchDataChildren !== null ? prefetchDataChildren[parallelRouteKey] : null;\n        const newSegmentChild = newRouterStateChild[0];\n        const newSegmentPathChild = segmentPath.concat([\n            parallelRouteKey,\n            newSegmentChild\n        ]);\n        const newSegmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(newSegmentChild);\n        const oldSegmentChild = oldRouterStateChild !== undefined ? oldRouterStateChild[0] : undefined;\n        const oldCacheNodeChild = oldSegmentMapChild !== undefined ? oldSegmentMapChild.get(newSegmentKeyChild) : undefined;\n        let taskChild;\n        if (newSegmentChild === _segment.DEFAULT_SEGMENT_KEY) {\n            // This is another kind of leaf segment — a default route.\n            //\n            // Default routes have special behavior. When there's no matching segment\n            // for a parallel route, Next.js preserves the currently active segment\n            // during a client navigation — but not for initial render. The server\n            // leaves it to the client to account for this. So we need to handle\n            // it here.\n            if (oldRouterStateChild !== undefined) {\n                // Reuse the existing Router State for this segment. We spawn a \"task\"\n                // just to keep track of the updated router state; unlike most, it's\n                // already fulfilled and won't be affected by the dynamic response.\n                taskChild = spawnReusedTask(oldRouterStateChild);\n            } else {\n                // There's no currently active segment. Switch to the \"create\" path.\n                taskChild = beginRenderingNewRouteTree(navigatedAt, oldRouterStateChild, newRouterStateChild, oldCacheNodeChild, didFindRootLayout, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchHeadPartial, newSegmentPathChild, scrollableSegmentsResult);\n            }\n        } else if (isSamePageNavigation && // Check if this is a page segment.\n        // TODO: We're not consistent about how we do this check. Some places\n        // check if the segment starts with PAGE_SEGMENT_KEY, but most seem to\n        // check if there any any children, which is why I'm doing it here. We\n        // should probably encode an empty children set as `null` though. Either\n        // way, we should update all the checks to be consistent.\n        Object.keys(newRouterStateChild[1]).length === 0) {\n            // We special case navigations to the exact same URL as the current\n            // location. It's a common UI pattern for apps to refresh when you click a\n            // link to the current page. So when this happens, we refresh the dynamic\n            // data in the page segments.\n            //\n            // Note that this does not apply if the any part of the hash or search\n            // query has changed. This might feel a bit weird but it makes more sense\n            // when you consider that the way to trigger this behavior is to click\n            // the same link multiple times.\n            //\n            // TODO: We should probably refresh the *entire* route when this case\n            // occurs, not just the page segments. Essentially treating it the same as\n            // a refresh() triggered by an action, which is the more explicit way of\n            // modeling the UI pattern described above.\n            //\n            // Also note that this only refreshes the dynamic data, not static/\n            // cached data. If the page segment is fully static and prefetched, the\n            // request is skipped. (This is also how refresh() works.)\n            taskChild = beginRenderingNewRouteTree(navigatedAt, oldRouterStateChild, newRouterStateChild, oldCacheNodeChild, didFindRootLayout, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchHeadPartial, newSegmentPathChild, scrollableSegmentsResult);\n        } else if (oldRouterStateChild !== undefined && oldSegmentChild !== undefined && (0, _matchsegments.matchSegment)(newSegmentChild, oldSegmentChild)) {\n            if (oldCacheNodeChild !== undefined && oldRouterStateChild !== undefined) {\n                // This segment exists in both the old and new trees. Recursively update\n                // the children.\n                taskChild = updateCacheNodeOnNavigation(navigatedAt, oldCacheNodeChild, oldRouterStateChild, newRouterStateChild, didFindRootLayout, prefetchDataChild, prefetchHead, isPrefetchHeadPartial, isSamePageNavigation, newSegmentPathChild, scrollableSegmentsResult);\n            } else {\n                // There's no existing Cache Node for this segment. Switch to the\n                // \"create\" path.\n                taskChild = beginRenderingNewRouteTree(navigatedAt, oldRouterStateChild, newRouterStateChild, oldCacheNodeChild, didFindRootLayout, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchHeadPartial, newSegmentPathChild, scrollableSegmentsResult);\n            }\n        } else {\n            // This is a new tree. Switch to the \"create\" path.\n            taskChild = beginRenderingNewRouteTree(navigatedAt, oldRouterStateChild, newRouterStateChild, oldCacheNodeChild, didFindRootLayout, prefetchDataChild !== undefined ? prefetchDataChild : null, prefetchHead, isPrefetchHeadPartial, newSegmentPathChild, scrollableSegmentsResult);\n        }\n        if (taskChild !== null) {\n            // Recursively propagate up the child tasks.\n            if (taskChild.route === null) {\n                // One of the child tasks discovered a change to the root layout.\n                // Immediately unwind from this recursive traversal.\n                return MPA_NAVIGATION_TASK;\n            }\n            if (taskChildren === null) {\n                taskChildren = new Map();\n            }\n            taskChildren.set(parallelRouteKey, taskChild);\n            const newCacheNodeChild = taskChild.node;\n            if (newCacheNodeChild !== null) {\n                const newSegmentMapChild = new Map(oldSegmentMapChild);\n                newSegmentMapChild.set(newSegmentKeyChild, newCacheNodeChild);\n                prefetchParallelRoutes.set(parallelRouteKey, newSegmentMapChild);\n            }\n            // The child tree's route state may be different from the prefetched\n            // route sent by the server. We need to clone it as we traverse back up\n            // the tree.\n            const taskChildRoute = taskChild.route;\n            patchedRouterStateChildren[parallelRouteKey] = taskChildRoute;\n            const dynamicRequestTreeChild = taskChild.dynamicRequestTree;\n            if (dynamicRequestTreeChild !== null) {\n                // Something in the child tree is dynamic.\n                needsDynamicRequest = true;\n                dynamicRequestTreeChildren[parallelRouteKey] = dynamicRequestTreeChild;\n            } else {\n                dynamicRequestTreeChildren[parallelRouteKey] = taskChildRoute;\n            }\n        } else {\n            // The child didn't change. We can use the prefetched router state.\n            patchedRouterStateChildren[parallelRouteKey] = newRouterStateChild;\n            dynamicRequestTreeChildren[parallelRouteKey] = newRouterStateChild;\n        }\n    }\n    if (taskChildren === null) {\n        // No new tasks were spawned.\n        return null;\n    }\n    const newCacheNode = {\n        lazyData: null,\n        rsc: oldCacheNode.rsc,\n        // We intentionally aren't updating the prefetchRsc field, since this node\n        // is already part of the current tree, because it would be weird for\n        // prefetch data to be newer than the final data. It probably won't ever be\n        // observable anyway, but it could happen if the segment is unmounted then\n        // mounted again, because LayoutRouter will momentarily switch to rendering\n        // prefetchRsc, via useDeferredValue.\n        prefetchRsc: oldCacheNode.prefetchRsc,\n        head: oldCacheNode.head,\n        prefetchHead: oldCacheNode.prefetchHead,\n        loading: oldCacheNode.loading,\n        // Everything is cloned except for the children, which we computed above.\n        parallelRoutes: prefetchParallelRoutes,\n        navigatedAt\n    };\n    return {\n        // Return a cloned copy of the router state with updated children.\n        route: patchRouterStateWithNewChildren(newRouterState, patchedRouterStateChildren),\n        node: newCacheNode,\n        dynamicRequestTree: needsDynamicRequest ? patchRouterStateWithNewChildren(newRouterState, dynamicRequestTreeChildren) : null,\n        children: taskChildren\n    };\n}\nfunction beginRenderingNewRouteTree(navigatedAt, oldRouterState, newRouterState, existingCacheNode, didFindRootLayout, prefetchData, possiblyPartialPrefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult) {\n    if (!didFindRootLayout) {\n        // The route tree changed before we reached a layout. (The highest-level\n        // layout in a route tree is referred to as the \"root\" layout.) This could\n        // mean that we're navigating between two different root layouts. When this\n        // happens, we perform a full-page (MPA-style) navigation.\n        //\n        // However, the algorithm for deciding where to start rendering a route\n        // (i.e. the one performed in order to reach this function) is stricter\n        // than the one used to detect a change in the root layout. So just because\n        // we're re-rendering a segment outside of the root layout does not mean we\n        // should trigger a full-page navigation.\n        //\n        // Specifically, we handle dynamic parameters differently: two segments are\n        // considered the same even if their parameter values are different.\n        //\n        // Refer to isNavigatingToNewRootLayout for details.\n        //\n        // Note that we only have to perform this extra traversal if we didn't\n        // already discover a root layout in the part of the tree that is unchanged.\n        // In the common case, this branch is skipped completely.\n        if (oldRouterState === undefined || (0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(oldRouterState, newRouterState)) {\n            // The root layout changed. Perform a full-page navigation.\n            return MPA_NAVIGATION_TASK;\n        }\n    }\n    return createCacheNodeOnNavigation(navigatedAt, newRouterState, existingCacheNode, prefetchData, possiblyPartialPrefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult);\n}\nfunction createCacheNodeOnNavigation(navigatedAt, routerState, existingCacheNode, prefetchData, possiblyPartialPrefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult) {\n    // Same traversal as updateCacheNodeNavigation, but we switch to this path\n    // once we reach the part of the tree that was not in the previous route. We\n    // don't need to diff against the old tree, we just need to create a new one.\n    // The head is assigned to every leaf segment delivered by the server. Based\n    // on corresponding logic in fill-lazy-items-till-leaf-with-head.ts\n    const routerStateChildren = routerState[1];\n    const isLeafSegment = Object.keys(routerStateChildren).length === 0;\n    // Even we're rendering inside the \"new\" part of the target tree, we may have\n    // a locally cached segment that we can reuse. This may come from either 1)\n    // the CacheNode tree, which lives in React state and is populated by previous\n    // navigations; or 2) the prefetch cache, which is a separate cache that is\n    // populated by prefetches.\n    let rsc;\n    let loading;\n    let head;\n    let cacheNodeNavigatedAt;\n    if (existingCacheNode !== undefined && // DYNAMIC_STALETIME_MS defaults to 0, but it can be increased using\n    // the experimental.staleTimes.dynamic config. When set, we'll avoid\n    // refetching dynamic data if it was fetched within the given threshold.\n    existingCacheNode.navigatedAt + _prefetchcacheutils.DYNAMIC_STALETIME_MS > navigatedAt) {\n        // We have an existing CacheNode for this segment, and it's not stale. We\n        // should reuse it rather than request a new one.\n        rsc = existingCacheNode.rsc;\n        loading = existingCacheNode.loading;\n        head = existingCacheNode.head;\n        // Don't update the navigatedAt timestamp, since we're reusing stale data.\n        cacheNodeNavigatedAt = existingCacheNode.navigatedAt;\n    } else if (prefetchData !== null) {\n        // There's no existing CacheNode for this segment, but we do have prefetch\n        // data. If the prefetch data is fully static (i.e. does not contain any\n        // dynamic holes), we don't need to request it from the server.\n        rsc = prefetchData[1];\n        loading = prefetchData[3];\n        head = isLeafSegment ? possiblyPartialPrefetchHead : null;\n        // Even though we're accessing the data from the prefetch cache, this is\n        // conceptually a new segment, not a reused one. So we should update the\n        // navigatedAt timestamp.\n        cacheNodeNavigatedAt = navigatedAt;\n        const isPrefetchRscPartial = prefetchData[4];\n        if (isPrefetchRscPartial || // Check if the head is partial (only relevant if this is a leaf segment)\n        isPrefetchHeadPartial && isLeafSegment) {\n            // We only have partial data from this segment. Like missing segments, we\n            // must request the full data from the server.\n            return spawnPendingTask(navigatedAt, routerState, prefetchData, possiblyPartialPrefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult);\n        } else {\n        // The prefetch data is fully static, so we can omit it from the\n        // navigation request.\n        }\n    } else {\n        // There's no prefetch for this segment. Everything from this point will be\n        // requested from the server, even if there are static children below it.\n        // Create a terminal task node that will later be fulfilled by\n        // server response.\n        return spawnPendingTask(navigatedAt, routerState, null, possiblyPartialPrefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult);\n    }\n    // We already have a full segment we can render, so we don't need to request a\n    // new one from the server. Keep traversing down the tree until we reach\n    // something that requires a dynamic request.\n    const prefetchDataChildren = prefetchData !== null ? prefetchData[2] : null;\n    const taskChildren = new Map();\n    const existingCacheNodeChildren = existingCacheNode !== undefined ? existingCacheNode.parallelRoutes : null;\n    const cacheNodeChildren = new Map(existingCacheNodeChildren);\n    let dynamicRequestTreeChildren = {};\n    let needsDynamicRequest = false;\n    if (isLeafSegment) {\n        // The segment path of every leaf segment (i.e. page) is collected into\n        // a result array. This is used by the LayoutRouter to scroll to ensure that\n        // new pages are visible after a navigation.\n        // TODO: We should use a string to represent the segment path instead of\n        // an array. We already use a string representation for the path when\n        // accessing the Segment Cache, so we can use the same one.\n        scrollableSegmentsResult.push(segmentPath);\n    } else {\n        for(let parallelRouteKey in routerStateChildren){\n            const routerStateChild = routerStateChildren[parallelRouteKey];\n            const prefetchDataChild = prefetchDataChildren !== null ? prefetchDataChildren[parallelRouteKey] : null;\n            const existingSegmentMapChild = existingCacheNodeChildren !== null ? existingCacheNodeChildren.get(parallelRouteKey) : undefined;\n            const segmentChild = routerStateChild[0];\n            const segmentPathChild = segmentPath.concat([\n                parallelRouteKey,\n                segmentChild\n            ]);\n            const segmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(segmentChild);\n            const existingCacheNodeChild = existingSegmentMapChild !== undefined ? existingSegmentMapChild.get(segmentKeyChild) : undefined;\n            const taskChild = createCacheNodeOnNavigation(navigatedAt, routerStateChild, existingCacheNodeChild, prefetchDataChild, possiblyPartialPrefetchHead, isPrefetchHeadPartial, segmentPathChild, scrollableSegmentsResult);\n            taskChildren.set(parallelRouteKey, taskChild);\n            const dynamicRequestTreeChild = taskChild.dynamicRequestTree;\n            if (dynamicRequestTreeChild !== null) {\n                // Something in the child tree is dynamic.\n                needsDynamicRequest = true;\n                dynamicRequestTreeChildren[parallelRouteKey] = dynamicRequestTreeChild;\n            } else {\n                dynamicRequestTreeChildren[parallelRouteKey] = routerStateChild;\n            }\n            const newCacheNodeChild = taskChild.node;\n            if (newCacheNodeChild !== null) {\n                const newSegmentMapChild = new Map();\n                newSegmentMapChild.set(segmentKeyChild, newCacheNodeChild);\n                cacheNodeChildren.set(parallelRouteKey, newSegmentMapChild);\n            }\n        }\n    }\n    return {\n        // Since we're inside a new route tree, unlike the\n        // `updateCacheNodeOnNavigation` path, the router state on the children\n        // tasks is always the same as the router state we pass in. So we don't need\n        // to clone/modify it.\n        route: routerState,\n        node: {\n            lazyData: null,\n            // Since this segment is already full, we don't need to use the\n            // `prefetchRsc` field.\n            rsc,\n            prefetchRsc: null,\n            head,\n            prefetchHead: null,\n            loading,\n            parallelRoutes: cacheNodeChildren,\n            navigatedAt: cacheNodeNavigatedAt\n        },\n        dynamicRequestTree: needsDynamicRequest ? patchRouterStateWithNewChildren(routerState, dynamicRequestTreeChildren) : null,\n        children: taskChildren\n    };\n}\nfunction patchRouterStateWithNewChildren(baseRouterState, newChildren) {\n    const clone = [\n        baseRouterState[0],\n        newChildren\n    ];\n    // Based on equivalent logic in apply-router-state-patch-to-tree, but should\n    // confirm whether we need to copy all of these fields. Not sure the server\n    // ever sends, e.g. the refetch marker.\n    if (2 in baseRouterState) {\n        clone[2] = baseRouterState[2];\n    }\n    if (3 in baseRouterState) {\n        clone[3] = baseRouterState[3];\n    }\n    if (4 in baseRouterState) {\n        clone[4] = baseRouterState[4];\n    }\n    return clone;\n}\nfunction spawnPendingTask(navigatedAt, routerState, prefetchData, prefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult) {\n    // Create a task that will later be fulfilled by data from the server.\n    // Clone the prefetched route tree and the `refetch` marker to it. We'll send\n    // this to the server so it knows where to start rendering.\n    const dynamicRequestTree = patchRouterStateWithNewChildren(routerState, routerState[1]);\n    dynamicRequestTree[3] = 'refetch';\n    const newTask = {\n        route: routerState,\n        // Corresponds to the part of the route that will be rendered on the server.\n        node: createPendingCacheNode(navigatedAt, routerState, prefetchData, prefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult),\n        // Because this is non-null, and it gets propagated up through the parent\n        // tasks, the root task will know that it needs to perform a server request.\n        dynamicRequestTree,\n        children: null\n    };\n    return newTask;\n}\nfunction spawnReusedTask(reusedRouterState) {\n    // Create a task that reuses an existing segment, e.g. when reusing\n    // the current active segment in place of a default route.\n    return {\n        route: reusedRouterState,\n        node: null,\n        dynamicRequestTree: null,\n        children: null\n    };\n}\nfunction listenForDynamicRequest(task, responsePromise) {\n    responsePromise.then((param)=>{\n        let { flightData } = param;\n        if (typeof flightData === 'string') {\n            // Happens when navigating to page in `pages` from `app`. We shouldn't\n            // get here because should have already handled this during\n            // the prefetch.\n            return;\n        }\n        for (const normalizedFlightData of flightData){\n            const { segmentPath, tree: serverRouterState, seedData: dynamicData, head: dynamicHead } = normalizedFlightData;\n            if (!dynamicData) {\n                continue;\n            }\n            writeDynamicDataIntoPendingTask(task, segmentPath, serverRouterState, dynamicData, dynamicHead);\n        }\n        // Now that we've exhausted all the data we received from the server, if\n        // there are any remaining pending tasks in the tree, abort them now.\n        // If there's any missing data, it will trigger a lazy fetch.\n        abortTask(task, null);\n    }, (error)=>{\n        // This will trigger an error during render\n        abortTask(task, error);\n    });\n}\nfunction writeDynamicDataIntoPendingTask(rootTask, segmentPath, serverRouterState, dynamicData, dynamicHead) {\n    // The data sent by the server represents only a subtree of the app. We need\n    // to find the part of the task tree that matches the server response, and\n    // fulfill it using the dynamic data.\n    //\n    // segmentPath represents the parent path of subtree. It's a repeating pattern\n    // of parallel route key and segment:\n    //\n    //   [string, Segment, string, Segment, string, Segment, ...]\n    //\n    // Iterate through the path and finish any tasks that match this payload.\n    let task = rootTask;\n    for(let i = 0; i < segmentPath.length; i += 2){\n        const parallelRouteKey = segmentPath[i];\n        const segment = segmentPath[i + 1];\n        const taskChildren = task.children;\n        if (taskChildren !== null) {\n            const taskChild = taskChildren.get(parallelRouteKey);\n            if (taskChild !== undefined) {\n                const taskSegment = taskChild.route[0];\n                if ((0, _matchsegments.matchSegment)(segment, taskSegment)) {\n                    // Found a match for this task. Keep traversing down the task tree.\n                    task = taskChild;\n                    continue;\n                }\n            }\n        }\n        // We didn't find a child task that matches the server data. Exit. We won't\n        // abort the task, though, because a different FlightDataPath may be able to\n        // fulfill it (see loop in listenForDynamicRequest). We only abort tasks\n        // once we've run out of data.\n        return;\n    }\n    finishTaskUsingDynamicDataPayload(task, serverRouterState, dynamicData, dynamicHead);\n}\nfunction finishTaskUsingDynamicDataPayload(task, serverRouterState, dynamicData, dynamicHead) {\n    if (task.dynamicRequestTree === null) {\n        // Everything in this subtree is already complete. Bail out.\n        return;\n    }\n    // dynamicData may represent a larger subtree than the task. Before we can\n    // finish the task, we need to line them up.\n    const taskChildren = task.children;\n    const taskNode = task.node;\n    if (taskChildren === null) {\n        // We've reached the leaf node of the pending task. The server data tree\n        // lines up the pending Cache Node tree. We can now switch to the\n        // normal algorithm.\n        if (taskNode !== null) {\n            finishPendingCacheNode(taskNode, task.route, serverRouterState, dynamicData, dynamicHead);\n            // Set this to null to indicate that this task is now complete.\n            task.dynamicRequestTree = null;\n        }\n        return;\n    }\n    // The server returned more data than we need to finish the task. Skip over\n    // the extra segments until we reach the leaf task node.\n    const serverChildren = serverRouterState[1];\n    const dynamicDataChildren = dynamicData[2];\n    for(const parallelRouteKey in serverRouterState){\n        const serverRouterStateChild = serverChildren[parallelRouteKey];\n        const dynamicDataChild = dynamicDataChildren[parallelRouteKey];\n        const taskChild = taskChildren.get(parallelRouteKey);\n        if (taskChild !== undefined) {\n            const taskSegment = taskChild.route[0];\n            if ((0, _matchsegments.matchSegment)(serverRouterStateChild[0], taskSegment) && dynamicDataChild !== null && dynamicDataChild !== undefined) {\n                // Found a match for this task. Keep traversing down the task tree.\n                return finishTaskUsingDynamicDataPayload(taskChild, serverRouterStateChild, dynamicDataChild, dynamicHead);\n            }\n        }\n    // We didn't find a child task that matches the server data. We won't abort\n    // the task, though, because a different FlightDataPath may be able to\n    // fulfill it (see loop in listenForDynamicRequest). We only abort tasks\n    // once we've run out of data.\n    }\n}\nfunction createPendingCacheNode(navigatedAt, routerState, prefetchData, prefetchHead, isPrefetchHeadPartial, segmentPath, scrollableSegmentsResult) {\n    const routerStateChildren = routerState[1];\n    const prefetchDataChildren = prefetchData !== null ? prefetchData[2] : null;\n    const parallelRoutes = new Map();\n    for(let parallelRouteKey in routerStateChildren){\n        const routerStateChild = routerStateChildren[parallelRouteKey];\n        const prefetchDataChild = prefetchDataChildren !== null ? prefetchDataChildren[parallelRouteKey] : null;\n        const segmentChild = routerStateChild[0];\n        const segmentPathChild = segmentPath.concat([\n            parallelRouteKey,\n            segmentChild\n        ]);\n        const segmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(segmentChild);\n        const newCacheNodeChild = createPendingCacheNode(navigatedAt, routerStateChild, prefetchDataChild === undefined ? null : prefetchDataChild, prefetchHead, isPrefetchHeadPartial, segmentPathChild, scrollableSegmentsResult);\n        const newSegmentMapChild = new Map();\n        newSegmentMapChild.set(segmentKeyChild, newCacheNodeChild);\n        parallelRoutes.set(parallelRouteKey, newSegmentMapChild);\n    }\n    // The head is assigned to every leaf segment delivered by the server. Based\n    // on corresponding logic in fill-lazy-items-till-leaf-with-head.ts\n    const isLeafSegment = parallelRoutes.size === 0;\n    if (isLeafSegment) {\n        // The segment path of every leaf segment (i.e. page) is collected into\n        // a result array. This is used by the LayoutRouter to scroll to ensure that\n        // new pages are visible after a navigation.\n        // TODO: We should use a string to represent the segment path instead of\n        // an array. We already use a string representation for the path when\n        // accessing the Segment Cache, so we can use the same one.\n        scrollableSegmentsResult.push(segmentPath);\n    }\n    const maybePrefetchRsc = prefetchData !== null ? prefetchData[1] : null;\n    const maybePrefetchLoading = prefetchData !== null ? prefetchData[3] : null;\n    return {\n        lazyData: null,\n        parallelRoutes: parallelRoutes,\n        prefetchRsc: maybePrefetchRsc !== undefined ? maybePrefetchRsc : null,\n        prefetchHead: isLeafSegment ? prefetchHead : [\n            null,\n            null\n        ],\n        // TODO: Technically, a loading boundary could contain dynamic data. We must\n        // have separate `loading` and `prefetchLoading` fields to handle this, like\n        // we do for the segment data and head.\n        loading: maybePrefetchLoading !== undefined ? maybePrefetchLoading : null,\n        // Create a deferred promise. This will be fulfilled once the dynamic\n        // response is received from the server.\n        rsc: createDeferredRsc(),\n        head: isLeafSegment ? createDeferredRsc() : null,\n        navigatedAt\n    };\n}\nfunction finishPendingCacheNode(cacheNode, taskState, serverState, dynamicData, dynamicHead) {\n    // Writes a dynamic response into an existing Cache Node tree. This does _not_\n    // create a new tree, it updates the existing tree in-place. So it must follow\n    // the Suspense rules of cache safety — it can resolve pending promises, but\n    // it cannot overwrite existing data. It can add segments to the tree (because\n    // a missing segment will cause the layout router to suspend).\n    // but it cannot delete them.\n    //\n    // We must resolve every promise in the tree, or else it will suspend\n    // indefinitely. If we did not receive data for a segment, we will resolve its\n    // data promise to `null` to trigger a lazy fetch during render.\n    const taskStateChildren = taskState[1];\n    const serverStateChildren = serverState[1];\n    const dataChildren = dynamicData[2];\n    // The router state that we traverse the tree with (taskState) is the same one\n    // that we used to construct the pending Cache Node tree. That way we're sure\n    // to resolve all the pending promises.\n    const parallelRoutes = cacheNode.parallelRoutes;\n    for(let parallelRouteKey in taskStateChildren){\n        const taskStateChild = taskStateChildren[parallelRouteKey];\n        const serverStateChild = serverStateChildren[parallelRouteKey];\n        const dataChild = dataChildren[parallelRouteKey];\n        const segmentMapChild = parallelRoutes.get(parallelRouteKey);\n        const taskSegmentChild = taskStateChild[0];\n        const taskSegmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(taskSegmentChild);\n        const cacheNodeChild = segmentMapChild !== undefined ? segmentMapChild.get(taskSegmentKeyChild) : undefined;\n        if (cacheNodeChild !== undefined) {\n            if (serverStateChild !== undefined && (0, _matchsegments.matchSegment)(taskSegmentChild, serverStateChild[0])) {\n                if (dataChild !== undefined && dataChild !== null) {\n                    // This is the happy path. Recursively update all the children.\n                    finishPendingCacheNode(cacheNodeChild, taskStateChild, serverStateChild, dataChild, dynamicHead);\n                } else {\n                    // The server never returned data for this segment. Trigger a lazy\n                    // fetch during render. This shouldn't happen because the Route Tree\n                    // and the Seed Data tree sent by the server should always be the same\n                    // shape when part of the same server response.\n                    abortPendingCacheNode(taskStateChild, cacheNodeChild, null);\n                }\n            } else {\n                // The server never returned data for this segment. Trigger a lazy\n                // fetch during render.\n                abortPendingCacheNode(taskStateChild, cacheNodeChild, null);\n            }\n        } else {\n        // The server response matches what was expected to receive, but there's\n        // no matching Cache Node in the task tree. This is a bug in the\n        // implementation because we should have created a node for every\n        // segment in the tree that's associated with this task.\n        }\n    }\n    // Use the dynamic data from the server to fulfill the deferred RSC promise\n    // on the Cache Node.\n    const rsc = cacheNode.rsc;\n    const dynamicSegmentData = dynamicData[1];\n    if (rsc === null) {\n        // This is a lazy cache node. We can overwrite it. This is only safe\n        // because we know that the LayoutRouter suspends if `rsc` is `null`.\n        cacheNode.rsc = dynamicSegmentData;\n    } else if (isDeferredRsc(rsc)) {\n        // This is a deferred RSC promise. We can fulfill it with the data we just\n        // received from the server. If it was already resolved by a different\n        // navigation, then this does nothing because we can't overwrite data.\n        rsc.resolve(dynamicSegmentData);\n    } else {\n    // This is not a deferred RSC promise, nor is it empty, so it must have\n    // been populated by a different navigation. We must not overwrite it.\n    }\n    // Check if this is a leaf segment. If so, it will have a `head` property with\n    // a pending promise that needs to be resolved with the dynamic head from\n    // the server.\n    const head = cacheNode.head;\n    if (isDeferredRsc(head)) {\n        head.resolve(dynamicHead);\n    }\n}\nfunction abortTask(task, error) {\n    const cacheNode = task.node;\n    if (cacheNode === null) {\n        // This indicates the task is already complete.\n        return;\n    }\n    const taskChildren = task.children;\n    if (taskChildren === null) {\n        // Reached the leaf task node. This is the root of a pending cache\n        // node tree.\n        abortPendingCacheNode(task.route, cacheNode, error);\n    } else {\n        // This is an intermediate task node. Keep traversing until we reach a\n        // task node with no children. That will be the root of the cache node tree\n        // that needs to be resolved.\n        for (const taskChild of taskChildren.values()){\n            abortTask(taskChild, error);\n        }\n    }\n    // Set this to null to indicate that this task is now complete.\n    task.dynamicRequestTree = null;\n}\nfunction abortPendingCacheNode(routerState, cacheNode, error) {\n    // For every pending segment in the tree, resolve its `rsc` promise to `null`\n    // to trigger a lazy fetch during render.\n    //\n    // Or, if an error object is provided, it will error instead.\n    const routerStateChildren = routerState[1];\n    const parallelRoutes = cacheNode.parallelRoutes;\n    for(let parallelRouteKey in routerStateChildren){\n        const routerStateChild = routerStateChildren[parallelRouteKey];\n        const segmentMapChild = parallelRoutes.get(parallelRouteKey);\n        if (segmentMapChild === undefined) {\n            continue;\n        }\n        const segmentChild = routerStateChild[0];\n        const segmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(segmentChild);\n        const cacheNodeChild = segmentMapChild.get(segmentKeyChild);\n        if (cacheNodeChild !== undefined) {\n            abortPendingCacheNode(routerStateChild, cacheNodeChild, error);\n        } else {\n        // This shouldn't happen because we're traversing the same tree that was\n        // used to construct the cache nodes in the first place.\n        }\n    }\n    const rsc = cacheNode.rsc;\n    if (isDeferredRsc(rsc)) {\n        if (error === null) {\n            // This will trigger a lazy fetch during render.\n            rsc.resolve(null);\n        } else {\n            // This will trigger an error during rendering.\n            rsc.reject(error);\n        }\n    }\n    // Check if this is a leaf segment. If so, it will have a `head` property with\n    // a pending promise that needs to be resolved. If an error was provided, we\n    // will not resolve it with an error, since this is rendered at the root of\n    // the app. We want the segment to error, not the entire app.\n    const head = cacheNode.head;\n    if (isDeferredRsc(head)) {\n        head.resolve(null);\n    }\n}\nfunction updateCacheNodeOnPopstateRestoration(oldCacheNode, routerState) {\n    // A popstate navigation reads data from the local cache. It does not issue\n    // new network requests (unless the cache entries have been evicted). So, we\n    // update the cache to drop the prefetch data for any segment whose dynamic\n    // data was already received. This prevents an unnecessary flash back to PPR\n    // state during a back/forward navigation.\n    //\n    // This function clones the entire cache node tree and sets the `prefetchRsc`\n    // field to `null` to prevent it from being rendered. We can't mutate the node\n    // in place because this is a concurrent data structure.\n    const routerStateChildren = routerState[1];\n    const oldParallelRoutes = oldCacheNode.parallelRoutes;\n    const newParallelRoutes = new Map(oldParallelRoutes);\n    for(let parallelRouteKey in routerStateChildren){\n        const routerStateChild = routerStateChildren[parallelRouteKey];\n        const segmentChild = routerStateChild[0];\n        const segmentKeyChild = (0, _createroutercachekey.createRouterCacheKey)(segmentChild);\n        const oldSegmentMapChild = oldParallelRoutes.get(parallelRouteKey);\n        if (oldSegmentMapChild !== undefined) {\n            const oldCacheNodeChild = oldSegmentMapChild.get(segmentKeyChild);\n            if (oldCacheNodeChild !== undefined) {\n                const newCacheNodeChild = updateCacheNodeOnPopstateRestoration(oldCacheNodeChild, routerStateChild);\n                const newSegmentMapChild = new Map(oldSegmentMapChild);\n                newSegmentMapChild.set(segmentKeyChild, newCacheNodeChild);\n                newParallelRoutes.set(parallelRouteKey, newSegmentMapChild);\n            }\n        }\n    }\n    // Only show prefetched data if the dynamic data is still pending.\n    //\n    // Tehnically, what we're actually checking is whether the dynamic network\n    // response was received. But since it's a streaming response, this does not\n    // mean that all the dynamic data has fully streamed in. It just means that\n    // _some_ of the dynamic data was received. But as a heuristic, we assume that\n    // the rest dynamic data will stream in quickly, so it's still better to skip\n    // the prefetch state.\n    const rsc = oldCacheNode.rsc;\n    const shouldUsePrefetch = isDeferredRsc(rsc) && rsc.status === 'pending';\n    return {\n        lazyData: null,\n        rsc,\n        head: oldCacheNode.head,\n        prefetchHead: shouldUsePrefetch ? oldCacheNode.prefetchHead : [\n            null,\n            null\n        ],\n        prefetchRsc: shouldUsePrefetch ? oldCacheNode.prefetchRsc : null,\n        loading: oldCacheNode.loading,\n        // These are the cloned children we computed above\n        parallelRoutes: newParallelRoutes,\n        navigatedAt: oldCacheNode.navigatedAt\n    };\n}\nconst DEFERRED = Symbol();\n// This type exists to distinguish a DeferredRsc from a Flight promise. It's a\n// compromise to avoid adding an extra field on every Cache Node, which would be\n// awkward because the pre-PPR parts of codebase would need to account for it,\n// too. We can remove it once type Cache Node type is more settled.\nfunction isDeferredRsc(value) {\n    return value && value.tag === DEFERRED;\n}\nfunction createDeferredRsc() {\n    let resolve;\n    let reject;\n    const pendingRsc = new Promise((res, rej)=>{\n        resolve = res;\n        reject = rej;\n    });\n    pendingRsc.status = 'pending';\n    pendingRsc.resolve = (value)=>{\n        if (pendingRsc.status === 'pending') {\n            const fulfilledRsc = pendingRsc;\n            fulfilledRsc.status = 'fulfilled';\n            fulfilledRsc.value = value;\n            resolve(value);\n        }\n    };\n    pendingRsc.reject = (error)=>{\n        if (pendingRsc.status === 'pending') {\n            const rejectedRsc = pendingRsc;\n            rejectedRsc.status = 'rejected';\n            rejectedRsc.reason = error;\n            reject(error);\n        }\n    };\n    pendingRsc.tag = DEFERRED;\n    return pendingRsc;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=ppr-navigations.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9wcHItbmF2aWdhdGlvbnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBMGtDZ0JBLFNBQVM7ZUFBVEE7O0lBMVZBQyx1QkFBdUI7ZUFBdkJBOztJQXZwQkFDLGtCQUFrQjtlQUFsQkE7O0lBNmpDQUMsb0NBQW9DO2VBQXBDQTs7O3FDQXpvQ29COzJDQUNQO2tEQUNRO3lEQUVPO2dEQUNQO0FBaUNyQyxNQUFNQyxzQkFBeUM7SUFDN0NDLE9BQU87SUFDUEMsTUFBTTtJQUNOQyxvQkFBb0I7SUFDcEJDLFVBQVU7QUFDWjtBQWlDTyxTQUFTTixtQkFDZE8sV0FBbUIsRUFDbkJDLFlBQXVCLEVBQ3ZCQyxjQUFpQyxFQUNqQ0MsY0FBaUMsRUFDakNDLFlBQXNDLEVBQ3RDQyxZQUE2QixFQUM3QkMscUJBQThCLEVBQzlCQyxvQkFBNkIsRUFDN0JDLHdCQUFrRDtJQUVsRCxNQUFNQyxjQUF3QyxFQUFFO0lBQ2hELE9BQU9DLDRCQUNMVixhQUNBQyxjQUNBQyxnQkFDQUMsZ0JBQ0EsT0FDQUMsY0FDQUMsY0FDQUMsdUJBQ0FDLHNCQUNBRSxhQUNBRDtBQUVKO0FBRUEsU0FBU0UsNEJBQ1BWLFdBQW1CLEVBQ25CQyxZQUF1QixFQUN2QkMsY0FBaUMsRUFDakNDLGNBQWlDLEVBQ2pDUSxpQkFBMEIsRUFDMUJQLFlBQXNDLEVBQ3RDQyxZQUE2QixFQUM3QkMscUJBQThCLEVBQzlCQyxvQkFBNkIsRUFDN0JFLFdBQThCLEVBQzlCRCx3QkFBa0Q7SUFFbEQsMERBQTBEO0lBQzFELE1BQU1JLHlCQUF5QlYsY0FBYyxDQUFDLEVBQUU7SUFDaEQsTUFBTVcseUJBQXlCVixjQUFjLENBQUMsRUFBRTtJQUNoRCxNQUFNVyx1QkFBdUJWLGlCQUFpQixPQUFPQSxZQUFZLENBQUMsRUFBRSxHQUFHO0lBRXZFLElBQUksQ0FBQ08sbUJBQW1CO1FBQ3RCLHdFQUF3RTtRQUN4RSwwRUFBMEU7UUFDMUUseUVBQXlFO1FBQ3pFLE1BQU1JLGVBQWVaLGNBQWMsQ0FBQyxFQUFFLEtBQUs7UUFDM0MsSUFBSVksY0FBYztZQUNoQixnQ0FBZ0M7WUFDaENKLG9CQUFvQjtRQUN0QjtJQUNGO0lBRUEsTUFBTUssb0JBQW9CZixhQUFhZ0IsY0FBYztJQUVyRCwyRUFBMkU7SUFDM0UsZ0JBQWdCO0lBQ2hCLDBFQUEwRTtJQUMxRSwwRUFBMEU7SUFDMUUsNEVBQTRFO0lBQzVFLDJFQUEyRTtJQUMzRSwwRUFBMEU7SUFDMUUsdUVBQXVFO0lBQ3ZFLHlFQUF5RTtJQUN6RSx3RUFBd0U7SUFDeEUsK0JBQStCO0lBQy9CLE1BQU1DLHlCQUF5QixJQUFJQyxJQUFJSDtJQUV2Qyw0RUFBNEU7SUFDNUUsNEVBQTRFO0lBQzVFLDJFQUEyRTtJQUMzRSw2RUFBNkU7SUFDN0UsbUJBQW1CO0lBQ25CLElBQUlJLDZCQUVBLENBQUM7SUFDTCxJQUFJQyxlQUFlO0lBRW5CLHVFQUF1RTtJQUN2RSw2RUFBNkU7SUFDN0UsZ0VBQWdFO0lBQ2hFLEVBQUU7SUFDRiw0RUFBNEU7SUFDNUUsc0VBQXNFO0lBQ3RFLEVBQUU7SUFDRix1RUFBdUU7SUFDdkUscUNBQXFDO0lBQ3JDLElBQUlDLHNCQUFzQjtJQUMxQiw0RUFBNEU7SUFDNUUsMEVBQTBFO0lBQzFFLDhFQUE4RTtJQUM5RSxxQ0FBcUM7SUFDckMsMkVBQTJFO0lBQzNFLHlEQUF5RDtJQUN6RCwwQkFBMEI7SUFDMUIsSUFBSUMsNkJBRUEsQ0FBQztJQUVMLElBQUssSUFBSUMsb0JBQW9CWCx1QkFBd0I7UUFDbkQsTUFBTVksc0JBQ0paLHNCQUFzQixDQUFDVyxpQkFBaUI7UUFDMUMsTUFBTUUsc0JBQ0pkLHNCQUFzQixDQUFDWSxpQkFBaUI7UUFDMUMsTUFBTUcscUJBQXFCWCxrQkFBa0JZLEdBQUcsQ0FBQ0o7UUFDakQsTUFBTUssb0JBQ0pmLHlCQUF5QixPQUNyQkEsb0JBQW9CLENBQUNVLGlCQUFpQixHQUN0QztRQUVOLE1BQU1NLGtCQUFrQkwsbUJBQW1CLENBQUMsRUFBRTtRQUM5QyxNQUFNTSxzQkFBc0J0QixZQUFZdUIsTUFBTSxDQUFDO1lBQzdDUjtZQUNBTTtTQUNEO1FBQ0QsTUFBTUcscUJBQXFCQyxDQUFBQSxHQUFBQSxzQkFBQUEsb0JBQW9CLEVBQUNKO1FBRWhELE1BQU1LLGtCQUNKVCx3QkFBd0JVLFlBQVlWLG1CQUFtQixDQUFDLEVBQUUsR0FBR1U7UUFFL0QsTUFBTUMsb0JBQ0pWLHVCQUF1QlMsWUFDbkJULG1CQUFtQkMsR0FBRyxDQUFDSyxzQkFDdkJHO1FBRU4sSUFBSUU7UUFDSixJQUFJUixvQkFBb0JTLFNBQUFBLG1CQUFtQixFQUFFO1lBQzNDLDBEQUEwRDtZQUMxRCxFQUFFO1lBQ0YseUVBQXlFO1lBQ3pFLHVFQUF1RTtZQUN2RSxzRUFBc0U7WUFDdEUsb0VBQW9FO1lBQ3BFLFdBQVc7WUFDWCxJQUFJYix3QkFBd0JVLFdBQVc7Z0JBQ3JDLHNFQUFzRTtnQkFDdEUsb0VBQW9FO2dCQUNwRSxtRUFBbUU7Z0JBQ25FRSxZQUFZRSxnQkFBZ0JkO1lBQzlCLE9BQU87Z0JBQ0wsb0VBQW9FO2dCQUNwRVksWUFBWUcsMkJBQ1Z6QyxhQUNBMEIscUJBQ0FELHFCQUNBWSxtQkFDQTFCLG1CQUNBa0Isc0JBQXNCTyxZQUFZUCxvQkFBb0IsTUFDdER4QixjQUNBQyx1QkFDQXlCLHFCQUNBdkI7WUFFSjtRQUNGLE9BQU8sSUFDTEQsd0JBQ0EsbUNBQW1DO1FBQ25DLHFFQUFxRTtRQUNyRSxzRUFBc0U7UUFDdEUsc0VBQXNFO1FBQ3RFLHdFQUF3RTtRQUN4RSx5REFBeUQ7UUFDekRtQyxPQUFPQyxJQUFJLENBQUNsQixtQkFBbUIsQ0FBQyxFQUFFLEVBQUVtQixNQUFNLEtBQUssR0FDL0M7WUFDQSxtRUFBbUU7WUFDbkUsMEVBQTBFO1lBQzFFLHlFQUF5RTtZQUN6RSw2QkFBNkI7WUFDN0IsRUFBRTtZQUNGLHNFQUFzRTtZQUN0RSx5RUFBeUU7WUFDekUsc0VBQXNFO1lBQ3RFLGdDQUFnQztZQUNoQyxFQUFFO1lBQ0YscUVBQXFFO1lBQ3JFLDBFQUEwRTtZQUMxRSx3RUFBd0U7WUFDeEUsMkNBQTJDO1lBQzNDLEVBQUU7WUFDRixtRUFBbUU7WUFDbkUsdUVBQXVFO1lBQ3ZFLDBEQUEwRDtZQUMxRE4sWUFBWUcsMkJBQ1Z6QyxhQUNBMEIscUJBQ0FELHFCQUNBWSxtQkFDQTFCLG1CQUNBa0Isc0JBQXNCTyxZQUFZUCxvQkFBb0IsTUFDdER4QixjQUNBQyx1QkFDQXlCLHFCQUNBdkI7UUFFSixPQUFPLElBQ0xrQix3QkFBd0JVLGFBQ3hCRCxvQkFBb0JDLGFBQ3BCUyxDQUFBQSxHQUFBQSxlQUFBQSxZQUFBQSxFQUFhZixpQkFBaUJLLGtCQUM5QjtZQUNBLElBQ0VFLHNCQUFzQkQsYUFDdEJWLHdCQUF3QlUsV0FDeEI7Z0JBQ0Esd0VBQXdFO2dCQUN4RSxnQkFBZ0I7Z0JBQ2hCRSxZQUFZNUIsNEJBQ1ZWLGFBQ0FxQyxtQkFDQVgscUJBQ0FELHFCQUNBZCxtQkFDQWtCLG1CQUNBeEIsY0FDQUMsdUJBQ0FDLHNCQUNBd0IscUJBQ0F2QjtZQUVKLE9BQU87Z0JBQ0wsaUVBQWlFO2dCQUNqRSxpQkFBaUI7Z0JBQ2pCOEIsWUFBWUcsMkJBQ1Z6QyxhQUNBMEIscUJBQ0FELHFCQUNBWSxtQkFDQTFCLG1CQUNBa0Isc0JBQXNCTyxZQUFZUCxvQkFBb0IsTUFDdER4QixjQUNBQyx1QkFDQXlCLHFCQUNBdkI7WUFFSjtRQUNGLE9BQU87WUFDTCxtREFBbUQ7WUFDbkQ4QixZQUFZRywyQkFDVnpDLGFBQ0EwQixxQkFDQUQscUJBQ0FZLG1CQUNBMUIsbUJBQ0FrQixzQkFBc0JPLFlBQVlQLG9CQUFvQixNQUN0RHhCLGNBQ0FDLHVCQUNBeUIscUJBQ0F2QjtRQUVKO1FBRUEsSUFBSThCLGNBQWMsTUFBTTtZQUN0Qiw0Q0FBNEM7WUFFNUMsSUFBSUEsVUFBVTFDLEtBQUssS0FBSyxNQUFNO2dCQUM1QixpRUFBaUU7Z0JBQ2pFLG9EQUFvRDtnQkFDcEQsT0FBT0Q7WUFDVDtZQUVBLElBQUkwQixpQkFBaUIsTUFBTTtnQkFDekJBLGVBQWUsSUFBSUY7WUFDckI7WUFDQUUsYUFBYXlCLEdBQUcsQ0FBQ3RCLGtCQUFrQmM7WUFDbkMsTUFBTVMsb0JBQW9CVCxVQUFVekMsSUFBSTtZQUN4QyxJQUFJa0Qsc0JBQXNCLE1BQU07Z0JBQzlCLE1BQU1DLHFCQUFzQyxJQUFJN0IsSUFBSVE7Z0JBQ3BEcUIsbUJBQW1CRixHQUFHLENBQUNiLG9CQUFvQmM7Z0JBQzNDN0IsdUJBQXVCNEIsR0FBRyxDQUFDdEIsa0JBQWtCd0I7WUFDL0M7WUFFQSxvRUFBb0U7WUFDcEUsdUVBQXVFO1lBQ3ZFLFlBQVk7WUFDWixNQUFNQyxpQkFBaUJYLFVBQVUxQyxLQUFLO1lBQ3RDd0IsMEJBQTBCLENBQUNJLGlCQUFpQixHQUFHeUI7WUFFL0MsTUFBTUMsMEJBQTBCWixVQUFVeEMsa0JBQWtCO1lBQzVELElBQUlvRCw0QkFBNEIsTUFBTTtnQkFDcEMsMENBQTBDO2dCQUMxQzVCLHNCQUFzQjtnQkFDdEJDLDBCQUEwQixDQUFDQyxpQkFBaUIsR0FBRzBCO1lBQ2pELE9BQU87Z0JBQ0wzQiwwQkFBMEIsQ0FBQ0MsaUJBQWlCLEdBQUd5QjtZQUNqRDtRQUNGLE9BQU87WUFDTCxtRUFBbUU7WUFDbkU3QiwwQkFBMEIsQ0FBQ0ksaUJBQWlCLEdBQUdDO1lBQy9DRiwwQkFBMEIsQ0FBQ0MsaUJBQWlCLEdBQUdDO1FBQ2pEO0lBQ0Y7SUFFQSxJQUFJSixpQkFBaUIsTUFBTTtRQUN6Qiw2QkFBNkI7UUFDN0IsT0FBTztJQUNUO0lBRUEsTUFBTThCLGVBQStCO1FBQ25DQyxVQUFVO1FBQ1ZDLEtBQUtwRCxhQUFhb0QsR0FBRztRQUNyQiwwRUFBMEU7UUFDMUUscUVBQXFFO1FBQ3JFLDJFQUEyRTtRQUMzRSwwRUFBMEU7UUFDMUUsMkVBQTJFO1FBQzNFLHFDQUFxQztRQUNyQ0MsYUFBYXJELGFBQWFxRCxXQUFXO1FBQ3JDQyxNQUFNdEQsYUFBYXNELElBQUk7UUFDdkJsRCxjQUFjSixhQUFhSSxZQUFZO1FBQ3ZDbUQsU0FBU3ZELGFBQWF1RCxPQUFPO1FBRTdCLHlFQUF5RTtRQUN6RXZDLGdCQUFnQkM7UUFFaEJsQjtJQUNGO0lBRUEsT0FBTztRQUNMLGtFQUFrRTtRQUNsRUosT0FBTzZELGdDQUNMdEQsZ0JBQ0FpQjtRQUVGdkIsTUFBTXNEO1FBQ05yRCxvQkFBb0J3QixzQkFDaEJtQyxnQ0FDRXRELGdCQUNBb0IsOEJBRUY7UUFDSnhCLFVBQVVzQjtJQUNaO0FBQ0Y7QUFFQSxTQUFTb0IsMkJBQ1B6QyxXQUFtQixFQUNuQkUsY0FBd0MsRUFDeENDLGNBQWlDLEVBQ2pDdUQsaUJBQW1DLEVBQ25DL0MsaUJBQTBCLEVBQzFCUCxZQUFzQyxFQUN0Q3VELDJCQUE0QyxFQUM1Q3JELHFCQUE4QixFQUM5QkcsV0FBOEIsRUFDOUJELHdCQUFrRDtJQUVsRCxJQUFJLENBQUNHLG1CQUFtQjtRQUN0Qix3RUFBd0U7UUFDeEUsMEVBQTBFO1FBQzFFLDJFQUEyRTtRQUMzRSwwREFBMEQ7UUFDMUQsRUFBRTtRQUNGLHVFQUF1RTtRQUN2RSx1RUFBdUU7UUFDdkUsMkVBQTJFO1FBQzNFLDJFQUEyRTtRQUMzRSx5Q0FBeUM7UUFDekMsRUFBRTtRQUNGLDJFQUEyRTtRQUMzRSxvRUFBb0U7UUFDcEUsRUFBRTtRQUNGLG9EQUFvRDtRQUNwRCxFQUFFO1FBQ0Ysc0VBQXNFO1FBQ3RFLDRFQUE0RTtRQUM1RSx5REFBeUQ7UUFDekQsSUFDRVQsbUJBQW1Ca0MsYUFDbkJ3QixDQUFBQSxHQUFBQSw2QkFBQUEsMkJBQUFBLEVBQTRCMUQsZ0JBQWdCQyxpQkFDNUM7WUFDQSwyREFBMkQ7WUFDM0QsT0FBT1I7UUFDVDtJQUNGO0lBQ0EsT0FBT2tFLDRCQUNMN0QsYUFDQUcsZ0JBQ0F1RCxtQkFDQXRELGNBQ0F1RCw2QkFDQXJELHVCQUNBRyxhQUNBRDtBQUVKO0FBRUEsU0FBU3FELDRCQUNQN0QsV0FBbUIsRUFDbkI4RCxXQUE4QixFQUM5QkosaUJBQW1DLEVBQ25DdEQsWUFBc0MsRUFDdEN1RCwyQkFBNEMsRUFDNUNyRCxxQkFBOEIsRUFDOUJHLFdBQThCLEVBQzlCRCx3QkFBa0Q7SUFFbEQsMEVBQTBFO0lBQzFFLDRFQUE0RTtJQUM1RSw2RUFBNkU7SUFFN0UsNEVBQTRFO0lBQzVFLG1FQUFtRTtJQUNuRSxNQUFNdUQsc0JBQXNCRCxXQUFXLENBQUMsRUFBRTtJQUMxQyxNQUFNRSxnQkFBZ0J0QixPQUFPQyxJQUFJLENBQUNvQixxQkFBcUJuQixNQUFNLEtBQUs7SUFFbEUsNkVBQTZFO0lBQzdFLDJFQUEyRTtJQUMzRSw4RUFBOEU7SUFDOUUsMkVBQTJFO0lBQzNFLDJCQUEyQjtJQUMzQixJQUFJUztJQUNKLElBQUlHO0lBQ0osSUFBSUQ7SUFDSixJQUFJVTtJQUNKLElBQ0VQLHNCQUFzQnRCLGFBQ3RCLG9FQUFvRTtJQUNwRSxvRUFBb0U7SUFDcEUsd0VBQXdFO0lBQ3hFc0Isa0JBQWtCMUQsV0FBVyxHQUFHa0Usb0JBQUFBLG9CQUFvQixHQUFHbEUsYUFDdkQ7UUFDQSx5RUFBeUU7UUFDekUsaURBQWlEO1FBQ2pEcUQsTUFBTUssa0JBQWtCTCxHQUFHO1FBQzNCRyxVQUFVRSxrQkFBa0JGLE9BQU87UUFDbkNELE9BQU9HLGtCQUFrQkgsSUFBSTtRQUU3QiwwRUFBMEU7UUFDMUVVLHVCQUF1QlAsa0JBQWtCMUQsV0FBVztJQUN0RCxPQUFPLElBQUlJLGlCQUFpQixNQUFNO1FBQ2hDLDBFQUEwRTtRQUMxRSx3RUFBd0U7UUFDeEUsK0RBQStEO1FBQy9EaUQsTUFBTWpELFlBQVksQ0FBQyxFQUFFO1FBQ3JCb0QsVUFBVXBELFlBQVksQ0FBQyxFQUFFO1FBQ3pCbUQsT0FBT1MsZ0JBQWdCTCw4QkFBOEI7UUFDckQsd0VBQXdFO1FBQ3hFLHdFQUF3RTtRQUN4RSx5QkFBeUI7UUFDekJNLHVCQUF1QmpFO1FBQ3ZCLE1BQU1tRSx1QkFBdUIvRCxZQUFZLENBQUMsRUFBRTtRQUM1QyxJQUNFLHdCQUVBLGVBRnVDLDBEQUVrQztRQUN4RUUseUJBQXlCMEQsZUFDMUI7WUFDQSx5RUFBeUU7WUFDekUsOENBQThDO1lBQzlDLE9BQU9JLGlCQUNMcEUsYUFDQThELGFBQ0ExRCxjQUNBdUQsNkJBQ0FyRCx1QkFDQUcsYUFDQUQ7UUFFSixPQUFPO1FBQ0wsZ0VBQWdFO1FBQ2hFLHNCQUFzQjtRQUN4QjtJQUNGLE9BQU87UUFDTCwyRUFBMkU7UUFDM0UseUVBQXlFO1FBQ3pFLDhEQUE4RDtRQUM5RCxtQkFBbUI7UUFDbkIsT0FBTzRELGlCQUNMcEUsYUFDQThELGFBQ0EsTUFDQUgsNkJBQ0FyRCx1QkFDQUcsYUFDQUQ7SUFFSjtJQUVBLDhFQUE4RTtJQUM5RSx3RUFBd0U7SUFDeEUsNkNBQTZDO0lBQzdDLE1BQU1NLHVCQUF1QlYsaUJBQWlCLE9BQU9BLFlBQVksQ0FBQyxFQUFFLEdBQUc7SUFDdkUsTUFBTWlCLGVBQWUsSUFBSUY7SUFDekIsTUFBTWtELDRCQUNKWCxzQkFBc0J0QixZQUFZc0Isa0JBQWtCekMsY0FBYyxHQUFHO0lBQ3ZFLE1BQU1xRCxvQkFBb0IsSUFBSW5ELElBQUlrRDtJQUNsQyxJQUFJOUMsNkJBRUEsQ0FBQztJQUNMLElBQUlELHNCQUFzQjtJQUMxQixJQUFJMEMsZUFBZTtRQUNqQix1RUFBdUU7UUFDdkUsNEVBQTRFO1FBQzVFLDRDQUE0QztRQUM1Qyx3RUFBd0U7UUFDeEUscUVBQXFFO1FBQ3JFLDJEQUEyRDtRQUMzRHhELHlCQUF5QitELElBQUksQ0FBQzlEO0lBQ2hDLE9BQU87UUFDTCxJQUFLLElBQUllLG9CQUFvQnVDLG9CQUFxQjtZQUNoRCxNQUFNUyxtQkFDSlQsbUJBQW1CLENBQUN2QyxpQkFBaUI7WUFDdkMsTUFBTUssb0JBQ0pmLHlCQUF5QixPQUNyQkEsb0JBQW9CLENBQUNVLGlCQUFpQixHQUN0QztZQUNOLE1BQU1pRCwwQkFDSkosOEJBQThCLE9BQzFCQSwwQkFBMEJ6QyxHQUFHLENBQUNKLG9CQUM5Qlk7WUFDTixNQUFNc0MsZUFBZUYsZ0JBQWdCLENBQUMsRUFBRTtZQUN4QyxNQUFNRyxtQkFBbUJsRSxZQUFZdUIsTUFBTSxDQUFDO2dCQUMxQ1I7Z0JBQ0FrRDthQUNEO1lBQ0QsTUFBTUUsa0JBQWtCMUMsQ0FBQUEsR0FBQUEsc0JBQUFBLG9CQUFBQSxFQUFxQndDO1lBRTdDLE1BQU1HLHlCQUNKSiw0QkFBNEJyQyxZQUN4QnFDLHdCQUF3QjdDLEdBQUcsQ0FBQ2dELG1CQUM1QnhDO1lBRU4sTUFBTUUsWUFBWXVCLDRCQUNoQjdELGFBQ0F3RSxrQkFDQUssd0JBQ0FoRCxtQkFDQThCLDZCQUNBckQsdUJBQ0FxRSxrQkFDQW5FO1lBRUZhLGFBQWF5QixHQUFHLENBQUN0QixrQkFBa0JjO1lBQ25DLE1BQU1ZLDBCQUEwQlosVUFBVXhDLGtCQUFrQjtZQUM1RCxJQUFJb0QsNEJBQTRCLE1BQU07Z0JBQ3BDLDBDQUEwQztnQkFDMUM1QixzQkFBc0I7Z0JBQ3RCQywwQkFBMEIsQ0FBQ0MsaUJBQWlCLEdBQUcwQjtZQUNqRCxPQUFPO2dCQUNMM0IsMEJBQTBCLENBQUNDLGlCQUFpQixHQUFHZ0Q7WUFDakQ7WUFDQSxNQUFNekIsb0JBQW9CVCxVQUFVekMsSUFBSTtZQUN4QyxJQUFJa0Qsc0JBQXNCLE1BQU07Z0JBQzlCLE1BQU1DLHFCQUFzQyxJQUFJN0I7Z0JBQ2hENkIsbUJBQW1CRixHQUFHLENBQUM4QixpQkFBaUI3QjtnQkFDeEN1QixrQkFBa0J4QixHQUFHLENBQUN0QixrQkFBa0J3QjtZQUMxQztRQUNGO0lBQ0Y7SUFFQSxPQUFPO1FBQ0wsa0RBQWtEO1FBQ2xELHVFQUF1RTtRQUN2RSw0RUFBNEU7UUFDNUUsc0JBQXNCO1FBQ3RCcEQsT0FBT2tFO1FBQ1BqRSxNQUFNO1lBQ0p1RCxVQUFVO1lBQ1YsK0RBQStEO1lBQy9ELHVCQUF1QjtZQUN2QkM7WUFDQUMsYUFBYTtZQUNiQztZQUNBbEQsY0FBYztZQUNkbUQ7WUFDQXZDLGdCQUFnQnFEO1lBQ2hCdEUsYUFBYWlFO1FBQ2Y7UUFDQW5FLG9CQUFvQndCLHNCQUNoQm1DLGdDQUFnQ0ssYUFBYXZDLDhCQUM3QztRQUNKeEIsVUFBVXNCO0lBQ1o7QUFDRjtBQUVBLFNBQVNvQyxnQ0FDUHFCLGVBQWtDLEVBQ2xDQyxXQUE4RDtJQUU5RCxNQUFNQyxRQUEyQjtRQUFDRixlQUFlLENBQUMsRUFBRTtRQUFFQztLQUFZO0lBQ2xFLDRFQUE0RTtJQUM1RSwyRUFBMkU7SUFDM0UsdUNBQXVDO0lBQ3ZDLElBQUksS0FBS0QsaUJBQWlCO1FBQ3hCRSxLQUFLLENBQUMsRUFBRSxHQUFHRixlQUFlLENBQUMsRUFBRTtJQUMvQjtJQUNBLElBQUksS0FBS0EsaUJBQWlCO1FBQ3hCRSxLQUFLLENBQUMsRUFBRSxHQUFHRixlQUFlLENBQUMsRUFBRTtJQUMvQjtJQUNBLElBQUksS0FBS0EsaUJBQWlCO1FBQ3hCRSxLQUFLLENBQUMsRUFBRSxHQUFHRixlQUFlLENBQUMsRUFBRTtJQUMvQjtJQUNBLE9BQU9FO0FBQ1Q7QUFFQSxTQUFTWixpQkFDUHBFLFdBQW1CLEVBQ25COEQsV0FBOEIsRUFDOUIxRCxZQUFzQyxFQUN0Q0MsWUFBNkIsRUFDN0JDLHFCQUE4QixFQUM5QkcsV0FBOEIsRUFDOUJELHdCQUFrRDtJQUVsRCxzRUFBc0U7SUFFdEUsNkVBQTZFO0lBQzdFLDJEQUEyRDtJQUMzRCxNQUFNVixxQkFBcUIyRCxnQ0FDekJLLGFBQ0FBLFdBQVcsQ0FBQyxFQUFFO0lBRWhCaEUsa0JBQWtCLENBQUMsRUFBRSxHQUFHO0lBRXhCLE1BQU1tRixVQUFnQjtRQUNwQnJGLE9BQU9rRTtRQUVQLDRFQUE0RTtRQUM1RWpFLE1BQU1xRix1QkFDSmxGLGFBQ0E4RCxhQUNBMUQsY0FDQUMsY0FDQUMsdUJBQ0FHLGFBQ0FEO1FBRUYseUVBQXlFO1FBQ3pFLDRFQUE0RTtRQUM1RVY7UUFDQUMsVUFBVTtJQUNaO0lBQ0EsT0FBT2tGO0FBQ1Q7QUFFQSxTQUFTekMsZ0JBQWdCMkMsaUJBQW9DO0lBQzNELG1FQUFtRTtJQUNuRSwwREFBMEQ7SUFDMUQsT0FBTztRQUNMdkYsT0FBT3VGO1FBQ1B0RixNQUFNO1FBQ05DLG9CQUFvQjtRQUNwQkMsVUFBVTtJQUNaO0FBQ0Y7QUFpQk8sU0FBU1Asd0JBQ2Q0RixJQUF1QixFQUN2QkMsZUFBbUQ7SUFFbkRBLGdCQUFnQkMsSUFBSSxDQUNsQjtZQUFDLEVBQUVDLFVBQVUsRUFBNkI7UUFDeEMsSUFBSSxPQUFPQSxlQUFlLFVBQVU7WUFDbEMsc0VBQXNFO1lBQ3RFLDJEQUEyRDtZQUMzRCxnQkFBZ0I7WUFDaEI7UUFDRjtRQUNBLEtBQUssTUFBTUMsd0JBQXdCRCxXQUFZO1lBQzdDLE1BQU0sRUFDSjlFLFdBQVcsRUFDWGdGLE1BQU1DLGlCQUFpQixFQUN2QkMsVUFBVUMsV0FBVyxFQUNyQnJDLE1BQU1zQyxXQUFXLEVBQ2xCLEdBQUdMO1lBRUosSUFBSSxDQUFDSSxhQUFhO2dCQUloQjtZQUNGO1lBRUFFLGdDQUNFVixNQUNBM0UsYUFDQWlGLG1CQUNBRSxhQUNBQztRQUVKO1FBRUEsd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSw2REFBNkQ7UUFDN0R0RyxVQUFVNkYsTUFBTTtJQUNsQixHQUNBLENBQUNXO1FBQ0MsMkNBQTJDO1FBQzNDeEcsVUFBVTZGLE1BQU1XO0lBQ2xCO0FBRUo7QUFFQSxTQUFTRCxnQ0FDUEUsUUFBMkIsRUFDM0J2RixXQUE4QixFQUM5QmlGLGlCQUFvQyxFQUNwQ0UsV0FBOEIsRUFDOUJDLFdBQXFCO0lBRXJCLDRFQUE0RTtJQUM1RSwwRUFBMEU7SUFDMUUscUNBQXFDO0lBQ3JDLEVBQUU7SUFDRiw4RUFBOEU7SUFDOUUscUNBQXFDO0lBQ3JDLEVBQUU7SUFDRiw2REFBNkQ7SUFDN0QsRUFBRTtJQUNGLHlFQUF5RTtJQUN6RSxJQUFJVCxPQUFPWTtJQUNYLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJeEYsWUFBWW1DLE1BQU0sRUFBRXFELEtBQUssRUFBRztRQUM5QyxNQUFNekUsbUJBQTJCZixXQUFXLENBQUN3RixFQUFFO1FBQy9DLE1BQU1DLFVBQW1CekYsV0FBVyxDQUFDd0YsSUFBSSxFQUFFO1FBQzNDLE1BQU01RSxlQUFlK0QsS0FBS3JGLFFBQVE7UUFDbEMsSUFBSXNCLGlCQUFpQixNQUFNO1lBQ3pCLE1BQU1pQixZQUFZakIsYUFBYU8sR0FBRyxDQUFDSjtZQUNuQyxJQUFJYyxjQUFjRixXQUFXO2dCQUMzQixNQUFNK0QsY0FBYzdELFVBQVUxQyxLQUFLLENBQUMsRUFBRTtnQkFDdEMsSUFBSWlELENBQUFBLEdBQUFBLGVBQUFBLFlBQUFBLEVBQWFxRCxTQUFTQyxjQUFjO29CQUN0QyxtRUFBbUU7b0JBQ25FZixPQUFPOUM7b0JBQ1A7Z0JBQ0Y7WUFDRjtRQUNGO1FBQ0EsMkVBQTJFO1FBQzNFLDRFQUE0RTtRQUM1RSx3RUFBd0U7UUFDeEUsOEJBQThCO1FBQzlCO0lBQ0Y7SUFFQThELGtDQUNFaEIsTUFDQU0sbUJBQ0FFLGFBQ0FDO0FBRUo7QUFFQSxTQUFTTyxrQ0FDUGhCLElBQXVCLEVBQ3ZCTSxpQkFBb0MsRUFDcENFLFdBQThCLEVBQzlCQyxXQUFxQjtJQUVyQixJQUFJVCxLQUFLdEYsa0JBQWtCLEtBQUssTUFBTTtRQUNwQyw0REFBNEQ7UUFDNUQ7SUFDRjtJQUVBLDBFQUEwRTtJQUMxRSw0Q0FBNEM7SUFDNUMsTUFBTXVCLGVBQWUrRCxLQUFLckYsUUFBUTtJQUNsQyxNQUFNc0csV0FBV2pCLEtBQUt2RixJQUFJO0lBQzFCLElBQUl3QixpQkFBaUIsTUFBTTtRQUN6Qix3RUFBd0U7UUFDeEUsaUVBQWlFO1FBQ2pFLG9CQUFvQjtRQUNwQixJQUFJZ0YsYUFBYSxNQUFNO1lBQ3JCQyx1QkFDRUQsVUFDQWpCLEtBQUt4RixLQUFLLEVBQ1Y4RixtQkFDQUUsYUFDQUM7WUFFRiwrREFBK0Q7WUFDL0RULEtBQUt0RixrQkFBa0IsR0FBRztRQUM1QjtRQUNBO0lBQ0Y7SUFDQSwyRUFBMkU7SUFDM0Usd0RBQXdEO0lBQ3hELE1BQU15RyxpQkFBaUJiLGlCQUFpQixDQUFDLEVBQUU7SUFDM0MsTUFBTWMsc0JBQXNCWixXQUFXLENBQUMsRUFBRTtJQUUxQyxJQUFLLE1BQU1wRSxvQkFBb0JrRSxrQkFBbUI7UUFDaEQsTUFBTWUseUJBQ0pGLGNBQWMsQ0FBQy9FLGlCQUFpQjtRQUNsQyxNQUFNa0YsbUJBQ0pGLG1CQUFtQixDQUFDaEYsaUJBQWlCO1FBRXZDLE1BQU1jLFlBQVlqQixhQUFhTyxHQUFHLENBQUNKO1FBQ25DLElBQUljLGNBQWNGLFdBQVc7WUFDM0IsTUFBTStELGNBQWM3RCxVQUFVMUMsS0FBSyxDQUFDLEVBQUU7WUFDdEMsSUFDRWlELENBQUFBLEdBQUFBLGVBQUFBLFlBQUFBLEVBQWE0RCxzQkFBc0IsQ0FBQyxFQUFFLEVBQUVOLGdCQUN4Q08scUJBQXFCLFFBQ3JCQSxxQkFBcUJ0RSxXQUNyQjtnQkFDQSxtRUFBbUU7Z0JBQ25FLE9BQU9nRSxrQ0FDTDlELFdBQ0FtRSx3QkFDQUMsa0JBQ0FiO1lBRUo7UUFDRjtJQUNBLDJFQUEyRTtJQUMzRSxzRUFBc0U7SUFDdEUsd0VBQXdFO0lBQ3hFLDhCQUE4QjtJQUNoQztBQUNGO0FBRUEsU0FBU1gsdUJBQ1BsRixXQUFtQixFQUNuQjhELFdBQThCLEVBQzlCMUQsWUFBc0MsRUFDdENDLFlBQTZCLEVBQzdCQyxxQkFBOEIsRUFDOUJHLFdBQThCLEVBQzlCRCx3QkFBa0Q7SUFFbEQsTUFBTXVELHNCQUFzQkQsV0FBVyxDQUFDLEVBQUU7SUFDMUMsTUFBTWhELHVCQUF1QlYsaUJBQWlCLE9BQU9BLFlBQVksQ0FBQyxFQUFFLEdBQUc7SUFFdkUsTUFBTWEsaUJBQWlCLElBQUlFO0lBQzNCLElBQUssSUFBSUssb0JBQW9CdUMsb0JBQXFCO1FBQ2hELE1BQU1TLG1CQUNKVCxtQkFBbUIsQ0FBQ3ZDLGlCQUFpQjtRQUN2QyxNQUFNSyxvQkFDSmYseUJBQXlCLE9BQ3JCQSxvQkFBb0IsQ0FBQ1UsaUJBQWlCLEdBQ3RDO1FBRU4sTUFBTWtELGVBQWVGLGdCQUFnQixDQUFDLEVBQUU7UUFDeEMsTUFBTUcsbUJBQW1CbEUsWUFBWXVCLE1BQU0sQ0FBQztZQUMxQ1I7WUFDQWtEO1NBQ0Q7UUFDRCxNQUFNRSxrQkFBa0IxQyxDQUFBQSxHQUFBQSxzQkFBQUEsb0JBQUFBLEVBQXFCd0M7UUFFN0MsTUFBTTNCLG9CQUFvQm1DLHVCQUN4QmxGLGFBQ0F3RSxrQkFDQTNDLHNCQUFzQk8sWUFBWSxPQUFPUCxtQkFDekN4QixjQUNBQyx1QkFDQXFFLGtCQUNBbkU7UUFHRixNQUFNd0MscUJBQXNDLElBQUk3QjtRQUNoRDZCLG1CQUFtQkYsR0FBRyxDQUFDOEIsaUJBQWlCN0I7UUFDeEM5QixlQUFlNkIsR0FBRyxDQUFDdEIsa0JBQWtCd0I7SUFDdkM7SUFFQSw0RUFBNEU7SUFDNUUsbUVBQW1FO0lBQ25FLE1BQU1nQixnQkFBZ0IvQyxlQUFlMEYsSUFBSSxLQUFLO0lBRTlDLElBQUkzQyxlQUFlO1FBQ2pCLHVFQUF1RTtRQUN2RSw0RUFBNEU7UUFDNUUsNENBQTRDO1FBQzVDLHdFQUF3RTtRQUN4RSxxRUFBcUU7UUFDckUsMkRBQTJEO1FBQzNEeEQseUJBQXlCK0QsSUFBSSxDQUFDOUQ7SUFDaEM7SUFFQSxNQUFNbUcsbUJBQW1CeEcsaUJBQWlCLE9BQU9BLFlBQVksQ0FBQyxFQUFFLEdBQUc7SUFDbkUsTUFBTXlHLHVCQUF1QnpHLGlCQUFpQixPQUFPQSxZQUFZLENBQUMsRUFBRSxHQUFHO0lBQ3ZFLE9BQU87UUFDTGdELFVBQVU7UUFDVm5DLGdCQUFnQkE7UUFFaEJxQyxhQUFhc0QscUJBQXFCeEUsWUFBWXdFLG1CQUFtQjtRQUNqRXZHLGNBQWMyRCxnQkFBZ0IzRCxlQUFlO1lBQUM7WUFBTTtTQUFLO1FBRXpELDRFQUE0RTtRQUM1RSw0RUFBNEU7UUFDNUUsdUNBQXVDO1FBQ3ZDbUQsU0FBU3FELHlCQUF5QnpFLFlBQVl5RSx1QkFBdUI7UUFFckUscUVBQXFFO1FBQ3JFLHdDQUF3QztRQUN4Q3hELEtBQUt5RDtRQUNMdkQsTUFBTVMsZ0JBQWlCOEMsc0JBQTBDO1FBRWpFOUc7SUFDRjtBQUNGO0FBRUEsU0FBU3NHLHVCQUNQUyxTQUFvQixFQUNwQkMsU0FBNEIsRUFDNUJDLFdBQThCLEVBQzlCckIsV0FBOEIsRUFDOUJDLFdBQXFCO0lBRXJCLDhFQUE4RTtJQUM5RSw4RUFBOEU7SUFDOUUsNEVBQTRFO0lBQzVFLDhFQUE4RTtJQUM5RSw4REFBOEQ7SUFDOUQsNkJBQTZCO0lBQzdCLEVBQUU7SUFDRixxRUFBcUU7SUFDckUsOEVBQThFO0lBQzlFLGdFQUFnRTtJQUNoRSxNQUFNcUIsb0JBQW9CRixTQUFTLENBQUMsRUFBRTtJQUN0QyxNQUFNRyxzQkFBc0JGLFdBQVcsQ0FBQyxFQUFFO0lBQzFDLE1BQU1HLGVBQWV4QixXQUFXLENBQUMsRUFBRTtJQUVuQyw4RUFBOEU7SUFDOUUsNkVBQTZFO0lBQzdFLHVDQUF1QztJQUN2QyxNQUFNM0UsaUJBQWlCOEYsVUFBVTlGLGNBQWM7SUFDL0MsSUFBSyxJQUFJTyxvQkFBb0IwRixrQkFBbUI7UUFDOUMsTUFBTUcsaUJBQ0pILGlCQUFpQixDQUFDMUYsaUJBQWlCO1FBQ3JDLE1BQU04RixtQkFDSkgsbUJBQW1CLENBQUMzRixpQkFBaUI7UUFDdkMsTUFBTStGLFlBQ0pILFlBQVksQ0FBQzVGLGlCQUFpQjtRQUVoQyxNQUFNZ0csa0JBQWtCdkcsZUFBZVcsR0FBRyxDQUFDSjtRQUMzQyxNQUFNaUcsbUJBQW1CSixjQUFjLENBQUMsRUFBRTtRQUMxQyxNQUFNSyxzQkFBc0J4RixDQUFBQSxHQUFBQSxzQkFBQUEsb0JBQUFBLEVBQXFCdUY7UUFFakQsTUFBTUUsaUJBQ0pILG9CQUFvQnBGLFlBQ2hCb0YsZ0JBQWdCNUYsR0FBRyxDQUFDOEYsdUJBQ3BCdEY7UUFFTixJQUFJdUYsbUJBQW1CdkYsV0FBVztZQUNoQyxJQUNFa0YscUJBQXFCbEYsYUFDckJTLENBQUFBLEdBQUFBLGVBQUFBLFlBQUFBLEVBQWE0RSxrQkFBa0JILGdCQUFnQixDQUFDLEVBQUUsR0FDbEQ7Z0JBQ0EsSUFBSUMsY0FBY25GLGFBQWFtRixjQUFjLE1BQU07b0JBQ2pELCtEQUErRDtvQkFDL0RqQix1QkFDRXFCLGdCQUNBTixnQkFDQUMsa0JBQ0FDLFdBQ0ExQjtnQkFFSixPQUFPO29CQUNMLGtFQUFrRTtvQkFDbEUsb0VBQW9FO29CQUNwRSxzRUFBc0U7b0JBQ3RFLCtDQUErQztvQkFDL0MrQixzQkFBc0JQLGdCQUFnQk0sZ0JBQWdCO2dCQUN4RDtZQUNGLE9BQU87Z0JBQ0wsa0VBQWtFO2dCQUNsRSx1QkFBdUI7Z0JBQ3ZCQyxzQkFBc0JQLGdCQUFnQk0sZ0JBQWdCO1lBQ3hEO1FBQ0YsT0FBTztRQUNMLHdFQUF3RTtRQUN4RSxnRUFBZ0U7UUFDaEUsaUVBQWlFO1FBQ2pFLHdEQUF3RDtRQUMxRDtJQUNGO0lBRUEsMkVBQTJFO0lBQzNFLHFCQUFxQjtJQUNyQixNQUFNdEUsTUFBTTBELFVBQVUxRCxHQUFHO0lBQ3pCLE1BQU13RSxxQkFBcUJqQyxXQUFXLENBQUMsRUFBRTtJQUN6QyxJQUFJdkMsUUFBUSxNQUFNO1FBQ2hCLG9FQUFvRTtRQUNwRSxxRUFBcUU7UUFDckUwRCxVQUFVMUQsR0FBRyxHQUFHd0U7SUFDbEIsT0FBTyxJQUFJQyxjQUFjekUsTUFBTTtRQUM3QiwwRUFBMEU7UUFDMUUsc0VBQXNFO1FBQ3RFLHNFQUFzRTtRQUN0RUEsSUFBSTBFLE9BQU8sQ0FBQ0Y7SUFDZCxPQUFPO0lBQ0wsdUVBQXVFO0lBQ3ZFLHNFQUFzRTtJQUN4RTtJQUVBLDhFQUE4RTtJQUM5RSx5RUFBeUU7SUFDekUsY0FBYztJQUNkLE1BQU10RSxPQUFPd0QsVUFBVXhELElBQUk7SUFDM0IsSUFBSXVFLGNBQWN2RSxPQUFPO1FBQ3ZCQSxLQUFLd0UsT0FBTyxDQUFDbEM7SUFDZjtBQUNGO0FBRU8sU0FBU3RHLFVBQVU2RixJQUF1QixFQUFFVyxLQUFVO0lBQzNELE1BQU1nQixZQUFZM0IsS0FBS3ZGLElBQUk7SUFDM0IsSUFBSWtILGNBQWMsTUFBTTtRQUN0QiwrQ0FBK0M7UUFDL0M7SUFDRjtJQUVBLE1BQU0xRixlQUFlK0QsS0FBS3JGLFFBQVE7SUFDbEMsSUFBSXNCLGlCQUFpQixNQUFNO1FBQ3pCLGtFQUFrRTtRQUNsRSxhQUFhO1FBQ2J1RyxzQkFBc0J4QyxLQUFLeEYsS0FBSyxFQUFFbUgsV0FBV2hCO0lBQy9DLE9BQU87UUFDTCxzRUFBc0U7UUFDdEUsMkVBQTJFO1FBQzNFLDZCQUE2QjtRQUM3QixLQUFLLE1BQU16RCxhQUFhakIsYUFBYTJHLE1BQU0sR0FBSTtZQUM3Q3pJLFVBQVUrQyxXQUFXeUQ7UUFDdkI7SUFDRjtJQUVBLCtEQUErRDtJQUMvRFgsS0FBS3RGLGtCQUFrQixHQUFHO0FBQzVCO0FBRUEsU0FBUzhILHNCQUNQOUQsV0FBOEIsRUFDOUJpRCxTQUFvQixFQUNwQmhCLEtBQVU7SUFFViw2RUFBNkU7SUFDN0UseUNBQXlDO0lBQ3pDLEVBQUU7SUFDRiw2REFBNkQ7SUFDN0QsTUFBTWhDLHNCQUFzQkQsV0FBVyxDQUFDLEVBQUU7SUFDMUMsTUFBTTdDLGlCQUFpQjhGLFVBQVU5RixjQUFjO0lBQy9DLElBQUssSUFBSU8sb0JBQW9CdUMsb0JBQXFCO1FBQ2hELE1BQU1TLG1CQUNKVCxtQkFBbUIsQ0FBQ3ZDLGlCQUFpQjtRQUN2QyxNQUFNZ0csa0JBQWtCdkcsZUFBZVcsR0FBRyxDQUFDSjtRQUMzQyxJQUFJZ0csb0JBQW9CcEYsV0FBVztZQUdqQztRQUNGO1FBQ0EsTUFBTXNDLGVBQWVGLGdCQUFnQixDQUFDLEVBQUU7UUFDeEMsTUFBTUksa0JBQWtCMUMsQ0FBQUEsR0FBQUEsc0JBQUFBLG9CQUFBQSxFQUFxQndDO1FBQzdDLE1BQU1pRCxpQkFBaUJILGdCQUFnQjVGLEdBQUcsQ0FBQ2dEO1FBQzNDLElBQUkrQyxtQkFBbUJ2RixXQUFXO1lBQ2hDd0Ysc0JBQXNCcEQsa0JBQWtCbUQsZ0JBQWdCNUI7UUFDMUQsT0FBTztRQUNMLHdFQUF3RTtRQUN4RSx3REFBd0Q7UUFDMUQ7SUFDRjtJQUNBLE1BQU0xQyxNQUFNMEQsVUFBVTFELEdBQUc7SUFDekIsSUFBSXlFLGNBQWN6RSxNQUFNO1FBQ3RCLElBQUkwQyxVQUFVLE1BQU07WUFDbEIsZ0RBQWdEO1lBQ2hEMUMsSUFBSTBFLE9BQU8sQ0FBQztRQUNkLE9BQU87WUFDTCwrQ0FBK0M7WUFDL0MxRSxJQUFJNEUsTUFBTSxDQUFDbEM7UUFDYjtJQUNGO0lBRUEsOEVBQThFO0lBQzlFLDRFQUE0RTtJQUM1RSwyRUFBMkU7SUFDM0UsNkRBQTZEO0lBQzdELE1BQU14QyxPQUFPd0QsVUFBVXhELElBQUk7SUFDM0IsSUFBSXVFLGNBQWN2RSxPQUFPO1FBQ3ZCQSxLQUFLd0UsT0FBTyxDQUFDO0lBQ2Y7QUFDRjtBQUVPLFNBQVNySSxxQ0FDZE8sWUFBdUIsRUFDdkI2RCxXQUE4QjtJQUU5QiwyRUFBMkU7SUFDM0UsNEVBQTRFO0lBQzVFLDJFQUEyRTtJQUMzRSw0RUFBNEU7SUFDNUUsMENBQTBDO0lBQzFDLEVBQUU7SUFDRiw2RUFBNkU7SUFDN0UsOEVBQThFO0lBQzlFLHdEQUF3RDtJQUV4RCxNQUFNQyxzQkFBc0JELFdBQVcsQ0FBQyxFQUFFO0lBQzFDLE1BQU05QyxvQkFBb0JmLGFBQWFnQixjQUFjO0lBQ3JELE1BQU1pSCxvQkFBb0IsSUFBSS9HLElBQUlIO0lBQ2xDLElBQUssSUFBSVEsb0JBQW9CdUMsb0JBQXFCO1FBQ2hELE1BQU1TLG1CQUNKVCxtQkFBbUIsQ0FBQ3ZDLGlCQUFpQjtRQUN2QyxNQUFNa0QsZUFBZUYsZ0JBQWdCLENBQUMsRUFBRTtRQUN4QyxNQUFNSSxrQkFBa0IxQyxDQUFBQSxHQUFBQSxzQkFBQUEsb0JBQUFBLEVBQXFCd0M7UUFDN0MsTUFBTS9DLHFCQUFxQlgsa0JBQWtCWSxHQUFHLENBQUNKO1FBQ2pELElBQUlHLHVCQUF1QlMsV0FBVztZQUNwQyxNQUFNQyxvQkFBb0JWLG1CQUFtQkMsR0FBRyxDQUFDZ0Q7WUFDakQsSUFBSXZDLHNCQUFzQkQsV0FBVztnQkFDbkMsTUFBTVcsb0JBQW9CckQscUNBQ3hCMkMsbUJBQ0FtQztnQkFFRixNQUFNeEIscUJBQXFCLElBQUk3QixJQUFJUTtnQkFDbkNxQixtQkFBbUJGLEdBQUcsQ0FBQzhCLGlCQUFpQjdCO2dCQUN4Q21GLGtCQUFrQnBGLEdBQUcsQ0FBQ3RCLGtCQUFrQndCO1lBQzFDO1FBQ0Y7SUFDRjtJQUVBLGtFQUFrRTtJQUNsRSxFQUFFO0lBQ0YsMEVBQTBFO0lBQzFFLDRFQUE0RTtJQUM1RSwyRUFBMkU7SUFDM0UsOEVBQThFO0lBQzlFLDZFQUE2RTtJQUM3RSxzQkFBc0I7SUFDdEIsTUFBTUssTUFBTXBELGFBQWFvRCxHQUFHO0lBQzVCLE1BQU04RSxvQkFBb0JMLGNBQWN6RSxRQUFRQSxJQUFJK0UsTUFBTSxLQUFLO0lBRS9ELE9BQU87UUFDTGhGLFVBQVU7UUFDVkM7UUFDQUUsTUFBTXRELGFBQWFzRCxJQUFJO1FBRXZCbEQsY0FBYzhILG9CQUFvQmxJLGFBQWFJLFlBQVksR0FBRztZQUFDO1lBQU07U0FBSztRQUMxRWlELGFBQWE2RSxvQkFBb0JsSSxhQUFhcUQsV0FBVyxHQUFHO1FBQzVERSxTQUFTdkQsYUFBYXVELE9BQU87UUFFN0Isa0RBQWtEO1FBQ2xEdkMsZ0JBQWdCaUg7UUFFaEJsSSxhQUFhQyxhQUFhRCxXQUFXO0lBQ3ZDO0FBQ0Y7QUFFQSxNQUFNcUksV0FBV0M7QUE4QmpCLDhFQUE4RTtBQUM5RSxnRkFBZ0Y7QUFDaEYsOEVBQThFO0FBQzlFLG1FQUFtRTtBQUNuRSxTQUFTUixjQUFjUyxLQUFVO0lBQy9CLE9BQU9BLFNBQVNBLE1BQU1DLEdBQUcsS0FBS0g7QUFDaEM7QUFFQSxTQUFTdkI7SUFDUCxJQUFJaUI7SUFDSixJQUFJRTtJQUNKLE1BQU1RLGFBQWEsSUFBSUMsUUFBeUIsQ0FBQ0MsS0FBS0M7UUFDcERiLFVBQVVZO1FBQ1ZWLFNBQVNXO0lBQ1g7SUFDQUgsV0FBV0wsTUFBTSxHQUFHO0lBQ3BCSyxXQUFXVixPQUFPLEdBQUcsQ0FBQ1E7UUFDcEIsSUFBSUUsV0FBV0wsTUFBTSxLQUFLLFdBQVc7WUFDbkMsTUFBTVMsZUFBcUNKO1lBQzNDSSxhQUFhVCxNQUFNLEdBQUc7WUFDdEJTLGFBQWFOLEtBQUssR0FBR0E7WUFDckJSLFFBQVFRO1FBQ1Y7SUFDRjtJQUNBRSxXQUFXUixNQUFNLEdBQUcsQ0FBQ2xDO1FBQ25CLElBQUkwQyxXQUFXTCxNQUFNLEtBQUssV0FBVztZQUNuQyxNQUFNVSxjQUFtQ0w7WUFDekNLLFlBQVlWLE1BQU0sR0FBRztZQUNyQlUsWUFBWUMsTUFBTSxHQUFHaEQ7WUFDckJrQyxPQUFPbEM7UUFDVDtJQUNGO0lBQ0EwQyxXQUFXRCxHQUFHLEdBQUdIO0lBQ2pCLE9BQU9JO0FBQ1QiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9wcHItbmF2aWdhdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBDYWNoZU5vZGVTZWVkRGF0YSxcbiAgRmxpZ2h0Um91dGVyU3RhdGUsXG4gIEZsaWdodFNlZ21lbnRQYXRoLFxuICBTZWdtZW50LFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcbmltcG9ydCB0eXBlIHtcbiAgQ2FjaGVOb2RlLFxuICBDaGlsZFNlZ21lbnRNYXAsXG4gIEhlYWREYXRhLFxuICBMb2FkaW5nTW9kdWxlRGF0YSxcbiAgUmVhZHlDYWNoZU5vZGUsXG59IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgREVGQVVMVF9TRUdNRU5UX0tFWSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvc2VnbWVudCdcbmltcG9ydCB7IG1hdGNoU2VnbWVudCB9IGZyb20gJy4uL21hdGNoLXNlZ21lbnRzJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyQ2FjaGVLZXkgfSBmcm9tICcuL2NyZWF0ZS1yb3V0ZXItY2FjaGUta2V5J1xuaW1wb3J0IHR5cGUgeyBGZXRjaFNlcnZlclJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi9mZXRjaC1zZXJ2ZXItcmVzcG9uc2UnXG5pbXBvcnQgeyBpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQgfSBmcm9tICcuL2lzLW5hdmlnYXRpbmctdG8tbmV3LXJvb3QtbGF5b3V0J1xuaW1wb3J0IHsgRFlOQU1JQ19TVEFMRVRJTUVfTVMgfSBmcm9tICcuL3ByZWZldGNoLWNhY2hlLXV0aWxzJ1xuXG4vLyBUaGlzIGlzIHlldCBhbm90aGVyIHRyZWUgdHlwZSB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgcGVuZGluZyBwcm9taXNlcyB0aGF0XG4vLyBuZWVkIHRvIGJlIGZ1bGZpbGxlZCBvbmNlIHRoZSBkeW5hbWljIGRhdGEgaXMgcmVjZWl2ZWQuIFRoZSB0ZXJtaW5hbCBub2RlcyBvZlxuLy8gdGhpcyB0cmVlIHJlcHJlc2VudCB0aGUgbmV3IENhY2hlIE5vZGUgdHJlZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgZHVyaW5nIHRoaXNcbi8vIHJlcXVlc3QuIFdlIGNhbid0IHVzZSB0aGUgQ2FjaGUgTm9kZSB0cmVlIG9yIFJvdXRlIFN0YXRlIHRyZWUgZGlyZWN0bHlcbi8vIGJlY2F1c2UgdGhvc2UgaW5jbHVkZSByZXVzZWQgbm9kZXMsIHRvby4gVGhpcyB0cmVlIGlzIGRpc2NhcmRlZCBhcyBzb29uIGFzXG4vLyB0aGUgbmF2aWdhdGlvbiByZXNwb25zZSBpcyByZWNlaXZlZC5cbnR5cGUgU1BBTmF2aWdhdGlvblRhc2sgPSB7XG4gIC8vIFRoZSByb3V0ZXIgc3RhdGUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgdHJlZSB0aGF0IHRoaXMgVGFzayByZXByZXNlbnRzLlxuICByb3V0ZTogRmxpZ2h0Um91dGVyU3RhdGVcbiAgLy8gVGhlIENhY2hlTm9kZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB0cmVlIHRoYXQgdGhpcyBUYXNrIHJlcHJlc2VudHMuIElmXG4gIC8vIGBjaGlsZHJlbmAgaXMgbnVsbCAoaS5lLiBpZiB0aGlzIGlzIGEgdGVybWluYWwgdGFzayBub2RlKSwgdGhlbiBgbm9kZWBcbiAgLy8gcmVwcmVzZW50cyBhIGJyYW5kIG5ldyBDYWNoZSBOb2RlIHRyZWUsIHdoaWNoIHdheSBvciBtYXkgbm90IG5lZWQgdG8gYmVcbiAgLy8gZmlsbGVkIHdpdGggZHluYW1pYyBkYXRhIGZyb20gdGhlIHNlcnZlci5cbiAgbm9kZTogQ2FjaGVOb2RlIHwgbnVsbFxuICAvLyBUaGUgdHJlZSBzZW50IHRvIHRoZSBzZXJ2ZXIgZHVyaW5nIHRoZSBkeW5hbWljIHJlcXVlc3QuIFRoaXMgaXMgdGhlXG4gIC8vIHNhbWUgYXMgYHJvdXRlYCwgZXhjZXB0IHdpdGggdGhlIGByZWZldGNoYCBtYXJrZXIgc2V0IG9uIGR5bmFtaWMgc2VnbWVudHMuXG4gIC8vIElmIGFsbCB0aGUgc2VnbWVudHMgYXJlIHN0YXRpYywgdGhlbiB0aGlzIHdpbGwgYmUgbnVsbCwgYW5kIG5vIHNlcnZlclxuICAvLyByZXF1ZXN0IGlzIHJlcXVpcmVkLlxuICBkeW5hbWljUmVxdWVzdFRyZWU6IEZsaWdodFJvdXRlclN0YXRlIHwgbnVsbFxuICBjaGlsZHJlbjogTWFwPHN0cmluZywgU1BBTmF2aWdhdGlvblRhc2s+IHwgbnVsbFxufVxuXG4vLyBBIHNwZWNpYWwgdHlwZSB1c2VkIHRvIGJhaWwgb3V0IGFuZCB0cmlnZ2VyIGEgZnVsbC1wYWdlIG5hdmlnYXRpb24uXG50eXBlIE1QQU5hdmlnYXRpb25UYXNrID0ge1xuICAvLyBNUEEgdGFza3MgYXJlIGRpc3Rpbmd1aXNlZCBmcm9tIFNQQSB0YXNrcyBieSBoYXZpbmcgYSBudWxsIGByb3V0ZWAuXG4gIHJvdXRlOiBudWxsXG4gIG5vZGU6IG51bGxcbiAgZHluYW1pY1JlcXVlc3RUcmVlOiBudWxsXG4gIGNoaWxkcmVuOiBudWxsXG59XG5cbmNvbnN0IE1QQV9OQVZJR0FUSU9OX1RBU0s6IE1QQU5hdmlnYXRpb25UYXNrID0ge1xuICByb3V0ZTogbnVsbCxcbiAgbm9kZTogbnVsbCxcbiAgZHluYW1pY1JlcXVlc3RUcmVlOiBudWxsLFxuICBjaGlsZHJlbjogbnVsbCxcbn1cblxuZXhwb3J0IHR5cGUgVGFzayA9IFNQQU5hdmlnYXRpb25UYXNrIHwgTVBBTmF2aWdhdGlvblRhc2tcblxuLy8gQ3JlYXRlcyBhIG5ldyBDYWNoZSBOb2RlIHRyZWUgKGkuZS4gY29weS1vbi13cml0ZSkgdGhhdCByZXByZXNlbnRzIHRoZVxuLy8gb3B0aW1pc3RpYyByZXN1bHQgb2YgYSBuYXZpZ2F0aW9uLCB1c2luZyBib3RoIHRoZSBjdXJyZW50IENhY2hlIE5vZGUgdHJlZSBhbmRcbi8vIGRhdGEgdGhhdCB3YXMgcHJlZmV0Y2hlZCBwcmlvciB0byBuYXZpZ2F0aW9uLlxuLy9cbi8vIEF0IHRoZSBtb21lbnQgd2UgY2FsbCB0aGlzIGZ1bmN0aW9uLCB3ZSBoYXZlbid0IHlldCByZWNlaXZlZCB0aGUgbmF2aWdhdGlvblxuLy8gcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLiBJdCBjb3VsZCBzZW5kIGJhY2sgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50XG4vLyBmcm9tIHRoZSB0cmVlIHRoYXQgd2FzIHByZWZldGNoZWQg4oCUIGR1ZSB0byByZXdyaXRlcywgZGVmYXVsdCByb3V0ZXMsIHBhcmFsbGVsXG4vLyByb3V0ZXMsIGV0Yy5cbi8vXG4vLyBCdXQgaW4gbW9zdCBjYXNlcywgaXQgd2lsbCByZXR1cm4gdGhlIHNhbWUgdHJlZSB0aGF0IHdlIHByZWZldGNoZWQsIGp1c3Qgd2l0aFxuLy8gdGhlIGR5bmFtaWMgaG9sZXMgZmlsbGVkIGluLiBTbyB3ZSBvcHRpbWlzdGljYWxseSBhc3N1bWUgdGhpcyB3aWxsIGhhcHBlbixcbi8vIGFuZCBhY2NlcHQgdGhhdCB0aGUgcmVhbCByZXN1bHQgY291bGQgYmUgYXJiaXRyYXJpbHkgZGlmZmVyZW50LlxuLy9cbi8vIFdlJ2xsIHJldXNlIGFueXRoaW5nIHRoYXQgd2FzIGFscmVhZHkgaW4gdGhlIHByZXZpb3VzIHRyZWUsIHNpbmNlIHRoYXQncyB3aGF0XG4vLyB0aGUgc2VydmVyIGRvZXMuXG4vL1xuLy8gTmV3IHNlZ21lbnRzIChvbmVzIHRoYXQgZG9uJ3QgYXBwZWFyIGluIHRoZSBvbGQgdHJlZSkgYXJlIGFzc2lnbmVkIGFuXG4vLyB1bnJlc29sdmVkIHByb21pc2UuIFRoZSBkYXRhIGZvciB0aGVzZSBwcm9taXNlcyB3aWxsIGJlIGZ1bGZpbGxlZCBsYXRlciwgd2hlblxuLy8gdGhlIG5hdmlnYXRpb24gcmVzcG9uc2UgaXMgcmVjZWl2ZWQuXG4vL1xuLy8gVGhlIHRyZWUgY2FuIGJlIHJlbmRlcmVkIGltbWVkaWF0ZWx5IGFmdGVyIGl0IGlzIGNyZWF0ZWQgKHRoYXQncyB3aHkgdGhpcyBpc1xuLy8gYSBzeW5jaHJvbm91cyBmdW5jdGlvbikuIEFueSBuZXcgdHJlZXMgdGhhdCBkbyBub3QgaGF2ZSBwcmVmZXRjaCBkYXRhIHdpbGxcbi8vIHN1c3BlbmQgZHVyaW5nIHJlbmRlcmluZywgdW50aWwgdGhlIGR5bmFtaWMgZGF0YSBzdHJlYW1zIGluLlxuLy9cbi8vIFJldHVybnMgYSBUYXNrIG9iamVjdCwgd2hpY2ggY29udGFpbnMgYm90aCB0aGUgdXBkYXRlZCBDYWNoZSBOb2RlIGFuZCBhIHBhdGhcbi8vIHRvIHRoZSBwZW5kaW5nIHN1YnRyZWVzIHRoYXQgbmVlZCB0byBiZSByZXNvbHZlZCBieSB0aGUgbmF2aWdhdGlvbiByZXNwb25zZS5cbi8vXG4vLyBBIHJldHVybiB2YWx1ZSBvZiBgbnVsbGAgbWVhbnMgdGhlcmUgd2VyZSBubyBjaGFuZ2VzLCBhbmQgdGhlIHByZXZpb3VzIHRyZWVcbi8vIGNhbiBiZSByZXVzZWQgd2l0aG91dCBpbml0aWF0aW5nIGEgc2VydmVyIHJlcXVlc3QuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRQUFJOYXZpZ2F0aW9uKFxuICBuYXZpZ2F0ZWRBdDogbnVtYmVyLFxuICBvbGRDYWNoZU5vZGU6IENhY2hlTm9kZSxcbiAgb2xkUm91dGVyU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlLFxuICBuZXdSb3V0ZXJTdGF0ZTogRmxpZ2h0Um91dGVyU3RhdGUsXG4gIHByZWZldGNoRGF0YTogQ2FjaGVOb2RlU2VlZERhdGEgfCBudWxsLFxuICBwcmVmZXRjaEhlYWQ6IEhlYWREYXRhIHwgbnVsbCxcbiAgaXNQcmVmZXRjaEhlYWRQYXJ0aWFsOiBib29sZWFuLFxuICBpc1NhbWVQYWdlTmF2aWdhdGlvbjogYm9vbGVhbixcbiAgc2Nyb2xsYWJsZVNlZ21lbnRzUmVzdWx0OiBBcnJheTxGbGlnaHRTZWdtZW50UGF0aD5cbik6IFRhc2sgfCBudWxsIHtcbiAgY29uc3Qgc2VnbWVudFBhdGg6IEFycmF5PEZsaWdodFNlZ21lbnRQYXRoPiA9IFtdXG4gIHJldHVybiB1cGRhdGVDYWNoZU5vZGVPbk5hdmlnYXRpb24oXG4gICAgbmF2aWdhdGVkQXQsXG4gICAgb2xkQ2FjaGVOb2RlLFxuICAgIG9sZFJvdXRlclN0YXRlLFxuICAgIG5ld1JvdXRlclN0YXRlLFxuICAgIGZhbHNlLFxuICAgIHByZWZldGNoRGF0YSxcbiAgICBwcmVmZXRjaEhlYWQsXG4gICAgaXNQcmVmZXRjaEhlYWRQYXJ0aWFsLFxuICAgIGlzU2FtZVBhZ2VOYXZpZ2F0aW9uLFxuICAgIHNlZ21lbnRQYXRoLFxuICAgIHNjcm9sbGFibGVTZWdtZW50c1Jlc3VsdFxuICApXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNhY2hlTm9kZU9uTmF2aWdhdGlvbihcbiAgbmF2aWdhdGVkQXQ6IG51bWJlcixcbiAgb2xkQ2FjaGVOb2RlOiBDYWNoZU5vZGUsXG4gIG9sZFJvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgbmV3Um91dGVyU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlLFxuICBkaWRGaW5kUm9vdExheW91dDogYm9vbGVhbixcbiAgcHJlZmV0Y2hEYXRhOiBDYWNoZU5vZGVTZWVkRGF0YSB8IG51bGwsXG4gIHByZWZldGNoSGVhZDogSGVhZERhdGEgfCBudWxsLFxuICBpc1ByZWZldGNoSGVhZFBhcnRpYWw6IGJvb2xlYW4sXG4gIGlzU2FtZVBhZ2VOYXZpZ2F0aW9uOiBib29sZWFuLFxuICBzZWdtZW50UGF0aDogRmxpZ2h0U2VnbWVudFBhdGgsXG4gIHNjcm9sbGFibGVTZWdtZW50c1Jlc3VsdDogQXJyYXk8RmxpZ2h0U2VnbWVudFBhdGg+XG4pOiBUYXNrIHwgbnVsbCB7XG4gIC8vIERpZmYgdGhlIG9sZCBhbmQgbmV3IHRyZWVzIHRvIHJldXNlIHRoZSBzaGFyZWQgbGF5b3V0cy5cbiAgY29uc3Qgb2xkUm91dGVyU3RhdGVDaGlsZHJlbiA9IG9sZFJvdXRlclN0YXRlWzFdXG4gIGNvbnN0IG5ld1JvdXRlclN0YXRlQ2hpbGRyZW4gPSBuZXdSb3V0ZXJTdGF0ZVsxXVxuICBjb25zdCBwcmVmZXRjaERhdGFDaGlsZHJlbiA9IHByZWZldGNoRGF0YSAhPT0gbnVsbCA/IHByZWZldGNoRGF0YVsyXSA6IG51bGxcblxuICBpZiAoIWRpZEZpbmRSb290TGF5b3V0KSB7XG4gICAgLy8gV2UncmUgY3VycmVudGx5IHRyYXZlcnNpbmcgdGhlIHBhcnQgb2YgdGhlIHRyZWUgdGhhdCB3YXMgYWxzbyBwYXJ0IG9mXG4gICAgLy8gdGhlIHByZXZpb3VzIHJvdXRlLiBJZiB3ZSBkaXNjb3ZlciBhIHJvb3QgbGF5b3V0LCB0aGVuIHdlIGRvbid0IG5lZWQgdG9cbiAgICAvLyB0cmlnZ2VyIGFuIE1QQSBuYXZpZ2F0aW9uLiBTZWUgYmVnaW5SZW5kZXJpbmdOZXdSb3V0ZVRyZWUgZm9yIGNvbnRleHQuXG4gICAgY29uc3QgaXNSb290TGF5b3V0ID0gbmV3Um91dGVyU3RhdGVbNF0gPT09IHRydWVcbiAgICBpZiAoaXNSb290TGF5b3V0KSB7XG4gICAgICAvLyBGb3VuZCBhIG1hdGNoaW5nIHJvb3QgbGF5b3V0LlxuICAgICAgZGlkRmluZFJvb3RMYXlvdXQgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb2xkUGFyYWxsZWxSb3V0ZXMgPSBvbGRDYWNoZU5vZGUucGFyYWxsZWxSb3V0ZXNcblxuICAvLyBDbG9uZSB0aGUgY3VycmVudCBzZXQgb2Ygc2VnbWVudCBjaGlsZHJlbiwgZXZlbiBpZiB0aGV5IGFyZW4ndCBhY3RpdmUgaW5cbiAgLy8gdGhlIG5ldyB0cmVlLlxuICAvLyBUT0RPOiBXZSBjdXJyZW50bHkgcmV0YWluIGFsbCB0aGUgaW5hY3RpdmUgc2VnbWVudHMgaW5kZWZpbml0ZWx5LCB1bnRpbFxuICAvLyB0aGVyZSdzIGFuIGV4cGxpY2l0IHJlZnJlc2gsIG9yIGEgcGFyZW50IGxheW91dCBpcyBsYXppbHkgcmVmcmVzaGVkLiBXZVxuICAvLyByZWx5IG9uIHRoaXMgZm9yIHBvcHN0YXRlIG5hdmlnYXRpb25zLCB3aGljaCB1cGRhdGUgdGhlIFJvdXRlciBTdGF0ZSBUcmVlXG4gIC8vIGJ1dCBkbyBub3QgZWFnZXJseSBwZXJmb3JtIGEgZGF0YSBmZXRjaCwgYmVjYXVzZSB0aGV5IGV4cGVjdCB0aGUgc2VnbWVudFxuICAvLyBkYXRhIHRvIGFscmVhZHkgYmUgaW4gdGhlIENhY2hlIE5vZGUgdHJlZS4gRm9yIGhpZ2hseSBzdGF0aWMgc2l0ZXMgdGhhdFxuICAvLyBhcmUgbW9zdGx5IHJlYWQtb25seSwgdGhpcyBtYXkgaGFwcGVuIG9ubHkgcmFyZWx5LCBjYXVzaW5nIG1lbW9yeSB0b1xuICAvLyBsZWFrLiBXZSBzaG91bGQgZmlndXJlIG91dCBhIGJldHRlciBtb2RlbCBmb3IgdGhlIGxpZmV0aW1lIG9mIGluYWN0aXZlXG4gIC8vIHNlZ21lbnRzLCBzbyB3ZSBjYW4gbWFpbnRhaW4gaW5zdGFudCBiYWNrL2ZvcndhcmQgbmF2aWdhdGlvbnMgd2l0aG91dFxuICAvLyBsZWFraW5nIG1lbW9yeSBpbmRlZmluaXRlbHkuXG4gIGNvbnN0IHByZWZldGNoUGFyYWxsZWxSb3V0ZXMgPSBuZXcgTWFwKG9sZFBhcmFsbGVsUm91dGVzKVxuXG4gIC8vIEFzIHdlIGRpZmYgdGhlIHRyZWVzLCB3ZSBtYXkgc29tZXRpbWVzIG1vZGlmeSAoY29weS1vbi13cml0ZSwgbm90IG11dGF0ZSlcbiAgLy8gdGhlIFJvdXRlIFRyZWUgdGhhdCB3YXMgcmV0dXJuZWQgYnkgdGhlIHNlcnZlciDigJQgZm9yIGV4YW1wbGUsIGluIHRoZSBjYXNlXG4gIC8vIG9mIGRlZmF1bHQgcGFyYWxsZWwgcm91dGVzLCB3ZSBwcmVzZXJ2ZSB0aGUgY3VycmVudGx5IGFjdGl2ZSBzZWdtZW50LiBUb1xuICAvLyBhdm9pZCBtdXRhdGluZyB0aGUgb3JpZ2luYWwgdHJlZSwgd2UgY2xvbmUgdGhlIHJvdXRlciBzdGF0ZSBjaGlsZHJlbiBhbG9uZ1xuICAvLyB0aGUgcmV0dXJuIHBhdGguXG4gIGxldCBwYXRjaGVkUm91dGVyU3RhdGVDaGlsZHJlbjoge1xuICAgIFtwYXJhbGxlbFJvdXRlS2V5OiBzdHJpbmddOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuICB9ID0ge31cbiAgbGV0IHRhc2tDaGlsZHJlbiA9IG51bGxcblxuICAvLyBNb3N0IG5hdmlnYXRpb25zIHJlcXVpcmUgYSByZXF1ZXN0IHRvIGZldGNoIGFkZGl0aW9uYWwgZGF0YSBmcm9tIHRoZVxuICAvLyBzZXJ2ZXIsIGVpdGhlciBiZWNhdXNlIHRoZSBkYXRhIHdhcyBub3QgYWxyZWFkeSBwcmVmZXRjaGVkLCBvciBiZWNhdXNlIHRoZVxuICAvLyB0YXJnZXQgcm91dGUgY29udGFpbnMgZHluYW1pYyBkYXRhIHRoYXQgY2Fubm90IGJlIHByZWZldGNoZWQuXG4gIC8vXG4gIC8vIEhvd2V2ZXIsIGlmIHRoZSB0YXJnZXQgcm91dGUgaXMgZnVsbHkgc3RhdGljLCBhbmQgaXQncyBhbHJlYWR5IGNvbXBsZXRlbHlcbiAgLy8gbG9hZGVkIGludG8gdGhlIHNlZ21lbnQgY2FjaGUsIHRoZW4gd2UgY2FuIHNraXAgdGhlIHNlcnZlciByZXF1ZXN0LlxuICAvL1xuICAvLyBUaGlzIHN0YXJ0cyBvZmYgYXMgYGZhbHNlYCwgYW5kIGlzIHNldCB0byBgdHJ1ZWAgaWYgYW55IG9mIHRoZSBjaGlsZFxuICAvLyByb3V0ZXMgcmVxdWlyZXMgYSBkeW5hbWljIHJlcXVlc3QuXG4gIGxldCBuZWVkc0R5bmFtaWNSZXF1ZXN0ID0gZmFsc2VcbiAgLy8gQXMgd2UgdHJhdmVyc2UgdGhlIGNoaWxkcmVuLCB3ZSdsbCBjb25zdHJ1Y3QgYSBGbGlnaHRSb3V0ZXJTdGF0ZSB0aGF0IGNhblxuICAvLyBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIgdG8gcmVxdWVzdCB0aGUgZHluYW1pYyBkYXRhLiBJZiBpdCB0dXJucyBvdXQgdGhhdFxuICAvLyBub3RoaW5nIGluIHRoZSBzdWJ0cmVlIGlzIGR5bmFtaWMgKGkuZS4gbmVlZHNEeW5hbWljUmVxdWVzdCBpcyBmYWxzZSBhdCB0aGVcbiAgLy8gZW5kKSwgdGhlbiB0aGlzIHdpbGwgYmUgZGlzY2FyZGVkLlxuICAvLyBUT0RPOiBXZSBjYW4gcHJvYmFibHkgb3B0aW1pemUgdGhlIGZvcm1hdCBvZiB0aGlzIGRhdGEgc3RydWN0dXJlIHRvIG9ubHlcbiAgLy8gaW5jbHVkZSBwYXRocyB0aGF0IGFyZSBkeW5hbWljLiBJbnN0ZWFkIG9mIHJldXNpbmcgdGhlXG4gIC8vIEZsaWdodFJvdXRlclN0YXRlIHR5cGUuXG4gIGxldCBkeW5hbWljUmVxdWVzdFRyZWVDaGlsZHJlbjoge1xuICAgIFtwYXJhbGxlbFJvdXRlS2V5OiBzdHJpbmddOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuICB9ID0ge31cblxuICBmb3IgKGxldCBwYXJhbGxlbFJvdXRlS2V5IGluIG5ld1JvdXRlclN0YXRlQ2hpbGRyZW4pIHtcbiAgICBjb25zdCBuZXdSb3V0ZXJTdGF0ZUNoaWxkOiBGbGlnaHRSb3V0ZXJTdGF0ZSA9XG4gICAgICBuZXdSb3V0ZXJTdGF0ZUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldXG4gICAgY29uc3Qgb2xkUm91dGVyU3RhdGVDaGlsZDogRmxpZ2h0Um91dGVyU3RhdGUgfCB2b2lkID1cbiAgICAgIG9sZFJvdXRlclN0YXRlQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV1cbiAgICBjb25zdCBvbGRTZWdtZW50TWFwQ2hpbGQgPSBvbGRQYXJhbGxlbFJvdXRlcy5nZXQocGFyYWxsZWxSb3V0ZUtleSlcbiAgICBjb25zdCBwcmVmZXRjaERhdGFDaGlsZDogQ2FjaGVOb2RlU2VlZERhdGEgfCB2b2lkIHwgbnVsbCA9XG4gICAgICBwcmVmZXRjaERhdGFDaGlsZHJlbiAhPT0gbnVsbFxuICAgICAgICA/IHByZWZldGNoRGF0YUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldXG4gICAgICAgIDogbnVsbFxuXG4gICAgY29uc3QgbmV3U2VnbWVudENoaWxkID0gbmV3Um91dGVyU3RhdGVDaGlsZFswXVxuICAgIGNvbnN0IG5ld1NlZ21lbnRQYXRoQ2hpbGQgPSBzZWdtZW50UGF0aC5jb25jYXQoW1xuICAgICAgcGFyYWxsZWxSb3V0ZUtleSxcbiAgICAgIG5ld1NlZ21lbnRDaGlsZCxcbiAgICBdKVxuICAgIGNvbnN0IG5ld1NlZ21lbnRLZXlDaGlsZCA9IGNyZWF0ZVJvdXRlckNhY2hlS2V5KG5ld1NlZ21lbnRDaGlsZClcblxuICAgIGNvbnN0IG9sZFNlZ21lbnRDaGlsZCA9XG4gICAgICBvbGRSb3V0ZXJTdGF0ZUNoaWxkICE9PSB1bmRlZmluZWQgPyBvbGRSb3V0ZXJTdGF0ZUNoaWxkWzBdIDogdW5kZWZpbmVkXG5cbiAgICBjb25zdCBvbGRDYWNoZU5vZGVDaGlsZCA9XG4gICAgICBvbGRTZWdtZW50TWFwQ2hpbGQgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IG9sZFNlZ21lbnRNYXBDaGlsZC5nZXQobmV3U2VnbWVudEtleUNoaWxkKVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgbGV0IHRhc2tDaGlsZDogVGFzayB8IG51bGxcbiAgICBpZiAobmV3U2VnbWVudENoaWxkID09PSBERUZBVUxUX1NFR01FTlRfS0VZKSB7XG4gICAgICAvLyBUaGlzIGlzIGFub3RoZXIga2luZCBvZiBsZWFmIHNlZ21lbnQg4oCUIGEgZGVmYXVsdCByb3V0ZS5cbiAgICAgIC8vXG4gICAgICAvLyBEZWZhdWx0IHJvdXRlcyBoYXZlIHNwZWNpYWwgYmVoYXZpb3IuIFdoZW4gdGhlcmUncyBubyBtYXRjaGluZyBzZWdtZW50XG4gICAgICAvLyBmb3IgYSBwYXJhbGxlbCByb3V0ZSwgTmV4dC5qcyBwcmVzZXJ2ZXMgdGhlIGN1cnJlbnRseSBhY3RpdmUgc2VnbWVudFxuICAgICAgLy8gZHVyaW5nIGEgY2xpZW50IG5hdmlnYXRpb24g4oCUIGJ1dCBub3QgZm9yIGluaXRpYWwgcmVuZGVyLiBUaGUgc2VydmVyXG4gICAgICAvLyBsZWF2ZXMgaXQgdG8gdGhlIGNsaWVudCB0byBhY2NvdW50IGZvciB0aGlzLiBTbyB3ZSBuZWVkIHRvIGhhbmRsZVxuICAgICAgLy8gaXQgaGVyZS5cbiAgICAgIGlmIChvbGRSb3V0ZXJTdGF0ZUNoaWxkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gUmV1c2UgdGhlIGV4aXN0aW5nIFJvdXRlciBTdGF0ZSBmb3IgdGhpcyBzZWdtZW50LiBXZSBzcGF3biBhIFwidGFza1wiXG4gICAgICAgIC8vIGp1c3QgdG8ga2VlcCB0cmFjayBvZiB0aGUgdXBkYXRlZCByb3V0ZXIgc3RhdGU7IHVubGlrZSBtb3N0LCBpdCdzXG4gICAgICAgIC8vIGFscmVhZHkgZnVsZmlsbGVkIGFuZCB3b24ndCBiZSBhZmZlY3RlZCBieSB0aGUgZHluYW1pYyByZXNwb25zZS5cbiAgICAgICAgdGFza0NoaWxkID0gc3Bhd25SZXVzZWRUYXNrKG9sZFJvdXRlclN0YXRlQ2hpbGQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGVyZSdzIG5vIGN1cnJlbnRseSBhY3RpdmUgc2VnbWVudC4gU3dpdGNoIHRvIHRoZSBcImNyZWF0ZVwiIHBhdGguXG4gICAgICAgIHRhc2tDaGlsZCA9IGJlZ2luUmVuZGVyaW5nTmV3Um91dGVUcmVlKFxuICAgICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgICAgIG9sZFJvdXRlclN0YXRlQ2hpbGQsXG4gICAgICAgICAgbmV3Um91dGVyU3RhdGVDaGlsZCxcbiAgICAgICAgICBvbGRDYWNoZU5vZGVDaGlsZCxcbiAgICAgICAgICBkaWRGaW5kUm9vdExheW91dCxcbiAgICAgICAgICBwcmVmZXRjaERhdGFDaGlsZCAhPT0gdW5kZWZpbmVkID8gcHJlZmV0Y2hEYXRhQ2hpbGQgOiBudWxsLFxuICAgICAgICAgIHByZWZldGNoSGVhZCxcbiAgICAgICAgICBpc1ByZWZldGNoSGVhZFBhcnRpYWwsXG4gICAgICAgICAgbmV3U2VnbWVudFBhdGhDaGlsZCxcbiAgICAgICAgICBzY3JvbGxhYmxlU2VnbWVudHNSZXN1bHRcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBpc1NhbWVQYWdlTmF2aWdhdGlvbiAmJlxuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHBhZ2Ugc2VnbWVudC5cbiAgICAgIC8vIFRPRE86IFdlJ3JlIG5vdCBjb25zaXN0ZW50IGFib3V0IGhvdyB3ZSBkbyB0aGlzIGNoZWNrLiBTb21lIHBsYWNlc1xuICAgICAgLy8gY2hlY2sgaWYgdGhlIHNlZ21lbnQgc3RhcnRzIHdpdGggUEFHRV9TRUdNRU5UX0tFWSwgYnV0IG1vc3Qgc2VlbSB0b1xuICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgYW55IGFueSBjaGlsZHJlbiwgd2hpY2ggaXMgd2h5IEknbSBkb2luZyBpdCBoZXJlLiBXZVxuICAgICAgLy8gc2hvdWxkIHByb2JhYmx5IGVuY29kZSBhbiBlbXB0eSBjaGlsZHJlbiBzZXQgYXMgYG51bGxgIHRob3VnaC4gRWl0aGVyXG4gICAgICAvLyB3YXksIHdlIHNob3VsZCB1cGRhdGUgYWxsIHRoZSBjaGVja3MgdG8gYmUgY29uc2lzdGVudC5cbiAgICAgIE9iamVjdC5rZXlzKG5ld1JvdXRlclN0YXRlQ2hpbGRbMV0pLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgLy8gV2Ugc3BlY2lhbCBjYXNlIG5hdmlnYXRpb25zIHRvIHRoZSBleGFjdCBzYW1lIFVSTCBhcyB0aGUgY3VycmVudFxuICAgICAgLy8gbG9jYXRpb24uIEl0J3MgYSBjb21tb24gVUkgcGF0dGVybiBmb3IgYXBwcyB0byByZWZyZXNoIHdoZW4geW91IGNsaWNrIGFcbiAgICAgIC8vIGxpbmsgdG8gdGhlIGN1cnJlbnQgcGFnZS4gU28gd2hlbiB0aGlzIGhhcHBlbnMsIHdlIHJlZnJlc2ggdGhlIGR5bmFtaWNcbiAgICAgIC8vIGRhdGEgaW4gdGhlIHBhZ2Ugc2VnbWVudHMuXG4gICAgICAvL1xuICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYXBwbHkgaWYgdGhlIGFueSBwYXJ0IG9mIHRoZSBoYXNoIG9yIHNlYXJjaFxuICAgICAgLy8gcXVlcnkgaGFzIGNoYW5nZWQuIFRoaXMgbWlnaHQgZmVlbCBhIGJpdCB3ZWlyZCBidXQgaXQgbWFrZXMgbW9yZSBzZW5zZVxuICAgICAgLy8gd2hlbiB5b3UgY29uc2lkZXIgdGhhdCB0aGUgd2F5IHRvIHRyaWdnZXIgdGhpcyBiZWhhdmlvciBpcyB0byBjbGlja1xuICAgICAgLy8gdGhlIHNhbWUgbGluayBtdWx0aXBsZSB0aW1lcy5cbiAgICAgIC8vXG4gICAgICAvLyBUT0RPOiBXZSBzaG91bGQgcHJvYmFibHkgcmVmcmVzaCB0aGUgKmVudGlyZSogcm91dGUgd2hlbiB0aGlzIGNhc2VcbiAgICAgIC8vIG9jY3Vycywgbm90IGp1c3QgdGhlIHBhZ2Ugc2VnbWVudHMuIEVzc2VudGlhbGx5IHRyZWF0aW5nIGl0IHRoZSBzYW1lIGFzXG4gICAgICAvLyBhIHJlZnJlc2goKSB0cmlnZ2VyZWQgYnkgYW4gYWN0aW9uLCB3aGljaCBpcyB0aGUgbW9yZSBleHBsaWNpdCB3YXkgb2ZcbiAgICAgIC8vIG1vZGVsaW5nIHRoZSBVSSBwYXR0ZXJuIGRlc2NyaWJlZCBhYm92ZS5cbiAgICAgIC8vXG4gICAgICAvLyBBbHNvIG5vdGUgdGhhdCB0aGlzIG9ubHkgcmVmcmVzaGVzIHRoZSBkeW5hbWljIGRhdGEsIG5vdCBzdGF0aWMvXG4gICAgICAvLyBjYWNoZWQgZGF0YS4gSWYgdGhlIHBhZ2Ugc2VnbWVudCBpcyBmdWxseSBzdGF0aWMgYW5kIHByZWZldGNoZWQsIHRoZVxuICAgICAgLy8gcmVxdWVzdCBpcyBza2lwcGVkLiAoVGhpcyBpcyBhbHNvIGhvdyByZWZyZXNoKCkgd29ya3MuKVxuICAgICAgdGFza0NoaWxkID0gYmVnaW5SZW5kZXJpbmdOZXdSb3V0ZVRyZWUoXG4gICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgICBvbGRSb3V0ZXJTdGF0ZUNoaWxkLFxuICAgICAgICBuZXdSb3V0ZXJTdGF0ZUNoaWxkLFxuICAgICAgICBvbGRDYWNoZU5vZGVDaGlsZCxcbiAgICAgICAgZGlkRmluZFJvb3RMYXlvdXQsXG4gICAgICAgIHByZWZldGNoRGF0YUNoaWxkICE9PSB1bmRlZmluZWQgPyBwcmVmZXRjaERhdGFDaGlsZCA6IG51bGwsXG4gICAgICAgIHByZWZldGNoSGVhZCxcbiAgICAgICAgaXNQcmVmZXRjaEhlYWRQYXJ0aWFsLFxuICAgICAgICBuZXdTZWdtZW50UGF0aENoaWxkLFxuICAgICAgICBzY3JvbGxhYmxlU2VnbWVudHNSZXN1bHRcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgb2xkUm91dGVyU3RhdGVDaGlsZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvbGRTZWdtZW50Q2hpbGQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgbWF0Y2hTZWdtZW50KG5ld1NlZ21lbnRDaGlsZCwgb2xkU2VnbWVudENoaWxkKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICBvbGRDYWNoZU5vZGVDaGlsZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIG9sZFJvdXRlclN0YXRlQ2hpbGQgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIC8vIFRoaXMgc2VnbWVudCBleGlzdHMgaW4gYm90aCB0aGUgb2xkIGFuZCBuZXcgdHJlZXMuIFJlY3Vyc2l2ZWx5IHVwZGF0ZVxuICAgICAgICAvLyB0aGUgY2hpbGRyZW4uXG4gICAgICAgIHRhc2tDaGlsZCA9IHVwZGF0ZUNhY2hlTm9kZU9uTmF2aWdhdGlvbihcbiAgICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgICBvbGRDYWNoZU5vZGVDaGlsZCxcbiAgICAgICAgICBvbGRSb3V0ZXJTdGF0ZUNoaWxkLFxuICAgICAgICAgIG5ld1JvdXRlclN0YXRlQ2hpbGQsXG4gICAgICAgICAgZGlkRmluZFJvb3RMYXlvdXQsXG4gICAgICAgICAgcHJlZmV0Y2hEYXRhQ2hpbGQsXG4gICAgICAgICAgcHJlZmV0Y2hIZWFkLFxuICAgICAgICAgIGlzUHJlZmV0Y2hIZWFkUGFydGlhbCxcbiAgICAgICAgICBpc1NhbWVQYWdlTmF2aWdhdGlvbixcbiAgICAgICAgICBuZXdTZWdtZW50UGF0aENoaWxkLFxuICAgICAgICAgIHNjcm9sbGFibGVTZWdtZW50c1Jlc3VsdFxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGVyZSdzIG5vIGV4aXN0aW5nIENhY2hlIE5vZGUgZm9yIHRoaXMgc2VnbWVudC4gU3dpdGNoIHRvIHRoZVxuICAgICAgICAvLyBcImNyZWF0ZVwiIHBhdGguXG4gICAgICAgIHRhc2tDaGlsZCA9IGJlZ2luUmVuZGVyaW5nTmV3Um91dGVUcmVlKFxuICAgICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgICAgIG9sZFJvdXRlclN0YXRlQ2hpbGQsXG4gICAgICAgICAgbmV3Um91dGVyU3RhdGVDaGlsZCxcbiAgICAgICAgICBvbGRDYWNoZU5vZGVDaGlsZCxcbiAgICAgICAgICBkaWRGaW5kUm9vdExheW91dCxcbiAgICAgICAgICBwcmVmZXRjaERhdGFDaGlsZCAhPT0gdW5kZWZpbmVkID8gcHJlZmV0Y2hEYXRhQ2hpbGQgOiBudWxsLFxuICAgICAgICAgIHByZWZldGNoSGVhZCxcbiAgICAgICAgICBpc1ByZWZldGNoSGVhZFBhcnRpYWwsXG4gICAgICAgICAgbmV3U2VnbWVudFBhdGhDaGlsZCxcbiAgICAgICAgICBzY3JvbGxhYmxlU2VnbWVudHNSZXN1bHRcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGlzIGEgbmV3IHRyZWUuIFN3aXRjaCB0byB0aGUgXCJjcmVhdGVcIiBwYXRoLlxuICAgICAgdGFza0NoaWxkID0gYmVnaW5SZW5kZXJpbmdOZXdSb3V0ZVRyZWUoXG4gICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgICBvbGRSb3V0ZXJTdGF0ZUNoaWxkLFxuICAgICAgICBuZXdSb3V0ZXJTdGF0ZUNoaWxkLFxuICAgICAgICBvbGRDYWNoZU5vZGVDaGlsZCxcbiAgICAgICAgZGlkRmluZFJvb3RMYXlvdXQsXG4gICAgICAgIHByZWZldGNoRGF0YUNoaWxkICE9PSB1bmRlZmluZWQgPyBwcmVmZXRjaERhdGFDaGlsZCA6IG51bGwsXG4gICAgICAgIHByZWZldGNoSGVhZCxcbiAgICAgICAgaXNQcmVmZXRjaEhlYWRQYXJ0aWFsLFxuICAgICAgICBuZXdTZWdtZW50UGF0aENoaWxkLFxuICAgICAgICBzY3JvbGxhYmxlU2VnbWVudHNSZXN1bHRcbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAodGFza0NoaWxkICE9PSBudWxsKSB7XG4gICAgICAvLyBSZWN1cnNpdmVseSBwcm9wYWdhdGUgdXAgdGhlIGNoaWxkIHRhc2tzLlxuXG4gICAgICBpZiAodGFza0NoaWxkLnJvdXRlID09PSBudWxsKSB7XG4gICAgICAgIC8vIE9uZSBvZiB0aGUgY2hpbGQgdGFza3MgZGlzY292ZXJlZCBhIGNoYW5nZSB0byB0aGUgcm9vdCBsYXlvdXQuXG4gICAgICAgIC8vIEltbWVkaWF0ZWx5IHVud2luZCBmcm9tIHRoaXMgcmVjdXJzaXZlIHRyYXZlcnNhbC5cbiAgICAgICAgcmV0dXJuIE1QQV9OQVZJR0FUSU9OX1RBU0tcbiAgICAgIH1cblxuICAgICAgaWYgKHRhc2tDaGlsZHJlbiA9PT0gbnVsbCkge1xuICAgICAgICB0YXNrQ2hpbGRyZW4gPSBuZXcgTWFwKClcbiAgICAgIH1cbiAgICAgIHRhc2tDaGlsZHJlbi5zZXQocGFyYWxsZWxSb3V0ZUtleSwgdGFza0NoaWxkKVxuICAgICAgY29uc3QgbmV3Q2FjaGVOb2RlQ2hpbGQgPSB0YXNrQ2hpbGQubm9kZVxuICAgICAgaWYgKG5ld0NhY2hlTm9kZUNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG5ld1NlZ21lbnRNYXBDaGlsZDogQ2hpbGRTZWdtZW50TWFwID0gbmV3IE1hcChvbGRTZWdtZW50TWFwQ2hpbGQpXG4gICAgICAgIG5ld1NlZ21lbnRNYXBDaGlsZC5zZXQobmV3U2VnbWVudEtleUNoaWxkLCBuZXdDYWNoZU5vZGVDaGlsZClcbiAgICAgICAgcHJlZmV0Y2hQYXJhbGxlbFJvdXRlcy5zZXQocGFyYWxsZWxSb3V0ZUtleSwgbmV3U2VnbWVudE1hcENoaWxkKVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY2hpbGQgdHJlZSdzIHJvdXRlIHN0YXRlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgcHJlZmV0Y2hlZFxuICAgICAgLy8gcm91dGUgc2VudCBieSB0aGUgc2VydmVyLiBXZSBuZWVkIHRvIGNsb25lIGl0IGFzIHdlIHRyYXZlcnNlIGJhY2sgdXBcbiAgICAgIC8vIHRoZSB0cmVlLlxuICAgICAgY29uc3QgdGFza0NoaWxkUm91dGUgPSB0YXNrQ2hpbGQucm91dGVcbiAgICAgIHBhdGNoZWRSb3V0ZXJTdGF0ZUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldID0gdGFza0NoaWxkUm91dGVcblxuICAgICAgY29uc3QgZHluYW1pY1JlcXVlc3RUcmVlQ2hpbGQgPSB0YXNrQ2hpbGQuZHluYW1pY1JlcXVlc3RUcmVlXG4gICAgICBpZiAoZHluYW1pY1JlcXVlc3RUcmVlQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gU29tZXRoaW5nIGluIHRoZSBjaGlsZCB0cmVlIGlzIGR5bmFtaWMuXG4gICAgICAgIG5lZWRzRHluYW1pY1JlcXVlc3QgPSB0cnVlXG4gICAgICAgIGR5bmFtaWNSZXF1ZXN0VHJlZUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldID0gZHluYW1pY1JlcXVlc3RUcmVlQ2hpbGRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGR5bmFtaWNSZXF1ZXN0VHJlZUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldID0gdGFza0NoaWxkUm91dGVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIGNoaWxkIGRpZG4ndCBjaGFuZ2UuIFdlIGNhbiB1c2UgdGhlIHByZWZldGNoZWQgcm91dGVyIHN0YXRlLlxuICAgICAgcGF0Y2hlZFJvdXRlclN0YXRlQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV0gPSBuZXdSb3V0ZXJTdGF0ZUNoaWxkXG4gICAgICBkeW5hbWljUmVxdWVzdFRyZWVDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XSA9IG5ld1JvdXRlclN0YXRlQ2hpbGRcbiAgICB9XG4gIH1cblxuICBpZiAodGFza0NoaWxkcmVuID09PSBudWxsKSB7XG4gICAgLy8gTm8gbmV3IHRhc2tzIHdlcmUgc3Bhd25lZC5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY29uc3QgbmV3Q2FjaGVOb2RlOiBSZWFkeUNhY2hlTm9kZSA9IHtcbiAgICBsYXp5RGF0YTogbnVsbCxcbiAgICByc2M6IG9sZENhY2hlTm9kZS5yc2MsXG4gICAgLy8gV2UgaW50ZW50aW9uYWxseSBhcmVuJ3QgdXBkYXRpbmcgdGhlIHByZWZldGNoUnNjIGZpZWxkLCBzaW5jZSB0aGlzIG5vZGVcbiAgICAvLyBpcyBhbHJlYWR5IHBhcnQgb2YgdGhlIGN1cnJlbnQgdHJlZSwgYmVjYXVzZSBpdCB3b3VsZCBiZSB3ZWlyZCBmb3JcbiAgICAvLyBwcmVmZXRjaCBkYXRhIHRvIGJlIG5ld2VyIHRoYW4gdGhlIGZpbmFsIGRhdGEuIEl0IHByb2JhYmx5IHdvbid0IGV2ZXIgYmVcbiAgICAvLyBvYnNlcnZhYmxlIGFueXdheSwgYnV0IGl0IGNvdWxkIGhhcHBlbiBpZiB0aGUgc2VnbWVudCBpcyB1bm1vdW50ZWQgdGhlblxuICAgIC8vIG1vdW50ZWQgYWdhaW4sIGJlY2F1c2UgTGF5b3V0Um91dGVyIHdpbGwgbW9tZW50YXJpbHkgc3dpdGNoIHRvIHJlbmRlcmluZ1xuICAgIC8vIHByZWZldGNoUnNjLCB2aWEgdXNlRGVmZXJyZWRWYWx1ZS5cbiAgICBwcmVmZXRjaFJzYzogb2xkQ2FjaGVOb2RlLnByZWZldGNoUnNjLFxuICAgIGhlYWQ6IG9sZENhY2hlTm9kZS5oZWFkLFxuICAgIHByZWZldGNoSGVhZDogb2xkQ2FjaGVOb2RlLnByZWZldGNoSGVhZCxcbiAgICBsb2FkaW5nOiBvbGRDYWNoZU5vZGUubG9hZGluZyxcblxuICAgIC8vIEV2ZXJ5dGhpbmcgaXMgY2xvbmVkIGV4Y2VwdCBmb3IgdGhlIGNoaWxkcmVuLCB3aGljaCB3ZSBjb21wdXRlZCBhYm92ZS5cbiAgICBwYXJhbGxlbFJvdXRlczogcHJlZmV0Y2hQYXJhbGxlbFJvdXRlcyxcblxuICAgIG5hdmlnYXRlZEF0LFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBSZXR1cm4gYSBjbG9uZWQgY29weSBvZiB0aGUgcm91dGVyIHN0YXRlIHdpdGggdXBkYXRlZCBjaGlsZHJlbi5cbiAgICByb3V0ZTogcGF0Y2hSb3V0ZXJTdGF0ZVdpdGhOZXdDaGlsZHJlbihcbiAgICAgIG5ld1JvdXRlclN0YXRlLFxuICAgICAgcGF0Y2hlZFJvdXRlclN0YXRlQ2hpbGRyZW5cbiAgICApLFxuICAgIG5vZGU6IG5ld0NhY2hlTm9kZSxcbiAgICBkeW5hbWljUmVxdWVzdFRyZWU6IG5lZWRzRHluYW1pY1JlcXVlc3RcbiAgICAgID8gcGF0Y2hSb3V0ZXJTdGF0ZVdpdGhOZXdDaGlsZHJlbihcbiAgICAgICAgICBuZXdSb3V0ZXJTdGF0ZSxcbiAgICAgICAgICBkeW5hbWljUmVxdWVzdFRyZWVDaGlsZHJlblxuICAgICAgICApXG4gICAgICA6IG51bGwsXG4gICAgY2hpbGRyZW46IHRhc2tDaGlsZHJlbixcbiAgfVxufVxuXG5mdW5jdGlvbiBiZWdpblJlbmRlcmluZ05ld1JvdXRlVHJlZShcbiAgbmF2aWdhdGVkQXQ6IG51bWJlcixcbiAgb2xkUm91dGVyU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlIHwgdm9pZCxcbiAgbmV3Um91dGVyU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlLFxuICBleGlzdGluZ0NhY2hlTm9kZTogQ2FjaGVOb2RlIHwgdm9pZCxcbiAgZGlkRmluZFJvb3RMYXlvdXQ6IGJvb2xlYW4sXG4gIHByZWZldGNoRGF0YTogQ2FjaGVOb2RlU2VlZERhdGEgfCBudWxsLFxuICBwb3NzaWJseVBhcnRpYWxQcmVmZXRjaEhlYWQ6IEhlYWREYXRhIHwgbnVsbCxcbiAgaXNQcmVmZXRjaEhlYWRQYXJ0aWFsOiBib29sZWFuLFxuICBzZWdtZW50UGF0aDogRmxpZ2h0U2VnbWVudFBhdGgsXG4gIHNjcm9sbGFibGVTZWdtZW50c1Jlc3VsdDogQXJyYXk8RmxpZ2h0U2VnbWVudFBhdGg+XG4pOiBUYXNrIHtcbiAgaWYgKCFkaWRGaW5kUm9vdExheW91dCkge1xuICAgIC8vIFRoZSByb3V0ZSB0cmVlIGNoYW5nZWQgYmVmb3JlIHdlIHJlYWNoZWQgYSBsYXlvdXQuIChUaGUgaGlnaGVzdC1sZXZlbFxuICAgIC8vIGxheW91dCBpbiBhIHJvdXRlIHRyZWUgaXMgcmVmZXJyZWQgdG8gYXMgdGhlIFwicm9vdFwiIGxheW91dC4pIFRoaXMgY291bGRcbiAgICAvLyBtZWFuIHRoYXQgd2UncmUgbmF2aWdhdGluZyBiZXR3ZWVuIHR3byBkaWZmZXJlbnQgcm9vdCBsYXlvdXRzLiBXaGVuIHRoaXNcbiAgICAvLyBoYXBwZW5zLCB3ZSBwZXJmb3JtIGEgZnVsbC1wYWdlIChNUEEtc3R5bGUpIG5hdmlnYXRpb24uXG4gICAgLy9cbiAgICAvLyBIb3dldmVyLCB0aGUgYWxnb3JpdGhtIGZvciBkZWNpZGluZyB3aGVyZSB0byBzdGFydCByZW5kZXJpbmcgYSByb3V0ZVxuICAgIC8vIChpLmUuIHRoZSBvbmUgcGVyZm9ybWVkIGluIG9yZGVyIHRvIHJlYWNoIHRoaXMgZnVuY3Rpb24pIGlzIHN0cmljdGVyXG4gICAgLy8gdGhhbiB0aGUgb25lIHVzZWQgdG8gZGV0ZWN0IGEgY2hhbmdlIGluIHRoZSByb290IGxheW91dC4gU28ganVzdCBiZWNhdXNlXG4gICAgLy8gd2UncmUgcmUtcmVuZGVyaW5nIGEgc2VnbWVudCBvdXRzaWRlIG9mIHRoZSByb290IGxheW91dCBkb2VzIG5vdCBtZWFuIHdlXG4gICAgLy8gc2hvdWxkIHRyaWdnZXIgYSBmdWxsLXBhZ2UgbmF2aWdhdGlvbi5cbiAgICAvL1xuICAgIC8vIFNwZWNpZmljYWxseSwgd2UgaGFuZGxlIGR5bmFtaWMgcGFyYW1ldGVycyBkaWZmZXJlbnRseTogdHdvIHNlZ21lbnRzIGFyZVxuICAgIC8vIGNvbnNpZGVyZWQgdGhlIHNhbWUgZXZlbiBpZiB0aGVpciBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBkaWZmZXJlbnQuXG4gICAgLy9cbiAgICAvLyBSZWZlciB0byBpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQgZm9yIGRldGFpbHMuXG4gICAgLy9cbiAgICAvLyBOb3RlIHRoYXQgd2Ugb25seSBoYXZlIHRvIHBlcmZvcm0gdGhpcyBleHRyYSB0cmF2ZXJzYWwgaWYgd2UgZGlkbid0XG4gICAgLy8gYWxyZWFkeSBkaXNjb3ZlciBhIHJvb3QgbGF5b3V0IGluIHRoZSBwYXJ0IG9mIHRoZSB0cmVlIHRoYXQgaXMgdW5jaGFuZ2VkLlxuICAgIC8vIEluIHRoZSBjb21tb24gY2FzZSwgdGhpcyBicmFuY2ggaXMgc2tpcHBlZCBjb21wbGV0ZWx5LlxuICAgIGlmIChcbiAgICAgIG9sZFJvdXRlclN0YXRlID09PSB1bmRlZmluZWQgfHxcbiAgICAgIGlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dChvbGRSb3V0ZXJTdGF0ZSwgbmV3Um91dGVyU3RhdGUpXG4gICAgKSB7XG4gICAgICAvLyBUaGUgcm9vdCBsYXlvdXQgY2hhbmdlZC4gUGVyZm9ybSBhIGZ1bGwtcGFnZSBuYXZpZ2F0aW9uLlxuICAgICAgcmV0dXJuIE1QQV9OQVZJR0FUSU9OX1RBU0tcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUNhY2hlTm9kZU9uTmF2aWdhdGlvbihcbiAgICBuYXZpZ2F0ZWRBdCxcbiAgICBuZXdSb3V0ZXJTdGF0ZSxcbiAgICBleGlzdGluZ0NhY2hlTm9kZSxcbiAgICBwcmVmZXRjaERhdGEsXG4gICAgcG9zc2libHlQYXJ0aWFsUHJlZmV0Y2hIZWFkLFxuICAgIGlzUHJlZmV0Y2hIZWFkUGFydGlhbCxcbiAgICBzZWdtZW50UGF0aCxcbiAgICBzY3JvbGxhYmxlU2VnbWVudHNSZXN1bHRcbiAgKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDYWNoZU5vZGVPbk5hdmlnYXRpb24oXG4gIG5hdmlnYXRlZEF0OiBudW1iZXIsXG4gIHJvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgZXhpc3RpbmdDYWNoZU5vZGU6IENhY2hlTm9kZSB8IHZvaWQsXG4gIHByZWZldGNoRGF0YTogQ2FjaGVOb2RlU2VlZERhdGEgfCBudWxsLFxuICBwb3NzaWJseVBhcnRpYWxQcmVmZXRjaEhlYWQ6IEhlYWREYXRhIHwgbnVsbCxcbiAgaXNQcmVmZXRjaEhlYWRQYXJ0aWFsOiBib29sZWFuLFxuICBzZWdtZW50UGF0aDogRmxpZ2h0U2VnbWVudFBhdGgsXG4gIHNjcm9sbGFibGVTZWdtZW50c1Jlc3VsdDogQXJyYXk8RmxpZ2h0U2VnbWVudFBhdGg+XG4pOiBTUEFOYXZpZ2F0aW9uVGFzayB7XG4gIC8vIFNhbWUgdHJhdmVyc2FsIGFzIHVwZGF0ZUNhY2hlTm9kZU5hdmlnYXRpb24sIGJ1dCB3ZSBzd2l0Y2ggdG8gdGhpcyBwYXRoXG4gIC8vIG9uY2Ugd2UgcmVhY2ggdGhlIHBhcnQgb2YgdGhlIHRyZWUgdGhhdCB3YXMgbm90IGluIHRoZSBwcmV2aW91cyByb3V0ZS4gV2VcbiAgLy8gZG9uJ3QgbmVlZCB0byBkaWZmIGFnYWluc3QgdGhlIG9sZCB0cmVlLCB3ZSBqdXN0IG5lZWQgdG8gY3JlYXRlIGEgbmV3IG9uZS5cblxuICAvLyBUaGUgaGVhZCBpcyBhc3NpZ25lZCB0byBldmVyeSBsZWFmIHNlZ21lbnQgZGVsaXZlcmVkIGJ5IHRoZSBzZXJ2ZXIuIEJhc2VkXG4gIC8vIG9uIGNvcnJlc3BvbmRpbmcgbG9naWMgaW4gZmlsbC1sYXp5LWl0ZW1zLXRpbGwtbGVhZi13aXRoLWhlYWQudHNcbiAgY29uc3Qgcm91dGVyU3RhdGVDaGlsZHJlbiA9IHJvdXRlclN0YXRlWzFdXG4gIGNvbnN0IGlzTGVhZlNlZ21lbnQgPSBPYmplY3Qua2V5cyhyb3V0ZXJTdGF0ZUNoaWxkcmVuKS5sZW5ndGggPT09IDBcblxuICAvLyBFdmVuIHdlJ3JlIHJlbmRlcmluZyBpbnNpZGUgdGhlIFwibmV3XCIgcGFydCBvZiB0aGUgdGFyZ2V0IHRyZWUsIHdlIG1heSBoYXZlXG4gIC8vIGEgbG9jYWxseSBjYWNoZWQgc2VnbWVudCB0aGF0IHdlIGNhbiByZXVzZS4gVGhpcyBtYXkgY29tZSBmcm9tIGVpdGhlciAxKVxuICAvLyB0aGUgQ2FjaGVOb2RlIHRyZWUsIHdoaWNoIGxpdmVzIGluIFJlYWN0IHN0YXRlIGFuZCBpcyBwb3B1bGF0ZWQgYnkgcHJldmlvdXNcbiAgLy8gbmF2aWdhdGlvbnM7IG9yIDIpIHRoZSBwcmVmZXRjaCBjYWNoZSwgd2hpY2ggaXMgYSBzZXBhcmF0ZSBjYWNoZSB0aGF0IGlzXG4gIC8vIHBvcHVsYXRlZCBieSBwcmVmZXRjaGVzLlxuICBsZXQgcnNjOiBSZWFjdC5SZWFjdE5vZGVcbiAgbGV0IGxvYWRpbmc6IExvYWRpbmdNb2R1bGVEYXRhIHwgUHJvbWlzZTxMb2FkaW5nTW9kdWxlRGF0YT5cbiAgbGV0IGhlYWQ6IEhlYWREYXRhIHwgbnVsbFxuICBsZXQgY2FjaGVOb2RlTmF2aWdhdGVkQXQ6IG51bWJlclxuICBpZiAoXG4gICAgZXhpc3RpbmdDYWNoZU5vZGUgIT09IHVuZGVmaW5lZCAmJlxuICAgIC8vIERZTkFNSUNfU1RBTEVUSU1FX01TIGRlZmF1bHRzIHRvIDAsIGJ1dCBpdCBjYW4gYmUgaW5jcmVhc2VkIHVzaW5nXG4gICAgLy8gdGhlIGV4cGVyaW1lbnRhbC5zdGFsZVRpbWVzLmR5bmFtaWMgY29uZmlnLiBXaGVuIHNldCwgd2UnbGwgYXZvaWRcbiAgICAvLyByZWZldGNoaW5nIGR5bmFtaWMgZGF0YSBpZiBpdCB3YXMgZmV0Y2hlZCB3aXRoaW4gdGhlIGdpdmVuIHRocmVzaG9sZC5cbiAgICBleGlzdGluZ0NhY2hlTm9kZS5uYXZpZ2F0ZWRBdCArIERZTkFNSUNfU1RBTEVUSU1FX01TID4gbmF2aWdhdGVkQXRcbiAgKSB7XG4gICAgLy8gV2UgaGF2ZSBhbiBleGlzdGluZyBDYWNoZU5vZGUgZm9yIHRoaXMgc2VnbWVudCwgYW5kIGl0J3Mgbm90IHN0YWxlLiBXZVxuICAgIC8vIHNob3VsZCByZXVzZSBpdCByYXRoZXIgdGhhbiByZXF1ZXN0IGEgbmV3IG9uZS5cbiAgICByc2MgPSBleGlzdGluZ0NhY2hlTm9kZS5yc2NcbiAgICBsb2FkaW5nID0gZXhpc3RpbmdDYWNoZU5vZGUubG9hZGluZ1xuICAgIGhlYWQgPSBleGlzdGluZ0NhY2hlTm9kZS5oZWFkXG5cbiAgICAvLyBEb24ndCB1cGRhdGUgdGhlIG5hdmlnYXRlZEF0IHRpbWVzdGFtcCwgc2luY2Ugd2UncmUgcmV1c2luZyBzdGFsZSBkYXRhLlxuICAgIGNhY2hlTm9kZU5hdmlnYXRlZEF0ID0gZXhpc3RpbmdDYWNoZU5vZGUubmF2aWdhdGVkQXRcbiAgfSBlbHNlIGlmIChwcmVmZXRjaERhdGEgIT09IG51bGwpIHtcbiAgICAvLyBUaGVyZSdzIG5vIGV4aXN0aW5nIENhY2hlTm9kZSBmb3IgdGhpcyBzZWdtZW50LCBidXQgd2UgZG8gaGF2ZSBwcmVmZXRjaFxuICAgIC8vIGRhdGEuIElmIHRoZSBwcmVmZXRjaCBkYXRhIGlzIGZ1bGx5IHN0YXRpYyAoaS5lLiBkb2VzIG5vdCBjb250YWluIGFueVxuICAgIC8vIGR5bmFtaWMgaG9sZXMpLCB3ZSBkb24ndCBuZWVkIHRvIHJlcXVlc3QgaXQgZnJvbSB0aGUgc2VydmVyLlxuICAgIHJzYyA9IHByZWZldGNoRGF0YVsxXVxuICAgIGxvYWRpbmcgPSBwcmVmZXRjaERhdGFbM11cbiAgICBoZWFkID0gaXNMZWFmU2VnbWVudCA/IHBvc3NpYmx5UGFydGlhbFByZWZldGNoSGVhZCA6IG51bGxcbiAgICAvLyBFdmVuIHRob3VnaCB3ZSdyZSBhY2Nlc3NpbmcgdGhlIGRhdGEgZnJvbSB0aGUgcHJlZmV0Y2ggY2FjaGUsIHRoaXMgaXNcbiAgICAvLyBjb25jZXB0dWFsbHkgYSBuZXcgc2VnbWVudCwgbm90IGEgcmV1c2VkIG9uZS4gU28gd2Ugc2hvdWxkIHVwZGF0ZSB0aGVcbiAgICAvLyBuYXZpZ2F0ZWRBdCB0aW1lc3RhbXAuXG4gICAgY2FjaGVOb2RlTmF2aWdhdGVkQXQgPSBuYXZpZ2F0ZWRBdFxuICAgIGNvbnN0IGlzUHJlZmV0Y2hSc2NQYXJ0aWFsID0gcHJlZmV0Y2hEYXRhWzRdXG4gICAgaWYgKFxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIHNlZ21lbnQgZGF0YSBpcyBwYXJ0aWFsXG4gICAgICBpc1ByZWZldGNoUnNjUGFydGlhbCB8fFxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGhlYWQgaXMgcGFydGlhbCAob25seSByZWxldmFudCBpZiB0aGlzIGlzIGEgbGVhZiBzZWdtZW50KVxuICAgICAgKGlzUHJlZmV0Y2hIZWFkUGFydGlhbCAmJiBpc0xlYWZTZWdtZW50KVxuICAgICkge1xuICAgICAgLy8gV2Ugb25seSBoYXZlIHBhcnRpYWwgZGF0YSBmcm9tIHRoaXMgc2VnbWVudC4gTGlrZSBtaXNzaW5nIHNlZ21lbnRzLCB3ZVxuICAgICAgLy8gbXVzdCByZXF1ZXN0IHRoZSBmdWxsIGRhdGEgZnJvbSB0aGUgc2VydmVyLlxuICAgICAgcmV0dXJuIHNwYXduUGVuZGluZ1Rhc2soXG4gICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgICByb3V0ZXJTdGF0ZSxcbiAgICAgICAgcHJlZmV0Y2hEYXRhLFxuICAgICAgICBwb3NzaWJseVBhcnRpYWxQcmVmZXRjaEhlYWQsXG4gICAgICAgIGlzUHJlZmV0Y2hIZWFkUGFydGlhbCxcbiAgICAgICAgc2VnbWVudFBhdGgsXG4gICAgICAgIHNjcm9sbGFibGVTZWdtZW50c1Jlc3VsdFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgcHJlZmV0Y2ggZGF0YSBpcyBmdWxseSBzdGF0aWMsIHNvIHdlIGNhbiBvbWl0IGl0IGZyb20gdGhlXG4gICAgICAvLyBuYXZpZ2F0aW9uIHJlcXVlc3QuXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoZXJlJ3Mgbm8gcHJlZmV0Y2ggZm9yIHRoaXMgc2VnbWVudC4gRXZlcnl0aGluZyBmcm9tIHRoaXMgcG9pbnQgd2lsbCBiZVxuICAgIC8vIHJlcXVlc3RlZCBmcm9tIHRoZSBzZXJ2ZXIsIGV2ZW4gaWYgdGhlcmUgYXJlIHN0YXRpYyBjaGlsZHJlbiBiZWxvdyBpdC5cbiAgICAvLyBDcmVhdGUgYSB0ZXJtaW5hbCB0YXNrIG5vZGUgdGhhdCB3aWxsIGxhdGVyIGJlIGZ1bGZpbGxlZCBieVxuICAgIC8vIHNlcnZlciByZXNwb25zZS5cbiAgICByZXR1cm4gc3Bhd25QZW5kaW5nVGFzayhcbiAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgcm91dGVyU3RhdGUsXG4gICAgICBudWxsLFxuICAgICAgcG9zc2libHlQYXJ0aWFsUHJlZmV0Y2hIZWFkLFxuICAgICAgaXNQcmVmZXRjaEhlYWRQYXJ0aWFsLFxuICAgICAgc2VnbWVudFBhdGgsXG4gICAgICBzY3JvbGxhYmxlU2VnbWVudHNSZXN1bHRcbiAgICApXG4gIH1cblxuICAvLyBXZSBhbHJlYWR5IGhhdmUgYSBmdWxsIHNlZ21lbnQgd2UgY2FuIHJlbmRlciwgc28gd2UgZG9uJ3QgbmVlZCB0byByZXF1ZXN0IGFcbiAgLy8gbmV3IG9uZSBmcm9tIHRoZSBzZXJ2ZXIuIEtlZXAgdHJhdmVyc2luZyBkb3duIHRoZSB0cmVlIHVudGlsIHdlIHJlYWNoXG4gIC8vIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIGEgZHluYW1pYyByZXF1ZXN0LlxuICBjb25zdCBwcmVmZXRjaERhdGFDaGlsZHJlbiA9IHByZWZldGNoRGF0YSAhPT0gbnVsbCA/IHByZWZldGNoRGF0YVsyXSA6IG51bGxcbiAgY29uc3QgdGFza0NoaWxkcmVuID0gbmV3IE1hcCgpXG4gIGNvbnN0IGV4aXN0aW5nQ2FjaGVOb2RlQ2hpbGRyZW4gPVxuICAgIGV4aXN0aW5nQ2FjaGVOb2RlICE9PSB1bmRlZmluZWQgPyBleGlzdGluZ0NhY2hlTm9kZS5wYXJhbGxlbFJvdXRlcyA6IG51bGxcbiAgY29uc3QgY2FjaGVOb2RlQ2hpbGRyZW4gPSBuZXcgTWFwKGV4aXN0aW5nQ2FjaGVOb2RlQ2hpbGRyZW4pXG4gIGxldCBkeW5hbWljUmVxdWVzdFRyZWVDaGlsZHJlbjoge1xuICAgIFtwYXJhbGxlbFJvdXRlS2V5OiBzdHJpbmddOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuICB9ID0ge31cbiAgbGV0IG5lZWRzRHluYW1pY1JlcXVlc3QgPSBmYWxzZVxuICBpZiAoaXNMZWFmU2VnbWVudCkge1xuICAgIC8vIFRoZSBzZWdtZW50IHBhdGggb2YgZXZlcnkgbGVhZiBzZWdtZW50IChpLmUuIHBhZ2UpIGlzIGNvbGxlY3RlZCBpbnRvXG4gICAgLy8gYSByZXN1bHQgYXJyYXkuIFRoaXMgaXMgdXNlZCBieSB0aGUgTGF5b3V0Um91dGVyIHRvIHNjcm9sbCB0byBlbnN1cmUgdGhhdFxuICAgIC8vIG5ldyBwYWdlcyBhcmUgdmlzaWJsZSBhZnRlciBhIG5hdmlnYXRpb24uXG4gICAgLy8gVE9ETzogV2Ugc2hvdWxkIHVzZSBhIHN0cmluZyB0byByZXByZXNlbnQgdGhlIHNlZ21lbnQgcGF0aCBpbnN0ZWFkIG9mXG4gICAgLy8gYW4gYXJyYXkuIFdlIGFscmVhZHkgdXNlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgcGF0aCB3aGVuXG4gICAgLy8gYWNjZXNzaW5nIHRoZSBTZWdtZW50IENhY2hlLCBzbyB3ZSBjYW4gdXNlIHRoZSBzYW1lIG9uZS5cbiAgICBzY3JvbGxhYmxlU2VnbWVudHNSZXN1bHQucHVzaChzZWdtZW50UGF0aClcbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxldCBwYXJhbGxlbFJvdXRlS2V5IGluIHJvdXRlclN0YXRlQ2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IHJvdXRlclN0YXRlQ2hpbGQ6IEZsaWdodFJvdXRlclN0YXRlID1cbiAgICAgICAgcm91dGVyU3RhdGVDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XVxuICAgICAgY29uc3QgcHJlZmV0Y2hEYXRhQ2hpbGQ6IENhY2hlTm9kZVNlZWREYXRhIHwgdm9pZCB8IG51bGwgPVxuICAgICAgICBwcmVmZXRjaERhdGFDaGlsZHJlbiAhPT0gbnVsbFxuICAgICAgICAgID8gcHJlZmV0Y2hEYXRhQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV1cbiAgICAgICAgICA6IG51bGxcbiAgICAgIGNvbnN0IGV4aXN0aW5nU2VnbWVudE1hcENoaWxkID1cbiAgICAgICAgZXhpc3RpbmdDYWNoZU5vZGVDaGlsZHJlbiAhPT0gbnVsbFxuICAgICAgICAgID8gZXhpc3RpbmdDYWNoZU5vZGVDaGlsZHJlbi5nZXQocGFyYWxsZWxSb3V0ZUtleSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgY29uc3Qgc2VnbWVudENoaWxkID0gcm91dGVyU3RhdGVDaGlsZFswXVxuICAgICAgY29uc3Qgc2VnbWVudFBhdGhDaGlsZCA9IHNlZ21lbnRQYXRoLmNvbmNhdChbXG4gICAgICAgIHBhcmFsbGVsUm91dGVLZXksXG4gICAgICAgIHNlZ21lbnRDaGlsZCxcbiAgICAgIF0pXG4gICAgICBjb25zdCBzZWdtZW50S2V5Q2hpbGQgPSBjcmVhdGVSb3V0ZXJDYWNoZUtleShzZWdtZW50Q2hpbGQpXG5cbiAgICAgIGNvbnN0IGV4aXN0aW5nQ2FjaGVOb2RlQ2hpbGQgPVxuICAgICAgICBleGlzdGluZ1NlZ21lbnRNYXBDaGlsZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBleGlzdGluZ1NlZ21lbnRNYXBDaGlsZC5nZXQoc2VnbWVudEtleUNoaWxkKVxuICAgICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIGNvbnN0IHRhc2tDaGlsZCA9IGNyZWF0ZUNhY2hlTm9kZU9uTmF2aWdhdGlvbihcbiAgICAgICAgbmF2aWdhdGVkQXQsXG4gICAgICAgIHJvdXRlclN0YXRlQ2hpbGQsXG4gICAgICAgIGV4aXN0aW5nQ2FjaGVOb2RlQ2hpbGQsXG4gICAgICAgIHByZWZldGNoRGF0YUNoaWxkLFxuICAgICAgICBwb3NzaWJseVBhcnRpYWxQcmVmZXRjaEhlYWQsXG4gICAgICAgIGlzUHJlZmV0Y2hIZWFkUGFydGlhbCxcbiAgICAgICAgc2VnbWVudFBhdGhDaGlsZCxcbiAgICAgICAgc2Nyb2xsYWJsZVNlZ21lbnRzUmVzdWx0XG4gICAgICApXG4gICAgICB0YXNrQ2hpbGRyZW4uc2V0KHBhcmFsbGVsUm91dGVLZXksIHRhc2tDaGlsZClcbiAgICAgIGNvbnN0IGR5bmFtaWNSZXF1ZXN0VHJlZUNoaWxkID0gdGFza0NoaWxkLmR5bmFtaWNSZXF1ZXN0VHJlZVxuICAgICAgaWYgKGR5bmFtaWNSZXF1ZXN0VHJlZUNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFNvbWV0aGluZyBpbiB0aGUgY2hpbGQgdHJlZSBpcyBkeW5hbWljLlxuICAgICAgICBuZWVkc0R5bmFtaWNSZXF1ZXN0ID0gdHJ1ZVxuICAgICAgICBkeW5hbWljUmVxdWVzdFRyZWVDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XSA9IGR5bmFtaWNSZXF1ZXN0VHJlZUNoaWxkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkeW5hbWljUmVxdWVzdFRyZWVDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XSA9IHJvdXRlclN0YXRlQ2hpbGRcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld0NhY2hlTm9kZUNoaWxkID0gdGFza0NoaWxkLm5vZGVcbiAgICAgIGlmIChuZXdDYWNoZU5vZGVDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBuZXdTZWdtZW50TWFwQ2hpbGQ6IENoaWxkU2VnbWVudE1hcCA9IG5ldyBNYXAoKVxuICAgICAgICBuZXdTZWdtZW50TWFwQ2hpbGQuc2V0KHNlZ21lbnRLZXlDaGlsZCwgbmV3Q2FjaGVOb2RlQ2hpbGQpXG4gICAgICAgIGNhY2hlTm9kZUNoaWxkcmVuLnNldChwYXJhbGxlbFJvdXRlS2V5LCBuZXdTZWdtZW50TWFwQ2hpbGQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBTaW5jZSB3ZSdyZSBpbnNpZGUgYSBuZXcgcm91dGUgdHJlZSwgdW5saWtlIHRoZVxuICAgIC8vIGB1cGRhdGVDYWNoZU5vZGVPbk5hdmlnYXRpb25gIHBhdGgsIHRoZSByb3V0ZXIgc3RhdGUgb24gdGhlIGNoaWxkcmVuXG4gICAgLy8gdGFza3MgaXMgYWx3YXlzIHRoZSBzYW1lIGFzIHRoZSByb3V0ZXIgc3RhdGUgd2UgcGFzcyBpbi4gU28gd2UgZG9uJ3QgbmVlZFxuICAgIC8vIHRvIGNsb25lL21vZGlmeSBpdC5cbiAgICByb3V0ZTogcm91dGVyU3RhdGUsXG4gICAgbm9kZToge1xuICAgICAgbGF6eURhdGE6IG51bGwsXG4gICAgICAvLyBTaW5jZSB0aGlzIHNlZ21lbnQgaXMgYWxyZWFkeSBmdWxsLCB3ZSBkb24ndCBuZWVkIHRvIHVzZSB0aGVcbiAgICAgIC8vIGBwcmVmZXRjaFJzY2AgZmllbGQuXG4gICAgICByc2MsXG4gICAgICBwcmVmZXRjaFJzYzogbnVsbCxcbiAgICAgIGhlYWQsXG4gICAgICBwcmVmZXRjaEhlYWQ6IG51bGwsXG4gICAgICBsb2FkaW5nLFxuICAgICAgcGFyYWxsZWxSb3V0ZXM6IGNhY2hlTm9kZUNoaWxkcmVuLFxuICAgICAgbmF2aWdhdGVkQXQ6IGNhY2hlTm9kZU5hdmlnYXRlZEF0LFxuICAgIH0sXG4gICAgZHluYW1pY1JlcXVlc3RUcmVlOiBuZWVkc0R5bmFtaWNSZXF1ZXN0XG4gICAgICA/IHBhdGNoUm91dGVyU3RhdGVXaXRoTmV3Q2hpbGRyZW4ocm91dGVyU3RhdGUsIGR5bmFtaWNSZXF1ZXN0VHJlZUNoaWxkcmVuKVxuICAgICAgOiBudWxsLFxuICAgIGNoaWxkcmVuOiB0YXNrQ2hpbGRyZW4sXG4gIH1cbn1cblxuZnVuY3Rpb24gcGF0Y2hSb3V0ZXJTdGF0ZVdpdGhOZXdDaGlsZHJlbihcbiAgYmFzZVJvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgbmV3Q2hpbGRyZW46IHsgW3BhcmFsbGVsUm91dGVLZXk6IHN0cmluZ106IEZsaWdodFJvdXRlclN0YXRlIH1cbik6IEZsaWdodFJvdXRlclN0YXRlIHtcbiAgY29uc3QgY2xvbmU6IEZsaWdodFJvdXRlclN0YXRlID0gW2Jhc2VSb3V0ZXJTdGF0ZVswXSwgbmV3Q2hpbGRyZW5dXG4gIC8vIEJhc2VkIG9uIGVxdWl2YWxlbnQgbG9naWMgaW4gYXBwbHktcm91dGVyLXN0YXRlLXBhdGNoLXRvLXRyZWUsIGJ1dCBzaG91bGRcbiAgLy8gY29uZmlybSB3aGV0aGVyIHdlIG5lZWQgdG8gY29weSBhbGwgb2YgdGhlc2UgZmllbGRzLiBOb3Qgc3VyZSB0aGUgc2VydmVyXG4gIC8vIGV2ZXIgc2VuZHMsIGUuZy4gdGhlIHJlZmV0Y2ggbWFya2VyLlxuICBpZiAoMiBpbiBiYXNlUm91dGVyU3RhdGUpIHtcbiAgICBjbG9uZVsyXSA9IGJhc2VSb3V0ZXJTdGF0ZVsyXVxuICB9XG4gIGlmICgzIGluIGJhc2VSb3V0ZXJTdGF0ZSkge1xuICAgIGNsb25lWzNdID0gYmFzZVJvdXRlclN0YXRlWzNdXG4gIH1cbiAgaWYgKDQgaW4gYmFzZVJvdXRlclN0YXRlKSB7XG4gICAgY2xvbmVbNF0gPSBiYXNlUm91dGVyU3RhdGVbNF1cbiAgfVxuICByZXR1cm4gY2xvbmVcbn1cblxuZnVuY3Rpb24gc3Bhd25QZW5kaW5nVGFzayhcbiAgbmF2aWdhdGVkQXQ6IG51bWJlcixcbiAgcm91dGVyU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlLFxuICBwcmVmZXRjaERhdGE6IENhY2hlTm9kZVNlZWREYXRhIHwgbnVsbCxcbiAgcHJlZmV0Y2hIZWFkOiBIZWFkRGF0YSB8IG51bGwsXG4gIGlzUHJlZmV0Y2hIZWFkUGFydGlhbDogYm9vbGVhbixcbiAgc2VnbWVudFBhdGg6IEZsaWdodFNlZ21lbnRQYXRoLFxuICBzY3JvbGxhYmxlU2VnbWVudHNSZXN1bHQ6IEFycmF5PEZsaWdodFNlZ21lbnRQYXRoPlxuKTogU1BBTmF2aWdhdGlvblRhc2sge1xuICAvLyBDcmVhdGUgYSB0YXNrIHRoYXQgd2lsbCBsYXRlciBiZSBmdWxmaWxsZWQgYnkgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIuXG5cbiAgLy8gQ2xvbmUgdGhlIHByZWZldGNoZWQgcm91dGUgdHJlZSBhbmQgdGhlIGByZWZldGNoYCBtYXJrZXIgdG8gaXQuIFdlJ2xsIHNlbmRcbiAgLy8gdGhpcyB0byB0aGUgc2VydmVyIHNvIGl0IGtub3dzIHdoZXJlIHRvIHN0YXJ0IHJlbmRlcmluZy5cbiAgY29uc3QgZHluYW1pY1JlcXVlc3RUcmVlID0gcGF0Y2hSb3V0ZXJTdGF0ZVdpdGhOZXdDaGlsZHJlbihcbiAgICByb3V0ZXJTdGF0ZSxcbiAgICByb3V0ZXJTdGF0ZVsxXVxuICApXG4gIGR5bmFtaWNSZXF1ZXN0VHJlZVszXSA9ICdyZWZldGNoJ1xuXG4gIGNvbnN0IG5ld1Rhc2s6IFRhc2sgPSB7XG4gICAgcm91dGU6IHJvdXRlclN0YXRlLFxuXG4gICAgLy8gQ29ycmVzcG9uZHMgdG8gdGhlIHBhcnQgb2YgdGhlIHJvdXRlIHRoYXQgd2lsbCBiZSByZW5kZXJlZCBvbiB0aGUgc2VydmVyLlxuICAgIG5vZGU6IGNyZWF0ZVBlbmRpbmdDYWNoZU5vZGUoXG4gICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgIHJvdXRlclN0YXRlLFxuICAgICAgcHJlZmV0Y2hEYXRhLFxuICAgICAgcHJlZmV0Y2hIZWFkLFxuICAgICAgaXNQcmVmZXRjaEhlYWRQYXJ0aWFsLFxuICAgICAgc2VnbWVudFBhdGgsXG4gICAgICBzY3JvbGxhYmxlU2VnbWVudHNSZXN1bHRcbiAgICApLFxuICAgIC8vIEJlY2F1c2UgdGhpcyBpcyBub24tbnVsbCwgYW5kIGl0IGdldHMgcHJvcGFnYXRlZCB1cCB0aHJvdWdoIHRoZSBwYXJlbnRcbiAgICAvLyB0YXNrcywgdGhlIHJvb3QgdGFzayB3aWxsIGtub3cgdGhhdCBpdCBuZWVkcyB0byBwZXJmb3JtIGEgc2VydmVyIHJlcXVlc3QuXG4gICAgZHluYW1pY1JlcXVlc3RUcmVlLFxuICAgIGNoaWxkcmVuOiBudWxsLFxuICB9XG4gIHJldHVybiBuZXdUYXNrXG59XG5cbmZ1bmN0aW9uIHNwYXduUmV1c2VkVGFzayhyZXVzZWRSb3V0ZXJTdGF0ZTogRmxpZ2h0Um91dGVyU3RhdGUpOiBUYXNrIHtcbiAgLy8gQ3JlYXRlIGEgdGFzayB0aGF0IHJldXNlcyBhbiBleGlzdGluZyBzZWdtZW50LCBlLmcuIHdoZW4gcmV1c2luZ1xuICAvLyB0aGUgY3VycmVudCBhY3RpdmUgc2VnbWVudCBpbiBwbGFjZSBvZiBhIGRlZmF1bHQgcm91dGUuXG4gIHJldHVybiB7XG4gICAgcm91dGU6IHJldXNlZFJvdXRlclN0YXRlLFxuICAgIG5vZGU6IG51bGwsXG4gICAgZHluYW1pY1JlcXVlc3RUcmVlOiBudWxsLFxuICAgIGNoaWxkcmVuOiBudWxsLFxuICB9XG59XG5cbi8vIFdyaXRlcyBhIGR5bmFtaWMgc2VydmVyIHJlc3BvbnNlIGludG8gdGhlIHRyZWUgY3JlYXRlZCBieVxuLy8gdXBkYXRlQ2FjaGVOb2RlT25OYXZpZ2F0aW9uLiBBbGwgcGVuZGluZyBwcm9taXNlcyB0aGF0IHdlcmUgc3Bhd25lZCBieSB0aGVcbi8vIG5hdmlnYXRpb24gd2lsbCBiZSByZXNvbHZlZCwgZWl0aGVyIHdpdGggZHluYW1pYyBkYXRhIGZyb20gdGhlIHNlcnZlciwgb3Jcbi8vIGBudWxsYCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBkYXRhIGlzIG1pc3NpbmcuXG4vL1xuLy8gQSBgbnVsbGAgdmFsdWUgd2lsbCB0cmlnZ2VyIGEgbGF6eSBmZXRjaCBkdXJpbmcgcmVuZGVyLCB3aGljaCB3aWxsIHRoZW4gcGF0Y2hcbi8vIHVwIHRoZSB0cmVlIHVzaW5nIHRoZSBzYW1lIG1lY2hhbmlzbSBhcyB0aGUgbm9uLVBQUiBpbXBsZW1lbnRhdGlvblxuLy8gKHNlcnZlclBhdGNoUmVkdWNlcikuXG4vL1xuLy8gVXN1YWxseSwgdGhlIHNlcnZlciB3aWxsIHJlc3BvbmQgd2l0aCBleGFjdGx5IHRoZSBzdWJzZXQgb2YgZGF0YSB0aGF0IHdlJ3JlXG4vLyB3YWl0aW5nIGZvciDigJQgZXZlcnl0aGluZyBiZWxvdyB0aGUgbmVhcmVzdCBzaGFyZWQgbGF5b3V0LiBCdXQgdGVjaG5pY2FsbHksXG4vLyB0aGUgc2VydmVyIGNhbiByZXR1cm4gYW55dGhpbmcgaXQgd2FudHMuXG4vL1xuLy8gVGhpcyBkb2VzIF9ub3RfIGNyZWF0ZSBhIG5ldyB0cmVlOyBpdCBtb2RpZmllcyB0aGUgZXhpc3Rpbmcgb25lIGluIHBsYWNlLlxuLy8gV2hpY2ggbWVhbnMgaXQgbXVzdCBmb2xsb3cgdGhlIFN1c3BlbnNlIHJ1bGVzIG9mIGNhY2hlIHNhZmV0eS5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0ZW5Gb3JEeW5hbWljUmVxdWVzdChcbiAgdGFzazogU1BBTmF2aWdhdGlvblRhc2ssXG4gIHJlc3BvbnNlUHJvbWlzZTogUHJvbWlzZTxGZXRjaFNlcnZlclJlc3BvbnNlUmVzdWx0PlxuKSB7XG4gIHJlc3BvbnNlUHJvbWlzZS50aGVuKFxuICAgICh7IGZsaWdodERhdGEgfTogRmV0Y2hTZXJ2ZXJSZXNwb25zZVJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmbGlnaHREYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBIYXBwZW5zIHdoZW4gbmF2aWdhdGluZyB0byBwYWdlIGluIGBwYWdlc2AgZnJvbSBgYXBwYC4gV2Ugc2hvdWxkbid0XG4gICAgICAgIC8vIGdldCBoZXJlIGJlY2F1c2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBoYW5kbGVkIHRoaXMgZHVyaW5nXG4gICAgICAgIC8vIHRoZSBwcmVmZXRjaC5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IG5vcm1hbGl6ZWRGbGlnaHREYXRhIG9mIGZsaWdodERhdGEpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNlZ21lbnRQYXRoLFxuICAgICAgICAgIHRyZWU6IHNlcnZlclJvdXRlclN0YXRlLFxuICAgICAgICAgIHNlZWREYXRhOiBkeW5hbWljRGF0YSxcbiAgICAgICAgICBoZWFkOiBkeW5hbWljSGVhZCxcbiAgICAgICAgfSA9IG5vcm1hbGl6ZWRGbGlnaHREYXRhXG5cbiAgICAgICAgaWYgKCFkeW5hbWljRGF0YSkge1xuICAgICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4gUFBSIHNob3VsZCBhbHdheXMgc2VuZCBiYWNrIGEgcmVzcG9uc2UuXG4gICAgICAgICAgLy8gSG93ZXZlciwgYEZsaWdodERhdGFQYXRoYCBpcyBhIHNoYXJlZCB0eXBlIGFuZCB0aGUgcHJlLVBQUiBoYW5kbGluZyBvZlxuICAgICAgICAgIC8vIHRoaXMgbWlnaHQgcmV0dXJuIG51bGwuXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIHdyaXRlRHluYW1pY0RhdGFJbnRvUGVuZGluZ1Rhc2soXG4gICAgICAgICAgdGFzayxcbiAgICAgICAgICBzZWdtZW50UGF0aCxcbiAgICAgICAgICBzZXJ2ZXJSb3V0ZXJTdGF0ZSxcbiAgICAgICAgICBkeW5hbWljRGF0YSxcbiAgICAgICAgICBkeW5hbWljSGVhZFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIGV4aGF1c3RlZCBhbGwgdGhlIGRhdGEgd2UgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLCBpZlxuICAgICAgLy8gdGhlcmUgYXJlIGFueSByZW1haW5pbmcgcGVuZGluZyB0YXNrcyBpbiB0aGUgdHJlZSwgYWJvcnQgdGhlbSBub3cuXG4gICAgICAvLyBJZiB0aGVyZSdzIGFueSBtaXNzaW5nIGRhdGEsIGl0IHdpbGwgdHJpZ2dlciBhIGxhenkgZmV0Y2guXG4gICAgICBhYm9ydFRhc2sodGFzaywgbnVsbClcbiAgICB9LFxuICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAvLyBUaGlzIHdpbGwgdHJpZ2dlciBhbiBlcnJvciBkdXJpbmcgcmVuZGVyXG4gICAgICBhYm9ydFRhc2sodGFzaywgZXJyb3IpXG4gICAgfVxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlRHluYW1pY0RhdGFJbnRvUGVuZGluZ1Rhc2soXG4gIHJvb3RUYXNrOiBTUEFOYXZpZ2F0aW9uVGFzayxcbiAgc2VnbWVudFBhdGg6IEZsaWdodFNlZ21lbnRQYXRoLFxuICBzZXJ2ZXJSb3V0ZXJTdGF0ZTogRmxpZ2h0Um91dGVyU3RhdGUsXG4gIGR5bmFtaWNEYXRhOiBDYWNoZU5vZGVTZWVkRGF0YSxcbiAgZHluYW1pY0hlYWQ6IEhlYWREYXRhXG4pIHtcbiAgLy8gVGhlIGRhdGEgc2VudCBieSB0aGUgc2VydmVyIHJlcHJlc2VudHMgb25seSBhIHN1YnRyZWUgb2YgdGhlIGFwcC4gV2UgbmVlZFxuICAvLyB0byBmaW5kIHRoZSBwYXJ0IG9mIHRoZSB0YXNrIHRyZWUgdGhhdCBtYXRjaGVzIHRoZSBzZXJ2ZXIgcmVzcG9uc2UsIGFuZFxuICAvLyBmdWxmaWxsIGl0IHVzaW5nIHRoZSBkeW5hbWljIGRhdGEuXG4gIC8vXG4gIC8vIHNlZ21lbnRQYXRoIHJlcHJlc2VudHMgdGhlIHBhcmVudCBwYXRoIG9mIHN1YnRyZWUuIEl0J3MgYSByZXBlYXRpbmcgcGF0dGVyblxuICAvLyBvZiBwYXJhbGxlbCByb3V0ZSBrZXkgYW5kIHNlZ21lbnQ6XG4gIC8vXG4gIC8vICAgW3N0cmluZywgU2VnbWVudCwgc3RyaW5nLCBTZWdtZW50LCBzdHJpbmcsIFNlZ21lbnQsIC4uLl1cbiAgLy9cbiAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBwYXRoIGFuZCBmaW5pc2ggYW55IHRhc2tzIHRoYXQgbWF0Y2ggdGhpcyBwYXlsb2FkLlxuICBsZXQgdGFzayA9IHJvb3RUYXNrXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudFBhdGgubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBjb25zdCBwYXJhbGxlbFJvdXRlS2V5OiBzdHJpbmcgPSBzZWdtZW50UGF0aFtpXVxuICAgIGNvbnN0IHNlZ21lbnQ6IFNlZ21lbnQgPSBzZWdtZW50UGF0aFtpICsgMV1cbiAgICBjb25zdCB0YXNrQ2hpbGRyZW4gPSB0YXNrLmNoaWxkcmVuXG4gICAgaWYgKHRhc2tDaGlsZHJlbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdGFza0NoaWxkID0gdGFza0NoaWxkcmVuLmdldChwYXJhbGxlbFJvdXRlS2V5KVxuICAgICAgaWYgKHRhc2tDaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHRhc2tTZWdtZW50ID0gdGFza0NoaWxkLnJvdXRlWzBdXG4gICAgICAgIGlmIChtYXRjaFNlZ21lbnQoc2VnbWVudCwgdGFza1NlZ21lbnQpKSB7XG4gICAgICAgICAgLy8gRm91bmQgYSBtYXRjaCBmb3IgdGhpcyB0YXNrLiBLZWVwIHRyYXZlcnNpbmcgZG93biB0aGUgdGFzayB0cmVlLlxuICAgICAgICAgIHRhc2sgPSB0YXNrQ2hpbGRcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFdlIGRpZG4ndCBmaW5kIGEgY2hpbGQgdGFzayB0aGF0IG1hdGNoZXMgdGhlIHNlcnZlciBkYXRhLiBFeGl0LiBXZSB3b24ndFxuICAgIC8vIGFib3J0IHRoZSB0YXNrLCB0aG91Z2gsIGJlY2F1c2UgYSBkaWZmZXJlbnQgRmxpZ2h0RGF0YVBhdGggbWF5IGJlIGFibGUgdG9cbiAgICAvLyBmdWxmaWxsIGl0IChzZWUgbG9vcCBpbiBsaXN0ZW5Gb3JEeW5hbWljUmVxdWVzdCkuIFdlIG9ubHkgYWJvcnQgdGFza3NcbiAgICAvLyBvbmNlIHdlJ3ZlIHJ1biBvdXQgb2YgZGF0YS5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGZpbmlzaFRhc2tVc2luZ0R5bmFtaWNEYXRhUGF5bG9hZChcbiAgICB0YXNrLFxuICAgIHNlcnZlclJvdXRlclN0YXRlLFxuICAgIGR5bmFtaWNEYXRhLFxuICAgIGR5bmFtaWNIZWFkXG4gIClcbn1cblxuZnVuY3Rpb24gZmluaXNoVGFza1VzaW5nRHluYW1pY0RhdGFQYXlsb2FkKFxuICB0YXNrOiBTUEFOYXZpZ2F0aW9uVGFzayxcbiAgc2VydmVyUm91dGVyU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlLFxuICBkeW5hbWljRGF0YTogQ2FjaGVOb2RlU2VlZERhdGEsXG4gIGR5bmFtaWNIZWFkOiBIZWFkRGF0YVxuKSB7XG4gIGlmICh0YXNrLmR5bmFtaWNSZXF1ZXN0VHJlZSA9PT0gbnVsbCkge1xuICAgIC8vIEV2ZXJ5dGhpbmcgaW4gdGhpcyBzdWJ0cmVlIGlzIGFscmVhZHkgY29tcGxldGUuIEJhaWwgb3V0LlxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gZHluYW1pY0RhdGEgbWF5IHJlcHJlc2VudCBhIGxhcmdlciBzdWJ0cmVlIHRoYW4gdGhlIHRhc2suIEJlZm9yZSB3ZSBjYW5cbiAgLy8gZmluaXNoIHRoZSB0YXNrLCB3ZSBuZWVkIHRvIGxpbmUgdGhlbSB1cC5cbiAgY29uc3QgdGFza0NoaWxkcmVuID0gdGFzay5jaGlsZHJlblxuICBjb25zdCB0YXNrTm9kZSA9IHRhc2subm9kZVxuICBpZiAodGFza0NoaWxkcmVuID09PSBudWxsKSB7XG4gICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgbGVhZiBub2RlIG9mIHRoZSBwZW5kaW5nIHRhc2suIFRoZSBzZXJ2ZXIgZGF0YSB0cmVlXG4gICAgLy8gbGluZXMgdXAgdGhlIHBlbmRpbmcgQ2FjaGUgTm9kZSB0cmVlLiBXZSBjYW4gbm93IHN3aXRjaCB0byB0aGVcbiAgICAvLyBub3JtYWwgYWxnb3JpdGhtLlxuICAgIGlmICh0YXNrTm9kZSAhPT0gbnVsbCkge1xuICAgICAgZmluaXNoUGVuZGluZ0NhY2hlTm9kZShcbiAgICAgICAgdGFza05vZGUsXG4gICAgICAgIHRhc2sucm91dGUsXG4gICAgICAgIHNlcnZlclJvdXRlclN0YXRlLFxuICAgICAgICBkeW5hbWljRGF0YSxcbiAgICAgICAgZHluYW1pY0hlYWRcbiAgICAgIClcbiAgICAgIC8vIFNldCB0aGlzIHRvIG51bGwgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHRhc2sgaXMgbm93IGNvbXBsZXRlLlxuICAgICAgdGFzay5keW5hbWljUmVxdWVzdFRyZWUgPSBudWxsXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIC8vIFRoZSBzZXJ2ZXIgcmV0dXJuZWQgbW9yZSBkYXRhIHRoYW4gd2UgbmVlZCB0byBmaW5pc2ggdGhlIHRhc2suIFNraXAgb3ZlclxuICAvLyB0aGUgZXh0cmEgc2VnbWVudHMgdW50aWwgd2UgcmVhY2ggdGhlIGxlYWYgdGFzayBub2RlLlxuICBjb25zdCBzZXJ2ZXJDaGlsZHJlbiA9IHNlcnZlclJvdXRlclN0YXRlWzFdXG4gIGNvbnN0IGR5bmFtaWNEYXRhQ2hpbGRyZW4gPSBkeW5hbWljRGF0YVsyXVxuXG4gIGZvciAoY29uc3QgcGFyYWxsZWxSb3V0ZUtleSBpbiBzZXJ2ZXJSb3V0ZXJTdGF0ZSkge1xuICAgIGNvbnN0IHNlcnZlclJvdXRlclN0YXRlQ2hpbGQ6IEZsaWdodFJvdXRlclN0YXRlID1cbiAgICAgIHNlcnZlckNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldXG4gICAgY29uc3QgZHluYW1pY0RhdGFDaGlsZDogQ2FjaGVOb2RlU2VlZERhdGEgfCBudWxsIHwgdm9pZCA9XG4gICAgICBkeW5hbWljRGF0YUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldXG5cbiAgICBjb25zdCB0YXNrQ2hpbGQgPSB0YXNrQ2hpbGRyZW4uZ2V0KHBhcmFsbGVsUm91dGVLZXkpXG4gICAgaWYgKHRhc2tDaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0YXNrU2VnbWVudCA9IHRhc2tDaGlsZC5yb3V0ZVswXVxuICAgICAgaWYgKFxuICAgICAgICBtYXRjaFNlZ21lbnQoc2VydmVyUm91dGVyU3RhdGVDaGlsZFswXSwgdGFza1NlZ21lbnQpICYmXG4gICAgICAgIGR5bmFtaWNEYXRhQ2hpbGQgIT09IG51bGwgJiZcbiAgICAgICAgZHluYW1pY0RhdGFDaGlsZCAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgLy8gRm91bmQgYSBtYXRjaCBmb3IgdGhpcyB0YXNrLiBLZWVwIHRyYXZlcnNpbmcgZG93biB0aGUgdGFzayB0cmVlLlxuICAgICAgICByZXR1cm4gZmluaXNoVGFza1VzaW5nRHluYW1pY0RhdGFQYXlsb2FkKFxuICAgICAgICAgIHRhc2tDaGlsZCxcbiAgICAgICAgICBzZXJ2ZXJSb3V0ZXJTdGF0ZUNoaWxkLFxuICAgICAgICAgIGR5bmFtaWNEYXRhQ2hpbGQsXG4gICAgICAgICAgZHluYW1pY0hlYWRcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBXZSBkaWRuJ3QgZmluZCBhIGNoaWxkIHRhc2sgdGhhdCBtYXRjaGVzIHRoZSBzZXJ2ZXIgZGF0YS4gV2Ugd29uJ3QgYWJvcnRcbiAgICAvLyB0aGUgdGFzaywgdGhvdWdoLCBiZWNhdXNlIGEgZGlmZmVyZW50IEZsaWdodERhdGFQYXRoIG1heSBiZSBhYmxlIHRvXG4gICAgLy8gZnVsZmlsbCBpdCAoc2VlIGxvb3AgaW4gbGlzdGVuRm9yRHluYW1pY1JlcXVlc3QpLiBXZSBvbmx5IGFib3J0IHRhc2tzXG4gICAgLy8gb25jZSB3ZSd2ZSBydW4gb3V0IG9mIGRhdGEuXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlUGVuZGluZ0NhY2hlTm9kZShcbiAgbmF2aWdhdGVkQXQ6IG51bWJlcixcbiAgcm91dGVyU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlLFxuICBwcmVmZXRjaERhdGE6IENhY2hlTm9kZVNlZWREYXRhIHwgbnVsbCxcbiAgcHJlZmV0Y2hIZWFkOiBIZWFkRGF0YSB8IG51bGwsXG4gIGlzUHJlZmV0Y2hIZWFkUGFydGlhbDogYm9vbGVhbixcbiAgc2VnbWVudFBhdGg6IEZsaWdodFNlZ21lbnRQYXRoLFxuICBzY3JvbGxhYmxlU2VnbWVudHNSZXN1bHQ6IEFycmF5PEZsaWdodFNlZ21lbnRQYXRoPlxuKTogUmVhZHlDYWNoZU5vZGUge1xuICBjb25zdCByb3V0ZXJTdGF0ZUNoaWxkcmVuID0gcm91dGVyU3RhdGVbMV1cbiAgY29uc3QgcHJlZmV0Y2hEYXRhQ2hpbGRyZW4gPSBwcmVmZXRjaERhdGEgIT09IG51bGwgPyBwcmVmZXRjaERhdGFbMl0gOiBudWxsXG5cbiAgY29uc3QgcGFyYWxsZWxSb3V0ZXMgPSBuZXcgTWFwKClcbiAgZm9yIChsZXQgcGFyYWxsZWxSb3V0ZUtleSBpbiByb3V0ZXJTdGF0ZUNoaWxkcmVuKSB7XG4gICAgY29uc3Qgcm91dGVyU3RhdGVDaGlsZDogRmxpZ2h0Um91dGVyU3RhdGUgPVxuICAgICAgcm91dGVyU3RhdGVDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XVxuICAgIGNvbnN0IHByZWZldGNoRGF0YUNoaWxkOiBDYWNoZU5vZGVTZWVkRGF0YSB8IG51bGwgfCB2b2lkID1cbiAgICAgIHByZWZldGNoRGF0YUNoaWxkcmVuICE9PSBudWxsXG4gICAgICAgID8gcHJlZmV0Y2hEYXRhQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV1cbiAgICAgICAgOiBudWxsXG5cbiAgICBjb25zdCBzZWdtZW50Q2hpbGQgPSByb3V0ZXJTdGF0ZUNoaWxkWzBdXG4gICAgY29uc3Qgc2VnbWVudFBhdGhDaGlsZCA9IHNlZ21lbnRQYXRoLmNvbmNhdChbXG4gICAgICBwYXJhbGxlbFJvdXRlS2V5LFxuICAgICAgc2VnbWVudENoaWxkLFxuICAgIF0pXG4gICAgY29uc3Qgc2VnbWVudEtleUNoaWxkID0gY3JlYXRlUm91dGVyQ2FjaGVLZXkoc2VnbWVudENoaWxkKVxuXG4gICAgY29uc3QgbmV3Q2FjaGVOb2RlQ2hpbGQgPSBjcmVhdGVQZW5kaW5nQ2FjaGVOb2RlKFxuICAgICAgbmF2aWdhdGVkQXQsXG4gICAgICByb3V0ZXJTdGF0ZUNoaWxkLFxuICAgICAgcHJlZmV0Y2hEYXRhQ2hpbGQgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBwcmVmZXRjaERhdGFDaGlsZCxcbiAgICAgIHByZWZldGNoSGVhZCxcbiAgICAgIGlzUHJlZmV0Y2hIZWFkUGFydGlhbCxcbiAgICAgIHNlZ21lbnRQYXRoQ2hpbGQsXG4gICAgICBzY3JvbGxhYmxlU2VnbWVudHNSZXN1bHRcbiAgICApXG5cbiAgICBjb25zdCBuZXdTZWdtZW50TWFwQ2hpbGQ6IENoaWxkU2VnbWVudE1hcCA9IG5ldyBNYXAoKVxuICAgIG5ld1NlZ21lbnRNYXBDaGlsZC5zZXQoc2VnbWVudEtleUNoaWxkLCBuZXdDYWNoZU5vZGVDaGlsZClcbiAgICBwYXJhbGxlbFJvdXRlcy5zZXQocGFyYWxsZWxSb3V0ZUtleSwgbmV3U2VnbWVudE1hcENoaWxkKVxuICB9XG5cbiAgLy8gVGhlIGhlYWQgaXMgYXNzaWduZWQgdG8gZXZlcnkgbGVhZiBzZWdtZW50IGRlbGl2ZXJlZCBieSB0aGUgc2VydmVyLiBCYXNlZFxuICAvLyBvbiBjb3JyZXNwb25kaW5nIGxvZ2ljIGluIGZpbGwtbGF6eS1pdGVtcy10aWxsLWxlYWYtd2l0aC1oZWFkLnRzXG4gIGNvbnN0IGlzTGVhZlNlZ21lbnQgPSBwYXJhbGxlbFJvdXRlcy5zaXplID09PSAwXG5cbiAgaWYgKGlzTGVhZlNlZ21lbnQpIHtcbiAgICAvLyBUaGUgc2VnbWVudCBwYXRoIG9mIGV2ZXJ5IGxlYWYgc2VnbWVudCAoaS5lLiBwYWdlKSBpcyBjb2xsZWN0ZWQgaW50b1xuICAgIC8vIGEgcmVzdWx0IGFycmF5LiBUaGlzIGlzIHVzZWQgYnkgdGhlIExheW91dFJvdXRlciB0byBzY3JvbGwgdG8gZW5zdXJlIHRoYXRcbiAgICAvLyBuZXcgcGFnZXMgYXJlIHZpc2libGUgYWZ0ZXIgYSBuYXZpZ2F0aW9uLlxuICAgIC8vIFRPRE86IFdlIHNob3VsZCB1c2UgYSBzdHJpbmcgdG8gcmVwcmVzZW50IHRoZSBzZWdtZW50IHBhdGggaW5zdGVhZCBvZlxuICAgIC8vIGFuIGFycmF5LiBXZSBhbHJlYWR5IHVzZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIHBhdGggd2hlblxuICAgIC8vIGFjY2Vzc2luZyB0aGUgU2VnbWVudCBDYWNoZSwgc28gd2UgY2FuIHVzZSB0aGUgc2FtZSBvbmUuXG4gICAgc2Nyb2xsYWJsZVNlZ21lbnRzUmVzdWx0LnB1c2goc2VnbWVudFBhdGgpXG4gIH1cblxuICBjb25zdCBtYXliZVByZWZldGNoUnNjID0gcHJlZmV0Y2hEYXRhICE9PSBudWxsID8gcHJlZmV0Y2hEYXRhWzFdIDogbnVsbFxuICBjb25zdCBtYXliZVByZWZldGNoTG9hZGluZyA9IHByZWZldGNoRGF0YSAhPT0gbnVsbCA/IHByZWZldGNoRGF0YVszXSA6IG51bGxcbiAgcmV0dXJuIHtcbiAgICBsYXp5RGF0YTogbnVsbCxcbiAgICBwYXJhbGxlbFJvdXRlczogcGFyYWxsZWxSb3V0ZXMsXG5cbiAgICBwcmVmZXRjaFJzYzogbWF5YmVQcmVmZXRjaFJzYyAhPT0gdW5kZWZpbmVkID8gbWF5YmVQcmVmZXRjaFJzYyA6IG51bGwsXG4gICAgcHJlZmV0Y2hIZWFkOiBpc0xlYWZTZWdtZW50ID8gcHJlZmV0Y2hIZWFkIDogW251bGwsIG51bGxdLFxuXG4gICAgLy8gVE9ETzogVGVjaG5pY2FsbHksIGEgbG9hZGluZyBib3VuZGFyeSBjb3VsZCBjb250YWluIGR5bmFtaWMgZGF0YS4gV2UgbXVzdFxuICAgIC8vIGhhdmUgc2VwYXJhdGUgYGxvYWRpbmdgIGFuZCBgcHJlZmV0Y2hMb2FkaW5nYCBmaWVsZHMgdG8gaGFuZGxlIHRoaXMsIGxpa2VcbiAgICAvLyB3ZSBkbyBmb3IgdGhlIHNlZ21lbnQgZGF0YSBhbmQgaGVhZC5cbiAgICBsb2FkaW5nOiBtYXliZVByZWZldGNoTG9hZGluZyAhPT0gdW5kZWZpbmVkID8gbWF5YmVQcmVmZXRjaExvYWRpbmcgOiBudWxsLFxuXG4gICAgLy8gQ3JlYXRlIGEgZGVmZXJyZWQgcHJvbWlzZS4gVGhpcyB3aWxsIGJlIGZ1bGZpbGxlZCBvbmNlIHRoZSBkeW5hbWljXG4gICAgLy8gcmVzcG9uc2UgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLlxuICAgIHJzYzogY3JlYXRlRGVmZXJyZWRSc2MoKSBhcyBSZWFjdC5SZWFjdE5vZGUsXG4gICAgaGVhZDogaXNMZWFmU2VnbWVudCA/IChjcmVhdGVEZWZlcnJlZFJzYygpIGFzIFJlYWN0LlJlYWN0Tm9kZSkgOiBudWxsLFxuXG4gICAgbmF2aWdhdGVkQXQsXG4gIH1cbn1cblxuZnVuY3Rpb24gZmluaXNoUGVuZGluZ0NhY2hlTm9kZShcbiAgY2FjaGVOb2RlOiBDYWNoZU5vZGUsXG4gIHRhc2tTdGF0ZTogRmxpZ2h0Um91dGVyU3RhdGUsXG4gIHNlcnZlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgZHluYW1pY0RhdGE6IENhY2hlTm9kZVNlZWREYXRhLFxuICBkeW5hbWljSGVhZDogSGVhZERhdGFcbik6IHZvaWQge1xuICAvLyBXcml0ZXMgYSBkeW5hbWljIHJlc3BvbnNlIGludG8gYW4gZXhpc3RpbmcgQ2FjaGUgTm9kZSB0cmVlLiBUaGlzIGRvZXMgX25vdF9cbiAgLy8gY3JlYXRlIGEgbmV3IHRyZWUsIGl0IHVwZGF0ZXMgdGhlIGV4aXN0aW5nIHRyZWUgaW4tcGxhY2UuIFNvIGl0IG11c3QgZm9sbG93XG4gIC8vIHRoZSBTdXNwZW5zZSBydWxlcyBvZiBjYWNoZSBzYWZldHkg4oCUIGl0IGNhbiByZXNvbHZlIHBlbmRpbmcgcHJvbWlzZXMsIGJ1dFxuICAvLyBpdCBjYW5ub3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGRhdGEuIEl0IGNhbiBhZGQgc2VnbWVudHMgdG8gdGhlIHRyZWUgKGJlY2F1c2VcbiAgLy8gYSBtaXNzaW5nIHNlZ21lbnQgd2lsbCBjYXVzZSB0aGUgbGF5b3V0IHJvdXRlciB0byBzdXNwZW5kKS5cbiAgLy8gYnV0IGl0IGNhbm5vdCBkZWxldGUgdGhlbS5cbiAgLy9cbiAgLy8gV2UgbXVzdCByZXNvbHZlIGV2ZXJ5IHByb21pc2UgaW4gdGhlIHRyZWUsIG9yIGVsc2UgaXQgd2lsbCBzdXNwZW5kXG4gIC8vIGluZGVmaW5pdGVseS4gSWYgd2UgZGlkIG5vdCByZWNlaXZlIGRhdGEgZm9yIGEgc2VnbWVudCwgd2Ugd2lsbCByZXNvbHZlIGl0c1xuICAvLyBkYXRhIHByb21pc2UgdG8gYG51bGxgIHRvIHRyaWdnZXIgYSBsYXp5IGZldGNoIGR1cmluZyByZW5kZXIuXG4gIGNvbnN0IHRhc2tTdGF0ZUNoaWxkcmVuID0gdGFza1N0YXRlWzFdXG4gIGNvbnN0IHNlcnZlclN0YXRlQ2hpbGRyZW4gPSBzZXJ2ZXJTdGF0ZVsxXVxuICBjb25zdCBkYXRhQ2hpbGRyZW4gPSBkeW5hbWljRGF0YVsyXVxuXG4gIC8vIFRoZSByb3V0ZXIgc3RhdGUgdGhhdCB3ZSB0cmF2ZXJzZSB0aGUgdHJlZSB3aXRoICh0YXNrU3RhdGUpIGlzIHRoZSBzYW1lIG9uZVxuICAvLyB0aGF0IHdlIHVzZWQgdG8gY29uc3RydWN0IHRoZSBwZW5kaW5nIENhY2hlIE5vZGUgdHJlZS4gVGhhdCB3YXkgd2UncmUgc3VyZVxuICAvLyB0byByZXNvbHZlIGFsbCB0aGUgcGVuZGluZyBwcm9taXNlcy5cbiAgY29uc3QgcGFyYWxsZWxSb3V0ZXMgPSBjYWNoZU5vZGUucGFyYWxsZWxSb3V0ZXNcbiAgZm9yIChsZXQgcGFyYWxsZWxSb3V0ZUtleSBpbiB0YXNrU3RhdGVDaGlsZHJlbikge1xuICAgIGNvbnN0IHRhc2tTdGF0ZUNoaWxkOiBGbGlnaHRSb3V0ZXJTdGF0ZSA9XG4gICAgICB0YXNrU3RhdGVDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XVxuICAgIGNvbnN0IHNlcnZlclN0YXRlQ2hpbGQ6IEZsaWdodFJvdXRlclN0YXRlIHwgdm9pZCA9XG4gICAgICBzZXJ2ZXJTdGF0ZUNoaWxkcmVuW3BhcmFsbGVsUm91dGVLZXldXG4gICAgY29uc3QgZGF0YUNoaWxkOiBDYWNoZU5vZGVTZWVkRGF0YSB8IG51bGwgfCB2b2lkID1cbiAgICAgIGRhdGFDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XVxuXG4gICAgY29uc3Qgc2VnbWVudE1hcENoaWxkID0gcGFyYWxsZWxSb3V0ZXMuZ2V0KHBhcmFsbGVsUm91dGVLZXkpXG4gICAgY29uc3QgdGFza1NlZ21lbnRDaGlsZCA9IHRhc2tTdGF0ZUNoaWxkWzBdXG4gICAgY29uc3QgdGFza1NlZ21lbnRLZXlDaGlsZCA9IGNyZWF0ZVJvdXRlckNhY2hlS2V5KHRhc2tTZWdtZW50Q2hpbGQpXG5cbiAgICBjb25zdCBjYWNoZU5vZGVDaGlsZCA9XG4gICAgICBzZWdtZW50TWFwQ2hpbGQgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNlZ21lbnRNYXBDaGlsZC5nZXQodGFza1NlZ21lbnRLZXlDaGlsZClcbiAgICAgICAgOiB1bmRlZmluZWRcblxuICAgIGlmIChjYWNoZU5vZGVDaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHNlcnZlclN0YXRlQ2hpbGQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBtYXRjaFNlZ21lbnQodGFza1NlZ21lbnRDaGlsZCwgc2VydmVyU3RhdGVDaGlsZFswXSlcbiAgICAgICkge1xuICAgICAgICBpZiAoZGF0YUNoaWxkICE9PSB1bmRlZmluZWQgJiYgZGF0YUNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyB0aGUgaGFwcHkgcGF0aC4gUmVjdXJzaXZlbHkgdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4uXG4gICAgICAgICAgZmluaXNoUGVuZGluZ0NhY2hlTm9kZShcbiAgICAgICAgICAgIGNhY2hlTm9kZUNoaWxkLFxuICAgICAgICAgICAgdGFza1N0YXRlQ2hpbGQsXG4gICAgICAgICAgICBzZXJ2ZXJTdGF0ZUNoaWxkLFxuICAgICAgICAgICAgZGF0YUNoaWxkLFxuICAgICAgICAgICAgZHluYW1pY0hlYWRcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhlIHNlcnZlciBuZXZlciByZXR1cm5lZCBkYXRhIGZvciB0aGlzIHNlZ21lbnQuIFRyaWdnZXIgYSBsYXp5XG4gICAgICAgICAgLy8gZmV0Y2ggZHVyaW5nIHJlbmRlci4gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIGJlY2F1c2UgdGhlIFJvdXRlIFRyZWVcbiAgICAgICAgICAvLyBhbmQgdGhlIFNlZWQgRGF0YSB0cmVlIHNlbnQgYnkgdGhlIHNlcnZlciBzaG91bGQgYWx3YXlzIGJlIHRoZSBzYW1lXG4gICAgICAgICAgLy8gc2hhcGUgd2hlbiBwYXJ0IG9mIHRoZSBzYW1lIHNlcnZlciByZXNwb25zZS5cbiAgICAgICAgICBhYm9ydFBlbmRpbmdDYWNoZU5vZGUodGFza1N0YXRlQ2hpbGQsIGNhY2hlTm9kZUNoaWxkLCBudWxsKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGUgc2VydmVyIG5ldmVyIHJldHVybmVkIGRhdGEgZm9yIHRoaXMgc2VnbWVudC4gVHJpZ2dlciBhIGxhenlcbiAgICAgICAgLy8gZmV0Y2ggZHVyaW5nIHJlbmRlci5cbiAgICAgICAgYWJvcnRQZW5kaW5nQ2FjaGVOb2RlKHRhc2tTdGF0ZUNoaWxkLCBjYWNoZU5vZGVDaGlsZCwgbnVsbClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIHNlcnZlciByZXNwb25zZSBtYXRjaGVzIHdoYXQgd2FzIGV4cGVjdGVkIHRvIHJlY2VpdmUsIGJ1dCB0aGVyZSdzXG4gICAgICAvLyBubyBtYXRjaGluZyBDYWNoZSBOb2RlIGluIHRoZSB0YXNrIHRyZWUuIFRoaXMgaXMgYSBidWcgaW4gdGhlXG4gICAgICAvLyBpbXBsZW1lbnRhdGlvbiBiZWNhdXNlIHdlIHNob3VsZCBoYXZlIGNyZWF0ZWQgYSBub2RlIGZvciBldmVyeVxuICAgICAgLy8gc2VnbWVudCBpbiB0aGUgdHJlZSB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFzay5cbiAgICB9XG4gIH1cblxuICAvLyBVc2UgdGhlIGR5bmFtaWMgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgdG8gZnVsZmlsbCB0aGUgZGVmZXJyZWQgUlNDIHByb21pc2VcbiAgLy8gb24gdGhlIENhY2hlIE5vZGUuXG4gIGNvbnN0IHJzYyA9IGNhY2hlTm9kZS5yc2NcbiAgY29uc3QgZHluYW1pY1NlZ21lbnREYXRhID0gZHluYW1pY0RhdGFbMV1cbiAgaWYgKHJzYyA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgYSBsYXp5IGNhY2hlIG5vZGUuIFdlIGNhbiBvdmVyd3JpdGUgaXQuIFRoaXMgaXMgb25seSBzYWZlXG4gICAgLy8gYmVjYXVzZSB3ZSBrbm93IHRoYXQgdGhlIExheW91dFJvdXRlciBzdXNwZW5kcyBpZiBgcnNjYCBpcyBgbnVsbGAuXG4gICAgY2FjaGVOb2RlLnJzYyA9IGR5bmFtaWNTZWdtZW50RGF0YVxuICB9IGVsc2UgaWYgKGlzRGVmZXJyZWRSc2MocnNjKSkge1xuICAgIC8vIFRoaXMgaXMgYSBkZWZlcnJlZCBSU0MgcHJvbWlzZS4gV2UgY2FuIGZ1bGZpbGwgaXQgd2l0aCB0aGUgZGF0YSB3ZSBqdXN0XG4gICAgLy8gcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLiBJZiBpdCB3YXMgYWxyZWFkeSByZXNvbHZlZCBieSBhIGRpZmZlcmVudFxuICAgIC8vIG5hdmlnYXRpb24sIHRoZW4gdGhpcyBkb2VzIG5vdGhpbmcgYmVjYXVzZSB3ZSBjYW4ndCBvdmVyd3JpdGUgZGF0YS5cbiAgICByc2MucmVzb2x2ZShkeW5hbWljU2VnbWVudERhdGEpXG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBpcyBub3QgYSBkZWZlcnJlZCBSU0MgcHJvbWlzZSwgbm9yIGlzIGl0IGVtcHR5LCBzbyBpdCBtdXN0IGhhdmVcbiAgICAvLyBiZWVuIHBvcHVsYXRlZCBieSBhIGRpZmZlcmVudCBuYXZpZ2F0aW9uLiBXZSBtdXN0IG5vdCBvdmVyd3JpdGUgaXQuXG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgbGVhZiBzZWdtZW50LiBJZiBzbywgaXQgd2lsbCBoYXZlIGEgYGhlYWRgIHByb3BlcnR5IHdpdGhcbiAgLy8gYSBwZW5kaW5nIHByb21pc2UgdGhhdCBuZWVkcyB0byBiZSByZXNvbHZlZCB3aXRoIHRoZSBkeW5hbWljIGhlYWQgZnJvbVxuICAvLyB0aGUgc2VydmVyLlxuICBjb25zdCBoZWFkID0gY2FjaGVOb2RlLmhlYWRcbiAgaWYgKGlzRGVmZXJyZWRSc2MoaGVhZCkpIHtcbiAgICBoZWFkLnJlc29sdmUoZHluYW1pY0hlYWQpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFib3J0VGFzayh0YXNrOiBTUEFOYXZpZ2F0aW9uVGFzaywgZXJyb3I6IGFueSk6IHZvaWQge1xuICBjb25zdCBjYWNoZU5vZGUgPSB0YXNrLm5vZGVcbiAgaWYgKGNhY2hlTm9kZSA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaW5kaWNhdGVzIHRoZSB0YXNrIGlzIGFscmVhZHkgY29tcGxldGUuXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB0YXNrQ2hpbGRyZW4gPSB0YXNrLmNoaWxkcmVuXG4gIGlmICh0YXNrQ2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICAvLyBSZWFjaGVkIHRoZSBsZWFmIHRhc2sgbm9kZS4gVGhpcyBpcyB0aGUgcm9vdCBvZiBhIHBlbmRpbmcgY2FjaGVcbiAgICAvLyBub2RlIHRyZWUuXG4gICAgYWJvcnRQZW5kaW5nQ2FjaGVOb2RlKHRhc2sucm91dGUsIGNhY2hlTm9kZSwgZXJyb3IpXG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBpcyBhbiBpbnRlcm1lZGlhdGUgdGFzayBub2RlLiBLZWVwIHRyYXZlcnNpbmcgdW50aWwgd2UgcmVhY2ggYVxuICAgIC8vIHRhc2sgbm9kZSB3aXRoIG5vIGNoaWxkcmVuLiBUaGF0IHdpbGwgYmUgdGhlIHJvb3Qgb2YgdGhlIGNhY2hlIG5vZGUgdHJlZVxuICAgIC8vIHRoYXQgbmVlZHMgdG8gYmUgcmVzb2x2ZWQuXG4gICAgZm9yIChjb25zdCB0YXNrQ2hpbGQgb2YgdGFza0NoaWxkcmVuLnZhbHVlcygpKSB7XG4gICAgICBhYm9ydFRhc2sodGFza0NoaWxkLCBlcnJvcilcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgdGhpcyB0byBudWxsIHRvIGluZGljYXRlIHRoYXQgdGhpcyB0YXNrIGlzIG5vdyBjb21wbGV0ZS5cbiAgdGFzay5keW5hbWljUmVxdWVzdFRyZWUgPSBudWxsXG59XG5cbmZ1bmN0aW9uIGFib3J0UGVuZGluZ0NhY2hlTm9kZShcbiAgcm91dGVyU3RhdGU6IEZsaWdodFJvdXRlclN0YXRlLFxuICBjYWNoZU5vZGU6IENhY2hlTm9kZSxcbiAgZXJyb3I6IGFueVxuKTogdm9pZCB7XG4gIC8vIEZvciBldmVyeSBwZW5kaW5nIHNlZ21lbnQgaW4gdGhlIHRyZWUsIHJlc29sdmUgaXRzIGByc2NgIHByb21pc2UgdG8gYG51bGxgXG4gIC8vIHRvIHRyaWdnZXIgYSBsYXp5IGZldGNoIGR1cmluZyByZW5kZXIuXG4gIC8vXG4gIC8vIE9yLCBpZiBhbiBlcnJvciBvYmplY3QgaXMgcHJvdmlkZWQsIGl0IHdpbGwgZXJyb3IgaW5zdGVhZC5cbiAgY29uc3Qgcm91dGVyU3RhdGVDaGlsZHJlbiA9IHJvdXRlclN0YXRlWzFdXG4gIGNvbnN0IHBhcmFsbGVsUm91dGVzID0gY2FjaGVOb2RlLnBhcmFsbGVsUm91dGVzXG4gIGZvciAobGV0IHBhcmFsbGVsUm91dGVLZXkgaW4gcm91dGVyU3RhdGVDaGlsZHJlbikge1xuICAgIGNvbnN0IHJvdXRlclN0YXRlQ2hpbGQ6IEZsaWdodFJvdXRlclN0YXRlID1cbiAgICAgIHJvdXRlclN0YXRlQ2hpbGRyZW5bcGFyYWxsZWxSb3V0ZUtleV1cbiAgICBjb25zdCBzZWdtZW50TWFwQ2hpbGQgPSBwYXJhbGxlbFJvdXRlcy5nZXQocGFyYWxsZWxSb3V0ZUtleSlcbiAgICBpZiAoc2VnbWVudE1hcENoaWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBiZWNhdXNlIHdlJ3JlIHRyYXZlcnNpbmcgdGhlIHNhbWUgdHJlZSB0aGF0IHdhc1xuICAgICAgLy8gdXNlZCB0byBjb25zdHJ1Y3QgdGhlIGNhY2hlIG5vZGVzIGluIHRoZSBmaXJzdCBwbGFjZS5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGNvbnN0IHNlZ21lbnRDaGlsZCA9IHJvdXRlclN0YXRlQ2hpbGRbMF1cbiAgICBjb25zdCBzZWdtZW50S2V5Q2hpbGQgPSBjcmVhdGVSb3V0ZXJDYWNoZUtleShzZWdtZW50Q2hpbGQpXG4gICAgY29uc3QgY2FjaGVOb2RlQ2hpbGQgPSBzZWdtZW50TWFwQ2hpbGQuZ2V0KHNlZ21lbnRLZXlDaGlsZClcbiAgICBpZiAoY2FjaGVOb2RlQ2hpbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYWJvcnRQZW5kaW5nQ2FjaGVOb2RlKHJvdXRlclN0YXRlQ2hpbGQsIGNhY2hlTm9kZUNoaWxkLCBlcnJvcilcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIGJlY2F1c2Ugd2UncmUgdHJhdmVyc2luZyB0aGUgc2FtZSB0cmVlIHRoYXQgd2FzXG4gICAgICAvLyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgY2FjaGUgbm9kZXMgaW4gdGhlIGZpcnN0IHBsYWNlLlxuICAgIH1cbiAgfVxuICBjb25zdCByc2MgPSBjYWNoZU5vZGUucnNjXG4gIGlmIChpc0RlZmVycmVkUnNjKHJzYykpIHtcbiAgICBpZiAoZXJyb3IgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIGEgbGF6eSBmZXRjaCBkdXJpbmcgcmVuZGVyLlxuICAgICAgcnNjLnJlc29sdmUobnVsbClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyB3aWxsIHRyaWdnZXIgYW4gZXJyb3IgZHVyaW5nIHJlbmRlcmluZy5cbiAgICAgIHJzYy5yZWplY3QoZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIGxlYWYgc2VnbWVudC4gSWYgc28sIGl0IHdpbGwgaGF2ZSBhIGBoZWFkYCBwcm9wZXJ0eSB3aXRoXG4gIC8vIGEgcGVuZGluZyBwcm9taXNlIHRoYXQgbmVlZHMgdG8gYmUgcmVzb2x2ZWQuIElmIGFuIGVycm9yIHdhcyBwcm92aWRlZCwgd2VcbiAgLy8gd2lsbCBub3QgcmVzb2x2ZSBpdCB3aXRoIGFuIGVycm9yLCBzaW5jZSB0aGlzIGlzIHJlbmRlcmVkIGF0IHRoZSByb290IG9mXG4gIC8vIHRoZSBhcHAuIFdlIHdhbnQgdGhlIHNlZ21lbnQgdG8gZXJyb3IsIG5vdCB0aGUgZW50aXJlIGFwcC5cbiAgY29uc3QgaGVhZCA9IGNhY2hlTm9kZS5oZWFkXG4gIGlmIChpc0RlZmVycmVkUnNjKGhlYWQpKSB7XG4gICAgaGVhZC5yZXNvbHZlKG51bGwpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUNhY2hlTm9kZU9uUG9wc3RhdGVSZXN0b3JhdGlvbihcbiAgb2xkQ2FjaGVOb2RlOiBDYWNoZU5vZGUsXG4gIHJvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuKTogUmVhZHlDYWNoZU5vZGUge1xuICAvLyBBIHBvcHN0YXRlIG5hdmlnYXRpb24gcmVhZHMgZGF0YSBmcm9tIHRoZSBsb2NhbCBjYWNoZS4gSXQgZG9lcyBub3QgaXNzdWVcbiAgLy8gbmV3IG5ldHdvcmsgcmVxdWVzdHMgKHVubGVzcyB0aGUgY2FjaGUgZW50cmllcyBoYXZlIGJlZW4gZXZpY3RlZCkuIFNvLCB3ZVxuICAvLyB1cGRhdGUgdGhlIGNhY2hlIHRvIGRyb3AgdGhlIHByZWZldGNoIGRhdGEgZm9yIGFueSBzZWdtZW50IHdob3NlIGR5bmFtaWNcbiAgLy8gZGF0YSB3YXMgYWxyZWFkeSByZWNlaXZlZC4gVGhpcyBwcmV2ZW50cyBhbiB1bm5lY2Vzc2FyeSBmbGFzaCBiYWNrIHRvIFBQUlxuICAvLyBzdGF0ZSBkdXJpbmcgYSBiYWNrL2ZvcndhcmQgbmF2aWdhdGlvbi5cbiAgLy9cbiAgLy8gVGhpcyBmdW5jdGlvbiBjbG9uZXMgdGhlIGVudGlyZSBjYWNoZSBub2RlIHRyZWUgYW5kIHNldHMgdGhlIGBwcmVmZXRjaFJzY2BcbiAgLy8gZmllbGQgdG8gYG51bGxgIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyByZW5kZXJlZC4gV2UgY2FuJ3QgbXV0YXRlIHRoZSBub2RlXG4gIC8vIGluIHBsYWNlIGJlY2F1c2UgdGhpcyBpcyBhIGNvbmN1cnJlbnQgZGF0YSBzdHJ1Y3R1cmUuXG5cbiAgY29uc3Qgcm91dGVyU3RhdGVDaGlsZHJlbiA9IHJvdXRlclN0YXRlWzFdXG4gIGNvbnN0IG9sZFBhcmFsbGVsUm91dGVzID0gb2xkQ2FjaGVOb2RlLnBhcmFsbGVsUm91dGVzXG4gIGNvbnN0IG5ld1BhcmFsbGVsUm91dGVzID0gbmV3IE1hcChvbGRQYXJhbGxlbFJvdXRlcylcbiAgZm9yIChsZXQgcGFyYWxsZWxSb3V0ZUtleSBpbiByb3V0ZXJTdGF0ZUNoaWxkcmVuKSB7XG4gICAgY29uc3Qgcm91dGVyU3RhdGVDaGlsZDogRmxpZ2h0Um91dGVyU3RhdGUgPVxuICAgICAgcm91dGVyU3RhdGVDaGlsZHJlbltwYXJhbGxlbFJvdXRlS2V5XVxuICAgIGNvbnN0IHNlZ21lbnRDaGlsZCA9IHJvdXRlclN0YXRlQ2hpbGRbMF1cbiAgICBjb25zdCBzZWdtZW50S2V5Q2hpbGQgPSBjcmVhdGVSb3V0ZXJDYWNoZUtleShzZWdtZW50Q2hpbGQpXG4gICAgY29uc3Qgb2xkU2VnbWVudE1hcENoaWxkID0gb2xkUGFyYWxsZWxSb3V0ZXMuZ2V0KHBhcmFsbGVsUm91dGVLZXkpXG4gICAgaWYgKG9sZFNlZ21lbnRNYXBDaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvbGRDYWNoZU5vZGVDaGlsZCA9IG9sZFNlZ21lbnRNYXBDaGlsZC5nZXQoc2VnbWVudEtleUNoaWxkKVxuICAgICAgaWYgKG9sZENhY2hlTm9kZUNoaWxkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbmV3Q2FjaGVOb2RlQ2hpbGQgPSB1cGRhdGVDYWNoZU5vZGVPblBvcHN0YXRlUmVzdG9yYXRpb24oXG4gICAgICAgICAgb2xkQ2FjaGVOb2RlQ2hpbGQsXG4gICAgICAgICAgcm91dGVyU3RhdGVDaGlsZFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IG5ld1NlZ21lbnRNYXBDaGlsZCA9IG5ldyBNYXAob2xkU2VnbWVudE1hcENoaWxkKVxuICAgICAgICBuZXdTZWdtZW50TWFwQ2hpbGQuc2V0KHNlZ21lbnRLZXlDaGlsZCwgbmV3Q2FjaGVOb2RlQ2hpbGQpXG4gICAgICAgIG5ld1BhcmFsbGVsUm91dGVzLnNldChwYXJhbGxlbFJvdXRlS2V5LCBuZXdTZWdtZW50TWFwQ2hpbGQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gT25seSBzaG93IHByZWZldGNoZWQgZGF0YSBpZiB0aGUgZHluYW1pYyBkYXRhIGlzIHN0aWxsIHBlbmRpbmcuXG4gIC8vXG4gIC8vIFRlaG5pY2FsbHksIHdoYXQgd2UncmUgYWN0dWFsbHkgY2hlY2tpbmcgaXMgd2hldGhlciB0aGUgZHluYW1pYyBuZXR3b3JrXG4gIC8vIHJlc3BvbnNlIHdhcyByZWNlaXZlZC4gQnV0IHNpbmNlIGl0J3MgYSBzdHJlYW1pbmcgcmVzcG9uc2UsIHRoaXMgZG9lcyBub3RcbiAgLy8gbWVhbiB0aGF0IGFsbCB0aGUgZHluYW1pYyBkYXRhIGhhcyBmdWxseSBzdHJlYW1lZCBpbi4gSXQganVzdCBtZWFucyB0aGF0XG4gIC8vIF9zb21lXyBvZiB0aGUgZHluYW1pYyBkYXRhIHdhcyByZWNlaXZlZC4gQnV0IGFzIGEgaGV1cmlzdGljLCB3ZSBhc3N1bWUgdGhhdFxuICAvLyB0aGUgcmVzdCBkeW5hbWljIGRhdGEgd2lsbCBzdHJlYW0gaW4gcXVpY2tseSwgc28gaXQncyBzdGlsbCBiZXR0ZXIgdG8gc2tpcFxuICAvLyB0aGUgcHJlZmV0Y2ggc3RhdGUuXG4gIGNvbnN0IHJzYyA9IG9sZENhY2hlTm9kZS5yc2NcbiAgY29uc3Qgc2hvdWxkVXNlUHJlZmV0Y2ggPSBpc0RlZmVycmVkUnNjKHJzYykgJiYgcnNjLnN0YXR1cyA9PT0gJ3BlbmRpbmcnXG5cbiAgcmV0dXJuIHtcbiAgICBsYXp5RGF0YTogbnVsbCxcbiAgICByc2MsXG4gICAgaGVhZDogb2xkQ2FjaGVOb2RlLmhlYWQsXG5cbiAgICBwcmVmZXRjaEhlYWQ6IHNob3VsZFVzZVByZWZldGNoID8gb2xkQ2FjaGVOb2RlLnByZWZldGNoSGVhZCA6IFtudWxsLCBudWxsXSxcbiAgICBwcmVmZXRjaFJzYzogc2hvdWxkVXNlUHJlZmV0Y2ggPyBvbGRDYWNoZU5vZGUucHJlZmV0Y2hSc2MgOiBudWxsLFxuICAgIGxvYWRpbmc6IG9sZENhY2hlTm9kZS5sb2FkaW5nLFxuXG4gICAgLy8gVGhlc2UgYXJlIHRoZSBjbG9uZWQgY2hpbGRyZW4gd2UgY29tcHV0ZWQgYWJvdmVcbiAgICBwYXJhbGxlbFJvdXRlczogbmV3UGFyYWxsZWxSb3V0ZXMsXG5cbiAgICBuYXZpZ2F0ZWRBdDogb2xkQ2FjaGVOb2RlLm5hdmlnYXRlZEF0LFxuICB9XG59XG5cbmNvbnN0IERFRkVSUkVEID0gU3ltYm9sKClcblxudHlwZSBQZW5kaW5nRGVmZXJyZWRSc2MgPSBQcm9taXNlPFJlYWN0LlJlYWN0Tm9kZT4gJiB7XG4gIHN0YXR1czogJ3BlbmRpbmcnXG4gIHJlc29sdmU6ICh2YWx1ZTogUmVhY3QuUmVhY3ROb2RlKSA9PiB2b2lkXG4gIHJlamVjdDogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgdGFnOiBTeW1ib2xcbn1cblxudHlwZSBGdWxmaWxsZWREZWZlcnJlZFJzYyA9IFByb21pc2U8UmVhY3QuUmVhY3ROb2RlPiAmIHtcbiAgc3RhdHVzOiAnZnVsZmlsbGVkJ1xuICB2YWx1ZTogUmVhY3QuUmVhY3ROb2RlXG4gIHJlc29sdmU6ICh2YWx1ZTogUmVhY3QuUmVhY3ROb2RlKSA9PiB2b2lkXG4gIHJlamVjdDogKGVycm9yOiBhbnkpID0+IHZvaWRcbiAgdGFnOiBTeW1ib2xcbn1cblxudHlwZSBSZWplY3RlZERlZmVycmVkUnNjID0gUHJvbWlzZTxSZWFjdC5SZWFjdE5vZGU+ICYge1xuICBzdGF0dXM6ICdyZWplY3RlZCdcbiAgcmVhc29uOiBhbnlcbiAgcmVzb2x2ZTogKHZhbHVlOiBSZWFjdC5SZWFjdE5vZGUpID0+IHZvaWRcbiAgcmVqZWN0OiAoZXJyb3I6IGFueSkgPT4gdm9pZFxuICB0YWc6IFN5bWJvbFxufVxuXG50eXBlIERlZmVycmVkUnNjID1cbiAgfCBQZW5kaW5nRGVmZXJyZWRSc2NcbiAgfCBGdWxmaWxsZWREZWZlcnJlZFJzY1xuICB8IFJlamVjdGVkRGVmZXJyZWRSc2NcblxuLy8gVGhpcyB0eXBlIGV4aXN0cyB0byBkaXN0aW5ndWlzaCBhIERlZmVycmVkUnNjIGZyb20gYSBGbGlnaHQgcHJvbWlzZS4gSXQncyBhXG4vLyBjb21wcm9taXNlIHRvIGF2b2lkIGFkZGluZyBhbiBleHRyYSBmaWVsZCBvbiBldmVyeSBDYWNoZSBOb2RlLCB3aGljaCB3b3VsZCBiZVxuLy8gYXdrd2FyZCBiZWNhdXNlIHRoZSBwcmUtUFBSIHBhcnRzIG9mIGNvZGViYXNlIHdvdWxkIG5lZWQgdG8gYWNjb3VudCBmb3IgaXQsXG4vLyB0b28uIFdlIGNhbiByZW1vdmUgaXQgb25jZSB0eXBlIENhY2hlIE5vZGUgdHlwZSBpcyBtb3JlIHNldHRsZWQuXG5mdW5jdGlvbiBpc0RlZmVycmVkUnNjKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBEZWZlcnJlZFJzYyB7XG4gIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS50YWcgPT09IERFRkVSUkVEXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURlZmVycmVkUnNjKCk6IFBlbmRpbmdEZWZlcnJlZFJzYyB7XG4gIGxldCByZXNvbHZlOiBhbnlcbiAgbGV0IHJlamVjdDogYW55XG4gIGNvbnN0IHBlbmRpbmdSc2MgPSBuZXcgUHJvbWlzZTxSZWFjdC5SZWFjdE5vZGU+KChyZXMsIHJlaikgPT4ge1xuICAgIHJlc29sdmUgPSByZXNcbiAgICByZWplY3QgPSByZWpcbiAgfSkgYXMgUGVuZGluZ0RlZmVycmVkUnNjXG4gIHBlbmRpbmdSc2Muc3RhdHVzID0gJ3BlbmRpbmcnXG4gIHBlbmRpbmdSc2MucmVzb2x2ZSA9ICh2YWx1ZTogUmVhY3QuUmVhY3ROb2RlKSA9PiB7XG4gICAgaWYgKHBlbmRpbmdSc2Muc3RhdHVzID09PSAncGVuZGluZycpIHtcbiAgICAgIGNvbnN0IGZ1bGZpbGxlZFJzYzogRnVsZmlsbGVkRGVmZXJyZWRSc2MgPSBwZW5kaW5nUnNjIGFzIGFueVxuICAgICAgZnVsZmlsbGVkUnNjLnN0YXR1cyA9ICdmdWxmaWxsZWQnXG4gICAgICBmdWxmaWxsZWRSc2MudmFsdWUgPSB2YWx1ZVxuICAgICAgcmVzb2x2ZSh2YWx1ZSlcbiAgICB9XG4gIH1cbiAgcGVuZGluZ1JzYy5yZWplY3QgPSAoZXJyb3I6IGFueSkgPT4ge1xuICAgIGlmIChwZW5kaW5nUnNjLnN0YXR1cyA9PT0gJ3BlbmRpbmcnKSB7XG4gICAgICBjb25zdCByZWplY3RlZFJzYzogUmVqZWN0ZWREZWZlcnJlZFJzYyA9IHBlbmRpbmdSc2MgYXMgYW55XG4gICAgICByZWplY3RlZFJzYy5zdGF0dXMgPSAncmVqZWN0ZWQnXG4gICAgICByZWplY3RlZFJzYy5yZWFzb24gPSBlcnJvclxuICAgICAgcmVqZWN0KGVycm9yKVxuICAgIH1cbiAgfVxuICBwZW5kaW5nUnNjLnRhZyA9IERFRkVSUkVEXG4gIHJldHVybiBwZW5kaW5nUnNjXG59XG4iXSwibmFtZXMiOlsiYWJvcnRUYXNrIiwibGlzdGVuRm9yRHluYW1pY1JlcXVlc3QiLCJzdGFydFBQUk5hdmlnYXRpb24iLCJ1cGRhdGVDYWNoZU5vZGVPblBvcHN0YXRlUmVzdG9yYXRpb24iLCJNUEFfTkFWSUdBVElPTl9UQVNLIiwicm91dGUiLCJub2RlIiwiZHluYW1pY1JlcXVlc3RUcmVlIiwiY2hpbGRyZW4iLCJuYXZpZ2F0ZWRBdCIsIm9sZENhY2hlTm9kZSIsIm9sZFJvdXRlclN0YXRlIiwibmV3Um91dGVyU3RhdGUiLCJwcmVmZXRjaERhdGEiLCJwcmVmZXRjaEhlYWQiLCJpc1ByZWZldGNoSGVhZFBhcnRpYWwiLCJpc1NhbWVQYWdlTmF2aWdhdGlvbiIsInNjcm9sbGFibGVTZWdtZW50c1Jlc3VsdCIsInNlZ21lbnRQYXRoIiwidXBkYXRlQ2FjaGVOb2RlT25OYXZpZ2F0aW9uIiwiZGlkRmluZFJvb3RMYXlvdXQiLCJvbGRSb3V0ZXJTdGF0ZUNoaWxkcmVuIiwibmV3Um91dGVyU3RhdGVDaGlsZHJlbiIsInByZWZldGNoRGF0YUNoaWxkcmVuIiwiaXNSb290TGF5b3V0Iiwib2xkUGFyYWxsZWxSb3V0ZXMiLCJwYXJhbGxlbFJvdXRlcyIsInByZWZldGNoUGFyYWxsZWxSb3V0ZXMiLCJNYXAiLCJwYXRjaGVkUm91dGVyU3RhdGVDaGlsZHJlbiIsInRhc2tDaGlsZHJlbiIsIm5lZWRzRHluYW1pY1JlcXVlc3QiLCJkeW5hbWljUmVxdWVzdFRyZWVDaGlsZHJlbiIsInBhcmFsbGVsUm91dGVLZXkiLCJuZXdSb3V0ZXJTdGF0ZUNoaWxkIiwib2xkUm91dGVyU3RhdGVDaGlsZCIsIm9sZFNlZ21lbnRNYXBDaGlsZCIsImdldCIsInByZWZldGNoRGF0YUNoaWxkIiwibmV3U2VnbWVudENoaWxkIiwibmV3U2VnbWVudFBhdGhDaGlsZCIsImNvbmNhdCIsIm5ld1NlZ21lbnRLZXlDaGlsZCIsImNyZWF0ZVJvdXRlckNhY2hlS2V5Iiwib2xkU2VnbWVudENoaWxkIiwidW5kZWZpbmVkIiwib2xkQ2FjaGVOb2RlQ2hpbGQiLCJ0YXNrQ2hpbGQiLCJERUZBVUxUX1NFR01FTlRfS0VZIiwic3Bhd25SZXVzZWRUYXNrIiwiYmVnaW5SZW5kZXJpbmdOZXdSb3V0ZVRyZWUiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwibWF0Y2hTZWdtZW50Iiwic2V0IiwibmV3Q2FjaGVOb2RlQ2hpbGQiLCJuZXdTZWdtZW50TWFwQ2hpbGQiLCJ0YXNrQ2hpbGRSb3V0ZSIsImR5bmFtaWNSZXF1ZXN0VHJlZUNoaWxkIiwibmV3Q2FjaGVOb2RlIiwibGF6eURhdGEiLCJyc2MiLCJwcmVmZXRjaFJzYyIsImhlYWQiLCJsb2FkaW5nIiwicGF0Y2hSb3V0ZXJTdGF0ZVdpdGhOZXdDaGlsZHJlbiIsImV4aXN0aW5nQ2FjaGVOb2RlIiwicG9zc2libHlQYXJ0aWFsUHJlZmV0Y2hIZWFkIiwiaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0IiwiY3JlYXRlQ2FjaGVOb2RlT25OYXZpZ2F0aW9uIiwicm91dGVyU3RhdGUiLCJyb3V0ZXJTdGF0ZUNoaWxkcmVuIiwiaXNMZWFmU2VnbWVudCIsImNhY2hlTm9kZU5hdmlnYXRlZEF0IiwiRFlOQU1JQ19TVEFMRVRJTUVfTVMiLCJpc1ByZWZldGNoUnNjUGFydGlhbCIsInNwYXduUGVuZGluZ1Rhc2siLCJleGlzdGluZ0NhY2hlTm9kZUNoaWxkcmVuIiwiY2FjaGVOb2RlQ2hpbGRyZW4iLCJwdXNoIiwicm91dGVyU3RhdGVDaGlsZCIsImV4aXN0aW5nU2VnbWVudE1hcENoaWxkIiwic2VnbWVudENoaWxkIiwic2VnbWVudFBhdGhDaGlsZCIsInNlZ21lbnRLZXlDaGlsZCIsImV4aXN0aW5nQ2FjaGVOb2RlQ2hpbGQiLCJiYXNlUm91dGVyU3RhdGUiLCJuZXdDaGlsZHJlbiIsImNsb25lIiwibmV3VGFzayIsImNyZWF0ZVBlbmRpbmdDYWNoZU5vZGUiLCJyZXVzZWRSb3V0ZXJTdGF0ZSIsInRhc2siLCJyZXNwb25zZVByb21pc2UiLCJ0aGVuIiwiZmxpZ2h0RGF0YSIsIm5vcm1hbGl6ZWRGbGlnaHREYXRhIiwidHJlZSIsInNlcnZlclJvdXRlclN0YXRlIiwic2VlZERhdGEiLCJkeW5hbWljRGF0YSIsImR5bmFtaWNIZWFkIiwid3JpdGVEeW5hbWljRGF0YUludG9QZW5kaW5nVGFzayIsImVycm9yIiwicm9vdFRhc2siLCJpIiwic2VnbWVudCIsInRhc2tTZWdtZW50IiwiZmluaXNoVGFza1VzaW5nRHluYW1pY0RhdGFQYXlsb2FkIiwidGFza05vZGUiLCJmaW5pc2hQZW5kaW5nQ2FjaGVOb2RlIiwic2VydmVyQ2hpbGRyZW4iLCJkeW5hbWljRGF0YUNoaWxkcmVuIiwic2VydmVyUm91dGVyU3RhdGVDaGlsZCIsImR5bmFtaWNEYXRhQ2hpbGQiLCJzaXplIiwibWF5YmVQcmVmZXRjaFJzYyIsIm1heWJlUHJlZmV0Y2hMb2FkaW5nIiwiY3JlYXRlRGVmZXJyZWRSc2MiLCJjYWNoZU5vZGUiLCJ0YXNrU3RhdGUiLCJzZXJ2ZXJTdGF0ZSIsInRhc2tTdGF0ZUNoaWxkcmVuIiwic2VydmVyU3RhdGVDaGlsZHJlbiIsImRhdGFDaGlsZHJlbiIsInRhc2tTdGF0ZUNoaWxkIiwic2VydmVyU3RhdGVDaGlsZCIsImRhdGFDaGlsZCIsInNlZ21lbnRNYXBDaGlsZCIsInRhc2tTZWdtZW50Q2hpbGQiLCJ0YXNrU2VnbWVudEtleUNoaWxkIiwiY2FjaGVOb2RlQ2hpbGQiLCJhYm9ydFBlbmRpbmdDYWNoZU5vZGUiLCJkeW5hbWljU2VnbWVudERhdGEiLCJpc0RlZmVycmVkUnNjIiwicmVzb2x2ZSIsInZhbHVlcyIsInJlamVjdCIsIm5ld1BhcmFsbGVsUm91dGVzIiwic2hvdWxkVXNlUHJlZmV0Y2giLCJzdGF0dXMiLCJERUZFUlJFRCIsIlN5bWJvbCIsInZhbHVlIiwidGFnIiwicGVuZGluZ1JzYyIsIlByb21pc2UiLCJyZXMiLCJyZWoiLCJmdWxmaWxsZWRSc2MiLCJyZWplY3RlZFJzYyIsInJlYXNvbiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/ppr-navigations.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/prefetch-cache-utils.js":
/*!*************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/prefetch-cache-utils.js ***!
  \*************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    DYNAMIC_STALETIME_MS: function() {\n        return DYNAMIC_STALETIME_MS;\n    },\n    STATIC_STALETIME_MS: function() {\n        return STATIC_STALETIME_MS;\n    },\n    createSeededPrefetchCacheEntry: function() {\n        return createSeededPrefetchCacheEntry;\n    },\n    getOrCreatePrefetchCacheEntry: function() {\n        return getOrCreatePrefetchCacheEntry;\n    },\n    prunePrefetchCache: function() {\n        return prunePrefetchCache;\n    }\n});\nconst _fetchserverresponse = __webpack_require__(/*! ./fetch-server-response */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer-types */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _prefetchreducer = __webpack_require__(/*! ./reducers/prefetch-reducer */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js\");\nconst INTERCEPTION_CACHE_KEY_MARKER = '%';\n/**\n * Creates a cache key for the router prefetch cache\n *\n * @param url - The URL being navigated to\n * @param nextUrl - an internal URL, primarily used for handling rewrites. Defaults to '/'.\n * @return The generated prefetch cache key.\n */ function createPrefetchCacheKeyImpl(url, includeSearchParams, prefix) {\n    // Initially we only use the pathname as the cache key. We don't want to include\n    // search params so that multiple URLs with the same search parameter can re-use\n    // loading states.\n    let pathnameFromUrl = url.pathname;\n    // RSC responses can differ based on search params, specifically in the case where we aren't\n    // returning a partial response (ie with `PrefetchKind.AUTO`).\n    // In the auto case, since loading.js & layout.js won't have access to search params,\n    // we can safely re-use that cache entry. But for full prefetches, we should not\n    // re-use the cache entry as the response may differ.\n    if (includeSearchParams) {\n        // if we have a full prefetch, we can include the search param in the key,\n        // as we'll be getting back a full response. The server might have read the search\n        // params when generating the full response.\n        pathnameFromUrl += url.search;\n    }\n    if (prefix) {\n        return \"\" + prefix + INTERCEPTION_CACHE_KEY_MARKER + pathnameFromUrl;\n    }\n    return pathnameFromUrl;\n}\nfunction createPrefetchCacheKey(url, kind, nextUrl) {\n    return createPrefetchCacheKeyImpl(url, kind === _routerreducertypes.PrefetchKind.FULL, nextUrl);\n}\nfunction getExistingCacheEntry(url, kind, nextUrl, prefetchCache, allowAliasing) {\n    if (kind === void 0) kind = _routerreducertypes.PrefetchKind.TEMPORARY;\n    // We first check if there's a more specific interception route prefetch entry\n    // This is because when we detect a prefetch that corresponds with an interception route, we prefix it with nextUrl (see `createPrefetchCacheKey`)\n    // to avoid conflicts with other pages that may have the same URL but render different things depending on the `Next-URL` header.\n    for (const maybeNextUrl of [\n        nextUrl,\n        null\n    ]){\n        const cacheKeyWithParams = createPrefetchCacheKeyImpl(url, true, maybeNextUrl);\n        const cacheKeyWithoutParams = createPrefetchCacheKeyImpl(url, false, maybeNextUrl);\n        // First, we check if we have a cache entry that exactly matches the URL\n        const cacheKeyToUse = url.search ? cacheKeyWithParams : cacheKeyWithoutParams;\n        const existingEntry = prefetchCache.get(cacheKeyToUse);\n        if (existingEntry && allowAliasing) {\n            // We know we're returning an aliased entry when the pathname matches but the search params don't,\n            const isAliased = existingEntry.url.pathname === url.pathname && existingEntry.url.search !== url.search;\n            if (isAliased) {\n                return {\n                    ...existingEntry,\n                    aliased: true\n                };\n            }\n            return existingEntry;\n        }\n        // If the request contains search params, and we're not doing a full prefetch, we can return the\n        // param-less entry if it exists.\n        // This is technically covered by the check at the bottom of this function, which iterates over cache entries,\n        // but lets us arrive there quicker in the param-full case.\n        const entryWithoutParams = prefetchCache.get(cacheKeyWithoutParams);\n        if (false) {}\n    }\n    // If we've gotten to this point, we didn't find a specific cache entry that matched\n    // the request URL.\n    // We attempt a partial match by checking if there's a cache entry with the same pathname.\n    // Regardless of what we find, since it doesn't correspond with the requested URL, we'll mark it \"aliased\".\n    // This will signal to the router that it should only apply the loading state on the prefetched data.\n    if (false) {}\n    return undefined;\n}\nfunction getOrCreatePrefetchCacheEntry(param) {\n    let { url, nextUrl, tree, prefetchCache, kind, allowAliasing = true } = param;\n    const existingCacheEntry = getExistingCacheEntry(url, kind, nextUrl, prefetchCache, allowAliasing);\n    if (existingCacheEntry) {\n        // Grab the latest status of the cache entry and update it\n        existingCacheEntry.status = getPrefetchEntryCacheStatus(existingCacheEntry);\n        // when `kind` is provided, an explicit prefetch was requested.\n        // if the requested prefetch is \"full\" and the current cache entry wasn't, we want to re-prefetch with the new intent\n        const switchedToFullPrefetch = existingCacheEntry.kind !== _routerreducertypes.PrefetchKind.FULL && kind === _routerreducertypes.PrefetchKind.FULL;\n        if (switchedToFullPrefetch) {\n            // If we switched to a full prefetch, validate that the existing cache entry contained partial data.\n            // It's possible that the cache entry was seeded with full data but has a cache type of \"auto\" (ie when cache entries\n            // are seeded but without a prefetch intent)\n            existingCacheEntry.data.then((prefetchResponse)=>{\n                const isFullPrefetch = Array.isArray(prefetchResponse.flightData) && prefetchResponse.flightData.some((flightData)=>{\n                    // If we started rendering from the root and we returned RSC data (seedData), we already had a full prefetch.\n                    return flightData.isRootRender && flightData.seedData !== null;\n                });\n                if (!isFullPrefetch) {\n                    return createLazyPrefetchEntry({\n                        tree,\n                        url,\n                        nextUrl,\n                        prefetchCache,\n                        // If we didn't get an explicit prefetch kind, we want to set a temporary kind\n                        // rather than assuming the same intent as the previous entry, to be consistent with how we\n                        // lazily create prefetch entries when intent is left unspecified.\n                        kind: kind != null ? kind : _routerreducertypes.PrefetchKind.TEMPORARY\n                    });\n                }\n            });\n        }\n        // If the existing cache entry was marked as temporary, it means it was lazily created when attempting to get an entry,\n        // where we didn't have the prefetch intent. Now that we have the intent (in `kind`), we want to update the entry to the more accurate kind.\n        if (kind && existingCacheEntry.kind === _routerreducertypes.PrefetchKind.TEMPORARY) {\n            existingCacheEntry.kind = kind;\n        }\n        // We've determined that the existing entry we found is still valid, so we return it.\n        return existingCacheEntry;\n    }\n    // If we didn't return an entry, create a new one.\n    return createLazyPrefetchEntry({\n        tree,\n        url,\n        nextUrl,\n        prefetchCache,\n        kind: kind || _routerreducertypes.PrefetchKind.TEMPORARY\n    });\n}\n/*\n * Used to take an existing cache entry and prefix it with the nextUrl, if it exists.\n * This ensures that we don't have conflicting cache entries for the same URL (as is the case with route interception).\n */ function prefixExistingPrefetchCacheEntry(param) {\n    let { url, nextUrl, prefetchCache, existingCacheKey } = param;\n    const existingCacheEntry = prefetchCache.get(existingCacheKey);\n    if (!existingCacheEntry) {\n        // no-op -- there wasn't an entry to move\n        return;\n    }\n    const newCacheKey = createPrefetchCacheKey(url, existingCacheEntry.kind, nextUrl);\n    prefetchCache.set(newCacheKey, {\n        ...existingCacheEntry,\n        key: newCacheKey\n    });\n    prefetchCache.delete(existingCacheKey);\n    return newCacheKey;\n}\nfunction createSeededPrefetchCacheEntry(param) {\n    let { nextUrl, tree, prefetchCache, url, data, kind } = param;\n    // The initial cache entry technically includes full data, but it isn't explicitly prefetched -- we just seed the\n    // prefetch cache so that we can skip an extra prefetch request later, since we already have the data.\n    // if the prefetch corresponds with an interception route, we use the nextUrl to prefix the cache key\n    const prefetchCacheKey = data.couldBeIntercepted ? createPrefetchCacheKey(url, kind, nextUrl) : createPrefetchCacheKey(url, kind);\n    const prefetchEntry = {\n        treeAtTimeOfPrefetch: tree,\n        data: Promise.resolve(data),\n        kind,\n        prefetchTime: Date.now(),\n        lastUsedTime: Date.now(),\n        staleTime: data.staleTime,\n        key: prefetchCacheKey,\n        status: _routerreducertypes.PrefetchCacheEntryStatus.fresh,\n        url\n    };\n    prefetchCache.set(prefetchCacheKey, prefetchEntry);\n    return prefetchEntry;\n}\n/**\n * Creates a prefetch entry entry and enqueues a fetch request to retrieve the data.\n */ function createLazyPrefetchEntry(param) {\n    let { url, kind, tree, nextUrl, prefetchCache } = param;\n    const prefetchCacheKey = createPrefetchCacheKey(url, kind);\n    // initiates the fetch request for the prefetch and attaches a listener\n    // to the promise to update the prefetch cache entry when the promise resolves (if necessary)\n    const data = _prefetchreducer.prefetchQueue.enqueue(()=>(0, _fetchserverresponse.fetchServerResponse)(url, {\n            flightRouterState: tree,\n            nextUrl,\n            prefetchKind: kind\n        }).then((prefetchResponse)=>{\n            // TODO: `fetchServerResponse` should be more tighly coupled to these prefetch cache operations\n            // to avoid drift between this cache key prefixing logic\n            // (which is currently directly influenced by the server response)\n            let newCacheKey;\n            if (prefetchResponse.couldBeIntercepted) {\n                // Determine if we need to prefix the cache key with the nextUrl\n                newCacheKey = prefixExistingPrefetchCacheEntry({\n                    url,\n                    existingCacheKey: prefetchCacheKey,\n                    nextUrl,\n                    prefetchCache\n                });\n            }\n            // If the prefetch was a cache hit, we want to update the existing cache entry to reflect that it was a full prefetch.\n            // This is because we know that a static response will contain the full RSC payload, and can be updated to respect the `static`\n            // staleTime.\n            if (prefetchResponse.prerendered) {\n                const existingCacheEntry = prefetchCache.get(newCacheKey != null ? newCacheKey : prefetchCacheKey);\n                if (existingCacheEntry) {\n                    existingCacheEntry.kind = _routerreducertypes.PrefetchKind.FULL;\n                    if (prefetchResponse.staleTime !== -1) {\n                        // This is the stale time that was collected by the server during\n                        // static generation. Use this in place of the default stale time.\n                        existingCacheEntry.staleTime = prefetchResponse.staleTime;\n                    }\n                }\n            }\n            return prefetchResponse;\n        }));\n    const prefetchEntry = {\n        treeAtTimeOfPrefetch: tree,\n        data,\n        kind,\n        prefetchTime: Date.now(),\n        lastUsedTime: null,\n        staleTime: -1,\n        key: prefetchCacheKey,\n        status: _routerreducertypes.PrefetchCacheEntryStatus.fresh,\n        url\n    };\n    prefetchCache.set(prefetchCacheKey, prefetchEntry);\n    return prefetchEntry;\n}\nfunction prunePrefetchCache(prefetchCache) {\n    for (const [href, prefetchCacheEntry] of prefetchCache){\n        if (getPrefetchEntryCacheStatus(prefetchCacheEntry) === _routerreducertypes.PrefetchCacheEntryStatus.expired) {\n            prefetchCache.delete(href);\n        }\n    }\n}\nconst DYNAMIC_STALETIME_MS = Number(\"0\") * 1000;\nconst STATIC_STALETIME_MS = Number(\"300\") * 1000;\nfunction getPrefetchEntryCacheStatus(param) {\n    let { kind, prefetchTime, lastUsedTime, staleTime } = param;\n    if (staleTime !== -1) {\n        // `staleTime` is the value sent by the server during static generation.\n        // When this is available, it takes precedence over any of the heuristics\n        // that follow.\n        //\n        // TODO: When PPR is enabled, the server will *always* return a stale time\n        // when prefetching. We should never use a prefetch entry that hasn't yet\n        // received data from the server. So the only two cases should be 1) we use\n        // the server-generated stale time 2) the unresolved entry is discarded.\n        return Date.now() < prefetchTime + staleTime ? _routerreducertypes.PrefetchCacheEntryStatus.fresh : _routerreducertypes.PrefetchCacheEntryStatus.stale;\n    }\n    // We will re-use the cache entry data for up to the `dynamic` staletime window.\n    if (Date.now() < (lastUsedTime != null ? lastUsedTime : prefetchTime) + DYNAMIC_STALETIME_MS) {\n        return lastUsedTime ? _routerreducertypes.PrefetchCacheEntryStatus.reusable : _routerreducertypes.PrefetchCacheEntryStatus.fresh;\n    }\n    // For \"auto\" prefetching, we'll re-use only the loading boundary for up to `static` staletime window.\n    // A stale entry will only re-use the `loading` boundary, not the full data.\n    // This will trigger a \"lazy fetch\" for the full data.\n    if (kind === _routerreducertypes.PrefetchKind.AUTO) {\n        if (Date.now() < prefetchTime + STATIC_STALETIME_MS) {\n            return _routerreducertypes.PrefetchCacheEntryStatus.stale;\n        }\n    }\n    // for \"full\" prefetching, we'll re-use the cache entry data for up to `static` staletime window.\n    if (kind === _routerreducertypes.PrefetchKind.FULL) {\n        if (Date.now() < prefetchTime + STATIC_STALETIME_MS) {\n            return _routerreducertypes.PrefetchCacheEntryStatus.reusable;\n        }\n    }\n    return _routerreducertypes.PrefetchCacheEntryStatus.expired;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=prefetch-cache-utils.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9wcmVmZXRjaC1jYWNoZS11dGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUE0WWFBLG9CQUFvQjtlQUFwQkE7O0lBR0FDLG1CQUFtQjtlQUFuQkE7O0lBbklHQyw4QkFBOEI7ZUFBOUJBOztJQTlHQUMsNkJBQTZCO2VBQTdCQTs7SUErTkFDLGtCQUFrQjtlQUFsQkE7OztpREExWFQ7Z0RBTUE7NkNBQ3VCO0FBRTlCLE1BQU1DLGdDQUFnQztBQVV0Qzs7Ozs7O0NBTUMsR0FDRCxTQUFTQywyQkFDUEMsR0FBUSxFQUNSQyxtQkFBNEIsRUFDNUJDLE1BQXNCO0lBRXRCLGdGQUFnRjtJQUNoRixnRkFBZ0Y7SUFDaEYsa0JBQWtCO0lBQ2xCLElBQUlDLGtCQUFrQkgsSUFBSUksUUFBUTtJQUVsQyw0RkFBNEY7SUFDNUYsOERBQThEO0lBQzlELHFGQUFxRjtJQUNyRixnRkFBZ0Y7SUFDaEYscURBQXFEO0lBQ3JELElBQUlILHFCQUFxQjtRQUN2QiwwRUFBMEU7UUFDMUUsa0ZBQWtGO1FBQ2xGLDRDQUE0QztRQUM1Q0UsbUJBQW1CSCxJQUFJSyxNQUFNO0lBQy9CO0lBRUEsSUFBSUgsUUFBUTtRQUNWLE9BQVEsS0FBRUEsU0FBU0osZ0NBQWdDSztJQUNyRDtJQUVBLE9BQU9BO0FBQ1Q7QUFFQSxTQUFTRyx1QkFDUE4sR0FBUSxFQUNSTyxJQUE4QixFQUM5QkMsT0FBdUI7SUFFdkIsT0FBT1QsMkJBQTJCQyxLQUFLTyxTQUFTRSxvQkFBQUEsWUFBWSxDQUFDQyxJQUFJLEVBQUVGO0FBQ3JFO0FBRUEsU0FBU0csc0JBQ1BYLEdBQVEsRUFDUk8sSUFBMkMsRUFDM0NDLE9BQXNCLEVBQ3RCSSxhQUE4QyxFQUM5Q0MsYUFBc0I7SUFIdEJOLElBQUFBLFNBQUFBLEtBQUFBLEdBQUFBLE9BQXFCRSxvQkFBQUEsWUFBWSxDQUFDSyxTQUFTO0lBSzNDLDhFQUE4RTtJQUM5RSxrSkFBa0o7SUFDbEosaUlBQWlJO0lBQ2pJLEtBQUssTUFBTUMsZ0JBQWdCO1FBQUNQO1FBQVM7S0FBSyxDQUFFO1FBQzFDLE1BQU1RLHFCQUFxQmpCLDJCQUN6QkMsS0FDQSxNQUNBZTtRQUVGLE1BQU1FLHdCQUF3QmxCLDJCQUM1QkMsS0FDQSxPQUNBZTtRQUdGLHdFQUF3RTtRQUN4RSxNQUFNRyxnQkFBZ0JsQixJQUFJSyxNQUFNLEdBQzVCVyxxQkFDQUM7UUFFSixNQUFNRSxnQkFBZ0JQLGNBQWNRLEdBQUcsQ0FBQ0Y7UUFDeEMsSUFBSUMsaUJBQWlCTixlQUFlO1lBQ2xDLGtHQUFrRztZQUNsRyxNQUFNUSxZQUNKRixjQUFjbkIsR0FBRyxDQUFDSSxRQUFRLEtBQUtKLElBQUlJLFFBQVEsSUFDM0NlLGNBQWNuQixHQUFHLENBQUNLLE1BQU0sS0FBS0wsSUFBSUssTUFBTTtZQUV6QyxJQUFJZ0IsV0FBVztnQkFDYixPQUFPO29CQUNMLEdBQUdGLGFBQWE7b0JBQ2hCRyxTQUFTO2dCQUNYO1lBQ0Y7WUFFQSxPQUFPSDtRQUNUO1FBRUEsZ0dBQWdHO1FBQ2hHLGlDQUFpQztRQUNqQyw4R0FBOEc7UUFDOUcsMkRBQTJEO1FBQzNELE1BQU1JLHFCQUFxQlgsY0FBY1EsR0FBRyxDQUFDSDtRQUM3QyxJQUNFTyxLQU8rRDFCLEVBQy9ELEVBRUQ7SUFDSDtJQUVBLG9GQUFvRjtJQUNwRixtQkFBbUI7SUFDbkIsMEZBQTBGO0lBQzFGLDJHQUEyRztJQUMzRyxxR0FBcUc7SUFDckcsSUFDRTBCLEtBRWFYLEVBQ2IsRUFXRDtJQUVELE9BQU9rQjtBQUNUO0FBTU8sU0FBU25DLDhCQUE4QixLQVc3QztJQVg2QyxNQUM1Q0ksR0FBRyxFQUNIUSxPQUFPLEVBQ1B3QixJQUFJLEVBQ0pwQixhQUFhLEVBQ2JMLElBQUksRUFDSk0sZ0JBQWdCLElBQUksRUFLckIsR0FYNkM7SUFZNUMsTUFBTW9CLHFCQUFxQnRCLHNCQUN6QlgsS0FDQU8sTUFDQUMsU0FDQUksZUFDQUM7SUFHRixJQUFJb0Isb0JBQW9CO1FBQ3RCLDBEQUEwRDtRQUMxREEsbUJBQW1CQyxNQUFNLEdBQUdDLDRCQUE0QkY7UUFFeEQsK0RBQStEO1FBQy9ELHFIQUFxSDtRQUNySCxNQUFNRyx5QkFDSkgsbUJBQW1CMUIsSUFBSSxLQUFLRSxvQkFBQUEsWUFBWSxDQUFDQyxJQUFJLElBQzdDSCxTQUFTRSxvQkFBQUEsWUFBWSxDQUFDQyxJQUFJO1FBRTVCLElBQUkwQix3QkFBd0I7WUFDMUIsb0dBQW9HO1lBQ3BHLHFIQUFxSDtZQUNySCw0Q0FBNEM7WUFDNUNILG1CQUFtQkksSUFBSSxDQUFDQyxJQUFJLENBQUMsQ0FBQ0M7Z0JBQzVCLE1BQU1DLGlCQUNKQyxNQUFNQyxPQUFPLENBQUNILGlCQUFpQkksVUFBVSxLQUN6Q0osaUJBQWlCSSxVQUFVLENBQUNDLElBQUksQ0FBQyxDQUFDRDtvQkFDaEMsNkdBQTZHO29CQUM3RyxPQUFPQSxXQUFXRSxZQUFZLElBQUlGLFdBQVdHLFFBQVEsS0FBSztnQkFDNUQ7Z0JBRUYsSUFBSSxDQUFDTixnQkFBZ0I7b0JBQ25CLE9BQU9PLHdCQUF3Qjt3QkFDN0JmO3dCQUNBaEM7d0JBQ0FRO3dCQUNBSTt3QkFDQSw4RUFBOEU7d0JBQzlFLDJGQUEyRjt3QkFDM0Ysa0VBQWtFO3dCQUNsRUwsTUFBTUEsUUFBQUEsT0FBQUEsT0FBUUUsb0JBQUFBLFlBQVksQ0FBQ0ssU0FBUztvQkFDdEM7Z0JBQ0Y7WUFDRjtRQUNGO1FBRUEsdUhBQXVIO1FBQ3ZILDRJQUE0STtRQUM1SSxJQUFJUCxRQUFRMEIsbUJBQW1CMUIsSUFBSSxLQUFLRSxvQkFBQUEsWUFBWSxDQUFDSyxTQUFTLEVBQUU7WUFDOURtQixtQkFBbUIxQixJQUFJLEdBQUdBO1FBQzVCO1FBRUEscUZBQXFGO1FBQ3JGLE9BQU8wQjtJQUNUO0lBRUEsa0RBQWtEO0lBQ2xELE9BQU9jLHdCQUF3QjtRQUM3QmY7UUFDQWhDO1FBQ0FRO1FBQ0FJO1FBQ0FMLE1BQU1BLFFBQVFFLG9CQUFBQSxZQUFZLENBQUNLLFNBQVM7SUFDdEM7QUFDRjtBQUVBOzs7Q0FHQyxHQUNELFNBQVNrQyxpQ0FBaUMsS0FRekM7SUFSeUMsTUFDeENoRCxHQUFHLEVBQ0hRLE9BQU8sRUFDUEksYUFBYSxFQUNicUMsZ0JBQWdCLEVBSWpCLEdBUnlDO0lBU3hDLE1BQU1oQixxQkFBcUJyQixjQUFjUSxHQUFHLENBQUM2QjtJQUM3QyxJQUFJLENBQUNoQixvQkFBb0I7UUFDdkIseUNBQXlDO1FBQ3pDO0lBQ0Y7SUFFQSxNQUFNaUIsY0FBYzVDLHVCQUNsQk4sS0FDQWlDLG1CQUFtQjFCLElBQUksRUFDdkJDO0lBRUZJLGNBQWN1QyxHQUFHLENBQUNELGFBQWE7UUFBRSxHQUFHakIsa0JBQWtCO1FBQUVOLEtBQUt1QjtJQUFZO0lBQ3pFdEMsY0FBY3dDLE1BQU0sQ0FBQ0g7SUFFckIsT0FBT0M7QUFDVDtBQUtPLFNBQVN2RCwrQkFBK0IsS0FXOUM7SUFYOEMsTUFDN0NhLE9BQU8sRUFDUHdCLElBQUksRUFDSnBCLGFBQWEsRUFDYlosR0FBRyxFQUNIcUMsSUFBSSxFQUNKOUIsSUFBSSxFQUtMLEdBWDhDO0lBWTdDLGlIQUFpSDtJQUNqSCxzR0FBc0c7SUFDdEcscUdBQXFHO0lBQ3JHLE1BQU04QyxtQkFBbUJoQixLQUFLaUIsa0JBQWtCLEdBQzVDaEQsdUJBQXVCTixLQUFLTyxNQUFNQyxXQUNsQ0YsdUJBQXVCTixLQUFLTztJQUVoQyxNQUFNZ0QsZ0JBQWdCO1FBQ3BCQyxzQkFBc0J4QjtRQUN0QkssTUFBTW9CLFFBQVFDLE9BQU8sQ0FBQ3JCO1FBQ3RCOUI7UUFDQW9ELGNBQWNDLEtBQUtDLEdBQUc7UUFDdEJDLGNBQWNGLEtBQUtDLEdBQUc7UUFDdEJFLFdBQVcxQixLQUFLMEIsU0FBUztRQUN6QnBDLEtBQUswQjtRQUNMbkIsUUFBUThCLG9CQUFBQSx3QkFBd0IsQ0FBQ0MsS0FBSztRQUN0Q2pFO0lBQ0Y7SUFFQVksY0FBY3VDLEdBQUcsQ0FBQ0Usa0JBQWtCRTtJQUVwQyxPQUFPQTtBQUNUO0FBRUE7O0NBRUMsR0FDRCxTQUFTUix3QkFBd0IsS0FTaEM7SUFUZ0MsTUFDL0IvQyxHQUFHLEVBQ0hPLElBQUksRUFDSnlCLElBQUksRUFDSnhCLE9BQU8sRUFDUEksYUFBYSxFQUlkLEdBVGdDO0lBVS9CLE1BQU15QyxtQkFBbUIvQyx1QkFBdUJOLEtBQUtPO0lBRXJELHVFQUF1RTtJQUN2RSw2RkFBNkY7SUFDN0YsTUFBTThCLE9BQU82QixpQkFBQUEsYUFBYSxDQUFDQyxPQUFPLENBQUMsSUFDakNDLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0JwRSxLQUFLO1lBQ3ZCcUUsbUJBQW1CckM7WUFDbkJ4QjtZQUNBOEQsY0FBYy9EO1FBQ2hCLEdBQUcrQixJQUFJLENBQUMsQ0FBQ0M7WUFDUCwrRkFBK0Y7WUFDL0Ysd0RBQXdEO1lBQ3hELGtFQUFrRTtZQUNsRSxJQUFJVztZQUVKLElBQUlYLGlCQUFpQmUsa0JBQWtCLEVBQUU7Z0JBQ3ZDLGdFQUFnRTtnQkFDaEVKLGNBQWNGLGlDQUFpQztvQkFDN0NoRDtvQkFDQWlELGtCQUFrQkk7b0JBQ2xCN0M7b0JBQ0FJO2dCQUNGO1lBQ0Y7WUFFQSxzSEFBc0g7WUFDdEgsK0hBQStIO1lBQy9ILGFBQWE7WUFDYixJQUFJMkIsaUJBQWlCZ0MsV0FBVyxFQUFFO2dCQUNoQyxNQUFNdEMscUJBQXFCckIsY0FBY1EsR0FBRyxDQUMxQyxlQUNBOEIsT0FBQUEsY0FBZUc7Z0JBRWpCLElBQUlwQixvQkFBb0I7b0JBQ3RCQSxtQkFBbUIxQixJQUFJLEdBQUdFLG9CQUFBQSxZQUFZLENBQUNDLElBQUk7b0JBQzNDLElBQUk2QixpQkFBaUJ3QixTQUFTLEtBQUssQ0FBQyxHQUFHO3dCQUNyQyxpRUFBaUU7d0JBQ2pFLGtFQUFrRTt3QkFDbEU5QixtQkFBbUI4QixTQUFTLEdBQUd4QixpQkFBaUJ3QixTQUFTO29CQUMzRDtnQkFDRjtZQUNGO1lBRUEsT0FBT3hCO1FBQ1Q7SUFHRixNQUFNZ0IsZ0JBQWdCO1FBQ3BCQyxzQkFBc0J4QjtRQUN0Qks7UUFDQTlCO1FBQ0FvRCxjQUFjQyxLQUFLQyxHQUFHO1FBQ3RCQyxjQUFjO1FBQ2RDLFdBQVcsQ0FBQztRQUNacEMsS0FBSzBCO1FBQ0xuQixRQUFROEIsb0JBQUFBLHdCQUF3QixDQUFDQyxLQUFLO1FBQ3RDakU7SUFDRjtJQUVBWSxjQUFjdUMsR0FBRyxDQUFDRSxrQkFBa0JFO0lBRXBDLE9BQU9BO0FBQ1Q7QUFFTyxTQUFTMUQsbUJBQ2RlLGFBQW9EO0lBRXBELEtBQUssTUFBTSxDQUFDNEQsTUFBTUMsbUJBQW1CLElBQUk3RCxjQUFlO1FBQ3RELElBQ0V1Qiw0QkFBNEJzQyx3QkFDNUJULG9CQUFBQSx3QkFBd0IsQ0FBQ1UsT0FBTyxFQUNoQztZQUNBOUQsY0FBY3dDLE1BQU0sQ0FBQ29CO1FBQ3ZCO0lBQ0Y7QUFDRjtBQUlPLE1BQU0vRSx1QkFDWGtGLE9BQU9uRCxHQUFrRCxJQUFJO0FBRXhELE1BQU05QixzQkFDWGlGLE9BQU9uRCxLQUFpRCxJQUFJO0FBRTlELFNBQVNXLDRCQUE0QixLQUtoQjtJQUxnQixNQUNuQzVCLElBQUksRUFDSm9ELFlBQVksRUFDWkcsWUFBWSxFQUNaQyxTQUFTLEVBQ1UsR0FMZ0I7SUFNbkMsSUFBSUEsY0FBYyxDQUFDLEdBQUc7UUFDcEIsd0VBQXdFO1FBQ3hFLHlFQUF5RTtRQUN6RSxlQUFlO1FBQ2YsRUFBRTtRQUNGLDBFQUEwRTtRQUMxRSx5RUFBeUU7UUFDekUsMkVBQTJFO1FBQzNFLHdFQUF3RTtRQUN4RSxPQUFPSCxLQUFLQyxHQUFHLEtBQUtGLGVBQWVJLFlBQy9CQyxvQkFBQUEsd0JBQXdCLENBQUNDLEtBQUssR0FDOUJELG9CQUFBQSx3QkFBd0IsQ0FBQ2MsS0FBSztJQUNwQztJQUVBLGdGQUFnRjtJQUNoRixJQUFJbEIsS0FBS0MsR0FBRyxLQUFNQyxDQUFBQSxnQkFBQUEsT0FBQUEsZUFBZ0JILFlBQUFBLENBQVcsR0FBS2xFLHNCQUFzQjtRQUN0RSxPQUFPcUUsZUFDSEUsb0JBQUFBLHdCQUF3QixDQUFDZSxRQUFRLEdBQ2pDZixvQkFBQUEsd0JBQXdCLENBQUNDLEtBQUs7SUFDcEM7SUFFQSxzR0FBc0c7SUFDdEcsNEVBQTRFO0lBQzVFLHNEQUFzRDtJQUN0RCxJQUFJMUQsU0FBU0Usb0JBQUFBLFlBQVksQ0FBQ3VFLElBQUksRUFBRTtRQUM5QixJQUFJcEIsS0FBS0MsR0FBRyxLQUFLRixlQUFlakUscUJBQXFCO1lBQ25ELE9BQU9zRSxvQkFBQUEsd0JBQXdCLENBQUNjLEtBQUs7UUFDdkM7SUFDRjtJQUVBLGlHQUFpRztJQUNqRyxJQUFJdkUsU0FBU0Usb0JBQUFBLFlBQVksQ0FBQ0MsSUFBSSxFQUFFO1FBQzlCLElBQUlrRCxLQUFLQyxHQUFHLEtBQUtGLGVBQWVqRSxxQkFBcUI7WUFDbkQsT0FBT3NFLG9CQUFBQSx3QkFBd0IsQ0FBQ2UsUUFBUTtRQUMxQztJQUNGO0lBRUEsT0FBT2Ysb0JBQUFBLHdCQUF3QixDQUFDVSxPQUFPO0FBQ3pDIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcHJlZmV0Y2gtY2FjaGUtdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZmV0Y2hTZXJ2ZXJSZXNwb25zZSxcbiAgdHlwZSBGZXRjaFNlcnZlclJlc3BvbnNlUmVzdWx0LFxufSBmcm9tICcuL2ZldGNoLXNlcnZlci1yZXNwb25zZSdcbmltcG9ydCB7XG4gIFByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cyxcbiAgdHlwZSBQcmVmZXRjaENhY2hlRW50cnksXG4gIFByZWZldGNoS2luZCxcbiAgdHlwZSBSZWFkb25seVJlZHVjZXJTdGF0ZSxcbn0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci10eXBlcydcbmltcG9ydCB7IHByZWZldGNoUXVldWUgfSBmcm9tICcuL3JlZHVjZXJzL3ByZWZldGNoLXJlZHVjZXInXG5cbmNvbnN0IElOVEVSQ0VQVElPTl9DQUNIRV9LRVlfTUFSS0VSID0gJyUnXG5cbmV4cG9ydCB0eXBlIEFsaWFzZWRQcmVmZXRjaENhY2hlRW50cnkgPSBQcmVmZXRjaENhY2hlRW50cnkgJiB7XG4gIC8qKiBUaGlzIGlzIGEgc3BlY2lhbCBwcm9wZXJ0eSB0aGF0IGluZGljYXRlcyBhIHByZWZldGNoIGVudHJ5IGFzc29jaWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBVUkxcbiAgICogd2FzIHJldHVybmVkIHJhdGhlciB0aGFuIHRoZSByZXF1ZXN0ZWQgVVJMLiBUaGlzIHNpZ25hbHMgdG8gdGhlIHJvdXRlciB0aGF0IGl0IHNob3VsZCBvbmx5XG4gICAqIGFwcGx5IHRoZSBwYXJ0IHRoYXQgZG9lc24ndCBkZXBlbmQgb24gc2VhcmNoUGFyYW1zIChzcGVjaWZpY2FsbHkgdGhlIGxvYWRpbmcgc3RhdGUpLlxuICAgKi9cbiAgYWxpYXNlZD86IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgY2FjaGUga2V5IGZvciB0aGUgcm91dGVyIHByZWZldGNoIGNhY2hlXG4gKlxuICogQHBhcmFtIHVybCAtIFRoZSBVUkwgYmVpbmcgbmF2aWdhdGVkIHRvXG4gKiBAcGFyYW0gbmV4dFVybCAtIGFuIGludGVybmFsIFVSTCwgcHJpbWFyaWx5IHVzZWQgZm9yIGhhbmRsaW5nIHJld3JpdGVzLiBEZWZhdWx0cyB0byAnLycuXG4gKiBAcmV0dXJuIFRoZSBnZW5lcmF0ZWQgcHJlZmV0Y2ggY2FjaGUga2V5LlxuICovXG5mdW5jdGlvbiBjcmVhdGVQcmVmZXRjaENhY2hlS2V5SW1wbChcbiAgdXJsOiBVUkwsXG4gIGluY2x1ZGVTZWFyY2hQYXJhbXM6IGJvb2xlYW4sXG4gIHByZWZpeD86IHN0cmluZyB8IG51bGxcbikge1xuICAvLyBJbml0aWFsbHkgd2Ugb25seSB1c2UgdGhlIHBhdGhuYW1lIGFzIHRoZSBjYWNoZSBrZXkuIFdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZVxuICAvLyBzZWFyY2ggcGFyYW1zIHNvIHRoYXQgbXVsdGlwbGUgVVJMcyB3aXRoIHRoZSBzYW1lIHNlYXJjaCBwYXJhbWV0ZXIgY2FuIHJlLXVzZVxuICAvLyBsb2FkaW5nIHN0YXRlcy5cbiAgbGV0IHBhdGhuYW1lRnJvbVVybCA9IHVybC5wYXRobmFtZVxuXG4gIC8vIFJTQyByZXNwb25zZXMgY2FuIGRpZmZlciBiYXNlZCBvbiBzZWFyY2ggcGFyYW1zLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGNhc2Ugd2hlcmUgd2UgYXJlbid0XG4gIC8vIHJldHVybmluZyBhIHBhcnRpYWwgcmVzcG9uc2UgKGllIHdpdGggYFByZWZldGNoS2luZC5BVVRPYCkuXG4gIC8vIEluIHRoZSBhdXRvIGNhc2UsIHNpbmNlIGxvYWRpbmcuanMgJiBsYXlvdXQuanMgd29uJ3QgaGF2ZSBhY2Nlc3MgdG8gc2VhcmNoIHBhcmFtcyxcbiAgLy8gd2UgY2FuIHNhZmVseSByZS11c2UgdGhhdCBjYWNoZSBlbnRyeS4gQnV0IGZvciBmdWxsIHByZWZldGNoZXMsIHdlIHNob3VsZCBub3RcbiAgLy8gcmUtdXNlIHRoZSBjYWNoZSBlbnRyeSBhcyB0aGUgcmVzcG9uc2UgbWF5IGRpZmZlci5cbiAgaWYgKGluY2x1ZGVTZWFyY2hQYXJhbXMpIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGEgZnVsbCBwcmVmZXRjaCwgd2UgY2FuIGluY2x1ZGUgdGhlIHNlYXJjaCBwYXJhbSBpbiB0aGUga2V5LFxuICAgIC8vIGFzIHdlJ2xsIGJlIGdldHRpbmcgYmFjayBhIGZ1bGwgcmVzcG9uc2UuIFRoZSBzZXJ2ZXIgbWlnaHQgaGF2ZSByZWFkIHRoZSBzZWFyY2hcbiAgICAvLyBwYXJhbXMgd2hlbiBnZW5lcmF0aW5nIHRoZSBmdWxsIHJlc3BvbnNlLlxuICAgIHBhdGhuYW1lRnJvbVVybCArPSB1cmwuc2VhcmNoXG4gIH1cblxuICBpZiAocHJlZml4KSB7XG4gICAgcmV0dXJuIGAke3ByZWZpeH0ke0lOVEVSQ0VQVElPTl9DQUNIRV9LRVlfTUFSS0VSfSR7cGF0aG5hbWVGcm9tVXJsfWBcbiAgfVxuXG4gIHJldHVybiBwYXRobmFtZUZyb21Vcmxcbn1cblxuZnVuY3Rpb24gY3JlYXRlUHJlZmV0Y2hDYWNoZUtleShcbiAgdXJsOiBVUkwsXG4gIGtpbmQ6IFByZWZldGNoS2luZCB8IHVuZGVmaW5lZCxcbiAgbmV4dFVybD86IHN0cmluZyB8IG51bGxcbikge1xuICByZXR1cm4gY3JlYXRlUHJlZmV0Y2hDYWNoZUtleUltcGwodXJsLCBraW5kID09PSBQcmVmZXRjaEtpbmQuRlVMTCwgbmV4dFVybClcbn1cblxuZnVuY3Rpb24gZ2V0RXhpc3RpbmdDYWNoZUVudHJ5KFxuICB1cmw6IFVSTCxcbiAga2luZDogUHJlZmV0Y2hLaW5kID0gUHJlZmV0Y2hLaW5kLlRFTVBPUkFSWSxcbiAgbmV4dFVybDogc3RyaW5nIHwgbnVsbCxcbiAgcHJlZmV0Y2hDYWNoZTogTWFwPHN0cmluZywgUHJlZmV0Y2hDYWNoZUVudHJ5PixcbiAgYWxsb3dBbGlhc2luZzogYm9vbGVhblxuKTogQWxpYXNlZFByZWZldGNoQ2FjaGVFbnRyeSB8IHVuZGVmaW5lZCB7XG4gIC8vIFdlIGZpcnN0IGNoZWNrIGlmIHRoZXJlJ3MgYSBtb3JlIHNwZWNpZmljIGludGVyY2VwdGlvbiByb3V0ZSBwcmVmZXRjaCBlbnRyeVxuICAvLyBUaGlzIGlzIGJlY2F1c2Ugd2hlbiB3ZSBkZXRlY3QgYSBwcmVmZXRjaCB0aGF0IGNvcnJlc3BvbmRzIHdpdGggYW4gaW50ZXJjZXB0aW9uIHJvdXRlLCB3ZSBwcmVmaXggaXQgd2l0aCBuZXh0VXJsIChzZWUgYGNyZWF0ZVByZWZldGNoQ2FjaGVLZXlgKVxuICAvLyB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciBwYWdlcyB0aGF0IG1heSBoYXZlIHRoZSBzYW1lIFVSTCBidXQgcmVuZGVyIGRpZmZlcmVudCB0aGluZ3MgZGVwZW5kaW5nIG9uIHRoZSBgTmV4dC1VUkxgIGhlYWRlci5cbiAgZm9yIChjb25zdCBtYXliZU5leHRVcmwgb2YgW25leHRVcmwsIG51bGxdKSB7XG4gICAgY29uc3QgY2FjaGVLZXlXaXRoUGFyYW1zID0gY3JlYXRlUHJlZmV0Y2hDYWNoZUtleUltcGwoXG4gICAgICB1cmwsXG4gICAgICB0cnVlLFxuICAgICAgbWF5YmVOZXh0VXJsXG4gICAgKVxuICAgIGNvbnN0IGNhY2hlS2V5V2l0aG91dFBhcmFtcyA9IGNyZWF0ZVByZWZldGNoQ2FjaGVLZXlJbXBsKFxuICAgICAgdXJsLFxuICAgICAgZmFsc2UsXG4gICAgICBtYXliZU5leHRVcmxcbiAgICApXG5cbiAgICAvLyBGaXJzdCwgd2UgY2hlY2sgaWYgd2UgaGF2ZSBhIGNhY2hlIGVudHJ5IHRoYXQgZXhhY3RseSBtYXRjaGVzIHRoZSBVUkxcbiAgICBjb25zdCBjYWNoZUtleVRvVXNlID0gdXJsLnNlYXJjaFxuICAgICAgPyBjYWNoZUtleVdpdGhQYXJhbXNcbiAgICAgIDogY2FjaGVLZXlXaXRob3V0UGFyYW1zXG5cbiAgICBjb25zdCBleGlzdGluZ0VudHJ5ID0gcHJlZmV0Y2hDYWNoZS5nZXQoY2FjaGVLZXlUb1VzZSlcbiAgICBpZiAoZXhpc3RpbmdFbnRyeSAmJiBhbGxvd0FsaWFzaW5nKSB7XG4gICAgICAvLyBXZSBrbm93IHdlJ3JlIHJldHVybmluZyBhbiBhbGlhc2VkIGVudHJ5IHdoZW4gdGhlIHBhdGhuYW1lIG1hdGNoZXMgYnV0IHRoZSBzZWFyY2ggcGFyYW1zIGRvbid0LFxuICAgICAgY29uc3QgaXNBbGlhc2VkID1cbiAgICAgICAgZXhpc3RpbmdFbnRyeS51cmwucGF0aG5hbWUgPT09IHVybC5wYXRobmFtZSAmJlxuICAgICAgICBleGlzdGluZ0VudHJ5LnVybC5zZWFyY2ggIT09IHVybC5zZWFyY2hcblxuICAgICAgaWYgKGlzQWxpYXNlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmV4aXN0aW5nRW50cnksXG4gICAgICAgICAgYWxpYXNlZDogdHJ1ZSxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXhpc3RpbmdFbnRyeVxuICAgIH1cblxuICAgIC8vIElmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIHNlYXJjaCBwYXJhbXMsIGFuZCB3ZSdyZSBub3QgZG9pbmcgYSBmdWxsIHByZWZldGNoLCB3ZSBjYW4gcmV0dXJuIHRoZVxuICAgIC8vIHBhcmFtLWxlc3MgZW50cnkgaWYgaXQgZXhpc3RzLlxuICAgIC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgY292ZXJlZCBieSB0aGUgY2hlY2sgYXQgdGhlIGJvdHRvbSBvZiB0aGlzIGZ1bmN0aW9uLCB3aGljaCBpdGVyYXRlcyBvdmVyIGNhY2hlIGVudHJpZXMsXG4gICAgLy8gYnV0IGxldHMgdXMgYXJyaXZlIHRoZXJlIHF1aWNrZXIgaW4gdGhlIHBhcmFtLWZ1bGwgY2FzZS5cbiAgICBjb25zdCBlbnRyeVdpdGhvdXRQYXJhbXMgPSBwcmVmZXRjaENhY2hlLmdldChjYWNoZUtleVdpdGhvdXRQYXJhbXMpXG4gICAgaWYgKFxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdkZXZlbG9wbWVudCcgJiZcbiAgICAgIGFsbG93QWxpYXNpbmcgJiZcbiAgICAgIHVybC5zZWFyY2ggJiZcbiAgICAgIGtpbmQgIT09IFByZWZldGNoS2luZC5GVUxMICYmXG4gICAgICBlbnRyeVdpdGhvdXRQYXJhbXMgJiZcbiAgICAgIC8vIFdlIHNob3VsZG4ndCByZXR1cm4gdGhlIGFsaWFzZWQgZW50cnkgaWYgaXQgd2FzIHJlbG9jYXRlZCB0byBhIG5ldyBjYWNoZSBrZXkuXG4gICAgICAvLyBTaW5jZSBpdCdzIHJld3JpdHRlbiwgaXQgY291bGQgcmVzcG9uZCB3aXRoIGEgY29tcGxldGVseSBkaWZmZXJlbnQgbG9hZGluZyBzdGF0ZS5cbiAgICAgICFlbnRyeVdpdGhvdXRQYXJhbXMua2V5LmluY2x1ZGVzKElOVEVSQ0VQVElPTl9DQUNIRV9LRVlfTUFSS0VSKVxuICAgICkge1xuICAgICAgcmV0dXJuIHsgLi4uZW50cnlXaXRob3V0UGFyYW1zLCBhbGlhc2VkOiB0cnVlIH1cbiAgICB9XG4gIH1cblxuICAvLyBJZiB3ZSd2ZSBnb3R0ZW4gdG8gdGhpcyBwb2ludCwgd2UgZGlkbid0IGZpbmQgYSBzcGVjaWZpYyBjYWNoZSBlbnRyeSB0aGF0IG1hdGNoZWRcbiAgLy8gdGhlIHJlcXVlc3QgVVJMLlxuICAvLyBXZSBhdHRlbXB0IGEgcGFydGlhbCBtYXRjaCBieSBjaGVja2luZyBpZiB0aGVyZSdzIGEgY2FjaGUgZW50cnkgd2l0aCB0aGUgc2FtZSBwYXRobmFtZS5cbiAgLy8gUmVnYXJkbGVzcyBvZiB3aGF0IHdlIGZpbmQsIHNpbmNlIGl0IGRvZXNuJ3QgY29ycmVzcG9uZCB3aXRoIHRoZSByZXF1ZXN0ZWQgVVJMLCB3ZSdsbCBtYXJrIGl0IFwiYWxpYXNlZFwiLlxuICAvLyBUaGlzIHdpbGwgc2lnbmFsIHRvIHRoZSByb3V0ZXIgdGhhdCBpdCBzaG91bGQgb25seSBhcHBseSB0aGUgbG9hZGluZyBzdGF0ZSBvbiB0aGUgcHJlZmV0Y2hlZCBkYXRhLlxuICBpZiAoXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdkZXZlbG9wbWVudCcgJiZcbiAgICBraW5kICE9PSBQcmVmZXRjaEtpbmQuRlVMTCAmJlxuICAgIGFsbG93QWxpYXNpbmdcbiAgKSB7XG4gICAgZm9yIChjb25zdCBjYWNoZUVudHJ5IG9mIHByZWZldGNoQ2FjaGUudmFsdWVzKCkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2FjaGVFbnRyeS51cmwucGF0aG5hbWUgPT09IHVybC5wYXRobmFtZSAmJlxuICAgICAgICAvLyBXZSBzaG91bGRuJ3QgcmV0dXJuIHRoZSBhbGlhc2VkIGVudHJ5IGlmIGl0IHdhcyByZWxvY2F0ZWQgdG8gYSBuZXcgY2FjaGUga2V5LlxuICAgICAgICAvLyBTaW5jZSBpdCdzIHJld3JpdHRlbiwgaXQgY291bGQgcmVzcG9uZCB3aXRoIGEgY29tcGxldGVseSBkaWZmZXJlbnQgbG9hZGluZyBzdGF0ZS5cbiAgICAgICAgIWNhY2hlRW50cnkua2V5LmluY2x1ZGVzKElOVEVSQ0VQVElPTl9DQUNIRV9LRVlfTUFSS0VSKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB7IC4uLmNhY2hlRW50cnksIGFsaWFzZWQ6IHRydWUgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcHJlZmV0Y2ggY2FjaGUgZW50cnkgaWYgb25lIGV4aXN0cy4gT3RoZXJ3aXNlIGNyZWF0ZXMgYSBuZXcgb25lIGFuZCBlbnF1ZXVlcyBhIGZldGNoIHJlcXVlc3RcbiAqIHRvIHJldHJpZXZlIHRoZSBwcmVmZXRjaCBkYXRhIGZyb20gdGhlIHNlcnZlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9yQ3JlYXRlUHJlZmV0Y2hDYWNoZUVudHJ5KHtcbiAgdXJsLFxuICBuZXh0VXJsLFxuICB0cmVlLFxuICBwcmVmZXRjaENhY2hlLFxuICBraW5kLFxuICBhbGxvd0FsaWFzaW5nID0gdHJ1ZSxcbn06IFBpY2s8UmVhZG9ubHlSZWR1Y2VyU3RhdGUsICduZXh0VXJsJyB8ICdwcmVmZXRjaENhY2hlJyB8ICd0cmVlJz4gJiB7XG4gIHVybDogVVJMXG4gIGtpbmQ/OiBQcmVmZXRjaEtpbmRcbiAgYWxsb3dBbGlhc2luZzogYm9vbGVhblxufSk6IEFsaWFzZWRQcmVmZXRjaENhY2hlRW50cnkge1xuICBjb25zdCBleGlzdGluZ0NhY2hlRW50cnkgPSBnZXRFeGlzdGluZ0NhY2hlRW50cnkoXG4gICAgdXJsLFxuICAgIGtpbmQsXG4gICAgbmV4dFVybCxcbiAgICBwcmVmZXRjaENhY2hlLFxuICAgIGFsbG93QWxpYXNpbmdcbiAgKVxuXG4gIGlmIChleGlzdGluZ0NhY2hlRW50cnkpIHtcbiAgICAvLyBHcmFiIHRoZSBsYXRlc3Qgc3RhdHVzIG9mIHRoZSBjYWNoZSBlbnRyeSBhbmQgdXBkYXRlIGl0XG4gICAgZXhpc3RpbmdDYWNoZUVudHJ5LnN0YXR1cyA9IGdldFByZWZldGNoRW50cnlDYWNoZVN0YXR1cyhleGlzdGluZ0NhY2hlRW50cnkpXG5cbiAgICAvLyB3aGVuIGBraW5kYCBpcyBwcm92aWRlZCwgYW4gZXhwbGljaXQgcHJlZmV0Y2ggd2FzIHJlcXVlc3RlZC5cbiAgICAvLyBpZiB0aGUgcmVxdWVzdGVkIHByZWZldGNoIGlzIFwiZnVsbFwiIGFuZCB0aGUgY3VycmVudCBjYWNoZSBlbnRyeSB3YXNuJ3QsIHdlIHdhbnQgdG8gcmUtcHJlZmV0Y2ggd2l0aCB0aGUgbmV3IGludGVudFxuICAgIGNvbnN0IHN3aXRjaGVkVG9GdWxsUHJlZmV0Y2ggPVxuICAgICAgZXhpc3RpbmdDYWNoZUVudHJ5LmtpbmQgIT09IFByZWZldGNoS2luZC5GVUxMICYmXG4gICAgICBraW5kID09PSBQcmVmZXRjaEtpbmQuRlVMTFxuXG4gICAgaWYgKHN3aXRjaGVkVG9GdWxsUHJlZmV0Y2gpIHtcbiAgICAgIC8vIElmIHdlIHN3aXRjaGVkIHRvIGEgZnVsbCBwcmVmZXRjaCwgdmFsaWRhdGUgdGhhdCB0aGUgZXhpc3RpbmcgY2FjaGUgZW50cnkgY29udGFpbmVkIHBhcnRpYWwgZGF0YS5cbiAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgY2FjaGUgZW50cnkgd2FzIHNlZWRlZCB3aXRoIGZ1bGwgZGF0YSBidXQgaGFzIGEgY2FjaGUgdHlwZSBvZiBcImF1dG9cIiAoaWUgd2hlbiBjYWNoZSBlbnRyaWVzXG4gICAgICAvLyBhcmUgc2VlZGVkIGJ1dCB3aXRob3V0IGEgcHJlZmV0Y2ggaW50ZW50KVxuICAgICAgZXhpc3RpbmdDYWNoZUVudHJ5LmRhdGEudGhlbigocHJlZmV0Y2hSZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zdCBpc0Z1bGxQcmVmZXRjaCA9XG4gICAgICAgICAgQXJyYXkuaXNBcnJheShwcmVmZXRjaFJlc3BvbnNlLmZsaWdodERhdGEpICYmXG4gICAgICAgICAgcHJlZmV0Y2hSZXNwb25zZS5mbGlnaHREYXRhLnNvbWUoKGZsaWdodERhdGEpID0+IHtcbiAgICAgICAgICAgIC8vIElmIHdlIHN0YXJ0ZWQgcmVuZGVyaW5nIGZyb20gdGhlIHJvb3QgYW5kIHdlIHJldHVybmVkIFJTQyBkYXRhIChzZWVkRGF0YSksIHdlIGFscmVhZHkgaGFkIGEgZnVsbCBwcmVmZXRjaC5cbiAgICAgICAgICAgIHJldHVybiBmbGlnaHREYXRhLmlzUm9vdFJlbmRlciAmJiBmbGlnaHREYXRhLnNlZWREYXRhICE9PSBudWxsXG4gICAgICAgICAgfSlcblxuICAgICAgICBpZiAoIWlzRnVsbFByZWZldGNoKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlQcmVmZXRjaEVudHJ5KHtcbiAgICAgICAgICAgIHRyZWUsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICBuZXh0VXJsLFxuICAgICAgICAgICAgcHJlZmV0Y2hDYWNoZSxcbiAgICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBnZXQgYW4gZXhwbGljaXQgcHJlZmV0Y2gga2luZCwgd2Ugd2FudCB0byBzZXQgYSB0ZW1wb3Jhcnkga2luZFxuICAgICAgICAgICAgLy8gcmF0aGVyIHRoYW4gYXNzdW1pbmcgdGhlIHNhbWUgaW50ZW50IGFzIHRoZSBwcmV2aW91cyBlbnRyeSwgdG8gYmUgY29uc2lzdGVudCB3aXRoIGhvdyB3ZVxuICAgICAgICAgICAgLy8gbGF6aWx5IGNyZWF0ZSBwcmVmZXRjaCBlbnRyaWVzIHdoZW4gaW50ZW50IGlzIGxlZnQgdW5zcGVjaWZpZWQuXG4gICAgICAgICAgICBraW5kOiBraW5kID8/IFByZWZldGNoS2luZC5URU1QT1JBUlksXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgZXhpc3RpbmcgY2FjaGUgZW50cnkgd2FzIG1hcmtlZCBhcyB0ZW1wb3JhcnksIGl0IG1lYW5zIGl0IHdhcyBsYXppbHkgY3JlYXRlZCB3aGVuIGF0dGVtcHRpbmcgdG8gZ2V0IGFuIGVudHJ5LFxuICAgIC8vIHdoZXJlIHdlIGRpZG4ndCBoYXZlIHRoZSBwcmVmZXRjaCBpbnRlbnQuIE5vdyB0aGF0IHdlIGhhdmUgdGhlIGludGVudCAoaW4gYGtpbmRgKSwgd2Ugd2FudCB0byB1cGRhdGUgdGhlIGVudHJ5IHRvIHRoZSBtb3JlIGFjY3VyYXRlIGtpbmQuXG4gICAgaWYgKGtpbmQgJiYgZXhpc3RpbmdDYWNoZUVudHJ5LmtpbmQgPT09IFByZWZldGNoS2luZC5URU1QT1JBUlkpIHtcbiAgICAgIGV4aXN0aW5nQ2FjaGVFbnRyeS5raW5kID0ga2luZFxuICAgIH1cblxuICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCB0aGUgZXhpc3RpbmcgZW50cnkgd2UgZm91bmQgaXMgc3RpbGwgdmFsaWQsIHNvIHdlIHJldHVybiBpdC5cbiAgICByZXR1cm4gZXhpc3RpbmdDYWNoZUVudHJ5XG4gIH1cblxuICAvLyBJZiB3ZSBkaWRuJ3QgcmV0dXJuIGFuIGVudHJ5LCBjcmVhdGUgYSBuZXcgb25lLlxuICByZXR1cm4gY3JlYXRlTGF6eVByZWZldGNoRW50cnkoe1xuICAgIHRyZWUsXG4gICAgdXJsLFxuICAgIG5leHRVcmwsXG4gICAgcHJlZmV0Y2hDYWNoZSxcbiAgICBraW5kOiBraW5kIHx8IFByZWZldGNoS2luZC5URU1QT1JBUlksXG4gIH0pXG59XG5cbi8qXG4gKiBVc2VkIHRvIHRha2UgYW4gZXhpc3RpbmcgY2FjaGUgZW50cnkgYW5kIHByZWZpeCBpdCB3aXRoIHRoZSBuZXh0VXJsLCBpZiBpdCBleGlzdHMuXG4gKiBUaGlzIGVuc3VyZXMgdGhhdCB3ZSBkb24ndCBoYXZlIGNvbmZsaWN0aW5nIGNhY2hlIGVudHJpZXMgZm9yIHRoZSBzYW1lIFVSTCAoYXMgaXMgdGhlIGNhc2Ugd2l0aCByb3V0ZSBpbnRlcmNlcHRpb24pLlxuICovXG5mdW5jdGlvbiBwcmVmaXhFeGlzdGluZ1ByZWZldGNoQ2FjaGVFbnRyeSh7XG4gIHVybCxcbiAgbmV4dFVybCxcbiAgcHJlZmV0Y2hDYWNoZSxcbiAgZXhpc3RpbmdDYWNoZUtleSxcbn06IFBpY2s8UmVhZG9ubHlSZWR1Y2VyU3RhdGUsICduZXh0VXJsJyB8ICdwcmVmZXRjaENhY2hlJz4gJiB7XG4gIHVybDogVVJMXG4gIGV4aXN0aW5nQ2FjaGVLZXk6IHN0cmluZ1xufSkge1xuICBjb25zdCBleGlzdGluZ0NhY2hlRW50cnkgPSBwcmVmZXRjaENhY2hlLmdldChleGlzdGluZ0NhY2hlS2V5KVxuICBpZiAoIWV4aXN0aW5nQ2FjaGVFbnRyeSkge1xuICAgIC8vIG5vLW9wIC0tIHRoZXJlIHdhc24ndCBhbiBlbnRyeSB0byBtb3ZlXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBuZXdDYWNoZUtleSA9IGNyZWF0ZVByZWZldGNoQ2FjaGVLZXkoXG4gICAgdXJsLFxuICAgIGV4aXN0aW5nQ2FjaGVFbnRyeS5raW5kLFxuICAgIG5leHRVcmxcbiAgKVxuICBwcmVmZXRjaENhY2hlLnNldChuZXdDYWNoZUtleSwgeyAuLi5leGlzdGluZ0NhY2hlRW50cnksIGtleTogbmV3Q2FjaGVLZXkgfSlcbiAgcHJlZmV0Y2hDYWNoZS5kZWxldGUoZXhpc3RpbmdDYWNoZUtleSlcblxuICByZXR1cm4gbmV3Q2FjaGVLZXlcbn1cblxuLyoqXG4gKiBVc2UgdG8gc2VlZCB0aGUgcHJlZmV0Y2ggY2FjaGUgd2l0aCBkYXRhIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBmZXRjaGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VlZGVkUHJlZmV0Y2hDYWNoZUVudHJ5KHtcbiAgbmV4dFVybCxcbiAgdHJlZSxcbiAgcHJlZmV0Y2hDYWNoZSxcbiAgdXJsLFxuICBkYXRhLFxuICBraW5kLFxufTogUGljazxSZWFkb25seVJlZHVjZXJTdGF0ZSwgJ25leHRVcmwnIHwgJ3RyZWUnIHwgJ3ByZWZldGNoQ2FjaGUnPiAmIHtcbiAgdXJsOiBVUkxcbiAgZGF0YTogRmV0Y2hTZXJ2ZXJSZXNwb25zZVJlc3VsdFxuICBraW5kOiBQcmVmZXRjaEtpbmRcbn0pIHtcbiAgLy8gVGhlIGluaXRpYWwgY2FjaGUgZW50cnkgdGVjaG5pY2FsbHkgaW5jbHVkZXMgZnVsbCBkYXRhLCBidXQgaXQgaXNuJ3QgZXhwbGljaXRseSBwcmVmZXRjaGVkIC0tIHdlIGp1c3Qgc2VlZCB0aGVcbiAgLy8gcHJlZmV0Y2ggY2FjaGUgc28gdGhhdCB3ZSBjYW4gc2tpcCBhbiBleHRyYSBwcmVmZXRjaCByZXF1ZXN0IGxhdGVyLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIGRhdGEuXG4gIC8vIGlmIHRoZSBwcmVmZXRjaCBjb3JyZXNwb25kcyB3aXRoIGFuIGludGVyY2VwdGlvbiByb3V0ZSwgd2UgdXNlIHRoZSBuZXh0VXJsIHRvIHByZWZpeCB0aGUgY2FjaGUga2V5XG4gIGNvbnN0IHByZWZldGNoQ2FjaGVLZXkgPSBkYXRhLmNvdWxkQmVJbnRlcmNlcHRlZFxuICAgID8gY3JlYXRlUHJlZmV0Y2hDYWNoZUtleSh1cmwsIGtpbmQsIG5leHRVcmwpXG4gICAgOiBjcmVhdGVQcmVmZXRjaENhY2hlS2V5KHVybCwga2luZClcblxuICBjb25zdCBwcmVmZXRjaEVudHJ5ID0ge1xuICAgIHRyZWVBdFRpbWVPZlByZWZldGNoOiB0cmVlLFxuICAgIGRhdGE6IFByb21pc2UucmVzb2x2ZShkYXRhKSxcbiAgICBraW5kLFxuICAgIHByZWZldGNoVGltZTogRGF0ZS5ub3coKSxcbiAgICBsYXN0VXNlZFRpbWU6IERhdGUubm93KCksXG4gICAgc3RhbGVUaW1lOiBkYXRhLnN0YWxlVGltZSxcbiAgICBrZXk6IHByZWZldGNoQ2FjaGVLZXksXG4gICAgc3RhdHVzOiBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMuZnJlc2gsXG4gICAgdXJsLFxuICB9IHNhdGlzZmllcyBQcmVmZXRjaENhY2hlRW50cnlcblxuICBwcmVmZXRjaENhY2hlLnNldChwcmVmZXRjaENhY2hlS2V5LCBwcmVmZXRjaEVudHJ5KVxuXG4gIHJldHVybiBwcmVmZXRjaEVudHJ5XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHByZWZldGNoIGVudHJ5IGVudHJ5IGFuZCBlbnF1ZXVlcyBhIGZldGNoIHJlcXVlc3QgdG8gcmV0cmlldmUgdGhlIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUxhenlQcmVmZXRjaEVudHJ5KHtcbiAgdXJsLFxuICBraW5kLFxuICB0cmVlLFxuICBuZXh0VXJsLFxuICBwcmVmZXRjaENhY2hlLFxufTogUGljazxSZWFkb25seVJlZHVjZXJTdGF0ZSwgJ25leHRVcmwnIHwgJ3RyZWUnIHwgJ3ByZWZldGNoQ2FjaGUnPiAmIHtcbiAgdXJsOiBVUkxcbiAga2luZDogUHJlZmV0Y2hLaW5kXG59KTogUHJlZmV0Y2hDYWNoZUVudHJ5IHtcbiAgY29uc3QgcHJlZmV0Y2hDYWNoZUtleSA9IGNyZWF0ZVByZWZldGNoQ2FjaGVLZXkodXJsLCBraW5kKVxuXG4gIC8vIGluaXRpYXRlcyB0aGUgZmV0Y2ggcmVxdWVzdCBmb3IgdGhlIHByZWZldGNoIGFuZCBhdHRhY2hlcyBhIGxpc3RlbmVyXG4gIC8vIHRvIHRoZSBwcm9taXNlIHRvIHVwZGF0ZSB0aGUgcHJlZmV0Y2ggY2FjaGUgZW50cnkgd2hlbiB0aGUgcHJvbWlzZSByZXNvbHZlcyAoaWYgbmVjZXNzYXJ5KVxuICBjb25zdCBkYXRhID0gcHJlZmV0Y2hRdWV1ZS5lbnF1ZXVlKCgpID0+XG4gICAgZmV0Y2hTZXJ2ZXJSZXNwb25zZSh1cmwsIHtcbiAgICAgIGZsaWdodFJvdXRlclN0YXRlOiB0cmVlLFxuICAgICAgbmV4dFVybCxcbiAgICAgIHByZWZldGNoS2luZDoga2luZCxcbiAgICB9KS50aGVuKChwcmVmZXRjaFJlc3BvbnNlKSA9PiB7XG4gICAgICAvLyBUT0RPOiBgZmV0Y2hTZXJ2ZXJSZXNwb25zZWAgc2hvdWxkIGJlIG1vcmUgdGlnaGx5IGNvdXBsZWQgdG8gdGhlc2UgcHJlZmV0Y2ggY2FjaGUgb3BlcmF0aW9uc1xuICAgICAgLy8gdG8gYXZvaWQgZHJpZnQgYmV0d2VlbiB0aGlzIGNhY2hlIGtleSBwcmVmaXhpbmcgbG9naWNcbiAgICAgIC8vICh3aGljaCBpcyBjdXJyZW50bHkgZGlyZWN0bHkgaW5mbHVlbmNlZCBieSB0aGUgc2VydmVyIHJlc3BvbnNlKVxuICAgICAgbGV0IG5ld0NhY2hlS2V5XG5cbiAgICAgIGlmIChwcmVmZXRjaFJlc3BvbnNlLmNvdWxkQmVJbnRlcmNlcHRlZCkge1xuICAgICAgICAvLyBEZXRlcm1pbmUgaWYgd2UgbmVlZCB0byBwcmVmaXggdGhlIGNhY2hlIGtleSB3aXRoIHRoZSBuZXh0VXJsXG4gICAgICAgIG5ld0NhY2hlS2V5ID0gcHJlZml4RXhpc3RpbmdQcmVmZXRjaENhY2hlRW50cnkoe1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBleGlzdGluZ0NhY2hlS2V5OiBwcmVmZXRjaENhY2hlS2V5LFxuICAgICAgICAgIG5leHRVcmwsXG4gICAgICAgICAgcHJlZmV0Y2hDYWNoZSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIHByZWZldGNoIHdhcyBhIGNhY2hlIGhpdCwgd2Ugd2FudCB0byB1cGRhdGUgdGhlIGV4aXN0aW5nIGNhY2hlIGVudHJ5IHRvIHJlZmxlY3QgdGhhdCBpdCB3YXMgYSBmdWxsIHByZWZldGNoLlxuICAgICAgLy8gVGhpcyBpcyBiZWNhdXNlIHdlIGtub3cgdGhhdCBhIHN0YXRpYyByZXNwb25zZSB3aWxsIGNvbnRhaW4gdGhlIGZ1bGwgUlNDIHBheWxvYWQsIGFuZCBjYW4gYmUgdXBkYXRlZCB0byByZXNwZWN0IHRoZSBgc3RhdGljYFxuICAgICAgLy8gc3RhbGVUaW1lLlxuICAgICAgaWYgKHByZWZldGNoUmVzcG9uc2UucHJlcmVuZGVyZWQpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdDYWNoZUVudHJ5ID0gcHJlZmV0Y2hDYWNoZS5nZXQoXG4gICAgICAgICAgLy8gaWYgd2UgcHJlZml4ZWQgdGhlIGNhY2hlIGtleSBkdWUgdG8gcm91dGUgaW50ZXJjZXB0aW9uLCB3ZSB3YW50IHRvIHVzZSB0aGUgbmV3IGtleS4gT3RoZXJ3aXNlIHdlIHVzZSB0aGUgb3JpZ2luYWwga2V5XG4gICAgICAgICAgbmV3Q2FjaGVLZXkgPz8gcHJlZmV0Y2hDYWNoZUtleVxuICAgICAgICApXG4gICAgICAgIGlmIChleGlzdGluZ0NhY2hlRW50cnkpIHtcbiAgICAgICAgICBleGlzdGluZ0NhY2hlRW50cnkua2luZCA9IFByZWZldGNoS2luZC5GVUxMXG4gICAgICAgICAgaWYgKHByZWZldGNoUmVzcG9uc2Uuc3RhbGVUaW1lICE9PSAtMSkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgc3RhbGUgdGltZSB0aGF0IHdhcyBjb2xsZWN0ZWQgYnkgdGhlIHNlcnZlciBkdXJpbmdcbiAgICAgICAgICAgIC8vIHN0YXRpYyBnZW5lcmF0aW9uLiBVc2UgdGhpcyBpbiBwbGFjZSBvZiB0aGUgZGVmYXVsdCBzdGFsZSB0aW1lLlxuICAgICAgICAgICAgZXhpc3RpbmdDYWNoZUVudHJ5LnN0YWxlVGltZSA9IHByZWZldGNoUmVzcG9uc2Uuc3RhbGVUaW1lXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmVmZXRjaFJlc3BvbnNlXG4gICAgfSlcbiAgKVxuXG4gIGNvbnN0IHByZWZldGNoRW50cnkgPSB7XG4gICAgdHJlZUF0VGltZU9mUHJlZmV0Y2g6IHRyZWUsXG4gICAgZGF0YSxcbiAgICBraW5kLFxuICAgIHByZWZldGNoVGltZTogRGF0ZS5ub3coKSxcbiAgICBsYXN0VXNlZFRpbWU6IG51bGwsXG4gICAgc3RhbGVUaW1lOiAtMSxcbiAgICBrZXk6IHByZWZldGNoQ2FjaGVLZXksXG4gICAgc3RhdHVzOiBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMuZnJlc2gsXG4gICAgdXJsLFxuICB9XG5cbiAgcHJlZmV0Y2hDYWNoZS5zZXQocHJlZmV0Y2hDYWNoZUtleSwgcHJlZmV0Y2hFbnRyeSlcblxuICByZXR1cm4gcHJlZmV0Y2hFbnRyeVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmVQcmVmZXRjaENhY2hlKFxuICBwcmVmZXRjaENhY2hlOiBSZWFkb25seVJlZHVjZXJTdGF0ZVsncHJlZmV0Y2hDYWNoZSddXG4pIHtcbiAgZm9yIChjb25zdCBbaHJlZiwgcHJlZmV0Y2hDYWNoZUVudHJ5XSBvZiBwcmVmZXRjaENhY2hlKSB7XG4gICAgaWYgKFxuICAgICAgZ2V0UHJlZmV0Y2hFbnRyeUNhY2hlU3RhdHVzKHByZWZldGNoQ2FjaGVFbnRyeSkgPT09XG4gICAgICBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMuZXhwaXJlZFxuICAgICkge1xuICAgICAgcHJlZmV0Y2hDYWNoZS5kZWxldGUoaHJlZilcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhlc2UgdmFsdWVzIGFyZSBzZXQgYnkgYGRlZmluZS1lbnYtcGx1Z2luYCAoYmFzZWQgb24gYG5leHRDb25maWcuZXhwZXJpbWVudGFsLnN0YWxlVGltZXNgKVxuLy8gYW5kIGRlZmF1bHQgdG8gNSBtaW51dGVzIChzdGF0aWMpIC8gMCBzZWNvbmRzIChkeW5hbWljKVxuZXhwb3J0IGNvbnN0IERZTkFNSUNfU1RBTEVUSU1FX01TID1cbiAgTnVtYmVyKHByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfUk9VVEVSX0RZTkFNSUNfU1RBTEVUSU1FKSAqIDEwMDBcblxuZXhwb3J0IGNvbnN0IFNUQVRJQ19TVEFMRVRJTUVfTVMgPVxuICBOdW1iZXIocHJvY2Vzcy5lbnYuX19ORVhUX0NMSUVOVF9ST1VURVJfU1RBVElDX1NUQUxFVElNRSkgKiAxMDAwXG5cbmZ1bmN0aW9uIGdldFByZWZldGNoRW50cnlDYWNoZVN0YXR1cyh7XG4gIGtpbmQsXG4gIHByZWZldGNoVGltZSxcbiAgbGFzdFVzZWRUaW1lLFxuICBzdGFsZVRpbWUsXG59OiBQcmVmZXRjaENhY2hlRW50cnkpOiBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMge1xuICBpZiAoc3RhbGVUaW1lICE9PSAtMSkge1xuICAgIC8vIGBzdGFsZVRpbWVgIGlzIHRoZSB2YWx1ZSBzZW50IGJ5IHRoZSBzZXJ2ZXIgZHVyaW5nIHN0YXRpYyBnZW5lcmF0aW9uLlxuICAgIC8vIFdoZW4gdGhpcyBpcyBhdmFpbGFibGUsIGl0IHRha2VzIHByZWNlZGVuY2Ugb3ZlciBhbnkgb2YgdGhlIGhldXJpc3RpY3NcbiAgICAvLyB0aGF0IGZvbGxvdy5cbiAgICAvL1xuICAgIC8vIFRPRE86IFdoZW4gUFBSIGlzIGVuYWJsZWQsIHRoZSBzZXJ2ZXIgd2lsbCAqYWx3YXlzKiByZXR1cm4gYSBzdGFsZSB0aW1lXG4gICAgLy8gd2hlbiBwcmVmZXRjaGluZy4gV2Ugc2hvdWxkIG5ldmVyIHVzZSBhIHByZWZldGNoIGVudHJ5IHRoYXQgaGFzbid0IHlldFxuICAgIC8vIHJlY2VpdmVkIGRhdGEgZnJvbSB0aGUgc2VydmVyLiBTbyB0aGUgb25seSB0d28gY2FzZXMgc2hvdWxkIGJlIDEpIHdlIHVzZVxuICAgIC8vIHRoZSBzZXJ2ZXItZ2VuZXJhdGVkIHN0YWxlIHRpbWUgMikgdGhlIHVucmVzb2x2ZWQgZW50cnkgaXMgZGlzY2FyZGVkLlxuICAgIHJldHVybiBEYXRlLm5vdygpIDwgcHJlZmV0Y2hUaW1lICsgc3RhbGVUaW1lXG4gICAgICA/IFByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cy5mcmVzaFxuICAgICAgOiBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMuc3RhbGVcbiAgfVxuXG4gIC8vIFdlIHdpbGwgcmUtdXNlIHRoZSBjYWNoZSBlbnRyeSBkYXRhIGZvciB1cCB0byB0aGUgYGR5bmFtaWNgIHN0YWxldGltZSB3aW5kb3cuXG4gIGlmIChEYXRlLm5vdygpIDwgKGxhc3RVc2VkVGltZSA/PyBwcmVmZXRjaFRpbWUpICsgRFlOQU1JQ19TVEFMRVRJTUVfTVMpIHtcbiAgICByZXR1cm4gbGFzdFVzZWRUaW1lXG4gICAgICA/IFByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cy5yZXVzYWJsZVxuICAgICAgOiBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMuZnJlc2hcbiAgfVxuXG4gIC8vIEZvciBcImF1dG9cIiBwcmVmZXRjaGluZywgd2UnbGwgcmUtdXNlIG9ubHkgdGhlIGxvYWRpbmcgYm91bmRhcnkgZm9yIHVwIHRvIGBzdGF0aWNgIHN0YWxldGltZSB3aW5kb3cuXG4gIC8vIEEgc3RhbGUgZW50cnkgd2lsbCBvbmx5IHJlLXVzZSB0aGUgYGxvYWRpbmdgIGJvdW5kYXJ5LCBub3QgdGhlIGZ1bGwgZGF0YS5cbiAgLy8gVGhpcyB3aWxsIHRyaWdnZXIgYSBcImxhenkgZmV0Y2hcIiBmb3IgdGhlIGZ1bGwgZGF0YS5cbiAgaWYgKGtpbmQgPT09IFByZWZldGNoS2luZC5BVVRPKSB7XG4gICAgaWYgKERhdGUubm93KCkgPCBwcmVmZXRjaFRpbWUgKyBTVEFUSUNfU1RBTEVUSU1FX01TKSB7XG4gICAgICByZXR1cm4gUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzLnN0YWxlXG4gICAgfVxuICB9XG5cbiAgLy8gZm9yIFwiZnVsbFwiIHByZWZldGNoaW5nLCB3ZSdsbCByZS11c2UgdGhlIGNhY2hlIGVudHJ5IGRhdGEgZm9yIHVwIHRvIGBzdGF0aWNgIHN0YWxldGltZSB3aW5kb3cuXG4gIGlmIChraW5kID09PSBQcmVmZXRjaEtpbmQuRlVMTCkge1xuICAgIGlmIChEYXRlLm5vdygpIDwgcHJlZmV0Y2hUaW1lICsgU1RBVElDX1NUQUxFVElNRV9NUykge1xuICAgICAgcmV0dXJuIFByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cy5yZXVzYWJsZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMuZXhwaXJlZFxufVxuIl0sIm5hbWVzIjpbIkRZTkFNSUNfU1RBTEVUSU1FX01TIiwiU1RBVElDX1NUQUxFVElNRV9NUyIsImNyZWF0ZVNlZWRlZFByZWZldGNoQ2FjaGVFbnRyeSIsImdldE9yQ3JlYXRlUHJlZmV0Y2hDYWNoZUVudHJ5IiwicHJ1bmVQcmVmZXRjaENhY2hlIiwiSU5URVJDRVBUSU9OX0NBQ0hFX0tFWV9NQVJLRVIiLCJjcmVhdGVQcmVmZXRjaENhY2hlS2V5SW1wbCIsInVybCIsImluY2x1ZGVTZWFyY2hQYXJhbXMiLCJwcmVmaXgiLCJwYXRobmFtZUZyb21VcmwiLCJwYXRobmFtZSIsInNlYXJjaCIsImNyZWF0ZVByZWZldGNoQ2FjaGVLZXkiLCJraW5kIiwibmV4dFVybCIsIlByZWZldGNoS2luZCIsIkZVTEwiLCJnZXRFeGlzdGluZ0NhY2hlRW50cnkiLCJwcmVmZXRjaENhY2hlIiwiYWxsb3dBbGlhc2luZyIsIlRFTVBPUkFSWSIsIm1heWJlTmV4dFVybCIsImNhY2hlS2V5V2l0aFBhcmFtcyIsImNhY2hlS2V5V2l0aG91dFBhcmFtcyIsImNhY2hlS2V5VG9Vc2UiLCJleGlzdGluZ0VudHJ5IiwiZ2V0IiwiaXNBbGlhc2VkIiwiYWxpYXNlZCIsImVudHJ5V2l0aG91dFBhcmFtcyIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImtleSIsImluY2x1ZGVzIiwiY2FjaGVFbnRyeSIsInZhbHVlcyIsInVuZGVmaW5lZCIsInRyZWUiLCJleGlzdGluZ0NhY2hlRW50cnkiLCJzdGF0dXMiLCJnZXRQcmVmZXRjaEVudHJ5Q2FjaGVTdGF0dXMiLCJzd2l0Y2hlZFRvRnVsbFByZWZldGNoIiwiZGF0YSIsInRoZW4iLCJwcmVmZXRjaFJlc3BvbnNlIiwiaXNGdWxsUHJlZmV0Y2giLCJBcnJheSIsImlzQXJyYXkiLCJmbGlnaHREYXRhIiwic29tZSIsImlzUm9vdFJlbmRlciIsInNlZWREYXRhIiwiY3JlYXRlTGF6eVByZWZldGNoRW50cnkiLCJwcmVmaXhFeGlzdGluZ1ByZWZldGNoQ2FjaGVFbnRyeSIsImV4aXN0aW5nQ2FjaGVLZXkiLCJuZXdDYWNoZUtleSIsInNldCIsImRlbGV0ZSIsInByZWZldGNoQ2FjaGVLZXkiLCJjb3VsZEJlSW50ZXJjZXB0ZWQiLCJwcmVmZXRjaEVudHJ5IiwidHJlZUF0VGltZU9mUHJlZmV0Y2giLCJQcm9taXNlIiwicmVzb2x2ZSIsInByZWZldGNoVGltZSIsIkRhdGUiLCJub3ciLCJsYXN0VXNlZFRpbWUiLCJzdGFsZVRpbWUiLCJQcmVmZXRjaENhY2hlRW50cnlTdGF0dXMiLCJmcmVzaCIsInByZWZldGNoUXVldWUiLCJlbnF1ZXVlIiwiZmV0Y2hTZXJ2ZXJSZXNwb25zZSIsImZsaWdodFJvdXRlclN0YXRlIiwicHJlZmV0Y2hLaW5kIiwicHJlcmVuZGVyZWQiLCJocmVmIiwicHJlZmV0Y2hDYWNoZUVudHJ5IiwiZXhwaXJlZCIsIk51bWJlciIsIl9fTkVYVF9DTElFTlRfUk9VVEVSX0RZTkFNSUNfU1RBTEVUSU1FIiwiX19ORVhUX0NMSUVOVF9ST1VURVJfU1RBVElDX1NUQUxFVElNRSIsInN0YWxlIiwicmV1c2FibGUiLCJBVVRPIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/prefetch-cache-utils.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js":
/*!********************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js ***!
  \********************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"findHeadInCache\", ({\n    enumerable: true,\n    get: function() {\n        return findHeadInCache;\n    }\n}));\nconst _segment = __webpack_require__(/*! ../../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/segment.js\");\nconst _createroutercachekey = __webpack_require__(/*! ../create-router-cache-key */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js\");\nfunction findHeadInCache(cache, parallelRoutes) {\n    return findHeadInCacheImpl(cache, parallelRoutes, '');\n}\nfunction findHeadInCacheImpl(cache, parallelRoutes, keyPrefix) {\n    const isLastItem = Object.keys(parallelRoutes).length === 0;\n    if (isLastItem) {\n        // Returns the entire Cache Node of the segment whose head we will render.\n        return [\n            cache,\n            keyPrefix\n        ];\n    }\n    // First try the 'children' parallel route if it exists\n    // when starting from the \"root\", this corresponds with the main page component\n    const parallelRoutesKeys = Object.keys(parallelRoutes).filter((key)=>key !== 'children');\n    // if we are at the root, we need to check the children slot first\n    if ('children' in parallelRoutes) {\n        parallelRoutesKeys.unshift('children');\n    }\n    for (const key of parallelRoutesKeys){\n        const [segment, childParallelRoutes] = parallelRoutes[key];\n        // If the parallel is not matched and using the default segment,\n        // skip searching the head from it.\n        if (segment === _segment.DEFAULT_SEGMENT_KEY) {\n            continue;\n        }\n        const childSegmentMap = cache.parallelRoutes.get(key);\n        if (!childSegmentMap) {\n            continue;\n        }\n        const cacheKey = (0, _createroutercachekey.createRouterCacheKey)(segment);\n        const cacheNode = childSegmentMap.get(cacheKey);\n        if (!cacheNode) {\n            continue;\n        }\n        const item = findHeadInCacheImpl(cacheNode, childParallelRoutes, keyPrefix + '/' + cacheKey);\n        if (item) {\n            return item;\n        }\n    }\n    return null;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=find-head-in-cache.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9maW5kLWhlYWQtaW4tY2FjaGUuanMiLCJtYXBwaW5ncyI6Ijs7OzttREFLZ0JBOzs7ZUFBQUE7OztxQ0FIb0I7a0RBQ0M7QUFFOUIsU0FBU0EsZ0JBQ2RDLEtBQWdCLEVBQ2hCQyxjQUFvQztJQUVwQyxPQUFPQyxvQkFBb0JGLE9BQU9DLGdCQUFnQjtBQUNwRDtBQUVBLFNBQVNDLG9CQUNQRixLQUFnQixFQUNoQkMsY0FBb0MsRUFDcENFLFNBQWlCO0lBRWpCLE1BQU1DLGFBQWFDLE9BQU9DLElBQUksQ0FBQ0wsZ0JBQWdCTSxNQUFNLEtBQUs7SUFDMUQsSUFBSUgsWUFBWTtRQUNkLDBFQUEwRTtRQUMxRSxPQUFPO1lBQUNKO1lBQU9HO1NBQVU7SUFDM0I7SUFFQSx1REFBdUQ7SUFDdkQsK0VBQStFO0lBQy9FLE1BQU1LLHFCQUFxQkgsT0FBT0MsSUFBSSxDQUFDTCxnQkFBZ0JRLE1BQU0sQ0FDM0QsQ0FBQ0MsTUFBUUEsUUFBUTtJQUduQixrRUFBa0U7SUFDbEUsSUFBSSxjQUFjVCxnQkFBZ0I7UUFDaENPLG1CQUFtQkcsT0FBTyxDQUFDO0lBQzdCO0lBRUEsS0FBSyxNQUFNRCxPQUFPRixtQkFBb0I7UUFDcEMsTUFBTSxDQUFDSSxTQUFTQyxvQkFBb0IsR0FBR1osY0FBYyxDQUFDUyxJQUFJO1FBQzFELGdFQUFnRTtRQUNoRSxtQ0FBbUM7UUFDbkMsSUFBSUUsWUFBWUUsU0FBQUEsbUJBQW1CLEVBQUU7WUFDbkM7UUFDRjtRQUNBLE1BQU1DLGtCQUFrQmYsTUFBTUMsY0FBYyxDQUFDZSxHQUFHLENBQUNOO1FBQ2pELElBQUksQ0FBQ0ssaUJBQWlCO1lBQ3BCO1FBQ0Y7UUFFQSxNQUFNRSxXQUFXQyxDQUFBQSxHQUFBQSxzQkFBQUEsb0JBQUFBLEVBQXFCTjtRQUV0QyxNQUFNTyxZQUFZSixnQkFBZ0JDLEdBQUcsQ0FBQ0M7UUFDdEMsSUFBSSxDQUFDRSxXQUFXO1lBQ2Q7UUFDRjtRQUVBLE1BQU1DLE9BQU9sQixvQkFDWGlCLFdBQ0FOLHFCQUNBVixZQUFZLE1BQU1jO1FBRXBCLElBQUlHLE1BQU07WUFDUixPQUFPQTtRQUNUO0lBQ0Y7SUFFQSxPQUFPO0FBQ1QiLCJzb3VyY2VzIjpbIi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvZmluZC1oZWFkLWluLWNhY2hlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmxpZ2h0Um91dGVyU3RhdGUgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FjaGVOb2RlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyBERUZBVUxUX1NFR01FTlRfS0VZIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2xpYi9zZWdtZW50J1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyQ2FjaGVLZXkgfSBmcm9tICcuLi9jcmVhdGUtcm91dGVyLWNhY2hlLWtleSdcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRIZWFkSW5DYWNoZShcbiAgY2FjaGU6IENhY2hlTm9kZSxcbiAgcGFyYWxsZWxSb3V0ZXM6IEZsaWdodFJvdXRlclN0YXRlWzFdXG4pOiBbQ2FjaGVOb2RlLCBzdHJpbmddIHwgbnVsbCB7XG4gIHJldHVybiBmaW5kSGVhZEluQ2FjaGVJbXBsKGNhY2hlLCBwYXJhbGxlbFJvdXRlcywgJycpXG59XG5cbmZ1bmN0aW9uIGZpbmRIZWFkSW5DYWNoZUltcGwoXG4gIGNhY2hlOiBDYWNoZU5vZGUsXG4gIHBhcmFsbGVsUm91dGVzOiBGbGlnaHRSb3V0ZXJTdGF0ZVsxXSxcbiAga2V5UHJlZml4OiBzdHJpbmdcbik6IFtDYWNoZU5vZGUsIHN0cmluZ10gfCBudWxsIHtcbiAgY29uc3QgaXNMYXN0SXRlbSA9IE9iamVjdC5rZXlzKHBhcmFsbGVsUm91dGVzKS5sZW5ndGggPT09IDBcbiAgaWYgKGlzTGFzdEl0ZW0pIHtcbiAgICAvLyBSZXR1cm5zIHRoZSBlbnRpcmUgQ2FjaGUgTm9kZSBvZiB0aGUgc2VnbWVudCB3aG9zZSBoZWFkIHdlIHdpbGwgcmVuZGVyLlxuICAgIHJldHVybiBbY2FjaGUsIGtleVByZWZpeF1cbiAgfVxuXG4gIC8vIEZpcnN0IHRyeSB0aGUgJ2NoaWxkcmVuJyBwYXJhbGxlbCByb3V0ZSBpZiBpdCBleGlzdHNcbiAgLy8gd2hlbiBzdGFydGluZyBmcm9tIHRoZSBcInJvb3RcIiwgdGhpcyBjb3JyZXNwb25kcyB3aXRoIHRoZSBtYWluIHBhZ2UgY29tcG9uZW50XG4gIGNvbnN0IHBhcmFsbGVsUm91dGVzS2V5cyA9IE9iamVjdC5rZXlzKHBhcmFsbGVsUm91dGVzKS5maWx0ZXIoXG4gICAgKGtleSkgPT4ga2V5ICE9PSAnY2hpbGRyZW4nXG4gIClcblxuICAvLyBpZiB3ZSBhcmUgYXQgdGhlIHJvb3QsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGNoaWxkcmVuIHNsb3QgZmlyc3RcbiAgaWYgKCdjaGlsZHJlbicgaW4gcGFyYWxsZWxSb3V0ZXMpIHtcbiAgICBwYXJhbGxlbFJvdXRlc0tleXMudW5zaGlmdCgnY2hpbGRyZW4nKVxuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgcGFyYWxsZWxSb3V0ZXNLZXlzKSB7XG4gICAgY29uc3QgW3NlZ21lbnQsIGNoaWxkUGFyYWxsZWxSb3V0ZXNdID0gcGFyYWxsZWxSb3V0ZXNba2V5XVxuICAgIC8vIElmIHRoZSBwYXJhbGxlbCBpcyBub3QgbWF0Y2hlZCBhbmQgdXNpbmcgdGhlIGRlZmF1bHQgc2VnbWVudCxcbiAgICAvLyBza2lwIHNlYXJjaGluZyB0aGUgaGVhZCBmcm9tIGl0LlxuICAgIGlmIChzZWdtZW50ID09PSBERUZBVUxUX1NFR01FTlRfS0VZKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCBjaGlsZFNlZ21lbnRNYXAgPSBjYWNoZS5wYXJhbGxlbFJvdXRlcy5nZXQoa2V5KVxuICAgIGlmICghY2hpbGRTZWdtZW50TWFwKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IGNhY2hlS2V5ID0gY3JlYXRlUm91dGVyQ2FjaGVLZXkoc2VnbWVudClcblxuICAgIGNvbnN0IGNhY2hlTm9kZSA9IGNoaWxkU2VnbWVudE1hcC5nZXQoY2FjaGVLZXkpXG4gICAgaWYgKCFjYWNoZU5vZGUpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgaXRlbSA9IGZpbmRIZWFkSW5DYWNoZUltcGwoXG4gICAgICBjYWNoZU5vZGUsXG4gICAgICBjaGlsZFBhcmFsbGVsUm91dGVzLFxuICAgICAga2V5UHJlZml4ICsgJy8nICsgY2FjaGVLZXlcbiAgICApXG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cbiJdLCJuYW1lcyI6WyJmaW5kSGVhZEluQ2FjaGUiLCJjYWNoZSIsInBhcmFsbGVsUm91dGVzIiwiZmluZEhlYWRJbkNhY2hlSW1wbCIsImtleVByZWZpeCIsImlzTGFzdEl0ZW0iLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwicGFyYWxsZWxSb3V0ZXNLZXlzIiwiZmlsdGVyIiwia2V5IiwidW5zaGlmdCIsInNlZ21lbnQiLCJjaGlsZFBhcmFsbGVsUm91dGVzIiwiREVGQVVMVF9TRUdNRU5UX0tFWSIsImNoaWxkU2VnbWVudE1hcCIsImdldCIsImNhY2hlS2V5IiwiY3JlYXRlUm91dGVyQ2FjaGVLZXkiLCJjYWNoZU5vZGUiLCJpdGVtIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js":
/*!*******************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js ***!
  \*******************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"getSegmentValue\", ({\n    enumerable: true,\n    get: function() {\n        return getSegmentValue;\n    }\n}));\nfunction getSegmentValue(segment) {\n    return Array.isArray(segment) ? segment[1] : segment;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=get-segment-value.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9nZXQtc2VnbWVudC12YWx1ZS5qcyIsIm1hcHBpbmdzIjoiOzs7O21EQUVnQkE7OztlQUFBQTs7O0FBQVQsU0FBU0EsZ0JBQWdCQyxPQUFnQjtJQUM5QyxPQUFPQyxNQUFNQyxPQUFPLENBQUNGLFdBQVdBLE9BQU8sQ0FBQyxFQUFFLEdBQUdBO0FBQy9DIiwic291cmNlcyI6WyIvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL2dldC1zZWdtZW50LXZhbHVlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VnbWVudCB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VnbWVudFZhbHVlKHNlZ21lbnQ6IFNlZ21lbnQpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc2VnbWVudCkgPyBzZWdtZW50WzFdIDogc2VnbWVudFxufVxuIl0sIm5hbWVzIjpbImdldFNlZ21lbnRWYWx1ZSIsInNlZ21lbnQiLCJBcnJheSIsImlzQXJyYXkiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js":
/*!****************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js ***!
  \****************************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"hasInterceptionRouteInCurrentTree\", ({\n    enumerable: true,\n    get: function() {\n        return hasInterceptionRouteInCurrentTree;\n    }\n}));\nconst _interceptionroutes = __webpack_require__(/*! ../../../../shared/lib/router/utils/interception-routes */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/interception-routes.js\");\nfunction hasInterceptionRouteInCurrentTree(param) {\n    let [segment, parallelRoutes] = param;\n    // If we have a dynamic segment, it's marked as an interception route by the presence of the `i` suffix.\n    if (Array.isArray(segment) && (segment[2] === 'di' || segment[2] === 'ci')) {\n        return true;\n    }\n    // If segment is not an array, apply the existing string-based check\n    if (typeof segment === 'string' && (0, _interceptionroutes.isInterceptionRouteAppPath)(segment)) {\n        return true;\n    }\n    // Iterate through parallelRoutes if they exist\n    if (parallelRoutes) {\n        for(const key in parallelRoutes){\n            if (hasInterceptionRouteInCurrentTree(parallelRoutes[key])) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=has-interception-route-in-current-tree.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9oYXMtaW50ZXJjZXB0aW9uLXJvdXRlLWluLWN1cnJlbnQtdHJlZS5qcyIsIm1hcHBpbmdzIjoiOzs7O3FFQUdnQkE7OztlQUFBQTs7O2dEQUYyQjtBQUVwQyxTQUFTQSxrQ0FBa0MsS0FHOUI7SUFIOEIsS0FDaERDLFNBQ0FDLGVBQ2tCLEdBSDhCO0lBSWhELHdHQUF3RztJQUN4RyxJQUFJQyxNQUFNQyxPQUFPLENBQUNILFlBQWFBLENBQUFBLE9BQU8sQ0FBQyxFQUFFLEtBQUssUUFBUUEsT0FBTyxDQUFDLEVBQUUsS0FBSyxLQUFHLEVBQUk7UUFDMUUsT0FBTztJQUNUO0lBRUEsb0VBQW9FO0lBQ3BFLElBQUksT0FBT0EsWUFBWSxZQUFZSSxDQUFBQSxHQUFBQSxvQkFBQUEsMEJBQUFBLEVBQTJCSixVQUFVO1FBQ3RFLE9BQU87SUFDVDtJQUVBLCtDQUErQztJQUMvQyxJQUFJQyxnQkFBZ0I7UUFDbEIsSUFBSyxNQUFNSSxPQUFPSixlQUFnQjtZQUNoQyxJQUFJRixrQ0FBa0NFLGNBQWMsQ0FBQ0ksSUFBSSxHQUFHO2dCQUMxRCxPQUFPO1lBQ1Q7UUFDRjtJQUNGO0lBRUEsT0FBTztBQUNUIiwic291cmNlcyI6WyIvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL2hhcy1pbnRlcmNlcHRpb24tcm91dGUtaW4tY3VycmVudC10cmVlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmxpZ2h0Um91dGVyU3RhdGUgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcbmltcG9ydCB7IGlzSW50ZXJjZXB0aW9uUm91dGVBcHBQYXRoIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW50ZXJjZXB0aW9uLXJvdXRlcydcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0ludGVyY2VwdGlvblJvdXRlSW5DdXJyZW50VHJlZShbXG4gIHNlZ21lbnQsXG4gIHBhcmFsbGVsUm91dGVzLFxuXTogRmxpZ2h0Um91dGVyU3RhdGUpOiBib29sZWFuIHtcbiAgLy8gSWYgd2UgaGF2ZSBhIGR5bmFtaWMgc2VnbWVudCwgaXQncyBtYXJrZWQgYXMgYW4gaW50ZXJjZXB0aW9uIHJvdXRlIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGUgYGlgIHN1ZmZpeC5cbiAgaWYgKEFycmF5LmlzQXJyYXkoc2VnbWVudCkgJiYgKHNlZ21lbnRbMl0gPT09ICdkaScgfHwgc2VnbWVudFsyXSA9PT0gJ2NpJykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSWYgc2VnbWVudCBpcyBub3QgYW4gYXJyYXksIGFwcGx5IHRoZSBleGlzdGluZyBzdHJpbmctYmFzZWQgY2hlY2tcbiAgaWYgKHR5cGVvZiBzZWdtZW50ID09PSAnc3RyaW5nJyAmJiBpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aChzZWdtZW50KSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBJdGVyYXRlIHRocm91Z2ggcGFyYWxsZWxSb3V0ZXMgaWYgdGhleSBleGlzdFxuICBpZiAocGFyYWxsZWxSb3V0ZXMpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbGxlbFJvdXRlcykge1xuICAgICAgaWYgKGhhc0ludGVyY2VwdGlvblJvdXRlSW5DdXJyZW50VHJlZShwYXJhbGxlbFJvdXRlc1trZXldKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuIl0sIm5hbWVzIjpbImhhc0ludGVyY2VwdGlvblJvdXRlSW5DdXJyZW50VHJlZSIsInNlZ21lbnQiLCJwYXJhbGxlbFJvdXRlcyIsIkFycmF5IiwiaXNBcnJheSIsImlzSW50ZXJjZXB0aW9uUm91dGVBcHBQYXRoIiwia2V5Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/hmr-refresh-reducer.js":
/*!*********************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/hmr-refresh-reducer.js ***!
  \*********************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"hmrRefreshReducer\", ({\n    enumerable: true,\n    get: function() {\n        return hmrRefreshReducer;\n    }\n}));\nconst _fetchserverresponse = __webpack_require__(/*! ../fetch-server-response */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _navigatereducer = __webpack_require__(/*! ./navigate-reducer */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _applyflightdata = __webpack_require__(/*! ../apply-flight-data */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/apply-flight-data.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router.js\");\nconst _handlesegmentmismatch = __webpack_require__(/*! ../handle-segment-mismatch */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js\");\nconst _hasinterceptionrouteincurrenttree = __webpack_require__(/*! ./has-interception-route-in-current-tree */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js\");\n// A version of refresh reducer that keeps the cache around instead of wiping all of it.\nfunction hmrRefreshReducerImpl(state, action) {\n    const { origin } = action;\n    const mutable = {};\n    const href = state.canonicalUrl;\n    mutable.preserveCustomHistoryState = false;\n    const cache = (0, _approuter.createEmptyCacheNode)();\n    // If the current tree was intercepted, the nextUrl should be included in the request.\n    // This is to ensure that the refresh request doesn't get intercepted, accidentally triggering the interception route.\n    const includeNextUrl = (0, _hasinterceptionrouteincurrenttree.hasInterceptionRouteInCurrentTree)(state.tree);\n    // TODO-APP: verify that `href` is not an external url.\n    // Fetch data from the root of the tree.\n    const navigatedAt = Date.now();\n    cache.lazyData = (0, _fetchserverresponse.fetchServerResponse)(new URL(href, origin), {\n        flightRouterState: [\n            state.tree[0],\n            state.tree[1],\n            state.tree[2],\n            'refetch'\n        ],\n        nextUrl: includeNextUrl ? state.nextUrl : null,\n        isHmrRefresh: true\n    });\n    return cache.lazyData.then((param)=>{\n        let { flightData, canonicalUrl: canonicalUrlOverride } = param;\n        // Handle case when navigating to page in `pages` from `app`\n        if (typeof flightData === 'string') {\n            return (0, _navigatereducer.handleExternalUrl)(state, mutable, flightData, state.pushRef.pendingPush);\n        }\n        // Remove cache.lazyData as it has been resolved at this point.\n        cache.lazyData = null;\n        let currentTree = state.tree;\n        let currentCache = state.cache;\n        for (const normalizedFlightData of flightData){\n            const { tree: treePatch, isRootRender } = normalizedFlightData;\n            if (!isRootRender) {\n                // TODO-APP: handle this case better\n                console.log('REFRESH FAILED');\n                return state;\n            }\n            const newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTree)([\n                ''\n            ], currentTree, treePatch, state.canonicalUrl);\n            if (newTree === null) {\n                return (0, _handlesegmentmismatch.handleSegmentMismatch)(state, action, treePatch);\n            }\n            if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n                return (0, _navigatereducer.handleExternalUrl)(state, mutable, href, state.pushRef.pendingPush);\n            }\n            const canonicalUrlOverrideHref = canonicalUrlOverride ? (0, _createhreffromurl.createHrefFromUrl)(canonicalUrlOverride) : undefined;\n            if (canonicalUrlOverride) {\n                mutable.canonicalUrl = canonicalUrlOverrideHref;\n            }\n            const applied = (0, _applyflightdata.applyFlightData)(navigatedAt, currentCache, cache, normalizedFlightData);\n            if (applied) {\n                mutable.cache = cache;\n                currentCache = cache;\n            }\n            mutable.patchedTree = newTree;\n            mutable.canonicalUrl = href;\n            currentTree = newTree;\n        }\n        return (0, _handlemutable.handleMutable)(state, mutable);\n    }, ()=>state);\n}\nfunction hmrRefreshReducerNoop(state, _action) {\n    return state;\n}\nconst hmrRefreshReducer =  false ? 0 : hmrRefreshReducerImpl;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=hmr-refresh-reducer.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9obXItcmVmcmVzaC1yZWR1Y2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7cURBK0hhQTs7O2VBQUFBOzs7aURBL0h1QjsrQ0FDRjt5REFDVTt5REFDQTs2Q0FPVjsyQ0FDSjs2Q0FDRTt1Q0FFSzttREFDQzsrREFDWTtBQUVsRCx3RkFBd0Y7QUFDeEYsU0FBU0Msc0JBQ1BDLEtBQTJCLEVBQzNCQyxNQUF3QjtJQUV4QixNQUFNLEVBQUVDLE1BQU0sRUFBRSxHQUFHRDtJQUNuQixNQUFNRSxVQUFtQixDQUFDO0lBQzFCLE1BQU1DLE9BQU9KLE1BQU1LLFlBQVk7SUFFL0JGLFFBQVFHLDBCQUEwQixHQUFHO0lBRXJDLE1BQU1DLFFBQW1CQyxDQUFBQSxHQUFBQSxXQUFBQSxvQkFBQUE7SUFDekIsc0ZBQXNGO0lBQ3RGLHNIQUFzSDtJQUN0SCxNQUFNQyxpQkFBaUJDLENBQUFBLEdBQUFBLG1DQUFBQSxpQ0FBQUEsRUFBa0NWLE1BQU1XLElBQUk7SUFFbkUsdURBQXVEO0lBQ3ZELHdDQUF3QztJQUN4QyxNQUFNQyxjQUFjQyxLQUFLQyxHQUFHO0lBQzVCUCxNQUFNUSxRQUFRLEdBQUdDLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0IsSUFBSUMsSUFBSWIsTUFBTUYsU0FBUztRQUMxRGdCLG1CQUFtQjtZQUFDbEIsTUFBTVcsSUFBSSxDQUFDLEVBQUU7WUFBRVgsTUFBTVcsSUFBSSxDQUFDLEVBQUU7WUFBRVgsTUFBTVcsSUFBSSxDQUFDLEVBQUU7WUFBRTtTQUFVO1FBQzNFUSxTQUFTVixpQkFBaUJULE1BQU1tQixPQUFPLEdBQUc7UUFDMUNDLGNBQWM7SUFDaEI7SUFFQSxPQUFPYixNQUFNUSxRQUFRLENBQUNNLElBQUksQ0FDeEI7WUFBQyxFQUFFQyxVQUFVLEVBQUVqQixjQUFja0Isb0JBQW9CLEVBQUU7UUFDakQsNERBQTREO1FBQzVELElBQUksT0FBT0QsZUFBZSxVQUFVO1lBQ2xDLE9BQU9FLENBQUFBLEdBQUFBLGlCQUFBQSxpQkFBQUEsRUFDTHhCLE9BQ0FHLFNBQ0FtQixZQUNBdEIsTUFBTXlCLE9BQU8sQ0FBQ0MsV0FBVztRQUU3QjtRQUVBLCtEQUErRDtRQUMvRG5CLE1BQU1RLFFBQVEsR0FBRztRQUVqQixJQUFJWSxjQUFjM0IsTUFBTVcsSUFBSTtRQUM1QixJQUFJaUIsZUFBZTVCLE1BQU1PLEtBQUs7UUFFOUIsS0FBSyxNQUFNc0Isd0JBQXdCUCxXQUFZO1lBQzdDLE1BQU0sRUFBRVgsTUFBTW1CLFNBQVMsRUFBRUMsWUFBWSxFQUFFLEdBQUdGO1lBQzFDLElBQUksQ0FBQ0UsY0FBYztnQkFDakIsb0NBQW9DO2dCQUNwQ0MsUUFBUUMsR0FBRyxDQUFDO2dCQUNaLE9BQU9qQztZQUNUO1lBRUEsTUFBTWtDLFVBQVVDLENBQUFBLEdBQUFBLDZCQUFBQSwyQkFBQUEsRUFDZDtnQkFDQzthQUFHLEVBQ0pSLGFBQ0FHLFdBQ0E5QixNQUFNSyxZQUFZO1lBR3BCLElBQUk2QixZQUFZLE1BQU07Z0JBQ3BCLE9BQU9FLENBQUFBLEdBQUFBLHVCQUFBQSxxQkFBQUEsRUFBc0JwQyxPQUFPQyxRQUFRNkI7WUFDOUM7WUFFQSxJQUFJTyxDQUFBQSxHQUFBQSw2QkFBQUEsMkJBQUFBLEVBQTRCVixhQUFhTyxVQUFVO2dCQUNyRCxPQUFPVixDQUFBQSxHQUFBQSxpQkFBQUEsaUJBQWlCLEVBQ3RCeEIsT0FDQUcsU0FDQUMsTUFDQUosTUFBTXlCLE9BQU8sQ0FBQ0MsV0FBVztZQUU3QjtZQUVBLE1BQU1ZLDJCQUEyQmYsdUJBQzdCZ0IsQ0FBQUEsR0FBQUEsbUJBQUFBLGlCQUFBQSxFQUFrQmhCLHdCQUNsQmlCO1lBRUosSUFBSWpCLHNCQUFzQjtnQkFDeEJwQixRQUFRRSxZQUFZLEdBQUdpQztZQUN6QjtZQUNBLE1BQU1HLFVBQVVDLENBQUFBLEdBQUFBLGlCQUFBQSxlQUFBQSxFQUNkOUIsYUFDQWdCLGNBQ0FyQixPQUNBc0I7WUFHRixJQUFJWSxTQUFTO2dCQUNYdEMsUUFBUUksS0FBSyxHQUFHQTtnQkFDaEJxQixlQUFlckI7WUFDakI7WUFFQUosUUFBUXdDLFdBQVcsR0FBR1Q7WUFDdEIvQixRQUFRRSxZQUFZLEdBQUdEO1lBRXZCdUIsY0FBY087UUFDaEI7UUFDQSxPQUFPVSxDQUFBQSxHQUFBQSxlQUFBQSxhQUFBQSxFQUFjNUMsT0FBT0c7SUFDOUIsR0FDQSxJQUFNSDtBQUVWO0FBRUEsU0FBUzZDLHNCQUNQN0MsS0FBMkIsRUFDM0I4QyxPQUF5QjtJQUV6QixPQUFPOUM7QUFDVDtBQUVPLE1BQU1GLG9CQWhIeUIsTUFpSGhCLEdBQ2hCK0MsQ0FBcUJBLEdBQ3JCOUMiLCJzb3VyY2VzIjpbIi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvaG1yLXJlZnJlc2gtcmVkdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmZXRjaFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnLi4vZmV0Y2gtc2VydmVyLXJlc3BvbnNlJ1xuaW1wb3J0IHsgY3JlYXRlSHJlZkZyb21VcmwgfSBmcm9tICcuLi9jcmVhdGUtaHJlZi1mcm9tLXVybCdcbmltcG9ydCB7IGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZSB9IGZyb20gJy4uL2FwcGx5LXJvdXRlci1zdGF0ZS1wYXRjaC10by10cmVlJ1xuaW1wb3J0IHsgaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0IH0gZnJvbSAnLi4vaXMtbmF2aWdhdGluZy10by1uZXctcm9vdC1sYXlvdXQnXG5pbXBvcnQgdHlwZSB7XG4gIFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBSZWR1Y2VyU3RhdGUsXG4gIEhtclJlZnJlc2hBY3Rpb24sXG4gIE11dGFibGUsXG59IGZyb20gJy4uL3JvdXRlci1yZWR1Y2VyLXR5cGVzJ1xuaW1wb3J0IHsgaGFuZGxlRXh0ZXJuYWxVcmwgfSBmcm9tICcuL25hdmlnYXRlLXJlZHVjZXInXG5pbXBvcnQgeyBoYW5kbGVNdXRhYmxlIH0gZnJvbSAnLi4vaGFuZGxlLW11dGFibGUnXG5pbXBvcnQgeyBhcHBseUZsaWdodERhdGEgfSBmcm9tICcuLi9hcHBseS1mbGlnaHQtZGF0YSdcbmltcG9ydCB0eXBlIHsgQ2FjaGVOb2RlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyBjcmVhdGVFbXB0eUNhY2hlTm9kZSB9IGZyb20gJy4uLy4uL2FwcC1yb3V0ZXInXG5pbXBvcnQgeyBoYW5kbGVTZWdtZW50TWlzbWF0Y2ggfSBmcm9tICcuLi9oYW5kbGUtc2VnbWVudC1taXNtYXRjaCdcbmltcG9ydCB7IGhhc0ludGVyY2VwdGlvblJvdXRlSW5DdXJyZW50VHJlZSB9IGZyb20gJy4vaGFzLWludGVyY2VwdGlvbi1yb3V0ZS1pbi1jdXJyZW50LXRyZWUnXG5cbi8vIEEgdmVyc2lvbiBvZiByZWZyZXNoIHJlZHVjZXIgdGhhdCBrZWVwcyB0aGUgY2FjaGUgYXJvdW5kIGluc3RlYWQgb2Ygd2lwaW5nIGFsbCBvZiBpdC5cbmZ1bmN0aW9uIGhtclJlZnJlc2hSZWR1Y2VySW1wbChcbiAgc3RhdGU6IFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBhY3Rpb246IEhtclJlZnJlc2hBY3Rpb25cbik6IFJlZHVjZXJTdGF0ZSB7XG4gIGNvbnN0IHsgb3JpZ2luIH0gPSBhY3Rpb25cbiAgY29uc3QgbXV0YWJsZTogTXV0YWJsZSA9IHt9XG4gIGNvbnN0IGhyZWYgPSBzdGF0ZS5jYW5vbmljYWxVcmxcblxuICBtdXRhYmxlLnByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlID0gZmFsc2VcblxuICBjb25zdCBjYWNoZTogQ2FjaGVOb2RlID0gY3JlYXRlRW1wdHlDYWNoZU5vZGUoKVxuICAvLyBJZiB0aGUgY3VycmVudCB0cmVlIHdhcyBpbnRlcmNlcHRlZCwgdGhlIG5leHRVcmwgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSByZXF1ZXN0LlxuICAvLyBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSByZWZyZXNoIHJlcXVlc3QgZG9lc24ndCBnZXQgaW50ZXJjZXB0ZWQsIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIHRoZSBpbnRlcmNlcHRpb24gcm91dGUuXG4gIGNvbnN0IGluY2x1ZGVOZXh0VXJsID0gaGFzSW50ZXJjZXB0aW9uUm91dGVJbkN1cnJlbnRUcmVlKHN0YXRlLnRyZWUpXG5cbiAgLy8gVE9ETy1BUFA6IHZlcmlmeSB0aGF0IGBocmVmYCBpcyBub3QgYW4gZXh0ZXJuYWwgdXJsLlxuICAvLyBGZXRjaCBkYXRhIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHRyZWUuXG4gIGNvbnN0IG5hdmlnYXRlZEF0ID0gRGF0ZS5ub3coKVxuICBjYWNoZS5sYXp5RGF0YSA9IGZldGNoU2VydmVyUmVzcG9uc2UobmV3IFVSTChocmVmLCBvcmlnaW4pLCB7XG4gICAgZmxpZ2h0Um91dGVyU3RhdGU6IFtzdGF0ZS50cmVlWzBdLCBzdGF0ZS50cmVlWzFdLCBzdGF0ZS50cmVlWzJdLCAncmVmZXRjaCddLFxuICAgIG5leHRVcmw6IGluY2x1ZGVOZXh0VXJsID8gc3RhdGUubmV4dFVybCA6IG51bGwsXG4gICAgaXNIbXJSZWZyZXNoOiB0cnVlLFxuICB9KVxuXG4gIHJldHVybiBjYWNoZS5sYXp5RGF0YS50aGVuKFxuICAgICh7IGZsaWdodERhdGEsIGNhbm9uaWNhbFVybDogY2Fub25pY2FsVXJsT3ZlcnJpZGUgfSkgPT4ge1xuICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiBuYXZpZ2F0aW5nIHRvIHBhZ2UgaW4gYHBhZ2VzYCBmcm9tIGBhcHBgXG4gICAgICBpZiAodHlwZW9mIGZsaWdodERhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVFeHRlcm5hbFVybChcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBtdXRhYmxlLFxuICAgICAgICAgIGZsaWdodERhdGEsXG4gICAgICAgICAgc3RhdGUucHVzaFJlZi5wZW5kaW5nUHVzaFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIFJlbW92ZSBjYWNoZS5sYXp5RGF0YSBhcyBpdCBoYXMgYmVlbiByZXNvbHZlZCBhdCB0aGlzIHBvaW50LlxuICAgICAgY2FjaGUubGF6eURhdGEgPSBudWxsXG5cbiAgICAgIGxldCBjdXJyZW50VHJlZSA9IHN0YXRlLnRyZWVcbiAgICAgIGxldCBjdXJyZW50Q2FjaGUgPSBzdGF0ZS5jYWNoZVxuXG4gICAgICBmb3IgKGNvbnN0IG5vcm1hbGl6ZWRGbGlnaHREYXRhIG9mIGZsaWdodERhdGEpIHtcbiAgICAgICAgY29uc3QgeyB0cmVlOiB0cmVlUGF0Y2gsIGlzUm9vdFJlbmRlciB9ID0gbm9ybWFsaXplZEZsaWdodERhdGFcbiAgICAgICAgaWYgKCFpc1Jvb3RSZW5kZXIpIHtcbiAgICAgICAgICAvLyBUT0RPLUFQUDogaGFuZGxlIHRoaXMgY2FzZSBiZXR0ZXJcbiAgICAgICAgICBjb25zb2xlLmxvZygnUkVGUkVTSCBGQUlMRUQnKVxuICAgICAgICAgIHJldHVybiBzdGF0ZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3VHJlZSA9IGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZShcbiAgICAgICAgICAvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgICAgICAgWycnXSxcbiAgICAgICAgICBjdXJyZW50VHJlZSxcbiAgICAgICAgICB0cmVlUGF0Y2gsXG4gICAgICAgICAgc3RhdGUuY2Fub25pY2FsVXJsXG4gICAgICAgIClcblxuICAgICAgICBpZiAobmV3VHJlZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVTZWdtZW50TWlzbWF0Y2goc3RhdGUsIGFjdGlvbiwgdHJlZVBhdGNoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dChjdXJyZW50VHJlZSwgbmV3VHJlZSkpIHtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXh0ZXJuYWxVcmwoXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIG11dGFibGUsXG4gICAgICAgICAgICBocmVmLFxuICAgICAgICAgICAgc3RhdGUucHVzaFJlZi5wZW5kaW5nUHVzaFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhbm9uaWNhbFVybE92ZXJyaWRlSHJlZiA9IGNhbm9uaWNhbFVybE92ZXJyaWRlXG4gICAgICAgICAgPyBjcmVhdGVIcmVmRnJvbVVybChjYW5vbmljYWxVcmxPdmVycmlkZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICAgIGlmIChjYW5vbmljYWxVcmxPdmVycmlkZSkge1xuICAgICAgICAgIG11dGFibGUuY2Fub25pY2FsVXJsID0gY2Fub25pY2FsVXJsT3ZlcnJpZGVIcmVmXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXBwbGllZCA9IGFwcGx5RmxpZ2h0RGF0YShcbiAgICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgICBjdXJyZW50Q2FjaGUsXG4gICAgICAgICAgY2FjaGUsXG4gICAgICAgICAgbm9ybWFsaXplZEZsaWdodERhdGFcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChhcHBsaWVkKSB7XG4gICAgICAgICAgbXV0YWJsZS5jYWNoZSA9IGNhY2hlXG4gICAgICAgICAgY3VycmVudENhY2hlID0gY2FjaGVcbiAgICAgICAgfVxuXG4gICAgICAgIG11dGFibGUucGF0Y2hlZFRyZWUgPSBuZXdUcmVlXG4gICAgICAgIG11dGFibGUuY2Fub25pY2FsVXJsID0gaHJlZlxuXG4gICAgICAgIGN1cnJlbnRUcmVlID0gbmV3VHJlZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhhbmRsZU11dGFibGUoc3RhdGUsIG11dGFibGUpXG4gICAgfSxcbiAgICAoKSA9PiBzdGF0ZVxuICApXG59XG5cbmZ1bmN0aW9uIGhtclJlZnJlc2hSZWR1Y2VyTm9vcChcbiAgc3RhdGU6IFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBfYWN0aW9uOiBIbXJSZWZyZXNoQWN0aW9uXG4pOiBSZWR1Y2VyU3RhdGUge1xuICByZXR1cm4gc3RhdGVcbn1cblxuZXhwb3J0IGNvbnN0IGhtclJlZnJlc2hSZWR1Y2VyID1cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJ1xuICAgID8gaG1yUmVmcmVzaFJlZHVjZXJOb29wXG4gICAgOiBobXJSZWZyZXNoUmVkdWNlckltcGxcbiJdLCJuYW1lcyI6WyJobXJSZWZyZXNoUmVkdWNlciIsImhtclJlZnJlc2hSZWR1Y2VySW1wbCIsInN0YXRlIiwiYWN0aW9uIiwib3JpZ2luIiwibXV0YWJsZSIsImhyZWYiLCJjYW5vbmljYWxVcmwiLCJwcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSIsImNhY2hlIiwiY3JlYXRlRW1wdHlDYWNoZU5vZGUiLCJpbmNsdWRlTmV4dFVybCIsImhhc0ludGVyY2VwdGlvblJvdXRlSW5DdXJyZW50VHJlZSIsInRyZWUiLCJuYXZpZ2F0ZWRBdCIsIkRhdGUiLCJub3ciLCJsYXp5RGF0YSIsImZldGNoU2VydmVyUmVzcG9uc2UiLCJVUkwiLCJmbGlnaHRSb3V0ZXJTdGF0ZSIsIm5leHRVcmwiLCJpc0htclJlZnJlc2giLCJ0aGVuIiwiZmxpZ2h0RGF0YSIsImNhbm9uaWNhbFVybE92ZXJyaWRlIiwiaGFuZGxlRXh0ZXJuYWxVcmwiLCJwdXNoUmVmIiwicGVuZGluZ1B1c2giLCJjdXJyZW50VHJlZSIsImN1cnJlbnRDYWNoZSIsIm5vcm1hbGl6ZWRGbGlnaHREYXRhIiwidHJlZVBhdGNoIiwiaXNSb290UmVuZGVyIiwiY29uc29sZSIsImxvZyIsIm5ld1RyZWUiLCJhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWUiLCJoYW5kbGVTZWdtZW50TWlzbWF0Y2giLCJpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQiLCJjYW5vbmljYWxVcmxPdmVycmlkZUhyZWYiLCJjcmVhdGVIcmVmRnJvbVVybCIsInVuZGVmaW5lZCIsImFwcGxpZWQiLCJhcHBseUZsaWdodERhdGEiLCJwYXRjaGVkVHJlZSIsImhhbmRsZU11dGFibGUiLCJobXJSZWZyZXNoUmVkdWNlck5vb3AiLCJfYWN0aW9uIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/hmr-refresh-reducer.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js":
/*!******************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js ***!
  \******************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    handleExternalUrl: function() {\n        return handleExternalUrl;\n    },\n    navigateReducer: function() {\n        return navigateReducer;\n    }\n});\nconst _fetchserverresponse = __webpack_require__(/*! ../fetch-server-response */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _invalidatecachebelowflightsegmentpath = __webpack_require__(/*! ../invalidate-cache-below-flight-segmentpath */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/invalidate-cache-below-flight-segmentpath.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _shouldhardnavigate = __webpack_require__(/*! ../should-hard-navigate */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/should-hard-navigate.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _routerreducertypes = __webpack_require__(/*! ../router-reducer-types */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _applyflightdata = __webpack_require__(/*! ../apply-flight-data */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/apply-flight-data.js\");\nconst _prefetchreducer = __webpack_require__(/*! ./prefetch-reducer */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router.js\");\nconst _segment = __webpack_require__(/*! ../../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/segment.js\");\nconst _pprnavigations = __webpack_require__(/*! ../ppr-navigations */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/ppr-navigations.js\");\nconst _prefetchcacheutils = __webpack_require__(/*! ../prefetch-cache-utils */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/prefetch-cache-utils.js\");\nconst _clearcachenodedataforsegmentpath = __webpack_require__(/*! ../clear-cache-node-data-for-segment-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/clear-cache-node-data-for-segment-path.js\");\nconst _aliasedprefetchnavigations = __webpack_require__(/*! ../aliased-prefetch-navigations */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/aliased-prefetch-navigations.js\");\nconst _segmentcache = __webpack_require__(/*! ../../segment-cache */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/segment-cache.js\");\nfunction handleExternalUrl(state, mutable, url, pendingPush) {\n    mutable.mpaNavigation = true;\n    mutable.canonicalUrl = url;\n    mutable.pendingPush = pendingPush;\n    mutable.scrollableSegments = undefined;\n    return (0, _handlemutable.handleMutable)(state, mutable);\n}\nfunction generateSegmentsFromPatch(flightRouterPatch) {\n    const segments = [];\n    const [segment, parallelRoutes] = flightRouterPatch;\n    if (Object.keys(parallelRoutes).length === 0) {\n        return [\n            [\n                segment\n            ]\n        ];\n    }\n    for (const [parallelRouteKey, parallelRoute] of Object.entries(parallelRoutes)){\n        for (const childSegment of generateSegmentsFromPatch(parallelRoute)){\n            // If the segment is empty, it means we are at the root of the tree\n            if (segment === '') {\n                segments.push([\n                    parallelRouteKey,\n                    ...childSegment\n                ]);\n            } else {\n                segments.push([\n                    segment,\n                    parallelRouteKey,\n                    ...childSegment\n                ]);\n            }\n        }\n    }\n    return segments;\n}\nfunction triggerLazyFetchForLeafSegments(newCache, currentCache, flightSegmentPath, treePatch) {\n    let appliedPatch = false;\n    newCache.rsc = currentCache.rsc;\n    newCache.prefetchRsc = currentCache.prefetchRsc;\n    newCache.loading = currentCache.loading;\n    newCache.parallelRoutes = new Map(currentCache.parallelRoutes);\n    const segmentPathsToFill = generateSegmentsFromPatch(treePatch).map((segment)=>[\n            ...flightSegmentPath,\n            ...segment\n        ]);\n    for (const segmentPaths of segmentPathsToFill){\n        (0, _clearcachenodedataforsegmentpath.clearCacheNodeDataForSegmentPath)(newCache, currentCache, segmentPaths);\n        appliedPatch = true;\n    }\n    return appliedPatch;\n}\nfunction handleNavigationResult(url, state, mutable, pendingPush, result) {\n    switch(result.tag){\n        case _segmentcache.NavigationResultTag.MPA:\n            {\n                // Perform an MPA navigation.\n                const newUrl = result.data;\n                return handleExternalUrl(state, mutable, newUrl, pendingPush);\n            }\n        case _segmentcache.NavigationResultTag.NoOp:\n            {\n                // The server responded with no change to the current page. However, if\n                // the URL changed, we still need to update that.\n                const newCanonicalUrl = result.data.canonicalUrl;\n                mutable.canonicalUrl = newCanonicalUrl;\n                // Check if the only thing that changed was the hash fragment.\n                const oldUrl = new URL(state.canonicalUrl, url);\n                const onlyHashChange = // navigations are always same-origin.\n                url.pathname === oldUrl.pathname && url.search === oldUrl.search && url.hash !== oldUrl.hash;\n                if (onlyHashChange) {\n                    // The only updated part of the URL is the hash.\n                    mutable.onlyHashChange = true;\n                    mutable.shouldScroll = result.data.shouldScroll;\n                    mutable.hashFragment = url.hash;\n                    // Setting this to an empty array triggers a scroll for all new and\n                    // updated segments. See `ScrollAndFocusHandler` for more details.\n                    mutable.scrollableSegments = [];\n                }\n                return (0, _handlemutable.handleMutable)(state, mutable);\n            }\n        case _segmentcache.NavigationResultTag.Success:\n            {\n                // Received a new result.\n                mutable.cache = result.data.cacheNode;\n                mutable.patchedTree = result.data.flightRouterState;\n                mutable.canonicalUrl = result.data.canonicalUrl;\n                mutable.scrollableSegments = result.data.scrollableSegments;\n                mutable.shouldScroll = result.data.shouldScroll;\n                mutable.hashFragment = result.data.hash;\n                return (0, _handlemutable.handleMutable)(state, mutable);\n            }\n        case _segmentcache.NavigationResultTag.Async:\n            {\n                return result.data.then((asyncResult)=>handleNavigationResult(url, state, mutable, pendingPush, asyncResult), // TODO: This matches the current behavior but we need to do something\n                // better here if the network fails.\n                ()=>{\n                    return state;\n                });\n            }\n        default:\n            {\n                result;\n                return state;\n            }\n    }\n}\nfunction navigateReducer(state, action) {\n    const { url, isExternalUrl, navigateType, shouldScroll, allowAliasing } = action;\n    const mutable = {};\n    const { hash } = url;\n    const href = (0, _createhreffromurl.createHrefFromUrl)(url);\n    const pendingPush = navigateType === 'push';\n    // we want to prune the prefetch cache on every navigation to avoid it growing too large\n    (0, _prefetchcacheutils.prunePrefetchCache)(state.prefetchCache);\n    mutable.preserveCustomHistoryState = false;\n    mutable.pendingPush = pendingPush;\n    if (isExternalUrl) {\n        return handleExternalUrl(state, mutable, url.toString(), pendingPush);\n    }\n    // Handles case where `<meta http-equiv=\"refresh\">` tag is present,\n    // which will trigger an MPA navigation.\n    if (document.getElementById('__next-page-redirect')) {\n        return handleExternalUrl(state, mutable, href, pendingPush);\n    }\n    if (false) {}\n    const prefetchValues = (0, _prefetchcacheutils.getOrCreatePrefetchCacheEntry)({\n        url,\n        nextUrl: state.nextUrl,\n        tree: state.tree,\n        prefetchCache: state.prefetchCache,\n        allowAliasing\n    });\n    const { treeAtTimeOfPrefetch, data } = prefetchValues;\n    _prefetchreducer.prefetchQueue.bump(data);\n    return data.then((param)=>{\n        let { flightData, canonicalUrl: canonicalUrlOverride, postponed } = param;\n        const navigatedAt = Date.now();\n        let isFirstRead = false;\n        // we only want to mark this once\n        if (!prefetchValues.lastUsedTime) {\n            // important: we should only mark the cache node as dirty after we unsuspend from the call above\n            prefetchValues.lastUsedTime = navigatedAt;\n            isFirstRead = true;\n        }\n        if (prefetchValues.aliased) {\n            // When alias is enabled, search param may not be included in the canonicalUrl.\n            // But we want to set url to canonicalUrl so that we use redirected path for fetching dynamic data.\n            const urlWithCanonicalPathname = new URL(url.href);\n            if (canonicalUrlOverride) {\n                urlWithCanonicalPathname.pathname = canonicalUrlOverride.pathname;\n            }\n            const result = (0, _aliasedprefetchnavigations.handleAliasedPrefetchEntry)(navigatedAt, state, flightData, urlWithCanonicalPathname, mutable);\n            // We didn't return new router state because we didn't apply the aliased entry for some reason.\n            // We'll re-invoke the navigation handler but ensure that we don't attempt to use the aliased entry. This\n            // will create an on-demand prefetch entry.\n            if (result === false) {\n                return navigateReducer(state, {\n                    ...action,\n                    allowAliasing: false\n                });\n            }\n            return result;\n        }\n        // Handle case when navigating to page in `pages` from `app`\n        if (typeof flightData === 'string') {\n            return handleExternalUrl(state, mutable, flightData, pendingPush);\n        }\n        const updatedCanonicalUrl = canonicalUrlOverride ? (0, _createhreffromurl.createHrefFromUrl)(canonicalUrlOverride) : href;\n        const onlyHashChange = !!hash && state.canonicalUrl.split('#', 1)[0] === updatedCanonicalUrl.split('#', 1)[0];\n        // If only the hash has changed, the server hasn't sent us any new data. We can just update\n        // the mutable properties responsible for URL and scroll handling and return early.\n        if (onlyHashChange) {\n            mutable.onlyHashChange = true;\n            mutable.canonicalUrl = updatedCanonicalUrl;\n            mutable.shouldScroll = shouldScroll;\n            mutable.hashFragment = hash;\n            mutable.scrollableSegments = [];\n            return (0, _handlemutable.handleMutable)(state, mutable);\n        }\n        let currentTree = state.tree;\n        let currentCache = state.cache;\n        let scrollableSegments = [];\n        for (const normalizedFlightData of flightData){\n            const { pathToSegment: flightSegmentPath, seedData, head, isHeadPartial, isRootRender } = normalizedFlightData;\n            let treePatch = normalizedFlightData.tree;\n            // TODO-APP: remove ''\n            const flightSegmentPathWithLeadingEmpty = [\n                '',\n                ...flightSegmentPath\n            ];\n            // Create new tree based on the flightSegmentPath and router state patch\n            let newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTree)(flightSegmentPathWithLeadingEmpty, currentTree, treePatch, href);\n            // If the tree patch can't be applied to the current tree then we use the tree at time of prefetch\n            // TODO-APP: This should instead fill in the missing pieces in `currentTree` with the data from `treeAtTimeOfPrefetch`, then apply the patch.\n            if (newTree === null) {\n                newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTree)(flightSegmentPathWithLeadingEmpty, treeAtTimeOfPrefetch, treePatch, href);\n            }\n            if (newTree !== null) {\n                if (// will send back a static response that's rendered from\n                // the root. If for some reason it doesn't, we fall back to the\n                // non-PPR implementation.\n                // TODO: We should get rid of the else branch and do all navigations\n                // via startPPRNavigation. The current structure is just\n                // an incremental step.\n                seedData && isRootRender && postponed) {\n                    const task = (0, _pprnavigations.startPPRNavigation)(navigatedAt, currentCache, currentTree, treePatch, seedData, head, isHeadPartial, false, scrollableSegments);\n                    if (task !== null) {\n                        if (task.route === null) {\n                            // Detected a change to the root layout. Perform an full-\n                            // page navigation.\n                            return handleExternalUrl(state, mutable, href, pendingPush);\n                        }\n                        // Use the tree computed by startPPRNavigation instead\n                        // of the one computed by applyRouterStatePatchToTree.\n                        // TODO: We should remove applyRouterStatePatchToTree\n                        // from the PPR path entirely.\n                        const patchedRouterState = task.route;\n                        newTree = patchedRouterState;\n                        const newCache = task.node;\n                        if (newCache !== null) {\n                            // We've created a new Cache Node tree that contains a prefetched\n                            // version of the next page. This can be rendered instantly.\n                            mutable.cache = newCache;\n                        }\n                        const dynamicRequestTree = task.dynamicRequestTree;\n                        if (dynamicRequestTree !== null) {\n                            // The prefetched tree has dynamic holes in it. We initiate a\n                            // dynamic request to fill them in.\n                            //\n                            // Do not block on the result. We'll immediately render the Cache\n                            // Node tree and suspend on the dynamic parts. When the request\n                            // comes in, we'll fill in missing data and ping React to\n                            // re-render. Unlike the lazy fetching model in the non-PPR\n                            // implementation, this is modeled as a single React update +\n                            // streaming, rather than multiple top-level updates. (However,\n                            // even in the new model, we'll still need to sometimes update the\n                            // root multiple times per navigation, like if the server sends us\n                            // a different response than we expected. For now, we revert back\n                            // to the lazy fetching mechanism in that case.)\n                            const dynamicRequest = (0, _fetchserverresponse.fetchServerResponse)(new URL(updatedCanonicalUrl, url.origin), {\n                                flightRouterState: dynamicRequestTree,\n                                nextUrl: state.nextUrl\n                            });\n                            (0, _pprnavigations.listenForDynamicRequest)(task, dynamicRequest);\n                        // We store the dynamic request on the `lazyData` property of the CacheNode\n                        // because we're not going to await the dynamic request here. Since we're not blocking\n                        // on the dynamic request, `layout-router` will\n                        // task.node.lazyData = dynamicRequest\n                        } else {\n                        // The prefetched tree does not contain dynamic holes — it's\n                        // fully static. We can skip the dynamic request.\n                        }\n                    } else {\n                        // Nothing changed, so reuse the old cache.\n                        // TODO: What if the head changed but not any of the segment data?\n                        // Is that possible? If so, we should clone the whole tree and\n                        // update the head.\n                        newTree = treePatch;\n                    }\n                } else {\n                    // The static response does not include any dynamic holes, so\n                    // there's no need to do a second request.\n                    // TODO: As an incremental step this just reverts back to the\n                    // non-PPR implementation. We can simplify this branch further,\n                    // given that PPR prefetches are always static and return the whole\n                    // tree. Or in the meantime we could factor it out into a\n                    // separate function.\n                    if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n                        return handleExternalUrl(state, mutable, href, pendingPush);\n                    }\n                    const cache = (0, _approuter.createEmptyCacheNode)();\n                    let applied = false;\n                    if (prefetchValues.status === _routerreducertypes.PrefetchCacheEntryStatus.stale && !isFirstRead) {\n                        // When we have a stale prefetch entry, we only want to re-use the loading state of the route we're navigating to, to support instant loading navigations\n                        // this will trigger a lazy fetch for the actual page data by nulling the `rsc` and `prefetchRsc` values for page data,\n                        // while copying over the `loading` for the segment that contains the page data.\n                        // We only do this on subsequent reads, as otherwise there'd be no loading data to re-use.\n                        // We skip this branch if only the hash fragment has changed, as we don't want to trigger a lazy fetch in that case\n                        applied = triggerLazyFetchForLeafSegments(cache, currentCache, flightSegmentPath, treePatch);\n                        // since we re-used the stale cache's loading state & refreshed the data,\n                        // update the `lastUsedTime` so that it can continue to be re-used for the next 30s\n                        prefetchValues.lastUsedTime = navigatedAt;\n                    } else {\n                        applied = (0, _applyflightdata.applyFlightData)(navigatedAt, currentCache, cache, normalizedFlightData, prefetchValues);\n                    }\n                    const hardNavigate = (0, _shouldhardnavigate.shouldHardNavigate)(flightSegmentPathWithLeadingEmpty, currentTree);\n                    if (hardNavigate) {\n                        // Copy rsc for the root node of the cache.\n                        cache.rsc = currentCache.rsc;\n                        cache.prefetchRsc = currentCache.prefetchRsc;\n                        (0, _invalidatecachebelowflightsegmentpath.invalidateCacheBelowFlightSegmentPath)(cache, currentCache, flightSegmentPath);\n                        // Ensure the existing cache value is used when the cache was not invalidated.\n                        mutable.cache = cache;\n                    } else if (applied) {\n                        mutable.cache = cache;\n                        // If we applied the cache, we update the \"current cache\" value so any other\n                        // segments in the FlightDataPath will be able to reference the updated cache.\n                        currentCache = cache;\n                    }\n                    for (const subSegment of generateSegmentsFromPatch(treePatch)){\n                        const scrollableSegmentPath = [\n                            ...flightSegmentPath,\n                            ...subSegment\n                        ];\n                        // Filter out the __DEFAULT__ paths as they shouldn't be scrolled to in this case.\n                        if (scrollableSegmentPath[scrollableSegmentPath.length - 1] !== _segment.DEFAULT_SEGMENT_KEY) {\n                            scrollableSegments.push(scrollableSegmentPath);\n                        }\n                    }\n                }\n                currentTree = newTree;\n            }\n        }\n        mutable.patchedTree = currentTree;\n        mutable.canonicalUrl = updatedCanonicalUrl;\n        mutable.scrollableSegments = scrollableSegments;\n        mutable.hashFragment = hash;\n        mutable.shouldScroll = shouldScroll;\n        return (0, _handlemutable.handleMutable)(state, mutable);\n    }, ()=>state);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=navigate-reducer.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9uYXZpZ2F0ZS1yZWR1Y2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQW9DZ0JBLGlCQUFpQjtlQUFqQkE7O0lBc0lBQyxlQUFlO2VBQWZBOzs7aURBcktvQjsrQ0FDRjttRUFDb0I7eURBQ1Y7Z0RBQ1Q7eURBQ1M7Z0RBT3JDOzJDQUN1Qjs2Q0FDRTs2Q0FDRjt1Q0FDTztxQ0FDRDs0Q0FDd0I7Z0RBSXJEOzhEQUMwQzt3REFDTjswQ0FLcEM7QUFFQSxTQUFTRCxrQkFDZEUsS0FBMkIsRUFDM0JDLE9BQWdCLEVBQ2hCQyxHQUFXLEVBQ1hDLFdBQW9CO0lBRXBCRixRQUFRRyxhQUFhLEdBQUc7SUFDeEJILFFBQVFJLFlBQVksR0FBR0g7SUFDdkJELFFBQVFFLFdBQVcsR0FBR0E7SUFDdEJGLFFBQVFLLGtCQUFrQixHQUFHQztJQUU3QixPQUFPQyxDQUFBQSxHQUFBQSxlQUFBQSxhQUFBQSxFQUFjUixPQUFPQztBQUM5QjtBQUVBLFNBQVNRLDBCQUNQQyxpQkFBb0M7SUFFcEMsTUFBTUMsV0FBZ0MsRUFBRTtJQUN4QyxNQUFNLENBQUNDLFNBQVNDLGVBQWUsR0FBR0g7SUFFbEMsSUFBSUksT0FBT0MsSUFBSSxDQUFDRixnQkFBZ0JHLE1BQU0sS0FBSyxHQUFHO1FBQzVDLE9BQU87WUFBQztnQkFBQ0o7YUFBUTtTQUFDO0lBQ3BCO0lBRUEsS0FBSyxNQUFNLENBQUNLLGtCQUFrQkMsY0FBYyxJQUFJSixPQUFPSyxPQUFPLENBQzVETixnQkFDQztRQUNELEtBQUssTUFBTU8sZ0JBQWdCWCwwQkFBMEJTLGVBQWdCO1lBQ25FLG1FQUFtRTtZQUNuRSxJQUFJTixZQUFZLElBQUk7Z0JBQ2xCRCxTQUFTVSxJQUFJLENBQUM7b0JBQUNKO3VCQUFxQkc7aUJBQWE7WUFDbkQsT0FBTztnQkFDTFQsU0FBU1UsSUFBSSxDQUFDO29CQUFDVDtvQkFBU0s7dUJBQXFCRztpQkFBYTtZQUM1RDtRQUNGO0lBQ0Y7SUFFQSxPQUFPVDtBQUNUO0FBRUEsU0FBU1csZ0NBQ1BDLFFBQW1CLEVBQ25CQyxZQUF1QixFQUN2QkMsaUJBQW9DLEVBQ3BDQyxTQUE0QjtJQUU1QixJQUFJQyxlQUFlO0lBRW5CSixTQUFTSyxHQUFHLEdBQUdKLGFBQWFJLEdBQUc7SUFDL0JMLFNBQVNNLFdBQVcsR0FBR0wsYUFBYUssV0FBVztJQUMvQ04sU0FBU08sT0FBTyxHQUFHTixhQUFhTSxPQUFPO0lBQ3ZDUCxTQUFTVixjQUFjLEdBQUcsSUFBSWtCLElBQUlQLGFBQWFYLGNBQWM7SUFFN0QsTUFBTW1CLHFCQUFxQnZCLDBCQUEwQmlCLFdBQVdPLEdBQUcsQ0FDakUsQ0FBQ3JCLFVBQVk7ZUFBSWE7ZUFBc0JiO1NBQVE7SUFHakQsS0FBSyxNQUFNc0IsZ0JBQWdCRixtQkFBb0I7UUFDN0NHLENBQUFBLEdBQUFBLGtDQUFBQSxnQ0FBQUEsRUFBaUNaLFVBQVVDLGNBQWNVO1FBRXpEUCxlQUFlO0lBQ2pCO0lBRUEsT0FBT0E7QUFDVDtBQUVBLFNBQVNTLHVCQUNQbEMsR0FBUSxFQUNSRixLQUEyQixFQUMzQkMsT0FBZ0IsRUFDaEJFLFdBQW9CLEVBQ3BCa0MsTUFBd0I7SUFFeEIsT0FBUUEsT0FBT0MsR0FBRztRQUNoQixLQUFLQyxjQUFBQSxtQkFBbUIsQ0FBQ0MsR0FBRztZQUFFO2dCQUM1Qiw2QkFBNkI7Z0JBQzdCLE1BQU1DLFNBQVNKLE9BQU9LLElBQUk7Z0JBQzFCLE9BQU81QyxrQkFBa0JFLE9BQU9DLFNBQVN3QyxRQUFRdEM7WUFDbkQ7UUFDQSxLQUFLb0MsY0FBQUEsbUJBQW1CLENBQUNJLElBQUk7WUFBRTtnQkFDN0IsdUVBQXVFO2dCQUN2RSxpREFBaUQ7Z0JBQ2pELE1BQU1DLGtCQUFrQlAsT0FBT0ssSUFBSSxDQUFDckMsWUFBWTtnQkFDaERKLFFBQVFJLFlBQVksR0FBR3VDO2dCQUV2Qiw4REFBOEQ7Z0JBQzlELE1BQU1DLFNBQVMsSUFBSUMsSUFBSTlDLE1BQU1LLFlBQVksRUFBRUg7Z0JBQzNDLE1BQU02QyxpQkFDSixzQ0FDc0M7Z0JBQ3RDN0MsSUFBSThDLFFBQVEsS0FBS0gsT0FBT0csUUFBUSxJQUNoQzlDLElBQUkrQyxNQUFNLEtBQUtKLE9BQU9JLE1BQU0sSUFDNUIvQyxJQUFJZ0QsSUFBSSxLQUFLTCxPQUFPSyxJQUFJO2dCQUMxQixJQUFJSCxnQkFBZ0I7b0JBQ2xCLGdEQUFnRDtvQkFDaEQ5QyxRQUFROEMsY0FBYyxHQUFHO29CQUN6QjlDLFFBQVFrRCxZQUFZLEdBQUdkLE9BQU9LLElBQUksQ0FBQ1MsWUFBWTtvQkFDL0NsRCxRQUFRbUQsWUFBWSxHQUFHbEQsSUFBSWdELElBQUk7b0JBQy9CLG1FQUFtRTtvQkFDbkUsa0VBQWtFO29CQUNsRWpELFFBQVFLLGtCQUFrQixHQUFHLEVBQUU7Z0JBQ2pDO2dCQUVBLE9BQU9FLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWNSLE9BQU9DO1lBQzlCO1FBQ0EsS0FBS3NDLGNBQUFBLG1CQUFtQixDQUFDYyxPQUFPO1lBQUU7Z0JBQ2hDLHlCQUF5QjtnQkFDekJwRCxRQUFRcUQsS0FBSyxHQUFHakIsT0FBT0ssSUFBSSxDQUFDYSxTQUFTO2dCQUNyQ3RELFFBQVF1RCxXQUFXLEdBQUduQixPQUFPSyxJQUFJLENBQUNlLGlCQUFpQjtnQkFDbkR4RCxRQUFRSSxZQUFZLEdBQUdnQyxPQUFPSyxJQUFJLENBQUNyQyxZQUFZO2dCQUMvQ0osUUFBUUssa0JBQWtCLEdBQUcrQixPQUFPSyxJQUFJLENBQUNwQyxrQkFBa0I7Z0JBQzNETCxRQUFRa0QsWUFBWSxHQUFHZCxPQUFPSyxJQUFJLENBQUNTLFlBQVk7Z0JBQy9DbEQsUUFBUW1ELFlBQVksR0FBR2YsT0FBT0ssSUFBSSxDQUFDUSxJQUFJO2dCQUN2QyxPQUFPMUMsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBYSxFQUFDUixPQUFPQztZQUM5QjtRQUNBLEtBQUtzQyxjQUFBQSxtQkFBbUIsQ0FBQ21CLEtBQUs7WUFBRTtnQkFDOUIsT0FBT3JCLE9BQU9LLElBQUksQ0FBQ2lCLElBQUksQ0FDckIsQ0FBQ0MsY0FDQ3hCLHVCQUF1QmxDLEtBQUtGLE9BQU9DLFNBQVNFLGFBQWF5RCxjQUMzRCxzREFBc0QsZ0JBQ2dCO2dCQUN0RSxvQ0FBb0M7Z0JBQ3BDO29CQUNFLE9BQU81RDtnQkFDVDtZQUVKO1FBQ0E7WUFBUztnQkFDUHFDO2dCQUNBLE9BQU9yQztZQUNUO0lBQ0Y7QUFDRjtBQUVPLFNBQVNELGdCQUNkQyxLQUEyQixFQUMzQjZELE1BQXNCO0lBRXRCLE1BQU0sRUFBRTNELEdBQUcsRUFBRTRELGFBQWEsRUFBRUMsWUFBWSxFQUFFWixZQUFZLEVBQUVhLGFBQWEsRUFBRSxHQUNyRUg7SUFDRixNQUFNNUQsVUFBbUIsQ0FBQztJQUMxQixNQUFNLEVBQUVpRCxJQUFJLEVBQUUsR0FBR2hEO0lBQ2pCLE1BQU0rRCxPQUFPQyxDQUFBQSxHQUFBQSxtQkFBQUEsaUJBQUFBLEVBQWtCaEU7SUFDL0IsTUFBTUMsY0FBYzRELGlCQUFpQjtJQUNyQyx3RkFBd0Y7SUFDeEZJLENBQUFBLEdBQUFBLG9CQUFBQSxrQkFBa0IsRUFBQ25FLE1BQU1vRSxhQUFhO0lBRXRDbkUsUUFBUW9FLDBCQUEwQixHQUFHO0lBQ3JDcEUsUUFBUUUsV0FBVyxHQUFHQTtJQUV0QixJQUFJMkQsZUFBZTtRQUNqQixPQUFPaEUsa0JBQWtCRSxPQUFPQyxTQUFTQyxJQUFJb0UsUUFBUSxJQUFJbkU7SUFDM0Q7SUFFQSxtRUFBbUU7SUFDbkUsd0NBQXdDO0lBQ3hDLElBQUlvRSxTQUFTQyxjQUFjLENBQUMseUJBQXlCO1FBQ25ELE9BQU8xRSxrQkFBa0JFLE9BQU9DLFNBQVNnRSxNQUFNOUQ7SUFDakQ7SUFFQSxJQUFJc0UsS0FBdUMsRUFBRSxFQWlCNUM7SUFFRCxNQUFNTSxpQkFBaUJDLENBQUFBLEdBQUFBLG9CQUFBQSw2QkFBQUEsRUFBOEI7UUFDbkQ5RTtRQUNBNEUsU0FBUzlFLE1BQU04RSxPQUFPO1FBQ3RCRCxNQUFNN0UsTUFBTTZFLElBQUk7UUFDaEJULGVBQWVwRSxNQUFNb0UsYUFBYTtRQUNsQ0o7SUFDRjtJQUNBLE1BQU0sRUFBRWlCLG9CQUFvQixFQUFFdkMsSUFBSSxFQUFFLEdBQUdxQztJQUV2Q0csaUJBQUFBLGFBQWEsQ0FBQ0MsSUFBSSxDQUFDekM7SUFFbkIsT0FBT0EsS0FBS2lCLElBQUksQ0FDZDtZQUFDLEVBQUV5QixVQUFVLEVBQUUvRSxjQUFjZ0Ysb0JBQW9CLEVBQUVDLFNBQVMsRUFBRTtRQUM1RCxNQUFNQyxjQUFjQyxLQUFLQyxHQUFHO1FBRTVCLElBQUlDLGNBQWM7UUFDbEIsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQ1gsZUFBZVksWUFBWSxFQUFFO1lBQ2hDLGdHQUFnRztZQUNoR1osZUFBZVksWUFBWSxHQUFHSjtZQUM5QkcsY0FBYztRQUNoQjtRQUVBLElBQUlYLGVBQWVhLE9BQU8sRUFBRTtZQUMxQiwrRUFBK0U7WUFDL0UsbUdBQW1HO1lBQ25HLE1BQU1DLDJCQUEyQixJQUFJL0MsSUFBSTVDLElBQUkrRCxJQUFJO1lBQ2pELElBQUlvQixzQkFBc0I7Z0JBQ3hCUSx5QkFBeUI3QyxRQUFRLEdBQUdxQyxxQkFBcUJyQyxRQUFRO1lBQ25FO1lBRUEsTUFBTVgsU0FBU3lELENBQUFBLEdBQUFBLDRCQUFBQSwwQkFBQUEsRUFDYlAsYUFDQXZGLE9BQ0FvRixZQUNBUywwQkFDQTVGO1lBR0YsK0ZBQStGO1lBQy9GLHlHQUF5RztZQUN6RywyQ0FBMkM7WUFDM0MsSUFBSW9DLFdBQVcsT0FBTztnQkFDcEIsT0FBT3RDLGdCQUFnQkMsT0FBTztvQkFBRSxHQUFHNkQsTUFBTTtvQkFBRUcsZUFBZTtnQkFBTTtZQUNsRTtZQUVBLE9BQU8zQjtRQUNUO1FBRUEsNERBQTREO1FBQzVELElBQUksT0FBTytDLGVBQWUsVUFBVTtZQUNsQyxPQUFPdEYsa0JBQWtCRSxPQUFPQyxTQUFTbUYsWUFBWWpGO1FBQ3ZEO1FBRUEsTUFBTTRGLHNCQUFzQlYsdUJBQ3hCbkIsQ0FBQUEsR0FBQUEsbUJBQUFBLGlCQUFBQSxFQUFrQm1CLHdCQUNsQnBCO1FBRUosTUFBTWxCLGlCQUNKLENBQUMsQ0FBQ0csUUFDRmxELE1BQU1LLFlBQVksQ0FBQzJGLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQ2pDRCxvQkFBb0JDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFO1FBRXhDLDJGQUEyRjtRQUMzRixtRkFBbUY7UUFDbkYsSUFBSWpELGdCQUFnQjtZQUNsQjlDLFFBQVE4QyxjQUFjLEdBQUc7WUFDekI5QyxRQUFRSSxZQUFZLEdBQUcwRjtZQUN2QjlGLFFBQVFrRCxZQUFZLEdBQUdBO1lBQ3ZCbEQsUUFBUW1ELFlBQVksR0FBR0Y7WUFDdkJqRCxRQUFRSyxrQkFBa0IsR0FBRyxFQUFFO1lBQy9CLE9BQU9FLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWNSLE9BQU9DO1FBQzlCO1FBRUEsSUFBSWdHLGNBQWNqRyxNQUFNNkUsSUFBSTtRQUM1QixJQUFJckQsZUFBZXhCLE1BQU1zRCxLQUFLO1FBQzlCLElBQUloRCxxQkFBMEMsRUFBRTtRQUNoRCxLQUFLLE1BQU00Rix3QkFBd0JkLFdBQVk7WUFDN0MsTUFBTSxFQUNKZSxlQUFlMUUsaUJBQWlCLEVBQ2hDMkUsUUFBUSxFQUNSQyxJQUFJLEVBQ0pDLGFBQWEsRUFDYkMsWUFBWSxFQUNiLEdBQUdMO1lBQ0osSUFBSXhFLFlBQVl3RSxxQkFBcUJyQixJQUFJO1lBRXpDLHNCQUFzQjtZQUN0QixNQUFNMkIsb0NBQW9DO2dCQUFDO21CQUFPL0U7YUFBa0I7WUFFcEUsd0VBQXdFO1lBQ3hFLElBQUlnRixVQUFVQyxDQUFBQSxHQUFBQSw2QkFBQUEsMkJBQUFBLEVBQ1osc0JBQXNCLGFBRXRCVCxhQUNBdkUsV0FDQXVDO1lBR0Ysa0dBQWtHO1lBQ2xHLDZJQUE2STtZQUM3SSxJQUFJd0MsWUFBWSxNQUFNO2dCQUNwQkEsVUFBVUMsQ0FBQUEsR0FBQUEsNkJBQUFBLDJCQUFBQSxFQUNSLHNCQUFzQixhQUV0QnpCLHNCQUNBdkQsV0FDQXVDO1lBRUo7WUFFQSxJQUFJd0MsWUFBWSxNQUFNO2dCQUNwQixJQUNFLHdEQUN3RDtnQkFDeEQsK0RBQStEO2dCQUMvRCwwQkFBMEI7Z0JBQzFCLG9FQUFvRTtnQkFDcEUsd0RBQXdEO2dCQUN4RCx1QkFBdUI7Z0JBQ3ZCTCxZQUNBRyxnQkFDQWpCLFdBQ0E7b0JBQ0EsTUFBTXFCLE9BQU9DLENBQUFBLEdBQUFBLGdCQUFBQSxrQkFBQUEsRUFDWHJCLGFBQ0EvRCxjQUNBeUUsYUFDQXZFLFdBQ0EwRSxVQUNBQyxNQUNBQyxlQUNBLE9BQ0FoRztvQkFHRixJQUFJcUcsU0FBUyxNQUFNO3dCQUNqQixJQUFJQSxLQUFLRSxLQUFLLEtBQUssTUFBTTs0QkFDdkIseURBQXlEOzRCQUN6RCxtQkFBbUI7NEJBQ25CLE9BQU8vRyxrQkFBa0JFLE9BQU9DLFNBQVNnRSxNQUFNOUQ7d0JBQ2pEO3dCQUNBLHNEQUFzRDt3QkFDdEQsc0RBQXNEO3dCQUN0RCxxREFBcUQ7d0JBQ3JELDhCQUE4Qjt3QkFDOUIsTUFBTTJHLHFCQUF3Q0gsS0FBS0UsS0FBSzt3QkFDeERKLFVBQVVLO3dCQUVWLE1BQU12RixXQUFXb0YsS0FBS0ksSUFBSTt3QkFDMUIsSUFBSXhGLGFBQWEsTUFBTTs0QkFDckIsaUVBQWlFOzRCQUNqRSw0REFBNEQ7NEJBQzVEdEIsUUFBUXFELEtBQUssR0FBRy9CO3dCQUNsQjt3QkFDQSxNQUFNeUYscUJBQXFCTCxLQUFLSyxrQkFBa0I7d0JBQ2xELElBQUlBLHVCQUF1QixNQUFNOzRCQUMvQiw2REFBNkQ7NEJBQzdELG1DQUFtQzs0QkFDbkMsRUFBRTs0QkFDRixpRUFBaUU7NEJBQ2pFLCtEQUErRDs0QkFDL0QseURBQXlEOzRCQUN6RCwyREFBMkQ7NEJBQzNELDZEQUE2RDs0QkFDN0QsK0RBQStEOzRCQUMvRCxrRUFBa0U7NEJBQ2xFLGtFQUFrRTs0QkFDbEUsaUVBQWlFOzRCQUNqRSxnREFBZ0Q7NEJBQ2hELE1BQU1DLGlCQUFpQkMsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFtQixFQUN4QyxJQUFJcEUsSUFBSWlELHFCQUFxQjdGLElBQUlpSCxNQUFNLEdBQ3ZDO2dDQUNFMUQsbUJBQW1CdUQ7Z0NBQ25CbEMsU0FBUzlFLE1BQU04RSxPQUFPOzRCQUN4Qjs0QkFHRnNDLENBQUFBLEdBQUFBLGdCQUFBQSx1QkFBQUEsRUFBd0JULE1BQU1NO3dCQUM5QiwyRUFBMkU7d0JBQzNFLHNGQUFzRjt3QkFDdEYsK0NBQStDO3dCQUMvQyxzQ0FBc0M7d0JBQ3hDLE9BQU87d0JBQ0wsNERBQTREO3dCQUM1RCxpREFBaUQ7d0JBQ25EO29CQUNGLE9BQU87d0JBQ0wsMkNBQTJDO3dCQUMzQyxrRUFBa0U7d0JBQ2xFLDhEQUE4RDt3QkFDOUQsbUJBQW1CO3dCQUNuQlIsVUFBVS9FO29CQUNaO2dCQUNGLE9BQU87b0JBQ0wsNkRBQTZEO29CQUM3RCwwQ0FBMEM7b0JBQzFDLDZEQUE2RDtvQkFDN0QsK0RBQStEO29CQUMvRCxtRUFBbUU7b0JBQ25FLHlEQUF5RDtvQkFDekQscUJBQXFCO29CQUVyQixJQUFJMkYsQ0FBQUEsR0FBQUEsNkJBQUFBLDJCQUEyQixFQUFDcEIsYUFBYVEsVUFBVTt3QkFDckQsT0FBTzNHLGtCQUFrQkUsT0FBT0MsU0FBU2dFLE1BQU05RDtvQkFDakQ7b0JBRUEsTUFBTW1ELFFBQW1CZ0UsQ0FBQUEsR0FBQUEsV0FBQUEsb0JBQUFBO29CQUN6QixJQUFJQyxVQUFVO29CQUVkLElBQ0V4QyxlQUFleUMsTUFBTSxLQUFLQyxvQkFBQUEsd0JBQXdCLENBQUNDLEtBQUssSUFDeEQsQ0FBQ2hDLGFBQ0Q7d0JBQ0EseUpBQXlKO3dCQUN6Six1SEFBdUg7d0JBQ3ZILGdGQUFnRjt3QkFDaEYsMEZBQTBGO3dCQUUxRixtSEFBbUg7d0JBQ25INkIsVUFBVWpHLGdDQUNSZ0MsT0FDQTlCLGNBQ0FDLG1CQUNBQzt3QkFFRix5RUFBeUU7d0JBQ3pFLG1GQUFtRjt3QkFDbkZxRCxlQUFlWSxZQUFZLEdBQUdKO29CQUNoQyxPQUFPO3dCQUNMZ0MsVUFBVUksQ0FBQUEsR0FBQUEsaUJBQUFBLGVBQUFBLEVBQ1JwQyxhQUNBL0QsY0FDQThCLE9BQ0E0QyxzQkFDQW5CO29CQUVKO29CQUVBLE1BQU02QyxlQUFlQyxDQUFBQSxHQUFBQSxvQkFBQUEsa0JBQUFBLEVBQ25CLHNCQUFzQixhQUV0QjVCO29CQUdGLElBQUkyQixjQUFjO3dCQUNoQiwyQ0FBMkM7d0JBQzNDdEUsTUFBTTFCLEdBQUcsR0FBR0osYUFBYUksR0FBRzt3QkFDNUIwQixNQUFNekIsV0FBVyxHQUFHTCxhQUFhSyxXQUFXO3dCQUU1Q2lHLENBQUFBLEdBQUFBLHVDQUFBQSxxQ0FBQUEsRUFDRXhFLE9BQ0E5QixjQUNBQzt3QkFFRiw4RUFBOEU7d0JBQzlFeEIsUUFBUXFELEtBQUssR0FBR0E7b0JBQ2xCLE9BQU8sSUFBSWlFLFNBQVM7d0JBQ2xCdEgsUUFBUXFELEtBQUssR0FBR0E7d0JBQ2hCLDRFQUE0RTt3QkFDNUUsOEVBQThFO3dCQUM5RTlCLGVBQWU4QjtvQkFDakI7b0JBRUEsS0FBSyxNQUFNeUUsY0FBY3RILDBCQUEwQmlCLFdBQVk7d0JBQzdELE1BQU1zRyx3QkFBd0I7K0JBQ3pCdkc7K0JBQ0FzRzt5QkFDSjt3QkFDRCxrRkFBa0Y7d0JBQ2xGLElBQ0VDLHFCQUFxQixDQUFDQSxzQkFBc0JoSCxNQUFNLEdBQUcsRUFBRSxLQUN2RGlILFNBQUFBLG1CQUFtQixFQUNuQjs0QkFDQTNILG1CQUFtQmUsSUFBSSxDQUFDMkc7d0JBQzFCO29CQUNGO2dCQUNGO2dCQUVBL0IsY0FBY1E7WUFDaEI7UUFDRjtRQUVBeEcsUUFBUXVELFdBQVcsR0FBR3lDO1FBQ3RCaEcsUUFBUUksWUFBWSxHQUFHMEY7UUFDdkI5RixRQUFRSyxrQkFBa0IsR0FBR0E7UUFDN0JMLFFBQVFtRCxZQUFZLEdBQUdGO1FBQ3ZCakQsUUFBUWtELFlBQVksR0FBR0E7UUFFdkIsT0FBTzNDLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWNSLE9BQU9DO0lBQzlCLEdBQ0EsSUFBTUQ7QUFFViIsInNvdXJjZXMiOlsiL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9uYXZpZ2F0ZS1yZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2FjaGVOb2RlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgdHlwZSB7XG4gIEZsaWdodFJvdXRlclN0YXRlLFxuICBGbGlnaHRTZWdtZW50UGF0aCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5pbXBvcnQgeyBmZXRjaFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnLi4vZmV0Y2gtc2VydmVyLXJlc3BvbnNlJ1xuaW1wb3J0IHsgY3JlYXRlSHJlZkZyb21VcmwgfSBmcm9tICcuLi9jcmVhdGUtaHJlZi1mcm9tLXVybCdcbmltcG9ydCB7IGludmFsaWRhdGVDYWNoZUJlbG93RmxpZ2h0U2VnbWVudFBhdGggfSBmcm9tICcuLi9pbnZhbGlkYXRlLWNhY2hlLWJlbG93LWZsaWdodC1zZWdtZW50cGF0aCdcbmltcG9ydCB7IGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZSB9IGZyb20gJy4uL2FwcGx5LXJvdXRlci1zdGF0ZS1wYXRjaC10by10cmVlJ1xuaW1wb3J0IHsgc2hvdWxkSGFyZE5hdmlnYXRlIH0gZnJvbSAnLi4vc2hvdWxkLWhhcmQtbmF2aWdhdGUnXG5pbXBvcnQgeyBpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQgfSBmcm9tICcuLi9pcy1uYXZpZ2F0aW5nLXRvLW5ldy1yb290LWxheW91dCdcbmltcG9ydCB7XG4gIFByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cyxcbiAgdHlwZSBNdXRhYmxlLFxuICB0eXBlIE5hdmlnYXRlQWN0aW9uLFxuICB0eXBlIFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICB0eXBlIFJlZHVjZXJTdGF0ZSxcbn0gZnJvbSAnLi4vcm91dGVyLXJlZHVjZXItdHlwZXMnXG5pbXBvcnQgeyBoYW5kbGVNdXRhYmxlIH0gZnJvbSAnLi4vaGFuZGxlLW11dGFibGUnXG5pbXBvcnQgeyBhcHBseUZsaWdodERhdGEgfSBmcm9tICcuLi9hcHBseS1mbGlnaHQtZGF0YSdcbmltcG9ydCB7IHByZWZldGNoUXVldWUgfSBmcm9tICcuL3ByZWZldGNoLXJlZHVjZXInXG5pbXBvcnQgeyBjcmVhdGVFbXB0eUNhY2hlTm9kZSB9IGZyb20gJy4uLy4uL2FwcC1yb3V0ZXInXG5pbXBvcnQgeyBERUZBVUxUX1NFR01FTlRfS0VZIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2xpYi9zZWdtZW50J1xuaW1wb3J0IHsgbGlzdGVuRm9yRHluYW1pY1JlcXVlc3QsIHN0YXJ0UFBSTmF2aWdhdGlvbiB9IGZyb20gJy4uL3Bwci1uYXZpZ2F0aW9ucydcbmltcG9ydCB7XG4gIGdldE9yQ3JlYXRlUHJlZmV0Y2hDYWNoZUVudHJ5LFxuICBwcnVuZVByZWZldGNoQ2FjaGUsXG59IGZyb20gJy4uL3ByZWZldGNoLWNhY2hlLXV0aWxzJ1xuaW1wb3J0IHsgY2xlYXJDYWNoZU5vZGVEYXRhRm9yU2VnbWVudFBhdGggfSBmcm9tICcuLi9jbGVhci1jYWNoZS1ub2RlLWRhdGEtZm9yLXNlZ21lbnQtcGF0aCdcbmltcG9ydCB7IGhhbmRsZUFsaWFzZWRQcmVmZXRjaEVudHJ5IH0gZnJvbSAnLi4vYWxpYXNlZC1wcmVmZXRjaC1uYXZpZ2F0aW9ucydcbmltcG9ydCB7XG4gIG5hdmlnYXRlIGFzIG5hdmlnYXRlVXNpbmdTZWdtZW50Q2FjaGUsXG4gIE5hdmlnYXRpb25SZXN1bHRUYWcsXG4gIHR5cGUgTmF2aWdhdGlvblJlc3VsdCxcbn0gZnJvbSAnLi4vLi4vc2VnbWVudC1jYWNoZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUV4dGVybmFsVXJsKFxuICBzdGF0ZTogUmVhZG9ubHlSZWR1Y2VyU3RhdGUsXG4gIG11dGFibGU6IE11dGFibGUsXG4gIHVybDogc3RyaW5nLFxuICBwZW5kaW5nUHVzaDogYm9vbGVhblxuKSB7XG4gIG11dGFibGUubXBhTmF2aWdhdGlvbiA9IHRydWVcbiAgbXV0YWJsZS5jYW5vbmljYWxVcmwgPSB1cmxcbiAgbXV0YWJsZS5wZW5kaW5nUHVzaCA9IHBlbmRpbmdQdXNoXG4gIG11dGFibGUuc2Nyb2xsYWJsZVNlZ21lbnRzID0gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIGhhbmRsZU11dGFibGUoc3RhdGUsIG11dGFibGUpXG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU2VnbWVudHNGcm9tUGF0Y2goXG4gIGZsaWdodFJvdXRlclBhdGNoOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuKTogRmxpZ2h0U2VnbWVudFBhdGhbXSB7XG4gIGNvbnN0IHNlZ21lbnRzOiBGbGlnaHRTZWdtZW50UGF0aFtdID0gW11cbiAgY29uc3QgW3NlZ21lbnQsIHBhcmFsbGVsUm91dGVzXSA9IGZsaWdodFJvdXRlclBhdGNoXG5cbiAgaWYgKE9iamVjdC5rZXlzKHBhcmFsbGVsUm91dGVzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW1tzZWdtZW50XV1cbiAgfVxuXG4gIGZvciAoY29uc3QgW3BhcmFsbGVsUm91dGVLZXksIHBhcmFsbGVsUm91dGVdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgIHBhcmFsbGVsUm91dGVzXG4gICkpIHtcbiAgICBmb3IgKGNvbnN0IGNoaWxkU2VnbWVudCBvZiBnZW5lcmF0ZVNlZ21lbnRzRnJvbVBhdGNoKHBhcmFsbGVsUm91dGUpKSB7XG4gICAgICAvLyBJZiB0aGUgc2VnbWVudCBpcyBlbXB0eSwgaXQgbWVhbnMgd2UgYXJlIGF0IHRoZSByb290IG9mIHRoZSB0cmVlXG4gICAgICBpZiAoc2VnbWVudCA9PT0gJycpIHtcbiAgICAgICAgc2VnbWVudHMucHVzaChbcGFyYWxsZWxSb3V0ZUtleSwgLi4uY2hpbGRTZWdtZW50XSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goW3NlZ21lbnQsIHBhcmFsbGVsUm91dGVLZXksIC4uLmNoaWxkU2VnbWVudF0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNlZ21lbnRzXG59XG5cbmZ1bmN0aW9uIHRyaWdnZXJMYXp5RmV0Y2hGb3JMZWFmU2VnbWVudHMoXG4gIG5ld0NhY2hlOiBDYWNoZU5vZGUsXG4gIGN1cnJlbnRDYWNoZTogQ2FjaGVOb2RlLFxuICBmbGlnaHRTZWdtZW50UGF0aDogRmxpZ2h0U2VnbWVudFBhdGgsXG4gIHRyZWVQYXRjaDogRmxpZ2h0Um91dGVyU3RhdGVcbikge1xuICBsZXQgYXBwbGllZFBhdGNoID0gZmFsc2VcblxuICBuZXdDYWNoZS5yc2MgPSBjdXJyZW50Q2FjaGUucnNjXG4gIG5ld0NhY2hlLnByZWZldGNoUnNjID0gY3VycmVudENhY2hlLnByZWZldGNoUnNjXG4gIG5ld0NhY2hlLmxvYWRpbmcgPSBjdXJyZW50Q2FjaGUubG9hZGluZ1xuICBuZXdDYWNoZS5wYXJhbGxlbFJvdXRlcyA9IG5ldyBNYXAoY3VycmVudENhY2hlLnBhcmFsbGVsUm91dGVzKVxuXG4gIGNvbnN0IHNlZ21lbnRQYXRoc1RvRmlsbCA9IGdlbmVyYXRlU2VnbWVudHNGcm9tUGF0Y2godHJlZVBhdGNoKS5tYXAoXG4gICAgKHNlZ21lbnQpID0+IFsuLi5mbGlnaHRTZWdtZW50UGF0aCwgLi4uc2VnbWVudF1cbiAgKVxuXG4gIGZvciAoY29uc3Qgc2VnbWVudFBhdGhzIG9mIHNlZ21lbnRQYXRoc1RvRmlsbCkge1xuICAgIGNsZWFyQ2FjaGVOb2RlRGF0YUZvclNlZ21lbnRQYXRoKG5ld0NhY2hlLCBjdXJyZW50Q2FjaGUsIHNlZ21lbnRQYXRocylcblxuICAgIGFwcGxpZWRQYXRjaCA9IHRydWVcbiAgfVxuXG4gIHJldHVybiBhcHBsaWVkUGF0Y2hcbn1cblxuZnVuY3Rpb24gaGFuZGxlTmF2aWdhdGlvblJlc3VsdChcbiAgdXJsOiBVUkwsXG4gIHN0YXRlOiBSZWFkb25seVJlZHVjZXJTdGF0ZSxcbiAgbXV0YWJsZTogTXV0YWJsZSxcbiAgcGVuZGluZ1B1c2g6IGJvb2xlYW4sXG4gIHJlc3VsdDogTmF2aWdhdGlvblJlc3VsdFxuKTogUmVkdWNlclN0YXRlIHtcbiAgc3dpdGNoIChyZXN1bHQudGFnKSB7XG4gICAgY2FzZSBOYXZpZ2F0aW9uUmVzdWx0VGFnLk1QQToge1xuICAgICAgLy8gUGVyZm9ybSBhbiBNUEEgbmF2aWdhdGlvbi5cbiAgICAgIGNvbnN0IG5ld1VybCA9IHJlc3VsdC5kYXRhXG4gICAgICByZXR1cm4gaGFuZGxlRXh0ZXJuYWxVcmwoc3RhdGUsIG11dGFibGUsIG5ld1VybCwgcGVuZGluZ1B1c2gpXG4gICAgfVxuICAgIGNhc2UgTmF2aWdhdGlvblJlc3VsdFRhZy5Ob09wOiB7XG4gICAgICAvLyBUaGUgc2VydmVyIHJlc3BvbmRlZCB3aXRoIG5vIGNoYW5nZSB0byB0aGUgY3VycmVudCBwYWdlLiBIb3dldmVyLCBpZlxuICAgICAgLy8gdGhlIFVSTCBjaGFuZ2VkLCB3ZSBzdGlsbCBuZWVkIHRvIHVwZGF0ZSB0aGF0LlxuICAgICAgY29uc3QgbmV3Q2Fub25pY2FsVXJsID0gcmVzdWx0LmRhdGEuY2Fub25pY2FsVXJsXG4gICAgICBtdXRhYmxlLmNhbm9uaWNhbFVybCA9IG5ld0Nhbm9uaWNhbFVybFxuXG4gICAgICAvLyBDaGVjayBpZiB0aGUgb25seSB0aGluZyB0aGF0IGNoYW5nZWQgd2FzIHRoZSBoYXNoIGZyYWdtZW50LlxuICAgICAgY29uc3Qgb2xkVXJsID0gbmV3IFVSTChzdGF0ZS5jYW5vbmljYWxVcmwsIHVybClcbiAgICAgIGNvbnN0IG9ubHlIYXNoQ2hhbmdlID1cbiAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjb21wYXJlIHRoZSBvcmlnaW5zLCBiZWNhdXNlIGNsaWVudC1kcml2ZW5cbiAgICAgICAgLy8gbmF2aWdhdGlvbnMgYXJlIGFsd2F5cyBzYW1lLW9yaWdpbi5cbiAgICAgICAgdXJsLnBhdGhuYW1lID09PSBvbGRVcmwucGF0aG5hbWUgJiZcbiAgICAgICAgdXJsLnNlYXJjaCA9PT0gb2xkVXJsLnNlYXJjaCAmJlxuICAgICAgICB1cmwuaGFzaCAhPT0gb2xkVXJsLmhhc2hcbiAgICAgIGlmIChvbmx5SGFzaENoYW5nZSkge1xuICAgICAgICAvLyBUaGUgb25seSB1cGRhdGVkIHBhcnQgb2YgdGhlIFVSTCBpcyB0aGUgaGFzaC5cbiAgICAgICAgbXV0YWJsZS5vbmx5SGFzaENoYW5nZSA9IHRydWVcbiAgICAgICAgbXV0YWJsZS5zaG91bGRTY3JvbGwgPSByZXN1bHQuZGF0YS5zaG91bGRTY3JvbGxcbiAgICAgICAgbXV0YWJsZS5oYXNoRnJhZ21lbnQgPSB1cmwuaGFzaFxuICAgICAgICAvLyBTZXR0aW5nIHRoaXMgdG8gYW4gZW1wdHkgYXJyYXkgdHJpZ2dlcnMgYSBzY3JvbGwgZm9yIGFsbCBuZXcgYW5kXG4gICAgICAgIC8vIHVwZGF0ZWQgc2VnbWVudHMuIFNlZSBgU2Nyb2xsQW5kRm9jdXNIYW5kbGVyYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICBtdXRhYmxlLnNjcm9sbGFibGVTZWdtZW50cyA9IFtdXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoYW5kbGVNdXRhYmxlKHN0YXRlLCBtdXRhYmxlKVxuICAgIH1cbiAgICBjYXNlIE5hdmlnYXRpb25SZXN1bHRUYWcuU3VjY2Vzczoge1xuICAgICAgLy8gUmVjZWl2ZWQgYSBuZXcgcmVzdWx0LlxuICAgICAgbXV0YWJsZS5jYWNoZSA9IHJlc3VsdC5kYXRhLmNhY2hlTm9kZVxuICAgICAgbXV0YWJsZS5wYXRjaGVkVHJlZSA9IHJlc3VsdC5kYXRhLmZsaWdodFJvdXRlclN0YXRlXG4gICAgICBtdXRhYmxlLmNhbm9uaWNhbFVybCA9IHJlc3VsdC5kYXRhLmNhbm9uaWNhbFVybFxuICAgICAgbXV0YWJsZS5zY3JvbGxhYmxlU2VnbWVudHMgPSByZXN1bHQuZGF0YS5zY3JvbGxhYmxlU2VnbWVudHNcbiAgICAgIG11dGFibGUuc2hvdWxkU2Nyb2xsID0gcmVzdWx0LmRhdGEuc2hvdWxkU2Nyb2xsXG4gICAgICBtdXRhYmxlLmhhc2hGcmFnbWVudCA9IHJlc3VsdC5kYXRhLmhhc2hcbiAgICAgIHJldHVybiBoYW5kbGVNdXRhYmxlKHN0YXRlLCBtdXRhYmxlKVxuICAgIH1cbiAgICBjYXNlIE5hdmlnYXRpb25SZXN1bHRUYWcuQXN5bmM6IHtcbiAgICAgIHJldHVybiByZXN1bHQuZGF0YS50aGVuKFxuICAgICAgICAoYXN5bmNSZXN1bHQpID0+XG4gICAgICAgICAgaGFuZGxlTmF2aWdhdGlvblJlc3VsdCh1cmwsIHN0YXRlLCBtdXRhYmxlLCBwZW5kaW5nUHVzaCwgYXN5bmNSZXN1bHQpLFxuICAgICAgICAvLyBJZiB0aGUgbmF2aWdhdGlvbiBmYWlsZWQsIHJldHVybiB0aGUgY3VycmVudCBzdGF0ZS5cbiAgICAgICAgLy8gVE9ETzogVGhpcyBtYXRjaGVzIHRoZSBjdXJyZW50IGJlaGF2aW9yIGJ1dCB3ZSBuZWVkIHRvIGRvIHNvbWV0aGluZ1xuICAgICAgICAvLyBiZXR0ZXIgaGVyZSBpZiB0aGUgbmV0d29yayBmYWlscy5cbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBzdGF0ZVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJlc3VsdCBzYXRpc2ZpZXMgbmV2ZXJcbiAgICAgIHJldHVybiBzdGF0ZVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbmF2aWdhdGVSZWR1Y2VyKFxuICBzdGF0ZTogUmVhZG9ubHlSZWR1Y2VyU3RhdGUsXG4gIGFjdGlvbjogTmF2aWdhdGVBY3Rpb25cbik6IFJlZHVjZXJTdGF0ZSB7XG4gIGNvbnN0IHsgdXJsLCBpc0V4dGVybmFsVXJsLCBuYXZpZ2F0ZVR5cGUsIHNob3VsZFNjcm9sbCwgYWxsb3dBbGlhc2luZyB9ID1cbiAgICBhY3Rpb25cbiAgY29uc3QgbXV0YWJsZTogTXV0YWJsZSA9IHt9XG4gIGNvbnN0IHsgaGFzaCB9ID0gdXJsXG4gIGNvbnN0IGhyZWYgPSBjcmVhdGVIcmVmRnJvbVVybCh1cmwpXG4gIGNvbnN0IHBlbmRpbmdQdXNoID0gbmF2aWdhdGVUeXBlID09PSAncHVzaCdcbiAgLy8gd2Ugd2FudCB0byBwcnVuZSB0aGUgcHJlZmV0Y2ggY2FjaGUgb24gZXZlcnkgbmF2aWdhdGlvbiB0byBhdm9pZCBpdCBncm93aW5nIHRvbyBsYXJnZVxuICBwcnVuZVByZWZldGNoQ2FjaGUoc3RhdGUucHJlZmV0Y2hDYWNoZSlcblxuICBtdXRhYmxlLnByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlID0gZmFsc2VcbiAgbXV0YWJsZS5wZW5kaW5nUHVzaCA9IHBlbmRpbmdQdXNoXG5cbiAgaWYgKGlzRXh0ZXJuYWxVcmwpIHtcbiAgICByZXR1cm4gaGFuZGxlRXh0ZXJuYWxVcmwoc3RhdGUsIG11dGFibGUsIHVybC50b1N0cmluZygpLCBwZW5kaW5nUHVzaClcbiAgfVxuXG4gIC8vIEhhbmRsZXMgY2FzZSB3aGVyZSBgPG1ldGEgaHR0cC1lcXVpdj1cInJlZnJlc2hcIj5gIHRhZyBpcyBwcmVzZW50LFxuICAvLyB3aGljaCB3aWxsIHRyaWdnZXIgYW4gTVBBIG5hdmlnYXRpb24uXG4gIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnX19uZXh0LXBhZ2UtcmVkaXJlY3QnKSkge1xuICAgIHJldHVybiBoYW5kbGVFeHRlcm5hbFVybChzdGF0ZSwgbXV0YWJsZSwgaHJlZiwgcGVuZGluZ1B1c2gpXG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0NMSUVOVF9TRUdNRU5UX0NBQ0hFKSB7XG4gICAgLy8gKFZlcnkgRWFybHkgRXhwZXJpbWVudGFsIEZlYXR1cmUpIFNlZ21lbnQgQ2FjaGVcbiAgICAvL1xuICAgIC8vIEJ5cGFzcyB0aGUgbm9ybWFsIHByZWZldGNoIGNhY2hlIGFuZCB1c2UgdGhlIG5ldyBwZXItc2VnbWVudCBjYWNoZVxuICAgIC8vIGltcGxlbWVudGF0aW9uIGluc3RlYWQuIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgaWYgUFBSIGlzIGVuYWJsZWQsIHRvby5cbiAgICAvL1xuICAgIC8vIFRlbXBvcmFyeSBnbHVlIGNvZGUgYmV0d2VlbiB0aGUgcm91dGVyIHJlZHVjZXIgYW5kIHRoZSBuZXcgbmF2aWdhdGlvblxuICAgIC8vIGltcGxlbWVudGF0aW9uLiBFdmVudHVhbGx5IHdlJ2xsIHJld3JpdGUgdGhlIHJvdXRlciByZWR1Y2VyIHRvIGFcbiAgICAvLyBzdGF0ZSBtYWNoaW5lLlxuICAgIGNvbnN0IHJlc3VsdCA9IG5hdmlnYXRlVXNpbmdTZWdtZW50Q2FjaGUoXG4gICAgICB1cmwsXG4gICAgICBzdGF0ZS5jYWNoZSxcbiAgICAgIHN0YXRlLnRyZWUsXG4gICAgICBzdGF0ZS5uZXh0VXJsLFxuICAgICAgc2hvdWxkU2Nyb2xsXG4gICAgKVxuICAgIHJldHVybiBoYW5kbGVOYXZpZ2F0aW9uUmVzdWx0KHVybCwgc3RhdGUsIG11dGFibGUsIHBlbmRpbmdQdXNoLCByZXN1bHQpXG4gIH1cblxuICBjb25zdCBwcmVmZXRjaFZhbHVlcyA9IGdldE9yQ3JlYXRlUHJlZmV0Y2hDYWNoZUVudHJ5KHtcbiAgICB1cmwsXG4gICAgbmV4dFVybDogc3RhdGUubmV4dFVybCxcbiAgICB0cmVlOiBzdGF0ZS50cmVlLFxuICAgIHByZWZldGNoQ2FjaGU6IHN0YXRlLnByZWZldGNoQ2FjaGUsXG4gICAgYWxsb3dBbGlhc2luZyxcbiAgfSlcbiAgY29uc3QgeyB0cmVlQXRUaW1lT2ZQcmVmZXRjaCwgZGF0YSB9ID0gcHJlZmV0Y2hWYWx1ZXNcblxuICBwcmVmZXRjaFF1ZXVlLmJ1bXAoZGF0YSlcblxuICByZXR1cm4gZGF0YS50aGVuKFxuICAgICh7IGZsaWdodERhdGEsIGNhbm9uaWNhbFVybDogY2Fub25pY2FsVXJsT3ZlcnJpZGUsIHBvc3Rwb25lZCB9KSA9PiB7XG4gICAgICBjb25zdCBuYXZpZ2F0ZWRBdCA9IERhdGUubm93KClcblxuICAgICAgbGV0IGlzRmlyc3RSZWFkID0gZmFsc2VcbiAgICAgIC8vIHdlIG9ubHkgd2FudCB0byBtYXJrIHRoaXMgb25jZVxuICAgICAgaWYgKCFwcmVmZXRjaFZhbHVlcy5sYXN0VXNlZFRpbWUpIHtcbiAgICAgICAgLy8gaW1wb3J0YW50OiB3ZSBzaG91bGQgb25seSBtYXJrIHRoZSBjYWNoZSBub2RlIGFzIGRpcnR5IGFmdGVyIHdlIHVuc3VzcGVuZCBmcm9tIHRoZSBjYWxsIGFib3ZlXG4gICAgICAgIHByZWZldGNoVmFsdWVzLmxhc3RVc2VkVGltZSA9IG5hdmlnYXRlZEF0XG4gICAgICAgIGlzRmlyc3RSZWFkID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAocHJlZmV0Y2hWYWx1ZXMuYWxpYXNlZCkge1xuICAgICAgICAvLyBXaGVuIGFsaWFzIGlzIGVuYWJsZWQsIHNlYXJjaCBwYXJhbSBtYXkgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBjYW5vbmljYWxVcmwuXG4gICAgICAgIC8vIEJ1dCB3ZSB3YW50IHRvIHNldCB1cmwgdG8gY2Fub25pY2FsVXJsIHNvIHRoYXQgd2UgdXNlIHJlZGlyZWN0ZWQgcGF0aCBmb3IgZmV0Y2hpbmcgZHluYW1pYyBkYXRhLlxuICAgICAgICBjb25zdCB1cmxXaXRoQ2Fub25pY2FsUGF0aG5hbWUgPSBuZXcgVVJMKHVybC5ocmVmKVxuICAgICAgICBpZiAoY2Fub25pY2FsVXJsT3ZlcnJpZGUpIHtcbiAgICAgICAgICB1cmxXaXRoQ2Fub25pY2FsUGF0aG5hbWUucGF0aG5hbWUgPSBjYW5vbmljYWxVcmxPdmVycmlkZS5wYXRobmFtZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaGFuZGxlQWxpYXNlZFByZWZldGNoRW50cnkoXG4gICAgICAgICAgbmF2aWdhdGVkQXQsXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgZmxpZ2h0RGF0YSxcbiAgICAgICAgICB1cmxXaXRoQ2Fub25pY2FsUGF0aG5hbWUsXG4gICAgICAgICAgbXV0YWJsZVxuICAgICAgICApXG5cbiAgICAgICAgLy8gV2UgZGlkbid0IHJldHVybiBuZXcgcm91dGVyIHN0YXRlIGJlY2F1c2Ugd2UgZGlkbid0IGFwcGx5IHRoZSBhbGlhc2VkIGVudHJ5IGZvciBzb21lIHJlYXNvbi5cbiAgICAgICAgLy8gV2UnbGwgcmUtaW52b2tlIHRoZSBuYXZpZ2F0aW9uIGhhbmRsZXIgYnV0IGVuc3VyZSB0aGF0IHdlIGRvbid0IGF0dGVtcHQgdG8gdXNlIHRoZSBhbGlhc2VkIGVudHJ5LiBUaGlzXG4gICAgICAgIC8vIHdpbGwgY3JlYXRlIGFuIG9uLWRlbWFuZCBwcmVmZXRjaCBlbnRyeS5cbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICByZXR1cm4gbmF2aWdhdGVSZWR1Y2VyKHN0YXRlLCB7IC4uLmFjdGlvbiwgYWxsb3dBbGlhc2luZzogZmFsc2UgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGNhc2Ugd2hlbiBuYXZpZ2F0aW5nIHRvIHBhZ2UgaW4gYHBhZ2VzYCBmcm9tIGBhcHBgXG4gICAgICBpZiAodHlwZW9mIGZsaWdodERhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVFeHRlcm5hbFVybChzdGF0ZSwgbXV0YWJsZSwgZmxpZ2h0RGF0YSwgcGVuZGluZ1B1c2gpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVwZGF0ZWRDYW5vbmljYWxVcmwgPSBjYW5vbmljYWxVcmxPdmVycmlkZVxuICAgICAgICA/IGNyZWF0ZUhyZWZGcm9tVXJsKGNhbm9uaWNhbFVybE92ZXJyaWRlKVxuICAgICAgICA6IGhyZWZcblxuICAgICAgY29uc3Qgb25seUhhc2hDaGFuZ2UgPVxuICAgICAgICAhIWhhc2ggJiZcbiAgICAgICAgc3RhdGUuY2Fub25pY2FsVXJsLnNwbGl0KCcjJywgMSlbMF0gPT09XG4gICAgICAgICAgdXBkYXRlZENhbm9uaWNhbFVybC5zcGxpdCgnIycsIDEpWzBdXG5cbiAgICAgIC8vIElmIG9ubHkgdGhlIGhhc2ggaGFzIGNoYW5nZWQsIHRoZSBzZXJ2ZXIgaGFzbid0IHNlbnQgdXMgYW55IG5ldyBkYXRhLiBXZSBjYW4ganVzdCB1cGRhdGVcbiAgICAgIC8vIHRoZSBtdXRhYmxlIHByb3BlcnRpZXMgcmVzcG9uc2libGUgZm9yIFVSTCBhbmQgc2Nyb2xsIGhhbmRsaW5nIGFuZCByZXR1cm4gZWFybHkuXG4gICAgICBpZiAob25seUhhc2hDaGFuZ2UpIHtcbiAgICAgICAgbXV0YWJsZS5vbmx5SGFzaENoYW5nZSA9IHRydWVcbiAgICAgICAgbXV0YWJsZS5jYW5vbmljYWxVcmwgPSB1cGRhdGVkQ2Fub25pY2FsVXJsXG4gICAgICAgIG11dGFibGUuc2hvdWxkU2Nyb2xsID0gc2hvdWxkU2Nyb2xsXG4gICAgICAgIG11dGFibGUuaGFzaEZyYWdtZW50ID0gaGFzaFxuICAgICAgICBtdXRhYmxlLnNjcm9sbGFibGVTZWdtZW50cyA9IFtdXG4gICAgICAgIHJldHVybiBoYW5kbGVNdXRhYmxlKHN0YXRlLCBtdXRhYmxlKVxuICAgICAgfVxuXG4gICAgICBsZXQgY3VycmVudFRyZWUgPSBzdGF0ZS50cmVlXG4gICAgICBsZXQgY3VycmVudENhY2hlID0gc3RhdGUuY2FjaGVcbiAgICAgIGxldCBzY3JvbGxhYmxlU2VnbWVudHM6IEZsaWdodFNlZ21lbnRQYXRoW10gPSBbXVxuICAgICAgZm9yIChjb25zdCBub3JtYWxpemVkRmxpZ2h0RGF0YSBvZiBmbGlnaHREYXRhKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBwYXRoVG9TZWdtZW50OiBmbGlnaHRTZWdtZW50UGF0aCxcbiAgICAgICAgICBzZWVkRGF0YSxcbiAgICAgICAgICBoZWFkLFxuICAgICAgICAgIGlzSGVhZFBhcnRpYWwsXG4gICAgICAgICAgaXNSb290UmVuZGVyLFxuICAgICAgICB9ID0gbm9ybWFsaXplZEZsaWdodERhdGFcbiAgICAgICAgbGV0IHRyZWVQYXRjaCA9IG5vcm1hbGl6ZWRGbGlnaHREYXRhLnRyZWVcblxuICAgICAgICAvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgICAgIGNvbnN0IGZsaWdodFNlZ21lbnRQYXRoV2l0aExlYWRpbmdFbXB0eSA9IFsnJywgLi4uZmxpZ2h0U2VnbWVudFBhdGhdXG5cbiAgICAgICAgLy8gQ3JlYXRlIG5ldyB0cmVlIGJhc2VkIG9uIHRoZSBmbGlnaHRTZWdtZW50UGF0aCBhbmQgcm91dGVyIHN0YXRlIHBhdGNoXG4gICAgICAgIGxldCBuZXdUcmVlID0gYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlKFxuICAgICAgICAgIC8vIFRPRE8tQVBQOiByZW1vdmUgJydcbiAgICAgICAgICBmbGlnaHRTZWdtZW50UGF0aFdpdGhMZWFkaW5nRW1wdHksXG4gICAgICAgICAgY3VycmVudFRyZWUsXG4gICAgICAgICAgdHJlZVBhdGNoLFxuICAgICAgICAgIGhyZWZcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIElmIHRoZSB0cmVlIHBhdGNoIGNhbid0IGJlIGFwcGxpZWQgdG8gdGhlIGN1cnJlbnQgdHJlZSB0aGVuIHdlIHVzZSB0aGUgdHJlZSBhdCB0aW1lIG9mIHByZWZldGNoXG4gICAgICAgIC8vIFRPRE8tQVBQOiBUaGlzIHNob3VsZCBpbnN0ZWFkIGZpbGwgaW4gdGhlIG1pc3NpbmcgcGllY2VzIGluIGBjdXJyZW50VHJlZWAgd2l0aCB0aGUgZGF0YSBmcm9tIGB0cmVlQXRUaW1lT2ZQcmVmZXRjaGAsIHRoZW4gYXBwbHkgdGhlIHBhdGNoLlxuICAgICAgICBpZiAobmV3VHJlZSA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld1RyZWUgPSBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWUoXG4gICAgICAgICAgICAvLyBUT0RPLUFQUDogcmVtb3ZlICcnXG4gICAgICAgICAgICBmbGlnaHRTZWdtZW50UGF0aFdpdGhMZWFkaW5nRW1wdHksXG4gICAgICAgICAgICB0cmVlQXRUaW1lT2ZQcmVmZXRjaCxcbiAgICAgICAgICAgIHRyZWVQYXRjaCxcbiAgICAgICAgICAgIGhyZWZcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3VHJlZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIFRoaXMgaXMganVzdCBhIHBhcmFub2lkIGNoZWNrLiBXaGVuIGEgcm91dGUgaXMgUFBSZWQsIHRoZSBzZXJ2ZXJcbiAgICAgICAgICAgIC8vIHdpbGwgc2VuZCBiYWNrIGEgc3RhdGljIHJlc3BvbnNlIHRoYXQncyByZW5kZXJlZCBmcm9tXG4gICAgICAgICAgICAvLyB0aGUgcm9vdC4gSWYgZm9yIHNvbWUgcmVhc29uIGl0IGRvZXNuJ3QsIHdlIGZhbGwgYmFjayB0byB0aGVcbiAgICAgICAgICAgIC8vIG5vbi1QUFIgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgZ2V0IHJpZCBvZiB0aGUgZWxzZSBicmFuY2ggYW5kIGRvIGFsbCBuYXZpZ2F0aW9uc1xuICAgICAgICAgICAgLy8gdmlhIHN0YXJ0UFBSTmF2aWdhdGlvbi4gVGhlIGN1cnJlbnQgc3RydWN0dXJlIGlzIGp1c3RcbiAgICAgICAgICAgIC8vIGFuIGluY3JlbWVudGFsIHN0ZXAuXG4gICAgICAgICAgICBzZWVkRGF0YSAmJlxuICAgICAgICAgICAgaXNSb290UmVuZGVyICYmXG4gICAgICAgICAgICBwb3N0cG9uZWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHRhc2sgPSBzdGFydFBQUk5hdmlnYXRpb24oXG4gICAgICAgICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgICAgICAgICBjdXJyZW50Q2FjaGUsXG4gICAgICAgICAgICAgIGN1cnJlbnRUcmVlLFxuICAgICAgICAgICAgICB0cmVlUGF0Y2gsXG4gICAgICAgICAgICAgIHNlZWREYXRhLFxuICAgICAgICAgICAgICBoZWFkLFxuICAgICAgICAgICAgICBpc0hlYWRQYXJ0aWFsLFxuICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgc2Nyb2xsYWJsZVNlZ21lbnRzXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGlmICh0YXNrICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmICh0YXNrLnJvdXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gRGV0ZWN0ZWQgYSBjaGFuZ2UgdG8gdGhlIHJvb3QgbGF5b3V0LiBQZXJmb3JtIGFuIGZ1bGwtXG4gICAgICAgICAgICAgICAgLy8gcGFnZSBuYXZpZ2F0aW9uLlxuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVFeHRlcm5hbFVybChzdGF0ZSwgbXV0YWJsZSwgaHJlZiwgcGVuZGluZ1B1c2gpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gVXNlIHRoZSB0cmVlIGNvbXB1dGVkIGJ5IHN0YXJ0UFBSTmF2aWdhdGlvbiBpbnN0ZWFkXG4gICAgICAgICAgICAgIC8vIG9mIHRoZSBvbmUgY29tcHV0ZWQgYnkgYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlLlxuICAgICAgICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgcmVtb3ZlIGFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZVxuICAgICAgICAgICAgICAvLyBmcm9tIHRoZSBQUFIgcGF0aCBlbnRpcmVseS5cbiAgICAgICAgICAgICAgY29uc3QgcGF0Y2hlZFJvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZSA9IHRhc2sucm91dGVcbiAgICAgICAgICAgICAgbmV3VHJlZSA9IHBhdGNoZWRSb3V0ZXJTdGF0ZVxuXG4gICAgICAgICAgICAgIGNvbnN0IG5ld0NhY2hlID0gdGFzay5ub2RlXG4gICAgICAgICAgICAgIGlmIChuZXdDYWNoZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGNyZWF0ZWQgYSBuZXcgQ2FjaGUgTm9kZSB0cmVlIHRoYXQgY29udGFpbnMgYSBwcmVmZXRjaGVkXG4gICAgICAgICAgICAgICAgLy8gdmVyc2lvbiBvZiB0aGUgbmV4dCBwYWdlLiBUaGlzIGNhbiBiZSByZW5kZXJlZCBpbnN0YW50bHkuXG4gICAgICAgICAgICAgICAgbXV0YWJsZS5jYWNoZSA9IG5ld0NhY2hlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZHluYW1pY1JlcXVlc3RUcmVlID0gdGFzay5keW5hbWljUmVxdWVzdFRyZWVcbiAgICAgICAgICAgICAgaWYgKGR5bmFtaWNSZXF1ZXN0VHJlZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBwcmVmZXRjaGVkIHRyZWUgaGFzIGR5bmFtaWMgaG9sZXMgaW4gaXQuIFdlIGluaXRpYXRlIGFcbiAgICAgICAgICAgICAgICAvLyBkeW5hbWljIHJlcXVlc3QgdG8gZmlsbCB0aGVtIGluLlxuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IGJsb2NrIG9uIHRoZSByZXN1bHQuIFdlJ2xsIGltbWVkaWF0ZWx5IHJlbmRlciB0aGUgQ2FjaGVcbiAgICAgICAgICAgICAgICAvLyBOb2RlIHRyZWUgYW5kIHN1c3BlbmQgb24gdGhlIGR5bmFtaWMgcGFydHMuIFdoZW4gdGhlIHJlcXVlc3RcbiAgICAgICAgICAgICAgICAvLyBjb21lcyBpbiwgd2UnbGwgZmlsbCBpbiBtaXNzaW5nIGRhdGEgYW5kIHBpbmcgUmVhY3QgdG9cbiAgICAgICAgICAgICAgICAvLyByZS1yZW5kZXIuIFVubGlrZSB0aGUgbGF6eSBmZXRjaGluZyBtb2RlbCBpbiB0aGUgbm9uLVBQUlxuICAgICAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uLCB0aGlzIGlzIG1vZGVsZWQgYXMgYSBzaW5nbGUgUmVhY3QgdXBkYXRlICtcbiAgICAgICAgICAgICAgICAvLyBzdHJlYW1pbmcsIHJhdGhlciB0aGFuIG11bHRpcGxlIHRvcC1sZXZlbCB1cGRhdGVzLiAoSG93ZXZlcixcbiAgICAgICAgICAgICAgICAvLyBldmVuIGluIHRoZSBuZXcgbW9kZWwsIHdlJ2xsIHN0aWxsIG5lZWQgdG8gc29tZXRpbWVzIHVwZGF0ZSB0aGVcbiAgICAgICAgICAgICAgICAvLyByb290IG11bHRpcGxlIHRpbWVzIHBlciBuYXZpZ2F0aW9uLCBsaWtlIGlmIHRoZSBzZXJ2ZXIgc2VuZHMgdXNcbiAgICAgICAgICAgICAgICAvLyBhIGRpZmZlcmVudCByZXNwb25zZSB0aGFuIHdlIGV4cGVjdGVkLiBGb3Igbm93LCB3ZSByZXZlcnQgYmFja1xuICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBsYXp5IGZldGNoaW5nIG1lY2hhbmlzbSBpbiB0aGF0IGNhc2UuKVxuICAgICAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNSZXF1ZXN0ID0gZmV0Y2hTZXJ2ZXJSZXNwb25zZShcbiAgICAgICAgICAgICAgICAgIG5ldyBVUkwodXBkYXRlZENhbm9uaWNhbFVybCwgdXJsLm9yaWdpbiksXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGZsaWdodFJvdXRlclN0YXRlOiBkeW5hbWljUmVxdWVzdFRyZWUsXG4gICAgICAgICAgICAgICAgICAgIG5leHRVcmw6IHN0YXRlLm5leHRVcmwsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgbGlzdGVuRm9yRHluYW1pY1JlcXVlc3QodGFzaywgZHluYW1pY1JlcXVlc3QpXG4gICAgICAgICAgICAgICAgLy8gV2Ugc3RvcmUgdGhlIGR5bmFtaWMgcmVxdWVzdCBvbiB0aGUgYGxhenlEYXRhYCBwcm9wZXJ0eSBvZiB0aGUgQ2FjaGVOb2RlXG4gICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB3ZSdyZSBub3QgZ29pbmcgdG8gYXdhaXQgdGhlIGR5bmFtaWMgcmVxdWVzdCBoZXJlLiBTaW5jZSB3ZSdyZSBub3QgYmxvY2tpbmdcbiAgICAgICAgICAgICAgICAvLyBvbiB0aGUgZHluYW1pYyByZXF1ZXN0LCBgbGF5b3V0LXJvdXRlcmAgd2lsbFxuICAgICAgICAgICAgICAgIC8vIHRhc2subm9kZS5sYXp5RGF0YSA9IGR5bmFtaWNSZXF1ZXN0XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHByZWZldGNoZWQgdHJlZSBkb2VzIG5vdCBjb250YWluIGR5bmFtaWMgaG9sZXMg4oCUIGl0J3NcbiAgICAgICAgICAgICAgICAvLyBmdWxseSBzdGF0aWMuIFdlIGNhbiBza2lwIHRoZSBkeW5hbWljIHJlcXVlc3QuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIE5vdGhpbmcgY2hhbmdlZCwgc28gcmV1c2UgdGhlIG9sZCBjYWNoZS5cbiAgICAgICAgICAgICAgLy8gVE9ETzogV2hhdCBpZiB0aGUgaGVhZCBjaGFuZ2VkIGJ1dCBub3QgYW55IG9mIHRoZSBzZWdtZW50IGRhdGE/XG4gICAgICAgICAgICAgIC8vIElzIHRoYXQgcG9zc2libGU/IElmIHNvLCB3ZSBzaG91bGQgY2xvbmUgdGhlIHdob2xlIHRyZWUgYW5kXG4gICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgaGVhZC5cbiAgICAgICAgICAgICAgbmV3VHJlZSA9IHRyZWVQYXRjaFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaGUgc3RhdGljIHJlc3BvbnNlIGRvZXMgbm90IGluY2x1ZGUgYW55IGR5bmFtaWMgaG9sZXMsIHNvXG4gICAgICAgICAgICAvLyB0aGVyZSdzIG5vIG5lZWQgdG8gZG8gYSBzZWNvbmQgcmVxdWVzdC5cbiAgICAgICAgICAgIC8vIFRPRE86IEFzIGFuIGluY3JlbWVudGFsIHN0ZXAgdGhpcyBqdXN0IHJldmVydHMgYmFjayB0byB0aGVcbiAgICAgICAgICAgIC8vIG5vbi1QUFIgaW1wbGVtZW50YXRpb24uIFdlIGNhbiBzaW1wbGlmeSB0aGlzIGJyYW5jaCBmdXJ0aGVyLFxuICAgICAgICAgICAgLy8gZ2l2ZW4gdGhhdCBQUFIgcHJlZmV0Y2hlcyBhcmUgYWx3YXlzIHN0YXRpYyBhbmQgcmV0dXJuIHRoZSB3aG9sZVxuICAgICAgICAgICAgLy8gdHJlZS4gT3IgaW4gdGhlIG1lYW50aW1lIHdlIGNvdWxkIGZhY3RvciBpdCBvdXQgaW50byBhXG4gICAgICAgICAgICAvLyBzZXBhcmF0ZSBmdW5jdGlvbi5cblxuICAgICAgICAgICAgaWYgKGlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dChjdXJyZW50VHJlZSwgbmV3VHJlZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUV4dGVybmFsVXJsKHN0YXRlLCBtdXRhYmxlLCBocmVmLCBwZW5kaW5nUHVzaClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2FjaGU6IENhY2hlTm9kZSA9IGNyZWF0ZUVtcHR5Q2FjaGVOb2RlKClcbiAgICAgICAgICAgIGxldCBhcHBsaWVkID0gZmFsc2VcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBwcmVmZXRjaFZhbHVlcy5zdGF0dXMgPT09IFByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cy5zdGFsZSAmJlxuICAgICAgICAgICAgICAhaXNGaXJzdFJlYWRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAvLyBXaGVuIHdlIGhhdmUgYSBzdGFsZSBwcmVmZXRjaCBlbnRyeSwgd2Ugb25seSB3YW50IHRvIHJlLXVzZSB0aGUgbG9hZGluZyBzdGF0ZSBvZiB0aGUgcm91dGUgd2UncmUgbmF2aWdhdGluZyB0bywgdG8gc3VwcG9ydCBpbnN0YW50IGxvYWRpbmcgbmF2aWdhdGlvbnNcbiAgICAgICAgICAgICAgLy8gdGhpcyB3aWxsIHRyaWdnZXIgYSBsYXp5IGZldGNoIGZvciB0aGUgYWN0dWFsIHBhZ2UgZGF0YSBieSBudWxsaW5nIHRoZSBgcnNjYCBhbmQgYHByZWZldGNoUnNjYCB2YWx1ZXMgZm9yIHBhZ2UgZGF0YSxcbiAgICAgICAgICAgICAgLy8gd2hpbGUgY29weWluZyBvdmVyIHRoZSBgbG9hZGluZ2AgZm9yIHRoZSBzZWdtZW50IHRoYXQgY29udGFpbnMgdGhlIHBhZ2UgZGF0YS5cbiAgICAgICAgICAgICAgLy8gV2Ugb25seSBkbyB0aGlzIG9uIHN1YnNlcXVlbnQgcmVhZHMsIGFzIG90aGVyd2lzZSB0aGVyZSdkIGJlIG5vIGxvYWRpbmcgZGF0YSB0byByZS11c2UuXG5cbiAgICAgICAgICAgICAgLy8gV2Ugc2tpcCB0aGlzIGJyYW5jaCBpZiBvbmx5IHRoZSBoYXNoIGZyYWdtZW50IGhhcyBjaGFuZ2VkLCBhcyB3ZSBkb24ndCB3YW50IHRvIHRyaWdnZXIgYSBsYXp5IGZldGNoIGluIHRoYXQgY2FzZVxuICAgICAgICAgICAgICBhcHBsaWVkID0gdHJpZ2dlckxhenlGZXRjaEZvckxlYWZTZWdtZW50cyhcbiAgICAgICAgICAgICAgICBjYWNoZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2FjaGUsXG4gICAgICAgICAgICAgICAgZmxpZ2h0U2VnbWVudFBhdGgsXG4gICAgICAgICAgICAgICAgdHJlZVBhdGNoXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8gc2luY2Ugd2UgcmUtdXNlZCB0aGUgc3RhbGUgY2FjaGUncyBsb2FkaW5nIHN0YXRlICYgcmVmcmVzaGVkIHRoZSBkYXRhLFxuICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGBsYXN0VXNlZFRpbWVgIHNvIHRoYXQgaXQgY2FuIGNvbnRpbnVlIHRvIGJlIHJlLXVzZWQgZm9yIHRoZSBuZXh0IDMwc1xuICAgICAgICAgICAgICBwcmVmZXRjaFZhbHVlcy5sYXN0VXNlZFRpbWUgPSBuYXZpZ2F0ZWRBdFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYXBwbGllZCA9IGFwcGx5RmxpZ2h0RGF0YShcbiAgICAgICAgICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2FjaGUsXG4gICAgICAgICAgICAgICAgY2FjaGUsXG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZEZsaWdodERhdGEsXG4gICAgICAgICAgICAgICAgcHJlZmV0Y2hWYWx1ZXNcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBoYXJkTmF2aWdhdGUgPSBzaG91bGRIYXJkTmF2aWdhdGUoXG4gICAgICAgICAgICAgIC8vIFRPRE8tQVBQOiByZW1vdmUgJydcbiAgICAgICAgICAgICAgZmxpZ2h0U2VnbWVudFBhdGhXaXRoTGVhZGluZ0VtcHR5LFxuICAgICAgICAgICAgICBjdXJyZW50VHJlZVxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBpZiAoaGFyZE5hdmlnYXRlKSB7XG4gICAgICAgICAgICAgIC8vIENvcHkgcnNjIGZvciB0aGUgcm9vdCBub2RlIG9mIHRoZSBjYWNoZS5cbiAgICAgICAgICAgICAgY2FjaGUucnNjID0gY3VycmVudENhY2hlLnJzY1xuICAgICAgICAgICAgICBjYWNoZS5wcmVmZXRjaFJzYyA9IGN1cnJlbnRDYWNoZS5wcmVmZXRjaFJzY1xuXG4gICAgICAgICAgICAgIGludmFsaWRhdGVDYWNoZUJlbG93RmxpZ2h0U2VnbWVudFBhdGgoXG4gICAgICAgICAgICAgICAgY2FjaGUsXG4gICAgICAgICAgICAgICAgY3VycmVudENhY2hlLFxuICAgICAgICAgICAgICAgIGZsaWdodFNlZ21lbnRQYXRoXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBleGlzdGluZyBjYWNoZSB2YWx1ZSBpcyB1c2VkIHdoZW4gdGhlIGNhY2hlIHdhcyBub3QgaW52YWxpZGF0ZWQuXG4gICAgICAgICAgICAgIG11dGFibGUuY2FjaGUgPSBjYWNoZVxuICAgICAgICAgICAgfSBlbHNlIGlmIChhcHBsaWVkKSB7XG4gICAgICAgICAgICAgIG11dGFibGUuY2FjaGUgPSBjYWNoZVxuICAgICAgICAgICAgICAvLyBJZiB3ZSBhcHBsaWVkIHRoZSBjYWNoZSwgd2UgdXBkYXRlIHRoZSBcImN1cnJlbnQgY2FjaGVcIiB2YWx1ZSBzbyBhbnkgb3RoZXJcbiAgICAgICAgICAgICAgLy8gc2VnbWVudHMgaW4gdGhlIEZsaWdodERhdGFQYXRoIHdpbGwgYmUgYWJsZSB0byByZWZlcmVuY2UgdGhlIHVwZGF0ZWQgY2FjaGUuXG4gICAgICAgICAgICAgIGN1cnJlbnRDYWNoZSA9IGNhY2hlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViU2VnbWVudCBvZiBnZW5lcmF0ZVNlZ21lbnRzRnJvbVBhdGNoKHRyZWVQYXRjaCkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZVNlZ21lbnRQYXRoID0gW1xuICAgICAgICAgICAgICAgIC4uLmZsaWdodFNlZ21lbnRQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnN1YlNlZ21lbnQsXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgLy8gRmlsdGVyIG91dCB0aGUgX19ERUZBVUxUX18gcGF0aHMgYXMgdGhleSBzaG91bGRuJ3QgYmUgc2Nyb2xsZWQgdG8gaW4gdGhpcyBjYXNlLlxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZVNlZ21lbnRQYXRoW3Njcm9sbGFibGVTZWdtZW50UGF0aC5sZW5ndGggLSAxXSAhPT1cbiAgICAgICAgICAgICAgICBERUZBVUxUX1NFR01FTlRfS0VZXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHNjcm9sbGFibGVTZWdtZW50cy5wdXNoKHNjcm9sbGFibGVTZWdtZW50UGF0aClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnRUcmVlID0gbmV3VHJlZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG11dGFibGUucGF0Y2hlZFRyZWUgPSBjdXJyZW50VHJlZVxuICAgICAgbXV0YWJsZS5jYW5vbmljYWxVcmwgPSB1cGRhdGVkQ2Fub25pY2FsVXJsXG4gICAgICBtdXRhYmxlLnNjcm9sbGFibGVTZWdtZW50cyA9IHNjcm9sbGFibGVTZWdtZW50c1xuICAgICAgbXV0YWJsZS5oYXNoRnJhZ21lbnQgPSBoYXNoXG4gICAgICBtdXRhYmxlLnNob3VsZFNjcm9sbCA9IHNob3VsZFNjcm9sbFxuXG4gICAgICByZXR1cm4gaGFuZGxlTXV0YWJsZShzdGF0ZSwgbXV0YWJsZSlcbiAgICB9LFxuICAgICgpID0+IHN0YXRlXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJoYW5kbGVFeHRlcm5hbFVybCIsIm5hdmlnYXRlUmVkdWNlciIsInN0YXRlIiwibXV0YWJsZSIsInVybCIsInBlbmRpbmdQdXNoIiwibXBhTmF2aWdhdGlvbiIsImNhbm9uaWNhbFVybCIsInNjcm9sbGFibGVTZWdtZW50cyIsInVuZGVmaW5lZCIsImhhbmRsZU11dGFibGUiLCJnZW5lcmF0ZVNlZ21lbnRzRnJvbVBhdGNoIiwiZmxpZ2h0Um91dGVyUGF0Y2giLCJzZWdtZW50cyIsInNlZ21lbnQiLCJwYXJhbGxlbFJvdXRlcyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJwYXJhbGxlbFJvdXRlS2V5IiwicGFyYWxsZWxSb3V0ZSIsImVudHJpZXMiLCJjaGlsZFNlZ21lbnQiLCJwdXNoIiwidHJpZ2dlckxhenlGZXRjaEZvckxlYWZTZWdtZW50cyIsIm5ld0NhY2hlIiwiY3VycmVudENhY2hlIiwiZmxpZ2h0U2VnbWVudFBhdGgiLCJ0cmVlUGF0Y2giLCJhcHBsaWVkUGF0Y2giLCJyc2MiLCJwcmVmZXRjaFJzYyIsImxvYWRpbmciLCJNYXAiLCJzZWdtZW50UGF0aHNUb0ZpbGwiLCJtYXAiLCJzZWdtZW50UGF0aHMiLCJjbGVhckNhY2hlTm9kZURhdGFGb3JTZWdtZW50UGF0aCIsImhhbmRsZU5hdmlnYXRpb25SZXN1bHQiLCJyZXN1bHQiLCJ0YWciLCJOYXZpZ2F0aW9uUmVzdWx0VGFnIiwiTVBBIiwibmV3VXJsIiwiZGF0YSIsIk5vT3AiLCJuZXdDYW5vbmljYWxVcmwiLCJvbGRVcmwiLCJVUkwiLCJvbmx5SGFzaENoYW5nZSIsInBhdGhuYW1lIiwic2VhcmNoIiwiaGFzaCIsInNob3VsZFNjcm9sbCIsImhhc2hGcmFnbWVudCIsIlN1Y2Nlc3MiLCJjYWNoZSIsImNhY2hlTm9kZSIsInBhdGNoZWRUcmVlIiwiZmxpZ2h0Um91dGVyU3RhdGUiLCJBc3luYyIsInRoZW4iLCJhc3luY1Jlc3VsdCIsImFjdGlvbiIsImlzRXh0ZXJuYWxVcmwiLCJuYXZpZ2F0ZVR5cGUiLCJhbGxvd0FsaWFzaW5nIiwiaHJlZiIsImNyZWF0ZUhyZWZGcm9tVXJsIiwicHJ1bmVQcmVmZXRjaENhY2hlIiwicHJlZmV0Y2hDYWNoZSIsInByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlIiwidG9TdHJpbmciLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRSIsIm5hdmlnYXRlVXNpbmdTZWdtZW50Q2FjaGUiLCJ0cmVlIiwibmV4dFVybCIsInByZWZldGNoVmFsdWVzIiwiZ2V0T3JDcmVhdGVQcmVmZXRjaENhY2hlRW50cnkiLCJ0cmVlQXRUaW1lT2ZQcmVmZXRjaCIsInByZWZldGNoUXVldWUiLCJidW1wIiwiZmxpZ2h0RGF0YSIsImNhbm9uaWNhbFVybE92ZXJyaWRlIiwicG9zdHBvbmVkIiwibmF2aWdhdGVkQXQiLCJEYXRlIiwibm93IiwiaXNGaXJzdFJlYWQiLCJsYXN0VXNlZFRpbWUiLCJhbGlhc2VkIiwidXJsV2l0aENhbm9uaWNhbFBhdGhuYW1lIiwiaGFuZGxlQWxpYXNlZFByZWZldGNoRW50cnkiLCJ1cGRhdGVkQ2Fub25pY2FsVXJsIiwic3BsaXQiLCJjdXJyZW50VHJlZSIsIm5vcm1hbGl6ZWRGbGlnaHREYXRhIiwicGF0aFRvU2VnbWVudCIsInNlZWREYXRhIiwiaGVhZCIsImlzSGVhZFBhcnRpYWwiLCJpc1Jvb3RSZW5kZXIiLCJmbGlnaHRTZWdtZW50UGF0aFdpdGhMZWFkaW5nRW1wdHkiLCJuZXdUcmVlIiwiYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlIiwidGFzayIsInN0YXJ0UFBSTmF2aWdhdGlvbiIsInJvdXRlIiwicGF0Y2hlZFJvdXRlclN0YXRlIiwibm9kZSIsImR5bmFtaWNSZXF1ZXN0VHJlZSIsImR5bmFtaWNSZXF1ZXN0IiwiZmV0Y2hTZXJ2ZXJSZXNwb25zZSIsIm9yaWdpbiIsImxpc3RlbkZvckR5bmFtaWNSZXF1ZXN0IiwiaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0IiwiY3JlYXRlRW1wdHlDYWNoZU5vZGUiLCJhcHBsaWVkIiwic3RhdHVzIiwiUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzIiwic3RhbGUiLCJhcHBseUZsaWdodERhdGEiLCJoYXJkTmF2aWdhdGUiLCJzaG91bGRIYXJkTmF2aWdhdGUiLCJpbnZhbGlkYXRlQ2FjaGVCZWxvd0ZsaWdodFNlZ21lbnRQYXRoIiwic3ViU2VnbWVudCIsInNjcm9sbGFibGVTZWdtZW50UGF0aCIsIkRFRkFVTFRfU0VHTUVOVF9LRVkiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js":
/*!******************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js ***!
  \******************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    prefetchQueue: function() {\n        return prefetchQueue;\n    },\n    prefetchReducer: function() {\n        return prefetchReducer;\n    }\n});\nconst _promisequeue = __webpack_require__(/*! ../../promise-queue */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/promise-queue.js\");\nconst _prefetchcacheutils = __webpack_require__(/*! ../prefetch-cache-utils */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/prefetch-cache-utils.js\");\nconst prefetchQueue = new _promisequeue.PromiseQueue(5);\nconst prefetchReducer =  false ? 0 : prefetchReducerImpl;\nfunction identityReducerWhenSegmentCacheIsEnabled(state) {\n    // Unlike the old implementation, the Segment Cache doesn't store its data in\n    // the router reducer state.\n    //\n    // This shouldn't be reachable because we wrap the prefetch API in a check,\n    // too, which prevents the action from being dispatched. But it's here for\n    // clarity + code elimination.\n    return state;\n}\nfunction prefetchReducerImpl(state, action) {\n    // let's prune the prefetch cache before we do anything else\n    (0, _prefetchcacheutils.prunePrefetchCache)(state.prefetchCache);\n    const { url } = action;\n    (0, _prefetchcacheutils.getOrCreatePrefetchCacheEntry)({\n        url,\n        nextUrl: state.nextUrl,\n        prefetchCache: state.prefetchCache,\n        kind: action.kind,\n        tree: state.tree,\n        allowAliasing: true\n    });\n    return state;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=prefetch-reducer.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9wcmVmZXRjaC1yZWR1Y2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQVVhQSxhQUFhO2VBQWJBOztJQUVBQyxlQUFlO2VBQWZBOzs7MENBUGdCO2dEQUl0QjtBQUNBLE1BQU1ELGdCQUFnQixJQUFJRSxjQUFBQSxZQUFZLENBQUM7QUFFdkMsTUFBTUQsa0JBQWtCRSxNQUF1QyxHQUNsRUcsQ0FBd0NBLEdBQ3hDQztBQUVKLFNBQVNELHlDQUE0Q0UsS0FBUTtJQUMzRCw2RUFBNkU7SUFDN0UsNEJBQTRCO0lBQzVCLEVBQUU7SUFDRiwyRUFBMkU7SUFDM0UsMEVBQTBFO0lBQzFFLDhCQUE4QjtJQUM5QixPQUFPQTtBQUNUO0FBRUEsU0FBU0Qsb0JBQ1BDLEtBQTJCLEVBQzNCQyxNQUFzQjtJQUV0Qiw0REFBNEQ7SUFDNURDLENBQUFBLEdBQUFBLG9CQUFBQSxrQkFBQUEsRUFBbUJGLE1BQU1HLGFBQWE7SUFFdEMsTUFBTSxFQUFFQyxHQUFHLEVBQUUsR0FBR0g7SUFFaEJJLENBQUFBLEdBQUFBLG9CQUFBQSw2QkFBQUEsRUFBOEI7UUFDNUJEO1FBQ0FFLFNBQVNOLE1BQU1NLE9BQU87UUFDdEJILGVBQWVILE1BQU1HLGFBQWE7UUFDbENJLE1BQU1OLE9BQU9NLElBQUk7UUFDakJDLE1BQU1SLE1BQU1RLElBQUk7UUFDaEJDLGVBQWU7SUFDakI7SUFFQSxPQUFPVDtBQUNUIiwic291cmNlcyI6WyIvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL3ByZWZldGNoLXJlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBQcmVmZXRjaEFjdGlvbixcbiAgUmVkdWNlclN0YXRlLFxuICBSZWFkb25seVJlZHVjZXJTdGF0ZSxcbn0gZnJvbSAnLi4vcm91dGVyLXJlZHVjZXItdHlwZXMnXG5pbXBvcnQgeyBQcm9taXNlUXVldWUgfSBmcm9tICcuLi8uLi9wcm9taXNlLXF1ZXVlJ1xuaW1wb3J0IHtcbiAgZ2V0T3JDcmVhdGVQcmVmZXRjaENhY2hlRW50cnksXG4gIHBydW5lUHJlZmV0Y2hDYWNoZSxcbn0gZnJvbSAnLi4vcHJlZmV0Y2gtY2FjaGUtdXRpbHMnXG5leHBvcnQgY29uc3QgcHJlZmV0Y2hRdWV1ZSA9IG5ldyBQcm9taXNlUXVldWUoNSlcblxuZXhwb3J0IGNvbnN0IHByZWZldGNoUmVkdWNlciA9IHByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRVxuICA/IGlkZW50aXR5UmVkdWNlcldoZW5TZWdtZW50Q2FjaGVJc0VuYWJsZWRcbiAgOiBwcmVmZXRjaFJlZHVjZXJJbXBsXG5cbmZ1bmN0aW9uIGlkZW50aXR5UmVkdWNlcldoZW5TZWdtZW50Q2FjaGVJc0VuYWJsZWQ8VD4oc3RhdGU6IFQpOiBUIHtcbiAgLy8gVW5saWtlIHRoZSBvbGQgaW1wbGVtZW50YXRpb24sIHRoZSBTZWdtZW50IENhY2hlIGRvZXNuJ3Qgc3RvcmUgaXRzIGRhdGEgaW5cbiAgLy8gdGhlIHJvdXRlciByZWR1Y2VyIHN0YXRlLlxuICAvL1xuICAvLyBUaGlzIHNob3VsZG4ndCBiZSByZWFjaGFibGUgYmVjYXVzZSB3ZSB3cmFwIHRoZSBwcmVmZXRjaCBBUEkgaW4gYSBjaGVjayxcbiAgLy8gdG9vLCB3aGljaCBwcmV2ZW50cyB0aGUgYWN0aW9uIGZyb20gYmVpbmcgZGlzcGF0Y2hlZC4gQnV0IGl0J3MgaGVyZSBmb3JcbiAgLy8gY2xhcml0eSArIGNvZGUgZWxpbWluYXRpb24uXG4gIHJldHVybiBzdGF0ZVxufVxuXG5mdW5jdGlvbiBwcmVmZXRjaFJlZHVjZXJJbXBsKFxuICBzdGF0ZTogUmVhZG9ubHlSZWR1Y2VyU3RhdGUsXG4gIGFjdGlvbjogUHJlZmV0Y2hBY3Rpb25cbik6IFJlZHVjZXJTdGF0ZSB7XG4gIC8vIGxldCdzIHBydW5lIHRoZSBwcmVmZXRjaCBjYWNoZSBiZWZvcmUgd2UgZG8gYW55dGhpbmcgZWxzZVxuICBwcnVuZVByZWZldGNoQ2FjaGUoc3RhdGUucHJlZmV0Y2hDYWNoZSlcblxuICBjb25zdCB7IHVybCB9ID0gYWN0aW9uXG5cbiAgZ2V0T3JDcmVhdGVQcmVmZXRjaENhY2hlRW50cnkoe1xuICAgIHVybCxcbiAgICBuZXh0VXJsOiBzdGF0ZS5uZXh0VXJsLFxuICAgIHByZWZldGNoQ2FjaGU6IHN0YXRlLnByZWZldGNoQ2FjaGUsXG4gICAga2luZDogYWN0aW9uLmtpbmQsXG4gICAgdHJlZTogc3RhdGUudHJlZSxcbiAgICBhbGxvd0FsaWFzaW5nOiB0cnVlLFxuICB9KVxuXG4gIHJldHVybiBzdGF0ZVxufVxuIl0sIm5hbWVzIjpbInByZWZldGNoUXVldWUiLCJwcmVmZXRjaFJlZHVjZXIiLCJQcm9taXNlUXVldWUiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX0NMSUVOVF9TRUdNRU5UX0NBQ0hFIiwiaWRlbnRpdHlSZWR1Y2VyV2hlblNlZ21lbnRDYWNoZUlzRW5hYmxlZCIsInByZWZldGNoUmVkdWNlckltcGwiLCJzdGF0ZSIsImFjdGlvbiIsInBydW5lUHJlZmV0Y2hDYWNoZSIsInByZWZldGNoQ2FjaGUiLCJ1cmwiLCJnZXRPckNyZWF0ZVByZWZldGNoQ2FjaGVFbnRyeSIsIm5leHRVcmwiLCJraW5kIiwidHJlZSIsImFsbG93QWxpYXNpbmciXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js":
/*!*****************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js ***!
  \*****************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"refreshReducer\", ({\n    enumerable: true,\n    get: function() {\n        return refreshReducer;\n    }\n}));\nconst _fetchserverresponse = __webpack_require__(/*! ../fetch-server-response */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _navigatereducer = __webpack_require__(/*! ./navigate-reducer */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ../fill-lazy-items-till-leaf-with-head */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router.js\");\nconst _handlesegmentmismatch = __webpack_require__(/*! ../handle-segment-mismatch */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js\");\nconst _hasinterceptionrouteincurrenttree = __webpack_require__(/*! ./has-interception-route-in-current-tree */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js\");\nconst _refetchinactiveparallelsegments = __webpack_require__(/*! ../refetch-inactive-parallel-segments */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/refetch-inactive-parallel-segments.js\");\nconst _segmentcache = __webpack_require__(/*! ../../segment-cache */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/segment-cache.js\");\nfunction refreshReducer(state, action) {\n    const { origin } = action;\n    const mutable = {};\n    const href = state.canonicalUrl;\n    let currentTree = state.tree;\n    mutable.preserveCustomHistoryState = false;\n    const cache = (0, _approuter.createEmptyCacheNode)();\n    // If the current tree was intercepted, the nextUrl should be included in the request.\n    // This is to ensure that the refresh request doesn't get intercepted, accidentally triggering the interception route.\n    const includeNextUrl = (0, _hasinterceptionrouteincurrenttree.hasInterceptionRouteInCurrentTree)(state.tree);\n    // TODO-APP: verify that `href` is not an external url.\n    // Fetch data from the root of the tree.\n    cache.lazyData = (0, _fetchserverresponse.fetchServerResponse)(new URL(href, origin), {\n        flightRouterState: [\n            currentTree[0],\n            currentTree[1],\n            currentTree[2],\n            'refetch'\n        ],\n        nextUrl: includeNextUrl ? state.nextUrl : null\n    });\n    const navigatedAt = Date.now();\n    return cache.lazyData.then(async (param)=>{\n        let { flightData, canonicalUrl: canonicalUrlOverride } = param;\n        // Handle case when navigating to page in `pages` from `app`\n        if (typeof flightData === 'string') {\n            return (0, _navigatereducer.handleExternalUrl)(state, mutable, flightData, state.pushRef.pendingPush);\n        }\n        // Remove cache.lazyData as it has been resolved at this point.\n        cache.lazyData = null;\n        for (const normalizedFlightData of flightData){\n            const { tree: treePatch, seedData: cacheNodeSeedData, head, isRootRender } = normalizedFlightData;\n            if (!isRootRender) {\n                // TODO-APP: handle this case better\n                console.log('REFRESH FAILED');\n                return state;\n            }\n            const newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTree)([\n                ''\n            ], currentTree, treePatch, state.canonicalUrl);\n            if (newTree === null) {\n                return (0, _handlesegmentmismatch.handleSegmentMismatch)(state, action, treePatch);\n            }\n            if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n                return (0, _navigatereducer.handleExternalUrl)(state, mutable, href, state.pushRef.pendingPush);\n            }\n            const canonicalUrlOverrideHref = canonicalUrlOverride ? (0, _createhreffromurl.createHrefFromUrl)(canonicalUrlOverride) : undefined;\n            if (canonicalUrlOverride) {\n                mutable.canonicalUrl = canonicalUrlOverrideHref;\n            }\n            // Handles case where prefetch only returns the router tree patch without rendered components.\n            if (cacheNodeSeedData !== null) {\n                const rsc = cacheNodeSeedData[1];\n                const loading = cacheNodeSeedData[3];\n                cache.rsc = rsc;\n                cache.prefetchRsc = null;\n                cache.loading = loading;\n                (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(navigatedAt, cache, undefined, treePatch, cacheNodeSeedData, head, undefined);\n                if (false) {} else {\n                    mutable.prefetchCache = new Map();\n                }\n            }\n            await (0, _refetchinactiveparallelsegments.refreshInactiveParallelSegments)({\n                navigatedAt,\n                state,\n                updatedTree: newTree,\n                updatedCache: cache,\n                includeNextUrl,\n                canonicalUrl: mutable.canonicalUrl || state.canonicalUrl\n            });\n            mutable.cache = cache;\n            mutable.patchedTree = newTree;\n            currentTree = newTree;\n        }\n        return (0, _handlemutable.handleMutable)(state, mutable);\n    }, ()=>state);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=refresh-reducer.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9yZWZyZXNoLXJlZHVjZXIuanMiLCJtYXBwaW5ncyI6Ijs7OztrREFvQmdCQTs7O2VBQUFBOzs7aURBcEJvQjsrQ0FDRjt5REFDVTt5REFDQTs2Q0FPVjsyQ0FDSjsyREFFZ0I7dUNBQ1Q7bURBQ0M7K0RBQ1k7NkRBQ0Y7MENBQ1Y7QUFFL0IsU0FBU0EsZUFDZEMsS0FBMkIsRUFDM0JDLE1BQXFCO0lBRXJCLE1BQU0sRUFBRUMsTUFBTSxFQUFFLEdBQUdEO0lBQ25CLE1BQU1FLFVBQW1CLENBQUM7SUFDMUIsTUFBTUMsT0FBT0osTUFBTUssWUFBWTtJQUUvQixJQUFJQyxjQUFjTixNQUFNTyxJQUFJO0lBRTVCSixRQUFRSywwQkFBMEIsR0FBRztJQUVyQyxNQUFNQyxRQUFtQkMsQ0FBQUEsR0FBQUEsV0FBQUEsb0JBQUFBO0lBRXpCLHNGQUFzRjtJQUN0RixzSEFBc0g7SUFDdEgsTUFBTUMsaUJBQWlCQyxDQUFBQSxHQUFBQSxtQ0FBQUEsaUNBQWlDLEVBQUNaLE1BQU1PLElBQUk7SUFFbkUsdURBQXVEO0lBQ3ZELHdDQUF3QztJQUN4Q0UsTUFBTUksUUFBUSxHQUFHQyxDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQUFBLEVBQW9CLElBQUlDLElBQUlYLE1BQU1GLFNBQVM7UUFDMURjLG1CQUFtQjtZQUNqQlYsV0FBVyxDQUFDLEVBQUU7WUFDZEEsV0FBVyxDQUFDLEVBQUU7WUFDZEEsV0FBVyxDQUFDLEVBQUU7WUFDZDtTQUNEO1FBQ0RXLFNBQVNOLGlCQUFpQlgsTUFBTWlCLE9BQU8sR0FBRztJQUM1QztJQUVBLE1BQU1DLGNBQWNDLEtBQUtDLEdBQUc7SUFDNUIsT0FBT1gsTUFBTUksUUFBUSxDQUFDUSxJQUFJLENBQ3hCO1lBQU8sRUFBRUMsVUFBVSxFQUFFakIsY0FBY2tCLG9CQUFvQixFQUFFO1FBQ3ZELDREQUE0RDtRQUM1RCxJQUFJLE9BQU9ELGVBQWUsVUFBVTtZQUNsQyxPQUFPRSxDQUFBQSxHQUFBQSxpQkFBQUEsaUJBQUFBLEVBQ0x4QixPQUNBRyxTQUNBbUIsWUFDQXRCLE1BQU15QixPQUFPLENBQUNDLFdBQVc7UUFFN0I7UUFFQSwrREFBK0Q7UUFDL0RqQixNQUFNSSxRQUFRLEdBQUc7UUFFakIsS0FBSyxNQUFNYyx3QkFBd0JMLFdBQVk7WUFDN0MsTUFBTSxFQUNKZixNQUFNcUIsU0FBUyxFQUNmQyxVQUFVQyxpQkFBaUIsRUFDM0JDLElBQUksRUFDSkMsWUFBWSxFQUNiLEdBQUdMO1lBRUosSUFBSSxDQUFDSyxjQUFjO2dCQUNqQixvQ0FBb0M7Z0JBQ3BDQyxRQUFRQyxHQUFHLENBQUM7Z0JBQ1osT0FBT2xDO1lBQ1Q7WUFFQSxNQUFNbUMsVUFBVUMsQ0FBQUEsR0FBQUEsNkJBQUFBLDJCQUFBQSxFQUNkO2dCQUNDO2FBQUcsRUFDSjlCLGFBQ0FzQixXQUNBNUIsTUFBTUssWUFBWTtZQUdwQixJQUFJOEIsWUFBWSxNQUFNO2dCQUNwQixPQUFPRSxDQUFBQSxHQUFBQSx1QkFBQUEscUJBQUFBLEVBQXNCckMsT0FBT0MsUUFBUTJCO1lBQzlDO1lBRUEsSUFBSVUsQ0FBQUEsR0FBQUEsNkJBQUFBLDJCQUFBQSxFQUE0QmhDLGFBQWE2QixVQUFVO2dCQUNyRCxPQUFPWCxDQUFBQSxHQUFBQSxpQkFBQUEsaUJBQUFBLEVBQ0x4QixPQUNBRyxTQUNBQyxNQUNBSixNQUFNeUIsT0FBTyxDQUFDQyxXQUFXO1lBRTdCO1lBRUEsTUFBTWEsMkJBQTJCaEIsdUJBQzdCaUIsQ0FBQUEsR0FBQUEsbUJBQUFBLGlCQUFBQSxFQUFrQmpCLHdCQUNsQmtCO1lBRUosSUFBSWxCLHNCQUFzQjtnQkFDeEJwQixRQUFRRSxZQUFZLEdBQUdrQztZQUN6QjtZQUVBLDhGQUE4RjtZQUM5RixJQUFJVCxzQkFBc0IsTUFBTTtnQkFDOUIsTUFBTVksTUFBTVosaUJBQWlCLENBQUMsRUFBRTtnQkFDaEMsTUFBTWEsVUFBVWIsaUJBQWlCLENBQUMsRUFBRTtnQkFDcENyQixNQUFNaUMsR0FBRyxHQUFHQTtnQkFDWmpDLE1BQU1tQyxXQUFXLEdBQUc7Z0JBQ3BCbkMsTUFBTWtDLE9BQU8sR0FBR0E7Z0JBQ2hCRSxDQUFBQSxHQUFBQSwrQkFBQUEsNkJBQUFBLEVBQ0UzQixhQUNBVCxPQUNBLFdBRUFtQixXQUNBRSxtQkFDQUMsTUFDQVU7Z0JBRUYsSUFBSUssS0FBdUMsRUFBRSxFQUU1QyxNQUFNO29CQUNMM0MsUUFBUStDLGFBQWEsR0FBRyxJQUFJQztnQkFDOUI7WUFDRjtZQUVBLE1BQU1DLENBQUFBLEdBQUFBLGlDQUFBQSwrQkFBQUEsRUFBZ0M7Z0JBQ3BDbEM7Z0JBQ0FsQjtnQkFDQXFELGFBQWFsQjtnQkFDYm1CLGNBQWM3QztnQkFDZEU7Z0JBQ0FOLGNBQWNGLFFBQVFFLFlBQVksSUFBSUwsTUFBTUssWUFBWTtZQUMxRDtZQUVBRixRQUFRTSxLQUFLLEdBQUdBO1lBQ2hCTixRQUFRb0QsV0FBVyxHQUFHcEI7WUFFdEI3QixjQUFjNkI7UUFDaEI7UUFFQSxPQUFPcUIsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBY3hELE9BQU9HO0lBQzlCLEdBQ0EsSUFBTUg7QUFFViIsInNvdXJjZXMiOlsiL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9yZWZyZXNoLXJlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmV0Y2hTZXJ2ZXJSZXNwb25zZSB9IGZyb20gJy4uL2ZldGNoLXNlcnZlci1yZXNwb25zZSdcbmltcG9ydCB7IGNyZWF0ZUhyZWZGcm9tVXJsIH0gZnJvbSAnLi4vY3JlYXRlLWhyZWYtZnJvbS11cmwnXG5pbXBvcnQgeyBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWUgfSBmcm9tICcuLi9hcHBseS1yb3V0ZXItc3RhdGUtcGF0Y2gtdG8tdHJlZSdcbmltcG9ydCB7IGlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dCB9IGZyb20gJy4uL2lzLW5hdmlnYXRpbmctdG8tbmV3LXJvb3QtbGF5b3V0J1xuaW1wb3J0IHR5cGUge1xuICBNdXRhYmxlLFxuICBSZWFkb25seVJlZHVjZXJTdGF0ZSxcbiAgUmVkdWNlclN0YXRlLFxuICBSZWZyZXNoQWN0aW9uLFxufSBmcm9tICcuLi9yb3V0ZXItcmVkdWNlci10eXBlcydcbmltcG9ydCB7IGhhbmRsZUV4dGVybmFsVXJsIH0gZnJvbSAnLi9uYXZpZ2F0ZS1yZWR1Y2VyJ1xuaW1wb3J0IHsgaGFuZGxlTXV0YWJsZSB9IGZyb20gJy4uL2hhbmRsZS1tdXRhYmxlJ1xuaW1wb3J0IHR5cGUgeyBDYWNoZU5vZGUgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IGZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkIH0gZnJvbSAnLi4vZmlsbC1sYXp5LWl0ZW1zLXRpbGwtbGVhZi13aXRoLWhlYWQnXG5pbXBvcnQgeyBjcmVhdGVFbXB0eUNhY2hlTm9kZSB9IGZyb20gJy4uLy4uL2FwcC1yb3V0ZXInXG5pbXBvcnQgeyBoYW5kbGVTZWdtZW50TWlzbWF0Y2ggfSBmcm9tICcuLi9oYW5kbGUtc2VnbWVudC1taXNtYXRjaCdcbmltcG9ydCB7IGhhc0ludGVyY2VwdGlvblJvdXRlSW5DdXJyZW50VHJlZSB9IGZyb20gJy4vaGFzLWludGVyY2VwdGlvbi1yb3V0ZS1pbi1jdXJyZW50LXRyZWUnXG5pbXBvcnQgeyByZWZyZXNoSW5hY3RpdmVQYXJhbGxlbFNlZ21lbnRzIH0gZnJvbSAnLi4vcmVmZXRjaC1pbmFjdGl2ZS1wYXJhbGxlbC1zZWdtZW50cydcbmltcG9ydCB7IHJldmFsaWRhdGVFbnRpcmVDYWNoZSB9IGZyb20gJy4uLy4uL3NlZ21lbnQtY2FjaGUnXG5cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoUmVkdWNlcihcbiAgc3RhdGU6IFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBhY3Rpb246IFJlZnJlc2hBY3Rpb25cbik6IFJlZHVjZXJTdGF0ZSB7XG4gIGNvbnN0IHsgb3JpZ2luIH0gPSBhY3Rpb25cbiAgY29uc3QgbXV0YWJsZTogTXV0YWJsZSA9IHt9XG4gIGNvbnN0IGhyZWYgPSBzdGF0ZS5jYW5vbmljYWxVcmxcblxuICBsZXQgY3VycmVudFRyZWUgPSBzdGF0ZS50cmVlXG5cbiAgbXV0YWJsZS5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSA9IGZhbHNlXG5cbiAgY29uc3QgY2FjaGU6IENhY2hlTm9kZSA9IGNyZWF0ZUVtcHR5Q2FjaGVOb2RlKClcblxuICAvLyBJZiB0aGUgY3VycmVudCB0cmVlIHdhcyBpbnRlcmNlcHRlZCwgdGhlIG5leHRVcmwgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSByZXF1ZXN0LlxuICAvLyBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSByZWZyZXNoIHJlcXVlc3QgZG9lc24ndCBnZXQgaW50ZXJjZXB0ZWQsIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIHRoZSBpbnRlcmNlcHRpb24gcm91dGUuXG4gIGNvbnN0IGluY2x1ZGVOZXh0VXJsID0gaGFzSW50ZXJjZXB0aW9uUm91dGVJbkN1cnJlbnRUcmVlKHN0YXRlLnRyZWUpXG5cbiAgLy8gVE9ETy1BUFA6IHZlcmlmeSB0aGF0IGBocmVmYCBpcyBub3QgYW4gZXh0ZXJuYWwgdXJsLlxuICAvLyBGZXRjaCBkYXRhIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHRyZWUuXG4gIGNhY2hlLmxhenlEYXRhID0gZmV0Y2hTZXJ2ZXJSZXNwb25zZShuZXcgVVJMKGhyZWYsIG9yaWdpbiksIHtcbiAgICBmbGlnaHRSb3V0ZXJTdGF0ZTogW1xuICAgICAgY3VycmVudFRyZWVbMF0sXG4gICAgICBjdXJyZW50VHJlZVsxXSxcbiAgICAgIGN1cnJlbnRUcmVlWzJdLFxuICAgICAgJ3JlZmV0Y2gnLFxuICAgIF0sXG4gICAgbmV4dFVybDogaW5jbHVkZU5leHRVcmwgPyBzdGF0ZS5uZXh0VXJsIDogbnVsbCxcbiAgfSlcblxuICBjb25zdCBuYXZpZ2F0ZWRBdCA9IERhdGUubm93KClcbiAgcmV0dXJuIGNhY2hlLmxhenlEYXRhLnRoZW4oXG4gICAgYXN5bmMgKHsgZmxpZ2h0RGF0YSwgY2Fub25pY2FsVXJsOiBjYW5vbmljYWxVcmxPdmVycmlkZSB9KSA9PiB7XG4gICAgICAvLyBIYW5kbGUgY2FzZSB3aGVuIG5hdmlnYXRpbmcgdG8gcGFnZSBpbiBgcGFnZXNgIGZyb20gYGFwcGBcbiAgICAgIGlmICh0eXBlb2YgZmxpZ2h0RGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZUV4dGVybmFsVXJsKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIG11dGFibGUsXG4gICAgICAgICAgZmxpZ2h0RGF0YSxcbiAgICAgICAgICBzdGF0ZS5wdXNoUmVmLnBlbmRpbmdQdXNoXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gUmVtb3ZlIGNhY2hlLmxhenlEYXRhIGFzIGl0IGhhcyBiZWVuIHJlc29sdmVkIGF0IHRoaXMgcG9pbnQuXG4gICAgICBjYWNoZS5sYXp5RGF0YSA9IG51bGxcblxuICAgICAgZm9yIChjb25zdCBub3JtYWxpemVkRmxpZ2h0RGF0YSBvZiBmbGlnaHREYXRhKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICB0cmVlOiB0cmVlUGF0Y2gsXG4gICAgICAgICAgc2VlZERhdGE6IGNhY2hlTm9kZVNlZWREYXRhLFxuICAgICAgICAgIGhlYWQsXG4gICAgICAgICAgaXNSb290UmVuZGVyLFxuICAgICAgICB9ID0gbm9ybWFsaXplZEZsaWdodERhdGFcblxuICAgICAgICBpZiAoIWlzUm9vdFJlbmRlcikge1xuICAgICAgICAgIC8vIFRPRE8tQVBQOiBoYW5kbGUgdGhpcyBjYXNlIGJldHRlclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdSRUZSRVNIIEZBSUxFRCcpXG4gICAgICAgICAgcmV0dXJuIHN0YXRlXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdUcmVlID0gYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlKFxuICAgICAgICAgIC8vIFRPRE8tQVBQOiByZW1vdmUgJydcbiAgICAgICAgICBbJyddLFxuICAgICAgICAgIGN1cnJlbnRUcmVlLFxuICAgICAgICAgIHRyZWVQYXRjaCxcbiAgICAgICAgICBzdGF0ZS5jYW5vbmljYWxVcmxcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChuZXdUcmVlID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZVNlZ21lbnRNaXNtYXRjaChzdGF0ZSwgYWN0aW9uLCB0cmVlUGF0Y2gpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0KGN1cnJlbnRUcmVlLCBuZXdUcmVlKSkge1xuICAgICAgICAgIHJldHVybiBoYW5kbGVFeHRlcm5hbFVybChcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgbXV0YWJsZSxcbiAgICAgICAgICAgIGhyZWYsXG4gICAgICAgICAgICBzdGF0ZS5wdXNoUmVmLnBlbmRpbmdQdXNoXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2Fub25pY2FsVXJsT3ZlcnJpZGVIcmVmID0gY2Fub25pY2FsVXJsT3ZlcnJpZGVcbiAgICAgICAgICA/IGNyZWF0ZUhyZWZGcm9tVXJsKGNhbm9uaWNhbFVybE92ZXJyaWRlKVxuICAgICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgICAgaWYgKGNhbm9uaWNhbFVybE92ZXJyaWRlKSB7XG4gICAgICAgICAgbXV0YWJsZS5jYW5vbmljYWxVcmwgPSBjYW5vbmljYWxVcmxPdmVycmlkZUhyZWZcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZXMgY2FzZSB3aGVyZSBwcmVmZXRjaCBvbmx5IHJldHVybnMgdGhlIHJvdXRlciB0cmVlIHBhdGNoIHdpdGhvdXQgcmVuZGVyZWQgY29tcG9uZW50cy5cbiAgICAgICAgaWYgKGNhY2hlTm9kZVNlZWREYXRhICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgcnNjID0gY2FjaGVOb2RlU2VlZERhdGFbMV1cbiAgICAgICAgICBjb25zdCBsb2FkaW5nID0gY2FjaGVOb2RlU2VlZERhdGFbM11cbiAgICAgICAgICBjYWNoZS5yc2MgPSByc2NcbiAgICAgICAgICBjYWNoZS5wcmVmZXRjaFJzYyA9IG51bGxcbiAgICAgICAgICBjYWNoZS5sb2FkaW5nID0gbG9hZGluZ1xuICAgICAgICAgIGZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkKFxuICAgICAgICAgICAgbmF2aWdhdGVkQXQsXG4gICAgICAgICAgICBjYWNoZSxcbiAgICAgICAgICAgIC8vIEV4aXN0aW5nIGNhY2hlIGlzIG5vdCBwYXNzZWQgaW4gYXMgYHJvdXRlci5yZWZyZXNoKClgIGhhcyB0byBpbnZhbGlkYXRlIHRoZSBlbnRpcmUgY2FjaGUuXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB0cmVlUGF0Y2gsXG4gICAgICAgICAgICBjYWNoZU5vZGVTZWVkRGF0YSxcbiAgICAgICAgICAgIGhlYWQsXG4gICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRSkge1xuICAgICAgICAgICAgcmV2YWxpZGF0ZUVudGlyZUNhY2hlKHN0YXRlLm5leHRVcmwsIG5ld1RyZWUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG11dGFibGUucHJlZmV0Y2hDYWNoZSA9IG5ldyBNYXAoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJlZnJlc2hJbmFjdGl2ZVBhcmFsbGVsU2VnbWVudHMoe1xuICAgICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIHVwZGF0ZWRUcmVlOiBuZXdUcmVlLFxuICAgICAgICAgIHVwZGF0ZWRDYWNoZTogY2FjaGUsXG4gICAgICAgICAgaW5jbHVkZU5leHRVcmwsXG4gICAgICAgICAgY2Fub25pY2FsVXJsOiBtdXRhYmxlLmNhbm9uaWNhbFVybCB8fCBzdGF0ZS5jYW5vbmljYWxVcmwsXG4gICAgICAgIH0pXG5cbiAgICAgICAgbXV0YWJsZS5jYWNoZSA9IGNhY2hlXG4gICAgICAgIG11dGFibGUucGF0Y2hlZFRyZWUgPSBuZXdUcmVlXG5cbiAgICAgICAgY3VycmVudFRyZWUgPSBuZXdUcmVlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoYW5kbGVNdXRhYmxlKHN0YXRlLCBtdXRhYmxlKVxuICAgIH0sXG4gICAgKCkgPT4gc3RhdGVcbiAgKVxufVxuIl0sIm5hbWVzIjpbInJlZnJlc2hSZWR1Y2VyIiwic3RhdGUiLCJhY3Rpb24iLCJvcmlnaW4iLCJtdXRhYmxlIiwiaHJlZiIsImNhbm9uaWNhbFVybCIsImN1cnJlbnRUcmVlIiwidHJlZSIsInByZXNlcnZlQ3VzdG9tSGlzdG9yeVN0YXRlIiwiY2FjaGUiLCJjcmVhdGVFbXB0eUNhY2hlTm9kZSIsImluY2x1ZGVOZXh0VXJsIiwiaGFzSW50ZXJjZXB0aW9uUm91dGVJbkN1cnJlbnRUcmVlIiwibGF6eURhdGEiLCJmZXRjaFNlcnZlclJlc3BvbnNlIiwiVVJMIiwiZmxpZ2h0Um91dGVyU3RhdGUiLCJuZXh0VXJsIiwibmF2aWdhdGVkQXQiLCJEYXRlIiwibm93IiwidGhlbiIsImZsaWdodERhdGEiLCJjYW5vbmljYWxVcmxPdmVycmlkZSIsImhhbmRsZUV4dGVybmFsVXJsIiwicHVzaFJlZiIsInBlbmRpbmdQdXNoIiwibm9ybWFsaXplZEZsaWdodERhdGEiLCJ0cmVlUGF0Y2giLCJzZWVkRGF0YSIsImNhY2hlTm9kZVNlZWREYXRhIiwiaGVhZCIsImlzUm9vdFJlbmRlciIsImNvbnNvbGUiLCJsb2ciLCJuZXdUcmVlIiwiYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlIiwiaGFuZGxlU2VnbWVudE1pc21hdGNoIiwiaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0IiwiY2Fub25pY2FsVXJsT3ZlcnJpZGVIcmVmIiwiY3JlYXRlSHJlZkZyb21VcmwiLCJ1bmRlZmluZWQiLCJyc2MiLCJsb2FkaW5nIiwicHJlZmV0Y2hSc2MiLCJmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEUiLCJyZXZhbGlkYXRlRW50aXJlQ2FjaGUiLCJwcmVmZXRjaENhY2hlIiwiTWFwIiwicmVmcmVzaEluYWN0aXZlUGFyYWxsZWxTZWdtZW50cyIsInVwZGF0ZWRUcmVlIiwidXBkYXRlZENhY2hlIiwicGF0Y2hlZFRyZWUiLCJoYW5kbGVNdXRhYmxlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js":
/*!*****************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js ***!
  \*****************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"restoreReducer\", ({\n    enumerable: true,\n    get: function() {\n        return restoreReducer;\n    }\n}));\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _computechangedpath = __webpack_require__(/*! ../compute-changed-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js\");\nconst _pprnavigations = __webpack_require__(/*! ../ppr-navigations */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/ppr-navigations.js\");\nfunction restoreReducer(state, action) {\n    const { url, tree } = action;\n    const href = (0, _createhreffromurl.createHrefFromUrl)(url);\n    // This action is used to restore the router state from the history state.\n    // However, it's possible that the history state no longer contains the `FlightRouterState`.\n    // We will copy over the internal state on pushState/replaceState events, but if a history entry\n    // occurred before hydration, or if the user navigated to a hash using a regular anchor link,\n    // the history state will not contain the `FlightRouterState`.\n    // In this case, we'll continue to use the existing tree so the router doesn't get into an invalid state.\n    const treeToRestore = tree || state.tree;\n    const oldCache = state.cache;\n    const newCache =  false ? // prevents an unnecessary flash back to PPR state during a\n    // back/forward navigation.\n    0 : oldCache;\n    var _extractPathFromFlightRouterState;\n    return {\n        // Set canonical url\n        canonicalUrl: href,\n        pushRef: {\n            pendingPush: false,\n            mpaNavigation: false,\n            // Ensures that the custom history state that was set is preserved when applying this update.\n            preserveCustomHistoryState: true\n        },\n        focusAndScrollRef: state.focusAndScrollRef,\n        cache: newCache,\n        prefetchCache: state.prefetchCache,\n        // Restore provided tree\n        tree: treeToRestore,\n        nextUrl: (_extractPathFromFlightRouterState = (0, _computechangedpath.extractPathFromFlightRouterState)(treeToRestore)) != null ? _extractPathFromFlightRouterState : url.pathname\n    };\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=restore-reducer.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9yZXN0b3JlLXJlZHVjZXIuanMiLCJtYXBwaW5ncyI6Ijs7OztrREFTZ0JBOzs7ZUFBQUE7OzsrQ0FUa0I7Z0RBTWU7NENBQ0k7QUFFOUMsU0FBU0EsZUFDZEMsS0FBMkIsRUFDM0JDLE1BQXFCO0lBRXJCLE1BQU0sRUFBRUMsR0FBRyxFQUFFQyxJQUFJLEVBQUUsR0FBR0Y7SUFDdEIsTUFBTUcsT0FBT0MsQ0FBQUEsR0FBQUEsbUJBQUFBLGlCQUFBQSxFQUFrQkg7SUFDL0IsMEVBQTBFO0lBQzFFLDRGQUE0RjtJQUM1RixnR0FBZ0c7SUFDaEcsNkZBQTZGO0lBQzdGLDhEQUE4RDtJQUM5RCx5R0FBeUc7SUFDekcsTUFBTUksZ0JBQWdCSCxRQUFRSCxNQUFNRyxJQUFJO0lBRXhDLE1BQU1JLFdBQVdQLE1BQU1RLEtBQUs7SUFDNUIsTUFBTUMsV0FBV0MsTUFBc0IsR0FFbkMsMkRBQzJEO0lBQzNELDJCQUEyQjtJQUMzQkcsQ0FBNkRQLEdBQzdEQztRQWdCT087SUFkWCxPQUFPO1FBQ0wsb0JBQW9CO1FBQ3BCQyxjQUFjWDtRQUNkWSxTQUFTO1lBQ1BDLGFBQWE7WUFDYkMsZUFBZTtZQUNmLDZGQUE2RjtZQUM3RkMsNEJBQTRCO1FBQzlCO1FBQ0FDLG1CQUFtQnBCLE1BQU1vQixpQkFBaUI7UUFDMUNaLE9BQU9DO1FBQ1BZLGVBQWVyQixNQUFNcUIsYUFBYTtRQUNsQyx3QkFBd0I7UUFDeEJsQixNQUFNRztRQUNOZ0IsU0FBU1IsQ0FBQUEsb0NBQUFBLENBQUFBLEdBQUFBLG9CQUFBQSxnQ0FBQUEsRUFBaUNSLGNBQUFBLEtBQUFBLE9BQWpDUSxvQ0FBbURaLElBQUlxQixRQUFRO0lBQzFFO0FBQ0YiLCJzb3VyY2VzIjpbIi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvcmVzdG9yZS1yZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhyZWZGcm9tVXJsIH0gZnJvbSAnLi4vY3JlYXRlLWhyZWYtZnJvbS11cmwnXG5pbXBvcnQgdHlwZSB7XG4gIFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBSZWR1Y2VyU3RhdGUsXG4gIFJlc3RvcmVBY3Rpb24sXG59IGZyb20gJy4uL3JvdXRlci1yZWR1Y2VyLXR5cGVzJ1xuaW1wb3J0IHsgZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUgfSBmcm9tICcuLi9jb21wdXRlLWNoYW5nZWQtcGF0aCdcbmltcG9ydCB7IHVwZGF0ZUNhY2hlTm9kZU9uUG9wc3RhdGVSZXN0b3JhdGlvbiB9IGZyb20gJy4uL3Bwci1uYXZpZ2F0aW9ucydcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc3RvcmVSZWR1Y2VyKFxuICBzdGF0ZTogUmVhZG9ubHlSZWR1Y2VyU3RhdGUsXG4gIGFjdGlvbjogUmVzdG9yZUFjdGlvblxuKTogUmVkdWNlclN0YXRlIHtcbiAgY29uc3QgeyB1cmwsIHRyZWUgfSA9IGFjdGlvblxuICBjb25zdCBocmVmID0gY3JlYXRlSHJlZkZyb21VcmwodXJsKVxuICAvLyBUaGlzIGFjdGlvbiBpcyB1c2VkIHRvIHJlc3RvcmUgdGhlIHJvdXRlciBzdGF0ZSBmcm9tIHRoZSBoaXN0b3J5IHN0YXRlLlxuICAvLyBIb3dldmVyLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGhpc3Rvcnkgc3RhdGUgbm8gbG9uZ2VyIGNvbnRhaW5zIHRoZSBgRmxpZ2h0Um91dGVyU3RhdGVgLlxuICAvLyBXZSB3aWxsIGNvcHkgb3ZlciB0aGUgaW50ZXJuYWwgc3RhdGUgb24gcHVzaFN0YXRlL3JlcGxhY2VTdGF0ZSBldmVudHMsIGJ1dCBpZiBhIGhpc3RvcnkgZW50cnlcbiAgLy8gb2NjdXJyZWQgYmVmb3JlIGh5ZHJhdGlvbiwgb3IgaWYgdGhlIHVzZXIgbmF2aWdhdGVkIHRvIGEgaGFzaCB1c2luZyBhIHJlZ3VsYXIgYW5jaG9yIGxpbmssXG4gIC8vIHRoZSBoaXN0b3J5IHN0YXRlIHdpbGwgbm90IGNvbnRhaW4gdGhlIGBGbGlnaHRSb3V0ZXJTdGF0ZWAuXG4gIC8vIEluIHRoaXMgY2FzZSwgd2UnbGwgY29udGludWUgdG8gdXNlIHRoZSBleGlzdGluZyB0cmVlIHNvIHRoZSByb3V0ZXIgZG9lc24ndCBnZXQgaW50byBhbiBpbnZhbGlkIHN0YXRlLlxuICBjb25zdCB0cmVlVG9SZXN0b3JlID0gdHJlZSB8fCBzdGF0ZS50cmVlXG5cbiAgY29uc3Qgb2xkQ2FjaGUgPSBzdGF0ZS5jYWNoZVxuICBjb25zdCBuZXdDYWNoZSA9IHByb2Nlc3MuZW52Ll9fTkVYVF9QUFJcbiAgICA/IC8vIFdoZW4gUFBSIGlzIGVuYWJsZWQsIHdlIHVwZGF0ZSB0aGUgY2FjaGUgdG8gZHJvcCB0aGUgcHJlZmV0Y2hcbiAgICAgIC8vIGRhdGEgZm9yIGFueSBzZWdtZW50IHdob3NlIGR5bmFtaWMgZGF0YSB3YXMgYWxyZWFkeSByZWNlaXZlZC4gVGhpc1xuICAgICAgLy8gcHJldmVudHMgYW4gdW5uZWNlc3NhcnkgZmxhc2ggYmFjayB0byBQUFIgc3RhdGUgZHVyaW5nIGFcbiAgICAgIC8vIGJhY2svZm9yd2FyZCBuYXZpZ2F0aW9uLlxuICAgICAgdXBkYXRlQ2FjaGVOb2RlT25Qb3BzdGF0ZVJlc3RvcmF0aW9uKG9sZENhY2hlLCB0cmVlVG9SZXN0b3JlKVxuICAgIDogb2xkQ2FjaGVcblxuICByZXR1cm4ge1xuICAgIC8vIFNldCBjYW5vbmljYWwgdXJsXG4gICAgY2Fub25pY2FsVXJsOiBocmVmLFxuICAgIHB1c2hSZWY6IHtcbiAgICAgIHBlbmRpbmdQdXNoOiBmYWxzZSxcbiAgICAgIG1wYU5hdmlnYXRpb246IGZhbHNlLFxuICAgICAgLy8gRW5zdXJlcyB0aGF0IHRoZSBjdXN0b20gaGlzdG9yeSBzdGF0ZSB0aGF0IHdhcyBzZXQgaXMgcHJlc2VydmVkIHdoZW4gYXBwbHlpbmcgdGhpcyB1cGRhdGUuXG4gICAgICBwcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZTogdHJ1ZSxcbiAgICB9LFxuICAgIGZvY3VzQW5kU2Nyb2xsUmVmOiBzdGF0ZS5mb2N1c0FuZFNjcm9sbFJlZixcbiAgICBjYWNoZTogbmV3Q2FjaGUsXG4gICAgcHJlZmV0Y2hDYWNoZTogc3RhdGUucHJlZmV0Y2hDYWNoZSxcbiAgICAvLyBSZXN0b3JlIHByb3ZpZGVkIHRyZWVcbiAgICB0cmVlOiB0cmVlVG9SZXN0b3JlLFxuICAgIG5leHRVcmw6IGV4dHJhY3RQYXRoRnJvbUZsaWdodFJvdXRlclN0YXRlKHRyZWVUb1Jlc3RvcmUpID8/IHVybC5wYXRobmFtZSxcbiAgfVxufVxuIl0sIm5hbWVzIjpbInJlc3RvcmVSZWR1Y2VyIiwic3RhdGUiLCJhY3Rpb24iLCJ1cmwiLCJ0cmVlIiwiaHJlZiIsImNyZWF0ZUhyZWZGcm9tVXJsIiwidHJlZVRvUmVzdG9yZSIsIm9sZENhY2hlIiwiY2FjaGUiLCJuZXdDYWNoZSIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfUFBSIiwidXBkYXRlQ2FjaGVOb2RlT25Qb3BzdGF0ZVJlc3RvcmF0aW9uIiwiZXh0cmFjdFBhdGhGcm9tRmxpZ2h0Um91dGVyU3RhdGUiLCJjYW5vbmljYWxVcmwiLCJwdXNoUmVmIiwicGVuZGluZ1B1c2giLCJtcGFOYXZpZ2F0aW9uIiwicHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUiLCJmb2N1c0FuZFNjcm9sbFJlZiIsInByZWZldGNoQ2FjaGUiLCJuZXh0VXJsIiwicGF0aG5hbWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js":
/*!***********************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js ***!
  \***********************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"serverActionReducer\", ({\n    enumerable: true,\n    get: function() {\n        return serverActionReducer;\n    }\n}));\nconst _appcallserver = __webpack_require__(/*! ../../../app-call-server */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-call-server.js\");\nconst _appfindsourcemapurl = __webpack_require__(/*! ../../../app-find-source-map-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-find-source-map-url.js\");\nconst _approuterheaders = __webpack_require__(/*! ../../app-router-headers */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router-headers.js\");\nconst _client = __webpack_require__(/*! react-server-dom-webpack/client */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-server-dom-webpack/client.browser.js\");\nconst _routerreducertypes = __webpack_require__(/*! ../router-reducer-types */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _assignlocation = __webpack_require__(/*! ../../../assign-location */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/assign-location.js\");\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _navigatereducer = __webpack_require__(/*! ./navigate-reducer */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _filllazyitemstillleafwithhead = __webpack_require__(/*! ../fill-lazy-items-till-leaf-with-head */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fill-lazy-items-till-leaf-with-head.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router.js\");\nconst _hasinterceptionrouteincurrenttree = __webpack_require__(/*! ./has-interception-route-in-current-tree */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js\");\nconst _handlesegmentmismatch = __webpack_require__(/*! ../handle-segment-mismatch */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/handle-segment-mismatch.js\");\nconst _refetchinactiveparallelsegments = __webpack_require__(/*! ../refetch-inactive-parallel-segments */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/refetch-inactive-parallel-segments.js\");\nconst _flightdatahelpers = __webpack_require__(/*! ../../../flight-data-helpers */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/flight-data-helpers.js\");\nconst _redirect = __webpack_require__(/*! ../../redirect */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect.js\");\nconst _redirecterror = __webpack_require__(/*! ../../redirect-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/redirect-error.js\");\nconst _prefetchcacheutils = __webpack_require__(/*! ../prefetch-cache-utils */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/prefetch-cache-utils.js\");\nconst _removebasepath = __webpack_require__(/*! ../../../remove-base-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/remove-base-path.js\");\nconst _hasbasepath = __webpack_require__(/*! ../../../has-base-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/has-base-path.js\");\nconst _serverreferenceinfo = __webpack_require__(/*! ../../../../shared/lib/server-reference-info */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/server-reference-info.js\");\nconst _segmentcache = __webpack_require__(/*! ../../segment-cache */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/segment-cache.js\");\nconst createFromFetch = _client.createFromFetch;\nasync function fetchServerAction(state, nextUrl, param) {\n    let { actionId, actionArgs } = param;\n    const temporaryReferences = (0, _client.createTemporaryReferenceSet)();\n    const info = (0, _serverreferenceinfo.extractInfoFromServerReferenceId)(actionId);\n    // TODO: Currently, we're only omitting unused args for the experimental \"use\n    // cache\" functions. Once the server reference info byte feature is stable, we\n    // should apply this to server actions as well.\n    const usedArgs = info.type === 'use-cache' ? (0, _serverreferenceinfo.omitUnusedArgs)(actionArgs, info) : actionArgs;\n    const body = await (0, _client.encodeReply)(usedArgs, {\n        temporaryReferences\n    });\n    const res = await fetch(state.canonicalUrl, {\n        method: 'POST',\n        headers: {\n            Accept: _approuterheaders.RSC_CONTENT_TYPE_HEADER,\n            [_approuterheaders.ACTION_HEADER]: actionId,\n            [_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER]: (0, _flightdatahelpers.prepareFlightRouterStateForRequest)(state.tree),\n            ... false ? 0 : {},\n            ...nextUrl ? {\n                [_approuterheaders.NEXT_URL]: nextUrl\n            } : {}\n        },\n        body\n    });\n    // Handle server actions that the server didn't recognize.\n    const unrecognizedActionHeader = res.headers.get(_approuterheaders.NEXT_ACTION_NOT_FOUND_HEADER);\n    if (unrecognizedActionHeader === '1') {\n        throw Object.defineProperty(new Error('Server Action \"' + actionId + '\" was not found on the server. \\nRead more: https://nextjs.org/docs/messages/failed-to-find-server-action'), \"__NEXT_ERROR_CODE\", {\n            value: \"E715\",\n            enumerable: false,\n            configurable: true\n        });\n    }\n    const redirectHeader = res.headers.get('x-action-redirect');\n    const [location, _redirectType] = (redirectHeader == null ? void 0 : redirectHeader.split(';')) || [];\n    let redirectType;\n    switch(_redirectType){\n        case 'push':\n            redirectType = _redirecterror.RedirectType.push;\n            break;\n        case 'replace':\n            redirectType = _redirecterror.RedirectType.replace;\n            break;\n        default:\n            redirectType = undefined;\n    }\n    const isPrerender = !!res.headers.get(_approuterheaders.NEXT_IS_PRERENDER_HEADER);\n    let revalidatedParts;\n    try {\n        const revalidatedHeader = JSON.parse(res.headers.get('x-action-revalidated') || '[[],0,0]');\n        revalidatedParts = {\n            paths: revalidatedHeader[0] || [],\n            tag: !!revalidatedHeader[1],\n            cookie: revalidatedHeader[2]\n        };\n    } catch (e) {\n        revalidatedParts = NO_REVALIDATED_PARTS;\n    }\n    const redirectLocation = location ? (0, _assignlocation.assignLocation)(location, new URL(state.canonicalUrl, window.location.href)) : undefined;\n    const contentType = res.headers.get('content-type');\n    const isRscResponse = !!(contentType && contentType.startsWith(_approuterheaders.RSC_CONTENT_TYPE_HEADER));\n    // Handle invalid server action responses.\n    // A valid response must have `content-type: text/x-component`, unless it's an external redirect.\n    // (external redirects have an 'x-action-redirect' header, but the body is an empty 'text/plain')\n    if (!isRscResponse && !redirectLocation) {\n        // The server can respond with a text/plain error message, but we'll fallback to something generic\n        // if there isn't one.\n        const message = res.status >= 400 && contentType === 'text/plain' ? await res.text() : 'An unexpected response was received from the server.';\n        throw Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n            value: \"E394\",\n            enumerable: false,\n            configurable: true\n        });\n    }\n    let actionResult;\n    let actionFlightData;\n    if (isRscResponse) {\n        const response = await createFromFetch(Promise.resolve(res), {\n            callServer: _appcallserver.callServer,\n            findSourceMapURL: _appfindsourcemapurl.findSourceMapURL,\n            temporaryReferences\n        });\n        // An internal redirect can send an RSC response, but does not have a useful `actionResult`.\n        actionResult = redirectLocation ? undefined : response.a;\n        actionFlightData = (0, _flightdatahelpers.normalizeFlightData)(response.f);\n    } else {\n        // An external redirect doesn't contain RSC data.\n        actionResult = undefined;\n        actionFlightData = undefined;\n    }\n    return {\n        actionResult,\n        actionFlightData,\n        redirectLocation,\n        redirectType,\n        revalidatedParts,\n        isPrerender\n    };\n}\nconst NO_REVALIDATED_PARTS = {\n    paths: [],\n    tag: false,\n    cookie: false\n};\nfunction serverActionReducer(state, action) {\n    const { resolve, reject } = action;\n    const mutable = {};\n    let currentTree = state.tree;\n    mutable.preserveCustomHistoryState = false;\n    // only pass along the `nextUrl` param (used for interception routes) if the current route was intercepted.\n    // If the route has been intercepted, the action should be as well.\n    // Otherwise the server action might be intercepted with the wrong action id\n    // (ie, one that corresponds with the intercepted route)\n    const nextUrl = state.nextUrl && (0, _hasinterceptionrouteincurrenttree.hasInterceptionRouteInCurrentTree)(state.tree) ? state.nextUrl : null;\n    const navigatedAt = Date.now();\n    return fetchServerAction(state, nextUrl, action).then(async (param)=>{\n        let { actionResult, actionFlightData: flightData, redirectLocation, redirectType, isPrerender, revalidatedParts } = param;\n        let redirectHref;\n        // honor the redirect type instead of defaulting to push in case of server actions.\n        if (redirectLocation) {\n            if (redirectType === _redirecterror.RedirectType.replace) {\n                state.pushRef.pendingPush = false;\n                mutable.pendingPush = false;\n            } else {\n                state.pushRef.pendingPush = true;\n                mutable.pendingPush = true;\n            }\n            redirectHref = (0, _createhreffromurl.createHrefFromUrl)(redirectLocation, false);\n            mutable.canonicalUrl = redirectHref;\n        }\n        if (!flightData) {\n            resolve(actionResult);\n            // If there is a redirect but no flight data we need to do a mpaNavigation.\n            if (redirectLocation) {\n                return (0, _navigatereducer.handleExternalUrl)(state, mutable, redirectLocation.href, state.pushRef.pendingPush);\n            }\n            return state;\n        }\n        if (typeof flightData === 'string') {\n            // Handle case when navigating to page in `pages` from `app`\n            resolve(actionResult);\n            return (0, _navigatereducer.handleExternalUrl)(state, mutable, flightData, state.pushRef.pendingPush);\n        }\n        const actionRevalidated = revalidatedParts.paths.length > 0 || revalidatedParts.tag || revalidatedParts.cookie;\n        for (const normalizedFlightData of flightData){\n            const { tree: treePatch, seedData: cacheNodeSeedData, head, isRootRender } = normalizedFlightData;\n            if (!isRootRender) {\n                // TODO-APP: handle this case better\n                console.log('SERVER ACTION APPLY FAILED');\n                resolve(actionResult);\n                return state;\n            }\n            // Given the path can only have two items the items are only the router state and rsc for the root.\n            const newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTree)([\n                ''\n            ], currentTree, treePatch, redirectHref ? redirectHref : state.canonicalUrl);\n            if (newTree === null) {\n                resolve(actionResult);\n                return (0, _handlesegmentmismatch.handleSegmentMismatch)(state, action, treePatch);\n            }\n            if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n                resolve(actionResult);\n                return (0, _navigatereducer.handleExternalUrl)(state, mutable, redirectHref || state.canonicalUrl, state.pushRef.pendingPush);\n            }\n            // The server sent back RSC data for the server action, so we need to apply it to the cache.\n            if (cacheNodeSeedData !== null) {\n                const rsc = cacheNodeSeedData[1];\n                const cache = (0, _approuter.createEmptyCacheNode)();\n                cache.rsc = rsc;\n                cache.prefetchRsc = null;\n                cache.loading = cacheNodeSeedData[3];\n                (0, _filllazyitemstillleafwithhead.fillLazyItemsTillLeafWithHead)(navigatedAt, cache, undefined, treePatch, cacheNodeSeedData, head, undefined);\n                mutable.cache = cache;\n                if (false) {} else {\n                    mutable.prefetchCache = new Map();\n                }\n                if (actionRevalidated) {\n                    await (0, _refetchinactiveparallelsegments.refreshInactiveParallelSegments)({\n                        navigatedAt,\n                        state,\n                        updatedTree: newTree,\n                        updatedCache: cache,\n                        includeNextUrl: Boolean(nextUrl),\n                        canonicalUrl: mutable.canonicalUrl || state.canonicalUrl\n                    });\n                }\n            }\n            mutable.patchedTree = newTree;\n            currentTree = newTree;\n        }\n        if (redirectLocation && redirectHref) {\n            if ( true && !actionRevalidated) {\n                // Because the RedirectBoundary will trigger a navigation, we need to seed the prefetch cache\n                // with the FlightData that we got from the server action for the target page, so that it's\n                // available when the page is navigated to and doesn't need to be re-fetched.\n                // We only do this if the server action didn't revalidate any data, as in that case the\n                // client cache will be cleared and the data will be re-fetched anyway.\n                // NOTE: We don't do this in the Segment Cache implementation.\n                // Dynamic data should never be placed into the cache, unless it's\n                // \"converted\" to static data using <Link prefetch={true}>. What we\n                // do instead is re-prefetch links and forms whenever the cache is\n                // invalidated.\n                (0, _prefetchcacheutils.createSeededPrefetchCacheEntry)({\n                    url: redirectLocation,\n                    data: {\n                        flightData,\n                        canonicalUrl: undefined,\n                        couldBeIntercepted: false,\n                        prerendered: false,\n                        postponed: false,\n                        // TODO: We should be able to set this if the server action\n                        // returned a fully static response.\n                        staleTime: -1\n                    },\n                    tree: state.tree,\n                    prefetchCache: state.prefetchCache,\n                    nextUrl: state.nextUrl,\n                    kind: isPrerender ? _routerreducertypes.PrefetchKind.FULL : _routerreducertypes.PrefetchKind.AUTO\n                });\n                mutable.prefetchCache = state.prefetchCache;\n            }\n            // If the action triggered a redirect, the action promise will be rejected with\n            // a redirect so that it's handled by RedirectBoundary as we won't have a valid\n            // action result to resolve the promise with. This will effectively reset the state of\n            // the component that called the action as the error boundary will remount the tree.\n            // The status code doesn't matter here as the action handler will have already sent\n            // a response with the correct status code.\n            reject((0, _redirect.getRedirectError)((0, _hasbasepath.hasBasePath)(redirectHref) ? (0, _removebasepath.removeBasePath)(redirectHref) : redirectHref, redirectType || _redirecterror.RedirectType.push));\n        } else {\n            resolve(actionResult);\n        }\n        return (0, _handlemutable.handleMutable)(state, mutable);\n    }, (e)=>{\n        // When the server action is rejected we don't update the state and instead call the reject handler of the promise.\n        reject(e);\n        return state;\n    });\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=server-action-reducer.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9zZXJ2ZXItYWN0aW9uLXJlZHVjZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozt1REFtTmdCQTs7O2VBQUFBOzs7MkNBL01XO2lEQUNNOzhDQVExQjtvQ0FRQTtnREFRQTs0Q0FDd0I7K0NBQ0c7NkNBQ0E7eURBQ1U7eURBQ0E7MkNBRWQ7MkRBQ2dCO3VDQUNUOytEQUNhO21EQUNaOzZEQUNVOytDQUt6QztzQ0FDMEI7MkNBQ0o7Z0RBQ2tCOzRDQUNoQjt5Q0FDSDtpREFJckI7MENBQytCO0FBRXRDLE1BQU1DLGtCQUNKQyxRQUFBQSxlQUFzQjtBQWV4QixlQUFlQyxrQkFDYkMsS0FBMkIsRUFDM0JDLE9BQXdDLEVBQ3hDLEtBQTRDO0lBQTVDLE1BQUVDLFFBQVEsRUFBRUMsVUFBVSxFQUFzQixHQUE1QztJQUVBLE1BQU1DLHNCQUFzQkMsQ0FBQUEsR0FBQUEsUUFBQUEsMkJBQUFBO0lBQzVCLE1BQU1DLE9BQU9DLENBQUFBLEdBQUFBLHFCQUFBQSxnQ0FBZ0MsRUFBQ0w7SUFFOUMsNkVBQTZFO0lBQzdFLDhFQUE4RTtJQUM5RSwrQ0FBK0M7SUFDL0MsTUFBTU0sV0FDSkYsS0FBS0csSUFBSSxLQUFLLGNBQWNDLENBQUFBLEdBQUFBLHFCQUFBQSxjQUFBQSxFQUFlUCxZQUFZRyxRQUFRSDtJQUVqRSxNQUFNUSxPQUFPLE1BQU1DLENBQUFBLEdBQUFBLFFBQUFBLFdBQUFBLEVBQVlKLFVBQVU7UUFBRUo7SUFBb0I7SUFFL0QsTUFBTVMsTUFBTSxNQUFNQyxNQUFNZCxNQUFNZSxZQUFZLEVBQUU7UUFDMUNDLFFBQVE7UUFDUkMsU0FBUztZQUNQQyxRQUFRQyxrQkFBQUEsdUJBQXVCO1lBQy9CLENBQUNDLGtCQUFBQSxhQUFhLENBQUMsRUFBRWxCO1lBQ2pCLENBQUNtQixrQkFBQUEsNkJBQTZCLENBQUMsRUFBRUMsQ0FBQUEsR0FBQUEsbUJBQUFBLGtDQUFrQyxFQUNqRXRCLE1BQU11QixJQUFJO1lBRVosR0FBSUMsTUFBOEIsR0FDOUIsQ0FFQyxHQUNELENBQUMsQ0FBQztZQUNOLEdBQUl2QixVQUNBO2dCQUNFLENBQUMwQixrQkFBQUEsUUFBUSxDQUFDLEVBQUUxQjtZQUNkLElBQ0EsQ0FBQyxDQUFDO1FBQ1I7UUFDQVU7SUFDRjtJQUVBLDBEQUEwRDtJQUMxRCxNQUFNaUIsMkJBQTJCZixJQUFJSSxPQUFPLENBQUNZLEdBQUcsQ0FBQ0Msa0JBQUFBLDRCQUE0QjtJQUM3RSxJQUFJRiw2QkFBNkIsS0FBSztRQUNwQyxNQUFNLHFCQUVMLENBRkssSUFBSUcsTUFDUCxvQkFBaUI3QixXQUFTLDhHQUR2QjttQkFBQTt3QkFBQTswQkFBQTtRQUVOO0lBQ0Y7SUFFQSxNQUFNOEIsaUJBQWlCbkIsSUFBSUksT0FBTyxDQUFDWSxHQUFHLENBQUM7SUFDdkMsTUFBTSxDQUFDSSxVQUFVQyxjQUFjLEdBQUdGLG1CQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxlQUFnQkcsS0FBSyxDQUFDLFNBQVEsRUFBRTtJQUNsRSxJQUFJQztJQUNKLE9BQVFGO1FBQ04sS0FBSztZQUNIRSxlQUFlQyxlQUFBQSxZQUFZLENBQUNDLElBQUk7WUFDaEM7UUFDRixLQUFLO1lBQ0hGLGVBQWVDLGVBQUFBLFlBQVksQ0FBQ0UsT0FBTztZQUNuQztRQUNGO1lBQ0VILGVBQWVJO0lBQ25CO0lBRUEsTUFBTUMsY0FBYyxDQUFDLENBQUM1QixJQUFJSSxPQUFPLENBQUNZLEdBQUcsQ0FBQ2Esa0JBQUFBLHdCQUF3QjtJQUM5RCxJQUFJQztJQUNKLElBQUk7UUFDRixNQUFNQyxvQkFBb0JDLEtBQUtDLEtBQUssQ0FDbENqQyxJQUFJSSxPQUFPLENBQUNZLEdBQUcsQ0FBQywyQkFBMkI7UUFFN0NjLG1CQUFtQjtZQUNqQkksT0FBT0gsaUJBQWlCLENBQUMsRUFBRSxJQUFJLEVBQUU7WUFDakNJLEtBQUssQ0FBQyxDQUFDSixpQkFBaUIsQ0FBQyxFQUFFO1lBQzNCSyxRQUFRTCxpQkFBaUIsQ0FBQyxFQUFFO1FBQzlCO0lBQ0YsRUFBRSxPQUFPTSxHQUFHO1FBQ1ZQLG1CQUFtQlE7SUFDckI7SUFFQSxNQUFNQyxtQkFBbUJuQixXQUNyQm9CLENBQUFBLEdBQUFBLGdCQUFBQSxjQUFBQSxFQUNFcEIsVUFDQSxJQUFJcUIsSUFBSXRELE1BQU1lLFlBQVksRUFBRXdDLE9BQU90QixRQUFRLENBQUN1QixJQUFJLEtBRWxEaEI7SUFFSixNQUFNaUIsY0FBYzVDLElBQUlJLE9BQU8sQ0FBQ1ksR0FBRyxDQUFDO0lBQ3BDLE1BQU02QixnQkFBZ0IsQ0FBQyxDQUNyQkQsZ0JBQWVBLFlBQVlFLFVBQVUsQ0FBQ3hDLGtCQUFBQSx3QkFBdUI7SUFHL0QsMENBQTBDO0lBQzFDLGlHQUFpRztJQUNqRyxpR0FBaUc7SUFDakcsSUFBSSxDQUFDdUMsaUJBQWlCLENBQUNOLGtCQUFrQjtRQUN2QyxrR0FBa0c7UUFDbEcsc0JBQXNCO1FBQ3RCLE1BQU1RLFVBQ0ovQyxJQUFJZ0QsTUFBTSxJQUFJLE9BQU9KLGdCQUFnQixlQUNqQyxNQUFNNUMsSUFBSWlELElBQUksS0FDZDtRQUVOLE1BQU0scUJBQWtCLENBQWxCLElBQUkvQixNQUFNNkIsVUFBVjttQkFBQTt3QkFBQTswQkFBQTtRQUFpQjtJQUN6QjtJQUVBLElBQUlHO0lBQ0osSUFBSUM7SUFDSixJQUFJTixlQUFlO1FBQ2pCLE1BQU1PLFdBQWlDLE1BQU1wRSxnQkFDM0NxRSxRQUFRQyxPQUFPLENBQUN0RCxNQUNoQjtZQUFFdUQsWUFBQUEsZUFBQUEsVUFBVTtZQUFFQyxrQkFBQUEscUJBQUFBLGdCQUFnQjtZQUFFakU7UUFBb0I7UUFFdEQsNEZBQTRGO1FBQzVGMkQsZUFBZVgsbUJBQW1CWixZQUFZeUIsU0FBU0ssQ0FBQztRQUN4RE4sbUJBQW1CTyxDQUFBQSxHQUFBQSxtQkFBQUEsbUJBQUFBLEVBQW9CTixTQUFTTyxDQUFDO0lBQ25ELE9BQU87UUFDTCxpREFBaUQ7UUFDakRULGVBQWV2QjtRQUNmd0IsbUJBQW1CeEI7SUFDckI7SUFFQSxPQUFPO1FBQ0x1QjtRQUNBQztRQUNBWjtRQUNBaEI7UUFDQU87UUFDQUY7SUFDRjtBQUNGO0FBRUEsTUFBTVUsdUJBQXVCO0lBQzNCSixPQUFPLEVBQUU7SUFDVEMsS0FBSztJQUNMQyxRQUFRO0FBQ1Y7QUFNTyxTQUFTckQsb0JBQ2RJLEtBQTJCLEVBQzNCeUUsTUFBMEI7SUFFMUIsTUFBTSxFQUFFTixPQUFPLEVBQUVPLE1BQU0sRUFBRSxHQUFHRDtJQUM1QixNQUFNRSxVQUErQixDQUFDO0lBRXRDLElBQUlDLGNBQWM1RSxNQUFNdUIsSUFBSTtJQUU1Qm9ELFFBQVFFLDBCQUEwQixHQUFHO0lBRXJDLDJHQUEyRztJQUMzRyxtRUFBbUU7SUFDbkUsNEVBQTRFO0lBQzVFLHdEQUF3RDtJQUN4RCxNQUFNNUUsVUFDSkQsTUFBTUMsT0FBTyxJQUFJNkUsQ0FBQUEsR0FBQUEsbUNBQUFBLGlDQUFBQSxFQUFrQzlFLE1BQU11QixJQUFJLElBQ3pEdkIsTUFBTUMsT0FBTyxHQUNiO0lBRU4sTUFBTThFLGNBQWNDLEtBQUtDLEdBQUc7SUFFNUIsT0FBT2xGLGtCQUFrQkMsT0FBT0MsU0FBU3dFLFFBQVFTLElBQUksQ0FDbkQ7WUFBTyxFQUNMbkIsWUFBWSxFQUNaQyxrQkFBa0JtQixVQUFVLEVBQzVCL0IsZ0JBQWdCLEVBQ2hCaEIsWUFBWSxFQUNaSyxXQUFXLEVBQ1hFLGdCQUFnQixFQUNqQjtRQUNDLElBQUl5QztRQUVKLG1GQUFtRjtRQUNuRixJQUFJaEMsa0JBQWtCO1lBQ3BCLElBQUloQixpQkFBaUJDLGVBQUFBLFlBQVksQ0FBQ0UsT0FBTyxFQUFFO2dCQUN6Q3ZDLE1BQU1xRixPQUFPLENBQUNDLFdBQVcsR0FBRztnQkFDNUJYLFFBQVFXLFdBQVcsR0FBRztZQUN4QixPQUFPO2dCQUNMdEYsTUFBTXFGLE9BQU8sQ0FBQ0MsV0FBVyxHQUFHO2dCQUM1QlgsUUFBUVcsV0FBVyxHQUFHO1lBQ3hCO1lBRUFGLGVBQWVHLENBQUFBLEdBQUFBLG1CQUFBQSxpQkFBQUEsRUFBa0JuQyxrQkFBa0I7WUFDbkR1QixRQUFRNUQsWUFBWSxHQUFHcUU7UUFDekI7UUFFQSxJQUFJLENBQUNELFlBQVk7WUFDZmhCLFFBQVFKO1lBRVIsMkVBQTJFO1lBQzNFLElBQUlYLGtCQUFrQjtnQkFDcEIsT0FBT29DLENBQUFBLEdBQUFBLGlCQUFBQSxpQkFBQUEsRUFDTHhGLE9BQ0EyRSxTQUNBdkIsaUJBQWlCSSxJQUFJLEVBQ3JCeEQsTUFBTXFGLE9BQU8sQ0FBQ0MsV0FBVztZQUU3QjtZQUNBLE9BQU90RjtRQUNUO1FBRUEsSUFBSSxPQUFPbUYsZUFBZSxVQUFVO1lBQ2xDLDREQUE0RDtZQUM1RGhCLFFBQVFKO1lBRVIsT0FBT3lCLENBQUFBLEdBQUFBLGlCQUFBQSxpQkFBaUIsRUFDdEJ4RixPQUNBMkUsU0FDQVEsWUFDQW5GLE1BQU1xRixPQUFPLENBQUNDLFdBQVc7UUFFN0I7UUFFQSxNQUFNRyxvQkFDSjlDLGlCQUFpQkksS0FBSyxDQUFDMkMsTUFBTSxHQUFHLEtBQ2hDL0MsaUJBQWlCSyxHQUFHLElBQ3BCTCxpQkFBaUJNLE1BQU07UUFFekIsS0FBSyxNQUFNMEMsd0JBQXdCUixXQUFZO1lBQzdDLE1BQU0sRUFDSjVELE1BQU1xRSxTQUFTLEVBQ2ZDLFVBQVVDLGlCQUFpQixFQUMzQkMsSUFBSSxFQUNKQyxZQUFZLEVBQ2IsR0FBR0w7WUFFSixJQUFJLENBQUNLLGNBQWM7Z0JBQ2pCLG9DQUFvQztnQkFDcENDLFFBQVFDLEdBQUcsQ0FBQztnQkFDWi9CLFFBQVFKO2dCQUVSLE9BQU8vRDtZQUNUO1lBRUEsbUdBQW1HO1lBQ25HLE1BQU1tRyxVQUFVQyxDQUFBQSxHQUFBQSw2QkFBQUEsMkJBQUFBLEVBQ2Q7Z0JBQ0M7YUFBRyxFQUNKeEIsYUFDQWdCLFdBQ0FSLGVBQWVBLGVBQWVwRixNQUFNZSxZQUFZO1lBR2xELElBQUlvRixZQUFZLE1BQU07Z0JBQ3BCaEMsUUFBUUo7Z0JBRVIsT0FBT3NDLENBQUFBLEdBQUFBLHVCQUFBQSxxQkFBcUIsRUFBQ3JHLE9BQU95RSxRQUFRbUI7WUFDOUM7WUFFQSxJQUFJVSxDQUFBQSxHQUFBQSw2QkFBQUEsMkJBQUFBLEVBQTRCMUIsYUFBYXVCLFVBQVU7Z0JBQ3JEaEMsUUFBUUo7Z0JBRVIsT0FBT3lCLENBQUFBLEdBQUFBLGlCQUFBQSxpQkFBQUEsRUFDTHhGLE9BQ0EyRSxTQUNBUyxnQkFBZ0JwRixNQUFNZSxZQUFZLEVBQ2xDZixNQUFNcUYsT0FBTyxDQUFDQyxXQUFXO1lBRTdCO1lBRUEsNEZBQTRGO1lBQzVGLElBQUlRLHNCQUFzQixNQUFNO2dCQUM5QixNQUFNUyxNQUFNVCxpQkFBaUIsQ0FBQyxFQUFFO2dCQUNoQyxNQUFNVSxRQUFtQkMsQ0FBQUEsR0FBQUEsV0FBQUEsb0JBQUFBO2dCQUN6QkQsTUFBTUQsR0FBRyxHQUFHQTtnQkFDWkMsTUFBTUUsV0FBVyxHQUFHO2dCQUNwQkYsTUFBTUcsT0FBTyxHQUFHYixpQkFBaUIsQ0FBQyxFQUFFO2dCQUNwQ2MsQ0FBQUEsR0FBQUEsK0JBQUFBLDZCQUFBQSxFQUNFN0IsYUFDQXlCLE9BQ0EsV0FFQVosV0FDQUUsbUJBQ0FDLE1BQ0F2RDtnQkFHRm1DLFFBQVE2QixLQUFLLEdBQUdBO2dCQUNoQixJQUFJaEYsS0FBdUMsRUFBRSxFQUU1QyxNQUFNO29CQUNMbUQsUUFBUW9DLGFBQWEsR0FBRyxJQUFJQztnQkFDOUI7Z0JBQ0EsSUFBSXZCLG1CQUFtQjtvQkFDckIsTUFBTXdCLENBQUFBLEdBQUFBLGlDQUFBQSwrQkFBQUEsRUFBZ0M7d0JBQ3BDbEM7d0JBQ0EvRTt3QkFDQWtILGFBQWFmO3dCQUNiZ0IsY0FBY1g7d0JBQ2RZLGdCQUFnQkMsUUFBUXBIO3dCQUN4QmMsY0FBYzRELFFBQVE1RCxZQUFZLElBQUlmLE1BQU1lLFlBQVk7b0JBQzFEO2dCQUNGO1lBQ0Y7WUFFQTRELFFBQVEyQyxXQUFXLEdBQUduQjtZQUN0QnZCLGNBQWN1QjtRQUNoQjtRQUVBLElBQUkvQyxvQkFBb0JnQyxjQUFjO1lBQ3BDLElBQUksS0FBd0MsSUFBSSxDQUFDSyxtQkFBbUI7Z0JBQ2xFLDZGQUE2RjtnQkFDN0YsMkZBQTJGO2dCQUMzRiw2RUFBNkU7Z0JBQzdFLHVGQUF1RjtnQkFDdkYsdUVBQXVFO2dCQUN2RSw4REFBOEQ7Z0JBQzlELGtFQUFrRTtnQkFDbEUsbUVBQW1FO2dCQUNuRSxrRUFBa0U7Z0JBQ2xFLGVBQWU7Z0JBQ2Y4QixDQUFBQSxHQUFBQSxvQkFBQUEsOEJBQUFBLEVBQStCO29CQUM3QkMsS0FBS3BFO29CQUNMcUUsTUFBTTt3QkFDSnRDO3dCQUNBcEUsY0FBY3lCO3dCQUNka0Ysb0JBQW9CO3dCQUNwQkMsYUFBYTt3QkFDYkMsV0FBVzt3QkFDWCwyREFBMkQ7d0JBQzNELG9DQUFvQzt3QkFDcENDLFdBQVcsQ0FBQztvQkFDZDtvQkFDQXRHLE1BQU12QixNQUFNdUIsSUFBSTtvQkFDaEJ3RixlQUFlL0csTUFBTStHLGFBQWE7b0JBQ2xDOUcsU0FBU0QsTUFBTUMsT0FBTztvQkFDdEI2SCxNQUFNckYsY0FBY3NGLG9CQUFBQSxZQUFZLENBQUNDLElBQUksR0FBR0Qsb0JBQUFBLFlBQVksQ0FBQ0UsSUFBSTtnQkFDM0Q7Z0JBQ0F0RCxRQUFRb0MsYUFBYSxHQUFHL0csTUFBTStHLGFBQWE7WUFDN0M7WUFFQSwrRUFBK0U7WUFDL0UsK0VBQStFO1lBQy9FLHNGQUFzRjtZQUN0RixvRkFBb0Y7WUFDcEYsbUZBQW1GO1lBQ25GLDJDQUEyQztZQUMzQ3JDLE9BQ0V3RCxDQUFBQSxHQUFBQSxVQUFBQSxnQkFBQUEsRUFDRUMsQ0FBQUEsR0FBQUEsYUFBQUEsV0FBQUEsRUFBWS9DLGdCQUNSZ0QsQ0FBQUEsR0FBQUEsZ0JBQUFBLGNBQUFBLEVBQWVoRCxnQkFDZkEsY0FDSmhELGdCQUFnQkMsZUFBQUEsWUFBWSxDQUFDQyxJQUFJO1FBR3ZDLE9BQU87WUFDTDZCLFFBQVFKO1FBQ1Y7UUFFQSxPQUFPc0UsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBY3JJLE9BQU8yRTtJQUM5QixHQUNBLENBQUN6QjtRQUNDLG1IQUFtSDtRQUNuSHdCLE9BQU94QjtRQUVQLE9BQU9sRDtJQUNUO0FBRUoiLCJzb3VyY2VzIjpbIi9zcmMvY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcmVkdWNlcnMvc2VydmVyLWFjdGlvbi1yZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQWN0aW9uRmxpZ2h0UmVzcG9uc2UsXG4gIEFjdGlvblJlc3VsdCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5pbXBvcnQgeyBjYWxsU2VydmVyIH0gZnJvbSAnLi4vLi4vLi4vYXBwLWNhbGwtc2VydmVyJ1xuaW1wb3J0IHsgZmluZFNvdXJjZU1hcFVSTCB9IGZyb20gJy4uLy4uLy4uL2FwcC1maW5kLXNvdXJjZS1tYXAtdXJsJ1xuaW1wb3J0IHtcbiAgQUNUSU9OX0hFQURFUixcbiAgTkVYVF9BQ1RJT05fTk9UX0ZPVU5EX0hFQURFUixcbiAgTkVYVF9JU19QUkVSRU5ERVJfSEVBREVSLFxuICBORVhUX1JPVVRFUl9TVEFURV9UUkVFX0hFQURFUixcbiAgTkVYVF9VUkwsXG4gIFJTQ19DT05URU5UX1RZUEVfSEVBREVSLFxufSBmcm9tICcuLi8uLi9hcHAtcm91dGVyLWhlYWRlcnMnXG5cbi8vIFRPRE86IEV4cGxpY2l0bHkgaW1wb3J0IGZyb20gY2xpZW50LmJyb3dzZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcbmltcG9ydCB7XG4gIGNyZWF0ZUZyb21GZXRjaCBhcyBjcmVhdGVGcm9tRmV0Y2hCcm93c2VyLFxuICBjcmVhdGVUZW1wb3JhcnlSZWZlcmVuY2VTZXQsXG4gIGVuY29kZVJlcGx5LFxufSBmcm9tICdyZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2svY2xpZW50J1xuXG5pbXBvcnQge1xuICBQcmVmZXRjaEtpbmQsXG4gIHR5cGUgUmVhZG9ubHlSZWR1Y2VyU3RhdGUsXG4gIHR5cGUgUmVkdWNlclN0YXRlLFxuICB0eXBlIFNlcnZlckFjdGlvbkFjdGlvbixcbiAgdHlwZSBTZXJ2ZXJBY3Rpb25NdXRhYmxlLFxufSBmcm9tICcuLi9yb3V0ZXItcmVkdWNlci10eXBlcydcbmltcG9ydCB7IGFzc2lnbkxvY2F0aW9uIH0gZnJvbSAnLi4vLi4vLi4vYXNzaWduLWxvY2F0aW9uJ1xuaW1wb3J0IHsgY3JlYXRlSHJlZkZyb21VcmwgfSBmcm9tICcuLi9jcmVhdGUtaHJlZi1mcm9tLXVybCdcbmltcG9ydCB7IGhhbmRsZUV4dGVybmFsVXJsIH0gZnJvbSAnLi9uYXZpZ2F0ZS1yZWR1Y2VyJ1xuaW1wb3J0IHsgYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlIH0gZnJvbSAnLi4vYXBwbHktcm91dGVyLXN0YXRlLXBhdGNoLXRvLXRyZWUnXG5pbXBvcnQgeyBpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQgfSBmcm9tICcuLi9pcy1uYXZpZ2F0aW5nLXRvLW5ldy1yb290LWxheW91dCdcbmltcG9ydCB0eXBlIHsgQ2FjaGVOb2RlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyBoYW5kbGVNdXRhYmxlIH0gZnJvbSAnLi4vaGFuZGxlLW11dGFibGUnXG5pbXBvcnQgeyBmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZCB9IGZyb20gJy4uL2ZpbGwtbGF6eS1pdGVtcy10aWxsLWxlYWYtd2l0aC1oZWFkJ1xuaW1wb3J0IHsgY3JlYXRlRW1wdHlDYWNoZU5vZGUgfSBmcm9tICcuLi8uLi9hcHAtcm91dGVyJ1xuaW1wb3J0IHsgaGFzSW50ZXJjZXB0aW9uUm91dGVJbkN1cnJlbnRUcmVlIH0gZnJvbSAnLi9oYXMtaW50ZXJjZXB0aW9uLXJvdXRlLWluLWN1cnJlbnQtdHJlZSdcbmltcG9ydCB7IGhhbmRsZVNlZ21lbnRNaXNtYXRjaCB9IGZyb20gJy4uL2hhbmRsZS1zZWdtZW50LW1pc21hdGNoJ1xuaW1wb3J0IHsgcmVmcmVzaEluYWN0aXZlUGFyYWxsZWxTZWdtZW50cyB9IGZyb20gJy4uL3JlZmV0Y2gtaW5hY3RpdmUtcGFyYWxsZWwtc2VnbWVudHMnXG5pbXBvcnQge1xuICBub3JtYWxpemVGbGlnaHREYXRhLFxuICBwcmVwYXJlRmxpZ2h0Um91dGVyU3RhdGVGb3JSZXF1ZXN0LFxuICB0eXBlIE5vcm1hbGl6ZWRGbGlnaHREYXRhLFxufSBmcm9tICcuLi8uLi8uLi9mbGlnaHQtZGF0YS1oZWxwZXJzJ1xuaW1wb3J0IHsgZ2V0UmVkaXJlY3RFcnJvciB9IGZyb20gJy4uLy4uL3JlZGlyZWN0J1xuaW1wb3J0IHsgUmVkaXJlY3RUeXBlIH0gZnJvbSAnLi4vLi4vcmVkaXJlY3QtZXJyb3InXG5pbXBvcnQgeyBjcmVhdGVTZWVkZWRQcmVmZXRjaENhY2hlRW50cnkgfSBmcm9tICcuLi9wcmVmZXRjaC1jYWNoZS11dGlscydcbmltcG9ydCB7IHJlbW92ZUJhc2VQYXRoIH0gZnJvbSAnLi4vLi4vLi4vcmVtb3ZlLWJhc2UtcGF0aCdcbmltcG9ydCB7IGhhc0Jhc2VQYXRoIH0gZnJvbSAnLi4vLi4vLi4vaGFzLWJhc2UtcGF0aCdcbmltcG9ydCB7XG4gIGV4dHJhY3RJbmZvRnJvbVNlcnZlclJlZmVyZW5jZUlkLFxuICBvbWl0VW51c2VkQXJncyxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2xpYi9zZXJ2ZXItcmVmZXJlbmNlLWluZm8nXG5pbXBvcnQgeyByZXZhbGlkYXRlRW50aXJlQ2FjaGUgfSBmcm9tICcuLi8uLi9zZWdtZW50LWNhY2hlJ1xuXG5jb25zdCBjcmVhdGVGcm9tRmV0Y2ggPVxuICBjcmVhdGVGcm9tRmV0Y2hCcm93c2VyIGFzICh0eXBlb2YgaW1wb3J0KCdyZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2svY2xpZW50LmJyb3dzZXInKSlbJ2NyZWF0ZUZyb21GZXRjaCddXG5cbnR5cGUgRmV0Y2hTZXJ2ZXJBY3Rpb25SZXN1bHQgPSB7XG4gIHJlZGlyZWN0TG9jYXRpb246IFVSTCB8IHVuZGVmaW5lZFxuICByZWRpcmVjdFR5cGU6IFJlZGlyZWN0VHlwZSB8IHVuZGVmaW5lZFxuICBhY3Rpb25SZXN1bHQ6IEFjdGlvblJlc3VsdCB8IHVuZGVmaW5lZFxuICBhY3Rpb25GbGlnaHREYXRhOiBOb3JtYWxpemVkRmxpZ2h0RGF0YVtdIHwgc3RyaW5nIHwgdW5kZWZpbmVkXG4gIGlzUHJlcmVuZGVyOiBib29sZWFuXG4gIHJldmFsaWRhdGVkUGFydHM6IHtcbiAgICB0YWc6IGJvb2xlYW5cbiAgICBjb29raWU6IGJvb2xlYW5cbiAgICBwYXRoczogc3RyaW5nW11cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFNlcnZlckFjdGlvbihcbiAgc3RhdGU6IFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBuZXh0VXJsOiBSZWFkb25seVJlZHVjZXJTdGF0ZVsnbmV4dFVybCddLFxuICB7IGFjdGlvbklkLCBhY3Rpb25BcmdzIH06IFNlcnZlckFjdGlvbkFjdGlvblxuKTogUHJvbWlzZTxGZXRjaFNlcnZlckFjdGlvblJlc3VsdD4ge1xuICBjb25zdCB0ZW1wb3JhcnlSZWZlcmVuY2VzID0gY3JlYXRlVGVtcG9yYXJ5UmVmZXJlbmNlU2V0KClcbiAgY29uc3QgaW5mbyA9IGV4dHJhY3RJbmZvRnJvbVNlcnZlclJlZmVyZW5jZUlkKGFjdGlvbklkKVxuXG4gIC8vIFRPRE86IEN1cnJlbnRseSwgd2UncmUgb25seSBvbWl0dGluZyB1bnVzZWQgYXJncyBmb3IgdGhlIGV4cGVyaW1lbnRhbCBcInVzZVxuICAvLyBjYWNoZVwiIGZ1bmN0aW9ucy4gT25jZSB0aGUgc2VydmVyIHJlZmVyZW5jZSBpbmZvIGJ5dGUgZmVhdHVyZSBpcyBzdGFibGUsIHdlXG4gIC8vIHNob3VsZCBhcHBseSB0aGlzIHRvIHNlcnZlciBhY3Rpb25zIGFzIHdlbGwuXG4gIGNvbnN0IHVzZWRBcmdzID1cbiAgICBpbmZvLnR5cGUgPT09ICd1c2UtY2FjaGUnID8gb21pdFVudXNlZEFyZ3MoYWN0aW9uQXJncywgaW5mbykgOiBhY3Rpb25BcmdzXG5cbiAgY29uc3QgYm9keSA9IGF3YWl0IGVuY29kZVJlcGx5KHVzZWRBcmdzLCB7IHRlbXBvcmFyeVJlZmVyZW5jZXMgfSlcblxuICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChzdGF0ZS5jYW5vbmljYWxVcmwsIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBBY2NlcHQ6IFJTQ19DT05URU5UX1RZUEVfSEVBREVSLFxuICAgICAgW0FDVElPTl9IRUFERVJdOiBhY3Rpb25JZCxcbiAgICAgIFtORVhUX1JPVVRFUl9TVEFURV9UUkVFX0hFQURFUl06IHByZXBhcmVGbGlnaHRSb3V0ZXJTdGF0ZUZvclJlcXVlc3QoXG4gICAgICAgIHN0YXRlLnRyZWVcbiAgICAgICksXG4gICAgICAuLi4ocHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEXG4gICAgICAgID8ge1xuICAgICAgICAgICAgJ3gtZGVwbG95bWVudC1pZCc6IHByb2Nlc3MuZW52Lk5FWFRfREVQTE9ZTUVOVF9JRCxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgICAgLi4uKG5leHRVcmxcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBbTkVYVF9VUkxdOiBuZXh0VXJsLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgfSxcbiAgICBib2R5LFxuICB9KVxuXG4gIC8vIEhhbmRsZSBzZXJ2ZXIgYWN0aW9ucyB0aGF0IHRoZSBzZXJ2ZXIgZGlkbid0IHJlY29nbml6ZS5cbiAgY29uc3QgdW5yZWNvZ25pemVkQWN0aW9uSGVhZGVyID0gcmVzLmhlYWRlcnMuZ2V0KE5FWFRfQUNUSU9OX05PVF9GT1VORF9IRUFERVIpXG4gIGlmICh1bnJlY29nbml6ZWRBY3Rpb25IZWFkZXIgPT09ICcxJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBTZXJ2ZXIgQWN0aW9uIFwiJHthY3Rpb25JZH1cIiB3YXMgbm90IGZvdW5kIG9uIHRoZSBzZXJ2ZXIuIFxcblJlYWQgbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvZmFpbGVkLXRvLWZpbmQtc2VydmVyLWFjdGlvbmBcbiAgICApXG4gIH1cblxuICBjb25zdCByZWRpcmVjdEhlYWRlciA9IHJlcy5oZWFkZXJzLmdldCgneC1hY3Rpb24tcmVkaXJlY3QnKVxuICBjb25zdCBbbG9jYXRpb24sIF9yZWRpcmVjdFR5cGVdID0gcmVkaXJlY3RIZWFkZXI/LnNwbGl0KCc7JykgfHwgW11cbiAgbGV0IHJlZGlyZWN0VHlwZTogUmVkaXJlY3RUeXBlIHwgdW5kZWZpbmVkXG4gIHN3aXRjaCAoX3JlZGlyZWN0VHlwZSkge1xuICAgIGNhc2UgJ3B1c2gnOlxuICAgICAgcmVkaXJlY3RUeXBlID0gUmVkaXJlY3RUeXBlLnB1c2hcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAncmVwbGFjZSc6XG4gICAgICByZWRpcmVjdFR5cGUgPSBSZWRpcmVjdFR5cGUucmVwbGFjZVxuICAgICAgYnJlYWtcbiAgICBkZWZhdWx0OlxuICAgICAgcmVkaXJlY3RUeXBlID0gdW5kZWZpbmVkXG4gIH1cblxuICBjb25zdCBpc1ByZXJlbmRlciA9ICEhcmVzLmhlYWRlcnMuZ2V0KE5FWFRfSVNfUFJFUkVOREVSX0hFQURFUilcbiAgbGV0IHJldmFsaWRhdGVkUGFydHM6IEZldGNoU2VydmVyQWN0aW9uUmVzdWx0WydyZXZhbGlkYXRlZFBhcnRzJ11cbiAgdHJ5IHtcbiAgICBjb25zdCByZXZhbGlkYXRlZEhlYWRlciA9IEpTT04ucGFyc2UoXG4gICAgICByZXMuaGVhZGVycy5nZXQoJ3gtYWN0aW9uLXJldmFsaWRhdGVkJykgfHwgJ1tbXSwwLDBdJ1xuICAgIClcbiAgICByZXZhbGlkYXRlZFBhcnRzID0ge1xuICAgICAgcGF0aHM6IHJldmFsaWRhdGVkSGVhZGVyWzBdIHx8IFtdLFxuICAgICAgdGFnOiAhIXJldmFsaWRhdGVkSGVhZGVyWzFdLFxuICAgICAgY29va2llOiByZXZhbGlkYXRlZEhlYWRlclsyXSxcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXZhbGlkYXRlZFBhcnRzID0gTk9fUkVWQUxJREFURURfUEFSVFNcbiAgfVxuXG4gIGNvbnN0IHJlZGlyZWN0TG9jYXRpb24gPSBsb2NhdGlvblxuICAgID8gYXNzaWduTG9jYXRpb24oXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICBuZXcgVVJMKHN0YXRlLmNhbm9uaWNhbFVybCwgd2luZG93LmxvY2F0aW9uLmhyZWYpXG4gICAgICApXG4gICAgOiB1bmRlZmluZWRcblxuICBjb25zdCBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJylcbiAgY29uc3QgaXNSc2NSZXNwb25zZSA9ICEhKFxuICAgIGNvbnRlbnRUeXBlICYmIGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoUlNDX0NPTlRFTlRfVFlQRV9IRUFERVIpXG4gIClcblxuICAvLyBIYW5kbGUgaW52YWxpZCBzZXJ2ZXIgYWN0aW9uIHJlc3BvbnNlcy5cbiAgLy8gQSB2YWxpZCByZXNwb25zZSBtdXN0IGhhdmUgYGNvbnRlbnQtdHlwZTogdGV4dC94LWNvbXBvbmVudGAsIHVubGVzcyBpdCdzIGFuIGV4dGVybmFsIHJlZGlyZWN0LlxuICAvLyAoZXh0ZXJuYWwgcmVkaXJlY3RzIGhhdmUgYW4gJ3gtYWN0aW9uLXJlZGlyZWN0JyBoZWFkZXIsIGJ1dCB0aGUgYm9keSBpcyBhbiBlbXB0eSAndGV4dC9wbGFpbicpXG4gIGlmICghaXNSc2NSZXNwb25zZSAmJiAhcmVkaXJlY3RMb2NhdGlvbikge1xuICAgIC8vIFRoZSBzZXJ2ZXIgY2FuIHJlc3BvbmQgd2l0aCBhIHRleHQvcGxhaW4gZXJyb3IgbWVzc2FnZSwgYnV0IHdlJ2xsIGZhbGxiYWNrIHRvIHNvbWV0aGluZyBnZW5lcmljXG4gICAgLy8gaWYgdGhlcmUgaXNuJ3Qgb25lLlxuICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgcmVzLnN0YXR1cyA+PSA0MDAgJiYgY29udGVudFR5cGUgPT09ICd0ZXh0L3BsYWluJ1xuICAgICAgICA/IGF3YWl0IHJlcy50ZXh0KClcbiAgICAgICAgOiAnQW4gdW5leHBlY3RlZCByZXNwb25zZSB3YXMgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLidcblxuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKVxuICB9XG5cbiAgbGV0IGFjdGlvblJlc3VsdDogRmV0Y2hTZXJ2ZXJBY3Rpb25SZXN1bHRbJ2FjdGlvblJlc3VsdCddXG4gIGxldCBhY3Rpb25GbGlnaHREYXRhOiBGZXRjaFNlcnZlckFjdGlvblJlc3VsdFsnYWN0aW9uRmxpZ2h0RGF0YSddXG4gIGlmIChpc1JzY1Jlc3BvbnNlKSB7XG4gICAgY29uc3QgcmVzcG9uc2U6IEFjdGlvbkZsaWdodFJlc3BvbnNlID0gYXdhaXQgY3JlYXRlRnJvbUZldGNoKFxuICAgICAgUHJvbWlzZS5yZXNvbHZlKHJlcyksXG4gICAgICB7IGNhbGxTZXJ2ZXIsIGZpbmRTb3VyY2VNYXBVUkwsIHRlbXBvcmFyeVJlZmVyZW5jZXMgfVxuICAgIClcbiAgICAvLyBBbiBpbnRlcm5hbCByZWRpcmVjdCBjYW4gc2VuZCBhbiBSU0MgcmVzcG9uc2UsIGJ1dCBkb2VzIG5vdCBoYXZlIGEgdXNlZnVsIGBhY3Rpb25SZXN1bHRgLlxuICAgIGFjdGlvblJlc3VsdCA9IHJlZGlyZWN0TG9jYXRpb24gPyB1bmRlZmluZWQgOiByZXNwb25zZS5hXG4gICAgYWN0aW9uRmxpZ2h0RGF0YSA9IG5vcm1hbGl6ZUZsaWdodERhdGEocmVzcG9uc2UuZilcbiAgfSBlbHNlIHtcbiAgICAvLyBBbiBleHRlcm5hbCByZWRpcmVjdCBkb2Vzbid0IGNvbnRhaW4gUlNDIGRhdGEuXG4gICAgYWN0aW9uUmVzdWx0ID0gdW5kZWZpbmVkXG4gICAgYWN0aW9uRmxpZ2h0RGF0YSA9IHVuZGVmaW5lZFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3Rpb25SZXN1bHQsXG4gICAgYWN0aW9uRmxpZ2h0RGF0YSxcbiAgICByZWRpcmVjdExvY2F0aW9uLFxuICAgIHJlZGlyZWN0VHlwZSxcbiAgICByZXZhbGlkYXRlZFBhcnRzLFxuICAgIGlzUHJlcmVuZGVyLFxuICB9XG59XG5cbmNvbnN0IE5PX1JFVkFMSURBVEVEX1BBUlRTID0ge1xuICBwYXRoczogW10sXG4gIHRhZzogZmFsc2UsXG4gIGNvb2tpZTogZmFsc2UsXG59XG5cbi8qXG4gKiBUaGlzIHJlZHVjZXIgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgdGhlIHNlcnZlciBhY3Rpb24gYW5kIHByb2Nlc3NpbmcgYW55IHNpZGUtZWZmZWN0cyBmcm9tIHRoZSBzZXJ2ZXIgYWN0aW9uLlxuICogSXQgZG9lcyBub3QgbXV0YXRlIHRoZSBzdGF0ZSBieSBpdHNlbGYgYnV0IHJhdGhlciBkZWxlZ2F0ZXMgdG8gb3RoZXIgcmVkdWNlcnMgdG8gZG8gdGhlIGFjdHVhbCBtdXRhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZlckFjdGlvblJlZHVjZXIoXG4gIHN0YXRlOiBSZWFkb25seVJlZHVjZXJTdGF0ZSxcbiAgYWN0aW9uOiBTZXJ2ZXJBY3Rpb25BY3Rpb25cbik6IFJlZHVjZXJTdGF0ZSB7XG4gIGNvbnN0IHsgcmVzb2x2ZSwgcmVqZWN0IH0gPSBhY3Rpb25cbiAgY29uc3QgbXV0YWJsZTogU2VydmVyQWN0aW9uTXV0YWJsZSA9IHt9XG5cbiAgbGV0IGN1cnJlbnRUcmVlID0gc3RhdGUudHJlZVxuXG4gIG11dGFibGUucHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUgPSBmYWxzZVxuXG4gIC8vIG9ubHkgcGFzcyBhbG9uZyB0aGUgYG5leHRVcmxgIHBhcmFtICh1c2VkIGZvciBpbnRlcmNlcHRpb24gcm91dGVzKSBpZiB0aGUgY3VycmVudCByb3V0ZSB3YXMgaW50ZXJjZXB0ZWQuXG4gIC8vIElmIHRoZSByb3V0ZSBoYXMgYmVlbiBpbnRlcmNlcHRlZCwgdGhlIGFjdGlvbiBzaG91bGQgYmUgYXMgd2VsbC5cbiAgLy8gT3RoZXJ3aXNlIHRoZSBzZXJ2ZXIgYWN0aW9uIG1pZ2h0IGJlIGludGVyY2VwdGVkIHdpdGggdGhlIHdyb25nIGFjdGlvbiBpZFxuICAvLyAoaWUsIG9uZSB0aGF0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGludGVyY2VwdGVkIHJvdXRlKVxuICBjb25zdCBuZXh0VXJsID1cbiAgICBzdGF0ZS5uZXh0VXJsICYmIGhhc0ludGVyY2VwdGlvblJvdXRlSW5DdXJyZW50VHJlZShzdGF0ZS50cmVlKVxuICAgICAgPyBzdGF0ZS5uZXh0VXJsXG4gICAgICA6IG51bGxcblxuICBjb25zdCBuYXZpZ2F0ZWRBdCA9IERhdGUubm93KClcblxuICByZXR1cm4gZmV0Y2hTZXJ2ZXJBY3Rpb24oc3RhdGUsIG5leHRVcmwsIGFjdGlvbikudGhlbihcbiAgICBhc3luYyAoe1xuICAgICAgYWN0aW9uUmVzdWx0LFxuICAgICAgYWN0aW9uRmxpZ2h0RGF0YTogZmxpZ2h0RGF0YSxcbiAgICAgIHJlZGlyZWN0TG9jYXRpb24sXG4gICAgICByZWRpcmVjdFR5cGUsXG4gICAgICBpc1ByZXJlbmRlcixcbiAgICAgIHJldmFsaWRhdGVkUGFydHMsXG4gICAgfSkgPT4ge1xuICAgICAgbGV0IHJlZGlyZWN0SHJlZjogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgICAgIC8vIGhvbm9yIHRoZSByZWRpcmVjdCB0eXBlIGluc3RlYWQgb2YgZGVmYXVsdGluZyB0byBwdXNoIGluIGNhc2Ugb2Ygc2VydmVyIGFjdGlvbnMuXG4gICAgICBpZiAocmVkaXJlY3RMb2NhdGlvbikge1xuICAgICAgICBpZiAocmVkaXJlY3RUeXBlID09PSBSZWRpcmVjdFR5cGUucmVwbGFjZSkge1xuICAgICAgICAgIHN0YXRlLnB1c2hSZWYucGVuZGluZ1B1c2ggPSBmYWxzZVxuICAgICAgICAgIG11dGFibGUucGVuZGluZ1B1c2ggPSBmYWxzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlLnB1c2hSZWYucGVuZGluZ1B1c2ggPSB0cnVlXG4gICAgICAgICAgbXV0YWJsZS5wZW5kaW5nUHVzaCA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZGlyZWN0SHJlZiA9IGNyZWF0ZUhyZWZGcm9tVXJsKHJlZGlyZWN0TG9jYXRpb24sIGZhbHNlKVxuICAgICAgICBtdXRhYmxlLmNhbm9uaWNhbFVybCA9IHJlZGlyZWN0SHJlZlxuICAgICAgfVxuXG4gICAgICBpZiAoIWZsaWdodERhdGEpIHtcbiAgICAgICAgcmVzb2x2ZShhY3Rpb25SZXN1bHQpXG5cbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSByZWRpcmVjdCBidXQgbm8gZmxpZ2h0IGRhdGEgd2UgbmVlZCB0byBkbyBhIG1wYU5hdmlnYXRpb24uXG4gICAgICAgIGlmIChyZWRpcmVjdExvY2F0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUV4dGVybmFsVXJsKFxuICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICBtdXRhYmxlLFxuICAgICAgICAgICAgcmVkaXJlY3RMb2NhdGlvbi5ocmVmLFxuICAgICAgICAgICAgc3RhdGUucHVzaFJlZi5wZW5kaW5nUHVzaFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhdGVcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBmbGlnaHREYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBIYW5kbGUgY2FzZSB3aGVuIG5hdmlnYXRpbmcgdG8gcGFnZSBpbiBgcGFnZXNgIGZyb20gYGFwcGBcbiAgICAgICAgcmVzb2x2ZShhY3Rpb25SZXN1bHQpXG5cbiAgICAgICAgcmV0dXJuIGhhbmRsZUV4dGVybmFsVXJsKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIG11dGFibGUsXG4gICAgICAgICAgZmxpZ2h0RGF0YSxcbiAgICAgICAgICBzdGF0ZS5wdXNoUmVmLnBlbmRpbmdQdXNoXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0aW9uUmV2YWxpZGF0ZWQgPVxuICAgICAgICByZXZhbGlkYXRlZFBhcnRzLnBhdGhzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgcmV2YWxpZGF0ZWRQYXJ0cy50YWcgfHxcbiAgICAgICAgcmV2YWxpZGF0ZWRQYXJ0cy5jb29raWVcblxuICAgICAgZm9yIChjb25zdCBub3JtYWxpemVkRmxpZ2h0RGF0YSBvZiBmbGlnaHREYXRhKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICB0cmVlOiB0cmVlUGF0Y2gsXG4gICAgICAgICAgc2VlZERhdGE6IGNhY2hlTm9kZVNlZWREYXRhLFxuICAgICAgICAgIGhlYWQsXG4gICAgICAgICAgaXNSb290UmVuZGVyLFxuICAgICAgICB9ID0gbm9ybWFsaXplZEZsaWdodERhdGFcblxuICAgICAgICBpZiAoIWlzUm9vdFJlbmRlcikge1xuICAgICAgICAgIC8vIFRPRE8tQVBQOiBoYW5kbGUgdGhpcyBjYXNlIGJldHRlclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdTRVJWRVIgQUNUSU9OIEFQUExZIEZBSUxFRCcpXG4gICAgICAgICAgcmVzb2x2ZShhY3Rpb25SZXN1bHQpXG5cbiAgICAgICAgICByZXR1cm4gc3RhdGVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdpdmVuIHRoZSBwYXRoIGNhbiBvbmx5IGhhdmUgdHdvIGl0ZW1zIHRoZSBpdGVtcyBhcmUgb25seSB0aGUgcm91dGVyIHN0YXRlIGFuZCByc2MgZm9yIHRoZSByb290LlxuICAgICAgICBjb25zdCBuZXdUcmVlID0gYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlKFxuICAgICAgICAgIC8vIFRPRE8tQVBQOiByZW1vdmUgJydcbiAgICAgICAgICBbJyddLFxuICAgICAgICAgIGN1cnJlbnRUcmVlLFxuICAgICAgICAgIHRyZWVQYXRjaCxcbiAgICAgICAgICByZWRpcmVjdEhyZWYgPyByZWRpcmVjdEhyZWYgOiBzdGF0ZS5jYW5vbmljYWxVcmxcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChuZXdUcmVlID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzb2x2ZShhY3Rpb25SZXN1bHQpXG5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlU2VnbWVudE1pc21hdGNoKHN0YXRlLCBhY3Rpb24sIHRyZWVQYXRjaClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc05hdmlnYXRpbmdUb05ld1Jvb3RMYXlvdXQoY3VycmVudFRyZWUsIG5ld1RyZWUpKSB7XG4gICAgICAgICAgcmVzb2x2ZShhY3Rpb25SZXN1bHQpXG5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXh0ZXJuYWxVcmwoXG4gICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgIG11dGFibGUsXG4gICAgICAgICAgICByZWRpcmVjdEhyZWYgfHwgc3RhdGUuY2Fub25pY2FsVXJsLFxuICAgICAgICAgICAgc3RhdGUucHVzaFJlZi5wZW5kaW5nUHVzaFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBzZXJ2ZXIgc2VudCBiYWNrIFJTQyBkYXRhIGZvciB0aGUgc2VydmVyIGFjdGlvbiwgc28gd2UgbmVlZCB0byBhcHBseSBpdCB0byB0aGUgY2FjaGUuXG4gICAgICAgIGlmIChjYWNoZU5vZGVTZWVkRGF0YSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHJzYyA9IGNhY2hlTm9kZVNlZWREYXRhWzFdXG4gICAgICAgICAgY29uc3QgY2FjaGU6IENhY2hlTm9kZSA9IGNyZWF0ZUVtcHR5Q2FjaGVOb2RlKClcbiAgICAgICAgICBjYWNoZS5yc2MgPSByc2NcbiAgICAgICAgICBjYWNoZS5wcmVmZXRjaFJzYyA9IG51bGxcbiAgICAgICAgICBjYWNoZS5sb2FkaW5nID0gY2FjaGVOb2RlU2VlZERhdGFbM11cbiAgICAgICAgICBmaWxsTGF6eUl0ZW1zVGlsbExlYWZXaXRoSGVhZChcbiAgICAgICAgICAgIG5hdmlnYXRlZEF0LFxuICAgICAgICAgICAgY2FjaGUsXG4gICAgICAgICAgICAvLyBFeGlzdGluZyBjYWNoZSBpcyBub3QgcGFzc2VkIGluIGFzIHNlcnZlciBhY3Rpb25zIGhhdmUgdG8gaW52YWxpZGF0ZSB0aGUgZW50aXJlIGNhY2hlLlxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdHJlZVBhdGNoLFxuICAgICAgICAgICAgY2FjaGVOb2RlU2VlZERhdGEsXG4gICAgICAgICAgICBoZWFkLFxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgbXV0YWJsZS5jYWNoZSA9IGNhY2hlXG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRSkge1xuICAgICAgICAgICAgcmV2YWxpZGF0ZUVudGlyZUNhY2hlKHN0YXRlLm5leHRVcmwsIG5ld1RyZWUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG11dGFibGUucHJlZmV0Y2hDYWNoZSA9IG5ldyBNYXAoKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYWN0aW9uUmV2YWxpZGF0ZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IHJlZnJlc2hJbmFjdGl2ZVBhcmFsbGVsU2VnbWVudHMoe1xuICAgICAgICAgICAgICBuYXZpZ2F0ZWRBdCxcbiAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgIHVwZGF0ZWRUcmVlOiBuZXdUcmVlLFxuICAgICAgICAgICAgICB1cGRhdGVkQ2FjaGU6IGNhY2hlLFxuICAgICAgICAgICAgICBpbmNsdWRlTmV4dFVybDogQm9vbGVhbihuZXh0VXJsKSxcbiAgICAgICAgICAgICAgY2Fub25pY2FsVXJsOiBtdXRhYmxlLmNhbm9uaWNhbFVybCB8fCBzdGF0ZS5jYW5vbmljYWxVcmwsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG11dGFibGUucGF0Y2hlZFRyZWUgPSBuZXdUcmVlXG4gICAgICAgIGN1cnJlbnRUcmVlID0gbmV3VHJlZVxuICAgICAgfVxuXG4gICAgICBpZiAocmVkaXJlY3RMb2NhdGlvbiAmJiByZWRpcmVjdEhyZWYpIHtcbiAgICAgICAgaWYgKCFwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEUgJiYgIWFjdGlvblJldmFsaWRhdGVkKSB7XG4gICAgICAgICAgLy8gQmVjYXVzZSB0aGUgUmVkaXJlY3RCb3VuZGFyeSB3aWxsIHRyaWdnZXIgYSBuYXZpZ2F0aW9uLCB3ZSBuZWVkIHRvIHNlZWQgdGhlIHByZWZldGNoIGNhY2hlXG4gICAgICAgICAgLy8gd2l0aCB0aGUgRmxpZ2h0RGF0YSB0aGF0IHdlIGdvdCBmcm9tIHRoZSBzZXJ2ZXIgYWN0aW9uIGZvciB0aGUgdGFyZ2V0IHBhZ2UsIHNvIHRoYXQgaXQnc1xuICAgICAgICAgIC8vIGF2YWlsYWJsZSB3aGVuIHRoZSBwYWdlIGlzIG5hdmlnYXRlZCB0byBhbmQgZG9lc24ndCBuZWVkIHRvIGJlIHJlLWZldGNoZWQuXG4gICAgICAgICAgLy8gV2Ugb25seSBkbyB0aGlzIGlmIHRoZSBzZXJ2ZXIgYWN0aW9uIGRpZG4ndCByZXZhbGlkYXRlIGFueSBkYXRhLCBhcyBpbiB0aGF0IGNhc2UgdGhlXG4gICAgICAgICAgLy8gY2xpZW50IGNhY2hlIHdpbGwgYmUgY2xlYXJlZCBhbmQgdGhlIGRhdGEgd2lsbCBiZSByZS1mZXRjaGVkIGFueXdheS5cbiAgICAgICAgICAvLyBOT1RFOiBXZSBkb24ndCBkbyB0aGlzIGluIHRoZSBTZWdtZW50IENhY2hlIGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIC8vIER5bmFtaWMgZGF0YSBzaG91bGQgbmV2ZXIgYmUgcGxhY2VkIGludG8gdGhlIGNhY2hlLCB1bmxlc3MgaXQnc1xuICAgICAgICAgIC8vIFwiY29udmVydGVkXCIgdG8gc3RhdGljIGRhdGEgdXNpbmcgPExpbmsgcHJlZmV0Y2g9e3RydWV9Pi4gV2hhdCB3ZVxuICAgICAgICAgIC8vIGRvIGluc3RlYWQgaXMgcmUtcHJlZmV0Y2ggbGlua3MgYW5kIGZvcm1zIHdoZW5ldmVyIHRoZSBjYWNoZSBpc1xuICAgICAgICAgIC8vIGludmFsaWRhdGVkLlxuICAgICAgICAgIGNyZWF0ZVNlZWRlZFByZWZldGNoQ2FjaGVFbnRyeSh7XG4gICAgICAgICAgICB1cmw6IHJlZGlyZWN0TG9jYXRpb24sXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGZsaWdodERhdGEsXG4gICAgICAgICAgICAgIGNhbm9uaWNhbFVybDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBjb3VsZEJlSW50ZXJjZXB0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBwcmVyZW5kZXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgIHBvc3Rwb25lZDogZmFsc2UsXG4gICAgICAgICAgICAgIC8vIFRPRE86IFdlIHNob3VsZCBiZSBhYmxlIHRvIHNldCB0aGlzIGlmIHRoZSBzZXJ2ZXIgYWN0aW9uXG4gICAgICAgICAgICAgIC8vIHJldHVybmVkIGEgZnVsbHkgc3RhdGljIHJlc3BvbnNlLlxuICAgICAgICAgICAgICBzdGFsZVRpbWU6IC0xLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRyZWU6IHN0YXRlLnRyZWUsXG4gICAgICAgICAgICBwcmVmZXRjaENhY2hlOiBzdGF0ZS5wcmVmZXRjaENhY2hlLFxuICAgICAgICAgICAgbmV4dFVybDogc3RhdGUubmV4dFVybCxcbiAgICAgICAgICAgIGtpbmQ6IGlzUHJlcmVuZGVyID8gUHJlZmV0Y2hLaW5kLkZVTEwgOiBQcmVmZXRjaEtpbmQuQVVUTyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIG11dGFibGUucHJlZmV0Y2hDYWNoZSA9IHN0YXRlLnByZWZldGNoQ2FjaGVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSBhY3Rpb24gdHJpZ2dlcmVkIGEgcmVkaXJlY3QsIHRoZSBhY3Rpb24gcHJvbWlzZSB3aWxsIGJlIHJlamVjdGVkIHdpdGhcbiAgICAgICAgLy8gYSByZWRpcmVjdCBzbyB0aGF0IGl0J3MgaGFuZGxlZCBieSBSZWRpcmVjdEJvdW5kYXJ5IGFzIHdlIHdvbid0IGhhdmUgYSB2YWxpZFxuICAgICAgICAvLyBhY3Rpb24gcmVzdWx0IHRvIHJlc29sdmUgdGhlIHByb21pc2Ugd2l0aC4gVGhpcyB3aWxsIGVmZmVjdGl2ZWx5IHJlc2V0IHRoZSBzdGF0ZSBvZlxuICAgICAgICAvLyB0aGUgY29tcG9uZW50IHRoYXQgY2FsbGVkIHRoZSBhY3Rpb24gYXMgdGhlIGVycm9yIGJvdW5kYXJ5IHdpbGwgcmVtb3VudCB0aGUgdHJlZS5cbiAgICAgICAgLy8gVGhlIHN0YXR1cyBjb2RlIGRvZXNuJ3QgbWF0dGVyIGhlcmUgYXMgdGhlIGFjdGlvbiBoYW5kbGVyIHdpbGwgaGF2ZSBhbHJlYWR5IHNlbnRcbiAgICAgICAgLy8gYSByZXNwb25zZSB3aXRoIHRoZSBjb3JyZWN0IHN0YXR1cyBjb2RlLlxuICAgICAgICByZWplY3QoXG4gICAgICAgICAgZ2V0UmVkaXJlY3RFcnJvcihcbiAgICAgICAgICAgIGhhc0Jhc2VQYXRoKHJlZGlyZWN0SHJlZilcbiAgICAgICAgICAgICAgPyByZW1vdmVCYXNlUGF0aChyZWRpcmVjdEhyZWYpXG4gICAgICAgICAgICAgIDogcmVkaXJlY3RIcmVmLFxuICAgICAgICAgICAgcmVkaXJlY3RUeXBlIHx8IFJlZGlyZWN0VHlwZS5wdXNoXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKGFjdGlvblJlc3VsdClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhhbmRsZU11dGFibGUoc3RhdGUsIG11dGFibGUpXG4gICAgfSxcbiAgICAoZTogYW55KSA9PiB7XG4gICAgICAvLyBXaGVuIHRoZSBzZXJ2ZXIgYWN0aW9uIGlzIHJlamVjdGVkIHdlIGRvbid0IHVwZGF0ZSB0aGUgc3RhdGUgYW5kIGluc3RlYWQgY2FsbCB0aGUgcmVqZWN0IGhhbmRsZXIgb2YgdGhlIHByb21pc2UuXG4gICAgICByZWplY3QoZSlcblxuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfVxuICApXG59XG4iXSwibmFtZXMiOlsic2VydmVyQWN0aW9uUmVkdWNlciIsImNyZWF0ZUZyb21GZXRjaCIsImNyZWF0ZUZyb21GZXRjaEJyb3dzZXIiLCJmZXRjaFNlcnZlckFjdGlvbiIsInN0YXRlIiwibmV4dFVybCIsImFjdGlvbklkIiwiYWN0aW9uQXJncyIsInRlbXBvcmFyeVJlZmVyZW5jZXMiLCJjcmVhdGVUZW1wb3JhcnlSZWZlcmVuY2VTZXQiLCJpbmZvIiwiZXh0cmFjdEluZm9Gcm9tU2VydmVyUmVmZXJlbmNlSWQiLCJ1c2VkQXJncyIsInR5cGUiLCJvbWl0VW51c2VkQXJncyIsImJvZHkiLCJlbmNvZGVSZXBseSIsInJlcyIsImZldGNoIiwiY2Fub25pY2FsVXJsIiwibWV0aG9kIiwiaGVhZGVycyIsIkFjY2VwdCIsIlJTQ19DT05URU5UX1RZUEVfSEVBREVSIiwiQUNUSU9OX0hFQURFUiIsIk5FWFRfUk9VVEVSX1NUQVRFX1RSRUVfSEVBREVSIiwicHJlcGFyZUZsaWdodFJvdXRlclN0YXRlRm9yUmVxdWVzdCIsInRyZWUiLCJwcm9jZXNzIiwiZW52IiwiTkVYVF9ERVBMT1lNRU5UX0lEIiwiTkVYVF9VUkwiLCJ1bnJlY29nbml6ZWRBY3Rpb25IZWFkZXIiLCJnZXQiLCJORVhUX0FDVElPTl9OT1RfRk9VTkRfSEVBREVSIiwiRXJyb3IiLCJyZWRpcmVjdEhlYWRlciIsImxvY2F0aW9uIiwiX3JlZGlyZWN0VHlwZSIsInNwbGl0IiwicmVkaXJlY3RUeXBlIiwiUmVkaXJlY3RUeXBlIiwicHVzaCIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJpc1ByZXJlbmRlciIsIk5FWFRfSVNfUFJFUkVOREVSX0hFQURFUiIsInJldmFsaWRhdGVkUGFydHMiLCJyZXZhbGlkYXRlZEhlYWRlciIsIkpTT04iLCJwYXJzZSIsInBhdGhzIiwidGFnIiwiY29va2llIiwiZSIsIk5PX1JFVkFMSURBVEVEX1BBUlRTIiwicmVkaXJlY3RMb2NhdGlvbiIsImFzc2lnbkxvY2F0aW9uIiwiVVJMIiwid2luZG93IiwiaHJlZiIsImNvbnRlbnRUeXBlIiwiaXNSc2NSZXNwb25zZSIsInN0YXJ0c1dpdGgiLCJtZXNzYWdlIiwic3RhdHVzIiwidGV4dCIsImFjdGlvblJlc3VsdCIsImFjdGlvbkZsaWdodERhdGEiLCJyZXNwb25zZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiY2FsbFNlcnZlciIsImZpbmRTb3VyY2VNYXBVUkwiLCJhIiwibm9ybWFsaXplRmxpZ2h0RGF0YSIsImYiLCJhY3Rpb24iLCJyZWplY3QiLCJtdXRhYmxlIiwiY3VycmVudFRyZWUiLCJwcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSIsImhhc0ludGVyY2VwdGlvblJvdXRlSW5DdXJyZW50VHJlZSIsIm5hdmlnYXRlZEF0IiwiRGF0ZSIsIm5vdyIsInRoZW4iLCJmbGlnaHREYXRhIiwicmVkaXJlY3RIcmVmIiwicHVzaFJlZiIsInBlbmRpbmdQdXNoIiwiY3JlYXRlSHJlZkZyb21VcmwiLCJoYW5kbGVFeHRlcm5hbFVybCIsImFjdGlvblJldmFsaWRhdGVkIiwibGVuZ3RoIiwibm9ybWFsaXplZEZsaWdodERhdGEiLCJ0cmVlUGF0Y2giLCJzZWVkRGF0YSIsImNhY2hlTm9kZVNlZWREYXRhIiwiaGVhZCIsImlzUm9vdFJlbmRlciIsImNvbnNvbGUiLCJsb2ciLCJuZXdUcmVlIiwiYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlIiwiaGFuZGxlU2VnbWVudE1pc21hdGNoIiwiaXNOYXZpZ2F0aW5nVG9OZXdSb290TGF5b3V0IiwicnNjIiwiY2FjaGUiLCJjcmVhdGVFbXB0eUNhY2hlTm9kZSIsInByZWZldGNoUnNjIiwibG9hZGluZyIsImZpbGxMYXp5SXRlbXNUaWxsTGVhZldpdGhIZWFkIiwiX19ORVhUX0NMSUVOVF9TRUdNRU5UX0NBQ0hFIiwicmV2YWxpZGF0ZUVudGlyZUNhY2hlIiwicHJlZmV0Y2hDYWNoZSIsIk1hcCIsInJlZnJlc2hJbmFjdGl2ZVBhcmFsbGVsU2VnbWVudHMiLCJ1cGRhdGVkVHJlZSIsInVwZGF0ZWRDYWNoZSIsImluY2x1ZGVOZXh0VXJsIiwiQm9vbGVhbiIsInBhdGNoZWRUcmVlIiwiY3JlYXRlU2VlZGVkUHJlZmV0Y2hDYWNoZUVudHJ5IiwidXJsIiwiZGF0YSIsImNvdWxkQmVJbnRlcmNlcHRlZCIsInByZXJlbmRlcmVkIiwicG9zdHBvbmVkIiwic3RhbGVUaW1lIiwia2luZCIsIlByZWZldGNoS2luZCIsIkZVTEwiLCJBVVRPIiwiZ2V0UmVkaXJlY3RFcnJvciIsImhhc0Jhc2VQYXRoIiwicmVtb3ZlQmFzZVBhdGgiLCJoYW5kbGVNdXRhYmxlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js":
/*!**********************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js ***!
  \**********************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"serverPatchReducer\", ({\n    enumerable: true,\n    get: function() {\n        return serverPatchReducer;\n    }\n}));\nconst _createhreffromurl = __webpack_require__(/*! ../create-href-from-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js\");\nconst _applyrouterstatepatchtotree = __webpack_require__(/*! ../apply-router-state-patch-to-tree */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/apply-router-state-patch-to-tree.js\");\nconst _isnavigatingtonewrootlayout = __webpack_require__(/*! ../is-navigating-to-new-root-layout */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js\");\nconst _navigatereducer = __webpack_require__(/*! ./navigate-reducer */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _applyflightdata = __webpack_require__(/*! ../apply-flight-data */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/apply-flight-data.js\");\nconst _handlemutable = __webpack_require__(/*! ../handle-mutable */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/handle-mutable.js\");\nconst _approuter = __webpack_require__(/*! ../../app-router */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router.js\");\nfunction serverPatchReducer(state, action) {\n    const { serverResponse: { flightData, canonicalUrl: canonicalUrlOverride }, navigatedAt } = action;\n    const mutable = {};\n    mutable.preserveCustomHistoryState = false;\n    // Handle case when navigating to page in `pages` from `app`\n    if (typeof flightData === 'string') {\n        return (0, _navigatereducer.handleExternalUrl)(state, mutable, flightData, state.pushRef.pendingPush);\n    }\n    let currentTree = state.tree;\n    let currentCache = state.cache;\n    for (const normalizedFlightData of flightData){\n        const { segmentPath: flightSegmentPath, tree: treePatch } = normalizedFlightData;\n        const newTree = (0, _applyrouterstatepatchtotree.applyRouterStatePatchToTree)([\n            '',\n            ...flightSegmentPath\n        ], currentTree, treePatch, state.canonicalUrl);\n        // `applyRouterStatePatchToTree` returns `null` when it determined that the server response is not applicable to the current tree.\n        // In other words, the server responded with a tree that doesn't match what the client is currently rendering.\n        // This can happen if the server patch action took longer to resolve than a subsequent navigation which would have changed the tree.\n        // Previously this case triggered an MPA navigation but it should be safe to simply discard the server response rather than forcing\n        // the entire page to reload.\n        if (newTree === null) {\n            return state;\n        }\n        if ((0, _isnavigatingtonewrootlayout.isNavigatingToNewRootLayout)(currentTree, newTree)) {\n            return (0, _navigatereducer.handleExternalUrl)(state, mutable, state.canonicalUrl, state.pushRef.pendingPush);\n        }\n        const canonicalUrlOverrideHref = canonicalUrlOverride ? (0, _createhreffromurl.createHrefFromUrl)(canonicalUrlOverride) : undefined;\n        if (canonicalUrlOverrideHref) {\n            mutable.canonicalUrl = canonicalUrlOverrideHref;\n        }\n        const cache = (0, _approuter.createEmptyCacheNode)();\n        (0, _applyflightdata.applyFlightData)(navigatedAt, currentCache, cache, normalizedFlightData);\n        mutable.patchedTree = newTree;\n        mutable.cache = cache;\n        currentCache = cache;\n        currentTree = newTree;\n    }\n    return (0, _handlemutable.handleMutable)(state, mutable);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=server-patch-reducer.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWR1Y2Vycy9zZXJ2ZXItcGF0Y2gtcmVkdWNlci5qcyIsIm1hcHBpbmdzIjoiOzs7O3NEQWVnQkE7OztlQUFBQTs7OytDQWZrQjt5REFDVTt5REFDQTs2Q0FPVjs2Q0FDRjsyQ0FDRjt1Q0FFTztBQUU5QixTQUFTQSxtQkFDZEMsS0FBMkIsRUFDM0JDLE1BQXlCO0lBRXpCLE1BQU0sRUFDSkMsZ0JBQWdCLEVBQUVDLFVBQVUsRUFBRUMsY0FBY0Msb0JBQW9CLEVBQUUsRUFDbEVDLFdBQVcsRUFDWixHQUFHTDtJQUVKLE1BQU1NLFVBQW1CLENBQUM7SUFFMUJBLFFBQVFDLDBCQUEwQixHQUFHO0lBRXJDLDREQUE0RDtJQUM1RCxJQUFJLE9BQU9MLGVBQWUsVUFBVTtRQUNsQyxPQUFPTSxDQUFBQSxHQUFBQSxpQkFBQUEsaUJBQUFBLEVBQ0xULE9BQ0FPLFNBQ0FKLFlBQ0FILE1BQU1VLE9BQU8sQ0FBQ0MsV0FBVztJQUU3QjtJQUVBLElBQUlDLGNBQWNaLE1BQU1hLElBQUk7SUFDNUIsSUFBSUMsZUFBZWQsTUFBTWUsS0FBSztJQUU5QixLQUFLLE1BQU1DLHdCQUF3QmIsV0FBWTtRQUM3QyxNQUFNLEVBQUVjLGFBQWFDLGlCQUFpQixFQUFFTCxNQUFNTSxTQUFTLEVBQUUsR0FDdkRIO1FBRUYsTUFBTUksVUFBVUMsQ0FBQUEsR0FBQUEsNkJBQUFBLDJCQUFBQSxFQUNkO1lBQ0M7ZUFBT0g7U0FBa0IsRUFDMUJOLGFBQ0FPLFdBQ0FuQixNQUFNSSxZQUFZO1FBR3BCLGtJQUFrSTtRQUNsSSw4R0FBOEc7UUFDOUcsb0lBQW9JO1FBQ3BJLG1JQUFtSTtRQUNuSSw2QkFBNkI7UUFDN0IsSUFBSWdCLFlBQVksTUFBTTtZQUNwQixPQUFPcEI7UUFDVDtRQUVBLElBQUlzQixDQUFBQSxHQUFBQSw2QkFBQUEsMkJBQUFBLEVBQTRCVixhQUFhUSxVQUFVO1lBQ3JELE9BQU9YLENBQUFBLEdBQUFBLGlCQUFBQSxpQkFBQUEsRUFDTFQsT0FDQU8sU0FDQVAsTUFBTUksWUFBWSxFQUNsQkosTUFBTVUsT0FBTyxDQUFDQyxXQUFXO1FBRTdCO1FBRUEsTUFBTVksMkJBQTJCbEIsdUJBQzdCbUIsQ0FBQUEsR0FBQUEsbUJBQUFBLGlCQUFBQSxFQUFrQm5CLHdCQUNsQm9CO1FBRUosSUFBSUYsMEJBQTBCO1lBQzVCaEIsUUFBUUgsWUFBWSxHQUFHbUI7UUFDekI7UUFFQSxNQUFNUixRQUFtQlcsQ0FBQUEsR0FBQUEsV0FBQUEsb0JBQUFBO1FBQ3pCQyxDQUFBQSxHQUFBQSxpQkFBQUEsZUFBQUEsRUFBZ0JyQixhQUFhUSxjQUFjQyxPQUFPQztRQUVsRFQsUUFBUXFCLFdBQVcsR0FBR1I7UUFDdEJiLFFBQVFRLEtBQUssR0FBR0E7UUFFaEJELGVBQWVDO1FBQ2ZILGNBQWNRO0lBQ2hCO0lBRUEsT0FBT1MsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBYzdCLE9BQU9PO0FBQzlCIiwic291cmNlcyI6WyIvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZHVjZXJzL3NlcnZlci1wYXRjaC1yZWR1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhyZWZGcm9tVXJsIH0gZnJvbSAnLi4vY3JlYXRlLWhyZWYtZnJvbS11cmwnXG5pbXBvcnQgeyBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWUgfSBmcm9tICcuLi9hcHBseS1yb3V0ZXItc3RhdGUtcGF0Y2gtdG8tdHJlZSdcbmltcG9ydCB7IGlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dCB9IGZyb20gJy4uL2lzLW5hdmlnYXRpbmctdG8tbmV3LXJvb3QtbGF5b3V0J1xuaW1wb3J0IHR5cGUge1xuICBTZXJ2ZXJQYXRjaEFjdGlvbixcbiAgUmVkdWNlclN0YXRlLFxuICBSZWFkb25seVJlZHVjZXJTdGF0ZSxcbiAgTXV0YWJsZSxcbn0gZnJvbSAnLi4vcm91dGVyLXJlZHVjZXItdHlwZXMnXG5pbXBvcnQgeyBoYW5kbGVFeHRlcm5hbFVybCB9IGZyb20gJy4vbmF2aWdhdGUtcmVkdWNlcidcbmltcG9ydCB7IGFwcGx5RmxpZ2h0RGF0YSB9IGZyb20gJy4uL2FwcGx5LWZsaWdodC1kYXRhJ1xuaW1wb3J0IHsgaGFuZGxlTXV0YWJsZSB9IGZyb20gJy4uL2hhbmRsZS1tdXRhYmxlJ1xuaW1wb3J0IHR5cGUgeyBDYWNoZU5vZGUgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IGNyZWF0ZUVtcHR5Q2FjaGVOb2RlIH0gZnJvbSAnLi4vLi4vYXBwLXJvdXRlcidcblxuZXhwb3J0IGZ1bmN0aW9uIHNlcnZlclBhdGNoUmVkdWNlcihcbiAgc3RhdGU6IFJlYWRvbmx5UmVkdWNlclN0YXRlLFxuICBhY3Rpb246IFNlcnZlclBhdGNoQWN0aW9uXG4pOiBSZWR1Y2VyU3RhdGUge1xuICBjb25zdCB7XG4gICAgc2VydmVyUmVzcG9uc2U6IHsgZmxpZ2h0RGF0YSwgY2Fub25pY2FsVXJsOiBjYW5vbmljYWxVcmxPdmVycmlkZSB9LFxuICAgIG5hdmlnYXRlZEF0LFxuICB9ID0gYWN0aW9uXG5cbiAgY29uc3QgbXV0YWJsZTogTXV0YWJsZSA9IHt9XG5cbiAgbXV0YWJsZS5wcmVzZXJ2ZUN1c3RvbUhpc3RvcnlTdGF0ZSA9IGZhbHNlXG5cbiAgLy8gSGFuZGxlIGNhc2Ugd2hlbiBuYXZpZ2F0aW5nIHRvIHBhZ2UgaW4gYHBhZ2VzYCBmcm9tIGBhcHBgXG4gIGlmICh0eXBlb2YgZmxpZ2h0RGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gaGFuZGxlRXh0ZXJuYWxVcmwoXG4gICAgICBzdGF0ZSxcbiAgICAgIG11dGFibGUsXG4gICAgICBmbGlnaHREYXRhLFxuICAgICAgc3RhdGUucHVzaFJlZi5wZW5kaW5nUHVzaFxuICAgIClcbiAgfVxuXG4gIGxldCBjdXJyZW50VHJlZSA9IHN0YXRlLnRyZWVcbiAgbGV0IGN1cnJlbnRDYWNoZSA9IHN0YXRlLmNhY2hlXG5cbiAgZm9yIChjb25zdCBub3JtYWxpemVkRmxpZ2h0RGF0YSBvZiBmbGlnaHREYXRhKSB7XG4gICAgY29uc3QgeyBzZWdtZW50UGF0aDogZmxpZ2h0U2VnbWVudFBhdGgsIHRyZWU6IHRyZWVQYXRjaCB9ID1cbiAgICAgIG5vcm1hbGl6ZWRGbGlnaHREYXRhXG5cbiAgICBjb25zdCBuZXdUcmVlID0gYXBwbHlSb3V0ZXJTdGF0ZVBhdGNoVG9UcmVlKFxuICAgICAgLy8gVE9ETy1BUFA6IHJlbW92ZSAnJ1xuICAgICAgWycnLCAuLi5mbGlnaHRTZWdtZW50UGF0aF0sXG4gICAgICBjdXJyZW50VHJlZSxcbiAgICAgIHRyZWVQYXRjaCxcbiAgICAgIHN0YXRlLmNhbm9uaWNhbFVybFxuICAgIClcblxuICAgIC8vIGBhcHBseVJvdXRlclN0YXRlUGF0Y2hUb1RyZWVgIHJldHVybnMgYG51bGxgIHdoZW4gaXQgZGV0ZXJtaW5lZCB0aGF0IHRoZSBzZXJ2ZXIgcmVzcG9uc2UgaXMgbm90IGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgdHJlZS5cbiAgICAvLyBJbiBvdGhlciB3b3JkcywgdGhlIHNlcnZlciByZXNwb25kZWQgd2l0aCBhIHRyZWUgdGhhdCBkb2Vzbid0IG1hdGNoIHdoYXQgdGhlIGNsaWVudCBpcyBjdXJyZW50bHkgcmVuZGVyaW5nLlxuICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgc2VydmVyIHBhdGNoIGFjdGlvbiB0b29rIGxvbmdlciB0byByZXNvbHZlIHRoYW4gYSBzdWJzZXF1ZW50IG5hdmlnYXRpb24gd2hpY2ggd291bGQgaGF2ZSBjaGFuZ2VkIHRoZSB0cmVlLlxuICAgIC8vIFByZXZpb3VzbHkgdGhpcyBjYXNlIHRyaWdnZXJlZCBhbiBNUEEgbmF2aWdhdGlvbiBidXQgaXQgc2hvdWxkIGJlIHNhZmUgdG8gc2ltcGx5IGRpc2NhcmQgdGhlIHNlcnZlciByZXNwb25zZSByYXRoZXIgdGhhbiBmb3JjaW5nXG4gICAgLy8gdGhlIGVudGlyZSBwYWdlIHRvIHJlbG9hZC5cbiAgICBpZiAobmV3VHJlZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHN0YXRlXG4gICAgfVxuXG4gICAgaWYgKGlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dChjdXJyZW50VHJlZSwgbmV3VHJlZSkpIHtcbiAgICAgIHJldHVybiBoYW5kbGVFeHRlcm5hbFVybChcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIG11dGFibGUsXG4gICAgICAgIHN0YXRlLmNhbm9uaWNhbFVybCxcbiAgICAgICAgc3RhdGUucHVzaFJlZi5wZW5kaW5nUHVzaFxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IGNhbm9uaWNhbFVybE92ZXJyaWRlSHJlZiA9IGNhbm9uaWNhbFVybE92ZXJyaWRlXG4gICAgICA/IGNyZWF0ZUhyZWZGcm9tVXJsKGNhbm9uaWNhbFVybE92ZXJyaWRlKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIGlmIChjYW5vbmljYWxVcmxPdmVycmlkZUhyZWYpIHtcbiAgICAgIG11dGFibGUuY2Fub25pY2FsVXJsID0gY2Fub25pY2FsVXJsT3ZlcnJpZGVIcmVmXG4gICAgfVxuXG4gICAgY29uc3QgY2FjaGU6IENhY2hlTm9kZSA9IGNyZWF0ZUVtcHR5Q2FjaGVOb2RlKClcbiAgICBhcHBseUZsaWdodERhdGEobmF2aWdhdGVkQXQsIGN1cnJlbnRDYWNoZSwgY2FjaGUsIG5vcm1hbGl6ZWRGbGlnaHREYXRhKVxuXG4gICAgbXV0YWJsZS5wYXRjaGVkVHJlZSA9IG5ld1RyZWVcbiAgICBtdXRhYmxlLmNhY2hlID0gY2FjaGVcblxuICAgIGN1cnJlbnRDYWNoZSA9IGNhY2hlXG4gICAgY3VycmVudFRyZWUgPSBuZXdUcmVlXG4gIH1cblxuICByZXR1cm4gaGFuZGxlTXV0YWJsZShzdGF0ZSwgbXV0YWJsZSlcbn1cbiJdLCJuYW1lcyI6WyJzZXJ2ZXJQYXRjaFJlZHVjZXIiLCJzdGF0ZSIsImFjdGlvbiIsInNlcnZlclJlc3BvbnNlIiwiZmxpZ2h0RGF0YSIsImNhbm9uaWNhbFVybCIsImNhbm9uaWNhbFVybE92ZXJyaWRlIiwibmF2aWdhdGVkQXQiLCJtdXRhYmxlIiwicHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGUiLCJoYW5kbGVFeHRlcm5hbFVybCIsInB1c2hSZWYiLCJwZW5kaW5nUHVzaCIsImN1cnJlbnRUcmVlIiwidHJlZSIsImN1cnJlbnRDYWNoZSIsImNhY2hlIiwibm9ybWFsaXplZEZsaWdodERhdGEiLCJzZWdtZW50UGF0aCIsImZsaWdodFNlZ21lbnRQYXRoIiwidHJlZVBhdGNoIiwibmV3VHJlZSIsImFwcGx5Um91dGVyU3RhdGVQYXRjaFRvVHJlZSIsImlzTmF2aWdhdGluZ1RvTmV3Um9vdExheW91dCIsImNhbm9uaWNhbFVybE92ZXJyaWRlSHJlZiIsImNyZWF0ZUhyZWZGcm9tVXJsIiwidW5kZWZpbmVkIiwiY3JlYXRlRW1wdHlDYWNoZU5vZGUiLCJhcHBseUZsaWdodERhdGEiLCJwYXRjaGVkVHJlZSIsImhhbmRsZU11dGFibGUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/refetch-inactive-parallel-segments.js":
/*!***************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/refetch-inactive-parallel-segments.js ***!
  \***************************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    addRefreshMarkerToActiveParallelSegments: function() {\n        return addRefreshMarkerToActiveParallelSegments;\n    },\n    refreshInactiveParallelSegments: function() {\n        return refreshInactiveParallelSegments;\n    }\n});\nconst _applyflightdata = __webpack_require__(/*! ./apply-flight-data */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/apply-flight-data.js\");\nconst _fetchserverresponse = __webpack_require__(/*! ./fetch-server-response */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js\");\nconst _segment = __webpack_require__(/*! ../../../shared/lib/segment */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/segment.js\");\nasync function refreshInactiveParallelSegments(options) {\n    const fetchedSegments = new Set();\n    await refreshInactiveParallelSegmentsImpl({\n        ...options,\n        rootTree: options.updatedTree,\n        fetchedSegments\n    });\n}\nasync function refreshInactiveParallelSegmentsImpl(param) {\n    let { navigatedAt, state, updatedTree, updatedCache, includeNextUrl, fetchedSegments, rootTree = updatedTree, canonicalUrl } = param;\n    const [, parallelRoutes, refetchPath, refetchMarker] = updatedTree;\n    const fetchPromises = [];\n    if (refetchPath && refetchPath !== canonicalUrl && refetchMarker === 'refresh' && // it's possible for the tree to contain multiple segments that contain data at the same URL\n    // we keep track of them so we can dedupe the requests\n    !fetchedSegments.has(refetchPath)) {\n        fetchedSegments.add(refetchPath) // Mark this URL as fetched\n        ;\n        // Eagerly kick off the fetch for the refetch path & the parallel routes. This should be fine to do as they each operate\n        // independently on their own cache nodes, and `applyFlightData` will copy anything it doesn't care about from the existing cache.\n        const fetchPromise = (0, _fetchserverresponse.fetchServerResponse)(new URL(refetchPath, location.origin), {\n            // refetch from the root of the updated tree, otherwise it will be scoped to the current segment\n            // and might not contain the data we need to patch in interception route data (such as dynamic params from a previous segment)\n            flightRouterState: [\n                rootTree[0],\n                rootTree[1],\n                rootTree[2],\n                'refetch'\n            ],\n            nextUrl: includeNextUrl ? state.nextUrl : null\n        }).then((param)=>{\n            let { flightData } = param;\n            if (typeof flightData !== 'string') {\n                for (const flightDataPath of flightData){\n                    // we only pass the new cache as this function is called after clearing the router cache\n                    // and filling in the new page data from the server. Meaning the existing cache is actually the cache that's\n                    // just been created & has been written to, but hasn't been \"committed\" yet.\n                    (0, _applyflightdata.applyFlightData)(navigatedAt, updatedCache, updatedCache, flightDataPath);\n                }\n            } else {\n            // When flightData is a string, it suggests that the server response should have triggered an MPA navigation\n            // I'm not 100% sure of this decision, but it seems unlikely that we'd want to introduce a redirect side effect\n            // when refreshing on-screen data, so handling this has been ommitted.\n            }\n        });\n        fetchPromises.push(fetchPromise);\n    }\n    for(const key in parallelRoutes){\n        const parallelFetchPromise = refreshInactiveParallelSegmentsImpl({\n            navigatedAt,\n            state,\n            updatedTree: parallelRoutes[key],\n            updatedCache,\n            includeNextUrl,\n            fetchedSegments,\n            rootTree,\n            canonicalUrl\n        });\n        fetchPromises.push(parallelFetchPromise);\n    }\n    await Promise.all(fetchPromises);\n}\nfunction addRefreshMarkerToActiveParallelSegments(tree, path) {\n    const [segment, parallelRoutes, , refetchMarker] = tree;\n    // a page segment might also contain concatenated search params, so we do a partial match on the key\n    if (segment.includes(_segment.PAGE_SEGMENT_KEY) && refetchMarker !== 'refresh') {\n        tree[2] = path;\n        tree[3] = 'refresh';\n    }\n    for(const key in parallelRoutes){\n        addRefreshMarkerToActiveParallelSegments(parallelRoutes[key], path);\n    }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=refetch-inactive-parallel-segments.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yZWZldGNoLWluYWN0aXZlLXBhcmFsbGVsLXNlZ21lbnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQXlIZ0JBLHdDQUF3QztlQUF4Q0E7O0lBOUZNQywrQkFBK0I7ZUFBL0JBOzs7NkNBeEJVO2lEQUNJO3FDQUNIO0FBc0IxQixlQUFlQSxnQ0FDcEJDLE9BQXdDO0lBRXhDLE1BQU1DLGtCQUFrQixJQUFJQztJQUM1QixNQUFNQyxvQ0FBb0M7UUFDeEMsR0FBR0gsT0FBTztRQUNWSSxVQUFVSixRQUFRSyxXQUFXO1FBQzdCSjtJQUNGO0FBQ0Y7QUFFQSxlQUFlRSxvQ0FBb0MsS0FZbEQ7SUFaa0QsTUFDakRHLFdBQVcsRUFDWEMsS0FBSyxFQUNMRixXQUFXLEVBQ1hHLFlBQVksRUFDWkMsY0FBYyxFQUNkUixlQUFlLEVBQ2ZHLFdBQVdDLFdBQVcsRUFDdEJLLFlBQVksRUFJYixHQVprRDtJQWFqRCxNQUFNLEdBQUdDLGdCQUFnQkMsYUFBYUMsY0FBYyxHQUFHUjtJQUN2RCxNQUFNUyxnQkFBZ0IsRUFBRTtJQUV4QixJQUNFRixlQUNBQSxnQkFBZ0JGLGdCQUNoQkcsa0JBQWtCLGFBQ2xCLDRGQUE0RjtJQUM1RixzREFBc0Q7SUFDdEQsQ0FBQ1osZ0JBQWdCYyxHQUFHLENBQUNILGNBQ3JCO1FBQ0FYLGdCQUFnQmUsR0FBRyxDQUFDSixhQUFhLDJCQUEyQjs7UUFFNUQsd0hBQXdIO1FBQ3hILGtJQUFrSTtRQUNsSSxNQUFNSyxlQUFlQyxDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQUFBLEVBQ25CLElBQUlDLElBQUlQLGFBQWFRLFNBQVNDLE1BQU0sR0FDcEM7WUFDRSxnR0FBZ0c7WUFDaEcsOEhBQThIO1lBQzlIQyxtQkFBbUI7Z0JBQUNsQixRQUFRLENBQUMsRUFBRTtnQkFBRUEsUUFBUSxDQUFDLEVBQUU7Z0JBQUVBLFFBQVEsQ0FBQyxFQUFFO2dCQUFFO2FBQVU7WUFDckVtQixTQUFTZCxpQkFBaUJGLE1BQU1nQixPQUFPLEdBQUc7UUFDNUMsR0FDQUMsSUFBSSxDQUFDO2dCQUFDLEVBQUVDLFVBQVUsRUFBRTtZQUNwQixJQUFJLE9BQU9BLGVBQWUsVUFBVTtnQkFDbEMsS0FBSyxNQUFNQyxrQkFBa0JELFdBQVk7b0JBQ3ZDLHdGQUF3RjtvQkFDeEYsNEdBQTRHO29CQUM1Ryw0RUFBNEU7b0JBQzVFRSxDQUFBQSxHQUFBQSxpQkFBQUEsZUFBQUEsRUFDRXJCLGFBQ0FFLGNBQ0FBLGNBQ0FrQjtnQkFFSjtZQUNGLE9BQU87WUFDTCw0R0FBNEc7WUFDNUcsK0dBQStHO1lBQy9HLHNFQUFzRTtZQUN4RTtRQUNGO1FBRUFaLGNBQWNjLElBQUksQ0FBQ1g7SUFDckI7SUFFQSxJQUFLLE1BQU1ZLE9BQU9sQixlQUFnQjtRQUNoQyxNQUFNbUIsdUJBQXVCM0Isb0NBQW9DO1lBQy9ERztZQUNBQztZQUNBRixhQUFhTSxjQUFjLENBQUNrQixJQUFJO1lBQ2hDckI7WUFDQUM7WUFDQVI7WUFDQUc7WUFDQU07UUFDRjtRQUVBSSxjQUFjYyxJQUFJLENBQUNFO0lBQ3JCO0lBRUEsTUFBTUMsUUFBUUMsR0FBRyxDQUFDbEI7QUFDcEI7QUFRTyxTQUFTaEIseUNBQ2RtQyxJQUF1QixFQUN2QkMsSUFBWTtJQUVaLE1BQU0sQ0FBQ0MsU0FBU3hCLGtCQUFrQkUsY0FBYyxHQUFHb0I7SUFDbkQsb0dBQW9HO0lBQ3BHLElBQUlFLFFBQVFDLFFBQVEsQ0FBQ0MsU0FBQUEsZ0JBQWdCLEtBQUt4QixrQkFBa0IsV0FBVztRQUNyRW9CLElBQUksQ0FBQyxFQUFFLEdBQUdDO1FBQ1ZELElBQUksQ0FBQyxFQUFFLEdBQUc7SUFDWjtJQUVBLElBQUssTUFBTUosT0FBT2xCLGVBQWdCO1FBQ2hDYix5Q0FBeUNhLGNBQWMsQ0FBQ2tCLElBQUksRUFBRUs7SUFDaEU7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3JlZmV0Y2gtaW5hY3RpdmUtcGFyYWxsZWwtc2VnbWVudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGbGlnaHRSb3V0ZXJTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWNoZU5vZGUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB0eXBlIHsgQXBwUm91dGVyU3RhdGUgfSBmcm9tICcuL3JvdXRlci1yZWR1Y2VyLXR5cGVzJ1xuaW1wb3J0IHsgYXBwbHlGbGlnaHREYXRhIH0gZnJvbSAnLi9hcHBseS1mbGlnaHQtZGF0YSdcbmltcG9ydCB7IGZldGNoU2VydmVyUmVzcG9uc2UgfSBmcm9tICcuL2ZldGNoLXNlcnZlci1yZXNwb25zZSdcbmltcG9ydCB7IFBBR0VfU0VHTUVOVF9LRVkgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbGliL3NlZ21lbnQnXG5cbmludGVyZmFjZSBSZWZyZXNoSW5hY3RpdmVQYXJhbGxlbFNlZ21lbnRzIHtcbiAgbmF2aWdhdGVkQXQ6IG51bWJlclxuICBzdGF0ZTogQXBwUm91dGVyU3RhdGVcbiAgdXBkYXRlZFRyZWU6IEZsaWdodFJvdXRlclN0YXRlXG4gIHVwZGF0ZWRDYWNoZTogQ2FjaGVOb2RlXG4gIGluY2x1ZGVOZXh0VXJsOiBib29sZWFuXG4gIGNhbm9uaWNhbFVybDogc3RyaW5nXG59XG5cbi8qKlxuICogUmVmcmVzaGVzIGluYWN0aXZlIHNlZ21lbnRzIHRoYXQgYXJlIHN0aWxsIGluIHRoZSBjdXJyZW50IEZsaWdodFJvdXRlclN0YXRlLlxuICogQSBzZWdtZW50IGlzIGNvbnNpZGVyZWQgXCJpbmFjdGl2ZVwiIHdoZW4gdGhlIHNlcnZlciByZXNwb25zZSBpbmRpY2F0ZXMgaXQgZGlkbid0IG1hdGNoIHRvIGEgcGFnZSBjb21wb25lbnQuXG4gKiBUaGlzIGhhcHBlbnMgZHVyaW5nIGEgc29mdC1uYXZpZ2F0aW9uLCB3aGVyZSB0aGUgc2VydmVyIHdpbGwgd2FudCB0byBwYXRjaCBpbiB0aGUgc2VnbWVudFxuICogd2l0aCB0aGUgXCJkZWZhdWx0XCIgY29tcG9uZW50LCBidXQgd2UgZXhwbGljaXRseSBpZ25vcmUgdGhlIHNlcnZlciBpbiB0aGlzIGNhc2VcbiAqIGFuZCBrZWVwIHRoZSBleGlzdGluZyBzdGF0ZSBmb3IgdGhhdCBzZWdtZW50LiBOZXcgZGF0YSBmb3IgaW5hY3RpdmUgc2VnbWVudHMgYXJlIGluaGVyZW50bHlcbiAqIG5vdCBwYXJ0IG9mIHRoZSBzZXJ2ZXIgcmVzcG9uc2Ugd2hlbiB3ZSBwYXRjaCB0aGUgdHJlZSwgYmVjYXVzZSB0aGV5IHdlcmUgYXNzb2NpYXRlZCB3aXRoIGEgcmVzcG9uc2VcbiAqIGZyb20gYW4gZWFybGllciBuYXZpZ2F0aW9uL3JlcXVlc3QuIEZvciBlYWNoIHNlZ21lbnQsIG9uY2UgaXQgYmVjb21lcyBcImFjdGl2ZVwiLCB3ZSBlbmNvZGUgdGhlIFVSTCB0aGF0IHByb3ZpZGVkXG4gKiB0aGUgZGF0YSBmb3IgaXQuIFRoaXMgZnVuY3Rpb24gdHJhdmVyc2VzIHBhcmFsbGVsIHJvdXRlcyBsb29raW5nIGZvciB0aGVzZSBtYXJrZXJzIHNvIHRoYXQgaXQgY2FuIHJlLWZldGNoXG4gKiBhbmQgcGF0Y2ggdGhlIG5ldyBkYXRhIGludG8gdGhlIHRyZWUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWZyZXNoSW5hY3RpdmVQYXJhbGxlbFNlZ21lbnRzKFxuICBvcHRpb25zOiBSZWZyZXNoSW5hY3RpdmVQYXJhbGxlbFNlZ21lbnRzXG4pIHtcbiAgY29uc3QgZmV0Y2hlZFNlZ21lbnRzID0gbmV3IFNldDxzdHJpbmc+KClcbiAgYXdhaXQgcmVmcmVzaEluYWN0aXZlUGFyYWxsZWxTZWdtZW50c0ltcGwoe1xuICAgIC4uLm9wdGlvbnMsXG4gICAgcm9vdFRyZWU6IG9wdGlvbnMudXBkYXRlZFRyZWUsXG4gICAgZmV0Y2hlZFNlZ21lbnRzLFxuICB9KVxufVxuXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoSW5hY3RpdmVQYXJhbGxlbFNlZ21lbnRzSW1wbCh7XG4gIG5hdmlnYXRlZEF0LFxuICBzdGF0ZSxcbiAgdXBkYXRlZFRyZWUsXG4gIHVwZGF0ZWRDYWNoZSxcbiAgaW5jbHVkZU5leHRVcmwsXG4gIGZldGNoZWRTZWdtZW50cyxcbiAgcm9vdFRyZWUgPSB1cGRhdGVkVHJlZSxcbiAgY2Fub25pY2FsVXJsLFxufTogUmVmcmVzaEluYWN0aXZlUGFyYWxsZWxTZWdtZW50cyAmIHtcbiAgZmV0Y2hlZFNlZ21lbnRzOiBTZXQ8c3RyaW5nPlxuICByb290VHJlZTogRmxpZ2h0Um91dGVyU3RhdGVcbn0pIHtcbiAgY29uc3QgWywgcGFyYWxsZWxSb3V0ZXMsIHJlZmV0Y2hQYXRoLCByZWZldGNoTWFya2VyXSA9IHVwZGF0ZWRUcmVlXG4gIGNvbnN0IGZldGNoUHJvbWlzZXMgPSBbXVxuXG4gIGlmIChcbiAgICByZWZldGNoUGF0aCAmJlxuICAgIHJlZmV0Y2hQYXRoICE9PSBjYW5vbmljYWxVcmwgJiZcbiAgICByZWZldGNoTWFya2VyID09PSAncmVmcmVzaCcgJiZcbiAgICAvLyBpdCdzIHBvc3NpYmxlIGZvciB0aGUgdHJlZSB0byBjb250YWluIG11bHRpcGxlIHNlZ21lbnRzIHRoYXQgY29udGFpbiBkYXRhIGF0IHRoZSBzYW1lIFVSTFxuICAgIC8vIHdlIGtlZXAgdHJhY2sgb2YgdGhlbSBzbyB3ZSBjYW4gZGVkdXBlIHRoZSByZXF1ZXN0c1xuICAgICFmZXRjaGVkU2VnbWVudHMuaGFzKHJlZmV0Y2hQYXRoKVxuICApIHtcbiAgICBmZXRjaGVkU2VnbWVudHMuYWRkKHJlZmV0Y2hQYXRoKSAvLyBNYXJrIHRoaXMgVVJMIGFzIGZldGNoZWRcblxuICAgIC8vIEVhZ2VybHkga2ljayBvZmYgdGhlIGZldGNoIGZvciB0aGUgcmVmZXRjaCBwYXRoICYgdGhlIHBhcmFsbGVsIHJvdXRlcy4gVGhpcyBzaG91bGQgYmUgZmluZSB0byBkbyBhcyB0aGV5IGVhY2ggb3BlcmF0ZVxuICAgIC8vIGluZGVwZW5kZW50bHkgb24gdGhlaXIgb3duIGNhY2hlIG5vZGVzLCBhbmQgYGFwcGx5RmxpZ2h0RGF0YWAgd2lsbCBjb3B5IGFueXRoaW5nIGl0IGRvZXNuJ3QgY2FyZSBhYm91dCBmcm9tIHRoZSBleGlzdGluZyBjYWNoZS5cbiAgICBjb25zdCBmZXRjaFByb21pc2UgPSBmZXRjaFNlcnZlclJlc3BvbnNlKFxuICAgICAgbmV3IFVSTChyZWZldGNoUGF0aCwgbG9jYXRpb24ub3JpZ2luKSxcbiAgICAgIHtcbiAgICAgICAgLy8gcmVmZXRjaCBmcm9tIHRoZSByb290IG9mIHRoZSB1cGRhdGVkIHRyZWUsIG90aGVyd2lzZSBpdCB3aWxsIGJlIHNjb3BlZCB0byB0aGUgY3VycmVudCBzZWdtZW50XG4gICAgICAgIC8vIGFuZCBtaWdodCBub3QgY29udGFpbiB0aGUgZGF0YSB3ZSBuZWVkIHRvIHBhdGNoIGluIGludGVyY2VwdGlvbiByb3V0ZSBkYXRhIChzdWNoIGFzIGR5bmFtaWMgcGFyYW1zIGZyb20gYSBwcmV2aW91cyBzZWdtZW50KVxuICAgICAgICBmbGlnaHRSb3V0ZXJTdGF0ZTogW3Jvb3RUcmVlWzBdLCByb290VHJlZVsxXSwgcm9vdFRyZWVbMl0sICdyZWZldGNoJ10sXG4gICAgICAgIG5leHRVcmw6IGluY2x1ZGVOZXh0VXJsID8gc3RhdGUubmV4dFVybCA6IG51bGwsXG4gICAgICB9XG4gICAgKS50aGVuKCh7IGZsaWdodERhdGEgfSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBmbGlnaHREYXRhICE9PSAnc3RyaW5nJykge1xuICAgICAgICBmb3IgKGNvbnN0IGZsaWdodERhdGFQYXRoIG9mIGZsaWdodERhdGEpIHtcbiAgICAgICAgICAvLyB3ZSBvbmx5IHBhc3MgdGhlIG5ldyBjYWNoZSBhcyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBjbGVhcmluZyB0aGUgcm91dGVyIGNhY2hlXG4gICAgICAgICAgLy8gYW5kIGZpbGxpbmcgaW4gdGhlIG5ldyBwYWdlIGRhdGEgZnJvbSB0aGUgc2VydmVyLiBNZWFuaW5nIHRoZSBleGlzdGluZyBjYWNoZSBpcyBhY3R1YWxseSB0aGUgY2FjaGUgdGhhdCdzXG4gICAgICAgICAgLy8ganVzdCBiZWVuIGNyZWF0ZWQgJiBoYXMgYmVlbiB3cml0dGVuIHRvLCBidXQgaGFzbid0IGJlZW4gXCJjb21taXR0ZWRcIiB5ZXQuXG4gICAgICAgICAgYXBwbHlGbGlnaHREYXRhKFxuICAgICAgICAgICAgbmF2aWdhdGVkQXQsXG4gICAgICAgICAgICB1cGRhdGVkQ2FjaGUsXG4gICAgICAgICAgICB1cGRhdGVkQ2FjaGUsXG4gICAgICAgICAgICBmbGlnaHREYXRhUGF0aFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2hlbiBmbGlnaHREYXRhIGlzIGEgc3RyaW5nLCBpdCBzdWdnZXN0cyB0aGF0IHRoZSBzZXJ2ZXIgcmVzcG9uc2Ugc2hvdWxkIGhhdmUgdHJpZ2dlcmVkIGFuIE1QQSBuYXZpZ2F0aW9uXG4gICAgICAgIC8vIEknbSBub3QgMTAwJSBzdXJlIG9mIHRoaXMgZGVjaXNpb24sIGJ1dCBpdCBzZWVtcyB1bmxpa2VseSB0aGF0IHdlJ2Qgd2FudCB0byBpbnRyb2R1Y2UgYSByZWRpcmVjdCBzaWRlIGVmZmVjdFxuICAgICAgICAvLyB3aGVuIHJlZnJlc2hpbmcgb24tc2NyZWVuIGRhdGEsIHNvIGhhbmRsaW5nIHRoaXMgaGFzIGJlZW4gb21taXR0ZWQuXG4gICAgICB9XG4gICAgfSlcblxuICAgIGZldGNoUHJvbWlzZXMucHVzaChmZXRjaFByb21pc2UpXG4gIH1cblxuICBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbGxlbFJvdXRlcykge1xuICAgIGNvbnN0IHBhcmFsbGVsRmV0Y2hQcm9taXNlID0gcmVmcmVzaEluYWN0aXZlUGFyYWxsZWxTZWdtZW50c0ltcGwoe1xuICAgICAgbmF2aWdhdGVkQXQsXG4gICAgICBzdGF0ZSxcbiAgICAgIHVwZGF0ZWRUcmVlOiBwYXJhbGxlbFJvdXRlc1trZXldLFxuICAgICAgdXBkYXRlZENhY2hlLFxuICAgICAgaW5jbHVkZU5leHRVcmwsXG4gICAgICBmZXRjaGVkU2VnbWVudHMsXG4gICAgICByb290VHJlZSxcbiAgICAgIGNhbm9uaWNhbFVybCxcbiAgICB9KVxuXG4gICAgZmV0Y2hQcm9taXNlcy5wdXNoKHBhcmFsbGVsRmV0Y2hQcm9taXNlKVxuICB9XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwoZmV0Y2hQcm9taXNlcylcbn1cblxuLyoqXG4gKiBXYWxrcyB0aGUgY3VycmVudCBwYXJhbGxlbCBzZWdtZW50cyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgXCJhY3RpdmVcIi5cbiAqIEFuIGFjdGl2ZSBwYXJhbGxlbCByb3V0ZSB3aWxsIGhhdmUgYSBgX19QQUdFX19gIHNlZ21lbnQgaW4gdGhlIEZsaWdodFJvdXRlclN0YXRlLlxuICogQXMgb3Bwb3NlZCB0byBhIGBfX0RFRkFVTFRfX2Agc2VnbWVudCwgd2hpY2ggbWVhbnMgdGhlcmUgd2FzIG5vIG1hdGNoIGZvciB0aGF0IHBhcmFsbGVsIHJvdXRlLlxuICogV2UgYWRkIGEgc3BlY2lhbCBtYXJrZXIgaGVyZSBzbyB0aGF0IHdlIGtub3cgaG93IHRvIHJlZnJlc2ggaXRzIGRhdGEgd2hlbiB0aGUgcm91dGVyIGlzIHJldmFsaWRhdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkUmVmcmVzaE1hcmtlclRvQWN0aXZlUGFyYWxsZWxTZWdtZW50cyhcbiAgdHJlZTogRmxpZ2h0Um91dGVyU3RhdGUsXG4gIHBhdGg6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IFtzZWdtZW50LCBwYXJhbGxlbFJvdXRlcywgLCByZWZldGNoTWFya2VyXSA9IHRyZWVcbiAgLy8gYSBwYWdlIHNlZ21lbnQgbWlnaHQgYWxzbyBjb250YWluIGNvbmNhdGVuYXRlZCBzZWFyY2ggcGFyYW1zLCBzbyB3ZSBkbyBhIHBhcnRpYWwgbWF0Y2ggb24gdGhlIGtleVxuICBpZiAoc2VnbWVudC5pbmNsdWRlcyhQQUdFX1NFR01FTlRfS0VZKSAmJiByZWZldGNoTWFya2VyICE9PSAncmVmcmVzaCcpIHtcbiAgICB0cmVlWzJdID0gcGF0aFxuICAgIHRyZWVbM10gPSAncmVmcmVzaCdcbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IGluIHBhcmFsbGVsUm91dGVzKSB7XG4gICAgYWRkUmVmcmVzaE1hcmtlclRvQWN0aXZlUGFyYWxsZWxTZWdtZW50cyhwYXJhbGxlbFJvdXRlc1trZXldLCBwYXRoKVxuICB9XG59XG4iXSwibmFtZXMiOlsiYWRkUmVmcmVzaE1hcmtlclRvQWN0aXZlUGFyYWxsZWxTZWdtZW50cyIsInJlZnJlc2hJbmFjdGl2ZVBhcmFsbGVsU2VnbWVudHMiLCJvcHRpb25zIiwiZmV0Y2hlZFNlZ21lbnRzIiwiU2V0IiwicmVmcmVzaEluYWN0aXZlUGFyYWxsZWxTZWdtZW50c0ltcGwiLCJyb290VHJlZSIsInVwZGF0ZWRUcmVlIiwibmF2aWdhdGVkQXQiLCJzdGF0ZSIsInVwZGF0ZWRDYWNoZSIsImluY2x1ZGVOZXh0VXJsIiwiY2Fub25pY2FsVXJsIiwicGFyYWxsZWxSb3V0ZXMiLCJyZWZldGNoUGF0aCIsInJlZmV0Y2hNYXJrZXIiLCJmZXRjaFByb21pc2VzIiwiaGFzIiwiYWRkIiwiZmV0Y2hQcm9taXNlIiwiZmV0Y2hTZXJ2ZXJSZXNwb25zZSIsIlVSTCIsImxvY2F0aW9uIiwib3JpZ2luIiwiZmxpZ2h0Um91dGVyU3RhdGUiLCJuZXh0VXJsIiwidGhlbiIsImZsaWdodERhdGEiLCJmbGlnaHREYXRhUGF0aCIsImFwcGx5RmxpZ2h0RGF0YSIsInB1c2giLCJrZXkiLCJwYXJhbGxlbEZldGNoUHJvbWlzZSIsIlByb21pc2UiLCJhbGwiLCJ0cmVlIiwicGF0aCIsInNlZ21lbnQiLCJpbmNsdWRlcyIsIlBBR0VfU0VHTUVOVF9LRVkiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/refetch-inactive-parallel-segments.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js":
/*!*************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js ***!
  \*************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    ACTION_HMR_REFRESH: function() {\n        return ACTION_HMR_REFRESH;\n    },\n    ACTION_NAVIGATE: function() {\n        return ACTION_NAVIGATE;\n    },\n    ACTION_PREFETCH: function() {\n        return ACTION_PREFETCH;\n    },\n    ACTION_REFRESH: function() {\n        return ACTION_REFRESH;\n    },\n    ACTION_RESTORE: function() {\n        return ACTION_RESTORE;\n    },\n    ACTION_SERVER_ACTION: function() {\n        return ACTION_SERVER_ACTION;\n    },\n    ACTION_SERVER_PATCH: function() {\n        return ACTION_SERVER_PATCH;\n    },\n    PrefetchCacheEntryStatus: function() {\n        return PrefetchCacheEntryStatus;\n    },\n    PrefetchKind: function() {\n        return PrefetchKind;\n    }\n});\nconst ACTION_REFRESH = 'refresh';\nconst ACTION_NAVIGATE = 'navigate';\nconst ACTION_RESTORE = 'restore';\nconst ACTION_SERVER_PATCH = 'server-patch';\nconst ACTION_PREFETCH = 'prefetch';\nconst ACTION_HMR_REFRESH = 'hmr-refresh';\nconst ACTION_SERVER_ACTION = 'server-action';\nvar PrefetchKind = /*#__PURE__*/ function(PrefetchKind) {\n    PrefetchKind[\"AUTO\"] = \"auto\";\n    PrefetchKind[\"FULL\"] = \"full\";\n    PrefetchKind[\"TEMPORARY\"] = \"temporary\";\n    return PrefetchKind;\n}({});\nvar PrefetchCacheEntryStatus = /*#__PURE__*/ function(PrefetchCacheEntryStatus) {\n    PrefetchCacheEntryStatus[\"fresh\"] = \"fresh\";\n    PrefetchCacheEntryStatus[\"reusable\"] = \"reusable\";\n    PrefetchCacheEntryStatus[\"expired\"] = \"expired\";\n    PrefetchCacheEntryStatus[\"stale\"] = \"stale\";\n    return PrefetchCacheEntryStatus;\n}({});\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=router-reducer-types.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yb3V0ZXItcmVkdWNlci10eXBlcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFZYUEsa0JBQWtCO2VBQWxCQTs7SUFKQUMsZUFBZTtlQUFmQTs7SUFHQUMsZUFBZTtlQUFmQTs7SUFKQUMsY0FBYztlQUFkQTs7SUFFQUMsY0FBYztlQUFkQTs7SUFJQUMsb0JBQW9CO2VBQXBCQTs7SUFIQUMsbUJBQW1CO2VBQW5CQTs7SUF5TURDLHdCQUF3QjtlQUF4QkE7O0lBaEVBQyxZQUFZO2VBQVpBOzs7QUE1SUwsTUFBTUwsaUJBQWlCO0FBQ3ZCLE1BQU1GLGtCQUFrQjtBQUN4QixNQUFNRyxpQkFBaUI7QUFDdkIsTUFBTUUsc0JBQXNCO0FBQzVCLE1BQU1KLGtCQUFrQjtBQUN4QixNQUFNRixxQkFBcUI7QUFDM0IsTUFBTUssdUJBQXVCO0FBc0k3QixJQUFLRyxlQUFBQSxXQUFBQSxHQUFBQSxTQUFBQSxZQUFBQTs7OztXQUFBQTs7QUFnRUwsSUFBS0QsMkJBQUFBLFdBQUFBLEdBQUFBLFNBQUFBLHdCQUFBQTs7Ozs7V0FBQUEiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yb3V0ZXItcmVkdWNlci10eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhY2hlTm9kZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHR5cGUge1xuICBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgRmxpZ2h0U2VnbWVudFBhdGgsXG59IGZyb20gJy4uLy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBGZXRjaFNlcnZlclJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi9mZXRjaC1zZXJ2ZXItcmVzcG9uc2UnXG5cbmV4cG9ydCBjb25zdCBBQ1RJT05fUkVGUkVTSCA9ICdyZWZyZXNoJ1xuZXhwb3J0IGNvbnN0IEFDVElPTl9OQVZJR0FURSA9ICduYXZpZ2F0ZSdcbmV4cG9ydCBjb25zdCBBQ1RJT05fUkVTVE9SRSA9ICdyZXN0b3JlJ1xuZXhwb3J0IGNvbnN0IEFDVElPTl9TRVJWRVJfUEFUQ0ggPSAnc2VydmVyLXBhdGNoJ1xuZXhwb3J0IGNvbnN0IEFDVElPTl9QUkVGRVRDSCA9ICdwcmVmZXRjaCdcbmV4cG9ydCBjb25zdCBBQ1RJT05fSE1SX1JFRlJFU0ggPSAnaG1yLXJlZnJlc2gnXG5leHBvcnQgY29uc3QgQUNUSU9OX1NFUlZFUl9BQ1RJT04gPSAnc2VydmVyLWFjdGlvbidcblxuZXhwb3J0IHR5cGUgUm91dGVyQ2hhbmdlQnlTZXJ2ZXJSZXNwb25zZSA9ICh7XG4gIG5hdmlnYXRlZEF0LFxuICBwcmV2aW91c1RyZWUsXG4gIHNlcnZlclJlc3BvbnNlLFxufToge1xuICBuYXZpZ2F0ZWRBdDogbnVtYmVyXG4gIHByZXZpb3VzVHJlZTogRmxpZ2h0Um91dGVyU3RhdGVcbiAgc2VydmVyUmVzcG9uc2U6IEZldGNoU2VydmVyUmVzcG9uc2VSZXN1bHRcbn0pID0+IHZvaWRcblxuZXhwb3J0IGludGVyZmFjZSBNdXRhYmxlIHtcbiAgbXBhTmF2aWdhdGlvbj86IGJvb2xlYW5cbiAgcGF0Y2hlZFRyZWU/OiBGbGlnaHRSb3V0ZXJTdGF0ZVxuICBjYW5vbmljYWxVcmw/OiBzdHJpbmdcbiAgc2Nyb2xsYWJsZVNlZ21lbnRzPzogRmxpZ2h0U2VnbWVudFBhdGhbXVxuICBwZW5kaW5nUHVzaD86IGJvb2xlYW5cbiAgY2FjaGU/OiBDYWNoZU5vZGVcbiAgcHJlZmV0Y2hDYWNoZT86IEFwcFJvdXRlclN0YXRlWydwcmVmZXRjaENhY2hlJ11cbiAgaGFzaEZyYWdtZW50Pzogc3RyaW5nXG4gIHNob3VsZFNjcm9sbD86IGJvb2xlYW5cbiAgcHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGU/OiBib29sZWFuXG4gIG9ubHlIYXNoQ2hhbmdlPzogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZlckFjdGlvbk11dGFibGUgZXh0ZW5kcyBNdXRhYmxlIHtcbiAgaW5GbGlnaHRTZXJ2ZXJBY3Rpb24/OiBQcm9taXNlPGFueT4gfCBudWxsXG59XG5cbi8qKlxuICogUmVmcmVzaCB0cmlnZ2VycyBhIHJlZnJlc2ggb2YgdGhlIGZ1bGwgcGFnZSBkYXRhLlxuICogLSBmZXRjaGVzIHRoZSBGbGlnaHQgZGF0YSBhbmQgZmlsbHMgcnNjIGF0IHRoZSByb290IG9mIHRoZSBjYWNoZS5cbiAqIC0gVGhlIHJvdXRlciBzdGF0ZSBpcyB1cGRhdGVkIGF0IHRoZSByb290LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hBY3Rpb24ge1xuICB0eXBlOiB0eXBlb2YgQUNUSU9OX1JFRlJFU0hcbiAgb3JpZ2luOiBMb2NhdGlvblsnb3JpZ2luJ11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBIbXJSZWZyZXNoQWN0aW9uIHtcbiAgdHlwZTogdHlwZW9mIEFDVElPTl9ITVJfUkVGUkVTSFxuICBvcmlnaW46IExvY2F0aW9uWydvcmlnaW4nXVxufVxuXG5leHBvcnQgdHlwZSBTZXJ2ZXJBY3Rpb25EaXNwYXRjaGVyID0gKFxuICBhcmdzOiBPbWl0PFxuICAgIFNlcnZlckFjdGlvbkFjdGlvbixcbiAgICAndHlwZScgfCAnbXV0YWJsZScgfCAnbmF2aWdhdGUnIHwgJ2NoYW5nZUJ5U2VydmVyUmVzcG9uc2UnIHwgJ2NhY2hlJ1xuICA+XG4pID0+IHZvaWRcblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJBY3Rpb25BY3Rpb24ge1xuICB0eXBlOiB0eXBlb2YgQUNUSU9OX1NFUlZFUl9BQ1RJT05cbiAgYWN0aW9uSWQ6IHN0cmluZ1xuICBhY3Rpb25BcmdzOiBhbnlbXVxuICByZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZFxuICByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWRcbn1cblxuLyoqXG4gKiBOYXZpZ2F0ZSB0cmlnZ2VycyBhIG5hdmlnYXRpb24gdG8gdGhlIHByb3ZpZGVkIHVybC4gSXQgc3VwcG9ydHMgdHdvIHR5cGVzOiBgcHVzaGAgYW5kIGByZXBsYWNlYC5cbiAqXG4gKiBgbmF2aWdhdGVUeXBlYDpcbiAqIC0gYHB1c2hgIC0gcHVzaGVzIGEgbmV3IGhpc3RvcnkgZW50cnkgaW4gdGhlIGJyb3dzZXIgaGlzdG9yeVxuICogLSBgcmVwbGFjZWAgLSByZXBsYWNlcyB0aGUgY3VycmVudCBoaXN0b3J5IGVudHJ5IGluIHRoZSBicm93c2VyIGhpc3RvcnlcbiAqXG4gKiBOYXZpZ2F0ZSBoYXMgbXVsdGlwbGUgY2FjaGUgaGV1cmlzdGljczpcbiAqIC0gcGFnZSB3YXMgcHJlZmV0Y2hlZFxuICogIC0gQXBwbHkgcm91dGVyIHN0YXRlIHRyZWUgZnJvbSBwcmVmZXRjaFxuICogIC0gQXBwbHkgRmxpZ2h0IGRhdGEgZnJvbSBwcmVmZXRjaCB0byB0aGUgY2FjaGVcbiAqICAtIElmIEZsaWdodCBkYXRhIGlzIGEgc3RyaW5nLCBpdCdzIGEgcmVkaXJlY3QgYW5kIHRoZSBzdGF0ZSBpcyB1cGRhdGVkIHRvIHRyaWdnZXIgYSByZWRpcmVjdFxuICogIC0gQ2hlY2sgaWYgaGFyZCBuYXZpZ2F0aW9uIGlzIG5lZWRlZFxuICogICAgLSBIYXJkIG5hdmlnYXRpb24gaGFwcGVucyB3aGVuIGEgZHluYW1pYyBwYXJhbWV0ZXIgYmVsb3cgdGhlIGNvbW1vbiBsYXlvdXQgY2hhbmdlZFxuICogICAgLSBXaGVuIGhhcmQgbmF2aWdhdGlvbiBpcyBuZWVkZWQgdGhlIGNhY2hlIGlzIGludmFsaWRhdGVkIGJlbG93IHRoZSBmbGlnaHRTZWdtZW50UGF0aFxuICogICAgLSBUaGUgbWlzc2luZyBjYWNoZSBub2RlcyBvZiB0aGUgcGFnZSB3aWxsIGJlIGZldGNoZWQgaW4gbGF5b3V0LXJvdXRlciBhbmQgdHJpZ2dlciB0aGUgU0VSVkVSX1BBVENIIGFjdGlvblxuICogIC0gSWYgaGFyZCBuYXZpZ2F0aW9uIGlzIG5vdCBuZWVkZWRcbiAqICAgIC0gVGhlIGNhY2hlIGlzIHJldXNlZFxuICogICAgLSBJZiBhbnkgY2FjaGUgbm9kZXMgYXJlIG1pc3NpbmcgdGhleSdsbCBiZSBmZXRjaGVkIGluIGxheW91dC1yb3V0ZXIgYW5kIHRyaWdnZXIgdGhlIFNFUlZFUl9QQVRDSCBhY3Rpb25cbiAqIC0gcGFnZSB3YXMgbm90IHByZWZldGNoZWRcbiAqICAtIFRoZSBuYXZpZ2F0ZSB3YXMgY2FsbGVkIGZyb20gYG5leHQvcm91dGVyYCAoYHJvdXRlci5wdXNoKClgIC8gYHJvdXRlci5yZXBsYWNlKClgKSAvIGBuZXh0L2xpbmtgIHdpdGhvdXQgcHJlZmV0Y2hlZCBkYXRhIGF2YWlsYWJsZSAoZS5nLiB0aGUgcHJlZmV0Y2ggZGlkbid0IGNvbWUgYmFjayBmcm9tIHRoZSBzZXJ2ZXIgYmVmb3JlIGNsaWNraW5nIHRoZSBsaW5rKVxuICogICAgLSBGbGlnaHQgZGF0YSBpcyBmZXRjaGVkIGluIHRoZSByZWR1Y2VyIChzdXNwZW5kcyB0aGUgcmVkdWNlcilcbiAqICAgIC0gUm91dGVyIHN0YXRlIHRyZWUgaXMgY3JlYXRlZCBiYXNlZCBvbiBGbGlnaHQgZGF0YVxuICogICAgLSBDYWNoZSBpcyBmaWxsZWQgYmFzZWQgb24gdGhlIEZsaWdodCBkYXRhXG4gKlxuICogQWJvdmUgc3RlcHMgZXhwbGFpbiAzIGNhc2VzOlxuICogLSBgc29mdGAgLSBSZXVzZXMgdGhlIGV4aXN0aW5nIGNhY2hlIGFuZCBmZXRjaGVzIG1pc3Npbmcgbm9kZXMgaW4gbGF5b3V0LXJvdXRlci5cbiAqIC0gYGhhcmRgIC0gQ3JlYXRlcyBhIG5ldyBjYWNoZSB3aGVyZSBjYWNoZSBub2RlcyBhcmUgcmVtb3ZlZCBiZWxvdyB0aGUgY29tbW9uIGxheW91dCBhbmQgZmV0Y2hlcyBtaXNzaW5nIG5vZGVzIGluIGxheW91dC1yb3V0ZXIuXG4gKiAtIGBvcHRpbWlzdGljYCAoZXhwbGljaXQgbm8gcHJlZmV0Y2gpIC0gQ3JlYXRlcyBhIG5ldyBjYWNoZSBhbmQga2lja3Mgb2ZmIHRoZSBkYXRhIGZldGNoIGluIHRoZSByZWR1Y2VyLiBUaGUgZGF0YSBmZXRjaCBpcyBhd2FpdGVkIGluIHRoZSBsYXlvdXQtcm91dGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hdmlnYXRlQWN0aW9uIHtcbiAgdHlwZTogdHlwZW9mIEFDVElPTl9OQVZJR0FURVxuICB1cmw6IFVSTFxuICBpc0V4dGVybmFsVXJsOiBib29sZWFuXG4gIGxvY2F0aW9uU2VhcmNoOiBMb2NhdGlvblsnc2VhcmNoJ11cbiAgbmF2aWdhdGVUeXBlOiAncHVzaCcgfCAncmVwbGFjZSdcbiAgc2hvdWxkU2Nyb2xsOiBib29sZWFuXG4gIGFsbG93QWxpYXNpbmc6IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBSZXN0b3JlIGFwcGxpZXMgdGhlIHByb3ZpZGVkIHJvdXRlciBzdGF0ZS5cbiAqIC0gVXNlZCBmb3IgYHBvcHN0YXRlYCAoYmFjay9mb3J3YXJkIG5hdmlnYXRpb24pIHdoZXJlIGEga25vd24gcm91dGVyIHN0YXRlIGhhcyB0byBiZSBhcHBsaWVkLlxuICogLSBBbHNvIHVzZWQgd2hlbiBzeW5jaW5nIHRoZSByb3V0ZXIgc3RhdGUgd2l0aCBgcHVzaFN0YXRlYC9gcmVwbGFjZVN0YXRlYCBjYWxscy5cbiAqIC0gUm91dGVyIHN0YXRlIGlzIGFwcGxpZWQgYXMtaXMgZnJvbSB0aGUgaGlzdG9yeSBzdGF0ZSwgaWYgYXZhaWxhYmxlLlxuICogLSBJZiB0aGUgaGlzdG9yeSBzdGF0ZSBkb2VzIG5vdCBjb250YWluIHRoZSByb3V0ZXIgc3RhdGUsIHRoZSBleGlzdGluZyByb3V0ZXIgc3RhdGUgaXMgdXNlZC5cbiAqIC0gSWYgYW55IGNhY2hlIG5vZGUgaXMgbWlzc2luZyBpdCB3aWxsIGJlIGZldGNoZWQgaW4gbGF5b3V0LXJvdXRlciBkdXJpbmcgcmVuZGVyaW5nIGFuZCB0aGUgc2VydmVyLXBhdGNoIGNhc2UuXG4gKiAtIElmIGV4aXN0aW5nIGNhY2hlIG5vZGVzIG1hdGNoIHRoZXNlIGFyZSB1c2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RvcmVBY3Rpb24ge1xuICB0eXBlOiB0eXBlb2YgQUNUSU9OX1JFU1RPUkVcbiAgdXJsOiBVUkxcbiAgdHJlZTogRmxpZ2h0Um91dGVyU3RhdGUgfCB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBTZXJ2ZXItcGF0Y2ggYXBwbGllcyB0aGUgcHJvdmlkZWQgRmxpZ2h0IGRhdGEgdG8gdGhlIGNhY2hlIGFuZCByb3V0ZXIgdHJlZS5cbiAqIC0gT25seSB0cmlnZ2VyZWQgaW4gbGF5b3V0LXJvdXRlci5cbiAqIC0gQ3JlYXRlcyBhIG5ldyBjYWNoZSBhbmQgcm91dGVyIHN0YXRlIHdpdGggdGhlIEZsaWdodCBkYXRhIGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmVyUGF0Y2hBY3Rpb24ge1xuICB0eXBlOiB0eXBlb2YgQUNUSU9OX1NFUlZFUl9QQVRDSFxuICBuYXZpZ2F0ZWRBdDogbnVtYmVyXG4gIHNlcnZlclJlc3BvbnNlOiBGZXRjaFNlcnZlclJlc3BvbnNlUmVzdWx0XG4gIHByZXZpb3VzVHJlZTogRmxpZ2h0Um91dGVyU3RhdGVcbn1cblxuLyoqXG4gKiBQcmVmZXRjaEtpbmQgZGVmaW5lcyB0aGUgdHlwZSBvZiBwcmVmZXRjaGluZyB0aGF0IHNob3VsZCBiZSBkb25lLlxuICogLSBgYXV0b2AgLSBpZiB0aGUgcGFnZSBpcyBkeW5hbWljLCBwcmVmZXRjaCB0aGUgcGFnZSBkYXRhIHBhcnRpYWxseSwgaWYgc3RhdGljIHByZWZldGNoIHRoZSBwYWdlIGRhdGEgZnVsbHkuXG4gKiAtIGBmdWxsYCAtIHByZWZldGNoIHRoZSBwYWdlIGRhdGEgZnVsbHkuXG4gKiAtIGB0ZW1wb3JhcnlgIC0gYSB0ZW1wb3JhcnkgcHJlZmV0Y2ggZW50cnkgaXMgYWRkZWQgdG8gdGhlIGNhY2hlLCB0aGlzIGlzIHVzZWQgd2hlbiBwcmVmZXRjaD17ZmFsc2V9IGlzIHVzZWQgaW4gbmV4dC9saW5rIG9yIHdoZW4geW91IHB1c2ggYSByb3V0ZSBwcm9ncmFtbWF0aWNhbGx5LlxuICovXG5cbmV4cG9ydCBlbnVtIFByZWZldGNoS2luZCB7XG4gIEFVVE8gPSAnYXV0bycsXG4gIEZVTEwgPSAnZnVsbCcsXG4gIFRFTVBPUkFSWSA9ICd0ZW1wb3JhcnknLFxufVxuXG4vKipcbiAqIFByZWZldGNoIGFkZHMgdGhlIHByb3ZpZGVkIEZsaWdodERhdGEgdG8gdGhlIHByZWZldGNoIGNhY2hlXG4gKiAtIENyZWF0ZXMgdGhlIHJvdXRlciBzdGF0ZSB0cmVlIGJhc2VkIG9uIHRoZSBwYXRjaCBpbiBGbGlnaHREYXRhXG4gKiAtIEFkZHMgdGhlIEZsaWdodERhdGEgdG8gdGhlIHByZWZldGNoIGNhY2hlXG4gKiAtIEluIEFDVElPTl9OQVZJR0FURSB0aGUgcHJlZmV0Y2ggY2FjaGUgaXMgY2hlY2tlZCBhbmQgdGhlIHJvdXRlciBzdGF0ZSB0cmVlIGFuZCBGbGlnaHREYXRhIGFyZSBhcHBsaWVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZWZldGNoQWN0aW9uIHtcbiAgdHlwZTogdHlwZW9mIEFDVElPTl9QUkVGRVRDSFxuICB1cmw6IFVSTFxuICBraW5kOiBQcmVmZXRjaEtpbmRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQdXNoUmVmIHtcbiAgLyoqXG4gICAqIElmIHRoZSBhcHAtcm91dGVyIHNob3VsZCBwdXNoIGEgbmV3IGhpc3RvcnkgZW50cnkgaW4gYXBwLXJvdXRlcidzIHVzZUVmZmVjdCgpXG4gICAqL1xuICBwZW5kaW5nUHVzaDogYm9vbGVhblxuICAvKipcbiAgICogTXVsdGktcGFnZSBuYXZpZ2F0aW9uIHRocm91Z2ggbG9jYXRpb24uaHJlZi5cbiAgICovXG4gIG1wYU5hdmlnYXRpb246IGJvb2xlYW5cbiAgLyoqXG4gICAqIFNraXAgYXBwbHlpbmcgdGhlIHJvdXRlciBzdGF0ZSB0byB0aGUgYnJvd3NlciBoaXN0b3J5IHN0YXRlLlxuICAgKi9cbiAgcHJlc2VydmVDdXN0b21IaXN0b3J5U3RhdGU6IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgRm9jdXNBbmRTY3JvbGxSZWYgPSB7XG4gIC8qKlxuICAgKiBJZiBmb2N1cyBhbmQgc2Nyb2xsIHNob3VsZCBiZSBzZXQgaW4gdGhlIGxheW91dC1yb3V0ZXIncyB1c2VFZmZlY3QoKVxuICAgKi9cbiAgYXBwbHk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIFRoZSBoYXNoIGZyYWdtZW50IHRoYXQgc2hvdWxkIGJlIHNjcm9sbGVkIHRvLlxuICAgKi9cbiAgaGFzaEZyYWdtZW50OiBzdHJpbmcgfCBudWxsXG4gIC8qKlxuICAgKiBUaGUgcGF0aHMgb2YgdGhlIHNlZ21lbnRzIHRoYXQgc2hvdWxkIGJlIGZvY3VzZWQuXG4gICAqL1xuICBzZWdtZW50UGF0aHM6IEZsaWdodFNlZ21lbnRQYXRoW11cbiAgLyoqXG4gICAqIElmIG9ubHkgdGhlIFVSTHMgaGFzaCBmcmFnbWVudCBjaGFuZ2VkXG4gICAqL1xuICBvbmx5SGFzaENoYW5nZTogYm9vbGVhblxufVxuXG5leHBvcnQgdHlwZSBQcmVmZXRjaENhY2hlRW50cnkgPSB7XG4gIHRyZWVBdFRpbWVPZlByZWZldGNoOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuICBkYXRhOiBQcm9taXNlPEZldGNoU2VydmVyUmVzcG9uc2VSZXN1bHQ+XG4gIGtpbmQ6IFByZWZldGNoS2luZFxuICBwcmVmZXRjaFRpbWU6IG51bWJlclxuICBzdGFsZVRpbWU6IG51bWJlclxuICBsYXN0VXNlZFRpbWU6IG51bWJlciB8IG51bGxcbiAga2V5OiBzdHJpbmdcbiAgc3RhdHVzOiBQcmVmZXRjaENhY2hlRW50cnlTdGF0dXNcbiAgdXJsOiBVUkxcbn1cblxuZXhwb3J0IGVudW0gUHJlZmV0Y2hDYWNoZUVudHJ5U3RhdHVzIHtcbiAgZnJlc2ggPSAnZnJlc2gnLFxuICByZXVzYWJsZSA9ICdyZXVzYWJsZScsXG4gIGV4cGlyZWQgPSAnZXhwaXJlZCcsXG4gIHN0YWxlID0gJ3N0YWxlJyxcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGtlZXBpbmcgdGhlIHN0YXRlIG9mIGFwcC1yb3V0ZXIuXG4gKi9cbmV4cG9ydCB0eXBlIEFwcFJvdXRlclN0YXRlID0ge1xuICAvKipcbiAgICogVGhlIHJvdXRlciBzdGF0ZSwgdGhpcyBpcyB3cml0dGVuIGludG8gdGhlIGhpc3Rvcnkgc3RhdGUgaW4gYXBwLXJvdXRlciB1c2luZyByZXBsYWNlU3RhdGUvcHVzaFN0YXRlLlxuICAgKiAtIEhhcyB0byBiZSBzZXJpYWxpemFibGUgYXMgaXQgaXMgd3JpdHRlbiBpbnRvIHRoZSBoaXN0b3J5IHN0YXRlLlxuICAgKiAtIEhvbGRzIHdoaWNoIHNlZ21lbnRzIGFuZCBwYXJhbGxlbCByb3V0ZXMgYXJlIHNob3duIG9uIHRoZSBzY3JlZW4uXG4gICAqL1xuICB0cmVlOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuICAvKipcbiAgICogVGhlIGNhY2hlIGhvbGRzIFJlYWN0IG5vZGVzIGZvciBldmVyeSBzZWdtZW50IHRoYXQgaXMgc2hvd24gb24gc2NyZWVuIGFzIHdlbGwgYXMgcHJldmlvdXNseSBzaG93biBzZWdtZW50cy5cbiAgICogSXQgYWxzbyBob2xkcyBpbi1wcm9ncmVzcyBkYXRhIHJlcXVlc3RzLlxuICAgKiBQcmVmZXRjaGVkIGRhdGEgaXMgc3RvcmVkIHNlcGFyYXRlbHkgaW4gYHByZWZldGNoQ2FjaGVgLCB0aGF0IGlzIGFwcGxpZWQgZHVyaW5nIEFDVElPTl9OQVZJR0FURS5cbiAgICovXG4gIGNhY2hlOiBDYWNoZU5vZGVcbiAgLyoqXG4gICAqIENhY2hlIHRoYXQgaG9sZHMgcHJlZmV0Y2hlZCBGbGlnaHQgcmVzcG9uc2VzIGtleWVkIGJ5IHVybC5cbiAgICovXG4gIHByZWZldGNoQ2FjaGU6IE1hcDxzdHJpbmcsIFByZWZldGNoQ2FjaGVFbnRyeT5cbiAgLyoqXG4gICAqIERlY2lkZXMgaWYgdGhlIHVwZGF0ZSBzaG91bGQgY3JlYXRlIGEgbmV3IGhpc3RvcnkgZW50cnkgYW5kIGlmIHRoZSBuYXZpZ2F0aW9uIGhhcyB0byB0cmlnZ2VyIGEgYnJvd3NlciBuYXZpZ2F0aW9uLlxuICAgKi9cbiAgcHVzaFJlZjogUHVzaFJlZlxuICAvKipcbiAgICogRGVjaWRlcyBpZiB0aGUgdXBkYXRlIHNob3VsZCBhcHBseSBzY3JvbGwgYW5kIGZvY3VzIG1hbmFnZW1lbnQuXG4gICAqL1xuICBmb2N1c0FuZFNjcm9sbFJlZjogRm9jdXNBbmRTY3JvbGxSZWZcbiAgLyoqXG4gICAqIFRoZSBjYW5vbmljYWwgdXJsIHRoYXQgaXMgcHVzaGVkL3JlcGxhY2VkLlxuICAgKiAtIFRoaXMgaXMgdGhlIHVybCB5b3Ugc2VlIGluIHRoZSBicm93c2VyLlxuICAgKi9cbiAgY2Fub25pY2FsVXJsOiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSB1bmRlcmx5aW5nIFwidXJsXCIgcmVwcmVzZW50aW5nIHRoZSBVSSBzdGF0ZSwgd2hpY2ggaXMgdXNlZCBmb3IgaW50ZXJjZXB0aW5nIHJvdXRlcy5cbiAgICovXG4gIG5leHRVcmw6IHN0cmluZyB8IG51bGxcbn1cblxuZXhwb3J0IHR5cGUgUmVhZG9ubHlSZWR1Y2VyU3RhdGUgPSBSZWFkb25seTxBcHBSb3V0ZXJTdGF0ZT5cbmV4cG9ydCB0eXBlIFJlZHVjZXJTdGF0ZSA9IFByb21pc2U8QXBwUm91dGVyU3RhdGU+IHwgQXBwUm91dGVyU3RhdGVcbmV4cG9ydCB0eXBlIFJlZHVjZXJBY3Rpb25zID0gUmVhZG9ubHk8XG4gIHwgUmVmcmVzaEFjdGlvblxuICB8IE5hdmlnYXRlQWN0aW9uXG4gIHwgUmVzdG9yZUFjdGlvblxuICB8IFNlcnZlclBhdGNoQWN0aW9uXG4gIHwgUHJlZmV0Y2hBY3Rpb25cbiAgfCBIbXJSZWZyZXNoQWN0aW9uXG4gIHwgU2VydmVyQWN0aW9uQWN0aW9uXG4+XG4iXSwibmFtZXMiOlsiQUNUSU9OX0hNUl9SRUZSRVNIIiwiQUNUSU9OX05BVklHQVRFIiwiQUNUSU9OX1BSRUZFVENIIiwiQUNUSU9OX1JFRlJFU0giLCJBQ1RJT05fUkVTVE9SRSIsIkFDVElPTl9TRVJWRVJfQUNUSU9OIiwiQUNUSU9OX1NFUlZFUl9QQVRDSCIsIlByZWZldGNoQ2FjaGVFbnRyeVN0YXR1cyIsIlByZWZldGNoS2luZCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/router-reducer.js":
/*!*******************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/router-reducer.js ***!
  \*******************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"reducer\", ({\n    enumerable: true,\n    get: function() {\n        return reducer;\n    }\n}));\nconst _routerreducertypes = __webpack_require__(/*! ./router-reducer-types */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js\");\nconst _navigatereducer = __webpack_require__(/*! ./reducers/navigate-reducer */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js\");\nconst _serverpatchreducer = __webpack_require__(/*! ./reducers/server-patch-reducer */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js\");\nconst _restorereducer = __webpack_require__(/*! ./reducers/restore-reducer */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js\");\nconst _refreshreducer = __webpack_require__(/*! ./reducers/refresh-reducer */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js\");\nconst _prefetchreducer = __webpack_require__(/*! ./reducers/prefetch-reducer */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/prefetch-reducer.js\");\nconst _hmrrefreshreducer = __webpack_require__(/*! ./reducers/hmr-refresh-reducer */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/hmr-refresh-reducer.js\");\nconst _serveractionreducer = __webpack_require__(/*! ./reducers/server-action-reducer */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js\");\n/**\n * Reducer that handles the app-router state updates.\n */ function clientReducer(state, action) {\n    switch(action.type){\n        case _routerreducertypes.ACTION_NAVIGATE:\n            {\n                return (0, _navigatereducer.navigateReducer)(state, action);\n            }\n        case _routerreducertypes.ACTION_SERVER_PATCH:\n            {\n                return (0, _serverpatchreducer.serverPatchReducer)(state, action);\n            }\n        case _routerreducertypes.ACTION_RESTORE:\n            {\n                return (0, _restorereducer.restoreReducer)(state, action);\n            }\n        case _routerreducertypes.ACTION_REFRESH:\n            {\n                return (0, _refreshreducer.refreshReducer)(state, action);\n            }\n        case _routerreducertypes.ACTION_HMR_REFRESH:\n            {\n                return (0, _hmrrefreshreducer.hmrRefreshReducer)(state, action);\n            }\n        case _routerreducertypes.ACTION_PREFETCH:\n            {\n                return (0, _prefetchreducer.prefetchReducer)(state, action);\n            }\n        case _routerreducertypes.ACTION_SERVER_ACTION:\n            {\n                return (0, _serveractionreducer.serverActionReducer)(state, action);\n            }\n        // This case should never be hit as dispatch is strongly typed.\n        default:\n            throw Object.defineProperty(new Error('Unknown action'), \"__NEXT_ERROR_CODE\", {\n                value: \"E295\",\n                enumerable: false,\n                configurable: true\n            });\n    }\n}\nfunction serverReducer(state, _action) {\n    return state;\n}\nconst reducer =  false ? 0 : clientReducer;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=router-reducer.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yb3V0ZXItcmVkdWNlci5qcyIsIm1hcHBpbmdzIjoiOzs7OzJDQWlFYUE7OztlQUFBQTs7O2dEQXpETjs2Q0FNeUI7Z0RBQ0c7NENBQ0o7NENBQ0E7NkNBQ0M7K0NBQ0U7aURBQ0U7QUFFcEM7O0NBRUMsR0FDRCxTQUFTQyxjQUNQQyxLQUEyQixFQUMzQkMsTUFBc0I7SUFFdEIsT0FBUUEsT0FBT0MsSUFBSTtRQUNqQixLQUFLQyxvQkFBQUEsZUFBZTtZQUFFO2dCQUNwQixPQUFPQyxDQUFBQSxHQUFBQSxpQkFBQUEsZUFBQUEsRUFBZ0JKLE9BQU9DO1lBQ2hDO1FBQ0EsS0FBS0ksb0JBQUFBLG1CQUFtQjtZQUFFO2dCQUN4QixPQUFPQyxDQUFBQSxHQUFBQSxvQkFBQUEsa0JBQUFBLEVBQW1CTixPQUFPQztZQUNuQztRQUNBLEtBQUtNLG9CQUFBQSxjQUFjO1lBQUU7Z0JBQ25CLE9BQU9DLENBQUFBLEdBQUFBLGdCQUFBQSxjQUFBQSxFQUFlUixPQUFPQztZQUMvQjtRQUNBLEtBQUtRLG9CQUFBQSxjQUFjO1lBQUU7Z0JBQ25CLE9BQU9DLENBQUFBLEdBQUFBLGdCQUFBQSxjQUFBQSxFQUFlVixPQUFPQztZQUMvQjtRQUNBLEtBQUtVLG9CQUFBQSxrQkFBa0I7WUFBRTtnQkFDdkIsT0FBT0MsQ0FBQUEsR0FBQUEsbUJBQUFBLGlCQUFBQSxFQUFrQlosT0FBT0M7WUFDbEM7UUFDQSxLQUFLWSxvQkFBQUEsZUFBZTtZQUFFO2dCQUNwQixPQUFPQyxDQUFBQSxHQUFBQSxpQkFBQUEsZUFBQUEsRUFBZ0JkLE9BQU9DO1lBQ2hDO1FBQ0EsS0FBS2Msb0JBQUFBLG9CQUFvQjtZQUFFO2dCQUN6QixPQUFPQyxDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQUFBLEVBQW9CaEIsT0FBT0M7WUFDcEM7UUFDQSwrREFBK0Q7UUFDL0Q7WUFDRSxNQUFNLHFCQUEyQixDQUEzQixJQUFJZ0IsTUFBTSxtQkFBVjt1QkFBQTs0QkFBQTs4QkFBQTtZQUEwQjtJQUNwQztBQUNGO0FBRUEsU0FBU0MsY0FDUGxCLEtBQTJCLEVBQzNCbUIsT0FBdUI7SUFFdkIsT0FBT25CO0FBQ1Q7QUFHTyxNQUFNRixVQUNYLE1BQTZCLEdBQUdvQixDQUFhQSxHQUFHbkIiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9yb3V0ZXItcmVkdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBQ1RJT05fTkFWSUdBVEUsXG4gIEFDVElPTl9TRVJWRVJfUEFUQ0gsXG4gIEFDVElPTl9SRVNUT1JFLFxuICBBQ1RJT05fUkVGUkVTSCxcbiAgQUNUSU9OX1BSRUZFVENILFxuICBBQ1RJT05fSE1SX1JFRlJFU0gsXG4gIEFDVElPTl9TRVJWRVJfQUNUSU9OLFxufSBmcm9tICcuL3JvdXRlci1yZWR1Y2VyLXR5cGVzJ1xuaW1wb3J0IHR5cGUge1xuICBSZWR1Y2VyQWN0aW9ucyxcbiAgUmVkdWNlclN0YXRlLFxuICBSZWFkb25seVJlZHVjZXJTdGF0ZSxcbn0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci10eXBlcydcbmltcG9ydCB7IG5hdmlnYXRlUmVkdWNlciB9IGZyb20gJy4vcmVkdWNlcnMvbmF2aWdhdGUtcmVkdWNlcidcbmltcG9ydCB7IHNlcnZlclBhdGNoUmVkdWNlciB9IGZyb20gJy4vcmVkdWNlcnMvc2VydmVyLXBhdGNoLXJlZHVjZXInXG5pbXBvcnQgeyByZXN0b3JlUmVkdWNlciB9IGZyb20gJy4vcmVkdWNlcnMvcmVzdG9yZS1yZWR1Y2VyJ1xuaW1wb3J0IHsgcmVmcmVzaFJlZHVjZXIgfSBmcm9tICcuL3JlZHVjZXJzL3JlZnJlc2gtcmVkdWNlcidcbmltcG9ydCB7IHByZWZldGNoUmVkdWNlciB9IGZyb20gJy4vcmVkdWNlcnMvcHJlZmV0Y2gtcmVkdWNlcidcbmltcG9ydCB7IGhtclJlZnJlc2hSZWR1Y2VyIH0gZnJvbSAnLi9yZWR1Y2Vycy9obXItcmVmcmVzaC1yZWR1Y2VyJ1xuaW1wb3J0IHsgc2VydmVyQWN0aW9uUmVkdWNlciB9IGZyb20gJy4vcmVkdWNlcnMvc2VydmVyLWFjdGlvbi1yZWR1Y2VyJ1xuXG4vKipcbiAqIFJlZHVjZXIgdGhhdCBoYW5kbGVzIHRoZSBhcHAtcm91dGVyIHN0YXRlIHVwZGF0ZXMuXG4gKi9cbmZ1bmN0aW9uIGNsaWVudFJlZHVjZXIoXG4gIHN0YXRlOiBSZWFkb25seVJlZHVjZXJTdGF0ZSxcbiAgYWN0aW9uOiBSZWR1Y2VyQWN0aW9uc1xuKTogUmVkdWNlclN0YXRlIHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgQUNUSU9OX05BVklHQVRFOiB7XG4gICAgICByZXR1cm4gbmF2aWdhdGVSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pXG4gICAgfVxuICAgIGNhc2UgQUNUSU9OX1NFUlZFUl9QQVRDSDoge1xuICAgICAgcmV0dXJuIHNlcnZlclBhdGNoUmVkdWNlcihzdGF0ZSwgYWN0aW9uKVxuICAgIH1cbiAgICBjYXNlIEFDVElPTl9SRVNUT1JFOiB7XG4gICAgICByZXR1cm4gcmVzdG9yZVJlZHVjZXIoc3RhdGUsIGFjdGlvbilcbiAgICB9XG4gICAgY2FzZSBBQ1RJT05fUkVGUkVTSDoge1xuICAgICAgcmV0dXJuIHJlZnJlc2hSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pXG4gICAgfVxuICAgIGNhc2UgQUNUSU9OX0hNUl9SRUZSRVNIOiB7XG4gICAgICByZXR1cm4gaG1yUmVmcmVzaFJlZHVjZXIoc3RhdGUsIGFjdGlvbilcbiAgICB9XG4gICAgY2FzZSBBQ1RJT05fUFJFRkVUQ0g6IHtcbiAgICAgIHJldHVybiBwcmVmZXRjaFJlZHVjZXIoc3RhdGUsIGFjdGlvbilcbiAgICB9XG4gICAgY2FzZSBBQ1RJT05fU0VSVkVSX0FDVElPTjoge1xuICAgICAgcmV0dXJuIHNlcnZlckFjdGlvblJlZHVjZXIoc3RhdGUsIGFjdGlvbilcbiAgICB9XG4gICAgLy8gVGhpcyBjYXNlIHNob3VsZCBuZXZlciBiZSBoaXQgYXMgZGlzcGF0Y2ggaXMgc3Ryb25nbHkgdHlwZWQuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBhY3Rpb24nKVxuICB9XG59XG5cbmZ1bmN0aW9uIHNlcnZlclJlZHVjZXIoXG4gIHN0YXRlOiBSZWFkb25seVJlZHVjZXJTdGF0ZSxcbiAgX2FjdGlvbjogUmVkdWNlckFjdGlvbnNcbik6IFJlZHVjZXJTdGF0ZSB7XG4gIHJldHVybiBzdGF0ZVxufVxuXG4vLyB3ZSBkb24ndCBydW4gdGhlIGNsaWVudCByZWR1Y2VyIG9uIHRoZSBzZXJ2ZXIsIHNvIHdlIHVzZSBhIG5vb3AgZnVuY3Rpb24gZm9yIGJldHRlciB0cmVlIHNoYWtpbmdcbmV4cG9ydCBjb25zdCByZWR1Y2VyID1cbiAgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyBzZXJ2ZXJSZWR1Y2VyIDogY2xpZW50UmVkdWNlclxuIl0sIm5hbWVzIjpbInJlZHVjZXIiLCJjbGllbnRSZWR1Y2VyIiwic3RhdGUiLCJhY3Rpb24iLCJ0eXBlIiwiQUNUSU9OX05BVklHQVRFIiwibmF2aWdhdGVSZWR1Y2VyIiwiQUNUSU9OX1NFUlZFUl9QQVRDSCIsInNlcnZlclBhdGNoUmVkdWNlciIsIkFDVElPTl9SRVNUT1JFIiwicmVzdG9yZVJlZHVjZXIiLCJBQ1RJT05fUkVGUkVTSCIsInJlZnJlc2hSZWR1Y2VyIiwiQUNUSU9OX0hNUl9SRUZSRVNIIiwiaG1yUmVmcmVzaFJlZHVjZXIiLCJBQ1RJT05fUFJFRkVUQ0giLCJwcmVmZXRjaFJlZHVjZXIiLCJBQ1RJT05fU0VSVkVSX0FDVElPTiIsInNlcnZlckFjdGlvblJlZHVjZXIiLCJFcnJvciIsInNlcnZlclJlZHVjZXIiLCJfYWN0aW9uIiwid2luZG93Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/router-reducer.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/set-cache-busting-search-param.js":
/*!***********************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/set-cache-busting-search-param.js ***!
  \***********************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__  cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    setCacheBustingSearchParam: function() {\n        return setCacheBustingSearchParam;\n    },\n    setCacheBustingSearchParamWithHash: function() {\n        return setCacheBustingSearchParamWithHash;\n    }\n});\nconst _cachebustingsearchparam = __webpack_require__(/*! ../../../shared/lib/router/utils/cache-busting-search-param */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/cache-busting-search-param.js\");\nconst _approuterheaders = __webpack_require__(/*! ../app-router-headers */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router-headers.js\");\nconst setCacheBustingSearchParam = (url, headers)=>{\n    const uniqueCacheKey = (0, _cachebustingsearchparam.computeCacheBustingSearchParam)(headers[_approuterheaders.NEXT_ROUTER_PREFETCH_HEADER], headers[_approuterheaders.NEXT_ROUTER_SEGMENT_PREFETCH_HEADER], headers[_approuterheaders.NEXT_ROUTER_STATE_TREE_HEADER], headers[_approuterheaders.NEXT_URL]);\n    setCacheBustingSearchParamWithHash(url, uniqueCacheKey);\n};\nconst setCacheBustingSearchParamWithHash = (url, hash)=>{\n    /**\n   * Note that we intentionally do not use `url.searchParams.set` here:\n   *\n   * const url = new URL('https://example.com/search?q=custom%20spacing');\n   * url.searchParams.set('_rsc', 'abc123');\n   * console.log(url.toString()); // Outputs: https://example.com/search?q=custom+spacing&_rsc=abc123\n   *                                                                             ^ <--- this is causing confusion\n   * This is in fact intended based on https://url.spec.whatwg.org/#interface-urlsearchparams, but\n   * we want to preserve the %20 as %20 if that's what the user passed in, hence the custom\n   * logic below.\n   */ const existingSearch = url.search;\n    const rawQuery = existingSearch.startsWith('?') ? existingSearch.slice(1) : existingSearch;\n    // Always remove any existing cache busting param and add a fresh one to ensure\n    // we have the correct value based on current request headers\n    const pairs = rawQuery.split('&').filter((pair)=>pair && !pair.startsWith(\"\" + _approuterheaders.NEXT_RSC_UNION_QUERY + \"=\"));\n    if (hash.length > 0) {\n        pairs.push(_approuterheaders.NEXT_RSC_UNION_QUERY + \"=\" + hash);\n    } else {\n        pairs.push(\"\" + _approuterheaders.NEXT_RSC_UNION_QUERY);\n    }\n    url.search = pairs.length ? \"?\" + pairs.join('&') : '';\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=set-cache-busting-search-param.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9zZXQtY2FjaGUtYnVzdGluZy1zZWFyY2gtcGFyYW0uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBNEJhQSwwQkFBMEI7ZUFBMUJBOztJQTZCQUMsa0NBQWtDO2VBQWxDQTs7O3FEQXZEa0M7OENBT3hDO0FBbUJBLE1BQU1ELDZCQUE2QixDQUN4Q0UsS0FDQUM7SUFFQSxNQUFNQyxpQkFBaUJDLENBQUFBLEdBQUFBLHlCQUFBQSw4QkFBQUEsRUFDckJGLE9BQU8sQ0FBQ0csa0JBQUFBLDJCQUEyQixDQUFDLEVBQ3BDSCxPQUFPLENBQUNJLGtCQUFBQSxtQ0FBbUMsQ0FBQyxFQUM1Q0osT0FBTyxDQUFDSyxrQkFBQUEsNkJBQTZCLENBQUMsRUFDdENMLE9BQU8sQ0FBQ00sa0JBQUFBLFFBQVEsQ0FBQztJQUVuQlIsbUNBQW1DQyxLQUFLRTtBQUMxQztBQWtCTyxNQUFNSCxxQ0FBcUMsQ0FDaERDLEtBQ0FRO0lBRUE7Ozs7Ozs7Ozs7R0FVQyxHQUNELE1BQU1DLGlCQUFpQlQsSUFBSVUsTUFBTTtJQUNqQyxNQUFNQyxXQUFXRixlQUFlRyxVQUFVLENBQUMsT0FDdkNILGVBQWVJLEtBQUssQ0FBQyxLQUNyQko7SUFFSiwrRUFBK0U7SUFDL0UsNkRBQTZEO0lBQzdELE1BQU1LLFFBQVFILFNBQ1hJLEtBQUssQ0FBQyxLQUNOQyxNQUFNLENBQUMsQ0FBQ0MsT0FBU0EsUUFBUSxDQUFDQSxLQUFLTCxVQUFVLENBQUUsS0FBRU0sa0JBQUFBLG9CQUFvQixHQUFDO0lBRXJFLElBQUlWLEtBQUtXLE1BQU0sR0FBRyxHQUFHO1FBQ25CTCxNQUFNTSxJQUFJLENBQUlGLGtCQUFBQSxvQkFBb0IsR0FBQyxNQUFHVjtJQUN4QyxPQUFPO1FBQ0xNLE1BQU1NLElBQUksQ0FBRSxLQUFFRixrQkFBQUEsb0JBQW9CO0lBQ3BDO0lBQ0FsQixJQUFJVSxNQUFNLEdBQUdJLE1BQU1LLE1BQU0sR0FBSSxNQUFHTCxNQUFNTyxJQUFJLENBQUMsT0FBUztBQUN0RCIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3NldC1jYWNoZS1idXN0aW5nLXNlYXJjaC1wYXJhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuaW1wb3J0IHsgY29tcHV0ZUNhY2hlQnVzdGluZ1NlYXJjaFBhcmFtIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvY2FjaGUtYnVzdGluZy1zZWFyY2gtcGFyYW0nXG5pbXBvcnQge1xuICBORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVIsXG4gIE5FWFRfUk9VVEVSX1NFR01FTlRfUFJFRkVUQ0hfSEVBREVSLFxuICBORVhUX1JPVVRFUl9TVEFURV9UUkVFX0hFQURFUixcbiAgTkVYVF9VUkwsXG4gIE5FWFRfUlNDX1VOSU9OX1FVRVJZLFxufSBmcm9tICcuLi9hcHAtcm91dGVyLWhlYWRlcnMnXG5pbXBvcnQgdHlwZSB7IFJlcXVlc3RIZWFkZXJzIH0gZnJvbSAnLi9mZXRjaC1zZXJ2ZXItcmVzcG9uc2UnXG5cbi8qKlxuICogTXV0YXRlcyB0aGUgcHJvdmlkZWQgVVJMIGJ5IGFkZGluZyBhIGNhY2hlLWJ1c3Rpbmcgc2VhcmNoIHBhcmFtZXRlciBmb3IgQ0ROcyB0aGF0IGRvbid0XG4gKiBzdXBwb3J0IGN1c3RvbSBoZWFkZXJzLiBUaGlzIGhlbHBzIGF2b2lkIGNhY2hpbmcgY29uZmxpY3RzIGJ5IG1ha2luZyBlYWNoIHJlcXVlc3QgdW5pcXVlLlxuICpcbiAqIFJhdGhlciB0aGFuIHJlbHlpbmcgb24gdGhlIFZhcnkgaGVhZGVyIHdoaWNoIHNvbWUgQ0ROcyBpZ25vcmUsIHdlIGFwcGVuZCBhIHNlYXJjaCBwYXJhbVxuICogdG8gY3JlYXRlIGEgdW5pcXVlIFVSTCB0aGF0IGZvcmNlcyBhIGZyZXNoIHJlcXVlc3QuXG4gKlxuICogRXhhbXBsZTpcbiAqIFVSTCBiZWZvcmU6IGh0dHBzOi8vZXhhbXBsZS5jb20vcGF0aD9xdWVyeT0xXG4gKiBVUkwgYWZ0ZXI6IGh0dHBzOi8vZXhhbXBsZS5jb20vcGF0aD9xdWVyeT0xJl9yc2M9YWJjMTIzXG4gKlxuICogTm90ZTogVGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBpbnB1dCBVUkwgZGlyZWN0bHkgYW5kIGRvZXMgbm90IHJldHVybiBhbnl0aGluZy5cbiAqXG4gKiBUT0RPOiBTaW5jZSB3ZSBuZWVkIHRvIHVzZSBhIHNlYXJjaCBwYXJhbSBhbnl3YXksIHdlIGNvdWxkIHNpbXBsaWZ5IGJ5IHJlbW92aW5nIHRoZSBjdXN0b21cbiAqIGhlYWRlcnMgYXBwcm9hY2ggZW50aXJlbHkgYW5kIGp1c3QgdXNlIHNlYXJjaCBwYXJhbXMuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRDYWNoZUJ1c3RpbmdTZWFyY2hQYXJhbSA9IChcbiAgdXJsOiBVUkwsXG4gIGhlYWRlcnM6IFJlcXVlc3RIZWFkZXJzXG4pOiB2b2lkID0+IHtcbiAgY29uc3QgdW5pcXVlQ2FjaGVLZXkgPSBjb21wdXRlQ2FjaGVCdXN0aW5nU2VhcmNoUGFyYW0oXG4gICAgaGVhZGVyc1tORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVJdLFxuICAgIGhlYWRlcnNbTkVYVF9ST1VURVJfU0VHTUVOVF9QUkVGRVRDSF9IRUFERVJdLFxuICAgIGhlYWRlcnNbTkVYVF9ST1VURVJfU1RBVEVfVFJFRV9IRUFERVJdLFxuICAgIGhlYWRlcnNbTkVYVF9VUkxdXG4gIClcbiAgc2V0Q2FjaGVCdXN0aW5nU2VhcmNoUGFyYW1XaXRoSGFzaCh1cmwsIHVuaXF1ZUNhY2hlS2V5KVxufVxuXG4vKipcbiAqIFNldHMgYSBjYWNoZS1idXN0aW5nIHNlYXJjaCBwYXJhbWV0ZXIgb24gYSBVUkwgdXNpbmcgYSBwcm92aWRlZCBoYXNoIHZhbHVlLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIHNhbWUgbG9naWMgYXMgYHNldENhY2hlQnVzdGluZ1NlYXJjaFBhcmFtYCBidXQgYWNjZXB0c1xuICogYSBwcmUtY29tcHV0ZWQgaGFzaCBpbnN0ZWFkIG9mIGNvbXB1dGluZyBpdCBmcm9tIGhlYWRlcnMuXG4gKlxuICogRXhhbXBsZTpcbiAqIFVSTCBiZWZvcmU6IGh0dHBzOi8vZXhhbXBsZS5jb20vcGF0aD9xdWVyeT0xXG4gKiBoYXNoOiBcImFiYzEyM1wiXG4gKiBVUkwgYWZ0ZXI6IGh0dHBzOi8vZXhhbXBsZS5jb20vcGF0aD9xdWVyeT0xJl9yc2M9YWJjMTIzXG4gKlxuICogSWYgdGhlIGhhc2ggaXMgbnVsbCwgd2Ugd2lsbCBzZXQgYF9yc2NgIHNlYXJjaCBwYXJhbSB3aXRob3V0IGEgdmFsdWUuXG4gKiBMaWtlIHRoaXM6IGh0dHBzOi8vZXhhbXBsZS5jb20vcGF0aD9xdWVyeT0xJl9yc2NcbiAqXG4gKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIG11dGF0ZXMgdGhlIGlucHV0IFVSTCBkaXJlY3RseSBhbmQgZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLlxuICovXG5leHBvcnQgY29uc3Qgc2V0Q2FjaGVCdXN0aW5nU2VhcmNoUGFyYW1XaXRoSGFzaCA9IChcbiAgdXJsOiBVUkwsXG4gIGhhc2g6IHN0cmluZ1xuKTogdm9pZCA9PiB7XG4gIC8qKlxuICAgKiBOb3RlIHRoYXQgd2UgaW50ZW50aW9uYWxseSBkbyBub3QgdXNlIGB1cmwuc2VhcmNoUGFyYW1zLnNldGAgaGVyZTpcbiAgICpcbiAgICogY29uc3QgdXJsID0gbmV3IFVSTCgnaHR0cHM6Ly9leGFtcGxlLmNvbS9zZWFyY2g/cT1jdXN0b20lMjBzcGFjaW5nJyk7XG4gICAqIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdfcnNjJywgJ2FiYzEyMycpO1xuICAgKiBjb25zb2xlLmxvZyh1cmwudG9TdHJpbmcoKSk7IC8vIE91dHB1dHM6IGh0dHBzOi8vZXhhbXBsZS5jb20vc2VhcmNoP3E9Y3VzdG9tK3NwYWNpbmcmX3JzYz1hYmMxMjNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gPC0tLSB0aGlzIGlzIGNhdXNpbmcgY29uZnVzaW9uXG4gICAqIFRoaXMgaXMgaW4gZmFjdCBpbnRlbmRlZCBiYXNlZCBvbiBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2ludGVyZmFjZS11cmxzZWFyY2hwYXJhbXMsIGJ1dFxuICAgKiB3ZSB3YW50IHRvIHByZXNlcnZlIHRoZSAlMjAgYXMgJTIwIGlmIHRoYXQncyB3aGF0IHRoZSB1c2VyIHBhc3NlZCBpbiwgaGVuY2UgdGhlIGN1c3RvbVxuICAgKiBsb2dpYyBiZWxvdy5cbiAgICovXG4gIGNvbnN0IGV4aXN0aW5nU2VhcmNoID0gdXJsLnNlYXJjaFxuICBjb25zdCByYXdRdWVyeSA9IGV4aXN0aW5nU2VhcmNoLnN0YXJ0c1dpdGgoJz8nKVxuICAgID8gZXhpc3RpbmdTZWFyY2guc2xpY2UoMSlcbiAgICA6IGV4aXN0aW5nU2VhcmNoXG5cbiAgLy8gQWx3YXlzIHJlbW92ZSBhbnkgZXhpc3RpbmcgY2FjaGUgYnVzdGluZyBwYXJhbSBhbmQgYWRkIGEgZnJlc2ggb25lIHRvIGVuc3VyZVxuICAvLyB3ZSBoYXZlIHRoZSBjb3JyZWN0IHZhbHVlIGJhc2VkIG9uIGN1cnJlbnQgcmVxdWVzdCBoZWFkZXJzXG4gIGNvbnN0IHBhaXJzID0gcmF3UXVlcnlcbiAgICAuc3BsaXQoJyYnKVxuICAgIC5maWx0ZXIoKHBhaXIpID0+IHBhaXIgJiYgIXBhaXIuc3RhcnRzV2l0aChgJHtORVhUX1JTQ19VTklPTl9RVUVSWX09YCkpXG5cbiAgaWYgKGhhc2gubGVuZ3RoID4gMCkge1xuICAgIHBhaXJzLnB1c2goYCR7TkVYVF9SU0NfVU5JT05fUVVFUll9PSR7aGFzaH1gKVxuICB9IGVsc2Uge1xuICAgIHBhaXJzLnB1c2goYCR7TkVYVF9SU0NfVU5JT05fUVVFUll9YClcbiAgfVxuICB1cmwuc2VhcmNoID0gcGFpcnMubGVuZ3RoID8gYD8ke3BhaXJzLmpvaW4oJyYnKX1gIDogJydcbn1cbiJdLCJuYW1lcyI6WyJzZXRDYWNoZUJ1c3RpbmdTZWFyY2hQYXJhbSIsInNldENhY2hlQnVzdGluZ1NlYXJjaFBhcmFtV2l0aEhhc2giLCJ1cmwiLCJoZWFkZXJzIiwidW5pcXVlQ2FjaGVLZXkiLCJjb21wdXRlQ2FjaGVCdXN0aW5nU2VhcmNoUGFyYW0iLCJORVhUX1JPVVRFUl9QUkVGRVRDSF9IRUFERVIiLCJORVhUX1JPVVRFUl9TRUdNRU5UX1BSRUZFVENIX0hFQURFUiIsIk5FWFRfUk9VVEVSX1NUQVRFX1RSRUVfSEVBREVSIiwiTkVYVF9VUkwiLCJoYXNoIiwiZXhpc3RpbmdTZWFyY2giLCJzZWFyY2giLCJyYXdRdWVyeSIsInN0YXJ0c1dpdGgiLCJzbGljZSIsInBhaXJzIiwic3BsaXQiLCJmaWx0ZXIiLCJwYWlyIiwiTkVYVF9SU0NfVU5JT05fUVVFUlkiLCJsZW5ndGgiLCJwdXNoIiwiam9pbiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/set-cache-busting-search-param.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/should-hard-navigate.js":
/*!*************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/should-hard-navigate.js ***!
  \*************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"shouldHardNavigate\", ({\n    enumerable: true,\n    get: function() {\n        return shouldHardNavigate;\n    }\n}));\nconst _flightdatahelpers = __webpack_require__(/*! ../../flight-data-helpers */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/flight-data-helpers.js\");\nconst _matchsegments = __webpack_require__(/*! ../match-segments */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/match-segments.js\");\nfunction shouldHardNavigate(flightSegmentPath, flightRouterState) {\n    const [segment, parallelRoutes] = flightRouterState;\n    // TODO-APP: Check if `as` can be replaced.\n    const [currentSegment, parallelRouteKey] = flightSegmentPath;\n    // Check if current segment matches the existing segment.\n    if (!(0, _matchsegments.matchSegment)(currentSegment, segment)) {\n        // If dynamic parameter in tree doesn't match up with segment path a hard navigation is triggered.\n        if (Array.isArray(currentSegment)) {\n            return true;\n        }\n        // If the existing segment did not match soft navigation is triggered.\n        return false;\n    }\n    const lastSegment = flightSegmentPath.length <= 2;\n    if (lastSegment) {\n        return false;\n    }\n    return shouldHardNavigate((0, _flightdatahelpers.getNextFlightSegmentPath)(flightSegmentPath), parallelRoutes[parallelRouteKey]);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=should-hard-navigate.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9yb3V0ZXItcmVkdWNlci9zaG91bGQtaGFyZC1uYXZpZ2F0ZS5qcyIsIm1hcHBpbmdzIjoiOzs7O3NEQVNnQkE7OztlQUFBQTs7OytDQUp5QjsyQ0FDWjtBQUd0QixTQUFTQSxtQkFDZEMsaUJBQWlDLEVBQ2pDQyxpQkFBb0M7SUFFcEMsTUFBTSxDQUFDQyxTQUFTQyxlQUFlLEdBQUdGO0lBQ2xDLDJDQUEyQztJQUMzQyxNQUFNLENBQUNHLGdCQUFnQkMsaUJBQWlCLEdBQUdMO0lBSzNDLHlEQUF5RDtJQUN6RCxJQUFJLENBQUNNLENBQUFBLEdBQUFBLGVBQUFBLFlBQUFBLEVBQWFGLGdCQUFnQkYsVUFBVTtRQUMxQyxrR0FBa0c7UUFDbEcsSUFBSUssTUFBTUMsT0FBTyxDQUFDSixpQkFBaUI7WUFDakMsT0FBTztRQUNUO1FBRUEsc0VBQXNFO1FBQ3RFLE9BQU87SUFDVDtJQUNBLE1BQU1LLGNBQWNULGtCQUFrQlUsTUFBTSxJQUFJO0lBRWhELElBQUlELGFBQWE7UUFDZixPQUFPO0lBQ1Q7SUFFQSxPQUFPVixtQkFDTFksQ0FBQUEsR0FBQUEsbUJBQUFBLHdCQUFBQSxFQUF5Qlgsb0JBQ3pCRyxjQUFjLENBQUNFLGlCQUFpQjtBQUVwQyIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL3Nob3VsZC1oYXJkLW5hdmlnYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgRmxpZ2h0Um91dGVyU3RhdGUsXG4gIEZsaWdodERhdGFQYXRoLFxuICBTZWdtZW50LFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2ZXIvYXBwLXJlbmRlci90eXBlcydcbmltcG9ydCB7IGdldE5leHRGbGlnaHRTZWdtZW50UGF0aCB9IGZyb20gJy4uLy4uL2ZsaWdodC1kYXRhLWhlbHBlcnMnXG5pbXBvcnQgeyBtYXRjaFNlZ21lbnQgfSBmcm9tICcuLi9tYXRjaC1zZWdtZW50cydcblxuLy8gVE9ETy1BUFA6IGZsaWdodFNlZ21lbnRQYXRoIHdpbGwgYmUgZW1wdHkgaW4gY2FzZSBvZiBzdGF0aWMgcmVzcG9uc2UsIG5lZWRzIHRvIGJlIGhhbmRsZWQuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkSGFyZE5hdmlnYXRlKFxuICBmbGlnaHRTZWdtZW50UGF0aDogRmxpZ2h0RGF0YVBhdGgsXG4gIGZsaWdodFJvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IFtzZWdtZW50LCBwYXJhbGxlbFJvdXRlc10gPSBmbGlnaHRSb3V0ZXJTdGF0ZVxuICAvLyBUT0RPLUFQUDogQ2hlY2sgaWYgYGFzYCBjYW4gYmUgcmVwbGFjZWQuXG4gIGNvbnN0IFtjdXJyZW50U2VnbWVudCwgcGFyYWxsZWxSb3V0ZUtleV0gPSBmbGlnaHRTZWdtZW50UGF0aCBhcyBbXG4gICAgU2VnbWVudCxcbiAgICBzdHJpbmcsXG4gIF1cblxuICAvLyBDaGVjayBpZiBjdXJyZW50IHNlZ21lbnQgbWF0Y2hlcyB0aGUgZXhpc3Rpbmcgc2VnbWVudC5cbiAgaWYgKCFtYXRjaFNlZ21lbnQoY3VycmVudFNlZ21lbnQsIHNlZ21lbnQpKSB7XG4gICAgLy8gSWYgZHluYW1pYyBwYXJhbWV0ZXIgaW4gdHJlZSBkb2Vzbid0IG1hdGNoIHVwIHdpdGggc2VnbWVudCBwYXRoIGEgaGFyZCBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZC5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50U2VnbWVudCkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGV4aXN0aW5nIHNlZ21lbnQgZGlkIG5vdCBtYXRjaCBzb2Z0IG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkLlxuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGNvbnN0IGxhc3RTZWdtZW50ID0gZmxpZ2h0U2VnbWVudFBhdGgubGVuZ3RoIDw9IDJcblxuICBpZiAobGFzdFNlZ21lbnQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBzaG91bGRIYXJkTmF2aWdhdGUoXG4gICAgZ2V0TmV4dEZsaWdodFNlZ21lbnRQYXRoKGZsaWdodFNlZ21lbnRQYXRoKSxcbiAgICBwYXJhbGxlbFJvdXRlc1twYXJhbGxlbFJvdXRlS2V5XVxuICApXG59XG4iXSwibmFtZXMiOlsic2hvdWxkSGFyZE5hdmlnYXRlIiwiZmxpZ2h0U2VnbWVudFBhdGgiLCJmbGlnaHRSb3V0ZXJTdGF0ZSIsInNlZ21lbnQiLCJwYXJhbGxlbFJvdXRlcyIsImN1cnJlbnRTZWdtZW50IiwicGFyYWxsZWxSb3V0ZUtleSIsIm1hdGNoU2VnbWVudCIsIkFycmF5IiwiaXNBcnJheSIsImxhc3RTZWdtZW50IiwibGVuZ3RoIiwiZ2V0TmV4dEZsaWdodFNlZ21lbnRQYXRoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/router-reducer/should-hard-navigate.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/segment-cache.js":
/*!***************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/segment-cache.js ***!
  \***************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/**\n * Entry point to the Segment Cache implementation.\n *\n * All code related to the Segment Cache lives `segment-cache-impl` directory.\n * Callers access it through this indirection.\n *\n * This is to ensure the code is dead code eliminated from the bundle if the\n * flag is disabled.\n *\n * TODO: This is super tedious. Since experimental flags are an essential part\n * of our workflow, we should establish a better pattern for dead code\n * elimination. Ideally it would be done at the bundler level, like how React's\n * build process works. In the React repo, you don't even need to add any extra\n * configuration per experiment — if the code is not reachable, it gets stripped\n * from the build automatically by Rollup. Or, shorter term, we could stub out\n * experimental modules at build time by updating the build config, i.e. a more\n * automated version of what I'm doing manually in this file.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    NavigationResultTag: function() {\n        return NavigationResultTag;\n    },\n    PrefetchPriority: function() {\n        return PrefetchPriority;\n    },\n    cancelPrefetchTask: function() {\n        return cancelPrefetchTask;\n    },\n    createCacheKey: function() {\n        return createCacheKey;\n    },\n    getCurrentCacheVersion: function() {\n        return getCurrentCacheVersion;\n    },\n    isPrefetchTaskDirty: function() {\n        return isPrefetchTaskDirty;\n    },\n    navigate: function() {\n        return navigate;\n    },\n    prefetch: function() {\n        return prefetch;\n    },\n    reschedulePrefetchTask: function() {\n        return reschedulePrefetchTask;\n    },\n    revalidateEntireCache: function() {\n        return revalidateEntireCache;\n    },\n    schedulePrefetchTask: function() {\n        return schedulePrefetchTask;\n    }\n});\nconst notEnabled = ()=>{\n    throw Object.defineProperty(new Error('Segment Cache experiment is not enabled. This is a bug in Next.js.'), \"__NEXT_ERROR_CODE\", {\n        value: \"E654\",\n        enumerable: false,\n        configurable: true\n    });\n};\nconst prefetch =  false ? 0 : notEnabled;\nconst navigate =  false ? 0 : notEnabled;\nconst revalidateEntireCache =  false ? 0 : notEnabled;\nconst getCurrentCacheVersion =  false ? 0 : notEnabled;\nconst schedulePrefetchTask =  false ? 0 : notEnabled;\nconst cancelPrefetchTask =  false ? 0 : notEnabled;\nconst reschedulePrefetchTask =  false ? 0 : notEnabled;\nconst isPrefetchTaskDirty =  false ? 0 : notEnabled;\nconst createCacheKey =  false ? 0 : notEnabled;\nvar NavigationResultTag = /*#__PURE__*/ function(NavigationResultTag) {\n    NavigationResultTag[NavigationResultTag[\"MPA\"] = 0] = \"MPA\";\n    NavigationResultTag[NavigationResultTag[\"Success\"] = 1] = \"Success\";\n    NavigationResultTag[NavigationResultTag[\"NoOp\"] = 2] = \"NoOp\";\n    NavigationResultTag[NavigationResultTag[\"Async\"] = 3] = \"Async\";\n    return NavigationResultTag;\n}({});\nvar PrefetchPriority = /*#__PURE__*/ function(PrefetchPriority) {\n    /**\n   * Assigned to the most recently hovered/touched link. Special network\n   * bandwidth is reserved for this task only. There's only ever one Intent-\n   * priority task at a time; when a new Intent task is scheduled, the previous\n   * one is bumped down to Default.\n   */ PrefetchPriority[PrefetchPriority[\"Intent\"] = 2] = \"Intent\";\n    /**\n   * The default priority for prefetch tasks.\n   */ PrefetchPriority[PrefetchPriority[\"Default\"] = 1] = \"Default\";\n    /**\n   * Assigned to tasks when they spawn non-blocking background work, like\n   * revalidating a partially cached entry to see if more data is available.\n   */ PrefetchPriority[PrefetchPriority[\"Background\"] = 0] = \"Background\";\n    return PrefetchPriority;\n}({});\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=segment-cache.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy9zZWdtZW50LWNhY2hlLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztDQWlCQzs7Ozs7Ozs7Ozs7O0lBaUdpQkEsbUJBQW1CO2VBQW5CQTs7SUFVQUMsZ0JBQWdCO2VBQWhCQTs7SUFuRExDLGtCQUFrQjtlQUFsQkE7O0lBMkJBQyxjQUFjO2VBQWRBOztJQTdDQUMsc0JBQXNCO2VBQXRCQTs7SUFvQ0FDLG1CQUFtQjtlQUFuQkE7O0lBdERBQyxRQUFRO2VBQVJBOztJQVRBQyxRQUFRO2VBQVJBOztJQXNEQUMsc0JBQXNCO2VBQXRCQTs7SUFwQ0FDLHFCQUFxQjtlQUFyQkE7O0lBa0JBQyxvQkFBb0I7ZUFBcEJBOzs7QUExQ2IsTUFBTUMsYUFBa0I7SUFDdEIsTUFBTSxxQkFFTCxDQUZLLElBQUlDLE1BQ1IsdUVBREk7ZUFBQTtvQkFBQTtzQkFBQTtJQUVOO0FBQ0Y7QUFFTyxNQUFNTCxXQUNYTSxNQUF1QyxHQUNuQyxDQUlDLEdBQ0RGO0FBRUMsTUFBTUwsV0FDWE8sTUFBdUMsR0FDbkMsQ0FJQyxHQUNERjtBQUVDLE1BQU1GLHdCQUNYSSxNQUF1QyxHQUNuQyxDQUlDLEdBQ0RGO0FBRUMsTUFBTVAseUJBQ1hTLE1BQXVDLEdBQ25DLENBSUMsR0FDREY7QUFFQyxNQUFNRCx1QkFDWEcsTUFBdUMsR0FDbkMsQ0FJQyxHQUNERjtBQUVDLE1BQU1ULHFCQUNYVyxNQUF1QyxHQUNuQyxDQUlDLEdBQ0RGO0FBRUMsTUFBTUgseUJBQ1hLLE1BQXVDLEdBQ25DLENBSUMsR0FDREY7QUFFQyxNQUFNTixzQkFDWFEsTUFBdUMsR0FDbkMsQ0FJQyxHQUNERjtBQUVDLE1BQU1SLGlCQUNYVSxNQUF1QyxHQUNuQyxDQUlDLEdBQ0RGO0FBT0MsSUFBV1gsc0JBQUFBLFdBQUFBLEdBQUFBLFNBQUFBLG1CQUFBQTs7Ozs7V0FBQUE7O0FBVVgsSUFBV0MsbUJBQUFBLFdBQUFBLEdBQUFBLFNBQUFBLGdCQUFBQTtJQUNoQjs7Ozs7R0FLQztJQUVEOztHQUVDO0lBRUQ7OztHQUdDO1dBZmVBIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL3NyYy9jbGllbnQvY29tcG9uZW50cy9zZWdtZW50LWNhY2hlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRW50cnkgcG9pbnQgdG8gdGhlIFNlZ21lbnQgQ2FjaGUgaW1wbGVtZW50YXRpb24uXG4gKlxuICogQWxsIGNvZGUgcmVsYXRlZCB0byB0aGUgU2VnbWVudCBDYWNoZSBsaXZlcyBgc2VnbWVudC1jYWNoZS1pbXBsYCBkaXJlY3RvcnkuXG4gKiBDYWxsZXJzIGFjY2VzcyBpdCB0aHJvdWdoIHRoaXMgaW5kaXJlY3Rpb24uXG4gKlxuICogVGhpcyBpcyB0byBlbnN1cmUgdGhlIGNvZGUgaXMgZGVhZCBjb2RlIGVsaW1pbmF0ZWQgZnJvbSB0aGUgYnVuZGxlIGlmIHRoZVxuICogZmxhZyBpcyBkaXNhYmxlZC5cbiAqXG4gKiBUT0RPOiBUaGlzIGlzIHN1cGVyIHRlZGlvdXMuIFNpbmNlIGV4cGVyaW1lbnRhbCBmbGFncyBhcmUgYW4gZXNzZW50aWFsIHBhcnRcbiAqIG9mIG91ciB3b3JrZmxvdywgd2Ugc2hvdWxkIGVzdGFibGlzaCBhIGJldHRlciBwYXR0ZXJuIGZvciBkZWFkIGNvZGVcbiAqIGVsaW1pbmF0aW9uLiBJZGVhbGx5IGl0IHdvdWxkIGJlIGRvbmUgYXQgdGhlIGJ1bmRsZXIgbGV2ZWwsIGxpa2UgaG93IFJlYWN0J3NcbiAqIGJ1aWxkIHByb2Nlc3Mgd29ya3MuIEluIHRoZSBSZWFjdCByZXBvLCB5b3UgZG9uJ3QgZXZlbiBuZWVkIHRvIGFkZCBhbnkgZXh0cmFcbiAqIGNvbmZpZ3VyYXRpb24gcGVyIGV4cGVyaW1lbnQg4oCUIGlmIHRoZSBjb2RlIGlzIG5vdCByZWFjaGFibGUsIGl0IGdldHMgc3RyaXBwZWRcbiAqIGZyb20gdGhlIGJ1aWxkIGF1dG9tYXRpY2FsbHkgYnkgUm9sbHVwLiBPciwgc2hvcnRlciB0ZXJtLCB3ZSBjb3VsZCBzdHViIG91dFxuICogZXhwZXJpbWVudGFsIG1vZHVsZXMgYXQgYnVpbGQgdGltZSBieSB1cGRhdGluZyB0aGUgYnVpbGQgY29uZmlnLCBpLmUuIGEgbW9yZVxuICogYXV0b21hdGVkIHZlcnNpb24gb2Ygd2hhdCBJJ20gZG9pbmcgbWFudWFsbHkgaW4gdGhpcyBmaWxlLlxuICovXG5cbmV4cG9ydCB0eXBlIHsgTmF2aWdhdGlvblJlc3VsdCB9IGZyb20gJy4vc2VnbWVudC1jYWNoZS1pbXBsL25hdmlnYXRpb24nXG5leHBvcnQgdHlwZSB7IFByZWZldGNoVGFzayB9IGZyb20gJy4vc2VnbWVudC1jYWNoZS1pbXBsL3NjaGVkdWxlcidcblxuY29uc3Qgbm90RW5hYmxlZDogYW55ID0gKCkgPT4ge1xuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ1NlZ21lbnQgQ2FjaGUgZXhwZXJpbWVudCBpcyBub3QgZW5hYmxlZC4gVGhpcyBpcyBhIGJ1ZyBpbiBOZXh0LmpzLidcbiAgKVxufVxuXG5leHBvcnQgY29uc3QgcHJlZmV0Y2g6IHR5cGVvZiBpbXBvcnQoJy4vc2VnbWVudC1jYWNoZS1pbXBsL3ByZWZldGNoJykucHJlZmV0Y2ggPVxuICBwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEVcbiAgICA/IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgcmVxdWlyZSgnLi9zZWdtZW50LWNhY2hlLWltcGwvcHJlZmV0Y2gnKSBhcyB0eXBlb2YgaW1wb3J0KCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9wcmVmZXRjaCcpXG4gICAgICAgICkucHJlZmV0Y2goLi4uYXJncylcbiAgICAgIH1cbiAgICA6IG5vdEVuYWJsZWRcblxuZXhwb3J0IGNvbnN0IG5hdmlnYXRlOiB0eXBlb2YgaW1wb3J0KCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9uYXZpZ2F0aW9uJykubmF2aWdhdGUgPVxuICBwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEVcbiAgICA/IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgcmVxdWlyZSgnLi9zZWdtZW50LWNhY2hlLWltcGwvbmF2aWdhdGlvbicpIGFzIHR5cGVvZiBpbXBvcnQoJy4vc2VnbWVudC1jYWNoZS1pbXBsL25hdmlnYXRpb24nKVxuICAgICAgICApLm5hdmlnYXRlKC4uLmFyZ3MpXG4gICAgICB9XG4gICAgOiBub3RFbmFibGVkXG5cbmV4cG9ydCBjb25zdCByZXZhbGlkYXRlRW50aXJlQ2FjaGU6IHR5cGVvZiBpbXBvcnQoJy4vc2VnbWVudC1jYWNoZS1pbXBsL2NhY2hlJykucmV2YWxpZGF0ZUVudGlyZUNhY2hlID1cbiAgcHJvY2Vzcy5lbnYuX19ORVhUX0NMSUVOVF9TRUdNRU5UX0NBQ0hFXG4gICAgPyBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHJlcXVpcmUoJy4vc2VnbWVudC1jYWNoZS1pbXBsL2NhY2hlJykgYXMgdHlwZW9mIGltcG9ydCgnLi9zZWdtZW50LWNhY2hlLWltcGwvY2FjaGUnKVxuICAgICAgICApLnJldmFsaWRhdGVFbnRpcmVDYWNoZSguLi5hcmdzKVxuICAgICAgfVxuICAgIDogbm90RW5hYmxlZFxuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudENhY2hlVmVyc2lvbjogdHlwZW9mIGltcG9ydCgnLi9zZWdtZW50LWNhY2hlLWltcGwvY2FjaGUnKS5nZXRDdXJyZW50Q2FjaGVWZXJzaW9uID1cbiAgcHJvY2Vzcy5lbnYuX19ORVhUX0NMSUVOVF9TRUdNRU5UX0NBQ0hFXG4gICAgPyBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHJlcXVpcmUoJy4vc2VnbWVudC1jYWNoZS1pbXBsL2NhY2hlJykgYXMgdHlwZW9mIGltcG9ydCgnLi9zZWdtZW50LWNhY2hlLWltcGwvY2FjaGUnKVxuICAgICAgICApLmdldEN1cnJlbnRDYWNoZVZlcnNpb24oLi4uYXJncylcbiAgICAgIH1cbiAgICA6IG5vdEVuYWJsZWRcblxuZXhwb3J0IGNvbnN0IHNjaGVkdWxlUHJlZmV0Y2hUYXNrOiB0eXBlb2YgaW1wb3J0KCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9zY2hlZHVsZXInKS5zY2hlZHVsZVByZWZldGNoVGFzayA9XG4gIHByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRVxuICAgID8gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICByZXF1aXJlKCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9zY2hlZHVsZXInKSBhcyB0eXBlb2YgaW1wb3J0KCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9zY2hlZHVsZXInKVxuICAgICAgICApLnNjaGVkdWxlUHJlZmV0Y2hUYXNrKC4uLmFyZ3MpXG4gICAgICB9XG4gICAgOiBub3RFbmFibGVkXG5cbmV4cG9ydCBjb25zdCBjYW5jZWxQcmVmZXRjaFRhc2s6IHR5cGVvZiBpbXBvcnQoJy4vc2VnbWVudC1jYWNoZS1pbXBsL3NjaGVkdWxlcicpLmNhbmNlbFByZWZldGNoVGFzayA9XG4gIHByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRVxuICAgID8gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICByZXF1aXJlKCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9zY2hlZHVsZXInKSBhcyB0eXBlb2YgaW1wb3J0KCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9zY2hlZHVsZXInKVxuICAgICAgICApLmNhbmNlbFByZWZldGNoVGFzayguLi5hcmdzKVxuICAgICAgfVxuICAgIDogbm90RW5hYmxlZFxuXG5leHBvcnQgY29uc3QgcmVzY2hlZHVsZVByZWZldGNoVGFzazogdHlwZW9mIGltcG9ydCgnLi9zZWdtZW50LWNhY2hlLWltcGwvc2NoZWR1bGVyJykucmVzY2hlZHVsZVByZWZldGNoVGFzayA9XG4gIHByb2Nlc3MuZW52Ll9fTkVYVF9DTElFTlRfU0VHTUVOVF9DQUNIRVxuICAgID8gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICByZXF1aXJlKCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9zY2hlZHVsZXInKSBhcyB0eXBlb2YgaW1wb3J0KCcuL3NlZ21lbnQtY2FjaGUtaW1wbC9zY2hlZHVsZXInKVxuICAgICAgICApLnJlc2NoZWR1bGVQcmVmZXRjaFRhc2soLi4uYXJncylcbiAgICAgIH1cbiAgICA6IG5vdEVuYWJsZWRcblxuZXhwb3J0IGNvbnN0IGlzUHJlZmV0Y2hUYXNrRGlydHk6IHR5cGVvZiBpbXBvcnQoJy4vc2VnbWVudC1jYWNoZS1pbXBsL3NjaGVkdWxlcicpLmlzUHJlZmV0Y2hUYXNrRGlydHkgPVxuICBwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEVcbiAgICA/IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgcmVxdWlyZSgnLi9zZWdtZW50LWNhY2hlLWltcGwvc2NoZWR1bGVyJykgYXMgdHlwZW9mIGltcG9ydCgnLi9zZWdtZW50LWNhY2hlLWltcGwvc2NoZWR1bGVyJylcbiAgICAgICAgKS5pc1ByZWZldGNoVGFza0RpcnR5KC4uLmFyZ3MpXG4gICAgICB9XG4gICAgOiBub3RFbmFibGVkXG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDYWNoZUtleTogdHlwZW9mIGltcG9ydCgnLi9zZWdtZW50LWNhY2hlLWltcGwvY2FjaGUta2V5JykuY3JlYXRlQ2FjaGVLZXkgPVxuICBwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEVcbiAgICA/IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgcmVxdWlyZSgnLi9zZWdtZW50LWNhY2hlLWltcGwvY2FjaGUta2V5JykgYXMgdHlwZW9mIGltcG9ydCgnLi9zZWdtZW50LWNhY2hlLWltcGwvY2FjaGUta2V5JylcbiAgICAgICAgKS5jcmVhdGVDYWNoZUtleSguLi5hcmdzKVxuICAgICAgfVxuICAgIDogbm90RW5hYmxlZFxuXG4vKipcbiAqIEJlbG93IGFyZSBwdWJsaWMgY29uc3RhbnRzLiBUaGV5J3JlIHNtYWxsIGVub3VnaCB0aGF0IHdlIGRvbid0IG5lZWQgdG9cbiAqIERDRSB0aGVtLlxuICovXG5cbmV4cG9ydCBjb25zdCBlbnVtIE5hdmlnYXRpb25SZXN1bHRUYWcge1xuICBNUEEsXG4gIFN1Y2Nlc3MsXG4gIE5vT3AsXG4gIEFzeW5jLFxufVxuXG4vKipcbiAqIFRoZSBwcmlvcml0eSBvZiB0aGUgcHJlZmV0Y2ggdGFzay4gSGlnaGVyIG51bWJlcnMgYXJlIGhpZ2hlciBwcmlvcml0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gUHJlZmV0Y2hQcmlvcml0eSB7XG4gIC8qKlxuICAgKiBBc3NpZ25lZCB0byB0aGUgbW9zdCByZWNlbnRseSBob3ZlcmVkL3RvdWNoZWQgbGluay4gU3BlY2lhbCBuZXR3b3JrXG4gICAqIGJhbmR3aWR0aCBpcyByZXNlcnZlZCBmb3IgdGhpcyB0YXNrIG9ubHkuIFRoZXJlJ3Mgb25seSBldmVyIG9uZSBJbnRlbnQtXG4gICAqIHByaW9yaXR5IHRhc2sgYXQgYSB0aW1lOyB3aGVuIGEgbmV3IEludGVudCB0YXNrIGlzIHNjaGVkdWxlZCwgdGhlIHByZXZpb3VzXG4gICAqIG9uZSBpcyBidW1wZWQgZG93biB0byBEZWZhdWx0LlxuICAgKi9cbiAgSW50ZW50ID0gMixcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHByaW9yaXR5IGZvciBwcmVmZXRjaCB0YXNrcy5cbiAgICovXG4gIERlZmF1bHQgPSAxLFxuICAvKipcbiAgICogQXNzaWduZWQgdG8gdGFza3Mgd2hlbiB0aGV5IHNwYXduIG5vbi1ibG9ja2luZyBiYWNrZ3JvdW5kIHdvcmssIGxpa2VcbiAgICogcmV2YWxpZGF0aW5nIGEgcGFydGlhbGx5IGNhY2hlZCBlbnRyeSB0byBzZWUgaWYgbW9yZSBkYXRhIGlzIGF2YWlsYWJsZS5cbiAgICovXG4gIEJhY2tncm91bmQgPSAwLFxufVxuIl0sIm5hbWVzIjpbIk5hdmlnYXRpb25SZXN1bHRUYWciLCJQcmVmZXRjaFByaW9yaXR5IiwiY2FuY2VsUHJlZmV0Y2hUYXNrIiwiY3JlYXRlQ2FjaGVLZXkiLCJnZXRDdXJyZW50Q2FjaGVWZXJzaW9uIiwiaXNQcmVmZXRjaFRhc2tEaXJ0eSIsIm5hdmlnYXRlIiwicHJlZmV0Y2giLCJyZXNjaGVkdWxlUHJlZmV0Y2hUYXNrIiwicmV2YWxpZGF0ZUVudGlyZUNhY2hlIiwic2NoZWR1bGVQcmVmZXRjaFRhc2siLCJub3RFbmFibGVkIiwiRXJyb3IiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX0NMSUVOVF9TRUdNRU5UX0NBQ0hFIiwiYXJncyIsInJlcXVpcmUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/segment-cache.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/unauthorized.js":
/*!**************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/unauthorized.js ***!
  \**************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"unauthorized\", ({\n    enumerable: true,\n    get: function() {\n        return unauthorized;\n    }\n}));\nconst _httpaccessfallback = __webpack_require__(/*! ./http-access-fallback/http-access-fallback */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js\");\n// TODO: Add `unauthorized` docs\n/**\n * @experimental\n * This function allows you to render the [unauthorized.js file](https://nextjs.org/docs/app/api-reference/file-conventions/unauthorized)\n * within a route segment as well as inject a tag.\n *\n * `unauthorized()` can be used in\n * [Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components),\n * [Route Handlers](https://nextjs.org/docs/app/building-your-application/routing/route-handlers), and\n * [Server Actions](https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations).\n *\n *\n * Read more: [Next.js Docs: `unauthorized`](https://nextjs.org/docs/app/api-reference/functions/unauthorized)\n */ const DIGEST = \"\" + _httpaccessfallback.HTTP_ERROR_FALLBACK_ERROR_CODE + \";401\";\nfunction unauthorized() {\n    if (true) {\n        throw Object.defineProperty(new Error(\"`unauthorized()` is experimental and only allowed to be used when `experimental.authInterrupts` is enabled.\"), \"__NEXT_ERROR_CODE\", {\n            value: \"E411\",\n            enumerable: false,\n            configurable: true\n        });\n    }\n    // eslint-disable-next-line no-throw-literal\n    const error = Object.defineProperty(new Error(DIGEST), \"__NEXT_ERROR_CODE\", {\n        value: \"E394\",\n        enumerable: false,\n        configurable: true\n    });\n    error.digest = DIGEST;\n    throw error;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=unauthorized.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy91bmF1dGhvcml6ZWQuanMiLCJtYXBwaW5ncyI6Ijs7OztnREFzQmdCQTs7O2VBQUFBOzs7Z0RBbkJUO0FBRVAsZ0NBQWdDO0FBQ2hDOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUVELE1BQU1DLFNBQVUsS0FBRUMsb0JBQUFBLDhCQUE4QixHQUFDO0FBRTFDLFNBQVNGO0lBQ2QsSUFBSSxJQUFnRCxFQUFFO1FBQ3BELE1BQU0scUJBRUwsQ0FGSyxJQUFJTSxNQUNQLGdIQURHO21CQUFBO3dCQUFBOzBCQUFBO1FBRU47SUFDRjtJQUVBLDRDQUE0QztJQUM1QyxNQUFNQyxRQUFRLHFCQUFpQixDQUFqQixJQUFJRCxNQUFNTCxTQUFWO2VBQUE7b0JBQUE7c0JBQUE7SUFBZ0I7SUFDNUJNLE1BQWtDQyxNQUFNLEdBQUdQO0lBQzdDLE1BQU1NO0FBQ1IiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL2NsaWVudC9jb21wb25lbnRzL3VuYXV0aG9yaXplZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBIVFRQX0VSUk9SX0ZBTExCQUNLX0VSUk9SX0NPREUsXG4gIHR5cGUgSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3IsXG59IGZyb20gJy4vaHR0cC1hY2Nlc3MtZmFsbGJhY2svaHR0cC1hY2Nlc3MtZmFsbGJhY2snXG5cbi8vIFRPRE86IEFkZCBgdW5hdXRob3JpemVkYCBkb2NzXG4vKipcbiAqIEBleHBlcmltZW50YWxcbiAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byByZW5kZXIgdGhlIFt1bmF1dGhvcml6ZWQuanMgZmlsZV0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvZmlsZS1jb252ZW50aW9ucy91bmF1dGhvcml6ZWQpXG4gKiB3aXRoaW4gYSByb3V0ZSBzZWdtZW50IGFzIHdlbGwgYXMgaW5qZWN0IGEgdGFnLlxuICpcbiAqIGB1bmF1dGhvcml6ZWQoKWAgY2FuIGJlIHVzZWQgaW5cbiAqIFtTZXJ2ZXIgQ29tcG9uZW50c10oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcmVuZGVyaW5nL3NlcnZlci1jb21wb25lbnRzKSxcbiAqIFtSb3V0ZSBIYW5kbGVyc10oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcm91dGluZy9yb3V0ZS1oYW5kbGVycyksIGFuZFxuICogW1NlcnZlciBBY3Rpb25zXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9kYXRhLWZldGNoaW5nL3NlcnZlci1hY3Rpb25zLWFuZC1tdXRhdGlvbnMpLlxuICpcbiAqXG4gKiBSZWFkIG1vcmU6IFtOZXh0LmpzIERvY3M6IGB1bmF1dGhvcml6ZWRgXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9mdW5jdGlvbnMvdW5hdXRob3JpemVkKVxuICovXG5cbmNvbnN0IERJR0VTVCA9IGAke0hUVFBfRVJST1JfRkFMTEJBQ0tfRVJST1JfQ09ERX07NDAxYFxuXG5leHBvcnQgZnVuY3Rpb24gdW5hdXRob3JpemVkKCk6IG5ldmVyIHtcbiAgaWYgKCFwcm9jZXNzLmVudi5fX05FWFRfRVhQRVJJTUVOVEFMX0FVVEhfSU5URVJSVVBUUykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBcXGB1bmF1dGhvcml6ZWQoKVxcYCBpcyBleHBlcmltZW50YWwgYW5kIG9ubHkgYWxsb3dlZCB0byBiZSB1c2VkIHdoZW4gXFxgZXhwZXJpbWVudGFsLmF1dGhJbnRlcnJ1cHRzXFxgIGlzIGVuYWJsZWQuYFxuICAgIClcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKERJR0VTVCkgYXMgSFRUUEFjY2Vzc0ZhbGxiYWNrRXJyb3JcbiAgOyhlcnJvciBhcyBIVFRQQWNjZXNzRmFsbGJhY2tFcnJvcikuZGlnZXN0ID0gRElHRVNUXG4gIHRocm93IGVycm9yXG59XG4iXSwibmFtZXMiOlsidW5hdXRob3JpemVkIiwiRElHRVNUIiwiSFRUUF9FUlJPUl9GQUxMQkFDS19FUlJPUl9DT0RFIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9FWFBFUklNRU5UQUxfQVVUSF9JTlRFUlJVUFRTIiwiRXJyb3IiLCJlcnJvciIsImRpZ2VzdCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/unauthorized.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/unresolved-thenable.js":
/*!*********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/unresolved-thenable.js ***!
  \*********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/**\n * Create a \"Thenable\" that does not resolve. This is used to suspend indefinitely when data is not available yet.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"unresolvedThenable\", ({\n    enumerable: true,\n    get: function() {\n        return unresolvedThenable;\n    }\n}));\nconst unresolvedThenable = {\n    then: ()=>{}\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=unresolved-thenable.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy91bnJlc29sdmVkLXRoZW5hYmxlLmpzIiwibWFwcGluZ3MiOiJBQUFBOztDQUVDOzs7O3NEQUNZQTs7O2VBQUFBOzs7QUFBTixNQUFNQSxxQkFBcUI7SUFDaENDLE1BQU0sS0FBTztBQUNmIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL3NyYy9jbGllbnQvY29tcG9uZW50cy91bnJlc29sdmVkLXRoZW5hYmxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3JlYXRlIGEgXCJUaGVuYWJsZVwiIHRoYXQgZG9lcyBub3QgcmVzb2x2ZS4gVGhpcyBpcyB1c2VkIHRvIHN1c3BlbmQgaW5kZWZpbml0ZWx5IHdoZW4gZGF0YSBpcyBub3QgYXZhaWxhYmxlIHlldC5cbiAqL1xuZXhwb3J0IGNvbnN0IHVucmVzb2x2ZWRUaGVuYWJsZSA9IHtcbiAgdGhlbjogKCkgPT4ge30sXG59IGFzIFByb21pc2VMaWtlPHZvaWQ+XG4iXSwibmFtZXMiOlsidW5yZXNvbHZlZFRoZW5hYmxlIiwidGhlbiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/unresolved-thenable.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/unstable-rethrow.browser.js":
/*!**************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/unstable-rethrow.browser.js ***!
  \**************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"unstable_rethrow\", ({\n    enumerable: true,\n    get: function() {\n        return unstable_rethrow;\n    }\n}));\nconst _bailouttocsr = __webpack_require__(/*! ../../shared/lib/lazy-dynamic/bailout-to-csr */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\");\nconst _isnextroutererror = __webpack_require__(/*! ./is-next-router-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/is-next-router-error.js\");\nfunction unstable_rethrow(error) {\n    if ((0, _isnextroutererror.isNextRouterError)(error) || (0, _bailouttocsr.isBailoutToCSRError)(error)) {\n        throw error;\n    }\n    if (error instanceof Error && 'cause' in error) {\n        unstable_rethrow(error.cause);\n    }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=unstable-rethrow.browser.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy91bnN0YWJsZS1yZXRocm93LmJyb3dzZXIuanMiLCJtYXBwaW5ncyI6Ijs7OztvREFHZ0JBOzs7ZUFBQUE7OzswQ0FIb0I7K0NBQ0Y7QUFFM0IsU0FBU0EsaUJBQWlCQyxLQUFjO0lBQzdDLElBQUlDLENBQUFBLEdBQUFBLG1CQUFBQSxpQkFBQUEsRUFBa0JELFVBQVVFLENBQUFBLEdBQUFBLGNBQUFBLG1CQUFBQSxFQUFvQkYsUUFBUTtRQUMxRCxNQUFNQTtJQUNSO0lBRUEsSUFBSUEsaUJBQWlCRyxTQUFTLFdBQVdILE9BQU87UUFDOUNELGlCQUFpQkMsTUFBTUksS0FBSztJQUM5QjtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL3NyYy9jbGllbnQvY29tcG9uZW50cy91bnN0YWJsZS1yZXRocm93LmJyb3dzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNCYWlsb3V0VG9DU1JFcnJvciB9IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvbGF6eS1keW5hbWljL2JhaWxvdXQtdG8tY3NyJ1xuaW1wb3J0IHsgaXNOZXh0Um91dGVyRXJyb3IgfSBmcm9tICcuL2lzLW5leHQtcm91dGVyLWVycm9yJ1xuXG5leHBvcnQgZnVuY3Rpb24gdW5zdGFibGVfcmV0aHJvdyhlcnJvcjogdW5rbm93bik6IHZvaWQge1xuICBpZiAoaXNOZXh0Um91dGVyRXJyb3IoZXJyb3IpIHx8IGlzQmFpbG91dFRvQ1NSRXJyb3IoZXJyb3IpKSB7XG4gICAgdGhyb3cgZXJyb3JcbiAgfVxuXG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICdjYXVzZScgaW4gZXJyb3IpIHtcbiAgICB1bnN0YWJsZV9yZXRocm93KGVycm9yLmNhdXNlKVxuICB9XG59XG4iXSwibmFtZXMiOlsidW5zdGFibGVfcmV0aHJvdyIsImVycm9yIiwiaXNOZXh0Um91dGVyRXJyb3IiLCJpc0JhaWxvdXRUb0NTUkVycm9yIiwiRXJyb3IiLCJjYXVzZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/unstable-rethrow.browser.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/unstable-rethrow.js":
/*!******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/unstable-rethrow.js ***!
  \******************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/**\n * This function should be used to rethrow internal Next.js errors so that they can be handled by the framework.\n * When wrapping an API that uses errors to interrupt control flow, you should use this function before you do any error handling.\n * This function will rethrow the error if it is a Next.js error so it can be handled, otherwise it will do nothing.\n *\n * Read more: [Next.js Docs: `unstable_rethrow`](https://nextjs.org/docs/app/api-reference/functions/unstable_rethrow)\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"unstable_rethrow\", ({\n    enumerable: true,\n    get: function() {\n        return unstable_rethrow;\n    }\n}));\nconst unstable_rethrow =  false ? 0 : (__webpack_require__(/*! ./unstable-rethrow.browser */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/unstable-rethrow.browser.js\").unstable_rethrow);\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=unstable-rethrow.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy91bnN0YWJsZS1yZXRocm93LmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Q0FNQzs7OztvREFDWUE7OztlQUFBQTs7O0FBQU4sTUFBTUEsbUJBQ1gsTUFBNkIsR0FFdkJFLENBQ2dCLEdBRWhCQSxrVEFDZ0IiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL2NsaWVudC9jb21wb25lbnRzL3Vuc3RhYmxlLXJldGhyb3cudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIHRvIHJldGhyb3cgaW50ZXJuYWwgTmV4dC5qcyBlcnJvcnMgc28gdGhhdCB0aGV5IGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBmcmFtZXdvcmsuXG4gKiBXaGVuIHdyYXBwaW5nIGFuIEFQSSB0aGF0IHVzZXMgZXJyb3JzIHRvIGludGVycnVwdCBjb250cm9sIGZsb3csIHlvdSBzaG91bGQgdXNlIHRoaXMgZnVuY3Rpb24gYmVmb3JlIHlvdSBkbyBhbnkgZXJyb3IgaGFuZGxpbmcuXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0aHJvdyB0aGUgZXJyb3IgaWYgaXQgaXMgYSBOZXh0LmpzIGVycm9yIHNvIGl0IGNhbiBiZSBoYW5kbGVkLCBvdGhlcndpc2UgaXQgd2lsbCBkbyBub3RoaW5nLlxuICpcbiAqIFJlYWQgbW9yZTogW05leHQuanMgRG9jczogYHVuc3RhYmxlX3JldGhyb3dgXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9mdW5jdGlvbnMvdW5zdGFibGVfcmV0aHJvdylcbiAqL1xuZXhwb3J0IGNvbnN0IHVuc3RhYmxlX3JldGhyb3cgPVxuICB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJ1xuICAgID8gKFxuICAgICAgICByZXF1aXJlKCcuL3Vuc3RhYmxlLXJldGhyb3cuc2VydmVyJykgYXMgdHlwZW9mIGltcG9ydCgnLi91bnN0YWJsZS1yZXRocm93LnNlcnZlcicpXG4gICAgICApLnVuc3RhYmxlX3JldGhyb3dcbiAgICA6IChcbiAgICAgICAgcmVxdWlyZSgnLi91bnN0YWJsZS1yZXRocm93LmJyb3dzZXInKSBhcyB0eXBlb2YgaW1wb3J0KCcuL3Vuc3RhYmxlLXJldGhyb3cuYnJvd3NlcicpXG4gICAgICApLnVuc3RhYmxlX3JldGhyb3dcbiJdLCJuYW1lcyI6WyJ1bnN0YWJsZV9yZXRocm93Iiwid2luZG93IiwicmVxdWlyZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/unstable-rethrow.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/use-action-queue.js":
/*!******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/use-action-queue.js ***!
  \******************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    dispatchAppRouterAction: function() {\n        return dispatchAppRouterAction;\n    },\n    useActionQueue: function() {\n        return useActionQueue;\n    }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"));\nconst _isthenable = __webpack_require__(/*! ../../shared/lib/is-thenable */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/is-thenable.js\");\n// The app router state lives outside of React, so we can import the dispatch\n// method directly wherever we need it, rather than passing it around via props\n// or context.\nlet dispatch = null;\nfunction dispatchAppRouterAction(action) {\n    if (dispatch === null) {\n        throw Object.defineProperty(new Error('Internal Next.js error: Router action dispatched before initialization.'), \"__NEXT_ERROR_CODE\", {\n            value: \"E668\",\n            enumerable: false,\n            configurable: true\n        });\n    }\n    dispatch(action);\n}\nfunction useActionQueue(actionQueue) {\n    _s();\n    const [state, setState] = _react.default.useState(actionQueue.state);\n    // Because of a known issue that requires to decode Flight streams inside the\n    // render phase, we have to be a bit clever and assign the dispatch method to\n    // a module-level variable upon initialization. The useState hook in this\n    // module only exists to synchronize state that lives outside of React.\n    // Ideally, what we'd do instead is pass the state as a prop to root.render;\n    // this is conceptually how we're modeling the app router state, despite the\n    // weird implementation details.\n    if (true) {\n        const { useAppDevRenderingIndicator } = __webpack_require__(/*! ../../next-devtools/userspace/use-app-dev-rendering-indicator */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/use-app-dev-rendering-indicator.js\");\n        // eslint-disable-next-line react-hooks/rules-of-hooks\n        const appDevRenderingIndicator = useAppDevRenderingIndicator();\n        dispatch = (action)=>{\n            appDevRenderingIndicator(()=>{\n                actionQueue.dispatch(action, setState);\n            });\n        };\n    } else {}\n    return (0, _isthenable.isThenable)(state) ? (0, _react.use)(state) : state;\n}\n_s(useActionQueue, \"Rp0Tj1zyE8LTecjN/cjTzn46xPo=\");\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=use-action-queue.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvY29tcG9uZW50cy91c2UtYWN0aW9uLXF1ZXVlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0lBZWdCQSx1QkFBdUI7ZUFBdkJBOztJQVNBQyxjQUFjO2VBQWRBOzs7OzZFQXZCVzt3Q0FDQTtBQVEzQiw2RUFBNkU7QUFDN0UsK0VBQStFO0FBQy9FLGNBQWM7QUFDZCxJQUFJQyxXQUE0QztBQUV6QyxTQUFTRix3QkFBd0JHLE1BQXNCO0lBQzVELElBQUlELGFBQWEsTUFBTTtRQUNyQixNQUFNLHFCQUVMLENBRkssSUFBSUUsTUFDUiw0RUFESTttQkFBQTt3QkFBQTswQkFBQTtRQUVOO0lBQ0Y7SUFDQUYsU0FBU0M7QUFDWDtBQUVPLHdCQUNMRSxXQUFpQzs7SUFFakMsTUFBTSxDQUFDQyxPQUFPQyxTQUFTLEdBQUdDLE9BQUFBLE9BQUssQ0FBQ0MsUUFBUSxDQUFlSixZQUFZQyxLQUFLO0lBRXhFLDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFDN0UseUVBQXlFO0lBQ3pFLHVFQUF1RTtJQUN2RSw0RUFBNEU7SUFDNUUsNEVBQTRFO0lBQzVFLGdDQUFnQztJQUNoQyxJQTFCRixJQTBCMEIsRUFBbUI7UUFDekMsTUFBTSxFQUFFTywyQkFBMkIsRUFBRSxHQUNuQ0MsbUJBQU9BLENBQUMsMFRBQStEO1FBQ3pFLHNEQUFzRDtRQUN0RCxNQUFNQywyQkFBMkJGO1FBRWpDWCxXQUFXLENBQUNDO1lBQ1ZZLHlCQUF5QjtnQkFDdkJWLFlBQVlILFFBQVEsQ0FBQ0MsUUFBUUk7WUFDL0I7UUFDRjtJQUNGLE9BQU8sRUFHTjtJQUVELE9BQU9TLENBQUFBLEdBQUFBLFlBQUFBLFVBQUFBLEVBQVdWLFNBQVNXLENBQUFBLEdBQUFBLE9BQUFBLEdBQUFBLEVBQUlYLFNBQVNBO0FBQzFDO0dBN0JnQkwiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL2NsaWVudC9jb21wb25lbnRzL3VzZS1hY3Rpb24tcXVldWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEaXNwYXRjaCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJlYWN0LCB7IHVzZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgaXNUaGVuYWJsZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvaXMtdGhlbmFibGUnXG5pbXBvcnQgdHlwZSB7IEFwcFJvdXRlckFjdGlvblF1ZXVlIH0gZnJvbSAnLi9hcHAtcm91dGVyLWluc3RhbmNlJ1xuaW1wb3J0IHR5cGUge1xuICBBcHBSb3V0ZXJTdGF0ZSxcbiAgUmVkdWNlckFjdGlvbnMsXG4gIFJlZHVjZXJTdGF0ZSxcbn0gZnJvbSAnLi9yb3V0ZXItcmVkdWNlci9yb3V0ZXItcmVkdWNlci10eXBlcydcblxuLy8gVGhlIGFwcCByb3V0ZXIgc3RhdGUgbGl2ZXMgb3V0c2lkZSBvZiBSZWFjdCwgc28gd2UgY2FuIGltcG9ydCB0aGUgZGlzcGF0Y2hcbi8vIG1ldGhvZCBkaXJlY3RseSB3aGVyZXZlciB3ZSBuZWVkIGl0LCByYXRoZXIgdGhhbiBwYXNzaW5nIGl0IGFyb3VuZCB2aWEgcHJvcHNcbi8vIG9yIGNvbnRleHQuXG5sZXQgZGlzcGF0Y2g6IERpc3BhdGNoPFJlZHVjZXJBY3Rpb25zPiB8IG51bGwgPSBudWxsXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaEFwcFJvdXRlckFjdGlvbihhY3Rpb246IFJlZHVjZXJBY3Rpb25zKSB7XG4gIGlmIChkaXNwYXRjaCA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdJbnRlcm5hbCBOZXh0LmpzIGVycm9yOiBSb3V0ZXIgYWN0aW9uIGRpc3BhdGNoZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uLidcbiAgICApXG4gIH1cbiAgZGlzcGF0Y2goYWN0aW9uKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQWN0aW9uUXVldWUoXG4gIGFjdGlvblF1ZXVlOiBBcHBSb3V0ZXJBY3Rpb25RdWV1ZVxuKTogQXBwUm91dGVyU3RhdGUge1xuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlPFJlZHVjZXJTdGF0ZT4oYWN0aW9uUXVldWUuc3RhdGUpXG5cbiAgLy8gQmVjYXVzZSBvZiBhIGtub3duIGlzc3VlIHRoYXQgcmVxdWlyZXMgdG8gZGVjb2RlIEZsaWdodCBzdHJlYW1zIGluc2lkZSB0aGVcbiAgLy8gcmVuZGVyIHBoYXNlLCB3ZSBoYXZlIHRvIGJlIGEgYml0IGNsZXZlciBhbmQgYXNzaWduIHRoZSBkaXNwYXRjaCBtZXRob2QgdG9cbiAgLy8gYSBtb2R1bGUtbGV2ZWwgdmFyaWFibGUgdXBvbiBpbml0aWFsaXphdGlvbi4gVGhlIHVzZVN0YXRlIGhvb2sgaW4gdGhpc1xuICAvLyBtb2R1bGUgb25seSBleGlzdHMgdG8gc3luY2hyb25pemUgc3RhdGUgdGhhdCBsaXZlcyBvdXRzaWRlIG9mIFJlYWN0LlxuICAvLyBJZGVhbGx5LCB3aGF0IHdlJ2QgZG8gaW5zdGVhZCBpcyBwYXNzIHRoZSBzdGF0ZSBhcyBhIHByb3AgdG8gcm9vdC5yZW5kZXI7XG4gIC8vIHRoaXMgaXMgY29uY2VwdHVhbGx5IGhvdyB3ZSdyZSBtb2RlbGluZyB0aGUgYXBwIHJvdXRlciBzdGF0ZSwgZGVzcGl0ZSB0aGVcbiAgLy8gd2VpcmQgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zdCB7IHVzZUFwcERldlJlbmRlcmluZ0luZGljYXRvciB9ID1cbiAgICAgIHJlcXVpcmUoJy4uLy4uL25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL3VzZS1hcHAtZGV2LXJlbmRlcmluZy1pbmRpY2F0b3InKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi8uLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS91c2UtYXBwLWRldi1yZW5kZXJpbmctaW5kaWNhdG9yJylcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBjb25zdCBhcHBEZXZSZW5kZXJpbmdJbmRpY2F0b3IgPSB1c2VBcHBEZXZSZW5kZXJpbmdJbmRpY2F0b3IoKVxuXG4gICAgZGlzcGF0Y2ggPSAoYWN0aW9uOiBSZWR1Y2VyQWN0aW9ucykgPT4ge1xuICAgICAgYXBwRGV2UmVuZGVyaW5nSW5kaWNhdG9yKCgpID0+IHtcbiAgICAgICAgYWN0aW9uUXVldWUuZGlzcGF0Y2goYWN0aW9uLCBzZXRTdGF0ZSlcbiAgICAgIH0pXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRpc3BhdGNoID0gKGFjdGlvbjogUmVkdWNlckFjdGlvbnMpID0+XG4gICAgICBhY3Rpb25RdWV1ZS5kaXNwYXRjaChhY3Rpb24sIHNldFN0YXRlKVxuICB9XG5cbiAgcmV0dXJuIGlzVGhlbmFibGUoc3RhdGUpID8gdXNlKHN0YXRlKSA6IHN0YXRlXG59XG4iXSwibmFtZXMiOlsiZGlzcGF0Y2hBcHBSb3V0ZXJBY3Rpb24iLCJ1c2VBY3Rpb25RdWV1ZSIsImRpc3BhdGNoIiwiYWN0aW9uIiwiRXJyb3IiLCJhY3Rpb25RdWV1ZSIsInN0YXRlIiwic2V0U3RhdGUiLCJSZWFjdCIsInVzZVN0YXRlIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwidXNlQXBwRGV2UmVuZGVyaW5nSW5kaWNhdG9yIiwicmVxdWlyZSIsImFwcERldlJlbmRlcmluZ0luZGljYXRvciIsImlzVGhlbmFibGUiLCJ1c2UiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/use-action-queue.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/detect-domain-locale.js":
/*!***********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/detect-domain-locale.js ***!
  \***********************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"detectDomainLocale\", ({\n    enumerable: true,\n    get: function() {\n        return detectDomainLocale;\n    }\n}));\nconst detectDomainLocale = function() {\n    for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n        args[_key] = arguments[_key];\n    }\n    if (false) {}\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=detect-domain-locale.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvZGV0ZWN0LWRvbWFpbi1sb2NhbGUuanMiLCJtYXBwaW5ncyI6Ijs7OztzREFFYUE7OztlQUFBQTs7O0FBQU4sTUFBTUEscUJBQWdDO3FDQUFJQyxPQUFBQSxJQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxHQUFBQSxPQUFBQSxNQUFBQSxPQUFBQTtRQUFBQSxJQUFBQSxDQUFBQSxLQUFBQSxHQUFBQSxTQUFBQSxDQUFBQSxLQUFBQTs7SUFDL0MsSUFBSUMsS0FBK0IsRUFBRSxFQUlwQztBQUNIIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9zcmMvY2xpZW50L2RldGVjdC1kb21haW4tbG9jYWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgZGV0ZWN0RG9tYWluTG9jYWxlIGFzIEZuIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9pMThuL2RldGVjdC1kb21haW4tbG9jYWxlJ1xuXG5leHBvcnQgY29uc3QgZGV0ZWN0RG9tYWluTG9jYWxlOiB0eXBlb2YgRm4gPSAoLi4uYXJncykgPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgIHJldHVybiAoXG4gICAgICByZXF1aXJlKCcuLi9zaGFyZWQvbGliL2kxOG4vZGV0ZWN0LWRvbWFpbi1sb2NhbGUnKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi9zaGFyZWQvbGliL2kxOG4vZGV0ZWN0LWRvbWFpbi1sb2NhbGUnKVxuICAgICkuZGV0ZWN0RG9tYWluTG9jYWxlKC4uLmFyZ3MpXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJkZXRlY3REb21haW5Mb2NhbGUiLCJhcmdzIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9JMThOX1NVUFBPUlQiLCJyZXF1aXJlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/detect-domain-locale.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/app/hot-reloader-app.js":
/*!****************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/app/hot-reloader-app.js ***!
  \****************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/// <reference types=\"webpack/module.d.ts\" />\n\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    default: function() {\n        return HotReload;\n    },\n    waitForWebpackRuntimeHotUpdate: function() {\n        return waitForWebpackRuntimeHotUpdate;\n    }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/strip-ansi/index.js\"));\nconst _formatwebpackmessages = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../../../shared/lib/format-webpack-messages */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/format-webpack-messages.js\"));\nconst _navigation = __webpack_require__(/*! ../../../components/navigation */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/navigation.js\");\nconst _shared = __webpack_require__(/*! ../shared */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/shared.js\");\nconst _nextdevtools = __webpack_require__(/*! next/dist/compiled/next-devtools */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/next-devtools/index.js\");\nconst _replayssronlyerrors = __webpack_require__(/*! ../../../../next-devtools/userspace/app/errors/replay-ssr-only-errors */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/replay-ssr-only-errors.js\");\nconst _appdevoverlayerrorboundary = __webpack_require__(/*! ../../../../next-devtools/userspace/app/app-dev-overlay-error-boundary */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-error-boundary.js\");\nconst _useerrorhandler = __webpack_require__(/*! ../../../../next-devtools/userspace/app/errors/use-error-handler */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/use-error-handler.js\");\nconst _runtimeerrorhandler = __webpack_require__(/*! ../../runtime-error-handler */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/runtime-error-handler.js\");\nconst _usewebsocket = __webpack_require__(/*! ./use-websocket */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/app/use-websocket.js\");\nconst _hotreloadertypes = __webpack_require__(/*! ../../../../server/dev/hot-reloader-types */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/server/dev/hot-reloader-types.js\");\nconst _navigationuntracked = __webpack_require__(/*! ../../../components/navigation-untracked */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/navigation-untracked.js\");\nconst _reporthmrlatency = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../report-hmr-latency */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/report-hmr-latency.js\"));\nconst _turbopackhotreloadercommon = __webpack_require__(/*! ../turbopack-hot-reloader-common */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/turbopack-hot-reloader-common.js\");\nconst _approuterheaders = __webpack_require__(/*! ../../../components/app-router-headers */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/app-router-headers.js\");\nconst _useforwardconsolelog = __webpack_require__(/*! ../../../../next-devtools/userspace/app/errors/use-forward-console-log */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/use-forward-console-log.js\");\nlet mostRecentCompilationHash = null;\nlet __nextDevClientId = Math.round(Math.random() * 100 + Date.now());\nlet reloading = false;\nlet webpackStartMsSinceEpoch = null;\nconst turbopackHmr =  false ? 0 : null;\nlet pendingHotUpdateWebpack = Promise.resolve();\nlet resolvePendingHotUpdateWebpack = ()=>{};\nfunction setPendingHotUpdateWebpack() {\n    pendingHotUpdateWebpack = new Promise((resolve)=>{\n        resolvePendingHotUpdateWebpack = ()=>{\n            resolve();\n        };\n    });\n}\nfunction waitForWebpackRuntimeHotUpdate() {\n    return pendingHotUpdateWebpack;\n}\n// There is a newer version of the code available.\nfunction handleAvailableHash(hash) {\n    // Update last known compilation hash.\n    mostRecentCompilationHash = hash;\n}\n/**\n * Is there a newer version of this code available?\n * For webpack: Check if the hash changed compared to __webpack_hash__\n * For Turbopack: Always true because it doesn't have __webpack_hash__\n */ function isUpdateAvailable() {\n    if (false) {}\n    /* globals __webpack_hash__ */ // __webpack_hash__ is the hash of the current compilation.\n    // It's a global variable injected by Webpack.\n    return mostRecentCompilationHash !== __webpack_require__.h();\n}\n// Webpack disallows updates in other states.\nfunction canApplyUpdates() {\n    return module.hot.status() === 'idle';\n}\nfunction afterApplyUpdates(fn) {\n    if (canApplyUpdates()) {\n        fn();\n    } else {\n        function handler(status) {\n            if (status === 'idle') {\n                module.hot.removeStatusHandler(handler);\n                fn();\n            }\n        }\n        module.hot.addStatusHandler(handler);\n    }\n}\nfunction performFullReload(err, sendMessage) {\n    const stackTrace = err && (err.stack && err.stack.split('\\n').slice(0, 5).join('\\n') || err.message || err + '');\n    sendMessage(JSON.stringify({\n        event: 'client-full-reload',\n        stackTrace,\n        hadRuntimeError: !!_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError,\n        dependencyChain: err ? err.dependencyChain : undefined\n    }));\n    if (reloading) return;\n    reloading = true;\n    window.location.reload();\n}\n// Attempt to update code on the fly, fall back to a hard reload.\nfunction tryApplyUpdatesWebpack(sendMessage) {\n    if (!isUpdateAvailable() || !canApplyUpdates()) {\n        resolvePendingHotUpdateWebpack();\n        _nextdevtools.dispatcher.onBuildOk();\n        (0, _reporthmrlatency.default)(sendMessage, [], webpackStartMsSinceEpoch, Date.now());\n        return;\n    }\n    function handleApplyUpdates(err, updatedModules) {\n        if (err || _runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError || updatedModules == null) {\n            if (err) {\n                console.warn(_shared.REACT_REFRESH_FULL_RELOAD);\n            } else if (_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n                console.warn(_shared.REACT_REFRESH_FULL_RELOAD_FROM_ERROR);\n            }\n            performFullReload(err, sendMessage);\n            return;\n        }\n        _nextdevtools.dispatcher.onBuildOk();\n        if (isUpdateAvailable()) {\n            // While we were updating, there was a new update! Do it again.\n            tryApplyUpdatesWebpack(sendMessage);\n            return;\n        }\n        _nextdevtools.dispatcher.onRefresh();\n        resolvePendingHotUpdateWebpack();\n        (0, _reporthmrlatency.default)(sendMessage, updatedModules, webpackStartMsSinceEpoch, Date.now());\n        if (false) {}\n    }\n    // https://webpack.js.org/api/hot-module-replacement/#check\n    module.hot.check(/* autoApply */ false).then((updatedModules)=>{\n        if (updatedModules == null) {\n            return null;\n        }\n        // We should always handle an update, even if updatedModules is empty (but\n        // non-null) for any reason. That's what webpack would normally do:\n        // https://github.com/webpack/webpack/blob/3aa6b6bc3a64/lib/hmr/HotModuleReplacement.runtime.js#L296-L298\n        _nextdevtools.dispatcher.onBeforeRefresh();\n        // https://webpack.js.org/api/hot-module-replacement/#apply\n        return module.hot.apply();\n    }).then((updatedModules)=>{\n        handleApplyUpdates(null, updatedModules);\n    }, (err)=>{\n        handleApplyUpdates(err, null);\n    });\n}\n/** Handles messages from the server for the App Router. */ function processMessage(obj, sendMessage, processTurbopackMessage, router, appIsrManifestRef, pathnameRef) {\n    if (!('action' in obj)) {\n        return;\n    }\n    function handleErrors(errors) {\n        // \"Massage\" webpack messages.\n        const formatted = (0, _formatwebpackmessages.default)({\n            errors: errors,\n            warnings: []\n        });\n        // Only show the first error.\n        _nextdevtools.dispatcher.onBuildError(formatted.errors[0]);\n        // Also log them to the console.\n        for(let i = 0; i < formatted.errors.length; i++){\n            console.error((0, _stripansi.default)(formatted.errors[i]));\n        }\n        // Do not attempt to reload now.\n        // We will reload on next success instead.\n        if (false) {}\n    }\n    function handleHotUpdate() {\n        if (false) {} else {\n            tryApplyUpdatesWebpack(sendMessage);\n        }\n    }\n    switch(obj.action){\n        case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.ISR_MANIFEST:\n            {\n                if (true) {\n                    if (appIsrManifestRef) {\n                        appIsrManifestRef.current = obj.data;\n                        // handle initial status on receiving manifest\n                        // navigation is handled in useEffect for pathname changes\n                        // as we'll receive the updated manifest before usePathname\n                        // triggers for new value\n                        if (pathnameRef.current in obj.data) {\n                            _nextdevtools.dispatcher.onStaticIndicator(true);\n                        } else {\n                            _nextdevtools.dispatcher.onStaticIndicator(false);\n                        }\n                    }\n                }\n                break;\n            }\n        case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILDING:\n            {\n                _nextdevtools.dispatcher.buildingIndicatorShow();\n                if (false) {} else {\n                    webpackStartMsSinceEpoch = Date.now();\n                    setPendingHotUpdateWebpack();\n                    console.log('[Fast Refresh] rebuilding');\n                }\n                break;\n            }\n        case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILT:\n        case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SYNC:\n            {\n                _nextdevtools.dispatcher.buildingIndicatorHide();\n                if (obj.hash) {\n                    handleAvailableHash(obj.hash);\n                }\n                const { errors, warnings } = obj;\n                // Is undefined when it's a 'built' event\n                if ('versionInfo' in obj) _nextdevtools.dispatcher.onVersionInfo(obj.versionInfo);\n                if ('debug' in obj && obj.debug) _nextdevtools.dispatcher.onDebugInfo(obj.debug);\n                if ('devIndicator' in obj) _nextdevtools.dispatcher.onDevIndicator(obj.devIndicator);\n                const hasErrors = Boolean(errors && errors.length);\n                // Compilation with errors (e.g. syntax error or missing modules).\n                if (hasErrors) {\n                    sendMessage(JSON.stringify({\n                        event: 'client-error',\n                        errorCount: errors.length,\n                        clientId: __nextDevClientId\n                    }));\n                    handleErrors(errors);\n                    return;\n                }\n                const hasWarnings = Boolean(warnings && warnings.length);\n                if (hasWarnings) {\n                    sendMessage(JSON.stringify({\n                        event: 'client-warning',\n                        warningCount: warnings.length,\n                        clientId: __nextDevClientId\n                    }));\n                    // Print warnings to the console.\n                    const formattedMessages = (0, _formatwebpackmessages.default)({\n                        warnings: warnings,\n                        errors: []\n                    });\n                    for(let i = 0; i < formattedMessages.warnings.length; i++){\n                        if (i === 5) {\n                            console.warn('There were more warnings in other files.\\n' + 'You can find a complete log in the terminal.');\n                            break;\n                        }\n                        console.warn((0, _stripansi.default)(formattedMessages.warnings[i]));\n                    }\n                // No early return here as we need to apply modules in the same way between warnings only and compiles without warnings\n                }\n                sendMessage(JSON.stringify({\n                    event: 'client-success',\n                    clientId: __nextDevClientId\n                }));\n                if (obj.action === _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.BUILT) {\n                    handleHotUpdate();\n                }\n                return;\n            }\n        case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED:\n            {\n                processTurbopackMessage({\n                    type: _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_CONNECTED,\n                    data: {\n                        sessionId: obj.data.sessionId\n                    }\n                });\n                break;\n            }\n        case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE:\n            {\n                turbopackHmr.onTurbopackMessage(obj);\n                _nextdevtools.dispatcher.onBeforeRefresh();\n                processTurbopackMessage({\n                    type: _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.TURBOPACK_MESSAGE,\n                    data: obj.data\n                });\n                if (_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n                    console.warn(_shared.REACT_REFRESH_FULL_RELOAD_FROM_ERROR);\n                    performFullReload(null, sendMessage);\n                }\n                _nextdevtools.dispatcher.onRefresh();\n                break;\n            }\n        // TODO-APP: make server component change more granular\n        case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES:\n            {\n                turbopackHmr == null ? void 0 : turbopackHmr.onServerComponentChanges();\n                sendMessage(JSON.stringify({\n                    event: 'server-component-reload-page',\n                    clientId: __nextDevClientId,\n                    hash: obj.hash\n                }));\n                // Store the latest hash in a session cookie so that it's sent back to the\n                // server with any subsequent requests.\n                document.cookie = _approuterheaders.NEXT_HMR_REFRESH_HASH_COOKIE + \"=\" + obj.hash;\n                if (_runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError) {\n                    if (reloading) return;\n                    reloading = true;\n                    return window.location.reload();\n                }\n                (0, _react.startTransition)(()=>{\n                    router.hmrRefresh();\n                    _nextdevtools.dispatcher.onRefresh();\n                });\n                if (false) {}\n                return;\n            }\n        case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.RELOAD_PAGE:\n            {\n                turbopackHmr == null ? void 0 : turbopackHmr.onReloadPage();\n                sendMessage(JSON.stringify({\n                    event: 'client-reload-page',\n                    clientId: __nextDevClientId\n                }));\n                if (reloading) return;\n                reloading = true;\n                return window.location.reload();\n            }\n        case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.ADDED_PAGE:\n        case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.REMOVED_PAGE:\n            {\n                turbopackHmr == null ? void 0 : turbopackHmr.onPageAddRemove();\n                // TODO-APP: potentially only refresh if the currently viewed page was added/removed.\n                return router.hmrRefresh();\n            }\n        case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_ERROR:\n            {\n                const { errorJSON } = obj;\n                if (errorJSON) {\n                    const { message, stack } = JSON.parse(errorJSON);\n                    const error = Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n                        value: \"E394\",\n                        enumerable: false,\n                        configurable: true\n                    });\n                    error.stack = stack;\n                    handleErrors([\n                        error\n                    ]);\n                }\n                return;\n            }\n        case _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.DEV_PAGES_MANIFEST_UPDATE:\n            {\n                return;\n            }\n        default:\n            {}\n    }\n}\nfunction HotReload(param) {\n    let { assetPrefix, children, globalError } = param;\n    (0, _useerrorhandler.useErrorHandler)(_nextdevtools.dispatcher.onUnhandledError, _nextdevtools.dispatcher.onUnhandledRejection);\n    const webSocketRef = (0, _usewebsocket.useWebsocket)(assetPrefix);\n    (0, _usewebsocket.useWebsocketPing)(webSocketRef);\n    const sendMessage = (0, _usewebsocket.useSendMessage)(webSocketRef);\n    (0, _useforwardconsolelog.useForwardConsoleLog)(webSocketRef);\n    const processTurbopackMessage = (0, _usewebsocket.useTurbopack)(sendMessage, (err)=>performFullReload(err, sendMessage));\n    const router = (0, _navigation.useRouter)();\n    // We don't want access of the pathname for the dev tools to trigger a dynamic\n    // access (as the dev overlay will never be present in production).\n    const pathname = (0, _navigationuntracked.useUntrackedPathname)();\n    const appIsrManifestRef = (0, _react.useRef)({});\n    const pathnameRef = (0, _react.useRef)(pathname);\n    if (true) {\n        // this conditional is only for dead-code elimination which\n        // isn't a runtime conditional only build-time so ignore hooks rule\n        // eslint-disable-next-line react-hooks/rules-of-hooks\n        (0, _react.useEffect)(()=>{\n            pathnameRef.current = pathname;\n            const appIsrManifest = appIsrManifestRef.current;\n            if (appIsrManifest) {\n                if (pathname && pathname in appIsrManifest) {\n                    try {\n                        _nextdevtools.dispatcher.onStaticIndicator(true);\n                    } catch (reason) {\n                        let message = '';\n                        if (reason instanceof DOMException) {\n                            var _reason_stack;\n                            // Most likely a SecurityError, because of an unavailable localStorage\n                            message = (_reason_stack = reason.stack) != null ? _reason_stack : reason.message;\n                        } else if (reason instanceof Error) {\n                            var _reason_stack1;\n                            message = 'Error: ' + reason.message + '\\n' + ((_reason_stack1 = reason.stack) != null ? _reason_stack1 : '');\n                        } else {\n                            message = 'Unexpected Exception: ' + reason;\n                        }\n                        console.warn('[HMR] ' + message);\n                    }\n                } else {\n                    _nextdevtools.dispatcher.onStaticIndicator(false);\n                }\n            }\n        }, [\n            pathname\n        ]);\n    }\n    (0, _react.useEffect)(()=>{\n        const websocket = webSocketRef.current;\n        if (!websocket) return;\n        const handler = (event)=>{\n            try {\n                const obj = JSON.parse(event.data);\n                processMessage(obj, sendMessage, processTurbopackMessage, router, appIsrManifestRef, pathnameRef);\n            } catch (err) {\n                (0, _shared.reportInvalidHmrMessage)(event, err);\n            }\n        };\n        websocket.addEventListener('message', handler);\n        return ()=>websocket.removeEventListener('message', handler);\n    }, [\n        sendMessage,\n        router,\n        webSocketRef,\n        processTurbopackMessage,\n        appIsrManifestRef\n    ]);\n    return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_appdevoverlayerrorboundary.AppDevOverlayErrorBoundary, {\n        globalError: globalError,\n        children: [\n            /*#__PURE__*/ (0, _jsxruntime.jsx)(_replayssronlyerrors.ReplaySsrOnlyErrors, {\n                onBlockingError: _nextdevtools.dispatcher.openErrorOverlay\n            }),\n            children\n        ]\n    });\n}\n_c = HotReload;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=hot-reloader-app.js.map\nvar _c;\n$RefreshReg$(_c, \"HotReload\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvZGV2L2hvdC1yZWxvYWRlci9hcHAvaG90LXJlbG9hZGVyLWFwcC5qcyIsIm1hcHBpbmdzIjoiQUFBQSw2Q0FBNkM7Ozs7Ozs7Ozs7Ozs7SUErYjdDLE9BaUdDO2VBakd1QkE7O0lBMVlSQyw4QkFBOEI7ZUFBOUJBOzs7OzttQ0FsRG1DO2dGQUM3Qjs0RkFDWTt3Q0FDUjtvQ0FLbkI7MENBQ29CO2lEQUNTO3dEQUNPOzZDQUNYO2lEQUNJOzBDQU03Qjs4Q0FDcUM7aURBS1A7dUZBQ1I7d0RBQ0E7OENBQ2dCO2tEQUVSO0FBRXJDLElBQUlDLDRCQUFpQztBQUNyQyxJQUFJQyxvQkFBb0JDLEtBQUtDLEtBQUssQ0FBQ0QsS0FBS0UsTUFBTSxLQUFLLE1BQU1DLEtBQUtDLEdBQUc7QUFDakUsSUFBSUMsWUFBWTtBQUNoQixJQUFJQywyQkFBMEM7QUFDOUMsTUFBTUMsZUFBb0NDLE1BQXFCLEdBQzNELENBQWtCLEdBQ2xCO0FBRUosSUFBSUksMEJBQTBCQyxRQUFRQyxPQUFPO0FBQzdDLElBQUlDLGlDQUE2QyxLQUFPO0FBQ3hELFNBQVNDO0lBQ1BKLDBCQUEwQixJQUFJQyxRQUFRLENBQUNDO1FBQ3JDQyxpQ0FBaUM7WUFDL0JEO1FBQ0Y7SUFDRjtBQUNGO0FBRU8sU0FBU2pCO0lBQ2QsT0FBT2U7QUFDVDtBQUVBLGtEQUFrRDtBQUNsRCxTQUFTSyxvQkFBb0JDLElBQVk7SUFDdkMsc0NBQXNDO0lBQ3RDcEIsNEJBQTRCb0I7QUFDOUI7QUFFQTs7OztDQUlDLEdBQ0QsU0FBU0M7SUFDUCxJQUFJWCxLQUFxQixFQUFFLEVBRTFCO0lBRUQsNEJBQTRCLEdBQzVCLDJEQUEyRDtJQUMzRCw4Q0FBOEM7SUFDOUMsT0FBT1YsOEJBQThCc0IsdUJBQWdCQTtBQUN2RDtBQUVBLDZDQUE2QztBQUM3QyxTQUFTQztJQUNQLE9BQU9DLFVBQVUsQ0FBQ0UsTUFBTSxPQUFPO0FBQ2pDO0FBQ0EsU0FBU0Msa0JBQWtCQyxFQUFPO0lBQ2hDLElBQUlMLG1CQUFtQjtRQUNyQks7SUFDRixPQUFPO1FBQ0wsU0FBU0MsUUFBUUgsTUFBVztZQUMxQixJQUFJQSxXQUFXLFFBQVE7Z0JBQ3JCRixVQUFVLENBQUNNLG1CQUFtQixDQUFDRDtnQkFDL0JEO1lBQ0Y7UUFDRjtRQUNBSixVQUFVLENBQUNPLGdCQUFnQixDQUFDRjtJQUM5QjtBQUNGO0FBRUEsU0FBU0csa0JBQWtCQyxHQUFRLEVBQUVDLFdBQWdCO0lBQ25ELE1BQU1DLGFBQ0pGLE9BQ0MsQ0FBQ0EsSUFBSUcsS0FBSyxJQUFJSCxJQUFJRyxLQUFLLENBQUNDLEtBQUssQ0FBQyxNQUFNQyxLQUFLLENBQUMsR0FBRyxHQUFHQyxJQUFJLENBQUMsU0FDcEROLElBQUlPLE9BQU8sSUFDWFAsTUFBTSxHQUFDO0lBRVhDLFlBQ0VPLEtBQUtDLFNBQVMsQ0FBQztRQUNiQyxPQUFPO1FBQ1BSO1FBQ0FTLGlCQUFpQixDQUFDLENBQUNDLHFCQUFBQSxtQkFBbUIsQ0FBQ0QsZUFBZTtRQUN0REUsaUJBQWlCYixNQUFNQSxJQUFJYSxlQUFlLEdBQUdDO0lBQy9DO0lBR0YsSUFBSXhDLFdBQVc7SUFDZkEsWUFBWTtJQUNaeUMsT0FBT0MsUUFBUSxDQUFDQyxNQUFNO0FBQ3hCO0FBRUEsaUVBQWlFO0FBQ2pFLFNBQVNDLHVCQUF1QmpCLFdBQXNDO0lBQ3BFLElBQUksQ0FBQ2IsdUJBQXVCLENBQUNFLG1CQUFtQjtRQUM5Q047UUFDQW1DLGNBQUFBLFVBQVUsQ0FBQ0MsU0FBUztRQUNwQkMsQ0FBQUEsR0FBQUEsa0JBQUFBLE9BQUFBLEVBQWlCcEIsYUFBYSxFQUFFLEVBQUUxQiwwQkFBMkJILEtBQUtDLEdBQUc7UUFDckU7SUFDRjtJQUVBLFNBQVNpRCxtQkFDUHRCLEdBQVEsRUFDUnVCLGNBQTBDO1FBRTFDLElBQUl2QixPQUFPWSxxQkFBQUEsbUJBQW1CLENBQUNELGVBQWUsSUFBSVksa0JBQWtCLE1BQU07WUFDeEUsSUFBSXZCLEtBQUs7Z0JBQ1B3QixRQUFRQyxJQUFJLENBQUNDLFFBQUFBLHlCQUF5QjtZQUN4QyxPQUFPLElBQUlkLHFCQUFBQSxtQkFBbUIsQ0FBQ0QsZUFBZSxFQUFFO2dCQUM5Q2EsUUFBUUMsSUFBSSxDQUFDRSxRQUFBQSxvQ0FBb0M7WUFDbkQ7WUFDQTVCLGtCQUFrQkMsS0FBS0M7WUFDdkI7UUFDRjtRQUVBa0IsY0FBQUEsVUFBVSxDQUFDQyxTQUFTO1FBRXBCLElBQUloQyxxQkFBcUI7WUFDdkIsK0RBQStEO1lBQy9EOEIsdUJBQXVCakI7WUFDdkI7UUFDRjtRQUVBa0IsY0FBQUEsVUFBVSxDQUFDUyxTQUFTO1FBQ3BCNUM7UUFDQXFDLENBQUFBLEdBQUFBLGtCQUFBQSxPQUFBQSxFQUNFcEIsYUFDQXNCLGdCQUNBaEQsMEJBQ0FILEtBQUtDLEdBQUc7UUFHVixJQUFJSSxLQUE0QixFQUFFLEVBT2pDO0lBQ0g7SUFFQSwyREFBMkQ7SUFDM0RjLFVBQVUsQ0FDUHlDLEtBQUssQ0FBQyxhQUFhLEdBQUcsT0FDdEJDLElBQUksQ0FBQyxDQUFDVjtRQUNMLElBQUlBLGtCQUFrQixNQUFNO1lBQzFCLE9BQU87UUFDVDtRQUVBLDBFQUEwRTtRQUMxRSxtRUFBbUU7UUFDbkUseUdBQXlHO1FBQ3pHSixjQUFBQSxVQUFVLENBQUNlLGVBQWU7UUFDMUIsMkRBQTJEO1FBQzNELE9BQU8zQyxVQUFVLENBQUM0QyxLQUFLO0lBQ3pCLEdBQ0NGLElBQUksQ0FDSCxDQUFDVjtRQUNDRCxtQkFBbUIsTUFBTUM7SUFDM0IsR0FDQSxDQUFDdkI7UUFDQ3NCLG1CQUFtQnRCLEtBQUs7SUFDMUI7QUFFTjtBQUVBLHlEQUF5RCxHQUN6RCxTQUFTb0MsZUFDUEMsR0FBcUIsRUFDckJwQyxXQUFzQyxFQUN0Q3FDLHVCQUE2RCxFQUM3REMsTUFBb0MsRUFDcENDLGlCQUE0QyxFQUM1Q0MsV0FBc0M7SUFFdEMsSUFBSSxDQUFFLGFBQVlKLEdBQUFBLENBQUUsRUFBSTtRQUN0QjtJQUNGO0lBRUEsU0FBU0ssYUFBYUMsTUFBOEI7UUFDbEQsOEJBQThCO1FBQzlCLE1BQU1DLFlBQVlDLENBQUFBLEdBQUFBLHVCQUFBQSxPQUFBQSxFQUFzQjtZQUN0Q0YsUUFBUUE7WUFDUkcsVUFBVSxFQUFFO1FBQ2Q7UUFFQSw2QkFBNkI7UUFDN0IzQixjQUFBQSxVQUFVLENBQUM0QixZQUFZLENBQUNILFVBQVVELE1BQU0sQ0FBQyxFQUFFO1FBRTNDLGdDQUFnQztRQUNoQyxJQUFLLElBQUlLLElBQUksR0FBR0EsSUFBSUosVUFBVUQsTUFBTSxDQUFDTSxNQUFNLEVBQUVELElBQUs7WUFDaER4QixRQUFRMEIsS0FBSyxDQUFDQyxDQUFBQSxHQUFBQSxXQUFBQSxPQUFBQSxFQUFVUCxVQUFVRCxNQUFNLENBQUNLLEVBQUU7UUFDN0M7UUFFQSxnQ0FBZ0M7UUFDaEMsMENBQTBDO1FBQzFDLElBQUl2RSxLQUE0QixFQUFFLEVBS2pDO0lBQ0g7SUFFQSxTQUFTMkU7UUFDUCxJQUFJM0UsS0FBcUIsRUFBRSxFQWExQixNQUFNO1lBQ0x5Qyx1QkFBdUJqQjtRQUN6QjtJQUNGO0lBRUEsT0FBUW9DLElBQUlxQixNQUFNO1FBQ2hCLEtBQUtDLGtCQUFBQSwyQkFBMkIsQ0FBQ0MsWUFBWTtZQUFFO2dCQUM3QyxJQUFJbkYsSUFBZ0MsRUFBRTtvQkFDcEMsSUFBSStELG1CQUFtQjt3QkFDckJBLGtCQUFrQnNCLE9BQU8sR0FBR3pCLElBQUkwQixJQUFJO3dCQUVwQyw4Q0FBOEM7d0JBQzlDLDBEQUEwRDt3QkFDMUQsMkRBQTJEO3dCQUMzRCx5QkFBeUI7d0JBQ3pCLElBQUt0QixZQUFZcUIsT0FBTyxJQUFlekIsSUFBSTBCLElBQUksRUFBRTs0QkFDL0M1QyxjQUFBQSxVQUFVLENBQUM2QyxpQkFBaUIsQ0FBQzt3QkFDL0IsT0FBTzs0QkFDTDdDLGNBQUFBLFVBQVUsQ0FBQzZDLGlCQUFpQixDQUFDO3dCQUMvQjtvQkFDRjtnQkFDRjtnQkFDQTtZQUNGO1FBQ0EsS0FBS0wsa0JBQUFBLDJCQUEyQixDQUFDTSxRQUFRO1lBQUU7Z0JBQ3pDOUMsY0FBQUEsVUFBVSxDQUFDK0MscUJBQXFCO2dCQUVoQyxJQUFJekYsS0FBcUIsRUFBRSxFQUUxQixNQUFNO29CQUNMRiwyQkFBMkJILEtBQUtDLEdBQUc7b0JBQ25DWTtvQkFDQXVDLFFBQVE0QyxHQUFHLENBQUM7Z0JBQ2Q7Z0JBQ0E7WUFDRjtRQUNBLEtBQUtULGtCQUFBQSwyQkFBMkIsQ0FBQ1UsS0FBSztRQUN0QyxLQUFLVixrQkFBQUEsMkJBQTJCLENBQUNXLElBQUk7WUFBRTtnQkFDckNuRCxjQUFBQSxVQUFVLENBQUNvRCxxQkFBcUI7Z0JBRWhDLElBQUlsQyxJQUFJbEQsSUFBSSxFQUFFO29CQUNaRCxvQkFBb0JtRCxJQUFJbEQsSUFBSTtnQkFDOUI7Z0JBRUEsTUFBTSxFQUFFd0QsTUFBTSxFQUFFRyxRQUFRLEVBQUUsR0FBR1Q7Z0JBRTdCLHlDQUF5QztnQkFDekMsSUFBSSxpQkFBaUJBLEtBQUtsQixjQUFBQSxVQUFVLENBQUNxRCxhQUFhLENBQUNuQyxJQUFJb0MsV0FBVztnQkFDbEUsSUFBSSxXQUFXcEMsT0FBT0EsSUFBSXFDLEtBQUssRUFBRXZELGNBQUFBLFVBQVUsQ0FBQ3dELFdBQVcsQ0FBQ3RDLElBQUlxQyxLQUFLO2dCQUNqRSxJQUFJLGtCQUFrQnJDLEtBQUtsQixjQUFBQSxVQUFVLENBQUN5RCxjQUFjLENBQUN2QyxJQUFJd0MsWUFBWTtnQkFFckUsTUFBTUMsWUFBWUMsUUFBUXBDLFVBQVVBLE9BQU9NLE1BQU07Z0JBQ2pELGtFQUFrRTtnQkFDbEUsSUFBSTZCLFdBQVc7b0JBQ2I3RSxZQUNFTyxLQUFLQyxTQUFTLENBQUM7d0JBQ2JDLE9BQU87d0JBQ1BzRSxZQUFZckMsT0FBT00sTUFBTTt3QkFDekJnQyxVQUFVakg7b0JBQ1o7b0JBR0YwRSxhQUFhQztvQkFDYjtnQkFDRjtnQkFFQSxNQUFNdUMsY0FBY0gsUUFBUWpDLFlBQVlBLFNBQVNHLE1BQU07Z0JBQ3ZELElBQUlpQyxhQUFhO29CQUNmakYsWUFDRU8sS0FBS0MsU0FBUyxDQUFDO3dCQUNiQyxPQUFPO3dCQUNQeUUsY0FBY3JDLFNBQVNHLE1BQU07d0JBQzdCZ0MsVUFBVWpIO29CQUNaO29CQUdGLGlDQUFpQztvQkFDakMsTUFBTW9ILG9CQUFvQnZDLENBQUFBLEdBQUFBLHVCQUFBQSxPQUFBQSxFQUFzQjt3QkFDOUNDLFVBQVVBO3dCQUNWSCxRQUFRLEVBQUU7b0JBQ1o7b0JBRUEsSUFBSyxJQUFJSyxJQUFJLEdBQUdBLElBQUlvQyxrQkFBa0J0QyxRQUFRLENBQUNHLE1BQU0sRUFBRUQsSUFBSzt3QkFDMUQsSUFBSUEsTUFBTSxHQUFHOzRCQUNYeEIsUUFBUUMsSUFBSSxDQUNWLCtDQUNFOzRCQUVKO3dCQUNGO3dCQUNBRCxRQUFRQyxJQUFJLENBQUMwQixDQUFBQSxHQUFBQSxXQUFBQSxPQUFBQSxFQUFVaUMsa0JBQWtCdEMsUUFBUSxDQUFDRSxFQUFFO29CQUN0RDtnQkFFQSx1SEFBdUg7Z0JBQ3pIO2dCQUVBL0MsWUFDRU8sS0FBS0MsU0FBUyxDQUFDO29CQUNiQyxPQUFPO29CQUNQdUUsVUFBVWpIO2dCQUNaO2dCQUdGLElBQUlxRSxJQUFJcUIsTUFBTSxLQUFLQyxrQkFBQUEsMkJBQTJCLENBQUNVLEtBQUssRUFBRTtvQkFDcERqQjtnQkFDRjtnQkFDQTtZQUNGO1FBQ0EsS0FBS08sa0JBQUFBLDJCQUEyQixDQUFDMEIsbUJBQW1CO1lBQUU7Z0JBQ3BEL0Msd0JBQXdCO29CQUN0QmdELE1BQU0zQixrQkFBQUEsMkJBQTJCLENBQUMwQixtQkFBbUI7b0JBQ3JEdEIsTUFBTTt3QkFDSndCLFdBQVdsRCxJQUFJMEIsSUFBSSxDQUFDd0IsU0FBUztvQkFDL0I7Z0JBQ0Y7Z0JBQ0E7WUFDRjtRQUNBLEtBQUs1QixrQkFBQUEsMkJBQTJCLENBQUM2QixpQkFBaUI7WUFBRTtnQkFDbERoSCxhQUFjaUgsa0JBQWtCLENBQUNwRDtnQkFDakNsQixjQUFBQSxVQUFVLENBQUNlLGVBQWU7Z0JBQzFCSSx3QkFBd0I7b0JBQ3RCZ0QsTUFBTTNCLGtCQUFBQSwyQkFBMkIsQ0FBQzZCLGlCQUFpQjtvQkFDbkR6QixNQUFNMUIsSUFBSTBCLElBQUk7Z0JBQ2hCO2dCQUNBLElBQUluRCxxQkFBQUEsbUJBQW1CLENBQUNELGVBQWUsRUFBRTtvQkFDdkNhLFFBQVFDLElBQUksQ0FBQ0UsUUFBQUEsb0NBQW9DO29CQUNqRDVCLGtCQUFrQixNQUFNRTtnQkFDMUI7Z0JBQ0FrQixjQUFBQSxVQUFVLENBQUNTLFNBQVM7Z0JBQ3BCO1lBQ0Y7UUFDQSx1REFBdUQ7UUFDdkQsS0FBSytCLGtCQUFBQSwyQkFBMkIsQ0FBQytCLHdCQUF3QjtZQUFFO2dCQUN6RGxILGdCQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxhQUFjbUgsd0JBQXdCO2dCQUN0QzFGLFlBQ0VPLEtBQUtDLFNBQVMsQ0FBQztvQkFDYkMsT0FBTztvQkFDUHVFLFVBQVVqSDtvQkFDVm1CLE1BQU1rRCxJQUFJbEQsSUFBSTtnQkFDaEI7Z0JBR0YsMEVBQTBFO2dCQUMxRSx1Q0FBdUM7Z0JBQ3ZDeUcsU0FBU0MsTUFBTSxHQUFNQyxrQkFBQUEsNEJBQTRCLEdBQUMsTUFBR3pELElBQUlsRCxJQUFJO2dCQUU3RCxJQUFJeUIscUJBQUFBLG1CQUFtQixDQUFDRCxlQUFlLEVBQUU7b0JBQ3ZDLElBQUlyQyxXQUFXO29CQUNmQSxZQUFZO29CQUNaLE9BQU95QyxPQUFPQyxRQUFRLENBQUNDLE1BQU07Z0JBQy9CO2dCQUVBOEUsQ0FBQUEsR0FBQUEsT0FBQUEsZUFBQUEsRUFBZ0I7b0JBQ2R4RCxPQUFPeUQsVUFBVTtvQkFDakI3RSxjQUFBQSxVQUFVLENBQUNTLFNBQVM7Z0JBQ3RCO2dCQUVBLElBQUluRCxLQUE0QixFQUFFLEVBS2pDO2dCQUVEO1lBQ0Y7UUFDQSxLQUFLa0Ysa0JBQUFBLDJCQUEyQixDQUFDc0MsV0FBVztZQUFFO2dCQUM1Q3pILGdCQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxhQUFjMEgsWUFBWTtnQkFDMUJqRyxZQUNFTyxLQUFLQyxTQUFTLENBQUM7b0JBQ2JDLE9BQU87b0JBQ1B1RSxVQUFVakg7Z0JBQ1o7Z0JBRUYsSUFBSU0sV0FBVztnQkFDZkEsWUFBWTtnQkFDWixPQUFPeUMsT0FBT0MsUUFBUSxDQUFDQyxNQUFNO1lBQy9CO1FBQ0EsS0FBSzBDLGtCQUFBQSwyQkFBMkIsQ0FBQ3dDLFVBQVU7UUFDM0MsS0FBS3hDLGtCQUFBQSwyQkFBMkIsQ0FBQ3lDLFlBQVk7WUFBRTtnQkFDN0M1SCxnQkFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsYUFBYzZILGVBQWU7Z0JBQzdCLHFGQUFxRjtnQkFDckYsT0FBTzlELE9BQU95RCxVQUFVO1lBQzFCO1FBQ0EsS0FBS3JDLGtCQUFBQSwyQkFBMkIsQ0FBQzJDLFlBQVk7WUFBRTtnQkFDN0MsTUFBTSxFQUFFQyxTQUFTLEVBQUUsR0FBR2xFO2dCQUN0QixJQUFJa0UsV0FBVztvQkFDYixNQUFNLEVBQUVoRyxPQUFPLEVBQUVKLEtBQUssRUFBRSxHQUFHSyxLQUFLZ0csS0FBSyxDQUFDRDtvQkFDdEMsTUFBTXJELFFBQVEscUJBQWtCLENBQWxCLElBQUl1RCxNQUFNbEcsVUFBVjsrQkFBQTtvQ0FBQTtzQ0FBQTtvQkFBaUI7b0JBQy9CMkMsTUFBTS9DLEtBQUssR0FBR0E7b0JBQ2R1QyxhQUFhO3dCQUFDUTtxQkFBTTtnQkFDdEI7Z0JBQ0E7WUFDRjtRQUNBLEtBQUtTLGtCQUFBQSwyQkFBMkIsQ0FBQytDLHlCQUF5QjtZQUFFO2dCQUMxRDtZQUNGO1FBQ0E7WUFBUyxDQUNUO0lBQ0Y7QUFDRjtBQUVlLG1CQUFtQixLQVFqQztJQVJpQyxNQUNoQ0MsV0FBVyxFQUNYQyxRQUFRLEVBQ1JDLFdBQVcsRUFLWixHQVJpQztJQVNoQ0MsQ0FBQUEsR0FBQUEsaUJBQUFBLGVBQWUsRUFBQzNGLGNBQUFBLFVBQVUsQ0FBQzRGLGdCQUFnQixFQUFFNUYsY0FBQUEsVUFBVSxDQUFDNkYsb0JBQW9CO0lBRTVFLE1BQU1DLGVBQWVDLENBQUFBLEdBQUFBLGNBQUFBLFlBQUFBLEVBQWFQO0lBRWxDUSxDQUFBQSxHQUFBQSxjQUFBQSxnQkFBQUEsRUFBaUJGO0lBQ2pCLE1BQU1oSCxjQUFjbUgsQ0FBQUEsR0FBQUEsY0FBQUEsY0FBYyxFQUFDSDtJQUNuQ0ksQ0FBQUEsR0FBQUEsc0JBQUFBLG9CQUFBQSxFQUFxQko7SUFDckIsTUFBTTNFLDBCQUEwQmdGLENBQUFBLEdBQUFBLGNBQUFBLFlBQUFBLEVBQWFySCxhQUFhLENBQUNELE1BQ3pERCxrQkFBa0JDLEtBQUtDO0lBR3pCLE1BQU1zQyxTQUFTZ0YsQ0FBQUEsR0FBQUEsWUFBQUEsU0FBQUE7SUFFZiw4RUFBOEU7SUFDOUUsbUVBQW1FO0lBQ25FLE1BQU1DLFdBQVdDLENBQUFBLEdBQUFBLHFCQUFBQSxvQkFBb0I7SUFDckMsTUFBTWpGLG9CQUFvQmtGLENBQUFBLEdBQUFBLE9BQUFBLE1BQUFBLEVBQXVDLENBQUM7SUFDbEUsTUFBTWpGLGNBQWNpRixDQUFBQSxHQUFBQSxPQUFBQSxNQUFBQSxFQUFPRjtJQUUzQixJQUFJL0ksSUFBZ0MsRUFBRTtRQUNwQywyREFBMkQ7UUFDM0QsbUVBQW1FO1FBQ25FLHNEQUFzRDtRQUN0RGtKLENBQUFBLEdBQUFBLE9BQUFBLFNBQVMsRUFBQztZQUNSbEYsWUFBWXFCLE9BQU8sR0FBRzBEO1lBRXRCLE1BQU1JLGlCQUFpQnBGLGtCQUFrQnNCLE9BQU87WUFFaEQsSUFBSThELGdCQUFnQjtnQkFDbEIsSUFBSUosWUFBWUEsWUFBWUksZ0JBQWdCO29CQUMxQyxJQUFJO3dCQUNGekcsY0FBQUEsVUFBVSxDQUFDNkMsaUJBQWlCLENBQUM7b0JBQy9CLEVBQUUsT0FBTzZELFFBQVE7d0JBQ2YsSUFBSXRILFVBQVU7d0JBRWQsSUFBSXNILGtCQUFrQkMsY0FBYztnQ0FFeEJEOzRCQURWLHNFQUFzRTs0QkFDdEV0SCxVQUFVc0gsQ0FBQUEsZ0JBQUFBLE9BQU8xSCxLQUFBQSxLQUFLLE9BQVowSCxnQkFBZ0JBLE9BQU90SCxPQUFPO3dCQUMxQyxPQUFPLElBQUlzSCxrQkFBa0JwQixPQUFPO2dDQUNhb0I7NEJBQS9DdEgsVUFBVSxZQUFZc0gsT0FBT3RILE9BQU8sR0FBRyxPQUFRc0gsQ0FBQUEsa0JBQUFBLE9BQU8xSCxLQUFBQSxLQUFLLE9BQVowSCxpQkFBZ0IsR0FBQzt3QkFDbEUsT0FBTzs0QkFDTHRILFVBQVUsMkJBQTJCc0g7d0JBQ3ZDO3dCQUVBckcsUUFBUUMsSUFBSSxDQUFDLFdBQVdsQjtvQkFDMUI7Z0JBQ0YsT0FBTztvQkFDTFksY0FBQUEsVUFBVSxDQUFDNkMsaUJBQWlCLENBQUM7Z0JBQy9CO1lBQ0Y7UUFDRixHQUFHO1lBQUN3RDtTQUFTO0lBQ2Y7SUFFQUcsQ0FBQUEsR0FBQUEsT0FBQUEsU0FBQUEsRUFBVTtRQUNSLE1BQU1JLFlBQVlkLGFBQWFuRCxPQUFPO1FBQ3RDLElBQUksQ0FBQ2lFLFdBQVc7UUFFaEIsTUFBTW5JLFVBQVUsQ0FBQ2M7WUFDZixJQUFJO2dCQUNGLE1BQU0yQixNQUFNN0IsS0FBS2dHLEtBQUssQ0FBQzlGLE1BQU1xRCxJQUFJO2dCQUNqQzNCLGVBQ0VDLEtBQ0FwQyxhQUNBcUMseUJBQ0FDLFFBQ0FDLG1CQUNBQztZQUVKLEVBQUUsT0FBT3pDLEtBQWM7Z0JBQ3JCZ0ksQ0FBQUEsR0FBQUEsUUFBQUEsdUJBQUFBLEVBQXdCdEgsT0FBT1Y7WUFDakM7UUFDRjtRQUVBK0gsVUFBVUUsZ0JBQWdCLENBQUMsV0FBV3JJO1FBQ3RDLE9BQU8sSUFBTW1JLFVBQVVHLG1CQUFtQixDQUFDLFdBQVd0STtJQUN4RCxHQUFHO1FBQ0RLO1FBQ0FzQztRQUNBMEU7UUFDQTNFO1FBQ0FFO0tBQ0Q7SUFDRCxxQkFDRSxzQkFBQzJGLDRCQUFBQSwwQkFBMEI7UUFBQ3RCLGFBQWFBOzswQkFDdkMscUJBQUN1QixxQkFBQUEsbUJBQW1CO2dCQUFDQyxpQkFBaUJsSCxjQUFBQSxVQUFVLENBQUNtSCxnQkFBZ0I7O1lBQ2hFMUI7OztBQUdQO0tBakd3Qi9JIiwic291cmNlcyI6WyIvc3JjL2NsaWVudC9kZXYvaG90LXJlbG9hZGVyL2FwcC9ob3QtcmVsb2FkZXItYXBwLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIndlYnBhY2svbW9kdWxlLmQudHNcIiAvPlxuXG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCBzdGFydFRyYW5zaXRpb24sIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHN0cmlwQW5zaSBmcm9tICduZXh0L2Rpc3QvY29tcGlsZWQvc3RyaXAtYW5zaSdcbmltcG9ydCBmb3JtYXRXZWJwYWNrTWVzc2FnZXMgZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2xpYi9mb3JtYXQtd2VicGFjay1tZXNzYWdlcydcbmltcG9ydCB7IHVzZVJvdXRlciB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvbmF2aWdhdGlvbidcbmltcG9ydCB7XG4gIFJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQUQsXG4gIFJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQURfRlJPTV9FUlJPUixcbiAgcmVwb3J0SW52YWxpZEhtck1lc3NhZ2UsXG59IGZyb20gJy4uL3NoYXJlZCdcbmltcG9ydCB7IGRpc3BhdGNoZXIgfSBmcm9tICduZXh0L2Rpc3QvY29tcGlsZWQvbmV4dC1kZXZ0b29scydcbmltcG9ydCB7IFJlcGxheVNzck9ubHlFcnJvcnMgfSBmcm9tICcuLi8uLi8uLi8uLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvZXJyb3JzL3JlcGxheS1zc3Itb25seS1lcnJvcnMnXG5pbXBvcnQgeyBBcHBEZXZPdmVybGF5RXJyb3JCb3VuZGFyeSB9IGZyb20gJy4uLy4uLy4uLy4uL25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9hcHAtZGV2LW92ZXJsYXktZXJyb3ItYm91bmRhcnknXG5pbXBvcnQgeyB1c2VFcnJvckhhbmRsZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvZXJyb3JzL3VzZS1lcnJvci1oYW5kbGVyJ1xuaW1wb3J0IHsgUnVudGltZUVycm9ySGFuZGxlciB9IGZyb20gJy4uLy4uL3J1bnRpbWUtZXJyb3ItaGFuZGxlcidcbmltcG9ydCB7XG4gIHVzZVNlbmRNZXNzYWdlLFxuICB1c2VUdXJib3BhY2ssXG4gIHVzZVdlYnNvY2tldCxcbiAgdXNlV2Vic29ja2V0UGluZyxcbn0gZnJvbSAnLi91c2Utd2Vic29ja2V0J1xuaW1wb3J0IHsgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmVyL2Rldi9ob3QtcmVsb2FkZXItdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG4gIEhNUl9BQ1RJT05fVFlQRVMsXG4gIFR1cmJvcGFja01zZ1RvQnJvd3Nlcixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmVyL2Rldi9ob3QtcmVsb2FkZXItdHlwZXMnXG5pbXBvcnQgeyB1c2VVbnRyYWNrZWRQYXRobmFtZSB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvbmF2aWdhdGlvbi11bnRyYWNrZWQnXG5pbXBvcnQgcmVwb3J0SG1yTGF0ZW5jeSBmcm9tICcuLi8uLi9yZXBvcnQtaG1yLWxhdGVuY3knXG5pbXBvcnQgeyBUdXJib3BhY2tIbXIgfSBmcm9tICcuLi90dXJib3BhY2staG90LXJlbG9hZGVyLWNvbW1vbidcbmltcG9ydCB7IE5FWFRfSE1SX1JFRlJFU0hfSEFTSF9DT09LSUUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2FwcC1yb3V0ZXItaGVhZGVycydcbmltcG9ydCB0eXBlIHsgR2xvYmFsRXJyb3JTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvYXBwLXJvdXRlci1pbnN0YW5jZSdcbmltcG9ydCB7IHVzZUZvcndhcmRDb25zb2xlTG9nIH0gZnJvbSAnLi4vLi4vLi4vLi4vbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy91c2UtZm9yd2FyZC1jb25zb2xlLWxvZydcblxubGV0IG1vc3RSZWNlbnRDb21waWxhdGlvbkhhc2g6IGFueSA9IG51bGxcbmxldCBfX25leHREZXZDbGllbnRJZCA9IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIDEwMCArIERhdGUubm93KCkpXG5sZXQgcmVsb2FkaW5nID0gZmFsc2VcbmxldCB3ZWJwYWNrU3RhcnRNc1NpbmNlRXBvY2g6IG51bWJlciB8IG51bGwgPSBudWxsXG5jb25zdCB0dXJib3BhY2tIbXI6IFR1cmJvcGFja0htciB8IG51bGwgPSBwcm9jZXNzLmVudi5UVVJCT1BBQ0tcbiAgPyBuZXcgVHVyYm9wYWNrSG1yKClcbiAgOiBudWxsXG5cbmxldCBwZW5kaW5nSG90VXBkYXRlV2VicGFjayA9IFByb21pc2UucmVzb2x2ZSgpXG5sZXQgcmVzb2x2ZVBlbmRpbmdIb3RVcGRhdGVXZWJwYWNrOiAoKSA9PiB2b2lkID0gKCkgPT4ge31cbmZ1bmN0aW9uIHNldFBlbmRpbmdIb3RVcGRhdGVXZWJwYWNrKCkge1xuICBwZW5kaW5nSG90VXBkYXRlV2VicGFjayA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmVzb2x2ZVBlbmRpbmdIb3RVcGRhdGVXZWJwYWNrID0gKCkgPT4ge1xuICAgICAgcmVzb2x2ZSgpXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd2FpdEZvcldlYnBhY2tSdW50aW1lSG90VXBkYXRlKCkge1xuICByZXR1cm4gcGVuZGluZ0hvdFVwZGF0ZVdlYnBhY2tcbn1cblxuLy8gVGhlcmUgaXMgYSBuZXdlciB2ZXJzaW9uIG9mIHRoZSBjb2RlIGF2YWlsYWJsZS5cbmZ1bmN0aW9uIGhhbmRsZUF2YWlsYWJsZUhhc2goaGFzaDogc3RyaW5nKSB7XG4gIC8vIFVwZGF0ZSBsYXN0IGtub3duIGNvbXBpbGF0aW9uIGhhc2guXG4gIG1vc3RSZWNlbnRDb21waWxhdGlvbkhhc2ggPSBoYXNoXG59XG5cbi8qKlxuICogSXMgdGhlcmUgYSBuZXdlciB2ZXJzaW9uIG9mIHRoaXMgY29kZSBhdmFpbGFibGU/XG4gKiBGb3Igd2VicGFjazogQ2hlY2sgaWYgdGhlIGhhc2ggY2hhbmdlZCBjb21wYXJlZCB0byBfX3dlYnBhY2tfaGFzaF9fXG4gKiBGb3IgVHVyYm9wYWNrOiBBbHdheXMgdHJ1ZSBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBfX3dlYnBhY2tfaGFzaF9fXG4gKi9cbmZ1bmN0aW9uIGlzVXBkYXRlQXZhaWxhYmxlKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuVFVSQk9QQUNLKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8qIGdsb2JhbHMgX193ZWJwYWNrX2hhc2hfXyAqL1xuICAvLyBfX3dlYnBhY2tfaGFzaF9fIGlzIHRoZSBoYXNoIG9mIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uLlxuICAvLyBJdCdzIGEgZ2xvYmFsIHZhcmlhYmxlIGluamVjdGVkIGJ5IFdlYnBhY2suXG4gIHJldHVybiBtb3N0UmVjZW50Q29tcGlsYXRpb25IYXNoICE9PSBfX3dlYnBhY2tfaGFzaF9fXG59XG5cbi8vIFdlYnBhY2sgZGlzYWxsb3dzIHVwZGF0ZXMgaW4gb3RoZXIgc3RhdGVzLlxuZnVuY3Rpb24gY2FuQXBwbHlVcGRhdGVzKCkge1xuICByZXR1cm4gbW9kdWxlLmhvdC5zdGF0dXMoKSA9PT0gJ2lkbGUnXG59XG5mdW5jdGlvbiBhZnRlckFwcGx5VXBkYXRlcyhmbjogYW55KSB7XG4gIGlmIChjYW5BcHBseVVwZGF0ZXMoKSkge1xuICAgIGZuKClcbiAgfSBlbHNlIHtcbiAgICBmdW5jdGlvbiBoYW5kbGVyKHN0YXR1czogYW55KSB7XG4gICAgICBpZiAoc3RhdHVzID09PSAnaWRsZScpIHtcbiAgICAgICAgbW9kdWxlLmhvdC5yZW1vdmVTdGF0dXNIYW5kbGVyKGhhbmRsZXIpXG4gICAgICAgIGZuKClcbiAgICAgIH1cbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hZGRTdGF0dXNIYW5kbGVyKGhhbmRsZXIpXG4gIH1cbn1cblxuZnVuY3Rpb24gcGVyZm9ybUZ1bGxSZWxvYWQoZXJyOiBhbnksIHNlbmRNZXNzYWdlOiBhbnkpIHtcbiAgY29uc3Qgc3RhY2tUcmFjZSA9XG4gICAgZXJyICYmXG4gICAgKChlcnIuc3RhY2sgJiYgZXJyLnN0YWNrLnNwbGl0KCdcXG4nKS5zbGljZSgwLCA1KS5qb2luKCdcXG4nKSkgfHxcbiAgICAgIGVyci5tZXNzYWdlIHx8XG4gICAgICBlcnIgKyAnJylcblxuICBzZW5kTWVzc2FnZShcbiAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBldmVudDogJ2NsaWVudC1mdWxsLXJlbG9hZCcsXG4gICAgICBzdGFja1RyYWNlLFxuICAgICAgaGFkUnVudGltZUVycm9yOiAhIVJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yLFxuICAgICAgZGVwZW5kZW5jeUNoYWluOiBlcnIgPyBlcnIuZGVwZW5kZW5jeUNoYWluIDogdW5kZWZpbmVkLFxuICAgIH0pXG4gIClcblxuICBpZiAocmVsb2FkaW5nKSByZXR1cm5cbiAgcmVsb2FkaW5nID0gdHJ1ZVxuICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcbn1cblxuLy8gQXR0ZW1wdCB0byB1cGRhdGUgY29kZSBvbiB0aGUgZmx5LCBmYWxsIGJhY2sgdG8gYSBoYXJkIHJlbG9hZC5cbmZ1bmN0aW9uIHRyeUFwcGx5VXBkYXRlc1dlYnBhY2soc2VuZE1lc3NhZ2U6IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQpIHtcbiAgaWYgKCFpc1VwZGF0ZUF2YWlsYWJsZSgpIHx8ICFjYW5BcHBseVVwZGF0ZXMoKSkge1xuICAgIHJlc29sdmVQZW5kaW5nSG90VXBkYXRlV2VicGFjaygpXG4gICAgZGlzcGF0Y2hlci5vbkJ1aWxkT2soKVxuICAgIHJlcG9ydEhtckxhdGVuY3koc2VuZE1lc3NhZ2UsIFtdLCB3ZWJwYWNrU3RhcnRNc1NpbmNlRXBvY2ghLCBEYXRlLm5vdygpKVxuICAgIHJldHVyblxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlQXBwbHlVcGRhdGVzKFxuICAgIGVycjogYW55LFxuICAgIHVwZGF0ZWRNb2R1bGVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHwgbnVsbFxuICApIHtcbiAgICBpZiAoZXJyIHx8IFJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yIHx8IHVwZGF0ZWRNb2R1bGVzID09IG51bGwpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQUQpXG4gICAgICB9IGVsc2UgaWYgKFJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEX0ZST01fRVJST1IpXG4gICAgICB9XG4gICAgICBwZXJmb3JtRnVsbFJlbG9hZChlcnIsIHNlbmRNZXNzYWdlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZGlzcGF0Y2hlci5vbkJ1aWxkT2soKVxuXG4gICAgaWYgKGlzVXBkYXRlQXZhaWxhYmxlKCkpIHtcbiAgICAgIC8vIFdoaWxlIHdlIHdlcmUgdXBkYXRpbmcsIHRoZXJlIHdhcyBhIG5ldyB1cGRhdGUhIERvIGl0IGFnYWluLlxuICAgICAgdHJ5QXBwbHlVcGRhdGVzV2VicGFjayhzZW5kTWVzc2FnZSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGRpc3BhdGNoZXIub25SZWZyZXNoKClcbiAgICByZXNvbHZlUGVuZGluZ0hvdFVwZGF0ZVdlYnBhY2soKVxuICAgIHJlcG9ydEhtckxhdGVuY3koXG4gICAgICBzZW5kTWVzc2FnZSxcbiAgICAgIHVwZGF0ZWRNb2R1bGVzLFxuICAgICAgd2VicGFja1N0YXJ0TXNTaW5jZUVwb2NoISxcbiAgICAgIERhdGUubm93KClcbiAgICApXG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX1RFU1RfTU9ERSkge1xuICAgICAgYWZ0ZXJBcHBseVVwZGF0ZXMoKCkgPT4ge1xuICAgICAgICBpZiAoc2VsZi5fX05FWFRfSE1SX0NCKSB7XG4gICAgICAgICAgc2VsZi5fX05FWFRfSE1SX0NCKClcbiAgICAgICAgICBzZWxmLl9fTkVYVF9ITVJfQ0IgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly93ZWJwYWNrLmpzLm9yZy9hcGkvaG90LW1vZHVsZS1yZXBsYWNlbWVudC8jY2hlY2tcbiAgbW9kdWxlLmhvdFxuICAgIC5jaGVjaygvKiBhdXRvQXBwbHkgKi8gZmFsc2UpXG4gICAgLnRoZW4oKHVwZGF0ZWRNb2R1bGVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHwgbnVsbCkgPT4ge1xuICAgICAgaWYgKHVwZGF0ZWRNb2R1bGVzID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBoYW5kbGUgYW4gdXBkYXRlLCBldmVuIGlmIHVwZGF0ZWRNb2R1bGVzIGlzIGVtcHR5IChidXRcbiAgICAgIC8vIG5vbi1udWxsKSBmb3IgYW55IHJlYXNvbi4gVGhhdCdzIHdoYXQgd2VicGFjayB3b3VsZCBub3JtYWxseSBkbzpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrL3dlYnBhY2svYmxvYi8zYWE2YjZiYzNhNjQvbGliL2htci9Ib3RNb2R1bGVSZXBsYWNlbWVudC5ydW50aW1lLmpzI0wyOTYtTDI5OFxuICAgICAgZGlzcGF0Y2hlci5vbkJlZm9yZVJlZnJlc2goKVxuICAgICAgLy8gaHR0cHM6Ly93ZWJwYWNrLmpzLm9yZy9hcGkvaG90LW1vZHVsZS1yZXBsYWNlbWVudC8jYXBwbHlcbiAgICAgIHJldHVybiBtb2R1bGUuaG90LmFwcGx5KClcbiAgICB9KVxuICAgIC50aGVuKFxuICAgICAgKHVwZGF0ZWRNb2R1bGVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHwgbnVsbCkgPT4ge1xuICAgICAgICBoYW5kbGVBcHBseVVwZGF0ZXMobnVsbCwgdXBkYXRlZE1vZHVsZXMpXG4gICAgICB9LFxuICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgIGhhbmRsZUFwcGx5VXBkYXRlcyhlcnIsIG51bGwpXG4gICAgICB9XG4gICAgKVxufVxuXG4vKiogSGFuZGxlcyBtZXNzYWdlcyBmcm9tIHRoZSBzZXJ2ZXIgZm9yIHRoZSBBcHAgUm91dGVyLiAqL1xuZnVuY3Rpb24gcHJvY2Vzc01lc3NhZ2UoXG4gIG9iajogSE1SX0FDVElPTl9UWVBFUyxcbiAgc2VuZE1lc3NhZ2U6IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQsXG4gIHByb2Nlc3NUdXJib3BhY2tNZXNzYWdlOiAobXNnOiBUdXJib3BhY2tNc2dUb0Jyb3dzZXIpID0+IHZvaWQsXG4gIHJvdXRlcjogUmV0dXJuVHlwZTx0eXBlb2YgdXNlUm91dGVyPixcbiAgYXBwSXNyTWFuaWZlc3RSZWY6IFJldHVyblR5cGU8dHlwZW9mIHVzZVJlZj4sXG4gIHBhdGhuYW1lUmVmOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VSZWY+XG4pIHtcbiAgaWYgKCEoJ2FjdGlvbicgaW4gb2JqKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRXJyb3JzKGVycm9yczogUmVhZG9ubHlBcnJheTx1bmtub3duPikge1xuICAgIC8vIFwiTWFzc2FnZVwiIHdlYnBhY2sgbWVzc2FnZXMuXG4gICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0V2VicGFja01lc3NhZ2VzKHtcbiAgICAgIGVycm9yczogZXJyb3JzLFxuICAgICAgd2FybmluZ3M6IFtdLFxuICAgIH0pXG5cbiAgICAvLyBPbmx5IHNob3cgdGhlIGZpcnN0IGVycm9yLlxuICAgIGRpc3BhdGNoZXIub25CdWlsZEVycm9yKGZvcm1hdHRlZC5lcnJvcnNbMF0pXG5cbiAgICAvLyBBbHNvIGxvZyB0aGVtIHRvIHRoZSBjb25zb2xlLlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybWF0dGVkLmVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc29sZS5lcnJvcihzdHJpcEFuc2koZm9ybWF0dGVkLmVycm9yc1tpXSkpXG4gICAgfVxuXG4gICAgLy8gRG8gbm90IGF0dGVtcHQgdG8gcmVsb2FkIG5vdy5cbiAgICAvLyBXZSB3aWxsIHJlbG9hZCBvbiBuZXh0IHN1Y2Nlc3MgaW5zdGVhZC5cbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX1RFU1RfTU9ERSkge1xuICAgICAgaWYgKHNlbGYuX19ORVhUX0hNUl9DQikge1xuICAgICAgICBzZWxmLl9fTkVYVF9ITVJfQ0IoZm9ybWF0dGVkLmVycm9yc1swXSlcbiAgICAgICAgc2VsZi5fX05FWFRfSE1SX0NCID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUhvdFVwZGF0ZSgpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuVFVSQk9QQUNLKSB7XG4gICAgICBjb25zdCBobXJVcGRhdGUgPSB0dXJib3BhY2tIbXIhLm9uQnVpbHQoKVxuICAgICAgaWYgKGhtclVwZGF0ZSAhPSBudWxsKSB7XG4gICAgICAgIHJlcG9ydEhtckxhdGVuY3koXG4gICAgICAgICAgc2VuZE1lc3NhZ2UsXG4gICAgICAgICAgWy4uLmhtclVwZGF0ZS51cGRhdGVkTW9kdWxlc10sXG4gICAgICAgICAgaG1yVXBkYXRlLnN0YXJ0TXNTaW5jZUVwb2NoLFxuICAgICAgICAgIGhtclVwZGF0ZS5lbmRNc1NpbmNlRXBvY2gsXG4gICAgICAgICAgLy8gc3VwcHJlc3MgdGhlIGBjbGllbnQtaG1yLWxhdGVuY3lgIGV2ZW50IGlmIHRoZSB1cGRhdGUgd2FzIGEgbm8tb3A6XG4gICAgICAgICAgaG1yVXBkYXRlLmhhc1VwZGF0ZXNcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgZGlzcGF0Y2hlci5vbkJ1aWxkT2soKVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnlBcHBseVVwZGF0ZXNXZWJwYWNrKHNlbmRNZXNzYWdlKVxuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAob2JqLmFjdGlvbikge1xuICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLklTUl9NQU5JRkVTVDoge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9ERVZfSU5ESUNBVE9SKSB7XG4gICAgICAgIGlmIChhcHBJc3JNYW5pZmVzdFJlZikge1xuICAgICAgICAgIGFwcElzck1hbmlmZXN0UmVmLmN1cnJlbnQgPSBvYmouZGF0YVxuXG4gICAgICAgICAgLy8gaGFuZGxlIGluaXRpYWwgc3RhdHVzIG9uIHJlY2VpdmluZyBtYW5pZmVzdFxuICAgICAgICAgIC8vIG5hdmlnYXRpb24gaXMgaGFuZGxlZCBpbiB1c2VFZmZlY3QgZm9yIHBhdGhuYW1lIGNoYW5nZXNcbiAgICAgICAgICAvLyBhcyB3ZSdsbCByZWNlaXZlIHRoZSB1cGRhdGVkIG1hbmlmZXN0IGJlZm9yZSB1c2VQYXRobmFtZVxuICAgICAgICAgIC8vIHRyaWdnZXJzIGZvciBuZXcgdmFsdWVcbiAgICAgICAgICBpZiAoKHBhdGhuYW1lUmVmLmN1cnJlbnQgYXMgc3RyaW5nKSBpbiBvYmouZGF0YSkge1xuICAgICAgICAgICAgZGlzcGF0Y2hlci5vblN0YXRpY0luZGljYXRvcih0cnVlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaXNwYXRjaGVyLm9uU3RhdGljSW5kaWNhdG9yKGZhbHNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuQlVJTERJTkc6IHtcbiAgICAgIGRpc3BhdGNoZXIuYnVpbGRpbmdJbmRpY2F0b3JTaG93KClcblxuICAgICAgaWYgKHByb2Nlc3MuZW52LlRVUkJPUEFDSykge1xuICAgICAgICB0dXJib3BhY2tIbXIhLm9uQnVpbGRpbmcoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2VicGFja1N0YXJ0TXNTaW5jZUVwb2NoID0gRGF0ZS5ub3coKVxuICAgICAgICBzZXRQZW5kaW5nSG90VXBkYXRlV2VicGFjaygpXG4gICAgICAgIGNvbnNvbGUubG9nKCdbRmFzdCBSZWZyZXNoXSByZWJ1aWxkaW5nJylcbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLkJVSUxUOlxuICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlNZTkM6IHtcbiAgICAgIGRpc3BhdGNoZXIuYnVpbGRpbmdJbmRpY2F0b3JIaWRlKClcblxuICAgICAgaWYgKG9iai5oYXNoKSB7XG4gICAgICAgIGhhbmRsZUF2YWlsYWJsZUhhc2gob2JqLmhhc2gpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgZXJyb3JzLCB3YXJuaW5ncyB9ID0gb2JqXG5cbiAgICAgIC8vIElzIHVuZGVmaW5lZCB3aGVuIGl0J3MgYSAnYnVpbHQnIGV2ZW50XG4gICAgICBpZiAoJ3ZlcnNpb25JbmZvJyBpbiBvYmopIGRpc3BhdGNoZXIub25WZXJzaW9uSW5mbyhvYmoudmVyc2lvbkluZm8pXG4gICAgICBpZiAoJ2RlYnVnJyBpbiBvYmogJiYgb2JqLmRlYnVnKSBkaXNwYXRjaGVyLm9uRGVidWdJbmZvKG9iai5kZWJ1ZylcbiAgICAgIGlmICgnZGV2SW5kaWNhdG9yJyBpbiBvYmopIGRpc3BhdGNoZXIub25EZXZJbmRpY2F0b3Iob2JqLmRldkluZGljYXRvcilcblxuICAgICAgY29uc3QgaGFzRXJyb3JzID0gQm9vbGVhbihlcnJvcnMgJiYgZXJyb3JzLmxlbmd0aClcbiAgICAgIC8vIENvbXBpbGF0aW9uIHdpdGggZXJyb3JzIChlLmcuIHN5bnRheCBlcnJvciBvciBtaXNzaW5nIG1vZHVsZXMpLlxuICAgICAgaWYgKGhhc0Vycm9ycykge1xuICAgICAgICBzZW5kTWVzc2FnZShcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBldmVudDogJ2NsaWVudC1lcnJvcicsXG4gICAgICAgICAgICBlcnJvckNvdW50OiBlcnJvcnMubGVuZ3RoLFxuICAgICAgICAgICAgY2xpZW50SWQ6IF9fbmV4dERldkNsaWVudElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcblxuICAgICAgICBoYW5kbGVFcnJvcnMoZXJyb3JzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFzV2FybmluZ3MgPSBCb29sZWFuKHdhcm5pbmdzICYmIHdhcm5pbmdzLmxlbmd0aClcbiAgICAgIGlmIChoYXNXYXJuaW5ncykge1xuICAgICAgICBzZW5kTWVzc2FnZShcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBldmVudDogJ2NsaWVudC13YXJuaW5nJyxcbiAgICAgICAgICAgIHdhcm5pbmdDb3VudDogd2FybmluZ3MubGVuZ3RoLFxuICAgICAgICAgICAgY2xpZW50SWQ6IF9fbmV4dERldkNsaWVudElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcblxuICAgICAgICAvLyBQcmludCB3YXJuaW5ncyB0byB0aGUgY29uc29sZS5cbiAgICAgICAgY29uc3QgZm9ybWF0dGVkTWVzc2FnZXMgPSBmb3JtYXRXZWJwYWNrTWVzc2FnZXMoe1xuICAgICAgICAgIHdhcm5pbmdzOiB3YXJuaW5ncyxcbiAgICAgICAgICBlcnJvcnM6IFtdLFxuICAgICAgICB9KVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybWF0dGVkTWVzc2FnZXMud2FybmluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoaSA9PT0gNSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAnVGhlcmUgd2VyZSBtb3JlIHdhcm5pbmdzIGluIG90aGVyIGZpbGVzLlxcbicgK1xuICAgICAgICAgICAgICAgICdZb3UgY2FuIGZpbmQgYSBjb21wbGV0ZSBsb2cgaW4gdGhlIHRlcm1pbmFsLidcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUud2FybihzdHJpcEFuc2koZm9ybWF0dGVkTWVzc2FnZXMud2FybmluZ3NbaV0pKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm8gZWFybHkgcmV0dXJuIGhlcmUgYXMgd2UgbmVlZCB0byBhcHBseSBtb2R1bGVzIGluIHRoZSBzYW1lIHdheSBiZXR3ZWVuIHdhcm5pbmdzIG9ubHkgYW5kIGNvbXBpbGVzIHdpdGhvdXQgd2FybmluZ3NcbiAgICAgIH1cblxuICAgICAgc2VuZE1lc3NhZ2UoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBldmVudDogJ2NsaWVudC1zdWNjZXNzJyxcbiAgICAgICAgICBjbGllbnRJZDogX19uZXh0RGV2Q2xpZW50SWQsXG4gICAgICAgIH0pXG4gICAgICApXG5cbiAgICAgIGlmIChvYmouYWN0aW9uID09PSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuQlVJTFQpIHtcbiAgICAgICAgaGFuZGxlSG90VXBkYXRlKClcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5UVVJCT1BBQ0tfQ09OTkVDVEVEOiB7XG4gICAgICBwcm9jZXNzVHVyYm9wYWNrTWVzc2FnZSh7XG4gICAgICAgIHR5cGU6IEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5UVVJCT1BBQ0tfQ09OTkVDVEVELFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgc2Vzc2lvbklkOiBvYmouZGF0YS5zZXNzaW9uSWQsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuVFVSQk9QQUNLX01FU1NBR0U6IHtcbiAgICAgIHR1cmJvcGFja0htciEub25UdXJib3BhY2tNZXNzYWdlKG9iailcbiAgICAgIGRpc3BhdGNoZXIub25CZWZvcmVSZWZyZXNoKClcbiAgICAgIHByb2Nlc3NUdXJib3BhY2tNZXNzYWdlKHtcbiAgICAgICAgdHlwZTogSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlRVUkJPUEFDS19NRVNTQUdFLFxuICAgICAgICBkYXRhOiBvYmouZGF0YSxcbiAgICAgIH0pXG4gICAgICBpZiAoUnVudGltZUVycm9ySGFuZGxlci5oYWRSdW50aW1lRXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQURfRlJPTV9FUlJPUilcbiAgICAgICAgcGVyZm9ybUZ1bGxSZWxvYWQobnVsbCwgc2VuZE1lc3NhZ2UpXG4gICAgICB9XG4gICAgICBkaXNwYXRjaGVyLm9uUmVmcmVzaCgpXG4gICAgICBicmVha1xuICAgIH1cbiAgICAvLyBUT0RPLUFQUDogbWFrZSBzZXJ2ZXIgY29tcG9uZW50IGNoYW5nZSBtb3JlIGdyYW51bGFyXG4gICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuU0VSVkVSX0NPTVBPTkVOVF9DSEFOR0VTOiB7XG4gICAgICB0dXJib3BhY2tIbXI/Lm9uU2VydmVyQ29tcG9uZW50Q2hhbmdlcygpXG4gICAgICBzZW5kTWVzc2FnZShcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGV2ZW50OiAnc2VydmVyLWNvbXBvbmVudC1yZWxvYWQtcGFnZScsXG4gICAgICAgICAgY2xpZW50SWQ6IF9fbmV4dERldkNsaWVudElkLFxuICAgICAgICAgIGhhc2g6IG9iai5oYXNoLFxuICAgICAgICB9KVxuICAgICAgKVxuXG4gICAgICAvLyBTdG9yZSB0aGUgbGF0ZXN0IGhhc2ggaW4gYSBzZXNzaW9uIGNvb2tpZSBzbyB0aGF0IGl0J3Mgc2VudCBiYWNrIHRvIHRoZVxuICAgICAgLy8gc2VydmVyIHdpdGggYW55IHN1YnNlcXVlbnQgcmVxdWVzdHMuXG4gICAgICBkb2N1bWVudC5jb29raWUgPSBgJHtORVhUX0hNUl9SRUZSRVNIX0hBU0hfQ09PS0lFfT0ke29iai5oYXNofWBcblxuICAgICAgaWYgKFJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yKSB7XG4gICAgICAgIGlmIChyZWxvYWRpbmcpIHJldHVyblxuICAgICAgICByZWxvYWRpbmcgPSB0cnVlXG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcbiAgICAgIH1cblxuICAgICAgc3RhcnRUcmFuc2l0aW9uKCgpID0+IHtcbiAgICAgICAgcm91dGVyLmhtclJlZnJlc2goKVxuICAgICAgICBkaXNwYXRjaGVyLm9uUmVmcmVzaCgpXG4gICAgICB9KVxuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX1RFU1RfTU9ERSkge1xuICAgICAgICBpZiAoc2VsZi5fX05FWFRfSE1SX0NCKSB7XG4gICAgICAgICAgc2VsZi5fX05FWFRfSE1SX0NCKClcbiAgICAgICAgICBzZWxmLl9fTkVYVF9ITVJfQ0IgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlJFTE9BRF9QQUdFOiB7XG4gICAgICB0dXJib3BhY2tIbXI/Lm9uUmVsb2FkUGFnZSgpXG4gICAgICBzZW5kTWVzc2FnZShcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGV2ZW50OiAnY2xpZW50LXJlbG9hZC1wYWdlJyxcbiAgICAgICAgICBjbGllbnRJZDogX19uZXh0RGV2Q2xpZW50SWQsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICBpZiAocmVsb2FkaW5nKSByZXR1cm5cbiAgICAgIHJlbG9hZGluZyA9IHRydWVcbiAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcbiAgICB9XG4gICAgY2FzZSBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuQURERURfUEFHRTpcbiAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5SRU1PVkVEX1BBR0U6IHtcbiAgICAgIHR1cmJvcGFja0htcj8ub25QYWdlQWRkUmVtb3ZlKClcbiAgICAgIC8vIFRPRE8tQVBQOiBwb3RlbnRpYWxseSBvbmx5IHJlZnJlc2ggaWYgdGhlIGN1cnJlbnRseSB2aWV3ZWQgcGFnZSB3YXMgYWRkZWQvcmVtb3ZlZC5cbiAgICAgIHJldHVybiByb3V0ZXIuaG1yUmVmcmVzaCgpXG4gICAgfVxuICAgIGNhc2UgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSLlNFUlZFUl9FUlJPUjoge1xuICAgICAgY29uc3QgeyBlcnJvckpTT04gfSA9IG9ialxuICAgICAgaWYgKGVycm9ySlNPTikge1xuICAgICAgICBjb25zdCB7IG1lc3NhZ2UsIHN0YWNrIH0gPSBKU09OLnBhcnNlKGVycm9ySlNPTilcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSlcbiAgICAgICAgZXJyb3Iuc3RhY2sgPSBzdGFja1xuICAgICAgICBoYW5kbGVFcnJvcnMoW2Vycm9yXSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYXNlIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUi5ERVZfUEFHRVNfTUFOSUZFU1RfVVBEQVRFOiB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBIb3RSZWxvYWQoe1xuICBhc3NldFByZWZpeCxcbiAgY2hpbGRyZW4sXG4gIGdsb2JhbEVycm9yLFxufToge1xuICBhc3NldFByZWZpeDogc3RyaW5nXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgZ2xvYmFsRXJyb3I6IEdsb2JhbEVycm9yU3RhdGVcbn0pIHtcbiAgdXNlRXJyb3JIYW5kbGVyKGRpc3BhdGNoZXIub25VbmhhbmRsZWRFcnJvciwgZGlzcGF0Y2hlci5vblVuaGFuZGxlZFJlamVjdGlvbilcblxuICBjb25zdCB3ZWJTb2NrZXRSZWYgPSB1c2VXZWJzb2NrZXQoYXNzZXRQcmVmaXgpXG5cbiAgdXNlV2Vic29ja2V0UGluZyh3ZWJTb2NrZXRSZWYpXG4gIGNvbnN0IHNlbmRNZXNzYWdlID0gdXNlU2VuZE1lc3NhZ2Uod2ViU29ja2V0UmVmKVxuICB1c2VGb3J3YXJkQ29uc29sZUxvZyh3ZWJTb2NrZXRSZWYpXG4gIGNvbnN0IHByb2Nlc3NUdXJib3BhY2tNZXNzYWdlID0gdXNlVHVyYm9wYWNrKHNlbmRNZXNzYWdlLCAoZXJyKSA9PlxuICAgIHBlcmZvcm1GdWxsUmVsb2FkKGVyciwgc2VuZE1lc3NhZ2UpXG4gIClcblxuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKVxuXG4gIC8vIFdlIGRvbid0IHdhbnQgYWNjZXNzIG9mIHRoZSBwYXRobmFtZSBmb3IgdGhlIGRldiB0b29scyB0byB0cmlnZ2VyIGEgZHluYW1pY1xuICAvLyBhY2Nlc3MgKGFzIHRoZSBkZXYgb3ZlcmxheSB3aWxsIG5ldmVyIGJlIHByZXNlbnQgaW4gcHJvZHVjdGlvbikuXG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlVW50cmFja2VkUGF0aG5hbWUoKVxuICBjb25zdCBhcHBJc3JNYW5pZmVzdFJlZiA9IHVzZVJlZjxSZWNvcmQ8c3RyaW5nLCBmYWxzZSB8IG51bWJlcj4+KHt9KVxuICBjb25zdCBwYXRobmFtZVJlZiA9IHVzZVJlZihwYXRobmFtZSlcblxuICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0RFVl9JTkRJQ0FUT1IpIHtcbiAgICAvLyB0aGlzIGNvbmRpdGlvbmFsIGlzIG9ubHkgZm9yIGRlYWQtY29kZSBlbGltaW5hdGlvbiB3aGljaFxuICAgIC8vIGlzbid0IGEgcnVudGltZSBjb25kaXRpb25hbCBvbmx5IGJ1aWxkLXRpbWUgc28gaWdub3JlIGhvb2tzIHJ1bGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgcGF0aG5hbWVSZWYuY3VycmVudCA9IHBhdGhuYW1lXG5cbiAgICAgIGNvbnN0IGFwcElzck1hbmlmZXN0ID0gYXBwSXNyTWFuaWZlc3RSZWYuY3VycmVudFxuXG4gICAgICBpZiAoYXBwSXNyTWFuaWZlc3QpIHtcbiAgICAgICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lIGluIGFwcElzck1hbmlmZXN0KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRpc3BhdGNoZXIub25TdGF0aWNJbmRpY2F0b3IodHJ1ZSlcbiAgICAgICAgICB9IGNhdGNoIChyZWFzb24pIHtcbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0gJydcblxuICAgICAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAvLyBNb3N0IGxpa2VseSBhIFNlY3VyaXR5RXJyb3IsIGJlY2F1c2Ugb2YgYW4gdW5hdmFpbGFibGUgbG9jYWxTdG9yYWdlXG4gICAgICAgICAgICAgIG1lc3NhZ2UgPSByZWFzb24uc3RhY2sgPz8gcmVhc29uLm1lc3NhZ2VcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVhc29uIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZSA9ICdFcnJvcjogJyArIHJlYXNvbi5tZXNzYWdlICsgJ1xcbicgKyAocmVhc29uLnN0YWNrID8/ICcnKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWVzc2FnZSA9ICdVbmV4cGVjdGVkIEV4Y2VwdGlvbjogJyArIHJlYXNvblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tITVJdICcgKyBtZXNzYWdlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXNwYXRjaGVyLm9uU3RhdGljSW5kaWNhdG9yKGZhbHNlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgW3BhdGhuYW1lXSlcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgd2Vic29ja2V0ID0gd2ViU29ja2V0UmVmLmN1cnJlbnRcbiAgICBpZiAoIXdlYnNvY2tldCkgcmV0dXJuXG5cbiAgICBjb25zdCBoYW5kbGVyID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQ8YW55PikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb2JqID0gSlNPTi5wYXJzZShldmVudC5kYXRhKVxuICAgICAgICBwcm9jZXNzTWVzc2FnZShcbiAgICAgICAgICBvYmosXG4gICAgICAgICAgc2VuZE1lc3NhZ2UsXG4gICAgICAgICAgcHJvY2Vzc1R1cmJvcGFja01lc3NhZ2UsXG4gICAgICAgICAgcm91dGVyLFxuICAgICAgICAgIGFwcElzck1hbmlmZXN0UmVmLFxuICAgICAgICAgIHBhdGhuYW1lUmVmXG4gICAgICAgIClcbiAgICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgICByZXBvcnRJbnZhbGlkSG1yTWVzc2FnZShldmVudCwgZXJyKVxuICAgICAgfVxuICAgIH1cblxuICAgIHdlYnNvY2tldC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcilcbiAgICByZXR1cm4gKCkgPT4gd2Vic29ja2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVyKVxuICB9LCBbXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgcm91dGVyLFxuICAgIHdlYlNvY2tldFJlZixcbiAgICBwcm9jZXNzVHVyYm9wYWNrTWVzc2FnZSxcbiAgICBhcHBJc3JNYW5pZmVzdFJlZixcbiAgXSlcbiAgcmV0dXJuIChcbiAgICA8QXBwRGV2T3ZlcmxheUVycm9yQm91bmRhcnkgZ2xvYmFsRXJyb3I9e2dsb2JhbEVycm9yfT5cbiAgICAgIDxSZXBsYXlTc3JPbmx5RXJyb3JzIG9uQmxvY2tpbmdFcnJvcj17ZGlzcGF0Y2hlci5vcGVuRXJyb3JPdmVybGF5fSAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQXBwRGV2T3ZlcmxheUVycm9yQm91bmRhcnk+XG4gIClcbn1cbiJdLCJuYW1lcyI6WyJIb3RSZWxvYWQiLCJ3YWl0Rm9yV2VicGFja1J1bnRpbWVIb3RVcGRhdGUiLCJtb3N0UmVjZW50Q29tcGlsYXRpb25IYXNoIiwiX19uZXh0RGV2Q2xpZW50SWQiLCJNYXRoIiwicm91bmQiLCJyYW5kb20iLCJEYXRlIiwibm93IiwicmVsb2FkaW5nIiwid2VicGFja1N0YXJ0TXNTaW5jZUVwb2NoIiwidHVyYm9wYWNrSG1yIiwicHJvY2VzcyIsImVudiIsIlRVUkJPUEFDSyIsIlR1cmJvcGFja0htciIsInBlbmRpbmdIb3RVcGRhdGVXZWJwYWNrIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZXNvbHZlUGVuZGluZ0hvdFVwZGF0ZVdlYnBhY2siLCJzZXRQZW5kaW5nSG90VXBkYXRlV2VicGFjayIsImhhbmRsZUF2YWlsYWJsZUhhc2giLCJoYXNoIiwiaXNVcGRhdGVBdmFpbGFibGUiLCJfX3dlYnBhY2tfaGFzaF9fIiwiY2FuQXBwbHlVcGRhdGVzIiwibW9kdWxlIiwiaG90Iiwic3RhdHVzIiwiYWZ0ZXJBcHBseVVwZGF0ZXMiLCJmbiIsImhhbmRsZXIiLCJyZW1vdmVTdGF0dXNIYW5kbGVyIiwiYWRkU3RhdHVzSGFuZGxlciIsInBlcmZvcm1GdWxsUmVsb2FkIiwiZXJyIiwic2VuZE1lc3NhZ2UiLCJzdGFja1RyYWNlIiwic3RhY2siLCJzcGxpdCIsInNsaWNlIiwiam9pbiIsIm1lc3NhZ2UiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlbnQiLCJoYWRSdW50aW1lRXJyb3IiLCJSdW50aW1lRXJyb3JIYW5kbGVyIiwiZGVwZW5kZW5jeUNoYWluIiwidW5kZWZpbmVkIiwid2luZG93IiwibG9jYXRpb24iLCJyZWxvYWQiLCJ0cnlBcHBseVVwZGF0ZXNXZWJwYWNrIiwiZGlzcGF0Y2hlciIsIm9uQnVpbGRPayIsInJlcG9ydEhtckxhdGVuY3kiLCJoYW5kbGVBcHBseVVwZGF0ZXMiLCJ1cGRhdGVkTW9kdWxlcyIsImNvbnNvbGUiLCJ3YXJuIiwiUkVBQ1RfUkVGUkVTSF9GVUxMX1JFTE9BRCIsIlJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQURfRlJPTV9FUlJPUiIsIm9uUmVmcmVzaCIsIl9fTkVYVF9URVNUX01PREUiLCJzZWxmIiwiX19ORVhUX0hNUl9DQiIsImNoZWNrIiwidGhlbiIsIm9uQmVmb3JlUmVmcmVzaCIsImFwcGx5IiwicHJvY2Vzc01lc3NhZ2UiLCJvYmoiLCJwcm9jZXNzVHVyYm9wYWNrTWVzc2FnZSIsInJvdXRlciIsImFwcElzck1hbmlmZXN0UmVmIiwicGF0aG5hbWVSZWYiLCJoYW5kbGVFcnJvcnMiLCJlcnJvcnMiLCJmb3JtYXR0ZWQiLCJmb3JtYXRXZWJwYWNrTWVzc2FnZXMiLCJ3YXJuaW5ncyIsIm9uQnVpbGRFcnJvciIsImkiLCJsZW5ndGgiLCJlcnJvciIsInN0cmlwQW5zaSIsImhhbmRsZUhvdFVwZGF0ZSIsImhtclVwZGF0ZSIsIm9uQnVpbHQiLCJzdGFydE1zU2luY2VFcG9jaCIsImVuZE1zU2luY2VFcG9jaCIsImhhc1VwZGF0ZXMiLCJhY3Rpb24iLCJITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIiLCJJU1JfTUFOSUZFU1QiLCJfX05FWFRfREVWX0lORElDQVRPUiIsImN1cnJlbnQiLCJkYXRhIiwib25TdGF0aWNJbmRpY2F0b3IiLCJCVUlMRElORyIsImJ1aWxkaW5nSW5kaWNhdG9yU2hvdyIsIm9uQnVpbGRpbmciLCJsb2ciLCJCVUlMVCIsIlNZTkMiLCJidWlsZGluZ0luZGljYXRvckhpZGUiLCJvblZlcnNpb25JbmZvIiwidmVyc2lvbkluZm8iLCJkZWJ1ZyIsIm9uRGVidWdJbmZvIiwib25EZXZJbmRpY2F0b3IiLCJkZXZJbmRpY2F0b3IiLCJoYXNFcnJvcnMiLCJCb29sZWFuIiwiZXJyb3JDb3VudCIsImNsaWVudElkIiwiaGFzV2FybmluZ3MiLCJ3YXJuaW5nQ291bnQiLCJmb3JtYXR0ZWRNZXNzYWdlcyIsIlRVUkJPUEFDS19DT05ORUNURUQiLCJ0eXBlIiwic2Vzc2lvbklkIiwiVFVSQk9QQUNLX01FU1NBR0UiLCJvblR1cmJvcGFja01lc3NhZ2UiLCJTRVJWRVJfQ09NUE9ORU5UX0NIQU5HRVMiLCJvblNlcnZlckNvbXBvbmVudENoYW5nZXMiLCJkb2N1bWVudCIsImNvb2tpZSIsIk5FWFRfSE1SX1JFRlJFU0hfSEFTSF9DT09LSUUiLCJzdGFydFRyYW5zaXRpb24iLCJobXJSZWZyZXNoIiwiUkVMT0FEX1BBR0UiLCJvblJlbG9hZFBhZ2UiLCJBRERFRF9QQUdFIiwiUkVNT1ZFRF9QQUdFIiwib25QYWdlQWRkUmVtb3ZlIiwiU0VSVkVSX0VSUk9SIiwiZXJyb3JKU09OIiwicGFyc2UiLCJFcnJvciIsIkRFVl9QQUdFU19NQU5JRkVTVF9VUERBVEUiLCJhc3NldFByZWZpeCIsImNoaWxkcmVuIiwiZ2xvYmFsRXJyb3IiLCJ1c2VFcnJvckhhbmRsZXIiLCJvblVuaGFuZGxlZEVycm9yIiwib25VbmhhbmRsZWRSZWplY3Rpb24iLCJ3ZWJTb2NrZXRSZWYiLCJ1c2VXZWJzb2NrZXQiLCJ1c2VXZWJzb2NrZXRQaW5nIiwidXNlU2VuZE1lc3NhZ2UiLCJ1c2VGb3J3YXJkQ29uc29sZUxvZyIsInVzZVR1cmJvcGFjayIsInVzZVJvdXRlciIsInBhdGhuYW1lIiwidXNlVW50cmFja2VkUGF0aG5hbWUiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJhcHBJc3JNYW5pZmVzdCIsInJlYXNvbiIsIkRPTUV4Y2VwdGlvbiIsIndlYnNvY2tldCIsInJlcG9ydEludmFsaWRIbXJNZXNzYWdlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJBcHBEZXZPdmVybGF5RXJyb3JCb3VuZGFyeSIsIlJlcGxheVNzck9ubHlFcnJvcnMiLCJvbkJsb2NraW5nRXJyb3IiLCJvcGVuRXJyb3JPdmVybGF5Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/app/hot-reloader-app.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/app/use-websocket.js":
/*!*************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/app/use-websocket.js ***!
  \*************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    useSendMessage: function() {\n        return useSendMessage;\n    },\n    useTurbopack: function() {\n        return useTurbopack;\n    },\n    useWebsocket: function() {\n        return useWebsocket;\n    },\n    useWebsocketPing: function() {\n        return useWebsocketPing;\n    }\n});\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _getsocketurl = __webpack_require__(/*! ../get-socket-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/get-socket-url.js\");\nfunction useWebsocket(assetPrefix) {\n    const webSocketRef = (0, _react.useRef)(undefined);\n    (0, _react.useEffect)(()=>{\n        if (webSocketRef.current) {\n            return;\n        }\n        const url = (0, _getsocketurl.getSocketUrl)(assetPrefix);\n        webSocketRef.current = new window.WebSocket(\"\" + url + \"/_next/webpack-hmr\");\n    }, [\n        assetPrefix\n    ]);\n    return webSocketRef;\n}\nfunction useSendMessage(webSocketRef) {\n    const sendMessage = (0, _react.useCallback)((data)=>{\n        const socket = webSocketRef.current;\n        if (!socket || socket.readyState !== socket.OPEN) {\n            return;\n        }\n        return socket.send(data);\n    }, [\n        webSocketRef\n    ]);\n    return sendMessage;\n}\nfunction useTurbopack(sendMessage, onUpdateError) {\n    const turbopackState = (0, _react.useRef)({\n        init: false,\n        // Until the dynamic import resolves, queue any turbopack messages which will be replayed.\n        queue: [],\n        callback: undefined\n    });\n    const processTurbopackMessage = (0, _react.useCallback)((msg)=>{\n        const { callback, queue } = turbopackState.current;\n        if (callback) {\n            callback(msg);\n        } else {\n            queue.push(msg);\n        }\n    }, []);\n    (0, _react.useEffect)(()=>{\n        const { current: initCurrent } = turbopackState;\n        // TODO(WEB-1589): only install if `process.turbopack` set.\n        if (initCurrent.init) {\n            return;\n        }\n        initCurrent.init = true;\n        Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! @vercel/turbopack-ecmascript-runtime/browser/dev/hmr-client/hmr-client.ts */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/noop-turbopack-hmr.js\"))).then((param)=>{\n            let { connect } = param;\n            const { current } = turbopackState;\n            connect({\n                addMessageListener (cb) {\n                    current.callback = cb;\n                    // Replay all Turbopack messages before we were able to establish the HMR client.\n                    for (const msg of current.queue){\n                        cb(msg);\n                    }\n                    current.queue = undefined;\n                },\n                sendMessage,\n                onUpdateError\n            });\n        });\n    }, [\n        sendMessage,\n        onUpdateError\n    ]);\n    return processTurbopackMessage;\n}\nfunction useWebsocketPing(websocketRef) {\n    _s();\n    const sendMessage = useSendMessage(websocketRef);\n    const { tree } = (0, _react.useContext)(_approutercontextsharedruntime.GlobalLayoutRouterContext);\n    (0, _react.useEffect)(()=>{\n        // Never send pings when using Turbopack as it's not used.\n        // Pings were originally used to keep track of active routes in on-demand-entries with webpack.\n        if (false) {}\n        // Taken from on-demand-entries-client.js\n        const interval = setInterval(()=>{\n            sendMessage(JSON.stringify({\n                event: 'ping',\n                tree,\n                appDirRoute: true\n            }));\n        }, 2500);\n        return ()=>clearInterval(interval);\n    }, [\n        tree,\n        sendMessage\n    ]);\n}\n_s(useWebsocketPing, \"wUse5NG7XMV1uhKK1kY0LLDje8k=\", false, function() {\n    return [\n        useSendMessage\n    ];\n});\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=use-websocket.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvZGV2L2hvdC1yZWxvYWRlci9hcHAvdXNlLXdlYnNvY2tldC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFxQmdCQSxjQUFjO2VBQWRBOztJQWNBQyxZQUFZO2VBQVpBOztJQTlCQUMsWUFBWTtlQUFaQTs7SUFzRkFDLGdCQUFnQjtlQUFoQkE7OzttQ0EzRjJDOzJEQUNqQjswQ0FDYjtBQUd0QixTQUFTRCxhQUFhRSxXQUFtQjtJQUM5QyxNQUFNQyxlQUFlQyxDQUFBQSxHQUFBQSxPQUFBQSxNQUFNLEVBQVlDO0lBRXZDQyxDQUFBQSxHQUFBQSxPQUFBQSxTQUFBQSxFQUFVO1FBQ1IsSUFBSUgsYUFBYUksT0FBTyxFQUFFO1lBQ3hCO1FBQ0Y7UUFFQSxNQUFNQyxNQUFNQyxDQUFBQSxHQUFBQSxjQUFBQSxZQUFBQSxFQUFhUDtRQUV6QkMsYUFBYUksT0FBTyxHQUFHLElBQUlHLE9BQU9DLFNBQVMsQ0FBRSxLQUFFSCxNQUFJO0lBQ3JELEdBQUc7UUFBQ047S0FBWTtJQUVoQixPQUFPQztBQUNUO0FBRU8sU0FBU0wsZUFBZUssWUFBNkM7SUFDMUUsTUFBTVMsY0FBY0MsQ0FBQUEsR0FBQUEsT0FBQUEsV0FBQUEsRUFDbEIsQ0FBQ0M7UUFDQyxNQUFNQyxTQUFTWixhQUFhSSxPQUFPO1FBQ25DLElBQUksQ0FBQ1EsVUFBVUEsT0FBT0MsVUFBVSxLQUFLRCxPQUFPRSxJQUFJLEVBQUU7WUFDaEQ7UUFDRjtRQUNBLE9BQU9GLE9BQU9HLElBQUksQ0FBQ0o7SUFDckIsR0FDQTtRQUFDWDtLQUFhO0lBRWhCLE9BQU9TO0FBQ1Q7QUFFTyxTQUFTYixhQUNkYSxXQUE4QyxFQUM5Q08sYUFBcUM7SUFFckMsTUFBTUMsaUJBQWlCaEIsQ0FBQUEsR0FBQUEsT0FBQUEsTUFBQUEsRUFJcEI7UUFDRGlCLE1BQU07UUFDTiwwRkFBMEY7UUFDMUZDLE9BQU8sRUFBRTtRQUNUQyxVQUFVbEI7SUFDWjtJQUVBLE1BQU1tQiwwQkFBMEJYLENBQUFBLEdBQUFBLE9BQUFBLFdBQUFBLEVBQVksQ0FBQ1k7UUFDM0MsTUFBTSxFQUFFRixRQUFRLEVBQUVELEtBQUssRUFBRSxHQUFHRixlQUFlYixPQUFPO1FBQ2xELElBQUlnQixVQUFVO1lBQ1pBLFNBQVNFO1FBQ1gsT0FBTztZQUNMSCxNQUFPSSxJQUFJLENBQUNEO1FBQ2Q7SUFDRixHQUFHLEVBQUU7SUFFTG5CLENBQUFBLEdBQUFBLE9BQUFBLFNBQUFBLEVBQVU7UUFDUixNQUFNLEVBQUVDLFNBQVNvQixXQUFXLEVBQUUsR0FBR1A7UUFDakMsMkRBQTJEO1FBQzNELElBQUlPLFlBQVlOLElBQUksRUFBRTtZQUNwQjtRQUNGO1FBQ0FNLFlBQVlOLElBQUksR0FBRzs2RUFFbkIsbUJBQ0UsQ0FDQSxnVEFDQU8sSUFBSSxDQUFDO2dCQUFDLEVBQUVDLE9BQU8sRUFBRTtZQUNqQixNQUFNLEVBQUV0QixPQUFPLEVBQUUsR0FBR2E7WUFDcEJTLFFBQVE7Z0JBQ05DLG9CQUFtQkMsRUFBd0M7b0JBQ3pEeEIsUUFBUWdCLFFBQVEsR0FBR1E7b0JBRW5CLGlGQUFpRjtvQkFDakYsS0FBSyxNQUFNTixPQUFPbEIsUUFBUWUsS0FBSyxDQUFHO3dCQUNoQ1MsR0FBR047b0JBQ0w7b0JBQ0FsQixRQUFRZSxLQUFLLEdBQUdqQjtnQkFDbEI7Z0JBQ0FPO2dCQUNBTztZQUNGO1FBQ0Y7SUFDRixHQUFHO1FBQUNQO1FBQWFPO0tBQWM7SUFFL0IsT0FBT0s7QUFDVDtBQUVPLDBCQUNMUSxZQUE2Qzs7SUFFN0MsTUFBTXBCLDZCQUE2Qm9CO0lBQ25DLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLENBQUFBLEdBQUFBLE9BQUFBLFVBQUFBLEVBQVdDLCtCQUFBQSx5QkFBeUI7SUFFckQ3QixDQUFBQSxHQUFBQSxPQUFBQSxTQUFBQSxFQUFVO1FBQ1IsMERBQTBEO1FBQzFELCtGQUErRjtRQUMvRixJQUFJOEIsS0FBcUIsRUFBRSxFQUUxQjtRQUVELHlDQUF5QztRQUN6QyxNQUFNRyxXQUFXQyxZQUFZO1lBQzNCNUIsWUFDRTZCLEtBQUtDLFNBQVMsQ0FBQztnQkFDYkMsT0FBTztnQkFDUFY7Z0JBQ0FXLGFBQWE7WUFDZjtRQUVKLEdBQUc7UUFDSCxPQUFPLElBQU1DLGNBQWNOO0lBQzdCLEdBQUc7UUFBQ047UUFBTXJCO0tBQVk7QUFDeEI7R0F6QmdCWDs7UUFHTUgiLCJzb3VyY2VzIjpbIi9zcmMvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvYXBwL3VzZS13ZWJzb2NrZXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBHbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyBnZXRTb2NrZXRVcmwgfSBmcm9tICcuLi9nZXQtc29ja2V0LXVybCdcbmltcG9ydCB0eXBlIHsgVHVyYm9wYWNrTXNnVG9Ccm93c2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmVyL2Rldi9ob3QtcmVsb2FkZXItdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VXZWJzb2NrZXQoYXNzZXRQcmVmaXg6IHN0cmluZykge1xuICBjb25zdCB3ZWJTb2NrZXRSZWYgPSB1c2VSZWY8V2ViU29ja2V0Pih1bmRlZmluZWQpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAod2ViU29ja2V0UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGdldFNvY2tldFVybChhc3NldFByZWZpeClcblxuICAgIHdlYlNvY2tldFJlZi5jdXJyZW50ID0gbmV3IHdpbmRvdy5XZWJTb2NrZXQoYCR7dXJsfS9fbmV4dC93ZWJwYWNrLWhtcmApXG4gIH0sIFthc3NldFByZWZpeF0pXG5cbiAgcmV0dXJuIHdlYlNvY2tldFJlZlxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlU2VuZE1lc3NhZ2Uod2ViU29ja2V0UmVmOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VXZWJzb2NrZXQ+KSB7XG4gIGNvbnN0IHNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGRhdGE6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgc29ja2V0ID0gd2ViU29ja2V0UmVmLmN1cnJlbnRcbiAgICAgIGlmICghc29ja2V0IHx8IHNvY2tldC5yZWFkeVN0YXRlICE9PSBzb2NrZXQuT1BFTikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHJldHVybiBzb2NrZXQuc2VuZChkYXRhKVxuICAgIH0sXG4gICAgW3dlYlNvY2tldFJlZl1cbiAgKVxuICByZXR1cm4gc2VuZE1lc3NhZ2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVR1cmJvcGFjayhcbiAgc2VuZE1lc3NhZ2U6IFJldHVyblR5cGU8dHlwZW9mIHVzZVNlbmRNZXNzYWdlPixcbiAgb25VcGRhdGVFcnJvcjogKGVycjogdW5rbm93bikgPT4gdm9pZFxuKSB7XG4gIGNvbnN0IHR1cmJvcGFja1N0YXRlID0gdXNlUmVmPHtcbiAgICBpbml0OiBib29sZWFuXG4gICAgcXVldWU6IEFycmF5PFR1cmJvcGFja01zZ1RvQnJvd3Nlcj4gfCB1bmRlZmluZWRcbiAgICBjYWxsYmFjazogKChtc2c6IFR1cmJvcGFja01zZ1RvQnJvd3NlcikgPT4gdm9pZCkgfCB1bmRlZmluZWRcbiAgfT4oe1xuICAgIGluaXQ6IGZhbHNlLFxuICAgIC8vIFVudGlsIHRoZSBkeW5hbWljIGltcG9ydCByZXNvbHZlcywgcXVldWUgYW55IHR1cmJvcGFjayBtZXNzYWdlcyB3aGljaCB3aWxsIGJlIHJlcGxheWVkLlxuICAgIHF1ZXVlOiBbXSxcbiAgICBjYWxsYmFjazogdW5kZWZpbmVkLFxuICB9KVxuXG4gIGNvbnN0IHByb2Nlc3NUdXJib3BhY2tNZXNzYWdlID0gdXNlQ2FsbGJhY2soKG1zZzogVHVyYm9wYWNrTXNnVG9Ccm93c2VyKSA9PiB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgcXVldWUgfSA9IHR1cmJvcGFja1N0YXRlLmN1cnJlbnRcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKG1zZylcbiAgICB9IGVsc2Uge1xuICAgICAgcXVldWUhLnB1c2gobXNnKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB7IGN1cnJlbnQ6IGluaXRDdXJyZW50IH0gPSB0dXJib3BhY2tTdGF0ZVxuICAgIC8vIFRPRE8oV0VCLTE1ODkpOiBvbmx5IGluc3RhbGwgaWYgYHByb2Nlc3MudHVyYm9wYWNrYCBzZXQuXG4gICAgaWYgKGluaXRDdXJyZW50LmluaXQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpbml0Q3VycmVudC5pbml0ID0gdHJ1ZVxuXG4gICAgaW1wb3J0KFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciByZXF1aXJlcyBcIm1vZHVsZVJlc29sdXRpb25cIjogXCJub2RlMTZcIiBpbiB0c2NvbmZpZy5qc29uIGFuZCBub3QgLnRzIGV4dGVuc2lvblxuICAgICAgJ0B2ZXJjZWwvdHVyYm9wYWNrLWVjbWFzY3JpcHQtcnVudGltZS9icm93c2VyL2Rldi9obXItY2xpZW50L2htci1jbGllbnQudHMnXG4gICAgKS50aGVuKCh7IGNvbm5lY3QgfSkgPT4ge1xuICAgICAgY29uc3QgeyBjdXJyZW50IH0gPSB0dXJib3BhY2tTdGF0ZVxuICAgICAgY29ubmVjdCh7XG4gICAgICAgIGFkZE1lc3NhZ2VMaXN0ZW5lcihjYjogKG1zZzogVHVyYm9wYWNrTXNnVG9Ccm93c2VyKSA9PiB2b2lkKSB7XG4gICAgICAgICAgY3VycmVudC5jYWxsYmFjayA9IGNiXG5cbiAgICAgICAgICAvLyBSZXBsYXkgYWxsIFR1cmJvcGFjayBtZXNzYWdlcyBiZWZvcmUgd2Ugd2VyZSBhYmxlIHRvIGVzdGFibGlzaCB0aGUgSE1SIGNsaWVudC5cbiAgICAgICAgICBmb3IgKGNvbnN0IG1zZyBvZiBjdXJyZW50LnF1ZXVlISkge1xuICAgICAgICAgICAgY2IobXNnKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50LnF1ZXVlID0gdW5kZWZpbmVkXG4gICAgICAgIH0sXG4gICAgICAgIHNlbmRNZXNzYWdlLFxuICAgICAgICBvblVwZGF0ZUVycm9yLFxuICAgICAgfSlcbiAgICB9KVxuICB9LCBbc2VuZE1lc3NhZ2UsIG9uVXBkYXRlRXJyb3JdKVxuXG4gIHJldHVybiBwcm9jZXNzVHVyYm9wYWNrTWVzc2FnZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlV2Vic29ja2V0UGluZyhcbiAgd2Vic29ja2V0UmVmOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VXZWJzb2NrZXQ+XG4pIHtcbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VTZW5kTWVzc2FnZSh3ZWJzb2NrZXRSZWYpXG4gIGNvbnN0IHsgdHJlZSB9ID0gdXNlQ29udGV4dChHbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0KVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gTmV2ZXIgc2VuZCBwaW5ncyB3aGVuIHVzaW5nIFR1cmJvcGFjayBhcyBpdCdzIG5vdCB1c2VkLlxuICAgIC8vIFBpbmdzIHdlcmUgb3JpZ2luYWxseSB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgYWN0aXZlIHJvdXRlcyBpbiBvbi1kZW1hbmQtZW50cmllcyB3aXRoIHdlYnBhY2suXG4gICAgaWYgKHByb2Nlc3MuZW52LlRVUkJPUEFDSykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gVGFrZW4gZnJvbSBvbi1kZW1hbmQtZW50cmllcy1jbGllbnQuanNcbiAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHNlbmRNZXNzYWdlKFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgZXZlbnQ6ICdwaW5nJyxcbiAgICAgICAgICB0cmVlLFxuICAgICAgICAgIGFwcERpclJvdXRlOiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sIDI1MDApXG4gICAgcmV0dXJuICgpID0+IGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpXG4gIH0sIFt0cmVlLCBzZW5kTWVzc2FnZV0pXG59XG4iXSwibmFtZXMiOlsidXNlU2VuZE1lc3NhZ2UiLCJ1c2VUdXJib3BhY2siLCJ1c2VXZWJzb2NrZXQiLCJ1c2VXZWJzb2NrZXRQaW5nIiwiYXNzZXRQcmVmaXgiLCJ3ZWJTb2NrZXRSZWYiLCJ1c2VSZWYiLCJ1bmRlZmluZWQiLCJ1c2VFZmZlY3QiLCJjdXJyZW50IiwidXJsIiwiZ2V0U29ja2V0VXJsIiwid2luZG93IiwiV2ViU29ja2V0Iiwic2VuZE1lc3NhZ2UiLCJ1c2VDYWxsYmFjayIsImRhdGEiLCJzb2NrZXQiLCJyZWFkeVN0YXRlIiwiT1BFTiIsInNlbmQiLCJvblVwZGF0ZUVycm9yIiwidHVyYm9wYWNrU3RhdGUiLCJpbml0IiwicXVldWUiLCJjYWxsYmFjayIsInByb2Nlc3NUdXJib3BhY2tNZXNzYWdlIiwibXNnIiwicHVzaCIsImluaXRDdXJyZW50IiwidGhlbiIsImNvbm5lY3QiLCJhZGRNZXNzYWdlTGlzdGVuZXIiLCJjYiIsIndlYnNvY2tldFJlZiIsInRyZWUiLCJ1c2VDb250ZXh0IiwiR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCIsInByb2Nlc3MiLCJlbnYiLCJUVVJCT1BBQ0siLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiYXBwRGlyUm91dGUiLCJjbGVhckludGVydmFsIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/app/use-websocket.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/get-socket-url.js":
/*!**********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/get-socket-url.js ***!
  \**********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"getSocketUrl\", ({\n    enumerable: true,\n    get: function() {\n        return getSocketUrl;\n    }\n}));\nconst _normalizedassetprefix = __webpack_require__(/*! ../../../shared/lib/normalized-asset-prefix */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/normalized-asset-prefix.js\");\nfunction getSocketProtocol(assetPrefix) {\n    let protocol = window.location.protocol;\n    try {\n        // assetPrefix is a url\n        protocol = new URL(assetPrefix).protocol;\n    } catch (e) {}\n    return protocol === 'http:' ? 'ws:' : 'wss:';\n}\nfunction getSocketUrl(assetPrefix) {\n    const prefix = (0, _normalizedassetprefix.normalizedAssetPrefix)(assetPrefix);\n    const protocol = getSocketProtocol(assetPrefix || '');\n    if (URL.canParse(prefix)) {\n        // since normalized asset prefix is ensured to be a URL format,\n        // we can safely replace the protocol\n        return prefix.replace(/^http/, 'ws');\n    }\n    const { hostname, port } = window.location;\n    return protocol + \"//\" + hostname + (port ? \":\" + port : '') + prefix;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=get-socket-url.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvZGV2L2hvdC1yZWxvYWRlci9nZXQtc29ja2V0LXVybC5qcyIsIm1hcHBpbmdzIjoiOzs7O2dEQWFnQkE7OztlQUFBQTs7O21EQWJzQjtBQUV0QyxTQUFTQyxrQkFBa0JDLFdBQW1CO0lBQzVDLElBQUlDLFdBQVdDLE9BQU9DLFFBQVEsQ0FBQ0YsUUFBUTtJQUV2QyxJQUFJO1FBQ0YsdUJBQXVCO1FBQ3ZCQSxXQUFXLElBQUlHLElBQUlKLGFBQWFDLFFBQVE7SUFDMUMsRUFBRSxVQUFNLENBQUM7SUFFVCxPQUFPQSxhQUFhLFVBQVUsUUFBUTtBQUN4QztBQUVPLFNBQVNILGFBQWFFLFdBQStCO0lBQzFELE1BQU1LLFNBQVNDLENBQUFBLEdBQUFBLHVCQUFBQSxxQkFBQUEsRUFBc0JOO0lBQ3JDLE1BQU1DLFdBQVdGLGtCQUFrQkMsZUFBZTtJQUVsRCxJQUFJSSxJQUFJRyxRQUFRLENBQUNGLFNBQVM7UUFDeEIsK0RBQStEO1FBQy9ELHFDQUFxQztRQUNyQyxPQUFPQSxPQUFPRyxPQUFPLENBQUMsU0FBUztJQUNqQztJQUVBLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxJQUFJLEVBQUUsR0FBR1IsT0FBT0MsUUFBUTtJQUMxQyxPQUFVRixXQUFTLE9BQUlRLFdBQVdDLENBQUFBLE9BQVEsTUFBR0EsT0FBUyxHQUFDLEdBQUlMO0FBQzdEIiwic291cmNlcyI6WyIvaG9tZS9zcmMvY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvZ2V0LXNvY2tldC11cmwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbm9ybWFsaXplZEFzc2V0UHJlZml4IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2xpYi9ub3JtYWxpemVkLWFzc2V0LXByZWZpeCdcblxuZnVuY3Rpb24gZ2V0U29ja2V0UHJvdG9jb2woYXNzZXRQcmVmaXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBwcm90b2NvbCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbFxuXG4gIHRyeSB7XG4gICAgLy8gYXNzZXRQcmVmaXggaXMgYSB1cmxcbiAgICBwcm90b2NvbCA9IG5ldyBVUkwoYXNzZXRQcmVmaXgpLnByb3RvY29sXG4gIH0gY2F0Y2gge31cblxuICByZXR1cm4gcHJvdG9jb2wgPT09ICdodHRwOicgPyAnd3M6JyA6ICd3c3M6J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U29ja2V0VXJsKGFzc2V0UHJlZml4OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBjb25zdCBwcmVmaXggPSBub3JtYWxpemVkQXNzZXRQcmVmaXgoYXNzZXRQcmVmaXgpXG4gIGNvbnN0IHByb3RvY29sID0gZ2V0U29ja2V0UHJvdG9jb2woYXNzZXRQcmVmaXggfHwgJycpXG5cbiAgaWYgKFVSTC5jYW5QYXJzZShwcmVmaXgpKSB7XG4gICAgLy8gc2luY2Ugbm9ybWFsaXplZCBhc3NldCBwcmVmaXggaXMgZW5zdXJlZCB0byBiZSBhIFVSTCBmb3JtYXQsXG4gICAgLy8gd2UgY2FuIHNhZmVseSByZXBsYWNlIHRoZSBwcm90b2NvbFxuICAgIHJldHVybiBwcmVmaXgucmVwbGFjZSgvXmh0dHAvLCAnd3MnKVxuICB9XG5cbiAgY29uc3QgeyBob3N0bmFtZSwgcG9ydCB9ID0gd2luZG93LmxvY2F0aW9uXG4gIHJldHVybiBgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWV9JHtwb3J0ID8gYDoke3BvcnR9YCA6ICcnfSR7cHJlZml4fWBcbn1cbiJdLCJuYW1lcyI6WyJnZXRTb2NrZXRVcmwiLCJnZXRTb2NrZXRQcm90b2NvbCIsImFzc2V0UHJlZml4IiwicHJvdG9jb2wiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsIlVSTCIsInByZWZpeCIsIm5vcm1hbGl6ZWRBc3NldFByZWZpeCIsImNhblBhcnNlIiwicmVwbGFjZSIsImhvc3RuYW1lIiwicG9ydCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/get-socket-url.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/shared.js":
/*!**************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/shared.js ***!
  \**************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    REACT_REFRESH_FULL_RELOAD: function() {\n        return REACT_REFRESH_FULL_RELOAD;\n    },\n    REACT_REFRESH_FULL_RELOAD_FROM_ERROR: function() {\n        return REACT_REFRESH_FULL_RELOAD_FROM_ERROR;\n    },\n    reportInvalidHmrMessage: function() {\n        return reportInvalidHmrMessage;\n    }\n});\nconst REACT_REFRESH_FULL_RELOAD = '[Fast Refresh] performing full reload\\n\\n' + \"Fast Refresh will perform a full reload when you edit a file that's imported by modules outside of the React rendering tree.\\n\" + 'You might have a file which exports a React component but also exports a value that is imported by a non-React component file.\\n' + 'Consider migrating the non-React component export to a separate file and importing it into both files.\\n\\n' + 'It is also possible the parent component of the component you edited is a class component, which disables Fast Refresh.\\n' + 'Fast Refresh requires at least one parent function component in your React tree.';\nconst REACT_REFRESH_FULL_RELOAD_FROM_ERROR = '[Fast Refresh] performing full reload because your application had an unrecoverable error';\nfunction reportInvalidHmrMessage(message, err) {\n    console.warn('[HMR] Invalid message: ' + JSON.stringify(message) + '\\n' + (err instanceof Error && (err == null ? void 0 : err.stack) || ''));\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=shared.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvZGV2L2hvdC1yZWxvYWRlci9zaGFyZWQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBRWFBLHlCQUF5QjtlQUF6QkE7O0lBUUFDLG9DQUFvQztlQUFwQ0E7O0lBR0dDLHVCQUF1QjtlQUF2QkE7OztBQVhULE1BQU1GLDRCQUNYLDhDQUNBLG1JQUNBLHFJQUNBLCtHQUNBLDhIQUNBO0FBRUssTUFBTUMsdUNBQ1g7QUFFSyxTQUFTQyx3QkFDZEMsT0FBaUQsRUFDakRDLEdBQVk7SUFFWkMsUUFBUUMsSUFBSSxDQUNWLDRCQUNFQyxLQUFLQyxTQUFTLENBQUNMLFdBQ2YsT0FDQyxDQUFDQyxlQUFlSyxVQUFTTCxPQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxJQUFLTSxLQUFBQSxLQUFVLEdBQUM7QUFFaEQiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvZGV2L2hvdC1yZWxvYWRlci9zaGFyZWQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBITVJfQUNUSU9OX1RZUEVTIH0gZnJvbSAnLi4vLi4vLi4vc2VydmVyL2Rldi9ob3QtcmVsb2FkZXItdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBSRUFDVF9SRUZSRVNIX0ZVTExfUkVMT0FEID1cbiAgJ1tGYXN0IFJlZnJlc2hdIHBlcmZvcm1pbmcgZnVsbCByZWxvYWRcXG5cXG4nICtcbiAgXCJGYXN0IFJlZnJlc2ggd2lsbCBwZXJmb3JtIGEgZnVsbCByZWxvYWQgd2hlbiB5b3UgZWRpdCBhIGZpbGUgdGhhdCdzIGltcG9ydGVkIGJ5IG1vZHVsZXMgb3V0c2lkZSBvZiB0aGUgUmVhY3QgcmVuZGVyaW5nIHRyZWUuXFxuXCIgK1xuICAnWW91IG1pZ2h0IGhhdmUgYSBmaWxlIHdoaWNoIGV4cG9ydHMgYSBSZWFjdCBjb21wb25lbnQgYnV0IGFsc28gZXhwb3J0cyBhIHZhbHVlIHRoYXQgaXMgaW1wb3J0ZWQgYnkgYSBub24tUmVhY3QgY29tcG9uZW50IGZpbGUuXFxuJyArXG4gICdDb25zaWRlciBtaWdyYXRpbmcgdGhlIG5vbi1SZWFjdCBjb21wb25lbnQgZXhwb3J0IHRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgaW1wb3J0aW5nIGl0IGludG8gYm90aCBmaWxlcy5cXG5cXG4nICtcbiAgJ0l0IGlzIGFsc28gcG9zc2libGUgdGhlIHBhcmVudCBjb21wb25lbnQgb2YgdGhlIGNvbXBvbmVudCB5b3UgZWRpdGVkIGlzIGEgY2xhc3MgY29tcG9uZW50LCB3aGljaCBkaXNhYmxlcyBGYXN0IFJlZnJlc2guXFxuJyArXG4gICdGYXN0IFJlZnJlc2ggcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHBhcmVudCBmdW5jdGlvbiBjb21wb25lbnQgaW4geW91ciBSZWFjdCB0cmVlLidcblxuZXhwb3J0IGNvbnN0IFJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQURfRlJPTV9FUlJPUiA9XG4gICdbRmFzdCBSZWZyZXNoXSBwZXJmb3JtaW5nIGZ1bGwgcmVsb2FkIGJlY2F1c2UgeW91ciBhcHBsaWNhdGlvbiBoYWQgYW4gdW5yZWNvdmVyYWJsZSBlcnJvcidcblxuZXhwb3J0IGZ1bmN0aW9uIHJlcG9ydEludmFsaWRIbXJNZXNzYWdlKFxuICBtZXNzYWdlOiBITVJfQUNUSU9OX1RZUEVTIHwgTWVzc2FnZUV2ZW50PHVua25vd24+LFxuICBlcnI6IHVua25vd25cbikge1xuICBjb25zb2xlLndhcm4oXG4gICAgJ1tITVJdIEludmFsaWQgbWVzc2FnZTogJyArXG4gICAgICBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSArXG4gICAgICAnXFxuJyArXG4gICAgICAoKGVyciBpbnN0YW5jZW9mIEVycm9yICYmIGVycj8uc3RhY2spIHx8ICcnKVxuICApXG59XG4iXSwibmFtZXMiOlsiUkVBQ1RfUkVGUkVTSF9GVUxMX1JFTE9BRCIsIlJFQUNUX1JFRlJFU0hfRlVMTF9SRUxPQURfRlJPTV9FUlJPUiIsInJlcG9ydEludmFsaWRIbXJNZXNzYWdlIiwibWVzc2FnZSIsImVyciIsImNvbnNvbGUiLCJ3YXJuIiwiSlNPTiIsInN0cmluZ2lmeSIsIkVycm9yIiwic3RhY2siXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/shared.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/turbopack-hot-reloader-common.js":
/*!*************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/turbopack-hot-reloader-common.js ***!
  \*************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"TurbopackHmr\", ({\n    enumerable: true,\n    get: function() {\n        return TurbopackHmr;\n    }\n}));\nconst _class_private_field_loose_base = __webpack_require__(/*! @swc/helpers/_/_class_private_field_loose_base */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_class_private_field_loose_base.js\");\nconst _class_private_field_loose_key = __webpack_require__(/*! @swc/helpers/_/_class_private_field_loose_key */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_class_private_field_loose_key.js\");\n// How long to wait before reporting the HMR start, used to suppress irrelevant\n// `BUILDING` events. Does not impact reported latency.\nconst TURBOPACK_HMR_START_DELAY_MS = 100;\nvar _updatedModules = /*#__PURE__*/ _class_private_field_loose_key._(\"_updatedModules\"), _startMsSinceEpoch = /*#__PURE__*/ _class_private_field_loose_key._(\"_startMsSinceEpoch\"), _lastUpdateMsSinceEpoch = /*#__PURE__*/ _class_private_field_loose_key._(\"_lastUpdateMsSinceEpoch\"), _deferredReportHmrStartId = /*#__PURE__*/ _class_private_field_loose_key._(\"_deferredReportHmrStartId\"), // as it reports *any* compilation, including fully no-op/cached compilations\n// and those unrelated to HMR. Fixing this would require significant\n// architectural changes.\n//\n// Work around this by deferring any \"rebuilding\" message by 100ms. If we get\n// a BUILT event within that threshold and nothing has changed, just suppress\n// the message entirely.\n_runDeferredReportHmrStart = /*#__PURE__*/ _class_private_field_loose_key._(\"_runDeferredReportHmrStart\"), _cancelDeferredReportHmrStart = /*#__PURE__*/ _class_private_field_loose_key._(\"_cancelDeferredReportHmrStart\"), /** Helper for other `onEvent` methods. */ _onUpdate = /*#__PURE__*/ _class_private_field_loose_key._(\"_onUpdate\");\nclass TurbopackHmr {\n    onBuilding() {\n        _class_private_field_loose_base._(this, _lastUpdateMsSinceEpoch)[_lastUpdateMsSinceEpoch] = undefined;\n        _class_private_field_loose_base._(this, _cancelDeferredReportHmrStart)[_cancelDeferredReportHmrStart]();\n        _class_private_field_loose_base._(this, _startMsSinceEpoch)[_startMsSinceEpoch] = Date.now();\n        // report the HMR start after a short delay\n        _class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId] = setTimeout(()=>_class_private_field_loose_base._(this, _runDeferredReportHmrStart)[_runDeferredReportHmrStart](), self.__NEXT_HMR_TURBOPACK_REPORT_NOISY_NOOP_EVENTS ? 0 : TURBOPACK_HMR_START_DELAY_MS);\n    }\n    onTurbopackMessage(msg) {\n        _class_private_field_loose_base._(this, _onUpdate)[_onUpdate]();\n        const updatedModules = extractModulesFromTurbopackMessage(msg.data);\n        for (const module1 of updatedModules){\n            _class_private_field_loose_base._(this, _updatedModules)[_updatedModules].add(module1);\n        }\n    }\n    onServerComponentChanges() {\n        _class_private_field_loose_base._(this, _onUpdate)[_onUpdate]();\n    }\n    onReloadPage() {\n        _class_private_field_loose_base._(this, _onUpdate)[_onUpdate]();\n    }\n    onPageAddRemove() {\n        _class_private_field_loose_base._(this, _onUpdate)[_onUpdate]();\n    }\n    /**\n   * @returns `null` if the caller should ignore the update entirely. Returns an\n   *   object with `hasUpdates: false` if the caller should report the end of\n   *   the HMR in the browser console, but the HMR was a no-op.\n   */ onBuilt() {\n        // Check that we got *any* `TurbopackMessageAction`, even if\n        // `updatedModules` is empty (not everything gets recorded there).\n        //\n        // There's also a case where `onBuilt` gets called before `onBuilding`,\n        // which can happen during initial page load. Ignore that too!\n        const hasUpdates = _class_private_field_loose_base._(this, _lastUpdateMsSinceEpoch)[_lastUpdateMsSinceEpoch] != null && _class_private_field_loose_base._(this, _startMsSinceEpoch)[_startMsSinceEpoch] != null;\n        if (!hasUpdates && _class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId] != null) {\n            // suppress the update entirely\n            _class_private_field_loose_base._(this, _cancelDeferredReportHmrStart)[_cancelDeferredReportHmrStart]();\n            return null;\n        }\n        _class_private_field_loose_base._(this, _runDeferredReportHmrStart)[_runDeferredReportHmrStart]();\n        var _class_private_field_loose_base__lastUpdateMsSinceEpoch;\n        const result = {\n            hasUpdates,\n            updatedModules: _class_private_field_loose_base._(this, _updatedModules)[_updatedModules],\n            startMsSinceEpoch: _class_private_field_loose_base._(this, _startMsSinceEpoch)[_startMsSinceEpoch],\n            endMsSinceEpoch: (_class_private_field_loose_base__lastUpdateMsSinceEpoch = _class_private_field_loose_base._(this, _lastUpdateMsSinceEpoch)[_lastUpdateMsSinceEpoch]) != null ? _class_private_field_loose_base__lastUpdateMsSinceEpoch : Date.now()\n        };\n        _class_private_field_loose_base._(this, _updatedModules)[_updatedModules] = new Set();\n        return result;\n    }\n    constructor(){\n        Object.defineProperty(this, _runDeferredReportHmrStart, {\n            value: runDeferredReportHmrStart\n        });\n        Object.defineProperty(this, _cancelDeferredReportHmrStart, {\n            value: cancelDeferredReportHmrStart\n        });\n        Object.defineProperty(this, _onUpdate, {\n            value: onUpdate\n        });\n        Object.defineProperty(this, _updatedModules, {\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, _startMsSinceEpoch, {\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, _lastUpdateMsSinceEpoch, {\n            writable: true,\n            value: void 0\n        });\n        Object.defineProperty(this, _deferredReportHmrStartId, {\n            writable: true,\n            value: void 0\n        });\n        _class_private_field_loose_base._(this, _updatedModules)[_updatedModules] = new Set();\n    }\n}\nfunction runDeferredReportHmrStart() {\n    if (_class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId] != null) {\n        console.log('[Fast Refresh] rebuilding');\n        _class_private_field_loose_base._(this, _cancelDeferredReportHmrStart)[_cancelDeferredReportHmrStart]();\n    }\n}\nfunction cancelDeferredReportHmrStart() {\n    clearTimeout(_class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId]);\n    _class_private_field_loose_base._(this, _deferredReportHmrStartId)[_deferredReportHmrStartId] = undefined;\n}\nfunction onUpdate() {\n    _class_private_field_loose_base._(this, _runDeferredReportHmrStart)[_runDeferredReportHmrStart]();\n    _class_private_field_loose_base._(this, _lastUpdateMsSinceEpoch)[_lastUpdateMsSinceEpoch] = Date.now();\n}\nfunction extractModulesFromTurbopackMessage(data) {\n    const updatedModules = new Set();\n    const updates = Array.isArray(data) ? data : [\n        data\n    ];\n    for (const update of updates){\n        // TODO this won't capture changes to CSS since they don't result in a \"merged\" update\n        if (update.type !== 'partial' || update.instruction.type !== 'ChunkListUpdate' || update.instruction.merged === undefined) {\n            continue;\n        }\n        for (const mergedUpdate of update.instruction.merged){\n            for (const name of Object.keys(mergedUpdate.entries)){\n                const res = /(.*)\\s+\\[.*/.exec(name);\n                if (res === null) {\n                    console.error('[Turbopack HMR] Expected module to match pattern: ' + name);\n                    continue;\n                }\n                updatedModules.add(res[1]);\n            }\n        }\n    }\n    return updatedModules;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=turbopack-hot-reloader-common.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvZGV2L2hvdC1yZWxvYWRlci90dXJib3BhY2staG90LXJlbG9hZGVyLWNvbW1vbi5qcyIsIm1hcHBpbmdzIjoiOzs7O2dEQW9CYUE7OztlQUFBQTs7Ozs7QUFYYiwrRUFBK0U7QUFDL0UsdURBQXVEO0FBQ3ZELE1BQU1DLCtCQUErQjtJQVVuQyxxRkFDQSwyRkFDQSxxR0FDQSx5R0FNQSw0RUFBNEUsQ0FDQztBQUM3RSxvRUFBb0U7QUFDcEUseUJBQXlCO0FBQ3pCLEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsNkVBQTZFO0FBQzdFLHdCQUF3QjtBQUN4QiwyR0FPQSxpSEFvQkEsd0NBQXdDLEdBQ3hDO0FBOUNLLE1BQU1EO0lBOEJYRSxhQUFhO1FBQ1gsc0NBQUksRUFBQyxvREFBMEJDO1FBQy9CLHNDQUFJLEVBQUM7UUFDTCxzQ0FBSSxFQUFDLDBDQUFxQkMsS0FBS0MsR0FBRztRQUVsQywyQ0FBMkM7UUFDM0Msc0NBQUksRUFBQyx3REFBNEJDLFdBQy9CLElBQU0sc0NBQUksRUFBQywyREFDWCxLQUNLRSw2Q0FBNkMsR0FDOUMsSUFDQVAsaUJBSHNFO0lBSzlFO0lBUUFRLG1CQUFtQkMsR0FBMkIsRUFBRTtRQUM5QyxzQ0FBSSxFQUFDO1FBQ0wsTUFBTUMsaUJBQWlCQyxtQ0FBbUNGLElBQUlHLElBQUk7UUFDbEUsS0FBSyxNQUFNQyxXQUFVSCxlQUFnQjtZQUNuQyxzQ0FBSSxFQUFDLGtDQUFnQkksR0FBRyxDQUFDRDtRQUMzQjtJQUNGO0lBRUFFLDJCQUEyQjtRQUN6QixzQ0FBSSxFQUFDO0lBQ1A7SUFFQUMsZUFBZTtRQUNiLHNDQUFJLEVBQUM7SUFDUDtJQUVBQyxrQkFBa0I7UUFDaEIsc0NBQUksRUFBQztJQUNQO0lBRUE7Ozs7R0FJQyxHQUNEQyxVQUE0QjtRQUMxQiw0REFBNEQ7UUFDNUQsa0VBQWtFO1FBQ2xFLEVBQUU7UUFDRix1RUFBdUU7UUFDdkUsOERBQThEO1FBQzlELE1BQU1DLGFBQ0osc0NBQUksRUFBQyxxREFBMkIsUUFBUSxzQ0FBSSxFQUFDLDJDQUFzQjtRQUNyRSxJQUFJLENBQUNBLGNBQWMsc0NBQUksRUFBQyx5REFBNkIsTUFBTTtZQUN6RCwrQkFBK0I7WUFDL0Isc0NBQUksRUFBQztZQUNMLE9BQU87UUFDVDtRQUNBLHNDQUFJLEVBQUM7O1FBRUwsTUFBTUMsU0FBUztZQUNiRDtZQUNBVCxjQUFjLEVBQUUsc0NBQUksRUFBQztZQUNyQlcsaUJBQWlCLEVBQUUsc0NBQUksRUFBQztZQUN4QkMsaUJBQWlCLGlHQUFJLEVBQUMsdUhBQTJCbkIsS0FBS0MsR0FBRztRQUMzRDtRQUNBLHNDQUFJLEVBQUMsb0NBQWtCLElBQUltQjtRQUMzQixPQUFPSDtJQUNUO0lBN0ZBSSxhQUFjO1FBWWQ7bUJBQUE7O1FBT0E7bUJBQUE7O1FBcUJBO21CQUFBOztRQTdDQTs7bUJBQUE7O1FBQ0E7O21CQUFBOztRQUNBOzttQkFBQTs7UUFDQTs7bUJBQUE7O1FBR0Usc0NBQUksRUFBQyxvQ0FBa0IsSUFBSUQ7SUFDN0I7QUE0RkY7QUFsRkU7SUFDRSxJQUFJLHNDQUFJLEVBQUMseURBQTZCLE1BQU07UUFDMUNFLFFBQVFDLEdBQUcsQ0FBQztRQUNaLHNDQUFJLEVBQUM7SUFDUDtBQUNGO0FBRUE7SUFDRUMsYUFBYSxzQ0FBSSxFQUFDO0lBQ2xCLHNDQUFJLEVBQUMsd0RBQTRCekI7QUFDbkM7QUFrQkE7SUFDRSxzQ0FBSSxFQUFDO0lBQ0wsc0NBQUksRUFBQyxvREFBMEJDLEtBQUtDLEdBQUc7QUFDekM7QUFxREYsU0FBU08sbUNBQ1BDLElBQXlDO0lBRXpDLE1BQU1GLGlCQUE4QixJQUFJYTtJQUV4QyxNQUFNSyxVQUFVQyxNQUFNQyxPQUFPLENBQUNsQixRQUFRQSxPQUFPO1FBQUNBO0tBQUs7SUFDbkQsS0FBSyxNQUFNbUIsVUFBVUgsUUFBUztRQUM1QixzRkFBc0Y7UUFDdEYsSUFDRUcsT0FBT0MsSUFBSSxLQUFLLGFBQ2hCRCxPQUFPRSxXQUFXLENBQUNELElBQUksS0FBSyxxQkFDNUJELE9BQU9FLFdBQVcsQ0FBQ0MsTUFBTSxLQUFLaEMsV0FDOUI7WUFDQTtRQUNGO1FBRUEsS0FBSyxNQUFNaUMsZ0JBQWdCSixPQUFPRSxXQUFXLENBQUNDLE1BQU0sQ0FBRTtZQUNwRCxLQUFLLE1BQU1FLFFBQVFDLE9BQU9DLElBQUksQ0FBQ0gsYUFBYUksT0FBTyxFQUFHO2dCQUNwRCxNQUFNQyxNQUFNLGNBQWNDLElBQUksQ0FBQ0w7Z0JBQy9CLElBQUlJLFFBQVEsTUFBTTtvQkFDaEJmLFFBQVFpQixLQUFLLENBQ1gsdURBQXVETjtvQkFFekQ7Z0JBQ0Y7Z0JBRUExQixlQUFlSSxHQUFHLENBQUMwQixHQUFHLENBQUMsRUFBRTtZQUMzQjtRQUNGO0lBQ0Y7SUFFQSxPQUFPOUI7QUFDVCIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2NsaWVudC9kZXYvaG90LXJlbG9hZGVyL3R1cmJvcGFjay1ob3QtcmVsb2FkZXItY29tbW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVHVyYm9wYWNrTWVzc2FnZUFjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NlcnZlci9kZXYvaG90LXJlbG9hZGVyLXR5cGVzJ1xuaW1wb3J0IHR5cGUgeyBVcGRhdGUgYXMgVHVyYm9wYWNrVXBkYXRlIH0gZnJvbSAnLi4vLi4vLi4vYnVpbGQvc3djL3R5cGVzJ1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIF9fTkVYVF9ITVJfVFVSQk9QQUNLX1JFUE9SVF9OT0lTWV9OT09QX0VWRU5UUzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICB9XG59XG5cbi8vIEhvdyBsb25nIHRvIHdhaXQgYmVmb3JlIHJlcG9ydGluZyB0aGUgSE1SIHN0YXJ0LCB1c2VkIHRvIHN1cHByZXNzIGlycmVsZXZhbnRcbi8vIGBCVUlMRElOR2AgZXZlbnRzLiBEb2VzIG5vdCBpbXBhY3QgcmVwb3J0ZWQgbGF0ZW5jeS5cbmNvbnN0IFRVUkJPUEFDS19ITVJfU1RBUlRfREVMQVlfTVMgPSAxMDBcblxuaW50ZXJmYWNlIEhtclVwZGF0ZSB7XG4gIGhhc1VwZGF0ZXM6IGJvb2xlYW5cbiAgdXBkYXRlZE1vZHVsZXM6IFNldDxzdHJpbmc+XG4gIHN0YXJ0TXNTaW5jZUVwb2NoOiBudW1iZXJcbiAgZW5kTXNTaW5jZUVwb2NoOiBudW1iZXJcbn1cblxuZXhwb3J0IGNsYXNzIFR1cmJvcGFja0htciB7XG4gICN1cGRhdGVkTW9kdWxlczogU2V0PHN0cmluZz5cbiAgI3N0YXJ0TXNTaW5jZUVwb2NoOiBudW1iZXIgfCB1bmRlZmluZWRcbiAgI2xhc3RVcGRhdGVNc1NpbmNlRXBvY2g6IG51bWJlciB8IHVuZGVmaW5lZFxuICAjZGVmZXJyZWRSZXBvcnRIbXJTdGFydElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZFxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuI3VwZGF0ZWRNb2R1bGVzID0gbmV3IFNldCgpXG4gIH1cblxuICAvLyBIQUNLOiBUdXJib3BhY2sgdGVuZHMgdG8gZ2VuZXJhdGUgYSBsb3Qgb2YgaXJyZWxldmFudCBcIkJVSUxESU5HXCIgYWN0aW9ucyxcbiAgLy8gYXMgaXQgcmVwb3J0cyAqYW55KiBjb21waWxhdGlvbiwgaW5jbHVkaW5nIGZ1bGx5IG5vLW9wL2NhY2hlZCBjb21waWxhdGlvbnNcbiAgLy8gYW5kIHRob3NlIHVucmVsYXRlZCB0byBITVIuIEZpeGluZyB0aGlzIHdvdWxkIHJlcXVpcmUgc2lnbmlmaWNhbnRcbiAgLy8gYXJjaGl0ZWN0dXJhbCBjaGFuZ2VzLlxuICAvL1xuICAvLyBXb3JrIGFyb3VuZCB0aGlzIGJ5IGRlZmVycmluZyBhbnkgXCJyZWJ1aWxkaW5nXCIgbWVzc2FnZSBieSAxMDBtcy4gSWYgd2UgZ2V0XG4gIC8vIGEgQlVJTFQgZXZlbnQgd2l0aGluIHRoYXQgdGhyZXNob2xkIGFuZCBub3RoaW5nIGhhcyBjaGFuZ2VkLCBqdXN0IHN1cHByZXNzXG4gIC8vIHRoZSBtZXNzYWdlIGVudGlyZWx5LlxuICAjcnVuRGVmZXJyZWRSZXBvcnRIbXJTdGFydCgpIHtcbiAgICBpZiAodGhpcy4jZGVmZXJyZWRSZXBvcnRIbXJTdGFydElkICE9IG51bGwpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbRmFzdCBSZWZyZXNoXSByZWJ1aWxkaW5nJylcbiAgICAgIHRoaXMuI2NhbmNlbERlZmVycmVkUmVwb3J0SG1yU3RhcnQoKVxuICAgIH1cbiAgfVxuXG4gICNjYW5jZWxEZWZlcnJlZFJlcG9ydEhtclN0YXJ0KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLiNkZWZlcnJlZFJlcG9ydEhtclN0YXJ0SWQpXG4gICAgdGhpcy4jZGVmZXJyZWRSZXBvcnRIbXJTdGFydElkID0gdW5kZWZpbmVkXG4gIH1cblxuICBvbkJ1aWxkaW5nKCkge1xuICAgIHRoaXMuI2xhc3RVcGRhdGVNc1NpbmNlRXBvY2ggPSB1bmRlZmluZWRcbiAgICB0aGlzLiNjYW5jZWxEZWZlcnJlZFJlcG9ydEhtclN0YXJ0KClcbiAgICB0aGlzLiNzdGFydE1zU2luY2VFcG9jaCA9IERhdGUubm93KClcblxuICAgIC8vIHJlcG9ydCB0aGUgSE1SIHN0YXJ0IGFmdGVyIGEgc2hvcnQgZGVsYXlcbiAgICB0aGlzLiNkZWZlcnJlZFJlcG9ydEhtclN0YXJ0SWQgPSBzZXRUaW1lb3V0KFxuICAgICAgKCkgPT4gdGhpcy4jcnVuRGVmZXJyZWRSZXBvcnRIbXJTdGFydCgpLFxuICAgICAgLy8gZGVidWdnaW5nIGZlYXR1cmU6IGRvbid0IGRlZmVyL3N1cHByZXNzIG5vaXN5IG5vLW9wIEhNUiB1cGRhdGUgbWVzc2FnZXNcbiAgICAgIHNlbGYuX19ORVhUX0hNUl9UVVJCT1BBQ0tfUkVQT1JUX05PSVNZX05PT1BfRVZFTlRTXG4gICAgICAgID8gMFxuICAgICAgICA6IFRVUkJPUEFDS19ITVJfU1RBUlRfREVMQVlfTVNcbiAgICApXG4gIH1cblxuICAvKiogSGVscGVyIGZvciBvdGhlciBgb25FdmVudGAgbWV0aG9kcy4gKi9cbiAgI29uVXBkYXRlKCkge1xuICAgIHRoaXMuI3J1bkRlZmVycmVkUmVwb3J0SG1yU3RhcnQoKVxuICAgIHRoaXMuI2xhc3RVcGRhdGVNc1NpbmNlRXBvY2ggPSBEYXRlLm5vdygpXG4gIH1cblxuICBvblR1cmJvcGFja01lc3NhZ2UobXNnOiBUdXJib3BhY2tNZXNzYWdlQWN0aW9uKSB7XG4gICAgdGhpcy4jb25VcGRhdGUoKVxuICAgIGNvbnN0IHVwZGF0ZWRNb2R1bGVzID0gZXh0cmFjdE1vZHVsZXNGcm9tVHVyYm9wYWNrTWVzc2FnZShtc2cuZGF0YSlcbiAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiB1cGRhdGVkTW9kdWxlcykge1xuICAgICAgdGhpcy4jdXBkYXRlZE1vZHVsZXMuYWRkKG1vZHVsZSlcbiAgICB9XG4gIH1cblxuICBvblNlcnZlckNvbXBvbmVudENoYW5nZXMoKSB7XG4gICAgdGhpcy4jb25VcGRhdGUoKVxuICB9XG5cbiAgb25SZWxvYWRQYWdlKCkge1xuICAgIHRoaXMuI29uVXBkYXRlKClcbiAgfVxuXG4gIG9uUGFnZUFkZFJlbW92ZSgpIHtcbiAgICB0aGlzLiNvblVwZGF0ZSgpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgYG51bGxgIGlmIHRoZSBjYWxsZXIgc2hvdWxkIGlnbm9yZSB0aGUgdXBkYXRlIGVudGlyZWx5LiBSZXR1cm5zIGFuXG4gICAqICAgb2JqZWN0IHdpdGggYGhhc1VwZGF0ZXM6IGZhbHNlYCBpZiB0aGUgY2FsbGVyIHNob3VsZCByZXBvcnQgdGhlIGVuZCBvZlxuICAgKiAgIHRoZSBITVIgaW4gdGhlIGJyb3dzZXIgY29uc29sZSwgYnV0IHRoZSBITVIgd2FzIGEgbm8tb3AuXG4gICAqL1xuICBvbkJ1aWx0KCk6IEhtclVwZGF0ZSB8IG51bGwge1xuICAgIC8vIENoZWNrIHRoYXQgd2UgZ290ICphbnkqIGBUdXJib3BhY2tNZXNzYWdlQWN0aW9uYCwgZXZlbiBpZlxuICAgIC8vIGB1cGRhdGVkTW9kdWxlc2AgaXMgZW1wdHkgKG5vdCBldmVyeXRoaW5nIGdldHMgcmVjb3JkZWQgdGhlcmUpLlxuICAgIC8vXG4gICAgLy8gVGhlcmUncyBhbHNvIGEgY2FzZSB3aGVyZSBgb25CdWlsdGAgZ2V0cyBjYWxsZWQgYmVmb3JlIGBvbkJ1aWxkaW5nYCxcbiAgICAvLyB3aGljaCBjYW4gaGFwcGVuIGR1cmluZyBpbml0aWFsIHBhZ2UgbG9hZC4gSWdub3JlIHRoYXQgdG9vIVxuICAgIGNvbnN0IGhhc1VwZGF0ZXMgPVxuICAgICAgdGhpcy4jbGFzdFVwZGF0ZU1zU2luY2VFcG9jaCAhPSBudWxsICYmIHRoaXMuI3N0YXJ0TXNTaW5jZUVwb2NoICE9IG51bGxcbiAgICBpZiAoIWhhc1VwZGF0ZXMgJiYgdGhpcy4jZGVmZXJyZWRSZXBvcnRIbXJTdGFydElkICE9IG51bGwpIHtcbiAgICAgIC8vIHN1cHByZXNzIHRoZSB1cGRhdGUgZW50aXJlbHlcbiAgICAgIHRoaXMuI2NhbmNlbERlZmVycmVkUmVwb3J0SG1yU3RhcnQoKVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgdGhpcy4jcnVuRGVmZXJyZWRSZXBvcnRIbXJTdGFydCgpXG5cbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBoYXNVcGRhdGVzLFxuICAgICAgdXBkYXRlZE1vZHVsZXM6IHRoaXMuI3VwZGF0ZWRNb2R1bGVzLFxuICAgICAgc3RhcnRNc1NpbmNlRXBvY2g6IHRoaXMuI3N0YXJ0TXNTaW5jZUVwb2NoISxcbiAgICAgIGVuZE1zU2luY2VFcG9jaDogdGhpcy4jbGFzdFVwZGF0ZU1zU2luY2VFcG9jaCA/PyBEYXRlLm5vdygpLFxuICAgIH1cbiAgICB0aGlzLiN1cGRhdGVkTW9kdWxlcyA9IG5ldyBTZXQoKVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0TW9kdWxlc0Zyb21UdXJib3BhY2tNZXNzYWdlKFxuICBkYXRhOiBUdXJib3BhY2tVcGRhdGUgfCBUdXJib3BhY2tVcGRhdGVbXVxuKTogU2V0PHN0cmluZz4ge1xuICBjb25zdCB1cGRhdGVkTW9kdWxlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KClcblxuICBjb25zdCB1cGRhdGVzID0gQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbZGF0YV1cbiAgZm9yIChjb25zdCB1cGRhdGUgb2YgdXBkYXRlcykge1xuICAgIC8vIFRPRE8gdGhpcyB3b24ndCBjYXB0dXJlIGNoYW5nZXMgdG8gQ1NTIHNpbmNlIHRoZXkgZG9uJ3QgcmVzdWx0IGluIGEgXCJtZXJnZWRcIiB1cGRhdGVcbiAgICBpZiAoXG4gICAgICB1cGRhdGUudHlwZSAhPT0gJ3BhcnRpYWwnIHx8XG4gICAgICB1cGRhdGUuaW5zdHJ1Y3Rpb24udHlwZSAhPT0gJ0NodW5rTGlzdFVwZGF0ZScgfHxcbiAgICAgIHVwZGF0ZS5pbnN0cnVjdGlvbi5tZXJnZWQgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG1lcmdlZFVwZGF0ZSBvZiB1cGRhdGUuaW5zdHJ1Y3Rpb24ubWVyZ2VkKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMobWVyZ2VkVXBkYXRlLmVudHJpZXMpKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IC8oLiopXFxzK1xcWy4qLy5leGVjKG5hbWUpXG4gICAgICAgIGlmIChyZXMgPT09IG51bGwpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJ1tUdXJib3BhY2sgSE1SXSBFeHBlY3RlZCBtb2R1bGUgdG8gbWF0Y2ggcGF0dGVybjogJyArIG5hbWVcbiAgICAgICAgICApXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZWRNb2R1bGVzLmFkZChyZXNbMV0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZWRNb2R1bGVzXG59XG4iXSwibmFtZXMiOlsiVHVyYm9wYWNrSG1yIiwiVFVSQk9QQUNLX0hNUl9TVEFSVF9ERUxBWV9NUyIsIm9uQnVpbGRpbmciLCJ1bmRlZmluZWQiLCJEYXRlIiwibm93Iiwic2V0VGltZW91dCIsInNlbGYiLCJfX05FWFRfSE1SX1RVUkJPUEFDS19SRVBPUlRfTk9JU1lfTk9PUF9FVkVOVFMiLCJvblR1cmJvcGFja01lc3NhZ2UiLCJtc2ciLCJ1cGRhdGVkTW9kdWxlcyIsImV4dHJhY3RNb2R1bGVzRnJvbVR1cmJvcGFja01lc3NhZ2UiLCJkYXRhIiwibW9kdWxlIiwiYWRkIiwib25TZXJ2ZXJDb21wb25lbnRDaGFuZ2VzIiwib25SZWxvYWRQYWdlIiwib25QYWdlQWRkUmVtb3ZlIiwib25CdWlsdCIsImhhc1VwZGF0ZXMiLCJyZXN1bHQiLCJzdGFydE1zU2luY2VFcG9jaCIsImVuZE1zU2luY2VFcG9jaCIsIlNldCIsImNvbnN0cnVjdG9yIiwiY29uc29sZSIsImxvZyIsImNsZWFyVGltZW91dCIsInVwZGF0ZXMiLCJBcnJheSIsImlzQXJyYXkiLCJ1cGRhdGUiLCJ0eXBlIiwiaW5zdHJ1Y3Rpb24iLCJtZXJnZWQiLCJtZXJnZWRVcGRhdGUiLCJuYW1lIiwiT2JqZWN0Iiwia2V5cyIsImVudHJpZXMiLCJyZXMiLCJleGVjIiwiZXJyb3IiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/turbopack-hot-reloader-common.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/noop-turbopack-hmr.js":
/*!*************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/noop-turbopack-hmr.js ***!
  \*************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("// The Turbopack HMR client can't be properly omitted at the moment (WEB-1589),\n// so instead we remap its import to this file in webpack builds.\n\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"connect\", ({\n    enumerable: true,\n    get: function() {\n        return connect;\n    }\n}));\nfunction connect() {}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=noop-turbopack-hmr.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvZGV2L25vb3AtdHVyYm9wYWNrLWhtci5qcyIsIm1hcHBpbmdzIjoiQUFBQSwrRUFBK0U7QUFDL0UsaUVBQWlFOzs7OzsyQ0FDakRBOzs7ZUFBQUE7OztBQUFULFNBQVNBLFdBQVciLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL2NsaWVudC9kZXYvbm9vcC10dXJib3BhY2staG1yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSBUdXJib3BhY2sgSE1SIGNsaWVudCBjYW4ndCBiZSBwcm9wZXJseSBvbWl0dGVkIGF0IHRoZSBtb21lbnQgKFdFQi0xNTg5KSxcbi8vIHNvIGluc3RlYWQgd2UgcmVtYXAgaXRzIGltcG9ydCB0byB0aGlzIGZpbGUgaW4gd2VicGFjayBidWlsZHMuXG5leHBvcnQgZnVuY3Rpb24gY29ubmVjdCgpIHt9XG4iXSwibmFtZXMiOlsiY29ubmVjdCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/noop-turbopack-hmr.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/report-hmr-latency.js":
/*!*************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/report-hmr-latency.js ***!
  \*************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n    enumerable: true,\n    get: function() {\n        return reportHmrLatency;\n    }\n}));\nfunction reportHmrLatency(sendMessage, updatedModules, startMsSinceEpoch, endMsSinceEpoch, hasUpdate) {\n    if (hasUpdate === void 0) hasUpdate = true;\n    const latencyMs = endMsSinceEpoch - startMsSinceEpoch;\n    console.log(\"[Fast Refresh] done in \" + latencyMs + \"ms\");\n    if (!hasUpdate) {\n        return;\n    }\n    sendMessage(JSON.stringify({\n        event: 'client-hmr-latency',\n        id: window.__nextDevClientId,\n        startTime: startMsSinceEpoch,\n        endTime: endMsSinceEpoch,\n        page: window.location.pathname,\n        updatedModules,\n        // Whether the page (tab) was hidden at the time the event occurred.\n        // This can impact the accuracy of the event's timing.\n        isPageHidden: document.visibilityState === 'hidden'\n    }));\n    if (self.__NEXT_HMR_LATENCY_CB) {\n        self.__NEXT_HMR_LATENCY_CB(latencyMs);\n    }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=report-hmr-latency.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvZGV2L3JlcG9ydC1obXItbGF0ZW5jeS5qcyIsIm1hcHBpbmdzIjoiOzs7OzJDQWlCQTs7O2VBQXdCQTs7O0FBQVQsU0FBU0EsaUJBQ3RCQyxXQUFzQyxFQUN0Q0MsY0FBOEMsRUFDOUNDLGlCQUF5QixFQUN6QkMsZUFBdUIsRUFDdkJDLFNBQXlCO0lBQXpCQSxJQUFBQSxjQUFBQSxLQUFBQSxHQUFBQSxZQUFxQjtJQUVyQixNQUFNQyxZQUFZRixrQkFBa0JEO0lBQ3BDSSxRQUFRQyxHQUFHLENBQUUsNEJBQXlCRixZQUFVO0lBQ2hELElBQUksQ0FBQ0QsV0FBVztRQUNkO0lBQ0Y7SUFDQUosWUFDRVEsS0FBS0MsU0FBUyxDQUFDO1FBQ2JDLE9BQU87UUFDUEMsSUFBSUMsT0FBT0MsaUJBQWlCO1FBQzVCQyxXQUFXWjtRQUNYYSxTQUFTWjtRQUNUYSxNQUFNSixPQUFPSyxRQUFRLENBQUNDLFFBQVE7UUFDOUJqQjtRQUNBLG9FQUFvRTtRQUNwRSxzREFBc0Q7UUFDdERrQixjQUFjQyxTQUFTQyxlQUFlLEtBQUs7SUFDN0M7SUFFRixJQUFJQyxLQUFLQyxxQkFBcUIsRUFBRTtRQUM5QkQsS0FBS0MscUJBQXFCLENBQUNsQjtJQUM3QjtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL3NyYy9jbGllbnQvZGV2L3JlcG9ydC1obXItbGF0ZW5jeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJkZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIF9fTkVYVF9ITVJfTEFURU5DWV9DQjogKChsYXRlbmN5TXM6IG51bWJlcikgPT4gdm9pZCkgfCB1bmRlZmluZWRcbiAgfVxufVxuXG4vKipcbiAqIExvZ3MgaW5mb3JtYXRpb24gYWJvdXQgYSBjb21wbGV0ZWQgSE1SIHRvIHRoZSBjb25zb2xlLCB0aGUgc2VydmVyICh2aWEgYVxuICogYGNsaWVudC1obXItbGF0ZW5jeWAgZXZlbnQpLCBhbmQgdG8gYHNlbGYuX19ORVhUX0hNUl9MQVRFTkNZX0NCYCAoYSBkZWJ1Z2dpbmdcbiAqIGhvb2spLlxuICpcbiAqIEBwYXJhbSBoYXNVcGRhdGUgU2V0IHRoaXMgdG8gYGZhbHNlYCB0byBhdm9pZCByZXBvcnRpbmcgdGhlIEhNUiBldmVudCB2aWEgYVxuICogICBgY2xpZW50LWhtci1sYXRlbmN5YCBldmVudCBvciB0byBgc2VsZi5fX05FWFRfSE1SX0xBVEVOQ1lfQ0JgLiBVc2VkIGJ5XG4gKiAgIHR1cmJvcGFjayB3aGVuIHdlIG11c3QgcmVwb3J0IGEgbWVzc2FnZSB0byB0aGUgYnJvd3NlciBjb25zb2xlIChiZWNhdXNlIHdlXG4gKiAgIGFscmVhZHkgbG9nZ2VkIGEgXCJyZWJ1aWxkaW5nXCIgbWVzc2FnZSksIGJ1dCBpdCdzIG5vdCBhIHJlYWwgSE1SLCBzbyB3ZVxuICogICBkb24ndCB3YW50IHRvIGltcGFjdCBvdXIgdGVsZW1ldHJ5LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXBvcnRIbXJMYXRlbmN5KFxuICBzZW5kTWVzc2FnZTogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCxcbiAgdXBkYXRlZE1vZHVsZXM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nIHwgbnVtYmVyPixcbiAgc3RhcnRNc1NpbmNlRXBvY2g6IG51bWJlcixcbiAgZW5kTXNTaW5jZUVwb2NoOiBudW1iZXIsXG4gIGhhc1VwZGF0ZTogYm9vbGVhbiA9IHRydWVcbikge1xuICBjb25zdCBsYXRlbmN5TXMgPSBlbmRNc1NpbmNlRXBvY2ggLSBzdGFydE1zU2luY2VFcG9jaFxuICBjb25zb2xlLmxvZyhgW0Zhc3QgUmVmcmVzaF0gZG9uZSBpbiAke2xhdGVuY3lNc31tc2ApXG4gIGlmICghaGFzVXBkYXRlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgc2VuZE1lc3NhZ2UoXG4gICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZXZlbnQ6ICdjbGllbnQtaG1yLWxhdGVuY3knLFxuICAgICAgaWQ6IHdpbmRvdy5fX25leHREZXZDbGllbnRJZCxcbiAgICAgIHN0YXJ0VGltZTogc3RhcnRNc1NpbmNlRXBvY2gsXG4gICAgICBlbmRUaW1lOiBlbmRNc1NpbmNlRXBvY2gsXG4gICAgICBwYWdlOiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICB1cGRhdGVkTW9kdWxlcyxcbiAgICAgIC8vIFdoZXRoZXIgdGhlIHBhZ2UgKHRhYikgd2FzIGhpZGRlbiBhdCB0aGUgdGltZSB0aGUgZXZlbnQgb2NjdXJyZWQuXG4gICAgICAvLyBUaGlzIGNhbiBpbXBhY3QgdGhlIGFjY3VyYWN5IG9mIHRoZSBldmVudCdzIHRpbWluZy5cbiAgICAgIGlzUGFnZUhpZGRlbjogZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJyxcbiAgICB9KVxuICApXG4gIGlmIChzZWxmLl9fTkVYVF9ITVJfTEFURU5DWV9DQikge1xuICAgIHNlbGYuX19ORVhUX0hNUl9MQVRFTkNZX0NCKGxhdGVuY3lNcylcbiAgfVxufVxuIl0sIm5hbWVzIjpbInJlcG9ydEhtckxhdGVuY3kiLCJzZW5kTWVzc2FnZSIsInVwZGF0ZWRNb2R1bGVzIiwic3RhcnRNc1NpbmNlRXBvY2giLCJlbmRNc1NpbmNlRXBvY2giLCJoYXNVcGRhdGUiLCJsYXRlbmN5TXMiLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiaWQiLCJ3aW5kb3ciLCJfX25leHREZXZDbGllbnRJZCIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJwYWdlIiwibG9jYXRpb24iLCJwYXRobmFtZSIsImlzUGFnZUhpZGRlbiIsImRvY3VtZW50IiwidmlzaWJpbGl0eVN0YXRlIiwic2VsZiIsIl9fTkVYVF9ITVJfTEFURU5DWV9DQiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/report-hmr-latency.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/runtime-error-handler.js":
/*!****************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/runtime-error-handler.js ***!
  \****************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"RuntimeErrorHandler\", ({\n    enumerable: true,\n    get: function() {\n        return RuntimeErrorHandler;\n    }\n}));\nconst RuntimeErrorHandler = {\n    hadRuntimeError: false\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=runtime-error-handler.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvZGV2L3J1bnRpbWUtZXJyb3ItaGFuZGxlci5qcyIsIm1hcHBpbmdzIjoiOzs7O3VEQUFhQTs7O2VBQUFBOzs7QUFBTixNQUFNQSxzQkFBc0I7SUFDakNDLGlCQUFpQjtBQUNuQiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9zcmMvY2xpZW50L2Rldi9ydW50aW1lLWVycm9yLWhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFJ1bnRpbWVFcnJvckhhbmRsZXIgPSB7XG4gIGhhZFJ1bnRpbWVFcnJvcjogZmFsc2UsXG59XG4iXSwibmFtZXMiOlsiUnVudGltZUVycm9ySGFuZGxlciIsImhhZFJ1bnRpbWVFcnJvciJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/runtime-error-handler.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/flight-data-helpers.js":
/*!**********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/flight-data-helpers.js ***!
  \**********************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    getFlightDataPartsFromPath: function() {\n        return getFlightDataPartsFromPath;\n    },\n    getNextFlightSegmentPath: function() {\n        return getNextFlightSegmentPath;\n    },\n    normalizeFlightData: function() {\n        return normalizeFlightData;\n    },\n    prepareFlightRouterStateForRequest: function() {\n        return prepareFlightRouterStateForRequest;\n    }\n});\nconst _segment = __webpack_require__(/*! ../shared/lib/segment */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/segment.js\");\nfunction getFlightDataPartsFromPath(flightDataPath) {\n    // Pick the last 4 items from the `FlightDataPath` to get the [tree, seedData, viewport, isHeadPartial].\n    const flightDataPathLength = 4;\n    // tree, seedData, and head are *always* the last three items in the `FlightDataPath`.\n    const [tree, seedData, head, isHeadPartial] = flightDataPath.slice(-flightDataPathLength);\n    // The `FlightSegmentPath` is everything except the last three items. For a root render, it won't be present.\n    const segmentPath = flightDataPath.slice(0, -flightDataPathLength);\n    var _segmentPath_;\n    return {\n        // TODO: Unify these two segment path helpers. We are inconsistently pushing an empty segment (\"\")\n        // to the start of the segment path in some places which makes it hard to use solely the segment path.\n        // Look for \"// TODO-APP: remove ''\" in the codebase.\n        pathToSegment: segmentPath.slice(0, -1),\n        segmentPath,\n        // if the `FlightDataPath` corresponds with the root, there'll be no segment path,\n        // in which case we default to ''.\n        segment: (_segmentPath_ = segmentPath[segmentPath.length - 1]) != null ? _segmentPath_ : '',\n        tree,\n        seedData,\n        head,\n        isHeadPartial,\n        isRootRender: flightDataPath.length === flightDataPathLength\n    };\n}\nfunction getNextFlightSegmentPath(flightSegmentPath) {\n    // Since `FlightSegmentPath` is a repeated tuple of `Segment` and `ParallelRouteKey`, we slice off two items\n    // to get the next segment path.\n    return flightSegmentPath.slice(2);\n}\nfunction normalizeFlightData(flightData) {\n    // FlightData can be a string when the server didn't respond with a proper flight response,\n    // or when a redirect happens, to signal to the client that it needs to perform an MPA navigation.\n    if (typeof flightData === 'string') {\n        return flightData;\n    }\n    return flightData.map(getFlightDataPartsFromPath);\n}\nfunction prepareFlightRouterStateForRequest(flightRouterState, isHmrRefresh) {\n    // HMR requests need the complete, unmodified state for proper functionality\n    if (isHmrRefresh) {\n        return encodeURIComponent(JSON.stringify(flightRouterState));\n    }\n    return encodeURIComponent(JSON.stringify(stripClientOnlyDataFromFlightRouterState(flightRouterState)));\n}\n/**\n * Recursively strips client-only data from FlightRouterState while preserving\n * server-needed information for proper rendering decisions.\n */ function stripClientOnlyDataFromFlightRouterState(flightRouterState) {\n    const [segment, parallelRoutes, _url, refreshMarker, isRootLayout, hasLoadingBoundary] = flightRouterState;\n    // __PAGE__ segments are always fetched from the server, so there's\n    // no need to send them up\n    const cleanedSegment = stripSearchParamsFromPageSegment(segment);\n    // Recursively process parallel routes\n    const cleanedParallelRoutes = {};\n    for (const [key, childState] of Object.entries(parallelRoutes)){\n        cleanedParallelRoutes[key] = stripClientOnlyDataFromFlightRouterState(childState);\n    }\n    const result = [\n        cleanedSegment,\n        cleanedParallelRoutes,\n        null,\n        shouldPreserveRefreshMarker(refreshMarker) ? refreshMarker : null\n    ];\n    // Append optional fields if present\n    if (isRootLayout !== undefined) {\n        result[4] = isRootLayout;\n    }\n    if (hasLoadingBoundary !== undefined) {\n        result[5] = hasLoadingBoundary;\n    }\n    return result;\n}\n/**\n * Strips search parameters from __PAGE__ segments to prevent sensitive\n * client-side data from being sent to the server.\n */ function stripSearchParamsFromPageSegment(segment) {\n    if (typeof segment === 'string' && segment.startsWith(_segment.PAGE_SEGMENT_KEY + '?')) {\n        return _segment.PAGE_SEGMENT_KEY;\n    }\n    return segment;\n}\n/**\n * Determines whether the refresh marker should be sent to the server\n * Client-only markers like 'refresh' are stripped, while server-needed markers\n * like 'refetch' and 'inside-shared-layout' are preserved.\n */ function shouldPreserveRefreshMarker(refreshMarker) {\n    return Boolean(refreshMarker && refreshMarker !== 'refresh');\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=flight-data-helpers.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvZmxpZ2h0LWRhdGEtaGVscGVycy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFnQ2dCQSwwQkFBMEI7ZUFBMUJBOztJQTRCQUMsd0JBQXdCO2VBQXhCQTs7SUFRQUMsbUJBQW1CO2VBQW5CQTs7SUFvQkFDLGtDQUFrQztlQUFsQ0E7OztxQ0EvRWlCO0FBdUIxQixTQUFTSCwyQkFDZEksY0FBOEI7SUFFOUIsd0dBQXdHO0lBQ3hHLE1BQU1DLHVCQUF1QjtJQUM3QixzRkFBc0Y7SUFDdEYsTUFBTSxDQUFDQyxNQUFNQyxVQUFVQyxNQUFNQyxjQUFjLEdBQ3pDTCxlQUFlTSxLQUFLLENBQUMsQ0FBQ0w7SUFDeEIsNkdBQTZHO0lBQzdHLE1BQU1NLGNBQWNQLGVBQWVNLEtBQUssQ0FBQyxHQUFHLENBQUNMO1FBVWxDTTtJQVJYLE9BQU87UUFDTCxrR0FBa0c7UUFDbEcsc0dBQXNHO1FBQ3RHLHFEQUFxRDtRQUNyREMsZUFBZUQsWUFBWUQsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNyQ0M7UUFDQSxrRkFBa0Y7UUFDbEYsa0NBQWtDO1FBQ2xDRSxTQUFTRixDQUFBQSxnQkFBQUEsV0FBVyxDQUFDQSxZQUFZRyxNQUFNLEdBQUcsT0FBRSxPQUFuQ0gsZ0JBQXVDO1FBQ2hETDtRQUNBQztRQUNBQztRQUNBQztRQUNBTSxjQUFjWCxlQUFlVSxNQUFNLEtBQUtUO0lBQzFDO0FBQ0Y7QUFFTyxTQUFTSix5QkFDZGUsaUJBQW9DO0lBRXBDLDRHQUE0RztJQUM1RyxnQ0FBZ0M7SUFDaEMsT0FBT0Esa0JBQWtCTixLQUFLLENBQUM7QUFDakM7QUFFTyxTQUFTUixvQkFDZGUsVUFBc0I7SUFFdEIsMkZBQTJGO0lBQzNGLGtHQUFrRztJQUNsRyxJQUFJLE9BQU9BLGVBQWUsVUFBVTtRQUNsQyxPQUFPQTtJQUNUO0lBRUEsT0FBT0EsV0FBV0MsR0FBRyxDQUFDbEI7QUFDeEI7QUFVTyxTQUFTRyxtQ0FDZGdCLGlCQUFvQyxFQUNwQ0MsWUFBc0I7SUFFdEIsNEVBQTRFO0lBQzVFLElBQUlBLGNBQWM7UUFDaEIsT0FBT0MsbUJBQW1CQyxLQUFLQyxTQUFTLENBQUNKO0lBQzNDO0lBRUEsT0FBT0UsbUJBQ0xDLEtBQUtDLFNBQVMsQ0FBQ0MseUNBQXlDTDtBQUU1RDtBQUVBOzs7Q0FHQyxHQUNELFNBQVNLLHlDQUNQTCxpQkFBb0M7SUFFcEMsTUFBTSxDQUNKTixTQUNBWSxnQkFDQUMsTUFDQUMsZUFDQUMsY0FDQUMsbUJBQ0QsR0FBR1Y7SUFFSixtRUFBbUU7SUFDbkUsMEJBQTBCO0lBQzFCLE1BQU1XLGlCQUFpQkMsaUNBQWlDbEI7SUFFeEQsc0NBQXNDO0lBQ3RDLE1BQU1tQix3QkFBOEQsQ0FBQztJQUNyRSxLQUFLLE1BQU0sQ0FBQ0MsS0FBS0MsV0FBVyxJQUFJQyxPQUFPQyxPQUFPLENBQUNYLGdCQUFpQjtRQUM5RE8scUJBQXFCLENBQUNDLElBQUksR0FDeEJULHlDQUF5Q1U7SUFDN0M7SUFFQSxNQUFNRyxTQUE0QjtRQUNoQ1A7UUFDQUU7UUFDQTtRQUNBTSw0QkFBNEJYLGlCQUFpQkEsZ0JBQWdCO0tBQzlEO0lBRUQsb0NBQW9DO0lBQ3BDLElBQUlDLGlCQUFpQlcsV0FBVztRQUM5QkYsTUFBTSxDQUFDLEVBQUUsR0FBR1Q7SUFDZDtJQUNBLElBQUlDLHVCQUF1QlUsV0FBVztRQUNwQ0YsTUFBTSxDQUFDLEVBQUUsR0FBR1I7SUFDZDtJQUVBLE9BQU9RO0FBQ1Q7QUFFQTs7O0NBR0MsR0FDRCxTQUFTTixpQ0FBaUNsQixPQUFnQjtJQUN4RCxJQUNFLE9BQU9BLFlBQVksWUFDbkJBLFFBQVEyQixVQUFVLENBQUNDLFNBQUFBLGdCQUFnQixHQUFHLE1BQ3RDO1FBQ0EsT0FBT0EsU0FBQUEsZ0JBQWdCO0lBQ3pCO0lBQ0EsT0FBTzVCO0FBQ1Q7QUFFQTs7OztDQUlDLEdBQ0QsU0FBU3lCLDRCQUNQWCxhQUFtQztJQUVuQyxPQUFPZSxRQUFRZixpQkFBaUJBLGtCQUFrQjtBQUNwRCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvc3JjL2NsaWVudC9mbGlnaHQtZGF0YS1oZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQ2FjaGVOb2RlU2VlZERhdGEsXG4gIEZsaWdodERhdGEsXG4gIEZsaWdodERhdGFQYXRoLFxuICBGbGlnaHRSb3V0ZXJTdGF0ZSxcbiAgRmxpZ2h0U2VnbWVudFBhdGgsXG4gIFNlZ21lbnQsXG59IGZyb20gJy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBIZWFkRGF0YSB9IGZyb20gJy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgUEFHRV9TRUdNRU5UX0tFWSB9IGZyb20gJy4uL3NoYXJlZC9saWIvc2VnbWVudCdcblxuZXhwb3J0IHR5cGUgTm9ybWFsaXplZEZsaWdodERhdGEgPSB7XG4gIC8qKlxuICAgKiBUaGUgZnVsbCBgRmxpZ2h0U2VnbWVudFBhdGhgIGluY2x1c2l2ZSBvZiB0aGUgZmluYWwgYFNlZ21lbnRgXG4gICAqL1xuICBzZWdtZW50UGF0aDogRmxpZ2h0U2VnbWVudFBhdGhcbiAgLyoqXG4gICAqIFRoZSBgRmxpZ2h0U2VnbWVudFBhdGhgIGV4Y2x1c2l2ZSBvZiB0aGUgZmluYWwgYFNlZ21lbnRgXG4gICAqL1xuICBwYXRoVG9TZWdtZW50OiBGbGlnaHRTZWdtZW50UGF0aFxuICBzZWdtZW50OiBTZWdtZW50XG4gIHRyZWU6IEZsaWdodFJvdXRlclN0YXRlXG4gIHNlZWREYXRhOiBDYWNoZU5vZGVTZWVkRGF0YSB8IG51bGxcbiAgaGVhZDogSGVhZERhdGFcbiAgaXNIZWFkUGFydGlhbDogYm9vbGVhblxuICBpc1Jvb3RSZW5kZXI6IGJvb2xlYW5cbn1cblxuLy8gVE9ETzogV2Ugc2hvdWxkIG9ubHkgaGF2ZSB0byBleHBvcnQgYG5vcm1hbGl6ZUZsaWdodERhdGFgLCBob3dldmVyIGJlY2F1c2UgdGhlIGluaXRpYWwgZmxpZ2h0IGRhdGFcbi8vIHRoYXQgZ2V0cyBwYXNzZWQgdG8gYGNyZWF0ZUluaXRpYWxSb3V0ZXJTdGF0ZWAgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBgRmxpZ2h0RGF0YVBhdGhgIHR5cGUgKGl0J3MgbWlzc2luZyB0aGUgcm9vdCBzZWdtZW50KVxuLy8gd2UncmUgY3VycmVudGx5IGV4cG9ydGluZyBpdCBzbyB3ZSBjYW4gdXNlIGl0IGRpcmVjdGx5LiBUaGlzIHNob3VsZCBiZSBmaXhlZCBhcyBwYXJ0IG9mIHRoZSB1bmlmaWNhdGlvbiBvZlxuLy8gdGhlIGRpZmZlcmVudCB3YXlzIHdlIGV4cHJlc3MgYEZsaWdodFNlZ21lbnRQYXRoYC5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbGlnaHREYXRhUGFydHNGcm9tUGF0aChcbiAgZmxpZ2h0RGF0YVBhdGg6IEZsaWdodERhdGFQYXRoXG4pOiBOb3JtYWxpemVkRmxpZ2h0RGF0YSB7XG4gIC8vIFBpY2sgdGhlIGxhc3QgNCBpdGVtcyBmcm9tIHRoZSBgRmxpZ2h0RGF0YVBhdGhgIHRvIGdldCB0aGUgW3RyZWUsIHNlZWREYXRhLCB2aWV3cG9ydCwgaXNIZWFkUGFydGlhbF0uXG4gIGNvbnN0IGZsaWdodERhdGFQYXRoTGVuZ3RoID0gNFxuICAvLyB0cmVlLCBzZWVkRGF0YSwgYW5kIGhlYWQgYXJlICphbHdheXMqIHRoZSBsYXN0IHRocmVlIGl0ZW1zIGluIHRoZSBgRmxpZ2h0RGF0YVBhdGhgLlxuICBjb25zdCBbdHJlZSwgc2VlZERhdGEsIGhlYWQsIGlzSGVhZFBhcnRpYWxdID1cbiAgICBmbGlnaHREYXRhUGF0aC5zbGljZSgtZmxpZ2h0RGF0YVBhdGhMZW5ndGgpXG4gIC8vIFRoZSBgRmxpZ2h0U2VnbWVudFBhdGhgIGlzIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBsYXN0IHRocmVlIGl0ZW1zLiBGb3IgYSByb290IHJlbmRlciwgaXQgd29uJ3QgYmUgcHJlc2VudC5cbiAgY29uc3Qgc2VnbWVudFBhdGggPSBmbGlnaHREYXRhUGF0aC5zbGljZSgwLCAtZmxpZ2h0RGF0YVBhdGhMZW5ndGgpXG5cbiAgcmV0dXJuIHtcbiAgICAvLyBUT0RPOiBVbmlmeSB0aGVzZSB0d28gc2VnbWVudCBwYXRoIGhlbHBlcnMuIFdlIGFyZSBpbmNvbnNpc3RlbnRseSBwdXNoaW5nIGFuIGVtcHR5IHNlZ21lbnQgKFwiXCIpXG4gICAgLy8gdG8gdGhlIHN0YXJ0IG9mIHRoZSBzZWdtZW50IHBhdGggaW4gc29tZSBwbGFjZXMgd2hpY2ggbWFrZXMgaXQgaGFyZCB0byB1c2Ugc29sZWx5IHRoZSBzZWdtZW50IHBhdGguXG4gICAgLy8gTG9vayBmb3IgXCIvLyBUT0RPLUFQUDogcmVtb3ZlICcnXCIgaW4gdGhlIGNvZGViYXNlLlxuICAgIHBhdGhUb1NlZ21lbnQ6IHNlZ21lbnRQYXRoLnNsaWNlKDAsIC0xKSxcbiAgICBzZWdtZW50UGF0aCxcbiAgICAvLyBpZiB0aGUgYEZsaWdodERhdGFQYXRoYCBjb3JyZXNwb25kcyB3aXRoIHRoZSByb290LCB0aGVyZSdsbCBiZSBubyBzZWdtZW50IHBhdGgsXG4gICAgLy8gaW4gd2hpY2ggY2FzZSB3ZSBkZWZhdWx0IHRvICcnLlxuICAgIHNlZ21lbnQ6IHNlZ21lbnRQYXRoW3NlZ21lbnRQYXRoLmxlbmd0aCAtIDFdID8/ICcnLFxuICAgIHRyZWUsXG4gICAgc2VlZERhdGEsXG4gICAgaGVhZCxcbiAgICBpc0hlYWRQYXJ0aWFsLFxuICAgIGlzUm9vdFJlbmRlcjogZmxpZ2h0RGF0YVBhdGgubGVuZ3RoID09PSBmbGlnaHREYXRhUGF0aExlbmd0aCxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dEZsaWdodFNlZ21lbnRQYXRoKFxuICBmbGlnaHRTZWdtZW50UGF0aDogRmxpZ2h0U2VnbWVudFBhdGhcbik6IEZsaWdodFNlZ21lbnRQYXRoIHtcbiAgLy8gU2luY2UgYEZsaWdodFNlZ21lbnRQYXRoYCBpcyBhIHJlcGVhdGVkIHR1cGxlIG9mIGBTZWdtZW50YCBhbmQgYFBhcmFsbGVsUm91dGVLZXlgLCB3ZSBzbGljZSBvZmYgdHdvIGl0ZW1zXG4gIC8vIHRvIGdldCB0aGUgbmV4dCBzZWdtZW50IHBhdGguXG4gIHJldHVybiBmbGlnaHRTZWdtZW50UGF0aC5zbGljZSgyKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRmxpZ2h0RGF0YShcbiAgZmxpZ2h0RGF0YTogRmxpZ2h0RGF0YVxuKTogTm9ybWFsaXplZEZsaWdodERhdGFbXSB8IHN0cmluZyB7XG4gIC8vIEZsaWdodERhdGEgY2FuIGJlIGEgc3RyaW5nIHdoZW4gdGhlIHNlcnZlciBkaWRuJ3QgcmVzcG9uZCB3aXRoIGEgcHJvcGVyIGZsaWdodCByZXNwb25zZSxcbiAgLy8gb3Igd2hlbiBhIHJlZGlyZWN0IGhhcHBlbnMsIHRvIHNpZ25hbCB0byB0aGUgY2xpZW50IHRoYXQgaXQgbmVlZHMgdG8gcGVyZm9ybSBhbiBNUEEgbmF2aWdhdGlvbi5cbiAgaWYgKHR5cGVvZiBmbGlnaHREYXRhID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmbGlnaHREYXRhXG4gIH1cblxuICByZXR1cm4gZmxpZ2h0RGF0YS5tYXAoZ2V0RmxpZ2h0RGF0YVBhcnRzRnJvbVBhdGgpXG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHByZXBhcmUgdGhlIGZsaWdodCByb3V0ZXIgc3RhdGUgZm9yIHRoZSByZXF1ZXN0LlxuICogSXQgcmVtb3ZlcyBtYXJrZXJzIHRoYXQgYXJlIG5vdCBuZWVkZWQgYnkgdGhlIHNlcnZlciwgYW5kIGFyZSBwdXJlbHkgdXNlZFxuICogZm9yIHN0YXNoaW5nIHN0YXRlIG9uIHRoZSBjbGllbnQuXG4gKiBAcGFyYW0gZmxpZ2h0Um91dGVyU3RhdGUgLSBUaGUgZmxpZ2h0IHJvdXRlciBzdGF0ZSB0byBwcmVwYXJlLlxuICogQHBhcmFtIGlzSG1yUmVmcmVzaCAtIFdoZXRoZXIgdGhpcyBpcyBhbiBITVIgcmVmcmVzaCByZXF1ZXN0LlxuICogQHJldHVybnMgVGhlIHByZXBhcmVkIGZsaWdodCByb3V0ZXIgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlRmxpZ2h0Um91dGVyU3RhdGVGb3JSZXF1ZXN0KFxuICBmbGlnaHRSb3V0ZXJTdGF0ZTogRmxpZ2h0Um91dGVyU3RhdGUsXG4gIGlzSG1yUmVmcmVzaD86IGJvb2xlYW5cbik6IHN0cmluZyB7XG4gIC8vIEhNUiByZXF1ZXN0cyBuZWVkIHRoZSBjb21wbGV0ZSwgdW5tb2RpZmllZCBzdGF0ZSBmb3IgcHJvcGVyIGZ1bmN0aW9uYWxpdHlcbiAgaWYgKGlzSG1yUmVmcmVzaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoZmxpZ2h0Um91dGVyU3RhdGUpKVxuICB9XG5cbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChcbiAgICBKU09OLnN0cmluZ2lmeShzdHJpcENsaWVudE9ubHlEYXRhRnJvbUZsaWdodFJvdXRlclN0YXRlKGZsaWdodFJvdXRlclN0YXRlKSlcbiAgKVxufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHN0cmlwcyBjbGllbnQtb25seSBkYXRhIGZyb20gRmxpZ2h0Um91dGVyU3RhdGUgd2hpbGUgcHJlc2VydmluZ1xuICogc2VydmVyLW5lZWRlZCBpbmZvcm1hdGlvbiBmb3IgcHJvcGVyIHJlbmRlcmluZyBkZWNpc2lvbnMuXG4gKi9cbmZ1bmN0aW9uIHN0cmlwQ2xpZW50T25seURhdGFGcm9tRmxpZ2h0Um91dGVyU3RhdGUoXG4gIGZsaWdodFJvdXRlclN0YXRlOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuKTogRmxpZ2h0Um91dGVyU3RhdGUge1xuICBjb25zdCBbXG4gICAgc2VnbWVudCxcbiAgICBwYXJhbGxlbFJvdXRlcyxcbiAgICBfdXJsLCAvLyBJbnRlbnRpb25hbGx5IHVudXNlZCAtIFVSTHMgYXJlIGNsaWVudC1vbmx5XG4gICAgcmVmcmVzaE1hcmtlcixcbiAgICBpc1Jvb3RMYXlvdXQsXG4gICAgaGFzTG9hZGluZ0JvdW5kYXJ5LFxuICBdID0gZmxpZ2h0Um91dGVyU3RhdGVcblxuICAvLyBfX1BBR0VfXyBzZWdtZW50cyBhcmUgYWx3YXlzIGZldGNoZWQgZnJvbSB0aGUgc2VydmVyLCBzbyB0aGVyZSdzXG4gIC8vIG5vIG5lZWQgdG8gc2VuZCB0aGVtIHVwXG4gIGNvbnN0IGNsZWFuZWRTZWdtZW50ID0gc3RyaXBTZWFyY2hQYXJhbXNGcm9tUGFnZVNlZ21lbnQoc2VnbWVudClcblxuICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIHBhcmFsbGVsIHJvdXRlc1xuICBjb25zdCBjbGVhbmVkUGFyYWxsZWxSb3V0ZXM6IHsgW2tleTogc3RyaW5nXTogRmxpZ2h0Um91dGVyU3RhdGUgfSA9IHt9XG4gIGZvciAoY29uc3QgW2tleSwgY2hpbGRTdGF0ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYWxsZWxSb3V0ZXMpKSB7XG4gICAgY2xlYW5lZFBhcmFsbGVsUm91dGVzW2tleV0gPVxuICAgICAgc3RyaXBDbGllbnRPbmx5RGF0YUZyb21GbGlnaHRSb3V0ZXJTdGF0ZShjaGlsZFN0YXRlKVxuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBGbGlnaHRSb3V0ZXJTdGF0ZSA9IFtcbiAgICBjbGVhbmVkU2VnbWVudCxcbiAgICBjbGVhbmVkUGFyYWxsZWxSb3V0ZXMsXG4gICAgbnVsbCwgLy8gVVJMcyBvbWl0dGVkIC0gc2VydmVyIHJlY29uc3RydWN0cyBwYXRocyBmcm9tIHNlZ21lbnRzXG4gICAgc2hvdWxkUHJlc2VydmVSZWZyZXNoTWFya2VyKHJlZnJlc2hNYXJrZXIpID8gcmVmcmVzaE1hcmtlciA6IG51bGwsXG4gIF1cblxuICAvLyBBcHBlbmQgb3B0aW9uYWwgZmllbGRzIGlmIHByZXNlbnRcbiAgaWYgKGlzUm9vdExheW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVzdWx0WzRdID0gaXNSb290TGF5b3V0XG4gIH1cbiAgaWYgKGhhc0xvYWRpbmdCb3VuZGFyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVzdWx0WzVdID0gaGFzTG9hZGluZ0JvdW5kYXJ5XG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogU3RyaXBzIHNlYXJjaCBwYXJhbWV0ZXJzIGZyb20gX19QQUdFX18gc2VnbWVudHMgdG8gcHJldmVudCBzZW5zaXRpdmVcbiAqIGNsaWVudC1zaWRlIGRhdGEgZnJvbSBiZWluZyBzZW50IHRvIHRoZSBzZXJ2ZXIuXG4gKi9cbmZ1bmN0aW9uIHN0cmlwU2VhcmNoUGFyYW1zRnJvbVBhZ2VTZWdtZW50KHNlZ21lbnQ6IFNlZ21lbnQpOiBTZWdtZW50IHtcbiAgaWYgKFxuICAgIHR5cGVvZiBzZWdtZW50ID09PSAnc3RyaW5nJyAmJlxuICAgIHNlZ21lbnQuc3RhcnRzV2l0aChQQUdFX1NFR01FTlRfS0VZICsgJz8nKVxuICApIHtcbiAgICByZXR1cm4gUEFHRV9TRUdNRU5UX0tFWVxuICB9XG4gIHJldHVybiBzZWdtZW50XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSByZWZyZXNoIG1hcmtlciBzaG91bGQgYmUgc2VudCB0byB0aGUgc2VydmVyXG4gKiBDbGllbnQtb25seSBtYXJrZXJzIGxpa2UgJ3JlZnJlc2gnIGFyZSBzdHJpcHBlZCwgd2hpbGUgc2VydmVyLW5lZWRlZCBtYXJrZXJzXG4gKiBsaWtlICdyZWZldGNoJyBhbmQgJ2luc2lkZS1zaGFyZWQtbGF5b3V0JyBhcmUgcHJlc2VydmVkLlxuICovXG5mdW5jdGlvbiBzaG91bGRQcmVzZXJ2ZVJlZnJlc2hNYXJrZXIoXG4gIHJlZnJlc2hNYXJrZXI6IEZsaWdodFJvdXRlclN0YXRlWzNdXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4ocmVmcmVzaE1hcmtlciAmJiByZWZyZXNoTWFya2VyICE9PSAncmVmcmVzaCcpXG59XG4iXSwibmFtZXMiOlsiZ2V0RmxpZ2h0RGF0YVBhcnRzRnJvbVBhdGgiLCJnZXROZXh0RmxpZ2h0U2VnbWVudFBhdGgiLCJub3JtYWxpemVGbGlnaHREYXRhIiwicHJlcGFyZUZsaWdodFJvdXRlclN0YXRlRm9yUmVxdWVzdCIsImZsaWdodERhdGFQYXRoIiwiZmxpZ2h0RGF0YVBhdGhMZW5ndGgiLCJ0cmVlIiwic2VlZERhdGEiLCJoZWFkIiwiaXNIZWFkUGFydGlhbCIsInNsaWNlIiwic2VnbWVudFBhdGgiLCJwYXRoVG9TZWdtZW50Iiwic2VnbWVudCIsImxlbmd0aCIsImlzUm9vdFJlbmRlciIsImZsaWdodFNlZ21lbnRQYXRoIiwiZmxpZ2h0RGF0YSIsIm1hcCIsImZsaWdodFJvdXRlclN0YXRlIiwiaXNIbXJSZWZyZXNoIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsInN0cmlwQ2xpZW50T25seURhdGFGcm9tRmxpZ2h0Um91dGVyU3RhdGUiLCJwYXJhbGxlbFJvdXRlcyIsIl91cmwiLCJyZWZyZXNoTWFya2VyIiwiaXNSb290TGF5b3V0IiwiaGFzTG9hZGluZ0JvdW5kYXJ5IiwiY2xlYW5lZFNlZ21lbnQiLCJzdHJpcFNlYXJjaFBhcmFtc0Zyb21QYWdlU2VnbWVudCIsImNsZWFuZWRQYXJhbGxlbFJvdXRlcyIsImtleSIsImNoaWxkU3RhdGUiLCJPYmplY3QiLCJlbnRyaWVzIiwicmVzdWx0Iiwic2hvdWxkUHJlc2VydmVSZWZyZXNoTWFya2VyIiwidW5kZWZpbmVkIiwic3RhcnRzV2l0aCIsIlBBR0VfU0VHTUVOVF9LRVkiLCJCb29sZWFuIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/flight-data-helpers.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/has-base-path.js":
/*!****************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/has-base-path.js ***!
  \****************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"hasBasePath\", ({\n    enumerable: true,\n    get: function() {\n        return hasBasePath;\n    }\n}));\nconst _pathhasprefix = __webpack_require__(/*! ../shared/lib/router/utils/path-has-prefix */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nconst basePath =  false || '';\nfunction hasBasePath(path) {\n    return (0, _pathhasprefix.pathHasPrefix)(path, basePath);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=has-base-path.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvaGFzLWJhc2UtcGF0aC5qcyIsIm1hcHBpbmdzIjoiOzs7OytDQUlnQkE7OztlQUFBQTs7OzJDQUpjO0FBRTlCLE1BQU1DLFdBQVlDLE1BQWtDLElBQWU7QUFFNUQsU0FBU0YsWUFBWUssSUFBWTtJQUN0QyxPQUFPQyxDQUFBQSxHQUFBQSxlQUFBQSxhQUFBQSxFQUFjRCxNQUFNSjtBQUM3QiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvc3JjL2NsaWVudC9oYXMtYmFzZS1wYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhdGhIYXNQcmVmaXggfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXRoLWhhcy1wcmVmaXgnXG5cbmNvbnN0IGJhc2VQYXRoID0gKHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEggYXMgc3RyaW5nKSB8fCAnJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzQmFzZVBhdGgocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBwYXRoSGFzUHJlZml4KHBhdGgsIGJhc2VQYXRoKVxufVxuIl0sIm5hbWVzIjpbImhhc0Jhc2VQYXRoIiwiYmFzZVBhdGgiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX1JPVVRFUl9CQVNFUEFUSCIsInBhdGgiLCJwYXRoSGFzUHJlZml4Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/has-base-path.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/lib/console.js":
/*!**************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/lib/console.js ***!
  \**************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    formatConsoleArgs: function() {\n        return formatConsoleArgs;\n    },\n    parseConsoleArgs: function() {\n        return parseConsoleArgs;\n    }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../lib/is-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/is-error.js\"));\nfunction formatObject(arg, depth) {\n    switch(typeof arg){\n        case 'object':\n            if (arg === null) {\n                return 'null';\n            } else if (Array.isArray(arg)) {\n                let result = '[';\n                if (depth < 1) {\n                    for(let i = 0; i < arg.length; i++){\n                        if (result !== '[') {\n                            result += ',';\n                        }\n                        if (Object.prototype.hasOwnProperty.call(arg, i)) {\n                            result += formatObject(arg[i], depth + 1);\n                        }\n                    }\n                } else {\n                    result += arg.length > 0 ? '...' : '';\n                }\n                result += ']';\n                return result;\n            } else if (arg instanceof Error) {\n                return arg + '';\n            } else {\n                const keys = Object.keys(arg);\n                let result = '{';\n                if (depth < 1) {\n                    for(let i = 0; i < keys.length; i++){\n                        const key = keys[i];\n                        const desc = Object.getOwnPropertyDescriptor(arg, 'key');\n                        if (desc && !desc.get && !desc.set) {\n                            const jsonKey = JSON.stringify(key);\n                            if (jsonKey !== '\"' + key + '\"') {\n                                result += jsonKey + ': ';\n                            } else {\n                                result += key + ': ';\n                            }\n                            result += formatObject(desc.value, depth + 1);\n                        }\n                    }\n                } else {\n                    result += keys.length > 0 ? '...' : '';\n                }\n                result += '}';\n                return result;\n            }\n        case 'string':\n            return JSON.stringify(arg);\n        default:\n            return String(arg);\n    }\n}\nfunction formatConsoleArgs(args) {\n    let message;\n    let idx;\n    if (typeof args[0] === 'string') {\n        message = args[0];\n        idx = 1;\n    } else {\n        message = '';\n        idx = 0;\n    }\n    let result = '';\n    let startQuote = false;\n    for(let i = 0; i < message.length; ++i){\n        const char = message[i];\n        if (char !== '%' || i === message.length - 1 || idx >= args.length) {\n            result += char;\n            continue;\n        }\n        const code = message[++i];\n        switch(code){\n            case 'c':\n                {\n                    // TODO: We should colorize with HTML instead of turning into a string.\n                    // Ignore for now.\n                    result = startQuote ? \"\" + result + \"]\" : \"[\" + result;\n                    startQuote = !startQuote;\n                    idx++;\n                    break;\n                }\n            case 'O':\n            case 'o':\n                {\n                    result += formatObject(args[idx++], 0);\n                    break;\n                }\n            case 'd':\n            case 'i':\n                {\n                    result += parseInt(args[idx++], 10);\n                    break;\n                }\n            case 'f':\n                {\n                    result += parseFloat(args[idx++]);\n                    break;\n                }\n            case 's':\n                {\n                    result += String(args[idx++]);\n                    break;\n                }\n            default:\n                result += '%' + code;\n        }\n    }\n    for(; idx < args.length; idx++){\n        result += (idx > 0 ? ' ' : '') + formatObject(args[idx], 0);\n    }\n    return result;\n}\nfunction parseConsoleArgs(args) {\n    // See\n    // https://github.com/facebook/react/blob/65a56d0e99261481c721334a3ec4561d173594cd/packages/react-devtools-shared/src/backend/flight/renderer.js#L88-L93\n    //\n    // Logs replayed from the server look like this:\n    // [\n    //   \"%c%s%c %o\\n\\n%s\\n\\n%s\\n\",\n    //   \"background: #e6e6e6; ...\",\n    //   \" Server \", // can also be e.g. \" Prerender \"\n    //   \"\",\n    //   Error,\n    //   \"The above error occurred in the <Page> component.\",\n    //   ...\n    // ]\n    if (args.length > 3 && typeof args[0] === 'string' && args[0].startsWith('%c%s%c ') && typeof args[1] === 'string' && typeof args[2] === 'string' && typeof args[3] === 'string') {\n        const environmentName = args[2];\n        const maybeError = args[4];\n        return {\n            environmentName: environmentName.trim(),\n            error: (0, _iserror.default)(maybeError) ? maybeError : null\n        };\n    }\n    return {\n        environmentName: null,\n        error: null\n    };\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=console.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvbGliL2NvbnNvbGUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBdURnQkEsaUJBQWlCO2VBQWpCQTs7SUEyREFDLGdCQUFnQjtlQUFoQkE7Ozs7OEVBbEhJO0FBRXBCLFNBQVNDLGFBQWFDLEdBQVksRUFBRUMsS0FBYTtJQUMvQyxPQUFRLE9BQU9EO1FBQ2IsS0FBSztZQUNILElBQUlBLFFBQVEsTUFBTTtnQkFDaEIsT0FBTztZQUNULE9BQU8sSUFBSUUsTUFBTUMsT0FBTyxDQUFDSCxNQUFNO2dCQUM3QixJQUFJSSxTQUFTO2dCQUNiLElBQUlILFFBQVEsR0FBRztvQkFDYixJQUFLLElBQUlJLElBQUksR0FBR0EsSUFBSUwsSUFBSU0sTUFBTSxFQUFFRCxJQUFLO3dCQUNuQyxJQUFJRCxXQUFXLEtBQUs7NEJBQ2xCQSxVQUFVO3dCQUNaO3dCQUNBLElBQUlHLE9BQU9DLFNBQVMsQ0FBQ0MsY0FBYyxDQUFDQyxJQUFJLENBQUNWLEtBQUtLLElBQUk7NEJBQ2hERCxVQUFVTCxhQUFhQyxHQUFHLENBQUNLLEVBQUUsRUFBRUosUUFBUTt3QkFDekM7b0JBQ0Y7Z0JBQ0YsT0FBTztvQkFDTEcsVUFBVUosSUFBSU0sTUFBTSxHQUFHLElBQUksUUFBUTtnQkFDckM7Z0JBQ0FGLFVBQVU7Z0JBQ1YsT0FBT0E7WUFDVCxPQUFPLElBQUlKLGVBQWVXLE9BQU87Z0JBQy9CLE9BQU9YLE1BQU07WUFDZixPQUFPO2dCQUNMLE1BQU1ZLE9BQU9MLE9BQU9LLElBQUksQ0FBQ1o7Z0JBQ3pCLElBQUlJLFNBQVM7Z0JBQ2IsSUFBSUgsUUFBUSxHQUFHO29CQUNiLElBQUssSUFBSUksSUFBSSxHQUFHQSxJQUFJTyxLQUFLTixNQUFNLEVBQUVELElBQUs7d0JBQ3BDLE1BQU1RLE1BQU1ELElBQUksQ0FBQ1AsRUFBRTt3QkFDbkIsTUFBTVMsT0FBT1AsT0FBT1Esd0JBQXdCLENBQUNmLEtBQUs7d0JBQ2xELElBQUljLFFBQVEsQ0FBQ0EsS0FBS0UsR0FBRyxJQUFJLENBQUNGLEtBQUtHLEdBQUcsRUFBRTs0QkFDbEMsTUFBTUMsVUFBVUMsS0FBS0MsU0FBUyxDQUFDUDs0QkFDL0IsSUFBSUssWUFBWSxNQUFNTCxNQUFNLEtBQUs7Z0NBQy9CVCxVQUFVYyxVQUFVOzRCQUN0QixPQUFPO2dDQUNMZCxVQUFVUyxNQUFNOzRCQUNsQjs0QkFDQVQsVUFBVUwsYUFBYWUsS0FBS08sS0FBSyxFQUFFcEIsUUFBUTt3QkFDN0M7b0JBQ0Y7Z0JBQ0YsT0FBTztvQkFDTEcsVUFBVVEsS0FBS04sTUFBTSxHQUFHLElBQUksUUFBUTtnQkFDdEM7Z0JBQ0FGLFVBQVU7Z0JBQ1YsT0FBT0E7WUFDVDtRQUNGLEtBQUs7WUFDSCxPQUFPZSxLQUFLQyxTQUFTLENBQUNwQjtRQUN4QjtZQUNFLE9BQU9zQixPQUFPdEI7SUFDbEI7QUFDRjtBQUVPLFNBQVNILGtCQUFrQjBCLElBQWU7SUFDL0MsSUFBSUM7SUFDSixJQUFJQztJQUNKLElBQUksT0FBT0YsSUFBSSxDQUFDLEVBQUUsS0FBSyxVQUFVO1FBQy9CQyxVQUFVRCxJQUFJLENBQUMsRUFBRTtRQUNqQkUsTUFBTTtJQUNSLE9BQU87UUFDTEQsVUFBVTtRQUNWQyxNQUFNO0lBQ1I7SUFDQSxJQUFJckIsU0FBUztJQUNiLElBQUlzQixhQUFhO0lBQ2pCLElBQUssSUFBSXJCLElBQUksR0FBR0EsSUFBSW1CLFFBQVFsQixNQUFNLEVBQUUsRUFBRUQsRUFBRztRQUN2QyxNQUFNc0IsT0FBT0gsT0FBTyxDQUFDbkIsRUFBRTtRQUN2QixJQUFJc0IsU0FBUyxPQUFPdEIsTUFBTW1CLFFBQVFsQixNQUFNLEdBQUcsS0FBS21CLE9BQU9GLEtBQUtqQixNQUFNLEVBQUU7WUFDbEVGLFVBQVV1QjtZQUNWO1FBQ0Y7UUFFQSxNQUFNQyxPQUFPSixPQUFPLENBQUMsRUFBRW5CLEVBQUU7UUFDekIsT0FBUXVCO1lBQ04sS0FBSztnQkFBSztvQkFDUix1RUFBdUU7b0JBQ3ZFLGtCQUFrQjtvQkFDbEJ4QixTQUFTc0IsYUFBYyxLQUFFdEIsU0FBTyxNQUFNLE1BQUdBO29CQUN6Q3NCLGFBQWEsQ0FBQ0E7b0JBQ2REO29CQUNBO2dCQUNGO1lBQ0EsS0FBSztZQUNMLEtBQUs7Z0JBQUs7b0JBQ1JyQixVQUFVTCxhQUFhd0IsSUFBSSxDQUFDRSxNQUFNLEVBQUU7b0JBQ3BDO2dCQUNGO1lBQ0EsS0FBSztZQUNMLEtBQUs7Z0JBQUs7b0JBQ1JyQixVQUFVeUIsU0FBU04sSUFBSSxDQUFDRSxNQUFNLEVBQVM7b0JBQ3ZDO2dCQUNGO1lBQ0EsS0FBSztnQkFBSztvQkFDUnJCLFVBQVUwQixXQUFXUCxJQUFJLENBQUNFLE1BQU07b0JBQ2hDO2dCQUNGO1lBQ0EsS0FBSztnQkFBSztvQkFDUnJCLFVBQVVrQixPQUFPQyxJQUFJLENBQUNFLE1BQU07b0JBQzVCO2dCQUNGO1lBQ0E7Z0JBQ0VyQixVQUFVLE1BQU13QjtRQUNwQjtJQUNGO0lBRUEsTUFBT0gsTUFBTUYsS0FBS2pCLE1BQU0sRUFBRW1CLE1BQU87UUFDL0JyQixVQUFXcUIsQ0FBQUEsTUFBTSxJQUFJLE1BQU0sR0FBQyxHQUFLMUIsYUFBYXdCLElBQUksQ0FBQ0UsSUFBSSxFQUFFO0lBQzNEO0lBRUEsT0FBT3JCO0FBQ1Q7QUFFTyxTQUFTTixpQkFBaUJ5QixJQUFlO0lBSTlDLE1BQU07SUFDTix3SkFBd0o7SUFDeEosRUFBRTtJQUNGLGdEQUFnRDtJQUNoRCxJQUFJO0lBQ0osK0JBQStCO0lBQy9CLGdDQUFnQztJQUNoQyxrREFBa0Q7SUFDbEQsUUFBUTtJQUNSLFdBQVc7SUFDWCx5REFBeUQ7SUFDekQsUUFBUTtJQUNSLElBQUk7SUFDSixJQUNFQSxLQUFLakIsTUFBTSxHQUFHLEtBQ2QsT0FBT2lCLElBQUksQ0FBQyxFQUFFLEtBQUssWUFDbkJBLElBQUksQ0FBQyxFQUFFLENBQUNRLFVBQVUsQ0FBQyxjQUNuQixPQUFPUixJQUFJLENBQUMsRUFBRSxLQUFLLFlBQ25CLE9BQU9BLElBQUksQ0FBQyxFQUFFLEtBQUssWUFDbkIsT0FBT0EsSUFBSSxDQUFDLEVBQUUsS0FBSyxVQUNuQjtRQUNBLE1BQU1TLGtCQUFrQlQsSUFBSSxDQUFDLEVBQUU7UUFDL0IsTUFBTVUsYUFBYVYsSUFBSSxDQUFDLEVBQUU7UUFFMUIsT0FBTztZQUNMUyxpQkFBaUJBLGdCQUFnQkUsSUFBSTtZQUNyQ0MsT0FBT0MsQ0FBQUEsR0FBQUEsU0FBQUEsT0FBQUEsRUFBUUgsY0FBY0EsYUFBYTtRQUM1QztJQUNGO0lBRUEsT0FBTztRQUNMRCxpQkFBaUI7UUFDakJHLE9BQU87SUFDVDtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL3NyYy9jbGllbnQvbGliL2NvbnNvbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlzRXJyb3IgZnJvbSAnLi4vLi4vbGliL2lzLWVycm9yJ1xuXG5mdW5jdGlvbiBmb3JtYXRPYmplY3QoYXJnOiB1bmtub3duLCBkZXB0aDogbnVtYmVyKSB7XG4gIHN3aXRjaCAodHlwZW9mIGFyZykge1xuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICBpZiAoYXJnID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCdcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnWydcbiAgICAgICAgaWYgKGRlcHRoIDwgMSkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJnLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSAnWycpIHtcbiAgICAgICAgICAgICAgcmVzdWx0ICs9ICcsJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmcsIGkpKSB7XG4gICAgICAgICAgICAgIHJlc3VsdCArPSBmb3JtYXRPYmplY3QoYXJnW2ldLCBkZXB0aCArIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCArPSBhcmcubGVuZ3RoID4gMCA/ICcuLi4nIDogJydcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgKz0gJ10nXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH0gZWxzZSBpZiAoYXJnIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGFyZyArICcnXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXJnKVxuICAgICAgICBsZXQgcmVzdWx0ID0gJ3snXG4gICAgICAgIGlmIChkZXB0aCA8IDEpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV1cbiAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZywgJ2tleScpXG4gICAgICAgICAgICBpZiAoZGVzYyAmJiAhZGVzYy5nZXQgJiYgIWRlc2Muc2V0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGpzb25LZXkgPSBKU09OLnN0cmluZ2lmeShrZXkpXG4gICAgICAgICAgICAgIGlmIChqc29uS2V5ICE9PSAnXCInICsga2V5ICsgJ1wiJykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBqc29uS2V5ICsgJzogJ1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBrZXkgKyAnOiAnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzdWx0ICs9IGZvcm1hdE9iamVjdChkZXNjLnZhbHVlLCBkZXB0aCArIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCArPSBrZXlzLmxlbmd0aCA+IDAgPyAnLi4uJyA6ICcnXG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ICs9ICd9J1xuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcmcpXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBTdHJpbmcoYXJnKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRDb25zb2xlQXJncyhhcmdzOiB1bmtub3duW10pOiBzdHJpbmcge1xuICBsZXQgbWVzc2FnZTogc3RyaW5nXG4gIGxldCBpZHg6IG51bWJlclxuICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgbWVzc2FnZSA9IGFyZ3NbMF1cbiAgICBpZHggPSAxXG4gIH0gZWxzZSB7XG4gICAgbWVzc2FnZSA9ICcnXG4gICAgaWR4ID0gMFxuICB9XG4gIGxldCByZXN1bHQgPSAnJ1xuICBsZXQgc3RhcnRRdW90ZSA9IGZhbHNlXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWVzc2FnZS5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNoYXIgPSBtZXNzYWdlW2ldXG4gICAgaWYgKGNoYXIgIT09ICclJyB8fCBpID09PSBtZXNzYWdlLmxlbmd0aCAtIDEgfHwgaWR4ID49IGFyZ3MubGVuZ3RoKSB7XG4gICAgICByZXN1bHQgKz0gY2hhclxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBjb2RlID0gbWVzc2FnZVsrK2ldXG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICBjYXNlICdjJzoge1xuICAgICAgICAvLyBUT0RPOiBXZSBzaG91bGQgY29sb3JpemUgd2l0aCBIVE1MIGluc3RlYWQgb2YgdHVybmluZyBpbnRvIGEgc3RyaW5nLlxuICAgICAgICAvLyBJZ25vcmUgZm9yIG5vdy5cbiAgICAgICAgcmVzdWx0ID0gc3RhcnRRdW90ZSA/IGAke3Jlc3VsdH1dYCA6IGBbJHtyZXN1bHR9YFxuICAgICAgICBzdGFydFF1b3RlID0gIXN0YXJ0UXVvdGVcbiAgICAgICAgaWR4KytcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ08nOlxuICAgICAgY2FzZSAnbyc6IHtcbiAgICAgICAgcmVzdWx0ICs9IGZvcm1hdE9iamVjdChhcmdzW2lkeCsrXSwgMClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2QnOlxuICAgICAgY2FzZSAnaSc6IHtcbiAgICAgICAgcmVzdWx0ICs9IHBhcnNlSW50KGFyZ3NbaWR4KytdIGFzIGFueSwgMTApXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlICdmJzoge1xuICAgICAgICByZXN1bHQgKz0gcGFyc2VGbG9hdChhcmdzW2lkeCsrXSBhcyBhbnkpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlICdzJzoge1xuICAgICAgICByZXN1bHQgKz0gU3RyaW5nKGFyZ3NbaWR4KytdKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmVzdWx0ICs9ICclJyArIGNvZGVcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgaWR4IDwgYXJncy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgcmVzdWx0ICs9IChpZHggPiAwID8gJyAnIDogJycpICsgZm9ybWF0T2JqZWN0KGFyZ3NbaWR4XSwgMClcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29uc29sZUFyZ3MoYXJnczogdW5rbm93bltdKToge1xuICBlbnZpcm9ubWVudE5hbWU6IHN0cmluZyB8IG51bGxcbiAgZXJyb3I6IEVycm9yIHwgbnVsbFxufSB7XG4gIC8vIFNlZVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi82NWE1NmQwZTk5MjYxNDgxYzcyMTMzNGEzZWM0NTYxZDE3MzU5NGNkL3BhY2thZ2VzL3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9mbGlnaHQvcmVuZGVyZXIuanMjTDg4LUw5M1xuICAvL1xuICAvLyBMb2dzIHJlcGxheWVkIGZyb20gdGhlIHNlcnZlciBsb29rIGxpa2UgdGhpczpcbiAgLy8gW1xuICAvLyAgIFwiJWMlcyVjICVvXFxuXFxuJXNcXG5cXG4lc1xcblwiLFxuICAvLyAgIFwiYmFja2dyb3VuZDogI2U2ZTZlNjsgLi4uXCIsXG4gIC8vICAgXCIgU2VydmVyIFwiLCAvLyBjYW4gYWxzbyBiZSBlLmcuIFwiIFByZXJlbmRlciBcIlxuICAvLyAgIFwiXCIsXG4gIC8vICAgRXJyb3IsXG4gIC8vICAgXCJUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gdGhlIDxQYWdlPiBjb21wb25lbnQuXCIsXG4gIC8vICAgLi4uXG4gIC8vIF1cbiAgaWYgKFxuICAgIGFyZ3MubGVuZ3RoID4gMyAmJlxuICAgIHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyAmJlxuICAgIGFyZ3NbMF0uc3RhcnRzV2l0aCgnJWMlcyVjICcpICYmXG4gICAgdHlwZW9mIGFyZ3NbMV0gPT09ICdzdHJpbmcnICYmXG4gICAgdHlwZW9mIGFyZ3NbMl0gPT09ICdzdHJpbmcnICYmXG4gICAgdHlwZW9mIGFyZ3NbM10gPT09ICdzdHJpbmcnXG4gICkge1xuICAgIGNvbnN0IGVudmlyb25tZW50TmFtZSA9IGFyZ3NbMl1cbiAgICBjb25zdCBtYXliZUVycm9yID0gYXJnc1s0XVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVudmlyb25tZW50TmFtZTogZW52aXJvbm1lbnROYW1lLnRyaW0oKSxcbiAgICAgIGVycm9yOiBpc0Vycm9yKG1heWJlRXJyb3IpID8gbWF5YmVFcnJvciA6IG51bGwsXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlbnZpcm9ubWVudE5hbWU6IG51bGwsXG4gICAgZXJyb3I6IG51bGwsXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJmb3JtYXRDb25zb2xlQXJncyIsInBhcnNlQ29uc29sZUFyZ3MiLCJmb3JtYXRPYmplY3QiLCJhcmciLCJkZXB0aCIsIkFycmF5IiwiaXNBcnJheSIsInJlc3VsdCIsImkiLCJsZW5ndGgiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJFcnJvciIsImtleXMiLCJrZXkiLCJkZXNjIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0Iiwic2V0IiwianNvbktleSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ2YWx1ZSIsIlN0cmluZyIsImFyZ3MiLCJtZXNzYWdlIiwiaWR4Iiwic3RhcnRRdW90ZSIsImNoYXIiLCJjb2RlIiwicGFyc2VJbnQiLCJwYXJzZUZsb2F0Iiwic3RhcnRzV2l0aCIsImVudmlyb25tZW50TmFtZSIsIm1heWJlRXJyb3IiLCJ0cmltIiwiZXJyb3IiLCJpc0Vycm9yIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/lib/console.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/normalize-trailing-slash.js":
/*!***************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/normalize-trailing-slash.js ***!
  \***************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"normalizePathTrailingSlash\", ({\n    enumerable: true,\n    get: function() {\n        return normalizePathTrailingSlash;\n    }\n}));\nconst _removetrailingslash = __webpack_require__(/*! ../shared/lib/router/utils/remove-trailing-slash */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _parsepath = __webpack_require__(/*! ../shared/lib/router/utils/parse-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nconst normalizePathTrailingSlash = (path)=>{\n    if (!path.startsWith('/') || undefined) {\n        return path;\n    }\n    const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n    if (false) {}\n    return \"\" + (0, _removetrailingslash.removeTrailingSlash)(pathname) + query + hash;\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=normalize-trailing-slash.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvbm9ybWFsaXplLXRyYWlsaW5nLXNsYXNoLmpzIiwibWFwcGluZ3MiOiI7Ozs7OERBT2FBOzs7ZUFBQUE7OztpREFQdUI7dUNBQ1Y7QUFNbkIsTUFBTUEsNkJBQTZCLENBQUNDO0lBQ3pDLElBQUksQ0FBQ0EsS0FBS0MsVUFBVSxDQUFDLFFBQVFDLFNBQXdDLEVBQUU7UUFDckUsT0FBT0Y7SUFDVDtJQUVBLE1BQU0sRUFBRUssUUFBUSxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRSxHQUFHQyxDQUFBQSxHQUFBQSxXQUFBQSxTQUFBQSxFQUFVUjtJQUM1QyxJQUFJRSxLQUFpQyxFQUFFLEVBUXRDO0lBRUQsT0FBUSxLQUFFUyxDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQUFBLEVBQW9CTixZQUFZQyxRQUFRQztBQUNwRCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvc3JjL2NsaWVudC9ub3JtYWxpemUtdHJhaWxpbmctc2xhc2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVtb3ZlVHJhaWxpbmdTbGFzaCB9IGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JlbW92ZS10cmFpbGluZy1zbGFzaCdcbmltcG9ydCB7IHBhcnNlUGF0aCB9IGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhcnNlLXBhdGgnXG5cbi8qKlxuICogTm9ybWFsaXplcyB0aGUgdHJhaWxpbmcgc2xhc2ggb2YgYSBwYXRoIGFjY29yZGluZyB0byB0aGUgYHRyYWlsaW5nU2xhc2hgIG9wdGlvblxuICogaW4gYG5leHQuY29uZmlnLmpzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoID0gKHBhdGg6IHN0cmluZykgPT4ge1xuICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpIHx8IHByb2Nlc3MuZW52Ll9fTkVYVF9NQU5VQUxfVFJBSUxJTkdfU0xBU0gpIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG5cbiAgY29uc3QgeyBwYXRobmFtZSwgcXVlcnksIGhhc2ggfSA9IHBhcnNlUGF0aChwYXRoKVxuICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX1RSQUlMSU5HX1NMQVNIKSB7XG4gICAgaWYgKC9cXC5bXi9dK1xcLz8kLy50ZXN0KHBhdGhuYW1lKSkge1xuICAgICAgcmV0dXJuIGAke3JlbW92ZVRyYWlsaW5nU2xhc2gocGF0aG5hbWUpfSR7cXVlcnl9JHtoYXNofWBcbiAgICB9IGVsc2UgaWYgKHBhdGhuYW1lLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIHJldHVybiBgJHtwYXRobmFtZX0ke3F1ZXJ5fSR7aGFzaH1gXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtwYXRobmFtZX0vJHtxdWVyeX0ke2hhc2h9YFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBgJHtyZW1vdmVUcmFpbGluZ1NsYXNoKHBhdGhuYW1lKX0ke3F1ZXJ5fSR7aGFzaH1gXG59XG4iXSwibmFtZXMiOlsibm9ybWFsaXplUGF0aFRyYWlsaW5nU2xhc2giLCJwYXRoIiwic3RhcnRzV2l0aCIsInByb2Nlc3MiLCJlbnYiLCJfX05FWFRfTUFOVUFMX1RSQUlMSU5HX1NMQVNIIiwicGF0aG5hbWUiLCJxdWVyeSIsImhhc2giLCJwYXJzZVBhdGgiLCJfX05FWFRfVFJBSUxJTkdfU0xBU0giLCJ0ZXN0IiwicmVtb3ZlVHJhaWxpbmdTbGFzaCIsImVuZHNXaXRoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/normalize-trailing-slash.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/react-client-callbacks/error-boundary-callbacks.js":
/*!**************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/react-client-callbacks/error-boundary-callbacks.js ***!
  \**************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("// This file is only used in app router due to the specific error state handling.\n\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    onCaughtError: function() {\n        return onCaughtError;\n    },\n    onUncaughtError: function() {\n        return onUncaughtError;\n    }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _isnextroutererror = __webpack_require__(/*! ../components/is-next-router-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/is-next-router-error.js\");\nconst _bailouttocsr = __webpack_require__(/*! ../../shared/lib/lazy-dynamic/bailout-to-csr */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\");\nconst _reportglobalerror = __webpack_require__(/*! ./report-global-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/react-client-callbacks/report-global-error.js\");\nconst _errorboundary = __webpack_require__(/*! ../components/error-boundary */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/error-boundary.js\");\nconst _globalerror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../components/builtin/global-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/builtin/global-error.js\"));\nconst devToolErrorMod =  true ? __webpack_require__(/*! ../../next-devtools/userspace/app/errors */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/index.js\") : 0;\nfunction onCaughtError(thrownValue, errorInfo) {\n    var _errorInfo_errorBoundary;\n    const errorBoundaryComponent = (_errorInfo_errorBoundary = errorInfo.errorBoundary) == null ? void 0 : _errorInfo_errorBoundary.constructor;\n    let isImplicitErrorBoundary;\n    if (true) {\n        const { AppDevOverlayErrorBoundary } = __webpack_require__(/*! ../../next-devtools/userspace/app/app-dev-overlay-error-boundary */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-error-boundary.js\");\n        isImplicitErrorBoundary = errorBoundaryComponent === AppDevOverlayErrorBoundary;\n    }\n    isImplicitErrorBoundary = isImplicitErrorBoundary || errorBoundaryComponent === _errorboundary.ErrorBoundaryHandler && errorInfo.errorBoundary.props.errorComponent === _globalerror.default;\n    // Skip the segment explorer triggered error\n    if (true) {\n        const { SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE } = __webpack_require__(/*! ../../next-devtools/userspace/app/segment-explorer-node */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js\");\n        if (thrownValue instanceof Error && thrownValue.message === SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE) {\n            return;\n        }\n    }\n    if (isImplicitErrorBoundary) {\n        // We don't consider errors caught unless they're caught by an explicit error\n        // boundary. The built-in ones are considered implicit.\n        // This mimics how the same app would behave without Next.js.\n        return onUncaughtError(thrownValue, errorInfo);\n    }\n    // Skip certain custom errors which are not expected to be reported on client\n    if ((0, _bailouttocsr.isBailoutToCSRError)(thrownValue) || (0, _isnextroutererror.isNextRouterError)(thrownValue)) return;\n    if (true) {\n        var _errorInfo_componentStack;\n        const errorBoundaryName = (errorBoundaryComponent == null ? void 0 : errorBoundaryComponent.displayName) || (errorBoundaryComponent == null ? void 0 : errorBoundaryComponent.name) || 'Unknown';\n        const componentThatErroredFrame = errorInfo == null ? void 0 : (_errorInfo_componentStack = errorInfo.componentStack) == null ? void 0 : _errorInfo_componentStack.split('\\n')[1];\n        var // example 1: at Page (http://localhost:3000/_next/static/chunks/pages/index.js?ts=1631600000000:2:1)\n        // example 2: Page@http://localhost:3000/_next/static/chunks/pages/index.js?ts=1631600000000:2:1\n        _componentThatErroredFrame_match;\n        // Match chrome or safari stack trace\n        const matches = (_componentThatErroredFrame_match = componentThatErroredFrame == null ? void 0 : componentThatErroredFrame.match(/\\s+at (\\w+)\\s+|(\\w+)@/)) != null ? _componentThatErroredFrame_match : [];\n        const componentThatErroredName = matches[1] || matches[2] || 'Unknown';\n        // Create error location with errored component and error boundary, to match the behavior of default React onCaughtError handler.\n        const errorBoundaryMessage = \"It was handled by the <\" + errorBoundaryName + \"> error boundary.\";\n        const componentErrorMessage = componentThatErroredName ? \"The above error occurred in the <\" + componentThatErroredName + \"> component.\" : \"The above error occurred in one of your components.\";\n        const errorLocation = componentErrorMessage + \" \" + errorBoundaryMessage;\n        const error = devToolErrorMod.decorateDevError(thrownValue, errorInfo);\n        // Log and report the error with location but without modifying the error stack\n        devToolErrorMod.originConsoleError('%o\\n\\n%s', thrownValue, errorLocation);\n        devToolErrorMod.handleClientError(error);\n    } else {}\n}\nfunction onUncaughtError(thrownValue, errorInfo) {\n    // Skip certain custom errors which are not expected to be reported on client\n    if ((0, _bailouttocsr.isBailoutToCSRError)(thrownValue) || (0, _isnextroutererror.isNextRouterError)(thrownValue)) return;\n    if (true) {\n        const error = devToolErrorMod.decorateDevError(thrownValue, errorInfo);\n        // TODO: Add an adendum to the overlay telling people about custom error boundaries.\n        (0, _reportglobalerror.reportGlobalError)(error);\n    } else {}\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=error-boundary-callbacks.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvcmVhY3QtY2xpZW50LWNhbGxiYWNrcy9lcnJvci1ib3VuZGFyeS1jYWxsYmFja3MuanMiLCJtYXBwaW5ncyI6IkFBQUEsaUZBQWlGOzs7Ozs7Ozs7Ozs7O0lBa0JqRUEsYUFBYTtlQUFiQTs7SUErRUFDLGVBQWU7ZUFBZkE7Ozs7K0NBOUZrQjswQ0FDRTsrQ0FDRjsyQ0FDRztrRkFDSjtBQUVqQyxNQUFNQyxrQkFMOEIsS0FNZCxHQUNmSSxtQkFBT0EsQ0FBQyxzUkFBMEMsSUFDbkQsQ0FJQztBQUVBLFNBQVNOLGNBQ2RhLFdBQW9CLEVBQ3BCQyxTQUEwRDtRQUUzQkE7SUFBL0IsTUFBTUMseUJBQUFBLENBQXlCRCwyQkFBQUEsVUFBVUUsYUFBYSxxQkFBdkJGLHlCQUF5QkcsV0FBVztJQUVuRSxJQUFJQztJQUVKLElBQUlmLElBQW9CLEVBQW1CO1FBQ3pDLE1BQU0sRUFBRWdCLDBCQUEwQixFQUFFLEdBQ2xDYixtQkFBT0EsQ0FBQyxnVUFBa0U7UUFFNUVZLDBCQUNFSCwyQkFBMkJJO0lBQy9CO0lBRUFELDBCQUNFQSwyQkFDQ0gsMkJBQTJCSyxlQUFBQSxvQkFBb0IsSUFDN0NOLFVBQVVFLGFBQWEsQ0FDckJLLEtBQUssQ0FBQ0MsY0FBYyxLQUFLQyxhQUFBQSxPQUFvQjtJQUVwRCw0Q0FBNEM7SUFDNUMsSUFBSXBCLElBQW9CLEVBQW1CO1FBQ3pDLE1BQU0sRUFBRXFCLHdDQUF3QyxFQUFFLEdBQ2hEbEIsbUJBQU9BLENBQUMsOFNBQXlEO1FBQ25FLElBQ0VPLHVCQUF1QlksU0FDdkJaLFlBQVlhLE9BQU8sS0FBS0YsMENBQ3hCO1lBQ0E7UUFDRjtJQUNGO0lBRUEsSUFBSU4seUJBQXlCO1FBQzNCLDZFQUE2RTtRQUM3RSx1REFBdUQ7UUFDdkQsNkRBQTZEO1FBQzdELE9BQU9qQixnQkFBZ0JZLGFBQWFDO0lBQ3RDO0lBRUEsNkVBQTZFO0lBQzdFLElBQUlhLENBQUFBLEdBQUFBLGNBQUFBLG1CQUFBQSxFQUFvQmQsZ0JBQWdCZSxDQUFBQSxHQUFBQSxtQkFBQUEsaUJBQUFBLEVBQWtCZixjQUFjO0lBRXhFLElBQUlWLElBQW9CLEVBQW1CO1lBT1BXO1FBTmxDLE1BQU1lLG9CQUVIZCxDQURELDBCQUNDQSxPQUFBQSxFQURrQyxHQUNsQ0EsSUFBQUEsdUJBQWdDZSxXQUFBQSxNQUNqQ2YsMEJBQUFBLE9BQUFBLEtBQUFBLElBQUFBLHVCQUF3QmdCLElBQUFBLEtBQ3hCO1FBRUYsTUFBTUMsNEJBQTRCbEIsYUFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsNkJBQUFBLFVBQVdtQixjQUFBQSxLQUFjLGdCQUF6Qm5CLDBCQUEyQm9CLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUl6RSxzREFBc0QsK0NBQytDO1FBQ3JHLGdHQUFnRztRQUNoR0Y7UUFMRixxQ0FBcUM7UUFDckMsTUFBTUcsVUFJSkgsQ0FBQUEsbUNBQUFBLDZCQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSwwQkFBMkJJLEtBQUssQ0FBQyxvQ0FBakNKLG1DQUE2RCxFQUFFO1FBQ2pFLE1BQU1LLDJCQUEyQkYsT0FBTyxDQUFDLEVBQUUsSUFBSUEsT0FBTyxDQUFDLEVBQUUsSUFBSTtRQUU3RCxpSUFBaUk7UUFDakksTUFBTUcsdUJBQXdCLDRCQUF5QlQsb0JBQWtCO1FBQ3pFLE1BQU1VLHdCQUF3QkYsMkJBQ3pCLHNDQUFtQ0EsMkJBQXlCLGlCQUM1RDtRQUVMLE1BQU1HLGdCQUFtQkQsd0JBQXNCLE1BQUdEO1FBQ2xELE1BQU05QixRQUFRTixnQkFBZ0JLLGdCQUFnQixDQUFDTSxhQUFhQztRQUU1RCwrRUFBK0U7UUFDL0VaLGdCQUFnQlEsa0JBQWtCLENBQUMsWUFBWUcsYUFBYTJCO1FBRTVEdEMsZ0JBQWdCTyxpQkFBaUIsQ0FBQ0Q7SUFDcEMsT0FBTyxFQUVOO0FBQ0g7QUFFTyxTQUFTUCxnQkFDZFksV0FBb0IsRUFDcEJDLFNBQTBCO0lBRTFCLDZFQUE2RTtJQUM3RSxJQUFJYSxDQUFBQSxHQUFBQSxjQUFBQSxtQkFBQUEsRUFBb0JkLGdCQUFnQmUsQ0FBQUEsR0FBQUEsbUJBQUFBLGlCQUFBQSxFQUFrQmYsY0FBYztJQUV4RSxJQUFJVixJQUFvQixFQUFtQjtRQUN6QyxNQUFNSyxRQUFRTixnQkFBZ0JLLGdCQUFnQixDQUFDTSxhQUFhQztRQUU1RCxvRkFBb0Y7UUFDcEYyQixDQUFBQSxHQUFBQSxtQkFBQUEsaUJBQUFBLEVBQWtCakM7SUFDcEIsT0FBTyxFQUVOO0FBQ0giLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL2NsaWVudC9yZWFjdC1jbGllbnQtY2FsbGJhY2tzL2Vycm9yLWJvdW5kYXJ5LWNhbGxiYWNrcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGZpbGUgaXMgb25seSB1c2VkIGluIGFwcCByb3V0ZXIgZHVlIHRvIHRoZSBzcGVjaWZpYyBlcnJvciBzdGF0ZSBoYW5kbGluZy5cblxuaW1wb3J0IHR5cGUgeyBFcnJvckluZm8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGlzTmV4dFJvdXRlckVycm9yIH0gZnJvbSAnLi4vY29tcG9uZW50cy9pcy1uZXh0LXJvdXRlci1lcnJvcidcbmltcG9ydCB7IGlzQmFpbG91dFRvQ1NSRXJyb3IgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL2xhenktZHluYW1pYy9iYWlsb3V0LXRvLWNzcidcbmltcG9ydCB7IHJlcG9ydEdsb2JhbEVycm9yIH0gZnJvbSAnLi9yZXBvcnQtZ2xvYmFsLWVycm9yJ1xuaW1wb3J0IHsgRXJyb3JCb3VuZGFyeUhhbmRsZXIgfSBmcm9tICcuLi9jb21wb25lbnRzL2Vycm9yLWJvdW5kYXJ5J1xuaW1wb3J0IERlZmF1bHRFcnJvckJvdW5kYXJ5IGZyb20gJy4uL2NvbXBvbmVudHMvYnVpbHRpbi9nbG9iYWwtZXJyb3InXG5cbmNvbnN0IGRldlRvb2xFcnJvck1vZDogdHlwZW9mIGltcG9ydCgnLi4vLi4vbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycycpID1cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJ1xuICAgID8gKHJlcXVpcmUoJy4uLy4uL25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9lcnJvcnMnKSBhcyB0eXBlb2YgaW1wb3J0KCcuLi8uLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvZXJyb3JzJykpXG4gICAgOiB7XG4gICAgICAgIGRlY29yYXRlRGV2RXJyb3I6IChlcnJvcjogdW5rbm93bikgPT4gZXJyb3IgYXMgRXJyb3IsXG4gICAgICAgIGhhbmRsZUNsaWVudEVycm9yOiAoKSA9PiB7fSxcbiAgICAgICAgb3JpZ2luQ29uc29sZUVycm9yOiBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSksXG4gICAgICB9XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkNhdWdodEVycm9yKFxuICB0aHJvd25WYWx1ZTogdW5rbm93bixcbiAgZXJyb3JJbmZvOiBFcnJvckluZm8gJiB7IGVycm9yQm91bmRhcnk/OiBSZWFjdC5Db21wb25lbnQgfVxuKSB7XG4gIGNvbnN0IGVycm9yQm91bmRhcnlDb21wb25lbnQgPSBlcnJvckluZm8uZXJyb3JCb3VuZGFyeT8uY29uc3RydWN0b3JcblxuICBsZXQgaXNJbXBsaWNpdEVycm9yQm91bmRhcnlcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNvbnN0IHsgQXBwRGV2T3ZlcmxheUVycm9yQm91bmRhcnkgfSA9XG4gICAgICByZXF1aXJlKCcuLi8uLi9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvYXBwLWRldi1vdmVybGF5LWVycm9yLWJvdW5kYXJ5JykgYXMgdHlwZW9mIGltcG9ydCgnLi4vLi4vbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2FwcC1kZXYtb3ZlcmxheS1lcnJvci1ib3VuZGFyeScpXG5cbiAgICBpc0ltcGxpY2l0RXJyb3JCb3VuZGFyeSA9XG4gICAgICBlcnJvckJvdW5kYXJ5Q29tcG9uZW50ID09PSBBcHBEZXZPdmVybGF5RXJyb3JCb3VuZGFyeVxuICB9XG5cbiAgaXNJbXBsaWNpdEVycm9yQm91bmRhcnkgPVxuICAgIGlzSW1wbGljaXRFcnJvckJvdW5kYXJ5IHx8XG4gICAgKGVycm9yQm91bmRhcnlDb21wb25lbnQgPT09IEVycm9yQm91bmRhcnlIYW5kbGVyICYmXG4gICAgICAoZXJyb3JJbmZvLmVycm9yQm91bmRhcnkhIGFzIEluc3RhbmNlVHlwZTx0eXBlb2YgRXJyb3JCb3VuZGFyeUhhbmRsZXI+KVxuICAgICAgICAucHJvcHMuZXJyb3JDb21wb25lbnQgPT09IERlZmF1bHRFcnJvckJvdW5kYXJ5KVxuXG4gIC8vIFNraXAgdGhlIHNlZ21lbnQgZXhwbG9yZXIgdHJpZ2dlcmVkIGVycm9yXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc3QgeyBTRUdNRU5UX0VYUExPUkVSX1NJTVVMQVRFRF9FUlJPUl9NRVNTQUdFIH0gPVxuICAgICAgcmVxdWlyZSgnLi4vLi4vbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL3NlZ21lbnQtZXhwbG9yZXItbm9kZScpIGFzIHR5cGVvZiBpbXBvcnQoJy4uLy4uL25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9zZWdtZW50LWV4cGxvcmVyLW5vZGUnKVxuICAgIGlmIChcbiAgICAgIHRocm93blZhbHVlIGluc3RhbmNlb2YgRXJyb3IgJiZcbiAgICAgIHRocm93blZhbHVlLm1lc3NhZ2UgPT09IFNFR01FTlRfRVhQTE9SRVJfU0lNVUxBVEVEX0VSUk9SX01FU1NBR0VcbiAgICApIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIGlmIChpc0ltcGxpY2l0RXJyb3JCb3VuZGFyeSkge1xuICAgIC8vIFdlIGRvbid0IGNvbnNpZGVyIGVycm9ycyBjYXVnaHQgdW5sZXNzIHRoZXkncmUgY2F1Z2h0IGJ5IGFuIGV4cGxpY2l0IGVycm9yXG4gICAgLy8gYm91bmRhcnkuIFRoZSBidWlsdC1pbiBvbmVzIGFyZSBjb25zaWRlcmVkIGltcGxpY2l0LlxuICAgIC8vIFRoaXMgbWltaWNzIGhvdyB0aGUgc2FtZSBhcHAgd291bGQgYmVoYXZlIHdpdGhvdXQgTmV4dC5qcy5cbiAgICByZXR1cm4gb25VbmNhdWdodEVycm9yKHRocm93blZhbHVlLCBlcnJvckluZm8pXG4gIH1cblxuICAvLyBTa2lwIGNlcnRhaW4gY3VzdG9tIGVycm9ycyB3aGljaCBhcmUgbm90IGV4cGVjdGVkIHRvIGJlIHJlcG9ydGVkIG9uIGNsaWVudFxuICBpZiAoaXNCYWlsb3V0VG9DU1JFcnJvcih0aHJvd25WYWx1ZSkgfHwgaXNOZXh0Um91dGVyRXJyb3IodGhyb3duVmFsdWUpKSByZXR1cm5cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNvbnN0IGVycm9yQm91bmRhcnlOYW1lID1cbiAgICAgIC8vIHJlYWQgcmVhY3QgY29tcG9uZW50IGRpc3BsYXlOYW1lXG4gICAgICAoZXJyb3JCb3VuZGFyeUNvbXBvbmVudCBhcyBhbnkpPy5kaXNwbGF5TmFtZSB8fFxuICAgICAgZXJyb3JCb3VuZGFyeUNvbXBvbmVudD8ubmFtZSB8fFxuICAgICAgJ1Vua25vd24nXG5cbiAgICBjb25zdCBjb21wb25lbnRUaGF0RXJyb3JlZEZyYW1lID0gZXJyb3JJbmZvPy5jb21wb25lbnRTdGFjaz8uc3BsaXQoJ1xcbicpWzFdXG5cbiAgICAvLyBNYXRjaCBjaHJvbWUgb3Igc2FmYXJpIHN0YWNrIHRyYWNlXG4gICAgY29uc3QgbWF0Y2hlcyA9XG4gICAgICAvLyByZWdleCB0byBtYXRjaCB0aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgc3RhY2sgdHJhY2VcbiAgICAgIC8vIGV4YW1wbGUgMTogYXQgUGFnZSAoaHR0cDovL2xvY2FsaG9zdDozMDAwL19uZXh0L3N0YXRpYy9jaHVua3MvcGFnZXMvaW5kZXguanM/dHM9MTYzMTYwMDAwMDAwMDoyOjEpXG4gICAgICAvLyBleGFtcGxlIDI6IFBhZ2VAaHR0cDovL2xvY2FsaG9zdDozMDAwL19uZXh0L3N0YXRpYy9jaHVua3MvcGFnZXMvaW5kZXguanM/dHM9MTYzMTYwMDAwMDAwMDoyOjFcbiAgICAgIGNvbXBvbmVudFRoYXRFcnJvcmVkRnJhbWU/Lm1hdGNoKC9cXHMrYXQgKFxcdyspXFxzK3woXFx3KylALykgPz8gW11cbiAgICBjb25zdCBjb21wb25lbnRUaGF0RXJyb3JlZE5hbWUgPSBtYXRjaGVzWzFdIHx8IG1hdGNoZXNbMl0gfHwgJ1Vua25vd24nXG5cbiAgICAvLyBDcmVhdGUgZXJyb3IgbG9jYXRpb24gd2l0aCBlcnJvcmVkIGNvbXBvbmVudCBhbmQgZXJyb3IgYm91bmRhcnksIHRvIG1hdGNoIHRoZSBiZWhhdmlvciBvZiBkZWZhdWx0IFJlYWN0IG9uQ2F1Z2h0RXJyb3IgaGFuZGxlci5cbiAgICBjb25zdCBlcnJvckJvdW5kYXJ5TWVzc2FnZSA9IGBJdCB3YXMgaGFuZGxlZCBieSB0aGUgPCR7ZXJyb3JCb3VuZGFyeU5hbWV9PiBlcnJvciBib3VuZGFyeS5gXG4gICAgY29uc3QgY29tcG9uZW50RXJyb3JNZXNzYWdlID0gY29tcG9uZW50VGhhdEVycm9yZWROYW1lXG4gICAgICA/IGBUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gdGhlIDwke2NvbXBvbmVudFRoYXRFcnJvcmVkTmFtZX0+IGNvbXBvbmVudC5gXG4gICAgICA6IGBUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gb25lIG9mIHlvdXIgY29tcG9uZW50cy5gXG5cbiAgICBjb25zdCBlcnJvckxvY2F0aW9uID0gYCR7Y29tcG9uZW50RXJyb3JNZXNzYWdlfSAke2Vycm9yQm91bmRhcnlNZXNzYWdlfWBcbiAgICBjb25zdCBlcnJvciA9IGRldlRvb2xFcnJvck1vZC5kZWNvcmF0ZURldkVycm9yKHRocm93blZhbHVlLCBlcnJvckluZm8pXG5cbiAgICAvLyBMb2cgYW5kIHJlcG9ydCB0aGUgZXJyb3Igd2l0aCBsb2NhdGlvbiBidXQgd2l0aG91dCBtb2RpZnlpbmcgdGhlIGVycm9yIHN0YWNrXG4gICAgZGV2VG9vbEVycm9yTW9kLm9yaWdpbkNvbnNvbGVFcnJvcignJW9cXG5cXG4lcycsIHRocm93blZhbHVlLCBlcnJvckxvY2F0aW9uKVxuXG4gICAgZGV2VG9vbEVycm9yTW9kLmhhbmRsZUNsaWVudEVycm9yKGVycm9yKVxuICB9IGVsc2Uge1xuICAgIGRldlRvb2xFcnJvck1vZC5vcmlnaW5Db25zb2xlRXJyb3IodGhyb3duVmFsdWUpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uVW5jYXVnaHRFcnJvcihcbiAgdGhyb3duVmFsdWU6IHVua25vd24sXG4gIGVycm9ySW5mbzogUmVhY3QuRXJyb3JJbmZvXG4pIHtcbiAgLy8gU2tpcCBjZXJ0YWluIGN1c3RvbSBlcnJvcnMgd2hpY2ggYXJlIG5vdCBleHBlY3RlZCB0byBiZSByZXBvcnRlZCBvbiBjbGllbnRcbiAgaWYgKGlzQmFpbG91dFRvQ1NSRXJyb3IodGhyb3duVmFsdWUpIHx8IGlzTmV4dFJvdXRlckVycm9yKHRocm93blZhbHVlKSkgcmV0dXJuXG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zdCBlcnJvciA9IGRldlRvb2xFcnJvck1vZC5kZWNvcmF0ZURldkVycm9yKHRocm93blZhbHVlLCBlcnJvckluZm8pXG5cbiAgICAvLyBUT0RPOiBBZGQgYW4gYWRlbmR1bSB0byB0aGUgb3ZlcmxheSB0ZWxsaW5nIHBlb3BsZSBhYm91dCBjdXN0b20gZXJyb3IgYm91bmRhcmllcy5cbiAgICByZXBvcnRHbG9iYWxFcnJvcihlcnJvcilcbiAgfSBlbHNlIHtcbiAgICByZXBvcnRHbG9iYWxFcnJvcih0aHJvd25WYWx1ZSlcbiAgfVxufVxuIl0sIm5hbWVzIjpbIm9uQ2F1Z2h0RXJyb3IiLCJvblVuY2F1Z2h0RXJyb3IiLCJkZXZUb29sRXJyb3JNb2QiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJyZXF1aXJlIiwiZGVjb3JhdGVEZXZFcnJvciIsImVycm9yIiwiaGFuZGxlQ2xpZW50RXJyb3IiLCJvcmlnaW5Db25zb2xlRXJyb3IiLCJjb25zb2xlIiwiYmluZCIsInRocm93blZhbHVlIiwiZXJyb3JJbmZvIiwiZXJyb3JCb3VuZGFyeUNvbXBvbmVudCIsImVycm9yQm91bmRhcnkiLCJjb25zdHJ1Y3RvciIsImlzSW1wbGljaXRFcnJvckJvdW5kYXJ5IiwiQXBwRGV2T3ZlcmxheUVycm9yQm91bmRhcnkiLCJFcnJvckJvdW5kYXJ5SGFuZGxlciIsInByb3BzIiwiZXJyb3JDb21wb25lbnQiLCJEZWZhdWx0RXJyb3JCb3VuZGFyeSIsIlNFR01FTlRfRVhQTE9SRVJfU0lNVUxBVEVEX0VSUk9SX01FU1NBR0UiLCJFcnJvciIsIm1lc3NhZ2UiLCJpc0JhaWxvdXRUb0NTUkVycm9yIiwiaXNOZXh0Um91dGVyRXJyb3IiLCJlcnJvckJvdW5kYXJ5TmFtZSIsImRpc3BsYXlOYW1lIiwibmFtZSIsImNvbXBvbmVudFRoYXRFcnJvcmVkRnJhbWUiLCJjb21wb25lbnRTdGFjayIsInNwbGl0IiwibWF0Y2hlcyIsIm1hdGNoIiwiY29tcG9uZW50VGhhdEVycm9yZWROYW1lIiwiZXJyb3JCb3VuZGFyeU1lc3NhZ2UiLCJjb21wb25lbnRFcnJvck1lc3NhZ2UiLCJlcnJvckxvY2F0aW9uIiwicmVwb3J0R2xvYmFsRXJyb3IiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/react-client-callbacks/error-boundary-callbacks.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js":
/*!**********************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js ***!
  \**********************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("// This module can be shared between both pages router and app router\n\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    isRecoverableError: function() {\n        return isRecoverableError;\n    },\n    onRecoverableError: function() {\n        return onRecoverableError;\n    }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _bailouttocsr = __webpack_require__(/*! ../../shared/lib/lazy-dynamic/bailout-to-csr */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../lib/is-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/is-error.js\"));\nconst _reportglobalerror = __webpack_require__(/*! ./report-global-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/react-client-callbacks/report-global-error.js\");\nconst recoverableErrors = new WeakSet();\nfunction isRecoverableError(error) {\n    return recoverableErrors.has(error);\n}\nconst onRecoverableError = (error, errorInfo)=>{\n    // x-ref: https://github.com/facebook/react/pull/28736\n    let cause = (0, _iserror.default)(error) && 'cause' in error ? error.cause : error;\n    // Skip certain custom errors which are not expected to be reported on client\n    if ((0, _bailouttocsr.isBailoutToCSRError)(cause)) return;\n    if (true) {\n        const { decorateDevError } = __webpack_require__(/*! ../../next-devtools/userspace/app/errors/stitched-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\");\n        const causeError = decorateDevError(cause, errorInfo);\n        recoverableErrors.add(causeError);\n        cause = causeError;\n    }\n    (0, _reportglobalerror.reportGlobalError)(cause);\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=on-recoverable-error.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvcmVhY3QtY2xpZW50LWNhbGxiYWNrcy9vbi1yZWNvdmVyYWJsZS1lcnJvci5qcyIsIm1hcHBpbmdzIjoiQUFBQSxxRUFBcUU7Ozs7Ozs7Ozs7Ozs7SUFTckRBLGtCQUFrQjtlQUFsQkE7O0lBSUhDLGtCQUFrQjtlQUFsQkE7Ozs7MENBVnVCOzhFQUNoQjsrQ0FDYztBQUVsQyxNQUFNQyxvQkFBb0IsSUFBSUM7QUFFdkIsU0FBU0gsbUJBQW1CSSxLQUFZO0lBQzdDLE9BQU9GLGtCQUFrQkcsR0FBRyxDQUFDRDtBQUMvQjtBQUVPLE1BQU1ILHFCQUE2RCxDQUN4RUcsT0FDQUU7SUFFQSxzREFBc0Q7SUFDdEQsSUFBSUMsUUFBUUMsQ0FBQUEsR0FBQUEsU0FBQUEsT0FBQUEsRUFBUUosVUFBVSxXQUFXQSxRQUFRQSxNQUFNRyxLQUFLLEdBQUdIO0lBQy9ELDZFQUE2RTtJQUM3RSxJQUFJSyxDQUFBQSxHQUFBQSxjQUFBQSxtQkFBQUEsRUFBb0JGLFFBQVE7SUFFaEMsSUFBSUcsSUFBb0IsRUFBbUI7UUFDekMsTUFBTSxFQUFFRyxnQkFBZ0IsRUFBRSxHQUN4QkMsbUJBQU9BLENBQUMsOFNBQXlEO1FBQ25FLE1BQU1DLGFBQWFGLGlCQUFpQk4sT0FBT0Q7UUFDM0NKLGtCQUFrQmMsR0FBRyxDQUFDRDtRQUN0QlIsUUFBUVE7SUFDVjtJQUVBRSxDQUFBQSxHQUFBQSxtQkFBQUEsaUJBQUFBLEVBQWtCVjtBQUNwQiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9zcmMvY2xpZW50L3JlYWN0LWNsaWVudC1jYWxsYmFja3Mvb24tcmVjb3ZlcmFibGUtZXJyb3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBtb2R1bGUgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGJvdGggcGFnZXMgcm91dGVyIGFuZCBhcHAgcm91dGVyXG5cbmltcG9ydCB0eXBlIHsgSHlkcmF0aW9uT3B0aW9ucyB9IGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnXG5pbXBvcnQgeyBpc0JhaWxvdXRUb0NTUkVycm9yIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi9sYXp5LWR5bmFtaWMvYmFpbG91dC10by1jc3InXG5pbXBvcnQgaXNFcnJvciBmcm9tICcuLi8uLi9saWIvaXMtZXJyb3InXG5pbXBvcnQgeyByZXBvcnRHbG9iYWxFcnJvciB9IGZyb20gJy4vcmVwb3J0LWdsb2JhbC1lcnJvcidcblxuY29uc3QgcmVjb3ZlcmFibGVFcnJvcnMgPSBuZXcgV2Vha1NldDxFcnJvcj4oKVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWNvdmVyYWJsZUVycm9yKGVycm9yOiBFcnJvcik6IGJvb2xlYW4ge1xuICByZXR1cm4gcmVjb3ZlcmFibGVFcnJvcnMuaGFzKGVycm9yKVxufVxuXG5leHBvcnQgY29uc3Qgb25SZWNvdmVyYWJsZUVycm9yOiBIeWRyYXRpb25PcHRpb25zWydvblJlY292ZXJhYmxlRXJyb3InXSA9IChcbiAgZXJyb3IsXG4gIGVycm9ySW5mb1xuKSA9PiB7XG4gIC8vIHgtcmVmOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yODczNlxuICBsZXQgY2F1c2UgPSBpc0Vycm9yKGVycm9yKSAmJiAnY2F1c2UnIGluIGVycm9yID8gZXJyb3IuY2F1c2UgOiBlcnJvclxuICAvLyBTa2lwIGNlcnRhaW4gY3VzdG9tIGVycm9ycyB3aGljaCBhcmUgbm90IGV4cGVjdGVkIHRvIGJlIHJlcG9ydGVkIG9uIGNsaWVudFxuICBpZiAoaXNCYWlsb3V0VG9DU1JFcnJvcihjYXVzZSkpIHJldHVyblxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc3QgeyBkZWNvcmF0ZURldkVycm9yIH0gPVxuICAgICAgcmVxdWlyZSgnLi4vLi4vbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy9zdGl0Y2hlZC1lcnJvcicpIGFzIHR5cGVvZiBpbXBvcnQoJy4uLy4uL25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9lcnJvcnMvc3RpdGNoZWQtZXJyb3InKVxuICAgIGNvbnN0IGNhdXNlRXJyb3IgPSBkZWNvcmF0ZURldkVycm9yKGNhdXNlLCBlcnJvckluZm8pXG4gICAgcmVjb3ZlcmFibGVFcnJvcnMuYWRkKGNhdXNlRXJyb3IpXG4gICAgY2F1c2UgPSBjYXVzZUVycm9yXG4gIH1cblxuICByZXBvcnRHbG9iYWxFcnJvcihjYXVzZSlcbn1cbiJdLCJuYW1lcyI6WyJpc1JlY292ZXJhYmxlRXJyb3IiLCJvblJlY292ZXJhYmxlRXJyb3IiLCJyZWNvdmVyYWJsZUVycm9ycyIsIldlYWtTZXQiLCJlcnJvciIsImhhcyIsImVycm9ySW5mbyIsImNhdXNlIiwiaXNFcnJvciIsImlzQmFpbG91dFRvQ1NSRXJyb3IiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJkZWNvcmF0ZURldkVycm9yIiwicmVxdWlyZSIsImNhdXNlRXJyb3IiLCJhZGQiLCJyZXBvcnRHbG9iYWxFcnJvciJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/react-client-callbacks/on-recoverable-error.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/react-client-callbacks/report-global-error.js":
/*!*********************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/react-client-callbacks/report-global-error.js ***!
  \*********************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"reportGlobalError\", ({\n    enumerable: true,\n    get: function() {\n        return reportGlobalError;\n    }\n}));\nconst reportGlobalError = typeof reportError === 'function' ? reportError : (error)=>{\n    // TODO: Dispatch error event\n    globalThis.console.error(error);\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=report-global-error.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvcmVhY3QtY2xpZW50LWNhbGxiYWNrcy9yZXBvcnQtZ2xvYmFsLWVycm9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7cURBQWFBOzs7ZUFBQUE7OztBQUFOLE1BQU1BLG9CQUNYLE9BQU9DLGdCQUFnQixhQUVuQixjQUVBLENBQUNDO0lBQ0MsNkJBQTZCO0lBQzdCQyxXQUFXQyxPQUFPLENBQUNGLEtBQUssQ0FBQ0E7QUFDM0IiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL2NsaWVudC9yZWFjdC1jbGllbnQtY2FsbGJhY2tzL3JlcG9ydC1nbG9iYWwtZXJyb3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHJlcG9ydEdsb2JhbEVycm9yID1cbiAgdHlwZW9mIHJlcG9ydEVycm9yID09PSAnZnVuY3Rpb24nXG4gICAgPyAvLyBJbiBtb2Rlcm4gYnJvd3NlcnMsIHJlcG9ydEVycm9yIHdpbGwgZGlzcGF0Y2ggYW4gZXJyb3IgZXZlbnQsXG4gICAgICAvLyBlbXVsYXRpbmcgYW4gdW5jYXVnaHQgSmF2YVNjcmlwdCBlcnJvci5cbiAgICAgIHJlcG9ydEVycm9yXG4gICAgOiAoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgLy8gVE9ETzogRGlzcGF0Y2ggZXJyb3IgZXZlbnRcbiAgICAgICAgZ2xvYmFsVGhpcy5jb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgfVxuIl0sIm5hbWVzIjpbInJlcG9ydEdsb2JhbEVycm9yIiwicmVwb3J0RXJyb3IiLCJlcnJvciIsImdsb2JhbFRoaXMiLCJjb25zb2xlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/react-client-callbacks/report-global-error.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/remove-base-path.js":
/*!*******************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/remove-base-path.js ***!
  \*******************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"removeBasePath\", ({\n    enumerable: true,\n    get: function() {\n        return removeBasePath;\n    }\n}));\nconst _hasbasepath = __webpack_require__(/*! ./has-base-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/has-base-path.js\");\nconst basePath =  false || '';\nfunction removeBasePath(path) {\n    if (false) {}\n    // Can't trim the basePath if it has zero length!\n    if (basePath.length === 0) return path;\n    path = path.slice(basePath.length);\n    if (!path.startsWith('/')) path = \"/\" + path;\n    return path;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=remove-base-path.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvcmVtb3ZlLWJhc2UtcGF0aC5qcyIsIm1hcHBpbmdzIjoiOzs7O2tEQUlnQkE7OztlQUFBQTs7O3lDQUpZO0FBRTVCLE1BQU1DLFdBQVlDLE1BQWtDLElBQWU7QUFFNUQsU0FBU0YsZUFBZUssSUFBWTtJQUN6QyxJQUFJSCxLQUEwQyxFQUFFLEVBSS9DO0lBRUQsaURBQWlEO0lBQ2pELElBQUlELFNBQVNPLE1BQU0sS0FBSyxHQUFHLE9BQU9IO0lBRWxDQSxPQUFPQSxLQUFLSSxLQUFLLENBQUNSLFNBQVNPLE1BQU07SUFDakMsSUFBSSxDQUFDSCxLQUFLSyxVQUFVLENBQUMsTUFBTUwsT0FBUSxNQUFHQTtJQUN0QyxPQUFPQTtBQUNUIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9zcmMvY2xpZW50L3JlbW92ZS1iYXNlLXBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaGFzQmFzZVBhdGggfSBmcm9tICcuL2hhcy1iYXNlLXBhdGgnXG5cbmNvbnN0IGJhc2VQYXRoID0gKHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEggYXMgc3RyaW5nKSB8fCAnJ1xuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQmFzZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9NQU5VQUxfQ0xJRU5UX0JBU0VfUEFUSCkge1xuICAgIGlmICghaGFzQmFzZVBhdGgocGF0aCkpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG5cbiAgLy8gQ2FuJ3QgdHJpbSB0aGUgYmFzZVBhdGggaWYgaXQgaGFzIHplcm8gbGVuZ3RoIVxuICBpZiAoYmFzZVBhdGgubGVuZ3RoID09PSAwKSByZXR1cm4gcGF0aFxuXG4gIHBhdGggPSBwYXRoLnNsaWNlKGJhc2VQYXRoLmxlbmd0aClcbiAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkgcGF0aCA9IGAvJHtwYXRofWBcbiAgcmV0dXJuIHBhdGhcbn1cbiJdLCJuYW1lcyI6WyJyZW1vdmVCYXNlUGF0aCIsImJhc2VQYXRoIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9ST1VURVJfQkFTRVBBVEgiLCJwYXRoIiwiX19ORVhUX01BTlVBTF9DTElFTlRfQkFTRV9QQVRIIiwiaGFzQmFzZVBhdGgiLCJsZW5ndGgiLCJzbGljZSIsInN0YXJ0c1dpdGgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/remove-base-path.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/remove-locale.js":
/*!****************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/remove-locale.js ***!
  \****************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"removeLocale\", ({\n    enumerable: true,\n    get: function() {\n        return removeLocale;\n    }\n}));\nconst _parsepath = __webpack_require__(/*! ../shared/lib/router/utils/parse-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction removeLocale(path, locale) {\n    if (false) {}\n    return path;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=remove-locale.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvcmVtb3ZlLWxvY2FsZS5qcyIsIm1hcHBpbmdzIjoiOzs7O2dEQUVnQkE7OztlQUFBQTs7O3VDQUZVO0FBRW5CLFNBQVNBLGFBQWFDLElBQVksRUFBRUMsTUFBZTtJQUN4RCxJQUFJQyxLQUErQixFQUFFLEVBWXBDO0lBQ0QsT0FBT0Y7QUFDVCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvc3JjL2NsaWVudC9yZW1vdmUtbG9jYWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhcnNlUGF0aCB9IGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhcnNlLXBhdGgnXG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVMb2NhbGUocGF0aDogc3RyaW5nLCBsb2NhbGU/OiBzdHJpbmcpIHtcbiAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcbiAgICBjb25zdCB7IHBhdGhuYW1lIH0gPSBwYXJzZVBhdGgocGF0aClcbiAgICBjb25zdCBwYXRoTG93ZXIgPSBwYXRobmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgY29uc3QgbG9jYWxlTG93ZXIgPSBsb2NhbGU/LnRvTG93ZXJDYXNlKClcblxuICAgIHJldHVybiBsb2NhbGUgJiZcbiAgICAgIChwYXRoTG93ZXIuc3RhcnRzV2l0aChgLyR7bG9jYWxlTG93ZXJ9L2ApIHx8XG4gICAgICAgIHBhdGhMb3dlciA9PT0gYC8ke2xvY2FsZUxvd2VyfWApXG4gICAgICA/IGAke3BhdGhuYW1lLmxlbmd0aCA9PT0gbG9jYWxlLmxlbmd0aCArIDEgPyBgL2AgOiBgYH0ke3BhdGguc2xpY2UoXG4gICAgICAgICAgbG9jYWxlLmxlbmd0aCArIDFcbiAgICAgICAgKX1gXG4gICAgICA6IHBhdGhcbiAgfVxuICByZXR1cm4gcGF0aFxufVxuIl0sIm5hbWVzIjpbInJlbW92ZUxvY2FsZSIsInBhdGgiLCJsb2NhbGUiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX0kxOE5fU1VQUE9SVCIsInBhdGhuYW1lIiwicGFyc2VQYXRoIiwicGF0aExvd2VyIiwidG9Mb3dlckNhc2UiLCJsb2NhbGVMb3dlciIsInN0YXJ0c1dpdGgiLCJsZW5ndGgiLCJzbGljZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/remove-locale.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/request-idle-callback.js":
/*!************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/request-idle-callback.js ***!
  \************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    cancelIdleCallback: function() {\n        return cancelIdleCallback;\n    },\n    requestIdleCallback: function() {\n        return requestIdleCallback;\n    }\n});\nconst requestIdleCallback = typeof self !== 'undefined' && self.requestIdleCallback && self.requestIdleCallback.bind(window) || function(cb) {\n    let start = Date.now();\n    return self.setTimeout(function() {\n        cb({\n            didTimeout: false,\n            timeRemaining: function() {\n                return Math.max(0, 50 - (Date.now() - start));\n            }\n        });\n    }, 1);\n};\nconst cancelIdleCallback = typeof self !== 'undefined' && self.cancelIdleCallback && self.cancelIdleCallback.bind(window) || function(id) {\n    return clearTimeout(id);\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=request-idle-callback.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvcmVxdWVzdC1pZGxlLWNhbGxiYWNrLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQWdCYUEsa0JBQWtCO2VBQWxCQTs7SUFoQkFDLG1CQUFtQjtlQUFuQkE7OztBQUFOLE1BQU1BLHNCQUNWLE9BQU9DLFNBQVMsZUFDZkEsS0FBS0QsbUJBQW1CLElBQ3hCQyxLQUFLRCxtQkFBbUIsQ0FBQ0UsSUFBSSxDQUFDQyxXQUNoQyxTQUFVQyxFQUF1QjtJQUMvQixJQUFJQyxRQUFRQyxLQUFLQyxHQUFHO0lBQ3BCLE9BQU9OLEtBQUtPLFVBQVUsQ0FBQztRQUNyQkosR0FBRztZQUNESyxZQUFZO1lBQ1pDLGVBQWU7Z0JBQ2IsT0FBT0MsS0FBS0MsR0FBRyxDQUFDLEdBQUcsS0FBTU4sQ0FBQUEsS0FBS0MsR0FBRyxLQUFLRixLQUFBQSxDQUFJO1lBQzVDO1FBQ0Y7SUFDRixHQUFHO0FBQ0w7QUFFSyxNQUFNTixxQkFDVixPQUFPRSxTQUFTLGVBQ2ZBLEtBQUtGLGtCQUFrQixJQUN2QkUsS0FBS0Ysa0JBQWtCLENBQUNHLElBQUksQ0FBQ0MsV0FDL0IsU0FBVVUsRUFBVTtJQUNsQixPQUFPQyxhQUFhRDtBQUN0QiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvc3JjL2NsaWVudC9yZXF1ZXN0LWlkbGUtY2FsbGJhY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHJlcXVlc3RJZGxlQ2FsbGJhY2sgPVxuICAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmXG4gICAgc2VsZi5yZXF1ZXN0SWRsZUNhbGxiYWNrICYmXG4gICAgc2VsZi5yZXF1ZXN0SWRsZUNhbGxiYWNrLmJpbmQod2luZG93KSkgfHxcbiAgZnVuY3Rpb24gKGNiOiBJZGxlUmVxdWVzdENhbGxiYWNrKTogbnVtYmVyIHtcbiAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpXG4gICAgcmV0dXJuIHNlbGYuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBjYih7XG4gICAgICAgIGRpZFRpbWVvdXQ6IGZhbHNlLFxuICAgICAgICB0aW1lUmVtYWluaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIDUwIC0gKERhdGUubm93KCkgLSBzdGFydCkpXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sIDEpXG4gIH1cblxuZXhwb3J0IGNvbnN0IGNhbmNlbElkbGVDYWxsYmFjayA9XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICBzZWxmLmNhbmNlbElkbGVDYWxsYmFjayAmJlxuICAgIHNlbGYuY2FuY2VsSWRsZUNhbGxiYWNrLmJpbmQod2luZG93KSkgfHxcbiAgZnVuY3Rpb24gKGlkOiBudW1iZXIpIHtcbiAgICByZXR1cm4gY2xlYXJUaW1lb3V0KGlkKVxuICB9XG4iXSwibmFtZXMiOlsiY2FuY2VsSWRsZUNhbGxiYWNrIiwicmVxdWVzdElkbGVDYWxsYmFjayIsInNlbGYiLCJiaW5kIiwid2luZG93IiwiY2IiLCJzdGFydCIsIkRhdGUiLCJub3ciLCJzZXRUaW1lb3V0IiwiZGlkVGltZW91dCIsInRpbWVSZW1haW5pbmciLCJNYXRoIiwibWF4IiwiaWQiLCJjbGVhclRpbWVvdXQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/request-idle-callback.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/resolve-href.js":
/*!***************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/resolve-href.js ***!
  \***************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"resolveHref\", ({\n    enumerable: true,\n    get: function() {\n        return resolveHref;\n    }\n}));\nconst _querystring = __webpack_require__(/*! ../shared/lib/router/utils/querystring */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _formaturl = __webpack_require__(/*! ../shared/lib/router/utils/format-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _omit = __webpack_require__(/*! ../shared/lib/router/utils/omit */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/omit.js\");\nconst _utils = __webpack_require__(/*! ../shared/lib/utils */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/utils.js\");\nconst _normalizetrailingslash = __webpack_require__(/*! ./normalize-trailing-slash */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/normalize-trailing-slash.js\");\nconst _islocalurl = __webpack_require__(/*! ../shared/lib/router/utils/is-local-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _utils1 = __webpack_require__(/*! ../shared/lib/router/utils */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _interpolateas = __webpack_require__(/*! ../shared/lib/router/utils/interpolate-as */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\");\nfunction resolveHref(router, href, resolveAs) {\n    // we use a dummy base url for relative urls\n    let base;\n    let urlAsString = typeof href === 'string' ? href : (0, _formaturl.formatWithValidation)(href);\n    // repeated slashes and backslashes in the URL are considered\n    // invalid and will never match a Next.js page/file\n    // https://www.rfc-editor.org/rfc/rfc3986.html#section-3.1\n    const urlProtoMatch = urlAsString.match(/^[a-z][a-z0-9+.-]*:\\/\\//i);\n    const urlAsStringNoProto = urlProtoMatch ? urlAsString.slice(urlProtoMatch[0].length) : urlAsString;\n    const urlParts = urlAsStringNoProto.split('?', 1);\n    if ((urlParts[0] || '').match(/(\\/\\/|\\\\)/)) {\n        console.error(\"Invalid href '\" + urlAsString + \"' passed to next/router in page: '\" + router.pathname + \"'. Repeated forward-slashes (//) or backslashes \\\\ are not valid in the href.\");\n        const normalizedUrl = (0, _utils.normalizeRepeatedSlashes)(urlAsStringNoProto);\n        urlAsString = (urlProtoMatch ? urlProtoMatch[0] : '') + normalizedUrl;\n    }\n    // Return because it cannot be routed by the Next.js router\n    if (!(0, _islocalurl.isLocalURL)(urlAsString)) {\n        return resolveAs ? [\n            urlAsString\n        ] : urlAsString;\n    }\n    try {\n        base = new URL(urlAsString.startsWith('#') ? router.asPath : router.pathname, 'http://n');\n    } catch (_) {\n        // fallback to / for invalid asPath values e.g. //\n        base = new URL('/', 'http://n');\n    }\n    try {\n        const finalUrl = new URL(urlAsString, base);\n        finalUrl.pathname = (0, _normalizetrailingslash.normalizePathTrailingSlash)(finalUrl.pathname);\n        let interpolatedAs = '';\n        if ((0, _utils1.isDynamicRoute)(finalUrl.pathname) && finalUrl.searchParams && resolveAs) {\n            const query = (0, _querystring.searchParamsToUrlQuery)(finalUrl.searchParams);\n            const { result, params } = (0, _interpolateas.interpolateAs)(finalUrl.pathname, finalUrl.pathname, query);\n            if (result) {\n                interpolatedAs = (0, _formaturl.formatWithValidation)({\n                    pathname: result,\n                    hash: finalUrl.hash,\n                    query: (0, _omit.omit)(query, params)\n                });\n            }\n        }\n        // if the origin didn't change, it means we received a relative href\n        const resolvedHref = finalUrl.origin === base.origin ? finalUrl.href.slice(finalUrl.origin.length) : finalUrl.href;\n        return resolveAs ? [\n            resolvedHref,\n            interpolatedAs || resolvedHref\n        ] : resolvedHref;\n    } catch (_) {\n        return resolveAs ? [\n            urlAsString\n        ] : urlAsString;\n    }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=resolve-href.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvcmVzb2x2ZS1ocmVmLmpzIiwibWFwcGluZ3MiOiI7Ozs7K0NBeUJnQkE7OztlQUFBQTs7O3lDQXZCdUI7dUNBQ0Y7a0NBQ2hCO21DQUNvQjtvREFDRTt3Q0FDaEI7b0NBQ0k7MkNBQ0Q7QUFnQnZCLFNBQVNBLFlBQ2RDLE1BQWtCLEVBQ2xCQyxJQUFTLEVBQ1RDLFNBQW1CO0lBRW5CLDRDQUE0QztJQUM1QyxJQUFJQztJQUNKLElBQUlDLGNBQWMsT0FBT0gsU0FBUyxXQUFXQSxPQUFPSSxDQUFBQSxHQUFBQSxXQUFBQSxvQkFBQUEsRUFBcUJKO0lBRXpFLDZEQUE2RDtJQUM3RCxtREFBbUQ7SUFDbkQsMERBQTBEO0lBQzFELE1BQU1LLGdCQUFnQkYsWUFBWUcsS0FBSyxDQUFDO0lBQ3hDLE1BQU1DLHFCQUFxQkYsZ0JBQ3ZCRixZQUFZSyxLQUFLLENBQUNILGFBQWEsQ0FBQyxFQUFFLENBQUNJLE1BQU0sSUFDekNOO0lBRUosTUFBTU8sV0FBV0gsbUJBQW1CSSxLQUFLLENBQUMsS0FBSztJQUUvQyxJQUFLRCxDQUFBQSxRQUFRLENBQUMsRUFBRSxJQUFJLEdBQUMsQ0FBR0osS0FBSyxDQUFDLGNBQWM7UUFDMUNNLFFBQVFDLEtBQUssQ0FDVixtQkFBZ0JWLGNBQVksdUNBQW9DSixPQUFPZSxRQUFRLEdBQUM7UUFFbkYsTUFBTUMsZ0JBQWdCQyxDQUFBQSxHQUFBQSxPQUFBQSx3QkFBQUEsRUFBeUJUO1FBQy9DSixjQUFlRSxDQUFBQSxnQkFBZ0JBLGFBQWEsQ0FBQyxFQUFFLEdBQUcsR0FBQyxHQUFLVTtJQUMxRDtJQUVBLDJEQUEyRDtJQUMzRCxJQUFJLENBQUNFLENBQUFBLEdBQUFBLFlBQUFBLFVBQUFBLEVBQVdkLGNBQWM7UUFDNUIsT0FBUUYsWUFBWTtZQUFDRTtTQUFZLEdBQUdBO0lBQ3RDO0lBRUEsSUFBSTtRQUNGRCxPQUFPLElBQUlnQixJQUNUZixZQUFZZ0IsVUFBVSxDQUFDLE9BQU9wQixPQUFPcUIsTUFBTSxHQUFHckIsT0FBT2UsUUFBUSxFQUM3RDtJQUVKLEVBQUUsT0FBT08sR0FBRztRQUNWLGtEQUFrRDtRQUNsRG5CLE9BQU8sSUFBSWdCLElBQUksS0FBSztJQUN0QjtJQUVBLElBQUk7UUFDRixNQUFNSSxXQUFXLElBQUlKLElBQUlmLGFBQWFEO1FBQ3RDb0IsU0FBU1IsUUFBUSxHQUFHUyxDQUFBQSxHQUFBQSx3QkFBQUEsMEJBQUFBLEVBQTJCRCxTQUFTUixRQUFRO1FBQ2hFLElBQUlVLGlCQUFpQjtRQUVyQixJQUNFQyxDQUFBQSxHQUFBQSxRQUFBQSxjQUFBQSxFQUFlSCxTQUFTUixRQUFRLEtBQ2hDUSxTQUFTSSxZQUFZLElBQ3JCekIsV0FDQTtZQUNBLE1BQU0wQixRQUFRQyxDQUFBQSxHQUFBQSxhQUFBQSxzQkFBc0IsRUFBQ04sU0FBU0ksWUFBWTtZQUUxRCxNQUFNLEVBQUVHLE1BQU0sRUFBRUMsTUFBTSxFQUFFLEdBQUdDLENBQUFBLEdBQUFBLGVBQUFBLGFBQWEsRUFDdENULFNBQVNSLFFBQVEsRUFDakJRLFNBQVNSLFFBQVEsRUFDakJhO1lBR0YsSUFBSUUsUUFBUTtnQkFDVkwsaUJBQWlCcEIsQ0FBQUEsR0FBQUEsV0FBQUEsb0JBQW9CLEVBQUM7b0JBQ3BDVSxVQUFVZTtvQkFDVkcsTUFBTVYsU0FBU1UsSUFBSTtvQkFDbkJMLE9BQU9NLENBQUFBLEdBQUFBLE1BQUFBLElBQUFBLEVBQUtOLE9BQU9HO2dCQUNyQjtZQUNGO1FBQ0Y7UUFFQSxvRUFBb0U7UUFDcEUsTUFBTUksZUFDSlosU0FBU2EsTUFBTSxLQUFLakMsS0FBS2lDLE1BQU0sR0FDM0JiLFNBQVN0QixJQUFJLENBQUNRLEtBQUssQ0FBQ2MsU0FBU2EsTUFBTSxDQUFDMUIsTUFBTSxJQUMxQ2EsU0FBU3RCLElBQUk7UUFFbkIsT0FBT0MsWUFDSDtZQUFDaUM7WUFBY1Ysa0JBQWtCVTtTQUFhLEdBQzlDQTtJQUNOLEVBQUUsT0FBT2IsR0FBRztRQUNWLE9BQU9wQixZQUFZO1lBQUNFO1NBQVksR0FBR0E7SUFDckM7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvc3JjL2NsaWVudC9yZXNvbHZlLWhyZWYudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBOZXh0Um91dGVyLCBVcmwgfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci9yb3V0ZXInXG5cbmltcG9ydCB7IHNlYXJjaFBhcmFtc1RvVXJsUXVlcnkgfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9xdWVyeXN0cmluZydcbmltcG9ydCB7IGZvcm1hdFdpdGhWYWxpZGF0aW9uIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZm9ybWF0LXVybCdcbmltcG9ydCB7IG9taXQgfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9vbWl0J1xuaW1wb3J0IHsgbm9ybWFsaXplUmVwZWF0ZWRTbGFzaGVzIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi91dGlscydcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGhUcmFpbGluZ1NsYXNoIH0gZnJvbSAnLi9ub3JtYWxpemUtdHJhaWxpbmctc2xhc2gnXG5pbXBvcnQgeyBpc0xvY2FsVVJMIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtbG9jYWwtdXJsJ1xuaW1wb3J0IHsgaXNEeW5hbWljUm91dGUgfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscydcbmltcG9ydCB7IGludGVycG9sYXRlQXMgfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pbnRlcnBvbGF0ZS1hcydcblxuLyoqXG4gKiBSZXNvbHZlcyBhIGdpdmVuIGh5cGVybGluayB3aXRoIGEgY2VydGFpbiByb3V0ZXIgc3RhdGUgKGJhc2VQYXRoIG5vdCBpbmNsdWRlZCkuXG4gKiBQcmVzZXJ2ZXMgYWJzb2x1dGUgdXJscy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVIcmVmKFxuICByb3V0ZXI6IE5leHRSb3V0ZXIsXG4gIGhyZWY6IFVybCxcbiAgcmVzb2x2ZUFzOiB0cnVlXG4pOiBbc3RyaW5nLCBzdHJpbmddIHwgW3N0cmluZ11cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlSHJlZihcbiAgcm91dGVyOiBOZXh0Um91dGVyLFxuICBocmVmOiBVcmwsXG4gIHJlc29sdmVBcz86IGZhbHNlXG4pOiBzdHJpbmdcbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlSHJlZihcbiAgcm91dGVyOiBOZXh0Um91dGVyLFxuICBocmVmOiBVcmwsXG4gIHJlc29sdmVBcz86IGJvb2xlYW5cbik6IFtzdHJpbmcsIHN0cmluZ10gfCBbc3RyaW5nXSB8IHN0cmluZyB7XG4gIC8vIHdlIHVzZSBhIGR1bW15IGJhc2UgdXJsIGZvciByZWxhdGl2ZSB1cmxzXG4gIGxldCBiYXNlOiBVUkxcbiAgbGV0IHVybEFzU3RyaW5nID0gdHlwZW9mIGhyZWYgPT09ICdzdHJpbmcnID8gaHJlZiA6IGZvcm1hdFdpdGhWYWxpZGF0aW9uKGhyZWYpXG5cbiAgLy8gcmVwZWF0ZWQgc2xhc2hlcyBhbmQgYmFja3NsYXNoZXMgaW4gdGhlIFVSTCBhcmUgY29uc2lkZXJlZFxuICAvLyBpbnZhbGlkIGFuZCB3aWxsIG5ldmVyIG1hdGNoIGEgTmV4dC5qcyBwYWdlL2ZpbGVcbiAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzM5ODYuaHRtbCNzZWN0aW9uLTMuMVxuICBjb25zdCB1cmxQcm90b01hdGNoID0gdXJsQXNTdHJpbmcubWF0Y2goL15bYS16XVthLXowLTkrLi1dKjpcXC9cXC8vaSlcbiAgY29uc3QgdXJsQXNTdHJpbmdOb1Byb3RvID0gdXJsUHJvdG9NYXRjaFxuICAgID8gdXJsQXNTdHJpbmcuc2xpY2UodXJsUHJvdG9NYXRjaFswXS5sZW5ndGgpXG4gICAgOiB1cmxBc1N0cmluZ1xuXG4gIGNvbnN0IHVybFBhcnRzID0gdXJsQXNTdHJpbmdOb1Byb3RvLnNwbGl0KCc/JywgMSlcblxuICBpZiAoKHVybFBhcnRzWzBdIHx8ICcnKS5tYXRjaCgvKFxcL1xcL3xcXFxcKS8pKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBJbnZhbGlkIGhyZWYgJyR7dXJsQXNTdHJpbmd9JyBwYXNzZWQgdG8gbmV4dC9yb3V0ZXIgaW4gcGFnZTogJyR7cm91dGVyLnBhdGhuYW1lfScuIFJlcGVhdGVkIGZvcndhcmQtc2xhc2hlcyAoLy8pIG9yIGJhY2tzbGFzaGVzIFxcXFwgYXJlIG5vdCB2YWxpZCBpbiB0aGUgaHJlZi5gXG4gICAgKVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRVcmwgPSBub3JtYWxpemVSZXBlYXRlZFNsYXNoZXModXJsQXNTdHJpbmdOb1Byb3RvKVxuICAgIHVybEFzU3RyaW5nID0gKHVybFByb3RvTWF0Y2ggPyB1cmxQcm90b01hdGNoWzBdIDogJycpICsgbm9ybWFsaXplZFVybFxuICB9XG5cbiAgLy8gUmV0dXJuIGJlY2F1c2UgaXQgY2Fubm90IGJlIHJvdXRlZCBieSB0aGUgTmV4dC5qcyByb3V0ZXJcbiAgaWYgKCFpc0xvY2FsVVJMKHVybEFzU3RyaW5nKSkge1xuICAgIHJldHVybiAocmVzb2x2ZUFzID8gW3VybEFzU3RyaW5nXSA6IHVybEFzU3RyaW5nKSBhcyBzdHJpbmdcbiAgfVxuXG4gIHRyeSB7XG4gICAgYmFzZSA9IG5ldyBVUkwoXG4gICAgICB1cmxBc1N0cmluZy5zdGFydHNXaXRoKCcjJykgPyByb3V0ZXIuYXNQYXRoIDogcm91dGVyLnBhdGhuYW1lLFxuICAgICAgJ2h0dHA6Ly9uJ1xuICAgIClcbiAgfSBjYXRjaCAoXykge1xuICAgIC8vIGZhbGxiYWNrIHRvIC8gZm9yIGludmFsaWQgYXNQYXRoIHZhbHVlcyBlLmcuIC8vXG4gICAgYmFzZSA9IG5ldyBVUkwoJy8nLCAnaHR0cDovL24nKVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmaW5hbFVybCA9IG5ldyBVUkwodXJsQXNTdHJpbmcsIGJhc2UpXG4gICAgZmluYWxVcmwucGF0aG5hbWUgPSBub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaChmaW5hbFVybC5wYXRobmFtZSlcbiAgICBsZXQgaW50ZXJwb2xhdGVkQXMgPSAnJ1xuXG4gICAgaWYgKFxuICAgICAgaXNEeW5hbWljUm91dGUoZmluYWxVcmwucGF0aG5hbWUpICYmXG4gICAgICBmaW5hbFVybC5zZWFyY2hQYXJhbXMgJiZcbiAgICAgIHJlc29sdmVBc1xuICAgICkge1xuICAgICAgY29uc3QgcXVlcnkgPSBzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5KGZpbmFsVXJsLnNlYXJjaFBhcmFtcylcblxuICAgICAgY29uc3QgeyByZXN1bHQsIHBhcmFtcyB9ID0gaW50ZXJwb2xhdGVBcyhcbiAgICAgICAgZmluYWxVcmwucGF0aG5hbWUsXG4gICAgICAgIGZpbmFsVXJsLnBhdGhuYW1lLFxuICAgICAgICBxdWVyeVxuICAgICAgKVxuXG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGludGVycG9sYXRlZEFzID0gZm9ybWF0V2l0aFZhbGlkYXRpb24oe1xuICAgICAgICAgIHBhdGhuYW1lOiByZXN1bHQsXG4gICAgICAgICAgaGFzaDogZmluYWxVcmwuaGFzaCxcbiAgICAgICAgICBxdWVyeTogb21pdChxdWVyeSwgcGFyYW1zKSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGUgb3JpZ2luIGRpZG4ndCBjaGFuZ2UsIGl0IG1lYW5zIHdlIHJlY2VpdmVkIGEgcmVsYXRpdmUgaHJlZlxuICAgIGNvbnN0IHJlc29sdmVkSHJlZiA9XG4gICAgICBmaW5hbFVybC5vcmlnaW4gPT09IGJhc2Uub3JpZ2luXG4gICAgICAgID8gZmluYWxVcmwuaHJlZi5zbGljZShmaW5hbFVybC5vcmlnaW4ubGVuZ3RoKVxuICAgICAgICA6IGZpbmFsVXJsLmhyZWZcblxuICAgIHJldHVybiByZXNvbHZlQXNcbiAgICAgID8gW3Jlc29sdmVkSHJlZiwgaW50ZXJwb2xhdGVkQXMgfHwgcmVzb2x2ZWRIcmVmXVxuICAgICAgOiByZXNvbHZlZEhyZWZcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiByZXNvbHZlQXMgPyBbdXJsQXNTdHJpbmddIDogdXJsQXNTdHJpbmdcbiAgfVxufVxuIl0sIm5hbWVzIjpbInJlc29sdmVIcmVmIiwicm91dGVyIiwiaHJlZiIsInJlc29sdmVBcyIsImJhc2UiLCJ1cmxBc1N0cmluZyIsImZvcm1hdFdpdGhWYWxpZGF0aW9uIiwidXJsUHJvdG9NYXRjaCIsIm1hdGNoIiwidXJsQXNTdHJpbmdOb1Byb3RvIiwic2xpY2UiLCJsZW5ndGgiLCJ1cmxQYXJ0cyIsInNwbGl0IiwiY29uc29sZSIsImVycm9yIiwicGF0aG5hbWUiLCJub3JtYWxpemVkVXJsIiwibm9ybWFsaXplUmVwZWF0ZWRTbGFzaGVzIiwiaXNMb2NhbFVSTCIsIlVSTCIsInN0YXJ0c1dpdGgiLCJhc1BhdGgiLCJfIiwiZmluYWxVcmwiLCJub3JtYWxpemVQYXRoVHJhaWxpbmdTbGFzaCIsImludGVycG9sYXRlZEFzIiwiaXNEeW5hbWljUm91dGUiLCJzZWFyY2hQYXJhbXMiLCJxdWVyeSIsInNlYXJjaFBhcmFtc1RvVXJsUXVlcnkiLCJyZXN1bHQiLCJwYXJhbXMiLCJpbnRlcnBvbGF0ZUFzIiwiaGFzaCIsIm9taXQiLCJyZXNvbHZlZEhyZWYiLCJvcmlnaW4iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/resolve-href.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/route-loader.js":
/*!***************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/route-loader.js ***!
  \***************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    createRouteLoader: function() {\n        return createRouteLoader;\n    },\n    getClientBuildManifest: function() {\n        return getClientBuildManifest;\n    },\n    isAssetError: function() {\n        return isAssetError;\n    },\n    markAssetError: function() {\n        return markAssetError;\n    }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _getassetpathfromroute = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/router/utils/get-asset-path-from-route */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js\"));\nconst _trustedtypes = __webpack_require__(/*! ./trusted-types */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/trusted-types.js\");\nconst _requestidlecallback = __webpack_require__(/*! ./request-idle-callback */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/request-idle-callback.js\");\nconst _deploymentid = __webpack_require__(/*! ../build/deployment-id */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/build/deployment-id.js\");\nconst _encodeuripath = __webpack_require__(/*! ../shared/lib/encode-uri-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/encode-uri-path.js\");\n// 3.8s was arbitrarily chosen as it's what https://web.dev/interactive\n// considers as \"Good\" time-to-interactive. We must assume something went\n// wrong beyond this point, and then fall-back to a full page transition to\n// show the user something of value.\nconst MS_MAX_IDLE_DELAY = 3800;\nfunction withFuture(key, map, generator) {\n    let entry = map.get(key);\n    if (entry) {\n        if ('future' in entry) {\n            return entry.future;\n        }\n        return Promise.resolve(entry);\n    }\n    let resolver;\n    const prom = new Promise((resolve)=>{\n        resolver = resolve;\n    });\n    map.set(key, {\n        resolve: resolver,\n        future: prom\n    });\n    return generator ? generator().then((value)=>{\n        resolver(value);\n        return value;\n    }).catch((err)=>{\n        map.delete(key);\n        throw err;\n    }) : prom;\n}\nconst ASSET_LOAD_ERROR = Symbol('ASSET_LOAD_ERROR');\nfunction markAssetError(err) {\n    return Object.defineProperty(err, ASSET_LOAD_ERROR, {});\n}\nfunction isAssetError(err) {\n    return err && ASSET_LOAD_ERROR in err;\n}\nfunction hasPrefetch(link) {\n    try {\n        link = document.createElement('link');\n        return(// with relList.support\n        !!window.MSInputMethodContext && !!document.documentMode || link.relList.supports('prefetch'));\n    } catch (e) {\n        return false;\n    }\n}\nconst canPrefetch = hasPrefetch();\nconst getAssetQueryString = ()=>{\n    return (0, _deploymentid.getDeploymentIdQueryOrEmptyString)();\n};\nfunction prefetchViaDom(href, as, link) {\n    return new Promise((resolve, reject)=>{\n        const selector = '\\n      link[rel=\"prefetch\"][href^=\"' + href + '\"],\\n      link[rel=\"preload\"][href^=\"' + href + '\"],\\n      script[src^=\"' + href + '\"]';\n        if (document.querySelector(selector)) {\n            return resolve();\n        }\n        link = document.createElement('link');\n        // The order of property assignment here is intentional:\n        if (as) link.as = as;\n        link.rel = \"prefetch\";\n        link.crossOrigin = undefined;\n        link.onload = resolve;\n        link.onerror = ()=>reject(markAssetError(Object.defineProperty(new Error(\"Failed to prefetch: \" + href), \"__NEXT_ERROR_CODE\", {\n                value: \"E268\",\n                enumerable: false,\n                configurable: true\n            })));\n        // `href` should always be last:\n        link.href = href;\n        document.head.appendChild(link);\n    });\n}\nfunction appendScript(src, script) {\n    return new Promise((resolve, reject)=>{\n        script = document.createElement('script');\n        // The order of property assignment here is intentional.\n        // 1. Setup success/failure hooks in case the browser synchronously\n        //    executes when `src` is set.\n        script.onload = resolve;\n        script.onerror = ()=>reject(markAssetError(Object.defineProperty(new Error(\"Failed to load script: \" + src), \"__NEXT_ERROR_CODE\", {\n                value: \"E74\",\n                enumerable: false,\n                configurable: true\n            })));\n        // 2. Configure the cross-origin attribute before setting `src` in case the\n        //    browser begins to fetch.\n        script.crossOrigin = undefined;\n        // 3. Finally, set the source and inject into the DOM in case the child\n        //    must be appended for fetching to start.\n        script.src = src;\n        document.body.appendChild(script);\n    });\n}\n// We wait for pages to be built in dev before we start the route transition\n// timeout to prevent an un-necessary hard navigation in development.\nlet devBuildPromise;\n// Resolve a promise that times out after given amount of milliseconds.\nfunction resolvePromiseWithTimeout(p, ms, err) {\n    return new Promise((resolve, reject)=>{\n        let cancelled = false;\n        p.then((r)=>{\n            // Resolved, cancel the timeout\n            cancelled = true;\n            resolve(r);\n        }).catch(reject);\n        // We wrap these checks separately for better dead-code elimination in\n        // production bundles.\n        if (true) {\n            ;\n            (devBuildPromise || Promise.resolve()).then(()=>{\n                (0, _requestidlecallback.requestIdleCallback)(()=>setTimeout(()=>{\n                        if (!cancelled) {\n                            reject(err);\n                        }\n                    }, ms));\n            });\n        }\n        if (false) {}\n    });\n}\nfunction getClientBuildManifest() {\n    if (self.__BUILD_MANIFEST) {\n        return Promise.resolve(self.__BUILD_MANIFEST);\n    }\n    const onBuildManifest = new Promise((resolve)=>{\n        // Mandatory because this is not concurrent safe:\n        const cb = self.__BUILD_MANIFEST_CB;\n        self.__BUILD_MANIFEST_CB = ()=>{\n            resolve(self.__BUILD_MANIFEST);\n            cb && cb();\n        };\n    });\n    return resolvePromiseWithTimeout(onBuildManifest, MS_MAX_IDLE_DELAY, markAssetError(Object.defineProperty(new Error('Failed to load client build manifest'), \"__NEXT_ERROR_CODE\", {\n        value: \"E273\",\n        enumerable: false,\n        configurable: true\n    })));\n}\nfunction getFilesForRoute(assetPrefix, route) {\n    if (true) {\n        const scriptUrl = assetPrefix + '/_next/static/chunks/pages' + (0, _encodeuripath.encodeURIPath)((0, _getassetpathfromroute.default)(route, '.js')) + getAssetQueryString();\n        return Promise.resolve({\n            scripts: [\n                (0, _trustedtypes.__unsafeCreateTrustedScriptURL)(scriptUrl)\n            ],\n            // Styles are handled by `style-loader` in development:\n            css: []\n        });\n    }\n    return getClientBuildManifest().then((manifest)=>{\n        if (!(route in manifest)) {\n            throw markAssetError(Object.defineProperty(new Error(\"Failed to lookup route: \" + route), \"__NEXT_ERROR_CODE\", {\n                value: \"E446\",\n                enumerable: false,\n                configurable: true\n            }));\n        }\n        const allFiles = manifest[route].map((entry)=>assetPrefix + '/_next/' + (0, _encodeuripath.encodeURIPath)(entry));\n        return {\n            scripts: allFiles.filter((v)=>v.endsWith('.js')).map((v)=>(0, _trustedtypes.__unsafeCreateTrustedScriptURL)(v) + getAssetQueryString()),\n            css: allFiles.filter((v)=>v.endsWith('.css')).map((v)=>v + getAssetQueryString())\n        };\n    });\n}\nfunction createRouteLoader(assetPrefix) {\n    const entrypoints = new Map();\n    const loadedScripts = new Map();\n    const styleSheets = new Map();\n    const routes = new Map();\n    function maybeExecuteScript(src) {\n        // With HMR we might need to \"reload\" scripts when they are\n        // disposed and readded. Executing scripts twice has no functional\n        // differences\n        if (false) {} else {\n            return appendScript(src);\n        }\n    }\n    function fetchStyleSheet(href) {\n        let prom = styleSheets.get(href);\n        if (prom) {\n            return prom;\n        }\n        styleSheets.set(href, prom = fetch(href, {\n            credentials: 'same-origin'\n        }).then((res)=>{\n            if (!res.ok) {\n                throw Object.defineProperty(new Error(\"Failed to load stylesheet: \" + href), \"__NEXT_ERROR_CODE\", {\n                    value: \"E189\",\n                    enumerable: false,\n                    configurable: true\n                });\n            }\n            return res.text().then((text)=>({\n                    href: href,\n                    content: text\n                }));\n        }).catch((err)=>{\n            throw markAssetError(err);\n        }));\n        return prom;\n    }\n    return {\n        whenEntrypoint (route) {\n            return withFuture(route, entrypoints);\n        },\n        onEntrypoint (route, execute) {\n            ;\n            (execute ? Promise.resolve().then(()=>execute()).then((exports1)=>({\n                    component: exports1 && exports1.default || exports1,\n                    exports: exports1\n                }), (err)=>({\n                    error: err\n                })) : Promise.resolve(undefined)).then((input)=>{\n                const old = entrypoints.get(route);\n                if (old && 'resolve' in old) {\n                    if (input) {\n                        entrypoints.set(route, input);\n                        old.resolve(input);\n                    }\n                } else {\n                    if (input) {\n                        entrypoints.set(route, input);\n                    } else {\n                        entrypoints.delete(route);\n                    }\n                    // when this entrypoint has been resolved before\n                    // the route is outdated and we want to invalidate\n                    // this cache entry\n                    routes.delete(route);\n                }\n            });\n        },\n        loadRoute (route, prefetch) {\n            return withFuture(route, routes, ()=>{\n                let devBuildPromiseResolve;\n                if (true) {\n                    devBuildPromise = new Promise((resolve)=>{\n                        devBuildPromiseResolve = resolve;\n                    });\n                }\n                return resolvePromiseWithTimeout(getFilesForRoute(assetPrefix, route).then((param)=>{\n                    let { scripts, css } = param;\n                    return Promise.all([\n                        entrypoints.has(route) ? [] : Promise.all(scripts.map(maybeExecuteScript)),\n                        Promise.all(css.map(fetchStyleSheet))\n                    ]);\n                }).then((res)=>{\n                    return this.whenEntrypoint(route).then((entrypoint)=>({\n                            entrypoint,\n                            styles: res[1]\n                        }));\n                }), MS_MAX_IDLE_DELAY, markAssetError(Object.defineProperty(new Error(\"Route did not complete loading: \" + route), \"__NEXT_ERROR_CODE\", {\n                    value: \"E12\",\n                    enumerable: false,\n                    configurable: true\n                }))).then((param)=>{\n                    let { entrypoint, styles } = param;\n                    const res = Object.assign({\n                        styles: styles\n                    }, entrypoint);\n                    return 'error' in entrypoint ? entrypoint : res;\n                }).catch((err)=>{\n                    if (prefetch) {\n                        // we don't want to cache errors during prefetch\n                        throw err;\n                    }\n                    return {\n                        error: err\n                    };\n                }).finally(()=>devBuildPromiseResolve == null ? void 0 : devBuildPromiseResolve());\n            });\n        },\n        prefetch (route) {\n            // https://github.com/GoogleChromeLabs/quicklink/blob/453a661fa1fa940e2d2e044452398e38c67a98fb/src/index.mjs#L115-L118\n            // License: Apache 2.0\n            let cn;\n            if (cn = navigator.connection) {\n                // Don't prefetch if using 2G or if Save-Data is enabled.\n                if (cn.saveData || /2g/.test(cn.effectiveType)) return Promise.resolve();\n            }\n            return getFilesForRoute(assetPrefix, route).then((output)=>Promise.all(canPrefetch ? output.scripts.map((script)=>prefetchViaDom(script.toString(), 'script')) : [])).then(()=>{\n                (0, _requestidlecallback.requestIdleCallback)(()=>this.loadRoute(route, true).catch(()=>{}));\n            }).catch(()=>{});\n        }\n    };\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=route-loader.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvcm91dGUtbG9hZGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQWlTZ0JBLGlCQUFpQjtlQUFqQkE7O0lBM0RBQyxzQkFBc0I7ZUFBdEJBOztJQW5JQUMsWUFBWTtlQUFaQTs7SUFKQUMsY0FBYztlQUFkQTs7Ozs0RkE3RmtCOzBDQUNhO2lEQUNYOzBDQUNjOzJDQUNwQjtBQUU5Qix1RUFBdUU7QUFDdkUseUVBQXlFO0FBQ3pFLDJFQUEyRTtBQUMzRSxvQ0FBb0M7QUFDcEMsTUFBTUMsb0JBQW9CO0FBNEMxQixTQUFTQyxXQUNQQyxHQUFXLEVBQ1hDLEdBQStCLEVBQy9CQyxTQUE0QjtJQUU1QixJQUFJQyxRQUFRRixJQUFJRyxHQUFHLENBQUNKO0lBQ3BCLElBQUlHLE9BQU87UUFDVCxJQUFJLFlBQVlBLE9BQU87WUFDckIsT0FBT0EsTUFBTUUsTUFBTTtRQUNyQjtRQUNBLE9BQU9DLFFBQVFDLE9BQU8sQ0FBQ0o7SUFDekI7SUFDQSxJQUFJSztJQUNKLE1BQU1DLE9BQW1CLElBQUlILFFBQVcsQ0FBQ0M7UUFDdkNDLFdBQVdEO0lBQ2I7SUFDQU4sSUFBSVMsR0FBRyxDQUFDVixLQUFLO1FBQUVPLFNBQVNDO1FBQVdILFFBQVFJO0lBQUs7SUFDaEQsT0FBT1AsWUFDSEEsWUFDR1MsSUFBSSxDQUFDLENBQUNDO1FBQ0xKLFNBQVNJO1FBQ1QsT0FBT0E7SUFDVCxHQUNDQyxLQUFLLENBQUMsQ0FBQ0M7UUFDTmIsSUFBSWMsTUFBTSxDQUFDZjtRQUNYLE1BQU1jO0lBQ1IsS0FDRkw7QUFDTjtBQVNBLE1BQU1PLG1CQUFtQkMsT0FBTztBQUV6QixTQUFTcEIsZUFBZWlCLEdBQVU7SUFDdkMsT0FBT0ksT0FBT0MsY0FBYyxDQUFDTCxLQUFLRSxrQkFBa0IsQ0FBQztBQUN2RDtBQUVPLFNBQVNwQixhQUFha0IsR0FBVztJQUN0QyxPQUFPQSxPQUFPRSxvQkFBb0JGO0FBQ3BDO0FBRUEsU0FBU00sWUFBWUMsSUFBc0I7SUFDekMsSUFBSTtRQUNGQSxPQUFPQyxTQUFTQyxhQUFhLENBQUM7UUFDOUIsT0FHRSx1QkFEdUI7UUFDdEIsQ0FBQyxDQUFDQyxPQUFPQyxvQkFBb0IsSUFBSSxDQUFDLENBQUVILFNBQWlCSSxZQUFZLElBQ2xFTCxLQUFLTSxPQUFPLENBQUNDLFFBQVEsQ0FBQztJQUUxQixFQUFFLFVBQU07UUFDTixPQUFPO0lBQ1Q7QUFDRjtBQUVBLE1BQU1DLGNBQXVCVDtBQUU3QixNQUFNVSxzQkFBc0I7SUFDMUIsT0FBT0MsQ0FBQUEsR0FBQUEsY0FBQUEsaUNBQUFBO0FBQ1Q7QUFFQSxTQUFTQyxlQUNQQyxJQUFZLEVBQ1pDLEVBQVUsRUFDVmIsSUFBc0I7SUFFdEIsT0FBTyxJQUFJZixRQUFjLENBQUNDLFNBQVM0QjtRQUNqQyxNQUFNQyxXQUFZLHlDQUNjSCxPQUFLLDJDQUNOQSxPQUFLLDZCQUNuQkEsT0FBSztRQUN0QixJQUFJWCxTQUFTZSxhQUFhLENBQUNELFdBQVc7WUFDcEMsT0FBTzdCO1FBQ1Q7UUFFQWMsT0FBT0MsU0FBU0MsYUFBYSxDQUFDO1FBRTlCLHdEQUF3RDtRQUN4RCxJQUFJVyxJQUFJYixLQUFNYSxFQUFFLEdBQUdBO1FBQ25CYixLQUFNaUIsR0FBRyxHQUFJO1FBQ2JqQixLQUFNa0IsV0FBVyxHQUFHQyxTQUErQjtRQUNuRG5CLEtBQU1zQixNQUFNLEdBQUdwQztRQUNmYyxLQUFNdUIsT0FBTyxHQUFHLElBQ2RULE9BQU90QyxlQUFlLHFCQUF3QyxDQUF4QyxJQUFJZ0QsTUFBTyx5QkFBc0JaLE9BQWpDO3VCQUFBOzRCQUFBOzhCQUFBO1lBQXVDO1FBRS9ELGdDQUFnQztRQUNoQ1osS0FBTVksSUFBSSxHQUFHQTtRQUViWCxTQUFTd0IsSUFBSSxDQUFDQyxXQUFXLENBQUMxQjtJQUM1QjtBQUNGO0FBRUEsU0FBUzJCLGFBQ1BDLEdBQThCLEVBQzlCQyxNQUEwQjtJQUUxQixPQUFPLElBQUk1QyxRQUFRLENBQUNDLFNBQVM0QjtRQUMzQmUsU0FBUzVCLFNBQVNDLGFBQWEsQ0FBQztRQUVoQyx3REFBd0Q7UUFDeEQsbUVBQW1FO1FBQ25FLGlDQUFpQztRQUNqQzJCLE9BQU9QLE1BQU0sR0FBR3BDO1FBQ2hCMkMsT0FBT04sT0FBTyxHQUFHLElBQ2ZULE9BQU90QyxlQUFlLHFCQUEwQyxDQUExQyxJQUFJZ0QsTUFBTyw0QkFBeUJJLE1BQXBDO3VCQUFBOzRCQUFBOzhCQUFBO1lBQXlDO1FBRWpFLDJFQUEyRTtRQUMzRSw4QkFBOEI7UUFDOUJDLE9BQU9YLFdBQVcsR0FBR0MsU0FBK0I7UUFFcEQsdUVBQXVFO1FBQ3ZFLDZDQUE2QztRQUM3Q1UsT0FBT0QsR0FBRyxHQUFHQTtRQUNiM0IsU0FBUzZCLElBQUksQ0FBQ0osV0FBVyxDQUFDRztJQUM1QjtBQUNGO0FBRUEsNEVBQTRFO0FBQzVFLHFFQUFxRTtBQUNyRSxJQUFJRTtBQUVKLHVFQUF1RTtBQUN2RSxTQUFTQywwQkFDUEMsQ0FBYSxFQUNiQyxFQUFVLEVBQ1Z6QyxHQUFVO0lBRVYsT0FBTyxJQUFJUixRQUFRLENBQUNDLFNBQVM0QjtRQUMzQixJQUFJcUIsWUFBWTtRQUVoQkYsRUFBRTNDLElBQUksQ0FBQyxDQUFDOEM7WUFDTiwrQkFBK0I7WUFDL0JELFlBQVk7WUFDWmpELFFBQVFrRDtRQUNWLEdBQUc1QyxLQUFLLENBQUNzQjtRQUVULHNFQUFzRTtRQUN0RSxzQkFBc0I7UUFDdEIsSUFBSUssSUFBb0IsRUFBb0I7O2FBQ3hDWSxtQkFBbUI5QyxRQUFRQyxPQUFPLEdBQUMsQ0FBR0ksSUFBSSxDQUFDO2dCQUMzQ2dELENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0IsSUFDbEJDLFdBQVc7d0JBQ1QsSUFBSSxDQUFDSixXQUFXOzRCQUNkckIsT0FBT3JCO3dCQUNUO29CQUNGLEdBQUd5QztZQUVQO1FBQ0Y7UUFFQSxJQUFJZixLQUFvQixFQUFvQixFQVEzQztJQUNIO0FBQ0Y7QUFRTyxTQUFTN0M7SUFDZCxJQUFJa0UsS0FBS0MsZ0JBQWdCLEVBQUU7UUFDekIsT0FBT3hELFFBQVFDLE9BQU8sQ0FBQ3NELEtBQUtDLGdCQUFnQjtJQUM5QztJQUVBLE1BQU1DLGtCQUFrQixJQUFJekQsUUFBa0MsQ0FBQ0M7UUFDN0QsaURBQWlEO1FBQ2pELE1BQU15RCxLQUFLSCxLQUFLSSxtQkFBbUI7UUFDbkNKLEtBQUtJLG1CQUFtQixHQUFHO1lBQ3pCMUQsUUFBUXNELEtBQUtDLGdCQUFnQjtZQUM3QkUsTUFBTUE7UUFDUjtJQUNGO0lBRUEsT0FBT1gsMEJBQ0xVLGlCQUNBakUsbUJBQ0FELGVBQWUscUJBQWlELENBQWpELElBQUlnRCxNQUFNLHlDQUFWO2VBQUE7b0JBQUE7c0JBQUE7SUFBZ0Q7QUFFbkU7QUFNQSxTQUFTcUIsaUJBQ1BDLFdBQW1CLEVBQ25CQyxLQUFhO0lBRWIsSUFBSTVCLElBQW9CLEVBQW9CO1FBQzFDLE1BQU02QixZQUNKRixjQUNBLCtCQUNBRyxDQUFBQSxHQUFBQSxlQUFBQSxhQUFBQSxFQUFjQyxDQUFBQSxHQUFBQSx1QkFBQUEsT0FBQUEsRUFBc0JILE9BQU8sVUFDM0N0QztRQUNGLE9BQU94QixRQUFRQyxPQUFPLENBQUM7WUFDckJpRSxTQUFTO2dCQUFDQyxDQUFBQSxHQUFBQSxjQUFBQSw4QkFBOEIsRUFBQ0o7YUFBVztZQUNwRCx1REFBdUQ7WUFDdkRLLEtBQUssRUFBRTtRQUNUO0lBQ0Y7SUFDQSxPQUFPL0UseUJBQXlCZ0IsSUFBSSxDQUFDLENBQUNnRTtRQUNwQyxJQUFJLENBQUVQLENBQUFBLFNBQVNPLFFBQUFBLENBQU8sRUFBSTtZQUN4QixNQUFNOUUsZUFBZSxxQkFBNkMsQ0FBN0MsSUFBSWdELE1BQU8sNkJBQTBCdUIsUUFBckM7dUJBQUE7NEJBQUE7OEJBQUE7WUFBNEM7UUFDbkU7UUFDQSxNQUFNUSxXQUFXRCxRQUFRLENBQUNQLE1BQU0sQ0FBQ25FLEdBQUcsQ0FDbEMsQ0FBQ0UsUUFBVWdFLGNBQWMsWUFBWUcsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBY25FO1FBRXJELE9BQU87WUFDTHFFLFNBQVNJLFNBQ05DLE1BQU0sQ0FBQyxDQUFDQyxJQUFNQSxFQUFFQyxRQUFRLENBQUMsUUFDekI5RSxHQUFHLENBQUMsQ0FBQzZFLElBQU1MLENBQUFBLEdBQUFBLGNBQUFBLDhCQUE4QixFQUFDSyxLQUFLaEQ7WUFDbEQ0QyxLQUFLRSxTQUNGQyxNQUFNLENBQUMsQ0FBQ0MsSUFBTUEsRUFBRUMsUUFBUSxDQUFDLFNBQ3pCOUUsR0FBRyxDQUFDLENBQUM2RSxJQUFNQSxJQUFJaEQ7UUFDcEI7SUFDRjtBQUNGO0FBRU8sU0FBU3BDLGtCQUFrQnlFLFdBQW1CO0lBQ25ELE1BQU1hLGNBQ0osSUFBSUM7SUFDTixNQUFNQyxnQkFBK0MsSUFBSUQ7SUFDekQsTUFBTUUsY0FBcUQsSUFBSUY7SUFDL0QsTUFBTUcsU0FDSixJQUFJSDtJQUVOLFNBQVNJLG1CQUNQcEMsR0FBOEI7UUFFOUIsMkRBQTJEO1FBQzNELGtFQUFrRTtRQUNsRSxjQUFjO1FBQ2QsSUFBSVQsS0FBb0IsRUFBb0IsRUFhM0MsTUFBTTtZQUNMLE9BQU9RLGFBQWFDO1FBQ3RCO0lBQ0Y7SUFFQSxTQUFTc0MsZ0JBQWdCdEQsSUFBWTtRQUNuQyxJQUFJeEIsT0FBNkMwRSxZQUFZL0UsR0FBRyxDQUFDNkI7UUFDakUsSUFBSXhCLE1BQU07WUFDUixPQUFPQTtRQUNUO1FBRUEwRSxZQUFZekUsR0FBRyxDQUNidUIsTUFDQ3hCLE9BQU8rRSxNQUFNdkQsTUFBTTtZQUFFd0QsYUFBYTtRQUFjLEdBQzlDOUUsSUFBSSxDQUFDLENBQUMrRTtZQUNMLElBQUksQ0FBQ0EsSUFBSUMsRUFBRSxFQUFFO2dCQUNYLE1BQU0scUJBQStDLENBQS9DLElBQUk5QyxNQUFPLGdDQUE2QlosT0FBeEM7MkJBQUE7Z0NBQUE7a0NBQUE7Z0JBQThDO1lBQ3REO1lBQ0EsT0FBT3lELElBQUlFLElBQUksR0FBR2pGLElBQUksQ0FBQyxDQUFDaUYsT0FBVTtvQkFBRTNELE1BQU1BO29CQUFNNEQsU0FBU0Q7aUJBQUs7UUFDaEUsR0FDQy9FLEtBQUssQ0FBQyxDQUFDQztZQUNOLE1BQU1qQixlQUFlaUI7UUFDdkI7UUFFSixPQUFPTDtJQUNUO0lBRUEsT0FBTztRQUNMcUYsZ0JBQWUxQixLQUFhO1lBQzFCLE9BQU9yRSxXQUFXcUUsT0FBT1k7UUFDM0I7UUFDQWUsY0FBYTNCLEtBQWEsRUFBRTRCLE9BQW9DOzthQUM1REEsVUFDRTFGLFFBQVFDLE9BQU8sR0FDWkksSUFBSSxDQUFDLElBQU1xRixXQUNYckYsSUFBSSxDQUNILENBQUNzRixXQUFrQjtvQkFDakJDLFdBQVlELFlBQVdBLFNBQVFFLE9BQU8sSUFBS0Y7b0JBQzNDQSxTQUFTQTtpQkFDWCxHQUNBLENBQUNuRixNQUFTO29CQUFFc0YsT0FBT3RGO2lCQUFJLEtBRTNCUixRQUFRQyxPQUFPLENBQUM4RixVQUFBQSxDQUFTLENBQzNCMUYsSUFBSSxDQUFDLENBQUMyRjtnQkFDTixNQUFNQyxNQUFNdkIsWUFBWTVFLEdBQUcsQ0FBQ2dFO2dCQUM1QixJQUFJbUMsT0FBTyxhQUFhQSxLQUFLO29CQUMzQixJQUFJRCxPQUFPO3dCQUNUdEIsWUFBWXRFLEdBQUcsQ0FBQzBELE9BQU9rQzt3QkFDdkJDLElBQUloRyxPQUFPLENBQUMrRjtvQkFDZDtnQkFDRixPQUFPO29CQUNMLElBQUlBLE9BQU87d0JBQ1R0QixZQUFZdEUsR0FBRyxDQUFDMEQsT0FBT2tDO29CQUN6QixPQUFPO3dCQUNMdEIsWUFBWWpFLE1BQU0sQ0FBQ3FEO29CQUNyQjtvQkFDQSxnREFBZ0Q7b0JBQ2hELGtEQUFrRDtvQkFDbEQsbUJBQW1CO29CQUNuQmdCLE9BQU9yRSxNQUFNLENBQUNxRDtnQkFDaEI7WUFDRjtRQUNGO1FBQ0FvQyxXQUFVcEMsS0FBYSxFQUFFcUMsUUFBa0I7WUFDekMsT0FBTzFHLFdBQTZCcUUsT0FBT2dCLFFBQVE7Z0JBQ2pELElBQUlzQjtnQkFFSixJQUFJbEUsSUFBb0IsRUFBb0I7b0JBQzFDWSxrQkFBa0IsSUFBSTlDLFFBQWMsQ0FBQ0M7d0JBQ25DbUcseUJBQXlCbkc7b0JBQzNCO2dCQUNGO2dCQUVBLE9BQU84QywwQkFDTGEsaUJBQWlCQyxhQUFhQyxPQUMzQnpELElBQUksQ0FBQzt3QkFBQyxFQUFFNkQsT0FBTyxFQUFFRSxHQUFHLEVBQUU7b0JBQ3JCLE9BQU9wRSxRQUFRcUcsR0FBRyxDQUFDO3dCQUNqQjNCLFlBQVk0QixHQUFHLENBQUN4QyxTQUNaLEVBQUUsR0FDRjlELFFBQVFxRyxHQUFHLENBQUNuQyxRQUFRdkUsR0FBRyxDQUFDb0Y7d0JBQzVCL0UsUUFBUXFHLEdBQUcsQ0FBQ2pDLElBQUl6RSxHQUFHLENBQUNzRjtxQkFDckI7Z0JBQ0gsR0FDQzVFLElBQUksQ0FBQyxDQUFDK0U7b0JBQ0wsT0FBTyxJQUFJLENBQUNJLGNBQWMsQ0FBQzFCLE9BQU96RCxJQUFJLENBQUMsQ0FBQ2tHLGFBQWdCOzRCQUN0REE7NEJBQ0FDLFFBQVFwQixHQUFHLENBQUMsRUFBRTt5QkFDaEI7Z0JBQ0YsSUFDRjVGLG1CQUNBRCxlQUFlLHFCQUFxRCxDQUFyRCxJQUFJZ0QsTUFBTyxxQ0FBa0N1QixRQUE3QzsyQkFBQTtnQ0FBQTtrQ0FBQTtnQkFBb0QsS0FFbEV6RCxJQUFJLENBQUM7d0JBQUMsRUFBRWtHLFVBQVUsRUFBRUMsTUFBTSxFQUFFO29CQUMzQixNQUFNcEIsTUFBd0J4RSxPQUFPNkYsTUFBTSxDQUd6Qzt3QkFBRUQsUUFBUUE7b0JBQVEsR0FBR0Q7b0JBQ3ZCLE9BQU8sV0FBV0EsYUFBYUEsYUFBYW5CO2dCQUM5QyxHQUNDN0UsS0FBSyxDQUFDLENBQUNDO29CQUNOLElBQUkyRixVQUFVO3dCQUNaLGdEQUFnRDt3QkFDaEQsTUFBTTNGO29CQUNSO29CQUNBLE9BQU87d0JBQUVzRixPQUFPdEY7b0JBQUk7Z0JBQ3RCLEdBQ0NrRyxPQUFPLENBQUMsSUFBTU4sMEJBQUFBLE9BQUFBLEtBQUFBLElBQUFBO1lBQ25CO1FBQ0Y7UUFDQUQsVUFBU3JDLEtBQWE7WUFDcEIsc0hBQXNIO1lBQ3RILHNCQUFzQjtZQUN0QixJQUFJNkM7WUFDSixJQUFLQSxLQUFNQyxVQUFrQkMsVUFBVSxFQUFHO2dCQUN4Qyx5REFBeUQ7Z0JBQ3pELElBQUlGLEdBQUdHLFFBQVEsSUFBSSxLQUFLQyxJQUFJLENBQUNKLEdBQUdLLGFBQWEsR0FBRyxPQUFPaEgsUUFBUUMsT0FBTztZQUN4RTtZQUNBLE9BQU8yRCxpQkFBaUJDLGFBQWFDLE9BQ2xDekQsSUFBSSxDQUFDLENBQUM0RyxTQUNMakgsUUFBUXFHLEdBQUcsQ0FDVDlFLGNBQ0kwRixPQUFPL0MsT0FBTyxDQUFDdkUsR0FBRyxDQUFDLENBQUNpRCxTQUNsQmxCLGVBQWVrQixPQUFPb0MsUUFBUSxJQUFJLGFBRXBDLEVBQUUsR0FHVDNFLElBQUksQ0FBQztnQkFDSmdELENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0IsSUFBTSxJQUFJLENBQUM2QyxTQUFTLENBQUNwQyxPQUFPLE1BQU12RCxLQUFLLENBQUMsS0FBTztZQUNyRSxHQUNDQSxLQUFLLENBQ0osS0FDTztRQUViO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvc3JjL2NsaWVudC9yb3V0ZS1sb2FkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmVNYXRjaGVyIH0gZnJvbSAnLi4vYnVpbGQvYW5hbHlzaXMvZ2V0LXBhZ2Utc3RhdGljLWluZm8nXG5pbXBvcnQgZ2V0QXNzZXRQYXRoRnJvbVJvdXRlIGZyb20gJy4uL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2dldC1hc3NldC1wYXRoLWZyb20tcm91dGUnXG5pbXBvcnQgeyBfX3Vuc2FmZUNyZWF0ZVRydXN0ZWRTY3JpcHRVUkwgfSBmcm9tICcuL3RydXN0ZWQtdHlwZXMnXG5pbXBvcnQgeyByZXF1ZXN0SWRsZUNhbGxiYWNrIH0gZnJvbSAnLi9yZXF1ZXN0LWlkbGUtY2FsbGJhY2snXG5pbXBvcnQgeyBnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmcgfSBmcm9tICcuLi9idWlsZC9kZXBsb3ltZW50LWlkJ1xuaW1wb3J0IHsgZW5jb2RlVVJJUGF0aCB9IGZyb20gJy4uL3NoYXJlZC9saWIvZW5jb2RlLXVyaS1wYXRoJ1xuXG4vLyAzLjhzIHdhcyBhcmJpdHJhcmlseSBjaG9zZW4gYXMgaXQncyB3aGF0IGh0dHBzOi8vd2ViLmRldi9pbnRlcmFjdGl2ZVxuLy8gY29uc2lkZXJzIGFzIFwiR29vZFwiIHRpbWUtdG8taW50ZXJhY3RpdmUuIFdlIG11c3QgYXNzdW1lIHNvbWV0aGluZyB3ZW50XG4vLyB3cm9uZyBiZXlvbmQgdGhpcyBwb2ludCwgYW5kIHRoZW4gZmFsbC1iYWNrIHRvIGEgZnVsbCBwYWdlIHRyYW5zaXRpb24gdG9cbi8vIHNob3cgdGhlIHVzZXIgc29tZXRoaW5nIG9mIHZhbHVlLlxuY29uc3QgTVNfTUFYX0lETEVfREVMQVkgPSAzODAwXG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19CVUlMRF9NQU5JRkVTVD86IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPlxuICAgIF9fQlVJTERfTUFOSUZFU1RfQ0I/OiBGdW5jdGlvblxuICAgIF9fTUlERExFV0FSRV9NQVRDSEVSUz86IE1pZGRsZXdhcmVNYXRjaGVyW11cbiAgICBfX01JRERMRVdBUkVfTUFOSUZFU1RfQ0I/OiBGdW5jdGlvblxuICAgIF9fUkVBQ1RfTE9BREFCTEVfTUFOSUZFU1Q/OiBhbnlcbiAgICBfX0RZTkFNSUNfQ1NTX01BTklGRVNUPzogYW55XG4gICAgX19SU0NfTUFOSUZFU1Q/OiBhbnlcbiAgICBfX1JTQ19TRVJWRVJfTUFOSUZFU1Q/OiBhbnlcbiAgICBfX05FWFRfRk9OVF9NQU5JRkVTVD86IGFueVxuICAgIF9fU1VCUkVTT1VSQ0VfSU5URUdSSVRZX01BTklGRVNUPzogc3RyaW5nXG4gICAgX19JTlRFUkNFUFRJT05fUk9VVEVfUkVXUklURV9NQU5JRkVTVD86IHN0cmluZ1xuICB9XG59XG5cbmludGVyZmFjZSBMb2FkZWRFbnRyeXBvaW50U3VjY2VzcyB7XG4gIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZVxuICBleHBvcnRzOiBhbnlcbn1cbmludGVyZmFjZSBMb2FkZWRFbnRyeXBvaW50RmFpbHVyZSB7XG4gIGVycm9yOiB1bmtub3duXG59XG50eXBlIFJvdXRlRW50cnlwb2ludCA9IExvYWRlZEVudHJ5cG9pbnRTdWNjZXNzIHwgTG9hZGVkRW50cnlwb2ludEZhaWx1cmVcblxuaW50ZXJmYWNlIFJvdXRlU3R5bGVTaGVldCB7XG4gIGhyZWY6IHN0cmluZ1xuICBjb250ZW50OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIExvYWRlZFJvdXRlU3VjY2VzcyBleHRlbmRzIExvYWRlZEVudHJ5cG9pbnRTdWNjZXNzIHtcbiAgc3R5bGVzOiBSb3V0ZVN0eWxlU2hlZXRbXVxufVxuaW50ZXJmYWNlIExvYWRlZFJvdXRlRmFpbHVyZSB7XG4gIGVycm9yOiB1bmtub3duXG59XG50eXBlIFJvdXRlTG9hZGVyRW50cnkgPSBMb2FkZWRSb3V0ZVN1Y2Nlc3MgfCBMb2FkZWRSb3V0ZUZhaWx1cmVcblxuaW50ZXJmYWNlIEZ1dHVyZTxWPiB7XG4gIHJlc29sdmU6IChlbnRyeXBvaW50OiBWKSA9PiB2b2lkXG4gIGZ1dHVyZTogUHJvbWlzZTxWPlxufVxuZnVuY3Rpb24gd2l0aEZ1dHVyZTxUIGV4dGVuZHMgb2JqZWN0PihcbiAga2V5OiBzdHJpbmcsXG4gIG1hcDogTWFwPHN0cmluZywgRnV0dXJlPFQ+IHwgVD4sXG4gIGdlbmVyYXRvcj86ICgpID0+IFByb21pc2U8VD5cbik6IFByb21pc2U8VD4ge1xuICBsZXQgZW50cnkgPSBtYXAuZ2V0KGtleSlcbiAgaWYgKGVudHJ5KSB7XG4gICAgaWYgKCdmdXR1cmUnIGluIGVudHJ5KSB7XG4gICAgICByZXR1cm4gZW50cnkuZnV0dXJlXG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZW50cnkpXG4gIH1cbiAgbGV0IHJlc29sdmVyOiAoZW50cnlwb2ludDogVCkgPT4gdm9pZFxuICBjb25zdCBwcm9tOiBQcm9taXNlPFQ+ID0gbmV3IFByb21pc2U8VD4oKHJlc29sdmUpID0+IHtcbiAgICByZXNvbHZlciA9IHJlc29sdmVcbiAgfSlcbiAgbWFwLnNldChrZXksIHsgcmVzb2x2ZTogcmVzb2x2ZXIhLCBmdXR1cmU6IHByb20gfSlcbiAgcmV0dXJuIGdlbmVyYXRvclxuICAgID8gZ2VuZXJhdG9yKClcbiAgICAgICAgLnRoZW4oKHZhbHVlKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZXIodmFsdWUpXG4gICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgbWFwLmRlbGV0ZShrZXkpXG4gICAgICAgICAgdGhyb3cgZXJyXG4gICAgICAgIH0pXG4gICAgOiBwcm9tXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVMb2FkZXIge1xuICB3aGVuRW50cnlwb2ludChyb3V0ZTogc3RyaW5nKTogUHJvbWlzZTxSb3V0ZUVudHJ5cG9pbnQ+XG4gIG9uRW50cnlwb2ludChyb3V0ZTogc3RyaW5nLCBleGVjdXRlOiAoKSA9PiB1bmtub3duKTogdm9pZFxuICBsb2FkUm91dGUocm91dGU6IHN0cmluZywgcHJlZmV0Y2g/OiBib29sZWFuKTogUHJvbWlzZTxSb3V0ZUxvYWRlckVudHJ5PlxuICBwcmVmZXRjaChyb3V0ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPlxufVxuXG5jb25zdCBBU1NFVF9MT0FEX0VSUk9SID0gU3ltYm9sKCdBU1NFVF9MT0FEX0VSUk9SJylcbi8vIFRPRE86IHVuZXhwb3J0XG5leHBvcnQgZnVuY3Rpb24gbWFya0Fzc2V0RXJyb3IoZXJyOiBFcnJvcik6IEVycm9yIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnIsIEFTU0VUX0xPQURfRVJST1IsIHt9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBc3NldEVycm9yKGVycj86IEVycm9yKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBlcnIgJiYgQVNTRVRfTE9BRF9FUlJPUiBpbiBlcnJcbn1cblxuZnVuY3Rpb24gaGFzUHJlZmV0Y2gobGluaz86IEhUTUxMaW5rRWxlbWVudCk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJylcbiAgICByZXR1cm4gKFxuICAgICAgLy8gZGV0ZWN0IElFMTEgc2luY2UgaXQgc3VwcG9ydHMgcHJlZmV0Y2ggYnV0IGlzbid0IGRldGVjdGVkXG4gICAgICAvLyB3aXRoIHJlbExpc3Quc3VwcG9ydFxuICAgICAgKCEhd2luZG93Lk1TSW5wdXRNZXRob2RDb250ZXh0ICYmICEhKGRvY3VtZW50IGFzIGFueSkuZG9jdW1lbnRNb2RlKSB8fFxuICAgICAgbGluay5yZWxMaXN0LnN1cHBvcnRzKCdwcmVmZXRjaCcpXG4gICAgKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5jb25zdCBjYW5QcmVmZXRjaDogYm9vbGVhbiA9IGhhc1ByZWZldGNoKClcblxuY29uc3QgZ2V0QXNzZXRRdWVyeVN0cmluZyA9ICgpID0+IHtcbiAgcmV0dXJuIGdldERlcGxveW1lbnRJZFF1ZXJ5T3JFbXB0eVN0cmluZygpXG59XG5cbmZ1bmN0aW9uIHByZWZldGNoVmlhRG9tKFxuICBocmVmOiBzdHJpbmcsXG4gIGFzOiBzdHJpbmcsXG4gIGxpbms/OiBIVE1MTGlua0VsZW1lbnRcbik6IFByb21pc2U8YW55PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBgXG4gICAgICBsaW5rW3JlbD1cInByZWZldGNoXCJdW2hyZWZePVwiJHtocmVmfVwiXSxcbiAgICAgIGxpbmtbcmVsPVwicHJlbG9hZFwiXVtocmVmXj1cIiR7aHJlZn1cIl0sXG4gICAgICBzY3JpcHRbc3JjXj1cIiR7aHJlZn1cIl1gXG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKVxuXG4gICAgLy8gVGhlIG9yZGVyIG9mIHByb3BlcnR5IGFzc2lnbm1lbnQgaGVyZSBpcyBpbnRlbnRpb25hbDpcbiAgICBpZiAoYXMpIGxpbmshLmFzID0gYXNcbiAgICBsaW5rIS5yZWwgPSBgcHJlZmV0Y2hgXG4gICAgbGluayEuY3Jvc3NPcmlnaW4gPSBwcm9jZXNzLmVudi5fX05FWFRfQ1JPU1NfT1JJR0lOIVxuICAgIGxpbmshLm9ubG9hZCA9IHJlc29sdmUgYXMgYW55XG4gICAgbGluayEub25lcnJvciA9ICgpID0+XG4gICAgICByZWplY3QobWFya0Fzc2V0RXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gcHJlZmV0Y2g6ICR7aHJlZn1gKSkpXG5cbiAgICAvLyBgaHJlZmAgc2hvdWxkIGFsd2F5cyBiZSBsYXN0OlxuICAgIGxpbmshLmhyZWYgPSBocmVmXG5cbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGFwcGVuZFNjcmlwdChcbiAgc3JjOiBUcnVzdGVkU2NyaXB0VVJMIHwgc3RyaW5nLFxuICBzY3JpcHQ/OiBIVE1MU2NyaXB0RWxlbWVudFxuKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JylcblxuICAgIC8vIFRoZSBvcmRlciBvZiBwcm9wZXJ0eSBhc3NpZ25tZW50IGhlcmUgaXMgaW50ZW50aW9uYWwuXG4gICAgLy8gMS4gU2V0dXAgc3VjY2Vzcy9mYWlsdXJlIGhvb2tzIGluIGNhc2UgdGhlIGJyb3dzZXIgc3luY2hyb25vdXNseVxuICAgIC8vICAgIGV4ZWN1dGVzIHdoZW4gYHNyY2AgaXMgc2V0LlxuICAgIHNjcmlwdC5vbmxvYWQgPSByZXNvbHZlXG4gICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PlxuICAgICAgcmVqZWN0KG1hcmtBc3NldEVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgc2NyaXB0OiAke3NyY31gKSkpXG5cbiAgICAvLyAyLiBDb25maWd1cmUgdGhlIGNyb3NzLW9yaWdpbiBhdHRyaWJ1dGUgYmVmb3JlIHNldHRpbmcgYHNyY2AgaW4gY2FzZSB0aGVcbiAgICAvLyAgICBicm93c2VyIGJlZ2lucyB0byBmZXRjaC5cbiAgICBzY3JpcHQuY3Jvc3NPcmlnaW4gPSBwcm9jZXNzLmVudi5fX05FWFRfQ1JPU1NfT1JJR0lOIVxuXG4gICAgLy8gMy4gRmluYWxseSwgc2V0IHRoZSBzb3VyY2UgYW5kIGluamVjdCBpbnRvIHRoZSBET00gaW4gY2FzZSB0aGUgY2hpbGRcbiAgICAvLyAgICBtdXN0IGJlIGFwcGVuZGVkIGZvciBmZXRjaGluZyB0byBzdGFydC5cbiAgICBzY3JpcHQuc3JjID0gc3JjIGFzIHN0cmluZ1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KVxuICB9KVxufVxuXG4vLyBXZSB3YWl0IGZvciBwYWdlcyB0byBiZSBidWlsdCBpbiBkZXYgYmVmb3JlIHdlIHN0YXJ0IHRoZSByb3V0ZSB0cmFuc2l0aW9uXG4vLyB0aW1lb3V0IHRvIHByZXZlbnQgYW4gdW4tbmVjZXNzYXJ5IGhhcmQgbmF2aWdhdGlvbiBpbiBkZXZlbG9wbWVudC5cbmxldCBkZXZCdWlsZFByb21pc2U6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWRcblxuLy8gUmVzb2x2ZSBhIHByb21pc2UgdGhhdCB0aW1lcyBvdXQgYWZ0ZXIgZ2l2ZW4gYW1vdW50IG9mIG1pbGxpc2Vjb25kcy5cbmZ1bmN0aW9uIHJlc29sdmVQcm9taXNlV2l0aFRpbWVvdXQ8VD4oXG4gIHA6IFByb21pc2U8VD4sXG4gIG1zOiBudW1iZXIsXG4gIGVycjogRXJyb3Jcbik6IFByb21pc2U8VD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBjYW5jZWxsZWQgPSBmYWxzZVxuXG4gICAgcC50aGVuKChyKSA9PiB7XG4gICAgICAvLyBSZXNvbHZlZCwgY2FuY2VsIHRoZSB0aW1lb3V0XG4gICAgICBjYW5jZWxsZWQgPSB0cnVlXG4gICAgICByZXNvbHZlKHIpXG4gICAgfSkuY2F0Y2gocmVqZWN0KVxuXG4gICAgLy8gV2Ugd3JhcCB0aGVzZSBjaGVja3Mgc2VwYXJhdGVseSBmb3IgYmV0dGVyIGRlYWQtY29kZSBlbGltaW5hdGlvbiBpblxuICAgIC8vIHByb2R1Y3Rpb24gYnVuZGxlcy5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgIDsoZGV2QnVpbGRQcm9taXNlIHx8IFByb21pc2UucmVzb2x2ZSgpKS50aGVuKCgpID0+IHtcbiAgICAgICAgcmVxdWVzdElkbGVDYWxsYmFjaygoKSA9PlxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBtcylcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgIHJlcXVlc3RJZGxlQ2FsbGJhY2soKCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKCFjYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgICAgfVxuICAgICAgICB9LCBtcylcbiAgICAgIClcbiAgICB9XG4gIH0pXG59XG5cbi8vIFRPRE86IHN0b3AgZXhwb3J0aW5nIG9yIGNhY2hlIHRoZSBmYWlsdXJlXG4vLyBJdCdkIGJlIGJlc3QgdG8gc3RvcCBleHBvcnRpbmcgdGhpcy4gSXQncyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIFdlJ3JlXG4vLyBvbmx5IGV4cG9ydGluZyBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgYHBhZ2UtbG9hZGVyYC5cbi8vIE9ubHkgY2FjaGUgdGhpcyByZXNwb25zZSBhcyBhIGxhc3QgcmVzb3J0IGlmIHdlIGNhbm5vdCBlbGltaW5hdGUgYWxsIG90aGVyXG4vLyBjb2RlIGJyYW5jaGVzIHRoYXQgdXNlIHRoZSBCdWlsZCBNYW5pZmVzdCBDYWxsYmFjayBhbmQgcHVzaCB0aGVtIHRocm91Z2hcbi8vIHRoZSBSb3V0ZSBMb2FkZXIgaW50ZXJmYWNlLlxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudEJ1aWxkTWFuaWZlc3QoKSB7XG4gIGlmIChzZWxmLl9fQlVJTERfTUFOSUZFU1QpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHNlbGYuX19CVUlMRF9NQU5JRkVTVClcbiAgfVxuXG4gIGNvbnN0IG9uQnVpbGRNYW5pZmVzdCA9IG5ldyBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPj4oKHJlc29sdmUpID0+IHtcbiAgICAvLyBNYW5kYXRvcnkgYmVjYXVzZSB0aGlzIGlzIG5vdCBjb25jdXJyZW50IHNhZmU6XG4gICAgY29uc3QgY2IgPSBzZWxmLl9fQlVJTERfTUFOSUZFU1RfQ0JcbiAgICBzZWxmLl9fQlVJTERfTUFOSUZFU1RfQ0IgPSAoKSA9PiB7XG4gICAgICByZXNvbHZlKHNlbGYuX19CVUlMRF9NQU5JRkVTVCEpXG4gICAgICBjYiAmJiBjYigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiByZXNvbHZlUHJvbWlzZVdpdGhUaW1lb3V0KFxuICAgIG9uQnVpbGRNYW5pZmVzdCxcbiAgICBNU19NQVhfSURMRV9ERUxBWSxcbiAgICBtYXJrQXNzZXRFcnJvcihuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGNsaWVudCBidWlsZCBtYW5pZmVzdCcpKVxuICApXG59XG5cbmludGVyZmFjZSBSb3V0ZUZpbGVzIHtcbiAgc2NyaXB0czogKFRydXN0ZWRTY3JpcHRVUkwgfCBzdHJpbmcpW11cbiAgY3NzOiBzdHJpbmdbXVxufVxuZnVuY3Rpb24gZ2V0RmlsZXNGb3JSb3V0ZShcbiAgYXNzZXRQcmVmaXg6IHN0cmluZyxcbiAgcm91dGU6IHN0cmluZ1xuKTogUHJvbWlzZTxSb3V0ZUZpbGVzPiB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgIGNvbnN0IHNjcmlwdFVybCA9XG4gICAgICBhc3NldFByZWZpeCArXG4gICAgICAnL19uZXh0L3N0YXRpYy9jaHVua3MvcGFnZXMnICtcbiAgICAgIGVuY29kZVVSSVBhdGgoZ2V0QXNzZXRQYXRoRnJvbVJvdXRlKHJvdXRlLCAnLmpzJykpICtcbiAgICAgIGdldEFzc2V0UXVlcnlTdHJpbmcoKVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgc2NyaXB0czogW19fdW5zYWZlQ3JlYXRlVHJ1c3RlZFNjcmlwdFVSTChzY3JpcHRVcmwpXSxcbiAgICAgIC8vIFN0eWxlcyBhcmUgaGFuZGxlZCBieSBgc3R5bGUtbG9hZGVyYCBpbiBkZXZlbG9wbWVudDpcbiAgICAgIGNzczogW10sXG4gICAgfSlcbiAgfVxuICByZXR1cm4gZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCgpLnRoZW4oKG1hbmlmZXN0KSA9PiB7XG4gICAgaWYgKCEocm91dGUgaW4gbWFuaWZlc3QpKSB7XG4gICAgICB0aHJvdyBtYXJrQXNzZXRFcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBsb29rdXAgcm91dGU6ICR7cm91dGV9YCkpXG4gICAgfVxuICAgIGNvbnN0IGFsbEZpbGVzID0gbWFuaWZlc3Rbcm91dGVdLm1hcChcbiAgICAgIChlbnRyeSkgPT4gYXNzZXRQcmVmaXggKyAnL19uZXh0LycgKyBlbmNvZGVVUklQYXRoKGVudHJ5KVxuICAgIClcbiAgICByZXR1cm4ge1xuICAgICAgc2NyaXB0czogYWxsRmlsZXNcbiAgICAgICAgLmZpbHRlcigodikgPT4gdi5lbmRzV2l0aCgnLmpzJykpXG4gICAgICAgIC5tYXAoKHYpID0+IF9fdW5zYWZlQ3JlYXRlVHJ1c3RlZFNjcmlwdFVSTCh2KSArIGdldEFzc2V0UXVlcnlTdHJpbmcoKSksXG4gICAgICBjc3M6IGFsbEZpbGVzXG4gICAgICAgIC5maWx0ZXIoKHYpID0+IHYuZW5kc1dpdGgoJy5jc3MnKSlcbiAgICAgICAgLm1hcCgodikgPT4gdiArIGdldEFzc2V0UXVlcnlTdHJpbmcoKSksXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUm91dGVMb2FkZXIoYXNzZXRQcmVmaXg6IHN0cmluZyk6IFJvdXRlTG9hZGVyIHtcbiAgY29uc3QgZW50cnlwb2ludHM6IE1hcDxzdHJpbmcsIEZ1dHVyZTxSb3V0ZUVudHJ5cG9pbnQ+IHwgUm91dGVFbnRyeXBvaW50PiA9XG4gICAgbmV3IE1hcCgpXG4gIGNvbnN0IGxvYWRlZFNjcmlwdHM6IE1hcDxzdHJpbmcsIFByb21pc2U8dW5rbm93bj4+ID0gbmV3IE1hcCgpXG4gIGNvbnN0IHN0eWxlU2hlZXRzOiBNYXA8c3RyaW5nLCBQcm9taXNlPFJvdXRlU3R5bGVTaGVldD4+ID0gbmV3IE1hcCgpXG4gIGNvbnN0IHJvdXRlczogTWFwPHN0cmluZywgRnV0dXJlPFJvdXRlTG9hZGVyRW50cnk+IHwgUm91dGVMb2FkZXJFbnRyeT4gPVxuICAgIG5ldyBNYXAoKVxuXG4gIGZ1bmN0aW9uIG1heWJlRXhlY3V0ZVNjcmlwdChcbiAgICBzcmM6IFRydXN0ZWRTY3JpcHRVUkwgfCBzdHJpbmdcbiAgKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgLy8gV2l0aCBITVIgd2UgbWlnaHQgbmVlZCB0byBcInJlbG9hZFwiIHNjcmlwdHMgd2hlbiB0aGV5IGFyZVxuICAgIC8vIGRpc3Bvc2VkIGFuZCByZWFkZGVkLiBFeGVjdXRpbmcgc2NyaXB0cyB0d2ljZSBoYXMgbm8gZnVuY3Rpb25hbFxuICAgIC8vIGRpZmZlcmVuY2VzXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICBsZXQgcHJvbTogUHJvbWlzZTx1bmtub3duPiB8IHVuZGVmaW5lZCA9IGxvYWRlZFNjcmlwdHMuZ2V0KHNyYy50b1N0cmluZygpKVxuICAgICAgaWYgKHByb20pIHtcbiAgICAgICAgcmV0dXJuIHByb21cbiAgICAgIH1cblxuICAgICAgLy8gU2tpcCBleGVjdXRpbmcgc2NyaXB0IGlmIGl0J3MgYWxyZWFkeSBpbiB0aGUgRE9NOlxuICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHNjcmlwdFtzcmNePVwiJHtzcmN9XCJdYCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICB9XG5cbiAgICAgIGxvYWRlZFNjcmlwdHMuc2V0KHNyYy50b1N0cmluZygpLCAocHJvbSA9IGFwcGVuZFNjcmlwdChzcmMpKSlcbiAgICAgIHJldHVybiBwcm9tXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhcHBlbmRTY3JpcHQoc3JjKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZldGNoU3R5bGVTaGVldChocmVmOiBzdHJpbmcpOiBQcm9taXNlPFJvdXRlU3R5bGVTaGVldD4ge1xuICAgIGxldCBwcm9tOiBQcm9taXNlPFJvdXRlU3R5bGVTaGVldD4gfCB1bmRlZmluZWQgPSBzdHlsZVNoZWV0cy5nZXQoaHJlZilcbiAgICBpZiAocHJvbSkge1xuICAgICAgcmV0dXJuIHByb21cbiAgICB9XG5cbiAgICBzdHlsZVNoZWV0cy5zZXQoXG4gICAgICBocmVmLFxuICAgICAgKHByb20gPSBmZXRjaChocmVmLCB7IGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nIH0pXG4gICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBzdHlsZXNoZWV0OiAke2hyZWZ9YClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlcy50ZXh0KCkudGhlbigodGV4dCkgPT4gKHsgaHJlZjogaHJlZiwgY29udGVudDogdGV4dCB9KSlcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICB0aHJvdyBtYXJrQXNzZXRFcnJvcihlcnIpXG4gICAgICAgIH0pKVxuICAgIClcbiAgICByZXR1cm4gcHJvbVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aGVuRW50cnlwb2ludChyb3V0ZTogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gd2l0aEZ1dHVyZShyb3V0ZSwgZW50cnlwb2ludHMpXG4gICAgfSxcbiAgICBvbkVudHJ5cG9pbnQocm91dGU6IHN0cmluZywgZXhlY3V0ZTogdW5kZWZpbmVkIHwgKCgpID0+IHVua25vd24pKSB7XG4gICAgICA7KGV4ZWN1dGVcbiAgICAgICAgPyBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gZXhlY3V0ZSgpKVxuICAgICAgICAgICAgLnRoZW4oXG4gICAgICAgICAgICAgIChleHBvcnRzOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiAoZXhwb3J0cyAmJiBleHBvcnRzLmRlZmF1bHQpIHx8IGV4cG9ydHMsXG4gICAgICAgICAgICAgICAgZXhwb3J0czogZXhwb3J0cyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIChlcnIpID0+ICh7IGVycm9yOiBlcnIgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgOiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgKS50aGVuKChpbnB1dDogUm91dGVFbnRyeXBvaW50IHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgIGNvbnN0IG9sZCA9IGVudHJ5cG9pbnRzLmdldChyb3V0ZSlcbiAgICAgICAgaWYgKG9sZCAmJiAncmVzb2x2ZScgaW4gb2xkKSB7XG4gICAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICBlbnRyeXBvaW50cy5zZXQocm91dGUsIGlucHV0KVxuICAgICAgICAgICAgb2xkLnJlc29sdmUoaW5wdXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgZW50cnlwb2ludHMuc2V0KHJvdXRlLCBpbnB1dClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW50cnlwb2ludHMuZGVsZXRlKHJvdXRlKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3aGVuIHRoaXMgZW50cnlwb2ludCBoYXMgYmVlbiByZXNvbHZlZCBiZWZvcmVcbiAgICAgICAgICAvLyB0aGUgcm91dGUgaXMgb3V0ZGF0ZWQgYW5kIHdlIHdhbnQgdG8gaW52YWxpZGF0ZVxuICAgICAgICAgIC8vIHRoaXMgY2FjaGUgZW50cnlcbiAgICAgICAgICByb3V0ZXMuZGVsZXRlKHJvdXRlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG4gICAgbG9hZFJvdXRlKHJvdXRlOiBzdHJpbmcsIHByZWZldGNoPzogYm9vbGVhbikge1xuICAgICAgcmV0dXJuIHdpdGhGdXR1cmU8Um91dGVMb2FkZXJFbnRyeT4ocm91dGUsIHJvdXRlcywgKCkgPT4ge1xuICAgICAgICBsZXQgZGV2QnVpbGRQcm9taXNlUmVzb2x2ZTogKCkgPT4gdm9pZFxuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgICAgIGRldkJ1aWxkUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBkZXZCdWlsZFByb21pc2VSZXNvbHZlID0gcmVzb2x2ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzb2x2ZVByb21pc2VXaXRoVGltZW91dChcbiAgICAgICAgICBnZXRGaWxlc0ZvclJvdXRlKGFzc2V0UHJlZml4LCByb3V0ZSlcbiAgICAgICAgICAgIC50aGVuKCh7IHNjcmlwdHMsIGNzcyB9KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgZW50cnlwb2ludHMuaGFzKHJvdXRlKVxuICAgICAgICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgICAgICAgOiBQcm9taXNlLmFsbChzY3JpcHRzLm1hcChtYXliZUV4ZWN1dGVTY3JpcHQpKSxcbiAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChjc3MubWFwKGZldGNoU3R5bGVTaGVldCkpLFxuICAgICAgICAgICAgICBdIGFzIGNvbnN0KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud2hlbkVudHJ5cG9pbnQocm91dGUpLnRoZW4oKGVudHJ5cG9pbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgZW50cnlwb2ludCxcbiAgICAgICAgICAgICAgICBzdHlsZXM6IHJlc1sxXSxcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBNU19NQVhfSURMRV9ERUxBWSxcbiAgICAgICAgICBtYXJrQXNzZXRFcnJvcihuZXcgRXJyb3IoYFJvdXRlIGRpZCBub3QgY29tcGxldGUgbG9hZGluZzogJHtyb3V0ZX1gKSlcbiAgICAgICAgKVxuICAgICAgICAgIC50aGVuKCh7IGVudHJ5cG9pbnQsIHN0eWxlcyB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXM6IFJvdXRlTG9hZGVyRW50cnkgPSBPYmplY3QuYXNzaWduPFxuICAgICAgICAgICAgICB7IHN0eWxlczogUm91dGVTdHlsZVNoZWV0W10gfSxcbiAgICAgICAgICAgICAgUm91dGVFbnRyeXBvaW50XG4gICAgICAgICAgICA+KHsgc3R5bGVzOiBzdHlsZXMhIH0sIGVudHJ5cG9pbnQpXG4gICAgICAgICAgICByZXR1cm4gJ2Vycm9yJyBpbiBlbnRyeXBvaW50ID8gZW50cnlwb2ludCA6IHJlc1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChwcmVmZXRjaCkge1xuICAgICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGNhY2hlIGVycm9ycyBkdXJpbmcgcHJlZmV0Y2hcbiAgICAgICAgICAgICAgdGhyb3cgZXJyXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBlcnJvcjogZXJyIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maW5hbGx5KCgpID0+IGRldkJ1aWxkUHJvbWlzZVJlc29sdmU/LigpKVxuICAgICAgfSlcbiAgICB9LFxuICAgIHByZWZldGNoKHJvdXRlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWVMYWJzL3F1aWNrbGluay9ibG9iLzQ1M2E2NjFmYTFmYTk0MGUyZDJlMDQ0NDUyMzk4ZTM4YzY3YTk4ZmIvc3JjL2luZGV4Lm1qcyNMMTE1LUwxMThcbiAgICAgIC8vIExpY2Vuc2U6IEFwYWNoZSAyLjBcbiAgICAgIGxldCBjblxuICAgICAgaWYgKChjbiA9IChuYXZpZ2F0b3IgYXMgYW55KS5jb25uZWN0aW9uKSkge1xuICAgICAgICAvLyBEb24ndCBwcmVmZXRjaCBpZiB1c2luZyAyRyBvciBpZiBTYXZlLURhdGEgaXMgZW5hYmxlZC5cbiAgICAgICAgaWYgKGNuLnNhdmVEYXRhIHx8IC8yZy8udGVzdChjbi5lZmZlY3RpdmVUeXBlKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0RmlsZXNGb3JSb3V0ZShhc3NldFByZWZpeCwgcm91dGUpXG4gICAgICAgIC50aGVuKChvdXRwdXQpID0+XG4gICAgICAgICAgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBjYW5QcmVmZXRjaFxuICAgICAgICAgICAgICA/IG91dHB1dC5zY3JpcHRzLm1hcCgoc2NyaXB0KSA9PlxuICAgICAgICAgICAgICAgICAgcHJlZmV0Y2hWaWFEb20oc2NyaXB0LnRvU3RyaW5nKCksICdzY3JpcHQnKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmVxdWVzdElkbGVDYWxsYmFjaygoKSA9PiB0aGlzLmxvYWRSb3V0ZShyb3V0ZSwgdHJ1ZSkuY2F0Y2goKCkgPT4ge30pKVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goXG4gICAgICAgICAgLy8gc3dhbGxvdyBwcmVmZXRjaCBlcnJvcnNcbiAgICAgICAgICAoKSA9PiB7fVxuICAgICAgICApXG4gICAgfSxcbiAgfVxufVxuIl0sIm5hbWVzIjpbImNyZWF0ZVJvdXRlTG9hZGVyIiwiZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCIsImlzQXNzZXRFcnJvciIsIm1hcmtBc3NldEVycm9yIiwiTVNfTUFYX0lETEVfREVMQVkiLCJ3aXRoRnV0dXJlIiwia2V5IiwibWFwIiwiZ2VuZXJhdG9yIiwiZW50cnkiLCJnZXQiLCJmdXR1cmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlc29sdmVyIiwicHJvbSIsInNldCIsInRoZW4iLCJ2YWx1ZSIsImNhdGNoIiwiZXJyIiwiZGVsZXRlIiwiQVNTRVRfTE9BRF9FUlJPUiIsIlN5bWJvbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiaGFzUHJlZmV0Y2giLCJsaW5rIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwid2luZG93IiwiTVNJbnB1dE1ldGhvZENvbnRleHQiLCJkb2N1bWVudE1vZGUiLCJyZWxMaXN0Iiwic3VwcG9ydHMiLCJjYW5QcmVmZXRjaCIsImdldEFzc2V0UXVlcnlTdHJpbmciLCJnZXREZXBsb3ltZW50SWRRdWVyeU9yRW1wdHlTdHJpbmciLCJwcmVmZXRjaFZpYURvbSIsImhyZWYiLCJhcyIsInJlamVjdCIsInNlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsInJlbCIsImNyb3NzT3JpZ2luIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9DUk9TU19PUklHSU4iLCJvbmxvYWQiLCJvbmVycm9yIiwiRXJyb3IiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJhcHBlbmRTY3JpcHQiLCJzcmMiLCJzY3JpcHQiLCJib2R5IiwiZGV2QnVpbGRQcm9taXNlIiwicmVzb2x2ZVByb21pc2VXaXRoVGltZW91dCIsInAiLCJtcyIsImNhbmNlbGxlZCIsInIiLCJOT0RFX0VOViIsInJlcXVlc3RJZGxlQ2FsbGJhY2siLCJzZXRUaW1lb3V0Iiwic2VsZiIsIl9fQlVJTERfTUFOSUZFU1QiLCJvbkJ1aWxkTWFuaWZlc3QiLCJjYiIsIl9fQlVJTERfTUFOSUZFU1RfQ0IiLCJnZXRGaWxlc0ZvclJvdXRlIiwiYXNzZXRQcmVmaXgiLCJyb3V0ZSIsInNjcmlwdFVybCIsImVuY29kZVVSSVBhdGgiLCJnZXRBc3NldFBhdGhGcm9tUm91dGUiLCJzY3JpcHRzIiwiX191bnNhZmVDcmVhdGVUcnVzdGVkU2NyaXB0VVJMIiwiY3NzIiwibWFuaWZlc3QiLCJhbGxGaWxlcyIsImZpbHRlciIsInYiLCJlbmRzV2l0aCIsImVudHJ5cG9pbnRzIiwiTWFwIiwibG9hZGVkU2NyaXB0cyIsInN0eWxlU2hlZXRzIiwicm91dGVzIiwibWF5YmVFeGVjdXRlU2NyaXB0IiwidG9TdHJpbmciLCJmZXRjaFN0eWxlU2hlZXQiLCJmZXRjaCIsImNyZWRlbnRpYWxzIiwicmVzIiwib2siLCJ0ZXh0IiwiY29udGVudCIsIndoZW5FbnRyeXBvaW50Iiwib25FbnRyeXBvaW50IiwiZXhlY3V0ZSIsImV4cG9ydHMiLCJjb21wb25lbnQiLCJkZWZhdWx0IiwiZXJyb3IiLCJ1bmRlZmluZWQiLCJpbnB1dCIsIm9sZCIsImxvYWRSb3V0ZSIsInByZWZldGNoIiwiZGV2QnVpbGRQcm9taXNlUmVzb2x2ZSIsImFsbCIsImhhcyIsImVudHJ5cG9pbnQiLCJzdHlsZXMiLCJhc3NpZ24iLCJmaW5hbGx5IiwiY24iLCJuYXZpZ2F0b3IiLCJjb25uZWN0aW9uIiwic2F2ZURhdGEiLCJ0ZXN0IiwiZWZmZWN0aXZlVHlwZSIsIm91dHB1dCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/route-loader.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/router.js":
/*!*********************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/router.js ***!
  \*********************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/* global window */ \nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    Router: function() {\n        return _router.default;\n    },\n    createRouter: function() {\n        return createRouter;\n    },\n    // Export the singletonRouter and this is the public API.\n    default: function() {\n        return _default;\n    },\n    makePublicRouterInstance: function() {\n        return makePublicRouterInstance;\n    },\n    useRouter: function() {\n        return useRouter;\n    },\n    withRouter: function() {\n        return _withrouter.default;\n    }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"));\nconst _router = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/router/router */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/router.js\"));\nconst _routercontextsharedruntime = __webpack_require__(/*! ../shared/lib/router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router-context.shared-runtime.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../lib/is-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/is-error.js\"));\nconst _withrouter = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./with-router */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/with-router.js\"));\nconst singletonRouter = {\n    router: null,\n    readyCallbacks: [],\n    ready (callback) {\n        if (this.router) return callback();\n        if (true) {\n            this.readyCallbacks.push(callback);\n        }\n    }\n};\n// Create public properties and methods of the router in the singletonRouter\nconst urlPropertyFields = [\n    'pathname',\n    'route',\n    'query',\n    'asPath',\n    'components',\n    'isFallback',\n    'basePath',\n    'locale',\n    'locales',\n    'defaultLocale',\n    'isReady',\n    'isPreview',\n    'isLocaleDomain',\n    'domainLocales'\n];\nconst routerEvents = [\n    'routeChangeStart',\n    'beforeHistoryChange',\n    'routeChangeComplete',\n    'routeChangeError',\n    'hashChangeStart',\n    'hashChangeComplete'\n];\nconst coreMethodFields = [\n    'push',\n    'replace',\n    'reload',\n    'back',\n    'prefetch',\n    'beforePopState'\n];\n// Events is a static property on the router, the router doesn't have to be initialized to use it\nObject.defineProperty(singletonRouter, 'events', {\n    get () {\n        return _router.default.events;\n    }\n});\nfunction getRouter() {\n    if (!singletonRouter.router) {\n        const message = 'No router instance found.\\n' + 'You should only use \"next/router\" on the client side of your app.\\n';\n        throw Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n            value: \"E394\",\n            enumerable: false,\n            configurable: true\n        });\n    }\n    return singletonRouter.router;\n}\nurlPropertyFields.forEach((field)=>{\n    // Here we need to use Object.defineProperty because we need to return\n    // the property assigned to the actual router\n    // The value might get changed as we change routes and this is the\n    // proper way to access it\n    Object.defineProperty(singletonRouter, field, {\n        get () {\n            const router = getRouter();\n            return router[field];\n        }\n    });\n});\ncoreMethodFields.forEach((field)=>{\n    // We don't really know the types here, so we add them later instead\n    ;\n    singletonRouter[field] = function() {\n        for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n            args[_key] = arguments[_key];\n        }\n        const router = getRouter();\n        return router[field](...args);\n    };\n});\nrouterEvents.forEach((event)=>{\n    singletonRouter.ready(()=>{\n        _router.default.events.on(event, function() {\n            for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n                args[_key] = arguments[_key];\n            }\n            const eventField = \"on\" + event.charAt(0).toUpperCase() + event.substring(1);\n            const _singletonRouter = singletonRouter;\n            if (_singletonRouter[eventField]) {\n                try {\n                    _singletonRouter[eventField](...args);\n                } catch (err) {\n                    console.error(\"Error when running the Router event: \" + eventField);\n                    console.error((0, _iserror.default)(err) ? err.message + \"\\n\" + err.stack : err + '');\n                }\n            }\n        });\n    });\n});\nconst _default = singletonRouter;\nfunction useRouter() {\n    _s();\n    const router = _react.default.useContext(_routercontextsharedruntime.RouterContext);\n    if (!router) {\n        throw Object.defineProperty(new Error('NextRouter was not mounted. https://nextjs.org/docs/messages/next-router-not-mounted'), \"__NEXT_ERROR_CODE\", {\n            value: \"E509\",\n            enumerable: false,\n            configurable: true\n        });\n    }\n    return router;\n}\n_s(useRouter, \"rbAhEc3dLGnVlsHWaSDsgP4MZS0=\");\nfunction createRouter() {\n    for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n        args[_key] = arguments[_key];\n    }\n    singletonRouter.router = new _router.default(...args);\n    singletonRouter.readyCallbacks.forEach((cb)=>cb());\n    singletonRouter.readyCallbacks = [];\n    return singletonRouter.router;\n}\nfunction makePublicRouterInstance(router) {\n    const scopedRouter = router;\n    const instance = {};\n    for (const property of urlPropertyFields){\n        if (typeof scopedRouter[property] === 'object') {\n            instance[property] = Object.assign(Array.isArray(scopedRouter[property]) ? [] : {}, scopedRouter[property]) // makes sure query is not stateful\n            ;\n            continue;\n        }\n        instance[property] = scopedRouter[property];\n    }\n    // Events is a static property on the router, the router doesn't have to be initialized to use it\n    instance.events = _router.default.events;\n    coreMethodFields.forEach((field)=>{\n        instance[field] = function() {\n            for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n                args[_key] = arguments[_key];\n            }\n            return scopedRouter[field](...args);\n        };\n    });\n    return instance;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=router.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvcm91dGVyLmpzIiwibWFwcGluZ3MiOiJBQUFBLGlCQUFpQjs7QUFBQTs7Ozs7Ozs7Ozs7O0lBYVJBLE1BQU07ZUFBTkEsUUFBQUEsT0FBTTs7SUE2SUNDLFlBQVk7ZUFBWkE7O0lBN0JoQix5REFBeUQ7SUFDekQsT0FBaUQ7ZUFBakQ7O0lBMENnQkMsd0JBQXdCO2VBQXhCQTs7SUEvQkFDLFNBQVM7ZUFBVEE7O0lBUklDLFVBQVU7ZUFBVkEsWUFBQUEsT0FBVTs7Ozs0RUFoSVo7NkVBQ0M7d0RBRVc7OEVBQ1Y7aUZBNEhrQjtBQTlHdEMsTUFBTUMsa0JBQXVDO0lBQzNDQyxRQUFRO0lBQ1JDLGdCQUFnQixFQUFFO0lBQ2xCQyxPQUFNQyxRQUFvQjtRQUN4QixJQUFJLElBQUksQ0FBQ0gsTUFBTSxFQUFFLE9BQU9HO1FBQ3hCLElBQUksSUFBNkIsRUFBRTtZQUNqQyxJQUFJLENBQUNGLGNBQWMsQ0FBQ0ksSUFBSSxDQUFDRjtRQUMzQjtJQUNGO0FBQ0Y7QUFFQSw0RUFBNEU7QUFDNUUsTUFBTUcsb0JBQW9CO0lBQ3hCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDRDtBQUNELE1BQU1DLGVBQWU7SUFDbkI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFHRCxNQUFNQyxtQkFBbUI7SUFDdkI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFFRCxpR0FBaUc7QUFDakdDLE9BQU9DLGNBQWMsQ0FBQ1gsaUJBQWlCLFVBQVU7SUFDL0NZO1FBQ0UsT0FBT2pCLFFBQUFBLE9BQU0sQ0FBQ2tCLE1BQU07SUFDdEI7QUFDRjtBQUVBLFNBQVNDO0lBQ1AsSUFBSSxDQUFDZCxnQkFBZ0JDLE1BQU0sRUFBRTtRQUMzQixNQUFNYyxVQUNKLGdDQUNBO1FBQ0YsTUFBTSxxQkFBa0IsQ0FBbEIsSUFBSUMsTUFBTUQsVUFBVjttQkFBQTt3QkFBQTswQkFBQTtRQUFpQjtJQUN6QjtJQUNBLE9BQU9mLGdCQUFnQkMsTUFBTTtBQUMvQjtBQUVBTSxrQkFBa0JVLE9BQU8sQ0FBQyxDQUFDQztJQUN6QixzRUFBc0U7SUFDdEUsNkNBQTZDO0lBQzdDLGtFQUFrRTtJQUNsRSwwQkFBMEI7SUFDMUJSLE9BQU9DLGNBQWMsQ0FBQ1gsaUJBQWlCa0IsT0FBTztRQUM1Q047WUFDRSxNQUFNWCxTQUFTYTtZQUNmLE9BQU9iLE1BQU0sQ0FBQ2lCLE1BQU07UUFDdEI7SUFDRjtBQUNGO0FBRUFULGlCQUFpQlEsT0FBTyxDQUFDLENBQUNDO0lBQ3hCLG9FQUFvRTs7SUFDbEVsQixlQUF1QixDQUFDa0IsTUFBTSxHQUFHO3lDQUFJQyxPQUFBQSxJQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxHQUFBQSxPQUFBQSxNQUFBQSxPQUFBQTtZQUFBQSxJQUFBQSxDQUFBQSxLQUFBQSxHQUFBQSxTQUFBQSxDQUFBQSxLQUFBQTs7UUFDckMsTUFBTWxCLFNBQVNhO1FBQ2YsT0FBT2IsTUFBTSxDQUFDaUIsTUFBTSxJQUFJQztJQUMxQjtBQUNGO0FBRUFYLGFBQWFTLE9BQU8sQ0FBQyxDQUFDRztJQUNwQnBCLGdCQUFnQkcsS0FBSyxDQUFDO1FBQ3BCUixRQUFBQSxPQUFNLENBQUNrQixNQUFNLENBQUNRLEVBQUUsQ0FBQ0QsT0FBTzs2Q0FBSUQsT0FBQUEsSUFBQUEsTUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsT0FBQUEsTUFBQUEsT0FBQUE7Z0JBQUFBLElBQUFBLENBQUFBLEtBQUFBLEdBQUFBLFNBQUFBLENBQUFBLEtBQUFBOztZQUMxQixNQUFNRyxhQUFjLE9BQUlGLE1BQU1HLE1BQU0sQ0FBQyxHQUFHQyxXQUFXLEtBQUtKLE1BQU1LLFNBQVMsQ0FDckU7WUFFRixNQUFNQyxtQkFBbUIxQjtZQUN6QixJQUFJMEIsZ0JBQWdCLENBQUNKLFdBQVcsRUFBRTtnQkFDaEMsSUFBSTtvQkFDRkksZ0JBQWdCLENBQUNKLFdBQVcsSUFBSUg7Z0JBQ2xDLEVBQUUsT0FBT1EsS0FBSztvQkFDWkMsUUFBUUMsS0FBSyxDQUFFLDBDQUF1Q1A7b0JBQ3RETSxRQUFRQyxLQUFLLENBQ1hDLENBQUFBLEdBQUFBLFNBQUFBLE9BQUFBLEVBQVFILE9BQVVBLElBQUlaLE9BQU8sR0FBQyxPQUFJWSxJQUFJSSxLQUFLLEdBQUtKLE1BQU07Z0JBRTFEO1lBQ0Y7UUFDRjtJQUNGO0FBQ0Y7TUFHQSxXQUFlM0I7QUFXUixTQUFTRjs7SUFDZCxNQUFNRyxTQUFTK0IsT0FBQUEsT0FBSyxDQUFDQyxVQUFVLENBQUNDLDRCQUFBQSxhQUFhO0lBQzdDLElBQUksQ0FBQ2pDLFFBQVE7UUFDWCxNQUFNLHFCQUVMLENBRkssSUFBSWUsTUFDUix5RkFESTttQkFBQTt3QkFBQTswQkFBQTtRQUVOO0lBQ0Y7SUFFQSxPQUFPZjtBQUNUOztBQVFPLFNBQVNMO0lBQ2QsaUNBQUd1QixPQUFIO1FBQUdBLElBQUFBLENBQUgsdUJBQTZDOztJQUU3Q25CLGdCQUFnQkMsTUFBTSxHQUFHLElBQUlOLFFBQUFBLE9BQU0sSUFBSXdCO0lBQ3ZDbkIsZ0JBQWdCRSxjQUFjLENBQUNlLE9BQU8sQ0FBQyxDQUFDa0IsS0FBT0E7SUFDL0NuQyxnQkFBZ0JFLGNBQWMsR0FBRyxFQUFFO0lBRW5DLE9BQU9GLGdCQUFnQkMsTUFBTTtBQUMvQjtBQU1PLFNBQVNKLHlCQUF5QkksTUFBYztJQUNyRCxNQUFNbUMsZUFBZW5DO0lBQ3JCLE1BQU1vQyxXQUFXLENBQUM7SUFFbEIsS0FBSyxNQUFNQyxZQUFZL0Isa0JBQW1CO1FBQ3hDLElBQUksT0FBTzZCLFlBQVksQ0FBQ0UsU0FBUyxLQUFLLFVBQVU7WUFDOUNELFFBQVEsQ0FBQ0MsU0FBUyxHQUFHNUIsT0FBTzZCLE1BQU0sQ0FDaENDLE1BQU1DLE9BQU8sQ0FBQ0wsWUFBWSxDQUFDRSxTQUFTLElBQUksRUFBRSxHQUFHLENBQUMsR0FDOUNGLFlBQVksQ0FBQ0UsU0FBUyxFQUN0QixtQ0FBbUM7O1lBQ3JDO1FBQ0Y7UUFFQUQsUUFBUSxDQUFDQyxTQUFTLEdBQUdGLFlBQVksQ0FBQ0UsU0FBUztJQUM3QztJQUVBLGlHQUFpRztJQUNqR0QsU0FBU3hCLE1BQU0sR0FBR2xCLFFBQUFBLE9BQU0sQ0FBQ2tCLE1BQU07SUFFL0JKLGlCQUFpQlEsT0FBTyxDQUFDLENBQUNDO1FBQ3hCbUIsUUFBUSxDQUFDbkIsTUFBTSxHQUFHOzZDQUFJQyxPQUFBQSxJQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxHQUFBQSxPQUFBQSxNQUFBQSxPQUFBQTtnQkFBQUEsSUFBQUEsQ0FBQUEsS0FBQUEsR0FBQUEsU0FBQUEsQ0FBQUEsS0FBQUE7O1lBQ3BCLE9BQU9pQixZQUFZLENBQUNsQixNQUFNLElBQUlDO1FBQ2hDO0lBQ0Y7SUFFQSxPQUFPa0I7QUFDVCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvc3JjL2NsaWVudC9yb3V0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIHdpbmRvdyAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJvdXRlciBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci9yb3V0ZXInXG5pbXBvcnQgdHlwZSB7IE5leHRSb3V0ZXIgfSBmcm9tICcuLi9zaGFyZWQvbGliL3JvdXRlci9yb3V0ZXInXG5pbXBvcnQgeyBSb3V0ZXJDb250ZXh0IH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCBpc0Vycm9yIGZyb20gJy4uL2xpYi9pcy1lcnJvcidcblxudHlwZSBTaW5nbGV0b25Sb3V0ZXJCYXNlID0ge1xuICByb3V0ZXI6IFJvdXRlciB8IG51bGxcbiAgcmVhZHlDYWxsYmFja3M6IEFycmF5PCgpID0+IGFueT5cbiAgcmVhZHkoY2I6ICgpID0+IGFueSk6IHZvaWRcbn1cblxuZXhwb3J0IHsgUm91dGVyIH1cblxuZXhwb3J0IHR5cGUgeyBOZXh0Um91dGVyIH1cblxuZXhwb3J0IHR5cGUgU2luZ2xldG9uUm91dGVyID0gU2luZ2xldG9uUm91dGVyQmFzZSAmIE5leHRSb3V0ZXJcblxuY29uc3Qgc2luZ2xldG9uUm91dGVyOiBTaW5nbGV0b25Sb3V0ZXJCYXNlID0ge1xuICByb3V0ZXI6IG51bGwsIC8vIGhvbGRzIHRoZSBhY3R1YWwgcm91dGVyIGluc3RhbmNlXG4gIHJlYWR5Q2FsbGJhY2tzOiBbXSxcbiAgcmVhZHkoY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgICBpZiAodGhpcy5yb3V0ZXIpIHJldHVybiBjYWxsYmFjaygpXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLnJlYWR5Q2FsbGJhY2tzLnB1c2goY2FsbGJhY2spXG4gICAgfVxuICB9LFxufVxuXG4vLyBDcmVhdGUgcHVibGljIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgb2YgdGhlIHJvdXRlciBpbiB0aGUgc2luZ2xldG9uUm91dGVyXG5jb25zdCB1cmxQcm9wZXJ0eUZpZWxkcyA9IFtcbiAgJ3BhdGhuYW1lJyxcbiAgJ3JvdXRlJyxcbiAgJ3F1ZXJ5JyxcbiAgJ2FzUGF0aCcsXG4gICdjb21wb25lbnRzJyxcbiAgJ2lzRmFsbGJhY2snLFxuICAnYmFzZVBhdGgnLFxuICAnbG9jYWxlJyxcbiAgJ2xvY2FsZXMnLFxuICAnZGVmYXVsdExvY2FsZScsXG4gICdpc1JlYWR5JyxcbiAgJ2lzUHJldmlldycsXG4gICdpc0xvY2FsZURvbWFpbicsXG4gICdkb21haW5Mb2NhbGVzJyxcbl0gYXMgY29uc3RcbmNvbnN0IHJvdXRlckV2ZW50cyA9IFtcbiAgJ3JvdXRlQ2hhbmdlU3RhcnQnLFxuICAnYmVmb3JlSGlzdG9yeUNoYW5nZScsXG4gICdyb3V0ZUNoYW5nZUNvbXBsZXRlJyxcbiAgJ3JvdXRlQ2hhbmdlRXJyb3InLFxuICAnaGFzaENoYW5nZVN0YXJ0JyxcbiAgJ2hhc2hDaGFuZ2VDb21wbGV0ZScsXG5dIGFzIGNvbnN0XG5leHBvcnQgdHlwZSBSb3V0ZXJFdmVudCA9ICh0eXBlb2Ygcm91dGVyRXZlbnRzKVtudW1iZXJdXG5cbmNvbnN0IGNvcmVNZXRob2RGaWVsZHMgPSBbXG4gICdwdXNoJyxcbiAgJ3JlcGxhY2UnLFxuICAncmVsb2FkJyxcbiAgJ2JhY2snLFxuICAncHJlZmV0Y2gnLFxuICAnYmVmb3JlUG9wU3RhdGUnLFxuXSBhcyBjb25zdFxuXG4vLyBFdmVudHMgaXMgYSBzdGF0aWMgcHJvcGVydHkgb24gdGhlIHJvdXRlciwgdGhlIHJvdXRlciBkb2Vzbid0IGhhdmUgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gdXNlIGl0XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoc2luZ2xldG9uUm91dGVyLCAnZXZlbnRzJywge1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIFJvdXRlci5ldmVudHNcbiAgfSxcbn0pXG5cbmZ1bmN0aW9uIGdldFJvdXRlcigpOiBSb3V0ZXIge1xuICBpZiAoIXNpbmdsZXRvblJvdXRlci5yb3V0ZXIpIHtcbiAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICdObyByb3V0ZXIgaW5zdGFuY2UgZm91bmQuXFxuJyArXG4gICAgICAnWW91IHNob3VsZCBvbmx5IHVzZSBcIm5leHQvcm91dGVyXCIgb24gdGhlIGNsaWVudCBzaWRlIG9mIHlvdXIgYXBwLlxcbidcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSlcbiAgfVxuICByZXR1cm4gc2luZ2xldG9uUm91dGVyLnJvdXRlclxufVxuXG51cmxQcm9wZXJ0eUZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAvLyBIZXJlIHdlIG5lZWQgdG8gdXNlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBiZWNhdXNlIHdlIG5lZWQgdG8gcmV0dXJuXG4gIC8vIHRoZSBwcm9wZXJ0eSBhc3NpZ25lZCB0byB0aGUgYWN0dWFsIHJvdXRlclxuICAvLyBUaGUgdmFsdWUgbWlnaHQgZ2V0IGNoYW5nZWQgYXMgd2UgY2hhbmdlIHJvdXRlcyBhbmQgdGhpcyBpcyB0aGVcbiAgLy8gcHJvcGVyIHdheSB0byBhY2Nlc3MgaXRcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNpbmdsZXRvblJvdXRlciwgZmllbGQsIHtcbiAgICBnZXQoKSB7XG4gICAgICBjb25zdCByb3V0ZXIgPSBnZXRSb3V0ZXIoKVxuICAgICAgcmV0dXJuIHJvdXRlcltmaWVsZF0gYXMgc3RyaW5nXG4gICAgfSxcbiAgfSlcbn0pXG5cbmNvcmVNZXRob2RGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgLy8gV2UgZG9uJ3QgcmVhbGx5IGtub3cgdGhlIHR5cGVzIGhlcmUsIHNvIHdlIGFkZCB0aGVtIGxhdGVyIGluc3RlYWRcbiAgOyhzaW5nbGV0b25Sb3V0ZXIgYXMgYW55KVtmaWVsZF0gPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICBjb25zdCByb3V0ZXIgPSBnZXRSb3V0ZXIoKSBhcyBhbnlcbiAgICByZXR1cm4gcm91dGVyW2ZpZWxkXSguLi5hcmdzKVxuICB9XG59KVxuXG5yb3V0ZXJFdmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgc2luZ2xldG9uUm91dGVyLnJlYWR5KCgpID0+IHtcbiAgICBSb3V0ZXIuZXZlbnRzLm9uKGV2ZW50LCAoLi4uYXJncykgPT4ge1xuICAgICAgY29uc3QgZXZlbnRGaWVsZCA9IGBvbiR7ZXZlbnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHtldmVudC5zdWJzdHJpbmcoXG4gICAgICAgIDFcbiAgICAgICl9YFxuICAgICAgY29uc3QgX3NpbmdsZXRvblJvdXRlciA9IHNpbmdsZXRvblJvdXRlciBhcyBhbnlcbiAgICAgIGlmIChfc2luZ2xldG9uUm91dGVyW2V2ZW50RmllbGRdKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgX3NpbmdsZXRvblJvdXRlcltldmVudEZpZWxkXSguLi5hcmdzKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciB3aGVuIHJ1bm5pbmcgdGhlIFJvdXRlciBldmVudDogJHtldmVudEZpZWxkfWApXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGlzRXJyb3IoZXJyKSA/IGAke2Vyci5tZXNzYWdlfVxcbiR7ZXJyLnN0YWNrfWAgOiBlcnIgKyAnJ1xuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0pXG59KVxuXG4vLyBFeHBvcnQgdGhlIHNpbmdsZXRvblJvdXRlciBhbmQgdGhpcyBpcyB0aGUgcHVibGljIEFQSS5cbmV4cG9ydCBkZWZhdWx0IHNpbmdsZXRvblJvdXRlciBhcyBTaW5nbGV0b25Sb3V0ZXJcblxuLy8gUmVleHBvcnQgdGhlIHdpdGhSb3V0ZXIgSE9DXG5leHBvcnQgeyBkZWZhdWx0IGFzIHdpdGhSb3V0ZXIgfSBmcm9tICcuL3dpdGgtcm91dGVyJ1xuXG4vKipcbiAqIFRoaXMgaG9vayBnaXZlcyBhY2Nlc3MgdGhlIFtyb3V0ZXIgb2JqZWN0XShodHRwczovL25leHRqcy5vcmcvZG9jcy9wYWdlcy9hcGktcmVmZXJlbmNlL2Z1bmN0aW9ucy91c2Utcm91dGVyI3JvdXRlci1vYmplY3QpXG4gKiBpbnNpZGUgdGhlIFtQYWdlcyBSb3V0ZXJdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL3BhZ2VzL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24pLlxuICpcbiAqIFJlYWQgbW9yZTogW05leHQuanMgRG9jczogYHVzZVJvdXRlcmBdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL3BhZ2VzL2FwaS1yZWZlcmVuY2UvZnVuY3Rpb25zL3VzZS1yb3V0ZXIpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VSb3V0ZXIoKTogTmV4dFJvdXRlciB7XG4gIGNvbnN0IHJvdXRlciA9IFJlYWN0LnVzZUNvbnRleHQoUm91dGVyQ29udGV4dClcbiAgaWYgKCFyb3V0ZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnTmV4dFJvdXRlciB3YXMgbm90IG1vdW50ZWQuIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL25leHQtcm91dGVyLW5vdC1tb3VudGVkJ1xuICAgIClcbiAgfVxuXG4gIHJldHVybiByb3V0ZXJcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSByb3V0ZXIgYW5kIGFzc2lnbiBpdCBhcyB0aGUgc2luZ2xldG9uIGluc3RhbmNlLlxuICogVGhpcyBpcyB1c2VkIGluIGNsaWVudCBzaWRlIHdoZW4gd2UgYXJlIGluaXRpYWxpemluZyB0aGUgYXBwLlxuICogVGhpcyBzaG91bGQgKipub3QqKiBiZSB1c2VkIGluc2lkZSB0aGUgc2VydmVyLlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSb3V0ZXIoXG4gIC4uLmFyZ3M6IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUm91dGVyPlxuKTogUm91dGVyIHtcbiAgc2luZ2xldG9uUm91dGVyLnJvdXRlciA9IG5ldyBSb3V0ZXIoLi4uYXJncylcbiAgc2luZ2xldG9uUm91dGVyLnJlYWR5Q2FsbGJhY2tzLmZvckVhY2goKGNiKSA9PiBjYigpKVxuICBzaW5nbGV0b25Sb3V0ZXIucmVhZHlDYWxsYmFja3MgPSBbXVxuXG4gIHJldHVybiBzaW5nbGV0b25Sb3V0ZXIucm91dGVyXG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgYHdpdGhSb3V0ZXJgIHJvdXRlciBpbnN0YW5jZVxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUHVibGljUm91dGVySW5zdGFuY2Uocm91dGVyOiBSb3V0ZXIpOiBOZXh0Um91dGVyIHtcbiAgY29uc3Qgc2NvcGVkUm91dGVyID0gcm91dGVyIGFzIGFueVxuICBjb25zdCBpbnN0YW5jZSA9IHt9IGFzIGFueVxuXG4gIGZvciAoY29uc3QgcHJvcGVydHkgb2YgdXJsUHJvcGVydHlGaWVsZHMpIHtcbiAgICBpZiAodHlwZW9mIHNjb3BlZFJvdXRlcltwcm9wZXJ0eV0gPT09ICdvYmplY3QnKSB7XG4gICAgICBpbnN0YW5jZVtwcm9wZXJ0eV0gPSBPYmplY3QuYXNzaWduKFxuICAgICAgICBBcnJheS5pc0FycmF5KHNjb3BlZFJvdXRlcltwcm9wZXJ0eV0pID8gW10gOiB7fSxcbiAgICAgICAgc2NvcGVkUm91dGVyW3Byb3BlcnR5XVxuICAgICAgKSAvLyBtYWtlcyBzdXJlIHF1ZXJ5IGlzIG5vdCBzdGF0ZWZ1bFxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpbnN0YW5jZVtwcm9wZXJ0eV0gPSBzY29wZWRSb3V0ZXJbcHJvcGVydHldXG4gIH1cblxuICAvLyBFdmVudHMgaXMgYSBzdGF0aWMgcHJvcGVydHkgb24gdGhlIHJvdXRlciwgdGhlIHJvdXRlciBkb2Vzbid0IGhhdmUgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gdXNlIGl0XG4gIGluc3RhbmNlLmV2ZW50cyA9IFJvdXRlci5ldmVudHNcblxuICBjb3JlTWV0aG9kRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgaW5zdGFuY2VbZmllbGRdID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICByZXR1cm4gc2NvcGVkUm91dGVyW2ZpZWxkXSguLi5hcmdzKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gaW5zdGFuY2Vcbn1cbiJdLCJuYW1lcyI6WyJSb3V0ZXIiLCJjcmVhdGVSb3V0ZXIiLCJtYWtlUHVibGljUm91dGVySW5zdGFuY2UiLCJ1c2VSb3V0ZXIiLCJ3aXRoUm91dGVyIiwic2luZ2xldG9uUm91dGVyIiwicm91dGVyIiwicmVhZHlDYWxsYmFja3MiLCJyZWFkeSIsImNhbGxiYWNrIiwid2luZG93IiwicHVzaCIsInVybFByb3BlcnR5RmllbGRzIiwicm91dGVyRXZlbnRzIiwiY29yZU1ldGhvZEZpZWxkcyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiZXZlbnRzIiwiZ2V0Um91dGVyIiwibWVzc2FnZSIsIkVycm9yIiwiZm9yRWFjaCIsImZpZWxkIiwiYXJncyIsImV2ZW50Iiwib24iLCJldmVudEZpZWxkIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzdWJzdHJpbmciLCJfc2luZ2xldG9uUm91dGVyIiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwiaXNFcnJvciIsInN0YWNrIiwiUmVhY3QiLCJ1c2VDb250ZXh0IiwiUm91dGVyQ29udGV4dCIsImNiIiwic2NvcGVkUm91dGVyIiwiaW5zdGFuY2UiLCJwcm9wZXJ0eSIsImFzc2lnbiIsIkFycmF5IiwiaXNBcnJheSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/router.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/script.js":
/*!*********************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/script.js ***!
  \*********************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__  cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    default: function() {\n        return _default;\n    },\n    handleClientScriptLoad: function() {\n        return handleClientScriptLoad;\n    },\n    initScriptLoader: function() {\n        return initScriptLoader;\n    }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _reactdom = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react-dom */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/index.js\"));\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"));\nconst _headmanagercontextsharedruntime = __webpack_require__(/*! ../shared/lib/head-manager-context.shared-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\");\nconst _setattributesfromprops = __webpack_require__(/*! ./set-attributes-from-props */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/set-attributes-from-props.js\");\nconst _requestidlecallback = __webpack_require__(/*! ./request-idle-callback */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/request-idle-callback.js\");\nconst ScriptCache = new Map();\nconst LoadCache = new Set();\nconst insertStylesheets = (stylesheets)=>{\n    // Case 1: Styles for afterInteractive/lazyOnload with appDir injected via handleClientScriptLoad\n    //\n    // Using ReactDOM.preinit to feature detect appDir and inject styles\n    // Stylesheets might have already been loaded if initialized with Script component\n    // Re-inject styles here to handle scripts loaded via handleClientScriptLoad\n    // ReactDOM.preinit handles dedup and ensures the styles are loaded only once\n    if (_reactdom.default.preinit) {\n        stylesheets.forEach((stylesheet)=>{\n            _reactdom.default.preinit(stylesheet, {\n                as: 'style'\n            });\n        });\n        return;\n    }\n    // Case 2: Styles for afterInteractive/lazyOnload with pages injected via handleClientScriptLoad\n    //\n    // We use this function to load styles when appdir is not detected\n    // TODO: Use React float APIs to load styles once available for pages dir\n    if (true) {\n        let head = document.head;\n        stylesheets.forEach((stylesheet)=>{\n            let link = document.createElement('link');\n            link.type = 'text/css';\n            link.rel = 'stylesheet';\n            link.href = stylesheet;\n            head.appendChild(link);\n        });\n    }\n};\nconst loadScript = (props)=>{\n    const { src, id, onLoad = ()=>{}, onReady = null, dangerouslySetInnerHTML, children = '', strategy = 'afterInteractive', onError, stylesheets } = props;\n    const cacheKey = id || src;\n    // Script has already loaded\n    if (cacheKey && LoadCache.has(cacheKey)) {\n        return;\n    }\n    // Contents of this script are already loading/loaded\n    if (ScriptCache.has(src)) {\n        LoadCache.add(cacheKey);\n        // It is possible that multiple `next/script` components all have same \"src\", but has different \"onLoad\"\n        // This is to make sure the same remote script will only load once, but \"onLoad\" are executed in order\n        ScriptCache.get(src).then(onLoad, onError);\n        return;\n    }\n    /** Execute after the script first loaded */ const afterLoad = ()=>{\n        // Run onReady for the first time after load event\n        if (onReady) {\n            onReady();\n        }\n        // add cacheKey to LoadCache when load successfully\n        LoadCache.add(cacheKey);\n    };\n    const el = document.createElement('script');\n    const loadPromise = new Promise((resolve, reject)=>{\n        el.addEventListener('load', function(e) {\n            resolve();\n            if (onLoad) {\n                onLoad.call(this, e);\n            }\n            afterLoad();\n        });\n        el.addEventListener('error', function(e) {\n            reject(e);\n        });\n    }).catch(function(e) {\n        if (onError) {\n            onError(e);\n        }\n    });\n    if (dangerouslySetInnerHTML) {\n        // Casting since lib.dom.d.ts doesn't have TrustedHTML yet.\n        el.innerHTML = dangerouslySetInnerHTML.__html || '';\n        afterLoad();\n    } else if (children) {\n        el.textContent = typeof children === 'string' ? children : Array.isArray(children) ? children.join('') : '';\n        afterLoad();\n    } else if (src) {\n        el.src = src;\n        // do not add cacheKey into LoadCache for remote script here\n        // cacheKey will be added to LoadCache when it is actually loaded (see loadPromise above)\n        ScriptCache.set(src, loadPromise);\n    }\n    (0, _setattributesfromprops.setAttributesFromProps)(el, props);\n    if (strategy === 'worker') {\n        el.setAttribute('type', 'text/partytown');\n    }\n    el.setAttribute('data-nscript', strategy);\n    // Load styles associated with this script\n    if (stylesheets) {\n        insertStylesheets(stylesheets);\n    }\n    document.body.appendChild(el);\n};\nfunction handleClientScriptLoad(props) {\n    const { strategy = 'afterInteractive' } = props;\n    if (strategy === 'lazyOnload') {\n        window.addEventListener('load', ()=>{\n            (0, _requestidlecallback.requestIdleCallback)(()=>loadScript(props));\n        });\n    } else {\n        loadScript(props);\n    }\n}\nfunction loadLazyScript(props) {\n    if (document.readyState === 'complete') {\n        (0, _requestidlecallback.requestIdleCallback)(()=>loadScript(props));\n    } else {\n        window.addEventListener('load', ()=>{\n            (0, _requestidlecallback.requestIdleCallback)(()=>loadScript(props));\n        });\n    }\n}\nfunction addBeforeInteractiveToCache() {\n    const scripts = [\n        ...document.querySelectorAll('[data-nscript=\"beforeInteractive\"]'),\n        ...document.querySelectorAll('[data-nscript=\"beforePageRender\"]')\n    ];\n    scripts.forEach((script)=>{\n        const cacheKey = script.id || script.getAttribute('src');\n        LoadCache.add(cacheKey);\n    });\n}\nfunction initScriptLoader(scriptLoaderItems) {\n    scriptLoaderItems.forEach(handleClientScriptLoad);\n    addBeforeInteractiveToCache();\n}\n/**\n * Load a third-party scripts in an optimized way.\n *\n * Read more: [Next.js Docs: `next/script`](https://nextjs.org/docs/app/api-reference/components/script)\n */ function Script(props) {\n    const { id, src = '', onLoad = ()=>{}, onReady = null, strategy = 'afterInteractive', onError, stylesheets, ...restProps } = props;\n    // Context is available only during SSR\n    let { updateScripts, scripts, getIsSsr, appDir, nonce } = (0, _react.useContext)(_headmanagercontextsharedruntime.HeadManagerContext);\n    // if a nonce is explicitly passed to the script tag, favor that over the automatic handling\n    nonce = restProps.nonce || nonce;\n    /**\n   * - First mount:\n   *   1. The useEffect for onReady executes\n   *   2. hasOnReadyEffectCalled.current is false, but the script hasn't loaded yet (not in LoadCache)\n   *      onReady is skipped, set hasOnReadyEffectCalled.current to true\n   *   3. The useEffect for loadScript executes\n   *   4. hasLoadScriptEffectCalled.current is false, loadScript executes\n   *      Once the script is loaded, the onLoad and onReady will be called by then\n   *   [If strict mode is enabled / is wrapped in <OffScreen /> component]\n   *   5. The useEffect for onReady executes again\n   *   6. hasOnReadyEffectCalled.current is true, so entire effect is skipped\n   *   7. The useEffect for loadScript executes again\n   *   8. hasLoadScriptEffectCalled.current is true, so entire effect is skipped\n   *\n   * - Second mount:\n   *   1. The useEffect for onReady executes\n   *   2. hasOnReadyEffectCalled.current is false, but the script has already loaded (found in LoadCache)\n   *      onReady is called, set hasOnReadyEffectCalled.current to true\n   *   3. The useEffect for loadScript executes\n   *   4. The script is already loaded, loadScript bails out\n   *   [If strict mode is enabled / is wrapped in <OffScreen /> component]\n   *   5. The useEffect for onReady executes again\n   *   6. hasOnReadyEffectCalled.current is true, so entire effect is skipped\n   *   7. The useEffect for loadScript executes again\n   *   8. hasLoadScriptEffectCalled.current is true, so entire effect is skipped\n   */ const hasOnReadyEffectCalled = (0, _react.useRef)(false);\n    (0, _react.useEffect)(()=>{\n        const cacheKey = id || src;\n        if (!hasOnReadyEffectCalled.current) {\n            // Run onReady if script has loaded before but component is re-mounted\n            if (onReady && cacheKey && LoadCache.has(cacheKey)) {\n                onReady();\n            }\n            hasOnReadyEffectCalled.current = true;\n        }\n    }, [\n        onReady,\n        id,\n        src\n    ]);\n    const hasLoadScriptEffectCalled = (0, _react.useRef)(false);\n    (0, _react.useEffect)(()=>{\n        if (!hasLoadScriptEffectCalled.current) {\n            if (strategy === 'afterInteractive') {\n                loadScript(props);\n            } else if (strategy === 'lazyOnload') {\n                loadLazyScript(props);\n            }\n            hasLoadScriptEffectCalled.current = true;\n        }\n    }, [\n        props,\n        strategy\n    ]);\n    if (strategy === 'beforeInteractive' || strategy === 'worker') {\n        if (updateScripts) {\n            scripts[strategy] = (scripts[strategy] || []).concat([\n                {\n                    id,\n                    src,\n                    onLoad,\n                    onReady,\n                    onError,\n                    ...restProps,\n                    nonce\n                }\n            ]);\n            updateScripts(scripts);\n        } else if (getIsSsr && getIsSsr()) {\n            // Script has already loaded during SSR\n            LoadCache.add(id || src);\n        } else if (getIsSsr && !getIsSsr()) {\n            loadScript({\n                ...props,\n                nonce\n            });\n        }\n    }\n    // For the app directory, we need React Float to preload these scripts.\n    if (appDir) {\n        // Injecting stylesheets here handles beforeInteractive and worker scripts correctly\n        // For other strategies injecting here ensures correct stylesheet order\n        // ReactDOM.preinit handles loading the styles in the correct order,\n        // also ensures the stylesheet is loaded only once and in a consistent manner\n        //\n        // Case 1: Styles for beforeInteractive/worker with appDir - handled here\n        // Case 2: Styles for beforeInteractive/worker with pages dir - Not handled yet\n        // Case 3: Styles for afterInteractive/lazyOnload with appDir - handled here\n        // Case 4: Styles for afterInteractive/lazyOnload with pages dir - handled in insertStylesheets function\n        if (stylesheets) {\n            stylesheets.forEach((styleSrc)=>{\n                _reactdom.default.preinit(styleSrc, {\n                    as: 'style'\n                });\n            });\n        }\n        // Before interactive scripts need to be loaded by Next.js' runtime instead\n        // of native <script> tags, because they no longer have `defer`.\n        if (strategy === 'beforeInteractive') {\n            if (!src) {\n                // For inlined scripts, we put the content in `children`.\n                if (restProps.dangerouslySetInnerHTML) {\n                    // Casting since lib.dom.d.ts doesn't have TrustedHTML yet.\n                    restProps.children = restProps.dangerouslySetInnerHTML.__html;\n                    delete restProps.dangerouslySetInnerHTML;\n                }\n                return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n                    nonce: nonce,\n                    dangerouslySetInnerHTML: {\n                        __html: \"(self.__next_s=self.__next_s||[]).push(\" + JSON.stringify([\n                            0,\n                            {\n                                ...restProps,\n                                id\n                            }\n                        ]) + \")\"\n                    }\n                });\n            } else {\n                // @ts-ignore\n                _reactdom.default.preload(src, restProps.integrity ? {\n                    as: 'script',\n                    integrity: restProps.integrity,\n                    nonce,\n                    crossOrigin: restProps.crossOrigin\n                } : {\n                    as: 'script',\n                    nonce,\n                    crossOrigin: restProps.crossOrigin\n                });\n                return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"script\", {\n                    nonce: nonce,\n                    dangerouslySetInnerHTML: {\n                        __html: \"(self.__next_s=self.__next_s||[]).push(\" + JSON.stringify([\n                            src,\n                            {\n                                ...restProps,\n                                id\n                            }\n                        ]) + \")\"\n                    }\n                });\n            }\n        } else if (strategy === 'afterInteractive') {\n            if (src) {\n                // @ts-ignore\n                _reactdom.default.preload(src, restProps.integrity ? {\n                    as: 'script',\n                    integrity: restProps.integrity,\n                    nonce,\n                    crossOrigin: restProps.crossOrigin\n                } : {\n                    as: 'script',\n                    nonce,\n                    crossOrigin: restProps.crossOrigin\n                });\n            }\n        }\n    }\n    return null;\n}\n_c = Script;\nObject.defineProperty(Script, '__nextScript', {\n    value: true\n});\nconst _default = Script;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=script.js.map\nvar _c;\n$RefreshReg$(_c, \"Script\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvc2NyaXB0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQWdZQSxPQUFxQjtlQUFyQjs7SUFwT2dCQSxzQkFBc0I7ZUFBdEJBOztJQWdDQUMsZ0JBQWdCO2VBQWhCQTs7Ozs7OytFQTFMSzs2RUFDMEM7NkRBRTVCO29EQUNJO2lEQUNIO0FBRXBDLE1BQU1DLGNBQWMsSUFBSUM7QUFDeEIsTUFBTUMsWUFBWSxJQUFJQztBQWlCdEIsTUFBTUMsb0JBQW9CLENBQUNDO0lBQ3pCLGlHQUFpRztJQUNqRyxFQUFFO0lBQ0Ysb0VBQW9FO0lBQ3BFLGtGQUFrRjtJQUNsRiw0RUFBNEU7SUFDNUUsNkVBQTZFO0lBQzdFLElBQUlDLFVBQUFBLE9BQVEsQ0FBQ0MsT0FBTyxFQUFFO1FBQ3BCRixZQUFZRyxPQUFPLENBQUMsQ0FBQ0M7WUFDbkJILFVBQUFBLE9BQVEsQ0FBQ0MsT0FBTyxDQUFDRSxZQUFZO2dCQUFFQyxJQUFJO1lBQVE7UUFDN0M7UUFFQTtJQUNGO0lBRUEsZ0dBQWdHO0lBQ2hHLEVBQUU7SUFDRixrRUFBa0U7SUFDbEUseUVBQXlFO0lBQ3pFLElBQUksSUFBNkIsRUFBRTtRQUNqQyxJQUFJRSxPQUFPQyxTQUFTRCxJQUFJO1FBQ3hCUCxZQUFZRyxPQUFPLENBQUMsQ0FBQ0M7WUFDbkIsSUFBSUssT0FBT0QsU0FBU0UsYUFBYSxDQUFDO1lBRWxDRCxLQUFLRSxJQUFJLEdBQUc7WUFDWkYsS0FBS0csR0FBRyxHQUFHO1lBQ1hILEtBQUtJLElBQUksR0FBR1Q7WUFFWkcsS0FBS08sV0FBVyxDQUFDTDtRQUNuQjtJQUNGO0FBQ0Y7QUFFQSxNQUFNTSxhQUFhLENBQUNDO0lBQ2xCLE1BQU0sRUFDSkMsR0FBRyxFQUNIQyxFQUFFLEVBQ0ZDLFNBQVMsS0FBTyxDQUFDLEVBQ2pCQyxVQUFVLElBQUksRUFDZEMsdUJBQXVCLEVBQ3ZCQyxXQUFXLEVBQUUsRUFDYkMsV0FBVyxrQkFBa0IsRUFDN0JDLE9BQU8sRUFDUHhCLFdBQVcsRUFDWixHQUFHZ0I7SUFFSixNQUFNUyxXQUFXUCxNQUFNRDtJQUV2Qiw0QkFBNEI7SUFDNUIsSUFBSVEsWUFBWTVCLFVBQVU2QixHQUFHLENBQUNELFdBQVc7UUFDdkM7SUFDRjtJQUVBLHFEQUFxRDtJQUNyRCxJQUFJOUIsWUFBWStCLEdBQUcsQ0FBQ1QsTUFBTTtRQUN4QnBCLFVBQVU4QixHQUFHLENBQUNGO1FBQ2Qsd0dBQXdHO1FBQ3hHLHNHQUFzRztRQUN0RzlCLFlBQVlpQyxHQUFHLENBQUNYLEtBQUtZLElBQUksQ0FBQ1YsUUFBUUs7UUFDbEM7SUFDRjtJQUVBLDBDQUEwQyxHQUMxQyxNQUFNTSxZQUFZO1FBQ2hCLGtEQUFrRDtRQUNsRCxJQUFJVixTQUFTO1lBQ1hBO1FBQ0Y7UUFDQSxtREFBbUQ7UUFDbkR2QixVQUFVOEIsR0FBRyxDQUFDRjtJQUNoQjtJQUVBLE1BQU1NLEtBQUt2QixTQUFTRSxhQUFhLENBQUM7SUFFbEMsTUFBTXNCLGNBQWMsSUFBSUMsUUFBYyxDQUFDQyxTQUFTQztRQUM5Q0osR0FBR0ssZ0JBQWdCLENBQUMsUUFBUSxTQUFVQyxDQUFDO1lBQ3JDSDtZQUNBLElBQUlmLFFBQVE7Z0JBQ1ZBLE9BQU9tQixJQUFJLENBQUMsSUFBSSxFQUFFRDtZQUNwQjtZQUNBUDtRQUNGO1FBQ0FDLEdBQUdLLGdCQUFnQixDQUFDLFNBQVMsU0FBVUMsQ0FBQztZQUN0Q0YsT0FBT0U7UUFDVDtJQUNGLEdBQUdFLEtBQUssQ0FBQyxTQUFVRixDQUFDO1FBQ2xCLElBQUliLFNBQVM7WUFDWEEsUUFBUWE7UUFDVjtJQUNGO0lBRUEsSUFBSWhCLHlCQUF5QjtRQUMzQiwyREFBMkQ7UUFDM0RVLEdBQUdTLFNBQVMsR0FBSW5CLHdCQUF3Qm9CLE1BQU0sSUFBZTtRQUU3RFg7SUFDRixPQUFPLElBQUlSLFVBQVU7UUFDbkJTLEdBQUdXLFdBQVcsR0FDWixPQUFPcEIsYUFBYSxXQUNoQkEsV0FDQXFCLE1BQU1DLE9BQU8sQ0FBQ3RCLFlBQ1pBLFNBQVN1QixJQUFJLENBQUMsTUFDZDtRQUVSZjtJQUNGLE9BQU8sSUFBSWIsS0FBSztRQUNkYyxHQUFHZCxHQUFHLEdBQUdBO1FBQ1QsNERBQTREO1FBQzVELHlGQUF5RjtRQUV6RnRCLFlBQVltRCxHQUFHLENBQUM3QixLQUFLZTtJQUN2QjtJQUVBZSxDQUFBQSxHQUFBQSx3QkFBQUEsc0JBQXNCLEVBQUNoQixJQUFJZjtJQUUzQixJQUFJTyxhQUFhLFVBQVU7UUFDekJRLEdBQUdpQixZQUFZLENBQUMsUUFBUTtJQUMxQjtJQUVBakIsR0FBR2lCLFlBQVksQ0FBQyxnQkFBZ0J6QjtJQUVoQywwQ0FBMEM7SUFDMUMsSUFBSXZCLGFBQWE7UUFDZkQsa0JBQWtCQztJQUNwQjtJQUVBUSxTQUFTeUMsSUFBSSxDQUFDbkMsV0FBVyxDQUFDaUI7QUFDNUI7QUFFTyxTQUFTdEMsdUJBQXVCdUIsS0FBa0I7SUFDdkQsTUFBTSxFQUFFTyxXQUFXLGtCQUFrQixFQUFFLEdBQUdQO0lBQzFDLElBQUlPLGFBQWEsY0FBYztRQUM3QmpCLE9BQU84QixnQkFBZ0IsQ0FBQyxRQUFRO1lBQzlCYyxDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQUFBLEVBQW9CLElBQU1uQyxXQUFXQztRQUN2QztJQUNGLE9BQU87UUFDTEQsV0FBV0M7SUFDYjtBQUNGO0FBRUEsU0FBU21DLGVBQWVuQyxLQUFrQjtJQUN4QyxJQUFJUixTQUFTNEMsVUFBVSxLQUFLLFlBQVk7UUFDdENGLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0IsSUFBTW5DLFdBQVdDO0lBQ3ZDLE9BQU87UUFDTFYsT0FBTzhCLGdCQUFnQixDQUFDLFFBQVE7WUFDOUJjLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0IsSUFBTW5DLFdBQVdDO1FBQ3ZDO0lBQ0Y7QUFDRjtBQUVBLFNBQVNxQztJQUNQLE1BQU1DLFVBQVU7V0FDWDlDLFNBQVMrQyxnQkFBZ0IsQ0FBQztXQUMxQi9DLFNBQVMrQyxnQkFBZ0IsQ0FBQztLQUM5QjtJQUNERCxRQUFRbkQsT0FBTyxDQUFDLENBQUNxRDtRQUNmLE1BQU0vQixXQUFXK0IsT0FBT3RDLEVBQUUsSUFBSXNDLE9BQU9DLFlBQVksQ0FBQztRQUNsRDVELFVBQVU4QixHQUFHLENBQUNGO0lBQ2hCO0FBQ0Y7QUFFTyxTQUFTL0IsaUJBQWlCZ0UsaUJBQWdDO0lBQy9EQSxrQkFBa0J2RCxPQUFPLENBQUNWO0lBQzFCNEQ7QUFDRjtBQUVBOzs7O0NBSUMsR0FDRCxnQkFBZ0JyQyxLQUFrQjtJQUNoQyxNQUFNLEVBQ0pFLEVBQUUsRUFDRkQsTUFBTSxFQUFFLEVBQ1JFLFNBQVMsS0FBTyxDQUFDLEVBQ2pCQyxVQUFVLElBQUksRUFDZEcsV0FBVyxrQkFBa0IsRUFDN0JDLE9BQU8sRUFDUHhCLFdBQVcsRUFDWCxHQUFHNEQsV0FDSixHQUFHNUM7SUFFSix1Q0FBdUM7SUFDdkMsSUFBSSxFQUFFNkMsYUFBYSxFQUFFUCxPQUFPLEVBQUVRLFFBQVEsRUFBRUMsTUFBTSxFQUFFQyxLQUFLLEVBQUUsR0FDckRDLENBQUFBLEdBQUFBLE9BQUFBLFVBQUFBLEVBQVdDLGlDQUFBQSxrQkFBa0I7SUFFL0IsNEZBQTRGO0lBQzVGRixRQUFRSixVQUFVSSxLQUFLLElBQUlBO0lBRTNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJDLEdBQ0QsTUFBTUcseUJBQXlCQyxDQUFBQSxHQUFBQSxPQUFBQSxNQUFBQSxFQUFPO0lBRXRDQyxDQUFBQSxHQUFBQSxPQUFBQSxTQUFBQSxFQUFVO1FBQ1IsTUFBTTVDLFdBQVdQLE1BQU1EO1FBQ3ZCLElBQUksQ0FBQ2tELHVCQUF1QkcsT0FBTyxFQUFFO1lBQ25DLHNFQUFzRTtZQUN0RSxJQUFJbEQsV0FBV0ssWUFBWTVCLFVBQVU2QixHQUFHLENBQUNELFdBQVc7Z0JBQ2xETDtZQUNGO1lBRUErQyx1QkFBdUJHLE9BQU8sR0FBRztRQUNuQztJQUNGLEdBQUc7UUFBQ2xEO1FBQVNGO1FBQUlEO0tBQUk7SUFFckIsTUFBTXNELDRCQUE0QkgsQ0FBQUEsR0FBQUEsT0FBQUEsTUFBTSxFQUFDO0lBRXpDQyxDQUFBQSxHQUFBQSxPQUFBQSxTQUFBQSxFQUFVO1FBQ1IsSUFBSSxDQUFDRSwwQkFBMEJELE9BQU8sRUFBRTtZQUN0QyxJQUFJL0MsYUFBYSxvQkFBb0I7Z0JBQ25DUixXQUFXQztZQUNiLE9BQU8sSUFBSU8sYUFBYSxjQUFjO2dCQUNwQzRCLGVBQWVuQztZQUNqQjtZQUVBdUQsMEJBQTBCRCxPQUFPLEdBQUc7UUFDdEM7SUFDRixHQUFHO1FBQUN0RDtRQUFPTztLQUFTO0lBRXBCLElBQUlBLGFBQWEsdUJBQXVCQSxhQUFhLFVBQVU7UUFDN0QsSUFBSXNDLGVBQWU7WUFDakJQLE9BQU8sQ0FBQy9CLFNBQVMsR0FBSStCLENBQUFBLE9BQU8sQ0FBQy9CLFNBQVMsSUFBSSxJQUFJaUQsTUFBTSxDQUFDO2dCQUNuRDtvQkFDRXREO29CQUNBRDtvQkFDQUU7b0JBQ0FDO29CQUNBSTtvQkFDQSxHQUFHb0MsU0FBUztvQkFDWkk7Z0JBQ0Y7YUFDRDtZQUNESCxjQUFjUDtRQUNoQixPQUFPLElBQUlRLFlBQVlBLFlBQVk7WUFDakMsdUNBQXVDO1lBQ3ZDakUsVUFBVThCLEdBQUcsQ0FBQ1QsTUFBTUQ7UUFDdEIsT0FBTyxJQUFJNkMsWUFBWSxDQUFDQSxZQUFZO1lBQ2xDL0MsV0FBVztnQkFDVCxHQUFHQyxLQUFLO2dCQUNSZ0Q7WUFDRjtRQUNGO0lBQ0Y7SUFFQSx1RUFBdUU7SUFDdkUsSUFBSUQsUUFBUTtRQUNWLG9GQUFvRjtRQUNwRix1RUFBdUU7UUFDdkUsb0VBQW9FO1FBQ3BFLDZFQUE2RTtRQUM3RSxFQUFFO1FBQ0YseUVBQXlFO1FBQ3pFLCtFQUErRTtRQUMvRSw0RUFBNEU7UUFDNUUsd0dBQXdHO1FBQ3hHLElBQUkvRCxhQUFhO1lBQ2ZBLFlBQVlHLE9BQU8sQ0FBQyxDQUFDc0U7Z0JBQ25CeEUsVUFBQUEsT0FBUSxDQUFDQyxPQUFPLENBQUN1RSxVQUFVO29CQUFFcEUsSUFBSTtnQkFBUTtZQUMzQztRQUNGO1FBRUEsMkVBQTJFO1FBQzNFLGdFQUFnRTtRQUNoRSxJQUFJa0IsYUFBYSxxQkFBcUI7WUFDcEMsSUFBSSxDQUFDTixLQUFLO2dCQUNSLHlEQUF5RDtnQkFDekQsSUFBSTJDLFVBQVV2Qyx1QkFBdUIsRUFBRTtvQkFDckMsMkRBQTJEO29CQUMzRHVDLFVBQVV0QyxRQUFRLEdBQUdzQyxVQUFVdkMsdUJBQXVCLENBQ25Eb0IsTUFBTTtvQkFDVCxPQUFPbUIsVUFBVXZDLHVCQUF1QjtnQkFDMUM7Z0JBRUEscUJBQ0UscUJBQUNtQyxVQUFBQTtvQkFDQ1EsT0FBT0E7b0JBQ1AzQyx5QkFBeUI7d0JBQ3ZCb0IsUUFBUyw0Q0FBeUNpQyxLQUFLQyxTQUFTLENBQUM7NEJBQy9EOzRCQUNBO2dDQUFFLEdBQUdmLFNBQVM7Z0NBQUUxQzs0QkFBRzt5QkFDcEIsSUFBRTtvQkFDTDs7WUFHTixPQUFPO2dCQUNMLGFBQWE7Z0JBQ2JqQixVQUFBQSxPQUFRLENBQUMyRSxPQUFPLENBQ2QzRCxLQUNBMkMsVUFBVWlCLFNBQVMsR0FDZjtvQkFDRXhFLElBQUk7b0JBQ0p3RSxXQUFXakIsVUFBVWlCLFNBQVM7b0JBQzlCYjtvQkFDQWMsYUFBYWxCLFVBQVVrQixXQUFXO2dCQUNwQyxJQUNBO29CQUFFekUsSUFBSTtvQkFBVTJEO29CQUFPYyxhQUFhbEIsVUFBVWtCLFdBQVc7Z0JBQUM7Z0JBRWhFLHFCQUNFLHFCQUFDdEIsVUFBQUE7b0JBQ0NRLE9BQU9BO29CQUNQM0MseUJBQXlCO3dCQUN2Qm9CLFFBQVMsNENBQXlDaUMsS0FBS0MsU0FBUyxDQUFDOzRCQUMvRDFEOzRCQUNBO2dDQUFFLEdBQUcyQyxTQUFTO2dDQUFFMUM7NEJBQUc7eUJBQ3BCLElBQUU7b0JBQ0w7O1lBR047UUFDRixPQUFPLElBQUlLLGFBQWEsb0JBQW9CO1lBQzFDLElBQUlOLEtBQUs7Z0JBQ1AsYUFBYTtnQkFDYmhCLFVBQUFBLE9BQVEsQ0FBQzJFLE9BQU8sQ0FDZDNELEtBQ0EyQyxVQUFVaUIsU0FBUyxHQUNmO29CQUNFeEUsSUFBSTtvQkFDSndFLFdBQVdqQixVQUFVaUIsU0FBUztvQkFDOUJiO29CQUNBYyxhQUFhbEIsVUFBVWtCLFdBQVc7Z0JBQ3BDLElBQ0E7b0JBQUV6RSxJQUFJO29CQUFVMkQ7b0JBQU9jLGFBQWFsQixVQUFVa0IsV0FBVztnQkFBQztZQUVsRTtRQUNGO0lBQ0Y7SUFFQSxPQUFPO0FBQ1Q7S0F0TFNuQjtBQXdMVG9CLE9BQU9DLGNBQWMsQ0FBQ3JCLFFBQVEsZ0JBQWdCO0lBQUVzQixPQUFPO0FBQUs7TUFFNUQsV0FBZXRCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9zcmMvY2xpZW50L3NjcmlwdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VDb250ZXh0LCB1c2VSZWYsIHR5cGUgSlNYIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFNjcmlwdEhUTUxBdHRyaWJ1dGVzIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIZWFkTWFuYWdlckNvbnRleHQgfSBmcm9tICcuLi9zaGFyZWQvbGliL2hlYWQtbWFuYWdlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgc2V0QXR0cmlidXRlc0Zyb21Qcm9wcyB9IGZyb20gJy4vc2V0LWF0dHJpYnV0ZXMtZnJvbS1wcm9wcydcbmltcG9ydCB7IHJlcXVlc3RJZGxlQ2FsbGJhY2sgfSBmcm9tICcuL3JlcXVlc3QtaWRsZS1jYWxsYmFjaydcblxuY29uc3QgU2NyaXB0Q2FjaGUgPSBuZXcgTWFwKClcbmNvbnN0IExvYWRDYWNoZSA9IG5ldyBTZXQoKVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmlwdFByb3BzIGV4dGVuZHMgU2NyaXB0SFRNTEF0dHJpYnV0ZXM8SFRNTFNjcmlwdEVsZW1lbnQ+IHtcbiAgc3RyYXRlZ3k/OiAnYWZ0ZXJJbnRlcmFjdGl2ZScgfCAnbGF6eU9ubG9hZCcgfCAnYmVmb3JlSW50ZXJhY3RpdmUnIHwgJ3dvcmtlcidcbiAgaWQ/OiBzdHJpbmdcbiAgb25Mb2FkPzogKGU6IGFueSkgPT4gdm9pZFxuICBvblJlYWR5PzogKCkgPT4gdm9pZCB8IG51bGxcbiAgb25FcnJvcj86IChlOiBhbnkpID0+IHZvaWRcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcbiAgc3R5bGVzaGVldHM/OiBzdHJpbmdbXVxufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBgU2NyaXB0UHJvcHNgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCB0eXBlIFByb3BzID0gU2NyaXB0UHJvcHNcblxuY29uc3QgaW5zZXJ0U3R5bGVzaGVldHMgPSAoc3R5bGVzaGVldHM6IHN0cmluZ1tdKSA9PiB7XG4gIC8vIENhc2UgMTogU3R5bGVzIGZvciBhZnRlckludGVyYWN0aXZlL2xhenlPbmxvYWQgd2l0aCBhcHBEaXIgaW5qZWN0ZWQgdmlhIGhhbmRsZUNsaWVudFNjcmlwdExvYWRcbiAgLy9cbiAgLy8gVXNpbmcgUmVhY3RET00ucHJlaW5pdCB0byBmZWF0dXJlIGRldGVjdCBhcHBEaXIgYW5kIGluamVjdCBzdHlsZXNcbiAgLy8gU3R5bGVzaGVldHMgbWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gbG9hZGVkIGlmIGluaXRpYWxpemVkIHdpdGggU2NyaXB0IGNvbXBvbmVudFxuICAvLyBSZS1pbmplY3Qgc3R5bGVzIGhlcmUgdG8gaGFuZGxlIHNjcmlwdHMgbG9hZGVkIHZpYSBoYW5kbGVDbGllbnRTY3JpcHRMb2FkXG4gIC8vIFJlYWN0RE9NLnByZWluaXQgaGFuZGxlcyBkZWR1cCBhbmQgZW5zdXJlcyB0aGUgc3R5bGVzIGFyZSBsb2FkZWQgb25seSBvbmNlXG4gIGlmIChSZWFjdERPTS5wcmVpbml0KSB7XG4gICAgc3R5bGVzaGVldHMuZm9yRWFjaCgoc3R5bGVzaGVldDogc3RyaW5nKSA9PiB7XG4gICAgICBSZWFjdERPTS5wcmVpbml0KHN0eWxlc2hlZXQsIHsgYXM6ICdzdHlsZScgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBDYXNlIDI6IFN0eWxlcyBmb3IgYWZ0ZXJJbnRlcmFjdGl2ZS9sYXp5T25sb2FkIHdpdGggcGFnZXMgaW5qZWN0ZWQgdmlhIGhhbmRsZUNsaWVudFNjcmlwdExvYWRcbiAgLy9cbiAgLy8gV2UgdXNlIHRoaXMgZnVuY3Rpb24gdG8gbG9hZCBzdHlsZXMgd2hlbiBhcHBkaXIgaXMgbm90IGRldGVjdGVkXG4gIC8vIFRPRE86IFVzZSBSZWFjdCBmbG9hdCBBUElzIHRvIGxvYWQgc3R5bGVzIG9uY2UgYXZhaWxhYmxlIGZvciBwYWdlcyBkaXJcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbGV0IGhlYWQgPSBkb2N1bWVudC5oZWFkXG4gICAgc3R5bGVzaGVldHMuZm9yRWFjaCgoc3R5bGVzaGVldDogc3RyaW5nKSA9PiB7XG4gICAgICBsZXQgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKVxuXG4gICAgICBsaW5rLnR5cGUgPSAndGV4dC9jc3MnXG4gICAgICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0J1xuICAgICAgbGluay5ocmVmID0gc3R5bGVzaGVldFxuXG4gICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspXG4gICAgfSlcbiAgfVxufVxuXG5jb25zdCBsb2FkU2NyaXB0ID0gKHByb3BzOiBTY3JpcHRQcm9wcyk6IHZvaWQgPT4ge1xuICBjb25zdCB7XG4gICAgc3JjLFxuICAgIGlkLFxuICAgIG9uTG9hZCA9ICgpID0+IHt9LFxuICAgIG9uUmVhZHkgPSBudWxsLFxuICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLFxuICAgIGNoaWxkcmVuID0gJycsXG4gICAgc3RyYXRlZ3kgPSAnYWZ0ZXJJbnRlcmFjdGl2ZScsXG4gICAgb25FcnJvcixcbiAgICBzdHlsZXNoZWV0cyxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgY2FjaGVLZXkgPSBpZCB8fCBzcmNcblxuICAvLyBTY3JpcHQgaGFzIGFscmVhZHkgbG9hZGVkXG4gIGlmIChjYWNoZUtleSAmJiBMb2FkQ2FjaGUuaGFzKGNhY2hlS2V5KSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gQ29udGVudHMgb2YgdGhpcyBzY3JpcHQgYXJlIGFscmVhZHkgbG9hZGluZy9sb2FkZWRcbiAgaWYgKFNjcmlwdENhY2hlLmhhcyhzcmMpKSB7XG4gICAgTG9hZENhY2hlLmFkZChjYWNoZUtleSlcbiAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IG11bHRpcGxlIGBuZXh0L3NjcmlwdGAgY29tcG9uZW50cyBhbGwgaGF2ZSBzYW1lIFwic3JjXCIsIGJ1dCBoYXMgZGlmZmVyZW50IFwib25Mb2FkXCJcbiAgICAvLyBUaGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGUgc2FtZSByZW1vdGUgc2NyaXB0IHdpbGwgb25seSBsb2FkIG9uY2UsIGJ1dCBcIm9uTG9hZFwiIGFyZSBleGVjdXRlZCBpbiBvcmRlclxuICAgIFNjcmlwdENhY2hlLmdldChzcmMpLnRoZW4ob25Mb2FkLCBvbkVycm9yKVxuICAgIHJldHVyblxuICB9XG5cbiAgLyoqIEV4ZWN1dGUgYWZ0ZXIgdGhlIHNjcmlwdCBmaXJzdCBsb2FkZWQgKi9cbiAgY29uc3QgYWZ0ZXJMb2FkID0gKCkgPT4ge1xuICAgIC8vIFJ1biBvblJlYWR5IGZvciB0aGUgZmlyc3QgdGltZSBhZnRlciBsb2FkIGV2ZW50XG4gICAgaWYgKG9uUmVhZHkpIHtcbiAgICAgIG9uUmVhZHkoKVxuICAgIH1cbiAgICAvLyBhZGQgY2FjaGVLZXkgdG8gTG9hZENhY2hlIHdoZW4gbG9hZCBzdWNjZXNzZnVsbHlcbiAgICBMb2FkQ2FjaGUuYWRkKGNhY2hlS2V5KVxuICB9XG5cbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKVxuXG4gIGNvbnN0IGxvYWRQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgcmVzb2x2ZSgpXG4gICAgICBpZiAob25Mb2FkKSB7XG4gICAgICAgIG9uTG9hZC5jYWxsKHRoaXMsIGUpXG4gICAgICB9XG4gICAgICBhZnRlckxvYWQoKVxuICAgIH0pXG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmdW5jdGlvbiAoZSkge1xuICAgICAgcmVqZWN0KGUpXG4gICAgfSlcbiAgfSkuY2F0Y2goZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAob25FcnJvcikge1xuICAgICAgb25FcnJvcihlKVxuICAgIH1cbiAgfSlcblxuICBpZiAoZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpIHtcbiAgICAvLyBDYXN0aW5nIHNpbmNlIGxpYi5kb20uZC50cyBkb2Vzbid0IGhhdmUgVHJ1c3RlZEhUTUwgeWV0LlxuICAgIGVsLmlubmVySFRNTCA9IChkYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWwgYXMgc3RyaW5nKSB8fCAnJ1xuXG4gICAgYWZ0ZXJMb2FkKClcbiAgfSBlbHNlIGlmIChjaGlsZHJlbikge1xuICAgIGVsLnRleHRDb250ZW50ID1cbiAgICAgIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBjaGlsZHJlblxuICAgICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pXG4gICAgICAgICAgPyBjaGlsZHJlbi5qb2luKCcnKVxuICAgICAgICAgIDogJydcblxuICAgIGFmdGVyTG9hZCgpXG4gIH0gZWxzZSBpZiAoc3JjKSB7XG4gICAgZWwuc3JjID0gc3JjXG4gICAgLy8gZG8gbm90IGFkZCBjYWNoZUtleSBpbnRvIExvYWRDYWNoZSBmb3IgcmVtb3RlIHNjcmlwdCBoZXJlXG4gICAgLy8gY2FjaGVLZXkgd2lsbCBiZSBhZGRlZCB0byBMb2FkQ2FjaGUgd2hlbiBpdCBpcyBhY3R1YWxseSBsb2FkZWQgKHNlZSBsb2FkUHJvbWlzZSBhYm92ZSlcblxuICAgIFNjcmlwdENhY2hlLnNldChzcmMsIGxvYWRQcm9taXNlKVxuICB9XG5cbiAgc2V0QXR0cmlidXRlc0Zyb21Qcm9wcyhlbCwgcHJvcHMpXG5cbiAgaWYgKHN0cmF0ZWd5ID09PSAnd29ya2VyJykge1xuICAgIGVsLnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L3BhcnR5dG93bicpXG4gIH1cblxuICBlbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbnNjcmlwdCcsIHN0cmF0ZWd5KVxuXG4gIC8vIExvYWQgc3R5bGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNjcmlwdFxuICBpZiAoc3R5bGVzaGVldHMpIHtcbiAgICBpbnNlcnRTdHlsZXNoZWV0cyhzdHlsZXNoZWV0cylcbiAgfVxuXG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVDbGllbnRTY3JpcHRMb2FkKHByb3BzOiBTY3JpcHRQcm9wcykge1xuICBjb25zdCB7IHN0cmF0ZWd5ID0gJ2FmdGVySW50ZXJhY3RpdmUnIH0gPSBwcm9wc1xuICBpZiAoc3RyYXRlZ3kgPT09ICdsYXp5T25sb2FkJykge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4ge1xuICAgICAgcmVxdWVzdElkbGVDYWxsYmFjaygoKSA9PiBsb2FkU2NyaXB0KHByb3BzKSlcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIGxvYWRTY3JpcHQocHJvcHMpXG4gIH1cbn1cblxuZnVuY3Rpb24gbG9hZExhenlTY3JpcHQocHJvcHM6IFNjcmlwdFByb3BzKSB7XG4gIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7XG4gICAgcmVxdWVzdElkbGVDYWxsYmFjaygoKSA9PiBsb2FkU2NyaXB0KHByb3BzKSlcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHtcbiAgICAgIHJlcXVlc3RJZGxlQ2FsbGJhY2soKCkgPT4gbG9hZFNjcmlwdChwcm9wcykpXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRCZWZvcmVJbnRlcmFjdGl2ZVRvQ2FjaGUoKSB7XG4gIGNvbnN0IHNjcmlwdHMgPSBbXG4gICAgLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbnNjcmlwdD1cImJlZm9yZUludGVyYWN0aXZlXCJdJyksXG4gICAgLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbnNjcmlwdD1cImJlZm9yZVBhZ2VSZW5kZXJcIl0nKSxcbiAgXVxuICBzY3JpcHRzLmZvckVhY2goKHNjcmlwdCkgPT4ge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gc2NyaXB0LmlkIHx8IHNjcmlwdC5nZXRBdHRyaWJ1dGUoJ3NyYycpXG4gICAgTG9hZENhY2hlLmFkZChjYWNoZUtleSlcbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRTY3JpcHRMb2FkZXIoc2NyaXB0TG9hZGVySXRlbXM6IFNjcmlwdFByb3BzW10pIHtcbiAgc2NyaXB0TG9hZGVySXRlbXMuZm9yRWFjaChoYW5kbGVDbGllbnRTY3JpcHRMb2FkKVxuICBhZGRCZWZvcmVJbnRlcmFjdGl2ZVRvQ2FjaGUoKVxufVxuXG4vKipcbiAqIExvYWQgYSB0aGlyZC1wYXJ0eSBzY3JpcHRzIGluIGFuIG9wdGltaXplZCB3YXkuXG4gKlxuICogUmVhZCBtb3JlOiBbTmV4dC5qcyBEb2NzOiBgbmV4dC9zY3JpcHRgXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9jb21wb25lbnRzL3NjcmlwdClcbiAqL1xuZnVuY3Rpb24gU2NyaXB0KHByb3BzOiBTY3JpcHRQcm9wcyk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICBzcmMgPSAnJyxcbiAgICBvbkxvYWQgPSAoKSA9PiB7fSxcbiAgICBvblJlYWR5ID0gbnVsbCxcbiAgICBzdHJhdGVneSA9ICdhZnRlckludGVyYWN0aXZlJyxcbiAgICBvbkVycm9yLFxuICAgIHN0eWxlc2hlZXRzLFxuICAgIC4uLnJlc3RQcm9wc1xuICB9ID0gcHJvcHNcblxuICAvLyBDb250ZXh0IGlzIGF2YWlsYWJsZSBvbmx5IGR1cmluZyBTU1JcbiAgbGV0IHsgdXBkYXRlU2NyaXB0cywgc2NyaXB0cywgZ2V0SXNTc3IsIGFwcERpciwgbm9uY2UgfSA9XG4gICAgdXNlQ29udGV4dChIZWFkTWFuYWdlckNvbnRleHQpXG5cbiAgLy8gaWYgYSBub25jZSBpcyBleHBsaWNpdGx5IHBhc3NlZCB0byB0aGUgc2NyaXB0IHRhZywgZmF2b3IgdGhhdCBvdmVyIHRoZSBhdXRvbWF0aWMgaGFuZGxpbmdcbiAgbm9uY2UgPSByZXN0UHJvcHMubm9uY2UgfHwgbm9uY2VcblxuICAvKipcbiAgICogLSBGaXJzdCBtb3VudDpcbiAgICogICAxLiBUaGUgdXNlRWZmZWN0IGZvciBvblJlYWR5IGV4ZWN1dGVzXG4gICAqICAgMi4gaGFzT25SZWFkeUVmZmVjdENhbGxlZC5jdXJyZW50IGlzIGZhbHNlLCBidXQgdGhlIHNjcmlwdCBoYXNuJ3QgbG9hZGVkIHlldCAobm90IGluIExvYWRDYWNoZSlcbiAgICogICAgICBvblJlYWR5IGlzIHNraXBwZWQsIHNldCBoYXNPblJlYWR5RWZmZWN0Q2FsbGVkLmN1cnJlbnQgdG8gdHJ1ZVxuICAgKiAgIDMuIFRoZSB1c2VFZmZlY3QgZm9yIGxvYWRTY3JpcHQgZXhlY3V0ZXNcbiAgICogICA0LiBoYXNMb2FkU2NyaXB0RWZmZWN0Q2FsbGVkLmN1cnJlbnQgaXMgZmFsc2UsIGxvYWRTY3JpcHQgZXhlY3V0ZXNcbiAgICogICAgICBPbmNlIHRoZSBzY3JpcHQgaXMgbG9hZGVkLCB0aGUgb25Mb2FkIGFuZCBvblJlYWR5IHdpbGwgYmUgY2FsbGVkIGJ5IHRoZW5cbiAgICogICBbSWYgc3RyaWN0IG1vZGUgaXMgZW5hYmxlZCAvIGlzIHdyYXBwZWQgaW4gPE9mZlNjcmVlbiAvPiBjb21wb25lbnRdXG4gICAqICAgNS4gVGhlIHVzZUVmZmVjdCBmb3Igb25SZWFkeSBleGVjdXRlcyBhZ2FpblxuICAgKiAgIDYuIGhhc09uUmVhZHlFZmZlY3RDYWxsZWQuY3VycmVudCBpcyB0cnVlLCBzbyBlbnRpcmUgZWZmZWN0IGlzIHNraXBwZWRcbiAgICogICA3LiBUaGUgdXNlRWZmZWN0IGZvciBsb2FkU2NyaXB0IGV4ZWN1dGVzIGFnYWluXG4gICAqICAgOC4gaGFzTG9hZFNjcmlwdEVmZmVjdENhbGxlZC5jdXJyZW50IGlzIHRydWUsIHNvIGVudGlyZSBlZmZlY3QgaXMgc2tpcHBlZFxuICAgKlxuICAgKiAtIFNlY29uZCBtb3VudDpcbiAgICogICAxLiBUaGUgdXNlRWZmZWN0IGZvciBvblJlYWR5IGV4ZWN1dGVzXG4gICAqICAgMi4gaGFzT25SZWFkeUVmZmVjdENhbGxlZC5jdXJyZW50IGlzIGZhbHNlLCBidXQgdGhlIHNjcmlwdCBoYXMgYWxyZWFkeSBsb2FkZWQgKGZvdW5kIGluIExvYWRDYWNoZSlcbiAgICogICAgICBvblJlYWR5IGlzIGNhbGxlZCwgc2V0IGhhc09uUmVhZHlFZmZlY3RDYWxsZWQuY3VycmVudCB0byB0cnVlXG4gICAqICAgMy4gVGhlIHVzZUVmZmVjdCBmb3IgbG9hZFNjcmlwdCBleGVjdXRlc1xuICAgKiAgIDQuIFRoZSBzY3JpcHQgaXMgYWxyZWFkeSBsb2FkZWQsIGxvYWRTY3JpcHQgYmFpbHMgb3V0XG4gICAqICAgW0lmIHN0cmljdCBtb2RlIGlzIGVuYWJsZWQgLyBpcyB3cmFwcGVkIGluIDxPZmZTY3JlZW4gLz4gY29tcG9uZW50XVxuICAgKiAgIDUuIFRoZSB1c2VFZmZlY3QgZm9yIG9uUmVhZHkgZXhlY3V0ZXMgYWdhaW5cbiAgICogICA2LiBoYXNPblJlYWR5RWZmZWN0Q2FsbGVkLmN1cnJlbnQgaXMgdHJ1ZSwgc28gZW50aXJlIGVmZmVjdCBpcyBza2lwcGVkXG4gICAqICAgNy4gVGhlIHVzZUVmZmVjdCBmb3IgbG9hZFNjcmlwdCBleGVjdXRlcyBhZ2FpblxuICAgKiAgIDguIGhhc0xvYWRTY3JpcHRFZmZlY3RDYWxsZWQuY3VycmVudCBpcyB0cnVlLCBzbyBlbnRpcmUgZWZmZWN0IGlzIHNraXBwZWRcbiAgICovXG4gIGNvbnN0IGhhc09uUmVhZHlFZmZlY3RDYWxsZWQgPSB1c2VSZWYoZmFsc2UpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGlkIHx8IHNyY1xuICAgIGlmICghaGFzT25SZWFkeUVmZmVjdENhbGxlZC5jdXJyZW50KSB7XG4gICAgICAvLyBSdW4gb25SZWFkeSBpZiBzY3JpcHQgaGFzIGxvYWRlZCBiZWZvcmUgYnV0IGNvbXBvbmVudCBpcyByZS1tb3VudGVkXG4gICAgICBpZiAob25SZWFkeSAmJiBjYWNoZUtleSAmJiBMb2FkQ2FjaGUuaGFzKGNhY2hlS2V5KSkge1xuICAgICAgICBvblJlYWR5KClcbiAgICAgIH1cblxuICAgICAgaGFzT25SZWFkeUVmZmVjdENhbGxlZC5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cbiAgfSwgW29uUmVhZHksIGlkLCBzcmNdKVxuXG4gIGNvbnN0IGhhc0xvYWRTY3JpcHRFZmZlY3RDYWxsZWQgPSB1c2VSZWYoZmFsc2UpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWhhc0xvYWRTY3JpcHRFZmZlY3RDYWxsZWQuY3VycmVudCkge1xuICAgICAgaWYgKHN0cmF0ZWd5ID09PSAnYWZ0ZXJJbnRlcmFjdGl2ZScpIHtcbiAgICAgICAgbG9hZFNjcmlwdChwcm9wcylcbiAgICAgIH0gZWxzZSBpZiAoc3RyYXRlZ3kgPT09ICdsYXp5T25sb2FkJykge1xuICAgICAgICBsb2FkTGF6eVNjcmlwdChwcm9wcylcbiAgICAgIH1cblxuICAgICAgaGFzTG9hZFNjcmlwdEVmZmVjdENhbGxlZC5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cbiAgfSwgW3Byb3BzLCBzdHJhdGVneV0pXG5cbiAgaWYgKHN0cmF0ZWd5ID09PSAnYmVmb3JlSW50ZXJhY3RpdmUnIHx8IHN0cmF0ZWd5ID09PSAnd29ya2VyJykge1xuICAgIGlmICh1cGRhdGVTY3JpcHRzKSB7XG4gICAgICBzY3JpcHRzW3N0cmF0ZWd5XSA9IChzY3JpcHRzW3N0cmF0ZWd5XSB8fCBbXSkuY29uY2F0KFtcbiAgICAgICAge1xuICAgICAgICAgIGlkLFxuICAgICAgICAgIHNyYyxcbiAgICAgICAgICBvbkxvYWQsXG4gICAgICAgICAgb25SZWFkeSxcbiAgICAgICAgICBvbkVycm9yLFxuICAgICAgICAgIC4uLnJlc3RQcm9wcyxcbiAgICAgICAgICBub25jZSxcbiAgICAgICAgfSxcbiAgICAgIF0pXG4gICAgICB1cGRhdGVTY3JpcHRzKHNjcmlwdHMpXG4gICAgfSBlbHNlIGlmIChnZXRJc1NzciAmJiBnZXRJc1NzcigpKSB7XG4gICAgICAvLyBTY3JpcHQgaGFzIGFscmVhZHkgbG9hZGVkIGR1cmluZyBTU1JcbiAgICAgIExvYWRDYWNoZS5hZGQoaWQgfHwgc3JjKVxuICAgIH0gZWxzZSBpZiAoZ2V0SXNTc3IgJiYgIWdldElzU3NyKCkpIHtcbiAgICAgIGxvYWRTY3JpcHQoe1xuICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgbm9uY2UsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8vIEZvciB0aGUgYXBwIGRpcmVjdG9yeSwgd2UgbmVlZCBSZWFjdCBGbG9hdCB0byBwcmVsb2FkIHRoZXNlIHNjcmlwdHMuXG4gIGlmIChhcHBEaXIpIHtcbiAgICAvLyBJbmplY3Rpbmcgc3R5bGVzaGVldHMgaGVyZSBoYW5kbGVzIGJlZm9yZUludGVyYWN0aXZlIGFuZCB3b3JrZXIgc2NyaXB0cyBjb3JyZWN0bHlcbiAgICAvLyBGb3Igb3RoZXIgc3RyYXRlZ2llcyBpbmplY3RpbmcgaGVyZSBlbnN1cmVzIGNvcnJlY3Qgc3R5bGVzaGVldCBvcmRlclxuICAgIC8vIFJlYWN0RE9NLnByZWluaXQgaGFuZGxlcyBsb2FkaW5nIHRoZSBzdHlsZXMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIsXG4gICAgLy8gYWxzbyBlbnN1cmVzIHRoZSBzdHlsZXNoZWV0IGlzIGxvYWRlZCBvbmx5IG9uY2UgYW5kIGluIGEgY29uc2lzdGVudCBtYW5uZXJcbiAgICAvL1xuICAgIC8vIENhc2UgMTogU3R5bGVzIGZvciBiZWZvcmVJbnRlcmFjdGl2ZS93b3JrZXIgd2l0aCBhcHBEaXIgLSBoYW5kbGVkIGhlcmVcbiAgICAvLyBDYXNlIDI6IFN0eWxlcyBmb3IgYmVmb3JlSW50ZXJhY3RpdmUvd29ya2VyIHdpdGggcGFnZXMgZGlyIC0gTm90IGhhbmRsZWQgeWV0XG4gICAgLy8gQ2FzZSAzOiBTdHlsZXMgZm9yIGFmdGVySW50ZXJhY3RpdmUvbGF6eU9ubG9hZCB3aXRoIGFwcERpciAtIGhhbmRsZWQgaGVyZVxuICAgIC8vIENhc2UgNDogU3R5bGVzIGZvciBhZnRlckludGVyYWN0aXZlL2xhenlPbmxvYWQgd2l0aCBwYWdlcyBkaXIgLSBoYW5kbGVkIGluIGluc2VydFN0eWxlc2hlZXRzIGZ1bmN0aW9uXG4gICAgaWYgKHN0eWxlc2hlZXRzKSB7XG4gICAgICBzdHlsZXNoZWV0cy5mb3JFYWNoKChzdHlsZVNyYykgPT4ge1xuICAgICAgICBSZWFjdERPTS5wcmVpbml0KHN0eWxlU3JjLCB7IGFzOiAnc3R5bGUnIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIEJlZm9yZSBpbnRlcmFjdGl2ZSBzY3JpcHRzIG5lZWQgdG8gYmUgbG9hZGVkIGJ5IE5leHQuanMnIHJ1bnRpbWUgaW5zdGVhZFxuICAgIC8vIG9mIG5hdGl2ZSA8c2NyaXB0PiB0YWdzLCBiZWNhdXNlIHRoZXkgbm8gbG9uZ2VyIGhhdmUgYGRlZmVyYC5cbiAgICBpZiAoc3RyYXRlZ3kgPT09ICdiZWZvcmVJbnRlcmFjdGl2ZScpIHtcbiAgICAgIGlmICghc3JjKSB7XG4gICAgICAgIC8vIEZvciBpbmxpbmVkIHNjcmlwdHMsIHdlIHB1dCB0aGUgY29udGVudCBpbiBgY2hpbGRyZW5gLlxuICAgICAgICBpZiAocmVzdFByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MKSB7XG4gICAgICAgICAgLy8gQ2FzdGluZyBzaW5jZSBsaWIuZG9tLmQudHMgZG9lc24ndCBoYXZlIFRydXN0ZWRIVE1MIHlldC5cbiAgICAgICAgICByZXN0UHJvcHMuY2hpbGRyZW4gPSByZXN0UHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcbiAgICAgICAgICAgIC5fX2h0bWwgYXMgc3RyaW5nXG4gICAgICAgICAgZGVsZXRlIHJlc3RQcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgICBub25jZT17bm9uY2V9XG4gICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgICBfX2h0bWw6IGAoc2VsZi5fX25leHRfcz1zZWxmLl9fbmV4dF9zfHxbXSkucHVzaCgke0pTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHsgLi4ucmVzdFByb3BzLCBpZCB9LFxuICAgICAgICAgICAgICBdKX0pYCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBSZWFjdERPTS5wcmVsb2FkKFxuICAgICAgICAgIHNyYyxcbiAgICAgICAgICByZXN0UHJvcHMuaW50ZWdyaXR5XG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBhczogJ3NjcmlwdCcsXG4gICAgICAgICAgICAgICAgaW50ZWdyaXR5OiByZXN0UHJvcHMuaW50ZWdyaXR5LFxuICAgICAgICAgICAgICAgIG5vbmNlLFxuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXN0UHJvcHMuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogeyBhczogJ3NjcmlwdCcsIG5vbmNlLCBjcm9zc09yaWdpbjogcmVzdFByb3BzLmNyb3NzT3JpZ2luIH1cbiAgICAgICAgKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxzY3JpcHRcbiAgICAgICAgICAgIG5vbmNlPXtub25jZX1cbiAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICAgIF9faHRtbDogYChzZWxmLl9fbmV4dF9zPXNlbGYuX19uZXh0X3N8fFtdKS5wdXNoKCR7SlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgICAgIHNyYyxcbiAgICAgICAgICAgICAgICB7IC4uLnJlc3RQcm9wcywgaWQgfSxcbiAgICAgICAgICAgICAgXSl9KWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0cmF0ZWd5ID09PSAnYWZ0ZXJJbnRlcmFjdGl2ZScpIHtcbiAgICAgIGlmIChzcmMpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBSZWFjdERPTS5wcmVsb2FkKFxuICAgICAgICAgIHNyYyxcbiAgICAgICAgICByZXN0UHJvcHMuaW50ZWdyaXR5XG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBhczogJ3NjcmlwdCcsXG4gICAgICAgICAgICAgICAgaW50ZWdyaXR5OiByZXN0UHJvcHMuaW50ZWdyaXR5LFxuICAgICAgICAgICAgICAgIG5vbmNlLFxuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiByZXN0UHJvcHMuY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogeyBhczogJ3NjcmlwdCcsIG5vbmNlLCBjcm9zc09yaWdpbjogcmVzdFByb3BzLmNyb3NzT3JpZ2luIH1cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTY3JpcHQsICdfX25leHRTY3JpcHQnLCB7IHZhbHVlOiB0cnVlIH0pXG5cbmV4cG9ydCBkZWZhdWx0IFNjcmlwdFxuIl0sIm5hbWVzIjpbImhhbmRsZUNsaWVudFNjcmlwdExvYWQiLCJpbml0U2NyaXB0TG9hZGVyIiwiU2NyaXB0Q2FjaGUiLCJNYXAiLCJMb2FkQ2FjaGUiLCJTZXQiLCJpbnNlcnRTdHlsZXNoZWV0cyIsInN0eWxlc2hlZXRzIiwiUmVhY3RET00iLCJwcmVpbml0IiwiZm9yRWFjaCIsInN0eWxlc2hlZXQiLCJhcyIsIndpbmRvdyIsImhlYWQiLCJkb2N1bWVudCIsImxpbmsiLCJjcmVhdGVFbGVtZW50IiwidHlwZSIsInJlbCIsImhyZWYiLCJhcHBlbmRDaGlsZCIsImxvYWRTY3JpcHQiLCJwcm9wcyIsInNyYyIsImlkIiwib25Mb2FkIiwib25SZWFkeSIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiY2hpbGRyZW4iLCJzdHJhdGVneSIsIm9uRXJyb3IiLCJjYWNoZUtleSIsImhhcyIsImFkZCIsImdldCIsInRoZW4iLCJhZnRlckxvYWQiLCJlbCIsImxvYWRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsImNhbGwiLCJjYXRjaCIsImlubmVySFRNTCIsIl9faHRtbCIsInRleHRDb250ZW50IiwiQXJyYXkiLCJpc0FycmF5Iiwiam9pbiIsInNldCIsInNldEF0dHJpYnV0ZXNGcm9tUHJvcHMiLCJzZXRBdHRyaWJ1dGUiLCJib2R5IiwicmVxdWVzdElkbGVDYWxsYmFjayIsImxvYWRMYXp5U2NyaXB0IiwicmVhZHlTdGF0ZSIsImFkZEJlZm9yZUludGVyYWN0aXZlVG9DYWNoZSIsInNjcmlwdHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwic2NyaXB0IiwiZ2V0QXR0cmlidXRlIiwic2NyaXB0TG9hZGVySXRlbXMiLCJTY3JpcHQiLCJyZXN0UHJvcHMiLCJ1cGRhdGVTY3JpcHRzIiwiZ2V0SXNTc3IiLCJhcHBEaXIiLCJub25jZSIsInVzZUNvbnRleHQiLCJIZWFkTWFuYWdlckNvbnRleHQiLCJoYXNPblJlYWR5RWZmZWN0Q2FsbGVkIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiY3VycmVudCIsImhhc0xvYWRTY3JpcHRFZmZlY3RDYWxsZWQiLCJjb25jYXQiLCJzdHlsZVNyYyIsIkpTT04iLCJzdHJpbmdpZnkiLCJwcmVsb2FkIiwiaW50ZWdyaXR5IiwiY3Jvc3NPcmlnaW4iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/script.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/set-attributes-from-props.js":
/*!****************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/set-attributes-from-props.js ***!
  \****************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"setAttributesFromProps\", ({\n    enumerable: true,\n    get: function() {\n        return setAttributesFromProps;\n    }\n}));\nconst DOMAttributeNames = {\n    acceptCharset: 'accept-charset',\n    className: 'class',\n    htmlFor: 'for',\n    httpEquiv: 'http-equiv',\n    noModule: 'noModule'\n};\nconst ignoreProps = [\n    'onLoad',\n    'onReady',\n    'dangerouslySetInnerHTML',\n    'children',\n    'onError',\n    'strategy',\n    'stylesheets'\n];\nfunction isBooleanScriptAttribute(attr) {\n    return [\n        'async',\n        'defer',\n        'noModule'\n    ].includes(attr);\n}\nfunction setAttributesFromProps(el, props) {\n    for (const [p, value] of Object.entries(props)){\n        if (!props.hasOwnProperty(p)) continue;\n        if (ignoreProps.includes(p)) continue;\n        // we don't render undefined props to the DOM\n        if (value === undefined) {\n            continue;\n        }\n        const attr = DOMAttributeNames[p] || p.toLowerCase();\n        if (el.tagName === 'SCRIPT' && isBooleanScriptAttribute(attr)) {\n            // Correctly assign boolean script attributes\n            // https://github.com/vercel/next.js/pull/20748\n            ;\n            el[attr] = !!value;\n        } else {\n            el.setAttribute(attr, String(value));\n        }\n        // Remove falsy non-zero boolean attributes so they are correctly interpreted\n        // (e.g. if we set them to false, this coerces to the string \"false\", which the browser interprets as true)\n        if (value === false || el.tagName === 'SCRIPT' && isBooleanScriptAttribute(attr) && (!value || value === 'false')) {\n            // Call setAttribute before, as we need to set and unset the attribute to override force async:\n            // https://html.spec.whatwg.org/multipage/scripting.html#script-force-async\n            el.setAttribute(attr, '');\n            el.removeAttribute(attr);\n        }\n    }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=set-attributes-from-props.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvc2V0LWF0dHJpYnV0ZXMtZnJvbS1wcm9wcy5qcyIsIm1hcHBpbmdzIjoiOzs7OzBEQXdCZ0JBOzs7ZUFBQUE7OztBQXhCaEIsTUFBTUMsb0JBQTRDO0lBQ2hEQyxlQUFlO0lBQ2ZDLFdBQVc7SUFDWEMsU0FBUztJQUNUQyxXQUFXO0lBQ1hDLFVBQVU7QUFDWjtBQUVBLE1BQU1DLGNBQWM7SUFDbEI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDRDtBQUVELFNBQVNDLHlCQUNQQyxJQUFZO0lBRVosT0FBTztRQUFDO1FBQVM7UUFBUztLQUFXLENBQUNDLFFBQVEsQ0FBQ0Q7QUFDakQ7QUFFTyxTQUFTVCx1QkFBdUJXLEVBQWUsRUFBRUMsS0FBYTtJQUNuRSxLQUFLLE1BQU0sQ0FBQ0MsR0FBR0MsTUFBTSxJQUFJQyxPQUFPQyxPQUFPLENBQUNKLE9BQVE7UUFDOUMsSUFBSSxDQUFDQSxNQUFNSyxjQUFjLENBQUNKLElBQUk7UUFDOUIsSUFBSU4sWUFBWUcsUUFBUSxDQUFDRyxJQUFJO1FBRTdCLDZDQUE2QztRQUM3QyxJQUFJQyxVQUFVSSxXQUFXO1lBQ3ZCO1FBQ0Y7UUFFQSxNQUFNVCxPQUFPUixpQkFBaUIsQ0FBQ1ksRUFBRSxJQUFJQSxFQUFFTSxXQUFXO1FBRWxELElBQUlSLEdBQUdTLE9BQU8sS0FBSyxZQUFZWix5QkFBeUJDLE9BQU87WUFDN0QsNkNBQTZDO1lBQzdDLCtDQUErQzs7WUFDN0NFLEVBQXdCLENBQUNGLEtBQUssR0FBRyxDQUFDLENBQUNLO1FBQ3ZDLE9BQU87WUFDTEgsR0FBR1UsWUFBWSxDQUFDWixNQUFNYSxPQUFPUjtRQUMvQjtRQUVBLDZFQUE2RTtRQUM3RSwyR0FBMkc7UUFDM0csSUFDRUEsVUFBVSxTQUNUSCxHQUFHUyxPQUFPLEtBQUssWUFDZFoseUJBQXlCQyxTQUN4QixFQUFDSyxTQUFTQSxVQUFVLFFBQU0sRUFDN0I7WUFDQSwrRkFBK0Y7WUFDL0YsMkVBQTJFO1lBQzNFSCxHQUFHVSxZQUFZLENBQUNaLE1BQU07WUFDdEJFLEdBQUdZLGVBQWUsQ0FBQ2Q7UUFDckI7SUFDRjtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9zcmMvY2xpZW50L3NldC1hdHRyaWJ1dGVzLWZyb20tcHJvcHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgRE9NQXR0cmlidXRlTmFtZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIGFjY2VwdENoYXJzZXQ6ICdhY2NlcHQtY2hhcnNldCcsXG4gIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgaHRtbEZvcjogJ2ZvcicsXG4gIGh0dHBFcXVpdjogJ2h0dHAtZXF1aXYnLFxuICBub01vZHVsZTogJ25vTW9kdWxlJyxcbn1cblxuY29uc3QgaWdub3JlUHJvcHMgPSBbXG4gICdvbkxvYWQnLFxuICAnb25SZWFkeScsXG4gICdkYW5nZXJvdXNseVNldElubmVySFRNTCcsXG4gICdjaGlsZHJlbicsXG4gICdvbkVycm9yJyxcbiAgJ3N0cmF0ZWd5JyxcbiAgJ3N0eWxlc2hlZXRzJyxcbl1cblxuZnVuY3Rpb24gaXNCb29sZWFuU2NyaXB0QXR0cmlidXRlKFxuICBhdHRyOiBzdHJpbmdcbik6IGF0dHIgaXMgJ2FzeW5jJyB8ICdkZWZlcicgfCAnbm9Nb2R1bGUnIHtcbiAgcmV0dXJuIFsnYXN5bmMnLCAnZGVmZXInLCAnbm9Nb2R1bGUnXS5pbmNsdWRlcyhhdHRyKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QXR0cmlidXRlc0Zyb21Qcm9wcyhlbDogSFRNTEVsZW1lbnQsIHByb3BzOiBvYmplY3QpIHtcbiAgZm9yIChjb25zdCBbcCwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzKSkge1xuICAgIGlmICghcHJvcHMuaGFzT3duUHJvcGVydHkocCkpIGNvbnRpbnVlXG4gICAgaWYgKGlnbm9yZVByb3BzLmluY2x1ZGVzKHApKSBjb250aW51ZVxuXG4gICAgLy8gd2UgZG9uJ3QgcmVuZGVyIHVuZGVmaW5lZCBwcm9wcyB0byB0aGUgRE9NXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgYXR0ciA9IERPTUF0dHJpYnV0ZU5hbWVzW3BdIHx8IHAudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKGVsLnRhZ05hbWUgPT09ICdTQ1JJUFQnICYmIGlzQm9vbGVhblNjcmlwdEF0dHJpYnV0ZShhdHRyKSkge1xuICAgICAgLy8gQ29ycmVjdGx5IGFzc2lnbiBib29sZWFuIHNjcmlwdCBhdHRyaWJ1dGVzXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL25leHQuanMvcHVsbC8yMDc0OFxuICAgICAgOyhlbCBhcyBIVE1MU2NyaXB0RWxlbWVudClbYXR0cl0gPSAhIXZhbHVlXG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShhdHRyLCBTdHJpbmcodmFsdWUpKVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBmYWxzeSBub24temVybyBib29sZWFuIGF0dHJpYnV0ZXMgc28gdGhleSBhcmUgY29ycmVjdGx5IGludGVycHJldGVkXG4gICAgLy8gKGUuZy4gaWYgd2Ugc2V0IHRoZW0gdG8gZmFsc2UsIHRoaXMgY29lcmNlcyB0byB0aGUgc3RyaW5nIFwiZmFsc2VcIiwgd2hpY2ggdGhlIGJyb3dzZXIgaW50ZXJwcmV0cyBhcyB0cnVlKVxuICAgIGlmIChcbiAgICAgIHZhbHVlID09PSBmYWxzZSB8fFxuICAgICAgKGVsLnRhZ05hbWUgPT09ICdTQ1JJUFQnICYmXG4gICAgICAgIGlzQm9vbGVhblNjcmlwdEF0dHJpYnV0ZShhdHRyKSAmJlxuICAgICAgICAoIXZhbHVlIHx8IHZhbHVlID09PSAnZmFsc2UnKSlcbiAgICApIHtcbiAgICAgIC8vIENhbGwgc2V0QXR0cmlidXRlIGJlZm9yZSwgYXMgd2UgbmVlZCB0byBzZXQgYW5kIHVuc2V0IHRoZSBhdHRyaWJ1dGUgdG8gb3ZlcnJpZGUgZm9yY2UgYXN5bmM6XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzY3JpcHQtZm9yY2UtYXN5bmNcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShhdHRyLCAnJylcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShhdHRyKVxuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbInNldEF0dHJpYnV0ZXNGcm9tUHJvcHMiLCJET01BdHRyaWJ1dGVOYW1lcyIsImFjY2VwdENoYXJzZXQiLCJjbGFzc05hbWUiLCJodG1sRm9yIiwiaHR0cEVxdWl2Iiwibm9Nb2R1bGUiLCJpZ25vcmVQcm9wcyIsImlzQm9vbGVhblNjcmlwdEF0dHJpYnV0ZSIsImF0dHIiLCJpbmNsdWRlcyIsImVsIiwicHJvcHMiLCJwIiwidmFsdWUiLCJPYmplY3QiLCJlbnRyaWVzIiwiaGFzT3duUHJvcGVydHkiLCJ1bmRlZmluZWQiLCJ0b0xvd2VyQ2FzZSIsInRhZ05hbWUiLCJzZXRBdHRyaWJ1dGUiLCJTdHJpbmciLCJyZW1vdmVBdHRyaWJ1dGUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/set-attributes-from-props.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/trusted-types.js":
/*!****************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/trusted-types.js ***!
  \****************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/**\n * Stores the Trusted Types Policy. Starts as undefined and can be set to null\n * if Trusted Types is not supported in the browser.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"__unsafeCreateTrustedScriptURL\", ({\n    enumerable: true,\n    get: function() {\n        return __unsafeCreateTrustedScriptURL;\n    }\n}));\nlet policy;\n/**\n * Getter for the Trusted Types Policy. If it is undefined, it is instantiated\n * here or set to null if Trusted Types is not supported in the browser.\n */ function getPolicy() {\n    if (typeof policy === 'undefined' && \"object\" !== 'undefined') {\n        var _window_trustedTypes;\n        policy = ((_window_trustedTypes = window.trustedTypes) == null ? void 0 : _window_trustedTypes.createPolicy('nextjs', {\n            createHTML: (input)=>input,\n            createScript: (input)=>input,\n            createScriptURL: (input)=>input\n        })) || null;\n    }\n    return policy;\n}\nfunction __unsafeCreateTrustedScriptURL(url) {\n    var _getPolicy;\n    return ((_getPolicy = getPolicy()) == null ? void 0 : _getPolicy.createScriptURL(url)) || url;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=trusted-types.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvdHJ1c3RlZC10eXBlcy5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0M7Ozs7a0VBNkJlQTs7O2VBQUFBOzs7QUE1QmhCLElBQUlDO0FBRUo7OztDQUdDLEdBQ0QsU0FBU0M7SUFDUCxJQUFJLE9BQU9ELFdBQVcsZUFBZSxPQUFPRSxNQUFXLGFBQWE7WUFFaEVBO1FBREZGLFNBQ0VFLENBQUFBLENBQUFBLHVCQUFBQSxPQUFPQyxZQUFBQSxLQUFZLGdCQUFuQkQscUJBQXFCRSxZQUFZLENBQUMsVUFBVTtZQUMxQ0MsWUFBWSxDQUFDQyxRQUFVQTtZQUN2QkMsY0FBYyxDQUFDRCxRQUFVQTtZQUN6QkUsaUJBQWlCLENBQUNGLFFBQVVBO1FBQzlCLE9BQU07SUFDVjtJQUVBLE9BQU9OO0FBQ1Q7QUFXTyxTQUFTRCwrQkFDZFUsR0FBVztRQUVKUjtJQUFQLE9BQU9BLENBQUFBLENBQUFBLGFBQUFBLFdBQUFBLEtBQUFBLE9BQUFBLEtBQUFBLElBQUFBLFdBQWFPLGVBQWUsQ0FBQ0MsSUFBQUEsS0FBUUE7QUFDOUMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3NyYy9jbGllbnQvdHJ1c3RlZC10eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0b3JlcyB0aGUgVHJ1c3RlZCBUeXBlcyBQb2xpY3kuIFN0YXJ0cyBhcyB1bmRlZmluZWQgYW5kIGNhbiBiZSBzZXQgdG8gbnVsbFxuICogaWYgVHJ1c3RlZCBUeXBlcyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyLlxuICovXG5sZXQgcG9saWN5OiBUcnVzdGVkVHlwZVBvbGljeSB8IG51bGwgfCB1bmRlZmluZWRcblxuLyoqXG4gKiBHZXR0ZXIgZm9yIHRoZSBUcnVzdGVkIFR5cGVzIFBvbGljeS4gSWYgaXQgaXMgdW5kZWZpbmVkLCBpdCBpcyBpbnN0YW50aWF0ZWRcbiAqIGhlcmUgb3Igc2V0IHRvIG51bGwgaWYgVHJ1c3RlZCBUeXBlcyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyLlxuICovXG5mdW5jdGlvbiBnZXRQb2xpY3koKSB7XG4gIGlmICh0eXBlb2YgcG9saWN5ID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHBvbGljeSA9XG4gICAgICB3aW5kb3cudHJ1c3RlZFR5cGVzPy5jcmVhdGVQb2xpY3koJ25leHRqcycsIHtcbiAgICAgICAgY3JlYXRlSFRNTDogKGlucHV0KSA9PiBpbnB1dCxcbiAgICAgICAgY3JlYXRlU2NyaXB0OiAoaW5wdXQpID0+IGlucHV0LFxuICAgICAgICBjcmVhdGVTY3JpcHRVUkw6IChpbnB1dCkgPT4gaW5wdXQsXG4gICAgICB9KSB8fCBudWxsXG4gIH1cblxuICByZXR1cm4gcG9saWN5XG59XG5cbi8qKlxuICogVW5zYWZlbHkgcHJvbW90ZSBhIHN0cmluZyB0byBhIFRydXN0ZWRTY3JpcHRVUkwsIGZhbGxpbmcgYmFjayB0byBzdHJpbmdzXG4gKiB3aGVuIFRydXN0ZWQgVHlwZXMgYXJlIG5vdCBhdmFpbGFibGUuXG4gKiBUaGlzIGlzIGEgc2VjdXJpdHktc2Vuc2l0aXZlIGZ1bmN0aW9uOyBhbnkgdXNlIG9mIHRoaXMgZnVuY3Rpb25cbiAqIG11c3QgZ28gdGhyb3VnaCBzZWN1cml0eSByZXZpZXcuIEluIHBhcnRpY3VsYXIsIGl0IG11c3QgYmUgYXNzdXJlZCB0aGF0IHRoZVxuICogcHJvdmlkZWQgc3RyaW5nIHdpbGwgbmV2ZXIgY2F1c2UgYW4gWFNTIHZ1bG5lcmFiaWxpdHkgaWYgdXNlZCBpbiBhIGNvbnRleHRcbiAqIHRoYXQgd2lsbCBjYXVzZSBhIGJyb3dzZXIgdG8gbG9hZCBhbmQgZXhlY3V0ZSBhIHJlc291cmNlLCBlLmcuIHdoZW5cbiAqIGFzc2lnbmluZyB0byBzY3JpcHQuc3JjLlxuICovXG5leHBvcnQgZnVuY3Rpb24gX191bnNhZmVDcmVhdGVUcnVzdGVkU2NyaXB0VVJMKFxuICB1cmw6IHN0cmluZ1xuKTogVHJ1c3RlZFNjcmlwdFVSTCB8IHN0cmluZyB7XG4gIHJldHVybiBnZXRQb2xpY3koKT8uY3JlYXRlU2NyaXB0VVJMKHVybCkgfHwgdXJsXG59XG4iXSwibmFtZXMiOlsiX191bnNhZmVDcmVhdGVUcnVzdGVkU2NyaXB0VVJMIiwicG9saWN5IiwiZ2V0UG9saWN5Iiwid2luZG93IiwidHJ1c3RlZFR5cGVzIiwiY3JlYXRlUG9saWN5IiwiY3JlYXRlSFRNTCIsImlucHV0IiwiY3JlYXRlU2NyaXB0IiwiY3JlYXRlU2NyaXB0VVJMIiwidXJsIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/trusted-types.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/with-router.js":
/*!**************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/with-router.js ***!
  \**************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n    enumerable: true,\n    get: function() {\n        return withRouter;\n    }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"));\nconst _router = __webpack_require__(/*! ./router */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/router.js\");\nfunction withRouter(ComposedComponent) {\n    function WithRouterWrapper(props) {\n        return /*#__PURE__*/ (0, _jsxruntime.jsx)(ComposedComponent, {\n            router: (0, _router.useRouter)(),\n            ...props\n        });\n    }\n    WithRouterWrapper.getInitialProps = ComposedComponent.getInitialProps;\n    WithRouterWrapper.origGetInitialProps = ComposedComponent.origGetInitialProps;\n    if (true) {\n        const name = ComposedComponent.displayName || ComposedComponent.name || 'Unknown';\n        WithRouterWrapper.displayName = \"withRouter(\" + name + \")\";\n    }\n    return WithRouterWrapper;\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=with-router.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jbGllbnQvd2l0aC1yb3V0ZXIuanMiLCJtYXBwaW5ncyI6Ijs7OzsyQ0FrQkE7OztlQUF3QkE7Ozs7OzRFQWxCUTtvQ0FPTjtBQVdYLFNBQVNBLFdBSXRCQyxpQkFBK0M7SUFFL0MsU0FBU0Msa0JBQWtCQyxLQUFVO1FBQ25DLHFCQUFPLHFCQUFDRixtQkFBQUE7WUFBa0JHLFFBQVFDLENBQUFBLEdBQUFBLFFBQUFBLFNBQUFBO1lBQWMsR0FBR0YsS0FBSzs7SUFDMUQ7SUFFQUQsa0JBQWtCSSxlQUFlLEdBQUdMLGtCQUFrQkssZUFBZTtJQUVuRUosa0JBQTBCSyxtQkFBbUIsR0FDN0NOLGtCQUNBTSxtQkFBbUI7SUFDckIsSUFIRUwsSUFHc0IsRUFBbUI7UUFDekMsTUFBTVMsT0FDSlYsa0JBQWtCVyxXQUFXLElBQUlYLGtCQUFrQlUsSUFBSSxJQUFJO1FBQzdEVCxrQkFBa0JVLFdBQVcsR0FBSSxnQkFBYUQsT0FBSztJQUNyRDtJQUVBLE9BQU9UO0FBQ1QiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3NyYy9jbGllbnQvd2l0aC1yb3V0ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB0eXBlIEpTWCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUge1xuICBCYXNlQ29udGV4dCxcbiAgTmV4dENvbXBvbmVudFR5cGUsXG4gIE5leHRQYWdlQ29udGV4dCxcbn0gZnJvbSAnLi4vc2hhcmVkL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgTmV4dFJvdXRlciB9IGZyb20gJy4vcm91dGVyJ1xuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAnLi9yb3V0ZXInXG5cbmV4cG9ydCB0eXBlIFdpdGhSb3V0ZXJQcm9wcyA9IHtcbiAgcm91dGVyOiBOZXh0Um91dGVyXG59XG5cbmV4cG9ydCB0eXBlIEV4Y2x1ZGVSb3V0ZXJQcm9wczxQPiA9IFBpY2s8XG4gIFAsXG4gIEV4Y2x1ZGU8a2V5b2YgUCwga2V5b2YgV2l0aFJvdXRlclByb3BzPlxuPlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB3aXRoUm91dGVyPFxuICBQIGV4dGVuZHMgV2l0aFJvdXRlclByb3BzLFxuICBDIGV4dGVuZHMgQmFzZUNvbnRleHQgPSBOZXh0UGFnZUNvbnRleHQsXG4+KFxuICBDb21wb3NlZENvbXBvbmVudDogTmV4dENvbXBvbmVudFR5cGU8QywgYW55LCBQPlxuKTogUmVhY3QuQ29tcG9uZW50VHlwZTxFeGNsdWRlUm91dGVyUHJvcHM8UD4+IHtcbiAgZnVuY3Rpb24gV2l0aFJvdXRlcldyYXBwZXIocHJvcHM6IGFueSk6IEpTWC5FbGVtZW50IHtcbiAgICByZXR1cm4gPENvbXBvc2VkQ29tcG9uZW50IHJvdXRlcj17dXNlUm91dGVyKCl9IHsuLi5wcm9wc30gLz5cbiAgfVxuXG4gIFdpdGhSb3V0ZXJXcmFwcGVyLmdldEluaXRpYWxQcm9wcyA9IENvbXBvc2VkQ29tcG9uZW50LmdldEluaXRpYWxQcm9wc1xuICAvLyBUaGlzIGlzIG5lZWRlZCB0byBhbGxvdyBjaGVja2luZyBmb3IgY3VzdG9tIGdldEluaXRpYWxQcm9wcyBpbiBfYXBwXG4gIDsoV2l0aFJvdXRlcldyYXBwZXIgYXMgYW55KS5vcmlnR2V0SW5pdGlhbFByb3BzID0gKFxuICAgIENvbXBvc2VkQ29tcG9uZW50IGFzIGFueVxuICApLm9yaWdHZXRJbml0aWFsUHJvcHNcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zdCBuYW1lID1cbiAgICAgIENvbXBvc2VkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvc2VkQ29tcG9uZW50Lm5hbWUgfHwgJ1Vua25vd24nXG4gICAgV2l0aFJvdXRlcldyYXBwZXIuZGlzcGxheU5hbWUgPSBgd2l0aFJvdXRlcigke25hbWV9KWBcbiAgfVxuXG4gIHJldHVybiBXaXRoUm91dGVyV3JhcHBlclxufVxuIl0sIm5hbWVzIjpbIndpdGhSb3V0ZXIiLCJDb21wb3NlZENvbXBvbmVudCIsIldpdGhSb3V0ZXJXcmFwcGVyIiwicHJvcHMiLCJyb3V0ZXIiLCJ1c2VSb3V0ZXIiLCJnZXRJbml0aWFsUHJvcHMiLCJvcmlnR2V0SW5pdGlhbFByb3BzIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwibmFtZSIsImRpc3BsYXlOYW1lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/with-router.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/internal/helpers.js":
/*!****************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/internal/helpers.js ***!
  \****************************************************************************************************************************************************************************************************************************************/
/***/ (function(module, exports, __webpack_require__) {
 
"use strict";
eval(__webpack_require__.ts("\n/**\n * MIT License\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\n// This file is copied from the Metro JavaScript bundler, with minor tweaks for\n// webpack 4 compatibility.\n//\n// https://github.com/facebook/metro/blob/d6b9685c730d0d63577db40f41369157f28dfa3a/packages/metro/src/lib/polyfills/require.js\nconst runtime_1 = __importDefault(__webpack_require__(/*! next/dist/compiled/react-refresh/runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-refresh/runtime.js\"));\nfunction isSafeExport(key) {\n    return (key === '__esModule' ||\n        key === '__N_SSG' ||\n        key === '__N_SSP' ||\n        // TODO: remove this key from page config instead of allow listing it\n        key === 'config');\n}\nfunction registerExportsForReactRefresh(moduleExports, moduleID) {\n    runtime_1.default.register(moduleExports, moduleID + ' %exports%');\n    if (moduleExports == null || typeof moduleExports !== 'object') {\n        // Exit if we can't iterate over exports.\n        // (This is important for legacy environments.)\n        return;\n    }\n    for (var key in moduleExports) {\n        if (isSafeExport(key)) {\n            continue;\n        }\n        try {\n            var exportValue = moduleExports[key];\n        }\n        catch (_a) {\n            // This might fail due to circular dependencies\n            continue;\n        }\n        var typeID = moduleID + ' %exports% ' + key;\n        runtime_1.default.register(exportValue, typeID);\n    }\n}\nfunction getRefreshBoundarySignature(moduleExports) {\n    var signature = [];\n    signature.push(runtime_1.default.getFamilyByType(moduleExports));\n    if (moduleExports == null || typeof moduleExports !== 'object') {\n        // Exit if we can't iterate over exports.\n        // (This is important for legacy environments.)\n        return signature;\n    }\n    for (var key in moduleExports) {\n        if (isSafeExport(key)) {\n            continue;\n        }\n        try {\n            var exportValue = moduleExports[key];\n        }\n        catch (_a) {\n            // This might fail due to circular dependencies\n            continue;\n        }\n        signature.push(key);\n        signature.push(runtime_1.default.getFamilyByType(exportValue));\n    }\n    return signature;\n}\nfunction isReactRefreshBoundary(moduleExports) {\n    if (runtime_1.default.isLikelyComponentType(moduleExports)) {\n        return true;\n    }\n    if (moduleExports == null || typeof moduleExports !== 'object') {\n        // Exit if we can't iterate over exports.\n        return false;\n    }\n    var hasExports = false;\n    var areAllExportsComponents = true;\n    for (var key in moduleExports) {\n        hasExports = true;\n        if (isSafeExport(key)) {\n            continue;\n        }\n        try {\n            var exportValue = moduleExports[key];\n        }\n        catch (_a) {\n            // This might fail due to circular dependencies\n            return false;\n        }\n        if (!runtime_1.default.isLikelyComponentType(exportValue)) {\n            areAllExportsComponents = false;\n        }\n    }\n    return hasExports && areAllExportsComponents;\n}\nfunction shouldInvalidateReactRefreshBoundary(prevSignature, nextSignature) {\n    if (prevSignature.length !== nextSignature.length) {\n        return true;\n    }\n    for (var i = 0; i < nextSignature.length; i++) {\n        if (prevSignature[i] !== nextSignature[i]) {\n            return true;\n        }\n    }\n    return false;\n}\nvar isUpdateScheduled = false;\n// This function aggregates updates from multiple modules into a single React Refresh call.\nfunction scheduleUpdate() {\n    if (isUpdateScheduled) {\n        return;\n    }\n    isUpdateScheduled = true;\n    function canApplyUpdate(status) {\n        return status === 'idle';\n    }\n    function applyUpdate() {\n        isUpdateScheduled = false;\n        try {\n            runtime_1.default.performReactRefresh();\n        }\n        catch (err) {\n            console.warn('Warning: Failed to re-render. We will retry on the next Fast Refresh event.\\n' +\n                err);\n        }\n    }\n    if (canApplyUpdate(module.hot.status())) {\n        // Apply update on the next tick.\n        Promise.resolve().then(() => {\n            applyUpdate();\n        });\n        return;\n    }\n    const statusHandler = (status) => {\n        if (canApplyUpdate(status)) {\n            module.hot.removeStatusHandler(statusHandler);\n            applyUpdate();\n        }\n    };\n    // Apply update once the HMR runtime's status is idle.\n    module.hot.addStatusHandler(statusHandler);\n}\n// Needs to be compatible with IE11\nexports[\"default\"] = {\n    registerExportsForReactRefresh: registerExportsForReactRefresh,\n    isReactRefreshBoundary: isReactRefreshBoundary,\n    shouldInvalidateReactRefreshBoundary: shouldInvalidateReactRefreshBoundary,\n    getRefreshBoundarySignature: getRefreshBoundarySignature,\n    scheduleUpdate: scheduleUpdate,\n};\n//# sourceMappingURL=helpers.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9AbmV4dC9yZWFjdC1yZWZyZXNoLXV0aWxzL2Rpc3QvaW50ZXJuYWwvaGVscGVycy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxtQkFBTyxDQUFDLDRRQUEwQztBQUNwRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiwwQkFBMEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixVQUFVO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksVUFBVTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksVUFBVTtBQUNkO0FBQ0E7QUFDQSxrQkFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNC43X0BiYWJlbCtjb3JlQDcuMjguM19Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHBsYXl3cmlnaHQrdGVzdEAxLjU1LjBfcmVhY3QtZF80N2ZmMzgxM2Q3OTA1NjZkZjI1NGEyMTYzNTUwYzJkNS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL0BuZXh0L3JlYWN0LXJlZnJlc2gtdXRpbHMvZGlzdC9pbnRlcm5hbC9oZWxwZXJzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXG4gKiBNSVQgTGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIFRoaXMgZmlsZSBpcyBjb3BpZWQgZnJvbSB0aGUgTWV0cm8gSmF2YVNjcmlwdCBidW5kbGVyLCB3aXRoIG1pbm9yIHR3ZWFrcyBmb3Jcbi8vIHdlYnBhY2sgNCBjb21wYXRpYmlsaXR5LlxuLy9cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9tZXRyby9ibG9iL2Q2Yjk2ODVjNzMwZDBkNjM1NzdkYjQwZjQxMzY5MTU3ZjI4ZGZhM2EvcGFja2FnZXMvbWV0cm8vc3JjL2xpYi9wb2x5ZmlsbHMvcmVxdWlyZS5qc1xuY29uc3QgcnVudGltZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtcmVmcmVzaC9ydW50aW1lXCIpKTtcbmZ1bmN0aW9uIGlzU2FmZUV4cG9ydChrZXkpIHtcbiAgICByZXR1cm4gKGtleSA9PT0gJ19fZXNNb2R1bGUnIHx8XG4gICAgICAgIGtleSA9PT0gJ19fTl9TU0cnIHx8XG4gICAgICAgIGtleSA9PT0gJ19fTl9TU1AnIHx8XG4gICAgICAgIC8vIFRPRE86IHJlbW92ZSB0aGlzIGtleSBmcm9tIHBhZ2UgY29uZmlnIGluc3RlYWQgb2YgYWxsb3cgbGlzdGluZyBpdFxuICAgICAgICBrZXkgPT09ICdjb25maWcnKTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyRXhwb3J0c0ZvclJlYWN0UmVmcmVzaChtb2R1bGVFeHBvcnRzLCBtb2R1bGVJRCkge1xuICAgIHJ1bnRpbWVfMS5kZWZhdWx0LnJlZ2lzdGVyKG1vZHVsZUV4cG9ydHMsIG1vZHVsZUlEICsgJyAlZXhwb3J0cyUnKTtcbiAgICBpZiAobW9kdWxlRXhwb3J0cyA9PSBudWxsIHx8IHR5cGVvZiBtb2R1bGVFeHBvcnRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBFeGl0IGlmIHdlIGNhbid0IGl0ZXJhdGUgb3ZlciBleHBvcnRzLlxuICAgICAgICAvLyAoVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGxlZ2FjeSBlbnZpcm9ubWVudHMuKVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBpbiBtb2R1bGVFeHBvcnRzKSB7XG4gICAgICAgIGlmIChpc1NhZmVFeHBvcnQoa2V5KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBleHBvcnRWYWx1ZSA9IG1vZHVsZUV4cG9ydHNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQgZmFpbCBkdWUgdG8gY2lyY3VsYXIgZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdHlwZUlEID0gbW9kdWxlSUQgKyAnICVleHBvcnRzJSAnICsga2V5O1xuICAgICAgICBydW50aW1lXzEuZGVmYXVsdC5yZWdpc3RlcihleHBvcnRWYWx1ZSwgdHlwZUlEKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRSZWZyZXNoQm91bmRhcnlTaWduYXR1cmUobW9kdWxlRXhwb3J0cykge1xuICAgIHZhciBzaWduYXR1cmUgPSBbXTtcbiAgICBzaWduYXR1cmUucHVzaChydW50aW1lXzEuZGVmYXVsdC5nZXRGYW1pbHlCeVR5cGUobW9kdWxlRXhwb3J0cykpO1xuICAgIGlmIChtb2R1bGVFeHBvcnRzID09IG51bGwgfHwgdHlwZW9mIG1vZHVsZUV4cG9ydHMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIEV4aXQgaWYgd2UgY2FuJ3QgaXRlcmF0ZSBvdmVyIGV4cG9ydHMuXG4gICAgICAgIC8vIChUaGlzIGlzIGltcG9ydGFudCBmb3IgbGVnYWN5IGVudmlyb25tZW50cy4pXG4gICAgICAgIHJldHVybiBzaWduYXR1cmU7XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBpbiBtb2R1bGVFeHBvcnRzKSB7XG4gICAgICAgIGlmIChpc1NhZmVFeHBvcnQoa2V5KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBleHBvcnRWYWx1ZSA9IG1vZHVsZUV4cG9ydHNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2EpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQgZmFpbCBkdWUgdG8gY2lyY3VsYXIgZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBzaWduYXR1cmUucHVzaChrZXkpO1xuICAgICAgICBzaWduYXR1cmUucHVzaChydW50aW1lXzEuZGVmYXVsdC5nZXRGYW1pbHlCeVR5cGUoZXhwb3J0VmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpZ25hdHVyZTtcbn1cbmZ1bmN0aW9uIGlzUmVhY3RSZWZyZXNoQm91bmRhcnkobW9kdWxlRXhwb3J0cykge1xuICAgIGlmIChydW50aW1lXzEuZGVmYXVsdC5pc0xpa2VseUNvbXBvbmVudFR5cGUobW9kdWxlRXhwb3J0cykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChtb2R1bGVFeHBvcnRzID09IG51bGwgfHwgdHlwZW9mIG1vZHVsZUV4cG9ydHMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIEV4aXQgaWYgd2UgY2FuJ3QgaXRlcmF0ZSBvdmVyIGV4cG9ydHMuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIGhhc0V4cG9ydHMgPSBmYWxzZTtcbiAgICB2YXIgYXJlQWxsRXhwb3J0c0NvbXBvbmVudHMgPSB0cnVlO1xuICAgIGZvciAodmFyIGtleSBpbiBtb2R1bGVFeHBvcnRzKSB7XG4gICAgICAgIGhhc0V4cG9ydHMgPSB0cnVlO1xuICAgICAgICBpZiAoaXNTYWZlRXhwb3J0KGtleSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgZXhwb3J0VmFsdWUgPSBtb2R1bGVFeHBvcnRzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGZhaWwgZHVlIHRvIGNpcmN1bGFyIGRlcGVuZGVuY2llc1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcnVudGltZV8xLmRlZmF1bHQuaXNMaWtlbHlDb21wb25lbnRUeXBlKGV4cG9ydFZhbHVlKSkge1xuICAgICAgICAgICAgYXJlQWxsRXhwb3J0c0NvbXBvbmVudHMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGFzRXhwb3J0cyAmJiBhcmVBbGxFeHBvcnRzQ29tcG9uZW50cztcbn1cbmZ1bmN0aW9uIHNob3VsZEludmFsaWRhdGVSZWFjdFJlZnJlc2hCb3VuZGFyeShwcmV2U2lnbmF0dXJlLCBuZXh0U2lnbmF0dXJlKSB7XG4gICAgaWYgKHByZXZTaWduYXR1cmUubGVuZ3RoICE9PSBuZXh0U2lnbmF0dXJlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXh0U2lnbmF0dXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwcmV2U2lnbmF0dXJlW2ldICE9PSBuZXh0U2lnbmF0dXJlW2ldKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG52YXIgaXNVcGRhdGVTY2hlZHVsZWQgPSBmYWxzZTtcbi8vIFRoaXMgZnVuY3Rpb24gYWdncmVnYXRlcyB1cGRhdGVzIGZyb20gbXVsdGlwbGUgbW9kdWxlcyBpbnRvIGEgc2luZ2xlIFJlYWN0IFJlZnJlc2ggY2FsbC5cbmZ1bmN0aW9uIHNjaGVkdWxlVXBkYXRlKCkge1xuICAgIGlmIChpc1VwZGF0ZVNjaGVkdWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzVXBkYXRlU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBjYW5BcHBseVVwZGF0ZShzdGF0dXMpIHtcbiAgICAgICAgcmV0dXJuIHN0YXR1cyA9PT0gJ2lkbGUnO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhcHBseVVwZGF0ZSgpIHtcbiAgICAgICAgaXNVcGRhdGVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJ1bnRpbWVfMS5kZWZhdWx0LnBlcmZvcm1SZWFjdFJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6IEZhaWxlZCB0byByZS1yZW5kZXIuIFdlIHdpbGwgcmV0cnkgb24gdGhlIG5leHQgRmFzdCBSZWZyZXNoIGV2ZW50LlxcbicgK1xuICAgICAgICAgICAgICAgIGVycik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNhbkFwcGx5VXBkYXRlKG1vZHVsZS5ob3Quc3RhdHVzKCkpKSB7XG4gICAgICAgIC8vIEFwcGx5IHVwZGF0ZSBvbiB0aGUgbmV4dCB0aWNrLlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGFwcGx5VXBkYXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXR1c0hhbmRsZXIgPSAoc3RhdHVzKSA9PiB7XG4gICAgICAgIGlmIChjYW5BcHBseVVwZGF0ZShzdGF0dXMpKSB7XG4gICAgICAgICAgICBtb2R1bGUuaG90LnJlbW92ZVN0YXR1c0hhbmRsZXIoc3RhdHVzSGFuZGxlcik7XG4gICAgICAgICAgICBhcHBseVVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvLyBBcHBseSB1cGRhdGUgb25jZSB0aGUgSE1SIHJ1bnRpbWUncyBzdGF0dXMgaXMgaWRsZS5cbiAgICBtb2R1bGUuaG90LmFkZFN0YXR1c0hhbmRsZXIoc3RhdHVzSGFuZGxlcik7XG59XG4vLyBOZWVkcyB0byBiZSBjb21wYXRpYmxlIHdpdGggSUUxMVxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICAgIHJlZ2lzdGVyRXhwb3J0c0ZvclJlYWN0UmVmcmVzaDogcmVnaXN0ZXJFeHBvcnRzRm9yUmVhY3RSZWZyZXNoLFxuICAgIGlzUmVhY3RSZWZyZXNoQm91bmRhcnk6IGlzUmVhY3RSZWZyZXNoQm91bmRhcnksXG4gICAgc2hvdWxkSW52YWxpZGF0ZVJlYWN0UmVmcmVzaEJvdW5kYXJ5OiBzaG91bGRJbnZhbGlkYXRlUmVhY3RSZWZyZXNoQm91bmRhcnksXG4gICAgZ2V0UmVmcmVzaEJvdW5kYXJ5U2lnbmF0dXJlOiBnZXRSZWZyZXNoQm91bmRhcnlTaWduYXR1cmUsXG4gICAgc2NoZWR1bGVVcGRhdGU6IHNjaGVkdWxlVXBkYXRlLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlbHBlcnMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/internal/helpers.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js":
/*!*******************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js ***!
  \*******************************************************************************************************************************************************************************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
 
"use strict";
eval(__webpack_require__.ts("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst runtime_1 = __importDefault(__webpack_require__(/*! next/dist/compiled/react-refresh/runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-refresh/runtime.js\"));\nconst helpers_1 = __importDefault(__webpack_require__(/*! ./internal/helpers */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/internal/helpers.js\"));\n// Hook into ReactDOM initialization\nruntime_1.default.injectIntoGlobalHook(self);\n// Register global helpers\nself.$RefreshHelpers$ = helpers_1.default;\n// Register a helper for module execution interception\nself.$RefreshInterceptModuleExecution$ = function (webpackModuleId) {\n    var prevRefreshReg = self.$RefreshReg$;\n    var prevRefreshSig = self.$RefreshSig$;\n    self.$RefreshReg$ = function (type, id) {\n        runtime_1.default.register(type, webpackModuleId + ' ' + id);\n    };\n    self.$RefreshSig$ = runtime_1.default.createSignatureFunctionForTransform;\n    // Modeled after `useEffect` cleanup pattern:\n    // https://react.dev/learn/synchronizing-with-effects#step-3-add-cleanup-if-needed\n    return function () {\n        self.$RefreshReg$ = prevRefreshReg;\n        self.$RefreshSig$ = prevRefreshSig;\n    };\n};\n//# sourceMappingURL=runtime.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9AbmV4dC9yZWFjdC1yZWZyZXNoLXV0aWxzL2Rpc3QvcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0EsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELGtDQUFrQyxtQkFBTyxDQUFDLDRRQUEwQztBQUNwRixrQ0FBa0MsbUJBQU8sQ0FBQyxnUkFBb0I7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9AbmV4dC9yZWFjdC1yZWZyZXNoLXV0aWxzL2Rpc3QvcnVudGltZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHJ1bnRpbWVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LXJlZnJlc2gvcnVudGltZVwiKSk7XG5jb25zdCBoZWxwZXJzXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vaW50ZXJuYWwvaGVscGVyc1wiKSk7XG4vLyBIb29rIGludG8gUmVhY3RET00gaW5pdGlhbGl6YXRpb25cbnJ1bnRpbWVfMS5kZWZhdWx0LmluamVjdEludG9HbG9iYWxIb29rKHNlbGYpO1xuLy8gUmVnaXN0ZXIgZ2xvYmFsIGhlbHBlcnNcbnNlbGYuJFJlZnJlc2hIZWxwZXJzJCA9IGhlbHBlcnNfMS5kZWZhdWx0O1xuLy8gUmVnaXN0ZXIgYSBoZWxwZXIgZm9yIG1vZHVsZSBleGVjdXRpb24gaW50ZXJjZXB0aW9uXG5zZWxmLiRSZWZyZXNoSW50ZXJjZXB0TW9kdWxlRXhlY3V0aW9uJCA9IGZ1bmN0aW9uICh3ZWJwYWNrTW9kdWxlSWQpIHtcbiAgICB2YXIgcHJldlJlZnJlc2hSZWcgPSBzZWxmLiRSZWZyZXNoUmVnJDtcbiAgICB2YXIgcHJldlJlZnJlc2hTaWcgPSBzZWxmLiRSZWZyZXNoU2lnJDtcbiAgICBzZWxmLiRSZWZyZXNoUmVnJCA9IGZ1bmN0aW9uICh0eXBlLCBpZCkge1xuICAgICAgICBydW50aW1lXzEuZGVmYXVsdC5yZWdpc3Rlcih0eXBlLCB3ZWJwYWNrTW9kdWxlSWQgKyAnICcgKyBpZCk7XG4gICAgfTtcbiAgICBzZWxmLiRSZWZyZXNoU2lnJCA9IHJ1bnRpbWVfMS5kZWZhdWx0LmNyZWF0ZVNpZ25hdHVyZUZ1bmN0aW9uRm9yVHJhbnNmb3JtO1xuICAgIC8vIE1vZGVsZWQgYWZ0ZXIgYHVzZUVmZmVjdGAgY2xlYW51cCBwYXR0ZXJuOlxuICAgIC8vIGh0dHBzOi8vcmVhY3QuZGV2L2xlYXJuL3N5bmNocm9uaXppbmctd2l0aC1lZmZlY3RzI3N0ZXAtMy1hZGQtY2xlYW51cC1pZi1uZWVkZWRcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLiRSZWZyZXNoUmVnJCA9IHByZXZSZWZyZXNoUmVnO1xuICAgICAgICBzZWxmLiRSZWZyZXNoU2lnJCA9IHByZXZSZWZyZXNoU2lnO1xuICAgIH07XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cnVudGltZS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/cookie/index.js":
/*!*****************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/cookie/index.js ***!
  \*****************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;\n/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */r.parse=parse;r.serialize=serialize;var i=decodeURIComponent;var t=encodeURIComponent;var a=/; */;var n=/^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;function parse(e,r){if(typeof e!==\"string\"){throw new TypeError(\"argument str must be a string\")}var t={};var n=r||{};var o=e.split(a);var s=n.decode||i;for(var p=0;p<o.length;p++){var f=o[p];var u=f.indexOf(\"=\");if(u<0){continue}var v=f.substr(0,u).trim();var c=f.substr(++u,f.length).trim();if('\"'==c[0]){c=c.slice(1,-1)}if(undefined==t[v]){t[v]=tryDecode(c,s)}}return t}function serialize(e,r,i){var a=i||{};var o=a.encode||t;if(typeof o!==\"function\"){throw new TypeError(\"option encode is invalid\")}if(!n.test(e)){throw new TypeError(\"argument name is invalid\")}var s=o(r);if(s&&!n.test(s)){throw new TypeError(\"argument val is invalid\")}var p=e+\"=\"+s;if(null!=a.maxAge){var f=a.maxAge-0;if(isNaN(f)||!isFinite(f)){throw new TypeError(\"option maxAge is invalid\")}p+=\"; Max-Age=\"+Math.floor(f)}if(a.domain){if(!n.test(a.domain)){throw new TypeError(\"option domain is invalid\")}p+=\"; Domain=\"+a.domain}if(a.path){if(!n.test(a.path)){throw new TypeError(\"option path is invalid\")}p+=\"; Path=\"+a.path}if(a.expires){if(typeof a.expires.toUTCString!==\"function\"){throw new TypeError(\"option expires is invalid\")}p+=\"; Expires=\"+a.expires.toUTCString()}if(a.httpOnly){p+=\"; HttpOnly\"}if(a.secure){p+=\"; Secure\"}if(a.sameSite){var u=typeof a.sameSite===\"string\"?a.sameSite.toLowerCase():a.sameSite;switch(u){case true:p+=\"; SameSite=Strict\";break;case\"lax\":p+=\"; SameSite=Lax\";break;case\"strict\":p+=\"; SameSite=Strict\";break;case\"none\":p+=\"; SameSite=None\";break;default:throw new TypeError(\"option sameSite is invalid\")}}return p}function tryDecode(e,r){try{return r(e)}catch(r){return e}}})();module.exports=e})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9jb29raWUvaW5kZXguanMiLCJtYXBwaW5ncyI6IjtBQUFBLE1BQU0sYUFBYSxtRUFBbUUsU0FBUyxLQUFLLFNBQVMsTUFBTTtBQUNuSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHNCQUFzQix5QkFBeUIseUJBQXlCLFNBQVMsR0FBRyw4Q0FBOEMsb0JBQW9CLHdCQUF3QixxREFBcUQsU0FBUyxZQUFZLGlCQUFpQixrQkFBa0IsWUFBWSxXQUFXLEtBQUssV0FBVyxxQkFBcUIsUUFBUSxTQUFTLDJCQUEyQixvQ0FBb0MsY0FBYyxnQkFBZ0Isb0JBQW9CLHFCQUFxQixTQUFTLDBCQUEwQixZQUFZLGtCQUFrQiwwQkFBMEIsZ0RBQWdELGVBQWUsZ0RBQWdELFdBQVcsa0JBQWtCLCtDQUErQyxjQUFjLG1CQUFtQixpQkFBaUIsMkJBQTJCLGdEQUFnRCxNQUFNLHdCQUF3QixhQUFhLHNCQUFzQixnREFBZ0QsTUFBTSxrQkFBa0IsV0FBVyxvQkFBb0IsOENBQThDLE1BQU0sY0FBYyxjQUFjLDhDQUE4QyxpREFBaUQsTUFBTSxrQ0FBa0MsZUFBZSxNQUFNLFVBQVUsYUFBYSxNQUFNLFFBQVEsZUFBZSx1RUFBdUUsVUFBVSxnQkFBZ0IsaUJBQWlCLE1BQU0sZ0JBQWdCLGNBQWMsTUFBTSxtQkFBbUIsaUJBQWlCLE1BQU0saUJBQWlCLGVBQWUsTUFBTSwyREFBMkQsU0FBUyx3QkFBd0IsSUFBSSxZQUFZLFNBQVMsV0FBVyxJQUFJLGlCQUFpQiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9jb29raWUvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiKCgpPT57XCJ1c2Ugc3RyaWN0XCI7aWYodHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18hPT1cInVuZGVmaW5lZFwiKV9fbmNjd3Bja19yZXF1aXJlX18uYWI9X19kaXJuYW1lK1wiL1wiO3ZhciBlPXt9OygoKT0+e3ZhciByPWU7XG4vKiFcbiAqIGNvb2tpZVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBSb21hbiBTaHR5bG1hblxuICogQ29weXJpZ2h0KGMpIDIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovci5wYXJzZT1wYXJzZTtyLnNlcmlhbGl6ZT1zZXJpYWxpemU7dmFyIGk9ZGVjb2RlVVJJQ29tcG9uZW50O3ZhciB0PWVuY29kZVVSSUNvbXBvbmVudDt2YXIgYT0vOyAqLzt2YXIgbj0vXltcXHUwMDA5XFx1MDAyMC1cXHUwMDdlXFx1MDA4MC1cXHUwMGZmXSskLztmdW5jdGlvbiBwYXJzZShlLHIpe2lmKHR5cGVvZiBlIT09XCJzdHJpbmdcIil7dGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IHN0ciBtdXN0IGJlIGEgc3RyaW5nXCIpfXZhciB0PXt9O3ZhciBuPXJ8fHt9O3ZhciBvPWUuc3BsaXQoYSk7dmFyIHM9bi5kZWNvZGV8fGk7Zm9yKHZhciBwPTA7cDxvLmxlbmd0aDtwKyspe3ZhciBmPW9bcF07dmFyIHU9Zi5pbmRleE9mKFwiPVwiKTtpZih1PDApe2NvbnRpbnVlfXZhciB2PWYuc3Vic3RyKDAsdSkudHJpbSgpO3ZhciBjPWYuc3Vic3RyKCsrdSxmLmxlbmd0aCkudHJpbSgpO2lmKCdcIic9PWNbMF0pe2M9Yy5zbGljZSgxLC0xKX1pZih1bmRlZmluZWQ9PXRbdl0pe3Rbdl09dHJ5RGVjb2RlKGMscyl9fXJldHVybiB0fWZ1bmN0aW9uIHNlcmlhbGl6ZShlLHIsaSl7dmFyIGE9aXx8e307dmFyIG89YS5lbmNvZGV8fHQ7aWYodHlwZW9mIG8hPT1cImZ1bmN0aW9uXCIpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJvcHRpb24gZW5jb2RlIGlzIGludmFsaWRcIil9aWYoIW4udGVzdChlKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG5hbWUgaXMgaW52YWxpZFwiKX12YXIgcz1vKHIpO2lmKHMmJiFuLnRlc3Qocykpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCB2YWwgaXMgaW52YWxpZFwiKX12YXIgcD1lK1wiPVwiK3M7aWYobnVsbCE9YS5tYXhBZ2Upe3ZhciBmPWEubWF4QWdlLTA7aWYoaXNOYU4oZil8fCFpc0Zpbml0ZShmKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbiBtYXhBZ2UgaXMgaW52YWxpZFwiKX1wKz1cIjsgTWF4LUFnZT1cIitNYXRoLmZsb29yKGYpfWlmKGEuZG9tYWluKXtpZighbi50ZXN0KGEuZG9tYWluKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbiBkb21haW4gaXMgaW52YWxpZFwiKX1wKz1cIjsgRG9tYWluPVwiK2EuZG9tYWlufWlmKGEucGF0aCl7aWYoIW4udGVzdChhLnBhdGgpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwib3B0aW9uIHBhdGggaXMgaW52YWxpZFwiKX1wKz1cIjsgUGF0aD1cIithLnBhdGh9aWYoYS5leHBpcmVzKXtpZih0eXBlb2YgYS5leHBpcmVzLnRvVVRDU3RyaW5nIT09XCJmdW5jdGlvblwiKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwib3B0aW9uIGV4cGlyZXMgaXMgaW52YWxpZFwiKX1wKz1cIjsgRXhwaXJlcz1cIithLmV4cGlyZXMudG9VVENTdHJpbmcoKX1pZihhLmh0dHBPbmx5KXtwKz1cIjsgSHR0cE9ubHlcIn1pZihhLnNlY3VyZSl7cCs9XCI7IFNlY3VyZVwifWlmKGEuc2FtZVNpdGUpe3ZhciB1PXR5cGVvZiBhLnNhbWVTaXRlPT09XCJzdHJpbmdcIj9hLnNhbWVTaXRlLnRvTG93ZXJDYXNlKCk6YS5zYW1lU2l0ZTtzd2l0Y2godSl7Y2FzZSB0cnVlOnArPVwiOyBTYW1lU2l0ZT1TdHJpY3RcIjticmVhaztjYXNlXCJsYXhcIjpwKz1cIjsgU2FtZVNpdGU9TGF4XCI7YnJlYWs7Y2FzZVwic3RyaWN0XCI6cCs9XCI7IFNhbWVTaXRlPVN0cmljdFwiO2JyZWFrO2Nhc2VcIm5vbmVcIjpwKz1cIjsgU2FtZVNpdGU9Tm9uZVwiO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcihcIm9wdGlvbiBzYW1lU2l0ZSBpcyBpbnZhbGlkXCIpfX1yZXR1cm4gcH1mdW5jdGlvbiB0cnlEZWNvZGUoZSxyKXt0cnl7cmV0dXJuIHIoZSl9Y2F0Y2gocil7cmV0dXJuIGV9fX0pKCk7bW9kdWxlLmV4cG9ydHM9ZX0pKCk7Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/cookie/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/next-devtools/index.js":
/*!************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/next-devtools/index.js ***!
  \************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
eval(__webpack_require__.ts("/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js\");\nvar __webpack_modules__={\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/components/tooltip.css\":function(e,n,t){\"use strict\";t.d(n,{Z:()=>l});var r=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=t.n(r),a=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=t.n(a)()(o());i.push([e.id,`.tooltip-wrapper {\n  position: relative;\n  display: inline-block;\n  line-height: 1;\n}\n\n.tooltip {\n  position: relative;\n  padding: 6px 12px;\n  border-radius: 8px;\n  font-size: 14px;\n  line-height: 1.4;\n  pointer-events: none;\n}\n\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-style: solid;\n  border-width: var(--arrow-size, 6px);\n  border-color: transparent;\n}\n\n.tooltip-arrow--top {\n  border-width: var(--arrow-size, 6px) var(--arrow-size, 6px) 0\n    var(--arrow-size, 6px);\n  border-top-color: var(--tooltip-bg-color);\n  bottom: 0;\n  transform: translateY(100%);\n}\n\n.tooltip-arrow--bottom {\n  border-width: 0 var(--arrow-size, 6px) var(--arrow-size, 6px)\n    var(--arrow-size, 6px);\n  border-bottom-color: var(--tooltip-bg-color);\n  top: 0;\n  transform: translateY(-100%);\n}\n\n.tooltip-arrow--left {\n  border-width: var(--arrow-size, 6px) 0 var(--arrow-size, 6px)\n    var(--arrow-size, 6px);\n  border-left-color: var(--tooltip-bg-color);\n  right: 0;\n  transform: translateX(100%);\n}\n\n.tooltip-arrow--right {\n  border-width: var(--arrow-size, 6px) var(--arrow-size, 6px)\n    var(--arrow-size, 6px) 0;\n  border-right-color: var(--tooltip-bg-color);\n  left: 0;\n  transform: translateX(-100%);\n}\n\n.tooltip-positioner {\n  z-index: var(--top-z-index);\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/components/tooltip.css\"],names:[],mappings:\"AAAA;EACE,kBAAkB;EAClB,qBAAqB;EACrB,cAAc;AAChB;;AAEA;EACE,kBAAkB;EAClB,iBAAiB;EACjB,kBAAkB;EAClB,eAAe;EACf,gBAAgB;EAChB,oBAAoB;AACtB;;AAEA;EACE,kBAAkB;EAClB,QAAQ;EACR,SAAS;EACT,mBAAmB;EACnB,oCAAoC;EACpC,yBAAyB;AAC3B;;AAEA;EACE;0BACwB;EACxB,yCAAyC;EACzC,SAAS;EACT,2BAA2B;AAC7B;;AAEA;EACE;0BACwB;EACxB,4CAA4C;EAC5C,MAAM;EACN,4BAA4B;AAC9B;;AAEA;EACE;0BACwB;EACxB,0CAA0C;EAC1C,QAAQ;EACR,2BAA2B;AAC7B;;AAEA;EACE;4BAC0B;EAC1B,2CAA2C;EAC3C,OAAO;EACP,4BAA4B;AAC9B;;AAEA;EACE,2BAA2B;AAC7B\",sourcesContent:[\".tooltip-wrapper {\\n  position: relative;\\n  display: inline-block;\\n  line-height: 1;\\n}\\n\\n.tooltip {\\n  position: relative;\\n  padding: 6px 12px;\\n  border-radius: 8px;\\n  font-size: 14px;\\n  line-height: 1.4;\\n  pointer-events: none;\\n}\\n\\n.tooltip-arrow {\\n  position: absolute;\\n  width: 0;\\n  height: 0;\\n  border-style: solid;\\n  border-width: var(--arrow-size, 6px);\\n  border-color: transparent;\\n}\\n\\n.tooltip-arrow--top {\\n  border-width: var(--arrow-size, 6px) var(--arrow-size, 6px) 0\\n    var(--arrow-size, 6px);\\n  border-top-color: var(--tooltip-bg-color);\\n  bottom: 0;\\n  transform: translateY(100%);\\n}\\n\\n.tooltip-arrow--bottom {\\n  border-width: 0 var(--arrow-size, 6px) var(--arrow-size, 6px)\\n    var(--arrow-size, 6px);\\n  border-bottom-color: var(--tooltip-bg-color);\\n  top: 0;\\n  transform: translateY(-100%);\\n}\\n\\n.tooltip-arrow--left {\\n  border-width: var(--arrow-size, 6px) 0 var(--arrow-size, 6px)\\n    var(--arrow-size, 6px);\\n  border-left-color: var(--tooltip-bg-color);\\n  right: 0;\\n  transform: translateX(100%);\\n}\\n\\n.tooltip-arrow--right {\\n  border-width: var(--arrow-size, 6px) var(--arrow-size, 6px)\\n    var(--arrow-size, 6px) 0;\\n  border-right-color: var(--tooltip-bg-color);\\n  left: 0;\\n  transform: translateX(-100%);\\n}\\n\\n.tooltip-positioner {\\n  z-index: var(--top-z-index);\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/devtools-panel/resize/resize-handle.css\":function(e,n,t){\"use strict\";t.d(n,{Z:()=>l});var r=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=t.n(r),a=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=t.n(a)()(o());i.push([e.id,`.resize-container {\n  position: absolute;\n  /* todo: better z index */\n  z-index: 10;\n  /* todo: is this needed */\n  background: transparent;\n}\n\n.resize-line {\n  position: absolute;\n  /* todo smarter z index */\n  z-index: -1;\n  pointer-events: none;\n  /* a normal exit animation curve- at this point the exit animation is */\n  /* immediately responsive so we don't need a bespoke curve */\n  transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n  /* todo: better var? */\n  border: 1px solid var(--color-gray-100);\n}\n\n/* start really fast because we start super hidden initially behind the panel, otherwise feels like an unintended animation delay */\n.resize-container:hover ~ .resize-line {\n  transition: transform 0.2s cubic-bezier(0.05, 0.9, 0.2, 1); /* Fast start for animate in */\n}\n\n.resize-container.right,\n.resize-container.left {\n  top: 0;\n  height: 100%;\n  width: 25px;\n  cursor: ew-resize;\n}\n\n/* todo: don't hard code all these values/use vars */\n\n.resize-container.bottom,\n.resize-container.top {\n  left: 0;\n  width: 100%;\n  height: 25px;\n  cursor: ns-resize;\n}\n\n.resize-container.top {\n  top: -12px;\n}\n.resize-container.bottom {\n  bottom: -12px;\n}\n.resize-container.left {\n  left: -12px;\n}\n.resize-container.right {\n  right: -12px;\n}\n\n.resize-container.top-left,\n.resize-container.top-right,\n.resize-container.bottom-left,\n.resize-container.bottom-right {\n  width: 32px;\n  height: 32px;\n  z-index: 15;\n}\n\n.resize-container.top-left {\n  top: -16px;\n  left: -16px;\n  cursor: nwse-resize;\n}\n.resize-container.top-right {\n  top: -16px;\n  right: -16px;\n  cursor: nesw-resize;\n}\n.resize-container.bottom-left {\n  bottom: -16px;\n  left: -16px;\n  cursor: nesw-resize;\n}\n.resize-container.bottom-right {\n  bottom: -16px;\n  right: -16px;\n  cursor: nwse-resize;\n}\n\n.resize-line.top,\n.resize-line.bottom {\n  height: 28px;\n  width: 100%;\n  background-color: var(--color-background-100);\n}\n\n.resize-line.left,\n.resize-line.right {\n  width: 28px;\n  height: 100%;\n  background-color: var(--color-background-100);\n}\n\n.resize-line.top {\n  top: -12px;\n  left: calc(-1 * var(--border-left, 2px));\n  width: calc(100% + var(--border-horizontal, 4px));\n  border-radius: var(--rounded-md) var(--rounded-md) 0 0;\n  transform: translateY(28px);\n}\n\n.resize-line.bottom {\n  bottom: -12px;\n  left: calc(-1 * var(--border-left, 2px));\n  width: calc(100% + var(--border-horizontal, 4px));\n  border-radius: 0 0 var(--rounded-md) var(--rounded-md);\n  transform: translateY(-28px);\n}\n\n.resize-line.left {\n  top: calc(-1 * var(--border-top, 2px));\n  left: -12px;\n  height: calc(100% + var(--border-vertical, 4px));\n  border-radius: var(--rounded-md) 0 0 var(--rounded-md);\n  transform: translateX(28px);\n}\n\n.resize-line.right {\n  top: calc(-1 * var(--border-top, 2px));\n  right: -12px;\n  height: calc(100% + var(--border-vertical, 4px));\n  border-radius: 0 var(--rounded-md) var(--rounded-md) 0;\n  transform: translateX(-28px);\n}\n\n.resize-container.right:hover ~ .resize-line.right,\n.resize-container.left:hover ~ .resize-line.left,\n.resize-line.right.dragging,\n.resize-line.left.dragging {\n  transform: translateX(0);\n}\n\n.resize-container.bottom:hover ~ .resize-line.bottom,\n.resize-container.top:hover ~ .resize-line.top,\n.resize-line.bottom.dragging,\n.resize-line.top.dragging {\n  transform: translateY(0);\n}\n\n/* make sure that we don't show multiple handles at once\n * we should only ever show the currently resizing handle\n * regardless of hover state \n */\n.resize-container.no-hover.right:hover ~ .resize-line.right {\n  transform: translateX(-28px);\n}\n.resize-container.no-hover.left:hover ~ .resize-line.left {\n  transform: translateX(28px);\n}\n.resize-container.no-hover.bottom:hover ~ .resize-line.bottom {\n  transform: translateY(-28px);\n}\n.resize-container.no-hover.top:hover ~ .resize-line.top {\n  transform: translateY(28px);\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/components/devtools-panel/resize/resize-handle.css\"],names:[],mappings:\"AAAA;EACE,kBAAkB;EAClB,yBAAyB;EACzB,WAAW;EACX,yBAAyB;EACzB,uBAAuB;AACzB;;AAEA;EACE,kBAAkB;EAClB,yBAAyB;EACzB,WAAW;EACX,oBAAoB;EACpB,uEAAuE;EACvE,4DAA4D;EAC5D,uDAAuD;EACvD,sBAAsB;EACtB,uCAAuC;AACzC;;AAEA,mIAAmI;AACnI;EACE,0DAA0D,EAAE,8BAA8B;AAC5F;;AAEA;;EAEE,MAAM;EACN,YAAY;EACZ,WAAW;EACX,iBAAiB;AACnB;;AAEA,oDAAoD;;AAEpD;;EAEE,OAAO;EACP,WAAW;EACX,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,UAAU;AACZ;AACA;EACE,aAAa;AACf;AACA;EACE,WAAW;AACb;AACA;EACE,YAAY;AACd;;AAEA;;;;EAIE,WAAW;EACX,YAAY;EACZ,WAAW;AACb;;AAEA;EACE,UAAU;EACV,WAAW;EACX,mBAAmB;AACrB;AACA;EACE,UAAU;EACV,YAAY;EACZ,mBAAmB;AACrB;AACA;EACE,aAAa;EACb,WAAW;EACX,mBAAmB;AACrB;AACA;EACE,aAAa;EACb,YAAY;EACZ,mBAAmB;AACrB;;AAEA;;EAEE,YAAY;EACZ,WAAW;EACX,6CAA6C;AAC/C;;AAEA;;EAEE,WAAW;EACX,YAAY;EACZ,6CAA6C;AAC/C;;AAEA;EACE,UAAU;EACV,wCAAwC;EACxC,iDAAiD;EACjD,sDAAsD;EACtD,2BAA2B;AAC7B;;AAEA;EACE,aAAa;EACb,wCAAwC;EACxC,iDAAiD;EACjD,sDAAsD;EACtD,4BAA4B;AAC9B;;AAEA;EACE,sCAAsC;EACtC,WAAW;EACX,gDAAgD;EAChD,sDAAsD;EACtD,2BAA2B;AAC7B;;AAEA;EACE,sCAAsC;EACtC,YAAY;EACZ,gDAAgD;EAChD,sDAAsD;EACtD,4BAA4B;AAC9B;;AAEA;;;;EAIE,wBAAwB;AAC1B;;AAEA;;;;EAIE,wBAAwB;AAC1B;;AAEA;;;EAGE;AACF;EACE,4BAA4B;AAC9B;AACA;EACE,2BAA2B;AAC7B;AACA;EACE,4BAA4B;AAC9B;AACA;EACE,2BAA2B;AAC7B\",sourcesContent:[\".resize-container {\\n  position: absolute;\\n  /* todo: better z index */\\n  z-index: 10;\\n  /* todo: is this needed */\\n  background: transparent;\\n}\\n\\n.resize-line {\\n  position: absolute;\\n  /* todo smarter z index */\\n  z-index: -1;\\n  pointer-events: none;\\n  /* a normal exit animation curve- at this point the exit animation is */\\n  /* immediately responsive so we don't need a bespoke curve */\\n  transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);\\n  /* todo: better var? */\\n  border: 1px solid var(--color-gray-100);\\n}\\n\\n/* start really fast because we start super hidden initially behind the panel, otherwise feels like an unintended animation delay */\\n.resize-container:hover ~ .resize-line {\\n  transition: transform 0.2s cubic-bezier(0.05, 0.9, 0.2, 1); /* Fast start for animate in */\\n}\\n\\n.resize-container.right,\\n.resize-container.left {\\n  top: 0;\\n  height: 100%;\\n  width: 25px;\\n  cursor: ew-resize;\\n}\\n\\n/* todo: don't hard code all these values/use vars */\\n\\n.resize-container.bottom,\\n.resize-container.top {\\n  left: 0;\\n  width: 100%;\\n  height: 25px;\\n  cursor: ns-resize;\\n}\\n\\n.resize-container.top {\\n  top: -12px;\\n}\\n.resize-container.bottom {\\n  bottom: -12px;\\n}\\n.resize-container.left {\\n  left: -12px;\\n}\\n.resize-container.right {\\n  right: -12px;\\n}\\n\\n.resize-container.top-left,\\n.resize-container.top-right,\\n.resize-container.bottom-left,\\n.resize-container.bottom-right {\\n  width: 32px;\\n  height: 32px;\\n  z-index: 15;\\n}\\n\\n.resize-container.top-left {\\n  top: -16px;\\n  left: -16px;\\n  cursor: nwse-resize;\\n}\\n.resize-container.top-right {\\n  top: -16px;\\n  right: -16px;\\n  cursor: nesw-resize;\\n}\\n.resize-container.bottom-left {\\n  bottom: -16px;\\n  left: -16px;\\n  cursor: nesw-resize;\\n}\\n.resize-container.bottom-right {\\n  bottom: -16px;\\n  right: -16px;\\n  cursor: nwse-resize;\\n}\\n\\n.resize-line.top,\\n.resize-line.bottom {\\n  height: 28px;\\n  width: 100%;\\n  background-color: var(--color-background-100);\\n}\\n\\n.resize-line.left,\\n.resize-line.right {\\n  width: 28px;\\n  height: 100%;\\n  background-color: var(--color-background-100);\\n}\\n\\n.resize-line.top {\\n  top: -12px;\\n  left: calc(-1 * var(--border-left, 2px));\\n  width: calc(100% + var(--border-horizontal, 4px));\\n  border-radius: var(--rounded-md) var(--rounded-md) 0 0;\\n  transform: translateY(28px);\\n}\\n\\n.resize-line.bottom {\\n  bottom: -12px;\\n  left: calc(-1 * var(--border-left, 2px));\\n  width: calc(100% + var(--border-horizontal, 4px));\\n  border-radius: 0 0 var(--rounded-md) var(--rounded-md);\\n  transform: translateY(-28px);\\n}\\n\\n.resize-line.left {\\n  top: calc(-1 * var(--border-top, 2px));\\n  left: -12px;\\n  height: calc(100% + var(--border-vertical, 4px));\\n  border-radius: var(--rounded-md) 0 0 var(--rounded-md);\\n  transform: translateX(28px);\\n}\\n\\n.resize-line.right {\\n  top: calc(-1 * var(--border-top, 2px));\\n  right: -12px;\\n  height: calc(100% + var(--border-vertical, 4px));\\n  border-radius: 0 var(--rounded-md) var(--rounded-md) 0;\\n  transform: translateX(-28px);\\n}\\n\\n.resize-container.right:hover ~ .resize-line.right,\\n.resize-container.left:hover ~ .resize-line.left,\\n.resize-line.right.dragging,\\n.resize-line.left.dragging {\\n  transform: translateX(0);\\n}\\n\\n.resize-container.bottom:hover ~ .resize-line.bottom,\\n.resize-container.top:hover ~ .resize-line.top,\\n.resize-line.bottom.dragging,\\n.resize-line.top.dragging {\\n  transform: translateY(0);\\n}\\n\\n/* make sure that we don't show multiple handles at once\\n * we should only ever show the currently resizing handle\\n * regardless of hover state \\n */\\n.resize-container.no-hover.right:hover ~ .resize-line.right {\\n  transform: translateX(-28px);\\n}\\n.resize-container.no-hover.left:hover ~ .resize-line.left {\\n  transform: translateX(28px);\\n}\\n.resize-container.no-hover.bottom:hover ~ .resize-line.bottom {\\n  transform: translateY(-28px);\\n}\\n.resize-container.no-hover.top:hover ~ .resize-line.top {\\n  transform: translateY(28px);\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/overview/segment-boundary-trigger.css\":function(e,n,t){\"use strict\";t.d(n,{Z:()=>l});var r=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=t.n(r),a=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=t.n(a)()(o());i.push([e.id,`.segment-boundary-trigger {\n  display: flex;\n  align-items: center;\n  gap: 4px;\n  padding: 4px 6px;\n  line-height: 16px;\n  font-weight: 500;\n  color: var(--color-gray-1000);\n  border-radius: 999px;\n  border: none;\n  font-size: var(--size-12);\n  cursor: pointer;\n  transition: background-color 0.15s ease;\n}\n\n.segment-boundary-trigger-text {\n  font-size: var(--size-12);\n  font-weight: 500;\n  user-select: none;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.segment-boundary-trigger-text .plus-icon {\n  transition: transform 0.25s ease;\n}\n\n.segment-boundary-trigger-text:hover .plus-icon {\n  color: var(--color-gray-800);\n}\n\n.segment-boundary-trigger svg {\n  width: 14px;\n  height: 14px;\n  flex-shrink: 0;\n  vertical-align: middle;\n}\n\n.segment-boundary-trigger:hover svg {\n  color: var(--color-gray-700);\n}\n\n.segment-boundary-trigger[disabled] svg,\n.segment-boundary-trigger[disabled]:hover svg {\n  color: var(--color-gray-400);\n  cursor: not-allowed;\n}\n\n.segment-boundary-dropdown {\n  padding: 8px;\n  background: var(--color-background-100);\n  border: 1px solid var(--color-gray-400);\n  border-radius: 16px;\n  min-width: 120px;\n  user-select: none;\n  cursor: default;\n  box-shadow: 0px 4px 8px -4px color-mix(in srgb, var(--color-gray-900) 4%, transparent);\n}\n\n.segment-boundary-dropdown-positioner {\n  z-index: var(--top-z-index);\n}\n\n.segment-boundary-dropdown-item {\n  display: flex;\n  align-items: center;\n  padding: 8px;\n  line-height: 20px;\n  font-size: 14px;\n  border-radius: 6px;\n  color: var(--color-gray-1000);\n  cursor: pointer;\n  min-width: 220px;\n  border: none;\n  background: none;\n  width: 100%;\n}\n\n.segment-boundary-dropdown-item[data-disabled] {\n  color: var(--color-gray-400);\n  cursor: not-allowed;\n}\n\n.segment-boundary-dropdown-item svg {\n  margin-right: 12px;\n  color: currentColor;\n}\n\n.segment-boundary-dropdown-item:hover {\n  background: var(--color-gray-200);\n}\n\n.segment-boundary-dropdown-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n\n.segment-boundary-dropdown-item:last-child {\n  border-bottom-left-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n\n.segment-boundary-group-label {\n  padding: 8px;\n  font-size: 13px;\n  line-height: 16px;\n  font-weight: 400;\n  color: var(--color-gray-900);\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/components/overview/segment-boundary-trigger.css\"],names:[],mappings:\"AAAA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,gBAAgB;EAChB,iBAAiB;EACjB,gBAAgB;EAChB,6BAA6B;EAC7B,oBAAoB;EACpB,YAAY;EACZ,yBAAyB;EACzB,eAAe;EACf,uCAAuC;AACzC;;AAEA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,iBAAiB;EACjB,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;AACzB;;AAEA;EACE,gCAAgC;AAClC;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;EACE,WAAW;EACX,YAAY;EACZ,cAAc;EACd,sBAAsB;AACxB;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;;EAEE,4BAA4B;EAC5B,mBAAmB;AACrB;;AAEA;EACE,YAAY;EACZ,uCAAuC;EACvC,uCAAuC;EACvC,mBAAmB;EACnB,gBAAgB;EAChB,iBAAiB;EACjB,eAAe;EACf,sFAAsF;AACxF;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,YAAY;EACZ,iBAAiB;EACjB,eAAe;EACf,kBAAkB;EAClB,6BAA6B;EAC7B,eAAe;EACf,gBAAgB;EAChB,YAAY;EACZ,gBAAgB;EAChB,WAAW;AACb;;AAEA;EACE,4BAA4B;EAC5B,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;EAClB,mBAAmB;AACrB;;AAEA;EACE,iCAAiC;AACnC;;AAEA;EACE,2BAA2B;EAC3B,4BAA4B;AAC9B;;AAEA;EACE,8BAA8B;EAC9B,+BAA+B;AACjC;;AAEA;EACE,YAAY;EACZ,eAAe;EACf,iBAAiB;EACjB,gBAAgB;EAChB,4BAA4B;AAC9B\",sourcesContent:[\".segment-boundary-trigger {\\n  display: flex;\\n  align-items: center;\\n  gap: 4px;\\n  padding: 4px 6px;\\n  line-height: 16px;\\n  font-weight: 500;\\n  color: var(--color-gray-1000);\\n  border-radius: 999px;\\n  border: none;\\n  font-size: var(--size-12);\\n  cursor: pointer;\\n  transition: background-color 0.15s ease;\\n}\\n\\n.segment-boundary-trigger-text {\\n  font-size: var(--size-12);\\n  font-weight: 500;\\n  user-select: none;\\n  display: inline-flex;\\n  align-items: center;\\n  justify-content: center;\\n}\\n\\n.segment-boundary-trigger-text .plus-icon {\\n  transition: transform 0.25s ease;\\n}\\n\\n.segment-boundary-trigger-text:hover .plus-icon {\\n  color: var(--color-gray-800);\\n}\\n\\n.segment-boundary-trigger svg {\\n  width: 14px;\\n  height: 14px;\\n  flex-shrink: 0;\\n  vertical-align: middle;\\n}\\n\\n.segment-boundary-trigger:hover svg {\\n  color: var(--color-gray-700);\\n}\\n\\n.segment-boundary-trigger[disabled] svg,\\n.segment-boundary-trigger[disabled]:hover svg {\\n  color: var(--color-gray-400);\\n  cursor: not-allowed;\\n}\\n\\n.segment-boundary-dropdown {\\n  padding: 8px;\\n  background: var(--color-background-100);\\n  border: 1px solid var(--color-gray-400);\\n  border-radius: 16px;\\n  min-width: 120px;\\n  user-select: none;\\n  cursor: default;\\n  box-shadow: 0px 4px 8px -4px color-mix(in srgb, var(--color-gray-900) 4%, transparent);\\n}\\n\\n.segment-boundary-dropdown-positioner {\\n  z-index: var(--top-z-index);\\n}\\n\\n.segment-boundary-dropdown-item {\\n  display: flex;\\n  align-items: center;\\n  padding: 8px;\\n  line-height: 20px;\\n  font-size: 14px;\\n  border-radius: 6px;\\n  color: var(--color-gray-1000);\\n  cursor: pointer;\\n  min-width: 220px;\\n  border: none;\\n  background: none;\\n  width: 100%;\\n}\\n\\n.segment-boundary-dropdown-item[data-disabled] {\\n  color: var(--color-gray-400);\\n  cursor: not-allowed;\\n}\\n\\n.segment-boundary-dropdown-item svg {\\n  margin-right: 12px;\\n  color: currentColor;\\n}\\n\\n.segment-boundary-dropdown-item:hover {\\n  background: var(--color-gray-200);\\n}\\n\\n.segment-boundary-dropdown-item:first-child {\\n  border-top-left-radius: 4px;\\n  border-top-right-radius: 4px;\\n}\\n\\n.segment-boundary-dropdown-item:last-child {\\n  border-bottom-left-radius: 4px;\\n  border-bottom-right-radius: 4px;\\n}\\n\\n.segment-boundary-group-label {\\n  padding: 8px;\\n  font-size: 13px;\\n  line-height: 16px;\\n  font-weight: 400;\\n  color: var(--color-gray-900);\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/overview/segment-explorer.css\":function(e,n,t){\"use strict\";t.d(n,{Z:()=>l});var r=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=t.n(r),a=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=t.n(a)()(o());i.push([e.id,`.segment-explorer-content {\n  font-size: var(--size-14);\n  padding: 0 8px;\n  width: 700px;\n  height: 400px;\n  max-width: calc(100vw - 40px);\n  max-height: calc(100vh - 240px);\n}\n\n.segment-explorer-page-route-bar {\n  display: flex;\n  align-items: center;\n  padding: 14px 16px;\n  background-color: var(--color-background-200);\n  gap: 12px;\n}\n\n.segment-explorer-page-route-bar-path {\n  font-size: var(--size-14);\n  font-weight: 500;\n  color: var(--color-gray-1000);\n  font-family: var(--font-mono);\n  white-space: nowrap;\n  line-height: 20px;\n}\n\n.segment-explorer-item {\n  margin: 4px 0;\n  border-radius: 6px;\n}\n\n.segment-explorer-item:nth-child(even) {\n  background-color: var(--color-background-200);\n}\n\n.segment-explorer-item-row {\n  display: flex;\n  align-items: center;\n  padding-top: 10px;\n  padding-bottom: 10px;\n  padding-right: 4px;\n  white-space: pre;\n  cursor: default;\n  color: var(--color-gray-1000);\n}\n\n.segment-explorer-children--intended {\n  padding-left: 16px;\n}\n\n.segment-explorer-filename {\n  display: inline-flex;\n  width: 100%;\n  align-items: center;\n}\n\n.segment-explorer-filename select {\n  margin-left: auto;\n}\n\n.segment-explorer-filename--path {\n  margin-right: auto;\n}\n.segment-explorer-filename--path small {\n  display: inline-block;\n  width: 0;\n  opacity: 0;\n}\n.segment-explorer-filename--name {\n  color: var(--color-gray-800);\n}\n\n.segment-explorer-files {\n  display: inline-flex;\n  gap: 8px;\n  margin-left: auto;\n}\n\n.segment-explorer-files + .segment-boundary-trigger {\n  margin-left: 8px;\n}\n\n.segment-explorer-file-label {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  padding: 4px 6px;\n  border-radius: 16px;\n  line-height: 16px;\n  font-size: var(--size-12);\n  font-weight: 500;\n  user-select: none;\n  cursor: pointer;\n  background-color: var(--color-gray-300);\n  color: var(--color-gray-1000);\n}\n\n.segment-explorer-file-label--overridden {\n  background-color: var(--color-amber-300);\n  color: var(--color-amber-900);\n}\n\n.segment-explorer-file-label .code-icon {\n  opacity: 0;\n  margin-left: 0;\n  width: 0;\n  transition: all 0.15s ease-in-out;\n}\n.segment-explorer-file-label:hover .code-icon {\n  opacity: 1;\n  width: 12px;\n  margin-left: 4px;\n}\n\n.segment-explorer-file-label:hover {\n  filter: brightness(0.95);\n}\n\n.segment-explorer-file-label--builtin {\n  background-color: transparent;\n  color: var(--color-gray-900);\n  border: 1px dashed var(--color-gray-500);\n  height: 24px;\n  cursor: default;\n}\n.segment-explorer-file-label--builtin svg {\n  margin-left: 4px;\n  margin-right: -4px;\n}\n\n/* Footer styles */\n.segment-explorer-footer {\n  padding: 8px;\n  border-top: 1px solid var(--color-gray-400);\n  background-color: var(--color-background-100);\n  user-select: none;\n}\n\n.segment-explorer-footer-button {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  width: 100%;\n  padding: 6px;\n  background: var(--color-background-100);\n  border: 1px solid var(--color-gray-400);\n  border-radius: 6px;\n  color: var(--color-gray-1000);\n  font-size: var(--size-14);\n  font-weight: 500;\n  cursor: pointer;\n  transition: background-color 0.15s ease;\n}\n\n.segment-explorer-footer-button:hover:not(:disabled) {\n  background: var(--color-gray-200);\n}\n\n.segment-explorer-footer-button--disabled {\n  opacity: 0.5;\n  cursor: not-allowed;\n}\n\n.segment-explorer-footer-text {\n  text-align: center;\n}\n\n.segment-explorer-footer-badge {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  min-width: 20px;\n  height: 20px;\n  padding: 0 6px;\n  background: var(--color-amber-300);\n  color: var(--color-amber-900);\n  border-radius: 10px;\n  font-size: var(--size-12);\n  font-weight: 600;\n  line-height: 1;\n}\n\n.segment-explorer-file-label-tooltip--sm {\n  white-space: nowrap;\n}\n\n.segment-explorer-file-label-tooltip--lg {\n  min-width: 200px;\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/components/overview/segment-explorer.css\"],names:[],mappings:\"AAAA;EACE,yBAAyB;EACzB,cAAc;EACd,YAAY;EACZ,aAAa;EACb,6BAA6B;EAC7B,+BAA+B;AACjC;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,kBAAkB;EAClB,6CAA6C;EAC7C,SAAS;AACX;;AAEA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,6BAA6B;EAC7B,6BAA6B;EAC7B,mBAAmB;EACnB,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,kBAAkB;AACpB;;AAEA;EACE,6CAA6C;AAC/C;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,iBAAiB;EACjB,oBAAoB;EACpB,kBAAkB;EAClB,gBAAgB;EAChB,eAAe;EACf,6BAA6B;AAC/B;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,oBAAoB;EACpB,WAAW;EACX,mBAAmB;AACrB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,kBAAkB;AACpB;AACA;EACE,qBAAqB;EACrB,QAAQ;EACR,UAAU;AACZ;AACA;EACE,4BAA4B;AAC9B;;AAEA;EACE,oBAAoB;EACpB,QAAQ;EACR,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;EACvB,gBAAgB;EAChB,mBAAmB;EACnB,iBAAiB;EACjB,yBAAyB;EACzB,gBAAgB;EAChB,iBAAiB;EACjB,eAAe;EACf,uCAAuC;EACvC,6BAA6B;AAC/B;;AAEA;EACE,wCAAwC;EACxC,6BAA6B;AAC/B;;AAEA;EACE,UAAU;EACV,cAAc;EACd,QAAQ;EACR,iCAAiC;AACnC;AACA;EACE,UAAU;EACV,WAAW;EACX,gBAAgB;AAClB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,6BAA6B;EAC7B,4BAA4B;EAC5B,wCAAwC;EACxC,YAAY;EACZ,eAAe;AACjB;AACA;EACE,gBAAgB;EAChB,kBAAkB;AACpB;;AAEA,kBAAkB;AAClB;EACE,YAAY;EACZ,2CAA2C;EAC3C,6CAA6C;EAC7C,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,QAAQ;EACR,WAAW;EACX,YAAY;EACZ,uCAAuC;EACvC,uCAAuC;EACvC,kBAAkB;EAClB,6BAA6B;EAC7B,yBAAyB;EACzB,gBAAgB;EAChB,eAAe;EACf,uCAAuC;AACzC;;AAEA;EACE,iCAAiC;AACnC;;AAEA;EACE,YAAY;EACZ,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;EACnB,uBAAuB;EACvB,eAAe;EACf,YAAY;EACZ,cAAc;EACd,kCAAkC;EAClC,6BAA6B;EAC7B,mBAAmB;EACnB,yBAAyB;EACzB,gBAAgB;EAChB,cAAc;AAChB;;AAEA;EACE,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;AAClB\",sourcesContent:[\".segment-explorer-content {\\n  font-size: var(--size-14);\\n  padding: 0 8px;\\n  width: 700px;\\n  height: 400px;\\n  max-width: calc(100vw - 40px);\\n  max-height: calc(100vh - 240px);\\n}\\n\\n.segment-explorer-page-route-bar {\\n  display: flex;\\n  align-items: center;\\n  padding: 14px 16px;\\n  background-color: var(--color-background-200);\\n  gap: 12px;\\n}\\n\\n.segment-explorer-page-route-bar-path {\\n  font-size: var(--size-14);\\n  font-weight: 500;\\n  color: var(--color-gray-1000);\\n  font-family: var(--font-mono);\\n  white-space: nowrap;\\n  line-height: 20px;\\n}\\n\\n.segment-explorer-item {\\n  margin: 4px 0;\\n  border-radius: 6px;\\n}\\n\\n.segment-explorer-item:nth-child(even) {\\n  background-color: var(--color-background-200);\\n}\\n\\n.segment-explorer-item-row {\\n  display: flex;\\n  align-items: center;\\n  padding-top: 10px;\\n  padding-bottom: 10px;\\n  padding-right: 4px;\\n  white-space: pre;\\n  cursor: default;\\n  color: var(--color-gray-1000);\\n}\\n\\n.segment-explorer-children--intended {\\n  padding-left: 16px;\\n}\\n\\n.segment-explorer-filename {\\n  display: inline-flex;\\n  width: 100%;\\n  align-items: center;\\n}\\n\\n.segment-explorer-filename select {\\n  margin-left: auto;\\n}\\n\\n.segment-explorer-filename--path {\\n  margin-right: auto;\\n}\\n.segment-explorer-filename--path small {\\n  display: inline-block;\\n  width: 0;\\n  opacity: 0;\\n}\\n.segment-explorer-filename--name {\\n  color: var(--color-gray-800);\\n}\\n\\n.segment-explorer-files {\\n  display: inline-flex;\\n  gap: 8px;\\n  margin-left: auto;\\n}\\n\\n.segment-explorer-files + .segment-boundary-trigger {\\n  margin-left: 8px;\\n}\\n\\n.segment-explorer-file-label {\\n  display: inline-flex;\\n  align-items: center;\\n  justify-content: center;\\n  padding: 4px 6px;\\n  border-radius: 16px;\\n  line-height: 16px;\\n  font-size: var(--size-12);\\n  font-weight: 500;\\n  user-select: none;\\n  cursor: pointer;\\n  background-color: var(--color-gray-300);\\n  color: var(--color-gray-1000);\\n}\\n\\n.segment-explorer-file-label--overridden {\\n  background-color: var(--color-amber-300);\\n  color: var(--color-amber-900);\\n}\\n\\n.segment-explorer-file-label .code-icon {\\n  opacity: 0;\\n  margin-left: 0;\\n  width: 0;\\n  transition: all 0.15s ease-in-out;\\n}\\n.segment-explorer-file-label:hover .code-icon {\\n  opacity: 1;\\n  width: 12px;\\n  margin-left: 4px;\\n}\\n\\n.segment-explorer-file-label:hover {\\n  filter: brightness(0.95);\\n}\\n\\n.segment-explorer-file-label--builtin {\\n  background-color: transparent;\\n  color: var(--color-gray-900);\\n  border: 1px dashed var(--color-gray-500);\\n  height: 24px;\\n  cursor: default;\\n}\\n.segment-explorer-file-label--builtin svg {\\n  margin-left: 4px;\\n  margin-right: -4px;\\n}\\n\\n/* Footer styles */\\n.segment-explorer-footer {\\n  padding: 8px;\\n  border-top: 1px solid var(--color-gray-400);\\n  background-color: var(--color-background-100);\\n  user-select: none;\\n}\\n\\n.segment-explorer-footer-button {\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n  gap: 8px;\\n  width: 100%;\\n  padding: 6px;\\n  background: var(--color-background-100);\\n  border: 1px solid var(--color-gray-400);\\n  border-radius: 6px;\\n  color: var(--color-gray-1000);\\n  font-size: var(--size-14);\\n  font-weight: 500;\\n  cursor: pointer;\\n  transition: background-color 0.15s ease;\\n}\\n\\n.segment-explorer-footer-button:hover:not(:disabled) {\\n  background: var(--color-gray-200);\\n}\\n\\n.segment-explorer-footer-button--disabled {\\n  opacity: 0.5;\\n  cursor: not-allowed;\\n}\\n\\n.segment-explorer-footer-text {\\n  text-align: center;\\n}\\n\\n.segment-explorer-footer-badge {\\n  display: inline-flex;\\n  align-items: center;\\n  justify-content: center;\\n  min-width: 20px;\\n  height: 20px;\\n  padding: 0 6px;\\n  background: var(--color-amber-300);\\n  color: var(--color-amber-900);\\n  border-radius: 10px;\\n  font-size: var(--size-12);\\n  font-weight: 600;\\n  line-height: 1;\\n}\\n\\n.segment-explorer-file-label-tooltip--sm {\\n  white-space: nowrap;\\n}\\n\\n.segment-explorer-file-label-tooltip--lg {\\n  min-width: 200px;\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/toast/style.css\":function(e,n,t){\"use strict\";t.d(n,{Z:()=>l});var r=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=t.n(r),a=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=t.n(a)()(o());i.push([e.id,`.nextjs-toast {\n  position: fixed;\n  z-index: var(--top-z-index);\n  max-width: 420px;\n  box-shadow: 0px 16px 32px rgba(0, 0, 0, 0.25);\n}\n\n.nextjs-toast-errors-parent {\n  padding: 16px;\n  border-radius: var(--rounded-4xl);\n  font-weight: 500;\n  color: var(--color-ansi-bright-white);\n  background-color: var(--color-ansi-red);\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/dev-overlay/components/toast/style.css\"],names:[],mappings:\"AAAA;EACE,eAAe;EACf,2BAA2B;EAC3B,gBAAgB;EAChB,6CAA6C;AAC/C;;AAEA;EACE,aAAa;EACb,iCAAiC;EACjC,gBAAgB;EAChB,qCAAqC;EACrC,uCAAuC;AACzC\",sourcesContent:[\".nextjs-toast {\\n  position: fixed;\\n  z-index: var(--top-z-index);\\n  max-width: 420px;\\n  box-shadow: 0px 16px 32px rgba(0, 0, 0, 0.25);\\n}\\n\\n.nextjs-toast-errors-parent {\\n  padding: 16px;\\n  border-radius: var(--rounded-4xl);\\n  font-weight: 500;\\n  color: var(--color-ansi-bright-white);\\n  background-color: var(--color-ansi-red);\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/global.css\":function(e,n,t){\"use strict\";t.d(n,{Z:()=>l});var r=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\"),o=t.n(r),a=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\"),i=t.n(a)()(o());i.push([e.id,`/* devtool global css variables */\n:host {\n  --top-z-index: 2147483647;\n}\n`,\"\",{version:3,sources:[\"webpack://./src/next-devtools/global.css\"],names:[],mappings:\"AAAA,iCAAiC;AACjC;EACE,yBAAyB;AAC3B\",sourcesContent:[\"/* devtool global css variables */\\n:host {\\n  --top-z-index: 2147483647;\\n}\\n\"],sourceRoot:\"\"}]);let l=i},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/api.js\":function(e){\"use strict\";e.exports=function(e){var n=[];return n.toString=function(){return this.map(function(n){var t=\"\",r=void 0!==n[5];return n[4]&&(t+=\"@supports (\".concat(n[4],\") {\")),n[2]&&(t+=\"@media \".concat(n[2],\" {\")),r&&(t+=\"@layer\".concat(n[5].length>0?\" \".concat(n[5]):\"\",\" {\")),t+=e(n),r&&(t+=\"}\"),n[2]&&(t+=\"}\"),n[4]&&(t+=\"}\"),t}).join(\"\")},n.i=function(e,t,r,o,a){\"string\"==typeof e&&(e=[[null,e,void 0]]);var i={};if(r)for(var l=0;l<this.length;l++){var s=this[l][0];null!=s&&(i[s]=!0)}for(var c=0;c<e.length;c++){var u=[].concat(e[c]);r&&i[u[0]]||(void 0!==a&&(void 0===u[5]||(u[1]=\"@layer\".concat(u[5].length>0?\" \".concat(u[5]):\"\",\" {\").concat(u[1],\"}\")),u[5]=a),t&&(u[2]&&(u[1]=\"@media \".concat(u[2],\" {\").concat(u[1],\"}\")),u[2]=t),o&&(u[4]?(u[1]=\"@supports (\".concat(u[4],\") {\").concat(u[1],\"}\"),u[4]=o):u[4]=\"\".concat(o)),n.push(u))}},n}},\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/runtime/sourceMaps.js\":function(e){\"use strict\";e.exports=function(e){var n=e[1],t=e[3];if(!t)return n;if(\"function\"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(t))));return[n].concat([\"/*# \".concat(\"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(r),\" */\")]).join(\"\\n\")}return[n].join(\"\\n\")}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\":function(e){\"use strict\";var n=[];function t(e){for(var t=-1,r=0;r<n.length;r++)if(n[r].identifier===e){t=r;break}return t}function r(e,r){for(var o={},a=[],i=0;i<e.length;i++){var l=e[i],s=r.base?l[0]+r.base:l[0],c=o[s]||0,u=\"\".concat(s,\" \").concat(c);o[s]=c+1;var d=t(u),f={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==d)n[d].references++,n[d].updater(f);else{var p=function(e,n){var t=n.domAPI(n);return t.update(e),function(n){n?(n.css!==e.css||n.media!==e.media||n.sourceMap!==e.sourceMap||n.supports!==e.supports||n.layer!==e.layer)&&t.update(e=n):t.remove()}}(f,r);r.byIndex=i,n.splice(i,0,{identifier:u,updater:p,references:1})}a.push(u)}return a}e.exports=function(e,o){var a=r(e=e||[],o=o||{});return function(e){e=e||[];for(var i=0;i<a.length;i++){var l=t(a[i]);n[l].references--}for(var s=r(e,o),c=0;c<a.length;c++){var u=t(a[c]);0===n[u].references&&(n[u].updater(),n.splice(u,1))}a=s}}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/insertStyleElement.js\":function(e){\"use strict\";e.exports=function(e){var n=document.createElement(\"style\");return e.setAttributes(n,e.attributes),e.insert(n,e.options),n}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\":function(e,n,t){\"use strict\";e.exports=function(e){var n=t.nc;n&&e.setAttribute(\"nonce\",n)}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleDomAPI.js\":function(e){\"use strict\";e.exports=function(e){if(\"undefined\"==typeof document)return{update:function(){},remove:function(){}};var n=e.insertStyleElement(e);return{update:function(t){var r,o,a;r=\"\",t.supports&&(r+=\"@supports (\".concat(t.supports,\") {\")),t.media&&(r+=\"@media \".concat(t.media,\" {\")),(o=void 0!==t.layer)&&(r+=\"@layer\".concat(t.layer.length>0?\" \".concat(t.layer):\"\",\" {\")),r+=t.css,o&&(r+=\"}\"),t.media&&(r+=\"}\"),t.supports&&(r+=\"}\"),(a=t.sourceMap)&&\"undefined\"!=typeof btoa&&(r+=\"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a)))),\" */\")),e.styleTagTransform(r,n,e.options)},remove:function(){!function(e){if(null!==e.parentNode)e.parentNode.removeChild(e)}(n)}}}},\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleTagTransform.js\":function(e){\"use strict\";e.exports=function(e,n){if(n.styleSheet)n.styleSheet.cssText=e;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(e))}}},\"./dist/compiled/anser/index.js\":function(e){(()=>{\"use strict\";var n={211:e=>{var n=function(){function e(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(n,t,r){return t&&e(n.prototype,t),r&&e(n,r),n}}(),t=[[{color:\"0, 0, 0\",class:\"ansi-black\"},{color:\"187, 0, 0\",class:\"ansi-red\"},{color:\"0, 187, 0\",class:\"ansi-green\"},{color:\"187, 187, 0\",class:\"ansi-yellow\"},{color:\"0, 0, 187\",class:\"ansi-blue\"},{color:\"187, 0, 187\",class:\"ansi-magenta\"},{color:\"0, 187, 187\",class:\"ansi-cyan\"},{color:\"255,255,255\",class:\"ansi-white\"}],[{color:\"85, 85, 85\",class:\"ansi-bright-black\"},{color:\"255, 85, 85\",class:\"ansi-bright-red\"},{color:\"0, 255, 0\",class:\"ansi-bright-green\"},{color:\"255, 255, 85\",class:\"ansi-bright-yellow\"},{color:\"85, 85, 255\",class:\"ansi-bright-blue\"},{color:\"255, 85, 255\",class:\"ansi-bright-magenta\"},{color:\"85, 255, 255\",class:\"ansi-bright-cyan\"},{color:\"255, 255, 255\",class:\"ansi-bright-white\"}]];e.exports=function(){function e(){if(!(this instanceof e))throw TypeError(\"Cannot call a class as a function\");this.fg=this.bg=this.fg_truecolor=this.bg_truecolor=null,this.bright=0}return n(e,null,[{key:\"escapeForHtml\",value:function(n){return(new e).escapeForHtml(n)}},{key:\"linkify\",value:function(n){return(new e).linkify(n)}},{key:\"ansiToHtml\",value:function(n,t){return(new e).ansiToHtml(n,t)}},{key:\"ansiToJson\",value:function(n,t){return(new e).ansiToJson(n,t)}},{key:\"ansiToText\",value:function(n){return(new e).ansiToText(n)}}]),n(e,[{key:\"setupPalette\",value:function(){this.PALETTE_COLORS=[];for(var e=0;e<2;++e)for(var n=0;n<8;++n)this.PALETTE_COLORS.push(t[e][n].color);for(var r=[0,95,135,175,215,255],o=function(e,n,t){return r[e]+\", \"+r[n]+\", \"+r[t]},a=0;a<6;++a)for(var i=0;i<6;++i)for(var l=0;l<6;++l)this.PALETTE_COLORS.push(o(a,i,l));for(var s=8,c=0;c<24;++c,s+=10)this.PALETTE_COLORS.push(o(s,s,s))}},{key:\"escapeForHtml\",value:function(e){return e.replace(/[&<>]/gm,function(e){return\"&\"==e?\"&amp;\":\"<\"==e?\"&lt;\":\">\"==e?\"&gt;\":\"\"})}},{key:\"linkify\",value:function(e){return e.replace(/(https?:\\/\\/[^\\s]+)/gm,function(e){return'<a href=\"'+e+'\">'+e+\"</a>\"})}},{key:\"ansiToHtml\",value:function(e,n){return this.process(e,n,!0)}},{key:\"ansiToJson\",value:function(e,n){return(n=n||{}).json=!0,n.clearLine=!1,this.process(e,n,!0)}},{key:\"ansiToText\",value:function(e){return this.process(e,{},!1)}},{key:\"process\",value:function(e,n,t){var r=this,o=e.split(/\\033\\[/),a=o.shift();null==n&&(n={}),n.clearLine=/\\r/.test(e);var i=o.map(function(e){return r.processChunk(e,n,t)});if(n&&n.json){var l=this.processChunkJson(\"\");return l.content=a,l.clearLine=n.clearLine,i.unshift(l),n.remove_empty&&(i=i.filter(function(e){return!e.isEmpty()})),i}return i.unshift(a),i.join(\"\")}},{key:\"processChunkJson\",value:function(e,n,r){var o=(n=void 0===n?{}:n).use_classes=void 0!==n.use_classes&&n.use_classes,a=n.key=o?\"class\":\"color\",i={content:e,fg:null,bg:null,fg_truecolor:null,bg_truecolor:null,clearLine:n.clearLine,decoration:null,was_processed:!1,isEmpty:function(){return!i.content}},l=e.match(/^([!\\x3c-\\x3f]*)([\\d;]*)([\\x20-\\x2c]*[\\x40-\\x7e])([\\s\\S]*)/m);if(!l)return i;i.content=l[4];var s=l[2].split(\";\");if(\"\"!==l[1]||\"m\"!==l[3]||!r)return i;for(this.decoration=null;s.length>0;){var c=parseInt(s.shift());if(isNaN(c)||0===c)this.fg=this.bg=this.decoration=null;else if(1===c)this.decoration=\"bold\";else if(2===c)this.decoration=\"dim\";else if(3==c)this.decoration=\"italic\";else if(4==c)this.decoration=\"underline\";else if(5==c)this.decoration=\"blink\";else if(7===c)this.decoration=\"reverse\";else if(8===c)this.decoration=\"hidden\";else if(9===c)this.decoration=\"strikethrough\";else if(39==c)this.fg=null;else if(49==c)this.bg=null;else if(c>=30&&c<38)this.fg=t[0][c%10][a];else if(c>=90&&c<98)this.fg=t[1][c%10][a];else if(c>=40&&c<48)this.bg=t[0][c%10][a];else if(c>=100&&c<108)this.bg=t[1][c%10][a];else if(38===c||48===c){var u=38===c;if(s.length>=1){var d=s.shift();if(\"5\"===d&&s.length>=1){var f=parseInt(s.shift());if(f>=0&&f<=255)if(o){var p=f>=16?\"ansi-palette-\"+f:t[+(f>7)][f%8].class;u?this.fg=p:this.bg=p}else this.PALETTE_COLORS||this.setupPalette(),u?this.fg=this.PALETTE_COLORS[f]:this.bg=this.PALETTE_COLORS[f]}else if(\"2\"===d&&s.length>=3){var h=parseInt(s.shift()),g=parseInt(s.shift()),m=parseInt(s.shift());if(h>=0&&h<=255&&g>=0&&g<=255&&m>=0&&m<=255){var v=h+\", \"+g+\", \"+m;o?u?(this.fg=\"ansi-truecolor\",this.fg_truecolor=v):(this.bg=\"ansi-truecolor\",this.bg_truecolor=v):u?this.fg=v:this.bg=v}}}}}return null===this.fg&&null===this.bg&&null===this.decoration||(i.fg=this.fg,i.bg=this.bg,i.fg_truecolor=this.fg_truecolor,i.bg_truecolor=this.bg_truecolor,i.decoration=this.decoration,i.was_processed=!0),i}},{key:\"processChunk\",value:function(e,n,t){var r=this;n=n||{};var o=this.processChunkJson(e,n,t);if(n.json)return o;if(o.isEmpty())return\"\";if(!o.was_processed)return o.content;var a=n.use_classes,i=[],l=[],s={},c=function(e){var n=[],t=void 0;for(t in e)e.hasOwnProperty(t)&&n.push(\"data-\"+t+'=\"'+r.escapeForHtml(e[t])+'\"');return n.length>0?\" \"+n.join(\" \"):\"\"};return(o.fg&&(a?(l.push(o.fg+\"-fg\"),null!==o.fg_truecolor&&(s[\"ansi-truecolor-fg\"]=o.fg_truecolor,o.fg_truecolor=null)):i.push(\"color:rgb(\"+o.fg+\")\")),o.bg&&(a?(l.push(o.bg+\"-bg\"),null!==o.bg_truecolor&&(s[\"ansi-truecolor-bg\"]=o.bg_truecolor,o.bg_truecolor=null)):i.push(\"background-color:rgb(\"+o.bg+\")\")),o.decoration&&(a?l.push(\"ansi-\"+o.decoration):\"bold\"===o.decoration?i.push(\"font-weight:bold\"):\"dim\"===o.decoration?i.push(\"opacity:0.5\"):\"italic\"===o.decoration?i.push(\"font-style:italic\"):\"reverse\"===o.decoration?i.push(\"filter:invert(100%)\"):\"hidden\"===o.decoration?i.push(\"visibility:hidden\"):\"strikethrough\"===o.decoration?i.push(\"text-decoration:line-through\"):i.push(\"text-decoration:\"+o.decoration)),a)?'<span class=\"'+l.join(\" \")+'\"'+c(s)+\">\"+o.content+\"</span>\":'<span style=\"'+i.join(\";\")+'\"'+c(s)+\">\"+o.content+\"</span>\"}}]),e}()}},t={};function r(e){var o=t[e];if(void 0!==o)return o.exports;var a=t[e]={exports:{}},i=!0;try{n[e](a,a.exports,r),i=!1}finally{i&&delete t[e]}return a.exports}r.ab=\"//\",e.exports=r(211)})()},\"./dist/compiled/react-dom/cjs/react-dom-client.production.js\":function(e,n,t){\"use strict\";var r,o=t(\"./dist/compiled/scheduler/index.js\"),a=t(\"./dist/compiled/react/index.js\"),i=t(\"./dist/compiled/react-dom/index.js\");function l(e){var n=\"https://react.dev/errors/\"+e;if(1<arguments.length){n+=\"?args[]=\"+encodeURIComponent(arguments[1]);for(var t=2;t<arguments.length;t++)n+=\"&args[]=\"+encodeURIComponent(arguments[t])}return\"Minified React error #\"+e+\"; visit \"+n+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}function s(e){var n=e,t=e;if(e.alternate)for(;n.return;)n=n.return;else{e=n;do 0!=(4098&(n=e).flags)&&(t=n.return),e=n.return;while(e)}return 3===n.tag?t:null}function c(e){if(13===e.tag){var n=e.memoizedState;if(null===n&&null!==(e=e.alternate)&&(n=e.memoizedState),null!==n)return n.dehydrated}return null}function u(e){if(31===e.tag){var n=e.memoizedState;if(null===n&&null!==(e=e.alternate)&&(n=e.memoizedState),null!==n)return n.dehydrated}return null}function d(e){if(s(e)!==e)throw Error(l(188))}var f=Object.assign,p=Symbol.for(\"react.element\"),h=Symbol.for(\"react.transitional.element\"),g=Symbol.for(\"react.portal\"),m=Symbol.for(\"react.fragment\"),v=Symbol.for(\"react.strict_mode\"),b=Symbol.for(\"react.profiler\"),y=Symbol.for(\"react.consumer\"),x=Symbol.for(\"react.context\"),w=Symbol.for(\"react.forward_ref\"),j=Symbol.for(\"react.suspense\"),k=Symbol.for(\"react.suspense_list\"),A=Symbol.for(\"react.memo\"),O=Symbol.for(\"react.lazy\");Symbol.for(\"react.scope\");var C=Symbol.for(\"react.activity\");Symbol.for(\"react.legacy_hidden\"),Symbol.for(\"react.tracing_marker\");var S=Symbol.for(\"react.memo_cache_sentinel\");Symbol.for(\"react.view_transition\");var E=Symbol.iterator;function _(e){return null===e||\"object\"!=typeof e?null:\"function\"==typeof(e=E&&e[E]||e[\"@@iterator\"])?e:null}var P=Symbol.for(\"react.client.reference\"),z=Array.isArray,L=a.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,T=i.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,R={pending:!1,data:null,method:null,action:null},N=[],D=-1;function B(e){return{current:e}}function M(e){0>D||(e.current=N[D],N[D]=null,D--)}function I(e,n){N[++D]=e.current,e.current=n}var H=B(null),F=B(null),U=B(null),V=B(null);function q(e,n){switch(I(U,n),I(F,e),I(H,null),n.nodeType){case 9:case 11:e=(e=n.documentElement)&&(e=e.namespaceURI)?cp(e):0;break;default:if(e=n.tagName,n=n.namespaceURI)e=ch(n=cp(n),e);else switch(e){case\"svg\":e=1;break;case\"math\":e=2;break;default:e=0}}M(H),I(H,e)}function W(){M(H),M(F),M(U)}function $(e){null!==e.memoizedState&&I(V,e);var n=H.current,t=ch(n,e.type);n!==t&&(I(F,e),I(H,t))}function Z(e){F.current===e&&(M(H),M(F)),V.current===e&&(M(V),c6._currentValue=R)}function Y(e){if(void 0===nD)try{throw Error()}catch(e){var n=e.stack.trim().match(/\\n( *(at )?)/);nD=n&&n[1]||\"\",nB=-1<e.stack.indexOf(\"\\n    at\")?\" (<anonymous>)\":-1<e.stack.indexOf(\"@\")?\"@unknown:0:0\":\"\"}return\"\\n\"+nD+e+nB}var X=!1;function K(e,n){if(!e||X)return\"\";X=!0;var t=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var r={DetermineComponentFrameRoot:function(){try{if(n){var t=function(){throw Error()};if(Object.defineProperty(t.prototype,\"props\",{set:function(){throw Error()}}),\"object\"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(e){var r=e}Reflect.construct(e,[],t)}else{try{t.call()}catch(e){r=e}e.call(t.prototype)}}else{try{throw Error()}catch(e){r=e}(t=e())&&\"function\"==typeof t.catch&&t.catch(function(){})}}catch(e){if(e&&r&&\"string\"==typeof e.stack)return[e.stack,r.stack]}return[null,null]}};r.DetermineComponentFrameRoot.displayName=\"DetermineComponentFrameRoot\";var o=Object.getOwnPropertyDescriptor(r.DetermineComponentFrameRoot,\"name\");o&&o.configurable&&Object.defineProperty(r.DetermineComponentFrameRoot,\"name\",{value:\"DetermineComponentFrameRoot\"});var a=r.DetermineComponentFrameRoot(),i=a[0],l=a[1];if(i&&l){var s=i.split(\"\\n\"),c=l.split(\"\\n\");for(o=r=0;r<s.length&&!s[r].includes(\"DetermineComponentFrameRoot\");)r++;for(;o<c.length&&!c[o].includes(\"DetermineComponentFrameRoot\");)o++;if(r===s.length||o===c.length)for(r=s.length-1,o=c.length-1;1<=r&&0<=o&&s[r]!==c[o];)o--;for(;1<=r&&0<=o;r--,o--)if(s[r]!==c[o]){if(1!==r||1!==o)do if(r--,o--,0>o||s[r]!==c[o]){var u=\"\\n\"+s[r].replace(\" at new \",\" at \");return e.displayName&&u.includes(\"<anonymous>\")&&(u=u.replace(\"<anonymous>\",e.displayName)),u}while(1<=r&&0<=o);break}}}finally{X=!1,Error.prepareStackTrace=t}return(t=e?e.displayName||e.name:\"\")?Y(t):\"\"}function Q(e){try{var n=\"\",t=null;do n+=function(e,n){switch(e.tag){case 26:case 27:case 5:return Y(e.type);case 16:return Y(\"Lazy\");case 13:return e.child!==n&&null!==n?Y(\"Suspense Fallback\"):Y(\"Suspense\");case 19:return Y(\"SuspenseList\");case 0:case 15:return K(e.type,!1);case 11:return K(e.type.render,!1);case 1:return K(e.type,!0);case 31:return Y(\"Activity\");default:return\"\"}}(e,t),t=e,e=e.return;while(e);return n}catch(e){return\"\\nError generating stack: \"+e.message+\"\\n\"+e.stack}}var G=Object.prototype.hasOwnProperty,J=o.unstable_scheduleCallback,ee=o.unstable_cancelCallback,en=o.unstable_shouldYield,et=o.unstable_requestPaint,er=o.unstable_now,eo=o.unstable_getCurrentPriorityLevel,ea=o.unstable_ImmediatePriority,ei=o.unstable_UserBlockingPriority,el=o.unstable_NormalPriority,es=o.unstable_LowPriority,ec=o.unstable_IdlePriority,eu=o.log,ed=o.unstable_setDisableYieldValue,ef=null,ep=null;function eh(e){if(\"function\"==typeof eu&&ed(e),ep&&\"function\"==typeof ep.setStrictMode)try{ep.setStrictMode(ef,e)}catch(e){}}var eg=Math.clz32?Math.clz32:function(e){return 0==(e>>>=0)?32:31-(em(e)/ev|0)|0},em=Math.log,ev=Math.LN2,eb=256,ey=4194304;function ex(e){var n=42&e;if(0!==n)return n;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194048&e;case 4194304:case 8388608:case 0x1000000:case 0x2000000:return 0x3c00000&e;case 0x4000000:return 0x4000000;case 0x8000000:return 0x8000000;case 0x10000000:return 0x10000000;case 0x20000000:return 0x20000000;case 0x40000000:return 0;default:return e}}function ew(e,n,t){var r=e.pendingLanes;if(0===r)return 0;var o=0,a=e.suspendedLanes,i=e.pingedLanes;e=e.warmLanes;var l=0x7ffffff&r;return 0!==l?0!=(r=l&~a)?o=ex(r):0!=(i&=l)?o=ex(i):t||0!=(t=l&~e)&&(o=ex(t)):0!=(l=r&~a)?o=ex(l):0!==i?o=ex(i):t||0!=(t=r&~e)&&(o=ex(t)),0===o?0:0!==n&&n!==o&&0==(n&a)&&((a=o&-o)>=(t=n&-n)||32===a&&0!=(4194048&t))?n:o}function ej(e,n){return 0==(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&n)}function ek(){var e=eb;return 0==(4194048&(eb<<=1))&&(eb=256),e}function eA(){var e=ey;return 0==(0x3c00000&(ey<<=1))&&(ey=4194304),e}function eO(e){for(var n=[],t=0;31>t;t++)n.push(e);return n}function eC(e,n){e.pendingLanes|=n,0x10000000!==n&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function eS(e,n,t){e.pendingLanes|=n,e.suspendedLanes&=~n;var r=31-eg(n);e.entangledLanes|=n,e.entanglements[r]=0x40000000|e.entanglements[r]|4194090&t}function eE(e,n){var t=e.entangledLanes|=n;for(e=e.entanglements;t;){var r=31-eg(t),o=1<<r;o&n|e[r]&n&&(e[r]|=n),t&=~o}}function e_(e,n){var t=n&-n;return 0!=((t=0!=(42&t)?1:eP(t))&(e.suspendedLanes|n))?0:t}function eP(e){switch(e){case 2:e=1;break;case 8:e=4;break;case 32:e=16;break;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 0x1000000:case 0x2000000:e=128;break;case 0x10000000:e=0x8000000;break;default:e=0}return e}function ez(e){return 2<(e&=-e)?8<e?0!=(0x7ffffff&e)?32:0x10000000:8:2}function eL(){var e=T.p;return 0!==e?e:void 0===(e=window.event)?32:uu(e.type)}function eT(e,n){var t=T.p;try{return T.p=e,n()}finally{T.p=t}}var eR=Math.random().toString(36).slice(2),eN=\"__reactFiber$\"+eR,eD=\"__reactProps$\"+eR,eB=\"__reactContainer$\"+eR,eM=\"__reactEvents$\"+eR,eI=\"__reactListeners$\"+eR,eH=\"__reactHandles$\"+eR,eF=\"__reactResources$\"+eR,eU=\"__reactMarker$\"+eR;function eV(e){delete e[eN],delete e[eD],delete e[eM],delete e[eI],delete e[eH]}function eq(e){var n=e[eN];if(n)return n;for(var t=e.parentNode;t;){if(n=t[eB]||t[eN]){if(t=n.alternate,null!==n.child||null!==t&&null!==t.child)for(e=cL(e);null!==e;){if(t=e[eN])return t;e=cL(e)}return n}t=(e=t).parentNode}return null}function eW(e){if(e=e[eN]||e[eB]){var n=e.tag;if(5===n||6===n||13===n||31===n||26===n||27===n||3===n)return e}return null}function e$(e){var n=e.tag;if(5===n||26===n||27===n||6===n)return e.stateNode;throw Error(l(33))}function eZ(e){var n=e[eF];return n||(n=e[eF]={hoistableStyles:new Map,hoistableScripts:new Map}),n}function eY(e){e[eU]=!0}var eX=new Set,eK={};function eQ(e,n){eG(e,n),eG(e+\"Capture\",n)}function eG(e,n){for(eK[e]=n,e=0;e<n.length;e++)eX.add(n[e])}var eJ=RegExp(\"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"),e0={},e1={};function e2(e,n,t){if(G.call(e1,n)||!G.call(e0,n)&&(eJ.test(n)?e1[n]=!0:(e0[n]=!0,!1)))if(null===t)e.removeAttribute(n);else{switch(typeof t){case\"undefined\":case\"function\":case\"symbol\":e.removeAttribute(n);return;case\"boolean\":var r=n.toLowerCase().slice(0,5);if(\"data-\"!==r&&\"aria-\"!==r)return void e.removeAttribute(n)}e.setAttribute(n,\"\"+t)}}function e4(e,n,t){if(null===t)e.removeAttribute(n);else{switch(typeof t){case\"undefined\":case\"function\":case\"symbol\":case\"boolean\":e.removeAttribute(n);return}e.setAttribute(n,\"\"+t)}}function e5(e,n,t,r){if(null===r)e.removeAttribute(t);else{switch(typeof r){case\"undefined\":case\"function\":case\"symbol\":case\"boolean\":e.removeAttribute(t);return}e.setAttributeNS(n,t,\"\"+r)}}function e3(e){switch(typeof e){case\"bigint\":case\"boolean\":case\"number\":case\"string\":case\"undefined\":case\"object\":return e;default:return\"\"}}function e6(e){var n=e.type;return(e=e.nodeName)&&\"input\"===e.toLowerCase()&&(\"checkbox\"===n||\"radio\"===n)}function e9(e){if(!e._valueTracker){var n=e6(e)?\"checked\":\"value\";e._valueTracker=function(e,n,t){var r=Object.getOwnPropertyDescriptor(e.constructor.prototype,n);if(!e.hasOwnProperty(n)&&void 0!==r&&\"function\"==typeof r.get&&\"function\"==typeof r.set){var o=r.get,a=r.set;return Object.defineProperty(e,n,{configurable:!0,get:function(){return o.call(this)},set:function(e){t=\"\"+e,a.call(this,e)}}),Object.defineProperty(e,n,{enumerable:r.enumerable}),{getValue:function(){return t},setValue:function(e){t=\"\"+e},stopTracking:function(){e._valueTracker=null,delete e[n]}}}}(e,n,\"\"+e[n])}}function e8(e){if(!e)return!1;var n=e._valueTracker;if(!n)return!0;var t=n.getValue(),r=\"\";return e&&(r=e6(e)?e.checked?\"true\":\"false\":e.value),(e=r)!==t&&(n.setValue(e),!0)}function e7(e){if(void 0===(e=e||(\"undefined\"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(n){return e.body}}var ne=/[\\n\"\\\\]/g;function nn(e){return e.replace(ne,function(e){return\"\\\\\"+e.charCodeAt(0).toString(16)+\" \"})}function nt(e,n,t,r,o,a,i,l){e.name=\"\",null!=i&&\"function\"!=typeof i&&\"symbol\"!=typeof i&&\"boolean\"!=typeof i?e.type=i:e.removeAttribute(\"type\"),null!=n?\"number\"===i?(0===n&&\"\"===e.value||e.value!=n)&&(e.value=\"\"+e3(n)):e.value!==\"\"+e3(n)&&(e.value=\"\"+e3(n)):\"submit\"!==i&&\"reset\"!==i||e.removeAttribute(\"value\"),null!=n?no(e,i,e3(n)):null!=t?no(e,i,e3(t)):null!=r&&e.removeAttribute(\"value\"),null==o&&null!=a&&(e.defaultChecked=!!a),null!=o&&(e.checked=o&&\"function\"!=typeof o&&\"symbol\"!=typeof o),null!=l&&\"function\"!=typeof l&&\"symbol\"!=typeof l&&\"boolean\"!=typeof l?e.name=\"\"+e3(l):e.removeAttribute(\"name\")}function nr(e,n,t,r,o,a,i,l){if(null!=a&&\"function\"!=typeof a&&\"symbol\"!=typeof a&&\"boolean\"!=typeof a&&(e.type=a),null!=n||null!=t){if((\"submit\"===a||\"reset\"===a)&&null==n)return void e9(e);t=null!=t?\"\"+e3(t):\"\",n=null!=n?\"\"+e3(n):t,l||n===e.value||(e.value=n),e.defaultValue=n}r=\"function\"!=typeof(r=null!=r?r:o)&&\"symbol\"!=typeof r&&!!r,e.checked=l?e.checked:!!r,e.defaultChecked=!!r,null!=i&&\"function\"!=typeof i&&\"symbol\"!=typeof i&&\"boolean\"!=typeof i&&(e.name=i),e9(e)}function no(e,n,t){\"number\"===n&&e7(e.ownerDocument)===e||e.defaultValue===\"\"+t||(e.defaultValue=\"\"+t)}function na(e,n,t,r){if(e=e.options,n){n={};for(var o=0;o<t.length;o++)n[\"$\"+t[o]]=!0;for(t=0;t<e.length;t++)o=n.hasOwnProperty(\"$\"+e[t].value),e[t].selected!==o&&(e[t].selected=o),o&&r&&(e[t].defaultSelected=!0)}else{for(o=0,t=\"\"+e3(t),n=null;o<e.length;o++){if(e[o].value===t){e[o].selected=!0,r&&(e[o].defaultSelected=!0);return}null!==n||e[o].disabled||(n=e[o])}null!==n&&(n.selected=!0)}}function ni(e,n,t){if(null!=n&&((n=\"\"+e3(n))!==e.value&&(e.value=n),null==t)){e.defaultValue!==n&&(e.defaultValue=n);return}e.defaultValue=null!=t?\"\"+e3(t):\"\"}function nl(e,n,t,r){if(null==n){if(null!=r){if(null!=t)throw Error(l(92));if(z(r)){if(1<r.length)throw Error(l(93));r=r[0]}t=r}null==t&&(t=\"\"),n=t}e.defaultValue=t=e3(n),(r=e.textContent)===t&&\"\"!==r&&null!==r&&(e.value=r),e9(e)}function ns(e,n){if(n){var t=e.firstChild;if(t&&t===e.lastChild&&3===t.nodeType){t.nodeValue=n;return}}e.textContent=n}var nc=new Set(\"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\" \"));function nu(e,n,t){var r=0===n.indexOf(\"--\");null==t||\"boolean\"==typeof t||\"\"===t?r?e.setProperty(n,\"\"):\"float\"===n?e.cssFloat=\"\":e[n]=\"\":r?e.setProperty(n,t):\"number\"!=typeof t||0===t||nc.has(n)?\"float\"===n?e.cssFloat=t:e[n]=(\"\"+t).trim():e[n]=t+\"px\"}function nd(e,n,t){if(null!=n&&\"object\"!=typeof n)throw Error(l(62));if(e=e.style,null!=t){for(var r in t)!t.hasOwnProperty(r)||null!=n&&n.hasOwnProperty(r)||(0===r.indexOf(\"--\")?e.setProperty(r,\"\"):\"float\"===r?e.cssFloat=\"\":e[r]=\"\");for(var o in n)r=n[o],n.hasOwnProperty(o)&&t[o]!==r&&nu(e,o,r)}else for(var a in n)n.hasOwnProperty(a)&&nu(e,a,n[a])}function nf(e){if(-1===e.indexOf(\"-\"))return!1;switch(e){case\"annotation-xml\":case\"color-profile\":case\"font-face\":case\"font-face-src\":case\"font-face-uri\":case\"font-face-format\":case\"font-face-name\":case\"missing-glyph\":return!1;default:return!0}}var np=new Map([[\"acceptCharset\",\"accept-charset\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"],[\"crossOrigin\",\"crossorigin\"],[\"accentHeight\",\"accent-height\"],[\"alignmentBaseline\",\"alignment-baseline\"],[\"arabicForm\",\"arabic-form\"],[\"baselineShift\",\"baseline-shift\"],[\"capHeight\",\"cap-height\"],[\"clipPath\",\"clip-path\"],[\"clipRule\",\"clip-rule\"],[\"colorInterpolation\",\"color-interpolation\"],[\"colorInterpolationFilters\",\"color-interpolation-filters\"],[\"colorProfile\",\"color-profile\"],[\"colorRendering\",\"color-rendering\"],[\"dominantBaseline\",\"dominant-baseline\"],[\"enableBackground\",\"enable-background\"],[\"fillOpacity\",\"fill-opacity\"],[\"fillRule\",\"fill-rule\"],[\"floodColor\",\"flood-color\"],[\"floodOpacity\",\"flood-opacity\"],[\"fontFamily\",\"font-family\"],[\"fontSize\",\"font-size\"],[\"fontSizeAdjust\",\"font-size-adjust\"],[\"fontStretch\",\"font-stretch\"],[\"fontStyle\",\"font-style\"],[\"fontVariant\",\"font-variant\"],[\"fontWeight\",\"font-weight\"],[\"glyphName\",\"glyph-name\"],[\"glyphOrientationHorizontal\",\"glyph-orientation-horizontal\"],[\"glyphOrientationVertical\",\"glyph-orientation-vertical\"],[\"horizAdvX\",\"horiz-adv-x\"],[\"horizOriginX\",\"horiz-origin-x\"],[\"imageRendering\",\"image-rendering\"],[\"letterSpacing\",\"letter-spacing\"],[\"lightingColor\",\"lighting-color\"],[\"markerEnd\",\"marker-end\"],[\"markerMid\",\"marker-mid\"],[\"markerStart\",\"marker-start\"],[\"overlinePosition\",\"overline-position\"],[\"overlineThickness\",\"overline-thickness\"],[\"paintOrder\",\"paint-order\"],[\"panose-1\",\"panose-1\"],[\"pointerEvents\",\"pointer-events\"],[\"renderingIntent\",\"rendering-intent\"],[\"shapeRendering\",\"shape-rendering\"],[\"stopColor\",\"stop-color\"],[\"stopOpacity\",\"stop-opacity\"],[\"strikethroughPosition\",\"strikethrough-position\"],[\"strikethroughThickness\",\"strikethrough-thickness\"],[\"strokeDasharray\",\"stroke-dasharray\"],[\"strokeDashoffset\",\"stroke-dashoffset\"],[\"strokeLinecap\",\"stroke-linecap\"],[\"strokeLinejoin\",\"stroke-linejoin\"],[\"strokeMiterlimit\",\"stroke-miterlimit\"],[\"strokeOpacity\",\"stroke-opacity\"],[\"strokeWidth\",\"stroke-width\"],[\"textAnchor\",\"text-anchor\"],[\"textDecoration\",\"text-decoration\"],[\"textRendering\",\"text-rendering\"],[\"transformOrigin\",\"transform-origin\"],[\"underlinePosition\",\"underline-position\"],[\"underlineThickness\",\"underline-thickness\"],[\"unicodeBidi\",\"unicode-bidi\"],[\"unicodeRange\",\"unicode-range\"],[\"unitsPerEm\",\"units-per-em\"],[\"vAlphabetic\",\"v-alphabetic\"],[\"vHanging\",\"v-hanging\"],[\"vIdeographic\",\"v-ideographic\"],[\"vMathematical\",\"v-mathematical\"],[\"vectorEffect\",\"vector-effect\"],[\"vertAdvY\",\"vert-adv-y\"],[\"vertOriginX\",\"vert-origin-x\"],[\"vertOriginY\",\"vert-origin-y\"],[\"wordSpacing\",\"word-spacing\"],[\"writingMode\",\"writing-mode\"],[\"xmlnsXlink\",\"xmlns:xlink\"],[\"xHeight\",\"x-height\"]]),nh=/^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;function ng(e){return nh.test(\"\"+e)?\"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\":e}function nm(){}var nv=null;function nb(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var ny=null,nx=null;function nw(e){var n=eW(e);if(n&&(e=n.stateNode)){var t=e[eD]||null;switch(e=n.stateNode,n.type){case\"input\":if(nt(e,t.value,t.defaultValue,t.defaultValue,t.checked,t.defaultChecked,t.type,t.name),n=t.name,\"radio\"===t.type&&null!=n){for(t=e;t.parentNode;)t=t.parentNode;for(t=t.querySelectorAll('input[name=\"'+nn(\"\"+n)+'\"][type=\"radio\"]'),n=0;n<t.length;n++){var r=t[n];if(r!==e&&r.form===e.form){var o=r[eD]||null;if(!o)throw Error(l(90));nt(r,o.value,o.defaultValue,o.defaultValue,o.checked,o.defaultChecked,o.type,o.name)}}for(n=0;n<t.length;n++)(r=t[n]).form===e.form&&e8(r)}break;case\"textarea\":ni(e,t.value,t.defaultValue);break;case\"select\":null!=(n=t.value)&&na(e,!!t.multiple,n,!1)}}}var nj=!1;function nk(e,n,t){if(nj)return e(n,t);nj=!0;try{return e(n)}finally{if(nj=!1,(null!==ny||null!==nx)&&(ss(),ny&&(n=ny,e=nx,nx=ny=null,nw(n),e)))for(n=0;n<e.length;n++)nw(e[n])}}function nA(e,n){var t=e.stateNode;if(null===t)return null;var r=t[eD]||null;if(null===r)return null;switch(t=r[n],n){case\"onClick\":case\"onClickCapture\":case\"onDoubleClick\":case\"onDoubleClickCapture\":case\"onMouseDown\":case\"onMouseDownCapture\":case\"onMouseMove\":case\"onMouseMoveCapture\":case\"onMouseUp\":case\"onMouseUpCapture\":case\"onMouseEnter\":(r=!r.disabled)||(r=\"button\"!==(e=e.type)&&\"input\"!==e&&\"select\"!==e&&\"textarea\"!==e),e=!r;break;default:e=!1}if(e)return null;if(t&&\"function\"!=typeof t)throw Error(l(231,n,typeof t));return t}var nO=\"undefined\"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,nC=!1;if(nO)try{var nS={};Object.defineProperty(nS,\"passive\",{get:function(){nC=!0}}),window.addEventListener(\"test\",nS,nS),window.removeEventListener(\"test\",nS,nS)}catch(e){nC=!1}var nE=null,n_=null,nP=null;function nz(){if(nP)return nP;var e,n,t=n_,r=t.length,o=\"value\"in nE?nE.value:nE.textContent,a=o.length;for(e=0;e<r&&t[e]===o[e];e++);var i=r-e;for(n=1;n<=i&&t[r-n]===o[a-n];n++);return nP=o.slice(e,1<n?1-n:void 0)}function nL(e){var n=e.keyCode;return\"charCode\"in e?0===(e=e.charCode)&&13===n&&(e=13):e=n,10===e&&(e=13),32<=e||13===e?e:0}function nT(){return!0}function nR(){return!1}function nN(e){function n(n,t,r,o,a){for(var i in this._reactName=n,this._targetInst=r,this.type=t,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(n=e[i],this[i]=n?n(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?nT:nR,this.isPropagationStopped=nR,this}return f(n.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():\"unknown\"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nT)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():\"unknown\"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nT)},persist:function(){},isPersistent:nT}),n}var nD,nB,nM,nI,nH,nF={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},nU=nN(nF),nV=f({},nF,{view:0,detail:0}),nq=nN(nV),nW=f({},nV,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:n2,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return\"movementX\"in e?e.movementX:(e!==nH&&(nH&&\"mousemove\"===e.type?(nM=e.screenX-nH.screenX,nI=e.screenY-nH.screenY):nI=nM=0,nH=e),nM)},movementY:function(e){return\"movementY\"in e?e.movementY:nI}}),n$=nN(nW),nZ=nN(f({},nW,{dataTransfer:0})),nY=nN(f({},nV,{relatedTarget:0})),nX=nN(f({},nF,{animationName:0,elapsedTime:0,pseudoElement:0})),nK=nN(f({},nF,{clipboardData:function(e){return\"clipboardData\"in e?e.clipboardData:window.clipboardData}})),nQ=nN(f({},nF,{data:0})),nG={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},nJ={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},n0={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function n1(e){var n=this.nativeEvent;return n.getModifierState?n.getModifierState(e):!!(e=n0[e])&&!!n[e]}function n2(){return n1}var n4=nN(f({},nV,{key:function(e){if(e.key){var n=nG[e.key]||e.key;if(\"Unidentified\"!==n)return n}return\"keypress\"===e.type?13===(e=nL(e))?\"Enter\":String.fromCharCode(e):\"keydown\"===e.type||\"keyup\"===e.type?nJ[e.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:n2,charCode:function(e){return\"keypress\"===e.type?nL(e):0},keyCode:function(e){return\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0},which:function(e){return\"keypress\"===e.type?nL(e):\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0}})),n5=nN(f({},nW,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),n3=nN(f({},nV,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:n2})),n6=nN(f({},nF,{propertyName:0,elapsedTime:0,pseudoElement:0})),n9=nN(f({},nW,{deltaX:function(e){return\"deltaX\"in e?e.deltaX:\"wheelDeltaX\"in e?-e.wheelDeltaX:0},deltaY:function(e){return\"deltaY\"in e?e.deltaY:\"wheelDeltaY\"in e?-e.wheelDeltaY:\"wheelDelta\"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0})),n8=nN(f({},nF,{newState:0,oldState:0})),n7=[9,13,27,32],te=nO&&\"CompositionEvent\"in window,tn=null;nO&&\"documentMode\"in document&&(tn=document.documentMode);var tt=nO&&\"TextEvent\"in window&&!tn,tr=nO&&(!te||tn&&8<tn&&11>=tn),to=!1;function ta(e,n){switch(e){case\"keyup\":return -1!==n7.indexOf(n.keyCode);case\"keydown\":return 229!==n.keyCode;case\"keypress\":case\"mousedown\":case\"focusout\":return!0;default:return!1}}function ti(e){return\"object\"==typeof(e=e.detail)&&\"data\"in e?e.data:null}var tl=!1,ts={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function tc(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return\"input\"===n?!!ts[e.type]:\"textarea\"===n}function tu(e,n,t,r){ny?nx?nx.push(r):nx=[r]:ny=r,0<(n=ce(n,\"onChange\")).length&&(t=new nU(\"onChange\",\"change\",null,t,r),e.push({event:t,listeners:n}))}var td=null,tf=null;function tp(e){s2(e,0)}function th(e){if(e8(e$(e)))return e}function tg(e,n){if(\"change\"===e)return n}var tm=!1;if(nO){if(nO){var tv=\"oninput\"in document;if(!tv){var tb=document.createElement(\"div\");tb.setAttribute(\"oninput\",\"return;\"),tv=\"function\"==typeof tb.oninput}r=tv}else r=!1;tm=r&&(!document.documentMode||9<document.documentMode)}function ty(){td&&(td.detachEvent(\"onpropertychange\",tx),tf=td=null)}function tx(e){if(\"value\"===e.propertyName&&th(tf)){var n=[];tu(n,tf,e,nb(e)),nk(tp,n)}}function tw(e,n,t){\"focusin\"===e?(ty(),td=n,tf=t,td.attachEvent(\"onpropertychange\",tx)):\"focusout\"===e&&ty()}function tj(e){if(\"selectionchange\"===e||\"keyup\"===e||\"keydown\"===e)return th(tf)}function tk(e,n){if(\"click\"===e)return th(n)}function tA(e,n){if(\"input\"===e||\"change\"===e)return th(n)}var tO=\"function\"==typeof Object.is?Object.is:function(e,n){return e===n&&(0!==e||1/e==1/n)||e!=e&&n!=n};function tC(e,n){if(tO(e,n))return!0;if(\"object\"!=typeof e||null===e||\"object\"!=typeof n||null===n)return!1;var t=Object.keys(e),r=Object.keys(n);if(t.length!==r.length)return!1;for(r=0;r<t.length;r++){var o=t[r];if(!G.call(n,o)||!tO(e[o],n[o]))return!1}return!0}function tS(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function tE(e,n){var t,r=tS(e);for(e=0;r;){if(3===r.nodeType){if(t=e+r.textContent.length,e<=n&&t>=n)return{node:r,offset:n-e};e=t}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=tS(r)}}function t_(e){e=null!=e&&null!=e.ownerDocument&&null!=e.ownerDocument.defaultView?e.ownerDocument.defaultView:window;for(var n=e7(e.document);n instanceof e.HTMLIFrameElement;){try{var t=\"string\"==typeof n.contentWindow.location.href}catch(e){t=!1}if(t)e=n.contentWindow;else break;n=e7(e.document)}return n}function tP(e){var n=e&&e.nodeName&&e.nodeName.toLowerCase();return n&&(\"input\"===n&&(\"text\"===e.type||\"search\"===e.type||\"tel\"===e.type||\"url\"===e.type||\"password\"===e.type)||\"textarea\"===n||\"true\"===e.contentEditable)}var tz=nO&&\"documentMode\"in document&&11>=document.documentMode,tL=null,tT=null,tR=null,tN=!1;function tD(e,n,t){var r=t.window===t?t.document:9===t.nodeType?t:t.ownerDocument;tN||null==tL||tL!==e7(r)||(r=\"selectionStart\"in(r=tL)&&tP(r)?{start:r.selectionStart,end:r.selectionEnd}:{anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},tR&&tC(tR,r)||(tR=r,0<(r=ce(tT,\"onSelect\")).length&&(n=new nU(\"onSelect\",\"select\",null,n,t),e.push({event:n,listeners:r}),n.target=tL)))}function tB(e,n){var t={};return t[e.toLowerCase()]=n.toLowerCase(),t[\"Webkit\"+e]=\"webkit\"+n,t[\"Moz\"+e]=\"moz\"+n,t}var tM={animationend:tB(\"Animation\",\"AnimationEnd\"),animationiteration:tB(\"Animation\",\"AnimationIteration\"),animationstart:tB(\"Animation\",\"AnimationStart\"),transitionrun:tB(\"Transition\",\"TransitionRun\"),transitionstart:tB(\"Transition\",\"TransitionStart\"),transitioncancel:tB(\"Transition\",\"TransitionCancel\"),transitionend:tB(\"Transition\",\"TransitionEnd\")},tI={},tH={};function tF(e){if(tI[e])return tI[e];if(!tM[e])return e;var n,t=tM[e];for(n in t)if(t.hasOwnProperty(n)&&n in tH)return tI[e]=t[n];return e}nO&&(tH=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete tM.animationend.animation,delete tM.animationiteration.animation,delete tM.animationstart.animation),\"TransitionEvent\"in window||delete tM.transitionend.transition);var tU=tF(\"animationend\"),tV=tF(\"animationiteration\"),tq=tF(\"animationstart\"),tW=tF(\"transitionrun\"),t$=tF(\"transitionstart\"),tZ=tF(\"transitioncancel\"),tY=tF(\"transitionend\"),tX=new Map,tK=\"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\" \");function tQ(e,n){tX.set(e,n),eQ(n,[e])}tK.push(\"scrollEnd\");var tG=\"function\"==typeof reportError?reportError:function(e){if(\"object\"==typeof window&&\"function\"==typeof window.ErrorEvent){var n=new window.ErrorEvent(\"error\",{bubbles:!0,cancelable:!0,message:\"object\"==typeof e&&null!==e&&\"string\"==typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(n))return}else if(\"object\"==typeof process&&\"function\"==typeof process.emit)return void process.emit(\"uncaughtException\",e);console.error(e)},tJ=[],t0=0,t1=0;function t2(){for(var e=t0,n=t1=t0=0;n<e;){var t=tJ[n];tJ[n++]=null;var r=tJ[n];tJ[n++]=null;var o=tJ[n];tJ[n++]=null;var a=tJ[n];if(tJ[n++]=null,null!==r&&null!==o){var i=r.pending;null===i?o.next=o:(o.next=i.next,i.next=o),r.pending=o}0!==a&&t6(t,o,a)}}function t4(e,n,t,r){tJ[t0++]=e,tJ[t0++]=n,tJ[t0++]=t,tJ[t0++]=r,t1|=r,e.lanes|=r,null!==(e=e.alternate)&&(e.lanes|=r)}function t5(e,n,t,r){return t4(e,n,t,r),t9(e)}function t3(e,n){return t4(e,null,null,n),t9(e)}function t6(e,n,t){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t);for(var o=!1,a=e.return;null!==a;)a.childLanes|=t,null!==(r=a.alternate)&&(r.childLanes|=t),22===a.tag&&(null===(e=a.stateNode)||1&e._visibility||(o=!0)),e=a,a=a.return;return 3===e.tag?(a=e.stateNode,o&&null!==n&&(o=31-eg(t),null===(r=(e=a.hiddenUpdates)[o])?e[o]=[n]:r.push(n),n.lane=0x20000000|t),a):null}function t9(e){if(50<se)throw se=0,sn=null,Error(l(185));for(var n=e.return;null!==n;)n=(e=n).return;return 3===e.tag?e.stateNode:null}var t8={};function t7(e,n,t,r){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function re(e,n,t,r){return new t7(e,n,t,r)}function rn(e){return!(!(e=e.prototype)||!e.isReactComponent)}function rt(e,n){var t=e.alternate;return null===t?((t=re(e.tag,n,e.key,e.mode)).elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=0x3e00000&e.flags,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=null===n?null:{lanes:n.lanes,firstContext:n.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t.refCleanup=e.refCleanup,t}function rr(e,n){e.flags&=0x3e00002;var t=e.alternate;return null===t?(e.childLanes=0,e.lanes=n,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=t.childLanes,e.lanes=t.lanes,e.child=t.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=t.memoizedProps,e.memoizedState=t.memoizedState,e.updateQueue=t.updateQueue,e.type=t.type,e.dependencies=null===(n=t.dependencies)?null:{lanes:n.lanes,firstContext:n.firstContext}),e}function ro(e,n,t,r,o,a){var i=0;if(r=e,\"function\"==typeof e)rn(e)&&(i=1);else if(\"string\"==typeof e)i=!function(e,n,t){if(1===t||null!=n.itemProp)return!1;switch(e){case\"meta\":case\"title\":return!0;case\"style\":if(\"string\"!=typeof n.precedence||\"string\"!=typeof n.href||\"\"===n.href)break;return!0;case\"link\":if(\"string\"!=typeof n.rel||\"string\"!=typeof n.href||\"\"===n.href||n.onLoad||n.onError)break;if(\"stylesheet\"===n.rel)return e=n.disabled,\"string\"==typeof n.precedence&&null==e;return!0;case\"script\":if(n.async&&\"function\"!=typeof n.async&&\"symbol\"!=typeof n.async&&!n.onLoad&&!n.onError&&n.src&&\"string\"==typeof n.src)return!0}return!1}(e,t,H.current)?\"html\"===e||\"head\"===e||\"body\"===e?27:5:26;else e:switch(e){case C:return(e=re(31,t,n,o)).elementType=C,e.lanes=a,e;case m:return ra(t.children,o,a,n);case v:i=8,o|=24;break;case b:return(e=re(12,t,n,2|o)).elementType=b,e.lanes=a,e;case j:return(e=re(13,t,n,o)).elementType=j,e.lanes=a,e;case k:return(e=re(19,t,n,o)).elementType=k,e.lanes=a,e;default:if(\"object\"==typeof e&&null!==e)switch(e.$$typeof){case x:i=10;break e;case y:i=9;break e;case w:i=11;break e;case A:i=14;break e;case O:i=16,r=null;break e}i=29,t=Error(l(130,null===e?\"null\":typeof e,\"\")),r=null}return(n=re(i,t,n,o)).elementType=e,n.type=r,n.lanes=a,n}function ra(e,n,t,r){return(e=re(7,e,r,n)).lanes=t,e}function ri(e,n,t){return(e=re(6,e,null,n)).lanes=t,e}function rl(e){var n=re(18,null,null,0);return n.stateNode=e,n}function rs(e,n,t){return(n=re(4,null!==e.children?e.children:[],e.key,n)).lanes=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}var rc=new WeakMap;function ru(e,n){if(\"object\"==typeof e&&null!==e){var t=rc.get(e);return void 0!==t?t:(n={value:e,source:n,stack:Q(n)},rc.set(e,n),n)}return{value:e,source:n,stack:Q(n)}}var rd=[],rf=0,rp=null,rh=0,rg=[],rm=0,rv=null,rb=1,ry=\"\";function rx(e,n){rd[rf++]=rh,rd[rf++]=rp,rp=e,rh=n}function rw(e,n,t){rg[rm++]=rb,rg[rm++]=ry,rg[rm++]=rv,rv=e;var r=rb;e=ry;var o=32-eg(r)-1;r&=~(1<<o),t+=1;var a=32-eg(n)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,rb=1<<32-eg(n)+o|t<<o|r,ry=a+e}else rb=1<<a|t<<o|r,ry=e}function rj(e){null!==e.return&&(rx(e,1),rw(e,1,0))}function rk(e){for(;e===rp;)rp=rd[--rf],rd[rf]=null,rh=rd[--rf],rd[rf]=null;for(;e===rv;)rv=rg[--rm],rg[rm]=null,ry=rg[--rm],rg[rm]=null,rb=rg[--rm],rg[rm]=null}function rA(e,n){rg[rm++]=rb,rg[rm++]=ry,rg[rm++]=rv,rb=n.id,ry=n.overflow,rv=e}var rO=null,rC=null,rS=!1,rE=null,r_=!1,rP=Error(l(519));function rz(e){var n=Error(l(418,1<arguments.length&&void 0!==arguments[1]&&arguments[1]?\"text\":\"HTML\",\"\"));throw rB(ru(n,e)),rP}function rL(e){var n=e.stateNode,t=e.type,r=e.memoizedProps;switch(n[eN]=e,n[eD]=r,t){case\"dialog\":s4(\"cancel\",n),s4(\"close\",n);break;case\"iframe\":case\"object\":case\"embed\":s4(\"load\",n);break;case\"video\":case\"audio\":for(t=0;t<s0.length;t++)s4(s0[t],n);break;case\"source\":s4(\"error\",n);break;case\"img\":case\"image\":case\"link\":s4(\"error\",n),s4(\"load\",n);break;case\"details\":s4(\"toggle\",n);break;case\"input\":s4(\"invalid\",n),nr(n,r.value,r.defaultValue,r.checked,r.defaultChecked,r.type,r.name,!0);break;case\"select\":s4(\"invalid\",n);break;case\"textarea\":s4(\"invalid\",n),nl(n,r.value,r.defaultValue,r.children)}\"string\"!=typeof(t=r.children)&&\"number\"!=typeof t&&\"bigint\"!=typeof t||n.textContent===\"\"+t||!0===r.suppressHydrationWarning||ci(n.textContent,t)?(null!=r.popover&&(s4(\"beforetoggle\",n),s4(\"toggle\",n)),null!=r.onScroll&&s4(\"scroll\",n),null!=r.onScrollEnd&&s4(\"scrollend\",n),null!=r.onClick&&(n.onclick=nm),n=!0):n=!1,n||rz(e,!0)}function rT(e){for(rO=e.return;rO;)switch(rO.tag){case 5:case 31:case 13:r_=!1;return;case 27:case 3:r_=!0;return;default:rO=rO.return}}function rR(e){if(e!==rO)return!1;if(!rS)return rT(e),rS=!0,!1;var n,t=e.tag;if((n=3!==t&&27!==t)&&((n=5===t)&&(n=\"form\"===(n=e.type)||\"button\"===n||cg(e.type,e.memoizedProps)),n=!n),n&&rC&&rz(e),rT(e),13===t){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(l(317));rC=cz(e)}else if(31===t){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(l(317));rC=cz(e)}else 27===t?(t=rC,cj(e.type)?(e=cP,cP=null,rC=e):rC=t):rC=rO?c_(e.stateNode.nextSibling):null;return!0}function rN(){rC=rO=null,rS=!1}function rD(){var e=rE;return null!==e&&(null===lQ?lQ=e:lQ.push.apply(lQ,e),rE=null),e}function rB(e){null===rE?rE=[e]:rE.push(e)}var rM=B(null),rI=null,rH=null;function rF(e,n,t){I(rM,n._currentValue),n._currentValue=t}function rU(e){e._currentValue=rM.current,M(rM)}function rV(e,n,t){for(;null!==e;){var r=e.alternate;if((e.childLanes&n)!==n?(e.childLanes|=n,null!==r&&(r.childLanes|=n)):null!==r&&(r.childLanes&n)!==n&&(r.childLanes|=n),e===t)break;e=e.return}}function rq(e,n,t,r){var o=e.child;for(null!==o&&(o.return=e);null!==o;){var a=o.dependencies;if(null!==a){var i=o.child;a=a.firstContext;e:for(;null!==a;){var s=a;a=o;for(var c=0;c<n.length;c++)if(s.context===n[c]){a.lanes|=t,null!==(s=a.alternate)&&(s.lanes|=t),rV(a.return,t,e),r||(i=null);break e}a=s.next}}else if(18===o.tag){if(null===(i=o.return))throw Error(l(341));i.lanes|=t,null!==(a=i.alternate)&&(a.lanes|=t),rV(i,t,e),i=null}else i=o.child;if(null!==i)i.return=o;else for(i=o;null!==i;){if(i===e){i=null;break}if(null!==(o=i.sibling)){o.return=i.return,i=o;break}i=i.return}o=i}}function rW(e,n,t,r){e=null;for(var o=n,a=!1;null!==o;){if(!a){if(0!=(524288&o.flags))a=!0;else if(0!=(262144&o.flags))break}if(10===o.tag){var i=o.alternate;if(null===i)throw Error(l(387));if(null!==(i=i.memoizedProps)){var s=o.type;tO(o.pendingProps.value,i.value)||(null!==e?e.push(s):e=[s])}}else if(o===V.current){if(null===(i=o.alternate))throw Error(l(387));i.memoizedState.memoizedState!==o.memoizedState.memoizedState&&(null!==e?e.push(c6):e=[c6])}o=o.return}null!==e&&rq(n,e,t,r),n.flags|=262144}function r$(e){for(e=e.firstContext;null!==e;){if(!tO(e.context._currentValue,e.memoizedValue))return!0;e=e.next}return!1}function rZ(e){rI=e,rH=null,null!==(e=e.dependencies)&&(e.firstContext=null)}function rY(e){return rK(rI,e)}function rX(e,n){return null===rI&&rZ(e),rK(e,n)}function rK(e,n){var t=n._currentValue;if(n={context:n,memoizedValue:t,next:null},null===rH){if(null===e)throw Error(l(308));rH=n,e.dependencies={lanes:0,firstContext:n},e.flags|=524288}else rH=rH.next=n;return t}var rQ=\"undefined\"!=typeof AbortController?AbortController:function(){var e=[],n=this.signal={aborted:!1,addEventListener:function(n,t){e.push(t)}};this.abort=function(){n.aborted=!0,e.forEach(function(e){return e()})}},rG=o.unstable_scheduleCallback,rJ=o.unstable_NormalPriority,r0={$$typeof:x,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function r1(){return{controller:new rQ,data:new Map,refCount:0}}function r2(e){e.refCount--,0===e.refCount&&rG(rJ,function(){e.controller.abort()})}var r4=null,r5=0,r3=0,r6=null;function r9(){if(0==--r5&&null!==r4){null!==r6&&(r6.status=\"fulfilled\");var e=r4;r4=null,r3=0,r6=null;for(var n=0;n<e.length;n++)(0,e[n])()}}var r8=L.S;L.S=function(e,n){\"object\"==typeof n&&null!==n&&\"function\"==typeof n.then&&function(e,n){if(null===r4){var t=r4=[];r5=0,r3=sX(),r6={status:\"pending\",value:void 0,then:function(e){t.push(e)}}}r5++,n.then(r9,r9)}(0,n),null!==r8&&r8(e,n)};var r7=B(null);function oe(){var e=r7.current;return null!==e?e:lN.pooledCache}function on(e,n){null===n?I(r7,r7.current):I(r7,n.pool)}function ot(){var e=oe();return null===e?null:{parent:r0._currentValue,pool:e}}var or=Error(l(460)),oo=Error(l(474)),oa=Error(l(542)),oi={then:function(){}};function ol(e){return\"fulfilled\"===(e=e.status)||\"rejected\"===e}function os(e,n,t){switch(void 0===(t=e[t])?e.push(n):t!==n&&(n.then(nm,nm),n=t),n.status){case\"fulfilled\":return n.value;case\"rejected\":throw od(e=n.reason),e;default:if(\"string\"==typeof n.status)n.then(nm,nm);else{if(null!==(e=lN)&&100<e.shellSuspendCounter)throw Error(l(482));(e=n).status=\"pending\",e.then(function(e){if(\"pending\"===n.status){var t=n;t.status=\"fulfilled\",t.value=e}},function(e){if(\"pending\"===n.status){var t=n;t.status=\"rejected\",t.reason=e}})}switch(n.status){case\"fulfilled\":return n.value;case\"rejected\":throw od(e=n.reason),e}throw oc=n,or}}var oc=null;function ou(){if(null===oc)throw Error(l(459));var e=oc;return oc=null,e}function od(e){if(e===or||e===oa)throw Error(l(483))}var of=null,op=0;function oh(e){var n=op;return op+=1,null===of&&(of=[]),os(of,e,n)}function og(e,n){e.ref=void 0!==(n=n.props.ref)?n:null}function om(e,n){if(n.$$typeof===p)throw Error(l(525));throw Error(l(31,\"[object Object]\"===(e=Object.prototype.toString.call(n))?\"object with keys {\"+Object.keys(n).join(\", \")+\"}\":e))}function ov(e){return(0,e._init)(e._payload)}function ob(e){function n(n,t){if(e){var r=n.deletions;null===r?(n.deletions=[t],n.flags|=16):r.push(t)}}function t(t,r){if(!e)return null;for(;null!==r;)n(t,r),r=r.sibling;return null}function r(e){for(var n=new Map;null!==e;)null!==e.key?n.set(e.key,e):n.set(e.index,e),e=e.sibling;return n}function o(e,n){return(e=rt(e,n)).index=0,e.sibling=null,e}function a(n,t,r){return(n.index=r,e)?null!==(r=n.alternate)?(r=r.index)<t?(n.flags|=0x4000002,t):r:(n.flags|=0x4000002,t):(n.flags|=1048576,t)}function i(n){return e&&null===n.alternate&&(n.flags|=0x4000002),n}function s(e,n,t,r){return null===n||6!==n.tag?(n=ri(t,e.mode,r)).return=e:(n=o(n,t)).return=e,n}function c(e,n,t,r){var a=t.type;return a===m?d(e,n,t.props.children,r,t.key):(null!==n&&(n.elementType===a||\"object\"==typeof a&&null!==a&&a.$$typeof===O&&ov(a)===n.type)?og(n=o(n,t.props),t):og(n=ro(t.type,t.key,t.props,null,e.mode,r),t),n.return=e,n)}function u(e,n,t,r){return null===n||4!==n.tag||n.stateNode.containerInfo!==t.containerInfo||n.stateNode.implementation!==t.implementation?(n=rs(t,e.mode,r)).return=e:(n=o(n,t.children||[])).return=e,n}function d(e,n,t,r,a){return null===n||7!==n.tag?(n=ra(t,e.mode,r,a)).return=e:(n=o(n,t)).return=e,n}function f(e,n,t){if(\"string\"==typeof n&&\"\"!==n||\"number\"==typeof n||\"bigint\"==typeof n)return(n=ri(\"\"+n,e.mode,t)).return=e,n;if(\"object\"==typeof n&&null!==n){switch(n.$$typeof){case h:return og(t=ro(n.type,n.key,n.props,null,e.mode,t),n),t.return=e,t;case g:return(n=rs(n,e.mode,t)).return=e,n;case O:return f(e,n=(0,n._init)(n._payload),t)}if(z(n)||_(n))return(n=ra(n,e.mode,t,null)).return=e,n;if(\"function\"==typeof n.then)return f(e,oh(n),t);if(n.$$typeof===x)return f(e,rX(e,n),t);om(e,n)}return null}function p(e,n,t,r){var o=null!==n?n.key:null;if(\"string\"==typeof t&&\"\"!==t||\"number\"==typeof t||\"bigint\"==typeof t)return null!==o?null:s(e,n,\"\"+t,r);if(\"object\"==typeof t&&null!==t){switch(t.$$typeof){case h:return t.key===o?c(e,n,t,r):null;case g:return t.key===o?u(e,n,t,r):null;case O:return p(e,n,t=(o=t._init)(t._payload),r)}if(z(t)||_(t))return null!==o?null:d(e,n,t,r,null);if(\"function\"==typeof t.then)return p(e,n,oh(t),r);if(t.$$typeof===x)return p(e,n,rX(e,t),r);om(e,t)}return null}function v(e,n,t,r,o){if(\"string\"==typeof r&&\"\"!==r||\"number\"==typeof r||\"bigint\"==typeof r)return s(n,e=e.get(t)||null,\"\"+r,o);if(\"object\"==typeof r&&null!==r){switch(r.$$typeof){case h:return c(n,e=e.get(null===r.key?t:r.key)||null,r,o);case g:return u(n,e=e.get(null===r.key?t:r.key)||null,r,o);case O:return v(e,n,t,r=(0,r._init)(r._payload),o)}if(z(r)||_(r))return d(n,e=e.get(t)||null,r,o,null);if(\"function\"==typeof r.then)return v(e,n,t,oh(r),o);if(r.$$typeof===x)return v(e,n,t,rX(n,r),o);om(n,r)}return null}return function(s,c,u,d){try{op=0;var b=function s(c,u,d,b){if(\"object\"==typeof d&&null!==d&&d.type===m&&null===d.key&&(d=d.props.children),\"object\"==typeof d&&null!==d){switch(d.$$typeof){case h:e:{for(var y=d.key;null!==u;){if(u.key===y){if((y=d.type)===m){if(7===u.tag){t(c,u.sibling),(b=o(u,d.props.children)).return=c,c=b;break e}}else if(u.elementType===y||\"object\"==typeof y&&null!==y&&y.$$typeof===O&&ov(y)===u.type){t(c,u.sibling),og(b=o(u,d.props),d),b.return=c,c=b;break e}t(c,u);break}n(c,u),u=u.sibling}d.type===m?(b=ra(d.props.children,c.mode,b,d.key)).return=c:(og(b=ro(d.type,d.key,d.props,null,c.mode,b),d),b.return=c),c=b}return i(c);case g:e:{for(y=d.key;null!==u;){if(u.key===y)if(4===u.tag&&u.stateNode.containerInfo===d.containerInfo&&u.stateNode.implementation===d.implementation){t(c,u.sibling),(b=o(u,d.children||[])).return=c,c=b;break e}else{t(c,u);break}n(c,u),u=u.sibling}(b=rs(d,c.mode,b)).return=c,c=b}return i(c);case O:return s(c,u,d=(y=d._init)(d._payload),b)}if(z(d))return function(o,i,l,s){for(var c=null,u=null,d=i,h=i=0,g=null;null!==d&&h<l.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var m=p(o,d,l[h],s);if(null===m){null===d&&(d=g);break}e&&d&&null===m.alternate&&n(o,d),i=a(m,i,h),null===u?c=m:u.sibling=m,u=m,d=g}if(h===l.length)return t(o,d),rS&&rx(o,h),c;if(null===d){for(;h<l.length;h++)null!==(d=f(o,l[h],s))&&(i=a(d,i,h),null===u?c=d:u.sibling=d,u=d);return rS&&rx(o,h),c}for(d=r(d);h<l.length;h++)null!==(g=v(d,o,h,l[h],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),i=a(g,i,h),null===u?c=g:u.sibling=g,u=g);return e&&d.forEach(function(e){return n(o,e)}),rS&&rx(o,h),c}(c,u,d,b);if(_(d)){if(\"function\"!=typeof(y=_(d)))throw Error(l(150));return function(o,i,s,c){if(null==s)throw Error(l(151));for(var u=null,d=null,h=i,g=i=0,m=null,b=s.next();null!==h&&!b.done;g++,b=s.next()){h.index>g?(m=h,h=null):m=h.sibling;var y=p(o,h,b.value,c);if(null===y){null===h&&(h=m);break}e&&h&&null===y.alternate&&n(o,h),i=a(y,i,g),null===d?u=y:d.sibling=y,d=y,h=m}if(b.done)return t(o,h),rS&&rx(o,g),u;if(null===h){for(;!b.done;g++,b=s.next())null!==(b=f(o,b.value,c))&&(i=a(b,i,g),null===d?u=b:d.sibling=b,d=b);return rS&&rx(o,g),u}for(h=r(h);!b.done;g++,b=s.next())null!==(b=v(h,o,g,b.value,c))&&(e&&null!==b.alternate&&h.delete(null===b.key?g:b.key),i=a(b,i,g),null===d?u=b:d.sibling=b,d=b);return e&&h.forEach(function(e){return n(o,e)}),rS&&rx(o,g),u}(c,u,d=y.call(d),b)}if(\"function\"==typeof d.then)return s(c,u,oh(d),b);if(d.$$typeof===x)return s(c,u,rX(c,d),b);om(c,d)}return\"string\"==typeof d&&\"\"!==d||\"number\"==typeof d||\"bigint\"==typeof d?(d=\"\"+d,null!==u&&6===u.tag?(t(c,u.sibling),(b=o(u,d)).return=c):(t(c,u),(b=ri(d,c.mode,b)).return=c),i(c=b)):t(c,u)}(s,c,u,d);return of=null,b}catch(e){if(e===or||e===oa)throw e;var y=re(29,e,null,s.mode);return y.lanes=d,y.return=s,y}finally{}}}var oy=ob(!0),ox=ob(!1),ow=!1;function oj(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function ok(e,n){e=e.updateQueue,n.updateQueue===e&&(n.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function oA(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function oO(e,n,t){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&lR)){var o=r.pending;return null===o?n.next=n:(n.next=o.next,o.next=n),r.pending=n,n=t9(e),t6(e,null,t),n}return t4(e,r,n,t),t9(e)}function oC(e,n,t){if(null!==(n=n.updateQueue)&&(n=n.shared,0!=(4194048&t))){var r=n.lanes;r&=e.pendingLanes,t|=r,n.lanes=t,eE(e,t)}}function oS(e,n){var t=e.updateQueue,r=e.alternate;if(null!==r&&t===(r=r.updateQueue)){var o=null,a=null;if(null!==(t=t.firstBaseUpdate)){do{var i={lane:t.lane,tag:t.tag,payload:t.payload,callback:null,next:null};null===a?o=a=i:a=a.next=i,t=t.next}while(null!==t);null===a?o=a=n:a=a.next=n}else o=a=n;t={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=t;return}null===(e=t.lastBaseUpdate)?t.firstBaseUpdate=n:e.next=n,t.lastBaseUpdate=n}var oE=!1;function o_(){if(oE){var e=r6;if(null!==e)throw e}}function oP(e,n,t,r){oE=!1;var o=e.updateQueue;ow=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,l=o.shared.pending;if(null!==l){o.shared.pending=null;var s=l,c=s.next;s.next=null,null===i?a=c:i.next=c,i=s;var u=e.alternate;null!==u&&(l=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===l?u.firstBaseUpdate=c:l.next=c,u.lastBaseUpdate=s)}if(null!==a){var d=o.baseState;for(i=0,u=c=s=null,l=a;;){var p=-0x20000001&l.lane,h=p!==l.lane;if(h?(lB&p)===p:(r&p)===p){0!==p&&p===r3&&(oE=!0),null!==u&&(u=u.next={lane:0,tag:l.tag,payload:l.payload,callback:null,next:null});e:{var g=e,m=l;switch(p=n,m.tag){case 1:if(\"function\"==typeof(g=m.payload)){d=g.call(t,d,p);break e}d=g;break e;case 3:g.flags=-65537&g.flags|128;case 0:if(null==(p=\"function\"==typeof(g=m.payload)?g.call(t,d,p):g))break e;d=f({},d,p);break e;case 2:ow=!0}}null!==(p=l.callback)&&(e.flags|=64,h&&(e.flags|=8192),null===(h=o.callbacks)?o.callbacks=[p]:h.push(p))}else h={lane:p,tag:l.tag,payload:l.payload,callback:l.callback,next:null},null===u?(c=u=h,s=d):u=u.next=h,i|=p;if(null===(l=l.next))if(null===(l=o.shared.pending))break;else l=(h=l).next,h.next=null,o.lastBaseUpdate=h,o.shared.pending=null}null===u&&(s=d),o.baseState=s,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null===a&&(o.shared.lanes=0),lW|=i,e.lanes=i,e.memoizedState=d}}function oz(e,n){if(\"function\"!=typeof e)throw Error(l(191,e));e.call(n)}function oL(e,n){var t=e.callbacks;if(null!==t)for(e.callbacks=null,e=0;e<t.length;e++)oz(t[e],n)}var oT=B(null),oR=B(0);function oN(e,n){I(oR,e=lV),I(oT,n),lV=e|n.baseLanes}function oD(){I(oR,lV),I(oT,oT.current)}function oB(){lV=oR.current,M(oT),M(oR)}var oM=B(null),oI=null;function oH(e){var n=e.alternate;I(oW,1&oW.current),I(oM,e),null===oI&&(null===n||null!==oT.current?oI=e:null!==n.memoizedState&&(oI=e))}function oF(e){I(oW,oW.current),I(oM,e),null===oI&&(oI=e)}function oU(e){22===e.tag?(I(oW,oW.current),I(oM,e),null===oI&&(oI=e)):oV(e)}function oV(){I(oW,oW.current),I(oM,oM.current)}function oq(e){M(oM),oI===e&&(oI=null),M(oW)}var oW=B(0);function o$(e){for(var n=e;null!==n;){if(13===n.tag){var t=n.memoizedState;if(null!==t&&(null===(t=t.dehydrated)||cS(t)||cE(t)))return n}else if(19===n.tag&&(\"forwards\"===n.memoizedProps.revealOrder||\"backwards\"===n.memoizedProps.revealOrder||\"unstable_legacy-backwards\"===n.memoizedProps.revealOrder||\"together\"===n.memoizedProps.revealOrder)){if(0!=(128&n.flags))return n}else if(null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}return null}var oZ=0,oY=null,oX=null,oK=null,oQ=!1,oG=!1,oJ=!1,o0=0,o1=0,o2=null,o4=0;function o5(){throw Error(l(321))}function o3(e,n){if(null===n)return!1;for(var t=0;t<n.length&&t<e.length;t++)if(!tO(e[t],n[t]))return!1;return!0}function o6(e,n,t,r,o,a){return oZ=a,oY=n,n.memoizedState=null,n.updateQueue=null,n.lanes=0,L.H=null===e||null===e.memoizedState?it:ir,oJ=!1,a=t(r,o),oJ=!1,oG&&(a=o8(n,t,r,o)),o9(e),a}function o9(e){L.H=ie;var n=null!==oX&&null!==oX.next;if(oZ=0,oK=oX=oY=null,oQ=!1,o1=0,o2=null,n)throw Error(l(300));null===e||ix||null!==(e=e.dependencies)&&r$(e)&&(ix=!0)}function o8(e,n,t,r){oY=e;var o=0;do{if(oG&&(o2=null),o1=0,oG=!1,25<=o)throw Error(l(301));if(o+=1,oK=oX=null,null!=e.updateQueue){var a=e.updateQueue;a.lastEffect=null,a.events=null,a.stores=null,null!=a.memoCache&&(a.memoCache.index=0)}L.H=io,a=n(t,r)}while(oG);return a}function o7(){var e=L.H,n=e.useState()[0];return n=\"function\"==typeof n.then?ai(n):n,e=e.useState()[0],(null!==oX?oX.memoizedState:null)!==e&&(oY.flags|=1024),n}function ae(){var e=0!==o0;return o0=0,e}function an(e,n,t){n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~t}function at(e){if(oQ){for(e=e.memoizedState;null!==e;){var n=e.queue;null!==n&&(n.pending=null),e=e.next}oQ=!1}oZ=0,oK=oX=oY=null,oG=!1,o1=o0=0,o2=null}function ar(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===oK?oY.memoizedState=oK=e:oK=oK.next=e,oK}function ao(){if(null===oX){var e=oY.alternate;e=null!==e?e.memoizedState:null}else e=oX.next;var n=null===oK?oY.memoizedState:oK.next;if(null!==n)oK=n,oX=e;else{if(null===e){if(null===oY.alternate)throw Error(l(467));throw Error(l(310))}e={memoizedState:(oX=e).memoizedState,baseState:oX.baseState,baseQueue:oX.baseQueue,queue:oX.queue,next:null},null===oK?oY.memoizedState=oK=e:oK=oK.next=e}return oK}function aa(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function ai(e){var n=o1;return o1+=1,null===o2&&(o2=[]),e=os(o2,e,n),n=oY,null===(null===oK?n.memoizedState:oK.next)&&(L.H=null===(n=n.alternate)||null===n.memoizedState?it:ir),e}function al(e){if(null!==e&&\"object\"==typeof e){if(\"function\"==typeof e.then)return ai(e);if(e.$$typeof===x)return rY(e)}throw Error(l(438,String(e)))}function as(e){var n=null,t=oY.updateQueue;if(null!==t&&(n=t.memoCache),null==n){var r=oY.alternate;null!==r&&null!==(r=r.updateQueue)&&null!=(r=r.memoCache)&&(n={data:r.data.map(function(e){return e.slice()}),index:0})}if(null==n&&(n={data:[],index:0}),null===t&&(t=aa(),oY.updateQueue=t),t.memoCache=n,void 0===(t=n.data[n.index]))for(t=n.data[n.index]=Array(e),r=0;r<e;r++)t[r]=S;return n.index++,t}function ac(e,n){return\"function\"==typeof n?n(e):n}function au(e){return ad(ao(),oX,e)}function ad(e,n,t){var r=e.queue;if(null===r)throw Error(l(311));r.lastRenderedReducer=t;var o=e.baseQueue,a=r.pending;if(null!==a){if(null!==o){var i=o.next;o.next=a.next,a.next=i}n.baseQueue=o=a,r.pending=null}if(a=e.baseState,null===o)e.memoizedState=a;else{n=o.next;var s=i=null,c=null,u=n,d=!1;do{var f=-0x20000001&u.lane;if(f!==u.lane?(lB&f)===f:(oZ&f)===f){var p=u.revertLane;if(0===p)null!==c&&(c=c.next={lane:0,revertLane:0,gesture:null,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),f===r3&&(d=!0);else if((oZ&p)===p){u=u.next,p===r3&&(d=!0);continue}else f={lane:0,revertLane:u.revertLane,gesture:null,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},null===c?(s=c=f,i=a):c=c.next=f,oY.lanes|=p,lW|=p;f=u.action,oJ&&t(a,f),a=u.hasEagerState?u.eagerState:t(a,f)}else p={lane:f,revertLane:u.revertLane,gesture:u.gesture,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null},null===c?(s=c=p,i=a):c=c.next=p,oY.lanes|=f,lW|=f;u=u.next}while(null!==u&&u!==n);if(null===c?i=a:c.next=s,!tO(a,e.memoizedState)&&(ix=!0,d&&null!==(t=r6)))throw t;e.memoizedState=a,e.baseState=i,e.baseQueue=c,r.lastRenderedState=a}return null===o&&(r.lanes=0),[e.memoizedState,r.dispatch]}function af(e){var n=ao(),t=n.queue;if(null===t)throw Error(l(311));t.lastRenderedReducer=e;var r=t.dispatch,o=t.pending,a=n.memoizedState;if(null!==o){t.pending=null;var i=o=o.next;do a=e(a,i.action),i=i.next;while(i!==o);tO(a,n.memoizedState)||(ix=!0),n.memoizedState=a,null===n.baseQueue&&(n.baseState=a),t.lastRenderedState=a}return[a,r]}function ap(e,n,t){var r=oY,o=ao(),a=rS;if(a){if(void 0===t)throw Error(l(407));t=t()}else t=n();var i=!tO((oX||o).memoizedState,t);if(i&&(o.memoizedState=t,ix=!0),o=o.queue,aM(am.bind(null,r,o,e),[e]),o.getSnapshot!==n||i||null!==oK&&1&oK.memoizedState.tag){if(r.flags|=2048,aT(9,{destroy:void 0},ag.bind(null,r,o,t,n),null),null===lN)throw Error(l(349));a||0!=(124&oZ)||ah(r,n,t)}return t}function ah(e,n,t){e.flags|=16384,e={getSnapshot:n,value:t},null===(n=oY.updateQueue)?(n=aa(),oY.updateQueue=n,n.stores=[e]):null===(t=n.stores)?n.stores=[e]:t.push(e)}function ag(e,n,t,r){n.value=t,n.getSnapshot=r,av(n)&&ab(e)}function am(e,n,t){return t(function(){av(n)&&ab(e)})}function av(e){var n=e.getSnapshot;e=e.value;try{var t=n();return!tO(e,t)}catch(e){return!0}}function ab(e){var n=t3(e,2);null!==n&&so(n,e,2)}function ay(e){var n=ar();if(\"function\"==typeof e){var t=e;if(e=t(),oJ){eh(!0);try{t()}finally{eh(!1)}}}return n.memoizedState=n.baseState=e,n.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:ac,lastRenderedState:e},n}function ax(e,n,t,r){return e.baseState=t,ad(e,oX,\"function\"==typeof r?r:ac)}function aw(e,n,t,r,o){if(a9(e))throw Error(l(485));if(null!==(e=n.action)){var a={payload:o,action:e,next:null,isTransition:!0,status:\"pending\",value:null,reason:null,listeners:[],then:function(e){a.listeners.push(e)}};null!==L.T?t(!0):a.isTransition=!1,r(a),null===(t=n.pending)?(a.next=n.pending=a,aj(n,a)):(a.next=t.next,n.pending=t.next=a)}}function aj(e,n){var t=n.action,r=n.payload,o=e.state;if(n.isTransition){var a=L.T,i={};L.T=i;try{var l=t(o,r),s=L.S;null!==s&&s(i,l),ak(e,n,l)}catch(t){aO(e,n,t)}finally{null!==a&&null!==i.types&&(a.types=i.types),L.T=a}}else try{a=t(o,r),ak(e,n,a)}catch(t){aO(e,n,t)}}function ak(e,n,t){null!==t&&\"object\"==typeof t&&\"function\"==typeof t.then?t.then(function(t){aA(e,n,t)},function(t){return aO(e,n,t)}):aA(e,n,t)}function aA(e,n,t){n.status=\"fulfilled\",n.value=t,aC(n),e.state=t,null!==(n=e.pending)&&((t=n.next)===n?e.pending=null:(t=t.next,n.next=t,aj(e,t)))}function aO(e,n,t){var r=e.pending;if(e.pending=null,null!==r){r=r.next;do n.status=\"rejected\",n.reason=t,aC(n),n=n.next;while(n!==r)}e.action=null}function aC(e){e=e.listeners;for(var n=0;n<e.length;n++)(0,e[n])()}function aS(e,n){return n}function aE(e,n){if(rS){var t=lN.formState;if(null!==t){e:{var r=oY;if(rS){if(rC){n:{for(var o=rC,a=r_;8!==o.nodeType;)if(!a||null===(o=c_(o.nextSibling))){o=null;break n}o=\"F!\"===(a=o.data)||\"F\"===a?o:null}if(o){rC=c_(o.nextSibling),r=\"F!\"===o.data;break e}}rz(r)}r=!1}r&&(n=t[0])}}return(t=ar()).memoizedState=t.baseState=n,r={pending:null,lanes:0,dispatch:null,lastRenderedReducer:aS,lastRenderedState:n},t.queue=r,t=a5.bind(null,oY,r),r.dispatch=t,r=ay(!1),a=a6.bind(null,oY,!1,r.queue),r=ar(),o={state:n,dispatch:null,action:e,pending:null},r.queue=o,t=aw.bind(null,oY,o,a,t),o.dispatch=t,r.memoizedState=e,[n,t,!1]}function a_(e){return aP(ao(),oX,e)}function aP(e,n,t){if(n=ad(e,n,aS)[0],e=au(ac)[0],\"object\"==typeof n&&null!==n&&\"function\"==typeof n.then)try{var r=ai(n)}catch(e){if(e===or)throw oa;throw e}else r=n;var o=(n=ao()).queue,a=o.dispatch;return t!==n.memoizedState&&(oY.flags|=2048,aT(9,{destroy:void 0},az.bind(null,o,t),null)),[r,a,e]}function az(e,n){e.action=n}function aL(e){var n=ao(),t=oX;if(null!==t)return aP(n,t,e);ao(),n=n.memoizedState;var r=(t=ao()).queue.dispatch;return t.memoizedState=e,[n,r,!1]}function aT(e,n,t,r){return e={tag:e,create:t,deps:r,inst:n,next:null},null===(n=oY.updateQueue)&&(n=aa(),oY.updateQueue=n),null===(t=n.lastEffect)?n.lastEffect=e.next=e:(r=t.next,t.next=e,e.next=r,n.lastEffect=e),e}function aR(){return ao().memoizedState}function aN(e,n,t,r){var o=ar();oY.flags|=e,o.memoizedState=aT(1|n,{destroy:void 0},t,void 0===r?null:r)}function aD(e,n,t,r){var o=ao();r=void 0===r?null:r;var a=o.memoizedState.inst;null!==oX&&null!==r&&o3(r,oX.memoizedState.deps)?o.memoizedState=aT(n,a,t,r):(oY.flags|=e,o.memoizedState=aT(1|n,a,t,r))}function aB(e,n){aN(8390656,8,e,n)}function aM(e,n){aD(2048,8,e,n)}function aI(e,n){return aD(4,2,e,n)}function aH(e,n){return aD(4,4,e,n)}function aF(e,n){if(\"function\"==typeof n){var t=n(e=e());return function(){\"function\"==typeof t?t():n(null)}}if(null!=n)return n.current=e=e(),function(){n.current=null}}function aU(e,n,t){t=null!=t?t.concat([e]):null,aD(4,4,aF.bind(null,n,e),t)}function aV(){}function aq(e,n){var t=ao();n=void 0===n?null:n;var r=t.memoizedState;return null!==n&&o3(n,r[1])?r[0]:(t.memoizedState=[e,n],e)}function aW(e,n){var t=ao();n=void 0===n?null:n;var r=t.memoizedState;if(null!==n&&o3(n,r[1]))return r[0];if(r=e(),oJ){eh(!0);try{e()}finally{eh(!1)}}return t.memoizedState=[r,n],r}function a$(e,n,t){return void 0===t||0!=(0x40000000&oZ)?e.memoizedState=n:(e.memoizedState=t,e=sr(),oY.lanes|=e,lW|=e,t)}function aZ(e,n,t,r){return tO(t,n)?t:null!==oT.current?(tO(e=a$(e,t,r),n)||(ix=!0),e):0==(42&oZ)||0!=(0x40000000&oZ)?(ix=!0,e.memoizedState=t):(e=sr(),oY.lanes|=e,lW|=e,n)}function aY(e,n,t,r,o){var a=T.p;T.p=0!==a&&8>a?a:8;var i=L.T,l={};L.T=l,a6(e,!1,n,t);try{var s=o(),c=L.S;if(null!==c&&c(l,s),null!==s&&\"object\"==typeof s&&\"function\"==typeof s.then){var u,d,f=(u=[],d={status:\"pending\",value:null,reason:null,then:function(e){u.push(e)}},s.then(function(){d.status=\"fulfilled\",d.value=r;for(var e=0;e<u.length;e++)(0,u[e])(r)},function(e){for(d.status=\"rejected\",d.reason=e,e=0;e<u.length;e++)(0,u[e])(void 0)}),d);a3(e,n,f,st(e))}else a3(e,n,r,st(e))}catch(t){a3(e,n,{then:function(){},status:\"rejected\",reason:t},st())}finally{T.p=a,null!==i&&null!==l.types&&(i.types=l.types),L.T=i}}function aX(){}function aK(e,n,t,r){if(5!==e.tag)throw Error(l(476));var o=aQ(e).queue;aY(e,o,n,R,null===t?aX:function(){return aG(e),t(r)})}function aQ(e){var n=e.memoizedState;if(null!==n)return n;var t={};return(n={memoizedState:R,baseState:R,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ac,lastRenderedState:R},next:null}).next={memoizedState:t,baseState:t,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ac,lastRenderedState:t},next:null},e.memoizedState=n,null!==(e=e.alternate)&&(e.memoizedState=n),n}function aG(e){var n=aQ(e);null===n.next&&(n=e.alternate.memoizedState),a3(e,n.next.queue,{},st())}function aJ(){return rY(c6)}function a0(){return ao().memoizedState}function a1(){return ao().memoizedState}function a2(e){for(var n=e.return;null!==n;){switch(n.tag){case 24:case 3:var t=st(),r=oO(n,e=oA(t),t);null!==r&&(so(r,n,t),oC(r,n,t)),n={cache:r1()},e.payload=n;return}n=n.return}}function a4(e,n,t){var r=st();t={lane:r,revertLane:0,gesture:null,action:t,hasEagerState:!1,eagerState:null,next:null},a9(e)?a8(n,t):null!==(t=t5(e,n,t,r))&&(so(t,e,r),a7(t,n,r))}function a5(e,n,t){a3(e,n,t,st())}function a3(e,n,t,r){var o={lane:r,revertLane:0,gesture:null,action:t,hasEagerState:!1,eagerState:null,next:null};if(a9(e))a8(n,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=n.lastRenderedReducer))try{var i=n.lastRenderedState,l=a(i,t);if(o.hasEagerState=!0,o.eagerState=l,tO(l,i))return t4(e,n,o,0),null===lN&&t2(),!1}catch(e){}finally{}if(null!==(t=t5(e,n,o,r)))return so(t,e,r),a7(t,n,r),!0}return!1}function a6(e,n,t,r){if(r={lane:2,revertLane:sX(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},a9(e)){if(n)throw Error(l(479))}else null!==(n=t5(e,t,r,2))&&so(n,e,2)}function a9(e){var n=e.alternate;return e===oY||null!==n&&n===oY}function a8(e,n){oG=oQ=!0;var t=e.pending;null===t?n.next=n:(n.next=t.next,t.next=n),e.pending=n}function a7(e,n,t){if(0!=(4194048&t)){var r=n.lanes;r&=e.pendingLanes,n.lanes=t|=r,eE(e,t)}}var ie={readContext:rY,use:al,useCallback:o5,useContext:o5,useEffect:o5,useImperativeHandle:o5,useLayoutEffect:o5,useInsertionEffect:o5,useMemo:o5,useReducer:o5,useRef:o5,useState:o5,useDebugValue:o5,useDeferredValue:o5,useTransition:o5,useSyncExternalStore:o5,useId:o5,useHostTransitionStatus:o5,useFormState:o5,useActionState:o5,useOptimistic:o5,useMemoCache:o5,useCacheRefresh:o5},it={readContext:rY,use:al,useCallback:function(e,n){return ar().memoizedState=[e,void 0===n?null:n],e},useContext:rY,useEffect:aB,useImperativeHandle:function(e,n,t){t=null!=t?t.concat([e]):null,aN(4194308,4,aF.bind(null,n,e),t)},useLayoutEffect:function(e,n){return aN(4194308,4,e,n)},useInsertionEffect:function(e,n){aN(4,2,e,n)},useMemo:function(e,n){var t=ar();n=void 0===n?null:n;var r=e();if(oJ){eh(!0);try{e()}finally{eh(!1)}}return t.memoizedState=[r,n],r},useReducer:function(e,n,t){var r=ar();if(void 0!==t){var o=t(n);if(oJ){eh(!0);try{t(n)}finally{eh(!1)}}}else o=n;return r.memoizedState=r.baseState=o,r.queue=e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:o},e=e.dispatch=a4.bind(null,oY,e),[r.memoizedState,e]},useRef:function(e){return ar().memoizedState=e={current:e}},useState:function(e){var n=(e=ay(e)).queue,t=a5.bind(null,oY,n);return n.dispatch=t,[e.memoizedState,t]},useDebugValue:aV,useDeferredValue:function(e,n){return a$(ar(),e,n)},useTransition:function(){var e=ay(!1);return e=aY.bind(null,oY,e.queue,!0,!1),ar().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,n,t){var r=oY,o=ar();if(rS){if(void 0===t)throw Error(l(407));t=t()}else{if(t=n(),null===lN)throw Error(l(349));0!=(124&lB)||ah(r,n,t)}o.memoizedState=t;var a={value:t,getSnapshot:n};return o.queue=a,aB(am.bind(null,r,a,e),[e]),r.flags|=2048,aT(9,{destroy:void 0},ag.bind(null,r,a,t,n),null),t},useId:function(){var e=ar(),n=lN.identifierPrefix;if(rS){var t=ry,r=rb;n=\"_\"+n+\"R_\"+(t=(r&~(1<<32-eg(r)-1)).toString(32)+t),0<(t=o0++)&&(n+=\"H\"+t.toString(32)),n+=\"_\"}else n=\"_\"+n+\"r_\"+(t=o4++).toString(32)+\"_\";return e.memoizedState=n},useHostTransitionStatus:aJ,useFormState:aE,useActionState:aE,useOptimistic:function(e){var n=ar();n.memoizedState=n.baseState=e;var t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return n.queue=t,n=a6.bind(null,oY,!0,t),t.dispatch=n,[e,n]},useMemoCache:as,useCacheRefresh:function(){return ar().memoizedState=a2.bind(null,oY)}},ir={readContext:rY,use:al,useCallback:aq,useContext:rY,useEffect:aM,useImperativeHandle:aU,useInsertionEffect:aI,useLayoutEffect:aH,useMemo:aW,useReducer:au,useRef:aR,useState:function(){return au(ac)},useDebugValue:aV,useDeferredValue:function(e,n){return aZ(ao(),oX.memoizedState,e,n)},useTransition:function(){var e=au(ac)[0],n=ao().memoizedState;return[\"boolean\"==typeof e?e:ai(e),n]},useSyncExternalStore:ap,useId:a0,useHostTransitionStatus:aJ,useFormState:a_,useActionState:a_,useOptimistic:function(e,n){return ax(ao(),oX,e,n)},useMemoCache:as,useCacheRefresh:a1},io={readContext:rY,use:al,useCallback:aq,useContext:rY,useEffect:aM,useImperativeHandle:aU,useInsertionEffect:aI,useLayoutEffect:aH,useMemo:aW,useReducer:af,useRef:aR,useState:function(){return af(ac)},useDebugValue:aV,useDeferredValue:function(e,n){var t=ao();return null===oX?a$(t,e,n):aZ(t,oX.memoizedState,e,n)},useTransition:function(){var e=af(ac)[0],n=ao().memoizedState;return[\"boolean\"==typeof e?e:ai(e),n]},useSyncExternalStore:ap,useId:a0,useHostTransitionStatus:aJ,useFormState:aL,useActionState:aL,useOptimistic:function(e,n){var t=ao();return null!==oX?ax(t,oX,e,n):(t.baseState=e,[e,t.queue.dispatch])},useMemoCache:as,useCacheRefresh:a1};function ia(e,n,t,r){t=null==(t=t(r,n=e.memoizedState))?n:f({},n,t),e.memoizedState=t,0===e.lanes&&(e.updateQueue.baseState=t)}var ii={enqueueSetState:function(e,n,t){e=e._reactInternals;var r=st(),o=oA(r);o.payload=n,null!=t&&(o.callback=t),null!==(n=oO(e,o,r))&&(so(n,e,r),oC(n,e,r))},enqueueReplaceState:function(e,n,t){e=e._reactInternals;var r=st(),o=oA(r);o.tag=1,o.payload=n,null!=t&&(o.callback=t),null!==(n=oO(e,o,r))&&(so(n,e,r),oC(n,e,r))},enqueueForceUpdate:function(e,n){e=e._reactInternals;var t=st(),r=oA(t);r.tag=2,null!=n&&(r.callback=n),null!==(n=oO(e,r,t))&&(so(n,e,t),oC(n,e,t))}};function il(e,n,t,r,o,a,i){return\"function\"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!n.prototype||!n.prototype.isPureReactComponent||!tC(t,r)||!tC(o,a)}function is(e,n,t,r){e=n.state,\"function\"==typeof n.componentWillReceiveProps&&n.componentWillReceiveProps(t,r),\"function\"==typeof n.UNSAFE_componentWillReceiveProps&&n.UNSAFE_componentWillReceiveProps(t,r),n.state!==e&&ii.enqueueReplaceState(n,n.state,null)}function ic(e,n){var t=n;if(\"ref\"in n)for(var r in t={},n)\"ref\"!==r&&(t[r]=n[r]);if(e=e.defaultProps)for(var o in t===n&&(t=f({},t)),e)void 0===t[o]&&(t[o]=e[o]);return t}function iu(e){tG(e)}function id(e){console.error(e)}function ip(e){tG(e)}function ih(e,n){try{(0,e.onUncaughtError)(n.value,{componentStack:n.stack})}catch(e){setTimeout(function(){throw e})}}function ig(e,n,t){try{(0,e.onCaughtError)(t.value,{componentStack:t.stack,errorBoundary:1===n.tag?n.stateNode:null})}catch(e){setTimeout(function(){throw e})}}function im(e,n,t){return(t=oA(t)).tag=3,t.payload={element:null},t.callback=function(){ih(e,n)},t}function iv(e){return(e=oA(e)).tag=3,e}function ib(e,n,t,r){var o=t.type.getDerivedStateFromError;if(\"function\"==typeof o){var a=r.value;e.payload=function(){return o(a)},e.callback=function(){ig(n,t,r)}}var i=t.stateNode;null!==i&&\"function\"==typeof i.componentDidCatch&&(e.callback=function(){ig(n,t,r),\"function\"!=typeof o&&(null===l2?l2=new Set([this]):l2.add(this));var e=r.stack;this.componentDidCatch(r.value,{componentStack:null!==e?e:\"\"})})}var iy=Error(l(461)),ix=!1;function iw(e,n,t,r){n.child=null===e?ox(n,null,t,r):oy(n,e.child,t,r)}function ij(e,n,t,r,o){t=t.render;var a=n.ref;if(\"ref\"in r){var i={};for(var l in r)\"ref\"!==l&&(i[l]=r[l])}else i=r;return(rZ(n),r=o6(e,n,t,i,a,o),l=ae(),null===e||ix)?(rS&&l&&rj(n),n.flags|=1,iw(e,n,r,o),n.child):(an(e,n,o),iq(e,n,o))}function ik(e,n,t,r,o){if(null===e){var a=t.type;return\"function\"!=typeof a||rn(a)||void 0!==a.defaultProps||null!==t.compare?((e=ro(t.type,null,r,n,n.mode,o)).ref=n.ref,e.return=n,n.child=e):(n.tag=15,n.type=a,iA(e,n,a,r,o))}if(a=e.child,!iW(e,o)){var i=a.memoizedProps;if((t=null!==(t=t.compare)?t:tC)(i,r)&&e.ref===n.ref)return iq(e,n,o)}return n.flags|=1,(e=rt(a,r)).ref=n.ref,e.return=n,n.child=e}function iA(e,n,t,r,o){if(null!==e){var a=e.memoizedProps;if(tC(a,r)&&e.ref===n.ref)if(ix=!1,n.pendingProps=r=a,!iW(e,o))return n.lanes=e.lanes,iq(e,n,o);else 0!=(131072&e.flags)&&(ix=!0)}return iP(e,n,t,r,o)}function iO(e,n,t,r){var o=r.children,a=null!==e?e.memoizedState:null;if(\"hidden\"===r.mode){if(0!=(128&n.flags)){if(r=null!==a?a.baseLanes|t:t,null!==e){for(a=0,o=n.child=e.child;null!==o;)a=a|o.lanes|o.childLanes,o=o.sibling;n.childLanes=a&~r}else n.childLanes=0,n.child=null;return iC(e,n,r,t)}if(0==(0x20000000&t))return n.lanes=n.childLanes=0x20000000,iC(e,n,null!==a?a.baseLanes|t:t,t);n.memoizedState={baseLanes:0,cachePool:null},null!==e&&on(n,null!==a?a.cachePool:null),null!==a?oN(n,a):oD(),oU(n)}else null!==a?(on(n,a.cachePool),oN(n,a),oV(n),n.memoizedState=null):(null!==e&&on(n,null),oD(),oV(n));return iw(e,n,o,t),n.child}function iC(e,n,t,r){var o=oe();return n.memoizedState={baseLanes:t,cachePool:o=null===o?null:{parent:r0._currentValue,pool:o}},null!==e&&on(n,null),oD(),oU(n),null!==e&&rW(e,n,r,!0),null}function iS(e,n){return(n=iI({mode:n.mode,children:n.children},e.mode)).ref=e.ref,e.child=n,n.return=e,n}function iE(e,n,t){return oy(n,e.child,null,t),e=iS(n,n.pendingProps),e.flags|=2,oq(n),n.memoizedState=null,e}function i_(e,n){var t=n.ref;if(null===t)null!==e&&null!==e.ref&&(n.flags|=4194816);else{if(\"function\"!=typeof t&&\"object\"!=typeof t)throw Error(l(284));(null===e||e.ref!==t)&&(n.flags|=4194816)}}function iP(e,n,t,r,o){return(rZ(n),t=o6(e,n,t,r,void 0,o),r=ae(),null===e||ix)?(rS&&r&&rj(n),n.flags|=1,iw(e,n,t,o),n.child):(an(e,n,o),iq(e,n,o))}function iz(e,n,t,r,o,a){return(rZ(n),n.updateQueue=null,t=o8(n,r,t,o),o9(e),r=ae(),null===e||ix)?(rS&&r&&rj(n),n.flags|=1,iw(e,n,t,a),n.child):(an(e,n,a),iq(e,n,a))}function iL(e,n,t,r,o){if(rZ(n),null===n.stateNode){var a=t8,i=t.contextType;\"object\"==typeof i&&null!==i&&(a=rY(i)),n.memoizedState=null!==(a=new t(r,a)).state&&void 0!==a.state?a.state:null,a.updater=ii,n.stateNode=a,a._reactInternals=n,(a=n.stateNode).props=r,a.state=n.memoizedState,a.refs={},oj(n),i=t.contextType,a.context=\"object\"==typeof i&&null!==i?rY(i):t8,a.state=n.memoizedState,\"function\"==typeof(i=t.getDerivedStateFromProps)&&(ia(n,t,i,r),a.state=n.memoizedState),\"function\"==typeof t.getDerivedStateFromProps||\"function\"==typeof a.getSnapshotBeforeUpdate||\"function\"!=typeof a.UNSAFE_componentWillMount&&\"function\"!=typeof a.componentWillMount||(i=a.state,\"function\"==typeof a.componentWillMount&&a.componentWillMount(),\"function\"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),i!==a.state&&ii.enqueueReplaceState(a,a.state,null),oP(n,r,a,o),o_(),a.state=n.memoizedState),\"function\"==typeof a.componentDidMount&&(n.flags|=4194308),r=!0}else if(null===e){a=n.stateNode;var l=n.memoizedProps,s=ic(t,l);a.props=s;var c=a.context,u=t.contextType;i=t8,\"object\"==typeof u&&null!==u&&(i=rY(u));var d=t.getDerivedStateFromProps;u=\"function\"==typeof d||\"function\"==typeof a.getSnapshotBeforeUpdate,l=n.pendingProps!==l,u||\"function\"!=typeof a.UNSAFE_componentWillReceiveProps&&\"function\"!=typeof a.componentWillReceiveProps||(l||c!==i)&&is(n,a,r,i),ow=!1;var f=n.memoizedState;a.state=f,oP(n,r,a,o),o_(),c=n.memoizedState,l||f!==c||ow?(\"function\"==typeof d&&(ia(n,t,d,r),c=n.memoizedState),(s=ow||il(n,t,s,r,f,c,i))?(u||\"function\"!=typeof a.UNSAFE_componentWillMount&&\"function\"!=typeof a.componentWillMount||(\"function\"==typeof a.componentWillMount&&a.componentWillMount(),\"function\"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount()),\"function\"==typeof a.componentDidMount&&(n.flags|=4194308)):(\"function\"==typeof a.componentDidMount&&(n.flags|=4194308),n.memoizedProps=r,n.memoizedState=c),a.props=r,a.state=c,a.context=i,r=s):(\"function\"==typeof a.componentDidMount&&(n.flags|=4194308),r=!1)}else{a=n.stateNode,ok(e,n),u=ic(t,i=n.memoizedProps),a.props=u,d=n.pendingProps,f=a.context,c=t.contextType,s=t8,\"object\"==typeof c&&null!==c&&(s=rY(c)),(c=\"function\"==typeof(l=t.getDerivedStateFromProps)||\"function\"==typeof a.getSnapshotBeforeUpdate)||\"function\"!=typeof a.UNSAFE_componentWillReceiveProps&&\"function\"!=typeof a.componentWillReceiveProps||(i!==d||f!==s)&&is(n,a,r,s),ow=!1,f=n.memoizedState,a.state=f,oP(n,r,a,o),o_();var p=n.memoizedState;i!==d||f!==p||ow||null!==e&&null!==e.dependencies&&r$(e.dependencies)?(\"function\"==typeof l&&(ia(n,t,l,r),p=n.memoizedState),(u=ow||il(n,t,u,r,f,p,s)||null!==e&&null!==e.dependencies&&r$(e.dependencies))?(c||\"function\"!=typeof a.UNSAFE_componentWillUpdate&&\"function\"!=typeof a.componentWillUpdate||(\"function\"==typeof a.componentWillUpdate&&a.componentWillUpdate(r,p,s),\"function\"==typeof a.UNSAFE_componentWillUpdate&&a.UNSAFE_componentWillUpdate(r,p,s)),\"function\"==typeof a.componentDidUpdate&&(n.flags|=4),\"function\"==typeof a.getSnapshotBeforeUpdate&&(n.flags|=1024)):(\"function\"!=typeof a.componentDidUpdate||i===e.memoizedProps&&f===e.memoizedState||(n.flags|=4),\"function\"!=typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&f===e.memoizedState||(n.flags|=1024),n.memoizedProps=r,n.memoizedState=p),a.props=r,a.state=p,a.context=s,r=u):(\"function\"!=typeof a.componentDidUpdate||i===e.memoizedProps&&f===e.memoizedState||(n.flags|=4),\"function\"!=typeof a.getSnapshotBeforeUpdate||i===e.memoizedProps&&f===e.memoizedState||(n.flags|=1024),r=!1)}return a=r,i_(e,n),r=0!=(128&n.flags),a||r?(a=n.stateNode,t=r&&\"function\"!=typeof t.getDerivedStateFromError?null:a.render(),n.flags|=1,null!==e&&r?(n.child=oy(n,e.child,null,o),n.child=oy(n,null,t,o)):iw(e,n,t,o),n.memoizedState=a.state,e=n.child):e=iq(e,n,o),e}function iT(e,n,t,r){return rN(),n.flags|=256,iw(e,n,t,r),n.child}var iR={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function iN(e){return{baseLanes:e,cachePool:ot()}}function iD(e,n,t){return e=null!==e?e.childLanes&~t:0,n&&(e|=lY),e}function iB(e,n,t){var r,o=n.pendingProps,a=!1,i=0!=(128&n.flags);if((r=i)||(r=(null===e||null!==e.memoizedState)&&0!=(2&oW.current)),r&&(a=!0,n.flags&=-129),r=0!=(32&n.flags),n.flags&=-33,null===e){if(rS){if(a?oH(n):oV(n),(e=rC)?null!==(e=null!==(e=cC(e,r_))&&\"&\"!==e.data?e:null)&&(n.memoizedState={dehydrated:e,treeContext:null!==rv?{id:rb,overflow:ry}:null,retryLane:0x20000000,hydrationErrors:null},(t=rl(e)).return=n,n.child=t,rO=n,rC=null):e=null,null===e)throw rz(n);return cE(e)?n.lanes=32:n.lanes=0x20000000,null}var s=o.children;return(o=o.fallback,a)?(oV(n),s=iI({mode:\"hidden\",children:s},a=n.mode),o=ra(o,a,t,null),s.return=n,o.return=n,s.sibling=o,n.child=s,(s=n.child).memoizedState=iN(t),s.childLanes=iD(e,r,t),n.memoizedState=iR,o):(oH(n),iM(n,s))}var c=e.memoizedState;if(null!==c&&null!==(s=c.dehydrated)){if(i)256&n.flags?(oH(n),n.flags&=-257,n=iH(e,n,t)):null!==n.memoizedState?(oV(n),n.child=e.child,n.flags|=128,n=null):(oV(n),s=o.fallback,a=n.mode,o=iI({mode:\"visible\",children:o.children},a),s=ra(s,a,t,null),s.flags|=2,o.return=n,s.return=n,o.sibling=s,n.child=o,oy(n,e.child,null,t),(o=n.child).memoizedState=iN(t),o.childLanes=iD(e,r,t),n.memoizedState=iR,n=s);else if(oH(n),cE(s)){if(r=s.nextSibling&&s.nextSibling.dataset)var u=r.dgst;r=u,(o=Error(l(419))).stack=\"\",o.digest=r,rB({value:o,source:null,stack:null}),n=iH(e,n,t)}else if(ix||rW(e,n,t,!1),r=0!=(t&e.childLanes),ix||r){if(null!==(r=lN)&&0!==(o=e_(r,t))&&o!==c.retryLane)throw c.retryLane=o,t3(e,o),so(r,e,o),iy;cS(s)||sg(),n=iH(e,n,t)}else cS(s)?(n.flags|=192,n.child=e.child,n=null):(e=c.treeContext,rC=c_(s.nextSibling),rO=n,rS=!0,rE=null,r_=!1,null!==e&&rA(n,e),n=iM(n,o.children),n.flags|=4096);return n}return a?(oV(n),s=o.fallback,a=n.mode,u=(c=e.child).sibling,(o=rt(c,{mode:\"hidden\",children:o.children})).subtreeFlags=0x3e00000&c.subtreeFlags,null!==u?s=rt(u,s):(s=ra(s,a,t,null),s.flags|=2),s.return=n,o.return=n,o.sibling=s,n.child=o,o=s,s=n.child,null===(a=e.child.memoizedState)?a=iN(t):(null!==(c=a.cachePool)?(u=r0._currentValue,c=c.parent!==u?{parent:u,pool:u}:c):c=ot(),a={baseLanes:a.baseLanes|t,cachePool:c}),s.memoizedState=a,s.childLanes=iD(e,r,t),n.memoizedState=iR,o):(oH(n),e=(t=e.child).sibling,(t=rt(t,{mode:\"visible\",children:o.children})).return=n,t.sibling=null,null!==e&&(null===(r=n.deletions)?(n.deletions=[e],n.flags|=16):r.push(e)),n.child=t,n.memoizedState=null,t)}function iM(e,n){return(n=iI({mode:\"visible\",children:n},e.mode)).return=e,e.child=n}function iI(e,n){return(e=re(22,e,null,n)).lanes=0,e.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},e}function iH(e,n,t){return oy(n,e.child,null,t),e=iM(n,n.pendingProps.children),e.flags|=2,n.memoizedState=null,e}function iF(e,n,t){e.lanes|=n;var r=e.alternate;null!==r&&(r.lanes|=n),rV(e.return,n,t)}function iU(e,n,t,r,o,a){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:n,rendering:null,renderingStartTime:0,last:r,tail:t,tailMode:o,treeForkCount:a}:(i.isBackwards=n,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=t,i.tailMode=o,i.treeForkCount=a)}function iV(e,n,t){var r=n.pendingProps,o=r.revealOrder,a=r.tail;r=r.children;var i=oW.current,l=0!=(2&i);if(l?(i=1&i|2,n.flags|=128):i&=1,I(oW,i),iw(e,n,r,t),r=rS?rh:0,!l&&null!==e&&0!=(128&e.flags))e:for(e=n.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&iF(e,t,n);else if(19===e.tag)iF(e,t,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===n)break;for(;null===e.sibling;){if(null===e.return||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}switch(o){case\"forwards\":for(o=null,t=n.child;null!==t;)null!==(e=t.alternate)&&null===o$(e)&&(o=t),t=t.sibling;null===(t=o)?(o=n.child,n.child=null):(o=t.sibling,t.sibling=null),iU(n,!1,o,t,a,r);break;case\"backwards\":case\"unstable_legacy-backwards\":for(t=null,o=n.child,n.child=null;null!==o;){if(null!==(e=o.alternate)&&null===o$(e)){n.child=o;break}e=o.sibling,o.sibling=t,t=o,o=e}iU(n,!0,t,null,a,r);break;case\"together\":iU(n,!1,null,null,void 0,r);break;default:n.memoizedState=null}return n.child}function iq(e,n,t){if(null!==e&&(n.dependencies=e.dependencies),lW|=n.lanes,0==(t&n.childLanes)){if(null===e)return null;else if(rW(e,n,t,!1),0==(t&n.childLanes))return null}if(null!==e&&n.child!==e.child)throw Error(l(153));if(null!==n.child){for(t=rt(e=n.child,e.pendingProps),n.child=t,t.return=n;null!==e.sibling;)e=e.sibling,(t=t.sibling=rt(e,e.pendingProps)).return=n;t.sibling=null}return n.child}function iW(e,n){return 0!=(e.lanes&n)||!!(null!==(e=e.dependencies)&&r$(e))}function i$(e,n,t){if(null!==e)if(e.memoizedProps!==n.pendingProps)ix=!0;else{if(!iW(e,t)&&0==(128&n.flags))return ix=!1,function(e,n,t){switch(n.tag){case 3:q(n,n.stateNode.containerInfo),rF(n,r0,e.memoizedState.cache),rN();break;case 27:case 5:$(n);break;case 4:q(n,n.stateNode.containerInfo);break;case 10:rF(n,n.type,n.memoizedProps.value);break;case 31:if(null!==n.memoizedState)return n.flags|=128,oF(n),null;break;case 13:var r=n.memoizedState;if(null!==r){if(null!==r.dehydrated)return oH(n),n.flags|=128,null;if(0!=(t&n.child.childLanes))return iB(e,n,t);return oH(n),null!==(e=iq(e,n,t))?e.sibling:null}oH(n);break;case 19:var o=0!=(128&e.flags);if((r=0!=(t&n.childLanes))||(rW(e,n,t,!1),r=0!=(t&n.childLanes)),o){if(r)return iV(e,n,t);n.flags|=128}if(null!==(o=n.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),I(oW,oW.current),!r)return null;break;case 22:return n.lanes=0,iO(e,n,t,n.pendingProps);case 24:rF(n,r0,e.memoizedState.cache)}return iq(e,n,t)}(e,n,t);ix=0!=(131072&e.flags)}else ix=!1,rS&&0!=(1048576&n.flags)&&rw(n,rh,n.index);switch(n.lanes=0,n.tag){case 16:e:{e=n.pendingProps;var r=n.elementType,o=r._init;if(r=o(r._payload),n.type=r,\"function\"==typeof r)rn(r)?(e=ic(r,e),n.tag=1,n=iL(null,n,r,e,t)):(n.tag=0,n=iP(null,n,r,e,t));else{if(null!=r){if((o=r.$$typeof)===w){n.tag=11,n=ij(null,n,r,e,t);break e}else if(o===A){n.tag=14,n=ik(null,n,r,e,t);break e}}throw Error(l(306,n=function e(n){if(null==n)return null;if(\"function\"==typeof n)return n.$$typeof===P?null:n.displayName||n.name||null;if(\"string\"==typeof n)return n;switch(n){case m:return\"Fragment\";case b:return\"Profiler\";case v:return\"StrictMode\";case j:return\"Suspense\";case k:return\"SuspenseList\";case C:return\"Activity\"}if(\"object\"==typeof n)switch(n.$$typeof){case g:return\"Portal\";case x:return n.displayName||\"Context\";case y:return(n._context.displayName||\"Context\")+\".Consumer\";case w:var t=n.render;return(n=n.displayName)||(n=\"\"!==(n=t.displayName||t.name||\"\")?\"ForwardRef(\"+n+\")\":\"ForwardRef\"),n;case A:return null!==(t=n.displayName||null)?t:e(n.type)||\"Memo\";case O:t=n._payload,n=n._init;try{return e(n(t))}catch(e){}}return null}(r)||r,\"\"))}}return n;case 0:return iP(e,n,n.type,n.pendingProps,t);case 1:return o=ic(r=n.type,n.pendingProps),iL(e,n,r,o,t);case 3:e:{if(q(n,n.stateNode.containerInfo),null===e)throw Error(l(387));r=n.pendingProps;var a=n.memoizedState;o=a.element,ok(e,n),oP(n,r,null,t);var i=n.memoizedState;if(rF(n,r0,r=i.cache),r!==a.cache&&rq(n,[r0],t,!0),o_(),r=i.element,a.isDehydrated)if(a={element:r,isDehydrated:!1,cache:i.cache},n.updateQueue.baseState=a,n.memoizedState=a,256&n.flags){n=iT(e,n,r,t);break e}else if(r!==o){rB(o=ru(Error(l(424)),n)),n=iT(e,n,r,t);break e}else for(rC=c_((e=9===(e=n.stateNode.containerInfo).nodeType?e.body:\"HTML\"===e.nodeName?e.ownerDocument.body:e).firstChild),rO=n,rS=!0,rE=null,r_=!0,t=ox(n,null,r,t),n.child=t;t;)t.flags=-3&t.flags|4096,t=t.sibling;else{if(rN(),r===o){n=iq(e,n,t);break e}iw(e,n,r,t)}n=n.child}return n;case 26:return i_(e,n),null===e?(t=cF(n.type,null,n.pendingProps,null))?n.memoizedState=t:rS||(t=n.type,e=n.pendingProps,(r=cf(U.current).createElement(t))[eN]=n,r[eD]=e,cc(r,t,e),eY(r),n.stateNode=r):n.memoizedState=cF(n.type,e.memoizedProps,n.pendingProps,e.memoizedState),null;case 27:return $(n),null===e&&rS&&(r=n.stateNode=cT(n.type,n.pendingProps,U.current),rO=n,r_=!0,o=rC,cj(n.type)?(cP=o,rC=c_(r.firstChild)):rC=o),iw(e,n,n.pendingProps.children,t),i_(e,n),null===e&&(n.flags|=4194304),n.child;case 5:return null===e&&rS&&((o=r=rC)&&(null!==(r=function(e,n,t,r){for(;1===e.nodeType;){if(e.nodeName.toLowerCase()!==n.toLowerCase()){if(!r&&(\"INPUT\"!==e.nodeName||\"hidden\"!==e.type))break}else if(r){if(!e[eU])switch(n){case\"meta\":if(!e.hasAttribute(\"itemprop\"))break;return e;case\"link\":if(\"stylesheet\"===(o=e.getAttribute(\"rel\"))&&e.hasAttribute(\"data-precedence\")||o!==t.rel||e.getAttribute(\"href\")!==(null==t.href||\"\"===t.href?null:t.href)||e.getAttribute(\"crossorigin\")!==(null==t.crossOrigin?null:t.crossOrigin)||e.getAttribute(\"title\")!==(null==t.title?null:t.title))break;return e;case\"style\":if(e.hasAttribute(\"data-precedence\"))break;return e;case\"script\":if(((o=e.getAttribute(\"src\"))!==(null==t.src?null:t.src)||e.getAttribute(\"type\")!==(null==t.type?null:t.type)||e.getAttribute(\"crossorigin\")!==(null==t.crossOrigin?null:t.crossOrigin))&&o&&e.hasAttribute(\"async\")&&!e.hasAttribute(\"itemprop\"))break;return e;default:return e}}else{if(\"input\"!==n||\"hidden\"!==e.type)return e;var o=null==t.name?null:\"\"+t.name;if(\"hidden\"===t.type&&e.getAttribute(\"name\")===o)return e}if(null===(e=c_(e.nextSibling)))break}return null}(r,n.type,n.pendingProps,r_))?(n.stateNode=r,rO=n,rC=c_(r.firstChild),r_=!1,o=!0):o=!1),o||rz(n)),$(n),o=n.type,a=n.pendingProps,i=null!==e?e.memoizedProps:null,r=a.children,cg(o,a)?r=null:null!==i&&cg(o,i)&&(n.flags|=32),null!==n.memoizedState&&(c6._currentValue=o=o6(e,n,o7,null,null,t)),i_(e,n),iw(e,n,r,t),n.child;case 6:return null===e&&rS&&((e=t=rC)&&(null!==(t=function(e,n,t){if(\"\"===n)return null;for(;3!==e.nodeType;)if((1!==e.nodeType||\"INPUT\"!==e.nodeName||\"hidden\"!==e.type)&&!t||null===(e=c_(e.nextSibling)))return null;return e}(t,n.pendingProps,r_))?(n.stateNode=t,rO=n,rC=null,e=!0):e=!1),e||rz(n)),null;case 13:return iB(e,n,t);case 4:return q(n,n.stateNode.containerInfo),r=n.pendingProps,null===e?n.child=oy(n,null,r,t):iw(e,n,r,t),n.child;case 11:return ij(e,n,n.type,n.pendingProps,t);case 7:return iw(e,n,n.pendingProps,t),n.child;case 8:case 12:return iw(e,n,n.pendingProps.children,t),n.child;case 10:return r=n.pendingProps,rF(n,n.type,r.value),iw(e,n,r.children,t),n.child;case 9:return o=n.type._context,r=n.pendingProps.children,rZ(n),r=r(o=rY(o)),n.flags|=1,iw(e,n,r,t),n.child;case 14:return ik(e,n,n.type,n.pendingProps,t);case 15:return iA(e,n,n.type,n.pendingProps,t);case 19:return iV(e,n,t);case 31:if(o=n.pendingProps,i=0!=(128&n.flags),n.flags&=-129,null===e)if(rS){if(\"hidden\"===o.mode)iS(n,o);else if(oF(n),(t=rC)?null!==(t=null!==(t=cC(t,r_))&&\"&\"===t.data?t:null)&&(n.memoizedState={dehydrated:t,treeContext:null!==rv?{id:rb,overflow:ry}:null,retryLane:0x20000000,hydrationErrors:null},(e=rl(t)).return=n,n.child=e,rO=n,rC=null):t=null,null===t)throw rz(n);n.lanes=0x20000000,n=null}else n=iS(n,o);else if(null!==(r=e.memoizedState))if(a=r.dehydrated,oF(n),i)if(256&n.flags)n.flags&=-257,n=iE(e,n,t);else if(null!==n.memoizedState)n.child=e.child,n.flags|=128,n=null;else throw Error(l(558));else if(ix||rW(e,n,t,!1),i=0!=(t&e.childLanes),ix||i){if(null!==(o=lN)&&0!==(a=e_(o,t))&&a!==r.retryLane)throw r.retryLane=a,t3(e,a),so(o,e,a),iy;sg(),n=iE(e,n,t)}else t=r.treeContext,rC=c_(a.nextSibling),rO=n,rS=!0,rE=null,r_=!1,null!==t&&rA(n,t),n=iS(n,o),n.flags|=4096;else(t=rt(e.child,{mode:o.mode,children:o.children})).ref=n.ref,n.child=t,t.return=n,n=t;return n;case 22:return iO(e,n,t,n.pendingProps);case 24:return rZ(n),r=rY(r0),null===e?(null===(o=oe())&&(o=lN,a=r1(),o.pooledCache=a,a.refCount++,null!==a&&(o.pooledCacheLanes|=t),o=a),n.memoizedState={parent:r,cache:o},oj(n),rF(n,r0,o)):(0!=(e.lanes&t)&&(ok(e,n),oP(n,null,null,t),o_()),o=e.memoizedState,a=n.memoizedState,o.parent!==r?(o={parent:r,cache:r},n.memoizedState=o,0===n.lanes&&(n.memoizedState=n.updateQueue.baseState=o),rF(n,r0,r)):(rF(n,r0,r=a.cache),r!==o.cache&&rq(n,[r0],t,!0))),iw(e,n,n.pendingProps.children,t),n.child;case 29:throw n.pendingProps}throw Error(l(156,n.tag))}function iZ(e){e.flags|=4}function iY(e,n,t,r,o){if((n=0!=(32&e.mode))&&(n=!1),n){if(e.flags|=0x1000000,(0x13ffff40&o)===o)if(e.stateNode.complete)e.flags|=8192;else if(sf())e.flags|=8192;else throw oc=oi,oo}else e.flags&=-0x1000001}function iX(e,n){if(\"stylesheet\"!==n.type||0!=(4&n.state.loading))e.flags&=-0x1000001;else if(e.flags|=0x1000000,!c0(n))if(sf())e.flags|=8192;else throw oc=oi,oo}function iK(e,n){null!==n&&(e.flags|=4),16384&e.flags&&(n=22!==e.tag?eA():0x20000000,e.lanes|=n,lX|=n)}function iQ(e,n){if(!rS)switch(e.tailMode){case\"hidden\":n=e.tail;for(var t=null;null!==n;)null!==n.alternate&&(t=n),n=n.sibling;null===t?e.tail=null:t.sibling=null;break;case\"collapsed\":t=e.tail;for(var r=null;null!==t;)null!==t.alternate&&(r=t),t=t.sibling;null===r?n||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function iG(e){var n=null!==e.alternate&&e.alternate.child===e.child,t=0,r=0;if(n)for(var o=e.child;null!==o;)t|=o.lanes|o.childLanes,r|=0x3e00000&o.subtreeFlags,r|=0x3e00000&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)t|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=t,n}function iJ(e,n){switch(rk(n),n.tag){case 3:rU(r0),W();break;case 26:case 27:case 5:Z(n);break;case 4:W();break;case 31:null!==n.memoizedState&&oq(n);break;case 13:oq(n);break;case 19:M(oW);break;case 10:rU(n.type);break;case 22:case 23:oq(n),oB(),null!==e&&M(r7);break;case 24:rU(r0)}}function i0(e,n){try{var t=n.updateQueue,r=null!==t?t.lastEffect:null;if(null!==r){var o=r.next;t=o;do{if((t.tag&e)===e){r=void 0;var a=t.create;t.inst.destroy=r=a()}t=t.next}while(t!==o)}}catch(e){sP(n,n.return,e)}}function i1(e,n,t){try{var r=n.updateQueue,o=null!==r?r.lastEffect:null;if(null!==o){var a=o.next;r=a;do{if((r.tag&e)===e){var i=r.inst,l=i.destroy;if(void 0!==l){i.destroy=void 0,o=n;try{l()}catch(e){sP(o,t,e)}}}r=r.next}while(r!==a)}}catch(e){sP(n,n.return,e)}}function i2(e){var n=e.updateQueue;if(null!==n){var t=e.stateNode;try{oL(n,t)}catch(n){sP(e,e.return,n)}}}function i4(e,n,t){t.props=ic(e.type,e.memoizedProps),t.state=e.memoizedState;try{t.componentWillUnmount()}catch(t){sP(e,n,t)}}function i5(e,n){try{var t=e.ref;if(null!==t){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;default:r=e.stateNode}\"function\"==typeof t?e.refCleanup=t(r):t.current=r}}catch(t){sP(e,n,t)}}function i3(e,n){var t=e.ref,r=e.refCleanup;if(null!==t)if(\"function\"==typeof r)try{r()}catch(t){sP(e,n,t)}finally{e.refCleanup=null,null!=(e=e.alternate)&&(e.refCleanup=null)}else if(\"function\"==typeof t)try{t(null)}catch(t){sP(e,n,t)}else t.current=null}function i6(e){var n=e.type,t=e.memoizedProps,r=e.stateNode;try{switch(n){case\"button\":case\"input\":case\"select\":case\"textarea\":t.autoFocus&&r.focus();break;case\"img\":t.src?r.src=t.src:t.srcSet&&(r.srcset=t.srcSet)}}catch(n){sP(e,e.return,n)}}function i9(e,n,t){try{var r=e.stateNode;(function(e,n,t,r){switch(n){case\"div\":case\"span\":case\"svg\":case\"path\":case\"a\":case\"g\":case\"p\":case\"li\":break;case\"input\":var o=null,a=null,i=null,s=null,c=null,u=null,d=null;for(h in t){var f=t[h];if(t.hasOwnProperty(h)&&null!=f)switch(h){case\"checked\":case\"value\":break;case\"defaultValue\":c=f;default:r.hasOwnProperty(h)||cl(e,n,h,null,r,f)}}for(var p in r){var h=r[p];if(f=t[p],r.hasOwnProperty(p)&&(null!=h||null!=f))switch(p){case\"type\":a=h;break;case\"name\":o=h;break;case\"checked\":u=h;break;case\"defaultChecked\":d=h;break;case\"value\":i=h;break;case\"defaultValue\":s=h;break;case\"children\":case\"dangerouslySetInnerHTML\":if(null!=h)throw Error(l(137,n));break;default:h!==f&&cl(e,n,p,h,r,f)}}nt(e,i,s,c,u,d,a,o);return;case\"select\":for(a in h=i=s=p=null,t)if(c=t[a],t.hasOwnProperty(a)&&null!=c)switch(a){case\"value\":break;case\"multiple\":h=c;default:r.hasOwnProperty(a)||cl(e,n,a,null,r,c)}for(o in r)if(a=r[o],c=t[o],r.hasOwnProperty(o)&&(null!=a||null!=c))switch(o){case\"value\":p=a;break;case\"defaultValue\":s=a;break;case\"multiple\":i=a;default:a!==c&&cl(e,n,o,a,r,c)}n=s,t=i,r=h,null!=p?na(e,!!t,p,!1):!!r!=!!t&&(null!=n?na(e,!!t,n,!0):na(e,!!t,t?[]:\"\",!1));return;case\"textarea\":for(s in h=p=null,t)if(o=t[s],t.hasOwnProperty(s)&&null!=o&&!r.hasOwnProperty(s))switch(s){case\"value\":case\"children\":break;default:cl(e,n,s,null,r,o)}for(i in r)if(o=r[i],a=t[i],r.hasOwnProperty(i)&&(null!=o||null!=a))switch(i){case\"value\":p=o;break;case\"defaultValue\":h=o;break;case\"children\":break;case\"dangerouslySetInnerHTML\":if(null!=o)throw Error(l(91));break;default:o!==a&&cl(e,n,i,o,r,a)}ni(e,p,h);return;case\"option\":for(var g in t)p=t[g],t.hasOwnProperty(g)&&null!=p&&!r.hasOwnProperty(g)&&(\"selected\"===g?e.selected=!1:cl(e,n,g,null,r,p));for(c in r)p=r[c],h=t[c],r.hasOwnProperty(c)&&p!==h&&(null!=p||null!=h)&&(\"selected\"===c?e.selected=p&&\"function\"!=typeof p&&\"symbol\"!=typeof p:cl(e,n,c,p,r,h));return;case\"img\":case\"link\":case\"area\":case\"base\":case\"br\":case\"col\":case\"embed\":case\"hr\":case\"keygen\":case\"meta\":case\"param\":case\"source\":case\"track\":case\"wbr\":case\"menuitem\":for(var m in t)p=t[m],t.hasOwnProperty(m)&&null!=p&&!r.hasOwnProperty(m)&&cl(e,n,m,null,r,p);for(u in r)if(p=r[u],h=t[u],r.hasOwnProperty(u)&&p!==h&&(null!=p||null!=h))switch(u){case\"children\":case\"dangerouslySetInnerHTML\":if(null!=p)throw Error(l(137,n));break;default:cl(e,n,u,p,r,h)}return;default:if(nf(n)){for(var v in t)p=t[v],t.hasOwnProperty(v)&&void 0!==p&&!r.hasOwnProperty(v)&&cs(e,n,v,void 0,r,p);for(d in r)p=r[d],h=t[d],r.hasOwnProperty(d)&&p!==h&&(void 0!==p||void 0!==h)&&cs(e,n,d,p,r,h);return}}for(var b in t)p=t[b],t.hasOwnProperty(b)&&null!=p&&!r.hasOwnProperty(b)&&cl(e,n,b,null,r,p);for(f in r)p=r[f],h=t[f],r.hasOwnProperty(f)&&p!==h&&(null!=p||null!=h)&&cl(e,n,f,p,r,h)})(r,e.type,t,n),r[eD]=n}catch(n){sP(e,e.return,n)}}function i8(e){return 5===e.tag||3===e.tag||26===e.tag||27===e.tag&&cj(e.type)||4===e.tag}function i7(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||i8(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(27===e.tag&&cj(e.type)||2&e.flags||null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function le(e,n,t){var r=e.tag;if(5===r||6===r)e=e.stateNode,n?t.insertBefore(e,n):t.appendChild(e);else if(4!==r&&(27===r&&cj(e.type)&&(t=e.stateNode),null!==(e=e.child)))for(le(e,n,t),e=e.sibling;null!==e;)le(e,n,t),e=e.sibling}function ln(e){var n=e.stateNode,t=e.memoizedProps;try{for(var r=e.type,o=n.attributes;o.length;)n.removeAttributeNode(o[0]);cc(n,r,t),n[eN]=e,n[eD]=t}catch(n){sP(e,e.return,n)}}var lt=!1,lr=!1,lo=!1,la=\"function\"==typeof WeakSet?WeakSet:Set,li=null;function ll(e,n,t){var r=t.flags;switch(t.tag){case 0:case 11:case 15:ly(e,t),4&r&&i0(5,t);break;case 1:if(ly(e,t),4&r)if(e=t.stateNode,null===n)try{e.componentDidMount()}catch(e){sP(t,t.return,e)}else{var o=ic(t.type,n.memoizedProps);n=n.memoizedState;try{e.componentDidUpdate(o,n,e.__reactInternalSnapshotBeforeUpdate)}catch(e){sP(t,t.return,e)}}64&r&&i2(t),512&r&&i5(t,t.return);break;case 3:if(ly(e,t),64&r&&null!==(e=t.updateQueue)){if(n=null,null!==t.child)switch(t.child.tag){case 27:case 5:case 1:n=t.child.stateNode}try{oL(e,n)}catch(e){sP(t,t.return,e)}}break;case 27:null===n&&4&r&&ln(t);case 26:case 5:ly(e,t),null===n&&4&r&&i6(t),512&r&&i5(t,t.return);break;case 12:default:ly(e,t);break;case 31:ly(e,t),4&r&&lf(e,t);break;case 13:ly(e,t),4&r&&lp(e,t),64&r&&null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)&&function(e,n){var t=e.ownerDocument;if(\"$~\"===e.data)e._reactRetry=n;else if(\"$?\"!==e.data||\"loading\"!==t.readyState)n();else{var r=function(){n(),t.removeEventListener(\"DOMContentLoaded\",r)};t.addEventListener(\"DOMContentLoaded\",r),e._reactRetry=r}}(e,t=sR.bind(null,t));break;case 22:if(!(r=null!==t.memoizedState||lt)){n=null!==n&&null!==n.memoizedState||lr,o=lt;var a=lr;lt=r,(lr=n)&&!a?function e(n,t,r){for(r=r&&0!=(8772&t.subtreeFlags),t=t.child;null!==t;){var o=t.alternate,a=n,i=t,l=i.flags;switch(i.tag){case 0:case 11:case 15:e(a,i,r),i0(4,i);break;case 1:if(e(a,i,r),\"function\"==typeof(a=(o=i).stateNode).componentDidMount)try{a.componentDidMount()}catch(e){sP(o,o.return,e)}if(null!==(a=(o=i).updateQueue)){var s=o.stateNode;try{var c=a.shared.hiddenCallbacks;if(null!==c)for(a.shared.hiddenCallbacks=null,a=0;a<c.length;a++)oz(c[a],s)}catch(e){sP(o,o.return,e)}}r&&64&l&&i2(i),i5(i,i.return);break;case 27:ln(i);case 26:case 5:e(a,i,r),r&&null===o&&4&l&&i6(i),i5(i,i.return);break;case 12:default:e(a,i,r);break;case 31:e(a,i,r),r&&4&l&&lf(a,i);break;case 13:e(a,i,r),r&&4&l&&lp(a,i);break;case 22:null===i.memoizedState&&e(a,i,r),i5(i,i.return);case 30:}t=t.sibling}}(e,t,0!=(8772&t.subtreeFlags)):ly(e,t),lt=o,lr=a}case 30:}}var ls=null,lc=!1;function lu(e,n,t){for(t=t.child;null!==t;)ld(e,n,t),t=t.sibling}function ld(e,n,t){if(ep&&\"function\"==typeof ep.onCommitFiberUnmount)try{ep.onCommitFiberUnmount(ef,t)}catch(e){}switch(t.tag){case 26:lr||i3(t,n),lu(e,n,t),t.memoizedState?t.memoizedState.count--:t.stateNode&&(t=t.stateNode).parentNode.removeChild(t);break;case 27:lr||i3(t,n);var r=ls,o=lc;cj(t.type)&&(ls=t.stateNode,lc=!1),lu(e,n,t),cR(t.stateNode),ls=r,lc=o;break;case 5:lr||i3(t,n);case 6:if(r=ls,o=lc,ls=null,lu(e,n,t),ls=r,lc=o,null!==ls)if(lc)try{(9===ls.nodeType?ls.body:\"HTML\"===ls.nodeName?ls.ownerDocument.body:ls).removeChild(t.stateNode)}catch(e){sP(t,n,e)}else try{ls.removeChild(t.stateNode)}catch(e){sP(t,n,e)}break;case 18:null!==ls&&(lc?(ck(9===(e=ls).nodeType?e.body:\"HTML\"===e.nodeName?e.ownerDocument.body:e,t.stateNode),uE(e)):ck(ls,t.stateNode));break;case 4:r=ls,o=lc,ls=t.stateNode.containerInfo,lc=!0,lu(e,n,t),ls=r,lc=o;break;case 0:case 11:case 14:case 15:lr||i1(2,t,n),lr||i1(4,t,n),lu(e,n,t);break;case 1:lr||(i3(t,n),\"function\"==typeof(r=t.stateNode).componentWillUnmount&&i4(t,n,r)),lu(e,n,t);break;case 21:default:lu(e,n,t);break;case 22:lr=(r=lr)||null!==t.memoizedState,lu(e,n,t),lr=r}}function lf(e,n){if(null===n.memoizedState&&null!==(e=n.alternate)&&null!==(e=e.memoizedState)){e=e.dehydrated;try{uE(e)}catch(e){sP(n,n.return,e)}}}function lp(e,n){if(null===n.memoizedState&&null!==(e=n.alternate)&&null!==(e=e.memoizedState)&&null!==(e=e.dehydrated))try{uE(e)}catch(e){sP(n,n.return,e)}}function lh(e,n){var t=function(e){switch(e.tag){case 31:case 13:case 19:var n=e.stateNode;return null===n&&(n=e.stateNode=new la),n;case 22:return null===(n=(e=e.stateNode)._retryCache)&&(n=e._retryCache=new la),n;default:throw Error(l(435,e.tag))}}(e);n.forEach(function(n){var r=sN.bind(null,e,n);t.has(n)||(t.add(n),n.then(r,r))})}function lg(e,n){var t=n.deletions;if(null!==t)for(var r=0;r<t.length;r++){var o=t[r],a=e,i=n,s=i;e:for(;null!==s;){switch(s.tag){case 27:if(cj(s.type)){ls=s.stateNode,lc=!1;break e}break;case 5:ls=s.stateNode,lc=!1;break e;case 3:case 4:ls=s.stateNode.containerInfo,lc=!0;break e}s=s.return}if(null===ls)throw Error(l(160));ld(a,i,o),ls=null,lc=!1,null!==(a=o.alternate)&&(a.return=null),o.return=null}if(13878&n.subtreeFlags)for(n=n.child;null!==n;)lv(n,e),n=n.sibling}var lm=null;function lv(e,n){var t=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:lg(n,e),lb(e),4&r&&(i1(3,e,e.return),i0(3,e),i1(5,e,e.return));break;case 1:lg(n,e),lb(e),512&r&&(lr||null===t||i3(t,t.return)),64&r&&lt&&null!==(e=e.updateQueue)&&null!==(r=e.callbacks)&&(t=e.shared.hiddenCallbacks,e.shared.hiddenCallbacks=null===t?r:t.concat(r));break;case 26:var o=lm;if(lg(n,e),lb(e),512&r&&(lr||null===t||i3(t,t.return)),4&r){var a=null!==t?t.memoizedState:null;if(r=e.memoizedState,null===t)if(null===r)if(null===e.stateNode){e:{r=e.type,t=e.memoizedProps,o=o.ownerDocument||o;n:switch(r){case\"title\":(!(a=o.getElementsByTagName(\"title\")[0])||a[eU]||a[eN]||\"http://www.w3.org/2000/svg\"===a.namespaceURI||a.hasAttribute(\"itemprop\"))&&(a=o.createElement(r),o.head.insertBefore(a,o.querySelector(\"head > title\"))),cc(a,r,t),a[eN]=e,eY(a),r=a;break e;case\"link\":var i=cG(\"link\",\"href\",o).get(r+(t.href||\"\"));if(i){for(var s=0;s<i.length;s++)if((a=i[s]).getAttribute(\"href\")===(null==t.href||\"\"===t.href?null:t.href)&&a.getAttribute(\"rel\")===(null==t.rel?null:t.rel)&&a.getAttribute(\"title\")===(null==t.title?null:t.title)&&a.getAttribute(\"crossorigin\")===(null==t.crossOrigin?null:t.crossOrigin)){i.splice(s,1);break n}}cc(a=o.createElement(r),r,t),o.head.appendChild(a);break;case\"meta\":if(i=cG(\"meta\",\"content\",o).get(r+(t.content||\"\"))){for(s=0;s<i.length;s++)if((a=i[s]).getAttribute(\"content\")===(null==t.content?null:\"\"+t.content)&&a.getAttribute(\"name\")===(null==t.name?null:t.name)&&a.getAttribute(\"property\")===(null==t.property?null:t.property)&&a.getAttribute(\"http-equiv\")===(null==t.httpEquiv?null:t.httpEquiv)&&a.getAttribute(\"charset\")===(null==t.charSet?null:t.charSet)){i.splice(s,1);break n}}cc(a=o.createElement(r),r,t),o.head.appendChild(a);break;default:throw Error(l(468,r))}a[eN]=e,eY(a),r=a}e.stateNode=r}else cJ(o,e.type,e.stateNode);else e.stateNode=cZ(o,r,e.memoizedProps);else a!==r?(null===a?null!==t.stateNode&&(t=t.stateNode).parentNode.removeChild(t):a.count--,null===r?cJ(o,e.type,e.stateNode):cZ(o,r,e.memoizedProps)):null===r&&null!==e.stateNode&&i9(e,e.memoizedProps,t.memoizedProps)}break;case 27:lg(n,e),lb(e),512&r&&(lr||null===t||i3(t,t.return)),null!==t&&4&r&&i9(e,e.memoizedProps,t.memoizedProps);break;case 5:if(lg(n,e),lb(e),512&r&&(lr||null===t||i3(t,t.return)),32&e.flags){o=e.stateNode;try{ns(o,\"\")}catch(n){sP(e,e.return,n)}}4&r&&null!=e.stateNode&&(o=e.memoizedProps,i9(e,o,null!==t?t.memoizedProps:o)),1024&r&&(lo=!0);break;case 6:if(lg(n,e),lb(e),4&r){if(null===e.stateNode)throw Error(l(162));r=e.memoizedProps,t=e.stateNode;try{t.nodeValue=r}catch(n){sP(e,e.return,n)}}break;case 3:if(cQ=null,o=lm,lm=cB(n.containerInfo),lg(n,e),lm=o,lb(e),4&r&&null!==t&&t.memoizedState.isDehydrated)try{uE(n.containerInfo)}catch(n){sP(e,e.return,n)}lo&&(lo=!1,function e(n){if(1024&n.subtreeFlags)for(n=n.child;null!==n;){var t=n;e(t),5===t.tag&&1024&t.flags&&t.stateNode.reset(),n=n.sibling}}(e));break;case 4:r=lm,lm=cB(e.stateNode.containerInfo),lg(n,e),lb(e),lm=r;break;case 12:default:lg(n,e),lb(e);break;case 31:case 19:lg(n,e),lb(e),4&r&&null!==(r=e.updateQueue)&&(e.updateQueue=null,lh(e,r));break;case 13:lg(n,e),lb(e),8192&e.child.flags&&null!==e.memoizedState!=(null!==t&&null!==t.memoizedState)&&(lJ=er()),4&r&&null!==(r=e.updateQueue)&&(e.updateQueue=null,lh(e,r));break;case 22:o=null!==e.memoizedState;var c=null!==t&&null!==t.memoizedState,u=lt,d=lr;if(lt=u||o,lr=d||c,lg(n,e),lr=d,lt=u,lb(e),8192&r)e:for((n=e.stateNode)._visibility=o?-2&n._visibility:1|n._visibility,o&&(null===t||c||lt||lr||function e(n){for(n=n.child;null!==n;){var t=n;switch(t.tag){case 0:case 11:case 14:case 15:i1(4,t,t.return),e(t);break;case 1:i3(t,t.return);var r=t.stateNode;\"function\"==typeof r.componentWillUnmount&&i4(t,t.return,r),e(t);break;case 27:cR(t.stateNode);case 26:case 5:i3(t,t.return),e(t);break;case 22:null===t.memoizedState&&e(t);break;default:e(t)}n=n.sibling}}(e)),t=null,n=e;;){if(5===n.tag||26===n.tag){if(null===t){c=t=n;try{if(a=c.stateNode,o)i=a.style,\"function\"==typeof i.setProperty?i.setProperty(\"display\",\"none\",\"important\"):i.display=\"none\";else{s=c.stateNode;var f=c.memoizedProps.style,p=null!=f&&f.hasOwnProperty(\"display\")?f.display:null;s.style.display=null==p||\"boolean\"==typeof p?\"\":(\"\"+p).trim()}}catch(e){sP(c,c.return,e)}}}else if(6===n.tag){if(null===t){c=n;try{c.stateNode.nodeValue=o?\"\":c.memoizedProps}catch(e){sP(c,c.return,e)}}}else if(18===n.tag){if(null===t){c=n;try{var h=c.stateNode;o?cA(h,!0):cA(c.stateNode,!1)}catch(e){sP(c,c.return,e)}}}else if((22!==n.tag&&23!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)break e;t===n&&(t=null),n=n.return}t===n&&(t=null),n.sibling.return=n.return,n=n.sibling}4&r&&null!==(r=e.updateQueue)&&null!==(t=r.retryQueue)&&(r.retryQueue=null,lh(e,t));case 30:case 21:}}function lb(e){var n=e.flags;if(2&n){try{for(var t,r=e.return;null!==r;){if(i8(r)){t=r;break}r=r.return}if(null==t)throw Error(l(160));switch(t.tag){case 27:var o=t.stateNode,a=i7(e);le(e,a,o);break;case 5:var i=t.stateNode;32&t.flags&&(ns(i,\"\"),t.flags&=-33);var s=i7(e);le(e,s,i);break;case 3:case 4:var c=t.stateNode.containerInfo,u=i7(e);!function e(n,t,r){var o=n.tag;if(5===o||6===o)n=n.stateNode,t?(9===r.nodeType?r.body:\"HTML\"===r.nodeName?r.ownerDocument.body:r).insertBefore(n,t):((t=9===r.nodeType?r.body:\"HTML\"===r.nodeName?r.ownerDocument.body:r).appendChild(n),null!=(r=r._reactRootContainer)||null!==t.onclick||(t.onclick=nm));else if(4!==o&&(27===o&&cj(n.type)&&(r=n.stateNode,t=null),null!==(n=n.child)))for(e(n,t,r),n=n.sibling;null!==n;)e(n,t,r),n=n.sibling}(e,u,c);break;default:throw Error(l(161))}}catch(n){sP(e,e.return,n)}e.flags&=-3}4096&n&&(e.flags&=-4097)}function ly(e,n){if(8772&n.subtreeFlags)for(n=n.child;null!==n;)ll(e,n.alternate,n),n=n.sibling}function lx(e,n){var t=null;null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(t=e.memoizedState.cachePool.pool),e=null,null!==n.memoizedState&&null!==n.memoizedState.cachePool&&(e=n.memoizedState.cachePool.pool),e!==t&&(null!=e&&e.refCount++,null!=t&&r2(t))}function lw(e,n){e=null,null!==n.alternate&&(e=n.alternate.memoizedState.cache),(n=n.memoizedState.cache)!==e&&(n.refCount++,null!=e&&r2(e))}function lj(e,n,t,r){if(10256&n.subtreeFlags)for(n=n.child;null!==n;)lk(e,n,t,r),n=n.sibling}function lk(e,n,t,r){var o=n.flags;switch(n.tag){case 0:case 11:case 15:lj(e,n,t,r),2048&o&&i0(9,n);break;case 1:case 31:case 13:default:lj(e,n,t,r);break;case 3:lj(e,n,t,r),2048&o&&(e=null,null!==n.alternate&&(e=n.alternate.memoizedState.cache),(n=n.memoizedState.cache)!==e&&(n.refCount++,null!=e&&r2(e)));break;case 12:if(2048&o){lj(e,n,t,r),e=n.stateNode;try{var a=n.memoizedProps,i=a.id,l=a.onPostCommit;\"function\"==typeof l&&l(i,null===n.alternate?\"mount\":\"update\",e.passiveEffectDuration,-0)}catch(e){sP(n,n.return,e)}}else lj(e,n,t,r);break;case 23:break;case 22:a=n.stateNode,i=n.alternate,null!==n.memoizedState?2&a._visibility?lj(e,n,t,r):lA(e,n):2&a._visibility?lj(e,n,t,r):(a._visibility|=2,function e(n,t,r,o,a){for(a=a&&0!=(10256&t.subtreeFlags),t=t.child;null!==t;){var i=t,l=i.flags;switch(i.tag){case 0:case 11:case 15:e(n,i,r,o,a),i0(8,i);break;case 23:break;case 22:var s=i.stateNode;null!==i.memoizedState?2&s._visibility?e(n,i,r,o,a):lA(n,i):(s._visibility|=2,e(n,i,r,o,a)),a&&2048&l&&lx(i.alternate,i);break;case 24:e(n,i,r,o,a),a&&2048&l&&lw(i.alternate,i);break;default:e(n,i,r,o,a)}t=t.sibling}}(e,n,t,r,0!=(10256&n.subtreeFlags))),2048&o&&lx(i,n);break;case 24:lj(e,n,t,r),2048&o&&lw(n.alternate,n)}}function lA(e,n){if(10256&n.subtreeFlags)for(n=n.child;null!==n;){var t=n,r=t.flags;switch(t.tag){case 22:lA(e,t),2048&r&&lx(t.alternate,t);break;case 24:lA(e,t),2048&r&&lw(t.alternate,t);break;default:lA(e,t)}n=n.sibling}}var lO=8192;function lC(e){if(e.subtreeFlags&lO)for(e=e.child;null!==e;)lS(e),e=e.sibling}function lS(e){switch(e.tag){case 26:lC(e),e.flags&lO&&null!==e.memoizedState&&function(e,n,t){if(null===c1)throw Error(l(475));var r=c1;if(\"stylesheet\"===n.type&&(\"string\"!=typeof t.media||!1!==matchMedia(t.media).matches)&&0==(4&n.state.loading)){if(null===n.instance){var o=cU(t.href),a=e.querySelector(cV(o));if(a){null!==(e=a._p)&&\"object\"==typeof e&&\"function\"==typeof e.then&&(r.count++,r=c2.bind(r),e.then(r,r)),n.state.loading|=4,n.instance=a,eY(a);return}a=e.ownerDocument||e,t=cq(t),(o=cN.get(o))&&cX(t,o),eY(a=a.createElement(\"link\"));var i=a;i._p=new Promise(function(e,n){i.onload=e,i.onerror=n}),cc(a,\"link\",t),n.instance=a}null===r.stylesheets&&(r.stylesheets=new Map),r.stylesheets.set(n,e),(e=n.state.preload)&&0==(3&n.state.loading)&&(r.count++,n=c2.bind(r),e.addEventListener(\"load\",n),e.addEventListener(\"error\",n))}}(lm,e.memoizedState,e.memoizedProps);break;case 5:default:lC(e);break;case 3:case 4:var n=lm;lm=cB(e.stateNode.containerInfo),lC(e),lm=n;break;case 22:null===e.memoizedState&&(null!==(n=e.alternate)&&null!==n.memoizedState?(n=lO,lO=0x1000000,lC(e),lO=n):lC(e))}}function lE(e){var n=e.alternate;if(null!==n&&null!==(e=n.child)){n.child=null;do n=e.sibling,e.sibling=null,e=n;while(null!==e)}}function l_(e){var n=e.deletions;if(0!=(16&e.flags)){if(null!==n)for(var t=0;t<n.length;t++){var r=n[t];li=r,lz(r,e)}lE(e)}if(10256&e.subtreeFlags)for(e=e.child;null!==e;)lP(e),e=e.sibling}function lP(e){switch(e.tag){case 0:case 11:case 15:l_(e),2048&e.flags&&i1(9,e,e.return);break;case 3:case 12:default:l_(e);break;case 22:var n=e.stateNode;null!==e.memoizedState&&2&n._visibility&&(null===e.return||13!==e.return.tag)?(n._visibility&=-3,function e(n){var t=n.deletions;if(0!=(16&n.flags)){if(null!==t)for(var r=0;r<t.length;r++){var o=t[r];li=o,lz(o,n)}lE(n)}for(n=n.child;null!==n;){switch((t=n).tag){case 0:case 11:case 15:i1(8,t,t.return),e(t);break;case 22:2&(r=t.stateNode)._visibility&&(r._visibility&=-3,e(t));break;default:e(t)}n=n.sibling}}(e)):l_(e)}}function lz(e,n){for(;null!==li;){var t=li;switch(t.tag){case 0:case 11:case 15:i1(8,t,n);break;case 23:case 22:if(null!==t.memoizedState&&null!==t.memoizedState.cachePool){var r=t.memoizedState.cachePool.pool;null!=r&&r.refCount++}break;case 24:r2(t.memoizedState.cache)}if(null!==(r=t.child))r.return=t,li=r;else for(t=e;null!==li;){var o=(r=li).sibling,a=r.return;if(!function e(n){var t=n.alternate;null!==t&&(n.alternate=null,e(t)),n.child=null,n.deletions=null,n.sibling=null,5===n.tag&&null!==(t=n.stateNode)&&eV(t),n.stateNode=null,n.return=null,n.dependencies=null,n.memoizedProps=null,n.memoizedState=null,n.pendingProps=null,n.stateNode=null,n.updateQueue=null}(r),r===t){li=null;break}if(null!==o){o.return=a,li=o;break}li=a}}}var lL={getCacheForType:function(e){var n=rY(r0),t=n.data.get(e);return void 0===t&&(t=e(),n.data.set(e,t)),t},cacheSignal:function(){return rY(r0).controller.signal}},lT=\"function\"==typeof WeakMap?WeakMap:Map,lR=0,lN=null,lD=null,lB=0,lM=0,lI=null,lH=!1,lF=!1,lU=!1,lV=0,lq=0,lW=0,l$=0,lZ=0,lY=0,lX=0,lK=null,lQ=null,lG=!1,lJ=0,l0=1/0,l1=null,l2=null,l4=0,l5=null,l3=null,l6=0,l9=0,l8=null,l7=null,se=0,sn=null;function st(){return 0!=(2&lR)&&0!==lB?lB&-lB:null!==L.T?sX():eL()}function sr(){0===lY&&(lY=0==(0x20000000&lB)||rS?ek():0x20000000);var e=oM.current;return null!==e&&(e.flags|=32),lY}function so(e,n,t){(e===lN&&(2===lM||9===lM)||null!==e.cancelPendingCommit)&&(su(e,0),sl(e,lB,lY,!1)),eC(e,t),(0==(2&lR)||e!==lN)&&(e===lN&&(0==(2&lR)&&(l$|=t),4===lq&&sl(e,lB,lY,!1)),sU(e))}function sa(e,n,t){if(0!=(6&lR))throw Error(l(327));for(var r=!t&&0==(124&n)&&0==(n&e.expiredLanes)||ej(e,n),o=r?function(e,n){var t=lR;lR|=2;var r=sp(),o=sh();lN!==e||lB!==n?(l1=null,l0=er()+500,su(e,n)):lF=ej(e,n);e:for(;;)try{if(0!==lM&&null!==lD){n=lD;var a=lI;n:switch(lM){case 1:lM=0,lI=null,sy(e,n,a,1);break;case 2:case 9:if(ol(a)){lM=0,lI=null,sb(n);break}n=function(){2!==lM&&9!==lM||lN!==e||(lM=7),sU(e)},a.then(n,n);break e;case 3:lM=7;break e;case 4:lM=5;break e;case 7:ol(a)?(lM=0,lI=null,sb(n)):(lM=0,lI=null,sy(e,n,a,7));break;case 5:var i=null;switch(lD.tag){case 26:i=lD.memoizedState;case 5:case 27:var s=lD;if(i?c0(i):s.stateNode.complete){lM=0,lI=null;var c=s.sibling;if(null!==c)lD=c;else{var u=s.return;null!==u?(lD=u,sx(u)):lD=null}break n}}lM=0,lI=null,sy(e,n,a,5);break;case 6:lM=0,lI=null,sy(e,n,a,6);break;case 8:sc(),lq=6;break e;default:throw Error(l(462))}}for(;null!==lD&&!en();)sv(lD);break}catch(n){sd(e,n)}return(rH=rI=null,L.H=r,L.A=o,lR=t,null!==lD)?0:(lN=null,lB=0,t2(),lq)}(e,n):sm(e,n,!0),a=r;;){if(0===o)lF&&!r&&sl(e,n,0,!1);else{if(t=e.current.alternate,a&&!function(e){for(var n=e;;){var t=n.tag;if((0===t||11===t||15===t)&&16384&n.flags&&null!==(t=n.updateQueue)&&null!==(t=t.stores))for(var r=0;r<t.length;r++){var o=t[r],a=o.getSnapshot;o=o.value;try{if(!tO(a(),o))return!1}catch(e){return!1}}if(t=n.child,16384&n.subtreeFlags&&null!==t)t.return=n,n=t;else{if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return!0;n=n.return}n.sibling.return=n.return,n=n.sibling}}return!0}(t)){o=sm(e,n,!1),a=!1;continue}if(2===o){if(a=n,e.errorRecoveryDisabledLanes&a)var i=0;else i=0!=(i=-0x20000001&e.pendingLanes)?i:0x20000000&i?0x20000000:0;if(0!==i){n=i;e:{o=lK;var s=e.current.memoizedState.isDehydrated;if(s&&(su(e,i).flags|=256),2!==(i=sm(e,i,!1))){if(lU&&!s){e.errorRecoveryDisabledLanes|=a,l$|=a,o=4;break e}a=lQ,lQ=o,null!==a&&(null===lQ?lQ=a:lQ.push.apply(lQ,a))}o=i}if(a=!1,2!==o)continue}}if(1===o){su(e,0),sl(e,n,0,!0);break}e:{switch(r=e,a=o){case 0:case 1:throw Error(l(345));case 4:if((4194048&n)!==n)break;case 6:sl(r,n,lY,!lH);break e;case 2:lQ=null;break;case 3:case 5:break;default:throw Error(l(329))}if((0x3c00000&n)===n&&10<(o=lJ+300-er())){if(sl(r,n,lY,!lH),0!==ew(r,0,!0))break e;r.timeoutHandle=cv(si.bind(null,r,t,lQ,l1,lG,n,lY,l$,lX,lH,a,2,-0,0),o);break e}si(r,t,lQ,l1,lG,n,lY,l$,lX,lH,a,0,-0,0)}}break}sU(e)}function si(e,n,t,r,o,a,i,s,c,u,d,f,p,h){if(e.timeoutHandle=-1,(8192&(f=n.subtreeFlags)||0x1002000==(0x1002000&f))&&(c1={stylesheets:null,count:0,unsuspend:nm},lS(n),null!==(f=function(){if(null===c1)throw Error(l(475));var e=c1;return e.stylesheets&&0===e.count&&c5(e,e.stylesheets),0<e.count?function(n){var t=setTimeout(function(){if(e.stylesheets&&c5(e,e.stylesheets),e.unsuspend){var n=e.unsuspend;e.unsuspend=null,n()}},6e4);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(t)}}:null}()))){e.cancelPendingCommit=f(sj.bind(null,e,n,a,t,r,o,i,s,c,d,1,p,h)),sl(e,a,i,!u);return}sj(e,n,a,t,r,o,i,s,c)}function sl(e,n,t,r){n&=~lZ,n&=~l$,e.suspendedLanes|=n,e.pingedLanes&=~n,r&&(e.warmLanes|=n),r=e.expirationTimes;for(var o=n;0<o;){var a=31-eg(o),i=1<<a;r[a]=-1,o&=~i}0!==t&&eS(e,t,n)}function ss(){return 0!=(6&lR)||(sV(0,!1),!1)}function sc(){if(null!==lD){if(0===lM)var e=lD.return;else e=lD,rH=rI=null,at(e),of=null,op=0,e=lD;for(;null!==e;)iJ(e.alternate,e),e=e.return;lD=null}}function su(e,n){var t=e.timeoutHandle;-1!==t&&(e.timeoutHandle=-1,cb(t)),null!==(t=e.cancelPendingCommit)&&(e.cancelPendingCommit=null,t()),sc(),lN=e,lD=t=rt(e.current,null),lB=n,lM=0,lI=null,lH=!1,lF=ej(e,n),lU=!1,lX=lY=lZ=l$=lW=lq=0,lQ=lK=null,lG=!1,0!=(8&n)&&(n|=32&n);var r=e.entangledLanes;if(0!==r)for(e=e.entanglements,r&=n;0<r;){var o=31-eg(r),a=1<<o;n|=e[o],r&=~a}return lV=n,t2(),t}function sd(e,n){oY=null,L.H=ie,n===or||n===oa?(n=ou(),lM=3):n===oo?(n=ou(),lM=4):lM=n===iy?8:null!==n&&\"object\"==typeof n&&\"function\"==typeof n.then?6:1,lI=n,null===lD&&(lq=1,ih(e,ru(n,e.current)))}function sf(){var e=oM.current;return null===e||((4194048&lB)===lB?null===oI:((0x3c00000&lB)===lB||0!=(0x20000000&lB))&&e===oI)}function sp(){var e=L.H;return L.H=ie,null===e?ie:e}function sh(){var e=L.A;return L.A=lL,e}function sg(){lq=4,lH||(4194048&lB)!==lB&&null!==oM.current||(lF=!0),0==(0x7ffffff&lW)&&0==(0x7ffffff&l$)||null===lN||sl(lN,lB,lY,!1)}function sm(e,n,t){var r=lR;lR|=2;var o=sp(),a=sh();(lN!==e||lB!==n)&&(l1=null,su(e,n)),n=!1;var i=lq;e:for(;;)try{if(0!==lM&&null!==lD){var l=lD,s=lI;switch(lM){case 8:sc(),i=6;break e;case 3:case 2:case 9:case 6:null===oM.current&&(n=!0);var c=lM;if(lM=0,lI=null,sy(e,l,s,c),t&&lF){i=0;break e}break;default:c=lM,lM=0,lI=null,sy(e,l,s,c)}}(function(){for(;null!==lD;)sv(lD)})(),i=lq;break}catch(n){sd(e,n)}return n&&e.shellSuspendCounter++,rH=rI=null,lR=r,L.H=o,L.A=a,null===lD&&(lN=null,lB=0,t2()),i}function sv(e){var n=i$(e.alternate,e,lV);e.memoizedProps=e.pendingProps,null===n?sx(e):lD=n}function sb(e){var n=e,t=n.alternate;switch(n.tag){case 15:case 0:n=iz(t,n,n.pendingProps,n.type,void 0,lB);break;case 11:n=iz(t,n,n.pendingProps,n.type.render,n.ref,lB);break;case 5:at(n);default:iJ(t,n),n=i$(t,n=lD=rr(n,lV),lV)}e.memoizedProps=e.pendingProps,null===n?sx(e):lD=n}function sy(e,n,t,r){rH=rI=null,at(n),of=null,op=0;var o=n.return;try{if(function(e,n,t,r,o){if(t.flags|=32768,null!==r&&\"object\"==typeof r&&\"function\"==typeof r.then){if(null!==(n=t.alternate)&&rW(n,t,o,!0),null!==(t=oM.current)){switch(t.tag){case 31:case 13:return null===oI?sg():null===t.alternate&&0===lq&&(lq=3),t.flags&=-257,t.flags|=65536,t.lanes=o,r===oi?t.flags|=16384:(null===(n=t.updateQueue)?t.updateQueue=new Set([r]):n.add(r),sz(e,r,o)),!1;case 22:return t.flags|=65536,r===oi?t.flags|=16384:(null===(n=t.updateQueue)?(n={transitions:null,markerInstances:null,retryQueue:new Set([r])},t.updateQueue=n):null===(t=n.retryQueue)?n.retryQueue=new Set([r]):t.add(r),sz(e,r,o)),!1}throw Error(l(435,t.tag))}return sz(e,r,o),sg(),!1}if(rS)return null!==(n=oM.current)?(0==(65536&n.flags)&&(n.flags|=256),n.flags|=65536,n.lanes=o,r!==rP&&rB(ru(e=Error(l(422),{cause:r}),t))):(r!==rP&&rB(ru(n=Error(l(423),{cause:r}),t)),e=e.current.alternate,e.flags|=65536,o&=-o,e.lanes|=o,r=ru(r,t),o=im(e.stateNode,r,o),oS(e,o),4!==lq&&(lq=2)),!1;var a=Error(l(520),{cause:r});if(a=ru(a,t),null===lK?lK=[a]:lK.push(a),4!==lq&&(lq=2),null===n)return!0;r=ru(r,t),t=n;do{switch(t.tag){case 3:return t.flags|=65536,e=o&-o,t.lanes|=e,e=im(t.stateNode,r,e),oS(t,e),!1;case 1:if(n=t.type,a=t.stateNode,0==(128&t.flags)&&(\"function\"==typeof n.getDerivedStateFromError||null!==a&&\"function\"==typeof a.componentDidCatch&&(null===l2||!l2.has(a))))return t.flags|=65536,o&=-o,t.lanes|=o,ib(o=iv(o),e,t,r),oS(t,o),!1}t=t.return}while(null!==t);return!1}(e,o,n,t,lB)){lq=1,ih(e,ru(t,e.current)),lD=null;return}}catch(n){if(null!==o)throw lD=o,n;lq=1,ih(e,ru(t,e.current)),lD=null;return}32768&n.flags?(rS||1===r?e=!0:lF||0!=(0x20000000&lB)?e=!1:(lH=e=!0,(2===r||9===r||3===r||6===r)&&null!==(r=oM.current)&&13===r.tag&&(r.flags|=16384)),sw(n,e)):sx(n)}function sx(e){var n=e;do{if(0!=(32768&n.flags))return void sw(n,lH);e=n.return;var t=function(e,n,t){var r=n.pendingProps;switch(rk(n),n.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:case 1:return iG(n),null;case 3:return t=n.stateNode,r=null,null!==e&&(r=e.memoizedState.cache),n.memoizedState.cache!==r&&(n.flags|=2048),rU(r0),W(),t.pendingContext&&(t.context=t.pendingContext,t.pendingContext=null),(null===e||null===e.child)&&(rR(n)?iZ(n):null===e||e.memoizedState.isDehydrated&&0==(256&n.flags)||(n.flags|=1024,rD())),iG(n),null;case 26:var o=n.type,a=n.memoizedState;return null===e?(iZ(n),null!==a?(iG(n),iX(n,a)):(iG(n),iY(n,o,null,r,t))):a?a!==e.memoizedState?(iZ(n),iG(n),iX(n,a)):(iG(n),n.flags&=-0x1000001):((e=e.memoizedProps)!==r&&iZ(n),iG(n),iY(n,o,e,r,t)),null;case 27:if(Z(n),t=U.current,o=n.type,null!==e&&null!=n.stateNode)e.memoizedProps!==r&&iZ(n);else{if(!r){if(null===n.stateNode)throw Error(l(166));return iG(n),null}e=H.current,rR(n)?rL(n,e):(n.stateNode=e=cT(o,r,t),iZ(n))}return iG(n),null;case 5:if(Z(n),o=n.type,null!==e&&null!=n.stateNode)e.memoizedProps!==r&&iZ(n);else{if(!r){if(null===n.stateNode)throw Error(l(166));return iG(n),null}if(a=H.current,rR(n))rL(n,a);else{var i=cf(U.current);switch(a){case 1:a=i.createElementNS(\"http://www.w3.org/2000/svg\",o);break;case 2:a=i.createElementNS(\"http://www.w3.org/1998/Math/MathML\",o);break;default:switch(o){case\"svg\":a=i.createElementNS(\"http://www.w3.org/2000/svg\",o);break;case\"math\":a=i.createElementNS(\"http://www.w3.org/1998/Math/MathML\",o);break;case\"script\":(a=i.createElement(\"div\")).innerHTML=\"<script><\\/script>\",a=a.removeChild(a.firstChild);break;case\"select\":a=\"string\"==typeof r.is?i.createElement(\"select\",{is:r.is}):i.createElement(\"select\"),r.multiple?a.multiple=!0:r.size&&(a.size=r.size);break;default:a=\"string\"==typeof r.is?i.createElement(o,{is:r.is}):i.createElement(o)}}a[eN]=n,a[eD]=r;e:for(i=n.child;null!==i;){if(5===i.tag||6===i.tag)a.appendChild(i.stateNode);else if(4!==i.tag&&27!==i.tag&&null!==i.child){i.child.return=i,i=i.child;continue}if(i===n)break;for(;null===i.sibling;){if(null===i.return||i.return===n)break e;i=i.return}i.sibling.return=i.return,i=i.sibling}switch(n.stateNode=a,cc(a,o,r),o){case\"button\":case\"input\":case\"select\":case\"textarea\":r=!!r.autoFocus;break;case\"img\":r=!0;break;default:r=!1}r&&iZ(n)}}return iG(n),iY(n,n.type,null===e?null:e.memoizedProps,n.pendingProps,t),null;case 6:if(e&&null!=n.stateNode)e.memoizedProps!==r&&iZ(n);else{if(\"string\"!=typeof r&&null===n.stateNode)throw Error(l(166));if(e=U.current,rR(n)){if(e=n.stateNode,t=n.memoizedProps,r=null,null!==(o=rO))switch(o.tag){case 27:case 5:r=o.memoizedProps}e[eN]=n,(e=!!(e.nodeValue===t||null!==r&&!0===r.suppressHydrationWarning||ci(e.nodeValue,t)))||rz(n,!0)}else(e=cf(e).createTextNode(r))[eN]=n,n.stateNode=e}return iG(n),null;case 31:if(t=n.memoizedState,null===e||null!==e.memoizedState){if(r=rR(n),null!==t){if(null===e){if(!r)throw Error(l(318));if(!(e=null!==(e=n.memoizedState)?e.dehydrated:null))throw Error(l(557));e[eN]=n}else rN(),0==(128&n.flags)&&(n.memoizedState=null),n.flags|=4;iG(n),e=!1}else t=rD(),null!==e&&null!==e.memoizedState&&(e.memoizedState.hydrationErrors=t),e=!0;if(!e){if(256&n.flags)return oq(n),n;return oq(n),null}if(0!=(128&n.flags))throw Error(l(558))}return iG(n),null;case 13:if(r=n.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(o=rR(n),null!==r&&null!==r.dehydrated){if(null===e){if(!o)throw Error(l(318));if(!(o=null!==(o=n.memoizedState)?o.dehydrated:null))throw Error(l(317));o[eN]=n}else rN(),0==(128&n.flags)&&(n.memoizedState=null),n.flags|=4;iG(n),o=!1}else o=rD(),null!==e&&null!==e.memoizedState&&(e.memoizedState.hydrationErrors=o),o=!0;if(!o){if(256&n.flags)return oq(n),n;return oq(n),null}}if(oq(n),0!=(128&n.flags))return n.lanes=t,n;return t=null!==r,e=null!==e&&null!==e.memoizedState,t&&(r=n.child,o=null,null!==r.alternate&&null!==r.alternate.memoizedState&&null!==r.alternate.memoizedState.cachePool&&(o=r.alternate.memoizedState.cachePool.pool),a=null,null!==r.memoizedState&&null!==r.memoizedState.cachePool&&(a=r.memoizedState.cachePool.pool),a!==o&&(r.flags|=2048)),t!==e&&t&&(n.child.flags|=8192),iK(n,n.updateQueue),iG(n),null;case 4:return W(),null===e&&s6(n.stateNode.containerInfo),iG(n),null;case 10:return rU(n.type),iG(n),null;case 19:if(M(oW),null===(r=n.memoizedState))return iG(n),null;if(o=0!=(128&n.flags),null===(a=r.rendering))if(o)iQ(r,!1);else{if(0!==lq||null!==e&&0!=(128&e.flags))for(e=n.child;null!==e;){if(null!==(a=o$(e))){for(n.flags|=128,iQ(r,!1),n.updateQueue=e=a.updateQueue,iK(n,e),n.subtreeFlags=0,e=t,t=n.child;null!==t;)rr(t,e),t=t.sibling;return I(oW,1&oW.current|2),rS&&rx(n,r.treeForkCount),n.child}e=e.sibling}null!==r.tail&&er()>l0&&(n.flags|=128,o=!0,iQ(r,!1),n.lanes=4194304)}else{if(!o)if(null!==(e=o$(a))){if(n.flags|=128,o=!0,n.updateQueue=e=e.updateQueue,iK(n,e),iQ(r,!0),null===r.tail&&\"hidden\"===r.tailMode&&!a.alternate&&!rS)return iG(n),null}else 2*er()-r.renderingStartTime>l0&&0x20000000!==t&&(n.flags|=128,o=!0,iQ(r,!1),n.lanes=4194304);r.isBackwards?(a.sibling=n.child,n.child=a):(null!==(e=r.last)?e.sibling=a:n.child=a,r.last=a)}if(null!==r.tail)return e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=er(),e.sibling=null,t=oW.current,I(oW,o?1&t|2:1&t),rS&&rx(n,r.treeForkCount),e;return iG(n),null;case 22:case 23:return oq(n),oB(),r=null!==n.memoizedState,null!==e?null!==e.memoizedState!==r&&(n.flags|=8192):r&&(n.flags|=8192),r?0!=(0x20000000&t)&&0==(128&n.flags)&&(iG(n),6&n.subtreeFlags&&(n.flags|=8192)):iG(n),null!==(t=n.updateQueue)&&iK(n,t.retryQueue),t=null,null!==e&&null!==e.memoizedState&&null!==e.memoizedState.cachePool&&(t=e.memoizedState.cachePool.pool),r=null,null!==n.memoizedState&&null!==n.memoizedState.cachePool&&(r=n.memoizedState.cachePool.pool),r!==t&&(n.flags|=2048),null!==e&&M(r7),null;case 24:return t=null,null!==e&&(t=e.memoizedState.cache),n.memoizedState.cache!==t&&(n.flags|=2048),rU(r0),iG(n),null;case 25:case 30:return null}throw Error(l(156,n.tag))}(n.alternate,n,lV);if(null!==t){lD=t;return}if(null!==(n=n.sibling)){lD=n;return}lD=n=e}while(null!==n);0===lq&&(lq=5)}function sw(e,n){do{var t=function(e,n){switch(rk(n),n.tag){case 1:return 65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 3:return rU(r0),W(),0!=(65536&(e=n.flags))&&0==(128&e)?(n.flags=-65537&e|128,n):null;case 26:case 27:case 5:return Z(n),null;case 31:if(null!==n.memoizedState){if(oq(n),null===n.alternate)throw Error(l(340));rN()}return 65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 13:if(oq(n),null!==(e=n.memoizedState)&&null!==e.dehydrated){if(null===n.alternate)throw Error(l(340));rN()}return 65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 19:return M(oW),null;case 4:return W(),null;case 10:return rU(n.type),null;case 22:case 23:return oq(n),oB(),null!==e&&M(r7),65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 24:return rU(r0),null;default:return null}}(e.alternate,e);if(null!==t){t.flags&=32767,lD=t;return}if(null!==(t=e.return)&&(t.flags|=32768,t.subtreeFlags=0,t.deletions=null),!n&&null!==(e=e.sibling)){lD=e;return}lD=e=t}while(null!==e);lq=6,lD=null}function sj(e,n,t,r,o,a,i,s,c){e.cancelPendingCommit=null;do sS();while(0!==l4);if(0!=(6&lR))throw Error(l(327));if(null!==n){if(n===e.current)throw Error(l(177));if(!function(e,n,t,r,o,a){var i=e.pendingLanes;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=t,e.entangledLanes&=t,e.errorRecoveryDisabledLanes&=t,e.shellSuspendCounter=0;var l=e.entanglements,s=e.expirationTimes,c=e.hiddenUpdates;for(t=i&~t;0<t;){var u=31-eg(t),d=1<<u;l[u]=0,s[u]=-1;var f=c[u];if(null!==f)for(c[u]=null,u=0;u<f.length;u++){var p=f[u];null!==p&&(p.lane&=-0x20000001)}t&=~d}0!==r&&eS(e,r,0),0!==a&&0===o&&0!==e.tag&&(e.suspendedLanes|=a&~(i&~n))}(e,t,a=n.lanes|n.childLanes|t1,i,s,c),e===lN&&(lD=lN=null,lB=0),l3=n,l5=e,l6=t,l9=a,l8=o,l7=r,0!=(10256&n.subtreeFlags)||0!=(10256&n.flags)?(e.callbackNode=null,e.callbackPriority=0,J(el,function(){return sE(!0),null})):(e.callbackNode=null,e.callbackPriority=0),r=0!=(13878&n.flags),0!=(13878&n.subtreeFlags)||r){r=L.T,L.T=null,o=T.p,T.p=2,i=lR,lR|=4;try{!function(e,n){if(e=e.containerInfo,cu=ur,tP(e=t_(e))){if(\"selectionStart\"in e)var t={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(t=(t=e.ownerDocument)&&t.defaultView||window).getSelection&&t.getSelection();if(r&&0!==r.rangeCount){t=r.anchorNode;var o,a=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{t.nodeType,i.nodeType}catch(e){t=null;break e}var s=0,c=-1,u=-1,d=0,f=0,p=e,h=null;n:for(;;){for(;p!==t||0!==a&&3!==p.nodeType||(c=s+a),p!==i||0!==r&&3!==p.nodeType||(u=s+r),3===p.nodeType&&(s+=p.nodeValue.length),null!==(o=p.firstChild);)h=p,p=o;for(;;){if(p===e)break n;if(h===t&&++d===a&&(c=s),h===i&&++f===r&&(u=s),null!==(o=p.nextSibling))break;h=(p=h).parentNode}p=o}t=-1===c||-1===u?null:{start:c,end:u}}else t=null}t=t||{start:0,end:0}}else t=null;for(cd={focusedElem:e,selectionRange:t},ur=!1,li=n;null!==li;)if(e=(n=li).child,0!=(1024&n.subtreeFlags)&&null!==e)e.return=n,li=e;else for(;null!==li;){switch(i=(n=li).alternate,e=n.flags,n.tag){case 0:case 11:case 15:case 5:case 26:case 27:case 6:case 4:case 17:break;case 1:if(0!=(1024&e)&&null!==i){e=void 0,t=n,a=i.memoizedProps,i=i.memoizedState,r=t.stateNode;try{var g=ic(t.type,a);e=r.getSnapshotBeforeUpdate(g,i),r.__reactInternalSnapshotBeforeUpdate=e}catch(e){sP(t,t.return,e)}}break;case 3:if(0!=(1024&e)){if(9===(t=(e=n.stateNode.containerInfo).nodeType))cO(e);else if(1===t)switch(e.nodeName){case\"HEAD\":case\"HTML\":case\"BODY\":cO(e);break;default:e.textContent=\"\"}}break;default:if(0!=(1024&e))throw Error(l(163))}if(null!==(e=n.sibling)){e.return=n.return,li=e;break}li=n.return}}(e,n,t)}finally{lR=i,T.p=o,L.T=r}}l4=1,sk(),sA(),sO()}}function sk(){if(1===l4){l4=0;var e=l5,n=l3,t=0!=(13878&n.flags);if(0!=(13878&n.subtreeFlags)||t){t=L.T,L.T=null;var r=T.p;T.p=2;var o=lR;lR|=4;try{lv(n,e);var a=cd,i=t_(e.containerInfo),l=a.focusedElem,s=a.selectionRange;if(i!==l&&l&&l.ownerDocument&&function e(n,t){return!!n&&!!t&&(n===t||(!n||3!==n.nodeType)&&(t&&3===t.nodeType?e(n,t.parentNode):\"contains\"in n?n.contains(t):!!n.compareDocumentPosition&&!!(16&n.compareDocumentPosition(t))))}(l.ownerDocument.documentElement,l)){if(null!==s&&tP(l)){var c=s.start,u=s.end;if(void 0===u&&(u=c),\"selectionStart\"in l)l.selectionStart=c,l.selectionEnd=Math.min(u,l.value.length);else{var d=l.ownerDocument||document,f=d&&d.defaultView||window;if(f.getSelection){var p=f.getSelection(),h=l.textContent.length,g=Math.min(s.start,h),m=void 0===s.end?g:Math.min(s.end,h);!p.extend&&g>m&&(i=m,m=g,g=i);var v=tE(l,g),b=tE(l,m);if(v&&b&&(1!==p.rangeCount||p.anchorNode!==v.node||p.anchorOffset!==v.offset||p.focusNode!==b.node||p.focusOffset!==b.offset)){var y=d.createRange();y.setStart(v.node,v.offset),p.removeAllRanges(),g>m?(p.addRange(y),p.extend(b.node,b.offset)):(y.setEnd(b.node,b.offset),p.addRange(y))}}}}for(d=[],p=l;p=p.parentNode;)1===p.nodeType&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(\"function\"==typeof l.focus&&l.focus(),l=0;l<d.length;l++){var x=d[l];x.element.scrollLeft=x.left,x.element.scrollTop=x.top}}ur=!!cu,cd=cu=null}finally{lR=o,T.p=r,L.T=t}}e.current=n,l4=2}}function sA(){if(2===l4){l4=0;var e=l5,n=l3,t=0!=(8772&n.flags);if(0!=(8772&n.subtreeFlags)||t){t=L.T,L.T=null;var r=T.p;T.p=2;var o=lR;lR|=4;try{ll(e,n.alternate,n)}finally{lR=o,T.p=r,L.T=t}}l4=3}}function sO(){if(4===l4||3===l4){l4=0,et();var e=l5,n=l3,t=l6,r=l7;0!=(10256&n.subtreeFlags)||0!=(10256&n.flags)?l4=5:(l4=0,l3=l5=null,sC(e,e.pendingLanes));var o=e.pendingLanes;if(0===o&&(l2=null),ez(t),n=n.stateNode,ep&&\"function\"==typeof ep.onCommitFiberRoot)try{ep.onCommitFiberRoot(ef,n,void 0,128==(128&n.current.flags))}catch(e){}if(null!==r){n=L.T,o=T.p,T.p=2,L.T=null;try{for(var a=e.onRecoverableError,i=0;i<r.length;i++){var l=r[i];a(l.value,{componentStack:l.stack})}}finally{L.T=n,T.p=o}}0!=(3&l6)&&sS(),sU(e),o=e.pendingLanes,0!=(4194090&t)&&0!=(42&o)?e===sn?se++:(se=0,sn=e):se=0,sV(0,!1)}}function sC(e,n){0==(e.pooledCacheLanes&=n)&&null!=(n=e.pooledCache)&&(e.pooledCache=null,r2(n))}function sS(e){return sk(),sA(),sO(),sE(e)}function sE(){if(5!==l4)return!1;var e=l5,n=l9;l9=0;var t=ez(l6),r=L.T,o=T.p;try{T.p=32>t?32:t,L.T=null,t=l8,l8=null;var a=l5,i=l6;if(l4=0,l3=l5=null,l6=0,0!=(6&lR))throw Error(l(331));var s=lR;if(lR|=4,lP(a.current),lk(a,a.current,i,t),lR=s,sV(0,!1),ep&&\"function\"==typeof ep.onPostCommitFiberRoot)try{ep.onPostCommitFiberRoot(ef,a)}catch(e){}return!0}finally{T.p=o,L.T=r,sC(e,n)}}function s_(e,n,t){n=ru(t,n),n=im(e.stateNode,n,2),null!==(e=oO(e,n,2))&&(eC(e,2),sU(e))}function sP(e,n,t){if(3===e.tag)s_(e,e,t);else for(;null!==n;){if(3===n.tag){s_(n,e,t);break}if(1===n.tag){var r=n.stateNode;if(\"function\"==typeof n.type.getDerivedStateFromError||\"function\"==typeof r.componentDidCatch&&(null===l2||!l2.has(r))){e=ru(t,e),null!==(r=oO(n,t=iv(2),2))&&(ib(t,r,n,e),eC(r,2),sU(r));break}}n=n.return}}function sz(e,n,t){var r=e.pingCache;if(null===r){r=e.pingCache=new lT;var o=new Set;r.set(n,o)}else void 0===(o=r.get(n))&&(o=new Set,r.set(n,o));o.has(t)||(lU=!0,o.add(t),e=sL.bind(null,e,n,t),n.then(e,e))}function sL(e,n,t){var r=e.pingCache;null!==r&&r.delete(n),e.pingedLanes|=e.suspendedLanes&t,e.warmLanes&=~t,lN===e&&(lB&t)===t&&(4===lq||3===lq&&(0x3c00000&lB)===lB&&300>er()-lJ?0==(2&lR)&&su(e,0):lZ|=t,lX===lB&&(lX=0)),sU(e)}function sT(e,n){0===n&&(n=eA()),null!==(e=t3(e,n))&&(eC(e,n),sU(e))}function sR(e){var n=e.memoizedState,t=0;null!==n&&(t=n.retryLane),sT(e,t)}function sN(e,n){var t=0;switch(e.tag){case 31:case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(t=o.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(l(314))}null!==r&&r.delete(n),sT(e,t)}var sD=null,sB=null,sM=!1,sI=!1,sH=!1,sF=0;function sU(e){e!==sB&&null===e.next&&(null===sB?sD=sB=e:sB=sB.next=e),sI=!0,sM||(sM=!0,cx(function(){0!=(6&lR)?J(ea,sq):sW()}))}function sV(e,n){if(!sH&&sI){sH=!0;do for(var t=!1,r=sD;null!==r;){if(!n)if(0!==e){var o=r.pendingLanes;if(0===o)var a=0;else{var i=r.suspendedLanes,l=r.pingedLanes;a=0xc000095&(a=(1<<31-eg(42|e)+1)-1&(o&~(i&~l)))?0xc000095&a|1:a?2|a:0}0!==a&&(t=!0,sY(r,a))}else a=lB,0==(3&(a=ew(r,r===lN?a:0,null!==r.cancelPendingCommit||-1!==r.timeoutHandle)))||ej(r,a)||(t=!0,sY(r,a));r=r.next}while(t);sH=!1}}function sq(){sW()}function sW(){sI=sM=!1;var e,n=0;0===sF||((e=window.event)&&\"popstate\"===e.type?e===cm||(cm=e,0):(cm=null,1))||(n=sF);for(var t=er(),r=null,o=sD;null!==o;){var a=o.next,i=s$(o,t);0===i?(o.next=null,null===r?sD=a:r.next=a,null===a&&(sB=r)):(r=o,(0!==n||0!=(3&i))&&(sI=!0)),o=a}0!==l4&&5!==l4||sV(n,!1),0!==sF&&(sF=0)}function s$(e,n){for(var t=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=-0x3c00001&e.pendingLanes;0<a;){var i=31-eg(a),l=1<<i,s=o[i];-1===s?(0==(l&t)||0!=(l&r))&&(o[i]=function(e,n){switch(e){case 1:case 2:case 4:case 8:case 64:return n+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return n+5e3;default:return -1}}(l,n)):s<=n&&(e.expiredLanes|=l),a&=~l}if(n=lN,t=lB,t=ew(e,e===n?t:0,null!==e.cancelPendingCommit||-1!==e.timeoutHandle),r=e.callbackNode,0===t||e===n&&(2===lM||9===lM)||null!==e.cancelPendingCommit)return null!==r&&null!==r&&ee(r),e.callbackNode=null,e.callbackPriority=0;if(0==(3&t)||ej(e,t)){if((n=t&-t)===e.callbackPriority)return n;switch(null!==r&&ee(r),ez(t)){case 2:case 8:t=ei;break;case 32:default:t=el;break;case 0x10000000:t=ec}return t=J(t,r=sZ.bind(null,e)),e.callbackPriority=n,e.callbackNode=t,n}return null!==r&&null!==r&&ee(r),e.callbackPriority=2,e.callbackNode=null,2}function sZ(e,n){if(0!==l4&&5!==l4)return e.callbackNode=null,e.callbackPriority=0,null;var t=e.callbackNode;if(sS(!0)&&e.callbackNode!==t)return null;var r=lB;return 0===(r=ew(e,e===lN?r:0,null!==e.cancelPendingCommit||-1!==e.timeoutHandle))?null:(sa(e,r,n),s$(e,er()),null!=e.callbackNode&&e.callbackNode===t?sZ.bind(null,e):null)}function sY(e,n){if(sS())return null;sa(e,n,!0)}function sX(){if(0===sF){var e=r3;sF=0!==e?e:ek()}return sF}function sK(e){return null==e||\"symbol\"==typeof e||\"boolean\"==typeof e?null:\"function\"==typeof e?e:ng(\"\"+e)}function sQ(e,n){var t=n.ownerDocument.createElement(\"input\");return t.name=n.name,t.value=n.value,e.id&&t.setAttribute(\"form\",e.id),n.parentNode.insertBefore(t,n),e=new FormData(e),t.parentNode.removeChild(t),e}for(var sG=0;sG<tK.length;sG++){var sJ=tK[sG];tQ(sJ.toLowerCase(),\"on\"+(sJ[0].toUpperCase()+sJ.slice(1)))}tQ(tU,\"onAnimationEnd\"),tQ(tV,\"onAnimationIteration\"),tQ(tq,\"onAnimationStart\"),tQ(\"dblclick\",\"onDoubleClick\"),tQ(\"focusin\",\"onFocus\"),tQ(\"focusout\",\"onBlur\"),tQ(tW,\"onTransitionRun\"),tQ(t$,\"onTransitionStart\"),tQ(tZ,\"onTransitionCancel\"),tQ(tY,\"onTransitionEnd\"),eG(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]),eG(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]),eG(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]),eG(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]),eQ(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \")),eQ(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \")),eQ(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]),eQ(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \")),eQ(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")),eQ(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var s0=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),s1=new Set(\"beforetoggle cancel close invalid load scroll scrollend toggle\".split(\" \").concat(s0));function s2(e,n){n=0!=(4&n);for(var t=0;t<e.length;t++){var r=e[t],o=r.event;r=r.listeners;e:{var a=void 0;if(n)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,c=l.currentTarget;if(l=l.listener,s!==a&&o.isPropagationStopped())break e;a=l,o.currentTarget=c;try{a(o)}catch(e){tG(e)}o.currentTarget=null,a=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,c=l.currentTarget,l=l.listener,s!==a&&o.isPropagationStopped())break e;a=l,o.currentTarget=c;try{a(o)}catch(e){tG(e)}o.currentTarget=null,a=s}}}}function s4(e,n){var t=n[eM];void 0===t&&(t=n[eM]=new Set);var r=e+\"__bubble\";t.has(r)||(s9(n,e,2,!1),t.add(r))}function s5(e,n,t){var r=0;n&&(r|=4),s9(t,e,r,n)}var s3=\"_reactListening\"+Math.random().toString(36).slice(2);function s6(e){if(!e[s3]){e[s3]=!0,eX.forEach(function(n){\"selectionchange\"!==n&&(s1.has(n)||s5(n,!1,e),s5(n,!0,e))});var n=9===e.nodeType?e:e.ownerDocument;null===n||n[s3]||(n[s3]=!0,s5(\"selectionchange\",!1,n))}}function s9(e,n,t,r){switch(uu(n)){case 2:var o=uo;break;case 8:o=ua;break;default:o=ui}t=o.bind(null,n,t,e),o=void 0,nC&&(\"touchstart\"===n||\"touchmove\"===n||\"wheel\"===n)&&(o=!0),r?void 0!==o?e.addEventListener(n,t,{capture:!0,passive:o}):e.addEventListener(n,t,!0):void 0!==o?e.addEventListener(n,t,{passive:o}):e.addEventListener(n,t,!1)}function s8(e,n,t,r,o){var a=r;if(0==(1&n)&&0==(2&n)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o)break;if(4===i)for(i=r.return;null!==i;){var c=i.tag;if((3===c||4===c)&&i.stateNode.containerInfo===o)return;i=i.return}for(;null!==l;){if(null===(i=eq(l)))return;if(5===(c=i.tag)||6===c||26===c||27===c){r=a=i;continue e}l=l.parentNode}}r=r.return}nk(function(){var r=a,o=nb(t),i=[];e:{var l=tX.get(e);if(void 0!==l){var c=nU,u=e;switch(e){case\"keypress\":if(0===nL(t))break e;case\"keydown\":case\"keyup\":c=n4;break;case\"focusin\":u=\"focus\",c=nY;break;case\"focusout\":u=\"blur\",c=nY;break;case\"beforeblur\":case\"afterblur\":c=nY;break;case\"click\":if(2===t.button)break e;case\"auxclick\":case\"dblclick\":case\"mousedown\":case\"mousemove\":case\"mouseup\":case\"mouseout\":case\"mouseover\":case\"contextmenu\":c=n$;break;case\"drag\":case\"dragend\":case\"dragenter\":case\"dragexit\":case\"dragleave\":case\"dragover\":case\"dragstart\":case\"drop\":c=nZ;break;case\"touchcancel\":case\"touchend\":case\"touchmove\":case\"touchstart\":c=n3;break;case tU:case tV:case tq:c=nX;break;case tY:c=n6;break;case\"scroll\":case\"scrollend\":c=nq;break;case\"wheel\":c=n9;break;case\"copy\":case\"cut\":case\"paste\":c=nK;break;case\"gotpointercapture\":case\"lostpointercapture\":case\"pointercancel\":case\"pointerdown\":case\"pointermove\":case\"pointerout\":case\"pointerover\":case\"pointerup\":c=n5;break;case\"toggle\":case\"beforetoggle\":c=n8}var d=0!=(4&n),f=!d&&(\"scroll\"===e||\"scrollend\"===e),p=d?null!==l?l+\"Capture\":null:l;d=[];for(var h,g=r;null!==g;){var m=g;if(h=m.stateNode,5!==(m=m.tag)&&26!==m&&27!==m||null===h||null===p||null!=(m=nA(g,p))&&d.push(s7(g,m,h)),f)break;g=g.return}0<d.length&&(l=new c(l,u,null,t,o),i.push({event:l,listeners:d}))}}if(0==(7&n)){if((l=\"mouseover\"===e||\"pointerover\"===e,c=\"mouseout\"===e||\"pointerout\"===e,!(l&&t!==nv&&(u=t.relatedTarget||t.fromElement)&&(eq(u)||u[eB])))&&(c||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,c?(u=t.relatedTarget||t.toElement,c=r,null!==(u=u?eq(u):null)&&(f=s(u),d=u.tag,u!==f||5!==d&&27!==d&&6!==d)&&(u=null)):(c=null,u=r),c!==u)){if(d=n$,m=\"onMouseLeave\",p=\"onMouseEnter\",g=\"mouse\",(\"pointerout\"===e||\"pointerover\"===e)&&(d=n5,m=\"onPointerLeave\",p=\"onPointerEnter\",g=\"pointer\"),f=null==c?l:e$(c),h=null==u?l:e$(u),(l=new d(m,g+\"leave\",c,t,o)).target=f,l.relatedTarget=h,m=null,eq(o)===r&&((d=new d(p,g+\"enter\",u,t,o)).target=h,d.relatedTarget=f,m=d),f=m,c&&u)n:{for(d=cn,p=c,g=u,h=0,m=p;m;m=d(m))h++;m=0;for(var v,b=g;b;b=d(b))m++;for(;0<h-m;)p=d(p),h--;for(;0<m-h;)g=d(g),m--;for(;h--;){if(p===g||null!==g&&p===g.alternate){d=p;break n}p=d(p),g=d(g)}d=null}else d=null;null!==c&&ct(i,l,c,d,!1),null!==u&&null!==f&&ct(i,f,u,d,!0)}e:{if(\"select\"===(c=(l=r?e$(r):window).nodeName&&l.nodeName.toLowerCase())||\"input\"===c&&\"file\"===l.type)var y=tg;else if(tc(l))if(tm)y=tA;else{y=tj;var x=tw}else(c=l.nodeName)&&\"input\"===c.toLowerCase()&&(\"checkbox\"===l.type||\"radio\"===l.type)?y=tk:r&&nf(r.elementType)&&(y=tg);if(y&&(y=y(e,r))){tu(i,y,t,o);break e}x&&x(e,l,r),\"focusout\"===e&&r&&\"number\"===l.type&&null!=r.memoizedProps.value&&no(l,\"number\",l.value)}switch(x=r?e$(r):window,e){case\"focusin\":(tc(x)||\"true\"===x.contentEditable)&&(tL=x,tT=r,tR=null);break;case\"focusout\":tR=tT=tL=null;break;case\"mousedown\":tN=!0;break;case\"contextmenu\":case\"mouseup\":case\"dragend\":tN=!1,tD(i,t,o);break;case\"selectionchange\":if(tz)break;case\"keydown\":case\"keyup\":tD(i,t,o)}if(te)n:{switch(e){case\"compositionstart\":var w=\"onCompositionStart\";break n;case\"compositionend\":w=\"onCompositionEnd\";break n;case\"compositionupdate\":w=\"onCompositionUpdate\";break n}w=void 0}else tl?ta(e,t)&&(w=\"onCompositionEnd\"):\"keydown\"===e&&229===t.keyCode&&(w=\"onCompositionStart\");w&&(tr&&\"ko\"!==t.locale&&(tl||\"onCompositionStart\"!==w?\"onCompositionEnd\"===w&&tl&&(v=nz()):(n_=\"value\"in(nE=o)?nE.value:nE.textContent,tl=!0)),0<(x=ce(r,w)).length&&(w=new nQ(w,e,null,t,o),i.push({event:w,listeners:x}),v?w.data=v:null!==(v=ti(t))&&(w.data=v))),(v=tt?function(e,n){switch(e){case\"compositionend\":return ti(n);case\"keypress\":if(32!==n.which)return null;return to=!0,\" \";case\"textInput\":return\" \"===(e=n.data)&&to?null:e;default:return null}}(e,t):function(e,n){if(tl)return\"compositionend\"===e||!te&&ta(e,n)?(e=nz(),nP=n_=nE=null,tl=!1,e):null;switch(e){case\"paste\":default:return null;case\"keypress\":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1<n.char.length)return n.char;if(n.which)return String.fromCharCode(n.which)}return null;case\"compositionend\":return tr&&\"ko\"!==n.locale?null:n.data}}(e,t))&&0<(w=ce(r,\"onBeforeInput\")).length&&(x=new nQ(\"onBeforeInput\",\"beforeinput\",null,t,o),i.push({event:x,listeners:w}),x.data=v);var j=e;if(\"submit\"===j&&r&&r.stateNode===o){var k=sK((o[eD]||null).action),A=t.submitter;A&&null!==(j=(j=A[eD]||null)?sK(j.formAction):A.getAttribute(\"formAction\"))&&(k=j,A=null);var O=new nU(\"action\",\"action\",null,t,o);i.push({event:O,listeners:[{instance:null,listener:function(){if(t.defaultPrevented){if(0!==sF){var e=A?sQ(o,A):new FormData(o);aK(r,{pending:!0,data:e,method:o.method,action:k},null,e)}}else\"function\"==typeof k&&(O.preventDefault(),aK(r,{pending:!0,data:e=A?sQ(o,A):new FormData(o),method:o.method,action:k},k,e))},currentTarget:o}]})}}s2(i,n)})}function s7(e,n,t){return{instance:e,listener:n,currentTarget:t}}function ce(e,n){for(var t=n+\"Capture\",r=[];null!==e;){var o=e,a=o.stateNode;if(5!==(o=o.tag)&&26!==o&&27!==o||null===a||(null!=(o=nA(e,t))&&r.unshift(s7(e,o,a)),null!=(o=nA(e,n))&&r.push(s7(e,o,a))),3===e.tag)return r;e=e.return}return[]}function cn(e){if(null===e)return null;do e=e.return;while(e&&5!==e.tag&&27!==e.tag);return e||null}function ct(e,n,t,r,o){for(var a=n._reactName,i=[];null!==t&&t!==r;){var l=t,s=l.alternate,c=l.stateNode;if(l=l.tag,null!==s&&s===r)break;5!==l&&26!==l&&27!==l||null===c||(s=c,o?null!=(c=nA(t,a))&&i.unshift(s7(t,c,s)):o||null!=(c=nA(t,a))&&i.push(s7(t,c,s))),t=t.return}0!==i.length&&e.push({event:n,listeners:i})}var cr=/\\r\\n?/g,co=/\\u0000|\\uFFFD/g;function ca(e){return(\"string\"==typeof e?e:\"\"+e).replace(cr,\"\\n\").replace(co,\"\")}function ci(e,n){return n=ca(n),ca(e)===n}function cl(e,n,t,r,o,a){switch(t){case\"children\":\"string\"==typeof r?\"body\"===n||\"textarea\"===n&&\"\"===r||ns(e,r):(\"number\"==typeof r||\"bigint\"==typeof r)&&\"body\"!==n&&ns(e,\"\"+r);break;case\"className\":e4(e,\"class\",r);break;case\"tabIndex\":e4(e,\"tabindex\",r);break;case\"dir\":case\"role\":case\"viewBox\":case\"width\":case\"height\":e4(e,t,r);break;case\"style\":nd(e,r,a);break;case\"data\":if(\"object\"!==n){e4(e,\"data\",r);break}case\"src\":case\"href\":if(\"\"===r&&(\"a\"!==n||\"href\"!==t)||null==r||\"function\"==typeof r||\"symbol\"==typeof r||\"boolean\"==typeof r){e.removeAttribute(t);break}r=ng(\"\"+r),e.setAttribute(t,r);break;case\"action\":case\"formAction\":if(\"function\"==typeof r){e.setAttribute(t,\"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\");break}if(\"function\"==typeof a&&(\"formAction\"===t?(\"input\"!==n&&cl(e,n,\"name\",o.name,o,null),cl(e,n,\"formEncType\",o.formEncType,o,null),cl(e,n,\"formMethod\",o.formMethod,o,null),cl(e,n,\"formTarget\",o.formTarget,o,null)):(cl(e,n,\"encType\",o.encType,o,null),cl(e,n,\"method\",o.method,o,null),cl(e,n,\"target\",o.target,o,null))),null==r||\"symbol\"==typeof r||\"boolean\"==typeof r){e.removeAttribute(t);break}r=ng(\"\"+r),e.setAttribute(t,r);break;case\"onClick\":null!=r&&(e.onclick=nm);break;case\"onScroll\":null!=r&&s4(\"scroll\",e);break;case\"onScrollEnd\":null!=r&&s4(\"scrollend\",e);break;case\"dangerouslySetInnerHTML\":if(null!=r){if(\"object\"!=typeof r||!(\"__html\"in r))throw Error(l(61));if(null!=(t=r.__html)){if(null!=o.children)throw Error(l(60));e.innerHTML=t}}break;case\"multiple\":e.multiple=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r;break;case\"muted\":e.muted=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r;break;case\"suppressContentEditableWarning\":case\"suppressHydrationWarning\":case\"defaultValue\":case\"defaultChecked\":case\"innerHTML\":case\"ref\":case\"autoFocus\":case\"innerText\":case\"textContent\":break;case\"xlinkHref\":if(null==r||\"function\"==typeof r||\"boolean\"==typeof r||\"symbol\"==typeof r){e.removeAttribute(\"xlink:href\");break}t=ng(\"\"+r),e.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"xlink:href\",t);break;case\"contentEditable\":case\"spellCheck\":case\"draggable\":case\"value\":case\"autoReverse\":case\"externalResourcesRequired\":case\"focusable\":case\"preserveAlpha\":null!=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r?e.setAttribute(t,\"\"+r):e.removeAttribute(t);break;case\"inert\":case\"allowFullScreen\":case\"async\":case\"autoPlay\":case\"controls\":case\"default\":case\"defer\":case\"disabled\":case\"disablePictureInPicture\":case\"disableRemotePlayback\":case\"formNoValidate\":case\"hidden\":case\"loop\":case\"noModule\":case\"noValidate\":case\"open\":case\"playsInline\":case\"readOnly\":case\"required\":case\"reversed\":case\"scoped\":case\"seamless\":case\"itemScope\":r&&\"function\"!=typeof r&&\"symbol\"!=typeof r?e.setAttribute(t,\"\"):e.removeAttribute(t);break;case\"capture\":case\"download\":!0===r?e.setAttribute(t,\"\"):!1!==r&&null!=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r?e.setAttribute(t,r):e.removeAttribute(t);break;case\"cols\":case\"rows\":case\"size\":case\"span\":null!=r&&\"function\"!=typeof r&&\"symbol\"!=typeof r&&!isNaN(r)&&1<=r?e.setAttribute(t,r):e.removeAttribute(t);break;case\"rowSpan\":case\"start\":null==r||\"function\"==typeof r||\"symbol\"==typeof r||isNaN(r)?e.removeAttribute(t):e.setAttribute(t,r);break;case\"popover\":s4(\"beforetoggle\",e),s4(\"toggle\",e),e2(e,\"popover\",r);break;case\"xlinkActuate\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:actuate\",r);break;case\"xlinkArcrole\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:arcrole\",r);break;case\"xlinkRole\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:role\",r);break;case\"xlinkShow\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:show\",r);break;case\"xlinkTitle\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:title\",r);break;case\"xlinkType\":e5(e,\"http://www.w3.org/1999/xlink\",\"xlink:type\",r);break;case\"xmlBase\":e5(e,\"http://www.w3.org/XML/1998/namespace\",\"xml:base\",r);break;case\"xmlLang\":e5(e,\"http://www.w3.org/XML/1998/namespace\",\"xml:lang\",r);break;case\"xmlSpace\":e5(e,\"http://www.w3.org/XML/1998/namespace\",\"xml:space\",r);break;case\"is\":e2(e,\"is\",r);break;default:2<t.length&&(\"o\"===t[0]||\"O\"===t[0])&&(\"n\"===t[1]||\"N\"===t[1])||e2(e,t=np.get(t)||t,r)}}function cs(e,n,t,r,o,a){switch(t){case\"style\":nd(e,r,a);break;case\"dangerouslySetInnerHTML\":if(null!=r){if(\"object\"!=typeof r||!(\"__html\"in r))throw Error(l(61));if(null!=(t=r.__html)){if(null!=o.children)throw Error(l(60));e.innerHTML=t}}break;case\"children\":\"string\"==typeof r?ns(e,r):(\"number\"==typeof r||\"bigint\"==typeof r)&&ns(e,\"\"+r);break;case\"onScroll\":null!=r&&s4(\"scroll\",e);break;case\"onScrollEnd\":null!=r&&s4(\"scrollend\",e);break;case\"onClick\":null!=r&&(e.onclick=nm);break;case\"suppressContentEditableWarning\":case\"suppressHydrationWarning\":case\"innerHTML\":case\"ref\":case\"innerText\":case\"textContent\":break;default:if(!eK.hasOwnProperty(t))e:{if(\"o\"===t[0]&&\"n\"===t[1]&&(o=t.endsWith(\"Capture\"),n=t.slice(2,o?t.length-7:void 0),\"function\"==typeof(a=null!=(a=e[eD]||null)?a[t]:null)&&e.removeEventListener(n,a,o),\"function\"==typeof r)){\"function\"!=typeof a&&null!==a&&(t in e?e[t]=null:e.hasAttribute(t)&&e.removeAttribute(t)),e.addEventListener(n,r,o);break e}t in e?e[t]=r:!0===r?e.setAttribute(t,\"\"):e2(e,t,r)}}}function cc(e,n,t){switch(n){case\"div\":case\"span\":case\"svg\":case\"path\":case\"a\":case\"g\":case\"p\":case\"li\":break;case\"img\":s4(\"error\",e),s4(\"load\",e);var r,o=!1,a=!1;for(r in t)if(t.hasOwnProperty(r)){var i=t[r];if(null!=i)switch(r){case\"src\":o=!0;break;case\"srcSet\":a=!0;break;case\"children\":case\"dangerouslySetInnerHTML\":throw Error(l(137,n));default:cl(e,n,r,i,t,null)}}a&&cl(e,n,\"srcSet\",t.srcSet,t,null),o&&cl(e,n,\"src\",t.src,t,null);return;case\"input\":s4(\"invalid\",e);var s=r=i=a=null,c=null,u=null;for(o in t)if(t.hasOwnProperty(o)){var d=t[o];if(null!=d)switch(o){case\"name\":a=d;break;case\"type\":i=d;break;case\"checked\":c=d;break;case\"defaultChecked\":u=d;break;case\"value\":r=d;break;case\"defaultValue\":s=d;break;case\"children\":case\"dangerouslySetInnerHTML\":if(null!=d)throw Error(l(137,n));break;default:cl(e,n,o,d,t,null)}}nr(e,r,s,c,u,i,a,!1);return;case\"select\":for(a in s4(\"invalid\",e),o=i=r=null,t)if(t.hasOwnProperty(a)&&null!=(s=t[a]))switch(a){case\"value\":r=s;break;case\"defaultValue\":i=s;break;case\"multiple\":o=s;default:cl(e,n,a,s,t,null)}n=r,t=i,e.multiple=!!o,null!=n?na(e,!!o,n,!1):null!=t&&na(e,!!o,t,!0);return;case\"textarea\":for(i in s4(\"invalid\",e),r=a=o=null,t)if(t.hasOwnProperty(i)&&null!=(s=t[i]))switch(i){case\"value\":o=s;break;case\"defaultValue\":a=s;break;case\"children\":r=s;break;case\"dangerouslySetInnerHTML\":if(null!=s)throw Error(l(91));break;default:cl(e,n,i,s,t,null)}nl(e,o,a,r);return;case\"option\":for(c in t)t.hasOwnProperty(c)&&null!=(o=t[c])&&(\"selected\"===c?e.selected=o&&\"function\"!=typeof o&&\"symbol\"!=typeof o:cl(e,n,c,o,t,null));return;case\"dialog\":s4(\"beforetoggle\",e),s4(\"toggle\",e),s4(\"cancel\",e),s4(\"close\",e);break;case\"iframe\":case\"object\":s4(\"load\",e);break;case\"video\":case\"audio\":for(o=0;o<s0.length;o++)s4(s0[o],e);break;case\"image\":s4(\"error\",e),s4(\"load\",e);break;case\"details\":s4(\"toggle\",e);break;case\"embed\":case\"source\":case\"link\":s4(\"error\",e),s4(\"load\",e);case\"area\":case\"base\":case\"br\":case\"col\":case\"hr\":case\"keygen\":case\"meta\":case\"param\":case\"track\":case\"wbr\":case\"menuitem\":for(u in t)if(t.hasOwnProperty(u)&&null!=(o=t[u]))switch(u){case\"children\":case\"dangerouslySetInnerHTML\":throw Error(l(137,n));default:cl(e,n,u,o,t,null)}return;default:if(nf(n)){for(d in t)t.hasOwnProperty(d)&&void 0!==(o=t[d])&&cs(e,n,d,o,t,void 0);return}}for(s in t)t.hasOwnProperty(s)&&null!=(o=t[s])&&cl(e,n,s,o,t,null)}var cu=null,cd=null;function cf(e){return 9===e.nodeType?e:e.ownerDocument}function cp(e){switch(e){case\"http://www.w3.org/2000/svg\":return 1;case\"http://www.w3.org/1998/Math/MathML\":return 2;default:return 0}}function ch(e,n){if(0===e)switch(n){case\"svg\":return 1;case\"math\":return 2;default:return 0}return 1===e&&\"foreignObject\"===n?0:e}function cg(e,n){return\"textarea\"===e||\"noscript\"===e||\"string\"==typeof n.children||\"number\"==typeof n.children||\"bigint\"==typeof n.children||\"object\"==typeof n.dangerouslySetInnerHTML&&null!==n.dangerouslySetInnerHTML&&null!=n.dangerouslySetInnerHTML.__html}var cm=null,cv=\"function\"==typeof setTimeout?setTimeout:void 0,cb=\"function\"==typeof clearTimeout?clearTimeout:void 0,cy=\"function\"==typeof Promise?Promise:void 0,cx=\"function\"==typeof queueMicrotask?queueMicrotask:void 0!==cy?function(e){return cy.resolve(null).then(e).catch(cw)}:cv;function cw(e){setTimeout(function(){throw e})}function cj(e){return\"head\"===e}function ck(e,n){var t=n,r=0;do{var o=t.nextSibling;if(e.removeChild(t),o&&8===o.nodeType)if(\"/$\"===(t=o.data)||\"/&\"===t){if(0===r){e.removeChild(o),uE(n);return}r--}else if(\"$\"===t||\"$?\"===t||\"$~\"===t||\"$!\"===t||\"&\"===t)r++;else if(\"html\"===t)cR(e.ownerDocument.documentElement);else if(\"head\"===t){cR(t=e.ownerDocument.head);for(var a=t.firstChild;a;){var i=a.nextSibling,l=a.nodeName;a[eU]||\"SCRIPT\"===l||\"STYLE\"===l||\"LINK\"===l&&\"stylesheet\"===a.rel.toLowerCase()||t.removeChild(a),a=i}}else\"body\"===t&&cR(e.ownerDocument.body);t=o}while(t);uE(n)}function cA(e,n){var t=e;e=0;do{var r=t.nextSibling;if(1===t.nodeType?n?(t._stashedDisplay=t.style.display,t.style.display=\"none\"):(t.style.display=t._stashedDisplay||\"\",\"\"===t.getAttribute(\"style\")&&t.removeAttribute(\"style\")):3===t.nodeType&&(n?(t._stashedText=t.nodeValue,t.nodeValue=\"\"):t.nodeValue=t._stashedText||\"\"),r&&8===r.nodeType)if(\"/$\"===(t=r.data))if(0===e)break;else e--;else\"$\"!==t&&\"$?\"!==t&&\"$~\"!==t&&\"$!\"!==t||e++;t=r}while(t)}function cO(e){var n=e.firstChild;for(n&&10===n.nodeType&&(n=n.nextSibling);n;){var t=n;switch(n=n.nextSibling,t.nodeName){case\"HTML\":case\"HEAD\":case\"BODY\":cO(t),eV(t);continue;case\"SCRIPT\":case\"STYLE\":continue;case\"LINK\":if(\"stylesheet\"===t.rel.toLowerCase())continue}e.removeChild(t)}}function cC(e,n){for(;8!==e.nodeType;)if(!n||null===(e=c_(e.nextSibling)))return null;return e}function cS(e){return\"$?\"===e.data||\"$~\"===e.data}function cE(e){return\"$!\"===e.data||\"$?\"===e.data&&\"loading\"!==e.ownerDocument.readyState}function c_(e){for(;null!=e;e=e.nextSibling){var n=e.nodeType;if(1===n||3===n)break;if(8===n){if(\"$\"===(n=e.data)||\"$!\"===n||\"$?\"===n||\"$~\"===n||\"&\"===n||\"F!\"===n||\"F\"===n)break;if(\"/$\"===n||\"/&\"===n)return null}}return e}var cP=null;function cz(e){e=e.nextSibling;for(var n=0;e;){if(8===e.nodeType){var t=e.data;if(\"/$\"===t||\"/&\"===t){if(0===n)return c_(e.nextSibling);n--}else\"$\"!==t&&\"$!\"!==t&&\"$?\"!==t&&\"$~\"!==t&&\"&\"!==t||n++}e=e.nextSibling}return null}function cL(e){e=e.previousSibling;for(var n=0;e;){if(8===e.nodeType){var t=e.data;if(\"$\"===t||\"$!\"===t||\"$?\"===t||\"$~\"===t||\"&\"===t){if(0===n)return e;n--}else\"/$\"!==t&&\"/&\"!==t||n++}e=e.previousSibling}return null}function cT(e,n,t){switch(n=cf(t),e){case\"html\":if(!(e=n.documentElement))throw Error(l(452));return e;case\"head\":if(!(e=n.head))throw Error(l(453));return e;case\"body\":if(!(e=n.body))throw Error(l(454));return e;default:throw Error(l(451))}}function cR(e){for(var n=e.attributes;n.length;)e.removeAttributeNode(n[0]);eV(e)}var cN=new Map,cD=new Set;function cB(e){return\"function\"==typeof e.getRootNode?e.getRootNode():9===e.nodeType?e:e.ownerDocument}var cM=T.d;T.d={f:function(){var e=cM.f(),n=ss();return e||n},r:function(e){var n=eW(e);null!==n&&5===n.tag&&\"form\"===n.type?aG(n):cM.r(e)},D:function(e){cM.D(e),cH(\"dns-prefetch\",e,null)},C:function(e,n){cM.C(e,n),cH(\"preconnect\",e,n)},L:function(e,n,t){if(cM.L(e,n,t),cI&&e&&n){var r='link[rel=\"preload\"][as=\"'+nn(n)+'\"]';\"image\"===n&&t&&t.imageSrcSet?(r+='[imagesrcset=\"'+nn(t.imageSrcSet)+'\"]',\"string\"==typeof t.imageSizes&&(r+='[imagesizes=\"'+nn(t.imageSizes)+'\"]')):r+='[href=\"'+nn(e)+'\"]';var o=r;switch(n){case\"style\":o=cU(e);break;case\"script\":o=cW(e)}cN.has(o)||(e=f({rel:\"preload\",href:\"image\"===n&&t&&t.imageSrcSet?void 0:e,as:n},t),cN.set(o,e),null!==cI.querySelector(r)||\"style\"===n&&cI.querySelector(cV(o))||\"script\"===n&&cI.querySelector(c$(o))||(cc(n=cI.createElement(\"link\"),\"link\",e),eY(n),cI.head.appendChild(n)))}},m:function(e,n){if(cM.m(e,n),cI&&e){var t=n&&\"string\"==typeof n.as?n.as:\"script\",r='link[rel=\"modulepreload\"][as=\"'+nn(t)+'\"][href=\"'+nn(e)+'\"]',o=r;switch(t){case\"audioworklet\":case\"paintworklet\":case\"serviceworker\":case\"sharedworker\":case\"worker\":case\"script\":o=cW(e)}if(!cN.has(o)&&(e=f({rel:\"modulepreload\",href:e},n),cN.set(o,e),null===cI.querySelector(r))){switch(t){case\"audioworklet\":case\"paintworklet\":case\"serviceworker\":case\"sharedworker\":case\"worker\":case\"script\":if(cI.querySelector(c$(o)))return}cc(t=cI.createElement(\"link\"),\"link\",e),eY(t),cI.head.appendChild(t)}}},X:function(e,n){if(cM.X(e,n),cI&&e){var t=eZ(cI).hoistableScripts,r=cW(e),o=t.get(r);o||((o=cI.querySelector(c$(r)))||(e=f({src:e,async:!0},n),(n=cN.get(r))&&cK(e,n),eY(o=cI.createElement(\"script\")),cc(o,\"link\",e),cI.head.appendChild(o)),o={type:\"script\",instance:o,count:1,state:null},t.set(r,o))}},S:function(e,n,t){if(cM.S(e,n,t),cI&&e){var r=eZ(cI).hoistableStyles,o=cU(e);n=n||\"default\";var a=r.get(o);if(!a){var i={loading:0,preload:null};if(a=cI.querySelector(cV(o)))i.loading=5;else{e=f({rel:\"stylesheet\",href:e,\"data-precedence\":n},t),(t=cN.get(o))&&cX(e,t);var l=a=cI.createElement(\"link\");eY(l),cc(l,\"link\",e),l._p=new Promise(function(e,n){l.onload=e,l.onerror=n}),l.addEventListener(\"load\",function(){i.loading|=1}),l.addEventListener(\"error\",function(){i.loading|=2}),i.loading|=4,cY(a,n,cI)}a={type:\"stylesheet\",instance:a,count:1,state:i},r.set(o,a)}}},M:function(e,n){if(cM.M(e,n),cI&&e){var t=eZ(cI).hoistableScripts,r=cW(e),o=t.get(r);o||((o=cI.querySelector(c$(r)))||(e=f({src:e,async:!0,type:\"module\"},n),(n=cN.get(r))&&cK(e,n),eY(o=cI.createElement(\"script\")),cc(o,\"link\",e),cI.head.appendChild(o)),o={type:\"script\",instance:o,count:1,state:null},t.set(r,o))}}};var cI=\"undefined\"==typeof document?null:document;function cH(e,n,t){if(cI&&\"string\"==typeof n&&n){var r=nn(n);r='link[rel=\"'+e+'\"][href=\"'+r+'\"]',\"string\"==typeof t&&(r+='[crossorigin=\"'+t+'\"]'),cD.has(r)||(cD.add(r),e={rel:e,crossOrigin:t,href:n},null===cI.querySelector(r)&&(cc(n=cI.createElement(\"link\"),\"link\",e),eY(n),cI.head.appendChild(n)))}}function cF(e,n,t,r){var o=(o=U.current)?cB(o):null;if(!o)throw Error(l(446));switch(e){case\"meta\":case\"title\":return null;case\"style\":return\"string\"==typeof t.precedence&&\"string\"==typeof t.href?(n=cU(t.href),(r=(t=eZ(o).hoistableStyles).get(n))||(r={type:\"style\",instance:null,count:0,state:null},t.set(n,r)),r):{type:\"void\",instance:null,count:0,state:null};case\"link\":if(\"stylesheet\"===t.rel&&\"string\"==typeof t.href&&\"string\"==typeof t.precedence){e=cU(t.href);var a,i,s,c,u=eZ(o).hoistableStyles,d=u.get(e);if(d||(o=o.ownerDocument||o,d={type:\"stylesheet\",instance:null,count:0,state:{loading:0,preload:null}},u.set(e,d),(u=o.querySelector(cV(e)))&&!u._p&&(d.instance=u,d.state.loading=5),cN.has(e)||(t={rel:\"preload\",as:\"style\",href:t.href,crossOrigin:t.crossOrigin,integrity:t.integrity,media:t.media,hrefLang:t.hrefLang,referrerPolicy:t.referrerPolicy},cN.set(e,t),u||(a=o,i=e,s=t,c=d.state,a.querySelector('link[rel=\"preload\"][as=\"style\"]['+i+\"]\")?c.loading=1:(c.preload=i=a.createElement(\"link\"),i.addEventListener(\"load\",function(){return c.loading|=1}),i.addEventListener(\"error\",function(){return c.loading|=2}),cc(i,\"link\",s),eY(i),a.head.appendChild(i))))),n&&null===r)throw Error(l(528,\"\"));return d}if(n&&null!==r)throw Error(l(529,\"\"));return null;case\"script\":return n=t.async,\"string\"==typeof(t=t.src)&&n&&\"function\"!=typeof n&&\"symbol\"!=typeof n?(n=cW(t),(r=(t=eZ(o).hoistableScripts).get(n))||(r={type:\"script\",instance:null,count:0,state:null},t.set(n,r)),r):{type:\"void\",instance:null,count:0,state:null};default:throw Error(l(444,e))}}function cU(e){return'href=\"'+nn(e)+'\"'}function cV(e){return'link[rel=\"stylesheet\"]['+e+\"]\"}function cq(e){return f({},e,{\"data-precedence\":e.precedence,precedence:null})}function cW(e){return'[src=\"'+nn(e)+'\"]'}function c$(e){return\"script[async]\"+e}function cZ(e,n,t){if(n.count++,null===n.instance)switch(n.type){case\"style\":var r=e.querySelector('style[data-href~=\"'+nn(t.href)+'\"]');if(r)return n.instance=r,eY(r),r;var o=f({},t,{\"data-href\":t.href,\"data-precedence\":t.precedence,href:null,precedence:null});return eY(r=(e.ownerDocument||e).createElement(\"style\")),cc(r,\"style\",o),cY(r,t.precedence,e),n.instance=r;case\"stylesheet\":o=cU(t.href);var a=e.querySelector(cV(o));if(a)return n.state.loading|=4,n.instance=a,eY(a),a;r=cq(t),(o=cN.get(o))&&cX(r,o),eY(a=(e.ownerDocument||e).createElement(\"link\"));var i=a;return i._p=new Promise(function(e,n){i.onload=e,i.onerror=n}),cc(a,\"link\",r),n.state.loading|=4,cY(a,t.precedence,e),n.instance=a;case\"script\":if(a=cW(t.src),o=e.querySelector(c$(a)))return n.instance=o,eY(o),o;return r=t,(o=cN.get(a))&&cK(r=f({},t),o),eY(o=(e=e.ownerDocument||e).createElement(\"script\")),cc(o,\"link\",r),e.head.appendChild(o),n.instance=o;case\"void\":return null;default:throw Error(l(443,n.type))}return\"stylesheet\"===n.type&&0==(4&n.state.loading)&&(r=n.instance,n.state.loading|=4,cY(r,t.precedence,e)),n.instance}function cY(e,n,t){for(var r=t.querySelectorAll('link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'),o=r.length?r[r.length-1]:null,a=o,i=0;i<r.length;i++){var l=r[i];if(l.dataset.precedence===n)a=l;else if(a!==o)break}a?a.parentNode.insertBefore(e,a.nextSibling):(n=9===t.nodeType?t.head:t).insertBefore(e,n.firstChild)}function cX(e,n){null==e.crossOrigin&&(e.crossOrigin=n.crossOrigin),null==e.referrerPolicy&&(e.referrerPolicy=n.referrerPolicy),null==e.title&&(e.title=n.title)}function cK(e,n){null==e.crossOrigin&&(e.crossOrigin=n.crossOrigin),null==e.referrerPolicy&&(e.referrerPolicy=n.referrerPolicy),null==e.integrity&&(e.integrity=n.integrity)}var cQ=null;function cG(e,n,t){if(null===cQ){var r=new Map,o=cQ=new Map;o.set(t,r)}else(r=(o=cQ).get(t))||(r=new Map,o.set(t,r));if(r.has(e))return r;for(r.set(e,null),t=t.getElementsByTagName(e),o=0;o<t.length;o++){var a=t[o];if(!(a[eU]||a[eN]||\"link\"===e&&\"stylesheet\"===a.getAttribute(\"rel\"))&&\"http://www.w3.org/2000/svg\"!==a.namespaceURI){var i=a.getAttribute(n)||\"\";i=e+i;var l=r.get(i);l?l.push(a):r.set(i,[a])}}return r}function cJ(e,n,t){(e=e.ownerDocument||e).head.insertBefore(t,\"title\"===n?e.querySelector(\"head > title\"):null)}function c0(e){return\"stylesheet\"!==e.type||0!=(3&e.state.loading)}var c1=null;function c2(){if(this.count--,0===this.count){if(this.stylesheets)c5(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var c4=null;function c5(e,n){e.stylesheets=null,null!==e.unsuspend&&(e.count++,c4=new Map,n.forEach(c3,e),c4=null,c2.call(e))}function c3(e,n){if(!(4&n.state.loading)){var t=c4.get(e);if(t)var r=t.get(null);else{t=new Map,c4.set(e,t);for(var o=e.querySelectorAll(\"link[data-precedence],style[data-precedence]\"),a=0;a<o.length;a++){var i=o[a];(\"LINK\"===i.nodeName||\"not all\"!==i.getAttribute(\"media\"))&&(t.set(i.dataset.precedence,i),r=i)}r&&t.set(null,r)}i=(o=n.instance).getAttribute(\"data-precedence\"),(a=t.get(i)||r)===r&&t.set(null,o),t.set(i,o),this.count++,r=c2.bind(this),o.addEventListener(\"load\",r),o.addEventListener(\"error\",r),a?a.parentNode.insertBefore(o,a.nextSibling):(e=9===e.nodeType?e.head:e).insertBefore(o,e.firstChild),n.state.loading|=4}}var c6={$$typeof:x,Provider:null,Consumer:null,_currentValue:R,_currentValue2:R,_threadCount:0};function c9(e,n,t,r,o,a,i,l,s){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=eO(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=eO(0),this.hiddenUpdates=eO(null),this.identifierPrefix=r,this.onUncaughtError=o,this.onCaughtError=a,this.onRecoverableError=i,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=s,this.incompleteTransitions=new Map}function c8(e,n,t,r,o,a){o=o?t8:t8,null===r.context?r.context=o:r.pendingContext=o,(r=oA(n)).payload={element:t},null!==(a=void 0===a?null:a)&&(r.callback=a),null!==(t=oO(e,r,n))&&(so(t,e,n),oC(t,e,n))}function c7(e,n){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var t=e.retryLane;e.retryLane=0!==t&&t<n?t:n}}function ue(e,n){c7(e,n),(e=e.alternate)&&c7(e,n)}function un(e){if(13===e.tag||31===e.tag){var n=t3(e,0x4000000);null!==n&&so(n,e,0x4000000),ue(e,0x4000000)}}function ut(e){if(13===e.tag||31===e.tag){var n=st(),t=t3(e,n=eP(n));null!==t&&so(t,e,n),ue(e,n)}}var ur=!0;function uo(e,n,t,r){var o=L.T;L.T=null;var a=T.p;try{T.p=2,ui(e,n,t,r)}finally{T.p=a,L.T=o}}function ua(e,n,t,r){var o=L.T;L.T=null;var a=T.p;try{T.p=8,ui(e,n,t,r)}finally{T.p=a,L.T=o}}function ui(e,n,t,r){if(ur){var o=ul(r);if(null===o)s8(e,n,r,us,t),uy(e,r);else if(function(e,n,t,r,o){switch(n){case\"focusin\":return uf=ux(uf,e,n,t,r,o),!0;case\"dragenter\":return up=ux(up,e,n,t,r,o),!0;case\"mouseover\":return uh=ux(uh,e,n,t,r,o),!0;case\"pointerover\":var a=o.pointerId;return ug.set(a,ux(ug.get(a)||null,e,n,t,r,o)),!0;case\"gotpointercapture\":return a=o.pointerId,um.set(a,ux(um.get(a)||null,e,n,t,r,o)),!0}return!1}(o,e,n,t,r))r.stopPropagation();else if(uy(e,r),4&n&&-1<ub.indexOf(e)){for(;null!==o;){var a=eW(o);if(null!==a)switch(a.tag){case 3:if((a=a.stateNode).current.memoizedState.isDehydrated){var i=ex(a.pendingLanes);if(0!==i){var l=a;for(l.pendingLanes|=2,l.entangledLanes|=2;i;){var s=1<<31-eg(i);l.entanglements[1]|=s,i&=~s}sU(a),0==(6&lR)&&(l0=er()+500,sV(0,!1))}}break;case 31:case 13:null!==(l=t3(a,2))&&so(l,a,2),ss(),ue(a,2)}if(null===(a=ul(r))&&s8(e,n,r,us,t),a===o)break;o=a}null!==o&&r.stopPropagation()}else s8(e,n,r,null,t)}}function ul(e){return uc(e=nb(e))}var us=null;function uc(e){if(us=null,null!==(e=eq(e))){var n=s(e);if(null===n)e=null;else{var t=n.tag;if(13===t){if(null!==(e=c(n)))return e;e=null}else if(31===t){if(null!==(e=u(n)))return e;e=null}else if(3===t){if(n.stateNode.current.memoizedState.isDehydrated)return 3===n.tag?n.stateNode.containerInfo:null;e=null}else n!==e&&(e=null)}}return us=e,null}function uu(e){switch(e){case\"beforetoggle\":case\"cancel\":case\"click\":case\"close\":case\"contextmenu\":case\"copy\":case\"cut\":case\"auxclick\":case\"dblclick\":case\"dragend\":case\"dragstart\":case\"drop\":case\"focusin\":case\"focusout\":case\"input\":case\"invalid\":case\"keydown\":case\"keypress\":case\"keyup\":case\"mousedown\":case\"mouseup\":case\"paste\":case\"pause\":case\"play\":case\"pointercancel\":case\"pointerdown\":case\"pointerup\":case\"ratechange\":case\"reset\":case\"resize\":case\"seeked\":case\"submit\":case\"toggle\":case\"touchcancel\":case\"touchend\":case\"touchstart\":case\"volumechange\":case\"change\":case\"selectionchange\":case\"textInput\":case\"compositionstart\":case\"compositionend\":case\"compositionupdate\":case\"beforeblur\":case\"afterblur\":case\"beforeinput\":case\"blur\":case\"fullscreenchange\":case\"focus\":case\"hashchange\":case\"popstate\":case\"select\":case\"selectstart\":return 2;case\"drag\":case\"dragenter\":case\"dragexit\":case\"dragleave\":case\"dragover\":case\"mousemove\":case\"mouseout\":case\"mouseover\":case\"pointermove\":case\"pointerout\":case\"pointerover\":case\"scroll\":case\"touchmove\":case\"wheel\":case\"mouseenter\":case\"mouseleave\":case\"pointerenter\":case\"pointerleave\":return 8;case\"message\":switch(eo()){case ea:return 2;case ei:return 8;case el:case es:return 32;case ec:return 0x10000000;default:return 32}default:return 32}}var ud=!1,uf=null,up=null,uh=null,ug=new Map,um=new Map,uv=[],ub=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\" \");function uy(e,n){switch(e){case\"focusin\":case\"focusout\":uf=null;break;case\"dragenter\":case\"dragleave\":up=null;break;case\"mouseover\":case\"mouseout\":uh=null;break;case\"pointerover\":case\"pointerout\":ug.delete(n.pointerId);break;case\"gotpointercapture\":case\"lostpointercapture\":um.delete(n.pointerId)}}function ux(e,n,t,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:n,domEventName:t,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==n&&null!==(n=eW(n))&&un(n)):(e.eventSystemFlags|=r,n=e.targetContainers,null!==o&&-1===n.indexOf(o)&&n.push(o)),e}function uw(e){var n=eq(e.target);if(null!==n){var t=s(n);if(null!==t){if(13===(n=t.tag)){if(null!==(n=c(t))){e.blockedOn=n,eT(e.priority,function(){ut(t)});return}}else if(31===n){if(null!==(n=u(t))){e.blockedOn=n,eT(e.priority,function(){ut(t)});return}}else if(3===n&&t.stateNode.current.memoizedState.isDehydrated){e.blockedOn=3===t.tag?t.stateNode.containerInfo:null;return}}}e.blockedOn=null}function uj(e){if(null!==e.blockedOn)return!1;for(var n=e.targetContainers;0<n.length;){var t=ul(e.nativeEvent);if(null!==t)return null!==(n=eW(t))&&un(n),e.blockedOn=t,!1;var r=new(t=e.nativeEvent).constructor(t.type,t);nv=r,t.target.dispatchEvent(r),nv=null,n.shift()}return!0}function uk(e,n,t){uj(e)&&t.delete(n)}function uA(){ud=!1,null!==uf&&uj(uf)&&(uf=null),null!==up&&uj(up)&&(up=null),null!==uh&&uj(uh)&&(uh=null),ug.forEach(uk),um.forEach(uk)}function uO(e,n){e.blockedOn===n&&(e.blockedOn=null,ud||(ud=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,uA)))}var uC=null;function uS(e){uC!==e&&(uC=e,o.unstable_scheduleCallback(o.unstable_NormalPriority,function(){uC===e&&(uC=null);for(var n=0;n<e.length;n+=3){var t=e[n],r=e[n+1],o=e[n+2];if(\"function\"!=typeof r)if(null===uc(r||t))continue;else break;var a=eW(t);null!==a&&(e.splice(n,3),n-=3,aK(a,{pending:!0,data:o,method:t.method,action:r},r,o))}}))}function uE(e){function n(n){return uO(n,e)}null!==uf&&uO(uf,e),null!==up&&uO(up,e),null!==uh&&uO(uh,e),ug.forEach(n),um.forEach(n);for(var t=0;t<uv.length;t++){var r=uv[t];r.blockedOn===e&&(r.blockedOn=null)}for(;0<uv.length&&null===(t=uv[0]).blockedOn;)uw(t),null===t.blockedOn&&uv.shift();if(null!=(t=(e.ownerDocument||e).$$reactFormReplay))for(r=0;r<t.length;r+=3){var o=t[r],a=t[r+1],i=o[eD]||null;if(\"function\"==typeof a)i||uS(t);else if(i){var l=null;if(a&&a.hasAttribute(\"formAction\")){if(o=a,i=a[eD]||null)l=i.formAction;else if(null!==uc(o))continue}else l=i.action;\"function\"==typeof l?t[r+1]=l:(t.splice(r,3),r-=3),uS(t)}}}function u_(){function e(e){e.canIntercept&&\"react-transition\"===e.info&&e.intercept({handler:function(){return new Promise(function(e){return o=e})},focusReset:\"manual\",scroll:\"manual\"})}function n(){null!==o&&(o(),o=null),r||setTimeout(t,20)}function t(){if(!r&&!navigation.transition){var e=navigation.currentEntry;e&&null!=e.url&&navigation.navigate(e.url,{state:e.getState(),info:\"react-transition\",history:\"replace\"})}}if(\"object\"==typeof navigation){var r=!1,o=null;return navigation.addEventListener(\"navigate\",e),navigation.addEventListener(\"navigatesuccess\",n),navigation.addEventListener(\"navigateerror\",n),setTimeout(t,100),function(){r=!0,navigation.removeEventListener(\"navigate\",e),navigation.removeEventListener(\"navigatesuccess\",n),navigation.removeEventListener(\"navigateerror\",n),null!==o&&(o(),o=null)}}}function uP(e){this._internalRoot=e}function uz(e){this._internalRoot=e}uz.prototype.render=uP.prototype.render=function(e){var n=this._internalRoot;if(null===n)throw Error(l(409));c8(n.current,st(),e,n,null,null)},uz.prototype.unmount=uP.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var n=e.containerInfo;c8(e.current,2,null,e,null,null),ss(),n[eB]=null}},uz.prototype.unstable_scheduleHydration=function(e){if(e){var n=eL();e={blockedOn:null,target:e,priority:n};for(var t=0;t<uv.length&&0!==n&&n<uv[t].priority;t++);uv.splice(t,0,e),0===t&&uw(e)}};var uL=a.version;if(\"19.2.0-canary-97cdd5d3-20250710\"!==uL)throw Error(l(527,uL,\"19.2.0-canary-97cdd5d3-20250710\"));if(T.findDOMNode=function(e){var n=e._reactInternals;if(void 0===n){if(\"function\"==typeof e.render)throw Error(l(188));throw Error(l(268,e=Object.keys(e).join(\",\")))}return e=null===(e=null!==(e=function(e){var n=e.alternate;if(!n){if(null===(n=s(e)))throw Error(l(188));return n!==e?null:e}for(var t=e,r=n;;){var o=t.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){t=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===t)return d(o),e;if(a===r)return d(o),n;a=a.sibling}throw Error(l(188))}if(t.return!==r.return)t=o,r=a;else{for(var i=!1,c=o.child;c;){if(c===t){i=!0,t=o,r=a;break}if(c===r){i=!0,r=o,t=a;break}c=c.sibling}if(!i){for(c=a.child;c;){if(c===t){i=!0,t=a,r=o;break}if(c===r){i=!0,r=a,t=o;break}c=c.sibling}if(!i)throw Error(l(189))}}if(t.alternate!==r)throw Error(l(190))}if(3!==t.tag)throw Error(l(188));return t.stateNode.current===t?e:n}(n))?function e(n){var t=n.tag;if(5===t||26===t||27===t||6===t)return n;for(n=n.child;null!==n;){if(null!==(t=e(n)))return t;n=n.sibling}return null}(e):null)?null:e.stateNode},\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var uT=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!uT.isDisabled&&uT.supportsFiber)try{ef=uT.inject({bundleType:0,version:\"19.2.0-canary-97cdd5d3-20250710\",rendererPackageName:\"react-dom\",currentDispatcherRef:L,reconcilerVersion:\"19.2.0-canary-97cdd5d3-20250710\"}),ep=uT}catch(e){}}n.createRoot=function(e,n){if(!(t=e)||1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType)throw Error(l(299));var t,r,o,a,i,s,c,u,d=!1,f=\"\",p=iu,h=id,g=ip;return null!=n&&(!0===n.unstable_strictMode&&(d=!0),void 0!==n.identifierPrefix&&(f=n.identifierPrefix),void 0!==n.onUncaughtError&&(p=n.onUncaughtError),void 0!==n.onCaughtError&&(h=n.onCaughtError),void 0!==n.onRecoverableError&&(g=n.onRecoverableError)),r=e,o=1,a=!1,i=null,s=0,c=d,u=null,r=new c9(r,o,a,f,p,h,g,u_,null),o=1,!0===c&&(o|=24),c=re(3,null,null,o),r.current=c,c.stateNode=r,o=r1(),o.refCount++,r.pooledCache=o,o.refCount++,c.memoizedState={element:null,isDehydrated:a,cache:o},oj(c),n=r,e[eB]=n.current,s6(e),new uP(n)}},\"./dist/compiled/react-dom/cjs/react-dom.production.js\":function(e,n,t){\"use strict\";var r=t(\"./dist/compiled/react/index.js\");function o(e){var n=\"https://react.dev/errors/\"+e;if(1<arguments.length){n+=\"?args[]=\"+encodeURIComponent(arguments[1]);for(var t=2;t<arguments.length;t++)n+=\"&args[]=\"+encodeURIComponent(arguments[t])}return\"Minified React error #\"+e+\"; visit \"+n+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}function a(){}var i={d:{f:a,r:function(){throw Error(o(522))},D:a,C:a,L:a,m:a,X:a,S:a,M:a},p:0,findDOMNode:null},l=Symbol.for(\"react.portal\"),s=r.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function c(e,n){return\"font\"===e?\"\":\"string\"==typeof n?\"use-credentials\"===n?n:\"\":void 0}n.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=i,n.createPortal=function(e,n){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!n||1!==n.nodeType&&9!==n.nodeType&&11!==n.nodeType)throw Error(o(299));return function(e,n,t){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:l,key:null==r?null:\"\"+r,children:e,containerInfo:n,implementation:t}}(e,n,null,t)},n.flushSync=function(e){var n=s.T,t=i.p;try{if(s.T=null,i.p=2,e)return e()}finally{s.T=n,i.p=t,i.d.f()}},n.preconnect=function(e,n){\"string\"==typeof e&&(n=n?\"string\"==typeof(n=n.crossOrigin)?\"use-credentials\"===n?n:\"\":void 0:null,i.d.C(e,n))},n.prefetchDNS=function(e){\"string\"==typeof e&&i.d.D(e)},n.preinit=function(e,n){if(\"string\"==typeof e&&n&&\"string\"==typeof n.as){var t=n.as,r=c(t,n.crossOrigin),o=\"string\"==typeof n.integrity?n.integrity:void 0,a=\"string\"==typeof n.fetchPriority?n.fetchPriority:void 0;\"style\"===t?i.d.S(e,\"string\"==typeof n.precedence?n.precedence:void 0,{crossOrigin:r,integrity:o,fetchPriority:a}):\"script\"===t&&i.d.X(e,{crossOrigin:r,integrity:o,fetchPriority:a,nonce:\"string\"==typeof n.nonce?n.nonce:void 0})}},n.preinitModule=function(e,n){if(\"string\"==typeof e)if(\"object\"==typeof n&&null!==n){if(null==n.as||\"script\"===n.as){var t=c(n.as,n.crossOrigin);i.d.M(e,{crossOrigin:t,integrity:\"string\"==typeof n.integrity?n.integrity:void 0,nonce:\"string\"==typeof n.nonce?n.nonce:void 0})}}else null==n&&i.d.M(e)},n.preload=function(e,n){if(\"string\"==typeof e&&\"object\"==typeof n&&null!==n&&\"string\"==typeof n.as){var t=n.as,r=c(t,n.crossOrigin);i.d.L(e,t,{crossOrigin:r,integrity:\"string\"==typeof n.integrity?n.integrity:void 0,nonce:\"string\"==typeof n.nonce?n.nonce:void 0,type:\"string\"==typeof n.type?n.type:void 0,fetchPriority:\"string\"==typeof n.fetchPriority?n.fetchPriority:void 0,referrerPolicy:\"string\"==typeof n.referrerPolicy?n.referrerPolicy:void 0,imageSrcSet:\"string\"==typeof n.imageSrcSet?n.imageSrcSet:void 0,imageSizes:\"string\"==typeof n.imageSizes?n.imageSizes:void 0,media:\"string\"==typeof n.media?n.media:void 0})}},n.preloadModule=function(e,n){if(\"string\"==typeof e)if(n){var t=c(n.as,n.crossOrigin);i.d.m(e,{as:\"string\"==typeof n.as&&\"script\"!==n.as?n.as:void 0,crossOrigin:t,integrity:\"string\"==typeof n.integrity?n.integrity:void 0})}else i.d.m(e)},n.requestFormReset=function(e){i.d.r(e)},n.unstable_batchedUpdates=function(e,n){return e(n)},n.useFormState=function(e,n,t){return s.H.useFormState(e,n,t)},n.useFormStatus=function(){return s.H.useHostTransitionStatus()},n.version=\"19.2.0-canary-97cdd5d3-20250710\"},\"./dist/compiled/react-dom/client.js\":function(e,n,t){\"use strict\";!function e(){if(\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&\"function\"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=t(\"./dist/compiled/react-dom/cjs/react-dom-client.production.js\")},\"./dist/compiled/react-dom/index.js\":function(e,n,t){\"use strict\";!function e(){if(\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&\"function\"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=t(\"./dist/compiled/react-dom/cjs/react-dom.production.js\")},\"./dist/compiled/react/cjs/react-jsx-runtime.production.js\":function(e,n){\"use strict\";var t=Symbol.for(\"react.transitional.element\");function r(e,n,r){var o=null;if(void 0!==r&&(o=\"\"+r),void 0!==n.key&&(o=\"\"+n.key),\"key\"in n)for(var a in r={},n)\"key\"!==a&&(r[a]=n[a]);else r=n;return{$$typeof:t,type:e,key:o,ref:void 0!==(n=r.ref)?n:null,props:r}}n.Fragment=Symbol.for(\"react.fragment\"),n.jsx=r,n.jsxs=r},\"./dist/compiled/react/cjs/react.production.js\":function(e,n){\"use strict\";var t=Symbol.for(\"react.transitional.element\"),r=Symbol.for(\"react.portal\"),o=Symbol.for(\"react.fragment\"),a=Symbol.for(\"react.strict_mode\"),i=Symbol.for(\"react.profiler\"),l=Symbol.for(\"react.consumer\"),s=Symbol.for(\"react.context\"),c=Symbol.for(\"react.forward_ref\"),u=Symbol.for(\"react.suspense\"),d=Symbol.for(\"react.memo\"),f=Symbol.for(\"react.lazy\"),p=Symbol.iterator,h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,m={};function v(e,n,t){this.props=e,this.context=n,this.refs=m,this.updater=t||h}function b(){}function y(e,n,t){this.props=e,this.context=n,this.refs=m,this.updater=t||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,n){if(\"object\"!=typeof e&&\"function\"!=typeof e&&null!=e)throw Error(\"takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,e,n,\"setState\")},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,\"forceUpdate\")},b.prototype=v.prototype;var x=y.prototype=new b;x.constructor=y,g(x,v.prototype),x.isPureReactComponent=!0;var w=Array.isArray;function j(){}var k={H:null,A:null,T:null,S:null},A=Object.prototype.hasOwnProperty;function O(e,n,r,o,a,i){return{$$typeof:t,type:e,key:n,ref:void 0!==(r=i.ref)?r:null,props:i}}function C(e){return\"object\"==typeof e&&null!==e&&e.$$typeof===t}var S=/\\/+/g;function E(e,n){var t,r;return\"object\"==typeof e&&null!==e&&null!=e.key?(t=\"\"+e.key,r={\"=\":\"=0\",\":\":\"=2\"},\"$\"+t.replace(/[=:]/g,function(e){return r[e]})):n.toString(36)}function _(e,n,o){if(null==e)return e;var a=[],i=0;return!function e(n,o,a,i,l){var s,c,u,d=typeof n;(\"undefined\"===d||\"boolean\"===d)&&(n=null);var h=!1;if(null===n)h=!0;else switch(d){case\"bigint\":case\"string\":case\"number\":h=!0;break;case\"object\":switch(n.$$typeof){case t:case r:h=!0;break;case f:return e((h=n._init)(n._payload),o,a,i,l)}}if(h)return l=l(n),h=\"\"===i?\".\"+E(n,0):i,w(l)?(a=\"\",null!=h&&(a=h.replace(S,\"$&/\")+\"/\"),e(l,o,a,\"\",function(e){return e})):null!=l&&(C(l)&&(s=l,c=a+(null==l.key||n&&n.key===l.key?\"\":(\"\"+l.key).replace(S,\"$&/\")+\"/\")+h,l=O(s.type,c,void 0,void 0,void 0,s.props)),o.push(l)),1;h=0;var g=\"\"===i?\".\":i+\":\";if(w(n))for(var m=0;m<n.length;m++)d=g+E(i=n[m],m),h+=e(i,o,a,d,l);else if(\"function\"==typeof(m=null===(u=n)||\"object\"!=typeof u?null:\"function\"==typeof(u=p&&u[p]||u[\"@@iterator\"])?u:null))for(n=m.call(n),m=0;!(i=n.next()).done;)d=g+E(i=i.value,m++),h+=e(i,o,a,d,l);else if(\"object\"===d){if(\"function\"==typeof n.then)return e(function(e){switch(e.status){case\"fulfilled\":return e.value;case\"rejected\":throw e.reason;default:switch(\"string\"==typeof e.status?e.then(j,j):(e.status=\"pending\",e.then(function(n){\"pending\"===e.status&&(e.status=\"fulfilled\",e.value=n)},function(n){\"pending\"===e.status&&(e.status=\"rejected\",e.reason=n)})),e.status){case\"fulfilled\":return e.value;case\"rejected\":throw e.reason}}throw e}(n),o,a,i,l);throw Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===(o=String(n))?\"object with keys {\"+Object.keys(n).join(\", \")+\"}\":o)+\"). If you meant to render a collection of children, use an array instead.\")}return h}(e,a,\"\",\"\",function(e){return n.call(o,e,i++)}),a}function P(e){if(-1===e._status){var n=e._result;(n=n()).then(function(n){(0===e._status||-1===e._status)&&(e._status=1,e._result=n)},function(n){(0===e._status||-1===e._status)&&(e._status=2,e._result=n)}),-1===e._status&&(e._status=0,e._result=n)}if(1===e._status)return e._result.default;throw e._result}var z=\"function\"==typeof reportError?reportError:function(e){if(\"object\"==typeof window&&\"function\"==typeof window.ErrorEvent){var n=new window.ErrorEvent(\"error\",{bubbles:!0,cancelable:!0,message:\"object\"==typeof e&&null!==e&&\"string\"==typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(n))return}else if(\"object\"==typeof process&&\"function\"==typeof process.emit)return void process.emit(\"uncaughtException\",e);console.error(e)};n.Children={map:_,forEach:function(e,n,t){_(e,function(){n.apply(this,arguments)},t)},count:function(e){var n=0;return _(e,function(){n++}),n},toArray:function(e){return _(e,function(e){return e})||[]},only:function(e){if(!C(e))throw Error(\"React.Children.only expected to receive a single React element child.\");return e}},n.Component=v,n.Fragment=o,n.Profiler=i,n.PureComponent=y,n.StrictMode=a,n.Suspense=u,n.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=k,n.__COMPILER_RUNTIME={__proto__:null,c:function(e){return k.H.useMemoCache(e)}},n.cache=function(e){return function(){return e.apply(null,arguments)}},n.cacheSignal=function(){return null},n.cloneElement=function(e,n,t){if(null==e)throw Error(\"The argument must be a React element, but you passed \"+e+\".\");var r=g({},e.props),o=e.key,a=void 0;if(null!=n)for(i in void 0!==n.ref&&(a=void 0),void 0!==n.key&&(o=\"\"+n.key),n)A.call(n,i)&&\"key\"!==i&&\"__self\"!==i&&\"__source\"!==i&&(\"ref\"!==i||void 0!==n.ref)&&(r[i]=n[i]);var i=arguments.length-2;if(1===i)r.children=t;else if(1<i){for(var l=Array(i),s=0;s<i;s++)l[s]=arguments[s+2];r.children=l}return O(e.type,o,void 0,void 0,a,r)},n.createContext=function(e){return(e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider=e,e.Consumer={$$typeof:l,_context:e},e},n.createElement=function(e,n,t){var r,o={},a=null;if(null!=n)for(r in void 0!==n.key&&(a=\"\"+n.key),n)A.call(n,r)&&\"key\"!==r&&\"__self\"!==r&&\"__source\"!==r&&(o[r]=n[r]);var i=arguments.length-2;if(1===i)o.children=t;else if(1<i){for(var l=Array(i),s=0;s<i;s++)l[s]=arguments[s+2];o.children=l}if(e&&e.defaultProps)for(r in i=e.defaultProps)void 0===o[r]&&(o[r]=i[r]);return O(e,a,void 0,void 0,null,o)},n.createRef=function(){return{current:null}},n.forwardRef=function(e){return{$$typeof:c,render:e}},n.isValidElement=C,n.lazy=function(e){return{$$typeof:f,_payload:{_status:-1,_result:e},_init:P}},n.memo=function(e,n){return{$$typeof:d,type:e,compare:void 0===n?null:n}},n.startTransition=function(e){var n=k.T,t={};k.T=t;try{var r=e(),o=k.S;null!==o&&o(t,r),\"object\"==typeof r&&null!==r&&\"function\"==typeof r.then&&r.then(j,z)}catch(e){z(e)}finally{null!==n&&null!==t.types&&(n.types=t.types),k.T=n}},n.unstable_useCacheRefresh=function(){return k.H.useCacheRefresh()},n.use=function(e){return k.H.use(e)},n.useActionState=function(e,n,t){return k.H.useActionState(e,n,t)},n.useCallback=function(e,n){return k.H.useCallback(e,n)},n.useContext=function(e){return k.H.useContext(e)},n.useDebugValue=function(){},n.useDeferredValue=function(e,n){return k.H.useDeferredValue(e,n)},n.useEffect=function(e,n){return k.H.useEffect(e,n)},n.useId=function(){return k.H.useId()},n.useImperativeHandle=function(e,n,t){return k.H.useImperativeHandle(e,n,t)},n.useInsertionEffect=function(e,n){return k.H.useInsertionEffect(e,n)},n.useLayoutEffect=function(e,n){return k.H.useLayoutEffect(e,n)},n.useMemo=function(e,n){return k.H.useMemo(e,n)},n.useOptimistic=function(e,n){return k.H.useOptimistic(e,n)},n.useReducer=function(e,n,t){return k.H.useReducer(e,n,t)},n.useRef=function(e){return k.H.useRef(e)},n.useState=function(e){return k.H.useState(e)},n.useSyncExternalStore=function(e,n,t){return k.H.useSyncExternalStore(e,n,t)},n.useTransition=function(){return k.H.useTransition()},n.version=\"19.2.0-canary-97cdd5d3-20250710\"},\"./dist/compiled/react/index.js\":function(e,n,t){\"use strict\";e.exports=t(\"./dist/compiled/react/cjs/react.production.js\")},\"./dist/compiled/react/jsx-runtime.js\":function(e,n,t){\"use strict\";e.exports=t(\"./dist/compiled/react/cjs/react-jsx-runtime.production.js\")},\"./dist/compiled/scheduler/cjs/scheduler.production.js\":function(e,n){\"use strict\";function t(e,n){var t=e.length;for(e.push(n);0<t;){var r=t-1>>>1,o=e[r];if(0<a(o,n))e[r]=n,e[t]=o,t=r;else break}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var n=e[0],t=e.pop();if(t!==n){e[0]=t;for(var r=0,o=e.length,i=o>>>1;r<i;){var l=2*(r+1)-1,s=e[l],c=l+1,u=e[c];if(0>a(s,t))c<o&&0>a(u,s)?(e[r]=u,e[c]=t,r=c):(e[r]=s,e[l]=t,r=l);else if(c<o&&0>a(u,t))e[r]=u,e[c]=t,r=c;else break}}return n}function a(e,n){var t=e.sortIndex-n.sortIndex;return 0!==t?t:e.id-n.id}if(n.unstable_now=void 0,\"object\"==typeof performance&&\"function\"==typeof performance.now){var i,l=performance;n.unstable_now=function(){return l.now()}}else{var s=Date,c=s.now();n.unstable_now=function(){return s.now()-c}}var u=[],d=[],f=1,p=null,h=3,g=!1,m=!1,v=!1,b=!1,y=\"function\"==typeof setTimeout?setTimeout:null,x=\"function\"==typeof clearTimeout?clearTimeout:null,w=\"undefined\"!=typeof setImmediate?setImmediate:null;function j(e){for(var n=r(d);null!==n;){if(null===n.callback)o(d);else if(n.startTime<=e)o(d),n.sortIndex=n.expirationTime,t(u,n);else break;n=r(d)}}function k(e){if(v=!1,j(e),!m)if(null!==r(u))m=!0,A||(A=!0,i());else{var n=r(d);null!==n&&L(k,n.startTime-e)}}var A=!1,O=-1,C=5,S=-1;function E(){return!!b||!(n.unstable_now()-S<C)}function _(){if(b=!1,A){var e=n.unstable_now();S=e;var t=!0;try{e:{m=!1,v&&(v=!1,x(O),O=-1),g=!0;var a=h;try{n:{for(j(e),p=r(u);null!==p&&!(p.expirationTime>e&&E());){var l=p.callback;if(\"function\"==typeof l){p.callback=null,h=p.priorityLevel;var s=l(p.expirationTime<=e);if(e=n.unstable_now(),\"function\"==typeof s){p.callback=s,j(e),t=!0;break n}p===r(u)&&o(u),j(e)}else o(u);p=r(u)}if(null!==p)t=!0;else{var c=r(d);null!==c&&L(k,c.startTime-e),t=!1}}break e}finally{p=null,h=a,g=!1}}}finally{t?i():A=!1}}}if(\"function\"==typeof w)i=function(){w(_)};else if(\"undefined\"!=typeof MessageChannel){var P=new MessageChannel,z=P.port2;P.port1.onmessage=_,i=function(){z.postMessage(null)}}else i=function(){y(_,0)};function L(e,t){O=y(function(){e(n.unstable_now())},t)}n.unstable_IdlePriority=5,n.unstable_ImmediatePriority=1,n.unstable_LowPriority=4,n.unstable_NormalPriority=3,n.unstable_Profiling=null,n.unstable_UserBlockingPriority=2,n.unstable_cancelCallback=function(e){e.callback=null},n.unstable_forceFrameRate=function(e){0>e||125<e?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):C=0<e?Math.floor(1e3/e):5},n.unstable_getCurrentPriorityLevel=function(){return h},n.unstable_next=function(e){switch(h){case 1:case 2:case 3:var n=3;break;default:n=h}var t=h;h=n;try{return e()}finally{h=t}},n.unstable_requestPaint=function(){b=!0},n.unstable_runWithPriority=function(e,n){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var t=h;h=e;try{return n()}finally{h=t}},n.unstable_scheduleCallback=function(e,o,a){var l=n.unstable_now();switch(a=\"object\"==typeof a&&null!==a&&\"number\"==typeof(a=a.delay)&&0<a?l+a:l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=0x3fffffff;break;case 4:s=1e4;break;default:s=5e3}return s=a+s,e={id:f++,callback:o,priorityLevel:e,startTime:a,expirationTime:s,sortIndex:-1},a>l?(e.sortIndex=a,t(d,e),null===r(u)&&e===r(d)&&(v?(x(O),O=-1):v=!0,L(k,a-l))):(e.sortIndex=s,t(u,e),m||g||(m=!0,A||(A=!0,i()))),e},n.unstable_shouldYield=E,n.unstable_wrapCallback=function(e){var n=h;return function(){var t=h;h=n;try{return e.apply(this,arguments)}finally{h=t}}}},\"./dist/compiled/scheduler/index.js\":function(e,n,t){\"use strict\";e.exports=t(\"./dist/compiled/scheduler/cjs/scheduler.production.js\")},\"./dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\":function(e){(()=>{\"use strict\";\"undefined\"!=typeof __nccwpck_require__&&(__nccwpck_require__.ab=\"//\");var n,t,r,o,a,i,l,s,c={};Object.defineProperty(c,\"__esModule\",{value:!0}),n=\"<unknown>\",t=/^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|webpack-internal|rsc|turbopack|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i,r=/\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/,o=/^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|webpack-internal|rsc|turbopack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,a=/^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|webpack-internal|rsc|turbopack|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i,i=/(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i,l=/^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i,s=/^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,c.parse=function(e){return e.split(\"\\n\").reduce(function(e,c){var u,d,f,p,h,g,m=function(e){var o=t.exec(e);if(!o)return null;var a=o[2]&&0===o[2].indexOf(\"native\"),i=o[2]&&0===o[2].indexOf(\"eval\"),l=r.exec(o[2]);return i&&null!=l&&(o[2]=l[1],o[3]=l[2],o[4]=l[3]),{file:a?null:o[2],methodName:o[1]||n,arguments:a?[o[2]]:[],lineNumber:o[3]?+o[3]:null,column:o[4]?+o[4]:null}}(c)||(u=c,(d=o.exec(u))?{file:d[2],methodName:d[1]||n,arguments:[],lineNumber:+d[3],column:d[4]?+d[4]:null}:null)||function(e){var t=a.exec(e);if(!t)return null;var r=t[3]&&t[3].indexOf(\" > eval\")>-1,o=i.exec(t[3]);return r&&null!=o&&(t[3]=o[1],t[4]=o[2],t[5]=null),{file:t[3],methodName:t[1]||n,arguments:t[2]?t[2].split(\",\"):[],lineNumber:t[4]?+t[4]:null,column:t[5]?+t[5]:null}}(c)||(f=c,(p=s.exec(f))?{file:p[2],methodName:p[1]||n,arguments:[],lineNumber:+p[3],column:p[4]?+p[4]:null}:null)||(h=c,(g=l.exec(h))?{file:g[3],methodName:g[1]||n,arguments:[],lineNumber:+g[4],column:g[5]?+g[5]:null}:null);return m&&e.push(m),e},[])},e.exports=c})()},\"./dist/compiled/strip-ansi/index.js\":function(e){(()=>{\"use strict\";var n={511:e=>{e.exports=({onlyFirst:e=!1}={})=>RegExp(\"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)|(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\",e?void 0:\"g\")},532:(e,n,t)=>{let r=t(511);e.exports=e=>\"string\"==typeof e?e.replace(r(),\"\"):e}},t={};function r(e){var o=t[e];if(void 0!==o)return o.exports;var a=t[e]={exports:{}},i=!0;try{n[e](a,a.exports,r),i=!1}finally{i&&delete t[e]}return a.exports}r.ab=\"//\",e.exports=r(532)})()},\"./src/build/webpack/loaders/devtool/devtool-style-inject.js\":function(e){function n(){let e=window._nextjsDevtoolsStyleCache;if(e.cachedShadowRoot)return e.cachedShadowRoot;let n=document.querySelector(\"nextjs-portal\"),t=n?.shadowRoot||null;return t&&(e.cachedShadowRoot=t),t}function t(e,n){let t=window._nextjsDevtoolsStyleCache;t.lastInsertedElement?t.lastInsertedElement.nextSibling?n.insertBefore(e,t.lastInsertedElement.nextSibling):n.appendChild(e):n.insertBefore(e,n.firstChild),t.lastInsertedElement=e}function r(){let e=window._nextjsDevtoolsStyleCache,r=n();r&&(e.pendingElements.forEach(e=>{t(e,r)}),e.pendingElements=[])}\"undefined\"!=typeof window&&(window._nextjsDevtoolsStyleCache=window._nextjsDevtoolsStyleCache||{pendingElements:[],isObserving:!1,lastInsertedElement:null,cachedShadowRoot:null}),e.exports=function(e){e.setAttribute(\"data-nextjs-dev-tool-style\",\"true\");let o=n();o?t(e,o):(window._nextjsDevtoolsStyleCache.pendingElements.push(e),function(){let e=window._nextjsDevtoolsStyleCache;if(e.isObserving)return;if(e.isObserving=!0,n())return r();let t=new MutationObserver(o=>{if(0===o.length||0===o[0].addedNodes.length)return;let a=o[0].addedNodes[0],i=null;if(\"SCRIPT\"===a.tagName&&a.getAttribute(\"data-nextjs-dev-overlay\")?i=a.firstChild:\"NEXTJS-PORTAL\"===a.tagName&&(i=a),!i)return;let l=()=>{n()?(r(),t.disconnect(),e.isObserving=!1):setTimeout(l,20)};l()});t.observe(document.body,{childList:!0,subtree:!0})}())}},\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/dev-tools-info/dev-tools-info.tsx\":function(e,n,t){\"use strict\";t.d(n,{g:()=>s,x:()=>l});var r=t(\"./dist/compiled/react/jsx-runtime.js\"),o=t(\"./dist/compiled/react/index.js\"),a=t(\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/utils.ts\"),i=t(\"./src/next-devtools/dev-overlay/hooks/use-delayed-render.ts\");function l(e){var n,t,l=e.title,s=e.children,u=e.learnMoreLink,d=e.isOpen,f=e.triggerRef,p=e.close,h=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"title\",\"children\",\"learnMoreLink\",\"isOpen\",\"triggerRef\",\"close\"]),g=(0,o.useRef)(null),m=(0,o.useRef)(null),v=(0,i.N)(d,{enterDelay:0,exitDelay:a.K7}),b=v.mounted,y=v.rendered;return((0,a.P5)(g,f,d,function(){var e;null==(e=m.current)||e.focus()}),(0,a.O8)(g,f,b,p),b)?(0,r.jsx)(\"div\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r;r=t[n],n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r})}return e}({tabIndex:-1,role:\"dialog\",ref:g,\"data-info-popover\":!0},h),t=t={\"data-rendered\":y,children:(0,r.jsxs)(\"div\",{className:\"dev-tools-info-container\",children:[(0,r.jsxs)(\"div\",{className:\"dev-tools-info-header\",children:[(0,r.jsx)(\"button\",{ref:m,className:\"dev-tools-info-close-button\",onClick:p,\"aria-label\":\"Close dialog\",children:(0,r.jsx)(c,{})}),(0,r.jsx)(\"h3\",{className:\"dev-tools-info-title\",children:l})]}),(0,r.jsxs)(\"div\",{className:\"dev-tools-info-body\",children:[s,u&&(0,r.jsx)(\"div\",{className:\"dev-tools-info-button-container\",children:(0,r.jsx)(\"a\",{className:\"dev-tools-info-learn-more-button\",href:u,target:\"_blank\",rel:\"noreferrer noopener\",children:\"Learn More\"})})]})]})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n)):null}var s=\"\\n  [data-info-popover] {\\n    -webkit-font-smoothing: antialiased;\\n    display: flex;\\n    flex-direction: column;\\n    align-items: flex-start;\\n    background: var(--color-background-100);\\n    border: 1px solid var(--color-gray-alpha-400);\\n    background-clip: padding-box;\\n    box-shadow: var(--shadow-menu);\\n    border-radius: var(--rounded-xl);\\n    position: absolute;\\n    font-family: var(--font-stack-sans);\\n    z-index: 3;\\n    overflow: hidden;\\n    opacity: 0;\\n    outline: 0;\\n    min-width: 350px;\\n    transition: opacity var(--animate-out-duration-ms)\\n      var(--animate-out-timing-function);\\n\\n    &[data-rendered='true'] {\\n      opacity: 1;\\n      scale: 1;\\n    }\\n\\n    button:focus-visible {\\n      outline: var(--focus-ring);\\n    }\\n  }\\n\\n  .dev-tools-info-container {\\n    width: 100%;\\n  }\\n\\n  .dev-tools-info-body {\\n    padding: 16px;\\n  }\\n\\n  .dev-tools-info-header {\\n    height: 48px;\\n    display: flex;\\n    align-items: center;\\n    gap: 6px;\\n    padding: 6px 8px;\\n    border-bottom: 1px solid var(--color-gray-alpha-400);\\n  }\\n\\n  .dev-tools-info-close-button {\\n    all: unset;\\n    width: 20px;\\n    height: 20px;    \\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n    color: var(--color-gray-900);\\n    transition: color 150ms ease;\\n    translate: 0 1px;\\n    border-radius: 3px;\\n\\n    &:hover {\\n      color: var(--color-gray-1000);\\n    }\\n  }\\n\\n  .dev-tools-info-title {\\n    color: var(--color-gray-1000);\\n    font-size: var(--size-14);\\n    font-weight: 500;\\n    line-height: var(--size-20);\\n    margin: 0;\\n  }\\n\\n  .dev-tools-info-section-title {\\n    padding: 8px 0px;\\n    color: var(--color-gray-1000);\\n    font-size: var(--size-16);\\n    font-weight: 600;\\n    line-height: var(--size-20);\\n    margin: 0;\\n  }\\n\\n  .dev-tools-info-article {\\n    padding: 8px 6px;\\n    color: var(--color-gray-1000);\\n    font-size: var(--size-14);\\n    line-height: var(--size-20);\\n    margin: 0;\\n  }\\n  .dev-tools-info-paragraph {\\n    &:last-child {\\n      margin-bottom: 0;\\n    }\\n  }\\n\\n  .dev-tools-info-button-container {\\n    display: flex;\\n    justify-content: space-between;\\n    align-items: center;\\n  }\\n\\n  .dev-tools-info-learn-more-button {\\n    align-content: center;\\n    padding: 0 8px;\\n    height: var(--size-28);\\n    font-size: var(--size-14);\\n    font-weight: 500;\\n    line-height: var(--size-20);\\n    transition: background var(--duration-short) ease;\\n    color: var(--color-background-100);\\n    border-radius: var(--rounded-md-2);\\n    background: var(--color-gray-1000);\\n    margin-left: auto;\\n  }\\n\\n  .dev-tools-info-learn-more-button:hover {\\n    text-decoration: none;\\n    color: var(--color-background-100);\\n    opacity: 0.9;\\n  }\\n\";function c(){return(0,r.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,r.jsx)(\"path\",{d:\"M5.14645 8.70703C4.75595 8.31651 4.75595 7.68349 5.14645 7.29297L10.5 1.93945L11.5605 3L6.56051 8L11.5605 13L10.5 14.0605L5.14645 8.70703Z\",fill:\"currentColor\"})})}},\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/dev-tools-info/segments-explorer.tsx\":function(e,n,t){\"use strict\";t.d(n,{W:()=>i});var r=t(\"./dist/compiled/react/jsx-runtime.js\"),o=t(\"./src/next-devtools/dev-overlay/components/overview/segment-explorer.tsx\"),a=t(\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/dev-tools-info/dev-tools-info.tsx\");function i(e){var n,t,i=e.routerType,l=e.page,s=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"routerType\",\"page\"]);return(0,r.jsx)(a.x,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r;r=t[n],n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r})}return e}({title:\"Route Info\"},s),t=t={children:(0,r.jsx)(\"div\",{\"data-nextjs-segments-explorer\":!0,style:{margin:\"-16px\"},children:(0,r.jsx)(o.u,{isAppRouter:\"app\"===i,page:l})})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}},\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/utils.ts\":function(e,n,t){\"use strict\";t.d(n,{K7:()=>s,O8:()=>l,P5:()=>a,uD:()=>c,vY:()=>i});var r=t(\"./dist/compiled/react/index.js\");function o(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function a(e,n,t,a){(0,r.useEffect)(function(){var r=function(e){if(\"Tab\"===e.key&&null!==l){var n,t,r=(t=(n=l.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'))?[n[0],n[n.length-1]]:[],function(e){if(Array.isArray(e))return e}(t)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(t,2)||function(e,n){if(e){if(\"string\"==typeof e)return o(e,2);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return o(e,n)}}(t,2)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),a=r[0],s=r[1],c=i(l);e.shiftKey?c===a&&(null==s||s.focus(),e.preventDefault()):c===s&&(null==a||a.focus(),e.preventDefault())}},l=null,s=setTimeout(function(){if(l=e.current,t)a?a():null==l||l.focus(),null==l||l.addEventListener(\"keydown\",r);else{var o,s=i(l);n&&(null==l?void 0:l.contains(s))&&(null==(o=n.current)||o.focus())}});return function(){clearTimeout(s),null==l||l.removeEventListener(\"keydown\",r)}},[t])}function i(e){var n,t=null==e?void 0:e.getRootNode();return(null!=(n=ShadowRoot)&&\"undefined\"!=typeof Symbol&&n[Symbol.hasInstance]?!!n[Symbol.hasInstance](t):t instanceof n)?null==t?void 0:t.activeElement:null}function l(e,n,t,o,a){(0,r.useEffect)(function(){var r,i=function(t){var r,a,i=t.target;!(e.current&&e.current.contains(i))&&(null!=(r=e.current)&&r.getBoundingClientRect()&&t.clientX>=e.current.getBoundingClientRect().left&&t.clientX<=e.current.getBoundingClientRect().right&&t.clientY>=e.current.getBoundingClientRect().top&&t.clientY<=e.current.getBoundingClientRect().bottom||null!=(a=n.current)&&a.getBoundingClientRect()&&t.clientX>=n.current.getBoundingClientRect().left&&t.clientX<=n.current.getBoundingClientRect().right&&t.clientY>=n.current.getBoundingClientRect().top&&t.clientY<=n.current.getBoundingClientRect().bottom||o())},l=function(e){\"Escape\"===e.key&&o()};if(t){var s=a||(null==(r=e.current)?void 0:r.ownerDocument);return null==s||s.addEventListener(\"mousedown\",i),null==s||s.addEventListener(\"keydown\",l),function(){null==s||s.removeEventListener(\"mousedown\",i),null==s||s.removeEventListener(\"keydown\",l)}}},[t,e,n])}var s=200,c=\"cubic-bezier(0.175, 0.885, 0.32, 1.1)\"},\"./src/next-devtools/dev-overlay/components/overview/segment-explorer.tsx\":function(e,n,t){\"use strict\";t.d(n,{u:()=>at});var r,o,a,i,l=t(\"./dist/compiled/react/jsx-runtime.js\"),s=t(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\"),c=t.n(s),u=t(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleDomAPI.js\"),d=t.n(u),f=t(\"./src/build/webpack/loaders/devtool/devtool-style-inject.js\"),p=t.n(f),h=t(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\"),g=t.n(h),m=t(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/insertStyleElement.js\"),v=t.n(m),b=t(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleTagTransform.js\"),y=t.n(b),x=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/overview/segment-explorer.css\"),w={};w.styleTagTransform=y(),w.setAttributes=g(),w.insert=p(),w.domAPI=d(),w.insertStyleElement=v(),c()(x.Z,w),x.Z&&x.Z.locals&&x.Z.locals;var j=t(\"./src/next-devtools/dev-overlay/segment-explorer-trie.ts\"),k=t(\"./src/next-devtools/dev-overlay/utils/cx.ts\"),A=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/overview/segment-boundary-trigger.css\"),O={};O.styleTagTransform=y(),O.setAttributes=g(),O.insert=p(),O.domAPI=d(),O.insertStyleElement=v(),c()(A.Z,O),A.Z&&A.Z.locals&&A.Z.locals;var C=t(\"./dist/compiled/react/index.js\"),S=t.t(C,2),E=t(\"./dist/compiled/react-dom/index.js\");let _={};function P(e,n){let t=C.useRef(_);return t.current===_&&(t.current=e(n)),t}let z=S[`useInsertionEffect${Math.random().toFixed(1)}`.slice(0,-3)],L=z&&z!==C.useLayoutEffect?z:e=>e();function T(e){let n=P(R).current;return n.next=e,L(n.effect),n.trampoline}function R(){let e={next:void 0,callback:N,trampoline:(...n)=>e.callback?.(...n),effect:()=>{e.callback=e.next}};return e}function N(){}function D(){let e=new Map;return{emit(n,t){e.get(n)?.forEach(e=>e(t))},on(n,t){e.has(n)||e.set(n,new Set),e.get(n).add(t)},off(n,t){e.get(n)?.delete(t)}}}let B={...S},M=0,I=B.useId;function H(e,n){if(void 0!==I){let t=I();return e??(n?`${n}-${t}`:t)}return function(e,n=\"mui\"){let[t,r]=C.useState(e),o=e||t;return C.useEffect(()=>{null==t&&(M+=1,r(`${n}-${M}`))},[t,n]),o}(e,n)}let F=\"undefined\"!=typeof document?C.useLayoutEffect:()=>{},U=C.createContext(null),V=C.createContext(null),q=()=>C.useContext(U)?.id||null,W=()=>C.useContext(V);function $(e){let{children:n,id:t}=e,r=q();return(0,l.jsx)(U.Provider,{value:C.useMemo(()=>({id:t,parentId:r}),[t,r]),children:n})}function Z(e){let{children:n}=e,t=C.useRef([]),r=C.useCallback(e=>{t.current=[...t.current,e]},[]),o=C.useCallback(e=>{t.current=t.current.filter(n=>n!==e)},[]),[a]=C.useState(()=>D());return(0,l.jsx)(V.Provider,{value:C.useMemo(()=>({nodesRef:t,addNode:r,removeNode:o,events:a}),[r,o,a]),children:n})}function Y(e){let{open:n=!1,onOpenChange:t,elements:r}=e,o=H(),a=C.useRef({}),[i]=C.useState(()=>D()),l=null!=q(),[s,c]=C.useState(r.reference),u=T((e,n,r)=>{a.current.openEvent=e?n:void 0,i.emit(\"openchange\",{open:e,event:n,reason:r,nested:l}),t?.(e,n,r)}),d=C.useMemo(()=>({setPositionReference:c}),[]),f=C.useMemo(()=>({reference:s||r.reference||null,floating:r.floating||null,domReference:r.reference}),[s,r.reference,r.floating]);return C.useMemo(()=>({dataRef:a,open:n,onOpenChange:u,elements:f,events:i,floatingId:o,refs:d}),[n,u,f,i,o,d])}function X(){return\"undefined\"!=typeof window}function K(e){return J(e)?(e.nodeName||\"\").toLowerCase():\"#document\"}function Q(e){var n;return(null==e||null==(n=e.ownerDocument)?void 0:n.defaultView)||window}function G(e){var n;return null==(n=(J(e)?e.ownerDocument:e.document)||window.document)?void 0:n.documentElement}function J(e){return!!X()&&(e instanceof Node||e instanceof Q(e).Node)}function ee(e){return!!X()&&(e instanceof Element||e instanceof Q(e).Element)}function en(e){return!!X()&&(e instanceof HTMLElement||e instanceof Q(e).HTMLElement)}function et(e){return!!X()&&\"undefined\"!=typeof ShadowRoot&&(e instanceof ShadowRoot||e instanceof Q(e).ShadowRoot)}let er=new Set([\"inline\",\"contents\"]);function eo(e){let{overflow:n,overflowX:t,overflowY:r,display:o}=eg(e);return/auto|scroll|overlay|hidden|clip/.test(n+r+t)&&!er.has(o)}let ea=new Set([\"table\",\"td\",\"th\"]),ei=[\":popover-open\",\":modal\"];function el(e){return ei.some(n=>{try{return e.matches(n)}catch(e){return!1}})}let es=[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\"],ec=[\"transform\",\"translate\",\"scale\",\"rotate\",\"perspective\",\"filter\"],eu=[\"paint\",\"layout\",\"strict\",\"content\"];function ed(e){let n=ef(),t=ee(e)?eg(e):e;return es.some(e=>!!t[e]&&\"none\"!==t[e])||!!t.containerType&&\"normal\"!==t.containerType||!n&&!!t.backdropFilter&&\"none\"!==t.backdropFilter||!n&&!!t.filter&&\"none\"!==t.filter||ec.some(e=>(t.willChange||\"\").includes(e))||eu.some(e=>(t.contain||\"\").includes(e))}function ef(){return\"undefined\"!=typeof CSS&&!!CSS.supports&&CSS.supports(\"-webkit-backdrop-filter\",\"none\")}let ep=new Set([\"html\",\"body\",\"#document\"]);function eh(e){return ep.has(K(e))}function eg(e){return Q(e).getComputedStyle(e)}function em(e){return ee(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function ev(e){if(\"html\"===K(e))return e;let n=e.assignedSlot||e.parentNode||et(e)&&e.host||G(e);return et(n)?n.host:n}function eb(e,n,t){var r;void 0===n&&(n=[]),void 0===t&&(t=!0);let o=function e(n){let t=ev(n);return eh(t)?n.ownerDocument?n.ownerDocument.body:n.body:en(t)&&eo(t)?t:e(t)}(e),a=o===(null==(r=e.ownerDocument)?void 0:r.body),i=Q(o);if(a){let e=ey(i);return n.concat(i,i.visualViewport||[],eo(o)?o:[],e&&t?eb(e):[])}return n.concat(o,eb(o,[],t))}function ey(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}let ex=[];function ew(e){C.useEffect(e,ex)}class ej{static create(){return new ej}currentId=0;start(e,n){this.clear(),this.currentId=setTimeout(()=>{this.currentId=0,n()},e)}isStarted(){return 0!==this.currentId}clear=()=>{0!==this.currentId&&(clearTimeout(this.currentId),this.currentId=0)};disposeEffect=()=>this.clear}function ek(){let e=P(ej.create).current;return ew(e.disposeEffect),e}function eA(e){let n=P(eO,e).current;return n.next=e,F(n.effect),n}function eO(e){let n={current:e,next:e,effect:()=>{n.current=n.next}};return n}let eC=\"undefined\"!=typeof navigator,eS=function(){if(\"undefined\"==typeof navigator)return{platform:\"\",maxTouchPoints:-1};let e=navigator.userAgentData;return e?.platform?{platform:e.platform,maxTouchPoints:navigator.maxTouchPoints}:{platform:navigator.platform??\"\",maxTouchPoints:navigator.maxTouchPoints??-1}}(),eE=function(){if(!eC)return\"\";let e=navigator.userAgentData;return e?.platform?e.platform:navigator.platform??\"\"}(),e_=function(){if(!eC)return\"\";let e=navigator.userAgentData;return e&&Array.isArray(e.brands)?e.brands.map(({brand:e,version:n})=>`${e}/${n}`).join(\" \"):navigator.userAgent}(),eP=\"undefined\"!=typeof CSS&&!!CSS.supports&&CSS.supports(\"-webkit-backdrop-filter:none\"),ez=\"MacIntel\"===eS.platform&&eS.maxTouchPoints>1||/iP(hone|ad|od)|iOS/.test(eS.platform);eC&&/firefox/i.test(e_);let eL=eC&&/apple/i.test(navigator.vendor),eT=eC&&/android/i.test(eE)||/android/i.test(e_),eR=eC&&eE.toLowerCase().startsWith(\"mac\")&&!navigator.maxTouchPoints,eN=e_.includes(\"jsdom/\");function eD(e){e.preventDefault(),e.stopPropagation()}function eB(e){return 0===e.mozInputSource&&!!e.isTrusted||(eT&&e.pointerType?\"click\"===e.type&&1===e.buttons:0===e.detail&&!e.pointerType)}function eM(e){return!eN&&(!eT&&0===e.width&&0===e.height||eT&&1===e.width&&1===e.height&&0===e.pressure&&0===e.detail&&\"mouse\"===e.pointerType||e.width<1&&e.height<1&&0===e.pressure&&0===e.detail&&\"touch\"===e.pointerType)}function eI(e,n){let t=[\"mouse\",\"pen\"];return n||t.push(\"\",void 0),t.includes(e)}let eH=\"data-base-ui-focusable\",eF=\"active\",eU=\"selected\",eV=\"ArrowLeft\",eq=\"ArrowRight\",eW=\"ArrowUp\",e$=\"ArrowDown\";function eZ(e){let n=e.activeElement;for(;n?.shadowRoot?.activeElement!=null;)n=n.shadowRoot.activeElement;return n}function eY(e,n){if(!e||!n)return!1;let t=n.getRootNode?.();if(e.contains(n))return!0;if(t&&et(t)){let t=n;for(;t;){if(e===t)return!0;t=t.parentNode||t.host}}return!1}function eX(e){return\"composedPath\"in e?e.composedPath()[0]:e.target}function eK(e,n){return null!=n&&(\"composedPath\"in e?e.composedPath().includes(n):null!=e.target&&n.contains(e.target))}function eQ(e){return e?.ownerDocument||document}function eG(e){return en(e)&&e.matches(\"input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])\")}function eJ(e){return!!e&&\"combobox\"===e.getAttribute(\"role\")&&eG(e)}function e0(e){return e?e.hasAttribute(eH)?e:e.querySelector(`[${eH}]`)||e:null}function e1(e){return`data-base-ui-${e}`}let e2=e1(\"safe-polygon\");function e4(e,n,t){if(t&&!eI(t))return 0;if(\"number\"==typeof e)return e;if(\"function\"==typeof e){let t=e();return\"number\"==typeof t?t:t?.[n]}return e?.[n]}function e5(e){return\"function\"==typeof e?e():e}function e3(e,n={}){let{open:t,onOpenChange:r,dataRef:o,events:a,elements:i}=e,{enabled:l=!0,delay:s=0,handleClose:c=null,mouseOnly:u=!1,restMs:d=0,move:f=!0}=n,p=W(),h=q(),g=eA(c),m=eA(s),v=eA(t),b=eA(d),y=C.useRef(void 0),x=ek(),w=C.useRef(void 0),j=ek(),k=C.useRef(!0),A=C.useRef(!1),O=C.useRef(()=>{}),S=C.useRef(!1),E=T(()=>{let e=o.current.openEvent?.type;return e?.includes(\"mouse\")&&\"mousedown\"!==e});C.useEffect(()=>{if(l)return a.on(\"openchange\",e),()=>{a.off(\"openchange\",e)};function e({open:e}){e||(x.clear(),j.clear(),k.current=!0,S.current=!1)}},[l,a,x,j]),C.useEffect(()=>{if(!l||!g.current||!t)return;function e(e){E()&&r(!1,e,\"hover\")}let n=eQ(i.floating).documentElement;return n.addEventListener(\"mouseleave\",e),()=>{n.removeEventListener(\"mouseleave\",e)}},[i.floating,t,r,l,g,E]);let _=C.useCallback((e,n=!0,t=\"hover\")=>{let o=e4(m.current,\"close\",y.current);o&&!w.current?x.start(o,()=>r(!1,e,t)):n&&(x.clear(),r(!1,e,t))},[m,r,x]),P=T(()=>{O.current(),w.current=void 0}),z=T(()=>{if(A.current){let e=eQ(i.floating).body;e.style.pointerEvents=\"\",e.removeAttribute(e2),A.current=!1}}),L=T(()=>!!o.current.openEvent&&[\"click\",\"mousedown\"].includes(o.current.openEvent.type));C.useEffect(()=>{if(l&&ee(i.domReference)){let r=i.domReference,o=i.floating;return t&&r.addEventListener(\"mouseleave\",a),f&&r.addEventListener(\"mousemove\",e,{once:!0}),r.addEventListener(\"mouseenter\",e),r.addEventListener(\"mouseleave\",n),o&&(o.addEventListener(\"mouseleave\",a),o.addEventListener(\"mouseenter\",s),o.addEventListener(\"mouseleave\",c)),()=>{t&&r.removeEventListener(\"mouseleave\",a),f&&r.removeEventListener(\"mousemove\",e),r.removeEventListener(\"mouseenter\",e),r.removeEventListener(\"mouseleave\",n),o&&(o.removeEventListener(\"mouseleave\",a),o.removeEventListener(\"mouseenter\",s),o.removeEventListener(\"mouseleave\",c))}}function e(e){if(x.clear(),k.current=!1,u&&!eI(y.current)||e5(b.current)>0&&!e4(m.current,\"open\"))return;let n=e4(m.current,\"open\",y.current);n?x.start(n,()=>{v.current||r(!0,e,\"hover\")}):t||r(!0,e,\"hover\")}function n(e){if(L())return void z();O.current();let n=eQ(i.floating);if(j.clear(),S.current=!1,g.current&&o.current.floatingContext){t||x.clear(),w.current=g.current({...o.current.floatingContext,tree:p,x:e.clientX,y:e.clientY,onClose(){z(),P(),L()||_(e,!0,\"safe-polygon\")}});let r=w.current;n.addEventListener(\"mousemove\",r),O.current=()=>{n.removeEventListener(\"mousemove\",r)};return}\"touch\"===y.current&&eY(i.floating,e.relatedTarget)||_(e)}function a(e){!L()&&o.current.floatingContext&&g.current?.({...o.current.floatingContext,tree:p,x:e.clientX,y:e.clientY,onClose(){z(),P(),L()||_(e)}})(e)}function s(){x.clear()}function c(e){L()||_(e,!1)}},[i,l,e,u,f,_,P,z,r,t,v,p,m,g,o,L,b,x,j]),F(()=>{if(l&&t&&g.current?.__options?.blockPointerEvents&&E()){A.current=!0;let e=i.floating;if(ee(i.domReference)&&e){let n=eQ(i.floating).body;n.setAttribute(e2,\"\");let t=i.domReference,r=p?.nodesRef.current.find(e=>e.id===h)?.context?.elements.floating;return r&&(r.style.pointerEvents=\"\"),n.style.pointerEvents=\"none\",t.style.pointerEvents=\"auto\",e.style.pointerEvents=\"auto\",()=>{n.style.pointerEvents=\"\",t.style.pointerEvents=\"\",e.style.pointerEvents=\"\"}}}},[l,t,h,i,p,g,E]),F(()=>{t||(y.current=void 0,S.current=!1,P(),z())},[t,P,z]),C.useEffect(()=>()=>{P(),x.clear(),j.clear(),z()},[l,i.domReference,P,z,x,j]);let R=C.useMemo(()=>{function e(e){y.current=e.pointerType}return{onPointerDown:e,onPointerEnter:e,onMouseMove(e){let{nativeEvent:n}=e;function o(){k.current||v.current||r(!0,n,\"hover\")}(!u||eI(y.current))&&!t&&0!==e5(b.current)&&(S.current&&e.movementX**2+e.movementY**2<2||(j.clear(),\"touch\"===y.current?o():(S.current=!0,j.start(e5(b.current),o))))}}},[u,r,t,v,b,j]);return C.useMemo(()=>l?{reference:R}:{},[l,R])}function e6(e,n,t=!0){return e.filter(e=>e.parentId===n&&(!t||e.context?.open)).flatMap(n=>[n,...e6(e,n.id,t)])}function e9(e,n){let t=[],r=e.find(e=>e.id===n)?.parentId;for(;r;){let n=e.find(e=>e.id===r);r=n?.parentId,n&&(t=t.concat(n))}return t}function e8(e,n){let[t,r]=e,o=!1,a=n.length;for(let e=0,i=a-1;e<a;i=e++){let[a,l]=n[e]||[0,0],[s,c]=n[i]||[0,0];l>=r!=c>=r&&t<=(s-a)*(r-l)/(c-l)+a&&(o=!o)}return o}function e7(e={}){let{buffer:n=.5,blockPointerEvents:t=!1,requireIntent:r=!0}=e,o=new ej,a=!1,i=null,l=null,s=performance.now(),c=({x:e,y:t,placement:c,elements:u,onClose:d,nodeId:f,tree:p})=>function(h){function g(){o.clear(),d()}if(o.clear(),!u.domReference||!u.floating||null==c||null==e||null==t)return;let{clientX:m,clientY:v}=h,b=[m,v],y=eX(h),x=\"mouseleave\"===h.type,w=eY(u.floating,y),j=eY(u.domReference,y),k=u.domReference.getBoundingClientRect(),A=u.floating.getBoundingClientRect(),O=c.split(\"-\")[0],C=e>A.right-A.width/2,S=t>A.bottom-A.height/2,E=b[0]>=k.x&&b[0]<=k.x+k.width&&b[1]>=k.y&&b[1]<=k.y+k.height,_=A.width>k.width,P=A.height>k.height,z=(_?k:A).left,L=(_?k:A).right,T=(P?k:A).top,R=(P?k:A).bottom;if(w&&(a=!0,!x))return;if(j&&(a=!1),j&&!x){a=!0;return}if(x&&ee(h.relatedTarget)&&eY(u.floating,h.relatedTarget)||p&&e6(p.nodesRef.current,f).some(({context:e})=>e?.open))return;if(\"top\"===O&&t>=k.bottom-1||\"bottom\"===O&&t<=k.top+1||\"left\"===O&&e>=k.right-1||\"right\"===O&&e<=k.left+1)return g();let N=[];switch(O){case\"top\":N=[[z,k.top+1],[z,A.bottom-1],[L,A.bottom-1],[L,k.top+1]];break;case\"bottom\":N=[[z,A.top+1],[z,k.bottom-1],[L,k.bottom-1],[L,A.top+1]];break;case\"left\":N=[[A.right-1,R],[A.right-1,T],[k.left+1,T],[k.left+1,R]];break;case\"right\":N=[[k.right-1,R],[k.right-1,T],[A.left+1,T],[A.left+1,R]]}if(!e8([m,v],N)){if(a&&!E)return g();if(!x&&r){let e=function(e,n){let t=performance.now(),r=t-s;if(null===i||null===l||0===r)return i=e,l=n,s=t,null;let o=e-i,a=n-l,c=Math.sqrt(o*o+a*a);return i=e,l=n,s=t,c/r}(h.clientX,h.clientY);if(null!==e&&e<.1)return g()}e8([m,v],function([e,t]){switch(O){case\"top\":{let r=[[A.left,C||_?A.bottom-n:A.top],[A.right,C?_?A.bottom-n:A.top:A.bottom-n]];return[[_?e+n/2:C?e+4*n:e-4*n,t+n+1],[_?e-n/2:C?e+4*n:e-4*n,t+n+1],...r]}case\"bottom\":{let r=[[A.left,C||_?A.top+n:A.bottom],[A.right,C?_?A.top+n:A.bottom:A.top+n]];return[[_?e+n/2:C?e+4*n:e-4*n,t-n],[_?e-n/2:C?e+4*n:e-4*n,t-n],...r]}case\"left\":return[[S||P?A.right-n:A.left,A.top],[S?P?A.right-n:A.left:A.right-n,A.bottom],[e+n+1,P?t+n/2:S?t+4*n:t-4*n],[e+n+1,P?t-n/2:S?t+4*n:t-4*n]];case\"right\":{let r=[[S||P?A.left+n:A.right,A.top],[S?P?A.left+n:A.right:A.left+n,A.bottom]];return[[e-n,P?t+n/2:S?t+4*n:t-4*n],[e-n,P?t-n/2:S?t+4*n:t-4*n],...r]}default:return[]}}([e,t]))?!a&&r&&o.start(40,g):g()}};return c.__options={blockPointerEvents:t},c}let ne=eR&&eL;function nn(e,n={}){let{open:t,onOpenChange:r,events:o,dataRef:a,elements:i}=e,{enabled:l=!0,visibleOnly:s=!0}=n,c=C.useRef(!1),u=ek(),d=C.useRef(!0);C.useEffect(()=>{if(!l)return;let e=Q(i.domReference);function n(){!t&&en(i.domReference)&&i.domReference===eZ(eQ(i.domReference))&&(c.current=!0)}function r(){d.current=!0}function o(){d.current=!1}return e.addEventListener(\"blur\",n),ne&&(e.addEventListener(\"keydown\",r,!0),e.addEventListener(\"pointerdown\",o,!0)),()=>{e.removeEventListener(\"blur\",n),ne&&(e.removeEventListener(\"keydown\",r,!0),e.removeEventListener(\"pointerdown\",o,!0))}},[i.domReference,t,l]),C.useEffect(()=>{if(l)return o.on(\"openchange\",e),()=>{o.off(\"openchange\",e)};function e({reason:e}){(\"reference-press\"===e||\"escape-key\"===e)&&(c.current=!0)}},[o,l]);let f=C.useMemo(()=>({onMouseLeave(){c.current=!1},onFocus(e){if(c.current)return;let n=eX(e.nativeEvent);if(s&&ee(n)){if(ne&&!e.relatedTarget){if(!d.current&&!eG(n))return}else if(!function(e){if(!e||eN)return!0;try{return e.matches(\":focus-visible\")}catch(e){return!0}}(n))return}r(!0,e.nativeEvent,\"focus\")},onBlur(e){c.current=!1;let n=e.relatedTarget,t=e.nativeEvent,o=ee(n)&&n.hasAttribute(e1(\"focus-guard\"))&&\"outside\"===n.getAttribute(\"data-type\");u.start(0,()=>{let e=eZ(i.domReference?i.domReference.ownerDocument:document);(n||e!==i.domReference)&&(eY(a.current.floatingContext?.refs.floating.current,e)||eY(i.domReference,e)||o||r(!1,t,\"focus\"))})}}),[a,i.domReference,r,s,u]);return C.useMemo(()=>l?{reference:f}:{},[l,f])}let nt={style:{transition:\"none\"}},nr={},no={fallbackAxisSide:\"none\"},na={fallbackAxisSide:\"end\"},ni=new class{callbacks=[];callbacksCount=0;nextId=1;startId=1;isScheduled=!1;tick=e=>{this.isScheduled=!1;let n=this.callbacks,t=this.callbacksCount;if(this.callbacks=[],this.callbacksCount=0,this.startId=this.nextId,t>0)for(let t=0;t<n.length;t+=1)n[t]?.(e)};request(e){let n=this.nextId;return this.nextId+=1,this.callbacks.push(e),this.callbacksCount+=1,this.isScheduled||(requestAnimationFrame(this.tick),this.isScheduled=!0),n}cancel(e){let n=e-this.startId;n<0||n>=this.callbacks.length||(this.callbacks[n]=null,this.callbacksCount-=1)}};class nl{static create(){return new nl}static request(e){return ni.request(e)}static cancel(e){return ni.cancel(e)}currentId=null;request(e){this.cancel(),this.currentId=ni.request(()=>{this.currentId=null,e()})}cancel=()=>{null!==this.currentId&&(ni.cancel(this.currentId),this.currentId=null)};disposeEffect=()=>this.cancel}function ns(){let e=P(nl.create).current;return ew(e.disposeEffect),e}let nc={pointerdown:\"onPointerDown\",mousedown:\"onMouseDown\",click:\"onClick\"},nu={pointerdown:\"onPointerDownCapture\",mousedown:\"onMouseDownCapture\",click:\"onClickCapture\"},nd=e=>({escapeKey:\"boolean\"==typeof e?e:e?.escapeKey??!1,outsidePress:\"boolean\"==typeof e?e:e?.outsidePress??!0});function nf(e,n={}){let{open:t,onOpenChange:r,elements:o,dataRef:a}=e,{enabled:i=!0,escapeKey:l=!0,outsidePress:s=!0,outsidePressEvent:c=\"pointerdown\",referencePress:u=!1,referencePressEvent:d=\"pointerdown\",ancestorScroll:f=!1,bubbles:p,capture:h}=n,g=W(),m=T(\"function\"==typeof s?s:()=>!1),v=\"function\"==typeof s?m:s,b=C.useRef(!1),{escapeKey:y,outsidePress:x}=nd(p),{escapeKey:w,outsidePress:j}=nd(h),k=C.useRef(!1),A=ek(),O=T(e=>{if(!t||!i||!l||\"Escape\"!==e.key||k.current)return;let n=a.current.floatingContext?.nodeId,o=g?e6(g.nodesRef.current,n):[];if(!y&&(e.stopPropagation(),o.length>0)){let e=!0;if(o.forEach(n=>{n.context?.open&&!n.context.dataRef.current.__escapeKeyBubbles&&(e=!1)}),!e)return}r(!1,\"nativeEvent\"in e?e.nativeEvent:e,\"escape-key\")}),S=T(e=>{let n=()=>{O(e),eX(e)?.removeEventListener(\"keydown\",n)};eX(e)?.addEventListener(\"keydown\",n)}),E=T(e=>{let n=a.current.insideReactTree;a.current.insideReactTree=!1;let t=b.current;if(b.current=!1,\"click\"===c&&t||n||\"function\"==typeof v&&!v(e))return;let i=eX(e),l=`[${e1(\"inert\")}]`,s=eQ(o.floating).querySelectorAll(l),u=ee(i)?i:null;for(;u&&!eh(u);){let e=ev(u);if(eh(e)||!ee(e))break;u=e}if(s.length&&ee(i)&&!i.matches(\"html,body\")&&!eY(i,o.floating)&&Array.from(s).every(e=>!eY(u,e)))return;if(en(i)){let n=eh(i),t=eg(i),r=/auto|scroll/,o=n||r.test(t.overflowX),a=n||r.test(t.overflowY),l=o&&i.clientWidth>0&&i.scrollWidth>i.clientWidth,s=a&&i.clientHeight>0&&i.scrollHeight>i.clientHeight,c=\"rtl\"===t.direction,u=s&&(c?e.offsetX<=i.offsetWidth-i.clientWidth:e.offsetX>i.clientWidth),d=l&&e.offsetY>i.clientHeight;if(u||d)return}let d=a.current.floatingContext?.nodeId,f=g&&e6(g.nodesRef.current,d).some(n=>eK(e,n.context?.elements.floating));if(eK(e,o.floating)||eK(e,o.domReference)||f)return;let p=g?e6(g.nodesRef.current,d):[];if(p.length>0){let e=!0;if(p.forEach(n=>{n.context?.open&&!n.context.dataRef.current.__outsidePressBubbles&&(e=!1)}),!e)return}r(!1,e,\"outside-press\")}),_=T(e=>{let n=()=>{E(e),eX(e)?.removeEventListener(c,n)};eX(e)?.addEventListener(c,n)});C.useEffect(()=>{if(!t||!i)return;a.current.__escapeKeyBubbles=y,a.current.__outsidePressBubbles=x;let e=new ej;function n(e){r(!1,e,\"ancestor-scroll\")}function s(){e.clear(),k.current=!0}function u(){e.start(5*!!ef(),()=>{k.current=!1})}let d=eQ(o.floating);l&&(d.addEventListener(\"keydown\",w?S:O,w),d.addEventListener(\"compositionstart\",s),d.addEventListener(\"compositionend\",u)),v&&d.addEventListener(c,j?_:E,j);let p=[];return f&&(ee(o.domReference)&&(p=eb(o.domReference)),ee(o.floating)&&(p=p.concat(eb(o.floating))),!ee(o.reference)&&o.reference&&o.reference.contextElement&&(p=p.concat(eb(o.reference.contextElement)))),(p=p.filter(e=>e!==d.defaultView?.visualViewport)).forEach(e=>{e.addEventListener(\"scroll\",n,{passive:!0})}),()=>{l&&(d.removeEventListener(\"keydown\",w?S:O,w),d.removeEventListener(\"compositionstart\",s),d.removeEventListener(\"compositionend\",u)),v&&d.removeEventListener(c,j?_:E,j),p.forEach(e=>{e.removeEventListener(\"scroll\",n)}),e.clear()}},[a,o,l,v,c,t,r,f,i,y,x,O,w,S,E,j,_]),C.useEffect(()=>{a.current.insideReactTree=!1},[a,v,c]);let P=C.useMemo(()=>({onKeyDown:O,...u&&{[nc[d]]:e=>{r(!1,e.nativeEvent,\"reference-press\")},...\"click\"!==d&&{onClick(e){r(!1,e.nativeEvent,\"reference-press\")}}}}),[O,r,u,d]),z=C.useMemo(()=>({onKeyDown:O,onMouseDown(){b.current=!0},onMouseUp(){b.current=!0},[nu[c]]:()=>{a.current.insideReactTree=!0},onBlurCapture(){g||(a.current.insideReactTree=!0,A.start(0,()=>{a.current.insideReactTree=!1}))}}),[O,c,a,g,A]);return C.useMemo(()=>i?{reference:P,floating:z}:{},[i,P,z])}let np=new Map([[\"select\",\"listbox\"],[\"combobox\",\"listbox\"],[\"label\",!1]]),nh=[\"top\",\"right\",\"bottom\",\"left\"],ng=Math.min,nm=Math.max,nv=Math.round,nb=Math.floor,ny=e=>({x:e,y:e}),nx={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"},nw={start:\"end\",end:\"start\"};function nj(e,n){return\"function\"==typeof e?e(n):e}function nk(e){return e.split(\"-\")[0]}function nA(e){return e.split(\"-\")[1]}function nO(e){return\"x\"===e?\"y\":\"x\"}function nC(e){return\"y\"===e?\"height\":\"width\"}let nS=new Set([\"top\",\"bottom\"]);function nE(e){return nS.has(nk(e))?\"y\":\"x\"}function n_(e){return e.replace(/start|end/g,e=>nw[e])}let nP=[\"left\",\"right\"],nz=[\"right\",\"left\"],nL=[\"top\",\"bottom\"],nT=[\"bottom\",\"top\"];function nR(e){return e.replace(/left|right|bottom|top/g,e=>nx[e])}function nN(e){return\"number\"!=typeof e?{top:0,right:0,bottom:0,left:0,...e}:{top:e,right:e,bottom:e,left:e}}function nD(e){let{x:n,y:t,width:r,height:o}=e;return{width:r,height:o,top:t,left:n,right:n+r,bottom:t+o,x:n,y:t}}function nB(e,n,t){return Math.floor(e/n)!==t}function nM(e,n){return n<0||n>=e.current.length}function nI(e,n){return nF(e,{disabledIndices:n})}function nH(e,n){return nF(e,{decrement:!0,startingIndex:e.current.length,disabledIndices:n})}function nF(e,{startingIndex:n=-1,decrement:t=!1,disabledIndices:r,amount:o=1}={}){let a=n;do a+=t?-o:o;while(a>=0&&a<=e.current.length-1&&nU(e,a,r));return a}function nU(e,n,t){if(\"function\"==typeof t)return t(n);if(t)return t.includes(n);let r=e.current[n];return null==r||r.hasAttribute(\"disabled\")||\"true\"===r.getAttribute(\"aria-disabled\")}let nV=0;function nq(e,n={}){let{preventScroll:t=!1,cancelPrevious:r=!0,sync:o=!1}=n;r&&cancelAnimationFrame(nV);let a=()=>e?.focus({preventScroll:t});o?a():nV=requestAnimationFrame(a)}function nW(e,n,t){switch(e){case\"vertical\":return n;case\"horizontal\":return t;default:return n||t}}function n$(e,n){return nW(n,e===eW||e===e$,e===eV||e===eq)}function nZ(e,n,t){return nW(n,e===e$,t?e===eV:e===eq)||\"Enter\"===e||\" \"===e||\"\"===e}function nY(e,n,t){return nW(n,t?e===eV:e===eq,e===e$)}function nX(e,n,t,r){return\"both\"===n||\"horizontal\"===n&&r&&r>1?\"Escape\"===e:nW(n,t?e===eq:e===eV,e===eW)}function nK(e=[]){let n=e.map(e=>e?.reference),t=e.map(e=>e?.floating),r=e.map(e=>e?.item),o=C.useCallback(n=>nQ(n,e,\"reference\"),n),a=C.useCallback(n=>nQ(n,e,\"floating\"),t),i=C.useCallback(n=>nQ(n,e,\"item\"),r);return C.useMemo(()=>({getReferenceProps:o,getFloatingProps:a,getItemProps:i}),[o,a,i])}function nQ(e,n,t){let r=new Map,o=\"item\"===t,a={};for(let n in\"floating\"===t&&(a.tabIndex=-1,a[eH]=\"\"),e)o&&e&&(n===eF||n===eU)||(a[n]=e[n]);for(let i=0;i<n.length;i+=1){let l,s=n[i]?.[t];(l=\"function\"==typeof s?e?s(e):null:s)&&nG(a,l,o,r)}return nG(a,e,o,r),a}function nG(e,n,t,r){for(let o in n){let a=n[o];t&&(o===eF||o===eU)||(o.startsWith(\"on\")?(r.has(o)||r.set(o,[]),\"function\"==typeof a&&(r.get(o)?.push(a),e[o]=(...e)=>r.get(o)?.map(n=>n(...e)).find(e=>void 0!==e))):e[o]=a)}}let nJ=C.createContext(void 0);function n0(e){let n=C.useContext(nJ);if(void 0===n&&!e)throw Error(\"Base UI: MenuRootContext is missing. Menu parts must be placed within <Menu.Root>.\");return n}let n1=C.createContext(null);function n2(e,n=!1,t=!1){let[r,o]=C.useState(e&&n?\"idle\":void 0),[a,i]=C.useState(e);return e&&!a&&(i(!0),o(\"starting\")),e||!a||\"ending\"===r||t||o(\"ending\"),e||a||\"ending\"!==r||o(void 0),F(()=>{if(!e&&a&&\"ending\"!==r&&t){let e=nl.request(()=>{o(\"ending\")});return()=>{nl.cancel(e)}}},[e,a,r,t]),F(()=>{if(!e||n)return;let t=nl.request(()=>{E.flushSync(()=>{o(void 0)})});return()=>{nl.cancel(t)}},[n,e]),F(()=>{if(!e||!n)return;e&&a&&\"idle\"!==r&&o(\"starting\");let t=nl.request(()=>{o(\"idle\")});return()=>{nl.cancel(t)}},[n,e,a,o,r]),C.useMemo(()=>({mounted:a,setMounted:i,transitionStatus:r}),[a,r])}function n4({controlled:e,default:n,name:t,state:r=\"value\"}){let{current:o}=C.useRef(void 0!==e),[a,i]=C.useState(n),l=C.useCallback(e=>{o||i(e)},[]);return[o?e:a,l]}function n5(e){let{enabled:n=!0,open:t,ref:r,onComplete:o}=e,a=eA(t),i=T(o),l=function(e,n=!1){let t=ns(),r=ek();return T((o,a=null)=>{t.cancel(),r.clear();let i=e.current;i&&(\"function\"!=typeof i.getAnimations||globalThis.BASE_UI_ANIMATIONS_DISABLED?o():t.request(()=>{function e(){i&&Promise.allSettled(i.getAnimations().map(e=>e.finished)).then(()=>{null!=a&&a.aborted||E.flushSync(o)})}n?r.start(0,e):e()}))})}(r,t);C.useEffect(()=>{n&&l(()=>{t===a.current&&i()})},[n,t,i,l,a])}let n3=C.createContext(void 0);function n6(e=!0){let n=C.useContext(n3);if(void 0===n&&!e)throw Error(\"Base UI: DirectionContext is missing.\");return n?.direction??\"ltr\"}let n9=()=>{},n8={},n7={},te=\"\";class tn{lockCount=0;restore=null;timeoutLock=ej.create();timeoutUnlock=ej.create();acquire(e){return this.lockCount+=1,1===this.lockCount&&null===this.restore&&this.timeoutLock.start(0,()=>this.lock(e)),this.release}release=()=>{this.lockCount-=1,0===this.lockCount&&this.restore&&this.timeoutUnlock.start(0,this.unlock)};unlock=()=>{0===this.lockCount&&this.restore&&(this.restore?.(),this.restore=null)};lock(e){if(0===this.lockCount||null!==this.restore)return;let n=eQ(e).documentElement,t=Q(n).getComputedStyle(n).overflowY;if(\"hidden\"===t||\"clip\"===t){this.restore=n9;return}let r=ez||!function(e){if(\"undefined\"==typeof document)return!1;let n=eQ(e);return Q(n).innerWidth-n.documentElement.clientWidth>0}(e);this.restore=r?function(e){let n=eQ(e).documentElement,t=n.style.overflow;return n.style.overflow=\"hidden\",()=>{n.style.overflow=t}}(e):function(e){let n=eQ(e),t=n.documentElement,r=n.body,o=Q(t),a=0,i=0,l=nl.create();if(eP&&(o.visualViewport?.scale??1)!==1)return()=>{};function s(){let e=o.getComputedStyle(t),n=o.getComputedStyle(r);a=t.scrollTop,i=t.scrollLeft,n8={scrollbarGutter:t.style.scrollbarGutter,overflowY:t.style.overflowY,overflowX:t.style.overflowX},te=t.style.scrollBehavior,n7={position:r.style.position,height:r.style.height,width:r.style.width,boxSizing:r.style.boxSizing,overflowY:r.style.overflowY,overflowX:r.style.overflowX,scrollBehavior:r.style.scrollBehavior};let l=\"undefined\"!=typeof CSS&&CSS.supports?.(\"scrollbar-gutter\",\"stable\"),s=t.scrollHeight>t.clientHeight,c=t.scrollWidth>t.clientWidth,u=\"scroll\"===e.overflowY||\"scroll\"===n.overflowY,d=\"scroll\"===e.overflowX||\"scroll\"===n.overflowX,f=Math.max(0,o.innerWidth-t.clientWidth),p=Math.max(0,o.innerHeight-t.clientHeight),h=parseFloat(n.marginTop)+parseFloat(n.marginBottom),g=parseFloat(n.marginLeft)+parseFloat(n.marginRight);Object.assign(t.style,{scrollbarGutter:\"stable\",overflowY:!l&&(s||u)?\"scroll\":\"hidden\",overflowX:!l&&(c||d)?\"scroll\":\"hidden\"}),Object.assign(r.style,{position:\"relative\",height:h||p?`calc(100dvh - ${h+p}px)`:\"100dvh\",width:g||f?`calc(100vw - ${g+f}px)`:\"100vw\",boxSizing:\"border-box\",overflow:\"hidden\",scrollBehavior:\"unset\"}),r.scrollTop=a,r.scrollLeft=i,t.setAttribute(\"data-base-ui-scroll-locked\",\"\"),t.style.scrollBehavior=\"unset\"}function c(){Object.assign(t.style,n8),Object.assign(r.style,n7),t.scrollTop=a,t.scrollLeft=i,t.removeAttribute(\"data-base-ui-scroll-locked\"),t.style.scrollBehavior=te}function u(){c(),l.request(s)}return s(),o.addEventListener(\"resize\",u),()=>{l.cancel(),c(),o.removeEventListener(\"resize\",u)}}(e)}}let tt=new tn;function tr(e){if(e)return({\"focus-out\":\"focus-out\",\"escape-key\":\"escape-key\",\"outside-press\":\"outside-press\",\"list-navigation\":\"list-navigation\",click:\"trigger-press\",hover:\"trigger-hover\",focus:\"trigger-focus\",\"reference-press\":\"trigger-press\",\"safe-polygon\":\"trigger-hover\",\"ancestor-scroll\":void 0})[e]}let to=C.createContext(void 0);function ta(e=!0){let n=C.useContext(to);if(void 0===n&&!e)throw Error(\"Base UI: ContextMenuRootContext is missing. ContextMenu parts must be placed within <ContextMenu.Root>.\");return n}let ti=C.createContext(!1);function tl(e,n){return e&&!n?e:!e&&n?n:e||n?{...e,...n}:void 0}let ts={};function tc(e,n,t,r,o){let a={...tf(e,ts)};return n&&(a=tu(a,n)),t&&(a=tu(a,t)),r&&(a=tu(a,r)),o&&(a=tu(a,o)),a}function tu(e,n){return td(n)?n(e):function(e,n){if(!n)return e;for(let t in n){let r=n[t];switch(t){case\"style\":e[t]=tl(e.style,r);break;case\"className\":e[t]=th(e.className,r);break;default:!function(e,n){let t=e.charCodeAt(0),r=e.charCodeAt(1),o=e.charCodeAt(2);return 111===t&&110===r&&o>=65&&o<=90&&(\"function\"==typeof n||void 0===n)}(t,r)?e[t]=r:e[t]=function(e,n){return n?e?t=>{var r;if(null!=(r=t)&&\"object\"==typeof r&&\"nativeEvent\"in r){tp(t);let r=n(t);return t.baseUIHandlerPrevented||e?.(t),r}let o=n(t);return e?.(t),o}:n:e}(e[t],r)}}return e}(e,n)}function td(e){return\"function\"==typeof e}function tf(e,n){return td(e)?e(n):e??ts}function tp(e){return e.preventBaseUIHandler=()=>{e.baseUIHandlerPrevented=!0},e}function th(e,n){return n?e?n+\" \"+e:n:e}let tg=[],tm={current:!1},tv=function(e){let n,t,{children:r,open:o,onOpenChange:a,onOpenChangeComplete:i,defaultOpen:s=!1,disabled:c=!1,modal:u,loop:d=!0,orientation:f=\"vertical\",actionsRef:p,openOnHover:h,delay:g=100,closeDelay:m=0,closeParentOnEsc:v=!0}=e,[b,y]=C.useState(null),[x,w]=C.useState(null),[j,k]=C.useState(),[A,O]=C.useState(!0),[S,_]=C.useState(null),[P,z]=C.useState(null),[L,R]=C.useState(!0),[N,D]=C.useState(!1),B=C.useRef(null),M=C.useRef(null),I=C.useRef(null),U=ek(),V=ta(!0),$=C.useContext(ti);{let e=n0(!0),t=function(e){let n=C.useContext(n1);if(null===n&&!e)throw Error(\"Base UI: MenubarContext is missing. Menubar parts must be placed within <Menubar>.\");return n}(!0);n=$&&e?{type:\"menu\",context:e}:t?{type:\"menubar\",context:t}:V?{type:\"context-menu\",context:V}:{type:void 0}}let X=H();void 0!==n.type&&(X=n.context.rootId);let K=(void 0===n.type||\"context-menu\"===n.type)&&(u??!0),Q=\"menu\"===n.type?n.context.allowMouseEnter:N,G=\"menu\"===n.type?n.context.setAllowMouseEnter:D,J=h??(\"menu\"===n.type||\"menubar\"===n.type&&n.context.hasSubmenuOpen),[ee,et]=n4({controlled:o,default:s,name:\"MenuRoot\",state:\"open\"}),er=C.useRef(\"context-menu\"!==n.type),eo=ek();C.useEffect(()=>{if(ee||(B.current=null),\"context-menu\"===n.type){if(!ee){eo.clear(),er.current=!1;return}eo.start(500,()=>{er.current=!0})}},[eo,ee,n.type]);let ea=C.useCallback(e=>{I.current=e,w(e)},[]),{mounted:ei,setMounted:el,transitionStatus:es}=n2(ee),{enabled:ec=!0,mounted:eu,open:ed,referenceElement:ef=null}={enabled:ee&&K&&\"trigger-hover\"!==P,mounted:ei,open:ee,referenceElement:x};F(()=>{if(eP&&eu&&!ed){let e=eQ(ef),n=e.body.style.userSelect,t=e.body.style.webkitUserSelect;return e.body.style.userSelect=\"none\",e.body.style.webkitUserSelect=\"none\",()=>{e.body.style.userSelect=n,e.body.style.webkitUserSelect=t}}},[eu,ed,ef]),F(()=>{if(ec)return tt.acquire(ef)},[ec,ef]),ee||A||O(!0);let ep=T(()=>{el(!1),R(!0),G(!1),i?.(!1)});n5({enabled:!p,open:ee,ref:M,onComplete(){ee||ep()}});let eh=C.useRef(!0),eg=ek(),em=T((e,t,r)=>{if(ee===e||!1===e&&t?.type===\"click\"&&\"touch\"===t.pointerType&&!eh.current)return;e&&\"trigger-focus\"===r?(eh.current=!1,eg.start(300,()=>{eh.current=!0})):(eh.current=!0,eg.clear());let o=(\"trigger-press\"===r||\"item-press\"===r)&&0===t.detail&&t?.isTrusted,i=!e&&(\"escape-key\"===r||null==r);function l(){a?.(e,t,r),et(e),z(r??null),B.current=t??null}\"trigger-hover\"===r?(R(!0),U.start(500,()=>{R(!1)}),E.flushSync(l)):l(),\"menubar\"===n.type&&(\"trigger-focus\"===r||\"focus-out\"===r||\"trigger-hover\"===r||\"list-navigation\"===r||\"sibling-open\"===r)?k(\"group\"):o||i?k(o?\"click\":\"dismiss\"):k(void 0)});C.useImperativeHandle(p,()=>({unmount:ep}),[ep]),\"context-menu\"===n.type&&(t=n.context),C.useImperativeHandle(t?.positionerRef,()=>x,[x]),C.useImperativeHandle(t?.actionsRef,()=>({setOpen:em}),[em]),C.useEffect(()=>{ee||U.clear()},[U,ee]);let ev=Y({elements:{reference:b,floating:x},open:ee,onOpenChange(e,n,t){em(e,n,tr(t))}}),eb=e3(ev,{enabled:A&&J&&!c&&\"context-menu\"!==n.type&&(\"menubar\"!==n.type||n.context.hasSubmenuOpen&&!ee),handleClose:e7({blockPointerEvents:!0}),mouseOnly:!0,move:\"menu\"===n.type,restMs:void 0===n.type||\"menu\"===n.type&&Q?g:void 0,delay:\"menu\"===n.type?{open:Q?g:1e10,close:m}:{close:m}}),ey=nn(ev,{enabled:!c&&!ee&&\"menubar\"===n.type&&n.context.hasSubmenuOpen&&!V}),ex=function(e,n={}){let{open:t,onOpenChange:r,dataRef:o}=e,{enabled:a=!0,event:i=\"click\",toggle:l=!0,ignoreMouse:s=!1,stickIfOpen:c=!0}=n,u=C.useRef(void 0),d=ns(),f=C.useMemo(()=>({onPointerDown(e){u.current=e.pointerType},onMouseDown(e){let n=u.current,a=e.nativeEvent;if(0!==e.button||\"click\"===i||eI(n,!0)&&s)return;let f=o.current.openEvent,p=f?.type,h=!(t&&l&&(!f||!c||\"click\"===p||\"mousedown\"===p));d.request(()=>{r(h,a,\"click\")})},onClick(e){let n=u.current;if(\"mousedown\"===i&&n){u.current=void 0;return}if(eI(n,!0)&&s)return;let a=o.current.openEvent,d=a?.type;r(!(t&&l&&(!a||!c||\"click\"===d||\"mousedown\"===d||\"keydown\"===d||\"keyup\"===d)),e.nativeEvent,\"click\")},onKeyDown(){u.current=void 0}}),[o,i,s,r,t,c,l,d]);return C.useMemo(()=>a?{reference:f}:nr,[a,f])}(ev,{enabled:!c&&\"context-menu\"!==n.type,event:ee&&\"menubar\"===n.type?\"click\":\"mousedown\",toggle:!J||\"menu\"!==n.type,ignoreMouse:J&&\"menu\"===n.type,stickIfOpen:void 0===n.type&&L}),ew=nf(ev,{enabled:!c,bubbles:v&&\"menu\"===n.type,outsidePressEvent:\"mousedown\",outsidePress:()=>\"context-menu\"!==n.type||B.current?.type===\"contextmenu\"||er.current}),ej=function(e,n={}){let{open:t,elements:r,floatingId:o}=e,{enabled:a=!0,role:i=\"dialog\"}=n,l=H(),s=r.domReference?.id||l,c=C.useMemo(()=>e0(r.floating)?.id||o,[r.floating,o]),u=np.get(i)??i,d=null!=q(),f=C.useMemo(()=>\"tooltip\"===u||\"label\"===i?{[`aria-${\"label\"===i?\"labelledby\":\"describedby\"}`]:t?c:void 0}:{\"aria-expanded\":t?\"true\":\"false\",\"aria-haspopup\":\"alertdialog\"===u?\"dialog\":u,\"aria-controls\":t?c:void 0,...\"listbox\"===u&&{role:\"combobox\"},...\"menu\"===u&&{id:s},...\"menu\"===u&&d&&{role:\"menuitem\"},...\"select\"===i&&{\"aria-autocomplete\":\"none\"},...\"combobox\"===i&&{\"aria-autocomplete\":\"list\"}},[u,c,d,t,s,i]),p=C.useMemo(()=>{let e={id:c,...u&&{role:u}};return\"tooltip\"===u||\"label\"===i?e:{...e,...\"menu\"===u&&{\"aria-labelledby\":s}}},[u,c,s,i]),h=C.useCallback(({active:e,selected:n})=>{let t={role:\"option\",...e&&{id:`${c}-fui-option`}};switch(i){case\"select\":return{...t,\"aria-selected\":e&&n};case\"combobox\":return{...t,\"aria-selected\":n}}return{}},[c,i]);return C.useMemo(()=>a?{reference:f,floating:p,item:h}:{},[a,f,p,h])}(ev,{role:\"menu\"}),eO=C.useRef([]),eC=C.useRef([]),eS=n6(),eE=function(e,n){let{open:t,onOpenChange:r,elements:o,floatingId:a}=e,{listRef:i,activeIndex:l,onNavigate:s=()=>{},enabled:c=!0,selectedIndex:u=null,allowEscape:d=!1,loop:f=!1,nested:p=!1,rtl:h=!1,virtual:g=!1,focusItemOnOpen:m=\"auto\",focusItemOnHover:v=!0,openOnArrowKeyDown:b=!0,disabledIndices:y,orientation:x=\"vertical\",parentOrientation:w,cols:j=1,scrollItemIntoView:k=!0,virtualItemRef:A,itemSizes:O,dense:S=!1}=n,E=eA(e0(o.floating)),_=q(),P=W();F(()=>{e.dataRef.current.orientation=x},[e,x]);let z=eJ(o.domReference),L=C.useRef(m),R=C.useRef(u??-1),N=C.useRef(null),D=C.useRef(!0),B=T(()=>{s(-1===R.current?null:R.current)}),M=C.useRef(B),I=C.useRef(!!o.floating),H=C.useRef(t),U=C.useRef(!1),V=C.useRef(!1),$=eA(y),Z=eA(t),Y=eA(k),X=eA(u),[K,Q]=C.useState(),[G,J]=C.useState(),ee=T(()=>{function e(e){g?(e.id?.endsWith(\"-fui-option\")&&(e.id=`${a}-${Math.random().toString(16).slice(2,10)}`),Q(e.id),P?.events.emit(\"virtualfocus\",e),A&&(A.current=e)):nq(e,{sync:U.current,preventScroll:!0})}let n=i.current[R.current],t=V.current;n&&e(n),(U.current?e=>e():requestAnimationFrame)(()=>{let r=i.current[R.current]||n;if(!r)return;n||e(r);let o=Y.current;o&&er&&(t||!D.current)&&r.scrollIntoView?.(\"boolean\"==typeof o?{block:\"nearest\",inline:\"nearest\"}:o)})});F(()=>{c&&(t&&o.floating?L.current&&null!=u&&(V.current=!0,R.current=u,B()):I.current&&(R.current=-1,M.current()))},[c,t,o.floating,u,B]),F(()=>{if(c&&t&&o.floating)if(null==l){if(U.current=!1,null!=X.current)return;if(I.current&&(R.current=-1,ee()),(!H.current||!I.current)&&L.current&&(null!=N.current||!0===L.current&&null==N.current)){let e=0,n=()=>{null==i.current[0]?(e<2&&(e?requestAnimationFrame:queueMicrotask)(n),e+=1):(R.current=null==N.current||nZ(N.current,x,h)||p?nI(i,$.current):nH(i,$.current),N.current=null,B())};n()}}else nM(i,l)||(R.current=l,ee(),V.current=!1)},[c,t,o.floating,l,X,p,i,x,h,B,ee,$]),F(()=>{if(!c||o.floating||!P||g||!I.current)return;let e=P.nodesRef.current,n=e.find(e=>e.id===_)?.context?.elements.floating,t=eZ(eQ(o.floating)),r=e.some(e=>e.context&&eY(e.context.elements.floating,t));n&&!r&&D.current&&n.focus({preventScroll:!0})},[c,o.floating,P,_,g]),F(()=>{if(c&&P&&g&&!_)return P.events.on(\"virtualfocus\",e),()=>{P.events.off(\"virtualfocus\",e)};function e(e){J(e.id),A&&(A.current=e)}},[c,P,g,_,A]),F(()=>{M.current=B,H.current=t,I.current=!!o.floating}),F(()=>{t||(N.current=null,L.current=m)},[t,m]);let et=null!=l,er=C.useMemo(()=>{function e(e){if(!Z.current)return;let n=i.current.indexOf(e);-1!==n&&R.current!==n&&(R.current=n,B())}return{onFocus({currentTarget:n}){U.current=!0,e(n)},onClick:({currentTarget:e})=>e.focus({preventScroll:!0}),onMouseMove({currentTarget:n}){U.current=!0,V.current=!1,v&&e(n)},onPointerLeave({pointerType:e}){D.current&&\"touch\"!==e&&(U.current=!0,v&&(R.current=-1,B(),g||E.current?.focus({preventScroll:!0})))}}},[Z,E,v,i,B,g]),eo=C.useCallback(()=>w??P?.nodesRef.current.find(e=>e.id===_)?.context?.dataRef?.current.orientation,[_,P,w]),ea=T(e=>{if(D.current=!1,U.current=!0,229===e.which||!Z.current&&e.currentTarget===E.current)return;if(p&&nX(e.key,x,h,j)){n$(e.key,eo())||eD(e),r(!1,e.nativeEvent,\"list-navigation\"),en(o.domReference)&&(g?P?.events.emit(\"virtualfocus\",o.domReference):o.domReference.focus());return}let n=R.current,a=nI(i,y),l=nH(i,y);if(z||(\"Home\"===e.key&&(eD(e),R.current=a,B()),\"End\"===e.key&&(eD(e),R.current=l,B())),j>1){var s;let n=O||Array.from({length:i.current.length},()=>({width:1,height:1})),t=function(e,n,t){let r=[],o=0;return e.forEach(({width:e,height:a},i)=>{let l=!1;for(t&&(o=0);!l;){let t=[];for(let r=0;r<e;r+=1)for(let e=0;e<a;e+=1)t.push(o+r+e*n);o%n+e<=n&&t.every(e=>null==r[e])?(t.forEach(e=>{r[e]=i}),l=!0):o+=1}}),[...r]}(n,j,S),r=t.findIndex(e=>null!=e&&!nU(i,e,y)),o=t.reduce((e,n,t)=>null==n||nU(i,n,y)?e:t,-1),c=t[function(e,{event:n,orientation:t,loop:r,rtl:o,cols:a,disabledIndices:i,minIndex:l,maxIndex:s,prevIndex:c,stopEvent:u=!1}){let d=c;if(n.key===eW){if(u&&eD(n),-1===c)d=s;else if(d=nF(e,{startingIndex:d,amount:a,decrement:!0,disabledIndices:i}),r&&(c-a<l||d<0)){let e=c%a,n=s%a,t=s-(n-e);d=n===e?s:n>e?t:t-a}nM(e,d)&&(d=c)}if(n.key===e$&&(u&&eD(n),-1===c?d=l:(d=nF(e,{startingIndex:c,amount:a,disabledIndices:i}),r&&c+a>s&&(d=nF(e,{startingIndex:c%a-a,amount:a,disabledIndices:i}))),nM(e,d)&&(d=c)),\"both\"===t){let t=nb(c/a);n.key===(o?eV:eq)&&(u&&eD(n),c%a!=a-1?(d=nF(e,{startingIndex:c,disabledIndices:i}),r&&nB(d,a,t)&&(d=nF(e,{startingIndex:c-c%a-1,disabledIndices:i}))):r&&(d=nF(e,{startingIndex:c-c%a-1,disabledIndices:i})),nB(d,a,t)&&(d=c)),n.key===(o?eq:eV)&&(u&&eD(n),c%a!=0?(d=nF(e,{startingIndex:c,decrement:!0,disabledIndices:i}),r&&nB(d,a,t)&&(d=nF(e,{startingIndex:c+(a-c%a),decrement:!0,disabledIndices:i}))):r&&(d=nF(e,{startingIndex:c+(a-c%a),decrement:!0,disabledIndices:i})),nB(d,a,t)&&(d=c));let l=nb(s/a)===t;nM(e,d)&&(d=r&&l?n.key===(o?eq:eV)?s:nF(e,{startingIndex:c-c%a-1,disabledIndices:i}):c)}return d}({current:t.map(e=>null!=e?i.current[e]:null)},{event:e,orientation:x,loop:f,rtl:h,cols:j,disabledIndices:(s=[...(\"function\"!=typeof y?y:null)||i.current.map((e,n)=>nU(i,n,y)?n:void 0),void 0],t.flatMap((e,n)=>s.includes(e)?[n]:[])),minIndex:r,maxIndex:o,prevIndex:function(e,n,t,r,o){if(-1===e)return -1;let a=t.indexOf(e),i=n[e];switch(o){case\"tl\":return a;case\"tr\":if(!i)return a;return a+i.width-1;case\"bl\":if(!i)return a;return a+(i.height-1)*r;case\"br\":return t.lastIndexOf(e);default:return -1}}(R.current>l?a:R.current,n,t,j,e.key===e$?\"bl\":e.key===(h?eV:eq)?\"tr\":\"tl\"),stopEvent:!0})];if(null!=c&&(R.current=c,B()),\"both\"===x)return}if(n$(e.key,x)){if(eD(e),t&&!g&&eZ(e.currentTarget.ownerDocument)===e.currentTarget){R.current=nZ(e.key,x,h)?a:l,B();return}nZ(e.key,x,h)?f?R.current=n>=l?d&&n!==i.current.length?-1:a:nF(i,{startingIndex:n,disabledIndices:y}):R.current=Math.min(l,nF(i,{startingIndex:n,disabledIndices:y})):f?R.current=n<=a?d&&-1!==n?i.current.length:l:nF(i,{startingIndex:n,decrement:!0,disabledIndices:y}):R.current=Math.max(a,nF(i,{startingIndex:n,decrement:!0,disabledIndices:y})),nM(i,R.current)&&(R.current=-1),B()}}),ei=C.useMemo(()=>g&&t&&et&&{\"aria-activedescendant\":G||K},[g,t,et,G,K]),el=C.useMemo(()=>({\"aria-orientation\":\"both\"===x?void 0:x,...!z?ei:{},onKeyDown:ea,onPointerMove(){D.current=!0}}),[ei,ea,x,z]),es=C.useMemo(()=>{function e(e){\"auto\"===m&&eB(e.nativeEvent)&&(L.current=!0)}function n(e){L.current=m,\"auto\"===m&&eM(e.nativeEvent)&&(L.current=!0)}return{...ei,onKeyDown(e){D.current=!1;let n=e.key.startsWith(\"Arrow\"),o=[\"Home\",\"End\"].includes(e.key),a=nY(e.key,x,h),l=nX(e.key,x,h,j),s=nY(e.key,eo(),h),c=n$(e.key,x),d=(p?s:c)||\"Enter\"===e.key||\"\"===e.key.trim();if(g&&t){var f,m;let t,r,s=P?.nodesRef.current.find(e=>null==e.parentId),u=P&&s?(f=P.nodesRef.current,m=s.id,r=-1,!function e(n,o){o>r&&(t=n,r=o),e6(f,n).forEach(n=>{e(n.id,o+1)})}(m,0),f.find(e=>e.id===t)):null;if((n||o)&&u&&A){let n=new KeyboardEvent(\"keydown\",{key:e.key,bubbles:!0});if(a||l){let t=u.context?.elements.domReference===e.currentTarget,r=l&&!t?u.context?.elements.domReference:a?i.current.find(e=>e?.id===K):null;r&&(eD(e),r.dispatchEvent(n),J(void 0))}if((c||o)&&u.context&&u.context.open&&u.parentId&&e.currentTarget!==u.context.elements.domReference){eD(e),u.context.elements.domReference?.dispatchEvent(n);return}}return ea(e)}if(t||b||!n){if(d){let n=n$(e.key,eo());N.current=p&&n?null:e.key}if(p){s&&(eD(e),t?(R.current=nI(i,$.current),B()):r(!0,e.nativeEvent,\"list-navigation\"));return}c&&(null!=u&&(R.current=u),eD(e),!t&&b?r(!0,e.nativeEvent,\"list-navigation\"):ea(e),t&&B())}},onFocus(){t&&!g&&(R.current=-1,B())},onPointerDown:n,onPointerEnter:n,onMouseDown:e,onClick:e}},[K,ei,j,ea,$,m,i,p,B,r,t,b,x,eo,h,u,P,g,A]);return C.useMemo(()=>c?{reference:es,floating:el,item:er}:{},[c,es,el,er])}(ev,{enabled:!c,listRef:eO,activeIndex:S,nested:void 0!==n.type,loop:d,orientation:f,parentOrientation:\"menubar\"===n.type?n.context.orientation:void 0,rtl:\"rtl\"===eS,disabledIndices:tg,onNavigate:_,openOnArrowKeyDown:\"context-menu\"!==n.type}),e_=C.useRef(!1),ez=function(e,n){let{open:t,dataRef:r}=e,{listRef:o,activeIndex:a,onMatch:i,onTypingChange:l,enabled:s=!0,findMatch:c=null,resetMs:u=750,ignoreKeys:d=[],selectedIndex:f=null}=n,p=ek(),h=C.useRef(\"\"),g=C.useRef(f??a??-1),m=C.useRef(null),v=T(i),b=T(l),y=eA(c),x=eA(d);F(()=>{t&&(p.clear(),m.current=null,h.current=\"\")},[t,p]),F(()=>{t&&\"\"===h.current&&(g.current=f??a??-1)},[t,f,a]);let w=T(e=>{e?r.current.typing||(r.current.typing=e,b(e)):r.current.typing&&(r.current.typing=e,b(e))}),j=T(e=>{function n(e,n,t){let r=y.current?y.current(n,t):n.find(e=>e?.toLocaleLowerCase().indexOf(t.toLocaleLowerCase())===0);return r?e.indexOf(r):-1}let r=o.current;if(h.current.length>0&&\" \"!==h.current[0]&&(-1===n(r,r,h.current)?w(!1):\" \"===e.key&&eD(e)),null==r||x.current.includes(e.key)||1!==e.key.length||e.ctrlKey||e.metaKey||e.altKey)return;t&&\" \"!==e.key&&(eD(e),w(!0)),r.every(e=>!e||e[0]?.toLocaleLowerCase()!==e[1]?.toLocaleLowerCase())&&h.current===e.key&&(h.current=\"\",g.current=m.current),h.current+=e.key,p.start(u,()=>{h.current=\"\",g.current=m.current,w(!1)});let a=g.current,i=n(r,[...r.slice((a||0)+1),...r.slice(0,(a||0)+1)],h.current);-1!==i?(v(i),m.current=i):\" \"!==e.key&&(h.current=\"\",w(!1))}),k=C.useMemo(()=>({onKeyDown:j}),[j]),A=C.useMemo(()=>({onKeyDown:j,onKeyUp(e){\" \"===e.key&&w(!1)}}),[j,w]);return C.useMemo(()=>s?{reference:k,floating:A}:{},[s,k,A])}(ev,{listRef:eC,activeIndex:S,resetMs:500,onMatch:e=>{ee&&e!==S&&_(e)},onTypingChange:C.useCallback(e=>{e_.current=e},[])}),{getReferenceProps:eL,getFloatingProps:eT,getItemProps:eR}=nK([eb,ex,ew,ey,ej,eE,ez]),eN=function(e){let{enabled:n=!0,mouseDownAction:t,open:r}=e,o=C.useRef(!1);return C.useMemo(()=>n?{onMouseDown:e=>{(\"open\"===t&&!r||\"close\"===t&&r)&&(o.current=!0,eQ(e.currentTarget).addEventListener(\"click\",()=>{o.current=!1},{once:!0}))},onClick:e=>{o.current&&(o.current=!1,e.preventBaseUIHandler())}}:nr,[n,t,r])}({open:ee,enabled:\"menubar\"===n.type,mouseDownAction:\"open\"}),eH=C.useMemo(()=>{let e=tc(eL(),{onMouseEnter(){O(!0)},onMouseMove(){G(!0)}},eN);return delete e.role,e},[eL,eN,G]),eF=C.useMemo(()=>eT({onMouseEnter(){J&&\"menu\"!==n.type||O(!1)},onMouseMove(){G(!0)},onClick(){J&&O(!1)}}),[eT,J,n.type,G]),eU=C.useMemo(()=>eR(),[eR]),eX=C.useMemo(()=>({activeIndex:S,setActiveIndex:_,allowMouseUpTriggerRef:n.type?n.context.allowMouseUpTriggerRef:tm,floatingRootContext:ev,itemProps:eU,popupProps:eF,triggerProps:eH,itemDomElements:eO,itemLabels:eC,mounted:ei,open:ee,popupRef:M,positionerRef:I,setOpen:em,setPositionerElement:ea,triggerElement:b,setTriggerElement:y,transitionStatus:es,lastOpenChangeReason:P,instantType:j,onOpenChangeComplete:i,setHoverEnabled:O,typingRef:e_,modal:K,disabled:c,parent:n,rootId:X,allowMouseEnter:Q,setAllowMouseEnter:G}),[S,ev,eU,eF,eH,eO,eC,ei,ee,I,em,es,b,ea,P,j,i,K,c,n,X,Q,G]),eK=(0,l.jsx)(nJ.Provider,{value:eX,children:r});return void 0===n.type||\"context-menu\"===n.type?(0,l.jsx)(Z,{children:eK}):eK};function tb(e,n,t,r){var o,a,i,l,s;let c=P(ty).current;return o=c,a=e,i=n,l=t,s=r,(o.refs[0]!==a||o.refs[1]!==i||o.refs[2]!==l||o.refs[3]!==s)&&tx(c,[e,n,t,r]),c.callback}function ty(){return{callback:null,cleanup:null,refs:[]}}function tx(e,n){if(e.refs=n,n.every(e=>null==e)){e.callback=null;return}e.callback=t=>{if(e.cleanup&&(e.cleanup(),e.cleanup=null),null!=t){let r=Array(n.length).fill(null);for(let e=0;e<n.length;e+=1){let o=n[e];if(null!=o)switch(typeof o){case\"function\":{let n=o(t);\"function\"==typeof n&&(r[e]=n);break}case\"object\":o.current=t}}e.cleanup=()=>{for(let e=0;e<n.length;e+=1){let t=n[e];if(null!=t)switch(typeof t){case\"function\":{let n=r[e];\"function\"==typeof n?n():t(null);break}case\"object\":t.current=null}}}}}}let tw=parseInt(C.version,10);function tj(e,n,t={}){let r=n.render,o=function(e,n={}){let t,{className:r,render:o}=e,{state:a=nr,ref:i,props:l,disableStyleHooks:s,customStyleHookMapping:c,enabled:u=!0}=n,d=u?\"function\"==typeof r?r(a):r:void 0;!0!==s&&(t=C.useMemo(()=>u?function(e,n){let t={};for(let r in e){let o=e[r];if(n?.hasOwnProperty(r)){let e=n[r](o);null!=e&&Object.assign(t,e);continue}!0===o?t[`data-${r.toLowerCase()}`]=\"\":o&&(t[`data-${r.toLowerCase()}`]=o.toString())}return t}(a,c):nr,[a,c,u]));let f=u?tl(t,Array.isArray(l)?function(e){if(0===e.length)return ts;if(1===e.length)return tf(e[0],ts);let n={...tf(e[0],ts)};for(let t=1;t<e.length;t+=1)n=tu(n,e[t]);return n}(l):l)??nr:nr;return(\"undefined\"!=typeof document&&(u?Array.isArray(i)?f.ref=function(e){var n,t;let r=P(ty).current;return n=r,t=e,(n.refs.length!==t.length||n.refs.some((e,n)=>e!==t[n]))&&tx(r,e),r.callback}([f.ref,tk(o),...i]):f.ref=tb(f.ref,tk(o),i):tb(null,null)),u)?(void 0!==d&&(f.className=th(f.className,d)),f):nr}(n,t);return!1===t.enabled?null:function(e,n,t,r){if(n){if(\"function\"==typeof n)return n(t,r);let e=tc(t,n.props);return e.ref=t.ref,C.cloneElement(n,e)}if(e&&\"string\"==typeof e){var o,a;return o=e,a=t,\"button\"===o?(0,l.jsx)(\"button\",{type:\"button\",...a}):\"img\"===o?(0,l.jsx)(\"img\",{alt:\"\",...a}):C.createElement(o,a)}throw Error(\"Base UI: Render element or function are not defined.\")}(e,r,o,t.state??nr)}function tk(e){return e&&\"function\"!=typeof e?tw>=19?e.props.ref:e.ref:null}let tA=C.createContext(void 0);function tO(e=!1){let n=C.useContext(tA);if(void 0===n&&!e)throw Error(\"Base UI: CompositeRootContext is missing. Composite parts must be placed within <Composite.Root>.\");return n}let tC=C.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},elementsRef:{current:[]},nextIndexRef:{current:0}}),tS=((r={})[r.None=0]=\"None\",r[r.GuessFromOrder=1]=\"GuessFromOrder\",r);function tE(e={}){let{label:n,metadata:t,textRef:r,indexGuessBehavior:o}=e,{register:a,unregister:i,subscribeMapChange:l,elementsRef:s,labelsRef:c,nextIndexRef:u}=C.useContext(tC),d=C.useRef(-1),[f,p]=C.useState(o===tS.GuessFromOrder?()=>{if(-1===d.current){let e=u.current;u.current+=1,d.current=e}return d.current}:-1),h=C.useRef(null),g=C.useCallback(e=>{if(h.current=e,-1!==f&&null!==e&&(s.current[f]=e,c)){let t=void 0!==n;c.current[f]=t?n:r?.current?.textContent??e.textContent}},[f,s,c,n,r]);return F(()=>{let e=h.current;if(e)return a(e,t),()=>{i(e)}},[a,i,t]),F(()=>l(e=>{let n=h.current?e.get(h.current)?.index:null;null!=n&&p(n)}),[l,p]),C.useMemo(()=>({ref:g,index:f}),[f,g])}function t_(e){let{render:n,className:t,itemRef:r=null,metadata:o,...a}=e,{props:i,ref:l}=function(e={}){let{highlightedIndex:n,onHighlightedIndexChange:t,highlightItemOnHover:r}=tO(),{ref:o,index:a}=tE(e),i=n===a,l=C.useRef(null),s=tb(o,l),c=C.useMemo(()=>({tabIndex:i?0:-1,onFocus(){t(a)},onMouseMove(){let e=l.current;if(!r||!e)return;let n=e.hasAttribute(\"disabled\")||\"true\"===e.ariaDisabled;i||n||e.focus()}}),[a,i,t,r]);return C.useMemo(()=>({props:c,ref:s,index:a}),[c,a,s])}({metadata:o});return tj(\"div\",e,{ref:[r,l],props:[i,a]})}let tP=((o={}).startingStyle=\"data-starting-style\",o.endingStyle=\"data-ending-style\",o),tz={[tP.startingStyle]:\"\"},tL={[tP.endingStyle]:\"\"},tT={transitionStatus:e=>\"starting\"===e?tz:\"ending\"===e?tL:null},tR=((a={}).open=\"data-open\",a.closed=\"data-closed\",a[a.startingStyle=tP.startingStyle]=\"startingStyle\",a[a.endingStyle=tP.endingStyle]=\"endingStyle\",a.anchorHidden=\"data-anchor-hidden\",a),tN=((i={}).popupOpen=\"data-popup-open\",i.pressed=\"data-pressed\",i),tD={[tN.popupOpen]:\"\"},tB={[tN.popupOpen]:\"\",[tN.pressed]:\"\"},tM={[tR.open]:\"\"},tI={[tR.closed]:\"\"},tH={[tR.anchorHidden]:\"\"},tF={open:e=>e?tD:null},tU={open:e=>e?tB:null},tV={open:e=>e?tM:tI,anchorHidden:e=>e?tH:null};function tq(e={}){let{disabled:n=!1,focusableWhenDisabled:t,tabIndex:r=0,native:o=!0}=e,a=C.useRef(null),i=void 0!==tO(!0),l=T(()=>{let e=a.current;return!!(e?.tagName===\"A\"&&e?.href)}),{props:s}=function(e){let{focusableWhenDisabled:n,disabled:t,composite:r=!1,tabIndex:o=0,isNativeButton:a}=e,i=r&&!1!==n,l=r&&!1===n;return{props:C.useMemo(()=>{let e={onKeyDown(e){t&&n&&\"Tab\"!==e.key&&e.preventDefault()}};return r||(e.tabIndex=o,!a&&t&&(e.tabIndex=n?o:-1)),(a&&(n||i)||!a&&t)&&(e[\"aria-disabled\"]=t),a&&(!n||l)&&(e.disabled=t),e},[r,t,n,i,l,a,o])}}({focusableWhenDisabled:t,disabled:n,composite:i,tabIndex:r,isNativeButton:o});return F(()=>{let e=a.current;e instanceof HTMLButtonElement&&i&&n&&void 0===s.disabled&&e.disabled&&(e.disabled=!1)},[n,s.disabled,i]),{getButtonProps:C.useCallback((e={})=>{let{onClick:t,onMouseDown:r,onKeyUp:a,onKeyDown:i,onPointerDown:c,...u}=e;return tc({type:o?\"button\":void 0,onClick(e){if(n)return void e.preventDefault();t?.(e)},onMouseDown(e){n||r?.(e)},onKeyDown(e){n||(tp(e),i?.(e)),!e.baseUIHandlerPrevented&&(e.target!==e.currentTarget||o||l()||\"Enter\"!==e.key||n||(t?.(e),e.preventDefault()))},onKeyUp(e){n||(tp(e),a?.(e)),!e.baseUIHandlerPrevented&&(e.target!==e.currentTarget||o||n||\" \"!==e.key||t?.(e))},onPointerDown(e){if(n)return void e.preventDefault();c?.(e)}},o?void 0:{role:\"button\"},s,u)},[n,s,o,l]),buttonRef:a}}let tW=C.forwardRef(function(e,n){let{render:t,className:r,disabled:o=!1,nativeButton:a=!0,...i}=e,{triggerProps:s,disabled:c,setTriggerElement:u,open:d,allowMouseUpTriggerRef:f,positionerRef:p,parent:h,lastOpenChangeReason:g,rootId:m}=n0(),v=o||c,b=C.useRef(null),y=ek(),{getButtonProps:x,buttonRef:w}=tq({disabled:v,native:a}),j=tb(w,u),{events:k}=W();C.useEffect(()=>{d||void 0!==h.type||(f.current=!1)},[f,d,h.type]);let A=T(e=>{if(!b.current)return;y.clear(),f.current=!1;let n=e.target;if(eY(b.current,n)||eY(p.current,n)||n===b.current||null!=n&&function e(n){return en(n)&&n.hasAttribute(\"data-rootownerid\")?n.getAttribute(\"data-rootownerid\")??void 0:eh(n)?void 0:e(ev(n))}(n)===m)return;let t=function(e){let n=e.getBoundingClientRect(),t=window.getComputedStyle(e,\"::before\"),r=window.getComputedStyle(e,\"::after\");if(\"none\"===t.content&&\"none\"===r.content)return n;let o=parseFloat(t.width)||0,a=parseFloat(t.height)||0,i=parseFloat(r.width)||0,l=parseFloat(r.height)||0,s=Math.max(n.width,o,i),c=Math.max(n.height,a,l),u=s-n.width,d=c-n.height;return{left:n.left-u/2,right:n.right+u/2,top:n.top-d/2,bottom:n.bottom+d/2}}(b.current);e.clientX>=t.left-2&&e.clientX<=t.right+2&&e.clientY>=t.top-2&&e.clientY<=t.bottom+2||k.emit(\"close\",{domEvent:e,reason:\"cancel-open\"})});C.useEffect(()=>{d&&\"trigger-hover\"===g&&eQ(b.current).addEventListener(\"mouseup\",A,{once:!0})},[d,A,g]);let O=C.useCallback(e=>tc({\"aria-haspopup\":\"menu\",ref:j,onMouseDown:e=>{d||(y.start(200,()=>{f.current=!0}),eQ(e.currentTarget).addEventListener(\"mouseup\",A,{once:!0}))}},e,x),[x,j,d,f,y,A]),S=tj(\"button\",e,{state:C.useMemo(()=>({disabled:v,open:d}),[v,d]),customStyleHookMapping:tU,ref:[b,n,w],props:[s,i,O]});return\"menubar\"===h.type?(0,l.jsx)(t_,{render:S}):S}),t$={clip:\"rect(0 0 0 0)\",overflow:\"hidden\",whiteSpace:\"nowrap\",position:\"fixed\",top:0,left:0,border:0,padding:0,width:1,height:1,margin:-1},tZ=C.forwardRef(function(e,n){let[t,r]=C.useState();return F(()=>{eL&&r(\"button\")},[]),(0,l.jsx)(\"span\",{...e,ref:n,tabIndex:0,role:t,\"aria-hidden\":!t||void 0,style:t$,\"data-base-ui-focus-guard\":\"\"})});var tY='input:not([inert]),select:not([inert]),textarea:not([inert]),a[href]:not([inert]),button:not([inert]),[tabindex]:not(slot):not([inert]),audio[controls]:not([inert]),video[controls]:not([inert]),[contenteditable]:not([contenteditable=\"false\"]):not([inert]),details>summary:first-of-type:not([inert]),details:not([inert])',tX=\"undefined\"==typeof Element,tK=tX?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,tQ=!tX&&Element.prototype.getRootNode?function(e){var n;return null==e||null==(n=e.getRootNode)?void 0:n.call(e)}:function(e){return null==e?void 0:e.ownerDocument},tG=function e(n,t){void 0===t&&(t=!0);var r,o=null==n||null==(r=n.getAttribute)?void 0:r.call(n,\"inert\");return\"\"===o||\"true\"===o||t&&n&&e(n.parentNode)},tJ=function(e){var n,t=null==e||null==(n=e.getAttribute)?void 0:n.call(e,\"contenteditable\");return\"\"===t||\"true\"===t},t0=function(e,n,t){if(tG(e))return[];var r=Array.prototype.slice.apply(e.querySelectorAll(tY));return n&&tK.call(e,tY)&&r.unshift(e),r=r.filter(t)},t1=function e(n,t,r){for(var o=[],a=Array.from(n);a.length;){var i=a.shift();if(!tG(i,!1))if(\"SLOT\"===i.tagName){var l=i.assignedElements(),s=e(l.length?l:i.children,!0,r);r.flatten?o.push.apply(o,s):o.push({scopeParent:i,candidates:s})}else{tK.call(i,tY)&&r.filter(i)&&(t||!n.includes(i))&&o.push(i);var c=i.shadowRoot||\"function\"==typeof r.getShadowRoot&&r.getShadowRoot(i),u=!tG(c,!1)&&(!r.shadowRootFilter||r.shadowRootFilter(i));if(c&&u){var d=e(!0===c?i.children:c.children,!0,r);r.flatten?o.push.apply(o,d):o.push({scopeParent:i,candidates:d})}else a.unshift.apply(a,i.children)}}return o},t2=function(e){return!isNaN(parseInt(e.getAttribute(\"tabindex\"),10))},t4=function(e){if(!e)throw Error(\"No node provided\");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||tJ(e))&&!t2(e)?0:e.tabIndex},t5=function(e,n){var t=t4(e);return t<0&&n&&!t2(e)?0:t},t3=function(e,n){return e.tabIndex===n.tabIndex?e.documentOrder-n.documentOrder:e.tabIndex-n.tabIndex},t6=function(e){return\"INPUT\"===e.tagName},t9=function(e,n){for(var t=0;t<e.length;t++)if(e[t].checked&&e[t].form===n)return e[t]},t8=function(e){if(!e.name)return!0;var n,t=e.form||tQ(e),r=function(e){return t.querySelectorAll('input[type=\"radio\"][name=\"'+e+'\"]')};if(\"undefined\"!=typeof window&&void 0!==window.CSS&&\"function\"==typeof window.CSS.escape)n=r(window.CSS.escape(e.name));else try{n=r(e.name)}catch(e){return console.error(\"Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s\",e.message),!1}var o=t9(n,e.form);return!o||o===e},t7=function(e){return t6(e)&&\"radio\"===e.type&&!t8(e)},re=function(e){var n,t,r,o,a,i,l,s=e&&tQ(e),c=null==(n=s)?void 0:n.host,u=!1;if(s&&s!==e)for(u=!!(null!=(t=c)&&null!=(r=t.ownerDocument)&&r.contains(c)||null!=e&&null!=(o=e.ownerDocument)&&o.contains(e));!u&&c;)u=!!(null!=(i=c=null==(a=s=tQ(c))?void 0:a.host)&&null!=(l=i.ownerDocument)&&l.contains(c));return u},rn=function(e){var n=e.getBoundingClientRect(),t=n.width,r=n.height;return 0===t&&0===r},rt=function(e,n){var t=n.displayCheck,r=n.getShadowRoot;if(\"hidden\"===getComputedStyle(e).visibility)return!0;var o=tK.call(e,\"details>summary:first-of-type\")?e.parentElement:e;if(tK.call(o,\"details:not([open]) *\"))return!0;if(t&&\"full\"!==t&&\"legacy-full\"!==t){if(\"non-zero-area\"===t)return rn(e)}else{if(\"function\"==typeof r){for(var a=e;e;){var i=e.parentElement,l=tQ(e);if(i&&!i.shadowRoot&&!0===r(i))return rn(e);e=e.assignedSlot?e.assignedSlot:i||l===e.ownerDocument?i:l.host}e=a}if(re(e))return!e.getClientRects().length;if(\"legacy-full\"!==t)return!0}return!1},rr=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var n=e.parentElement;n;){if(\"FIELDSET\"===n.tagName&&n.disabled){for(var t=0;t<n.children.length;t++){var r=n.children.item(t);if(\"LEGEND\"===r.tagName)return!!tK.call(n,\"fieldset[disabled] *\")||!r.contains(e)}return!0}n=n.parentElement}return!1},ro=function(e,n){return!(n.disabled||tG(n)||t6(n)&&\"hidden\"===n.type||rt(n,e)||\"DETAILS\"===n.tagName&&Array.prototype.slice.apply(n.children).some(function(e){return\"SUMMARY\"===e.tagName})||rr(n))},ra=function(e,n){return!(t7(n)||0>t4(n))&&!!ro(e,n)},ri=function(e){var n=parseInt(e.getAttribute(\"tabindex\"),10);return!!isNaN(n)||!!(n>=0)},rl=function e(n){var t=[],r=[];return n.forEach(function(n,o){var a=!!n.scopeParent,i=a?n.scopeParent:n,l=t5(i,a),s=a?e(n.candidates):i;0===l?a?t.push.apply(t,s):t.push(i):r.push({documentOrder:o,tabIndex:l,item:n,isScope:a,content:s})}),r.sort(t3).reduce(function(e,n){return n.isScope?e.push.apply(e,n.content):e.push(n.content),e},[]).concat(t)},rs=function(e,n){return rl((n=n||{}).getShadowRoot?t1([e],n.includeContainer,{filter:ra.bind(null,n),flatten:!1,getShadowRoot:n.getShadowRoot,shadowRootFilter:ri}):t0(e,n.includeContainer,ra.bind(null,n)))},rc=function(e,n){return(n=n||{}).getShadowRoot?t1([e],n.includeContainer,{filter:ro.bind(null,n),flatten:!0,getShadowRoot:n.getShadowRoot}):t0(e,n.includeContainer,ro.bind(null,n))},ru=function(e,n){if(n=n||{},!e)throw Error(\"No node provided\");return!1!==tK.call(e,tY)&&ra(n,e)};let rd=()=>({getShadowRoot:!0,displayCheck:\"function\"==typeof ResizeObserver&&ResizeObserver.toString().includes(\"[native code]\")?\"full\":\"none\"});function rf(e,n){let t=rs(e,rd()),r=t.length;if(0===r)return;let o=eZ(eQ(e)),a=t.indexOf(o);return t[-1===a?1===n?0:r-1:a+n]}function rp(e){return rf(eQ(e).body,1)||e}function rh(e){return rf(eQ(e).body,-1)||e}function rg(e,n){let t=n||e.currentTarget,r=e.relatedTarget;return!r||!eY(t,r)}function rm(e){e.querySelectorAll(\"[data-tabindex]\").forEach(e=>{let n=e.dataset.tabindex;delete e.dataset.tabindex,n?e.setAttribute(\"tabindex\",n):e.removeAttribute(\"tabindex\")})}let rv=C.createContext(null),rb=()=>C.useContext(rv),ry=e1(\"portal\");function rx(e={}){let{id:n,root:t}=e,r=H(),o=rb(),[a,i]=C.useState(null),l=C.useRef(null);return F(()=>()=>{a?.remove(),queueMicrotask(()=>{l.current=null})},[a]),F(()=>{if(!r||l.current)return;let e=n?document.getElementById(n):null;if(!e)return;let t=document.createElement(\"div\");t.id=r,t.setAttribute(ry,\"\"),e.appendChild(t),l.current=t,i(t)},[n,r]),F(()=>{if(null===t||!r||l.current)return;let e=t||o?.portalNode;e&&!ee(e)&&(e=e.current),e=e||document.body;let a=null;n&&((a=document.createElement(\"div\")).id=n,e.appendChild(a));let s=document.createElement(\"div\");s.id=r,s.setAttribute(ry,\"\"),(e=a||e).appendChild(s),l.current=s,i(s)},[n,t,r,o]),a}function rw(e){let{children:n,id:t,root:r,preserveTabOrder:o=!0}=e,a=rx({id:t,root:r}),[i,s]=C.useState(null),c=C.useRef(null),u=C.useRef(null),d=C.useRef(null),f=C.useRef(null),p=i?.modal,h=i?.open,g=!!i&&!i.modal&&i.open&&o&&!!(r||a);return C.useEffect(()=>{if(a&&o&&!p)return a.addEventListener(\"focusin\",e,!0),a.addEventListener(\"focusout\",e,!0),()=>{a.removeEventListener(\"focusin\",e,!0),a.removeEventListener(\"focusout\",e,!0)};function e(e){a&&rg(e)&&(\"focusin\"===e.type?rm:function(e){rs(e,rd()).forEach(e=>{e.dataset.tabindex=e.getAttribute(\"tabindex\")||\"\",e.setAttribute(\"tabindex\",\"-1\")})})(a)}},[a,o,p]),C.useEffect(()=>{a&&(h||rm(a))},[h,a]),(0,l.jsxs)(rv.Provider,{value:C.useMemo(()=>({preserveTabOrder:o,beforeOutsideRef:c,afterOutsideRef:u,beforeInsideRef:d,afterInsideRef:f,portalNode:a,setFocusManagerState:s}),[o,a]),children:[g&&a&&(0,l.jsx)(tZ,{\"data-type\":\"outside\",ref:c,onFocus:e=>{if(rg(e,a))d.current?.focus();else{let e=rh(i?i.domReference:null);e?.focus()}}}),g&&a&&(0,l.jsx)(\"span\",{\"aria-owns\":a.id,style:t$}),a&&E.createPortal(n,a),g&&a&&(0,l.jsx)(tZ,{\"data-type\":\"outside\",ref:u,onFocus:e=>{if(rg(e,a))f.current?.focus();else{let n=rp(i?i.domReference:null);n?.focus(),i?.closeOnFocusOut&&i?.onOpenChange(!1,e.nativeEvent,\"focus-out\")}}})]})}let rj=C.createContext(void 0);function rk(e){let{children:n,keepMounted:t=!1,container:r}=e,{mounted:o}=n0();return o||t?(0,l.jsx)(rj.Provider,{value:t,children:(0,l.jsx)(rw,{root:r,children:n})}):null}let rA=C.createContext(void 0);function rO(e,n,t){let r,{reference:o,floating:a}=e,i=nE(n),l=nO(nE(n)),s=nC(l),c=nk(n),u=\"y\"===i,d=o.x+o.width/2-a.width/2,f=o.y+o.height/2-a.height/2,p=o[s]/2-a[s]/2;switch(c){case\"top\":r={x:d,y:o.y-a.height};break;case\"bottom\":r={x:d,y:o.y+o.height};break;case\"right\":r={x:o.x+o.width,y:f};break;case\"left\":r={x:o.x-a.width,y:f};break;default:r={x:o.x,y:o.y}}switch(nA(n)){case\"start\":r[l]-=p*(t&&u?-1:1);break;case\"end\":r[l]+=p*(t&&u?-1:1)}return r}let rC=async(e,n,t)=>{let{placement:r=\"bottom\",strategy:o=\"absolute\",middleware:a=[],platform:i}=t,l=a.filter(Boolean),s=await (null==i.isRTL?void 0:i.isRTL(n)),c=await i.getElementRects({reference:e,floating:n,strategy:o}),{x:u,y:d}=rO(c,r,s),f=r,p={},h=0;for(let t=0;t<l.length;t++){let{name:a,fn:g}=l[t],{x:m,y:v,data:b,reset:y}=await g({x:u,y:d,initialPlacement:r,placement:f,strategy:o,middlewareData:p,rects:c,platform:i,elements:{reference:e,floating:n}});u=null!=m?m:u,d=null!=v?v:d,p={...p,[a]:{...p[a],...b}},y&&h<=50&&(h++,\"object\"==typeof y&&(y.placement&&(f=y.placement),y.rects&&(c=!0===y.rects?await i.getElementRects({reference:e,floating:n,strategy:o}):y.rects),{x:u,y:d}=rO(c,f,s)),t=-1)}return{x:u,y:d,placement:f,strategy:o,middlewareData:p}};async function rS(e,n){var t;void 0===n&&(n={});let{x:r,y:o,platform:a,rects:i,elements:l,strategy:s}=e,{boundary:c=\"clippingAncestors\",rootBoundary:u=\"viewport\",elementContext:d=\"floating\",altBoundary:f=!1,padding:p=0}=nj(n,e),h=nN(p),g=l[f?\"floating\"===d?\"reference\":\"floating\":d],m=nD(await a.getClippingRect({element:null==(t=await (null==a.isElement?void 0:a.isElement(g)))||t?g:g.contextElement||await (null==a.getDocumentElement?void 0:a.getDocumentElement(l.floating)),boundary:c,rootBoundary:u,strategy:s})),v=\"floating\"===d?{x:r,y:o,width:i.floating.width,height:i.floating.height}:i.reference,b=await (null==a.getOffsetParent?void 0:a.getOffsetParent(l.floating)),y=await (null==a.isElement?void 0:a.isElement(b))&&await (null==a.getScale?void 0:a.getScale(b))||{x:1,y:1},x=nD(a.convertOffsetParentRelativeRectToViewportRelativeRect?await a.convertOffsetParentRelativeRectToViewportRelativeRect({elements:l,rect:v,offsetParent:b,strategy:s}):v);return{top:(m.top-x.top+h.top)/y.y,bottom:(x.bottom-m.bottom+h.bottom)/y.y,left:(m.left-x.left+h.left)/y.x,right:(x.right-m.right+h.right)/y.x}}function rE(e,n){return{top:e.top-n.height,right:e.right-n.width,bottom:e.bottom-n.height,left:e.left-n.width}}function r_(e){return nh.some(n=>e[n]>=0)}let rP=new Set([\"left\",\"top\"]);async function rz(e,n){let{placement:t,platform:r,elements:o}=e,a=await (null==r.isRTL?void 0:r.isRTL(o.floating)),i=nk(t),l=nA(t),s=\"y\"===nE(t),c=rP.has(i)?-1:1,u=a&&s?-1:1,d=nj(n,e),{mainAxis:f,crossAxis:p,alignmentAxis:h}=\"number\"==typeof d?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return l&&\"number\"==typeof h&&(p=\"end\"===l?-1*h:h),s?{x:p*u,y:f*c}:{x:f*c,y:p*u}}function rL(e){let n=eg(e),t=parseFloat(n.width)||0,r=parseFloat(n.height)||0,o=en(e),a=o?e.offsetWidth:t,i=o?e.offsetHeight:r,l=nv(t)!==a||nv(r)!==i;return l&&(t=a,r=i),{width:t,height:r,$:l}}function rT(e){return ee(e)?e:e.contextElement}function rR(e){let n=rT(e);if(!en(n))return ny(1);let t=n.getBoundingClientRect(),{width:r,height:o,$:a}=rL(n),i=(a?nv(t.width):t.width)/r,l=(a?nv(t.height):t.height)/o;return i&&Number.isFinite(i)||(i=1),l&&Number.isFinite(l)||(l=1),{x:i,y:l}}let rN=ny(0);function rD(e){let n=Q(e);return ef()&&n.visualViewport?{x:n.visualViewport.offsetLeft,y:n.visualViewport.offsetTop}:rN}function rB(e,n,t,r){var o;void 0===n&&(n=!1),void 0===t&&(t=!1);let a=e.getBoundingClientRect(),i=rT(e),l=ny(1);n&&(r?ee(r)&&(l=rR(r)):l=rR(e));let s=(void 0===(o=t)&&(o=!1),r&&(!o||r===Q(i))&&o)?rD(i):ny(0),c=(a.left+s.x)/l.x,u=(a.top+s.y)/l.y,d=a.width/l.x,f=a.height/l.y;if(i){let e=Q(i),n=r&&ee(r)?Q(r):r,t=e,o=ey(t);for(;o&&r&&n!==t;){let e=rR(o),n=o.getBoundingClientRect(),r=eg(o),a=n.left+(o.clientLeft+parseFloat(r.paddingLeft))*e.x,i=n.top+(o.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,u*=e.y,d*=e.x,f*=e.y,c+=a,u+=i,o=ey(t=Q(o))}}return nD({width:d,height:f,x:c,y:u})}function rM(e,n){let t=em(e).scrollLeft;return n?n.left+t:rB(G(e)).left+t}function rI(e,n,t){void 0===t&&(t=!1);let r=e.getBoundingClientRect();return{x:r.left+n.scrollLeft-(t?0:rM(e,r)),y:r.top+n.scrollTop}}let rH=new Set([\"absolute\",\"fixed\"]);function rF(e,n,t){let r;if(\"viewport\"===n)r=function(e,n){let t=Q(e),r=G(e),o=t.visualViewport,a=r.clientWidth,i=r.clientHeight,l=0,s=0;if(o){a=o.width,i=o.height;let e=ef();(!e||e&&\"fixed\"===n)&&(l=o.offsetLeft,s=o.offsetTop)}return{width:a,height:i,x:l,y:s}}(e,t);else if(\"document\"===n)r=function(e){let n=G(e),t=em(e),r=e.ownerDocument.body,o=nm(n.scrollWidth,n.clientWidth,r.scrollWidth,r.clientWidth),a=nm(n.scrollHeight,n.clientHeight,r.scrollHeight,r.clientHeight),i=-t.scrollLeft+rM(e),l=-t.scrollTop;return\"rtl\"===eg(r).direction&&(i+=nm(n.clientWidth,r.clientWidth)-o),{width:o,height:a,x:i,y:l}}(G(e));else if(ee(n))r=function(e,n){let t=rB(e,!0,\"fixed\"===n),r=t.top+e.clientTop,o=t.left+e.clientLeft,a=en(e)?rR(e):ny(1),i=e.clientWidth*a.x,l=e.clientHeight*a.y;return{width:i,height:l,x:o*a.x,y:r*a.y}}(n,t);else{let t=rD(e);r={x:n.x-t.x,y:n.y-t.y,width:n.width,height:n.height}}return nD(r)}function rU(e){return\"static\"===eg(e).position}function rV(e,n){if(!en(e)||\"fixed\"===eg(e).position)return null;if(n)return n(e);let t=e.offsetParent;return G(e)===t&&(t=t.ownerDocument.body),t}function rq(e,n){var t;let r=Q(e);if(el(e))return r;if(!en(e)){let n=ev(e);for(;n&&!eh(n);){if(ee(n)&&!rU(n))return n;n=ev(n)}return r}let o=rV(e,n);for(;o&&(t=o,ea.has(K(t)))&&rU(o);)o=rV(o,n);return o&&eh(o)&&rU(o)&&!ed(o)?r:o||function(e){let n=ev(e);for(;en(n)&&!eh(n);){if(ed(n))return n;if(el(n))break;n=ev(n)}return null}(e)||r}let rW=async function(e){let n=this.getOffsetParent||rq,t=this.getDimensions,r=await t(e.floating);return{reference:function(e,n,t){let r=en(n),o=G(n),a=\"fixed\"===t,i=rB(e,!0,a,n),l={scrollLeft:0,scrollTop:0},s=ny(0);if(r||!r&&!a)if((\"body\"!==K(n)||eo(o))&&(l=em(n)),r){let e=rB(n,!0,a,n);s.x=e.x+n.clientLeft,s.y=e.y+n.clientTop}else o&&(s.x=rM(o));a&&!r&&o&&(s.x=rM(o));let c=!o||r||a?ny(0):rI(o,l);return{x:i.left+l.scrollLeft-s.x-c.x,y:i.top+l.scrollTop-s.y-c.y,width:i.width,height:i.height}}(e.reference,await n(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}},r$={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:n,rect:t,offsetParent:r,strategy:o}=e,a=\"fixed\"===o,i=G(r),l=!!n&&el(n.floating);if(r===i||l&&a)return t;let s={scrollLeft:0,scrollTop:0},c=ny(1),u=ny(0),d=en(r);if((d||!d&&!a)&&((\"body\"!==K(r)||eo(i))&&(s=em(r)),en(r))){let e=rB(r);c=rR(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}let f=!i||d||a?ny(0):rI(i,s,!0);return{width:t.width*c.x,height:t.height*c.y,x:t.x*c.x-s.scrollLeft*c.x+u.x+f.x,y:t.y*c.y-s.scrollTop*c.y+u.y+f.y}},getDocumentElement:G,getClippingRect:function(e){let{element:n,boundary:t,rootBoundary:r,strategy:o}=e,a=[...\"clippingAncestors\"===t?el(n)?[]:function(e,n){let t=n.get(e);if(t)return t;let r=eb(e,[],!1).filter(e=>ee(e)&&\"body\"!==K(e)),o=null,a=\"fixed\"===eg(e).position,i=a?ev(e):e;for(;ee(i)&&!eh(i);){let n=eg(i),t=ed(i);t||\"fixed\"!==n.position||(o=null),(a?!t&&!o:!t&&\"static\"===n.position&&!!o&&rH.has(o.position)||eo(i)&&!t&&function e(n,t){let r=ev(n);return!(r===t||!ee(r)||eh(r))&&(\"fixed\"===eg(r).position||e(r,t))}(e,i))?r=r.filter(e=>e!==i):o=n,i=ev(i)}return n.set(e,r),r}(n,this._c):[].concat(t),r],i=a[0],l=a.reduce((e,t)=>{let r=rF(n,t,o);return e.top=nm(r.top,e.top),e.right=ng(r.right,e.right),e.bottom=ng(r.bottom,e.bottom),e.left=nm(r.left,e.left),e},rF(n,i,o));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}},getOffsetParent:rq,getElementRects:rW,getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){let{width:n,height:t}=rL(e);return{width:n,height:t}},getScale:rR,isElement:ee,isRTL:function(e){return\"rtl\"===eg(e).direction}};function rZ(e,n){return e.x===n.x&&e.y===n.y&&e.width===n.width&&e.height===n.height}function rY(e,n,t,r){let o;void 0===r&&(r={});let{ancestorScroll:a=!0,ancestorResize:i=!0,elementResize:l=\"function\"==typeof ResizeObserver,layoutShift:s=\"function\"==typeof IntersectionObserver,animationFrame:c=!1}=r,u=rT(e),d=a||i?[...u?eb(u):[],...eb(n)]:[];d.forEach(e=>{a&&e.addEventListener(\"scroll\",t,{passive:!0}),i&&e.addEventListener(\"resize\",t)});let f=u&&s?function(e,n){let t,r=null,o=G(e);function a(){var e;clearTimeout(t),null==(e=r)||e.disconnect(),r=null}return!function i(l,s){void 0===l&&(l=!1),void 0===s&&(s=1),a();let c=e.getBoundingClientRect(),{left:u,top:d,width:f,height:p}=c;if(l||n(),!f||!p)return;let h=nb(d),g=nb(o.clientWidth-(u+f)),m={rootMargin:-h+\"px \"+-g+\"px \"+-nb(o.clientHeight-(d+p))+\"px \"+-nb(u)+\"px\",threshold:nm(0,ng(1,s))||1},v=!0;function b(n){let r=n[0].intersectionRatio;if(r!==s){if(!v)return i();r?i(!1,r):t=setTimeout(()=>{i(!1,1e-7)},1e3)}1!==r||rZ(c,e.getBoundingClientRect())||i(),v=!1}try{r=new IntersectionObserver(b,{...m,root:o.ownerDocument})}catch(e){r=new IntersectionObserver(b,m)}r.observe(e)}(!0),a}(u,t):null,p=-1,h=null;l&&(h=new ResizeObserver(e=>{let[r]=e;r&&r.target===u&&h&&(h.unobserve(n),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var e;null==(e=h)||e.observe(n)})),t()}),u&&!c&&h.observe(u),h.observe(n));let g=c?rB(e):null;return c&&function n(){let r=rB(e);g&&!rZ(g,r)&&t(),g=r,o=requestAnimationFrame(n)}(),t(),()=>{var e;d.forEach(e=>{a&&e.removeEventListener(\"scroll\",t),i&&e.removeEventListener(\"resize\",t)}),null==f||f(),null==(e=h)||e.disconnect(),h=null,c&&cancelAnimationFrame(o)}}let rX=e=>({name:\"arrow\",options:e,async fn(n){let{x:t,y:r,placement:o,rects:a,platform:i,elements:l,middlewareData:s}=n,{element:c,padding:u=0}=nj(e,n)||{};if(null==c)return{};let d=nN(u),f={x:t,y:r},p=nO(nE(o)),h=nC(p),g=await i.getDimensions(c),m=\"y\"===p,v=m?\"clientHeight\":\"clientWidth\",b=a.reference[h]+a.reference[p]-f[p]-a.floating[h],y=f[p]-a.reference[p],x=await (null==i.getOffsetParent?void 0:i.getOffsetParent(c)),w=x?x[v]:0;w&&await (null==i.isElement?void 0:i.isElement(x))||(w=l.floating[v]||a.floating[h]);let j=w/2-g[h]/2-1,k=ng(d[m?\"top\":\"left\"],j),A=ng(d[m?\"bottom\":\"right\"],j),O=w-g[h]-A,C=w/2-g[h]/2+(b/2-y/2),S=nm(k,ng(C,O)),E=!s.arrow&&null!=nA(o)&&C!==S&&a.reference[h]/2-(C<k?k:A)-g[h]/2<0,_=E?C<k?C-k:C-O:0;return{[p]:f[p]+_,data:{[p]:S,centerOffset:C-S-_,...E&&{alignmentOffset:_}},reset:E}}});var rK=\"undefined\"!=typeof document?C.useLayoutEffect:function(){};function rQ(e,n){let t,r,o;if(e===n)return!0;if(typeof e!=typeof n)return!1;if(\"function\"==typeof e&&e.toString()===n.toString())return!0;if(e&&n&&\"object\"==typeof e){if(Array.isArray(e)){if((t=e.length)!==n.length)return!1;for(r=t;0!=r--;)if(!rQ(e[r],n[r]))return!1;return!0}if((t=(o=Object.keys(e)).length)!==Object.keys(n).length)return!1;for(r=t;0!=r--;)if(!({}).hasOwnProperty.call(n,o[r]))return!1;for(r=t;0!=r--;){let t=o[r];if((\"_owner\"!==t||!e.$$typeof)&&!rQ(e[t],n[t]))return!1}return!0}return e!=e&&n!=n}function rG(e){return\"undefined\"==typeof window?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function rJ(e,n){let t=rG(e);return Math.round(n*t)/t}function r0(e){let n=C.useRef(e);return rK(()=>{n.current=e}),n}function r1(e,n,t){let r=\"inline-start\"===e||\"inline-end\"===e;return({top:\"top\",right:r?t?\"inline-start\":\"inline-end\":\"right\",bottom:\"bottom\",left:r?t?\"inline-end\":\"inline-start\":\"left\"})[n]}function r2(e,n,t){let{rects:r,placement:o}=e;return{side:r1(n,nk(o),t),align:nA(o)||\"center\",anchor:{width:r.reference.width,height:r.reference.height},positioner:{width:r.floating.width,height:r.floating.height}}}function r4(e){var n,t,r,o,a,i,l,s,c,u,d,f,p,h,g,m,v;let{anchor:b,positionMethod:y=\"absolute\",side:x=\"bottom\",sideOffset:w=0,align:j=\"center\",alignOffset:k=0,collisionBoundary:A,collisionPadding:O=5,sticky:S=!1,arrowPadding:_=5,trackAnchor:P=!0,keepMounted:z=!1,floatingRootContext:L,mounted:R,collisionAvoidance:N,shiftCrossAxis:D=!1,nodeId:B,adaptiveOrigin:M}=e,I=N.side||\"flip\",H=N.align||\"flip\",U=N.fallbackAxisSide||\"end\",V=\"function\"==typeof b?b:void 0,q=T(V),$=V?q:b,Z=eA(b),X=\"rtl\"===n6(),K={top:\"top\",right:\"right\",bottom:\"bottom\",left:\"left\",\"inline-end\":X?\"left\":\"right\",\"inline-start\":X?\"right\":\"left\"}[x],Q=\"center\"===j?K:`${K}-${j}`,G={boundary:\"clipping-ancestors\"===A?\"clippingAncestors\":A,padding:O},J=C.useRef(null),en=eA(w),et=eA(k),er=\"function\"!=typeof w?w:0,eo=[(n=e=>{let n=r2(e,x,X),t=\"function\"==typeof en.current?en.current(n):en.current,r=\"function\"==typeof et.current?et.current(n):et.current;return{mainAxis:t,crossAxis:r,alignmentAxis:r}},t=[er,\"function\"!=typeof k?k:0,X,x],{...(void 0===(r=n)&&(r=0),{name:\"offset\",options:r,async fn(e){var n,t;let{x:o,y:a,placement:i,middlewareData:l}=e,s=await rz(e,r);return i===(null==(n=l.offset)?void 0:n.placement)&&null!=(t=l.arrow)&&t.alignmentOffset?{}:{x:o+s.x,y:a+s.y,data:{...s,placement:i}}}}),options:[n,t]})],ea=\"none\"===H&&\"shift\"!==I,ei=!ea&&(S||D||\"shift\"===I),el=\"none\"===I?null:{...{name:\"flip\",options:i=o={...G,mainAxis:!D&&\"flip\"===I,crossAxis:\"flip\"===H&&\"alignment\",fallbackAxisSideDirection:U},async fn(e){var n,t,r,o,a;let{placement:l,middlewareData:s,rects:c,initialPlacement:u,platform:d,elements:f}=e,{mainAxis:p=!0,crossAxis:h=!0,fallbackPlacements:g,fallbackStrategy:m=\"bestFit\",fallbackAxisSideDirection:v=\"none\",flipAlignment:b=!0,...y}=nj(i,e);if(null!=(n=s.arrow)&&n.alignmentOffset)return{};let x=nk(l),w=nE(u),j=nk(u)===u,k=await (null==d.isRTL?void 0:d.isRTL(f.floating)),A=g||(j||!b?[nR(u)]:function(e){let n=nR(e);return[n_(e),n,n_(n)]}(u)),O=\"none\"!==v;!g&&O&&A.push(...function(e,n,t,r){let o=nA(e),a=function(e,n,t){switch(e){case\"top\":case\"bottom\":if(t)return n?nz:nP;return n?nP:nz;case\"left\":case\"right\":return n?nL:nT;default:return[]}}(nk(e),\"start\"===t,r);return o&&(a=a.map(e=>e+\"-\"+o),n&&(a=a.concat(a.map(n_)))),a}(u,b,v,k));let C=[u,...A],S=await rS(e,y),E=[],_=(null==(t=s.flip)?void 0:t.overflows)||[];if(p&&E.push(S[x]),h){let e=function(e,n,t){void 0===t&&(t=!1);let r=nA(e),o=nO(nE(e)),a=nC(o),i=\"x\"===o?r===(t?\"end\":\"start\")?\"right\":\"left\":\"start\"===r?\"bottom\":\"top\";return n.reference[a]>n.floating[a]&&(i=nR(i)),[i,nR(i)]}(l,c,k);E.push(S[e[0]],S[e[1]])}if(_=[..._,{placement:l,overflows:E}],!E.every(e=>e<=0)){let e=((null==(r=s.flip)?void 0:r.index)||0)+1,n=C[e];if(n&&(\"alignment\"!==h||w===nE(n)||_.every(e=>e.overflows[0]>0&&nE(e.placement)===w)))return{data:{index:e,overflows:_},reset:{placement:n}};let t=null==(o=_.filter(e=>e.overflows[0]<=0).sort((e,n)=>e.overflows[1]-n.overflows[1])[0])?void 0:o.placement;if(!t)switch(m){case\"bestFit\":{let e=null==(a=_.filter(e=>{if(O){let n=nE(e.placement);return n===w||\"y\"===n}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,n)=>e+n,0)]).sort((e,n)=>e[1]-n[1])[0])?void 0:a[0];e&&(t=e);break}case\"initialPlacement\":t=u}if(l!==t)return{reset:{placement:t}}}return{}}},options:[o,a]},es=ea?null:(l=e=>{var n,t,r;let o=eQ(e.elements.floating).documentElement;return{...G,rootBoundary:D?{x:0,y:0,width:o.clientWidth,height:o.clientHeight}:void 0,mainAxis:\"none\"!==H,crossAxis:ei,limiter:S||D?void 0:{...(void 0===(r=n=()=>{if(!J.current)return{};let{height:e}=J.current.getBoundingClientRect();return{offset:e/2+(\"number\"==typeof O?O:0)}})&&(r={}),{options:r,fn(e){let{x:n,y:t,placement:o,rects:a,middlewareData:i}=e,{offset:l=0,mainAxis:s=!0,crossAxis:c=!0}=nj(r,e),u={x:n,y:t},d=nE(o),f=nO(d),p=u[f],h=u[d],g=nj(l,e),m=\"number\"==typeof g?{mainAxis:g,crossAxis:0}:{mainAxis:0,crossAxis:0,...g};if(s){let e=\"y\"===f?\"height\":\"width\",n=a.reference[f]-a.floating[e]+m.mainAxis,t=a.reference[f]+a.reference[e]-m.mainAxis;p<n?p=n:p>t&&(p=t)}if(c){var v,b;let e=\"y\"===f?\"width\":\"height\",n=rP.has(nk(o)),t=a.reference[d]-a.floating[e]+(n&&(null==(v=i.offset)?void 0:v[d])||0)+(n?0:m.crossAxis),r=a.reference[d]+a.reference[e]+(n?0:(null==(b=i.offset)?void 0:b[d])||0)-(n?m.crossAxis:0);h<t?h=t:h>r&&(h=r)}return{[f]:p,[d]:h}}}),options:[n,t]}}},s=[G,S,D,O,H],{...(void 0===(c=l)&&(c={}),{name:\"shift\",options:c,async fn(e){let{x:n,y:t,placement:r}=e,{mainAxis:o=!0,crossAxis:a=!1,limiter:i={fn:e=>{let{x:n,y:t}=e;return{x:n,y:t}}},...l}=nj(c,e),s={x:n,y:t},u=await rS(e,l),d=nE(nk(r)),f=nO(d),p=s[f],h=s[d];if(o){let e=\"y\"===f?\"top\":\"left\",n=\"y\"===f?\"bottom\":\"right\",t=p+u[e],r=p-u[n];p=nm(t,ng(p,r))}if(a){let e=\"y\"===d?\"top\":\"left\",n=\"y\"===d?\"bottom\":\"right\",t=h+u[e],r=h-u[n];h=nm(t,ng(h,r))}let g=i.fn({...e,[f]:p,[d]:h});return{...g,data:{x:g.x-n,y:g.y-t,enabled:{[f]:o,[d]:a}}}}}),options:[l,s]});\"shift\"===I||\"shift\"===H||\"center\"===j?eo.push(es,el):eo.push(el,es),eo.push({...{name:\"size\",options:f=u={...G,apply({elements:{floating:e},rects:{reference:n},availableWidth:t,availableHeight:r}){Object.entries({\"--available-width\":`${t}px`,\"--available-height\":`${r}px`,\"--anchor-width\":`${n.width}px`,\"--anchor-height\":`${n.height}px`}).forEach(([n,t])=>{e.style.setProperty(n,t)})}},async fn(e){var n,t;let r,o,{placement:a,rects:i,platform:l,elements:s}=e,{apply:c=()=>{},...u}=nj(f,e),d=await rS(e,u),p=nk(a),h=nA(a),g=\"y\"===nE(a),{width:m,height:v}=i.floating;\"top\"===p||\"bottom\"===p?(r=p,o=h===(await (null==l.isRTL?void 0:l.isRTL(s.floating))?\"start\":\"end\")?\"left\":\"right\"):(o=p,r=\"end\"===h?\"top\":\"bottom\");let b=v-d.top-d.bottom,y=m-d.left-d.right,x=ng(v-d[r],b),w=ng(m-d[o],y),j=!e.middlewareData.shift,k=x,A=w;if(null!=(n=e.middlewareData.shift)&&n.enabled.x&&(A=y),null!=(t=e.middlewareData.shift)&&t.enabled.y&&(k=b),j&&!h){let e=nm(d.left,0),n=nm(d.right,0),t=nm(d.top,0),r=nm(d.bottom,0);g?A=m-2*(0!==e||0!==n?e+n:nm(d.left,d.right)):k=v-2*(0!==t||0!==r?t+r:nm(d.top,d.bottom))}await c({...e,availableWidth:A,availableHeight:k});let O=await l.getDimensions(s.floating);return m!==O.width||v!==O.height?{reset:{rects:!0}}:{}}},options:[u,d]},(p=()=>({element:J.current||document.createElement(\"div\"),padding:_}),h=[_],{name:\"arrow\",options:p,fn(e){let{element:n,padding:t}=p(e);return n&&({}).hasOwnProperty.call(n,\"current\")?null!=n.current?rX({element:n.current,padding:t}).fn(e):{}:n?rX({element:n,padding:t}).fn(e):{}},options:[p,h]}),{...(void 0===(v=g)&&(v={}),{name:\"hide\",options:v,async fn(e){let{rects:n}=e,{strategy:t=\"referenceHidden\",...r}=nj(v,e);switch(t){case\"referenceHidden\":{let t=rE(await rS(e,{...r,elementContext:\"reference\"}),n.reference);return{data:{referenceHiddenOffsets:t,referenceHidden:r_(t)}}}case\"escaped\":{let t=rE(await rS(e,{...r,altBoundary:!0}),n.floating);return{data:{escapedOffsets:t,escaped:r_(t)}}}default:return{}}}}),options:[g,m]},{name:\"transformOrigin\",fn(e){let{elements:n,middlewareData:t,placement:r,rects:o,y:a}=e,i=nk(r),l=nE(i),s=J.current,c=t.arrow?.x||0,u=t.arrow?.y||0,d=s?.clientWidth||0,f=s?.clientHeight||0,p=c+d/2,h=u+f/2,g=Math.abs(t.shift?.y||0),m=o.reference.height/2,v=g>(\"function\"==typeof w?w(r2(e,x,X)):w),b={top:`${p}px calc(100% + ${w}px)`,bottom:`${p}px ${-w}px`,left:`calc(100% + ${w}px) ${h}px`,right:`${-w}px ${h}px`}[i],y=`${p}px ${o.reference.y+m-a}px`;return n.floating.style.setProperty(\"--transform-origin\",ei&&\"y\"===l&&v?y:b),{}}},M);let ec=L;!R&&L&&(ec={...L,elements:{reference:null,floating:null,domReference:null}});let eu=C.useMemo(()=>({elementResize:P&&\"undefined\"!=typeof ResizeObserver,layoutShift:P&&\"undefined\"!=typeof IntersectionObserver}),[P]),{refs:ed,elements:ef,x:ep,y:eh,middlewareData:eg,update:em,placement:ev,context:eb,isPositioned:ey,floatingStyles:ex}=function(e={}){let{nodeId:n}=e,t=Y({...e,elements:{reference:null,floating:null,...e.elements}}),r=e.rootContext||t,o=r.elements,[a,i]=C.useState(null),[l,s]=C.useState(null),c=o?.domReference||a,u=C.useRef(null),d=W();F(()=>{c&&(u.current=c)},[c]);let f=function(e){void 0===e&&(e={});let{placement:n=\"bottom\",strategy:t=\"absolute\",middleware:r=[],platform:o,elements:{reference:a,floating:i}={},transform:l=!0,whileElementsMounted:s,open:c}=e,[u,d]=C.useState({x:0,y:0,strategy:t,placement:n,middlewareData:{},isPositioned:!1}),[f,p]=C.useState(r);rQ(f,r)||p(r);let[h,g]=C.useState(null),[m,v]=C.useState(null),b=C.useCallback(e=>{e!==j.current&&(j.current=e,g(e))},[]),y=C.useCallback(e=>{e!==k.current&&(k.current=e,v(e))},[]),x=a||h,w=i||m,j=C.useRef(null),k=C.useRef(null),A=C.useRef(u),O=null!=s,S=r0(s),_=r0(o),P=r0(c),z=C.useCallback(()=>{if(!j.current||!k.current)return;let e={placement:n,strategy:t,middleware:f};_.current&&(e.platform=_.current),((e,n,t)=>{let r=new Map,o={platform:r$,...t},a={...o.platform,_c:r};return rC(e,n,{...o,platform:a})})(j.current,k.current,e).then(e=>{let n={...e,isPositioned:!1!==P.current};L.current&&!rQ(A.current,n)&&(A.current=n,E.flushSync(()=>{d(n)}))})},[f,n,t,_,P]);rK(()=>{!1===c&&A.current.isPositioned&&(A.current.isPositioned=!1,d(e=>({...e,isPositioned:!1})))},[c]);let L=C.useRef(!1);rK(()=>(L.current=!0,()=>{L.current=!1}),[]),rK(()=>{if(x&&(j.current=x),w&&(k.current=w),x&&w){if(S.current)return S.current(x,w,z);z()}},[x,w,z,S,O]);let T=C.useMemo(()=>({reference:j,floating:k,setReference:b,setFloating:y}),[b,y]),R=C.useMemo(()=>({reference:x,floating:w}),[x,w]),N=C.useMemo(()=>{let e={position:t,left:0,top:0};if(!R.floating)return e;let n=rJ(R.floating,u.x),r=rJ(R.floating,u.y);return l?{...e,transform:\"translate(\"+n+\"px, \"+r+\"px)\",...rG(R.floating)>=1.5&&{willChange:\"transform\"}}:{position:t,left:n,top:r}},[t,l,R.floating,u.x,u.y]);return C.useMemo(()=>({...u,update:z,refs:T,elements:R,floatingStyles:N}),[u,z,T,R,N])}({...e,elements:{...o,...l&&{reference:l}}}),p=C.useCallback(e=>{let n=ee(e)?{getBoundingClientRect:()=>e.getBoundingClientRect(),getClientRects:()=>e.getClientRects(),contextElement:e}:e;s(n),f.refs.setReference(n)},[f.refs]),h=C.useCallback(e=>{(ee(e)||null===e)&&(u.current=e,i(e)),(ee(f.refs.reference.current)||null===f.refs.reference.current||null!==e&&!ee(e))&&f.refs.setReference(e)},[f.refs]),g=C.useMemo(()=>({...f.refs,setReference:h,setPositionReference:p,domReference:u}),[f.refs,h,p]),m=C.useMemo(()=>({...f.elements,domReference:c}),[f.elements,c]),v=C.useMemo(()=>({...f,...r,refs:g,elements:m,nodeId:n}),[f,g,m,n,r]);return F(()=>{r.dataRef.current.floatingContext=v;let e=d?.nodesRef.current.find(e=>e.id===n);e&&(e.context=v)}),C.useMemo(()=>({...f,context:v,refs:g,elements:m}),[f,g,m,v])}({rootContext:ec,placement:Q,middleware:eo,strategy:y,whileElementsMounted:z?void 0:(...e)=>rY(...e,eu),nodeId:B}),{sideX:ew,sideY:ej}=eg.adaptiveOrigin||{},ek=C.useMemo(()=>M?{position:y,[ew]:`${ep}px`,[ej]:`${eh}px`}:ex,[M,ew,ej,y,ep,eh,ex]),eO=C.useRef(null);F(()=>{if(!R)return;let e=Z.current,n=\"function\"==typeof e?e():e,t=(r5(n)?n.current:n)||null;t!==eO.current&&(ed.setPositionReference(t),eO.current=t)},[R,ed,$,Z]),C.useEffect(()=>{if(!R)return;let e=Z.current;\"function\"!=typeof e&&r5(e)&&e.current!==eO.current&&(ed.setPositionReference(e.current),eO.current=e.current)},[R,ed,$,Z]),C.useEffect(()=>{if(z&&R&&ef.domReference&&ef.floating)return rY(ef.domReference,ef.floating,em,eu)},[z,R,ef,em,eu]);let eC=r1(x,nk(ev),X),eS=nA(ev)||\"center\",eE=!!eg.hide?.referenceHidden,e_=C.useMemo(()=>({position:\"absolute\",top:eg.arrow?.y,left:eg.arrow?.x}),[eg.arrow]),eP=eg.arrow?.centerOffset!==0;return C.useMemo(()=>({positionerStyles:ek,arrowStyles:e_,arrowRef:J,arrowUncentered:eP,side:eC,align:eS,anchorHidden:eE,refs:ed,context:eb,isPositioned:ey,update:em}),[ek,e_,J,eP,eC,eS,eE,ed,eb,ey,em])}function r5(e){return null!=e&&\"current\"in e}function r3(e){let{children:n,elementsRef:t,labelsRef:r,onMapChange:o}=e,a=C.useRef(0),i=P(r9).current,s=P(r6).current,[c,u]=C.useState(0),d=C.useRef(c),f=T((e,n)=>{s.set(e,n??null),d.current+=1,u(d.current)}),p=T(e=>{s.delete(e),d.current+=1,u(d.current)}),h=C.useMemo(()=>{let e=new Map;return Array.from(s.keys()).sort(r8).forEach((n,t)=>{let r=s.get(n)??{};e.set(n,{...r,index:t})}),e},[s,c]);F(()=>{d.current===c&&(t.current.length!==h.size&&(t.current.length=h.size),r&&r.current.length!==h.size&&(r.current.length=h.size)),o?.(h)},[o,h,t,r,c,d]);let g=T(e=>(i.add(e),()=>{i.delete(e)}));F(()=>{i.forEach(e=>e(h))},[i,h]);let m=C.useMemo(()=>({register:f,unregister:p,subscribeMapChange:g,elementsRef:t,labelsRef:r,nextIndexRef:a}),[f,p,g,t,r,a]);return(0,l.jsx)(tC.Provider,{value:m,children:n})}function r6(){return new Map}function r9(){return new Set}function r8(e,n){let t=e.compareDocumentPosition(n);return t&Node.DOCUMENT_POSITION_FOLLOWING||t&Node.DOCUMENT_POSITION_CONTAINED_BY?-1:t&Node.DOCUMENT_POSITION_PRECEDING||t&Node.DOCUMENT_POSITION_CONTAINS?1:0}let r7=C.forwardRef(function(e,n){let t,{cutout:r,...o}=e;if(r){let e=r?.getBoundingClientRect();t=`polygon(\n      0% 0%,\n      100% 0%,\n      100% 100%,\n      0% 100%,\n      0% 0%,\n      ${e.left}px ${e.top}px,\n      ${e.left}px ${e.bottom}px,\n      ${e.right}px ${e.bottom}px,\n      ${e.right}px ${e.top}px,\n      ${e.left}px ${e.top}px\n    )`}return(0,l.jsx)(\"div\",{ref:n,role:\"presentation\",\"data-base-ui-inert\":\"\",...o,style:{position:\"fixed\",inset:0,userSelect:\"none\",WebkitUserSelect:\"none\",clipPath:t}})}),oe=C.forwardRef(function(e,n){var t;let{anchor:r,positionMethod:o=\"absolute\",className:a,render:i,side:s,align:c,sideOffset:u=0,alignOffset:d=0,collisionBoundary:f=\"clipping-ancestors\",collisionPadding:p=5,arrowPadding:h=5,sticky:g=!1,trackAnchor:m=!0,collisionAvoidance:v=no,...b}=e,{open:y,setOpen:x,floatingRootContext:w,setPositionerElement:j,itemDomElements:k,itemLabels:A,mounted:O,modal:S,lastOpenChangeReason:E,parent:_,setHoverEnabled:P,triggerElement:z}=n0(),L=function(){let e=C.useContext(rj);if(void 0===e)throw Error(\"Base UI: <Menu.Portal> is missing.\");return e}(),T=function(e){let n=H(),t=W(),r=q();return F(()=>{if(!n)return;let e={id:n,parentId:r};return t?.addNode(e),()=>{t?.removeNode(e)}},[t,n,r]),n}(),R=q(),N=ta(!0),D=r,B=u,M=d,I=c;\"context-menu\"===_.type&&(D=_.context?.anchor??r,I=e.align??\"start\",M=e.alignOffset??2,B=e.sideOffset??-5);let U=s,V=I;\"menu\"===_.type?(U=U??\"inline-end\",V=V??\"start\"):\"menubar\"===_.type&&(U=U??\"bottom\",V=V??\"start\");let Z=\"context-menu\"===_.type,Y=r4({anchor:D,floatingRootContext:w,positionMethod:N?\"fixed\":o,mounted:O,side:U,sideOffset:B,align:V,alignOffset:M,arrowPadding:Z?0:h,collisionBoundary:f,collisionPadding:p,sticky:g,nodeId:T,keepMounted:L,trackAnchor:m,collisionAvoidance:v,shiftCrossAxis:Z}),{events:X}=W(),K=C.useMemo(()=>{let e={};return y||(e.pointerEvents=\"none\"),{role:\"presentation\",hidden:!O,style:{...Y.positionerStyles,...e}}},[y,O,Y.positionerStyles]);C.useEffect(()=>{function e(e){e.open?(e.parentNodeId===T&&P(!1),e.nodeId!==T&&e.parentNodeId===R&&x(!1,void 0,\"sibling-open\")):e.parentNodeId===T&&P(!0)}return X.on(\"openchange\",e),()=>{X.off(\"openchange\",e)}},[X,T,R,x,P]),C.useEffect(()=>{X.emit(\"openchange\",{open:y,nodeId:T,parentNodeId:R})},[X,y,T,R]);let Q=C.useMemo(()=>({open:y,side:Y.side,align:Y.align,anchorHidden:Y.anchorHidden,nested:\"menu\"===_.type}),[y,Y.side,Y.align,Y.anchorHidden,_.type]),G=C.useMemo(()=>({side:Y.side,align:Y.align,arrowRef:Y.arrowRef,arrowUncentered:Y.arrowUncentered,arrowStyles:Y.arrowStyles,floatingContext:Y.context}),[Y.side,Y.align,Y.arrowRef,Y.arrowUncentered,Y.arrowStyles,Y.context]),J=tj(\"div\",e,{state:Q,customStyleHookMapping:tV,ref:[n,j],props:{...K,...b}}),ee=O&&\"menu\"!==_.type&&(\"menubar\"!==_.type&&S&&\"trigger-hover\"!==E||\"menubar\"===_.type&&_.context.modal),en=null;return\"menubar\"===_.type?en=_.context.contentElement:void 0===_.type&&(en=z),(0,l.jsxs)(rA.Provider,{value:G,children:[ee&&(0,l.jsx)(r7,{ref:\"context-menu\"===_.type||\"nested-context-menu\"===_.type?_.context.internalBackdropRef:null,inert:(t=!y,tw>=19?t:t?\"true\":void 0),cutout:en}),(0,l.jsx)($,{id:T,children:(0,l.jsx)(r3,{elementsRef:k,labelsRef:A,children:J})})]})}),on={inert:new WeakMap,\"aria-hidden\":new WeakMap,none:new WeakMap};function ot(e){return\"inert\"===e?on.inert:\"aria-hidden\"===e?on[\"aria-hidden\"]:on.none}let or=new WeakSet,oo={},oa=0,oi=e=>e&&(e.host||oi(e.parentNode));function ol(e,n=!1,t=!1){let r=eQ(e[0]).body;return function(e,n,t,r){let o=\"data-base-ui-inert\",a=r?\"inert\":t?\"aria-hidden\":null,i=e.map(e=>{if(n.contains(e))return e;let t=oi(e);return n.contains(t)?t:null}).filter(e=>null!=e),l=new Set,s=new Set(i),c=[];oo[o]||(oo[o]=new WeakMap);let u=oo[o];return i.forEach(function e(n){!(!n||l.has(n))&&(l.add(n),n.parentNode&&e(n.parentNode))}),function e(n){!n||s.has(n)||[].forEach.call(n.children,n=>{if(\"script\"!==K(n))if(l.has(n))e(n);else{let e=a?n.getAttribute(a):null,t=null!==e&&\"false\"!==e,r=ot(a),i=(r.get(n)||0)+1,l=(u.get(n)||0)+1;r.set(n,i),u.set(n,l),c.push(n),1===i&&t&&or.add(n),1===l&&n.setAttribute(o,\"\"),!t&&a&&n.setAttribute(a,\"inert\"===a?\"\":\"true\")}})}(n),l.clear(),oa+=1,()=>{c.forEach(e=>{let n=ot(a),t=(n.get(e)||0)-1,r=(u.get(e)||0)-1;n.set(e,t),u.set(e,r),t||(!or.has(e)&&a&&e.removeAttribute(a),or.delete(e)),r||e.removeAttribute(o)}),(oa-=1)||(on.inert=new WeakMap,on[\"aria-hidden\"]=new WeakMap,on.none=new WeakMap,or=new WeakSet,oo={})}}(e.concat(Array.from(r.querySelectorAll(\"[aria-live]\"))),r,n,t)}let os=[];function oc(){return os.slice().reverse().find(e=>e.isConnected)}function ou(e,n){if(!n.current.includes(\"floating\")&&!e.getAttribute(\"role\")?.includes(\"dialog\"))return;let t=rd(),r=rc(e,t).filter(e=>{let n=e.getAttribute(\"data-tabindex\")||\"\";return ru(e,t)||e.hasAttribute(\"data-tabindex\")&&!n.startsWith(\"-\")}),o=e.getAttribute(\"tabindex\");n.current.includes(\"floating\")||0===r.length?\"0\"!==o&&e.setAttribute(\"tabindex\",\"0\"):(\"-1\"!==o||e.hasAttribute(\"data-tabindex\")&&\"-1\"!==e.getAttribute(\"data-tabindex\"))&&(e.setAttribute(\"tabindex\",\"-1\"),e.setAttribute(\"data-tabindex\",\"-1\"))}let od=C.forwardRef(function(e,n){return(0,l.jsx)(\"button\",{...e,type:\"button\",ref:n,tabIndex:-1,style:t$})});function of(e){let{context:n,children:t,disabled:r=!1,order:o=[\"content\"],guards:a=!0,initialFocus:i=0,returnFocus:s=!0,restoreFocus:c=!1,modal:u=!0,visuallyHiddenDismiss:d=!1,closeOnFocusOut:f=!0,outsideElementsInert:p=!1,getInsideElements:h=()=>[]}=e,{open:g,onOpenChange:m,events:v,dataRef:b,elements:{domReference:y,floating:x}}=n,w=T(()=>b.current.floatingContext?.nodeId),j=T(h),k=\"number\"==typeof i&&i<0,A=eJ(y)&&k,O=\"undefined\"!=typeof HTMLElement&&\"inert\"in HTMLElement.prototype,S=!O||a,E=!S||O&&p,_=eA(o),P=eA(i),z=eA(s),L=W(),R=rb(),N=C.useRef(null),D=C.useRef(null),B=C.useRef(!1),M=C.useRef(!1),I=C.useRef(-1),H=null!=R,U=e0(x),V=T((e=U)=>e?rs(e,rd()):[]),q=T(e=>{let n=V(e);return _.current.map(e=>y&&\"reference\"===e?y:U&&\"floating\"===e?U:n).filter(Boolean).flat()});C.useEffect(()=>{if(r||!u)return;function e(e){if(\"Tab\"===e.key){eY(U,eZ(eQ(U)))&&0===V().length&&!A&&eD(e);let n=q(),t=eX(e);\"reference\"===_.current[0]&&t===y&&(eD(e),e.shiftKey?nq(n[n.length-1]):nq(n[1])),\"floating\"===_.current[1]&&t===U&&e.shiftKey&&(eD(e),nq(n[0]))}}let n=eQ(U);return n.addEventListener(\"keydown\",e),()=>{n.removeEventListener(\"keydown\",e)}},[r,y,U,u,_,A,V,q]),C.useEffect(()=>{if(!r&&x)return x.addEventListener(\"focusin\",e),()=>{x.removeEventListener(\"focusin\",e)};function e(e){let n=eX(e),t=V().indexOf(n);-1!==t&&(I.current=t)}},[r,x,V]),C.useEffect(()=>{if(!r&&f&&x&&en(y))return y.addEventListener(\"focusout\",n),y.addEventListener(\"pointerdown\",e),x.addEventListener(\"focusout\",n),()=>{y.removeEventListener(\"focusout\",n),y.removeEventListener(\"pointerdown\",e),x.removeEventListener(\"focusout\",n)};function e(){M.current=!0,setTimeout(()=>{M.current=!1})}function n(e){let n=e.relatedTarget,t=e.currentTarget,r=eX(e);queueMicrotask(()=>{let o=w(),a=!(eY(y,n)||eY(x,n)||eY(n,x)||eY(R?.portalNode,n)||n?.hasAttribute(e1(\"focus-guard\"))||L&&(e6(L.nodesRef.current,o).find(e=>eY(e.context?.elements.floating,n)||eY(e.context?.elements.domReference,n))||e9(L.nodesRef.current,o).find(e=>[e.context?.elements.floating,e0(e.context?.elements.floating)].includes(n)||e.context?.elements.domReference===n)));if(t===y&&U&&ou(U,_),c&&t!==y&&!r?.isConnected&&eZ(eQ(U))===eQ(U).body){en(U)&&U.focus();let e=I.current,n=V(),t=n[e]||n[n.length-1]||U;en(t)&&t.focus()}if(b.current.insideReactTree){b.current.insideReactTree=!1;return}(A||!u)&&n&&a&&!M.current&&n!==oc()&&(B.current=!0,m(!1,e,\"focus-out\"))})}},[r,y,x,U,u,L,R,m,f,c,V,A,w,_,b]);let $=C.useRef(null),Z=C.useRef(null),Y=tb($,R?.beforeInsideRef),X=tb(Z,R?.afterInsideRef);function Q(e){return!r&&d&&u?(0,l.jsx)(od,{ref:\"start\"===e?N:D,onClick:e=>m(!1,e.nativeEvent),children:\"string\"==typeof d?d:\"Dismiss\"}):null}C.useEffect(()=>{if(r||!x)return;let e=Array.from(R?.portalNode?.querySelectorAll(`[${e1(\"portal\")}]`)||[]),n=L?e9(L.nodesRef.current,w()):[],t=L&&!u?n.map(e=>e.context?.elements.floating):[],o=[x,n.find(e=>eJ(e.context?.elements.domReference||null))?.context?.elements.domReference,...e,...t,...j(),N.current,D.current,$.current,Z.current,R?.beforeOutsideRef.current,R?.afterOutsideRef.current,_.current.includes(\"reference\")||A?y:null].filter(e=>null!=e),a=u||A?ol(o,!E,E):ol(o);return()=>{a()}},[r,y,x,u,_,R,A,S,E,L,w,j]),F(()=>{if(r||!en(U))return;let e=eZ(eQ(U));queueMicrotask(()=>{let n=q(U),t=P.current,r=(\"number\"==typeof t?n[t]:t.current)||U,o=eY(U,e);k||o||!g||nq(r,{preventScroll:r===U})})},[r,g,U,k,q,P]),F(()=>{var e;if(r||!U)return;let n=eQ(U);function t({reason:e,event:n,nested:t}){if([\"hover\",\"safe-polygon\"].includes(e)&&\"mouseleave\"===n.type&&(B.current=!0),\"outside-press\"===e)if(t)B.current=!1;else if(eB(n)||eM(n))B.current=!1;else{let e=!1;document.createElement(\"div\").focus({get preventScroll(){return e=!0,!1}}),e?B.current=!1:B.current=!0}}e=eZ(n),os=os.filter(e=>e.isConnected),e&&\"body\"!==K(e)&&(os.push(e),os.length>20&&(os=os.slice(-20))),v.on(\"openchange\",t);let o=n.createElement(\"span\");return o.setAttribute(\"tabindex\",\"-1\"),o.setAttribute(\"aria-hidden\",\"true\"),Object.assign(o.style,t$),H&&y&&y.insertAdjacentElement(\"afterend\",o),()=>{v.off(\"openchange\",t);let e=eZ(n),r=eY(x,e)||L&&e6(L.nodesRef.current,w(),!1).some(n=>eY(n.context?.elements.floating,e)),a=function(){if(\"boolean\"==typeof z.current){let e=y||oc();return e&&e.isConnected?e:o}return z.current.current||o}();queueMicrotask(()=>{let t=function(e){let n=rd();return ru(e,n)?e:rs(e,n)[0]||e}(a);z.current&&!B.current&&en(t)&&(t===e||e===n.body||r)&&t.focus({preventScroll:!0}),o.remove()})}},[r,x,U,z,b,v,L,H,y,w]),C.useEffect(()=>{queueMicrotask(()=>{B.current=!1})},[r]),F(()=>{if(!r&&R)return R.setFocusManagerState({modal:u,closeOnFocusOut:f,open:g,onOpenChange:m,domReference:y}),()=>{R.setFocusManagerState(null)}},[r,R,u,g,m,f,y]),F(()=>{!r&&U&&ou(U,_)},[r,U,_]);let G=!r&&S&&(!u||!A)&&(H||u);return(0,l.jsxs)(C.Fragment,{children:[G&&(0,l.jsx)(tZ,{\"data-type\":\"inside\",ref:Y,onFocus:e=>{if(u){let e=q();nq(\"reference\"===o[0]?e[0]:e[e.length-1])}else if(R?.preserveTabOrder&&R.portalNode)if(B.current=!1,rg(e,R.portalNode)){let e=rp(y);e?.focus()}else R.beforeOutsideRef.current?.focus()}}),!A&&Q(\"start\"),t,Q(\"end\"),G&&(0,l.jsx)(tZ,{\"data-type\":\"inside\",ref:X,onFocus:e=>{if(u)nq(q()[0]);else if(R?.preserveTabOrder&&R.portalNode)if(f&&(B.current=!0),rg(e,R.portalNode)){let e=rh(y);e?.focus()}else R.afterOutsideRef.current?.focus()}})]})}let op={...tV,...tT},oh=C.forwardRef(function(e,n){let{render:t,className:r,finalFocus:o,...a}=e,{open:i,setOpen:s,popupRef:c,transitionStatus:u,popupProps:d,mounted:f,instantType:p,onOpenChangeComplete:h,parent:g,lastOpenChangeReason:m,rootId:v}=n0(),{side:b,align:y,floatingContext:x}=function(){let e=C.useContext(rA);if(void 0===e)throw Error(\"Base UI: MenuPositionerContext is missing. MenuPositioner parts must be placed within <Menu.Positioner>.\");return e}();n5({open:i,ref:c,onComplete(){i&&h?.(!0)}});let{events:w}=W();C.useEffect(()=>{function e(e){s(!1,e.domEvent,e.reason)}return w.on(\"close\",e),()=>{w.off(\"close\",e)}},[w,s]);let j=tj(\"div\",e,{state:C.useMemo(()=>({transitionStatus:u,side:b,align:y,open:i,nested:\"menu\"===g.type,instant:p}),[u,b,y,i,g.type,p]),ref:[n,c],customStyleHookMapping:op,props:[d,\"starting\"===u?nt:nr,a,{\"data-rootownerid\":v}]}),k=void 0===g.type||\"context-menu\"===g.type;return\"menubar\"===g.type&&\"outside-press\"!==m&&(k=!0),(0,l.jsx)(of,{context:x,modal:!1,disabled:!f,returnFocus:o||k,initialFocus:\"menu\"===g.type?-1:0,restoreFocus:!0,children:j})}),og=C.createContext(void 0),om=C.forwardRef(function(e,n){let{render:t,className:r,...o}=e,[a,i]=C.useState(void 0),s=C.useMemo(()=>({setLabelId:i}),[i]),c=tj(\"div\",e,{ref:n,props:{role:\"group\",\"aria-labelledby\":a,...o}});return(0,l.jsx)(og.Provider,{value:s,children:c})});function ov(e){return H(e,\"base-ui\")}let ob=C.forwardRef(function(e,n){let{className:t,render:r,id:o,...a}=e,i=ov(o),{setLabelId:l}=function(){let e=C.useContext(og);if(void 0===e)throw Error(\"Base UI: MenuGroupRootContext is missing. Menu group parts must be used within <Menu.Group>.\");return e}();return F(()=>(l(i),()=>{l(void 0)}),[l,i]),tj(\"div\",e,{ref:n,props:{id:i,role:\"presentation\",...a}})}),oy={type:\"regular-item\"},ox=C.memo(C.forwardRef(function(e,n){let{className:t,closeOnClick:r=!0,disabled:o=!1,highlighted:a,id:i,menuEvents:l,itemProps:s,render:c,allowMouseUpTriggerRef:u,typingRef:d,nativeButton:f,...p}=e,{getItemProps:h,itemRef:g}=function(e){let{closeOnClick:n,disabled:t=!1,highlighted:r,id:o,menuEvents:a,allowMouseUpTriggerRef:i,typingRef:l,nativeButton:s,itemMetadata:c}=e,u=C.useRef(null),{getButtonProps:d,buttonRef:f}=tq({disabled:t,focusableWhenDisabled:!0,native:s}),p=C.useCallback(e=>tc({id:o,role:\"menuitem\",tabIndex:r?0:-1,onMouseEnter(){\"submenu-trigger\"===c.type&&c.setActive()},onKeyUp:e=>{\" \"===e.key&&l.current&&e.preventBaseUIHandler()},onClick:e=>{n&&a.emit(\"close\",{domEvent:e,reason:\"item-press\"})},onMouseUp:()=>{u.current&&i.current&&\"regular-item\"===c.type&&u.current.click()}},e,d),[o,r,d,l,n,a,i,c]),h=tb(u,f);return C.useMemo(()=>({getItemProps:p,itemRef:h}),[p,h])}({closeOnClick:r,disabled:o,highlighted:a,id:i,menuEvents:l,allowMouseUpTriggerRef:u,typingRef:d,nativeButton:f,itemMetadata:oy});return tj(\"div\",e,{state:C.useMemo(()=>({disabled:o,highlighted:a}),[o,a]),ref:[g,n],props:[s,p,h]})})),ow=C.forwardRef(function(e,n){let{id:t,label:r,nativeButton:o=!1,...a}=e,i=C.useRef(null),s=tE({label:r}),c=tb(n,s.ref,i),{itemProps:u,activeIndex:d,allowMouseUpTriggerRef:f,typingRef:p}=n0(),h=ov(t),g=s.index===d,{events:m}=W();return(0,l.jsx)(ox,{...a,id:h,ref:c,highlighted:g,menuEvents:m,itemProps:u,allowMouseUpTriggerRef:f,typingRef:p,nativeButton:o})});var oj=\"__next_builtin__\";function ok(e){return e.replace(new RegExp(\"^\".concat(oj)),\"\").replace(new RegExp(\"\".concat(\"@boundary\",\"$\")),\"\")}var oA=\"boundary:\";function oO(e){return e.startsWith(oA)}var oC=t(\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/utils.ts\");function oS(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function oE(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r;r=t[n],n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r})}return e}function o_(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function oP(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return oS(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return oS(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var oz=function(){for(var e=arguments.length,n=Array(e),t=0;t<e;t++)n[t]=arguments[t];return function(e){n.forEach(function(n){\"function\"==typeof n?n(e):n&&(n.current=e)})}};function oL(e){var n,t,r=e.nodeState,o=e.boundaries,a=r.pagePath,i=r.boundaryType,s=r.setBoundaryType,c=oP((0,C.useState)(!1),2),u=c[0],d=c[1],f=oP((0,C.useState)(function(){return document.querySelector(\"nextjs-portal\").shadowRoot}),1)[0],p=(0,C.useRef)(f),h=(0,C.useRef)(null),g=(0,C.useRef)(null);(0,oC.O8)(g,h,u,function(){d(!1)},null==(n=h.current)?void 0:n.ownerDocument);var m=Object.values(o).find(function(e){return null!==e}),v=m?null==(t=m.split(\".\"))?void 0:t.pop():\"js\",b=(0,C.useMemo)(function(){return Object.fromEntries(Object.entries(o).map(function(e){var n=oP(e,2),t=n[0],r=ok((n[1]||\"\").split(\"/\").pop()||\"\".concat(t,\".\").concat(v));return[t,r]}))},[o,v]),y=(a||\"\").split(\"/\").pop()||\"\",x=ok(i?\"page.\".concat(v):y||\"page.\".concat(v)),w=[{label:b.loading,value:\"loading\",icon:(0,l.jsx)(oT,{}),disabled:!o.loading},{label:b.error,value:\"error\",icon:(0,l.jsx)(oR,{}),disabled:!o.error},{label:b[\"not-found\"],value:\"not-found\",icon:(0,l.jsx)(oN,{}),disabled:!o[\"not-found\"]}],j={label:i?\"Reset\":x,value:\"reset\",icon:(0,l.jsx)(oD,{}),disabled:null===i},k=(0,C.useCallback)(function(e){var n=new URLSearchParams({file:e.filePath,isAppRelativePath:\"1\"});fetch(\"\".concat( false||\"\",\"/__nextjs_launch-editor?\").concat(n.toString())).catch(console.warn)},[]),A=(0,C.useCallback)(function(e){switch(e){case\"not-found\":case\"loading\":case\"error\":s(e);break;case\"reset\":s(null);break;case\"open-editor\":a&&k({filePath:a})}},[s,a,k]),O=(0,C.useMemo)(function(){return\"layout\"!==r.type&&\"template\"!==r.type&&Object.values(o).some(function(e){return null!==e})},[r.type,o]);return(0,l.jsxs)(tv,{delay:0,modal:!1,open:u,onOpenChange:d,children:[(0,l.jsx)(tW,{className:\"segment-boundary-trigger\",\"data-nextjs-dev-overlay-segment-boundary-trigger-button\":!0,render:function(e){var n=oz(e.ref,h);return(0,l.jsx)(oM,o_(oE({},e),{ref:n}))},disabled:!O}),(0,l.jsx)(rk,{container:p,children:(0,l.jsx)(oe,{className:\"segment-boundary-dropdown-positioner\",side:\"bottom\",align:\"center\",sideOffset:6,arrowPadding:8,ref:g,children:(0,l.jsxs)(oh,{className:\"segment-boundary-dropdown\",children:[(0,l.jsxs)(om,{children:[(0,l.jsx)(ob,{className:\"segment-boundary-group-label\",children:\"Toggle Overrides\"}),w.map(function(e){return(0,l.jsxs)(ow,{className:\"segment-boundary-dropdown-item\",onClick:function(){return A(e.value)},disabled:e.disabled,children:[e.icon,e.label]},e.value)})]}),(0,l.jsx)(om,{children:(0,l.jsxs)(ow,{className:\"segment-boundary-dropdown-item\",onClick:function(){return A(j.value)},disabled:j.disabled,children:[j.icon,j.label]},j.value)})]})})})]})}function oT(){return(0,l.jsxs)(\"svg\",{width:\"20px\",height:\"20px\",viewBox:\"0 0 20 20\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:[(0,l.jsx)(\"g\",{clipPath:\"url(#clip0_2759_1866)\",children:(0,l.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M10 3.5C13.5899 3.5 16.5 6.41015 16.5 10C16.5 13.5899 13.5899 16.5 10 16.5C6.41015 16.5 3.5 13.5899 3.5 10C3.5 6.41015 6.41015 3.5 10 3.5ZM2 10C2 14.4183 5.58172 18 10 18C14.4183 18 18 14.4183 18 10C18 5.58172 14.4183 2 10 2C5.58172 2 2 5.58172 2 10ZM10.75 9.62402V6H9.25V9.875C9.25 10.1898 9.39858 10.486 9.65039 10.6748L11.5498 12.0996L12.1504 12.5498L13.0498 11.3496L12.4502 10.9004L10.75 9.62402Z\",fill:\"currentColor\"})}),(0,l.jsx)(\"defs\",{children:(0,l.jsx)(\"clipPath\",{id:\"clip0_2759_1866\",children:(0,l.jsx)(\"rect\",{width:\"16\",height:\"16\",fill:\"white\",transform:\"translate(2 2)\"})})})]})}function oR(){return(0,l.jsxs)(\"svg\",{width:\"20\",height:\"20\",viewBox:\"0 0 20 20\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:[(0,l.jsx)(\"g\",{clipPath:\"url(#clip0_2759_1881)\",children:(0,l.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M3.5 7.30762V12.6924L7.30762 16.5H12.6924L16.5 12.6924V7.30762L12.6924 3.5H7.30762L3.5 7.30762ZM18 12.8994L17.9951 12.998C17.9724 13.2271 17.8712 13.4423 17.707 13.6064L13.6064 17.707L13.5332 17.7734C13.3806 17.8985 13.1944 17.9757 12.998 17.9951L12.8994 18H7.10059L7.00195 17.9951C6.80562 17.9757 6.6194 17.8985 6.4668 17.7734L6.39355 17.707L2.29297 13.6064C2.12883 13.4423 2.02756 13.2271 2.00488 12.998L2 12.8994V7.10059C2 6.83539 2.10546 6.58109 2.29297 6.39355L6.39355 2.29297C6.55771 2.12883 6.77294 2.02756 7.00195 2.00488L7.10059 2H12.8994L12.998 2.00488C13.2271 2.02756 13.4423 2.12883 13.6064 2.29297L17.707 6.39355C17.8945 6.58109 18 6.83539 18 7.10059V12.8994ZM9.25 5.75H10.75L10.75 10.75H9.25L9.25 5.75ZM10 14C10.5523 14 11 13.5523 11 13C11 12.4477 10.5523 12 10 12C9.44772 12 9 12.4477 9 13C9 13.5523 9.44772 14 10 14Z\",fill:\"currentColor\"})}),(0,l.jsx)(\"defs\",{children:(0,l.jsx)(\"clipPath\",{id:\"clip0_2759_1881\",children:(0,l.jsx)(\"rect\",{width:\"16\",height:\"16\",fill:\"white\",transform:\"translate(2 2)\"})})})]})}function oN(){return(0,l.jsx)(\"svg\",{width:\"20px\",height:\"20px\",viewBox:\"0 0 20 20\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,l.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M10.5586 2.5C11.1341 2.50004 11.6588 2.8294 11.9091 3.34766L17.8076 15.5654C18.1278 16.2292 17.6442 16.9997 16.9072 17H3.09274C2.35574 16.9997 1.8721 16.2292 2.19235 15.5654L8.09079 3.34766C8.34109 2.8294 8.86583 2.50004 9.44137 2.5H10.5586ZM3.89059 15.5H16.1093L10.5586 4H9.44137L3.89059 15.5ZM9.24997 6.75H10.75L10.75 10.75H9.24997L9.24997 6.75ZM9.99997 14C10.5523 14 11 13.5523 11 13C11 12.4477 10.5523 12 9.99997 12C9.44768 12 8.99997 12.4477 8.99997 13C8.99997 13.5523 9.44768 14 9.99997 14Z\",fill:\"currentColor\"})})}function oD(){return(0,l.jsx)(\"svg\",{width:\"20\",height:\"20\",viewBox:\"0 0 20 20\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,l.jsx)(\"path\",{d:\"M9.96484 3C13.8463 3.00018 17 6.13012 17 10C17 13.8699 13.8463 16.9998 9.96484 17C7.62404 17 5.54877 15.8617 4.27051 14.1123L3.82812 13.5068L5.03906 12.6221L5.48145 13.2275C6.48815 14.6053 8.12092 15.5 9.96484 15.5C13.0259 15.4998 15.5 13.0335 15.5 10C15.5 6.96654 13.0259 4.50018 9.96484 4.5C7.42905 4.5 5.29544 6.19429 4.63867 8.5H8V10H2.75C2.33579 10 2 9.66421 2 9.25V4H3.5V7.2373C4.57781 4.74376 7.06749 3 9.96484 3Z\",fill:\"currentColor\"})})}function oB(e){return(0,l.jsx)(\"svg\",o_(oE({strokeLinejoin:\"round\",viewBox:\"0 0 16 16\"},e),{children:(0,l.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M8.7071 2.39644C8.31658 2.00592 7.68341 2.00592 7.29289 2.39644L4.46966 5.21966L3.93933 5.74999L4.99999 6.81065L5.53032 6.28032L7.99999 3.81065L10.4697 6.28032L11 6.81065L12.0607 5.74999L11.5303 5.21966L8.7071 2.39644ZM5.53032 9.71966L4.99999 9.18933L3.93933 10.25L4.46966 10.7803L7.29289 13.6035C7.68341 13.9941 8.31658 13.9941 8.7071 13.6035L11.5303 10.7803L12.0607 10.25L11 9.18933L10.4697 9.71966L7.99999 12.1893L5.53032 9.71966Z\",fill:\"currentColor\"})}))}function oM(e){return(0,l.jsx)(\"button\",o_(oE({},e),{children:(0,l.jsx)(\"span\",{className:\"segment-boundary-trigger-text\",children:(0,l.jsx)(oB,{className:\"plus-icon\"})})}))}let oI=C.createContext({hasProvider:!1,timeoutMs:0,delayRef:{current:0},initialDelayRef:{current:0},timeout:new ej,currentIdRef:{current:null},currentContextRef:{current:null}});function oH(e){let{children:n,delay:t,timeoutMs:r=0}=e,o=C.useRef(t),a=C.useRef(t),i=C.useRef(null),s=C.useRef(null),c=ek();return(0,l.jsx)(oI.Provider,{value:C.useMemo(()=>({hasProvider:!0,delayRef:o,initialDelayRef:a,currentIdRef:i,timeoutMs:r,currentContextRef:s,timeout:c}),[r,c]),children:n})}let oF=C.createContext(void 0),oU=function(e){let{delay:n,closeDelay:t,timeout:r=400}=e,o=C.useMemo(()=>({delay:n,closeDelay:t}),[n,t]);return(0,l.jsx)(oF.Provider,{value:o,children:(0,l.jsx)(oH,{delay:{open:n,close:t},timeoutMs:r,children:e.children})})},oV=C.createContext(void 0);function oq(){let e=C.useContext(oV);if(void 0===e)throw Error(\"Base UI: TooltipRootContext is missing. Tooltip parts must be placed within <Tooltip.Root>.\");return e}function oW(e){return null!=e&&null!=e.clientX}function o$(e){let{disabled:n=!1,defaultOpen:t=!1,onOpenChange:r,open:o,delay:a,closeDelay:i,hoverable:s=!0,trackCursorAxis:c=\"none\",actionsRef:u,onOpenChangeComplete:d}=e,f=a??600,p=i??0,[h,g]=C.useState(null),[m,v]=C.useState(null),[b,y]=C.useState(),x=C.useRef(null),[w,j]=n4({controlled:o,default:t,name:\"Tooltip\",state:\"open\"}),k=T(r),A=T((e,n,t)=>{let r=\"trigger-hover\"===t,o=e&&\"trigger-focus\"===t,a=!e&&(\"trigger-press\"===t||\"escape-key\"===t);function i(){k(e,n,t),j(e)}r?E.flushSync(i):i(),o||a?y(o?\"focus\":\"dismiss\"):\"trigger-hover\"===t&&y(void 0)});w&&n&&A(!1,void 0,\"disabled\");let{mounted:O,setMounted:S,transitionStatus:_}=n2(w),P=T(()=>{S(!1),d?.(!1)});n5({enabled:!u,open:w,ref:x,onComplete(){w||P()}}),C.useImperativeHandle(u,()=>({unmount:P}),[P]);let z=Y({elements:{reference:h,floating:m},open:w,onOpenChange(e,n,t){A(e,n,tr(t))}}),L=C.useContext(oF),{delayRef:R,isInstantPhase:N,hasProvider:D}=function(e,n={}){let{open:t,onOpenChange:r,floatingId:o}=e,{enabled:a=!0}=n,{currentIdRef:i,delayRef:l,timeoutMs:s,initialDelayRef:c,currentContextRef:u,hasProvider:d,timeout:f}=C.useContext(oI),[p,h]=C.useState(!1);return F(()=>{function e(){h(!1),u.current?.setIsInstantPhase(!1),i.current=null,u.current=null,l.current=c.current}if(a&&i.current&&!t&&i.current===o){if(h(!1),s)return f.start(s,e),()=>{f.clear()};e()}},[a,t,o,i,l,s,c,u,f]),F(()=>{if(!a||!t)return;let e=u.current,n=i.current;u.current={onOpenChange:r,setIsInstantPhase:h},i.current=o,l.current={open:0,close:e4(c.current,\"close\")},null!==n&&n!==o?(f.clear(),h(!0),e?.setIsInstantPhase(!0),e?.onOpenChange(!1)):(h(!1),e?.setIsInstantPhase(!1))},[a,t,o,r,i,l,s,c,u,f]),F(()=>()=>{u.current=null},[u]),C.useMemo(()=>({hasProvider:d,delayRef:l,isInstantPhase:p}),[d,l,p])}(z),B=N?\"delay\":b,M=e3(z,{enabled:!n,mouseOnly:!0,move:!1,handleClose:s&&\"both\"!==c?e7():null,restMs(){let e=L?.delay,n=\"object\"==typeof R.current?R.current.open:void 0,t=f;return D&&(t=0!==n?a??e??f:0),t},delay(){let e=\"object\"==typeof R.current?R.current.close:void 0,n=p;return null==i&&D&&(n=e),{close:n}}}),I=nn(z,{enabled:!n}),{getReferenceProps:H,getFloatingProps:U}=nK([M,I,nf(z,{enabled:!n,referencePress:!0}),function(e,n={}){let{open:t,dataRef:r,elements:{floating:o,domReference:a},refs:i}=e,{enabled:l=!0,axis:s=\"both\",x:c=null,y:u=null}=n,d=C.useRef(!1),f=C.useRef(null),[p,h]=C.useState(),[g,m]=C.useState([]),v=T((e,n)=>{if(!d.current&&(!r.current.openEvent||oW(r.current.openEvent))){var t;let o,l,c;i.setPositionReference((t={x:e,y:n,axis:s,dataRef:r,pointerType:p},o=null,l=null,c=!1,{contextElement:a||void 0,getBoundingClientRect(){let e=a?.getBoundingClientRect()||{width:0,height:0,x:0,y:0},n=\"x\"===t.axis||\"both\"===t.axis,r=\"y\"===t.axis||\"both\"===t.axis,i=[\"mouseenter\",\"mousemove\"].includes(t.dataRef.current.openEvent?.type||\"\")&&\"touch\"!==t.pointerType,s=e.width,u=e.height,d=e.x,f=e.y;return null==o&&t.x&&n&&(o=e.x-t.x),null==l&&t.y&&r&&(l=e.y-t.y),d-=o||0,f-=l||0,s=0,u=0,!c||i?(s=\"y\"===t.axis?e.width:0,u=\"x\"===t.axis?e.height:0,d=n&&null!=t.x?t.x:d,f=r&&null!=t.y?t.y:f):c&&!i&&(u=\"x\"===t.axis?e.height:u,s=\"y\"===t.axis?e.width:s),c=!0,{width:s,height:u,x:d,y:f,top:f,right:d+s,bottom:f+u,left:d}}}))}}),b=T(e=>{null==c&&null==u&&(t?f.current||m([]):v(e.clientX,e.clientY))}),y=eI(p)?o:t,x=C.useCallback(()=>{if(!y||!l||null!=c||null!=u)return;let e=Q(o);function n(t){eY(o,eX(t))?(e.removeEventListener(\"mousemove\",n),f.current=null):v(t.clientX,t.clientY)}if(!r.current.openEvent||oW(r.current.openEvent)){e.addEventListener(\"mousemove\",n);let t=()=>{e.removeEventListener(\"mousemove\",n),f.current=null};return f.current=t,t}i.setPositionReference(a)},[y,l,c,u,o,r,i,a,v]);C.useEffect(()=>x(),[x,g]),C.useEffect(()=>{l&&!o&&(d.current=!1)},[l,o]),C.useEffect(()=>{!l&&t&&(d.current=!0)},[l,t]),F(()=>{l&&(null!=c||null!=u)&&(d.current=!1,v(c,u))},[l,c,u,v]);let w=C.useMemo(()=>{function e(e){h(e.pointerType)}return{onPointerDown:e,onPointerEnter:e,onMouseMove:b,onMouseEnter:b}},[b]);return C.useMemo(()=>l?{reference:w}:{},[l,w])}(z,{enabled:!n&&\"none\"!==c,axis:\"none\"===c?void 0:c})]),V=C.useMemo(()=>({open:w,setOpen:A,mounted:O,setMounted:S,setTriggerElement:g,positionerElement:m,setPositionerElement:v,popupRef:x,triggerProps:H(),popupProps:U(),floatingRootContext:z,instantType:B,transitionStatus:_,onOpenChangeComplete:d}),[w,A,O,S,g,m,v,x,H,U,z,B,_,d]),q=C.useMemo(()=>({...V,delay:f,closeDelay:p,trackCursorAxis:c,hoverable:s}),[V,f,p,c,s]);return(0,l.jsx)(oV.Provider,{value:q,children:e.children})}let oZ=C.forwardRef(function(e,n){let{className:t,render:r,...o}=e,{open:a,setTriggerElement:i,triggerProps:l}=oq();return tj(\"button\",e,{state:C.useMemo(()=>({open:a}),[a]),ref:[n,i],props:[l,o],customStyleHookMapping:tF})}),oY=C.createContext(void 0);function oX(e){let n=rx({root:e.root});return n&&E.createPortal(e.children,n)}function oK(e){let{children:n,keepMounted:t=!1,container:r}=e,{mounted:o}=oq();return o||t?(0,l.jsx)(oY.Provider,{value:t,children:(0,l.jsx)(oX,{root:r,children:n})}):null}let oQ=C.createContext(void 0);function oG(){let e=C.useContext(oQ);if(void 0===e)throw Error(\"Base UI: TooltipPositionerContext is missing. TooltipPositioner parts must be placed within <Tooltip.Positioner>.\");return e}let oJ=C.forwardRef(function(e,n){let{render:t,className:r,anchor:o,positionMethod:a=\"absolute\",side:i=\"top\",align:s=\"center\",sideOffset:c=0,alignOffset:u=0,collisionBoundary:d=\"clipping-ancestors\",collisionPadding:f=5,arrowPadding:p=5,sticky:h=!1,trackAnchor:g=!0,collisionAvoidance:m=na,...v}=e,{open:b,setPositionerElement:y,mounted:x,floatingRootContext:w,trackCursorAxis:j,hoverable:k}=oq(),A=r4({anchor:o,positionMethod:a,floatingRootContext:w,mounted:x,side:i,sideOffset:c,align:s,alignOffset:u,collisionBoundary:d,collisionPadding:f,sticky:h,arrowPadding:p,trackAnchor:g,keepMounted:function(){let e=C.useContext(oY);if(void 0===e)throw Error(\"Base UI: <Tooltip.Portal> is missing.\");return e}(),collisionAvoidance:m}),O=C.useMemo(()=>{let e={};return b&&\"both\"!==j&&k||(e.pointerEvents=\"none\"),{role:\"presentation\",hidden:!x,style:{...A.positionerStyles,...e}}},[b,j,k,x,A.positionerStyles]),S=C.useMemo(()=>({props:O,...A}),[O,A]),E=C.useMemo(()=>({open:b,side:S.side,align:S.align,anchorHidden:S.anchorHidden}),[b,S.side,S.align,S.anchorHidden]),_=C.useMemo(()=>({...E,arrowRef:S.arrowRef,arrowStyles:S.arrowStyles,arrowUncentered:S.arrowUncentered}),[E,S.arrowRef,S.arrowStyles,S.arrowUncentered]),P=tj(\"div\",e,{state:E,props:[S.props,v],ref:[n,y],customStyleHookMapping:tV});return(0,l.jsx)(oQ.Provider,{value:_,children:P})}),o0={...tV,...tT},o1=C.forwardRef(function(e,n){let{className:t,render:r,...o}=e,{open:a,instantType:i,transitionStatus:l,popupProps:s,popupRef:c,onOpenChangeComplete:u}=oq(),{side:d,align:f}=oG();return n5({open:a,ref:c,onComplete(){a&&u?.(!0)}}),tj(\"div\",e,{state:C.useMemo(()=>({open:a,side:d,align:f,instant:i,transitionStatus:l}),[a,d,f,i,l]),ref:[n,c],props:[s,\"starting\"===l?nt:nr,o],customStyleHookMapping:o0})}),o2=C.forwardRef(function(e,n){let{className:t,render:r,...o}=e,{open:a,arrowRef:i,side:l,align:s,arrowUncentered:c,arrowStyles:u}=oG();return tj(\"div\",e,{state:C.useMemo(()=>({open:a,side:l,align:s,uncentered:c}),[a,l,s,c]),ref:[n,i],props:[{style:u,\"aria-hidden\":!0},o],customStyleHookMapping:tV})});var o4=t(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/components/tooltip.css\"),o5={};function o3(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}o5.styleTagTransform=y(),o5.setAttributes=g(),o5.insert=p(),o5.domAPI=d(),o5.insertStyleElement=v(),c()(o4.Z,o5),o4.Z&&o4.Z.locals&&o4.Z.locals;var o6=(0,C.forwardRef)(function(e,n){var t,r=e.className,o=e.children,a=e.title,i=e.direction,s=void 0===i?\"top\":i,c=e.arrowSize,u=void 0===c?6:c,d=e.offset,f=e.bgcolor,p=void 0===f?\"#000\":f,h=e.color,g=(t=(0,C.useState)(function(){return document.querySelector(\"nextjs-portal\").shadowRoot}),function(e){if(Array.isArray(e))return e}(t)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(t,1)||function(e,n){if(e){if(\"string\"==typeof e)return o3(e,1);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return o3(e,n)}}(t,1)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}())[0],m=(0,C.useRef)(g);return a?(0,l.jsx)(oU,{children:(0,l.jsxs)(o$,{delay:400,children:[(0,l.jsx)(oZ,{ref:n,render:function(e){var n,t;return(0,l.jsx)(\"span\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r;r=t[n],n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r})}return e}({},e),t=t={children:o},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}}),(0,l.jsx)(oK,{container:m,children:(0,l.jsx)(oJ,{side:s,sideOffset:(void 0===d?8:d)+u,className:\"tooltip-positioner\",style:{\"--anchor-width\":\"\".concat(u,\"px\"),\"--anchor-height\":\"\".concat(u,\"px\")},children:(0,l.jsxs)(o1,{className:(0,k.cx)(\"tooltip\",r),style:{backgroundColor:p,color:void 0===h?\"#fff\":h,\"--tooltip-bg-color\":p,\"--arrow-size\":\"\".concat(u,\"px\")},children:[a,(0,l.jsx)(o2,{className:(0,k.cx)(\"tooltip-arrow\",\"tooltip-arrow--\".concat(s)),style:{\"--arrow-size\":\"\".concat(u,\"px\"),\"--tooltip-bg-color\":p}})]})})})]})}):o});function o9(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r;r=t[n],n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r})}return e}function o8(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}var o7=function(e){var n,t;return!!(null==(n=e.value)?void 0:n.type)&&!!(null==(t=e.value)?void 0:t.pagePath)};function ae(e){var n=e.page;return(0,l.jsxs)(\"div\",{className:\"segment-explorer-page-route-bar\",children:[(0,l.jsx)(aa,{}),(0,l.jsx)(\"span\",{className:\"segment-explorer-page-route-bar-path\",children:n})]})}function an(e){var n=e.activeBoundariesCount,t=e.onGlobalReset,r=n>0;return(0,l.jsx)(\"div\",{className:\"segment-explorer-footer\",children:(0,l.jsxs)(\"button\",{className:\"segment-explorer-footer-button \".concat(r?\"\":\"segment-explorer-footer-button--disabled\"),onClick:r?t:void 0,disabled:!r,type:\"button\",children:[(0,l.jsx)(\"span\",{className:\"segment-explorer-footer-text\",children:\"Clear Segment Overrides\"}),r&&(0,l.jsx)(\"span\",{className:\"segment-explorer-footer-badge\",children:n})]})})}function at(e){var n=e.isAppRouter,t=e.page,r=(0,j.i8)(),o=(0,C.useMemo)(function(){return n?function e(n){var t,r=0;return(null==(t=n.value)?void 0:t.setBoundaryType)&&null!==n.value.boundaryType&&!oO(n.value.type)&&r++,Object.values(n.children).forEach(function(n){n&&(r+=e(n))}),r}(r):0},[r,n]),a=(0,C.useCallback)(function(){n&&function e(n){var t;(null==(t=n.value)?void 0:t.setBoundaryType)&&n.value.setBoundaryType(null),Object.values(n.children).forEach(function(n){n&&e(n)})}(r)},[r,n]);return(0,l.jsxs)(\"div\",{\"data-nextjs-devtools-panel-segments-explorer\":!0,children:[n&&(0,l.jsx)(ae,{page:t}),(0,l.jsx)(\"div\",{className:\"segment-explorer-content\",\"data-nextjs-devtool-segment-explorer\":!0,children:n?(0,l.jsx)(ar,{node:r,level:0,segment:\"\"}):(0,l.jsx)(\"p\",{children:\"Route Info currently is only available for the App Router.\"})}),n&&(0,l.jsx)(an,{activeBoundariesCount:o,onGlobalReset:a})]})}function ar(e){var n=e.segment,t=e.node,r=e.level,o=Object.keys(t.children).sort(function(e,n){var r=e.includes(\".\"),o=n.includes(\".\");if(r&&!o)return -1;if(!r&&o)return 1;if(r&&o){var a,i,l,s,c,u,d,f,p=null==(i=t.children[e])||null==(a=i.value)?void 0:a.type,h=null==(s=t.children[n])||null==(l=s.value)?void 0:l.type,g=function(e){return e?\"layout\"===e?1:\"template\"===e?2:\"page\"===e?3:oO(e)?4:5:5},m=g(p),v=g(h);if(m!==v)return m-v;var b=(null==(u=t.children[e])||null==(c=u.value)?void 0:c.pagePath)||\"\",y=(null==(f=t.children[n])||null==(d=f.value)?void 0:d.pagePath)||\"\";return b.localeCompare(y)}return e.localeCompare(n)}),a=0!==r||n?n:\"app\",i=[],s=[],c=!0,u=!1,d=void 0;try{for(var f,p=o[Symbol.iterator]();!(c=(f=p.next()).done);c=!0){var h=f.value,g=t.children[h];if(g){if(o7(g)){s.push(h);continue}i.push(h)}}}catch(e){u=!0,d=e}finally{try{c||null==p.return||p.return()}finally{if(u)throw d}}for(var m=null,v=o.length-1;v>=0;v--){var b=t.children[o[v]];if(b&&b.value){var y=oO(b.value.type);if(!m&&!y){m=b;break}}}var x=null,w=!0,j=!1,A=void 0;try{for(var O,C=o[Symbol.iterator]();!(w=(O=C.next()).done);w=!0){var S=O.value,E=t.children[S];if(E&&E.value&&oO(E.value.type)){x=E;break}}}catch(e){j=!0,A=e}finally{try{w||null==C.return||C.return()}finally{if(j)throw A}}m=m||x;var _=s.length>0,P={\"not-found\":null,loading:null,error:null};return s.forEach(function(e){var n=t.children[e];if(n&&n.value&&oO(n.value.type)){var r=n.value.type.replace(oA,\"\");r in P&&(P[r]=n.value.pagePath||null)}}),(0,l.jsxs)(l.Fragment,{children:[_&&(0,l.jsx)(\"div\",{className:\"segment-explorer-item\",\"data-nextjs-devtool-segment-explorer-segment\":n+\"-\"+r,children:(0,l.jsx)(\"div\",{className:\"segment-explorer-item-row\",style:o9({},{paddingLeft:\"\".concat((r+1)*8,\"px\")}),children:(0,l.jsxs)(\"div\",{className:\"segment-explorer-filename\",children:[a&&(0,l.jsxs)(\"span\",{className:\"segment-explorer-filename--path\",children:[a,(0,l.jsx)(\"small\",{children:\"/\"})]}),s.length>0&&(0,l.jsx)(\"span\",{className:\"segment-explorer-files\",children:s.map(function(e){var n=t.children[e];if(!n||!n.value||oO(n.value.type))return null;var r=n.value.pagePath,o=r.split(\"/\").pop()||\"\",a=r.startsWith(oj),i=ok(o),s=a?\"The default Next.js \".concat(n.value.type,\" is being shown. You can customize this page by adding your own \").concat(i,\" file to the app/ directory.\"):null,c=null!==n.value.boundaryType;return(0,l.jsx)(o6,{className:\"segment-explorer-file-label-tooltip--\"+(a?\"lg\":\"sm\"),direction:a?\"right\":\"top\",title:s,offset:12,bgcolor:\"var(--color-gray-1000)\",color:\"var(--color-gray-100)\",children:(0,l.jsxs)(\"span\",{className:(0,k.cx)(\"segment-explorer-file-label\",\"segment-explorer-file-label--\".concat(n.value.type),a&&\"segment-explorer-file-label--builtin\",c&&\"segment-explorer-file-label--overridden\"),onClick:function(){var e;e=new URLSearchParams({file:{filePath:r}.filePath,isAppRelativePath:\"1\"}),fetch(\"\".concat( false||\"\",\"/__nextjs_launch-editor?\").concat(e.toString()))},children:[(0,l.jsx)(\"span\",{className:\"segment-explorer-file-label-text\",children:i}),a?(0,l.jsx)(ao,{}):(0,l.jsx)(ai,{className:\"code-icon\"})]})},e)})}),m&&m.value&&(0,l.jsx)(oL,{nodeState:m.value,boundaries:P})]})})}),i.map(function(e){var o=t.children[e];if(!o)return null;var a=_?e:n+\" / \"+e;return(0,l.jsx)(ar,{segment:a,node:o,level:_?r+1:r},e)})]})}function ao(e){return(0,l.jsxs)(\"svg\",o8(o9({width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:[(0,l.jsx)(\"path\",{d:\"M14 8C14 11.3137 11.3137 14 8 14C4.68629 14 2 11.3137 2 8C2 4.68629 4.68629 2 8 2C11.3137 2 14 4.68629 14 8Z\",fill:\"var(--color-gray-400)\"}),(0,l.jsx)(\"path\",{d:\"M7.75 7C8.30228 7.00001 8.75 7.44772 8.75 8V11.25H7.25V8.5H6.25V7H7.75ZM8 4C8.55228 4 9 4.44772 9 5C9 5.55228 8.55228 6 8 6C7.44772 6 7 5.55228 7 5C7 4.44772 7.44772 4 8 4Z\",fill:\"var(--color-gray-900)\"})]}))}function aa(){return(0,l.jsx)(\"svg\",{width:\"20\",height:\"20\",viewBox:\"0 0 20 20\",fill:\"var(--color-gray-600)\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,l.jsx)(\"path\",{d:\"M4.5 11.25C4.5 11.3881 4.61193 11.5 4.75 11.5H14.4395L11.9395 9L13 7.93945L16.7803 11.7197L16.832 11.7764C17.0723 12.0709 17.0549 12.5057 16.7803 12.7803L13 16.5605L11.9395 15.5L14.4395 13H4.75C3.7835 13 3 12.2165 3 11.25V4.25H4.5V11.25Z\"})})}function ai(e){return(0,l.jsx)(\"svg\",o8(o9({width:\"12\",height:\"12\",strokeLinejoin:\"round\",viewBox:\"0 0 16 16\",fill:\"currentColor\"},e),{children:(0,l.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M7.22763 14.1819L10.2276 2.18193L10.4095 1.45432L8.95432 1.09052L8.77242 1.81812L5.77242 13.8181L5.59051 14.5457L7.04573 14.9095L7.22763 14.1819ZM3.75002 12.0607L3.21969 11.5304L0.39647 8.70713C0.00594559 8.31661 0.00594559 7.68344 0.39647 7.29292L3.21969 4.46969L3.75002 3.93936L4.81068 5.00002L4.28035 5.53035L1.81068 8.00003L4.28035 10.4697L4.81068 11L3.75002 12.0607ZM12.25 12.0607L12.7804 11.5304L15.6036 8.70713C15.9941 8.31661 15.9941 7.68344 15.6036 7.29292L12.7804 4.46969L12.25 3.93936L11.1894 5.00002L11.7197 5.53035L14.1894 8.00003L11.7197 10.4697L11.1894 11L12.25 12.0607Z\",fill:\"currentColor\"})}))}},\"./src/next-devtools/dev-overlay/hooks/use-delayed-render.ts\":function(e,n,t){\"use strict\";t.d(n,{N:()=>i});var r=t(\"./dist/compiled/react/index.js\");function o(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function a(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return o(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return o(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function i(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=a((0,r.useState)(e),2),o=t[0],i=t[1],l=a((0,r.useState)(!1),2),s=l[0],c=l[1],u=n.enterDelay,d=void 0===u?1:u,f=n.exitDelay,p=void 0===f?0:f;return(0,r.useEffect)(function(){var n,t;return e?(i(!0),d<=0?c(!0):n=setTimeout(function(){c(!0)},d)):(c(!1),p<=0?i(!1):t=setTimeout(function(){i(!1)},p)),function(){clearTimeout(n),clearTimeout(t)}},[e,d,p]),{mounted:o,rendered:s}}},\"./src/next-devtools/dev-overlay/segment-explorer-trie.ts\":function(e,n,t){\"use strict\";t.d(n,{_c:()=>d,i8:()=>f,th:()=>u});var r=t(\"./dist/compiled/react/index.js\");function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r;r=t[n],n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r})}return e}var a=new Set,i=function(e){return a.add(e),function(){return a.delete(e)}},l=function(){return c.getRoot()},s=function(){return c.getRoot()},c=function(e){var n=e.getCharacters,t=void 0===n?function(e){return[e]}:n,r=e.compare,i=void 0===r?function(e,n){return e===n}:r,l={value:void 0,children:{}};function s(){var e=!0,n=!1,t=void 0;try{for(var r,o=a[Symbol.iterator]();!(e=(r=o.next()).done);e=!0)(0,r.value)()}catch(e){n=!0,t=e}finally{try{e||null==o.return||o.return()}finally{if(n)throw t}}}return{insert:function(e){var n=l,r=t(e),a=!0,i=!1,c=void 0;try{for(var u,d=r[Symbol.iterator]();!(a=(u=d.next()).done);a=!0){var f=u.value;n.children[f]||(n.children[f]={value:void 0,children:{}}),n=n.children[f]}}catch(e){i=!0,c=e}finally{try{a||null==d.return||d.return()}finally{if(i)throw c}}n.value=e,l=o({},l),s()},remove:function(e){var n=l,r=t(e),a=[],c=!0,u=!0,d=!1,f=void 0;try{for(var p,h=r[Symbol.iterator]();!(u=(p=h.next()).done);u=!0){var g=p.value;if(!n.children[g]){c=!1;break}a.push(n),n=n.children[g]}}catch(e){d=!0,f=e}finally{try{u||null==h.return||h.return()}finally{if(d)throw f}}if(c&&i(n.value,e)){n.value=void 0;for(var m=a.length-1;m>=0;m--){var v=a[m],b=r[m];0===Object.keys(v.children[b].children).length&&delete v.children[b]}l=o({},l),s()}},getRoot:function(){return l}}}({compare:function(e,n){return!!e&&!!n&&e.pagePath===n.pagePath&&e.type===n.type&&e.boundaryType===n.boundaryType},getCharacters:function(e){return e.pagePath.split(\"/\")}}),u=c.insert,d=c.remove;function f(){return(0,r.useSyncExternalStore)(i,l,s)}},\"./src/next-devtools/dev-overlay/utils/cx.ts\":function(e,n,t){\"use strict\";function r(){for(var e=arguments.length,n=Array(e),t=0;t<e;t++)n[t]=arguments[t];return n.filter(Boolean).join(\" \")}t.d(n,{cx:()=>r})}},__webpack_module_cache__={};function __nested_webpack_require_381207__(e){var n=__webpack_module_cache__[e];if(void 0!==n)return n.exports;var t=__webpack_module_cache__[e]={id:e,exports:{}};return __webpack_modules__[e](t,t.exports,__nested_webpack_require_381207__),t.exports}__nested_webpack_require_381207__.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return __nested_webpack_require_381207__.d(n,{a:n}),n},(()=>{var e,n=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;__nested_webpack_require_381207__.t=function(t,r){if(1&r&&(t=this(t)),8&r||\"object\"==typeof t&&t&&(4&r&&t.__esModule||16&r&&\"function\"==typeof t.then))return t;var o=Object.create(null);__nested_webpack_require_381207__.r(o);var a={};e=e||[null,n({}),n([]),n(n)];for(var i=2&r&&t;\"object\"==typeof i&&!~e.indexOf(i);i=n(i))Object.getOwnPropertyNames(i).forEach(e=>{a[e]=()=>t[e]});return a.default=()=>t,__nested_webpack_require_381207__.d(o,a),o}})(),__nested_webpack_require_381207__.d=(e,n)=>{for(var t in n)__nested_webpack_require_381207__.o(n,t)&&!__nested_webpack_require_381207__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},__nested_webpack_require_381207__.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),__nested_webpack_require_381207__.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},__nested_webpack_require_381207__.nc=void 0;var __nested_webpack_exports__={};for(var __webpack_i__ in(()=>{\"use strict\";__nested_webpack_require_381207__.r(__nested_webpack_exports__),__nested_webpack_require_381207__.d(__nested_webpack_exports__,{dispatcher:()=>aH,renderAppDevOverlay:()=>aW,renderPagesDevOverlay:()=>a$});var e,n,t,r=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\"),o=__nested_webpack_require_381207__.n(r),a=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleDomAPI.js\"),i=__nested_webpack_require_381207__.n(a),l=__nested_webpack_require_381207__(\"./src/build/webpack/loaders/devtool/devtool-style-inject.js\"),s=__nested_webpack_require_381207__.n(l),c=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\"),u=__nested_webpack_require_381207__.n(c),d=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/insertStyleElement.js\"),f=__nested_webpack_require_381207__.n(d),p=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.98.0_@swc+core@1.11.24_@swc+helpers@0.5.15__esbuild@0.24.2_/node_modules/style-loader/dist/runtime/styleTagTransform.js\"),h=__nested_webpack_require_381207__.n(p),g=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/global.css\"),m={};m.styleTagTransform=h(),m.setAttributes=u(),m.insert=s(),m.domAPI=i(),m.insertStyleElement=f(),o()(g.Z,m),g.Z&&g.Z.locals&&g.Z.locals;var v=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/toast/style.css\"),b={};b.styleTagTransform=h(),b.setAttributes=u(),b.insert=s(),b.domAPI=i(),b.insertStyleElement=f(),o()(v.Z,b),v.Z&&v.Z.locals&&v.Z.locals;var y=__nested_webpack_require_381207__(\"./dist/compiled/react/jsx-runtime.js\"),x=__nested_webpack_require_381207__(\"./dist/compiled/react/index.js\");function w(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}var j=__nested_webpack_require_381207__(\"./dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js\"),k=/\\/_next(\\/static\\/.+)/,A=Symbol.for(\"next.console.error.digest\");function O(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function C(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}var S={Small:16/14,Medium:1,Large:16/18},E=\"static-indicator\",_=\"build-ok\",P=\"build-error\",z=\"before-fast-refresh\",L=\"fast-refresh\",T=\"version-info\",R=\"unhandled-error\",N=\"unhandled-rejection\",D=\"debug-info\",B=\"dev-indicator\",M=\"error-overlay-open\",I=\"error-overlay-close\",H=\"error-overlay-toggle\",F=\"building-indicator-show\",U=\"building-indicator-hide\",V=\"rendering-indicator-show\",q=\"rendering-indicator-hide\",W=\"devtools-panel-open\",$=\"devtools-panel-close\",Z=\"devtools-panel-toggle\",Y=\"devtools-position\",X=\"devtools-scale\",K=\"restart-server-button\",Q=\"__nextjs-dev-tools-theme\",G=\"__nextjs-dev-tools-position\",J=\"__nextjs-dev-tools-scale\",ee=\"segment-explorer-update-route-state\",en=/\\s+(at Object\\.react_stack_bottom_frame.*)|(react_stack_bottom_frame@.*)|(at react-stack-bottom-frame.*)|(react-stack-bottom-frame@.*)/;function et(e){return null==e?void 0:e.split(en)[0]}var er=(null==(e=true)?void 0:e.toString())===\"false\",eo={nextId:1,buildError:null,errors:[],notFound:!1,renderingIndicator:!1,staticIndicator:!1,showIndicator:!1,disableDevIndicator:!1,buildingIndicator:!1,refreshState:{type:\"idle\"},versionInfo:{installed:\"0.0.0\",staleness:\"unknown\"},debugInfo:{devtoolsFrontendUrl:void 0},isDevToolsPanelOpen:!1,showRestartServerButton:!1,devToolsPosition:\"bottom-left\",scale:S.Medium,page:\"\"},ea=__nested_webpack_require_381207__(\"./dist/compiled/react-dom/client.js\");function ei(e){for(var n=arguments.length,t=Array(n>1?n-1:0),r=1;r<n;r++)t[r-1]=arguments[r];var o=e.length-1;return(e.slice(0,o).reduce(function(e,n,r){return e+n+t[r]},\"\")+e[o]).replace(/\\/\\*[\\s\\S]*?\\*\\//g,\"\").replace(/\\s+/g,\" \").replace(/\\s*([:;,{}])\\s*/g,\"$1\").replace(/;+}/g,\"}\").trim()}function el(){var e,n,t=(e=[\"\\n      /* latin-ext */\\n      @font-face {\\n        font-family: '__nextjs-Geist';\\n        font-style: normal;\\n        font-weight: 400 600;\\n        font-display: swap;\\n        src: url(/__nextjs_font/geist-latin-ext.woff2) format('woff2');\\n        unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,\\n          U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,\\n          U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,\\n          U+A720-A7FF;\\n      }\\n      /* latin-ext */\\n      @font-face {\\n        font-family: '__nextjs-Geist Mono';\\n        font-style: normal;\\n        font-weight: 400 600;\\n        font-display: swap;\\n        src: url(/__nextjs_font/geist-mono-latin-ext.woff2) format('woff2');\\n        unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,\\n          U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,\\n          U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,\\n          U+A720-A7FF;\\n      }\\n      /* latin */\\n      @font-face {\\n        font-family: '__nextjs-Geist';\\n        font-style: normal;\\n        font-weight: 400 600;\\n        font-display: swap;\\n        src: url(/__nextjs_font/geist-latin.woff2) format('woff2');\\n        unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,\\n          U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,\\n          U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n      }\\n      /* latin */\\n      @font-face {\\n        font-family: '__nextjs-Geist Mono';\\n        font-style: normal;\\n        font-weight: 400 600;\\n        font-display: swap;\\n        src: url(/__nextjs_font/geist-mono-latin.woff2) format('woff2');\\n        unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,\\n          U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,\\n          U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\\n      }\\n    \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return el=function(){return t},t}var es=function(){return(0,x.useInsertionEffect)(function(){var e=document.createElement(\"style\");return e.textContent=ei(el()),document.head.appendChild(e),function(){document.head.removeChild(e)}},[]),null},ec=__nested_webpack_require_381207__(\"./dist/compiled/react-dom/index.js\");function eu(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function ed(e){var n,t,r=e.children,o=x.useRef(null),a=x.useRef(null),i=(n=x.useState(),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return eu(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return eu(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}())[1];return x.useEffect(function(){if(o.current=document.querySelector(\"nextjs-portal\"),\"undefined\"!=typeof localStorage){var e=localStorage.getItem(Q);\"dark\"===e?(o.current.classList.add(\"dark\"),o.current.classList.remove(\"light\")):\"light\"===e&&(o.current.classList.remove(\"dark\"),o.current.classList.add(\"light\"))}null===o.current.shadowRoot&&(a.current=o.current.attachShadow({mode:\"open\"})),i({})},[]),a.current?(0,ec.createPortal)(r,a.current):null}function ef(){var e,n,t=(e=[\"\\n        :host {\\n          /* \\n           * Although the style applied to the shadow host is isolated,\\n           * the element that attached the shadow host (i.e. \\\"nextjs-portal\\\")\\n           * is still affected by the parent's style (e.g. \\\"body\\\"). This may\\n           * occur style conflicts like \\\"display: flex\\\", with other children\\n           * elements therefore give the shadow host an absolute position.\\n           */\\n          position: absolute;\\n\\n          --color-font: #757575;\\n          --color-backdrop: rgba(250, 250, 250, 0.8);\\n          --color-border-shadow: rgba(0, 0, 0, 0.145);\\n\\n          --color-title-color: #1f1f1f;\\n          --color-stack-notes: #777;\\n\\n          --color-accents-1: #808080;\\n          --color-accents-2: #222222;\\n          --color-accents-3: #404040;\\n\\n          --font-stack-monospace: '__nextjs-Geist Mono', 'Geist Mono',\\n            'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier,\\n            monospace;\\n          --font-stack-sans: '__nextjs-Geist', 'Geist', -apple-system,\\n            'Source Sans Pro', sans-serif;\\n\\n          font-family: var(--font-stack-sans);\\n          font-variant-ligatures: none;\\n\\n          /* TODO: Remove replaced ones. */\\n          --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);\\n          --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1),\\n            0 1px 2px -1px rgb(0 0 0 / 0.1);\\n          --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1),\\n            0 2px 4px -2px rgb(0 0 0 / 0.1);\\n          --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1),\\n            0 4px 6px -4px rgb(0 0 0 / 0.1);\\n          --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1),\\n            0 8px 10px -6px rgb(0 0 0 / 0.1);\\n          --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\\n          --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);\\n          --shadow-none: 0 0 #0000;\\n\\n          --shadow-small: 0px 2px 2px rgba(0, 0, 0, 0.04);\\n          --shadow-menu: 0px 1px 1px rgba(0, 0, 0, 0.02),\\n            0px 4px 8px -4px rgba(0, 0, 0, 0.04),\\n            0px 16px 24px -8px rgba(0, 0, 0, 0.06);\\n\\n          --focus-color: var(--color-blue-800);\\n          --focus-ring: 2px solid var(--focus-color);\\n\\n          --timing-swift: cubic-bezier(0.23, 0.88, 0.26, 0.92);\\n          --timing-overlay: cubic-bezier(0.175, 0.885, 0.32, 1.1);\\n          /* prettier-ignore */\\n          --timing-bounce: linear(0 0%, 0.005871 1%, 0.022058 2%, 0.046612 3%, 0.077823 4%, 0.114199 5%, 0.154441 6%, 0.197431 7.000000000000001%, 0.242208 8%, 0.287959 9%, 0.333995 10%, 0.379743 11%, 0.424732 12%, 0.46858 13%, 0.510982 14.000000000000002%, 0.551702 15%, 0.590564 16%, 0.627445 17%, 0.662261 18%, 0.694971 19%, 0.725561 20%, 0.754047 21%, 0.780462 22%, 0.804861 23%, 0.82731 24%, 0.847888 25%, 0.866679 26%, 0.883775 27%, 0.899272 28.000000000000004%, 0.913267 28.999999999999996%, 0.925856 30%, 0.937137 31%, 0.947205 32%, 0.956153 33%, 0.96407 34%, 0.971043 35%, 0.977153 36%, 0.982479 37%, 0.987094 38%, 0.991066 39%, 0.994462 40%, 0.997339 41%, 0.999755 42%, 1.001761 43%, 1.003404 44%, 1.004727 45%, 1.00577 46%, 1.006569 47%, 1.007157 48%, 1.007563 49%, 1.007813 50%, 1.007931 51%, 1.007939 52%, 1.007855 53%, 1.007697 54%, 1.007477 55.00000000000001%, 1.00721 56.00000000000001%, 1.006907 56.99999999999999%, 1.006576 57.99999999999999%, 1.006228 59%, 1.005868 60%, 1.005503 61%, 1.005137 62%, 1.004776 63%, 1.004422 64%, 1.004078 65%, 1.003746 66%, 1.003429 67%, 1.003127 68%, 1.00284 69%, 1.002571 70%, 1.002318 71%, 1.002082 72%, 1.001863 73%, 1.00166 74%, 1.001473 75%, 1.001301 76%, 1.001143 77%, 1.001 78%, 1.000869 79%, 1.000752 80%, 1.000645 81%, 1.00055 82%, 1.000464 83%, 1.000388 84%, 1.000321 85%, 1.000261 86%, 1.000209 87%, 1.000163 88%, 1.000123 89%, 1.000088 90%);\\n\\n          --rounded-none: 0px;\\n          --rounded-sm: 2px;\\n          --rounded-md: 4px;\\n          --rounded-md-2: 6px;\\n          --rounded-lg: 8px;\\n          --rounded-xl: 12px;\\n          --rounded-2xl: 16px;\\n          --rounded-3xl: 24px;\\n          --rounded-4xl: 32px;\\n          --rounded-full: 9999px;\\n\\n          /* \\n            This value gets set from the Dev Tools preferences,\\n            and we use the following --size-* variables to \\n            scale the relevant elements.\\n\\n            The reason why we don't rely on rem values is because\\n            if an app sets their root font size to something tiny, \\n            it feels unexpected to have the app root size leak \\n            into a Next.js surface.\\n\\n            https://github.com/vercel/next.js/discussions/76812\\n          */\\n          --nextjs-dev-tools-scale: \",\";\\n          --size-1: calc(1px / var(--nextjs-dev-tools-scale));\\n          --size-2: calc(2px / var(--nextjs-dev-tools-scale));\\n          --size-3: calc(3px / var(--nextjs-dev-tools-scale));\\n          --size-4: calc(4px / var(--nextjs-dev-tools-scale));\\n          --size-5: calc(5px / var(--nextjs-dev-tools-scale));\\n          --size-6: calc(6px / var(--nextjs-dev-tools-scale));\\n          --size-7: calc(7px / var(--nextjs-dev-tools-scale));\\n          --size-8: calc(8px / var(--nextjs-dev-tools-scale));\\n          --size-9: calc(9px / var(--nextjs-dev-tools-scale));\\n          --size-10: calc(10px / var(--nextjs-dev-tools-scale));\\n          --size-11: calc(11px / var(--nextjs-dev-tools-scale));\\n          --size-12: calc(12px / var(--nextjs-dev-tools-scale));\\n          --size-13: calc(13px / var(--nextjs-dev-tools-scale));\\n          --size-14: calc(14px / var(--nextjs-dev-tools-scale));\\n          --size-15: calc(15px / var(--nextjs-dev-tools-scale));\\n          --size-16: calc(16px / var(--nextjs-dev-tools-scale));\\n          --size-17: calc(17px / var(--nextjs-dev-tools-scale));\\n          --size-18: calc(18px / var(--nextjs-dev-tools-scale));\\n          --size-20: calc(20px / var(--nextjs-dev-tools-scale));\\n          --size-22: calc(22px / var(--nextjs-dev-tools-scale));\\n          --size-24: calc(24px / var(--nextjs-dev-tools-scale));\\n          --size-26: calc(26px / var(--nextjs-dev-tools-scale));\\n          --size-28: calc(28px / var(--nextjs-dev-tools-scale));\\n          --size-30: calc(30px / var(--nextjs-dev-tools-scale));\\n          --size-32: calc(32px / var(--nextjs-dev-tools-scale));\\n          --size-34: calc(34px / var(--nextjs-dev-tools-scale));\\n          --size-36: calc(36px / var(--nextjs-dev-tools-scale));\\n          --size-38: calc(38px / var(--nextjs-dev-tools-scale));\\n          --size-40: calc(40px / var(--nextjs-dev-tools-scale));\\n          --size-42: calc(42px / var(--nextjs-dev-tools-scale));\\n          --size-44: calc(44px / var(--nextjs-dev-tools-scale));\\n          --size-46: calc(46px / var(--nextjs-dev-tools-scale));\\n          --size-48: calc(48px / var(--nextjs-dev-tools-scale));\\n\\n          @media print {\\n            display: none;\\n          }\\n        }\\n\\n        h1,\\n        h2,\\n        h3,\\n        h4,\\n        h5,\\n        h6 {\\n          margin-bottom: 8px;\\n          font-weight: 500;\\n          line-height: 1.5;\\n        }\\n\\n        a {\\n          color: var(--color-blue-900);\\n          &:hover {\\n            color: var(--color-blue-900);\\n          }\\n          &:focus-visible {\\n            outline: var(--focus-ring);\\n          }\\n        }\\n      \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return ef=function(){return t},t}function ep(e){var n=e.scale;return(0,y.jsx)(\"style\",{children:ei(ef(),String(void 0===n?1:n))})}function eh(e){if(\"\"===e.trim())throw Error(\"can't decode empty hex\");var n=parseInt(e,16);if(isNaN(n))throw Error(\"invalid hex: `\".concat(e,\"`\"));return String.fromCodePoint(n)}var eg=/^__TURBOPACK__([a-zA-Z0-9_$]+)__$/,em=/https?:\\/\\/[^\\s/$.?#].[^\\s)'\"]*/i,ev=new RegExp(\"(\".concat(/__TURBOPACK__[a-zA-Z0-9_$]+__/g.source,\"|\\\\s+)\")),eb=function(e){var n=e.text,t=e.matcher,r=n.split(ev);return(0,y.jsx)(y.Fragment,{children:r.map(function(e,n){if(em.test(e)){var r=em.exec(e)[0];return\"function\"!=typeof t||t(r)?(0,y.jsx)(x.Fragment,{children:(0,y.jsx)(\"a\",{href:r,target:\"_blank\",rel:\"noreferrer noopener\",children:e})},\"link-\".concat(n)):e}try{var o=function(e){var n=e.match(eg);if(!n)return e;for(var t=n[1],r=\"\",o=0,a=\"\",i=0;i<t.length;i++){var l=t[i];if(0===o)\"_\"===l?o=1:\"$\"===l?o=2:r+=l;else if(1===o)\"_\"===l?(r+=\" \",o=0):\"$\"===l?(r+=\"_\",o=2):(r+=l,o=0);else if(2===o)if(2===a.length&&(r+=eh(a),a=\"\"),\"_\"===l){if(\"\"!==a)throw Error(\"invalid hex: `\".concat(a,\"`\"));o=3}else if(\"$\"===l){if(\"\"!==a)throw Error(\"invalid hex: `\".concat(a,\"`\"));o=0}else a+=l;else if(3===o)if(\"_\"===l)throw Error(\"invalid hex: `\".concat(a+l,\"`\"));else\"$\"===l?(r+=eh(a),a=\"\",o=0):a+=l}return r}(e);if(o!==e)return(0,y.jsxs)(\"i\",{children:[\"{\",o,\"}\"]},\"ident-\".concat(n))}catch(t){return(0,y.jsxs)(\"i\",{children:[\"{\",e,\" (decoding failed: \",\"\"+t,\")\",\"}\"]},\"ident-\".concat(n))}return(0,y.jsx)(x.Fragment,{children:e},\"text-\".concat(n))})})},ey=[/^webpack-internal:\\/\\/\\/(\\([\\w-]+\\)\\/)?/,/^(webpack:\\/\\/\\/|webpack:\\/\\/(_N_E\\/)?)(\\([\\w-]+\\)\\/)?/];function ex(e){var n=!0,t=!1,r=void 0;try{for(var o,a=ey[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var i=o.value;if(i.test(e))return!0;e=e.replace(i,\"\")}}catch(e){t=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(t)throw r}}return!1}function ew(e){var n=!0,t=!1,r=void 0;try{for(var o,a=ey[Symbol.iterator]();!(n=(o=a.next()).done);n=!0){var i=o.value;e=e.replace(i,\"\")}}catch(e){t=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(t)throw r}}return e}function ej(e,n,t,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){t(e);return}l.done?n(s):Promise.resolve(s).then(r,o)}function ek(e){return function(){var n=this,t=arguments;return new Promise(function(r,o){var a=e.apply(n,t);function i(e){ej(a,r,o,i,l,\"next\",e)}function l(e){ej(a,r,o,i,l,\"throw\",e)}i(void 0)})}}function eA(e,n){var t,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){var c=[l,s];if(t)throw TypeError(\"Generator is already executing.\");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(t=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=n.call(e,a)}catch(e){c=[6,e],r=0}finally{t=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function eO(e,n){var t;return\"file://\"===e.file||(null==(t=e.file)?void 0:t.match(/https?:\\/\\//))?Promise.resolve({error:!1,reason:null,external:!0,sourceStackFrame:e,originalStackFrame:null,originalCodeFrame:null,ignored:!0}):ek(function(){var t,r;return eA(this,function(o){if(\"rejected\"===n.status)throw Error(n.reason);return[2,{error:!1,reason:null,external:!1,sourceStackFrame:e,originalStackFrame:(r=n.value).originalStackFrame,originalCodeFrame:r.originalCodeFrame||null,ignored:(null==(t=r.originalStackFrame)?void 0:t.ignored)||!1}]})})().catch(function(n){var t,r;return{error:!0,reason:null!=(r=null!=(t=null==n?void 0:n.message)?t:null==n?void 0:n.toString())?r:\"Unknown Error\",external:!1,sourceStackFrame:e,originalStackFrame:null,originalCodeFrame:null,ignored:!1}})}function eC(e,n,t){return ek(function(){var r,o,a,i;return eA(this,function(l){switch(l.label){case 0:r={frames:e,isServer:\"server\"===n,isEdgeServer:\"edge-server\"===n,isAppDirectory:t},o=void 0,a=void 0,l.label=1;case 1:return l.trys.push([1,3,,4]),[4,fetch(\"/__nextjs_original-stack-frames\",{method:\"POST\",body:JSON.stringify(r)})];case 2:return o=l.sent(),[3,4];case 3:return a=l.sent()+\"\",[3,4];case 4:if(!(o&&o.ok&&204!==o.status))return[3,6];return[4,o.json()];case 5:return i=l.sent(),[2,Promise.all(e.map(function(e,n){return eO(e,i[n])}))];case 6:if(!o)return[3,8];return[4,o.text()];case 7:a=l.sent(),l.label=8;case 8:return[2,Promise.all(e.map(function(e){return eO(e,{status:\"rejected\",reason:\"Failed to fetch the original stack frames \".concat(a?\": \".concat(a):\"\")})}))]}})})()}function eS(e){if(!e.file)return\"\";var n=ex(e.file),t=\"\";if(n)t=ew(e.file);else try{var r,o=new URL(e.file),a=\"\";(null==(r=globalThis.location)?void 0:r.origin)!==o.origin&&(\"null\"===o.origin?a+=o.protocol:a+=o.origin),a+=o.pathname,t=ew(a)}catch(n){t=ew(e.file)}return!ex(e.file)&&null!=e.lineNumber&&t&&\"<anonymous>\"!==e.file&&(null!=e.column?t+=\" (\".concat(e.lineNumber,\":\").concat(e.column,\")\"):t+=\" (\".concat(e.lineNumber,\")\")),t}function eE(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.file,t=e.lineNumber,r=e.column;return(0,x.useCallback)(function(){if(null!=n&&null!=t&&null!=r){var e=new URLSearchParams;e.append(\"file\",n),e.append(\"lineNumber\",String(t)),e.append(\"column\",String(r)),self.fetch(\"\".concat( false||\"\",\"/__nextjs_launch-editor?\").concat(e.toString())).then(function(){},function(e){console.error('Failed to open file \"'.concat(n,\" (\").concat(t,\":\").concat(r,')\" in your editor. Cause:'),e)})}},[n,t,r])}function e_(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function eP(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function ez(e){return(0,y.jsx)(\"svg\",eP(e_({xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\"},e),{children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",fill:\"currentColor\",d:\"M11.5 9.75V11.25C11.5 11.3881 11.3881 11.5 11.25 11.5H4.75C4.61193 11.5 4.5 11.3881 4.5 11.25L4.5 4.75C4.5 4.61193 4.61193 4.5 4.75 4.5H6.25H7V3H6.25H4.75C3.7835 3 3 3.7835 3 4.75V11.25C3 12.2165 3.7835 13 4.75 13H11.25C12.2165 13 13 12.2165 13 11.25V9.75V9H11.5V9.75ZM8.5 3H9.25H12.2495C12.6637 3 12.9995 3.33579 12.9995 3.75V6.75V7.5H11.4995V6.75V5.56066L8.53033 8.52978L8 9.06011L6.93934 7.99945L7.46967 7.46912L10.4388 4.5H9.25H8.5V3Z\"})}))}function eL(e){return(0,y.jsx)(\"svg\",eP(e_({xmlns:\"http://www.w3.org/2000/svg\",height:\"16\",strokeLinejoin:\"round\",viewBox:\"-4 -4 24 24\",width:\"16\"},e),{children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M8.55846 2H7.44148L1.88975 13.5H14.1102L8.55846 2ZM9.90929 1.34788C9.65902 0.829456 9.13413 0.5 8.55846 0.5H7.44148C6.86581 0.5 6.34092 0.829454 6.09065 1.34787L0.192608 13.5653C-0.127943 14.2293 0.355835 15 1.09316 15H14.9068C15.6441 15 16.1279 14.2293 15.8073 13.5653L9.90929 1.34788ZM8.74997 4.75V5.5V8V8.75H7.24997V8V5.5V4.75H8.74997ZM7.99997 12C8.55226 12 8.99997 11.5523 8.99997 11C8.99997 10.4477 8.55226 10 7.99997 10C7.44769 10 6.99997 10.4477 6.99997 11C6.99997 11.5523 7.44769 12 7.99997 12Z\",fill:\"currentColor\"})}))}function eT(e){var n=e.lang;if(!n)return(0,y.jsx)(eB,{});switch(n.toLowerCase()){case\"jsx\":case\"tsx\":return(0,y.jsx)(eM,{});case\"ts\":case\"typescript\":return(0,y.jsx)(eD,{});case\"javascript\":case\"js\":case\"mjs\":return(0,y.jsx)(eN,{});case\"json\":return(0,y.jsx)(eR,{});default:return(0,y.jsx)(eB,{})}}function eR(){return(0,y.jsx)(\"svg\",{clipRule:\"evenodd\",fillRule:\"evenodd\",height:\"16\",viewBox:\"0 0 1321.45 1333.33\",width:\"16\",children:(0,y.jsx)(\"path\",{d:\"M221.37 618.44h757.94V405.15H755.14c-23.5 0-56.32-12.74-71.82-28.24-15.5-15.5-25-43.47-25-66.97V82.89H88.39c-1.99 0-3.49 1-4.49 2-1.5 1-2 2.5-2 4.5v1155.04c0 1.5 1 3.5 2 4.5 1 1.49 3 1.99 4.49 1.99H972.8c2 0 1.89-.99 2.89-1.99 1.5-1 3.61-3 3.61-4.5v-121.09H221.36c-44.96 0-82-36.9-82-81.99V700.44c0-45.1 36.9-82 82-82zm126.51 117.47h75.24v146.61c0 30.79-2.44 54.23-7.33 70.31-4.92 16.03-14.8 29.67-29.65 40.85-14.86 11.12-33.91 16.72-57.05 16.72-24.53 0-43.51-3.71-56.94-11.06-13.5-7.36-23.89-18.1-31.23-32.3-7.35-14.14-11.69-31.67-12.99-52.53l71.5-10.81c.11 11.81 1.07 20.61 2.81 26.33 1.76 5.78 4.75 10.37 9 13.95 2.87 2.33 6.94 3.46 12.25 3.46 8.4 0 14.58-3.46 18.53-10.37 3.9-6.92 5.87-18.6 5.87-35V735.92zm112.77 180.67l71.17-4.97c1.54 12.81 4.69 22.62 9.44 29.28 7.74 10.88 18.74 16.34 33.09 16.34 10.68 0 18.93-2.76 24.68-8.36 5.81-5.58 8.7-12.07 8.7-19.41 0-6.97-2.71-13.26-8.2-18.79-5.47-5.53-18.23-10.68-38.28-15.65-32.89-8.17-56.27-19.1-70.26-32.74-14.12-13.57-21.18-30.92-21.18-52.03 0-13.83 3.61-26.89 10.85-39.21 7.22-12.38 18.07-22.06 32.59-29.09 14.52-7.04 34.4-10.56 59.65-10.56 31 0 54.62 6.41 70.88 19.29 16.28 12.81 25.92 33.24 29.04 61.27l-70.5 4.65c-1.87-12.25-5.81-21.17-11.81-26.7-6.05-5.6-14.35-8.36-24.9-8.36-8.71 0-15.31 2.07-19.73 6.16-4.4 4.09-6.59 9.12-6.59 15.02 0 4.27 1.81 8.11 5.37 11.57 3.45 3.59 11.8 6.85 25.02 9.93 32.75 7.86 56.2 15.84 70.31 23.87 14.18 8.05 24.52 17.98 30.96 29.92 6.44 11.88 9.66 25.2 9.66 39.96 0 17.29-4.3 33.24-12.88 47.89-8.63 14.58-20.61 25.7-36.08 33.24-15.41 7.54-34.85 11.31-58.33 11.31-41.24 0-69.81-8.86-85.68-26.52-15.88-17.65-24.85-40.09-26.96-67.3zm248.74-45.5c0-44.05 11.02-78.36 33.09-102.87 22.09-24.57 52.82-36.82 92.24-36.82 40.38 0 71.5 12.07 93.34 36.13 21.86 24.13 32.77 57.94 32.77 101.37 0 31.54-4.75 57.36-14.3 77.54-9.54 20.18-23.37 35.89-41.4 47.13-18.07 11.24-40.55 16.84-67.48 16.84-27.33 0-49.99-4.83-67.94-14.52-17.92-9.74-32.49-25.07-43.62-46.06-11.13-20.92-16.72-47.19-16.72-78.74zm74.89.19c0 27.21 4.57 46.81 13.68 58.68 9.13 11.88 21.57 17.85 37.26 17.85 16.1 0 28.65-5.84 37.45-17.47 8.87-11.68 13.28-32.54 13.28-62.77 0-25.39-4.63-43.92-13.84-55.61-9.26-11.76-21.75-17.6-37.56-17.6-15.13 0-27.34 5.97-36.49 17.85-9.21 11.88-13.78 31.61-13.78 59.07zm209.08-135.36h69.99l90.98 149.05V735.91h70.83v269.96h-70.83l-90.48-148.24v148.24h-70.49V735.91zm67.71-117.47h178.37c45.1 0 82 37.04 82 82v340.91c0 44.96-37.03 81.99-82 81.99h-178.37v147c0 17.5-6.99 32.99-18.5 44.5-11.5 11.49-27 18.5-44.5 18.5H62.97c-17.5 0-32.99-7-44.5-18.5-11.49-11.5-18.5-27-18.5-44.5V63.49c0-17.5 7-33 18.5-44.5S45.97.49 62.97.49H700.1c1.5-.5 3-.5 4.5-.5 7 0 14 3 19 7.49h1c1 .5 1.5 1 2.5 2l325.46 329.47c5.5 5.5 9.5 13 9.5 21.5 0 2.5-.5 4.5-1 7v250.98zM732.61 303.47V96.99l232.48 235.47H761.6c-7.99 0-14.99-3.5-20.5-8.49-4.99-5-8.49-12.5-8.49-20.5z\",fill:\"currentColor\"})})}function eN(){return(0,y.jsx)(\"svg\",{height:\"16\",viewBox:\"0 0 50 50\",width:\"16\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,y.jsx)(\"path\",{d:\"M 43.335938 4 L 6.667969 4 C 5.195313 4 4 5.195313 4 6.667969 L 4 43.332031 C 4 44.804688 5.195313 46 6.667969 46 L 43.332031 46 C 44.804688 46 46 44.804688 46 43.335938 L 46 6.667969 C 46 5.195313 44.804688 4 43.335938 4 Z M 27 36.183594 C 27 40.179688 24.65625 42 21.234375 42 C 18.140625 42 15.910156 39.925781 15 38 L 18.144531 36.097656 C 18.75 37.171875 19.671875 38 21 38 C 22.269531 38 23 37.503906 23 35.574219 L 23 23 L 27 23 Z M 35.675781 42 C 32.132813 42 30.121094 40.214844 29 38 L 32 36 C 32.816406 37.335938 33.707031 38.613281 35.589844 38.613281 C 37.171875 38.613281 38 37.824219 38 36.730469 C 38 35.425781 37.140625 34.960938 35.402344 34.199219 L 34.449219 33.789063 C 31.695313 32.617188 29.863281 31.148438 29.863281 28.039063 C 29.863281 25.179688 32.046875 23 35.453125 23 C 37.878906 23 39.621094 23.84375 40.878906 26.054688 L 37.910156 27.964844 C 37.253906 26.789063 36.550781 26.328125 35.453125 26.328125 C 34.335938 26.328125 33.628906 27.039063 33.628906 27.964844 C 33.628906 29.109375 34.335938 29.570313 35.972656 30.28125 L 36.925781 30.691406 C 40.171875 32.078125 42 33.496094 42 36.683594 C 42 40.117188 39.300781 42 35.675781 42 Z\",fill:\"currentColor\"})})}function eD(){return(0,y.jsxs)(\"svg\",{fill:\"none\",height:\"14\",viewBox:\"0 0 512 512\",width:\"14\",xmlns:\"http://www.w3.org/2000/svg\",children:[(0,y.jsx)(\"rect\",{fill:\"currentColor\",height:\"512\",rx:\"50\",width:\"512\"}),(0,y.jsx)(\"rect\",{fill:\"currentColor\",height:\"512\",rx:\"50\",width:\"512\"}),(0,y.jsx)(\"path\",{clipRule:\"evenodd\",d:\"m316.939 407.424v50.061c8.138 4.172 17.763 7.3 28.875 9.386s22.823 3.129 35.135 3.129c11.999 0 23.397-1.147 34.196-3.442 10.799-2.294 20.268-6.075 28.406-11.342 8.138-5.266 14.581-12.15 19.328-20.65s7.121-19.007 7.121-31.522c0-9.074-1.356-17.026-4.069-23.857s-6.625-12.906-11.738-18.225c-5.112-5.319-11.242-10.091-18.389-14.315s-15.207-8.213-24.18-11.967c-6.573-2.712-12.468-5.345-17.685-7.9-5.217-2.556-9.651-5.163-13.303-7.822-3.652-2.66-6.469-5.476-8.451-8.448-1.982-2.973-2.974-6.336-2.974-10.091 0-3.441.887-6.544 2.661-9.308s4.278-5.136 7.512-7.118c3.235-1.981 7.199-3.52 11.894-4.615 4.696-1.095 9.912-1.642 15.651-1.642 4.173 0 8.581.313 13.224.938 4.643.626 9.312 1.591 14.008 2.894 4.695 1.304 9.259 2.947 13.694 4.928 4.434 1.982 8.529 4.276 12.285 6.884v-46.776c-7.616-2.92-15.937-5.084-24.962-6.492s-19.381-2.112-31.066-2.112c-11.895 0-23.163 1.278-33.805 3.833s-20.006 6.544-28.093 11.967c-8.086 5.424-14.476 12.333-19.171 20.729-4.695 8.395-7.043 18.433-7.043 30.114 0 14.914 4.304 27.638 12.912 38.172 8.607 10.533 21.675 19.45 39.204 26.751 6.886 2.816 13.303 5.579 19.25 8.291s11.086 5.528 15.415 8.448c4.33 2.92 7.747 6.101 10.252 9.543 2.504 3.441 3.756 7.352 3.756 11.733 0 3.233-.783 6.231-2.348 8.995s-3.939 5.162-7.121 7.196-7.147 3.624-11.894 4.771c-4.748 1.148-10.303 1.721-16.668 1.721-10.851 0-21.597-1.903-32.24-5.71-10.642-3.806-20.502-9.516-29.579-17.13zm-84.159-123.342h64.22v-41.082h-179v41.082h63.906v182.918h50.874z\",fill:\"var(--color-background-100)\",fillRule:\"evenodd\"})]})}function eB(){return(0,y.jsx)(\"svg\",{width:\"16\",height:\"17\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M14.5 7v7a2.5 2.5 0 0 1-2.5 2.5H4A2.5 2.5 0 0 1 1.5 14V.5h7.586a1 1 0 0 1 .707.293l4.414 4.414a1 1 0 0 1 .293.707V7zM13 7v7a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2h5v5h5zM9.5 2.621V5.5h2.879L9.5 2.621z\",fill:\"currentColor\"})})}function eM(){return(0,y.jsxs)(\"svg\",{height:\"16\",strokeLinejoin:\"round\",viewBox:\"0 0 16 16\",width:\"16\",children:[(0,y.jsx)(\"g\",{clipPath:\"url(#file_react_clip0_872_3183)\",children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M4.5 1.93782C4.70129 1.82161 4.99472 1.7858 5.41315 1.91053C5.83298 2.03567 6.33139 2.31073 6.87627 2.73948C7.01136 2.84578 7.14803 2.96052 7.28573 3.08331C6.86217 3.53446 6.44239 4.04358 6.03752 4.60092C5.35243 4.67288 4.70164 4.78186 4.09916 4.92309C4.06167 4.74244 4.03064 4.56671 4.00612 4.39656C3.90725 3.71031 3.91825 3.14114 4.01979 2.71499C4.12099 2.29025 4.29871 2.05404 4.5 1.93782ZM7.49466 1.95361C7.66225 2.08548 7.83092 2.22804 7.99999 2.38067C8.16906 2.22804 8.33773 2.08548 8.50532 1.95361C9.10921 1.47842 9.71982 1.12549 10.3012 0.952202C10.8839 0.778496 11.4838 0.7738 12 1.0718C12.5161 1.3698 12.812 1.89169 12.953 2.48322C13.0936 3.07333 13.0932 3.77858 12.9836 4.53917C12.9532 4.75024 12.9141 4.9676 12.8665 5.19034C13.0832 5.26044 13.291 5.33524 13.489 5.41444C14.2025 5.69983 14.8134 6.05217 15.2542 6.46899C15.696 6.8868 16 7.404 16 8C16 8.596 15.696 9.11319 15.2542 9.53101C14.8134 9.94783 14.2025 10.3002 13.489 10.5856C13.291 10.6648 13.0832 10.7396 12.8665 10.8097C12.9141 11.0324 12.9532 11.2498 12.9837 11.4608C13.0932 12.2214 13.0936 12.9267 12.953 13.5168C12.812 14.1083 12.5161 14.6302 12 14.9282C11.4839 15.2262 10.8839 15.2215 10.3012 15.0478C9.71984 14.8745 9.10923 14.5216 8.50534 14.0464C8.33775 13.9145 8.16906 13.7719 7.99999 13.6193C7.83091 13.7719 7.66223 13.9145 7.49464 14.0464C6.89075 14.5216 6.28014 14.8745 5.69879 15.0478C5.11605 15.2215 4.51613 15.2262 3.99998 14.9282C3.48383 14.6302 3.18794 14.1083 3.047 13.5168C2.9064 12.9267 2.90674 12.2214 3.01632 11.4608C3.04673 11.2498 3.08586 11.0324 3.13351 10.8097C2.91679 10.7395 2.709 10.6648 2.511 10.5856C1.79752 10.3002 1.18658 9.94783 0.745833 9.53101C0.304028 9.11319 0 8.596 0 8C0 7.404 0.304028 6.8868 0.745833 6.46899C1.18658 6.05217 1.79752 5.69983 2.511 5.41444C2.709 5.33524 2.9168 5.26044 3.13352 5.19034C3.08587 4.9676 3.04675 4.75024 3.01634 4.53917C2.90676 3.77858 2.90642 3.07332 3.04702 2.48321C3.18796 1.89169 3.48385 1.3698 4 1.0718C4.51615 0.773798 5.11607 0.778495 5.69881 0.952201C6.28016 1.12549 6.89077 1.47841 7.49466 1.95361ZM7.36747 4.51025C7.57735 4.25194 7.78881 4.00927 7.99999 3.78356C8.21117 4.00927 8.42263 4.25194 8.63251 4.51025C8.42369 4.50346 8.21274 4.5 8 4.5C7.78725 4.5 7.5763 4.50345 7.36747 4.51025ZM8.71425 3.08331C9.13781 3.53447 9.55759 4.04358 9.96246 4.60092C10.6475 4.67288 11.2983 4.78186 11.9008 4.92309C11.9383 4.74244 11.9693 4.56671 11.9939 4.39657C12.0927 3.71031 12.0817 3.14114 11.9802 2.71499C11.879 2.29025 11.7013 2.05404 11.5 1.93782C11.2987 1.82161 11.0053 1.7858 10.5868 1.91053C10.167 2.03568 9.66859 2.31073 9.12371 2.73948C8.98862 2.84578 8.85196 2.96052 8.71425 3.08331ZM8 5.5C8.48433 5.5 8.95638 5.51885 9.41188 5.55456C9.67056 5.93118 9.9229 6.33056 10.1651 6.75C10.4072 7.16944 10.6269 7.58766 10.8237 7.99998C10.6269 8.41232 10.4072 8.83055 10.165 9.25C9.92288 9.66944 9.67053 10.0688 9.41185 10.4454C8.95636 10.4812 8.48432 10.5 8 10.5C7.51567 10.5 7.04363 10.4812 6.58813 10.4454C6.32945 10.0688 6.0771 9.66944 5.83494 9.25C5.59277 8.83055 5.37306 8.41232 5.17624 7.99998C5.37306 7.58765 5.59275 7.16944 5.83492 6.75C6.07708 6.33056 6.32942 5.93118 6.5881 5.55456C7.04361 5.51884 7.51566 5.5 8 5.5ZM11.0311 6.25C11.1375 6.43423 11.2399 6.61864 11.3385 6.80287C11.4572 6.49197 11.5616 6.18752 11.6515 5.89178C11.3505 5.82175 11.0346 5.75996 10.706 5.70736C10.8163 5.8848 10.9247 6.06576 11.0311 6.25ZM11.0311 9.75C11.1374 9.56576 11.2399 9.38133 11.3385 9.19709C11.4572 9.50801 11.5617 9.81246 11.6515 10.1082C11.3505 10.1782 11.0346 10.24 10.7059 10.2926C10.8162 10.1152 10.9247 9.93424 11.0311 9.75ZM11.9249 7.99998C12.2051 8.62927 12.4362 9.24738 12.6151 9.83977C12.7903 9.78191 12.958 9.72092 13.1176 9.65708C13.7614 9.39958 14.2488 9.10547 14.5671 8.80446C14.8843 8.50445 15 8.23243 15 8C15 7.76757 14.8843 7.49555 14.5671 7.19554C14.2488 6.89453 13.7614 6.60042 13.1176 6.34292C12.958 6.27907 12.7903 6.21808 12.6151 6.16022C12.4362 6.7526 12.2051 7.37069 11.9249 7.99998ZM9.96244 11.3991C10.6475 11.3271 11.2983 11.2181 11.9008 11.0769C11.9383 11.2576 11.9694 11.4333 11.9939 11.6034C12.0928 12.2897 12.0817 12.8589 11.9802 13.285C11.879 13.7098 11.7013 13.946 11.5 14.0622C11.2987 14.1784 11.0053 14.2142 10.5868 14.0895C10.167 13.9643 9.66861 13.6893 9.12373 13.2605C8.98863 13.1542 8.85196 13.0395 8.71424 12.9167C9.1378 12.4655 9.55758 11.9564 9.96244 11.3991ZM8.63249 11.4898C8.42262 11.7481 8.21116 11.9907 7.99999 12.2164C7.78881 11.9907 7.57737 11.7481 7.36749 11.4897C7.57631 11.4965 7.78726 11.5 8 11.5C8.21273 11.5 8.42367 11.4965 8.63249 11.4898ZM4.96891 9.75C5.07528 9.93424 5.18375 10.1152 5.29404 10.2926C4.9654 10.24 4.64951 10.1782 4.34844 10.1082C4.43833 9.81246 4.54276 9.508 4.66152 9.19708C4.76005 9.38133 4.86254 9.56575 4.96891 9.75ZM6.03754 11.3991C5.35244 11.3271 4.70163 11.2181 4.09914 11.0769C4.06165 11.2576 4.03062 11.4333 4.0061 11.6034C3.90723 12.2897 3.91823 12.8589 4.01977 13.285C4.12097 13.7098 4.29869 13.946 4.49998 14.0622C4.70127 14.1784 4.9947 14.2142 5.41313 14.0895C5.83296 13.9643 6.33137 13.6893 6.87625 13.2605C7.01135 13.1542 7.14802 13.0395 7.28573 12.9167C6.86217 12.4655 6.4424 11.9564 6.03754 11.3991ZM4.07507 7.99998C3.79484 8.62927 3.56381 9.24737 3.38489 9.83977C3.20969 9.78191 3.042 9.72092 2.88239 9.65708C2.23864 9.39958 1.75123 9.10547 1.43294 8.80446C1.11571 8.50445 1 8.23243 1 8C1 7.76757 1.11571 7.49555 1.43294 7.19554C1.75123 6.89453 2.23864 6.60042 2.88239 6.34292C3.042 6.27907 3.2097 6.21808 3.3849 6.16022C3.56383 6.75261 3.79484 7.37069 4.07507 7.99998ZM4.66152 6.80287C4.54277 6.49197 4.43835 6.18752 4.34846 5.89178C4.64952 5.82175 4.96539 5.75996 5.29402 5.70736C5.18373 5.8848 5.07526 6.06576 4.96889 6.25C4.86253 6.43423 4.76005 6.61864 4.66152 6.80287ZM9.25 8C9.25 8.69036 8.69036 9.25 8 9.25C7.30964 9.25 6.75 8.69036 6.75 8C6.75 7.30965 7.30964 6.75 8 6.75C8.69036 6.75 9.25 7.30965 9.25 8Z\",fill:\"currentColor\"})}),(0,y.jsx)(\"defs\",{children:(0,y.jsx)(\"clipPath\",{id:\"file_react_clip0_872_3183\",children:(0,y.jsx)(\"rect\",{width:\"16\",height:\"16\",fill:\"white\"})})})]})}var eI=__nested_webpack_require_381207__(\"./dist/compiled/anser/index.js\"),eH=__nested_webpack_require_381207__.n(eI),eF=__nested_webpack_require_381207__(\"./dist/compiled/strip-ansi/index.js\"),eU=__nested_webpack_require_381207__.n(eF);function eV(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function eq(e){var n,t=e.stackFrame,r=e.codeFrame,o=(0,x.useMemo)(function(){var e,n;return(function(e){var n=eH().ansiToJson(e,{json:!0,use_classes:!0,remove_empty:!0}),t=[],r=[],o=!0,a=!1,i=void 0;try{for(var l,s=n[Symbol.iterator]();!(o=(l=s.next()).done);o=!0){var c=l.value;if(\"string\"==typeof c.content&&c.content.includes(\"\\n\"))for(var u=c.content.split(\"\\n\"),d=0;d<u.length;d++){var f=u[d];f&&r.push(function(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},c),{content:f})),d<u.length-1&&(t.push(r),r=[])}else r.push(c)}}catch(e){a=!0,i=e}finally{try{o||null==s.return||s.return()}finally{if(a)throw i}}return r.length>0&&t.push(r),t})((n=(e=r.split(/\\r?\\n/g)).map(function(e){return null===/^>? +\\d+ +\\| [ ]+/.exec(eU()(e))?null:/^>? +\\d+ +\\| ( *)/.exec(eU()(e))}).filter(Boolean).map(function(e){return e.pop()}).reduce(function(e,n){return isNaN(e)?n.length:Math.min(e,n.length)},NaN))>1?e.map(function(e,t){return~(t=e.indexOf(\"|\"))?e.substring(0,t)+e.substring(t).replace(\"^\\\\ {\".concat(n,\"}\"),\"\"):e}).join(\"\\n\"):e.join(\"\\n\")).map(function(e){var n,r,o,a,i,l,s,c,u;return{line:e,parsedLine:(n=e,r=t,((null==(o=n[0])?void 0:o.content)===\">\"||(null==(a=n[0])?void 0:a.content)===\" \")&&(s=null==(l=n[1])||null==(u=l.content)||null==(c=u.replace(\"|\",\"\"))?void 0:c.trim()),{lineNumber:s,isErroredLine:s===(null==(i=r.lineNumber)?void 0:i.toString())})}})},[r,t]),a=eE({file:t.file,lineNumber:t.lineNumber,column:t.column}),i=null==t||null==(n=t.file)?void 0:n.split(\".\").pop();return(0,y.jsxs)(\"div\",{\"data-nextjs-codeframe\":!0,children:[(0,y.jsx)(\"div\",{className:\"code-frame-header\",children:(0,y.jsxs)(\"p\",{className:\"code-frame-link\",children:[(0,y.jsx)(\"span\",{className:\"code-frame-icon\",children:(0,y.jsx)(eT,{lang:i})}),(0,y.jsxs)(\"span\",{\"data-text\":!0,children:[eS(t),\" @\",\" \",(0,y.jsx)(eb,{text:t.methodName})]}),(0,y.jsx)(\"button\",{\"aria-label\":\"Open in editor\",\"data-with-open-in-editor-link-source-file\":!0,onClick:a,children:(0,y.jsx)(\"span\",{className:\"code-frame-icon\",\"data-icon\":\"right\",children:(0,y.jsx)(ez,{width:16,height:16})})})]})}),(0,y.jsx)(\"pre\",{className:\"code-frame-pre\",children:(0,y.jsx)(\"div\",{className:\"code-frame-lines\",children:o.map(function(e,n){var t,r,o=e.line,a=e.parsedLine,i=a.lineNumber,l=a.isErroredLine,s={};return i&&(s[\"data-nextjs-codeframe-line\"]=i),l&&(s[\"data-nextjs-codeframe-line--errored\"]=!0),(0,y.jsx)(\"div\",(t=eV({},s),r=r={children:o.map(function(e,n){return(0,y.jsx)(\"span\",{style:eV({color:e.fg?\"var(--color-\".concat(e.fg,\")\"):void 0},\"bold\"===e.decoration?{fontWeight:500}:\"italic\"===e.decoration?{fontStyle:\"italic\"}:void 0),children:e.content},\"frame-\".concat(n))})},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t),\"line-\".concat(n))})})})]})}function eW(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}var e$=[\"[data-next-mark]\",\"[data-issues-open]\",\"#nextjs-dev-tools-menu\",\"[data-nextjs-error-overlay-nav]\",\"[data-info-popover]\",\"[data-nextjs-devtools-panel-overlay]\",\"[data-nextjs-devtools-panel-footer]\",\"[data-nextjs-error-overlay-footer]\"],eZ=function(e){var n,t,r,o,a,i,l,s=e.children,c=e.className,u=e.onClose,d=e[\"aria-labelledby\"],f=e[\"aria-describedby\"],p=(e.dialogResizerRef,function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\",\"className\",\"onClose\",\"aria-labelledby\",\"aria-describedby\",\"dialogResizerRef\"])),h=x.useRef(null),g=(n=x.useState(\"undefined\"!=typeof document&&document.hasFocus()?\"dialog\":void 0),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return eW(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return eW(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),m=g[0],v=g[1];return r=h.current,o=e$,a=function(e){return e.preventDefault(),null==u?void 0:u()},x.useEffect(function(){if(null!=r&&null!=a){var e=function(e){!(!r||r.contains(e.target))&&(o.some(function(n){return e.target.closest(n)})||a(e))},n=r.getRootNode();return n.addEventListener(\"mouseup\",e),n.addEventListener(\"touchend\",e,{passive:!1}),function(){n.removeEventListener(\"mouseup\",e),n.removeEventListener(\"touchend\",e)}}},[a,r,o]),x.useEffect(function(){var e=function(){v(document.hasFocus()?\"dialog\":void 0)};if(null!=h.current)return window.addEventListener(\"focus\",e),window.addEventListener(\"blur\",e),function(){window.removeEventListener(\"focus\",e),window.removeEventListener(\"blur\",e)}},[]),x.useEffect(function(){var e,n,t=h.current,r=null==t?void 0:t.getRootNode(),o=(e=r,null!=(n=ShadowRoot)&&\"undefined\"!=typeof Symbol&&n[Symbol.hasInstance]?!!n[Symbol.hasInstance](e):e instanceof n)?null==r?void 0:r.activeElement:null;return null==t||t.focus(),function(){null==t||t.blur(),null==o||o.focus()}},[]),(0,y.jsx)(\"div\",(i=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({ref:h,tabIndex:-1,\"data-nextjs-dialog\":!0,role:m,\"aria-labelledby\":d,\"aria-describedby\":f,\"aria-modal\":\"true\",className:c,onKeyDown:function(e){\"Escape\"===e.key&&(null==u||u())}},p),l=l={children:s},Object.getOwnPropertyDescriptors?Object.defineProperties(i,Object.getOwnPropertyDescriptors(l)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(l)).forEach(function(e){Object.defineProperty(i,e,Object.getOwnPropertyDescriptor(l,e))}),i))},eY=function(e){var n,t,r=e.children,o=e.className,a=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\",\"className\"]);return(0,y.jsx)(\"div\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-body\":!0,className:o},a),t=t={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))},eX=function(e){var n,t,r=e.children,o=e.className,a=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\",\"className\"]);return(0,y.jsx)(\"div\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-content\":!0,className:o},a),t=t={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))};function eK(e){var n,t;return(0,y.jsx)(\"div\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-header\":!0},e),t=t={children:e.children},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function eQ(){var e,n,t=(e=[\"\\n  [data-nextjs-dialog-root] {\\n    --next-dialog-radius: var(--rounded-xl);\\n    --next-dialog-max-width: 960px;\\n    --next-dialog-row-padding: 16px;\\n    --next-dialog-padding: 12px;\\n    --next-dialog-notch-height: 42px;\\n    --next-dialog-border-width: 1px;\\n\\n    display: flex;\\n    flex-direction: column;\\n    width: 100%;\\n    max-height: calc(100% - 56px);\\n    max-width: var(--next-dialog-max-width);\\n    margin-right: auto;\\n    margin-left: auto;\\n    scale: 0.97;\\n    opacity: 0;\\n    transition-property: scale, opacity;\\n    transition-duration: var(--transition-duration);\\n    transition-timing-function: var(--timing-overlay);\\n\\n    &[data-rendered='true'] {\\n      opacity: 1;\\n      scale: 1;\\n    }\\n\\n    [data-nextjs-scroll-fader][data-side='top'] {\\n      left: 1px;\\n      top: calc(\\n        var(--next-dialog-notch-height) + var(--next-dialog-border-width)\\n      );\\n      width: calc(100% - var(--next-dialog-padding));\\n      opacity: 0;\\n    }\\n  }\\n\\n  [data-nextjs-dialog] {\\n    outline: 0;\\n  }\\n\\n  [data-nextjs-dialog],\\n  [data-nextjs-dialog] * {\\n    &::-webkit-scrollbar {\\n      width: 6px;\\n      height: 6px;\\n      border-radius: 0 0 1rem 1rem;\\n      margin-bottom: 1rem;\\n    }\\n\\n    &::-webkit-scrollbar-button {\\n      display: none;\\n    }\\n\\n    &::-webkit-scrollbar-track {\\n      border-radius: 0 0 1rem 1rem;\\n      background-color: var(--color-background-100);\\n    }\\n\\n    &::-webkit-scrollbar-thumb {\\n      border-radius: 1rem;\\n      background-color: var(--color-gray-500);\\n    }\\n  }\\n\\n  /* Place overflow: hidden on this so we can break out from [data-nextjs-dialog] */\\n  [data-nextjs-dialog-sizer] {\\n    overflow: hidden;\\n    border-radius: inherit;\\n  }\\n\\n  [data-nextjs-dialog-backdrop] {\\n    opacity: 0;\\n    transition: opacity var(--transition-duration) var(--timing-overlay);\\n  }\\n\\n  [data-nextjs-dialog-overlay] {\\n    margin: 8px;\\n  }\\n\\n  [data-nextjs-dialog-overlay][data-rendered='true']\\n    [data-nextjs-dialog-backdrop] {\\n    opacity: 1;\\n  }\\n\\n  [data-nextjs-dialog-content] {\\n    border: none;\\n    margin: 0;\\n    display: flex;\\n    flex-direction: column;\\n    position: relative;\\n    padding: var(--next-dialog-padding);\\n  }\\n\\n  [data-nextjs-dialog-content] > [data-nextjs-dialog-header] {\\n    flex-shrink: 0;\\n    margin-bottom: 8px;\\n  }\\n\\n  [data-nextjs-dialog-content] > [data-nextjs-dialog-body] {\\n    position: relative;\\n    flex: 1 1 auto;\\n  }\\n\\n  @media (max-height: 812px) {\\n    [data-nextjs-dialog-overlay] {\\n      max-height: calc(100% - 15px);\\n    }\\n  }\\n\\n  @media (min-width: 576px) {\\n    [data-nextjs-dialog-root] {\\n      --next-dialog-max-width: 540px;\\n    }\\n  }\\n\\n  @media (min-width: 768px) {\\n    [data-nextjs-dialog-root] {\\n      --next-dialog-max-width: 720px;\\n    }\\n  }\\n\\n  @media (min-width: 992px) {\\n    [data-nextjs-dialog-root] {\\n      --next-dialog-max-width: 960px;\\n    }\\n  }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return eQ=function(){return t},t}var eG=ei(eQ()),eJ=__nested_webpack_require_381207__(\"./src/next-devtools/dev-overlay/utils/cx.ts\");function e0(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function e1(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function e2(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function e4(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return e0(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return e0(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var e5=\"function\"==typeof x.useActionState?function(e){var n=e4(x.useActionState(function(n,t){return\"reset\"===t?{state:\"initial\"}:\"copy\"===t?navigator.clipboard?navigator.clipboard.writeText(e).then(function(){return{state:\"success\"}},function(e){return{state:\"error\",error:e}}):{state:\"error\",error:\"Copy to clipboard is not supported in this browser\"}:n},{state:\"initial\"}),3),t=n[0],r=n[1],o=n[2];return[t,function(){x.startTransition(function(){r(\"copy\")})},x.useCallback(function(){r(\"reset\")},[r]),o]}:function(e){var n=e4(x.useReducer(function(e,n){return\"reset\"===n.type?{state:\"initial\"}:\"copied\"===n.type?{state:\"success\"}:\"copying\"===n.type?{state:\"pending\"}:\"error\"===n.type?{state:\"error\",error:n.error}:e},{state:\"initial\"}),2),t=n[0],r=n[1],o=x.useCallback(function(){r({type:\"reset\"})},[]),a=\"pending\"===t.state;return[t,function(){a||(navigator.clipboard?(r({type:\"copying\"}),navigator.clipboard.writeText(e).then(function(){r({type:\"copied\"})},function(e){r({type:\"error\",error:e})})):r({type:\"error\",error:\"Copy to clipboard is not supported in this browser\"}))},o,a]};function e3(e){var n=e.actionLabel,t=e.successLabel,r=e.content,o=e.icon,a=e.disabled,i=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"actionLabel\",\"successLabel\",\"content\",\"icon\",\"disabled\"]),l=e4(e5(r),4),s=l[0],c=l[1],u=l[2],d=l[3],f=\"error\"===s.state?s.error:null;x.useEffect(function(){null!==f&&console.warn(f)},[f]),x.useEffect(function(){if(\"success\"===s.state){var e=setTimeout(function(){u()},2e3);return function(){clearTimeout(e)}}},[d,s.state,u]);var p=!navigator.clipboard||d||a||!!f,h=\"success\"===s.state?t:n,g=\"success\"===s.state?(0,y.jsx)(e9,{}):o||(0,y.jsx)(e6,{width:14,height:14,className:\"error-overlay-toolbar-button-icon\"});return(0,y.jsxs)(\"button\",e2(e1({},i),{type:\"button\",title:h,\"aria-label\":h,\"aria-disabled\":p,disabled:p,\"data-nextjs-copy-button\":!0,className:(0,eJ.cx)(i.className,\"nextjs-data-copy-button\",\"nextjs-data-copy-button--\".concat(s.state)),onClick:function(){p||c()},children:[g,\"error\"===s.state?\" \".concat(s.error):null]}))}function e6(e){return(0,y.jsx)(\"svg\",e2(e1({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M2.406.438c-.845 0-1.531.685-1.531 1.53v6.563c0 .846.686 1.531 1.531 1.531H3.937V8.75H2.406a.219.219 0 0 1-.219-.219V1.97c0-.121.098-.219.22-.219h4.812c.12 0 .218.098.218.219v.656H8.75v-.656c0-.846-.686-1.532-1.531-1.532H2.406zm4.375 3.5c-.845 0-1.531.685-1.531 1.53v6.563c0 .846.686 1.531 1.531 1.531h4.813c.845 0 1.531-.685 1.531-1.53V5.468c0-.846-.686-1.532-1.531-1.532H6.78zm-.218 1.53c0-.12.097-.218.218-.218h4.813c.12 0 .219.098.219.219v6.562c0 .121-.098.219-.22.219H6.782a.219.219 0 0 1-.218-.219V5.47z\",fill:\"currentColor\"})}))}function e9(){return(0,y.jsx)(\"svg\",{height:\"16\",xlinkTitle:\"copied\",viewBox:\"0 0 16 16\",width:\"16\",stroke:\"currentColor\",fill:\"currentColor\",children:(0,y.jsx)(\"path\",{d:\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"})})}function e8(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function e7(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}var ne=function(){if(\"undefined\"==typeof window)return!1;var e=\"chrome\"in window&&window.chrome,n=window.navigator.vendor;return null!=e&&\"Google Inc.\"===n}();function nn(e){return(0,y.jsxs)(\"svg\",e7(e8({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:[(0,y.jsx)(\"mask\",{id:\"nodejs_icon_mask_a\",style:{maskType:\"luminance\"},maskUnits:\"userSpaceOnUse\",x:\"0\",y:\"0\",width:\"14\",height:\"14\",children:(0,y.jsx)(\"path\",{d:\"M6.67.089 1.205 3.256a.663.663 0 0 0-.33.573v6.339c0 .237.126.455.33.574l5.466 3.17a.66.66 0 0 0 .66 0l5.465-3.17a.664.664 0 0 0 .329-.574V3.829a.663.663 0 0 0-.33-.573L7.33.089a.663.663 0 0 0-.661 0\",fill:\"#fff\"})}),(0,y.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_a)\",children:(0,y.jsx)(\"path\",{d:\"M18.648 2.717 3.248-4.86-4.648 11.31l15.4 7.58 7.896-16.174z\",fill:\"url(#nodejs_icon_linear_gradient_b)\"})}),(0,y.jsx)(\"mask\",{id:\"nodejs_icon_mask_c\",style:{maskType:\"luminance\"},maskUnits:\"userSpaceOnUse\",x:\"1\",y:\"0\",width:\"12\",height:\"14\",children:(0,y.jsx)(\"path\",{d:\"M1.01 10.57a.663.663 0 0 0 .195.17l4.688 2.72.781.45a.66.66 0 0 0 .51.063l5.764-10.597a.653.653 0 0 0-.153-.122L9.216 1.18 7.325.087a.688.688 0 0 0-.171-.07L1.01 10.57z\",fill:\"#fff\"})}),(0,y.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_c)\",children:(0,y.jsx)(\"path\",{d:\"M-5.647 4.958 5.226 19.734l14.38-10.667L8.734-5.71-5.647 4.958z\",fill:\"url(#nodejs_icon_linear_gradient_d)\"})}),(0,y.jsxs)(\"g\",{children:[(0,y.jsx)(\"mask\",{id:\"nodejs_icon_mask_e\",style:{maskType:\"luminance\"},maskUnits:\"userSpaceOnUse\",x:\"1\",y:\"0\",width:\"13\",height:\"14\",children:(0,y.jsx)(\"path\",{d:\"M6.934.004A.665.665 0 0 0 6.67.09L1.22 3.247l5.877 10.746a.655.655 0 0 0 .235-.08l5.465-3.17a.665.665 0 0 0 .319-.453L7.126.015a.684.684 0 0 0-.189-.01\",fill:\"#fff\"})}),(0,y.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_e)\",children:(0,y.jsx)(\"path\",{d:\"M1.22.002v13.992h11.894V.002H1.22z\",fill:\"url(#nodejs_icon_linear_gradient_f)\"})})]}),(0,y.jsxs)(\"defs\",{children:[(0,y.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_b\",x1:\"10.943\",y1:\"-1.084\",x2:\"2.997\",y2:\"15.062\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{offset:\".3\",stopColor:\"#3E863D\"}),(0,y.jsx)(\"stop\",{offset:\".5\",stopColor:\"#55934F\"}),(0,y.jsx)(\"stop\",{offset:\".8\",stopColor:\"#5AAD45\"})]}),(0,y.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_d\",x1:\"-.145\",y1:\"12.431\",x2:\"14.277\",y2:\"1.818\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{offset:\".57\",stopColor:\"#3E863D\"}),(0,y.jsx)(\"stop\",{offset:\".72\",stopColor:\"#619857\"}),(0,y.jsx)(\"stop\",{offset:\"1\",stopColor:\"#76AC64\"})]}),(0,y.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_f\",x1:\"1.225\",y1:\"6.998\",x2:\"13.116\",y2:\"6.998\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{offset:\".16\",stopColor:\"#6BBF47\"}),(0,y.jsx)(\"stop\",{offset:\".38\",stopColor:\"#79B461\"}),(0,y.jsx)(\"stop\",{offset:\".47\",stopColor:\"#75AC64\"}),(0,y.jsx)(\"stop\",{offset:\".7\",stopColor:\"#659E5A\"}),(0,y.jsx)(\"stop\",{offset:\".9\",stopColor:\"#3E863D\"})]})]})]}))}function nt(e){return(0,y.jsxs)(\"svg\",e7(e8({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:[(0,y.jsx)(\"mask\",{id:\"nodejs_icon_mask_a\",style:{maskType:\"luminance\"},maskUnits:\"userSpaceOnUse\",x:\"0\",y:\"0\",width:\"14\",height:\"14\",children:(0,y.jsx)(\"path\",{d:\"M6.67.089 1.205 3.256a.663.663 0 0 0-.33.573v6.339c0 .237.126.455.33.574l5.466 3.17a.66.66 0 0 0 .66 0l5.465-3.17a.664.664 0 0 0 .329-.574V3.829a.663.663 0 0 0-.33-.573L7.33.089a.663.663 0 0 0-.661 0\",fill:\"#fff\"})}),(0,y.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_a)\",children:(0,y.jsx)(\"path\",{d:\"M18.648 2.717 3.248-4.86-4.646 11.31l15.399 7.58 7.896-16.174z\",fill:\"url(#nodejs_icon_linear_gradient_b)\"})}),(0,y.jsx)(\"mask\",{id:\"nodejs_icon_mask_c\",style:{maskType:\"luminance\"},maskUnits:\"userSpaceOnUse\",x:\"1\",y:\"0\",width:\"12\",height:\"15\",children:(0,y.jsx)(\"path\",{d:\"M1.01 10.571a.66.66 0 0 0 .195.172l4.688 2.718.781.451a.66.66 0 0 0 .51.063l5.764-10.597a.653.653 0 0 0-.153-.122L9.216 1.181 7.325.09a.688.688 0 0 0-.171-.07L1.01 10.572z\",fill:\"#fff\"})}),(0,y.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_c)\",children:(0,y.jsx)(\"path\",{d:\"M-5.647 4.96 5.226 19.736 19.606 9.07 8.734-5.707-5.647 4.96z\",fill:\"url(#nodejs_icon_linear_gradient_d)\"})}),(0,y.jsxs)(\"g\",{children:[(0,y.jsx)(\"mask\",{id:\"nodejs_icon_mask_e\",style:{maskType:\"luminance\"},maskUnits:\"userSpaceOnUse\",x:\"1\",y:\"0\",width:\"13\",height:\"14\",children:(0,y.jsx)(\"path\",{d:\"M6.935.003a.665.665 0 0 0-.264.085l-5.45 3.158 5.877 10.747a.653.653 0 0 0 .235-.082l5.465-3.17a.665.665 0 0 0 .319-.452L7.127.014a.684.684 0 0 0-.189-.01\",fill:\"#fff\"})}),(0,y.jsx)(\"g\",{mask:\"url(#nodejs_icon_mask_e)\",children:(0,y.jsx)(\"path\",{d:\"M1.222.001v13.992h11.893V0H1.222z\",fill:\"url(#nodejs_icon_linear_gradient_f)\"})})]}),(0,y.jsxs)(\"defs\",{children:[(0,y.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_b\",x1:\"10.944\",y1:\"-1.084\",x2:\"2.997\",y2:\"15.062\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{offset:\".3\",stopColor:\"#676767\"}),(0,y.jsx)(\"stop\",{offset:\".5\",stopColor:\"#858585\"}),(0,y.jsx)(\"stop\",{offset:\".8\",stopColor:\"#989A98\"})]}),(0,y.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_d\",x1:\"-.145\",y1:\"12.433\",x2:\"14.277\",y2:\"1.819\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{offset:\".57\",stopColor:\"#747474\"}),(0,y.jsx)(\"stop\",{offset:\".72\",stopColor:\"#707070\"}),(0,y.jsx)(\"stop\",{offset:\"1\",stopColor:\"#929292\"})]}),(0,y.jsxs)(\"linearGradient\",{id:\"nodejs_icon_linear_gradient_f\",x1:\"1.226\",y1:\"6.997\",x2:\"13.117\",y2:\"6.997\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{offset:\".16\",stopColor:\"#878787\"}),(0,y.jsx)(\"stop\",{offset:\".38\",stopColor:\"#A9A9A9\"}),(0,y.jsx)(\"stop\",{offset:\".47\",stopColor:\"#A5A5A5\"}),(0,y.jsx)(\"stop\",{offset:\".7\",stopColor:\"#8F8F8F\"}),(0,y.jsx)(\"stop\",{offset:\".9\",stopColor:\"#626262\"})]})]})]}))}var nr=\"Learn more about enabling Node.js inspector for server code with Chrome DevTools\";function no(e){var n=e.devtoolsFrontendUrl||\"\";return n&&ne?(0,y.jsx)(e3,{\"data-nextjs-data-runtime-error-copy-devtools-url\":!0,className:\"nodejs-inspector-button\",actionLabel:\"Copy Chrome DevTools URL\",successLabel:\"Copied\",content:n,icon:(0,y.jsx)(nn,{className:\"error-overlay-toolbar-button-icon\",width:14,height:14})}):(0,y.jsx)(\"a\",{title:nr,\"aria-label\":nr,className:\"nodejs-inspector-button\",href:\"https://nextjs.org/docs/app/building-your-application/configuring/debugging#server-side-code\",target:\"_blank\",rel:\"noopener noreferrer\",children:(0,y.jsx)(nt,{className:\"error-overlay-toolbar-button-icon\",width:14,height:14})})}function na(e){var n=e.error;return(0,y.jsx)(e3,{\"data-nextjs-data-runtime-error-copy-stack\":!0,className:\"copy-stack-trace-button\",actionLabel:\"Copy Stack Trace\",successLabel:\"Stack Trace Copied\",content:n.stack||\"\",disabled:!n.stack})}function ni(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function nl(e){if(Array.isArray(e))return e}function ns(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function nc(e,n){return nl(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||nd(e,n)||ns()}function nu(e){return nl(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||nd(e)||ns()}function nd(e,n){if(e){if(\"string\"==typeof e)return ni(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return ni(e,n)}}var nf=\"https://react.dev/link/hydration-mismatch\",np=\"https://nextjs.org/docs/messages/react-hydration-error\",nh=[/^In HTML, (.+?) cannot be a child of <(.+?)>\\.(.*)\\nThis will cause a hydration error\\.(.*)/,/^In HTML, (.+?) cannot be a descendant of <(.+?)>\\.\\nThis will cause a hydration error\\.(.*)/,/^In HTML, text nodes cannot be a child of <(.+?)>\\.\\nThis will cause a hydration error\\./,/^In HTML, whitespace text nodes cannot be a child of <(.+?)>\\. Make sure you don't have any extra whitespace between tags on each line of your source code\\.\\nThis will cause a hydration error\\./];function ng(e){return nh.some(function(n){return n.test(e)})}var nm=[\"https://nextjs.org\",\"https://react.dev\"];function nv(e){return nm.some(function(n){return e.startsWith(n)})}function nb(e){var n=function(e){var n,t,r,o=(n=e,t=nv,r=Array.from(n.matchAll(/https?:\\/\\/[^\\s/$.?#].[^\\s)'\"]*/gi),function(e){return e[0]}),t?r.filter(function(e){return t(e)}):r);if(0===o.length)return null;var a=o[0];return a===nf?np:a}(e.errorMessage);return n?(0,y.jsx)(\"a\",{title:\"Go to related documentation\",\"aria-label\":\"Go to related documentation\",className:\"docs-link-button\",href:n,target:\"_blank\",rel:\"noopener noreferrer\",children:(0,y.jsx)(ny,{className:\"error-overlay-toolbar-button-icon\",width:14,height:14})}):(0,y.jsx)(\"button\",{title:\"No related documentation found\",\"aria-label\":\"No related documentation found\",className:\"docs-link-button\",disabled:!0,children:(0,y.jsx)(ny,{className:\"error-overlay-toolbar-button-icon\",width:14,height:14})})}function ny(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),t=t={children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M0 .875h4.375C5.448.875 6.401 1.39 7 2.187A3.276 3.276 0 0 1 9.625.875H14v11.156H9.4c-.522 0-1.023.208-1.392.577l-.544.543h-.928l-.544-.543c-.369-.37-.87-.577-1.392-.577H0V.875zm6.344 3.281a1.969 1.969 0 0 0-1.969-1.968H1.312v8.53H4.6c.622 0 1.225.177 1.744.502V4.156zm1.312 7.064V4.156c0-1.087.882-1.968 1.969-1.968h3.063v8.53H9.4c-.622 0-1.225.177-1.744.502z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function nx(e){var n=e.error,t=e.debugInfo,r=e.feedbackButton;return(0,y.jsxs)(\"span\",{className:\"error-overlay-toolbar\",children:[r,(0,y.jsx)(na,{error:n}),(0,y.jsx)(nb,{errorMessage:n.message}),(0,y.jsx)(no,{devtoolsFrontendUrl:null==t?void 0:t.devtoolsFrontendUrl})]})}function nw(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",className:\"thumbs-up-icon\"},e),t=t={children:(0,y.jsx)(\"g\",{id:\"thumb-up-16\",children:(0,y.jsx)(\"path\",{id:\"Union\",fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M6.89531 2.23959C6.72984 2.1214 6.5 2.23968 6.5 2.44303V5.24989C6.5 6.21639 5.7165 6.99989 4.75 6.99989H2.5V13.4999H12.1884C12.762 13.4999 13.262 13.1095 13.4011 12.5531L14.4011 8.55306C14.5984 7.76412 14.0017 6.99989 13.1884 6.99989H9.25H8.5V6.24989V3.51446C8.5 3.43372 8.46101 3.35795 8.39531 3.31102L6.89531 2.23959ZM5 2.44303C5 1.01963 6.6089 0.191656 7.76717 1.01899L9.26717 2.09042C9.72706 2.41892 10 2.94929 10 3.51446V5.49989H13.1884C14.9775 5.49989 16.2903 7.18121 15.8563 8.91686L14.8563 12.9169C14.5503 14.1411 13.4503 14.9999 12.1884 14.9999H1.75H1V14.2499V6.24989V5.49989H1.75H4.75C4.88807 5.49989 5 5.38796 5 5.24989V2.44303Z\",fill:\"currentColor\"})})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function nj(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",className:\"thumbs-down-icon\"},e),t=t={children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M5.89531 12.7603C5.72984 12.8785 5.5 12.7602 5.5 12.5569V9.75C5.5 8.7835 4.7165 8 3.75 8H1.5V1.5H11.1884C11.762 1.5 12.262 1.89037 12.4011 2.44683L13.4011 6.44683C13.5984 7.23576 13.0017 8 12.1884 8H8.25H7.5V8.75V11.4854C7.5 11.5662 7.46101 11.6419 7.39531 11.6889L5.89531 12.7603ZM4 12.5569C4 13.9803 5.6089 14.8082 6.76717 13.9809L8.26717 12.9095C8.72706 12.581 9 12.0506 9 11.4854V9.5H12.1884C13.9775 9.5 15.2903 7.81868 14.8563 6.08303L13.8563 2.08303C13.5503 0.858816 12.4503 0 11.1884 0H0.75H0V0.75V8.75V9.5H0.75H3.75C3.88807 9.5 4 9.61193 4 9.75V12.5569Z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function nk(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function nA(e,n,t,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){t(e);return}l.done?n(s):Promise.resolve(s).then(r,o)}function nO(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function nC(e){var n,t,r=e.errorCode,o=e.className,a=(n=(0,x.useState)({}),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return nk(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return nk(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),i=a[0],l=a[1],s=i[r],c=true,u=(0,x.useCallback)(function(e){var n;return(n=function(){return function(e,n){var t,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){var c=[l,s];if(t)throw TypeError(\"Generator is already executing.\");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(t=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=n.call(e,a)}catch(e){c=[6,e],r=0}finally{t=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(n){switch(n.label){case 0:l(function(n){var t,o;return t=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){nO(e,n,t[n])})}return e}({},n),o=null!=(o=nO({},r,e))?o:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(o)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(o,e))}),t}),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,fetch(\"\".concat( false||\"\",\"/__nextjs_error_feedback?\").concat(new URLSearchParams({errorCode:r,wasHelpful:e.toString()})))];case 2:return n.sent().ok||console.error(\"Failed to record feedback on the server.\"),[3,4];case 3:return console.error(\"Failed to record feedback:\",n.sent()),[3,4];case 4:return[2]}})},function(){var e=this,t=arguments;return new Promise(function(r,o){var a=n.apply(e,t);function i(e){nA(a,r,o,i,l,\"next\",e)}function l(e){nA(a,r,o,i,l,\"throw\",e)}i(void 0)})})()},[r]);return(0,y.jsx)(\"div\",{className:(0,eJ.cx)(\"error-feedback\",o),role:\"region\",\"aria-label\":\"Error feedback\",children:void 0!==s?(0,y.jsx)(\"p\",{className:\"error-feedback-thanks\",role:\"status\",\"aria-live\":\"polite\",children:\"Thanks for your feedback!\"}):(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(\"p\",{children:(0,y.jsx)(\"a\",{href:\"https://nextjs.org/telemetry#error-feedback\",rel:\"noopener noreferrer\",target:\"_blank\",children:\"Was this helpful?\"})}),(0,y.jsx)(\"button\",{\"aria-disabled\":c?\"true\":void 0,\"aria-label\":\"Mark as helpful\",onClick:c?void 0:function(){return u(!0)},className:(0,eJ.cx)(\"feedback-button\",!0===s&&\"voted\"),title:c?\"Feedback disabled due to setting NEXT_TELEMETRY_DISABLED\":void 0,type:\"button\",children:(0,y.jsx)(nw,{\"aria-hidden\":\"true\"})}),(0,y.jsx)(\"button\",{\"aria-disabled\":c?\"true\":void 0,\"aria-label\":\"Mark as not helpful\",onClick:c?void 0:function(){return u(!1)},className:(0,eJ.cx)(\"feedback-button\",!1===s&&\"voted\"),title:c?\"Feedback disabled due to setting NEXT_TELEMETRY_DISABLED\":void 0,type:\"button\",children:(0,y.jsx)(nj,{\"aria-hidden\":\"true\",style:{translate:\"1px 1px\"}})})]})})}function nS(e){var n=e.errorCode;return(0,y.jsx)(\"footer\",{\"data-nextjs-error-overlay-footer\":!0,className:\"error-overlay-footer\",children:n?(0,y.jsx)(nC,{className:\"error-feedback\",errorCode:n}):null})}var nE=\"\\n  .error-overlay-footer {\\n    display: flex;\\n    flex-direction: row;\\n    justify-content: space-between;\\n\\n    gap: 8px;\\n    padding: 12px;\\n    background: var(--color-background-200);\\n    border-top: 1px solid var(--color-gray-400);\\n  }\\n\\n  .error-feedback {\\n    margin-left: auto;\\n\\n    p {\\n      font-size: var(--size-14);\\n      font-weight: 500;\\n      margin: 0;\\n    }\\n  }\\n\\n  \".concat(\"\\n  .error-feedback {\\n    display: flex;\\n    align-items: center;\\n    gap: 8px;\\n    white-space: nowrap;\\n    color: var(--color-gray-900);\\n  }\\n\\n  .error-feedback-thanks {\\n    height: var(--size-24);\\n    display: flex;\\n    align-items: center;\\n    padding-right: 4px; /* To match the 4px inner padding of the thumbs up and down icons */\\n  }\\n\\n  .feedback-button {\\n    background: none;\\n    border: none;\\n    border-radius: var(--rounded-md);\\n    width: var(--size-24);\\n    height: var(--size-24);\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n    cursor: pointer;\\n\\n    &:focus {\\n      outline: var(--focus-ring);\\n    }\\n\\n    &:hover {\\n      background: var(--color-gray-alpha-100);\\n    }\\n\\n    &:active {\\n      background: var(--color-gray-alpha-200);\\n    }\\n  }\\n\\n  .feedback-button[aria-disabled='true'] {\\n    opacity: 0.7;\\n    cursor: not-allowed;\\n  }\\n\\n  .feedback-button.voted {\\n    background: var(--color-gray-alpha-200);\\n  }\\n\\n  .thumbs-up-icon,\\n  .thumbs-down-icon {\\n    color: var(--color-gray-900);\\n    width: var(--size-16);\\n    height: var(--size-16);\\n  }\\n\",\"\\n\");function n_(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function nP(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return n_(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return n_(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function nz(e){var n=e.errorMessage,t=nP((0,x.useState)(!1),2),r=t[0],o=t[1],a=nP((0,x.useState)(!1),2),i=a[0],l=a[1],s=(0,x.useRef)(null);return(0,x.useLayoutEffect)(function(){s.current&&l(s.current.scrollHeight>200)},[n]),(0,y.jsxs)(\"div\",{className:\"nextjs__container_errors_wrapper\",children:[(0,y.jsx)(\"p\",{ref:s,id:\"nextjs__container_errors_desc\",className:\"nextjs__container_errors_desc \".concat(i&&!r?\"truncated\":\"\"),children:n}),i&&!r&&(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(\"div\",{className:\"nextjs__container_errors_gradient_overlay\"}),(0,y.jsx)(\"button\",{onClick:function(){return o(!0)},className:\"nextjs__container_errors_expand_button\",\"aria-expanded\":r,\"aria-controls\":\"nextjs__container_errors_desc\",children:\"Show More\"})]})]})}function nL(e){var n=e.errorType;return(0,y.jsx)(\"span\",{id:\"nextjs__container_errors_label\",className:\"nextjs__container_errors_label\",children:n})}function nT(e){var n=e.title,t=e.className;return(0,y.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",\"aria-label\":n,className:t,children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M9.24996 12.0608L8.71963 11.5304L5.89641 8.70722C5.50588 8.3167 5.50588 7.68353 5.89641 7.29301L8.71963 4.46978L9.24996 3.93945L10.3106 5.00011L9.78029 5.53044L7.31062 8.00011L9.78029 10.4698L10.3106 11.0001L9.24996 12.0608Z\",fill:\"currentColor\"})})}function nR(e){var n=e.title,t=e.className;return(0,y.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",className:t,\"aria-label\":n,children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M6.75011 3.93945L7.28044 4.46978L10.1037 7.29301C10.4942 7.68353 10.4942 8.3167 10.1037 8.70722L7.28044 11.5304L6.75011 12.0608L5.68945 11.0001L6.21978 10.4698L8.68945 8.00011L6.21978 5.53044L5.68945 5.00011L6.75011 3.93945Z\",fill:\"currentColor\"})})}function nN(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function nD(e){var n,t,r=e.runtimeErrors,o=e.activeIdx,a=e.onActiveIndexChange,i=(0,x.useCallback)(function(){return(0,x.startTransition)(function(){o>0&&a(Math.max(0,o-1))})},[o,a]),l=(0,x.useCallback)(function(){return(0,x.startTransition)(function(){o<r.length-1&&a(Math.max(0,Math.min(r.length-1,o+1)))})},[o,r.length,a]),s=(0,x.useRef)(null),c=(0,x.useRef)(null),u=(n=(0,x.useState)(null),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return nN(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return nN(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),d=u[0],f=u[1],p=(0,x.useCallback)(function(e){f(e)},[]);return(0,x.useEffect)(function(){var e=function(e){\"ArrowLeft\"===e.key?(e.preventDefault(),e.stopPropagation(),i&&i()):\"ArrowRight\"===e.key&&(e.preventDefault(),e.stopPropagation(),l&&l())};if(null!=d){var n=d.getRootNode(),t=self.document;return n.addEventListener(\"keydown\",e),n!==t&&t.addEventListener(\"keydown\",e),function(){n.removeEventListener(\"keydown\",e),n!==t&&t.removeEventListener(\"keydown\",e)}}},[d,l,i]),(0,x.useEffect)(function(){if(null!=d){var e,n,t=d.getRootNode();if(e=t,null!=(n=ShadowRoot)&&\"undefined\"!=typeof Symbol&&n[Symbol.hasInstance]?!!n[Symbol.hasInstance](e):e instanceof n){var a=t.activeElement;0===o?s.current&&a===s.current&&s.current.blur():o===r.length-1&&c.current&&a===c.current&&c.current.blur()}}},[d,o,r.length]),(0,y.jsxs)(\"nav\",{className:\"error-overlay-pagination dialog-exclude-closing-from-outside-click\",ref:p,children:[(0,y.jsx)(\"button\",{ref:s,type:\"button\",disabled:0===o,\"aria-disabled\":0===o,onClick:i,\"data-nextjs-dialog-error-previous\":!0,className:\"error-overlay-pagination-button\",children:(0,y.jsx)(nT,{title:\"previous\",className:\"error-overlay-pagination-button-icon\"})}),(0,y.jsxs)(\"div\",{className:\"error-overlay-pagination-count\",children:[(0,y.jsxs)(\"span\",{\"data-nextjs-dialog-error-index\":o,children:[o+1,\"/\"]}),(0,y.jsx)(\"span\",{\"data-nextjs-dialog-header-total-count\":!0,children:r.length||1})]}),(0,y.jsx)(\"button\",{ref:c,type:\"button\",disabled:o>=r.length-1,\"aria-disabled\":o>=r.length-1,onClick:l,\"data-nextjs-dialog-error-next\":!0,className:\"error-overlay-pagination-button\",children:(0,y.jsx)(nR,{title:\"next\",className:\"error-overlay-pagination-button-icon\"})})]})}function nB(e){var n=e.installed,t=e.staleness,r=e.expected,o=\"\",a=\"\",i=\"\",l=\"Next.js \".concat(n);switch(t){case\"newer-than-npm\":case\"fresh\":o=l,a=\"Latest available version is detected (\".concat(n,\").\"),i=\"fresh\";break;case\"stale-patch\":case\"stale-minor\":o=\"\".concat(l,\" (stale)\"),a=\"There is a newer version (\".concat(r,\") available, upgrade recommended! \"),i=\"stale\";break;case\"stale-major\":o=\"\".concat(l,\" (outdated)\"),a=\"An outdated version detected (latest is \".concat(r,\"), upgrade is highly recommended!\"),i=\"outdated\";break;case\"stale-prerelease\":o=\"\".concat(l,\" (stale)\"),a=\"There is a newer canary version (\".concat(r,\") available, please upgrade! \"),i=\"stale\";break;case\"unknown\":o=\"\".concat(l,\" (unknown)\"),a=\"No Next.js version data was found.\",i=\"unknown\"}return{text:o,indicatorClass:i,title:a}}function nM(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"14\",height:\"14\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),t=t={children:(0,y.jsx)(\"circle\",{cx:\"7\",cy:\"7\",r:\"5.5\",strokeWidth:\"3\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function nI(e){var n=e.versionInfo,t=e.bundlerName,r=n.staleness,o=nB(n),a=o.text,i=o.indicatorClass,l=o.title,s=\"Turbopack\"===t;return r.startsWith(\"stale\")?(0,y.jsxs)(\"a\",{className:\"nextjs-container-build-error-version-status dialog-exclude-closing-from-outside-click\",target:\"_blank\",rel:\"noopener noreferrer\",href:\"https://nextjs.org/docs/messages/version-staleness\",children:[(0,y.jsx)(nM,{className:(0,eJ.cx)(\"version-staleness-indicator\",i)}),(0,y.jsx)(\"span\",{\"data-nextjs-version-checker\":!0,title:l,children:a}),(0,y.jsx)(\"span\",{className:(0,eJ.cx)(s&&\"turbopack-text\"),children:t})]}):(0,y.jsxs)(\"span\",{className:\"nextjs-container-build-error-version-status dialog-exclude-closing-from-outside-click\",children:[(0,y.jsx)(nM,{className:(0,eJ.cx)(\"version-staleness-indicator\",i)}),(0,y.jsx)(\"span\",{\"data-nextjs-version-checker\":!0,title:l,children:a}),(0,y.jsx)(\"span\",{className:(0,eJ.cx)(s&&\"turbopack-text\"),children:t})]})}function nH(e){var n=e.runtimeErrors,t=e.activeIdx,r=e.setActiveIndex,o=e.versionInfo,a=\"Webpack\"||0;return(0,y.jsxs)(\"div\",{\"data-nextjs-error-overlay-nav\":!0,children:[(0,y.jsx)(nF,{side:\"left\",children:(0,y.jsx)(nD,{runtimeErrors:null!=n?n:[],activeIdx:null!=t?t:0,onActiveIndexChange:null!=r?r:function(){}})}),o&&(0,y.jsx)(nF,{side:\"right\",children:(0,y.jsx)(nI,{versionInfo:o,bundlerName:a})})]})}function nF(e){var n=e.children,t=e.side;return(0,y.jsxs)(\"div\",{className:\"error-overlay-notch\",\"data-side\":void 0===t?\"left\":t,children:[n,(0,y.jsx)(nU,{})]})}function nU(){return(0,y.jsxs)(\"svg\",{width:\"60\",height:\"42\",viewBox:\"0 0 60 42\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",className:\"error-overlay-notch-tail\",preserveAspectRatio:\"none\",children:[(0,y.jsxs)(\"mask\",{id:\"error_overlay_nav_mask0_2667_14687\",style:{maskType:\"alpha\"},maskUnits:\"userSpaceOnUse\",x:\"0\",y:\"-1\",width:\"60\",height:\"43\",children:[(0,y.jsxs)(\"mask\",{id:\"error_overlay_nav_path_1_outside_1_2667_14687\",maskUnits:\"userSpaceOnUse\",x:\"0\",y:\"-1\",width:\"60\",height:\"43\",fill:\"black\",children:[(0,y.jsx)(\"rect\",{fill:\"white\",y:\"-1\",width:\"60\",height:\"43\"}),(0,y.jsx)(\"path\",{d:\"M1 0L8.0783 0C15.772 0 22.7836 4.41324 26.111 11.3501L34.8889 29.6498C38.2164 36.5868 45.228 41 52.9217 41H60H1L1 0Z\"})]}),(0,y.jsx)(\"path\",{d:\"M1 0L8.0783 0C15.772 0 22.7836 4.41324 26.111 11.3501L34.8889 29.6498C38.2164 36.5868 45.228 41 52.9217 41H60H1L1 0Z\",fill:\"white\"}),(0,y.jsx)(\"path\",{d:\"M1 0V-1H0V0L1 0ZM1 41H0V42H1V41ZM34.8889 29.6498L33.9873 30.0823L34.8889 29.6498ZM26.111 11.3501L27.0127 10.9177L26.111 11.3501ZM1 1H8.0783V-1H1V1ZM60 40H1V42H60V40ZM2 41V0L0 0L0 41H2ZM25.2094 11.7826L33.9873 30.0823L35.7906 29.2174L27.0127 10.9177L25.2094 11.7826ZM52.9217 42H60V40H52.9217V42ZM33.9873 30.0823C37.4811 37.3661 44.8433 42 52.9217 42V40C45.6127 40 38.9517 35.8074 35.7906 29.2174L33.9873 30.0823ZM8.0783 1C15.3873 1 22.0483 5.19257 25.2094 11.7826L27.0127 10.9177C23.5188 3.6339 16.1567 -1 8.0783 -1V1Z\",fill:\"black\",mask:\"url(#error_overlay_nav_path_1_outside_1_2667_14687)\"})]}),(0,y.jsxs)(\"g\",{mask:\"url(#error_overlay_nav_mask0_2667_14687)\",children:[(0,y.jsxs)(\"mask\",{id:\"error_overlay_nav_path_3_outside_2_2667_14687\",maskUnits:\"userSpaceOnUse\",x:\"-1\",y:\"0.0244141\",width:\"60\",height:\"43\",fill:\"black\",children:[(0,y.jsx)(\"rect\",{fill:\"white\",x:\"-1\",y:\"0.0244141\",width:\"60\",height:\"43\"}),(0,y.jsx)(\"path\",{d:\"M0 1.02441H7.0783C14.772 1.02441 21.7836 5.43765 25.111 12.3746L33.8889 30.6743C37.2164 37.6112 44.228 42.0244 51.9217 42.0244H59H0L0 1.02441Z\"})]}),(0,y.jsx)(\"path\",{d:\"M0 1.02441H7.0783C14.772 1.02441 21.7836 5.43765 25.111 12.3746L33.8889 30.6743C37.2164 37.6112 44.228 42.0244 51.9217 42.0244H59H0L0 1.02441Z\",fill:\"var(--background-color)\"}),(0,y.jsx)(\"path\",{d:\"M0 1.02441L0 0.0244141H-1V1.02441H0ZM0 42.0244H-1V43.0244H0L0 42.0244ZM33.8889 30.6743L32.9873 31.1068L33.8889 30.6743ZM25.111 12.3746L26.0127 11.9421L25.111 12.3746ZM0 2.02441H7.0783V0.0244141H0L0 2.02441ZM59 41.0244H0L0 43.0244H59V41.0244ZM1 42.0244L1 1.02441H-1L-1 42.0244H1ZM24.2094 12.8071L32.9873 31.1068L34.7906 30.2418L26.0127 11.9421L24.2094 12.8071ZM51.9217 43.0244H59V41.0244H51.9217V43.0244ZM32.9873 31.1068C36.4811 38.3905 43.8433 43.0244 51.9217 43.0244V41.0244C44.6127 41.0244 37.9517 36.8318 34.7906 30.2418L32.9873 31.1068ZM7.0783 2.02441C14.3873 2.02441 21.0483 6.21699 24.2094 12.8071L26.0127 11.9421C22.5188 4.65831 15.1567 0.0244141 7.0783 0.0244141V2.02441Z\",fill:\"var(--stroke-color)\",mask:\"url(#error_overlay_nav_path_3_outside_2_2667_14687)\"})]})]})}function nV(e){var n,t,r=e.children,o=e.onClose,a=e.footer,i=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\",\"onClose\",\"footer\"]);return(0,y.jsxs)(\"div\",{className:\"error-overlay-dialog-container\",children:[(0,y.jsx)(eZ,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"aria-labelledby\":\"nextjs__container_errors_label\",\"aria-describedby\":\"nextjs__container_errors_desc\",className:\"error-overlay-dialog-scroll\",onClose:o},i),t=t={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n)),a]})}function nq(e){var n=e.children;return(0,y.jsx)(eK,{className:\"nextjs-container-errors-header\",children:n})}function nW(e){var n=e.children;return(0,y.jsx)(eY,{className:\"nextjs-container-errors-body\",children:n})}var n$=0,nZ=function(e){var r,o,a=e.className,i=e.children,l=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"className\",\"children\"]);return x.useEffect(function(){return setTimeout(function(){if(!(n$++>0)){var e=window.innerWidth-document.documentElement.clientWidth;e>0&&(n=document.body.style.paddingRight,document.body.style.paddingRight=\"\".concat(e,\"px\")),t=document.body.style.overflow,document.body.style.overflow=\"hidden\"}}),function(){setTimeout(function(){0!==n$&&0==--n$&&(void 0!==n&&(document.body.style.paddingRight=n,n=void 0),void 0!==t&&(document.body.style.overflow=t,t=void 0))})}},[]),(0,y.jsx)(\"div\",(r=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-overlay\":!0,className:a},l),o=o={children:i},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(o)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(o)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(o,e))}),r))};function nY(e){var n,t,r=e.children,o=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\"]);return(0,y.jsx)(nZ,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},o),t=t={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function nX(e){var n=Math.min(e.errorCount-e.activeIdx-1,2);return(0,y.jsx)(\"div\",{\"aria-hidden\":!0,className:\"error-overlay-bottom-stack\",children:(0,y.jsxs)(\"div\",{className:\"error-overlay-bottom-stack-stack\",\"data-stack-count\":n,children:[(0,y.jsx)(\"div\",{className:\"error-overlay-bottom-stack-layer error-overlay-bottom-stack-layer-1\",children:\"1\"}),(0,y.jsx)(\"div\",{className:\"error-overlay-bottom-stack-layer error-overlay-bottom-stack-layer-2\",children:\"2\"})]})})}function nK(e){var n=e.environmentName;return(0,y.jsx)(\"span\",{\"data-nextjs-environment-name-label\":!0,children:n})}var nQ=__nested_webpack_require_381207__(\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/utils.ts\"),nG=(0,x.forwardRef)(function(e,n){var t=e.stop,r=e.blur,o=e.side,a=e.style,i=e.height;return(0,y.jsx)(\"div\",{ref:n,\"aria-hidden\":!0,\"data-nextjs-scroll-fader\":!0,className:\"nextjs-scroll-fader\",\"data-side\":o,style:function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"--stop\":t,\"--blur\":r,\"--height\":\"\".concat(i,\"px\")},a)})});function nJ(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function n0(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return nJ(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return nJ(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var n1=(0,x.forwardRef)(function(e,n){var t,r,o,a,i,l,s,c,u,d,f=e.children,p=e.measure,h=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\",\"measure\"]),g=(0,x.useRef)(null),m=n0((t=g,r=p,a=(o=n0((0,x.useState)(0),2))[0],i=o[1],s=(l=n0((0,x.useState)(!0),2))[0],c=l[1],(0,x.useEffect)(function(){if(r){var e,n=t.current;if(n){var o=new ResizeObserver(function(n){var t=n0(n,1)[0].contentRect;clearTimeout(e),e=window.setTimeout(function(){c(!1)},100),i(t.height)});return o.observe(n),function(){return o.disconnect()}}}},[r]),[a,s]),2),v=m[0],b=m[1];return(0,y.jsx)(\"div\",(u=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},h),d=d={ref:n,style:{height:b?\"auto\":v,transition:\"height 250ms var(--timing-swift)\"},children:(0,y.jsx)(\"div\",{ref:g,children:f})},Object.getOwnPropertyDescriptors?Object.defineProperties(u,Object.getOwnPropertyDescriptors(d)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(d)).forEach(function(e){Object.defineProperty(u,e,Object.getOwnPropertyDescriptor(d,e))}),u))});function n2(e){var n=e.fixed,t=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"fixed\"]);return(0,y.jsx)(\"div\",function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-dialog-backdrop\":!0,\"data-nextjs-dialog-backdrop-fixed\":!!n||void 0},t))}function n4(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function n5(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function n3(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function n6(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return n4(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return n4(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function n9(e){var n=e.errorMessage,t=e.errorType,r=e.children,o=e.errorCode,a=e.errorCount,i=e.error,l=e.debugInfo,s=e.isBuildError,c=e.onClose,u=e.versionInfo,d=e.runtimeErrors,f=e.activeIdx,p=e.setActiveIndex,h=e.isTurbopack,g=e.dialogResizerRef,m=e.rendered,v=void 0===m||m,b=e.transitionDurationMs,w={\"data-rendered\":v,style:{\"--transition-duration\":\"\".concat(b,\"ms\")}},j=n6(x.useState(!!b),2),k=j[0],A=j[1],O=x.useRef(null),C=!!o,S=x.useRef(null);return(0,nQ.P5)(S,null,v),(0,y.jsxs)(nY,n3(n5({},w),{children:[(0,y.jsx)(n2,{fixed:s}),(0,y.jsxs)(\"div\",n3(n5({\"data-nextjs-dialog-root\":!0,onTransitionEnd:function(e){var n=e.propertyName,t=e.target;\"scale\"===n&&t===S.current&&A(!1)},ref:S},w),{children:[(0,y.jsx)(nH,{runtimeErrors:d,activeIdx:f,setActiveIndex:p,versionInfo:u,isTurbopack:h}),(0,y.jsxs)(nV,{onClose:c,dialogResizerRef:g,\"data-has-footer\":C,onScroll:function(e){if(O.current){var n,t,r=(n=e.currentTarget.scrollTop/17,Math.min(Math.max(n,(t=n6([0,1],2))[0]),t[1]));O.current.style.opacity=String(r)}},footer:C&&(0,y.jsx)(nS,{errorCode:o}),children:[(0,y.jsx)(n1,{ref:g,measure:!k,\"data-nextjs-dialog-sizer\":!0,children:(0,y.jsxs)(eX,{children:[(0,y.jsxs)(nq,{children:[(0,y.jsxs)(\"div\",{className:\"nextjs__container_errors__error_title\",\"data-nextjs-error-code\":o,children:[(0,y.jsxs)(\"span\",{\"data-nextjs-error-label-group\":!0,children:[(0,y.jsx)(nL,{errorType:t}),i.environmentName&&(0,y.jsx)(nK,{environmentName:i.environmentName})]}),(0,y.jsx)(nx,{error:i,debugInfo:l})]}),(0,y.jsx)(nz,{errorMessage:n})]}),(0,y.jsx)(nW,{children:r})]})}),(0,y.jsx)(nX,{errorCount:a,activeIdx:null!=f?f:0})]}),(0,y.jsx)(nG,{ref:O,side:\"top\",stop:\"50%\",blur:\"4px\",height:48})]}))]}))}var n8=\"\\n  \".concat(\"\\n  [data-nextjs-dialog-overlay] {\\n    padding: initial;\\n    top: 10vh;\\n  }\\n\",\"\\n  \").concat(\"\\n  .error-overlay-dialog-container {\\n    -webkit-font-smoothing: antialiased;\\n    display: flex;\\n    flex-direction: column;\\n    background: var(--color-background-100);\\n    background-clip: padding-box;\\n    border: var(--next-dialog-border-width) solid var(--color-gray-400);\\n    border-radius: 0 0 var(--next-dialog-radius) var(--next-dialog-radius);\\n    box-shadow: var(--shadow-menu);\\n    position: relative;\\n    overflow: hidden;\\n  }\\n\\n  .error-overlay-dialog-scroll {\\n    overflow-y: auto;\\n    height: 100%;\\n  }\\n\",\"\\n  \").concat(\"\\n  .nextjs-container-errors-header {\\n    position: relative;\\n  }\\n  .nextjs-container-errors-header > h1 {\\n    font-size: var(--size-20);\\n    line-height: var(--size-24);\\n    font-weight: bold;\\n    margin: calc(16px * 1.5) 0;\\n    color: var(--color-title-h1);\\n  }\\n  .nextjs-container-errors-header small {\\n    font-size: var(--size-14);\\n    color: var(--color-accents-1);\\n    margin-left: 16px;\\n  }\\n  .nextjs-container-errors-header small > span {\\n    font-family: var(--font-stack-monospace);\\n  }\\n  .nextjs-container-errors-header > div > small {\\n    margin: 0;\\n    margin-top: 4px;\\n  }\\n  .nextjs-container-errors-header > p > a {\\n    color: inherit;\\n    font-weight: bold;\\n  }\\n  .nextjs-container-errors-header\\n    > .nextjs-container-build-error-version-status {\\n    position: absolute;\\n    top: 16px;\\n    right: 16px;\\n  }\\n\",\"\\n  \").concat(\"\",\"\\n\\n  \").concat(\"\\n  [data-nextjs-error-overlay-nav] {\\n    --stroke-color: var(--color-gray-400);\\n    --background-color: var(--color-background-100);\\n    display: flex;\\n    justify-content: space-between;\\n    align-items: center;\\n\\n    width: 100%;\\n\\n    position: relative;\\n    z-index: 2;\\n    outline: none;\\n    translate: var(--next-dialog-border-width) var(--next-dialog-border-width);\\n    max-width: var(--next-dialog-max-width);\\n\\n    .error-overlay-notch {\\n      translate: calc(var(--next-dialog-border-width) * -1);\\n      width: auto;\\n      height: var(--next-dialog-notch-height);\\n      padding: 12px;\\n      background: var(--background-color);\\n      border: var(--next-dialog-border-width) solid var(--stroke-color);\\n      border-bottom: none;\\n      position: relative;\\n\\n      &[data-side='left'] {\\n        padding-right: 0;\\n        border-radius: var(--next-dialog-radius) 0 0 0;\\n\\n        .error-overlay-notch-tail {\\n          right: -54px;\\n        }\\n\\n        > *:not(.error-overlay-notch-tail) {\\n          margin-right: -10px;\\n        }\\n      }\\n\\n      &[data-side='right'] {\\n        padding-left: 0;\\n        border-radius: 0 var(--next-dialog-radius) 0 0;\\n\\n        .error-overlay-notch-tail {\\n          left: -54px;\\n          transform: rotateY(180deg);\\n        }\\n\\n        > *:not(.error-overlay-notch-tail) {\\n          margin-left: -12px;\\n        }\\n      }\\n\\n      .error-overlay-notch-tail {\\n        position: absolute;\\n        top: calc(var(--next-dialog-border-width) * -1);\\n        pointer-events: none;\\n        z-index: -1;\\n        height: calc(100% + var(--next-dialog-border-width));\\n      }\\n    }\\n  }\\n\\n  @media (max-width: 600px) {\\n    [data-nextjs-error-overlay-nav] {\\n      background: var(--background-color);\\n      border-radius: var(--next-dialog-radius) var(--next-dialog-radius) 0 0;\\n      border: var(--next-dialog-border-width) solid var(--stroke-color);\\n      border-bottom: none;\\n      overflow: hidden;\\n      translate: 0 var(--next-dialog-border-width);\\n      \\n      .error-overlay-notch {\\n        border-radius: 0;\\n        border: 0;\\n\\n        &[data-side=\\\"left\\\"], &[data-side=\\\"right\\\"] {\\n          border-radius: 0;\\n        }\\n\\n        .error-overlay-notch-tail {\\n          display: none;\\n        }\\n      }\\n    }\\n  }\\n\",\"\\n  \").concat(\"\\n  .nextjs__container_errors_label {\\n    padding: 2px 6px;\\n    margin: 0;\\n    border-radius: var(--rounded-md-2);\\n    background: var(--color-red-100);\\n    font-weight: 600;\\n    font-size: var(--size-12);\\n    color: var(--color-red-900);\\n    font-family: var(--font-stack-monospace);\\n    line-height: var(--size-20);\\n  }\\n\",\"\\n  \").concat(\"\\n  .nextjs__container_errors_wrapper {\\n    position: relative;\\n  }\\n\\n  .nextjs__container_errors_desc {\\n    margin: 0;\\n    margin-left: 4px;\\n    color: var(--color-red-900);\\n    font-weight: 500;\\n    font-size: var(--size-16);\\n    letter-spacing: -0.32px;\\n    line-height: var(--size-24);\\n    overflow-wrap: break-word;\\n    white-space: pre-wrap;\\n  }\\n\\n  .nextjs__container_errors_desc.truncated {\\n    max-height: 200px;\\n    overflow: hidden;\\n  }\\n\\n  .nextjs__container_errors_gradient_overlay {\\n    position: absolute;\\n    bottom: 0;\\n    left: 0;\\n    right: 0;\\n    height: 85px;\\n    background: linear-gradient(\\n      180deg,\\n      rgba(250, 250, 250, 0) 0%,\\n      var(--color-background-100) 100%\\n    );\\n  }\\n\\n  .nextjs__container_errors_expand_button {\\n    position: absolute;\\n    bottom: 10px;\\n    left: 50%;\\n    transform: translateX(-50%);\\n    display: flex;\\n    align-items: center;\\n    padding: 6px 8px;\\n    background: var(--color-background-100);\\n    border: 1px solid var(--color-gray-alpha-400);\\n    border-radius: 999px;\\n    box-shadow:\\n      0px 2px 2px var(--color-gray-alpha-100),\\n      0px 8px 8px -8px var(--color-gray-alpha-100);\\n    font-size: var(--size-13);\\n    cursor: pointer;\\n    color: var(--color-gray-900);\\n    font-weight: 500;\\n    transition: background-color 0.2s ease;\\n  }\\n\\n  .nextjs__container_errors_expand_button:hover {\\n    background: var(--color-gray-100);\\n  }\\n\",\"\\n  \").concat(\"\\n  .error-overlay-toolbar {\\n    display: flex;\\n    gap: 6px;\\n  }\\n\\n  .nodejs-inspector-button,\\n  .copy-stack-trace-button,\\n  .docs-link-button {\\n    display: flex;\\n    justify-content: center;\\n    align-items: center;\\n\\n    width: var(--size-28);\\n    height: var(--size-28);\\n    background: var(--color-background-100);\\n    background-clip: padding-box;\\n    border: 1px solid var(--color-gray-alpha-400);\\n    box-shadow: var(--shadow-small);\\n    border-radius: var(--rounded-full);\\n\\n    svg {\\n      width: var(--size-14);\\n      height: var(--size-14);\\n    }\\n\\n    &:focus {\\n      outline: var(--focus-ring);\\n    }\\n\\n    &:not(:disabled):hover {\\n      background: var(--color-gray-alpha-100);\\n    }\\n\\n    &:not(:disabled):active {\\n      background: var(--color-gray-alpha-200);\\n    }\\n\\n    &:disabled {\\n      background-color: var(--color-gray-100);\\n      cursor: not-allowed;\\n    }\\n  }\\n\\n  .error-overlay-toolbar-button-icon {\\n    color: var(--color-gray-900);\\n  }\\n\",\"\\n\\n  [data-nextjs-error-label-group] {\\n    display: flex;\\n    align-items: center;\\n    gap: 8px;\\n  }\\n\");function n7(e){var n,t,r=e.file,o=e.location,a=eE({file:r,lineNumber:null!=(n=null==o?void 0:o.line)?n:1,column:null!=(t=null==o?void 0:o.column)?t:0});return(0,y.jsxs)(\"div\",{\"data-with-open-in-editor-link\":!0,\"data-with-open-in-editor-link-import-trace\":!0,role:\"link\",onClick:a,title:\"Click to open in your editor\",children:[r,o?\":\".concat(o.line,\":\").concat(o.column):null,(0,y.jsxs)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",children:[(0,y.jsx)(\"path\",{d:\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"}),(0,y.jsx)(\"polyline\",{points:\"15 3 21 3 21 9\"}),(0,y.jsx)(\"line\",{x1:\"10\",y1:\"14\",x2:\"21\",y2:\"3\"})]})]})}function te(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}var tn=function(e){var n,t,r,o,a,i,l,s,c,u,d=e.content,f=x.useMemo(function(){var e,n,t;return n=function(e){var n,t,r=e.shift();if(!r)return null;var o=(n=r.split(\":\",3),t=3,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,3)||function(e,n){if(e){if(\"string\"==typeof e)return te(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return te(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),a=o[0],i=o[1],l=o[2],s=Number(i),c=Number(l),u=!Number.isNaN(s)&&!Number.isNaN(c);return{fileName:u?a:r,location:u?{line:s,column:c}:void 0}}(e=d.split(\"\\n\")),t=function(e){if(e.some(function(e){return/ReactServerComponentsError:/.test(e)})||e.some(function(e){return/Import trace for requested module:/.test(e)})){for(var n=[];/.+\\..+/.test(e[e.length-1])&&!e[e.length-1].includes(\":\");){var t=e.pop().trim();n.unshift(t)}return n}return[]}(e),{file:n,source:e.join(\"\\n\"),importTraceFiles:t}},[d]),p=f.file,h=f.source,g=f.importTraceFiles,m=x.useMemo(function(){return eH().ansiToJson(h,{json:!0,use_classes:!0,remove_empty:!0})},[h]),v=eE({file:null==p?void 0:p.fileName,lineNumber:null!=(i=null==p||null==(n=p.location)?void 0:n.line)?i:1,column:null!=(l=null==p||null==(t=p.location)?void 0:t.column)?l:0}),b={file:null!=(s=null==p?void 0:p.fileName)?s:null,methodName:\"\",arguments:[],lineNumber:null!=(c=null==p||null==(r=p.location)?void 0:r.line)?c:null,column:null!=(u=null==p||null==(o=p.location)?void 0:o.column)?u:null},w=null==b||null==(a=b.file)?void 0:a.split(\".\").pop();return(0,y.jsxs)(\"div\",{\"data-nextjs-codeframe\":!0,children:[(0,y.jsx)(\"div\",{className:\"code-frame-header\",children:(0,y.jsxs)(\"div\",{className:\"code-frame-link\",children:[(0,y.jsx)(\"span\",{className:\"code-frame-icon\",children:(0,y.jsx)(eT,{lang:w})}),(0,y.jsx)(\"span\",{\"data-text\":!0,children:eS(b)}),(0,y.jsx)(\"button\",{\"aria-label\":\"Open in editor\",\"data-with-open-in-editor-link-source-file\":!0,onClick:v,children:(0,y.jsx)(\"span\",{className:\"code-frame-icon\",\"data-icon\":\"right\",children:(0,y.jsx)(ez,{width:16,height:16})})})]})}),(0,y.jsx)(\"pre\",{className:\"code-frame-pre\",children:(0,y.jsxs)(\"div\",{className:\"code-frame-lines\",children:[m.map(function(e,n){return(0,y.jsx)(\"span\",{style:function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({color:e.fg?\"var(--color-\".concat(e.fg,\")\"):void 0},\"bold\"===e.decoration?{fontWeight:500}:\"italic\"===e.decoration?{fontStyle:\"italic\"}:void 0),children:(0,y.jsx)(eb,{text:e.content})},\"terminal-entry-\".concat(n))}),g.map(function(e){return(0,y.jsx)(n7,{isSourceFile:!1,file:e},e)})]})})]})},tt=function(e){var n=e.split(\"\\n\");return eU()(n[1]||\"\").replace(/^Error: /,\"\")},tr=function(e){var n,t,r=e.message,o=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"message\"]),a=(0,x.useCallback)(function(){},[]),i=Error(r),l=(0,x.useMemo)(function(){return tt(r)||\"Failed to compile\"},[r]);return(0,y.jsx)(n9,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({errorType:\"Build Error\",errorMessage:l,onClose:a,error:i},o),t=t={children:(0,y.jsx)(tn,{content:r})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))},to=function(e){var n,t=e.frame,r=null!=(n=t.originalStackFrame)?n:t.sourceStackFrame,o=!!t.originalCodeFrame,a=eE(o?{file:r.file,lineNumber:r.lineNumber,column:r.column}:void 0),i=eS(r);return i?(0,y.jsxs)(\"div\",{\"data-nextjs-call-stack-frame\":!0,\"data-nextjs-call-stack-frame-no-source\":!o,\"data-nextjs-call-stack-frame-ignored\":t.ignored,children:[(0,y.jsxs)(\"div\",{className:\"call-stack-frame-method-name\",children:[(0,y.jsx)(eb,{text:r.methodName}),o&&(0,y.jsx)(\"button\",{onClick:a,className:\"open-in-editor-button\",\"aria-label\":\"Open \".concat(r.methodName,\" in editor\"),children:(0,y.jsx)(ez,{width:16,height:16})}),t.error?(0,y.jsx)(\"button\",{className:\"source-mapping-error-button\",onClick:function(){return console.error(t.reason)},title:\"Sourcemapping failed. Click to log cause of error.\",children:(0,y.jsx)(eL,{width:16,height:16})}):null]}),(0,y.jsx)(\"span\",{className:\"call-stack-frame-file-source\",\"data-has-source\":o,children:i})]}):null};function ta(){return(0,y.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M8.70722 2.39641C8.3167 2.00588 7.68353 2.00588 7.29301 2.39641L4.46978 5.21963L3.93945 5.74996L5.00011 6.81062L5.53044 6.28029L8.00011 3.81062L10.4698 6.28029L11.0001 6.81062L12.0608 5.74996L11.5304 5.21963L8.70722 2.39641ZM5.53044 9.71963L5.00011 9.1893L3.93945 10.25L4.46978 10.7803L7.29301 13.6035C7.68353 13.994 8.3167 13.994 8.70722 13.6035L11.5304 10.7803L12.0608 10.25L11.0001 9.1893L10.4698 9.71963L8.00011 12.1893L5.53044 9.71963Z\",fill:\"currentColor\"})})}function ti(){var e,n,t=(e=[\"\\n  [data-nextjs-call-stack-container] {\\n    position: relative;\\n    margin-top: 8px;\\n  }\\n\\n  [data-nextjs-call-stack-header] {\\n    display: flex;\\n    justify-content: space-between;\\n    align-items: center;\\n    min-height: var(--size-28);\\n    padding: 8px 8px 12px 4px;\\n    width: 100%;\\n  }\\n\\n  [data-nextjs-call-stack-title] {\\n    display: flex;\\n    justify-content: space-between;\\n    align-items: center;\\n    gap: 8px;\\n\\n    margin: 0;\\n\\n    color: var(--color-gray-1000);\\n    font-size: var(--size-16);\\n    font-weight: 500;\\n  }\\n\\n  [data-nextjs-call-stack-count] {\\n    display: flex;\\n    justify-content: center;\\n    align-items: center;\\n\\n    width: var(--size-20);\\n    height: var(--size-20);\\n    gap: 4px;\\n\\n    color: var(--color-gray-1000);\\n    text-align: center;\\n    font-size: var(--size-11);\\n    font-weight: 500;\\n    line-height: var(--size-16);\\n\\n    border-radius: var(--rounded-full);\\n    background: var(--color-gray-300);\\n  }\\n\\n  [data-nextjs-call-stack-ignored-list-toggle-button] {\\n    all: unset;\\n    display: flex;\\n    align-items: center;\\n    gap: 6px;\\n    color: var(--color-gray-900);\\n    font-size: var(--size-14);\\n    line-height: var(--size-20);\\n    border-radius: 6px;\\n    padding: 4px 6px;\\n    margin-right: -6px;\\n    transition: background 150ms ease;\\n\\n    &:hover {\\n      background: var(--color-gray-100);\\n    }\\n\\n    &:focus {\\n      outline: var(--focus-ring);\\n    }\\n\\n    svg {\\n      width: var(--size-16);\\n      height: var(--size-16);\\n    }\\n  }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return ti=function(){return t},t}function tl(e){var n=e.frames,t=e.isIgnoreListOpen,r=e.ignoredFramesTally,o=e.onToggleIgnoreList;return(0,y.jsxs)(\"div\",{\"data-nextjs-call-stack-container\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-call-stack-header\":!0,children:[(0,y.jsxs)(\"p\",{\"data-nextjs-call-stack-title\":!0,children:[\"Call Stack \",(0,y.jsx)(\"span\",{\"data-nextjs-call-stack-count\":!0,children:n.length})]}),r>0&&(0,y.jsxs)(\"button\",{\"data-nextjs-call-stack-ignored-list-toggle-button\":t,onClick:o,children:[\"\".concat(t?\"Hide\":\"Show\",\" \").concat(r,\" ignore-listed frame(s)\"),(0,y.jsx)(ta,{})]})]}),n.map(function(e,n){return!e.ignored||t?(0,y.jsx)(to,{frame:e},n):null})]})}var ts=ei(ti());function tc(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tu(e){var n,t,r=e.frames,o=e.dialogResizerRef,a=(0,x.useRef)(NaN),i=(n=(0,x.useState)(!1),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return tc(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tc(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),l=i[0],s=i[1],c=(0,x.useMemo)(function(){return r.reduce(function(e,n){return e+ +!!n.ignored},0)},[r]);return(0,y.jsx)(tl,{frames:r,isIgnoreListOpen:l,onToggleIgnoreList:function(){var e=null==o?void 0:o.current;if(e){var n=(null==e?void 0:e.getBoundingClientRect()).height;a.current||(a.current=n),l?(e.style.height=\"\".concat(a.current,\"px\"),e.addEventListener(\"transitionend\",function n(){e.removeEventListener(\"transitionend\",n),s(!1)})):s(!0)}},ignoredFramesTally:c})}function td(){var e,n,t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).collapsed;return(0,y.jsx)(\"svg\",(e=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-call-stack-chevron-icon\":!0,\"data-collapsed\":t,width:\"16\",height:\"16\",fill:\"none\"},\"boolean\"==typeof t?{style:{transform:t?void 0:\"rotate(90deg)\"}}:{}),n=n={children:(0,y.jsx)(\"path\",{style:{fill:\"var(--color-font)\"},fillRule:\"evenodd\",d:\"m6.75 3.94.53.53 2.824 2.823a1 1 0 0 1 0 1.414L7.28 11.53l-.53.53L5.69 11l.53-.53L8.69 8 6.22 5.53 5.69 5l1.06-1.06Z\",clipRule:\"evenodd\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e))}function tf(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tp(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return tf(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tf(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function th(e){var n=e.reactOutputComponentDiff,t=tp((0,x.useState)(!0),2),r=t[0],o=t[1],a=(0,x.useMemo)(function(){var e=[];return n.split(\"\\n\").forEach(function(n,t){var r,o,a=\"+\"===n[0]||\"-\"===n[0],i=\">\"===n[0],l=a||i,s=l?n[0]:\"\",c=l?n.indexOf(s):-1,u=tp(l?[n.slice(0,c),n.slice(c+1)]:[n,\"\"],2),d=u[0],f=u[1];a?e.push((0,y.jsx)(\"span\",{\"data-nextjs-container-errors-pseudo-html-line\":!0,\"data-nextjs-container-errors-pseudo-html--diff\":\"+\"===s?\"add\":\"remove\",children:(0,y.jsxs)(\"span\",{children:[d,(0,y.jsx)(\"span\",{\"data-nextjs-container-errors-pseudo-html-line-sign\":!0,children:s}),f,\"\\n\"]})},\"comp-diff\"+t)):e.push((0,y.jsxs)(\"span\",(r=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({\"data-nextjs-container-errors-pseudo-html-line\":!0},i?{\"data-nextjs-container-errors-pseudo-html--diff\":\"error\"}:void 0),o=o={children:[d,(0,y.jsx)(\"span\",{\"data-nextjs-container-errors-pseudo-html-line-sign\":!0,children:s}),f,\"\\n\"]},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(o)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(o)).forEach(function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(o,e))}),r),\"comp-diff\"+t))}),e},[n]);return(0,y.jsxs)(\"div\",{\"data-nextjs-container-errors-pseudo-html\":!0,\"data-nextjs-container-errors-pseudo-html-collapse\":r,children:[(0,y.jsx)(\"button\",{\"aria-expanded\":!r,\"aria-label\":\"complete Component Stack\",\"data-nextjs-container-errors-pseudo-html-collapse-button\":!0,onClick:function(){return o(!r)},children:(0,y.jsx)(td,{collapsed:r})}),(0,y.jsx)(\"pre\",{className:\"nextjs__container_errors__component-stack\",children:(0,y.jsx)(\"code\",{children:a})})]})}var tg=Symbol.for(\"NextjsError\");function tm(e){return e[tg]||null}function tv(e,n,t,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){t(e);return}l.done?n(s):Promise.resolve(s).then(r,o)}function tb(e){return function(){var n=this,t=arguments;return new Promise(function(r,o){var a=e.apply(n,t);function i(e){tv(a,r,o,i,l,\"next\",e)}function l(e){tv(a,r,o,i,l,\"throw\",e)}i(void 0)})}}function ty(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function tx(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function tw(e,n){var t,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){var c=[l,s];if(t)throw TypeError(\"Generator is already executing.\");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(t=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=n.call(e,a)}catch(e){c=[6,e],r=0}finally{t=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var tj=function(e){if(\"use\"in x){var n=e.frames;if(\"function\"!=typeof n)throw Error(\"Invariant: frames must be a function when the React version has React.use. This is a bug in Next.js.\");return x.use(n())}if(!Array.isArray(e.frames))throw Error(\"Invariant: frames must be an array when the React version does not have React.use. This is a bug in Next.js.\");return e.frames};function tk(e){var n=e.error,t=e.dialogResizerRef,r=tj(n),o=(0,x.useMemo)(function(){var e,n=r.findIndex(function(e){return!e.ignored&&!!e.originalCodeFrame&&!!e.originalStackFrame});return null!=(e=r[n])?e:null},[r]);return(0,y.jsxs)(y.Fragment,{children:[o&&(0,y.jsx)(eq,{stackFrame:o.originalStackFrame,codeFrame:o.originalCodeFrame}),r.length>0&&(0,y.jsx)(tu,{dialogResizerRef:t,frames:r})]})}var tA=\"\\n  \".concat(\"\\n  [data-nextjs-container-errors-pseudo-html] {\\n    padding: 8px 0;\\n    margin: 8px 0;\\n    border: 1px solid var(--color-gray-400);\\n    background: var(--color-background-200);\\n    color: var(--color-syntax-constant);\\n    font-family: var(--font-stack-monospace);\\n    font-size: var(--size-12);\\n    line-height: 1.33em; /* 16px in 12px font size */\\n    border-radius: var(--rounded-md-2);\\n  }\\n  [data-nextjs-container-errors-pseudo-html-line] {\\n    display: inline-block;\\n    width: 100%;\\n    padding-left: 40px;\\n    line-height: calc(5 / 3);\\n  }\\n  [data-nextjs-container-errors-pseudo-html--diff='error'] {\\n    background: var(--color-amber-100);\\n    box-shadow: 2px 0 0 0 var(--color-amber-900) inset;\\n    font-weight: bold;\\n  }\\n  [data-nextjs-container-errors-pseudo-html-collapse-button] {\\n    all: unset;\\n    margin-left: 12px;\\n    &:focus {\\n      outline: none;\\n    }\\n  }\\n  [data-nextjs-container-errors-pseudo-html--diff='add'] {\\n    background: var(--color-green-300);\\n  }\\n  [data-nextjs-container-errors-pseudo-html-line-sign] {\\n    margin-left: calc(24px * -1);\\n    margin-right: 24px;\\n  }\\n  [data-nextjs-container-errors-pseudo-html--diff='add']\\n    [data-nextjs-container-errors-pseudo-html-line-sign] {\\n    color: var(--color-green-900);\\n  }\\n  [data-nextjs-container-errors-pseudo-html--diff='remove'] {\\n    background: var(--color-red-300);\\n  }\\n  [data-nextjs-container-errors-pseudo-html--diff='remove']\\n    [data-nextjs-container-errors-pseudo-html-line-sign] {\\n    color: var(--color-red-900);\\n    margin-left: calc(24px * -1);\\n    margin-right: 24px;\\n  }\\n  [data-nextjs-container-errors-pseudo-html--diff='error']\\n    [data-nextjs-container-errors-pseudo-html-line-sign] {\\n    color: var(--color-amber-900);\\n  }\\n  \\n  [data-nextjs-container-errors-pseudo-html--hint] {\\n    display: inline-block;\\n    font-size: 0;\\n    height: 0;\\n  }\\n  [data-nextjs-container-errors-pseudo-html--tag-adjacent='false'] {\\n    color: var(--color-accents-1);\\n  }\\n  .nextjs__container_errors__component-stack {\\n    margin: 0;\\n  }\\n  [data-nextjs-container-errors-pseudo-html-collapse='true']\\n    .nextjs__container_errors__component-stack\\n    code {\\n    max-height: 120px;\\n    mask-image: linear-gradient(to bottom,rgba(0,0,0,0) 0%,black 10%);\\n    padding-bottom: 40px;\\n  }\\n  .nextjs__container_errors__component-stack code {\\n    display: block;\\n    width: 100%;\\n    white-space: pre-wrap;\\n    scroll-snap-type: y mandatory;\\n    overflow-y: hidden;\\n  }\\n  [data-nextjs-container-errors-pseudo-html--diff] {\\n    scroll-snap-align: center;\\n  }\\n  .error-overlay-hydration-error-diff-plus-icon {\\n    color: var(--color-green-900);\\n  }\\n  .error-overlay-hydration-error-diff-minus-icon {\\n    color: var(--color-red-900);\\n  }\\n\",\"\\n\");function tO(e){return e&&\"undefined\"!=typeof Symbol&&e.constructor===Symbol?\"symbol\":typeof e}function tC(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tS(e){var n,t,r,o,a,i=e.runtimeErrors,l=e.getSquashedHydrationErrorDetails,s=(r=(0,x.useState)(0),o=2,function(e){if(Array.isArray(e))return e}(r)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(r,2)||function(e,n){if(e){if(\"string\"==typeof e)return tC(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tC(e,n)}}(r,o)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),c=s[0],u=s[1],d=(0,x.useMemo)(function(){return 0===i.length},[i.length]),f=(0,x.useMemo)(function(){var e;return null!=(e=i[c])?e:null},[c,i]),p=(n=null==f?void 0:f.error,t=l,(0,x.useMemo)(function(){if(void 0===n)return tL;var e,r,o,a=t(n);if(null!==a)return{hydrationWarning:null!=(r=a.warning)?r:null,notes:null,reactOutputComponentDiff:null!=(o=a.reactOutputComponentDiff)?o:null};if(!(ng((e=n).message)||/Hydration failed because the server rendered (text|HTML) didn't match the client\\./.test(e.message)||/A tree hydrated but some attributes of the server rendered HTML didn't match the client properties./.test(e.message)))return tL;var i=function(e){var n=e.message;if(ng(n)){var t=nc(n.split(\"\\n\\n\"),2),r=t[0],o=t[1],a=(void 0===o?\"\":o).trim();return{message:\"\"===a?n.trim():r.trim(),diff:a,notes:null}}var i=nc(n.split(\"\".concat(nf)),2),l=i[0],s=i[1],c=l.trim();if(void 0!==s&&s.length>1){var u=[];s.split(\"\\n\").forEach(function(e){\"\"!==e.trim()&&(e.trim().startsWith(\"at \")||u.push(e))});var d=nu(c.split(\"\\n\\n\")),f=d[0],p=d.slice(1);return{message:f,diff:u.join(\"\\n\"),notes:p.join(\"\\n\\n\")||null}}var h=nu(c.split(\"\\n\\n\"));return{message:h[0],diff:null,notes:h.slice(1).join(\"\\n\\n\")}}(n),l=i.message,s=i.notes,c=i.diff;return null===l?tL:{hydrationWarning:l,notes:s,reactOutputComponentDiff:c}},[n,t]));if(d||!f)return{isLoading:d,activeIdx:c,setActiveIndex:u,activeError:null,errorDetails:null,errorCode:null,errorType:null,notes:null,hydrationWarning:null};var h=f.error,g=(void 0===(a=h)?\"undefined\":tO(a))===\"object\"&&null!==a&&\"__NEXT_ERROR_CODE\"in a&&\"string\"==typeof a.__NEXT_ERROR_CODE?a.__NEXT_ERROR_CODE:(void 0===a?\"undefined\":tO(a))===\"object\"&&null!==a&&\"digest\"in a&&\"string\"==typeof a.digest?a.digest.split(\"@\").find(function(e){return e.startsWith(\"E\")}):void 0,m=tz(h,f.type),v=p.notes,b=p.hydrationWarning;return{isLoading:d,activeIdx:c,setActiveIndex:u,activeError:f,errorDetails:p,errorCode:g,errorType:m,notes:v,hydrationWarning:b}}function tE(e){return e.startsWith(\"https://nextjs.org\")}function t_(e){var n=e.message;return(0,y.jsx)(eb,{text:n,matcher:tE})}function tP(e){var n=e.error,t=\"environmentName\"in n?n.environmentName:\"\",r=t?\"[ \".concat(t,\" ] \"):\"\",o=n.message;return o.startsWith(r)&&(o=o.slice(r.length)),(0,y.jsx)(y.Fragment,{children:(0,y.jsx)(eb,{text:o,matcher:tE})})}function tz(e,n){return\"recoverable\"===n?\"Recoverable \".concat(e.name):\"console\"===n?\"Console \".concat(e.name):\"Runtime \".concat(e.name)}var tL={hydrationWarning:null,notes:null,reactOutputComponentDiff:null};function tT(e){var n,t,r=e.getSquashedHydrationErrorDetails,o=e.runtimeErrors,a=e.debugInfo,i=e.onClose,l=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"getSquashedHydrationErrorDetails\",\"runtimeErrors\",\"debugInfo\",\"onClose\"]),s=(0,x.useRef)(null),c=tS({runtimeErrors:o,getSquashedHydrationErrorDetails:r}),u=c.isLoading,d=c.errorCode,f=c.errorType,p=c.notes,h=c.hydrationWarning,g=c.activeIdx,m=c.errorDetails,v=c.activeError,b=c.setActiveIndex;if(u)return(0,y.jsx)(nZ,{children:(0,y.jsx)(n2,{})});if(!v)return null;var w=v.error,j=[\"server\",\"edge-server\"].includes(tm(w)||\"\");return(0,y.jsxs)(n9,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({errorCode:d,errorType:f,errorMessage:h?(0,y.jsx)(t_,{message:h}):(0,y.jsx)(tP,{error:w}),onClose:j?void 0:i,debugInfo:a,error:w,runtimeErrors:o,activeIdx:g,setActiveIndex:b,dialogResizerRef:s},l),t=t={children:[(0,y.jsxs)(\"div\",{className:\"error-overlay-notes-container\",children:[p?(0,y.jsx)(y.Fragment,{children:(0,y.jsx)(\"p\",{id:\"nextjs__container_errors__notes\",className:\"nextjs__container_errors__notes\",children:p})}):null,h?(0,y.jsx)(\"p\",{id:\"nextjs__container_errors__link\",className:\"nextjs__container_errors__link\",children:(0,y.jsx)(eb,{text:\"See more info here: \".concat(np)})}):null]}),m.reactOutputComponentDiff?(0,y.jsx)(th,{reactOutputComponentDiff:m.reactOutputComponentDiff||\"\"}):null,(0,y.jsx)(x.Suspense,{fallback:(0,y.jsx)(\"div\",{\"data-nextjs-error-suspended\":!0}),children:(0,y.jsx)(tk,{error:v,dialogResizerRef:s},v.id.toString())})]},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}var tR=x.forwardRef(function(e,n){var t,r,o=e.onClick,a=e.children,i=e.className,l=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"onClick\",\"children\",\"className\"]);return(0,y.jsx)(\"div\",(t=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},l),r=r={ref:n,onClick:function(e){return e.target.closest(\"a\")||e.preventDefault(),null==o?void 0:o()},className:(0,eJ.cx)(\"nextjs-toast\",i),children:a},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t))});function tN(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tD(e){var n,t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:750,o=(n=(0,x.useState)(!1),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return tN(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tN(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),a=o[0],i=o[1],l=(0,x.useRef)(null),s=(0,x.useRef)(null);return(0,x.useEffect)(function(){if(s.current&&(clearTimeout(s.current),s.current=null),e)null===l.current&&(l.current=Date.now()),i(!0);else if(null===l.current)i(!1);else{var n=Date.now()-l.current,t=r*Math.ceil(n/r)-n;t>0?s.current=setTimeout(function(){i(!1),l.current=null},t):(i(!1),l.current=null)}return function(){s.current&&clearTimeout(s.current)}},[e,r]),a}function tB(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tM(e){var n,t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=(0,x.useRef)(null),a=(n=(0,x.useState)(!1),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return tB(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tB(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),i=a[0],l=a[1];return(0,x.useEffect)(function(){if(e>0){var n=o.current?Date.now()-o.current:-1;if(o.current=Date.now(),!(n<=r)){l(!0);var t=window.setTimeout(function(){l(!1)},r);return function(){clearTimeout(t)}}}},[e,r]),i}function tI(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tH(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return tI(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tI(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function tF(e){var n=tH((0,x.useState)(0),2),t=n[0],r=n[1];return(0,x.useEffect)(function(){var n=e.current;if(n){var t=new ResizeObserver(function(e){r(tH(e,1)[0].contentRect.width)});return t.observe(n),function(){return t.disconnect()}}},[e]),t}function tU(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function tV(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function tq(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function tW(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function t$(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return tU(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return tU(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function tZ(){var e,n,t=(e=[\"\\n          [data-next-badge-root] {\\n            --timing: cubic-bezier(0.23, 0.88, 0.26, 0.92);\\n            --duration-long: 250ms;\\n            --color-outer-border: #171717;\\n            --color-inner-border: hsla(0, 0%, 100%, 0.14);\\n            --color-hover-alpha-subtle: hsla(0, 0%, 100%, 0.13);\\n            --color-hover-alpha-error: hsla(0, 0%, 100%, 0.2);\\n            --color-hover-alpha-error-2: hsla(0, 0%, 100%, 0.25);\\n            --mark-size: calc(var(--size) - var(--size-2) * 2);\\n\\n            --focus-color: var(--color-blue-800);\\n            --focus-ring: 2px solid var(--focus-color);\\n\\n            &:has([data-next-badge][data-error='true']) {\\n              --focus-color: #fff;\\n            }\\n          }\\n\\n          [data-disabled-icon] {\\n            display: flex;\\n            align-items: center;\\n            justify-content: center;\\n            padding-right: 4px;\\n          }\\n\\n          [data-next-badge] {\\n            -webkit-font-smoothing: antialiased;\\n            width: var(--size);\\n            height: var(--size);\\n            display: flex;\\n            align-items: center;\\n            position: relative;\\n            background: rgba(0, 0, 0, 0.8);\\n            box-shadow:\\n              0 0 0 1px var(--color-outer-border),\\n              inset 0 0 0 1px var(--color-inner-border),\\n              0px 16px 32px -8px rgba(0, 0, 0, 0.24);\\n            backdrop-filter: blur(48px);\\n            border-radius: var(--rounded-full);\\n            user-select: none;\\n            cursor: pointer;\\n            scale: 1;\\n            overflow: hidden;\\n            will-change: scale, box-shadow, width, background;\\n            transition:\\n              scale var(--duration-short) var(--timing),\\n              width var(--duration-long) var(--timing),\\n              box-shadow var(--duration-long) var(--timing),\\n              background var(--duration-short) ease;\\n\\n            &:active[data-error='false'] {\\n              scale: 0.95;\\n            }\\n\\n            &[data-animate='true']:not(:hover) {\\n              scale: 1.02;\\n            }\\n\\n            &[data-error='false']:has([data-next-mark]:focus-visible) {\\n              outline: var(--focus-ring);\\n              outline-offset: 3px;\\n            }\\n\\n            &[data-error='true'] {\\n              background: #ca2a30;\\n              --color-inner-border: #e5484d;\\n\\n              [data-next-mark] {\\n                background: var(--color-hover-alpha-error);\\n                outline-offset: 0px;\\n\\n                &:focus-visible {\\n                  outline: var(--focus-ring);\\n                  outline-offset: -1px;\\n                }\\n\\n                &:hover {\\n                  background: var(--color-hover-alpha-error-2);\\n                }\\n              }\\n            }\\n\\n            &[data-error-expanded='false'][data-error='true'] ~ [data-dot] {\\n              scale: 1;\\n            }\\n\\n            > div {\\n              display: flex;\\n            }\\n          }\\n\\n          [data-issues-collapse]:focus-visible {\\n            outline: var(--focus-ring);\\n          }\\n\\n          [data-issues]:has([data-issues-open]:focus-visible) {\\n            outline: var(--focus-ring);\\n            outline-offset: -1px;\\n          }\\n\\n          [data-dot] {\\n            content: '';\\n            width: var(--size-8);\\n            height: var(--size-8);\\n            background: #fff;\\n            box-shadow: 0 0 0 1px var(--color-outer-border);\\n            border-radius: 50%;\\n            position: absolute;\\n            top: 2px;\\n            right: 0px;\\n            scale: 0;\\n            pointer-events: none;\\n            transition: scale 200ms var(--timing);\\n            transition-delay: var(--duration-short);\\n          }\\n\\n          [data-issues] {\\n            --padding-left: 8px;\\n            display: flex;\\n            gap: 2px;\\n            align-items: center;\\n            padding-left: 8px;\\n            padding-right: 8px;\\n            height: var(--size-32);\\n            margin-right: 2px;\\n            border-radius: var(--rounded-full);\\n            transition: background var(--duration-short) ease;\\n\\n            &:has([data-issues-open]:hover) {\\n              background: var(--color-hover-alpha-error);\\n            }\\n\\n            &:has([data-issues-collapse]) {\\n              padding-right: calc(var(--padding-left) / 2);\\n            }\\n\\n            [data-cross] {\\n              translate: 0px -1px;\\n            }\\n          }\\n\\n          [data-issues-open] {\\n            font-size: var(--size-13);\\n            color: white;\\n            width: fit-content;\\n            height: 100%;\\n            display: flex;\\n            gap: 2px;\\n            align-items: center;\\n            margin: 0;\\n            line-height: var(--size-36);\\n            font-weight: 500;\\n            z-index: 2;\\n            white-space: nowrap;\\n\\n            &:focus-visible {\\n              outline: 0;\\n            }\\n          }\\n\\n          [data-issues-collapse] {\\n            width: var(--size-24);\\n            height: var(--size-24);\\n            border-radius: var(--rounded-full);\\n            transition: background var(--duration-short) ease;\\n\\n            &:hover {\\n              background: var(--color-hover-alpha-error);\\n            }\\n          }\\n\\n          [data-cross] {\\n            color: #fff;\\n            width: var(--size-12);\\n            height: var(--size-12);\\n          }\\n\\n          [data-next-mark] {\\n            width: var(--mark-size);\\n            height: var(--mark-size);\\n            margin: 0 2px;\\n            display: flex;\\n            align-items: center;\\n            border-radius: var(--rounded-full);\\n            transition: background var(--duration-long) var(--timing);\\n\\n            &:focus-visible {\\n              outline: 0;\\n            }\\n\\n            &:hover {\\n              background: var(--color-hover-alpha-subtle);\\n            }\\n\\n            svg {\\n              flex-shrink: 0;\\n              width: var(--size-40);\\n              height: var(--size-40);\\n            }\\n          }\\n\\n          [data-issues-count-animation] {\\n            display: grid;\\n            place-items: center center;\\n            font-variant-numeric: tabular-nums;\\n\\n            &[data-animate='false'] {\\n              [data-issues-count-exit],\\n              [data-issues-count-enter] {\\n                animation-duration: 0ms;\\n              }\\n            }\\n\\n            > * {\\n              grid-area: 1 / 1;\\n            }\\n\\n            [data-issues-count-exit] {\\n              animation: fadeOut 300ms var(--timing) forwards;\\n            }\\n\\n            [data-issues-count-enter] {\\n              animation: fadeIn 300ms var(--timing) forwards;\\n            }\\n          }\\n\\n          [data-issues-count-plural] {\\n            display: inline-block;\\n            &[data-animate='true'] {\\n              animation: fadeIn 300ms var(--timing) forwards;\\n            }\\n          }\\n\\n          .path0 {\\n            animation: draw0 1.5s ease-in-out infinite;\\n          }\\n\\n          .path1 {\\n            animation: draw1 1.5s ease-out infinite;\\n            animation-delay: 0.3s;\\n          }\\n\\n          .paused {\\n            stroke-dashoffset: 0;\\n          }\\n\\n          @keyframes fadeIn {\\n            0% {\\n              opacity: 0;\\n              filter: blur(2px);\\n              transform: translateY(8px);\\n            }\\n            100% {\\n              opacity: 1;\\n              filter: blur(0px);\\n              transform: translateY(0);\\n            }\\n          }\\n\\n          @keyframes fadeOut {\\n            0% {\\n              opacity: 1;\\n              filter: blur(0px);\\n              transform: translateY(0);\\n            }\\n            100% {\\n              opacity: 0;\\n              transform: translateY(-12px);\\n              filter: blur(2px);\\n            }\\n          }\\n\\n          @keyframes draw0 {\\n            0%,\\n            25% {\\n              stroke-dashoffset: -29.6;\\n            }\\n            25%,\\n            50% {\\n              stroke-dashoffset: 0;\\n            }\\n            50%,\\n            75% {\\n              stroke-dashoffset: 0;\\n            }\\n            75%,\\n            100% {\\n              stroke-dashoffset: 29.6;\\n            }\\n          }\\n\\n          @keyframes draw1 {\\n            0%,\\n            20% {\\n              stroke-dashoffset: -11.6;\\n            }\\n            20%,\\n            50% {\\n              stroke-dashoffset: 0;\\n            }\\n            50%,\\n            75% {\\n              stroke-dashoffset: 0;\\n            }\\n            75%,\\n            100% {\\n              stroke-dashoffset: 11.6;\\n            }\\n          }\\n\\n          @media (prefers-reduced-motion) {\\n            [data-issues-count-exit],\\n            [data-issues-count-enter],\\n            [data-issues-count-plural] {\\n              animation-duration: 0ms !important;\\n            }\\n          }\\n        \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return tZ=function(){return t},t}var tY=(0,x.forwardRef)(function(e,n){var t=e.disabled,r=e.issueCount,o=e.isDevBuilding,a=e.isDevRendering,i=e.isBuildError,l=e.onTriggerClick,s=e.toggleErrorOverlay,c=e.scale,u=tW(e,[\"disabled\",\"issueCount\",\"isDevBuilding\",\"isDevRendering\",\"isBuildError\",\"onTriggerClick\",\"toggleErrorOverlay\",\"scale\"]),d=r>0,f=t$((0,x.useState)(d),2),p=f[0],h=f[1],g=t$((0,x.useState)(!1),2),m=g[0],v=g[1],b=tM(r,150),w=(0,x.useRef)(null),j=(0,x.useRef)(null),k=tF(j),A=tD(o||a),O=p||t;return(0,x.useEffect)(function(){h(d)},[d]),(0,y.jsxs)(\"div\",{\"data-next-badge-root\":!0,style:{\"--size\":\"\".concat(36/(void 0===c?1:c),\"px\"),\"--duration-short\":\"\".concat(150,\"ms\"),display:t&&(!d||m)?\"none\":\"block\"},children:[(0,y.jsx)(\"style\",{children:ei(tZ())}),(0,y.jsx)(\"div\",{\"data-next-badge\":!0,\"data-error\":d,\"data-error-expanded\":O,\"data-animate\":b,style:{width:0===k?\"auto\":k},children:(0,y.jsxs)(\"div\",{ref:j,children:[!t&&(0,y.jsx)(\"button\",tq(tV({ref:function(){for(var e=arguments.length,n=Array(e),t=0;t<e;t++)n[t]=arguments[t];var r=n.filter(Boolean);return r.length<=1?r[0]||null:function(e){var n=!0,t=!1,o=void 0;try{for(var a,i=r[Symbol.iterator]();!(n=(a=i.next()).done);n=!0){var l=a.value;\"function\"==typeof l?l(e):l&&(l.current=e)}}catch(e){t=!0,o=e}finally{try{n||null==i.return||i.return()}finally{if(t)throw o}}}}(w,n),\"data-next-mark\":!0,\"data-next-mark-loading\":A,onClick:l},u),{children:(0,y.jsx)(tK,{isLoading:A,isDevBuilding:o})})),O&&(0,y.jsxs)(\"div\",{\"data-issues\":!0,children:[(0,y.jsxs)(\"button\",{\"data-issues-open\":!0,\"aria-label\":\"Open issues overlay\",onClick:s,children:[t&&(0,y.jsx)(\"div\",{\"data-disabled-icon\":!0,children:(0,y.jsx)(tQ,{})}),(0,y.jsx)(tX,{animate:b,\"data-issues-count-animation\":!0,children:r},r),\" \",(0,y.jsxs)(\"div\",{children:[\"Issue\",r>1&&(0,y.jsx)(\"span\",{\"aria-hidden\":!0,\"data-issues-count-plural\":!0,\"data-animate\":b&&2===r,children:\"s\"})]})]}),!i&&(0,y.jsx)(\"button\",{\"data-issues-collapse\":!0,\"aria-label\":\"Collapse issues badge\",onClick:function(){var e;t?v(!0):h(!1),null==(e=w.current)||e.focus()},children:(0,y.jsx)(tG,{\"data-cross\":!0})})]})]})}),(0,y.jsx)(\"div\",{\"aria-hidden\":!0,\"data-dot\":!0})]})});function tX(e){var n=e.children,t=e.animate,r=tW(e,[\"children\",\"animate\"]);return(0,y.jsxs)(\"div\",tq(tV({},r),{\"data-animate\":void 0===t||t,children:[(0,y.jsx)(\"div\",{\"aria-hidden\":!0,\"data-issues-count-exit\":!0,children:n-1}),(0,y.jsx)(\"div\",{\"data-issues-count\":!0,\"data-issues-count-enter\":!0,children:n})]}))}function tK(e){var n=e.isLoading,t=e.isDevBuilding?\"rgba(255,255,255,0.7)\":\"white\";return(0,y.jsxs)(\"svg\",{width:\"40\",height:\"40\",viewBox:\"0 0 40 40\",fill:\"none\",\"data-next-mark-loading\":n,children:[(0,y.jsxs)(\"g\",{transform:\"translate(8.5, 13)\",children:[(0,y.jsx)(\"path\",{className:n?\"path0\":\"paused\",d:\"M13.3 15.2 L2.34 1 V12.6\",fill:\"none\",stroke:\"url(#next_logo_paint0_linear_1357_10853)\",strokeWidth:\"1.86\",mask:\"url(#next_logo_mask0)\",strokeDasharray:\"29.6\",strokeDashoffset:\"29.6\"}),(0,y.jsx)(\"path\",{className:n?\"path1\":\"paused\",d:\"M11.825 1.5 V13.1\",strokeWidth:\"1.86\",stroke:\"url(#next_logo_paint1_linear_1357_10853)\",strokeDasharray:\"11.6\",strokeDashoffset:\"11.6\"})]}),(0,y.jsxs)(\"defs\",{children:[(0,y.jsxs)(\"linearGradient\",{id:\"next_logo_paint0_linear_1357_10853\",x1:\"9.95555\",y1:\"11.1226\",x2:\"15.4778\",y2:\"17.9671\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{stopColor:t}),(0,y.jsx)(\"stop\",{offset:\"0.604072\",stopColor:t,stopOpacity:\"0\"}),(0,y.jsx)(\"stop\",{offset:\"1\",stopColor:t,stopOpacity:\"0\"})]}),(0,y.jsxs)(\"linearGradient\",{id:\"next_logo_paint1_linear_1357_10853\",x1:\"11.8222\",y1:\"1.40039\",x2:\"11.791\",y2:\"9.62542\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{stopColor:t}),(0,y.jsx)(\"stop\",{offset:\"1\",stopColor:t,stopOpacity:\"0\"})]}),(0,y.jsxs)(\"mask\",{id:\"next_logo_mask0\",children:[(0,y.jsx)(\"rect\",{width:\"100%\",height:\"100%\",fill:\"white\"}),(0,y.jsx)(\"rect\",{width:\"5\",height:\"1.5\",fill:\"black\"})]})]})]})}function tQ(){return(0,y.jsx)(\"svg\",{width:\"12\",height:\"12\",viewBox:\"0 0 12 12\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M3.98071 1.125L1.125 3.98071L1.125 8.01929L3.98071 10.875H8.01929L10.875 8.01929V3.98071L8.01929 1.125H3.98071ZM3.82538 0C3.62647 0 3.4357 0.0790176 3.29505 0.21967L0.21967 3.29505C0.0790176 3.4357 0 3.62647 0 3.82538V8.17462C0 8.37353 0.0790178 8.5643 0.21967 8.70495L3.29505 11.7803C3.4357 11.921 3.62647 12 3.82538 12H8.17462C8.37353 12 8.5643 11.921 8.70495 11.7803L11.7803 8.70495C11.921 8.5643 12 8.37353 12 8.17462V3.82538C12 3.62647 11.921 3.4357 11.7803 3.29505L8.70495 0.21967C8.5643 0.0790177 8.37353 0 8.17462 0H3.82538ZM6.5625 2.8125V3.375V6V6.5625H5.4375V6V3.375V2.8125H6.5625ZM6 9C6.41421 9 6.75 8.66421 6.75 8.25C6.75 7.83579 6.41421 7.5 6 7.5C5.58579 7.5 5.25 7.83579 5.25 8.25C5.25 8.66421 5.58579 9 6 9Z\",fill:\"#EAEAEA\"})})}function tG(e){return(0,y.jsx)(\"svg\",tq(tV({width:\"12\",height:\"12\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),{children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M3.08889 11.8384L2.62486 12.3024L1.69678 11.3744L2.16082 10.9103L6.07178 6.99937L2.16082 3.08841L1.69678 2.62437L2.62486 1.69629L3.08889 2.16033L6.99986 6.07129L10.9108 2.16033L11.3749 1.69629L12.3029 2.62437L11.8389 3.08841L7.92793 6.99937L11.8389 10.9103L12.3029 11.3744L11.3749 12.3024L10.9108 11.8384L6.99986 7.92744L3.08889 11.8384Z\",fill:\"currentColor\"})}))}var tJ=__nested_webpack_require_381207__(\"./src/next-devtools/dev-overlay/hooks/use-delayed-render.ts\"),t0=__nested_webpack_require_381207__(\"./src/next-devtools/dev-overlay/components/errors/dev-tools-indicator/dev-tools-info/dev-tools-info.tsx\");function t1(e){var n,t;return(0,y.jsxs)(t0.x,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({title:\"Turbopack\",learnMoreLink:\"https://nextjs.org/docs/app/api-reference/turbopack\"},e),t=t={children:[(0,y.jsxs)(\"article\",{className:\"dev-tools-info-article\",children:[(0,y.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"Turbopack is an incremental bundler optimized for JavaScript and TypeScript, written in Rust, and built into Next.js. Turbopack can be used in Next.js in both the\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"pages\"}),\" and\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"app\"}),\" directories for faster local development.\"]}),(0,y.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"To enable Turbopack, use the\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"--turbopack\"}),\" flag when running the Next.js development server.\"]})]}),(0,y.jsx)(\"div\",{className:\"dev-tools-info-code-block-container\",children:(0,y.jsxs)(\"div\",{className:\"dev-tools-info-code-block\",children:[(0,y.jsx)(e3,{actionLabel:\"Copy Next.js Turbopack Command\",successLabel:\"Next.js Turbopack Command Copied\",content:\"--turbopack\",className:\"dev-tools-info-copy-button\"}),(0,y.jsx)(\"pre\",{className:\"dev-tools-info-code-block-pre\",children:(0,y.jsxs)(\"code\",{children:[(0,y.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\"  \"}),(0,y.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\"{\"}),(0,y.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line\",children:[\"  \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"scripts\"'}),\": \",\"{\"]}),(0,y.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line dev-tools-info-highlight\",children:[\"    \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"dev\"'}),\":\",\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-value\",children:'\"next dev --turbopack\"'}),\",\"]}),(0,y.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line\",children:[\"    \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"build\"'}),\":\",\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-value\",children:'\"next build\"'}),\",\"]}),(0,y.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line\",children:[\"    \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"start\"'}),\":\",\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-value\",children:'\"next start\"'}),\",\"]}),(0,y.jsxs)(\"div\",{className:\"dev-tools-info-code-block-line\",children:[\"    \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-key\",children:'\"lint\"'}),\":\",\" \",(0,y.jsx)(\"span\",{className:\"dev-tools-info-code-block-json-value\",children:'\"next lint\"'})]}),(0,y.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\"  }\"}),(0,y.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\"}\"}),(0,y.jsx)(\"div\",{className:\"dev-tools-info-code-block-line\",children:\"  \"})]})})]})})]},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function t2(e){var n=e.routerType;return(0,y.jsxs)(\"article\",{className:\"dev-tools-info-article\",children:[(0,y.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"The path\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:window.location.pathname}),\" \",'is marked as \"static\" since it will be prerendered during the build time.']}),(0,y.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"With Static Rendering, routes are rendered at build time, or in the background after\",\" \",(0,y.jsx)(\"a\",{className:\"dev-tools-info-link\",href:\"pages\"===n?\"https://nextjs.org/docs/pages/building-your-application/data-fetching/incremental-static-regeneration\":\"https://nextjs.org/docs/app/building-your-application/data-fetching/incremental-static-regeneration\",target:\"_blank\",rel:\"noopener noreferrer\",children:\"data revalidation\"}),\".\"]}),(0,y.jsx)(\"p\",{className:\"dev-tools-info-paragraph\",children:\"Static rendering is useful when a route has data that is not personalized to the user and can be known at build time, such as a static blog post or a product page.\"})]})}function t4(e){var n=e.routerType;return(0,y.jsxs)(\"article\",{className:\"dev-tools-info-article\",children:[(0,y.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"The path\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:window.location.pathname}),\" \",'is marked as \"dynamic\" since it will be rendered for each user at',\" \",(0,y.jsx)(\"strong\",{children:\"request time\"}),\".\"]}),(0,y.jsx)(\"p\",{className:\"dev-tools-info-paragraph\",children:\"Dynamic rendering is useful when a route has data that is personalized to the user or has information that can only be known at request time, such as cookies or the URL's search params.\"}),\"pages\"===n?(0,y.jsxs)(\"p\",{className:\"dev-tools-info-pagraph\",children:[\"Exporting the\",\" \",(0,y.jsx)(\"a\",{className:\"dev-tools-info-link\",href:\"https://nextjs.org/docs/pages/building-your-application/data-fetching/get-server-side-props\",target:\"_blank\",rel:\"noopener noreferrer\",children:\"getServerSideProps\"}),\" \",\"function will opt the route into dynamic rendering. This function will be called by the server on every request.\"]}):(0,y.jsxs)(\"p\",{className:\"dev-tools-info-paragraph\",children:[\"During rendering, if a\",\" \",(0,y.jsx)(\"a\",{className:\"dev-tools-info-link\",href:\"https://nextjs.org/docs/app/building-your-application/rendering/server-components#dynamic-apis\",target:\"_blank\",rel:\"noopener noreferrer\",children:\"Dynamic API\"}),\" \",\"or a\",\" \",(0,y.jsx)(\"a\",{className:\"dev-tools-info-link\",href:\"https://nextjs.org/docs/app/api-reference/functions/fetch\",target:\"_blank\",rel:\"noopener noreferrer\",children:\"fetch\"}),\" \",\"option of\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"{ cache: 'no-store' }\"}),\" \",\"is discovered, Next.js will switch to dynamically rendering the whole route.\"]})]})}var t5={pages:{static:\"https://nextjs.org/docs/pages/building-your-application/rendering/static-site-generation\",dynamic:\"https://nextjs.org/docs/pages/building-your-application/rendering/server-side-rendering\"},app:{static:\"https://nextjs.org/docs/app/building-your-application/rendering/server-components#static-rendering-default\",dynamic:\"https://nextjs.org/docs/app/building-your-application/rendering/server-components#dynamic-rendering\"}};function t3(e){var n,t,r=e.routeType,o=e.routerType,a=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"routeType\",\"routerType\"]),i=\"Static\"===r,l=i?t5[o].static:t5[o].dynamic;return(0,y.jsx)(t0.x,(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({title:\"\".concat(r,\" Route\"),learnMoreLink:l},a),t=t={children:i?(0,y.jsx)(t2,{routerType:o}):(0,y.jsx)(t4,{routerType:o})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function t6(){return(0,y.jsx)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",viewBox:\"0 0 20 20\",fill:\"none\",children:(0,y.jsx)(\"path\",{fill:\"currentColor\",fillRule:\"evenodd\",d:\"m9.7 3.736.045-.236h.51l.044.236a2.024 2.024 0 0 0 1.334 1.536c.19.066.375.143.554.23.618.301 1.398.29 2.03-.143l.199-.136.36.361-.135.199a2.024 2.024 0 0 0-.143 2.03c.087.179.164.364.23.554.224.65.783 1.192 1.536 1.334l.236.044v.51l-.236.044a2.024 2.024 0 0 0-1.536 1.334 4.95 4.95 0 0 1-.23.554 2.024 2.024 0 0 0 .143 2.03l.136.199-.361.36-.199-.135a2.024 2.024 0 0 0-2.03-.143c-.179.087-.364.164-.554.23a2.024 2.024 0 0 0-1.334 1.536l-.044.236h-.51l-.044-.236a2.024 2.024 0 0 0-1.334-1.536 4.952 4.952 0 0 1-.554-.23 2.024 2.024 0 0 0-2.03.143l-.199.136-.36-.361.135-.199a2.024 2.024 0 0 0 .143-2.03 4.958 4.958 0 0 1-.23-.554 2.024 2.024 0 0 0-1.536-1.334l-.236-.044v-.51l.236-.044a2.024 2.024 0 0 0 1.536-1.334 4.96 4.96 0 0 1 .23-.554 2.024 2.024 0 0 0-.143-2.03l-.136-.199.361-.36.199.135a2.024 2.024 0 0 0 2.03.143c.179-.087.364-.164.554-.23a2.024 2.024 0 0 0 1.334-1.536ZM8.5 2h3l.274 1.46c.034.185.17.333.348.394.248.086.49.186.722.3.17.082.37.074.526-.033l1.226-.839 2.122 2.122-.84 1.226a.524.524 0 0 0-.032.526c.114.233.214.474.3.722.061.177.21.314.394.348L18 8.5v3l-1.46.274a.524.524 0 0 0-.394.348 6.47 6.47 0 0 1-.3.722.524.524 0 0 0 .033.526l.839 1.226-2.122 2.122-1.226-.84a.524.524 0 0 0-.526-.032 6.477 6.477 0 0 1-.722.3.524.524 0 0 0-.348.394L11.5 18h-3l-.274-1.46a.524.524 0 0 0-.348-.394 6.477 6.477 0 0 1-.722-.3.524.524 0 0 0-.526.033l-1.226.839-2.122-2.122.84-1.226a.524.524 0 0 0 .032-.526 6.453 6.453 0 0 1-.3-.722.524.524 0 0 0-.394-.348L2 11.5v-3l1.46-.274a.524.524 0 0 0 .394-.348c.086-.248.186-.49.3-.722a.524.524 0 0 0-.033-.526l-.839-1.226 2.122-2.122 1.226.84a.524.524 0 0 0 .526.032 6.46 6.46 0 0 1 .722-.3.524.524 0 0 0 .348-.394L8.5 2Zm3 8a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0Zm1.5 0a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z\",clipRule:\"evenodd\"})})}function t9(){return(0,y.jsx)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",fill:\"none\",children:(0,y.jsx)(\"path\",{fill:\"currentColor\",fillRule:\"evenodd\",d:\"m.191 2.063.56.498 13.5 12 .561.498.997-1.121-.56-.498-1.81-1.608 2.88-3.342v-.98l-3.204-3.72C10.645.923 6.365.686 3.594 3.08L1.748 1.44 1.188.94.19 2.063ZM14.761 8l-2.442 2.836-1.65-1.466a3.001 3.001 0 0 0-4.342-3.86l-1.6-1.422a5.253 5.253 0 0 1 7.251.682L14.76 8ZM7.526 6.576l1.942 1.727a1.499 1.499 0 0 0-1.942-1.727Zm-7.845.935 1.722-2 1.137.979L1.24 8l2.782 3.23A5.25 5.25 0 0 0 9.9 12.703l.54 1.4a6.751 6.751 0 0 1-7.555-1.892L-.318 8.49v-.98Z\",clipRule:\"evenodd\"})})}function t8(){return(0,y.jsxs)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"20\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",children:[(0,y.jsx)(\"g\",{clipPath:\"url(#light_icon_clip_path)\",children:(0,y.jsx)(\"path\",{fill:\"currentColor\",fillRule:\"evenodd\",d:\"M8.75.75V0h-1.5v2h1.5V.75ZM3.26 4.32l-.53-.53-.354-.353-.53-.53 1.06-1.061.53.53.354.354.53.53-1.06 1.06Zm8.42-1.06.53-.53.353-.354.53-.53 1.061 1.06-.53.53-.354.354-.53.53-1.06-1.06ZM8 11.25a3.25 3.25 0 1 0 0-6.5 3.25 3.25 0 0 0 0 6.5Zm0 1.5a4.75 4.75 0 1 0 0-9.5 4.75 4.75 0 0 0 0 9.5Zm6-5.5h2v1.5h-2v-1.5Zm-13.25 0H0v1.5h2v-1.5H.75Zm1.62 5.32-.53.53 1.06 1.06.53-.53.354-.353.53-.53-1.06-1.061-.53.53-.354.354Zm10.2 1.06.53.53 1.06-1.06-.53-.53-.354-.354-.53-.53-1.06 1.06.53.53.353.354ZM8.75 14v2h-1.5v-2h1.5Z\",clipRule:\"evenodd\"})}),(0,y.jsx)(\"defs\",{children:(0,y.jsx)(\"clipPath\",{id:\"light_icon_clip_path\",children:(0,y.jsx)(\"path\",{fill:\"currentColor\",d:\"M0 0h16v16H0z\"})})})]})}function t7(){return(0,y.jsx)(\"svg\",{\"data-testid\":\"geist-icon\",height:\"16\",strokeLinejoin:\"round\",viewBox:\"0 0 16 16\",width:\"16\",children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M1.5 8.00005C1.5 5.53089 2.99198 3.40932 5.12349 2.48889C4.88136 3.19858 4.75 3.95936 4.75 4.7501C4.75 8.61609 7.88401 11.7501 11.75 11.7501C11.8995 11.7501 12.048 11.7454 12.1953 11.7361C11.0955 13.1164 9.40047 14.0001 7.5 14.0001C4.18629 14.0001 1.5 11.3138 1.5 8.00005ZM6.41706 0.577759C2.78784 1.1031 0 4.22536 0 8.00005C0 12.1422 3.35786 15.5001 7.5 15.5001C10.5798 15.5001 13.2244 13.6438 14.3792 10.9921L13.4588 9.9797C12.9218 10.155 12.3478 10.2501 11.75 10.2501C8.71243 10.2501 6.25 7.78767 6.25 4.7501C6.25 3.63431 6.58146 2.59823 7.15111 1.73217L6.41706 0.577759ZM13.25 1V1.75V2.75L14.25 2.75H15V4.25H14.25H13.25V5.25V6H11.75V5.25V4.25H10.75L10 4.25V2.75H10.75L11.75 2.75V1.75V1H13.25Z\",fill:\"currentColor\"})})}function re(){return(0,y.jsx)(\"svg\",{width:\"16\",height:\"16\",strokeLinejoin:\"round\",children:(0,y.jsx)(\"path\",{fill:\"currentColor\",fillRule:\"evenodd\",d:\"M0 2a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v8.5a1 1 0 0 1-1 1H8.75v3h1.75V16h-5v-1.5h1.75v-3H1a1 1 0 0 1-1-1V2Zm1.5.5V10h13V2.5h-13Z\",clipRule:\"evenodd\"})})}function rn(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function rt(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return rn(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return rn(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var rr=\"bottom-left\"||0,ro=\"__nextjs_hide_shortcut\";function ra(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function ri(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||rs(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function rl(e){return function(e){if(Array.isArray(e))return ra(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||rs(e)||function(){throw TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function rs(e,n){if(e){if(\"string\"==typeof e)return ra(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return ra(e,n)}}function rc(){var e,n,t=(e=[\"\\n  .shortcut-recorder {\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n    gap: 8px;\\n    position: relative;\\n    font-family: var(--font-stack-sans);\\n\\n    .shortcut-recorder-button {\\n      display: flex;\\n      align-items: center;\\n      gap: 4px;\\n      background: transparent;\\n      border: 1px dashed var(--color-gray-500);\\n      border-radius: var(--rounded-lg);\\n      padding: 6px 8px;\\n      font-weight: 400;\\n      font-size: var(--size-14);\\n      color: var(--color-gray-1000);\\n      transition: border-color 150ms var(--timing-swift);\\n\\n      &[data-has-shortcut='true'] {\\n        border: 1px solid var(--color-gray-alpha-400);\\n\\n        &:hover {\\n          border-color: var(--color-gray-500);\\n        }\\n      }\\n\\n      &:hover {\\n        border-color: var(--color-gray-600);\\n      }\\n\\n      &::placeholder {\\n        color: var(--color-gray-900);\\n      }\\n\\n      &[data-pristine='false']::placeholder {\\n        color: transparent;\\n      }\\n\\n      &:focus-visible {\\n        outline: var(--focus-ring);\\n        outline-offset: -1px;\\n      }\\n    }\\n\\n    kbd {\\n      display: inline-flex;\\n      align-items: center;\\n      justify-content: center;\\n      font-family: var(--font-stack-sans);\\n      background: var(--color-gray-200);\\n      min-width: 20px;\\n      height: 20px;\\n      font-size: 14px;\\n      border-radius: 4px;\\n      color: var(--color-gray-1000);\\n\\n      &[data-symbol='false'] {\\n        padding: 0 4px;\\n      }\\n    }\\n\\n    .shortcut-recorder-clear-button {\\n      cursor: pointer;\\n      color: var(--color-gray-1000);\\n      width: 20px;\\n      height: 20px;\\n      display: flex;\\n      align-items: center;\\n      justify-content: center;\\n      border-radius: 4px;\\n      transition: background 150ms var(--timing-swift);\\n\\n      &:hover {\\n        background: var(--color-gray-300);\\n      }\\n\\n      &:focus-visible {\\n        outline: var(--focus-ring);\\n      }\\n\\n      svg {\\n        width: 14px;\\n        height: 14px;\\n      }\\n    }\\n  }\\n\\n  .shortcut-recorder-keys {\\n    pointer-events: none;\\n    user-select: none;\\n    display: flex;\\n    align-items: center;\\n    gap: 2px;\\n  }\\n\\n  .shortcut-recorder-tooltip {\\n    --gap: 8px;\\n    --background: var(--color-gray-1000);\\n    background: var(--background);\\n    color: var(--color-background-100);\\n    font-size: var(--size-14);\\n    padding: 4px 8px;\\n    border-radius: 8px;\\n    position: absolute;\\n    bottom: calc(100% + var(--gap));\\n    text-align: center;\\n    opacity: 0;\\n    scale: 0.96;\\n    white-space: nowrap;\\n    user-select: none;\\n    transition:\\n      opacity 150ms var(--timing-swift),\\n      scale 150ms var(--timing-swift);\\n\\n    &[data-show='true'] {\\n      opacity: 1;\\n      scale: 1;\\n    }\\n\\n    svg {\\n      position: absolute;\\n      transform: translateX(-50%);\\n      bottom: -6px;\\n      left: 50%;\\n    }\\n\\n    .shortcut-recorder-status {\\n      display: flex;\\n      align-items: center;\\n      gap: 6px;\\n    }\\n\\n    .shortcut-recorder-status-icon {\\n      width: 7px;\\n      height: 7px;\\n      border-radius: 50%;\\n      flex-shrink: 0;\\n      background: var(--color-red-700);\\n\\n      &[data-success='true'] {\\n        background: var(--color-green-700);\\n      }\\n    }\\n  }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return rc=function(){return t},t}var ru=[\"Meta\",\"Control\",\"Ctrl\",\"Alt\",\"Option\",\"Shift\"];function rd(e){var n=e.value,t=e.onChange,r=ri((0,x.useState)(!1),2),o=r[0],a=r[1],i=ri((0,x.useState)(null!=n?n:[]),2),l=i[0],s=i[1],c=ri((0,x.useState)(!1),2),u=c[0],d=c[1],f=(0,x.useRef)(null),p=(0,x.useRef)(null),h=!!n||l.length>0;function g(){var e;null==(e=p.current)||e.focus(),s([]),d(!1),setTimeout(function(){a(!0)}),t(null)}function m(){var e;f.current&&clearTimeout(f.current),a(!0),null==(e=p.current)||e.focus()}return(0,y.jsxs)(\"div\",{className:\"shortcut-recorder\",children:[(0,y.jsxs)(\"button\",{className:\"shortcut-recorder-button\",ref:p,onClick:m,onFocus:m,onBlur:function(){d(!1),a(!1)},onKeyDown:function(e){e.target===p.current&&\"Tab\"!==e.key&&(f.current&&clearTimeout(f.current),o||a(!0),3!==l.length&&(e.preventDefault(),e.stopPropagation(),s(function(t){if(t.includes(e.key))return t;if(!ru.includes(e.key)){var r=t.findIndex(function(e){return!ru.includes(e)});if(-1!==r){var o=rl(t);return o[r]=e.key,n(o),o}var a=rl(t).concat([e.key]);return n(a),a}for(var i=rl(t),l=ru.indexOf(e.key),s=0,c=0;c<i.length;c++)if(ru.includes(i[c])){if(l<ru.indexOf(i[c])){s=c;break}s=c+1}else break;return i.splice(s,0,e.key),n(i),i})));function n(e){f.current=window.setTimeout(function(){d(!0),t(e.join(\"+\")),f.current=window.setTimeout(function(){a(!1)},1e3)},180)}},\"data-has-shortcut\":h,\"data-shortcut-recorder\":\"true\",children:[h?(0,y.jsx)(\"div\",{className:\"shortcut-recorder-keys\",children:l.map(function(e){return(0,y.jsx)(rp,{children:e},e)})}):\"Record Shortcut\",h&&(0,y.jsx)(\"div\",{className:\"shortcut-recorder-clear-button\",role:\"button\",onClick:g,onFocus:function(e){return e.stopPropagation()},onKeyDown:function(e){(\"Enter\"===e.key||\" \"===e.key)&&(g(),e.stopPropagation())},\"aria-label\":\"Clear shortcut\",tabIndex:0,children:(0,y.jsx)(rg,{})})]}),(0,y.jsxs)(\"div\",{className:\"shortcut-recorder-tooltip\",\"data-show\":o,children:[(0,y.jsxs)(\"div\",{className:\"shortcut-recorder-status\",children:[(0,y.jsx)(\"div\",{className:\"shortcut-recorder-status-icon\",\"data-success\":u}),u?\"Shortcut set\":\"Recording\"]}),(0,y.jsx)(rf,{})]})]})}function rf(){return(0,y.jsx)(\"svg\",{fill:\"none\",height:\"6\",viewBox:\"0 0 14 6\",width:\"14\",xmlns:\"http://www.w3.org/2000/svg\",children:(0,y.jsx)(\"path\",{d:\"M13.8284 0H0.17157C0.702003 0 1.21071 0.210714 1.58578 0.585787L5.58578 4.58579C6.36683 5.36684 7.63316 5.36683 8.41421 4.58579L12.4142 0.585786C12.7893 0.210714 13.298 0 13.8284 0Z\",fill:\"var(--background)\"})})}function rp(e){var n=e.children,t=function(e){switch(e){case\"Meta\":return(0,y.jsx)(rh,{});case\"Alt\":case\"Option\":return\"⌥\";case\"Control\":case\"Ctrl\":return\"Ctrl\";case\"Shift\":return\"⇧\";case\"Enter\":return\"⏎\";case\"Escape\":case\"Esc\":return\"Esc\";case\" \":case\"Space\":case\"Spacebar\":return\"Space\";case\"ArrowUp\":return\"↑\";case\"ArrowDown\":return\"↓\";case\"ArrowLeft\":return\"←\";case\"ArrowRight\":return\"→\";case\"Tab\":return\"Tab\";case\"Backspace\":return\"⌫\";case\"Delete\":return\"⌦\";default:if(1===n.length)return n.toUpperCase();return n}}(n),r=\"string\"==typeof t&&1===t.length;return(0,y.jsx)(\"kbd\",{\"data-symbol\":r,children:t})}function rh(){var e=ri((0,x.useState)(\"\\xa0\"),2),n=e[0],t=e[1],r=rv(/^Mac/)||rv(/^iPhone/)||rv(/^iPad/)||rv(/^Mac/)&&navigator.maxTouchPoints>1;return(0,x.useEffect)(function(){!0===r&&t(\"⌘\"),!1===r&&t(\"Ctrl\")},[r]),(0,y.jsx)(\"span\",{style:{minWidth:\"1em\",display:\"inline-block\"},children:n})}function rg(){return(0,y.jsx)(\"svg\",{height:\"16\",strokeLinejoin:\"round\",viewBox:\"0 0 16 16\",width:\"16\",children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M12.4697 13.5303L13 14.0607L14.0607 13L13.5303 12.4697L9.06065 7.99999L13.5303 3.53032L14.0607 2.99999L13 1.93933L12.4697 2.46966L7.99999 6.93933L3.53032 2.46966L2.99999 1.93933L1.93933 2.99999L2.46966 3.53032L6.93933 7.99999L2.46966 12.4697L1.93933 13L2.99999 14.0607L3.53032 13.5303L7.99999 9.06065L12.4697 13.5303Z\",fill:\"currentColor\"})})}var rm=ei(rc());function rv(e){return\"undefined\"!=typeof window&&null!=window.navigator?e.test(window.navigator.platform):void 0}function rb(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function ry(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function rx(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function rw(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function rj(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return rb(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return rb(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function rk(){var e,n,t=(e=[\"\\n  .preferences-container {\\n    width: 100%;\\n  }\\n\\n  @media (min-width: 576px) {\\n    .preferences-container {\\n      width: 480px;\\n    }\\n  }\\n\\n  .preference-section:first-child {\\n    padding-top: 0;\\n  }\\n\\n  .preference-section {\\n    padding: 12px 0;\\n    border-bottom: 1px solid var(--color-gray-400);\\n    display: flex;\\n    justify-content: space-between;\\n    align-items: center;\\n    gap: 24px;\\n  }\\n\\n  .preference-section:last-child {\\n    border-bottom: none;\\n  }\\n\\n  .preference-header {\\n    margin-bottom: 0;\\n    flex: 1;\\n  }\\n\\n  .preference-header label {\\n    font-size: var(--size-14);\\n    font-weight: 500;\\n    color: var(--color-gray-1000);\\n    margin: 0;\\n  }\\n\\n  .preference-description {\\n    color: var(--color-gray-900);\\n    font-size: var(--size-14);\\n    margin: 0;\\n  }\\n\\n  .select-button,\\n  .action-button {\\n    display: flex;\\n    align-items: center;\\n    gap: 8px;\\n    background: var(--color-background-100);\\n    border: 1px solid var(--color-gray-400);\\n    border-radius: var(--rounded-lg);\\n    font-weight: 400;\\n    font-size: var(--size-14);\\n    color: var(--color-gray-1000);\\n    padding: 6px 8px;\\n    transition: border-color 150ms var(--timing-swift);\\n\\n    &:hover {\\n      border-color: var(--color-gray-500);\\n    }\\n\\n    svg {\\n      width: 14px;\\n      height: 14px;\\n      overflow: visible;\\n    }\\n  }\\n\\n  .select-button {\\n    &:focus-within {\\n      outline: var(--focus-ring);\\n      outline-offset: -1px;\\n    }\\n\\n    select {\\n      all: unset;\\n    }\\n\\n    option {\\n      color: var(--color-gray-1000);\\n      background: var(--color-background-100);\\n    }\\n  }\\n\\n  :global(.icon) {\\n    width: 18px;\\n    height: 18px;\\n    color: #666;\\n  }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return rk=function(){return t},t}function rA(e){var n,t=e.setPosition,r=e.position,o=e.hide,a=e.scale,i=e.setScale,l=e.hideShortcut,s=e.setHideShortcut,c=rw(e,[\"setPosition\",\"position\",\"hide\",\"scale\",\"setScale\",\"hideShortcut\",\"setHideShortcut\"]),u=rj((0,x.useState)(function(){if(\"undefined\"==typeof localStorage)return\"system\";var e=localStorage.getItem(Q);return\"dark\"===e||\"light\"===e?e:\"system\"}()),2),d=u[0],f=u[1];function p(e){var n=\"/__nextjs_restart_dev\";e&&(n=\"/__nextjs_restart_dev?invalidatePersistentCache\"),fetch(n,{method:\"POST\"}).then(function(){})}return(0,y.jsxs)(t0.x,rx(ry({title:\"Preferences\"},c),{children:[(0,y.jsx)(\"h2\",{className:\"dev-tools-info-section-title\",children:\"General\"}),(0,y.jsxs)(\"div\",{className:\"preferences-container\",children:[(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{htmlFor:\"theme\",children:\"Theme\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Select your theme preference.\"})]}),(0,y.jsxs)(rO,{id:\"theme\",name:\"theme\",prefix:(0,y.jsx)(rC,{theme:d}),value:d,onChange:function(e){var n=document.querySelector(\"nextjs-portal\");if(n){if(f(e.target.value),\"system\"===e.target.value){n.classList.remove(\"dark\"),n.classList.remove(\"light\"),localStorage.removeItem(Q);return}\"dark\"===e.target.value?(n.classList.add(\"dark\"),n.classList.remove(\"light\"),localStorage.setItem(Q,\"dark\")):(n.classList.remove(\"dark\"),n.classList.add(\"light\"),localStorage.setItem(Q,\"light\"))}},children:[(0,y.jsx)(\"option\",{value:\"system\",children:\"System\"}),(0,y.jsx)(\"option\",{value:\"light\",children:\"Light\"}),(0,y.jsx)(\"option\",{value:\"dark\",children:\"Dark\"})]})]}),(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{htmlFor:\"position\",children:\"Position\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Adjust the placement of your dev tools.\"})]}),(0,y.jsxs)(rO,{id:\"position\",name:\"position\",value:r,onChange:function(e){t(e.target.value),localStorage.setItem(G,e.target.value)},children:[(0,y.jsx)(\"option\",{value:\"bottom-left\",children:\"Bottom Left\"}),(0,y.jsx)(\"option\",{value:\"bottom-right\",children:\"Bottom Right\"}),(0,y.jsx)(\"option\",{value:\"top-left\",children:\"Top Left\"}),(0,y.jsx)(\"option\",{value:\"top-right\",children:\"Top Right\"})]})]}),(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{htmlFor:\"size\",children:\"Size\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Adjust the size of your dev tools.\"})]}),(0,y.jsx)(rO,{id:\"size\",name:\"size\",value:a,onChange:function(e){i(Number(e.target.value))},children:Object.entries(S).map(function(e){var n=rj(e,2),t=n[0],r=n[1];return(0,y.jsx)(\"option\",{value:r,children:t},t)})})]}),(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{id:\"hide-dev-tools\",children:\"Hide Dev Tools for this session\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Hide Dev Tools until you restart your dev server, or 1 day.\"})]}),(0,y.jsx)(\"div\",{className:\"preference-control\",children:(0,y.jsxs)(\"button\",{\"aria-describedby\":\"hide-dev-tools\",name:\"hide-dev-tools\",\"data-hide-dev-tools\":!0,className:\"action-button\",onClick:o,children:[(0,y.jsx)(t9,{}),(0,y.jsx)(\"span\",{children:\"Hide\"})]})})]}),(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{id:\"hide-dev-tools\",children:\"Hide Dev Tools shortcut\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Set a custom keyboard shortcut to toggle visibility.\"})]}),(0,y.jsx)(\"div\",{className:\"preference-control\",children:(0,y.jsx)(rd,{value:null!=(n=null==l?void 0:l.split(\"+\"))?n:null,onChange:s})})]}),(0,y.jsx)(\"div\",{className:\"preference-section\",children:(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{children:\"Disable Dev Tools for this project\"}),(0,y.jsxs)(\"p\",{className:\"preference-description\",children:[\"To disable this UI completely, set\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"devIndicators: false\"}),\" \",\"in your \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"next.config\"}),\" \",\"file.\"]})]})})]}),(0,y.jsx)(\"h2\",{className:\"dev-tools-info-section-title\",children:\"Development Server\"}),(0,y.jsx)(\"div\",{className:\"preferences-container\",children:(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{id:\"restart-dev-server\",children:\"Restart Dev Server\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Restarts the development server without needing to leave the browser.\"})]}),(0,y.jsx)(\"div\",{className:\"preference-control\",children:(0,y.jsx)(\"button\",{\"aria-describedby\":\"restart-dev-server\",title:\"Restarts the development server without needing to leave the browser.\",name:\"restart-dev-server\",\"data-restart-dev-server\":!0,className:\"action-button\",onClick:function(){return p(!1)},children:(0,y.jsx)(\"span\",{children:\"Restart\"})})})]})}), true?(0,y.jsx)(\"div\",{className:\"preferences-container\",children:(0,y.jsxs)(\"div\",{className:\"preference-section\",children:[(0,y.jsxs)(\"div\",{className:\"preference-header\",children:[(0,y.jsx)(\"label\",{id:\"reset-bundler-cache\",children:\"Reset Bundler Cache\"}),(0,y.jsx)(\"p\",{className:\"preference-description\",children:\"Clears the bundler cache and restarts the dev server. Helpful if you are seeing stale errors or changes are not appearing.\"})]}),(0,y.jsx)(\"div\",{className:\"preference-control\",children:(0,y.jsx)(\"button\",{\"aria-describedby\":\"reset-bundler-cache\",title:\"Clears the bundler cache and restarts the dev server. Helpful if you are seeing stale errors or changes are not appearing.\",name:\"reset-bundler-cache\",\"data-reset-bundler-cache\":!0,className:\"action-button\",onClick:function(){return p(!0)},children:(0,y.jsx)(\"span\",{children:\"Reset Cache\"})})})]})}):0]}))}function rO(e){var n=e.children,t=e.prefix,r=rw(e,[\"children\",\"prefix\"]);return(0,y.jsxs)(\"div\",{className:\"select-button\",children:[t,(0,y.jsx)(\"select\",rx(ry({},r),{children:n})),(0,y.jsx)(rE,{})]})}function rC(e){switch(e.theme){case\"system\":return(0,y.jsx)(re,{});case\"dark\":return(0,y.jsx)(t7,{});case\"light\":return(0,y.jsx)(t8,{});default:return null}}var rS=ei(rk());function rE(){return(0,y.jsx)(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",\"aria-hidden\":!0,children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M14.0607 5.49999L13.5303 6.03032L8.7071 10.8535C8.31658 11.2441 7.68341 11.2441 7.29289 10.8535L2.46966 6.03032L1.93933 5.49999L2.99999 4.43933L3.53032 4.96966L7.99999 9.43933L12.4697 4.96966L13 4.43933L14.0607 5.49999Z\",fill:\"currentColor\"})})}function r_(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function rP(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function rz(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function rL(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function rT(e){return function(e){if(Array.isArray(e))return r_(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||rR(e)||function(){throw TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function rR(e,n){if(e){if(\"string\"==typeof e)return r_(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return r_(e,n)}}function rN(e){var n=e.children,t=e.padding,r=e.position,o=e.setPosition,a=e.onDragStart,i=e.dragHandleSelector,l=e.disableDrag,s=rL(e,[\"children\",\"padding\",\"position\",\"setPosition\",\"onDragStart\",\"dragHandleSelector\",\"disableDrag\"]),c=function(e){var n=(0,x.useRef)(null),t=(0,x.useRef)({state:\"idle\"}),r=(0,x.useRef)(null),o=(0,x.useRef)({x:0,y:0}),a=(0,x.useRef)({x:0,y:0}),i=(0,x.useRef)(0),l=(0,x.useRef)([]),s=(0,x.useCallback)(function(){var e,o;\"drag\"===t.current.state&&(null==(o=n.current)||o.releasePointerCapture(t.current.pointerId)),t.current=\"drag\"===t.current.state?{state:\"drag-end\"}:{state:\"idle\"},null!==r.current&&(r.current(),r.current=null),l.current=[],null==(e=n.current)||e.classList.remove(\"dev-tools-grabbing\")},[]);function c(e){n.current&&(a.current=e,n.current.style.translate=\"\".concat(e.x,\"px \").concat(e.y,\"px\"))}function u(e){if(\"drag-end\"===t.current.state){var r;e.preventDefault(),e.stopPropagation(),t.current={state:\"idle\"},null==(r=n.current)||r.removeEventListener(\"click\",u)}}function d(r){if(\"press\"===t.current.state){var s,u,d,f,p=r.clientX-o.current.x,h=r.clientY-o.current.y;Math.sqrt(p*p+h*h)>=e.threshold&&(t.current={state:\"drag\",pointerId:r.pointerId},null==(u=n.current)||u.setPointerCapture(r.pointerId),null==(d=n.current)||d.classList.add(\"dev-tools-grabbing\"),null==(f=e.onDragStart)||f.call(e))}if(\"drag\"===t.current.state){var g={x:r.clientX,y:r.clientY},m=g.x-o.current.x,v=g.y-o.current.y;o.current=g,c({x:a.current.x+m,y:a.current.y+v});var b=Date.now();b-i.current>=10&&(l.current=rT(l.current.slice(-5)).concat([{position:g,timestamp:b}])),i.current=b,null==(s=e.onDrag)||s.call(e,a.current)}}function f(){var n,t=function(e){if(e.length<2)return{x:0,y:0};var n=e[0],t=e[e.length-1],r=t.timestamp-n.timestamp;return 0===r?{x:0,y:0}:{x:1e3*((t.position.x-n.position.x)/r),y:1e3*((t.position.y-n.position.y)/r)}}(l.current);s(),null==(n=e.onDragEnd)||n.call(e,a.current,t)}return(0,x.useLayoutEffect)(function(){e.disabled&&s()},[s,e.disabled]),{ref:n,onPointerDown:function(a){var i,l;0===a.button&&(l=a.target,(!e.dragHandleSelector||!n.current||!l||l.matches&&l.matches(e.dragHandleSelector))&&(o.current={x:a.clientX,y:a.clientY},t.current={state:\"press\"},window.addEventListener(\"pointermove\",d),window.addEventListener(\"pointerup\",f),null!==r.current&&(r.current(),r.current=null),r.current=function(){window.removeEventListener(\"pointermove\",d),window.removeEventListener(\"pointerup\",f)},null==(i=n.current)||i.addEventListener(\"click\",u)))},animate:function(t){var r=n.current;null!==r&&(r.style.transition=\"translate 491.22ms var(--timing-bounce)\",r.addEventListener(\"transitionend\",function n(o){if(\"translate\"===o.propertyName){var i;null==(i=e.onAnimationEnd)||i.call(e,t),a.current={x:0,y:0},r.style.transition=\"\",r.removeEventListener(\"transitionend\",n)}}),c(t.translation))}}}({disabled:void 0!==l&&l,threshold:5,onDragStart:a,onDragEnd:function(e,n){var o,a,i,l,s,c,f,p,h,g,m,v,b,y,x,w,j,k,A;if(0===Math.sqrt(e.x*e.x+e.y*e.y)){null==(o=u.current)||o.style.removeProperty(\"translate\");return}d((y=(a={x:e.x+rD(n.x),y:e.y+rD(n.y)}).x,x=a.y,j=Object.entries(w=(p=2*t,h=(null==(c=u.current)?void 0:c.offsetWidth)||0,g=(null==(f=u.current)?void 0:f.offsetHeight)||0,m=window.innerWidth-document.documentElement.clientWidth,{\"top-left\":{x:0-(v=(l=(i=r).includes(\"right\"),s=i.includes(\"bottom\"),{x:l?window.innerWidth-m-p-h:0,y:s?window.innerHeight-p-g:0})).x,y:0-v.y},\"top-right\":{x:window.innerWidth-m-p-h-v.x,y:0-v.y},\"bottom-left\":{x:0-v.x,y:window.innerHeight-p-g-v.y},\"bottom-right\":{x:window.innerWidth-m-p-h-v.x,y:window.innerHeight-p-g-v.y}})).map(function(e){var n,t,r=(t=2,function(e){if(Array.isArray(e))return e}(n=e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||rR(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),o=r[0],a=r[1];return{key:o,distance:Math.sqrt(Math.pow(y-a.x,2)+Math.pow(x-a.y,2))}}),k=(b=Math).min.apply(b,rT(j.map(function(e){return e.distance}))),(A=j.find(function(e){return e.distance===k}))?{translation:w[A.key],corner:A.key}:{corner:r,translation:w[r]}))},onAnimationEnd:function(e){var n=e.corner;setTimeout(function(){var e;null==(e=u.current)||e.style.removeProperty(\"translate\"),o(n)})},dragHandleSelector:i}),u=c.ref,d=c.animate,f=rL(c,[\"ref\",\"animate\"]);return(0,y.jsx)(\"div\",rz(rP(rz(rP({},s),{ref:u}),f),{style:{touchAction:\"none\"},children:n}))}function rD(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.999;return e/1e3*n/(1-n)}function rB(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function rM(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function rI(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){rM(e,n,t[n])})}return e}function rH(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function rF(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return rB(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return rB(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function rU(e){var n=e.state,t=e.errorCount,r=e.isBuildError,o=rH(e,[\"state\",\"errorCount\",\"isBuildError\"]),a=rF((0,x.useState)(!0),2),i=a[0],l=a[1];return(0,y.jsx)(r$,rI({routerType:n.routerType,semver:n.versionInfo.installed,issueCount:t,isDevBuilding:n.buildingIndicator,isDevRendering:n.renderingIndicator,isStaticRoute:n.staticIndicator,hide:function(){l(!1),fetch(\"/__nextjs_disable_dev_indicator\",{method:\"POST\"})},toggleVisibility:function(){l(!i)},isTurbopack:!!false,disabled:n.disableDevIndicator||!i,isBuildError:r,page:n.page},o))}var rV=(0,x.createContext)({}),rq={Root:\"root\",Turbo:\"turbo\",Route:\"route\",Preferences:\"preferences\",SegmentExplorer:\"segment-explorer\"},rW= false?0:function(){return null};function r$(e){var n,t,r,o,a,i,l,s=e.routerType,c=e.disabled,u=e.issueCount,d=e.isDevBuilding,f=e.isDevRendering,p=e.isStaticRoute,h=e.isTurbopack,g=e.isBuildError,m=e.hide,v=e.toggleVisibility,b=e.dispatch,w=e.scale,j=e.setScale,k=e.page,A=(0,x.useRef)(null),O=(0,x.useRef)(null),C=(0,x.useRef)(null),S=rF((0,x.useState)(null),2),E=S[0],_=S[1],P=rF((0,x.useState)(\"undefined\"!=typeof localStorage&&localStorage.getItem(G)?localStorage.getItem(G):rr),2),z=P[0],L=P[1],T=rF((0,x.useState)(-1),2),R=T[0],N=T[1],D=rF((t=(n=rt((0,x.useState)(function(){if(\"undefined\"==typeof localStorage)return null;var e=localStorage.getItem(ro);return e||null}()),2))[0],r=n[1],[t,function(e){r(e),null===e?localStorage.removeItem(ro):localStorage.setItem(ro,e)}]),2),B=D[0],I=D[1],F=E===rq.Root,U=E===rq.Turbo,V=E===rq.Route,q=E===rq.Preferences,W=E===rq.SegmentExplorer,$=(0,tJ.N)(F,{enterDelay:0,exitDelay:nQ.K7}),Z=$.mounted,Y=$.rendered;function X(e){if(\"first\"===e)return void setTimeout(function(){var e,n=null==(e=O.current)?void 0:e.querySelectorAll('[role=\"menuitem\"]');n&&X(Number(n[0].getAttribute(\"data-index\")))});if(\"last\"===e)return void setTimeout(function(){var e,n=null==(e=O.current)?void 0:e.querySelectorAll('[role=\"menuitem\"]');n&&X(n.length-1)});var n,t=null==(n=O.current)?void 0:n.querySelector('[data-index=\"'.concat(e,'\"]'));t&&(N(e),null==t||t.focus())}function K(){_(rq.Root),setTimeout(function(){X(R)},nQ.K7)}function Q(){_(function(e){return e===rq.Root?null:e})}(0,nQ.P5)(O,C,F),(0,nQ.O8)(O,C,Z,Q),o=B?rM({},B,function(){v();var e=A.current;e&&(e.dataset.hidden=\"true\"===e.dataset.hidden?\"false\":\"true\")}):{},a=C,(0,x.useEffect)(function(){var e=function(e){if(n=a,!(t=(0,nQ.vY)(n.current))||\"true\"!==t.contentEditable&&\"INPUT\"!==t.tagName&&\"TEXTAREA\"!==t.tagName&&\"SELECT\"!==t.tagName&&\"true\"!==t.dataset[\"shortcut-recorder\"]||t.hasAttribute(\"readonly\")){var n,t,r=[];e.metaKey&&r.push(\"Meta\"),e.ctrlKey&&r.push(\"Control\"),e.altKey&&r.push(\"Alt\"),e.shiftKey&&r.push(\"Shift\"),\"Meta\"!==e.key&&\"Control\"!==e.key&&\"Alt\"!==e.key&&\"Shift\"!==e.key&&r.push(e.key);var i=r.join(\"+\");o[i]&&(e.preventDefault(),o[i]())}};return window.addEventListener(\"keydown\",e),function(){return window.removeEventListener(\"keydown\",e)}},[o]),(0,x.useEffect)(function(){if(null===E){var e=setTimeout(function(){N(-1)},nQ.K7);return function(){return clearTimeout(e)}}},[E]);var J=rF(z.split(\"-\",2),2),ee=J[0],en=J[1],et=(rM(i={},ee,\"calc(100% + 8px)\"),rM(i,en,0),i);return(0,y.jsxs)(tR,{ref:A,\"data-nextjs-toast\":!0,style:(rM(l={\"--animate-out-duration-ms\":\"\".concat(nQ.K7,\"ms\"),\"--animate-out-timing-function\":nQ.uD,boxShadow:\"none\"},ee,\"\".concat(20,\"px\")),rM(l,en,\"\".concat(20,\"px\")),l),children:[(0,y.jsx)(rN,{padding:20,onDragStart:function(){return _(null)},position:z,setPosition:function(e){localStorage.setItem(G,e),L(e)},children:(0,y.jsx)(tY,{ref:C,\"aria-haspopup\":\"menu\",\"aria-expanded\":F,\"aria-controls\":\"nextjs-dev-tools-menu\",\"aria-label\":\"\".concat(F?\"Close\":\"Open\",\" Next.js Dev Tools\"),\"data-nextjs-dev-tools-button\":!0,disabled:c,issueCount:u,onTriggerClick:function(){E===rq.Root?_(null):(_(rq.Root),setTimeout(function(){X(\"first\")}))},toggleErrorOverlay:function(){b({type:H})},isDevBuilding:d,isDevRendering:f,isBuildError:g,scale:w})}),(0,y.jsx)(t3,{isOpen:V,close:K,triggerRef:C,style:et,routerType:s,routeType:p?\"Static\":\"Dynamic\"}),(0,y.jsx)(t1,{isOpen:U,close:K,triggerRef:C,style:et}),(0,y.jsx)(rA,{isOpen:q,close:K,triggerRef:C,style:et,hide:function(){_(null),m()},setPosition:L,position:z,scale:w,setScale:j,hideShortcut:B,setHideShortcut:I}), false?0:null,Z&&(0,y.jsx)(\"div\",{ref:O,id:\"nextjs-dev-tools-menu\",role:\"menu\",dir:\"ltr\",\"aria-orientation\":\"vertical\",\"aria-label\":\"Next.js Dev Tools Items\",tabIndex:-1,className:\"dev-tools-indicator-menu\",onKeyDown:function(e){switch(e.preventDefault(),e.key){case\"ArrowDown\":X(R+1);break;case\"ArrowUp\":X(R-1);break;case\"Home\":X(\"first\");break;case\"End\":X(\"last\")}},\"data-rendered\":Y,style:et,children:(0,y.jsxs)(rV.Provider,{value:{closeMenu:Q,selectedIndex:R,setSelectedIndex:N},children:[(0,y.jsxs)(\"div\",{className:\"dev-tools-indicator-inner\",children:[u>0&&(0,y.jsx)(rY,{title:\"\".concat(u,\" \").concat(1===u?\"issue\":\"issues\",\" found. Click to view details in the dev overlay.\"),index:0,label:\"Issues\",value:(0,y.jsx)(rX,{children:u}),onClick:function(){_(null),u>0&&b({type:M})}}),(0,y.jsx)(rY,{title:\"Current route is \".concat(p?\"static\":\"dynamic\",\".\"),label:\"Route\",index:1,value:p?\"Static\":\"Dynamic\",onClick:function(){return _(rq.Route)},\"data-nextjs-route-type\":p?\"static\":\"dynamic\"}),h?(0,y.jsx)(rY,{title:\"Turbopack is enabled.\",label:\"Turbopack\",value:\"Enabled\"}):(0,y.jsx)(rY,{index:2,title:\"Learn about Turbopack and how to enable it in your application.\",label:\"Try Turbopack\",value:(0,y.jsx)(rZ,{}),onClick:function(){return _(rq.Turbo)}})]}),(0,y.jsxs)(\"div\",{className:\"dev-tools-indicator-footer\",children:[(0,y.jsx)(rY,{\"data-preferences\":!0,label:\"Preferences\",value:(0,y.jsx)(t6,{}),onClick:function(){return _(rq.Preferences)},index:h?2:3}), false?0:null]})]})})]})}function rZ(){return(0,y.jsx)(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",children:(0,y.jsx)(\"path\",{fill:\"#666\",fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M5.50011 1.93945L6.03044 2.46978L10.8537 7.293C11.2442 7.68353 11.2442 8.31669 10.8537 8.70722L6.03044 13.5304L5.50011 14.0608L4.43945 13.0001L4.96978 12.4698L9.43945 8.00011L4.96978 3.53044L4.43945 3.00011L5.50011 1.93945Z\"})})}function rY(e){var n,t,r=e.index,o=e.label,a=e.value,i=e.onClick,l=e.href,s=rH(e,[\"index\",\"label\",\"value\",\"onClick\",\"href\"]),c=\"function\"==typeof i||\"string\"==typeof l,u=(0,x.useContext)(rV),d=u.closeMenu,f=u.selectedIndex,p=u.setSelectedIndex,h=f===r;function g(){c&&(null==i||i(),d(),l&&window.open(l,\"_blank\",\"noopener, noreferrer\"))}return(0,y.jsxs)(\"div\",(n=rI({className:\"dev-tools-indicator-item\",\"data-index\":r,\"data-selected\":h,onClick:g,onMouseMove:function(){c&&void 0!==r&&f!==r&&p(r)},onMouseLeave:function(){return p(-1)},onKeyDown:function(e){(\"Enter\"===e.key||\" \"===e.key)&&g()},role:c?\"menuitem\":void 0,tabIndex:h?0:-1},s),t=t={children:[(0,y.jsx)(\"span\",{className:\"dev-tools-indicator-label\",children:o}),(0,y.jsx)(\"span\",{className:\"dev-tools-indicator-value\",children:a})]},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function rX(e){var n=e.children;return(0,y.jsxs)(\"span\",{className:\"dev-tools-indicator-issue-count\",\"data-has-issues\":n>0,children:[(0,y.jsx)(\"span\",{className:\"dev-tools-indicator-issue-count-indicator\"}),n]})}function rK(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({xmlns:\"http://www.w3.org/2000/svg\",fill:\"currentColor\"},e),t=t={children:(0,y.jsx)(\"path\",{d:\"M4.30969 8.37891H2.38782C2.9805 10.3647 4.82188 11.8124 7.00012 11.8125C8.81977 11.8124 10.4043 10.8024 11.2228 9.30957L11.5382 8.73438L12.6896 9.36523L12.3741 9.94043L12.1681 10.2891C11.0815 11.993 9.17324 13.1249 7.00012 13.125C4.42207 13.1249 2.21747 11.5322 1.3136 9.27734V11.375H0.00109863V7.72266L0.0147705 7.58984C0.0760304 7.29089 0.340278 7.06641 0.657349 7.06641H4.30969V8.37891ZM7.00012 0.875C9.57685 0.875118 11.7819 2.46569 12.6866 4.71875V2.625H13.9991V6.27734C13.9991 6.63974 13.7053 6.93354 13.3429 6.93359H9.68958V5.62109H11.6115C11.0186 3.6356 9.17813 2.18763 7.00012 2.1875C5.17131 2.18757 3.57959 3.20771 2.76477 4.71289L2.45227 5.29004L1.29797 4.66504L1.61047 4.08789C2.64547 2.17605 4.67052 0.875068 7.00012 0.875Z\",fill:\"#A35200\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function rQ(e){return e.showButton?(0,y.jsxs)(\"button\",{className:\"restart-dev-server-button\",onClick:function(){fetch(\"/__nextjs_restart_dev?invalidatePersistentCache\",{method:\"POST\"}).then(function(){})},title:\"Clears the bundler cache and restarts the dev server. Helpful if you are seeing stale errors or changes are not appearing.\",children:[(0,y.jsx)(rK,{width:14,height:14}),\"Clear Bundler Cache & Restart\"]}):null}function rG(){var e,n,t=(e=[\"\\n  [data-nextjs-version-staleness-indicator='fresh'] {\\n    fill: var(--color-green-800);\\n    stroke: var(--color-green-300);\\n  }\\n  [data-nextjs-version-staleness-indicator='stale'] {\\n    fill: var(--color-amber-800);\\n    stroke: var(--color-amber-300);\\n  }\\n  [data-nextjs-version-staleness-indicator='outdated'] {\\n    fill: var(--color-red-800);\\n    stroke: var(--color-red-300);\\n  }\\n  [data-nextjs-version-staleness-indicator='unknown'] {\\n    fill: var(--color-gray-800);\\n    stroke: var(--color-gray-300);\\n  }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return rG=function(){return t},t}function rJ(e){var n=e.versionInfo,t=n.staleness,r=nB(n),o=r.text,a=r.indicatorClass,i=r.title;return t.startsWith(\"stale\")?(0,y.jsxs)(\"a\",{\"data-nextjs-devtools-panel-footer-tab\":!0,target:\"_blank\",rel:\"noopener noreferrer\",href:\"https://nextjs.org/docs/messages/version-staleness\",title:i,children:[(0,y.jsx)(nM,{\"data-nextjs-version-staleness-indicator\":a}),(0,y.jsx)(\"span\",{children:o})]}):(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-footer-tab\":!0,title:i,children:[(0,y.jsx)(nM,{\"data-nextjs-version-staleness-indicator\":a}),(0,y.jsx)(\"span\",{children:o})]})}var r0=ei(rG());function r1(){var e,n,t=(e=[\"\\n  [data-nextjs-devtools-panel-footer] {\\n    background-color: var(--color-background-200);\\n    display: flex;\\n    justify-content: space-between;\\n    align-items: center;\\n    border-top: 1px solid var(--color-gray-400);\\n    border-radius: 0 0 var(--rounded-xl) var(--rounded-xl);\\n    height: auto;\\n  }\\n\\n  [data-nextjs-devtools-panel-footer-tab-group] {\\n    display: flex;\\n    align-items: center;\\n  }\\n\\n  [data-nextjs-devtools-panel-footer-tab] {\\n    display: flex;\\n    align-items: center;\\n    padding: 12px;\\n    gap: 8px;\\n    align-self: stretch;\\n    border-right: 1px solid var(--color-gray-400);\\n\\n    color: var(--color-gray-900);\\n    font-size: 12px;\\n    font-family: var(--font-stack-monospace);\\n  }\\n\\n  [data-nextjs-devtools-panel-footer-tab-bundler-name='TURBOPACK'] {\\n    background: linear-gradient(\\n      to right,\\n      var(--color-turbopack-text-red) 0%,\\n      var(--color-turbopack-text-blue) 100%\\n    );\\n    background-clip: text;\\n    -webkit-background-clip: text;\\n    -webkit-text-fill-color: transparent;\\n  }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return r1=function(){return t},t}function r2(e){var n=e.versionInfo,t=e.isDraggable,r=e.showRestartServerButton,o=(\"Webpack\"||0).toUpperCase();return(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-footer\":!0,\"data-nextjs-devtools-panel-draggable\":t,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-footer-tab-group\":!0,children:[(0,y.jsx)(rJ,{versionInfo:n}),(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-footer-tab\":!0,children:[(0,y.jsx)(\"span\",{\"data-nextjs-devtools-panel-footer-tab-bundler-name\":o,children:o}),(0,y.jsx)(\"span\",{\"data-nextjs-devtools-panel-footer-tab-bundler-status\":!0,children:\"enabled\"})]})]}),r&&(0,y.jsx)(\"div\",{\"data-nextjs-devtools-panel-footer-tab-group\":!0,children:(0,y.jsx)(rQ,{showButton:!0})})]})}var r4=ei(r1());function r5(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",\"aria-hidden\":!0},e),t=t={children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M14.0607 5.49999L13.5303 6.03032L8.7071 10.8535C8.31658 11.2441 7.68341 11.2441 7.29289 10.8535L2.46966 6.03032L1.93933 5.49999L2.99999 4.43933L3.53032 4.96966L7.99999 9.43933L12.4697 4.96966L13 4.43933L14.0607 5.49999Z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function r3(e){var n,t,r=e.children,o=e.prefix,a=function(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}(e,[\"children\",\"prefix\"]);return(0,y.jsxs)(\"div\",{\"data-nextjs-select\":!0,children:[o,(0,y.jsx)(\"select\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},a),t=t={children:r},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n)),(0,y.jsx)(r5,{width:16,height:16})]})}function r6(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function r9(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return r6(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return r6(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function r8(){var e,n,t=(e=[\"\\n  [data-nextjs-devtools-panel-settings] {\\n    padding: 16px;\\n  }\\n\\n  [data-nextjs-devtools-panel-settings-section]:first-child {\\n    padding-top: 0;\\n  }\\n\\n  [data-nextjs-devtools-panel-settings-section] {\\n    padding: 12px 0;\\n    border-bottom: 1px solid var(--color-gray-400);\\n    display: flex;\\n    justify-content: space-between;\\n    align-items: center;\\n    gap: 24px;\\n  }\\n\\n  [data-nextjs-devtools-panel-settings-section]:last-child {\\n    padding-bottom: 0;\\n    border-bottom: none;\\n  }\\n\\n  [data-nextjs-devtools-panel-settings-section-header] {\\n    margin-bottom: 0;\\n    flex: 1;\\n  }\\n\\n  [data-nextjs-devtools-panel-settings-section-header] label {\\n    font-size: var(--size-14);\\n    font-weight: 500;\\n    color: var(--color-gray-1000);\\n    margin: 0;\\n  }\\n\\n  [data-nextjs-devtools-panel-settings-section-description] {\\n    color: var(--color-gray-900);\\n    font-size: var(--size-14);\\n    margin: 0;\\n  }\\n\\n  [data-nextjs-select],\\n  [data-nextjs-devtools-panel-settings-section-action-button] {\\n    display: flex;\\n    align-items: center;\\n    gap: 8px;\\n    background: var(--color-background-100);\\n    border: 1px solid var(--color-gray-400);\\n    border-radius: var(--rounded-lg);\\n    font-weight: 400;\\n    font-size: var(--size-14);\\n    color: var(--color-gray-1000);\\n    padding: 6px 8px;\\n\\n    &:hover {\\n      background: var(--color-gray-100);\\n    }\\n  }\\n\\n  [data-nextjs-select] {\\n    &:focus-within {\\n      outline: var(--focus-ring);\\n    }\\n\\n    select {\\n      all: unset;\\n    }\\n\\n    option {\\n      color: var(--color-gray-1000);\\n      background: var(--color-background-100);\\n    }\\n  }\\n\\n  :global(.icon) {\\n    width: 18px;\\n    height: 18px;\\n    color: #666;\\n  }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return r8=function(){return t},t}function r7(e){switch(e.theme){case\"system\":return(0,y.jsx)(re,{});case\"dark\":return(0,y.jsx)(t7,{});case\"light\":return(0,y.jsx)(t8,{});default:return null}}function oe(e){var n=e.devToolsPosition,t=e.scale,r=e.handlePositionChange,o=e.handleScaleChange,a=r9((0,x.useState)(function(){if(\"undefined\"==typeof localStorage)return\"system\";var e=localStorage.getItem(Q);return\"dark\"===e||\"light\"===e?e:\"system\"}()),2),i=a[0],l=a[1];function s(e){var n=\"/__nextjs_restart_dev\";e&&(n=\"/__nextjs_restart_dev?invalidatePersistentCache\"),fetch(n,{method:\"POST\"}).then(function(){})}return(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{htmlFor:\"theme\",children:\"Theme\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:\"Select your theme preference.\"})]}),(0,y.jsxs)(r3,{id:\"theme\",name:\"theme\",prefix:(0,y.jsx)(r7,{theme:i}),value:i,onChange:function(e){var n=document.querySelector(\"nextjs-portal\");if(n){if(l(e.target.value),\"system\"===e.target.value){n.classList.remove(\"dark\"),n.classList.remove(\"light\"),localStorage.removeItem(Q);return}\"dark\"===e.target.value?(n.classList.add(\"dark\"),n.classList.remove(\"light\"),localStorage.setItem(Q,\"dark\")):(n.classList.remove(\"dark\"),n.classList.add(\"light\"),localStorage.setItem(Q,\"light\"))}},children:[(0,y.jsx)(\"option\",{value:\"system\",children:\"System\"}),(0,y.jsx)(\"option\",{value:\"light\",children:\"Light\"}),(0,y.jsx)(\"option\",{value:\"dark\",children:\"Dark\"})]})]}),(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{htmlFor:\"position\",children:\"Position\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:\"Adjust the placement of your dev tools.\"})]}),(0,y.jsxs)(r3,{id:\"position\",name:\"position\",value:n,onChange:r,children:[(0,y.jsx)(\"option\",{value:\"bottom-left\",children:\"Bottom Left\"}),(0,y.jsx)(\"option\",{value:\"bottom-right\",children:\"Bottom Right\"}),(0,y.jsx)(\"option\",{value:\"top-left\",children:\"Top Left\"}),(0,y.jsx)(\"option\",{value:\"top-right\",children:\"Top Right\"})]})]}),(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{htmlFor:\"size\",children:\"Size\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:\"Adjust the size of your dev tools.\"})]}),(0,y.jsx)(r3,{id:\"size\",name:\"size\",value:t,onChange:o,children:Object.entries(S).map(function(e){var n=r9(e,2),t=n[0],r=n[1];return(0,y.jsx)(\"option\",{value:r,children:t},t)})})]}),(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{id:\"hide-dev-tools\",children:\"Hide Dev Tools for this session\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:\"Hide Dev Tools until you restart your dev server, or 1 day.\"})]}),(0,y.jsx)(\"div\",{children:(0,y.jsxs)(\"button\",{\"aria-describedby\":\"hide-dev-tools\",name:\"hide-dev-tools\",\"data-hide-dev-tools\":!0,\"data-nextjs-devtools-panel-settings-section-action-button\":!0,onClick:function(){fetch(\"/__nextjs_disable_dev_indicator\",{method:\"POST\"})},children:[(0,y.jsx)(t9,{}),(0,y.jsx)(\"span\",{children:\"Hide\"})]})})]}),(0,y.jsx)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{children:\"Disable Dev Tools for this project\"}),(0,y.jsxs)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:[\"To disable this UI completely, set\",\" \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"devIndicators: false\"}),\" in your \",(0,y.jsx)(\"code\",{className:\"dev-tools-info-code\",children:\"next.config\"}),\" file.\"]})]})}),(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{id:\"restart-dev-server\",children:\"Restart Dev Server\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:\"Restarts the development server without needing to leave the browser.\"})]}),(0,y.jsx)(\"div\",{children:(0,y.jsx)(\"button\",{\"aria-describedby\":\"restart-dev-server\",title:\"Restarts the development server without needing to leave the browser.\",name:\"restart-dev-server\",\"data-restart-dev-server\":!0,\"data-nextjs-devtools-panel-settings-section-action-button\":!0,onClick:function(){return s(!1)},children:(0,y.jsx)(\"span\",{children:\"Restart\"})})})]}),process.env.__NEXT_TURBOPACK_PERSISTENT_CACHE?(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-settings-section-header\":!0,children:[(0,y.jsx)(\"label\",{id:\"reset-bundler-cache\",children:\"Reset Bundler Cache\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-settings-section-description\":!0,children:\"Clears the bundler cache and restarts the dev server. Helpful if you are seeing stale errors or changes are not appearing.\"})]}),(0,y.jsx)(\"div\",{children:(0,y.jsx)(\"button\",{\"aria-describedby\":\"reset-bundler-cache\",title:\"Clears the bundler cache and restarts the dev server. Helpful if you are seeing stale errors or changes are not appearing.\",name:\"reset-bundler-cache\",\"data-reset-bundler-cache\":!0,\"data-nextjs-devtools-panel-settings-section-action-button\":!0,onClick:function(){return s(!0)},children:(0,y.jsx)(\"span\",{children:\"Reset Cache\"})})})]}):null]})}var on=ei(r8());function ot(){var e,n,t=(e=[\"\\n  [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar] {\\n    height: var(--size-12);\\n    border-radius: 100px;\\n    background: linear-gradient(\\n      90deg,\\n      var(--color-gray-200) 25%,\\n      var(--color-gray-100) 50%,\\n      var(--color-gray-200) 75%\\n    );\\n    background-size: 200% 100%;\\n    animation: skeleton-shimmer 1.5s ease-in-out infinite;\\n  }\\n\\n  [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar='1'] {\\n    width: 75%;\\n    margin-bottom: 8px;\\n  }\\n\\n  [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar='2'] {\\n    width: 36.5%;\\n  }\\n\\n  @keyframes skeleton-shimmer {\\n    0% {\\n      background-position: -200% 0;\\n    }\\n    100% {\\n      background-position: 200% 0;\\n    }\\n  }\\n\\n  /* Respect user's motion preferences */\\n  @media (prefers-reduced-motion: reduce) {\\n    [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar='1'],\\n    [data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar='2'] {\\n      animation: none;\\n      background: var(--color-gray-200);\\n    }\\n  }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return ot=function(){return t},t}function or(){return(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(\"div\",{\"data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar\":\"1\"}),(0,y.jsx)(\"div\",{\"data-nextjs-devtools-panel-tab-issues-sidebar-frame-skeleton-bar\":\"2\"})]})}var oo=ei(ot());function oa(){var e,n,t=(e=[\"\\n  [data-nextjs-devtools-panel-tab-issues-sidebar] {\\n    display: flex;\\n    flex-direction: column;\\n    gap: 4px;\\n    padding: 8px;\\n    border-right: 1px solid var(--color-gray-400);\\n    overflow-y: auto;\\n    min-height: 0;\\n\\n    @media (max-width: 575px) {\\n      max-width: 112px;\\n    }\\n\\n    @media (min-width: 576px) {\\n      max-width: 138px;\\n      width: 100%;\\n    }\\n\\n    @media (min-width: 768px) {\\n      max-width: 172.5px;\\n      width: 100%;\\n    }\\n\\n    @media (min-width: 992px) {\\n      max-width: 230px;\\n      width: 100%;\\n    }\\n  }\\n\\n  [data-nextjs-devtools-panel-tab-issues-sidebar-frame] {\\n    display: flex;\\n    flex-direction: column;\\n    padding: 10px 8px;\\n    border-radius: var(--rounded-lg);\\n    transition: background-color 0.2s ease-in-out;\\n\\n    &:hover {\\n      background-color: var(--color-gray-200);\\n    }\\n\\n    &:active {\\n      background-color: var(--color-gray-300);\\n    }\\n  }\\n\\n  [data-nextjs-devtools-panel-tab-issues-sidebar-frame-active='true'] {\\n    background-color: var(--color-gray-100);\\n  }\\n\\n  [data-nextjs-devtools-panel-tab-issues-sidebar-frame-error-type] {\\n    display: inline-block;\\n    align-self: flex-start;\\n    color: var(--color-gray-1000);\\n    font-size: var(--size-14);\\n    font-weight: 500;\\n    line-height: var(--size-20);\\n  }\\n\\n  [data-nextjs-devtools-panel-tab-issues-sidebar-frame-source] {\\n    display: inline-block;\\n    align-self: flex-start;\\n    color: var(--color-gray-900);\\n    font-size: var(--size-13);\\n    line-height: var(--size-18);\\n  }\\n\\n  /* Ellipsis for long stack frame source or small devices. */\\n  [data-nextjs-devtools-panel-tab-issues-sidebar-frame-error-type],\\n  [data-nextjs-devtools-panel-tab-issues-sidebar-frame-source] {\\n    overflow: hidden;\\n    text-overflow: ellipsis;\\n    white-space: nowrap;\\n    max-width: 100%;\\n  }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return oa=function(){return t},t}function oi(e){var n=e.runtimeErrors,t=e.activeIdx,r=e.setActiveIndex;return 0===n.length?null:(0,y.jsx)(\"aside\",{\"data-nextjs-devtools-panel-tab-issues-sidebar\":!0,children:n.map(function(e,n){var o=n===t;return(0,y.jsx)(os,{runtimeError:e,idx:n,isActive:o,setActiveIndex:r},n)})})}var ol=(0,x.memo)(function(e){var n=e.runtimeError,t=tj(n),r=(0,x.useMemo)(function(){var e,n=t.findIndex(function(e){return!e.ignored&&!!e.originalCodeFrame&&!!e.originalStackFrame});return null!=(e=t[n])?e:null},[t]);if(!(null==r?void 0:r.originalStackFrame))return null;var o=tz(n.error,n.type),a=eS(r.originalStackFrame);return(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(\"span\",{\"data-nextjs-devtools-panel-tab-issues-sidebar-frame-error-type\":!0,children:o}),(0,y.jsx)(\"span\",{\"data-nextjs-devtools-panel-tab-issues-sidebar-frame-source\":!0,children:a})]})}),os=(0,x.memo)(function(e){var n=e.runtimeError,t=e.idx,r=e.isActive,o=e.setActiveIndex;return(0,y.jsx)(\"button\",{\"data-nextjs-devtools-panel-tab-issues-sidebar-frame\":!0,\"data-nextjs-devtools-panel-tab-issues-sidebar-frame-active\":r,onClick:function(){return o(t)},children:(0,y.jsx)(x.Suspense,{fallback:(0,y.jsx)(or,{}),children:(0,y.jsx)(ol,{runtimeError:n})})})}),oc=ei(oa());function ou(){var e,n,t=(e=[\"\\n  [data-nextjs-codeframe-skeleton] {\\n    margin: 8px 0;\\n    border-radius: 8px;\\n    background-color: var(--color-background-200);\\n    border: 1px solid var(--color-gray-400);\\n    overflow: hidden;\\n  }\\n\\n  [data-nextjs-codeframe-skeleton-header] {\\n    display: flex;\\n    align-items: center;\\n    padding: 12px;\\n    border-bottom: 1px solid var(--color-gray-400);\\n    border-radius: 8px 8px 0 0;\\n    gap: 6px;\\n  }\\n\\n  [data-nextjs-codeframe-skeleton-icon] {\\n    width: var(--size-16);\\n    height: var(--size-16);\\n    border-radius: 4px;\\n    background: linear-gradient(\\n      90deg,\\n      var(--color-gray-200) 25%,\\n      var(--color-gray-100) 50%,\\n      var(--color-gray-200) 75%\\n    );\\n    background-size: 200% 100%;\\n    animation: skeleton-shimmer 1.5s ease-in-out infinite;\\n    flex-shrink: 0;\\n  }\\n\\n  [data-nextjs-codeframe-skeleton-header-bar] {\\n    width: 42.9%;\\n  }\\n\\n  [data-nextjs-codeframe-skeleton-button] {\\n    width: var(--size-16);\\n    height: var(--size-16);\\n    border-radius: var(--rounded-full);\\n    background: linear-gradient(\\n      90deg,\\n      var(--color-gray-200) 25%,\\n      var(--color-gray-100) 50%,\\n      var(--color-gray-200) 75%\\n    );\\n    background-size: 200% 100%;\\n    animation: skeleton-shimmer 1.5s ease-in-out infinite;\\n    flex-shrink: 0;\\n  }\\n\\n  [data-nextjs-codeframe-skeleton-content] {\\n    padding: 12px;\\n  }\\n\\n  [data-nextjs-codeframe-skeleton-line] {\\n    height: var(--size-16);\\n    border-radius: 100px;\\n    background: linear-gradient(\\n      90deg,\\n      var(--color-gray-200) 25%,\\n      var(--color-gray-100) 50%,\\n      var(--color-gray-200) 75%\\n    );\\n    background-size: 200% 100%;\\n    animation: skeleton-shimmer 1.5s ease-in-out infinite;\\n    margin-bottom: 8px;\\n  }\\n\\n  [data-nextjs-codeframe-skeleton-line]:last-child {\\n    margin-bottom: 0;\\n  }\\n\\n  [data-nextjs-codeframe-skeleton-line-1] {\\n    width: 32.5%;\\n  }\\n\\n  [data-nextjs-codeframe-skeleton-line-2] {\\n    width: 56.8%;\\n  }\\n\\n  [data-nextjs-codeframe-skeleton-line-3] {\\n    width: 29.6%;\\n  }\\n\\n  [data-nextjs-call-stack-container] {\\n    position: relative;\\n    margin-top: 8px;\\n  }\\n\\n  [data-nextjs-call-stack-count-skeleton] {\\n    display: flex;\\n    justify-content: center;\\n    align-items: center;\\n    width: var(--size-20);\\n    height: var(--size-20);\\n    border-radius: var(--rounded-full);\\n    background: linear-gradient(\\n      90deg,\\n      var(--color-gray-200) 25%,\\n      var(--color-gray-100) 50%,\\n      var(--color-gray-200) 75%\\n    );\\n    background-size: 200% 100%;\\n    animation: skeleton-shimmer 1.5s ease-in-out infinite;\\n  }\\n\\n  [data-nextjs-call-stack-ignored-list-toggle-button-skeleton] {\\n    all: unset;\\n    display: flex;\\n    align-items: center;\\n    border-radius: 6px;\\n    padding: 4px 6px;\\n    margin-right: -6px;\\n  }\\n\\n  [data-nextjs-call-stack-skeleton-bar] {\\n    height: var(--size-12);\\n    width: 148px;\\n    border-radius: 100px;\\n    background: linear-gradient(\\n      90deg,\\n      var(--color-gray-200) 25%,\\n      var(--color-gray-100) 50%,\\n      var(--color-gray-200) 75%\\n    );\\n    background-size: 200% 100%;\\n    animation: skeleton-shimmer 1.5s ease-in-out infinite;\\n  }\\n\\n  @keyframes skeleton-shimmer {\\n    0% {\\n      background-position: -200% 0;\\n    }\\n    100% {\\n      background-position: 200% 0;\\n    }\\n  }\\n\\n  /* Respect user's motion preferences */\\n  @media (prefers-reduced-motion: reduce) {\\n    [data-nextjs-codeframe-skeleton-icon],\\n    [data-nextjs-codeframe-skeleton-header-bar],\\n    [data-nextjs-codeframe-skeleton-button],\\n    [data-nextjs-codeframe-skeleton-line],\\n    [data-nextjs-call-stack-count-skeleton],\\n    [data-nextjs-call-stack-skeleton-bar] {\\n      animation: none;\\n      background: var(--color-gray-200);\\n    }\\n  }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return ou=function(){return t},t}function od(){return(0,y.jsxs)(y.Fragment,{children:[(0,y.jsxs)(\"div\",{\"data-nextjs-codeframe-skeleton\":!0,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-codeframe-skeleton-header\":!0,children:[(0,y.jsx)(\"div\",{\"data-nextjs-codeframe-skeleton-icon\":!0}),(0,y.jsx)(\"div\",{\"data-nextjs-codeframe-skeleton-line\":!0,\"data-nextjs-codeframe-skeleton-header-bar\":!0})]}),(0,y.jsxs)(\"div\",{\"data-nextjs-codeframe-skeleton-content\":!0,children:[(0,y.jsx)(\"div\",{\"data-nextjs-codeframe-skeleton-line\":!0,\"data-nextjs-codeframe-skeleton-line-1\":!0}),(0,y.jsx)(\"div\",{\"data-nextjs-codeframe-skeleton-line\":!0,\"data-nextjs-codeframe-skeleton-line-2\":!0}),(0,y.jsx)(\"div\",{\"data-nextjs-codeframe-skeleton-line\":!0,\"data-nextjs-codeframe-skeleton-line-3\":!0})]})]}),(0,y.jsx)(\"div\",{\"data-nextjs-call-stack-container\":!0,children:(0,y.jsxs)(\"div\",{\"data-nextjs-call-stack-header\":!0,children:[(0,y.jsxs)(\"p\",{\"data-nextjs-call-stack-title\":!0,children:[\"Call Stack\",\" \",(0,y.jsx)(\"span\",{\"data-nextjs-call-stack-count\":!0,\"data-nextjs-call-stack-count-skeleton\":!0})]}),(0,y.jsx)(\"button\",{\"data-nextjs-call-stack-ignored-list-toggle-button\":!0,\"data-nextjs-call-stack-ignored-list-toggle-button-skeleton\":!0,\"aria-hidden\":\"true\",children:(0,y.jsx)(\"div\",{\"data-nextjs-call-stack-skeleton-bar\":!0})})]})})]})}var of=ei(ou());function op(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function oh(e,n,t,r,o,a,i){try{var l=e[a](i),s=l.value}catch(e){t(e);return}l.done?n(s):Promise.resolve(s).then(r,o)}function og(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function om(){var e,n,t=(e=[\"\\n  [data-nextjs-issue-feedback-button-group] {\\n    display: flex;\\n    align-items: center;\\n    border: 1px solid var(--color-gray-400);\\n    border-radius: var(--rounded-full);\\n    background: var(--color-background-100);\\n    box-shadow: var(--shadow-small);\\n  }\\n\\n  [data-nextjs-issue-feedback-button-group] button {\\n    height: 100%;\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n  }\\n\\n  [data-nextjs-issue-feedback-button-group] button:first-child {\\n    padding: 4px 3px 4px 5px;\\n    border-radius: var(--rounded-full) 0 0 var(--rounded-full);\\n  }\\n\\n  [data-nextjs-issue-feedback-button-group] button:last-child {\\n    padding: 4px 5px 4px 3px;\\n    border-radius: 0 var(--rounded-full) var(--rounded-full) 0;\\n  }\\n\\n  [data-nextjs-issue-feedback-separator] {\\n    width: 1px;\\n    height: 100%;\\n    background: var(--color-gray-400);\\n  }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return om=function(){return t},t}function ov(e){var n,t,r=e.errorCode,o=(n=(0,x.useState)({}),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return op(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return op(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),a=o[0],i=o[1],l=a[r],s=true,c=(0,x.useCallback)(function(e){var n;return(n=function(){return function(e,n){var t,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create((\"function\"==typeof Iterator?Iterator:Object).prototype);return i.next=l(0),i.throw=l(1),i.return=l(2),\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function l(l){return function(s){var c=[l,s];if(t)throw TypeError(\"Generator is already executing.\");for(;i&&(i=0,c[0]&&(a=0)),a;)try{if(t=1,r&&(o=2&c[0]?r.return:c[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,c[1])).done)return o;switch(r=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return a.label++,{value:c[1],done:!1};case 5:a.label++,r=c[1],c=[0];continue;case 7:c=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){a=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){a.label=c[1];break}if(6===c[0]&&a.label<o[1]){a.label=o[1],o=c;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(c);break}o[2]&&a.ops.pop(),a.trys.pop();continue}c=n.call(e,a)}catch(e){c=[6,e],r=0}finally{t=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(n){switch(n.label){case 0:i(function(n){var t,o;return t=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){og(e,n,t[n])})}return e}({},n),o=null!=(o=og({},r,e))?o:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(o)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(o,e))}),t}),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,fetch(\"\".concat( false||\"\",\"/__nextjs_error_feedback?\").concat(new URLSearchParams({errorCode:r,wasHelpful:e.toString()})))];case 2:return n.sent().ok||console.error(\"Failed to record feedback on the server.\"),[3,4];case 3:return console.error(\"Failed to record feedback:\",n.sent()),[3,4];case 4:return[2]}})},function(){var e=this,t=arguments;return new Promise(function(r,o){var a=n.apply(e,t);function i(e){oh(a,r,o,i,l,\"next\",e)}function l(e){oh(a,r,o,i,l,\"throw\",e)}i(void 0)})})()},[r]);return(0,y.jsxs)(\"div\",{\"data-nextjs-issue-feedback-button-group\":!0,children:[(0,y.jsx)(\"button\",{\"aria-disabled\":s?\"true\":void 0,\"aria-label\":\"Mark as helpful\",onClick:s?void 0:function(){return c(!0)},className:(0,eJ.cx)(\"feedback-button\",!0===l&&\"voted\"),title:s?\"Feedback disabled due to setting NEXT_TELEMETRY_DISABLED\":void 0,type:\"button\",children:(0,y.jsx)(nw,{\"aria-hidden\":\"true\"})}),(0,y.jsx)(\"div\",{\"data-nextjs-issue-feedback-separator\":!0}),(0,y.jsx)(\"button\",{\"aria-disabled\":s?\"true\":void 0,\"aria-label\":\"Mark as not helpful\",onClick:s?void 0:function(){return c(!1)},className:(0,eJ.cx)(\"feedback-button\",!1===l&&\"voted\"),title:s?\"Feedback disabled due to setting NEXT_TELEMETRY_DISABLED\":void 0,type:\"button\",children:(0,y.jsx)(nj,{\"aria-hidden\":\"true\",style:{translate:\"1px 1px\"}})})]})}var ob=ei(om());function oy(){var e,n,t=(e=[\"\\n  [data-nextjs-devtools-panel-tab-issues-content-layout] {\\n    flex: 1;\\n    display: flex;\\n    flex-direction: column;\\n    overflow-y: auto;\\n    min-height: 0;\\n    padding: 14px;\\n  }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return oy=function(){return t},t}function ox(e){var n=e.error,t=e.errorType,r=e.message,o=e.debugInfo,a=e.children,i=e.errorCode,l=e.environmentName;return(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-tab-issues-content-layout\":!0,children:[(0,y.jsxs)(\"div\",{className:\"nextjs-container-errors-header\",children:[(0,y.jsxs)(\"div\",{className:\"nextjs__container_errors__error_title\",\"data-nextjs-error-code\":i,children:[(0,y.jsxs)(\"span\",{\"data-nextjs-error-label-group\":!0,children:[(0,y.jsx)(nL,{errorType:t}),l&&(0,y.jsx)(nK,{environmentName:l})]}),(0,y.jsx)(nx,{error:n,debugInfo:o,feedbackButton:i&&(0,y.jsx)(ov,{errorCode:i})})]}),(0,y.jsx)(nz,{errorMessage:r})]}),a]})}var ow=ei(oy());function oj(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"12\",height:\"12\",viewBox:\"0 0 12 12\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),t=t={children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M3.98071 1.125L1.125 3.98071L1.125 8.01929L3.98071 10.875H8.01929L10.875 8.01929V3.98071L8.01929 1.125H3.98071ZM3.82538 0C3.62647 0 3.4357 0.0790176 3.29505 0.21967L0.21967 3.29505C0.0790176 3.4357 0 3.62647 0 3.82538V8.17462C0 8.37353 0.0790178 8.5643 0.21967 8.70495L3.29505 11.7803C3.4357 11.921 3.62647 12 3.82538 12H8.17462C8.37353 12 8.5643 11.921 8.70495 11.7803L11.7803 8.70495C11.921 8.5643 12 8.37353 12 8.17462V3.82538C12 3.62647 11.921 3.4357 11.7803 3.29505L8.70495 0.21967C8.5643 0.0790177 8.37353 0 8.17462 0H3.82538ZM6.5625 2.8125V3.375V6V6.5625H5.4375V6V3.375V2.8125H6.5625ZM6 9C6.41421 9 6.75 8.66421 6.75 8.25C6.75 7.83579 6.41421 7.5 6 7.5C5.58579 7.5 5.25 7.83579 5.25 8.25C5.25 8.66421 5.58579 9 6 9Z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function ok(){var e,n,t=(e=[\"\\n  [data-nextjs-devtools-panel-tab-issues-empty] {\\n    display: flex;\\n    flex: 1;\\n    padding: 12px;\\n    min-height: 0;\\n  }\\n\\n  [data-nextjs-devtools-panel-tab-issues-empty-content] {\\n    display: flex;\\n    flex-direction: column;\\n    align-items: center;\\n    justify-content: center;\\n    flex: 1;\\n    border: 1px dashed var(--color-gray-alpha-500);\\n    border-radius: 4px;\\n  }\\n\\n  [data-nextjs-devtools-panel-tab-issues-empty-icon] {\\n    margin-bottom: 16px;\\n    padding: 8px;\\n    border: 1px solid var(--color-gray-alpha-400);\\n    border-radius: 6px;\\n\\n    background-color: var(--color-background-100);\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n  }\\n\\n  [data-nextjs-devtools-panel-tab-issues-empty-title] {\\n    color: var(--color-gray-1000);\\n    font-size: 16px;\\n    font-weight: 500;\\n    line-height: var(--line-height-20);\\n  }\\n\\n  [data-nextjs-devtools-panel-tab-issues-empty-subtitle] {\\n    color: var(--color-gray-900);\\n    font-size: 14px;\\n    line-height: var(--line-height-21);\\n  }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return ok=function(){return t},t}function oA(){return(0,y.jsx)(\"div\",{\"data-nextjs-devtools-panel-tab-issues-empty\":!0,children:(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-tab-issues-empty-content\":!0,children:[(0,y.jsx)(\"div\",{\"data-nextjs-devtools-panel-tab-issues-empty-icon\":!0,children:(0,y.jsx)(oj,{width:16,height:16})}),(0,y.jsx)(\"h3\",{\"data-nextjs-devtools-panel-tab-issues-empty-title\":!0,children:\"No Issues Found\"}),(0,y.jsx)(\"p\",{\"data-nextjs-devtools-panel-tab-issues-empty-subtitle\":!0,children:\"Issues will appear here when they occur.\"})]})})}var oO=ei(ok());function oC(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function oS(){var e,n,t=(e=[\"\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return oS=function(){return t},t}function oE(e){var n=e.notes,t=e.buildError,r=e.hydrationWarning,o=e.errorDetails,a=e.activeError,i=e.errorType,l=e.debugInfo,s=e.errorCode;return t?(0,y.jsx)(oz,{message:t,debugInfo:l}):(0,y.jsx)(o_,{notes:n,hydrationWarning:r,errorDetails:o,activeError:a,errorType:i,debugInfo:l,errorCode:s})}function o_(e){var n=e.notes,t=e.hydrationWarning,r=e.errorDetails,o=e.activeError,a=e.errorType,i=e.debugInfo,l=e.errorCode;return o&&a?(0,y.jsxs)(ox,{error:o.error,errorType:a,message:o.error.message,debugInfo:i,errorCode:l,environmentName:o.error.environmentName,children:[(0,y.jsxs)(\"div\",{className:\"error-overlay-notes-container\",children:[n?(0,y.jsx)(y.Fragment,{children:(0,y.jsx)(\"p\",{id:\"nextjs__container_errors__notes\",className:\"nextjs__container_errors__notes\",children:n})}):null,t?(0,y.jsx)(\"p\",{id:\"nextjs__container_errors__link\",className:\"nextjs__container_errors__link\",children:(0,y.jsx)(eb,{text:\"See more info here: \".concat(np)})}):null]}),(null==r?void 0:r.reactOutputComponentDiff)?(0,y.jsx)(th,{reactOutputComponentDiff:r.reactOutputComponentDiff||\"\"}):null,(0,y.jsx)(x.Suspense,{fallback:(0,y.jsx)(od,{}),children:(0,y.jsx)(oP,{error:o},o.id.toString())})]}):(0,y.jsx)(oA,{})}function oP(e){var n,t,r=e.error,o=(n=(0,x.useState)(!1),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return oC(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return oC(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),a=o[0],i=o[1],l=tj(r),s=(0,x.useMemo)(function(){return l.reduce(function(e,n){return e+ +!!n.ignored},0)},[l]),c=(0,x.useMemo)(function(){var e,n=l.findIndex(function(e){return!e.ignored&&!!e.originalCodeFrame&&!!e.originalStackFrame});return null!=(e=l[n])?e:null},[l]);return(0,y.jsxs)(y.Fragment,{children:[c&&c.originalStackFrame&&c.originalCodeFrame&&(0,y.jsx)(eq,{stackFrame:c.originalStackFrame,codeFrame:c.originalCodeFrame}),l.length>0&&(0,y.jsx)(tl,{frames:l,isIgnoreListOpen:a,onToggleIgnoreList:function(){return i(!a)},ignoredFramesTally:s})]})}function oz(e){var n=e.message,t=e.debugInfo,r=Error(n),o=(0,x.useMemo)(function(){return tt(n)||\"Failed to compile\"},[n]);return(0,y.jsx)(ox,{errorType:\"Build Error\",error:r,message:o,debugInfo:t,children:(0,y.jsx)(tn,{content:n})})}var oL=ei(oS());function oT(){var e,n,t=(e=[\"\\n  [data-nextjs-devtools-panel-tab-issues] {\\n    display: flex;\\n    flex: 1;\\n    min-height: 0;\\n  }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return oT=function(){return t},t}function oR(e){var n=e.debugInfo,t=e.runtimeErrors,r=e.getSquashedHydrationErrorDetails,o=e.buildError,a=tS({runtimeErrors:t,getSquashedHydrationErrorDetails:r}),i=a.errorCode,l=a.errorType,s=a.hydrationWarning,c=a.activeError,u=a.activeIdx,d=a.setActiveIndex,f=a.notes,p=a.errorDetails;return(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-tab-issues\":!0,children:[o?null:(0,y.jsx)(oi,{runtimeErrors:t,errorType:l,activeIdx:u,setActiveIndex:d}),(0,y.jsx)(oE,{buildError:o,notes:f,hydrationWarning:s,errorDetails:p,activeError:c,errorType:l,debugInfo:n,errorCode:i})]})}var oN=ei(oT()),oD= false?0:function(){return null};function oB(e){var n=e.routerType,t=e.page;return(0,y.jsx)(oD,{isAppRouter:\"app\"===n,page:t})}function oM(e){var n=e.routerType,t=e.page;return(0,y.jsx)(oB,{routerType:n,page:t})}function oI(e){var n=e.activeTab,t=e.devToolsPosition,r=e.scale,o=e.routerType,a=e.handlePositionChange,i=e.handleScaleChange,l=e.debugInfo,s=e.runtimeErrors,c=e.getSquashedHydrationErrorDetails,u=e.buildError,d=e.page;switch(n){case\"settings\":return(0,y.jsx)(oe,{devToolsPosition:t,scale:r,handlePositionChange:a,handleScaleChange:i});case\"route\":return(0,y.jsx)(oM,{routerType:o,page:d});case\"issues\":return(0,y.jsx)(oR,{debugInfo:l,runtimeErrors:s,getSquashedHydrationErrorDetails:c,buildError:u});default:return null}}function oH(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({width:\"12\",height:\"12\",viewBox:\"0 0 14 14\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},e),t=t={children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M3.08889 11.8384L2.62486 12.3024L1.69678 11.3744L2.16082 10.9103L6.07178 6.99937L2.16082 3.08841L1.69678 2.62437L2.62486 1.69629L3.08889 2.16033L6.99986 6.07129L10.9108 2.16033L11.3749 1.69629L12.3029 2.62437L11.8389 3.08841L7.92793 6.99937L11.8389 10.9103L12.3029 11.3744L11.3749 12.3024L10.9108 11.8384L6.99986 7.92744L3.08889 11.8384Z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function oF(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function oU(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function oV(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function oq(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],!(n.indexOf(t)>=0)&&Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function oW(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return oF(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return oF(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function o$(){var e,n,t=(e=[\"\\n          [data-next-badge-root] {\\n            --timing: cubic-bezier(0.23, 0.88, 0.26, 0.92);\\n            --duration-long: 250ms;\\n            --color-outer-border: #171717;\\n            --color-inner-border: hsla(0, 0%, 100%, 0.14);\\n            --color-hover-alpha-subtle: hsla(0, 0%, 100%, 0.13);\\n            --color-hover-alpha-error: hsla(0, 0%, 100%, 0.2);\\n            --color-hover-alpha-error-2: hsla(0, 0%, 100%, 0.25);\\n            --mark-size: calc(var(--size) - var(--size-2) * 2);\\n\\n            --focus-color: var(--color-blue-800);\\n            --focus-ring: 2px solid var(--focus-color);\\n\\n            &:has([data-next-badge][data-error='true']) {\\n              --focus-color: #fff;\\n            }\\n          }\\n\\n          [data-disabled-icon] {\\n            display: flex;\\n            align-items: center;\\n            justify-content: center;\\n            padding-right: 4px;\\n          }\\n\\n          [data-next-badge] {\\n            -webkit-font-smoothing: antialiased;\\n            width: var(--size);\\n            height: var(--size);\\n            display: flex;\\n            align-items: center;\\n            position: relative;\\n            background: rgba(0, 0, 0, 0.8);\\n            box-shadow:\\n              0 0 0 1px var(--color-outer-border),\\n              inset 0 0 0 1px var(--color-inner-border),\\n              0px 16px 32px -8px rgba(0, 0, 0, 0.24);\\n            backdrop-filter: blur(48px);\\n            border-radius: var(--rounded-full);\\n            user-select: none;\\n            cursor: pointer;\\n            scale: 1;\\n            overflow: hidden;\\n            will-change: scale, box-shadow, width, background;\\n            transition:\\n              scale var(--duration-short) var(--timing),\\n              width var(--duration-long) var(--timing),\\n              box-shadow var(--duration-long) var(--timing),\\n              background var(--duration-short) ease;\\n\\n            &:active[data-error='false'] {\\n              scale: 0.95;\\n            }\\n\\n            &[data-animate='true']:not(:hover) {\\n              scale: 1.02;\\n            }\\n\\n            &[data-error='false']:has([data-next-mark]:focus-visible) {\\n              outline: var(--focus-ring);\\n              outline-offset: 3px;\\n            }\\n\\n            &[data-error='true'] {\\n              background: #ca2a30;\\n              --color-inner-border: #e5484d;\\n\\n              [data-next-mark] {\\n                background: var(--color-hover-alpha-error);\\n                outline-offset: 0px;\\n\\n                &:focus-visible {\\n                  outline: var(--focus-ring);\\n                  outline-offset: -1px;\\n                }\\n\\n                &:hover {\\n                  background: var(--color-hover-alpha-error-2);\\n                }\\n              }\\n            }\\n\\n            &[data-error-expanded='false'][data-error='true'] ~ [data-dot] {\\n              scale: 1;\\n            }\\n\\n            > div {\\n              display: flex;\\n            }\\n          }\\n\\n          [data-issues-collapse]:focus-visible {\\n            outline: var(--focus-ring);\\n          }\\n\\n          [data-issues]:has([data-issues-open]:focus-visible) {\\n            outline: var(--focus-ring);\\n            outline-offset: -1px;\\n          }\\n\\n          [data-dot] {\\n            content: '';\\n            width: var(--size-8);\\n            height: var(--size-8);\\n            background: #fff;\\n            box-shadow: 0 0 0 1px var(--color-outer-border);\\n            border-radius: 50%;\\n            position: absolute;\\n            top: 2px;\\n            right: 0px;\\n            scale: 0;\\n            pointer-events: none;\\n            transition: scale 200ms var(--timing);\\n            transition-delay: var(--duration-short);\\n          }\\n\\n          [data-issues] {\\n            --padding-left: 8px;\\n            display: flex;\\n            gap: 2px;\\n            align-items: center;\\n            padding-left: 8px;\\n            padding-right: 8px;\\n            height: var(--size-32);\\n            margin-right: 2px;\\n            border-radius: var(--rounded-full);\\n            transition: background var(--duration-short) ease;\\n\\n            &:has([data-issues-open]:hover) {\\n              background: var(--color-hover-alpha-error);\\n            }\\n\\n            &:has([data-issues-collapse]) {\\n              padding-right: calc(var(--padding-left) / 2);\\n            }\\n\\n            [data-cross] {\\n              translate: 0px -1px;\\n            }\\n          }\\n\\n          [data-issues-open] {\\n            font-size: var(--size-13);\\n            color: white;\\n            width: fit-content;\\n            height: 100%;\\n            display: flex;\\n            gap: 2px;\\n            align-items: center;\\n            margin: 0;\\n            line-height: var(--size-36);\\n            font-weight: 500;\\n            z-index: 2;\\n            white-space: nowrap;\\n\\n            &:focus-visible {\\n              outline: 0;\\n            }\\n          }\\n\\n          [data-issues-collapse] {\\n            width: var(--size-24);\\n            height: var(--size-24);\\n            border-radius: var(--rounded-full);\\n            transition: background var(--duration-short) ease;\\n\\n            &:hover {\\n              background: var(--color-hover-alpha-error);\\n            }\\n          }\\n\\n          [data-cross] {\\n            color: #fff;\\n            width: var(--size-12);\\n            height: var(--size-12);\\n          }\\n\\n          [data-next-mark] {\\n            width: var(--mark-size);\\n            height: var(--mark-size);\\n            margin: 0 2px;\\n            display: flex;\\n            align-items: center;\\n            border-radius: var(--rounded-full);\\n            transition: background var(--duration-long) var(--timing);\\n\\n            &:focus-visible {\\n              outline: 0;\\n            }\\n\\n            &:hover {\\n              background: var(--color-hover-alpha-subtle);\\n            }\\n\\n            svg {\\n              flex-shrink: 0;\\n              width: var(--size-40);\\n              height: var(--size-40);\\n            }\\n          }\\n\\n          [data-issues-count-animation] {\\n            display: grid;\\n            place-items: center center;\\n            font-variant-numeric: tabular-nums;\\n\\n            &[data-animate='false'] {\\n              [data-issues-count-exit],\\n              [data-issues-count-enter] {\\n                animation-duration: 0ms;\\n              }\\n            }\\n\\n            > * {\\n              grid-area: 1 / 1;\\n            }\\n\\n            [data-issues-count-exit] {\\n              animation: fadeOut 300ms var(--timing) forwards;\\n            }\\n\\n            [data-issues-count-enter] {\\n              animation: fadeIn 300ms var(--timing) forwards;\\n            }\\n          }\\n\\n          [data-issues-count-plural] {\\n            display: inline-block;\\n            &[data-animate='true'] {\\n              animation: fadeIn 300ms var(--timing) forwards;\\n            }\\n          }\\n\\n          .path0 {\\n            animation: draw0 1.5s ease-in-out infinite;\\n          }\\n\\n          .path1 {\\n            animation: draw1 1.5s ease-out infinite;\\n            animation-delay: 0.3s;\\n          }\\n\\n          .paused {\\n            stroke-dashoffset: 0;\\n          }\\n\\n          @keyframes fadeIn {\\n            0% {\\n              opacity: 0;\\n              filter: blur(2px);\\n              transform: translateY(8px);\\n            }\\n            100% {\\n              opacity: 1;\\n              filter: blur(0px);\\n              transform: translateY(0);\\n            }\\n          }\\n\\n          @keyframes fadeOut {\\n            0% {\\n              opacity: 1;\\n              filter: blur(0px);\\n              transform: translateY(0);\\n            }\\n            100% {\\n              opacity: 0;\\n              transform: translateY(-12px);\\n              filter: blur(2px);\\n            }\\n          }\\n\\n          @keyframes draw0 {\\n            0%,\\n            25% {\\n              stroke-dashoffset: -29.6;\\n            }\\n            25%,\\n            50% {\\n              stroke-dashoffset: 0;\\n            }\\n            50%,\\n            75% {\\n              stroke-dashoffset: 0;\\n            }\\n            75%,\\n            100% {\\n              stroke-dashoffset: 29.6;\\n            }\\n          }\\n\\n          @keyframes draw1 {\\n            0%,\\n            20% {\\n              stroke-dashoffset: -11.6;\\n            }\\n            20%,\\n            50% {\\n              stroke-dashoffset: 0;\\n            }\\n            50%,\\n            75% {\\n              stroke-dashoffset: 0;\\n            }\\n            75%,\\n            100% {\\n              stroke-dashoffset: 11.6;\\n            }\\n          }\\n\\n          @media (prefers-reduced-motion) {\\n            [data-issues-count-exit],\\n            [data-issues-count-enter],\\n            [data-issues-count-plural] {\\n              animation-duration: 0ms !important;\\n            }\\n          }\\n        \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return o$=function(){return t},t}function oZ(e){var n=e.disabled,t=e.issueCount,r=e.isDevBuilding,o=e.isDevRendering,a=e.isBuildError,i=e.onTriggerClick,l=e.toggleErrorOverlay,s=e.scale,c=oq(e,[\"disabled\",\"issueCount\",\"isDevBuilding\",\"isDevRendering\",\"isBuildError\",\"onTriggerClick\",\"toggleErrorOverlay\",\"scale\"]),u=t>0,d=oW((0,x.useState)(u),2),f=d[0],p=d[1],h=oW((0,x.useState)(!1),2),g=h[0],m=h[1],v=tM(t,150),b=(0,x.useRef)(null),w=(0,x.useRef)(null),j=tF(w),k=tD(r||o),A=f||n;return(0,x.useEffect)(function(){p(u)},[u]),(0,y.jsxs)(\"div\",{\"data-next-badge-root\":!0,style:{\"--size\":\"\".concat(36/(void 0===s?1:s),\"px\"),\"--duration-short\":\"\".concat(150,\"ms\"),display:n&&(!u||g)?\"none\":\"block\"},children:[(0,y.jsx)(\"style\",{children:ei(o$())}),(0,y.jsx)(\"div\",{\"data-next-badge\":!0,\"data-error\":u,\"data-error-expanded\":A,\"data-animate\":v,style:{width:0===j?\"auto\":j},children:(0,y.jsxs)(\"div\",{ref:w,children:[!n&&(0,y.jsx)(\"button\",oV(oU({ref:b,\"data-next-mark\":!0,\"data-next-mark-loading\":k,onClick:i},c),{children:(0,y.jsx)(oX,{isLoading:k,isDevBuilding:r})})),A&&(0,y.jsxs)(\"div\",{\"data-issues\":!0,children:[(0,y.jsxs)(\"button\",{\"data-issues-open\":!0,\"aria-label\":\"Open issues overlay\",onClick:l,children:[n&&(0,y.jsx)(\"div\",{\"data-disabled-icon\":!0,children:(0,y.jsx)(oj,{})}),(0,y.jsx)(oY,{animate:v,\"data-issues-count-animation\":!0,children:t},t),\" \",(0,y.jsxs)(\"div\",{children:[\"Issue\",t>1&&(0,y.jsx)(\"span\",{\"aria-hidden\":!0,\"data-issues-count-plural\":!0,\"data-animate\":v&&2===t,children:\"s\"})]})]}),!a&&(0,y.jsx)(\"button\",{\"data-issues-collapse\":!0,\"aria-label\":\"Collapse issues badge\",onClick:function(){var e;n?m(!0):p(!1),null==(e=b.current)||e.focus()},children:(0,y.jsx)(oH,{\"data-cross\":!0})})]})]})}),(0,y.jsx)(\"div\",{\"aria-hidden\":!0,\"data-dot\":!0})]})}function oY(e){var n=e.children,t=e.animate,r=oq(e,[\"children\",\"animate\"]);return(0,y.jsxs)(\"div\",oV(oU({},r),{\"data-animate\":void 0===t||t,children:[(0,y.jsx)(\"div\",{\"aria-hidden\":!0,\"data-issues-count-exit\":!0,children:n-1}),(0,y.jsx)(\"div\",{\"data-issues-count\":!0,\"data-issues-count-enter\":!0,children:n})]}))}function oX(e){var n=e.isLoading,t=e.isDevBuilding?\"rgba(255,255,255,0.7)\":\"white\";return(0,y.jsxs)(\"svg\",{width:\"40\",height:\"40\",viewBox:\"0 0 40 40\",fill:\"none\",\"data-next-mark-loading\":n,children:[(0,y.jsxs)(\"g\",{transform:\"translate(8.5, 13)\",children:[(0,y.jsx)(\"path\",{className:n?\"path0\":\"paused\",d:\"M13.3 15.2 L2.34 1 V12.6\",fill:\"none\",stroke:\"url(#next_logo_paint0_linear_1357_10853)\",strokeWidth:\"1.86\",mask:\"url(#next_logo_mask0)\",strokeDasharray:\"29.6\",strokeDashoffset:\"29.6\"}),(0,y.jsx)(\"path\",{className:n?\"path1\":\"paused\",d:\"M11.825 1.5 V13.1\",strokeWidth:\"1.86\",stroke:\"url(#next_logo_paint1_linear_1357_10853)\",strokeDasharray:\"11.6\",strokeDashoffset:\"11.6\"})]}),(0,y.jsxs)(\"defs\",{children:[(0,y.jsxs)(\"linearGradient\",{id:\"next_logo_paint0_linear_1357_10853\",x1:\"9.95555\",y1:\"11.1226\",x2:\"15.4778\",y2:\"17.9671\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{stopColor:t}),(0,y.jsx)(\"stop\",{offset:\"0.604072\",stopColor:t,stopOpacity:\"0\"}),(0,y.jsx)(\"stop\",{offset:\"1\",stopColor:t,stopOpacity:\"0\"})]}),(0,y.jsxs)(\"linearGradient\",{id:\"next_logo_paint1_linear_1357_10853\",x1:\"11.8222\",y1:\"1.40039\",x2:\"11.791\",y2:\"9.62542\",gradientUnits:\"userSpaceOnUse\",children:[(0,y.jsx)(\"stop\",{stopColor:t}),(0,y.jsx)(\"stop\",{offset:\"1\",stopColor:t,stopOpacity:\"0\"})]}),(0,y.jsxs)(\"mask\",{id:\"next_logo_mask0\",children:[(0,y.jsx)(\"rect\",{width:\"100%\",height:\"100%\",fill:\"white\"}),(0,y.jsx)(\"rect\",{width:\"5\",height:\"1.5\",fill:\"black\"})]})]})]})}function oK(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function oQ(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function oG(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return oK(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return oK(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function oJ(e){var n,t=e.state,r=e.dispatch,o=e.errorCount,a=e.isBuildError,i=oG((0,x.useState)(!1),2),l=i[0],s=i[1],c=oG(t.devToolsPosition.split(\"-\",2),2),u=c[0],d=c[1];return(0,y.jsx)(tR,{\"data-nextjs-toast\":!0,style:(oQ(n={\"--animate-out-duration-ms\":\"\".concat(nQ.K7,\"ms\"),\"--animate-out-timing-function\":nQ.uD,boxShadow:\"none\"},u,\"\".concat(20,\"px\")),oQ(n,d,\"\".concat(20,\"px\")),oQ(n,\"visibility\",t.isDevToolsPanelOpen||t.isErrorOverlayOpen?\"hidden\":\"visible\"),n),children:(0,y.jsx)(rN,{padding:20,onDragStart:function(){return s(!1)},position:t.devToolsPosition,setPosition:function(e){r({type:Y,devToolsPosition:e}),localStorage.setItem(G,e)},children:(0,y.jsx)(oZ,{\"aria-haspopup\":\"menu\",\"aria-expanded\":l,\"aria-controls\":\"nextjs-dev-tools-menu\",\"aria-label\":\"\".concat(l?\"Close\":\"Open\",\" Next.js Dev Tools\"),\"data-nextjs-dev-tools-button\":!0,disabled:t.disableDevIndicator,issueCount:o,onTriggerClick:function(){r({type:Z})},toggleErrorOverlay:function(){r({type:M}),r({type:W})},isDevBuilding:t.buildingIndicator,isDevRendering:t.renderingIndicator,isBuildError:a,scale:t.scale})})})}function o0(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\"},e),t=t={children:(0,y.jsx)(\"path\",{d:\"M15 14C15 14.5523 14.5523 15 14 15H10V13.5H13.5V10H15V14ZM2.5 13.499H6V14.999H2C1.44772 14.999 1 14.5513 1 13.999V9.99902H2.5V13.499ZM6 2.5H2.5V6H1V2C1 1.44772 1.44772 1 2 1H6V2.5ZM14 1C14.5523 1 15 1.44772 15 2V6H13.5V2.5H10V1H14Z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function o1(e){var n,t;return(0,y.jsx)(\"svg\",(n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({xmlns:\"http://www.w3.org/2000/svg\",width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\"},e),t=t={children:(0,y.jsx)(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M1 6V4.5H4.5V1H6V5C6 5.55228 5.55228 6 5 6H1ZM11.5 1H10V5C10 5.55228 10.4477 6 11 6H15V4.5H11.5V1ZM15.04 11.5V10H11C10.4477 10 10 10.4477 10 11V15H11.5V11.5H15.04ZM4.5 15H6V11C6 10.4477 5.55228 10 5 10H1V11.5H4.5V15Z\",fill:\"currentColor\"})},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n))}function o2(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}var o4=\"nextjs-devtools-dimensions\",o5=(0,x.createContext)(null),o3=function(e){var n=.95*window.innerWidth,t=.95*window.innerHeight;return{width:Math.min(n,Math.max(e.minWidth,e.width)),height:Math.min(t,Math.max(e.minHeight,e.height))}},o6=function(){var e=localStorage.getItem(o4);if(!e)return null;try{var n,t=JSON.parse(e);if((void 0===t?\"undefined\":(n=t)&&\"undefined\"!=typeof Symbol&&n.constructor===Symbol?\"symbol\":typeof n)==\"object\"&&null!==t&&\"number\"==typeof t.width&&\"number\"==typeof t.height)return{width:t.width,height:t.height};return null}catch(e){return localStorage.removeItem(o4),null}},o9=function(e){var n,t,r,o,a=e.value,i=e.children,l=null!=(r=a.minWidth)?r:100,s=null!=(o=a.minHeight)?o:80,c=(n=(0,x.useState)(null),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return o2(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return o2(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),u=c[0],d=c[1];return(0,x.useLayoutEffect)(function(){var e=function(){if(a.resizeRef.current){var e=o6();if(e){var n,t,r=o3((n=function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({},e),t=t={minWidth:null!=l?l:100,minHeight:null!=s?s:80},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))}),n)),o=r.height,i=r.width;a.resizeRef.current.style.width=\"\".concat(i,\"px\"),a.resizeRef.current.style.height=\"\".concat(o,\"px\")}}};return e(),window.addEventListener(\"resize\",e),function(){return window.removeEventListener(\"resize\",e)}},[a.resizeRef,l,s]),(0,y.jsx)(o5.Provider,{value:{resizeRef:a.resizeRef,minWidth:l,minHeight:s,devToolsPosition:a.devToolsPosition,draggingDirection:u,setDraggingDirection:d},children:i})},o8=function(){var e=(0,x.useContext)(o5);if(!e)throw Error(\"useResize must be used within a Resize provider\");return e},o7=__nested_webpack_require_381207__(\"../../node_modules/.pnpm/css-loader@7.1.2_@rspack+core@1.4.5_@swc+helpers@0.5.15__webpack@5.98.0_@swc+core@1.11.24_@sw_wm7ee5ic4mofrhisudwon4qpq4/node_modules/css-loader/dist/cjs.js!./src/next-devtools/dev-overlay/components/devtools-panel/resize/resize-handle.css\"),ae={};function an(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}ae.styleTagTransform=h(),ae.setAttributes=u(),ae.insert=s(),ae.domAPI=i(),ae.insertStyleElement=f(),o()(o7.Z,ae),o7.Z&&o7.Z.locals&&o7.Z.locals;var at=function(e){var n,t,r=e.direction,o=o8(),a=o.resizeRef,i=o.minWidth,l=o.minHeight,s=o.devToolsPosition,c=o.draggingDirection,u=o.setDraggingDirection,d=(n=(0,x.useState)({top:0,right:0,bottom:0,left:0}),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||function(e,n){if(e){if(\"string\"==typeof e)return an(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return an(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),f=d[0],p=d[1];if((0,x.useLayoutEffect)(function(){if(a.current){var e=a.current,n=window.getComputedStyle(e);p({top:parseFloat(n.borderTopWidth)||0,right:parseFloat(n.borderRightWidth)||0,bottom:parseFloat(n.borderBottomWidth)||0,left:parseFloat(n.borderLeftWidth)||0})}},[a]),!(!s.split(\"-\").includes(r)&&(!r.includes(\"-\")||r===function(e){switch(e){case\"top-left\":return\"bottom-right\";case\"top-right\":return\"bottom-left\";case\"bottom-left\":return\"top-right\";case\"bottom-right\":return\"top-left\";default:return null}}(s))))return null;var h=f.left+f.right,g=f.top+f.bottom,m=r.includes(\"-\");return(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(\"div\",{className:\"resize-container \".concat(r,\" \").concat(c&&c!==r?\"no-hover\":\"\"),onMouseDown:function(e){if(e.preventDefault(),a.current){u(r);var n=a.current,t=n.getBoundingClientRect(),o=n.offsetLeft,s=n.offsetTop,c=e.clientX,d=e.clientY,f=function(e){var a=ar(r,e.clientX-c,e.clientY-d,t,o,s,i,l),u=a.newWidth,f=a.newHeight,p=a.newLeft,h=a.newTop;n.style.width=\"\".concat(u,\"px\"),n.style.height=\"\".concat(f,\"px\"),(r.includes(\"left\")||\"left\"===r)&&(n.style.left=\"\".concat(p,\"px\")),(r.includes(\"top\")||\"top\"===r)&&(n.style.top=\"\".concat(h,\"px\"))},p=function(){u(null),document.removeEventListener(\"mousemove\",f),document.removeEventListener(\"mouseup\",p);var e=a.current.getBoundingClientRect(),n=e.width,t=e.height;localStorage.setItem(\"nextjs-devtools-dimensions\",JSON.stringify({width:n,height:t}))};document.addEventListener(\"mousemove\",f),document.addEventListener(\"mouseup\",p)}}}),!m&&(0,y.jsx)(\"div\",{className:\"resize-line \".concat(r,\" \").concat(c===r?\"dragging\":\"\"),style:{\"--border-horizontal\":\"\".concat(h,\"px\"),\"--border-vertical\":\"\".concat(g,\"px\"),\"--border-top\":\"\".concat(f.top,\"px\"),\"--border-right\":\"\".concat(f.right,\"px\"),\"--border-bottom\":\"\".concat(f.bottom,\"px\"),\"--border-left\":\"\".concat(f.left,\"px\")}})]})},ar=function(e,n,t,r,o,a,i,l){var s=.95*window.innerWidth,c=.95*window.innerHeight;switch(e){case\"right\":return{newWidth:Math.min(s,Math.max(i,r.width+n)),newHeight:r.height,newLeft:o,newTop:a};case\"left\":var u=Math.min(s,Math.max(i,r.width-n)),d=u-r.width;return{newWidth:u,newHeight:r.height,newLeft:o-d,newTop:a};case\"bottom\":return{newWidth:r.width,newHeight:Math.min(c,Math.max(l,r.height+t)),newLeft:o,newTop:a};case\"top\":var f=Math.min(c,Math.max(l,r.height-t)),p=f-r.height;return{newWidth:r.width,newHeight:f,newLeft:o,newTop:a-p};case\"top-left\":var h=Math.min(s,Math.max(i,r.width-n)),g=Math.min(c,Math.max(l,r.height-t)),m=h-r.width,v=g-r.height;return{newWidth:h,newHeight:g,newLeft:o-m,newTop:a-v};case\"top-right\":var b=Math.min(c,Math.max(l,r.height-t)),y=b-r.height;return{newWidth:Math.min(s,Math.max(i,r.width+n)),newHeight:b,newLeft:o,newTop:a-y};case\"bottom-left\":var x=Math.min(s,Math.max(i,r.width-n)),w=x-r.width;return{newWidth:x,newHeight:Math.min(c,Math.max(l,r.height+t)),newLeft:o-w,newTop:a};case\"bottom-right\":return{newWidth:Math.min(s,Math.max(i,r.width+n)),newHeight:Math.min(c,Math.max(l,r.height+t)),newLeft:o,newTop:a};default:return null}};function ao(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function aa(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function ai(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return ao(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return ao(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function al(){var e,n,t=(e=[\"\\n  /* TODO: Better override dialog header style. This conflicts with issues tab content. */\\n  [data-nextjs-devtools-panel-dialog-header] {\\n    flex-shrink: 0;\\n    margin-bottom: 0 !important;\\n  }\\n\\n  [data-nextjs-devtools-panel-dialog-content] {\\n    flex: 1;\\n    display: flex;\\n    flex-direction: column;\\n    min-height: 0; // what allows content to overflow\\n  }\\n\\n  [data-nextjs-devtools-panel-dialog-body] {\\n    flex: 1;\\n    overflow: auto;\\n  }\\n\\n  [data-nextjs-devtools-panel-overlay] {\\n    margin: auto;\\n    width: 525px;\\n    height: 375px;\\n  }\\n\\n  [data-nextjs-devtools-panel-overlay-backdrop] {\\n    opacity: 0;\\n    visibility: hidden;\\n  }\\n\\n  [data-nextjs-devtools-panel-overlay-backdrop='true'] {\\n    opacity: 1;\\n    visibility: visible;\\n  }\\n\\n  [data-nextjs-devtools-panel-draggable] {\\n    /* For responsiveness */\\n    width: 100%;\\n    height: 100%;\\n  }\\n\\n  [data-nextjs-devtools-panel-dialog] {\\n    -webkit-font-smoothing: antialiased;\\n    display: flex;\\n    flex-direction: column;\\n    background: var(--color-background-100);\\n    background-clip: padding-box;\\n    border: 1px solid var(--color-gray-400);\\n    border-radius: var(--rounded-xl);\\n    box-shadow: var(--shadow-lg);\\n    position: relative;\\n    width: 100%;\\n    height: 100%;\\n    min-width: 400px;\\n    min-height: 350px;\\n  }\\n\\n  [data-nextjs-devtools-panel-header] {\\n    display: flex;\\n    justify-content: space-between;\\n    align-items: center;\\n    border-bottom: 1px solid var(--color-gray-400);\\n  }\\n\\n  [data-nextjs-devtools-panel-header-tab-group] {\\n    display: flex;\\n    align-items: center;\\n    padding: 8px;\\n    gap: 6px;\\n  }\\n\\n  [data-nextjs-devtools-panel-header-tab] {\\n    display: flex;\\n    align-items: center;\\n    color: var(--color-gray-900);\\n    border-radius: var(--rounded-md-2);\\n    padding: 4px 12px;\\n    font-size: 14px;\\n    font-weight: 500;\\n    transition: background-color 200ms ease;\\n\\n    &:hover {\\n      background-color: var(--color-gray-200);\\n    }\\n\\n    &:active {\\n      background-color: var(--color-gray-300);\\n    }\\n  }\\n\\n  [data-nextjs-devtools-panel-header-tab='true'] {\\n    color: var(--color-gray-1000);\\n    background-color: var(--color-gray-100);\\n  }\\n\\n  [data-nextjs-devtools-panel-header-tab-issues-badge] {\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n    margin-left: 8px;\\n    background-color: var(--color-red-400);\\n    color: var(--color-red-900);\\n    font-size: 11px;\\n    border-radius: var(--rounded-full);\\n    padding: 2px 6px;\\n    width: 20px;\\n    height: 20px;\\n    font-weight: 500;\\n  }\\n\\n  [data-nextjs-devtools-panel-header-action-button-group] {\\n    display: flex;\\n    align-items: center;\\n    gap: 4px;\\n    padding-right: 8px;\\n  }\\n\\n  [data-nextjs-devtools-panel-header-action-button] {\\n    background: transparent;\\n    border: none;\\n    cursor: pointer;\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n    padding: 6px;\\n    color: var(--color-gray-1000);\\n    border-radius: 4px;\\n    transition-property: background-color, color;\\n    transition-duration: 200ms;\\n    transition-timing-function: ease;\\n\\n    &:hover {\\n      background-color: var(--color-gray-200);\\n      color: var(--color-gray-900);\\n    }\\n\\n    &:active {\\n      background-color: var(--color-gray-300);\\n    }\\n  }\\n\\n  [data-nextjs-devtools-panel-draggable='true'] {\\n    cursor: move;\\n    user-select: none;\\n    & > * {\\n      cursor: auto;\\n      /* user-select: auto; follows the parent (parent none -> child none), so reset the direct child to text */\\n      user-select: text;\\n    }\\n  }\\n\"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return al=function(){return t},t}function as(e){var n,t,r,o,a,i,l=e.state,s=e.dispatch,c=e.issueCount,u=e.runtimeErrors,d=e.getSquashedHydrationErrorDetails,f=ai((n=\"__nextjs-devtools-active-tab\",t=\"issues\",o=(r=ai((0,x.useState)(function(){if(\"undefined\"!=typeof window&&\"undefined\"!=typeof sessionStorage){var e=sessionStorage.getItem(n);return null!=e?e:t}return t}),2))[0],a=r[1],(0,x.useEffect)(function(){\"undefined\"!=typeof window&&\"undefined\"!=typeof sessionStorage&&sessionStorage.setItem(n,o)},[n,o]),[o,a]),2),p=f[0],h=f[1],g=ai((0,x.useState)(!1),2),m=g[0],v=g[1],b=ai((0,x.useState)(!1),2),w=b[0],j=b[1],k=(0,x.useRef)(null);l.isErrorOverlayOpen!==w&&(l.isErrorOverlayOpen&&(v(!0),h(\"issues\")),j(l.isErrorOverlayOpen));var A=ai(l.devToolsPosition.split(\"-\",2),2),O=A[0],C=A[1],S=function(){s({type:$}),s({type:I})};return(0,y.jsx)(o9,{value:{resizeRef:k,minWidth:400,minHeight:350,devToolsPosition:l.devToolsPosition},children:(0,y.jsxs)(nZ,{ref:k,\"data-nextjs-devtools-panel-overlay\":!0,style:m?{}:(aa(i={},O,\"\".concat(20,\"px\")),aa(i,C,\"\".concat(20,\"px\")),aa(i,\"top\"===O?\"bottom\":\"top\",\"auto\"),aa(i,\"left\"===C?\"right\":\"left\",\"auto\"),i),children:[(0,y.jsx)(n2,{\"data-nextjs-devtools-panel-overlay-backdrop\":m,onClick:S}),(0,y.jsx)(rN,{\"data-nextjs-devtools-panel-draggable\":!0,padding:20,onDragStart:function(){},position:l.devToolsPosition,setPosition:function(e){localStorage.setItem(G,e),s({type:Y,devToolsPosition:e})},dragHandleSelector:\"[data-nextjs-devtools-panel-header], [data-nextjs-devtools-panel-footer]\",disableDrag:m,children:(0,y.jsxs)(y.Fragment,{children:[(0,y.jsxs)(eZ,{\"data-nextjs-devtools-panel-dialog\":!0,\"aria-labelledby\":\"nextjs__container_dev_tools_panel_label\",\"aria-describedby\":\"nextjs__container_dev_tools_panel_desc\",onClose:S,children:[(0,y.jsxs)(eX,{\"data-nextjs-devtools-panel-dialog-content\":!0,children:[(0,y.jsx)(eK,{\"data-nextjs-devtools-panel-dialog-header\":!0,children:(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-header\":!0,\"data-nextjs-devtools-panel-draggable\":!m,children:[(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-header-tab-group\":!0,children:[(0,y.jsxs)(\"button\",{\"data-nextjs-devtools-panel-header-tab\":\"issues\"===p,onClick:function(){return h(\"issues\")},children:[\"Issues\",c>0?(0,y.jsx)(\"span\",{\"data-nextjs-devtools-panel-header-tab-issues-badge\":!0,children:c}):null]}),(0,y.jsx)(\"button\",{\"data-nextjs-devtools-panel-header-tab\":\"route\"===p,onClick:function(){return h(\"route\")},children:\"Route Info\"}),(0,y.jsx)(\"button\",{\"data-nextjs-devtools-panel-header-tab\":\"settings\"===p,onClick:function(){return h(\"settings\")},children:\"Settings\"})]}),(0,y.jsxs)(\"div\",{\"data-nextjs-devtools-panel-header-action-button-group\":!0,children:[(0,y.jsx)(\"button\",{\"data-nextjs-devtools-panel-header-action-button\":!0,onClick:function(){v(function(e){return!e}),s({type:I})},children:m?(0,y.jsx)(o1,{width:16,height:16}):(0,y.jsx)(o0,{width:16,height:16})}),(0,y.jsx)(\"button\",{\"data-nextjs-devtools-panel-header-action-button\":!0,onClick:S,children:(0,y.jsx)(oH,{width:16,height:16})})]})]})}),(0,y.jsx)(eY,{\"data-nextjs-devtools-panel-dialog-body\":!0,children:(0,y.jsx)(oI,{page:l.page,activeTab:p,devToolsPosition:l.devToolsPosition,scale:l.scale,routerType:l.routerType,handlePositionChange:function(e){s({type:Y,devToolsPosition:e.target.value}),localStorage.setItem(G,e.target.value)},handleScaleChange:function(e){s({type:X,scale:Number(e.target.value)}),localStorage.setItem(J,e.target.value)},debugInfo:l.debugInfo,runtimeErrors:u,getSquashedHydrationErrorDetails:d,buildError:l.buildError})})]}),(0,y.jsx)(r2,{versionInfo:l.versionInfo,isDraggable:!m,showRestartServerButton:l.showRestartServerButton})]}),!m&&(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(at,{direction:\"top\"}),(0,y.jsx)(at,{direction:\"right\"}),(0,y.jsx)(at,{direction:\"bottom\"}),(0,y.jsx)(at,{direction:\"left\"}),(0,y.jsx)(at,{direction:\"top-left\"}),(0,y.jsx)(at,{direction:\"top-right\"}),(0,y.jsx)(at,{direction:\"bottom-left\"}),(0,y.jsx)(at,{direction:\"bottom-right\"})]})]})})]})})}var ac=ei(al());function au(){var e,n,t=(e=[\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n        \",\"\\n      \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return au=function(){return t},t}function ad(){return(0,y.jsx)(\"style\",{children:ei(au(),\"\\n  .nextjs-data-copy-button {\\n    color: inherit;\\n\\n    svg {\\n      width: var(--size-16);\\n      height: var(--size-16);\\n    }\\n  }\\n  .nextjs-data-copy-button:disabled {\\n    background-color: var(--color-gray-100);\\n    cursor: not-allowed;\\n  }\\n  .nextjs-data-copy-button--initial:hover:not(:disabled) {\\n    cursor: pointer;\\n  }\\n  .nextjs-data-copy-button--error:not(:disabled),\\n  .nextjs-data-copy-button--error:hover:not(:disabled) {\\n    color: var(--color-ansi-red);\\n  }\\n  .nextjs-data-copy-button--success:not(:disabled) {\\n    color: var(--color-ansi-green);\\n  }\\n\",'\\n  [data-nextjs-call-stack-frame-no-source] {\\n    padding: 6px 8px;\\n    margin-bottom: 4px;\\n\\n    border-radius: var(--rounded-lg);\\n  }\\n\\n  [data-nextjs-call-stack-frame-no-source]:last-child {\\n    margin-bottom: 0;\\n  }\\n\\n  [data-nextjs-call-stack-frame-ignored=\"true\"] {\\n    opacity: 0.6;\\n  }\\n\\n  [data-nextjs-call-stack-frame] {\\n    user-select: text;\\n    display: block;\\n    box-sizing: border-box;\\n\\n    user-select: text;\\n    -webkit-user-select: text;\\n    -moz-user-select: text;\\n    -ms-user-select: text;\\n\\n    padding: 6px 8px;\\n\\n    border-radius: var(--rounded-lg);\\n  }\\n\\n  .call-stack-frame-method-name {\\n    display: flex;\\n    align-items: center;\\n    gap: 4px;\\n\\n    margin-bottom: 4px;\\n    font-family: var(--font-stack-monospace);\\n\\n    color: var(--color-gray-1000);\\n    font-size: var(--size-14);\\n    font-weight: 500;\\n    line-height: var(--size-20);\\n\\n    svg {\\n      width: var(--size-16px);\\n      height: var(--size-16px);\\n    }\\n  }\\n\\n  .open-in-editor-button, .source-mapping-error-button {\\n    display: flex;\\n    align-items: center;\\n    justify-content: center;\\n    border-radius: var(--rounded-full);\\n    padding: 4px;\\n    color: var(--color-font);\\n\\n    svg {\\n      width: var(--size-16);\\n      height: var(--size-16);\\n    }\\n\\n    &:focus-visible {\\n      outline: var(--focus-ring);\\n      outline-offset: -2px;\\n    }\\n\\n    &:hover {\\n      background: var(--color-gray-100);\\n    }\\n  }\\n\\n  .call-stack-frame-file-source {\\n    color: var(--color-gray-900);\\n    font-size: var(--size-14);\\n    line-height: var(--size-20);\\n  }\\n',ts,\"\\n  [data-nextjs-environment-name-label] {\\n    padding: 2px 6px;\\n    margin: 0;\\n    border-radius: var(--rounded-md-2);\\n    background: var(--color-gray-100);\\n    font-weight: 600;\\n    font-size: var(--size-12);\\n    color: var(--color-gray-900);\\n    font-family: var(--font-stack-monospace);\\n    line-height: var(--size-20);\\n  }\\n\",\"\\n  [data-nextjs-dialog-overlay] {\\n    position: fixed;\\n    top: 0;\\n    right: 0;\\n    bottom: 0;\\n    left: 0;\\n    /* secondary z-index, -1 than toast z-index */\\n    z-index: 2147483646;\\n\\n    display: flex;\\n    align-content: center;\\n    align-items: center;\\n    flex-direction: column;\\n    padding: 10vh 15px 0;\\n  }\\n\\n  @media (max-height: 812px) {\\n    [data-nextjs-dialog-overlay] {\\n      padding: 15px 15px 0;\\n    }\\n  }\\n\\n  [data-nextjs-dialog-backdrop] {\\n    position: fixed;\\n    top: 0;\\n    right: 0;\\n    bottom: 0;\\n    left: 0;\\n    background-color: var(--color-backdrop);\\n    backdrop-filter: blur(10px);\\n    pointer-events: all;\\n    z-index: -1;\\n  }\\n\\n  [data-nextjs-dialog-backdrop-fixed] {\\n    cursor: not-allowed;\\n    -webkit-backdrop-filter: blur(8px);\\n    backdrop-filter: blur(8px);\\n  }\\n\",eG,n8,nE,\"\\n  .error-overlay-bottom-stack-layer {\\n    width: 100%;\\n    height: var(--stack-layer-height);\\n    position: relative;\\n    border: 1px solid var(--color-gray-400);\\n    border-radius: var(--rounded-xl);\\n    background: var(--color-background-200);\\n    transition:\\n      translate 350ms var(--timing-swift),\\n      box-shadow 350ms var(--timing-swift);\\n  }\\n\\n  .error-overlay-bottom-stack-layer-1 {\\n    width: calc(100% - var(--size-24));\\n  }\\n\\n  .error-overlay-bottom-stack-layer-2 {\\n    width: calc(100% - var(--size-48));\\n    z-index: -1;\\n  }\\n\\n  .error-overlay-bottom-stack {\\n    width: 100%;\\n    position: absolute;\\n    bottom: -1px;\\n    height: 0;\\n    overflow: visible;\\n  }\\n\\n  .error-overlay-bottom-stack-stack {\\n    --stack-layer-height: 44px;\\n    --stack-layer-height-half: calc(var(--stack-layer-height) / 2);\\n    --stack-layer-trim: 13px;\\n    --shadow: 0px 0.925px 0.925px 0px rgba(0, 0, 0, 0.02),\\n      0px 3.7px 7.4px -3.7px rgba(0, 0, 0, 0.04),\\n      0px 14.8px 22.2px -7.4px rgba(0, 0, 0, 0.06);\\n\\n    display: grid;\\n    place-items: center center;\\n    width: 100%;\\n    position: fixed;\\n    overflow: hidden;\\n    z-index: -1;\\n    max-width: var(--next-dialog-max-width);\\n\\n    .error-overlay-bottom-stack-layer {\\n      grid-area: 1 / 1;\\n      /* Hide */\\n      translate: 0 calc(var(--stack-layer-height) * -1);\\n    }\\n\\n    &[data-stack-count='1'],\\n    &[data-stack-count='2'] {\\n      .error-overlay-bottom-stack-layer-1 {\\n        translate: 0\\n          calc(var(--stack-layer-height-half) * -1 - var(--stack-layer-trim));\\n      }\\n    }\\n\\n    &[data-stack-count='2'] {\\n      .error-overlay-bottom-stack-layer-2 {\\n        translate: 0 calc(var(--stack-layer-trim) * -1 * 2);\\n      }\\n    }\\n\\n    /* Only the bottom stack should have the shadow */\\n    &[data-stack-count='1'] .error-overlay-bottom-stack-layer-1 {\\n      box-shadow: var(--shadow);\\n    }\\n\\n    &[data-stack-count='2'] {\\n      .error-overlay-bottom-stack-layer-2 {\\n        box-shadow: var(--shadow);\\n      }\\n    }\\n  }\\n\",\"\\n  .error-overlay-pagination {\\n    -webkit-font-smoothing: antialiased;\\n    display: flex;\\n    justify-content: center;\\n    align-items: center;\\n    gap: 8px;\\n    width: fit-content;\\n  }\\n\\n  .error-overlay-pagination-count {\\n    color: var(--color-gray-900);\\n    text-align: center;\\n    font-size: var(--size-14);\\n    font-weight: 500;\\n    line-height: var(--size-16);\\n    font-variant-numeric: tabular-nums;\\n  }\\n\\n  .error-overlay-pagination-button {\\n    display: flex;\\n    justify-content: center;\\n    align-items: center;\\n\\n    width: var(--size-24);\\n    height: var(--size-24);\\n    background: var(--color-gray-300);\\n    flex-shrink: 0;\\n\\n    border: none;\\n    border-radius: var(--rounded-full);\\n\\n    svg {\\n      width: var(--size-16);\\n      height: var(--size-16);\\n    }\\n\\n    &:focus-visible {\\n      outline: var(--focus-ring);\\n    }\\n\\n    &:not(:disabled):active {\\n      background: var(--color-gray-500);\\n    }\\n\\n    &:disabled {\\n      opacity: 0.5;\\n      cursor: not-allowed;\\n    }\\n  }\\n\\n  .error-overlay-pagination-button-icon {\\n    color: var(--color-gray-1000);\\n  }\\n\",'\\n  [data-nextjs-codeframe] {\\n    --code-frame-padding: 12px;\\n    --code-frame-line-height: var(--size-16);\\n    background-color: var(--color-background-200);\\n    color: var(--color-gray-1000);\\n    text-overflow: ellipsis;\\n    border: 1px solid var(--color-gray-400);\\n    border-radius: 8px;\\n    font-family: var(--font-stack-monospace);\\n    font-size: var(--size-12);\\n    line-height: var(--code-frame-line-height);\\n    margin: 8px 0;\\n\\n    svg {\\n      width: var(--size-16);\\n      height: var(--size-16);\\n    }\\n  }\\n\\n  .code-frame-link,\\n  .code-frame-pre {\\n    padding: var(--code-frame-padding);\\n  }\\n\\n  .code-frame-link svg {\\n    flex-shrink: 0;\\n  }\\n\\n  .code-frame-lines {\\n    min-width: max-content;\\n  }\\n\\n  .code-frame-link [data-text] {\\n    display: inline-flex;\\n    text-align: left;\\n    margin: auto 6px;\\n  }\\n\\n  .code-frame-header {\\n    width: 100%;\\n    transition: background 100ms ease-out;\\n    border-radius: 8px 8px 0 0;\\n    border-bottom: 1px solid var(--color-gray-400);\\n  }\\n\\n  [data-with-open-in-editor-link-source-file] {\\n    padding: 4px;\\n    margin: -4px 0 -4px auto;\\n    border-radius: var(--rounded-full);\\n    margin-left: auto;\\n\\n    &:focus-visible {\\n      outline: var(--focus-ring);\\n      outline-offset: -2px;\\n    }\\n\\n    &:hover {\\n      background: var(--color-gray-100);\\n    }\\n  }\\n\\n  [data-nextjs-codeframe]::selection,\\n  [data-nextjs-codeframe] *::selection {\\n    background-color: var(--color-ansi-selection);\\n  }\\n\\n  [data-nextjs-codeframe] *:not(a) {\\n    color: inherit;\\n    background-color: transparent;\\n    font-family: var(--font-stack-monospace);\\n  }\\n\\n  [data-nextjs-codeframe-line][data-nextjs-codeframe-line--errored=\"true\"] {\\n    position: relative;\\n    isolation: isolate;\\n\\n    > span { \\n      position: relative;\\n      z-index: 1;\\n    }\\n\\n    &::after {\\n      content: \"\";\\n      width: calc(100% + var(--code-frame-padding) * 2);\\n      height: var(--code-frame-line-height);\\n      left: calc(-1 * var(--code-frame-padding));\\n      background: var(--color-red-200);\\n      box-shadow: 2px 0 0 0 var(--color-red-900) inset;\\n      position: absolute;\\n    }\\n  }\\n\\n\\n  [data-nextjs-codeframe] > * {\\n    margin: 0;\\n  }\\n\\n  .code-frame-link {\\n    display: flex;\\n    margin: 0;\\n    outline: 0;\\n  }\\n  .code-frame-link [data-icon=\\'right\\'] {\\n    margin-left: auto;\\n  }\\n\\n  [data-nextjs-codeframe] div > pre {\\n    overflow: hidden;\\n    display: inline-block;\\n  }\\n\\n  [data-nextjs-codeframe] svg {\\n    color: var(--color-gray-900);\\n  }\\n',\"\\n  [data-nextjs-terminal]::selection,\\n  [data-nextjs-terminal] *::selection {\\n    background-color: var(--color-ansi-selection);\\n  }\\n\\n  [data-nextjs-terminal] * {\\n    color: inherit;\\n    background-color: transparent;\\n    font-family: var(--font-stack-monospace);\\n  }\\n\\n  [data-nextjs-terminal] > div > p {\\n    display: flex;\\n    align-items: center;\\n    justify-content: space-between;\\n    cursor: pointer;\\n    margin: 0;\\n  }\\n  [data-nextjs-terminal] > div > p:hover {\\n    text-decoration: underline dotted;\\n  }\\n  [data-nextjs-terminal] div > pre {\\n    overflow: hidden;\\n    display: inline-block;\\n  }\\n\",\"\\n  [data-with-open-in-editor-link] svg {\\n    width: auto;\\n    height: var(--size-14);\\n    margin-left: 8px;\\n  }\\n  [data-with-open-in-editor-link] {\\n    cursor: pointer;\\n  }\\n  [data-with-open-in-editor-link]:hover {\\n    text-decoration: underline dotted;\\n  }\\n  [data-with-open-in-editor-link-import-trace] {\\n    margin-left: 16px;\\n  }\\n\",\"\",\"\\n  .nextjs-error-with-static {\\n    bottom: calc(16px * 4.5);\\n  }\\n  p.nextjs__container_errors__link {\\n    font-size: var(--size-14);\\n  }\\n  p.nextjs__container_errors__notes {\\n    color: var(--color-stack-notes);\\n    font-size: var(--size-14);\\n    line-height: 1.5;\\n  }\\n  .nextjs-container-errors-body > h2:not(:first-child) {\\n    margin-top: calc(16px + 8px);\\n  }\\n  .nextjs-container-errors-body > h2 {\\n    color: var(--color-title-color);\\n    margin-bottom: 8px;\\n    font-size: var(--size-20);\\n  }\\n  .nextjs-toast-errors-parent {\\n    cursor: pointer;\\n    transition: transform 0.2s ease;\\n  }\\n  .nextjs-toast-errors-parent:hover {\\n    transform: scale(1.1);\\n  }\\n  .nextjs-toast-errors {\\n    display: flex;\\n    align-items: center;\\n    justify-content: flex-start;\\n  }\\n  .nextjs-toast-errors > svg {\\n    margin-right: 8px;\\n  }\\n  .nextjs-toast-hide-button {\\n    margin-left: 24px;\\n    border: none;\\n    background: none;\\n    color: var(--color-ansi-bright-white);\\n    padding: 0;\\n    transition: opacity 0.25s ease;\\n    opacity: 0.7;\\n  }\\n  .nextjs-toast-hide-button:hover {\\n    opacity: 1;\\n  }\\n  .nextjs__container_errors__error_title {\\n    display: flex;\\n    align-items: center;\\n    justify-content: space-between;\\n    margin-bottom: 14px;\\n  }\\n  .error-overlay-notes-container {\\n    margin: 8px 2px;\\n  }\\n  .error-overlay-notes-container p {\\n    white-space: pre-wrap;\\n  }\\n\",tA,\"\\n  .nextjs-container-build-error-version-status {\\n    -webkit-font-smoothing: antialiased;\\n    display: flex;\\n    justify-content: center;\\n    align-items: center;\\n    gap: 4px;\\n\\n    height: var(--size-26);\\n    padding: 6px 8px 6px 6px;\\n    background: var(--color-background-100);\\n    background-clip: padding-box;\\n    border: 1px solid var(--color-gray-alpha-400);\\n    box-shadow: var(--shadow-small);\\n    border-radius: var(--rounded-full);\\n\\n    color: var(--color-gray-900);\\n    font-size: var(--size-12);\\n    font-weight: 500;\\n    line-height: var(--size-16);\\n  }\\n\\n  a.nextjs-container-build-error-version-status {\\n    text-decoration: none;\\n    color: var(--color-gray-900);\\n\\n    &:hover {\\n      background: var(--color-gray-100);\\n    }\\n\\n    &:focus {\\n      outline: var(--focus-ring);\\n    }\\n  }\\n\\n  .version-staleness-indicator.fresh {\\n    fill: var(--color-green-800);\\n    stroke: var(--color-green-300);\\n  }\\n  .version-staleness-indicator.stale {\\n    fill: var(--color-amber-800);\\n    stroke: var(--color-amber-300);\\n  }\\n  .version-staleness-indicator.outdated {\\n    fill: var(--color-red-800);\\n    stroke: var(--color-red-300);\\n  }\\n  .version-staleness-indicator.unknown {\\n    fill: var(--color-gray-800);\\n    stroke: var(--color-gray-300);\\n  }\\n\\n  .nextjs-container-build-error-version-status > .turbopack-text {\\n    background: linear-gradient(\\n      to right,\\n      var(--color-turbopack-text-red) 0%,\\n      var(--color-turbopack-text-blue) 100%\\n    );\\n    background-clip: text;\\n    -webkit-background-clip: text;\\n    -webkit-text-fill-color: transparent;\\n  }\\n\",\"\\n  .restart-dev-server-button {\\n    -webkit-font-smoothing: antialiased;\\n    display: flex;\\n    justify-content: center;\\n    align-items: center;\\n    gap: 4px;\\n    margin: 0 12px;\\n\\n    height: var(--size-26);\\n    padding: 6px 8px 6px 6px;\\n    background: var(--color-amber-100);\\n    background-clip: padding-box;\\n    border: 1px solid var(--color-gray-alpha-400);\\n    box-shadow: var(--shadow-small);\\n    border-radius: var(--rounded-full);\\n\\n    color: var(--color-amber-900);\\n    font-size: var(--size-12);\\n    font-weight: 500;\\n    line-height: var(--size-16);\\n  }\\n\",\"\\n  [data-nextjs-toast] {\\n    &[data-hidden='true'] {\\n      display: none;\\n    }\\n  }\\n\\n  .dev-tools-indicator-menu {\\n    -webkit-font-smoothing: antialiased;\\n    display: flex;\\n    flex-direction: column;\\n    align-items: flex-start;\\n    background: var(--color-background-100);\\n    border: 1px solid var(--color-gray-alpha-400);\\n    background-clip: padding-box;\\n    box-shadow: var(--shadow-menu);\\n    border-radius: var(--rounded-xl);\\n    position: absolute;\\n    font-family: var(--font-stack-sans);\\n    z-index: 3;\\n    overflow: hidden;\\n    opacity: 0;\\n    outline: 0;\\n    min-width: 248px;\\n    transition: opacity var(--animate-out-duration-ms)\\n      var(--animate-out-timing-function);\\n\\n    &[data-rendered='true'] {\\n      opacity: 1;\\n      scale: 1;\\n    }\\n  }\\n\\n  .dev-tools-indicator-inner {\\n    padding: 6px;\\n    width: 100%;\\n  }\\n\\n  .dev-tools-indicator-item {\\n    display: flex;\\n    align-items: center;\\n    padding: 8px 6px;\\n    height: var(--size-36);\\n    border-radius: 6px;\\n    text-decoration: none !important;\\n    user-select: none;\\n    white-space: nowrap;\\n\\n    svg {\\n      width: var(--size-16);\\n      height: var(--size-16);\\n    }\\n\\n    &:focus-visible {\\n      outline: 0;\\n    }\\n  }\\n\\n  .dev-tools-indicator-footer {\\n    background: var(--color-background-200);\\n    padding: 6px;\\n    border-top: 1px solid var(--color-gray-400);\\n    width: 100%;\\n  }\\n\\n  .dev-tools-indicator-item[data-selected='true'] {\\n    cursor: pointer;\\n    background-color: var(--color-gray-200);\\n  }\\n\\n  .dev-tools-indicator-label {\\n    font-size: var(--size-14);\\n    line-height: var(--size-20);\\n    color: var(--color-gray-1000);\\n  }\\n\\n  .dev-tools-indicator-value {\\n    font-size: var(--size-14);\\n    line-height: var(--size-20);\\n    color: var(--color-gray-900);\\n    margin-left: auto;\\n  }\\n\\n  .dev-tools-indicator-issue-count {\\n    --color-primary: var(--color-gray-800);\\n    --color-secondary: var(--color-gray-100);\\n    display: flex;\\n    flex-direction: row;\\n    align-items: center;\\n    justify-content: center;\\n    gap: 8px;\\n    min-width: var(--size-40);\\n    height: var(--size-24);\\n    background: var(--color-background-100);\\n    border: 1px solid var(--color-gray-alpha-400);\\n    background-clip: padding-box;\\n    box-shadow: var(--shadow-small);\\n    padding: 2px;\\n    color: var(--color-gray-1000);\\n    border-radius: 128px;\\n    font-weight: 500;\\n    font-size: var(--size-13);\\n    font-variant-numeric: tabular-nums;\\n\\n    &[data-has-issues='true'] {\\n      --color-primary: var(--color-red-800);\\n      --color-secondary: var(--color-red-100);\\n    }\\n\\n    .dev-tools-indicator-issue-count-indicator {\\n      width: var(--size-8);\\n      height: var(--size-8);\\n      background: var(--color-primary);\\n      box-shadow: 0 0 0 2px var(--color-secondary);\\n      border-radius: 50%;\\n    }\\n  }\\n\\n  .dev-tools-indicator-shortcut {\\n    display: flex;\\n    gap: 4px;\\n\\n    kbd {\\n      width: var(--size-20);\\n      height: var(--size-20);\\n      display: flex;\\n      justify-content: center;\\n      align-items: center;\\n      border-radius: var(--rounded-md);\\n      border: 1px solid var(--color-gray-400);\\n      font-family: var(--font-stack-sans);\\n      background: var(--color-background-100);\\n      color: var(--color-gray-1000);\\n      text-align: center;\\n      font-size: var(--size-12);\\n      line-height: var(--size-16);\\n    }\\n  }\\n\\n  .dev-tools-grabbing {\\n    cursor: grabbing;\\n\\n    > * {\\n      pointer-events: none;\\n    }\\n  }\\n\",t0.g,\"\\n  .dev-tools-info-code {\\n    background: var(--color-gray-400);\\n    color: var(--color-gray-1000);\\n    font-family: var(--font-stack-monospace);\\n    padding: 2px 4px;\\n    margin: 0;\\n    font-size: var(--size-13);\\n    white-space: break-spaces;\\n    border-radius: var(--rounded-md-2);\\n  }\\n\\n  .dev-tools-info-code-block-container {\\n    padding: 6px;\\n  }\\n\\n  .dev-tools-info-code-block {\\n    position: relative;\\n    background: var(--color-background-200);\\n    border: 1px solid var(--color-gray-alpha-400);\\n    border-radius: var(--rounded-md-2);\\n    min-width: 326px;\\n  }\\n\\n  .dev-tools-info-code-block-pre {\\n    margin: 0;\\n    font-family: var(--font-stack-monospace);\\n    font-size: var(--size-12);\\n  }\\n\\n  .dev-tools-info-copy-button {\\n    position: absolute;\\n\\n    display: flex;\\n    justify-content: center;\\n    align-items: center;\\n    right: 8px;\\n    top: 8px;\\n    padding: 4px;\\n    height: var(--size-24);\\n    width: var(--size-24);\\n    border-radius: var(--rounded-md-2);\\n    border: 1px solid var(--color-gray-alpha-400);\\n    background: var(--color-background-100);\\n  }\\n\\n  .dev-tools-info-code-block-line {\\n    display: block;\\n    line-height: 1.5;\\n    padding: 0 16px;\\n  }\\n\\n  .dev-tools-info-code-block-line.dev-tools-info-highlight {\\n    border-left: 2px solid var(--color-blue-900);\\n    background: var(--color-blue-400);\\n  }\\n\\n  .dev-tools-info-code-block-json-key {\\n    color: var(--color-syntax-keyword);\\n  }\\n\\n  .dev-tools-info-code-block-json-value {\\n    color: var(--color-syntax-link);\\n  }\\n\",\"\",rS,'\\n  .nextjs-scroll-fader {\\n    --blur: 1px;\\n    --stop: 25%;\\n    --height: 150px;\\n    --color-bg: var(--color-background-100);\\n    position: absolute;\\n    pointer-events: none;\\n    user-select: none;\\n    width: 100%;\\n    height: var(--height);\\n    left: 0;\\n    backdrop-filter: blur(var(--blur));\\n\\n    &[data-side=\"top\"] {\\n      top: 0;\\n      background: linear-gradient(to top, transparent, var(--color-bg));\\n      mask-image: linear-gradient(to bottom, var(--color-bg) var(--stop), transparent);\\n    }\\n  }\\n',ac,r4,r0,on,oN,oO,oc,oo,oL,ow,ob,of,rm)})}function af(){var e,n,t=(e=[\"\\n        :host {\\n          all: initial;\\n\\n          /* the direction property is not reset by 'all' */\\n          direction: ltr;\\n        }\\n\\n        /*!\\n         * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)\\n         * Copyright 2011-2019 The Bootstrap Authors\\n         * Copyright 2011-2019 Twitter, Inc.\\n         * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\\n         * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\\n         */\\n        *,\\n        *::before,\\n        *::after {\\n          box-sizing: border-box;\\n        }\\n\\n        :host {\\n          font-family: sans-serif;\\n          line-height: 1.15;\\n          -webkit-text-size-adjust: 100%;\\n          -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\n        }\\n\\n        article,\\n        aside,\\n        figcaption,\\n        figure,\\n        footer,\\n        header,\\n        hgroup,\\n        main,\\n        nav,\\n        section {\\n          display: block;\\n        }\\n\\n        :host {\\n          margin: 0;\\n          font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,\\n            'Helvetica Neue', Arial, 'Noto Sans', sans-serif,\\n            'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\\n            'Noto Color Emoji';\\n          font-size: 16px;\\n          font-weight: 400;\\n          line-height: 1.5;\\n          color: var(--color-font);\\n          text-align: left;\\n        }\\n\\n        :host:not(button) {\\n          background-color: #fff;\\n        }\\n\\n        [tabindex='-1']:focus:not(:focus-visible) {\\n          outline: 0 !important;\\n        }\\n\\n        hr {\\n          box-sizing: content-box;\\n          height: 0;\\n          overflow: visible;\\n        }\\n\\n        h1,\\n        h2,\\n        h3,\\n        h4,\\n        h5,\\n        h6 {\\n          margin-top: 0;\\n          margin-bottom: 8px;\\n        }\\n\\n        p {\\n          margin-top: 0;\\n          margin-bottom: 16px;\\n        }\\n\\n        abbr[title],\\n        abbr[data-original-title] {\\n          text-decoration: underline;\\n          -webkit-text-decoration: underline dotted;\\n          text-decoration: underline dotted;\\n          cursor: help;\\n          border-bottom: 0;\\n          -webkit-text-decoration-skip-ink: none;\\n          text-decoration-skip-ink: none;\\n        }\\n\\n        address {\\n          margin-bottom: 16px;\\n          font-style: normal;\\n          line-height: inherit;\\n        }\\n\\n        ol,\\n        ul,\\n        dl {\\n          margin-top: 0;\\n          margin-bottom: 16px;\\n        }\\n\\n        ol ol,\\n        ul ul,\\n        ol ul,\\n        ul ol {\\n          margin-bottom: 0;\\n        }\\n\\n        dt {\\n          font-weight: 700;\\n        }\\n\\n        dd {\\n          margin-bottom: 8px;\\n          margin-left: 0;\\n        }\\n\\n        blockquote {\\n          margin: 0 0 16px;\\n        }\\n\\n        b,\\n        strong {\\n          font-weight: bolder;\\n        }\\n\\n        small {\\n          font-size: 80%;\\n        }\\n\\n        sub,\\n        sup {\\n          position: relative;\\n          font-size: 75%;\\n          line-height: 0;\\n          vertical-align: baseline;\\n        }\\n\\n        sub {\\n          bottom: -0.25em;\\n        }\\n\\n        sup {\\n          top: -0.5em;\\n        }\\n\\n        a {\\n          color: #007bff;\\n          text-decoration: none;\\n          background-color: transparent;\\n        }\\n\\n        a:hover {\\n          color: #0056b3;\\n          text-decoration: underline;\\n        }\\n\\n        a:not([href]) {\\n          color: inherit;\\n          text-decoration: none;\\n        }\\n\\n        a:not([href]):hover {\\n          color: inherit;\\n          text-decoration: none;\\n        }\\n\\n        pre,\\n        code,\\n        kbd,\\n        samp {\\n          font-family: SFMono-Regular, Menlo, Monaco, Consolas,\\n            'Liberation Mono', 'Courier New', monospace;\\n          font-size: 1em;\\n        }\\n\\n        pre {\\n          margin-top: 0;\\n          margin-bottom: 16px;\\n          overflow: auto;\\n        }\\n\\n        figure {\\n          margin: 0 0 16px;\\n        }\\n\\n        img {\\n          vertical-align: middle;\\n          border-style: none;\\n        }\\n\\n        svg {\\n          overflow: hidden;\\n          vertical-align: middle;\\n        }\\n\\n        table {\\n          border-collapse: collapse;\\n        }\\n\\n        caption {\\n          padding-top: 12px;\\n          padding-bottom: 12px;\\n          color: #6c757d;\\n          text-align: left;\\n          caption-side: bottom;\\n        }\\n\\n        th {\\n          text-align: inherit;\\n        }\\n\\n        label {\\n          display: inline-block;\\n          margin-bottom: 8px;\\n        }\\n\\n        button {\\n          border-radius: 0;\\n          border: 0;\\n          padding: 0;\\n          margin: 0;\\n          background: none;\\n          appearance: none;\\n          -webkit-appearance: none;\\n        }\\n\\n        button:focus {\\n          outline: 1px dotted;\\n          outline: 5px auto -webkit-focus-ring-color;\\n        }\\n\\n        button:focus:not(:focus-visible) {\\n          outline: none;\\n        }\\n\\n        input,\\n        button,\\n        select,\\n        optgroup,\\n        textarea {\\n          margin: 0;\\n          font-family: inherit;\\n          font-size: inherit;\\n          line-height: inherit;\\n        }\\n\\n        button,\\n        input {\\n          overflow: visible;\\n        }\\n\\n        button,\\n        select {\\n          text-transform: none;\\n        }\\n\\n        select {\\n          word-wrap: normal;\\n        }\\n\\n        button,\\n        [type='button'],\\n        [type='reset'],\\n        [type='submit'] {\\n          -webkit-appearance: button;\\n        }\\n\\n        button:not(:disabled),\\n        [type='button']:not(:disabled),\\n        [type='reset']:not(:disabled),\\n        [type='submit']:not(:disabled) {\\n          cursor: pointer;\\n        }\\n\\n        button::-moz-focus-inner,\\n        [type='button']::-moz-focus-inner,\\n        [type='reset']::-moz-focus-inner,\\n        [type='submit']::-moz-focus-inner {\\n          padding: 0;\\n          border-style: none;\\n        }\\n\\n        input[type='radio'],\\n        input[type='checkbox'] {\\n          box-sizing: border-box;\\n          padding: 0;\\n        }\\n\\n        input[type='date'],\\n        input[type='time'],\\n        input[type='datetime-local'],\\n        input[type='month'] {\\n          -webkit-appearance: listbox;\\n        }\\n\\n        textarea {\\n          overflow: auto;\\n          resize: vertical;\\n        }\\n\\n        fieldset {\\n          min-width: 0;\\n          padding: 0;\\n          margin: 0;\\n          border: 0;\\n        }\\n\\n        legend {\\n          display: block;\\n          width: 100%;\\n          max-width: 100%;\\n          padding: 0;\\n          margin-bottom: 8px;\\n          font-size: 24px;\\n          line-height: inherit;\\n          color: inherit;\\n          white-space: normal;\\n        }\\n\\n        progress {\\n          vertical-align: baseline;\\n        }\\n\\n        [type='number']::-webkit-inner-spin-button,\\n        [type='number']::-webkit-outer-spin-button {\\n          height: auto;\\n        }\\n\\n        [type='search'] {\\n          outline-offset: -2px;\\n          -webkit-appearance: none;\\n        }\\n\\n        [type='search']::-webkit-search-decoration {\\n          -webkit-appearance: none;\\n        }\\n\\n        ::-webkit-file-upload-button {\\n          font: inherit;\\n          -webkit-appearance: button;\\n        }\\n\\n        output {\\n          display: inline-block;\\n        }\\n\\n        summary {\\n          display: list-item;\\n          cursor: pointer;\\n        }\\n\\n        template {\\n          display: none;\\n        }\\n\\n        [hidden] {\\n          display: none !important;\\n        }\\n      \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return af=function(){return t},t}function ap(){return(0,y.jsx)(\"style\",{children:ei(af())})}function ah(){var e,n,t=(e=['\\n        :host {\\n          /* \\n           * CAUTION: THIS IS A WORKAROUND!\\n           * For now, we use @babel/code-frame to parse the code frame which does not support option to change the color.\\n           * x-ref: https://github.com/babel/babel/blob/efa52324ff835b794c48080f14877b6caf32cd15/packages/babel-code-frame/src/defs.ts#L40-L54\\n           * So, we do a workaround mapping to change the color matching the theme.\\n           *\\n           * For example, in @babel/code-frame, the \"keyword\" is mapped to ANSI \"cyan\".\\n           * We want the \"keyword\" to use the \"syntax-keyword\" color in the theme.\\n           * So, we map the \"cyan\" to the \"syntax-keyword\" in the theme.\\n           */\\n          /* cyan: keyword */\\n          --color-ansi-cyan: var(--color-syntax-keyword);\\n          /* yellow: capitalized, jsxIdentifier, punctuation */\\n          --color-ansi-yellow: var(--color-syntax-function);\\n          /* magenta: number, regex */\\n          --color-ansi-magenta: var(--color-syntax-keyword);\\n          /* green: string */\\n          --color-ansi-green: var(--color-syntax-string);\\n          /* gray (bright black): comment, gutter */\\n          --color-ansi-bright-black: var(--color-syntax-comment);\\n\\n          /* Ansi - Temporary */\\n          --color-ansi-selection: var(--color-gray-alpha-300);\\n          --color-ansi-bg: var(--color-background-200);\\n          --color-ansi-fg: var(--color-gray-1000);\\n\\n          --color-ansi-white: var(--color-gray-700);\\n          --color-ansi-black: var(--color-gray-200);\\n          --color-ansi-blue: var(--color-blue-700);\\n          --color-ansi-red: var(--color-red-700);\\n          --color-ansi-bright-white: var(--color-gray-1000);\\n          --color-ansi-bright-blue: var(--color-blue-800);\\n          --color-ansi-bright-cyan: var(--color-blue-800);\\n          --color-ansi-bright-green: var(--color-green-800);\\n          --color-ansi-bright-magenta: var(--color-blue-800);\\n          --color-ansi-bright-red: var(--color-red-800);\\n          --color-ansi-bright-yellow: var(--color-amber-900);\\n\\n          /* Background Light */\\n          --color-background-100: #ffffff;\\n          --color-background-200: #fafafa;\\n\\n          /* Syntax Light */\\n          --color-syntax-comment: #545454;\\n          --color-syntax-constant: #171717;\\n          --color-syntax-function: #0054ad;\\n          --color-syntax-keyword: #a51850;\\n          --color-syntax-link: #066056;\\n          --color-syntax-parameter: #8f3e00;\\n          --color-syntax-punctuation: #171717;\\n          --color-syntax-string: #036157;\\n          --color-syntax-string-expression: #066056;\\n\\n          /* Gray Scale Light */\\n          --color-gray-100: #f2f2f2;\\n          --color-gray-200: #ebebeb;\\n          --color-gray-300: #e6e6e6;\\n          --color-gray-400: #eaeaea;\\n          --color-gray-500: #c9c9c9;\\n          --color-gray-600: #a8a8a8;\\n          --color-gray-700: #8f8f8f;\\n          --color-gray-800: #7d7d7d;\\n          --color-gray-900: #666666;\\n          --color-gray-1000: #171717;\\n\\n          /* Gray Alpha Scale Light */\\n          --color-gray-alpha-100: rgba(0, 0, 0, 0.05);\\n          --color-gray-alpha-200: rgba(0, 0, 0, 0.081);\\n          --color-gray-alpha-300: rgba(0, 0, 0, 0.1);\\n          --color-gray-alpha-400: rgba(0, 0, 0, 0.08);\\n          --color-gray-alpha-500: rgba(0, 0, 0, 0.21);\\n          --color-gray-alpha-600: rgba(0, 0, 0, 0.34);\\n          --color-gray-alpha-700: rgba(0, 0, 0, 0.44);\\n          --color-gray-alpha-800: rgba(0, 0, 0, 0.51);\\n          --color-gray-alpha-900: rgba(0, 0, 0, 0.605);\\n          --color-gray-alpha-1000: rgba(0, 0, 0, 0.91);\\n\\n          /* Blue Scale Light */\\n          --color-blue-100: #f0f7ff;\\n          --color-blue-200: #edf6ff;\\n          --color-blue-300: #e1f0ff;\\n          --color-blue-400: #cde7ff;\\n          --color-blue-500: #99ceff;\\n          --color-blue-600: #52aeff;\\n          --color-blue-700: #0070f3;\\n          --color-blue-800: #0060d1;\\n          --color-blue-900: #0067d6;\\n          --color-blue-1000: #0025ad;\\n\\n          /* Red Scale Light */\\n          --color-red-100: #fff0f0;\\n          --color-red-200: #ffebeb;\\n          --color-red-300: #ffe5e5;\\n          --color-red-400: #fdd8d8;\\n          --color-red-500: #f8baba;\\n          --color-red-600: #f87274;\\n          --color-red-700: #e5484d;\\n          --color-red-800: #da3036;\\n          --color-red-900: #ca2a30;\\n          --color-red-1000: #381316;\\n\\n          /* Amber Scale Light */\\n          --color-amber-100: #fff6e5;\\n          --color-amber-200: #fff4d5;\\n          --color-amber-300: #fef0cd;\\n          --color-amber-400: #ffddbf;\\n          --color-amber-500: #ffc96b;\\n          --color-amber-600: #f5b047;\\n          --color-amber-700: #ffb224;\\n          --color-amber-800: #ff990a;\\n          --color-amber-900: #a35200;\\n          --color-amber-1000: #4e2009;\\n\\n          /* Green Scale Light */\\n          --color-green-100: #effbef;\\n          --color-green-200: #eafaea;\\n          --color-green-300: #dcf6dc;\\n          --color-green-400: #c8f1c9;\\n          --color-green-500: #99e59f;\\n          --color-green-600: #6cda76;\\n          --color-green-700: #46a758;\\n          --color-green-800: #388e4a;\\n          --color-green-900: #297c3b;\\n          --color-green-1000: #18311e;\\n\\n          /* Turbopack Light - Temporary */\\n          --color-turbopack-text-red: #ff1e56;\\n          --color-turbopack-text-blue: #0096ff;\\n          --color-turbopack-border-red: #f0adbe;\\n          --color-turbopack-border-blue: #adccea;\\n          --color-turbopack-background-red: #fff7f9;\\n          --color-turbopack-background-blue: #f6fbff;\\n        }\\n      '],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return ah=function(){return t},t}function ag(){return(0,y.jsx)(\"style\",{children:ei(ah())})}function am(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}function av(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function ab(e){var n=e.state,t=e.dispatch,r=e.getSquashedHydrationErrorDetails,o=e.runtimeErrors,a=e.errorCount,i=!!false,l=(0,tJ.N)(n.isErrorOverlayOpen,{exitDelay:200}),s=l.mounted,c={rendered:l.rendered,transitionDurationMs:200,isTurbopack:i,versionInfo:n.versionInfo,errorCount:a};return null!==n.buildError?(0,y.jsx)(tr,av(am({},c),{message:n.buildError,rendered:!0})):o.length&&s?(0,y.jsx)(tT,av(am({},c),{debugInfo:n.debugInfo,getSquashedHydrationErrorDetails:r,runtimeErrors:o,onClose:function(){t({type:I})}})):(0,y.jsx)(x.Suspense,{})}function ay(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function ax(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function aw(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){ax(e,n,t[n])})}return e}function aj(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return ay(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return ay(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var ak=function(e){return e.state.buildError?(0,y.jsx)(aO,aw({},e)):(0,y.jsx)(aA,aw({},e))},aA=function(e){var n,t,r,o=e.children,a=e.state,i=e.isAppDir,l=e.dispatch,s=a.errors,c=aj((0,x.useState)({}),2),u=c[0],d=c[1],f=aj((0,x.useMemo)(function(){for(var e=[],n=null,t=0;t<s.length;++t){var r=s[t],o=r.id;if(o in u){e.push(u[o]);continue}n=r;break}return[e,n]},[s,u]),2),p=f[0],h=f[1];return t=(n={errors:s,dispatch:l}).errors,r=n.dispatch,(0,x.useEffect)(function(){var e,n,o=(null==(e=\"Webpack\")?void 0:e.toUpperCase())===\"TURBOPACK\"&&true,a=null==(n=t[0])?void 0:n.error;if(o&&a){var i=\"__next_error_overlay:\".concat(window.location.pathname,\":\").concat(a.message);r({type:K,showRestartServerButton:\"1\"===sessionStorage.getItem(i)});var l=function(){sessionStorage.setItem(i,\"1\")};return window.addEventListener(\"beforeunload\",l),function(){window.removeEventListener(\"beforeunload\",l)}}r({type:K,showRestartServerButton:!1})},[t,r]),(0,x.useEffect)(function(){if(null!=h){var e,n,t=!0;return(e=h,n=i,tb(function(){var t,r,o,a,i;return tw(this,function(l){switch(l.label){case 0:var s,c;if(t={id:e.id,runtime:!0,error:e.error,type:e.type},!(\"use\"in x))return[3,1];return r=tx(ty({},t),{frames:(c=(s=function(){return tb(function(){return tw(this,function(t){switch(t.label){case 0:return[4,eC(e.frames,tm(e.error),n)];case 1:return[2,t.sent()]}})})()})(),function(){return c})}),void 0!==e.componentStackFrames&&(r.componentStackFrames=e.componentStackFrames),[2,r];case 1:return a=[ty({},t)],i={},[4,eC(e.frames,tm(e.error),n)];case 2:return o=tx.apply(void 0,a.concat([(i.frames=l.sent(),i)])),void 0!==e.componentStackFrames&&(o.componentStackFrames=e.componentStackFrames),[2,o];case 3:return[2]}})})()).then(function(e){t&&d(function(n){var t,r;return t=aw({},n),r=null!=(r=ax({},e.id,e))?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):(function(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}),t})}),function(){t=!1}}},[h,i]),o({runtimeErrors:p,totalErrorCount:s.length})},aO=function(e){return(0,e.children)({runtimeErrors:[],totalErrorCount:1})};function aC(){var e,n,t=(e=[\"\\n      :host(.dark) {\\n        \",\"\\n        \",\"\\n      }\\n\\n      @media (prefers-color-scheme: dark) {\\n        :host(:not(.light)) {\\n          \",\"\\n          \",\"\\n        }\\n      }\\n    \"],n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}})));return aC=function(){return t},t}var aS=\"\\n  /* Background Dark */\\n  --color-background-100: #0a0a0a;\\n  --color-background-200: #000000;\\n\\n  /* Syntax Dark */\\n  --color-syntax-comment: #a0a0a0;\\n  --color-syntax-constant: #ededed;\\n  --color-syntax-function: #52a9ff;\\n  --color-syntax-keyword: #f76e99;\\n  --color-syntax-link: #0ac5b2;\\n  --color-syntax-parameter: #f1a10d;\\n  --color-syntax-punctuation: #ededed;\\n  --color-syntax-string: #0ac5b2;\\n  --color-syntax-string-expression: #0ac5b2;\\n\\n  /* Gray Scale Dark */\\n  --color-gray-100: #1a1a1a;\\n  --color-gray-200: #1f1f1f;\\n  --color-gray-300: #292929;\\n  --color-gray-400: #2e2e2e;\\n  --color-gray-500: #454545;\\n  --color-gray-600: #878787;\\n  --color-gray-700: #8f8f8f;\\n  --color-gray-800: #7d7d7d;\\n  --color-gray-900: #a0a0a0;\\n  --color-gray-1000: #ededed;\\n\\n  /* Gray Alpha Scale Dark */\\n  --color-gray-alpha-100: rgba(255, 255, 255, 0.066);\\n  --color-gray-alpha-200: rgba(255, 255, 255, 0.087);\\n  --color-gray-alpha-300: rgba(255, 255, 255, 0.125);\\n  --color-gray-alpha-400: rgba(255, 255, 255, 0.145);\\n  --color-gray-alpha-500: rgba(255, 255, 255, 0.239);\\n  --color-gray-alpha-600: rgba(255, 255, 255, 0.506);\\n  --color-gray-alpha-700: rgba(255, 255, 255, 0.54);\\n  --color-gray-alpha-800: rgba(255, 255, 255, 0.47);\\n  --color-gray-alpha-900: rgba(255, 255, 255, 0.61);\\n  --color-gray-alpha-1000: rgba(255, 255, 255, 0.923);\\n\\n  /* Blue Scale Dark */\\n  --color-blue-100: #0f1b2d;\\n  --color-blue-200: #10243e;\\n  --color-blue-300: #0f3058;\\n  --color-blue-400: #0d3868;\\n  --color-blue-500: #0a4481;\\n  --color-blue-600: #0091ff;\\n  --color-blue-700: #0070f3;\\n  --color-blue-800: #0060d1;\\n  --color-blue-900: #52a9ff;\\n  --color-blue-1000: #eaf6ff;\\n\\n  /* Red Scale Dark */\\n  --color-red-100: #2a1314;\\n  --color-red-200: #3d1719;\\n  --color-red-300: #551a1e;\\n  --color-red-400: #671e22;\\n  --color-red-500: #822025;\\n  --color-red-600: #e5484d;\\n  --color-red-700: #e5484d;\\n  --color-red-800: #da3036;\\n  --color-red-900: #ff6369;\\n  --color-red-1000: #ffecee;\\n\\n  /* Amber Scale Dark */\\n  --color-amber-100: #271700;\\n  --color-amber-200: #341c00;\\n  --color-amber-300: #4a2900;\\n  --color-amber-400: #573300;\\n  --color-amber-500: #693f05;\\n  --color-amber-600: #e79c13;\\n  --color-amber-700: #ffb224;\\n  --color-amber-800: #ff990a;\\n  --color-amber-900: #f1a10d;\\n  --color-amber-1000: #fef3dd;\\n\\n  /* Green Scale Dark */\\n  --color-green-100: #0b2211;\\n  --color-green-200: #0f2c17;\\n  --color-green-300: #11351b;\\n  --color-green-400: #0c461b;\\n  --color-green-500: #126427;\\n  --color-green-600: #1a9338;\\n  --color-green-700: #46a758;\\n  --color-green-800: #388e4a;\\n  --color-green-900: #63c174;\\n  --color-green-1000: #e5fbeb;\\n\\n  /* Turbopack Dark - Temporary */\\n  --color-turbopack-text-red: #ff6d92;\\n  --color-turbopack-text-blue: #45b2ff;\\n  --color-turbopack-border-red: #6e293b;\\n  --color-turbopack-border-blue: #284f80;\\n  --color-turbopack-background-red: #250d12;\\n  --color-turbopack-background-blue: #0a1723;\\n\",aE=\"\\n  --color-font: white;\\n  --color-backdrop: rgba(0, 0, 0, 0.8);\\n  --color-border-shadow: rgba(255, 255, 255, 0.145);\\n\\n  --color-title-color: #fafafa;\\n  --color-stack-notes: #a9a9a9;\\n\";function a_(){return(0,y.jsx)(\"style\",{children:ei(aC(),aE,aS,aE,aS)})}function aP(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function az(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),!n||a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(e,n)||function(e,n){if(e){if(\"string\"==typeof e)return aP(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return aP(e,n)}}(e,n)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function aL(e){var n,t,r,o=e.state,a=e.dispatch,i=e.getSquashedHydrationErrorDetails,l=az((t=(n=rt((0,x.useState)(\"undefined\"!=typeof localStorage&&localStorage.getItem(J)?Number(localStorage.getItem(J)):S.Medium),2))[0],r=n[1],[t,function(e){r(e),localStorage.setItem(J,String(e))}]),2),s=l[0],c=l[1],u=az((0,x.useState)(!1),2),d=u[0],f=u[1],p=null!==o.buildError;return  false&&(0),(0,y.jsxs)(ed,{children:[(0,y.jsx)(ap,{}),(0,y.jsx)(ep,{scale: false?0:s}),(0,y.jsx)(ag,{}),(0,y.jsx)(ad,{}),(0,y.jsx)(a_,{}),(0,y.jsx)(ak,{state:o,dispatch:a,isAppDir:!0,children:function(e){var n=e.runtimeErrors,t=e.totalErrorCount;return(0,y.jsx)(y.Fragment,{children:o.showIndicator&&( false?0:(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(rU,{scale:s,setScale:c,state:o,dispatch:a,errorCount:t,isBuildError:p}),(0,y.jsx)(ab,{state:o,dispatch:a,getSquashedHydrationErrorDetails:i,runtimeErrors:n,errorCount:t})]}))})}})]})}var aT=__nested_webpack_require_381207__(\"./src/next-devtools/dev-overlay/segment-explorer-trie.ts\");function aR(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function aN(e){return function(e){if(Array.isArray(e))return aR(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||aD(e)||function(){throw TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function aD(e,n){if(e){if(\"string\"==typeof e)return aR(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return aR(e,n)}}var aB=null,aM=[];function aI(e){return function(){for(var n=arguments.length,t=Array(n),r=0;r<n;r++)t[r]=arguments[r];aB?e.apply(void 0,[aB].concat(aN(t))):aM.push(function(n){e.apply(void 0,[n].concat(aN(t)))})}}var aH={onBuildOk:aI(function(e){e({type:_})}),onBuildError:aI(function(e,n){e({type:P,message:n})}),onBeforeRefresh:aI(function(e){e({type:z})}),onRefresh:aI(function(e){e({type:L})}),onVersionInfo:aI(function(e,n){e({type:T,versionInfo:n})}),onStaticIndicator:aI(function(e,n){e({type:E,staticIndicator:n})}),onDebugInfo:aI(function(e,n){e({type:D,debugInfo:n})}),onDevIndicator:aI(function(e,n){e({type:B,devIndicator:n})}),onUnhandledError:aI(function(e,n){e({type:R,reason:n})}),onUnhandledRejection:aI(function(e,n){e({type:N,reason:n})}),openErrorOverlay:aI(function(e){e({type:M})}),closeErrorOverlay:aI(function(e){e({type:I})}),toggleErrorOverlay:aI(function(e){e({type:H})}),buildingIndicatorHide:aI(function(e){e({type:U})}),buildingIndicatorShow:aI(function(e){e({type:F})}),renderingIndicatorHide:aI(function(e){e({type:q})}),renderingIndicatorShow:aI(function(e){e({type:V})}),segmentExplorerNodeAdd:aI(function(e,n){(0,aT.th)(n)}),segmentExplorerNodeRemove:aI(function(e,n){(0,aT._c)(n)}),segmentExplorerUpdateRouteState:aI(function(e,n){e({type:ee,page:n})})};function aF(e){var n,t,r=e.getComponentStack,o=e.getOwnerStack,a=e.getSquashedHydrationErrorDetails,i=e.isRecoverableError,l=(n=function(e,n,t,r){var o;function a(e,o,a){var i,l=n(a),s=void 0===l?void 0:function(e){var n=[],t=!0,r=!1,o=void 0;try{for(var a,i=e.trim().split(\"\\n\")[Symbol.iterator]();!(t=(a=i.next()).done);t=!0){var l=a.value,s=/at ([^ ]+)( \\((.*)\\))?/.exec(l);if(null==s?void 0:s[1]){var c=s[1],u=s[3];if(!u){n.push({canOpenInEditor:!1,component:c});continue}if(null==u?void 0:u.includes(\"next/dist\"))break;var d=function(e){var n,t,r,o,a=(r=e).startsWith(\"file://\")?\"file\":r.includes(\"webpack-internal://\")?\"webpack-internal\":r.startsWith(\"http://\")||r.startsWith(\"https://\")?\"http\":r.startsWith(\"//\")?\"protocol-relative\":\"unknown\",i=null==e?void 0:e.replace(/^(webpack-internal:\\/\\/\\/|file:\\/\\/)(\\(.*\\)\\/)?/,\"\"),l=(n=null!=(o=null==i?void 0:i.match(/^(.+):(\\d+):(\\d+)/))?o:[],t=4,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,4)||function(e,n){if(e){if(\"string\"==typeof e)return w(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);if(\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t)return Array.from(t);if(\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return w(e,n)}}(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),s=l[1],c=l[2],u=l[3];switch(a){case\"file\":case\"webpack-internal\":return{canOpenInEditor:!0,file:s,lineNumber:c?Number(c):void 0,column:u?Number(u):void 0};default:return{canOpenInEditor:!1}}}(u);n.push(function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);\"function\"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){var r,o,a;r=e,o=n,a=t[n],o in r?Object.defineProperty(r,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):r[o]=a})}return e}({component:c},d))}}}catch(e){r=!0,o=e}finally{try{t||null==i.return||i.return()}finally{if(r)throw o}}return n}(l),c=t(a),u=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"/home/omar/Documents/ruleIQ/frontend/.next\";return e?(e=e.split(\"\\n\").map(function(e){return e.includes(\"(eval \")&&(e=e.replace(/eval code/g,\"eval\").replace(/\\(eval at [^()]* \\(/,\"(file://\").replace(/\\),.*$/g,\")\")),e}).join(\"\\n\"),(0,j.parse)(e).map(function(e){try{var t=new URL(e.file),r=k.exec(t.pathname);if(r){var o,a=null==n||null==(o=n.replace(/\\\\/g,\"/\"))?void 0:o.replace(/\\/$/,\"\");a&&(e.file=\"file://\"+a.concat(r.pop())+t.search)}}catch(e){}return e})):[]}((a.stack||\"\")+(c||\"\")),d={id:o,error:a,frames:u,componentStackFrames:s,type:r(a)?\"recoverable\":(i=a)&&\"NEXT_CONSOLE_ERROR\"===i[A]?\"console\":\"runtime\"},f=e.filter(function(e){return e.error.stack!==d.error.stack&&et(e.error.stack)!==et(d.error.stack)||t(e.error)!==t(d.error)});return f.length===e.length?(f.push(d),f):e}return(0,x.useReducer)(function(e,n){switch(n.type){case D:return C(O({},e),{debugInfo:n.debugInfo});case E:return C(O({},e),{staticIndicator:n.staticIndicator});case _:return C(O({},e),{buildError:null});case P:return C(O({},e),{buildError:n.message});case z:return C(O({},e),{refreshState:{type:\"pending\",errors:[]}});case L:return C(O({},e),{buildError:null,errors:\"pending\"===e.refreshState.type?e.refreshState.errors:[],refreshState:{type:\"idle\"}});case R:case N:switch(e.refreshState.type){case\"idle\":return C(O({},e),{nextId:e.nextId+1,errors:a(e.errors,e.nextId,n.reason)});case\"pending\":return C(O({},e),{nextId:e.nextId+1,refreshState:C(O({},e.refreshState),{errors:a(e.errors,e.nextId,n.reason)})});default:return e}case T:return C(O({},e),{versionInfo:n.versionInfo});case B:return C(O({},e),{showIndicator:!0,disableDevIndicator:er||!!n.devIndicator.disabledUntil});case M:return C(O({},e),{isErrorOverlayOpen:!0});case I:return C(O({},e),{isErrorOverlayOpen:!1});case H:return C(O({},e),{isErrorOverlayOpen:!e.isErrorOverlayOpen});case F:return C(O({},e),{buildingIndicator:!0});case U:return C(O({},e),{buildingIndicator:!1});case V:return C(O({},e),{renderingIndicator:!0});case q:return C(O({},e),{renderingIndicator:!1});case W:return C(O({},e),{isDevToolsPanelOpen:!0});case $:return C(O({},e),{isDevToolsPanelOpen:!1});case Z:return C(O({},e),{isDevToolsPanelOpen:!e.isDevToolsPanelOpen});case Y:return C(O({},e),{devToolsPosition:n.devToolsPosition});case X:return C(O({},e),{scale:n.scale});case ee:return C(O({},e),{page:n.page});case K:return C(O({},e),{showRestartServerButton:n.showRestartServerButton});default:return e}},(o=e,C(O({},eo),{isErrorOverlayOpen:\"pages\"===o,routerType:o})))}(e.routerType,r,o,i),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t,r,o=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null!=o){var a=[],i=!0,l=!1;try{for(o=o.call(e);!(i=(t=o.next()).done)&&(a.push(t.value),a.length!==n);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==o.return||o.return()}finally{if(l)throw r}}return a}}(n,2)||aD(n,t)||function(){throw TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()),s=l[0],c=l[1];return(0,x.useInsertionEffect)(function(){aB=c;var e=setTimeout(function(){!function(e){try{var n=!0,t=!1,r=void 0;try{for(var o,a=aM[Symbol.iterator]();!(n=(o=a.next()).done);n=!0)(0,o.value)(e)}catch(e){t=!0,r=e}finally{try{n||null==a.return||a.return()}finally{if(t)throw r}}}finally{aM.length=0}}(c)});return function(){aB=null,clearTimeout(e)}},[]),(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(es,{}),(0,y.jsx)(aL,{state:s,dispatch:c,getSquashedHydrationErrorDetails:a})]})}var aU=!1,aV=!1;function aq(){return null}function aW(e,n,t){if(aU)throw Error(\"Next DevTools: Pages Dev Overlay is already mounted. This is a bug in Next.js\");if(!aV){var r=document.createElement(\"script\");r.style.display=\"block\",r.style.position=\"absolute\",r.setAttribute(\"data-nextjs-dev-overlay\",\"true\");var o=document.createElement(\"nextjs-portal\");r.appendChild(o),document.body.appendChild(r);var a=(0,ea.createRoot)(o,{identifierPrefix:\"ndt-\"});(0,x.startTransition)(function(){a.render((0,y.jsx)(aF,{getComponentStack:e,getOwnerStack:n,getSquashedHydrationErrorDetails:aq,isRecoverableError:t,routerType:\"app\"}))}),aV=!0}}function a$(e,n,t,r){if(aV)throw Error(\"Next DevTools: App Dev Overlay is already mounted. This is a bug in Next.js\");if(!aU){var o=document.createElement(\"nextjs-portal\");o.style.position=\"absolute\",new MutationObserver(function(e){var n=!0,t=!1,r=void 0;try{for(var a,i=e[Symbol.iterator]();!(n=(a=i.next()).done);n=!0){var l=a.value;if(\"childList\"===l.type){var s=!0,c=!1,u=void 0;try{for(var d,f=l.removedNodes[Symbol.iterator]();!(s=(d=f.next()).done);s=!0)d.value===o&&document.body.appendChild(o)}catch(e){c=!0,u=e}finally{try{s||null==f.return||f.return()}finally{if(c)throw u}}}}}catch(e){t=!0,r=e}finally{try{n||null==i.return||i.return()}finally{if(t)throw r}}}).observe(document.body,{childList:!0}),document.body.appendChild(o);var a=(0,ea.createRoot)(o);(0,x.startTransition)(function(){a.render((0,y.jsx)(aF,{getComponentStack:e,getOwnerStack:n,getSquashedHydrationErrorDetails:t,isRecoverableError:r,routerType:\"pages\"}))}),aU=!0}}})(),exports.dispatcher=__nested_webpack_exports__.dispatcher,exports.renderAppDevOverlay=__nested_webpack_exports__.renderAppDevOverlay,exports.renderPagesDevOverlay=__nested_webpack_exports__.renderPagesDevOverlay,__nested_webpack_exports__)-1===[\"dispatcher\",\"renderAppDevOverlay\",\"renderPagesDevOverlay\"].indexOf(__webpack_i__)&&(exports[__webpack_i__]=__nested_webpack_exports__[__webpack_i__]);Object.defineProperty(exports, \"__esModule\", ({value:!0}));\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9uZXh0LWRldnRvb2xzL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7QUFBQSx5QkFBeUIsbVBBQW1QLGFBQWEsT0FBTyxRQUFRLEVBQUUsOGFBQThhO0FBQ3h0QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTSxtR0FBbUcsWUFBWSxhQUFhLFdBQVcsT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLFdBQVcsVUFBVSxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssS0FBSyxPQUFPLGFBQWEsV0FBVyxZQUFZLE9BQU8sS0FBSyxLQUFLLE9BQU8sYUFBYSxXQUFXLFlBQVksT0FBTyxLQUFLLEtBQUssT0FBTyxhQUFhLFdBQVcsWUFBWSxPQUFPLEtBQUssS0FBSyxPQUFPLGFBQWEsV0FBVyxZQUFZLE9BQU8sS0FBSyxZQUFZLDBDQUEwQyx1QkFBdUIsMEJBQTBCLG1CQUFtQixHQUFHLGNBQWMsdUJBQXVCLHNCQUFzQix1QkFBdUIsb0JBQW9CLHFCQUFxQix5QkFBeUIsR0FBRyxvQkFBb0IsdUJBQXVCLGFBQWEsY0FBYyx3QkFBd0IseUNBQXlDLDhCQUE4QixHQUFHLHlCQUF5Qiw4RkFBOEYsOENBQThDLGNBQWMsZ0NBQWdDLEdBQUcsNEJBQTRCLDhGQUE4RixpREFBaUQsV0FBVyxpQ0FBaUMsR0FBRywwQkFBMEIsOEZBQThGLCtDQUErQyxhQUFhLGdDQUFnQyxHQUFHLDJCQUEyQiw4RkFBOEYsZ0RBQWdELFlBQVksaUNBQWlDLEdBQUcseUJBQXlCLGdDQUFnQyxHQUFHLG1CQUFtQixHQUFHLFFBQVEsNFJBQTRSLGFBQWEsT0FBTyxRQUFRLEVBQUUsOGFBQThhO0FBQ2hwRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsOERBQThEO0FBQzlEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSwySUFBMkksWUFBWSxhQUFhLFdBQVcsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLFlBQVksTUFBTSx3QkFBd0IsT0FBTyxNQUFNLFVBQVUsVUFBVSxVQUFVLFlBQVksT0FBTyxhQUFhLE9BQU8sVUFBVSxVQUFVLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxLQUFLLEtBQUssVUFBVSxLQUFLLEtBQUssVUFBVSxLQUFLLEtBQUssVUFBVSxNQUFNLFFBQVEsVUFBVSxVQUFVLFVBQVUsTUFBTSxLQUFLLFVBQVUsVUFBVSxZQUFZLE1BQU0sS0FBSyxVQUFVLFVBQVUsWUFBWSxNQUFNLEtBQUssVUFBVSxVQUFVLFlBQVksTUFBTSxLQUFLLFVBQVUsVUFBVSxZQUFZLE9BQU8sTUFBTSxVQUFVLFVBQVUsWUFBWSxPQUFPLE1BQU0sVUFBVSxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLFdBQVcsWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksV0FBVyxZQUFZLGFBQWEsYUFBYSxPQUFPLFFBQVEsWUFBWSxPQUFPLFFBQVEsWUFBWSxPQUFPLE9BQU8sS0FBSyxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksMkNBQTJDLHVCQUF1Qiw4Q0FBOEMsMERBQTBELEdBQUcsa0JBQWtCLHVCQUF1Qiw4Q0FBOEMseUJBQXlCLHlNQUF5TSx1RUFBdUUsR0FBRyxrTEFBa0wsZ0VBQWdFLGtDQUFrQyxzREFBc0QsV0FBVyxpQkFBaUIsZ0JBQWdCLHNCQUFzQixHQUFHLCtHQUErRyxZQUFZLGdCQUFnQixpQkFBaUIsc0JBQXNCLEdBQUcsMkJBQTJCLGVBQWUsR0FBRyw0QkFBNEIsa0JBQWtCLEdBQUcsMEJBQTBCLGdCQUFnQixHQUFHLDJCQUEyQixpQkFBaUIsR0FBRywrSEFBK0gsZ0JBQWdCLGlCQUFpQixnQkFBZ0IsR0FBRyxnQ0FBZ0MsZUFBZSxnQkFBZ0Isd0JBQXdCLEdBQUcsK0JBQStCLGVBQWUsaUJBQWlCLHdCQUF3QixHQUFHLGlDQUFpQyxrQkFBa0IsZ0JBQWdCLHdCQUF3QixHQUFHLGtDQUFrQyxrQkFBa0IsaUJBQWlCLHdCQUF3QixHQUFHLDRDQUE0QyxpQkFBaUIsZ0JBQWdCLGtEQUFrRCxHQUFHLDRDQUE0QyxnQkFBZ0IsaUJBQWlCLGtEQUFrRCxHQUFHLHNCQUFzQixlQUFlLDZDQUE2QyxzREFBc0QsMkRBQTJELGdDQUFnQyxHQUFHLHlCQUF5QixrQkFBa0IsNkNBQTZDLHNEQUFzRCwyREFBMkQsaUNBQWlDLEdBQUcsdUJBQXVCLDJDQUEyQyxnQkFBZ0IscURBQXFELDJEQUEyRCxnQ0FBZ0MsR0FBRyx3QkFBd0IsMkNBQTJDLGlCQUFpQixxREFBcUQsMkRBQTJELGlDQUFpQyxHQUFHLHNLQUFzSyw2QkFBNkIsR0FBRyxzS0FBc0ssNkJBQTZCLEdBQUcsME5BQTBOLGlDQUFpQyxHQUFHLDZEQUE2RCxnQ0FBZ0MsR0FBRyxpRUFBaUUsaUNBQWlDLEdBQUcsMkRBQTJELGdDQUFnQyxHQUFHLG1CQUFtQixHQUFHLFFBQVEsMFJBQTBSLGFBQWEsT0FBTyxRQUFRLEVBQUUsOGFBQThhO0FBQ3YrTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0seUlBQXlJLFVBQVUsWUFBWSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksV0FBVyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxVQUFVLFVBQVUsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLE1BQU0sWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxXQUFXLFlBQVksV0FBVyxZQUFZLGFBQWEsV0FBVyxZQUFZLFdBQVcsWUFBWSxXQUFXLE1BQU0sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxtREFBbUQsa0JBQWtCLHdCQUF3QixhQUFhLHFCQUFxQixzQkFBc0IscUJBQXFCLGtDQUFrQyx5QkFBeUIsaUJBQWlCLDhCQUE4QixvQkFBb0IsNENBQTRDLEdBQUcsb0NBQW9DLDhCQUE4QixxQkFBcUIsc0JBQXNCLHlCQUF5Qix3QkFBd0IsNEJBQTRCLEdBQUcsK0NBQStDLHFDQUFxQyxHQUFHLHFEQUFxRCxpQ0FBaUMsR0FBRyxtQ0FBbUMsZ0JBQWdCLGlCQUFpQixtQkFBbUIsMkJBQTJCLEdBQUcseUNBQXlDLGlDQUFpQyxHQUFHLDZGQUE2RixpQ0FBaUMsd0JBQXdCLEdBQUcsZ0NBQWdDLGlCQUFpQiw0Q0FBNEMsNENBQTRDLHdCQUF3QixxQkFBcUIsc0JBQXNCLG9CQUFvQiwyRkFBMkYsR0FBRywyQ0FBMkMsZ0NBQWdDLEdBQUcscUNBQXFDLGtCQUFrQix3QkFBd0IsaUJBQWlCLHNCQUFzQixvQkFBb0IsdUJBQXVCLGtDQUFrQyxvQkFBb0IscUJBQXFCLGlCQUFpQixxQkFBcUIsZ0JBQWdCLEdBQUcsb0RBQW9ELGlDQUFpQyx3QkFBd0IsR0FBRyx5Q0FBeUMsdUJBQXVCLHdCQUF3QixHQUFHLDJDQUEyQyxzQ0FBc0MsR0FBRyxpREFBaUQsZ0NBQWdDLGlDQUFpQyxHQUFHLGdEQUFnRCxtQ0FBbUMsb0NBQW9DLEdBQUcsbUNBQW1DLGlCQUFpQixvQkFBb0Isc0JBQXNCLHFCQUFxQixpQ0FBaUMsR0FBRyxtQkFBbUIsR0FBRyxRQUFRLGtSQUFrUixhQUFhLE9BQU8sUUFBUSxFQUFFLDhhQUE4YTtBQUN4cEk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTSxpSUFBaUksWUFBWSxXQUFXLFVBQVUsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsV0FBVyxNQUFNLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLFdBQVcsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxNQUFNLEtBQUssWUFBWSxXQUFXLFVBQVUsS0FBSyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksV0FBVyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLE1BQU0sS0FBSyxVQUFVLFVBQVUsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsV0FBVyxVQUFVLE1BQU0sS0FBSyxZQUFZLGFBQWEsT0FBTyxZQUFZLE1BQU0sVUFBVSxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsV0FBVyxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLFdBQVcsVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLG1EQUFtRCw4QkFBOEIsbUJBQW1CLGlCQUFpQixrQkFBa0Isa0NBQWtDLG9DQUFvQyxHQUFHLHNDQUFzQyxrQkFBa0Isd0JBQXdCLHVCQUF1QixrREFBa0QsY0FBYyxHQUFHLDJDQUEyQyw4QkFBOEIscUJBQXFCLGtDQUFrQyxrQ0FBa0Msd0JBQXdCLHNCQUFzQixHQUFHLDRCQUE0QixrQkFBa0IsdUJBQXVCLEdBQUcsNENBQTRDLGtEQUFrRCxHQUFHLGdDQUFnQyxrQkFBa0Isd0JBQXdCLHNCQUFzQix5QkFBeUIsdUJBQXVCLHFCQUFxQixvQkFBb0Isa0NBQWtDLEdBQUcsMENBQTBDLHVCQUF1QixHQUFHLGdDQUFnQyx5QkFBeUIsZ0JBQWdCLHdCQUF3QixHQUFHLHVDQUF1QyxzQkFBc0IsR0FBRyxzQ0FBc0MsdUJBQXVCLEdBQUcsMENBQTBDLDBCQUEwQixhQUFhLGVBQWUsR0FBRyxvQ0FBb0MsaUNBQWlDLEdBQUcsNkJBQTZCLHlCQUF5QixhQUFhLHNCQUFzQixHQUFHLHlEQUF5RCxxQkFBcUIsR0FBRyxrQ0FBa0MseUJBQXlCLHdCQUF3Qiw0QkFBNEIscUJBQXFCLHdCQUF3QixzQkFBc0IsOEJBQThCLHFCQUFxQixzQkFBc0Isb0JBQW9CLDRDQUE0QyxrQ0FBa0MsR0FBRyw4Q0FBOEMsNkNBQTZDLGtDQUFrQyxHQUFHLDZDQUE2QyxlQUFlLG1CQUFtQixhQUFhLHNDQUFzQyxHQUFHLGlEQUFpRCxlQUFlLGdCQUFnQixxQkFBcUIsR0FBRyx3Q0FBd0MsNkJBQTZCLEdBQUcsMkNBQTJDLGtDQUFrQyxpQ0FBaUMsNkNBQTZDLGlCQUFpQixvQkFBb0IsR0FBRyw2Q0FBNkMscUJBQXFCLHVCQUF1QixHQUFHLG1EQUFtRCxpQkFBaUIsZ0RBQWdELGtEQUFrRCxzQkFBc0IsR0FBRyxxQ0FBcUMsa0JBQWtCLHdCQUF3Qiw0QkFBNEIsYUFBYSxnQkFBZ0IsaUJBQWlCLDRDQUE0Qyw0Q0FBNEMsdUJBQXVCLGtDQUFrQyw4QkFBOEIscUJBQXFCLG9CQUFvQiw0Q0FBNEMsR0FBRywwREFBMEQsc0NBQXNDLEdBQUcsK0NBQStDLGlCQUFpQix3QkFBd0IsR0FBRyxtQ0FBbUMsdUJBQXVCLEdBQUcsb0NBQW9DLHlCQUF5Qix3QkFBd0IsNEJBQTRCLG9CQUFvQixpQkFBaUIsbUJBQW1CLHVDQUF1QyxrQ0FBa0Msd0JBQXdCLDhCQUE4QixxQkFBcUIsbUJBQW1CLEdBQUcsOENBQThDLHdCQUF3QixHQUFHLDhDQUE4QyxxQkFBcUIsR0FBRyxtQkFBbUIsR0FBRyxRQUFRLG9RQUFvUSxhQUFhLE9BQU8sUUFBUSxFQUFFLDhhQUE4YTtBQUN6NE07QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sbUhBQW1ILFVBQVUsWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSx1Q0FBdUMsb0JBQW9CLGdDQUFnQyxxQkFBcUIsa0RBQWtELEdBQUcsaUNBQWlDLGtCQUFrQixzQ0FBc0MscUJBQXFCLDBDQUEwQyw0Q0FBNEMsR0FBRyxtQkFBbUIsR0FBRyxRQUFRLHdPQUF3TyxhQUFhLE9BQU8sUUFBUSxFQUFFLDhhQUE4YTtBQUNoekM7QUFDQTtBQUNBO0FBQ0EsTUFBTSw4RkFBOEYsTUFBTSxZQUFZLG1FQUFtRSw4QkFBOEIsR0FBRyxtQkFBbUIsR0FBRyxRQUFRLDZNQUE2TSxhQUFhLHNCQUFzQixTQUFTLDZCQUE2Qiw0QkFBNEIseUJBQXlCLCtDQUErQyx1Q0FBdUMsZ0VBQWdFLHFCQUFxQixlQUFlLGVBQWUsS0FBSyxXQUFXLHlCQUF5QiwwQ0FBMEMsU0FBUyxpQkFBaUIsY0FBYyxLQUFLLGlCQUFpQixtQkFBbUIsWUFBWSxXQUFXLEtBQUssc0JBQXNCLG9HQUFvRyxpQkFBaUIscURBQXFELGlCQUFpQix5REFBeUQsaUJBQWlCLDBDQUEwQyxJQUFJLG9OQUFvTixhQUFhLHNCQUFzQixrQkFBa0IsZUFBZSw0QkFBNEIsNERBQTRELHdFQUF3RSxjQUFjLHVDQUF1QyxzQkFBc0Isb01BQW9NLGFBQWEsU0FBUyxjQUFjLGlCQUFpQixXQUFXLDRCQUE0QixJQUFJLE1BQU0sU0FBUyxnQkFBZ0IsWUFBWSxVQUFVLFdBQVcsS0FBSyw0RUFBNEUsU0FBUyxjQUFjLDZEQUE2RCw0Q0FBNEMsS0FBSyxvQkFBb0Isa0JBQWtCLCtCQUErQix1SUFBdUksTUFBTSwwQkFBMEIsb0NBQW9DLEVBQUUsVUFBVSxTQUFTLHdCQUF3Qix1QkFBdUIsRUFBRSxtQkFBbUIsUUFBUSxZQUFZLFdBQVcsS0FBSyxjQUFjLGtCQUFrQixxQkFBcUIsV0FBVyxLQUFLLGNBQWMsb0RBQW9ELE1BQU0sOExBQThMLGFBQWEsc0JBQXNCLHNDQUFzQyxnRUFBZ0UsOE1BQThNLGFBQWEsc0JBQXNCLFdBQVcsOEJBQThCLHVMQUF1TCxhQUFhLHNCQUFzQix1Q0FBdUMsbUJBQW1CLHNCQUFzQiw4QkFBOEIsT0FBTyxtQkFBbUIsVUFBVSx5REFBeUQsNkNBQTZDLHlGQUF5RixzQkFBc0Isa0JBQWtCLHFCQUFxQixnR0FBZ0csaUhBQWlILG1CQUFtQixhQUFhLG1EQUFtRCxPQUFPLDZMQUE2TCxhQUFhLHdCQUF3Qix1Q0FBdUMsS0FBSyxLQUFLLGFBQWEsNkJBQTZCLDRDQUE0Qyw4Q0FBOEMsTUFBTSxhQUFhLE9BQU8sUUFBUSxpQkFBaUIsZ0JBQWdCLFlBQVksV0FBVyxLQUFLLFdBQVcsK0dBQStHLHVCQUF1Qix3Q0FBd0MsUUFBUSxtQ0FBbUMsRUFBRSxtQ0FBbUMsRUFBRSxxQ0FBcUMsRUFBRSx3Q0FBd0MsRUFBRSxvQ0FBb0MsRUFBRSx5Q0FBeUMsRUFBRSxzQ0FBc0MsRUFBRSx1Q0FBdUMsSUFBSSw2Q0FBNkMsRUFBRSw0Q0FBNEMsRUFBRSw0Q0FBNEMsRUFBRSxnREFBZ0QsRUFBRSw2Q0FBNkMsRUFBRSxpREFBaUQsRUFBRSw4Q0FBOEMsRUFBRSxnREFBZ0QsR0FBRyxxQkFBcUIsYUFBYSw2RUFBNkUsdUVBQXVFLGtCQUFrQixzQ0FBc0MsZ0NBQWdDLEVBQUUsZ0NBQWdDLDBCQUEwQixFQUFFLHFDQUFxQywrQkFBK0IsRUFBRSxxQ0FBcUMsK0JBQStCLEVBQUUsbUNBQW1DLDZCQUE2QixTQUFTLG9DQUFvQyx1QkFBdUIsWUFBWSxJQUFJLGdCQUFnQixJQUFJLDRDQUE0QyxtREFBbUQsZ0NBQWdDLEtBQUssSUFBSSxnQkFBZ0IsSUFBSSxnQkFBZ0IsSUFBSSx1Q0FBdUMsZ0JBQWdCLEtBQUssOENBQThDLEVBQUUsc0NBQXNDLHVDQUF1QyxtQkFBbUIsY0FBYyxjQUFjLEtBQUssR0FBRyxFQUFFLGdDQUFnQyxxREFBcUQsa0NBQWtDLEdBQUcsRUFBRSxxQ0FBcUMsNkJBQTZCLEVBQUUscUNBQXFDLGNBQWMsK0NBQStDLEVBQUUsbUNBQW1DLHdCQUF3QixNQUFNLEVBQUUsb0NBQW9DLDJDQUEyQyxjQUFjLDJCQUEyQix3QkFBd0IsNkJBQTZCLEVBQUUsY0FBYyxnQ0FBZ0MsZ0dBQWdHLG1CQUFtQixLQUFLLGdDQUFnQyxFQUFFLDZDQUE2QyxzQkFBc0IsbUZBQW1GLHdJQUF3SSxrQkFBa0IsaUNBQWlDLHlDQUF5QyxlQUFlLGVBQWUsbUJBQW1CLEdBQUcsc0NBQXNDLHlCQUF5QixXQUFXLEVBQUUsMEJBQTBCLHdEQUF3RCxxQ0FBcUMsb0NBQW9DLHNDQUFzQyx5Q0FBeUMscUNBQXFDLHdDQUF3Qyx1Q0FBdUMsOENBQThDLDJCQUEyQiwyQkFBMkIsMENBQTBDLDBDQUEwQywwQ0FBMEMsNENBQTRDLHdCQUF3QixhQUFhLGdCQUFnQixnQkFBZ0IseUJBQXlCLDBCQUEwQixzQkFBc0IsbURBQW1ELHNCQUFzQiw4R0FBOEcsOEJBQThCLHNFQUFzRSw2Q0FBNkMsc0JBQXNCLDRIQUE0SCxnTkFBZ04sRUFBRSx5Q0FBeUMsV0FBVyxRQUFRLG1DQUFtQyxtQkFBbUIsd0JBQXdCLHFDQUFxQyxrQ0FBa0MsZUFBZSxrQkFBa0IsaUZBQWlGLHNDQUFzQyxteUJBQW15QixxQ0FBcUMsS0FBSyxJQUFJLE1BQU0sY0FBYyxXQUFXLCtCQUErQixZQUFZLFdBQVcsTUFBTSxJQUFJLHlCQUF5QixRQUFRLGVBQWUsaUJBQWlCLDJCQUEyQixJQUFJLGdGQUFnRixhQUFhLGdJQUFnSSxjQUFjLG9DQUFvQyx1QkFBdUIsK0NBQStDLFlBQVksbUJBQW1CLG1EQUFtRCxvQ0FBb0MsMkhBQTJILGNBQWMsWUFBWSxvQkFBb0IsU0FBUyxZQUFZLEtBQUssSUFBSSxrREFBa0QsU0FBUyx3QkFBd0IsY0FBYyxlQUFlLHNCQUFzQixzRkFBc0YsWUFBWSxjQUFjLGVBQWUsc0JBQXNCLHNGQUFzRixZQUFZLGNBQWMsZ0NBQWdDLGtiQUFrYiwwQkFBMEIsbUNBQW1DLHFFQUFxRSw4Q0FBOEMsb0NBQW9DLHNCQUFzQixjQUFjLCtGQUErRixtTUFBbU0sNkNBQTZDLFdBQVcsY0FBYyxPQUFPLFdBQVcsY0FBYyxvQ0FBb0MsZ0JBQWdCLDZCQUE2Qiw0Q0FBNEMsZ0JBQWdCLDJDQUEyQyxtRUFBbUUsTUFBTSx3REFBd0QsZUFBZSxjQUFjLE1BQU0sZUFBZSxNQUFNLGFBQWEsWUFBWSxhQUFhLGVBQWUsY0FBYywrQkFBK0IsK0JBQStCLHVCQUF1QixjQUFjLG9FQUFvRSxjQUFjLG1CQUFtQixjQUFjLFNBQVMsMkNBQTJDLDRHQUE0RyxtQkFBbUIsU0FBUyxnQkFBZ0Isa0JBQWtCLEtBQUssOEJBQThCLCtCQUErQixJQUFJLE9BQU8sdUNBQXVDLElBQUksTUFBTSxpQkFBaUIsZUFBZSw4Q0FBOEMsZUFBZSxlQUFlLCtDQUErQyxJQUFJLHdCQUF3QixTQUFTLFFBQVEsMEJBQTBCLEtBQUssSUFBSSxTQUFTLFNBQVMsSUFBSSxxQkFBcUIsS0FBSyxJQUFJLGNBQWMsU0FBUyxJQUFJLHlEQUF5RCxHQUFHLFNBQVMsMERBQTBELG9CQUFvQix3RUFBd0UsNEVBQTRFLCtFQUErRSxvQ0FBb0MsRUFBRSxvREFBb0QsU0FBUyxvQ0FBb0MsVUFBVSwwREFBMEQsS0FBSyxLQUFLLDBEQUEwRCxLQUFLLDREQUE0RCx3QkFBd0IsS0FBSyxLQUFLLFdBQVcsd0JBQXdCLGdEQUFnRCwyQ0FBMkMsOEZBQThGLGtCQUFrQixRQUFRLFFBQVEsK0JBQStCLDZDQUE2QyxjQUFjLElBQUksZ0JBQWdCLG9CQUFvQixjQUFjLHdDQUF3Qyx5QkFBeUIsMEVBQTBFLGlDQUFpQyxtQ0FBbUMsbUNBQW1DLDJCQUEyQiw2QkFBNkIsa0JBQWtCLHFCQUFxQixTQUFTLFNBQVMsU0FBUywyREFBMkQsK1pBQStaLGVBQWUsNEVBQTRFLHVCQUF1QixXQUFXLHlDQUF5Qyx3Q0FBd0MsMkNBQTJDLGVBQWUsV0FBVyxrQkFBa0IsYUFBYSxnQkFBZ0IsZ0JBQWdCLGdCQUFnQixnQkFBZ0Isa0JBQWtCLGtCQUFrQixrQkFBa0Isb0JBQW9CLDBLQUEwSywyRUFBMkUsZ0NBQWdDLGdDQUFnQyxrQ0FBa0Msa0NBQWtDLHlCQUF5QixrQkFBa0IsbUJBQW1CLHFCQUFxQixrQkFBa0IsMkNBQTJDLGNBQWMsa0JBQWtCLDBOQUEwTixpQkFBaUIsZ0VBQWdFLGNBQWMsU0FBUyx5Q0FBeUMsY0FBYyxTQUFTLCtDQUErQyxlQUFlLGlCQUFpQixLQUFLLGNBQWMsU0FBUyxpQkFBaUIscUZBQXFGLG1CQUFtQix1Q0FBdUMsZUFBZSwrRUFBK0UsaUJBQWlCLDBCQUEwQixzQkFBc0IsRUFBRSxFQUFFLHNCQUFzQiw2QkFBNkIsaUJBQWlCLFdBQVcsMkRBQTJELGVBQWUsVUFBVSxXQUFXLE1BQU0sV0FBVyxNQUFNLGFBQWEsTUFBTSx1TkFBdU4sTUFBTSw0QkFBNEIsTUFBTSxZQUFZLFNBQVMsZUFBZSx3REFBd0QsY0FBYyxVQUFVLHVEQUF1RCxpQkFBaUIsVUFBVSxJQUFJLGlCQUFpQixRQUFRLE9BQU8sMk9BQTJPLGVBQWUsaUVBQWlFLGVBQWUsWUFBWSxjQUFjLHVCQUF1QixFQUFFLEVBQUUsbUJBQW1CLHNFQUFzRSxTQUFTLEVBQUUsb0JBQW9CLFFBQVEsU0FBUyxtQkFBbUIsWUFBWSxlQUFlLG1CQUFtQixZQUFZLGdFQUFnRSxZQUFZLGVBQWUsWUFBWSxtREFBbUQsbUJBQW1CLGVBQWUsWUFBWSxvQkFBb0IsaURBQWlELElBQUksZUFBZSxTQUFTLHFCQUFxQixpQkFBaUIsMEJBQTBCLGlCQUFpQixnQkFBZ0IsV0FBVyxpQkFBaUIsb2FBQW9hLE9BQU8sbUJBQW1CLHFHQUFxRyxLQUFLLGlCQUFpQixpRUFBaUUsT0FBTywrQ0FBK0MsNkRBQTZELHdCQUF3QixtQkFBbUIsaUNBQWlDLEtBQUssaUJBQWlCLCtFQUErRSxPQUFPLHdCQUF3QixxQkFBcUIsaUNBQWlDLEtBQUssaUJBQWlCLCtFQUErRSxPQUFPLDRCQUE0QixlQUFlLGlCQUFpQiwyRkFBMkYsa0JBQWtCLGVBQWUsYUFBYSwrRUFBK0UsZUFBZSxxQkFBcUIsOEJBQThCLGdDQUFnQyxpRUFBaUUseUZBQXlGLG9CQUFvQixrQ0FBa0MsK0JBQStCLG9CQUFvQixpQkFBaUIsdUJBQXVCLDZCQUE2Qix3QkFBd0IsR0FBRyxvQkFBb0IsU0FBUyxzQkFBc0IsT0FBTyx5QkFBeUIsb0NBQW9DLGVBQWUsZUFBZSxlQUFlLHNCQUFzQixlQUFlLHdCQUF3QixtRkFBbUYsZUFBZSw4RUFBOEUsSUFBSSwrQkFBK0IsU0FBUyxlQUFlLGtCQUFrQixlQUFlLGdDQUFnQyw0Q0FBNEMsRUFBRSw2QkFBNkIsdWtCQUF1a0IsNkJBQTZCLHdHQUF3RywwREFBMEQsd0ZBQXdGLHFNQUFxTSxtQkFBbUIsb0ZBQW9GLHFCQUFxQixrQkFBa0IsS0FBSyxZQUFZLFdBQVcsbUJBQW1CLFFBQVEsV0FBVyw0R0FBNEcsS0FBSywwQkFBMEIsV0FBVyxLQUFLLG1CQUFtQiw4Q0FBOEMsT0FBTyxrQ0FBa0MsMkJBQTJCLG1CQUFtQiwyREFBMkQsdUNBQXVDLE9BQU8sbUNBQW1DLHFCQUFxQixZQUFZLFlBQVksOEJBQThCLFNBQVMsaUNBQWlDLE9BQU8sSUFBSSxvQkFBb0Isa0ZBQWtGLGlCQUFpQixNQUFNLG1CQUFtQix1Q0FBdUMsY0FBYyxRQUFRLGdCQUFnQixzOEJBQXM4QixtQkFBbUIsMEJBQTBCLCtNQUErTSxtQkFBbUIsa0RBQWtELHNCQUFzQiwrSUFBK0ksK0RBQStELHNEQUFzRCxlQUFlLGdDQUFnQyxVQUFVLDBLQUEwSyxrQkFBa0IseXZGQUF5dkYsZUFBZSxxSEFBcUgsZUFBZSxZQUFZLGVBQWUsOEhBQThILG9CQUFvQixlQUFlLFlBQVksdUJBQXVCLGtCQUFrQiw2QkFBNkIsd0lBQXdJLFFBQVEsYUFBYSxnQkFBZ0IseUVBQXlFLFdBQVcsS0FBSyxXQUFXLDJCQUEyQixrQkFBa0IseUJBQXlCLHNGQUFzRixRQUFRLFdBQVcsa0NBQWtDLE1BQU0sNENBQTRDLE1BQU0sMERBQTBELFVBQVUsbUJBQW1CLG9CQUFvQixNQUFNLElBQUksWUFBWSxRQUFRLG1GQUFtRixXQUFXLGNBQWMsaUJBQWlCLGtCQUFrQix3QkFBd0Isa0JBQWtCLHdCQUF3QixpQkFBaUIsNlRBQTZULE1BQU0sYUFBYSxpQkFBaUIsMERBQTBELFNBQVMsMEdBQTBHLFVBQVUsVUFBVSxvQ0FBb0MsZUFBZSxPQUFPLGlGQUFpRixTQUFTLE1BQU0sNEJBQTRCLGNBQWMsZ0JBQWdCLDBFQUEwRSxRQUFRLGlCQUFpQixLQUFLLFVBQVUsUUFBUSxzQkFBc0IsS0FBSyxvQ0FBb0MsZUFBZSxnQkFBZ0IsNkZBQTZGLGNBQWMsU0FBUyxjQUFjLFNBQVMsZUFBZSxzQkFBc0IsMktBQTJLLHdJQUF3SSxzQkFBc0IsMEJBQTBCLHlCQUF5Qix1QkFBdUIsd0hBQXdILDRCQUE0Qix1QkFBdUIsOEhBQThILHFCQUFxQixpQkFBaUIsSUFBSSx1QkFBdUIsMERBQTBELCtCQUErQixnQ0FBZ0Msa0JBQWtCLEtBQUssZ0JBQWdCLG1CQUFtQixLQUFLLGlLQUFpSyx1R0FBdUcsdUJBQXVCLHlJQUF5SSx1QkFBdUIsc0NBQXNDLHNCQUFzQixLQUFLLGVBQWUsYUFBYSxLQUFLLGdCQUFnQixhQUFhLEtBQUssOENBQThDLGFBQWEsS0FBSywwQkFBMEIsZ0VBQWdFLGFBQWEsS0FBSyxPQUFPLE9BQU8sMk1BQTJNLEtBQUssa1pBQWtaLEtBQUssZ0VBQWdFLGVBQWUsdUJBQXVCLG9FQUFvRSxjQUFjLFVBQVUsY0FBYyxLQUFLLGdCQUFnQixVQUFVLHVCQUF1QiwrQkFBK0IsOElBQThJLHNIQUFzSCxrQ0FBa0MscUJBQXFCLHVEQUF1RCxtQkFBbUIsa0ZBQWtGLGFBQWEsS0FBSywrR0FBK0csYUFBYSxLQUFLLHVHQUF1RyxhQUFhLEtBQUssNkNBQTZDLGFBQWEsS0FBSyxtQkFBbUIsK0RBQStELG9CQUFvQiw4RkFBOEYsc0JBQXNCLGFBQWEsS0FBSyxzQkFBc0IsOERBQThELDBEQUEwRCwwRUFBMEUsaUJBQWlCLFVBQVUsOENBQThDLHFDQUFxQyx1REFBdUQsa0JBQWtCLGVBQWUsMkRBQTJELGNBQWMsbUpBQW1KLGVBQWUsOENBQThDLDhDQUE4QyxxQkFBcUIsNEdBQTRHLG9CQUFvQixHQUFHLG9CQUFvQixlQUFlLFFBQVEsZUFBZSxzQkFBc0IsaUJBQWlCLHlCQUF5QixVQUFVLE9BQU8sT0FBTyw0QkFBNEIsUUFBUSxxQ0FBcUMsa0NBQWtDLG9DQUFvQyxLQUFLLFVBQVUsd0RBQXdELGNBQWMsdURBQXVELGVBQWUscUNBQXFDLFNBQVMsMkJBQTJCLG1CQUFtQiwwRkFBMEYsZUFBZSxtRUFBbUUsaUJBQWlCLDRCQUE0QixpQkFBaUIsMENBQTBDLDREQUE0RCw2Q0FBNkMsaUJBQWlCLG9CQUFvQix1RUFBdUUsc0NBQXNDLGdDQUFnQyxRQUFRLFdBQVcsS0FBSyxXQUFXLHlDQUF5QyxTQUFTLGVBQWUsS0FBSyxnQkFBZ0IsZ0JBQWdCLFNBQVMsaUJBQWlCLGNBQWMsUUFBUSxFQUFFLEVBQUUsbUJBQW1CLDhDQUE4QyxtQkFBbUIsSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFFLGtCQUFrQixnQkFBZ0IsUUFBUSxlQUFlLFNBQVMsU0FBUyxlQUFlLHVHQUF1Ryx5QkFBeUIsaUNBQWlDLEVBQUUsSUFBSSxxREFBcUQsU0FBUyxLQUFLLHVCQUF1QixXQUFXLGlCQUFpQixTQUFTLGVBQWUsOENBQThDLCtKQUErSiw4RkFBOEYsbUJBQW1CLCtEQUErRCw4REFBOEQsMENBQTBDLEVBQUUsNEtBQTRLLHFHQUFxRyxvQkFBb0IsaUJBQWlCLGlCQUFpQixTQUFTLHdGQUF3RixRQUFRLDBWQUEwVixNQUFNLE9BQU8sZUFBZSxzQkFBc0IsbUJBQW1CLGNBQWMsNkRBQTZELFNBQVMsb1BBQW9QLDJ6QkFBMnpCLGlCQUFpQixzQkFBc0IscUJBQXFCLDhEQUE4RCxrRUFBa0UscUNBQXFDLDhIQUE4SCxFQUFFLG1DQUFtQyx5QkFBeUIsT0FBTyxxQkFBcUIsT0FBTyxrQkFBa0IsT0FBTyw2QkFBNkIsaUJBQWlCLGlCQUFpQixjQUFjLHVCQUF1QixJQUFJLEVBQUUsWUFBWSxhQUFhLFlBQVksYUFBYSxZQUFZLGFBQWEsWUFBWSxvQ0FBb0MsZ0JBQWdCLHVEQUF1RCxrQkFBa0IscUJBQXFCLGtHQUFrRyxxQkFBcUIseUJBQXlCLGlCQUFpQiwrQkFBK0IsbUJBQW1CLFdBQVcsa0JBQWtCLHVCQUF1Qix3QkFBd0IsU0FBUyx3SUFBd0ksMklBQTJJLGVBQWUsMENBQTBDLG1CQUFtQixTQUFTLGdCQUFnQixrQ0FBa0MsVUFBVSxxQkFBcUIsc1dBQXNXLHFCQUFxQix1QkFBdUIsZUFBZSwrQ0FBK0MsaUJBQWlCLGtCQUFrQix1YkFBdWIsMENBQTBDLDZFQUE2RSxpQkFBaUIsbUJBQW1CLGtCQUFrQixpYUFBaWEsMENBQTBDLElBQUkseUJBQXlCLFFBQVEseUNBQXlDLDhDQUE4QyxvQ0FBb0MsVUFBVSxnQ0FBZ0MseUZBQXlGLFNBQVMsc0dBQXNHLG1GQUFtRixTQUFTLDZJQUE2SSxTQUFTLDJEQUEyRCxpQkFBaUIsd0RBQXdELG1DQUFtQyxpQkFBaUIsTUFBTSwwREFBMEQsd0RBQXdELHdEQUF3RCwyREFBMkQsWUFBWSxRQUFRLFdBQVcsUUFBUSxZQUFZLFFBQVEsWUFBWSxRQUFRLG1CQUFtQixRQUFRLHdEQUF3RCx5REFBeUQscUJBQXFCLGdDQUFnQyxtQkFBbUIsbUNBQW1DLGVBQWUseUJBQXlCLHVCQUF1QixtQkFBbUIsNkVBQTZFLG1GQUFtRixHQUFHLG1CQUFtQixpQkFBaUIsaUNBQWlDLGdCQUFnQix3QkFBd0IsNEJBQTRCLGdCQUFnQixPQUFPLDZCQUE2QiwwREFBMEQsaUJBQWlCLGtDQUFrQyxtQkFBbUIseUNBQXlDLFNBQVMsS0FBSyxpQkFBaUIsZ0JBQWdCLGlCQUFpQixTQUFTLFlBQVksc0VBQXNFLHlCQUF5QixlQUFlLHFDQUFxQyxlQUFlLEtBQUssT0FBTyxpREFBaUQsS0FBSyxPQUFPLHlFQUF5RSxpQkFBaUIsK0RBQStELHlEQUF5RCxlQUFlLDZGQUE2RixxQkFBcUIsZUFBZSw2Q0FBNkMsMEJBQTBCLDBDQUEwQyxNQUFNLG1EQUFtRCxNQUFNLGdDQUFnQyxZQUFZLGdCQUFnQixNQUFNLDJCQUEyQixNQUFNLDREQUE0RCxNQUFNLDZCQUE2QixNQUFNLHFHQUFxRyxNQUFNLDZCQUE2QixNQUFNLHVFQUF1RSwwVUFBMFUsZUFBZSxnQkFBZ0IsR0FBRyxnQkFBZ0IsNkJBQTZCLE9BQU8scUJBQXFCLE9BQU8sc0JBQXNCLGVBQWUsbUJBQW1CLDZCQUE2QixjQUFjLHFJQUFxSSx5RUFBeUUsU0FBUyxnQkFBZ0IseUVBQXlFLFNBQVMsOEZBQThGLFNBQVMsY0FBYyxpQkFBaUIsY0FBYyxTQUFTLGdFQUFnRSxlQUFlLDRCQUE0QiwrQkFBK0IsbUJBQW1CLHdDQUF3QyxlQUFlLGlDQUFpQyxtQkFBbUIsS0FBSyxTQUFTLEVBQUUsa0JBQWtCLG9JQUFvSSxZQUFZLHFCQUFxQixjQUFjLDJCQUEyQixTQUFTLEVBQUUscUJBQXFCLGFBQWEsY0FBYyxpQkFBaUIsT0FBTyxTQUFTLEVBQUUsUUFBUSxJQUFJLFlBQVksV0FBVyx5QkFBeUIsNkVBQTZFLFFBQVEsVUFBVSxvQkFBb0IsMkNBQTJDLGlFQUFpRSxlQUFlLHVCQUF1QixhQUFhLFNBQVMsRUFBRSxVQUFVLE9BQU8sTUFBTSx5QkFBeUIsc0JBQXNCLE1BQU0sV0FBVyxLQUFLLHFCQUFxQixPQUFPLGlCQUFpQixTQUFTLEVBQUUsT0FBTyw0QkFBNEIsa0NBQWtDLGVBQWUsa0JBQWtCLGdDQUFnQywrQkFBK0IsYUFBYSw4REFBOEQsdUJBQXVCLDhDQUE4Qyw0RkFBNEYsV0FBVyxzQ0FBc0MsZUFBZSxxQkFBcUIsU0FBUyxFQUFFLHlEQUF5RCxTQUFTLFNBQVMsZUFBZSw4REFBOEQsZUFBZSxnQkFBZ0IsaUJBQWlCLGdDQUFnQyxpQkFBaUIsc0JBQXNCLE1BQU0sb0NBQW9DLFlBQVksZ0NBQWdDLHFCQUFxQix1QkFBdUIsaUJBQWlCLGtCQUFrQixTQUFTLHNFQUFzRSx3QkFBd0IsMENBQTBDLFlBQVksc0JBQXNCLG1DQUFtQyxXQUFXLEdBQUcsaUVBQWlFLDhGQUE4RixjQUFjLE9BQU8sMkNBQTJDLGVBQWUsOENBQThDLHFCQUFxQixFQUFFLDhCQUE4QixjQUFjLHVCQUF1QixtQ0FBbUMsU0FBUyxxQkFBcUIsWUFBWSxXQUFXLGdCQUFnQixXQUFXLGtCQUFrQix1RUFBdUUsY0FBYyxZQUFZLGlCQUFpQiwrQ0FBK0MsWUFBWSxtQkFBbUIsMEJBQTBCLGVBQWUsY0FBYyxpQkFBaUIsaUNBQWlDLGlCQUFpQix1Q0FBdUMsY0FBYyxXQUFXLHNCQUFzQixnQ0FBZ0MsMkRBQTJELG1CQUFtQixlQUFlLGlEQUFpRCxtQkFBbUIsd0VBQXdFLCtCQUErQixzQ0FBc0MsbURBQW1ELEtBQUssZ0VBQWdFLDBDQUEwQyx5QkFBeUIsUUFBUSxnQ0FBZ0MsYUFBYSx5QkFBeUIsUUFBUSxnQ0FBZ0MsRUFBRSxpQkFBaUIsK0JBQStCLHNDQUFzQyxlQUFlLFlBQVksY0FBYyxpQ0FBaUMsU0FBUyxpQkFBaUIsZUFBZSxzQ0FBc0MsaUJBQWlCLGVBQWUsU0FBUywyQ0FBMkMsaUJBQWlCLHNDQUFzQyxpQkFBaUIsc0NBQXNDLDhGQUE4Riw4QkFBOEIsTUFBTSxlQUFlLDhCQUE4QixlQUFlLGdCQUFnQixNQUFNLGtCQUFrQixrREFBa0QsZ0JBQWdCLGtCQUFrQixLQUFLLFNBQVMsb0JBQW9CLFlBQVksY0FBYyxrQkFBa0IsU0FBUywwREFBMEQsU0FBUyxnQkFBZ0IsMkNBQTJDLGtCQUFrQiw4SEFBOEgsY0FBYyxxREFBcUQsb0JBQW9CLDZFQUE2RSxvQkFBb0IsYUFBYSw0TkFBNE4sb0JBQW9CLHNMQUFzTCxzQkFBc0IsK0VBQStFLGtCQUFrQiw2R0FBNkcsaUNBQWlDLG1CQUFtQiwwRUFBMEUsMkNBQTJDLCtDQUErQyx1REFBdUQsaURBQWlELHdDQUF3QyxRQUFRLFlBQVksb0JBQW9CLDBCQUEwQix5R0FBeUcsaUNBQWlDLG1CQUFtQix3Q0FBd0Msd0NBQXdDLGlEQUFpRCxtREFBbUQsbURBQW1ELDBDQUEwQyxRQUFRLFlBQVksc0JBQXNCLDBHQUEwRyxpQ0FBaUMsbUJBQW1CLDJEQUEyRCwyREFBMkQsbURBQW1ELG9EQUFvRCxxREFBcUQsNENBQTRDLFFBQVEsWUFBWSx5QkFBeUIsSUFBSSxLQUFLLDBCQUEwQiw4R0FBOEcsbUJBQW1CLFVBQVUsZ0JBQWdCLFNBQVMsRUFBRSxjQUFjLG1CQUFtQixjQUFjLHNEQUFzRCxTQUFTLHlGQUF5RixtREFBbUQsUUFBUSxPQUFPLE1BQU0sbUJBQW1CLDRIQUE0SCxZQUFZLFVBQVUsWUFBWSxTQUFTLEVBQUUsdUhBQXVILG9EQUFvRCxRQUFRLEtBQUssT0FBTyxNQUFNLG1CQUFtQixnQ0FBZ0MsWUFBWSxpREFBaUQsaUNBQWlDLHVDQUF1QyxxQkFBcUIsS0FBSyxtQ0FBbUMsb0JBQW9CLGFBQWEsZ0JBQWdCLE1BQU0sNkVBQTZFLDRDQUE0QyxhQUFhLEtBQUssV0FBVyxzRUFBc0UscUJBQXFCLFdBQVcsV0FBVyxnSUFBZ0ksZ0NBQWdDLGNBQWMsZ0JBQWdCLFVBQVUsU0FBUyxrREFBa0QseUJBQXlCLCtCQUErQixrREFBa0Qsa0JBQWtCLGdCQUFnQixtQ0FBbUMsdUJBQXVCLGFBQWEsZ0JBQWdCLE1BQU0sNkVBQTZFLHNDQUFzQyxhQUFhLEtBQUssUUFBUSxvRkFBb0YscUJBQXFCLFdBQVcsUUFBUSw4SUFBOEksZ0NBQWdDLGNBQWMsZ0JBQWdCLG9CQUFvQixtREFBbUQsMENBQTBDLFFBQVEsOExBQThMLFVBQVUsaUJBQWlCLFNBQVMsMEJBQTBCLDJCQUEyQiw4QkFBOEIsV0FBVyw4QkFBOEIsZUFBZSxlQUFlLDJFQUEyRSwwQ0FBMEMsaUJBQWlCLGlCQUFpQixtREFBbUQsdUhBQXVILEVBQUUsZUFBZSxPQUFPLG1EQUFtRCxtQkFBbUIsb0JBQW9CLHdCQUF3Qix5QkFBeUIsZ0JBQWdCLHFGQUFxRix5QkFBeUIsbUJBQW1CLDBEQUEwRCxjQUFjLDBDQUEwQyxpQkFBaUIsa0NBQWtDLG9DQUFvQyxrQkFBa0IsaUNBQWlDLEdBQUcsT0FBTyxpRUFBaUUsbUNBQW1DLGdCQUFnQiwwQkFBMEIsV0FBVyxHQUFHLCtGQUErRixpQkFBaUIsT0FBTyw0RUFBNEUsVUFBVSxjQUFjLE9BQU8sU0FBUyxxQkFBcUIscUJBQXFCLE1BQU0sb0JBQW9CLE1BQU0sOERBQThELGFBQWEsc0JBQXNCLGlCQUFpQixzQ0FBc0Msa0JBQWtCLCtHQUErRyxhQUFhLGtCQUFrQix3QkFBd0IsRUFBRSxzQ0FBc0MsMkJBQTJCLDRDQUE0QywyREFBMkQsRUFBRSxHQUFHLFlBQVksa0JBQWtCLDJDQUEyQyxnQkFBZ0IsUUFBUSxJQUFJLFFBQVEsa0NBQWtDLDRFQUE0RSxNQUFNLE1BQU0sUUFBUSxjQUFjLHlHQUF5RyxRQUFRLGlFQUFpRSxzQ0FBc0MsMERBQTBELHVFQUF1RSxxSUFBcUksaUJBQWlCLDhDQUE4QyxVQUFVLGlCQUFpQixrQkFBa0IscUNBQXFDLFdBQVcsZUFBZSx1QkFBdUIsaUJBQWlCLG9DQUFvQyxjQUFjLDBCQUEwQixjQUFjLDBCQUEwQix1QkFBdUIsZUFBZSxrQkFBa0Isd0dBQXdHLGVBQWUsMkNBQTJDLGVBQWUsOERBQThELGNBQWMsa0NBQWtDLGVBQWUsOEJBQThCLFlBQVksZUFBZSxZQUFZLFNBQVMsRUFBRSxlQUFlLHNCQUFzQiw4REFBOEQsZ05BQWdOLDZCQUE2Qix3QkFBd0IsMkJBQTJCLFNBQVMsZUFBZSxLQUFLLGlCQUFpQixFQUFFLDZDQUE2QyxXQUFXLHNDQUFzQyxZQUFZLDBFQUEwRSxjQUFjLG9CQUFvQixpQkFBaUIscUJBQXFCLFlBQVksdUJBQXVCLCtCQUErQixTQUFTLHlCQUF5QiwrSkFBK0osZUFBZSxPQUFPLGdDQUFnQywrREFBK0Qsd0RBQXdELHFCQUFxQixLQUFLLFFBQVEsR0FBRyxzREFBc0Qsd0NBQXdDLG9CQUFvQix1RkFBdUYsZ0JBQWdCLFVBQVUsU0FBUyxjQUFjLDRCQUE0Qix1SEFBdUgsY0FBYyxhQUFhLGNBQWMsbUJBQW1CLHVEQUF1RCxlQUFlLE9BQU8sc0JBQXNCLFNBQVMsRUFBRSxjQUFjLG9DQUFvQyxNQUFNLHlDQUF5QyxjQUFjLE9BQU8sdUVBQXVFLHVEQUF1RCxjQUFjLGNBQWMsbUJBQW1CLGdDQUFnQyxlQUFlLHlDQUF5QyxzQkFBc0IsS0FBSyxhQUFhLDJDQUEyQyxvQkFBb0IsR0FBRywwR0FBMEcsOENBQThDLFVBQVUsY0FBYyxPQUFPLHdEQUF3RCxlQUFlLFNBQVMsMkpBQTJKLGVBQWUsaUNBQWlDLDBDQUEwQywrQkFBK0IsOEJBQThCLGVBQWUsNEJBQTRCLHNDQUFzQyxtQkFBbUIsK0RBQStELDRCQUE0QixpQkFBaUIsVUFBVSxFQUFFLGdCQUFnQixnQkFBZ0Isb0hBQW9ILElBQUksV0FBVyxtQkFBbUIsaUJBQWlCLGtDQUFrQyxlQUFlLHFCQUFxQixtQkFBbUIsY0FBYyxnQ0FBZ0Msd0JBQXdCLDhCQUE4QixhQUFhLGFBQWEsYUFBYSx1QkFBdUIsK0JBQStCLDRDQUE0QyxLQUFLLFNBQVMsNkJBQTZCLEdBQUcseUJBQXlCLHFDQUFxQyxtQkFBbUIsOEJBQThCLGlIQUFpSCxpQkFBaUIsb0JBQW9CLHdCQUF3QixTQUFTLFFBQVEsNEhBQTRILG1EQUFtRCw0REFBNEQsUUFBUSxpSUFBaUksbURBQW1ELFNBQVMsdUJBQXVCLGtGQUFrRixvRUFBb0UsMERBQTBELGVBQWUscUJBQXFCLGdDQUFnQyx3QkFBd0IsK0NBQStDLGFBQWEsZUFBZSxlQUFlLDRCQUE0QixhQUFhLDJHQUEyRyxZQUFZLG1CQUFtQixxQkFBcUIsTUFBTSxrQ0FBa0MsTUFBTSxXQUFXLG1DQUFtQywrSEFBK0gsdUJBQXVCLGVBQWUsMkRBQTJELDBCQUEwQixTQUFTLG1CQUFtQixrQkFBa0Isc0JBQXNCLDZHQUE2RyxxQkFBcUIsdUNBQXVDLG1CQUFtQixvQkFBb0IsYUFBYSxFQUFFLGVBQWUsb0JBQW9CLFVBQVUsSUFBSSxVQUFVLGVBQWUsU0FBUyxVQUFVLGVBQWUsY0FBYyxvQkFBb0IsZUFBZSxXQUFXLHlCQUF5QixRQUFRLGFBQWEsT0FBTyxJQUFJLElBQUksUUFBUSxTQUFTLDhDQUE4Qyw4RUFBOEUsR0FBRyxxQkFBcUIsd0RBQXdELHVCQUF1Qiw2QkFBNkIsd0JBQXdCLE9BQU8sbUhBQW1ILHNCQUFzQiw4SEFBOEgsaUJBQWlCLHFDQUFxQyxtQkFBbUIsZUFBZSxNQUFNLElBQUksbUJBQW1CLDJCQUEyQixTQUFTLFVBQVUsUUFBUSxtREFBbUQsU0FBUyxtQkFBbUIsU0FBUyxXQUFXLG1CQUFtQiwyRUFBMkUsVUFBVSxhQUFhLGlCQUFpQixZQUFZLG1CQUFtQixpSUFBaUksbUJBQW1CLGdCQUFnQiw0QkFBNEIsU0FBUyxpREFBaUQsYUFBYSxjQUFjLGVBQWUsY0FBYyxZQUFZLFdBQVcsZUFBZSxpQkFBaUIsU0FBUyxpQkFBaUIsT0FBTyxtQkFBbUIsYUFBYSxHQUFHLFNBQVMsT0FBTyxPQUFPLEdBQUcsa0JBQWtCLGVBQWUsc0NBQXNDLE9BQU8sUUFBUSxvQ0FBb0MsTUFBTSxxQ0FBcUMsU0FBUyxNQUFNLEtBQUssYUFBYSw4Q0FBOEMsOEVBQThFLDhGQUE4Riw0Q0FBNEMsNEVBQTRFLGVBQWUscUJBQXFCLG1CQUFtQiwyRkFBMkYsWUFBWSxTQUFTLG1CQUFtQixRQUFRLFNBQVMsa0NBQWtDLGtEQUFrRCxlQUFlLGtDQUFrQyxpQkFBaUIsV0FBVyxlQUFlLGdCQUFnQiw2QkFBNkIsdUJBQXVCLDhCQUE4QixrQ0FBa0MscUJBQXFCLFVBQVUsdUNBQXVDLGtKQUFrSixjQUFjLDBCQUEwQixxQkFBcUIsV0FBVyxvQ0FBb0MsZUFBZSxzQkFBc0IscUJBQXFCLFdBQVcsb0JBQW9CLDJCQUEyQix5SEFBeUgsaUJBQWlCLGtCQUFrQixpQkFBaUIsZUFBZSxpQkFBaUIsbUJBQW1CLGlCQUFpQixtQkFBbUIsaUJBQWlCLHlCQUF5QixlQUFlLGtCQUFrQixrQ0FBa0MsNkNBQTZDLGdCQUFnQixtQkFBbUIseURBQXlELGVBQWUsaUJBQWlCLFdBQVcsb0JBQW9CLHNCQUFzQiwyREFBMkQsaUJBQWlCLFdBQVcsb0JBQW9CLHNCQUFzQixvQ0FBb0MsYUFBYSxPQUFPLElBQUksSUFBSSxRQUFRLFFBQVEsK0JBQStCLG1CQUFtQix1R0FBdUcscUJBQXFCLHdKQUF3Six1QkFBdUIsVUFBVSxtQkFBbUIsZUFBZSxtQkFBbUIsSUFBSSxnQkFBZ0IsNkVBQTZFLG1CQUFtQix5REFBeUQsV0FBVyxtQkFBbUIsK0JBQStCLFlBQVksV0FBVyxnQkFBZ0IsYUFBYSx1Q0FBdUMsV0FBVyxxQkFBcUIsS0FBSyxnQkFBZ0IscUJBQXFCLFNBQVMsUUFBUSxpQkFBaUIsNEJBQTRCLE9BQU8sUUFBUSx5REFBeUQsZUFBZSxxQkFBcUIsaUNBQWlDLGtCQUFrQixrQ0FBa0Msa0JBQWtCLEVBQUUsZUFBZSxzQkFBc0IscUJBQXFCLFNBQVMsVUFBVSxrREFBa0QsOEVBQThFLFdBQVcsUUFBUSxrREFBa0QsOEVBQThFLFdBQVcsaUVBQWlFLGVBQWUsWUFBWSxpRUFBaUUsT0FBTyxjQUFjLGNBQWMsY0FBYywwQkFBMEIsY0FBYywwQkFBMEIsZUFBZSxtQkFBbUIsU0FBUyxFQUFFLGNBQWMsNENBQTRDLG1DQUFtQyxXQUFXLGFBQWEsT0FBTyxZQUFZLG1CQUFtQixXQUFXLEdBQUcscUZBQXFGLDZEQUE2RCxtQkFBbUIsZUFBZSxxQkFBcUIsT0FBTyxzRkFBc0YsaUJBQWlCLEtBQUssa0JBQWtCLDhFQUE4RSxtQ0FBbUMsbUZBQW1GLFVBQVUsU0FBUyx3REFBd0QsU0FBUyxxQkFBcUIsTUFBTSx3RkFBd0YsUUFBUSx5QkFBeUIsdUNBQXVDLGVBQWUsa0JBQWtCLGdDQUFnQyxpQkFBaUIsU0FBUyxnQkFBZ0IsdURBQXVELG1CQUFtQixtQkFBbUIsY0FBYyx3Q0FBd0MsUUFBUSx1WEFBdVgsS0FBSyxnREFBZ0Qsa0RBQWtELGdFQUFnRSwrREFBK0QsK0JBQStCLHlCQUF5QixrQ0FBa0MsWUFBWSx1QkFBdUIsV0FBVyxvQkFBb0IsVUFBVSxPQUFPLE9BQU8sSUFBSSxJQUFJLFFBQVEsUUFBUSwrQkFBK0IsNEJBQTRCLFdBQVcsZUFBZSxXQUFXLE9BQU8sT0FBTyxJQUFJLEtBQUssUUFBUSxTQUFTLFNBQVMsZ0RBQWdELDZFQUE2RSxxREFBcUQsb0JBQW9CLDZCQUE2QixXQUFXLHNCQUFzQiwyQ0FBMkMsd0NBQXdDLGlEQUFpRCxvQkFBb0IsMEJBQTBCLGFBQWEsb0VBQW9FLHNDQUFzQyxnQkFBZ0IsT0FBTyxrQ0FBa0MsTUFBTSxLQUFLLHVDQUF1Qyx1QkFBdUIsa0JBQWtCLE9BQU8sdUJBQXVCLGlFQUFpRSxlQUFlLCtCQUErQixrQkFBa0IsaUNBQWlDLE9BQU8sY0FBYyxnR0FBZ0csNENBQTRDLHlCQUF5Qix3RkFBd0YsV0FBVyw4QkFBOEIsT0FBTyxvRkFBb0YsNERBQTRELDRDQUE0Qyw0Q0FBNEMsS0FBSyx1TEFBdUwsY0FBYyxpREFBaUQscUNBQXFDLDBCQUEwQixxQ0FBcUMsc0NBQXNDLDJIQUEySCx1QkFBdUIsb0NBQW9DLEtBQUssdUxBQXVMLGNBQWMsaURBQWlELFdBQVcsc0RBQXNELDBCQUEwQixxQ0FBcUMsc0NBQXNDLDJIQUEySCxXQUFXLG1FQUFtRSxxQ0FBcUMscUJBQXFCLHlDQUF5QyxpRUFBaUUsUUFBUSxnQ0FBZ0Msb0JBQW9CLG1CQUFtQixnRkFBZ0YscUNBQXFDLG9CQUFvQixtQkFBbUIsd0ZBQXdGLGtDQUFrQyxvQkFBb0IsbUJBQW1CLDhFQUE4RSwyQkFBMkIsaUtBQWlLLHFCQUFxQiw4T0FBOE8saUJBQWlCLFFBQVEsOEJBQThCLDBCQUEwQiwrQ0FBK0Msa0NBQWtDLFNBQVMsZUFBZSxNQUFNLGVBQWUsaUJBQWlCLGVBQWUsTUFBTSxpQkFBaUIsSUFBSSwrQkFBK0IsdUJBQXVCLEVBQUUsU0FBUyxzQkFBc0IsUUFBUSxHQUFHLG1CQUFtQixJQUFJLDZCQUE2QixnRUFBZ0UsRUFBRSxTQUFTLHNCQUFzQixRQUFRLEdBQUcsbUJBQW1CLGlDQUFpQyxhQUFhLHVCQUF1QixRQUFRLEdBQUcsZUFBZSx3QkFBd0IscUJBQXFCLHNDQUFzQyx5QkFBeUIsY0FBYyxxQkFBcUIsWUFBWSx1QkFBdUIsV0FBVyxrQkFBa0IseUVBQXlFLDRFQUE0RSxjQUFjLGdDQUFnQyw2QkFBNkIsRUFBRSxFQUFFLDJCQUEyQixxQkFBcUIsa0RBQWtELHVCQUF1QixXQUFXLFlBQVksY0FBYyxTQUFTLHNDQUFzQyxTQUFTLHdIQUF3SCx1QkFBdUIsYUFBYSxhQUFhLGlMQUFpTCx1QkFBdUIsc0JBQXNCLHNFQUFzRSw2REFBNkQsdUJBQXVCLGFBQWEsc0JBQXNCLGdHQUFnRyxrQ0FBa0MscUJBQXFCLHFCQUFxQixpREFBaUQsc0JBQXNCLHFCQUFxQix3Q0FBd0MsMEJBQTBCLFNBQVMsc0NBQXNDLGtCQUFrQixpQ0FBaUMsbUJBQW1CLCtGQUErRixpQkFBaUIsMkJBQTJCLHVFQUF1RSx1R0FBdUcsMkJBQTJCLHFCQUFxQixXQUFXLHdCQUF3Qix1Q0FBdUMsZ0NBQWdDLDZEQUE2RCxpQkFBaUIsYUFBYSxnQ0FBZ0MsMkNBQTJDLG1CQUFtQiwyRkFBMkYsaUJBQWlCLFlBQVksdURBQXVELEtBQUssZ0VBQWdFLDJDQUEyQyx1QkFBdUIsNkhBQTZILHlCQUF5Qiw2SUFBNkksdUJBQXVCLDZCQUE2Qix5QkFBeUIsMk5BQTJOLG9xQkFBb3FCLGtCQUFrQixjQUFjLGdDQUFnQyxVQUFVLGdDQUFnQyw2Q0FBNkMsaUNBQWlDLGtPQUFrTyxzQkFBc0IsNG5CQUE0bkIsS0FBSyw4YUFBOGEsc0JBQXNCLGdpQ0FBZ2lDLHVRQUF1USxxQkFBcUIsNkNBQTZDLFFBQVEsbUVBQW1FLGVBQWUsT0FBTyw0QkFBNEIsbUJBQW1CLGlEQUFpRCxtQkFBbUIsK0NBQStDLHFJQUFxSSxPQUFPLCtGQUErRixvQ0FBb0Msa0JBQWtCLGdEQUFnRCx3RUFBd0UsZ0RBQWdELGlCQUFpQixvQ0FBb0MseUJBQXlCLHFLQUFxSyxzQkFBc0Isc0NBQXNDLHlKQUF5SixtQ0FBbUMsZ0xBQWdMLHFCQUFxQix1REFBdUQsOENBQThDLCtCQUErQixjQUFjLHNEQUFzRCw0RkFBNEYsd0JBQXdCLG9LQUFvSyxTQUFTLHFFQUFxRSxrQ0FBa0MseVBBQXlQLGdCQUFnQixjQUFjLG9DQUFvQyx1R0FBdUcsbUNBQW1DLHdJQUF3SSxpQkFBaUIsYUFBYSwwQkFBMEIsNkJBQTZCLGlCQUFpQiwrQ0FBK0Msc0VBQXNFLEdBQUcsbUJBQW1CLDhGQUE4RixtQkFBbUIsV0FBVyxrQkFBa0Isd0NBQXdDLHlCQUF5QixzQkFBc0IsMEJBQTBCLDJGQUEyRiw0R0FBNEcsbUJBQW1CLDhDQUE4QyxhQUFhLDRCQUE0Qiw4R0FBOEcsU0FBUyxFQUFFLGdEQUFnRCw2QkFBNkIsd0JBQXdCLDJCQUEyQixTQUFTLGVBQWUsS0FBSyxpQkFBaUIsRUFBRSx5Q0FBeUMsV0FBVyxzQ0FBc0MsVUFBVSxvQ0FBb0MsU0FBUyx5REFBeUQsb0ZBQW9GLE1BQU0sa0ZBQWtGLFNBQVMsRUFBRSx5Q0FBeUMsVUFBVSxNQUFNLGdDQUFnQyxvQkFBb0IsTUFBTSwyQ0FBMkMsTUFBTSw2QkFBNkIsZUFBZSxtQkFBbUIsOEVBQThFLHdCQUF3QixxREFBcUQsbURBQW1ELG1CQUFtQix3REFBd0QsaUJBQWlCLHlEQUF5RCxlQUFlLGVBQWUsaUJBQWlCLDREQUE0RCxtQkFBbUIsc0RBQXNELEtBQUssMkRBQTJELGNBQWMsMEVBQTBFLE1BQU0sb0JBQW9CLE1BQU0sc0NBQXNDLE1BQU0sMkNBQTJDLE1BQU0saUVBQWlFLE1BQU0sOEJBQThCLGFBQWEsc0RBQXNELDhDQUE4QyxpREFBaUQsTUFBTSxNQUFNLCtCQUErQixvRUFBb0Usc0JBQXNCLGFBQWEsZ0hBQWdILE1BQU0sa0RBQWtELHVDQUF1QyxpQkFBaUIsUUFBUSx1QkFBdUIsc0RBQXNELHdCQUF3QixXQUFXLGlCQUFpQiw4QkFBOEIsMkhBQTJILEtBQUssWUFBWSx1QkFBdUIsNEJBQTRCLFFBQVEsZUFBZSw0QkFBNEIsU0FBUyxrQ0FBa0MsdUJBQXVCLCtFQUErRSwrQkFBK0IsVUFBVSx3QkFBd0Isd0JBQXdCLDBCQUEwQix3QkFBd0IsNEJBQTRCLHdCQUF3Qix5Q0FBeUMsc0JBQXNCLHVDQUF1Qyw2REFBNkQsc0JBQXNCLG1HQUFtRyxpRUFBaUUsOEJBQThCLElBQUksZUFBZSxXQUFXLFlBQVksYUFBYSxTQUFTLDhDQUE4QywwREFBMEQsVUFBVSwrREFBK0QsaUJBQWlCLHNCQUFzQixtQ0FBbUMsc0JBQXNCLHlGQUF5Rix3Q0FBd0MsMERBQTBELGNBQWMsUUFBUSxlQUFlLHdDQUF3QyxRQUFRLGdMQUFnTCxFQUFFLHFDQUFxQyxLQUFLLGVBQWUsWUFBWSxRQUFRLFlBQVksVUFBVSxTQUFTLHdSQUF3UixnT0FBZ08sb0VBQW9FLEtBQUssZUFBZSxFQUFFLCtDQUErQyx1REFBdUQsV0FBVyxvQkFBb0IsZ0RBQWdELFNBQVMsK1NBQStTLFNBQVMsdURBQXVELFNBQVMscVFBQXFRLFNBQVMsa0JBQWtCLEtBQUssMkNBQTJDLGtDQUFrQywwREFBMEQsc0NBQXNDLFlBQVksOFRBQThULGtFQUFrRSxzQkFBc0IsS0FBSyxlQUFlLDRHQUE0RyxTQUFTLDhFQUE4RSx5QkFBeUIsa0hBQWtILCtDQUErQywrQ0FBK0MsZ0VBQWdFLGtGQUFrRiw0R0FBNEcsK0NBQStDLCtDQUErQyx5QkFBeUIsNkVBQTZFLDZCQUE2Qiw0RkFBNEYsb0NBQW9DLGtCQUFrQixnREFBZ0Qsd0VBQXdFLDBCQUEwQixlQUFlLHNHQUFzRyxtRUFBbUUseUJBQXlCLHNEQUFzRCw0RkFBNEYsaUJBQWlCLDZHQUE2RyxtQkFBbUIsZ0NBQWdDLHNDQUFzQyxTQUFTLHdDQUF3QywySkFBMkosaUJBQWlCLDBIQUEwSCxpQkFBaUIscUxBQXFMLDZCQUE2QiwwQkFBMEIsZUFBZSxXQUFXLHVCQUF1QixpQ0FBaUMsK0VBQStFLDJCQUEyQixvQkFBb0IseUJBQXlCLGlCQUFpQixxRUFBcUUsd0RBQXdELG9CQUFvQixpQkFBaUIsc0ZBQXNGLGlCQUFpQiwwQkFBMEIsc0JBQXNCLGVBQWUsU0FBUyx1Q0FBdUMsb0NBQW9DLE1BQU0seUJBQXlCLGVBQWUsU0FBUyx1Q0FBdUMsMEVBQTBFLGVBQWUsOERBQThELHVCQUF1QixTQUFTLGlHQUFpRyxtQkFBbUIsU0FBUyw2RUFBNkUsMENBQTBDLGlCQUFpQixvQkFBb0Isa0JBQWtCLE1BQU0sNEJBQTRCLE1BQU0sV0FBVyxNQUFNLHNDQUFzQyxNQUFNLGNBQWMsTUFBTSxjQUFjLE1BQU0sbUJBQW1CLE1BQU0sMkNBQTJDLE1BQU0sZ0JBQWdCLGlCQUFpQixJQUFJLGlEQUFpRCxhQUFhLGFBQWEsSUFBSSxHQUFHLGtCQUFrQixTQUFTLGVBQWUscUJBQXFCLFNBQVMsY0FBYyxTQUFTLGtCQUFrQixtQkFBbUIsSUFBSSxpREFBaUQsYUFBYSxhQUFhLElBQUksR0FBRyxrQkFBa0IseUJBQXlCLGVBQWUscUJBQXFCLElBQUksSUFBSSxTQUFTLFlBQVksU0FBUyxjQUFjLFNBQVMsa0JBQWtCLGVBQWUsb0JBQW9CLGFBQWEsa0JBQWtCLElBQUksUUFBUSxTQUFTLG1CQUFtQixtQkFBbUIsMkRBQTJELElBQUkseUJBQXlCLFNBQVMsV0FBVyxpQkFBaUIsSUFBSSxZQUFZLGFBQWEsY0FBYyx5Q0FBeUMsTUFBTSxzQkFBc0Isb0RBQW9ELFNBQVMsV0FBVyxpQkFBaUIsMkJBQTJCLHdDQUF3QyxJQUFJLFNBQVMsVUFBVSxRQUFRLDZEQUE2RCxpQ0FBaUMsUUFBUSxTQUFTLFVBQVUsb0JBQW9CLGVBQWUsNkNBQTZDLElBQUksVUFBVSw0RUFBNEUsTUFBTSwyREFBMkQsU0FBUyxrQkFBa0IsbUJBQW1CLElBQUksa0JBQWtCLG1CQUFtQixVQUFVLGlGQUFpRixpRUFBaUUsWUFBWSxXQUFXLDBDQUEwQyxnQ0FBZ0MsdUJBQXVCLGlEQUFpRCxnQkFBZ0IsV0FBVyw0REFBNEQsZUFBZSxNQUFNLGVBQWUsTUFBTSxrQkFBa0IsTUFBTSx5QkFBeUIsTUFBTSxnQkFBZ0IsTUFBTSx1QkFBdUIsTUFBTSw4RUFBOEUsTUFBTSxnQ0FBZ0Msb0JBQW9CLE9BQU8sc0ZBQXNGLGtCQUFrQixtQkFBbUIsZ0RBQWdELDhFQUE4RSxnQkFBZ0IsTUFBTSx1QkFBdUIsTUFBTSxtQkFBbUIsK0JBQStCLDJGQUEyRixPQUFPLDBHQUEwRyxpQ0FBaUMsMkJBQTJCLDhFQUE4RSxnQkFBZ0IsTUFBTSx1QkFBdUIsTUFBTSxxQkFBcUIsNERBQTRELE1BQU0sK0JBQStCLFVBQVUsT0FBTyx5SUFBeUksaUtBQWlLLE9BQU8sc1FBQXNRLHFGQUFxRiw4RUFBOEUsTUFBTSx3QkFBd0IsT0FBTyxrQkFBa0Isa0dBQWtHLCtGQUErRixRQUFRLDZGQUE2Rix5RkFBeUYsd0JBQXdCLFNBQVMsa0JBQWtCLGVBQWUsMkVBQTJFLGVBQWUsUUFBUSxFQUFFLEtBQUssaUJBQWlCLEVBQUUsNkNBQTZDLFdBQVcsMENBQTBDLGlDQUFpQyxFQUFFLDJFQUEyRSwyQkFBMkIsb0NBQW9DLG1CQUFtQixZQUFZLHFFQUFxRSxrR0FBa0csU0FBUyx1QkFBdUIsZUFBZSxvQ0FBb0MsSUFBSSxnQ0FBZ0MsU0FBUyw2QkFBNkIsMEJBQTBCLFNBQVMsa0JBQWtCLHdFQUF3RSxtQkFBbUIsY0FBYyxjQUFjLDRDQUE0QyxNQUFNLG9EQUFvRCxzQkFBc0IsU0FBUyxpQkFBaUIsS0FBSyxpQ0FBaUMsa0JBQWtCLElBQUksZ0VBQWdFLFNBQVMsa0JBQWtCLGtDQUFrQyxNQUFNLGtEQUFrRCw2Q0FBNkMsMENBQTBDLElBQUksUUFBUSxTQUFTLGtCQUFrQixNQUFNLDZCQUE2QixrRUFBa0UsTUFBTSx3QkFBd0IsTUFBTSw2QkFBNkIsTUFBTSxzR0FBc0csc0JBQXNCLGlDQUFpQyxvREFBb0QsS0FBSyxpQkFBaUIsaURBQWlELDBEQUEwRCxzQkFBc0IsTUFBTSw0Q0FBNEMsNENBQTRDLFNBQVMsa0NBQWtDLDRDQUE0QyxTQUFTLEVBQUUsb0NBQW9DLGNBQWMsd0NBQXdDLE1BQU0sK0VBQStFLHNCQUFzQixTQUFTLGlCQUFpQixpQ0FBaUMsa0JBQWtCLElBQUksK0JBQStCLGtEQUFrRCxXQUFXLGVBQWUsU0FBUyxrQkFBa0IsOEJBQThCLE1BQU0sY0FBYywrREFBK0QsTUFBTSx5QkFBeUIsTUFBTSxpQ0FBaUMsTUFBTSxpQ0FBaUMsTUFBTSx3REFBd0QsU0FBUyxhQUFhLGlEQUFpRCxVQUFVLGtCQUFrQixtQkFBbUIsY0FBYyxTQUFTLHVCQUF1QixtQkFBbUIsc0RBQXNELDhCQUE4QixVQUFVLGNBQWMsNkhBQTZILE1BQU0sb0JBQW9CLGNBQWMsdUVBQXVFLE1BQU0sbUJBQW1CLG9FQUFvRSxpR0FBaUcsU0FBUyxVQUFVLFNBQVMsNEJBQTRCLFNBQVMsVUFBVSxNQUFNLHlJQUF5SSxNQUFNLHdFQUF3RSxNQUFNLHFFQUFxRSxNQUFNLGlHQUFpRyxNQUFNLDBCQUEwQixNQUFNLDBEQUEwRCxpQkFBaUIsK0VBQStFLGVBQWUsSUFBSSxNQUFNLFNBQVMsbUJBQW1CLGlCQUFpQiwyR0FBMkcsTUFBTSxTQUFTLGtCQUFrQixpQkFBaUIsa0JBQWtCLGNBQWMsMENBQTBDLDBDQUEwQyxrRkFBa0YsbUNBQW1DLElBQUksc0JBQXNCLHdCQUF3QixpQ0FBaUMsRUFBRSxpQkFBaUIsa0JBQWtCLHdCQUF3QixXQUFXLEtBQUssdUJBQXVCLE9BQU8sU0FBUyxFQUFFLGNBQWMsdUJBQXVCLHFCQUFxQixRQUFRLE1BQU0sNEJBQTRCLFFBQVEsaURBQWlELFFBQVEsV0FBVyxpQ0FBaUMsOEVBQThFLHNDQUFzQyxTQUFTLHFCQUFxQixZQUFZLGlCQUFpQiw0QkFBNEIsY0FBYyw4RkFBOEYsTUFBTSxvTUFBb00sTUFBTSxpQkFBaUIsNERBQTRELG9DQUFvQyxpRUFBaUUsR0FBRyxnREFBZ0QsWUFBWSwwUEFBMFAsUUFBUSx5REFBeUQsTUFBTSxZQUFZLFdBQVcsb1FBQW9RLGNBQWMsU0FBUyxtREFBbUQsTUFBTSwrREFBK0QsUUFBUSxXQUFXLHdVQUF3VSxjQUFjLFNBQVMsbURBQW1ELE1BQU0sOEJBQThCLGtCQUFrQixjQUFjLDhCQUE4Qix5Q0FBeUMsNE5BQTROLE1BQU0saUhBQWlILE1BQU0sMEVBQTBFLGNBQWMsSUFBSSxTQUFTLFNBQVMsa0JBQWtCLCtGQUErRixNQUFNLDZCQUE2QiwwQ0FBMEMsZ0NBQWdDLElBQUksY0FBYyxTQUFTLGtCQUFrQixNQUFNLGlIQUFpSCxvQkFBb0IsU0FBUyxpQkFBaUIseUJBQXlCLHFDQUFxQyxTQUFTLEVBQUUsUUFBUSwrREFBK0QsS0FBSyxNQUFNLGdFQUFnRSxNQUFNLDhCQUE4QixNQUFNLDBGQUEwRixNQUFNLDRLQUE0SyxNQUFNLGlDQUFpQyxpREFBaUQsOEpBQThKLGNBQWMsU0FBUyxFQUFFLFFBQVEsY0FBYyxxREFBcUQsTUFBTSxzQkFBc0Isa0JBQWtCLGlFQUFpRSxNQUFNLHdCQUF3QixtQ0FBbUMsTUFBTSxxQ0FBcUMsTUFBTSxhQUFhLGFBQWEsaUJBQWlCLEVBQUUsMEJBQTBCLGFBQWEsTUFBTSxJQUFJLDJIQUEySCxLQUFLLGNBQWMsa0ZBQWtGLCtEQUErRCxTQUFTLG1CQUFtQixtQkFBbUIsYUFBYSxJQUFJLElBQUksMkNBQTJDLFNBQVMsbUJBQW1CLG9CQUFvQixhQUFhLElBQUksSUFBSSxrQkFBa0IsOEJBQThCLFNBQVMsbUJBQW1CLGlGQUFpRiwyQkFBMkIsU0FBUyxlQUFlLEtBQUssaUJBQWlCLEVBQUUseUNBQXlDLDJCQUEyQixzREFBc0Qsb0ZBQW9GLGtCQUFrQixlQUFlLGNBQWMsUUFBUSxJQUFJLHFCQUFxQixTQUFTLEVBQUUsVUFBVSxJQUFJLE1BQU0sV0FBVywrQkFBK0IsY0FBYyxrQ0FBa0MsVUFBVSxNQUFNLHlCQUF5QixvQ0FBb0MsWUFBWSxVQUFVLE1BQU0sc0RBQXNELG1CQUFtQixZQUFZLDZRQUE2USx3R0FBd0csU0FBUyxzQkFBc0IsUUFBUSxNQUFNLDZCQUE2QixTQUFTLGlCQUFpQixZQUFZLHlCQUF5QixpQkFBaUIscUNBQXFDLFNBQVMsaUNBQWlDLGlCQUFpQixXQUFXLHlQQUF5UCxpQkFBaUIsNEhBQTRILHFCQUFxQixzQ0FBc0MsU0FBUyx5QkFBeUIscUJBQXFCLGNBQWMsY0FBYyxtREFBbUQsTUFBTSwyQ0FBMkMsTUFBTSx5SkFBeUosTUFBTSxtQkFBbUIsMEJBQTBCLElBQUksOENBQThDLDBGQUEwRixTQUFTLGtCQUFrQixpQkFBaUIsTUFBTSxjQUFjLG1LQUFtSyw2Q0FBNkMsU0FBUyxFQUFFLGtCQUFrQixjQUFjLDRDQUE0QyxNQUFNLGNBQWMsMEJBQTBCLHlIQUF5SCxNQUFNLGtEQUFrRCxNQUFNLHFCQUFxQixhQUFhLHFEQUFxRCxNQUFNLCtDQUErQyxpQkFBaUIsc0NBQXNDLFNBQVMsRUFBRSxrQkFBa0IsY0FBYywwQ0FBMEMsTUFBTSwwQ0FBMEMsTUFBTSxnQkFBZ0IsYUFBYSxZQUFZLGVBQWUsbUNBQW1DLFNBQVMsbUJBQW1CLGVBQWUsY0FBYyxrRUFBa0UsaUNBQWlDLFNBQVMsZ0hBQWdILHNCQUFzQiwwQ0FBMEMsTUFBTSwySUFBMkksT0FBTyxrRkFBa0YsUUFBUSwrQkFBK0IsdUJBQXVCLDhCQUE4Qix1TUFBdU0scUNBQXFDLE1BQU0scUJBQXFCLE1BQU0sdUJBQXVCLDRDQUE0QyxNQUFNLHVIQUF1SCxlQUFlLGtCQUFrQixpQ0FBaUMsYUFBYSxrQ0FBa0MsaUJBQWlCLGVBQWUsa0JBQWtCLG9CQUFvQix3QkFBd0IsV0FBVyxLQUFLLFdBQVcsYUFBYSxNQUFNLHNDQUFzQyxTQUFTLG1CQUFtQixlQUFlLGNBQWMsNERBQTRELE1BQU0sNkJBQTZCLE1BQU0sMEJBQTBCLCtHQUErRyxrQkFBa0Isb0JBQW9CLHdCQUF3QixXQUFXLEtBQUssV0FBVyxhQUFhLE1BQU0sY0FBYyxTQUFTLEVBQUUsa0JBQWtCLDZDQUE2QyxNQUFNLGdFQUFnRSxNQUFNLGFBQWEsYUFBYSxZQUFZLGlCQUFpQixLQUFLLFVBQVUsRUFBRSxTQUFTLGNBQWMsaUNBQWlDLE1BQU0sNkVBQTZFLHFDQUFxQyxzQkFBc0IsTUFBTSxrQ0FBa0Msc0NBQXNDLGFBQWEsVUFBVSxFQUFFLGdDQUFnQyxrQkFBa0Isa0JBQWtCLDZRQUE2USxXQUFXLFFBQVEsTUFBTSxhQUFhLGdCQUFnQixNQUFNLE9BQU8sUUFBUSw0QkFBNEIsNkJBQTZCLDZDQUE2Qyx3QkFBd0IsaUNBQWlDLHFQQUFxUCxjQUFjLHFEQUFxRCxjQUFjLG9EQUFvRCxpQkFBaUIsa0NBQWtDLG1CQUFtQiw0S0FBNEssbUJBQW1CLGlDQUFpQywyRUFBMkUsU0FBUyxNQUFNLGtCQUFrQix3REFBd0QsUUFBUSxLQUFLLHNCQUFzQixLQUFLLFNBQVMsYUFBYSxnQ0FBZ0MsTUFBTSx3QkFBd0IsbUJBQW1CLE1BQU0sYUFBYSxxQ0FBcUMsYUFBYSxRQUFRLFlBQVksUUFBUSxZQUFZLFFBQVEsNkRBQTZELE1BQU0sa0JBQWtCLGVBQWUsMkJBQTJCLHdCQUF3QixpQ0FBaUMsYUFBYSxnQkFBZ0IsaUJBQWlCLEtBQUssZUFBZSw4QkFBOEIsU0FBUyx5QkFBeUIsTUFBTSxnQ0FBZ0MsTUFBTSxpQkFBaUIsUUFBUSw2QkFBNkIsS0FBSyxpQkFBaUIsUUFBUSxNQUFNLFNBQVMsUUFBUSx1RUFBdUUsc0JBQXNCLEVBQUUsOEJBQThCLEtBQUsseUNBQXlDLGFBQWEsRUFBRSxZQUFZLHFHQUFxRyxXQUFXLEtBQUssMkJBQTJCLFVBQVUsSUFBSSx1QkFBdUIsU0FBUyxVQUFVLDJEQUEyRCxLQUFLLGVBQWUsS0FBSyxpQkFBaUIsRUFBRSwwQ0FBMEMsV0FBVyx1Q0FBdUMsU0FBUyxLQUFLLGtCQUFrQixTQUFTLFVBQVUsOENBQThDLHFFQUFxRSxVQUFVLElBQUksR0FBRyxLQUFLLDJDQUEyQywrQ0FBK0MsV0FBVywwQ0FBMEMsUUFBUSx5REFBeUQsSUFBSSx3QkFBd0IsVUFBVSxxQkFBcUIsTUFBTSxHQUFHLGdCQUFnQixrQ0FBa0MsZ0NBQWdDLHNCQUFzQixRQUFRLGVBQWUsTUFBTSxvQkFBb0IsNEJBQTRCLDBDQUEwQyx5Q0FBeUMsd0VBQXdFLFFBQVEseUNBQXlDLE1BQU0sTUFBTSx5Q0FBeUMsZ0ZBQWdGLHNDQUFzQyw0QkFBNEIsaUNBQWlDLFNBQVMsNkVBQTZFLDRCQUE0QixtREFBbUQsa0JBQWtCLHNCQUFzQixNQUFNLGdDQUFnQyxrQ0FBa0MsTUFBTSxNQUFNLDhFQUE4RSxPQUFPLHNCQUFzQixxQkFBcUIsNEZBQTRGLFlBQVksSUFBSSxFQUFFLHNCQUFzQixjQUFjLGlCQUFpQixjQUFjLGdDQUFnQyxjQUFjLGNBQWMsMEJBQTBCLDZDQUE2QyxLQUFLLFNBQVMsOEJBQThCLFNBQVMsaUJBQWlCLHNCQUFzQiwwT0FBME8sdUJBQXVCLG9DQUFvQyxJQUFJLEVBQUUsc0JBQXNCLGNBQWMsbUJBQW1CLGlCQUFpQixzTEFBc0wsY0FBYyxpQkFBaUIsaUdBQWlHLGNBQWMsVUFBVSw0QkFBNEIsY0FBYyxVQUFVLGdCQUFnQixjQUFjLHdIQUF3SCxtQkFBbUIsU0FBUyxNQUFNLGtCQUFrQix5Q0FBeUMsU0FBUyxRQUFRLEtBQUssc0JBQXNCLGNBQWMsV0FBVyxnQkFBZ0IsUUFBUSxzREFBc0QsU0FBUyxtQ0FBbUMsSUFBSSxRQUFRLE1BQU0sdUNBQXVDLFlBQVksS0FBSyxVQUFVLFFBQVEsU0FBUyxNQUFNLFNBQVMsUUFBUSwrRkFBK0YsZUFBZSwyQkFBMkIsbURBQW1ELGVBQWUsc0JBQXNCLGNBQWMseURBQXlELE1BQU0sd0RBQXdELE1BQU0sYUFBYSx5Q0FBeUMsbURBQW1ELHFCQUFxQiw4QkFBOEIsZUFBZSxJQUFJLHVCQUF1QiwyRUFBMkUsK0RBQStELGNBQWMsa05BQWtOLGtGQUFrRiw4REFBOEQsMkZBQTJGLDBCQUEwQix5QkFBeUIsOEhBQThILFFBQVEsc0NBQXNDLFFBQVEsdUhBQXVILG9CQUFvQixRQUFRLEVBQUUsMEVBQTBFLGNBQWMsR0FBRyxjQUFjLGdGQUFnRixrUEFBa1AsV0FBVyxnQkFBZ0IsU0FBUyxjQUFjLG1DQUFtQyxRQUFRLFNBQVMseUJBQXlCLG1DQUFtQyxPQUFPLHFLQUFxSyxlQUFlLFFBQVEsR0FBRywyQ0FBMkMsV0FBVyxzQkFBc0IscUJBQXFCLG9CQUFvQiw2RkFBNkYsc1VBQXNVLHVDQUF1Qyw0TUFBNE0sNEZBQTRGLEtBQUssT0FBTywwQ0FBMEMsa0JBQWtCLDBEQUEwRCxrQkFBa0IsK0VBQStFLEtBQUssT0FBTywwQ0FBMEMsa0JBQWtCLDZCQUE2QixLQUFLLG9CQUFvQixVQUFVLDJEQUEyRCxNQUFNLG1FQUFtRSxNQUFNLGtCQUFrQiw4REFBOEQsTUFBTSx1RUFBdUUsTUFBTSxxR0FBcUcsTUFBTSwrREFBK0QsUUFBUSw2RUFBNkUsTUFBTSxtREFBbUQsUUFBUSxzQkFBc0IsZ0JBQWdCLGdCQUFnQixTQUFTLEVBQUUsbURBQW1ELCtDQUErQywyQkFBMkIsU0FBUyxlQUFlLEtBQUssaUJBQWlCLEVBQUUseUNBQXlDLFdBQVcsc0NBQXNDLGtDQUFrQyxxRUFBcUUsTUFBTSxlQUFlLE1BQU0sYUFBYSxVQUFVLDhFQUE4RSwwREFBMEQsS0FBSyw4REFBOEQsc0JBQXNCLHNFQUFzRSxpQ0FBaUMsd0dBQXdHLG9EQUFvRCxrQkFBa0IsK0RBQStELHFCQUFxQixhQUFhLDBCQUEwQix5RUFBeUUsUUFBUSw4REFBOEQsV0FBVyx1RkFBdUYsT0FBTyw4QkFBOEIsa0JBQWtCLHdDQUF3QyxrQkFBa0Isa0dBQWtHLDBDQUEwQyxhQUFhLDBCQUEwQix5RUFBeUUsUUFBUSw4REFBOEQsV0FBVyx1RkFBdUYsT0FBTyw4QkFBOEIsbUJBQW1CLDZDQUE2QyxvWkFBb1oscUVBQXFFLHFDQUFxQyw4REFBOEQsMkRBQTJELEtBQUssb0RBQW9ELFNBQVMsRUFBRSxxQkFBcUIsK0ZBQStGLFNBQVMscUJBQXFCLDhEQUE4RCxZQUFZLHFFQUFxRSxLQUFLLDJCQUEyQiw4SUFBOEksa0dBQWtHLCtGQUErRixvS0FBb0ssa0JBQWtCLHFnQkFBcWdCLHVIQUF1SCw0QkFBNEIsMEJBQTBCLG1CQUFtQixhQUFhLEtBQUssT0FBTyx5QkFBeUIsS0FBSyxPQUFPLE9BQU8sZ0JBQWdCLGVBQWUsaUJBQWlCLEdBQUcsb0JBQW9CLG9CQUFvQiw4REFBOEQsMEZBQTBGLHdDQUF3QyxtQ0FBbUMsZ0RBQWdELEtBQUssdURBQXVELGtFQUFrRSwwQ0FBMEMsS0FBSyx1REFBdUQsMEJBQTBCLHVCQUF1QiwrQkFBK0Isa0dBQWtHLDJCQUEyQixxQkFBcUIsZ0JBQWdCLGFBQWEsb0JBQW9CLE9BQU8scUdBQXFHLEtBQUssT0FBTyxPQUFPLGdCQUFnQixhQUFhLCtCQUErQiwyQkFBMkIsUUFBUSxjQUFjLGlDQUFpQyxhQUFhLHFDQUFxQywwQkFBMEIscUJBQXFCLGdLQUFnSyw0REFBNEQsV0FBVyxJQUFJLEVBQUUsc0JBQXNCLGVBQWUsV0FBVyw4QkFBOEIsV0FBVyxLQUFLLFdBQVcsZ0NBQWdDLE1BQU0sd0VBQXdFLHNNQUFzTSxtQkFBbUIsaUdBQWlHLHNDQUFzQyxJQUFJLGVBQWUsd0NBQXdDLCtCQUErQiwyQ0FBMkMsUUFBUSxvRkFBb0Ysd0JBQXdCLGVBQWUscUNBQXFDLGdCQUFnQixJQUFJLHNCQUFzQixTQUFTLE9BQU8sUUFBUSxxQ0FBcUMsUUFBUSxFQUFFLEtBQUssNElBQTRJLFNBQVMsTUFBTSxFQUFFLGlCQUFpQiw4RUFBOEUsbUJBQW1CLElBQUksdUJBQXVCLGVBQWUsWUFBWSxNQUFNLGVBQWUsWUFBWSxRQUFRLCtCQUErQixZQUFZLFVBQVUsc0VBQXNFLFVBQVUsVUFBVSxFQUFFLDJDQUEyQywwRUFBMEUsaUNBQWlDLCtEQUErRCxJQUFJLG1CQUFtQix5RUFBeUUsU0FBUyxrQkFBa0IsTUFBTSx1QkFBdUIsd0RBQXdELGlDQUFpQyx1Q0FBdUMsTUFBTSwwQkFBMEIsTUFBTSwyQ0FBMkMseUJBQXlCLHVCQUF1QixNQUFNLGFBQWEsUUFBUSxRQUFRLGtCQUFrQixxQkFBcUIsY0FBYyxXQUFXLEtBQUssbUNBQW1DLGlDQUFpQyxlQUFlLFVBQVUsTUFBTSxTQUFTLE1BQU0sSUFBSSxRQUFRLGtFQUFrRSw4Q0FBOEMsbUxBQW1MLHFDQUFxQyxvQkFBb0Isc0JBQXNCLHVHQUF1RyxLQUFLLDJEQUEyRCxtQkFBbUIseUdBQXlHLDhCQUE4Qix3QkFBd0IsK0hBQStILHNCQUFzQiwySUFBMkksYUFBYSxlQUFlLHlCQUF5Qiw0Q0FBNEMsRUFBRSw4Q0FBOEMsV0FBVyxLQUFLLFdBQVcsdURBQXVELG1CQUFtQixRQUFRLGtCQUFrQixrQkFBa0IsY0FBYyxXQUFXLEtBQUssa0NBQWtDLGdDQUFnQyxlQUFlLFVBQVUsTUFBTSxTQUFTLE1BQU0sSUFBSSxvQkFBb0IsUUFBUSxrQkFBa0IsTUFBTSxjQUFjLG1CQUFtQixVQUFVLHdCQUF3QiwwRkFBMEYscUJBQXFCLHdGQUF3Riw2REFBNkQsVUFBVSxhQUFhLDJCQUEyQixJQUFJLG1DQUFtQyxXQUFXLEtBQUssV0FBVyxXQUFXLHVCQUF1QixHQUFHLFFBQVEsYUFBYSx3R0FBd0csaUJBQWlCLGdGQUFnRixlQUFlLDRCQUE0QixjQUFjLG1CQUFtQixjQUFjLEtBQUsseUJBQXlCLElBQUksb0NBQW9DLGNBQWMsc0RBQXNELFNBQVMsNkdBQTZHLCtCQUErQixVQUFVLFNBQVMsUUFBUSxxQkFBcUIsbUJBQW1CLHNFQUFzRSxtQkFBbUIsdUJBQXVCLFVBQVUsU0FBUyxFQUFFLGNBQWMsVUFBVSxNQUFNLGNBQWMsa0JBQWtCLHdIQUF3SCxrRUFBa0UsT0FBTyxZQUFZLG1CQUFtQixrQkFBa0IsYUFBYSxxQkFBcUIsY0FBYyxXQUFXLG1EQUFtRCw2REFBNkQsbUJBQW1CLGtCQUFrQiw4TEFBOEwsaUJBQWlCLG9EQUFvRCxlQUFlLDBCQUEwQixrQ0FBa0MsaUJBQWlCLFFBQVEsY0FBYyxvREFBb0QsMEJBQTBCLE1BQU0sc0JBQXNCLE1BQU0sa0NBQWtDLE1BQU0sNEJBQTRCLDhCQUE4QiwyQ0FBMkMsZUFBZSx1RkFBdUYsd0JBQXdCLEdBQUcsaUJBQWlCLFlBQVksTUFBTSxxQkFBcUIsU0FBUyxFQUFFLGdCQUFnQixxQkFBcUIsaUJBQWlCLEtBQUssdUNBQXVDLHVFQUF1RSxzQkFBc0Isa0hBQWtILFNBQVMsU0FBUyxPQUFPLGNBQWMsS0FBSyxjQUFjLFNBQVMsVUFBVSxxRkFBcUYsMkJBQTJCLFNBQVMsRUFBRSx1QkFBdUIsaUdBQWlHLHdDQUF3QyxpQkFBaUIsMkZBQTJGLElBQUksRUFBRSw2QkFBNkIsaURBQWlELFVBQVUsaURBQWlELCtMQUErTCxtQkFBbUIsdUNBQXVDLDBPQUEwTyxzQkFBc0IsMENBQTBDLDhCQUE4QixtQkFBbUIsTUFBTSxxQkFBcUIsTUFBTSxxQkFBcUIsd0VBQXdFLDRFQUE0RSxpQkFBaUIsdUVBQXVFLHFCQUFxQiwwQ0FBMEMsU0FBUyw2S0FBNkssaUJBQWlCLG9CQUFvQixXQUFXLGNBQWMsV0FBVyxTQUFTLGdCQUFnQixVQUFVLGVBQWUsNkZBQTZGLGlCQUFpQiw2Q0FBNkMsc0pBQXNKLGFBQWEsYUFBYSxNQUFNLGNBQWMsNERBQTRELDAvQkFBMC9CLGtWQUFrVixpQkFBaUIsV0FBVyxZQUFZLFdBQVcsS0FBSyxxQkFBcUIsY0FBYyxHQUFHLGFBQWEsMEJBQTBCLEtBQUssS0FBSywwQ0FBMEMsd0RBQXdELHNCQUFzQixJQUFJLEtBQUssU0FBUyxNQUFNLHlCQUF5QixhQUFhLFdBQVcsS0FBSyw4RkFBOEYsc0JBQXNCLElBQUksS0FBSyxTQUFTLE1BQU0sNEJBQTRCLGlCQUFpQixZQUFZLDhCQUE4QixtQkFBbUIsa0NBQWtDLG1CQUFtQixRQUFRLHNCQUFzQiw2REFBNkQsZUFBZSxXQUFXLGdDQUFnQywwREFBMEQsRUFBRSx1Q0FBdUMsd0RBQXdELHFCQUFxQixjQUFjLGdCQUFnQixNQUFNLFlBQVksTUFBTSxhQUFhLGdJQUFnSSxxQkFBcUIsZ0VBQWdFLFVBQVUsNkJBQTZCLHVCQUF1QixRQUFRLHdDQUF3QyxFQUFFLG1CQUFtQixZQUFZLGlCQUFpQixnQ0FBZ0MsZUFBZSx3QkFBd0IsU0FBUyxFQUFFLFlBQVksd0RBQXdELFdBQVcsS0FBSyxTQUFTLEVBQUUsMkJBQTJCLHlDQUF5QyxNQUFNLFdBQVcsZ0JBQWdCLFdBQVcsY0FBYyxxQkFBcUIsR0FBRyxnQkFBZ0IsZUFBZSxhQUFhLFVBQVUsb0NBQW9DLCtCQUErQixNQUFNLDZCQUE2QixNQUFNLDZCQUE2QixNQUFNLHNDQUFzQyxNQUFNLG9DQUFvQyxrSUFBa0ksTUFBTSx1SEFBdUgsTUFBTSx1RUFBdUUsTUFBTSw2QkFBNkIsTUFBTSxhQUFhLE1BQU0sa0NBQWtDLE1BQU0saUJBQWlCLE1BQU0sc0NBQXNDLE1BQU0saUtBQWlLLE1BQU0scUNBQXFDLHFGQUFxRixLQUFLLGNBQWMsU0FBUyxFQUFFLFFBQVEsaUhBQWlILFdBQVcsMkNBQTJDLG9CQUFvQixJQUFJLGFBQWEsOFdBQThXLDRVQUE0VSx5QkFBeUIsRUFBRSxXQUFXLElBQUksY0FBYyxFQUFFLFdBQVcsS0FBSyxNQUFNLFlBQVksS0FBSyxNQUFNLFlBQVksS0FBSyxJQUFJLEVBQUUscUNBQXFDLElBQUksUUFBUSxjQUFjLE9BQU8sWUFBWSw0REFBNEQsR0FBRywrR0FBK0cseUJBQXlCLEtBQUssS0FBSyxTQUFTLHlIQUF5SCxrQkFBa0IsWUFBWSxRQUFRLHNHQUFzRywyQkFBMkIsdUVBQXVFLE1BQU0sNkJBQTZCLE1BQU0sc0JBQXNCLE1BQU0sOERBQThELE1BQU0sa0NBQWtDLG9DQUFvQyxTQUFTLFVBQVUsa0RBQWtELFFBQVEsMENBQTBDLFFBQVEsZ0RBQWdELFFBQVEsU0FBUyxpR0FBaUcsc01BQXNNLG9CQUFvQixnRUFBZ0UsVUFBVSxrQ0FBa0MsMkNBQTJDLGlCQUFpQixrREFBa0QscUJBQXFCLG9CQUFvQixtRkFBbUYsVUFBVSxnQ0FBZ0MsMEVBQTBFLHlDQUF5QywrQ0FBK0MsWUFBWSw2REFBNkQsc0dBQXNHLG9CQUFvQixZQUFZLFFBQVEscUNBQXFDLDZDQUE2QywwRkFBMEYseUNBQXlDLFFBQVEsb0JBQW9CLGtDQUFrQyx1QkFBdUIsV0FBVyxnQ0FBZ0MsTUFBTSwyQ0FBMkMsVUFBVSxvREFBb0QscUVBQXFFLE9BQU8saUJBQWlCLEVBQUUsR0FBRyxRQUFRLEVBQUUsbUJBQW1CLE9BQU8sdUNBQXVDLGlCQUFpQiwyQkFBMkIsU0FBUyxFQUFFLHNCQUFzQiw4SUFBOEksV0FBVyxTQUFTLGVBQWUsd0JBQXdCLGNBQWMsZ0NBQWdDLGVBQWUsdUJBQXVCLDRCQUE0QixnQkFBZ0IsRUFBRSxvQ0FBb0MsaUNBQWlDLG9JQUFvSSxzQkFBc0Isb0JBQW9CLEVBQUUsb0NBQW9DLGVBQWUsa0VBQWtFLGlCQUFpQix5QkFBeUIseUJBQXlCLFVBQVUsK0lBQStJLE1BQU0sZ0NBQWdDLE1BQU0sa0NBQWtDLE1BQU0sc0VBQXNFLE1BQU0sc0JBQXNCLE1BQU0sNEJBQTRCLGVBQWUsTUFBTSwrSEFBK0gscUJBQXFCLE1BQU0sK0JBQStCLE1BQU0sdURBQXVELHlTQUF5UyxNQUFNLDhXQUE4VyxxQkFBcUIsTUFBTSwrQkFBK0IsTUFBTSxzQ0FBc0MsTUFBTSx1Q0FBdUMsTUFBTSw2Q0FBNkMsTUFBTSwwQ0FBMEMsMERBQTBELHVCQUF1Qix1Q0FBdUMsZUFBZSxNQUFNLHNFQUFzRSxNQUFNLGdFQUFnRSxNQUFNLDhMQUE4TCwyRkFBMkYsZ0NBQWdDLE1BQU0sMkVBQTJFLE1BQU0sdVBBQXVQLE1BQU0sd2NBQXdjLE1BQU0sNEpBQTRKLE1BQU0sd0pBQXdKLE1BQU0sK0hBQStILE1BQU0sb0VBQW9FLE1BQU0sMEVBQTBFLE1BQU0sMEVBQTBFLE1BQU0sb0VBQW9FLE1BQU0sb0VBQW9FLE1BQU0sc0VBQXNFLE1BQU0sb0VBQW9FLE1BQU0sd0VBQXdFLE1BQU0sd0VBQXdFLE1BQU0sMEVBQTBFLE1BQU0sc0JBQXNCLE1BQU0sZ0dBQWdHLHlCQUF5QixVQUFVLHNCQUFzQixNQUFNLDBDQUEwQywwREFBMEQsdUJBQXVCLHVDQUF1QyxlQUFlLE1BQU0sK0ZBQStGLE1BQU0sdUNBQXVDLE1BQU0sNkNBQTZDLE1BQU0sc0NBQXNDLE1BQU0sc0lBQXNJLG9DQUFvQyxnTUFBZ00scUhBQXFILFFBQVEsc0RBQXNELG1CQUFtQixVQUFVLGlGQUFpRixxQ0FBcUMsZ0JBQWdCLG1DQUFtQyxXQUFXLHFCQUFxQixlQUFlLE1BQU0sa0JBQWtCLE1BQU0sbUVBQW1FLDRCQUE0QixrRUFBa0UsT0FBTyw0QkFBNEIsK0JBQStCLG1DQUFtQyxXQUFXLHFCQUFxQixlQUFlLE1BQU0sZUFBZSxNQUFNLGtCQUFrQixNQUFNLHlCQUF5QixNQUFNLGdCQUFnQixNQUFNLHVCQUF1QixNQUFNLDhFQUE4RSxNQUFNLDRCQUE0QixxQkFBcUIsT0FBTyxvR0FBb0csZ0JBQWdCLE1BQU0sdUJBQXVCLE1BQU0sbUJBQW1CLDJCQUEyQixzRUFBc0UsT0FBTyxzR0FBc0csZ0JBQWdCLE1BQU0sdUJBQXVCLE1BQU0sbUJBQW1CLE1BQU0sNERBQTRELE1BQU0sMkJBQTJCLFlBQVksT0FBTyx3SkFBd0osT0FBTyw4RUFBOEUsTUFBTSx1Q0FBdUMsTUFBTSxnQ0FBZ0MsWUFBWSxnQkFBZ0IsTUFBTSx1Q0FBdUMsTUFBTSw2QkFBNkIsTUFBTSwrREFBK0QsdUxBQXVMLG1FQUFtRSwyQkFBMkIsT0FBTyxrQkFBa0Isd0VBQXdFLFFBQVEsbUVBQW1FLG9CQUFvQixlQUFlLHdDQUF3QyxlQUFlLFVBQVUsMENBQTBDLGtEQUFrRCxrQkFBa0IsaUJBQWlCLG1CQUFtQixtQkFBbUIsb0JBQW9CLGlCQUFpQixzQ0FBc0MsaUJBQWlCLGtQQUFrUCwrT0FBK08sMENBQTBDLElBQUksZUFBZSxzQkFBc0IsUUFBUSxFQUFFLGVBQWUsaUJBQWlCLGlCQUFpQixZQUFZLEdBQUcsb0JBQW9CLHNFQUFzRSxVQUFVLHVCQUF1QixPQUFPLElBQUksMkRBQTJELHVEQUF1RCxvQkFBb0IsMkJBQTJCLHVCQUF1QixFQUFFLEVBQUUsaUNBQWlDLHdHQUF3Ryx5Q0FBeUMsSUFBSSxTQUFTLE1BQU0saUJBQWlCLFFBQVEsSUFBSSxHQUFHLG9CQUFvQixxVUFBcVUsU0FBUywrQ0FBK0MsSUFBSSxTQUFTLGVBQWUsbUJBQW1CLDBDQUEwQyxFQUFFLEVBQUUsUUFBUSxtQ0FBbUMsNkNBQTZDLFNBQVMsa0NBQWtDLDBEQUEwRCxrQkFBa0IsaUJBQWlCLEtBQUssZUFBZSxpREFBaUQsU0FBUyxlQUFlLG1DQUFtQyxlQUFlLDJFQUEyRSxlQUFlLEtBQUssUUFBUSxpQkFBaUIsaUJBQWlCLHNCQUFzQixVQUFVLG9GQUFvRixtQ0FBbUMsU0FBUyxZQUFZLGVBQWUsZ0JBQWdCLFlBQVksRUFBRSxFQUFFLG1CQUFtQixhQUFhLHVCQUF1QixrQ0FBa0MsSUFBSSx3REFBd0QsZ0JBQWdCLFlBQVksZUFBZSxvQkFBb0IsWUFBWSxFQUFFLEVBQUUsbUJBQW1CLGFBQWEsbURBQW1ELGtCQUFrQixJQUFJLDRCQUE0QixvQkFBb0IsWUFBWSxtQkFBbUIsa0JBQWtCLHlEQUF5RCxTQUFTLDhDQUE4QyxTQUFTLDhDQUE4QyxTQUFTLDZCQUE2QixlQUFlLHVCQUF1QixTQUFTLDZCQUE2QixNQUFNLDBCQUEwQixlQUFlLHdGQUF3RixXQUFXLEtBQUssYUFBYSxvQkFBb0IsWUFBWSxlQUFlLFlBQVksbURBQW1ELGVBQWUsa0NBQWtDLGlCQUFpQiwrQkFBK0IsbUJBQW1CLHlCQUF5Qiw0Q0FBNEMsNktBQTZLLFFBQVEsVUFBVSxvQkFBb0IsTUFBTSxxQkFBcUIsaUJBQWlCLCtEQUErRCxrTUFBa00saUJBQWlCLG9CQUFvQixpSEFBaUgsVUFBVSwrR0FBK0cscUJBQXFCLDJCQUEyQiw2Q0FBNkMsVUFBVSx5SUFBeUksdUVBQXVFLGlCQUFpQixvQkFBb0IsaURBQWlELHVDQUF1QyxlQUFlLHNHQUFzRyw0Q0FBNEMsY0FBYyxtQkFBbUIsc0JBQXNCLHFDQUFxQyxlQUFlLGVBQWUsT0FBTyxPQUFPLHdCQUF3Qix5Q0FBeUMsS0FBSyxLQUFLLDRDQUE0QywyQkFBMkIsaUNBQWlDLG9EQUFvRCx1QkFBdUIsdUNBQXVDLGFBQWEsd0NBQXdDLGFBQWEsMEJBQTBCLEdBQUcsNkNBQTZDLGNBQWMsaUJBQWlCLG9CQUFvQixpREFBaUQsdUNBQXVDLDZCQUE2QixzR0FBc0csNENBQTRDLGdCQUFnQixrREFBa0QsbUJBQW1CLDhCQUE4QixZQUFZLDhHQUE4RywyQkFBMkIsc0dBQXNHLHFCQUFxQiwrQkFBK0IsMEJBQTBCLFVBQVUsbUNBQW1DLGlJQUFpSSw4Q0FBOEMsaUJBQWlCLDhDQUE4Qyw0RkFBNEYsYUFBYSwrQ0FBK0MsK0JBQStCLCtDQUErQyx3QkFBd0IsK0ZBQStGLHVKQUF1Six1TEFBdUwsb0JBQW9CLHdDQUF3QyxvQkFBb0Isb0ZBQW9GLFNBQVMsc0NBQXNDLFlBQVkseUpBQXlKLCtDQUErQyxpQkFBaUIsOENBQThDLCtCQUErQixlQUFlLHlCQUF5QixlQUFlLHNDQUFzQyxlQUFlLFdBQVcsSUFBSSwrQ0FBK0MsRUFBRSxlQUFlLDBCQUEwQixlQUFlLHdCQUF3QixtQkFBbUIsOENBQThDLHdFQUF3RSxpQ0FBaUMsVUFBVSxJQUFJLDRFQUE0RSxFQUFFLDJHQUEyRyw4QkFBOEIsNkJBQTZCLG9EQUFvRCxnRkFBZ0YsUUFBUSxzQ0FBc0MsdUJBQXVCLHNFQUFzRSxpRkFBaUYsbUNBQW1DLDhHQUE4Ryx1QkFBdUIsbUNBQW1DLHVIQUF1SCxtQkFBbUIscUlBQXFJLFdBQVcsS0FBSyxXQUFXLGdDQUFnQyxvQkFBb0Isc0dBQXNHLGlCQUFpQixnSkFBZ0osaUJBQWlCLDRKQUE0SixZQUFZLG1CQUFtQixjQUFjLDJCQUEyQixXQUFXLDhDQUE4QyxxQkFBcUIsa0RBQWtELFdBQVcsS0FBSyxXQUFXLHFIQUFxSCw0QkFBNEIsTUFBTSxlQUFlLDBCQUEwQixTQUFTLG1CQUFtQiw2RkFBNkYsZUFBZSxvREFBb0QsWUFBWSxjQUFjLGdDQUFnQyw4Q0FBOEMsd0JBQXdCLHFCQUFxQiwwQkFBMEIsWUFBWSxpQkFBaUIsaUdBQWlHLGlCQUFpQix5QkFBeUIsZ0JBQWdCLHVCQUF1QixLQUFLLHNCQUFzQixpRkFBaUYsV0FBVyxLQUFLLFdBQVcsZ0dBQWdHLGlCQUFpQixpVEFBaVQsUUFBUSx3RkFBd0YsK0JBQStCLHVwQkFBdXBCLHlCQUF5Qiw2RUFBNkUsVUFBVSwwRkFBMEYsaUJBQWlCLG9EQUFvRCxrQkFBa0IsNEJBQTRCLGlCQUFpQixpQ0FBaUMsZUFBZSwyQkFBMkIsc0JBQXNCLDZDQUE2QyxlQUFlLDJCQUEyQiwyQkFBMkIsNkJBQTZCLFVBQVUscUJBQXFCLFVBQVUsU0FBUyxVQUFVLElBQUksa0JBQWtCLFFBQVEsYUFBYSxxQkFBcUIsVUFBVSxTQUFTLFVBQVUsSUFBSSxrQkFBa0IsUUFBUSxhQUFhLHFCQUFxQixPQUFPLFlBQVksbUNBQW1DLDRCQUE0QixVQUFVLDRDQUE0Qyw4Q0FBOEMsOENBQThDLG9DQUFvQyxrREFBa0Qsd0ZBQXdGLFNBQVMsZ0NBQWdDLHVDQUF1QyxLQUFLLFNBQVMsRUFBRSxZQUFZLDBCQUEwQiw4REFBOEQseUJBQXlCLFVBQVUsUUFBUSwwQ0FBMEMsRUFBRSxFQUFFLGtCQUFrQiw0QkFBNEIseUNBQXlDLE1BQU0sMkRBQTJELGdEQUFnRCxJQUFJLDhCQUE4Qix1QkFBdUIsZUFBZSxtQkFBbUIsWUFBWSxlQUFlLDZCQUE2QixXQUFXLG1CQUFtQixLQUFLLFlBQVksV0FBVyw0QkFBNEIsT0FBTyxnQkFBZ0IsNEJBQTRCLE9BQU8sZUFBZSxrR0FBa0csT0FBTyxzQkFBc0IsaUJBQWlCLGVBQWUsVUFBVSxtekJBQW16Qix1U0FBdVMsMkJBQTJCLGlCQUFpQixpQkFBaUIsMEJBQTBCLDBCQUEwQixrQkFBa0IsbUJBQW1CLGtVQUFrVSxpQkFBaUIsVUFBVSxxQ0FBcUMsTUFBTSx3Q0FBd0MsTUFBTSx1Q0FBdUMsTUFBTSwwREFBMEQsTUFBTSx5RUFBeUUseUJBQXlCLHVDQUF1QyxpRkFBaUYsMEhBQTBILGVBQWUsbUJBQW1CLGFBQWEsV0FBVyxhQUFhLG1CQUFtQixvQkFBb0IsdUNBQXVDLE1BQU0sRUFBRSxRQUFRLGdCQUFnQixvQkFBb0IsdUNBQXVDLE1BQU0sRUFBRSxRQUFRLCtEQUErRCxxREFBcUQsU0FBUyxpQkFBaUIsZUFBZSwrQkFBK0IsNkJBQTZCLFdBQVcsRUFBRSx3QkFBd0IsNERBQTRELGlEQUFpRCxpREFBaUQsU0FBUyxtQkFBbUIsbUJBQW1CLGNBQWMsMkhBQTJILGlCQUFpQiwwR0FBMEcsWUFBWSxlQUFlLCtFQUErRSxrQkFBa0IsWUFBWSxXQUFXLE1BQU0sNkJBQTZCLG9EQUFvRCxXQUFXLFlBQVksb0NBQW9DLDJDQUEyQyxRQUFRLEdBQUcsZUFBZSxjQUFjLGVBQWUsd0ZBQXdGLFlBQVksWUFBWSxLQUFLLFlBQVksb0NBQW9DLEtBQUssd0NBQXdDLHNDQUFzQyw0REFBNEQsV0FBVyxNQUFNLGtDQUFrQyxpQ0FBaUMsV0FBVyxXQUFXLG9DQUFvQyxvQ0FBb0MsOEJBQThCLGdCQUFnQiwyREFBMkQsY0FBYyxjQUFjLDBEQUEwRCxtQkFBbUIsK0JBQStCLFdBQVcsRUFBRSxxQ0FBcUMsRUFBRSxhQUFhLDJDQUEyQyxhQUFhLCtCQUErQiw4QkFBOEIsMkNBQTJDLDZEQUE2RCxHQUFHLGdDQUFnQyxnQkFBZ0IsOEtBQThLLGlMQUFpTCxlQUFlLHFCQUFxQixlQUFlLHFCQUFxQixvREFBb0QseUJBQXlCLGdDQUFnQyxpQ0FBaUMsc0RBQXNELHlCQUF5QixhQUFhLHdCQUF3QixzQkFBc0Isa0RBQWtELHFEQUFxRCxNQUFNLFdBQVcsR0FBRyxvQ0FBb0MsWUFBWSxxQ0FBcUMsS0FBSyxnQ0FBZ0MsaUJBQWlCLG1HQUFtRyw2QkFBNkIsd0JBQXdCLGVBQWUsbURBQW1ELCtDQUErQyx5Q0FBeUMsa0JBQWtCLE9BQU8sdUNBQXVDLG9CQUFvQixpQkFBaUIsRUFBRSxlQUFlLGtCQUFrQixrQkFBa0IsYUFBYSx3QkFBd0IsSUFBSSxTQUFTLE1BQU0sc0JBQXNCLGNBQWMsRUFBRSxFQUFFLHVCQUF1Qix1QkFBdUIsWUFBWSxvQkFBb0IsK0JBQStCLEtBQUssdUJBQXVCLEVBQUUsRUFBRSxVQUFVLGFBQWEsTUFBTSxVQUFVLGFBQWEsTUFBTSxZQUFZLE9BQU8sY0FBYyxFQUFFLEVBQUUsVUFBVSxhQUFhLE1BQU0sVUFBVSxhQUFhLE1BQU0sWUFBWSwyQkFBMkIsdUNBQXVDLGlDQUFpQyxtQ0FBbUMsbUJBQW1CLFlBQVkseUNBQXlDLGNBQWMsU0FBUyxFQUFFLDRCQUE0QixZQUFZLFlBQVksMkJBQTJCLHFEQUFxRCxzQ0FBc0Msd0NBQXdDLGNBQWMsa0tBQWtLLFFBQVEsV0FBVywyQkFBMkIsK0VBQStFLDZDQUE2Qyx3Y0FBd2Msb0NBQW9DLDRDQUE0Qyx5RUFBeUUsYUFBYSwwQ0FBMEMsY0FBYyxvQ0FBb0MsdUJBQXVCLCtDQUErQyxZQUFZLG1CQUFtQixtREFBbUQsb0NBQW9DLDJIQUEySCxjQUFjLE9BQU8sR0FBRyxpQkFBaUIsb0JBQW9CLDZCQUE2QixzQkFBc0Isa0dBQWtHLGdCQUFnQix5RUFBeUUsOEZBQThGLGtFQUFrRSwyRUFBMkUsdUJBQXVCLGtFQUFrRSxPQUFPLDhFQUE4RSxhQUFhLHlCQUF5QixnQkFBZ0IsSUFBSSwrQkFBK0IsUUFBUSxxQkFBcUIsNEJBQTRCLDhHQUE4RywyQkFBMkIsNkJBQTZCLHlCQUF5QixpREFBaUQsNElBQTRJLHVFQUF1RSwwQ0FBMEMseUJBQXlCLHdGQUF3RixHQUFHLCtCQUErQix1REFBdUQsZ0NBQWdDLDRCQUE0QixTQUFTLHNIQUFzSCxHQUFHLHVCQUF1Qix5QkFBeUIsNEVBQTRFLGdDQUFnQyxXQUFXLDJkQUEyZCxHQUFHLCtCQUErQiw0QkFBNEIsNEJBQTRCLFNBQVMsOEhBQThILEVBQUUsY0FBYyxnQ0FBZ0MsU0FBUyx5Q0FBeUMsWUFBWSxnQ0FBZ0MsK0JBQStCLDRCQUE0QixxQ0FBcUMsNkNBQTZDLHVEQUF1RCxhQUFhLGNBQWMsc0hBQXNILDJDQUEyQyxTQUFTLGtCQUFrQiwrRUFBK0Usc0RBQXNELGFBQWEsY0FBYyxzSEFBc0gsMkNBQTJDLFNBQVMsa0JBQWtCLHdFQUF3RSwyRUFBMkUsYUFBYSwrQ0FBK0Msa0JBQWtCLFdBQVcsZ0ZBQWdGLDBCQUEwQixTQUFTLE9BQU8sK0RBQStELHlEQUF5RCwrREFBK0QsYUFBYSxxWEFBcVgscUJBQXFCLFNBQVMsZ0NBQWdDLGlDQUFpQyw4QkFBOEIsc0JBQXNCLGtCQUFrQiwwREFBMEQsY0FBYyxrQkFBa0IsMERBQTBELCtCQUErQixvQ0FBb0MsMktBQTJLLGtEQUFrRCxxQ0FBcUMsc0RBQXNELHlCQUF5Qix3QkFBd0IsMkRBQTJELG9CQUFvQixjQUFjLE9BQU8sNEJBQTRCLG1DQUFtQyx3QkFBd0IsT0FBTywrREFBK0QsY0FBYyxtREFBbUQsYUFBYSxnQkFBZ0IsUUFBUSwrREFBK0Qsa0JBQWtCLG1DQUFtQyxZQUFZLGtCQUFrQixrQkFBa0Isb0JBQW9CLGFBQWEsNkJBQTZCLHFCQUFxQiwyQ0FBMkMsU0FBUyxpQkFBaUIsZUFBZSw0Q0FBNEMsTUFBTSxnQ0FBZ0MsbUJBQW1CLE1BQU0sa0RBQWtELCtHQUErRyxTQUFTLDBKQUEwSixJQUFJLHVCQUF1QixvQkFBb0IsV0FBVyxvQ0FBb0MsOElBQThJLG1CQUFtQixzQ0FBc0Msc0JBQXNCLGtEQUFrRCxpQkFBaUIsK0JBQStCLDhCQUE4Qiw0RkFBNEYsdURBQXVELGFBQWEsdURBQXVELGFBQWEsK0JBQStCLCtCQUErQixRQUFRLGFBQWEsb0hBQW9ILDhCQUE4QixrRkFBa0YsU0FBUyx1QkFBdUIsdUJBQXVCLElBQUksY0FBYyxtQkFBbUIsZ0JBQWdCLHlCQUF5QiwyREFBMkQsYUFBYSwyREFBMkQsNENBQTRDLDBDQUEwQyxnQkFBZ0IsNkRBQTZELGtFQUFrRSxxQ0FBcUMsOEhBQThILEVBQUUsbUNBQW1DLHlCQUF5QixPQUFPLHFCQUFxQixPQUFPLGtCQUFrQixPQUFPLDZCQUE2QixrQkFBa0IsWUFBWSw4QkFBOEIsZUFBZSx3QkFBd0IsSUFBSSxtQkFBbUIsUUFBUSxzQkFBc0IsSUFBSSxJQUFJLHFCQUFxQix1QkFBdUIsU0FBUyxNQUFNLGtCQUFrQiw4RkFBOEYsVUFBVSxpTEFBaUwsNkJBQTZCLDRCQUE0QixxQkFBcUIsa0JBQWtCLGdDQUFnQywwQkFBMEIsWUFBWSxnQ0FBZ0Msc0ZBQXNGLFVBQVUsMkJBQTJCLDZLQUE2Syx5QkFBeUIsc0JBQXNCLGFBQWEsdUJBQXVCLElBQUksd0JBQXdCLGFBQWEscUNBQXFDLDZCQUE2QixVQUFVLHVGQUF1Rix5QkFBeUIsc0JBQXNCLEdBQUcsaUNBQWlDLFVBQVUsUUFBUSxxSEFBcUgseUJBQXlCLHNCQUFzQixhQUFhLHVCQUF1QixJQUFJLHdCQUF3QixhQUFhLDBFQUEwRSxtQ0FBbUMsd0JBQXdCLE9BQU8sY0FBYywwQkFBMEIsT0FBTyxxQkFBcUIsdUNBQXVDLE9BQU8scUJBQXFCLHFCQUFxQixVQUFVLHNCQUFzQixPQUFPLDZDQUE2QywrQkFBK0IsZUFBZSxNQUFNLElBQUksZ0JBQWdCLHNGQUFzRixTQUFTLEtBQUssUUFBUSxtREFBbUQsdUNBQXVDLDZCQUE2QixtQkFBbUIsa0JBQWtCLGtDQUFrQyxpQ0FBaUMsNkJBQTZCLDRCQUE0QiwwQkFBMEIseUJBQXlCLDZCQUE2QixrQ0FBa0MsaUNBQWlDLDJCQUEyQiwwQkFBMEIsb0JBQW9CLG1CQUFtQix1Q0FBdUMsc0NBQXNDLG9DQUFvQyxtQ0FBbUMsaUNBQWlDLGdDQUFnQyx5QkFBeUIsd0JBQXdCLCtCQUErQiw4QkFBOEIsOEJBQThCLDZCQUE2QixzQkFBc0IscUJBQXFCLHdCQUF3Qix1QkFBdUIsd0NBQXdDLHVDQUF1Qyw0QkFBNEIsMkJBQTJCLDZDQUE2QyxrREFBa0QsYUFBYSw2REFBNkQsd0RBQXdELGFBQWEseUVBQXlFLHVFQUF1RSxhQUFhLGdCQUFnQixlQUFlLGNBQWMsSUFBSSxFQUFFLHFCQUFxQiw4QkFBOEIsWUFBWSxjQUFjLDhCQUE4QixjQUFjLDRCQUE0QixxQkFBcUIsVUFBVSxPQUFPLCtCQUErQixJQUFJLEVBQUUsb0NBQW9DLGtFQUFrRSx3Q0FBd0MsWUFBWSxTQUFTLGdCQUFnQiw4QkFBOEIseUJBQXlCLDJGQUEyRixvQkFBb0IsMEJBQTBCLGdCQUFnQixLQUFLLHFCQUFxQiwwQkFBMEIsa0JBQWtCLDBNQUEwTSxjQUFjLGVBQWUsU0FBUyxFQUFFLDBCQUEwQixnRUFBZ0UsV0FBVyxRQUFRLGNBQWMsa0RBQWtELEtBQUssV0FBVyw4QkFBOEIsdUJBQXVCLGFBQWEsbUNBQW1DLGFBQWEsV0FBVyx1QkFBdUIsSUFBSSxTQUFTLElBQUksR0FBRyw4QkFBOEIsUUFBUSxJQUFJLEdBQUcsZ0JBQWdCLHFDQUFxQyxFQUFFLGlCQUFpQix5QkFBeUIsa0NBQWtDLDZCQUE2Qiw0Q0FBNEMsdUJBQXVCLFFBQVEsb0JBQW9CLFVBQVUsT0FBTyxpQkFBaUIsS0FBSyxXQUFXLG1DQUFtQyxRQUFRLFFBQVEsa0JBQWtCLFFBQVEsYUFBYSxxQ0FBcUMsTUFBTSw0Q0FBNEMsbUNBQW1DLGlDQUFpQyxxQkFBcUIsa0JBQWtCLFFBQVEsZ0JBQWdCLGVBQWUsb0JBQW9CLElBQUksZ05BQWdOLGdCQUFnQix1Q0FBdUMsc0tBQXNLLCtDQUErQyxTQUFTLDZCQUE2QixVQUFVLDZCQUE2QixNQUFNLFlBQVksUUFBUSxJQUFJLElBQUksV0FBVyxRQUFRLEtBQUssb0NBQW9DLEtBQUssMENBQTBDLFVBQVUseUNBQXlDLFlBQVksUUFBUSxJQUFJLElBQUksV0FBVyxRQUFRLEtBQUssNkNBQTZDLHVCQUF1QixpRkFBaUYsZ0JBQWdCLE1BQU0sYUFBYSxNQUFNLG9CQUFvQixNQUFNLGFBQWEsTUFBTSxjQUFjLGdCQUFnQiw0RUFBNEUscUlBQXFJLDhEQUE4RCxRQUFRLGtCQUFrQixRQUFRLElBQUksSUFBSSwrQkFBK0IsUUFBUSxPQUFPLHNEQUFzRCxhQUFhLHFFQUFxRSwyRUFBMkUsTUFBTSxhQUFhLHVFQUF1RSx5QkFBeUIsc0NBQXNDLFNBQVMsNHZCQUE0dkIsMENBQTBDLDhCQUE4QixnQkFBZ0Isa0JBQWtCLHVGQUF1RixvREFBb0QsNkdBQTZHLHlCQUF5QixrRkFBa0Ysb0JBQW9CLGdCQUFnQixrQkFBa0Isc0RBQXNELG9EQUFvRCxrSEFBa0gseUJBQXlCLGtGQUFrRiw0QkFBNEIsa0ZBQWtGLE9BQU8sc0JBQXNCLEtBQUssYUFBYSxJQUFJLG1EQUFtRCxNQUFNLGFBQWEsT0FBTyxRQUFRLFlBQVksZUFBZSxHQUFHLG9DQUFvQyxnQkFBZ0IsNkNBQTZDLGlEQUFpRCxJQUFJLElBQUksSUFBSSxJQUFJLDhDQUE4QyxlQUFlLGFBQWEscURBQXFELE1BQU0sY0FBYyxXQUFXLCtCQUErQixZQUFZLFdBQVcsTUFBTSxJQUFJLHlCQUF5QixRQUFRLGVBQWUsaUJBQWlCLDJCQUEyQixJQUFJLDJFQUEyRSxhQUFhLHVDQUF1QyxnREFBZ0Qsb0VBQW9FLG1DQUFtQyxnQkFBZ0IsdUNBQXVDLG9MQUFvTCxhQUFhLDZDQUE2QyxrQ0FBa0MsT0FBTyx3QkFBd0IsaUdBQWlHLGlGQUFpRix3QkFBd0Isb0RBQW9ELFVBQVUsOEVBQThFLHVDQUF1Qyx3QkFBd0IsbUNBQW1DLCtCQUErQixtREFBbUQsZ0NBQWdDLCtIQUErSCxXQUFXLDREQUE0RCxJQUFJLEVBQUUseUJBQXlCLHdCQUF3QixFQUFFLEtBQUssMkhBQTJILGFBQWEsT0FBTyxnQkFBZ0IsRUFBRSwrT0FBK08sY0FBYyxxR0FBcUcsb0JBQW9CLHdCQUF3QixvQkFBb0IsWUFBWSxrQkFBa0IsUUFBUSxXQUFXLHdDQUF3QyxTQUFTLE1BQU0saUNBQWlDLHNDQUFzQyxRQUFRLFdBQVcsNEZBQTRGLFNBQVMsOEhBQThILDRCQUE0QiwyQkFBMkIsaUNBQWlDLE1BQU0sK0JBQStCLHNEQUFzRCxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsTUFBTSx5Q0FBeUMsa0RBQWtELFNBQVMsRUFBRSxTQUFTLEVBQUUsdURBQXVELFNBQVMsNkNBQTZDLGlFQUFpRSxnRUFBZ0UsMkdBQTJHLEVBQUUsa0JBQWtCLDRDQUE0QyxHQUFHLG9CQUFvQixnRUFBZ0Usb0VBQW9FLG9IQUFvSCxFQUFFLEdBQUcsR0FBRyxFQUFFLGdIQUFnSCxxQkFBcUIsaUNBQWlDLHNDQUFzQyxrQkFBa0IsU0FBUyxpQ0FBaUMsZ0VBQWdFLFdBQVcsZ0NBQWdDLDBDQUEwQyxvQkFBb0IsNkJBQTZCLDhCQUE4Qiw4Q0FBOEMsb0RBQW9ELG1DQUFtQyxxQ0FBcUMsdUNBQXVDLHlCQUF5QiwwQ0FBMEMsaUJBQWlCLHVCQUF1QixpQkFBaUIsaUJBQWlCLHVCQUF1QixtR0FBbUcsaUNBQWlDLG1CQUFtQixpQkFBaUIsT0FBTyw4QkFBOEIsbUNBQW1DLE9BQU8sS0FBSyxpQ0FBaUMsa0JBQWtCLEtBQUssNEJBQTRCLG9CQUFvQixLQUFLLDhCQUE4QixtQkFBbUIsb0JBQW9CLDBCQUEwQixlQUFlLHVCQUF1QiwyREFBMkQsS0FBSyxvQ0FBb0MsaUJBQWlCLGtCQUFrQix1QkFBdUIsb0JBQW9CLDBCQUEwQiw4QkFBOEIsbUNBQW1DLG1DQUFtQyx1QkFBdUIseUJBQXlCLGlCQUFpQixzQ0FBc0MsT0FBTyxLQUFLLDZCQUE2QixvQ0FBb0MsZ0NBQWdDLHVCQUF1QixrQ0FBa0MsZ0JBQWdCLEtBQUsscUNBQXFDLHVCQUF1QixvQ0FBb0MsZ0NBQWdDLHVCQUF1QixrQ0FBa0MsZ0JBQWdCLEtBQUssK0JBQStCLHVCQUF1QixvQ0FBb0MsZ0NBQWdDLGtDQUFrQyxnQkFBZ0IsS0FBSywrQkFBK0Isb0JBQW9CLHlCQUF5QixPQUFPLEtBQUssd0NBQXdDLG9CQUFvQixxQ0FBcUMsMEJBQTBCLEtBQUsseUNBQXlDLDRCQUE0QixxQkFBcUIsNkJBQTZCLGdDQUFnQyx1QkFBdUIsa0NBQWtDLHdEQUF3RCx5Q0FBeUMseUNBQXlDLHlDQUF5Qyx3QkFBd0IsS0FBSywrQ0FBK0MsNEJBQTRCLHlDQUF5QyxtQkFBbUIsS0FBSyxJQUFJLGFBQWEsdUJBQXVCLHFIQUFxSCxtS0FBbUssRUFBRSxHQUFHLDhIQUE4SCxhQUFhLE9BQU8sUUFBUSxFQUFFLCtPQUErTyxjQUFjLGdEQUFnRCxvQkFBb0Isd0JBQXdCLG9CQUFvQixZQUFZLGtCQUFrQixRQUFRLFdBQVcsd0NBQXdDLFNBQVMsTUFBTSxpQ0FBaUMsc0NBQXNDLFFBQVEsV0FBVyw0RkFBNEYsU0FBUywwQkFBMEIsbUNBQW1DLFlBQVksbUJBQW1CLEtBQUssd0NBQXdDLGtCQUFrQixnSEFBZ0gsdURBQXVELDBCQUEwQixNQUFNLHlDQUF5QyxrREFBa0QsU0FBUyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsU0FBUywwQkFBMEIsMENBQTBDLGVBQWUseUJBQXlCLDZCQUE2QixFQUFFLEVBQUUsZ0hBQWdILHFCQUFxQixpQ0FBaUMsc0NBQXNDLGtCQUFrQixTQUFTLGlDQUFpQyxnRUFBZ0UsT0FBTyxrR0FBa0csYUFBYSxPQUFPLDZDQUE2QyxFQUFFLDBDQUEwQyxnQkFBZ0Isb0NBQW9DLHVCQUF1QixJQUFJLGNBQWMsU0FBUyxvQkFBb0IsMkJBQTJCLGtCQUFrQiw0QkFBNEIsb0pBQW9KLDZCQUE2QixtQkFBbUIsdUZBQXVGLFlBQVksbUJBQW1CLElBQUksZ0JBQWdCLHVEQUF1RCxPQUFPLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsY0FBYyxVQUFVLHFCQUFxQixNQUFNLG9DQUFvQyxvREFBb0QsaUdBQWlHLHNGQUFzRixrQkFBa0IsOEpBQThKLHlCQUF5QiwwR0FBMEcsZ0NBQWdDLG1GQUFtRixLQUFLLGFBQWEscUVBQXFFLEVBQUUsa0JBQWtCLDZEQUE2RCxNQUFNLGNBQWMsdUNBQXVDLDhKQUE4SixzQkFBc0IsMkJBQTJCLG9CQUFvQixtQkFBbUIsdWlCQUF1aUIsZUFBZSx1QkFBdUIsTUFBTSxzREFBc0Qsc0dBQXNHLDRGQUE0RixVQUFVLG9EQUFvRCw0RkFBNEYsYUFBYSxPQUFPLFNBQVMsRUFBRSxvMUNBQW8xQyxzSUFBc0ksMFlBQTBZLHNJQUFzSSwrRkFBK0YsU0FBUyxnQkFBZ0Isa0JBQWtCLHlDQUF5Qyw2QkFBNkIseUJBQXlCLG1EQUFtRCxjQUFjLG1CQUFtQix5Q0FBeUMsYUFBYSxPQUFPLHlFQUF5RSxvQkFBb0IsU0FBUyxjQUFjLGFBQWEsY0FBYyxPQUFPLFVBQVUsMkJBQTJCLFNBQVMsMkNBQTJDLFVBQVUsc0JBQXNCLE9BQU8sS0FBSyxlQUFlLGdCQUFnQixlQUFlLFVBQVUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLEtBQUssMkJBQTJCLDhCQUE4Qix3QkFBd0Isb0JBQW9CLEVBQUUsR0FBRyxFQUFFLElBQUksVUFBVSxNQUFNLDJEQUEyRCx1R0FBdUcsY0FBYyxJQUFJLGdCQUFnQixTQUFTLDRCQUE0QixzQkFBc0IsZ0JBQWdCLG9CQUFvQixFQUFFLGNBQWMsSUFBSSxXQUFXLHNDQUFzQywyQkFBMkIseUJBQXlCLHFDQUFxQyw2QkFBNkIsNEJBQTRCLHNCQUFzQiwyQ0FBMkMsc0JBQXNCLEVBQUUsY0FBYyxJQUFJLG9DQUFvQyxzQkFBc0Isa0ZBQWtGLG9EQUFvRCxpQ0FBaUMsYUFBYSxvQkFBb0IsdUJBQXVCLHdCQUF3QixrRkFBa0YsOEJBQThCLHVCQUF1Qix3RUFBd0UsaUJBQWlCLGFBQWEsaUNBQWlDLGNBQWMsdURBQXVELGNBQWMsTUFBTSx3RUFBd0UsY0FBYyxNQUFNLDZGQUE2RixjQUFjLHlEQUF5RCxlQUFlLCtEQUErRCxlQUFlLHVFQUF1RSxlQUFlLHFHQUFxRyxzQ0FBc0MsZUFBZSxJQUFJLDZDQUE2QyxPQUFPLGdFQUFnRSxrRUFBa0UsZUFBZSxtQkFBbUIsSUFBSSxvQkFBb0IsU0FBUyxVQUFVLEVBQUUsOEtBQThLLGVBQWUsMkJBQTJCLG1RQUFtUSxjQUFjLDhGQUE4Riw0Q0FBNEMsZUFBZSxvQkFBb0IsZUFBZSxnQ0FBZ0MsZUFBZSxjQUFjLDhDQUE4QyxFQUFFLDBDQUEwQyxlQUFlLDBCQUEwQix3REFBd0Qsc0JBQXNCLG1CQUFtQixNQUFNLHNDQUFzQyxvQkFBb0IsWUFBWSw2RUFBNkUsMkRBQTJELE1BQU0sWUFBWSxpRUFBaUUsOEJBQThCLGVBQWUscUVBQXFFLFVBQVUsZUFBZSxrQkFBa0IsU0FBUyxnQkFBZ0IsY0FBYyxZQUFZLFdBQVcsNENBQTRDLHFCQUFxQixJQUFJLFlBQVksMEJBQTBCLFdBQVcscUVBQXFFLDZCQUE2QixjQUFjLDJCQUEyQiw2QkFBNkIsZUFBZSxzQkFBc0IsOEJBQThCLGVBQWUsT0FBTyw2QkFBNkIsbUJBQW1CLFNBQVMsbURBQW1ELHdDQUF3QywrQkFBK0IsOEJBQThCLG9CQUFvQiw0REFBNEQsRUFBRSw2RUFBNkUsaUJBQWlCLGdCQUFnQiw4QkFBOEIscURBQXFELGlCQUFpQixnQkFBZ0IsOEJBQThCLGlEQUFpRCxrQkFBa0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxpQ0FBaUMscUxBQXFMLHdCQUF3Qix5TEFBeUwsZUFBZSx1Q0FBdUMsZUFBZSw2SEFBNkgsZUFBZSxnTkFBZ04saUJBQWlCLHNCQUFzQiwwQ0FBMEMscUhBQXFILGVBQWUsc0JBQXNCLEtBQUssbUNBQW1DLDhCQUE4QixTQUFTLGlCQUFpQixtQkFBbUIsd0JBQXdCLDBCQUEwQixhQUFhLFFBQVEsS0FBSyxFQUFFLEVBQUUsa0JBQWtCLHdCQUF3QixTQUFTLGVBQWUsc0RBQXNELGlCQUFpQix1R0FBdUcsZUFBZSxrQ0FBa0MsZUFBZSxnSkFBZ0osZUFBZSxzREFBc0QsZUFBZSxrREFBa0QsR0FBRyxZQUFZLGVBQWUsc0JBQXNCLEVBQUUsRUFBRSwwQkFBMEIsbUJBQW1CLHNCQUFzQiwrQkFBK0IseUJBQXlCLFVBQVUsa0NBQWtDLGNBQWMsZUFBZSxpQ0FBaUMsa0JBQWtCLEVBQUUsSUFBSSxvREFBb0QsSUFBSSw4RUFBOEUsa0pBQWtKLDBCQUEwQixnQ0FBZ0MsNkNBQTZDLEVBQUUsaUJBQWlCLHNDQUFzQyx1QkFBdUIsWUFBWSxPQUFPLEVBQUUsb0RBQW9ELDZCQUE2Qiw2QkFBNkIsY0FBYyxxQkFBcUIscUNBQXFDLCtDQUErQyx1Q0FBdUMseUJBQXlCLHlDQUF5QyxzQ0FBc0MsZ0VBQWdFLG1CQUFtQiw2QkFBNkIsV0FBVyxjQUFjLDBCQUEwQiw2REFBNkQsMkZBQTJGLGlCQUFpQiwwQkFBMEIsa0NBQWtDLGtGQUFrRixRQUFRLDJMQUEyTCxxUkFBcVIsY0FBYywyRkFBMkYscUNBQXFDLGlCQUFpQiwyQkFBMkIscUJBQXFCLGNBQWMsdUJBQXVCLFlBQVkscUJBQXFCLGdFQUFnRSxrQ0FBa0Msc0VBQXNFLHFDQUFxQyxFQUFFLGdCQUFnQixpREFBaUQsc0NBQXNDLE9BQU8sMERBQTBELGNBQWMsOENBQThDLHNFQUFzRSxtQkFBbUIsS0FBSyxhQUFhLFVBQVUsY0FBYyxjQUFjLGlEQUFpRCx3REFBd0QsYUFBYSxpQkFBaUIsMEJBQTBCLDBCQUEwQixzQkFBc0IseUZBQXlGLGlJQUFpSSw4RUFBOEUseUJBQXlCLDJDQUEyQywrQkFBK0IsNEJBQTRCLDZCQUE2QixxQkFBcUIsY0FBYyx3QkFBd0IsT0FBTyxnREFBZ0QsSUFBSSxjQUFjLEdBQUcsYUFBYSxzQ0FBc0Msd0tBQXdLLGdCQUFnQix3QkFBd0IsWUFBWSxHQUFHLFFBQVEsc0JBQXNCLDBGQUEwRixpQkFBaUIseUNBQXlDLEtBQUssRUFBRSxFQUFFLDBCQUEwQixpQ0FBaUMsU0FBUyxpQkFBaUIsMkJBQTJCLGtCQUFrQixJQUFJLE9BQU8sdUNBQXVDLDJDQUEyQyxTQUFTLGdCQUFnQixFQUFFLElBQUksdURBQXVELHVEQUF1RCx5REFBeUQsZUFBZSxhQUFhLGNBQWMsNEVBQTRFLElBQUksb0JBQW9CLHFZQUFxWSx1QkFBdUIsb0JBQW9CLEtBQUssT0FBTyw4RkFBOEYsVUFBVSxtQkFBbUIscUhBQXFILFNBQVMsVUFBVSxvRUFBb0UsTUFBTSx1RUFBdUUsTUFBTSxxRUFBcUUsTUFBTSxzRUFBc0UsaUJBQWlCLG9CQUFvQixVQUFVLG9CQUFvQiw4QkFBOEIscURBQXFELHFDQUFxQyx1QkFBdUIsc0JBQXNCLDZCQUE2Qix5QkFBeUIsVUFBVSxXQUFXLGlGQUFpRix5RUFBeUUsY0FBYyw4RUFBOEUscUVBQXFFLHVKQUF1SixhQUFhLCtFQUErRSxxRUFBcUUsa0JBQWtCLG9DQUFvQyxvQkFBb0IscUJBQXFCLEdBQUcsY0FBYyxrQkFBa0IsRUFBRSxJQUFJLG9EQUFvRCxJQUFJLDhCQUE4Qix3Q0FBd0MsaUJBQWlCLGFBQWEsd0JBQXdCLGFBQWEsZ0ZBQWdGLGFBQWEsYUFBYSxhQUFhLGFBQWEseUhBQXlILHVIQUF1SCx3Q0FBd0Msc0NBQXNDLHVCQUF1QixZQUFZLFNBQVMsRUFBRSwyREFBMkQsUUFBUSxzQkFBc0IsZUFBZSxhQUFhLFlBQVksb0JBQW9CLHdCQUF3QixhQUFhLHlCQUF5Qiw2QkFBNkIscUJBQXFCLG1CQUFtQixJQUFJLG1DQUFtQyxTQUFTLFVBQVUsV0FBVyw0QkFBNEIsV0FBVyxhQUFhLDBIQUEwSCxlQUFlLCtEQUErRCw0SEFBNEgsR0FBRyw0QkFBNEIsd0JBQXdCLFlBQVksR0FBRyxRQUFRLFFBQVEsT0FBTyxtQkFBbUIsTUFBTSxLQUFLLHdCQUF3QixLQUFLLHVCQUF1QixjQUFjLGFBQWEsaUJBQWlCLFNBQVMsVUFBVSxlQUFlLFNBQVMsb0JBQW9CLDJDQUEyQyxvRkFBb0YsV0FBVyxnQkFBZ0IsV0FBVyxrQkFBa0IsK0lBQStJLFVBQVUscUJBQXFCLGlGQUFpRixTQUFTLGdCQUFnQixjQUFjLGtCQUFrQixxQkFBcUIsaUJBQWlCLG9CQUFvQixlQUFlLFdBQVcsNkNBQTZDLHdCQUF3QixFQUFFLFlBQVksd0VBQXdFLDhCQUE4QixjQUFjLDJCQUEyQiw2QkFBNkIsUUFBUSxvRUFBb0UsS0FBSyx5RkFBeUYsU0FBUyx3R0FBd0csRUFBRSxrQkFBa0IsRUFBRSxJQUFJLDJDQUEyQyxJQUFJLGdMQUFnTCx1RkFBdUYsMkJBQTJCLFFBQVEsMkJBQTJCLHFDQUFxQyxrREFBa0Qsd0VBQXdFLHlDQUF5QyxTQUFTLGlCQUFpQix1RUFBdUUsWUFBWSxxREFBcUQsVUFBVSxXQUFXLDhDQUE4QyxxQ0FBcUMsVUFBVSxnQ0FBZ0MsNkJBQTZCLGdCQUFnQixzRUFBc0Usa0JBQWtCLFlBQVksdURBQXVELEtBQUssVUFBVSxFQUFFLFlBQVksdUJBQXVCLElBQUksd0dBQXdHLFVBQVUseVRBQXlULGVBQWUsa0hBQWtILG9EQUFvRCxvQ0FBb0MsZUFBZSxTQUFTLGlCQUFpQiwwRUFBMEUsWUFBWSx3QkFBd0IsVUFBVSxXQUFXLHNDQUFzQyw2QkFBNkIsRUFBRSxpQkFBaUIsaUJBQWlCLGlFQUFpRSxhQUFhLGNBQWMsMEJBQTBCLGFBQWEsdUJBQXVCLGFBQWEsc0JBQXNCLGFBQWEsRUFBRSxxQkFBcUIsNEpBQTRKLFNBQVMsMlFBQTJRLCtCQUErQixXQUFXLEVBQUUsT0FBTyxzTEFBc0wsa0NBQWtDLGFBQWEsdURBQXVELDZCQUE2QixVQUFVLHNCQUFzQixtQkFBbUIsWUFBWSxzQ0FBc0Msa0JBQWtCLFdBQVcseUNBQXlDLCtCQUErQiwwQkFBMEIsYUFBYSxhQUFhLGFBQWEsY0FBYyw2QkFBNkIsaUJBQWlCLGdEQUFnRCw2QkFBNkIsSUFBSSxlQUFlLHdCQUF3Qix1QkFBdUIsR0FBRyxVQUFVLDBLQUEwSyxRQUFRLE1BQU0sb0RBQW9ELEtBQUsseUJBQXlCLGlCQUFpQixrQ0FBa0MsZUFBZSx1QkFBdUIsZUFBZSx1QkFBdUIsZUFBZSxzQkFBc0IsZUFBZSwrQkFBK0IsaUNBQWlDLGVBQWUsNkJBQTZCLGVBQWUsd0NBQXdDLG9GQUFvRixlQUFlLG9EQUFvRCxlQUFlLDBCQUEwQixtQ0FBbUMsRUFBRSwrQkFBK0IsZUFBZSxJQUFJLHlCQUF5QixHQUFHLE9BQU8sNERBQTRELG1CQUFtQiwyQkFBMkIsaUJBQWlCLGdDQUFnQyxpQkFBaUIsYUFBYSxrQkFBa0IsRUFBRSxpQkFBaUIsYUFBYSw4REFBOEQsRUFBRSxlQUFlLCtEQUErRCxHQUFHLEVBQUUsUUFBUSxhQUFhLDhDQUE4QyxTQUFTLG1CQUFtQixvQ0FBb0MsMEJBQTBCLG1CQUFtQixxRkFBcUYsU0FBUyxrQkFBa0IsRUFBRSxJQUFJLGlEQUFpRCxHQUFHLDRCQUE0QixvQkFBb0IsZ0JBQWdCLEVBQUUsa0NBQWtDLG1CQUFtQixVQUFVLHdCQUF3QiwwQkFBMEIscUJBQXFCLGlCQUFpQiwyQ0FBMkMsbUJBQW1CLGtFQUFrRSxtQkFBbUIsb0NBQW9DLHFCQUFxQixxRkFBcUYsa0JBQWtCLGlNQUFpTSx1QkFBdUIsc0RBQXNELFdBQVcsbUJBQW1CLGdDQUFnQywyRkFBMkYsWUFBWSxXQUFXLE1BQU0sa0JBQWtCLG9EQUFvRCxxQkFBcUIscUJBQXFCLGdCQUFnQixXQUFXLCtLQUErSywrQkFBK0IsZUFBZSx1QkFBdUIsb0hBQW9ILFNBQVMsNkJBQTZCLHlCQUF5Qiw0REFBNEQsNkdBQTZHLDJCQUEyQixzQkFBc0IsWUFBWSxFQUFFLFdBQVcsZUFBZSxtQkFBbUIsZ0JBQWdCLHNCQUFzQixpQkFBaUIsVUFBVSxFQUFFLEVBQUUsV0FBVyxjQUFjLGVBQWUsaUJBQWlCLGdDQUFnQyxzQkFBc0IsVUFBVSxFQUFFLFdBQVcsY0FBYyw4QkFBOEIsMENBQTBDLFNBQVMsYUFBYSw4Q0FBOEMsRUFBRSxJQUFJLFVBQVUsOERBQThELFFBQVEsS0FBSyxnQkFBZ0IsZUFBZSxJQUFJLHVDQUF1QyxxQ0FBcUMsa0JBQWtCLHNCQUFzQixxQkFBcUIsZ0JBQWdCLGtHQUFrRyxhQUFhLHNFQUFzRSxtQ0FBbUMsRUFBRSxtQkFBbUIsR0FBRyxFQUFFLE1BQU0saUJBQWlCLFVBQVUsbUJBQW1CLEVBQUUsY0FBYywrQkFBK0Isa0JBQWtCLHVCQUF1Qix1RUFBdUUsMkJBQTJCLGFBQWEsTUFBTSxNQUFNLE9BQU8sU0FBUyxZQUFZLGFBQWEsd0JBQXdCLDBCQUEwQixXQUFXLDBIQUEwSCxhQUFhLDZGQUE2RixZQUFZLHdFQUF3RSxRQUFRLGtEQUFrRCxpRUFBaUUsNkJBQTZCLGdCQUFnQixPQUFPLHVCQUF1Qix5Q0FBeUMsWUFBWSx1REFBdUQsSUFBSSwyQkFBMkIsK0NBQStDLHNDQUFzQyxvQkFBb0IsZ0JBQWdCLHNFQUFzRSxxREFBcUQsYUFBYSxvREFBb0QsaUNBQWlDLGdHQUFnRywrQkFBK0IsK0xBQStMLHlhQUF5YSx1QkFBdUIsdUdBQXVHLHlCQUF5QixpREFBaUQsSUFBSSx5Q0FBeUMsSUFBSSw2RUFBNkUsOEdBQThHLGFBQWEsMkpBQTJKLGFBQWEsaUJBQWlCLCtDQUErQyxrREFBa0QsS0FBSyxjQUFjLGVBQWUsYUFBYSxrUkFBa1IsS0FBSywrQkFBK0Isa0JBQWtCLHVCQUF1Qix5SUFBeUksU0FBUywyQkFBMkIsaUJBQWlCLDZCQUE2QixVQUFVLFFBQVEsVUFBVSx1QkFBdUIsT0FBTyxhQUFhLHFFQUFxRSxpQkFBaUIsZ0NBQWdDLGVBQWUsZ0JBQWdCLFdBQVcsVUFBVSwrQkFBK0IsTUFBTSx1Q0FBdUMsTUFBTSx1QkFBdUIsMERBQTBELDBFQUEwRSxnQ0FBZ0MsZUFBZSxNQUFNLHVEQUF1RCxNQUFNLFdBQVcsMENBQTBDLFdBQVcsZ0JBQWdCLEtBQUssVUFBVSxTQUFTLE1BQU0sZUFBZSwyQkFBMkIsaUJBQWlCLHdCQUF3QixlQUFlLG1DQUFtQyw0QkFBNEIsR0FBRyxpQkFBaUIsdUJBQXVCLGNBQWMsV0FBVyxnQkFBZ0IsU0FBUyw4TUFBOE0sd1FBQXdRLDJCQUEyQix1QkFBdUIsa0hBQWtILFNBQVMsS0FBSyxRQUFRLHNCQUFzQixJQUFJLHlCQUF5QixJQUFJLDhCQUE4QixFQUFFLGFBQWEsVUFBVSxzQ0FBc0MsME9BQTBPLG9EQUFvRCwrQ0FBK0MsaUJBQWlCLGlEQUFpRCxRQUFRLHlCQUF5QixPQUFPLGtCQUFrQixjQUFjLEdBQUcsaUJBQWlCLHlCQUF5QixpQkFBaUIsTUFBTSw2Q0FBNkMsU0FBUywwREFBMEQsRUFBRSwwRUFBMEUsT0FBTyxnQkFBZ0IsdUVBQXVFLGdGQUFnRiw0REFBNEQsb0JBQW9CLDRCQUE0Qix1QkFBdUIsY0FBYywyQkFBMkIsRUFBRSxJQUFJLHNDQUFzQyxVQUFVLEVBQUUsMkNBQTJDLGtGQUFrRix3REFBd0QsY0FBYyw4QkFBOEIsNEdBQTRHLGFBQWEsOENBQThDLDRDQUE0QyxNQUFNLGtNQUFrTSxFQUFFLDhCQUE4QixXQUFXLDJJQUEySSxXQUFXLHlCQUF5QixjQUFjLFNBQVMsVUFBVSxVQUFVLHVCQUF1Qiw2QkFBNkIsZUFBZSxZQUFZLCtHQUErRyxzQkFBc0IsK0dBQStHLHNCQUFzQixFQUFFLFNBQVMsWUFBWSxrRUFBa0Usb0JBQW9CLEVBQUUsSUFBSSxnQ0FBZ0MsSUFBSSwyRUFBMkUsK0NBQStDLGlCQUFpQix3QkFBd0IsZ0JBQWdCLGdDQUFnQyxpREFBaUQsc0ZBQXNGLGVBQWUsZUFBZSxFQUFFLFlBQVksZ0JBQWdCLHVCQUF1QixpQkFBaUIsT0FBTyxzQkFBc0Isb0NBQW9DLHFHQUFxRyxhQUFhLGtCQUFrQixxQkFBcUIsd0JBQXdCLFlBQVksV0FBVyxLQUFLLDhLQUE4SyxZQUFZLDBKQUEwSixvQkFBb0IsRUFBRSxJQUFJLCtCQUErQixJQUFJLDZCQUE2Qiw4SkFBOEosU0FBUyx1Q0FBdUMsY0FBYyxFQUFFLDRIQUE0SCxnQkFBZ0IsaUJBQWlCLEtBQUssb0JBQW9CLGdCQUFnQixtQkFBbUIsMkJBQTJCLHFCQUFxQiw0QkFBNEIsaUNBQWlDLE9BQU8sWUFBWSxTQUFTLG9DQUFvQyxxQkFBcUIsc0JBQXNCLDhCQUE4QixvQkFBb0IsSUFBSSxPQUFPLHFCQUFxQixNQUFNLEVBQUUsZUFBZSxVQUFVLG9CQUFvQiwyQkFBMkIsc0JBQXNCLHdCQUF3QixTQUFTLFFBQVEsd0JBQXdCLDhCQUE4QixHQUFHLFlBQVksS0FBSyxZQUFZLDJEQUEyRCxJQUFJLDhDQUE4QyxJQUFJLDJDQUEyQywrU0FBK1Msb0NBQW9DLE9BQU8sZ0NBQWdDLFFBQVEsa0dBQWtHLGlDQUFpQyxxS0FBcUssY0FBYywyQ0FBMkMsRUFBRSxHQUFHLHVDQUF1QyxvRUFBb0UsZ0NBQWdDLEVBQUUsdUNBQXVDLHNEQUFzRCw4QkFBOEIsYUFBYSxRQUFRLGdCQUFnQixnRUFBZ0UsaUNBQWlDLElBQUksRUFBRSxFQUFFLE9BQU8sNEdBQTRHLDhCQUE4QixnQ0FBZ0MsdUNBQXVDLDJIQUEySCxlQUFlLGlMQUFpTCxLQUFLLDhDQUE4Qyw2Q0FBNkMsNENBQTRDLDBKQUEwSiwyQkFBMkIsaUJBQWlCLEVBQUUsOEJBQThCLHlEQUF5RCxnQ0FBZ0MsY0FBYywwQkFBMEIscUJBQXFCLCtDQUErQyxTQUFTLGdDQUFnQyxRQUFRLGlDQUFpQyxjQUFjLHFCQUFxQiwyQkFBMkIseUNBQXlDLE9BQU8sU0FBUyxnQkFBZ0IsRUFBRSxrQkFBa0IsV0FBVyxnQkFBZ0IsWUFBWSxpQkFBaUIsZUFBZSxnQkFBZ0IsRUFBRSxrQ0FBa0MsaUJBQWlCLGNBQWMsRUFBRSxnRkFBZ0YsaUJBQWlCLE1BQU0sdUlBQXVJLDJGQUEyRix1QkFBdUIseUpBQXlKLE9BQU8sb0NBQW9DLDRGQUE0RixNQUFNLHFCQUFxQix3QkFBd0IsT0FBTyxpQkFBaUIscUJBQXFCLGFBQWEsbUJBQW1CLGlCQUFpQixNQUFNLFNBQVMsYUFBYSxHQUFHLEVBQUUsU0FBUyxZQUFZLElBQUksaUJBQWlCLElBQUkscUJBQXFCLGdEQUFnRCxPQUFPLGNBQWMsU0FBUyw2R0FBNkcsNkdBQTZHLEVBQUUsUUFBUSxlQUFlLHVCQUF1QixnQkFBZ0Isd0RBQXdELG1CQUFtQiwwQkFBMEIsb0JBQW9CLGVBQWUsNkNBQTZDLDJDQUEyQyxxQkFBcUIsK0NBQStDLGdDQUFnQyxjQUFjLCtDQUErQyxrQ0FBa0MseUJBQXlCLHdDQUF3QyxnQkFBZ0Isd0NBQXdDLGtFQUFrRSwrQ0FBK0MseUJBQXlCLHVEQUF1RCxnQkFBZ0IsdURBQXVELHFCQUFxQixrQkFBa0IsMkNBQTJDLHdDQUF3QyxLQUFLLFNBQVMsRUFBRSw0Q0FBNEMsRUFBRSw2T0FBNk8sb0JBQW9CLDBCQUEwQixVQUFVLGtCQUFrQix3QkFBd0IsbUJBQW1CLHdCQUF3Qix3QkFBd0IsaUNBQWlDLG1CQUFtQix5RkFBeUYsR0FBRyxnREFBZ0QsZ0JBQWdCLHFFQUFxRSxnQ0FBZ0MsT0FBTyxrRUFBa0Usa0NBQWtDLDZCQUE2QixrQ0FBa0MsdURBQXVELCtDQUErQyw2QkFBNkIsK0NBQStDLHdDQUF3Qyw4QkFBOEIsNkJBQTZCLGtDQUFrQyxrREFBa0QsOEJBQThCLGNBQWMsaUNBQWlDLGNBQWMsOENBQThDLGNBQWMsMERBQTBELE9BQU8sbUJBQW1CLGFBQWEsa0xBQWtMLFNBQVMsUUFBUSxrSEFBa0gsbUNBQW1DLFlBQVksRUFBRSxnQ0FBZ0MsaUJBQWlCLG1DQUFtQyxxQkFBcUIsRUFBRSxTQUFTLHNJQUFzSSx3Q0FBd0MscUdBQXFHLHdEQUF3RCxRQUFRLGFBQWEsYUFBYSxNQUFNLHFCQUFxQiwwQkFBMEIsTUFBTSxtRkFBbUYsT0FBTyw0RkFBNEYsV0FBVywwQkFBMEIsMkRBQTJELDZDQUE2Qyx3QkFBd0IsaUNBQWlDLEdBQUcsZUFBZSxLQUFLLDRPQUE0TyxtQ0FBbUMsSUFBSSxpQkFBaUIsSUFBSSxvSUFBb0ksNkZBQTZGLE9BQU8sMkNBQTJDLGVBQWUsd0NBQXdDLFVBQVUsWUFBWSwwRkFBMEYsVUFBVSxrQkFBa0Isb0dBQW9HLHlCQUF5QixnQkFBZ0Isd0xBQXdMLDJMQUEyTCx1Q0FBdUMsRUFBRSwrRUFBK0UsNERBQTRELG9CQUFvQixZQUFZLHlCQUF5Qix1QkFBdUIsb0JBQW9CLFNBQVMsd0JBQXdCLHVCQUF1QixHQUFHLFVBQVUsS0FBSyxpREFBaUQsZ0JBQWdCLGtDQUFrQyxhQUFhLEtBQUssR0FBRyx5REFBeUQsMkNBQTJDLElBQUksc0NBQXNDLGtCQUFrQix3QkFBd0IsZ0JBQWdCLGtHQUFrRyxhQUFhLEVBQUUsUUFBUSxHQUFHLGFBQWEsb0RBQW9ELGFBQWEsRUFBRSwwREFBMEQsb0JBQW9CLGVBQWUsZUFBZSxNQUFNLGVBQWUsT0FBTyxLQUFLLHVCQUF1QixpQ0FBaUMsZUFBZSwwQkFBMEIsZUFBZSxNQUFNLFdBQVcsVUFBVSxrRUFBa0UscWZBQXFmLHdGQUF3RixvQkFBb0IsRUFBRSw2REFBNkQsWUFBWSxNQUFNLHFCQUFxQixjQUFjLG9CQUFvQixvSEFBb0gsY0FBYyxPQUFPLG9DQUFvQyxpQkFBaUIsaUNBQWlDLGdCQUFnQixPQUFPLGVBQWUsb0RBQW9ELGlDQUFpQyxZQUFZLFdBQVcsTUFBTSxXQUFXLDRCQUE0QixnQkFBZ0IsV0FBVywrQkFBK0IsTUFBTSwwQkFBMEIsZUFBZSxZQUFZLFdBQVcsTUFBTSxXQUFXLDRCQUE0QixnQkFBZ0IsV0FBVyxpQ0FBaUMsTUFBTSxpQ0FBaUMsOEJBQThCLG9CQUFvQixFQUFFLGdDQUFnQyxFQUFFLE9BQU8scUJBQXFCLElBQUksbUZBQW1GLDBDQUEwQyx5Q0FBeUMsU0FBUyxnQkFBZ0IsV0FBVyx5QkFBeUIsY0FBYyw0QkFBNEIsU0FBUyxpQkFBaUIsZ0JBQWdCLG9CQUFvQixnQkFBZ0IsaUJBQWlCLFNBQVMsbUJBQW1CLDBDQUEwQywwQkFBMEIsbUNBQW1DLE9BQU8sZ0JBQWdCLFlBQVksV0FBVyxrQkFBa0IsU0FBUyxjQUFjLDJFQUEyRSxRQUFRLG9CQUFvQiw0RkFBNEYsa0hBQWtILE1BQU0sNENBQTRDLE1BQU0sc0NBQXNDLG9CQUFvQix1Q0FBdUMsMEJBQTBCLFFBQVEsZ0RBQWdELG1CQUFtQiw2QkFBNkIsWUFBWSx1QkFBdUIsb0VBQW9FLG9CQUFvQixlQUFlLDZEQUE2RCwrQkFBK0Isa0JBQWtCLHVCQUF1QixtSUFBbUksU0FBUyx3QkFBd0IsZUFBZSxrQkFBa0IsOEJBQThCLGNBQWMsV0FBVyxlQUFlLFdBQVcsV0FBVyw2REFBNkQsZ0JBQWdCLEVBQUUsSUFBSSxrREFBa0QsSUFBSSxzRkFBc0YsNkVBQTZFLG1CQUFtQixnQkFBZ0IseUJBQXlCLGlCQUFpQiwwQ0FBMEMscURBQXFELGlCQUFpQix5REFBeUQsY0FBYyxjQUFjLGdCQUFnQix3QkFBd0IsTUFBTSxzQkFBc0IsNkNBQTZDLGNBQWMseUJBQXlCLGNBQWMsU0FBUyxlQUFlLElBQUksb0RBQW9ELElBQUksY0FBYyxjQUFjLEVBQUUsSUFBSSxxRUFBcUUsT0FBTyxjQUFjLDREQUE0RCwwQkFBMEIsS0FBSyxlQUFlLGdCQUFnQixpQkFBaUIsMERBQTBELGlCQUFpQixhQUFhLHVCQUF1QixzQkFBc0IsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsc0JBQXNCLEVBQUUsYUFBYSwrRUFBK0Usc0JBQXNCLEtBQUssb0JBQW9CLEtBQUssMkRBQTJELFVBQVUsNExBQTRMLDhEQUE4RCxrQkFBa0IsS0FBSyxrQ0FBa0MsS0FBSyxhQUFhLEtBQUssZUFBZSxLQUFLLHFCQUFxQixLQUFLLGtCQUFrQixLQUFLLGtCQUFrQixLQUFLLDJDQUEyQyxnQkFBZ0IsRUFBRSxJQUFJLCtEQUErRCwrQ0FBK0MsZ0JBQWdCLG9DQUFvQyxHQUFHLFFBQVEsYUFBYSxJQUFJLGdGQUFnRiwyQkFBMkIsT0FBTyxxQkFBcUIsT0FBTyxhQUFhLDBDQUEwQyw0SEFBNEgsbUJBQW1CLEVBQUUsMkVBQTJFLEVBQUUsY0FBYyxnQkFBZ0IsdUZBQXVGLG9CQUFvQixrQ0FBa0MsSUFBSSxJQUFJLG1FQUFtRSxHQUFHLFdBQVcsa0NBQWtDLG9DQUFvQyxPQUFPLGdCQUFnQixVQUFVLGNBQWMsbUlBQW1JLFlBQVkscUdBQXFHLGtCQUFrQixvQ0FBb0MsUUFBUSxXQUFXLGNBQWMsTUFBTSx5QkFBeUIsa0NBQWtDLElBQUksMERBQTBELElBQUksdUlBQXVJLHNDQUFzQyw2QkFBNkIsS0FBSyxvQkFBb0IsYUFBYSxTQUFTLEtBQUssaUJBQWlCLG1DQUFtQyxlQUFlLFlBQVkscUJBQXFCLHVCQUF1QixlQUFlLDJFQUEyRSxrSEFBa0gsZUFBZSxrQkFBa0IsK0dBQStHLG1EQUFtRCxvTEFBb0wsT0FBTyxxRUFBcUUsWUFBWSxzR0FBc0csZ0NBQWdDLEVBQUUsRUFBRSxpQkFBaUIsb0VBQW9FLFFBQVEsRUFBRSxVQUFVLDJCQUEyQiw2Q0FBNkMscUJBQXFCLGFBQWEsb0RBQW9ELFFBQVEsSUFBSSxzQ0FBc0Msc0JBQXNCLGtCQUFrQiw2REFBNkQsRUFBRSx1Q0FBdUMsU0FBUyxJQUFJLE1BQU0sdUlBQXVJLCtCQUErQixzQkFBc0IsY0FBYyxnQkFBZ0IsdUJBQXVCLDZGQUE2RixFQUFFLEVBQUUsMFhBQTBYLDJKQUEySixNQUFNLHlEQUF5RCxhQUFhLHNDQUFzQyxvQkFBb0IsbUJBQW1CLG1FQUFtRSxnREFBZ0QsZ0JBQWdCLDZFQUE2RSx5QkFBeUIsb0JBQW9CLGtCQUFrQiwwREFBMEQsb0RBQW9ELHNCQUFzQiw2QkFBNkIsU0FBUyxFQUFFLGdCQUFnQixvQ0FBb0MsMkRBQTJELG9DQUFvQywyQkFBMkIsRUFBRSxLQUFLLDJEQUEyRCxxSUFBcUksU0FBUywyQ0FBMkMsb0NBQW9DLDJCQUEyQixFQUFFLG9DQUFvQyxTQUFTLGdCQUFnQixzREFBc0QsZ0JBQWdCLHNDQUFzQyw2RkFBNkYsa0JBQWtCLFlBQVksMEJBQTBCLGtCQUFrQixxRkFBcUYsZ0JBQWdCLDBCQUEwQixrQkFBa0IsWUFBWSxXQUFXLCtDQUErQyxnQkFBZ0Isb0JBQW9CLG9DQUFvQyxnRUFBZ0Usd0hBQXdILFNBQVMsWUFBWSxTQUFTLDhLQUE4SyxtQkFBbUIsZ0JBQWdCLGdCQUFnQix1Q0FBdUMsZ0JBQWdCLDhEQUE4RCwrSEFBK0gsTUFBTSw2RkFBNkYsU0FBUyxnQkFBZ0IscURBQXFELG9CQUFvQixrQkFBa0IsdUNBQXVDLHNEQUFzRCxtRUFBbUUsK0NBQStDLHFDQUFxQyxvQ0FBb0MsS0FBSyx5QkFBeUIsWUFBWSxFQUFFLEVBQUUsOEJBQThCLDRDQUE0QyxnRUFBZ0UsSUFBSSwwQ0FBMEMsOEJBQThCLFNBQVMsZ0JBQWdCLGdGQUFnRixFQUFFLEVBQUUsdUNBQXVDLFlBQVksb0JBQW9CLEtBQUsseUJBQXlCLGtGQUFrRixTQUFTLGtCQUFrQixTQUFTLGtCQUFrQiw4SUFBOEksNEJBQTRCLFVBQVUsa0JBQWtCLG1DQUFtQyxnQkFBZ0IsOENBQThDLDJCQUEyQixrQkFBa0IsY0FBYywrQkFBK0IsMEVBQTBFLDRDQUE0QyxzREFBc0QsRUFBRSxrQ0FBa0MsK0RBQStELGVBQWUsa0JBQWtCLGtCQUFrQiwyQ0FBMkMsb0ZBQW9GLDRDQUE0QyxrQkFBa0IsY0FBYywyQ0FBMkMsZ0VBQWdFLDJDQUEyQyxrQkFBa0IsVUFBVSxvQ0FBb0MsbUNBQW1DLGFBQWEsbUlBQW1JLEVBQUUsaUJBQWlCLDRCQUE0QixnQkFBZ0IsK0JBQStCLGlDQUFpQyxlQUFlLDJCQUEyQixlQUFlLDRCQUE0QixpQkFBaUIsMkNBQTJDLG1CQUFtQixlQUFlLGtEQUFrRCx5QkFBeUIsdUZBQXVGLEVBQUUscUVBQXFFLGdCQUFnQixFQUFFLElBQUksWUFBWSx3REFBd0Qsa0JBQWtCLGdDQUFnQyxlQUFlLEVBQUUsYUFBYSx3QkFBd0Isd0NBQXdDLGFBQWEsb0NBQW9DLCtEQUErRCxlQUFlLGtDQUFrQyx1QkFBdUIsNENBQTRDLFdBQVcsNkRBQTZELG9DQUFvQyxzRUFBc0UsY0FBYyxlQUFlLElBQUksNkNBQTZDLFNBQVMsWUFBWSx1SkFBdUosd0JBQXdCLCtGQUErRiw4RUFBOEUsY0FBYyw2Q0FBNkMsdUJBQXVCLGtGQUFrRixFQUFFLE1BQU0sMkJBQTJCLGNBQWMsZ0NBQWdDLHNCQUFzQiwrSEFBK0gsdUNBQXVDLHdDQUF3Qyw4QkFBOEIsS0FBSyxnQ0FBZ0MsYUFBYSwwQkFBMEIsMEJBQTBCLDZDQUE2Qyx3Q0FBd0MsOEJBQThCLEtBQUssZ0NBQWdDLCtFQUErRSxHQUFHLEVBQUUsK0JBQStCLGVBQWUsSUFBSSx3Q0FBd0MsSUFBSSxVQUFVLE1BQU0sbUNBQW1DLCtCQUErQixrQkFBa0IsRUFBRSxPQUFPLCtCQUErQixtQkFBbUIsT0FBTyx1QkFBdUIsdUhBQXVILFVBQVUsYUFBYSxvQkFBb0IsTUFBTSxnQkFBZ0Isb0JBQW9CLE1BQU0sZUFBZSxtQkFBbUIsTUFBTSxjQUFjLG1CQUFtQixNQUFNLFdBQVcsYUFBYSxjQUFjLGdDQUFnQyxNQUFNLDhCQUE4QixTQUFTLHNCQUFzQixJQUFJLHNFQUFzRSw0RkFBNEYsa0NBQWtDLEdBQUcsUUFBUSxtQkFBbUIsS0FBSyxZQUFZLFdBQVcsS0FBSyxJQUFJLFlBQVksT0FBTyx1QkFBdUIsVUFBVSxnR0FBZ0csd0JBQXdCLEVBQUUsK0JBQStCLFVBQVUsY0FBYyxvSEFBb0gsa0NBQWtDLFlBQVksUUFBUSxrQkFBa0IsT0FBTyxrREFBa0QsdUJBQXVCLE1BQU0saUJBQWlCLEVBQUUsSUFBSSxpREFBaUQsSUFBSSxrSEFBa0gsOEZBQThGLHlNQUF5TSxxQkFBcUIsd0RBQXdELHVMQUF1TCxRQUFRLDZIQUE2SCw0Q0FBNEMsS0FBSyxPQUFPLHlJQUF5SSxpQkFBaUIsT0FBTyx1RkFBdUYsZUFBZSwyQkFBMkIsK0JBQStCLHVCQUF1QixJQUFJLGtDQUFrQyw0SEFBNEgsdUNBQXVDLHFCQUFxQiwwQ0FBMEMsRUFBRSwrRUFBK0Usc0RBQXNELFlBQVksRUFBRSxhQUFhLGVBQWUsdUlBQXVJLHFCQUFxQixzQkFBc0IsZUFBZSxnQ0FBZ0MsZUFBZSxZQUFZLHVCQUF1QixpQ0FBaUMscUJBQXFCLGlFQUFpRSxrRUFBa0UsU0FBUyxhQUFhLGVBQWUsV0FBVywrQkFBK0IsMkRBQTJELElBQUkscUJBQXFCLE1BQU0sc0NBQXNDLGdEQUFnRCxnQ0FBZ0Msa0lBQWtJLE1BQU0seUNBQXlDLEtBQUssWUFBWSxFQUFFLHlKQUF5SixvREFBb0QsV0FBVyx5QkFBeUIsRUFBRSxpQkFBaUIsdUJBQXVCLGtDQUFrQyxtQkFBbUIsbUJBQW1CLGdDQUFnQyxPQUFPLHlEQUF5RCxxQ0FBcUMsbUJBQW1CLE1BQU0sa0NBQWtDLDhFQUE4RSxNQUFNLHFCQUFxQixXQUFXLHFEQUFxRCxPQUFPLDBCQUEwQixNQUFNLHFDQUFxQywrTUFBK00sdUVBQXVFLDBCQUEwQixPQUFPLDhCQUE4QixrSUFBa0ksT0FBTyxrQ0FBa0MsTUFBTSxLQUFLLFlBQVksR0FBRyxtREFBbUQsYUFBYSxlQUFlLGdDQUFnQyxpQkFBaUIsZ0RBQWdELGlCQUFpQixxQkFBcUIsNENBQTRDLGlCQUFpQixNQUFNLFdBQVcsa0JBQWtCLFdBQVcsWUFBWSxLQUFLLFVBQVUsRUFBRSwwQkFBMEIsUUFBUSxTQUFTLGNBQWMsS0FBSyw2QkFBNkIsV0FBVyxnREFBZ0QsWUFBWSxLQUFLLGNBQWMsRUFBRSxrQkFBa0IsZUFBZSxRQUFRLFlBQVksT0FBTyx5QkFBeUIsMEVBQTBFLE9BQU8sMEJBQTBCLG1EQUFtRCx5QkFBeUIsU0FBUyxxREFBcUQsbUJBQW1CLHlDQUF5QyxvQkFBb0Isc0JBQXNCLDZCQUE2QixPQUFPLHlGQUF5Rix1REFBdUQsd0NBQXdDLEtBQUssa0VBQWtFLElBQUksNENBQTRDLDhDQUE4Qyx3QkFBd0IsT0FBTyx5QkFBeUIseUJBQXlCLDJEQUEyRCxZQUFZLGlEQUFpRCxnQ0FBZ0MsT0FBTyw0R0FBNEcsa0RBQWtELElBQUksK0NBQStDLHdEQUF3RCxlQUFlLGNBQWMsZ0dBQWdHLEtBQUssY0FBYyxFQUFFLG9CQUFvQiwySEFBMkgsWUFBWSxrRUFBa0Usd0NBQXdDLG9CQUFvQixzREFBc0QsZ0JBQWdCLG1IQUFtSCxZQUFZLE9BQU8sNkRBQTZELGtFQUFrRSxzQ0FBc0MsMkJBQTJCLElBQUksaUJBQWlCLE9BQU8sT0FBTyxrQkFBa0IsNENBQTRDLGdDQUFnQyxpQkFBaUIsb0VBQW9FLHFCQUFxQixNQUFNLGlCQUFpQixFQUFFLElBQUksb0tBQW9LLDhDQUE4QyxjQUFjLGtDQUFrQyxXQUFXLG9DQUFvQyxFQUFFLHlCQUF5QixvQkFBb0IsYUFBYSxNQUFNLG1EQUFtRCx1QkFBdUIseUNBQXlDLGlDQUFpQyw4QkFBOEIsR0FBRyx3QkFBd0IseUNBQXlDLG9HQUFvRyxNQUFNLGNBQWMsNkJBQTZCLFVBQVUsaUJBQWlCLDRCQUE0QixXQUFXLE1BQU0saURBQWlELElBQUksOEJBQThCLDBCQUEwQixFQUFFLFNBQVMsZ0NBQWdDLGFBQWEsT0FBTyx1QkFBdUIsNkJBQTZCLFNBQVMseUZBQXlGLE1BQU0sMEJBQTBCLE9BQU8sb0NBQW9DLG1CQUFtQix1QkFBdUIsWUFBWSxnREFBZ0QsWUFBWSxNQUFNLGNBQWMsMEVBQTBFLDhFQUE4RSxZQUFZLG1DQUFtQyxJQUFJLG1FQUFtRSxJQUFJLHNCQUFzQixhQUFhLG9CQUFvQixlQUFlLFFBQVEsNk9BQTZPLHFGQUFxRixtTkFBbU4sT0FBTyxpQkFBaUIsZ0NBQWdDLG1CQUFtQixXQUFXLEVBQUUsbUVBQW1FLGlCQUFpQixVQUFVLGtCQUFrQiwrQkFBK0IsOERBQThELDZCQUE2QixxQkFBcUIsb0NBQW9DLFFBQVEsT0FBTyw0QkFBNEIsU0FBUyxrRUFBa0UsUUFBUSxPQUFPLFFBQVEsdUNBQXVDLFFBQVEsT0FBTyxFQUFFLFdBQVcsd0RBQXdELFNBQVMsa0JBQWtCLGVBQWUsNkZBQTZGLGlCQUFpQixZQUFZLHlCQUF5QixlQUFlLGtCQUFrQixlQUFlLFlBQVksSUFBSSxtQkFBbUIsMkNBQTJDLFFBQVEsb0hBQW9ILEtBQUssbUJBQW1CLElBQUksb0JBQW9CLEdBQUcsT0FBTyxpREFBaUQsa0RBQWtELGFBQWEsa0RBQWtELGVBQWUsc0NBQXNDLElBQUksZ1RBQWdULDJJQUEySSxrSEFBa0gsd0JBQXdCLEVBQUUsR0FBRyxFQUFFLEtBQUssa0VBQWtFLDJFQUEyRSxrSUFBa0ksT0FBTyx3Q0FBd0Msc0NBQXNDLDJCQUEyQixvQ0FBb0MsUUFBUSxJQUFJLHFDQUFxQyxtQkFBbUIsMkZBQTJGLEVBQUUsc0JBQXNCLG9CQUFvQixnQkFBZ0IsOEVBQThFLElBQUkseUJBQXlCLDJGQUEyRixhQUFhLGNBQWMsSUFBSSw4RUFBOEUsSUFBSSwwSUFBMEksU0FBUyxpREFBaUQsbUhBQW1ILFlBQVksc0JBQXNCLGtCQUFrQixtQ0FBbUMsOEJBQThCLFVBQVUsMkNBQTJDLGVBQWUsc0NBQXNDLGtCQUFrQixzQkFBc0IsNkRBQTZELFdBQVcsZ0ZBQWdGLHNCQUFzQixzQkFBc0IsbUJBQW1CLDBHQUEwRyx5REFBeUQsUUFBUSx3QkFBd0IsWUFBWSx3QkFBd0IscUJBQXFCLHNEQUFzRCw2RkFBNkYsTUFBTSxvQkFBb0IsUUFBUSxjQUFjLGdIQUFnSCxnQkFBZ0IsZUFBZSw0QkFBNEIsTUFBTSxzQkFBc0Isc0JBQXNCLFNBQVMsK0dBQStHLFNBQVMsTUFBTSwyQkFBMkIsZ0JBQWdCLE9BQU8sY0FBYyxVQUFVLGVBQWUsbUJBQW1CLFVBQVUsOENBQThDLE9BQU8scUJBQXFCLGtEQUFrRCw4REFBOEQsdUJBQXVCLHVCQUF1QixJQUFJLFNBQVMsbUNBQW1DLE9BQU8scUNBQXFDLFFBQVEsR0FBRyxnQkFBZ0IsSUFBSSw2Q0FBNkMsSUFBSSx3Q0FBd0MsWUFBWSxRQUFRLCtEQUErRCx1QkFBdUIsRUFBRSw2QkFBNkIsTUFBTSxvSEFBb0gsbUJBQW1CLE1BQU0sUUFBUSxxT0FBcU8sbUJBQW1CLE9BQU8sY0FBYyxrQkFBa0IsZ0JBQWdCLHlCQUF5QixHQUFHLG1DQUFtQyxJQUFJLG9CQUFvQixJQUFJLHdDQUF3QyxPQUFPLElBQUksUUFBUSxHQUFHLE9BQU8sVUFBVSxNQUFNLFlBQVksUUFBUSxtREFBbUQsTUFBTSx3RUFBd0UsZ0JBQWdCLE1BQU0sd0VBQXdFLGdCQUFnQixZQUFZLGlCQUFpQixFQUFFLE9BQU8sV0FBVyx5QkFBeUIsZ0JBQWdCLGdCQUFnQixFQUFFLDhFQUE4RSxJQUFJLHlCQUF5QixZQUFZLFVBQVUsV0FBVyxRQUFRLFlBQVksb0NBQW9DLEVBQUUsZ0JBQWdCLHVCQUF1QixFQUFFLDRCQUE0QixFQUFFLHdCQUF3QixRQUFRLHlCQUF5QixTQUFTLElBQUksb0JBQW9CLHlCQUF5QixHQUFHLGFBQWEsUUFBUSxTQUFTLDBDQUEwQyxJQUFJLGNBQWMsTUFBTSx3REFBd0QsaUJBQWlCLFlBQVkscUpBQXFKLDBHQUEwRyxvSEFBb0gsa0VBQWtFLDBGQUEwRixTQUFTLHdDQUF3QyxFQUFFLHdDQUF3QyxrQ0FBa0MsT0FBTyxVQUFVLEtBQUssZUFBZSxVQUFVLDJEQUEyRCxTQUFTLDZCQUE2QixJQUFJLG9CQUFvQixNQUFNLGFBQWEsdURBQXVELDRCQUE0QixVQUFVLE9BQU8sb0JBQW9CLFdBQVcsZUFBZSxHQUFHLHlCQUF5QixHQUFHLGtDQUFrQyxJQUFJLFFBQVEsSUFBSSxrQ0FBa0MsU0FBUyxVQUFVLHVCQUF1QixxQkFBcUIsZ0NBQWdDLGVBQWUsT0FBTyxNQUFNLGlEQUFpRCxlQUFlLHFCQUFxQixvQkFBb0IsY0FBYyxPQUFPLE1BQU0saUNBQWlDLG1CQUFtQixnQkFBZ0IsRUFBRSw2QkFBNkIsSUFBSSxvREFBb0Qsc05BQXNOLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsS0FBSyxHQUFHLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxhQUFhLEdBQUcsS0FBSyxFQUFFLElBQUksU0FBUyxFQUFFLEtBQUssa0JBQWtCLElBQUksaUZBQWlGLElBQUksU0FBUyxZQUFZLGVBQWUsZ0RBQWdELEVBQUUsdUJBQXVCLDRHQUE0RyxRQUFRLG9IQUFvSCxjQUFjLEVBQUUsSUFBSSxTQUFTLFFBQVEsZUFBZSw0Q0FBNEMsNEhBQTRILE9BQU8saUJBQWlCLE1BQU0sa0JBQWtCLGlCQUFpQixFQUFFLElBQUksZ0ZBQWdGLHVCQUF1QixHQUFHLDhDQUE4QyxxQkFBcUIsZ0RBQWdELGlCQUFpQixzQkFBc0IsY0FBYyxxRUFBcUUsa0NBQWtDLHlCQUF5QixrQ0FBa0MsMEhBQTBILGlDQUFpQyxPQUFPLHFDQUFxQyw2Q0FBNkMsaUJBQWlCLGlCQUFpQixJQUFJLG9CQUFvQixlQUFlLGdCQUFnQixFQUFFLGtDQUFrQyxPQUFPLGtDQUFrQywyREFBMkQsS0FBSyxHQUFHLEVBQUUsY0FBYyxRQUFRLGtFQUFrRSxxQkFBcUIsSUFBSSxNQUFNLG1CQUFtQiwwQkFBMEIsYUFBYSxjQUFjLDJDQUEyQyxxQ0FBcUMsS0FBSyxjQUFjLHNCQUFzQixvREFBb0QsMkJBQTJCLHVCQUF1QiwwQkFBMEIsT0FBTyx5QkFBeUIsd0JBQXdCLDhDQUE4QyxVQUFVLHNFQUFzRSx3QkFBd0IsRUFBRSx5QkFBeUIsMkJBQTJCLHVCQUF1QixpREFBaUQsZUFBZSxFQUFFLGVBQWUsWUFBWSxjQUFjLHNCQUFzQixhQUFhLDJHQUEyRyxHQUFHLDRCQUE0QiwrQkFBK0IsZ0pBQWdKLDZCQUE2QiwrREFBK0Qsa0NBQWtDLDZCQUE2QixvQ0FBb0MscUNBQXFDLGVBQWUsY0FBYyxvQ0FBb0MsNENBQTRDLGlCQUFpQixrQkFBa0IsaUNBQWlDLGFBQWEsRUFBRSwrR0FBK0csR0FBRyxrQkFBa0Isc0JBQXNCLHFCQUFxQixtQkFBbUIsR0FBRyxZQUFZLEdBQUcsSUFBSSw0Q0FBNEMsT0FBTyxhQUFhLHlFQUF5RSwwREFBMEQsOEJBQThCLGFBQWEsZ0JBQWdCLCtHQUErRyw4QkFBOEIsbUZBQW1GLGlCQUFpQiwyRkFBMkYscURBQXFELDRDQUE0Qyx1QkFBdUIsK0lBQStJLHFDQUFxQyxlQUFlLDhCQUE4QixlQUFlLElBQUksbURBQW1ELCtGQUErRiwyQ0FBMkMsVUFBVSxzQ0FBc0MsbUJBQW1CLGNBQWMscURBQXFELG1CQUFtQixTQUFTLGFBQWEsRUFBRSxJQUFJLFFBQVEsT0FBTyxxSUFBcUksZ0JBQWdCLDBCQUEwQixZQUFZLEdBQUcsT0FBTyxtQkFBbUIsUUFBUSxzQkFBc0Isc0ZBQXNGLGlCQUFpQiw2QkFBNkIsbUJBQW1CLEVBQUUsY0FBYyxlQUFlLGNBQWMsZUFBZSxpQkFBaUIsbUNBQW1DLDhKQUE4SixrQ0FBa0MsT0FBTyxjQUFjLEdBQUcsTUFBTSxpQ0FBaUM7QUFDemt1UztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxPQUFPLEtBQUssTUFBTTtBQUMxQixRQUFRLE9BQU8sS0FBSyxTQUFTO0FBQzdCLFFBQVEsUUFBUSxLQUFLLFNBQVM7QUFDOUIsUUFBUSxRQUFRLEtBQUssTUFBTTtBQUMzQixRQUFRLE9BQU8sS0FBSyxNQUFNO0FBQzFCLE9BQU8sdUJBQXVCLDhEQUE4RCwrRUFBK0UsRUFBRSxnQ0FBZ0MsTUFBTSxJQUFJLGlQQUFpUCxJQUFJLGtMQUFrTCxtQkFBbUIsdUJBQXVCLGdFQUFnRSxTQUFTLGlCQUFpQixzQkFBc0IsY0FBYyxhQUFhLE9BQU8saUJBQWlCLDBCQUEwQixrQkFBa0IsWUFBWSxrQ0FBa0MsMkdBQTJHLFlBQVksa0dBQWtHLG9DQUFvQyw0UEFBNFAsR0FBRyxTQUFTLHNCQUFzQixTQUFTLG9DQUFvQyxxQ0FBcUMsNkJBQTZCLDJCQUEyQixpQkFBaUIsY0FBYywySEFBMkgsaUNBQWlDLHVCQUF1QiwrQkFBK0IscUJBQXFCLCtCQUErQixFQUFFLFlBQVksc0JBQXNCLG9GQUFvRiw4REFBOEQsb0lBQW9JLHVGQUF1RixtREFBbUQsV0FBVyxtSEFBbUgscUdBQXFHLG9DQUFvQywrSUFBK0ksZUFBZSw0QkFBNEIscUNBQXFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sOERBQThELGVBQWUsdUVBQXVFLHdCQUF3QiwwQ0FBMEMseUJBQXlCLG9CQUFvQix5QkFBeUIsd0VBQXdFLDBCQUEwQixZQUFZLDRCQUE0QixpREFBaUQsMkJBQTJCLFlBQVksK0JBQStCLDBEQUEwRCxnQkFBZ0IsNkNBQTZDLG9DQUFvQyxLQUFLLG1HQUFtRyxnSUFBZ0ksRUFBRSx5QkFBeUIsY0FBYyxnREFBZ0Qsb0dBQW9HLHVHQUF1RyxHQUFHLGdFQUFnRSxVQUFVLGNBQWMsbURBQW1ELGlCQUFpQix1RkFBdUYsZ0NBQWdDLDBDQUEwQyxvRUFBb0UsK0JBQStCLGlQQUFpUCxrQ0FBa0MsMEJBQTBCLDhDQUE4QyxFQUFFLEVBQUUsZUFBZSxJQUFJLHVPQUF1TyxJQUFJLG1EQUFtRCwyQkFBMkIsMFZBQTBWLFdBQVcsMkZBQTJGLEVBQUUsaUJBQWlCLGdCQUFnQixjQUFjLGtCQUFrQiwyQ0FBMkMsa0JBQWtCLGlKQUFpSixZQUFZLDRDQUE0QyxvQ0FBb0MscUNBQXFDLHFEQUFxRCxvQ0FBb0MsY0FBYyw2QkFBNkIsdUJBQXVCLDJCQUEyQixxSUFBcUksZ0hBQWdILGFBQWEsNkJBQTZCLGFBQWEsRUFBRSxjQUFjLGdEQUFnRCxvQkFBb0IsMFdBQTBXLHdFQUF3RSxpQkFBaUIsK0NBQStDLGlCQUFpQiw4QkFBOEIsNkJBQTZCLE9BQU8sd0VBQXdFLEdBQUcsa0NBQWtDLDJGQUEyRixjQUFjLDZCQUE2QiwyRkFBMkYsT0FBTyxpQkFBaUIsZ0JBQWdCLHFEQUFxRCxhQUFhLDhYQUE4WCxXQUFXLEtBQUssbUNBQW1DLG9CQUFvQixnQkFBZ0Isb0JBQW9CLDBFQUEwRSxnQkFBZ0Isb0JBQW9CLEVBQUUsRUFBRSx1QkFBdUIsTUFBTSxnQkFBZ0IsWUFBWSxZQUFZLDBCQUEwQixFQUFFLHFIQUFxSCxrQ0FBa0MsS0FBSyxTQUFTLHFDQUFxQyxvQkFBb0IsZ0JBQWdCLCtCQUErQiw0SEFBNEgsOEJBQThCLHVKQUF1SixzQkFBc0IsaUhBQWlILGdDQUFnQyxjQUFjLDRCQUE0Qiw0QkFBNEIsR0FBRyxvQkFBb0Isa0JBQWtCLFdBQVcsK0JBQStCLElBQUksK0RBQStELGlCQUFpQixhQUFhLEdBQUcseUNBQXlDLG9CQUFvQixhQUFhLEVBQUUsYUFBYSx3Q0FBd0MsK0RBQStELE9BQU8sOEJBQThCLHlCQUF5QixlQUFlLFVBQVUsOEJBQThCLDZCQUE2QiwyQkFBMkIsdUNBQXVDLE1BQU0sVUFBVSwwQ0FBMEMsOEVBQThFLFlBQVksV0FBVywwQ0FBMEMsNkNBQTZDLHVDQUF1QyxnQkFBZ0IsbUZBQW1GLFlBQVksV0FBVyx5Q0FBeUMsR0FBRyxFQUFFLFFBQVEsWUFBWSwrQkFBK0IsSUFBSSx1Q0FBdUMsSUFBSSxvSkFBb0osT0FBTyxpQ0FBaUMsWUFBWSx1QkFBdUIsc0lBQXNJLFNBQVMsR0FBRyxJQUFJLDBCQUEwQixZQUFZLEVBQUUsSUFBSSxTQUFTLEtBQUssaUJBQWlCLGNBQWMsMEJBQTBCLDRCQUE0QixrQkFBa0IsUUFBUSxrQkFBa0Isc0JBQXNCLDBFQUEwRSwyRkFBMkYscUJBQXFCLEVBQUUsNkNBQTZDLG9FQUFvRSw2R0FBNkcsRUFBRSwyREFBMkQsSUFBSSwwQkFBMEIsOENBQThDLGFBQWEscUJBQXFCLGFBQWEsdUNBQXVDLEVBQUUsNkJBQTZCLG1CQUFtQixFQUFFLEVBQUUsZUFBZSxzQkFBc0Isa0NBQWtDLElBQUksK0JBQStCLFlBQVksYUFBYSxZQUFZLHVCQUF1QiwwSEFBMEgsU0FBUyxHQUFHLHdCQUF3QixVQUFVLHFCQUFxQixhQUFhLCtCQUErQixFQUFFLE1BQU0sb0JBQW9CLHNDQUFzQyxJQUFJLDBKQUEwSixJQUFJLHlCQUF5QixhQUFhLElBQUksZ0lBQWdJLHFCQUFxQiw2QkFBNkIsS0FBSyw2Q0FBNkMseUJBQXlCLG9EQUFvRCwwQ0FBMEMsYUFBYSxpREFBaUQsYUFBYSxtQkFBbUIsK0JBQStCLEVBQUUsZ0JBQWdCLGtFQUFrRSxtQ0FBbUMsdUJBQXVCLHlCQUF5QixTQUFTLEVBQUUsOEhBQThILEVBQUUsbUJBQW1CLHNCQUFzQix5QkFBeUIsaUNBQWlDLEVBQUUsaUNBQWlDLElBQUksb0NBQW9DLDBCQUEwQixRQUFRLG1CQUFtQiwrREFBK0QsNkJBQTZCLFNBQVMsS0FBSyxvQkFBb0IsMkdBQTJHLEVBQUUsRUFBRSwwQkFBMEIsZUFBZSxtR0FBbUcsbUJBQW1CLGVBQWUsd0JBQXdCLDJGQUEyRixpQkFBaUIsb0NBQW9DLHVCQUF1QixJQUFJLGNBQWMsU0FBUyxlQUFlLFlBQVksbUJBQW1CLEtBQUssd0NBQXdDLGtCQUFrQixnSEFBZ0gsdURBQXVELDBCQUEwQixNQUFNLHlDQUF5QyxrREFBa0QsU0FBUyxFQUFFLFNBQVMsaUJBQWlCLHFCQUFxQixnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxJQUFJLGlCQUFpQixtQkFBbUIsNkJBQTZCLG1CQUFtQix1RkFBdUYsWUFBWSxtQkFBbUIsSUFBSSxnQkFBZ0IsMkRBQTJELE9BQU8sU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxjQUFjLFVBQVUscUJBQXFCLE1BQU0scUNBQXFDLG9EQUFvRCxpR0FBaUcsdUZBQXVGLGtCQUFrQiw4SkFBOEosR0FBRyxrQkFBa0IsMENBQTBDLElBQUksc0JBQXNCLG1CQUFtQixzQkFBc0IsMkNBQTJDLElBQUksZUFBZSwrSkFBK0osMERBQTBELG9FQUFvRSwyQkFBMkIsTUFBTSw2Q0FBNkMsd0NBQXdDLGdCQUFnQiw0RUFBNEUsNERBQTRELG1GQUFtRixZQUFZLEdBQUcsMEZBQTBGLG9EQUFvRCxzQkFBc0IsRUFBRSxnREFBZ0Qsb0JBQW9CLEVBQUUsMkRBQTJELDJCQUEyQixLQUFLLG9EQUFvRCxvQkFBb0IsaUNBQWlDLDJCQUEyQixzQ0FBc0MsRUFBRSxnQkFBZ0IsTUFBa0MsMkVBQTJFLHFDQUFxQyxVQUFVLCtDQUErQyxNQUFNLG9CQUFvQixNQUFNLHdCQUF3QixXQUFXLEdBQUcscUNBQXFDLGdGQUFnRixnQkFBZ0IsRUFBRSxhQUFhLHFCQUFxQiwrREFBK0QscUhBQXFILGtCQUFrQiwyQkFBMkIsS0FBSyxNQUFNLEdBQUcsYUFBYSxnQkFBZ0IsbUNBQW1DLHdJQUF3SSwrREFBK0Qsd0JBQXdCLHFFQUFxRSxvQkFBb0IscUJBQXFCLDhEQUE4RCxrQkFBa0IsK0NBQStDLFVBQVUsR0FBRyxnQkFBZ0Isd0JBQXdCLDhEQUE4RCxrQkFBa0IsK0NBQStDLFVBQVUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLGNBQWMsd0JBQXdCLHVIQUF1SCw0REFBNEQsK2NBQStjLEVBQUUsb0JBQW9CLCtCQUErQixnREFBZ0QsK0RBQStELEVBQUUsRUFBRSxHQUFHLEVBQUUsY0FBYyx3QkFBd0IsbUhBQW1ILDREQUE0RCwrM0JBQSszQixFQUFFLG9CQUFvQiwrQkFBK0IsZ0RBQWdELCtEQUErRCxFQUFFLEVBQUUsR0FBRyxFQUFFLGNBQWMsdUJBQXVCLHlIQUF5SCwraUJBQStpQixFQUFFLEVBQUUsY0FBYyx1QkFBdUIscUhBQXFILDZiQUE2YixFQUFFLEVBQUUsZUFBZSw2QkFBNkIsMkNBQTJDLEtBQUssMkJBQTJCLGdmQUFnZixFQUFFLEdBQUcsZUFBZSxpQ0FBaUMsS0FBSywyQkFBMkIsaUVBQWlFLHNCQUFzQixFQUFFLEVBQUUsR0FBRyx3QkFBd0IscUNBQXFDLFVBQVUsa0JBQWtCLFVBQVUsOEJBQThCLGFBQWEsb0JBQW9CLGNBQWMsRUFBRSxlQUFlLElBQUksaUNBQWlDLHdFQUF3RSw2QkFBNkIsc0JBQXNCLHFHQUFxRyxvQkFBb0IsRUFBRSw4Q0FBOEMsSUFBSSxtQ0FBbUMscUJBQXFCLHFCQUFxQixTQUFTLDZCQUE2QiwrQkFBK0IsT0FBTyxlQUFlLGlDQUFpQyxFQUFFLEVBQUUsNEJBQTRCLGNBQWMsdUJBQXVCLHlIQUF5SCxTQUFTLGVBQWUsZ0NBQWdDLGVBQWUsSUFBSSxzSkFBc0osK0dBQStHLG1EQUFtRCx1QkFBdUIsaUdBQWlHLGFBQWEsY0FBYyxnRkFBZ0YsRUFBRSw4QkFBOEIsSUFBSSwwQ0FBMEMsZ0JBQWdCLGNBQWMsRUFBRSxJQUFJLHFDQUFxQyxRQUFRLGdDQUFnQyxVQUFVLE9BQU8sU0FBUyxVQUFVLHVCQUF1Qiw0QkFBNEIsY0FBYyxzQkFBc0IsMENBQTBDLGdCQUFnQixFQUFFLElBQUksbUNBQW1DLElBQUksYUFBYSxJQUFJLG9HQUFvRyx1Q0FBdUMsY0FBYyxhQUFhLHlGQUF5RixvQ0FBb0Msb0NBQW9DLFdBQVcsS0FBSyw2QkFBNkIsaUJBQWlCLDRCQUE0QixXQUFXLG1DQUFtQyx3QkFBd0IsbUNBQW1DLGlIQUFpSCxtQ0FBbUMsZUFBZSxzQkFBc0IsMENBQTBDLFdBQVcsMEJBQTBCLDZFQUE2RSxzRUFBc0UsZ0NBQWdDLFNBQVMsNERBQTRELDBCQUEwQixVQUFVLFVBQVUsV0FBVyxHQUFHLHVDQUF1QyxlQUFlLDZCQUE2QixpQkFBaUIsRUFBRSxJQUFJLDJCQUEyQiwwQkFBMEIsUUFBUSxJQUFJLDZDQUE2Qyx1RkFBdUYsZ0VBQWdFLE1BQU0sVUFBVSwyQkFBMkIsdUNBQXVDLHFCQUFxQixpREFBaUQsbUNBQW1DLHlCQUF5Qix3TUFBd00sZ1FBQWdRLDZEQUE2RCxJQUFJLFVBQVUsOERBQThELG1DQUFtQyxtQ0FBbUMsV0FBVyxjQUFjLHlGQUF5RixrREFBa0Qsa0NBQWtDLFdBQVcscURBQXFELHFCQUFxQiwwQkFBMEIsc0JBQXNCLDRDQUE0QyxzQkFBc0IseUJBQXlCLHNCQUFzQixlQUFlLDZDQUE2QyxZQUFZLHFCQUFxQixjQUFjLGlCQUFpQixPQUFPLCtEQUErRCxNQUFNLHdCQUF3QixZQUFZLEdBQUcsUUFBUSxJQUFJLGdEQUFnRCxzQkFBc0IsZ09BQWdPLG1EQUFtRCx3REFBd0QsZUFBZSw2QkFBNkIsNEJBQTRCLEVBQUUsa0NBQWtDLElBQUksMEJBQTBCLElBQUksMENBQTBDLE1BQU0sc0JBQXNCLHNCQUFzQixPQUFPLHVEQUF1RCxFQUFFLDZCQUE2QixlQUFlLFVBQVUsWUFBWSxFQUFFLHVDQUF1QyxlQUFlLElBQUksd0NBQXdDLElBQUksVUFBVSxNQUFNLG1DQUFtQywrQkFBK0Isa0JBQWtCLEVBQUUsT0FBTywrQkFBK0IsY0FBYyx1QkFBdUIsK0lBQStJLFNBQVMsa0NBQWtDLElBQUksZ1FBQWdRLElBQUksNEZBQTRGLFlBQVksd01BQXdNLHVCQUF1QixtRUFBbUUsU0FBUyx3QkFBd0IsbUJBQW1CLFNBQVMsbURBQW1ELHFDQUFxQyw2QkFBNkIsaURBQWlELGFBQWEsMkJBQTJCLDZEQUE2RCx1REFBdUQscUZBQXFGLGdFQUFnRSw4REFBOEQsRUFBRSw2QkFBNkIsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLCtCQUErQixJQUFJLDBCQUEwQixJQUFJLHVGQUF1RixPQUFPLGVBQWUsTUFBTSxXQUFXLDBCQUEwQixZQUFZLGNBQWMsc0JBQXNCLG1EQUFtRCxvRkFBb0YsRUFBRSxnQ0FBZ0MsSUFBSSwwQkFBMEIsSUFBSSxpRUFBaUUsTUFBTSxtQkFBbUIsc0JBQXNCLG1DQUFtQywrQkFBK0IseUJBQXlCLDhCQUE4QixFQUFFLEVBQUUsbVBBQW1QLGlCQUFpQixvQ0FBb0MsdUJBQXVCLElBQUksY0FBYyxTQUFTLGdKQUFnSixzQ0FBc0MsbU1BQW1NLDBEQUEwRCxjQUFjLDZCQUE2QixtQkFBbUIsdUZBQXVGLFlBQVksbUJBQW1CLElBQUksZ0JBQWdCLHVEQUF1RCxPQUFPLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsY0FBYyxVQUFVLHFCQUFxQixNQUFNLHFDQUFxQyxvREFBb0QsaUdBQWlHLHVGQUF1RixrQkFBa0IsOEpBQThKLHlCQUF5Qix1QkFBdUIsd0JBQXdCLGtDQUFrQyx5QkFBeUIsUUFBUSxzQ0FBc0MsWUFBWSxtQkFBbUIsS0FBSyx3Q0FBd0Msa0JBQWtCLGdIQUFnSCx1REFBdUQsMEJBQTBCLE1BQU0seUNBQXlDLGtEQUFrRCxTQUFTLEVBQUUsU0FBUyxHQUFHLFNBQVMsV0FBVyxnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxPQUFPLGdCQUFnQixtQ0FBbUMsMkVBQTJFLHVFQUF1RSx5QkFBeUIsdUNBQXVDLG9HQUFvRywyQkFBMkIsdUVBQXVFLHlEQUF5RCxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLGVBQWUsWUFBWSxtQkFBbUIsS0FBSyx3Q0FBd0Msa0JBQWtCLGdIQUFnSCx1REFBdUQsMEJBQTBCLE1BQU0seUNBQXlDLGtEQUFrRCxTQUFTLEVBQUUsU0FBUyxpQkFBaUIscUJBQXFCLGdIQUFnSCxxQkFBcUIsaUNBQWlDLHNDQUFzQyxrQkFBa0IsU0FBUyxpQ0FBaUMsZ0VBQWdFLElBQUksbUJBQW1CLFFBQVEsb0ZBQW9GLGVBQWUsYUFBYSx3QkFBd0IscUVBQXFFLG9CQUFvQiw0REFBNEQsR0FBRyxFQUFFLGVBQWUsc0RBQXNELHVCQUF1QixrRUFBa0UsNktBQTZLLDRFQUE0RSx1QkFBdUIscURBQXFELEdBQUcsRUFBRSxFQUFFLGVBQWUscUVBQXFFLHVCQUF1QixVQUFVLHNKQUFzSixhQUFhLElBQUksTUFBTSx1Q0FBdUMsaUJBQWlCLE1BQU0sMEhBQTBILFFBQVEsRUFBRSxJQUFJLFFBQVEsd0JBQXdCLDZFQUE2RSxPQUFPLG1CQUFtQix3R0FBd0csMEJBQTBCLGlCQUFpQixzRUFBc0UsRUFBRSxtQkFBbUIsd0NBQXdDLEdBQUcsRUFBRSxlQUFlLGdGQUFnRix3Q0FBd0MsbUJBQW1CLGtCQUFrQixTQUFTLHdKQUF3SixrRUFBa0UsZUFBZSxvQkFBb0IsOElBQThJLDBCQUEwQiwwQkFBMEIsa0RBQWtELElBQUksaUNBQWlDLHVCQUF1QixNQUFNLDhCQUE4QixNQUFNLFVBQVUsVUFBVSxTQUFTLFlBQVksU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxjQUFjLDRCQUE0QixLQUFLLEtBQUssdUJBQXVCLGVBQWUsdUJBQXVCLFdBQVcsSUFBSSxRQUFRLDhCQUE4QixJQUFJLGlDQUFpQyx1QkFBdUIsTUFBTSw4QkFBOEIsaUNBQWlDLElBQUksUUFBUSxTQUFTLFNBQVMsUUFBUSxJQUFJLDhCQUE4QixRQUFRLGNBQWMsT0FBTyxvQkFBb0IsMENBQTBDLDZCQUE2QixvQkFBb0IsaUNBQWlDLGtDQUFrQyx1Q0FBdUMseUJBQXlCLDhCQUE4QixtSEFBbUgsaURBQWlELEVBQUUsb0NBQW9DLDZCQUE2QixzRUFBc0UsMkVBQTJFLGFBQWEsR0FBRyxnQ0FBZ0MsOERBQThELG9CQUFvQiw4Q0FBOEMsMFFBQTBRLG9CQUFvQix1TUFBdU0saU5BQWlOLE1BQU0sdUJBQXVCLE1BQU0sV0FBVyxnQ0FBZ0Msa0JBQWtCLE1BQWtDLHVEQUF1RCw2QkFBNkIsd0RBQXdELG1CQUFtQixnQkFBZ0Isc0JBQXNCLEdBQUcsRUFBRSxJQUFJLEVBQUUsNEJBQTRCLCtCQUErQixHQUFHLEVBQUUsRUFBRSxvQkFBb0Isb0JBQW9CLGtCQUFrQixvQkFBb0Isb0JBQW9CLCtCQUErQixJQUFJLEdBQUcsRUFBRSxlQUFlLDhCQUE4QiwwRkFBMEYsS0FBSyw0QkFBNEIsOElBQThJLG9CQUFvQiw4TUFBOE0sR0FBRyxHQUFHLGNBQWMsdUJBQXVCLHNJQUFzSSxrUEFBa1AsRUFBRSxFQUFFLGVBQWUsNkJBQTZCLHNGQUFzRixLQUFLLDJCQUEyQix3b0JBQXdvQixFQUFFLElBQUksK0VBQStFLGFBQWEsT0FBTyxRQUFRLEVBQUUsMENBQTBDLGdCQUFnQixvQ0FBb0MsdUJBQXVCLElBQUksY0FBYyxTQUFTLGdCQUFnQixtQkFBbUIsNkJBQTZCLG1CQUFtQix1RkFBdUYsWUFBWSxtQkFBbUIsSUFBSSxnQkFBZ0IsMkRBQTJELE9BQU8sU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxjQUFjLFVBQVUscUJBQXFCLE1BQU0sb0NBQW9DLG9EQUFvRCxpR0FBaUcsc0ZBQXNGLGtCQUFrQiw4SkFBOEosR0FBRyxhQUFhLHlIQUF5SCwrSUFBK0ksaUNBQWlDLFFBQVEsbURBQW1ELE1BQU0sK0NBQStDLE1BQU0sZ0JBQWdCLGlDQUFpQyxXQUFXLHVCQUF1Qiw0RUFBNEUsYUFBYSxPQUFPLDJCQUEyQixFQUFFLDBDQUEwQyxjQUFjLFlBQVksbUJBQW1CLEtBQUssd0NBQXdDLGtCQUFrQixnSEFBZ0gsdURBQXVELDBCQUEwQixNQUFNLHlDQUF5QyxrREFBa0QsU0FBUyxFQUFFLFNBQVMsNEJBQTRCLDJCQUEyQixvQkFBb0IsY0FBYyxtQkFBbUIsY0FBYyxtQkFBbUIsZUFBZSwrQ0FBK0MsVUFBVSwwQ0FBMEMsYUFBYSxNQUFNLDBCQUEwQixhQUFhLHVCQUF1QixJQUFJLGlDQUFpQyx1QkFBdUIsbUJBQW1CLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsZUFBZSxPQUFPLG1CQUFtQixrQ0FBa0MsSUFBSSxpQ0FBaUMsdUJBQXVCLE1BQU0sY0FBYywrQkFBK0IseUJBQXlCLG1CQUFtQixTQUFTLFNBQVMsUUFBUSxJQUFJLDhCQUE4QixRQUFRLGNBQWMsZ0JBQWdCLFFBQVEsb0JBQW9CLDRDQUE0QyxJQUFJLGlDQUFpQyx1QkFBdUIsTUFBTSxjQUFjLG1CQUFtQixLQUFLLE1BQU0sMkJBQTJCLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsY0FBYyxvQkFBb0IsZUFBZSxxQkFBcUIsS0FBSyxLQUFLLGtCQUFrQixxRUFBcUUsTUFBTSxTQUFTLG9CQUFvQixXQUFXLEVBQUUsc0JBQXNCLDBGQUEwRiwyQkFBMkIsOEJBQThCLHdCQUF3QixhQUFhLHlDQUF5QywrREFBK0QsYUFBYSxhQUFhLDBDQUEwQyxJQUFJLHNCQUFzQixtQ0FBbUMsT0FBTyxTQUFTLEdBQUcsNkJBQTZCLFNBQVMsaUNBQW1CLElBQUksa0NBQWtDLCtCQUErQixtQ0FBbUMsaUJBQWlCLDBDQUEwQyxpQ0FBbUIsWUFBWSxpQ0FBbUIsT0FBTywwQ0FBMEMsT0FBTyxpQ0FBbUIsTUFBTSxJQUFJLElBQUksT0FBTyx5RUFBeUUsaUNBQW1CLGlCQUFpQiw4R0FBOEcsMEJBQTBCLGlDQUFtQixNQUFNLFNBQVMsZUFBZSxjQUFjLGlCQUFpQixtQ0FBbUMsaURBQWlELGNBQWMsRUFBRSx1QkFBdUIsaUNBQW1CLFdBQVcsSUFBSSxpQ0FBbUIsV0FBVyxlQUFlLGlDQUFtQixVQUFVLGlDQUFtQixvQ0FBb0MsdUJBQXVCLEVBQUUsQ0FBQyxpQ0FBbUIsb0RBQW9ELGlDQUFtQixPQUFPLDRGQUE0RixlQUFlLHdDQUF3QyxTQUFTLEVBQUUsQ0FBQyxpQ0FBbUIsV0FBVyxJQUFJLDBCQUFtQixJQUFJLDhCQUE4QixhQUFhLGlDQUFtQixHQUFHLDBCQUFtQixFQUFFLGlDQUFtQixHQUFHLDBCQUFtQixFQUFFLDBFQUEwRSxFQUFFLFlBQVksaUNBQW1CLDJMQUEyTCxpQ0FBbUIsUUFBUSxpQ0FBbUIsOEtBQThLLGlDQUFtQixRQUFRLGlDQUFtQixrRUFBa0UsaUNBQW1CLFFBQVEsaUNBQW1CLGlNQUFpTSxpQ0FBbUIsUUFBUSxpQ0FBbUIscUxBQXFMLGlDQUFtQixRQUFRLGlDQUFtQixvTEFBb0wsaUNBQW1CLFFBQVEsaUNBQW1CLDhOQUE4TixzSUFBc0ksTUFBTSxpQ0FBbUIsMFBBQTBQLHNJQUFzSSxNQUFNLGlDQUFtQiwyQ0FBMkMsaUNBQW1CLG1DQUFtQyxnQkFBZ0Isb0NBQW9DLHVCQUF1QixJQUFJLGNBQWMsU0FBUyxNQUFNLGlDQUFtQixvSUFBb0ksY0FBYyxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsVUFBVSxpREFBaUQsa0RBQWtELFNBQVMsRUFBRSxTQUFTLGdCQUFnQixxQkFBcUIsZ0hBQWdILHFCQUFxQixpQ0FBaUMsc0NBQXNDLGtCQUFrQixTQUFTLGlDQUFpQyxnRUFBZ0UsSUFBSSxPQUFPLGlDQUFpQyxpeEJBQWl4QixlQUFlLHFDQUFxQyxpQkFBaUIsSUFBZ0MscUNBQXFDLG1LQUFtSyxZQUFZLGNBQWMsc0NBQXNDLFlBQVksMkJBQTJCLHlHQUF5RyxJQUFJLGlDQUFtQix3Q0FBd0MsZUFBZSxrREFBa0QsSUFBSSx3QkFBd0IsaUJBQWlCLDJDQUEyQyxnQkFBZ0IsK0VBQStFLEdBQUcsd0JBQXdCLEVBQUUsS0FBSyxVQUFVLGNBQWMsMERBQTBELHdDQUF3Qyw2QkFBNkIsK0JBQStCLDZCQUE2Qix5RUFBeUUsNlBBQTZQLFNBQVMsMkNBQTJDLDZDQUE2Qyw2QkFBNkIsK0JBQStCLDZCQUE2Qiw4RUFBOEUsNlBBQTZQLFNBQVMsdUNBQXVDLHdDQUF3Qyw2QkFBNkIsK0JBQStCLDZCQUE2QixxRUFBcUUsME5BQTBOLFNBQVMsdUNBQXVDLDZDQUE2Qyw2QkFBNkIsK0JBQStCLDZCQUE2QiwwRUFBMEUsME5BQTBOLFNBQVMsb0VBQW9FLEtBQUssd0JBQXdCLElBQUkscUJBQXFCLFNBQVMsR0FBRyxrQkFBa0IsMENBQTBDLHNDQUFzQyxzRUFBc0UsOEJBQThCLFVBQVUsSUFBSSxpQ0FBbUIsdUNBQXVDLGlCQUFpQixvQ0FBb0MsdUJBQXVCLElBQUksY0FBYyxTQUFTLGVBQWUseUZBQXlGLDZCQUE2QixtQkFBbUIsdUZBQXVGLFlBQVksbUJBQW1CLElBQUksZ0JBQWdCLHVEQUF1RCxPQUFPLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsY0FBYyxVQUFVLHFCQUFxQixNQUFNLHFDQUFxQyxvREFBb0QsaUdBQWlHLHVGQUF1RixrQkFBa0IsOEpBQThKLE9BQU8sOEJBQThCLHVGQUF1Riw4QkFBOEIsb0tBQW9LLGdFQUFnRSxZQUFZLE9BQU8sRUFBRSxxREFBcUQsY0FBYyxnQ0FBZ0MsbWNBQW1jLG9DQUFvQyx1REFBdUQsd0RBQXdELDJDQUEyQyxzQ0FBc0MseUNBQXlDLHVDQUF1Qyx1Q0FBdUMsOEtBQThLLG9IQUFvSCxrREFBa0QseUNBQXlDLHNHQUFzRyxpR0FBaUcsdUdBQXVHLHlHQUF5RywwR0FBMEcsOERBQThELGdFQUFnRSxxQ0FBcUMsOERBQThELG1LQUFtSyxtREFBbUQsdURBQXVELG1FQUFtRSxvRUFBb0UsKzVDQUErNUMsa0NBQWtDLDhCQUE4Qiw4QkFBOEIsZ0NBQWdDLDhCQUE4QiwrQkFBK0IsZ0NBQWdDLGdDQUFnQyxnQ0FBZ0MsbUNBQW1DLG9pQkFBb2lCLGdFQUFnRSxnRUFBZ0UsZ0VBQWdFLGdFQUFnRSxnRUFBZ0UsZ0VBQWdFLGdFQUFnRSxnRUFBZ0UsZ0VBQWdFLGtFQUFrRSxrRUFBa0Usa0VBQWtFLGtFQUFrRSxrRUFBa0Usa0VBQWtFLGtFQUFrRSxrRUFBa0Usa0VBQWtFLGtFQUFrRSxrRUFBa0Usa0VBQWtFLGtFQUFrRSxrRUFBa0Usa0VBQWtFLGtFQUFrRSxrRUFBa0Usa0VBQWtFLGtFQUFrRSxrRUFBa0Usa0VBQWtFLGtFQUFrRSxrRUFBa0Usa0VBQWtFLDRCQUE0Qiw0QkFBNEIsYUFBYSxXQUFXLGlGQUFpRiwrQkFBK0IsNkJBQTZCLDZCQUE2QixXQUFXLGVBQWUseUNBQXlDLHFCQUFxQiwyQ0FBMkMsYUFBYSw2QkFBNkIseUNBQXlDLGFBQWEsV0FBVyxzRUFBc0UsS0FBSyx3QkFBd0IsSUFBSSxxQkFBcUIsU0FBUyxHQUFHLGVBQWUsY0FBYyx5QkFBeUIseUNBQXlDLEVBQUUsZUFBZSx1REFBdUQscUJBQXFCLHdEQUF3RCwrQkFBK0IsNEtBQTRLLHVDQUF1Qyw0QkFBNEIsNkJBQTZCLGVBQWUsb0JBQW9CLHVEQUF1RCx3QkFBd0IsNERBQTRELEVBQUUsc0JBQXNCLElBQUksa0JBQWtCLGtCQUFrQixlQUFlLGlDQUFpQyxXQUFXLEtBQUssV0FBVyxzQ0FBc0MsbUVBQW1FLHdEQUF3RCxzREFBc0QsSUFBSSxpQkFBaUIsc0RBQXNELElBQUksVUFBVSx1RUFBdUUscUNBQXFDLFNBQVMsSUFBSSwrQkFBK0IsWUFBWSxNQUFNLEdBQUcscUJBQXFCLFNBQVMsc0JBQXNCLFlBQVkscUNBQXFDLEdBQUcscUJBQXFCLDRCQUE0QixXQUFXLG9CQUFvQixFQUFFLEVBQUUseUdBQXlHLGVBQWUsdUJBQXVCLElBQUksa0NBQWtDLHVCQUF1QixNQUFNLGNBQWMsc0JBQXNCLG1CQUFtQixTQUFTLFNBQVMsUUFBUSxJQUFJLDhCQUE4QixRQUFRLGNBQWMsU0FBUyxlQUFlLHVCQUF1QixJQUFJLGtDQUFrQyx1QkFBdUIsTUFBTSxjQUFjLG1CQUFtQixTQUFTLFNBQVMsUUFBUSxJQUFJLDhCQUE4QixRQUFRLGNBQWMsU0FBUywyQkFBMkIsSUFBSSx3QkFBd0IsU0FBUyxLQUFLLE9BQU8seUNBQXlDLGVBQWUsa0JBQWtCLHVCQUF1QixpQ0FBaUMsbUJBQW1CLGNBQWMsdUJBQXVCLGNBQWMsd0JBQXdCLFVBQVUsR0FBRyxpQkFBaUIsYUFBYSx3QkFBd0IscUJBQXFCLFlBQVksZ0JBQWdCLDBFQUEwRSx3R0FBd0csWUFBWSxJQUFJLGNBQWMsbUJBQW1CLFlBQVksd0RBQXdELEtBQUssdUJBQXVCLEtBQUssa0hBQWtILHlDQUF5QyxrQkFBa0IsTUFBTSx5QkFBeUIsb0JBQW9CLDhCQUE4QixTQUFTLGtDQUFrQyxTQUFTLDBFQUEwRSxJQUFJLFNBQVMseUNBQXlDLGFBQWEsTUFBTSwyQkFBMkIsaUJBQWlCLE1BQU0sb0JBQW9CLDJCQUEyQixNQUFNLCtCQUErQixTQUFTLGNBQWMsU0FBUyxZQUFZLFFBQVEsTUFBTSxxQkFBcUIsT0FBTyxrQ0FBa0MsaUJBQWlCLE1BQU0sNEZBQTRGLDhHQUE4RyxnQkFBZ0IsUUFBUSwyQkFBMkIsK0NBQStDLFVBQVUsZ05BQWdOLEVBQUUsRUFBRSxzQkFBc0IsUUFBUSxPQUFPLHVNQUF1TSxFQUFFLG1CQUFtQixxQkFBcUIsWUFBWSwyQkFBMkIsZ0JBQWdCLFVBQVUsK0VBQStFLDZCQUE2QixnRkFBZ0YscUNBQXFDLEdBQUcsK0JBQStCLGtDQUFrQyxpREFBaUQsbUJBQW1CLDREQUE0RCxrQkFBa0IsSUFBSSx5QkFBeUIsbUJBQW1CLDRCQUE0Qiw4Q0FBOEMsYUFBYSxrR0FBa0csRUFBRSxLQUFLLEVBQUUsSUFBSSxlQUFlLG9CQUFvQixzQkFBc0Isa0JBQWtCLFNBQVMsNkJBQTZCLGdJQUFnSSxTQUFTLGFBQWEsNEtBQTRLLGNBQWMsK0RBQStELG9DQUFvQyxtQ0FBbUMsOEJBQThCLDBCQUEwQixzR0FBc0csTUFBa0Msd0VBQXdFLGFBQWEsNEdBQTRHLEdBQUcsVUFBVSxlQUFlLFlBQVksbUJBQW1CLEtBQUssd0NBQXdDLGtCQUFrQixnSEFBZ0gsdURBQXVELDBCQUEwQixVQUFVLGlEQUFpRCxrREFBa0QsU0FBUyxFQUFFLFNBQVMsaUJBQWlCLHFCQUFxQixnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxJQUFJLGVBQWUsNkJBQTZCLDBGQUEwRixLQUFLLDJCQUEyQixxZkFBcWYsRUFBRSxHQUFHLGVBQWUsNkJBQTZCLHVHQUF1RyxLQUFLLDJCQUEyQixxakJBQXFqQixFQUFFLEdBQUcsZUFBZSxhQUFhLDJCQUEyQixFQUFFLHdCQUF3Qix5Q0FBeUMsRUFBRSwrQ0FBK0MsRUFBRSx5REFBeUQsRUFBRSxnQ0FBZ0MsRUFBRSw2QkFBNkIsR0FBRyxjQUFjLHVCQUF1QixzSEFBc0gscXhGQUFxeEYsRUFBRSxFQUFFLGNBQWMsdUJBQXVCLHlHQUF5Ryw2cUNBQTZxQyxFQUFFLEVBQUUsY0FBYyx3QkFBd0Isd0hBQXdILHFEQUFxRCxvQkFBb0IscURBQXFELG9CQUFvQix3L0NBQXcvQyxHQUFHLEVBQUUsY0FBYyx1QkFBdUIsaUdBQWlHLGdRQUFnUSxFQUFFLEVBQUUsY0FBYyx3QkFBd0IsMkZBQTJGLHNFQUFzRSxneExBQWd4TCxFQUFFLG9CQUFvQiwrQkFBK0IsMERBQTBELG9DQUFvQyxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8saUNBQW1CLHNDQUFzQyxpQ0FBbUIsVUFBVSxpQ0FBbUIsMkNBQTJDLGlDQUFtQixPQUFPLGVBQWUsWUFBWSxtQkFBbUIsS0FBSyx3Q0FBd0Msa0JBQWtCLGdIQUFnSCx1REFBdUQsMEJBQTBCLFVBQVUsaURBQWlELGtEQUFrRCxTQUFTLEVBQUUsU0FBUyxlQUFlLDhEQUE4RCxRQUFRLG1CQUFtQix5QkFBeUIsdUNBQXVDLCtCQUErQixJQUFJLGlDQUFpQyx1QkFBdUIsTUFBTSxjQUFjLDRGQUE0RixXQUFXLEtBQUssV0FBVyx3QkFBd0IscUJBQXFCLGdIQUFnSCxxQkFBcUIsaUNBQWlDLHNDQUFzQyxrQkFBa0IsU0FBUyxpQ0FBaUMsZ0VBQWdFLElBQUksYUFBYSxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsVUFBVSxpREFBaUQsa0RBQWtELFNBQVMsRUFBRSxTQUFTLEdBQUcsS0FBSyxVQUFVLGtDQUFrQyxnQkFBZ0IsU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxjQUFjLCtCQUErQiwyQ0FBMkMsdUZBQXVGLGtDQUFrQyxlQUFlLHVCQUF1Qiw4Q0FBOEMsNkJBQTZCLHdFQUF3RSxhQUFhLFNBQVMsMkNBQTJDLHNCQUFzQixPQUFPLHFNQUFxTSw0RUFBNEUsR0FBRyxFQUFFLGNBQWMsb0RBQW9ELHdEQUF3RCx3QkFBd0Isc0RBQXNELHVEQUF1RCx3REFBd0QsbURBQW1ELE9BQU8sRUFBRSxxQkFBcUIsc0RBQXNELGtCQUFrQixHQUFHLHNCQUFzQixrSEFBa0gsdUVBQXVFLG1CQUFtQixFQUFFLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixxREFBcUQsMERBQTBELHNFQUFzRSx1SEFBdUgsU0FBUyw2QkFBNkIsd0JBQXdCLFVBQVUsa0RBQWtELHdCQUF3QixlQUFlLDBCQUEwQixtQkFBbUIsNEJBQTRCLHFCQUFxQixFQUFFLGdIQUFnSCxxQkFBcUIsaUNBQWlDLHNDQUFzQyxrQkFBa0IsU0FBUyxpQ0FBaUMsZ0VBQWdFLHdCQUF3QixFQUFFLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixvQ0FBb0MsdUJBQXVCLElBQUksY0FBYyxTQUFTLG1RQUFtUSw0SUFBNEksb0JBQW9CLHdCQUF3QixvQkFBb0IsWUFBWSxrQkFBa0IsUUFBUSxXQUFXLHdDQUF3QyxTQUFTLE1BQU0saUNBQWlDLHNDQUFzQyxRQUFRLFdBQVcsNEZBQTRGLFNBQVMsb05BQW9OLDZCQUE2QixtQkFBbUIsdUZBQXVGLFlBQVksbUJBQW1CLElBQUksZ0JBQWdCLHVEQUF1RCxPQUFPLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsY0FBYyxVQUFVLHFCQUFxQixNQUFNLHFDQUFxQyxvREFBb0QsaUdBQWlHLHVGQUF1RixrQkFBa0IsOEpBQThKLGtCQUFrQixzQ0FBc0MsNkNBQTZDLHdCQUF3QixxQkFBcUIsa0JBQWtCLGlEQUFpRCwyQkFBMkIsU0FBUyxtQkFBbUIsd0VBQXdFLFdBQVcsYUFBYSx5RUFBeUUsaUNBQWlDLGlCQUFpQix3Q0FBd0MsMEdBQTBHLDRFQUE0RSw0QkFBNEIsbU5BQW1OLHFDQUFxQyxzQ0FBc0Msb0NBQW9DLFlBQVksbUJBQW1CLEtBQUssd0NBQXdDLGtCQUFrQixnSEFBZ0gsdURBQXVELDBCQUEwQixVQUFVLGlEQUFpRCxrREFBa0QsU0FBUyxFQUFFLFNBQVMsRUFBRSxnSkFBZ0osa0NBQWtDLFNBQVMsV0FBVyxnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxNQUFNLGdCQUFnQixtREFBbUQsb0JBQW9CLHdCQUF3QixvQkFBb0IsWUFBWSxrQkFBa0IsUUFBUSxXQUFXLHdDQUF3QyxTQUFTLE1BQU0saUNBQWlDLHNDQUFzQyxRQUFRLFdBQVcsNEZBQTRGLFNBQVMsNkJBQTZCLHFDQUFxQyxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsVUFBVSxpREFBaUQsa0RBQWtELFNBQVMsRUFBRSxTQUFTLEVBQUUseUNBQXlDLFNBQVMsV0FBVyxnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxNQUFNLGdCQUFnQixtREFBbUQsb0JBQW9CLHdCQUF3QixvQkFBb0IsWUFBWSxrQkFBa0IsUUFBUSxXQUFXLHdDQUF3QyxTQUFTLE1BQU0saUNBQWlDLHNDQUFzQyxRQUFRLFdBQVcsNEZBQTRGLFNBQVMsNkJBQTZCLHFDQUFxQyxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsVUFBVSxpREFBaUQsa0RBQWtELFNBQVMsRUFBRSxTQUFTLEVBQUUsNENBQTRDLFNBQVMsV0FBVyxnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxPQUFPLGVBQWUsUUFBUSxxQ0FBcUMsWUFBWSxtQkFBbUIsS0FBSyx3Q0FBd0Msa0JBQWtCLGdIQUFnSCx1REFBdUQsMEJBQTBCLFVBQVUsaURBQWlELGtEQUFrRCxTQUFTLEVBQUUsU0FBUyxFQUFFLCtCQUErQixTQUFTLG9CQUFvQixnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxNQUFNLGNBQWMsOENBQThDLDhDQUE4QyxxQ0FBcUMsc0NBQXNDLGtDQUFrQyx1Q0FBdUMsc0NBQXNDLHNCQUFzQiw2QkFBNkIsa0JBQWtCLG9DQUFvQyw4Q0FBOEMseUJBQXlCLHdCQUF3QixrQkFBa0IsaUJBQWlCLDBDQUEwQyxzREFBc0Qsd0RBQXdELGlDQUFpQyxtQkFBbUIsaUJBQWlCLE9BQU8scURBQXFELGtCQUFrQix1R0FBdUcsdURBQXVELG1CQUFtQixPQUFPLEtBQUssNEJBQTRCLGlCQUFpQixLQUFLLHVEQUF1RCw0QkFBNEIsbUJBQW1CLG9CQUFvQixxQ0FBcUMsNEJBQTRCLE9BQU8scUNBQXFDLHNCQUFzQixPQUFPLG9DQUFvQyxxQ0FBcUMsc0RBQXNELE9BQU8sb0NBQW9DLDRCQUE0QixnREFBZ0QsT0FBTyxLQUFLLHdIQUF3SCx1QkFBdUIsNkJBQTZCLEtBQUsscUNBQXFDLGlCQUFpQiwyRUFBMkUsS0FBSyxvQ0FBb0Msa0JBQWtCLEtBQUssNkZBQTZGLGlCQUFpQixLQUFLLG9DQUFvQyxtQkFBbUIsZ0JBQWdCLG9CQUFvQiw2QkFBNkIseUJBQXlCLDBDQUEwQyxLQUFLLGtFQUFrRSxxQkFBcUIseUJBQXlCLEtBQUssZ0VBQWdFLHlCQUF5QixxQkFBcUIsS0FBSyxrQ0FBa0Msb0NBQW9DLHNDQUFzQyxPQUFPLEtBQUssaUNBQWlDLGlDQUFpQyx1Q0FBdUMsT0FBTyxLQUFLLGlDQUFpQyxpQ0FBaUMsdUNBQXVDLE9BQU8sS0FBSyxpQ0FBaUMsaUNBQWlDLHVDQUF1QyxPQUFPLEtBQUssZ0VBQWdFLEtBQUssd0JBQXdCLElBQUkscUJBQXFCLFNBQVMsR0FBRyxtQkFBbUIsaUNBQW1CLGdEQUFnRCxpQkFBaUIsb0NBQW9DLHVCQUF1QixJQUFJLGNBQWMsU0FBUyxlQUFlLFlBQVksbUJBQW1CLEtBQUssd0NBQXdDLGtCQUFrQixnSEFBZ0gsdURBQXVELDBCQUEwQixVQUFVLGlEQUFpRCxrREFBa0QsU0FBUyxFQUFFLFNBQVMsaUJBQWlCLHFCQUFxQixnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxJQUFJLGlCQUFpQixtQkFBbUIsNkJBQTZCLG1CQUFtQix1RkFBdUYsWUFBWSxtQkFBbUIsSUFBSSxnQkFBZ0IsMkRBQTJELE9BQU8sU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxjQUFjLFVBQVUscUJBQXFCLE1BQU0scUNBQXFDLG9EQUFvRCxpR0FBaUcsdUZBQXVGLGtCQUFrQiw4SkFBOEosR0FBRyx1REFBdUQsd0NBQXdDLG1CQUFtQixnQkFBZ0IsaUZBQWlGLE9BQU8saUJBQWlCLGFBQWEsT0FBTyx1QkFBdUIsR0FBRyx5RUFBeUUsR0FBRyxFQUFFLGdCQUFnQiwwQkFBMEIsb0JBQW9CLDZCQUE2QixVQUFVLEVBQUUsMEJBQTBCLFdBQVcsU0FBUyxhQUFhLG9DQUFvQyx3QkFBd0IsZ0JBQWdCLG9CQUFvQixnQkFBZ0IscUJBQXFCLGdCQUFnQixtQkFBbUIsNEJBQTRCLEdBQUcsRUFBRSxnQkFBZ0IsOENBQThDLEdBQUcsYUFBYSxFQUFFLDJCQUEyQixvQkFBb0IsNEJBQTRCLGVBQWUsbURBQW1ELEdBQUcsY0FBYyxFQUFFLGFBQWEsR0FBRyxxQkFBcUIsRUFBRSxNQUFNLHdFQUF3RSxHQUFHLE9BQU8sZUFBZSx1RkFBdUYsb0JBQW9CLHdCQUF3QixvQkFBb0IsWUFBWSxrQkFBa0IsUUFBUSxXQUFXLHdDQUF3QyxTQUFTLE1BQU0saUNBQWlDLHNDQUFzQyxRQUFRLFdBQVcsNEZBQTRGLFNBQVMsMElBQTBJLHVCQUF1QiwwQkFBMEIsNkJBQTZCLHdCQUF3Qiw0QkFBNEIsSUFBSSxNQUFNLGtCQUFrQixrQkFBa0IsZ0JBQWdCLHFHQUFxRyxtQkFBbUIsaUVBQWlFLEVBQUUsa0NBQWtDLEtBQUsseU5BQXlOLE9BQU8seURBQXlELEdBQUcsZUFBZSw2QkFBNkIsMEZBQTBGLEtBQUssMkJBQTJCLDRqQkFBNGpCLEVBQUUsR0FBRyxjQUFjLHVCQUF1QixvSUFBb0ksdUtBQXVLLEVBQUUsRUFBRSxlQUFlLFlBQVksbUJBQW1CLEtBQUssd0NBQXdDLGtCQUFrQixnSEFBZ0gsdURBQXVELDBCQUEwQixVQUFVLGlEQUFpRCxrREFBa0QsU0FBUyxFQUFFLFNBQVMsaUJBQWlCLHFCQUFxQixnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxJQUFJLGtCQUFrQix1Q0FBdUMsaUVBQWlFLGtDQUFrQyxHQUFHLGVBQWUsOEJBQThCLDBGQUEwRixLQUFLLDRCQUE0QiwrQkFBK0IscUJBQXFCLDBGQUEwRix3TkFBd04sRUFBRSxpQkFBaUIsMkRBQTJELDRHQUE0RyxFQUFFLG9CQUFvQiwrQkFBK0IscUJBQXFCLDBGQUEwRix5TEFBeUwsRUFBRSxpQkFBaUIsMkRBQTJELCtHQUErRyxFQUFFLGtCQUFrQiw0QkFBNEIsK0JBQStCLHFCQUFxQiwwRkFBMEYsd0tBQXdLLEVBQUUsaUJBQWlCLDJEQUEyRCxrRkFBa0YsRUFBRSxHQUFHLHFCQUFxQix1Q0FBdUMsNklBQTZJLGdDQUFnQyxvQkFBb0IsZ0NBQWdDLG9CQUFvQixnQ0FBZ0MsR0FBRywrQkFBK0IsNElBQTRJLGlDQUFpQyxvQkFBb0IsaUNBQWlDLG9CQUFvQiwrQkFBK0IsR0FBRywrQkFBK0IsMklBQTJJLGlDQUFpQyxvQkFBb0IsaUNBQWlDLG9CQUFvQixpQ0FBaUMsb0JBQW9CLGdDQUFnQyxvQkFBb0IsZ0NBQWdDLEdBQUcsR0FBRyxHQUFHLEdBQUcsZUFBZSw4QkFBOEIsMEZBQTBGLEtBQUssNEJBQTRCLCtCQUErQixxQkFBcUIsMEZBQTBGLHdOQUF3TixFQUFFLGlCQUFpQiwyREFBMkQsOEdBQThHLEVBQUUsb0JBQW9CLCtCQUErQixxQkFBcUIsMEZBQTBGLDRMQUE0TCxFQUFFLGlCQUFpQiwyREFBMkQsNkdBQTZHLEVBQUUsa0JBQWtCLDRCQUE0QiwrQkFBK0IscUJBQXFCLDBGQUEwRiwyS0FBMkssRUFBRSxpQkFBaUIsMkRBQTJELGlGQUFpRixFQUFFLEdBQUcscUJBQXFCLHVDQUF1Qyw2SUFBNkksZ0NBQWdDLG9CQUFvQixnQ0FBZ0Msb0JBQW9CLGdDQUFnQyxHQUFHLCtCQUErQiw0SUFBNEksaUNBQWlDLG9CQUFvQixpQ0FBaUMsb0JBQW9CLCtCQUErQixHQUFHLCtCQUErQiwySUFBMkksaUNBQWlDLG9CQUFvQixpQ0FBaUMsb0JBQW9CLGlDQUFpQyxvQkFBb0IsZ0NBQWdDLG9CQUFvQixnQ0FBZ0MsR0FBRyxHQUFHLEdBQUcsR0FBRywwRkFBMEYsZUFBZSxnQ0FBZ0MsMkJBQTJCLG9MQUFvTCxpRUFBaUUsRUFBRSxpQkFBaUIsa09BQWtPLGlFQUFpRSxFQUFFLEVBQUUsZUFBZSxjQUFjLG9CQUFvQiwwTEFBMEwsRUFBRSxpQkFBaUIsb0NBQW9DLHVCQUF1QixJQUFJLGNBQWMsU0FBUyxlQUFlLDZCQUE2QixjQUFjLDhKQUE4SixpQkFBaUIsNEJBQTRCLHVGQUF1RixZQUFZLG1CQUFtQixJQUFJLGdCQUFnQiwyREFBMkQsT0FBTyxTQUFTLFNBQVMsUUFBUSxJQUFJLDhCQUE4QixRQUFRLGNBQWMsVUFBVSxxQkFBcUIsZUFBZSwwQkFBMEIsb0dBQW9HLGlCQUFpQixpQkFBaUIsTUFBTSxxQ0FBcUMsb0RBQW9ELGlHQUFpRyx1RkFBdUYsZ2xCQUFnbEIsZUFBZSwyQkFBMkIsaUJBQWlCLEVBQUUsa0RBQWtELGVBQWUsMkJBQTJCLHVCQUF1QixFQUFFLGVBQWUsa0JBQWtCLCtGQUErRixZQUFZLHlCQUF5QixZQUFZLEtBQUssNEJBQTRCLFdBQVcsbUJBQW1CLGlCQUFpQix3QkFBd0Isb0xBQW9MLGlFQUFpRSxFQUFFLHNCQUFzQixxSkFBcUosaUVBQWlFLEVBQUUsRUFBRSxlQUFlLFFBQVEscUNBQXFDLFlBQVksbUJBQW1CLEtBQUssd0NBQXdDLGtCQUFrQixnSEFBZ0gsdURBQXVELDBCQUEwQixVQUFVLGlEQUFpRCxrREFBa0QsU0FBUyxFQUFFLFNBQVMsRUFBRSwwRkFBMEYsU0FBUywyQkFBMkIsdWFBQXVhLEVBQUUsZ0hBQWdILHFCQUFxQixpQ0FBaUMsc0NBQXNDLGtCQUFrQixTQUFTLGlDQUFpQyxnRUFBZ0UsTUFBTSxlQUFlLCtDQUErQyx5QkFBeUIsNERBQTRELFFBQVEsZ0JBQWdCLHVCQUF1QixnQkFBZ0IseURBQXlELEdBQUcsRUFBRSxlQUFlLFFBQVEscUNBQXFDLFlBQVksbUJBQW1CLEtBQUssd0NBQXdDLGtCQUFrQixnSEFBZ0gsdURBQXVELDBCQUEwQixVQUFVLGlEQUFpRCxrREFBa0QsU0FBUyxFQUFFLFNBQVMsRUFBRSxxSEFBcUgsU0FBUyx3QkFBd0IsNENBQTRDLHlzQkFBeXNCLEVBQUUsRUFBRSxnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxNQUFNLGVBQWUsUUFBUSxxQ0FBcUMsWUFBWSxtQkFBbUIsS0FBSyx3Q0FBd0Msa0JBQWtCLGdIQUFnSCx1REFBdUQsMEJBQTBCLFVBQVUsaURBQWlELGtEQUFrRCxTQUFTLEVBQUUsU0FBUyxFQUFFLHVIQUF1SCxTQUFTLDJCQUEyQixnbkJBQWduQixFQUFFLGdIQUFnSCxxQkFBcUIsaUNBQWlDLHNDQUFzQyxrQkFBa0IsU0FBUyxpQ0FBaUMsZ0VBQWdFLE1BQU0saUJBQWlCLG9DQUFvQyx1QkFBdUIsSUFBSSxjQUFjLFNBQVMsMkJBQTJCLElBQUksd0JBQXdCLFNBQVMsS0FBSyxPQUFPLHlDQUF5QyxtQkFBbUIseUNBQXlDLGtEQUFrRCxXQUFXLGVBQWUsMERBQTBELGtCQUFrQiw2QkFBNkIsbUJBQW1CLHVGQUF1RixZQUFZLG1CQUFtQixJQUFJLGdCQUFnQix1REFBdUQsT0FBTyxTQUFTLFNBQVMsUUFBUSxJQUFJLDhCQUE4QixRQUFRLGNBQWMsVUFBVSxxQkFBcUIsTUFBTSxxQ0FBcUMsb0RBQW9ELGlHQUFpRyx1RkFBdUYsa0JBQWtCLDhKQUE4SiwyQkFBMkIsSUFBcUMsaUNBQWlDLE1BQU0sb0JBQW9CLHFCQUFxQixhQUFhLHdCQUF3QixxQkFBcUIsWUFBWSxnQkFBZ0IsMEVBQTBFLHdHQUF3RyxZQUFZLElBQUksY0FBYyxtQkFBbUIsWUFBWSx3REFBd0QsS0FBSyx1QkFBdUIsS0FBSyxrSEFBa0gseUNBQXlDLGtCQUFrQixNQUFNLHlCQUF5QixvQkFBb0IsOEJBQThCLFNBQVMsa0NBQWtDLFNBQVMsMEVBQTBFLElBQUksU0FBUyx5Q0FBeUMsYUFBYSxNQUFNLDJCQUEyQixpQkFBaUIsTUFBTSxvQkFBb0IsMkJBQTJCLE1BQU0sK0JBQStCLFNBQVMsY0FBYyxTQUFTLFlBQVksUUFBUSxNQUFNLHFCQUFxQixPQUFPLGtDQUFrQyxrQkFBa0IsZ0JBQWdCLHFCQUFxQixRQUFRLHFCQUFxQixZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsYUFBYSxFQUFFLFNBQVMsR0FBRyxvQkFBb0IsV0FBVyxnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxJQUFJLFlBQVksdURBQXVELE1BQWtDLDhEQUE4RCxvQ0FBb0MsS0FBSywyRkFBMkYseUVBQXlFLGtCQUFrQixFQUFFLFlBQVksdUJBQXVCLGlDQUFpQyxtQkFBbUIsY0FBYyx1QkFBdUIsY0FBYyx3QkFBd0IsVUFBVSxFQUFFLElBQUksTUFBTSx1QkFBdUIsdUhBQXVILDBHQUEwRyx5QkFBeUIseUJBQXlCLHdCQUF3QiwwSEFBMEgsRUFBRSxzQkFBc0IsMkZBQTJGLGFBQWEsdUtBQXVLLHFCQUFxQixFQUFFLHNCQUFzQiwrRkFBK0YsYUFBYSx1S0FBdUssNEJBQTRCLHFCQUFxQixFQUFFLEdBQUcsRUFBRSxFQUFFLGVBQWUsa0JBQWtCLDBCQUEwQixnR0FBZ0csdUNBQXVDLE9BQU8sRUFBRSxtQ0FBbUMsb0JBQW9CLDBCQUEwQixxQ0FBcUMsaUJBQWlCLG9CQUFvQiw4Q0FBOEMsa0RBQWtELEtBQUssdUJBQXVCLHdCQUF3QixXQUFXLGtDQUFrQyx5QkFBeUIsa0JBQWtCLE9BQU8sS0FBSyxxQ0FBcUMsb0JBQW9CLDBCQUEwQixlQUFlLDBCQUEwQixtQ0FBbUMsS0FBSyw4QkFBOEIsNkJBQTZCLG9CQUFvQiwwQkFBMEIsMEJBQTBCLHlFQUF5RSx3QkFBd0IsdUJBQXVCLG1CQUFtQix1Q0FBdUMsNEJBQTRCLDZCQUE2QixvQkFBb0IsMEJBQTBCLDhCQUE4QixzQkFBc0IsaUJBQWlCLG1DQUFtQyxPQUFPLGlCQUFpQixnREFBZ0QsT0FBTyxrQkFBa0IsZ0RBQWdELE9BQU8sS0FBSyw4Q0FBOEMsbUJBQW1CLDBCQUEwQixLQUFLLDhCQUE4Qiw4Q0FBOEMsS0FBSyw2Q0FBNkMsbUNBQW1DLDRCQUE0Qiw2QkFBNkIsS0FBSyxVQUFVLGlCQUFpQixvQ0FBb0MsdUJBQXVCLElBQUksY0FBYyxTQUFTLGlCQUFpQixtQkFBbUIsNkJBQTZCLG1CQUFtQix1RkFBdUYsWUFBWSxtQkFBbUIsSUFBSSxnQkFBZ0IsMkRBQTJELE9BQU8sU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxjQUFjLFVBQVUscUJBQXFCLE1BQU0scUNBQXFDLG9EQUFvRCxpR0FBaUcsdUZBQXVGLGtCQUFrQiw4SkFBOEosR0FBRyxlQUFlLDRIQUE0SCx1Q0FBdUMseUNBQXlDLHdCQUF3QixzRUFBc0UsNEhBQTRILGdDQUFnQywyQkFBMkIsc0RBQXNELHNCQUFzQixtQkFBbUIsYUFBYSwySUFBMkksR0FBRyxHQUFHLEVBQUUsZUFBZSxrQkFBa0Isd0JBQXdCLDBGQUEwRixFQUFFLGVBQWUsNEJBQTRCLHVCQUF1QixnSkFBZ0osK1JBQStSLEVBQUUsRUFBRSxlQUFlLDRCQUE0Qix1QkFBdUIsZ0pBQWdKLCtSQUErUixFQUFFLEVBQUUsaUJBQWlCLG9DQUFvQyx1QkFBdUIsSUFBSSxjQUFjLFNBQVMsZUFBZSwrRkFBK0YsdUNBQXVDLHdCQUF3QixFQUFFLHVDQUF1Qyx1Q0FBdUMsc0RBQXNELEVBQUUscUdBQXFHLDZCQUE2QixtQkFBbUIsdUZBQXVGLFlBQVksbUJBQW1CLElBQUksZ0JBQWdCLHVEQUF1RCxPQUFPLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsY0FBYyxVQUFVLHFCQUFxQixNQUFNLHFDQUFxQyxvREFBb0QsaUdBQWlHLHVGQUF1RixrQkFBa0IsOEpBQThKLGtEQUFrRCxLQUFLLEtBQUssaUNBQWlDLGtCQUFrQiwySUFBMkksWUFBWSxzQ0FBc0MseUZBQXlGLCtFQUErRSxxQ0FBcUMsWUFBWSwwQkFBMEIsMEhBQTBILHNCQUFzQiw4R0FBOEcsbUNBQW1DLG1IQUFtSCw2S0FBNkssa0VBQWtFLEVBQUUsb0JBQW9CLHdFQUF3RSxzREFBc0Qsb0JBQW9CLGdFQUFnRSxHQUFHLHNCQUFzQix5TEFBeUwsOERBQThELEVBQUUsR0FBRyxFQUFFLGVBQWUsbUZBQW1GLFVBQVUseUdBQXlHLE1BQU0sc0pBQXNKLE1BQU0sdUpBQXVKLE1BQU0sMklBQTJJLE1BQU0sNkZBQTZGLE9BQU8saUNBQWlDLGVBQWUsUUFBUSxxQ0FBcUMsWUFBWSxtQkFBbUIsS0FBSyx3Q0FBd0Msa0JBQWtCLGdIQUFnSCx1REFBdUQsMEJBQTBCLFVBQVUsaURBQWlELGtEQUFrRCxTQUFTLEVBQUUsU0FBUyxFQUFFLDBGQUEwRixTQUFTLDZCQUE2QixzQ0FBc0MsRUFBRSxnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxNQUFNLGVBQWUsa0hBQWtILDZDQUE2Qyw4TkFBOE4scURBQXFELG9CQUFvQixvREFBb0Qsb0JBQW9CLG9EQUFvRCxHQUFHLHFCQUFxQiwwSEFBMEgscURBQXFELG9CQUFvQixvREFBb0Qsb0JBQW9CLG9EQUFvRCxHQUFHLEVBQUUsZUFBZSx5RUFBeUUsU0FBMEIsRUFBRSxDQUFTLENBQUMsd0JBQXdCLDJEQUEyRCxtQ0FBbUMsNEZBQTRGLEVBQUUsbUJBQW1CLG9DQUFvQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUUsZUFBZSwwQkFBMEIsd0JBQXdCLDJGQUEyRixHQUFHLEVBQUUsY0FBYyx3QkFBd0IsdUxBQXVMLCtDQUErQyxpQkFBaUIsNkZBQTZGLDJKQUEySiwyQ0FBMkMsb0JBQW9CLHlIQUF5SCxHQUFHLG9CQUFvQixzSUFBc0ksb0JBQW9CLGtsQkFBa2xCLEdBQUcsa0JBQWtCLDZFQUE2RSxtS0FBbUsseURBQXlELG9CQUFvQixtSkFBbUosR0FBRyxvQkFBb0Isa0xBQWtMLG9CQUFvQixrd0JBQWt3QixHQUFHLEdBQUcsRUFBRSxlQUFlLDREQUE0RCxvQkFBb0Isd0JBQXdCLG9CQUFvQixZQUFZLGtCQUFrQixRQUFRLFdBQVcsd0NBQXdDLFNBQVMsTUFBTSxpQ0FBaUMsc0NBQXNDLFFBQVEsV0FBVyw0RkFBNEYsU0FBUyxvQ0FBb0Msd0JBQXdCLGlGQUFpRixZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsVUFBVSxpREFBaUQsa0RBQWtELFNBQVMsRUFBRSxTQUFTLEVBQUUsd0pBQXdKLFNBQVMsV0FBVyxnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxTQUFTLEVBQUUsZUFBZSxpQkFBaUIsb0JBQW9CLHNEQUFzRCxFQUFFLGVBQWUsaUJBQWlCLG9CQUFvQixvREFBb0QsRUFBRSx3QkFBd0IsbURBQW1ELG9CQUFvQix3QkFBd0Isb0JBQW9CLFlBQVksa0JBQWtCLFFBQVEsV0FBVyx3Q0FBd0MsU0FBUyxNQUFNLGlDQUFpQyxzQ0FBc0MsUUFBUSxXQUFXLDRGQUE0RixTQUFTLDZCQUE2Qiw4QkFBOEIsNkJBQTZCLGNBQWMsNkRBQTZELG1LQUFtSyxhQUFhLHNCQUFzQixtSUFBbUksR0FBRyxvQ0FBb0MsWUFBWSxtQkFBbUIsS0FBSyx3Q0FBd0Msa0JBQWtCLGdIQUFnSCx1REFBdUQsMEJBQTBCLFVBQVUsaURBQWlELGtEQUFrRCxTQUFTLEVBQUUsU0FBUyxFQUFFLDRDQUE0QyxTQUFTLFdBQVcsZ0hBQWdILHFCQUFxQixpQ0FBaUMsc0NBQXNDLGtCQUFrQixTQUFTLGlDQUFpQyxnRUFBZ0UsT0FBTyxlQUFlLHFDQUFxQyxvQkFBb0Isd0JBQXdCLG9CQUFvQixZQUFZLGtCQUFrQixRQUFRLFdBQVcsd0NBQXdDLFNBQVMsTUFBTSxpQ0FBaUMsc0NBQXNDLFFBQVEsV0FBVyw0RkFBNEYsU0FBUyxpQkFBaUIsa0NBQWtDLFlBQVksbUJBQW1CLEtBQUssd0NBQXdDLGtCQUFrQixnSEFBZ0gsdURBQXVELDBCQUEwQixVQUFVLGlEQUFpRCxrREFBa0QsU0FBUyxFQUFFLFNBQVMsR0FBRyxTQUFTLFdBQVcsZ0hBQWdILHFCQUFxQixpQ0FBaUMsc0NBQXNDLGtCQUFrQixTQUFTLGlDQUFpQyxnRUFBZ0UsTUFBTSxlQUFlLDZDQUE2Qyx1QkFBdUIsbUZBQW1GLDZGQUE2Riw2RkFBNkYsbUJBQW1CLDZGQUE2RixHQUFHLEVBQUUsRUFBRSxlQUFlLHdCQUF3Qix3QkFBd0IsbURBQW1ELEVBQUUsT0FBTyxpQ0FBbUIscUhBQXFILG9EQUFvRCx1QkFBdUIscUhBQXFILFlBQVksbUJBQW1CLEtBQUssd0NBQXdDLGtCQUFrQixnSEFBZ0gsdURBQXVELDBCQUEwQixVQUFVLGlEQUFpRCxrREFBa0QsU0FBUyxFQUFFLFNBQVMsRUFBRSxtREFBbUQsSUFBSSxFQUFFLEVBQUUsaUJBQWlCLG9DQUFvQyx1QkFBdUIsSUFBSSxjQUFjLFNBQVMsaUJBQWlCLG1CQUFtQiw2QkFBNkIsbUJBQW1CLHVGQUF1RixZQUFZLG1CQUFtQixJQUFJLGdCQUFnQiwyREFBMkQsT0FBTyxTQUFTLFNBQVMsUUFBUSxJQUFJLDhCQUE4QixRQUFRLGNBQWMsVUFBVSxxQkFBcUIsTUFBTSxxQ0FBcUMsb0RBQW9ELGlHQUFpRyx1RkFBdUYsa0JBQWtCLDhKQUE4SixHQUFHLHNDQUFzQyxpRUFBaUUsb0JBQW9CLHdCQUF3QixvQkFBb0IsWUFBWSxrQkFBa0IsUUFBUSxXQUFXLHdDQUF3QyxTQUFTLE1BQU0saUNBQWlDLHNDQUFzQyxRQUFRLFdBQVcsNEZBQTRGLFNBQVMsMEtBQTBLLE1BQU0sa0JBQWtCLE1BQU0scUNBQXFDLDZCQUE2QiwrQ0FBK0MsTUFBTSxrQkFBa0IsRUFBRSwrQkFBK0IseUJBQXlCLDhCQUE4QixxQ0FBcUMsWUFBWSxtQkFBbUIsS0FBSyx3Q0FBd0Msa0JBQWtCLGdIQUFnSCx1REFBdUQsMEJBQTBCLFVBQVUsaURBQWlELGtEQUFrRCxTQUFTLEVBQUUsU0FBUyxHQUFHLFNBQVMsYUFBYSxnRUFBZ0UsMkJBQTJCLGlCQUFpQixFQUFFLGdIQUFnSCxxQkFBcUIsaUNBQWlDLHNDQUFzQyxrQkFBa0IsU0FBUyxpQ0FBaUMsZ0VBQWdFLE1BQU0sRUFBRSxlQUFlLDhCQUE4QixvQkFBb0Isd0JBQXdCLG9CQUFvQixZQUFZLGtCQUFrQixRQUFRLFdBQVcsd0NBQXdDLFNBQVMsTUFBTSxpQ0FBaUMsc0NBQXNDLFFBQVEsV0FBVyw0RkFBNEYsU0FBUyxjQUFjLGtDQUFrQyxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsVUFBVSxpREFBaUQsa0RBQWtELFNBQVMsRUFBRSxTQUFTLEVBQUUsaUZBQWlGLEtBQUssaUJBQWlCLG9DQUFvQyx1QkFBdUIsSUFBSSxjQUFjLFNBQVMsZUFBZSxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsVUFBVSxpREFBaUQsa0RBQWtELFNBQVMsRUFBRSxTQUFTLGlCQUFpQixxQkFBcUIsZ0hBQWdILHFCQUFxQixpQ0FBaUMsc0NBQXNDLGtCQUFrQixTQUFTLGlDQUFpQyxnRUFBZ0UsSUFBSSxpQkFBaUIsbUJBQW1CLDZCQUE2QixtQkFBbUIsdUZBQXVGLFlBQVksbUJBQW1CLElBQUksZ0JBQWdCLDJEQUEyRCxPQUFPLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsY0FBYyxVQUFVLHFCQUFxQixNQUFNLHFDQUFxQyxvREFBb0QsaUdBQWlHLHVGQUF1RixrQkFBa0IsOEpBQThKLEdBQUcsZUFBZSxtU0FBbVMseUJBQXlCLDJDQUEyQywrRUFBK0UsZ0RBQWdELEtBQUssd0JBQXdCLFFBQVEsMEJBQTBCLHlEQUF5RCxnQ0FBZ0Msa0NBQWtDLE9BQU8sS0FBSyx3QkFBd0IseUVBQXlFLGlCQUFpQixzRUFBc0UsY0FBYyx5RkFBeUYsbUNBQW1DLHlCQUF5QixZQUFZLDBCQUEwQix1RUFBdUUseUJBQXlCLDRCQUE0QiwwR0FBMEcsMkRBQTJELFlBQVksbUNBQW1DLGtDQUFrQyxHQUFHLGdCQUFnQixvQkFBb0IsR0FBRyxnQkFBZ0IsZUFBZSxHQUFHLGdCQUFnQixXQUFXLEdBQUcsRUFBRSxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLGlEQUFpRCxHQUFHLElBQUksR0FBRyx3REFBd0QsdUJBQXVCLGdCQUFnQixLQUFLLHlEQUF5RCwwQ0FBMEMsb0JBQW9CLDZCQUE2Qiw4Q0FBOEMsbUNBQW1DLDBFQUEwRSw2RUFBNkUscUNBQXFDLHlCQUF5Qix1QkFBdUIsS0FBSyxvQ0FBb0MsdUJBQXVCLG1CQUFtQixLQUFLLHlEQUF5RCx5QkFBeUIsS0FBSywwQ0FBMEMsZ0NBQWdDLGtDQUFrQyx3QkFBd0IsaUNBQWlDLG1DQUFtQyxLQUFLLDJDQUEyQyxnQ0FBZ0Msb0NBQW9DLHdCQUF3QixLQUFLLGtEQUFrRCwrQ0FBK0MsS0FBSyxtREFBbUQsZ0JBQWdCLHNCQUFzQixLQUFLLDZDQUE2QyxxQkFBcUIsd0JBQXdCLEtBQUsseUZBQXlGLHlCQUF5QixnQkFBZ0Isa0JBQWtCLEtBQUssNkVBQTZFLDRDQUE0QyxzREFBc0Qsb0JBQW9CLHFDQUFxQywwQkFBMEIsb0JBQW9CLDJCQUEyQixpQkFBaUIsb0JBQW9CLGlGQUFpRiw4Q0FBOEMsOEJBQThCLDhEQUE4RCxvQkFBb0IsZ0RBQWdELHNCQUFzQiw0Q0FBNEMsMEVBQTBFLDRCQUE0QiwyQkFBMkIsK0JBQStCLDJCQUEyQix5REFBeUQsdUNBQXVDLHlCQUF5QixXQUFXLGdEQUFnRCxnQ0FBZ0MsV0FBVyxTQUFTLGdDQUFnQywwQkFBMEIseURBQXlELHVDQUF1Qyx3QkFBd0IsdUNBQXVDLFdBQVcsZ0RBQWdELCtCQUErQixXQUFXLFNBQVMscUNBQXFDLDZCQUE2QiwwREFBMEQsK0JBQStCLHNCQUFzQiwrREFBK0QsU0FBUyxPQUFPLEtBQUssaUNBQWlDLHVDQUF1Qyw0Q0FBNEMsK0VBQStFLDBFQUEwRSw0QkFBNEIseUJBQXlCLHFEQUFxRCxzQ0FBc0MsMkJBQTJCLG9CQUFvQiwyREFBMkQsNkJBQTZCLFdBQVcsdUNBQXVDLDBCQUEwQixXQUFXLFNBQVMsT0FBTyxLQUFLLHlEQUF5RCx1QkFBdUIsZ0JBQWdCLHlDQUF5Qyx1Q0FBdUMsdUJBQXVCLGdDQUFnQyxrQ0FBa0MsK0NBQStDLGtDQUFrQyxLQUFLLDJEQUEyRCx5QkFBeUIsS0FBSyxzQ0FBc0MsZ0JBQWdCLHVCQUF1QixrQ0FBa0MsdUJBQXVCLGdDQUFnQyw4QkFBOEIsa0NBQWtDLGdDQUFnQyw0QkFBNEIsS0FBSyxnREFBZ0Qsd0JBQXdCLHVCQUF1QixLQUFLLGtEQUFrRCx5QkFBeUIsZ0JBQWdCLGNBQWMsZUFBZSxtQkFBbUIsbUlBQW1JLEtBQUssK0NBQStDLHlCQUF5QixtQkFBbUIsZ0JBQWdCLGtDQUFrQyxvQkFBb0IsMEJBQTBCLHVCQUF1Qiw4Q0FBOEMsb0RBQW9ELDJCQUEyQixzSEFBc0gsZ0NBQWdDLHNCQUFzQixtQ0FBbUMsdUJBQXVCLDZDQUE2QyxLQUFLLHFEQUFxRCx3Q0FBd0MsS0FBSyxnREFBZ0Qsb0JBQW9CLGVBQWUsS0FBSyxtRkFBbUYsb0JBQW9CLDhCQUE4QiwwQkFBMEIsOEJBQThCLDZCQUE2Qiw4Q0FBOEMsbUNBQW1DLG9EQUFvRCxzQ0FBc0MseUNBQXlDLGFBQWEsOEJBQThCLCtCQUErQixPQUFPLGlCQUFpQixtQ0FBbUMsT0FBTyxnQ0FBZ0MsZ0RBQWdELE9BQU8saUNBQWlDLGdEQUFnRCxPQUFPLG9CQUFvQixnREFBZ0QsNEJBQTRCLE9BQU8sS0FBSywwQ0FBMEMsbUNBQW1DLEtBQUssNENBQTRDLG9CQUFvQiwwQkFBMEIsZUFBZSxLQUFLLEtBQUssZUFBZSxvQ0FBb0MsbUdBQW1HLEVBQUUsd0JBQXdCLDJOQUEyTixrTEFBa0wsNkRBQTZELHdCQUF3Qix3QkFBd0Isb0JBQW9CLCtCQUErQixHQUFHLEdBQUcsRUFBRSxpQkFBaUIsb0NBQW9DLHVCQUF1QixJQUFJLGNBQWMsU0FBUyxtQkFBbUIsMkRBQTJELFVBQVUscUJBQXFCLG9CQUFvQixrQkFBa0Isd0NBQXdDLDZCQUE2QixtQkFBbUIsdUZBQXVGLFlBQVksbUJBQW1CLElBQUksZ0JBQWdCLHVEQUF1RCxPQUFPLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsY0FBYyxVQUFVLHFCQUFxQixNQUFNLHFDQUFxQyxvREFBb0QsaUdBQWlHLHVGQUF1RixrQkFBa0IsOEpBQThKLHNGQUFzRixPQUFPLDJCQUEyQixnQkFBZ0IsU0FBUyxnQ0FBZ0Msc0JBQXNCLDRDQUE0QyxzQkFBc0IsbURBQW1ELEdBQUcsYUFBYSwyREFBMkQsRUFBRSxxQkFBcUIsYUFBYSxTQUFTLFNBQVMsS0FBSywrQ0FBK0Msc0VBQXNFLDBCQUEwQix1Q0FBdUMsRUFBRSxZQUFZLHVLQUF1SyxLQUFLLHlOQUF5Tix1REFBdUQsd0JBQXdCLHNEQUFzRCx5REFBeUQsd0RBQXdELG1EQUFtRCxPQUFPLEVBQUUsb0JBQW9CLDhCQUE4QixzQkFBc0Isa0hBQWtILHVFQUF1RSxtQkFBbUIsRUFBRSxFQUFFLEdBQUcsRUFBRSxtQkFBbUIsc0RBQXNELDJEQUEyRCx3QkFBd0Isa0JBQWtCLFlBQVksbUJBQW1CLEtBQUssd0NBQXdDLGtCQUFrQixnSEFBZ0gsdURBQXVELDBCQUEwQixVQUFVLGlEQUFpRCxrREFBa0QsU0FBUyxFQUFFLFNBQVMsRUFBRSxrREFBa0Qsd0JBQXdCLGVBQWUsMEJBQTBCLG1CQUFtQixnQ0FBZ0MsZUFBZSxFQUFFLDhCQUE4QixvQkFBb0Isb0JBQW9CLHVCQUF1QixJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLG9CQUFvQiw2Q0FBNkMsZ0JBQWdCLG9DQUFvQyxvQkFBb0Isd0JBQXdCLG9CQUFvQixZQUFZLGtCQUFrQixRQUFRLFdBQVcsd0NBQXdDLFNBQVMsTUFBTSxpQ0FBaUMsc0NBQXNDLFFBQVEsV0FBVyw0RkFBNEYsU0FBUyxnREFBZ0QsMkNBQTJDLGtDQUFrQyxNQUFNLGtDQUFrQyxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsVUFBVSxpREFBaUQsa0RBQWtELFNBQVMsRUFBRSxTQUFTLEVBQUUseURBQXlELFNBQVMsdUJBQXVCLFVBQVUsRUFBRSxnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxNQUFNLGdCQUFnQixzR0FBc0csb0RBQW9ELGlCQUFpQiwyQkFBMkIsMkpBQTJKLGlFQUFpRSxrQkFBa0IseUJBQXlCLDBIQUEwSCxtQkFBbUIsRUFBRSw4QkFBOEIsMkRBQTJELCtCQUErQixtRkFBbUYsbUJBQW1CLEVBQUUsUUFBUSxvQkFBb0Isd0VBQXdFLEdBQUcsUUFBUSxjQUFjLHVCQUF1QixxSEFBcUgsdWZBQXVmLEVBQUUsRUFBRSxjQUFjLHVEQUF1RCx5QkFBeUIsc0JBQXNCLEtBQUssdUNBQXVDLG9CQUFvQixxQ0FBcUMsMEJBQTBCLGlDQUFpQyxnQ0FBZ0Msa0JBQWtCLEtBQUssc0NBQXNDLG9CQUFvQixxQ0FBcUMsMEJBQTBCLGVBQWUsa0JBQWtCLHNDQUFzQyxnQ0FBZ0MsdUJBQXVCLEtBQUssc0NBQXNDLG9CQUFvQiw4QkFBOEIsMEJBQTBCLDhCQUE4Qiw2QkFBNkIsZUFBZSxzQ0FBc0MseUJBQXlCLGdDQUFnQyx1QkFBdUIsa0NBQWtDLDJDQUEyQyx3Q0FBd0MsS0FBSywyREFBMkQsaUJBQWlCLG9CQUFvQiwwQkFBMEIsZUFBZSxtQ0FBbUMsZ0NBQWdDLGtDQUFrQyx5QkFBeUIsdUJBQXVCLHlCQUF5Qix3Q0FBd0MsaUJBQWlCLDBDQUEwQyxPQUFPLGlCQUFpQixtQ0FBbUMsT0FBTyxhQUFhLDhCQUE4QiwrQkFBK0IsT0FBTyxLQUFLLGdFQUFnRSxLQUFLLHdCQUF3QixJQUFJLHFCQUFxQixTQUFTLEdBQUcsZUFBZSxrRkFBa0Ysd0JBQXdCLGtFQUFrRSw2REFBNkQsNEVBQTRFLG9EQUFvRCxHQUFHLDRCQUE0Qiw0SkFBNEosR0FBRyxHQUFHLHNCQUFzQixrQ0FBa0MsUUFBUSxTQUFTLEdBQUcsRUFBRSxnQkFBZ0IsaUJBQWlCLG9DQUFvQyx1QkFBdUIsSUFBSSxjQUFjLFNBQVMsZUFBZSxvR0FBb0csNkJBQTZCLG1CQUFtQix1RkFBdUYsWUFBWSxtQkFBbUIsSUFBSSxnQkFBZ0IsdURBQXVELE9BQU8sU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxjQUFjLFVBQVUscUJBQXFCLE1BQU0scUNBQXFDLG9EQUFvRCxpR0FBaUcsdUZBQXVGLGtCQUFrQiw4SkFBOEosNkNBQTZDLDhCQUE4Qix1QkFBdUIsSUFBSSxNQUFNLG9CQUFvQiwwREFBMEQsK0JBQStCLE1BQU0sd0RBQXdELHFIQUFxSCwrQ0FBK0MsVUFBVSxzQkFBc0IsRUFBRSxjQUFjLG9FQUFvRSxZQUFZLHFDQUFxQyxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsVUFBVSxpREFBaUQsa0RBQWtELFNBQVMsRUFBRSxTQUFTLEVBQUUsK0ZBQStGLHNCQUFzQixPQUFPLG9DQUFvQyxHQUFHLE9BQU8sMkJBQTJCLE9BQU8seUJBQXlCLGdLQUFnSyxFQUFFLGdIQUFnSCxxQkFBcUIsaUNBQWlDLHNDQUFzQyxrQkFBa0IsU0FBUyxpQ0FBaUMsZ0VBQWdFLE1BQU0saUJBQWlCLG9DQUFvQyx1QkFBdUIsSUFBSSxjQUFjLFNBQVMsaUJBQWlCLG1CQUFtQiw2QkFBNkIsbUJBQW1CLHVGQUF1RixZQUFZLG1CQUFtQixJQUFJLGdCQUFnQiwyREFBMkQsT0FBTyxTQUFTLFNBQVMsUUFBUSxJQUFJLDhCQUE4QixRQUFRLGNBQWMsVUFBVSxxQkFBcUIsTUFBTSxxQ0FBcUMsb0RBQW9ELGlHQUFpRyx1RkFBdUYsa0JBQWtCLDhKQUE4SixHQUFHLGVBQWUscUdBQXFHLFNBQVMsMkNBQTJDLGdKQUFnSiwyQkFBMkIsdUpBQXVKLDhCQUE4QixtRUFBbUUsVUFBVSxFQUFFLHlEQUF5RCxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsVUFBVSxpREFBaUQsa0RBQWtELFNBQVMsRUFBRSxTQUFTLEVBQUUsbURBQW1ELElBQUkseURBQXlELGNBQWMsOEJBQThCLG1FQUFtRSxVQUFVLGdIQUFnSCxxQkFBcUIsaUNBQWlDLHNDQUFzQyxrQkFBa0IsU0FBUyxpQ0FBaUMsZ0VBQWdFLHFCQUFxQixJQUFJLE1BQU0sd0JBQXdCLGtJQUFrSSw0SUFBNEksYUFBYSx3QkFBd0IsWUFBWSxFQUFFLG1CQUFtQixpRkFBaUYsV0FBVyxFQUFFLEdBQUcsRUFBRSxpQ0FBaUMsZUFBZSxtQkFBbUIsMkJBQTJCLElBQUksd0JBQXdCLFNBQVMsS0FBSyxPQUFPLHlDQUF5QyxlQUFlLGtCQUFrQix1QkFBdUIsaUNBQWlDLG1CQUFtQixjQUFjLHVCQUF1QixjQUFjLHdCQUF3QixVQUFVLEdBQUcsZUFBZSxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsVUFBVSxpREFBaUQsa0RBQWtELFNBQVMsRUFBRSxTQUFTLGlCQUFpQixxQkFBcUIsZ0hBQWdILHFCQUFxQixpQ0FBaUMsc0NBQXNDLGtCQUFrQixTQUFTLGlDQUFpQyxnRUFBZ0UsSUFBSSxpQkFBaUIsYUFBYSx3QkFBd0IscUJBQXFCLFlBQVksZ0JBQWdCLDBFQUEwRSx3R0FBd0csWUFBWSxJQUFJLGNBQWMsbUJBQW1CLFlBQVksd0RBQXdELEtBQUssdUJBQXVCLEtBQUssa0hBQWtILHlDQUF5QyxrQkFBa0IsTUFBTSx5QkFBeUIsb0JBQW9CLDhCQUE4QixTQUFTLGtDQUFrQyxTQUFTLDBFQUEwRSxJQUFJLFNBQVMseUNBQXlDLGFBQWEsTUFBTSwyQkFBMkIsaUJBQWlCLE1BQU0sb0JBQW9CLDJCQUEyQixNQUFNLCtCQUErQixTQUFTLGNBQWMsU0FBUyxZQUFZLFFBQVEsTUFBTSxxQkFBcUIsT0FBTyxrQ0FBa0MsbUJBQW1CLGNBQWMsZUFBZSw0SUFBNEksa0JBQWtCLHdKQUF3SixpQkFBaUIsZUFBZSxzRUFBc0UsZ0NBQWdDLGdFQUFnRSxFQUFFLDZCQUE2QixNQUFNLDZCQUE2QiwyQkFBMkIsOERBQThELDRCQUE0Qiw0QkFBNEIsR0FBRyxFQUFFLHNFQUFzRSxxQkFBcUIsb0JBQW9CLDhDQUE4Qyw4Q0FBOEMsMENBQTBDLCtDQUErQyxnQ0FBZ0MsMkJBQTJCLHFFQUFxRSxLQUFLLHFEQUFxRCw0QkFBNEIsa0JBQWtCLHlCQUF5QiwrQkFBK0IsS0FBSyw4REFBOEQseUNBQXlDLHlEQUF5RCx3QkFBd0IsS0FBSyxnRUFBZ0UsaUJBQWlCLHdCQUF3QixlQUFlLHNCQUFzQixPQUFPLEtBQUssNERBQTRELHlDQUF5QyxLQUFLLDBEQUEwRCxtQ0FBbUMseUJBQXlCLEtBQUssc0hBQXNILG9DQUFvQyxLQUFLLCtEQUErRCx1Q0FBdUMsS0FBSyx5SEFBeUgsa0NBQWtDLG1DQUFtQyx5QkFBeUIsS0FBSyx3SEFBd0gsb0NBQW9DLEtBQUssMERBQTBELDRCQUE0QixtQkFBbUIsZ0JBQWdCLEtBQUssc0VBQXNFLG9DQUFvQyxLQUFLLGdEQUFnRCxnQkFBZ0IsS0FBSywwSEFBMEgsd0JBQXdCLHdFQUF3RSwyQkFBMkIsS0FBSyxxREFBcUQscUJBQXFCLGtCQUFrQiw0QkFBNEIsb0NBQW9DLHlCQUF5QixLQUFLLHNEQUFzRCxnQ0FBZ0MsS0FBSyxtREFBbUQsb0NBQW9DLEtBQUssb0RBQW9ELGtDQUFrQyxLQUFLLFVBQVUsZUFBZSwrRUFBK0UsaUJBQWlCLG9DQUFvQyx1QkFBdUIsSUFBSSxjQUFjLFNBQVMsZUFBZSw0R0FBNEcsNkJBQTZCLG1CQUFtQix1RkFBdUYsWUFBWSxtQkFBbUIsSUFBSSxnQkFBZ0IsdURBQXVELE9BQU8sU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxjQUFjLFVBQVUscUJBQXFCLE1BQU0scUNBQXFDLG9EQUFvRCxpR0FBaUcsdUZBQXVGLGtCQUFrQiw4SkFBOEosNkNBQTZDLG9CQUFvQix3Q0FBd0MsTUFBTSw2QkFBNkIsaUVBQWlFLHdCQUF3QixpQkFBaUIsbUJBQW1CLDZIQUE2SCwrUEFBK1Asa0JBQWtCLGdCQUFnQixVQUFVLHFFQUFxRSxPQUFPLG9EQUFvRCw0REFBNEQsMkJBQTJCLFNBQVMsa0NBQWtDLHVEQUF1RCxFQUFFLDhDQUE4QyxPQUFPLHdEQUF3RCwwQkFBMEIsT0FBTyxzREFBc0QsbUNBQW1DLG9CQUFvQix1REFBdUQsU0FBUyxnQkFBZ0IsNElBQTRJLDZSQUE2Uix5QkFBeUIsdURBQXVELE9BQU8sMEhBQTBILGVBQWUsMENBQTBDLGVBQWUsZ0JBQWdCLG9CQUFvQixrQkFBa0IsRUFBRSxlQUFlLG1HQUFtRyxvRUFBb0UsdUJBQXVCLGtCQUFrQixFQUFFLEVBQUUsaUJBQWlCLHdIQUF3SCxRQUFRLGdFQUFnRSxlQUFlLHlHQUF5RyxvQkFBb0Isd0JBQXdCLG9CQUFvQixZQUFZLGtCQUFrQixRQUFRLFdBQVcsd0NBQXdDLFNBQVMsTUFBTSxpQ0FBaUMsc0NBQXNDLFFBQVEsV0FBVyw0RkFBNEYsU0FBUywwR0FBMEcsbURBQW1ELDZJQUE2SSx5QkFBeUIsd0JBQXdCLEVBQUUsRUFBRSxrQkFBa0IsNkRBQTZELG1DQUFtQyxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsVUFBVSxpREFBaUQsa0RBQWtELFNBQVMsRUFBRSxTQUFTLEVBQUUscURBQXFELFVBQVUsZ0JBQWdCLFFBQVEseUdBQXlHLFNBQVMsNEJBQTRCLDRFQUE0RSx3QkFBd0IsNEZBQTRGLEVBQUUsd0JBQXdCLHNHQUFzRyx1Q0FBdUMsRUFBRSxRQUFRLDJDQUEyQyx3REFBd0QsNkJBQTZCLDBCQUEwQixpQ0FBaUMseUJBQXlCLDJCQUEyQixrQkFBa0IsR0FBRyxnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxNQUFNLGtDQUFrQywrREFBK0Qsb0JBQW9CLHdCQUF3QixvQkFBb0IsWUFBWSxrQkFBa0IsUUFBUSxXQUFXLHdDQUF3QyxTQUFTLE1BQU0saUNBQWlDLHNDQUFzQyxRQUFRLFdBQVcsNEZBQTRGLFNBQVMsdUNBQXVDLHFDQUFxQyxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsVUFBVSxpREFBaUQsa0RBQWtELFNBQVMsRUFBRSxTQUFTLEdBQUcsU0FBUywwQkFBMEIsb0VBQW9FLGtEQUFrRCxnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxNQUFNLEVBQUUsaUJBQWlCLG9DQUFvQyx1QkFBdUIsSUFBSSxjQUFjLFNBQVMsZUFBZSw2R0FBNkcsNkJBQTZCLG1CQUFtQix1RkFBdUYsWUFBWSxtQkFBbUIsSUFBSSxnQkFBZ0IsdURBQXVELE9BQU8sU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxjQUFjLFVBQVUscUJBQXFCLE1BQU0scUNBQXFDLG9EQUFvRCxpR0FBaUcsdUZBQXVGLGtCQUFrQiw4SkFBOEosNERBQTRELGlDQUFpQyx3R0FBd0csK0JBQStCLEtBQUssZ0RBQWdELG9DQUFvQyxxQkFBcUIsMkJBQTJCLGtCQUFrQixvQ0FBb0MsVUFBVSxpQkFBaUIsb0NBQW9DLHVCQUF1QixJQUFJLGNBQWMsU0FBUyxlQUFlLGdJQUFnSSw2QkFBNkIsbUJBQW1CLHVGQUF1RixZQUFZLG1CQUFtQixJQUFJLGdCQUFnQix1REFBdUQsT0FBTyxTQUFTLFNBQVMsUUFBUSxJQUFJLDhCQUE4QixRQUFRLGNBQWMsVUFBVSxxQkFBcUIsTUFBTSxxQ0FBcUMsb0RBQW9ELGlHQUFpRyx1RkFBdUYsa0JBQWtCLDhKQUE4SixrQkFBa0IsaUNBQWlDLFFBQVEsd0NBQXdDLGlDQUFpQyxNQUFNLG1DQUFtQyxNQUFNLElBQUksa0JBQWtCLG1CQUFtQixVQUFVLGlCQUFpQixvQ0FBb0MsdUJBQXVCLElBQUksY0FBYyxTQUFTLGlCQUFpQixtQkFBbUIsNkJBQTZCLG1CQUFtQix1RkFBdUYsWUFBWSxtQkFBbUIsSUFBSSxnQkFBZ0IsMkRBQTJELE9BQU8sU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxjQUFjLFVBQVUscUJBQXFCLE1BQU0scUNBQXFDLG9EQUFvRCxpR0FBaUcsdUZBQXVGLGtCQUFrQiw4SkFBOEosR0FBRyxlQUFlLDRDQUE0QyxpQ0FBaUMsZ0JBQWdCLE1BQU0scUNBQXFDLGdDQUFnQyxFQUFFLCtCQUErQix3QkFBd0IsUUFBUSxpQkFBaUIsb0NBQW9DLHVCQUF1QixJQUFJLGNBQWMsU0FBUyxlQUFlLFlBQVksbUJBQW1CLEtBQUssd0NBQXdDLGtCQUFrQixnSEFBZ0gsdURBQXVELDBCQUEwQixVQUFVLGlEQUFpRCxrREFBa0QsU0FBUyxFQUFFLFNBQVMsaUJBQWlCLHFCQUFxQixnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxJQUFJLGlCQUFpQixvQkFBb0Isd0JBQXdCLG9CQUFvQixZQUFZLGtCQUFrQixRQUFRLFdBQVcsd0NBQXdDLFNBQVMsTUFBTSxpQ0FBaUMsc0NBQXNDLFFBQVEsV0FBVyw0RkFBNEYsU0FBUyxpQkFBaUIsbUJBQW1CLDZCQUE2QixtQkFBbUIsdUZBQXVGLFlBQVksbUJBQW1CLElBQUksZ0JBQWdCLDJEQUEyRCxPQUFPLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsY0FBYyxVQUFVLHFCQUFxQixNQUFNLHFDQUFxQyxvREFBb0QsaUdBQWlHLHVGQUF1RixrQkFBa0IsOEpBQThKLEdBQUcsY0FBYyxtREFBbUQsNkRBQTZELHFDQUFxQyw0Q0FBNEMsNERBQTRELGtFQUFrRSxnRUFBZ0UsbUVBQW1FLGlFQUFpRSxxREFBcUQseURBQXlELDZEQUE2RCxvQ0FBb0MsZUFBZSxhQUFhLG9DQUFvQyw0QkFBNEIsa0NBQWtDLHNDQUFzQyxpQ0FBaUMsYUFBYSxpQ0FBaUMsa0RBQWtELGlDQUFpQyxrQ0FBa0MsNEJBQTRCLGtDQUFrQyxpQ0FBaUMsNkNBQTZDLDhMQUE4TCwwQ0FBMEMsaURBQWlELGdDQUFnQyw4QkFBOEIsdUJBQXVCLCtCQUErQixnRUFBZ0UsZ1FBQWdRLDhDQUE4Qyw0QkFBNEIsZUFBZSxvREFBb0QsNEJBQTRCLGVBQWUsMkVBQTJFLDJDQUEyQyxvQ0FBb0MsZUFBZSxzQ0FBc0Msb0NBQW9DLDhDQUE4QyxvQ0FBb0MsNkRBQTZELHNDQUFzQyxxQ0FBcUMsK0NBQStDLHlDQUF5QyxtQkFBbUIsNkJBQTZCLGlFQUFpRSxtQkFBbUIsaUJBQWlCLGVBQWUsZ0ZBQWdGLHlCQUF5QixlQUFlLHVCQUF1Qiw4QkFBOEIsZUFBZSxhQUFhLG9EQUFvRCx5Q0FBeUMsYUFBYSxtRUFBbUUseUNBQXlDLG1DQUFtQyxhQUFhLDBCQUEwQiwwQkFBMEIsbUNBQW1DLG9DQUFvQywrQkFBK0IsOERBQThELGlDQUFpQyxpQ0FBaUMsdUJBQXVCLHlCQUF5Qix1QkFBdUIsbUNBQW1DLG9EQUFvRCxzREFBc0QsYUFBYSw2QkFBNkIsa0NBQWtDLDRCQUE0Qix1QkFBdUIsa0NBQWtDLGdDQUFnQyxpQ0FBaUMscUNBQXFDLGdDQUFnQyxpREFBaUQsZ0VBQWdFLGlEQUFpRCwyREFBMkQsZUFBZSwrQ0FBK0MsNkRBQTZELGVBQWUsOEJBQThCLG9DQUFvQyxlQUFlLGFBQWEsa0NBQWtDLHdDQUF3QywyQkFBMkIsaUNBQWlDLDJCQUEyQiw0QkFBNEIsdUJBQXVCLGtDQUFrQyx3QkFBd0IsMENBQTBDLCtCQUErQix5QkFBeUIsa0NBQWtDLGlDQUFpQywyQkFBMkIsZUFBZSxhQUFhLHNDQUFzQyxvQ0FBb0MscUNBQXFDLGlEQUFpRCxnRUFBZ0UseUJBQXlCLDJEQUEyRCxlQUFlLGFBQWEsNEJBQTRCLDBCQUEwQixvQ0FBb0MscUNBQXFDLGFBQWEsZ0NBQWdDLHNDQUFzQyx1Q0FBdUMsNEJBQTRCLDRCQUE0QixrQ0FBa0MsaURBQWlELHdFQUF3RSxpQ0FBaUMsMkJBQTJCLGVBQWUseUJBQXlCLDREQUE0RCxlQUFlLHFCQUFxQiwrQkFBK0Isc0NBQXNDLHVDQUF1QyxlQUFlLGFBQWEsNkNBQTZDLDRCQUE0Qix5Q0FBeUMsaURBQWlELHlDQUF5QyxvRkFBb0YsMENBQTBDLGlCQUFpQixlQUFlLHFCQUFxQixpQ0FBaUMsZUFBZSwwQ0FBMEMsZ0VBQWdFLGVBQWUsMkNBQTJDLCtEQUErRCxlQUFlLGFBQWEsMENBQTBDLG9DQUFvQyxzQ0FBc0MsK0RBQStELGVBQWUsYUFBYSxzQkFBc0IseURBQXlELGFBQWEsc0JBQXNCLHNEQUFzRCxvQ0FBb0MsYUFBYSx1QkFBdUIsbUNBQW1DLGFBQWEsaUNBQWlDLGtCQUFrQiwyQkFBMkIsa0NBQWtDLDJDQUEyQyxlQUFlLG9CQUFvQiwyQkFBMkIsa0NBQWtDLHlDQUF5QyxlQUFlLGFBQWEsa0NBQWtDLGtCQUFrQiwyQkFBMkIsa0NBQWtDLHlDQUF5QyxlQUFlLG9CQUFvQiwyQkFBMkIsNkNBQTZDLGtDQUFrQyxlQUFlLGFBQWEsZ0NBQWdDLG9DQUFvQyx5Q0FBeUMsZUFBZSxxQ0FBcUMscUNBQXFDLGVBQWUscUNBQXFDLHFDQUFxQyxlQUFlLHNDQUFzQyx3Q0FBd0MsZUFBZSxhQUFhLGdDQUFnQyxvQ0FBb0MseUNBQXlDLGVBQWUscUNBQXFDLHFDQUFxQyxlQUFlLHFDQUFxQyxxQ0FBcUMsZUFBZSxzQ0FBc0Msd0NBQXdDLGVBQWUsYUFBYSwrQ0FBK0MseUhBQXlILG1EQUFtRCxlQUFlLGFBQWEsd0VBQXdFLEtBQUssd0JBQXdCLElBQUkscUJBQXFCLFNBQVMsR0FBRyxzQ0FBc0MsaWJBQWliLGlDQUFpQyxLQUFLLHdCQUF3QixpQ0FBaUMsc0hBQXNILDhCQUE4QixrQkFBa0IsbUJBQW1CLG9GQUFvRixxQkFBcUIsNEJBQTRCLDhDQUE4QyxlQUFlLDBDQUEwQyxJQUFJLHNCQUFzQix3QkFBd0IsMENBQTBDLHVCQUF1QixJQUFJLGlDQUFpQyx1QkFBdUIsTUFBTSxjQUFjLDRDQUE0QyxTQUFTLFNBQVMsUUFBUSxJQUFJLDhCQUE4QixRQUFRLGdCQUFnQiwrREFBK0QsS0FBSyx1QkFBdUIsNEJBQTRCLEVBQUUsd0JBQXdCLGdEQUFnRCxpR0FBaUcsZ0RBQWdELEVBQUUsZ0JBQWdCLHNEQUFzRCwwQkFBMEIseUNBQXlDLG9GQUFvRixHQUFHLEdBQUcsMEJBQTBCLGtGQUFrRixNQUFNLDZDQUE2Qyx3QkFBd0IsZ0JBQWdCLEVBQUUsR0FBRyxHQUFHLEVBQUUsbUJBQW1CLCtCQUErQixHQUFHLEVBQUUsRUFBRSxlQUFlLDREQUE0RCwrQkFBK0IsS0FBSyx3REFBd0QsMERBQTBELG1CQUFtQiwrREFBK0QsR0FBRyxHQUFHLGVBQWUsb0VBQW9FLHdCQUF3Qiw0R0FBNEcsMkRBQTJELHVOQUF1TixvQkFBb0IsdUtBQXVLLEdBQUcscUJBQXFCLHVDQUF1Qyx1SkFBdUosWUFBWSxvQkFBb0IsOENBQThDLG9CQUFvQix1Q0FBdUMsR0FBRywrQkFBK0Isc0pBQXNKLFlBQVksb0JBQW9CLHVDQUF1QyxHQUFHLHFCQUFxQixpREFBaUQsd0NBQXdDLG9CQUFvQixvQ0FBb0MsR0FBRyxHQUFHLEdBQUcsRUFBRSxjQUFjLHVCQUF1QixxSEFBcUgsNHdCQUE0d0IsRUFBRSxFQUFFLGVBQWUsNkJBQTZCLDBGQUEwRixLQUFLLDJCQUEyQixnWkFBZ1osRUFBRSxHQUFHLE9BQU8saUNBQW1CLG1FQUFtRSxpQ0FBbUIsNEdBQTRHLGVBQWUsUUFBUSxxQ0FBcUMsWUFBWSxtQkFBbUIsS0FBSyx3Q0FBd0Msa0JBQWtCLGdIQUFnSCx1REFBdUQsMEJBQTBCLFVBQVUsaURBQWlELGtEQUFrRCxTQUFTLEVBQUUsU0FBUyxFQUFFLHNGQUFzRixTQUFTLGdDQUFnQyw2REFBNkQsME9BQTBPLGlEQUFpRCwrQkFBK0IsK0NBQStDLGdEQUFnRCxrQkFBa0Isb0dBQW9HLHVEQUF1RCx3REFBd0QsR0FBRyxtQkFBbUIsMkVBQTJFLDhEQUE4RCwwSkFBMEosbUJBQW1CLHNFQUFzRSwyQkFBMkIseURBQXlELG1CQUFtQixzREFBc0QsRUFBRSxvQkFBb0IsNEVBQTRFLG9FQUFvRSxTQUFTLEdBQUcsb0JBQW9CLHVHQUF1RyxnRUFBZ0UsNEJBQTRCLG1GQUFtRixPQUFPLG9CQUFvQiw4RUFBOEUsa0VBQWtFLDRCQUE0Qix5RUFBeUUsT0FBTyxvQkFBb0IsOEVBQThFLGtFQUFrRSw0QkFBNEIseUVBQXlFLE9BQU8sb0JBQW9CLDhFQUE4RSxpRUFBaUUsNEJBQTRCLHdFQUF3RSxHQUFHLG1CQUFtQix3REFBd0QsRUFBRSxtQkFBbUIsc0RBQXNELEVBQUUsbUJBQW1CLHlEQUF5RCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsZ0hBQWdILHFCQUFxQixpQ0FBaUMsc0NBQXNDLGtCQUFrQixTQUFTLGlDQUFpQyxnRUFBZ0UsTUFBTSxlQUFlLG1CQUFtQiw0QkFBNEIsNkRBQTZELGdGQUFnRixrRUFBa0UsbUZBQW1GLGtCQUFrQix5SkFBeUosc1VBQXNVLE9BQU8saUJBQWlCLG9OQUFvTixHQUFHLEVBQUUsZUFBZSxtQkFBbUIsNEJBQTRCLDZEQUE2RCxnRkFBZ0Ysa0VBQWtFLGtHQUFrRyx3QkFBd0IsT0FBTyxpQkFBaUIsME9BQTBPLDhCQUE4QixnRkFBZ0YsMk1BQTJNLDBIQUEwSCxrQkFBa0IsMkZBQTJGLHVNQUF1TSxnQ0FBZ0MsNEpBQTRKLHdDQUF3Qyw0Q0FBNEMsbUJBQW1CLEVBQUUsc0ZBQXNGLEdBQUcsRUFBRSxRQUFRLE9BQU8sb01BQW9NLE1BQU0sb09BQW9PLGVBQWUscURBQXFELG9CQUFvQix3QkFBd0Isb0JBQW9CLFlBQVksa0JBQWtCLFFBQVEsV0FBVyx3Q0FBd0MsU0FBUyxNQUFNLGlDQUFpQyxzQ0FBc0MsUUFBUSxXQUFXLDRGQUE0RixTQUFTLDZFQUE2RSxvQ0FBb0MsWUFBWSxtQkFBbUIsS0FBSyx3Q0FBd0Msa0JBQWtCLGdIQUFnSCx1REFBdUQsMEJBQTBCLFVBQVUsaURBQWlELGtEQUFrRCxTQUFTLEVBQUUsU0FBUyxFQUFFLDRDQUE0QyxTQUFTLHlCQUF5QixhQUFhLGdCQUFnQixhQUFhLEVBQUUsZ0hBQWdILHFCQUFxQixpQ0FBaUMsc0NBQXNDLGtCQUFrQixTQUFTLGlDQUFpQyxnRUFBZ0UsTUFBTSxjQUFjLHVCQUF1QixxSEFBcUgscXhEQUFxeEQsRUFBRSxFQUFFLGNBQWMsdUJBQXVCLGlHQUFpRyxnZ0JBQWdnQixFQUFFLEVBQUUsY0FBYyx3QkFBd0IsbUhBQW1ILGlFQUFpRSxna0JBQWdrQixFQUFFLG9CQUFvQiwrQkFBK0IscURBQXFELHNDQUFzQyxFQUFFLEVBQUUsR0FBRyxFQUFFLGNBQWMsdUJBQXVCLHdIQUF3SCx1dkJBQXV2QixFQUFFLEVBQUUsY0FBYyx1QkFBdUIseUVBQXlFLDJMQUEyTCxFQUFFLEVBQUUsaUJBQWlCLG9DQUFvQyx1QkFBdUIsSUFBSSxjQUFjLFNBQVMsaUJBQWlCLG1CQUFtQiw2QkFBNkIsbUJBQW1CLHVGQUF1RixZQUFZLG1CQUFtQixJQUFJLGdCQUFnQiwyREFBMkQsT0FBTyxTQUFTLFNBQVMsUUFBUSxJQUFJLDhCQUE4QixRQUFRLGNBQWMsVUFBVSxxQkFBcUIsTUFBTSxxQ0FBcUMsb0RBQW9ELGlHQUFpRyx1RkFBdUYsa0JBQWtCLDhKQUE4SixHQUFHLE9BQU8sYUFBeUMsRUFBRSxDQUFhLDZCQUE2QixpQkFBaUIsb0NBQW9DLHVCQUF1QixJQUFJLGNBQWMsU0FBUyxpQkFBaUIsbUJBQW1CLDZCQUE2QixtQkFBbUIsdUZBQXVGLFlBQVksbUJBQW1CLElBQUksZ0JBQWdCLDJEQUEyRCxPQUFPLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsY0FBYyxVQUFVLDJCQUEyQiw4SkFBOEosR0FBRyxlQUFlLG1CQUFtQixpQ0FBaUMsaUJBQWlCLG9HQUFvRyx1QkFBdUIseUpBQXlKLEdBQUcsaUJBQWlCLE1BQU0scUNBQXFDLG9EQUFvRCxpR0FBaUcsdUZBQXVGLGNBQWMsdUNBQXVDLG9CQUFvQiwwQkFBMEIsOEJBQThCLGVBQWUseUJBQXlCLDBDQUEwQyxtQ0FBbUMsc0JBQXNCLDRCQUE0QixpQkFBaUIsZ0NBQWdDLGlEQUFpRCx5Q0FBeUMseUJBQXlCLHlCQUF5QixrQ0FBa0Msc0NBQXNDLDJEQUEyRCx1Q0FBdUMsd0RBQXdELHFCQUFxQixnREFBZ0QsV0FBVyxTQUFTLG1CQUFtQiw4Q0FBOEMsU0FBUywwQkFBMEIsdUNBQXVDLFNBQVMsaURBQWlELDZCQUE2QixTQUFTLDJCQUEyQixxQ0FBcUMsK0JBQStCLFNBQVMsT0FBTyxhQUFhLDZCQUE2Qiw0QkFBNEIsZ0NBQWdDLDRDQUE0QywwQ0FBMEMsd0JBQXdCLHFCQUFxQix3QkFBd0IsMkJBQTJCLHNDQUFzQyxrQ0FBa0MseUJBQXlCLFNBQVMsT0FBTyx5Q0FBeUMsd0JBQXdCLHNDQUFzQyxvQkFBb0IscUJBQXFCLHNCQUFzQiw0QkFBNEIsZ0NBQWdDLDJCQUEyQix5REFBeUQsbUJBQW1CLDRDQUE0QyxTQUFTLDJCQUEyQixxQ0FBcUMsU0FBUyxlQUFlLHNCQUFzQix1QkFBdUIsU0FBUyxPQUFPLEtBQUssK0JBQStCLDJCQUEyQix3QkFBd0Isb0JBQW9CLDBCQUEwQixlQUFlLEtBQUssa0NBQWtDLGlCQUFpQiwyQ0FBMkMsb0NBQW9DLHlDQUF5QyxnQ0FBZ0MsdUJBQXVCLHlCQUF5Qix5QkFBeUIsc0NBQXNDLHlCQUF5QixpQkFBaUIsa0JBQWtCLDBCQUEwQix3QkFBd0IsbUdBQW1HLDZCQUE2QixtQkFBbUIsaUJBQWlCLE9BQU8sYUFBYSwyQkFBMkIsb0NBQW9DLHFCQUFxQixrQkFBa0IsT0FBTyxtQ0FBbUMsc0JBQXNCLDRCQUE0QixpQkFBaUIsT0FBTyx3Q0FBd0MsbUJBQW1CLG9CQUFvQiwyQkFBMkIsdUJBQXVCLHlDQUF5QyxrQ0FBa0MsNkNBQTZDLFNBQVMsT0FBTyxLQUFLLGdFQUFnRSxLQUFLLHdCQUF3QixJQUFJLHFCQUFxQixTQUFTLEdBQUcsd0RBQXdELGVBQWUsNE5BQTROLGFBQWEsTUFBTSxpRUFBaUUsTUFBTSxVQUFVLGFBQWEsTUFBTSx3RUFBd0Usd0JBQXdCLDZEQUE2RCxpRkFBaUYsWUFBWSx1QkFBdUIsc0pBQXNKLDhCQUE4Qix3QkFBd0IsOEJBQThCLHNCQUFzQixFQUFFLFdBQVcsWUFBWSx5QkFBeUIsNEJBQTRCLGNBQWMsNENBQTRDLFdBQVcsMEJBQTBCLHVCQUF1QixJQUFJLE1BQU0sTUFBTSxXQUFXLGtDQUFrQyxJQUFJLGNBQWMsdUNBQXVDLDREQUE0RCxNQUFNLE1BQU0sT0FBTyxvRkFBb0YsOERBQThELG9CQUFvQixXQUFXLElBQUksRUFBRSx3Q0FBd0MsdUZBQXVGLDJCQUEyQix1QkFBdUIsMERBQTBELGtFQUFrRSxFQUFFLEdBQUcsb0JBQW9CLGdGQUFnRixnRUFBZ0UsMkRBQTJELGdDQUFnQyxpQkFBaUIsR0FBRyxHQUFHLEVBQUUsY0FBYyx1QkFBdUIsbUhBQW1ILG1OQUFtTixFQUFFLEVBQUUsZUFBZSwrQkFBK0IsVUFBVSxnQ0FBZ0MsRUFBRSxpQ0FBaUMsc0NBQXNDLHNCQUFzQixzQkFBc0IsbUNBQW1DLGlEQUFpRCx3QkFBd0IsMEJBQTBCLDBCQUEwQiwyQkFBMkIsc0JBQXNCLDBCQUEwQix1QkFBdUIsK0NBQStDLFVBQVUsdUNBQXVDLHVCQUF1QiwyQkFBMkIsRUFBRSxjQUFjLGtJQUFrSSxpQ0FBaUMsaUNBQWlDLHdCQUF3QixPQUFPLHNDQUFzQyxZQUFZLEVBQUUsY0FBYyx1QkFBdUIsNkZBQTZGLDRYQUE0WCxFQUFFLEVBQUUsZ0JBQWdCLGVBQWUsa0dBQWtHLGlCQUFpQixvQ0FBb0MsdUJBQXVCLElBQUksY0FBYyxTQUFTLGVBQWUsWUFBWSxtQkFBbUIsS0FBSyx3Q0FBd0Msa0JBQWtCLGdIQUFnSCx1REFBdUQsMEJBQTBCLFVBQVUsaURBQWlELGtEQUFrRCxTQUFTLEVBQUUsU0FBUyxpQkFBaUIscUJBQXFCLGdIQUFnSCxxQkFBcUIsaUNBQWlDLHNDQUFzQyxrQkFBa0IsU0FBUyxpQ0FBaUMsZ0VBQWdFLElBQUksaUJBQWlCLG9CQUFvQix3QkFBd0Isb0JBQW9CLFlBQVksa0JBQWtCLFFBQVEsV0FBVyx3Q0FBd0MsU0FBUyxNQUFNLGlDQUFpQyxzQ0FBc0MsUUFBUSxXQUFXLDRGQUE0RixTQUFTLGlCQUFpQixtQkFBbUIsNkJBQTZCLG1CQUFtQix1RkFBdUYsWUFBWSxtQkFBbUIsSUFBSSxnQkFBZ0IsMkRBQTJELE9BQU8sU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxjQUFjLFVBQVUscUJBQXFCLE1BQU0scUNBQXFDLG9EQUFvRCxpR0FBaUcsdUZBQXVGLGtCQUFrQiw4SkFBOEosR0FBRyxjQUFjLDJDQUEyQyxrQkFBa0IsS0FBSyxpQ0FBaUMsOEJBQThCLHFCQUFxQixPQUFPLEtBQUssdUNBQXVDLHFCQUFxQixLQUFLLDJCQUEyQixzQkFBc0IscURBQXFELG9CQUFvQixxQ0FBcUMsMEJBQTBCLGdCQUFnQixLQUFLLHNDQUFzQywwQkFBMEIsS0FBSywwQkFBMEIsdUJBQXVCLGNBQWMsS0FBSyxnQ0FBZ0MsZ0NBQWdDLHVCQUF1QixvQ0FBb0MsZ0JBQWdCLEtBQUssK0JBQStCLG1DQUFtQyxnQ0FBZ0MsZ0JBQWdCLEtBQUsseUNBQXlDLG9CQUFvQiwwQkFBMEIsZUFBZSw4Q0FBOEMsOENBQThDLHVDQUF1Qyx1QkFBdUIsZ0NBQWdDLG9DQUFvQyx1QkFBdUIseURBQXlELGlCQUFpQiw0Q0FBNEMsT0FBTyxhQUFhLG9CQUFvQixxQkFBcUIsMEJBQTBCLE9BQU8sS0FBSyxzQkFBc0Isc0JBQXNCLG1DQUFtQyw2QkFBNkIsT0FBTyxnQkFBZ0IsbUJBQW1CLE9BQU8sZ0JBQWdCLHNDQUFzQyxnREFBZ0QsT0FBTyxLQUFLLHNCQUFzQixrQkFBa0IsbUJBQW1CLGtCQUFrQixLQUFLLGdFQUFnRSxLQUFLLHdCQUF3QixJQUFJLHFCQUFxQixTQUFTLEdBQUcsZUFBZSxxT0FBcU8sbURBQW1ELDhCQUE4Qix5Q0FBeUMscUJBQXFCLGNBQWMsOEJBQThCLGtFQUFrRSxjQUFjLG1CQUFtQixFQUFFLDZCQUE2QixvQkFBb0IsS0FBSywwQkFBMEIsNERBQTRELG9CQUFvQiw4REFBOEQsMkRBQTJELDJEQUEyRCxpQ0FBaUMsaUJBQWlCLDRFQUE0RSxHQUFHLGlCQUFpQiw2Q0FBNkMsUUFBUSwrQkFBK0IsOENBQThDLE1BQU0sZ0RBQWdELGtGQUFrRixPQUFPLG9NQUFvTSwrQkFBK0IsaUNBQWlDLHNCQUFzQiwrQkFBK0Isc0JBQXNCLDZCQUE2QixHQUFHLEdBQUcsb0JBQW9CLDJEQUEyRCwyREFBMkQsdUNBQXVDLGlCQUFpQixzRkFBc0YsR0FBRyxpQkFBaUIsMkRBQTJELHlEQUF5RCwrQkFBK0IsMkNBQTJDLHNCQUFzQiw2Q0FBNkMsc0JBQXNCLHFDQUFxQyxzQkFBc0IsdUNBQXVDLEdBQUcsR0FBRyxvQkFBb0IsMkRBQTJELDJEQUEyRCwrQkFBK0IsaUJBQWlCLGlGQUFpRixHQUFHLGdCQUFnQixtREFBbUQsMEJBQTBCLDRDQUE0Qyw0QkFBNEIsMEJBQTBCLG1CQUFtQixJQUFJLEVBQUUsR0FBRyxvQkFBb0IsMkRBQTJELDJEQUEyRCwrREFBK0QsaUJBQWlCLDBHQUEwRyxHQUFHLG1CQUFtQiw2REFBNkQsZ0pBQWdKLG9CQUFvQixnQkFBZ0IsR0FBRyxFQUFFLEdBQUcsb0JBQW9CLDJEQUEyRCwyREFBMkQsdURBQXVELGlCQUFpQixtR0FBbUcsR0FBRyxtQkFBbUIsc0RBQXNELDhEQUE4RCxFQUFFLEdBQUcsbUJBQW1CLDBEQUEwRCwyREFBMkQsOENBQThDLGtCQUFrQix3R0FBd0csZ0VBQWdFLG1DQUFtQyx1REFBdUQsZUFBZSxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsdUVBQXVFLG1CQUFtQiw2REFBNkQsMkRBQTJELDJEQUEyRCxzREFBc0QsaUJBQWlCLG9IQUFvSCxHQUFHLG1CQUFtQiw0REFBNEQsME5BQTBOLGFBQWEsNEJBQTRCLG1CQUFtQixFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBK0Msa0JBQWtCLDZEQUE2RCwyREFBMkQsMkRBQTJELHdEQUF3RCxpQkFBaUIseUtBQXlLLEdBQUcsbUJBQW1CLDREQUE0RCxrUkFBa1IsYUFBYSw0QkFBNEIsdUJBQXVCLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFJLEVBQUUsR0FBRyxlQUFlLDBEQUEwRCx3QkFBd0IsaUVBQWlFLEtBQUssV0FBVyxrQkFBa0IsR0FBRyxFQUFFLGVBQWUsZ0JBQWdCLGtDQUFrQyxFQUFFLGdDQUFnQyxFQUFFLGlDQUFpQyxFQUFFLHFCQUFxQixnQkFBZ0IsY0FBYyx1QkFBdUIsdUZBQXVGLDBSQUEwUixFQUFFLEVBQUUsaUJBQWlCLG9DQUFvQyx1QkFBdUIsSUFBSSxjQUFjLFNBQVMsZUFBZSxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsVUFBVSxpREFBaUQsa0RBQWtELFNBQVMsRUFBRSxTQUFTLGlCQUFpQixxQkFBcUIsZ0hBQWdILHFCQUFxQixpQ0FBaUMsc0NBQXNDLGtCQUFrQixTQUFTLGlDQUFpQyxnRUFBZ0UsSUFBSSxpQkFBaUIsb0JBQW9CLHdCQUF3QixvQkFBb0IsWUFBWSxrQkFBa0IsUUFBUSxXQUFXLHdDQUF3QyxTQUFTLE1BQU0saUNBQWlDLHNDQUFzQyxRQUFRLFdBQVcsNEZBQTRGLFNBQVMsZUFBZSxtQkFBbUIsaUNBQWlDLGlCQUFpQixvR0FBb0csdUJBQXVCLHlKQUF5SixHQUFHLGlCQUFpQixNQUFNLHFDQUFxQyxvREFBb0QsaUdBQWlHLHVGQUF1RixlQUFlLHdPQUF3Tyx5Q0FBeUMsYUFBYSx1Q0FBdUMsUUFBUSxrQkFBa0IsUUFBUSxzRUFBc0UsUUFBUSxrSUFBa0ksaUJBQWlCLEVBQUUsYUFBYSwySEFBMkgsS0FBSyxjQUFjLHlGQUF5RixjQUFjLGlDQUFpQyxNQUFNLGtEQUFrRCxhQUFhLHdEQUF3RCxjQUFjLDhCQUE4Qiw0REFBNEQsNkNBQTZDLG1DQUFtQyxzSkFBc0osNkJBQTZCLE9BQU8sd0JBQXdCLHFDQUFxQyxlQUFlLGdDQUFnQyxFQUFFLGlCQUFpQiw2REFBNkQsdUJBQXVCLHlEQUF5RCxhQUFhLG9CQUFvQixxQkFBcUIsU0FBUyxxREFBcUQsY0FBYyxRQUFRLEVBQUUsNkVBQTZFLFlBQVksaURBQWlELHVDQUF1QyxnQkFBZ0Isa0JBQWtCLGdDQUFnQyxRQUFRLDJIQUEySCx3QkFBd0IsWUFBWSxjQUFjLHFKQUFxSixzRkFBc0Ysc0RBQXNELHFCQUFxQixnQkFBZ0IseUhBQXlILGlDQUFpQyxNQUFNLG1EQUFtRCxRQUFRLGlFQUFpRSxzQkFBc0IsRUFBRSx5RUFBeUUsMENBQTBDLG1DQUFtQyx5REFBeUQsT0FBTyxTQUFTLDRCQUE0QiwrTEFBK0wsWUFBWSwwREFBMEQsMkRBQTJELGFBQWEsY0FBYyxzQ0FBc0MsZ0JBQWdCLHFDQUFxQyxpQkFBaUIsNERBQTRELG1CQUFtQiwyQkFBMkIsNkJBQTZCLHFCQUFxQix1RkFBdUYsWUFBWSxtQkFBbUIsSUFBSSxnQkFBZ0IsdURBQXVELE9BQU8sU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxjQUFjLFVBQVUsMkJBQTJCLDhKQUE4SixrQkFBa0IsT0FBTywrREFBK0QsOENBQThDLGtCQUFrQiwwQkFBMEIsc0JBQXNCLElBQUksa0NBQWtDLEVBQUUsMEJBQTBCLEdBQUcsNEJBQTRCLGVBQWUsc0JBQXNCLE1BQU0sOERBQThELEVBQUUsc0JBQXNCLGdEQUFnRCxvQ0FBb0MsS0FBSyxNQUFNLE1BQU0sT0FBTyxtQkFBbUIsWUFBWSxHQUFHLGVBQWUsa0VBQWtFLHFCQUFxQixpQkFBaUIsb0NBQW9DLHVCQUF1QixJQUFJLGNBQWMsU0FBUyxtQkFBbUIseUNBQXlDLGtEQUFrRCxXQUFXLGVBQWUsWUFBWSxtQkFBbUIsS0FBSyx3Q0FBd0Msa0JBQWtCLGdIQUFnSCx1REFBdUQsMEJBQTBCLGFBQWEsRUFBRSxTQUFTLGlCQUFpQixvQkFBb0Isd0JBQXdCLG9CQUFvQixZQUFZLGtCQUFrQixRQUFRLFdBQVcsd0NBQXdDLFNBQVMsTUFBTSxpQ0FBaUMsc0NBQXNDLFFBQVEsV0FBVyw0RkFBNEYsU0FBUyxpQkFBaUIsbUJBQW1CLDZCQUE2QixtQkFBbUIsdUZBQXVGLFlBQVksbUJBQW1CLElBQUksZ0JBQWdCLDJEQUEyRCxPQUFPLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsY0FBYyxVQUFVLHFCQUFxQixNQUFNLHFDQUFxQyxvREFBb0QsaUdBQWlHLHVGQUF1RixrQkFBa0IsOEpBQThKLEdBQUcsZUFBZSxxSUFBcUksdUJBQXVCLDBMQUEwTCwrQ0FBK0MsY0FBYyxFQUFFLDZCQUE2QixNQUFNLGVBQWUsS0FBcUIsK0RBQStELEtBQUssNkJBQTZCLE1BQU0scUdBQXFHLElBQUksTUFBMkMsQ0FBQyxDQUFtSSxZQUFZLGFBQWEsZUFBZSxzaEJBQXNoQixnREFBZ0QsK0JBQStCLGVBQWUsaUNBQWlDLHFFQUFxRSw0SEFBNEgsNkJBQTZCLDJCQUEyQixjQUFjLGlEQUFpRCwyRUFBMkUsOENBQThDLEVBQUUsZ0RBQWdELDJFQUEyRSxpQkFBaUIsRUFBRSxtRkFBbUYsNkJBQTZCLGFBQWEsaUNBQWlDLEtBQUssUUFBUSxhQUFhLGNBQWMsMEJBQTBCLEVBQUUsNkNBQTZDLGNBQWMsSUFBSSxnQkFBZ0IsK0RBQStELElBQUksZ0NBQWdDLGtCQUFrQixzTUFBc00sYUFBYSw0TEFBNEwsa0JBQWtCLG9DQUFvQyx1REFBdUQsZ0RBQWdELGlDQUFpQyxhQUFhLDRCQUE0QixNQUFNLFFBQVEsa0JBQWtCLHlCQUF5QixNQUFNLHNEQUFzRCxzQ0FBc0MscUJBQXFCLDBDQUEwQyx5R0FBeUcsK0VBQStFLGtDQUFrQyxlQUFlLG9DQUFvQywrQkFBK0Isd0JBQXdCLHlPQUF5TyxzREFBc0QsV0FBVyxHQUFHLCtCQUErQixHQUFHLE9BQU8sRUFBRSx5REFBeUQsRUFBRSxnQkFBZ0IsbUZBQW1GLGdCQUFnQix1Q0FBdUMsZ0JBQWdCLHVEQUF1RCxZQUFZLDhFQUE4RSxFQUFFLE1BQTJDLENBQUMsQ0FBMEUsMEJBQTBCLG1NQUFtTSxpQ0FBaUMsdUJBQXVCLE1BQU0scUJBQXFCLE1BQU0sc0JBQXNCLE1BQU0scUJBQXFCLDZEQUE2RCxPQUFPLCtDQUErQyw2QkFBNkIsbUVBQW1FLHFKQUFxSixXQUFXLHFCQUFxQixnQkFBZ0IsT0FBTyxHQUFHLGdCQUFnQiwrSEFBK0gsbUJBQW1CLCtDQUErQyxrQkFBa0IsZ0VBQWdFLGdCQUFnQiwySEFBMkgscUJBQXFCLG9CQUFvQixHQUFHLG9CQUFvQiwrREFBK0QsK0RBQStELHFCQUFxQix5QkFBeUIsYUFBYSxFQUFFLE1BQTJDLENBQUMsQ0FBaUosT0FBTyxHQUFHLEVBQUUsR0FBRyxFQUFFLGNBQWMsdUJBQXVCLHFIQUFxSCxzUkFBc1IsRUFBRSxFQUFFLGVBQWUsNk9BQTZPLGFBQWEsd0VBQXdFLDhCQUE4Qix1R0FBdUcsMkJBQTJCLHlCQUF5QixhQUFhLHVCQUF1QixvQ0FBb0MsMENBQTBDLFNBQVMsNEJBQTRCLGlEQUFpRCxvQkFBb0IsaURBQWlELEdBQUcsZ0hBQWdILHFCQUFxQixpQ0FBaUMsc0NBQXNDLGtCQUFrQixTQUFTLGlDQUFpQyxnRUFBZ0UsTUFBTSxlQUFlLGlCQUFpQix5QkFBeUIsOEZBQThGLHNEQUFzRCxLQUFLLEVBQUUsZUFBZSxRQUFRLHFDQUFxQyxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsVUFBVSxpREFBaUQsa0RBQWtELFNBQVMsRUFBRSxTQUFTLEVBQUUsdURBQXVELFNBQVMsMkJBQTJCLG92QkFBb3ZCLEVBQUUsZ0hBQWdILHFCQUFxQixpQ0FBaUMsc0NBQXNDLGtCQUFrQixTQUFTLGlDQUFpQyxnRUFBZ0UsTUFBTSxlQUFlLHlDQUF5Qyx5REFBeUQseURBQXlELGNBQWMsbUJBQW1CLEVBQUUsNEpBQTRKLG1CQUFtQixtQ0FBbUMsT0FBTyxjQUFjLHNFQUFzRSxtQ0FBbUMscUNBQXFDLEtBQUssdURBQXVELG1DQUFtQyxxQ0FBcUMsS0FBSywwREFBMEQsaUNBQWlDLG1DQUFtQyxLQUFLLHlEQUF5RCxrQ0FBa0Msb0NBQW9DLEtBQUssZ0VBQWdFLEtBQUssd0JBQXdCLElBQUkscUJBQXFCLFNBQVMsR0FBRyxlQUFlLGdGQUFnRiw2Q0FBNkMsK0tBQStLLDRDQUE0QyxvQkFBb0IsV0FBVyxHQUFHLG9CQUFvQiwyRUFBMkUsNENBQTRDLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxnQkFBZ0IsY0FBYyx3REFBd0Qsb0RBQW9ELG9CQUFvQixxQ0FBcUMsMEJBQTBCLGtEQUFrRCw2REFBNkQsbUJBQW1CLEtBQUsscURBQXFELG9CQUFvQiwwQkFBMEIsS0FBSywrQ0FBK0Msb0JBQW9CLDBCQUEwQixvQkFBb0IsZUFBZSwwQkFBMEIsb0RBQW9ELHFDQUFxQyxzQkFBc0IsK0NBQStDLEtBQUssd0VBQXdFLG1KQUFtSiw0QkFBNEIsb0NBQW9DLDJDQUEyQyxLQUFLLGdFQUFnRSxLQUFLLHdCQUF3QixJQUFJLHFCQUFxQixTQUFTLEdBQUcsZUFBZSxtRUFBbUUsU0FBMEIsRUFBRSxDQUFTLGdCQUFnQix3QkFBd0IsNEdBQTRHLHlFQUF5RSxjQUFjLG9CQUFvQix1RUFBdUUsa0VBQWtFLG9CQUFvQiw2RUFBNkUsR0FBRyxHQUFHLHNCQUFzQix3RUFBd0UsY0FBYyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsZUFBZSxRQUFRLHFDQUFxQyxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsVUFBVSxpREFBaUQsa0RBQWtELFNBQVMsRUFBRSxTQUFTLEVBQUUsNERBQTRELFNBQVMsMkJBQTJCLDBSQUEwUixFQUFFLGdIQUFnSCxxQkFBcUIsaUNBQWlDLHNDQUFzQyxrQkFBa0IsU0FBUyxpQ0FBaUMsZ0VBQWdFLE1BQU0sZUFBZSxnREFBZ0Qsb0JBQW9CLHdCQUF3QixvQkFBb0IsWUFBWSxrQkFBa0IsUUFBUSxXQUFXLHdDQUF3QyxTQUFTLE1BQU0saUNBQWlDLHNDQUFzQyxRQUFRLFdBQVcsNEZBQTRGLFNBQVMsMEJBQTBCLHdCQUF3QixzRUFBc0UsWUFBWSxtQkFBbUIsS0FBSyx3Q0FBd0Msa0JBQWtCLGdIQUFnSCx1REFBdUQsMEJBQTBCLFVBQVUsaURBQWlELGtEQUFrRCxTQUFTLEVBQUUsU0FBUyxHQUFHLFNBQVMsV0FBVyxnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxvQkFBb0IsbUJBQW1CLEdBQUcsRUFBRSxpQkFBaUIsb0NBQW9DLHVCQUF1QixJQUFJLGNBQWMsU0FBUyxpQkFBaUIsbUJBQW1CLDZCQUE2QixtQkFBbUIsdUZBQXVGLFlBQVksbUJBQW1CLElBQUksZ0JBQWdCLDJEQUEyRCxPQUFPLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsY0FBYyxVQUFVLHFCQUFxQixNQUFNLHFDQUFxQyxvREFBb0QsaUdBQWlHLHVGQUF1RixrQkFBa0IsOEpBQThKLEdBQUcsY0FBYywwREFBMEQsb0JBQW9CLEtBQUssaUVBQWlFLHFCQUFxQixLQUFLLHFEQUFxRCxzQkFBc0IscURBQXFELG9CQUFvQixxQ0FBcUMsMEJBQTBCLGdCQUFnQixLQUFLLGdFQUFnRSx3QkFBd0IsMEJBQTBCLEtBQUssNERBQTRELHVCQUF1QixjQUFjLEtBQUssa0VBQWtFLGdDQUFnQyx1QkFBdUIsb0NBQW9DLGdCQUFnQixLQUFLLGlFQUFpRSxtQ0FBbUMsZ0NBQWdDLGdCQUFnQixLQUFLLDRGQUE0RixvQkFBb0IsMEJBQTBCLGVBQWUsOENBQThDLDhDQUE4Qyx1Q0FBdUMsdUJBQXVCLGdDQUFnQyxvQ0FBb0MsdUJBQXVCLGlCQUFpQiwwQ0FBMEMsT0FBTyxLQUFLLDRCQUE0QixzQkFBc0IsbUNBQW1DLE9BQU8sZ0JBQWdCLG1CQUFtQixPQUFPLGdCQUFnQixzQ0FBc0MsZ0RBQWdELE9BQU8sS0FBSyxzQkFBc0Isa0JBQWtCLG1CQUFtQixrQkFBa0IsS0FBSyxnRUFBZ0UsS0FBSyx3QkFBd0IsSUFBSSxxQkFBcUIsU0FBUyxHQUFHLGVBQWUsZ0JBQWdCLGtDQUFrQyxFQUFFLGdDQUFnQyxFQUFFLGlDQUFpQyxFQUFFLHFCQUFxQixlQUFlLGlIQUFpSCxtREFBbUQsOEJBQThCLHlDQUF5QyxxQkFBcUIsY0FBYyw4QkFBOEIsa0VBQWtFLGNBQWMsbUJBQW1CLEVBQUUsd0JBQXdCLHFFQUFxRSw2RUFBNkUscUZBQXFGLGlDQUFpQyxpQkFBaUIsc0dBQXNHLEdBQUcsaUJBQWlCLDZDQUE2QyxRQUFRLCtCQUErQiw4Q0FBOEMsTUFBTSxnREFBZ0Qsa0ZBQWtGLE9BQU8sb01BQW9NLCtCQUErQixpQ0FBaUMsc0JBQXNCLCtCQUErQixzQkFBc0IsNkJBQTZCLEdBQUcsR0FBRyxvQkFBb0IsNkVBQTZFLHFGQUFxRix1Q0FBdUMsaUJBQWlCLGdIQUFnSCxHQUFHLGlCQUFpQiwrRUFBK0UsMkNBQTJDLHNCQUFzQiw2Q0FBNkMsc0JBQXNCLHFDQUFxQyxzQkFBc0IsdUNBQXVDLEdBQUcsR0FBRyxvQkFBb0IsNkVBQTZFLHFGQUFxRiwrQkFBK0IsaUJBQWlCLDJHQUEyRyxHQUFHLGdCQUFnQixvRkFBb0YsNEJBQTRCLDBCQUEwQixtQkFBbUIsSUFBSSxFQUFFLEdBQUcsb0JBQW9CLDZFQUE2RSxxRkFBcUYsK0RBQStELGlCQUFpQixvSUFBb0ksR0FBRyxtQkFBbUIsOEJBQThCLHFLQUFxSyx5Q0FBeUMsY0FBYyxFQUFFLDBCQUEwQixvQkFBb0IsZ0JBQWdCLEdBQUcsRUFBRSxHQUFHLG1CQUFtQiw0RUFBNEUscUZBQXFGLDhDQUE4QyxrQkFBa0Isa0lBQWtJLGdFQUFnRSxnQ0FBZ0MsdURBQXVELFlBQVksR0FBRyxFQUFFLG9CQUFvQiw2RUFBNkUscUZBQXFGLHNEQUFzRCxpQkFBaUIsOElBQThJLEdBQUcsbUJBQW1CLDZCQUE2QiwrUEFBK1AsYUFBYSw0QkFBNEIsbUJBQW1CLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyx5REFBeUQsNkVBQTZFLHFGQUFxRix3REFBd0QsaUJBQWlCLG1NQUFtTSxHQUFHLG1CQUFtQiw2QkFBNkIsdVRBQXVULGFBQWEsNEJBQTRCLHVCQUF1QixFQUFFLEVBQUUsR0FBRyxRQUFRLEVBQUUsZ0JBQWdCLGNBQWMsdUZBQXVGLDZCQUE2QiwyQkFBMkIsNkpBQTZKLGlDQUFpQyw0REFBNEQsS0FBSyw4RUFBOEUsaUJBQWlCLHlCQUF5QixLQUFLLDhFQUE4RSxtQkFBbUIsS0FBSyxtQ0FBbUMsVUFBVSxxQ0FBcUMsT0FBTyxZQUFZLG9DQUFvQyxPQUFPLEtBQUssMEZBQTBGLDJKQUEySix3QkFBd0IsMENBQTBDLE9BQU8sS0FBSyxnRUFBZ0UsS0FBSyx3QkFBd0IsSUFBSSxxQkFBcUIsU0FBUyxHQUFHLGNBQWMsNkJBQTZCLDJCQUEyQix1RUFBdUUsbUJBQW1CLHVFQUF1RSxHQUFHLEVBQUUsZ0JBQWdCLGNBQWMsb0VBQW9FLG9CQUFvQiw2QkFBNkIsZUFBZSxtQkFBbUIsb0RBQW9ELHVCQUF1QixvQkFBb0IsbUNBQW1DLHlCQUF5QixPQUFPLG1DQUFtQyx5QkFBeUIsb0JBQW9CLE9BQU8sbUNBQW1DLDJCQUEyQixvQkFBb0IsT0FBTyxtQ0FBbUMseUJBQXlCLG9CQUFvQixPQUFPLEtBQUssNkRBQTZELG9CQUFvQiw2QkFBNkIsd0JBQXdCLHVDQUF1QyxvREFBb0QsaUJBQWlCLGdEQUFnRCxPQUFPLGtCQUFrQixnREFBZ0QsT0FBTyxLQUFLLDJFQUEyRSw4Q0FBOEMsS0FBSyx3RUFBd0UsNEJBQTRCLDZCQUE2QixvQ0FBb0MsZ0NBQWdDLHVCQUF1QixrQ0FBa0MsS0FBSyxvRUFBb0UsNEJBQTRCLDZCQUE2QixtQ0FBbUMsZ0NBQWdDLGtDQUFrQyxLQUFLLHlNQUF5TSx1QkFBdUIsOEJBQThCLDBCQUEwQixzQkFBc0IsS0FBSyxnRUFBZ0UsS0FBSyx3QkFBd0IsSUFBSSxxQkFBcUIsU0FBUyxHQUFHLGVBQWUsdURBQXVELDRDQUE0QyxnRkFBZ0YsWUFBWSxvQkFBb0IsaURBQWlELElBQUksRUFBRSxFQUFFLDhCQUE4Qix3REFBd0QsZ0NBQWdDLGdFQUFnRSxFQUFFLDZCQUE2QixNQUFNLHNEQUFzRCxvREFBb0QsNkJBQTZCLDRCQUE0QiwrRUFBK0Usb0JBQW9CLDJFQUEyRSxHQUFHLEVBQUUsNEJBQTRCLDZEQUE2RCwwQkFBMEIsMklBQTJJLFlBQVksZ0NBQWdDLHdCQUF3Qix5QkFBeUIsZUFBZSxFQUFFLEVBQUUsRUFBRSxjQUFjLGNBQWMscURBQXFELG9CQUFvQix5QkFBeUIsb0RBQW9ELDhDQUE4Qyx1QkFBdUIsS0FBSywrQ0FBK0Msb0JBQW9CLDBCQUEwQixvQkFBb0IscURBQXFELGlDQUFpQyxlQUFlLEtBQUssNkNBQTZDLDRCQUE0Qiw2QkFBNkIseUJBQXlCLDZKQUE2SixpQ0FBaUMsNERBQTRELHFCQUFxQixLQUFLLG1EQUFtRCxtQkFBbUIsS0FBSywrQ0FBK0MsNEJBQTRCLDZCQUE2Qix5Q0FBeUMsNkpBQTZKLGlDQUFpQyw0REFBNEQscUJBQXFCLEtBQUssZ0RBQWdELG9CQUFvQixLQUFLLDZDQUE2Qyw2QkFBNkIsMkJBQTJCLDZKQUE2SixpQ0FBaUMsNERBQTRELHlCQUF5QixLQUFLLHdEQUF3RCx1QkFBdUIsS0FBSywrQ0FBK0MsbUJBQW1CLEtBQUssK0NBQStDLG1CQUFtQixLQUFLLCtDQUErQyxtQkFBbUIsS0FBSywwQ0FBMEMseUJBQXlCLHNCQUFzQixLQUFLLCtDQUErQyxvQkFBb0IsOEJBQThCLDBCQUEwQiw0QkFBNEIsNkJBQTZCLHlDQUF5Qyw2SkFBNkosaUNBQWlDLDREQUE0RCxLQUFLLG9FQUFvRSxpQkFBaUIsb0JBQW9CLDBCQUEwQix5QkFBeUIsdUJBQXVCLHlCQUF5QixLQUFLLDZDQUE2Qyw2QkFBNkIsbUJBQW1CLDJCQUEyQiw2SkFBNkosaUNBQWlDLDREQUE0RCxLQUFLLG1DQUFtQyxVQUFVLHFDQUFxQyxPQUFPLFlBQVksb0NBQW9DLE9BQU8sS0FBSywwRkFBMEYsbVJBQW1SLHdCQUF3QiwwQ0FBMEMsT0FBTyxLQUFLLGdFQUFnRSxLQUFLLHdCQUF3QixJQUFJLHFCQUFxQixTQUFTLEdBQUcsY0FBYyw2QkFBNkIsNEJBQTRCLGdFQUFnRSxzRUFBc0UseUNBQXlDLG1CQUFtQix3RkFBd0YsR0FBRyxvQkFBb0IsdUVBQXVFLG9GQUFvRixtQkFBbUIsb0ZBQW9GLG1CQUFtQixvRkFBb0YsR0FBRyxHQUFHLG1CQUFtQixpRUFBaUUsNkRBQTZELCtFQUErRSw2RUFBNkUsR0FBRyxzQkFBc0Isc0tBQXNLLHlDQUF5QyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLGlCQUFpQixvQ0FBb0MsdUJBQXVCLElBQUksY0FBYyxTQUFTLDJCQUEyQixJQUFJLHdCQUF3QixTQUFTLEtBQUssT0FBTyx5Q0FBeUMsbUJBQW1CLHlDQUF5QyxrREFBa0QsV0FBVyxjQUFjLDhEQUE4RCxvQkFBb0IsMEJBQTBCLDhDQUE4Qyx5Q0FBeUMsOENBQThDLHNDQUFzQyxLQUFLLHdEQUF3RCxtQkFBbUIsb0JBQW9CLDBCQUEwQiw4QkFBOEIsS0FBSyxvRUFBb0UsK0JBQStCLGlFQUFpRSxLQUFLLG1FQUFtRSwrQkFBK0IsaUVBQWlFLEtBQUssOENBQThDLGlCQUFpQixtQkFBbUIsd0NBQXdDLEtBQUssZ0VBQWdFLEtBQUssd0JBQXdCLElBQUkscUJBQXFCLFNBQVMsR0FBRyxlQUFlLDRDQUE0QyxrQkFBa0IsNkJBQTZCLG1CQUFtQix1RkFBdUYsWUFBWSxtQkFBbUIsSUFBSSxnQkFBZ0IsdURBQXVELE9BQU8sU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxjQUFjLFVBQVUscUJBQXFCLE1BQU0scUNBQXFDLG9EQUFvRCxpR0FBaUcsdUZBQXVGLGtCQUFrQiw4SkFBOEosMkJBQTJCLElBQXFDLGlDQUFpQyxNQUFNLG9CQUFvQixxQkFBcUIsYUFBYSx3QkFBd0IscUJBQXFCLFlBQVksZ0JBQWdCLDBFQUEwRSx3R0FBd0csWUFBWSxJQUFJLGNBQWMsbUJBQW1CLFlBQVksd0RBQXdELEtBQUssdUJBQXVCLEtBQUssa0hBQWtILHlDQUF5QyxrQkFBa0IsTUFBTSx5QkFBeUIsb0JBQW9CLDhCQUE4QixTQUFTLGtDQUFrQyxTQUFTLDBFQUEwRSxJQUFJLFNBQVMseUNBQXlDLGFBQWEsTUFBTSwyQkFBMkIsaUJBQWlCLE1BQU0sb0JBQW9CLDJCQUEyQixNQUFNLCtCQUErQixTQUFTLGNBQWMsU0FBUyxZQUFZLFFBQVEsTUFBTSxxQkFBcUIsT0FBTyxrQ0FBa0Msa0JBQWtCLGdCQUFnQixxQkFBcUIsUUFBUSxxQkFBcUIsWUFBWSxtQkFBbUIsS0FBSyx3Q0FBd0Msa0JBQWtCLGdIQUFnSCx1REFBdUQsMEJBQTBCLGFBQWEsRUFBRSxTQUFTLEdBQUcsb0JBQW9CLFdBQVcsZ0hBQWdILHFCQUFxQixpQ0FBaUMsc0NBQXNDLGtCQUFrQixTQUFTLGlDQUFpQyxnRUFBZ0UsSUFBSSxZQUFZLHVEQUF1RCxNQUFrQyw4REFBOEQsb0NBQW9DLEtBQUssMkZBQTJGLHlFQUF5RSxrQkFBa0IsRUFBRSxZQUFZLHVCQUF1QixpQ0FBaUMsbUJBQW1CLGNBQWMsdUJBQXVCLGNBQWMsd0JBQXdCLFVBQVUsRUFBRSxJQUFJLE1BQU0sd0JBQXdCLDJFQUEyRSwyRkFBMkYsYUFBYSx1S0FBdUsscUJBQXFCLEVBQUUsbUJBQW1CLDBDQUEwQyxzQkFBc0IsK0ZBQStGLGFBQWEsdUtBQXVLLDRCQUE0QixxQkFBcUIsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLGNBQWMsMkVBQTJFLGNBQWMsb0JBQW9CLDZCQUE2Qix1QkFBdUIsb0JBQW9CLG9CQUFvQixLQUFLLGdFQUFnRSxLQUFLLHdCQUF3QixJQUFJLHFCQUFxQixTQUFTLEdBQUcsZUFBZSxxR0FBcUcsd0JBQXdCLHNGQUFzRix1RUFBdUUsMEdBQTBHLDJEQUEyRCxZQUFZLG1CQUFtQixrQkFBa0IsR0FBRyxnQkFBZ0Isb0RBQW9ELFlBQVksRUFBRSxHQUFHLGdCQUFnQixlQUFlLEdBQUcsS0FBSyxFQUFFLGdCQUFnQixlQUFlLFFBQVEscUNBQXFDLFlBQVksbUJBQW1CLEtBQUssd0NBQXdDLGtCQUFrQixnSEFBZ0gsdURBQXVELDBCQUEwQixVQUFVLGlEQUFpRCxrREFBa0QsU0FBUyxFQUFFLFNBQVMsRUFBRSwwRkFBMEYsU0FBUywyQkFBMkIsaXhCQUFpeEIsRUFBRSxnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxNQUFNLGNBQWMsa0VBQWtFLG9CQUFvQixjQUFjLG9CQUFvQixvQkFBb0IsS0FBSyw2REFBNkQsb0JBQW9CLDZCQUE2QiwwQkFBMEIsOEJBQThCLGNBQWMscURBQXFELHlCQUF5QixLQUFLLDBEQUEwRCwwQkFBMEIsbUJBQW1CLG9EQUFvRCx5QkFBeUIsc0RBQXNELG9CQUFvQiwwQkFBMEIsOEJBQThCLEtBQUssMkRBQTJELG9DQUFvQyxzQkFBc0IsdUJBQXVCLHlDQUF5QyxLQUFLLDhEQUE4RCxtQ0FBbUMsc0JBQXNCLHlDQUF5QyxLQUFLLGdFQUFnRSxLQUFLLHdCQUF3QixJQUFJLHFCQUFxQixTQUFTLEdBQUcsY0FBYyx1QkFBdUIsNEVBQTRFLG9GQUFvRiw2RUFBNkUsbUJBQW1CLEVBQUUsa0JBQWtCLGtGQUFrRixpQkFBaUIsOEdBQThHLEdBQUcsRUFBRSxFQUFFLGdCQUFnQixpQkFBaUIsb0NBQW9DLHVCQUF1QixJQUFJLGNBQWMsU0FBUyxjQUFjLDZFQUE2RSxLQUFLLHdCQUF3QixJQUFJLHFCQUFxQixTQUFTLEdBQUcsZUFBZSw2SEFBNkgsdUJBQXVCLHNCQUFzQixnQkFBZ0IsNEZBQTRGLEVBQUUsZUFBZSw4R0FBOEcsMkJBQTJCLDhJQUE4SSw0RUFBNEUsd0JBQXdCLDRGQUE0RixFQUFFLHdCQUF3QixzR0FBc0csdUNBQXVDLEVBQUUsUUFBUSw0REFBNEQsd0RBQXdELDZCQUE2Qix3QkFBd0IseUJBQXlCLFFBQVEsa0JBQWtCLEdBQUcsaUJBQWlCLEVBQUUsZUFBZSwwREFBMEQsNkJBQTZCLG1CQUFtQix1RkFBdUYsWUFBWSxtQkFBbUIsSUFBSSxnQkFBZ0IsdURBQXVELE9BQU8sU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxjQUFjLFVBQVUscUJBQXFCLE1BQU0scUNBQXFDLG9EQUFvRCxpR0FBaUcsdUZBQXVGLGtCQUFrQiw4SkFBOEoscURBQXFELDhCQUE4Qix1QkFBdUIsSUFBSSxpQ0FBaUMsZ0NBQWdDLGdFQUFnRSxFQUFFLDZCQUE2QixNQUFNLDZCQUE2QixzRUFBc0UsOERBQThELDRCQUE0QiwwREFBMEQsYUFBYSxzQkFBc0IsR0FBRyxFQUFFLGVBQWUsb0VBQW9FLGtDQUFrQyxNQUFNLG9CQUFvQiw2RUFBNkUsVUFBVSxFQUFFLEVBQUUsZ0JBQWdCLGNBQWMsNERBQTRELG9CQUFvQixjQUFjLG9CQUFvQixLQUFLLGdFQUFnRSxLQUFLLHdCQUF3QixJQUFJLHFCQUFxQixTQUFTLEdBQUcsZUFBZSw4RkFBOEYsbURBQW1ELCtIQUErSCx3QkFBd0IsMEVBQTBFLHlEQUF5RCxnQkFBZ0IseUdBQXlHLEdBQUcsRUFBRSxtQkFBbUIsTUFBMkMsQ0FBQyxDQUFpRyxZQUFZLGFBQWEsZUFBZSw0QkFBNEIsb0JBQW9CLDZCQUE2QixFQUFFLGVBQWUsNEJBQTRCLG9CQUFvQixvQkFBb0IsRUFBRSxlQUFlLDRNQUE0TSxVQUFVLG1DQUFtQyxzRUFBc0UsRUFBRSxnQ0FBZ0Msb0JBQW9CLEVBQUUsaUNBQWlDLDRFQUE0RSxFQUFFLHFCQUFxQixlQUFlLFFBQVEscUNBQXFDLFlBQVksbUJBQW1CLEtBQUssd0NBQXdDLGtCQUFrQixnSEFBZ0gsdURBQXVELDBCQUEwQixVQUFVLGlEQUFpRCxrREFBa0QsU0FBUyxFQUFFLFNBQVMsRUFBRSwwRkFBMEYsU0FBUywyQkFBMkIsZ1pBQWdaLEVBQUUsZ0hBQWdILHFCQUFxQixpQ0FBaUMsc0NBQXNDLGtCQUFrQixTQUFTLGlDQUFpQyxnRUFBZ0UsTUFBTSxpQkFBaUIsb0NBQW9DLHVCQUF1QixJQUFJLGNBQWMsU0FBUyxlQUFlLFlBQVksbUJBQW1CLEtBQUssd0NBQXdDLGtCQUFrQixnSEFBZ0gsdURBQXVELDBCQUEwQixVQUFVLGlEQUFpRCxrREFBa0QsU0FBUyxFQUFFLFNBQVMsaUJBQWlCLHFCQUFxQixnSEFBZ0gscUJBQXFCLGlDQUFpQyxzQ0FBc0Msa0JBQWtCLFNBQVMsaUNBQWlDLGdFQUFnRSxJQUFJLGlCQUFpQixvQkFBb0Isd0JBQXdCLG9CQUFvQixZQUFZLGtCQUFrQixRQUFRLFdBQVcsd0NBQXdDLFNBQVMsTUFBTSxpQ0FBaUMsc0NBQXNDLFFBQVEsV0FBVyw0RkFBNEYsU0FBUyxpQkFBaUIsbUJBQW1CLDZCQUE2QixtQkFBbUIsdUZBQXVGLFlBQVksbUJBQW1CLElBQUksZ0JBQWdCLDJEQUEyRCxPQUFPLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsY0FBYyxVQUFVLHFCQUFxQixNQUFNLHFDQUFxQyxvREFBb0QsaUdBQWlHLHVGQUF1RixrQkFBa0IsOEpBQThKLEdBQUcsY0FBYyxtREFBbUQsNkRBQTZELHFDQUFxQyw0Q0FBNEMsNERBQTRELGtFQUFrRSxnRUFBZ0UsbUVBQW1FLGlFQUFpRSxxREFBcUQseURBQXlELDZEQUE2RCxvQ0FBb0MsZUFBZSxhQUFhLG9DQUFvQyw0QkFBNEIsa0NBQWtDLHNDQUFzQyxpQ0FBaUMsYUFBYSxpQ0FBaUMsa0RBQWtELGlDQUFpQyxrQ0FBa0MsNEJBQTRCLGtDQUFrQyxpQ0FBaUMsNkNBQTZDLDhMQUE4TCwwQ0FBMEMsaURBQWlELGdDQUFnQyw4QkFBOEIsdUJBQXVCLCtCQUErQixnRUFBZ0UsZ1FBQWdRLDhDQUE4Qyw0QkFBNEIsZUFBZSxvREFBb0QsNEJBQTRCLGVBQWUsMkVBQTJFLDJDQUEyQyxvQ0FBb0MsZUFBZSxzQ0FBc0Msb0NBQW9DLDhDQUE4QyxvQ0FBb0MsNkRBQTZELHNDQUFzQyxxQ0FBcUMsK0NBQStDLHlDQUF5QyxtQkFBbUIsNkJBQTZCLGlFQUFpRSxtQkFBbUIsaUJBQWlCLGVBQWUsZ0ZBQWdGLHlCQUF5QixlQUFlLHVCQUF1Qiw4QkFBOEIsZUFBZSxhQUFhLG9EQUFvRCx5Q0FBeUMsYUFBYSxtRUFBbUUseUNBQXlDLG1DQUFtQyxhQUFhLDBCQUEwQiwwQkFBMEIsbUNBQW1DLG9DQUFvQywrQkFBK0IsOERBQThELGlDQUFpQyxpQ0FBaUMsdUJBQXVCLHlCQUF5Qix1QkFBdUIsbUNBQW1DLG9EQUFvRCxzREFBc0QsYUFBYSw2QkFBNkIsa0NBQWtDLDRCQUE0Qix1QkFBdUIsa0NBQWtDLGdDQUFnQyxpQ0FBaUMscUNBQXFDLGdDQUFnQyxpREFBaUQsZ0VBQWdFLGlEQUFpRCwyREFBMkQsZUFBZSwrQ0FBK0MsNkRBQTZELGVBQWUsOEJBQThCLG9DQUFvQyxlQUFlLGFBQWEsa0NBQWtDLHdDQUF3QywyQkFBMkIsaUNBQWlDLDJCQUEyQiw0QkFBNEIsdUJBQXVCLGtDQUFrQyx3QkFBd0IsMENBQTBDLCtCQUErQix5QkFBeUIsa0NBQWtDLGlDQUFpQywyQkFBMkIsZUFBZSxhQUFhLHNDQUFzQyxvQ0FBb0MscUNBQXFDLGlEQUFpRCxnRUFBZ0UseUJBQXlCLDJEQUEyRCxlQUFlLGFBQWEsNEJBQTRCLDBCQUEwQixvQ0FBb0MscUNBQXFDLGFBQWEsZ0NBQWdDLHNDQUFzQyx1Q0FBdUMsNEJBQTRCLDRCQUE0QixrQ0FBa0MsaURBQWlELHdFQUF3RSxpQ0FBaUMsMkJBQTJCLGVBQWUseUJBQXlCLDREQUE0RCxlQUFlLHFCQUFxQiwrQkFBK0Isc0NBQXNDLHVDQUF1QyxlQUFlLGFBQWEsNkNBQTZDLDRCQUE0Qix5Q0FBeUMsaURBQWlELHlDQUF5QyxvRkFBb0YsMENBQTBDLGlCQUFpQixlQUFlLHFCQUFxQixpQ0FBaUMsZUFBZSwwQ0FBMEMsZ0VBQWdFLGVBQWUsMkNBQTJDLCtEQUErRCxlQUFlLGFBQWEsMENBQTBDLG9DQUFvQyxzQ0FBc0MsK0RBQStELGVBQWUsYUFBYSxzQkFBc0IseURBQXlELGFBQWEsc0JBQXNCLHNEQUFzRCxvQ0FBb0MsYUFBYSx1QkFBdUIsbUNBQW1DLGFBQWEsaUNBQWlDLGtCQUFrQiwyQkFBMkIsa0NBQWtDLDJDQUEyQyxlQUFlLG9CQUFvQiwyQkFBMkIsa0NBQWtDLHlDQUF5QyxlQUFlLGFBQWEsa0NBQWtDLGtCQUFrQiwyQkFBMkIsa0NBQWtDLHlDQUF5QyxlQUFlLG9CQUFvQiwyQkFBMkIsNkNBQTZDLGtDQUFrQyxlQUFlLGFBQWEsZ0NBQWdDLG9DQUFvQyx5Q0FBeUMsZUFBZSxxQ0FBcUMscUNBQXFDLGVBQWUscUNBQXFDLHFDQUFxQyxlQUFlLHNDQUFzQyx3Q0FBd0MsZUFBZSxhQUFhLGdDQUFnQyxvQ0FBb0MseUNBQXlDLGVBQWUscUNBQXFDLHFDQUFxQyxlQUFlLHFDQUFxQyxxQ0FBcUMsZUFBZSxzQ0FBc0Msd0NBQXdDLGVBQWUsYUFBYSwrQ0FBK0MseUhBQXlILG1EQUFtRCxlQUFlLGFBQWEsd0VBQXdFLEtBQUssd0JBQXdCLElBQUkscUJBQXFCLFNBQVMsR0FBRyxlQUFlLGliQUFpYixpQ0FBaUMsS0FBSyx3QkFBd0IsaUNBQWlDLHNIQUFzSCw4QkFBOEIsa0JBQWtCLG1CQUFtQixvRkFBb0YscUJBQXFCLDRCQUE0Qiw4Q0FBOEMsK0RBQStELEtBQUssdUJBQXVCLDRCQUE0QixFQUFFLHdCQUF3QixnREFBZ0QsaUdBQWlHLGdEQUFnRCxFQUFFLGdCQUFnQixzREFBc0QsMEJBQTBCLHlDQUF5QyxvRkFBb0YsR0FBRyxHQUFHLDBCQUEwQixrRkFBa0YsTUFBTSw2Q0FBNkMsd0JBQXdCLGdCQUFnQixFQUFFLEdBQUcsR0FBRyxFQUFFLG1CQUFtQiwrQkFBK0IsR0FBRyxFQUFFLGVBQWUsNERBQTRELCtCQUErQixLQUFLLHdEQUF3RCwwREFBMEQsbUJBQW1CLCtEQUErRCxHQUFHLEdBQUcsZUFBZSxvRUFBb0Usd0JBQXdCLDRHQUE0RywyREFBMkQsdU5BQXVOLG9CQUFvQix1S0FBdUssR0FBRyxxQkFBcUIsdUNBQXVDLHVKQUF1SixZQUFZLG9CQUFvQiw4Q0FBOEMsb0JBQW9CLHVDQUF1QyxHQUFHLCtCQUErQixzSkFBc0osWUFBWSxvQkFBb0IsdUNBQXVDLEdBQUcscUJBQXFCLGlEQUFpRCx3Q0FBd0Msb0JBQW9CLG9DQUFvQyxHQUFHLEdBQUcsR0FBRyxFQUFFLGlCQUFpQixvQ0FBb0MsdUJBQXVCLElBQUksY0FBYyxTQUFTLG1CQUFtQix5Q0FBeUMsa0RBQWtELFdBQVcsaUJBQWlCLG1CQUFtQiw2QkFBNkIsbUJBQW1CLHVGQUF1RixZQUFZLG1CQUFtQixJQUFJLGdCQUFnQiwyREFBMkQsT0FBTyxTQUFTLFNBQVMsUUFBUSxJQUFJLDhCQUE4QixRQUFRLGNBQWMsVUFBVSxxQkFBcUIsTUFBTSxxQ0FBcUMsb0RBQW9ELGlHQUFpRyx1RkFBdUYsa0JBQWtCLDhKQUE4SixHQUFHLGVBQWUsNEpBQTRKLG9CQUFvQixvQ0FBb0MseUdBQXlHLDhKQUE4SixrQ0FBa0MsYUFBYSxxREFBcUQsR0FBRywwQkFBMEIsNEJBQTRCLHdCQUF3Qix1UEFBdVAsR0FBRyxPQUFPLEVBQUUsK0JBQStCLEdBQUcsT0FBTyxLQUFLLE9BQU8sRUFBRSxvR0FBb0csRUFBRSxFQUFFLEVBQUUsZUFBZSxRQUFRLHFDQUFxQyxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsVUFBVSxpREFBaUQsa0RBQWtELFNBQVMsRUFBRSxTQUFTLEVBQUUsMEZBQTBGLFNBQVMsMkJBQTJCLGdRQUFnUSxFQUFFLGdIQUFnSCxxQkFBcUIsaUNBQWlDLHNDQUFzQyxrQkFBa0IsU0FBUyxpQ0FBaUMsZ0VBQWdFLE1BQU0sZUFBZSxRQUFRLHFDQUFxQyxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsVUFBVSxpREFBaUQsa0RBQWtELFNBQVMsRUFBRSxTQUFTLEVBQUUsMEZBQTBGLFNBQVMsMkJBQTJCLHVSQUF1UixFQUFFLGdIQUFnSCxxQkFBcUIsaUNBQWlDLHNDQUFzQyxrQkFBa0IsU0FBUyxpQ0FBaUMsZ0VBQWdFLE1BQU0saUJBQWlCLG9DQUFvQyx1QkFBdUIsSUFBSSxjQUFjLFNBQVMsZ0ZBQWdGLHFEQUFxRCxPQUFPLGtHQUFrRyxlQUFlLCtCQUErQixrQkFBa0IsSUFBSSxzQkFBc0Isd0xBQXdMLCtCQUErQixZQUFZLFNBQVMseUNBQXlDLGdCQUFnQix1SUFBdUksNkJBQTZCLG1CQUFtQix1RkFBdUYsWUFBWSxtQkFBbUIsSUFBSSxnQkFBZ0IsdURBQXVELE9BQU8sU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxjQUFjLFVBQVUscUJBQXFCLE1BQU0scUNBQXFDLG9EQUFvRCxpR0FBaUcsdUZBQXVGLGtCQUFrQiw4SkFBOEosa0JBQWtCLHVDQUF1QyxpQkFBaUIsd0JBQXdCLFdBQVcsTUFBTSw0QkFBNEIsWUFBWSxtQkFBbUIsS0FBSyx3Q0FBd0Msa0JBQWtCLGdIQUFnSCx1REFBdUQsMEJBQTBCLFVBQVUsaURBQWlELGtEQUFrRCxTQUFTLEVBQUUsU0FBUyxHQUFHLFNBQVMsOENBQThDLGdIQUFnSCxxQkFBcUIsaUNBQWlDLHNDQUFzQyxrQkFBa0IsU0FBUyxpQ0FBaUMsZ0VBQWdFLDJCQUEyQix3R0FBd0csMERBQTBELCtDQUErQywyQ0FBMkMsT0FBTyw0SEFBNEgsWUFBWSxFQUFFLGVBQWUsMkJBQTJCLHFFQUFxRSxTQUFTLElBQUksaUNBQW1CLG1SQUFtUixpQkFBaUIsb0NBQW9DLHVCQUF1QixJQUFJLGNBQWMsU0FBUyxnSkFBZ0osbUJBQW1CLCtKQUErSiw4QkFBOEIsa0JBQWtCLDZCQUE2QixtQkFBbUIsdUZBQXVGLFlBQVksbUJBQW1CLElBQUksZ0JBQWdCLHVEQUF1RCxPQUFPLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsY0FBYyxVQUFVLHFCQUFxQixNQUFNLHFDQUFxQyxvREFBb0QsaUdBQWlHLHVGQUF1RixrQkFBa0IsOEpBQThKLGtCQUFrQixvQ0FBb0MsY0FBYyw2Q0FBNkMsR0FBRyw0SkFBNEosR0FBRyxzRUFBc0UsVUFBVSxvQ0FBb0Msb0NBQW9DLG9DQUFvQyxvQ0FBb0MscUJBQXFCLGtCQUFrQix3REFBd0QsNkJBQTZCLDJCQUEyQixtR0FBbUcsaUNBQWlDLEtBQUssK0dBQStHLGdHQUFnRyxvTUFBb00sY0FBYyw4RkFBOEYsNkRBQTZELGtFQUFrRSxpQkFBaUIsSUFBSSxrRkFBa0YsdUJBQXVCLDBFQUEwRSwrT0FBK08sR0FBRyxFQUFFLDhCQUE4QixxREFBcUQsVUFBVSxtQkFBbUIsa0ZBQWtGLCtEQUErRCxPQUFPLG9EQUFvRCxvQkFBb0Isa0ZBQWtGLGdFQUFnRSxPQUFPLG1EQUFtRCxxSEFBcUgsT0FBTywrQ0FBK0Msc0VBQXNFLE9BQU8sNkVBQTZFLHNFQUFzRSxPQUFPLDhFQUE4RSwwQkFBMEIsNEdBQTRHLHNCQUFzQixpQkFBaUIsb0NBQW9DLHVCQUF1QixJQUFJLGNBQWMsU0FBUyxtQkFBbUIseUNBQXlDLGtEQUFrRCxXQUFXLGlCQUFpQixtQkFBbUIsNkJBQTZCLG1CQUFtQix1RkFBdUYsWUFBWSxtQkFBbUIsSUFBSSxnQkFBZ0IsMkRBQTJELE9BQU8sU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxjQUFjLFVBQVUscUJBQXFCLE1BQU0scUNBQXFDLG9EQUFvRCxpR0FBaUcsdUZBQXVGLGtCQUFrQiw4SkFBOEosR0FBRyxjQUFjLDJKQUEySixxQkFBcUIsa0NBQWtDLEtBQUssbURBQW1ELGNBQWMsb0JBQW9CLDZCQUE2QixxQkFBcUIsdUNBQXVDLGdEQUFnRCxjQUFjLHFCQUFxQixLQUFLLDRDQUE0QyxtQkFBbUIsbUJBQW1CLG9CQUFvQixLQUFLLHFEQUFxRCxpQkFBaUIseUJBQXlCLEtBQUssNERBQTRELGlCQUFpQiwwQkFBMEIsS0FBSyw4Q0FBOEMsZ0RBQWdELG1CQUFtQixLQUFLLDJDQUEyQywwQ0FBMEMsb0JBQW9CLDZCQUE2Qiw4Q0FBOEMsbUNBQW1DLDhDQUE4Qyx1Q0FBdUMsbUNBQW1DLHlCQUF5QixrQkFBa0IsbUJBQW1CLHVCQUF1Qix3QkFBd0IsS0FBSywyQ0FBMkMsb0JBQW9CLHFDQUFxQywwQkFBMEIscURBQXFELEtBQUsscURBQXFELG9CQUFvQiwwQkFBMEIsbUJBQW1CLGVBQWUsS0FBSywrQ0FBK0Msb0JBQW9CLDBCQUEwQixtQ0FBbUMseUNBQXlDLHdCQUF3QixzQkFBc0IsdUJBQXVCLDhDQUE4QyxpQkFBaUIsZ0RBQWdELE9BQU8sa0JBQWtCLGdEQUFnRCxPQUFPLEtBQUssc0RBQXNELG9DQUFvQyw4Q0FBOEMsS0FBSyw0REFBNEQsb0JBQW9CLDBCQUEwQiw4QkFBOEIsdUJBQXVCLDZDQUE2QyxrQ0FBa0Msc0JBQXNCLHlDQUF5Qyx1QkFBdUIsa0JBQWtCLG1CQUFtQix1QkFBdUIsS0FBSywrREFBK0Qsb0JBQW9CLDBCQUEwQixlQUFlLHlCQUF5QixLQUFLLHlEQUF5RCw4QkFBOEIsbUJBQW1CLHNCQUFzQixvQkFBb0IsMEJBQTBCLDhCQUE4QixtQkFBbUIsb0NBQW9DLHlCQUF5QixtREFBbUQsaUNBQWlDLHVDQUF1QyxpQkFBaUIsZ0RBQWdELHFDQUFxQyxPQUFPLGtCQUFrQixnREFBZ0QsT0FBTyxLQUFLLHFEQUFxRCxtQkFBbUIsd0JBQXdCLGFBQWEscUJBQXFCLDhCQUE4Qiw4R0FBOEcsT0FBTyxLQUFLLGdFQUFnRSxLQUFLLHdCQUF3QixJQUFJLHFCQUFxQixTQUFTLEdBQUcsZUFBZSxpTUFBaU0sbUVBQW1FLGdDQUFnQyxtQkFBbUIsU0FBUywyQ0FBMkMsNEZBQTRGLHVJQUF1SSw4RkFBOEYsdUVBQXVFLEdBQUcsT0FBTyxLQUFLLE9BQU8sR0FBRyxvQkFBb0IsT0FBTywyRUFBMkUseUJBQXlCLHdEQUF3RCxTQUFTLDBKQUEwSiwwREFBMEQsZ0JBQWdCLDZFQUE2RSxxREFBcUQsNkJBQTZCLDBCQUEwQixFQUFFLDZJQUE2SSx5QkFBeUIsa01BQWtNLHVFQUF1RSx5RUFBeUUsNkdBQTZHLGdGQUFnRix3RUFBd0UsbUJBQW1CLDBDQUEwQyxtRUFBbUUsUUFBUSxzQkFBc0IsdUVBQXVFLGtCQUFrQix1QkFBdUIsc0JBQXNCLDBFQUEwRSxxQkFBcUIscUJBQXFCLEdBQUcsb0JBQW9CLHlGQUF5Rix3RUFBd0UsY0FBYyxTQUFTLEtBQUssT0FBTyxFQUFFLDBCQUEwQixtQkFBbUIsZ0JBQWdCLG1CQUFtQixFQUFFLHNCQUFzQixzRkFBc0YsbUJBQW1CLEVBQUUsR0FBRyxHQUFHLEVBQUUsZ0JBQWdCLG1FQUFtRSxtSUFBbUksR0FBRyx1Q0FBdUMseUNBQXlDLCtCQUErQixHQUFHLG9DQUFvQyx5Q0FBeUMsa0dBQWtHLEVBQUUsR0FBRyxnQkFBZ0IsMkZBQTJGLEdBQUcsNkJBQTZCLHdCQUF3QixnQkFBZ0IsZ0JBQWdCLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGdCQUFnQixpQkFBaUIsZ0JBQWdCLHFCQUFxQixnQkFBZ0Isc0JBQXNCLGdCQUFnQix3QkFBd0IsZ0JBQWdCLHlCQUF5QixHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxnQkFBZ0IsY0FBYyxzakJBQXNqQixLQUFLLHdCQUF3QixJQUFJLHFCQUFxQixTQUFTLEdBQUcsY0FBYyx5QkFBeUIsZ0RBQWdELHFCQUFxQixhQUFhLDhCQUE4QiwrQkFBK0IsT0FBTyxLQUFLLHVDQUF1Qyw4Q0FBOEMsMEJBQTBCLEtBQUssNERBQTRELHNCQUFzQixLQUFLLDZHQUE2RyxtQ0FBbUMsS0FBSyxzREFBc0QscUNBQXFDLEtBQUssbURBQW1ELHVCQUF1Qix5QkFBeUIseUNBQXlDLEtBQUssMkRBQTJELHVCQUF1QixLQUFLLHFEQUFxRCxtQkFBbUIsS0FBSyxzQ0FBc0Msd0JBQXdCLHFCQUFxQiw2QkFBNkIsMEJBQTBCLGdDQUFnQyw2QkFBNkIsNEJBQTRCLHlCQUF5Qix5Q0FBeUMsS0FBSyxxQ0FBcUMsb0JBQW9CLDBCQUEwQixlQUFlLDJCQUEyQiwrQ0FBK0Msc0NBQXNDLGdDQUFnQyx1QkFBdUIsa0NBQWtDLGFBQWEsZ0NBQWdDLGlDQUFpQyxPQUFPLEtBQUssNERBQTRELG9CQUFvQiwwQkFBMEIsOEJBQThCLHlDQUF5QyxtQkFBbUIsK0JBQStCLGFBQWEsOEJBQThCLCtCQUErQixPQUFPLHlCQUF5QixtQ0FBbUMsNkJBQTZCLE9BQU8saUJBQWlCLDBDQUEwQyxPQUFPLEtBQUsscUNBQXFDLG1DQUFtQyxnQ0FBZ0Msa0NBQWtDLEtBQUssa0RBQWtELHVCQUF1QixnQkFBZ0IseUNBQXlDLHdDQUF3Qyx1QkFBdUIsZ0NBQWdDLG1DQUFtQywrQ0FBK0Msa0NBQWtDLEtBQUssdUNBQXVDLHNCQUFzQixhQUFhLGVBQWUsZ0JBQWdCLGNBQWMsOEVBQThFLHNCQUFzQiw0QkFBNEIsMEJBQTBCLDZCQUE2QiwyQkFBMkIsS0FBSyxrQ0FBa0Msb0NBQW9DLDZCQUE2QixPQUFPLEtBQUsscUNBQXFDLHNCQUFzQixhQUFhLGVBQWUsZ0JBQWdCLGNBQWMsOENBQThDLGtDQUFrQywwQkFBMEIsa0JBQWtCLEtBQUssMkNBQTJDLDBCQUEwQix5Q0FBeUMsaUNBQWlDLEtBQUsscURBQXFELGtCQUFrQix3Q0FBd0MseUJBQXlCLDhDQUE4Qyx1Q0FBdUMsOENBQThDLDBHQUEwRyxLQUFLLDJDQUEyQyx5Q0FBeUMsS0FBSywyQ0FBMkMseUNBQXlDLGtCQUFrQixLQUFLLG1DQUFtQyxrQkFBa0IseUJBQXlCLG1CQUFtQixnQkFBZ0Isd0JBQXdCLEtBQUsseUNBQXlDLGlDQUFpQyxxRUFBcUUsK0JBQStCLG9LQUFvSyxzQkFBc0IsaUNBQWlDLGtCQUFrQixzQkFBc0IsdUJBQXVCLGtCQUFrQiw4Q0FBOEMsMkNBQTJDLHlCQUF5Qiw0RUFBNEUsT0FBTywrREFBK0QsNkNBQTZDLHNHQUFzRyxTQUFTLE9BQU8saUNBQWlDLDZDQUE2Qyw4REFBOEQsU0FBUyxPQUFPLDZIQUE2SCxrQ0FBa0MsT0FBTyxpQ0FBaUMsNkNBQTZDLG9DQUFvQyxTQUFTLE9BQU8sS0FBSyxvQ0FBb0MsMENBQTBDLG9CQUFvQiw4QkFBOEIsMEJBQTBCLGVBQWUseUJBQXlCLEtBQUssdUNBQXVDLG1DQUFtQyx5QkFBeUIsZ0NBQWdDLHVCQUF1QixrQ0FBa0MseUNBQXlDLEtBQUssd0NBQXdDLG9CQUFvQiw4QkFBOEIsMEJBQTBCLDhCQUE4Qiw2QkFBNkIsd0NBQXdDLHFCQUFxQixxQkFBcUIseUNBQXlDLGFBQWEsOEJBQThCLCtCQUErQixPQUFPLHlCQUF5QixtQ0FBbUMsT0FBTyxpQ0FBaUMsMENBQTBDLE9BQU8sb0JBQW9CLHFCQUFxQiw0QkFBNEIsT0FBTyxLQUFLLDZDQUE2QyxvQ0FBb0MsS0FBSyxrQ0FBa0MsaUNBQWlDLCtDQUErQyxvREFBb0Qsb0NBQW9DLDhCQUE4Qiw4Q0FBOEMseUJBQXlCLCtDQUErQyxnQ0FBZ0MsaURBQWlELG9CQUFvQixhQUFhLDhCQUE4QiwrQkFBK0IsT0FBTyxLQUFLLDRDQUE0Qyx5Q0FBeUMsS0FBSyw0QkFBNEIscUJBQXFCLEtBQUsseUJBQXlCLDZCQUE2QixLQUFLLG9DQUFvQywyQkFBMkIsdUJBQXVCLHVCQUF1QixLQUFLLDBCQUEwQixrQkFBa0IsNENBQTRDLGlDQUFpQyxxREFBcUQsS0FBSyxtREFBbUQsbUJBQW1CLCtCQUErQix5Q0FBeUMsd0JBQXdCLHlCQUF5QixtQ0FBbUMsNkJBQTZCLE9BQU8saUJBQWlCLDBDQUEwQyxPQUFPLEtBQUssbUZBQW1GLG9EQUFvRCxLQUFLLHdDQUF3QyxxQkFBcUIsb0NBQW9DLCtDQUErQyxLQUFLLGdGQUFnRix5QkFBeUIseUJBQXlCLGlCQUFpQiwyQkFBMkIsbUJBQW1CLE9BQU8sa0JBQWtCLG9CQUFvQiwwREFBMEQsOENBQThDLG1EQUFtRCx5Q0FBeUMseURBQXlELDJCQUEyQixPQUFPLEtBQUsscUNBQXFDLGdCQUFnQixLQUFLLHdCQUF3QixvQkFBb0IsZ0JBQWdCLGlCQUFpQixLQUFLLDRDQUE0Qyx3QkFBd0IsS0FBSyx5Q0FBeUMsdUJBQXVCLDRCQUE0QixLQUFLLG1DQUFtQyxtQ0FBbUMsS0FBSyxvRkFBb0Ysb0RBQW9ELEtBQUssZ0NBQWdDLHFCQUFxQixvQ0FBb0MsK0NBQStDLEtBQUssd0NBQXdDLG9CQUFvQiwwQkFBMEIscUNBQXFDLHNCQUFzQixnQkFBZ0IsS0FBSyw0Q0FBNEMsd0NBQXdDLEtBQUssc0NBQXNDLHVCQUF1Qiw0QkFBNEIsS0FBSyw4Q0FBOEMsa0JBQWtCLDZCQUE2Qix1QkFBdUIsS0FBSyxxQ0FBcUMsc0JBQXNCLEtBQUssMkNBQTJDLHdDQUF3QyxLQUFLLGtEQUFrRCx3QkFBd0IsS0FBSyx1Q0FBdUMsK0JBQStCLEtBQUssc0NBQXNDLGdDQUFnQyxLQUFLLHVDQUF1QyxzQ0FBc0MsZ0NBQWdDLHVCQUF1QixLQUFLLDBEQUEwRCxtQ0FBbUMsS0FBSyx3Q0FBd0Msc0NBQXNDLHlCQUF5QixnQ0FBZ0MsS0FBSyxpQ0FBaUMsc0JBQXNCLHNDQUFzQyxLQUFLLHVDQUF1Qyw0QkFBNEIsS0FBSywwQkFBMEIsb0JBQW9CLDBCQUEwQixrQ0FBa0MsS0FBSyxnQ0FBZ0Msd0JBQXdCLEtBQUssK0JBQStCLHdCQUF3QixtQkFBbUIsdUJBQXVCLDRDQUE0QyxpQkFBaUIscUNBQXFDLG1CQUFtQixLQUFLLHFDQUFxQyxpQkFBaUIsS0FBSyw0Q0FBNEMsb0JBQW9CLDBCQUEwQixxQ0FBcUMsMEJBQTBCLEtBQUssb0NBQW9DLHNCQUFzQixLQUFLLHNDQUFzQyw0QkFBNEIsS0FBSywwREFBMEQsMENBQTBDLG9CQUFvQiw4QkFBOEIsMEJBQTBCLGVBQWUsK0JBQStCLCtCQUErQiw4Q0FBOEMsbUNBQW1DLG9EQUFvRCxzQ0FBc0MseUNBQXlDLHFDQUFxQyxnQ0FBZ0MsdUJBQXVCLGtDQUFrQyxLQUFLLHFEQUFxRCw0QkFBNEIsbUNBQW1DLGlCQUFpQiwwQ0FBMEMsT0FBTyxpQkFBaUIsbUNBQW1DLE9BQU8sS0FBSywwQ0FBMEMsbUNBQW1DLHFDQUFxQyxLQUFLLHdDQUF3QyxtQ0FBbUMscUNBQXFDLEtBQUssMkNBQTJDLGlDQUFpQyxtQ0FBbUMsS0FBSywwQ0FBMEMsa0NBQWtDLG9DQUFvQyxLQUFLLHNFQUFzRSxtSkFBbUosNEJBQTRCLG9DQUFvQywyQ0FBMkMsS0FBSyxxQ0FBcUMsMENBQTBDLG9CQUFvQiw4QkFBOEIsMEJBQTBCLGVBQWUscUJBQXFCLCtCQUErQiwrQkFBK0IseUNBQXlDLG1DQUFtQyxvREFBb0Qsc0NBQXNDLHlDQUF5QyxzQ0FBc0MsZ0NBQWdDLHVCQUF1QixrQ0FBa0MsS0FBSyw4QkFBOEIsNkJBQTZCLHNCQUFzQixPQUFPLEtBQUssaUNBQWlDLDBDQUEwQyxvQkFBb0IsNkJBQTZCLDhCQUE4Qiw4Q0FBOEMsb0RBQW9ELG1DQUFtQyxxQ0FBcUMsdUNBQXVDLHlCQUF5QiwwQ0FBMEMsaUJBQWlCLHVCQUF1QixpQkFBaUIsaUJBQWlCLHVCQUF1QixtR0FBbUcsaUNBQWlDLG1CQUFtQixpQkFBaUIsT0FBTyxLQUFLLGtDQUFrQyxtQkFBbUIsa0JBQWtCLEtBQUssaUNBQWlDLG9CQUFvQiwwQkFBMEIsdUJBQXVCLDZCQUE2Qix5QkFBeUIsdUNBQXVDLHdCQUF3QiwwQkFBMEIsYUFBYSw4QkFBOEIsK0JBQStCLE9BQU8seUJBQXlCLG1CQUFtQixPQUFPLEtBQUssbUNBQW1DLDhDQUE4QyxtQkFBbUIsa0RBQWtELGtCQUFrQixLQUFLLHVEQUF1RCxzQkFBc0IsOENBQThDLEtBQUssa0NBQWtDLGdDQUFnQyxrQ0FBa0Msb0NBQW9DLEtBQUssa0NBQWtDLGdDQUFnQyxrQ0FBa0MsbUNBQW1DLHdCQUF3QixLQUFLLHdDQUF3Qyw2Q0FBNkMsK0NBQStDLG9CQUFvQiwwQkFBMEIsMEJBQTBCLDhCQUE4QixlQUFlLGdDQUFnQyw2QkFBNkIsOENBQThDLG9EQUFvRCxtQ0FBbUMsc0NBQXNDLG1CQUFtQixvQ0FBb0MsMkJBQTJCLHVCQUF1QixnQ0FBZ0MseUNBQXlDLG1DQUFtQyw4Q0FBOEMsZ0RBQWdELE9BQU8sb0RBQW9ELDZCQUE2Qiw4QkFBOEIseUNBQXlDLHFEQUFxRCwyQkFBMkIsT0FBTyxLQUFLLHFDQUFxQyxvQkFBb0IsZUFBZSxhQUFhLDhCQUE4QiwrQkFBK0Isc0JBQXNCLGdDQUFnQyw0QkFBNEIseUNBQXlDLGdEQUFnRCw0Q0FBNEMsZ0RBQWdELHNDQUFzQywyQkFBMkIsa0NBQWtDLG9DQUFvQyxPQUFPLEtBQUssMkJBQTJCLHVCQUF1QixhQUFhLDZCQUE2QixPQUFPLEtBQUssb0NBQW9DLHdDQUF3QyxvQ0FBb0MsK0NBQStDLHVCQUF1QixnQkFBZ0IsZ0NBQWdDLGdDQUFnQyx5Q0FBeUMsS0FBSyw0Q0FBNEMsbUJBQW1CLEtBQUssa0NBQWtDLHlCQUF5Qiw4Q0FBOEMsb0RBQW9ELHlDQUF5Qyx1QkFBdUIsS0FBSyxzQ0FBc0MsZ0JBQWdCLCtDQUErQyxnQ0FBZ0MsS0FBSyxtQ0FBbUMseUJBQXlCLHNCQUFzQiw4QkFBOEIsMEJBQTBCLGlCQUFpQixlQUFlLG1CQUFtQiw2QkFBNkIsNEJBQTRCLHlDQUF5QyxvREFBb0QsOENBQThDLEtBQUssdUNBQXVDLHFCQUFxQix1QkFBdUIsc0JBQXNCLEtBQUssZ0VBQWdFLG1EQUFtRCx3Q0FBd0MsS0FBSywyQ0FBMkMseUNBQXlDLEtBQUssNkNBQTZDLHNDQUFzQyxLQUFLLHFDQUFxQyxrQkFBa0Isa0JBQWtCLHNCQUFzQiw4Q0FBOEMseUJBQXlCLDJCQUEyQix3QkFBd0Isa0JBQWtCLDRCQUE0QixjQUFjLHlDQUF5Qyw0QkFBNEIsZUFBZSwwRUFBMEUseUZBQXlGLE9BQU8sS0FBSyw0Q0FBNEMsRUFBRSxjQUFjLGdDQUFnQyx5QkFBeUIsMkZBQTJGLFdBQVcsaWNBQWljLG1DQUFtQyxXQUFXLG1CQUFtQixvQ0FBb0MsOEJBQThCLDJDQUEyQywwREFBMEQsV0FBVyw2S0FBNkssMkJBQTJCLFdBQVcsbUJBQW1CLHNCQUFzQixzUEFBc1AsNEJBQTRCLDZCQUE2Qiw2QkFBNkIscUNBQXFDLDZCQUE2QixXQUFXLCtCQUErQixtQ0FBbUMsV0FBVyx1REFBdUQsa0NBQWtDLFdBQVcsZ0JBQWdCLG9DQUFvQyxzQkFBc0IsOEJBQThCLFdBQVcsaUZBQWlGLDBCQUEwQiwrQkFBK0IsV0FBVyxlQUFlLDBCQUEwQixnQ0FBZ0MsV0FBVyw2REFBNkQsdUNBQXVDLHNEQUFzRCw4Q0FBOEMseUJBQXlCLDZCQUE2QixtREFBbUQsMkNBQTJDLFdBQVcscUJBQXFCLGdDQUFnQywrQkFBK0IsaUNBQWlDLFdBQVcsMENBQTBDLDBCQUEwQixnQ0FBZ0MsV0FBVyxtRUFBbUUsNkJBQTZCLFdBQVcsZ0JBQWdCLDZCQUE2QixXQUFXLGdCQUFnQiwrQkFBK0IsMkJBQTJCLFdBQVcsd0JBQXdCLDZCQUE2QixXQUFXLGdDQUFnQyxnQ0FBZ0MsV0FBVyxtQkFBbUIsMkJBQTJCLFdBQVcsK0JBQStCLCtCQUErQiwyQkFBMkIsMkJBQTJCLHFDQUFxQyxXQUFXLGlCQUFpQiw0QkFBNEIsV0FBVyxpQkFBaUIsd0JBQXdCLFdBQVcsZUFBZSwyQkFBMkIsa0NBQWtDLDBDQUEwQyxXQUFXLHFCQUFxQiwyQkFBMkIsdUNBQXVDLFdBQVcsMkJBQTJCLDJCQUEyQixrQ0FBa0MsV0FBVyxpQ0FBaUMsMkJBQTJCLGtDQUFrQyxXQUFXLDZEQUE2RCwySEFBMkgsMkJBQTJCLFdBQVcsaUJBQWlCLDBCQUEwQixnQ0FBZ0MsMkJBQTJCLFdBQVcsb0JBQW9CLDZCQUE2QixXQUFXLGlCQUFpQixtQ0FBbUMsK0JBQStCLFdBQVcsaUJBQWlCLDZCQUE2QixtQ0FBbUMsV0FBVyxtQkFBbUIsc0NBQXNDLFdBQVcscUJBQXFCLDhCQUE4QixpQ0FBaUMsMkJBQTJCLDZCQUE2QixpQ0FBaUMsV0FBVyxnQkFBZ0IsZ0NBQWdDLFdBQVcsbUJBQW1CLGtDQUFrQywrQkFBK0IsV0FBVyxvQkFBb0IsNkJBQTZCLHNCQUFzQix1QkFBdUIsc0JBQXNCLDZCQUE2Qiw2QkFBNkIscUNBQXFDLFdBQVcsMEJBQTBCLGdDQUFnQyx1REFBdUQsV0FBVyw4Q0FBOEMsMEJBQTBCLFdBQVcsMkZBQTJGLHNCQUFzQixpQ0FBaUMsK0JBQStCLGlDQUFpQyxXQUFXLG9DQUFvQyw4QkFBOEIsV0FBVyxxQ0FBcUMsaUNBQWlDLFdBQVcsb0JBQW9CLDhCQUE4QixXQUFXLGlHQUFpRyx1Q0FBdUMsV0FBVyw2SkFBNkosNEJBQTRCLFdBQVcseUtBQXlLLHVCQUF1QiwrQkFBK0IsV0FBVyxrRUFBa0UsbUNBQW1DLHVCQUF1QixXQUFXLGtJQUFrSSx3Q0FBd0MsV0FBVyxzQkFBc0IsMkJBQTJCLDZCQUE2QixXQUFXLHNCQUFzQix5QkFBeUIsdUJBQXVCLHNCQUFzQixzQkFBc0IsV0FBVyxvQkFBb0IsMkJBQTJCLHdCQUF3Qiw0QkFBNEIsdUJBQXVCLCtCQUErQiw0QkFBNEIsaUNBQWlDLDJCQUEyQixnQ0FBZ0MsV0FBVyxzQkFBc0IscUNBQXFDLFdBQVcsNkdBQTZHLHlCQUF5QixXQUFXLDZCQUE2QixpQ0FBaUMscUNBQXFDLFdBQVcsd0RBQXdELHFDQUFxQyxXQUFXLDBDQUEwQywwQkFBMEIsdUNBQXVDLFdBQVcsb0JBQW9CLGtDQUFrQyxXQUFXLHFCQUFxQiwrQkFBK0IsNEJBQTRCLFdBQVcsc0JBQXNCLDBCQUEwQixXQUFXLHNCQUFzQixxQ0FBcUMsV0FBVyxzRUFBc0UsS0FBSyx3QkFBd0IsSUFBSSxxQkFBcUIsU0FBUyxHQUFHLGNBQWMseUJBQXlCLGtCQUFrQixFQUFFLGNBQWMsZ0NBQWdDLDB3QkFBMHdCLCtIQUErSCxzR0FBc0csMEZBQTBGLHlIQUF5SCxvR0FBb0cseURBQXlELG9EQUFvRCx3REFBd0Qsc0RBQXNELHFEQUFxRCxtREFBbUQsOERBQThELDREQUE0RCw0REFBNEQsOERBQThELCtEQUErRCwwREFBMEQsK0RBQStELGdGQUFnRiw0Q0FBNEMsNEVBQTRFLDZDQUE2Qyw2Q0FBNkMsNENBQTRDLHlDQUF5Qyw4Q0FBOEMsZ0RBQWdELDJDQUEyQyxzREFBc0QsMEVBQTBFLHNDQUFzQyxzQ0FBc0Msc0NBQXNDLHNDQUFzQyxzQ0FBc0Msc0NBQXNDLHNDQUFzQyxzQ0FBc0MsdUNBQXVDLGtHQUFrRyx5REFBeUQsdURBQXVELHdEQUF3RCx3REFBd0Qsd0RBQXdELHdEQUF3RCx3REFBd0QseURBQXlELHlEQUF5RCwwRUFBMEUsc0NBQXNDLHNDQUFzQyxzQ0FBc0Msc0NBQXNDLHNDQUFzQyxzQ0FBc0Msc0NBQXNDLHNDQUFzQyx1Q0FBdUMsd0VBQXdFLHFDQUFxQyxxQ0FBcUMscUNBQXFDLHFDQUFxQyxxQ0FBcUMscUNBQXFDLHFDQUFxQyxxQ0FBcUMsc0NBQXNDLDRFQUE0RSx1Q0FBdUMsdUNBQXVDLHVDQUF1Qyx1Q0FBdUMsdUNBQXVDLHVDQUF1Qyx1Q0FBdUMsdUNBQXVDLHdDQUF3Qyw0RUFBNEUsdUNBQXVDLHVDQUF1Qyx1Q0FBdUMsdUNBQXVDLHVDQUF1Qyx1Q0FBdUMsdUNBQXVDLHVDQUF1Qyx3Q0FBd0MsK0ZBQStGLGlEQUFpRCxrREFBa0QsbURBQW1ELHNEQUFzRCx1REFBdUQsV0FBVyxzRUFBc0UsS0FBSyx3QkFBd0IsSUFBSSxxQkFBcUIsU0FBUyxHQUFHLGNBQWMseUJBQXlCLGtCQUFrQixFQUFFLGVBQWUsWUFBWSxtQkFBbUIsS0FBSyx3Q0FBd0Msa0JBQWtCLGdIQUFnSCx1REFBdUQsMEJBQTBCLFVBQVUsaURBQWlELGtEQUFrRCxTQUFTLEVBQUUsU0FBUyxpQkFBaUIscUJBQXFCLGdIQUFnSCxxQkFBcUIsaUNBQWlDLHNDQUFzQyxrQkFBa0IsU0FBUyxpQ0FBaUMsZ0VBQWdFLElBQUksZUFBZSxxR0FBcUcsS0FBcUIsa0NBQWtDLGNBQWMsaUJBQWlCLG1HQUFtRyxnREFBZ0QsS0FBSyxpQ0FBaUMsb0NBQW9DLEtBQUssNEZBQTRGLEdBQUcsT0FBTyxHQUFHLDBCQUEwQixFQUFFLGlCQUFpQixvQ0FBb0MsdUJBQXVCLElBQUksY0FBYyxTQUFTLG1CQUFtQix5Q0FBeUMsa0RBQWtELFdBQVcsZUFBZSxZQUFZLG1CQUFtQixLQUFLLHdDQUF3QyxrQkFBa0IsZ0hBQWdILHVEQUF1RCwwQkFBMEIsYUFBYSxFQUFFLFNBQVMsaUJBQWlCLG1CQUFtQiw2QkFBNkIsbUJBQW1CLHVGQUF1RixZQUFZLG1CQUFtQixJQUFJLGdCQUFnQiwyREFBMkQsT0FBTyxTQUFTLFNBQVMsUUFBUSxJQUFJLDhCQUE4QixRQUFRLGNBQWMsVUFBVSxxQkFBcUIsTUFBTSxxQ0FBcUMsb0RBQW9ELGlHQUFpRyx1RkFBdUYsa0JBQWtCLDhKQUE4SixHQUFHLG1CQUFtQiw0Q0FBNEMsdUJBQXVCLEtBQUssZ0JBQWdCLDRGQUE0RixpREFBaUQsd0JBQXdCLFdBQVcsS0FBSyxrQkFBa0IsV0FBVyxhQUFhLFNBQVMsSUFBSSxNQUFNLFlBQVkseUJBQXlCLGFBQWEsb0JBQW9CLGlEQUFpRCxvQkFBb0IsU0FBMEIseUNBQXlDLElBQStDLGlDQUFpQyxTQUFTLHFGQUFxRixHQUFHLCtEQUErRCxFQUFFLGlCQUFpQiwrQkFBK0IsNERBQTRELDhDQUE4QyxHQUFHLGtDQUFrQyxFQUFFLG1DQUFtQyxZQUFZLGFBQWEsNkJBQTZCLGNBQWMsMkJBQTJCLGdCQUFnQixlQUFlLE1BQU0sNkNBQTZDLDBCQUEwQixpQkFBaUIsS0FBSyx3QkFBd0IscUJBQXFCLDJCQUEyQixnQkFBZ0IsNENBQTRDLDJCQUEyQixFQUFFLElBQUksZUFBZSxTQUFTLEVBQUUseUZBQXlGLHNCQUFzQixTQUFTLGdDQUFnQywwSkFBMEosa0JBQWtCLEVBQUUsc0JBQXNCLGlCQUFpQixRQUFRLGNBQWMsb0JBQW9CLGNBQWMsZ0hBQWdILHFCQUFxQixpQ0FBaUMsc0NBQXNDLGtCQUFrQixTQUFTLGlDQUFpQyxnRUFBZ0UsSUFBSSxFQUFFLGFBQWEsT0FBTyxXQUFXLHlDQUF5QyxFQUFFLGdCQUFnQixzQkFBc0IsbUNBQW1DLEdBQUcsY0FBYyxxQ0FBcUMsbUNBQW1DLCtDQUErQywrQkFBK0IseUNBQXlDLFNBQVMsb0VBQW9FLEtBQUssd0JBQXdCLElBQUkscUJBQXFCLFNBQVMsR0FBRyxxRUFBcUUsb0NBQW9DLDJEQUEyRCxxQ0FBcUMscUNBQXFDLG9DQUFvQyxpQ0FBaUMsc0NBQXNDLHdDQUF3QyxtQ0FBbUMsOENBQThDLHlEQUF5RCw4QkFBOEIsOEJBQThCLDhCQUE4Qiw4QkFBOEIsOEJBQThCLDhCQUE4Qiw4QkFBOEIsOEJBQThCLCtCQUErQix3RkFBd0YsdURBQXVELHVEQUF1RCx1REFBdUQsdURBQXVELHVEQUF1RCxzREFBc0Qsc0RBQXNELHNEQUFzRCx3REFBd0QseURBQXlELDhCQUE4Qiw4QkFBOEIsOEJBQThCLDhCQUE4Qiw4QkFBOEIsOEJBQThCLDhCQUE4Qiw4QkFBOEIsK0JBQStCLHVEQUF1RCw2QkFBNkIsNkJBQTZCLDZCQUE2Qiw2QkFBNkIsNkJBQTZCLDZCQUE2Qiw2QkFBNkIsNkJBQTZCLDhCQUE4QiwyREFBMkQsK0JBQStCLCtCQUErQiwrQkFBK0IsK0JBQStCLCtCQUErQiwrQkFBK0IsK0JBQStCLCtCQUErQixnQ0FBZ0MsMkRBQTJELCtCQUErQiwrQkFBK0IsK0JBQStCLCtCQUErQiwrQkFBK0IsK0JBQStCLCtCQUErQiwrQkFBK0IsZ0NBQWdDLDhFQUE4RSx5Q0FBeUMsMENBQTBDLDJDQUEyQyw4Q0FBOEMsK0NBQStDLGdDQUFnQyx5Q0FBeUMsc0RBQXNELG1DQUFtQyxpQ0FBaUMsSUFBSSxjQUFjLHlCQUF5Qiw4QkFBOEIsRUFBRSxpQkFBaUIsb0NBQW9DLHVCQUF1QixJQUFJLGNBQWMsU0FBUyxpQkFBaUIsbUJBQW1CLDZCQUE2QixtQkFBbUIsdUZBQXVGLFlBQVksbUJBQW1CLElBQUksZ0JBQWdCLDJEQUEyRCxPQUFPLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsY0FBYyxVQUFVLHFCQUFxQixNQUFNLHFDQUFxQyxvREFBb0QsaUdBQWlHLHVGQUF1RixrQkFBa0IsOEpBQThKLEdBQUcsZUFBZSxvT0FBb08sdUNBQXVDLG1GQUFtRixPQUFPLE1BQThDLEdBQUcsQ0FBaUMsaUJBQWlCLHlCQUF5QixnQkFBZ0IsTUFBTSxNQUF1QyxDQUFDLENBQU8sR0FBRyxpQkFBaUIsaUJBQWlCLGlCQUFpQixnQkFBZ0Isb0RBQW9ELDBDQUEwQyw0QkFBNEIsMkJBQTJCLE1BQXVDLENBQUMsQ0FBb1Asd0JBQXdCLHdCQUF3QixrRUFBa0UsZ0JBQWdCLG1GQUFtRixHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsT0FBTyxpQ0FBbUIsNkRBQTZELGlCQUFpQixvQ0FBb0MsdUJBQXVCLElBQUksY0FBYyxTQUFTLGVBQWUsbUJBQW1CLGlDQUFpQyxpQkFBaUIsb0dBQW9HLHVCQUF1Qix5SkFBeUosR0FBRyxpQkFBaUIsTUFBTSxxQ0FBcUMsb0RBQW9ELGlHQUFpRyx1RkFBdUYsa0JBQWtCLGVBQWUsa0JBQWtCLDBDQUEwQyxJQUFJLHNCQUFzQiwwREFBMEQsa0NBQWtDLEdBQUcsUUFBUSx5QkFBeUIsR0FBRyxPQUFPLEVBQUUsZ0NBQWdDLEdBQUcsaUJBQWlCLEVBQUUsaUNBQWlDLEdBQUcsT0FBTyxFQUFFLDJCQUEyQixHQUFHLE9BQU8sRUFBRSxpQ0FBaUMsR0FBRyxxQkFBcUIsRUFBRSxxQ0FBcUMsR0FBRyx5QkFBeUIsRUFBRSwrQkFBK0IsR0FBRyxtQkFBbUIsRUFBRSxrQ0FBa0MsR0FBRyxzQkFBc0IsRUFBRSxvQ0FBb0MsR0FBRyxnQkFBZ0IsRUFBRSx3Q0FBd0MsR0FBRyxnQkFBZ0IsRUFBRSxrQ0FBa0MsR0FBRyxPQUFPLEVBQUUsbUNBQW1DLEdBQUcsT0FBTyxFQUFFLG9DQUFvQyxHQUFHLE9BQU8sRUFBRSx1Q0FBdUMsR0FBRyxPQUFPLEVBQUUsdUNBQXVDLEdBQUcsT0FBTyxFQUFFLHdDQUF3QyxHQUFHLE9BQU8sRUFBRSx3Q0FBd0MsR0FBRyxPQUFPLEVBQUUsMENBQTBDLGFBQWEsNkNBQTZDLGFBQWEsbURBQW1ELEdBQUcsZUFBZSxFQUFFLEdBQUcsZUFBZSxtSUFBbUksTUFBTSxrQkFBa0IsNkNBQTZDLDRCQUE0QixJQUFJLG9EQUFvRCx1QkFBdUIsTUFBTSxpREFBaUQsd0JBQXdCLGtCQUFrQixPQUFPLFFBQVEsK0JBQStCLEVBQUUsU0FBUyxnREFBZ0Qsa0JBQWtCLGlYQUFpWCw2QkFBNkIsbUJBQW1CLHVGQUF1RixZQUFZLG1CQUFtQixJQUFJLGdCQUFnQix1REFBdUQsT0FBTyxTQUFTLFNBQVMsUUFBUSxJQUFJLDhCQUE4QixRQUFRLGNBQWMsVUFBVSxxQkFBcUIsTUFBTSxvQ0FBb0Msb0RBQW9ELGlHQUFpRyxzRkFBc0Ysa0JBQWtCLDhKQUE4Six5QkFBeUIsVUFBVSx5Q0FBeUMsbUZBQW1GLGVBQWUscUJBQXFCLElBQUksbUJBQW1CLFlBQVksbUJBQW1CLEtBQUssd0NBQXdDLGtCQUFrQixnSEFBZ0gsdURBQXVELDBCQUEwQixVQUFVLGlEQUFpRCxrREFBa0QsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLE9BQU8sU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxjQUFjLFNBQVMseUJBQXlCLDZEQUE2RCw0Q0FBMkIsQ0FBQywwQ0FBMEMsbUlBQW1JLDRDQUE0QyxJQUFJLDJDQUEyQyxNQUFNLDJFQUEyRSxrREFBa0QsVUFBVSxTQUFTLE1BQU0sMkJBQTJCLDRIQUE0SCx3QkFBd0IscUdBQXFHLEVBQUUsMkNBQTJDLHFDQUFxQyxlQUFlLG9CQUFvQixLQUFLLHNCQUFzQixFQUFFLG9CQUFvQixLQUFLLGtDQUFrQyxFQUFFLG9CQUFvQixLQUFLLGdCQUFnQixFQUFFLG9CQUFvQixLQUFLLHFCQUFxQixFQUFFLG9CQUFvQixLQUFLLGNBQWMsMEJBQTBCLEVBQUUsb0JBQW9CLEtBQUssOEZBQThGLGFBQWEsRUFBRSwwQ0FBMEMsd0JBQXdCLEtBQUssdURBQXVELEVBQUUsMkJBQTJCLEtBQUsscUNBQXFDLGtCQUFrQixxQ0FBcUMsRUFBRSxFQUFFLGlCQUFpQixvQkFBb0IsS0FBSywwQkFBMEIsRUFBRSxvQkFBb0IsS0FBSyx3RUFBd0UsRUFBRSxvQkFBb0IsS0FBSyxzQkFBc0IsRUFBRSxvQkFBb0IsS0FBSyxzQkFBc0IsRUFBRSxvQkFBb0IsS0FBSyx5Q0FBeUMsRUFBRSxvQkFBb0IsS0FBSyxxQkFBcUIsRUFBRSxvQkFBb0IsS0FBSyxxQkFBcUIsRUFBRSxvQkFBb0IsS0FBSyxzQkFBc0IsRUFBRSxvQkFBb0IsS0FBSyxzQkFBc0IsRUFBRSxvQkFBb0IsS0FBSyx1QkFBdUIsRUFBRSxvQkFBb0IsS0FBSyx1QkFBdUIsRUFBRSxvQkFBb0IsS0FBSywyQ0FBMkMsRUFBRSxvQkFBb0IsS0FBSyxvQ0FBb0MsRUFBRSxvQkFBb0IsS0FBSyxjQUFjLEVBQUUscUJBQXFCLEtBQUssWUFBWSxFQUFFLG9CQUFvQixLQUFLLGtEQUFrRCxFQUFFLGtCQUFrQixZQUFZLE1BQU0sNENBQTRDLElBQUkscUNBQXFDLDZCQUE2QixtQkFBbUIsdUZBQXVGLFlBQVksbUJBQW1CLElBQUksZ0JBQWdCLHVEQUF1RCxPQUFPLFNBQVMsU0FBUyxRQUFRLElBQUksOEJBQThCLFFBQVEsY0FBYyxVQUFVLDJCQUEyQiw4SkFBOEosa0JBQWtCLDBDQUEwQyxLQUFLLDRCQUE0QixhQUFhLElBQUksdUJBQXVCLElBQUksa0NBQWtDLHVCQUF1QixvQkFBb0IsU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxlQUFlLFFBQVEsYUFBYSxJQUFJLEVBQUUsa0JBQWtCLHlCQUF5Qiw0QkFBNEIseUJBQXlCLGdCQUFnQixzREFBc0QsR0FBRyxFQUFFLGdCQUFnQixjQUFjLFlBQVksbUJBQW1CLG1HQUFtRyxRQUFRLHVDQUF1QyxxR0FBcUcsOENBQThDLDhDQUE4QywyQkFBMkIsd0JBQXdCLEVBQUUsaUNBQWlDLHVCQUF1Qiw4R0FBOEcsR0FBRyxTQUFTLHFCQUFxQixpR0FBaUcsUUFBUSw4Q0FBOEMsNkRBQTZELHVCQUF1QixJQUFJLGlDQUFpQyx1QkFBdUIsTUFBTSxjQUFjLHlCQUF5Qix1QkFBdUIsSUFBSSw4Q0FBOEMsdUJBQXVCLCtDQUErQyxTQUFTLFNBQVMsUUFBUSxJQUFJLDhCQUE4QixRQUFRLGlCQUFpQixTQUFTLFNBQVMsUUFBUSxJQUFJLDhCQUE4QixRQUFRLGVBQWUseUJBQXlCLGFBQWEsK0JBQStCLDJCQUEyQixpQ0FBaUMsdUJBQXVCLCtHQUErRyxHQUFHLFVBQVUsSUFBSSxrQkFBa0IsQ0FBQywwQkFBbUIsWUFBWSwyQkFBMkIsQ0FBQywwQkFBbUIscUJBQXFCLDZCQUE2QixDQUFDLDBCQUFtQix1QkFBdUIsMEJBQW1CLG1IQUFtSCwwQkFBbUIsaUJBQWlCLDhDQUEyQyxDQUFDLFNBQVMsRUFBQztBQUMxN2lZIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNC43X0BiYWJlbCtjb3JlQDcuMjguM19Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHBsYXl3cmlnaHQrdGVzdEAxLjU1LjBfcmVhY3QtZF80N2ZmMzgxM2Q3OTA1NjZkZjI1NGEyMTYzNTUwYzJkNS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL25leHQtZGV2dG9vbHMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fd2VicGFja19tb2R1bGVzX189e1wiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2NvbXBvbmVudHMvdG9vbHRpcC5jc3NcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7dC5kKG4se1o6KCk9Pmx9KTt2YXIgcj10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiKSxvPXQubihyKSxhPXQoXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIiksaT10Lm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxgLnRvb2x0aXAtd3JhcHBlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBsaW5lLWhlaWdodDogMTtcbn1cblxuLnRvb2x0aXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHBhZGRpbmc6IDZweCAxMnB4O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi50b29sdGlwLWFycm93IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItd2lkdGg6IHZhcigtLWFycm93LXNpemUsIDZweCk7XG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi50b29sdGlwLWFycm93LS10b3Age1xuICBib3JkZXItd2lkdGg6IHZhcigtLWFycm93LXNpemUsIDZweCkgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KSAwXG4gICAgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KTtcbiAgYm9yZGVyLXRvcC1jb2xvcjogdmFyKC0tdG9vbHRpcC1iZy1jb2xvcik7XG4gIGJvdHRvbTogMDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xufVxuXG4udG9vbHRpcC1hcnJvdy0tYm90dG9tIHtcbiAgYm9yZGVyLXdpZHRoOiAwIHZhcigtLWFycm93LXNpemUsIDZweCkgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KVxuICAgIHZhcigtLWFycm93LXNpemUsIDZweCk7XG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLXRvb2x0aXAtYmctY29sb3IpO1xuICB0b3A6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTAwJSk7XG59XG5cbi50b29sdGlwLWFycm93LS1sZWZ0IHtcbiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIDAgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KVxuICAgIHZhcigtLWFycm93LXNpemUsIDZweCk7XG4gIGJvcmRlci1sZWZ0LWNvbG9yOiB2YXIoLS10b29sdGlwLWJnLWNvbG9yKTtcbiAgcmlnaHQ6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbn1cblxuLnRvb2x0aXAtYXJyb3ctLXJpZ2h0IHtcbiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIHZhcigtLWFycm93LXNpemUsIDZweClcbiAgICB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIDA7XG4gIGJvcmRlci1yaWdodC1jb2xvcjogdmFyKC0tdG9vbHRpcC1iZy1jb2xvcik7XG4gIGxlZnQ6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XG59XG5cbi50b29sdGlwLXBvc2l0aW9uZXIge1xuICB6LWluZGV4OiB2YXIoLS10b3Atei1pbmRleCk7XG59XG5gLFwiXCIse3ZlcnNpb246Myxzb3VyY2VzOltcIndlYnBhY2s6Ly8uL3NyYy9uZXh0LWRldnRvb2xzL2NvbXBvbmVudHMvdG9vbHRpcC5jc3NcIl0sbmFtZXM6W10sbWFwcGluZ3M6XCJBQUFBO0VBQ0Usa0JBQWtCO0VBQ2xCLHFCQUFxQjtFQUNyQixjQUFjO0FBQ2hCOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLGlCQUFpQjtFQUNqQixrQkFBa0I7RUFDbEIsZUFBZTtFQUNmLGdCQUFnQjtFQUNoQixvQkFBb0I7QUFDdEI7O0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIsUUFBUTtFQUNSLFNBQVM7RUFDVCxtQkFBbUI7RUFDbkIsb0NBQW9DO0VBQ3BDLHlCQUF5QjtBQUMzQjs7QUFFQTtFQUNFOzBCQUN3QjtFQUN4Qix5Q0FBeUM7RUFDekMsU0FBUztFQUNULDJCQUEyQjtBQUM3Qjs7QUFFQTtFQUNFOzBCQUN3QjtFQUN4Qiw0Q0FBNEM7RUFDNUMsTUFBTTtFQUNOLDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFOzBCQUN3QjtFQUN4QiwwQ0FBMEM7RUFDMUMsUUFBUTtFQUNSLDJCQUEyQjtBQUM3Qjs7QUFFQTtFQUNFOzRCQUMwQjtFQUMxQiwyQ0FBMkM7RUFDM0MsT0FBTztFQUNQLDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFLDJCQUEyQjtBQUM3QlwiLHNvdXJjZXNDb250ZW50OltcIi50b29sdGlwLXdyYXBwZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxufVxcblxcbi50b29sdGlwIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHBhZGRpbmc6IDZweCAxMnB4O1xcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgbGluZS1oZWlnaHQ6IDEuNDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5cXG4udG9vbHRpcC1hcnJvdyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMDtcXG4gIGhlaWdodDogMDtcXG4gIGJvcmRlci1zdHlsZTogc29saWQ7XFxuICBib3JkZXItd2lkdGg6IHZhcigtLWFycm93LXNpemUsIDZweCk7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4udG9vbHRpcC1hcnJvdy0tdG9wIHtcXG4gIGJvcmRlci13aWR0aDogdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KSB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIDBcXG4gICAgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KTtcXG4gIGJvcmRlci10b3AtY29sb3I6IHZhcigtLXRvb2x0aXAtYmctY29sb3IpO1xcbiAgYm90dG9tOiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xcbn1cXG5cXG4udG9vbHRpcC1hcnJvdy0tYm90dG9tIHtcXG4gIGJvcmRlci13aWR0aDogMCB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIHZhcigtLWFycm93LXNpemUsIDZweClcXG4gICAgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KTtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLXRvb2x0aXAtYmctY29sb3IpO1xcbiAgdG9wOiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMDAlKTtcXG59XFxuXFxuLnRvb2x0aXAtYXJyb3ctLWxlZnQge1xcbiAgYm9yZGVyLXdpZHRoOiB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIDAgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KVxcbiAgICB2YXIoLS1hcnJvdy1zaXplLCA2cHgpO1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLXRvb2x0aXAtYmctY29sb3IpO1xcbiAgcmlnaHQ6IDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XFxufVxcblxcbi50b29sdGlwLWFycm93LS1yaWdodCB7XFxuICBib3JkZXItd2lkdGg6IHZhcigtLWFycm93LXNpemUsIDZweCkgdmFyKC0tYXJyb3ctc2l6ZSwgNnB4KVxcbiAgICB2YXIoLS1hcnJvdy1zaXplLCA2cHgpIDA7XFxuICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLXRvb2x0aXAtYmctY29sb3IpO1xcbiAgbGVmdDogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XFxufVxcblxcbi50b29sdGlwLXBvc2l0aW9uZXIge1xcbiAgei1pbmRleDogdmFyKC0tdG9wLXotaW5kZXgpO1xcbn1cXG5cIl0sc291cmNlUm9vdDpcIlwifV0pO2xldCBsPWl9LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvZGV2dG9vbHMtcGFuZWwvcmVzaXplL3Jlc2l6ZS1oYW5kbGUuY3NzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3QuZChuLHtaOigpPT5sfSk7dmFyIHI9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIiksbz10Lm4ociksYT10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCIpLGk9dC5uKGEpKCkobygpKTtpLnB1c2goW2UuaWQsYC5yZXNpemUtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICAvKiB0b2RvOiBiZXR0ZXIgeiBpbmRleCAqL1xuICB6LWluZGV4OiAxMDtcbiAgLyogdG9kbzogaXMgdGhpcyBuZWVkZWQgKi9cbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG59XG5cbi5yZXNpemUtbGluZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgLyogdG9kbyBzbWFydGVyIHogaW5kZXggKi9cbiAgei1pbmRleDogLTE7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAvKiBhIG5vcm1hbCBleGl0IGFuaW1hdGlvbiBjdXJ2ZS0gYXQgdGhpcyBwb2ludCB0aGUgZXhpdCBhbmltYXRpb24gaXMgKi9cbiAgLyogaW1tZWRpYXRlbHkgcmVzcG9uc2l2ZSBzbyB3ZSBkb24ndCBuZWVkIGEgYmVzcG9rZSBjdXJ2ZSAqL1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC40cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO1xuICAvKiB0b2RvOiBiZXR0ZXIgdmFyPyAqL1xuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XG59XG5cbi8qIHN0YXJ0IHJlYWxseSBmYXN0IGJlY2F1c2Ugd2Ugc3RhcnQgc3VwZXIgaGlkZGVuIGluaXRpYWxseSBiZWhpbmQgdGhlIHBhbmVsLCBvdGhlcndpc2UgZmVlbHMgbGlrZSBhbiB1bmludGVuZGVkIGFuaW1hdGlvbiBkZWxheSAqL1xuLnJlc2l6ZS1jb250YWluZXI6aG92ZXIgfiAucmVzaXplLWxpbmUge1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBjdWJpYy1iZXppZXIoMC4wNSwgMC45LCAwLjIsIDEpOyAvKiBGYXN0IHN0YXJ0IGZvciBhbmltYXRlIGluICovXG59XG5cbi5yZXNpemUtY29udGFpbmVyLnJpZ2h0LFxuLnJlc2l6ZS1jb250YWluZXIubGVmdCB7XG4gIHRvcDogMDtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMjVweDtcbiAgY3Vyc29yOiBldy1yZXNpemU7XG59XG5cbi8qIHRvZG86IGRvbid0IGhhcmQgY29kZSBhbGwgdGhlc2UgdmFsdWVzL3VzZSB2YXJzICovXG5cbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbSxcbi5yZXNpemUtY29udGFpbmVyLnRvcCB7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDI1cHg7XG4gIGN1cnNvcjogbnMtcmVzaXplO1xufVxuXG4ucmVzaXplLWNvbnRhaW5lci50b3Age1xuICB0b3A6IC0xMnB4O1xufVxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tIHtcbiAgYm90dG9tOiAtMTJweDtcbn1cbi5yZXNpemUtY29udGFpbmVyLmxlZnQge1xuICBsZWZ0OiAtMTJweDtcbn1cbi5yZXNpemUtY29udGFpbmVyLnJpZ2h0IHtcbiAgcmlnaHQ6IC0xMnB4O1xufVxuXG4ucmVzaXplLWNvbnRhaW5lci50b3AtbGVmdCxcbi5yZXNpemUtY29udGFpbmVyLnRvcC1yaWdodCxcbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbS1sZWZ0LFxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tLXJpZ2h0IHtcbiAgd2lkdGg6IDMycHg7XG4gIGhlaWdodDogMzJweDtcbiAgei1pbmRleDogMTU7XG59XG5cbi5yZXNpemUtY29udGFpbmVyLnRvcC1sZWZ0IHtcbiAgdG9wOiAtMTZweDtcbiAgbGVmdDogLTE2cHg7XG4gIGN1cnNvcjogbndzZS1yZXNpemU7XG59XG4ucmVzaXplLWNvbnRhaW5lci50b3AtcmlnaHQge1xuICB0b3A6IC0xNnB4O1xuICByaWdodDogLTE2cHg7XG4gIGN1cnNvcjogbmVzdy1yZXNpemU7XG59XG4ucmVzaXplLWNvbnRhaW5lci5ib3R0b20tbGVmdCB7XG4gIGJvdHRvbTogLTE2cHg7XG4gIGxlZnQ6IC0xNnB4O1xuICBjdXJzb3I6IG5lc3ctcmVzaXplO1xufVxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tLXJpZ2h0IHtcbiAgYm90dG9tOiAtMTZweDtcbiAgcmlnaHQ6IC0xNnB4O1xuICBjdXJzb3I6IG53c2UtcmVzaXplO1xufVxuXG4ucmVzaXplLWxpbmUudG9wLFxuLnJlc2l6ZS1saW5lLmJvdHRvbSB7XG4gIGhlaWdodDogMjhweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcbn1cblxuLnJlc2l6ZS1saW5lLmxlZnQsXG4ucmVzaXplLWxpbmUucmlnaHQge1xuICB3aWR0aDogMjhweDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XG59XG5cbi5yZXNpemUtbGluZS50b3Age1xuICB0b3A6IC0xMnB4O1xuICBsZWZ0OiBjYWxjKC0xICogdmFyKC0tYm9yZGVyLWxlZnQsIDJweCkpO1xuICB3aWR0aDogY2FsYygxMDAlICsgdmFyKC0tYm9yZGVyLWhvcml6b250YWwsIDRweCkpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLW1kKSB2YXIoLS1yb3VuZGVkLW1kKSAwIDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyOHB4KTtcbn1cblxuLnJlc2l6ZS1saW5lLmJvdHRvbSB7XG4gIGJvdHRvbTogLTEycHg7XG4gIGxlZnQ6IGNhbGMoLTEgKiB2YXIoLS1ib3JkZXItbGVmdCwgMnB4KSk7XG4gIHdpZHRoOiBjYWxjKDEwMCUgKyB2YXIoLS1ib3JkZXItaG9yaXpvbnRhbCwgNHB4KSk7XG4gIGJvcmRlci1yYWRpdXM6IDAgMCB2YXIoLS1yb3VuZGVkLW1kKSB2YXIoLS1yb3VuZGVkLW1kKTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yOHB4KTtcbn1cblxuLnJlc2l6ZS1saW5lLmxlZnQge1xuICB0b3A6IGNhbGMoLTEgKiB2YXIoLS1ib3JkZXItdG9wLCAycHgpKTtcbiAgbGVmdDogLTEycHg7XG4gIGhlaWdodDogY2FsYygxMDAlICsgdmFyKC0tYm9yZGVyLXZlcnRpY2FsLCA0cHgpKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZCkgMCAwIHZhcigtLXJvdW5kZWQtbWQpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjhweCk7XG59XG5cbi5yZXNpemUtbGluZS5yaWdodCB7XG4gIHRvcDogY2FsYygtMSAqIHZhcigtLWJvcmRlci10b3AsIDJweCkpO1xuICByaWdodDogLTEycHg7XG4gIGhlaWdodDogY2FsYygxMDAlICsgdmFyKC0tYm9yZGVyLXZlcnRpY2FsLCA0cHgpKTtcbiAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1yb3VuZGVkLW1kKSB2YXIoLS1yb3VuZGVkLW1kKSAwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTI4cHgpO1xufVxuXG4ucmVzaXplLWNvbnRhaW5lci5yaWdodDpob3ZlciB+IC5yZXNpemUtbGluZS5yaWdodCxcbi5yZXNpemUtY29udGFpbmVyLmxlZnQ6aG92ZXIgfiAucmVzaXplLWxpbmUubGVmdCxcbi5yZXNpemUtbGluZS5yaWdodC5kcmFnZ2luZyxcbi5yZXNpemUtbGluZS5sZWZ0LmRyYWdnaW5nIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xufVxuXG4ucmVzaXplLWNvbnRhaW5lci5ib3R0b206aG92ZXIgfiAucmVzaXplLWxpbmUuYm90dG9tLFxuLnJlc2l6ZS1jb250YWluZXIudG9wOmhvdmVyIH4gLnJlc2l6ZS1saW5lLnRvcCxcbi5yZXNpemUtbGluZS5ib3R0b20uZHJhZ2dpbmcsXG4ucmVzaXplLWxpbmUudG9wLmRyYWdnaW5nIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xufVxuXG4vKiBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBzaG93IG11bHRpcGxlIGhhbmRsZXMgYXQgb25jZVxuICogd2Ugc2hvdWxkIG9ubHkgZXZlciBzaG93IHRoZSBjdXJyZW50bHkgcmVzaXppbmcgaGFuZGxlXG4gKiByZWdhcmRsZXNzIG9mIGhvdmVyIHN0YXRlIFxuICovXG4ucmVzaXplLWNvbnRhaW5lci5uby1ob3Zlci5yaWdodDpob3ZlciB+IC5yZXNpemUtbGluZS5yaWdodCB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMjhweCk7XG59XG4ucmVzaXplLWNvbnRhaW5lci5uby1ob3Zlci5sZWZ0OmhvdmVyIH4gLnJlc2l6ZS1saW5lLmxlZnQge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjhweCk7XG59XG4ucmVzaXplLWNvbnRhaW5lci5uby1ob3Zlci5ib3R0b206aG92ZXIgfiAucmVzaXplLWxpbmUuYm90dG9tIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yOHB4KTtcbn1cbi5yZXNpemUtY29udGFpbmVyLm5vLWhvdmVyLnRvcDpob3ZlciB+IC5yZXNpemUtbGluZS50b3Age1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjhweCk7XG59XG5gLFwiXCIse3ZlcnNpb246Myxzb3VyY2VzOltcIndlYnBhY2s6Ly8uL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvZGV2dG9vbHMtcGFuZWwvcmVzaXplL3Jlc2l6ZS1oYW5kbGUuY3NzXCJdLG5hbWVzOltdLG1hcHBpbmdzOlwiQUFBQTtFQUNFLGtCQUFrQjtFQUNsQix5QkFBeUI7RUFDekIsV0FBVztFQUNYLHlCQUF5QjtFQUN6Qix1QkFBdUI7QUFDekI7O0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIseUJBQXlCO0VBQ3pCLFdBQVc7RUFDWCxvQkFBb0I7RUFDcEIsdUVBQXVFO0VBQ3ZFLDREQUE0RDtFQUM1RCx1REFBdUQ7RUFDdkQsc0JBQXNCO0VBQ3RCLHVDQUF1QztBQUN6Qzs7QUFFQSxtSUFBbUk7QUFDbkk7RUFDRSwwREFBMEQsRUFBRSw4QkFBOEI7QUFDNUY7O0FBRUE7O0VBRUUsTUFBTTtFQUNOLFlBQVk7RUFDWixXQUFXO0VBQ1gsaUJBQWlCO0FBQ25COztBQUVBLG9EQUFvRDs7QUFFcEQ7O0VBRUUsT0FBTztFQUNQLFdBQVc7RUFDWCxZQUFZO0VBQ1osaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsVUFBVTtBQUNaO0FBQ0E7RUFDRSxhQUFhO0FBQ2Y7QUFDQTtFQUNFLFdBQVc7QUFDYjtBQUNBO0VBQ0UsWUFBWTtBQUNkOztBQUVBOzs7O0VBSUUsV0FBVztFQUNYLFlBQVk7RUFDWixXQUFXO0FBQ2I7O0FBRUE7RUFDRSxVQUFVO0VBQ1YsV0FBVztFQUNYLG1CQUFtQjtBQUNyQjtBQUNBO0VBQ0UsVUFBVTtFQUNWLFlBQVk7RUFDWixtQkFBbUI7QUFDckI7QUFDQTtFQUNFLGFBQWE7RUFDYixXQUFXO0VBQ1gsbUJBQW1CO0FBQ3JCO0FBQ0E7RUFDRSxhQUFhO0VBQ2IsWUFBWTtFQUNaLG1CQUFtQjtBQUNyQjs7QUFFQTs7RUFFRSxZQUFZO0VBQ1osV0FBVztFQUNYLDZDQUE2QztBQUMvQzs7QUFFQTs7RUFFRSxXQUFXO0VBQ1gsWUFBWTtFQUNaLDZDQUE2QztBQUMvQzs7QUFFQTtFQUNFLFVBQVU7RUFDVix3Q0FBd0M7RUFDeEMsaURBQWlEO0VBQ2pELHNEQUFzRDtFQUN0RCwyQkFBMkI7QUFDN0I7O0FBRUE7RUFDRSxhQUFhO0VBQ2Isd0NBQXdDO0VBQ3hDLGlEQUFpRDtFQUNqRCxzREFBc0Q7RUFDdEQsNEJBQTRCO0FBQzlCOztBQUVBO0VBQ0Usc0NBQXNDO0VBQ3RDLFdBQVc7RUFDWCxnREFBZ0Q7RUFDaEQsc0RBQXNEO0VBQ3RELDJCQUEyQjtBQUM3Qjs7QUFFQTtFQUNFLHNDQUFzQztFQUN0QyxZQUFZO0VBQ1osZ0RBQWdEO0VBQ2hELHNEQUFzRDtFQUN0RCw0QkFBNEI7QUFDOUI7O0FBRUE7Ozs7RUFJRSx3QkFBd0I7QUFDMUI7O0FBRUE7Ozs7RUFJRSx3QkFBd0I7QUFDMUI7O0FBRUE7OztFQUdFO0FBQ0Y7RUFDRSw0QkFBNEI7QUFDOUI7QUFDQTtFQUNFLDJCQUEyQjtBQUM3QjtBQUNBO0VBQ0UsNEJBQTRCO0FBQzlCO0FBQ0E7RUFDRSwyQkFBMkI7QUFDN0JcIixzb3VyY2VzQ29udGVudDpbXCIucmVzaXplLWNvbnRhaW5lciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAvKiB0b2RvOiBiZXR0ZXIgeiBpbmRleCAqL1xcbiAgei1pbmRleDogMTA7XFxuICAvKiB0b2RvOiBpcyB0aGlzIG5lZWRlZCAqL1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5yZXNpemUtbGluZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAvKiB0b2RvIHNtYXJ0ZXIgeiBpbmRleCAqL1xcbiAgei1pbmRleDogLTE7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIC8qIGEgbm9ybWFsIGV4aXQgYW5pbWF0aW9uIGN1cnZlLSBhdCB0aGlzIHBvaW50IHRoZSBleGl0IGFuaW1hdGlvbiBpcyAqL1xcbiAgLyogaW1tZWRpYXRlbHkgcmVzcG9uc2l2ZSBzbyB3ZSBkb24ndCBuZWVkIGEgYmVzcG9rZSBjdXJ2ZSAqL1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNHMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtcXG4gIC8qIHRvZG86IGJldHRlciB2YXI/ICovXFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxufVxcblxcbi8qIHN0YXJ0IHJlYWxseSBmYXN0IGJlY2F1c2Ugd2Ugc3RhcnQgc3VwZXIgaGlkZGVuIGluaXRpYWxseSBiZWhpbmQgdGhlIHBhbmVsLCBvdGhlcndpc2UgZmVlbHMgbGlrZSBhbiB1bmludGVuZGVkIGFuaW1hdGlvbiBkZWxheSAqL1xcbi5yZXNpemUtY29udGFpbmVyOmhvdmVyIH4gLnJlc2l6ZS1saW5lIHtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGN1YmljLWJlemllcigwLjA1LCAwLjksIDAuMiwgMSk7IC8qIEZhc3Qgc3RhcnQgZm9yIGFuaW1hdGUgaW4gKi9cXG59XFxuXFxuLnJlc2l6ZS1jb250YWluZXIucmlnaHQsXFxuLnJlc2l6ZS1jb250YWluZXIubGVmdCB7XFxuICB0b3A6IDA7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMjVweDtcXG4gIGN1cnNvcjogZXctcmVzaXplO1xcbn1cXG5cXG4vKiB0b2RvOiBkb24ndCBoYXJkIGNvZGUgYWxsIHRoZXNlIHZhbHVlcy91c2UgdmFycyAqL1xcblxcbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbSxcXG4ucmVzaXplLWNvbnRhaW5lci50b3Age1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAyNXB4O1xcbiAgY3Vyc29yOiBucy1yZXNpemU7XFxufVxcblxcbi5yZXNpemUtY29udGFpbmVyLnRvcCB7XFxuICB0b3A6IC0xMnB4O1xcbn1cXG4ucmVzaXplLWNvbnRhaW5lci5ib3R0b20ge1xcbiAgYm90dG9tOiAtMTJweDtcXG59XFxuLnJlc2l6ZS1jb250YWluZXIubGVmdCB7XFxuICBsZWZ0OiAtMTJweDtcXG59XFxuLnJlc2l6ZS1jb250YWluZXIucmlnaHQge1xcbiAgcmlnaHQ6IC0xMnB4O1xcbn1cXG5cXG4ucmVzaXplLWNvbnRhaW5lci50b3AtbGVmdCxcXG4ucmVzaXplLWNvbnRhaW5lci50b3AtcmlnaHQsXFxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tLWxlZnQsXFxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tLXJpZ2h0IHtcXG4gIHdpZHRoOiAzMnB4O1xcbiAgaGVpZ2h0OiAzMnB4O1xcbiAgei1pbmRleDogMTU7XFxufVxcblxcbi5yZXNpemUtY29udGFpbmVyLnRvcC1sZWZ0IHtcXG4gIHRvcDogLTE2cHg7XFxuICBsZWZ0OiAtMTZweDtcXG4gIGN1cnNvcjogbndzZS1yZXNpemU7XFxufVxcbi5yZXNpemUtY29udGFpbmVyLnRvcC1yaWdodCB7XFxuICB0b3A6IC0xNnB4O1xcbiAgcmlnaHQ6IC0xNnB4O1xcbiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTtcXG59XFxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tLWxlZnQge1xcbiAgYm90dG9tOiAtMTZweDtcXG4gIGxlZnQ6IC0xNnB4O1xcbiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTtcXG59XFxuLnJlc2l6ZS1jb250YWluZXIuYm90dG9tLXJpZ2h0IHtcXG4gIGJvdHRvbTogLTE2cHg7XFxuICByaWdodDogLTE2cHg7XFxuICBjdXJzb3I6IG53c2UtcmVzaXplO1xcbn1cXG5cXG4ucmVzaXplLWxpbmUudG9wLFxcbi5yZXNpemUtbGluZS5ib3R0b20ge1xcbiAgaGVpZ2h0OiAyOHB4O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxufVxcblxcbi5yZXNpemUtbGluZS5sZWZ0LFxcbi5yZXNpemUtbGluZS5yaWdodCB7XFxuICB3aWR0aDogMjhweDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG59XFxuXFxuLnJlc2l6ZS1saW5lLnRvcCB7XFxuICB0b3A6IC0xMnB4O1xcbiAgbGVmdDogY2FsYygtMSAqIHZhcigtLWJvcmRlci1sZWZ0LCAycHgpKTtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgKyB2YXIoLS1ib3JkZXItaG9yaXpvbnRhbCwgNHB4KSk7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLW1kKSB2YXIoLS1yb3VuZGVkLW1kKSAwIDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMjhweCk7XFxufVxcblxcbi5yZXNpemUtbGluZS5ib3R0b20ge1xcbiAgYm90dG9tOiAtMTJweDtcXG4gIGxlZnQ6IGNhbGMoLTEgKiB2YXIoLS1ib3JkZXItbGVmdCwgMnB4KSk7XFxuICB3aWR0aDogY2FsYygxMDAlICsgdmFyKC0tYm9yZGVyLWhvcml6b250YWwsIDRweCkpO1xcbiAgYm9yZGVyLXJhZGl1czogMCAwIHZhcigtLXJvdW5kZWQtbWQpIHZhcigtLXJvdW5kZWQtbWQpO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yOHB4KTtcXG59XFxuXFxuLnJlc2l6ZS1saW5lLmxlZnQge1xcbiAgdG9wOiBjYWxjKC0xICogdmFyKC0tYm9yZGVyLXRvcCwgMnB4KSk7XFxuICBsZWZ0OiAtMTJweDtcXG4gIGhlaWdodDogY2FsYygxMDAlICsgdmFyKC0tYm9yZGVyLXZlcnRpY2FsLCA0cHgpKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbWQpIDAgMCB2YXIoLS1yb3VuZGVkLW1kKTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgyOHB4KTtcXG59XFxuXFxuLnJlc2l6ZS1saW5lLnJpZ2h0IHtcXG4gIHRvcDogY2FsYygtMSAqIHZhcigtLWJvcmRlci10b3AsIDJweCkpO1xcbiAgcmlnaHQ6IC0xMnB4O1xcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgKyB2YXIoLS1ib3JkZXItdmVydGljYWwsIDRweCkpO1xcbiAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1yb3VuZGVkLW1kKSB2YXIoLS1yb3VuZGVkLW1kKSAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0yOHB4KTtcXG59XFxuXFxuLnJlc2l6ZS1jb250YWluZXIucmlnaHQ6aG92ZXIgfiAucmVzaXplLWxpbmUucmlnaHQsXFxuLnJlc2l6ZS1jb250YWluZXIubGVmdDpob3ZlciB+IC5yZXNpemUtbGluZS5sZWZ0LFxcbi5yZXNpemUtbGluZS5yaWdodC5kcmFnZ2luZyxcXG4ucmVzaXplLWxpbmUubGVmdC5kcmFnZ2luZyB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XFxufVxcblxcbi5yZXNpemUtY29udGFpbmVyLmJvdHRvbTpob3ZlciB+IC5yZXNpemUtbGluZS5ib3R0b20sXFxuLnJlc2l6ZS1jb250YWluZXIudG9wOmhvdmVyIH4gLnJlc2l6ZS1saW5lLnRvcCxcXG4ucmVzaXplLWxpbmUuYm90dG9tLmRyYWdnaW5nLFxcbi5yZXNpemUtbGluZS50b3AuZHJhZ2dpbmcge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbn1cXG5cXG4vKiBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBzaG93IG11bHRpcGxlIGhhbmRsZXMgYXQgb25jZVxcbiAqIHdlIHNob3VsZCBvbmx5IGV2ZXIgc2hvdyB0aGUgY3VycmVudGx5IHJlc2l6aW5nIGhhbmRsZVxcbiAqIHJlZ2FyZGxlc3Mgb2YgaG92ZXIgc3RhdGUgXFxuICovXFxuLnJlc2l6ZS1jb250YWluZXIubm8taG92ZXIucmlnaHQ6aG92ZXIgfiAucmVzaXplLWxpbmUucmlnaHQge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0yOHB4KTtcXG59XFxuLnJlc2l6ZS1jb250YWluZXIubm8taG92ZXIubGVmdDpob3ZlciB+IC5yZXNpemUtbGluZS5sZWZ0IHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgyOHB4KTtcXG59XFxuLnJlc2l6ZS1jb250YWluZXIubm8taG92ZXIuYm90dG9tOmhvdmVyIH4gLnJlc2l6ZS1saW5lLmJvdHRvbSB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTI4cHgpO1xcbn1cXG4ucmVzaXplLWNvbnRhaW5lci5uby1ob3Zlci50b3A6aG92ZXIgfiAucmVzaXplLWxpbmUudG9wIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyOHB4KTtcXG59XFxuXCJdLHNvdXJjZVJvb3Q6XCJcIn1dKTtsZXQgbD1pfSxcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL292ZXJ2aWV3L3NlZ21lbnQtYm91bmRhcnktdHJpZ2dlci5jc3NcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7dC5kKG4se1o6KCk9Pmx9KTt2YXIgcj10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiKSxvPXQubihyKSxhPXQoXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIiksaT10Lm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxgLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNHB4O1xuICBwYWRkaW5nOiA0cHggNnB4O1xuICBsaW5lLWhlaWdodDogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XG4gIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE1cyBlYXNlO1xufVxuXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyLXRleHQge1xuICBmb250LXNpemU6IHZhcigtLXNpemUtMTIpO1xuICBmb250LXdlaWdodDogNTAwO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyLXRleHQgLnBsdXMtaWNvbiB7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1cyBlYXNlO1xufVxuXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyLXRleHQ6aG92ZXIgLnBsdXMtaWNvbiB7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTgwMCk7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXIgc3ZnIHtcbiAgd2lkdGg6IDE0cHg7XG4gIGhlaWdodDogMTRweDtcbiAgZmxleC1zaHJpbms6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXI6aG92ZXIgc3ZnIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNzAwKTtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlcltkaXNhYmxlZF0gc3ZnLFxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlcltkaXNhYmxlZF06aG92ZXIgc3ZnIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNDAwKTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24ge1xuICBwYWRkaW5nOiA4cHg7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xuICBib3JkZXItcmFkaXVzOiAxNnB4O1xuICBtaW4td2lkdGg6IDEyMHB4O1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBib3gtc2hhZG93OiAwcHggNHB4IDhweCAtNHB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb2xvci1ncmF5LTkwMCkgNCUsIHRyYW5zcGFyZW50KTtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24tcG9zaXRpb25lciB7XG4gIHotaW5kZXg6IHZhcigtLXRvcC16LWluZGV4KTtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24taXRlbSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDhweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBtaW4td2lkdGg6IDIyMHB4O1xuICBib3JkZXI6IG5vbmU7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtW2RhdGEtZGlzYWJsZWRdIHtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNDAwKTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktZHJvcGRvd24taXRlbSBzdmcge1xuICBtYXJnaW4tcmlnaHQ6IDEycHg7XG4gIGNvbG9yOiBjdXJyZW50Q29sb3I7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW06aG92ZXIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW06Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7XG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7XG59XG5cbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW06bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDtcbn1cblxuLnNlZ21lbnQtYm91bmRhcnktZ3JvdXAtbGFiZWwge1xuICBwYWRkaW5nOiA4cHg7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbGluZS1oZWlnaHQ6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XG59XG5gLFwiXCIse3ZlcnNpb246Myxzb3VyY2VzOltcIndlYnBhY2s6Ly8uL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvb3ZlcnZpZXcvc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyLmNzc1wiXSxuYW1lczpbXSxtYXBwaW5nczpcIkFBQUE7RUFDRSxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLFFBQVE7RUFDUixnQkFBZ0I7RUFDaEIsaUJBQWlCO0VBQ2pCLGdCQUFnQjtFQUNoQiw2QkFBNkI7RUFDN0Isb0JBQW9CO0VBQ3BCLFlBQVk7RUFDWix5QkFBeUI7RUFDekIsZUFBZTtFQUNmLHVDQUF1QztBQUN6Qzs7QUFFQTtFQUNFLHlCQUF5QjtFQUN6QixnQkFBZ0I7RUFDaEIsaUJBQWlCO0VBQ2pCLG9CQUFvQjtFQUNwQixtQkFBbUI7RUFDbkIsdUJBQXVCO0FBQ3pCOztBQUVBO0VBQ0UsZ0NBQWdDO0FBQ2xDOztBQUVBO0VBQ0UsNEJBQTRCO0FBQzlCOztBQUVBO0VBQ0UsV0FBVztFQUNYLFlBQVk7RUFDWixjQUFjO0VBQ2Qsc0JBQXNCO0FBQ3hCOztBQUVBO0VBQ0UsNEJBQTRCO0FBQzlCOztBQUVBOztFQUVFLDRCQUE0QjtFQUM1QixtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSxZQUFZO0VBQ1osdUNBQXVDO0VBQ3ZDLHVDQUF1QztFQUN2QyxtQkFBbUI7RUFDbkIsZ0JBQWdCO0VBQ2hCLGlCQUFpQjtFQUNqQixlQUFlO0VBQ2Ysc0ZBQXNGO0FBQ3hGOztBQUVBO0VBQ0UsMkJBQTJCO0FBQzdCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQixZQUFZO0VBQ1osaUJBQWlCO0VBQ2pCLGVBQWU7RUFDZixrQkFBa0I7RUFDbEIsNkJBQTZCO0VBQzdCLGVBQWU7RUFDZixnQkFBZ0I7RUFDaEIsWUFBWTtFQUNaLGdCQUFnQjtFQUNoQixXQUFXO0FBQ2I7O0FBRUE7RUFDRSw0QkFBNEI7RUFDNUIsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLGlDQUFpQztBQUNuQzs7QUFFQTtFQUNFLDJCQUEyQjtFQUMzQiw0QkFBNEI7QUFDOUI7O0FBRUE7RUFDRSw4QkFBOEI7RUFDOUIsK0JBQStCO0FBQ2pDOztBQUVBO0VBQ0UsWUFBWTtFQUNaLGVBQWU7RUFDZixpQkFBaUI7RUFDakIsZ0JBQWdCO0VBQ2hCLDRCQUE0QjtBQUM5QlwiLHNvdXJjZXNDb250ZW50OltcIi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBnYXA6IDRweDtcXG4gIHBhZGRpbmc6IDRweCA2cHg7XFxuICBsaW5lLWhlaWdodDogMTZweDtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xcbiAgYm9yZGVyOiBub25lO1xcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTtcXG59XFxuXFxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlci10ZXh0IHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlci10ZXh0IC5wbHVzLWljb24ge1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMjVzIGVhc2U7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXItdGV4dDpob3ZlciAucGx1cy1pY29uIHtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTgwMCk7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXIgc3ZnIHtcXG4gIHdpZHRoOiAxNHB4O1xcbiAgaGVpZ2h0OiAxNHB4O1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyOmhvdmVyIHN2ZyB7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS03MDApO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyW2Rpc2FibGVkXSBzdmcsXFxuLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlcltkaXNhYmxlZF06aG92ZXIgc3ZnIHtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93biB7XFxuICBwYWRkaW5nOiA4cHg7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICBib3JkZXItcmFkaXVzOiAxNnB4O1xcbiAgbWluLXdpZHRoOiAxMjBweDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgYm94LXNoYWRvdzogMHB4IDRweCA4cHggLTRweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29sb3ItZ3JheS05MDApIDQlLCB0cmFuc3BhcmVudCk7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLXBvc2l0aW9uZXIge1xcbiAgei1pbmRleDogdmFyKC0tdG9wLXotaW5kZXgpO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgcGFkZGluZzogOHB4O1xcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIG1pbi13aWR0aDogMjIwcHg7XFxuICBib3JkZXI6IG5vbmU7XFxuICBiYWNrZ3JvdW5kOiBub25lO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW1bZGF0YS1kaXNhYmxlZF0ge1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW0gc3ZnIHtcXG4gIG1hcmdpbi1yaWdodDogMTJweDtcXG4gIGNvbG9yOiBjdXJyZW50Q29sb3I7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW06aG92ZXIge1xcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0yMDApO1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7XFxufVxcblxcbi5zZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW06bGFzdC1jaGlsZCB7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4O1xcbn1cXG5cXG4uc2VnbWVudC1ib3VuZGFyeS1ncm91cC1sYWJlbCB7XFxuICBwYWRkaW5nOiA4cHg7XFxuICBmb250LXNpemU6IDEzcHg7XFxuICBsaW5lLWhlaWdodDogMTZweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbn1cXG5cIl0sc291cmNlUm9vdDpcIlwifV0pO2xldCBsPWl9LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvb3ZlcnZpZXcvc2VnbWVudC1leHBsb3Jlci5jc3NcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7dC5kKG4se1o6KCk9Pmx9KTt2YXIgcj10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiKSxvPXQubihyKSxhPXQoXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIiksaT10Lm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxgLnNlZ21lbnQtZXhwbG9yZXItY29udGVudCB7XG4gIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XG4gIHBhZGRpbmc6IDAgOHB4O1xuICB3aWR0aDogNzAwcHg7XG4gIGhlaWdodDogNDAwcHg7XG4gIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDQwcHgpO1xuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjQwcHgpO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1wYWdlLXJvdXRlLWJhciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDE0cHggMTZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0yMDApO1xuICBnYXA6IDEycHg7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLXBhZ2Utcm91dGUtYmFyLXBhdGgge1xuICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xuICBmb250LXdlaWdodDogNTAwO1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1pdGVtIHtcbiAgbWFyZ2luOiA0cHggMDtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1pdGVtOm50aC1jaGlsZChldmVuKSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItaXRlbS1yb3cge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nLXRvcDogMTBweDtcbiAgcGFkZGluZy1ib3R0b206IDEwcHg7XG4gIHBhZGRpbmctcmlnaHQ6IDRweDtcbiAgd2hpdGUtc3BhY2U6IHByZTtcbiAgY3Vyc29yOiBkZWZhdWx0O1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItY2hpbGRyZW4tLWludGVuZGVkIHtcbiAgcGFkZGluZy1sZWZ0OiAxNnB4O1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1maWxlbmFtZSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICB3aWR0aDogMTAwJTtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUgc2VsZWN0IHtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGVuYW1lLS1wYXRoIHtcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xufVxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUtLXBhdGggc21hbGwge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAwO1xuICBvcGFjaXR5OiAwO1xufVxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUtLW5hbWUge1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS04MDApO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1maWxlcyB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBnYXA6IDhweDtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGVzICsgLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlciB7XG4gIG1hcmdpbi1sZWZ0OiA4cHg7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmc6IDRweCA2cHg7XG4gIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICBmb250LXNpemU6IHZhcigtLXNpemUtMTIpO1xuICBmb250LXdlaWdodDogNTAwO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTMwMCk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLS1vdmVycmlkZGVuIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYW1iZXItMzAwKTtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWFtYmVyLTkwMCk7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwgLmNvZGUtaWNvbiB7XG4gIG9wYWNpdHk6IDA7XG4gIG1hcmdpbi1sZWZ0OiAwO1xuICB3aWR0aDogMDtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2UtaW4tb3V0O1xufVxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbDpob3ZlciAuY29kZS1pY29uIHtcbiAgb3BhY2l0eTogMTtcbiAgd2lkdGg6IDEycHg7XG4gIG1hcmdpbi1sZWZ0OiA0cHg7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWw6aG92ZXIge1xuICBmaWx0ZXI6IGJyaWdodG5lc3MoMC45NSk7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtLWJ1aWx0aW4ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcbiAgYm9yZGVyOiAxcHggZGFzaGVkIHZhcigtLWNvbG9yLWdyYXktNTAwKTtcbiAgaGVpZ2h0OiAyNHB4O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLS1idWlsdGluIHN2ZyB7XG4gIG1hcmdpbi1sZWZ0OiA0cHg7XG4gIG1hcmdpbi1yaWdodDogLTRweDtcbn1cblxuLyogRm9vdGVyIHN0eWxlcyAqL1xuLnNlZ21lbnQtZXhwbG9yZXItZm9vdGVyIHtcbiAgcGFkZGluZzogOHB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1mb290ZXItYnV0dG9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGdhcDogOHB4O1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogNnB4O1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2U7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZvb3Rlci1idXR0b246aG92ZXI6bm90KDpkaXNhYmxlZCkge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZvb3Rlci1idXR0b24tLWRpc2FibGVkIHtcbiAgb3BhY2l0eTogMC41O1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xufVxuXG4uc2VnbWVudC1leHBsb3Jlci1mb290ZXItdGV4dCB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItZm9vdGVyLWJhZGdlIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtaW4td2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgcGFkZGluZzogMCA2cHg7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFtYmVyLTMwMCk7XG4gIGNvbG9yOiB2YXIoLS1jb2xvci1hbWJlci05MDApO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBmb250LXNpemU6IHZhcigtLXNpemUtMTIpO1xuICBmb250LXdlaWdodDogNjAwO1xuICBsaW5lLWhlaWdodDogMTtcbn1cblxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC10b29sdGlwLS1zbSB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtdG9vbHRpcC0tbGcge1xuICBtaW4td2lkdGg6IDIwMHB4O1xufVxuYCxcIlwiLHt2ZXJzaW9uOjMsc291cmNlczpbXCJ3ZWJwYWNrOi8vLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL292ZXJ2aWV3L3NlZ21lbnQtZXhwbG9yZXIuY3NzXCJdLG5hbWVzOltdLG1hcHBpbmdzOlwiQUFBQTtFQUNFLHlCQUF5QjtFQUN6QixjQUFjO0VBQ2QsWUFBWTtFQUNaLGFBQWE7RUFDYiw2QkFBNkI7RUFDN0IsK0JBQStCO0FBQ2pDOztBQUVBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQixrQkFBa0I7RUFDbEIsNkNBQTZDO0VBQzdDLFNBQVM7QUFDWDs7QUFFQTtFQUNFLHlCQUF5QjtFQUN6QixnQkFBZ0I7RUFDaEIsNkJBQTZCO0VBQzdCLDZCQUE2QjtFQUM3QixtQkFBbUI7RUFDbkIsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsYUFBYTtFQUNiLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLDZDQUE2QztBQUMvQzs7QUFFQTtFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsaUJBQWlCO0VBQ2pCLG9CQUFvQjtFQUNwQixrQkFBa0I7RUFDbEIsZ0JBQWdCO0VBQ2hCLGVBQWU7RUFDZiw2QkFBNkI7QUFDL0I7O0FBRUE7RUFDRSxrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxvQkFBb0I7RUFDcEIsV0FBVztFQUNYLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLGtCQUFrQjtBQUNwQjtBQUNBO0VBQ0UscUJBQXFCO0VBQ3JCLFFBQVE7RUFDUixVQUFVO0FBQ1o7QUFDQTtFQUNFLDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFLG9CQUFvQjtFQUNwQixRQUFRO0VBQ1IsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0Usb0JBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQix1QkFBdUI7RUFDdkIsZ0JBQWdCO0VBQ2hCLG1CQUFtQjtFQUNuQixpQkFBaUI7RUFDakIseUJBQXlCO0VBQ3pCLGdCQUFnQjtFQUNoQixpQkFBaUI7RUFDakIsZUFBZTtFQUNmLHVDQUF1QztFQUN2Qyw2QkFBNkI7QUFDL0I7O0FBRUE7RUFDRSx3Q0FBd0M7RUFDeEMsNkJBQTZCO0FBQy9COztBQUVBO0VBQ0UsVUFBVTtFQUNWLGNBQWM7RUFDZCxRQUFRO0VBQ1IsaUNBQWlDO0FBQ25DO0FBQ0E7RUFDRSxVQUFVO0VBQ1YsV0FBVztFQUNYLGdCQUFnQjtBQUNsQjs7QUFFQTtFQUNFLHdCQUF3QjtBQUMxQjs7QUFFQTtFQUNFLDZCQUE2QjtFQUM3Qiw0QkFBNEI7RUFDNUIsd0NBQXdDO0VBQ3hDLFlBQVk7RUFDWixlQUFlO0FBQ2pCO0FBQ0E7RUFDRSxnQkFBZ0I7RUFDaEIsa0JBQWtCO0FBQ3BCOztBQUVBLGtCQUFrQjtBQUNsQjtFQUNFLFlBQVk7RUFDWiwyQ0FBMkM7RUFDM0MsNkNBQTZDO0VBQzdDLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsdUJBQXVCO0VBQ3ZCLFFBQVE7RUFDUixXQUFXO0VBQ1gsWUFBWTtFQUNaLHVDQUF1QztFQUN2Qyx1Q0FBdUM7RUFDdkMsa0JBQWtCO0VBQ2xCLDZCQUE2QjtFQUM3Qix5QkFBeUI7RUFDekIsZ0JBQWdCO0VBQ2hCLGVBQWU7RUFDZix1Q0FBdUM7QUFDekM7O0FBRUE7RUFDRSxpQ0FBaUM7QUFDbkM7O0FBRUE7RUFDRSxZQUFZO0VBQ1osbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0Usb0JBQW9CO0VBQ3BCLG1CQUFtQjtFQUNuQix1QkFBdUI7RUFDdkIsZUFBZTtFQUNmLFlBQVk7RUFDWixjQUFjO0VBQ2Qsa0NBQWtDO0VBQ2xDLDZCQUE2QjtFQUM3QixtQkFBbUI7RUFDbkIseUJBQXlCO0VBQ3pCLGdCQUFnQjtFQUNoQixjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0UsZ0JBQWdCO0FBQ2xCXCIsc291cmNlc0NvbnRlbnQ6W1wiLnNlZ21lbnQtZXhwbG9yZXItY29udGVudCB7XFxuICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgcGFkZGluZzogMCA4cHg7XFxuICB3aWR0aDogNzAwcHg7XFxuICBoZWlnaHQ6IDQwMHB4O1xcbiAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gNDBweCk7XFxuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjQwcHgpO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1wYWdlLXJvdXRlLWJhciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IDE0cHggMTZweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG4gIGdhcDogMTJweDtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItcGFnZS1yb3V0ZS1iYXItcGF0aCB7XFxuICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtbW9ubyk7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWl0ZW0ge1xcbiAgbWFyZ2luOiA0cHggMDtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItaXRlbTpudGgtY2hpbGQoZXZlbikge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0yMDApO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1pdGVtLXJvdyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmctdG9wOiAxMHB4O1xcbiAgcGFkZGluZy1ib3R0b206IDEwcHg7XFxuICBwYWRkaW5nLXJpZ2h0OiA0cHg7XFxuICB3aGl0ZS1zcGFjZTogcHJlO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWNoaWxkcmVuLS1pbnRlbmRlZCB7XFxuICBwYWRkaW5nLWxlZnQ6IDE2cHg7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGVuYW1lIHtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlbmFtZSBzZWxlY3Qge1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGVuYW1lLS1wYXRoIHtcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXG59XFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUtLXBhdGggc21hbGwge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDA7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlbmFtZS0tbmFtZSB7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS04MDApO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlcyB7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIGdhcDogOHB4O1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGVzICsgLnNlZ21lbnQtYm91bmRhcnktdHJpZ2dlciB7XFxuICBtYXJnaW4tbGVmdDogOHB4O1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsIHtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgcGFkZGluZzogNHB4IDZweDtcXG4gIGJvcmRlci1yYWRpdXM6IDE2cHg7XFxuICBsaW5lLWhlaWdodDogMTZweDtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTMwMCk7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC0tb3ZlcnJpZGRlbiB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hbWJlci0zMDApO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWFtYmVyLTkwMCk7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwgLmNvZGUtaWNvbiB7XFxuICBvcGFjaXR5OiAwO1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxuICB3aWR0aDogMDtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlLWluLW91dDtcXG59XFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbDpob3ZlciAuY29kZS1pY29uIHtcXG4gIG9wYWNpdHk6IDE7XFxuICB3aWR0aDogMTJweDtcXG4gIG1hcmdpbi1sZWZ0OiA0cHg7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWw6aG92ZXIge1xcbiAgZmlsdGVyOiBicmlnaHRuZXNzKDAuOTUpO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLS1idWlsdGluIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gIGJvcmRlcjogMXB4IGRhc2hlZCB2YXIoLS1jb2xvci1ncmF5LTUwMCk7XFxuICBoZWlnaHQ6IDI0cHg7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxufVxcbi5zZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtLWJ1aWx0aW4gc3ZnIHtcXG4gIG1hcmdpbi1sZWZ0OiA0cHg7XFxuICBtYXJnaW4tcmlnaHQ6IC00cHg7XFxufVxcblxcbi8qIEZvb3RlciBzdHlsZXMgKi9cXG4uc2VnbWVudC1leHBsb3Jlci1mb290ZXIge1xcbiAgcGFkZGluZzogOHB4O1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1mb290ZXItYnV0dG9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBnYXA6IDhweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogNnB4O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZm9vdGVyLWJ1dHRvbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZvb3Rlci1idXR0b24tLWRpc2FibGVkIHtcXG4gIG9wYWNpdHk6IDAuNTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcblxcbi5zZWdtZW50LWV4cGxvcmVyLWZvb3Rlci10ZXh0IHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZm9vdGVyLWJhZGdlIHtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgbWluLXdpZHRoOiAyMHB4O1xcbiAgaGVpZ2h0OiAyMHB4O1xcbiAgcGFkZGluZzogMCA2cHg7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hbWJlci0zMDApO1xcbiAgY29sb3I6IHZhcigtLWNvbG9yLWFtYmVyLTkwMCk7XFxuICBib3JkZXItcmFkaXVzOiAxMHB4O1xcbiAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBsaW5lLWhlaWdodDogMTtcXG59XFxuXFxuLnNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC10b29sdGlwLS1zbSB7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG5cXG4uc2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLXRvb2x0aXAtLWxnIHtcXG4gIG1pbi13aWR0aDogMjAwcHg7XFxufVxcblwiXSxzb3VyY2VSb290OlwiXCJ9XSk7bGV0IGw9aX0sXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy90b2FzdC9zdHlsZS5jc3NcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7dC5kKG4se1o6KCk9Pmx9KTt2YXIgcj10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiKSxvPXQubihyKSxhPXQoXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIiksaT10Lm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxgLm5leHRqcy10b2FzdCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgei1pbmRleDogdmFyKC0tdG9wLXotaW5kZXgpO1xuICBtYXgtd2lkdGg6IDQyMHB4O1xuICBib3gtc2hhZG93OiAwcHggMTZweCAzMnB4IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG59XG5cbi5uZXh0anMtdG9hc3QtZXJyb3JzLXBhcmVudCB7XG4gIHBhZGRpbmc6IDE2cHg7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtNHhsKTtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktYnJpZ2h0LXdoaXRlKTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYW5zaS1yZWQpO1xufVxuYCxcIlwiLHt2ZXJzaW9uOjMsc291cmNlczpbXCJ3ZWJwYWNrOi8vLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL3RvYXN0L3N0eWxlLmNzc1wiXSxuYW1lczpbXSxtYXBwaW5nczpcIkFBQUE7RUFDRSxlQUFlO0VBQ2YsMkJBQTJCO0VBQzNCLGdCQUFnQjtFQUNoQiw2Q0FBNkM7QUFDL0M7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsaUNBQWlDO0VBQ2pDLGdCQUFnQjtFQUNoQixxQ0FBcUM7RUFDckMsdUNBQXVDO0FBQ3pDXCIsc291cmNlc0NvbnRlbnQ6W1wiLm5leHRqcy10b2FzdCB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB6LWluZGV4OiB2YXIoLS10b3Atei1pbmRleCk7XFxuICBtYXgtd2lkdGg6IDQyMHB4O1xcbiAgYm94LXNoYWRvdzogMHB4IDE2cHggMzJweCByZ2JhKDAsIDAsIDAsIDAuMjUpO1xcbn1cXG5cXG4ubmV4dGpzLXRvYXN0LWVycm9ycy1wYXJlbnQge1xcbiAgcGFkZGluZzogMTZweDtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtNHhsKTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBjb2xvcjogdmFyKC0tY29sb3ItYW5zaS1icmlnaHQtd2hpdGUpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYW5zaS1yZWQpO1xcbn1cXG5cIl0sc291cmNlUm9vdDpcIlwifV0pO2xldCBsPWl9LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2dsb2JhbC5jc3NcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7dC5kKG4se1o6KCk9Pmx9KTt2YXIgcj10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiKSxvPXQubihyKSxhPXQoXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIiksaT10Lm4oYSkoKShvKCkpO2kucHVzaChbZS5pZCxgLyogZGV2dG9vbCBnbG9iYWwgY3NzIHZhcmlhYmxlcyAqL1xuOmhvc3Qge1xuICAtLXRvcC16LWluZGV4OiAyMTQ3NDgzNjQ3O1xufVxuYCxcIlwiLHt2ZXJzaW9uOjMsc291cmNlczpbXCJ3ZWJwYWNrOi8vLi9zcmMvbmV4dC1kZXZ0b29scy9nbG9iYWwuY3NzXCJdLG5hbWVzOltdLG1hcHBpbmdzOlwiQUFBQSxpQ0FBaUM7QUFDakM7RUFDRSx5QkFBeUI7QUFDM0JcIixzb3VyY2VzQ29udGVudDpbXCIvKiBkZXZ0b29sIGdsb2JhbCBjc3MgdmFyaWFibGVzICovXFxuOmhvc3Qge1xcbiAgLS10b3Atei1pbmRleDogMjE0NzQ4MzY0NztcXG59XFxuXCJdLHNvdXJjZVJvb3Q6XCJcIn1dKTtsZXQgbD1pfSxcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiOmZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgbj1bXTtyZXR1cm4gbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbihuKXt2YXIgdD1cIlwiLHI9dm9pZCAwIT09bls1XTtyZXR1cm4gbls0XSYmKHQrPVwiQHN1cHBvcnRzIChcIi5jb25jYXQobls0XSxcIikge1wiKSksblsyXSYmKHQrPVwiQG1lZGlhIFwiLmNvbmNhdChuWzJdLFwiIHtcIikpLHImJih0Kz1cIkBsYXllclwiLmNvbmNhdChuWzVdLmxlbmd0aD4wP1wiIFwiLmNvbmNhdChuWzVdKTpcIlwiLFwiIHtcIikpLHQrPWUobiksciYmKHQrPVwifVwiKSxuWzJdJiYodCs9XCJ9XCIpLG5bNF0mJih0Kz1cIn1cIiksdH0pLmpvaW4oXCJcIil9LG4uaT1mdW5jdGlvbihlLHQscixvLGEpe1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1bW251bGwsZSx2b2lkIDBdXSk7dmFyIGk9e307aWYocilmb3IodmFyIGw9MDtsPHRoaXMubGVuZ3RoO2wrKyl7dmFyIHM9dGhpc1tsXVswXTtudWxsIT1zJiYoaVtzXT0hMCl9Zm9yKHZhciBjPTA7YzxlLmxlbmd0aDtjKyspe3ZhciB1PVtdLmNvbmNhdChlW2NdKTtyJiZpW3VbMF1dfHwodm9pZCAwIT09YSYmKHZvaWQgMD09PXVbNV18fCh1WzFdPVwiQGxheWVyXCIuY29uY2F0KHVbNV0ubGVuZ3RoPjA/XCIgXCIuY29uY2F0KHVbNV0pOlwiXCIsXCIge1wiKS5jb25jYXQodVsxXSxcIn1cIikpLHVbNV09YSksdCYmKHVbMl0mJih1WzFdPVwiQG1lZGlhIFwiLmNvbmNhdCh1WzJdLFwiIHtcIikuY29uY2F0KHVbMV0sXCJ9XCIpKSx1WzJdPXQpLG8mJih1WzRdPyh1WzFdPVwiQHN1cHBvcnRzIChcIi5jb25jYXQodVs0XSxcIikge1wiKS5jb25jYXQodVsxXSxcIn1cIiksdVs0XT1vKTp1WzRdPVwiXCIuY29uY2F0KG8pKSxuLnB1c2godSkpfX0sbn19LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiOmZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgbj1lWzFdLHQ9ZVszXTtpZighdClyZXR1cm4gbjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBidG9hKXt2YXIgcj1idG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSh0KSkpKTtyZXR1cm5bbl0uY29uY2F0KFtcIi8qIyBcIi5jb25jYXQoXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQociksXCIgKi9cIildKS5qb2luKFwiXFxuXCIpfXJldHVybltuXS5qb2luKFwiXFxuXCIpfX0sXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjpmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1bXTtmdW5jdGlvbiB0KGUpe2Zvcih2YXIgdD0tMSxyPTA7cjxuLmxlbmd0aDtyKyspaWYobltyXS5pZGVudGlmaWVyPT09ZSl7dD1yO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIHIoZSxyKXtmb3IodmFyIG89e30sYT1bXSxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBsPWVbaV0scz1yLmJhc2U/bFswXStyLmJhc2U6bFswXSxjPW9bc118fDAsdT1cIlwiLmNvbmNhdChzLFwiIFwiKS5jb25jYXQoYyk7b1tzXT1jKzE7dmFyIGQ9dCh1KSxmPXtjc3M6bFsxXSxtZWRpYTpsWzJdLHNvdXJjZU1hcDpsWzNdLHN1cHBvcnRzOmxbNF0sbGF5ZXI6bFs1XX07aWYoLTEhPT1kKW5bZF0ucmVmZXJlbmNlcysrLG5bZF0udXBkYXRlcihmKTtlbHNle3ZhciBwPWZ1bmN0aW9uKGUsbil7dmFyIHQ9bi5kb21BUEkobik7cmV0dXJuIHQudXBkYXRlKGUpLGZ1bmN0aW9uKG4pe24/KG4uY3NzIT09ZS5jc3N8fG4ubWVkaWEhPT1lLm1lZGlhfHxuLnNvdXJjZU1hcCE9PWUuc291cmNlTWFwfHxuLnN1cHBvcnRzIT09ZS5zdXBwb3J0c3x8bi5sYXllciE9PWUubGF5ZXIpJiZ0LnVwZGF0ZShlPW4pOnQucmVtb3ZlKCl9fShmLHIpO3IuYnlJbmRleD1pLG4uc3BsaWNlKGksMCx7aWRlbnRpZmllcjp1LHVwZGF0ZXI6cCxyZWZlcmVuY2VzOjF9KX1hLnB1c2godSl9cmV0dXJuIGF9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsbyl7dmFyIGE9cihlPWV8fFtdLG89b3x8e30pO3JldHVybiBmdW5jdGlvbihlKXtlPWV8fFtdO2Zvcih2YXIgaT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgbD10KGFbaV0pO25bbF0ucmVmZXJlbmNlcy0tfWZvcih2YXIgcz1yKGUsbyksYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT10KGFbY10pOzA9PT1uW3VdLnJlZmVyZW5jZXMmJihuW3VdLnVwZGF0ZXIoKSxuLnNwbGljZSh1LDEpKX1hPXN9fX0sXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjpmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO3JldHVybiBlLnNldEF0dHJpYnV0ZXMobixlLmF0dHJpYnV0ZXMpLGUuaW5zZXJ0KG4sZS5vcHRpb25zKSxufX0sXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciBuPXQubmM7biYmZS5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLG4pfX0sXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiOmZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgZG9jdW1lbnQpcmV0dXJue3VwZGF0ZTpmdW5jdGlvbigpe30scmVtb3ZlOmZ1bmN0aW9uKCl7fX07dmFyIG49ZS5pbnNlcnRTdHlsZUVsZW1lbnQoZSk7cmV0dXJue3VwZGF0ZTpmdW5jdGlvbih0KXt2YXIgcixvLGE7cj1cIlwiLHQuc3VwcG9ydHMmJihyKz1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KHQuc3VwcG9ydHMsXCIpIHtcIikpLHQubWVkaWEmJihyKz1cIkBtZWRpYSBcIi5jb25jYXQodC5tZWRpYSxcIiB7XCIpKSwobz12b2lkIDAhPT10LmxheWVyKSYmKHIrPVwiQGxheWVyXCIuY29uY2F0KHQubGF5ZXIubGVuZ3RoPjA/XCIgXCIuY29uY2F0KHQubGF5ZXIpOlwiXCIsXCIge1wiKSkscis9dC5jc3MsbyYmKHIrPVwifVwiKSx0Lm1lZGlhJiYocis9XCJ9XCIpLHQuc3VwcG9ydHMmJihyKz1cIn1cIiksKGE9dC5zb3VyY2VNYXApJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgYnRvYSYmKHIrPVwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoYSkpKSksXCIgKi9cIikpLGUuc3R5bGVUYWdUcmFuc2Zvcm0ocixuLGUub3B0aW9ucyl9LHJlbW92ZTpmdW5jdGlvbigpeyFmdW5jdGlvbihlKXtpZihudWxsIT09ZS5wYXJlbnROb2RlKWUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKX0obil9fX19LFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjpmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSxuKXtpZihuLnN0eWxlU2hlZXQpbi5zdHlsZVNoZWV0LmNzc1RleHQ9ZTtlbHNle2Zvcig7bi5maXJzdENoaWxkOyluLnJlbW92ZUNoaWxkKG4uZmlyc3RDaGlsZCk7bi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9fX0sXCIuL2Rpc3QvY29tcGlsZWQvYW5zZXIvaW5kZXguanNcIjpmdW5jdGlvbihlKXsoKCk9PntcInVzZSBzdHJpY3RcIjt2YXIgbj17MjExOmU9Pnt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSxuKXtmb3IodmFyIHQ9MDt0PG4ubGVuZ3RoO3QrKyl7dmFyIHI9blt0XTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihuLHQscil7cmV0dXJuIHQmJmUobi5wcm90b3R5cGUsdCksciYmZShuLHIpLG59fSgpLHQ9W1t7Y29sb3I6XCIwLCAwLCAwXCIsY2xhc3M6XCJhbnNpLWJsYWNrXCJ9LHtjb2xvcjpcIjE4NywgMCwgMFwiLGNsYXNzOlwiYW5zaS1yZWRcIn0se2NvbG9yOlwiMCwgMTg3LCAwXCIsY2xhc3M6XCJhbnNpLWdyZWVuXCJ9LHtjb2xvcjpcIjE4NywgMTg3LCAwXCIsY2xhc3M6XCJhbnNpLXllbGxvd1wifSx7Y29sb3I6XCIwLCAwLCAxODdcIixjbGFzczpcImFuc2ktYmx1ZVwifSx7Y29sb3I6XCIxODcsIDAsIDE4N1wiLGNsYXNzOlwiYW5zaS1tYWdlbnRhXCJ9LHtjb2xvcjpcIjAsIDE4NywgMTg3XCIsY2xhc3M6XCJhbnNpLWN5YW5cIn0se2NvbG9yOlwiMjU1LDI1NSwyNTVcIixjbGFzczpcImFuc2ktd2hpdGVcIn1dLFt7Y29sb3I6XCI4NSwgODUsIDg1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC1ibGFja1wifSx7Y29sb3I6XCIyNTUsIDg1LCA4NVwiLGNsYXNzOlwiYW5zaS1icmlnaHQtcmVkXCJ9LHtjb2xvcjpcIjAsIDI1NSwgMFwiLGNsYXNzOlwiYW5zaS1icmlnaHQtZ3JlZW5cIn0se2NvbG9yOlwiMjU1LCAyNTUsIDg1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC15ZWxsb3dcIn0se2NvbG9yOlwiODUsIDg1LCAyNTVcIixjbGFzczpcImFuc2ktYnJpZ2h0LWJsdWVcIn0se2NvbG9yOlwiMjU1LCA4NSwgMjU1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC1tYWdlbnRhXCJ9LHtjb2xvcjpcIjg1LCAyNTUsIDI1NVwiLGNsYXNzOlwiYW5zaS1icmlnaHQtY3lhblwifSx7Y29sb3I6XCIyNTUsIDI1NSwgMjU1XCIsY2xhc3M6XCJhbnNpLWJyaWdodC13aGl0ZVwifV1dO2UuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBlKSl0aHJvdyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7dGhpcy5mZz10aGlzLmJnPXRoaXMuZmdfdHJ1ZWNvbG9yPXRoaXMuYmdfdHJ1ZWNvbG9yPW51bGwsdGhpcy5icmlnaHQ9MH1yZXR1cm4gbihlLG51bGwsW3trZXk6XCJlc2NhcGVGb3JIdG1sXCIsdmFsdWU6ZnVuY3Rpb24obil7cmV0dXJuKG5ldyBlKS5lc2NhcGVGb3JIdG1sKG4pfX0se2tleTpcImxpbmtpZnlcIix2YWx1ZTpmdW5jdGlvbihuKXtyZXR1cm4obmV3IGUpLmxpbmtpZnkobil9fSx7a2V5OlwiYW5zaVRvSHRtbFwiLHZhbHVlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuKG5ldyBlKS5hbnNpVG9IdG1sKG4sdCl9fSx7a2V5OlwiYW5zaVRvSnNvblwiLHZhbHVlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuKG5ldyBlKS5hbnNpVG9Kc29uKG4sdCl9fSx7a2V5OlwiYW5zaVRvVGV4dFwiLHZhbHVlOmZ1bmN0aW9uKG4pe3JldHVybihuZXcgZSkuYW5zaVRvVGV4dChuKX19XSksbihlLFt7a2V5Olwic2V0dXBQYWxldHRlXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLlBBTEVUVEVfQ09MT1JTPVtdO2Zvcih2YXIgZT0wO2U8MjsrK2UpZm9yKHZhciBuPTA7bjw4Oysrbil0aGlzLlBBTEVUVEVfQ09MT1JTLnB1c2godFtlXVtuXS5jb2xvcik7Zm9yKHZhciByPVswLDk1LDEzNSwxNzUsMjE1LDI1NV0sbz1mdW5jdGlvbihlLG4sdCl7cmV0dXJuIHJbZV0rXCIsIFwiK3Jbbl0rXCIsIFwiK3JbdF19LGE9MDthPDY7KythKWZvcih2YXIgaT0wO2k8NjsrK2kpZm9yKHZhciBsPTA7bDw2OysrbCl0aGlzLlBBTEVUVEVfQ09MT1JTLnB1c2gobyhhLGksbCkpO2Zvcih2YXIgcz04LGM9MDtjPDI0OysrYyxzKz0xMCl0aGlzLlBBTEVUVEVfQ09MT1JTLnB1c2gobyhzLHMscykpfX0se2tleTpcImVzY2FwZUZvckh0bWxcIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bJjw+XS9nbSxmdW5jdGlvbihlKXtyZXR1cm5cIiZcIj09ZT9cIiZhbXA7XCI6XCI8XCI9PWU/XCImbHQ7XCI6XCI+XCI9PWU/XCImZ3Q7XCI6XCJcIn0pfX0se2tleTpcImxpbmtpZnlcIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8oaHR0cHM/OlxcL1xcL1teXFxzXSspL2dtLGZ1bmN0aW9uKGUpe3JldHVybic8YSBocmVmPVwiJytlKydcIj4nK2UrXCI8L2E+XCJ9KX19LHtrZXk6XCJhbnNpVG9IdG1sXCIsdmFsdWU6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5wcm9jZXNzKGUsbiwhMCl9fSx7a2V5OlwiYW5zaVRvSnNvblwiLHZhbHVlOmZ1bmN0aW9uKGUsbil7cmV0dXJuKG49bnx8e30pLmpzb249ITAsbi5jbGVhckxpbmU9ITEsdGhpcy5wcm9jZXNzKGUsbiwhMCl9fSx7a2V5OlwiYW5zaVRvVGV4dFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByb2Nlc3MoZSx7fSwhMSl9fSx7a2V5OlwicHJvY2Vzc1wiLHZhbHVlOmZ1bmN0aW9uKGUsbix0KXt2YXIgcj10aGlzLG89ZS5zcGxpdCgvXFwwMzNcXFsvKSxhPW8uc2hpZnQoKTtudWxsPT1uJiYobj17fSksbi5jbGVhckxpbmU9L1xcci8udGVzdChlKTt2YXIgaT1vLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gci5wcm9jZXNzQ2h1bmsoZSxuLHQpfSk7aWYobiYmbi5qc29uKXt2YXIgbD10aGlzLnByb2Nlc3NDaHVua0pzb24oXCJcIik7cmV0dXJuIGwuY29udGVudD1hLGwuY2xlYXJMaW5lPW4uY2xlYXJMaW5lLGkudW5zaGlmdChsKSxuLnJlbW92ZV9lbXB0eSYmKGk9aS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuaXNFbXB0eSgpfSkpLGl9cmV0dXJuIGkudW5zaGlmdChhKSxpLmpvaW4oXCJcIil9fSx7a2V5OlwicHJvY2Vzc0NodW5rSnNvblwiLHZhbHVlOmZ1bmN0aW9uKGUsbixyKXt2YXIgbz0obj12b2lkIDA9PT1uP3t9Om4pLnVzZV9jbGFzc2VzPXZvaWQgMCE9PW4udXNlX2NsYXNzZXMmJm4udXNlX2NsYXNzZXMsYT1uLmtleT1vP1wiY2xhc3NcIjpcImNvbG9yXCIsaT17Y29udGVudDplLGZnOm51bGwsYmc6bnVsbCxmZ190cnVlY29sb3I6bnVsbCxiZ190cnVlY29sb3I6bnVsbCxjbGVhckxpbmU6bi5jbGVhckxpbmUsZGVjb3JhdGlvbjpudWxsLHdhc19wcm9jZXNzZWQ6ITEsaXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiFpLmNvbnRlbnR9fSxsPWUubWF0Y2goL14oWyFcXHgzYy1cXHgzZl0qKShbXFxkO10qKShbXFx4MjAtXFx4MmNdKltcXHg0MC1cXHg3ZV0pKFtcXHNcXFNdKikvbSk7aWYoIWwpcmV0dXJuIGk7aS5jb250ZW50PWxbNF07dmFyIHM9bFsyXS5zcGxpdChcIjtcIik7aWYoXCJcIiE9PWxbMV18fFwibVwiIT09bFszXXx8IXIpcmV0dXJuIGk7Zm9yKHRoaXMuZGVjb3JhdGlvbj1udWxsO3MubGVuZ3RoPjA7KXt2YXIgYz1wYXJzZUludChzLnNoaWZ0KCkpO2lmKGlzTmFOKGMpfHwwPT09Yyl0aGlzLmZnPXRoaXMuYmc9dGhpcy5kZWNvcmF0aW9uPW51bGw7ZWxzZSBpZigxPT09Yyl0aGlzLmRlY29yYXRpb249XCJib2xkXCI7ZWxzZSBpZigyPT09Yyl0aGlzLmRlY29yYXRpb249XCJkaW1cIjtlbHNlIGlmKDM9PWMpdGhpcy5kZWNvcmF0aW9uPVwiaXRhbGljXCI7ZWxzZSBpZig0PT1jKXRoaXMuZGVjb3JhdGlvbj1cInVuZGVybGluZVwiO2Vsc2UgaWYoNT09Yyl0aGlzLmRlY29yYXRpb249XCJibGlua1wiO2Vsc2UgaWYoNz09PWMpdGhpcy5kZWNvcmF0aW9uPVwicmV2ZXJzZVwiO2Vsc2UgaWYoOD09PWMpdGhpcy5kZWNvcmF0aW9uPVwiaGlkZGVuXCI7ZWxzZSBpZig5PT09Yyl0aGlzLmRlY29yYXRpb249XCJzdHJpa2V0aHJvdWdoXCI7ZWxzZSBpZigzOT09Yyl0aGlzLmZnPW51bGw7ZWxzZSBpZig0OT09Yyl0aGlzLmJnPW51bGw7ZWxzZSBpZihjPj0zMCYmYzwzOCl0aGlzLmZnPXRbMF1bYyUxMF1bYV07ZWxzZSBpZihjPj05MCYmYzw5OCl0aGlzLmZnPXRbMV1bYyUxMF1bYV07ZWxzZSBpZihjPj00MCYmYzw0OCl0aGlzLmJnPXRbMF1bYyUxMF1bYV07ZWxzZSBpZihjPj0xMDAmJmM8MTA4KXRoaXMuYmc9dFsxXVtjJTEwXVthXTtlbHNlIGlmKDM4PT09Y3x8NDg9PT1jKXt2YXIgdT0zOD09PWM7aWYocy5sZW5ndGg+PTEpe3ZhciBkPXMuc2hpZnQoKTtpZihcIjVcIj09PWQmJnMubGVuZ3RoPj0xKXt2YXIgZj1wYXJzZUludChzLnNoaWZ0KCkpO2lmKGY+PTAmJmY8PTI1NSlpZihvKXt2YXIgcD1mPj0xNj9cImFuc2ktcGFsZXR0ZS1cIitmOnRbKyhmPjcpXVtmJThdLmNsYXNzO3U/dGhpcy5mZz1wOnRoaXMuYmc9cH1lbHNlIHRoaXMuUEFMRVRURV9DT0xPUlN8fHRoaXMuc2V0dXBQYWxldHRlKCksdT90aGlzLmZnPXRoaXMuUEFMRVRURV9DT0xPUlNbZl06dGhpcy5iZz10aGlzLlBBTEVUVEVfQ09MT1JTW2ZdfWVsc2UgaWYoXCIyXCI9PT1kJiZzLmxlbmd0aD49Myl7dmFyIGg9cGFyc2VJbnQocy5zaGlmdCgpKSxnPXBhcnNlSW50KHMuc2hpZnQoKSksbT1wYXJzZUludChzLnNoaWZ0KCkpO2lmKGg+PTAmJmg8PTI1NSYmZz49MCYmZzw9MjU1JiZtPj0wJiZtPD0yNTUpe3ZhciB2PWgrXCIsIFwiK2crXCIsIFwiK207bz91Pyh0aGlzLmZnPVwiYW5zaS10cnVlY29sb3JcIix0aGlzLmZnX3RydWVjb2xvcj12KToodGhpcy5iZz1cImFuc2ktdHJ1ZWNvbG9yXCIsdGhpcy5iZ190cnVlY29sb3I9dik6dT90aGlzLmZnPXY6dGhpcy5iZz12fX19fX1yZXR1cm4gbnVsbD09PXRoaXMuZmcmJm51bGw9PT10aGlzLmJnJiZudWxsPT09dGhpcy5kZWNvcmF0aW9ufHwoaS5mZz10aGlzLmZnLGkuYmc9dGhpcy5iZyxpLmZnX3RydWVjb2xvcj10aGlzLmZnX3RydWVjb2xvcixpLmJnX3RydWVjb2xvcj10aGlzLmJnX3RydWVjb2xvcixpLmRlY29yYXRpb249dGhpcy5kZWNvcmF0aW9uLGkud2FzX3Byb2Nlc3NlZD0hMCksaX19LHtrZXk6XCJwcm9jZXNzQ2h1bmtcIix2YWx1ZTpmdW5jdGlvbihlLG4sdCl7dmFyIHI9dGhpcztuPW58fHt9O3ZhciBvPXRoaXMucHJvY2Vzc0NodW5rSnNvbihlLG4sdCk7aWYobi5qc29uKXJldHVybiBvO2lmKG8uaXNFbXB0eSgpKXJldHVyblwiXCI7aWYoIW8ud2FzX3Byb2Nlc3NlZClyZXR1cm4gby5jb250ZW50O3ZhciBhPW4udXNlX2NsYXNzZXMsaT1bXSxsPVtdLHM9e30sYz1mdW5jdGlvbihlKXt2YXIgbj1bXSx0PXZvaWQgMDtmb3IodCBpbiBlKWUuaGFzT3duUHJvcGVydHkodCkmJm4ucHVzaChcImRhdGEtXCIrdCsnPVwiJytyLmVzY2FwZUZvckh0bWwoZVt0XSkrJ1wiJyk7cmV0dXJuIG4ubGVuZ3RoPjA/XCIgXCIrbi5qb2luKFwiIFwiKTpcIlwifTtyZXR1cm4oby5mZyYmKGE/KGwucHVzaChvLmZnK1wiLWZnXCIpLG51bGwhPT1vLmZnX3RydWVjb2xvciYmKHNbXCJhbnNpLXRydWVjb2xvci1mZ1wiXT1vLmZnX3RydWVjb2xvcixvLmZnX3RydWVjb2xvcj1udWxsKSk6aS5wdXNoKFwiY29sb3I6cmdiKFwiK28uZmcrXCIpXCIpKSxvLmJnJiYoYT8obC5wdXNoKG8uYmcrXCItYmdcIiksbnVsbCE9PW8uYmdfdHJ1ZWNvbG9yJiYoc1tcImFuc2ktdHJ1ZWNvbG9yLWJnXCJdPW8uYmdfdHJ1ZWNvbG9yLG8uYmdfdHJ1ZWNvbG9yPW51bGwpKTppLnB1c2goXCJiYWNrZ3JvdW5kLWNvbG9yOnJnYihcIitvLmJnK1wiKVwiKSksby5kZWNvcmF0aW9uJiYoYT9sLnB1c2goXCJhbnNpLVwiK28uZGVjb3JhdGlvbik6XCJib2xkXCI9PT1vLmRlY29yYXRpb24/aS5wdXNoKFwiZm9udC13ZWlnaHQ6Ym9sZFwiKTpcImRpbVwiPT09by5kZWNvcmF0aW9uP2kucHVzaChcIm9wYWNpdHk6MC41XCIpOlwiaXRhbGljXCI9PT1vLmRlY29yYXRpb24/aS5wdXNoKFwiZm9udC1zdHlsZTppdGFsaWNcIik6XCJyZXZlcnNlXCI9PT1vLmRlY29yYXRpb24/aS5wdXNoKFwiZmlsdGVyOmludmVydCgxMDAlKVwiKTpcImhpZGRlblwiPT09by5kZWNvcmF0aW9uP2kucHVzaChcInZpc2liaWxpdHk6aGlkZGVuXCIpOlwic3RyaWtldGhyb3VnaFwiPT09by5kZWNvcmF0aW9uP2kucHVzaChcInRleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2hcIik6aS5wdXNoKFwidGV4dC1kZWNvcmF0aW9uOlwiK28uZGVjb3JhdGlvbikpLGEpPyc8c3BhbiBjbGFzcz1cIicrbC5qb2luKFwiIFwiKSsnXCInK2MocykrXCI+XCIrby5jb250ZW50K1wiPC9zcGFuPlwiOic8c3BhbiBzdHlsZT1cIicraS5qb2luKFwiO1wiKSsnXCInK2MocykrXCI+XCIrby5jb250ZW50K1wiPC9zcGFuPlwifX1dKSxlfSgpfX0sdD17fTtmdW5jdGlvbiByKGUpe3ZhciBvPXRbZV07aWYodm9pZCAwIT09bylyZXR1cm4gby5leHBvcnRzO3ZhciBhPXRbZV09e2V4cG9ydHM6e319LGk9ITA7dHJ5e25bZV0oYSxhLmV4cG9ydHMsciksaT0hMX1maW5hbGx5e2kmJmRlbGV0ZSB0W2VdfXJldHVybiBhLmV4cG9ydHN9ci5hYj1cIi8vXCIsZS5leHBvcnRzPXIoMjExKX0pKCl9LFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9janMvcmVhY3QtZG9tLWNsaWVudC5wcm9kdWN0aW9uLmpzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3ZhciByLG89dChcIi4vZGlzdC9jb21waWxlZC9zY2hlZHVsZXIvaW5kZXguanNcIiksYT10KFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0L2luZGV4LmpzXCIpLGk9dChcIi4vZGlzdC9jb21waWxlZC9yZWFjdC1kb20vaW5kZXguanNcIik7ZnVuY3Rpb24gbChlKXt2YXIgbj1cImh0dHBzOi8vcmVhY3QuZGV2L2Vycm9ycy9cIitlO2lmKDE8YXJndW1lbnRzLmxlbmd0aCl7bis9XCI/YXJnc1tdPVwiK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbMV0pO2Zvcih2YXIgdD0yO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspbis9XCImYXJnc1tdPVwiK2VuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbdF0pfXJldHVyblwiTWluaWZpZWQgUmVhY3QgZXJyb3IgI1wiK2UrXCI7IHZpc2l0IFwiK24rXCIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLlwifWZ1bmN0aW9uIHMoZSl7dmFyIG49ZSx0PWU7aWYoZS5hbHRlcm5hdGUpZm9yKDtuLnJldHVybjspbj1uLnJldHVybjtlbHNle2U9bjtkbyAwIT0oNDA5OCYobj1lKS5mbGFncykmJih0PW4ucmV0dXJuKSxlPW4ucmV0dXJuO3doaWxlKGUpfXJldHVybiAzPT09bi50YWc/dDpudWxsfWZ1bmN0aW9uIGMoZSl7aWYoMTM9PT1lLnRhZyl7dmFyIG49ZS5tZW1vaXplZFN0YXRlO2lmKG51bGw9PT1uJiZudWxsIT09KGU9ZS5hbHRlcm5hdGUpJiYobj1lLm1lbW9pemVkU3RhdGUpLG51bGwhPT1uKXJldHVybiBuLmRlaHlkcmF0ZWR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdShlKXtpZigzMT09PWUudGFnKXt2YXIgbj1lLm1lbW9pemVkU3RhdGU7aWYobnVsbD09PW4mJm51bGwhPT0oZT1lLmFsdGVybmF0ZSkmJihuPWUubWVtb2l6ZWRTdGF0ZSksbnVsbCE9PW4pcmV0dXJuIG4uZGVoeWRyYXRlZH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBkKGUpe2lmKHMoZSkhPT1lKXRocm93IEVycm9yKGwoMTg4KSl9dmFyIGY9T2JqZWN0LmFzc2lnbixwPVN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLGg9U3ltYm9sLmZvcihcInJlYWN0LnRyYW5zaXRpb25hbC5lbGVtZW50XCIpLGc9U3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxtPVN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSx2PVN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxiPVN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKSx5PVN5bWJvbC5mb3IoXCJyZWFjdC5jb25zdW1lclwiKSx4PVN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLHc9U3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLGo9U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLGs9U3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIiksQT1TeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxPPVN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpO1N5bWJvbC5mb3IoXCJyZWFjdC5zY29wZVwiKTt2YXIgQz1TeW1ib2wuZm9yKFwicmVhY3QuYWN0aXZpdHlcIik7U3ltYm9sLmZvcihcInJlYWN0LmxlZ2FjeV9oaWRkZW5cIiksU3ltYm9sLmZvcihcInJlYWN0LnRyYWNpbmdfbWFya2VyXCIpO3ZhciBTPVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpO1N5bWJvbC5mb3IoXCJyZWFjdC52aWV3X3RyYW5zaXRpb25cIik7dmFyIEU9U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIF8oZSl7cmV0dXJuIG51bGw9PT1lfHxcIm9iamVjdFwiIT10eXBlb2YgZT9udWxsOlwiZnVuY3Rpb25cIj09dHlwZW9mKGU9RSYmZVtFXXx8ZVtcIkBAaXRlcmF0b3JcIl0pP2U6bnVsbH12YXIgUD1TeW1ib2wuZm9yKFwicmVhY3QuY2xpZW50LnJlZmVyZW5jZVwiKSx6PUFycmF5LmlzQXJyYXksTD1hLl9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxUPWkuX19ET01fSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFLFI9e3BlbmRpbmc6ITEsZGF0YTpudWxsLG1ldGhvZDpudWxsLGFjdGlvbjpudWxsfSxOPVtdLEQ9LTE7ZnVuY3Rpb24gQihlKXtyZXR1cm57Y3VycmVudDplfX1mdW5jdGlvbiBNKGUpezA+RHx8KGUuY3VycmVudD1OW0RdLE5bRF09bnVsbCxELS0pfWZ1bmN0aW9uIEkoZSxuKXtOWysrRF09ZS5jdXJyZW50LGUuY3VycmVudD1ufXZhciBIPUIobnVsbCksRj1CKG51bGwpLFU9QihudWxsKSxWPUIobnVsbCk7ZnVuY3Rpb24gcShlLG4pe3N3aXRjaChJKFUsbiksSShGLGUpLEkoSCxudWxsKSxuLm5vZGVUeXBlKXtjYXNlIDk6Y2FzZSAxMTplPShlPW4uZG9jdW1lbnRFbGVtZW50KSYmKGU9ZS5uYW1lc3BhY2VVUkkpP2NwKGUpOjA7YnJlYWs7ZGVmYXVsdDppZihlPW4udGFnTmFtZSxuPW4ubmFtZXNwYWNlVVJJKWU9Y2gobj1jcChuKSxlKTtlbHNlIHN3aXRjaChlKXtjYXNlXCJzdmdcIjplPTE7YnJlYWs7Y2FzZVwibWF0aFwiOmU9MjticmVhaztkZWZhdWx0OmU9MH19TShIKSxJKEgsZSl9ZnVuY3Rpb24gVygpe00oSCksTShGKSxNKFUpfWZ1bmN0aW9uICQoZSl7bnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmSShWLGUpO3ZhciBuPUguY3VycmVudCx0PWNoKG4sZS50eXBlKTtuIT09dCYmKEkoRixlKSxJKEgsdCkpfWZ1bmN0aW9uIFooZSl7Ri5jdXJyZW50PT09ZSYmKE0oSCksTShGKSksVi5jdXJyZW50PT09ZSYmKE0oViksYzYuX2N1cnJlbnRWYWx1ZT1SKX1mdW5jdGlvbiBZKGUpe2lmKHZvaWQgMD09PW5EKXRyeXt0aHJvdyBFcnJvcigpfWNhdGNoKGUpe3ZhciBuPWUuc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7bkQ9biYmblsxXXx8XCJcIixuQj0tMTxlLnN0YWNrLmluZGV4T2YoXCJcXG4gICAgYXRcIik/XCIgKDxhbm9ueW1vdXM+KVwiOi0xPGUuc3RhY2suaW5kZXhPZihcIkBcIik/XCJAdW5rbm93bjowOjBcIjpcIlwifXJldHVyblwiXFxuXCIrbkQrZStuQn12YXIgWD0hMTtmdW5jdGlvbiBLKGUsbil7aWYoIWV8fFgpcmV0dXJuXCJcIjtYPSEwO3ZhciB0PUVycm9yLnByZXBhcmVTdGFja1RyYWNlO0Vycm9yLnByZXBhcmVTdGFja1RyYWNlPXZvaWQgMDt0cnl7dmFyIHI9e0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdDpmdW5jdGlvbigpe3RyeXtpZihuKXt2YXIgdD1mdW5jdGlvbigpe3Rocm93IEVycm9yKCl9O2lmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSxcInByb3BzXCIse3NldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCl9fSksXCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuY29uc3RydWN0KXt0cnl7UmVmbGVjdC5jb25zdHJ1Y3QodCxbXSl9Y2F0Y2goZSl7dmFyIHI9ZX1SZWZsZWN0LmNvbnN0cnVjdChlLFtdLHQpfWVsc2V7dHJ5e3QuY2FsbCgpfWNhdGNoKGUpe3I9ZX1lLmNhbGwodC5wcm90b3R5cGUpfX1lbHNle3RyeXt0aHJvdyBFcnJvcigpfWNhdGNoKGUpe3I9ZX0odD1lKCkpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNhdGNoJiZ0LmNhdGNoKGZ1bmN0aW9uKCl7fSl9fWNhdGNoKGUpe2lmKGUmJnImJlwic3RyaW5nXCI9PXR5cGVvZiBlLnN0YWNrKXJldHVybltlLnN0YWNrLHIuc3RhY2tdfXJldHVybltudWxsLG51bGxdfX07ci5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWU9XCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIjt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LFwibmFtZVwiKTtvJiZvLmNvbmZpZ3VyYWJsZSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LFwibmFtZVwiLHt2YWx1ZTpcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwifSk7dmFyIGE9ci5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QoKSxpPWFbMF0sbD1hWzFdO2lmKGkmJmwpe3ZhciBzPWkuc3BsaXQoXCJcXG5cIiksYz1sLnNwbGl0KFwiXFxuXCIpO2ZvcihvPXI9MDtyPHMubGVuZ3RoJiYhc1tyXS5pbmNsdWRlcyhcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiKTspcisrO2Zvcig7bzxjLmxlbmd0aCYmIWNbb10uaW5jbHVkZXMoXCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIik7KW8rKztpZihyPT09cy5sZW5ndGh8fG89PT1jLmxlbmd0aClmb3Iocj1zLmxlbmd0aC0xLG89Yy5sZW5ndGgtMTsxPD1yJiYwPD1vJiZzW3JdIT09Y1tvXTspby0tO2Zvcig7MTw9ciYmMDw9bztyLS0sby0tKWlmKHNbcl0hPT1jW29dKXtpZigxIT09cnx8MSE9PW8pZG8gaWYoci0tLG8tLSwwPm98fHNbcl0hPT1jW29dKXt2YXIgdT1cIlxcblwiK3Nbcl0ucmVwbGFjZShcIiBhdCBuZXcgXCIsXCIgYXQgXCIpO3JldHVybiBlLmRpc3BsYXlOYW1lJiZ1LmluY2x1ZGVzKFwiPGFub255bW91cz5cIikmJih1PXUucmVwbGFjZShcIjxhbm9ueW1vdXM+XCIsZS5kaXNwbGF5TmFtZSkpLHV9d2hpbGUoMTw9ciYmMDw9byk7YnJlYWt9fX1maW5hbGx5e1g9ITEsRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9dH1yZXR1cm4odD1lP2UuZGlzcGxheU5hbWV8fGUubmFtZTpcIlwiKT9ZKHQpOlwiXCJ9ZnVuY3Rpb24gUShlKXt0cnl7dmFyIG49XCJcIix0PW51bGw7ZG8gbis9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZS50YWcpe2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6cmV0dXJuIFkoZS50eXBlKTtjYXNlIDE2OnJldHVybiBZKFwiTGF6eVwiKTtjYXNlIDEzOnJldHVybiBlLmNoaWxkIT09biYmbnVsbCE9PW4/WShcIlN1c3BlbnNlIEZhbGxiYWNrXCIpOlkoXCJTdXNwZW5zZVwiKTtjYXNlIDE5OnJldHVybiBZKFwiU3VzcGVuc2VMaXN0XCIpO2Nhc2UgMDpjYXNlIDE1OnJldHVybiBLKGUudHlwZSwhMSk7Y2FzZSAxMTpyZXR1cm4gSyhlLnR5cGUucmVuZGVyLCExKTtjYXNlIDE6cmV0dXJuIEsoZS50eXBlLCEwKTtjYXNlIDMxOnJldHVybiBZKFwiQWN0aXZpdHlcIik7ZGVmYXVsdDpyZXR1cm5cIlwifX0oZSx0KSx0PWUsZT1lLnJldHVybjt3aGlsZShlKTtyZXR1cm4gbn1jYXRjaChlKXtyZXR1cm5cIlxcbkVycm9yIGdlbmVyYXRpbmcgc3RhY2s6IFwiK2UubWVzc2FnZStcIlxcblwiK2Uuc3RhY2t9fXZhciBHPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksSj1vLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssZWU9by51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayxlbj1vLnVuc3RhYmxlX3Nob3VsZFlpZWxkLGV0PW8udW5zdGFibGVfcmVxdWVzdFBhaW50LGVyPW8udW5zdGFibGVfbm93LGVvPW8udW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwsZWE9by51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSxlaT1vLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LGVsPW8udW5zdGFibGVfTm9ybWFsUHJpb3JpdHksZXM9by51bnN0YWJsZV9Mb3dQcmlvcml0eSxlYz1vLnVuc3RhYmxlX0lkbGVQcmlvcml0eSxldT1vLmxvZyxlZD1vLnVuc3RhYmxlX3NldERpc2FibGVZaWVsZFZhbHVlLGVmPW51bGwsZXA9bnVsbDtmdW5jdGlvbiBlaChlKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBldSYmZWQoZSksZXAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGVwLnNldFN0cmljdE1vZGUpdHJ5e2VwLnNldFN0cmljdE1vZGUoZWYsZSl9Y2F0Y2goZSl7fX12YXIgZWc9TWF0aC5jbHozMj9NYXRoLmNsejMyOmZ1bmN0aW9uKGUpe3JldHVybiAwPT0oZT4+Pj0wKT8zMjozMS0oZW0oZSkvZXZ8MCl8MH0sZW09TWF0aC5sb2csZXY9TWF0aC5MTjIsZWI9MjU2LGV5PTQxOTQzMDQ7ZnVuY3Rpb24gZXgoZSl7dmFyIG49NDImZTtpZigwIT09bilyZXR1cm4gbjtzd2l0Y2goZSYtZSl7Y2FzZSAxOnJldHVybiAxO2Nhc2UgMjpyZXR1cm4gMjtjYXNlIDQ6cmV0dXJuIDQ7Y2FzZSA4OnJldHVybiA4O2Nhc2UgMTY6cmV0dXJuIDE2O2Nhc2UgMzI6cmV0dXJuIDMyO2Nhc2UgNjQ6cmV0dXJuIDY0O2Nhc2UgMTI4OnJldHVybiAxMjg7Y2FzZSAyNTY6Y2FzZSA1MTI6Y2FzZSAxMDI0OmNhc2UgMjA0ODpjYXNlIDQwOTY6Y2FzZSA4MTkyOmNhc2UgMTYzODQ6Y2FzZSAzMjc2ODpjYXNlIDY1NTM2OmNhc2UgMTMxMDcyOmNhc2UgMjYyMTQ0OmNhc2UgNTI0Mjg4OmNhc2UgMTA0ODU3NjpjYXNlIDIwOTcxNTI6cmV0dXJuIDQxOTQwNDgmZTtjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMHgxMDAwMDAwOmNhc2UgMHgyMDAwMDAwOnJldHVybiAweDNjMDAwMDAmZTtjYXNlIDB4NDAwMDAwMDpyZXR1cm4gMHg0MDAwMDAwO2Nhc2UgMHg4MDAwMDAwOnJldHVybiAweDgwMDAwMDA7Y2FzZSAweDEwMDAwMDAwOnJldHVybiAweDEwMDAwMDAwO2Nhc2UgMHgyMDAwMDAwMDpyZXR1cm4gMHgyMDAwMDAwMDtjYXNlIDB4NDAwMDAwMDA6cmV0dXJuIDA7ZGVmYXVsdDpyZXR1cm4gZX19ZnVuY3Rpb24gZXcoZSxuLHQpe3ZhciByPWUucGVuZGluZ0xhbmVzO2lmKDA9PT1yKXJldHVybiAwO3ZhciBvPTAsYT1lLnN1c3BlbmRlZExhbmVzLGk9ZS5waW5nZWRMYW5lcztlPWUud2FybUxhbmVzO3ZhciBsPTB4N2ZmZmZmZiZyO3JldHVybiAwIT09bD8wIT0ocj1sJn5hKT9vPWV4KHIpOjAhPShpJj1sKT9vPWV4KGkpOnR8fDAhPSh0PWwmfmUpJiYobz1leCh0KSk6MCE9KGw9ciZ+YSk/bz1leChsKTowIT09aT9vPWV4KGkpOnR8fDAhPSh0PXImfmUpJiYobz1leCh0KSksMD09PW8/MDowIT09biYmbiE9PW8mJjA9PShuJmEpJiYoKGE9byYtbyk+PSh0PW4mLW4pfHwzMj09PWEmJjAhPSg0MTk0MDQ4JnQpKT9uOm99ZnVuY3Rpb24gZWooZSxuKXtyZXR1cm4gMD09KGUucGVuZGluZ0xhbmVzJn4oZS5zdXNwZW5kZWRMYW5lcyZ+ZS5waW5nZWRMYW5lcykmbil9ZnVuY3Rpb24gZWsoKXt2YXIgZT1lYjtyZXR1cm4gMD09KDQxOTQwNDgmKGViPDw9MSkpJiYoZWI9MjU2KSxlfWZ1bmN0aW9uIGVBKCl7dmFyIGU9ZXk7cmV0dXJuIDA9PSgweDNjMDAwMDAmKGV5PDw9MSkpJiYoZXk9NDE5NDMwNCksZX1mdW5jdGlvbiBlTyhlKXtmb3IodmFyIG49W10sdD0wOzMxPnQ7dCsrKW4ucHVzaChlKTtyZXR1cm4gbn1mdW5jdGlvbiBlQyhlLG4pe2UucGVuZGluZ0xhbmVzfD1uLDB4MTAwMDAwMDAhPT1uJiYoZS5zdXNwZW5kZWRMYW5lcz0wLGUucGluZ2VkTGFuZXM9MCxlLndhcm1MYW5lcz0wKX1mdW5jdGlvbiBlUyhlLG4sdCl7ZS5wZW5kaW5nTGFuZXN8PW4sZS5zdXNwZW5kZWRMYW5lcyY9fm47dmFyIHI9MzEtZWcobik7ZS5lbnRhbmdsZWRMYW5lc3w9bixlLmVudGFuZ2xlbWVudHNbcl09MHg0MDAwMDAwMHxlLmVudGFuZ2xlbWVudHNbcl18NDE5NDA5MCZ0fWZ1bmN0aW9uIGVFKGUsbil7dmFyIHQ9ZS5lbnRhbmdsZWRMYW5lc3w9bjtmb3IoZT1lLmVudGFuZ2xlbWVudHM7dDspe3ZhciByPTMxLWVnKHQpLG89MTw8cjtvJm58ZVtyXSZuJiYoZVtyXXw9biksdCY9fm99fWZ1bmN0aW9uIGVfKGUsbil7dmFyIHQ9biYtbjtyZXR1cm4gMCE9KCh0PTAhPSg0MiZ0KT8xOmVQKHQpKSYoZS5zdXNwZW5kZWRMYW5lc3xuKSk/MDp0fWZ1bmN0aW9uIGVQKGUpe3N3aXRjaChlKXtjYXNlIDI6ZT0xO2JyZWFrO2Nhc2UgODplPTQ7YnJlYWs7Y2FzZSAzMjplPTE2O2JyZWFrO2Nhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOmNhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAweDEwMDAwMDA6Y2FzZSAweDIwMDAwMDA6ZT0xMjg7YnJlYWs7Y2FzZSAweDEwMDAwMDAwOmU9MHg4MDAwMDAwO2JyZWFrO2RlZmF1bHQ6ZT0wfXJldHVybiBlfWZ1bmN0aW9uIGV6KGUpe3JldHVybiAyPChlJj0tZSk/ODxlPzAhPSgweDdmZmZmZmYmZSk/MzI6MHgxMDAwMDAwMDo4OjJ9ZnVuY3Rpb24gZUwoKXt2YXIgZT1ULnA7cmV0dXJuIDAhPT1lP2U6dm9pZCAwPT09KGU9d2luZG93LmV2ZW50KT8zMjp1dShlLnR5cGUpfWZ1bmN0aW9uIGVUKGUsbil7dmFyIHQ9VC5wO3RyeXtyZXR1cm4gVC5wPWUsbigpfWZpbmFsbHl7VC5wPXR9fXZhciBlUj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKSxlTj1cIl9fcmVhY3RGaWJlciRcIitlUixlRD1cIl9fcmVhY3RQcm9wcyRcIitlUixlQj1cIl9fcmVhY3RDb250YWluZXIkXCIrZVIsZU09XCJfX3JlYWN0RXZlbnRzJFwiK2VSLGVJPVwiX19yZWFjdExpc3RlbmVycyRcIitlUixlSD1cIl9fcmVhY3RIYW5kbGVzJFwiK2VSLGVGPVwiX19yZWFjdFJlc291cmNlcyRcIitlUixlVT1cIl9fcmVhY3RNYXJrZXIkXCIrZVI7ZnVuY3Rpb24gZVYoZSl7ZGVsZXRlIGVbZU5dLGRlbGV0ZSBlW2VEXSxkZWxldGUgZVtlTV0sZGVsZXRlIGVbZUldLGRlbGV0ZSBlW2VIXX1mdW5jdGlvbiBlcShlKXt2YXIgbj1lW2VOXTtpZihuKXJldHVybiBuO2Zvcih2YXIgdD1lLnBhcmVudE5vZGU7dDspe2lmKG49dFtlQl18fHRbZU5dKXtpZih0PW4uYWx0ZXJuYXRlLG51bGwhPT1uLmNoaWxkfHxudWxsIT09dCYmbnVsbCE9PXQuY2hpbGQpZm9yKGU9Y0woZSk7bnVsbCE9PWU7KXtpZih0PWVbZU5dKXJldHVybiB0O2U9Y0woZSl9cmV0dXJuIG59dD0oZT10KS5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIGVXKGUpe2lmKGU9ZVtlTl18fGVbZUJdKXt2YXIgbj1lLnRhZztpZig1PT09bnx8Nj09PW58fDEzPT09bnx8MzE9PT1ufHwyNj09PW58fDI3PT09bnx8Mz09PW4pcmV0dXJuIGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZSQoZSl7dmFyIG49ZS50YWc7aWYoNT09PW58fDI2PT09bnx8Mjc9PT1ufHw2PT09bilyZXR1cm4gZS5zdGF0ZU5vZGU7dGhyb3cgRXJyb3IobCgzMykpfWZ1bmN0aW9uIGVaKGUpe3ZhciBuPWVbZUZdO3JldHVybiBufHwobj1lW2VGXT17aG9pc3RhYmxlU3R5bGVzOm5ldyBNYXAsaG9pc3RhYmxlU2NyaXB0czpuZXcgTWFwfSksbn1mdW5jdGlvbiBlWShlKXtlW2VVXT0hMH12YXIgZVg9bmV3IFNldCxlSz17fTtmdW5jdGlvbiBlUShlLG4pe2VHKGUsbiksZUcoZStcIkNhcHR1cmVcIixuKX1mdW5jdGlvbiBlRyhlLG4pe2ZvcihlS1tlXT1uLGU9MDtlPG4ubGVuZ3RoO2UrKyllWC5hZGQobltlXSl9dmFyIGVKPVJlZ0V4cChcIl5bOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRF1bOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFxcXFwtLjAtOVxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwXSokXCIpLGUwPXt9LGUxPXt9O2Z1bmN0aW9uIGUyKGUsbix0KXtpZihHLmNhbGwoZTEsbil8fCFHLmNhbGwoZTAsbikmJihlSi50ZXN0KG4pP2UxW25dPSEwOihlMFtuXT0hMCwhMSkpKWlmKG51bGw9PT10KWUucmVtb3ZlQXR0cmlidXRlKG4pO2Vsc2V7c3dpdGNoKHR5cGVvZiB0KXtjYXNlXCJ1bmRlZmluZWRcIjpjYXNlXCJmdW5jdGlvblwiOmNhc2VcInN5bWJvbFwiOmUucmVtb3ZlQXR0cmlidXRlKG4pO3JldHVybjtjYXNlXCJib29sZWFuXCI6dmFyIHI9bi50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNSk7aWYoXCJkYXRhLVwiIT09ciYmXCJhcmlhLVwiIT09cilyZXR1cm4gdm9pZCBlLnJlbW92ZUF0dHJpYnV0ZShuKX1lLnNldEF0dHJpYnV0ZShuLFwiXCIrdCl9fWZ1bmN0aW9uIGU0KGUsbix0KXtpZihudWxsPT09dCllLnJlbW92ZUF0dHJpYnV0ZShuKTtlbHNle3N3aXRjaCh0eXBlb2YgdCl7Y2FzZVwidW5kZWZpbmVkXCI6Y2FzZVwiZnVuY3Rpb25cIjpjYXNlXCJzeW1ib2xcIjpjYXNlXCJib29sZWFuXCI6ZS5yZW1vdmVBdHRyaWJ1dGUobik7cmV0dXJufWUuc2V0QXR0cmlidXRlKG4sXCJcIit0KX19ZnVuY3Rpb24gZTUoZSxuLHQscil7aWYobnVsbD09PXIpZS5yZW1vdmVBdHRyaWJ1dGUodCk7ZWxzZXtzd2l0Y2godHlwZW9mIHIpe2Nhc2VcInVuZGVmaW5lZFwiOmNhc2VcImZ1bmN0aW9uXCI6Y2FzZVwic3ltYm9sXCI6Y2FzZVwiYm9vbGVhblwiOmUucmVtb3ZlQXR0cmlidXRlKHQpO3JldHVybn1lLnNldEF0dHJpYnV0ZU5TKG4sdCxcIlwiK3IpfX1mdW5jdGlvbiBlMyhlKXtzd2l0Y2godHlwZW9mIGUpe2Nhc2VcImJpZ2ludFwiOmNhc2VcImJvb2xlYW5cIjpjYXNlXCJudW1iZXJcIjpjYXNlXCJzdHJpbmdcIjpjYXNlXCJ1bmRlZmluZWRcIjpjYXNlXCJvYmplY3RcIjpyZXR1cm4gZTtkZWZhdWx0OnJldHVyblwiXCJ9fWZ1bmN0aW9uIGU2KGUpe3ZhciBuPWUudHlwZTtyZXR1cm4oZT1lLm5vZGVOYW1lKSYmXCJpbnB1dFwiPT09ZS50b0xvd2VyQ2FzZSgpJiYoXCJjaGVja2JveFwiPT09bnx8XCJyYWRpb1wiPT09bil9ZnVuY3Rpb24gZTkoZSl7aWYoIWUuX3ZhbHVlVHJhY2tlcil7dmFyIG49ZTYoZSk/XCJjaGVja2VkXCI6XCJ2YWx1ZVwiO2UuX3ZhbHVlVHJhY2tlcj1mdW5jdGlvbihlLG4sdCl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSxuKTtpZighZS5oYXNPd25Qcm9wZXJ0eShuKSYmdm9pZCAwIT09ciYmXCJmdW5jdGlvblwiPT10eXBlb2Ygci5nZXQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHIuc2V0KXt2YXIgbz1yLmdldCxhPXIuc2V0O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uY2FsbCh0aGlzKX0sc2V0OmZ1bmN0aW9uKGUpe3Q9XCJcIitlLGEuY2FsbCh0aGlzLGUpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ci5lbnVtZXJhYmxlfSkse2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHR9LHNldFZhbHVlOmZ1bmN0aW9uKGUpe3Q9XCJcIitlfSxzdG9wVHJhY2tpbmc6ZnVuY3Rpb24oKXtlLl92YWx1ZVRyYWNrZXI9bnVsbCxkZWxldGUgZVtuXX19fX0oZSxuLFwiXCIrZVtuXSl9fWZ1bmN0aW9uIGU4KGUpe2lmKCFlKXJldHVybiExO3ZhciBuPWUuX3ZhbHVlVHJhY2tlcjtpZighbilyZXR1cm4hMDt2YXIgdD1uLmdldFZhbHVlKCkscj1cIlwiO3JldHVybiBlJiYocj1lNihlKT9lLmNoZWNrZWQ/XCJ0cnVlXCI6XCJmYWxzZVwiOmUudmFsdWUpLChlPXIpIT09dCYmKG4uc2V0VmFsdWUoZSksITApfWZ1bmN0aW9uIGU3KGUpe2lmKHZvaWQgMD09PShlPWV8fChcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQ6dm9pZCAwKSkpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBlLmFjdGl2ZUVsZW1lbnR8fGUuYm9keX1jYXRjaChuKXtyZXR1cm4gZS5ib2R5fX12YXIgbmU9L1tcXG5cIlxcXFxdL2c7ZnVuY3Rpb24gbm4oZSl7cmV0dXJuIGUucmVwbGFjZShuZSxmdW5jdGlvbihlKXtyZXR1cm5cIlxcXFxcIitlLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpK1wiIFwifSl9ZnVuY3Rpb24gbnQoZSxuLHQscixvLGEsaSxsKXtlLm5hbWU9XCJcIixudWxsIT1pJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBpJiZcInN5bWJvbFwiIT10eXBlb2YgaSYmXCJib29sZWFuXCIhPXR5cGVvZiBpP2UudHlwZT1pOmUucmVtb3ZlQXR0cmlidXRlKFwidHlwZVwiKSxudWxsIT1uP1wibnVtYmVyXCI9PT1pPygwPT09biYmXCJcIj09PWUudmFsdWV8fGUudmFsdWUhPW4pJiYoZS52YWx1ZT1cIlwiK2UzKG4pKTplLnZhbHVlIT09XCJcIitlMyhuKSYmKGUudmFsdWU9XCJcIitlMyhuKSk6XCJzdWJtaXRcIiE9PWkmJlwicmVzZXRcIiE9PWl8fGUucmVtb3ZlQXR0cmlidXRlKFwidmFsdWVcIiksbnVsbCE9bj9ubyhlLGksZTMobikpOm51bGwhPXQ/bm8oZSxpLGUzKHQpKTpudWxsIT1yJiZlLnJlbW92ZUF0dHJpYnV0ZShcInZhbHVlXCIpLG51bGw9PW8mJm51bGwhPWEmJihlLmRlZmF1bHRDaGVja2VkPSEhYSksbnVsbCE9byYmKGUuY2hlY2tlZD1vJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBvJiZcInN5bWJvbFwiIT10eXBlb2YgbyksbnVsbCE9bCYmXCJmdW5jdGlvblwiIT10eXBlb2YgbCYmXCJzeW1ib2xcIiE9dHlwZW9mIGwmJlwiYm9vbGVhblwiIT10eXBlb2YgbD9lLm5hbWU9XCJcIitlMyhsKTplLnJlbW92ZUF0dHJpYnV0ZShcIm5hbWVcIil9ZnVuY3Rpb24gbnIoZSxuLHQscixvLGEsaSxsKXtpZihudWxsIT1hJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBhJiZcInN5bWJvbFwiIT10eXBlb2YgYSYmXCJib29sZWFuXCIhPXR5cGVvZiBhJiYoZS50eXBlPWEpLG51bGwhPW58fG51bGwhPXQpe2lmKChcInN1Ym1pdFwiPT09YXx8XCJyZXNldFwiPT09YSkmJm51bGw9PW4pcmV0dXJuIHZvaWQgZTkoZSk7dD1udWxsIT10P1wiXCIrZTModCk6XCJcIixuPW51bGwhPW4/XCJcIitlMyhuKTp0LGx8fG49PT1lLnZhbHVlfHwoZS52YWx1ZT1uKSxlLmRlZmF1bHRWYWx1ZT1ufXI9XCJmdW5jdGlvblwiIT10eXBlb2Yocj1udWxsIT1yP3I6bykmJlwic3ltYm9sXCIhPXR5cGVvZiByJiYhIXIsZS5jaGVja2VkPWw/ZS5jaGVja2VkOiEhcixlLmRlZmF1bHRDaGVja2VkPSEhcixudWxsIT1pJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBpJiZcInN5bWJvbFwiIT10eXBlb2YgaSYmXCJib29sZWFuXCIhPXR5cGVvZiBpJiYoZS5uYW1lPWkpLGU5KGUpfWZ1bmN0aW9uIG5vKGUsbix0KXtcIm51bWJlclwiPT09biYmZTcoZS5vd25lckRvY3VtZW50KT09PWV8fGUuZGVmYXVsdFZhbHVlPT09XCJcIit0fHwoZS5kZWZhdWx0VmFsdWU9XCJcIit0KX1mdW5jdGlvbiBuYShlLG4sdCxyKXtpZihlPWUub3B0aW9ucyxuKXtuPXt9O2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKW5bXCIkXCIrdFtvXV09ITA7Zm9yKHQ9MDt0PGUubGVuZ3RoO3QrKylvPW4uaGFzT3duUHJvcGVydHkoXCIkXCIrZVt0XS52YWx1ZSksZVt0XS5zZWxlY3RlZCE9PW8mJihlW3RdLnNlbGVjdGVkPW8pLG8mJnImJihlW3RdLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtmb3Iobz0wLHQ9XCJcIitlMyh0KSxuPW51bGw7bzxlLmxlbmd0aDtvKyspe2lmKGVbb10udmFsdWU9PT10KXtlW29dLnNlbGVjdGVkPSEwLHImJihlW29dLmRlZmF1bHRTZWxlY3RlZD0hMCk7cmV0dXJufW51bGwhPT1ufHxlW29dLmRpc2FibGVkfHwobj1lW29dKX1udWxsIT09biYmKG4uc2VsZWN0ZWQ9ITApfX1mdW5jdGlvbiBuaShlLG4sdCl7aWYobnVsbCE9biYmKChuPVwiXCIrZTMobikpIT09ZS52YWx1ZSYmKGUudmFsdWU9biksbnVsbD09dCkpe2UuZGVmYXVsdFZhbHVlIT09biYmKGUuZGVmYXVsdFZhbHVlPW4pO3JldHVybn1lLmRlZmF1bHRWYWx1ZT1udWxsIT10P1wiXCIrZTModCk6XCJcIn1mdW5jdGlvbiBubChlLG4sdCxyKXtpZihudWxsPT1uKXtpZihudWxsIT1yKXtpZihudWxsIT10KXRocm93IEVycm9yKGwoOTIpKTtpZih6KHIpKXtpZigxPHIubGVuZ3RoKXRocm93IEVycm9yKGwoOTMpKTtyPXJbMF19dD1yfW51bGw9PXQmJih0PVwiXCIpLG49dH1lLmRlZmF1bHRWYWx1ZT10PWUzKG4pLChyPWUudGV4dENvbnRlbnQpPT09dCYmXCJcIiE9PXImJm51bGwhPT1yJiYoZS52YWx1ZT1yKSxlOShlKX1mdW5jdGlvbiBucyhlLG4pe2lmKG4pe3ZhciB0PWUuZmlyc3RDaGlsZDtpZih0JiZ0PT09ZS5sYXN0Q2hpbGQmJjM9PT10Lm5vZGVUeXBlKXt0Lm5vZGVWYWx1ZT1uO3JldHVybn19ZS50ZXh0Q29udGVudD1ufXZhciBuYz1uZXcgU2V0KFwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgYXNwZWN0UmF0aW8gYm9yZGVySW1hZ2VPdXRzZXQgYm9yZGVySW1hZ2VTbGljZSBib3JkZXJJbWFnZVdpZHRoIGJveEZsZXggYm94RmxleEdyb3VwIGJveE9yZGluYWxHcm91cCBjb2x1bW5Db3VudCBjb2x1bW5zIGZsZXggZmxleEdyb3cgZmxleFBvc2l0aXZlIGZsZXhTaHJpbmsgZmxleE5lZ2F0aXZlIGZsZXhPcmRlciBncmlkQXJlYSBncmlkUm93IGdyaWRSb3dFbmQgZ3JpZFJvd1NwYW4gZ3JpZFJvd1N0YXJ0IGdyaWRDb2x1bW4gZ3JpZENvbHVtbkVuZCBncmlkQ29sdW1uU3BhbiBncmlkQ29sdW1uU3RhcnQgZm9udFdlaWdodCBsaW5lQ2xhbXAgbGluZUhlaWdodCBvcGFjaXR5IG9yZGVyIG9ycGhhbnMgc2NhbGUgdGFiU2l6ZSB3aWRvd3MgekluZGV4IHpvb20gZmlsbE9wYWNpdHkgZmxvb2RPcGFjaXR5IHN0b3BPcGFjaXR5IHN0cm9rZURhc2hhcnJheSBzdHJva2VEYXNob2Zmc2V0IHN0cm9rZU1pdGVybGltaXQgc3Ryb2tlT3BhY2l0eSBzdHJva2VXaWR0aCBNb3pBbmltYXRpb25JdGVyYXRpb25Db3VudCBNb3pCb3hGbGV4IE1vekJveEZsZXhHcm91cCBNb3pMaW5lQ2xhbXAgbXNBbmltYXRpb25JdGVyYXRpb25Db3VudCBtc0ZsZXggbXNab29tIG1zRmxleEdyb3cgbXNGbGV4TmVnYXRpdmUgbXNGbGV4T3JkZXIgbXNGbGV4UG9zaXRpdmUgbXNGbGV4U2hyaW5rIG1zR3JpZENvbHVtbiBtc0dyaWRDb2x1bW5TcGFuIG1zR3JpZFJvdyBtc0dyaWRSb3dTcGFuIFdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IFdlYmtpdEJveEZsZXggV2ViS2l0Qm94RmxleEdyb3VwIFdlYmtpdEJveE9yZGluYWxHcm91cCBXZWJraXRDb2x1bW5Db3VudCBXZWJraXRDb2x1bW5zIFdlYmtpdEZsZXggV2Via2l0RmxleEdyb3cgV2Via2l0RmxleFBvc2l0aXZlIFdlYmtpdEZsZXhTaHJpbmsgV2Via2l0TGluZUNsYW1wXCIuc3BsaXQoXCIgXCIpKTtmdW5jdGlvbiBudShlLG4sdCl7dmFyIHI9MD09PW4uaW5kZXhPZihcIi0tXCIpO251bGw9PXR8fFwiYm9vbGVhblwiPT10eXBlb2YgdHx8XCJcIj09PXQ/cj9lLnNldFByb3BlcnR5KG4sXCJcIik6XCJmbG9hdFwiPT09bj9lLmNzc0Zsb2F0PVwiXCI6ZVtuXT1cIlwiOnI/ZS5zZXRQcm9wZXJ0eShuLHQpOlwibnVtYmVyXCIhPXR5cGVvZiB0fHwwPT09dHx8bmMuaGFzKG4pP1wiZmxvYXRcIj09PW4/ZS5jc3NGbG9hdD10OmVbbl09KFwiXCIrdCkudHJpbSgpOmVbbl09dCtcInB4XCJ9ZnVuY3Rpb24gbmQoZSxuLHQpe2lmKG51bGwhPW4mJlwib2JqZWN0XCIhPXR5cGVvZiBuKXRocm93IEVycm9yKGwoNjIpKTtpZihlPWUuc3R5bGUsbnVsbCE9dCl7Zm9yKHZhciByIGluIHQpIXQuaGFzT3duUHJvcGVydHkocil8fG51bGwhPW4mJm4uaGFzT3duUHJvcGVydHkocil8fCgwPT09ci5pbmRleE9mKFwiLS1cIik/ZS5zZXRQcm9wZXJ0eShyLFwiXCIpOlwiZmxvYXRcIj09PXI/ZS5jc3NGbG9hdD1cIlwiOmVbcl09XCJcIik7Zm9yKHZhciBvIGluIG4pcj1uW29dLG4uaGFzT3duUHJvcGVydHkobykmJnRbb10hPT1yJiZudShlLG8scil9ZWxzZSBmb3IodmFyIGEgaW4gbiluLmhhc093blByb3BlcnR5KGEpJiZudShlLGEsblthXSl9ZnVuY3Rpb24gbmYoZSl7aWYoLTE9PT1lLmluZGV4T2YoXCItXCIpKXJldHVybiExO3N3aXRjaChlKXtjYXNlXCJhbm5vdGF0aW9uLXhtbFwiOmNhc2VcImNvbG9yLXByb2ZpbGVcIjpjYXNlXCJmb250LWZhY2VcIjpjYXNlXCJmb250LWZhY2Utc3JjXCI6Y2FzZVwiZm9udC1mYWNlLXVyaVwiOmNhc2VcImZvbnQtZmFjZS1mb3JtYXRcIjpjYXNlXCJmb250LWZhY2UtbmFtZVwiOmNhc2VcIm1pc3NpbmctZ2x5cGhcIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX12YXIgbnA9bmV3IE1hcChbW1wiYWNjZXB0Q2hhcnNldFwiLFwiYWNjZXB0LWNoYXJzZXRcIl0sW1wiaHRtbEZvclwiLFwiZm9yXCJdLFtcImh0dHBFcXVpdlwiLFwiaHR0cC1lcXVpdlwiXSxbXCJjcm9zc09yaWdpblwiLFwiY3Jvc3NvcmlnaW5cIl0sW1wiYWNjZW50SGVpZ2h0XCIsXCJhY2NlbnQtaGVpZ2h0XCJdLFtcImFsaWdubWVudEJhc2VsaW5lXCIsXCJhbGlnbm1lbnQtYmFzZWxpbmVcIl0sW1wiYXJhYmljRm9ybVwiLFwiYXJhYmljLWZvcm1cIl0sW1wiYmFzZWxpbmVTaGlmdFwiLFwiYmFzZWxpbmUtc2hpZnRcIl0sW1wiY2FwSGVpZ2h0XCIsXCJjYXAtaGVpZ2h0XCJdLFtcImNsaXBQYXRoXCIsXCJjbGlwLXBhdGhcIl0sW1wiY2xpcFJ1bGVcIixcImNsaXAtcnVsZVwiXSxbXCJjb2xvckludGVycG9sYXRpb25cIixcImNvbG9yLWludGVycG9sYXRpb25cIl0sW1wiY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc1wiLFwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzXCJdLFtcImNvbG9yUHJvZmlsZVwiLFwiY29sb3ItcHJvZmlsZVwiXSxbXCJjb2xvclJlbmRlcmluZ1wiLFwiY29sb3ItcmVuZGVyaW5nXCJdLFtcImRvbWluYW50QmFzZWxpbmVcIixcImRvbWluYW50LWJhc2VsaW5lXCJdLFtcImVuYWJsZUJhY2tncm91bmRcIixcImVuYWJsZS1iYWNrZ3JvdW5kXCJdLFtcImZpbGxPcGFjaXR5XCIsXCJmaWxsLW9wYWNpdHlcIl0sW1wiZmlsbFJ1bGVcIixcImZpbGwtcnVsZVwiXSxbXCJmbG9vZENvbG9yXCIsXCJmbG9vZC1jb2xvclwiXSxbXCJmbG9vZE9wYWNpdHlcIixcImZsb29kLW9wYWNpdHlcIl0sW1wiZm9udEZhbWlseVwiLFwiZm9udC1mYW1pbHlcIl0sW1wiZm9udFNpemVcIixcImZvbnQtc2l6ZVwiXSxbXCJmb250U2l6ZUFkanVzdFwiLFwiZm9udC1zaXplLWFkanVzdFwiXSxbXCJmb250U3RyZXRjaFwiLFwiZm9udC1zdHJldGNoXCJdLFtcImZvbnRTdHlsZVwiLFwiZm9udC1zdHlsZVwiXSxbXCJmb250VmFyaWFudFwiLFwiZm9udC12YXJpYW50XCJdLFtcImZvbnRXZWlnaHRcIixcImZvbnQtd2VpZ2h0XCJdLFtcImdseXBoTmFtZVwiLFwiZ2x5cGgtbmFtZVwiXSxbXCJnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbFwiLFwiZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbFwiXSxbXCJnbHlwaE9yaWVudGF0aW9uVmVydGljYWxcIixcImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsXCJdLFtcImhvcml6QWR2WFwiLFwiaG9yaXotYWR2LXhcIl0sW1wiaG9yaXpPcmlnaW5YXCIsXCJob3Jpei1vcmlnaW4teFwiXSxbXCJpbWFnZVJlbmRlcmluZ1wiLFwiaW1hZ2UtcmVuZGVyaW5nXCJdLFtcImxldHRlclNwYWNpbmdcIixcImxldHRlci1zcGFjaW5nXCJdLFtcImxpZ2h0aW5nQ29sb3JcIixcImxpZ2h0aW5nLWNvbG9yXCJdLFtcIm1hcmtlckVuZFwiLFwibWFya2VyLWVuZFwiXSxbXCJtYXJrZXJNaWRcIixcIm1hcmtlci1taWRcIl0sW1wibWFya2VyU3RhcnRcIixcIm1hcmtlci1zdGFydFwiXSxbXCJvdmVybGluZVBvc2l0aW9uXCIsXCJvdmVybGluZS1wb3NpdGlvblwiXSxbXCJvdmVybGluZVRoaWNrbmVzc1wiLFwib3ZlcmxpbmUtdGhpY2tuZXNzXCJdLFtcInBhaW50T3JkZXJcIixcInBhaW50LW9yZGVyXCJdLFtcInBhbm9zZS0xXCIsXCJwYW5vc2UtMVwiXSxbXCJwb2ludGVyRXZlbnRzXCIsXCJwb2ludGVyLWV2ZW50c1wiXSxbXCJyZW5kZXJpbmdJbnRlbnRcIixcInJlbmRlcmluZy1pbnRlbnRcIl0sW1wic2hhcGVSZW5kZXJpbmdcIixcInNoYXBlLXJlbmRlcmluZ1wiXSxbXCJzdG9wQ29sb3JcIixcInN0b3AtY29sb3JcIl0sW1wic3RvcE9wYWNpdHlcIixcInN0b3Atb3BhY2l0eVwiXSxbXCJzdHJpa2V0aHJvdWdoUG9zaXRpb25cIixcInN0cmlrZXRocm91Z2gtcG9zaXRpb25cIl0sW1wic3RyaWtldGhyb3VnaFRoaWNrbmVzc1wiLFwic3RyaWtldGhyb3VnaC10aGlja25lc3NcIl0sW1wic3Ryb2tlRGFzaGFycmF5XCIsXCJzdHJva2UtZGFzaGFycmF5XCJdLFtcInN0cm9rZURhc2hvZmZzZXRcIixcInN0cm9rZS1kYXNob2Zmc2V0XCJdLFtcInN0cm9rZUxpbmVjYXBcIixcInN0cm9rZS1saW5lY2FwXCJdLFtcInN0cm9rZUxpbmVqb2luXCIsXCJzdHJva2UtbGluZWpvaW5cIl0sW1wic3Ryb2tlTWl0ZXJsaW1pdFwiLFwic3Ryb2tlLW1pdGVybGltaXRcIl0sW1wic3Ryb2tlT3BhY2l0eVwiLFwic3Ryb2tlLW9wYWNpdHlcIl0sW1wic3Ryb2tlV2lkdGhcIixcInN0cm9rZS13aWR0aFwiXSxbXCJ0ZXh0QW5jaG9yXCIsXCJ0ZXh0LWFuY2hvclwiXSxbXCJ0ZXh0RGVjb3JhdGlvblwiLFwidGV4dC1kZWNvcmF0aW9uXCJdLFtcInRleHRSZW5kZXJpbmdcIixcInRleHQtcmVuZGVyaW5nXCJdLFtcInRyYW5zZm9ybU9yaWdpblwiLFwidHJhbnNmb3JtLW9yaWdpblwiXSxbXCJ1bmRlcmxpbmVQb3NpdGlvblwiLFwidW5kZXJsaW5lLXBvc2l0aW9uXCJdLFtcInVuZGVybGluZVRoaWNrbmVzc1wiLFwidW5kZXJsaW5lLXRoaWNrbmVzc1wiXSxbXCJ1bmljb2RlQmlkaVwiLFwidW5pY29kZS1iaWRpXCJdLFtcInVuaWNvZGVSYW5nZVwiLFwidW5pY29kZS1yYW5nZVwiXSxbXCJ1bml0c1BlckVtXCIsXCJ1bml0cy1wZXItZW1cIl0sW1widkFscGhhYmV0aWNcIixcInYtYWxwaGFiZXRpY1wiXSxbXCJ2SGFuZ2luZ1wiLFwidi1oYW5naW5nXCJdLFtcInZJZGVvZ3JhcGhpY1wiLFwidi1pZGVvZ3JhcGhpY1wiXSxbXCJ2TWF0aGVtYXRpY2FsXCIsXCJ2LW1hdGhlbWF0aWNhbFwiXSxbXCJ2ZWN0b3JFZmZlY3RcIixcInZlY3Rvci1lZmZlY3RcIl0sW1widmVydEFkdllcIixcInZlcnQtYWR2LXlcIl0sW1widmVydE9yaWdpblhcIixcInZlcnQtb3JpZ2luLXhcIl0sW1widmVydE9yaWdpbllcIixcInZlcnQtb3JpZ2luLXlcIl0sW1wid29yZFNwYWNpbmdcIixcIndvcmQtc3BhY2luZ1wiXSxbXCJ3cml0aW5nTW9kZVwiLFwid3JpdGluZy1tb2RlXCJdLFtcInhtbG5zWGxpbmtcIixcInhtbG5zOnhsaW5rXCJdLFtcInhIZWlnaHRcIixcIngtaGVpZ2h0XCJdXSksbmg9L15bXFx1MDAwMC1cXHUwMDFGIF0qaltcXHJcXG5cXHRdKmFbXFxyXFxuXFx0XSp2W1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnNbXFxyXFxuXFx0XSpjW1xcclxcblxcdF0qcltcXHJcXG5cXHRdKmlbXFxyXFxuXFx0XSpwW1xcclxcblxcdF0qdFtcXHJcXG5cXHRdKjovaTtmdW5jdGlvbiBuZyhlKXtyZXR1cm4gbmgudGVzdChcIlwiK2UpP1wiamF2YXNjcmlwdDp0aHJvdyBuZXcgRXJyb3IoJ1JlYWN0IGhhcyBibG9ja2VkIGEgamF2YXNjcmlwdDogVVJMIGFzIGEgc2VjdXJpdHkgcHJlY2F1dGlvbi4nKVwiOmV9ZnVuY3Rpb24gbm0oKXt9dmFyIG52PW51bGw7ZnVuY3Rpb24gbmIoZSl7cmV0dXJuKGU9ZS50YXJnZXR8fGUuc3JjRWxlbWVudHx8d2luZG93KS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCYmKGU9ZS5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCksMz09PWUubm9kZVR5cGU/ZS5wYXJlbnROb2RlOmV9dmFyIG55PW51bGwsbng9bnVsbDtmdW5jdGlvbiBudyhlKXt2YXIgbj1lVyhlKTtpZihuJiYoZT1uLnN0YXRlTm9kZSkpe3ZhciB0PWVbZURdfHxudWxsO3N3aXRjaChlPW4uc3RhdGVOb2RlLG4udHlwZSl7Y2FzZVwiaW5wdXRcIjppZihudChlLHQudmFsdWUsdC5kZWZhdWx0VmFsdWUsdC5kZWZhdWx0VmFsdWUsdC5jaGVja2VkLHQuZGVmYXVsdENoZWNrZWQsdC50eXBlLHQubmFtZSksbj10Lm5hbWUsXCJyYWRpb1wiPT09dC50eXBlJiZudWxsIT1uKXtmb3IodD1lO3QucGFyZW50Tm9kZTspdD10LnBhcmVudE5vZGU7Zm9yKHQ9dC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtuYW1lPVwiJytubihcIlwiK24pKydcIl1bdHlwZT1cInJhZGlvXCJdJyksbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO2lmKHIhPT1lJiZyLmZvcm09PT1lLmZvcm0pe3ZhciBvPXJbZURdfHxudWxsO2lmKCFvKXRocm93IEVycm9yKGwoOTApKTtudChyLG8udmFsdWUsby5kZWZhdWx0VmFsdWUsby5kZWZhdWx0VmFsdWUsby5jaGVja2VkLG8uZGVmYXVsdENoZWNrZWQsby50eXBlLG8ubmFtZSl9fWZvcihuPTA7bjx0Lmxlbmd0aDtuKyspKHI9dFtuXSkuZm9ybT09PWUuZm9ybSYmZTgocil9YnJlYWs7Y2FzZVwidGV4dGFyZWFcIjpuaShlLHQudmFsdWUsdC5kZWZhdWx0VmFsdWUpO2JyZWFrO2Nhc2VcInNlbGVjdFwiOm51bGwhPShuPXQudmFsdWUpJiZuYShlLCEhdC5tdWx0aXBsZSxuLCExKX19fXZhciBuaj0hMTtmdW5jdGlvbiBuayhlLG4sdCl7aWYobmopcmV0dXJuIGUobix0KTtuaj0hMDt0cnl7cmV0dXJuIGUobil9ZmluYWxseXtpZihuaj0hMSwobnVsbCE9PW55fHxudWxsIT09bngpJiYoc3MoKSxueSYmKG49bnksZT1ueCxueD1ueT1udWxsLG53KG4pLGUpKSlmb3Iobj0wO248ZS5sZW5ndGg7bisrKW53KGVbbl0pfX1mdW5jdGlvbiBuQShlLG4pe3ZhciB0PWUuc3RhdGVOb2RlO2lmKG51bGw9PT10KXJldHVybiBudWxsO3ZhciByPXRbZURdfHxudWxsO2lmKG51bGw9PT1yKXJldHVybiBudWxsO3N3aXRjaCh0PXJbbl0sbil7Y2FzZVwib25DbGlja1wiOmNhc2VcIm9uQ2xpY2tDYXB0dXJlXCI6Y2FzZVwib25Eb3VibGVDbGlja1wiOmNhc2VcIm9uRG91YmxlQ2xpY2tDYXB0dXJlXCI6Y2FzZVwib25Nb3VzZURvd25cIjpjYXNlXCJvbk1vdXNlRG93bkNhcHR1cmVcIjpjYXNlXCJvbk1vdXNlTW92ZVwiOmNhc2VcIm9uTW91c2VNb3ZlQ2FwdHVyZVwiOmNhc2VcIm9uTW91c2VVcFwiOmNhc2VcIm9uTW91c2VVcENhcHR1cmVcIjpjYXNlXCJvbk1vdXNlRW50ZXJcIjoocj0hci5kaXNhYmxlZCl8fChyPVwiYnV0dG9uXCIhPT0oZT1lLnR5cGUpJiZcImlucHV0XCIhPT1lJiZcInNlbGVjdFwiIT09ZSYmXCJ0ZXh0YXJlYVwiIT09ZSksZT0hcjticmVhaztkZWZhdWx0OmU9ITF9aWYoZSlyZXR1cm4gbnVsbDtpZih0JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IEVycm9yKGwoMjMxLG4sdHlwZW9mIHQpKTtyZXR1cm4gdH12YXIgbk89XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmdm9pZCAwIT09d2luZG93LmRvY3VtZW50JiZ2b2lkIDAhPT13aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCxuQz0hMTtpZihuTyl0cnl7dmFyIG5TPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShuUyxcInBhc3NpdmVcIix7Z2V0OmZ1bmN0aW9uKCl7bkM9ITB9fSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsblMsblMpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLG5TLG5TKX1jYXRjaChlKXtuQz0hMX12YXIgbkU9bnVsbCxuXz1udWxsLG5QPW51bGw7ZnVuY3Rpb24gbnooKXtpZihuUClyZXR1cm4gblA7dmFyIGUsbix0PW5fLHI9dC5sZW5ndGgsbz1cInZhbHVlXCJpbiBuRT9uRS52YWx1ZTpuRS50ZXh0Q29udGVudCxhPW8ubGVuZ3RoO2ZvcihlPTA7ZTxyJiZ0W2VdPT09b1tlXTtlKyspO3ZhciBpPXItZTtmb3Iobj0xO248PWkmJnRbci1uXT09PW9bYS1uXTtuKyspO3JldHVybiBuUD1vLnNsaWNlKGUsMTxuPzEtbjp2b2lkIDApfWZ1bmN0aW9uIG5MKGUpe3ZhciBuPWUua2V5Q29kZTtyZXR1cm5cImNoYXJDb2RlXCJpbiBlPzA9PT0oZT1lLmNoYXJDb2RlKSYmMTM9PT1uJiYoZT0xMyk6ZT1uLDEwPT09ZSYmKGU9MTMpLDMyPD1lfHwxMz09PWU/ZTowfWZ1bmN0aW9uIG5UKCl7cmV0dXJuITB9ZnVuY3Rpb24gblIoKXtyZXR1cm4hMX1mdW5jdGlvbiBuTihlKXtmdW5jdGlvbiBuKG4sdCxyLG8sYSl7Zm9yKHZhciBpIGluIHRoaXMuX3JlYWN0TmFtZT1uLHRoaXMuX3RhcmdldEluc3Q9cix0aGlzLnR5cGU9dCx0aGlzLm5hdGl2ZUV2ZW50PW8sdGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUYXJnZXQ9bnVsbCxlKWUuaGFzT3duUHJvcGVydHkoaSkmJihuPWVbaV0sdGhpc1tpXT1uP24obyk6b1tpXSk7cmV0dXJuIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPShudWxsIT1vLmRlZmF1bHRQcmV2ZW50ZWQ/by5kZWZhdWx0UHJldmVudGVkOiExPT09by5yZXR1cm5WYWx1ZSk/blQ6blIsdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1uUix0aGlzfXJldHVybiBmKG4ucHJvdG90eXBlLHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMDt2YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2UmJihlLnByZXZlbnREZWZhdWx0P2UucHJldmVudERlZmF1bHQoKTpcInVua25vd25cIiE9dHlwZW9mIGUucmV0dXJuVmFsdWUmJihlLnJldHVyblZhbHVlPSExKSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1uVCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMubmF0aXZlRXZlbnQ7ZSYmKGUuc3RvcFByb3BhZ2F0aW9uP2Uuc3RvcFByb3BhZ2F0aW9uKCk6XCJ1bmtub3duXCIhPXR5cGVvZiBlLmNhbmNlbEJ1YmJsZSYmKGUuY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPW5UKX0scGVyc2lzdDpmdW5jdGlvbigpe30saXNQZXJzaXN0ZW50Om5UfSksbn12YXIgbkQsbkIsbk0sbkksbkgsbkY9e2V2ZW50UGhhc2U6MCxidWJibGVzOjAsY2FuY2VsYWJsZTowLHRpbWVTdGFtcDpmdW5jdGlvbihlKXtyZXR1cm4gZS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6MCxpc1RydXN0ZWQ6MH0sblU9bk4obkYpLG5WPWYoe30sbkYse3ZpZXc6MCxkZXRhaWw6MH0pLG5xPW5OKG5WKSxuVz1mKHt9LG5WLHtzY3JlZW5YOjAsc2NyZWVuWTowLGNsaWVudFg6MCxjbGllbnRZOjAscGFnZVg6MCxwYWdlWTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGFsdEtleTowLG1ldGFLZXk6MCxnZXRNb2RpZmllclN0YXRlOm4yLGJ1dHRvbjowLGJ1dHRvbnM6MCxyZWxhdGVkVGFyZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lLnJlbGF0ZWRUYXJnZXQ/ZS5mcm9tRWxlbWVudD09PWUuc3JjRWxlbWVudD9lLnRvRWxlbWVudDplLmZyb21FbGVtZW50OmUucmVsYXRlZFRhcmdldH0sbW92ZW1lbnRYOmZ1bmN0aW9uKGUpe3JldHVyblwibW92ZW1lbnRYXCJpbiBlP2UubW92ZW1lbnRYOihlIT09bkgmJihuSCYmXCJtb3VzZW1vdmVcIj09PWUudHlwZT8obk09ZS5zY3JlZW5YLW5ILnNjcmVlblgsbkk9ZS5zY3JlZW5ZLW5ILnNjcmVlblkpOm5JPW5NPTAsbkg9ZSksbk0pfSxtb3ZlbWVudFk6ZnVuY3Rpb24oZSl7cmV0dXJuXCJtb3ZlbWVudFlcImluIGU/ZS5tb3ZlbWVudFk6bkl9fSksbiQ9bk4oblcpLG5aPW5OKGYoe30sblcse2RhdGFUcmFuc2ZlcjowfSkpLG5ZPW5OKGYoe30sblYse3JlbGF0ZWRUYXJnZXQ6MH0pKSxuWD1uTihmKHt9LG5GLHthbmltYXRpb25OYW1lOjAsZWxhcHNlZFRpbWU6MCxwc2V1ZG9FbGVtZW50OjB9KSksbks9bk4oZih7fSxuRix7Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbihlKXtyZXR1cm5cImNsaXBib2FyZERhdGFcImluIGU/ZS5jbGlwYm9hcmREYXRhOndpbmRvdy5jbGlwYm9hcmREYXRhfX0pKSxuUT1uTihmKHt9LG5GLHtkYXRhOjB9KSksbkc9e0VzYzpcIkVzY2FwZVwiLFNwYWNlYmFyOlwiIFwiLExlZnQ6XCJBcnJvd0xlZnRcIixVcDpcIkFycm93VXBcIixSaWdodDpcIkFycm93UmlnaHRcIixEb3duOlwiQXJyb3dEb3duXCIsRGVsOlwiRGVsZXRlXCIsV2luOlwiT1NcIixNZW51OlwiQ29udGV4dE1lbnVcIixBcHBzOlwiQ29udGV4dE1lbnVcIixTY3JvbGw6XCJTY3JvbGxMb2NrXCIsTW96UHJpbnRhYmxlS2V5OlwiVW5pZGVudGlmaWVkXCJ9LG5KPXs4OlwiQmFja3NwYWNlXCIsOTpcIlRhYlwiLDEyOlwiQ2xlYXJcIiwxMzpcIkVudGVyXCIsMTY6XCJTaGlmdFwiLDE3OlwiQ29udHJvbFwiLDE4OlwiQWx0XCIsMTk6XCJQYXVzZVwiLDIwOlwiQ2Fwc0xvY2tcIiwyNzpcIkVzY2FwZVwiLDMyOlwiIFwiLDMzOlwiUGFnZVVwXCIsMzQ6XCJQYWdlRG93blwiLDM1OlwiRW5kXCIsMzY6XCJIb21lXCIsMzc6XCJBcnJvd0xlZnRcIiwzODpcIkFycm93VXBcIiwzOTpcIkFycm93UmlnaHRcIiw0MDpcIkFycm93RG93blwiLDQ1OlwiSW5zZXJ0XCIsNDY6XCJEZWxldGVcIiwxMTI6XCJGMVwiLDExMzpcIkYyXCIsMTE0OlwiRjNcIiwxMTU6XCJGNFwiLDExNjpcIkY1XCIsMTE3OlwiRjZcIiwxMTg6XCJGN1wiLDExOTpcIkY4XCIsMTIwOlwiRjlcIiwxMjE6XCJGMTBcIiwxMjI6XCJGMTFcIiwxMjM6XCJGMTJcIiwxNDQ6XCJOdW1Mb2NrXCIsMTQ1OlwiU2Nyb2xsTG9ja1wiLDIyNDpcIk1ldGFcIn0sbjA9e0FsdDpcImFsdEtleVwiLENvbnRyb2w6XCJjdHJsS2V5XCIsTWV0YTpcIm1ldGFLZXlcIixTaGlmdDpcInNoaWZ0S2V5XCJ9O2Z1bmN0aW9uIG4xKGUpe3ZhciBuPXRoaXMubmF0aXZlRXZlbnQ7cmV0dXJuIG4uZ2V0TW9kaWZpZXJTdGF0ZT9uLmdldE1vZGlmaWVyU3RhdGUoZSk6ISEoZT1uMFtlXSkmJiEhbltlXX1mdW5jdGlvbiBuMigpe3JldHVybiBuMX12YXIgbjQ9bk4oZih7fSxuVix7a2V5OmZ1bmN0aW9uKGUpe2lmKGUua2V5KXt2YXIgbj1uR1tlLmtleV18fGUua2V5O2lmKFwiVW5pZGVudGlmaWVkXCIhPT1uKXJldHVybiBufXJldHVyblwia2V5cHJlc3NcIj09PWUudHlwZT8xMz09PShlPW5MKGUpKT9cIkVudGVyXCI6U3RyaW5nLmZyb21DaGFyQ29kZShlKTpcImtleWRvd25cIj09PWUudHlwZXx8XCJrZXl1cFwiPT09ZS50eXBlP25KW2Uua2V5Q29kZV18fFwiVW5pZGVudGlmaWVkXCI6XCJcIn0sY29kZTowLGxvY2F0aW9uOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLHJlcGVhdDowLGxvY2FsZTowLGdldE1vZGlmaWVyU3RhdGU6bjIsY2hhckNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuXCJrZXlwcmVzc1wiPT09ZS50eXBlP25MKGUpOjB9LGtleUNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuXCJrZXlkb3duXCI9PT1lLnR5cGV8fFwia2V5dXBcIj09PWUudHlwZT9lLmtleUNvZGU6MH0sd2hpY2g6ZnVuY3Rpb24oZSl7cmV0dXJuXCJrZXlwcmVzc1wiPT09ZS50eXBlP25MKGUpOlwia2V5ZG93blwiPT09ZS50eXBlfHxcImtleXVwXCI9PT1lLnR5cGU/ZS5rZXlDb2RlOjB9fSkpLG41PW5OKGYoe30sblcse3BvaW50ZXJJZDowLHdpZHRoOjAsaGVpZ2h0OjAscHJlc3N1cmU6MCx0YW5nZW50aWFsUHJlc3N1cmU6MCx0aWx0WDowLHRpbHRZOjAsdHdpc3Q6MCxwb2ludGVyVHlwZTowLGlzUHJpbWFyeTowfSkpLG4zPW5OKGYoe30sblYse3RvdWNoZXM6MCx0YXJnZXRUb3VjaGVzOjAsY2hhbmdlZFRvdWNoZXM6MCxhbHRLZXk6MCxtZXRhS2V5OjAsY3RybEtleTowLHNoaWZ0S2V5OjAsZ2V0TW9kaWZpZXJTdGF0ZTpuMn0pKSxuNj1uTihmKHt9LG5GLHtwcm9wZXJ0eU5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pKSxuOT1uTihmKHt9LG5XLHtkZWx0YVg6ZnVuY3Rpb24oZSl7cmV0dXJuXCJkZWx0YVhcImluIGU/ZS5kZWx0YVg6XCJ3aGVlbERlbHRhWFwiaW4gZT8tZS53aGVlbERlbHRhWDowfSxkZWx0YVk6ZnVuY3Rpb24oZSl7cmV0dXJuXCJkZWx0YVlcImluIGU/ZS5kZWx0YVk6XCJ3aGVlbERlbHRhWVwiaW4gZT8tZS53aGVlbERlbHRhWTpcIndoZWVsRGVsdGFcImluIGU/LWUud2hlZWxEZWx0YTowfSxkZWx0YVo6MCxkZWx0YU1vZGU6MH0pKSxuOD1uTihmKHt9LG5GLHtuZXdTdGF0ZTowLG9sZFN0YXRlOjB9KSksbjc9WzksMTMsMjcsMzJdLHRlPW5PJiZcIkNvbXBvc2l0aW9uRXZlbnRcImluIHdpbmRvdyx0bj1udWxsO25PJiZcImRvY3VtZW50TW9kZVwiaW4gZG9jdW1lbnQmJih0bj1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciB0dD1uTyYmXCJUZXh0RXZlbnRcImluIHdpbmRvdyYmIXRuLHRyPW5PJiYoIXRlfHx0biYmODx0biYmMTE+PXRuKSx0bz0hMTtmdW5jdGlvbiB0YShlLG4pe3N3aXRjaChlKXtjYXNlXCJrZXl1cFwiOnJldHVybiAtMSE9PW43LmluZGV4T2Yobi5rZXlDb2RlKTtjYXNlXCJrZXlkb3duXCI6cmV0dXJuIDIyOSE9PW4ua2V5Q29kZTtjYXNlXCJrZXlwcmVzc1wiOmNhc2VcIm1vdXNlZG93blwiOmNhc2VcImZvY3Vzb3V0XCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gdGkoZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mKGU9ZS5kZXRhaWwpJiZcImRhdGFcImluIGU/ZS5kYXRhOm51bGx9dmFyIHRsPSExLHRzPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLFwiZGF0ZXRpbWUtbG9jYWxcIjohMCxlbWFpbDohMCxtb250aDohMCxudW1iZXI6ITAscGFzc3dvcmQ6ITAscmFuZ2U6ITAsc2VhcmNoOiEwLHRlbDohMCx0ZXh0OiEwLHRpbWU6ITAsdXJsOiEwLHdlZWs6ITB9O2Z1bmN0aW9uIHRjKGUpe3ZhciBuPWUmJmUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImlucHV0XCI9PT1uPyEhdHNbZS50eXBlXTpcInRleHRhcmVhXCI9PT1ufWZ1bmN0aW9uIHR1KGUsbix0LHIpe255P254P254LnB1c2gocik6bng9W3JdOm55PXIsMDwobj1jZShuLFwib25DaGFuZ2VcIikpLmxlbmd0aCYmKHQ9bmV3IG5VKFwib25DaGFuZ2VcIixcImNoYW5nZVwiLG51bGwsdCxyKSxlLnB1c2goe2V2ZW50OnQsbGlzdGVuZXJzOm59KSl9dmFyIHRkPW51bGwsdGY9bnVsbDtmdW5jdGlvbiB0cChlKXtzMihlLDApfWZ1bmN0aW9uIHRoKGUpe2lmKGU4KGUkKGUpKSlyZXR1cm4gZX1mdW5jdGlvbiB0ZyhlLG4pe2lmKFwiY2hhbmdlXCI9PT1lKXJldHVybiBufXZhciB0bT0hMTtpZihuTyl7aWYobk8pe3ZhciB0dj1cIm9uaW5wdXRcImluIGRvY3VtZW50O2lmKCF0dil7dmFyIHRiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7dGIuc2V0QXR0cmlidXRlKFwib25pbnB1dFwiLFwicmV0dXJuO1wiKSx0dj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0Yi5vbmlucHV0fXI9dHZ9ZWxzZSByPSExO3RtPXImJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHw5PGRvY3VtZW50LmRvY3VtZW50TW9kZSl9ZnVuY3Rpb24gdHkoKXt0ZCYmKHRkLmRldGFjaEV2ZW50KFwib25wcm9wZXJ0eWNoYW5nZVwiLHR4KSx0Zj10ZD1udWxsKX1mdW5jdGlvbiB0eChlKXtpZihcInZhbHVlXCI9PT1lLnByb3BlcnR5TmFtZSYmdGgodGYpKXt2YXIgbj1bXTt0dShuLHRmLGUsbmIoZSkpLG5rKHRwLG4pfX1mdW5jdGlvbiB0dyhlLG4sdCl7XCJmb2N1c2luXCI9PT1lPyh0eSgpLHRkPW4sdGY9dCx0ZC5hdHRhY2hFdmVudChcIm9ucHJvcGVydHljaGFuZ2VcIix0eCkpOlwiZm9jdXNvdXRcIj09PWUmJnR5KCl9ZnVuY3Rpb24gdGooZSl7aWYoXCJzZWxlY3Rpb25jaGFuZ2VcIj09PWV8fFwia2V5dXBcIj09PWV8fFwia2V5ZG93blwiPT09ZSlyZXR1cm4gdGgodGYpfWZ1bmN0aW9uIHRrKGUsbil7aWYoXCJjbGlja1wiPT09ZSlyZXR1cm4gdGgobil9ZnVuY3Rpb24gdEEoZSxuKXtpZihcImlucHV0XCI9PT1lfHxcImNoYW5nZVwiPT09ZSlyZXR1cm4gdGgobil9dmFyIHRPPVwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZT09PW4mJigwIT09ZXx8MS9lPT0xL24pfHxlIT1lJiZuIT1ufTtmdW5jdGlvbiB0QyhlLG4pe2lmKHRPKGUsbikpcmV0dXJuITA7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGV8fG51bGw9PT1lfHxcIm9iamVjdFwiIT10eXBlb2Ygbnx8bnVsbD09PW4pcmV0dXJuITE7dmFyIHQ9T2JqZWN0LmtleXMoZSkscj1PYmplY3Qua2V5cyhuKTtpZih0Lmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXRbcl07aWYoIUcuY2FsbChuLG8pfHwhdE8oZVtvXSxuW29dKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiB0UyhlKXtmb3IoO2UmJmUuZmlyc3RDaGlsZDspZT1lLmZpcnN0Q2hpbGQ7cmV0dXJuIGV9ZnVuY3Rpb24gdEUoZSxuKXt2YXIgdCxyPXRTKGUpO2ZvcihlPTA7cjspe2lmKDM9PT1yLm5vZGVUeXBlKXtpZih0PWUrci50ZXh0Q29udGVudC5sZW5ndGgsZTw9biYmdD49bilyZXR1cm57bm9kZTpyLG9mZnNldDpuLWV9O2U9dH1lOntmb3IoO3I7KXtpZihyLm5leHRTaWJsaW5nKXtyPXIubmV4dFNpYmxpbmc7YnJlYWsgZX1yPXIucGFyZW50Tm9kZX1yPXZvaWQgMH1yPXRTKHIpfX1mdW5jdGlvbiB0XyhlKXtlPW51bGwhPWUmJm51bGwhPWUub3duZXJEb2N1bWVudCYmbnVsbCE9ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3P2Uub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldzp3aW5kb3c7Zm9yKHZhciBuPWU3KGUuZG9jdW1lbnQpO24gaW5zdGFuY2VvZiBlLkhUTUxJRnJhbWVFbGVtZW50Oyl7dHJ5e3ZhciB0PVwic3RyaW5nXCI9PXR5cGVvZiBuLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZn1jYXRjaChlKXt0PSExfWlmKHQpZT1uLmNvbnRlbnRXaW5kb3c7ZWxzZSBicmVhaztuPWU3KGUuZG9jdW1lbnQpfXJldHVybiBufWZ1bmN0aW9uIHRQKGUpe3ZhciBuPWUmJmUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gbiYmKFwiaW5wdXRcIj09PW4mJihcInRleHRcIj09PWUudHlwZXx8XCJzZWFyY2hcIj09PWUudHlwZXx8XCJ0ZWxcIj09PWUudHlwZXx8XCJ1cmxcIj09PWUudHlwZXx8XCJwYXNzd29yZFwiPT09ZS50eXBlKXx8XCJ0ZXh0YXJlYVwiPT09bnx8XCJ0cnVlXCI9PT1lLmNvbnRlbnRFZGl0YWJsZSl9dmFyIHR6PW5PJiZcImRvY3VtZW50TW9kZVwiaW4gZG9jdW1lbnQmJjExPj1kb2N1bWVudC5kb2N1bWVudE1vZGUsdEw9bnVsbCx0VD1udWxsLHRSPW51bGwsdE49ITE7ZnVuY3Rpb24gdEQoZSxuLHQpe3ZhciByPXQud2luZG93PT09dD90LmRvY3VtZW50Ojk9PT10Lm5vZGVUeXBlP3Q6dC5vd25lckRvY3VtZW50O3ROfHxudWxsPT10THx8dEwhPT1lNyhyKXx8KHI9XCJzZWxlY3Rpb25TdGFydFwiaW4ocj10TCkmJnRQKHIpP3tzdGFydDpyLnNlbGVjdGlvblN0YXJ0LGVuZDpyLnNlbGVjdGlvbkVuZH06e2FuY2hvck5vZGU6KHI9KHIub3duZXJEb2N1bWVudCYmci5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpLmdldFNlbGVjdGlvbigpKS5hbmNob3JOb2RlLGFuY2hvck9mZnNldDpyLmFuY2hvck9mZnNldCxmb2N1c05vZGU6ci5mb2N1c05vZGUsZm9jdXNPZmZzZXQ6ci5mb2N1c09mZnNldH0sdFImJnRDKHRSLHIpfHwodFI9ciwwPChyPWNlKHRULFwib25TZWxlY3RcIikpLmxlbmd0aCYmKG49bmV3IG5VKFwib25TZWxlY3RcIixcInNlbGVjdFwiLG51bGwsbix0KSxlLnB1c2goe2V2ZW50Om4sbGlzdGVuZXJzOnJ9KSxuLnRhcmdldD10TCkpKX1mdW5jdGlvbiB0QihlLG4pe3ZhciB0PXt9O3JldHVybiB0W2UudG9Mb3dlckNhc2UoKV09bi50b0xvd2VyQ2FzZSgpLHRbXCJXZWJraXRcIitlXT1cIndlYmtpdFwiK24sdFtcIk1velwiK2VdPVwibW96XCIrbix0fXZhciB0TT17YW5pbWF0aW9uZW5kOnRCKFwiQW5pbWF0aW9uXCIsXCJBbmltYXRpb25FbmRcIiksYW5pbWF0aW9uaXRlcmF0aW9uOnRCKFwiQW5pbWF0aW9uXCIsXCJBbmltYXRpb25JdGVyYXRpb25cIiksYW5pbWF0aW9uc3RhcnQ6dEIoXCJBbmltYXRpb25cIixcIkFuaW1hdGlvblN0YXJ0XCIpLHRyYW5zaXRpb25ydW46dEIoXCJUcmFuc2l0aW9uXCIsXCJUcmFuc2l0aW9uUnVuXCIpLHRyYW5zaXRpb25zdGFydDp0QihcIlRyYW5zaXRpb25cIixcIlRyYW5zaXRpb25TdGFydFwiKSx0cmFuc2l0aW9uY2FuY2VsOnRCKFwiVHJhbnNpdGlvblwiLFwiVHJhbnNpdGlvbkNhbmNlbFwiKSx0cmFuc2l0aW9uZW5kOnRCKFwiVHJhbnNpdGlvblwiLFwiVHJhbnNpdGlvbkVuZFwiKX0sdEk9e30sdEg9e307ZnVuY3Rpb24gdEYoZSl7aWYodElbZV0pcmV0dXJuIHRJW2VdO2lmKCF0TVtlXSlyZXR1cm4gZTt2YXIgbix0PXRNW2VdO2ZvcihuIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShuKSYmbiBpbiB0SClyZXR1cm4gdElbZV09dFtuXTtyZXR1cm4gZX1uTyYmKHRIPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuc3R5bGUsXCJBbmltYXRpb25FdmVudFwiaW4gd2luZG93fHwoZGVsZXRlIHRNLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRlIHRNLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb24sZGVsZXRlIHRNLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksXCJUcmFuc2l0aW9uRXZlbnRcImluIHdpbmRvd3x8ZGVsZXRlIHRNLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbik7dmFyIHRVPXRGKFwiYW5pbWF0aW9uZW5kXCIpLHRWPXRGKFwiYW5pbWF0aW9uaXRlcmF0aW9uXCIpLHRxPXRGKFwiYW5pbWF0aW9uc3RhcnRcIiksdFc9dEYoXCJ0cmFuc2l0aW9ucnVuXCIpLHQkPXRGKFwidHJhbnNpdGlvbnN0YXJ0XCIpLHRaPXRGKFwidHJhbnNpdGlvbmNhbmNlbFwiKSx0WT10RihcInRyYW5zaXRpb25lbmRcIiksdFg9bmV3IE1hcCx0Sz1cImFib3J0IGF1eENsaWNrIGJlZm9yZVRvZ2dsZSBjYW5jZWwgY2FuUGxheSBjYW5QbGF5VGhyb3VnaCBjbGljayBjbG9zZSBjb250ZXh0TWVudSBjb3B5IGN1dCBkcmFnIGRyYWdFbmQgZHJhZ0VudGVyIGRyYWdFeGl0IGRyYWdMZWF2ZSBkcmFnT3ZlciBkcmFnU3RhcnQgZHJvcCBkdXJhdGlvbkNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBnb3RQb2ludGVyQ2FwdHVyZSBpbnB1dCBpbnZhbGlkIGtleURvd24ga2V5UHJlc3Mga2V5VXAgbG9hZCBsb2FkZWREYXRhIGxvYWRlZE1ldGFkYXRhIGxvYWRTdGFydCBsb3N0UG9pbnRlckNhcHR1cmUgbW91c2VEb3duIG1vdXNlTW92ZSBtb3VzZU91dCBtb3VzZU92ZXIgbW91c2VVcCBwYXN0ZSBwYXVzZSBwbGF5IHBsYXlpbmcgcG9pbnRlckNhbmNlbCBwb2ludGVyRG93biBwb2ludGVyTW92ZSBwb2ludGVyT3V0IHBvaW50ZXJPdmVyIHBvaW50ZXJVcCBwcm9ncmVzcyByYXRlQ2hhbmdlIHJlc2V0IHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1Ym1pdCBzdXNwZW5kIHRpbWVVcGRhdGUgdG91Y2hDYW5jZWwgdG91Y2hFbmQgdG91Y2hTdGFydCB2b2x1bWVDaGFuZ2Ugc2Nyb2xsIHRvZ2dsZSB0b3VjaE1vdmUgd2FpdGluZyB3aGVlbFwiLnNwbGl0KFwiIFwiKTtmdW5jdGlvbiB0UShlLG4pe3RYLnNldChlLG4pLGVRKG4sW2VdKX10Sy5wdXNoKFwic2Nyb2xsRW5kXCIpO3ZhciB0Rz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXBvcnRFcnJvcj9yZXBvcnRFcnJvcjpmdW5jdGlvbihlKXtpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuRXJyb3JFdmVudCl7dmFyIG49bmV3IHdpbmRvdy5FcnJvckV2ZW50KFwiZXJyb3JcIix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLG1lc3NhZ2U6XCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZcInN0cmluZ1wiPT10eXBlb2YgZS5tZXNzYWdlP1N0cmluZyhlLm1lc3NhZ2UpOlN0cmluZyhlKSxlcnJvcjplfSk7aWYoIXdpbmRvdy5kaXNwYXRjaEV2ZW50KG4pKXJldHVybn1lbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwcm9jZXNzLmVtaXQpcmV0dXJuIHZvaWQgcHJvY2Vzcy5lbWl0KFwidW5jYXVnaHRFeGNlcHRpb25cIixlKTtjb25zb2xlLmVycm9yKGUpfSx0Sj1bXSx0MD0wLHQxPTA7ZnVuY3Rpb24gdDIoKXtmb3IodmFyIGU9dDAsbj10MT10MD0wO248ZTspe3ZhciB0PXRKW25dO3RKW24rK109bnVsbDt2YXIgcj10SltuXTt0SltuKytdPW51bGw7dmFyIG89dEpbbl07dEpbbisrXT1udWxsO3ZhciBhPXRKW25dO2lmKHRKW24rK109bnVsbCxudWxsIT09ciYmbnVsbCE9PW8pe3ZhciBpPXIucGVuZGluZztudWxsPT09aT9vLm5leHQ9bzooby5uZXh0PWkubmV4dCxpLm5leHQ9byksci5wZW5kaW5nPW99MCE9PWEmJnQ2KHQsbyxhKX19ZnVuY3Rpb24gdDQoZSxuLHQscil7dEpbdDArK109ZSx0Slt0MCsrXT1uLHRKW3QwKytdPXQsdEpbdDArK109cix0MXw9cixlLmxhbmVzfD1yLG51bGwhPT0oZT1lLmFsdGVybmF0ZSkmJihlLmxhbmVzfD1yKX1mdW5jdGlvbiB0NShlLG4sdCxyKXtyZXR1cm4gdDQoZSxuLHQsciksdDkoZSl9ZnVuY3Rpb24gdDMoZSxuKXtyZXR1cm4gdDQoZSxudWxsLG51bGwsbiksdDkoZSl9ZnVuY3Rpb24gdDYoZSxuLHQpe2UubGFuZXN8PXQ7dmFyIHI9ZS5hbHRlcm5hdGU7bnVsbCE9PXImJihyLmxhbmVzfD10KTtmb3IodmFyIG89ITEsYT1lLnJldHVybjtudWxsIT09YTspYS5jaGlsZExhbmVzfD10LG51bGwhPT0ocj1hLmFsdGVybmF0ZSkmJihyLmNoaWxkTGFuZXN8PXQpLDIyPT09YS50YWcmJihudWxsPT09KGU9YS5zdGF0ZU5vZGUpfHwxJmUuX3Zpc2liaWxpdHl8fChvPSEwKSksZT1hLGE9YS5yZXR1cm47cmV0dXJuIDM9PT1lLnRhZz8oYT1lLnN0YXRlTm9kZSxvJiZudWxsIT09biYmKG89MzEtZWcodCksbnVsbD09PShyPShlPWEuaGlkZGVuVXBkYXRlcylbb10pP2Vbb109W25dOnIucHVzaChuKSxuLmxhbmU9MHgyMDAwMDAwMHx0KSxhKTpudWxsfWZ1bmN0aW9uIHQ5KGUpe2lmKDUwPHNlKXRocm93IHNlPTAsc249bnVsbCxFcnJvcihsKDE4NSkpO2Zvcih2YXIgbj1lLnJldHVybjtudWxsIT09bjspbj0oZT1uKS5yZXR1cm47cmV0dXJuIDM9PT1lLnRhZz9lLnN0YXRlTm9kZTpudWxsfXZhciB0OD17fTtmdW5jdGlvbiB0NyhlLG4sdCxyKXt0aGlzLnRhZz1lLHRoaXMua2V5PXQsdGhpcy5zaWJsaW5nPXRoaXMuY2hpbGQ9dGhpcy5yZXR1cm49dGhpcy5zdGF0ZU5vZGU9dGhpcy50eXBlPXRoaXMuZWxlbWVudFR5cGU9bnVsbCx0aGlzLmluZGV4PTAsdGhpcy5yZWZDbGVhbnVwPXRoaXMucmVmPW51bGwsdGhpcy5wZW5kaW5nUHJvcHM9bix0aGlzLmRlcGVuZGVuY2llcz10aGlzLm1lbW9pemVkU3RhdGU9dGhpcy51cGRhdGVRdWV1ZT10aGlzLm1lbW9pemVkUHJvcHM9bnVsbCx0aGlzLm1vZGU9cix0aGlzLnN1YnRyZWVGbGFncz10aGlzLmZsYWdzPTAsdGhpcy5kZWxldGlvbnM9bnVsbCx0aGlzLmNoaWxkTGFuZXM9dGhpcy5sYW5lcz0wLHRoaXMuYWx0ZXJuYXRlPW51bGx9ZnVuY3Rpb24gcmUoZSxuLHQscil7cmV0dXJuIG5ldyB0NyhlLG4sdCxyKX1mdW5jdGlvbiBybihlKXtyZXR1cm4hKCEoZT1lLnByb3RvdHlwZSl8fCFlLmlzUmVhY3RDb21wb25lbnQpfWZ1bmN0aW9uIHJ0KGUsbil7dmFyIHQ9ZS5hbHRlcm5hdGU7cmV0dXJuIG51bGw9PT10PygodD1yZShlLnRhZyxuLGUua2V5LGUubW9kZSkpLmVsZW1lbnRUeXBlPWUuZWxlbWVudFR5cGUsdC50eXBlPWUudHlwZSx0LnN0YXRlTm9kZT1lLnN0YXRlTm9kZSx0LmFsdGVybmF0ZT1lLGUuYWx0ZXJuYXRlPXQpOih0LnBlbmRpbmdQcm9wcz1uLHQudHlwZT1lLnR5cGUsdC5mbGFncz0wLHQuc3VidHJlZUZsYWdzPTAsdC5kZWxldGlvbnM9bnVsbCksdC5mbGFncz0weDNlMDAwMDAmZS5mbGFncyx0LmNoaWxkTGFuZXM9ZS5jaGlsZExhbmVzLHQubGFuZXM9ZS5sYW5lcyx0LmNoaWxkPWUuY2hpbGQsdC5tZW1vaXplZFByb3BzPWUubWVtb2l6ZWRQcm9wcyx0Lm1lbW9pemVkU3RhdGU9ZS5tZW1vaXplZFN0YXRlLHQudXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSxuPWUuZGVwZW5kZW5jaWVzLHQuZGVwZW5kZW5jaWVzPW51bGw9PT1uP251bGw6e2xhbmVzOm4ubGFuZXMsZmlyc3RDb250ZXh0Om4uZmlyc3RDb250ZXh0fSx0LnNpYmxpbmc9ZS5zaWJsaW5nLHQuaW5kZXg9ZS5pbmRleCx0LnJlZj1lLnJlZix0LnJlZkNsZWFudXA9ZS5yZWZDbGVhbnVwLHR9ZnVuY3Rpb24gcnIoZSxuKXtlLmZsYWdzJj0weDNlMDAwMDI7dmFyIHQ9ZS5hbHRlcm5hdGU7cmV0dXJuIG51bGw9PT10PyhlLmNoaWxkTGFuZXM9MCxlLmxhbmVzPW4sZS5jaGlsZD1udWxsLGUuc3VidHJlZUZsYWdzPTAsZS5tZW1vaXplZFByb3BzPW51bGwsZS5tZW1vaXplZFN0YXRlPW51bGwsZS51cGRhdGVRdWV1ZT1udWxsLGUuZGVwZW5kZW5jaWVzPW51bGwsZS5zdGF0ZU5vZGU9bnVsbCk6KGUuY2hpbGRMYW5lcz10LmNoaWxkTGFuZXMsZS5sYW5lcz10LmxhbmVzLGUuY2hpbGQ9dC5jaGlsZCxlLnN1YnRyZWVGbGFncz0wLGUuZGVsZXRpb25zPW51bGwsZS5tZW1vaXplZFByb3BzPXQubWVtb2l6ZWRQcm9wcyxlLm1lbW9pemVkU3RhdGU9dC5tZW1vaXplZFN0YXRlLGUudXBkYXRlUXVldWU9dC51cGRhdGVRdWV1ZSxlLnR5cGU9dC50eXBlLGUuZGVwZW5kZW5jaWVzPW51bGw9PT0obj10LmRlcGVuZGVuY2llcyk/bnVsbDp7bGFuZXM6bi5sYW5lcyxmaXJzdENvbnRleHQ6bi5maXJzdENvbnRleHR9KSxlfWZ1bmN0aW9uIHJvKGUsbix0LHIsbyxhKXt2YXIgaT0wO2lmKHI9ZSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKXJuKGUpJiYoaT0xKTtlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiBlKWk9IWZ1bmN0aW9uKGUsbix0KXtpZigxPT09dHx8bnVsbCE9bi5pdGVtUHJvcClyZXR1cm4hMTtzd2l0Y2goZSl7Y2FzZVwibWV0YVwiOmNhc2VcInRpdGxlXCI6cmV0dXJuITA7Y2FzZVwic3R5bGVcIjppZihcInN0cmluZ1wiIT10eXBlb2Ygbi5wcmVjZWRlbmNlfHxcInN0cmluZ1wiIT10eXBlb2Ygbi5ocmVmfHxcIlwiPT09bi5ocmVmKWJyZWFrO3JldHVybiEwO2Nhc2VcImxpbmtcIjppZihcInN0cmluZ1wiIT10eXBlb2Ygbi5yZWx8fFwic3RyaW5nXCIhPXR5cGVvZiBuLmhyZWZ8fFwiXCI9PT1uLmhyZWZ8fG4ub25Mb2FkfHxuLm9uRXJyb3IpYnJlYWs7aWYoXCJzdHlsZXNoZWV0XCI9PT1uLnJlbClyZXR1cm4gZT1uLmRpc2FibGVkLFwic3RyaW5nXCI9PXR5cGVvZiBuLnByZWNlZGVuY2UmJm51bGw9PWU7cmV0dXJuITA7Y2FzZVwic2NyaXB0XCI6aWYobi5hc3luYyYmXCJmdW5jdGlvblwiIT10eXBlb2Ygbi5hc3luYyYmXCJzeW1ib2xcIiE9dHlwZW9mIG4uYXN5bmMmJiFuLm9uTG9hZCYmIW4ub25FcnJvciYmbi5zcmMmJlwic3RyaW5nXCI9PXR5cGVvZiBuLnNyYylyZXR1cm4hMH1yZXR1cm4hMX0oZSx0LEguY3VycmVudCk/XCJodG1sXCI9PT1lfHxcImhlYWRcIj09PWV8fFwiYm9keVwiPT09ZT8yNzo1OjI2O2Vsc2UgZTpzd2l0Y2goZSl7Y2FzZSBDOnJldHVybihlPXJlKDMxLHQsbixvKSkuZWxlbWVudFR5cGU9QyxlLmxhbmVzPWEsZTtjYXNlIG06cmV0dXJuIHJhKHQuY2hpbGRyZW4sbyxhLG4pO2Nhc2UgdjppPTgsb3w9MjQ7YnJlYWs7Y2FzZSBiOnJldHVybihlPXJlKDEyLHQsbiwyfG8pKS5lbGVtZW50VHlwZT1iLGUubGFuZXM9YSxlO2Nhc2UgajpyZXR1cm4oZT1yZSgxMyx0LG4sbykpLmVsZW1lbnRUeXBlPWosZS5sYW5lcz1hLGU7Y2FzZSBrOnJldHVybihlPXJlKDE5LHQsbixvKSkuZWxlbWVudFR5cGU9ayxlLmxhbmVzPWEsZTtkZWZhdWx0OmlmKFwib2JqZWN0XCI9PXR5cGVvZiBlJiZudWxsIT09ZSlzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSB4Omk9MTA7YnJlYWsgZTtjYXNlIHk6aT05O2JyZWFrIGU7Y2FzZSB3Omk9MTE7YnJlYWsgZTtjYXNlIEE6aT0xNDticmVhayBlO2Nhc2UgTzppPTE2LHI9bnVsbDticmVhayBlfWk9MjksdD1FcnJvcihsKDEzMCxudWxsPT09ZT9cIm51bGxcIjp0eXBlb2YgZSxcIlwiKSkscj1udWxsfXJldHVybihuPXJlKGksdCxuLG8pKS5lbGVtZW50VHlwZT1lLG4udHlwZT1yLG4ubGFuZXM9YSxufWZ1bmN0aW9uIHJhKGUsbix0LHIpe3JldHVybihlPXJlKDcsZSxyLG4pKS5sYW5lcz10LGV9ZnVuY3Rpb24gcmkoZSxuLHQpe3JldHVybihlPXJlKDYsZSxudWxsLG4pKS5sYW5lcz10LGV9ZnVuY3Rpb24gcmwoZSl7dmFyIG49cmUoMTgsbnVsbCxudWxsLDApO3JldHVybiBuLnN0YXRlTm9kZT1lLG59ZnVuY3Rpb24gcnMoZSxuLHQpe3JldHVybihuPXJlKDQsbnVsbCE9PWUuY2hpbGRyZW4/ZS5jaGlsZHJlbjpbXSxlLmtleSxuKSkubGFuZXM9dCxuLnN0YXRlTm9kZT17Y29udGFpbmVySW5mbzplLmNvbnRhaW5lckluZm8scGVuZGluZ0NoaWxkcmVuOm51bGwsaW1wbGVtZW50YXRpb246ZS5pbXBsZW1lbnRhdGlvbn0sbn12YXIgcmM9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gcnUoZSxuKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUpe3ZhciB0PXJjLmdldChlKTtyZXR1cm4gdm9pZCAwIT09dD90OihuPXt2YWx1ZTplLHNvdXJjZTpuLHN0YWNrOlEobil9LHJjLnNldChlLG4pLG4pfXJldHVybnt2YWx1ZTplLHNvdXJjZTpuLHN0YWNrOlEobil9fXZhciByZD1bXSxyZj0wLHJwPW51bGwscmg9MCxyZz1bXSxybT0wLHJ2PW51bGwscmI9MSxyeT1cIlwiO2Z1bmN0aW9uIHJ4KGUsbil7cmRbcmYrK109cmgscmRbcmYrK109cnAscnA9ZSxyaD1ufWZ1bmN0aW9uIHJ3KGUsbix0KXtyZ1tybSsrXT1yYixyZ1tybSsrXT1yeSxyZ1tybSsrXT1ydixydj1lO3ZhciByPXJiO2U9cnk7dmFyIG89MzItZWcociktMTtyJj1+KDE8PG8pLHQrPTE7dmFyIGE9MzItZWcobikrbztpZigzMDxhKXt2YXIgaT1vLW8lNTthPShyJigxPDxpKS0xKS50b1N0cmluZygzMikscj4+PWksby09aSxyYj0xPDwzMi1lZyhuKStvfHQ8PG98cixyeT1hK2V9ZWxzZSByYj0xPDxhfHQ8PG98cixyeT1lfWZ1bmN0aW9uIHJqKGUpe251bGwhPT1lLnJldHVybiYmKHJ4KGUsMSkscncoZSwxLDApKX1mdW5jdGlvbiByayhlKXtmb3IoO2U9PT1ycDspcnA9cmRbLS1yZl0scmRbcmZdPW51bGwscmg9cmRbLS1yZl0scmRbcmZdPW51bGw7Zm9yKDtlPT09cnY7KXJ2PXJnWy0tcm1dLHJnW3JtXT1udWxsLHJ5PXJnWy0tcm1dLHJnW3JtXT1udWxsLHJiPXJnWy0tcm1dLHJnW3JtXT1udWxsfWZ1bmN0aW9uIHJBKGUsbil7cmdbcm0rK109cmIscmdbcm0rK109cnkscmdbcm0rK109cnYscmI9bi5pZCxyeT1uLm92ZXJmbG93LHJ2PWV9dmFyIHJPPW51bGwsckM9bnVsbCxyUz0hMSxyRT1udWxsLHJfPSExLHJQPUVycm9yKGwoNTE5KSk7ZnVuY3Rpb24gcnooZSl7dmFyIG49RXJyb3IobCg0MTgsMTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXT9cInRleHRcIjpcIkhUTUxcIixcIlwiKSk7dGhyb3cgckIocnUobixlKSksclB9ZnVuY3Rpb24gckwoZSl7dmFyIG49ZS5zdGF0ZU5vZGUsdD1lLnR5cGUscj1lLm1lbW9pemVkUHJvcHM7c3dpdGNoKG5bZU5dPWUsbltlRF09cix0KXtjYXNlXCJkaWFsb2dcIjpzNChcImNhbmNlbFwiLG4pLHM0KFwiY2xvc2VcIixuKTticmVhaztjYXNlXCJpZnJhbWVcIjpjYXNlXCJvYmplY3RcIjpjYXNlXCJlbWJlZFwiOnM0KFwibG9hZFwiLG4pO2JyZWFrO2Nhc2VcInZpZGVvXCI6Y2FzZVwiYXVkaW9cIjpmb3IodD0wO3Q8czAubGVuZ3RoO3QrKylzNChzMFt0XSxuKTticmVhaztjYXNlXCJzb3VyY2VcIjpzNChcImVycm9yXCIsbik7YnJlYWs7Y2FzZVwiaW1nXCI6Y2FzZVwiaW1hZ2VcIjpjYXNlXCJsaW5rXCI6czQoXCJlcnJvclwiLG4pLHM0KFwibG9hZFwiLG4pO2JyZWFrO2Nhc2VcImRldGFpbHNcIjpzNChcInRvZ2dsZVwiLG4pO2JyZWFrO2Nhc2VcImlucHV0XCI6czQoXCJpbnZhbGlkXCIsbiksbnIobixyLnZhbHVlLHIuZGVmYXVsdFZhbHVlLHIuY2hlY2tlZCxyLmRlZmF1bHRDaGVja2VkLHIudHlwZSxyLm5hbWUsITApO2JyZWFrO2Nhc2VcInNlbGVjdFwiOnM0KFwiaW52YWxpZFwiLG4pO2JyZWFrO2Nhc2VcInRleHRhcmVhXCI6czQoXCJpbnZhbGlkXCIsbiksbmwobixyLnZhbHVlLHIuZGVmYXVsdFZhbHVlLHIuY2hpbGRyZW4pfVwic3RyaW5nXCIhPXR5cGVvZih0PXIuY2hpbGRyZW4pJiZcIm51bWJlclwiIT10eXBlb2YgdCYmXCJiaWdpbnRcIiE9dHlwZW9mIHR8fG4udGV4dENvbnRlbnQ9PT1cIlwiK3R8fCEwPT09ci5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmd8fGNpKG4udGV4dENvbnRlbnQsdCk/KG51bGwhPXIucG9wb3ZlciYmKHM0KFwiYmVmb3JldG9nZ2xlXCIsbiksczQoXCJ0b2dnbGVcIixuKSksbnVsbCE9ci5vblNjcm9sbCYmczQoXCJzY3JvbGxcIixuKSxudWxsIT1yLm9uU2Nyb2xsRW5kJiZzNChcInNjcm9sbGVuZFwiLG4pLG51bGwhPXIub25DbGljayYmKG4ub25jbGljaz1ubSksbj0hMCk6bj0hMSxufHxyeihlLCEwKX1mdW5jdGlvbiByVChlKXtmb3Iock89ZS5yZXR1cm47ck87KXN3aXRjaChyTy50YWcpe2Nhc2UgNTpjYXNlIDMxOmNhc2UgMTM6cl89ITE7cmV0dXJuO2Nhc2UgMjc6Y2FzZSAzOnJfPSEwO3JldHVybjtkZWZhdWx0OnJPPXJPLnJldHVybn19ZnVuY3Rpb24gclIoZSl7aWYoZSE9PXJPKXJldHVybiExO2lmKCFyUylyZXR1cm4gclQoZSksclM9ITAsITE7dmFyIG4sdD1lLnRhZztpZigobj0zIT09dCYmMjchPT10KSYmKChuPTU9PT10KSYmKG49XCJmb3JtXCI9PT0obj1lLnR5cGUpfHxcImJ1dHRvblwiPT09bnx8Y2coZS50eXBlLGUubWVtb2l6ZWRQcm9wcykpLG49IW4pLG4mJnJDJiZyeihlKSxyVChlKSwxMz09PXQpe2lmKCEoZT1udWxsIT09KGU9ZS5tZW1vaXplZFN0YXRlKT9lLmRlaHlkcmF0ZWQ6bnVsbCkpdGhyb3cgRXJyb3IobCgzMTcpKTtyQz1jeihlKX1lbHNlIGlmKDMxPT09dCl7aWYoIShlPW51bGwhPT0oZT1lLm1lbW9pemVkU3RhdGUpP2UuZGVoeWRyYXRlZDpudWxsKSl0aHJvdyBFcnJvcihsKDMxNykpO3JDPWN6KGUpfWVsc2UgMjc9PT10Pyh0PXJDLGNqKGUudHlwZSk/KGU9Y1AsY1A9bnVsbCxyQz1lKTpyQz10KTpyQz1yTz9jXyhlLnN0YXRlTm9kZS5uZXh0U2libGluZyk6bnVsbDtyZXR1cm4hMH1mdW5jdGlvbiByTigpe3JDPXJPPW51bGwsclM9ITF9ZnVuY3Rpb24gckQoKXt2YXIgZT1yRTtyZXR1cm4gbnVsbCE9PWUmJihudWxsPT09bFE/bFE9ZTpsUS5wdXNoLmFwcGx5KGxRLGUpLHJFPW51bGwpLGV9ZnVuY3Rpb24gckIoZSl7bnVsbD09PXJFP3JFPVtlXTpyRS5wdXNoKGUpfXZhciByTT1CKG51bGwpLHJJPW51bGwsckg9bnVsbDtmdW5jdGlvbiByRihlLG4sdCl7SShyTSxuLl9jdXJyZW50VmFsdWUpLG4uX2N1cnJlbnRWYWx1ZT10fWZ1bmN0aW9uIHJVKGUpe2UuX2N1cnJlbnRWYWx1ZT1yTS5jdXJyZW50LE0ock0pfWZ1bmN0aW9uIHJWKGUsbix0KXtmb3IoO251bGwhPT1lOyl7dmFyIHI9ZS5hbHRlcm5hdGU7aWYoKGUuY2hpbGRMYW5lcyZuKSE9PW4/KGUuY2hpbGRMYW5lc3w9bixudWxsIT09ciYmKHIuY2hpbGRMYW5lc3w9bikpOm51bGwhPT1yJiYoci5jaGlsZExhbmVzJm4pIT09biYmKHIuY2hpbGRMYW5lc3w9biksZT09PXQpYnJlYWs7ZT1lLnJldHVybn19ZnVuY3Rpb24gcnEoZSxuLHQscil7dmFyIG89ZS5jaGlsZDtmb3IobnVsbCE9PW8mJihvLnJldHVybj1lKTtudWxsIT09bzspe3ZhciBhPW8uZGVwZW5kZW5jaWVzO2lmKG51bGwhPT1hKXt2YXIgaT1vLmNoaWxkO2E9YS5maXJzdENvbnRleHQ7ZTpmb3IoO251bGwhPT1hOyl7dmFyIHM9YTthPW87Zm9yKHZhciBjPTA7YzxuLmxlbmd0aDtjKyspaWYocy5jb250ZXh0PT09bltjXSl7YS5sYW5lc3w9dCxudWxsIT09KHM9YS5hbHRlcm5hdGUpJiYocy5sYW5lc3w9dCksclYoYS5yZXR1cm4sdCxlKSxyfHwoaT1udWxsKTticmVhayBlfWE9cy5uZXh0fX1lbHNlIGlmKDE4PT09by50YWcpe2lmKG51bGw9PT0oaT1vLnJldHVybikpdGhyb3cgRXJyb3IobCgzNDEpKTtpLmxhbmVzfD10LG51bGwhPT0oYT1pLmFsdGVybmF0ZSkmJihhLmxhbmVzfD10KSxyVihpLHQsZSksaT1udWxsfWVsc2UgaT1vLmNoaWxkO2lmKG51bGwhPT1pKWkucmV0dXJuPW87ZWxzZSBmb3IoaT1vO251bGwhPT1pOyl7aWYoaT09PWUpe2k9bnVsbDticmVha31pZihudWxsIT09KG89aS5zaWJsaW5nKSl7by5yZXR1cm49aS5yZXR1cm4saT1vO2JyZWFrfWk9aS5yZXR1cm59bz1pfX1mdW5jdGlvbiByVyhlLG4sdCxyKXtlPW51bGw7Zm9yKHZhciBvPW4sYT0hMTtudWxsIT09bzspe2lmKCFhKXtpZigwIT0oNTI0Mjg4Jm8uZmxhZ3MpKWE9ITA7ZWxzZSBpZigwIT0oMjYyMTQ0Jm8uZmxhZ3MpKWJyZWFrfWlmKDEwPT09by50YWcpe3ZhciBpPW8uYWx0ZXJuYXRlO2lmKG51bGw9PT1pKXRocm93IEVycm9yKGwoMzg3KSk7aWYobnVsbCE9PShpPWkubWVtb2l6ZWRQcm9wcykpe3ZhciBzPW8udHlwZTt0TyhvLnBlbmRpbmdQcm9wcy52YWx1ZSxpLnZhbHVlKXx8KG51bGwhPT1lP2UucHVzaChzKTplPVtzXSl9fWVsc2UgaWYobz09PVYuY3VycmVudCl7aWYobnVsbD09PShpPW8uYWx0ZXJuYXRlKSl0aHJvdyBFcnJvcihsKDM4NykpO2kubWVtb2l6ZWRTdGF0ZS5tZW1vaXplZFN0YXRlIT09by5tZW1vaXplZFN0YXRlLm1lbW9pemVkU3RhdGUmJihudWxsIT09ZT9lLnB1c2goYzYpOmU9W2M2XSl9bz1vLnJldHVybn1udWxsIT09ZSYmcnEobixlLHQsciksbi5mbGFnc3w9MjYyMTQ0fWZ1bmN0aW9uIHIkKGUpe2ZvcihlPWUuZmlyc3RDb250ZXh0O251bGwhPT1lOyl7aWYoIXRPKGUuY29udGV4dC5fY3VycmVudFZhbHVlLGUubWVtb2l6ZWRWYWx1ZSkpcmV0dXJuITA7ZT1lLm5leHR9cmV0dXJuITF9ZnVuY3Rpb24gclooZSl7ckk9ZSxySD1udWxsLG51bGwhPT0oZT1lLmRlcGVuZGVuY2llcykmJihlLmZpcnN0Q29udGV4dD1udWxsKX1mdW5jdGlvbiByWShlKXtyZXR1cm4gcksockksZSl9ZnVuY3Rpb24gclgoZSxuKXtyZXR1cm4gbnVsbD09PXJJJiZyWihlKSxySyhlLG4pfWZ1bmN0aW9uIHJLKGUsbil7dmFyIHQ9bi5fY3VycmVudFZhbHVlO2lmKG49e2NvbnRleHQ6bixtZW1vaXplZFZhbHVlOnQsbmV4dDpudWxsfSxudWxsPT09ckgpe2lmKG51bGw9PT1lKXRocm93IEVycm9yKGwoMzA4KSk7ckg9bixlLmRlcGVuZGVuY2llcz17bGFuZXM6MCxmaXJzdENvbnRleHQ6bn0sZS5mbGFnc3w9NTI0Mjg4fWVsc2Ugckg9ckgubmV4dD1uO3JldHVybiB0fXZhciByUT1cInVuZGVmaW5lZFwiIT10eXBlb2YgQWJvcnRDb250cm9sbGVyP0Fib3J0Q29udHJvbGxlcjpmdW5jdGlvbigpe3ZhciBlPVtdLG49dGhpcy5zaWduYWw9e2Fib3J0ZWQ6ITEsYWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihuLHQpe2UucHVzaCh0KX19O3RoaXMuYWJvcnQ9ZnVuY3Rpb24oKXtuLmFib3J0ZWQ9ITAsZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlKCl9KX19LHJHPW8udW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxySj1vLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LHIwPXskJHR5cGVvZjp4LENvbnN1bWVyOm51bGwsUHJvdmlkZXI6bnVsbCxfY3VycmVudFZhbHVlOm51bGwsX2N1cnJlbnRWYWx1ZTI6bnVsbCxfdGhyZWFkQ291bnQ6MH07ZnVuY3Rpb24gcjEoKXtyZXR1cm57Y29udHJvbGxlcjpuZXcgclEsZGF0YTpuZXcgTWFwLHJlZkNvdW50OjB9fWZ1bmN0aW9uIHIyKGUpe2UucmVmQ291bnQtLSwwPT09ZS5yZWZDb3VudCYmckcockosZnVuY3Rpb24oKXtlLmNvbnRyb2xsZXIuYWJvcnQoKX0pfXZhciByND1udWxsLHI1PTAscjM9MCxyNj1udWxsO2Z1bmN0aW9uIHI5KCl7aWYoMD09LS1yNSYmbnVsbCE9PXI0KXtudWxsIT09cjYmJihyNi5zdGF0dXM9XCJmdWxmaWxsZWRcIik7dmFyIGU9cjQ7cjQ9bnVsbCxyMz0wLHI2PW51bGw7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspKDAsZVtuXSkoKX19dmFyIHI4PUwuUztMLlM9ZnVuY3Rpb24oZSxuKXtcIm9iamVjdFwiPT10eXBlb2YgbiYmbnVsbCE9PW4mJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4udGhlbiYmZnVuY3Rpb24oZSxuKXtpZihudWxsPT09cjQpe3ZhciB0PXI0PVtdO3I1PTAscjM9c1goKSxyNj17c3RhdHVzOlwicGVuZGluZ1wiLHZhbHVlOnZvaWQgMCx0aGVuOmZ1bmN0aW9uKGUpe3QucHVzaChlKX19fXI1Kyssbi50aGVuKHI5LHI5KX0oMCxuKSxudWxsIT09cjgmJnI4KGUsbil9O3ZhciByNz1CKG51bGwpO2Z1bmN0aW9uIG9lKCl7dmFyIGU9cjcuY3VycmVudDtyZXR1cm4gbnVsbCE9PWU/ZTpsTi5wb29sZWRDYWNoZX1mdW5jdGlvbiBvbihlLG4pe251bGw9PT1uP0kocjcscjcuY3VycmVudCk6SShyNyxuLnBvb2wpfWZ1bmN0aW9uIG90KCl7dmFyIGU9b2UoKTtyZXR1cm4gbnVsbD09PWU/bnVsbDp7cGFyZW50OnIwLl9jdXJyZW50VmFsdWUscG9vbDplfX12YXIgb3I9RXJyb3IobCg0NjApKSxvbz1FcnJvcihsKDQ3NCkpLG9hPUVycm9yKGwoNTQyKSksb2k9e3RoZW46ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBvbChlKXtyZXR1cm5cImZ1bGZpbGxlZFwiPT09KGU9ZS5zdGF0dXMpfHxcInJlamVjdGVkXCI9PT1lfWZ1bmN0aW9uIG9zKGUsbix0KXtzd2l0Y2godm9pZCAwPT09KHQ9ZVt0XSk/ZS5wdXNoKG4pOnQhPT1uJiYobi50aGVuKG5tLG5tKSxuPXQpLG4uc3RhdHVzKXtjYXNlXCJmdWxmaWxsZWRcIjpyZXR1cm4gbi52YWx1ZTtjYXNlXCJyZWplY3RlZFwiOnRocm93IG9kKGU9bi5yZWFzb24pLGU7ZGVmYXVsdDppZihcInN0cmluZ1wiPT10eXBlb2Ygbi5zdGF0dXMpbi50aGVuKG5tLG5tKTtlbHNle2lmKG51bGwhPT0oZT1sTikmJjEwMDxlLnNoZWxsU3VzcGVuZENvdW50ZXIpdGhyb3cgRXJyb3IobCg0ODIpKTsoZT1uKS5zdGF0dXM9XCJwZW5kaW5nXCIsZS50aGVuKGZ1bmN0aW9uKGUpe2lmKFwicGVuZGluZ1wiPT09bi5zdGF0dXMpe3ZhciB0PW47dC5zdGF0dXM9XCJmdWxmaWxsZWRcIix0LnZhbHVlPWV9fSxmdW5jdGlvbihlKXtpZihcInBlbmRpbmdcIj09PW4uc3RhdHVzKXt2YXIgdD1uO3Quc3RhdHVzPVwicmVqZWN0ZWRcIix0LnJlYXNvbj1lfX0pfXN3aXRjaChuLnN0YXR1cyl7Y2FzZVwiZnVsZmlsbGVkXCI6cmV0dXJuIG4udmFsdWU7Y2FzZVwicmVqZWN0ZWRcIjp0aHJvdyBvZChlPW4ucmVhc29uKSxlfXRocm93IG9jPW4sb3J9fXZhciBvYz1udWxsO2Z1bmN0aW9uIG91KCl7aWYobnVsbD09PW9jKXRocm93IEVycm9yKGwoNDU5KSk7dmFyIGU9b2M7cmV0dXJuIG9jPW51bGwsZX1mdW5jdGlvbiBvZChlKXtpZihlPT09b3J8fGU9PT1vYSl0aHJvdyBFcnJvcihsKDQ4MykpfXZhciBvZj1udWxsLG9wPTA7ZnVuY3Rpb24gb2goZSl7dmFyIG49b3A7cmV0dXJuIG9wKz0xLG51bGw9PT1vZiYmKG9mPVtdKSxvcyhvZixlLG4pfWZ1bmN0aW9uIG9nKGUsbil7ZS5yZWY9dm9pZCAwIT09KG49bi5wcm9wcy5yZWYpP246bnVsbH1mdW5jdGlvbiBvbShlLG4pe2lmKG4uJCR0eXBlb2Y9PT1wKXRocm93IEVycm9yKGwoNTI1KSk7dGhyb3cgRXJyb3IobCgzMSxcIltvYmplY3QgT2JqZWN0XVwiPT09KGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pKT9cIm9iamVjdCB3aXRoIGtleXMge1wiK09iamVjdC5rZXlzKG4pLmpvaW4oXCIsIFwiKStcIn1cIjplKSl9ZnVuY3Rpb24gb3YoZSl7cmV0dXJuKDAsZS5faW5pdCkoZS5fcGF5bG9hZCl9ZnVuY3Rpb24gb2IoZSl7ZnVuY3Rpb24gbihuLHQpe2lmKGUpe3ZhciByPW4uZGVsZXRpb25zO251bGw9PT1yPyhuLmRlbGV0aW9ucz1bdF0sbi5mbGFnc3w9MTYpOnIucHVzaCh0KX19ZnVuY3Rpb24gdCh0LHIpe2lmKCFlKXJldHVybiBudWxsO2Zvcig7bnVsbCE9PXI7KW4odCxyKSxyPXIuc2libGluZztyZXR1cm4gbnVsbH1mdW5jdGlvbiByKGUpe2Zvcih2YXIgbj1uZXcgTWFwO251bGwhPT1lOyludWxsIT09ZS5rZXk/bi5zZXQoZS5rZXksZSk6bi5zZXQoZS5pbmRleCxlKSxlPWUuc2libGluZztyZXR1cm4gbn1mdW5jdGlvbiBvKGUsbil7cmV0dXJuKGU9cnQoZSxuKSkuaW5kZXg9MCxlLnNpYmxpbmc9bnVsbCxlfWZ1bmN0aW9uIGEobix0LHIpe3JldHVybihuLmluZGV4PXIsZSk/bnVsbCE9PShyPW4uYWx0ZXJuYXRlKT8ocj1yLmluZGV4KTx0PyhuLmZsYWdzfD0weDQwMDAwMDIsdCk6cjoobi5mbGFnc3w9MHg0MDAwMDAyLHQpOihuLmZsYWdzfD0xMDQ4NTc2LHQpfWZ1bmN0aW9uIGkobil7cmV0dXJuIGUmJm51bGw9PT1uLmFsdGVybmF0ZSYmKG4uZmxhZ3N8PTB4NDAwMDAwMiksbn1mdW5jdGlvbiBzKGUsbix0LHIpe3JldHVybiBudWxsPT09bnx8NiE9PW4udGFnPyhuPXJpKHQsZS5tb2RlLHIpKS5yZXR1cm49ZToobj1vKG4sdCkpLnJldHVybj1lLG59ZnVuY3Rpb24gYyhlLG4sdCxyKXt2YXIgYT10LnR5cGU7cmV0dXJuIGE9PT1tP2QoZSxuLHQucHJvcHMuY2hpbGRyZW4scix0LmtleSk6KG51bGwhPT1uJiYobi5lbGVtZW50VHlwZT09PWF8fFwib2JqZWN0XCI9PXR5cGVvZiBhJiZudWxsIT09YSYmYS4kJHR5cGVvZj09PU8mJm92KGEpPT09bi50eXBlKT9vZyhuPW8obix0LnByb3BzKSx0KTpvZyhuPXJvKHQudHlwZSx0LmtleSx0LnByb3BzLG51bGwsZS5tb2RlLHIpLHQpLG4ucmV0dXJuPWUsbil9ZnVuY3Rpb24gdShlLG4sdCxyKXtyZXR1cm4gbnVsbD09PW58fDQhPT1uLnRhZ3x8bi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PXQuY29udGFpbmVySW5mb3x8bi5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT10LmltcGxlbWVudGF0aW9uPyhuPXJzKHQsZS5tb2RlLHIpKS5yZXR1cm49ZToobj1vKG4sdC5jaGlsZHJlbnx8W10pKS5yZXR1cm49ZSxufWZ1bmN0aW9uIGQoZSxuLHQscixhKXtyZXR1cm4gbnVsbD09PW58fDchPT1uLnRhZz8obj1yYSh0LGUubW9kZSxyLGEpKS5yZXR1cm49ZToobj1vKG4sdCkpLnJldHVybj1lLG59ZnVuY3Rpb24gZihlLG4sdCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4mJlwiXCIhPT1ufHxcIm51bWJlclwiPT10eXBlb2Ygbnx8XCJiaWdpbnRcIj09dHlwZW9mIG4pcmV0dXJuKG49cmkoXCJcIituLGUubW9kZSx0KSkucmV0dXJuPWUsbjtpZihcIm9iamVjdFwiPT10eXBlb2YgbiYmbnVsbCE9PW4pe3N3aXRjaChuLiQkdHlwZW9mKXtjYXNlIGg6cmV0dXJuIG9nKHQ9cm8obi50eXBlLG4ua2V5LG4ucHJvcHMsbnVsbCxlLm1vZGUsdCksbiksdC5yZXR1cm49ZSx0O2Nhc2UgZzpyZXR1cm4obj1ycyhuLGUubW9kZSx0KSkucmV0dXJuPWUsbjtjYXNlIE86cmV0dXJuIGYoZSxuPSgwLG4uX2luaXQpKG4uX3BheWxvYWQpLHQpfWlmKHoobil8fF8obikpcmV0dXJuKG49cmEobixlLm1vZGUsdCxudWxsKSkucmV0dXJuPWUsbjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnRoZW4pcmV0dXJuIGYoZSxvaChuKSx0KTtpZihuLiQkdHlwZW9mPT09eClyZXR1cm4gZihlLHJYKGUsbiksdCk7b20oZSxuKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBwKGUsbix0LHIpe3ZhciBvPW51bGwhPT1uP24ua2V5Om51bGw7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJlwiXCIhPT10fHxcIm51bWJlclwiPT10eXBlb2YgdHx8XCJiaWdpbnRcIj09dHlwZW9mIHQpcmV0dXJuIG51bGwhPT1vP251bGw6cyhlLG4sXCJcIit0LHIpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0JiZudWxsIT09dCl7c3dpdGNoKHQuJCR0eXBlb2Ype2Nhc2UgaDpyZXR1cm4gdC5rZXk9PT1vP2MoZSxuLHQscik6bnVsbDtjYXNlIGc6cmV0dXJuIHQua2V5PT09bz91KGUsbix0LHIpOm51bGw7Y2FzZSBPOnJldHVybiBwKGUsbix0PShvPXQuX2luaXQpKHQuX3BheWxvYWQpLHIpfWlmKHoodCl8fF8odCkpcmV0dXJuIG51bGwhPT1vP251bGw6ZChlLG4sdCxyLG51bGwpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQudGhlbilyZXR1cm4gcChlLG4sb2godCkscik7aWYodC4kJHR5cGVvZj09PXgpcmV0dXJuIHAoZSxuLHJYKGUsdCkscik7b20oZSx0KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB2KGUsbix0LHIsbyl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHImJlwiXCIhPT1yfHxcIm51bWJlclwiPT10eXBlb2Ygcnx8XCJiaWdpbnRcIj09dHlwZW9mIHIpcmV0dXJuIHMobixlPWUuZ2V0KHQpfHxudWxsLFwiXCIrcixvKTtpZihcIm9iamVjdFwiPT10eXBlb2YgciYmbnVsbCE9PXIpe3N3aXRjaChyLiQkdHlwZW9mKXtjYXNlIGg6cmV0dXJuIGMobixlPWUuZ2V0KG51bGw9PT1yLmtleT90OnIua2V5KXx8bnVsbCxyLG8pO2Nhc2UgZzpyZXR1cm4gdShuLGU9ZS5nZXQobnVsbD09PXIua2V5P3Q6ci5rZXkpfHxudWxsLHIsbyk7Y2FzZSBPOnJldHVybiB2KGUsbix0LHI9KDAsci5faW5pdCkoci5fcGF5bG9hZCksbyl9aWYoeihyKXx8XyhyKSlyZXR1cm4gZChuLGU9ZS5nZXQodCl8fG51bGwscixvLG51bGwpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIudGhlbilyZXR1cm4gdihlLG4sdCxvaChyKSxvKTtpZihyLiQkdHlwZW9mPT09eClyZXR1cm4gdihlLG4sdCxyWChuLHIpLG8pO29tKG4scil9cmV0dXJuIG51bGx9cmV0dXJuIGZ1bmN0aW9uKHMsYyx1LGQpe3RyeXtvcD0wO3ZhciBiPWZ1bmN0aW9uIHMoYyx1LGQsYil7aWYoXCJvYmplY3RcIj09dHlwZW9mIGQmJm51bGwhPT1kJiZkLnR5cGU9PT1tJiZudWxsPT09ZC5rZXkmJihkPWQucHJvcHMuY2hpbGRyZW4pLFwib2JqZWN0XCI9PXR5cGVvZiBkJiZudWxsIT09ZCl7c3dpdGNoKGQuJCR0eXBlb2Ype2Nhc2UgaDplOntmb3IodmFyIHk9ZC5rZXk7bnVsbCE9PXU7KXtpZih1LmtleT09PXkpe2lmKCh5PWQudHlwZSk9PT1tKXtpZig3PT09dS50YWcpe3QoYyx1LnNpYmxpbmcpLChiPW8odSxkLnByb3BzLmNoaWxkcmVuKSkucmV0dXJuPWMsYz1iO2JyZWFrIGV9fWVsc2UgaWYodS5lbGVtZW50VHlwZT09PXl8fFwib2JqZWN0XCI9PXR5cGVvZiB5JiZudWxsIT09eSYmeS4kJHR5cGVvZj09PU8mJm92KHkpPT09dS50eXBlKXt0KGMsdS5zaWJsaW5nKSxvZyhiPW8odSxkLnByb3BzKSxkKSxiLnJldHVybj1jLGM9YjticmVhayBlfXQoYyx1KTticmVha31uKGMsdSksdT11LnNpYmxpbmd9ZC50eXBlPT09bT8oYj1yYShkLnByb3BzLmNoaWxkcmVuLGMubW9kZSxiLGQua2V5KSkucmV0dXJuPWM6KG9nKGI9cm8oZC50eXBlLGQua2V5LGQucHJvcHMsbnVsbCxjLm1vZGUsYiksZCksYi5yZXR1cm49YyksYz1ifXJldHVybiBpKGMpO2Nhc2UgZzplOntmb3IoeT1kLmtleTtudWxsIT09dTspe2lmKHUua2V5PT09eSlpZig0PT09dS50YWcmJnUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm89PT1kLmNvbnRhaW5lckluZm8mJnUuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uPT09ZC5pbXBsZW1lbnRhdGlvbil7dChjLHUuc2libGluZyksKGI9byh1LGQuY2hpbGRyZW58fFtdKSkucmV0dXJuPWMsYz1iO2JyZWFrIGV9ZWxzZXt0KGMsdSk7YnJlYWt9bihjLHUpLHU9dS5zaWJsaW5nfShiPXJzKGQsYy5tb2RlLGIpKS5yZXR1cm49YyxjPWJ9cmV0dXJuIGkoYyk7Y2FzZSBPOnJldHVybiBzKGMsdSxkPSh5PWQuX2luaXQpKGQuX3BheWxvYWQpLGIpfWlmKHooZCkpcmV0dXJuIGZ1bmN0aW9uKG8saSxsLHMpe2Zvcih2YXIgYz1udWxsLHU9bnVsbCxkPWksaD1pPTAsZz1udWxsO251bGwhPT1kJiZoPGwubGVuZ3RoO2grKyl7ZC5pbmRleD5oPyhnPWQsZD1udWxsKTpnPWQuc2libGluZzt2YXIgbT1wKG8sZCxsW2hdLHMpO2lmKG51bGw9PT1tKXtudWxsPT09ZCYmKGQ9Zyk7YnJlYWt9ZSYmZCYmbnVsbD09PW0uYWx0ZXJuYXRlJiZuKG8sZCksaT1hKG0saSxoKSxudWxsPT09dT9jPW06dS5zaWJsaW5nPW0sdT1tLGQ9Z31pZihoPT09bC5sZW5ndGgpcmV0dXJuIHQobyxkKSxyUyYmcngobyxoKSxjO2lmKG51bGw9PT1kKXtmb3IoO2g8bC5sZW5ndGg7aCsrKW51bGwhPT0oZD1mKG8sbFtoXSxzKSkmJihpPWEoZCxpLGgpLG51bGw9PT11P2M9ZDp1LnNpYmxpbmc9ZCx1PWQpO3JldHVybiByUyYmcngobyxoKSxjfWZvcihkPXIoZCk7aDxsLmxlbmd0aDtoKyspbnVsbCE9PShnPXYoZCxvLGgsbFtoXSxzKSkmJihlJiZudWxsIT09Zy5hbHRlcm5hdGUmJmQuZGVsZXRlKG51bGw9PT1nLmtleT9oOmcua2V5KSxpPWEoZyxpLGgpLG51bGw9PT11P2M9Zzp1LnNpYmxpbmc9Zyx1PWcpO3JldHVybiBlJiZkLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIG4obyxlKX0pLHJTJiZyeChvLGgpLGN9KGMsdSxkLGIpO2lmKF8oZCkpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mKHk9XyhkKSkpdGhyb3cgRXJyb3IobCgxNTApKTtyZXR1cm4gZnVuY3Rpb24obyxpLHMsYyl7aWYobnVsbD09cyl0aHJvdyBFcnJvcihsKDE1MSkpO2Zvcih2YXIgdT1udWxsLGQ9bnVsbCxoPWksZz1pPTAsbT1udWxsLGI9cy5uZXh0KCk7bnVsbCE9PWgmJiFiLmRvbmU7ZysrLGI9cy5uZXh0KCkpe2guaW5kZXg+Zz8obT1oLGg9bnVsbCk6bT1oLnNpYmxpbmc7dmFyIHk9cChvLGgsYi52YWx1ZSxjKTtpZihudWxsPT09eSl7bnVsbD09PWgmJihoPW0pO2JyZWFrfWUmJmgmJm51bGw9PT15LmFsdGVybmF0ZSYmbihvLGgpLGk9YSh5LGksZyksbnVsbD09PWQ/dT15OmQuc2libGluZz15LGQ9eSxoPW19aWYoYi5kb25lKXJldHVybiB0KG8saCksclMmJnJ4KG8sZyksdTtpZihudWxsPT09aCl7Zm9yKDshYi5kb25lO2crKyxiPXMubmV4dCgpKW51bGwhPT0oYj1mKG8sYi52YWx1ZSxjKSkmJihpPWEoYixpLGcpLG51bGw9PT1kP3U9YjpkLnNpYmxpbmc9YixkPWIpO3JldHVybiByUyYmcngobyxnKSx1fWZvcihoPXIoaCk7IWIuZG9uZTtnKyssYj1zLm5leHQoKSludWxsIT09KGI9dihoLG8sZyxiLnZhbHVlLGMpKSYmKGUmJm51bGwhPT1iLmFsdGVybmF0ZSYmaC5kZWxldGUobnVsbD09PWIua2V5P2c6Yi5rZXkpLGk9YShiLGksZyksbnVsbD09PWQ/dT1iOmQuc2libGluZz1iLGQ9Yik7cmV0dXJuIGUmJmguZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gbihvLGUpfSksclMmJnJ4KG8sZyksdX0oYyx1LGQ9eS5jYWxsKGQpLGIpfWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGQudGhlbilyZXR1cm4gcyhjLHUsb2goZCksYik7aWYoZC4kJHR5cGVvZj09PXgpcmV0dXJuIHMoYyx1LHJYKGMsZCksYik7b20oYyxkKX1yZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZCYmXCJcIiE9PWR8fFwibnVtYmVyXCI9PXR5cGVvZiBkfHxcImJpZ2ludFwiPT10eXBlb2YgZD8oZD1cIlwiK2QsbnVsbCE9PXUmJjY9PT11LnRhZz8odChjLHUuc2libGluZyksKGI9byh1LGQpKS5yZXR1cm49Yyk6KHQoYyx1KSwoYj1yaShkLGMubW9kZSxiKSkucmV0dXJuPWMpLGkoYz1iKSk6dChjLHUpfShzLGMsdSxkKTtyZXR1cm4gb2Y9bnVsbCxifWNhdGNoKGUpe2lmKGU9PT1vcnx8ZT09PW9hKXRocm93IGU7dmFyIHk9cmUoMjksZSxudWxsLHMubW9kZSk7cmV0dXJuIHkubGFuZXM9ZCx5LnJldHVybj1zLHl9ZmluYWxseXt9fX12YXIgb3k9b2IoITApLG94PW9iKCExKSxvdz0hMTtmdW5jdGlvbiBvaihlKXtlLnVwZGF0ZVF1ZXVlPXtiYXNlU3RhdGU6ZS5tZW1vaXplZFN0YXRlLGZpcnN0QmFzZVVwZGF0ZTpudWxsLGxhc3RCYXNlVXBkYXRlOm51bGwsc2hhcmVkOntwZW5kaW5nOm51bGwsbGFuZXM6MCxoaWRkZW5DYWxsYmFja3M6bnVsbH0sY2FsbGJhY2tzOm51bGx9fWZ1bmN0aW9uIG9rKGUsbil7ZT1lLnVwZGF0ZVF1ZXVlLG4udXBkYXRlUXVldWU9PT1lJiYobi51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOmUuYmFzZVN0YXRlLGZpcnN0QmFzZVVwZGF0ZTplLmZpcnN0QmFzZVVwZGF0ZSxsYXN0QmFzZVVwZGF0ZTplLmxhc3RCYXNlVXBkYXRlLHNoYXJlZDplLnNoYXJlZCxjYWxsYmFja3M6bnVsbH0pfWZ1bmN0aW9uIG9BKGUpe3JldHVybntsYW5lOmUsdGFnOjAscGF5bG9hZDpudWxsLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfX1mdW5jdGlvbiBvTyhlLG4sdCl7dmFyIHI9ZS51cGRhdGVRdWV1ZTtpZihudWxsPT09cilyZXR1cm4gbnVsbDtpZihyPXIuc2hhcmVkLDAhPSgyJmxSKSl7dmFyIG89ci5wZW5kaW5nO3JldHVybiBudWxsPT09bz9uLm5leHQ9bjoobi5uZXh0PW8ubmV4dCxvLm5leHQ9biksci5wZW5kaW5nPW4sbj10OShlKSx0NihlLG51bGwsdCksbn1yZXR1cm4gdDQoZSxyLG4sdCksdDkoZSl9ZnVuY3Rpb24gb0MoZSxuLHQpe2lmKG51bGwhPT0obj1uLnVwZGF0ZVF1ZXVlKSYmKG49bi5zaGFyZWQsMCE9KDQxOTQwNDgmdCkpKXt2YXIgcj1uLmxhbmVzO3ImPWUucGVuZGluZ0xhbmVzLHR8PXIsbi5sYW5lcz10LGVFKGUsdCl9fWZ1bmN0aW9uIG9TKGUsbil7dmFyIHQ9ZS51cGRhdGVRdWV1ZSxyPWUuYWx0ZXJuYXRlO2lmKG51bGwhPT1yJiZ0PT09KHI9ci51cGRhdGVRdWV1ZSkpe3ZhciBvPW51bGwsYT1udWxsO2lmKG51bGwhPT0odD10LmZpcnN0QmFzZVVwZGF0ZSkpe2Rve3ZhciBpPXtsYW5lOnQubGFuZSx0YWc6dC50YWcscGF5bG9hZDp0LnBheWxvYWQsY2FsbGJhY2s6bnVsbCxuZXh0Om51bGx9O251bGw9PT1hP289YT1pOmE9YS5uZXh0PWksdD10Lm5leHR9d2hpbGUobnVsbCE9PXQpO251bGw9PT1hP289YT1uOmE9YS5uZXh0PW59ZWxzZSBvPWE9bjt0PXtiYXNlU3RhdGU6ci5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOm8sbGFzdEJhc2VVcGRhdGU6YSxzaGFyZWQ6ci5zaGFyZWQsY2FsbGJhY2tzOnIuY2FsbGJhY2tzfSxlLnVwZGF0ZVF1ZXVlPXQ7cmV0dXJufW51bGw9PT0oZT10Lmxhc3RCYXNlVXBkYXRlKT90LmZpcnN0QmFzZVVwZGF0ZT1uOmUubmV4dD1uLHQubGFzdEJhc2VVcGRhdGU9bn12YXIgb0U9ITE7ZnVuY3Rpb24gb18oKXtpZihvRSl7dmFyIGU9cjY7aWYobnVsbCE9PWUpdGhyb3cgZX19ZnVuY3Rpb24gb1AoZSxuLHQscil7b0U9ITE7dmFyIG89ZS51cGRhdGVRdWV1ZTtvdz0hMTt2YXIgYT1vLmZpcnN0QmFzZVVwZGF0ZSxpPW8ubGFzdEJhc2VVcGRhdGUsbD1vLnNoYXJlZC5wZW5kaW5nO2lmKG51bGwhPT1sKXtvLnNoYXJlZC5wZW5kaW5nPW51bGw7dmFyIHM9bCxjPXMubmV4dDtzLm5leHQ9bnVsbCxudWxsPT09aT9hPWM6aS5uZXh0PWMsaT1zO3ZhciB1PWUuYWx0ZXJuYXRlO251bGwhPT11JiYobD0odT11LnVwZGF0ZVF1ZXVlKS5sYXN0QmFzZVVwZGF0ZSkhPT1pJiYobnVsbD09PWw/dS5maXJzdEJhc2VVcGRhdGU9YzpsLm5leHQ9Yyx1Lmxhc3RCYXNlVXBkYXRlPXMpfWlmKG51bGwhPT1hKXt2YXIgZD1vLmJhc2VTdGF0ZTtmb3IoaT0wLHU9Yz1zPW51bGwsbD1hOzspe3ZhciBwPS0weDIwMDAwMDAxJmwubGFuZSxoPXAhPT1sLmxhbmU7aWYoaD8obEImcCk9PT1wOihyJnApPT09cCl7MCE9PXAmJnA9PT1yMyYmKG9FPSEwKSxudWxsIT09dSYmKHU9dS5uZXh0PXtsYW5lOjAsdGFnOmwudGFnLHBheWxvYWQ6bC5wYXlsb2FkLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfSk7ZTp7dmFyIGc9ZSxtPWw7c3dpdGNoKHA9bixtLnRhZyl7Y2FzZSAxOmlmKFwiZnVuY3Rpb25cIj09dHlwZW9mKGc9bS5wYXlsb2FkKSl7ZD1nLmNhbGwodCxkLHApO2JyZWFrIGV9ZD1nO2JyZWFrIGU7Y2FzZSAzOmcuZmxhZ3M9LTY1NTM3JmcuZmxhZ3N8MTI4O2Nhc2UgMDppZihudWxsPT0ocD1cImZ1bmN0aW9uXCI9PXR5cGVvZihnPW0ucGF5bG9hZCk/Zy5jYWxsKHQsZCxwKTpnKSlicmVhayBlO2Q9Zih7fSxkLHApO2JyZWFrIGU7Y2FzZSAyOm93PSEwfX1udWxsIT09KHA9bC5jYWxsYmFjaykmJihlLmZsYWdzfD02NCxoJiYoZS5mbGFnc3w9ODE5MiksbnVsbD09PShoPW8uY2FsbGJhY2tzKT9vLmNhbGxiYWNrcz1bcF06aC5wdXNoKHApKX1lbHNlIGg9e2xhbmU6cCx0YWc6bC50YWcscGF5bG9hZDpsLnBheWxvYWQsY2FsbGJhY2s6bC5jYWxsYmFjayxuZXh0Om51bGx9LG51bGw9PT11PyhjPXU9aCxzPWQpOnU9dS5uZXh0PWgsaXw9cDtpZihudWxsPT09KGw9bC5uZXh0KSlpZihudWxsPT09KGw9by5zaGFyZWQucGVuZGluZykpYnJlYWs7ZWxzZSBsPShoPWwpLm5leHQsaC5uZXh0PW51bGwsby5sYXN0QmFzZVVwZGF0ZT1oLG8uc2hhcmVkLnBlbmRpbmc9bnVsbH1udWxsPT09dSYmKHM9ZCksby5iYXNlU3RhdGU9cyxvLmZpcnN0QmFzZVVwZGF0ZT1jLG8ubGFzdEJhc2VVcGRhdGU9dSxudWxsPT09YSYmKG8uc2hhcmVkLmxhbmVzPTApLGxXfD1pLGUubGFuZXM9aSxlLm1lbW9pemVkU3RhdGU9ZH19ZnVuY3Rpb24gb3ooZSxuKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IEVycm9yKGwoMTkxLGUpKTtlLmNhbGwobil9ZnVuY3Rpb24gb0woZSxuKXt2YXIgdD1lLmNhbGxiYWNrcztpZihudWxsIT09dClmb3IoZS5jYWxsYmFja3M9bnVsbCxlPTA7ZTx0Lmxlbmd0aDtlKyspb3oodFtlXSxuKX12YXIgb1Q9QihudWxsKSxvUj1CKDApO2Z1bmN0aW9uIG9OKGUsbil7SShvUixlPWxWKSxJKG9ULG4pLGxWPWV8bi5iYXNlTGFuZXN9ZnVuY3Rpb24gb0QoKXtJKG9SLGxWKSxJKG9ULG9ULmN1cnJlbnQpfWZ1bmN0aW9uIG9CKCl7bFY9b1IuY3VycmVudCxNKG9UKSxNKG9SKX12YXIgb009QihudWxsKSxvST1udWxsO2Z1bmN0aW9uIG9IKGUpe3ZhciBuPWUuYWx0ZXJuYXRlO0kob1csMSZvVy5jdXJyZW50KSxJKG9NLGUpLG51bGw9PT1vSSYmKG51bGw9PT1ufHxudWxsIT09b1QuY3VycmVudD9vST1lOm51bGwhPT1uLm1lbW9pemVkU3RhdGUmJihvST1lKSl9ZnVuY3Rpb24gb0YoZSl7SShvVyxvVy5jdXJyZW50KSxJKG9NLGUpLG51bGw9PT1vSSYmKG9JPWUpfWZ1bmN0aW9uIG9VKGUpezIyPT09ZS50YWc/KEkob1csb1cuY3VycmVudCksSShvTSxlKSxudWxsPT09b0kmJihvST1lKSk6b1YoZSl9ZnVuY3Rpb24gb1YoKXtJKG9XLG9XLmN1cnJlbnQpLEkob00sb00uY3VycmVudCl9ZnVuY3Rpb24gb3EoZSl7TShvTSksb0k9PT1lJiYob0k9bnVsbCksTShvVyl9dmFyIG9XPUIoMCk7ZnVuY3Rpb24gbyQoZSl7Zm9yKHZhciBuPWU7bnVsbCE9PW47KXtpZigxMz09PW4udGFnKXt2YXIgdD1uLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PXQmJihudWxsPT09KHQ9dC5kZWh5ZHJhdGVkKXx8Y1ModCl8fGNFKHQpKSlyZXR1cm4gbn1lbHNlIGlmKDE5PT09bi50YWcmJihcImZvcndhcmRzXCI9PT1uLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXJ8fFwiYmFja3dhcmRzXCI9PT1uLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXJ8fFwidW5zdGFibGVfbGVnYWN5LWJhY2t3YXJkc1wiPT09bi5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyfHxcInRvZ2V0aGVyXCI9PT1uLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIpKXtpZigwIT0oMTI4Jm4uZmxhZ3MpKXJldHVybiBufWVsc2UgaWYobnVsbCE9PW4uY2hpbGQpe24uY2hpbGQucmV0dXJuPW4sbj1uLmNoaWxkO2NvbnRpbnVlfWlmKG49PT1lKWJyZWFrO2Zvcig7bnVsbD09PW4uc2libGluZzspe2lmKG51bGw9PT1uLnJldHVybnx8bi5yZXR1cm49PT1lKXJldHVybiBudWxsO249bi5yZXR1cm59bi5zaWJsaW5nLnJldHVybj1uLnJldHVybixuPW4uc2libGluZ31yZXR1cm4gbnVsbH12YXIgb1o9MCxvWT1udWxsLG9YPW51bGwsb0s9bnVsbCxvUT0hMSxvRz0hMSxvSj0hMSxvMD0wLG8xPTAsbzI9bnVsbCxvND0wO2Z1bmN0aW9uIG81KCl7dGhyb3cgRXJyb3IobCgzMjEpKX1mdW5jdGlvbiBvMyhlLG4pe2lmKG51bGw9PT1uKXJldHVybiExO2Zvcih2YXIgdD0wO3Q8bi5sZW5ndGgmJnQ8ZS5sZW5ndGg7dCsrKWlmKCF0TyhlW3RdLG5bdF0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIG82KGUsbix0LHIsbyxhKXtyZXR1cm4gb1o9YSxvWT1uLG4ubWVtb2l6ZWRTdGF0ZT1udWxsLG4udXBkYXRlUXVldWU9bnVsbCxuLmxhbmVzPTAsTC5IPW51bGw9PT1lfHxudWxsPT09ZS5tZW1vaXplZFN0YXRlP2l0OmlyLG9KPSExLGE9dChyLG8pLG9KPSExLG9HJiYoYT1vOChuLHQscixvKSksbzkoZSksYX1mdW5jdGlvbiBvOShlKXtMLkg9aWU7dmFyIG49bnVsbCE9PW9YJiZudWxsIT09b1gubmV4dDtpZihvWj0wLG9LPW9YPW9ZPW51bGwsb1E9ITEsbzE9MCxvMj1udWxsLG4pdGhyb3cgRXJyb3IobCgzMDApKTtudWxsPT09ZXx8aXh8fG51bGwhPT0oZT1lLmRlcGVuZGVuY2llcykmJnIkKGUpJiYoaXg9ITApfWZ1bmN0aW9uIG84KGUsbix0LHIpe29ZPWU7dmFyIG89MDtkb3tpZihvRyYmKG8yPW51bGwpLG8xPTAsb0c9ITEsMjU8PW8pdGhyb3cgRXJyb3IobCgzMDEpKTtpZihvKz0xLG9LPW9YPW51bGwsbnVsbCE9ZS51cGRhdGVRdWV1ZSl7dmFyIGE9ZS51cGRhdGVRdWV1ZTthLmxhc3RFZmZlY3Q9bnVsbCxhLmV2ZW50cz1udWxsLGEuc3RvcmVzPW51bGwsbnVsbCE9YS5tZW1vQ2FjaGUmJihhLm1lbW9DYWNoZS5pbmRleD0wKX1MLkg9aW8sYT1uKHQscil9d2hpbGUob0cpO3JldHVybiBhfWZ1bmN0aW9uIG83KCl7dmFyIGU9TC5ILG49ZS51c2VTdGF0ZSgpWzBdO3JldHVybiBuPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4udGhlbj9haShuKTpuLGU9ZS51c2VTdGF0ZSgpWzBdLChudWxsIT09b1g/b1gubWVtb2l6ZWRTdGF0ZTpudWxsKSE9PWUmJihvWS5mbGFnc3w9MTAyNCksbn1mdW5jdGlvbiBhZSgpe3ZhciBlPTAhPT1vMDtyZXR1cm4gbzA9MCxlfWZ1bmN0aW9uIGFuKGUsbix0KXtuLnVwZGF0ZVF1ZXVlPWUudXBkYXRlUXVldWUsbi5mbGFncyY9LTIwNTMsZS5sYW5lcyY9fnR9ZnVuY3Rpb24gYXQoZSl7aWYob1Epe2ZvcihlPWUubWVtb2l6ZWRTdGF0ZTtudWxsIT09ZTspe3ZhciBuPWUucXVldWU7bnVsbCE9PW4mJihuLnBlbmRpbmc9bnVsbCksZT1lLm5leHR9b1E9ITF9b1o9MCxvSz1vWD1vWT1udWxsLG9HPSExLG8xPW8wPTAsbzI9bnVsbH1mdW5jdGlvbiBhcigpe3ZhciBlPXttZW1vaXplZFN0YXRlOm51bGwsYmFzZVN0YXRlOm51bGwsYmFzZVF1ZXVlOm51bGwscXVldWU6bnVsbCxuZXh0Om51bGx9O3JldHVybiBudWxsPT09b0s/b1kubWVtb2l6ZWRTdGF0ZT1vSz1lOm9LPW9LLm5leHQ9ZSxvS31mdW5jdGlvbiBhbygpe2lmKG51bGw9PT1vWCl7dmFyIGU9b1kuYWx0ZXJuYXRlO2U9bnVsbCE9PWU/ZS5tZW1vaXplZFN0YXRlOm51bGx9ZWxzZSBlPW9YLm5leHQ7dmFyIG49bnVsbD09PW9LP29ZLm1lbW9pemVkU3RhdGU6b0submV4dDtpZihudWxsIT09bilvSz1uLG9YPWU7ZWxzZXtpZihudWxsPT09ZSl7aWYobnVsbD09PW9ZLmFsdGVybmF0ZSl0aHJvdyBFcnJvcihsKDQ2NykpO3Rocm93IEVycm9yKGwoMzEwKSl9ZT17bWVtb2l6ZWRTdGF0ZToob1g9ZSkubWVtb2l6ZWRTdGF0ZSxiYXNlU3RhdGU6b1guYmFzZVN0YXRlLGJhc2VRdWV1ZTpvWC5iYXNlUXVldWUscXVldWU6b1gucXVldWUsbmV4dDpudWxsfSxudWxsPT09b0s/b1kubWVtb2l6ZWRTdGF0ZT1vSz1lOm9LPW9LLm5leHQ9ZX1yZXR1cm4gb0t9ZnVuY3Rpb24gYWEoKXtyZXR1cm57bGFzdEVmZmVjdDpudWxsLGV2ZW50czpudWxsLHN0b3JlczpudWxsLG1lbW9DYWNoZTpudWxsfX1mdW5jdGlvbiBhaShlKXt2YXIgbj1vMTtyZXR1cm4gbzErPTEsbnVsbD09PW8yJiYobzI9W10pLGU9b3MobzIsZSxuKSxuPW9ZLG51bGw9PT0obnVsbD09PW9LP24ubWVtb2l6ZWRTdGF0ZTpvSy5uZXh0KSYmKEwuSD1udWxsPT09KG49bi5hbHRlcm5hdGUpfHxudWxsPT09bi5tZW1vaXplZFN0YXRlP2l0OmlyKSxlfWZ1bmN0aW9uIGFsKGUpe2lmKG51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS50aGVuKXJldHVybiBhaShlKTtpZihlLiQkdHlwZW9mPT09eClyZXR1cm4gclkoZSl9dGhyb3cgRXJyb3IobCg0MzgsU3RyaW5nKGUpKSl9ZnVuY3Rpb24gYXMoZSl7dmFyIG49bnVsbCx0PW9ZLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT10JiYobj10Lm1lbW9DYWNoZSksbnVsbD09bil7dmFyIHI9b1kuYWx0ZXJuYXRlO251bGwhPT1yJiZudWxsIT09KHI9ci51cGRhdGVRdWV1ZSkmJm51bGwhPShyPXIubWVtb0NhY2hlKSYmKG49e2RhdGE6ci5kYXRhLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5zbGljZSgpfSksaW5kZXg6MH0pfWlmKG51bGw9PW4mJihuPXtkYXRhOltdLGluZGV4OjB9KSxudWxsPT09dCYmKHQ9YWEoKSxvWS51cGRhdGVRdWV1ZT10KSx0Lm1lbW9DYWNoZT1uLHZvaWQgMD09PSh0PW4uZGF0YVtuLmluZGV4XSkpZm9yKHQ9bi5kYXRhW24uaW5kZXhdPUFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09UztyZXR1cm4gbi5pbmRleCsrLHR9ZnVuY3Rpb24gYWMoZSxuKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuP24oZSk6bn1mdW5jdGlvbiBhdShlKXtyZXR1cm4gYWQoYW8oKSxvWCxlKX1mdW5jdGlvbiBhZChlLG4sdCl7dmFyIHI9ZS5xdWV1ZTtpZihudWxsPT09cil0aHJvdyBFcnJvcihsKDMxMSkpO3IubGFzdFJlbmRlcmVkUmVkdWNlcj10O3ZhciBvPWUuYmFzZVF1ZXVlLGE9ci5wZW5kaW5nO2lmKG51bGwhPT1hKXtpZihudWxsIT09byl7dmFyIGk9by5uZXh0O28ubmV4dD1hLm5leHQsYS5uZXh0PWl9bi5iYXNlUXVldWU9bz1hLHIucGVuZGluZz1udWxsfWlmKGE9ZS5iYXNlU3RhdGUsbnVsbD09PW8pZS5tZW1vaXplZFN0YXRlPWE7ZWxzZXtuPW8ubmV4dDt2YXIgcz1pPW51bGwsYz1udWxsLHU9bixkPSExO2Rve3ZhciBmPS0weDIwMDAwMDAxJnUubGFuZTtpZihmIT09dS5sYW5lPyhsQiZmKT09PWY6KG9aJmYpPT09Zil7dmFyIHA9dS5yZXZlcnRMYW5lO2lmKDA9PT1wKW51bGwhPT1jJiYoYz1jLm5leHQ9e2xhbmU6MCxyZXZlcnRMYW5lOjAsZ2VzdHVyZTpudWxsLGFjdGlvbjp1LmFjdGlvbixoYXNFYWdlclN0YXRlOnUuaGFzRWFnZXJTdGF0ZSxlYWdlclN0YXRlOnUuZWFnZXJTdGF0ZSxuZXh0Om51bGx9KSxmPT09cjMmJihkPSEwKTtlbHNlIGlmKChvWiZwKT09PXApe3U9dS5uZXh0LHA9PT1yMyYmKGQ9ITApO2NvbnRpbnVlfWVsc2UgZj17bGFuZTowLHJldmVydExhbmU6dS5yZXZlcnRMYW5lLGdlc3R1cmU6bnVsbCxhY3Rpb246dS5hY3Rpb24saGFzRWFnZXJTdGF0ZTp1Lmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTp1LmVhZ2VyU3RhdGUsbmV4dDpudWxsfSxudWxsPT09Yz8ocz1jPWYsaT1hKTpjPWMubmV4dD1mLG9ZLmxhbmVzfD1wLGxXfD1wO2Y9dS5hY3Rpb24sb0omJnQoYSxmKSxhPXUuaGFzRWFnZXJTdGF0ZT91LmVhZ2VyU3RhdGU6dChhLGYpfWVsc2UgcD17bGFuZTpmLHJldmVydExhbmU6dS5yZXZlcnRMYW5lLGdlc3R1cmU6dS5nZXN0dXJlLGFjdGlvbjp1LmFjdGlvbixoYXNFYWdlclN0YXRlOnUuaGFzRWFnZXJTdGF0ZSxlYWdlclN0YXRlOnUuZWFnZXJTdGF0ZSxuZXh0Om51bGx9LG51bGw9PT1jPyhzPWM9cCxpPWEpOmM9Yy5uZXh0PXAsb1kubGFuZXN8PWYsbFd8PWY7dT11Lm5leHR9d2hpbGUobnVsbCE9PXUmJnUhPT1uKTtpZihudWxsPT09Yz9pPWE6Yy5uZXh0PXMsIXRPKGEsZS5tZW1vaXplZFN0YXRlKSYmKGl4PSEwLGQmJm51bGwhPT0odD1yNikpKXRocm93IHQ7ZS5tZW1vaXplZFN0YXRlPWEsZS5iYXNlU3RhdGU9aSxlLmJhc2VRdWV1ZT1jLHIubGFzdFJlbmRlcmVkU3RhdGU9YX1yZXR1cm4gbnVsbD09PW8mJihyLmxhbmVzPTApLFtlLm1lbW9pemVkU3RhdGUsci5kaXNwYXRjaF19ZnVuY3Rpb24gYWYoZSl7dmFyIG49YW8oKSx0PW4ucXVldWU7aWYobnVsbD09PXQpdGhyb3cgRXJyb3IobCgzMTEpKTt0Lmxhc3RSZW5kZXJlZFJlZHVjZXI9ZTt2YXIgcj10LmRpc3BhdGNoLG89dC5wZW5kaW5nLGE9bi5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1vKXt0LnBlbmRpbmc9bnVsbDt2YXIgaT1vPW8ubmV4dDtkbyBhPWUoYSxpLmFjdGlvbiksaT1pLm5leHQ7d2hpbGUoaSE9PW8pO3RPKGEsbi5tZW1vaXplZFN0YXRlKXx8KGl4PSEwKSxuLm1lbW9pemVkU3RhdGU9YSxudWxsPT09bi5iYXNlUXVldWUmJihuLmJhc2VTdGF0ZT1hKSx0Lmxhc3RSZW5kZXJlZFN0YXRlPWF9cmV0dXJuW2Escl19ZnVuY3Rpb24gYXAoZSxuLHQpe3ZhciByPW9ZLG89YW8oKSxhPXJTO2lmKGEpe2lmKHZvaWQgMD09PXQpdGhyb3cgRXJyb3IobCg0MDcpKTt0PXQoKX1lbHNlIHQ9bigpO3ZhciBpPSF0Tygob1h8fG8pLm1lbW9pemVkU3RhdGUsdCk7aWYoaSYmKG8ubWVtb2l6ZWRTdGF0ZT10LGl4PSEwKSxvPW8ucXVldWUsYU0oYW0uYmluZChudWxsLHIsbyxlKSxbZV0pLG8uZ2V0U25hcHNob3QhPT1ufHxpfHxudWxsIT09b0smJjEmb0subWVtb2l6ZWRTdGF0ZS50YWcpe2lmKHIuZmxhZ3N8PTIwNDgsYVQoOSx7ZGVzdHJveTp2b2lkIDB9LGFnLmJpbmQobnVsbCxyLG8sdCxuKSxudWxsKSxudWxsPT09bE4pdGhyb3cgRXJyb3IobCgzNDkpKTthfHwwIT0oMTI0Jm9aKXx8YWgocixuLHQpfXJldHVybiB0fWZ1bmN0aW9uIGFoKGUsbix0KXtlLmZsYWdzfD0xNjM4NCxlPXtnZXRTbmFwc2hvdDpuLHZhbHVlOnR9LG51bGw9PT0obj1vWS51cGRhdGVRdWV1ZSk/KG49YWEoKSxvWS51cGRhdGVRdWV1ZT1uLG4uc3RvcmVzPVtlXSk6bnVsbD09PSh0PW4uc3RvcmVzKT9uLnN0b3Jlcz1bZV06dC5wdXNoKGUpfWZ1bmN0aW9uIGFnKGUsbix0LHIpe24udmFsdWU9dCxuLmdldFNuYXBzaG90PXIsYXYobikmJmFiKGUpfWZ1bmN0aW9uIGFtKGUsbix0KXtyZXR1cm4gdChmdW5jdGlvbigpe2F2KG4pJiZhYihlKX0pfWZ1bmN0aW9uIGF2KGUpe3ZhciBuPWUuZ2V0U25hcHNob3Q7ZT1lLnZhbHVlO3RyeXt2YXIgdD1uKCk7cmV0dXJuIXRPKGUsdCl9Y2F0Y2goZSl7cmV0dXJuITB9fWZ1bmN0aW9uIGFiKGUpe3ZhciBuPXQzKGUsMik7bnVsbCE9PW4mJnNvKG4sZSwyKX1mdW5jdGlvbiBheShlKXt2YXIgbj1hcigpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUpe3ZhciB0PWU7aWYoZT10KCksb0ope2VoKCEwKTt0cnl7dCgpfWZpbmFsbHl7ZWgoITEpfX19cmV0dXJuIG4ubWVtb2l6ZWRTdGF0ZT1uLmJhc2VTdGF0ZT1lLG4ucXVldWU9e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjphYyxsYXN0UmVuZGVyZWRTdGF0ZTplfSxufWZ1bmN0aW9uIGF4KGUsbix0LHIpe3JldHVybiBlLmJhc2VTdGF0ZT10LGFkKGUsb1gsXCJmdW5jdGlvblwiPT10eXBlb2Ygcj9yOmFjKX1mdW5jdGlvbiBhdyhlLG4sdCxyLG8pe2lmKGE5KGUpKXRocm93IEVycm9yKGwoNDg1KSk7aWYobnVsbCE9PShlPW4uYWN0aW9uKSl7dmFyIGE9e3BheWxvYWQ6byxhY3Rpb246ZSxuZXh0Om51bGwsaXNUcmFuc2l0aW9uOiEwLHN0YXR1czpcInBlbmRpbmdcIix2YWx1ZTpudWxsLHJlYXNvbjpudWxsLGxpc3RlbmVyczpbXSx0aGVuOmZ1bmN0aW9uKGUpe2EubGlzdGVuZXJzLnB1c2goZSl9fTtudWxsIT09TC5UP3QoITApOmEuaXNUcmFuc2l0aW9uPSExLHIoYSksbnVsbD09PSh0PW4ucGVuZGluZyk/KGEubmV4dD1uLnBlbmRpbmc9YSxhaihuLGEpKTooYS5uZXh0PXQubmV4dCxuLnBlbmRpbmc9dC5uZXh0PWEpfX1mdW5jdGlvbiBhaihlLG4pe3ZhciB0PW4uYWN0aW9uLHI9bi5wYXlsb2FkLG89ZS5zdGF0ZTtpZihuLmlzVHJhbnNpdGlvbil7dmFyIGE9TC5ULGk9e307TC5UPWk7dHJ5e3ZhciBsPXQobyxyKSxzPUwuUztudWxsIT09cyYmcyhpLGwpLGFrKGUsbixsKX1jYXRjaCh0KXthTyhlLG4sdCl9ZmluYWxseXtudWxsIT09YSYmbnVsbCE9PWkudHlwZXMmJihhLnR5cGVzPWkudHlwZXMpLEwuVD1hfX1lbHNlIHRyeXthPXQobyxyKSxhayhlLG4sYSl9Y2F0Y2godCl7YU8oZSxuLHQpfX1mdW5jdGlvbiBhayhlLG4sdCl7bnVsbCE9PXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnRoZW4/dC50aGVuKGZ1bmN0aW9uKHQpe2FBKGUsbix0KX0sZnVuY3Rpb24odCl7cmV0dXJuIGFPKGUsbix0KX0pOmFBKGUsbix0KX1mdW5jdGlvbiBhQShlLG4sdCl7bi5zdGF0dXM9XCJmdWxmaWxsZWRcIixuLnZhbHVlPXQsYUMobiksZS5zdGF0ZT10LG51bGwhPT0obj1lLnBlbmRpbmcpJiYoKHQ9bi5uZXh0KT09PW4/ZS5wZW5kaW5nPW51bGw6KHQ9dC5uZXh0LG4ubmV4dD10LGFqKGUsdCkpKX1mdW5jdGlvbiBhTyhlLG4sdCl7dmFyIHI9ZS5wZW5kaW5nO2lmKGUucGVuZGluZz1udWxsLG51bGwhPT1yKXtyPXIubmV4dDtkbyBuLnN0YXR1cz1cInJlamVjdGVkXCIsbi5yZWFzb249dCxhQyhuKSxuPW4ubmV4dDt3aGlsZShuIT09cil9ZS5hY3Rpb249bnVsbH1mdW5jdGlvbiBhQyhlKXtlPWUubGlzdGVuZXJzO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKSgwLGVbbl0pKCl9ZnVuY3Rpb24gYVMoZSxuKXtyZXR1cm4gbn1mdW5jdGlvbiBhRShlLG4pe2lmKHJTKXt2YXIgdD1sTi5mb3JtU3RhdGU7aWYobnVsbCE9PXQpe2U6e3ZhciByPW9ZO2lmKHJTKXtpZihyQyl7bjp7Zm9yKHZhciBvPXJDLGE9cl87OCE9PW8ubm9kZVR5cGU7KWlmKCFhfHxudWxsPT09KG89Y18oby5uZXh0U2libGluZykpKXtvPW51bGw7YnJlYWsgbn1vPVwiRiFcIj09PShhPW8uZGF0YSl8fFwiRlwiPT09YT9vOm51bGx9aWYobyl7ckM9Y18oby5uZXh0U2libGluZykscj1cIkYhXCI9PT1vLmRhdGE7YnJlYWsgZX19cnoocil9cj0hMX1yJiYobj10WzBdKX19cmV0dXJuKHQ9YXIoKSkubWVtb2l6ZWRTdGF0ZT10LmJhc2VTdGF0ZT1uLHI9e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjphUyxsYXN0UmVuZGVyZWRTdGF0ZTpufSx0LnF1ZXVlPXIsdD1hNS5iaW5kKG51bGwsb1ksciksci5kaXNwYXRjaD10LHI9YXkoITEpLGE9YTYuYmluZChudWxsLG9ZLCExLHIucXVldWUpLHI9YXIoKSxvPXtzdGF0ZTpuLGRpc3BhdGNoOm51bGwsYWN0aW9uOmUscGVuZGluZzpudWxsfSxyLnF1ZXVlPW8sdD1hdy5iaW5kKG51bGwsb1ksbyxhLHQpLG8uZGlzcGF0Y2g9dCxyLm1lbW9pemVkU3RhdGU9ZSxbbix0LCExXX1mdW5jdGlvbiBhXyhlKXtyZXR1cm4gYVAoYW8oKSxvWCxlKX1mdW5jdGlvbiBhUChlLG4sdCl7aWYobj1hZChlLG4sYVMpWzBdLGU9YXUoYWMpWzBdLFwib2JqZWN0XCI9PXR5cGVvZiBuJiZudWxsIT09biYmXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50aGVuKXRyeXt2YXIgcj1haShuKX1jYXRjaChlKXtpZihlPT09b3IpdGhyb3cgb2E7dGhyb3cgZX1lbHNlIHI9bjt2YXIgbz0obj1hbygpKS5xdWV1ZSxhPW8uZGlzcGF0Y2g7cmV0dXJuIHQhPT1uLm1lbW9pemVkU3RhdGUmJihvWS5mbGFnc3w9MjA0OCxhVCg5LHtkZXN0cm95OnZvaWQgMH0sYXouYmluZChudWxsLG8sdCksbnVsbCkpLFtyLGEsZV19ZnVuY3Rpb24gYXooZSxuKXtlLmFjdGlvbj1ufWZ1bmN0aW9uIGFMKGUpe3ZhciBuPWFvKCksdD1vWDtpZihudWxsIT09dClyZXR1cm4gYVAobix0LGUpO2FvKCksbj1uLm1lbW9pemVkU3RhdGU7dmFyIHI9KHQ9YW8oKSkucXVldWUuZGlzcGF0Y2g7cmV0dXJuIHQubWVtb2l6ZWRTdGF0ZT1lLFtuLHIsITFdfWZ1bmN0aW9uIGFUKGUsbix0LHIpe3JldHVybiBlPXt0YWc6ZSxjcmVhdGU6dCxkZXBzOnIsaW5zdDpuLG5leHQ6bnVsbH0sbnVsbD09PShuPW9ZLnVwZGF0ZVF1ZXVlKSYmKG49YWEoKSxvWS51cGRhdGVRdWV1ZT1uKSxudWxsPT09KHQ9bi5sYXN0RWZmZWN0KT9uLmxhc3RFZmZlY3Q9ZS5uZXh0PWU6KHI9dC5uZXh0LHQubmV4dD1lLGUubmV4dD1yLG4ubGFzdEVmZmVjdD1lKSxlfWZ1bmN0aW9uIGFSKCl7cmV0dXJuIGFvKCkubWVtb2l6ZWRTdGF0ZX1mdW5jdGlvbiBhTihlLG4sdCxyKXt2YXIgbz1hcigpO29ZLmZsYWdzfD1lLG8ubWVtb2l6ZWRTdGF0ZT1hVCgxfG4se2Rlc3Ryb3k6dm9pZCAwfSx0LHZvaWQgMD09PXI/bnVsbDpyKX1mdW5jdGlvbiBhRChlLG4sdCxyKXt2YXIgbz1hbygpO3I9dm9pZCAwPT09cj9udWxsOnI7dmFyIGE9by5tZW1vaXplZFN0YXRlLmluc3Q7bnVsbCE9PW9YJiZudWxsIT09ciYmbzMocixvWC5tZW1vaXplZFN0YXRlLmRlcHMpP28ubWVtb2l6ZWRTdGF0ZT1hVChuLGEsdCxyKToob1kuZmxhZ3N8PWUsby5tZW1vaXplZFN0YXRlPWFUKDF8bixhLHQscikpfWZ1bmN0aW9uIGFCKGUsbil7YU4oODM5MDY1Niw4LGUsbil9ZnVuY3Rpb24gYU0oZSxuKXthRCgyMDQ4LDgsZSxuKX1mdW5jdGlvbiBhSShlLG4pe3JldHVybiBhRCg0LDIsZSxuKX1mdW5jdGlvbiBhSChlLG4pe3JldHVybiBhRCg0LDQsZSxuKX1mdW5jdGlvbiBhRihlLG4pe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe3ZhciB0PW4oZT1lKCkpO3JldHVybiBmdW5jdGlvbigpe1wiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dCgpOm4obnVsbCl9fWlmKG51bGwhPW4pcmV0dXJuIG4uY3VycmVudD1lPWUoKSxmdW5jdGlvbigpe24uY3VycmVudD1udWxsfX1mdW5jdGlvbiBhVShlLG4sdCl7dD1udWxsIT10P3QuY29uY2F0KFtlXSk6bnVsbCxhRCg0LDQsYUYuYmluZChudWxsLG4sZSksdCl9ZnVuY3Rpb24gYVYoKXt9ZnVuY3Rpb24gYXEoZSxuKXt2YXIgdD1hbygpO249dm9pZCAwPT09bj9udWxsOm47dmFyIHI9dC5tZW1vaXplZFN0YXRlO3JldHVybiBudWxsIT09biYmbzMobixyWzFdKT9yWzBdOih0Lm1lbW9pemVkU3RhdGU9W2Usbl0sZSl9ZnVuY3Rpb24gYVcoZSxuKXt2YXIgdD1hbygpO249dm9pZCAwPT09bj9udWxsOm47dmFyIHI9dC5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1uJiZvMyhuLHJbMV0pKXJldHVybiByWzBdO2lmKHI9ZSgpLG9KKXtlaCghMCk7dHJ5e2UoKX1maW5hbGx5e2VoKCExKX19cmV0dXJuIHQubWVtb2l6ZWRTdGF0ZT1bcixuXSxyfWZ1bmN0aW9uIGEkKGUsbix0KXtyZXR1cm4gdm9pZCAwPT09dHx8MCE9KDB4NDAwMDAwMDAmb1opP2UubWVtb2l6ZWRTdGF0ZT1uOihlLm1lbW9pemVkU3RhdGU9dCxlPXNyKCksb1kubGFuZXN8PWUsbFd8PWUsdCl9ZnVuY3Rpb24gYVooZSxuLHQscil7cmV0dXJuIHRPKHQsbik/dDpudWxsIT09b1QuY3VycmVudD8odE8oZT1hJChlLHQsciksbil8fChpeD0hMCksZSk6MD09KDQyJm9aKXx8MCE9KDB4NDAwMDAwMDAmb1opPyhpeD0hMCxlLm1lbW9pemVkU3RhdGU9dCk6KGU9c3IoKSxvWS5sYW5lc3w9ZSxsV3w9ZSxuKX1mdW5jdGlvbiBhWShlLG4sdCxyLG8pe3ZhciBhPVQucDtULnA9MCE9PWEmJjg+YT9hOjg7dmFyIGk9TC5ULGw9e307TC5UPWwsYTYoZSwhMSxuLHQpO3RyeXt2YXIgcz1vKCksYz1MLlM7aWYobnVsbCE9PWMmJmMobCxzKSxudWxsIT09cyYmXCJvYmplY3RcIj09dHlwZW9mIHMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHMudGhlbil7dmFyIHUsZCxmPSh1PVtdLGQ9e3N0YXR1czpcInBlbmRpbmdcIix2YWx1ZTpudWxsLHJlYXNvbjpudWxsLHRoZW46ZnVuY3Rpb24oZSl7dS5wdXNoKGUpfX0scy50aGVuKGZ1bmN0aW9uKCl7ZC5zdGF0dXM9XCJmdWxmaWxsZWRcIixkLnZhbHVlPXI7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspKDAsdVtlXSkocil9LGZ1bmN0aW9uKGUpe2ZvcihkLnN0YXR1cz1cInJlamVjdGVkXCIsZC5yZWFzb249ZSxlPTA7ZTx1Lmxlbmd0aDtlKyspKDAsdVtlXSkodm9pZCAwKX0pLGQpO2EzKGUsbixmLHN0KGUpKX1lbHNlIGEzKGUsbixyLHN0KGUpKX1jYXRjaCh0KXthMyhlLG4se3RoZW46ZnVuY3Rpb24oKXt9LHN0YXR1czpcInJlamVjdGVkXCIscmVhc29uOnR9LHN0KCkpfWZpbmFsbHl7VC5wPWEsbnVsbCE9PWkmJm51bGwhPT1sLnR5cGVzJiYoaS50eXBlcz1sLnR5cGVzKSxMLlQ9aX19ZnVuY3Rpb24gYVgoKXt9ZnVuY3Rpb24gYUsoZSxuLHQscil7aWYoNSE9PWUudGFnKXRocm93IEVycm9yKGwoNDc2KSk7dmFyIG89YVEoZSkucXVldWU7YVkoZSxvLG4sUixudWxsPT09dD9hWDpmdW5jdGlvbigpe3JldHVybiBhRyhlKSx0KHIpfSl9ZnVuY3Rpb24gYVEoZSl7dmFyIG49ZS5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1uKXJldHVybiBuO3ZhciB0PXt9O3JldHVybihuPXttZW1vaXplZFN0YXRlOlIsYmFzZVN0YXRlOlIsYmFzZVF1ZXVlOm51bGwscXVldWU6e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjphYyxsYXN0UmVuZGVyZWRTdGF0ZTpSfSxuZXh0Om51bGx9KS5uZXh0PXttZW1vaXplZFN0YXRlOnQsYmFzZVN0YXRlOnQsYmFzZVF1ZXVlOm51bGwscXVldWU6e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjphYyxsYXN0UmVuZGVyZWRTdGF0ZTp0fSxuZXh0Om51bGx9LGUubWVtb2l6ZWRTdGF0ZT1uLG51bGwhPT0oZT1lLmFsdGVybmF0ZSkmJihlLm1lbW9pemVkU3RhdGU9biksbn1mdW5jdGlvbiBhRyhlKXt2YXIgbj1hUShlKTtudWxsPT09bi5uZXh0JiYobj1lLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlKSxhMyhlLG4ubmV4dC5xdWV1ZSx7fSxzdCgpKX1mdW5jdGlvbiBhSigpe3JldHVybiByWShjNil9ZnVuY3Rpb24gYTAoKXtyZXR1cm4gYW8oKS5tZW1vaXplZFN0YXRlfWZ1bmN0aW9uIGExKCl7cmV0dXJuIGFvKCkubWVtb2l6ZWRTdGF0ZX1mdW5jdGlvbiBhMihlKXtmb3IodmFyIG49ZS5yZXR1cm47bnVsbCE9PW47KXtzd2l0Y2gobi50YWcpe2Nhc2UgMjQ6Y2FzZSAzOnZhciB0PXN0KCkscj1vTyhuLGU9b0EodCksdCk7bnVsbCE9PXImJihzbyhyLG4sdCksb0MocixuLHQpKSxuPXtjYWNoZTpyMSgpfSxlLnBheWxvYWQ9bjtyZXR1cm59bj1uLnJldHVybn19ZnVuY3Rpb24gYTQoZSxuLHQpe3ZhciByPXN0KCk7dD17bGFuZTpyLHJldmVydExhbmU6MCxnZXN0dXJlOm51bGwsYWN0aW9uOnQsaGFzRWFnZXJTdGF0ZTohMSxlYWdlclN0YXRlOm51bGwsbmV4dDpudWxsfSxhOShlKT9hOChuLHQpOm51bGwhPT0odD10NShlLG4sdCxyKSkmJihzbyh0LGUsciksYTcodCxuLHIpKX1mdW5jdGlvbiBhNShlLG4sdCl7YTMoZSxuLHQsc3QoKSl9ZnVuY3Rpb24gYTMoZSxuLHQscil7dmFyIG89e2xhbmU6cixyZXZlcnRMYW5lOjAsZ2VzdHVyZTpudWxsLGFjdGlvbjp0LGhhc0VhZ2VyU3RhdGU6ITEsZWFnZXJTdGF0ZTpudWxsLG5leHQ6bnVsbH07aWYoYTkoZSkpYTgobixvKTtlbHNle3ZhciBhPWUuYWx0ZXJuYXRlO2lmKDA9PT1lLmxhbmVzJiYobnVsbD09PWF8fDA9PT1hLmxhbmVzKSYmbnVsbCE9PShhPW4ubGFzdFJlbmRlcmVkUmVkdWNlcikpdHJ5e3ZhciBpPW4ubGFzdFJlbmRlcmVkU3RhdGUsbD1hKGksdCk7aWYoby5oYXNFYWdlclN0YXRlPSEwLG8uZWFnZXJTdGF0ZT1sLHRPKGwsaSkpcmV0dXJuIHQ0KGUsbixvLDApLG51bGw9PT1sTiYmdDIoKSwhMX1jYXRjaChlKXt9ZmluYWxseXt9aWYobnVsbCE9PSh0PXQ1KGUsbixvLHIpKSlyZXR1cm4gc28odCxlLHIpLGE3KHQsbixyKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBhNihlLG4sdCxyKXtpZihyPXtsYW5lOjIscmV2ZXJ0TGFuZTpzWCgpLGdlc3R1cmU6bnVsbCxhY3Rpb246cixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9LGE5KGUpKXtpZihuKXRocm93IEVycm9yKGwoNDc5KSl9ZWxzZSBudWxsIT09KG49dDUoZSx0LHIsMikpJiZzbyhuLGUsMil9ZnVuY3Rpb24gYTkoZSl7dmFyIG49ZS5hbHRlcm5hdGU7cmV0dXJuIGU9PT1vWXx8bnVsbCE9PW4mJm49PT1vWX1mdW5jdGlvbiBhOChlLG4pe29HPW9RPSEwO3ZhciB0PWUucGVuZGluZztudWxsPT09dD9uLm5leHQ9bjoobi5uZXh0PXQubmV4dCx0Lm5leHQ9biksZS5wZW5kaW5nPW59ZnVuY3Rpb24gYTcoZSxuLHQpe2lmKDAhPSg0MTk0MDQ4JnQpKXt2YXIgcj1uLmxhbmVzO3ImPWUucGVuZGluZ0xhbmVzLG4ubGFuZXM9dHw9cixlRShlLHQpfX12YXIgaWU9e3JlYWRDb250ZXh0OnJZLHVzZTphbCx1c2VDYWxsYmFjazpvNSx1c2VDb250ZXh0Om81LHVzZUVmZmVjdDpvNSx1c2VJbXBlcmF0aXZlSGFuZGxlOm81LHVzZUxheW91dEVmZmVjdDpvNSx1c2VJbnNlcnRpb25FZmZlY3Q6bzUsdXNlTWVtbzpvNSx1c2VSZWR1Y2VyOm81LHVzZVJlZjpvNSx1c2VTdGF0ZTpvNSx1c2VEZWJ1Z1ZhbHVlOm81LHVzZURlZmVycmVkVmFsdWU6bzUsdXNlVHJhbnNpdGlvbjpvNSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpvNSx1c2VJZDpvNSx1c2VIb3N0VHJhbnNpdGlvblN0YXR1czpvNSx1c2VGb3JtU3RhdGU6bzUsdXNlQWN0aW9uU3RhdGU6bzUsdXNlT3B0aW1pc3RpYzpvNSx1c2VNZW1vQ2FjaGU6bzUsdXNlQ2FjaGVSZWZyZXNoOm81fSxpdD17cmVhZENvbnRleHQ6clksdXNlOmFsLHVzZUNhbGxiYWNrOmZ1bmN0aW9uKGUsbil7cmV0dXJuIGFyKCkubWVtb2l6ZWRTdGF0ZT1bZSx2b2lkIDA9PT1uP251bGw6bl0sZX0sdXNlQ29udGV4dDpyWSx1c2VFZmZlY3Q6YUIsdXNlSW1wZXJhdGl2ZUhhbmRsZTpmdW5jdGlvbihlLG4sdCl7dD1udWxsIT10P3QuY29uY2F0KFtlXSk6bnVsbCxhTig0MTk0MzA4LDQsYUYuYmluZChudWxsLG4sZSksdCl9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbihlLG4pe3JldHVybiBhTig0MTk0MzA4LDQsZSxuKX0sdXNlSW5zZXJ0aW9uRWZmZWN0OmZ1bmN0aW9uKGUsbil7YU4oNCwyLGUsbil9LHVzZU1lbW86ZnVuY3Rpb24oZSxuKXt2YXIgdD1hcigpO249dm9pZCAwPT09bj9udWxsOm47dmFyIHI9ZSgpO2lmKG9KKXtlaCghMCk7dHJ5e2UoKX1maW5hbGx5e2VoKCExKX19cmV0dXJuIHQubWVtb2l6ZWRTdGF0ZT1bcixuXSxyfSx1c2VSZWR1Y2VyOmZ1bmN0aW9uKGUsbix0KXt2YXIgcj1hcigpO2lmKHZvaWQgMCE9PXQpe3ZhciBvPXQobik7aWYob0ope2VoKCEwKTt0cnl7dChuKX1maW5hbGx5e2VoKCExKX19fWVsc2Ugbz1uO3JldHVybiByLm1lbW9pemVkU3RhdGU9ci5iYXNlU3RhdGU9byxyLnF1ZXVlPWU9e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjplLGxhc3RSZW5kZXJlZFN0YXRlOm99LGU9ZS5kaXNwYXRjaD1hNC5iaW5kKG51bGwsb1ksZSksW3IubWVtb2l6ZWRTdGF0ZSxlXX0sdXNlUmVmOmZ1bmN0aW9uKGUpe3JldHVybiBhcigpLm1lbW9pemVkU3RhdGU9ZT17Y3VycmVudDplfX0sdXNlU3RhdGU6ZnVuY3Rpb24oZSl7dmFyIG49KGU9YXkoZSkpLnF1ZXVlLHQ9YTUuYmluZChudWxsLG9ZLG4pO3JldHVybiBuLmRpc3BhdGNoPXQsW2UubWVtb2l6ZWRTdGF0ZSx0XX0sdXNlRGVidWdWYWx1ZTphVix1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKGUsbil7cmV0dXJuIGEkKGFyKCksZSxuKX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPWF5KCExKTtyZXR1cm4gZT1hWS5iaW5kKG51bGwsb1ksZS5xdWV1ZSwhMCwhMSksYXIoKS5tZW1vaXplZFN0YXRlPWUsWyExLGVdfSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpmdW5jdGlvbihlLG4sdCl7dmFyIHI9b1ksbz1hcigpO2lmKHJTKXtpZih2b2lkIDA9PT10KXRocm93IEVycm9yKGwoNDA3KSk7dD10KCl9ZWxzZXtpZih0PW4oKSxudWxsPT09bE4pdGhyb3cgRXJyb3IobCgzNDkpKTswIT0oMTI0JmxCKXx8YWgocixuLHQpfW8ubWVtb2l6ZWRTdGF0ZT10O3ZhciBhPXt2YWx1ZTp0LGdldFNuYXBzaG90Om59O3JldHVybiBvLnF1ZXVlPWEsYUIoYW0uYmluZChudWxsLHIsYSxlKSxbZV0pLHIuZmxhZ3N8PTIwNDgsYVQoOSx7ZGVzdHJveTp2b2lkIDB9LGFnLmJpbmQobnVsbCxyLGEsdCxuKSxudWxsKSx0fSx1c2VJZDpmdW5jdGlvbigpe3ZhciBlPWFyKCksbj1sTi5pZGVudGlmaWVyUHJlZml4O2lmKHJTKXt2YXIgdD1yeSxyPXJiO249XCJfXCIrbitcIlJfXCIrKHQ9KHImfigxPDwzMi1lZyhyKS0xKSkudG9TdHJpbmcoMzIpK3QpLDA8KHQ9bzArKykmJihuKz1cIkhcIit0LnRvU3RyaW5nKDMyKSksbis9XCJfXCJ9ZWxzZSBuPVwiX1wiK24rXCJyX1wiKyh0PW80KyspLnRvU3RyaW5nKDMyKStcIl9cIjtyZXR1cm4gZS5tZW1vaXplZFN0YXRlPW59LHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOmFKLHVzZUZvcm1TdGF0ZTphRSx1c2VBY3Rpb25TdGF0ZTphRSx1c2VPcHRpbWlzdGljOmZ1bmN0aW9uKGUpe3ZhciBuPWFyKCk7bi5tZW1vaXplZFN0YXRlPW4uYmFzZVN0YXRlPWU7dmFyIHQ9e3BlbmRpbmc6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjpudWxsLGxhc3RSZW5kZXJlZFN0YXRlOm51bGx9O3JldHVybiBuLnF1ZXVlPXQsbj1hNi5iaW5kKG51bGwsb1ksITAsdCksdC5kaXNwYXRjaD1uLFtlLG5dfSx1c2VNZW1vQ2FjaGU6YXMsdXNlQ2FjaGVSZWZyZXNoOmZ1bmN0aW9uKCl7cmV0dXJuIGFyKCkubWVtb2l6ZWRTdGF0ZT1hMi5iaW5kKG51bGwsb1kpfX0saXI9e3JlYWRDb250ZXh0OnJZLHVzZTphbCx1c2VDYWxsYmFjazphcSx1c2VDb250ZXh0OnJZLHVzZUVmZmVjdDphTSx1c2VJbXBlcmF0aXZlSGFuZGxlOmFVLHVzZUluc2VydGlvbkVmZmVjdDphSSx1c2VMYXlvdXRFZmZlY3Q6YUgsdXNlTWVtbzphVyx1c2VSZWR1Y2VyOmF1LHVzZVJlZjphUix1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBhdShhYyl9LHVzZURlYnVnVmFsdWU6YVYsdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlLG4pe3JldHVybiBhWihhbygpLG9YLm1lbW9pemVkU3RhdGUsZSxuKX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciBlPWF1KGFjKVswXSxuPWFvKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bXCJib29sZWFuXCI9PXR5cGVvZiBlP2U6YWkoZSksbl19LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmFwLHVzZUlkOmEwLHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOmFKLHVzZUZvcm1TdGF0ZTphXyx1c2VBY3Rpb25TdGF0ZTphXyx1c2VPcHRpbWlzdGljOmZ1bmN0aW9uKGUsbil7cmV0dXJuIGF4KGFvKCksb1gsZSxuKX0sdXNlTWVtb0NhY2hlOmFzLHVzZUNhY2hlUmVmcmVzaDphMX0saW89e3JlYWRDb250ZXh0OnJZLHVzZTphbCx1c2VDYWxsYmFjazphcSx1c2VDb250ZXh0OnJZLHVzZUVmZmVjdDphTSx1c2VJbXBlcmF0aXZlSGFuZGxlOmFVLHVzZUluc2VydGlvbkVmZmVjdDphSSx1c2VMYXlvdXRFZmZlY3Q6YUgsdXNlTWVtbzphVyx1c2VSZWR1Y2VyOmFmLHVzZVJlZjphUix1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBhZihhYyl9LHVzZURlYnVnVmFsdWU6YVYsdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlLG4pe3ZhciB0PWFvKCk7cmV0dXJuIG51bGw9PT1vWD9hJCh0LGUsbik6YVoodCxvWC5tZW1vaXplZFN0YXRlLGUsbil9LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgZT1hZihhYylbMF0sbj1hbygpLm1lbW9pemVkU3RhdGU7cmV0dXJuW1wiYm9vbGVhblwiPT10eXBlb2YgZT9lOmFpKGUpLG5dfSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTphcCx1c2VJZDphMCx1c2VIb3N0VHJhbnNpdGlvblN0YXR1czphSix1c2VGb3JtU3RhdGU6YUwsdXNlQWN0aW9uU3RhdGU6YUwsdXNlT3B0aW1pc3RpYzpmdW5jdGlvbihlLG4pe3ZhciB0PWFvKCk7cmV0dXJuIG51bGwhPT1vWD9heCh0LG9YLGUsbik6KHQuYmFzZVN0YXRlPWUsW2UsdC5xdWV1ZS5kaXNwYXRjaF0pfSx1c2VNZW1vQ2FjaGU6YXMsdXNlQ2FjaGVSZWZyZXNoOmExfTtmdW5jdGlvbiBpYShlLG4sdCxyKXt0PW51bGw9PSh0PXQocixuPWUubWVtb2l6ZWRTdGF0ZSkpP246Zih7fSxuLHQpLGUubWVtb2l6ZWRTdGF0ZT10LDA9PT1lLmxhbmVzJiYoZS51cGRhdGVRdWV1ZS5iYXNlU3RhdGU9dCl9dmFyIGlpPXtlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oZSxuLHQpe2U9ZS5fcmVhY3RJbnRlcm5hbHM7dmFyIHI9c3QoKSxvPW9BKHIpO28ucGF5bG9hZD1uLG51bGwhPXQmJihvLmNhbGxiYWNrPXQpLG51bGwhPT0obj1vTyhlLG8scikpJiYoc28obixlLHIpLG9DKG4sZSxyKSl9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oZSxuLHQpe2U9ZS5fcmVhY3RJbnRlcm5hbHM7dmFyIHI9c3QoKSxvPW9BKHIpO28udGFnPTEsby5wYXlsb2FkPW4sbnVsbCE9dCYmKG8uY2FsbGJhY2s9dCksbnVsbCE9PShuPW9PKGUsbyxyKSkmJihzbyhuLGUsciksb0MobixlLHIpKX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKGUsbil7ZT1lLl9yZWFjdEludGVybmFsczt2YXIgdD1zdCgpLHI9b0EodCk7ci50YWc9MixudWxsIT1uJiYoci5jYWxsYmFjaz1uKSxudWxsIT09KG49b08oZSxyLHQpKSYmKHNvKG4sZSx0KSxvQyhuLGUsdCkpfX07ZnVuY3Rpb24gaWwoZSxuLHQscixvLGEsaSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YoZT1lLnN0YXRlTm9kZSkuc2hvdWxkQ29tcG9uZW50VXBkYXRlP2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKHIsYSxpKTohbi5wcm90b3R5cGV8fCFuLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudHx8IXRDKHQscil8fCF0QyhvLGEpfWZ1bmN0aW9uIGlzKGUsbix0LHIpe2U9bi5zdGF0ZSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJm4uY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyh0LHIpLFwiZnVuY3Rpb25cIj09dHlwZW9mIG4uVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJm4uVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHModCxyKSxuLnN0YXRlIT09ZSYmaWkuZW5xdWV1ZVJlcGxhY2VTdGF0ZShuLG4uc3RhdGUsbnVsbCl9ZnVuY3Rpb24gaWMoZSxuKXt2YXIgdD1uO2lmKFwicmVmXCJpbiBuKWZvcih2YXIgciBpbiB0PXt9LG4pXCJyZWZcIiE9PXImJih0W3JdPW5bcl0pO2lmKGU9ZS5kZWZhdWx0UHJvcHMpZm9yKHZhciBvIGluIHQ9PT1uJiYodD1mKHt9LHQpKSxlKXZvaWQgMD09PXRbb10mJih0W29dPWVbb10pO3JldHVybiB0fWZ1bmN0aW9uIGl1KGUpe3RHKGUpfWZ1bmN0aW9uIGlkKGUpe2NvbnNvbGUuZXJyb3IoZSl9ZnVuY3Rpb24gaXAoZSl7dEcoZSl9ZnVuY3Rpb24gaWgoZSxuKXt0cnl7KDAsZS5vblVuY2F1Z2h0RXJyb3IpKG4udmFsdWUse2NvbXBvbmVudFN0YWNrOm4uc3RhY2t9KX1jYXRjaChlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0pfX1mdW5jdGlvbiBpZyhlLG4sdCl7dHJ5eygwLGUub25DYXVnaHRFcnJvcikodC52YWx1ZSx7Y29tcG9uZW50U3RhY2s6dC5zdGFjayxlcnJvckJvdW5kYXJ5OjE9PT1uLnRhZz9uLnN0YXRlTm9kZTpudWxsfSl9Y2F0Y2goZSl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9KX19ZnVuY3Rpb24gaW0oZSxuLHQpe3JldHVybih0PW9BKHQpKS50YWc9Myx0LnBheWxvYWQ9e2VsZW1lbnQ6bnVsbH0sdC5jYWxsYmFjaz1mdW5jdGlvbigpe2loKGUsbil9LHR9ZnVuY3Rpb24gaXYoZSl7cmV0dXJuKGU9b0EoZSkpLnRhZz0zLGV9ZnVuY3Rpb24gaWIoZSxuLHQscil7dmFyIG89dC50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBvKXt2YXIgYT1yLnZhbHVlO2UucGF5bG9hZD1mdW5jdGlvbigpe3JldHVybiBvKGEpfSxlLmNhbGxiYWNrPWZ1bmN0aW9uKCl7aWcobix0LHIpfX12YXIgaT10LnN0YXRlTm9kZTtudWxsIT09aSYmXCJmdW5jdGlvblwiPT10eXBlb2YgaS5jb21wb25lbnREaWRDYXRjaCYmKGUuY2FsbGJhY2s9ZnVuY3Rpb24oKXtpZyhuLHQsciksXCJmdW5jdGlvblwiIT10eXBlb2YgbyYmKG51bGw9PT1sMj9sMj1uZXcgU2V0KFt0aGlzXSk6bDIuYWRkKHRoaXMpKTt2YXIgZT1yLnN0YWNrO3RoaXMuY29tcG9uZW50RGlkQ2F0Y2goci52YWx1ZSx7Y29tcG9uZW50U3RhY2s6bnVsbCE9PWU/ZTpcIlwifSl9KX12YXIgaXk9RXJyb3IobCg0NjEpKSxpeD0hMTtmdW5jdGlvbiBpdyhlLG4sdCxyKXtuLmNoaWxkPW51bGw9PT1lP294KG4sbnVsbCx0LHIpOm95KG4sZS5jaGlsZCx0LHIpfWZ1bmN0aW9uIGlqKGUsbix0LHIsbyl7dD10LnJlbmRlcjt2YXIgYT1uLnJlZjtpZihcInJlZlwiaW4gcil7dmFyIGk9e307Zm9yKHZhciBsIGluIHIpXCJyZWZcIiE9PWwmJihpW2xdPXJbbF0pfWVsc2UgaT1yO3JldHVybihyWihuKSxyPW82KGUsbix0LGksYSxvKSxsPWFlKCksbnVsbD09PWV8fGl4KT8oclMmJmwmJnJqKG4pLG4uZmxhZ3N8PTEsaXcoZSxuLHIsbyksbi5jaGlsZCk6KGFuKGUsbixvKSxpcShlLG4sbykpfWZ1bmN0aW9uIGlrKGUsbix0LHIsbyl7aWYobnVsbD09PWUpe3ZhciBhPXQudHlwZTtyZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiBhfHxybihhKXx8dm9pZCAwIT09YS5kZWZhdWx0UHJvcHN8fG51bGwhPT10LmNvbXBhcmU/KChlPXJvKHQudHlwZSxudWxsLHIsbixuLm1vZGUsbykpLnJlZj1uLnJlZixlLnJldHVybj1uLG4uY2hpbGQ9ZSk6KG4udGFnPTE1LG4udHlwZT1hLGlBKGUsbixhLHIsbykpfWlmKGE9ZS5jaGlsZCwhaVcoZSxvKSl7dmFyIGk9YS5tZW1vaXplZFByb3BzO2lmKCh0PW51bGwhPT0odD10LmNvbXBhcmUpP3Q6dEMpKGkscikmJmUucmVmPT09bi5yZWYpcmV0dXJuIGlxKGUsbixvKX1yZXR1cm4gbi5mbGFnc3w9MSwoZT1ydChhLHIpKS5yZWY9bi5yZWYsZS5yZXR1cm49bixuLmNoaWxkPWV9ZnVuY3Rpb24gaUEoZSxuLHQscixvKXtpZihudWxsIT09ZSl7dmFyIGE9ZS5tZW1vaXplZFByb3BzO2lmKHRDKGEscikmJmUucmVmPT09bi5yZWYpaWYoaXg9ITEsbi5wZW5kaW5nUHJvcHM9cj1hLCFpVyhlLG8pKXJldHVybiBuLmxhbmVzPWUubGFuZXMsaXEoZSxuLG8pO2Vsc2UgMCE9KDEzMTA3MiZlLmZsYWdzKSYmKGl4PSEwKX1yZXR1cm4gaVAoZSxuLHQscixvKX1mdW5jdGlvbiBpTyhlLG4sdCxyKXt2YXIgbz1yLmNoaWxkcmVuLGE9bnVsbCE9PWU/ZS5tZW1vaXplZFN0YXRlOm51bGw7aWYoXCJoaWRkZW5cIj09PXIubW9kZSl7aWYoMCE9KDEyOCZuLmZsYWdzKSl7aWYocj1udWxsIT09YT9hLmJhc2VMYW5lc3x0OnQsbnVsbCE9PWUpe2ZvcihhPTAsbz1uLmNoaWxkPWUuY2hpbGQ7bnVsbCE9PW87KWE9YXxvLmxhbmVzfG8uY2hpbGRMYW5lcyxvPW8uc2libGluZztuLmNoaWxkTGFuZXM9YSZ+cn1lbHNlIG4uY2hpbGRMYW5lcz0wLG4uY2hpbGQ9bnVsbDtyZXR1cm4gaUMoZSxuLHIsdCl9aWYoMD09KDB4MjAwMDAwMDAmdCkpcmV0dXJuIG4ubGFuZXM9bi5jaGlsZExhbmVzPTB4MjAwMDAwMDAsaUMoZSxuLG51bGwhPT1hP2EuYmFzZUxhbmVzfHQ6dCx0KTtuLm1lbW9pemVkU3RhdGU9e2Jhc2VMYW5lczowLGNhY2hlUG9vbDpudWxsfSxudWxsIT09ZSYmb24obixudWxsIT09YT9hLmNhY2hlUG9vbDpudWxsKSxudWxsIT09YT9vTihuLGEpOm9EKCksb1Uobil9ZWxzZSBudWxsIT09YT8ob24obixhLmNhY2hlUG9vbCksb04obixhKSxvVihuKSxuLm1lbW9pemVkU3RhdGU9bnVsbCk6KG51bGwhPT1lJiZvbihuLG51bGwpLG9EKCksb1YobikpO3JldHVybiBpdyhlLG4sbyx0KSxuLmNoaWxkfWZ1bmN0aW9uIGlDKGUsbix0LHIpe3ZhciBvPW9lKCk7cmV0dXJuIG4ubWVtb2l6ZWRTdGF0ZT17YmFzZUxhbmVzOnQsY2FjaGVQb29sOm89bnVsbD09PW8/bnVsbDp7cGFyZW50OnIwLl9jdXJyZW50VmFsdWUscG9vbDpvfX0sbnVsbCE9PWUmJm9uKG4sbnVsbCksb0QoKSxvVShuKSxudWxsIT09ZSYmclcoZSxuLHIsITApLG51bGx9ZnVuY3Rpb24gaVMoZSxuKXtyZXR1cm4obj1pSSh7bW9kZTpuLm1vZGUsY2hpbGRyZW46bi5jaGlsZHJlbn0sZS5tb2RlKSkucmVmPWUucmVmLGUuY2hpbGQ9bixuLnJldHVybj1lLG59ZnVuY3Rpb24gaUUoZSxuLHQpe3JldHVybiBveShuLGUuY2hpbGQsbnVsbCx0KSxlPWlTKG4sbi5wZW5kaW5nUHJvcHMpLGUuZmxhZ3N8PTIsb3Eobiksbi5tZW1vaXplZFN0YXRlPW51bGwsZX1mdW5jdGlvbiBpXyhlLG4pe3ZhciB0PW4ucmVmO2lmKG51bGw9PT10KW51bGwhPT1lJiZudWxsIT09ZS5yZWYmJihuLmZsYWdzfD00MTk0ODE2KTtlbHNle2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJlwib2JqZWN0XCIhPXR5cGVvZiB0KXRocm93IEVycm9yKGwoMjg0KSk7KG51bGw9PT1lfHxlLnJlZiE9PXQpJiYobi5mbGFnc3w9NDE5NDgxNil9fWZ1bmN0aW9uIGlQKGUsbix0LHIsbyl7cmV0dXJuKHJaKG4pLHQ9bzYoZSxuLHQscix2b2lkIDAsbykscj1hZSgpLG51bGw9PT1lfHxpeCk/KHJTJiZyJiZyaihuKSxuLmZsYWdzfD0xLGl3KGUsbix0LG8pLG4uY2hpbGQpOihhbihlLG4sbyksaXEoZSxuLG8pKX1mdW5jdGlvbiBpeihlLG4sdCxyLG8sYSl7cmV0dXJuKHJaKG4pLG4udXBkYXRlUXVldWU9bnVsbCx0PW84KG4scix0LG8pLG85KGUpLHI9YWUoKSxudWxsPT09ZXx8aXgpPyhyUyYmciYmcmoobiksbi5mbGFnc3w9MSxpdyhlLG4sdCxhKSxuLmNoaWxkKTooYW4oZSxuLGEpLGlxKGUsbixhKSl9ZnVuY3Rpb24gaUwoZSxuLHQscixvKXtpZihyWihuKSxudWxsPT09bi5zdGF0ZU5vZGUpe3ZhciBhPXQ4LGk9dC5jb250ZXh0VHlwZTtcIm9iamVjdFwiPT10eXBlb2YgaSYmbnVsbCE9PWkmJihhPXJZKGkpKSxuLm1lbW9pemVkU3RhdGU9bnVsbCE9PShhPW5ldyB0KHIsYSkpLnN0YXRlJiZ2b2lkIDAhPT1hLnN0YXRlP2Euc3RhdGU6bnVsbCxhLnVwZGF0ZXI9aWksbi5zdGF0ZU5vZGU9YSxhLl9yZWFjdEludGVybmFscz1uLChhPW4uc3RhdGVOb2RlKS5wcm9wcz1yLGEuc3RhdGU9bi5tZW1vaXplZFN0YXRlLGEucmVmcz17fSxvaihuKSxpPXQuY29udGV4dFR5cGUsYS5jb250ZXh0PVwib2JqZWN0XCI9PXR5cGVvZiBpJiZudWxsIT09aT9yWShpKTp0OCxhLnN0YXRlPW4ubWVtb2l6ZWRTdGF0ZSxcImZ1bmN0aW9uXCI9PXR5cGVvZihpPXQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKSYmKGlhKG4sdCxpLHIpLGEuc3RhdGU9bi5tZW1vaXplZFN0YXRlKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc3x8XCJmdW5jdGlvblwiPT10eXBlb2YgYS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8XCJmdW5jdGlvblwiIT10eXBlb2YgYS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBhLmNvbXBvbmVudFdpbGxNb3VudHx8KGk9YS5zdGF0ZSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmNvbXBvbmVudFdpbGxNb3VudCYmYS5jb21wb25lbnRXaWxsTW91bnQoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJmEuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpLGkhPT1hLnN0YXRlJiZpaS5lbnF1ZXVlUmVwbGFjZVN0YXRlKGEsYS5zdGF0ZSxudWxsKSxvUChuLHIsYSxvKSxvXygpLGEuc3RhdGU9bi5tZW1vaXplZFN0YXRlKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmNvbXBvbmVudERpZE1vdW50JiYobi5mbGFnc3w9NDE5NDMwOCkscj0hMH1lbHNlIGlmKG51bGw9PT1lKXthPW4uc3RhdGVOb2RlO3ZhciBsPW4ubWVtb2l6ZWRQcm9wcyxzPWljKHQsbCk7YS5wcm9wcz1zO3ZhciBjPWEuY29udGV4dCx1PXQuY29udGV4dFR5cGU7aT10OCxcIm9iamVjdFwiPT10eXBlb2YgdSYmbnVsbCE9PXUmJihpPXJZKHUpKTt2YXIgZD10LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczt1PVwiZnVuY3Rpb25cIj09dHlwZW9mIGR8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUsbD1uLnBlbmRpbmdQcm9wcyE9PWwsdXx8XCJmdW5jdGlvblwiIT10eXBlb2YgYS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmXCJmdW5jdGlvblwiIT10eXBlb2YgYS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwobHx8YyE9PWkpJiZpcyhuLGEscixpKSxvdz0hMTt2YXIgZj1uLm1lbW9pemVkU3RhdGU7YS5zdGF0ZT1mLG9QKG4scixhLG8pLG9fKCksYz1uLm1lbW9pemVkU3RhdGUsbHx8ZiE9PWN8fG93PyhcImZ1bmN0aW9uXCI9PXR5cGVvZiBkJiYoaWEobix0LGQsciksYz1uLm1lbW9pemVkU3RhdGUpLChzPW93fHxpbChuLHQscyxyLGYsYyxpKSk/KHV8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmXCJmdW5jdGlvblwiIT10eXBlb2YgYS5jb21wb25lbnRXaWxsTW91bnR8fChcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmNvbXBvbmVudFdpbGxNb3VudCYmYS5jb21wb25lbnRXaWxsTW91bnQoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJmEuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmNvbXBvbmVudERpZE1vdW50JiYobi5mbGFnc3w9NDE5NDMwOCkpOihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmNvbXBvbmVudERpZE1vdW50JiYobi5mbGFnc3w9NDE5NDMwOCksbi5tZW1vaXplZFByb3BzPXIsbi5tZW1vaXplZFN0YXRlPWMpLGEucHJvcHM9cixhLnN0YXRlPWMsYS5jb250ZXh0PWkscj1zKTooXCJmdW5jdGlvblwiPT10eXBlb2YgYS5jb21wb25lbnREaWRNb3VudCYmKG4uZmxhZ3N8PTQxOTQzMDgpLHI9ITEpfWVsc2V7YT1uLnN0YXRlTm9kZSxvayhlLG4pLHU9aWModCxpPW4ubWVtb2l6ZWRQcm9wcyksYS5wcm9wcz11LGQ9bi5wZW5kaW5nUHJvcHMsZj1hLmNvbnRleHQsYz10LmNvbnRleHRUeXBlLHM9dDgsXCJvYmplY3RcIj09dHlwZW9mIGMmJm51bGwhPT1jJiYocz1yWShjKSksKGM9XCJmdW5jdGlvblwiPT10eXBlb2YobD10LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUpfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiBhLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBhLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHN8fChpIT09ZHx8ZiE9PXMpJiZpcyhuLGEscixzKSxvdz0hMSxmPW4ubWVtb2l6ZWRTdGF0ZSxhLnN0YXRlPWYsb1AobixyLGEsbyksb18oKTt2YXIgcD1uLm1lbW9pemVkU3RhdGU7aSE9PWR8fGYhPT1wfHxvd3x8bnVsbCE9PWUmJm51bGwhPT1lLmRlcGVuZGVuY2llcyYmciQoZS5kZXBlbmRlbmNpZXMpPyhcImZ1bmN0aW9uXCI9PXR5cGVvZiBsJiYoaWEobix0LGwscikscD1uLm1lbW9pemVkU3RhdGUpLCh1PW93fHxpbChuLHQsdSxyLGYscCxzKXx8bnVsbCE9PWUmJm51bGwhPT1lLmRlcGVuZGVuY2llcyYmciQoZS5kZXBlbmRlbmNpZXMpKT8oY3x8XCJmdW5jdGlvblwiIT10eXBlb2YgYS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgYS5jb21wb25lbnRXaWxsVXBkYXRlfHwoXCJmdW5jdGlvblwiPT10eXBlb2YgYS5jb21wb25lbnRXaWxsVXBkYXRlJiZhLmNvbXBvbmVudFdpbGxVcGRhdGUocixwLHMpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGEuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJmEuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUocixwLHMpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmNvbXBvbmVudERpZFVwZGF0ZSYmKG4uZmxhZ3N8PTQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUmJihuLmZsYWdzfD0xMDI0KSk6KFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuY29tcG9uZW50RGlkVXBkYXRlfHxpPT09ZS5tZW1vaXplZFByb3BzJiZmPT09ZS5tZW1vaXplZFN0YXRlfHwobi5mbGFnc3w9NCksXCJmdW5jdGlvblwiIT10eXBlb2YgYS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8aT09PWUubWVtb2l6ZWRQcm9wcyYmZj09PWUubWVtb2l6ZWRTdGF0ZXx8KG4uZmxhZ3N8PTEwMjQpLG4ubWVtb2l6ZWRQcm9wcz1yLG4ubWVtb2l6ZWRTdGF0ZT1wKSxhLnByb3BzPXIsYS5zdGF0ZT1wLGEuY29udGV4dD1zLHI9dSk6KFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEuY29tcG9uZW50RGlkVXBkYXRlfHxpPT09ZS5tZW1vaXplZFByb3BzJiZmPT09ZS5tZW1vaXplZFN0YXRlfHwobi5mbGFnc3w9NCksXCJmdW5jdGlvblwiIT10eXBlb2YgYS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8aT09PWUubWVtb2l6ZWRQcm9wcyYmZj09PWUubWVtb2l6ZWRTdGF0ZXx8KG4uZmxhZ3N8PTEwMjQpLHI9ITEpfXJldHVybiBhPXIsaV8oZSxuKSxyPTAhPSgxMjgmbi5mbGFncyksYXx8cj8oYT1uLnN0YXRlTm9kZSx0PXImJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHQuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yP251bGw6YS5yZW5kZXIoKSxuLmZsYWdzfD0xLG51bGwhPT1lJiZyPyhuLmNoaWxkPW95KG4sZS5jaGlsZCxudWxsLG8pLG4uY2hpbGQ9b3kobixudWxsLHQsbykpOml3KGUsbix0LG8pLG4ubWVtb2l6ZWRTdGF0ZT1hLnN0YXRlLGU9bi5jaGlsZCk6ZT1pcShlLG4sbyksZX1mdW5jdGlvbiBpVChlLG4sdCxyKXtyZXR1cm4gck4oKSxuLmZsYWdzfD0yNTYsaXcoZSxuLHQsciksbi5jaGlsZH12YXIgaVI9e2RlaHlkcmF0ZWQ6bnVsbCx0cmVlQ29udGV4dDpudWxsLHJldHJ5TGFuZTowLGh5ZHJhdGlvbkVycm9yczpudWxsfTtmdW5jdGlvbiBpTihlKXtyZXR1cm57YmFzZUxhbmVzOmUsY2FjaGVQb29sOm90KCl9fWZ1bmN0aW9uIGlEKGUsbix0KXtyZXR1cm4gZT1udWxsIT09ZT9lLmNoaWxkTGFuZXMmfnQ6MCxuJiYoZXw9bFkpLGV9ZnVuY3Rpb24gaUIoZSxuLHQpe3ZhciByLG89bi5wZW5kaW5nUHJvcHMsYT0hMSxpPTAhPSgxMjgmbi5mbGFncyk7aWYoKHI9aSl8fChyPShudWxsPT09ZXx8bnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSkmJjAhPSgyJm9XLmN1cnJlbnQpKSxyJiYoYT0hMCxuLmZsYWdzJj0tMTI5KSxyPTAhPSgzMiZuLmZsYWdzKSxuLmZsYWdzJj0tMzMsbnVsbD09PWUpe2lmKHJTKXtpZihhP29IKG4pOm9WKG4pLChlPXJDKT9udWxsIT09KGU9bnVsbCE9PShlPWNDKGUscl8pKSYmXCImXCIhPT1lLmRhdGE/ZTpudWxsKSYmKG4ubWVtb2l6ZWRTdGF0ZT17ZGVoeWRyYXRlZDplLHRyZWVDb250ZXh0Om51bGwhPT1ydj97aWQ6cmIsb3ZlcmZsb3c6cnl9Om51bGwscmV0cnlMYW5lOjB4MjAwMDAwMDAsaHlkcmF0aW9uRXJyb3JzOm51bGx9LCh0PXJsKGUpKS5yZXR1cm49bixuLmNoaWxkPXQsck89bixyQz1udWxsKTplPW51bGwsbnVsbD09PWUpdGhyb3cgcnoobik7cmV0dXJuIGNFKGUpP24ubGFuZXM9MzI6bi5sYW5lcz0weDIwMDAwMDAwLG51bGx9dmFyIHM9by5jaGlsZHJlbjtyZXR1cm4obz1vLmZhbGxiYWNrLGEpPyhvVihuKSxzPWlJKHttb2RlOlwiaGlkZGVuXCIsY2hpbGRyZW46c30sYT1uLm1vZGUpLG89cmEobyxhLHQsbnVsbCkscy5yZXR1cm49bixvLnJldHVybj1uLHMuc2libGluZz1vLG4uY2hpbGQ9cywocz1uLmNoaWxkKS5tZW1vaXplZFN0YXRlPWlOKHQpLHMuY2hpbGRMYW5lcz1pRChlLHIsdCksbi5tZW1vaXplZFN0YXRlPWlSLG8pOihvSChuKSxpTShuLHMpKX12YXIgYz1lLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PWMmJm51bGwhPT0ocz1jLmRlaHlkcmF0ZWQpKXtpZihpKTI1NiZuLmZsYWdzPyhvSChuKSxuLmZsYWdzJj0tMjU3LG49aUgoZSxuLHQpKTpudWxsIT09bi5tZW1vaXplZFN0YXRlPyhvVihuKSxuLmNoaWxkPWUuY2hpbGQsbi5mbGFnc3w9MTI4LG49bnVsbCk6KG9WKG4pLHM9by5mYWxsYmFjayxhPW4ubW9kZSxvPWlJKHttb2RlOlwidmlzaWJsZVwiLGNoaWxkcmVuOm8uY2hpbGRyZW59LGEpLHM9cmEocyxhLHQsbnVsbCkscy5mbGFnc3w9MixvLnJldHVybj1uLHMucmV0dXJuPW4sby5zaWJsaW5nPXMsbi5jaGlsZD1vLG95KG4sZS5jaGlsZCxudWxsLHQpLChvPW4uY2hpbGQpLm1lbW9pemVkU3RhdGU9aU4odCksby5jaGlsZExhbmVzPWlEKGUscix0KSxuLm1lbW9pemVkU3RhdGU9aVIsbj1zKTtlbHNlIGlmKG9IKG4pLGNFKHMpKXtpZihyPXMubmV4dFNpYmxpbmcmJnMubmV4dFNpYmxpbmcuZGF0YXNldCl2YXIgdT1yLmRnc3Q7cj11LChvPUVycm9yKGwoNDE5KSkpLnN0YWNrPVwiXCIsby5kaWdlc3Q9cixyQih7dmFsdWU6byxzb3VyY2U6bnVsbCxzdGFjazpudWxsfSksbj1pSChlLG4sdCl9ZWxzZSBpZihpeHx8clcoZSxuLHQsITEpLHI9MCE9KHQmZS5jaGlsZExhbmVzKSxpeHx8cil7aWYobnVsbCE9PShyPWxOKSYmMCE9PShvPWVfKHIsdCkpJiZvIT09Yy5yZXRyeUxhbmUpdGhyb3cgYy5yZXRyeUxhbmU9byx0MyhlLG8pLHNvKHIsZSxvKSxpeTtjUyhzKXx8c2coKSxuPWlIKGUsbix0KX1lbHNlIGNTKHMpPyhuLmZsYWdzfD0xOTIsbi5jaGlsZD1lLmNoaWxkLG49bnVsbCk6KGU9Yy50cmVlQ29udGV4dCxyQz1jXyhzLm5leHRTaWJsaW5nKSxyTz1uLHJTPSEwLHJFPW51bGwscl89ITEsbnVsbCE9PWUmJnJBKG4sZSksbj1pTShuLG8uY2hpbGRyZW4pLG4uZmxhZ3N8PTQwOTYpO3JldHVybiBufXJldHVybiBhPyhvVihuKSxzPW8uZmFsbGJhY2ssYT1uLm1vZGUsdT0oYz1lLmNoaWxkKS5zaWJsaW5nLChvPXJ0KGMse21vZGU6XCJoaWRkZW5cIixjaGlsZHJlbjpvLmNoaWxkcmVufSkpLnN1YnRyZWVGbGFncz0weDNlMDAwMDAmYy5zdWJ0cmVlRmxhZ3MsbnVsbCE9PXU/cz1ydCh1LHMpOihzPXJhKHMsYSx0LG51bGwpLHMuZmxhZ3N8PTIpLHMucmV0dXJuPW4sby5yZXR1cm49bixvLnNpYmxpbmc9cyxuLmNoaWxkPW8sbz1zLHM9bi5jaGlsZCxudWxsPT09KGE9ZS5jaGlsZC5tZW1vaXplZFN0YXRlKT9hPWlOKHQpOihudWxsIT09KGM9YS5jYWNoZVBvb2wpPyh1PXIwLl9jdXJyZW50VmFsdWUsYz1jLnBhcmVudCE9PXU/e3BhcmVudDp1LHBvb2w6dX06Yyk6Yz1vdCgpLGE9e2Jhc2VMYW5lczphLmJhc2VMYW5lc3x0LGNhY2hlUG9vbDpjfSkscy5tZW1vaXplZFN0YXRlPWEscy5jaGlsZExhbmVzPWlEKGUscix0KSxuLm1lbW9pemVkU3RhdGU9aVIsbyk6KG9IKG4pLGU9KHQ9ZS5jaGlsZCkuc2libGluZywodD1ydCh0LHttb2RlOlwidmlzaWJsZVwiLGNoaWxkcmVuOm8uY2hpbGRyZW59KSkucmV0dXJuPW4sdC5zaWJsaW5nPW51bGwsbnVsbCE9PWUmJihudWxsPT09KHI9bi5kZWxldGlvbnMpPyhuLmRlbGV0aW9ucz1bZV0sbi5mbGFnc3w9MTYpOnIucHVzaChlKSksbi5jaGlsZD10LG4ubWVtb2l6ZWRTdGF0ZT1udWxsLHQpfWZ1bmN0aW9uIGlNKGUsbil7cmV0dXJuKG49aUkoe21vZGU6XCJ2aXNpYmxlXCIsY2hpbGRyZW46bn0sZS5tb2RlKSkucmV0dXJuPWUsZS5jaGlsZD1ufWZ1bmN0aW9uIGlJKGUsbil7cmV0dXJuKGU9cmUoMjIsZSxudWxsLG4pKS5sYW5lcz0wLGUuc3RhdGVOb2RlPXtfdmlzaWJpbGl0eToxLF9wZW5kaW5nTWFya2VyczpudWxsLF9yZXRyeUNhY2hlOm51bGwsX3RyYW5zaXRpb25zOm51bGx9LGV9ZnVuY3Rpb24gaUgoZSxuLHQpe3JldHVybiBveShuLGUuY2hpbGQsbnVsbCx0KSxlPWlNKG4sbi5wZW5kaW5nUHJvcHMuY2hpbGRyZW4pLGUuZmxhZ3N8PTIsbi5tZW1vaXplZFN0YXRlPW51bGwsZX1mdW5jdGlvbiBpRihlLG4sdCl7ZS5sYW5lc3w9bjt2YXIgcj1lLmFsdGVybmF0ZTtudWxsIT09ciYmKHIubGFuZXN8PW4pLHJWKGUucmV0dXJuLG4sdCl9ZnVuY3Rpb24gaVUoZSxuLHQscixvLGEpe3ZhciBpPWUubWVtb2l6ZWRTdGF0ZTtudWxsPT09aT9lLm1lbW9pemVkU3RhdGU9e2lzQmFja3dhcmRzOm4scmVuZGVyaW5nOm51bGwscmVuZGVyaW5nU3RhcnRUaW1lOjAsbGFzdDpyLHRhaWw6dCx0YWlsTW9kZTpvLHRyZWVGb3JrQ291bnQ6YX06KGkuaXNCYWNrd2FyZHM9bixpLnJlbmRlcmluZz1udWxsLGkucmVuZGVyaW5nU3RhcnRUaW1lPTAsaS5sYXN0PXIsaS50YWlsPXQsaS50YWlsTW9kZT1vLGkudHJlZUZvcmtDb3VudD1hKX1mdW5jdGlvbiBpVihlLG4sdCl7dmFyIHI9bi5wZW5kaW5nUHJvcHMsbz1yLnJldmVhbE9yZGVyLGE9ci50YWlsO3I9ci5jaGlsZHJlbjt2YXIgaT1vVy5jdXJyZW50LGw9MCE9KDImaSk7aWYobD8oaT0xJml8MixuLmZsYWdzfD0xMjgpOmkmPTEsSShvVyxpKSxpdyhlLG4scix0KSxyPXJTP3JoOjAsIWwmJm51bGwhPT1lJiYwIT0oMTI4JmUuZmxhZ3MpKWU6Zm9yKGU9bi5jaGlsZDtudWxsIT09ZTspe2lmKDEzPT09ZS50YWcpbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmaUYoZSx0LG4pO2Vsc2UgaWYoMTk9PT1lLnRhZylpRihlLHQsbik7ZWxzZSBpZihudWxsIT09ZS5jaGlsZCl7ZS5jaGlsZC5yZXR1cm49ZSxlPWUuY2hpbGQ7Y29udGludWV9aWYoZT09PW4pYnJlYWs7Zm9yKDtudWxsPT09ZS5zaWJsaW5nOyl7aWYobnVsbD09PWUucmV0dXJufHxlLnJldHVybj09PW4pYnJlYWsgZTtlPWUucmV0dXJufWUuc2libGluZy5yZXR1cm49ZS5yZXR1cm4sZT1lLnNpYmxpbmd9c3dpdGNoKG8pe2Nhc2VcImZvcndhcmRzXCI6Zm9yKG89bnVsbCx0PW4uY2hpbGQ7bnVsbCE9PXQ7KW51bGwhPT0oZT10LmFsdGVybmF0ZSkmJm51bGw9PT1vJChlKSYmKG89dCksdD10LnNpYmxpbmc7bnVsbD09PSh0PW8pPyhvPW4uY2hpbGQsbi5jaGlsZD1udWxsKToobz10LnNpYmxpbmcsdC5zaWJsaW5nPW51bGwpLGlVKG4sITEsbyx0LGEscik7YnJlYWs7Y2FzZVwiYmFja3dhcmRzXCI6Y2FzZVwidW5zdGFibGVfbGVnYWN5LWJhY2t3YXJkc1wiOmZvcih0PW51bGwsbz1uLmNoaWxkLG4uY2hpbGQ9bnVsbDtudWxsIT09bzspe2lmKG51bGwhPT0oZT1vLmFsdGVybmF0ZSkmJm51bGw9PT1vJChlKSl7bi5jaGlsZD1vO2JyZWFrfWU9by5zaWJsaW5nLG8uc2libGluZz10LHQ9byxvPWV9aVUobiwhMCx0LG51bGwsYSxyKTticmVhaztjYXNlXCJ0b2dldGhlclwiOmlVKG4sITEsbnVsbCxudWxsLHZvaWQgMCxyKTticmVhaztkZWZhdWx0Om4ubWVtb2l6ZWRTdGF0ZT1udWxsfXJldHVybiBuLmNoaWxkfWZ1bmN0aW9uIGlxKGUsbix0KXtpZihudWxsIT09ZSYmKG4uZGVwZW5kZW5jaWVzPWUuZGVwZW5kZW5jaWVzKSxsV3w9bi5sYW5lcywwPT0odCZuLmNoaWxkTGFuZXMpKXtpZihudWxsPT09ZSlyZXR1cm4gbnVsbDtlbHNlIGlmKHJXKGUsbix0LCExKSwwPT0odCZuLmNoaWxkTGFuZXMpKXJldHVybiBudWxsfWlmKG51bGwhPT1lJiZuLmNoaWxkIT09ZS5jaGlsZCl0aHJvdyBFcnJvcihsKDE1MykpO2lmKG51bGwhPT1uLmNoaWxkKXtmb3IodD1ydChlPW4uY2hpbGQsZS5wZW5kaW5nUHJvcHMpLG4uY2hpbGQ9dCx0LnJldHVybj1uO251bGwhPT1lLnNpYmxpbmc7KWU9ZS5zaWJsaW5nLCh0PXQuc2libGluZz1ydChlLGUucGVuZGluZ1Byb3BzKSkucmV0dXJuPW47dC5zaWJsaW5nPW51bGx9cmV0dXJuIG4uY2hpbGR9ZnVuY3Rpb24gaVcoZSxuKXtyZXR1cm4gMCE9KGUubGFuZXMmbil8fCEhKG51bGwhPT0oZT1lLmRlcGVuZGVuY2llcykmJnIkKGUpKX1mdW5jdGlvbiBpJChlLG4sdCl7aWYobnVsbCE9PWUpaWYoZS5tZW1vaXplZFByb3BzIT09bi5wZW5kaW5nUHJvcHMpaXg9ITA7ZWxzZXtpZighaVcoZSx0KSYmMD09KDEyOCZuLmZsYWdzKSlyZXR1cm4gaXg9ITEsZnVuY3Rpb24oZSxuLHQpe3N3aXRjaChuLnRhZyl7Y2FzZSAzOnEobixuLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxyRihuLHIwLGUubWVtb2l6ZWRTdGF0ZS5jYWNoZSksck4oKTticmVhaztjYXNlIDI3OmNhc2UgNTokKG4pO2JyZWFrO2Nhc2UgNDpxKG4sbi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7YnJlYWs7Y2FzZSAxMDpyRihuLG4udHlwZSxuLm1lbW9pemVkUHJvcHMudmFsdWUpO2JyZWFrO2Nhc2UgMzE6aWYobnVsbCE9PW4ubWVtb2l6ZWRTdGF0ZSlyZXR1cm4gbi5mbGFnc3w9MTI4LG9GKG4pLG51bGw7YnJlYWs7Y2FzZSAxMzp2YXIgcj1uLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PXIpe2lmKG51bGwhPT1yLmRlaHlkcmF0ZWQpcmV0dXJuIG9IKG4pLG4uZmxhZ3N8PTEyOCxudWxsO2lmKDAhPSh0Jm4uY2hpbGQuY2hpbGRMYW5lcykpcmV0dXJuIGlCKGUsbix0KTtyZXR1cm4gb0gobiksbnVsbCE9PShlPWlxKGUsbix0KSk/ZS5zaWJsaW5nOm51bGx9b0gobik7YnJlYWs7Y2FzZSAxOTp2YXIgbz0wIT0oMTI4JmUuZmxhZ3MpO2lmKChyPTAhPSh0Jm4uY2hpbGRMYW5lcykpfHwoclcoZSxuLHQsITEpLHI9MCE9KHQmbi5jaGlsZExhbmVzKSksbyl7aWYocilyZXR1cm4gaVYoZSxuLHQpO24uZmxhZ3N8PTEyOH1pZihudWxsIT09KG89bi5tZW1vaXplZFN0YXRlKSYmKG8ucmVuZGVyaW5nPW51bGwsby50YWlsPW51bGwsby5sYXN0RWZmZWN0PW51bGwpLEkob1csb1cuY3VycmVudCksIXIpcmV0dXJuIG51bGw7YnJlYWs7Y2FzZSAyMjpyZXR1cm4gbi5sYW5lcz0wLGlPKGUsbix0LG4ucGVuZGluZ1Byb3BzKTtjYXNlIDI0OnJGKG4scjAsZS5tZW1vaXplZFN0YXRlLmNhY2hlKX1yZXR1cm4gaXEoZSxuLHQpfShlLG4sdCk7aXg9MCE9KDEzMTA3MiZlLmZsYWdzKX1lbHNlIGl4PSExLHJTJiYwIT0oMTA0ODU3NiZuLmZsYWdzKSYmcncobixyaCxuLmluZGV4KTtzd2l0Y2gobi5sYW5lcz0wLG4udGFnKXtjYXNlIDE2OmU6e2U9bi5wZW5kaW5nUHJvcHM7dmFyIHI9bi5lbGVtZW50VHlwZSxvPXIuX2luaXQ7aWYocj1vKHIuX3BheWxvYWQpLG4udHlwZT1yLFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpcm4ocik/KGU9aWMocixlKSxuLnRhZz0xLG49aUwobnVsbCxuLHIsZSx0KSk6KG4udGFnPTAsbj1pUChudWxsLG4scixlLHQpKTtlbHNle2lmKG51bGwhPXIpe2lmKChvPXIuJCR0eXBlb2YpPT09dyl7bi50YWc9MTEsbj1paihudWxsLG4scixlLHQpO2JyZWFrIGV9ZWxzZSBpZihvPT09QSl7bi50YWc9MTQsbj1payhudWxsLG4scixlLHQpO2JyZWFrIGV9fXRocm93IEVycm9yKGwoMzA2LG49ZnVuY3Rpb24gZShuKXtpZihudWxsPT1uKXJldHVybiBudWxsO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pcmV0dXJuIG4uJCR0eXBlb2Y9PT1QP251bGw6bi5kaXNwbGF5TmFtZXx8bi5uYW1lfHxudWxsO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuKXJldHVybiBuO3N3aXRjaChuKXtjYXNlIG06cmV0dXJuXCJGcmFnbWVudFwiO2Nhc2UgYjpyZXR1cm5cIlByb2ZpbGVyXCI7Y2FzZSB2OnJldHVyblwiU3RyaWN0TW9kZVwiO2Nhc2UgajpyZXR1cm5cIlN1c3BlbnNlXCI7Y2FzZSBrOnJldHVyblwiU3VzcGVuc2VMaXN0XCI7Y2FzZSBDOnJldHVyblwiQWN0aXZpdHlcIn1pZihcIm9iamVjdFwiPT10eXBlb2Ygbilzd2l0Y2gobi4kJHR5cGVvZil7Y2FzZSBnOnJldHVyblwiUG9ydGFsXCI7Y2FzZSB4OnJldHVybiBuLmRpc3BsYXlOYW1lfHxcIkNvbnRleHRcIjtjYXNlIHk6cmV0dXJuKG4uX2NvbnRleHQuZGlzcGxheU5hbWV8fFwiQ29udGV4dFwiKStcIi5Db25zdW1lclwiO2Nhc2Ugdzp2YXIgdD1uLnJlbmRlcjtyZXR1cm4obj1uLmRpc3BsYXlOYW1lKXx8KG49XCJcIiE9PShuPXQuZGlzcGxheU5hbWV8fHQubmFtZXx8XCJcIik/XCJGb3J3YXJkUmVmKFwiK24rXCIpXCI6XCJGb3J3YXJkUmVmXCIpLG47Y2FzZSBBOnJldHVybiBudWxsIT09KHQ9bi5kaXNwbGF5TmFtZXx8bnVsbCk/dDplKG4udHlwZSl8fFwiTWVtb1wiO2Nhc2UgTzp0PW4uX3BheWxvYWQsbj1uLl9pbml0O3RyeXtyZXR1cm4gZShuKHQpKX1jYXRjaChlKXt9fXJldHVybiBudWxsfShyKXx8cixcIlwiKSl9fXJldHVybiBuO2Nhc2UgMDpyZXR1cm4gaVAoZSxuLG4udHlwZSxuLnBlbmRpbmdQcm9wcyx0KTtjYXNlIDE6cmV0dXJuIG89aWMocj1uLnR5cGUsbi5wZW5kaW5nUHJvcHMpLGlMKGUsbixyLG8sdCk7Y2FzZSAzOmU6e2lmKHEobixuLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxudWxsPT09ZSl0aHJvdyBFcnJvcihsKDM4NykpO3I9bi5wZW5kaW5nUHJvcHM7dmFyIGE9bi5tZW1vaXplZFN0YXRlO289YS5lbGVtZW50LG9rKGUsbiksb1AobixyLG51bGwsdCk7dmFyIGk9bi5tZW1vaXplZFN0YXRlO2lmKHJGKG4scjAscj1pLmNhY2hlKSxyIT09YS5jYWNoZSYmcnEobixbcjBdLHQsITApLG9fKCkscj1pLmVsZW1lbnQsYS5pc0RlaHlkcmF0ZWQpaWYoYT17ZWxlbWVudDpyLGlzRGVoeWRyYXRlZDohMSxjYWNoZTppLmNhY2hlfSxuLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1hLG4ubWVtb2l6ZWRTdGF0ZT1hLDI1NiZuLmZsYWdzKXtuPWlUKGUsbixyLHQpO2JyZWFrIGV9ZWxzZSBpZihyIT09byl7ckIobz1ydShFcnJvcihsKDQyNCkpLG4pKSxuPWlUKGUsbixyLHQpO2JyZWFrIGV9ZWxzZSBmb3IockM9Y18oKGU9OT09PShlPW4uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLm5vZGVUeXBlP2UuYm9keTpcIkhUTUxcIj09PWUubm9kZU5hbWU/ZS5vd25lckRvY3VtZW50LmJvZHk6ZSkuZmlyc3RDaGlsZCksck89bixyUz0hMCxyRT1udWxsLHJfPSEwLHQ9b3gobixudWxsLHIsdCksbi5jaGlsZD10O3Q7KXQuZmxhZ3M9LTMmdC5mbGFnc3w0MDk2LHQ9dC5zaWJsaW5nO2Vsc2V7aWYock4oKSxyPT09byl7bj1pcShlLG4sdCk7YnJlYWsgZX1pdyhlLG4scix0KX1uPW4uY2hpbGR9cmV0dXJuIG47Y2FzZSAyNjpyZXR1cm4gaV8oZSxuKSxudWxsPT09ZT8odD1jRihuLnR5cGUsbnVsbCxuLnBlbmRpbmdQcm9wcyxudWxsKSk/bi5tZW1vaXplZFN0YXRlPXQ6clN8fCh0PW4udHlwZSxlPW4ucGVuZGluZ1Byb3BzLChyPWNmKFUuY3VycmVudCkuY3JlYXRlRWxlbWVudCh0KSlbZU5dPW4scltlRF09ZSxjYyhyLHQsZSksZVkociksbi5zdGF0ZU5vZGU9cik6bi5tZW1vaXplZFN0YXRlPWNGKG4udHlwZSxlLm1lbW9pemVkUHJvcHMsbi5wZW5kaW5nUHJvcHMsZS5tZW1vaXplZFN0YXRlKSxudWxsO2Nhc2UgMjc6cmV0dXJuICQobiksbnVsbD09PWUmJnJTJiYocj1uLnN0YXRlTm9kZT1jVChuLnR5cGUsbi5wZW5kaW5nUHJvcHMsVS5jdXJyZW50KSxyTz1uLHJfPSEwLG89ckMsY2oobi50eXBlKT8oY1A9byxyQz1jXyhyLmZpcnN0Q2hpbGQpKTpyQz1vKSxpdyhlLG4sbi5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sdCksaV8oZSxuKSxudWxsPT09ZSYmKG4uZmxhZ3N8PTQxOTQzMDQpLG4uY2hpbGQ7Y2FzZSA1OnJldHVybiBudWxsPT09ZSYmclMmJigobz1yPXJDKSYmKG51bGwhPT0ocj1mdW5jdGlvbihlLG4sdCxyKXtmb3IoOzE9PT1lLm5vZGVUeXBlOyl7aWYoZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09bi50b0xvd2VyQ2FzZSgpKXtpZighciYmKFwiSU5QVVRcIiE9PWUubm9kZU5hbWV8fFwiaGlkZGVuXCIhPT1lLnR5cGUpKWJyZWFrfWVsc2UgaWYocil7aWYoIWVbZVVdKXN3aXRjaChuKXtjYXNlXCJtZXRhXCI6aWYoIWUuaGFzQXR0cmlidXRlKFwiaXRlbXByb3BcIikpYnJlYWs7cmV0dXJuIGU7Y2FzZVwibGlua1wiOmlmKFwic3R5bGVzaGVldFwiPT09KG89ZS5nZXRBdHRyaWJ1dGUoXCJyZWxcIikpJiZlLmhhc0F0dHJpYnV0ZShcImRhdGEtcHJlY2VkZW5jZVwiKXx8byE9PXQucmVsfHxlLmdldEF0dHJpYnV0ZShcImhyZWZcIikhPT0obnVsbD09dC5ocmVmfHxcIlwiPT09dC5ocmVmP251bGw6dC5ocmVmKXx8ZS5nZXRBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiKSE9PShudWxsPT10LmNyb3NzT3JpZ2luP251bGw6dC5jcm9zc09yaWdpbil8fGUuZ2V0QXR0cmlidXRlKFwidGl0bGVcIikhPT0obnVsbD09dC50aXRsZT9udWxsOnQudGl0bGUpKWJyZWFrO3JldHVybiBlO2Nhc2VcInN0eWxlXCI6aWYoZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLXByZWNlZGVuY2VcIikpYnJlYWs7cmV0dXJuIGU7Y2FzZVwic2NyaXB0XCI6aWYoKChvPWUuZ2V0QXR0cmlidXRlKFwic3JjXCIpKSE9PShudWxsPT10LnNyYz9udWxsOnQuc3JjKXx8ZS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpIT09KG51bGw9PXQudHlwZT9udWxsOnQudHlwZSl8fGUuZ2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIikhPT0obnVsbD09dC5jcm9zc09yaWdpbj9udWxsOnQuY3Jvc3NPcmlnaW4pKSYmbyYmZS5oYXNBdHRyaWJ1dGUoXCJhc3luY1wiKSYmIWUuaGFzQXR0cmlidXRlKFwiaXRlbXByb3BcIikpYnJlYWs7cmV0dXJuIGU7ZGVmYXVsdDpyZXR1cm4gZX19ZWxzZXtpZihcImlucHV0XCIhPT1ufHxcImhpZGRlblwiIT09ZS50eXBlKXJldHVybiBlO3ZhciBvPW51bGw9PXQubmFtZT9udWxsOlwiXCIrdC5uYW1lO2lmKFwiaGlkZGVuXCI9PT10LnR5cGUmJmUuZ2V0QXR0cmlidXRlKFwibmFtZVwiKT09PW8pcmV0dXJuIGV9aWYobnVsbD09PShlPWNfKGUubmV4dFNpYmxpbmcpKSlicmVha31yZXR1cm4gbnVsbH0ocixuLnR5cGUsbi5wZW5kaW5nUHJvcHMscl8pKT8obi5zdGF0ZU5vZGU9cixyTz1uLHJDPWNfKHIuZmlyc3RDaGlsZCkscl89ITEsbz0hMCk6bz0hMSksb3x8cnoobikpLCQobiksbz1uLnR5cGUsYT1uLnBlbmRpbmdQcm9wcyxpPW51bGwhPT1lP2UubWVtb2l6ZWRQcm9wczpudWxsLHI9YS5jaGlsZHJlbixjZyhvLGEpP3I9bnVsbDpudWxsIT09aSYmY2cobyxpKSYmKG4uZmxhZ3N8PTMyKSxudWxsIT09bi5tZW1vaXplZFN0YXRlJiYoYzYuX2N1cnJlbnRWYWx1ZT1vPW82KGUsbixvNyxudWxsLG51bGwsdCkpLGlfKGUsbiksaXcoZSxuLHIsdCksbi5jaGlsZDtjYXNlIDY6cmV0dXJuIG51bGw9PT1lJiZyUyYmKChlPXQ9ckMpJiYobnVsbCE9PSh0PWZ1bmN0aW9uKGUsbix0KXtpZihcIlwiPT09bilyZXR1cm4gbnVsbDtmb3IoOzMhPT1lLm5vZGVUeXBlOylpZigoMSE9PWUubm9kZVR5cGV8fFwiSU5QVVRcIiE9PWUubm9kZU5hbWV8fFwiaGlkZGVuXCIhPT1lLnR5cGUpJiYhdHx8bnVsbD09PShlPWNfKGUubmV4dFNpYmxpbmcpKSlyZXR1cm4gbnVsbDtyZXR1cm4gZX0odCxuLnBlbmRpbmdQcm9wcyxyXykpPyhuLnN0YXRlTm9kZT10LHJPPW4sckM9bnVsbCxlPSEwKTplPSExKSxlfHxyeihuKSksbnVsbDtjYXNlIDEzOnJldHVybiBpQihlLG4sdCk7Y2FzZSA0OnJldHVybiBxKG4sbi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbykscj1uLnBlbmRpbmdQcm9wcyxudWxsPT09ZT9uLmNoaWxkPW95KG4sbnVsbCxyLHQpOml3KGUsbixyLHQpLG4uY2hpbGQ7Y2FzZSAxMTpyZXR1cm4gaWooZSxuLG4udHlwZSxuLnBlbmRpbmdQcm9wcyx0KTtjYXNlIDc6cmV0dXJuIGl3KGUsbixuLnBlbmRpbmdQcm9wcyx0KSxuLmNoaWxkO2Nhc2UgODpjYXNlIDEyOnJldHVybiBpdyhlLG4sbi5wZW5kaW5nUHJvcHMuY2hpbGRyZW4sdCksbi5jaGlsZDtjYXNlIDEwOnJldHVybiByPW4ucGVuZGluZ1Byb3BzLHJGKG4sbi50eXBlLHIudmFsdWUpLGl3KGUsbixyLmNoaWxkcmVuLHQpLG4uY2hpbGQ7Y2FzZSA5OnJldHVybiBvPW4udHlwZS5fY29udGV4dCxyPW4ucGVuZGluZ1Byb3BzLmNoaWxkcmVuLHJaKG4pLHI9cihvPXJZKG8pKSxuLmZsYWdzfD0xLGl3KGUsbixyLHQpLG4uY2hpbGQ7Y2FzZSAxNDpyZXR1cm4gaWsoZSxuLG4udHlwZSxuLnBlbmRpbmdQcm9wcyx0KTtjYXNlIDE1OnJldHVybiBpQShlLG4sbi50eXBlLG4ucGVuZGluZ1Byb3BzLHQpO2Nhc2UgMTk6cmV0dXJuIGlWKGUsbix0KTtjYXNlIDMxOmlmKG89bi5wZW5kaW5nUHJvcHMsaT0wIT0oMTI4Jm4uZmxhZ3MpLG4uZmxhZ3MmPS0xMjksbnVsbD09PWUpaWYoclMpe2lmKFwiaGlkZGVuXCI9PT1vLm1vZGUpaVMobixvKTtlbHNlIGlmKG9GKG4pLCh0PXJDKT9udWxsIT09KHQ9bnVsbCE9PSh0PWNDKHQscl8pKSYmXCImXCI9PT10LmRhdGE/dDpudWxsKSYmKG4ubWVtb2l6ZWRTdGF0ZT17ZGVoeWRyYXRlZDp0LHRyZWVDb250ZXh0Om51bGwhPT1ydj97aWQ6cmIsb3ZlcmZsb3c6cnl9Om51bGwscmV0cnlMYW5lOjB4MjAwMDAwMDAsaHlkcmF0aW9uRXJyb3JzOm51bGx9LChlPXJsKHQpKS5yZXR1cm49bixuLmNoaWxkPWUsck89bixyQz1udWxsKTp0PW51bGwsbnVsbD09PXQpdGhyb3cgcnoobik7bi5sYW5lcz0weDIwMDAwMDAwLG49bnVsbH1lbHNlIG49aVMobixvKTtlbHNlIGlmKG51bGwhPT0ocj1lLm1lbW9pemVkU3RhdGUpKWlmKGE9ci5kZWh5ZHJhdGVkLG9GKG4pLGkpaWYoMjU2Jm4uZmxhZ3Mpbi5mbGFncyY9LTI1NyxuPWlFKGUsbix0KTtlbHNlIGlmKG51bGwhPT1uLm1lbW9pemVkU3RhdGUpbi5jaGlsZD1lLmNoaWxkLG4uZmxhZ3N8PTEyOCxuPW51bGw7ZWxzZSB0aHJvdyBFcnJvcihsKDU1OCkpO2Vsc2UgaWYoaXh8fHJXKGUsbix0LCExKSxpPTAhPSh0JmUuY2hpbGRMYW5lcyksaXh8fGkpe2lmKG51bGwhPT0obz1sTikmJjAhPT0oYT1lXyhvLHQpKSYmYSE9PXIucmV0cnlMYW5lKXRocm93IHIucmV0cnlMYW5lPWEsdDMoZSxhKSxzbyhvLGUsYSksaXk7c2coKSxuPWlFKGUsbix0KX1lbHNlIHQ9ci50cmVlQ29udGV4dCxyQz1jXyhhLm5leHRTaWJsaW5nKSxyTz1uLHJTPSEwLHJFPW51bGwscl89ITEsbnVsbCE9PXQmJnJBKG4sdCksbj1pUyhuLG8pLG4uZmxhZ3N8PTQwOTY7ZWxzZSh0PXJ0KGUuY2hpbGQse21vZGU6by5tb2RlLGNoaWxkcmVuOm8uY2hpbGRyZW59KSkucmVmPW4ucmVmLG4uY2hpbGQ9dCx0LnJldHVybj1uLG49dDtyZXR1cm4gbjtjYXNlIDIyOnJldHVybiBpTyhlLG4sdCxuLnBlbmRpbmdQcm9wcyk7Y2FzZSAyNDpyZXR1cm4gcloobikscj1yWShyMCksbnVsbD09PWU/KG51bGw9PT0obz1vZSgpKSYmKG89bE4sYT1yMSgpLG8ucG9vbGVkQ2FjaGU9YSxhLnJlZkNvdW50KyssbnVsbCE9PWEmJihvLnBvb2xlZENhY2hlTGFuZXN8PXQpLG89YSksbi5tZW1vaXplZFN0YXRlPXtwYXJlbnQ6cixjYWNoZTpvfSxvaihuKSxyRihuLHIwLG8pKTooMCE9KGUubGFuZXMmdCkmJihvayhlLG4pLG9QKG4sbnVsbCxudWxsLHQpLG9fKCkpLG89ZS5tZW1vaXplZFN0YXRlLGE9bi5tZW1vaXplZFN0YXRlLG8ucGFyZW50IT09cj8obz17cGFyZW50OnIsY2FjaGU6cn0sbi5tZW1vaXplZFN0YXRlPW8sMD09PW4ubGFuZXMmJihuLm1lbW9pemVkU3RhdGU9bi51cGRhdGVRdWV1ZS5iYXNlU3RhdGU9byksckYobixyMCxyKSk6KHJGKG4scjAscj1hLmNhY2hlKSxyIT09by5jYWNoZSYmcnEobixbcjBdLHQsITApKSksaXcoZSxuLG4ucGVuZGluZ1Byb3BzLmNoaWxkcmVuLHQpLG4uY2hpbGQ7Y2FzZSAyOTp0aHJvdyBuLnBlbmRpbmdQcm9wc310aHJvdyBFcnJvcihsKDE1NixuLnRhZykpfWZ1bmN0aW9uIGlaKGUpe2UuZmxhZ3N8PTR9ZnVuY3Rpb24gaVkoZSxuLHQscixvKXtpZigobj0wIT0oMzImZS5tb2RlKSkmJihuPSExKSxuKXtpZihlLmZsYWdzfD0weDEwMDAwMDAsKDB4MTNmZmZmNDAmbyk9PT1vKWlmKGUuc3RhdGVOb2RlLmNvbXBsZXRlKWUuZmxhZ3N8PTgxOTI7ZWxzZSBpZihzZigpKWUuZmxhZ3N8PTgxOTI7ZWxzZSB0aHJvdyBvYz1vaSxvb31lbHNlIGUuZmxhZ3MmPS0weDEwMDAwMDF9ZnVuY3Rpb24gaVgoZSxuKXtpZihcInN0eWxlc2hlZXRcIiE9PW4udHlwZXx8MCE9KDQmbi5zdGF0ZS5sb2FkaW5nKSllLmZsYWdzJj0tMHgxMDAwMDAxO2Vsc2UgaWYoZS5mbGFnc3w9MHgxMDAwMDAwLCFjMChuKSlpZihzZigpKWUuZmxhZ3N8PTgxOTI7ZWxzZSB0aHJvdyBvYz1vaSxvb31mdW5jdGlvbiBpSyhlLG4pe251bGwhPT1uJiYoZS5mbGFnc3w9NCksMTYzODQmZS5mbGFncyYmKG49MjIhPT1lLnRhZz9lQSgpOjB4MjAwMDAwMDAsZS5sYW5lc3w9bixsWHw9bil9ZnVuY3Rpb24gaVEoZSxuKXtpZighclMpc3dpdGNoKGUudGFpbE1vZGUpe2Nhc2VcImhpZGRlblwiOm49ZS50YWlsO2Zvcih2YXIgdD1udWxsO251bGwhPT1uOyludWxsIT09bi5hbHRlcm5hdGUmJih0PW4pLG49bi5zaWJsaW5nO251bGw9PT10P2UudGFpbD1udWxsOnQuc2libGluZz1udWxsO2JyZWFrO2Nhc2VcImNvbGxhcHNlZFwiOnQ9ZS50YWlsO2Zvcih2YXIgcj1udWxsO251bGwhPT10OyludWxsIT09dC5hbHRlcm5hdGUmJihyPXQpLHQ9dC5zaWJsaW5nO251bGw9PT1yP258fG51bGw9PT1lLnRhaWw/ZS50YWlsPW51bGw6ZS50YWlsLnNpYmxpbmc9bnVsbDpyLnNpYmxpbmc9bnVsbH19ZnVuY3Rpb24gaUcoZSl7dmFyIG49bnVsbCE9PWUuYWx0ZXJuYXRlJiZlLmFsdGVybmF0ZS5jaGlsZD09PWUuY2hpbGQsdD0wLHI9MDtpZihuKWZvcih2YXIgbz1lLmNoaWxkO251bGwhPT1vOyl0fD1vLmxhbmVzfG8uY2hpbGRMYW5lcyxyfD0weDNlMDAwMDAmby5zdWJ0cmVlRmxhZ3Mscnw9MHgzZTAwMDAwJm8uZmxhZ3Msby5yZXR1cm49ZSxvPW8uc2libGluZztlbHNlIGZvcihvPWUuY2hpbGQ7bnVsbCE9PW87KXR8PW8ubGFuZXN8by5jaGlsZExhbmVzLHJ8PW8uc3VidHJlZUZsYWdzLHJ8PW8uZmxhZ3Msby5yZXR1cm49ZSxvPW8uc2libGluZztyZXR1cm4gZS5zdWJ0cmVlRmxhZ3N8PXIsZS5jaGlsZExhbmVzPXQsbn1mdW5jdGlvbiBpSihlLG4pe3N3aXRjaChyayhuKSxuLnRhZyl7Y2FzZSAzOnJVKHIwKSxXKCk7YnJlYWs7Y2FzZSAyNjpjYXNlIDI3OmNhc2UgNTpaKG4pO2JyZWFrO2Nhc2UgNDpXKCk7YnJlYWs7Y2FzZSAzMTpudWxsIT09bi5tZW1vaXplZFN0YXRlJiZvcShuKTticmVhaztjYXNlIDEzOm9xKG4pO2JyZWFrO2Nhc2UgMTk6TShvVyk7YnJlYWs7Y2FzZSAxMDpyVShuLnR5cGUpO2JyZWFrO2Nhc2UgMjI6Y2FzZSAyMzpvcShuKSxvQigpLG51bGwhPT1lJiZNKHI3KTticmVhaztjYXNlIDI0OnJVKHIwKX19ZnVuY3Rpb24gaTAoZSxuKXt0cnl7dmFyIHQ9bi51cGRhdGVRdWV1ZSxyPW51bGwhPT10P3QubGFzdEVmZmVjdDpudWxsO2lmKG51bGwhPT1yKXt2YXIgbz1yLm5leHQ7dD1vO2Rve2lmKCh0LnRhZyZlKT09PWUpe3I9dm9pZCAwO3ZhciBhPXQuY3JlYXRlO3QuaW5zdC5kZXN0cm95PXI9YSgpfXQ9dC5uZXh0fXdoaWxlKHQhPT1vKX19Y2F0Y2goZSl7c1AobixuLnJldHVybixlKX19ZnVuY3Rpb24gaTEoZSxuLHQpe3RyeXt2YXIgcj1uLnVwZGF0ZVF1ZXVlLG89bnVsbCE9PXI/ci5sYXN0RWZmZWN0Om51bGw7aWYobnVsbCE9PW8pe3ZhciBhPW8ubmV4dDtyPWE7ZG97aWYoKHIudGFnJmUpPT09ZSl7dmFyIGk9ci5pbnN0LGw9aS5kZXN0cm95O2lmKHZvaWQgMCE9PWwpe2kuZGVzdHJveT12b2lkIDAsbz1uO3RyeXtsKCl9Y2F0Y2goZSl7c1Aobyx0LGUpfX19cj1yLm5leHR9d2hpbGUociE9PWEpfX1jYXRjaChlKXtzUChuLG4ucmV0dXJuLGUpfX1mdW5jdGlvbiBpMihlKXt2YXIgbj1lLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1uKXt2YXIgdD1lLnN0YXRlTm9kZTt0cnl7b0wobix0KX1jYXRjaChuKXtzUChlLGUucmV0dXJuLG4pfX19ZnVuY3Rpb24gaTQoZSxuLHQpe3QucHJvcHM9aWMoZS50eXBlLGUubWVtb2l6ZWRQcm9wcyksdC5zdGF0ZT1lLm1lbW9pemVkU3RhdGU7dHJ5e3QuY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaCh0KXtzUChlLG4sdCl9fWZ1bmN0aW9uIGk1KGUsbil7dHJ5e3ZhciB0PWUucmVmO2lmKG51bGwhPT10KXtzd2l0Y2goZS50YWcpe2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6dmFyIHI9ZS5zdGF0ZU5vZGU7YnJlYWs7ZGVmYXVsdDpyPWUuc3RhdGVOb2RlfVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/ZS5yZWZDbGVhbnVwPXQocik6dC5jdXJyZW50PXJ9fWNhdGNoKHQpe3NQKGUsbix0KX19ZnVuY3Rpb24gaTMoZSxuKXt2YXIgdD1lLnJlZixyPWUucmVmQ2xlYW51cDtpZihudWxsIT09dClpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiByKXRyeXtyKCl9Y2F0Y2godCl7c1AoZSxuLHQpfWZpbmFsbHl7ZS5yZWZDbGVhbnVwPW51bGwsbnVsbCE9KGU9ZS5hbHRlcm5hdGUpJiYoZS5yZWZDbGVhbnVwPW51bGwpfWVsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdCl0cnl7dChudWxsKX1jYXRjaCh0KXtzUChlLG4sdCl9ZWxzZSB0LmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiBpNihlKXt2YXIgbj1lLnR5cGUsdD1lLm1lbW9pemVkUHJvcHMscj1lLnN0YXRlTm9kZTt0cnl7c3dpdGNoKG4pe2Nhc2VcImJ1dHRvblwiOmNhc2VcImlucHV0XCI6Y2FzZVwic2VsZWN0XCI6Y2FzZVwidGV4dGFyZWFcIjp0LmF1dG9Gb2N1cyYmci5mb2N1cygpO2JyZWFrO2Nhc2VcImltZ1wiOnQuc3JjP3Iuc3JjPXQuc3JjOnQuc3JjU2V0JiYoci5zcmNzZXQ9dC5zcmNTZXQpfX1jYXRjaChuKXtzUChlLGUucmV0dXJuLG4pfX1mdW5jdGlvbiBpOShlLG4sdCl7dHJ5e3ZhciByPWUuc3RhdGVOb2RlOyhmdW5jdGlvbihlLG4sdCxyKXtzd2l0Y2gobil7Y2FzZVwiZGl2XCI6Y2FzZVwic3BhblwiOmNhc2VcInN2Z1wiOmNhc2VcInBhdGhcIjpjYXNlXCJhXCI6Y2FzZVwiZ1wiOmNhc2VcInBcIjpjYXNlXCJsaVwiOmJyZWFrO2Nhc2VcImlucHV0XCI6dmFyIG89bnVsbCxhPW51bGwsaT1udWxsLHM9bnVsbCxjPW51bGwsdT1udWxsLGQ9bnVsbDtmb3IoaCBpbiB0KXt2YXIgZj10W2hdO2lmKHQuaGFzT3duUHJvcGVydHkoaCkmJm51bGwhPWYpc3dpdGNoKGgpe2Nhc2VcImNoZWNrZWRcIjpjYXNlXCJ2YWx1ZVwiOmJyZWFrO2Nhc2VcImRlZmF1bHRWYWx1ZVwiOmM9ZjtkZWZhdWx0OnIuaGFzT3duUHJvcGVydHkoaCl8fGNsKGUsbixoLG51bGwscixmKX19Zm9yKHZhciBwIGluIHIpe3ZhciBoPXJbcF07aWYoZj10W3BdLHIuaGFzT3duUHJvcGVydHkocCkmJihudWxsIT1ofHxudWxsIT1mKSlzd2l0Y2gocCl7Y2FzZVwidHlwZVwiOmE9aDticmVhaztjYXNlXCJuYW1lXCI6bz1oO2JyZWFrO2Nhc2VcImNoZWNrZWRcIjp1PWg7YnJlYWs7Y2FzZVwiZGVmYXVsdENoZWNrZWRcIjpkPWg7YnJlYWs7Y2FzZVwidmFsdWVcIjppPWg7YnJlYWs7Y2FzZVwiZGVmYXVsdFZhbHVlXCI6cz1oO2JyZWFrO2Nhc2VcImNoaWxkcmVuXCI6Y2FzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjppZihudWxsIT1oKXRocm93IEVycm9yKGwoMTM3LG4pKTticmVhaztkZWZhdWx0OmghPT1mJiZjbChlLG4scCxoLHIsZil9fW50KGUsaSxzLGMsdSxkLGEsbyk7cmV0dXJuO2Nhc2VcInNlbGVjdFwiOmZvcihhIGluIGg9aT1zPXA9bnVsbCx0KWlmKGM9dFthXSx0Lmhhc093blByb3BlcnR5KGEpJiZudWxsIT1jKXN3aXRjaChhKXtjYXNlXCJ2YWx1ZVwiOmJyZWFrO2Nhc2VcIm11bHRpcGxlXCI6aD1jO2RlZmF1bHQ6ci5oYXNPd25Qcm9wZXJ0eShhKXx8Y2woZSxuLGEsbnVsbCxyLGMpfWZvcihvIGluIHIpaWYoYT1yW29dLGM9dFtvXSxyLmhhc093blByb3BlcnR5KG8pJiYobnVsbCE9YXx8bnVsbCE9Yykpc3dpdGNoKG8pe2Nhc2VcInZhbHVlXCI6cD1hO2JyZWFrO2Nhc2VcImRlZmF1bHRWYWx1ZVwiOnM9YTticmVhaztjYXNlXCJtdWx0aXBsZVwiOmk9YTtkZWZhdWx0OmEhPT1jJiZjbChlLG4sbyxhLHIsYyl9bj1zLHQ9aSxyPWgsbnVsbCE9cD9uYShlLCEhdCxwLCExKTohIXIhPSEhdCYmKG51bGwhPW4/bmEoZSwhIXQsbiwhMCk6bmEoZSwhIXQsdD9bXTpcIlwiLCExKSk7cmV0dXJuO2Nhc2VcInRleHRhcmVhXCI6Zm9yKHMgaW4gaD1wPW51bGwsdClpZihvPXRbc10sdC5oYXNPd25Qcm9wZXJ0eShzKSYmbnVsbCE9byYmIXIuaGFzT3duUHJvcGVydHkocykpc3dpdGNoKHMpe2Nhc2VcInZhbHVlXCI6Y2FzZVwiY2hpbGRyZW5cIjpicmVhaztkZWZhdWx0OmNsKGUsbixzLG51bGwscixvKX1mb3IoaSBpbiByKWlmKG89cltpXSxhPXRbaV0sci5oYXNPd25Qcm9wZXJ0eShpKSYmKG51bGwhPW98fG51bGwhPWEpKXN3aXRjaChpKXtjYXNlXCJ2YWx1ZVwiOnA9bzticmVhaztjYXNlXCJkZWZhdWx0VmFsdWVcIjpoPW87YnJlYWs7Y2FzZVwiY2hpbGRyZW5cIjpicmVhaztjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOmlmKG51bGwhPW8pdGhyb3cgRXJyb3IobCg5MSkpO2JyZWFrO2RlZmF1bHQ6byE9PWEmJmNsKGUsbixpLG8scixhKX1uaShlLHAsaCk7cmV0dXJuO2Nhc2VcIm9wdGlvblwiOmZvcih2YXIgZyBpbiB0KXA9dFtnXSx0Lmhhc093blByb3BlcnR5KGcpJiZudWxsIT1wJiYhci5oYXNPd25Qcm9wZXJ0eShnKSYmKFwic2VsZWN0ZWRcIj09PWc/ZS5zZWxlY3RlZD0hMTpjbChlLG4sZyxudWxsLHIscCkpO2ZvcihjIGluIHIpcD1yW2NdLGg9dFtjXSxyLmhhc093blByb3BlcnR5KGMpJiZwIT09aCYmKG51bGwhPXB8fG51bGwhPWgpJiYoXCJzZWxlY3RlZFwiPT09Yz9lLnNlbGVjdGVkPXAmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHAmJlwic3ltYm9sXCIhPXR5cGVvZiBwOmNsKGUsbixjLHAscixoKSk7cmV0dXJuO2Nhc2VcImltZ1wiOmNhc2VcImxpbmtcIjpjYXNlXCJhcmVhXCI6Y2FzZVwiYmFzZVwiOmNhc2VcImJyXCI6Y2FzZVwiY29sXCI6Y2FzZVwiZW1iZWRcIjpjYXNlXCJoclwiOmNhc2VcImtleWdlblwiOmNhc2VcIm1ldGFcIjpjYXNlXCJwYXJhbVwiOmNhc2VcInNvdXJjZVwiOmNhc2VcInRyYWNrXCI6Y2FzZVwid2JyXCI6Y2FzZVwibWVudWl0ZW1cIjpmb3IodmFyIG0gaW4gdClwPXRbbV0sdC5oYXNPd25Qcm9wZXJ0eShtKSYmbnVsbCE9cCYmIXIuaGFzT3duUHJvcGVydHkobSkmJmNsKGUsbixtLG51bGwscixwKTtmb3IodSBpbiByKWlmKHA9clt1XSxoPXRbdV0sci5oYXNPd25Qcm9wZXJ0eSh1KSYmcCE9PWgmJihudWxsIT1wfHxudWxsIT1oKSlzd2l0Y2godSl7Y2FzZVwiY2hpbGRyZW5cIjpjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOmlmKG51bGwhPXApdGhyb3cgRXJyb3IobCgxMzcsbikpO2JyZWFrO2RlZmF1bHQ6Y2woZSxuLHUscCxyLGgpfXJldHVybjtkZWZhdWx0OmlmKG5mKG4pKXtmb3IodmFyIHYgaW4gdClwPXRbdl0sdC5oYXNPd25Qcm9wZXJ0eSh2KSYmdm9pZCAwIT09cCYmIXIuaGFzT3duUHJvcGVydHkodikmJmNzKGUsbix2LHZvaWQgMCxyLHApO2ZvcihkIGluIHIpcD1yW2RdLGg9dFtkXSxyLmhhc093blByb3BlcnR5KGQpJiZwIT09aCYmKHZvaWQgMCE9PXB8fHZvaWQgMCE9PWgpJiZjcyhlLG4sZCxwLHIsaCk7cmV0dXJufX1mb3IodmFyIGIgaW4gdClwPXRbYl0sdC5oYXNPd25Qcm9wZXJ0eShiKSYmbnVsbCE9cCYmIXIuaGFzT3duUHJvcGVydHkoYikmJmNsKGUsbixiLG51bGwscixwKTtmb3IoZiBpbiByKXA9cltmXSxoPXRbZl0sci5oYXNPd25Qcm9wZXJ0eShmKSYmcCE9PWgmJihudWxsIT1wfHxudWxsIT1oKSYmY2woZSxuLGYscCxyLGgpfSkocixlLnR5cGUsdCxuKSxyW2VEXT1ufWNhdGNoKG4pe3NQKGUsZS5yZXR1cm4sbil9fWZ1bmN0aW9uIGk4KGUpe3JldHVybiA1PT09ZS50YWd8fDM9PT1lLnRhZ3x8MjY9PT1lLnRhZ3x8Mjc9PT1lLnRhZyYmY2ooZS50eXBlKXx8ND09PWUudGFnfWZ1bmN0aW9uIGk3KGUpe2U6Zm9yKDs7KXtmb3IoO251bGw9PT1lLnNpYmxpbmc7KXtpZihudWxsPT09ZS5yZXR1cm58fGk4KGUucmV0dXJuKSlyZXR1cm4gbnVsbDtlPWUucmV0dXJufWZvcihlLnNpYmxpbmcucmV0dXJuPWUucmV0dXJuLGU9ZS5zaWJsaW5nOzUhPT1lLnRhZyYmNiE9PWUudGFnJiYxOCE9PWUudGFnOyl7aWYoMjc9PT1lLnRhZyYmY2ooZS50eXBlKXx8MiZlLmZsYWdzfHxudWxsPT09ZS5jaGlsZHx8ND09PWUudGFnKWNvbnRpbnVlIGU7ZS5jaGlsZC5yZXR1cm49ZSxlPWUuY2hpbGR9aWYoISgyJmUuZmxhZ3MpKXJldHVybiBlLnN0YXRlTm9kZX19ZnVuY3Rpb24gbGUoZSxuLHQpe3ZhciByPWUudGFnO2lmKDU9PT1yfHw2PT09cillPWUuc3RhdGVOb2RlLG4/dC5pbnNlcnRCZWZvcmUoZSxuKTp0LmFwcGVuZENoaWxkKGUpO2Vsc2UgaWYoNCE9PXImJigyNz09PXImJmNqKGUudHlwZSkmJih0PWUuc3RhdGVOb2RlKSxudWxsIT09KGU9ZS5jaGlsZCkpKWZvcihsZShlLG4sdCksZT1lLnNpYmxpbmc7bnVsbCE9PWU7KWxlKGUsbix0KSxlPWUuc2libGluZ31mdW5jdGlvbiBsbihlKXt2YXIgbj1lLnN0YXRlTm9kZSx0PWUubWVtb2l6ZWRQcm9wczt0cnl7Zm9yKHZhciByPWUudHlwZSxvPW4uYXR0cmlidXRlcztvLmxlbmd0aDspbi5yZW1vdmVBdHRyaWJ1dGVOb2RlKG9bMF0pO2NjKG4scix0KSxuW2VOXT1lLG5bZURdPXR9Y2F0Y2gobil7c1AoZSxlLnJldHVybixuKX19dmFyIGx0PSExLGxyPSExLGxvPSExLGxhPVwiZnVuY3Rpb25cIj09dHlwZW9mIFdlYWtTZXQ/V2Vha1NldDpTZXQsbGk9bnVsbDtmdW5jdGlvbiBsbChlLG4sdCl7dmFyIHI9dC5mbGFncztzd2l0Y2godC50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6bHkoZSx0KSw0JnImJmkwKDUsdCk7YnJlYWs7Y2FzZSAxOmlmKGx5KGUsdCksNCZyKWlmKGU9dC5zdGF0ZU5vZGUsbnVsbD09PW4pdHJ5e2UuY29tcG9uZW50RGlkTW91bnQoKX1jYXRjaChlKXtzUCh0LHQucmV0dXJuLGUpfWVsc2V7dmFyIG89aWModC50eXBlLG4ubWVtb2l6ZWRQcm9wcyk7bj1uLm1lbW9pemVkU3RhdGU7dHJ5e2UuY29tcG9uZW50RGlkVXBkYXRlKG8sbixlLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKX1jYXRjaChlKXtzUCh0LHQucmV0dXJuLGUpfX02NCZyJiZpMih0KSw1MTImciYmaTUodCx0LnJldHVybik7YnJlYWs7Y2FzZSAzOmlmKGx5KGUsdCksNjQmciYmbnVsbCE9PShlPXQudXBkYXRlUXVldWUpKXtpZihuPW51bGwsbnVsbCE9PXQuY2hpbGQpc3dpdGNoKHQuY2hpbGQudGFnKXtjYXNlIDI3OmNhc2UgNTpjYXNlIDE6bj10LmNoaWxkLnN0YXRlTm9kZX10cnl7b0woZSxuKX1jYXRjaChlKXtzUCh0LHQucmV0dXJuLGUpfX1icmVhaztjYXNlIDI3Om51bGw9PT1uJiY0JnImJmxuKHQpO2Nhc2UgMjY6Y2FzZSA1Omx5KGUsdCksbnVsbD09PW4mJjQmciYmaTYodCksNTEyJnImJmk1KHQsdC5yZXR1cm4pO2JyZWFrO2Nhc2UgMTI6ZGVmYXVsdDpseShlLHQpO2JyZWFrO2Nhc2UgMzE6bHkoZSx0KSw0JnImJmxmKGUsdCk7YnJlYWs7Y2FzZSAxMzpseShlLHQpLDQmciYmbHAoZSx0KSw2NCZyJiZudWxsIT09KGU9dC5tZW1vaXplZFN0YXRlKSYmbnVsbCE9PShlPWUuZGVoeWRyYXRlZCkmJmZ1bmN0aW9uKGUsbil7dmFyIHQ9ZS5vd25lckRvY3VtZW50O2lmKFwiJH5cIj09PWUuZGF0YSllLl9yZWFjdFJldHJ5PW47ZWxzZSBpZihcIiQ/XCIhPT1lLmRhdGF8fFwibG9hZGluZ1wiIT09dC5yZWFkeVN0YXRlKW4oKTtlbHNle3ZhciByPWZ1bmN0aW9uKCl7bigpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIixyKX07dC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLHIpLGUuX3JlYWN0UmV0cnk9cn19KGUsdD1zUi5iaW5kKG51bGwsdCkpO2JyZWFrO2Nhc2UgMjI6aWYoIShyPW51bGwhPT10Lm1lbW9pemVkU3RhdGV8fGx0KSl7bj1udWxsIT09biYmbnVsbCE9PW4ubWVtb2l6ZWRTdGF0ZXx8bHIsbz1sdDt2YXIgYT1scjtsdD1yLChscj1uKSYmIWE/ZnVuY3Rpb24gZShuLHQscil7Zm9yKHI9ciYmMCE9KDg3NzImdC5zdWJ0cmVlRmxhZ3MpLHQ9dC5jaGlsZDtudWxsIT09dDspe3ZhciBvPXQuYWx0ZXJuYXRlLGE9bixpPXQsbD1pLmZsYWdzO3N3aXRjaChpLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTplKGEsaSxyKSxpMCg0LGkpO2JyZWFrO2Nhc2UgMTppZihlKGEsaSxyKSxcImZ1bmN0aW9uXCI9PXR5cGVvZihhPShvPWkpLnN0YXRlTm9kZSkuY29tcG9uZW50RGlkTW91bnQpdHJ5e2EuY29tcG9uZW50RGlkTW91bnQoKX1jYXRjaChlKXtzUChvLG8ucmV0dXJuLGUpfWlmKG51bGwhPT0oYT0obz1pKS51cGRhdGVRdWV1ZSkpe3ZhciBzPW8uc3RhdGVOb2RlO3RyeXt2YXIgYz1hLnNoYXJlZC5oaWRkZW5DYWxsYmFja3M7aWYobnVsbCE9PWMpZm9yKGEuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcz1udWxsLGE9MDthPGMubGVuZ3RoO2ErKylveihjW2FdLHMpfWNhdGNoKGUpe3NQKG8sby5yZXR1cm4sZSl9fXImJjY0JmwmJmkyKGkpLGk1KGksaS5yZXR1cm4pO2JyZWFrO2Nhc2UgMjc6bG4oaSk7Y2FzZSAyNjpjYXNlIDU6ZShhLGksciksciYmbnVsbD09PW8mJjQmbCYmaTYoaSksaTUoaSxpLnJldHVybik7YnJlYWs7Y2FzZSAxMjpkZWZhdWx0OmUoYSxpLHIpO2JyZWFrO2Nhc2UgMzE6ZShhLGksciksciYmNCZsJiZsZihhLGkpO2JyZWFrO2Nhc2UgMTM6ZShhLGksciksciYmNCZsJiZscChhLGkpO2JyZWFrO2Nhc2UgMjI6bnVsbD09PWkubWVtb2l6ZWRTdGF0ZSYmZShhLGksciksaTUoaSxpLnJldHVybik7Y2FzZSAzMDp9dD10LnNpYmxpbmd9fShlLHQsMCE9KDg3NzImdC5zdWJ0cmVlRmxhZ3MpKTpseShlLHQpLGx0PW8sbHI9YX1jYXNlIDMwOn19dmFyIGxzPW51bGwsbGM9ITE7ZnVuY3Rpb24gbHUoZSxuLHQpe2Zvcih0PXQuY2hpbGQ7bnVsbCE9PXQ7KWxkKGUsbix0KSx0PXQuc2libGluZ31mdW5jdGlvbiBsZChlLG4sdCl7aWYoZXAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGVwLm9uQ29tbWl0RmliZXJVbm1vdW50KXRyeXtlcC5vbkNvbW1pdEZpYmVyVW5tb3VudChlZix0KX1jYXRjaChlKXt9c3dpdGNoKHQudGFnKXtjYXNlIDI2OmxyfHxpMyh0LG4pLGx1KGUsbix0KSx0Lm1lbW9pemVkU3RhdGU/dC5tZW1vaXplZFN0YXRlLmNvdW50LS06dC5zdGF0ZU5vZGUmJih0PXQuc3RhdGVOb2RlKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpO2JyZWFrO2Nhc2UgMjc6bHJ8fGkzKHQsbik7dmFyIHI9bHMsbz1sYztjaih0LnR5cGUpJiYobHM9dC5zdGF0ZU5vZGUsbGM9ITEpLGx1KGUsbix0KSxjUih0LnN0YXRlTm9kZSksbHM9cixsYz1vO2JyZWFrO2Nhc2UgNTpscnx8aTModCxuKTtjYXNlIDY6aWYocj1scyxvPWxjLGxzPW51bGwsbHUoZSxuLHQpLGxzPXIsbGM9byxudWxsIT09bHMpaWYobGMpdHJ5eyg5PT09bHMubm9kZVR5cGU/bHMuYm9keTpcIkhUTUxcIj09PWxzLm5vZGVOYW1lP2xzLm93bmVyRG9jdW1lbnQuYm9keTpscykucmVtb3ZlQ2hpbGQodC5zdGF0ZU5vZGUpfWNhdGNoKGUpe3NQKHQsbixlKX1lbHNlIHRyeXtscy5yZW1vdmVDaGlsZCh0LnN0YXRlTm9kZSl9Y2F0Y2goZSl7c1AodCxuLGUpfWJyZWFrO2Nhc2UgMTg6bnVsbCE9PWxzJiYobGM/KGNrKDk9PT0oZT1scykubm9kZVR5cGU/ZS5ib2R5OlwiSFRNTFwiPT09ZS5ub2RlTmFtZT9lLm93bmVyRG9jdW1lbnQuYm9keTplLHQuc3RhdGVOb2RlKSx1RShlKSk6Y2sobHMsdC5zdGF0ZU5vZGUpKTticmVhaztjYXNlIDQ6cj1scyxvPWxjLGxzPXQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sbGM9ITAsbHUoZSxuLHQpLGxzPXIsbGM9bzticmVhaztjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6bHJ8fGkxKDIsdCxuKSxscnx8aTEoNCx0LG4pLGx1KGUsbix0KTticmVhaztjYXNlIDE6bHJ8fChpMyh0LG4pLFwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC5zdGF0ZU5vZGUpLmNvbXBvbmVudFdpbGxVbm1vdW50JiZpNCh0LG4scikpLGx1KGUsbix0KTticmVhaztjYXNlIDIxOmRlZmF1bHQ6bHUoZSxuLHQpO2JyZWFrO2Nhc2UgMjI6bHI9KHI9bHIpfHxudWxsIT09dC5tZW1vaXplZFN0YXRlLGx1KGUsbix0KSxscj1yfX1mdW5jdGlvbiBsZihlLG4pe2lmKG51bGw9PT1uLm1lbW9pemVkU3RhdGUmJm51bGwhPT0oZT1uLmFsdGVybmF0ZSkmJm51bGwhPT0oZT1lLm1lbW9pemVkU3RhdGUpKXtlPWUuZGVoeWRyYXRlZDt0cnl7dUUoZSl9Y2F0Y2goZSl7c1AobixuLnJldHVybixlKX19fWZ1bmN0aW9uIGxwKGUsbil7aWYobnVsbD09PW4ubWVtb2l6ZWRTdGF0ZSYmbnVsbCE9PShlPW4uYWx0ZXJuYXRlKSYmbnVsbCE9PShlPWUubWVtb2l6ZWRTdGF0ZSkmJm51bGwhPT0oZT1lLmRlaHlkcmF0ZWQpKXRyeXt1RShlKX1jYXRjaChlKXtzUChuLG4ucmV0dXJuLGUpfX1mdW5jdGlvbiBsaChlLG4pe3ZhciB0PWZ1bmN0aW9uKGUpe3N3aXRjaChlLnRhZyl7Y2FzZSAzMTpjYXNlIDEzOmNhc2UgMTk6dmFyIG49ZS5zdGF0ZU5vZGU7cmV0dXJuIG51bGw9PT1uJiYobj1lLnN0YXRlTm9kZT1uZXcgbGEpLG47Y2FzZSAyMjpyZXR1cm4gbnVsbD09PShuPShlPWUuc3RhdGVOb2RlKS5fcmV0cnlDYWNoZSkmJihuPWUuX3JldHJ5Q2FjaGU9bmV3IGxhKSxuO2RlZmF1bHQ6dGhyb3cgRXJyb3IobCg0MzUsZS50YWcpKX19KGUpO24uZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcj1zTi5iaW5kKG51bGwsZSxuKTt0LmhhcyhuKXx8KHQuYWRkKG4pLG4udGhlbihyLHIpKX0pfWZ1bmN0aW9uIGxnKGUsbil7dmFyIHQ9bi5kZWxldGlvbnM7aWYobnVsbCE9PXQpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXRbcl0sYT1lLGk9bixzPWk7ZTpmb3IoO251bGwhPT1zOyl7c3dpdGNoKHMudGFnKXtjYXNlIDI3OmlmKGNqKHMudHlwZSkpe2xzPXMuc3RhdGVOb2RlLGxjPSExO2JyZWFrIGV9YnJlYWs7Y2FzZSA1OmxzPXMuc3RhdGVOb2RlLGxjPSExO2JyZWFrIGU7Y2FzZSAzOmNhc2UgNDpscz1zLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLGxjPSEwO2JyZWFrIGV9cz1zLnJldHVybn1pZihudWxsPT09bHMpdGhyb3cgRXJyb3IobCgxNjApKTtsZChhLGksbyksbHM9bnVsbCxsYz0hMSxudWxsIT09KGE9by5hbHRlcm5hdGUpJiYoYS5yZXR1cm49bnVsbCksby5yZXR1cm49bnVsbH1pZigxMzg3OCZuLnN1YnRyZWVGbGFncylmb3Iobj1uLmNoaWxkO251bGwhPT1uOylsdihuLGUpLG49bi5zaWJsaW5nfXZhciBsbT1udWxsO2Z1bmN0aW9uIGx2KGUsbil7dmFyIHQ9ZS5hbHRlcm5hdGUscj1lLmZsYWdzO3N3aXRjaChlLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmxnKG4sZSksbGIoZSksNCZyJiYoaTEoMyxlLGUucmV0dXJuKSxpMCgzLGUpLGkxKDUsZSxlLnJldHVybikpO2JyZWFrO2Nhc2UgMTpsZyhuLGUpLGxiKGUpLDUxMiZyJiYobHJ8fG51bGw9PT10fHxpMyh0LHQucmV0dXJuKSksNjQmciYmbHQmJm51bGwhPT0oZT1lLnVwZGF0ZVF1ZXVlKSYmbnVsbCE9PShyPWUuY2FsbGJhY2tzKSYmKHQ9ZS5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzLGUuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcz1udWxsPT09dD9yOnQuY29uY2F0KHIpKTticmVhaztjYXNlIDI2OnZhciBvPWxtO2lmKGxnKG4sZSksbGIoZSksNTEyJnImJihscnx8bnVsbD09PXR8fGkzKHQsdC5yZXR1cm4pKSw0JnIpe3ZhciBhPW51bGwhPT10P3QubWVtb2l6ZWRTdGF0ZTpudWxsO2lmKHI9ZS5tZW1vaXplZFN0YXRlLG51bGw9PT10KWlmKG51bGw9PT1yKWlmKG51bGw9PT1lLnN0YXRlTm9kZSl7ZTp7cj1lLnR5cGUsdD1lLm1lbW9pemVkUHJvcHMsbz1vLm93bmVyRG9jdW1lbnR8fG87bjpzd2l0Y2gocil7Y2FzZVwidGl0bGVcIjooIShhPW8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ0aXRsZVwiKVswXSl8fGFbZVVdfHxhW2VOXXx8XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPT09YS5uYW1lc3BhY2VVUkl8fGEuaGFzQXR0cmlidXRlKFwiaXRlbXByb3BcIikpJiYoYT1vLmNyZWF0ZUVsZW1lbnQociksby5oZWFkLmluc2VydEJlZm9yZShhLG8ucXVlcnlTZWxlY3RvcihcImhlYWQgPiB0aXRsZVwiKSkpLGNjKGEscix0KSxhW2VOXT1lLGVZKGEpLHI9YTticmVhayBlO2Nhc2VcImxpbmtcIjp2YXIgaT1jRyhcImxpbmtcIixcImhyZWZcIixvKS5nZXQocisodC5ocmVmfHxcIlwiKSk7aWYoaSl7Zm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKyspaWYoKGE9aVtzXSkuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKT09PShudWxsPT10LmhyZWZ8fFwiXCI9PT10LmhyZWY/bnVsbDp0LmhyZWYpJiZhLmdldEF0dHJpYnV0ZShcInJlbFwiKT09PShudWxsPT10LnJlbD9udWxsOnQucmVsKSYmYS5nZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiKT09PShudWxsPT10LnRpdGxlP251bGw6dC50aXRsZSkmJmEuZ2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIik9PT0obnVsbD09dC5jcm9zc09yaWdpbj9udWxsOnQuY3Jvc3NPcmlnaW4pKXtpLnNwbGljZShzLDEpO2JyZWFrIG59fWNjKGE9by5jcmVhdGVFbGVtZW50KHIpLHIsdCksby5oZWFkLmFwcGVuZENoaWxkKGEpO2JyZWFrO2Nhc2VcIm1ldGFcIjppZihpPWNHKFwibWV0YVwiLFwiY29udGVudFwiLG8pLmdldChyKyh0LmNvbnRlbnR8fFwiXCIpKSl7Zm9yKHM9MDtzPGkubGVuZ3RoO3MrKylpZigoYT1pW3NdKS5nZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIpPT09KG51bGw9PXQuY29udGVudD9udWxsOlwiXCIrdC5jb250ZW50KSYmYS5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpPT09KG51bGw9PXQubmFtZT9udWxsOnQubmFtZSkmJmEuZ2V0QXR0cmlidXRlKFwicHJvcGVydHlcIik9PT0obnVsbD09dC5wcm9wZXJ0eT9udWxsOnQucHJvcGVydHkpJiZhLmdldEF0dHJpYnV0ZShcImh0dHAtZXF1aXZcIik9PT0obnVsbD09dC5odHRwRXF1aXY/bnVsbDp0Lmh0dHBFcXVpdikmJmEuZ2V0QXR0cmlidXRlKFwiY2hhcnNldFwiKT09PShudWxsPT10LmNoYXJTZXQ/bnVsbDp0LmNoYXJTZXQpKXtpLnNwbGljZShzLDEpO2JyZWFrIG59fWNjKGE9by5jcmVhdGVFbGVtZW50KHIpLHIsdCksby5oZWFkLmFwcGVuZENoaWxkKGEpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IobCg0NjgscikpfWFbZU5dPWUsZVkoYSkscj1hfWUuc3RhdGVOb2RlPXJ9ZWxzZSBjSihvLGUudHlwZSxlLnN0YXRlTm9kZSk7ZWxzZSBlLnN0YXRlTm9kZT1jWihvLHIsZS5tZW1vaXplZFByb3BzKTtlbHNlIGEhPT1yPyhudWxsPT09YT9udWxsIT09dC5zdGF0ZU5vZGUmJih0PXQuc3RhdGVOb2RlKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpOmEuY291bnQtLSxudWxsPT09cj9jSihvLGUudHlwZSxlLnN0YXRlTm9kZSk6Y1oobyxyLGUubWVtb2l6ZWRQcm9wcykpOm51bGw9PT1yJiZudWxsIT09ZS5zdGF0ZU5vZGUmJmk5KGUsZS5tZW1vaXplZFByb3BzLHQubWVtb2l6ZWRQcm9wcyl9YnJlYWs7Y2FzZSAyNzpsZyhuLGUpLGxiKGUpLDUxMiZyJiYobHJ8fG51bGw9PT10fHxpMyh0LHQucmV0dXJuKSksbnVsbCE9PXQmJjQmciYmaTkoZSxlLm1lbW9pemVkUHJvcHMsdC5tZW1vaXplZFByb3BzKTticmVhaztjYXNlIDU6aWYobGcobixlKSxsYihlKSw1MTImciYmKGxyfHxudWxsPT09dHx8aTModCx0LnJldHVybikpLDMyJmUuZmxhZ3Mpe289ZS5zdGF0ZU5vZGU7dHJ5e25zKG8sXCJcIil9Y2F0Y2gobil7c1AoZSxlLnJldHVybixuKX19NCZyJiZudWxsIT1lLnN0YXRlTm9kZSYmKG89ZS5tZW1vaXplZFByb3BzLGk5KGUsbyxudWxsIT09dD90Lm1lbW9pemVkUHJvcHM6bykpLDEwMjQmciYmKGxvPSEwKTticmVhaztjYXNlIDY6aWYobGcobixlKSxsYihlKSw0JnIpe2lmKG51bGw9PT1lLnN0YXRlTm9kZSl0aHJvdyBFcnJvcihsKDE2MikpO3I9ZS5tZW1vaXplZFByb3BzLHQ9ZS5zdGF0ZU5vZGU7dHJ5e3Qubm9kZVZhbHVlPXJ9Y2F0Y2gobil7c1AoZSxlLnJldHVybixuKX19YnJlYWs7Y2FzZSAzOmlmKGNRPW51bGwsbz1sbSxsbT1jQihuLmNvbnRhaW5lckluZm8pLGxnKG4sZSksbG09byxsYihlKSw0JnImJm51bGwhPT10JiZ0Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXRyeXt1RShuLmNvbnRhaW5lckluZm8pfWNhdGNoKG4pe3NQKGUsZS5yZXR1cm4sbil9bG8mJihsbz0hMSxmdW5jdGlvbiBlKG4pe2lmKDEwMjQmbi5zdWJ0cmVlRmxhZ3MpZm9yKG49bi5jaGlsZDtudWxsIT09bjspe3ZhciB0PW47ZSh0KSw1PT09dC50YWcmJjEwMjQmdC5mbGFncyYmdC5zdGF0ZU5vZGUucmVzZXQoKSxuPW4uc2libGluZ319KGUpKTticmVhaztjYXNlIDQ6cj1sbSxsbT1jQihlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxsZyhuLGUpLGxiKGUpLGxtPXI7YnJlYWs7Y2FzZSAxMjpkZWZhdWx0OmxnKG4sZSksbGIoZSk7YnJlYWs7Y2FzZSAzMTpjYXNlIDE5OmxnKG4sZSksbGIoZSksNCZyJiZudWxsIT09KHI9ZS51cGRhdGVRdWV1ZSkmJihlLnVwZGF0ZVF1ZXVlPW51bGwsbGgoZSxyKSk7YnJlYWs7Y2FzZSAxMzpsZyhuLGUpLGxiKGUpLDgxOTImZS5jaGlsZC5mbGFncyYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSE9KG51bGwhPT10JiZudWxsIT09dC5tZW1vaXplZFN0YXRlKSYmKGxKPWVyKCkpLDQmciYmbnVsbCE9PShyPWUudXBkYXRlUXVldWUpJiYoZS51cGRhdGVRdWV1ZT1udWxsLGxoKGUscikpO2JyZWFrO2Nhc2UgMjI6bz1udWxsIT09ZS5tZW1vaXplZFN0YXRlO3ZhciBjPW51bGwhPT10JiZudWxsIT09dC5tZW1vaXplZFN0YXRlLHU9bHQsZD1scjtpZihsdD11fHxvLGxyPWR8fGMsbGcobixlKSxscj1kLGx0PXUsbGIoZSksODE5MiZyKWU6Zm9yKChuPWUuc3RhdGVOb2RlKS5fdmlzaWJpbGl0eT1vPy0yJm4uX3Zpc2liaWxpdHk6MXxuLl92aXNpYmlsaXR5LG8mJihudWxsPT09dHx8Y3x8bHR8fGxyfHxmdW5jdGlvbiBlKG4pe2ZvcihuPW4uY2hpbGQ7bnVsbCE9PW47KXt2YXIgdD1uO3N3aXRjaCh0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmkxKDQsdCx0LnJldHVybiksZSh0KTticmVhaztjYXNlIDE6aTModCx0LnJldHVybik7dmFyIHI9dC5zdGF0ZU5vZGU7XCJmdW5jdGlvblwiPT10eXBlb2Ygci5jb21wb25lbnRXaWxsVW5tb3VudCYmaTQodCx0LnJldHVybixyKSxlKHQpO2JyZWFrO2Nhc2UgMjc6Y1IodC5zdGF0ZU5vZGUpO2Nhc2UgMjY6Y2FzZSA1OmkzKHQsdC5yZXR1cm4pLGUodCk7YnJlYWs7Y2FzZSAyMjpudWxsPT09dC5tZW1vaXplZFN0YXRlJiZlKHQpO2JyZWFrO2RlZmF1bHQ6ZSh0KX1uPW4uc2libGluZ319KGUpKSx0PW51bGwsbj1lOzspe2lmKDU9PT1uLnRhZ3x8MjY9PT1uLnRhZyl7aWYobnVsbD09PXQpe2M9dD1uO3RyeXtpZihhPWMuc3RhdGVOb2RlLG8paT1hLnN0eWxlLFwiZnVuY3Rpb25cIj09dHlwZW9mIGkuc2V0UHJvcGVydHk/aS5zZXRQcm9wZXJ0eShcImRpc3BsYXlcIixcIm5vbmVcIixcImltcG9ydGFudFwiKTppLmRpc3BsYXk9XCJub25lXCI7ZWxzZXtzPWMuc3RhdGVOb2RlO3ZhciBmPWMubWVtb2l6ZWRQcm9wcy5zdHlsZSxwPW51bGwhPWYmJmYuaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5XCIpP2YuZGlzcGxheTpudWxsO3Muc3R5bGUuZGlzcGxheT1udWxsPT1wfHxcImJvb2xlYW5cIj09dHlwZW9mIHA/XCJcIjooXCJcIitwKS50cmltKCl9fWNhdGNoKGUpe3NQKGMsYy5yZXR1cm4sZSl9fX1lbHNlIGlmKDY9PT1uLnRhZyl7aWYobnVsbD09PXQpe2M9bjt0cnl7Yy5zdGF0ZU5vZGUubm9kZVZhbHVlPW8/XCJcIjpjLm1lbW9pemVkUHJvcHN9Y2F0Y2goZSl7c1AoYyxjLnJldHVybixlKX19fWVsc2UgaWYoMTg9PT1uLnRhZyl7aWYobnVsbD09PXQpe2M9bjt0cnl7dmFyIGg9Yy5zdGF0ZU5vZGU7bz9jQShoLCEwKTpjQShjLnN0YXRlTm9kZSwhMSl9Y2F0Y2goZSl7c1AoYyxjLnJldHVybixlKX19fWVsc2UgaWYoKDIyIT09bi50YWcmJjIzIT09bi50YWd8fG51bGw9PT1uLm1lbW9pemVkU3RhdGV8fG49PT1lKSYmbnVsbCE9PW4uY2hpbGQpe24uY2hpbGQucmV0dXJuPW4sbj1uLmNoaWxkO2NvbnRpbnVlfWlmKG49PT1lKWJyZWFrO2Zvcig7bnVsbD09PW4uc2libGluZzspe2lmKG51bGw9PT1uLnJldHVybnx8bi5yZXR1cm49PT1lKWJyZWFrIGU7dD09PW4mJih0PW51bGwpLG49bi5yZXR1cm59dD09PW4mJih0PW51bGwpLG4uc2libGluZy5yZXR1cm49bi5yZXR1cm4sbj1uLnNpYmxpbmd9NCZyJiZudWxsIT09KHI9ZS51cGRhdGVRdWV1ZSkmJm51bGwhPT0odD1yLnJldHJ5UXVldWUpJiYoci5yZXRyeVF1ZXVlPW51bGwsbGgoZSx0KSk7Y2FzZSAzMDpjYXNlIDIxOn19ZnVuY3Rpb24gbGIoZSl7dmFyIG49ZS5mbGFncztpZigyJm4pe3RyeXtmb3IodmFyIHQscj1lLnJldHVybjtudWxsIT09cjspe2lmKGk4KHIpKXt0PXI7YnJlYWt9cj1yLnJldHVybn1pZihudWxsPT10KXRocm93IEVycm9yKGwoMTYwKSk7c3dpdGNoKHQudGFnKXtjYXNlIDI3OnZhciBvPXQuc3RhdGVOb2RlLGE9aTcoZSk7bGUoZSxhLG8pO2JyZWFrO2Nhc2UgNTp2YXIgaT10LnN0YXRlTm9kZTszMiZ0LmZsYWdzJiYobnMoaSxcIlwiKSx0LmZsYWdzJj0tMzMpO3ZhciBzPWk3KGUpO2xlKGUscyxpKTticmVhaztjYXNlIDM6Y2FzZSA0OnZhciBjPXQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sdT1pNyhlKTshZnVuY3Rpb24gZShuLHQscil7dmFyIG89bi50YWc7aWYoNT09PW98fDY9PT1vKW49bi5zdGF0ZU5vZGUsdD8oOT09PXIubm9kZVR5cGU/ci5ib2R5OlwiSFRNTFwiPT09ci5ub2RlTmFtZT9yLm93bmVyRG9jdW1lbnQuYm9keTpyKS5pbnNlcnRCZWZvcmUobix0KTooKHQ9OT09PXIubm9kZVR5cGU/ci5ib2R5OlwiSFRNTFwiPT09ci5ub2RlTmFtZT9yLm93bmVyRG9jdW1lbnQuYm9keTpyKS5hcHBlbmRDaGlsZChuKSxudWxsIT0ocj1yLl9yZWFjdFJvb3RDb250YWluZXIpfHxudWxsIT09dC5vbmNsaWNrfHwodC5vbmNsaWNrPW5tKSk7ZWxzZSBpZig0IT09byYmKDI3PT09byYmY2oobi50eXBlKSYmKHI9bi5zdGF0ZU5vZGUsdD1udWxsKSxudWxsIT09KG49bi5jaGlsZCkpKWZvcihlKG4sdCxyKSxuPW4uc2libGluZztudWxsIT09bjspZShuLHQsciksbj1uLnNpYmxpbmd9KGUsdSxjKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKGwoMTYxKSl9fWNhdGNoKG4pe3NQKGUsZS5yZXR1cm4sbil9ZS5mbGFncyY9LTN9NDA5NiZuJiYoZS5mbGFncyY9LTQwOTcpfWZ1bmN0aW9uIGx5KGUsbil7aWYoODc3MiZuLnN1YnRyZWVGbGFncylmb3Iobj1uLmNoaWxkO251bGwhPT1uOylsbChlLG4uYWx0ZXJuYXRlLG4pLG49bi5zaWJsaW5nfWZ1bmN0aW9uIGx4KGUsbil7dmFyIHQ9bnVsbDtudWxsIT09ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wmJih0PWUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCksZT1udWxsLG51bGwhPT1uLm1lbW9pemVkU3RhdGUmJm51bGwhPT1uLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sJiYoZT1uLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLGUhPT10JiYobnVsbCE9ZSYmZS5yZWZDb3VudCsrLG51bGwhPXQmJnIyKHQpKX1mdW5jdGlvbiBsdyhlLG4pe2U9bnVsbCxudWxsIT09bi5hbHRlcm5hdGUmJihlPW4uYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGUpLChuPW4ubWVtb2l6ZWRTdGF0ZS5jYWNoZSkhPT1lJiYobi5yZWZDb3VudCsrLG51bGwhPWUmJnIyKGUpKX1mdW5jdGlvbiBsaihlLG4sdCxyKXtpZigxMDI1NiZuLnN1YnRyZWVGbGFncylmb3Iobj1uLmNoaWxkO251bGwhPT1uOylsayhlLG4sdCxyKSxuPW4uc2libGluZ31mdW5jdGlvbiBsayhlLG4sdCxyKXt2YXIgbz1uLmZsYWdzO3N3aXRjaChuLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpsaihlLG4sdCxyKSwyMDQ4Jm8mJmkwKDksbik7YnJlYWs7Y2FzZSAxOmNhc2UgMzE6Y2FzZSAxMzpkZWZhdWx0OmxqKGUsbix0LHIpO2JyZWFrO2Nhc2UgMzpsaihlLG4sdCxyKSwyMDQ4Jm8mJihlPW51bGwsbnVsbCE9PW4uYWx0ZXJuYXRlJiYoZT1uLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmNhY2hlKSwobj1uLm1lbW9pemVkU3RhdGUuY2FjaGUpIT09ZSYmKG4ucmVmQ291bnQrKyxudWxsIT1lJiZyMihlKSkpO2JyZWFrO2Nhc2UgMTI6aWYoMjA0OCZvKXtsaihlLG4sdCxyKSxlPW4uc3RhdGVOb2RlO3RyeXt2YXIgYT1uLm1lbW9pemVkUHJvcHMsaT1hLmlkLGw9YS5vblBvc3RDb21taXQ7XCJmdW5jdGlvblwiPT10eXBlb2YgbCYmbChpLG51bGw9PT1uLmFsdGVybmF0ZT9cIm1vdW50XCI6XCJ1cGRhdGVcIixlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiwtMCl9Y2F0Y2goZSl7c1AobixuLnJldHVybixlKX19ZWxzZSBsaihlLG4sdCxyKTticmVhaztjYXNlIDIzOmJyZWFrO2Nhc2UgMjI6YT1uLnN0YXRlTm9kZSxpPW4uYWx0ZXJuYXRlLG51bGwhPT1uLm1lbW9pemVkU3RhdGU/MiZhLl92aXNpYmlsaXR5P2xqKGUsbix0LHIpOmxBKGUsbik6MiZhLl92aXNpYmlsaXR5P2xqKGUsbix0LHIpOihhLl92aXNpYmlsaXR5fD0yLGZ1bmN0aW9uIGUobix0LHIsbyxhKXtmb3IoYT1hJiYwIT0oMTAyNTYmdC5zdWJ0cmVlRmxhZ3MpLHQ9dC5jaGlsZDtudWxsIT09dDspe3ZhciBpPXQsbD1pLmZsYWdzO3N3aXRjaChpLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTplKG4saSxyLG8sYSksaTAoOCxpKTticmVhaztjYXNlIDIzOmJyZWFrO2Nhc2UgMjI6dmFyIHM9aS5zdGF0ZU5vZGU7bnVsbCE9PWkubWVtb2l6ZWRTdGF0ZT8yJnMuX3Zpc2liaWxpdHk/ZShuLGkscixvLGEpOmxBKG4saSk6KHMuX3Zpc2liaWxpdHl8PTIsZShuLGkscixvLGEpKSxhJiYyMDQ4JmwmJmx4KGkuYWx0ZXJuYXRlLGkpO2JyZWFrO2Nhc2UgMjQ6ZShuLGkscixvLGEpLGEmJjIwNDgmbCYmbHcoaS5hbHRlcm5hdGUsaSk7YnJlYWs7ZGVmYXVsdDplKG4saSxyLG8sYSl9dD10LnNpYmxpbmd9fShlLG4sdCxyLDAhPSgxMDI1NiZuLnN1YnRyZWVGbGFncykpKSwyMDQ4Jm8mJmx4KGksbik7YnJlYWs7Y2FzZSAyNDpsaihlLG4sdCxyKSwyMDQ4Jm8mJmx3KG4uYWx0ZXJuYXRlLG4pfX1mdW5jdGlvbiBsQShlLG4pe2lmKDEwMjU2Jm4uc3VidHJlZUZsYWdzKWZvcihuPW4uY2hpbGQ7bnVsbCE9PW47KXt2YXIgdD1uLHI9dC5mbGFncztzd2l0Y2godC50YWcpe2Nhc2UgMjI6bEEoZSx0KSwyMDQ4JnImJmx4KHQuYWx0ZXJuYXRlLHQpO2JyZWFrO2Nhc2UgMjQ6bEEoZSx0KSwyMDQ4JnImJmx3KHQuYWx0ZXJuYXRlLHQpO2JyZWFrO2RlZmF1bHQ6bEEoZSx0KX1uPW4uc2libGluZ319dmFyIGxPPTgxOTI7ZnVuY3Rpb24gbEMoZSl7aWYoZS5zdWJ0cmVlRmxhZ3MmbE8pZm9yKGU9ZS5jaGlsZDtudWxsIT09ZTspbFMoZSksZT1lLnNpYmxpbmd9ZnVuY3Rpb24gbFMoZSl7c3dpdGNoKGUudGFnKXtjYXNlIDI2OmxDKGUpLGUuZmxhZ3MmbE8mJm51bGwhPT1lLm1lbW9pemVkU3RhdGUmJmZ1bmN0aW9uKGUsbix0KXtpZihudWxsPT09YzEpdGhyb3cgRXJyb3IobCg0NzUpKTt2YXIgcj1jMTtpZihcInN0eWxlc2hlZXRcIj09PW4udHlwZSYmKFwic3RyaW5nXCIhPXR5cGVvZiB0Lm1lZGlhfHwhMSE9PW1hdGNoTWVkaWEodC5tZWRpYSkubWF0Y2hlcykmJjA9PSg0Jm4uc3RhdGUubG9hZGluZykpe2lmKG51bGw9PT1uLmluc3RhbmNlKXt2YXIgbz1jVSh0LmhyZWYpLGE9ZS5xdWVyeVNlbGVjdG9yKGNWKG8pKTtpZihhKXtudWxsIT09KGU9YS5fcCkmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnRoZW4mJihyLmNvdW50Kysscj1jMi5iaW5kKHIpLGUudGhlbihyLHIpKSxuLnN0YXRlLmxvYWRpbmd8PTQsbi5pbnN0YW5jZT1hLGVZKGEpO3JldHVybn1hPWUub3duZXJEb2N1bWVudHx8ZSx0PWNxKHQpLChvPWNOLmdldChvKSkmJmNYKHQsbyksZVkoYT1hLmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpKTt2YXIgaT1hO2kuX3A9bmV3IFByb21pc2UoZnVuY3Rpb24oZSxuKXtpLm9ubG9hZD1lLGkub25lcnJvcj1ufSksY2MoYSxcImxpbmtcIix0KSxuLmluc3RhbmNlPWF9bnVsbD09PXIuc3R5bGVzaGVldHMmJihyLnN0eWxlc2hlZXRzPW5ldyBNYXApLHIuc3R5bGVzaGVldHMuc2V0KG4sZSksKGU9bi5zdGF0ZS5wcmVsb2FkKSYmMD09KDMmbi5zdGF0ZS5sb2FkaW5nKSYmKHIuY291bnQrKyxuPWMyLmJpbmQociksZS5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLG4pLGUuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsbikpfX0obG0sZS5tZW1vaXplZFN0YXRlLGUubWVtb2l6ZWRQcm9wcyk7YnJlYWs7Y2FzZSA1OmRlZmF1bHQ6bEMoZSk7YnJlYWs7Y2FzZSAzOmNhc2UgNDp2YXIgbj1sbTtsbT1jQihlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxsQyhlKSxsbT1uO2JyZWFrO2Nhc2UgMjI6bnVsbD09PWUubWVtb2l6ZWRTdGF0ZSYmKG51bGwhPT0obj1lLmFsdGVybmF0ZSkmJm51bGwhPT1uLm1lbW9pemVkU3RhdGU/KG49bE8sbE89MHgxMDAwMDAwLGxDKGUpLGxPPW4pOmxDKGUpKX19ZnVuY3Rpb24gbEUoZSl7dmFyIG49ZS5hbHRlcm5hdGU7aWYobnVsbCE9PW4mJm51bGwhPT0oZT1uLmNoaWxkKSl7bi5jaGlsZD1udWxsO2RvIG49ZS5zaWJsaW5nLGUuc2libGluZz1udWxsLGU9bjt3aGlsZShudWxsIT09ZSl9fWZ1bmN0aW9uIGxfKGUpe3ZhciBuPWUuZGVsZXRpb25zO2lmKDAhPSgxNiZlLmZsYWdzKSl7aWYobnVsbCE9PW4pZm9yKHZhciB0PTA7dDxuLmxlbmd0aDt0Kyspe3ZhciByPW5bdF07bGk9cixseihyLGUpfWxFKGUpfWlmKDEwMjU2JmUuc3VidHJlZUZsYWdzKWZvcihlPWUuY2hpbGQ7bnVsbCE9PWU7KWxQKGUpLGU9ZS5zaWJsaW5nfWZ1bmN0aW9uIGxQKGUpe3N3aXRjaChlLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpsXyhlKSwyMDQ4JmUuZmxhZ3MmJmkxKDksZSxlLnJldHVybik7YnJlYWs7Y2FzZSAzOmNhc2UgMTI6ZGVmYXVsdDpsXyhlKTticmVhaztjYXNlIDIyOnZhciBuPWUuc3RhdGVOb2RlO251bGwhPT1lLm1lbW9pemVkU3RhdGUmJjImbi5fdmlzaWJpbGl0eSYmKG51bGw9PT1lLnJldHVybnx8MTMhPT1lLnJldHVybi50YWcpPyhuLl92aXNpYmlsaXR5Jj0tMyxmdW5jdGlvbiBlKG4pe3ZhciB0PW4uZGVsZXRpb25zO2lmKDAhPSgxNiZuLmZsYWdzKSl7aWYobnVsbCE9PXQpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXRbcl07bGk9byxseihvLG4pfWxFKG4pfWZvcihuPW4uY2hpbGQ7bnVsbCE9PW47KXtzd2l0Y2goKHQ9bikudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmkxKDgsdCx0LnJldHVybiksZSh0KTticmVhaztjYXNlIDIyOjImKHI9dC5zdGF0ZU5vZGUpLl92aXNpYmlsaXR5JiYoci5fdmlzaWJpbGl0eSY9LTMsZSh0KSk7YnJlYWs7ZGVmYXVsdDplKHQpfW49bi5zaWJsaW5nfX0oZSkpOmxfKGUpfX1mdW5jdGlvbiBseihlLG4pe2Zvcig7bnVsbCE9PWxpOyl7dmFyIHQ9bGk7c3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OmkxKDgsdCxuKTticmVhaztjYXNlIDIzOmNhc2UgMjI6aWYobnVsbCE9PXQubWVtb2l6ZWRTdGF0ZSYmbnVsbCE9PXQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wpe3ZhciByPXQubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbDtudWxsIT1yJiZyLnJlZkNvdW50Kyt9YnJlYWs7Y2FzZSAyNDpyMih0Lm1lbW9pemVkU3RhdGUuY2FjaGUpfWlmKG51bGwhPT0ocj10LmNoaWxkKSlyLnJldHVybj10LGxpPXI7ZWxzZSBmb3IodD1lO251bGwhPT1saTspe3ZhciBvPShyPWxpKS5zaWJsaW5nLGE9ci5yZXR1cm47aWYoIWZ1bmN0aW9uIGUobil7dmFyIHQ9bi5hbHRlcm5hdGU7bnVsbCE9PXQmJihuLmFsdGVybmF0ZT1udWxsLGUodCkpLG4uY2hpbGQ9bnVsbCxuLmRlbGV0aW9ucz1udWxsLG4uc2libGluZz1udWxsLDU9PT1uLnRhZyYmbnVsbCE9PSh0PW4uc3RhdGVOb2RlKSYmZVYodCksbi5zdGF0ZU5vZGU9bnVsbCxuLnJldHVybj1udWxsLG4uZGVwZW5kZW5jaWVzPW51bGwsbi5tZW1vaXplZFByb3BzPW51bGwsbi5tZW1vaXplZFN0YXRlPW51bGwsbi5wZW5kaW5nUHJvcHM9bnVsbCxuLnN0YXRlTm9kZT1udWxsLG4udXBkYXRlUXVldWU9bnVsbH0ocikscj09PXQpe2xpPW51bGw7YnJlYWt9aWYobnVsbCE9PW8pe28ucmV0dXJuPWEsbGk9bzticmVha31saT1hfX19dmFyIGxMPXtnZXRDYWNoZUZvclR5cGU6ZnVuY3Rpb24oZSl7dmFyIG49clkocjApLHQ9bi5kYXRhLmdldChlKTtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ZSgpLG4uZGF0YS5zZXQoZSx0KSksdH0sY2FjaGVTaWduYWw6ZnVuY3Rpb24oKXtyZXR1cm4gclkocjApLmNvbnRyb2xsZXIuc2lnbmFsfX0sbFQ9XCJmdW5jdGlvblwiPT10eXBlb2YgV2Vha01hcD9XZWFrTWFwOk1hcCxsUj0wLGxOPW51bGwsbEQ9bnVsbCxsQj0wLGxNPTAsbEk9bnVsbCxsSD0hMSxsRj0hMSxsVT0hMSxsVj0wLGxxPTAsbFc9MCxsJD0wLGxaPTAsbFk9MCxsWD0wLGxLPW51bGwsbFE9bnVsbCxsRz0hMSxsSj0wLGwwPTEvMCxsMT1udWxsLGwyPW51bGwsbDQ9MCxsNT1udWxsLGwzPW51bGwsbDY9MCxsOT0wLGw4PW51bGwsbDc9bnVsbCxzZT0wLHNuPW51bGw7ZnVuY3Rpb24gc3QoKXtyZXR1cm4gMCE9KDImbFIpJiYwIT09bEI/bEImLWxCOm51bGwhPT1MLlQ/c1goKTplTCgpfWZ1bmN0aW9uIHNyKCl7MD09PWxZJiYobFk9MD09KDB4MjAwMDAwMDAmbEIpfHxyUz9laygpOjB4MjAwMDAwMDApO3ZhciBlPW9NLmN1cnJlbnQ7cmV0dXJuIG51bGwhPT1lJiYoZS5mbGFnc3w9MzIpLGxZfWZ1bmN0aW9uIHNvKGUsbix0KXsoZT09PWxOJiYoMj09PWxNfHw5PT09bE0pfHxudWxsIT09ZS5jYW5jZWxQZW5kaW5nQ29tbWl0KSYmKHN1KGUsMCksc2woZSxsQixsWSwhMSkpLGVDKGUsdCksKDA9PSgyJmxSKXx8ZSE9PWxOKSYmKGU9PT1sTiYmKDA9PSgyJmxSKSYmKGwkfD10KSw0PT09bHEmJnNsKGUsbEIsbFksITEpKSxzVShlKSl9ZnVuY3Rpb24gc2EoZSxuLHQpe2lmKDAhPSg2JmxSKSl0aHJvdyBFcnJvcihsKDMyNykpO2Zvcih2YXIgcj0hdCYmMD09KDEyNCZuKSYmMD09KG4mZS5leHBpcmVkTGFuZXMpfHxlaihlLG4pLG89cj9mdW5jdGlvbihlLG4pe3ZhciB0PWxSO2xSfD0yO3ZhciByPXNwKCksbz1zaCgpO2xOIT09ZXx8bEIhPT1uPyhsMT1udWxsLGwwPWVyKCkrNTAwLHN1KGUsbikpOmxGPWVqKGUsbik7ZTpmb3IoOzspdHJ5e2lmKDAhPT1sTSYmbnVsbCE9PWxEKXtuPWxEO3ZhciBhPWxJO246c3dpdGNoKGxNKXtjYXNlIDE6bE09MCxsST1udWxsLHN5KGUsbixhLDEpO2JyZWFrO2Nhc2UgMjpjYXNlIDk6aWYob2woYSkpe2xNPTAsbEk9bnVsbCxzYihuKTticmVha31uPWZ1bmN0aW9uKCl7MiE9PWxNJiY5IT09bE18fGxOIT09ZXx8KGxNPTcpLHNVKGUpfSxhLnRoZW4obixuKTticmVhayBlO2Nhc2UgMzpsTT03O2JyZWFrIGU7Y2FzZSA0OmxNPTU7YnJlYWsgZTtjYXNlIDc6b2woYSk/KGxNPTAsbEk9bnVsbCxzYihuKSk6KGxNPTAsbEk9bnVsbCxzeShlLG4sYSw3KSk7YnJlYWs7Y2FzZSA1OnZhciBpPW51bGw7c3dpdGNoKGxELnRhZyl7Y2FzZSAyNjppPWxELm1lbW9pemVkU3RhdGU7Y2FzZSA1OmNhc2UgMjc6dmFyIHM9bEQ7aWYoaT9jMChpKTpzLnN0YXRlTm9kZS5jb21wbGV0ZSl7bE09MCxsST1udWxsO3ZhciBjPXMuc2libGluZztpZihudWxsIT09YylsRD1jO2Vsc2V7dmFyIHU9cy5yZXR1cm47bnVsbCE9PXU/KGxEPXUsc3godSkpOmxEPW51bGx9YnJlYWsgbn19bE09MCxsST1udWxsLHN5KGUsbixhLDUpO2JyZWFrO2Nhc2UgNjpsTT0wLGxJPW51bGwsc3koZSxuLGEsNik7YnJlYWs7Y2FzZSA4OnNjKCksbHE9NjticmVhayBlO2RlZmF1bHQ6dGhyb3cgRXJyb3IobCg0NjIpKX19Zm9yKDtudWxsIT09bEQmJiFlbigpOylzdihsRCk7YnJlYWt9Y2F0Y2gobil7c2QoZSxuKX1yZXR1cm4ockg9ckk9bnVsbCxMLkg9cixMLkE9byxsUj10LG51bGwhPT1sRCk/MDoobE49bnVsbCxsQj0wLHQyKCksbHEpfShlLG4pOnNtKGUsbiwhMCksYT1yOzspe2lmKDA9PT1vKWxGJiYhciYmc2woZSxuLDAsITEpO2Vsc2V7aWYodD1lLmN1cnJlbnQuYWx0ZXJuYXRlLGEmJiFmdW5jdGlvbihlKXtmb3IodmFyIG49ZTs7KXt2YXIgdD1uLnRhZztpZigoMD09PXR8fDExPT09dHx8MTU9PT10KSYmMTYzODQmbi5mbGFncyYmbnVsbCE9PSh0PW4udXBkYXRlUXVldWUpJiZudWxsIT09KHQ9dC5zdG9yZXMpKWZvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdLGE9by5nZXRTbmFwc2hvdDtvPW8udmFsdWU7dHJ5e2lmKCF0TyhhKCksbykpcmV0dXJuITF9Y2F0Y2goZSl7cmV0dXJuITF9fWlmKHQ9bi5jaGlsZCwxNjM4NCZuLnN1YnRyZWVGbGFncyYmbnVsbCE9PXQpdC5yZXR1cm49bixuPXQ7ZWxzZXtpZihuPT09ZSlicmVhaztmb3IoO251bGw9PT1uLnNpYmxpbmc7KXtpZihudWxsPT09bi5yZXR1cm58fG4ucmV0dXJuPT09ZSlyZXR1cm4hMDtuPW4ucmV0dXJufW4uc2libGluZy5yZXR1cm49bi5yZXR1cm4sbj1uLnNpYmxpbmd9fXJldHVybiEwfSh0KSl7bz1zbShlLG4sITEpLGE9ITE7Y29udGludWV9aWYoMj09PW8pe2lmKGE9bixlLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzJmEpdmFyIGk9MDtlbHNlIGk9MCE9KGk9LTB4MjAwMDAwMDEmZS5wZW5kaW5nTGFuZXMpP2k6MHgyMDAwMDAwMCZpPzB4MjAwMDAwMDA6MDtpZigwIT09aSl7bj1pO2U6e289bEs7dmFyIHM9ZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkO2lmKHMmJihzdShlLGkpLmZsYWdzfD0yNTYpLDIhPT0oaT1zbShlLGksITEpKSl7aWYobFUmJiFzKXtlLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzfD1hLGwkfD1hLG89NDticmVhayBlfWE9bFEsbFE9byxudWxsIT09YSYmKG51bGw9PT1sUT9sUT1hOmxRLnB1c2guYXBwbHkobFEsYSkpfW89aX1pZihhPSExLDIhPT1vKWNvbnRpbnVlfX1pZigxPT09byl7c3UoZSwwKSxzbChlLG4sMCwhMCk7YnJlYWt9ZTp7c3dpdGNoKHI9ZSxhPW8pe2Nhc2UgMDpjYXNlIDE6dGhyb3cgRXJyb3IobCgzNDUpKTtjYXNlIDQ6aWYoKDQxOTQwNDgmbikhPT1uKWJyZWFrO2Nhc2UgNjpzbChyLG4sbFksIWxIKTticmVhayBlO2Nhc2UgMjpsUT1udWxsO2JyZWFrO2Nhc2UgMzpjYXNlIDU6YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihsKDMyOSkpfWlmKCgweDNjMDAwMDAmbik9PT1uJiYxMDwobz1sSiszMDAtZXIoKSkpe2lmKHNsKHIsbixsWSwhbEgpLDAhPT1ldyhyLDAsITApKWJyZWFrIGU7ci50aW1lb3V0SGFuZGxlPWN2KHNpLmJpbmQobnVsbCxyLHQsbFEsbDEsbEcsbixsWSxsJCxsWCxsSCxhLDIsLTAsMCksbyk7YnJlYWsgZX1zaShyLHQsbFEsbDEsbEcsbixsWSxsJCxsWCxsSCxhLDAsLTAsMCl9fWJyZWFrfXNVKGUpfWZ1bmN0aW9uIHNpKGUsbix0LHIsbyxhLGkscyxjLHUsZCxmLHAsaCl7aWYoZS50aW1lb3V0SGFuZGxlPS0xLCg4MTkyJihmPW4uc3VidHJlZUZsYWdzKXx8MHgxMDAyMDAwPT0oMHgxMDAyMDAwJmYpKSYmKGMxPXtzdHlsZXNoZWV0czpudWxsLGNvdW50OjAsdW5zdXNwZW5kOm5tfSxsUyhuKSxudWxsIT09KGY9ZnVuY3Rpb24oKXtpZihudWxsPT09YzEpdGhyb3cgRXJyb3IobCg0NzUpKTt2YXIgZT1jMTtyZXR1cm4gZS5zdHlsZXNoZWV0cyYmMD09PWUuY291bnQmJmM1KGUsZS5zdHlsZXNoZWV0cyksMDxlLmNvdW50P2Z1bmN0aW9uKG4pe3ZhciB0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihlLnN0eWxlc2hlZXRzJiZjNShlLGUuc3R5bGVzaGVldHMpLGUudW5zdXNwZW5kKXt2YXIgbj1lLnVuc3VzcGVuZDtlLnVuc3VzcGVuZD1udWxsLG4oKX19LDZlNCk7cmV0dXJuIGUudW5zdXNwZW5kPW4sZnVuY3Rpb24oKXtlLnVuc3VzcGVuZD1udWxsLGNsZWFyVGltZW91dCh0KX19Om51bGx9KCkpKSl7ZS5jYW5jZWxQZW5kaW5nQ29tbWl0PWYoc2ouYmluZChudWxsLGUsbixhLHQscixvLGkscyxjLGQsMSxwLGgpKSxzbChlLGEsaSwhdSk7cmV0dXJufXNqKGUsbixhLHQscixvLGkscyxjKX1mdW5jdGlvbiBzbChlLG4sdCxyKXtuJj1+bFosbiY9fmwkLGUuc3VzcGVuZGVkTGFuZXN8PW4sZS5waW5nZWRMYW5lcyY9fm4sciYmKGUud2FybUxhbmVzfD1uKSxyPWUuZXhwaXJhdGlvblRpbWVzO2Zvcih2YXIgbz1uOzA8bzspe3ZhciBhPTMxLWVnKG8pLGk9MTw8YTtyW2FdPS0xLG8mPX5pfTAhPT10JiZlUyhlLHQsbil9ZnVuY3Rpb24gc3MoKXtyZXR1cm4gMCE9KDYmbFIpfHwoc1YoMCwhMSksITEpfWZ1bmN0aW9uIHNjKCl7aWYobnVsbCE9PWxEKXtpZigwPT09bE0pdmFyIGU9bEQucmV0dXJuO2Vsc2UgZT1sRCxySD1yST1udWxsLGF0KGUpLG9mPW51bGwsb3A9MCxlPWxEO2Zvcig7bnVsbCE9PWU7KWlKKGUuYWx0ZXJuYXRlLGUpLGU9ZS5yZXR1cm47bEQ9bnVsbH19ZnVuY3Rpb24gc3UoZSxuKXt2YXIgdD1lLnRpbWVvdXRIYW5kbGU7LTEhPT10JiYoZS50aW1lb3V0SGFuZGxlPS0xLGNiKHQpKSxudWxsIT09KHQ9ZS5jYW5jZWxQZW5kaW5nQ29tbWl0KSYmKGUuY2FuY2VsUGVuZGluZ0NvbW1pdD1udWxsLHQoKSksc2MoKSxsTj1lLGxEPXQ9cnQoZS5jdXJyZW50LG51bGwpLGxCPW4sbE09MCxsST1udWxsLGxIPSExLGxGPWVqKGUsbiksbFU9ITEsbFg9bFk9bFo9bCQ9bFc9bHE9MCxsUT1sSz1udWxsLGxHPSExLDAhPSg4Jm4pJiYobnw9MzImbik7dmFyIHI9ZS5lbnRhbmdsZWRMYW5lcztpZigwIT09cilmb3IoZT1lLmVudGFuZ2xlbWVudHMsciY9bjswPHI7KXt2YXIgbz0zMS1lZyhyKSxhPTE8PG87bnw9ZVtvXSxyJj1+YX1yZXR1cm4gbFY9bix0MigpLHR9ZnVuY3Rpb24gc2QoZSxuKXtvWT1udWxsLEwuSD1pZSxuPT09b3J8fG49PT1vYT8obj1vdSgpLGxNPTMpOm49PT1vbz8obj1vdSgpLGxNPTQpOmxNPW49PT1peT84Om51bGwhPT1uJiZcIm9iamVjdFwiPT10eXBlb2YgbiYmXCJmdW5jdGlvblwiPT10eXBlb2Ygbi50aGVuPzY6MSxsST1uLG51bGw9PT1sRCYmKGxxPTEsaWgoZSxydShuLGUuY3VycmVudCkpKX1mdW5jdGlvbiBzZigpe3ZhciBlPW9NLmN1cnJlbnQ7cmV0dXJuIG51bGw9PT1lfHwoKDQxOTQwNDgmbEIpPT09bEI/bnVsbD09PW9JOigoMHgzYzAwMDAwJmxCKT09PWxCfHwwIT0oMHgyMDAwMDAwMCZsQikpJiZlPT09b0kpfWZ1bmN0aW9uIHNwKCl7dmFyIGU9TC5IO3JldHVybiBMLkg9aWUsbnVsbD09PWU/aWU6ZX1mdW5jdGlvbiBzaCgpe3ZhciBlPUwuQTtyZXR1cm4gTC5BPWxMLGV9ZnVuY3Rpb24gc2coKXtscT00LGxIfHwoNDE5NDA0OCZsQikhPT1sQiYmbnVsbCE9PW9NLmN1cnJlbnR8fChsRj0hMCksMD09KDB4N2ZmZmZmZiZsVykmJjA9PSgweDdmZmZmZmYmbCQpfHxudWxsPT09bE58fHNsKGxOLGxCLGxZLCExKX1mdW5jdGlvbiBzbShlLG4sdCl7dmFyIHI9bFI7bFJ8PTI7dmFyIG89c3AoKSxhPXNoKCk7KGxOIT09ZXx8bEIhPT1uKSYmKGwxPW51bGwsc3UoZSxuKSksbj0hMTt2YXIgaT1scTtlOmZvcig7Oyl0cnl7aWYoMCE9PWxNJiZudWxsIT09bEQpe3ZhciBsPWxELHM9bEk7c3dpdGNoKGxNKXtjYXNlIDg6c2MoKSxpPTY7YnJlYWsgZTtjYXNlIDM6Y2FzZSAyOmNhc2UgOTpjYXNlIDY6bnVsbD09PW9NLmN1cnJlbnQmJihuPSEwKTt2YXIgYz1sTTtpZihsTT0wLGxJPW51bGwsc3koZSxsLHMsYyksdCYmbEYpe2k9MDticmVhayBlfWJyZWFrO2RlZmF1bHQ6Yz1sTSxsTT0wLGxJPW51bGwsc3koZSxsLHMsYyl9fShmdW5jdGlvbigpe2Zvcig7bnVsbCE9PWxEOylzdihsRCl9KSgpLGk9bHE7YnJlYWt9Y2F0Y2gobil7c2QoZSxuKX1yZXR1cm4gbiYmZS5zaGVsbFN1c3BlbmRDb3VudGVyKyssckg9ckk9bnVsbCxsUj1yLEwuSD1vLEwuQT1hLG51bGw9PT1sRCYmKGxOPW51bGwsbEI9MCx0MigpKSxpfWZ1bmN0aW9uIHN2KGUpe3ZhciBuPWkkKGUuYWx0ZXJuYXRlLGUsbFYpO2UubWVtb2l6ZWRQcm9wcz1lLnBlbmRpbmdQcm9wcyxudWxsPT09bj9zeChlKTpsRD1ufWZ1bmN0aW9uIHNiKGUpe3ZhciBuPWUsdD1uLmFsdGVybmF0ZTtzd2l0Y2gobi50YWcpe2Nhc2UgMTU6Y2FzZSAwOm49aXoodCxuLG4ucGVuZGluZ1Byb3BzLG4udHlwZSx2b2lkIDAsbEIpO2JyZWFrO2Nhc2UgMTE6bj1peih0LG4sbi5wZW5kaW5nUHJvcHMsbi50eXBlLnJlbmRlcixuLnJlZixsQik7YnJlYWs7Y2FzZSA1OmF0KG4pO2RlZmF1bHQ6aUoodCxuKSxuPWkkKHQsbj1sRD1ycihuLGxWKSxsVil9ZS5tZW1vaXplZFByb3BzPWUucGVuZGluZ1Byb3BzLG51bGw9PT1uP3N4KGUpOmxEPW59ZnVuY3Rpb24gc3koZSxuLHQscil7ckg9ckk9bnVsbCxhdChuKSxvZj1udWxsLG9wPTA7dmFyIG89bi5yZXR1cm47dHJ5e2lmKGZ1bmN0aW9uKGUsbix0LHIsbyl7aWYodC5mbGFnc3w9MzI3NjgsbnVsbCE9PXImJlwib2JqZWN0XCI9PXR5cGVvZiByJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnRoZW4pe2lmKG51bGwhPT0obj10LmFsdGVybmF0ZSkmJnJXKG4sdCxvLCEwKSxudWxsIT09KHQ9b00uY3VycmVudCkpe3N3aXRjaCh0LnRhZyl7Y2FzZSAzMTpjYXNlIDEzOnJldHVybiBudWxsPT09b0k/c2coKTpudWxsPT09dC5hbHRlcm5hdGUmJjA9PT1scSYmKGxxPTMpLHQuZmxhZ3MmPS0yNTcsdC5mbGFnc3w9NjU1MzYsdC5sYW5lcz1vLHI9PT1vaT90LmZsYWdzfD0xNjM4NDoobnVsbD09PShuPXQudXBkYXRlUXVldWUpP3QudXBkYXRlUXVldWU9bmV3IFNldChbcl0pOm4uYWRkKHIpLHN6KGUscixvKSksITE7Y2FzZSAyMjpyZXR1cm4gdC5mbGFnc3w9NjU1MzYscj09PW9pP3QuZmxhZ3N8PTE2Mzg0OihudWxsPT09KG49dC51cGRhdGVRdWV1ZSk/KG49e3RyYW5zaXRpb25zOm51bGwsbWFya2VySW5zdGFuY2VzOm51bGwscmV0cnlRdWV1ZTpuZXcgU2V0KFtyXSl9LHQudXBkYXRlUXVldWU9bik6bnVsbD09PSh0PW4ucmV0cnlRdWV1ZSk/bi5yZXRyeVF1ZXVlPW5ldyBTZXQoW3JdKTp0LmFkZChyKSxzeihlLHIsbykpLCExfXRocm93IEVycm9yKGwoNDM1LHQudGFnKSl9cmV0dXJuIHN6KGUscixvKSxzZygpLCExfWlmKHJTKXJldHVybiBudWxsIT09KG49b00uY3VycmVudCk/KDA9PSg2NTUzNiZuLmZsYWdzKSYmKG4uZmxhZ3N8PTI1Niksbi5mbGFnc3w9NjU1MzYsbi5sYW5lcz1vLHIhPT1yUCYmckIocnUoZT1FcnJvcihsKDQyMikse2NhdXNlOnJ9KSx0KSkpOihyIT09clAmJnJCKHJ1KG49RXJyb3IobCg0MjMpLHtjYXVzZTpyfSksdCkpLGU9ZS5jdXJyZW50LmFsdGVybmF0ZSxlLmZsYWdzfD02NTUzNixvJj0tbyxlLmxhbmVzfD1vLHI9cnUocix0KSxvPWltKGUuc3RhdGVOb2RlLHIsbyksb1MoZSxvKSw0IT09bHEmJihscT0yKSksITE7dmFyIGE9RXJyb3IobCg1MjApLHtjYXVzZTpyfSk7aWYoYT1ydShhLHQpLG51bGw9PT1sSz9sSz1bYV06bEsucHVzaChhKSw0IT09bHEmJihscT0yKSxudWxsPT09bilyZXR1cm4hMDtyPXJ1KHIsdCksdD1uO2Rve3N3aXRjaCh0LnRhZyl7Y2FzZSAzOnJldHVybiB0LmZsYWdzfD02NTUzNixlPW8mLW8sdC5sYW5lc3w9ZSxlPWltKHQuc3RhdGVOb2RlLHIsZSksb1ModCxlKSwhMTtjYXNlIDE6aWYobj10LnR5cGUsYT10LnN0YXRlTm9kZSwwPT0oMTI4JnQuZmxhZ3MpJiYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbi5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3J8fG51bGwhPT1hJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBhLmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PWwyfHwhbDIuaGFzKGEpKSkpcmV0dXJuIHQuZmxhZ3N8PTY1NTM2LG8mPS1vLHQubGFuZXN8PW8saWIobz1pdihvKSxlLHQsciksb1ModCxvKSwhMX10PXQucmV0dXJufXdoaWxlKG51bGwhPT10KTtyZXR1cm4hMX0oZSxvLG4sdCxsQikpe2xxPTEsaWgoZSxydSh0LGUuY3VycmVudCkpLGxEPW51bGw7cmV0dXJufX1jYXRjaChuKXtpZihudWxsIT09byl0aHJvdyBsRD1vLG47bHE9MSxpaChlLHJ1KHQsZS5jdXJyZW50KSksbEQ9bnVsbDtyZXR1cm59MzI3Njgmbi5mbGFncz8oclN8fDE9PT1yP2U9ITA6bEZ8fDAhPSgweDIwMDAwMDAwJmxCKT9lPSExOihsSD1lPSEwLCgyPT09cnx8OT09PXJ8fDM9PT1yfHw2PT09cikmJm51bGwhPT0ocj1vTS5jdXJyZW50KSYmMTM9PT1yLnRhZyYmKHIuZmxhZ3N8PTE2Mzg0KSksc3cobixlKSk6c3gobil9ZnVuY3Rpb24gc3goZSl7dmFyIG49ZTtkb3tpZigwIT0oMzI3Njgmbi5mbGFncykpcmV0dXJuIHZvaWQgc3cobixsSCk7ZT1uLnJldHVybjt2YXIgdD1mdW5jdGlvbihlLG4sdCl7dmFyIHI9bi5wZW5kaW5nUHJvcHM7c3dpdGNoKHJrKG4pLG4udGFnKXtjYXNlIDE2OmNhc2UgMTU6Y2FzZSAwOmNhc2UgMTE6Y2FzZSA3OmNhc2UgODpjYXNlIDEyOmNhc2UgOTpjYXNlIDE0OmNhc2UgMTpyZXR1cm4gaUcobiksbnVsbDtjYXNlIDM6cmV0dXJuIHQ9bi5zdGF0ZU5vZGUscj1udWxsLG51bGwhPT1lJiYocj1lLm1lbW9pemVkU3RhdGUuY2FjaGUpLG4ubWVtb2l6ZWRTdGF0ZS5jYWNoZSE9PXImJihuLmZsYWdzfD0yMDQ4KSxyVShyMCksVygpLHQucGVuZGluZ0NvbnRleHQmJih0LmNvbnRleHQ9dC5wZW5kaW5nQ29udGV4dCx0LnBlbmRpbmdDb250ZXh0PW51bGwpLChudWxsPT09ZXx8bnVsbD09PWUuY2hpbGQpJiYoclIobik/aVoobik6bnVsbD09PWV8fGUubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQmJjA9PSgyNTYmbi5mbGFncyl8fChuLmZsYWdzfD0xMDI0LHJEKCkpKSxpRyhuKSxudWxsO2Nhc2UgMjY6dmFyIG89bi50eXBlLGE9bi5tZW1vaXplZFN0YXRlO3JldHVybiBudWxsPT09ZT8oaVoobiksbnVsbCE9PWE/KGlHKG4pLGlYKG4sYSkpOihpRyhuKSxpWShuLG8sbnVsbCxyLHQpKSk6YT9hIT09ZS5tZW1vaXplZFN0YXRlPyhpWihuKSxpRyhuKSxpWChuLGEpKTooaUcobiksbi5mbGFncyY9LTB4MTAwMDAwMSk6KChlPWUubWVtb2l6ZWRQcm9wcykhPT1yJiZpWihuKSxpRyhuKSxpWShuLG8sZSxyLHQpKSxudWxsO2Nhc2UgMjc6aWYoWihuKSx0PVUuY3VycmVudCxvPW4udHlwZSxudWxsIT09ZSYmbnVsbCE9bi5zdGF0ZU5vZGUpZS5tZW1vaXplZFByb3BzIT09ciYmaVoobik7ZWxzZXtpZighcil7aWYobnVsbD09PW4uc3RhdGVOb2RlKXRocm93IEVycm9yKGwoMTY2KSk7cmV0dXJuIGlHKG4pLG51bGx9ZT1ILmN1cnJlbnQsclIobik/ckwobixlKToobi5zdGF0ZU5vZGU9ZT1jVChvLHIsdCksaVoobikpfXJldHVybiBpRyhuKSxudWxsO2Nhc2UgNTppZihaKG4pLG89bi50eXBlLG51bGwhPT1lJiZudWxsIT1uLnN0YXRlTm9kZSllLm1lbW9pemVkUHJvcHMhPT1yJiZpWihuKTtlbHNle2lmKCFyKXtpZihudWxsPT09bi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IobCgxNjYpKTtyZXR1cm4gaUcobiksbnVsbH1pZihhPUguY3VycmVudCxyUihuKSlyTChuLGEpO2Vsc2V7dmFyIGk9Y2YoVS5jdXJyZW50KTtzd2l0Y2goYSl7Y2FzZSAxOmE9aS5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLG8pO2JyZWFrO2Nhc2UgMjphPWkuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLG8pO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKG8pe2Nhc2VcInN2Z1wiOmE9aS5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLG8pO2JyZWFrO2Nhc2VcIm1hdGhcIjphPWkuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLG8pO2JyZWFrO2Nhc2VcInNjcmlwdFwiOihhPWkuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuaW5uZXJIVE1MPVwiPHNjcmlwdD48XFwvc2NyaXB0PlwiLGE9YS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO2JyZWFrO2Nhc2VcInNlbGVjdFwiOmE9XCJzdHJpbmdcIj09dHlwZW9mIHIuaXM/aS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIse2lzOnIuaXN9KTppLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiksci5tdWx0aXBsZT9hLm11bHRpcGxlPSEwOnIuc2l6ZSYmKGEuc2l6ZT1yLnNpemUpO2JyZWFrO2RlZmF1bHQ6YT1cInN0cmluZ1wiPT10eXBlb2Ygci5pcz9pLmNyZWF0ZUVsZW1lbnQobyx7aXM6ci5pc30pOmkuY3JlYXRlRWxlbWVudChvKX19YVtlTl09bixhW2VEXT1yO2U6Zm9yKGk9bi5jaGlsZDtudWxsIT09aTspe2lmKDU9PT1pLnRhZ3x8Nj09PWkudGFnKWEuYXBwZW5kQ2hpbGQoaS5zdGF0ZU5vZGUpO2Vsc2UgaWYoNCE9PWkudGFnJiYyNyE9PWkudGFnJiZudWxsIT09aS5jaGlsZCl7aS5jaGlsZC5yZXR1cm49aSxpPWkuY2hpbGQ7Y29udGludWV9aWYoaT09PW4pYnJlYWs7Zm9yKDtudWxsPT09aS5zaWJsaW5nOyl7aWYobnVsbD09PWkucmV0dXJufHxpLnJldHVybj09PW4pYnJlYWsgZTtpPWkucmV0dXJufWkuc2libGluZy5yZXR1cm49aS5yZXR1cm4saT1pLnNpYmxpbmd9c3dpdGNoKG4uc3RhdGVOb2RlPWEsY2MoYSxvLHIpLG8pe2Nhc2VcImJ1dHRvblwiOmNhc2VcImlucHV0XCI6Y2FzZVwic2VsZWN0XCI6Y2FzZVwidGV4dGFyZWFcIjpyPSEhci5hdXRvRm9jdXM7YnJlYWs7Y2FzZVwiaW1nXCI6cj0hMDticmVhaztkZWZhdWx0OnI9ITF9ciYmaVoobil9fXJldHVybiBpRyhuKSxpWShuLG4udHlwZSxudWxsPT09ZT9udWxsOmUubWVtb2l6ZWRQcm9wcyxuLnBlbmRpbmdQcm9wcyx0KSxudWxsO2Nhc2UgNjppZihlJiZudWxsIT1uLnN0YXRlTm9kZSllLm1lbW9pemVkUHJvcHMhPT1yJiZpWihuKTtlbHNle2lmKFwic3RyaW5nXCIhPXR5cGVvZiByJiZudWxsPT09bi5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IobCgxNjYpKTtpZihlPVUuY3VycmVudCxyUihuKSl7aWYoZT1uLnN0YXRlTm9kZSx0PW4ubWVtb2l6ZWRQcm9wcyxyPW51bGwsbnVsbCE9PShvPXJPKSlzd2l0Y2goby50YWcpe2Nhc2UgMjc6Y2FzZSA1OnI9by5tZW1vaXplZFByb3BzfWVbZU5dPW4sKGU9ISEoZS5ub2RlVmFsdWU9PT10fHxudWxsIT09ciYmITA9PT1yLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZ3x8Y2koZS5ub2RlVmFsdWUsdCkpKXx8cnoobiwhMCl9ZWxzZShlPWNmKGUpLmNyZWF0ZVRleHROb2RlKHIpKVtlTl09bixuLnN0YXRlTm9kZT1lfXJldHVybiBpRyhuKSxudWxsO2Nhc2UgMzE6aWYodD1uLm1lbW9pemVkU3RhdGUsbnVsbD09PWV8fG51bGwhPT1lLm1lbW9pemVkU3RhdGUpe2lmKHI9clIobiksbnVsbCE9PXQpe2lmKG51bGw9PT1lKXtpZighcil0aHJvdyBFcnJvcihsKDMxOCkpO2lmKCEoZT1udWxsIT09KGU9bi5tZW1vaXplZFN0YXRlKT9lLmRlaHlkcmF0ZWQ6bnVsbCkpdGhyb3cgRXJyb3IobCg1NTcpKTtlW2VOXT1ufWVsc2Ugck4oKSwwPT0oMTI4Jm4uZmxhZ3MpJiYobi5tZW1vaXplZFN0YXRlPW51bGwpLG4uZmxhZ3N8PTQ7aUcobiksZT0hMX1lbHNlIHQ9ckQoKSxudWxsIT09ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmKGUubWVtb2l6ZWRTdGF0ZS5oeWRyYXRpb25FcnJvcnM9dCksZT0hMDtpZighZSl7aWYoMjU2Jm4uZmxhZ3MpcmV0dXJuIG9xKG4pLG47cmV0dXJuIG9xKG4pLG51bGx9aWYoMCE9KDEyOCZuLmZsYWdzKSl0aHJvdyBFcnJvcihsKDU1OCkpfXJldHVybiBpRyhuKSxudWxsO2Nhc2UgMTM6aWYocj1uLm1lbW9pemVkU3RhdGUsbnVsbD09PWV8fG51bGwhPT1lLm1lbW9pemVkU3RhdGUmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUuZGVoeWRyYXRlZCl7aWYobz1yUihuKSxudWxsIT09ciYmbnVsbCE9PXIuZGVoeWRyYXRlZCl7aWYobnVsbD09PWUpe2lmKCFvKXRocm93IEVycm9yKGwoMzE4KSk7aWYoIShvPW51bGwhPT0obz1uLm1lbW9pemVkU3RhdGUpP28uZGVoeWRyYXRlZDpudWxsKSl0aHJvdyBFcnJvcihsKDMxNykpO29bZU5dPW59ZWxzZSByTigpLDA9PSgxMjgmbi5mbGFncykmJihuLm1lbW9pemVkU3RhdGU9bnVsbCksbi5mbGFnc3w9NDtpRyhuKSxvPSExfWVsc2Ugbz1yRCgpLG51bGwhPT1lJiZudWxsIT09ZS5tZW1vaXplZFN0YXRlJiYoZS5tZW1vaXplZFN0YXRlLmh5ZHJhdGlvbkVycm9ycz1vKSxvPSEwO2lmKCFvKXtpZigyNTYmbi5mbGFncylyZXR1cm4gb3EobiksbjtyZXR1cm4gb3EobiksbnVsbH19aWYob3EobiksMCE9KDEyOCZuLmZsYWdzKSlyZXR1cm4gbi5sYW5lcz10LG47cmV0dXJuIHQ9bnVsbCE9PXIsZT1udWxsIT09ZSYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSx0JiYocj1uLmNoaWxkLG89bnVsbCxudWxsIT09ci5hbHRlcm5hdGUmJm51bGwhPT1yLmFsdGVybmF0ZS5tZW1vaXplZFN0YXRlJiZudWxsIT09ci5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wmJihvPXIuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLGE9bnVsbCxudWxsIT09ci5tZW1vaXplZFN0YXRlJiZudWxsIT09ci5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCYmKGE9ci5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxhIT09byYmKHIuZmxhZ3N8PTIwNDgpKSx0IT09ZSYmdCYmKG4uY2hpbGQuZmxhZ3N8PTgxOTIpLGlLKG4sbi51cGRhdGVRdWV1ZSksaUcobiksbnVsbDtjYXNlIDQ6cmV0dXJuIFcoKSxudWxsPT09ZSYmczYobi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyksaUcobiksbnVsbDtjYXNlIDEwOnJldHVybiByVShuLnR5cGUpLGlHKG4pLG51bGw7Y2FzZSAxOTppZihNKG9XKSxudWxsPT09KHI9bi5tZW1vaXplZFN0YXRlKSlyZXR1cm4gaUcobiksbnVsbDtpZihvPTAhPSgxMjgmbi5mbGFncyksbnVsbD09PShhPXIucmVuZGVyaW5nKSlpZihvKWlRKHIsITEpO2Vsc2V7aWYoMCE9PWxxfHxudWxsIT09ZSYmMCE9KDEyOCZlLmZsYWdzKSlmb3IoZT1uLmNoaWxkO251bGwhPT1lOyl7aWYobnVsbCE9PShhPW8kKGUpKSl7Zm9yKG4uZmxhZ3N8PTEyOCxpUShyLCExKSxuLnVwZGF0ZVF1ZXVlPWU9YS51cGRhdGVRdWV1ZSxpSyhuLGUpLG4uc3VidHJlZUZsYWdzPTAsZT10LHQ9bi5jaGlsZDtudWxsIT09dDspcnIodCxlKSx0PXQuc2libGluZztyZXR1cm4gSShvVywxJm9XLmN1cnJlbnR8MiksclMmJnJ4KG4sci50cmVlRm9ya0NvdW50KSxuLmNoaWxkfWU9ZS5zaWJsaW5nfW51bGwhPT1yLnRhaWwmJmVyKCk+bDAmJihuLmZsYWdzfD0xMjgsbz0hMCxpUShyLCExKSxuLmxhbmVzPTQxOTQzMDQpfWVsc2V7aWYoIW8paWYobnVsbCE9PShlPW8kKGEpKSl7aWYobi5mbGFnc3w9MTI4LG89ITAsbi51cGRhdGVRdWV1ZT1lPWUudXBkYXRlUXVldWUsaUsobixlKSxpUShyLCEwKSxudWxsPT09ci50YWlsJiZcImhpZGRlblwiPT09ci50YWlsTW9kZSYmIWEuYWx0ZXJuYXRlJiYhclMpcmV0dXJuIGlHKG4pLG51bGx9ZWxzZSAyKmVyKCktci5yZW5kZXJpbmdTdGFydFRpbWU+bDAmJjB4MjAwMDAwMDAhPT10JiYobi5mbGFnc3w9MTI4LG89ITAsaVEociwhMSksbi5sYW5lcz00MTk0MzA0KTtyLmlzQmFja3dhcmRzPyhhLnNpYmxpbmc9bi5jaGlsZCxuLmNoaWxkPWEpOihudWxsIT09KGU9ci5sYXN0KT9lLnNpYmxpbmc9YTpuLmNoaWxkPWEsci5sYXN0PWEpfWlmKG51bGwhPT1yLnRhaWwpcmV0dXJuIGU9ci50YWlsLHIucmVuZGVyaW5nPWUsci50YWlsPWUuc2libGluZyxyLnJlbmRlcmluZ1N0YXJ0VGltZT1lcigpLGUuc2libGluZz1udWxsLHQ9b1cuY3VycmVudCxJKG9XLG8/MSZ0fDI6MSZ0KSxyUyYmcngobixyLnRyZWVGb3JrQ291bnQpLGU7cmV0dXJuIGlHKG4pLG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBvcShuKSxvQigpLHI9bnVsbCE9PW4ubWVtb2l6ZWRTdGF0ZSxudWxsIT09ZT9udWxsIT09ZS5tZW1vaXplZFN0YXRlIT09ciYmKG4uZmxhZ3N8PTgxOTIpOnImJihuLmZsYWdzfD04MTkyKSxyPzAhPSgweDIwMDAwMDAwJnQpJiYwPT0oMTI4Jm4uZmxhZ3MpJiYoaUcobiksNiZuLnN1YnRyZWVGbGFncyYmKG4uZmxhZ3N8PTgxOTIpKTppRyhuKSxudWxsIT09KHQ9bi51cGRhdGVRdWV1ZSkmJmlLKG4sdC5yZXRyeVF1ZXVlKSx0PW51bGwsbnVsbCE9PWUmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUmJm51bGwhPT1lLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sJiYodD1lLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLHI9bnVsbCxudWxsIT09bi5tZW1vaXplZFN0YXRlJiZudWxsIT09bi5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCYmKHI9bi5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxyIT09dCYmKG4uZmxhZ3N8PTIwNDgpLG51bGwhPT1lJiZNKHI3KSxudWxsO2Nhc2UgMjQ6cmV0dXJuIHQ9bnVsbCxudWxsIT09ZSYmKHQ9ZS5tZW1vaXplZFN0YXRlLmNhY2hlKSxuLm1lbW9pemVkU3RhdGUuY2FjaGUhPT10JiYobi5mbGFnc3w9MjA0OCksclUocjApLGlHKG4pLG51bGw7Y2FzZSAyNTpjYXNlIDMwOnJldHVybiBudWxsfXRocm93IEVycm9yKGwoMTU2LG4udGFnKSl9KG4uYWx0ZXJuYXRlLG4sbFYpO2lmKG51bGwhPT10KXtsRD10O3JldHVybn1pZihudWxsIT09KG49bi5zaWJsaW5nKSl7bEQ9bjtyZXR1cm59bEQ9bj1lfXdoaWxlKG51bGwhPT1uKTswPT09bHEmJihscT01KX1mdW5jdGlvbiBzdyhlLG4pe2Rve3ZhciB0PWZ1bmN0aW9uKGUsbil7c3dpdGNoKHJrKG4pLG4udGFnKXtjYXNlIDE6cmV0dXJuIDY1NTM2JihlPW4uZmxhZ3MpPyhuLmZsYWdzPS02NTUzNyZlfDEyOCxuKTpudWxsO2Nhc2UgMzpyZXR1cm4gclUocjApLFcoKSwwIT0oNjU1MzYmKGU9bi5mbGFncykpJiYwPT0oMTI4JmUpPyhuLmZsYWdzPS02NTUzNyZlfDEyOCxuKTpudWxsO2Nhc2UgMjY6Y2FzZSAyNzpjYXNlIDU6cmV0dXJuIFoobiksbnVsbDtjYXNlIDMxOmlmKG51bGwhPT1uLm1lbW9pemVkU3RhdGUpe2lmKG9xKG4pLG51bGw9PT1uLmFsdGVybmF0ZSl0aHJvdyBFcnJvcihsKDM0MCkpO3JOKCl9cmV0dXJuIDY1NTM2JihlPW4uZmxhZ3MpPyhuLmZsYWdzPS02NTUzNyZlfDEyOCxuKTpudWxsO2Nhc2UgMTM6aWYob3EobiksbnVsbCE9PShlPW4ubWVtb2l6ZWRTdGF0ZSkmJm51bGwhPT1lLmRlaHlkcmF0ZWQpe2lmKG51bGw9PT1uLmFsdGVybmF0ZSl0aHJvdyBFcnJvcihsKDM0MCkpO3JOKCl9cmV0dXJuIDY1NTM2JihlPW4uZmxhZ3MpPyhuLmZsYWdzPS02NTUzNyZlfDEyOCxuKTpudWxsO2Nhc2UgMTk6cmV0dXJuIE0ob1cpLG51bGw7Y2FzZSA0OnJldHVybiBXKCksbnVsbDtjYXNlIDEwOnJldHVybiByVShuLnR5cGUpLG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBvcShuKSxvQigpLG51bGwhPT1lJiZNKHI3KSw2NTUzNiYoZT1uLmZsYWdzKT8obi5mbGFncz0tNjU1MzcmZXwxMjgsbik6bnVsbDtjYXNlIDI0OnJldHVybiByVShyMCksbnVsbDtkZWZhdWx0OnJldHVybiBudWxsfX0oZS5hbHRlcm5hdGUsZSk7aWYobnVsbCE9PXQpe3QuZmxhZ3MmPTMyNzY3LGxEPXQ7cmV0dXJufWlmKG51bGwhPT0odD1lLnJldHVybikmJih0LmZsYWdzfD0zMjc2OCx0LnN1YnRyZWVGbGFncz0wLHQuZGVsZXRpb25zPW51bGwpLCFuJiZudWxsIT09KGU9ZS5zaWJsaW5nKSl7bEQ9ZTtyZXR1cm59bEQ9ZT10fXdoaWxlKG51bGwhPT1lKTtscT02LGxEPW51bGx9ZnVuY3Rpb24gc2ooZSxuLHQscixvLGEsaSxzLGMpe2UuY2FuY2VsUGVuZGluZ0NvbW1pdD1udWxsO2RvIHNTKCk7d2hpbGUoMCE9PWw0KTtpZigwIT0oNiZsUikpdGhyb3cgRXJyb3IobCgzMjcpKTtpZihudWxsIT09bil7aWYobj09PWUuY3VycmVudCl0aHJvdyBFcnJvcihsKDE3NykpO2lmKCFmdW5jdGlvbihlLG4sdCxyLG8sYSl7dmFyIGk9ZS5wZW5kaW5nTGFuZXM7ZS5wZW5kaW5nTGFuZXM9dCxlLnN1c3BlbmRlZExhbmVzPTAsZS5waW5nZWRMYW5lcz0wLGUud2FybUxhbmVzPTAsZS5leHBpcmVkTGFuZXMmPXQsZS5lbnRhbmdsZWRMYW5lcyY9dCxlLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzJj10LGUuc2hlbGxTdXNwZW5kQ291bnRlcj0wO3ZhciBsPWUuZW50YW5nbGVtZW50cyxzPWUuZXhwaXJhdGlvblRpbWVzLGM9ZS5oaWRkZW5VcGRhdGVzO2Zvcih0PWkmfnQ7MDx0Oyl7dmFyIHU9MzEtZWcodCksZD0xPDx1O2xbdV09MCxzW3VdPS0xO3ZhciBmPWNbdV07aWYobnVsbCE9PWYpZm9yKGNbdV09bnVsbCx1PTA7dTxmLmxlbmd0aDt1Kyspe3ZhciBwPWZbdV07bnVsbCE9PXAmJihwLmxhbmUmPS0weDIwMDAwMDAxKX10Jj1+ZH0wIT09ciYmZVMoZSxyLDApLDAhPT1hJiYwPT09byYmMCE9PWUudGFnJiYoZS5zdXNwZW5kZWRMYW5lc3w9YSZ+KGkmfm4pKX0oZSx0LGE9bi5sYW5lc3xuLmNoaWxkTGFuZXN8dDEsaSxzLGMpLGU9PT1sTiYmKGxEPWxOPW51bGwsbEI9MCksbDM9bixsNT1lLGw2PXQsbDk9YSxsOD1vLGw3PXIsMCE9KDEwMjU2Jm4uc3VidHJlZUZsYWdzKXx8MCE9KDEwMjU2Jm4uZmxhZ3MpPyhlLmNhbGxiYWNrTm9kZT1udWxsLGUuY2FsbGJhY2tQcmlvcml0eT0wLEooZWwsZnVuY3Rpb24oKXtyZXR1cm4gc0UoITApLG51bGx9KSk6KGUuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja1ByaW9yaXR5PTApLHI9MCE9KDEzODc4Jm4uZmxhZ3MpLDAhPSgxMzg3OCZuLnN1YnRyZWVGbGFncyl8fHIpe3I9TC5ULEwuVD1udWxsLG89VC5wLFQucD0yLGk9bFIsbFJ8PTQ7dHJ5eyFmdW5jdGlvbihlLG4pe2lmKGU9ZS5jb250YWluZXJJbmZvLGN1PXVyLHRQKGU9dF8oZSkpKXtpZihcInNlbGVjdGlvblN0YXJ0XCJpbiBlKXZhciB0PXtzdGFydDplLnNlbGVjdGlvblN0YXJ0LGVuZDplLnNlbGVjdGlvbkVuZH07ZWxzZSBlOnt2YXIgcj0odD0odD1lLm93bmVyRG9jdW1lbnQpJiZ0LmRlZmF1bHRWaWV3fHx3aW5kb3cpLmdldFNlbGVjdGlvbiYmdC5nZXRTZWxlY3Rpb24oKTtpZihyJiYwIT09ci5yYW5nZUNvdW50KXt0PXIuYW5jaG9yTm9kZTt2YXIgbyxhPXIuYW5jaG9yT2Zmc2V0LGk9ci5mb2N1c05vZGU7cj1yLmZvY3VzT2Zmc2V0O3RyeXt0Lm5vZGVUeXBlLGkubm9kZVR5cGV9Y2F0Y2goZSl7dD1udWxsO2JyZWFrIGV9dmFyIHM9MCxjPS0xLHU9LTEsZD0wLGY9MCxwPWUsaD1udWxsO246Zm9yKDs7KXtmb3IoO3AhPT10fHwwIT09YSYmMyE9PXAubm9kZVR5cGV8fChjPXMrYSkscCE9PWl8fDAhPT1yJiYzIT09cC5ub2RlVHlwZXx8KHU9cytyKSwzPT09cC5ub2RlVHlwZSYmKHMrPXAubm9kZVZhbHVlLmxlbmd0aCksbnVsbCE9PShvPXAuZmlyc3RDaGlsZCk7KWg9cCxwPW87Zm9yKDs7KXtpZihwPT09ZSlicmVhayBuO2lmKGg9PT10JiYrK2Q9PT1hJiYoYz1zKSxoPT09aSYmKytmPT09ciYmKHU9cyksbnVsbCE9PShvPXAubmV4dFNpYmxpbmcpKWJyZWFrO2g9KHA9aCkucGFyZW50Tm9kZX1wPW99dD0tMT09PWN8fC0xPT09dT9udWxsOntzdGFydDpjLGVuZDp1fX1lbHNlIHQ9bnVsbH10PXR8fHtzdGFydDowLGVuZDowfX1lbHNlIHQ9bnVsbDtmb3IoY2Q9e2ZvY3VzZWRFbGVtOmUsc2VsZWN0aW9uUmFuZ2U6dH0sdXI9ITEsbGk9bjtudWxsIT09bGk7KWlmKGU9KG49bGkpLmNoaWxkLDAhPSgxMDI0Jm4uc3VidHJlZUZsYWdzKSYmbnVsbCE9PWUpZS5yZXR1cm49bixsaT1lO2Vsc2UgZm9yKDtudWxsIT09bGk7KXtzd2l0Y2goaT0obj1saSkuYWx0ZXJuYXRlLGU9bi5mbGFncyxuLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpjYXNlIDU6Y2FzZSAyNjpjYXNlIDI3OmNhc2UgNjpjYXNlIDQ6Y2FzZSAxNzpicmVhaztjYXNlIDE6aWYoMCE9KDEwMjQmZSkmJm51bGwhPT1pKXtlPXZvaWQgMCx0PW4sYT1pLm1lbW9pemVkUHJvcHMsaT1pLm1lbW9pemVkU3RhdGUscj10LnN0YXRlTm9kZTt0cnl7dmFyIGc9aWModC50eXBlLGEpO2U9ci5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShnLGkpLHIuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGU9ZX1jYXRjaChlKXtzUCh0LHQucmV0dXJuLGUpfX1icmVhaztjYXNlIDM6aWYoMCE9KDEwMjQmZSkpe2lmKDk9PT0odD0oZT1uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKS5ub2RlVHlwZSkpY08oZSk7ZWxzZSBpZigxPT09dClzd2l0Y2goZS5ub2RlTmFtZSl7Y2FzZVwiSEVBRFwiOmNhc2VcIkhUTUxcIjpjYXNlXCJCT0RZXCI6Y08oZSk7YnJlYWs7ZGVmYXVsdDplLnRleHRDb250ZW50PVwiXCJ9fWJyZWFrO2RlZmF1bHQ6aWYoMCE9KDEwMjQmZSkpdGhyb3cgRXJyb3IobCgxNjMpKX1pZihudWxsIT09KGU9bi5zaWJsaW5nKSl7ZS5yZXR1cm49bi5yZXR1cm4sbGk9ZTticmVha31saT1uLnJldHVybn19KGUsbix0KX1maW5hbGx5e2xSPWksVC5wPW8sTC5UPXJ9fWw0PTEsc2soKSxzQSgpLHNPKCl9fWZ1bmN0aW9uIHNrKCl7aWYoMT09PWw0KXtsND0wO3ZhciBlPWw1LG49bDMsdD0wIT0oMTM4Nzgmbi5mbGFncyk7aWYoMCE9KDEzODc4Jm4uc3VidHJlZUZsYWdzKXx8dCl7dD1MLlQsTC5UPW51bGw7dmFyIHI9VC5wO1QucD0yO3ZhciBvPWxSO2xSfD00O3RyeXtsdihuLGUpO3ZhciBhPWNkLGk9dF8oZS5jb250YWluZXJJbmZvKSxsPWEuZm9jdXNlZEVsZW0scz1hLnNlbGVjdGlvblJhbmdlO2lmKGkhPT1sJiZsJiZsLm93bmVyRG9jdW1lbnQmJmZ1bmN0aW9uIGUobix0KXtyZXR1cm4hIW4mJiEhdCYmKG49PT10fHwoIW58fDMhPT1uLm5vZGVUeXBlKSYmKHQmJjM9PT10Lm5vZGVUeXBlP2Uobix0LnBhcmVudE5vZGUpOlwiY29udGFpbnNcImluIG4/bi5jb250YWlucyh0KTohIW4uY29tcGFyZURvY3VtZW50UG9zaXRpb24mJiEhKDE2Jm4uY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkpKSl9KGwub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbCkpe2lmKG51bGwhPT1zJiZ0UChsKSl7dmFyIGM9cy5zdGFydCx1PXMuZW5kO2lmKHZvaWQgMD09PXUmJih1PWMpLFwic2VsZWN0aW9uU3RhcnRcImluIGwpbC5zZWxlY3Rpb25TdGFydD1jLGwuc2VsZWN0aW9uRW5kPU1hdGgubWluKHUsbC52YWx1ZS5sZW5ndGgpO2Vsc2V7dmFyIGQ9bC5vd25lckRvY3VtZW50fHxkb2N1bWVudCxmPWQmJmQuZGVmYXVsdFZpZXd8fHdpbmRvdztpZihmLmdldFNlbGVjdGlvbil7dmFyIHA9Zi5nZXRTZWxlY3Rpb24oKSxoPWwudGV4dENvbnRlbnQubGVuZ3RoLGc9TWF0aC5taW4ocy5zdGFydCxoKSxtPXZvaWQgMD09PXMuZW5kP2c6TWF0aC5taW4ocy5lbmQsaCk7IXAuZXh0ZW5kJiZnPm0mJihpPW0sbT1nLGc9aSk7dmFyIHY9dEUobCxnKSxiPXRFKGwsbSk7aWYodiYmYiYmKDEhPT1wLnJhbmdlQ291bnR8fHAuYW5jaG9yTm9kZSE9PXYubm9kZXx8cC5hbmNob3JPZmZzZXQhPT12Lm9mZnNldHx8cC5mb2N1c05vZGUhPT1iLm5vZGV8fHAuZm9jdXNPZmZzZXQhPT1iLm9mZnNldCkpe3ZhciB5PWQuY3JlYXRlUmFuZ2UoKTt5LnNldFN0YXJ0KHYubm9kZSx2Lm9mZnNldCkscC5yZW1vdmVBbGxSYW5nZXMoKSxnPm0/KHAuYWRkUmFuZ2UoeSkscC5leHRlbmQoYi5ub2RlLGIub2Zmc2V0KSk6KHkuc2V0RW5kKGIubm9kZSxiLm9mZnNldCkscC5hZGRSYW5nZSh5KSl9fX19Zm9yKGQ9W10scD1sO3A9cC5wYXJlbnROb2RlOykxPT09cC5ub2RlVHlwZSYmZC5wdXNoKHtlbGVtZW50OnAsbGVmdDpwLnNjcm9sbExlZnQsdG9wOnAuc2Nyb2xsVG9wfSk7Zm9yKFwiZnVuY3Rpb25cIj09dHlwZW9mIGwuZm9jdXMmJmwuZm9jdXMoKSxsPTA7bDxkLmxlbmd0aDtsKyspe3ZhciB4PWRbbF07eC5lbGVtZW50LnNjcm9sbExlZnQ9eC5sZWZ0LHguZWxlbWVudC5zY3JvbGxUb3A9eC50b3B9fXVyPSEhY3UsY2Q9Y3U9bnVsbH1maW5hbGx5e2xSPW8sVC5wPXIsTC5UPXR9fWUuY3VycmVudD1uLGw0PTJ9fWZ1bmN0aW9uIHNBKCl7aWYoMj09PWw0KXtsND0wO3ZhciBlPWw1LG49bDMsdD0wIT0oODc3MiZuLmZsYWdzKTtpZigwIT0oODc3MiZuLnN1YnRyZWVGbGFncyl8fHQpe3Q9TC5ULEwuVD1udWxsO3ZhciByPVQucDtULnA9Mjt2YXIgbz1sUjtsUnw9NDt0cnl7bGwoZSxuLmFsdGVybmF0ZSxuKX1maW5hbGx5e2xSPW8sVC5wPXIsTC5UPXR9fWw0PTN9fWZ1bmN0aW9uIHNPKCl7aWYoND09PWw0fHwzPT09bDQpe2w0PTAsZXQoKTt2YXIgZT1sNSxuPWwzLHQ9bDYscj1sNzswIT0oMTAyNTYmbi5zdWJ0cmVlRmxhZ3MpfHwwIT0oMTAyNTYmbi5mbGFncyk/bDQ9NToobDQ9MCxsMz1sNT1udWxsLHNDKGUsZS5wZW5kaW5nTGFuZXMpKTt2YXIgbz1lLnBlbmRpbmdMYW5lcztpZigwPT09byYmKGwyPW51bGwpLGV6KHQpLG49bi5zdGF0ZU5vZGUsZXAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGVwLm9uQ29tbWl0RmliZXJSb290KXRyeXtlcC5vbkNvbW1pdEZpYmVyUm9vdChlZixuLHZvaWQgMCwxMjg9PSgxMjgmbi5jdXJyZW50LmZsYWdzKSl9Y2F0Y2goZSl7fWlmKG51bGwhPT1yKXtuPUwuVCxvPVQucCxULnA9MixMLlQ9bnVsbDt0cnl7Zm9yKHZhciBhPWUub25SZWNvdmVyYWJsZUVycm9yLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGw9cltpXTthKGwudmFsdWUse2NvbXBvbmVudFN0YWNrOmwuc3RhY2t9KX19ZmluYWxseXtMLlQ9bixULnA9b319MCE9KDMmbDYpJiZzUygpLHNVKGUpLG89ZS5wZW5kaW5nTGFuZXMsMCE9KDQxOTQwOTAmdCkmJjAhPSg0MiZvKT9lPT09c24/c2UrKzooc2U9MCxzbj1lKTpzZT0wLHNWKDAsITEpfX1mdW5jdGlvbiBzQyhlLG4pezA9PShlLnBvb2xlZENhY2hlTGFuZXMmPW4pJiZudWxsIT0obj1lLnBvb2xlZENhY2hlKSYmKGUucG9vbGVkQ2FjaGU9bnVsbCxyMihuKSl9ZnVuY3Rpb24gc1MoZSl7cmV0dXJuIHNrKCksc0EoKSxzTygpLHNFKGUpfWZ1bmN0aW9uIHNFKCl7aWYoNSE9PWw0KXJldHVybiExO3ZhciBlPWw1LG49bDk7bDk9MDt2YXIgdD1leihsNikscj1MLlQsbz1ULnA7dHJ5e1QucD0zMj50PzMyOnQsTC5UPW51bGwsdD1sOCxsOD1udWxsO3ZhciBhPWw1LGk9bDY7aWYobDQ9MCxsMz1sNT1udWxsLGw2PTAsMCE9KDYmbFIpKXRocm93IEVycm9yKGwoMzMxKSk7dmFyIHM9bFI7aWYobFJ8PTQsbFAoYS5jdXJyZW50KSxsayhhLGEuY3VycmVudCxpLHQpLGxSPXMsc1YoMCwhMSksZXAmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGVwLm9uUG9zdENvbW1pdEZpYmVyUm9vdCl0cnl7ZXAub25Qb3N0Q29tbWl0RmliZXJSb290KGVmLGEpfWNhdGNoKGUpe31yZXR1cm4hMH1maW5hbGx5e1QucD1vLEwuVD1yLHNDKGUsbil9fWZ1bmN0aW9uIHNfKGUsbix0KXtuPXJ1KHQsbiksbj1pbShlLnN0YXRlTm9kZSxuLDIpLG51bGwhPT0oZT1vTyhlLG4sMikpJiYoZUMoZSwyKSxzVShlKSl9ZnVuY3Rpb24gc1AoZSxuLHQpe2lmKDM9PT1lLnRhZylzXyhlLGUsdCk7ZWxzZSBmb3IoO251bGwhPT1uOyl7aWYoMz09PW4udGFnKXtzXyhuLGUsdCk7YnJlYWt9aWYoMT09PW4udGFnKXt2YXIgcj1uLnN0YXRlTm9kZTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiByLmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PWwyfHwhbDIuaGFzKHIpKSl7ZT1ydSh0LGUpLG51bGwhPT0ocj1vTyhuLHQ9aXYoMiksMikpJiYoaWIodCxyLG4sZSksZUMociwyKSxzVShyKSk7YnJlYWt9fW49bi5yZXR1cm59fWZ1bmN0aW9uIHN6KGUsbix0KXt2YXIgcj1lLnBpbmdDYWNoZTtpZihudWxsPT09cil7cj1lLnBpbmdDYWNoZT1uZXcgbFQ7dmFyIG89bmV3IFNldDtyLnNldChuLG8pfWVsc2Ugdm9pZCAwPT09KG89ci5nZXQobikpJiYobz1uZXcgU2V0LHIuc2V0KG4sbykpO28uaGFzKHQpfHwobFU9ITAsby5hZGQodCksZT1zTC5iaW5kKG51bGwsZSxuLHQpLG4udGhlbihlLGUpKX1mdW5jdGlvbiBzTChlLG4sdCl7dmFyIHI9ZS5waW5nQ2FjaGU7bnVsbCE9PXImJnIuZGVsZXRlKG4pLGUucGluZ2VkTGFuZXN8PWUuc3VzcGVuZGVkTGFuZXMmdCxlLndhcm1MYW5lcyY9fnQsbE49PT1lJiYobEImdCk9PT10JiYoND09PWxxfHwzPT09bHEmJigweDNjMDAwMDAmbEIpPT09bEImJjMwMD5lcigpLWxKPzA9PSgyJmxSKSYmc3UoZSwwKTpsWnw9dCxsWD09PWxCJiYobFg9MCkpLHNVKGUpfWZ1bmN0aW9uIHNUKGUsbil7MD09PW4mJihuPWVBKCkpLG51bGwhPT0oZT10MyhlLG4pKSYmKGVDKGUsbiksc1UoZSkpfWZ1bmN0aW9uIHNSKGUpe3ZhciBuPWUubWVtb2l6ZWRTdGF0ZSx0PTA7bnVsbCE9PW4mJih0PW4ucmV0cnlMYW5lKSxzVChlLHQpfWZ1bmN0aW9uIHNOKGUsbil7dmFyIHQ9MDtzd2l0Y2goZS50YWcpe2Nhc2UgMzE6Y2FzZSAxMzp2YXIgcj1lLnN0YXRlTm9kZSxvPWUubWVtb2l6ZWRTdGF0ZTtudWxsIT09byYmKHQ9by5yZXRyeUxhbmUpO2JyZWFrO2Nhc2UgMTk6cj1lLnN0YXRlTm9kZTticmVhaztjYXNlIDIyOnI9ZS5zdGF0ZU5vZGUuX3JldHJ5Q2FjaGU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihsKDMxNCkpfW51bGwhPT1yJiZyLmRlbGV0ZShuKSxzVChlLHQpfXZhciBzRD1udWxsLHNCPW51bGwsc009ITEsc0k9ITEsc0g9ITEsc0Y9MDtmdW5jdGlvbiBzVShlKXtlIT09c0ImJm51bGw9PT1lLm5leHQmJihudWxsPT09c0I/c0Q9c0I9ZTpzQj1zQi5uZXh0PWUpLHNJPSEwLHNNfHwoc009ITAsY3goZnVuY3Rpb24oKXswIT0oNiZsUik/SihlYSxzcSk6c1coKX0pKX1mdW5jdGlvbiBzVihlLG4pe2lmKCFzSCYmc0kpe3NIPSEwO2RvIGZvcih2YXIgdD0hMSxyPXNEO251bGwhPT1yOyl7aWYoIW4paWYoMCE9PWUpe3ZhciBvPXIucGVuZGluZ0xhbmVzO2lmKDA9PT1vKXZhciBhPTA7ZWxzZXt2YXIgaT1yLnN1c3BlbmRlZExhbmVzLGw9ci5waW5nZWRMYW5lczthPTB4YzAwMDA5NSYoYT0oMTw8MzEtZWcoNDJ8ZSkrMSktMSYobyZ+KGkmfmwpKSk/MHhjMDAwMDk1JmF8MTphPzJ8YTowfTAhPT1hJiYodD0hMCxzWShyLGEpKX1lbHNlIGE9bEIsMD09KDMmKGE9ZXcocixyPT09bE4/YTowLG51bGwhPT1yLmNhbmNlbFBlbmRpbmdDb21taXR8fC0xIT09ci50aW1lb3V0SGFuZGxlKSkpfHxlaihyLGEpfHwodD0hMCxzWShyLGEpKTtyPXIubmV4dH13aGlsZSh0KTtzSD0hMX19ZnVuY3Rpb24gc3EoKXtzVygpfWZ1bmN0aW9uIHNXKCl7c0k9c009ITE7dmFyIGUsbj0wOzA9PT1zRnx8KChlPXdpbmRvdy5ldmVudCkmJlwicG9wc3RhdGVcIj09PWUudHlwZT9lPT09Y218fChjbT1lLDApOihjbT1udWxsLDEpKXx8KG49c0YpO2Zvcih2YXIgdD1lcigpLHI9bnVsbCxvPXNEO251bGwhPT1vOyl7dmFyIGE9by5uZXh0LGk9cyQobyx0KTswPT09aT8oby5uZXh0PW51bGwsbnVsbD09PXI/c0Q9YTpyLm5leHQ9YSxudWxsPT09YSYmKHNCPXIpKToocj1vLCgwIT09bnx8MCE9KDMmaSkpJiYoc0k9ITApKSxvPWF9MCE9PWw0JiY1IT09bDR8fHNWKG4sITEpLDAhPT1zRiYmKHNGPTApfWZ1bmN0aW9uIHMkKGUsbil7Zm9yKHZhciB0PWUuc3VzcGVuZGVkTGFuZXMscj1lLnBpbmdlZExhbmVzLG89ZS5leHBpcmF0aW9uVGltZXMsYT0tMHgzYzAwMDAxJmUucGVuZGluZ0xhbmVzOzA8YTspe3ZhciBpPTMxLWVnKGEpLGw9MTw8aSxzPW9baV07LTE9PT1zPygwPT0obCZ0KXx8MCE9KGwmcikpJiYob1tpXT1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDg6Y2FzZSA2NDpyZXR1cm4gbisyNTA7Y2FzZSAxNjpjYXNlIDMyOmNhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOnJldHVybiBuKzVlMztkZWZhdWx0OnJldHVybiAtMX19KGwsbikpOnM8PW4mJihlLmV4cGlyZWRMYW5lc3w9bCksYSY9fmx9aWYobj1sTix0PWxCLHQ9ZXcoZSxlPT09bj90OjAsbnVsbCE9PWUuY2FuY2VsUGVuZGluZ0NvbW1pdHx8LTEhPT1lLnRpbWVvdXRIYW5kbGUpLHI9ZS5jYWxsYmFja05vZGUsMD09PXR8fGU9PT1uJiYoMj09PWxNfHw5PT09bE0pfHxudWxsIT09ZS5jYW5jZWxQZW5kaW5nQ29tbWl0KXJldHVybiBudWxsIT09ciYmbnVsbCE9PXImJmVlKHIpLGUuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja1ByaW9yaXR5PTA7aWYoMD09KDMmdCl8fGVqKGUsdCkpe2lmKChuPXQmLXQpPT09ZS5jYWxsYmFja1ByaW9yaXR5KXJldHVybiBuO3N3aXRjaChudWxsIT09ciYmZWUociksZXoodCkpe2Nhc2UgMjpjYXNlIDg6dD1laTticmVhaztjYXNlIDMyOmRlZmF1bHQ6dD1lbDticmVhaztjYXNlIDB4MTAwMDAwMDA6dD1lY31yZXR1cm4gdD1KKHQscj1zWi5iaW5kKG51bGwsZSkpLGUuY2FsbGJhY2tQcmlvcml0eT1uLGUuY2FsbGJhY2tOb2RlPXQsbn1yZXR1cm4gbnVsbCE9PXImJm51bGwhPT1yJiZlZShyKSxlLmNhbGxiYWNrUHJpb3JpdHk9MixlLmNhbGxiYWNrTm9kZT1udWxsLDJ9ZnVuY3Rpb24gc1ooZSxuKXtpZigwIT09bDQmJjUhPT1sNClyZXR1cm4gZS5jYWxsYmFja05vZGU9bnVsbCxlLmNhbGxiYWNrUHJpb3JpdHk9MCxudWxsO3ZhciB0PWUuY2FsbGJhY2tOb2RlO2lmKHNTKCEwKSYmZS5jYWxsYmFja05vZGUhPT10KXJldHVybiBudWxsO3ZhciByPWxCO3JldHVybiAwPT09KHI9ZXcoZSxlPT09bE4/cjowLG51bGwhPT1lLmNhbmNlbFBlbmRpbmdDb21taXR8fC0xIT09ZS50aW1lb3V0SGFuZGxlKSk/bnVsbDooc2EoZSxyLG4pLHMkKGUsZXIoKSksbnVsbCE9ZS5jYWxsYmFja05vZGUmJmUuY2FsbGJhY2tOb2RlPT09dD9zWi5iaW5kKG51bGwsZSk6bnVsbCl9ZnVuY3Rpb24gc1koZSxuKXtpZihzUygpKXJldHVybiBudWxsO3NhKGUsbiwhMCl9ZnVuY3Rpb24gc1goKXtpZigwPT09c0Ype3ZhciBlPXIzO3NGPTAhPT1lP2U6ZWsoKX1yZXR1cm4gc0Z9ZnVuY3Rpb24gc0soZSl7cmV0dXJuIG51bGw9PWV8fFwic3ltYm9sXCI9PXR5cGVvZiBlfHxcImJvb2xlYW5cIj09dHlwZW9mIGU/bnVsbDpcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6bmcoXCJcIitlKX1mdW5jdGlvbiBzUShlLG4pe3ZhciB0PW4ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7cmV0dXJuIHQubmFtZT1uLm5hbWUsdC52YWx1ZT1uLnZhbHVlLGUuaWQmJnQuc2V0QXR0cmlidXRlKFwiZm9ybVwiLGUuaWQpLG4ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxuKSxlPW5ldyBGb3JtRGF0YShlKSx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksZX1mb3IodmFyIHNHPTA7c0c8dEsubGVuZ3RoO3NHKyspe3ZhciBzSj10S1tzR107dFEoc0oudG9Mb3dlckNhc2UoKSxcIm9uXCIrKHNKWzBdLnRvVXBwZXJDYXNlKCkrc0ouc2xpY2UoMSkpKX10USh0VSxcIm9uQW5pbWF0aW9uRW5kXCIpLHRRKHRWLFwib25BbmltYXRpb25JdGVyYXRpb25cIiksdFEodHEsXCJvbkFuaW1hdGlvblN0YXJ0XCIpLHRRKFwiZGJsY2xpY2tcIixcIm9uRG91YmxlQ2xpY2tcIiksdFEoXCJmb2N1c2luXCIsXCJvbkZvY3VzXCIpLHRRKFwiZm9jdXNvdXRcIixcIm9uQmx1clwiKSx0USh0VyxcIm9uVHJhbnNpdGlvblJ1blwiKSx0USh0JCxcIm9uVHJhbnNpdGlvblN0YXJ0XCIpLHRRKHRaLFwib25UcmFuc2l0aW9uQ2FuY2VsXCIpLHRRKHRZLFwib25UcmFuc2l0aW9uRW5kXCIpLGVHKFwib25Nb3VzZUVudGVyXCIsW1wibW91c2VvdXRcIixcIm1vdXNlb3ZlclwiXSksZUcoXCJvbk1vdXNlTGVhdmVcIixbXCJtb3VzZW91dFwiLFwibW91c2VvdmVyXCJdKSxlRyhcIm9uUG9pbnRlckVudGVyXCIsW1wicG9pbnRlcm91dFwiLFwicG9pbnRlcm92ZXJcIl0pLGVHKFwib25Qb2ludGVyTGVhdmVcIixbXCJwb2ludGVyb3V0XCIsXCJwb2ludGVyb3ZlclwiXSksZVEoXCJvbkNoYW5nZVwiLFwiY2hhbmdlIGNsaWNrIGZvY3VzaW4gZm9jdXNvdXQgaW5wdXQga2V5ZG93biBrZXl1cCBzZWxlY3Rpb25jaGFuZ2VcIi5zcGxpdChcIiBcIikpLGVRKFwib25TZWxlY3RcIixcImZvY3Vzb3V0IGNvbnRleHRtZW51IGRyYWdlbmQgZm9jdXNpbiBrZXlkb3duIGtleXVwIG1vdXNlZG93biBtb3VzZXVwIHNlbGVjdGlvbmNoYW5nZVwiLnNwbGl0KFwiIFwiKSksZVEoXCJvbkJlZm9yZUlucHV0XCIsW1wiY29tcG9zaXRpb25lbmRcIixcImtleXByZXNzXCIsXCJ0ZXh0SW5wdXRcIixcInBhc3RlXCJdKSxlUShcIm9uQ29tcG9zaXRpb25FbmRcIixcImNvbXBvc2l0aW9uZW5kIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duXCIuc3BsaXQoXCIgXCIpKSxlUShcIm9uQ29tcG9zaXRpb25TdGFydFwiLFwiY29tcG9zaXRpb25zdGFydCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKSksZVEoXCJvbkNvbXBvc2l0aW9uVXBkYXRlXCIsXCJjb21wb3NpdGlvbnVwZGF0ZSBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKSk7dmFyIHMwPVwiYWJvcnQgY2FucGxheSBjYW5wbGF5dGhyb3VnaCBkdXJhdGlvbmNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBsb2FkZWRkYXRhIGxvYWRlZG1ldGFkYXRhIGxvYWRzdGFydCBwYXVzZSBwbGF5IHBsYXlpbmcgcHJvZ3Jlc3MgcmF0ZWNoYW5nZSByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmdcIi5zcGxpdChcIiBcIiksczE9bmV3IFNldChcImJlZm9yZXRvZ2dsZSBjYW5jZWwgY2xvc2UgaW52YWxpZCBsb2FkIHNjcm9sbCBzY3JvbGxlbmQgdG9nZ2xlXCIuc3BsaXQoXCIgXCIpLmNvbmNhdChzMCkpO2Z1bmN0aW9uIHMyKGUsbil7bj0wIT0oNCZuKTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIHI9ZVt0XSxvPXIuZXZlbnQ7cj1yLmxpc3RlbmVycztlOnt2YXIgYT12b2lkIDA7aWYobilmb3IodmFyIGk9ci5sZW5ndGgtMTswPD1pO2ktLSl7dmFyIGw9cltpXSxzPWwuaW5zdGFuY2UsYz1sLmN1cnJlbnRUYXJnZXQ7aWYobD1sLmxpc3RlbmVyLHMhPT1hJiZvLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWsgZTthPWwsby5jdXJyZW50VGFyZ2V0PWM7dHJ5e2Eobyl9Y2F0Y2goZSl7dEcoZSl9by5jdXJyZW50VGFyZ2V0PW51bGwsYT1zfWVsc2UgZm9yKGk9MDtpPHIubGVuZ3RoO2krKyl7aWYocz0obD1yW2ldKS5pbnN0YW5jZSxjPWwuY3VycmVudFRhcmdldCxsPWwubGlzdGVuZXIscyE9PWEmJm8uaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVhayBlO2E9bCxvLmN1cnJlbnRUYXJnZXQ9Yzt0cnl7YShvKX1jYXRjaChlKXt0RyhlKX1vLmN1cnJlbnRUYXJnZXQ9bnVsbCxhPXN9fX19ZnVuY3Rpb24gczQoZSxuKXt2YXIgdD1uW2VNXTt2b2lkIDA9PT10JiYodD1uW2VNXT1uZXcgU2V0KTt2YXIgcj1lK1wiX19idWJibGVcIjt0LmhhcyhyKXx8KHM5KG4sZSwyLCExKSx0LmFkZChyKSl9ZnVuY3Rpb24gczUoZSxuLHQpe3ZhciByPTA7biYmKHJ8PTQpLHM5KHQsZSxyLG4pfXZhciBzMz1cIl9yZWFjdExpc3RlbmluZ1wiK01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO2Z1bmN0aW9uIHM2KGUpe2lmKCFlW3MzXSl7ZVtzM109ITAsZVguZm9yRWFjaChmdW5jdGlvbihuKXtcInNlbGVjdGlvbmNoYW5nZVwiIT09biYmKHMxLmhhcyhuKXx8czUobiwhMSxlKSxzNShuLCEwLGUpKX0pO3ZhciBuPTk9PT1lLm5vZGVUeXBlP2U6ZS5vd25lckRvY3VtZW50O251bGw9PT1ufHxuW3MzXXx8KG5bczNdPSEwLHM1KFwic2VsZWN0aW9uY2hhbmdlXCIsITEsbikpfX1mdW5jdGlvbiBzOShlLG4sdCxyKXtzd2l0Y2godXUobikpe2Nhc2UgMjp2YXIgbz11bzticmVhaztjYXNlIDg6bz11YTticmVhaztkZWZhdWx0Om89dWl9dD1vLmJpbmQobnVsbCxuLHQsZSksbz12b2lkIDAsbkMmJihcInRvdWNoc3RhcnRcIj09PW58fFwidG91Y2htb3ZlXCI9PT1ufHxcIndoZWVsXCI9PT1uKSYmKG89ITApLHI/dm9pZCAwIT09bz9lLmFkZEV2ZW50TGlzdGVuZXIobix0LHtjYXB0dXJlOiEwLHBhc3NpdmU6b30pOmUuYWRkRXZlbnRMaXN0ZW5lcihuLHQsITApOnZvaWQgMCE9PW8/ZS5hZGRFdmVudExpc3RlbmVyKG4sdCx7cGFzc2l2ZTpvfSk6ZS5hZGRFdmVudExpc3RlbmVyKG4sdCwhMSl9ZnVuY3Rpb24gczgoZSxuLHQscixvKXt2YXIgYT1yO2lmKDA9PSgxJm4pJiYwPT0oMiZuKSYmbnVsbCE9PXIpZTpmb3IoOzspe2lmKG51bGw9PT1yKXJldHVybjt2YXIgaT1yLnRhZztpZigzPT09aXx8ND09PWkpe3ZhciBsPXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87aWYobD09PW8pYnJlYWs7aWYoND09PWkpZm9yKGk9ci5yZXR1cm47bnVsbCE9PWk7KXt2YXIgYz1pLnRhZztpZigoMz09PWN8fDQ9PT1jKSYmaS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbz09PW8pcmV0dXJuO2k9aS5yZXR1cm59Zm9yKDtudWxsIT09bDspe2lmKG51bGw9PT0oaT1lcShsKSkpcmV0dXJuO2lmKDU9PT0oYz1pLnRhZyl8fDY9PT1jfHwyNj09PWN8fDI3PT09Yyl7cj1hPWk7Y29udGludWUgZX1sPWwucGFyZW50Tm9kZX19cj1yLnJldHVybn1uayhmdW5jdGlvbigpe3ZhciByPWEsbz1uYih0KSxpPVtdO2U6e3ZhciBsPXRYLmdldChlKTtpZih2b2lkIDAhPT1sKXt2YXIgYz1uVSx1PWU7c3dpdGNoKGUpe2Nhc2VcImtleXByZXNzXCI6aWYoMD09PW5MKHQpKWJyZWFrIGU7Y2FzZVwia2V5ZG93blwiOmNhc2VcImtleXVwXCI6Yz1uNDticmVhaztjYXNlXCJmb2N1c2luXCI6dT1cImZvY3VzXCIsYz1uWTticmVhaztjYXNlXCJmb2N1c291dFwiOnU9XCJibHVyXCIsYz1uWTticmVhaztjYXNlXCJiZWZvcmVibHVyXCI6Y2FzZVwiYWZ0ZXJibHVyXCI6Yz1uWTticmVhaztjYXNlXCJjbGlja1wiOmlmKDI9PT10LmJ1dHRvbilicmVhayBlO2Nhc2VcImF1eGNsaWNrXCI6Y2FzZVwiZGJsY2xpY2tcIjpjYXNlXCJtb3VzZWRvd25cIjpjYXNlXCJtb3VzZW1vdmVcIjpjYXNlXCJtb3VzZXVwXCI6Y2FzZVwibW91c2VvdXRcIjpjYXNlXCJtb3VzZW92ZXJcIjpjYXNlXCJjb250ZXh0bWVudVwiOmM9biQ7YnJlYWs7Y2FzZVwiZHJhZ1wiOmNhc2VcImRyYWdlbmRcIjpjYXNlXCJkcmFnZW50ZXJcIjpjYXNlXCJkcmFnZXhpdFwiOmNhc2VcImRyYWdsZWF2ZVwiOmNhc2VcImRyYWdvdmVyXCI6Y2FzZVwiZHJhZ3N0YXJ0XCI6Y2FzZVwiZHJvcFwiOmM9blo7YnJlYWs7Y2FzZVwidG91Y2hjYW5jZWxcIjpjYXNlXCJ0b3VjaGVuZFwiOmNhc2VcInRvdWNobW92ZVwiOmNhc2VcInRvdWNoc3RhcnRcIjpjPW4zO2JyZWFrO2Nhc2UgdFU6Y2FzZSB0VjpjYXNlIHRxOmM9blg7YnJlYWs7Y2FzZSB0WTpjPW42O2JyZWFrO2Nhc2VcInNjcm9sbFwiOmNhc2VcInNjcm9sbGVuZFwiOmM9bnE7YnJlYWs7Y2FzZVwid2hlZWxcIjpjPW45O2JyZWFrO2Nhc2VcImNvcHlcIjpjYXNlXCJjdXRcIjpjYXNlXCJwYXN0ZVwiOmM9bks7YnJlYWs7Y2FzZVwiZ290cG9pbnRlcmNhcHR1cmVcIjpjYXNlXCJsb3N0cG9pbnRlcmNhcHR1cmVcIjpjYXNlXCJwb2ludGVyY2FuY2VsXCI6Y2FzZVwicG9pbnRlcmRvd25cIjpjYXNlXCJwb2ludGVybW92ZVwiOmNhc2VcInBvaW50ZXJvdXRcIjpjYXNlXCJwb2ludGVyb3ZlclwiOmNhc2VcInBvaW50ZXJ1cFwiOmM9bjU7YnJlYWs7Y2FzZVwidG9nZ2xlXCI6Y2FzZVwiYmVmb3JldG9nZ2xlXCI6Yz1uOH12YXIgZD0wIT0oNCZuKSxmPSFkJiYoXCJzY3JvbGxcIj09PWV8fFwic2Nyb2xsZW5kXCI9PT1lKSxwPWQ/bnVsbCE9PWw/bCtcIkNhcHR1cmVcIjpudWxsOmw7ZD1bXTtmb3IodmFyIGgsZz1yO251bGwhPT1nOyl7dmFyIG09ZztpZihoPW0uc3RhdGVOb2RlLDUhPT0obT1tLnRhZykmJjI2IT09bSYmMjchPT1tfHxudWxsPT09aHx8bnVsbD09PXB8fG51bGwhPShtPW5BKGcscCkpJiZkLnB1c2goczcoZyxtLGgpKSxmKWJyZWFrO2c9Zy5yZXR1cm59MDxkLmxlbmd0aCYmKGw9bmV3IGMobCx1LG51bGwsdCxvKSxpLnB1c2goe2V2ZW50OmwsbGlzdGVuZXJzOmR9KSl9fWlmKDA9PSg3Jm4pKXtpZigobD1cIm1vdXNlb3ZlclwiPT09ZXx8XCJwb2ludGVyb3ZlclwiPT09ZSxjPVwibW91c2VvdXRcIj09PWV8fFwicG9pbnRlcm91dFwiPT09ZSwhKGwmJnQhPT1udiYmKHU9dC5yZWxhdGVkVGFyZ2V0fHx0LmZyb21FbGVtZW50KSYmKGVxKHUpfHx1W2VCXSkpKSYmKGN8fGwpJiYobD1vLndpbmRvdz09PW8/bzoobD1vLm93bmVyRG9jdW1lbnQpP2wuZGVmYXVsdFZpZXd8fGwucGFyZW50V2luZG93OndpbmRvdyxjPyh1PXQucmVsYXRlZFRhcmdldHx8dC50b0VsZW1lbnQsYz1yLG51bGwhPT0odT11P2VxKHUpOm51bGwpJiYoZj1zKHUpLGQ9dS50YWcsdSE9PWZ8fDUhPT1kJiYyNyE9PWQmJjYhPT1kKSYmKHU9bnVsbCkpOihjPW51bGwsdT1yKSxjIT09dSkpe2lmKGQ9biQsbT1cIm9uTW91c2VMZWF2ZVwiLHA9XCJvbk1vdXNlRW50ZXJcIixnPVwibW91c2VcIiwoXCJwb2ludGVyb3V0XCI9PT1lfHxcInBvaW50ZXJvdmVyXCI9PT1lKSYmKGQ9bjUsbT1cIm9uUG9pbnRlckxlYXZlXCIscD1cIm9uUG9pbnRlckVudGVyXCIsZz1cInBvaW50ZXJcIiksZj1udWxsPT1jP2w6ZSQoYyksaD1udWxsPT11P2w6ZSQodSksKGw9bmV3IGQobSxnK1wibGVhdmVcIixjLHQsbykpLnRhcmdldD1mLGwucmVsYXRlZFRhcmdldD1oLG09bnVsbCxlcShvKT09PXImJigoZD1uZXcgZChwLGcrXCJlbnRlclwiLHUsdCxvKSkudGFyZ2V0PWgsZC5yZWxhdGVkVGFyZ2V0PWYsbT1kKSxmPW0sYyYmdSluOntmb3IoZD1jbixwPWMsZz11LGg9MCxtPXA7bTttPWQobSkpaCsrO209MDtmb3IodmFyIHYsYj1nO2I7Yj1kKGIpKW0rKztmb3IoOzA8aC1tOylwPWQocCksaC0tO2Zvcig7MDxtLWg7KWc9ZChnKSxtLS07Zm9yKDtoLS07KXtpZihwPT09Z3x8bnVsbCE9PWcmJnA9PT1nLmFsdGVybmF0ZSl7ZD1wO2JyZWFrIG59cD1kKHApLGc9ZChnKX1kPW51bGx9ZWxzZSBkPW51bGw7bnVsbCE9PWMmJmN0KGksbCxjLGQsITEpLG51bGwhPT11JiZudWxsIT09ZiYmY3QoaSxmLHUsZCwhMCl9ZTp7aWYoXCJzZWxlY3RcIj09PShjPShsPXI/ZSQocik6d2luZG93KS5ub2RlTmFtZSYmbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXx8XCJpbnB1dFwiPT09YyYmXCJmaWxlXCI9PT1sLnR5cGUpdmFyIHk9dGc7ZWxzZSBpZih0YyhsKSlpZih0bSl5PXRBO2Vsc2V7eT10ajt2YXIgeD10d31lbHNlKGM9bC5ub2RlTmFtZSkmJlwiaW5wdXRcIj09PWMudG9Mb3dlckNhc2UoKSYmKFwiY2hlY2tib3hcIj09PWwudHlwZXx8XCJyYWRpb1wiPT09bC50eXBlKT95PXRrOnImJm5mKHIuZWxlbWVudFR5cGUpJiYoeT10Zyk7aWYoeSYmKHk9eShlLHIpKSl7dHUoaSx5LHQsbyk7YnJlYWsgZX14JiZ4KGUsbCxyKSxcImZvY3Vzb3V0XCI9PT1lJiZyJiZcIm51bWJlclwiPT09bC50eXBlJiZudWxsIT1yLm1lbW9pemVkUHJvcHMudmFsdWUmJm5vKGwsXCJudW1iZXJcIixsLnZhbHVlKX1zd2l0Y2goeD1yP2UkKHIpOndpbmRvdyxlKXtjYXNlXCJmb2N1c2luXCI6KHRjKHgpfHxcInRydWVcIj09PXguY29udGVudEVkaXRhYmxlKSYmKHRMPXgsdFQ9cix0Uj1udWxsKTticmVhaztjYXNlXCJmb2N1c291dFwiOnRSPXRUPXRMPW51bGw7YnJlYWs7Y2FzZVwibW91c2Vkb3duXCI6dE49ITA7YnJlYWs7Y2FzZVwiY29udGV4dG1lbnVcIjpjYXNlXCJtb3VzZXVwXCI6Y2FzZVwiZHJhZ2VuZFwiOnROPSExLHREKGksdCxvKTticmVhaztjYXNlXCJzZWxlY3Rpb25jaGFuZ2VcIjppZih0eilicmVhaztjYXNlXCJrZXlkb3duXCI6Y2FzZVwia2V5dXBcIjp0RChpLHQsbyl9aWYodGUpbjp7c3dpdGNoKGUpe2Nhc2VcImNvbXBvc2l0aW9uc3RhcnRcIjp2YXIgdz1cIm9uQ29tcG9zaXRpb25TdGFydFwiO2JyZWFrIG47Y2FzZVwiY29tcG9zaXRpb25lbmRcIjp3PVwib25Db21wb3NpdGlvbkVuZFwiO2JyZWFrIG47Y2FzZVwiY29tcG9zaXRpb251cGRhdGVcIjp3PVwib25Db21wb3NpdGlvblVwZGF0ZVwiO2JyZWFrIG59dz12b2lkIDB9ZWxzZSB0bD90YShlLHQpJiYodz1cIm9uQ29tcG9zaXRpb25FbmRcIik6XCJrZXlkb3duXCI9PT1lJiYyMjk9PT10LmtleUNvZGUmJih3PVwib25Db21wb3NpdGlvblN0YXJ0XCIpO3cmJih0ciYmXCJrb1wiIT09dC5sb2NhbGUmJih0bHx8XCJvbkNvbXBvc2l0aW9uU3RhcnRcIiE9PXc/XCJvbkNvbXBvc2l0aW9uRW5kXCI9PT13JiZ0bCYmKHY9bnooKSk6KG5fPVwidmFsdWVcImluKG5FPW8pP25FLnZhbHVlOm5FLnRleHRDb250ZW50LHRsPSEwKSksMDwoeD1jZShyLHcpKS5sZW5ndGgmJih3PW5ldyBuUSh3LGUsbnVsbCx0LG8pLGkucHVzaCh7ZXZlbnQ6dyxsaXN0ZW5lcnM6eH0pLHY/dy5kYXRhPXY6bnVsbCE9PSh2PXRpKHQpKSYmKHcuZGF0YT12KSkpLCh2PXR0P2Z1bmN0aW9uKGUsbil7c3dpdGNoKGUpe2Nhc2VcImNvbXBvc2l0aW9uZW5kXCI6cmV0dXJuIHRpKG4pO2Nhc2VcImtleXByZXNzXCI6aWYoMzIhPT1uLndoaWNoKXJldHVybiBudWxsO3JldHVybiB0bz0hMCxcIiBcIjtjYXNlXCJ0ZXh0SW5wdXRcIjpyZXR1cm5cIiBcIj09PShlPW4uZGF0YSkmJnRvP251bGw6ZTtkZWZhdWx0OnJldHVybiBudWxsfX0oZSx0KTpmdW5jdGlvbihlLG4pe2lmKHRsKXJldHVyblwiY29tcG9zaXRpb25lbmRcIj09PWV8fCF0ZSYmdGEoZSxuKT8oZT1ueigpLG5QPW5fPW5FPW51bGwsdGw9ITEsZSk6bnVsbDtzd2l0Y2goZSl7Y2FzZVwicGFzdGVcIjpkZWZhdWx0OnJldHVybiBudWxsO2Nhc2VcImtleXByZXNzXCI6aWYoIShuLmN0cmxLZXl8fG4uYWx0S2V5fHxuLm1ldGFLZXkpfHxuLmN0cmxLZXkmJm4uYWx0S2V5KXtpZihuLmNoYXImJjE8bi5jaGFyLmxlbmd0aClyZXR1cm4gbi5jaGFyO2lmKG4ud2hpY2gpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUobi53aGljaCl9cmV0dXJuIG51bGw7Y2FzZVwiY29tcG9zaXRpb25lbmRcIjpyZXR1cm4gdHImJlwia29cIiE9PW4ubG9jYWxlP251bGw6bi5kYXRhfX0oZSx0KSkmJjA8KHc9Y2UocixcIm9uQmVmb3JlSW5wdXRcIikpLmxlbmd0aCYmKHg9bmV3IG5RKFwib25CZWZvcmVJbnB1dFwiLFwiYmVmb3JlaW5wdXRcIixudWxsLHQsbyksaS5wdXNoKHtldmVudDp4LGxpc3RlbmVyczp3fSkseC5kYXRhPXYpO3ZhciBqPWU7aWYoXCJzdWJtaXRcIj09PWomJnImJnIuc3RhdGVOb2RlPT09byl7dmFyIGs9c0soKG9bZURdfHxudWxsKS5hY3Rpb24pLEE9dC5zdWJtaXR0ZXI7QSYmbnVsbCE9PShqPShqPUFbZURdfHxudWxsKT9zSyhqLmZvcm1BY3Rpb24pOkEuZ2V0QXR0cmlidXRlKFwiZm9ybUFjdGlvblwiKSkmJihrPWosQT1udWxsKTt2YXIgTz1uZXcgblUoXCJhY3Rpb25cIixcImFjdGlvblwiLG51bGwsdCxvKTtpLnB1c2goe2V2ZW50Ok8sbGlzdGVuZXJzOlt7aW5zdGFuY2U6bnVsbCxsaXN0ZW5lcjpmdW5jdGlvbigpe2lmKHQuZGVmYXVsdFByZXZlbnRlZCl7aWYoMCE9PXNGKXt2YXIgZT1BP3NRKG8sQSk6bmV3IEZvcm1EYXRhKG8pO2FLKHIse3BlbmRpbmc6ITAsZGF0YTplLG1ldGhvZDpvLm1ldGhvZCxhY3Rpb246a30sbnVsbCxlKX19ZWxzZVwiZnVuY3Rpb25cIj09dHlwZW9mIGsmJihPLnByZXZlbnREZWZhdWx0KCksYUsocix7cGVuZGluZzohMCxkYXRhOmU9QT9zUShvLEEpOm5ldyBGb3JtRGF0YShvKSxtZXRob2Q6by5tZXRob2QsYWN0aW9uOmt9LGssZSkpfSxjdXJyZW50VGFyZ2V0Om99XX0pfX1zMihpLG4pfSl9ZnVuY3Rpb24gczcoZSxuLHQpe3JldHVybntpbnN0YW5jZTplLGxpc3RlbmVyOm4sY3VycmVudFRhcmdldDp0fX1mdW5jdGlvbiBjZShlLG4pe2Zvcih2YXIgdD1uK1wiQ2FwdHVyZVwiLHI9W107bnVsbCE9PWU7KXt2YXIgbz1lLGE9by5zdGF0ZU5vZGU7aWYoNSE9PShvPW8udGFnKSYmMjYhPT1vJiYyNyE9PW98fG51bGw9PT1hfHwobnVsbCE9KG89bkEoZSx0KSkmJnIudW5zaGlmdChzNyhlLG8sYSkpLG51bGwhPShvPW5BKGUsbikpJiZyLnB1c2goczcoZSxvLGEpKSksMz09PWUudGFnKXJldHVybiByO2U9ZS5yZXR1cm59cmV0dXJuW119ZnVuY3Rpb24gY24oZSl7aWYobnVsbD09PWUpcmV0dXJuIG51bGw7ZG8gZT1lLnJldHVybjt3aGlsZShlJiY1IT09ZS50YWcmJjI3IT09ZS50YWcpO3JldHVybiBlfHxudWxsfWZ1bmN0aW9uIGN0KGUsbix0LHIsbyl7Zm9yKHZhciBhPW4uX3JlYWN0TmFtZSxpPVtdO251bGwhPT10JiZ0IT09cjspe3ZhciBsPXQscz1sLmFsdGVybmF0ZSxjPWwuc3RhdGVOb2RlO2lmKGw9bC50YWcsbnVsbCE9PXMmJnM9PT1yKWJyZWFrOzUhPT1sJiYyNiE9PWwmJjI3IT09bHx8bnVsbD09PWN8fChzPWMsbz9udWxsIT0oYz1uQSh0LGEpKSYmaS51bnNoaWZ0KHM3KHQsYyxzKSk6b3x8bnVsbCE9KGM9bkEodCxhKSkmJmkucHVzaChzNyh0LGMscykpKSx0PXQucmV0dXJufTAhPT1pLmxlbmd0aCYmZS5wdXNoKHtldmVudDpuLGxpc3RlbmVyczppfSl9dmFyIGNyPS9cXHJcXG4/L2csY289L1xcdTAwMDB8XFx1RkZGRC9nO2Z1bmN0aW9uIGNhKGUpe3JldHVybihcInN0cmluZ1wiPT10eXBlb2YgZT9lOlwiXCIrZSkucmVwbGFjZShjcixcIlxcblwiKS5yZXBsYWNlKGNvLFwiXCIpfWZ1bmN0aW9uIGNpKGUsbil7cmV0dXJuIG49Y2EobiksY2EoZSk9PT1ufWZ1bmN0aW9uIGNsKGUsbix0LHIsbyxhKXtzd2l0Y2godCl7Y2FzZVwiY2hpbGRyZW5cIjpcInN0cmluZ1wiPT10eXBlb2Ygcj9cImJvZHlcIj09PW58fFwidGV4dGFyZWFcIj09PW4mJlwiXCI9PT1yfHxucyhlLHIpOihcIm51bWJlclwiPT10eXBlb2Ygcnx8XCJiaWdpbnRcIj09dHlwZW9mIHIpJiZcImJvZHlcIiE9PW4mJm5zKGUsXCJcIityKTticmVhaztjYXNlXCJjbGFzc05hbWVcIjplNChlLFwiY2xhc3NcIixyKTticmVhaztjYXNlXCJ0YWJJbmRleFwiOmU0KGUsXCJ0YWJpbmRleFwiLHIpO2JyZWFrO2Nhc2VcImRpclwiOmNhc2VcInJvbGVcIjpjYXNlXCJ2aWV3Qm94XCI6Y2FzZVwid2lkdGhcIjpjYXNlXCJoZWlnaHRcIjplNChlLHQscik7YnJlYWs7Y2FzZVwic3R5bGVcIjpuZChlLHIsYSk7YnJlYWs7Y2FzZVwiZGF0YVwiOmlmKFwib2JqZWN0XCIhPT1uKXtlNChlLFwiZGF0YVwiLHIpO2JyZWFrfWNhc2VcInNyY1wiOmNhc2VcImhyZWZcIjppZihcIlwiPT09ciYmKFwiYVwiIT09bnx8XCJocmVmXCIhPT10KXx8bnVsbD09cnx8XCJmdW5jdGlvblwiPT10eXBlb2Ygcnx8XCJzeW1ib2xcIj09dHlwZW9mIHJ8fFwiYm9vbGVhblwiPT10eXBlb2Ygcil7ZS5yZW1vdmVBdHRyaWJ1dGUodCk7YnJlYWt9cj1uZyhcIlwiK3IpLGUuc2V0QXR0cmlidXRlKHQscik7YnJlYWs7Y2FzZVwiYWN0aW9uXCI6Y2FzZVwiZm9ybUFjdGlvblwiOmlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpe2Uuc2V0QXR0cmlidXRlKHQsXCJqYXZhc2NyaXB0OnRocm93IG5ldyBFcnJvcignQSBSZWFjdCBmb3JtIHdhcyB1bmV4cGVjdGVkbHkgc3VibWl0dGVkLiBJZiB5b3UgY2FsbGVkIGZvcm0uc3VibWl0KCkgbWFudWFsbHksIGNvbnNpZGVyIHVzaW5nIGZvcm0ucmVxdWVzdFN1Ym1pdCgpIGluc3RlYWQuIElmIHlvdVxcXFwncmUgdHJ5aW5nIHRvIHVzZSBldmVudC5zdG9wUHJvcGFnYXRpb24oKSBpbiBhIHN1Ym1pdCBldmVudCBoYW5kbGVyLCBjb25zaWRlciBhbHNvIGNhbGxpbmcgZXZlbnQucHJldmVudERlZmF1bHQoKS4nKVwiKTticmVha31pZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiYoXCJmb3JtQWN0aW9uXCI9PT10PyhcImlucHV0XCIhPT1uJiZjbChlLG4sXCJuYW1lXCIsby5uYW1lLG8sbnVsbCksY2woZSxuLFwiZm9ybUVuY1R5cGVcIixvLmZvcm1FbmNUeXBlLG8sbnVsbCksY2woZSxuLFwiZm9ybU1ldGhvZFwiLG8uZm9ybU1ldGhvZCxvLG51bGwpLGNsKGUsbixcImZvcm1UYXJnZXRcIixvLmZvcm1UYXJnZXQsbyxudWxsKSk6KGNsKGUsbixcImVuY1R5cGVcIixvLmVuY1R5cGUsbyxudWxsKSxjbChlLG4sXCJtZXRob2RcIixvLm1ldGhvZCxvLG51bGwpLGNsKGUsbixcInRhcmdldFwiLG8udGFyZ2V0LG8sbnVsbCkpKSxudWxsPT1yfHxcInN5bWJvbFwiPT10eXBlb2Ygcnx8XCJib29sZWFuXCI9PXR5cGVvZiByKXtlLnJlbW92ZUF0dHJpYnV0ZSh0KTticmVha31yPW5nKFwiXCIrciksZS5zZXRBdHRyaWJ1dGUodCxyKTticmVhaztjYXNlXCJvbkNsaWNrXCI6bnVsbCE9ciYmKGUub25jbGljaz1ubSk7YnJlYWs7Y2FzZVwib25TY3JvbGxcIjpudWxsIT1yJiZzNChcInNjcm9sbFwiLGUpO2JyZWFrO2Nhc2VcIm9uU2Nyb2xsRW5kXCI6bnVsbCE9ciYmczQoXCJzY3JvbGxlbmRcIixlKTticmVhaztjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOmlmKG51bGwhPXIpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiByfHwhKFwiX19odG1sXCJpbiByKSl0aHJvdyBFcnJvcihsKDYxKSk7aWYobnVsbCE9KHQ9ci5fX2h0bWwpKXtpZihudWxsIT1vLmNoaWxkcmVuKXRocm93IEVycm9yKGwoNjApKTtlLmlubmVySFRNTD10fX1icmVhaztjYXNlXCJtdWx0aXBsZVwiOmUubXVsdGlwbGU9ciYmXCJmdW5jdGlvblwiIT10eXBlb2YgciYmXCJzeW1ib2xcIiE9dHlwZW9mIHI7YnJlYWs7Y2FzZVwibXV0ZWRcIjplLm11dGVkPXImJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHImJlwic3ltYm9sXCIhPXR5cGVvZiByO2JyZWFrO2Nhc2VcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiOmNhc2VcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiOmNhc2VcImRlZmF1bHRWYWx1ZVwiOmNhc2VcImRlZmF1bHRDaGVja2VkXCI6Y2FzZVwiaW5uZXJIVE1MXCI6Y2FzZVwicmVmXCI6Y2FzZVwiYXV0b0ZvY3VzXCI6Y2FzZVwiaW5uZXJUZXh0XCI6Y2FzZVwidGV4dENvbnRlbnRcIjpicmVhaztjYXNlXCJ4bGlua0hyZWZcIjppZihudWxsPT1yfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiByfHxcImJvb2xlYW5cIj09dHlwZW9mIHJ8fFwic3ltYm9sXCI9PXR5cGVvZiByKXtlLnJlbW92ZUF0dHJpYnV0ZShcInhsaW5rOmhyZWZcIik7YnJlYWt9dD1uZyhcIlwiK3IpLGUuc2V0QXR0cmlidXRlTlMoXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXCJ4bGluazpocmVmXCIsdCk7YnJlYWs7Y2FzZVwiY29udGVudEVkaXRhYmxlXCI6Y2FzZVwic3BlbGxDaGVja1wiOmNhc2VcImRyYWdnYWJsZVwiOmNhc2VcInZhbHVlXCI6Y2FzZVwiYXV0b1JldmVyc2VcIjpjYXNlXCJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkXCI6Y2FzZVwiZm9jdXNhYmxlXCI6Y2FzZVwicHJlc2VydmVBbHBoYVwiOm51bGwhPXImJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHImJlwic3ltYm9sXCIhPXR5cGVvZiByP2Uuc2V0QXR0cmlidXRlKHQsXCJcIityKTplLnJlbW92ZUF0dHJpYnV0ZSh0KTticmVhaztjYXNlXCJpbmVydFwiOmNhc2VcImFsbG93RnVsbFNjcmVlblwiOmNhc2VcImFzeW5jXCI6Y2FzZVwiYXV0b1BsYXlcIjpjYXNlXCJjb250cm9sc1wiOmNhc2VcImRlZmF1bHRcIjpjYXNlXCJkZWZlclwiOmNhc2VcImRpc2FibGVkXCI6Y2FzZVwiZGlzYWJsZVBpY3R1cmVJblBpY3R1cmVcIjpjYXNlXCJkaXNhYmxlUmVtb3RlUGxheWJhY2tcIjpjYXNlXCJmb3JtTm9WYWxpZGF0ZVwiOmNhc2VcImhpZGRlblwiOmNhc2VcImxvb3BcIjpjYXNlXCJub01vZHVsZVwiOmNhc2VcIm5vVmFsaWRhdGVcIjpjYXNlXCJvcGVuXCI6Y2FzZVwicGxheXNJbmxpbmVcIjpjYXNlXCJyZWFkT25seVwiOmNhc2VcInJlcXVpcmVkXCI6Y2FzZVwicmV2ZXJzZWRcIjpjYXNlXCJzY29wZWRcIjpjYXNlXCJzZWFtbGVzc1wiOmNhc2VcIml0ZW1TY29wZVwiOnImJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHImJlwic3ltYm9sXCIhPXR5cGVvZiByP2Uuc2V0QXR0cmlidXRlKHQsXCJcIik6ZS5yZW1vdmVBdHRyaWJ1dGUodCk7YnJlYWs7Y2FzZVwiY2FwdHVyZVwiOmNhc2VcImRvd25sb2FkXCI6ITA9PT1yP2Uuc2V0QXR0cmlidXRlKHQsXCJcIik6ITEhPT1yJiZudWxsIT1yJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiByJiZcInN5bWJvbFwiIT10eXBlb2Ygcj9lLnNldEF0dHJpYnV0ZSh0LHIpOmUucmVtb3ZlQXR0cmlidXRlKHQpO2JyZWFrO2Nhc2VcImNvbHNcIjpjYXNlXCJyb3dzXCI6Y2FzZVwic2l6ZVwiOmNhc2VcInNwYW5cIjpudWxsIT1yJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiByJiZcInN5bWJvbFwiIT10eXBlb2YgciYmIWlzTmFOKHIpJiYxPD1yP2Uuc2V0QXR0cmlidXRlKHQscik6ZS5yZW1vdmVBdHRyaWJ1dGUodCk7YnJlYWs7Y2FzZVwicm93U3BhblwiOmNhc2VcInN0YXJ0XCI6bnVsbD09cnx8XCJmdW5jdGlvblwiPT10eXBlb2Ygcnx8XCJzeW1ib2xcIj09dHlwZW9mIHJ8fGlzTmFOKHIpP2UucmVtb3ZlQXR0cmlidXRlKHQpOmUuc2V0QXR0cmlidXRlKHQscik7YnJlYWs7Y2FzZVwicG9wb3ZlclwiOnM0KFwiYmVmb3JldG9nZ2xlXCIsZSksczQoXCJ0b2dnbGVcIixlKSxlMihlLFwicG9wb3ZlclwiLHIpO2JyZWFrO2Nhc2VcInhsaW5rQWN0dWF0ZVwiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXCJ4bGluazphY3R1YXRlXCIscik7YnJlYWs7Y2FzZVwieGxpbmtBcmNyb2xlXCI6ZTUoZSxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcInhsaW5rOmFyY3JvbGVcIixyKTticmVhaztjYXNlXCJ4bGlua1JvbGVcIjplNShlLFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFwieGxpbms6cm9sZVwiLHIpO2JyZWFrO2Nhc2VcInhsaW5rU2hvd1wiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXCJ4bGluazpzaG93XCIscik7YnJlYWs7Y2FzZVwieGxpbmtUaXRsZVwiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXCJ4bGluazp0aXRsZVwiLHIpO2JyZWFrO2Nhc2VcInhsaW5rVHlwZVwiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXCJ4bGluazp0eXBlXCIscik7YnJlYWs7Y2FzZVwieG1sQmFzZVwiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcInhtbDpiYXNlXCIscik7YnJlYWs7Y2FzZVwieG1sTGFuZ1wiOmU1KGUsXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcInhtbDpsYW5nXCIscik7YnJlYWs7Y2FzZVwieG1sU3BhY2VcIjplNShlLFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsXCJ4bWw6c3BhY2VcIixyKTticmVhaztjYXNlXCJpc1wiOmUyKGUsXCJpc1wiLHIpO2JyZWFrO2RlZmF1bHQ6Mjx0Lmxlbmd0aCYmKFwib1wiPT09dFswXXx8XCJPXCI9PT10WzBdKSYmKFwiblwiPT09dFsxXXx8XCJOXCI9PT10WzFdKXx8ZTIoZSx0PW5wLmdldCh0KXx8dCxyKX19ZnVuY3Rpb24gY3MoZSxuLHQscixvLGEpe3N3aXRjaCh0KXtjYXNlXCJzdHlsZVwiOm5kKGUscixhKTticmVhaztjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOmlmKG51bGwhPXIpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiByfHwhKFwiX19odG1sXCJpbiByKSl0aHJvdyBFcnJvcihsKDYxKSk7aWYobnVsbCE9KHQ9ci5fX2h0bWwpKXtpZihudWxsIT1vLmNoaWxkcmVuKXRocm93IEVycm9yKGwoNjApKTtlLmlubmVySFRNTD10fX1icmVhaztjYXNlXCJjaGlsZHJlblwiOlwic3RyaW5nXCI9PXR5cGVvZiByP25zKGUscik6KFwibnVtYmVyXCI9PXR5cGVvZiByfHxcImJpZ2ludFwiPT10eXBlb2YgcikmJm5zKGUsXCJcIityKTticmVhaztjYXNlXCJvblNjcm9sbFwiOm51bGwhPXImJnM0KFwic2Nyb2xsXCIsZSk7YnJlYWs7Y2FzZVwib25TY3JvbGxFbmRcIjpudWxsIT1yJiZzNChcInNjcm9sbGVuZFwiLGUpO2JyZWFrO2Nhc2VcIm9uQ2xpY2tcIjpudWxsIT1yJiYoZS5vbmNsaWNrPW5tKTticmVhaztjYXNlXCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIjpjYXNlXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIjpjYXNlXCJpbm5lckhUTUxcIjpjYXNlXCJyZWZcIjpjYXNlXCJpbm5lclRleHRcIjpjYXNlXCJ0ZXh0Q29udGVudFwiOmJyZWFrO2RlZmF1bHQ6aWYoIWVLLmhhc093blByb3BlcnR5KHQpKWU6e2lmKFwib1wiPT09dFswXSYmXCJuXCI9PT10WzFdJiYobz10LmVuZHNXaXRoKFwiQ2FwdHVyZVwiKSxuPXQuc2xpY2UoMixvP3QubGVuZ3RoLTc6dm9pZCAwKSxcImZ1bmN0aW9uXCI9PXR5cGVvZihhPW51bGwhPShhPWVbZURdfHxudWxsKT9hW3RdOm51bGwpJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIobixhLG8pLFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpKXtcImZ1bmN0aW9uXCIhPXR5cGVvZiBhJiZudWxsIT09YSYmKHQgaW4gZT9lW3RdPW51bGw6ZS5oYXNBdHRyaWJ1dGUodCkmJmUucmVtb3ZlQXR0cmlidXRlKHQpKSxlLmFkZEV2ZW50TGlzdGVuZXIobixyLG8pO2JyZWFrIGV9dCBpbiBlP2VbdF09cjohMD09PXI/ZS5zZXRBdHRyaWJ1dGUodCxcIlwiKTplMihlLHQscil9fX1mdW5jdGlvbiBjYyhlLG4sdCl7c3dpdGNoKG4pe2Nhc2VcImRpdlwiOmNhc2VcInNwYW5cIjpjYXNlXCJzdmdcIjpjYXNlXCJwYXRoXCI6Y2FzZVwiYVwiOmNhc2VcImdcIjpjYXNlXCJwXCI6Y2FzZVwibGlcIjpicmVhaztjYXNlXCJpbWdcIjpzNChcImVycm9yXCIsZSksczQoXCJsb2FkXCIsZSk7dmFyIHIsbz0hMSxhPSExO2ZvcihyIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShyKSl7dmFyIGk9dFtyXTtpZihudWxsIT1pKXN3aXRjaChyKXtjYXNlXCJzcmNcIjpvPSEwO2JyZWFrO2Nhc2VcInNyY1NldFwiOmE9ITA7YnJlYWs7Y2FzZVwiY2hpbGRyZW5cIjpjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOnRocm93IEVycm9yKGwoMTM3LG4pKTtkZWZhdWx0OmNsKGUsbixyLGksdCxudWxsKX19YSYmY2woZSxuLFwic3JjU2V0XCIsdC5zcmNTZXQsdCxudWxsKSxvJiZjbChlLG4sXCJzcmNcIix0LnNyYyx0LG51bGwpO3JldHVybjtjYXNlXCJpbnB1dFwiOnM0KFwiaW52YWxpZFwiLGUpO3ZhciBzPXI9aT1hPW51bGwsYz1udWxsLHU9bnVsbDtmb3IobyBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkobykpe3ZhciBkPXRbb107aWYobnVsbCE9ZClzd2l0Y2gobyl7Y2FzZVwibmFtZVwiOmE9ZDticmVhaztjYXNlXCJ0eXBlXCI6aT1kO2JyZWFrO2Nhc2VcImNoZWNrZWRcIjpjPWQ7YnJlYWs7Y2FzZVwiZGVmYXVsdENoZWNrZWRcIjp1PWQ7YnJlYWs7Y2FzZVwidmFsdWVcIjpyPWQ7YnJlYWs7Y2FzZVwiZGVmYXVsdFZhbHVlXCI6cz1kO2JyZWFrO2Nhc2VcImNoaWxkcmVuXCI6Y2FzZVwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjppZihudWxsIT1kKXRocm93IEVycm9yKGwoMTM3LG4pKTticmVhaztkZWZhdWx0OmNsKGUsbixvLGQsdCxudWxsKX19bnIoZSxyLHMsYyx1LGksYSwhMSk7cmV0dXJuO2Nhc2VcInNlbGVjdFwiOmZvcihhIGluIHM0KFwiaW52YWxpZFwiLGUpLG89aT1yPW51bGwsdClpZih0Lmhhc093blByb3BlcnR5KGEpJiZudWxsIT0ocz10W2FdKSlzd2l0Y2goYSl7Y2FzZVwidmFsdWVcIjpyPXM7YnJlYWs7Y2FzZVwiZGVmYXVsdFZhbHVlXCI6aT1zO2JyZWFrO2Nhc2VcIm11bHRpcGxlXCI6bz1zO2RlZmF1bHQ6Y2woZSxuLGEscyx0LG51bGwpfW49cix0PWksZS5tdWx0aXBsZT0hIW8sbnVsbCE9bj9uYShlLCEhbyxuLCExKTpudWxsIT10JiZuYShlLCEhbyx0LCEwKTtyZXR1cm47Y2FzZVwidGV4dGFyZWFcIjpmb3IoaSBpbiBzNChcImludmFsaWRcIixlKSxyPWE9bz1udWxsLHQpaWYodC5oYXNPd25Qcm9wZXJ0eShpKSYmbnVsbCE9KHM9dFtpXSkpc3dpdGNoKGkpe2Nhc2VcInZhbHVlXCI6bz1zO2JyZWFrO2Nhc2VcImRlZmF1bHRWYWx1ZVwiOmE9czticmVhaztjYXNlXCJjaGlsZHJlblwiOnI9czticmVhaztjYXNlXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOmlmKG51bGwhPXMpdGhyb3cgRXJyb3IobCg5MSkpO2JyZWFrO2RlZmF1bHQ6Y2woZSxuLGkscyx0LG51bGwpfW5sKGUsbyxhLHIpO3JldHVybjtjYXNlXCJvcHRpb25cIjpmb3IoYyBpbiB0KXQuaGFzT3duUHJvcGVydHkoYykmJm51bGwhPShvPXRbY10pJiYoXCJzZWxlY3RlZFwiPT09Yz9lLnNlbGVjdGVkPW8mJlwiZnVuY3Rpb25cIiE9dHlwZW9mIG8mJlwic3ltYm9sXCIhPXR5cGVvZiBvOmNsKGUsbixjLG8sdCxudWxsKSk7cmV0dXJuO2Nhc2VcImRpYWxvZ1wiOnM0KFwiYmVmb3JldG9nZ2xlXCIsZSksczQoXCJ0b2dnbGVcIixlKSxzNChcImNhbmNlbFwiLGUpLHM0KFwiY2xvc2VcIixlKTticmVhaztjYXNlXCJpZnJhbWVcIjpjYXNlXCJvYmplY3RcIjpzNChcImxvYWRcIixlKTticmVhaztjYXNlXCJ2aWRlb1wiOmNhc2VcImF1ZGlvXCI6Zm9yKG89MDtvPHMwLmxlbmd0aDtvKyspczQoczBbb10sZSk7YnJlYWs7Y2FzZVwiaW1hZ2VcIjpzNChcImVycm9yXCIsZSksczQoXCJsb2FkXCIsZSk7YnJlYWs7Y2FzZVwiZGV0YWlsc1wiOnM0KFwidG9nZ2xlXCIsZSk7YnJlYWs7Y2FzZVwiZW1iZWRcIjpjYXNlXCJzb3VyY2VcIjpjYXNlXCJsaW5rXCI6czQoXCJlcnJvclwiLGUpLHM0KFwibG9hZFwiLGUpO2Nhc2VcImFyZWFcIjpjYXNlXCJiYXNlXCI6Y2FzZVwiYnJcIjpjYXNlXCJjb2xcIjpjYXNlXCJoclwiOmNhc2VcImtleWdlblwiOmNhc2VcIm1ldGFcIjpjYXNlXCJwYXJhbVwiOmNhc2VcInRyYWNrXCI6Y2FzZVwid2JyXCI6Y2FzZVwibWVudWl0ZW1cIjpmb3IodSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkodSkmJm51bGwhPShvPXRbdV0pKXN3aXRjaCh1KXtjYXNlXCJjaGlsZHJlblwiOmNhc2VcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6dGhyb3cgRXJyb3IobCgxMzcsbikpO2RlZmF1bHQ6Y2woZSxuLHUsbyx0LG51bGwpfXJldHVybjtkZWZhdWx0OmlmKG5mKG4pKXtmb3IoZCBpbiB0KXQuaGFzT3duUHJvcGVydHkoZCkmJnZvaWQgMCE9PShvPXRbZF0pJiZjcyhlLG4sZCxvLHQsdm9pZCAwKTtyZXR1cm59fWZvcihzIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShzKSYmbnVsbCE9KG89dFtzXSkmJmNsKGUsbixzLG8sdCxudWxsKX12YXIgY3U9bnVsbCxjZD1udWxsO2Z1bmN0aW9uIGNmKGUpe3JldHVybiA5PT09ZS5ub2RlVHlwZT9lOmUub3duZXJEb2N1bWVudH1mdW5jdGlvbiBjcChlKXtzd2l0Y2goZSl7Y2FzZVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjpyZXR1cm4gMTtjYXNlXCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCI6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gMH19ZnVuY3Rpb24gY2goZSxuKXtpZigwPT09ZSlzd2l0Y2gobil7Y2FzZVwic3ZnXCI6cmV0dXJuIDE7Y2FzZVwibWF0aFwiOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIDB9cmV0dXJuIDE9PT1lJiZcImZvcmVpZ25PYmplY3RcIj09PW4/MDplfWZ1bmN0aW9uIGNnKGUsbil7cmV0dXJuXCJ0ZXh0YXJlYVwiPT09ZXx8XCJub3NjcmlwdFwiPT09ZXx8XCJzdHJpbmdcIj09dHlwZW9mIG4uY2hpbGRyZW58fFwibnVtYmVyXCI9PXR5cGVvZiBuLmNoaWxkcmVufHxcImJpZ2ludFwiPT10eXBlb2Ygbi5jaGlsZHJlbnx8XCJvYmplY3RcIj09dHlwZW9mIG4uZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJm51bGwhPT1uLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZudWxsIT1uLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbH12YXIgY209bnVsbCxjdj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6dm9pZCAwLGNiPVwiZnVuY3Rpb25cIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6dm9pZCAwLGN5PVwiZnVuY3Rpb25cIj09dHlwZW9mIFByb21pc2U/UHJvbWlzZTp2b2lkIDAsY3g9XCJmdW5jdGlvblwiPT10eXBlb2YgcXVldWVNaWNyb3Rhc2s/cXVldWVNaWNyb3Rhc2s6dm9pZCAwIT09Y3k/ZnVuY3Rpb24oZSl7cmV0dXJuIGN5LnJlc29sdmUobnVsbCkudGhlbihlKS5jYXRjaChjdyl9OmN2O2Z1bmN0aW9uIGN3KGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9ZnVuY3Rpb24gY2ooZSl7cmV0dXJuXCJoZWFkXCI9PT1lfWZ1bmN0aW9uIGNrKGUsbil7dmFyIHQ9bixyPTA7ZG97dmFyIG89dC5uZXh0U2libGluZztpZihlLnJlbW92ZUNoaWxkKHQpLG8mJjg9PT1vLm5vZGVUeXBlKWlmKFwiLyRcIj09PSh0PW8uZGF0YSl8fFwiLyZcIj09PXQpe2lmKDA9PT1yKXtlLnJlbW92ZUNoaWxkKG8pLHVFKG4pO3JldHVybn1yLS19ZWxzZSBpZihcIiRcIj09PXR8fFwiJD9cIj09PXR8fFwiJH5cIj09PXR8fFwiJCFcIj09PXR8fFwiJlwiPT09dClyKys7ZWxzZSBpZihcImh0bWxcIj09PXQpY1IoZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7ZWxzZSBpZihcImhlYWRcIj09PXQpe2NSKHQ9ZS5vd25lckRvY3VtZW50LmhlYWQpO2Zvcih2YXIgYT10LmZpcnN0Q2hpbGQ7YTspe3ZhciBpPWEubmV4dFNpYmxpbmcsbD1hLm5vZGVOYW1lO2FbZVVdfHxcIlNDUklQVFwiPT09bHx8XCJTVFlMRVwiPT09bHx8XCJMSU5LXCI9PT1sJiZcInN0eWxlc2hlZXRcIj09PWEucmVsLnRvTG93ZXJDYXNlKCl8fHQucmVtb3ZlQ2hpbGQoYSksYT1pfX1lbHNlXCJib2R5XCI9PT10JiZjUihlLm93bmVyRG9jdW1lbnQuYm9keSk7dD1vfXdoaWxlKHQpO3VFKG4pfWZ1bmN0aW9uIGNBKGUsbil7dmFyIHQ9ZTtlPTA7ZG97dmFyIHI9dC5uZXh0U2libGluZztpZigxPT09dC5ub2RlVHlwZT9uPyh0Ll9zdGFzaGVkRGlzcGxheT10LnN0eWxlLmRpc3BsYXksdC5zdHlsZS5kaXNwbGF5PVwibm9uZVwiKToodC5zdHlsZS5kaXNwbGF5PXQuX3N0YXNoZWREaXNwbGF5fHxcIlwiLFwiXCI9PT10LmdldEF0dHJpYnV0ZShcInN0eWxlXCIpJiZ0LnJlbW92ZUF0dHJpYnV0ZShcInN0eWxlXCIpKTozPT09dC5ub2RlVHlwZSYmKG4/KHQuX3N0YXNoZWRUZXh0PXQubm9kZVZhbHVlLHQubm9kZVZhbHVlPVwiXCIpOnQubm9kZVZhbHVlPXQuX3N0YXNoZWRUZXh0fHxcIlwiKSxyJiY4PT09ci5ub2RlVHlwZSlpZihcIi8kXCI9PT0odD1yLmRhdGEpKWlmKDA9PT1lKWJyZWFrO2Vsc2UgZS0tO2Vsc2VcIiRcIiE9PXQmJlwiJD9cIiE9PXQmJlwiJH5cIiE9PXQmJlwiJCFcIiE9PXR8fGUrKzt0PXJ9d2hpbGUodCl9ZnVuY3Rpb24gY08oZSl7dmFyIG49ZS5maXJzdENoaWxkO2ZvcihuJiYxMD09PW4ubm9kZVR5cGUmJihuPW4ubmV4dFNpYmxpbmcpO247KXt2YXIgdD1uO3N3aXRjaChuPW4ubmV4dFNpYmxpbmcsdC5ub2RlTmFtZSl7Y2FzZVwiSFRNTFwiOmNhc2VcIkhFQURcIjpjYXNlXCJCT0RZXCI6Y08odCksZVYodCk7Y29udGludWU7Y2FzZVwiU0NSSVBUXCI6Y2FzZVwiU1RZTEVcIjpjb250aW51ZTtjYXNlXCJMSU5LXCI6aWYoXCJzdHlsZXNoZWV0XCI9PT10LnJlbC50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlfWUucmVtb3ZlQ2hpbGQodCl9fWZ1bmN0aW9uIGNDKGUsbil7Zm9yKDs4IT09ZS5ub2RlVHlwZTspaWYoIW58fG51bGw9PT0oZT1jXyhlLm5leHRTaWJsaW5nKSkpcmV0dXJuIG51bGw7cmV0dXJuIGV9ZnVuY3Rpb24gY1MoZSl7cmV0dXJuXCIkP1wiPT09ZS5kYXRhfHxcIiR+XCI9PT1lLmRhdGF9ZnVuY3Rpb24gY0UoZSl7cmV0dXJuXCIkIVwiPT09ZS5kYXRhfHxcIiQ/XCI9PT1lLmRhdGEmJlwibG9hZGluZ1wiIT09ZS5vd25lckRvY3VtZW50LnJlYWR5U3RhdGV9ZnVuY3Rpb24gY18oZSl7Zm9yKDtudWxsIT1lO2U9ZS5uZXh0U2libGluZyl7dmFyIG49ZS5ub2RlVHlwZTtpZigxPT09bnx8Mz09PW4pYnJlYWs7aWYoOD09PW4pe2lmKFwiJFwiPT09KG49ZS5kYXRhKXx8XCIkIVwiPT09bnx8XCIkP1wiPT09bnx8XCIkflwiPT09bnx8XCImXCI9PT1ufHxcIkYhXCI9PT1ufHxcIkZcIj09PW4pYnJlYWs7aWYoXCIvJFwiPT09bnx8XCIvJlwiPT09bilyZXR1cm4gbnVsbH19cmV0dXJuIGV9dmFyIGNQPW51bGw7ZnVuY3Rpb24gY3ooZSl7ZT1lLm5leHRTaWJsaW5nO2Zvcih2YXIgbj0wO2U7KXtpZig4PT09ZS5ub2RlVHlwZSl7dmFyIHQ9ZS5kYXRhO2lmKFwiLyRcIj09PXR8fFwiLyZcIj09PXQpe2lmKDA9PT1uKXJldHVybiBjXyhlLm5leHRTaWJsaW5nKTtuLS19ZWxzZVwiJFwiIT09dCYmXCIkIVwiIT09dCYmXCIkP1wiIT09dCYmXCIkflwiIT09dCYmXCImXCIhPT10fHxuKyt9ZT1lLm5leHRTaWJsaW5nfXJldHVybiBudWxsfWZ1bmN0aW9uIGNMKGUpe2U9ZS5wcmV2aW91c1NpYmxpbmc7Zm9yKHZhciBuPTA7ZTspe2lmKDg9PT1lLm5vZGVUeXBlKXt2YXIgdD1lLmRhdGE7aWYoXCIkXCI9PT10fHxcIiQhXCI9PT10fHxcIiQ/XCI9PT10fHxcIiR+XCI9PT10fHxcIiZcIj09PXQpe2lmKDA9PT1uKXJldHVybiBlO24tLX1lbHNlXCIvJFwiIT09dCYmXCIvJlwiIT09dHx8bisrfWU9ZS5wcmV2aW91c1NpYmxpbmd9cmV0dXJuIG51bGx9ZnVuY3Rpb24gY1QoZSxuLHQpe3N3aXRjaChuPWNmKHQpLGUpe2Nhc2VcImh0bWxcIjppZighKGU9bi5kb2N1bWVudEVsZW1lbnQpKXRocm93IEVycm9yKGwoNDUyKSk7cmV0dXJuIGU7Y2FzZVwiaGVhZFwiOmlmKCEoZT1uLmhlYWQpKXRocm93IEVycm9yKGwoNDUzKSk7cmV0dXJuIGU7Y2FzZVwiYm9keVwiOmlmKCEoZT1uLmJvZHkpKXRocm93IEVycm9yKGwoNDU0KSk7cmV0dXJuIGU7ZGVmYXVsdDp0aHJvdyBFcnJvcihsKDQ1MSkpfX1mdW5jdGlvbiBjUihlKXtmb3IodmFyIG49ZS5hdHRyaWJ1dGVzO24ubGVuZ3RoOyllLnJlbW92ZUF0dHJpYnV0ZU5vZGUoblswXSk7ZVYoZSl9dmFyIGNOPW5ldyBNYXAsY0Q9bmV3IFNldDtmdW5jdGlvbiBjQihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmdldFJvb3ROb2RlP2UuZ2V0Um9vdE5vZGUoKTo5PT09ZS5ub2RlVHlwZT9lOmUub3duZXJEb2N1bWVudH12YXIgY009VC5kO1QuZD17ZjpmdW5jdGlvbigpe3ZhciBlPWNNLmYoKSxuPXNzKCk7cmV0dXJuIGV8fG59LHI6ZnVuY3Rpb24oZSl7dmFyIG49ZVcoZSk7bnVsbCE9PW4mJjU9PT1uLnRhZyYmXCJmb3JtXCI9PT1uLnR5cGU/YUcobik6Y00ucihlKX0sRDpmdW5jdGlvbihlKXtjTS5EKGUpLGNIKFwiZG5zLXByZWZldGNoXCIsZSxudWxsKX0sQzpmdW5jdGlvbihlLG4pe2NNLkMoZSxuKSxjSChcInByZWNvbm5lY3RcIixlLG4pfSxMOmZ1bmN0aW9uKGUsbix0KXtpZihjTS5MKGUsbix0KSxjSSYmZSYmbil7dmFyIHI9J2xpbmtbcmVsPVwicHJlbG9hZFwiXVthcz1cIicrbm4obikrJ1wiXSc7XCJpbWFnZVwiPT09biYmdCYmdC5pbWFnZVNyY1NldD8ocis9J1tpbWFnZXNyY3NldD1cIicrbm4odC5pbWFnZVNyY1NldCkrJ1wiXScsXCJzdHJpbmdcIj09dHlwZW9mIHQuaW1hZ2VTaXplcyYmKHIrPSdbaW1hZ2VzaXplcz1cIicrbm4odC5pbWFnZVNpemVzKSsnXCJdJykpOnIrPSdbaHJlZj1cIicrbm4oZSkrJ1wiXSc7dmFyIG89cjtzd2l0Y2gobil7Y2FzZVwic3R5bGVcIjpvPWNVKGUpO2JyZWFrO2Nhc2VcInNjcmlwdFwiOm89Y1coZSl9Y04uaGFzKG8pfHwoZT1mKHtyZWw6XCJwcmVsb2FkXCIsaHJlZjpcImltYWdlXCI9PT1uJiZ0JiZ0LmltYWdlU3JjU2V0P3ZvaWQgMDplLGFzOm59LHQpLGNOLnNldChvLGUpLG51bGwhPT1jSS5xdWVyeVNlbGVjdG9yKHIpfHxcInN0eWxlXCI9PT1uJiZjSS5xdWVyeVNlbGVjdG9yKGNWKG8pKXx8XCJzY3JpcHRcIj09PW4mJmNJLnF1ZXJ5U2VsZWN0b3IoYyQobykpfHwoY2Mobj1jSS5jcmVhdGVFbGVtZW50KFwibGlua1wiKSxcImxpbmtcIixlKSxlWShuKSxjSS5oZWFkLmFwcGVuZENoaWxkKG4pKSl9fSxtOmZ1bmN0aW9uKGUsbil7aWYoY00ubShlLG4pLGNJJiZlKXt2YXIgdD1uJiZcInN0cmluZ1wiPT10eXBlb2Ygbi5hcz9uLmFzOlwic2NyaXB0XCIscj0nbGlua1tyZWw9XCJtb2R1bGVwcmVsb2FkXCJdW2FzPVwiJytubih0KSsnXCJdW2hyZWY9XCInK25uKGUpKydcIl0nLG89cjtzd2l0Y2godCl7Y2FzZVwiYXVkaW93b3JrbGV0XCI6Y2FzZVwicGFpbnR3b3JrbGV0XCI6Y2FzZVwic2VydmljZXdvcmtlclwiOmNhc2VcInNoYXJlZHdvcmtlclwiOmNhc2VcIndvcmtlclwiOmNhc2VcInNjcmlwdFwiOm89Y1coZSl9aWYoIWNOLmhhcyhvKSYmKGU9Zih7cmVsOlwibW9kdWxlcHJlbG9hZFwiLGhyZWY6ZX0sbiksY04uc2V0KG8sZSksbnVsbD09PWNJLnF1ZXJ5U2VsZWN0b3IocikpKXtzd2l0Y2godCl7Y2FzZVwiYXVkaW93b3JrbGV0XCI6Y2FzZVwicGFpbnR3b3JrbGV0XCI6Y2FzZVwic2VydmljZXdvcmtlclwiOmNhc2VcInNoYXJlZHdvcmtlclwiOmNhc2VcIndvcmtlclwiOmNhc2VcInNjcmlwdFwiOmlmKGNJLnF1ZXJ5U2VsZWN0b3IoYyQobykpKXJldHVybn1jYyh0PWNJLmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLFwibGlua1wiLGUpLGVZKHQpLGNJLmhlYWQuYXBwZW5kQ2hpbGQodCl9fX0sWDpmdW5jdGlvbihlLG4pe2lmKGNNLlgoZSxuKSxjSSYmZSl7dmFyIHQ9ZVooY0kpLmhvaXN0YWJsZVNjcmlwdHMscj1jVyhlKSxvPXQuZ2V0KHIpO298fCgobz1jSS5xdWVyeVNlbGVjdG9yKGMkKHIpKSl8fChlPWYoe3NyYzplLGFzeW5jOiEwfSxuKSwobj1jTi5nZXQocikpJiZjSyhlLG4pLGVZKG89Y0kuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSksY2MobyxcImxpbmtcIixlKSxjSS5oZWFkLmFwcGVuZENoaWxkKG8pKSxvPXt0eXBlOlwic2NyaXB0XCIsaW5zdGFuY2U6byxjb3VudDoxLHN0YXRlOm51bGx9LHQuc2V0KHIsbykpfX0sUzpmdW5jdGlvbihlLG4sdCl7aWYoY00uUyhlLG4sdCksY0kmJmUpe3ZhciByPWVaKGNJKS5ob2lzdGFibGVTdHlsZXMsbz1jVShlKTtuPW58fFwiZGVmYXVsdFwiO3ZhciBhPXIuZ2V0KG8pO2lmKCFhKXt2YXIgaT17bG9hZGluZzowLHByZWxvYWQ6bnVsbH07aWYoYT1jSS5xdWVyeVNlbGVjdG9yKGNWKG8pKSlpLmxvYWRpbmc9NTtlbHNle2U9Zih7cmVsOlwic3R5bGVzaGVldFwiLGhyZWY6ZSxcImRhdGEtcHJlY2VkZW5jZVwiOm59LHQpLCh0PWNOLmdldChvKSkmJmNYKGUsdCk7dmFyIGw9YT1jSS5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtlWShsKSxjYyhsLFwibGlua1wiLGUpLGwuX3A9bmV3IFByb21pc2UoZnVuY3Rpb24oZSxuKXtsLm9ubG9hZD1lLGwub25lcnJvcj1ufSksbC5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLGZ1bmN0aW9uKCl7aS5sb2FkaW5nfD0xfSksbC5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIixmdW5jdGlvbigpe2kubG9hZGluZ3w9Mn0pLGkubG9hZGluZ3w9NCxjWShhLG4sY0kpfWE9e3R5cGU6XCJzdHlsZXNoZWV0XCIsaW5zdGFuY2U6YSxjb3VudDoxLHN0YXRlOml9LHIuc2V0KG8sYSl9fX0sTTpmdW5jdGlvbihlLG4pe2lmKGNNLk0oZSxuKSxjSSYmZSl7dmFyIHQ9ZVooY0kpLmhvaXN0YWJsZVNjcmlwdHMscj1jVyhlKSxvPXQuZ2V0KHIpO298fCgobz1jSS5xdWVyeVNlbGVjdG9yKGMkKHIpKSl8fChlPWYoe3NyYzplLGFzeW5jOiEwLHR5cGU6XCJtb2R1bGVcIn0sbiksKG49Y04uZ2V0KHIpKSYmY0soZSxuKSxlWShvPWNJLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpLGNjKG8sXCJsaW5rXCIsZSksY0kuaGVhZC5hcHBlbmRDaGlsZChvKSksbz17dHlwZTpcInNjcmlwdFwiLGluc3RhbmNlOm8sY291bnQ6MSxzdGF0ZTpudWxsfSx0LnNldChyLG8pKX19fTt2YXIgY0k9XCJ1bmRlZmluZWRcIj09dHlwZW9mIGRvY3VtZW50P251bGw6ZG9jdW1lbnQ7ZnVuY3Rpb24gY0goZSxuLHQpe2lmKGNJJiZcInN0cmluZ1wiPT10eXBlb2YgbiYmbil7dmFyIHI9bm4obik7cj0nbGlua1tyZWw9XCInK2UrJ1wiXVtocmVmPVwiJytyKydcIl0nLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYocis9J1tjcm9zc29yaWdpbj1cIicrdCsnXCJdJyksY0QuaGFzKHIpfHwoY0QuYWRkKHIpLGU9e3JlbDplLGNyb3NzT3JpZ2luOnQsaHJlZjpufSxudWxsPT09Y0kucXVlcnlTZWxlY3RvcihyKSYmKGNjKG49Y0kuY3JlYXRlRWxlbWVudChcImxpbmtcIiksXCJsaW5rXCIsZSksZVkobiksY0kuaGVhZC5hcHBlbmRDaGlsZChuKSkpfX1mdW5jdGlvbiBjRihlLG4sdCxyKXt2YXIgbz0obz1VLmN1cnJlbnQpP2NCKG8pOm51bGw7aWYoIW8pdGhyb3cgRXJyb3IobCg0NDYpKTtzd2l0Y2goZSl7Y2FzZVwibWV0YVwiOmNhc2VcInRpdGxlXCI6cmV0dXJuIG51bGw7Y2FzZVwic3R5bGVcIjpyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdC5wcmVjZWRlbmNlJiZcInN0cmluZ1wiPT10eXBlb2YgdC5ocmVmPyhuPWNVKHQuaHJlZiksKHI9KHQ9ZVoobykuaG9pc3RhYmxlU3R5bGVzKS5nZXQobikpfHwocj17dHlwZTpcInN0eWxlXCIsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOm51bGx9LHQuc2V0KG4scikpLHIpOnt0eXBlOlwidm9pZFwiLGluc3RhbmNlOm51bGwsY291bnQ6MCxzdGF0ZTpudWxsfTtjYXNlXCJsaW5rXCI6aWYoXCJzdHlsZXNoZWV0XCI9PT10LnJlbCYmXCJzdHJpbmdcIj09dHlwZW9mIHQuaHJlZiYmXCJzdHJpbmdcIj09dHlwZW9mIHQucHJlY2VkZW5jZSl7ZT1jVSh0LmhyZWYpO3ZhciBhLGkscyxjLHU9ZVoobykuaG9pc3RhYmxlU3R5bGVzLGQ9dS5nZXQoZSk7aWYoZHx8KG89by5vd25lckRvY3VtZW50fHxvLGQ9e3R5cGU6XCJzdHlsZXNoZWV0XCIsaW5zdGFuY2U6bnVsbCxjb3VudDowLHN0YXRlOntsb2FkaW5nOjAscHJlbG9hZDpudWxsfX0sdS5zZXQoZSxkKSwodT1vLnF1ZXJ5U2VsZWN0b3IoY1YoZSkpKSYmIXUuX3AmJihkLmluc3RhbmNlPXUsZC5zdGF0ZS5sb2FkaW5nPTUpLGNOLmhhcyhlKXx8KHQ9e3JlbDpcInByZWxvYWRcIixhczpcInN0eWxlXCIsaHJlZjp0LmhyZWYsY3Jvc3NPcmlnaW46dC5jcm9zc09yaWdpbixpbnRlZ3JpdHk6dC5pbnRlZ3JpdHksbWVkaWE6dC5tZWRpYSxocmVmTGFuZzp0LmhyZWZMYW5nLHJlZmVycmVyUG9saWN5OnQucmVmZXJyZXJQb2xpY3l9LGNOLnNldChlLHQpLHV8fChhPW8saT1lLHM9dCxjPWQuc3RhdGUsYS5xdWVyeVNlbGVjdG9yKCdsaW5rW3JlbD1cInByZWxvYWRcIl1bYXM9XCJzdHlsZVwiXVsnK2krXCJdXCIpP2MubG9hZGluZz0xOihjLnByZWxvYWQ9aT1hLmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLGkuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixmdW5jdGlvbigpe3JldHVybiBjLmxvYWRpbmd8PTF9KSxpLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLGZ1bmN0aW9uKCl7cmV0dXJuIGMubG9hZGluZ3w9Mn0pLGNjKGksXCJsaW5rXCIscyksZVkoaSksYS5oZWFkLmFwcGVuZENoaWxkKGkpKSkpKSxuJiZudWxsPT09cil0aHJvdyBFcnJvcihsKDUyOCxcIlwiKSk7cmV0dXJuIGR9aWYobiYmbnVsbCE9PXIpdGhyb3cgRXJyb3IobCg1MjksXCJcIikpO3JldHVybiBudWxsO2Nhc2VcInNjcmlwdFwiOnJldHVybiBuPXQuYXN5bmMsXCJzdHJpbmdcIj09dHlwZW9mKHQ9dC5zcmMpJiZuJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBuJiZcInN5bWJvbFwiIT10eXBlb2Ygbj8obj1jVyh0KSwocj0odD1lWihvKS5ob2lzdGFibGVTY3JpcHRzKS5nZXQobikpfHwocj17dHlwZTpcInNjcmlwdFwiLGluc3RhbmNlOm51bGwsY291bnQ6MCxzdGF0ZTpudWxsfSx0LnNldChuLHIpKSxyKTp7dHlwZTpcInZvaWRcIixpbnN0YW5jZTpudWxsLGNvdW50OjAsc3RhdGU6bnVsbH07ZGVmYXVsdDp0aHJvdyBFcnJvcihsKDQ0NCxlKSl9fWZ1bmN0aW9uIGNVKGUpe3JldHVybidocmVmPVwiJytubihlKSsnXCInfWZ1bmN0aW9uIGNWKGUpe3JldHVybidsaW5rW3JlbD1cInN0eWxlc2hlZXRcIl1bJytlK1wiXVwifWZ1bmN0aW9uIGNxKGUpe3JldHVybiBmKHt9LGUse1wiZGF0YS1wcmVjZWRlbmNlXCI6ZS5wcmVjZWRlbmNlLHByZWNlZGVuY2U6bnVsbH0pfWZ1bmN0aW9uIGNXKGUpe3JldHVybidbc3JjPVwiJytubihlKSsnXCJdJ31mdW5jdGlvbiBjJChlKXtyZXR1cm5cInNjcmlwdFthc3luY11cIitlfWZ1bmN0aW9uIGNaKGUsbix0KXtpZihuLmNvdW50KyssbnVsbD09PW4uaW5zdGFuY2Upc3dpdGNoKG4udHlwZSl7Y2FzZVwic3R5bGVcIjp2YXIgcj1lLnF1ZXJ5U2VsZWN0b3IoJ3N0eWxlW2RhdGEtaHJlZn49XCInK25uKHQuaHJlZikrJ1wiXScpO2lmKHIpcmV0dXJuIG4uaW5zdGFuY2U9cixlWShyKSxyO3ZhciBvPWYoe30sdCx7XCJkYXRhLWhyZWZcIjp0LmhyZWYsXCJkYXRhLXByZWNlZGVuY2VcIjp0LnByZWNlZGVuY2UsaHJlZjpudWxsLHByZWNlZGVuY2U6bnVsbH0pO3JldHVybiBlWShyPShlLm93bmVyRG9jdW1lbnR8fGUpLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSksY2MocixcInN0eWxlXCIsbyksY1kocix0LnByZWNlZGVuY2UsZSksbi5pbnN0YW5jZT1yO2Nhc2VcInN0eWxlc2hlZXRcIjpvPWNVKHQuaHJlZik7dmFyIGE9ZS5xdWVyeVNlbGVjdG9yKGNWKG8pKTtpZihhKXJldHVybiBuLnN0YXRlLmxvYWRpbmd8PTQsbi5pbnN0YW5jZT1hLGVZKGEpLGE7cj1jcSh0KSwobz1jTi5nZXQobykpJiZjWChyLG8pLGVZKGE9KGUub3duZXJEb2N1bWVudHx8ZSkuY3JlYXRlRWxlbWVudChcImxpbmtcIikpO3ZhciBpPWE7cmV0dXJuIGkuX3A9bmV3IFByb21pc2UoZnVuY3Rpb24oZSxuKXtpLm9ubG9hZD1lLGkub25lcnJvcj1ufSksY2MoYSxcImxpbmtcIixyKSxuLnN0YXRlLmxvYWRpbmd8PTQsY1koYSx0LnByZWNlZGVuY2UsZSksbi5pbnN0YW5jZT1hO2Nhc2VcInNjcmlwdFwiOmlmKGE9Y1codC5zcmMpLG89ZS5xdWVyeVNlbGVjdG9yKGMkKGEpKSlyZXR1cm4gbi5pbnN0YW5jZT1vLGVZKG8pLG87cmV0dXJuIHI9dCwobz1jTi5nZXQoYSkpJiZjSyhyPWYoe30sdCksbyksZVkobz0oZT1lLm93bmVyRG9jdW1lbnR8fGUpLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIikpLGNjKG8sXCJsaW5rXCIsciksZS5oZWFkLmFwcGVuZENoaWxkKG8pLG4uaW5zdGFuY2U9bztjYXNlXCJ2b2lkXCI6cmV0dXJuIG51bGw7ZGVmYXVsdDp0aHJvdyBFcnJvcihsKDQ0MyxuLnR5cGUpKX1yZXR1cm5cInN0eWxlc2hlZXRcIj09PW4udHlwZSYmMD09KDQmbi5zdGF0ZS5sb2FkaW5nKSYmKHI9bi5pbnN0YW5jZSxuLnN0YXRlLmxvYWRpbmd8PTQsY1kocix0LnByZWNlZGVuY2UsZSkpLG4uaW5zdGFuY2V9ZnVuY3Rpb24gY1koZSxuLHQpe2Zvcih2YXIgcj10LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpbmtbcmVsPVwic3R5bGVzaGVldFwiXVtkYXRhLXByZWNlZGVuY2VdLHN0eWxlW2RhdGEtcHJlY2VkZW5jZV0nKSxvPXIubGVuZ3RoP3Jbci5sZW5ndGgtMV06bnVsbCxhPW8saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbD1yW2ldO2lmKGwuZGF0YXNldC5wcmVjZWRlbmNlPT09bilhPWw7ZWxzZSBpZihhIT09bylicmVha31hP2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSxhLm5leHRTaWJsaW5nKToobj05PT09dC5ub2RlVHlwZT90LmhlYWQ6dCkuaW5zZXJ0QmVmb3JlKGUsbi5maXJzdENoaWxkKX1mdW5jdGlvbiBjWChlLG4pe251bGw9PWUuY3Jvc3NPcmlnaW4mJihlLmNyb3NzT3JpZ2luPW4uY3Jvc3NPcmlnaW4pLG51bGw9PWUucmVmZXJyZXJQb2xpY3kmJihlLnJlZmVycmVyUG9saWN5PW4ucmVmZXJyZXJQb2xpY3kpLG51bGw9PWUudGl0bGUmJihlLnRpdGxlPW4udGl0bGUpfWZ1bmN0aW9uIGNLKGUsbil7bnVsbD09ZS5jcm9zc09yaWdpbiYmKGUuY3Jvc3NPcmlnaW49bi5jcm9zc09yaWdpbiksbnVsbD09ZS5yZWZlcnJlclBvbGljeSYmKGUucmVmZXJyZXJQb2xpY3k9bi5yZWZlcnJlclBvbGljeSksbnVsbD09ZS5pbnRlZ3JpdHkmJihlLmludGVncml0eT1uLmludGVncml0eSl9dmFyIGNRPW51bGw7ZnVuY3Rpb24gY0coZSxuLHQpe2lmKG51bGw9PT1jUSl7dmFyIHI9bmV3IE1hcCxvPWNRPW5ldyBNYXA7by5zZXQodCxyKX1lbHNlKHI9KG89Y1EpLmdldCh0KSl8fChyPW5ldyBNYXAsby5zZXQodCxyKSk7aWYoci5oYXMoZSkpcmV0dXJuIHI7Zm9yKHIuc2V0KGUsbnVsbCksdD10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIGE9dFtvXTtpZighKGFbZVVdfHxhW2VOXXx8XCJsaW5rXCI9PT1lJiZcInN0eWxlc2hlZXRcIj09PWEuZ2V0QXR0cmlidXRlKFwicmVsXCIpKSYmXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIT09YS5uYW1lc3BhY2VVUkkpe3ZhciBpPWEuZ2V0QXR0cmlidXRlKG4pfHxcIlwiO2k9ZStpO3ZhciBsPXIuZ2V0KGkpO2w/bC5wdXNoKGEpOnIuc2V0KGksW2FdKX19cmV0dXJuIHJ9ZnVuY3Rpb24gY0ooZSxuLHQpeyhlPWUub3duZXJEb2N1bWVudHx8ZSkuaGVhZC5pbnNlcnRCZWZvcmUodCxcInRpdGxlXCI9PT1uP2UucXVlcnlTZWxlY3RvcihcImhlYWQgPiB0aXRsZVwiKTpudWxsKX1mdW5jdGlvbiBjMChlKXtyZXR1cm5cInN0eWxlc2hlZXRcIiE9PWUudHlwZXx8MCE9KDMmZS5zdGF0ZS5sb2FkaW5nKX12YXIgYzE9bnVsbDtmdW5jdGlvbiBjMigpe2lmKHRoaXMuY291bnQtLSwwPT09dGhpcy5jb3VudCl7aWYodGhpcy5zdHlsZXNoZWV0cyljNSh0aGlzLHRoaXMuc3R5bGVzaGVldHMpO2Vsc2UgaWYodGhpcy51bnN1c3BlbmQpe3ZhciBlPXRoaXMudW5zdXNwZW5kO3RoaXMudW5zdXNwZW5kPW51bGwsZSgpfX19dmFyIGM0PW51bGw7ZnVuY3Rpb24gYzUoZSxuKXtlLnN0eWxlc2hlZXRzPW51bGwsbnVsbCE9PWUudW5zdXNwZW5kJiYoZS5jb3VudCsrLGM0PW5ldyBNYXAsbi5mb3JFYWNoKGMzLGUpLGM0PW51bGwsYzIuY2FsbChlKSl9ZnVuY3Rpb24gYzMoZSxuKXtpZighKDQmbi5zdGF0ZS5sb2FkaW5nKSl7dmFyIHQ9YzQuZ2V0KGUpO2lmKHQpdmFyIHI9dC5nZXQobnVsbCk7ZWxzZXt0PW5ldyBNYXAsYzQuc2V0KGUsdCk7Zm9yKHZhciBvPWUucXVlcnlTZWxlY3RvckFsbChcImxpbmtbZGF0YS1wcmVjZWRlbmNlXSxzdHlsZVtkYXRhLXByZWNlZGVuY2VdXCIpLGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIGk9b1thXTsoXCJMSU5LXCI9PT1pLm5vZGVOYW1lfHxcIm5vdCBhbGxcIiE9PWkuZ2V0QXR0cmlidXRlKFwibWVkaWFcIikpJiYodC5zZXQoaS5kYXRhc2V0LnByZWNlZGVuY2UsaSkscj1pKX1yJiZ0LnNldChudWxsLHIpfWk9KG89bi5pbnN0YW5jZSkuZ2V0QXR0cmlidXRlKFwiZGF0YS1wcmVjZWRlbmNlXCIpLChhPXQuZ2V0KGkpfHxyKT09PXImJnQuc2V0KG51bGwsbyksdC5zZXQoaSxvKSx0aGlzLmNvdW50Kysscj1jMi5iaW5kKHRoaXMpLG8uYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixyKSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLHIpLGE/YS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLGEubmV4dFNpYmxpbmcpOihlPTk9PT1lLm5vZGVUeXBlP2UuaGVhZDplKS5pbnNlcnRCZWZvcmUobyxlLmZpcnN0Q2hpbGQpLG4uc3RhdGUubG9hZGluZ3w9NH19dmFyIGM2PXskJHR5cGVvZjp4LFByb3ZpZGVyOm51bGwsQ29uc3VtZXI6bnVsbCxfY3VycmVudFZhbHVlOlIsX2N1cnJlbnRWYWx1ZTI6UixfdGhyZWFkQ291bnQ6MH07ZnVuY3Rpb24gYzkoZSxuLHQscixvLGEsaSxsLHMpe3RoaXMudGFnPTEsdGhpcy5jb250YWluZXJJbmZvPWUsdGhpcy5waW5nQ2FjaGU9dGhpcy5jdXJyZW50PXRoaXMucGVuZGluZ0NoaWxkcmVuPW51bGwsdGhpcy50aW1lb3V0SGFuZGxlPS0xLHRoaXMuY2FsbGJhY2tOb2RlPXRoaXMubmV4dD10aGlzLnBlbmRpbmdDb250ZXh0PXRoaXMuY29udGV4dD10aGlzLmNhbmNlbFBlbmRpbmdDb21taXQ9bnVsbCx0aGlzLmNhbGxiYWNrUHJpb3JpdHk9MCx0aGlzLmV4cGlyYXRpb25UaW1lcz1lTygtMSksdGhpcy5lbnRhbmdsZWRMYW5lcz10aGlzLnNoZWxsU3VzcGVuZENvdW50ZXI9dGhpcy5lcnJvclJlY292ZXJ5RGlzYWJsZWRMYW5lcz10aGlzLmV4cGlyZWRMYW5lcz10aGlzLndhcm1MYW5lcz10aGlzLnBpbmdlZExhbmVzPXRoaXMuc3VzcGVuZGVkTGFuZXM9dGhpcy5wZW5kaW5nTGFuZXM9MCx0aGlzLmVudGFuZ2xlbWVudHM9ZU8oMCksdGhpcy5oaWRkZW5VcGRhdGVzPWVPKG51bGwpLHRoaXMuaWRlbnRpZmllclByZWZpeD1yLHRoaXMub25VbmNhdWdodEVycm9yPW8sdGhpcy5vbkNhdWdodEVycm9yPWEsdGhpcy5vblJlY292ZXJhYmxlRXJyb3I9aSx0aGlzLnBvb2xlZENhY2hlPW51bGwsdGhpcy5wb29sZWRDYWNoZUxhbmVzPTAsdGhpcy5mb3JtU3RhdGU9cyx0aGlzLmluY29tcGxldGVUcmFuc2l0aW9ucz1uZXcgTWFwfWZ1bmN0aW9uIGM4KGUsbix0LHIsbyxhKXtvPW8/dDg6dDgsbnVsbD09PXIuY29udGV4dD9yLmNvbnRleHQ9bzpyLnBlbmRpbmdDb250ZXh0PW8sKHI9b0EobikpLnBheWxvYWQ9e2VsZW1lbnQ6dH0sbnVsbCE9PShhPXZvaWQgMD09PWE/bnVsbDphKSYmKHIuY2FsbGJhY2s9YSksbnVsbCE9PSh0PW9PKGUscixuKSkmJihzbyh0LGUsbiksb0ModCxlLG4pKX1mdW5jdGlvbiBjNyhlLG4pe2lmKG51bGwhPT0oZT1lLm1lbW9pemVkU3RhdGUpJiZudWxsIT09ZS5kZWh5ZHJhdGVkKXt2YXIgdD1lLnJldHJ5TGFuZTtlLnJldHJ5TGFuZT0wIT09dCYmdDxuP3Q6bn19ZnVuY3Rpb24gdWUoZSxuKXtjNyhlLG4pLChlPWUuYWx0ZXJuYXRlKSYmYzcoZSxuKX1mdW5jdGlvbiB1bihlKXtpZigxMz09PWUudGFnfHwzMT09PWUudGFnKXt2YXIgbj10MyhlLDB4NDAwMDAwMCk7bnVsbCE9PW4mJnNvKG4sZSwweDQwMDAwMDApLHVlKGUsMHg0MDAwMDAwKX19ZnVuY3Rpb24gdXQoZSl7aWYoMTM9PT1lLnRhZ3x8MzE9PT1lLnRhZyl7dmFyIG49c3QoKSx0PXQzKGUsbj1lUChuKSk7bnVsbCE9PXQmJnNvKHQsZSxuKSx1ZShlLG4pfX12YXIgdXI9ITA7ZnVuY3Rpb24gdW8oZSxuLHQscil7dmFyIG89TC5UO0wuVD1udWxsO3ZhciBhPVQucDt0cnl7VC5wPTIsdWkoZSxuLHQscil9ZmluYWxseXtULnA9YSxMLlQ9b319ZnVuY3Rpb24gdWEoZSxuLHQscil7dmFyIG89TC5UO0wuVD1udWxsO3ZhciBhPVQucDt0cnl7VC5wPTgsdWkoZSxuLHQscil9ZmluYWxseXtULnA9YSxMLlQ9b319ZnVuY3Rpb24gdWkoZSxuLHQscil7aWYodXIpe3ZhciBvPXVsKHIpO2lmKG51bGw9PT1vKXM4KGUsbixyLHVzLHQpLHV5KGUscik7ZWxzZSBpZihmdW5jdGlvbihlLG4sdCxyLG8pe3N3aXRjaChuKXtjYXNlXCJmb2N1c2luXCI6cmV0dXJuIHVmPXV4KHVmLGUsbix0LHIsbyksITA7Y2FzZVwiZHJhZ2VudGVyXCI6cmV0dXJuIHVwPXV4KHVwLGUsbix0LHIsbyksITA7Y2FzZVwibW91c2VvdmVyXCI6cmV0dXJuIHVoPXV4KHVoLGUsbix0LHIsbyksITA7Y2FzZVwicG9pbnRlcm92ZXJcIjp2YXIgYT1vLnBvaW50ZXJJZDtyZXR1cm4gdWcuc2V0KGEsdXgodWcuZ2V0KGEpfHxudWxsLGUsbix0LHIsbykpLCEwO2Nhc2VcImdvdHBvaW50ZXJjYXB0dXJlXCI6cmV0dXJuIGE9by5wb2ludGVySWQsdW0uc2V0KGEsdXgodW0uZ2V0KGEpfHxudWxsLGUsbix0LHIsbykpLCEwfXJldHVybiExfShvLGUsbix0LHIpKXIuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZih1eShlLHIpLDQmbiYmLTE8dWIuaW5kZXhPZihlKSl7Zm9yKDtudWxsIT09bzspe3ZhciBhPWVXKG8pO2lmKG51bGwhPT1hKXN3aXRjaChhLnRhZyl7Y2FzZSAzOmlmKChhPWEuc3RhdGVOb2RlKS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXt2YXIgaT1leChhLnBlbmRpbmdMYW5lcyk7aWYoMCE9PWkpe3ZhciBsPWE7Zm9yKGwucGVuZGluZ0xhbmVzfD0yLGwuZW50YW5nbGVkTGFuZXN8PTI7aTspe3ZhciBzPTE8PDMxLWVnKGkpO2wuZW50YW5nbGVtZW50c1sxXXw9cyxpJj1+c31zVShhKSwwPT0oNiZsUikmJihsMD1lcigpKzUwMCxzVigwLCExKSl9fWJyZWFrO2Nhc2UgMzE6Y2FzZSAxMzpudWxsIT09KGw9dDMoYSwyKSkmJnNvKGwsYSwyKSxzcygpLHVlKGEsMil9aWYobnVsbD09PShhPXVsKHIpKSYmczgoZSxuLHIsdXMsdCksYT09PW8pYnJlYWs7bz1hfW51bGwhPT1vJiZyLnN0b3BQcm9wYWdhdGlvbigpfWVsc2UgczgoZSxuLHIsbnVsbCx0KX19ZnVuY3Rpb24gdWwoZSl7cmV0dXJuIHVjKGU9bmIoZSkpfXZhciB1cz1udWxsO2Z1bmN0aW9uIHVjKGUpe2lmKHVzPW51bGwsbnVsbCE9PShlPWVxKGUpKSl7dmFyIG49cyhlKTtpZihudWxsPT09billPW51bGw7ZWxzZXt2YXIgdD1uLnRhZztpZigxMz09PXQpe2lmKG51bGwhPT0oZT1jKG4pKSlyZXR1cm4gZTtlPW51bGx9ZWxzZSBpZigzMT09PXQpe2lmKG51bGwhPT0oZT11KG4pKSlyZXR1cm4gZTtlPW51bGx9ZWxzZSBpZigzPT09dCl7aWYobi5zdGF0ZU5vZGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZClyZXR1cm4gMz09PW4udGFnP24uc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbDtlPW51bGx9ZWxzZSBuIT09ZSYmKGU9bnVsbCl9fXJldHVybiB1cz1lLG51bGx9ZnVuY3Rpb24gdXUoZSl7c3dpdGNoKGUpe2Nhc2VcImJlZm9yZXRvZ2dsZVwiOmNhc2VcImNhbmNlbFwiOmNhc2VcImNsaWNrXCI6Y2FzZVwiY2xvc2VcIjpjYXNlXCJjb250ZXh0bWVudVwiOmNhc2VcImNvcHlcIjpjYXNlXCJjdXRcIjpjYXNlXCJhdXhjbGlja1wiOmNhc2VcImRibGNsaWNrXCI6Y2FzZVwiZHJhZ2VuZFwiOmNhc2VcImRyYWdzdGFydFwiOmNhc2VcImRyb3BcIjpjYXNlXCJmb2N1c2luXCI6Y2FzZVwiZm9jdXNvdXRcIjpjYXNlXCJpbnB1dFwiOmNhc2VcImludmFsaWRcIjpjYXNlXCJrZXlkb3duXCI6Y2FzZVwia2V5cHJlc3NcIjpjYXNlXCJrZXl1cFwiOmNhc2VcIm1vdXNlZG93blwiOmNhc2VcIm1vdXNldXBcIjpjYXNlXCJwYXN0ZVwiOmNhc2VcInBhdXNlXCI6Y2FzZVwicGxheVwiOmNhc2VcInBvaW50ZXJjYW5jZWxcIjpjYXNlXCJwb2ludGVyZG93blwiOmNhc2VcInBvaW50ZXJ1cFwiOmNhc2VcInJhdGVjaGFuZ2VcIjpjYXNlXCJyZXNldFwiOmNhc2VcInJlc2l6ZVwiOmNhc2VcInNlZWtlZFwiOmNhc2VcInN1Ym1pdFwiOmNhc2VcInRvZ2dsZVwiOmNhc2VcInRvdWNoY2FuY2VsXCI6Y2FzZVwidG91Y2hlbmRcIjpjYXNlXCJ0b3VjaHN0YXJ0XCI6Y2FzZVwidm9sdW1lY2hhbmdlXCI6Y2FzZVwiY2hhbmdlXCI6Y2FzZVwic2VsZWN0aW9uY2hhbmdlXCI6Y2FzZVwidGV4dElucHV0XCI6Y2FzZVwiY29tcG9zaXRpb25zdGFydFwiOmNhc2VcImNvbXBvc2l0aW9uZW5kXCI6Y2FzZVwiY29tcG9zaXRpb251cGRhdGVcIjpjYXNlXCJiZWZvcmVibHVyXCI6Y2FzZVwiYWZ0ZXJibHVyXCI6Y2FzZVwiYmVmb3JlaW5wdXRcIjpjYXNlXCJibHVyXCI6Y2FzZVwiZnVsbHNjcmVlbmNoYW5nZVwiOmNhc2VcImZvY3VzXCI6Y2FzZVwiaGFzaGNoYW5nZVwiOmNhc2VcInBvcHN0YXRlXCI6Y2FzZVwic2VsZWN0XCI6Y2FzZVwic2VsZWN0c3RhcnRcIjpyZXR1cm4gMjtjYXNlXCJkcmFnXCI6Y2FzZVwiZHJhZ2VudGVyXCI6Y2FzZVwiZHJhZ2V4aXRcIjpjYXNlXCJkcmFnbGVhdmVcIjpjYXNlXCJkcmFnb3ZlclwiOmNhc2VcIm1vdXNlbW92ZVwiOmNhc2VcIm1vdXNlb3V0XCI6Y2FzZVwibW91c2VvdmVyXCI6Y2FzZVwicG9pbnRlcm1vdmVcIjpjYXNlXCJwb2ludGVyb3V0XCI6Y2FzZVwicG9pbnRlcm92ZXJcIjpjYXNlXCJzY3JvbGxcIjpjYXNlXCJ0b3VjaG1vdmVcIjpjYXNlXCJ3aGVlbFwiOmNhc2VcIm1vdXNlZW50ZXJcIjpjYXNlXCJtb3VzZWxlYXZlXCI6Y2FzZVwicG9pbnRlcmVudGVyXCI6Y2FzZVwicG9pbnRlcmxlYXZlXCI6cmV0dXJuIDg7Y2FzZVwibWVzc2FnZVwiOnN3aXRjaChlbygpKXtjYXNlIGVhOnJldHVybiAyO2Nhc2UgZWk6cmV0dXJuIDg7Y2FzZSBlbDpjYXNlIGVzOnJldHVybiAzMjtjYXNlIGVjOnJldHVybiAweDEwMDAwMDAwO2RlZmF1bHQ6cmV0dXJuIDMyfWRlZmF1bHQ6cmV0dXJuIDMyfX12YXIgdWQ9ITEsdWY9bnVsbCx1cD1udWxsLHVoPW51bGwsdWc9bmV3IE1hcCx1bT1uZXcgTWFwLHV2PVtdLHViPVwibW91c2Vkb3duIG1vdXNldXAgdG91Y2hjYW5jZWwgdG91Y2hlbmQgdG91Y2hzdGFydCBhdXhjbGljayBkYmxjbGljayBwb2ludGVyY2FuY2VsIHBvaW50ZXJkb3duIHBvaW50ZXJ1cCBkcmFnZW5kIGRyYWdzdGFydCBkcm9wIGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBpbnB1dCB0ZXh0SW5wdXQgY29weSBjdXQgcGFzdGUgY2xpY2sgY2hhbmdlIGNvbnRleHRtZW51IHJlc2V0XCIuc3BsaXQoXCIgXCIpO2Z1bmN0aW9uIHV5KGUsbil7c3dpdGNoKGUpe2Nhc2VcImZvY3VzaW5cIjpjYXNlXCJmb2N1c291dFwiOnVmPW51bGw7YnJlYWs7Y2FzZVwiZHJhZ2VudGVyXCI6Y2FzZVwiZHJhZ2xlYXZlXCI6dXA9bnVsbDticmVhaztjYXNlXCJtb3VzZW92ZXJcIjpjYXNlXCJtb3VzZW91dFwiOnVoPW51bGw7YnJlYWs7Y2FzZVwicG9pbnRlcm92ZXJcIjpjYXNlXCJwb2ludGVyb3V0XCI6dWcuZGVsZXRlKG4ucG9pbnRlcklkKTticmVhaztjYXNlXCJnb3Rwb2ludGVyY2FwdHVyZVwiOmNhc2VcImxvc3Rwb2ludGVyY2FwdHVyZVwiOnVtLmRlbGV0ZShuLnBvaW50ZXJJZCl9fWZ1bmN0aW9uIHV4KGUsbix0LHIsbyxhKXtyZXR1cm4gbnVsbD09PWV8fGUubmF0aXZlRXZlbnQhPT1hPyhlPXtibG9ja2VkT246bixkb21FdmVudE5hbWU6dCxldmVudFN5c3RlbUZsYWdzOnIsbmF0aXZlRXZlbnQ6YSx0YXJnZXRDb250YWluZXJzOltvXX0sbnVsbCE9PW4mJm51bGwhPT0obj1lVyhuKSkmJnVuKG4pKTooZS5ldmVudFN5c3RlbUZsYWdzfD1yLG49ZS50YXJnZXRDb250YWluZXJzLG51bGwhPT1vJiYtMT09PW4uaW5kZXhPZihvKSYmbi5wdXNoKG8pKSxlfWZ1bmN0aW9uIHV3KGUpe3ZhciBuPWVxKGUudGFyZ2V0KTtpZihudWxsIT09bil7dmFyIHQ9cyhuKTtpZihudWxsIT09dCl7aWYoMTM9PT0obj10LnRhZykpe2lmKG51bGwhPT0obj1jKHQpKSl7ZS5ibG9ja2VkT249bixlVChlLnByaW9yaXR5LGZ1bmN0aW9uKCl7dXQodCl9KTtyZXR1cm59fWVsc2UgaWYoMzE9PT1uKXtpZihudWxsIT09KG49dSh0KSkpe2UuYmxvY2tlZE9uPW4sZVQoZS5wcmlvcml0eSxmdW5jdGlvbigpe3V0KHQpfSk7cmV0dXJufX1lbHNlIGlmKDM9PT1uJiZ0LnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXtlLmJsb2NrZWRPbj0zPT09dC50YWc/dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO3JldHVybn19fWUuYmxvY2tlZE9uPW51bGx9ZnVuY3Rpb24gdWooZSl7aWYobnVsbCE9PWUuYmxvY2tlZE9uKXJldHVybiExO2Zvcih2YXIgbj1lLnRhcmdldENvbnRhaW5lcnM7MDxuLmxlbmd0aDspe3ZhciB0PXVsKGUubmF0aXZlRXZlbnQpO2lmKG51bGwhPT10KXJldHVybiBudWxsIT09KG49ZVcodCkpJiZ1bihuKSxlLmJsb2NrZWRPbj10LCExO3ZhciByPW5ldyh0PWUubmF0aXZlRXZlbnQpLmNvbnN0cnVjdG9yKHQudHlwZSx0KTtudj1yLHQudGFyZ2V0LmRpc3BhdGNoRXZlbnQociksbnY9bnVsbCxuLnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gdWsoZSxuLHQpe3VqKGUpJiZ0LmRlbGV0ZShuKX1mdW5jdGlvbiB1QSgpe3VkPSExLG51bGwhPT11ZiYmdWoodWYpJiYodWY9bnVsbCksbnVsbCE9PXVwJiZ1aih1cCkmJih1cD1udWxsKSxudWxsIT09dWgmJnVqKHVoKSYmKHVoPW51bGwpLHVnLmZvckVhY2godWspLHVtLmZvckVhY2godWspfWZ1bmN0aW9uIHVPKGUsbil7ZS5ibG9ja2VkT249PT1uJiYoZS5ibG9ja2VkT249bnVsbCx1ZHx8KHVkPSEwLG8udW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhvLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LHVBKSkpfXZhciB1Qz1udWxsO2Z1bmN0aW9uIHVTKGUpe3VDIT09ZSYmKHVDPWUsby51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKG8udW5zdGFibGVfTm9ybWFsUHJpb3JpdHksZnVuY3Rpb24oKXt1Qz09PWUmJih1Qz1udWxsKTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rPTMpe3ZhciB0PWVbbl0scj1lW24rMV0sbz1lW24rMl07aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgcilpZihudWxsPT09dWMocnx8dCkpY29udGludWU7ZWxzZSBicmVhazt2YXIgYT1lVyh0KTtudWxsIT09YSYmKGUuc3BsaWNlKG4sMyksbi09MyxhSyhhLHtwZW5kaW5nOiEwLGRhdGE6byxtZXRob2Q6dC5tZXRob2QsYWN0aW9uOnJ9LHIsbykpfX0pKX1mdW5jdGlvbiB1RShlKXtmdW5jdGlvbiBuKG4pe3JldHVybiB1TyhuLGUpfW51bGwhPT11ZiYmdU8odWYsZSksbnVsbCE9PXVwJiZ1Tyh1cCxlKSxudWxsIT09dWgmJnVPKHVoLGUpLHVnLmZvckVhY2gobiksdW0uZm9yRWFjaChuKTtmb3IodmFyIHQ9MDt0PHV2Lmxlbmd0aDt0Kyspe3ZhciByPXV2W3RdO3IuYmxvY2tlZE9uPT09ZSYmKHIuYmxvY2tlZE9uPW51bGwpfWZvcig7MDx1di5sZW5ndGgmJm51bGw9PT0odD11dlswXSkuYmxvY2tlZE9uOyl1dyh0KSxudWxsPT09dC5ibG9ja2VkT24mJnV2LnNoaWZ0KCk7aWYobnVsbCE9KHQ9KGUub3duZXJEb2N1bWVudHx8ZSkuJCRyZWFjdEZvcm1SZXBsYXkpKWZvcihyPTA7cjx0Lmxlbmd0aDtyKz0zKXt2YXIgbz10W3JdLGE9dFtyKzFdLGk9b1tlRF18fG51bGw7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYSlpfHx1Uyh0KTtlbHNlIGlmKGkpe3ZhciBsPW51bGw7aWYoYSYmYS5oYXNBdHRyaWJ1dGUoXCJmb3JtQWN0aW9uXCIpKXtpZihvPWEsaT1hW2VEXXx8bnVsbClsPWkuZm9ybUFjdGlvbjtlbHNlIGlmKG51bGwhPT11YyhvKSljb250aW51ZX1lbHNlIGw9aS5hY3Rpb247XCJmdW5jdGlvblwiPT10eXBlb2YgbD90W3IrMV09bDoodC5zcGxpY2UociwzKSxyLT0zKSx1Uyh0KX19fWZ1bmN0aW9uIHVfKCl7ZnVuY3Rpb24gZShlKXtlLmNhbkludGVyY2VwdCYmXCJyZWFjdC10cmFuc2l0aW9uXCI9PT1lLmluZm8mJmUuaW50ZXJjZXB0KHtoYW5kbGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3JldHVybiBvPWV9KX0sZm9jdXNSZXNldDpcIm1hbnVhbFwiLHNjcm9sbDpcIm1hbnVhbFwifSl9ZnVuY3Rpb24gbigpe251bGwhPT1vJiYobygpLG89bnVsbCkscnx8c2V0VGltZW91dCh0LDIwKX1mdW5jdGlvbiB0KCl7aWYoIXImJiFuYXZpZ2F0aW9uLnRyYW5zaXRpb24pe3ZhciBlPW5hdmlnYXRpb24uY3VycmVudEVudHJ5O2UmJm51bGwhPWUudXJsJiZuYXZpZ2F0aW9uLm5hdmlnYXRlKGUudXJsLHtzdGF0ZTplLmdldFN0YXRlKCksaW5mbzpcInJlYWN0LXRyYW5zaXRpb25cIixoaXN0b3J5OlwicmVwbGFjZVwifSl9fWlmKFwib2JqZWN0XCI9PXR5cGVvZiBuYXZpZ2F0aW9uKXt2YXIgcj0hMSxvPW51bGw7cmV0dXJuIG5hdmlnYXRpb24uYWRkRXZlbnRMaXN0ZW5lcihcIm5hdmlnYXRlXCIsZSksbmF2aWdhdGlvbi5hZGRFdmVudExpc3RlbmVyKFwibmF2aWdhdGVzdWNjZXNzXCIsbiksbmF2aWdhdGlvbi5hZGRFdmVudExpc3RlbmVyKFwibmF2aWdhdGVlcnJvclwiLG4pLHNldFRpbWVvdXQodCwxMDApLGZ1bmN0aW9uKCl7cj0hMCxuYXZpZ2F0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJuYXZpZ2F0ZVwiLGUpLG5hdmlnYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm5hdmlnYXRlc3VjY2Vzc1wiLG4pLG5hdmlnYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm5hdmlnYXRlZXJyb3JcIixuKSxudWxsIT09byYmKG8oKSxvPW51bGwpfX19ZnVuY3Rpb24gdVAoZSl7dGhpcy5faW50ZXJuYWxSb290PWV9ZnVuY3Rpb24gdXooZSl7dGhpcy5faW50ZXJuYWxSb290PWV9dXoucHJvdG90eXBlLnJlbmRlcj11UC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXMuX2ludGVybmFsUm9vdDtpZihudWxsPT09bil0aHJvdyBFcnJvcihsKDQwOSkpO2M4KG4uY3VycmVudCxzdCgpLGUsbixudWxsLG51bGwpfSx1ei5wcm90b3R5cGUudW5tb3VudD11UC5wcm90b3R5cGUudW5tb3VudD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ludGVybmFsUm9vdDtpZihudWxsIT09ZSl7dGhpcy5faW50ZXJuYWxSb290PW51bGw7dmFyIG49ZS5jb250YWluZXJJbmZvO2M4KGUuY3VycmVudCwyLG51bGwsZSxudWxsLG51bGwpLHNzKCksbltlQl09bnVsbH19LHV6LnByb3RvdHlwZS51bnN0YWJsZV9zY2hlZHVsZUh5ZHJhdGlvbj1mdW5jdGlvbihlKXtpZihlKXt2YXIgbj1lTCgpO2U9e2Jsb2NrZWRPbjpudWxsLHRhcmdldDplLHByaW9yaXR5Om59O2Zvcih2YXIgdD0wO3Q8dXYubGVuZ3RoJiYwIT09biYmbjx1dlt0XS5wcmlvcml0eTt0KyspO3V2LnNwbGljZSh0LDAsZSksMD09PXQmJnV3KGUpfX07dmFyIHVMPWEudmVyc2lvbjtpZihcIjE5LjIuMC1jYW5hcnktOTdjZGQ1ZDMtMjAyNTA3MTBcIiE9PXVMKXRocm93IEVycm9yKGwoNTI3LHVMLFwiMTkuMi4wLWNhbmFyeS05N2NkZDVkMy0yMDI1MDcxMFwiKSk7aWYoVC5maW5kRE9NTm9kZT1mdW5jdGlvbihlKXt2YXIgbj1lLl9yZWFjdEludGVybmFscztpZih2b2lkIDA9PT1uKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnJlbmRlcil0aHJvdyBFcnJvcihsKDE4OCkpO3Rocm93IEVycm9yKGwoMjY4LGU9T2JqZWN0LmtleXMoZSkuam9pbihcIixcIikpKX1yZXR1cm4gZT1udWxsPT09KGU9bnVsbCE9PShlPWZ1bmN0aW9uKGUpe3ZhciBuPWUuYWx0ZXJuYXRlO2lmKCFuKXtpZihudWxsPT09KG49cyhlKSkpdGhyb3cgRXJyb3IobCgxODgpKTtyZXR1cm4gbiE9PWU/bnVsbDplfWZvcih2YXIgdD1lLHI9bjs7KXt2YXIgbz10LnJldHVybjtpZihudWxsPT09bylicmVhazt2YXIgYT1vLmFsdGVybmF0ZTtpZihudWxsPT09YSl7aWYobnVsbCE9PShyPW8ucmV0dXJuKSl7dD1yO2NvbnRpbnVlfWJyZWFrfWlmKG8uY2hpbGQ9PT1hLmNoaWxkKXtmb3IoYT1vLmNoaWxkO2E7KXtpZihhPT09dClyZXR1cm4gZChvKSxlO2lmKGE9PT1yKXJldHVybiBkKG8pLG47YT1hLnNpYmxpbmd9dGhyb3cgRXJyb3IobCgxODgpKX1pZih0LnJldHVybiE9PXIucmV0dXJuKXQ9byxyPWE7ZWxzZXtmb3IodmFyIGk9ITEsYz1vLmNoaWxkO2M7KXtpZihjPT09dCl7aT0hMCx0PW8scj1hO2JyZWFrfWlmKGM9PT1yKXtpPSEwLHI9byx0PWE7YnJlYWt9Yz1jLnNpYmxpbmd9aWYoIWkpe2ZvcihjPWEuY2hpbGQ7Yzspe2lmKGM9PT10KXtpPSEwLHQ9YSxyPW87YnJlYWt9aWYoYz09PXIpe2k9ITAscj1hLHQ9bzticmVha31jPWMuc2libGluZ31pZighaSl0aHJvdyBFcnJvcihsKDE4OSkpfX1pZih0LmFsdGVybmF0ZSE9PXIpdGhyb3cgRXJyb3IobCgxOTApKX1pZigzIT09dC50YWcpdGhyb3cgRXJyb3IobCgxODgpKTtyZXR1cm4gdC5zdGF0ZU5vZGUuY3VycmVudD09PXQ/ZTpufShuKSk/ZnVuY3Rpb24gZShuKXt2YXIgdD1uLnRhZztpZig1PT09dHx8MjY9PT10fHwyNz09PXR8fDY9PT10KXJldHVybiBuO2ZvcihuPW4uY2hpbGQ7bnVsbCE9PW47KXtpZihudWxsIT09KHQ9ZShuKSkpcmV0dXJuIHQ7bj1uLnNpYmxpbmd9cmV0dXJuIG51bGx9KGUpOm51bGwpP251bGw6ZS5zdGF0ZU5vZGV9LFwidW5kZWZpbmVkXCIhPXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18pe3ZhciB1VD1fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187aWYoIXVULmlzRGlzYWJsZWQmJnVULnN1cHBvcnRzRmliZXIpdHJ5e2VmPXVULmluamVjdCh7YnVuZGxlVHlwZTowLHZlcnNpb246XCIxOS4yLjAtY2FuYXJ5LTk3Y2RkNWQzLTIwMjUwNzEwXCIscmVuZGVyZXJQYWNrYWdlTmFtZTpcInJlYWN0LWRvbVwiLGN1cnJlbnREaXNwYXRjaGVyUmVmOkwscmVjb25jaWxlclZlcnNpb246XCIxOS4yLjAtY2FuYXJ5LTk3Y2RkNWQzLTIwMjUwNzEwXCJ9KSxlcD11VH1jYXRjaChlKXt9fW4uY3JlYXRlUm9vdD1mdW5jdGlvbihlLG4pe2lmKCEodD1lKXx8MSE9PXQubm9kZVR5cGUmJjkhPT10Lm5vZGVUeXBlJiYxMSE9PXQubm9kZVR5cGUpdGhyb3cgRXJyb3IobCgyOTkpKTt2YXIgdCxyLG8sYSxpLHMsYyx1LGQ9ITEsZj1cIlwiLHA9aXUsaD1pZCxnPWlwO3JldHVybiBudWxsIT1uJiYoITA9PT1uLnVuc3RhYmxlX3N0cmljdE1vZGUmJihkPSEwKSx2b2lkIDAhPT1uLmlkZW50aWZpZXJQcmVmaXgmJihmPW4uaWRlbnRpZmllclByZWZpeCksdm9pZCAwIT09bi5vblVuY2F1Z2h0RXJyb3ImJihwPW4ub25VbmNhdWdodEVycm9yKSx2b2lkIDAhPT1uLm9uQ2F1Z2h0RXJyb3ImJihoPW4ub25DYXVnaHRFcnJvciksdm9pZCAwIT09bi5vblJlY292ZXJhYmxlRXJyb3ImJihnPW4ub25SZWNvdmVyYWJsZUVycm9yKSkscj1lLG89MSxhPSExLGk9bnVsbCxzPTAsYz1kLHU9bnVsbCxyPW5ldyBjOShyLG8sYSxmLHAsaCxnLHVfLG51bGwpLG89MSwhMD09PWMmJihvfD0yNCksYz1yZSgzLG51bGwsbnVsbCxvKSxyLmN1cnJlbnQ9YyxjLnN0YXRlTm9kZT1yLG89cjEoKSxvLnJlZkNvdW50Kyssci5wb29sZWRDYWNoZT1vLG8ucmVmQ291bnQrKyxjLm1lbW9pemVkU3RhdGU9e2VsZW1lbnQ6bnVsbCxpc0RlaHlkcmF0ZWQ6YSxjYWNoZTpvfSxvaihjKSxuPXIsZVtlQl09bi5jdXJyZW50LHM2KGUpLG5ldyB1UChuKX19LFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24uanNcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9dChcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9pbmRleC5qc1wiKTtmdW5jdGlvbiBvKGUpe3ZhciBuPVwiaHR0cHM6Ly9yZWFjdC5kZXYvZXJyb3JzL1wiK2U7aWYoMTxhcmd1bWVudHMubGVuZ3RoKXtuKz1cIj9hcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1sxXSk7Zm9yKHZhciB0PTI7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyluKz1cIiZhcmdzW109XCIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1t0XSl9cmV0dXJuXCJNaW5pZmllZCBSZWFjdCBlcnJvciAjXCIrZStcIjsgdmlzaXQgXCIrbitcIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuXCJ9ZnVuY3Rpb24gYSgpe312YXIgaT17ZDp7ZjphLHI6ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcihvKDUyMikpfSxEOmEsQzphLEw6YSxtOmEsWDphLFM6YSxNOmF9LHA6MCxmaW5kRE9NTm9kZTpudWxsfSxsPVN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIikscz1yLl9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERTtmdW5jdGlvbiBjKGUsbil7cmV0dXJuXCJmb250XCI9PT1lP1wiXCI6XCJzdHJpbmdcIj09dHlwZW9mIG4/XCJ1c2UtY3JlZGVudGlhbHNcIj09PW4/bjpcIlwiOnZvaWQgMH1uLl9fRE9NX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERT1pLG4uY3JlYXRlUG9ydGFsPWZ1bmN0aW9uKGUsbil7dmFyIHQ9Mjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7aWYoIW58fDEhPT1uLm5vZGVUeXBlJiY5IT09bi5ub2RlVHlwZSYmMTEhPT1uLm5vZGVUeXBlKXRocm93IEVycm9yKG8oMjk5KSk7cmV0dXJuIGZ1bmN0aW9uKGUsbix0KXt2YXIgcj0zPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtyZXR1cm57JCR0eXBlb2Y6bCxrZXk6bnVsbD09cj9udWxsOlwiXCIrcixjaGlsZHJlbjplLGNvbnRhaW5lckluZm86bixpbXBsZW1lbnRhdGlvbjp0fX0oZSxuLG51bGwsdCl9LG4uZmx1c2hTeW5jPWZ1bmN0aW9uKGUpe3ZhciBuPXMuVCx0PWkucDt0cnl7aWYocy5UPW51bGwsaS5wPTIsZSlyZXR1cm4gZSgpfWZpbmFsbHl7cy5UPW4saS5wPXQsaS5kLmYoKX19LG4ucHJlY29ubmVjdD1mdW5jdGlvbihlLG4pe1wic3RyaW5nXCI9PXR5cGVvZiBlJiYobj1uP1wic3RyaW5nXCI9PXR5cGVvZihuPW4uY3Jvc3NPcmlnaW4pP1widXNlLWNyZWRlbnRpYWxzXCI9PT1uP246XCJcIjp2b2lkIDA6bnVsbCxpLmQuQyhlLG4pKX0sbi5wcmVmZXRjaEROUz1mdW5jdGlvbihlKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmaS5kLkQoZSl9LG4ucHJlaW5pdD1mdW5jdGlvbihlLG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiZuJiZcInN0cmluZ1wiPT10eXBlb2Ygbi5hcyl7dmFyIHQ9bi5hcyxyPWModCxuLmNyb3NzT3JpZ2luKSxvPVwic3RyaW5nXCI9PXR5cGVvZiBuLmludGVncml0eT9uLmludGVncml0eTp2b2lkIDAsYT1cInN0cmluZ1wiPT10eXBlb2Ygbi5mZXRjaFByaW9yaXR5P24uZmV0Y2hQcmlvcml0eTp2b2lkIDA7XCJzdHlsZVwiPT09dD9pLmQuUyhlLFwic3RyaW5nXCI9PXR5cGVvZiBuLnByZWNlZGVuY2U/bi5wcmVjZWRlbmNlOnZvaWQgMCx7Y3Jvc3NPcmlnaW46cixpbnRlZ3JpdHk6byxmZXRjaFByaW9yaXR5OmF9KTpcInNjcmlwdFwiPT09dCYmaS5kLlgoZSx7Y3Jvc3NPcmlnaW46cixpbnRlZ3JpdHk6byxmZXRjaFByaW9yaXR5OmEsbm9uY2U6XCJzdHJpbmdcIj09dHlwZW9mIG4ubm9uY2U/bi5ub25jZTp2b2lkIDB9KX19LG4ucHJlaW5pdE1vZHVsZT1mdW5jdGlvbihlLG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKWlmKFwib2JqZWN0XCI9PXR5cGVvZiBuJiZudWxsIT09bil7aWYobnVsbD09bi5hc3x8XCJzY3JpcHRcIj09PW4uYXMpe3ZhciB0PWMobi5hcyxuLmNyb3NzT3JpZ2luKTtpLmQuTShlLHtjcm9zc09yaWdpbjp0LGludGVncml0eTpcInN0cmluZ1wiPT10eXBlb2Ygbi5pbnRlZ3JpdHk/bi5pbnRlZ3JpdHk6dm9pZCAwLG5vbmNlOlwic3RyaW5nXCI9PXR5cGVvZiBuLm5vbmNlP24ubm9uY2U6dm9pZCAwfSl9fWVsc2UgbnVsbD09biYmaS5kLk0oZSl9LG4ucHJlbG9hZD1mdW5jdGlvbihlLG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiZcIm9iamVjdFwiPT10eXBlb2YgbiYmbnVsbCE9PW4mJlwic3RyaW5nXCI9PXR5cGVvZiBuLmFzKXt2YXIgdD1uLmFzLHI9Yyh0LG4uY3Jvc3NPcmlnaW4pO2kuZC5MKGUsdCx7Y3Jvc3NPcmlnaW46cixpbnRlZ3JpdHk6XCJzdHJpbmdcIj09dHlwZW9mIG4uaW50ZWdyaXR5P24uaW50ZWdyaXR5OnZvaWQgMCxub25jZTpcInN0cmluZ1wiPT10eXBlb2Ygbi5ub25jZT9uLm5vbmNlOnZvaWQgMCx0eXBlOlwic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGU/bi50eXBlOnZvaWQgMCxmZXRjaFByaW9yaXR5Olwic3RyaW5nXCI9PXR5cGVvZiBuLmZldGNoUHJpb3JpdHk/bi5mZXRjaFByaW9yaXR5OnZvaWQgMCxyZWZlcnJlclBvbGljeTpcInN0cmluZ1wiPT10eXBlb2Ygbi5yZWZlcnJlclBvbGljeT9uLnJlZmVycmVyUG9saWN5OnZvaWQgMCxpbWFnZVNyY1NldDpcInN0cmluZ1wiPT10eXBlb2Ygbi5pbWFnZVNyY1NldD9uLmltYWdlU3JjU2V0OnZvaWQgMCxpbWFnZVNpemVzOlwic3RyaW5nXCI9PXR5cGVvZiBuLmltYWdlU2l6ZXM/bi5pbWFnZVNpemVzOnZvaWQgMCxtZWRpYTpcInN0cmluZ1wiPT10eXBlb2Ygbi5tZWRpYT9uLm1lZGlhOnZvaWQgMH0pfX0sbi5wcmVsb2FkTW9kdWxlPWZ1bmN0aW9uKGUsbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpaWYobil7dmFyIHQ9YyhuLmFzLG4uY3Jvc3NPcmlnaW4pO2kuZC5tKGUse2FzOlwic3RyaW5nXCI9PXR5cGVvZiBuLmFzJiZcInNjcmlwdFwiIT09bi5hcz9uLmFzOnZvaWQgMCxjcm9zc09yaWdpbjp0LGludGVncml0eTpcInN0cmluZ1wiPT10eXBlb2Ygbi5pbnRlZ3JpdHk/bi5pbnRlZ3JpdHk6dm9pZCAwfSl9ZWxzZSBpLmQubShlKX0sbi5yZXF1ZXN0Rm9ybVJlc2V0PWZ1bmN0aW9uKGUpe2kuZC5yKGUpfSxuLnVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGUobil9LG4udXNlRm9ybVN0YXRlPWZ1bmN0aW9uKGUsbix0KXtyZXR1cm4gcy5ILnVzZUZvcm1TdGF0ZShlLG4sdCl9LG4udXNlRm9ybVN0YXR1cz1mdW5jdGlvbigpe3JldHVybiBzLkgudXNlSG9zdFRyYW5zaXRpb25TdGF0dXMoKX0sbi52ZXJzaW9uPVwiMTkuMi4wLWNhbmFyeS05N2NkZDVkMy0yMDI1MDcxMFwifSxcIi4vZGlzdC9jb21waWxlZC9yZWFjdC1kb20vY2xpZW50LmpzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiOyFmdW5jdGlvbiBlKCl7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyYmXCJmdW5jdGlvblwiPT10eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKXRyeXtfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoZSl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlKX19KCksZS5leHBvcnRzPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2Nqcy9yZWFjdC1kb20tY2xpZW50LnByb2R1Y3Rpb24uanNcIil9LFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9pbmRleC5qc1wiOmZ1bmN0aW9uKGUsbix0KXtcInVzZSBzdHJpY3RcIjshZnVuY3Rpb24gZSgpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18mJlwiZnVuY3Rpb25cIj09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSl0cnl7X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGUpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9fSgpLGUuZXhwb3J0cz10KFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24uanNcIil9LFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLmpzXCI6ZnVuY3Rpb24oZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgdD1TeW1ib2wuZm9yKFwicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnRcIik7ZnVuY3Rpb24gcihlLG4scil7dmFyIG89bnVsbDtpZih2b2lkIDAhPT1yJiYobz1cIlwiK3IpLHZvaWQgMCE9PW4ua2V5JiYobz1cIlwiK24ua2V5KSxcImtleVwiaW4gbilmb3IodmFyIGEgaW4gcj17fSxuKVwia2V5XCIhPT1hJiYoclthXT1uW2FdKTtlbHNlIHI9bjtyZXR1cm57JCR0eXBlb2Y6dCx0eXBlOmUsa2V5Om8scmVmOnZvaWQgMCE9PShuPXIucmVmKT9uOm51bGwscHJvcHM6cn19bi5GcmFnbWVudD1TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksbi5qc3g9cixuLmpzeHM9cn0sXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LnByb2R1Y3Rpb24uanNcIjpmdW5jdGlvbihlLG4pe1widXNlIHN0cmljdFwiO3ZhciB0PVN5bWJvbC5mb3IoXCJyZWFjdC50cmFuc2l0aW9uYWwuZWxlbWVudFwiKSxyPVN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksbz1TeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksYT1TeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksaT1TeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIiksbD1TeW1ib2wuZm9yKFwicmVhY3QuY29uc3VtZXJcIikscz1TeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSxjPVN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSx1PVN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSxkPVN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLGY9U3ltYm9sLmZvcihcInJlYWN0LmxhenlcIikscD1TeW1ib2wuaXRlcmF0b3IsaD17aXNNb3VudGVkOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbigpe30sZW5xdWV1ZVNldFN0YXRlOmZ1bmN0aW9uKCl7fX0sZz1PYmplY3QuYXNzaWduLG09e307ZnVuY3Rpb24gdihlLG4sdCl7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD1uLHRoaXMucmVmcz1tLHRoaXMudXBkYXRlcj10fHxofWZ1bmN0aW9uIGIoKXt9ZnVuY3Rpb24geShlLG4sdCl7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD1uLHRoaXMucmVmcz1tLHRoaXMudXBkYXRlcj10fHxofXYucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sdi5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSxuKXtpZihcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9ZSl0aHJvdyBFcnJvcihcInRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLlwiKTt0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsZSxuLFwic2V0U3RhdGVcIil9LHYucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyxlLFwiZm9yY2VVcGRhdGVcIil9LGIucHJvdG90eXBlPXYucHJvdG90eXBlO3ZhciB4PXkucHJvdG90eXBlPW5ldyBiO3guY29uc3RydWN0b3I9eSxnKHgsdi5wcm90b3R5cGUpLHguaXNQdXJlUmVhY3RDb21wb25lbnQ9ITA7dmFyIHc9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBqKCl7fXZhciBrPXtIOm51bGwsQTpudWxsLFQ6bnVsbCxTOm51bGx9LEE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBPKGUsbixyLG8sYSxpKXtyZXR1cm57JCR0eXBlb2Y6dCx0eXBlOmUsa2V5Om4scmVmOnZvaWQgMCE9PShyPWkucmVmKT9yOm51bGwscHJvcHM6aX19ZnVuY3Rpb24gQyhlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWUmJmUuJCR0eXBlb2Y9PT10fXZhciBTPS9cXC8rL2c7ZnVuY3Rpb24gRShlLG4pe3ZhciB0LHI7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZudWxsIT1lLmtleT8odD1cIlwiK2Uua2V5LHI9e1wiPVwiOlwiPTBcIixcIjpcIjpcIj0yXCJ9LFwiJFwiK3QucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKGUpe3JldHVybiByW2VdfSkpOm4udG9TdHJpbmcoMzYpfWZ1bmN0aW9uIF8oZSxuLG8pe2lmKG51bGw9PWUpcmV0dXJuIGU7dmFyIGE9W10saT0wO3JldHVybiFmdW5jdGlvbiBlKG4sbyxhLGksbCl7dmFyIHMsYyx1LGQ9dHlwZW9mIG47KFwidW5kZWZpbmVkXCI9PT1kfHxcImJvb2xlYW5cIj09PWQpJiYobj1udWxsKTt2YXIgaD0hMTtpZihudWxsPT09biloPSEwO2Vsc2Ugc3dpdGNoKGQpe2Nhc2VcImJpZ2ludFwiOmNhc2VcInN0cmluZ1wiOmNhc2VcIm51bWJlclwiOmg9ITA7YnJlYWs7Y2FzZVwib2JqZWN0XCI6c3dpdGNoKG4uJCR0eXBlb2Ype2Nhc2UgdDpjYXNlIHI6aD0hMDticmVhaztjYXNlIGY6cmV0dXJuIGUoKGg9bi5faW5pdCkobi5fcGF5bG9hZCksbyxhLGksbCl9fWlmKGgpcmV0dXJuIGw9bChuKSxoPVwiXCI9PT1pP1wiLlwiK0UobiwwKTppLHcobCk/KGE9XCJcIixudWxsIT1oJiYoYT1oLnJlcGxhY2UoUyxcIiQmL1wiKStcIi9cIiksZShsLG8sYSxcIlwiLGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpOm51bGwhPWwmJihDKGwpJiYocz1sLGM9YSsobnVsbD09bC5rZXl8fG4mJm4ua2V5PT09bC5rZXk/XCJcIjooXCJcIitsLmtleSkucmVwbGFjZShTLFwiJCYvXCIpK1wiL1wiKStoLGw9TyhzLnR5cGUsYyx2b2lkIDAsdm9pZCAwLHZvaWQgMCxzLnByb3BzKSksby5wdXNoKGwpKSwxO2g9MDt2YXIgZz1cIlwiPT09aT9cIi5cIjppK1wiOlwiO2lmKHcobikpZm9yKHZhciBtPTA7bTxuLmxlbmd0aDttKyspZD1nK0UoaT1uW21dLG0pLGgrPWUoaSxvLGEsZCxsKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mKG09bnVsbD09PSh1PW4pfHxcIm9iamVjdFwiIT10eXBlb2YgdT9udWxsOlwiZnVuY3Rpb25cIj09dHlwZW9mKHU9cCYmdVtwXXx8dVtcIkBAaXRlcmF0b3JcIl0pP3U6bnVsbCkpZm9yKG49bS5jYWxsKG4pLG09MDshKGk9bi5uZXh0KCkpLmRvbmU7KWQ9ZytFKGk9aS52YWx1ZSxtKyspLGgrPWUoaSxvLGEsZCxsKTtlbHNlIGlmKFwib2JqZWN0XCI9PT1kKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnRoZW4pcmV0dXJuIGUoZnVuY3Rpb24oZSl7c3dpdGNoKGUuc3RhdHVzKXtjYXNlXCJmdWxmaWxsZWRcIjpyZXR1cm4gZS52YWx1ZTtjYXNlXCJyZWplY3RlZFwiOnRocm93IGUucmVhc29uO2RlZmF1bHQ6c3dpdGNoKFwic3RyaW5nXCI9PXR5cGVvZiBlLnN0YXR1cz9lLnRoZW4oaixqKTooZS5zdGF0dXM9XCJwZW5kaW5nXCIsZS50aGVuKGZ1bmN0aW9uKG4pe1wicGVuZGluZ1wiPT09ZS5zdGF0dXMmJihlLnN0YXR1cz1cImZ1bGZpbGxlZFwiLGUudmFsdWU9bil9LGZ1bmN0aW9uKG4pe1wicGVuZGluZ1wiPT09ZS5zdGF0dXMmJihlLnN0YXR1cz1cInJlamVjdGVkXCIsZS5yZWFzb249bil9KSksZS5zdGF0dXMpe2Nhc2VcImZ1bGZpbGxlZFwiOnJldHVybiBlLnZhbHVlO2Nhc2VcInJlamVjdGVkXCI6dGhyb3cgZS5yZWFzb259fXRocm93IGV9KG4pLG8sYSxpLGwpO3Rocm93IEVycm9yKFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIisoXCJbb2JqZWN0IE9iamVjdF1cIj09PShvPVN0cmluZyhuKSk/XCJvYmplY3Qgd2l0aCBrZXlzIHtcIitPYmplY3Qua2V5cyhuKS5qb2luKFwiLCBcIikrXCJ9XCI6bykrXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCIpfXJldHVybiBofShlLGEsXCJcIixcIlwiLGZ1bmN0aW9uKGUpe3JldHVybiBuLmNhbGwobyxlLGkrKyl9KSxhfWZ1bmN0aW9uIFAoZSl7aWYoLTE9PT1lLl9zdGF0dXMpe3ZhciBuPWUuX3Jlc3VsdDsobj1uKCkpLnRoZW4oZnVuY3Rpb24obil7KDA9PT1lLl9zdGF0dXN8fC0xPT09ZS5fc3RhdHVzKSYmKGUuX3N0YXR1cz0xLGUuX3Jlc3VsdD1uKX0sZnVuY3Rpb24obil7KDA9PT1lLl9zdGF0dXN8fC0xPT09ZS5fc3RhdHVzKSYmKGUuX3N0YXR1cz0yLGUuX3Jlc3VsdD1uKX0pLC0xPT09ZS5fc3RhdHVzJiYoZS5fc3RhdHVzPTAsZS5fcmVzdWx0PW4pfWlmKDE9PT1lLl9zdGF0dXMpcmV0dXJuIGUuX3Jlc3VsdC5kZWZhdWx0O3Rocm93IGUuX3Jlc3VsdH12YXIgej1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXBvcnRFcnJvcj9yZXBvcnRFcnJvcjpmdW5jdGlvbihlKXtpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3aW5kb3cuRXJyb3JFdmVudCl7dmFyIG49bmV3IHdpbmRvdy5FcnJvckV2ZW50KFwiZXJyb3JcIix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLG1lc3NhZ2U6XCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPT1lJiZcInN0cmluZ1wiPT10eXBlb2YgZS5tZXNzYWdlP1N0cmluZyhlLm1lc3NhZ2UpOlN0cmluZyhlKSxlcnJvcjplfSk7aWYoIXdpbmRvdy5kaXNwYXRjaEV2ZW50KG4pKXJldHVybn1lbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiBwcm9jZXNzJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwcm9jZXNzLmVtaXQpcmV0dXJuIHZvaWQgcHJvY2Vzcy5lbWl0KFwidW5jYXVnaHRFeGNlcHRpb25cIixlKTtjb25zb2xlLmVycm9yKGUpfTtuLkNoaWxkcmVuPXttYXA6Xyxmb3JFYWNoOmZ1bmN0aW9uKGUsbix0KXtfKGUsZnVuY3Rpb24oKXtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdCl9LGNvdW50OmZ1bmN0aW9uKGUpe3ZhciBuPTA7cmV0dXJuIF8oZSxmdW5jdGlvbigpe24rK30pLG59LHRvQXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIF8oZSxmdW5jdGlvbihlKXtyZXR1cm4gZX0pfHxbXX0sb25seTpmdW5jdGlvbihlKXtpZighQyhlKSl0aHJvdyBFcnJvcihcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiKTtyZXR1cm4gZX19LG4uQ29tcG9uZW50PXYsbi5GcmFnbWVudD1vLG4uUHJvZmlsZXI9aSxuLlB1cmVDb21wb25lbnQ9eSxuLlN0cmljdE1vZGU9YSxuLlN1c3BlbnNlPXUsbi5fX0NMSUVOVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREU9ayxuLl9fQ09NUElMRVJfUlVOVElNRT17X19wcm90b19fOm51bGwsYzpmdW5jdGlvbihlKXtyZXR1cm4gay5ILnVzZU1lbW9DYWNoZShlKX19LG4uY2FjaGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkobnVsbCxhcmd1bWVudHMpfX0sbi5jYWNoZVNpZ25hbD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxuLmNsb25lRWxlbWVudD1mdW5jdGlvbihlLG4sdCl7aWYobnVsbD09ZSl0aHJvdyBFcnJvcihcIlRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgXCIrZStcIi5cIik7dmFyIHI9Zyh7fSxlLnByb3BzKSxvPWUua2V5LGE9dm9pZCAwO2lmKG51bGwhPW4pZm9yKGkgaW4gdm9pZCAwIT09bi5yZWYmJihhPXZvaWQgMCksdm9pZCAwIT09bi5rZXkmJihvPVwiXCIrbi5rZXkpLG4pQS5jYWxsKG4saSkmJlwia2V5XCIhPT1pJiZcIl9fc2VsZlwiIT09aSYmXCJfX3NvdXJjZVwiIT09aSYmKFwicmVmXCIhPT1pfHx2b2lkIDAhPT1uLnJlZikmJihyW2ldPW5baV0pO3ZhciBpPWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09aSlyLmNoaWxkcmVuPXQ7ZWxzZSBpZigxPGkpe2Zvcih2YXIgbD1BcnJheShpKSxzPTA7czxpO3MrKylsW3NdPWFyZ3VtZW50c1tzKzJdO3IuY2hpbGRyZW49bH1yZXR1cm4gTyhlLnR5cGUsbyx2b2lkIDAsdm9pZCAwLGEscil9LG4uY3JlYXRlQ29udGV4dD1mdW5jdGlvbihlKXtyZXR1cm4oZT17JCR0eXBlb2Y6cyxfY3VycmVudFZhbHVlOmUsX2N1cnJlbnRWYWx1ZTI6ZSxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9KS5Qcm92aWRlcj1lLGUuQ29uc3VtZXI9eyQkdHlwZW9mOmwsX2NvbnRleHQ6ZX0sZX0sbi5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGUsbix0KXt2YXIgcixvPXt9LGE9bnVsbDtpZihudWxsIT1uKWZvcihyIGluIHZvaWQgMCE9PW4ua2V5JiYoYT1cIlwiK24ua2V5KSxuKUEuY2FsbChuLHIpJiZcImtleVwiIT09ciYmXCJfX3NlbGZcIiE9PXImJlwiX19zb3VyY2VcIiE9PXImJihvW3JdPW5bcl0pO3ZhciBpPWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09aSlvLmNoaWxkcmVuPXQ7ZWxzZSBpZigxPGkpe2Zvcih2YXIgbD1BcnJheShpKSxzPTA7czxpO3MrKylsW3NdPWFyZ3VtZW50c1tzKzJdO28uY2hpbGRyZW49bH1pZihlJiZlLmRlZmF1bHRQcm9wcylmb3IociBpbiBpPWUuZGVmYXVsdFByb3BzKXZvaWQgMD09PW9bcl0mJihvW3JdPWlbcl0pO3JldHVybiBPKGUsYSx2b2lkIDAsdm9pZCAwLG51bGwsbyl9LG4uY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19LG4uZm9yd2FyZFJlZj1mdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6YyxyZW5kZXI6ZX19LG4uaXNWYWxpZEVsZW1lbnQ9QyxuLmxhenk9ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOmYsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDplfSxfaW5pdDpQfX0sbi5tZW1vPWZ1bmN0aW9uKGUsbil7cmV0dXJueyQkdHlwZW9mOmQsdHlwZTplLGNvbXBhcmU6dm9pZCAwPT09bj9udWxsOm59fSxuLnN0YXJ0VHJhbnNpdGlvbj1mdW5jdGlvbihlKXt2YXIgbj1rLlQsdD17fTtrLlQ9dDt0cnl7dmFyIHI9ZSgpLG89ay5TO251bGwhPT1vJiZvKHQsciksXCJvYmplY3RcIj09dHlwZW9mIHImJm51bGwhPT1yJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiByLnRoZW4mJnIudGhlbihqLHopfWNhdGNoKGUpe3ooZSl9ZmluYWxseXtudWxsIT09biYmbnVsbCE9PXQudHlwZXMmJihuLnR5cGVzPXQudHlwZXMpLGsuVD1ufX0sbi51bnN0YWJsZV91c2VDYWNoZVJlZnJlc2g9ZnVuY3Rpb24oKXtyZXR1cm4gay5ILnVzZUNhY2hlUmVmcmVzaCgpfSxuLnVzZT1mdW5jdGlvbihlKXtyZXR1cm4gay5ILnVzZShlKX0sbi51c2VBY3Rpb25TdGF0ZT1mdW5jdGlvbihlLG4sdCl7cmV0dXJuIGsuSC51c2VBY3Rpb25TdGF0ZShlLG4sdCl9LG4udXNlQ2FsbGJhY2s9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gay5ILnVzZUNhbGxiYWNrKGUsbil9LG4udXNlQ29udGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gay5ILnVzZUNvbnRleHQoZSl9LG4udXNlRGVidWdWYWx1ZT1mdW5jdGlvbigpe30sbi51c2VEZWZlcnJlZFZhbHVlPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGsuSC51c2VEZWZlcnJlZFZhbHVlKGUsbil9LG4udXNlRWZmZWN0PWZ1bmN0aW9uKGUsbil7cmV0dXJuIGsuSC51c2VFZmZlY3QoZSxuKX0sbi51c2VJZD1mdW5jdGlvbigpe3JldHVybiBrLkgudXNlSWQoKX0sbi51c2VJbXBlcmF0aXZlSGFuZGxlPWZ1bmN0aW9uKGUsbix0KXtyZXR1cm4gay5ILnVzZUltcGVyYXRpdmVIYW5kbGUoZSxuLHQpfSxuLnVzZUluc2VydGlvbkVmZmVjdD1mdW5jdGlvbihlLG4pe3JldHVybiBrLkgudXNlSW5zZXJ0aW9uRWZmZWN0KGUsbil9LG4udXNlTGF5b3V0RWZmZWN0PWZ1bmN0aW9uKGUsbil7cmV0dXJuIGsuSC51c2VMYXlvdXRFZmZlY3QoZSxuKX0sbi51c2VNZW1vPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGsuSC51c2VNZW1vKGUsbil9LG4udXNlT3B0aW1pc3RpYz1mdW5jdGlvbihlLG4pe3JldHVybiBrLkgudXNlT3B0aW1pc3RpYyhlLG4pfSxuLnVzZVJlZHVjZXI9ZnVuY3Rpb24oZSxuLHQpe3JldHVybiBrLkgudXNlUmVkdWNlcihlLG4sdCl9LG4udXNlUmVmPWZ1bmN0aW9uKGUpe3JldHVybiBrLkgudXNlUmVmKGUpfSxuLnVzZVN0YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBrLkgudXNlU3RhdGUoZSl9LG4udXNlU3luY0V4dGVybmFsU3RvcmU9ZnVuY3Rpb24oZSxuLHQpe3JldHVybiBrLkgudXNlU3luY0V4dGVybmFsU3RvcmUoZSxuLHQpfSxuLnVzZVRyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gay5ILnVzZVRyYW5zaXRpb24oKX0sbi52ZXJzaW9uPVwiMTkuMi4wLWNhbmFyeS05N2NkZDVkMy0yMDI1MDcxMFwifSxcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9pbmRleC5qc1wiOmZ1bmN0aW9uKGUsbix0KXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9janMvcmVhY3QucHJvZHVjdGlvbi5qc1wiKX0sXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LXJ1bnRpbWUuanNcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1ydW50aW1lLnByb2R1Y3Rpb24uanNcIil9LFwiLi9kaXN0L2NvbXBpbGVkL3NjaGVkdWxlci9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24uanNcIjpmdW5jdGlvbihlLG4pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHQoZSxuKXt2YXIgdD1lLmxlbmd0aDtmb3IoZS5wdXNoKG4pOzA8dDspe3ZhciByPXQtMT4+PjEsbz1lW3JdO2lmKDA8YShvLG4pKWVbcl09bixlW3RdPW8sdD1yO2Vsc2UgYnJlYWt9fWZ1bmN0aW9uIHIoZSl7cmV0dXJuIDA9PT1lLmxlbmd0aD9udWxsOmVbMF19ZnVuY3Rpb24gbyhlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIG49ZVswXSx0PWUucG9wKCk7aWYodCE9PW4pe2VbMF09dDtmb3IodmFyIHI9MCxvPWUubGVuZ3RoLGk9bz4+PjE7cjxpOyl7dmFyIGw9MioocisxKS0xLHM9ZVtsXSxjPWwrMSx1PWVbY107aWYoMD5hKHMsdCkpYzxvJiYwPmEodSxzKT8oZVtyXT11LGVbY109dCxyPWMpOihlW3JdPXMsZVtsXT10LHI9bCk7ZWxzZSBpZihjPG8mJjA+YSh1LHQpKWVbcl09dSxlW2NdPXQscj1jO2Vsc2UgYnJlYWt9fXJldHVybiBufWZ1bmN0aW9uIGEoZSxuKXt2YXIgdD1lLnNvcnRJbmRleC1uLnNvcnRJbmRleDtyZXR1cm4gMCE9PXQ/dDplLmlkLW4uaWR9aWYobi51bnN0YWJsZV9ub3c9dm9pZCAwLFwib2JqZWN0XCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgcGVyZm9ybWFuY2Uubm93KXt2YXIgaSxsPXBlcmZvcm1hbmNlO24udW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIGwubm93KCl9fWVsc2V7dmFyIHM9RGF0ZSxjPXMubm93KCk7bi51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gcy5ub3coKS1jfX12YXIgdT1bXSxkPVtdLGY9MSxwPW51bGwsaD0zLGc9ITEsbT0hMSx2PSExLGI9ITEseT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6bnVsbCx4PVwiZnVuY3Rpb25cIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6bnVsbCx3PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZXRJbW1lZGlhdGU/c2V0SW1tZWRpYXRlOm51bGw7ZnVuY3Rpb24gaihlKXtmb3IodmFyIG49cihkKTtudWxsIT09bjspe2lmKG51bGw9PT1uLmNhbGxiYWNrKW8oZCk7ZWxzZSBpZihuLnN0YXJ0VGltZTw9ZSlvKGQpLG4uc29ydEluZGV4PW4uZXhwaXJhdGlvblRpbWUsdCh1LG4pO2Vsc2UgYnJlYWs7bj1yKGQpfX1mdW5jdGlvbiBrKGUpe2lmKHY9ITEsaihlKSwhbSlpZihudWxsIT09cih1KSltPSEwLEF8fChBPSEwLGkoKSk7ZWxzZXt2YXIgbj1yKGQpO251bGwhPT1uJiZMKGssbi5zdGFydFRpbWUtZSl9fXZhciBBPSExLE89LTEsQz01LFM9LTE7ZnVuY3Rpb24gRSgpe3JldHVybiEhYnx8IShuLnVuc3RhYmxlX25vdygpLVM8Qyl9ZnVuY3Rpb24gXygpe2lmKGI9ITEsQSl7dmFyIGU9bi51bnN0YWJsZV9ub3coKTtTPWU7dmFyIHQ9ITA7dHJ5e2U6e209ITEsdiYmKHY9ITEseChPKSxPPS0xKSxnPSEwO3ZhciBhPWg7dHJ5e246e2ZvcihqKGUpLHA9cih1KTtudWxsIT09cCYmIShwLmV4cGlyYXRpb25UaW1lPmUmJkUoKSk7KXt2YXIgbD1wLmNhbGxiYWNrO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGwpe3AuY2FsbGJhY2s9bnVsbCxoPXAucHJpb3JpdHlMZXZlbDt2YXIgcz1sKHAuZXhwaXJhdGlvblRpbWU8PWUpO2lmKGU9bi51bnN0YWJsZV9ub3coKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBzKXtwLmNhbGxiYWNrPXMsaihlKSx0PSEwO2JyZWFrIG59cD09PXIodSkmJm8odSksaihlKX1lbHNlIG8odSk7cD1yKHUpfWlmKG51bGwhPT1wKXQ9ITA7ZWxzZXt2YXIgYz1yKGQpO251bGwhPT1jJiZMKGssYy5zdGFydFRpbWUtZSksdD0hMX19YnJlYWsgZX1maW5hbGx5e3A9bnVsbCxoPWEsZz0hMX19fWZpbmFsbHl7dD9pKCk6QT0hMX19fWlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHcpaT1mdW5jdGlvbigpe3coXyl9O2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIE1lc3NhZ2VDaGFubmVsKXt2YXIgUD1uZXcgTWVzc2FnZUNoYW5uZWwsej1QLnBvcnQyO1AucG9ydDEub25tZXNzYWdlPV8saT1mdW5jdGlvbigpe3oucG9zdE1lc3NhZ2UobnVsbCl9fWVsc2UgaT1mdW5jdGlvbigpe3koXywwKX07ZnVuY3Rpb24gTChlLHQpe089eShmdW5jdGlvbigpe2Uobi51bnN0YWJsZV9ub3coKSl9LHQpfW4udW5zdGFibGVfSWRsZVByaW9yaXR5PTUsbi51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eT0xLG4udW5zdGFibGVfTG93UHJpb3JpdHk9NCxuLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5PTMsbi51bnN0YWJsZV9Qcm9maWxpbmc9bnVsbCxuLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5PTIsbi51bnN0YWJsZV9jYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihlKXtlLmNhbGxiYWNrPW51bGx9LG4udW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9ZnVuY3Rpb24oZSl7MD5lfHwxMjU8ZT9jb25zb2xlLmVycm9yKFwiZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsIGZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkXCIpOkM9MDxlP01hdGguZmxvb3IoMWUzL2UpOjV9LG4udW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gaH0sbi51bnN0YWJsZV9uZXh0PWZ1bmN0aW9uKGUpe3N3aXRjaChoKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzp2YXIgbj0zO2JyZWFrO2RlZmF1bHQ6bj1ofXZhciB0PWg7aD1uO3RyeXtyZXR1cm4gZSgpfWZpbmFsbHl7aD10fX0sbi51bnN0YWJsZV9yZXF1ZXN0UGFpbnQ9ZnVuY3Rpb24oKXtiPSEwfSxuLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eT1mdW5jdGlvbihlLG4pe3N3aXRjaChlKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmJyZWFrO2RlZmF1bHQ6ZT0zfXZhciB0PWg7aD1lO3RyeXtyZXR1cm4gbigpfWZpbmFsbHl7aD10fX0sbi51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrPWZ1bmN0aW9uKGUsbyxhKXt2YXIgbD1uLnVuc3RhYmxlX25vdygpO3N3aXRjaChhPVwib2JqZWN0XCI9PXR5cGVvZiBhJiZudWxsIT09YSYmXCJudW1iZXJcIj09dHlwZW9mKGE9YS5kZWxheSkmJjA8YT9sK2E6bCxlKXtjYXNlIDE6dmFyIHM9LTE7YnJlYWs7Y2FzZSAyOnM9MjUwO2JyZWFrO2Nhc2UgNTpzPTB4M2ZmZmZmZmY7YnJlYWs7Y2FzZSA0OnM9MWU0O2JyZWFrO2RlZmF1bHQ6cz01ZTN9cmV0dXJuIHM9YStzLGU9e2lkOmYrKyxjYWxsYmFjazpvLHByaW9yaXR5TGV2ZWw6ZSxzdGFydFRpbWU6YSxleHBpcmF0aW9uVGltZTpzLHNvcnRJbmRleDotMX0sYT5sPyhlLnNvcnRJbmRleD1hLHQoZCxlKSxudWxsPT09cih1KSYmZT09PXIoZCkmJih2Pyh4KE8pLE89LTEpOnY9ITAsTChrLGEtbCkpKTooZS5zb3J0SW5kZXg9cyx0KHUsZSksbXx8Z3x8KG09ITAsQXx8KEE9ITAsaSgpKSkpLGV9LG4udW5zdGFibGVfc2hvdWxkWWllbGQ9RSxuLnVuc3RhYmxlX3dyYXBDYWxsYmFjaz1mdW5jdGlvbihlKXt2YXIgbj1oO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWg7aD1uO3RyeXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtoPXR9fX19LFwiLi9kaXN0L2NvbXBpbGVkL3NjaGVkdWxlci9pbmRleC5qc1wiOmZ1bmN0aW9uKGUsbix0KXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9dChcIi4vZGlzdC9jb21waWxlZC9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci5wcm9kdWN0aW9uLmpzXCIpfSxcIi4vZGlzdC9jb21waWxlZC9zdGFja3RyYWNlLXBhcnNlci9zdGFjay10cmFjZS1wYXJzZXIuY2pzLmpzXCI6ZnVuY3Rpb24oZSl7KCgpPT57XCJ1c2Ugc3RyaWN0XCI7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18mJihfX25jY3dwY2tfcmVxdWlyZV9fLmFiPVwiLy9cIik7dmFyIG4sdCxyLG8sYSxpLGwscyxjPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLG49XCI8dW5rbm93bj5cIix0PS9eXFxzKmF0ICguKj8pID9cXCgoKD86ZmlsZXxodHRwcz98YmxvYnxjaHJvbWUtZXh0ZW5zaW9ufG5hdGl2ZXxldmFsfHdlYnBhY2t8d2VicGFjay1pbnRlcm5hbHxyc2N8dHVyYm9wYWNrfDxhbm9ueW1vdXM+fFxcL3xbYS16XTpcXFxcfFxcXFxcXFxcKS4qPykoPzo6KFxcZCspKT8oPzo6KFxcZCspKT9cXCk/XFxzKiQvaSxyPS9cXCgoXFxTKikoPzo6KFxcZCspKSg/OjooXFxkKykpXFwpLyxvPS9eXFxzKmF0ICg/OigoPzpcXFtvYmplY3Qgb2JqZWN0XFxdKT8uKykgKT9cXCg/KCg/OmZpbGV8bXMtYXBweHxodHRwcz98d2VicGFja3x3ZWJwYWNrLWludGVybmFsfHJzY3x0dXJib3BhY2t8YmxvYik6Lio/KTooXFxkKykoPzo6KFxcZCspKT9cXCk/XFxzKiQvaSxhPS9eXFxzKiguKj8pKD86XFwoKC4qPylcXCkpPyg/Ol58QCkoKD86ZmlsZXxodHRwcz98YmxvYnxjaHJvbWV8d2VicGFja3x3ZWJwYWNrLWludGVybmFsfHJzY3x0dXJib3BhY2t8cmVzb3VyY2V8XFxbbmF0aXZlKS4qP3xbXkBdKmJ1bmRsZSkoPzo6KFxcZCspKT8oPzo6KFxcZCspKT9cXHMqJC9pLGk9LyhcXFMrKSBsaW5lIChcXGQrKSg/OiA+IGV2YWwgbGluZSBcXGQrKSogPiBldmFsL2ksbD0vXlxccyooPzooW15AXSopKD86XFwoKC4qPylcXCkpP0ApPyhcXFMuKj8pOihcXGQrKSg/OjooXFxkKykpP1xccyokL2kscz0vXlxccyphdCAoPzooKD86XFxbb2JqZWN0IG9iamVjdFxcXSk/W15cXFxcL10rKD86IFxcW2FzIFxcUytcXF0pPykgKT9cXCg/KC4qPyk6KFxcZCspKD86OihcXGQrKSk/XFwpP1xccyokL2ksYy5wYXJzZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdChcIlxcblwiKS5yZWR1Y2UoZnVuY3Rpb24oZSxjKXt2YXIgdSxkLGYscCxoLGcsbT1mdW5jdGlvbihlKXt2YXIgbz10LmV4ZWMoZSk7aWYoIW8pcmV0dXJuIG51bGw7dmFyIGE9b1syXSYmMD09PW9bMl0uaW5kZXhPZihcIm5hdGl2ZVwiKSxpPW9bMl0mJjA9PT1vWzJdLmluZGV4T2YoXCJldmFsXCIpLGw9ci5leGVjKG9bMl0pO3JldHVybiBpJiZudWxsIT1sJiYob1syXT1sWzFdLG9bM109bFsyXSxvWzRdPWxbM10pLHtmaWxlOmE/bnVsbDpvWzJdLG1ldGhvZE5hbWU6b1sxXXx8bixhcmd1bWVudHM6YT9bb1syXV06W10sbGluZU51bWJlcjpvWzNdPytvWzNdOm51bGwsY29sdW1uOm9bNF0/K29bNF06bnVsbH19KGMpfHwodT1jLChkPW8uZXhlYyh1KSk/e2ZpbGU6ZFsyXSxtZXRob2ROYW1lOmRbMV18fG4sYXJndW1lbnRzOltdLGxpbmVOdW1iZXI6K2RbM10sY29sdW1uOmRbNF0/K2RbNF06bnVsbH06bnVsbCl8fGZ1bmN0aW9uKGUpe3ZhciB0PWEuZXhlYyhlKTtpZighdClyZXR1cm4gbnVsbDt2YXIgcj10WzNdJiZ0WzNdLmluZGV4T2YoXCIgPiBldmFsXCIpPi0xLG89aS5leGVjKHRbM10pO3JldHVybiByJiZudWxsIT1vJiYodFszXT1vWzFdLHRbNF09b1syXSx0WzVdPW51bGwpLHtmaWxlOnRbM10sbWV0aG9kTmFtZTp0WzFdfHxuLGFyZ3VtZW50czp0WzJdP3RbMl0uc3BsaXQoXCIsXCIpOltdLGxpbmVOdW1iZXI6dFs0XT8rdFs0XTpudWxsLGNvbHVtbjp0WzVdPyt0WzVdOm51bGx9fShjKXx8KGY9YywocD1zLmV4ZWMoZikpP3tmaWxlOnBbMl0sbWV0aG9kTmFtZTpwWzFdfHxuLGFyZ3VtZW50czpbXSxsaW5lTnVtYmVyOitwWzNdLGNvbHVtbjpwWzRdPytwWzRdOm51bGx9Om51bGwpfHwoaD1jLChnPWwuZXhlYyhoKSk/e2ZpbGU6Z1szXSxtZXRob2ROYW1lOmdbMV18fG4sYXJndW1lbnRzOltdLGxpbmVOdW1iZXI6K2dbNF0sY29sdW1uOmdbNV0/K2dbNV06bnVsbH06bnVsbCk7cmV0dXJuIG0mJmUucHVzaChtKSxlfSxbXSl9LGUuZXhwb3J0cz1jfSkoKX0sXCIuL2Rpc3QvY29tcGlsZWQvc3RyaXAtYW5zaS9pbmRleC5qc1wiOmZ1bmN0aW9uKGUpeygoKT0+e1widXNlIHN0cmljdFwiO3ZhciBuPXs1MTE6ZT0+e2UuZXhwb3J0cz0oe29ubHlGaXJzdDplPSExfT17fSk9PlJlZ0V4cChcIltcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyl8KD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFItVFpjZi1udHFyeT0+PH5dKSlcIixlP3ZvaWQgMDpcImdcIil9LDUzMjooZSxuLHQpPT57bGV0IHI9dCg1MTEpO2UuZXhwb3J0cz1lPT5cInN0cmluZ1wiPT10eXBlb2YgZT9lLnJlcGxhY2UocigpLFwiXCIpOmV9fSx0PXt9O2Z1bmN0aW9uIHIoZSl7dmFyIG89dFtlXTtpZih2b2lkIDAhPT1vKXJldHVybiBvLmV4cG9ydHM7dmFyIGE9dFtlXT17ZXhwb3J0czp7fX0saT0hMDt0cnl7bltlXShhLGEuZXhwb3J0cyxyKSxpPSExfWZpbmFsbHl7aSYmZGVsZXRlIHRbZV19cmV0dXJuIGEuZXhwb3J0c31yLmFiPVwiLy9cIixlLmV4cG9ydHM9cig1MzIpfSkoKX0sXCIuL3NyYy9idWlsZC93ZWJwYWNrL2xvYWRlcnMvZGV2dG9vbC9kZXZ0b29sLXN0eWxlLWluamVjdC5qc1wiOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXtsZXQgZT13aW5kb3cuX25leHRqc0RldnRvb2xzU3R5bGVDYWNoZTtpZihlLmNhY2hlZFNoYWRvd1Jvb3QpcmV0dXJuIGUuY2FjaGVkU2hhZG93Um9vdDtsZXQgbj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibmV4dGpzLXBvcnRhbFwiKSx0PW4/LnNoYWRvd1Jvb3R8fG51bGw7cmV0dXJuIHQmJihlLmNhY2hlZFNoYWRvd1Jvb3Q9dCksdH1mdW5jdGlvbiB0KGUsbil7bGV0IHQ9d2luZG93Ll9uZXh0anNEZXZ0b29sc1N0eWxlQ2FjaGU7dC5sYXN0SW5zZXJ0ZWRFbGVtZW50P3QubGFzdEluc2VydGVkRWxlbWVudC5uZXh0U2libGluZz9uLmluc2VydEJlZm9yZShlLHQubGFzdEluc2VydGVkRWxlbWVudC5uZXh0U2libGluZyk6bi5hcHBlbmRDaGlsZChlKTpuLmluc2VydEJlZm9yZShlLG4uZmlyc3RDaGlsZCksdC5sYXN0SW5zZXJ0ZWRFbGVtZW50PWV9ZnVuY3Rpb24gcigpe2xldCBlPXdpbmRvdy5fbmV4dGpzRGV2dG9vbHNTdHlsZUNhY2hlLHI9bigpO3ImJihlLnBlbmRpbmdFbGVtZW50cy5mb3JFYWNoKGU9Pnt0KGUscil9KSxlLnBlbmRpbmdFbGVtZW50cz1bXSl9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5fbmV4dGpzRGV2dG9vbHNTdHlsZUNhY2hlPXdpbmRvdy5fbmV4dGpzRGV2dG9vbHNTdHlsZUNhY2hlfHx7cGVuZGluZ0VsZW1lbnRzOltdLGlzT2JzZXJ2aW5nOiExLGxhc3RJbnNlcnRlZEVsZW1lbnQ6bnVsbCxjYWNoZWRTaGFkb3dSb290Om51bGx9KSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7ZS5zZXRBdHRyaWJ1dGUoXCJkYXRhLW5leHRqcy1kZXYtdG9vbC1zdHlsZVwiLFwidHJ1ZVwiKTtsZXQgbz1uKCk7bz90KGUsbyk6KHdpbmRvdy5fbmV4dGpzRGV2dG9vbHNTdHlsZUNhY2hlLnBlbmRpbmdFbGVtZW50cy5wdXNoKGUpLGZ1bmN0aW9uKCl7bGV0IGU9d2luZG93Ll9uZXh0anNEZXZ0b29sc1N0eWxlQ2FjaGU7aWYoZS5pc09ic2VydmluZylyZXR1cm47aWYoZS5pc09ic2VydmluZz0hMCxuKCkpcmV0dXJuIHIoKTtsZXQgdD1uZXcgTXV0YXRpb25PYnNlcnZlcihvPT57aWYoMD09PW8ubGVuZ3RofHwwPT09b1swXS5hZGRlZE5vZGVzLmxlbmd0aClyZXR1cm47bGV0IGE9b1swXS5hZGRlZE5vZGVzWzBdLGk9bnVsbDtpZihcIlNDUklQVFwiPT09YS50YWdOYW1lJiZhLmdldEF0dHJpYnV0ZShcImRhdGEtbmV4dGpzLWRldi1vdmVybGF5XCIpP2k9YS5maXJzdENoaWxkOlwiTkVYVEpTLVBPUlRBTFwiPT09YS50YWdOYW1lJiYoaT1hKSwhaSlyZXR1cm47bGV0IGw9KCk9PntuKCk/KHIoKSx0LmRpc2Nvbm5lY3QoKSxlLmlzT2JzZXJ2aW5nPSExKTpzZXRUaW1lb3V0KGwsMjApfTtsKCl9KTt0Lm9ic2VydmUoZG9jdW1lbnQuYm9keSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KX0oKSl9fSxcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9lcnJvcnMvZGV2LXRvb2xzLWluZGljYXRvci9kZXYtdG9vbHMtaW5mby9kZXYtdG9vbHMtaW5mby50c3hcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7dC5kKG4se2c6KCk9PnMseDooKT0+bH0pO3ZhciByPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LXJ1bnRpbWUuanNcIiksbz10KFwiLi9kaXN0L2NvbXBpbGVkL3JlYWN0L2luZGV4LmpzXCIpLGE9dChcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9lcnJvcnMvZGV2LXRvb2xzLWluZGljYXRvci91dGlscy50c1wiKSxpPXQoXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2hvb2tzL3VzZS1kZWxheWVkLXJlbmRlci50c1wiKTtmdW5jdGlvbiBsKGUpe3ZhciBuLHQsbD1lLnRpdGxlLHM9ZS5jaGlsZHJlbix1PWUubGVhcm5Nb3JlTGluayxkPWUuaXNPcGVuLGY9ZS50cmlnZ2VyUmVmLHA9ZS5jbG9zZSxoPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJ0aXRsZVwiLFwiY2hpbGRyZW5cIixcImxlYXJuTW9yZUxpbmtcIixcImlzT3BlblwiLFwidHJpZ2dlclJlZlwiLFwiY2xvc2VcIl0pLGc9KDAsby51c2VSZWYpKG51bGwpLG09KDAsby51c2VSZWYpKG51bGwpLHY9KDAsaS5OKShkLHtlbnRlckRlbGF5OjAsZXhpdERlbGF5OmEuSzd9KSxiPXYubW91bnRlZCx5PXYucmVuZGVyZWQ7cmV0dXJuKCgwLGEuUDUpKGcsZixkLGZ1bmN0aW9uKCl7dmFyIGU7bnVsbD09KGU9bS5jdXJyZW50KXx8ZS5mb2N1cygpfSksKDAsYS5POCkoZyxmLGIscCksYik/KDAsci5qc3gpKFwiZGl2XCIsKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByO3I9dFtuXSxuIGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbbl09cn0pfXJldHVybiBlfSh7dGFiSW5kZXg6LTEscm9sZTpcImRpYWxvZ1wiLHJlZjpnLFwiZGF0YS1pbmZvLXBvcG92ZXJcIjohMH0saCksdD10PXtcImRhdGEtcmVuZGVyZWRcIjp5LGNoaWxkcmVuOigwLHIuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29udGFpbmVyXCIsY2hpbGRyZW46WygwLHIuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8taGVhZGVyXCIsY2hpbGRyZW46WygwLHIuanN4KShcImJ1dHRvblwiLHtyZWY6bSxjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jbG9zZS1idXR0b25cIixvbkNsaWNrOnAsXCJhcmlhLWxhYmVsXCI6XCJDbG9zZSBkaWFsb2dcIixjaGlsZHJlbjooMCxyLmpzeCkoYyx7fSl9KSwoMCxyLmpzeCkoXCJoM1wiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby10aXRsZVwiLGNoaWxkcmVuOmx9KV19KSwoMCxyLmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWJvZHlcIixjaGlsZHJlbjpbcyx1JiYoMCxyLmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tYnV0dG9uLWNvbnRhaW5lclwiLGNoaWxkcmVuOigwLHIuanN4KShcImFcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tbGVhcm4tbW9yZS1idXR0b25cIixocmVmOnUsdGFyZ2V0OlwiX2JsYW5rXCIscmVsOlwibm9yZWZlcnJlciBub29wZW5lclwiLGNoaWxkcmVuOlwiTGVhcm4gTW9yZVwifSl9KV19KV19KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSk6bnVsbH12YXIgcz1cIlxcbiAgW2RhdGEtaW5mby1wb3BvdmVyXSB7XFxuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XFxuICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1tZW51KTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC14bCk7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stc2Fucyk7XFxuICAgIHotaW5kZXg6IDM7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIG91dGxpbmU6IDA7XFxuICAgIG1pbi13aWR0aDogMzUwcHg7XFxuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tYW5pbWF0ZS1vdXQtZHVyYXRpb24tbXMpXFxuICAgICAgdmFyKC0tYW5pbWF0ZS1vdXQtdGltaW5nLWZ1bmN0aW9uKTtcXG5cXG4gICAgJltkYXRhLXJlbmRlcmVkPSd0cnVlJ10ge1xcbiAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgc2NhbGU6IDE7XFxuICAgIH1cXG5cXG4gICAgYnV0dG9uOmZvY3VzLXZpc2libGUge1xcbiAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICB9XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZm8tY29udGFpbmVyIHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZm8tYm9keSB7XFxuICAgIHBhZGRpbmc6IDE2cHg7XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZm8taGVhZGVyIHtcXG4gICAgaGVpZ2h0OiA0OHB4O1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDZweDtcXG4gICAgcGFkZGluZzogNnB4IDhweDtcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNDAwKTtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1jbG9zZS1idXR0b24ge1xcbiAgICBhbGw6IHVuc2V0O1xcbiAgICB3aWR0aDogMjBweDtcXG4gICAgaGVpZ2h0OiAyMHB4OyAgICBcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIHRyYW5zaXRpb246IGNvbG9yIDE1MG1zIGVhc2U7XFxuICAgIHRyYW5zbGF0ZTogMCAxcHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcXG5cXG4gICAgJjpob3ZlciB7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby10aXRsZSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0yMCk7XFxuICAgIG1hcmdpbjogMDtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1zZWN0aW9uLXRpdGxlIHtcXG4gICAgcGFkZGluZzogOHB4IDBweDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNik7XFxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWFydGljbGUge1xcbiAgICBwYWRkaW5nOiA4cHggNnB4O1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuICAuZGV2LXRvb2xzLWluZm8tcGFyYWdyYXBoIHtcXG4gICAgJjpsYXN0LWNoaWxkIHtcXG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgICB9XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZm8tYnV0dG9uLWNvbnRhaW5lciB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1sZWFybi1tb3JlLWJ1dHRvbiB7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgcGFkZGluZzogMCA4cHg7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yOCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcXG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1zaG9ydCkgZWFzZTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZC0yKTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZm8tbGVhcm4tbW9yZS1idXR0b246aG92ZXIge1xcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIG9wYWNpdHk6IDAuOTtcXG4gIH1cXG5cIjtmdW5jdGlvbiBjKCl7cmV0dXJuKDAsci5qc3gpKFwic3ZnXCIse3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGlsZHJlbjooMCxyLmpzeCkoXCJwYXRoXCIse2Q6XCJNNS4xNDY0NSA4LjcwNzAzQzQuNzU1OTUgOC4zMTY1MSA0Ljc1NTk1IDcuNjgzNDkgNS4xNDY0NSA3LjI5Mjk3TDEwLjUgMS45Mzk0NUwxMS41NjA1IDNMNi41NjA1MSA4TDExLjU2MDUgMTNMMTAuNSAxNC4wNjA1TDUuMTQ2NDUgOC43MDcwM1pcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pfX0sXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvZXJyb3JzL2Rldi10b29scy1pbmRpY2F0b3IvZGV2LXRvb2xzLWluZm8vc2VnbWVudHMtZXhwbG9yZXIudHN4XCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3QuZChuLHtXOigpPT5pfSk7dmFyIHI9dChcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9qc3gtcnVudGltZS5qc1wiKSxvPXQoXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvb3ZlcnZpZXcvc2VnbWVudC1leHBsb3Jlci50c3hcIiksYT10KFwiLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL2Vycm9ycy9kZXYtdG9vbHMtaW5kaWNhdG9yL2Rldi10b29scy1pbmZvL2Rldi10b29scy1pbmZvLnRzeFwiKTtmdW5jdGlvbiBpKGUpe3ZhciBuLHQsaT1lLnJvdXRlclR5cGUsbD1lLnBhZ2Uscz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99KGUsW1wicm91dGVyVHlwZVwiLFwicGFnZVwiXSk7cmV0dXJuKDAsci5qc3gpKGEueCwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI7cj10W25dLG4gaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVtuXT1yfSl9cmV0dXJuIGV9KHt0aXRsZTpcIlJvdXRlIEluZm9cIn0scyksdD10PXtjaGlsZHJlbjooMCxyLmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1zZWdtZW50cy1leHBsb3JlclwiOiEwLHN0eWxlOnttYXJnaW46XCItMTZweFwifSxjaGlsZHJlbjooMCxyLmpzeCkoby51LHtpc0FwcFJvdXRlcjpcImFwcFwiPT09aSxwYWdlOmx9KX0pfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX19LFwiLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL2Vycm9ycy9kZXYtdG9vbHMtaW5kaWNhdG9yL3V0aWxzLnRzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3QuZChuLHtLNzooKT0+cyxPODooKT0+bCxQNTooKT0+YSx1RDooKT0+Yyx2WTooKT0+aX0pO3ZhciByPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvaW5kZXguanNcIik7ZnVuY3Rpb24gbyhlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gYShlLG4sdCxhKXsoMCxyLnVzZUVmZmVjdCkoZnVuY3Rpb24oKXt2YXIgcj1mdW5jdGlvbihlKXtpZihcIlRhYlwiPT09ZS5rZXkmJm51bGwhPT1sKXt2YXIgbix0LHI9KHQ9KG49bC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24sIFtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKScpKT9bblswXSxuW24ubGVuZ3RoLTFdXTpbXSxmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfSh0KXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fSh0LDIpfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBvKGUsMik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG8oZSxuKX19KHQsMil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLGE9clswXSxzPXJbMV0sYz1pKGwpO2Uuc2hpZnRLZXk/Yz09PWEmJihudWxsPT1zfHxzLmZvY3VzKCksZS5wcmV2ZW50RGVmYXVsdCgpKTpjPT09cyYmKG51bGw9PWF8fGEuZm9jdXMoKSxlLnByZXZlbnREZWZhdWx0KCkpfX0sbD1udWxsLHM9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKGw9ZS5jdXJyZW50LHQpYT9hKCk6bnVsbD09bHx8bC5mb2N1cygpLG51bGw9PWx8fGwuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixyKTtlbHNle3ZhciBvLHM9aShsKTtuJiYobnVsbD09bD92b2lkIDA6bC5jb250YWlucyhzKSkmJihudWxsPT0obz1uLmN1cnJlbnQpfHxvLmZvY3VzKCkpfX0pO3JldHVybiBmdW5jdGlvbigpe2NsZWFyVGltZW91dChzKSxudWxsPT1sfHxsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIscil9fSxbdF0pfWZ1bmN0aW9uIGkoZSl7dmFyIG4sdD1udWxsPT1lP3ZvaWQgMDplLmdldFJvb3ROb2RlKCk7cmV0dXJuKG51bGwhPShuPVNoYWRvd1Jvb3QpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZuW1N5bWJvbC5oYXNJbnN0YW5jZV0/ISFuW1N5bWJvbC5oYXNJbnN0YW5jZV0odCk6dCBpbnN0YW5jZW9mIG4pP251bGw9PXQ/dm9pZCAwOnQuYWN0aXZlRWxlbWVudDpudWxsfWZ1bmN0aW9uIGwoZSxuLHQsbyxhKXsoMCxyLnVzZUVmZmVjdCkoZnVuY3Rpb24oKXt2YXIgcixpPWZ1bmN0aW9uKHQpe3ZhciByLGEsaT10LnRhcmdldDshKGUuY3VycmVudCYmZS5jdXJyZW50LmNvbnRhaW5zKGkpKSYmKG51bGwhPShyPWUuY3VycmVudCkmJnIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkmJnQuY2xpZW50WD49ZS5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQmJnQuY2xpZW50WDw9ZS5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0JiZ0LmNsaWVudFk+PWUuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AmJnQuY2xpZW50WTw9ZS5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbXx8bnVsbCE9KGE9bi5jdXJyZW50KSYmYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSYmdC5jbGllbnRYPj1uLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCYmdC5jbGllbnRYPD1uLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQmJnQuY2xpZW50WT49bi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCYmdC5jbGllbnRZPD1uLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tfHxvKCkpfSxsPWZ1bmN0aW9uKGUpe1wiRXNjYXBlXCI9PT1lLmtleSYmbygpfTtpZih0KXt2YXIgcz1hfHwobnVsbD09KHI9ZS5jdXJyZW50KT92b2lkIDA6ci5vd25lckRvY3VtZW50KTtyZXR1cm4gbnVsbD09c3x8cy5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsaSksbnVsbD09c3x8cy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGwpLGZ1bmN0aW9uKCl7bnVsbD09c3x8cy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsaSksbnVsbD09c3x8cy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGwpfX19LFt0LGUsbl0pfXZhciBzPTIwMCxjPVwiY3ViaWMtYmV6aWVyKDAuMTc1LCAwLjg4NSwgMC4zMiwgMS4xKVwifSxcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9vdmVydmlldy9zZWdtZW50LWV4cGxvcmVyLnRzeFwiOmZ1bmN0aW9uKGUsbix0KXtcInVzZSBzdHJpY3RcIjt0LmQobix7dTooKT0+YXR9KTt2YXIgcixvLGEsaSxsPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LXJ1bnRpbWUuanNcIikscz10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCIpLGM9dC5uKHMpLHU9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsZS1sb2FkZXJANC4wLjBfd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3YytoZWxwZXJzQDAuNS4xNV9fZXNidWlsZEAwLjI0LjJfL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCIpLGQ9dC5uKHUpLGY9dChcIi4vc3JjL2J1aWxkL3dlYnBhY2svbG9hZGVycy9kZXZ0b29sL2RldnRvb2wtc3R5bGUtaW5qZWN0LmpzXCIpLHA9dC5uKGYpLGg9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsZS1sb2FkZXJANC4wLjBfd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3YytoZWxwZXJzQDAuNS4xNV9fZXNidWlsZEAwLjI0LjJfL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiKSxnPXQubihoKSxtPXQoXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIiksdj10Lm4obSksYj10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIikseT10Lm4oYikseD10KFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Nzcy1sb2FkZXJANy4xLjJfQHJzcGFjaytjb3JlQDEuNC41X0Bzd2MraGVscGVyc0AwLjUuMTVfX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd193bTdlZTVpYzRtb2ZyaGlzdWR3b240cXBxNC9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvb3ZlcnZpZXcvc2VnbWVudC1leHBsb3Jlci5jc3NcIiksdz17fTt3LnN0eWxlVGFnVHJhbnNmb3JtPXkoKSx3LnNldEF0dHJpYnV0ZXM9ZygpLHcuaW5zZXJ0PXAoKSx3LmRvbUFQST1kKCksdy5pbnNlcnRTdHlsZUVsZW1lbnQ9digpLGMoKSh4LlosdykseC5aJiZ4LloubG9jYWxzJiZ4LloubG9jYWxzO3ZhciBqPXQoXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L3NlZ21lbnQtZXhwbG9yZXItdHJpZS50c1wiKSxrPXQoXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L3V0aWxzL2N4LnRzXCIpLEE9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL292ZXJ2aWV3L3NlZ21lbnQtYm91bmRhcnktdHJpZ2dlci5jc3NcIiksTz17fTtPLnN0eWxlVGFnVHJhbnNmb3JtPXkoKSxPLnNldEF0dHJpYnV0ZXM9ZygpLE8uaW5zZXJ0PXAoKSxPLmRvbUFQST1kKCksTy5pbnNlcnRTdHlsZUVsZW1lbnQ9digpLGMoKShBLlosTyksQS5aJiZBLloubG9jYWxzJiZBLloubG9jYWxzO3ZhciBDPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvaW5kZXguanNcIiksUz10LnQoQywyKSxFPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2luZGV4LmpzXCIpO2xldCBfPXt9O2Z1bmN0aW9uIFAoZSxuKXtsZXQgdD1DLnVzZVJlZihfKTtyZXR1cm4gdC5jdXJyZW50PT09XyYmKHQuY3VycmVudD1lKG4pKSx0fWxldCB6PVNbYHVzZUluc2VydGlvbkVmZmVjdCR7TWF0aC5yYW5kb20oKS50b0ZpeGVkKDEpfWAuc2xpY2UoMCwtMyldLEw9eiYmeiE9PUMudXNlTGF5b3V0RWZmZWN0P3o6ZT0+ZSgpO2Z1bmN0aW9uIFQoZSl7bGV0IG49UChSKS5jdXJyZW50O3JldHVybiBuLm5leHQ9ZSxMKG4uZWZmZWN0KSxuLnRyYW1wb2xpbmV9ZnVuY3Rpb24gUigpe2xldCBlPXtuZXh0OnZvaWQgMCxjYWxsYmFjazpOLHRyYW1wb2xpbmU6KC4uLm4pPT5lLmNhbGxiYWNrPy4oLi4ubiksZWZmZWN0OigpPT57ZS5jYWxsYmFjaz1lLm5leHR9fTtyZXR1cm4gZX1mdW5jdGlvbiBOKCl7fWZ1bmN0aW9uIEQoKXtsZXQgZT1uZXcgTWFwO3JldHVybntlbWl0KG4sdCl7ZS5nZXQobik/LmZvckVhY2goZT0+ZSh0KSl9LG9uKG4sdCl7ZS5oYXMobil8fGUuc2V0KG4sbmV3IFNldCksZS5nZXQobikuYWRkKHQpfSxvZmYobix0KXtlLmdldChuKT8uZGVsZXRlKHQpfX19bGV0IEI9ey4uLlN9LE09MCxJPUIudXNlSWQ7ZnVuY3Rpb24gSChlLG4pe2lmKHZvaWQgMCE9PUkpe2xldCB0PUkoKTtyZXR1cm4gZT8/KG4/YCR7bn0tJHt0fWA6dCl9cmV0dXJuIGZ1bmN0aW9uKGUsbj1cIm11aVwiKXtsZXRbdCxyXT1DLnVzZVN0YXRlKGUpLG89ZXx8dDtyZXR1cm4gQy51c2VFZmZlY3QoKCk9PntudWxsPT10JiYoTSs9MSxyKGAke259LSR7TX1gKSl9LFt0LG5dKSxvfShlLG4pfWxldCBGPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudD9DLnVzZUxheW91dEVmZmVjdDooKT0+e30sVT1DLmNyZWF0ZUNvbnRleHQobnVsbCksVj1DLmNyZWF0ZUNvbnRleHQobnVsbCkscT0oKT0+Qy51c2VDb250ZXh0KFUpPy5pZHx8bnVsbCxXPSgpPT5DLnVzZUNvbnRleHQoVik7ZnVuY3Rpb24gJChlKXtsZXR7Y2hpbGRyZW46bixpZDp0fT1lLHI9cSgpO3JldHVybigwLGwuanN4KShVLlByb3ZpZGVyLHt2YWx1ZTpDLnVzZU1lbW8oKCk9Pih7aWQ6dCxwYXJlbnRJZDpyfSksW3Qscl0pLGNoaWxkcmVuOm59KX1mdW5jdGlvbiBaKGUpe2xldHtjaGlsZHJlbjpufT1lLHQ9Qy51c2VSZWYoW10pLHI9Qy51c2VDYWxsYmFjayhlPT57dC5jdXJyZW50PVsuLi50LmN1cnJlbnQsZV19LFtdKSxvPUMudXNlQ2FsbGJhY2soZT0+e3QuY3VycmVudD10LmN1cnJlbnQuZmlsdGVyKG49Pm4hPT1lKX0sW10pLFthXT1DLnVzZVN0YXRlKCgpPT5EKCkpO3JldHVybigwLGwuanN4KShWLlByb3ZpZGVyLHt2YWx1ZTpDLnVzZU1lbW8oKCk9Pih7bm9kZXNSZWY6dCxhZGROb2RlOnIscmVtb3ZlTm9kZTpvLGV2ZW50czphfSksW3IsbyxhXSksY2hpbGRyZW46bn0pfWZ1bmN0aW9uIFkoZSl7bGV0e29wZW46bj0hMSxvbk9wZW5DaGFuZ2U6dCxlbGVtZW50czpyfT1lLG89SCgpLGE9Qy51c2VSZWYoe30pLFtpXT1DLnVzZVN0YXRlKCgpPT5EKCkpLGw9bnVsbCE9cSgpLFtzLGNdPUMudXNlU3RhdGUoci5yZWZlcmVuY2UpLHU9VCgoZSxuLHIpPT57YS5jdXJyZW50Lm9wZW5FdmVudD1lP246dm9pZCAwLGkuZW1pdChcIm9wZW5jaGFuZ2VcIix7b3BlbjplLGV2ZW50Om4scmVhc29uOnIsbmVzdGVkOmx9KSx0Py4oZSxuLHIpfSksZD1DLnVzZU1lbW8oKCk9Pih7c2V0UG9zaXRpb25SZWZlcmVuY2U6Y30pLFtdKSxmPUMudXNlTWVtbygoKT0+KHtyZWZlcmVuY2U6c3x8ci5yZWZlcmVuY2V8fG51bGwsZmxvYXRpbmc6ci5mbG9hdGluZ3x8bnVsbCxkb21SZWZlcmVuY2U6ci5yZWZlcmVuY2V9KSxbcyxyLnJlZmVyZW5jZSxyLmZsb2F0aW5nXSk7cmV0dXJuIEMudXNlTWVtbygoKT0+KHtkYXRhUmVmOmEsb3BlbjpuLG9uT3BlbkNoYW5nZTp1LGVsZW1lbnRzOmYsZXZlbnRzOmksZmxvYXRpbmdJZDpvLHJlZnM6ZH0pLFtuLHUsZixpLG8sZF0pfWZ1bmN0aW9uIFgoKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93fWZ1bmN0aW9uIEsoZSl7cmV0dXJuIEooZSk/KGUubm9kZU5hbWV8fFwiXCIpLnRvTG93ZXJDYXNlKCk6XCIjZG9jdW1lbnRcIn1mdW5jdGlvbiBRKGUpe3ZhciBuO3JldHVybihudWxsPT1lfHxudWxsPT0obj1lLm93bmVyRG9jdW1lbnQpP3ZvaWQgMDpuLmRlZmF1bHRWaWV3KXx8d2luZG93fWZ1bmN0aW9uIEcoZSl7dmFyIG47cmV0dXJuIG51bGw9PShuPShKKGUpP2Uub3duZXJEb2N1bWVudDplLmRvY3VtZW50KXx8d2luZG93LmRvY3VtZW50KT92b2lkIDA6bi5kb2N1bWVudEVsZW1lbnR9ZnVuY3Rpb24gSihlKXtyZXR1cm4hIVgoKSYmKGUgaW5zdGFuY2VvZiBOb2RlfHxlIGluc3RhbmNlb2YgUShlKS5Ob2RlKX1mdW5jdGlvbiBlZShlKXtyZXR1cm4hIVgoKSYmKGUgaW5zdGFuY2VvZiBFbGVtZW50fHxlIGluc3RhbmNlb2YgUShlKS5FbGVtZW50KX1mdW5jdGlvbiBlbihlKXtyZXR1cm4hIVgoKSYmKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8ZSBpbnN0YW5jZW9mIFEoZSkuSFRNTEVsZW1lbnQpfWZ1bmN0aW9uIGV0KGUpe3JldHVybiEhWCgpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgU2hhZG93Um9vdCYmKGUgaW5zdGFuY2VvZiBTaGFkb3dSb290fHxlIGluc3RhbmNlb2YgUShlKS5TaGFkb3dSb290KX1sZXQgZXI9bmV3IFNldChbXCJpbmxpbmVcIixcImNvbnRlbnRzXCJdKTtmdW5jdGlvbiBlbyhlKXtsZXR7b3ZlcmZsb3c6bixvdmVyZmxvd1g6dCxvdmVyZmxvd1k6cixkaXNwbGF5Om99PWVnKGUpO3JldHVybi9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbnxjbGlwLy50ZXN0KG4rcit0KSYmIWVyLmhhcyhvKX1sZXQgZWE9bmV3IFNldChbXCJ0YWJsZVwiLFwidGRcIixcInRoXCJdKSxlaT1bXCI6cG9wb3Zlci1vcGVuXCIsXCI6bW9kYWxcIl07ZnVuY3Rpb24gZWwoZSl7cmV0dXJuIGVpLnNvbWUobj0+e3RyeXtyZXR1cm4gZS5tYXRjaGVzKG4pfWNhdGNoKGUpe3JldHVybiExfX0pfWxldCBlcz1bXCJ0cmFuc2Zvcm1cIixcInRyYW5zbGF0ZVwiLFwic2NhbGVcIixcInJvdGF0ZVwiLFwicGVyc3BlY3RpdmVcIl0sZWM9W1widHJhbnNmb3JtXCIsXCJ0cmFuc2xhdGVcIixcInNjYWxlXCIsXCJyb3RhdGVcIixcInBlcnNwZWN0aXZlXCIsXCJmaWx0ZXJcIl0sZXU9W1wicGFpbnRcIixcImxheW91dFwiLFwic3RyaWN0XCIsXCJjb250ZW50XCJdO2Z1bmN0aW9uIGVkKGUpe2xldCBuPWVmKCksdD1lZShlKT9lZyhlKTplO3JldHVybiBlcy5zb21lKGU9PiEhdFtlXSYmXCJub25lXCIhPT10W2VdKXx8ISF0LmNvbnRhaW5lclR5cGUmJlwibm9ybWFsXCIhPT10LmNvbnRhaW5lclR5cGV8fCFuJiYhIXQuYmFja2Ryb3BGaWx0ZXImJlwibm9uZVwiIT09dC5iYWNrZHJvcEZpbHRlcnx8IW4mJiEhdC5maWx0ZXImJlwibm9uZVwiIT09dC5maWx0ZXJ8fGVjLnNvbWUoZT0+KHQud2lsbENoYW5nZXx8XCJcIikuaW5jbHVkZXMoZSkpfHxldS5zb21lKGU9Pih0LmNvbnRhaW58fFwiXCIpLmluY2x1ZGVzKGUpKX1mdW5jdGlvbiBlZigpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBDU1MmJiEhQ1NTLnN1cHBvcnRzJiZDU1Muc3VwcG9ydHMoXCItd2Via2l0LWJhY2tkcm9wLWZpbHRlclwiLFwibm9uZVwiKX1sZXQgZXA9bmV3IFNldChbXCJodG1sXCIsXCJib2R5XCIsXCIjZG9jdW1lbnRcIl0pO2Z1bmN0aW9uIGVoKGUpe3JldHVybiBlcC5oYXMoSyhlKSl9ZnVuY3Rpb24gZWcoZSl7cmV0dXJuIFEoZSkuZ2V0Q29tcHV0ZWRTdHlsZShlKX1mdW5jdGlvbiBlbShlKXtyZXR1cm4gZWUoZSk/e3Njcm9sbExlZnQ6ZS5zY3JvbGxMZWZ0LHNjcm9sbFRvcDplLnNjcm9sbFRvcH06e3Njcm9sbExlZnQ6ZS5zY3JvbGxYLHNjcm9sbFRvcDplLnNjcm9sbFl9fWZ1bmN0aW9uIGV2KGUpe2lmKFwiaHRtbFwiPT09SyhlKSlyZXR1cm4gZTtsZXQgbj1lLmFzc2lnbmVkU2xvdHx8ZS5wYXJlbnROb2RlfHxldChlKSYmZS5ob3N0fHxHKGUpO3JldHVybiBldChuKT9uLmhvc3Q6bn1mdW5jdGlvbiBlYihlLG4sdCl7dmFyIHI7dm9pZCAwPT09biYmKG49W10pLHZvaWQgMD09PXQmJih0PSEwKTtsZXQgbz1mdW5jdGlvbiBlKG4pe2xldCB0PWV2KG4pO3JldHVybiBlaCh0KT9uLm93bmVyRG9jdW1lbnQ/bi5vd25lckRvY3VtZW50LmJvZHk6bi5ib2R5OmVuKHQpJiZlbyh0KT90OmUodCl9KGUpLGE9bz09PShudWxsPT0ocj1lLm93bmVyRG9jdW1lbnQpP3ZvaWQgMDpyLmJvZHkpLGk9UShvKTtpZihhKXtsZXQgZT1leShpKTtyZXR1cm4gbi5jb25jYXQoaSxpLnZpc3VhbFZpZXdwb3J0fHxbXSxlbyhvKT9vOltdLGUmJnQ/ZWIoZSk6W10pfXJldHVybiBuLmNvbmNhdChvLGViKG8sW10sdCkpfWZ1bmN0aW9uIGV5KGUpe3JldHVybiBlLnBhcmVudCYmT2JqZWN0LmdldFByb3RvdHlwZU9mKGUucGFyZW50KT9lLmZyYW1lRWxlbWVudDpudWxsfWxldCBleD1bXTtmdW5jdGlvbiBldyhlKXtDLnVzZUVmZmVjdChlLGV4KX1jbGFzcyBlantzdGF0aWMgY3JlYXRlKCl7cmV0dXJuIG5ldyBlan1jdXJyZW50SWQ9MDtzdGFydChlLG4pe3RoaXMuY2xlYXIoKSx0aGlzLmN1cnJlbnRJZD1zZXRUaW1lb3V0KCgpPT57dGhpcy5jdXJyZW50SWQ9MCxuKCl9LGUpfWlzU3RhcnRlZCgpe3JldHVybiAwIT09dGhpcy5jdXJyZW50SWR9Y2xlYXI9KCk9PnswIT09dGhpcy5jdXJyZW50SWQmJihjbGVhclRpbWVvdXQodGhpcy5jdXJyZW50SWQpLHRoaXMuY3VycmVudElkPTApfTtkaXNwb3NlRWZmZWN0PSgpPT50aGlzLmNsZWFyfWZ1bmN0aW9uIGVrKCl7bGV0IGU9UChlai5jcmVhdGUpLmN1cnJlbnQ7cmV0dXJuIGV3KGUuZGlzcG9zZUVmZmVjdCksZX1mdW5jdGlvbiBlQShlKXtsZXQgbj1QKGVPLGUpLmN1cnJlbnQ7cmV0dXJuIG4ubmV4dD1lLEYobi5lZmZlY3QpLG59ZnVuY3Rpb24gZU8oZSl7bGV0IG49e2N1cnJlbnQ6ZSxuZXh0OmUsZWZmZWN0OigpPT57bi5jdXJyZW50PW4ubmV4dH19O3JldHVybiBufWxldCBlQz1cInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yLGVTPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIG5hdmlnYXRvcilyZXR1cm57cGxhdGZvcm06XCJcIixtYXhUb3VjaFBvaW50czotMX07bGV0IGU9bmF2aWdhdG9yLnVzZXJBZ2VudERhdGE7cmV0dXJuIGU/LnBsYXRmb3JtP3twbGF0Zm9ybTplLnBsYXRmb3JtLG1heFRvdWNoUG9pbnRzOm5hdmlnYXRvci5tYXhUb3VjaFBvaW50c306e3BsYXRmb3JtOm5hdmlnYXRvci5wbGF0Zm9ybT8/XCJcIixtYXhUb3VjaFBvaW50czpuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM/Py0xfX0oKSxlRT1mdW5jdGlvbigpe2lmKCFlQylyZXR1cm5cIlwiO2xldCBlPW5hdmlnYXRvci51c2VyQWdlbnREYXRhO3JldHVybiBlPy5wbGF0Zm9ybT9lLnBsYXRmb3JtOm5hdmlnYXRvci5wbGF0Zm9ybT8/XCJcIn0oKSxlXz1mdW5jdGlvbigpe2lmKCFlQylyZXR1cm5cIlwiO2xldCBlPW5hdmlnYXRvci51c2VyQWdlbnREYXRhO3JldHVybiBlJiZBcnJheS5pc0FycmF5KGUuYnJhbmRzKT9lLmJyYW5kcy5tYXAoKHticmFuZDplLHZlcnNpb246bn0pPT5gJHtlfS8ke259YCkuam9pbihcIiBcIik6bmF2aWdhdG9yLnVzZXJBZ2VudH0oKSxlUD1cInVuZGVmaW5lZFwiIT10eXBlb2YgQ1NTJiYhIUNTUy5zdXBwb3J0cyYmQ1NTLnN1cHBvcnRzKFwiLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6bm9uZVwiKSxlej1cIk1hY0ludGVsXCI9PT1lUy5wbGF0Zm9ybSYmZVMubWF4VG91Y2hQb2ludHM+MXx8L2lQKGhvbmV8YWR8b2QpfGlPUy8udGVzdChlUy5wbGF0Zm9ybSk7ZUMmJi9maXJlZm94L2kudGVzdChlXyk7bGV0IGVMPWVDJiYvYXBwbGUvaS50ZXN0KG5hdmlnYXRvci52ZW5kb3IpLGVUPWVDJiYvYW5kcm9pZC9pLnRlc3QoZUUpfHwvYW5kcm9pZC9pLnRlc3QoZV8pLGVSPWVDJiZlRS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoXCJtYWNcIikmJiFuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMsZU49ZV8uaW5jbHVkZXMoXCJqc2RvbS9cIik7ZnVuY3Rpb24gZUQoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gZUIoZSl7cmV0dXJuIDA9PT1lLm1veklucHV0U291cmNlJiYhIWUuaXNUcnVzdGVkfHwoZVQmJmUucG9pbnRlclR5cGU/XCJjbGlja1wiPT09ZS50eXBlJiYxPT09ZS5idXR0b25zOjA9PT1lLmRldGFpbCYmIWUucG9pbnRlclR5cGUpfWZ1bmN0aW9uIGVNKGUpe3JldHVybiFlTiYmKCFlVCYmMD09PWUud2lkdGgmJjA9PT1lLmhlaWdodHx8ZVQmJjE9PT1lLndpZHRoJiYxPT09ZS5oZWlnaHQmJjA9PT1lLnByZXNzdXJlJiYwPT09ZS5kZXRhaWwmJlwibW91c2VcIj09PWUucG9pbnRlclR5cGV8fGUud2lkdGg8MSYmZS5oZWlnaHQ8MSYmMD09PWUucHJlc3N1cmUmJjA9PT1lLmRldGFpbCYmXCJ0b3VjaFwiPT09ZS5wb2ludGVyVHlwZSl9ZnVuY3Rpb24gZUkoZSxuKXtsZXQgdD1bXCJtb3VzZVwiLFwicGVuXCJdO3JldHVybiBufHx0LnB1c2goXCJcIix2b2lkIDApLHQuaW5jbHVkZXMoZSl9bGV0IGVIPVwiZGF0YS1iYXNlLXVpLWZvY3VzYWJsZVwiLGVGPVwiYWN0aXZlXCIsZVU9XCJzZWxlY3RlZFwiLGVWPVwiQXJyb3dMZWZ0XCIsZXE9XCJBcnJvd1JpZ2h0XCIsZVc9XCJBcnJvd1VwXCIsZSQ9XCJBcnJvd0Rvd25cIjtmdW5jdGlvbiBlWihlKXtsZXQgbj1lLmFjdGl2ZUVsZW1lbnQ7Zm9yKDtuPy5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50IT1udWxsOyluPW4uc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50O3JldHVybiBufWZ1bmN0aW9uIGVZKGUsbil7aWYoIWV8fCFuKXJldHVybiExO2xldCB0PW4uZ2V0Um9vdE5vZGU/LigpO2lmKGUuY29udGFpbnMobikpcmV0dXJuITA7aWYodCYmZXQodCkpe2xldCB0PW47Zm9yKDt0Oyl7aWYoZT09PXQpcmV0dXJuITA7dD10LnBhcmVudE5vZGV8fHQuaG9zdH19cmV0dXJuITF9ZnVuY3Rpb24gZVgoZSl7cmV0dXJuXCJjb21wb3NlZFBhdGhcImluIGU/ZS5jb21wb3NlZFBhdGgoKVswXTplLnRhcmdldH1mdW5jdGlvbiBlSyhlLG4pe3JldHVybiBudWxsIT1uJiYoXCJjb21wb3NlZFBhdGhcImluIGU/ZS5jb21wb3NlZFBhdGgoKS5pbmNsdWRlcyhuKTpudWxsIT1lLnRhcmdldCYmbi5jb250YWlucyhlLnRhcmdldCkpfWZ1bmN0aW9uIGVRKGUpe3JldHVybiBlPy5vd25lckRvY3VtZW50fHxkb2N1bWVudH1mdW5jdGlvbiBlRyhlKXtyZXR1cm4gZW4oZSkmJmUubWF0Y2hlcyhcImlucHV0Om5vdChbdHlwZT0naGlkZGVuJ10pOm5vdChbZGlzYWJsZWRdKSxbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT0nZmFsc2UnXSksdGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pXCIpfWZ1bmN0aW9uIGVKKGUpe3JldHVybiEhZSYmXCJjb21ib2JveFwiPT09ZS5nZXRBdHRyaWJ1dGUoXCJyb2xlXCIpJiZlRyhlKX1mdW5jdGlvbiBlMChlKXtyZXR1cm4gZT9lLmhhc0F0dHJpYnV0ZShlSCk/ZTplLnF1ZXJ5U2VsZWN0b3IoYFske2VIfV1gKXx8ZTpudWxsfWZ1bmN0aW9uIGUxKGUpe3JldHVybmBkYXRhLWJhc2UtdWktJHtlfWB9bGV0IGUyPWUxKFwic2FmZS1wb2x5Z29uXCIpO2Z1bmN0aW9uIGU0KGUsbix0KXtpZih0JiYhZUkodCkpcmV0dXJuIDA7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSl7bGV0IHQ9ZSgpO3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0P3Q6dD8uW25dfXJldHVybiBlPy5bbl19ZnVuY3Rpb24gZTUoZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lKCk6ZX1mdW5jdGlvbiBlMyhlLG49e30pe2xldHtvcGVuOnQsb25PcGVuQ2hhbmdlOnIsZGF0YVJlZjpvLGV2ZW50czphLGVsZW1lbnRzOml9PWUse2VuYWJsZWQ6bD0hMCxkZWxheTpzPTAsaGFuZGxlQ2xvc2U6Yz1udWxsLG1vdXNlT25seTp1PSExLHJlc3RNczpkPTAsbW92ZTpmPSEwfT1uLHA9VygpLGg9cSgpLGc9ZUEoYyksbT1lQShzKSx2PWVBKHQpLGI9ZUEoZCkseT1DLnVzZVJlZih2b2lkIDApLHg9ZWsoKSx3PUMudXNlUmVmKHZvaWQgMCksaj1laygpLGs9Qy51c2VSZWYoITApLEE9Qy51c2VSZWYoITEpLE89Qy51c2VSZWYoKCk9Pnt9KSxTPUMudXNlUmVmKCExKSxFPVQoKCk9PntsZXQgZT1vLmN1cnJlbnQub3BlbkV2ZW50Py50eXBlO3JldHVybiBlPy5pbmNsdWRlcyhcIm1vdXNlXCIpJiZcIm1vdXNlZG93blwiIT09ZX0pO0MudXNlRWZmZWN0KCgpPT57aWYobClyZXR1cm4gYS5vbihcIm9wZW5jaGFuZ2VcIixlKSwoKT0+e2Eub2ZmKFwib3BlbmNoYW5nZVwiLGUpfTtmdW5jdGlvbiBlKHtvcGVuOmV9KXtlfHwoeC5jbGVhcigpLGouY2xlYXIoKSxrLmN1cnJlbnQ9ITAsUy5jdXJyZW50PSExKX19LFtsLGEseCxqXSksQy51c2VFZmZlY3QoKCk9PntpZighbHx8IWcuY3VycmVudHx8IXQpcmV0dXJuO2Z1bmN0aW9uIGUoZSl7RSgpJiZyKCExLGUsXCJob3ZlclwiKX1sZXQgbj1lUShpLmZsb2F0aW5nKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIG4uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIixlKSwoKT0+e24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIixlKX19LFtpLmZsb2F0aW5nLHQscixsLGcsRV0pO2xldCBfPUMudXNlQ2FsbGJhY2soKGUsbj0hMCx0PVwiaG92ZXJcIik9PntsZXQgbz1lNChtLmN1cnJlbnQsXCJjbG9zZVwiLHkuY3VycmVudCk7byYmIXcuY3VycmVudD94LnN0YXJ0KG8sKCk9PnIoITEsZSx0KSk6biYmKHguY2xlYXIoKSxyKCExLGUsdCkpfSxbbSxyLHhdKSxQPVQoKCk9PntPLmN1cnJlbnQoKSx3LmN1cnJlbnQ9dm9pZCAwfSksej1UKCgpPT57aWYoQS5jdXJyZW50KXtsZXQgZT1lUShpLmZsb2F0aW5nKS5ib2R5O2Uuc3R5bGUucG9pbnRlckV2ZW50cz1cIlwiLGUucmVtb3ZlQXR0cmlidXRlKGUyKSxBLmN1cnJlbnQ9ITF9fSksTD1UKCgpPT4hIW8uY3VycmVudC5vcGVuRXZlbnQmJltcImNsaWNrXCIsXCJtb3VzZWRvd25cIl0uaW5jbHVkZXMoby5jdXJyZW50Lm9wZW5FdmVudC50eXBlKSk7Qy51c2VFZmZlY3QoKCk9PntpZihsJiZlZShpLmRvbVJlZmVyZW5jZSkpe2xldCByPWkuZG9tUmVmZXJlbmNlLG89aS5mbG9hdGluZztyZXR1cm4gdCYmci5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLGEpLGYmJnIuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLGUse29uY2U6ITB9KSxyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsZSksci5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLG4pLG8mJihvLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsYSksby5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLHMpLG8uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIixjKSksKCk9Pnt0JiZyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsYSksZiYmci5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsZSksci5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLGUpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIixuKSxvJiYoby5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLGEpLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIixzKSxvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsYykpfX1mdW5jdGlvbiBlKGUpe2lmKHguY2xlYXIoKSxrLmN1cnJlbnQ9ITEsdSYmIWVJKHkuY3VycmVudCl8fGU1KGIuY3VycmVudCk+MCYmIWU0KG0uY3VycmVudCxcIm9wZW5cIikpcmV0dXJuO2xldCBuPWU0KG0uY3VycmVudCxcIm9wZW5cIix5LmN1cnJlbnQpO24/eC5zdGFydChuLCgpPT57di5jdXJyZW50fHxyKCEwLGUsXCJob3ZlclwiKX0pOnR8fHIoITAsZSxcImhvdmVyXCIpfWZ1bmN0aW9uIG4oZSl7aWYoTCgpKXJldHVybiB2b2lkIHooKTtPLmN1cnJlbnQoKTtsZXQgbj1lUShpLmZsb2F0aW5nKTtpZihqLmNsZWFyKCksUy5jdXJyZW50PSExLGcuY3VycmVudCYmby5jdXJyZW50LmZsb2F0aW5nQ29udGV4dCl7dHx8eC5jbGVhcigpLHcuY3VycmVudD1nLmN1cnJlbnQoey4uLm8uY3VycmVudC5mbG9hdGluZ0NvbnRleHQsdHJlZTpwLHg6ZS5jbGllbnRYLHk6ZS5jbGllbnRZLG9uQ2xvc2UoKXt6KCksUCgpLEwoKXx8XyhlLCEwLFwic2FmZS1wb2x5Z29uXCIpfX0pO2xldCByPXcuY3VycmVudDtuLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixyKSxPLmN1cnJlbnQ9KCk9PntuLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixyKX07cmV0dXJufVwidG91Y2hcIj09PXkuY3VycmVudCYmZVkoaS5mbG9hdGluZyxlLnJlbGF0ZWRUYXJnZXQpfHxfKGUpfWZ1bmN0aW9uIGEoZSl7IUwoKSYmby5jdXJyZW50LmZsb2F0aW5nQ29udGV4dCYmZy5jdXJyZW50Py4oey4uLm8uY3VycmVudC5mbG9hdGluZ0NvbnRleHQsdHJlZTpwLHg6ZS5jbGllbnRYLHk6ZS5jbGllbnRZLG9uQ2xvc2UoKXt6KCksUCgpLEwoKXx8XyhlKX19KShlKX1mdW5jdGlvbiBzKCl7eC5jbGVhcigpfWZ1bmN0aW9uIGMoZSl7TCgpfHxfKGUsITEpfX0sW2ksbCxlLHUsZixfLFAseixyLHQsdixwLG0sZyxvLEwsYix4LGpdKSxGKCgpPT57aWYobCYmdCYmZy5jdXJyZW50Py5fX29wdGlvbnM/LmJsb2NrUG9pbnRlckV2ZW50cyYmRSgpKXtBLmN1cnJlbnQ9ITA7bGV0IGU9aS5mbG9hdGluZztpZihlZShpLmRvbVJlZmVyZW5jZSkmJmUpe2xldCBuPWVRKGkuZmxvYXRpbmcpLmJvZHk7bi5zZXRBdHRyaWJ1dGUoZTIsXCJcIik7bGV0IHQ9aS5kb21SZWZlcmVuY2Uscj1wPy5ub2Rlc1JlZi5jdXJyZW50LmZpbmQoZT0+ZS5pZD09PWgpPy5jb250ZXh0Py5lbGVtZW50cy5mbG9hdGluZztyZXR1cm4gciYmKHIuc3R5bGUucG9pbnRlckV2ZW50cz1cIlwiKSxuLnN0eWxlLnBvaW50ZXJFdmVudHM9XCJub25lXCIsdC5zdHlsZS5wb2ludGVyRXZlbnRzPVwiYXV0b1wiLGUuc3R5bGUucG9pbnRlckV2ZW50cz1cImF1dG9cIiwoKT0+e24uc3R5bGUucG9pbnRlckV2ZW50cz1cIlwiLHQuc3R5bGUucG9pbnRlckV2ZW50cz1cIlwiLGUuc3R5bGUucG9pbnRlckV2ZW50cz1cIlwifX19fSxbbCx0LGgsaSxwLGcsRV0pLEYoKCk9Pnt0fHwoeS5jdXJyZW50PXZvaWQgMCxTLmN1cnJlbnQ9ITEsUCgpLHooKSl9LFt0LFAsel0pLEMudXNlRWZmZWN0KCgpPT4oKT0+e1AoKSx4LmNsZWFyKCksai5jbGVhcigpLHooKX0sW2wsaS5kb21SZWZlcmVuY2UsUCx6LHgsal0pO2xldCBSPUMudXNlTWVtbygoKT0+e2Z1bmN0aW9uIGUoZSl7eS5jdXJyZW50PWUucG9pbnRlclR5cGV9cmV0dXJue29uUG9pbnRlckRvd246ZSxvblBvaW50ZXJFbnRlcjplLG9uTW91c2VNb3ZlKGUpe2xldHtuYXRpdmVFdmVudDpufT1lO2Z1bmN0aW9uIG8oKXtrLmN1cnJlbnR8fHYuY3VycmVudHx8cighMCxuLFwiaG92ZXJcIil9KCF1fHxlSSh5LmN1cnJlbnQpKSYmIXQmJjAhPT1lNShiLmN1cnJlbnQpJiYoUy5jdXJyZW50JiZlLm1vdmVtZW50WCoqMitlLm1vdmVtZW50WSoqMjwyfHwoai5jbGVhcigpLFwidG91Y2hcIj09PXkuY3VycmVudD9vKCk6KFMuY3VycmVudD0hMCxqLnN0YXJ0KGU1KGIuY3VycmVudCksbykpKSl9fX0sW3Uscix0LHYsYixqXSk7cmV0dXJuIEMudXNlTWVtbygoKT0+bD97cmVmZXJlbmNlOlJ9Ont9LFtsLFJdKX1mdW5jdGlvbiBlNihlLG4sdD0hMCl7cmV0dXJuIGUuZmlsdGVyKGU9PmUucGFyZW50SWQ9PT1uJiYoIXR8fGUuY29udGV4dD8ub3BlbikpLmZsYXRNYXAobj0+W24sLi4uZTYoZSxuLmlkLHQpXSl9ZnVuY3Rpb24gZTkoZSxuKXtsZXQgdD1bXSxyPWUuZmluZChlPT5lLmlkPT09bik/LnBhcmVudElkO2Zvcig7cjspe2xldCBuPWUuZmluZChlPT5lLmlkPT09cik7cj1uPy5wYXJlbnRJZCxuJiYodD10LmNvbmNhdChuKSl9cmV0dXJuIHR9ZnVuY3Rpb24gZTgoZSxuKXtsZXRbdCxyXT1lLG89ITEsYT1uLmxlbmd0aDtmb3IobGV0IGU9MCxpPWEtMTtlPGE7aT1lKyspe2xldFthLGxdPW5bZV18fFswLDBdLFtzLGNdPW5baV18fFswLDBdO2w+PXIhPWM+PXImJnQ8PShzLWEpKihyLWwpLyhjLWwpK2EmJihvPSFvKX1yZXR1cm4gb31mdW5jdGlvbiBlNyhlPXt9KXtsZXR7YnVmZmVyOm49LjUsYmxvY2tQb2ludGVyRXZlbnRzOnQ9ITEscmVxdWlyZUludGVudDpyPSEwfT1lLG89bmV3IGVqLGE9ITEsaT1udWxsLGw9bnVsbCxzPXBlcmZvcm1hbmNlLm5vdygpLGM9KHt4OmUseTp0LHBsYWNlbWVudDpjLGVsZW1lbnRzOnUsb25DbG9zZTpkLG5vZGVJZDpmLHRyZWU6cH0pPT5mdW5jdGlvbihoKXtmdW5jdGlvbiBnKCl7by5jbGVhcigpLGQoKX1pZihvLmNsZWFyKCksIXUuZG9tUmVmZXJlbmNlfHwhdS5mbG9hdGluZ3x8bnVsbD09Y3x8bnVsbD09ZXx8bnVsbD09dClyZXR1cm47bGV0e2NsaWVudFg6bSxjbGllbnRZOnZ9PWgsYj1bbSx2XSx5PWVYKGgpLHg9XCJtb3VzZWxlYXZlXCI9PT1oLnR5cGUsdz1lWSh1LmZsb2F0aW5nLHkpLGo9ZVkodS5kb21SZWZlcmVuY2UseSksaz11LmRvbVJlZmVyZW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxBPXUuZmxvYXRpbmcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksTz1jLnNwbGl0KFwiLVwiKVswXSxDPWU+QS5yaWdodC1BLndpZHRoLzIsUz10PkEuYm90dG9tLUEuaGVpZ2h0LzIsRT1iWzBdPj1rLngmJmJbMF08PWsueCtrLndpZHRoJiZiWzFdPj1rLnkmJmJbMV08PWsueStrLmhlaWdodCxfPUEud2lkdGg+ay53aWR0aCxQPUEuaGVpZ2h0PmsuaGVpZ2h0LHo9KF8/azpBKS5sZWZ0LEw9KF8/azpBKS5yaWdodCxUPShQP2s6QSkudG9wLFI9KFA/azpBKS5ib3R0b207aWYodyYmKGE9ITAsIXgpKXJldHVybjtpZihqJiYoYT0hMSksaiYmIXgpe2E9ITA7cmV0dXJufWlmKHgmJmVlKGgucmVsYXRlZFRhcmdldCkmJmVZKHUuZmxvYXRpbmcsaC5yZWxhdGVkVGFyZ2V0KXx8cCYmZTYocC5ub2Rlc1JlZi5jdXJyZW50LGYpLnNvbWUoKHtjb250ZXh0OmV9KT0+ZT8ub3BlbikpcmV0dXJuO2lmKFwidG9wXCI9PT1PJiZ0Pj1rLmJvdHRvbS0xfHxcImJvdHRvbVwiPT09TyYmdDw9ay50b3ArMXx8XCJsZWZ0XCI9PT1PJiZlPj1rLnJpZ2h0LTF8fFwicmlnaHRcIj09PU8mJmU8PWsubGVmdCsxKXJldHVybiBnKCk7bGV0IE49W107c3dpdGNoKE8pe2Nhc2VcInRvcFwiOk49W1t6LGsudG9wKzFdLFt6LEEuYm90dG9tLTFdLFtMLEEuYm90dG9tLTFdLFtMLGsudG9wKzFdXTticmVhaztjYXNlXCJib3R0b21cIjpOPVtbeixBLnRvcCsxXSxbeixrLmJvdHRvbS0xXSxbTCxrLmJvdHRvbS0xXSxbTCxBLnRvcCsxXV07YnJlYWs7Y2FzZVwibGVmdFwiOk49W1tBLnJpZ2h0LTEsUl0sW0EucmlnaHQtMSxUXSxbay5sZWZ0KzEsVF0sW2subGVmdCsxLFJdXTticmVhaztjYXNlXCJyaWdodFwiOk49W1trLnJpZ2h0LTEsUl0sW2sucmlnaHQtMSxUXSxbQS5sZWZ0KzEsVF0sW0EubGVmdCsxLFJdXX1pZighZTgoW20sdl0sTikpe2lmKGEmJiFFKXJldHVybiBnKCk7aWYoIXgmJnIpe2xldCBlPWZ1bmN0aW9uKGUsbil7bGV0IHQ9cGVyZm9ybWFuY2Uubm93KCkscj10LXM7aWYobnVsbD09PWl8fG51bGw9PT1sfHwwPT09cilyZXR1cm4gaT1lLGw9bixzPXQsbnVsbDtsZXQgbz1lLWksYT1uLWwsYz1NYXRoLnNxcnQobypvK2EqYSk7cmV0dXJuIGk9ZSxsPW4scz10LGMvcn0oaC5jbGllbnRYLGguY2xpZW50WSk7aWYobnVsbCE9PWUmJmU8LjEpcmV0dXJuIGcoKX1lOChbbSx2XSxmdW5jdGlvbihbZSx0XSl7c3dpdGNoKE8pe2Nhc2VcInRvcFwiOntsZXQgcj1bW0EubGVmdCxDfHxfP0EuYm90dG9tLW46QS50b3BdLFtBLnJpZ2h0LEM/Xz9BLmJvdHRvbS1uOkEudG9wOkEuYm90dG9tLW5dXTtyZXR1cm5bW18/ZStuLzI6Qz9lKzQqbjplLTQqbix0K24rMV0sW18/ZS1uLzI6Qz9lKzQqbjplLTQqbix0K24rMV0sLi4ucl19Y2FzZVwiYm90dG9tXCI6e2xldCByPVtbQS5sZWZ0LEN8fF8/QS50b3ArbjpBLmJvdHRvbV0sW0EucmlnaHQsQz9fP0EudG9wK246QS5ib3R0b206QS50b3Arbl1dO3JldHVybltbXz9lK24vMjpDP2UrNCpuOmUtNCpuLHQtbl0sW18/ZS1uLzI6Qz9lKzQqbjplLTQqbix0LW5dLC4uLnJdfWNhc2VcImxlZnRcIjpyZXR1cm5bW1N8fFA/QS5yaWdodC1uOkEubGVmdCxBLnRvcF0sW1M/UD9BLnJpZ2h0LW46QS5sZWZ0OkEucmlnaHQtbixBLmJvdHRvbV0sW2UrbisxLFA/dCtuLzI6Uz90KzQqbjp0LTQqbl0sW2UrbisxLFA/dC1uLzI6Uz90KzQqbjp0LTQqbl1dO2Nhc2VcInJpZ2h0XCI6e2xldCByPVtbU3x8UD9BLmxlZnQrbjpBLnJpZ2h0LEEudG9wXSxbUz9QP0EubGVmdCtuOkEucmlnaHQ6QS5sZWZ0K24sQS5ib3R0b21dXTtyZXR1cm5bW2UtbixQP3Qrbi8yOlM/dCs0Km46dC00Km5dLFtlLW4sUD90LW4vMjpTP3QrNCpuOnQtNCpuXSwuLi5yXX1kZWZhdWx0OnJldHVybltdfX0oW2UsdF0pKT8hYSYmciYmby5zdGFydCg0MCxnKTpnKCl9fTtyZXR1cm4gYy5fX29wdGlvbnM9e2Jsb2NrUG9pbnRlckV2ZW50czp0fSxjfWxldCBuZT1lUiYmZUw7ZnVuY3Rpb24gbm4oZSxuPXt9KXtsZXR7b3Blbjp0LG9uT3BlbkNoYW5nZTpyLGV2ZW50czpvLGRhdGFSZWY6YSxlbGVtZW50czppfT1lLHtlbmFibGVkOmw9ITAsdmlzaWJsZU9ubHk6cz0hMH09bixjPUMudXNlUmVmKCExKSx1PWVrKCksZD1DLnVzZVJlZighMCk7Qy51c2VFZmZlY3QoKCk9PntpZighbClyZXR1cm47bGV0IGU9UShpLmRvbVJlZmVyZW5jZSk7ZnVuY3Rpb24gbigpeyF0JiZlbihpLmRvbVJlZmVyZW5jZSkmJmkuZG9tUmVmZXJlbmNlPT09ZVooZVEoaS5kb21SZWZlcmVuY2UpKSYmKGMuY3VycmVudD0hMCl9ZnVuY3Rpb24gcigpe2QuY3VycmVudD0hMH1mdW5jdGlvbiBvKCl7ZC5jdXJyZW50PSExfXJldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsbiksbmUmJihlLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsciwhMCksZS5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIixvLCEwKSksKCk9PntlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsbiksbmUmJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsciwhMCksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIixvLCEwKSl9fSxbaS5kb21SZWZlcmVuY2UsdCxsXSksQy51c2VFZmZlY3QoKCk9PntpZihsKXJldHVybiBvLm9uKFwib3BlbmNoYW5nZVwiLGUpLCgpPT57by5vZmYoXCJvcGVuY2hhbmdlXCIsZSl9O2Z1bmN0aW9uIGUoe3JlYXNvbjplfSl7KFwicmVmZXJlbmNlLXByZXNzXCI9PT1lfHxcImVzY2FwZS1rZXlcIj09PWUpJiYoYy5jdXJyZW50PSEwKX19LFtvLGxdKTtsZXQgZj1DLnVzZU1lbW8oKCk9Pih7b25Nb3VzZUxlYXZlKCl7Yy5jdXJyZW50PSExfSxvbkZvY3VzKGUpe2lmKGMuY3VycmVudClyZXR1cm47bGV0IG49ZVgoZS5uYXRpdmVFdmVudCk7aWYocyYmZWUobikpe2lmKG5lJiYhZS5yZWxhdGVkVGFyZ2V0KXtpZighZC5jdXJyZW50JiYhZUcobikpcmV0dXJufWVsc2UgaWYoIWZ1bmN0aW9uKGUpe2lmKCFlfHxlTilyZXR1cm4hMDt0cnl7cmV0dXJuIGUubWF0Y2hlcyhcIjpmb2N1cy12aXNpYmxlXCIpfWNhdGNoKGUpe3JldHVybiEwfX0obikpcmV0dXJufXIoITAsZS5uYXRpdmVFdmVudCxcImZvY3VzXCIpfSxvbkJsdXIoZSl7Yy5jdXJyZW50PSExO2xldCBuPWUucmVsYXRlZFRhcmdldCx0PWUubmF0aXZlRXZlbnQsbz1lZShuKSYmbi5oYXNBdHRyaWJ1dGUoZTEoXCJmb2N1cy1ndWFyZFwiKSkmJlwib3V0c2lkZVwiPT09bi5nZXRBdHRyaWJ1dGUoXCJkYXRhLXR5cGVcIik7dS5zdGFydCgwLCgpPT57bGV0IGU9ZVooaS5kb21SZWZlcmVuY2U/aS5kb21SZWZlcmVuY2Uub3duZXJEb2N1bWVudDpkb2N1bWVudCk7KG58fGUhPT1pLmRvbVJlZmVyZW5jZSkmJihlWShhLmN1cnJlbnQuZmxvYXRpbmdDb250ZXh0Py5yZWZzLmZsb2F0aW5nLmN1cnJlbnQsZSl8fGVZKGkuZG9tUmVmZXJlbmNlLGUpfHxvfHxyKCExLHQsXCJmb2N1c1wiKSl9KX19KSxbYSxpLmRvbVJlZmVyZW5jZSxyLHMsdV0pO3JldHVybiBDLnVzZU1lbW8oKCk9Pmw/e3JlZmVyZW5jZTpmfTp7fSxbbCxmXSl9bGV0IG50PXtzdHlsZTp7dHJhbnNpdGlvbjpcIm5vbmVcIn19LG5yPXt9LG5vPXtmYWxsYmFja0F4aXNTaWRlOlwibm9uZVwifSxuYT17ZmFsbGJhY2tBeGlzU2lkZTpcImVuZFwifSxuaT1uZXcgY2xhc3N7Y2FsbGJhY2tzPVtdO2NhbGxiYWNrc0NvdW50PTA7bmV4dElkPTE7c3RhcnRJZD0xO2lzU2NoZWR1bGVkPSExO3RpY2s9ZT0+e3RoaXMuaXNTY2hlZHVsZWQ9ITE7bGV0IG49dGhpcy5jYWxsYmFja3MsdD10aGlzLmNhbGxiYWNrc0NvdW50O2lmKHRoaXMuY2FsbGJhY2tzPVtdLHRoaXMuY2FsbGJhY2tzQ291bnQ9MCx0aGlzLnN0YXJ0SWQ9dGhpcy5uZXh0SWQsdD4wKWZvcihsZXQgdD0wO3Q8bi5sZW5ndGg7dCs9MSluW3RdPy4oZSl9O3JlcXVlc3QoZSl7bGV0IG49dGhpcy5uZXh0SWQ7cmV0dXJuIHRoaXMubmV4dElkKz0xLHRoaXMuY2FsbGJhY2tzLnB1c2goZSksdGhpcy5jYWxsYmFja3NDb3VudCs9MSx0aGlzLmlzU2NoZWR1bGVkfHwocmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMudGljayksdGhpcy5pc1NjaGVkdWxlZD0hMCksbn1jYW5jZWwoZSl7bGV0IG49ZS10aGlzLnN0YXJ0SWQ7bjwwfHxuPj10aGlzLmNhbGxiYWNrcy5sZW5ndGh8fCh0aGlzLmNhbGxiYWNrc1tuXT1udWxsLHRoaXMuY2FsbGJhY2tzQ291bnQtPTEpfX07Y2xhc3Mgbmx7c3RhdGljIGNyZWF0ZSgpe3JldHVybiBuZXcgbmx9c3RhdGljIHJlcXVlc3QoZSl7cmV0dXJuIG5pLnJlcXVlc3QoZSl9c3RhdGljIGNhbmNlbChlKXtyZXR1cm4gbmkuY2FuY2VsKGUpfWN1cnJlbnRJZD1udWxsO3JlcXVlc3QoZSl7dGhpcy5jYW5jZWwoKSx0aGlzLmN1cnJlbnRJZD1uaS5yZXF1ZXN0KCgpPT57dGhpcy5jdXJyZW50SWQ9bnVsbCxlKCl9KX1jYW5jZWw9KCk9PntudWxsIT09dGhpcy5jdXJyZW50SWQmJihuaS5jYW5jZWwodGhpcy5jdXJyZW50SWQpLHRoaXMuY3VycmVudElkPW51bGwpfTtkaXNwb3NlRWZmZWN0PSgpPT50aGlzLmNhbmNlbH1mdW5jdGlvbiBucygpe2xldCBlPVAobmwuY3JlYXRlKS5jdXJyZW50O3JldHVybiBldyhlLmRpc3Bvc2VFZmZlY3QpLGV9bGV0IG5jPXtwb2ludGVyZG93bjpcIm9uUG9pbnRlckRvd25cIixtb3VzZWRvd246XCJvbk1vdXNlRG93blwiLGNsaWNrOlwib25DbGlja1wifSxudT17cG9pbnRlcmRvd246XCJvblBvaW50ZXJEb3duQ2FwdHVyZVwiLG1vdXNlZG93bjpcIm9uTW91c2VEb3duQ2FwdHVyZVwiLGNsaWNrOlwib25DbGlja0NhcHR1cmVcIn0sbmQ9ZT0+KHtlc2NhcGVLZXk6XCJib29sZWFuXCI9PXR5cGVvZiBlP2U6ZT8uZXNjYXBlS2V5Pz8hMSxvdXRzaWRlUHJlc3M6XCJib29sZWFuXCI9PXR5cGVvZiBlP2U6ZT8ub3V0c2lkZVByZXNzPz8hMH0pO2Z1bmN0aW9uIG5mKGUsbj17fSl7bGV0e29wZW46dCxvbk9wZW5DaGFuZ2U6cixlbGVtZW50czpvLGRhdGFSZWY6YX09ZSx7ZW5hYmxlZDppPSEwLGVzY2FwZUtleTpsPSEwLG91dHNpZGVQcmVzczpzPSEwLG91dHNpZGVQcmVzc0V2ZW50OmM9XCJwb2ludGVyZG93blwiLHJlZmVyZW5jZVByZXNzOnU9ITEscmVmZXJlbmNlUHJlc3NFdmVudDpkPVwicG9pbnRlcmRvd25cIixhbmNlc3RvclNjcm9sbDpmPSExLGJ1YmJsZXM6cCxjYXB0dXJlOmh9PW4sZz1XKCksbT1UKFwiZnVuY3Rpb25cIj09dHlwZW9mIHM/czooKT0+ITEpLHY9XCJmdW5jdGlvblwiPT10eXBlb2Ygcz9tOnMsYj1DLnVzZVJlZighMSkse2VzY2FwZUtleTp5LG91dHNpZGVQcmVzczp4fT1uZChwKSx7ZXNjYXBlS2V5Oncsb3V0c2lkZVByZXNzOmp9PW5kKGgpLGs9Qy51c2VSZWYoITEpLEE9ZWsoKSxPPVQoZT0+e2lmKCF0fHwhaXx8IWx8fFwiRXNjYXBlXCIhPT1lLmtleXx8ay5jdXJyZW50KXJldHVybjtsZXQgbj1hLmN1cnJlbnQuZmxvYXRpbmdDb250ZXh0Py5ub2RlSWQsbz1nP2U2KGcubm9kZXNSZWYuY3VycmVudCxuKTpbXTtpZigheSYmKGUuc3RvcFByb3BhZ2F0aW9uKCksby5sZW5ndGg+MCkpe2xldCBlPSEwO2lmKG8uZm9yRWFjaChuPT57bi5jb250ZXh0Py5vcGVuJiYhbi5jb250ZXh0LmRhdGFSZWYuY3VycmVudC5fX2VzY2FwZUtleUJ1YmJsZXMmJihlPSExKX0pLCFlKXJldHVybn1yKCExLFwibmF0aXZlRXZlbnRcImluIGU/ZS5uYXRpdmVFdmVudDplLFwiZXNjYXBlLWtleVwiKX0pLFM9VChlPT57bGV0IG49KCk9PntPKGUpLGVYKGUpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLG4pfTtlWChlKT8uYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixuKX0pLEU9VChlPT57bGV0IG49YS5jdXJyZW50Lmluc2lkZVJlYWN0VHJlZTthLmN1cnJlbnQuaW5zaWRlUmVhY3RUcmVlPSExO2xldCB0PWIuY3VycmVudDtpZihiLmN1cnJlbnQ9ITEsXCJjbGlja1wiPT09YyYmdHx8bnx8XCJmdW5jdGlvblwiPT10eXBlb2YgdiYmIXYoZSkpcmV0dXJuO2xldCBpPWVYKGUpLGw9YFske2UxKFwiaW5lcnRcIil9XWAscz1lUShvLmZsb2F0aW5nKS5xdWVyeVNlbGVjdG9yQWxsKGwpLHU9ZWUoaSk/aTpudWxsO2Zvcig7dSYmIWVoKHUpOyl7bGV0IGU9ZXYodSk7aWYoZWgoZSl8fCFlZShlKSlicmVhazt1PWV9aWYocy5sZW5ndGgmJmVlKGkpJiYhaS5tYXRjaGVzKFwiaHRtbCxib2R5XCIpJiYhZVkoaSxvLmZsb2F0aW5nKSYmQXJyYXkuZnJvbShzKS5ldmVyeShlPT4hZVkodSxlKSkpcmV0dXJuO2lmKGVuKGkpKXtsZXQgbj1laChpKSx0PWVnKGkpLHI9L2F1dG98c2Nyb2xsLyxvPW58fHIudGVzdCh0Lm92ZXJmbG93WCksYT1ufHxyLnRlc3QodC5vdmVyZmxvd1kpLGw9byYmaS5jbGllbnRXaWR0aD4wJiZpLnNjcm9sbFdpZHRoPmkuY2xpZW50V2lkdGgscz1hJiZpLmNsaWVudEhlaWdodD4wJiZpLnNjcm9sbEhlaWdodD5pLmNsaWVudEhlaWdodCxjPVwicnRsXCI9PT10LmRpcmVjdGlvbix1PXMmJihjP2Uub2Zmc2V0WDw9aS5vZmZzZXRXaWR0aC1pLmNsaWVudFdpZHRoOmUub2Zmc2V0WD5pLmNsaWVudFdpZHRoKSxkPWwmJmUub2Zmc2V0WT5pLmNsaWVudEhlaWdodDtpZih1fHxkKXJldHVybn1sZXQgZD1hLmN1cnJlbnQuZmxvYXRpbmdDb250ZXh0Py5ub2RlSWQsZj1nJiZlNihnLm5vZGVzUmVmLmN1cnJlbnQsZCkuc29tZShuPT5lSyhlLG4uY29udGV4dD8uZWxlbWVudHMuZmxvYXRpbmcpKTtpZihlSyhlLG8uZmxvYXRpbmcpfHxlSyhlLG8uZG9tUmVmZXJlbmNlKXx8ZilyZXR1cm47bGV0IHA9Zz9lNihnLm5vZGVzUmVmLmN1cnJlbnQsZCk6W107aWYocC5sZW5ndGg+MCl7bGV0IGU9ITA7aWYocC5mb3JFYWNoKG49PntuLmNvbnRleHQ/Lm9wZW4mJiFuLmNvbnRleHQuZGF0YVJlZi5jdXJyZW50Ll9fb3V0c2lkZVByZXNzQnViYmxlcyYmKGU9ITEpfSksIWUpcmV0dXJufXIoITEsZSxcIm91dHNpZGUtcHJlc3NcIil9KSxfPVQoZT0+e2xldCBuPSgpPT57RShlKSxlWChlKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihjLG4pfTtlWChlKT8uYWRkRXZlbnRMaXN0ZW5lcihjLG4pfSk7Qy51c2VFZmZlY3QoKCk9PntpZighdHx8IWkpcmV0dXJuO2EuY3VycmVudC5fX2VzY2FwZUtleUJ1YmJsZXM9eSxhLmN1cnJlbnQuX19vdXRzaWRlUHJlc3NCdWJibGVzPXg7bGV0IGU9bmV3IGVqO2Z1bmN0aW9uIG4oZSl7cighMSxlLFwiYW5jZXN0b3Itc2Nyb2xsXCIpfWZ1bmN0aW9uIHMoKXtlLmNsZWFyKCksay5jdXJyZW50PSEwfWZ1bmN0aW9uIHUoKXtlLnN0YXJ0KDUqISFlZigpLCgpPT57ay5jdXJyZW50PSExfSl9bGV0IGQ9ZVEoby5mbG9hdGluZyk7bCYmKGQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIix3P1M6Tyx3KSxkLmFkZEV2ZW50TGlzdGVuZXIoXCJjb21wb3NpdGlvbnN0YXJ0XCIscyksZC5hZGRFdmVudExpc3RlbmVyKFwiY29tcG9zaXRpb25lbmRcIix1KSksdiYmZC5hZGRFdmVudExpc3RlbmVyKGMsaj9fOkUsaik7bGV0IHA9W107cmV0dXJuIGYmJihlZShvLmRvbVJlZmVyZW5jZSkmJihwPWViKG8uZG9tUmVmZXJlbmNlKSksZWUoby5mbG9hdGluZykmJihwPXAuY29uY2F0KGViKG8uZmxvYXRpbmcpKSksIWVlKG8ucmVmZXJlbmNlKSYmby5yZWZlcmVuY2UmJm8ucmVmZXJlbmNlLmNvbnRleHRFbGVtZW50JiYocD1wLmNvbmNhdChlYihvLnJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCkpKSksKHA9cC5maWx0ZXIoZT0+ZSE9PWQuZGVmYXVsdFZpZXc/LnZpc3VhbFZpZXdwb3J0KSkuZm9yRWFjaChlPT57ZS5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsbix7cGFzc2l2ZTohMH0pfSksKCk9PntsJiYoZC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHc/UzpPLHcpLGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbXBvc2l0aW9uc3RhcnRcIixzKSxkLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb21wb3NpdGlvbmVuZFwiLHUpKSx2JiZkLnJlbW92ZUV2ZW50TGlzdGVuZXIoYyxqP186RSxqKSxwLmZvckVhY2goZT0+e2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLG4pfSksZS5jbGVhcigpfX0sW2EsbyxsLHYsYyx0LHIsZixpLHkseCxPLHcsUyxFLGosX10pLEMudXNlRWZmZWN0KCgpPT57YS5jdXJyZW50Lmluc2lkZVJlYWN0VHJlZT0hMX0sW2EsdixjXSk7bGV0IFA9Qy51c2VNZW1vKCgpPT4oe29uS2V5RG93bjpPLC4uLnUmJntbbmNbZF1dOmU9PntyKCExLGUubmF0aXZlRXZlbnQsXCJyZWZlcmVuY2UtcHJlc3NcIil9LC4uLlwiY2xpY2tcIiE9PWQmJntvbkNsaWNrKGUpe3IoITEsZS5uYXRpdmVFdmVudCxcInJlZmVyZW5jZS1wcmVzc1wiKX19fX0pLFtPLHIsdSxkXSksej1DLnVzZU1lbW8oKCk9Pih7b25LZXlEb3duOk8sb25Nb3VzZURvd24oKXtiLmN1cnJlbnQ9ITB9LG9uTW91c2VVcCgpe2IuY3VycmVudD0hMH0sW251W2NdXTooKT0+e2EuY3VycmVudC5pbnNpZGVSZWFjdFRyZWU9ITB9LG9uQmx1ckNhcHR1cmUoKXtnfHwoYS5jdXJyZW50Lmluc2lkZVJlYWN0VHJlZT0hMCxBLnN0YXJ0KDAsKCk9PnthLmN1cnJlbnQuaW5zaWRlUmVhY3RUcmVlPSExfSkpfX0pLFtPLGMsYSxnLEFdKTtyZXR1cm4gQy51c2VNZW1vKCgpPT5pP3tyZWZlcmVuY2U6UCxmbG9hdGluZzp6fTp7fSxbaSxQLHpdKX1sZXQgbnA9bmV3IE1hcChbW1wic2VsZWN0XCIsXCJsaXN0Ym94XCJdLFtcImNvbWJvYm94XCIsXCJsaXN0Ym94XCJdLFtcImxhYmVsXCIsITFdXSksbmg9W1widG9wXCIsXCJyaWdodFwiLFwiYm90dG9tXCIsXCJsZWZ0XCJdLG5nPU1hdGgubWluLG5tPU1hdGgubWF4LG52PU1hdGgucm91bmQsbmI9TWF0aC5mbG9vcixueT1lPT4oe3g6ZSx5OmV9KSxueD17bGVmdDpcInJpZ2h0XCIscmlnaHQ6XCJsZWZ0XCIsYm90dG9tOlwidG9wXCIsdG9wOlwiYm90dG9tXCJ9LG53PXtzdGFydDpcImVuZFwiLGVuZDpcInN0YXJ0XCJ9O2Z1bmN0aW9uIG5qKGUsbil7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZT9lKG4pOmV9ZnVuY3Rpb24gbmsoZSl7cmV0dXJuIGUuc3BsaXQoXCItXCIpWzBdfWZ1bmN0aW9uIG5BKGUpe3JldHVybiBlLnNwbGl0KFwiLVwiKVsxXX1mdW5jdGlvbiBuTyhlKXtyZXR1cm5cInhcIj09PWU/XCJ5XCI6XCJ4XCJ9ZnVuY3Rpb24gbkMoZSl7cmV0dXJuXCJ5XCI9PT1lP1wiaGVpZ2h0XCI6XCJ3aWR0aFwifWxldCBuUz1uZXcgU2V0KFtcInRvcFwiLFwiYm90dG9tXCJdKTtmdW5jdGlvbiBuRShlKXtyZXR1cm4gblMuaGFzKG5rKGUpKT9cInlcIjpcInhcIn1mdW5jdGlvbiBuXyhlKXtyZXR1cm4gZS5yZXBsYWNlKC9zdGFydHxlbmQvZyxlPT5ud1tlXSl9bGV0IG5QPVtcImxlZnRcIixcInJpZ2h0XCJdLG56PVtcInJpZ2h0XCIsXCJsZWZ0XCJdLG5MPVtcInRvcFwiLFwiYm90dG9tXCJdLG5UPVtcImJvdHRvbVwiLFwidG9wXCJdO2Z1bmN0aW9uIG5SKGUpe3JldHVybiBlLnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLGU9Pm54W2VdKX1mdW5jdGlvbiBuTihlKXtyZXR1cm5cIm51bWJlclwiIT10eXBlb2YgZT97dG9wOjAscmlnaHQ6MCxib3R0b206MCxsZWZ0OjAsLi4uZX06e3RvcDplLHJpZ2h0OmUsYm90dG9tOmUsbGVmdDplfX1mdW5jdGlvbiBuRChlKXtsZXR7eDpuLHk6dCx3aWR0aDpyLGhlaWdodDpvfT1lO3JldHVybnt3aWR0aDpyLGhlaWdodDpvLHRvcDp0LGxlZnQ6bixyaWdodDpuK3IsYm90dG9tOnQrbyx4Om4seTp0fX1mdW5jdGlvbiBuQihlLG4sdCl7cmV0dXJuIE1hdGguZmxvb3IoZS9uKSE9PXR9ZnVuY3Rpb24gbk0oZSxuKXtyZXR1cm4gbjwwfHxuPj1lLmN1cnJlbnQubGVuZ3RofWZ1bmN0aW9uIG5JKGUsbil7cmV0dXJuIG5GKGUse2Rpc2FibGVkSW5kaWNlczpufSl9ZnVuY3Rpb24gbkgoZSxuKXtyZXR1cm4gbkYoZSx7ZGVjcmVtZW50OiEwLHN0YXJ0aW5nSW5kZXg6ZS5jdXJyZW50Lmxlbmd0aCxkaXNhYmxlZEluZGljZXM6bn0pfWZ1bmN0aW9uIG5GKGUse3N0YXJ0aW5nSW5kZXg6bj0tMSxkZWNyZW1lbnQ6dD0hMSxkaXNhYmxlZEluZGljZXM6cixhbW91bnQ6bz0xfT17fSl7bGV0IGE9bjtkbyBhKz10Py1vOm87d2hpbGUoYT49MCYmYTw9ZS5jdXJyZW50Lmxlbmd0aC0xJiZuVShlLGEscikpO3JldHVybiBhfWZ1bmN0aW9uIG5VKGUsbix0KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXJldHVybiB0KG4pO2lmKHQpcmV0dXJuIHQuaW5jbHVkZXMobik7bGV0IHI9ZS5jdXJyZW50W25dO3JldHVybiBudWxsPT1yfHxyLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpfHxcInRydWVcIj09PXIuZ2V0QXR0cmlidXRlKFwiYXJpYS1kaXNhYmxlZFwiKX1sZXQgblY9MDtmdW5jdGlvbiBucShlLG49e30pe2xldHtwcmV2ZW50U2Nyb2xsOnQ9ITEsY2FuY2VsUHJldmlvdXM6cj0hMCxzeW5jOm89ITF9PW47ciYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoblYpO2xldCBhPSgpPT5lPy5mb2N1cyh7cHJldmVudFNjcm9sbDp0fSk7bz9hKCk6blY9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGEpfWZ1bmN0aW9uIG5XKGUsbix0KXtzd2l0Y2goZSl7Y2FzZVwidmVydGljYWxcIjpyZXR1cm4gbjtjYXNlXCJob3Jpem9udGFsXCI6cmV0dXJuIHQ7ZGVmYXVsdDpyZXR1cm4gbnx8dH19ZnVuY3Rpb24gbiQoZSxuKXtyZXR1cm4gblcobixlPT09ZVd8fGU9PT1lJCxlPT09ZVZ8fGU9PT1lcSl9ZnVuY3Rpb24gblooZSxuLHQpe3JldHVybiBuVyhuLGU9PT1lJCx0P2U9PT1lVjplPT09ZXEpfHxcIkVudGVyXCI9PT1lfHxcIiBcIj09PWV8fFwiXCI9PT1lfWZ1bmN0aW9uIG5ZKGUsbix0KXtyZXR1cm4gblcobix0P2U9PT1lVjplPT09ZXEsZT09PWUkKX1mdW5jdGlvbiBuWChlLG4sdCxyKXtyZXR1cm5cImJvdGhcIj09PW58fFwiaG9yaXpvbnRhbFwiPT09biYmciYmcj4xP1wiRXNjYXBlXCI9PT1lOm5XKG4sdD9lPT09ZXE6ZT09PWVWLGU9PT1lVyl9ZnVuY3Rpb24gbksoZT1bXSl7bGV0IG49ZS5tYXAoZT0+ZT8ucmVmZXJlbmNlKSx0PWUubWFwKGU9PmU/LmZsb2F0aW5nKSxyPWUubWFwKGU9PmU/Lml0ZW0pLG89Qy51c2VDYWxsYmFjayhuPT5uUShuLGUsXCJyZWZlcmVuY2VcIiksbiksYT1DLnVzZUNhbGxiYWNrKG49Pm5RKG4sZSxcImZsb2F0aW5nXCIpLHQpLGk9Qy51c2VDYWxsYmFjayhuPT5uUShuLGUsXCJpdGVtXCIpLHIpO3JldHVybiBDLnVzZU1lbW8oKCk9Pih7Z2V0UmVmZXJlbmNlUHJvcHM6byxnZXRGbG9hdGluZ1Byb3BzOmEsZ2V0SXRlbVByb3BzOml9KSxbbyxhLGldKX1mdW5jdGlvbiBuUShlLG4sdCl7bGV0IHI9bmV3IE1hcCxvPVwiaXRlbVwiPT09dCxhPXt9O2ZvcihsZXQgbiBpblwiZmxvYXRpbmdcIj09PXQmJihhLnRhYkluZGV4PS0xLGFbZUhdPVwiXCIpLGUpbyYmZSYmKG49PT1lRnx8bj09PWVVKXx8KGFbbl09ZVtuXSk7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKz0xKXtsZXQgbCxzPW5baV0/Llt0XTsobD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzP2U/cyhlKTpudWxsOnMpJiZuRyhhLGwsbyxyKX1yZXR1cm4gbkcoYSxlLG8sciksYX1mdW5jdGlvbiBuRyhlLG4sdCxyKXtmb3IobGV0IG8gaW4gbil7bGV0IGE9bltvXTt0JiYobz09PWVGfHxvPT09ZVUpfHwoby5zdGFydHNXaXRoKFwib25cIik/KHIuaGFzKG8pfHxyLnNldChvLFtdKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiYoci5nZXQobyk/LnB1c2goYSksZVtvXT0oLi4uZSk9PnIuZ2V0KG8pPy5tYXAobj0+biguLi5lKSkuZmluZChlPT52b2lkIDAhPT1lKSkpOmVbb109YSl9fWxldCBuSj1DLmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiBuMChlKXtsZXQgbj1DLnVzZUNvbnRleHQobkopO2lmKHZvaWQgMD09PW4mJiFlKXRocm93IEVycm9yKFwiQmFzZSBVSTogTWVudVJvb3RDb250ZXh0IGlzIG1pc3NpbmcuIE1lbnUgcGFydHMgbXVzdCBiZSBwbGFjZWQgd2l0aGluIDxNZW51LlJvb3Q+LlwiKTtyZXR1cm4gbn1sZXQgbjE9Qy5jcmVhdGVDb250ZXh0KG51bGwpO2Z1bmN0aW9uIG4yKGUsbj0hMSx0PSExKXtsZXRbcixvXT1DLnVzZVN0YXRlKGUmJm4/XCJpZGxlXCI6dm9pZCAwKSxbYSxpXT1DLnVzZVN0YXRlKGUpO3JldHVybiBlJiYhYSYmKGkoITApLG8oXCJzdGFydGluZ1wiKSksZXx8IWF8fFwiZW5kaW5nXCI9PT1yfHx0fHxvKFwiZW5kaW5nXCIpLGV8fGF8fFwiZW5kaW5nXCIhPT1yfHxvKHZvaWQgMCksRigoKT0+e2lmKCFlJiZhJiZcImVuZGluZ1wiIT09ciYmdCl7bGV0IGU9bmwucmVxdWVzdCgoKT0+e28oXCJlbmRpbmdcIil9KTtyZXR1cm4oKT0+e25sLmNhbmNlbChlKX19fSxbZSxhLHIsdF0pLEYoKCk9PntpZighZXx8bilyZXR1cm47bGV0IHQ9bmwucmVxdWVzdCgoKT0+e0UuZmx1c2hTeW5jKCgpPT57byh2b2lkIDApfSl9KTtyZXR1cm4oKT0+e25sLmNhbmNlbCh0KX19LFtuLGVdKSxGKCgpPT57aWYoIWV8fCFuKXJldHVybjtlJiZhJiZcImlkbGVcIiE9PXImJm8oXCJzdGFydGluZ1wiKTtsZXQgdD1ubC5yZXF1ZXN0KCgpPT57byhcImlkbGVcIil9KTtyZXR1cm4oKT0+e25sLmNhbmNlbCh0KX19LFtuLGUsYSxvLHJdKSxDLnVzZU1lbW8oKCk9Pih7bW91bnRlZDphLHNldE1vdW50ZWQ6aSx0cmFuc2l0aW9uU3RhdHVzOnJ9KSxbYSxyXSl9ZnVuY3Rpb24gbjQoe2NvbnRyb2xsZWQ6ZSxkZWZhdWx0Om4sbmFtZTp0LHN0YXRlOnI9XCJ2YWx1ZVwifSl7bGV0e2N1cnJlbnQ6b309Qy51c2VSZWYodm9pZCAwIT09ZSksW2EsaV09Qy51c2VTdGF0ZShuKSxsPUMudXNlQ2FsbGJhY2soZT0+e298fGkoZSl9LFtdKTtyZXR1cm5bbz9lOmEsbF19ZnVuY3Rpb24gbjUoZSl7bGV0e2VuYWJsZWQ6bj0hMCxvcGVuOnQscmVmOnIsb25Db21wbGV0ZTpvfT1lLGE9ZUEodCksaT1UKG8pLGw9ZnVuY3Rpb24oZSxuPSExKXtsZXQgdD1ucygpLHI9ZWsoKTtyZXR1cm4gVCgobyxhPW51bGwpPT57dC5jYW5jZWwoKSxyLmNsZWFyKCk7bGV0IGk9ZS5jdXJyZW50O2kmJihcImZ1bmN0aW9uXCIhPXR5cGVvZiBpLmdldEFuaW1hdGlvbnN8fGdsb2JhbFRoaXMuQkFTRV9VSV9BTklNQVRJT05TX0RJU0FCTEVEP28oKTp0LnJlcXVlc3QoKCk9PntmdW5jdGlvbiBlKCl7aSYmUHJvbWlzZS5hbGxTZXR0bGVkKGkuZ2V0QW5pbWF0aW9ucygpLm1hcChlPT5lLmZpbmlzaGVkKSkudGhlbigoKT0+e251bGwhPWEmJmEuYWJvcnRlZHx8RS5mbHVzaFN5bmMobyl9KX1uP3Iuc3RhcnQoMCxlKTplKCl9KSl9KX0ocix0KTtDLnVzZUVmZmVjdCgoKT0+e24mJmwoKCk9Pnt0PT09YS5jdXJyZW50JiZpKCl9KX0sW24sdCxpLGwsYV0pfWxldCBuMz1DLmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiBuNihlPSEwKXtsZXQgbj1DLnVzZUNvbnRleHQobjMpO2lmKHZvaWQgMD09PW4mJiFlKXRocm93IEVycm9yKFwiQmFzZSBVSTogRGlyZWN0aW9uQ29udGV4dCBpcyBtaXNzaW5nLlwiKTtyZXR1cm4gbj8uZGlyZWN0aW9uPz9cImx0clwifWxldCBuOT0oKT0+e30sbjg9e30sbjc9e30sdGU9XCJcIjtjbGFzcyB0bntsb2NrQ291bnQ9MDtyZXN0b3JlPW51bGw7dGltZW91dExvY2s9ZWouY3JlYXRlKCk7dGltZW91dFVubG9jaz1lai5jcmVhdGUoKTthY3F1aXJlKGUpe3JldHVybiB0aGlzLmxvY2tDb3VudCs9MSwxPT09dGhpcy5sb2NrQ291bnQmJm51bGw9PT10aGlzLnJlc3RvcmUmJnRoaXMudGltZW91dExvY2suc3RhcnQoMCwoKT0+dGhpcy5sb2NrKGUpKSx0aGlzLnJlbGVhc2V9cmVsZWFzZT0oKT0+e3RoaXMubG9ja0NvdW50LT0xLDA9PT10aGlzLmxvY2tDb3VudCYmdGhpcy5yZXN0b3JlJiZ0aGlzLnRpbWVvdXRVbmxvY2suc3RhcnQoMCx0aGlzLnVubG9jayl9O3VubG9jaz0oKT0+ezA9PT10aGlzLmxvY2tDb3VudCYmdGhpcy5yZXN0b3JlJiYodGhpcy5yZXN0b3JlPy4oKSx0aGlzLnJlc3RvcmU9bnVsbCl9O2xvY2soZSl7aWYoMD09PXRoaXMubG9ja0NvdW50fHxudWxsIT09dGhpcy5yZXN0b3JlKXJldHVybjtsZXQgbj1lUShlKS5kb2N1bWVudEVsZW1lbnQsdD1RKG4pLmdldENvbXB1dGVkU3R5bGUobikub3ZlcmZsb3dZO2lmKFwiaGlkZGVuXCI9PT10fHxcImNsaXBcIj09PXQpe3RoaXMucmVzdG9yZT1uOTtyZXR1cm59bGV0IHI9ZXp8fCFmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgZG9jdW1lbnQpcmV0dXJuITE7bGV0IG49ZVEoZSk7cmV0dXJuIFEobikuaW5uZXJXaWR0aC1uLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aD4wfShlKTt0aGlzLnJlc3RvcmU9cj9mdW5jdGlvbihlKXtsZXQgbj1lUShlKS5kb2N1bWVudEVsZW1lbnQsdD1uLnN0eWxlLm92ZXJmbG93O3JldHVybiBuLnN0eWxlLm92ZXJmbG93PVwiaGlkZGVuXCIsKCk9PntuLnN0eWxlLm92ZXJmbG93PXR9fShlKTpmdW5jdGlvbihlKXtsZXQgbj1lUShlKSx0PW4uZG9jdW1lbnRFbGVtZW50LHI9bi5ib2R5LG89USh0KSxhPTAsaT0wLGw9bmwuY3JlYXRlKCk7aWYoZVAmJihvLnZpc3VhbFZpZXdwb3J0Py5zY2FsZT8/MSkhPT0xKXJldHVybigpPT57fTtmdW5jdGlvbiBzKCl7bGV0IGU9by5nZXRDb21wdXRlZFN0eWxlKHQpLG49by5nZXRDb21wdXRlZFN0eWxlKHIpO2E9dC5zY3JvbGxUb3AsaT10LnNjcm9sbExlZnQsbjg9e3Njcm9sbGJhckd1dHRlcjp0LnN0eWxlLnNjcm9sbGJhckd1dHRlcixvdmVyZmxvd1k6dC5zdHlsZS5vdmVyZmxvd1ksb3ZlcmZsb3dYOnQuc3R5bGUub3ZlcmZsb3dYfSx0ZT10LnN0eWxlLnNjcm9sbEJlaGF2aW9yLG43PXtwb3NpdGlvbjpyLnN0eWxlLnBvc2l0aW9uLGhlaWdodDpyLnN0eWxlLmhlaWdodCx3aWR0aDpyLnN0eWxlLndpZHRoLGJveFNpemluZzpyLnN0eWxlLmJveFNpemluZyxvdmVyZmxvd1k6ci5zdHlsZS5vdmVyZmxvd1ksb3ZlcmZsb3dYOnIuc3R5bGUub3ZlcmZsb3dYLHNjcm9sbEJlaGF2aW9yOnIuc3R5bGUuc2Nyb2xsQmVoYXZpb3J9O2xldCBsPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBDU1MmJkNTUy5zdXBwb3J0cz8uKFwic2Nyb2xsYmFyLWd1dHRlclwiLFwic3RhYmxlXCIpLHM9dC5zY3JvbGxIZWlnaHQ+dC5jbGllbnRIZWlnaHQsYz10LnNjcm9sbFdpZHRoPnQuY2xpZW50V2lkdGgsdT1cInNjcm9sbFwiPT09ZS5vdmVyZmxvd1l8fFwic2Nyb2xsXCI9PT1uLm92ZXJmbG93WSxkPVwic2Nyb2xsXCI9PT1lLm92ZXJmbG93WHx8XCJzY3JvbGxcIj09PW4ub3ZlcmZsb3dYLGY9TWF0aC5tYXgoMCxvLmlubmVyV2lkdGgtdC5jbGllbnRXaWR0aCkscD1NYXRoLm1heCgwLG8uaW5uZXJIZWlnaHQtdC5jbGllbnRIZWlnaHQpLGg9cGFyc2VGbG9hdChuLm1hcmdpblRvcCkrcGFyc2VGbG9hdChuLm1hcmdpbkJvdHRvbSksZz1wYXJzZUZsb2F0KG4ubWFyZ2luTGVmdCkrcGFyc2VGbG9hdChuLm1hcmdpblJpZ2h0KTtPYmplY3QuYXNzaWduKHQuc3R5bGUse3Njcm9sbGJhckd1dHRlcjpcInN0YWJsZVwiLG92ZXJmbG93WTohbCYmKHN8fHUpP1wic2Nyb2xsXCI6XCJoaWRkZW5cIixvdmVyZmxvd1g6IWwmJihjfHxkKT9cInNjcm9sbFwiOlwiaGlkZGVuXCJ9KSxPYmplY3QuYXNzaWduKHIuc3R5bGUse3Bvc2l0aW9uOlwicmVsYXRpdmVcIixoZWlnaHQ6aHx8cD9gY2FsYygxMDBkdmggLSAke2grcH1weClgOlwiMTAwZHZoXCIsd2lkdGg6Z3x8Zj9gY2FsYygxMDB2dyAtICR7ZytmfXB4KWA6XCIxMDB2d1wiLGJveFNpemluZzpcImJvcmRlci1ib3hcIixvdmVyZmxvdzpcImhpZGRlblwiLHNjcm9sbEJlaGF2aW9yOlwidW5zZXRcIn0pLHIuc2Nyb2xsVG9wPWEsci5zY3JvbGxMZWZ0PWksdC5zZXRBdHRyaWJ1dGUoXCJkYXRhLWJhc2UtdWktc2Nyb2xsLWxvY2tlZFwiLFwiXCIpLHQuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9XCJ1bnNldFwifWZ1bmN0aW9uIGMoKXtPYmplY3QuYXNzaWduKHQuc3R5bGUsbjgpLE9iamVjdC5hc3NpZ24oci5zdHlsZSxuNyksdC5zY3JvbGxUb3A9YSx0LnNjcm9sbExlZnQ9aSx0LnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtYmFzZS11aS1zY3JvbGwtbG9ja2VkXCIpLHQuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9dGV9ZnVuY3Rpb24gdSgpe2MoKSxsLnJlcXVlc3Qocyl9cmV0dXJuIHMoKSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix1KSwoKT0+e2wuY2FuY2VsKCksYygpLG8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHUpfX0oZSl9fWxldCB0dD1uZXcgdG47ZnVuY3Rpb24gdHIoZSl7aWYoZSlyZXR1cm4oe1wiZm9jdXMtb3V0XCI6XCJmb2N1cy1vdXRcIixcImVzY2FwZS1rZXlcIjpcImVzY2FwZS1rZXlcIixcIm91dHNpZGUtcHJlc3NcIjpcIm91dHNpZGUtcHJlc3NcIixcImxpc3QtbmF2aWdhdGlvblwiOlwibGlzdC1uYXZpZ2F0aW9uXCIsY2xpY2s6XCJ0cmlnZ2VyLXByZXNzXCIsaG92ZXI6XCJ0cmlnZ2VyLWhvdmVyXCIsZm9jdXM6XCJ0cmlnZ2VyLWZvY3VzXCIsXCJyZWZlcmVuY2UtcHJlc3NcIjpcInRyaWdnZXItcHJlc3NcIixcInNhZmUtcG9seWdvblwiOlwidHJpZ2dlci1ob3ZlclwiLFwiYW5jZXN0b3Itc2Nyb2xsXCI6dm9pZCAwfSlbZV19bGV0IHRvPUMuY3JlYXRlQ29udGV4dCh2b2lkIDApO2Z1bmN0aW9uIHRhKGU9ITApe2xldCBuPUMudXNlQ29udGV4dCh0byk7aWYodm9pZCAwPT09biYmIWUpdGhyb3cgRXJyb3IoXCJCYXNlIFVJOiBDb250ZXh0TWVudVJvb3RDb250ZXh0IGlzIG1pc3NpbmcuIENvbnRleHRNZW51IHBhcnRzIG11c3QgYmUgcGxhY2VkIHdpdGhpbiA8Q29udGV4dE1lbnUuUm9vdD4uXCIpO3JldHVybiBufWxldCB0aT1DLmNyZWF0ZUNvbnRleHQoITEpO2Z1bmN0aW9uIHRsKGUsbil7cmV0dXJuIGUmJiFuP2U6IWUmJm4/bjplfHxuP3suLi5lLC4uLm59OnZvaWQgMH1sZXQgdHM9e307ZnVuY3Rpb24gdGMoZSxuLHQscixvKXtsZXQgYT17Li4udGYoZSx0cyl9O3JldHVybiBuJiYoYT10dShhLG4pKSx0JiYoYT10dShhLHQpKSxyJiYoYT10dShhLHIpKSxvJiYoYT10dShhLG8pKSxhfWZ1bmN0aW9uIHR1KGUsbil7cmV0dXJuIHRkKG4pP24oZSk6ZnVuY3Rpb24oZSxuKXtpZighbilyZXR1cm4gZTtmb3IobGV0IHQgaW4gbil7bGV0IHI9blt0XTtzd2l0Y2godCl7Y2FzZVwic3R5bGVcIjplW3RdPXRsKGUuc3R5bGUscik7YnJlYWs7Y2FzZVwiY2xhc3NOYW1lXCI6ZVt0XT10aChlLmNsYXNzTmFtZSxyKTticmVhaztkZWZhdWx0OiFmdW5jdGlvbihlLG4pe2xldCB0PWUuY2hhckNvZGVBdCgwKSxyPWUuY2hhckNvZGVBdCgxKSxvPWUuY2hhckNvZGVBdCgyKTtyZXR1cm4gMTExPT09dCYmMTEwPT09ciYmbz49NjUmJm88PTkwJiYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbnx8dm9pZCAwPT09bil9KHQscik/ZVt0XT1yOmVbdF09ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj9lP3Q9Pnt2YXIgcjtpZihudWxsIT0ocj10KSYmXCJvYmplY3RcIj09dHlwZW9mIHImJlwibmF0aXZlRXZlbnRcImluIHIpe3RwKHQpO2xldCByPW4odCk7cmV0dXJuIHQuYmFzZVVJSGFuZGxlclByZXZlbnRlZHx8ZT8uKHQpLHJ9bGV0IG89bih0KTtyZXR1cm4gZT8uKHQpLG99Om46ZX0oZVt0XSxyKX19cmV0dXJuIGV9KGUsbil9ZnVuY3Rpb24gdGQoZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZX1mdW5jdGlvbiB0ZihlLG4pe3JldHVybiB0ZChlKT9lKG4pOmU/P3RzfWZ1bmN0aW9uIHRwKGUpe3JldHVybiBlLnByZXZlbnRCYXNlVUlIYW5kbGVyPSgpPT57ZS5iYXNlVUlIYW5kbGVyUHJldmVudGVkPSEwfSxlfWZ1bmN0aW9uIHRoKGUsbil7cmV0dXJuIG4/ZT9uK1wiIFwiK2U6bjplfWxldCB0Zz1bXSx0bT17Y3VycmVudDohMX0sdHY9ZnVuY3Rpb24oZSl7bGV0IG4sdCx7Y2hpbGRyZW46cixvcGVuOm8sb25PcGVuQ2hhbmdlOmEsb25PcGVuQ2hhbmdlQ29tcGxldGU6aSxkZWZhdWx0T3BlbjpzPSExLGRpc2FibGVkOmM9ITEsbW9kYWw6dSxsb29wOmQ9ITAsb3JpZW50YXRpb246Zj1cInZlcnRpY2FsXCIsYWN0aW9uc1JlZjpwLG9wZW5PbkhvdmVyOmgsZGVsYXk6Zz0xMDAsY2xvc2VEZWxheTptPTAsY2xvc2VQYXJlbnRPbkVzYzp2PSEwfT1lLFtiLHldPUMudXNlU3RhdGUobnVsbCksW3gsd109Qy51c2VTdGF0ZShudWxsKSxbaixrXT1DLnVzZVN0YXRlKCksW0EsT109Qy51c2VTdGF0ZSghMCksW1MsX109Qy51c2VTdGF0ZShudWxsKSxbUCx6XT1DLnVzZVN0YXRlKG51bGwpLFtMLFJdPUMudXNlU3RhdGUoITApLFtOLERdPUMudXNlU3RhdGUoITEpLEI9Qy51c2VSZWYobnVsbCksTT1DLnVzZVJlZihudWxsKSxJPUMudXNlUmVmKG51bGwpLFU9ZWsoKSxWPXRhKCEwKSwkPUMudXNlQ29udGV4dCh0aSk7e2xldCBlPW4wKCEwKSx0PWZ1bmN0aW9uKGUpe2xldCBuPUMudXNlQ29udGV4dChuMSk7aWYobnVsbD09PW4mJiFlKXRocm93IEVycm9yKFwiQmFzZSBVSTogTWVudWJhckNvbnRleHQgaXMgbWlzc2luZy4gTWVudWJhciBwYXJ0cyBtdXN0IGJlIHBsYWNlZCB3aXRoaW4gPE1lbnViYXI+LlwiKTtyZXR1cm4gbn0oITApO249JCYmZT97dHlwZTpcIm1lbnVcIixjb250ZXh0OmV9OnQ/e3R5cGU6XCJtZW51YmFyXCIsY29udGV4dDp0fTpWP3t0eXBlOlwiY29udGV4dC1tZW51XCIsY29udGV4dDpWfTp7dHlwZTp2b2lkIDB9fWxldCBYPUgoKTt2b2lkIDAhPT1uLnR5cGUmJihYPW4uY29udGV4dC5yb290SWQpO2xldCBLPSh2b2lkIDA9PT1uLnR5cGV8fFwiY29udGV4dC1tZW51XCI9PT1uLnR5cGUpJiYodT8/ITApLFE9XCJtZW51XCI9PT1uLnR5cGU/bi5jb250ZXh0LmFsbG93TW91c2VFbnRlcjpOLEc9XCJtZW51XCI9PT1uLnR5cGU/bi5jb250ZXh0LnNldEFsbG93TW91c2VFbnRlcjpELEo9aD8/KFwibWVudVwiPT09bi50eXBlfHxcIm1lbnViYXJcIj09PW4udHlwZSYmbi5jb250ZXh0Lmhhc1N1Ym1lbnVPcGVuKSxbZWUsZXRdPW40KHtjb250cm9sbGVkOm8sZGVmYXVsdDpzLG5hbWU6XCJNZW51Um9vdFwiLHN0YXRlOlwib3BlblwifSksZXI9Qy51c2VSZWYoXCJjb250ZXh0LW1lbnVcIiE9PW4udHlwZSksZW89ZWsoKTtDLnVzZUVmZmVjdCgoKT0+e2lmKGVlfHwoQi5jdXJyZW50PW51bGwpLFwiY29udGV4dC1tZW51XCI9PT1uLnR5cGUpe2lmKCFlZSl7ZW8uY2xlYXIoKSxlci5jdXJyZW50PSExO3JldHVybn1lby5zdGFydCg1MDAsKCk9Pntlci5jdXJyZW50PSEwfSl9fSxbZW8sZWUsbi50eXBlXSk7bGV0IGVhPUMudXNlQ2FsbGJhY2soZT0+e0kuY3VycmVudD1lLHcoZSl9LFtdKSx7bW91bnRlZDplaSxzZXRNb3VudGVkOmVsLHRyYW5zaXRpb25TdGF0dXM6ZXN9PW4yKGVlKSx7ZW5hYmxlZDplYz0hMCxtb3VudGVkOmV1LG9wZW46ZWQscmVmZXJlbmNlRWxlbWVudDplZj1udWxsfT17ZW5hYmxlZDplZSYmSyYmXCJ0cmlnZ2VyLWhvdmVyXCIhPT1QLG1vdW50ZWQ6ZWksb3BlbjplZSxyZWZlcmVuY2VFbGVtZW50Onh9O0YoKCk9PntpZihlUCYmZXUmJiFlZCl7bGV0IGU9ZVEoZWYpLG49ZS5ib2R5LnN0eWxlLnVzZXJTZWxlY3QsdD1lLmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdDtyZXR1cm4gZS5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9XCJub25lXCIsZS5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9XCJub25lXCIsKCk9PntlLmJvZHkuc3R5bGUudXNlclNlbGVjdD1uLGUuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PXR9fX0sW2V1LGVkLGVmXSksRigoKT0+e2lmKGVjKXJldHVybiB0dC5hY3F1aXJlKGVmKX0sW2VjLGVmXSksZWV8fEF8fE8oITApO2xldCBlcD1UKCgpPT57ZWwoITEpLFIoITApLEcoITEpLGk/LighMSl9KTtuNSh7ZW5hYmxlZDohcCxvcGVuOmVlLHJlZjpNLG9uQ29tcGxldGUoKXtlZXx8ZXAoKX19KTtsZXQgZWg9Qy51c2VSZWYoITApLGVnPWVrKCksZW09VCgoZSx0LHIpPT57aWYoZWU9PT1lfHwhMT09PWUmJnQ/LnR5cGU9PT1cImNsaWNrXCImJlwidG91Y2hcIj09PXQucG9pbnRlclR5cGUmJiFlaC5jdXJyZW50KXJldHVybjtlJiZcInRyaWdnZXItZm9jdXNcIj09PXI/KGVoLmN1cnJlbnQ9ITEsZWcuc3RhcnQoMzAwLCgpPT57ZWguY3VycmVudD0hMH0pKTooZWguY3VycmVudD0hMCxlZy5jbGVhcigpKTtsZXQgbz0oXCJ0cmlnZ2VyLXByZXNzXCI9PT1yfHxcIml0ZW0tcHJlc3NcIj09PXIpJiYwPT09dC5kZXRhaWwmJnQ/LmlzVHJ1c3RlZCxpPSFlJiYoXCJlc2NhcGUta2V5XCI9PT1yfHxudWxsPT1yKTtmdW5jdGlvbiBsKCl7YT8uKGUsdCxyKSxldChlKSx6KHI/P251bGwpLEIuY3VycmVudD10Pz9udWxsfVwidHJpZ2dlci1ob3ZlclwiPT09cj8oUighMCksVS5zdGFydCg1MDAsKCk9PntSKCExKX0pLEUuZmx1c2hTeW5jKGwpKTpsKCksXCJtZW51YmFyXCI9PT1uLnR5cGUmJihcInRyaWdnZXItZm9jdXNcIj09PXJ8fFwiZm9jdXMtb3V0XCI9PT1yfHxcInRyaWdnZXItaG92ZXJcIj09PXJ8fFwibGlzdC1uYXZpZ2F0aW9uXCI9PT1yfHxcInNpYmxpbmctb3BlblwiPT09cik/ayhcImdyb3VwXCIpOm98fGk/ayhvP1wiY2xpY2tcIjpcImRpc21pc3NcIik6ayh2b2lkIDApfSk7Qy51c2VJbXBlcmF0aXZlSGFuZGxlKHAsKCk9Pih7dW5tb3VudDplcH0pLFtlcF0pLFwiY29udGV4dC1tZW51XCI9PT1uLnR5cGUmJih0PW4uY29udGV4dCksQy51c2VJbXBlcmF0aXZlSGFuZGxlKHQ/LnBvc2l0aW9uZXJSZWYsKCk9PngsW3hdKSxDLnVzZUltcGVyYXRpdmVIYW5kbGUodD8uYWN0aW9uc1JlZiwoKT0+KHtzZXRPcGVuOmVtfSksW2VtXSksQy51c2VFZmZlY3QoKCk9PntlZXx8VS5jbGVhcigpfSxbVSxlZV0pO2xldCBldj1ZKHtlbGVtZW50czp7cmVmZXJlbmNlOmIsZmxvYXRpbmc6eH0sb3BlbjplZSxvbk9wZW5DaGFuZ2UoZSxuLHQpe2VtKGUsbix0cih0KSl9fSksZWI9ZTMoZXYse2VuYWJsZWQ6QSYmSiYmIWMmJlwiY29udGV4dC1tZW51XCIhPT1uLnR5cGUmJihcIm1lbnViYXJcIiE9PW4udHlwZXx8bi5jb250ZXh0Lmhhc1N1Ym1lbnVPcGVuJiYhZWUpLGhhbmRsZUNsb3NlOmU3KHtibG9ja1BvaW50ZXJFdmVudHM6ITB9KSxtb3VzZU9ubHk6ITAsbW92ZTpcIm1lbnVcIj09PW4udHlwZSxyZXN0TXM6dm9pZCAwPT09bi50eXBlfHxcIm1lbnVcIj09PW4udHlwZSYmUT9nOnZvaWQgMCxkZWxheTpcIm1lbnVcIj09PW4udHlwZT97b3BlbjpRP2c6MWUxMCxjbG9zZTptfTp7Y2xvc2U6bX19KSxleT1ubihldix7ZW5hYmxlZDohYyYmIWVlJiZcIm1lbnViYXJcIj09PW4udHlwZSYmbi5jb250ZXh0Lmhhc1N1Ym1lbnVPcGVuJiYhVn0pLGV4PWZ1bmN0aW9uKGUsbj17fSl7bGV0e29wZW46dCxvbk9wZW5DaGFuZ2U6cixkYXRhUmVmOm99PWUse2VuYWJsZWQ6YT0hMCxldmVudDppPVwiY2xpY2tcIix0b2dnbGU6bD0hMCxpZ25vcmVNb3VzZTpzPSExLHN0aWNrSWZPcGVuOmM9ITB9PW4sdT1DLnVzZVJlZih2b2lkIDApLGQ9bnMoKSxmPUMudXNlTWVtbygoKT0+KHtvblBvaW50ZXJEb3duKGUpe3UuY3VycmVudD1lLnBvaW50ZXJUeXBlfSxvbk1vdXNlRG93bihlKXtsZXQgbj11LmN1cnJlbnQsYT1lLm5hdGl2ZUV2ZW50O2lmKDAhPT1lLmJ1dHRvbnx8XCJjbGlja1wiPT09aXx8ZUkobiwhMCkmJnMpcmV0dXJuO2xldCBmPW8uY3VycmVudC5vcGVuRXZlbnQscD1mPy50eXBlLGg9ISh0JiZsJiYoIWZ8fCFjfHxcImNsaWNrXCI9PT1wfHxcIm1vdXNlZG93blwiPT09cCkpO2QucmVxdWVzdCgoKT0+e3IoaCxhLFwiY2xpY2tcIil9KX0sb25DbGljayhlKXtsZXQgbj11LmN1cnJlbnQ7aWYoXCJtb3VzZWRvd25cIj09PWkmJm4pe3UuY3VycmVudD12b2lkIDA7cmV0dXJufWlmKGVJKG4sITApJiZzKXJldHVybjtsZXQgYT1vLmN1cnJlbnQub3BlbkV2ZW50LGQ9YT8udHlwZTtyKCEodCYmbCYmKCFhfHwhY3x8XCJjbGlja1wiPT09ZHx8XCJtb3VzZWRvd25cIj09PWR8fFwia2V5ZG93blwiPT09ZHx8XCJrZXl1cFwiPT09ZCkpLGUubmF0aXZlRXZlbnQsXCJjbGlja1wiKX0sb25LZXlEb3duKCl7dS5jdXJyZW50PXZvaWQgMH19KSxbbyxpLHMscix0LGMsbCxkXSk7cmV0dXJuIEMudXNlTWVtbygoKT0+YT97cmVmZXJlbmNlOmZ9Om5yLFthLGZdKX0oZXYse2VuYWJsZWQ6IWMmJlwiY29udGV4dC1tZW51XCIhPT1uLnR5cGUsZXZlbnQ6ZWUmJlwibWVudWJhclwiPT09bi50eXBlP1wiY2xpY2tcIjpcIm1vdXNlZG93blwiLHRvZ2dsZTohSnx8XCJtZW51XCIhPT1uLnR5cGUsaWdub3JlTW91c2U6SiYmXCJtZW51XCI9PT1uLnR5cGUsc3RpY2tJZk9wZW46dm9pZCAwPT09bi50eXBlJiZMfSksZXc9bmYoZXYse2VuYWJsZWQ6IWMsYnViYmxlczp2JiZcIm1lbnVcIj09PW4udHlwZSxvdXRzaWRlUHJlc3NFdmVudDpcIm1vdXNlZG93blwiLG91dHNpZGVQcmVzczooKT0+XCJjb250ZXh0LW1lbnVcIiE9PW4udHlwZXx8Qi5jdXJyZW50Py50eXBlPT09XCJjb250ZXh0bWVudVwifHxlci5jdXJyZW50fSksZWo9ZnVuY3Rpb24oZSxuPXt9KXtsZXR7b3Blbjp0LGVsZW1lbnRzOnIsZmxvYXRpbmdJZDpvfT1lLHtlbmFibGVkOmE9ITAscm9sZTppPVwiZGlhbG9nXCJ9PW4sbD1IKCkscz1yLmRvbVJlZmVyZW5jZT8uaWR8fGwsYz1DLnVzZU1lbW8oKCk9PmUwKHIuZmxvYXRpbmcpPy5pZHx8byxbci5mbG9hdGluZyxvXSksdT1ucC5nZXQoaSk/P2ksZD1udWxsIT1xKCksZj1DLnVzZU1lbW8oKCk9PlwidG9vbHRpcFwiPT09dXx8XCJsYWJlbFwiPT09aT97W2BhcmlhLSR7XCJsYWJlbFwiPT09aT9cImxhYmVsbGVkYnlcIjpcImRlc2NyaWJlZGJ5XCJ9YF06dD9jOnZvaWQgMH06e1wiYXJpYS1leHBhbmRlZFwiOnQ/XCJ0cnVlXCI6XCJmYWxzZVwiLFwiYXJpYS1oYXNwb3B1cFwiOlwiYWxlcnRkaWFsb2dcIj09PXU/XCJkaWFsb2dcIjp1LFwiYXJpYS1jb250cm9sc1wiOnQ/Yzp2b2lkIDAsLi4uXCJsaXN0Ym94XCI9PT11JiZ7cm9sZTpcImNvbWJvYm94XCJ9LC4uLlwibWVudVwiPT09dSYme2lkOnN9LC4uLlwibWVudVwiPT09dSYmZCYme3JvbGU6XCJtZW51aXRlbVwifSwuLi5cInNlbGVjdFwiPT09aSYme1wiYXJpYS1hdXRvY29tcGxldGVcIjpcIm5vbmVcIn0sLi4uXCJjb21ib2JveFwiPT09aSYme1wiYXJpYS1hdXRvY29tcGxldGVcIjpcImxpc3RcIn19LFt1LGMsZCx0LHMsaV0pLHA9Qy51c2VNZW1vKCgpPT57bGV0IGU9e2lkOmMsLi4udSYme3JvbGU6dX19O3JldHVyblwidG9vbHRpcFwiPT09dXx8XCJsYWJlbFwiPT09aT9lOnsuLi5lLC4uLlwibWVudVwiPT09dSYme1wiYXJpYS1sYWJlbGxlZGJ5XCI6c319fSxbdSxjLHMsaV0pLGg9Qy51c2VDYWxsYmFjaygoe2FjdGl2ZTplLHNlbGVjdGVkOm59KT0+e2xldCB0PXtyb2xlOlwib3B0aW9uXCIsLi4uZSYme2lkOmAke2N9LWZ1aS1vcHRpb25gfX07c3dpdGNoKGkpe2Nhc2VcInNlbGVjdFwiOnJldHVybnsuLi50LFwiYXJpYS1zZWxlY3RlZFwiOmUmJm59O2Nhc2VcImNvbWJvYm94XCI6cmV0dXJuey4uLnQsXCJhcmlhLXNlbGVjdGVkXCI6bn19cmV0dXJue319LFtjLGldKTtyZXR1cm4gQy51c2VNZW1vKCgpPT5hP3tyZWZlcmVuY2U6ZixmbG9hdGluZzpwLGl0ZW06aH06e30sW2EsZixwLGhdKX0oZXYse3JvbGU6XCJtZW51XCJ9KSxlTz1DLnVzZVJlZihbXSksZUM9Qy51c2VSZWYoW10pLGVTPW42KCksZUU9ZnVuY3Rpb24oZSxuKXtsZXR7b3Blbjp0LG9uT3BlbkNoYW5nZTpyLGVsZW1lbnRzOm8sZmxvYXRpbmdJZDphfT1lLHtsaXN0UmVmOmksYWN0aXZlSW5kZXg6bCxvbk5hdmlnYXRlOnM9KCk9Pnt9LGVuYWJsZWQ6Yz0hMCxzZWxlY3RlZEluZGV4OnU9bnVsbCxhbGxvd0VzY2FwZTpkPSExLGxvb3A6Zj0hMSxuZXN0ZWQ6cD0hMSxydGw6aD0hMSx2aXJ0dWFsOmc9ITEsZm9jdXNJdGVtT25PcGVuOm09XCJhdXRvXCIsZm9jdXNJdGVtT25Ib3Zlcjp2PSEwLG9wZW5PbkFycm93S2V5RG93bjpiPSEwLGRpc2FibGVkSW5kaWNlczp5LG9yaWVudGF0aW9uOng9XCJ2ZXJ0aWNhbFwiLHBhcmVudE9yaWVudGF0aW9uOncsY29sczpqPTEsc2Nyb2xsSXRlbUludG9WaWV3Oms9ITAsdmlydHVhbEl0ZW1SZWY6QSxpdGVtU2l6ZXM6TyxkZW5zZTpTPSExfT1uLEU9ZUEoZTAoby5mbG9hdGluZykpLF89cSgpLFA9VygpO0YoKCk9PntlLmRhdGFSZWYuY3VycmVudC5vcmllbnRhdGlvbj14fSxbZSx4XSk7bGV0IHo9ZUooby5kb21SZWZlcmVuY2UpLEw9Qy51c2VSZWYobSksUj1DLnVzZVJlZih1Pz8tMSksTj1DLnVzZVJlZihudWxsKSxEPUMudXNlUmVmKCEwKSxCPVQoKCk9PntzKC0xPT09Ui5jdXJyZW50P251bGw6Ui5jdXJyZW50KX0pLE09Qy51c2VSZWYoQiksST1DLnVzZVJlZighIW8uZmxvYXRpbmcpLEg9Qy51c2VSZWYodCksVT1DLnVzZVJlZighMSksVj1DLnVzZVJlZighMSksJD1lQSh5KSxaPWVBKHQpLFk9ZUEoayksWD1lQSh1KSxbSyxRXT1DLnVzZVN0YXRlKCksW0csSl09Qy51c2VTdGF0ZSgpLGVlPVQoKCk9PntmdW5jdGlvbiBlKGUpe2c/KGUuaWQ/LmVuZHNXaXRoKFwiLWZ1aS1vcHRpb25cIikmJihlLmlkPWAke2F9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc2xpY2UoMiwxMCl9YCksUShlLmlkKSxQPy5ldmVudHMuZW1pdChcInZpcnR1YWxmb2N1c1wiLGUpLEEmJihBLmN1cnJlbnQ9ZSkpOm5xKGUse3N5bmM6VS5jdXJyZW50LHByZXZlbnRTY3JvbGw6ITB9KX1sZXQgbj1pLmN1cnJlbnRbUi5jdXJyZW50XSx0PVYuY3VycmVudDtuJiZlKG4pLChVLmN1cnJlbnQ/ZT0+ZSgpOnJlcXVlc3RBbmltYXRpb25GcmFtZSkoKCk9PntsZXQgcj1pLmN1cnJlbnRbUi5jdXJyZW50XXx8bjtpZighcilyZXR1cm47bnx8ZShyKTtsZXQgbz1ZLmN1cnJlbnQ7byYmZXImJih0fHwhRC5jdXJyZW50KSYmci5zY3JvbGxJbnRvVmlldz8uKFwiYm9vbGVhblwiPT10eXBlb2Ygbz97YmxvY2s6XCJuZWFyZXN0XCIsaW5saW5lOlwibmVhcmVzdFwifTpvKX0pfSk7RigoKT0+e2MmJih0JiZvLmZsb2F0aW5nP0wuY3VycmVudCYmbnVsbCE9dSYmKFYuY3VycmVudD0hMCxSLmN1cnJlbnQ9dSxCKCkpOkkuY3VycmVudCYmKFIuY3VycmVudD0tMSxNLmN1cnJlbnQoKSkpfSxbYyx0LG8uZmxvYXRpbmcsdSxCXSksRigoKT0+e2lmKGMmJnQmJm8uZmxvYXRpbmcpaWYobnVsbD09bCl7aWYoVS5jdXJyZW50PSExLG51bGwhPVguY3VycmVudClyZXR1cm47aWYoSS5jdXJyZW50JiYoUi5jdXJyZW50PS0xLGVlKCkpLCghSC5jdXJyZW50fHwhSS5jdXJyZW50KSYmTC5jdXJyZW50JiYobnVsbCE9Ti5jdXJyZW50fHwhMD09PUwuY3VycmVudCYmbnVsbD09Ti5jdXJyZW50KSl7bGV0IGU9MCxuPSgpPT57bnVsbD09aS5jdXJyZW50WzBdPyhlPDImJihlP3JlcXVlc3RBbmltYXRpb25GcmFtZTpxdWV1ZU1pY3JvdGFzaykobiksZSs9MSk6KFIuY3VycmVudD1udWxsPT1OLmN1cnJlbnR8fG5aKE4uY3VycmVudCx4LGgpfHxwP25JKGksJC5jdXJyZW50KTpuSChpLCQuY3VycmVudCksTi5jdXJyZW50PW51bGwsQigpKX07bigpfX1lbHNlIG5NKGksbCl8fChSLmN1cnJlbnQ9bCxlZSgpLFYuY3VycmVudD0hMSl9LFtjLHQsby5mbG9hdGluZyxsLFgscCxpLHgsaCxCLGVlLCRdKSxGKCgpPT57aWYoIWN8fG8uZmxvYXRpbmd8fCFQfHxnfHwhSS5jdXJyZW50KXJldHVybjtsZXQgZT1QLm5vZGVzUmVmLmN1cnJlbnQsbj1lLmZpbmQoZT0+ZS5pZD09PV8pPy5jb250ZXh0Py5lbGVtZW50cy5mbG9hdGluZyx0PWVaKGVRKG8uZmxvYXRpbmcpKSxyPWUuc29tZShlPT5lLmNvbnRleHQmJmVZKGUuY29udGV4dC5lbGVtZW50cy5mbG9hdGluZyx0KSk7biYmIXImJkQuY3VycmVudCYmbi5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pfSxbYyxvLmZsb2F0aW5nLFAsXyxnXSksRigoKT0+e2lmKGMmJlAmJmcmJiFfKXJldHVybiBQLmV2ZW50cy5vbihcInZpcnR1YWxmb2N1c1wiLGUpLCgpPT57UC5ldmVudHMub2ZmKFwidmlydHVhbGZvY3VzXCIsZSl9O2Z1bmN0aW9uIGUoZSl7SihlLmlkKSxBJiYoQS5jdXJyZW50PWUpfX0sW2MsUCxnLF8sQV0pLEYoKCk9PntNLmN1cnJlbnQ9QixILmN1cnJlbnQ9dCxJLmN1cnJlbnQ9ISFvLmZsb2F0aW5nfSksRigoKT0+e3R8fChOLmN1cnJlbnQ9bnVsbCxMLmN1cnJlbnQ9bSl9LFt0LG1dKTtsZXQgZXQ9bnVsbCE9bCxlcj1DLnVzZU1lbW8oKCk9PntmdW5jdGlvbiBlKGUpe2lmKCFaLmN1cnJlbnQpcmV0dXJuO2xldCBuPWkuY3VycmVudC5pbmRleE9mKGUpOy0xIT09biYmUi5jdXJyZW50IT09biYmKFIuY3VycmVudD1uLEIoKSl9cmV0dXJue29uRm9jdXMoe2N1cnJlbnRUYXJnZXQ6bn0pe1UuY3VycmVudD0hMCxlKG4pfSxvbkNsaWNrOih7Y3VycmVudFRhcmdldDplfSk9PmUuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSxvbk1vdXNlTW92ZSh7Y3VycmVudFRhcmdldDpufSl7VS5jdXJyZW50PSEwLFYuY3VycmVudD0hMSx2JiZlKG4pfSxvblBvaW50ZXJMZWF2ZSh7cG9pbnRlclR5cGU6ZX0pe0QuY3VycmVudCYmXCJ0b3VjaFwiIT09ZSYmKFUuY3VycmVudD0hMCx2JiYoUi5jdXJyZW50PS0xLEIoKSxnfHxFLmN1cnJlbnQ/LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSkpKX19fSxbWixFLHYsaSxCLGddKSxlbz1DLnVzZUNhbGxiYWNrKCgpPT53Pz9QPy5ub2Rlc1JlZi5jdXJyZW50LmZpbmQoZT0+ZS5pZD09PV8pPy5jb250ZXh0Py5kYXRhUmVmPy5jdXJyZW50Lm9yaWVudGF0aW9uLFtfLFAsd10pLGVhPVQoZT0+e2lmKEQuY3VycmVudD0hMSxVLmN1cnJlbnQ9ITAsMjI5PT09ZS53aGljaHx8IVouY3VycmVudCYmZS5jdXJyZW50VGFyZ2V0PT09RS5jdXJyZW50KXJldHVybjtpZihwJiZuWChlLmtleSx4LGgsaikpe24kKGUua2V5LGVvKCkpfHxlRChlKSxyKCExLGUubmF0aXZlRXZlbnQsXCJsaXN0LW5hdmlnYXRpb25cIiksZW4oby5kb21SZWZlcmVuY2UpJiYoZz9QPy5ldmVudHMuZW1pdChcInZpcnR1YWxmb2N1c1wiLG8uZG9tUmVmZXJlbmNlKTpvLmRvbVJlZmVyZW5jZS5mb2N1cygpKTtyZXR1cm59bGV0IG49Ui5jdXJyZW50LGE9bkkoaSx5KSxsPW5IKGkseSk7aWYoenx8KFwiSG9tZVwiPT09ZS5rZXkmJihlRChlKSxSLmN1cnJlbnQ9YSxCKCkpLFwiRW5kXCI9PT1lLmtleSYmKGVEKGUpLFIuY3VycmVudD1sLEIoKSkpLGo+MSl7dmFyIHM7bGV0IG49T3x8QXJyYXkuZnJvbSh7bGVuZ3RoOmkuY3VycmVudC5sZW5ndGh9LCgpPT4oe3dpZHRoOjEsaGVpZ2h0OjF9KSksdD1mdW5jdGlvbihlLG4sdCl7bGV0IHI9W10sbz0wO3JldHVybiBlLmZvckVhY2goKHt3aWR0aDplLGhlaWdodDphfSxpKT0+e2xldCBsPSExO2Zvcih0JiYobz0wKTshbDspe2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8ZTtyKz0xKWZvcihsZXQgZT0wO2U8YTtlKz0xKXQucHVzaChvK3IrZSpuKTtvJW4rZTw9biYmdC5ldmVyeShlPT5udWxsPT1yW2VdKT8odC5mb3JFYWNoKGU9PntyW2VdPWl9KSxsPSEwKTpvKz0xfX0pLFsuLi5yXX0obixqLFMpLHI9dC5maW5kSW5kZXgoZT0+bnVsbCE9ZSYmIW5VKGksZSx5KSksbz10LnJlZHVjZSgoZSxuLHQpPT5udWxsPT1ufHxuVShpLG4seSk/ZTp0LC0xKSxjPXRbZnVuY3Rpb24oZSx7ZXZlbnQ6bixvcmllbnRhdGlvbjp0LGxvb3A6cixydGw6byxjb2xzOmEsZGlzYWJsZWRJbmRpY2VzOmksbWluSW5kZXg6bCxtYXhJbmRleDpzLHByZXZJbmRleDpjLHN0b3BFdmVudDp1PSExfSl7bGV0IGQ9YztpZihuLmtleT09PWVXKXtpZih1JiZlRChuKSwtMT09PWMpZD1zO2Vsc2UgaWYoZD1uRihlLHtzdGFydGluZ0luZGV4OmQsYW1vdW50OmEsZGVjcmVtZW50OiEwLGRpc2FibGVkSW5kaWNlczppfSksciYmKGMtYTxsfHxkPDApKXtsZXQgZT1jJWEsbj1zJWEsdD1zLShuLWUpO2Q9bj09PWU/czpuPmU/dDp0LWF9bk0oZSxkKSYmKGQ9Yyl9aWYobi5rZXk9PT1lJCYmKHUmJmVEKG4pLC0xPT09Yz9kPWw6KGQ9bkYoZSx7c3RhcnRpbmdJbmRleDpjLGFtb3VudDphLGRpc2FibGVkSW5kaWNlczppfSksciYmYythPnMmJihkPW5GKGUse3N0YXJ0aW5nSW5kZXg6YyVhLWEsYW1vdW50OmEsZGlzYWJsZWRJbmRpY2VzOml9KSkpLG5NKGUsZCkmJihkPWMpKSxcImJvdGhcIj09PXQpe2xldCB0PW5iKGMvYSk7bi5rZXk9PT0obz9lVjplcSkmJih1JiZlRChuKSxjJWEhPWEtMT8oZD1uRihlLHtzdGFydGluZ0luZGV4OmMsZGlzYWJsZWRJbmRpY2VzOml9KSxyJiZuQihkLGEsdCkmJihkPW5GKGUse3N0YXJ0aW5nSW5kZXg6Yy1jJWEtMSxkaXNhYmxlZEluZGljZXM6aX0pKSk6ciYmKGQ9bkYoZSx7c3RhcnRpbmdJbmRleDpjLWMlYS0xLGRpc2FibGVkSW5kaWNlczppfSkpLG5CKGQsYSx0KSYmKGQ9YykpLG4ua2V5PT09KG8/ZXE6ZVYpJiYodSYmZUQobiksYyVhIT0wPyhkPW5GKGUse3N0YXJ0aW5nSW5kZXg6YyxkZWNyZW1lbnQ6ITAsZGlzYWJsZWRJbmRpY2VzOml9KSxyJiZuQihkLGEsdCkmJihkPW5GKGUse3N0YXJ0aW5nSW5kZXg6YysoYS1jJWEpLGRlY3JlbWVudDohMCxkaXNhYmxlZEluZGljZXM6aX0pKSk6ciYmKGQ9bkYoZSx7c3RhcnRpbmdJbmRleDpjKyhhLWMlYSksZGVjcmVtZW50OiEwLGRpc2FibGVkSW5kaWNlczppfSkpLG5CKGQsYSx0KSYmKGQ9YykpO2xldCBsPW5iKHMvYSk9PT10O25NKGUsZCkmJihkPXImJmw/bi5rZXk9PT0obz9lcTplVik/czpuRihlLHtzdGFydGluZ0luZGV4OmMtYyVhLTEsZGlzYWJsZWRJbmRpY2VzOml9KTpjKX1yZXR1cm4gZH0oe2N1cnJlbnQ6dC5tYXAoZT0+bnVsbCE9ZT9pLmN1cnJlbnRbZV06bnVsbCl9LHtldmVudDplLG9yaWVudGF0aW9uOngsbG9vcDpmLHJ0bDpoLGNvbHM6aixkaXNhYmxlZEluZGljZXM6KHM9Wy4uLihcImZ1bmN0aW9uXCIhPXR5cGVvZiB5P3k6bnVsbCl8fGkuY3VycmVudC5tYXAoKGUsbik9Pm5VKGksbix5KT9uOnZvaWQgMCksdm9pZCAwXSx0LmZsYXRNYXAoKGUsbik9PnMuaW5jbHVkZXMoZSk/W25dOltdKSksbWluSW5kZXg6cixtYXhJbmRleDpvLHByZXZJbmRleDpmdW5jdGlvbihlLG4sdCxyLG8pe2lmKC0xPT09ZSlyZXR1cm4gLTE7bGV0IGE9dC5pbmRleE9mKGUpLGk9bltlXTtzd2l0Y2gobyl7Y2FzZVwidGxcIjpyZXR1cm4gYTtjYXNlXCJ0clwiOmlmKCFpKXJldHVybiBhO3JldHVybiBhK2kud2lkdGgtMTtjYXNlXCJibFwiOmlmKCFpKXJldHVybiBhO3JldHVybiBhKyhpLmhlaWdodC0xKSpyO2Nhc2VcImJyXCI6cmV0dXJuIHQubGFzdEluZGV4T2YoZSk7ZGVmYXVsdDpyZXR1cm4gLTF9fShSLmN1cnJlbnQ+bD9hOlIuY3VycmVudCxuLHQsaixlLmtleT09PWUkP1wiYmxcIjplLmtleT09PShoP2VWOmVxKT9cInRyXCI6XCJ0bFwiKSxzdG9wRXZlbnQ6ITB9KV07aWYobnVsbCE9YyYmKFIuY3VycmVudD1jLEIoKSksXCJib3RoXCI9PT14KXJldHVybn1pZihuJChlLmtleSx4KSl7aWYoZUQoZSksdCYmIWcmJmVaKGUuY3VycmVudFRhcmdldC5vd25lckRvY3VtZW50KT09PWUuY3VycmVudFRhcmdldCl7Ui5jdXJyZW50PW5aKGUua2V5LHgsaCk/YTpsLEIoKTtyZXR1cm59blooZS5rZXkseCxoKT9mP1IuY3VycmVudD1uPj1sP2QmJm4hPT1pLmN1cnJlbnQubGVuZ3RoPy0xOmE6bkYoaSx7c3RhcnRpbmdJbmRleDpuLGRpc2FibGVkSW5kaWNlczp5fSk6Ui5jdXJyZW50PU1hdGgubWluKGwsbkYoaSx7c3RhcnRpbmdJbmRleDpuLGRpc2FibGVkSW5kaWNlczp5fSkpOmY/Ui5jdXJyZW50PW48PWE/ZCYmLTEhPT1uP2kuY3VycmVudC5sZW5ndGg6bDpuRihpLHtzdGFydGluZ0luZGV4Om4sZGVjcmVtZW50OiEwLGRpc2FibGVkSW5kaWNlczp5fSk6Ui5jdXJyZW50PU1hdGgubWF4KGEsbkYoaSx7c3RhcnRpbmdJbmRleDpuLGRlY3JlbWVudDohMCxkaXNhYmxlZEluZGljZXM6eX0pKSxuTShpLFIuY3VycmVudCkmJihSLmN1cnJlbnQ9LTEpLEIoKX19KSxlaT1DLnVzZU1lbW8oKCk9PmcmJnQmJmV0JiZ7XCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjpHfHxLfSxbZyx0LGV0LEcsS10pLGVsPUMudXNlTWVtbygoKT0+KHtcImFyaWEtb3JpZW50YXRpb25cIjpcImJvdGhcIj09PXg/dm9pZCAwOngsLi4uIXo/ZWk6e30sb25LZXlEb3duOmVhLG9uUG9pbnRlck1vdmUoKXtELmN1cnJlbnQ9ITB9fSksW2VpLGVhLHgsel0pLGVzPUMudXNlTWVtbygoKT0+e2Z1bmN0aW9uIGUoZSl7XCJhdXRvXCI9PT1tJiZlQihlLm5hdGl2ZUV2ZW50KSYmKEwuY3VycmVudD0hMCl9ZnVuY3Rpb24gbihlKXtMLmN1cnJlbnQ9bSxcImF1dG9cIj09PW0mJmVNKGUubmF0aXZlRXZlbnQpJiYoTC5jdXJyZW50PSEwKX1yZXR1cm57Li4uZWksb25LZXlEb3duKGUpe0QuY3VycmVudD0hMTtsZXQgbj1lLmtleS5zdGFydHNXaXRoKFwiQXJyb3dcIiksbz1bXCJIb21lXCIsXCJFbmRcIl0uaW5jbHVkZXMoZS5rZXkpLGE9blkoZS5rZXkseCxoKSxsPW5YKGUua2V5LHgsaCxqKSxzPW5ZKGUua2V5LGVvKCksaCksYz1uJChlLmtleSx4KSxkPShwP3M6Yyl8fFwiRW50ZXJcIj09PWUua2V5fHxcIlwiPT09ZS5rZXkudHJpbSgpO2lmKGcmJnQpe3ZhciBmLG07bGV0IHQscixzPVA/Lm5vZGVzUmVmLmN1cnJlbnQuZmluZChlPT5udWxsPT1lLnBhcmVudElkKSx1PVAmJnM/KGY9UC5ub2Rlc1JlZi5jdXJyZW50LG09cy5pZCxyPS0xLCFmdW5jdGlvbiBlKG4sbyl7bz5yJiYodD1uLHI9byksZTYoZixuKS5mb3JFYWNoKG49PntlKG4uaWQsbysxKX0pfShtLDApLGYuZmluZChlPT5lLmlkPT09dCkpOm51bGw7aWYoKG58fG8pJiZ1JiZBKXtsZXQgbj1uZXcgS2V5Ym9hcmRFdmVudChcImtleWRvd25cIix7a2V5OmUua2V5LGJ1YmJsZXM6ITB9KTtpZihhfHxsKXtsZXQgdD11LmNvbnRleHQ/LmVsZW1lbnRzLmRvbVJlZmVyZW5jZT09PWUuY3VycmVudFRhcmdldCxyPWwmJiF0P3UuY29udGV4dD8uZWxlbWVudHMuZG9tUmVmZXJlbmNlOmE/aS5jdXJyZW50LmZpbmQoZT0+ZT8uaWQ9PT1LKTpudWxsO3ImJihlRChlKSxyLmRpc3BhdGNoRXZlbnQobiksSih2b2lkIDApKX1pZigoY3x8bykmJnUuY29udGV4dCYmdS5jb250ZXh0Lm9wZW4mJnUucGFyZW50SWQmJmUuY3VycmVudFRhcmdldCE9PXUuY29udGV4dC5lbGVtZW50cy5kb21SZWZlcmVuY2Upe2VEKGUpLHUuY29udGV4dC5lbGVtZW50cy5kb21SZWZlcmVuY2U/LmRpc3BhdGNoRXZlbnQobik7cmV0dXJufX1yZXR1cm4gZWEoZSl9aWYodHx8Ynx8IW4pe2lmKGQpe2xldCBuPW4kKGUua2V5LGVvKCkpO04uY3VycmVudD1wJiZuP251bGw6ZS5rZXl9aWYocCl7cyYmKGVEKGUpLHQ/KFIuY3VycmVudD1uSShpLCQuY3VycmVudCksQigpKTpyKCEwLGUubmF0aXZlRXZlbnQsXCJsaXN0LW5hdmlnYXRpb25cIikpO3JldHVybn1jJiYobnVsbCE9dSYmKFIuY3VycmVudD11KSxlRChlKSwhdCYmYj9yKCEwLGUubmF0aXZlRXZlbnQsXCJsaXN0LW5hdmlnYXRpb25cIik6ZWEoZSksdCYmQigpKX19LG9uRm9jdXMoKXt0JiYhZyYmKFIuY3VycmVudD0tMSxCKCkpfSxvblBvaW50ZXJEb3duOm4sb25Qb2ludGVyRW50ZXI6bixvbk1vdXNlRG93bjplLG9uQ2xpY2s6ZX19LFtLLGVpLGosZWEsJCxtLGkscCxCLHIsdCxiLHgsZW8saCx1LFAsZyxBXSk7cmV0dXJuIEMudXNlTWVtbygoKT0+Yz97cmVmZXJlbmNlOmVzLGZsb2F0aW5nOmVsLGl0ZW06ZXJ9Ont9LFtjLGVzLGVsLGVyXSl9KGV2LHtlbmFibGVkOiFjLGxpc3RSZWY6ZU8sYWN0aXZlSW5kZXg6UyxuZXN0ZWQ6dm9pZCAwIT09bi50eXBlLGxvb3A6ZCxvcmllbnRhdGlvbjpmLHBhcmVudE9yaWVudGF0aW9uOlwibWVudWJhclwiPT09bi50eXBlP24uY29udGV4dC5vcmllbnRhdGlvbjp2b2lkIDAscnRsOlwicnRsXCI9PT1lUyxkaXNhYmxlZEluZGljZXM6dGcsb25OYXZpZ2F0ZTpfLG9wZW5PbkFycm93S2V5RG93bjpcImNvbnRleHQtbWVudVwiIT09bi50eXBlfSksZV89Qy51c2VSZWYoITEpLGV6PWZ1bmN0aW9uKGUsbil7bGV0e29wZW46dCxkYXRhUmVmOnJ9PWUse2xpc3RSZWY6byxhY3RpdmVJbmRleDphLG9uTWF0Y2g6aSxvblR5cGluZ0NoYW5nZTpsLGVuYWJsZWQ6cz0hMCxmaW5kTWF0Y2g6Yz1udWxsLHJlc2V0TXM6dT03NTAsaWdub3JlS2V5czpkPVtdLHNlbGVjdGVkSW5kZXg6Zj1udWxsfT1uLHA9ZWsoKSxoPUMudXNlUmVmKFwiXCIpLGc9Qy51c2VSZWYoZj8/YT8/LTEpLG09Qy51c2VSZWYobnVsbCksdj1UKGkpLGI9VChsKSx5PWVBKGMpLHg9ZUEoZCk7RigoKT0+e3QmJihwLmNsZWFyKCksbS5jdXJyZW50PW51bGwsaC5jdXJyZW50PVwiXCIpfSxbdCxwXSksRigoKT0+e3QmJlwiXCI9PT1oLmN1cnJlbnQmJihnLmN1cnJlbnQ9Zj8/YT8/LTEpfSxbdCxmLGFdKTtsZXQgdz1UKGU9PntlP3IuY3VycmVudC50eXBpbmd8fChyLmN1cnJlbnQudHlwaW5nPWUsYihlKSk6ci5jdXJyZW50LnR5cGluZyYmKHIuY3VycmVudC50eXBpbmc9ZSxiKGUpKX0pLGo9VChlPT57ZnVuY3Rpb24gbihlLG4sdCl7bGV0IHI9eS5jdXJyZW50P3kuY3VycmVudChuLHQpOm4uZmluZChlPT5lPy50b0xvY2FsZUxvd2VyQ2FzZSgpLmluZGV4T2YodC50b0xvY2FsZUxvd2VyQ2FzZSgpKT09PTApO3JldHVybiByP2UuaW5kZXhPZihyKTotMX1sZXQgcj1vLmN1cnJlbnQ7aWYoaC5jdXJyZW50Lmxlbmd0aD4wJiZcIiBcIiE9PWguY3VycmVudFswXSYmKC0xPT09bihyLHIsaC5jdXJyZW50KT93KCExKTpcIiBcIj09PWUua2V5JiZlRChlKSksbnVsbD09cnx8eC5jdXJyZW50LmluY2x1ZGVzKGUua2V5KXx8MSE9PWUua2V5Lmxlbmd0aHx8ZS5jdHJsS2V5fHxlLm1ldGFLZXl8fGUuYWx0S2V5KXJldHVybjt0JiZcIiBcIiE9PWUua2V5JiYoZUQoZSksdyghMCkpLHIuZXZlcnkoZT0+IWV8fGVbMF0/LnRvTG9jYWxlTG93ZXJDYXNlKCkhPT1lWzFdPy50b0xvY2FsZUxvd2VyQ2FzZSgpKSYmaC5jdXJyZW50PT09ZS5rZXkmJihoLmN1cnJlbnQ9XCJcIixnLmN1cnJlbnQ9bS5jdXJyZW50KSxoLmN1cnJlbnQrPWUua2V5LHAuc3RhcnQodSwoKT0+e2guY3VycmVudD1cIlwiLGcuY3VycmVudD1tLmN1cnJlbnQsdyghMSl9KTtsZXQgYT1nLmN1cnJlbnQsaT1uKHIsWy4uLnIuc2xpY2UoKGF8fDApKzEpLC4uLnIuc2xpY2UoMCwoYXx8MCkrMSldLGguY3VycmVudCk7LTEhPT1pPyh2KGkpLG0uY3VycmVudD1pKTpcIiBcIiE9PWUua2V5JiYoaC5jdXJyZW50PVwiXCIsdyghMSkpfSksaz1DLnVzZU1lbW8oKCk9Pih7b25LZXlEb3duOmp9KSxbal0pLEE9Qy51c2VNZW1vKCgpPT4oe29uS2V5RG93bjpqLG9uS2V5VXAoZSl7XCIgXCI9PT1lLmtleSYmdyghMSl9fSksW2osd10pO3JldHVybiBDLnVzZU1lbW8oKCk9PnM/e3JlZmVyZW5jZTprLGZsb2F0aW5nOkF9Ont9LFtzLGssQV0pfShldix7bGlzdFJlZjplQyxhY3RpdmVJbmRleDpTLHJlc2V0TXM6NTAwLG9uTWF0Y2g6ZT0+e2VlJiZlIT09UyYmXyhlKX0sb25UeXBpbmdDaGFuZ2U6Qy51c2VDYWxsYmFjayhlPT57ZV8uY3VycmVudD1lfSxbXSl9KSx7Z2V0UmVmZXJlbmNlUHJvcHM6ZUwsZ2V0RmxvYXRpbmdQcm9wczplVCxnZXRJdGVtUHJvcHM6ZVJ9PW5LKFtlYixleCxldyxleSxlaixlRSxlel0pLGVOPWZ1bmN0aW9uKGUpe2xldHtlbmFibGVkOm49ITAsbW91c2VEb3duQWN0aW9uOnQsb3BlbjpyfT1lLG89Qy51c2VSZWYoITEpO3JldHVybiBDLnVzZU1lbW8oKCk9Pm4/e29uTW91c2VEb3duOmU9PnsoXCJvcGVuXCI9PT10JiYhcnx8XCJjbG9zZVwiPT09dCYmcikmJihvLmN1cnJlbnQ9ITAsZVEoZS5jdXJyZW50VGFyZ2V0KS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoKT0+e28uY3VycmVudD0hMX0se29uY2U6ITB9KSl9LG9uQ2xpY2s6ZT0+e28uY3VycmVudCYmKG8uY3VycmVudD0hMSxlLnByZXZlbnRCYXNlVUlIYW5kbGVyKCkpfX06bnIsW24sdCxyXSl9KHtvcGVuOmVlLGVuYWJsZWQ6XCJtZW51YmFyXCI9PT1uLnR5cGUsbW91c2VEb3duQWN0aW9uOlwib3BlblwifSksZUg9Qy51c2VNZW1vKCgpPT57bGV0IGU9dGMoZUwoKSx7b25Nb3VzZUVudGVyKCl7TyghMCl9LG9uTW91c2VNb3ZlKCl7RyghMCl9fSxlTik7cmV0dXJuIGRlbGV0ZSBlLnJvbGUsZX0sW2VMLGVOLEddKSxlRj1DLnVzZU1lbW8oKCk9PmVUKHtvbk1vdXNlRW50ZXIoKXtKJiZcIm1lbnVcIiE9PW4udHlwZXx8TyghMSl9LG9uTW91c2VNb3ZlKCl7RyghMCl9LG9uQ2xpY2soKXtKJiZPKCExKX19KSxbZVQsSixuLnR5cGUsR10pLGVVPUMudXNlTWVtbygoKT0+ZVIoKSxbZVJdKSxlWD1DLnVzZU1lbW8oKCk9Pih7YWN0aXZlSW5kZXg6UyxzZXRBY3RpdmVJbmRleDpfLGFsbG93TW91c2VVcFRyaWdnZXJSZWY6bi50eXBlP24uY29udGV4dC5hbGxvd01vdXNlVXBUcmlnZ2VyUmVmOnRtLGZsb2F0aW5nUm9vdENvbnRleHQ6ZXYsaXRlbVByb3BzOmVVLHBvcHVwUHJvcHM6ZUYsdHJpZ2dlclByb3BzOmVILGl0ZW1Eb21FbGVtZW50czplTyxpdGVtTGFiZWxzOmVDLG1vdW50ZWQ6ZWksb3BlbjplZSxwb3B1cFJlZjpNLHBvc2l0aW9uZXJSZWY6SSxzZXRPcGVuOmVtLHNldFBvc2l0aW9uZXJFbGVtZW50OmVhLHRyaWdnZXJFbGVtZW50OmIsc2V0VHJpZ2dlckVsZW1lbnQ6eSx0cmFuc2l0aW9uU3RhdHVzOmVzLGxhc3RPcGVuQ2hhbmdlUmVhc29uOlAsaW5zdGFudFR5cGU6aixvbk9wZW5DaGFuZ2VDb21wbGV0ZTppLHNldEhvdmVyRW5hYmxlZDpPLHR5cGluZ1JlZjplXyxtb2RhbDpLLGRpc2FibGVkOmMscGFyZW50Om4scm9vdElkOlgsYWxsb3dNb3VzZUVudGVyOlEsc2V0QWxsb3dNb3VzZUVudGVyOkd9KSxbUyxldixlVSxlRixlSCxlTyxlQyxlaSxlZSxJLGVtLGVzLGIsZWEsUCxqLGksSyxjLG4sWCxRLEddKSxlSz0oMCxsLmpzeCkobkouUHJvdmlkZXIse3ZhbHVlOmVYLGNoaWxkcmVuOnJ9KTtyZXR1cm4gdm9pZCAwPT09bi50eXBlfHxcImNvbnRleHQtbWVudVwiPT09bi50eXBlPygwLGwuanN4KShaLHtjaGlsZHJlbjplS30pOmVLfTtmdW5jdGlvbiB0YihlLG4sdCxyKXt2YXIgbyxhLGksbCxzO2xldCBjPVAodHkpLmN1cnJlbnQ7cmV0dXJuIG89YyxhPWUsaT1uLGw9dCxzPXIsKG8ucmVmc1swXSE9PWF8fG8ucmVmc1sxXSE9PWl8fG8ucmVmc1syXSE9PWx8fG8ucmVmc1szXSE9PXMpJiZ0eChjLFtlLG4sdCxyXSksYy5jYWxsYmFja31mdW5jdGlvbiB0eSgpe3JldHVybntjYWxsYmFjazpudWxsLGNsZWFudXA6bnVsbCxyZWZzOltdfX1mdW5jdGlvbiB0eChlLG4pe2lmKGUucmVmcz1uLG4uZXZlcnkoZT0+bnVsbD09ZSkpe2UuY2FsbGJhY2s9bnVsbDtyZXR1cm59ZS5jYWxsYmFjaz10PT57aWYoZS5jbGVhbnVwJiYoZS5jbGVhbnVwKCksZS5jbGVhbnVwPW51bGwpLG51bGwhPXQpe2xldCByPUFycmF5KG4ubGVuZ3RoKS5maWxsKG51bGwpO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSs9MSl7bGV0IG89bltlXTtpZihudWxsIT1vKXN3aXRjaCh0eXBlb2Ygbyl7Y2FzZVwiZnVuY3Rpb25cIjp7bGV0IG49byh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiYocltlXT1uKTticmVha31jYXNlXCJvYmplY3RcIjpvLmN1cnJlbnQ9dH19ZS5jbGVhbnVwPSgpPT57Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKz0xKXtsZXQgdD1uW2VdO2lmKG51bGwhPXQpc3dpdGNoKHR5cGVvZiB0KXtjYXNlXCJmdW5jdGlvblwiOntsZXQgbj1yW2VdO1wiZnVuY3Rpb25cIj09dHlwZW9mIG4/bigpOnQobnVsbCk7YnJlYWt9Y2FzZVwib2JqZWN0XCI6dC5jdXJyZW50PW51bGx9fX19fX1sZXQgdHc9cGFyc2VJbnQoQy52ZXJzaW9uLDEwKTtmdW5jdGlvbiB0aihlLG4sdD17fSl7bGV0IHI9bi5yZW5kZXIsbz1mdW5jdGlvbihlLG49e30pe2xldCB0LHtjbGFzc05hbWU6cixyZW5kZXI6b309ZSx7c3RhdGU6YT1ucixyZWY6aSxwcm9wczpsLGRpc2FibGVTdHlsZUhvb2tzOnMsY3VzdG9tU3R5bGVIb29rTWFwcGluZzpjLGVuYWJsZWQ6dT0hMH09bixkPXU/XCJmdW5jdGlvblwiPT10eXBlb2Ygcj9yKGEpOnI6dm9pZCAwOyEwIT09cyYmKHQ9Qy51c2VNZW1vKCgpPT51P2Z1bmN0aW9uKGUsbil7bGV0IHQ9e307Zm9yKGxldCByIGluIGUpe2xldCBvPWVbcl07aWYobj8uaGFzT3duUHJvcGVydHkocikpe2xldCBlPW5bcl0obyk7bnVsbCE9ZSYmT2JqZWN0LmFzc2lnbih0LGUpO2NvbnRpbnVlfSEwPT09bz90W2BkYXRhLSR7ci50b0xvd2VyQ2FzZSgpfWBdPVwiXCI6byYmKHRbYGRhdGEtJHtyLnRvTG93ZXJDYXNlKCl9YF09by50b1N0cmluZygpKX1yZXR1cm4gdH0oYSxjKTpucixbYSxjLHVdKSk7bGV0IGY9dT90bCh0LEFycmF5LmlzQXJyYXkobCk/ZnVuY3Rpb24oZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiB0cztpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHRmKGVbMF0sdHMpO2xldCBuPXsuLi50ZihlWzBdLHRzKX07Zm9yKGxldCB0PTE7dDxlLmxlbmd0aDt0Kz0xKW49dHUobixlW3RdKTtyZXR1cm4gbn0obCk6bCk/P25yOm5yO3JldHVybihcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQmJih1P0FycmF5LmlzQXJyYXkoaSk/Zi5yZWY9ZnVuY3Rpb24oZSl7dmFyIG4sdDtsZXQgcj1QKHR5KS5jdXJyZW50O3JldHVybiBuPXIsdD1lLChuLnJlZnMubGVuZ3RoIT09dC5sZW5ndGh8fG4ucmVmcy5zb21lKChlLG4pPT5lIT09dFtuXSkpJiZ0eChyLGUpLHIuY2FsbGJhY2t9KFtmLnJlZix0ayhvKSwuLi5pXSk6Zi5yZWY9dGIoZi5yZWYsdGsobyksaSk6dGIobnVsbCxudWxsKSksdSk/KHZvaWQgMCE9PWQmJihmLmNsYXNzTmFtZT10aChmLmNsYXNzTmFtZSxkKSksZik6bnJ9KG4sdCk7cmV0dXJuITE9PT10LmVuYWJsZWQ/bnVsbDpmdW5jdGlvbihlLG4sdCxyKXtpZihuKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXJldHVybiBuKHQscik7bGV0IGU9dGModCxuLnByb3BzKTtyZXR1cm4gZS5yZWY9dC5yZWYsQy5jbG9uZUVsZW1lbnQobixlKX1pZihlJiZcInN0cmluZ1wiPT10eXBlb2YgZSl7dmFyIG8sYTtyZXR1cm4gbz1lLGE9dCxcImJ1dHRvblwiPT09bz8oMCxsLmpzeCkoXCJidXR0b25cIix7dHlwZTpcImJ1dHRvblwiLC4uLmF9KTpcImltZ1wiPT09bz8oMCxsLmpzeCkoXCJpbWdcIix7YWx0OlwiXCIsLi4uYX0pOkMuY3JlYXRlRWxlbWVudChvLGEpfXRocm93IEVycm9yKFwiQmFzZSBVSTogUmVuZGVyIGVsZW1lbnQgb3IgZnVuY3Rpb24gYXJlIG5vdCBkZWZpbmVkLlwiKX0oZSxyLG8sdC5zdGF0ZT8/bnIpfWZ1bmN0aW9uIHRrKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3R3Pj0xOT9lLnByb3BzLnJlZjplLnJlZjpudWxsfWxldCB0QT1DLmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiB0TyhlPSExKXtsZXQgbj1DLnVzZUNvbnRleHQodEEpO2lmKHZvaWQgMD09PW4mJiFlKXRocm93IEVycm9yKFwiQmFzZSBVSTogQ29tcG9zaXRlUm9vdENvbnRleHQgaXMgbWlzc2luZy4gQ29tcG9zaXRlIHBhcnRzIG11c3QgYmUgcGxhY2VkIHdpdGhpbiA8Q29tcG9zaXRlLlJvb3Q+LlwiKTtyZXR1cm4gbn1sZXQgdEM9Qy5jcmVhdGVDb250ZXh0KHtyZWdpc3RlcjooKT0+e30sdW5yZWdpc3RlcjooKT0+e30sc3Vic2NyaWJlTWFwQ2hhbmdlOigpPT4oKT0+e30sZWxlbWVudHNSZWY6e2N1cnJlbnQ6W119LG5leHRJbmRleFJlZjp7Y3VycmVudDowfX0pLHRTPSgocj17fSlbci5Ob25lPTBdPVwiTm9uZVwiLHJbci5HdWVzc0Zyb21PcmRlcj0xXT1cIkd1ZXNzRnJvbU9yZGVyXCIscik7ZnVuY3Rpb24gdEUoZT17fSl7bGV0e2xhYmVsOm4sbWV0YWRhdGE6dCx0ZXh0UmVmOnIsaW5kZXhHdWVzc0JlaGF2aW9yOm99PWUse3JlZ2lzdGVyOmEsdW5yZWdpc3RlcjppLHN1YnNjcmliZU1hcENoYW5nZTpsLGVsZW1lbnRzUmVmOnMsbGFiZWxzUmVmOmMsbmV4dEluZGV4UmVmOnV9PUMudXNlQ29udGV4dCh0QyksZD1DLnVzZVJlZigtMSksW2YscF09Qy51c2VTdGF0ZShvPT09dFMuR3Vlc3NGcm9tT3JkZXI/KCk9PntpZigtMT09PWQuY3VycmVudCl7bGV0IGU9dS5jdXJyZW50O3UuY3VycmVudCs9MSxkLmN1cnJlbnQ9ZX1yZXR1cm4gZC5jdXJyZW50fTotMSksaD1DLnVzZVJlZihudWxsKSxnPUMudXNlQ2FsbGJhY2soZT0+e2lmKGguY3VycmVudD1lLC0xIT09ZiYmbnVsbCE9PWUmJihzLmN1cnJlbnRbZl09ZSxjKSl7bGV0IHQ9dm9pZCAwIT09bjtjLmN1cnJlbnRbZl09dD9uOnI/LmN1cnJlbnQ/LnRleHRDb250ZW50Pz9lLnRleHRDb250ZW50fX0sW2YscyxjLG4scl0pO3JldHVybiBGKCgpPT57bGV0IGU9aC5jdXJyZW50O2lmKGUpcmV0dXJuIGEoZSx0KSwoKT0+e2koZSl9fSxbYSxpLHRdKSxGKCgpPT5sKGU9PntsZXQgbj1oLmN1cnJlbnQ/ZS5nZXQoaC5jdXJyZW50KT8uaW5kZXg6bnVsbDtudWxsIT1uJiZwKG4pfSksW2wscF0pLEMudXNlTWVtbygoKT0+KHtyZWY6ZyxpbmRleDpmfSksW2YsZ10pfWZ1bmN0aW9uIHRfKGUpe2xldHtyZW5kZXI6bixjbGFzc05hbWU6dCxpdGVtUmVmOnI9bnVsbCxtZXRhZGF0YTpvLC4uLmF9PWUse3Byb3BzOmkscmVmOmx9PWZ1bmN0aW9uKGU9e30pe2xldHtoaWdobGlnaHRlZEluZGV4Om4sb25IaWdobGlnaHRlZEluZGV4Q2hhbmdlOnQsaGlnaGxpZ2h0SXRlbU9uSG92ZXI6cn09dE8oKSx7cmVmOm8saW5kZXg6YX09dEUoZSksaT1uPT09YSxsPUMudXNlUmVmKG51bGwpLHM9dGIobyxsKSxjPUMudXNlTWVtbygoKT0+KHt0YWJJbmRleDppPzA6LTEsb25Gb2N1cygpe3QoYSl9LG9uTW91c2VNb3ZlKCl7bGV0IGU9bC5jdXJyZW50O2lmKCFyfHwhZSlyZXR1cm47bGV0IG49ZS5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKXx8XCJ0cnVlXCI9PT1lLmFyaWFEaXNhYmxlZDtpfHxufHxlLmZvY3VzKCl9fSksW2EsaSx0LHJdKTtyZXR1cm4gQy51c2VNZW1vKCgpPT4oe3Byb3BzOmMscmVmOnMsaW5kZXg6YX0pLFtjLGEsc10pfSh7bWV0YWRhdGE6b30pO3JldHVybiB0aihcImRpdlwiLGUse3JlZjpbcixsXSxwcm9wczpbaSxhXX0pfWxldCB0UD0oKG89e30pLnN0YXJ0aW5nU3R5bGU9XCJkYXRhLXN0YXJ0aW5nLXN0eWxlXCIsby5lbmRpbmdTdHlsZT1cImRhdGEtZW5kaW5nLXN0eWxlXCIsbyksdHo9e1t0UC5zdGFydGluZ1N0eWxlXTpcIlwifSx0TD17W3RQLmVuZGluZ1N0eWxlXTpcIlwifSx0VD17dHJhbnNpdGlvblN0YXR1czplPT5cInN0YXJ0aW5nXCI9PT1lP3R6OlwiZW5kaW5nXCI9PT1lP3RMOm51bGx9LHRSPSgoYT17fSkub3Blbj1cImRhdGEtb3BlblwiLGEuY2xvc2VkPVwiZGF0YS1jbG9zZWRcIixhW2Euc3RhcnRpbmdTdHlsZT10UC5zdGFydGluZ1N0eWxlXT1cInN0YXJ0aW5nU3R5bGVcIixhW2EuZW5kaW5nU3R5bGU9dFAuZW5kaW5nU3R5bGVdPVwiZW5kaW5nU3R5bGVcIixhLmFuY2hvckhpZGRlbj1cImRhdGEtYW5jaG9yLWhpZGRlblwiLGEpLHROPSgoaT17fSkucG9wdXBPcGVuPVwiZGF0YS1wb3B1cC1vcGVuXCIsaS5wcmVzc2VkPVwiZGF0YS1wcmVzc2VkXCIsaSksdEQ9e1t0Ti5wb3B1cE9wZW5dOlwiXCJ9LHRCPXtbdE4ucG9wdXBPcGVuXTpcIlwiLFt0Ti5wcmVzc2VkXTpcIlwifSx0TT17W3RSLm9wZW5dOlwiXCJ9LHRJPXtbdFIuY2xvc2VkXTpcIlwifSx0SD17W3RSLmFuY2hvckhpZGRlbl06XCJcIn0sdEY9e29wZW46ZT0+ZT90RDpudWxsfSx0VT17b3BlbjplPT5lP3RCOm51bGx9LHRWPXtvcGVuOmU9PmU/dE06dEksYW5jaG9ySGlkZGVuOmU9PmU/dEg6bnVsbH07ZnVuY3Rpb24gdHEoZT17fSl7bGV0e2Rpc2FibGVkOm49ITEsZm9jdXNhYmxlV2hlbkRpc2FibGVkOnQsdGFiSW5kZXg6cj0wLG5hdGl2ZTpvPSEwfT1lLGE9Qy51c2VSZWYobnVsbCksaT12b2lkIDAhPT10TyghMCksbD1UKCgpPT57bGV0IGU9YS5jdXJyZW50O3JldHVybiEhKGU/LnRhZ05hbWU9PT1cIkFcIiYmZT8uaHJlZil9KSx7cHJvcHM6c309ZnVuY3Rpb24oZSl7bGV0e2ZvY3VzYWJsZVdoZW5EaXNhYmxlZDpuLGRpc2FibGVkOnQsY29tcG9zaXRlOnI9ITEsdGFiSW5kZXg6bz0wLGlzTmF0aXZlQnV0dG9uOmF9PWUsaT1yJiYhMSE9PW4sbD1yJiYhMT09PW47cmV0dXJue3Byb3BzOkMudXNlTWVtbygoKT0+e2xldCBlPXtvbktleURvd24oZSl7dCYmbiYmXCJUYWJcIiE9PWUua2V5JiZlLnByZXZlbnREZWZhdWx0KCl9fTtyZXR1cm4gcnx8KGUudGFiSW5kZXg9bywhYSYmdCYmKGUudGFiSW5kZXg9bj9vOi0xKSksKGEmJihufHxpKXx8IWEmJnQpJiYoZVtcImFyaWEtZGlzYWJsZWRcIl09dCksYSYmKCFufHxsKSYmKGUuZGlzYWJsZWQ9dCksZX0sW3IsdCxuLGksbCxhLG9dKX19KHtmb2N1c2FibGVXaGVuRGlzYWJsZWQ6dCxkaXNhYmxlZDpuLGNvbXBvc2l0ZTppLHRhYkluZGV4OnIsaXNOYXRpdmVCdXR0b246b30pO3JldHVybiBGKCgpPT57bGV0IGU9YS5jdXJyZW50O2UgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCYmaSYmbiYmdm9pZCAwPT09cy5kaXNhYmxlZCYmZS5kaXNhYmxlZCYmKGUuZGlzYWJsZWQ9ITEpfSxbbixzLmRpc2FibGVkLGldKSx7Z2V0QnV0dG9uUHJvcHM6Qy51c2VDYWxsYmFjaygoZT17fSk9PntsZXR7b25DbGljazp0LG9uTW91c2VEb3duOnIsb25LZXlVcDphLG9uS2V5RG93bjppLG9uUG9pbnRlckRvd246YywuLi51fT1lO3JldHVybiB0Yyh7dHlwZTpvP1wiYnV0dG9uXCI6dm9pZCAwLG9uQ2xpY2soZSl7aWYobilyZXR1cm4gdm9pZCBlLnByZXZlbnREZWZhdWx0KCk7dD8uKGUpfSxvbk1vdXNlRG93bihlKXtufHxyPy4oZSl9LG9uS2V5RG93bihlKXtufHwodHAoZSksaT8uKGUpKSwhZS5iYXNlVUlIYW5kbGVyUHJldmVudGVkJiYoZS50YXJnZXQhPT1lLmN1cnJlbnRUYXJnZXR8fG98fGwoKXx8XCJFbnRlclwiIT09ZS5rZXl8fG58fCh0Py4oZSksZS5wcmV2ZW50RGVmYXVsdCgpKSl9LG9uS2V5VXAoZSl7bnx8KHRwKGUpLGE/LihlKSksIWUuYmFzZVVJSGFuZGxlclByZXZlbnRlZCYmKGUudGFyZ2V0IT09ZS5jdXJyZW50VGFyZ2V0fHxvfHxufHxcIiBcIiE9PWUua2V5fHx0Py4oZSkpfSxvblBvaW50ZXJEb3duKGUpe2lmKG4pcmV0dXJuIHZvaWQgZS5wcmV2ZW50RGVmYXVsdCgpO2M/LihlKX19LG8/dm9pZCAwOntyb2xlOlwiYnV0dG9uXCJ9LHMsdSl9LFtuLHMsbyxsXSksYnV0dG9uUmVmOmF9fWxldCB0Vz1DLmZvcndhcmRSZWYoZnVuY3Rpb24oZSxuKXtsZXR7cmVuZGVyOnQsY2xhc3NOYW1lOnIsZGlzYWJsZWQ6bz0hMSxuYXRpdmVCdXR0b246YT0hMCwuLi5pfT1lLHt0cmlnZ2VyUHJvcHM6cyxkaXNhYmxlZDpjLHNldFRyaWdnZXJFbGVtZW50OnUsb3BlbjpkLGFsbG93TW91c2VVcFRyaWdnZXJSZWY6Zixwb3NpdGlvbmVyUmVmOnAscGFyZW50OmgsbGFzdE9wZW5DaGFuZ2VSZWFzb246Zyxyb290SWQ6bX09bjAoKSx2PW98fGMsYj1DLnVzZVJlZihudWxsKSx5PWVrKCkse2dldEJ1dHRvblByb3BzOngsYnV0dG9uUmVmOnd9PXRxKHtkaXNhYmxlZDp2LG5hdGl2ZTphfSksaj10Yih3LHUpLHtldmVudHM6a309VygpO0MudXNlRWZmZWN0KCgpPT57ZHx8dm9pZCAwIT09aC50eXBlfHwoZi5jdXJyZW50PSExKX0sW2YsZCxoLnR5cGVdKTtsZXQgQT1UKGU9PntpZighYi5jdXJyZW50KXJldHVybjt5LmNsZWFyKCksZi5jdXJyZW50PSExO2xldCBuPWUudGFyZ2V0O2lmKGVZKGIuY3VycmVudCxuKXx8ZVkocC5jdXJyZW50LG4pfHxuPT09Yi5jdXJyZW50fHxudWxsIT1uJiZmdW5jdGlvbiBlKG4pe3JldHVybiBlbihuKSYmbi5oYXNBdHRyaWJ1dGUoXCJkYXRhLXJvb3Rvd25lcmlkXCIpP24uZ2V0QXR0cmlidXRlKFwiZGF0YS1yb290b3duZXJpZFwiKT8/dm9pZCAwOmVoKG4pP3ZvaWQgMDplKGV2KG4pKX0obik9PT1tKXJldHVybjtsZXQgdD1mdW5jdGlvbihlKXtsZXQgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSxcIjo6YmVmb3JlXCIpLHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSxcIjo6YWZ0ZXJcIik7aWYoXCJub25lXCI9PT10LmNvbnRlbnQmJlwibm9uZVwiPT09ci5jb250ZW50KXJldHVybiBuO2xldCBvPXBhcnNlRmxvYXQodC53aWR0aCl8fDAsYT1wYXJzZUZsb2F0KHQuaGVpZ2h0KXx8MCxpPXBhcnNlRmxvYXQoci53aWR0aCl8fDAsbD1wYXJzZUZsb2F0KHIuaGVpZ2h0KXx8MCxzPU1hdGgubWF4KG4ud2lkdGgsbyxpKSxjPU1hdGgubWF4KG4uaGVpZ2h0LGEsbCksdT1zLW4ud2lkdGgsZD1jLW4uaGVpZ2h0O3JldHVybntsZWZ0Om4ubGVmdC11LzIscmlnaHQ6bi5yaWdodCt1LzIsdG9wOm4udG9wLWQvMixib3R0b206bi5ib3R0b20rZC8yfX0oYi5jdXJyZW50KTtlLmNsaWVudFg+PXQubGVmdC0yJiZlLmNsaWVudFg8PXQucmlnaHQrMiYmZS5jbGllbnRZPj10LnRvcC0yJiZlLmNsaWVudFk8PXQuYm90dG9tKzJ8fGsuZW1pdChcImNsb3NlXCIse2RvbUV2ZW50OmUscmVhc29uOlwiY2FuY2VsLW9wZW5cIn0pfSk7Qy51c2VFZmZlY3QoKCk9PntkJiZcInRyaWdnZXItaG92ZXJcIj09PWcmJmVRKGIuY3VycmVudCkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixBLHtvbmNlOiEwfSl9LFtkLEEsZ10pO2xldCBPPUMudXNlQ2FsbGJhY2soZT0+dGMoe1wiYXJpYS1oYXNwb3B1cFwiOlwibWVudVwiLHJlZjpqLG9uTW91c2VEb3duOmU9PntkfHwoeS5zdGFydCgyMDAsKCk9PntmLmN1cnJlbnQ9ITB9KSxlUShlLmN1cnJlbnRUYXJnZXQpLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsQSx7b25jZTohMH0pKX19LGUseCksW3gsaixkLGYseSxBXSksUz10aihcImJ1dHRvblwiLGUse3N0YXRlOkMudXNlTWVtbygoKT0+KHtkaXNhYmxlZDp2LG9wZW46ZH0pLFt2LGRdKSxjdXN0b21TdHlsZUhvb2tNYXBwaW5nOnRVLHJlZjpbYixuLHddLHByb3BzOltzLGksT119KTtyZXR1cm5cIm1lbnViYXJcIj09PWgudHlwZT8oMCxsLmpzeCkodF8se3JlbmRlcjpTfSk6U30pLHQkPXtjbGlwOlwicmVjdCgwIDAgMCAwKVwiLG92ZXJmbG93OlwiaGlkZGVuXCIsd2hpdGVTcGFjZTpcIm5vd3JhcFwiLHBvc2l0aW9uOlwiZml4ZWRcIix0b3A6MCxsZWZ0OjAsYm9yZGVyOjAscGFkZGluZzowLHdpZHRoOjEsaGVpZ2h0OjEsbWFyZ2luOi0xfSx0Wj1DLmZvcndhcmRSZWYoZnVuY3Rpb24oZSxuKXtsZXRbdCxyXT1DLnVzZVN0YXRlKCk7cmV0dXJuIEYoKCk9PntlTCYmcihcImJ1dHRvblwiKX0sW10pLCgwLGwuanN4KShcInNwYW5cIix7Li4uZSxyZWY6bix0YWJJbmRleDowLHJvbGU6dCxcImFyaWEtaGlkZGVuXCI6IXR8fHZvaWQgMCxzdHlsZTp0JCxcImRhdGEtYmFzZS11aS1mb2N1cy1ndWFyZFwiOlwiXCJ9KX0pO3ZhciB0WT0naW5wdXQ6bm90KFtpbmVydF0pLHNlbGVjdDpub3QoW2luZXJ0XSksdGV4dGFyZWE6bm90KFtpbmVydF0pLGFbaHJlZl06bm90KFtpbmVydF0pLGJ1dHRvbjpub3QoW2luZXJ0XSksW3RhYmluZGV4XTpub3Qoc2xvdCk6bm90KFtpbmVydF0pLGF1ZGlvW2NvbnRyb2xzXTpub3QoW2luZXJ0XSksdmlkZW9bY29udHJvbHNdOm5vdChbaW5lcnRdKSxbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdKTpub3QoW2luZXJ0XSksZGV0YWlscz5zdW1tYXJ5OmZpcnN0LW9mLXR5cGU6bm90KFtpbmVydF0pLGRldGFpbHM6bm90KFtpbmVydF0pJyx0WD1cInVuZGVmaW5lZFwiPT10eXBlb2YgRWxlbWVudCx0Sz10WD9mdW5jdGlvbigpe306RWxlbWVudC5wcm90b3R5cGUubWF0Y2hlc3x8RWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3J8fEVsZW1lbnQucHJvdG90eXBlLndlYmtpdE1hdGNoZXNTZWxlY3Rvcix0UT0hdFgmJkVsZW1lbnQucHJvdG90eXBlLmdldFJvb3ROb2RlP2Z1bmN0aW9uKGUpe3ZhciBuO3JldHVybiBudWxsPT1lfHxudWxsPT0obj1lLmdldFJvb3ROb2RlKT92b2lkIDA6bi5jYWxsKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZS5vd25lckRvY3VtZW50fSx0Rz1mdW5jdGlvbiBlKG4sdCl7dm9pZCAwPT09dCYmKHQ9ITApO3ZhciByLG89bnVsbD09bnx8bnVsbD09KHI9bi5nZXRBdHRyaWJ1dGUpP3ZvaWQgMDpyLmNhbGwobixcImluZXJ0XCIpO3JldHVyblwiXCI9PT1vfHxcInRydWVcIj09PW98fHQmJm4mJmUobi5wYXJlbnROb2RlKX0sdEo9ZnVuY3Rpb24oZSl7dmFyIG4sdD1udWxsPT1lfHxudWxsPT0obj1lLmdldEF0dHJpYnV0ZSk/dm9pZCAwOm4uY2FsbChlLFwiY29udGVudGVkaXRhYmxlXCIpO3JldHVyblwiXCI9PT10fHxcInRydWVcIj09PXR9LHQwPWZ1bmN0aW9uKGUsbix0KXtpZih0RyhlKSlyZXR1cm5bXTt2YXIgcj1BcnJheS5wcm90b3R5cGUuc2xpY2UuYXBwbHkoZS5xdWVyeVNlbGVjdG9yQWxsKHRZKSk7cmV0dXJuIG4mJnRLLmNhbGwoZSx0WSkmJnIudW5zaGlmdChlKSxyPXIuZmlsdGVyKHQpfSx0MT1mdW5jdGlvbiBlKG4sdCxyKXtmb3IodmFyIG89W10sYT1BcnJheS5mcm9tKG4pO2EubGVuZ3RoOyl7dmFyIGk9YS5zaGlmdCgpO2lmKCF0RyhpLCExKSlpZihcIlNMT1RcIj09PWkudGFnTmFtZSl7dmFyIGw9aS5hc3NpZ25lZEVsZW1lbnRzKCkscz1lKGwubGVuZ3RoP2w6aS5jaGlsZHJlbiwhMCxyKTtyLmZsYXR0ZW4/by5wdXNoLmFwcGx5KG8scyk6by5wdXNoKHtzY29wZVBhcmVudDppLGNhbmRpZGF0ZXM6c30pfWVsc2V7dEsuY2FsbChpLHRZKSYmci5maWx0ZXIoaSkmJih0fHwhbi5pbmNsdWRlcyhpKSkmJm8ucHVzaChpKTt2YXIgYz1pLnNoYWRvd1Jvb3R8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHIuZ2V0U2hhZG93Um9vdCYmci5nZXRTaGFkb3dSb290KGkpLHU9IXRHKGMsITEpJiYoIXIuc2hhZG93Um9vdEZpbHRlcnx8ci5zaGFkb3dSb290RmlsdGVyKGkpKTtpZihjJiZ1KXt2YXIgZD1lKCEwPT09Yz9pLmNoaWxkcmVuOmMuY2hpbGRyZW4sITAscik7ci5mbGF0dGVuP28ucHVzaC5hcHBseShvLGQpOm8ucHVzaCh7c2NvcGVQYXJlbnQ6aSxjYW5kaWRhdGVzOmR9KX1lbHNlIGEudW5zaGlmdC5hcHBseShhLGkuY2hpbGRyZW4pfX1yZXR1cm4gb30sdDI9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzTmFOKHBhcnNlSW50KGUuZ2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiksMTApKX0sdDQ9ZnVuY3Rpb24oZSl7aWYoIWUpdGhyb3cgRXJyb3IoXCJObyBub2RlIHByb3ZpZGVkXCIpO3JldHVybiBlLnRhYkluZGV4PDAmJigvXihBVURJT3xWSURFT3xERVRBSUxTKSQvLnRlc3QoZS50YWdOYW1lKXx8dEooZSkpJiYhdDIoZSk/MDplLnRhYkluZGV4fSx0NT1mdW5jdGlvbihlLG4pe3ZhciB0PXQ0KGUpO3JldHVybiB0PDAmJm4mJiF0MihlKT8wOnR9LHQzPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGUudGFiSW5kZXg9PT1uLnRhYkluZGV4P2UuZG9jdW1lbnRPcmRlci1uLmRvY3VtZW50T3JkZXI6ZS50YWJJbmRleC1uLnRhYkluZGV4fSx0Nj1mdW5jdGlvbihlKXtyZXR1cm5cIklOUFVUXCI9PT1lLnRhZ05hbWV9LHQ5PWZ1bmN0aW9uKGUsbil7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspaWYoZVt0XS5jaGVja2VkJiZlW3RdLmZvcm09PT1uKXJldHVybiBlW3RdfSx0OD1mdW5jdGlvbihlKXtpZighZS5uYW1lKXJldHVybiEwO3ZhciBuLHQ9ZS5mb3JtfHx0UShlKSxyPWZ1bmN0aW9uKGUpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXVtuYW1lPVwiJytlKydcIl0nKX07aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmdm9pZCAwIT09d2luZG93LkNTUyYmXCJmdW5jdGlvblwiPT10eXBlb2Ygd2luZG93LkNTUy5lc2NhcGUpbj1yKHdpbmRvdy5DU1MuZXNjYXBlKGUubmFtZSkpO2Vsc2UgdHJ5e249cihlLm5hbWUpfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLmVycm9yKFwiTG9va3MgbGlrZSB5b3UgaGF2ZSBhIHJhZGlvIGJ1dHRvbiB3aXRoIGEgbmFtZSBhdHRyaWJ1dGUgY29udGFpbmluZyBpbnZhbGlkIENTUyBzZWxlY3RvciBjaGFyYWN0ZXJzIGFuZCBuZWVkIHRoZSBDU1MuZXNjYXBlIHBvbHlmaWxsOiAlc1wiLGUubWVzc2FnZSksITF9dmFyIG89dDkobixlLmZvcm0pO3JldHVybiFvfHxvPT09ZX0sdDc9ZnVuY3Rpb24oZSl7cmV0dXJuIHQ2KGUpJiZcInJhZGlvXCI9PT1lLnR5cGUmJiF0OChlKX0scmU9ZnVuY3Rpb24oZSl7dmFyIG4sdCxyLG8sYSxpLGwscz1lJiZ0UShlKSxjPW51bGw9PShuPXMpP3ZvaWQgMDpuLmhvc3QsdT0hMTtpZihzJiZzIT09ZSlmb3IodT0hIShudWxsIT0odD1jKSYmbnVsbCE9KHI9dC5vd25lckRvY3VtZW50KSYmci5jb250YWlucyhjKXx8bnVsbCE9ZSYmbnVsbCE9KG89ZS5vd25lckRvY3VtZW50KSYmby5jb250YWlucyhlKSk7IXUmJmM7KXU9ISEobnVsbCE9KGk9Yz1udWxsPT0oYT1zPXRRKGMpKT92b2lkIDA6YS5ob3N0KSYmbnVsbCE9KGw9aS5vd25lckRvY3VtZW50KSYmbC5jb250YWlucyhjKSk7cmV0dXJuIHV9LHJuPWZ1bmN0aW9uKGUpe3ZhciBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdD1uLndpZHRoLHI9bi5oZWlnaHQ7cmV0dXJuIDA9PT10JiYwPT09cn0scnQ9ZnVuY3Rpb24oZSxuKXt2YXIgdD1uLmRpc3BsYXlDaGVjayxyPW4uZ2V0U2hhZG93Um9vdDtpZihcImhpZGRlblwiPT09Z2V0Q29tcHV0ZWRTdHlsZShlKS52aXNpYmlsaXR5KXJldHVybiEwO3ZhciBvPXRLLmNhbGwoZSxcImRldGFpbHM+c3VtbWFyeTpmaXJzdC1vZi10eXBlXCIpP2UucGFyZW50RWxlbWVudDplO2lmKHRLLmNhbGwobyxcImRldGFpbHM6bm90KFtvcGVuXSkgKlwiKSlyZXR1cm4hMDtpZih0JiZcImZ1bGxcIiE9PXQmJlwibGVnYWN5LWZ1bGxcIiE9PXQpe2lmKFwibm9uLXplcm8tYXJlYVwiPT09dClyZXR1cm4gcm4oZSl9ZWxzZXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiByKXtmb3IodmFyIGE9ZTtlOyl7dmFyIGk9ZS5wYXJlbnRFbGVtZW50LGw9dFEoZSk7aWYoaSYmIWkuc2hhZG93Um9vdCYmITA9PT1yKGkpKXJldHVybiBybihlKTtlPWUuYXNzaWduZWRTbG90P2UuYXNzaWduZWRTbG90Oml8fGw9PT1lLm93bmVyRG9jdW1lbnQ/aTpsLmhvc3R9ZT1hfWlmKHJlKGUpKXJldHVybiFlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoO2lmKFwibGVnYWN5LWZ1bGxcIiE9PXQpcmV0dXJuITB9cmV0dXJuITF9LHJyPWZ1bmN0aW9uKGUpe2lmKC9eKElOUFVUfEJVVFRPTnxTRUxFQ1R8VEVYVEFSRUEpJC8udGVzdChlLnRhZ05hbWUpKWZvcih2YXIgbj1lLnBhcmVudEVsZW1lbnQ7bjspe2lmKFwiRklFTERTRVRcIj09PW4udGFnTmFtZSYmbi5kaXNhYmxlZCl7Zm9yKHZhciB0PTA7dDxuLmNoaWxkcmVuLmxlbmd0aDt0Kyspe3ZhciByPW4uY2hpbGRyZW4uaXRlbSh0KTtpZihcIkxFR0VORFwiPT09ci50YWdOYW1lKXJldHVybiEhdEsuY2FsbChuLFwiZmllbGRzZXRbZGlzYWJsZWRdICpcIil8fCFyLmNvbnRhaW5zKGUpfXJldHVybiEwfW49bi5wYXJlbnRFbGVtZW50fXJldHVybiExfSxybz1mdW5jdGlvbihlLG4pe3JldHVybiEobi5kaXNhYmxlZHx8dEcobil8fHQ2KG4pJiZcImhpZGRlblwiPT09bi50eXBlfHxydChuLGUpfHxcIkRFVEFJTFNcIj09PW4udGFnTmFtZSYmQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KG4uY2hpbGRyZW4pLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuXCJTVU1NQVJZXCI9PT1lLnRhZ05hbWV9KXx8cnIobikpfSxyYT1mdW5jdGlvbihlLG4pe3JldHVybiEodDcobil8fDA+dDQobikpJiYhIXJvKGUsbil9LHJpPWZ1bmN0aW9uKGUpe3ZhciBuPXBhcnNlSW50KGUuZ2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiksMTApO3JldHVybiEhaXNOYU4obil8fCEhKG4+PTApfSxybD1mdW5jdGlvbiBlKG4pe3ZhciB0PVtdLHI9W107cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihuLG8pe3ZhciBhPSEhbi5zY29wZVBhcmVudCxpPWE/bi5zY29wZVBhcmVudDpuLGw9dDUoaSxhKSxzPWE/ZShuLmNhbmRpZGF0ZXMpOmk7MD09PWw/YT90LnB1c2guYXBwbHkodCxzKTp0LnB1c2goaSk6ci5wdXNoKHtkb2N1bWVudE9yZGVyOm8sdGFiSW5kZXg6bCxpdGVtOm4saXNTY29wZTphLGNvbnRlbnQ6c30pfSksci5zb3J0KHQzKS5yZWR1Y2UoZnVuY3Rpb24oZSxuKXtyZXR1cm4gbi5pc1Njb3BlP2UucHVzaC5hcHBseShlLG4uY29udGVudCk6ZS5wdXNoKG4uY29udGVudCksZX0sW10pLmNvbmNhdCh0KX0scnM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gcmwoKG49bnx8e30pLmdldFNoYWRvd1Jvb3Q/dDEoW2VdLG4uaW5jbHVkZUNvbnRhaW5lcix7ZmlsdGVyOnJhLmJpbmQobnVsbCxuKSxmbGF0dGVuOiExLGdldFNoYWRvd1Jvb3Q6bi5nZXRTaGFkb3dSb290LHNoYWRvd1Jvb3RGaWx0ZXI6cml9KTp0MChlLG4uaW5jbHVkZUNvbnRhaW5lcixyYS5iaW5kKG51bGwsbikpKX0scmM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4obj1ufHx7fSkuZ2V0U2hhZG93Um9vdD90MShbZV0sbi5pbmNsdWRlQ29udGFpbmVyLHtmaWx0ZXI6cm8uYmluZChudWxsLG4pLGZsYXR0ZW46ITAsZ2V0U2hhZG93Um9vdDpuLmdldFNoYWRvd1Jvb3R9KTp0MChlLG4uaW5jbHVkZUNvbnRhaW5lcixyby5iaW5kKG51bGwsbikpfSxydT1mdW5jdGlvbihlLG4pe2lmKG49bnx8e30sIWUpdGhyb3cgRXJyb3IoXCJObyBub2RlIHByb3ZpZGVkXCIpO3JldHVybiExIT09dEsuY2FsbChlLHRZKSYmcmEobixlKX07bGV0IHJkPSgpPT4oe2dldFNoYWRvd1Jvb3Q6ITAsZGlzcGxheUNoZWNrOlwiZnVuY3Rpb25cIj09dHlwZW9mIFJlc2l6ZU9ic2VydmVyJiZSZXNpemVPYnNlcnZlci50b1N0cmluZygpLmluY2x1ZGVzKFwiW25hdGl2ZSBjb2RlXVwiKT9cImZ1bGxcIjpcIm5vbmVcIn0pO2Z1bmN0aW9uIHJmKGUsbil7bGV0IHQ9cnMoZSxyZCgpKSxyPXQubGVuZ3RoO2lmKDA9PT1yKXJldHVybjtsZXQgbz1lWihlUShlKSksYT10LmluZGV4T2Yobyk7cmV0dXJuIHRbLTE9PT1hPzE9PT1uPzA6ci0xOmErbl19ZnVuY3Rpb24gcnAoZSl7cmV0dXJuIHJmKGVRKGUpLmJvZHksMSl8fGV9ZnVuY3Rpb24gcmgoZSl7cmV0dXJuIHJmKGVRKGUpLmJvZHksLTEpfHxlfWZ1bmN0aW9uIHJnKGUsbil7bGV0IHQ9bnx8ZS5jdXJyZW50VGFyZ2V0LHI9ZS5yZWxhdGVkVGFyZ2V0O3JldHVybiFyfHwhZVkodCxyKX1mdW5jdGlvbiBybShlKXtlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS10YWJpbmRleF1cIikuZm9yRWFjaChlPT57bGV0IG49ZS5kYXRhc2V0LnRhYmluZGV4O2RlbGV0ZSBlLmRhdGFzZXQudGFiaW5kZXgsbj9lLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsbik6ZS5yZW1vdmVBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKX0pfWxldCBydj1DLmNyZWF0ZUNvbnRleHQobnVsbCkscmI9KCk9PkMudXNlQ29udGV4dChydikscnk9ZTEoXCJwb3J0YWxcIik7ZnVuY3Rpb24gcngoZT17fSl7bGV0e2lkOm4scm9vdDp0fT1lLHI9SCgpLG89cmIoKSxbYSxpXT1DLnVzZVN0YXRlKG51bGwpLGw9Qy51c2VSZWYobnVsbCk7cmV0dXJuIEYoKCk9PigpPT57YT8ucmVtb3ZlKCkscXVldWVNaWNyb3Rhc2soKCk9PntsLmN1cnJlbnQ9bnVsbH0pfSxbYV0pLEYoKCk9PntpZighcnx8bC5jdXJyZW50KXJldHVybjtsZXQgZT1uP2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKG4pOm51bGw7aWYoIWUpcmV0dXJuO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7dC5pZD1yLHQuc2V0QXR0cmlidXRlKHJ5LFwiXCIpLGUuYXBwZW5kQ2hpbGQodCksbC5jdXJyZW50PXQsaSh0KX0sW24scl0pLEYoKCk9PntpZihudWxsPT09dHx8IXJ8fGwuY3VycmVudClyZXR1cm47bGV0IGU9dHx8bz8ucG9ydGFsTm9kZTtlJiYhZWUoZSkmJihlPWUuY3VycmVudCksZT1lfHxkb2N1bWVudC5ib2R5O2xldCBhPW51bGw7biYmKChhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmlkPW4sZS5hcHBlbmRDaGlsZChhKSk7bGV0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtzLmlkPXIscy5zZXRBdHRyaWJ1dGUocnksXCJcIiksKGU9YXx8ZSkuYXBwZW5kQ2hpbGQocyksbC5jdXJyZW50PXMsaShzKX0sW24sdCxyLG9dKSxhfWZ1bmN0aW9uIHJ3KGUpe2xldHtjaGlsZHJlbjpuLGlkOnQscm9vdDpyLHByZXNlcnZlVGFiT3JkZXI6bz0hMH09ZSxhPXJ4KHtpZDp0LHJvb3Q6cn0pLFtpLHNdPUMudXNlU3RhdGUobnVsbCksYz1DLnVzZVJlZihudWxsKSx1PUMudXNlUmVmKG51bGwpLGQ9Qy51c2VSZWYobnVsbCksZj1DLnVzZVJlZihudWxsKSxwPWk/Lm1vZGFsLGg9aT8ub3BlbixnPSEhaSYmIWkubW9kYWwmJmkub3BlbiYmbyYmISEocnx8YSk7cmV0dXJuIEMudXNlRWZmZWN0KCgpPT57aWYoYSYmbyYmIXApcmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzaW5cIixlLCEwKSxhLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c291dFwiLGUsITApLCgpPT57YS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNpblwiLGUsITApLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3Vzb3V0XCIsZSwhMCl9O2Z1bmN0aW9uIGUoZSl7YSYmcmcoZSkmJihcImZvY3VzaW5cIj09PWUudHlwZT9ybTpmdW5jdGlvbihlKXtycyhlLHJkKCkpLmZvckVhY2goZT0+e2UuZGF0YXNldC50YWJpbmRleD1lLmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpfHxcIlwiLGUuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIixcIi0xXCIpfSl9KShhKX19LFthLG8scF0pLEMudXNlRWZmZWN0KCgpPT57YSYmKGh8fHJtKGEpKX0sW2gsYV0pLCgwLGwuanN4cykocnYuUHJvdmlkZXIse3ZhbHVlOkMudXNlTWVtbygoKT0+KHtwcmVzZXJ2ZVRhYk9yZGVyOm8sYmVmb3JlT3V0c2lkZVJlZjpjLGFmdGVyT3V0c2lkZVJlZjp1LGJlZm9yZUluc2lkZVJlZjpkLGFmdGVySW5zaWRlUmVmOmYscG9ydGFsTm9kZTphLHNldEZvY3VzTWFuYWdlclN0YXRlOnN9KSxbbyxhXSksY2hpbGRyZW46W2cmJmEmJigwLGwuanN4KSh0Wix7XCJkYXRhLXR5cGVcIjpcIm91dHNpZGVcIixyZWY6YyxvbkZvY3VzOmU9PntpZihyZyhlLGEpKWQuY3VycmVudD8uZm9jdXMoKTtlbHNle2xldCBlPXJoKGk/aS5kb21SZWZlcmVuY2U6bnVsbCk7ZT8uZm9jdXMoKX19fSksZyYmYSYmKDAsbC5qc3gpKFwic3BhblwiLHtcImFyaWEtb3duc1wiOmEuaWQsc3R5bGU6dCR9KSxhJiZFLmNyZWF0ZVBvcnRhbChuLGEpLGcmJmEmJigwLGwuanN4KSh0Wix7XCJkYXRhLXR5cGVcIjpcIm91dHNpZGVcIixyZWY6dSxvbkZvY3VzOmU9PntpZihyZyhlLGEpKWYuY3VycmVudD8uZm9jdXMoKTtlbHNle2xldCBuPXJwKGk/aS5kb21SZWZlcmVuY2U6bnVsbCk7bj8uZm9jdXMoKSxpPy5jbG9zZU9uRm9jdXNPdXQmJmk/Lm9uT3BlbkNoYW5nZSghMSxlLm5hdGl2ZUV2ZW50LFwiZm9jdXMtb3V0XCIpfX19KV19KX1sZXQgcmo9Qy5jcmVhdGVDb250ZXh0KHZvaWQgMCk7ZnVuY3Rpb24gcmsoZSl7bGV0e2NoaWxkcmVuOm4sa2VlcE1vdW50ZWQ6dD0hMSxjb250YWluZXI6cn09ZSx7bW91bnRlZDpvfT1uMCgpO3JldHVybiBvfHx0PygwLGwuanN4KShyai5Qcm92aWRlcix7dmFsdWU6dCxjaGlsZHJlbjooMCxsLmpzeCkocncse3Jvb3Q6cixjaGlsZHJlbjpufSl9KTpudWxsfWxldCByQT1DLmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiByTyhlLG4sdCl7bGV0IHIse3JlZmVyZW5jZTpvLGZsb2F0aW5nOmF9PWUsaT1uRShuKSxsPW5PKG5FKG4pKSxzPW5DKGwpLGM9bmsobiksdT1cInlcIj09PWksZD1vLngrby53aWR0aC8yLWEud2lkdGgvMixmPW8ueStvLmhlaWdodC8yLWEuaGVpZ2h0LzIscD1vW3NdLzItYVtzXS8yO3N3aXRjaChjKXtjYXNlXCJ0b3BcIjpyPXt4OmQseTpvLnktYS5oZWlnaHR9O2JyZWFrO2Nhc2VcImJvdHRvbVwiOnI9e3g6ZCx5Om8ueStvLmhlaWdodH07YnJlYWs7Y2FzZVwicmlnaHRcIjpyPXt4Om8ueCtvLndpZHRoLHk6Zn07YnJlYWs7Y2FzZVwibGVmdFwiOnI9e3g6by54LWEud2lkdGgseTpmfTticmVhaztkZWZhdWx0OnI9e3g6by54LHk6by55fX1zd2l0Y2gobkEobikpe2Nhc2VcInN0YXJ0XCI6cltsXS09cCoodCYmdT8tMToxKTticmVhaztjYXNlXCJlbmRcIjpyW2xdKz1wKih0JiZ1Py0xOjEpfXJldHVybiByfWxldCByQz1hc3luYyhlLG4sdCk9PntsZXR7cGxhY2VtZW50OnI9XCJib3R0b21cIixzdHJhdGVneTpvPVwiYWJzb2x1dGVcIixtaWRkbGV3YXJlOmE9W10scGxhdGZvcm06aX09dCxsPWEuZmlsdGVyKEJvb2xlYW4pLHM9YXdhaXQgKG51bGw9PWkuaXNSVEw/dm9pZCAwOmkuaXNSVEwobikpLGM9YXdhaXQgaS5nZXRFbGVtZW50UmVjdHMoe3JlZmVyZW5jZTplLGZsb2F0aW5nOm4sc3RyYXRlZ3k6b30pLHt4OnUseTpkfT1yTyhjLHIscyksZj1yLHA9e30saD0wO2ZvcihsZXQgdD0wO3Q8bC5sZW5ndGg7dCsrKXtsZXR7bmFtZTphLGZuOmd9PWxbdF0se3g6bSx5OnYsZGF0YTpiLHJlc2V0Onl9PWF3YWl0IGcoe3g6dSx5OmQsaW5pdGlhbFBsYWNlbWVudDpyLHBsYWNlbWVudDpmLHN0cmF0ZWd5Om8sbWlkZGxld2FyZURhdGE6cCxyZWN0czpjLHBsYXRmb3JtOmksZWxlbWVudHM6e3JlZmVyZW5jZTplLGZsb2F0aW5nOm59fSk7dT1udWxsIT1tP206dSxkPW51bGwhPXY/djpkLHA9ey4uLnAsW2FdOnsuLi5wW2FdLC4uLmJ9fSx5JiZoPD01MCYmKGgrKyxcIm9iamVjdFwiPT10eXBlb2YgeSYmKHkucGxhY2VtZW50JiYoZj15LnBsYWNlbWVudCkseS5yZWN0cyYmKGM9ITA9PT15LnJlY3RzP2F3YWl0IGkuZ2V0RWxlbWVudFJlY3RzKHtyZWZlcmVuY2U6ZSxmbG9hdGluZzpuLHN0cmF0ZWd5Om99KTp5LnJlY3RzKSx7eDp1LHk6ZH09ck8oYyxmLHMpKSx0PS0xKX1yZXR1cm57eDp1LHk6ZCxwbGFjZW1lbnQ6ZixzdHJhdGVneTpvLG1pZGRsZXdhcmVEYXRhOnB9fTthc3luYyBmdW5jdGlvbiByUyhlLG4pe3ZhciB0O3ZvaWQgMD09PW4mJihuPXt9KTtsZXR7eDpyLHk6byxwbGF0Zm9ybTphLHJlY3RzOmksZWxlbWVudHM6bCxzdHJhdGVneTpzfT1lLHtib3VuZGFyeTpjPVwiY2xpcHBpbmdBbmNlc3RvcnNcIixyb290Qm91bmRhcnk6dT1cInZpZXdwb3J0XCIsZWxlbWVudENvbnRleHQ6ZD1cImZsb2F0aW5nXCIsYWx0Qm91bmRhcnk6Zj0hMSxwYWRkaW5nOnA9MH09bmoobixlKSxoPW5OKHApLGc9bFtmP1wiZmxvYXRpbmdcIj09PWQ/XCJyZWZlcmVuY2VcIjpcImZsb2F0aW5nXCI6ZF0sbT1uRChhd2FpdCBhLmdldENsaXBwaW5nUmVjdCh7ZWxlbWVudDpudWxsPT0odD1hd2FpdCAobnVsbD09YS5pc0VsZW1lbnQ/dm9pZCAwOmEuaXNFbGVtZW50KGcpKSl8fHQ/ZzpnLmNvbnRleHRFbGVtZW50fHxhd2FpdCAobnVsbD09YS5nZXREb2N1bWVudEVsZW1lbnQ/dm9pZCAwOmEuZ2V0RG9jdW1lbnRFbGVtZW50KGwuZmxvYXRpbmcpKSxib3VuZGFyeTpjLHJvb3RCb3VuZGFyeTp1LHN0cmF0ZWd5OnN9KSksdj1cImZsb2F0aW5nXCI9PT1kP3t4OnIseTpvLHdpZHRoOmkuZmxvYXRpbmcud2lkdGgsaGVpZ2h0OmkuZmxvYXRpbmcuaGVpZ2h0fTppLnJlZmVyZW5jZSxiPWF3YWl0IChudWxsPT1hLmdldE9mZnNldFBhcmVudD92b2lkIDA6YS5nZXRPZmZzZXRQYXJlbnQobC5mbG9hdGluZykpLHk9YXdhaXQgKG51bGw9PWEuaXNFbGVtZW50P3ZvaWQgMDphLmlzRWxlbWVudChiKSkmJmF3YWl0IChudWxsPT1hLmdldFNjYWxlP3ZvaWQgMDphLmdldFNjYWxlKGIpKXx8e3g6MSx5OjF9LHg9bkQoYS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdD9hd2FpdCBhLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KHtlbGVtZW50czpsLHJlY3Q6dixvZmZzZXRQYXJlbnQ6YixzdHJhdGVneTpzfSk6dik7cmV0dXJue3RvcDoobS50b3AteC50b3AraC50b3ApL3kueSxib3R0b206KHguYm90dG9tLW0uYm90dG9tK2guYm90dG9tKS95LnksbGVmdDoobS5sZWZ0LXgubGVmdCtoLmxlZnQpL3kueCxyaWdodDooeC5yaWdodC1tLnJpZ2h0K2gucmlnaHQpL3kueH19ZnVuY3Rpb24gckUoZSxuKXtyZXR1cm57dG9wOmUudG9wLW4uaGVpZ2h0LHJpZ2h0OmUucmlnaHQtbi53aWR0aCxib3R0b206ZS5ib3R0b20tbi5oZWlnaHQsbGVmdDplLmxlZnQtbi53aWR0aH19ZnVuY3Rpb24gcl8oZSl7cmV0dXJuIG5oLnNvbWUobj0+ZVtuXT49MCl9bGV0IHJQPW5ldyBTZXQoW1wibGVmdFwiLFwidG9wXCJdKTthc3luYyBmdW5jdGlvbiByeihlLG4pe2xldHtwbGFjZW1lbnQ6dCxwbGF0Zm9ybTpyLGVsZW1lbnRzOm99PWUsYT1hd2FpdCAobnVsbD09ci5pc1JUTD92b2lkIDA6ci5pc1JUTChvLmZsb2F0aW5nKSksaT1uayh0KSxsPW5BKHQpLHM9XCJ5XCI9PT1uRSh0KSxjPXJQLmhhcyhpKT8tMToxLHU9YSYmcz8tMToxLGQ9bmoobixlKSx7bWFpbkF4aXM6Zixjcm9zc0F4aXM6cCxhbGlnbm1lbnRBeGlzOmh9PVwibnVtYmVyXCI9PXR5cGVvZiBkP3ttYWluQXhpczpkLGNyb3NzQXhpczowLGFsaWdubWVudEF4aXM6bnVsbH06e21haW5BeGlzOmQubWFpbkF4aXN8fDAsY3Jvc3NBeGlzOmQuY3Jvc3NBeGlzfHwwLGFsaWdubWVudEF4aXM6ZC5hbGlnbm1lbnRBeGlzfTtyZXR1cm4gbCYmXCJudW1iZXJcIj09dHlwZW9mIGgmJihwPVwiZW5kXCI9PT1sPy0xKmg6aCkscz97eDpwKnUseTpmKmN9Ont4OmYqYyx5OnAqdX19ZnVuY3Rpb24gckwoZSl7bGV0IG49ZWcoZSksdD1wYXJzZUZsb2F0KG4ud2lkdGgpfHwwLHI9cGFyc2VGbG9hdChuLmhlaWdodCl8fDAsbz1lbihlKSxhPW8/ZS5vZmZzZXRXaWR0aDp0LGk9bz9lLm9mZnNldEhlaWdodDpyLGw9bnYodCkhPT1hfHxudihyKSE9PWk7cmV0dXJuIGwmJih0PWEscj1pKSx7d2lkdGg6dCxoZWlnaHQ6ciwkOmx9fWZ1bmN0aW9uIHJUKGUpe3JldHVybiBlZShlKT9lOmUuY29udGV4dEVsZW1lbnR9ZnVuY3Rpb24gclIoZSl7bGV0IG49clQoZSk7aWYoIWVuKG4pKXJldHVybiBueSgxKTtsZXQgdD1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDpyLGhlaWdodDpvLCQ6YX09ckwobiksaT0oYT9udih0LndpZHRoKTp0LndpZHRoKS9yLGw9KGE/bnYodC5oZWlnaHQpOnQuaGVpZ2h0KS9vO3JldHVybiBpJiZOdW1iZXIuaXNGaW5pdGUoaSl8fChpPTEpLGwmJk51bWJlci5pc0Zpbml0ZShsKXx8KGw9MSkse3g6aSx5Omx9fWxldCByTj1ueSgwKTtmdW5jdGlvbiByRChlKXtsZXQgbj1RKGUpO3JldHVybiBlZigpJiZuLnZpc3VhbFZpZXdwb3J0P3t4Om4udmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCx5Om4udmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wfTpyTn1mdW5jdGlvbiByQihlLG4sdCxyKXt2YXIgbzt2b2lkIDA9PT1uJiYobj0hMSksdm9pZCAwPT09dCYmKHQ9ITEpO2xldCBhPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1yVChlKSxsPW55KDEpO24mJihyP2VlKHIpJiYobD1yUihyKSk6bD1yUihlKSk7bGV0IHM9KHZvaWQgMD09PShvPXQpJiYobz0hMSksciYmKCFvfHxyPT09UShpKSkmJm8pP3JEKGkpOm55KDApLGM9KGEubGVmdCtzLngpL2wueCx1PShhLnRvcCtzLnkpL2wueSxkPWEud2lkdGgvbC54LGY9YS5oZWlnaHQvbC55O2lmKGkpe2xldCBlPVEoaSksbj1yJiZlZShyKT9RKHIpOnIsdD1lLG89ZXkodCk7Zm9yKDtvJiZyJiZuIT09dDspe2xldCBlPXJSKG8pLG49by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPWVnKG8pLGE9bi5sZWZ0KyhvLmNsaWVudExlZnQrcGFyc2VGbG9hdChyLnBhZGRpbmdMZWZ0KSkqZS54LGk9bi50b3ArKG8uY2xpZW50VG9wK3BhcnNlRmxvYXQoci5wYWRkaW5nVG9wKSkqZS55O2MqPWUueCx1Kj1lLnksZCo9ZS54LGYqPWUueSxjKz1hLHUrPWksbz1leSh0PVEobykpfX1yZXR1cm4gbkQoe3dpZHRoOmQsaGVpZ2h0OmYseDpjLHk6dX0pfWZ1bmN0aW9uIHJNKGUsbil7bGV0IHQ9ZW0oZSkuc2Nyb2xsTGVmdDtyZXR1cm4gbj9uLmxlZnQrdDpyQihHKGUpKS5sZWZ0K3R9ZnVuY3Rpb24gckkoZSxuLHQpe3ZvaWQgMD09PXQmJih0PSExKTtsZXQgcj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt4OnIubGVmdCtuLnNjcm9sbExlZnQtKHQ/MDpyTShlLHIpKSx5OnIudG9wK24uc2Nyb2xsVG9wfX1sZXQgckg9bmV3IFNldChbXCJhYnNvbHV0ZVwiLFwiZml4ZWRcIl0pO2Z1bmN0aW9uIHJGKGUsbix0KXtsZXQgcjtpZihcInZpZXdwb3J0XCI9PT1uKXI9ZnVuY3Rpb24oZSxuKXtsZXQgdD1RKGUpLHI9RyhlKSxvPXQudmlzdWFsVmlld3BvcnQsYT1yLmNsaWVudFdpZHRoLGk9ci5jbGllbnRIZWlnaHQsbD0wLHM9MDtpZihvKXthPW8ud2lkdGgsaT1vLmhlaWdodDtsZXQgZT1lZigpOyghZXx8ZSYmXCJmaXhlZFwiPT09bikmJihsPW8ub2Zmc2V0TGVmdCxzPW8ub2Zmc2V0VG9wKX1yZXR1cm57d2lkdGg6YSxoZWlnaHQ6aSx4OmwseTpzfX0oZSx0KTtlbHNlIGlmKFwiZG9jdW1lbnRcIj09PW4pcj1mdW5jdGlvbihlKXtsZXQgbj1HKGUpLHQ9ZW0oZSkscj1lLm93bmVyRG9jdW1lbnQuYm9keSxvPW5tKG4uc2Nyb2xsV2lkdGgsbi5jbGllbnRXaWR0aCxyLnNjcm9sbFdpZHRoLHIuY2xpZW50V2lkdGgpLGE9bm0obi5zY3JvbGxIZWlnaHQsbi5jbGllbnRIZWlnaHQsci5zY3JvbGxIZWlnaHQsci5jbGllbnRIZWlnaHQpLGk9LXQuc2Nyb2xsTGVmdCtyTShlKSxsPS10LnNjcm9sbFRvcDtyZXR1cm5cInJ0bFwiPT09ZWcocikuZGlyZWN0aW9uJiYoaSs9bm0obi5jbGllbnRXaWR0aCxyLmNsaWVudFdpZHRoKS1vKSx7d2lkdGg6byxoZWlnaHQ6YSx4OmkseTpsfX0oRyhlKSk7ZWxzZSBpZihlZShuKSlyPWZ1bmN0aW9uKGUsbil7bGV0IHQ9ckIoZSwhMCxcImZpeGVkXCI9PT1uKSxyPXQudG9wK2UuY2xpZW50VG9wLG89dC5sZWZ0K2UuY2xpZW50TGVmdCxhPWVuKGUpP3JSKGUpOm55KDEpLGk9ZS5jbGllbnRXaWR0aCphLngsbD1lLmNsaWVudEhlaWdodCphLnk7cmV0dXJue3dpZHRoOmksaGVpZ2h0OmwseDpvKmEueCx5OnIqYS55fX0obix0KTtlbHNle2xldCB0PXJEKGUpO3I9e3g6bi54LXQueCx5Om4ueS10Lnksd2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHR9fXJldHVybiBuRChyKX1mdW5jdGlvbiByVShlKXtyZXR1cm5cInN0YXRpY1wiPT09ZWcoZSkucG9zaXRpb259ZnVuY3Rpb24gclYoZSxuKXtpZighZW4oZSl8fFwiZml4ZWRcIj09PWVnKGUpLnBvc2l0aW9uKXJldHVybiBudWxsO2lmKG4pcmV0dXJuIG4oZSk7bGV0IHQ9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIEcoZSk9PT10JiYodD10Lm93bmVyRG9jdW1lbnQuYm9keSksdH1mdW5jdGlvbiBycShlLG4pe3ZhciB0O2xldCByPVEoZSk7aWYoZWwoZSkpcmV0dXJuIHI7aWYoIWVuKGUpKXtsZXQgbj1ldihlKTtmb3IoO24mJiFlaChuKTspe2lmKGVlKG4pJiYhclUobikpcmV0dXJuIG47bj1ldihuKX1yZXR1cm4gcn1sZXQgbz1yVihlLG4pO2Zvcig7byYmKHQ9byxlYS5oYXMoSyh0KSkpJiZyVShvKTspbz1yVihvLG4pO3JldHVybiBvJiZlaChvKSYmclUobykmJiFlZChvKT9yOm98fGZ1bmN0aW9uKGUpe2xldCBuPWV2KGUpO2Zvcig7ZW4obikmJiFlaChuKTspe2lmKGVkKG4pKXJldHVybiBuO2lmKGVsKG4pKWJyZWFrO249ZXYobil9cmV0dXJuIG51bGx9KGUpfHxyfWxldCByVz1hc3luYyBmdW5jdGlvbihlKXtsZXQgbj10aGlzLmdldE9mZnNldFBhcmVudHx8cnEsdD10aGlzLmdldERpbWVuc2lvbnMscj1hd2FpdCB0KGUuZmxvYXRpbmcpO3JldHVybntyZWZlcmVuY2U6ZnVuY3Rpb24oZSxuLHQpe2xldCByPWVuKG4pLG89RyhuKSxhPVwiZml4ZWRcIj09PXQsaT1yQihlLCEwLGEsbiksbD17c2Nyb2xsTGVmdDowLHNjcm9sbFRvcDowfSxzPW55KDApO2lmKHJ8fCFyJiYhYSlpZigoXCJib2R5XCIhPT1LKG4pfHxlbyhvKSkmJihsPWVtKG4pKSxyKXtsZXQgZT1yQihuLCEwLGEsbik7cy54PWUueCtuLmNsaWVudExlZnQscy55PWUueStuLmNsaWVudFRvcH1lbHNlIG8mJihzLng9ck0obykpO2EmJiFyJiZvJiYocy54PXJNKG8pKTtsZXQgYz0hb3x8cnx8YT9ueSgwKTpySShvLGwpO3JldHVybnt4OmkubGVmdCtsLnNjcm9sbExlZnQtcy54LWMueCx5OmkudG9wK2wuc2Nyb2xsVG9wLXMueS1jLnksd2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHR9fShlLnJlZmVyZW5jZSxhd2FpdCBuKGUuZmxvYXRpbmcpLGUuc3RyYXRlZ3kpLGZsb2F0aW5nOnt4OjAseTowLHdpZHRoOnIud2lkdGgsaGVpZ2h0OnIuaGVpZ2h0fX19LHIkPXtjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdDpmdW5jdGlvbihlKXtsZXR7ZWxlbWVudHM6bixyZWN0OnQsb2Zmc2V0UGFyZW50OnIsc3RyYXRlZ3k6b309ZSxhPVwiZml4ZWRcIj09PW8saT1HKHIpLGw9ISFuJiZlbChuLmZsb2F0aW5nKTtpZihyPT09aXx8bCYmYSlyZXR1cm4gdDtsZXQgcz17c2Nyb2xsTGVmdDowLHNjcm9sbFRvcDowfSxjPW55KDEpLHU9bnkoMCksZD1lbihyKTtpZigoZHx8IWQmJiFhKSYmKChcImJvZHlcIiE9PUsocil8fGVvKGkpKSYmKHM9ZW0ocikpLGVuKHIpKSl7bGV0IGU9ckIocik7Yz1yUihyKSx1Lng9ZS54K3IuY2xpZW50TGVmdCx1Lnk9ZS55K3IuY2xpZW50VG9wfWxldCBmPSFpfHxkfHxhP255KDApOnJJKGkscywhMCk7cmV0dXJue3dpZHRoOnQud2lkdGgqYy54LGhlaWdodDp0LmhlaWdodCpjLnkseDp0LngqYy54LXMuc2Nyb2xsTGVmdCpjLngrdS54K2YueCx5OnQueSpjLnktcy5zY3JvbGxUb3AqYy55K3UueStmLnl9fSxnZXREb2N1bWVudEVsZW1lbnQ6RyxnZXRDbGlwcGluZ1JlY3Q6ZnVuY3Rpb24oZSl7bGV0e2VsZW1lbnQ6bixib3VuZGFyeTp0LHJvb3RCb3VuZGFyeTpyLHN0cmF0ZWd5Om99PWUsYT1bLi4uXCJjbGlwcGluZ0FuY2VzdG9yc1wiPT09dD9lbChuKT9bXTpmdW5jdGlvbihlLG4pe2xldCB0PW4uZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7bGV0IHI9ZWIoZSxbXSwhMSkuZmlsdGVyKGU9PmVlKGUpJiZcImJvZHlcIiE9PUsoZSkpLG89bnVsbCxhPVwiZml4ZWRcIj09PWVnKGUpLnBvc2l0aW9uLGk9YT9ldihlKTplO2Zvcig7ZWUoaSkmJiFlaChpKTspe2xldCBuPWVnKGkpLHQ9ZWQoaSk7dHx8XCJmaXhlZFwiIT09bi5wb3NpdGlvbnx8KG89bnVsbCksKGE/IXQmJiFvOiF0JiZcInN0YXRpY1wiPT09bi5wb3NpdGlvbiYmISFvJiZySC5oYXMoby5wb3NpdGlvbil8fGVvKGkpJiYhdCYmZnVuY3Rpb24gZShuLHQpe2xldCByPWV2KG4pO3JldHVybiEocj09PXR8fCFlZShyKXx8ZWgocikpJiYoXCJmaXhlZFwiPT09ZWcocikucG9zaXRpb258fGUocix0KSl9KGUsaSkpP3I9ci5maWx0ZXIoZT0+ZSE9PWkpOm89bixpPWV2KGkpfXJldHVybiBuLnNldChlLHIpLHJ9KG4sdGhpcy5fYyk6W10uY29uY2F0KHQpLHJdLGk9YVswXSxsPWEucmVkdWNlKChlLHQpPT57bGV0IHI9ckYobix0LG8pO3JldHVybiBlLnRvcD1ubShyLnRvcCxlLnRvcCksZS5yaWdodD1uZyhyLnJpZ2h0LGUucmlnaHQpLGUuYm90dG9tPW5nKHIuYm90dG9tLGUuYm90dG9tKSxlLmxlZnQ9bm0oci5sZWZ0LGUubGVmdCksZX0sckYobixpLG8pKTtyZXR1cm57d2lkdGg6bC5yaWdodC1sLmxlZnQsaGVpZ2h0OmwuYm90dG9tLWwudG9wLHg6bC5sZWZ0LHk6bC50b3B9fSxnZXRPZmZzZXRQYXJlbnQ6cnEsZ2V0RWxlbWVudFJlY3RzOnJXLGdldENsaWVudFJlY3RzOmZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5mcm9tKGUuZ2V0Q2xpZW50UmVjdHMoKSl9LGdldERpbWVuc2lvbnM6ZnVuY3Rpb24oZSl7bGV0e3dpZHRoOm4saGVpZ2h0OnR9PXJMKGUpO3JldHVybnt3aWR0aDpuLGhlaWdodDp0fX0sZ2V0U2NhbGU6clIsaXNFbGVtZW50OmVlLGlzUlRMOmZ1bmN0aW9uKGUpe3JldHVyblwicnRsXCI9PT1lZyhlKS5kaXJlY3Rpb259fTtmdW5jdGlvbiByWihlLG4pe3JldHVybiBlLng9PT1uLngmJmUueT09PW4ueSYmZS53aWR0aD09PW4ud2lkdGgmJmUuaGVpZ2h0PT09bi5oZWlnaHR9ZnVuY3Rpb24gclkoZSxuLHQscil7bGV0IG87dm9pZCAwPT09ciYmKHI9e30pO2xldHthbmNlc3RvclNjcm9sbDphPSEwLGFuY2VzdG9yUmVzaXplOmk9ITAsZWxlbWVudFJlc2l6ZTpsPVwiZnVuY3Rpb25cIj09dHlwZW9mIFJlc2l6ZU9ic2VydmVyLGxheW91dFNoaWZ0OnM9XCJmdW5jdGlvblwiPT10eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIsYW5pbWF0aW9uRnJhbWU6Yz0hMX09cix1PXJUKGUpLGQ9YXx8aT9bLi4udT9lYih1KTpbXSwuLi5lYihuKV06W107ZC5mb3JFYWNoKGU9PnthJiZlLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0LHtwYXNzaXZlOiEwfSksaSYmZS5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdCl9KTtsZXQgZj11JiZzP2Z1bmN0aW9uKGUsbil7bGV0IHQscj1udWxsLG89RyhlKTtmdW5jdGlvbiBhKCl7dmFyIGU7Y2xlYXJUaW1lb3V0KHQpLG51bGw9PShlPXIpfHxlLmRpc2Nvbm5lY3QoKSxyPW51bGx9cmV0dXJuIWZ1bmN0aW9uIGkobCxzKXt2b2lkIDA9PT1sJiYobD0hMSksdm9pZCAwPT09cyYmKHM9MSksYSgpO2xldCBjPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse2xlZnQ6dSx0b3A6ZCx3aWR0aDpmLGhlaWdodDpwfT1jO2lmKGx8fG4oKSwhZnx8IXApcmV0dXJuO2xldCBoPW5iKGQpLGc9bmIoby5jbGllbnRXaWR0aC0odStmKSksbT17cm9vdE1hcmdpbjotaCtcInB4IFwiKy1nK1wicHggXCIrLW5iKG8uY2xpZW50SGVpZ2h0LShkK3ApKStcInB4IFwiKy1uYih1KStcInB4XCIsdGhyZXNob2xkOm5tKDAsbmcoMSxzKSl8fDF9LHY9ITA7ZnVuY3Rpb24gYihuKXtsZXQgcj1uWzBdLmludGVyc2VjdGlvblJhdGlvO2lmKHIhPT1zKXtpZighdilyZXR1cm4gaSgpO3I/aSghMSxyKTp0PXNldFRpbWVvdXQoKCk9PntpKCExLDFlLTcpfSwxZTMpfTEhPT1yfHxyWihjLGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpfHxpKCksdj0hMX10cnl7cj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoYix7Li4ubSxyb290Om8ub3duZXJEb2N1bWVudH0pfWNhdGNoKGUpe3I9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGIsbSl9ci5vYnNlcnZlKGUpfSghMCksYX0odSx0KTpudWxsLHA9LTEsaD1udWxsO2wmJihoPW5ldyBSZXNpemVPYnNlcnZlcihlPT57bGV0W3JdPWU7ciYmci50YXJnZXQ9PT11JiZoJiYoaC51bm9ic2VydmUobiksY2FuY2VsQW5pbWF0aW9uRnJhbWUocCkscD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt2YXIgZTtudWxsPT0oZT1oKXx8ZS5vYnNlcnZlKG4pfSkpLHQoKX0pLHUmJiFjJiZoLm9ic2VydmUodSksaC5vYnNlcnZlKG4pKTtsZXQgZz1jP3JCKGUpOm51bGw7cmV0dXJuIGMmJmZ1bmN0aW9uIG4oKXtsZXQgcj1yQihlKTtnJiYhclooZyxyKSYmdCgpLGc9cixvPXJlcXVlc3RBbmltYXRpb25GcmFtZShuKX0oKSx0KCksKCk9Pnt2YXIgZTtkLmZvckVhY2goZT0+e2EmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHQpLGkmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQpfSksbnVsbD09Znx8ZigpLG51bGw9PShlPWgpfHxlLmRpc2Nvbm5lY3QoKSxoPW51bGwsYyYmY2FuY2VsQW5pbWF0aW9uRnJhbWUobyl9fWxldCByWD1lPT4oe25hbWU6XCJhcnJvd1wiLG9wdGlvbnM6ZSxhc3luYyBmbihuKXtsZXR7eDp0LHk6cixwbGFjZW1lbnQ6byxyZWN0czphLHBsYXRmb3JtOmksZWxlbWVudHM6bCxtaWRkbGV3YXJlRGF0YTpzfT1uLHtlbGVtZW50OmMscGFkZGluZzp1PTB9PW5qKGUsbil8fHt9O2lmKG51bGw9PWMpcmV0dXJue307bGV0IGQ9bk4odSksZj17eDp0LHk6cn0scD1uTyhuRShvKSksaD1uQyhwKSxnPWF3YWl0IGkuZ2V0RGltZW5zaW9ucyhjKSxtPVwieVwiPT09cCx2PW0/XCJjbGllbnRIZWlnaHRcIjpcImNsaWVudFdpZHRoXCIsYj1hLnJlZmVyZW5jZVtoXSthLnJlZmVyZW5jZVtwXS1mW3BdLWEuZmxvYXRpbmdbaF0seT1mW3BdLWEucmVmZXJlbmNlW3BdLHg9YXdhaXQgKG51bGw9PWkuZ2V0T2Zmc2V0UGFyZW50P3ZvaWQgMDppLmdldE9mZnNldFBhcmVudChjKSksdz14P3hbdl06MDt3JiZhd2FpdCAobnVsbD09aS5pc0VsZW1lbnQ/dm9pZCAwOmkuaXNFbGVtZW50KHgpKXx8KHc9bC5mbG9hdGluZ1t2XXx8YS5mbG9hdGluZ1toXSk7bGV0IGo9dy8yLWdbaF0vMi0xLGs9bmcoZFttP1widG9wXCI6XCJsZWZ0XCJdLGopLEE9bmcoZFttP1wiYm90dG9tXCI6XCJyaWdodFwiXSxqKSxPPXctZ1toXS1BLEM9dy8yLWdbaF0vMisoYi8yLXkvMiksUz1ubShrLG5nKEMsTykpLEU9IXMuYXJyb3cmJm51bGwhPW5BKG8pJiZDIT09UyYmYS5yZWZlcmVuY2VbaF0vMi0oQzxrP2s6QSktZ1toXS8yPDAsXz1FP0M8az9DLWs6Qy1POjA7cmV0dXJue1twXTpmW3BdK18sZGF0YTp7W3BdOlMsY2VudGVyT2Zmc2V0OkMtUy1fLC4uLkUmJnthbGlnbm1lbnRPZmZzZXQ6X319LHJlc2V0OkV9fX0pO3ZhciBySz1cInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQ/Qy51c2VMYXlvdXRFZmZlY3Q6ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIHJRKGUsbil7bGV0IHQscixvO2lmKGU9PT1uKXJldHVybiEwO2lmKHR5cGVvZiBlIT10eXBlb2YgbilyZXR1cm4hMTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlLnRvU3RyaW5nKCk9PT1uLnRvU3RyaW5nKCkpcmV0dXJuITA7aWYoZSYmbiYmXCJvYmplY3RcIj09dHlwZW9mIGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKCh0PWUubGVuZ3RoKSE9PW4ubGVuZ3RoKXJldHVybiExO2ZvcihyPXQ7MCE9ci0tOylpZighclEoZVtyXSxuW3JdKSlyZXR1cm4hMTtyZXR1cm4hMH1pZigodD0obz1PYmplY3Qua2V5cyhlKSkubGVuZ3RoKSE9PU9iamVjdC5rZXlzKG4pLmxlbmd0aClyZXR1cm4hMTtmb3Iocj10OzAhPXItLTspaWYoISh7fSkuaGFzT3duUHJvcGVydHkuY2FsbChuLG9bcl0pKXJldHVybiExO2ZvcihyPXQ7MCE9ci0tOyl7bGV0IHQ9b1tyXTtpZigoXCJfb3duZXJcIiE9PXR8fCFlLiQkdHlwZW9mKSYmIXJRKGVbdF0sblt0XSkpcmV0dXJuITF9cmV0dXJuITB9cmV0dXJuIGUhPWUmJm4hPW59ZnVuY3Rpb24gckcoZSl7cmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIHdpbmRvdz8xOihlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdykuZGV2aWNlUGl4ZWxSYXRpb3x8MX1mdW5jdGlvbiBySihlLG4pe2xldCB0PXJHKGUpO3JldHVybiBNYXRoLnJvdW5kKG4qdCkvdH1mdW5jdGlvbiByMChlKXtsZXQgbj1DLnVzZVJlZihlKTtyZXR1cm4gcksoKCk9PntuLmN1cnJlbnQ9ZX0pLG59ZnVuY3Rpb24gcjEoZSxuLHQpe2xldCByPVwiaW5saW5lLXN0YXJ0XCI9PT1lfHxcImlubGluZS1lbmRcIj09PWU7cmV0dXJuKHt0b3A6XCJ0b3BcIixyaWdodDpyP3Q/XCJpbmxpbmUtc3RhcnRcIjpcImlubGluZS1lbmRcIjpcInJpZ2h0XCIsYm90dG9tOlwiYm90dG9tXCIsbGVmdDpyP3Q/XCJpbmxpbmUtZW5kXCI6XCJpbmxpbmUtc3RhcnRcIjpcImxlZnRcIn0pW25dfWZ1bmN0aW9uIHIyKGUsbix0KXtsZXR7cmVjdHM6cixwbGFjZW1lbnQ6b309ZTtyZXR1cm57c2lkZTpyMShuLG5rKG8pLHQpLGFsaWduOm5BKG8pfHxcImNlbnRlclwiLGFuY2hvcjp7d2lkdGg6ci5yZWZlcmVuY2Uud2lkdGgsaGVpZ2h0OnIucmVmZXJlbmNlLmhlaWdodH0scG9zaXRpb25lcjp7d2lkdGg6ci5mbG9hdGluZy53aWR0aCxoZWlnaHQ6ci5mbG9hdGluZy5oZWlnaHR9fX1mdW5jdGlvbiByNChlKXt2YXIgbix0LHIsbyxhLGksbCxzLGMsdSxkLGYscCxoLGcsbSx2O2xldHthbmNob3I6Yixwb3NpdGlvbk1ldGhvZDp5PVwiYWJzb2x1dGVcIixzaWRlOng9XCJib3R0b21cIixzaWRlT2Zmc2V0Onc9MCxhbGlnbjpqPVwiY2VudGVyXCIsYWxpZ25PZmZzZXQ6az0wLGNvbGxpc2lvbkJvdW5kYXJ5OkEsY29sbGlzaW9uUGFkZGluZzpPPTUsc3RpY2t5OlM9ITEsYXJyb3dQYWRkaW5nOl89NSx0cmFja0FuY2hvcjpQPSEwLGtlZXBNb3VudGVkOno9ITEsZmxvYXRpbmdSb290Q29udGV4dDpMLG1vdW50ZWQ6Uixjb2xsaXNpb25Bdm9pZGFuY2U6TixzaGlmdENyb3NzQXhpczpEPSExLG5vZGVJZDpCLGFkYXB0aXZlT3JpZ2luOk19PWUsST1OLnNpZGV8fFwiZmxpcFwiLEg9Ti5hbGlnbnx8XCJmbGlwXCIsVT1OLmZhbGxiYWNrQXhpc1NpZGV8fFwiZW5kXCIsVj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBiP2I6dm9pZCAwLHE9VChWKSwkPVY/cTpiLFo9ZUEoYiksWD1cInJ0bFwiPT09bjYoKSxLPXt0b3A6XCJ0b3BcIixyaWdodDpcInJpZ2h0XCIsYm90dG9tOlwiYm90dG9tXCIsbGVmdDpcImxlZnRcIixcImlubGluZS1lbmRcIjpYP1wibGVmdFwiOlwicmlnaHRcIixcImlubGluZS1zdGFydFwiOlg/XCJyaWdodFwiOlwibGVmdFwifVt4XSxRPVwiY2VudGVyXCI9PT1qP0s6YCR7S30tJHtqfWAsRz17Ym91bmRhcnk6XCJjbGlwcGluZy1hbmNlc3RvcnNcIj09PUE/XCJjbGlwcGluZ0FuY2VzdG9yc1wiOkEscGFkZGluZzpPfSxKPUMudXNlUmVmKG51bGwpLGVuPWVBKHcpLGV0PWVBKGspLGVyPVwiZnVuY3Rpb25cIiE9dHlwZW9mIHc/dzowLGVvPVsobj1lPT57bGV0IG49cjIoZSx4LFgpLHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZW4uY3VycmVudD9lbi5jdXJyZW50KG4pOmVuLmN1cnJlbnQscj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBldC5jdXJyZW50P2V0LmN1cnJlbnQobik6ZXQuY3VycmVudDtyZXR1cm57bWFpbkF4aXM6dCxjcm9zc0F4aXM6cixhbGlnbm1lbnRBeGlzOnJ9fSx0PVtlcixcImZ1bmN0aW9uXCIhPXR5cGVvZiBrP2s6MCxYLHhdLHsuLi4odm9pZCAwPT09KHI9bikmJihyPTApLHtuYW1lOlwib2Zmc2V0XCIsb3B0aW9uczpyLGFzeW5jIGZuKGUpe3ZhciBuLHQ7bGV0e3g6byx5OmEscGxhY2VtZW50OmksbWlkZGxld2FyZURhdGE6bH09ZSxzPWF3YWl0IHJ6KGUscik7cmV0dXJuIGk9PT0obnVsbD09KG49bC5vZmZzZXQpP3ZvaWQgMDpuLnBsYWNlbWVudCkmJm51bGwhPSh0PWwuYXJyb3cpJiZ0LmFsaWdubWVudE9mZnNldD97fTp7eDpvK3MueCx5OmErcy55LGRhdGE6ey4uLnMscGxhY2VtZW50Oml9fX19KSxvcHRpb25zOltuLHRdfSldLGVhPVwibm9uZVwiPT09SCYmXCJzaGlmdFwiIT09SSxlaT0hZWEmJihTfHxEfHxcInNoaWZ0XCI9PT1JKSxlbD1cIm5vbmVcIj09PUk/bnVsbDp7Li4ue25hbWU6XCJmbGlwXCIsb3B0aW9uczppPW89ey4uLkcsbWFpbkF4aXM6IUQmJlwiZmxpcFwiPT09SSxjcm9zc0F4aXM6XCJmbGlwXCI9PT1IJiZcImFsaWdubWVudFwiLGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb246VX0sYXN5bmMgZm4oZSl7dmFyIG4sdCxyLG8sYTtsZXR7cGxhY2VtZW50OmwsbWlkZGxld2FyZURhdGE6cyxyZWN0czpjLGluaXRpYWxQbGFjZW1lbnQ6dSxwbGF0Zm9ybTpkLGVsZW1lbnRzOmZ9PWUse21haW5BeGlzOnA9ITAsY3Jvc3NBeGlzOmg9ITAsZmFsbGJhY2tQbGFjZW1lbnRzOmcsZmFsbGJhY2tTdHJhdGVneTptPVwiYmVzdEZpdFwiLGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb246dj1cIm5vbmVcIixmbGlwQWxpZ25tZW50OmI9ITAsLi4ueX09bmooaSxlKTtpZihudWxsIT0obj1zLmFycm93KSYmbi5hbGlnbm1lbnRPZmZzZXQpcmV0dXJue307bGV0IHg9bmsobCksdz1uRSh1KSxqPW5rKHUpPT09dSxrPWF3YWl0IChudWxsPT1kLmlzUlRMP3ZvaWQgMDpkLmlzUlRMKGYuZmxvYXRpbmcpKSxBPWd8fChqfHwhYj9bblIodSldOmZ1bmN0aW9uKGUpe2xldCBuPW5SKGUpO3JldHVybltuXyhlKSxuLG5fKG4pXX0odSkpLE89XCJub25lXCIhPT12OyFnJiZPJiZBLnB1c2goLi4uZnVuY3Rpb24oZSxuLHQscil7bGV0IG89bkEoZSksYT1mdW5jdGlvbihlLG4sdCl7c3dpdGNoKGUpe2Nhc2VcInRvcFwiOmNhc2VcImJvdHRvbVwiOmlmKHQpcmV0dXJuIG4/bno6blA7cmV0dXJuIG4/blA6bno7Y2FzZVwibGVmdFwiOmNhc2VcInJpZ2h0XCI6cmV0dXJuIG4/bkw6blQ7ZGVmYXVsdDpyZXR1cm5bXX19KG5rKGUpLFwic3RhcnRcIj09PXQscik7cmV0dXJuIG8mJihhPWEubWFwKGU9PmUrXCItXCIrbyksbiYmKGE9YS5jb25jYXQoYS5tYXAobl8pKSkpLGF9KHUsYix2LGspKTtsZXQgQz1bdSwuLi5BXSxTPWF3YWl0IHJTKGUseSksRT1bXSxfPShudWxsPT0odD1zLmZsaXApP3ZvaWQgMDp0Lm92ZXJmbG93cyl8fFtdO2lmKHAmJkUucHVzaChTW3hdKSxoKXtsZXQgZT1mdW5jdGlvbihlLG4sdCl7dm9pZCAwPT09dCYmKHQ9ITEpO2xldCByPW5BKGUpLG89bk8obkUoZSkpLGE9bkMobyksaT1cInhcIj09PW8/cj09PSh0P1wiZW5kXCI6XCJzdGFydFwiKT9cInJpZ2h0XCI6XCJsZWZ0XCI6XCJzdGFydFwiPT09cj9cImJvdHRvbVwiOlwidG9wXCI7cmV0dXJuIG4ucmVmZXJlbmNlW2FdPm4uZmxvYXRpbmdbYV0mJihpPW5SKGkpKSxbaSxuUihpKV19KGwsYyxrKTtFLnB1c2goU1tlWzBdXSxTW2VbMV1dKX1pZihfPVsuLi5fLHtwbGFjZW1lbnQ6bCxvdmVyZmxvd3M6RX1dLCFFLmV2ZXJ5KGU9PmU8PTApKXtsZXQgZT0oKG51bGw9PShyPXMuZmxpcCk/dm9pZCAwOnIuaW5kZXgpfHwwKSsxLG49Q1tlXTtpZihuJiYoXCJhbGlnbm1lbnRcIiE9PWh8fHc9PT1uRShuKXx8Xy5ldmVyeShlPT5lLm92ZXJmbG93c1swXT4wJiZuRShlLnBsYWNlbWVudCk9PT13KSkpcmV0dXJue2RhdGE6e2luZGV4OmUsb3ZlcmZsb3dzOl99LHJlc2V0OntwbGFjZW1lbnQ6bn19O2xldCB0PW51bGw9PShvPV8uZmlsdGVyKGU9PmUub3ZlcmZsb3dzWzBdPD0wKS5zb3J0KChlLG4pPT5lLm92ZXJmbG93c1sxXS1uLm92ZXJmbG93c1sxXSlbMF0pP3ZvaWQgMDpvLnBsYWNlbWVudDtpZighdClzd2l0Y2gobSl7Y2FzZVwiYmVzdEZpdFwiOntsZXQgZT1udWxsPT0oYT1fLmZpbHRlcihlPT57aWYoTyl7bGV0IG49bkUoZS5wbGFjZW1lbnQpO3JldHVybiBuPT09d3x8XCJ5XCI9PT1ufXJldHVybiEwfSkubWFwKGU9PltlLnBsYWNlbWVudCxlLm92ZXJmbG93cy5maWx0ZXIoZT0+ZT4wKS5yZWR1Y2UoKGUsbik9PmUrbiwwKV0pLnNvcnQoKGUsbik9PmVbMV0tblsxXSlbMF0pP3ZvaWQgMDphWzBdO2UmJih0PWUpO2JyZWFrfWNhc2VcImluaXRpYWxQbGFjZW1lbnRcIjp0PXV9aWYobCE9PXQpcmV0dXJue3Jlc2V0OntwbGFjZW1lbnQ6dH19fXJldHVybnt9fX0sb3B0aW9uczpbbyxhXX0sZXM9ZWE/bnVsbDoobD1lPT57dmFyIG4sdCxyO2xldCBvPWVRKGUuZWxlbWVudHMuZmxvYXRpbmcpLmRvY3VtZW50RWxlbWVudDtyZXR1cm57Li4uRyxyb290Qm91bmRhcnk6RD97eDowLHk6MCx3aWR0aDpvLmNsaWVudFdpZHRoLGhlaWdodDpvLmNsaWVudEhlaWdodH06dm9pZCAwLG1haW5BeGlzOlwibm9uZVwiIT09SCxjcm9zc0F4aXM6ZWksbGltaXRlcjpTfHxEP3ZvaWQgMDp7Li4uKHZvaWQgMD09PShyPW49KCk9PntpZighSi5jdXJyZW50KXJldHVybnt9O2xldHtoZWlnaHQ6ZX09Si5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybntvZmZzZXQ6ZS8yKyhcIm51bWJlclwiPT10eXBlb2YgTz9POjApfX0pJiYocj17fSkse29wdGlvbnM6cixmbihlKXtsZXR7eDpuLHk6dCxwbGFjZW1lbnQ6byxyZWN0czphLG1pZGRsZXdhcmVEYXRhOml9PWUse29mZnNldDpsPTAsbWFpbkF4aXM6cz0hMCxjcm9zc0F4aXM6Yz0hMH09bmoocixlKSx1PXt4Om4seTp0fSxkPW5FKG8pLGY9bk8oZCkscD11W2ZdLGg9dVtkXSxnPW5qKGwsZSksbT1cIm51bWJlclwiPT10eXBlb2YgZz97bWFpbkF4aXM6Zyxjcm9zc0F4aXM6MH06e21haW5BeGlzOjAsY3Jvc3NBeGlzOjAsLi4uZ307aWYocyl7bGV0IGU9XCJ5XCI9PT1mP1wiaGVpZ2h0XCI6XCJ3aWR0aFwiLG49YS5yZWZlcmVuY2VbZl0tYS5mbG9hdGluZ1tlXSttLm1haW5BeGlzLHQ9YS5yZWZlcmVuY2VbZl0rYS5yZWZlcmVuY2VbZV0tbS5tYWluQXhpcztwPG4/cD1uOnA+dCYmKHA9dCl9aWYoYyl7dmFyIHYsYjtsZXQgZT1cInlcIj09PWY/XCJ3aWR0aFwiOlwiaGVpZ2h0XCIsbj1yUC5oYXMobmsobykpLHQ9YS5yZWZlcmVuY2VbZF0tYS5mbG9hdGluZ1tlXSsobiYmKG51bGw9PSh2PWkub2Zmc2V0KT92b2lkIDA6dltkXSl8fDApKyhuPzA6bS5jcm9zc0F4aXMpLHI9YS5yZWZlcmVuY2VbZF0rYS5yZWZlcmVuY2VbZV0rKG4/MDoobnVsbD09KGI9aS5vZmZzZXQpP3ZvaWQgMDpiW2RdKXx8MCktKG4/bS5jcm9zc0F4aXM6MCk7aDx0P2g9dDpoPnImJihoPXIpfXJldHVybntbZl06cCxbZF06aH19fSksb3B0aW9uczpbbix0XX19fSxzPVtHLFMsRCxPLEhdLHsuLi4odm9pZCAwPT09KGM9bCkmJihjPXt9KSx7bmFtZTpcInNoaWZ0XCIsb3B0aW9uczpjLGFzeW5jIGZuKGUpe2xldHt4Om4seTp0LHBsYWNlbWVudDpyfT1lLHttYWluQXhpczpvPSEwLGNyb3NzQXhpczphPSExLGxpbWl0ZXI6aT17Zm46ZT0+e2xldHt4Om4seTp0fT1lO3JldHVybnt4Om4seTp0fX19LC4uLmx9PW5qKGMsZSkscz17eDpuLHk6dH0sdT1hd2FpdCByUyhlLGwpLGQ9bkUobmsocikpLGY9bk8oZCkscD1zW2ZdLGg9c1tkXTtpZihvKXtsZXQgZT1cInlcIj09PWY/XCJ0b3BcIjpcImxlZnRcIixuPVwieVwiPT09Zj9cImJvdHRvbVwiOlwicmlnaHRcIix0PXArdVtlXSxyPXAtdVtuXTtwPW5tKHQsbmcocCxyKSl9aWYoYSl7bGV0IGU9XCJ5XCI9PT1kP1widG9wXCI6XCJsZWZ0XCIsbj1cInlcIj09PWQ/XCJib3R0b21cIjpcInJpZ2h0XCIsdD1oK3VbZV0scj1oLXVbbl07aD1ubSh0LG5nKGgscikpfWxldCBnPWkuZm4oey4uLmUsW2ZdOnAsW2RdOmh9KTtyZXR1cm57Li4uZyxkYXRhOnt4OmcueC1uLHk6Zy55LXQsZW5hYmxlZDp7W2ZdOm8sW2RdOmF9fX19fSksb3B0aW9uczpbbCxzXX0pO1wic2hpZnRcIj09PUl8fFwic2hpZnRcIj09PUh8fFwiY2VudGVyXCI9PT1qP2VvLnB1c2goZXMsZWwpOmVvLnB1c2goZWwsZXMpLGVvLnB1c2goey4uLntuYW1lOlwic2l6ZVwiLG9wdGlvbnM6Zj11PXsuLi5HLGFwcGx5KHtlbGVtZW50czp7ZmxvYXRpbmc6ZX0scmVjdHM6e3JlZmVyZW5jZTpufSxhdmFpbGFibGVXaWR0aDp0LGF2YWlsYWJsZUhlaWdodDpyfSl7T2JqZWN0LmVudHJpZXMoe1wiLS1hdmFpbGFibGUtd2lkdGhcIjpgJHt0fXB4YCxcIi0tYXZhaWxhYmxlLWhlaWdodFwiOmAke3J9cHhgLFwiLS1hbmNob3Itd2lkdGhcIjpgJHtuLndpZHRofXB4YCxcIi0tYW5jaG9yLWhlaWdodFwiOmAke24uaGVpZ2h0fXB4YH0pLmZvckVhY2goKFtuLHRdKT0+e2Uuc3R5bGUuc2V0UHJvcGVydHkobix0KX0pfX0sYXN5bmMgZm4oZSl7dmFyIG4sdDtsZXQgcixvLHtwbGFjZW1lbnQ6YSxyZWN0czppLHBsYXRmb3JtOmwsZWxlbWVudHM6c309ZSx7YXBwbHk6Yz0oKT0+e30sLi4udX09bmooZixlKSxkPWF3YWl0IHJTKGUsdSkscD1uayhhKSxoPW5BKGEpLGc9XCJ5XCI9PT1uRShhKSx7d2lkdGg6bSxoZWlnaHQ6dn09aS5mbG9hdGluZztcInRvcFwiPT09cHx8XCJib3R0b21cIj09PXA/KHI9cCxvPWg9PT0oYXdhaXQgKG51bGw9PWwuaXNSVEw/dm9pZCAwOmwuaXNSVEwocy5mbG9hdGluZykpP1wic3RhcnRcIjpcImVuZFwiKT9cImxlZnRcIjpcInJpZ2h0XCIpOihvPXAscj1cImVuZFwiPT09aD9cInRvcFwiOlwiYm90dG9tXCIpO2xldCBiPXYtZC50b3AtZC5ib3R0b20seT1tLWQubGVmdC1kLnJpZ2h0LHg9bmcodi1kW3JdLGIpLHc9bmcobS1kW29dLHkpLGo9IWUubWlkZGxld2FyZURhdGEuc2hpZnQsaz14LEE9dztpZihudWxsIT0obj1lLm1pZGRsZXdhcmVEYXRhLnNoaWZ0KSYmbi5lbmFibGVkLngmJihBPXkpLG51bGwhPSh0PWUubWlkZGxld2FyZURhdGEuc2hpZnQpJiZ0LmVuYWJsZWQueSYmKGs9YiksaiYmIWgpe2xldCBlPW5tKGQubGVmdCwwKSxuPW5tKGQucmlnaHQsMCksdD1ubShkLnRvcCwwKSxyPW5tKGQuYm90dG9tLDApO2c/QT1tLTIqKDAhPT1lfHwwIT09bj9lK246bm0oZC5sZWZ0LGQucmlnaHQpKTprPXYtMiooMCE9PXR8fDAhPT1yP3QrcjpubShkLnRvcCxkLmJvdHRvbSkpfWF3YWl0IGMoey4uLmUsYXZhaWxhYmxlV2lkdGg6QSxhdmFpbGFibGVIZWlnaHQ6a30pO2xldCBPPWF3YWl0IGwuZ2V0RGltZW5zaW9ucyhzLmZsb2F0aW5nKTtyZXR1cm4gbSE9PU8ud2lkdGh8fHYhPT1PLmhlaWdodD97cmVzZXQ6e3JlY3RzOiEwfX06e319fSxvcHRpb25zOlt1LGRdfSwocD0oKT0+KHtlbGVtZW50OkouY3VycmVudHx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxwYWRkaW5nOl99KSxoPVtfXSx7bmFtZTpcImFycm93XCIsb3B0aW9uczpwLGZuKGUpe2xldHtlbGVtZW50Om4scGFkZGluZzp0fT1wKGUpO3JldHVybiBuJiYoe30pLmhhc093blByb3BlcnR5LmNhbGwobixcImN1cnJlbnRcIik/bnVsbCE9bi5jdXJyZW50P3JYKHtlbGVtZW50Om4uY3VycmVudCxwYWRkaW5nOnR9KS5mbihlKTp7fTpuP3JYKHtlbGVtZW50Om4scGFkZGluZzp0fSkuZm4oZSk6e319LG9wdGlvbnM6W3AsaF19KSx7Li4uKHZvaWQgMD09PSh2PWcpJiYodj17fSkse25hbWU6XCJoaWRlXCIsb3B0aW9uczp2LGFzeW5jIGZuKGUpe2xldHtyZWN0czpufT1lLHtzdHJhdGVneTp0PVwicmVmZXJlbmNlSGlkZGVuXCIsLi4ucn09bmoodixlKTtzd2l0Y2godCl7Y2FzZVwicmVmZXJlbmNlSGlkZGVuXCI6e2xldCB0PXJFKGF3YWl0IHJTKGUsey4uLnIsZWxlbWVudENvbnRleHQ6XCJyZWZlcmVuY2VcIn0pLG4ucmVmZXJlbmNlKTtyZXR1cm57ZGF0YTp7cmVmZXJlbmNlSGlkZGVuT2Zmc2V0czp0LHJlZmVyZW5jZUhpZGRlbjpyXyh0KX19fWNhc2VcImVzY2FwZWRcIjp7bGV0IHQ9ckUoYXdhaXQgclMoZSx7Li4ucixhbHRCb3VuZGFyeTohMH0pLG4uZmxvYXRpbmcpO3JldHVybntkYXRhOntlc2NhcGVkT2Zmc2V0czp0LGVzY2FwZWQ6cl8odCl9fX1kZWZhdWx0OnJldHVybnt9fX19KSxvcHRpb25zOltnLG1dfSx7bmFtZTpcInRyYW5zZm9ybU9yaWdpblwiLGZuKGUpe2xldHtlbGVtZW50czpuLG1pZGRsZXdhcmVEYXRhOnQscGxhY2VtZW50OnIscmVjdHM6byx5OmF9PWUsaT1uayhyKSxsPW5FKGkpLHM9Si5jdXJyZW50LGM9dC5hcnJvdz8ueHx8MCx1PXQuYXJyb3c/Lnl8fDAsZD1zPy5jbGllbnRXaWR0aHx8MCxmPXM/LmNsaWVudEhlaWdodHx8MCxwPWMrZC8yLGg9dStmLzIsZz1NYXRoLmFicyh0LnNoaWZ0Py55fHwwKSxtPW8ucmVmZXJlbmNlLmhlaWdodC8yLHY9Zz4oXCJmdW5jdGlvblwiPT10eXBlb2Ygdz93KHIyKGUseCxYKSk6dyksYj17dG9wOmAke3B9cHggY2FsYygxMDAlICsgJHt3fXB4KWAsYm90dG9tOmAke3B9cHggJHstd31weGAsbGVmdDpgY2FsYygxMDAlICsgJHt3fXB4KSAke2h9cHhgLHJpZ2h0OmAkey13fXB4ICR7aH1weGB9W2ldLHk9YCR7cH1weCAke28ucmVmZXJlbmNlLnkrbS1hfXB4YDtyZXR1cm4gbi5mbG9hdGluZy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdHJhbnNmb3JtLW9yaWdpblwiLGVpJiZcInlcIj09PWwmJnY/eTpiKSx7fX19LE0pO2xldCBlYz1MOyFSJiZMJiYoZWM9ey4uLkwsZWxlbWVudHM6e3JlZmVyZW5jZTpudWxsLGZsb2F0aW5nOm51bGwsZG9tUmVmZXJlbmNlOm51bGx9fSk7bGV0IGV1PUMudXNlTWVtbygoKT0+KHtlbGVtZW50UmVzaXplOlAmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBSZXNpemVPYnNlcnZlcixsYXlvdXRTaGlmdDpQJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJ9KSxbUF0pLHtyZWZzOmVkLGVsZW1lbnRzOmVmLHg6ZXAseTplaCxtaWRkbGV3YXJlRGF0YTplZyx1cGRhdGU6ZW0scGxhY2VtZW50OmV2LGNvbnRleHQ6ZWIsaXNQb3NpdGlvbmVkOmV5LGZsb2F0aW5nU3R5bGVzOmV4fT1mdW5jdGlvbihlPXt9KXtsZXR7bm9kZUlkOm59PWUsdD1ZKHsuLi5lLGVsZW1lbnRzOntyZWZlcmVuY2U6bnVsbCxmbG9hdGluZzpudWxsLC4uLmUuZWxlbWVudHN9fSkscj1lLnJvb3RDb250ZXh0fHx0LG89ci5lbGVtZW50cyxbYSxpXT1DLnVzZVN0YXRlKG51bGwpLFtsLHNdPUMudXNlU3RhdGUobnVsbCksYz1vPy5kb21SZWZlcmVuY2V8fGEsdT1DLnVzZVJlZihudWxsKSxkPVcoKTtGKCgpPT57YyYmKHUuY3VycmVudD1jKX0sW2NdKTtsZXQgZj1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT17fSk7bGV0e3BsYWNlbWVudDpuPVwiYm90dG9tXCIsc3RyYXRlZ3k6dD1cImFic29sdXRlXCIsbWlkZGxld2FyZTpyPVtdLHBsYXRmb3JtOm8sZWxlbWVudHM6e3JlZmVyZW5jZTphLGZsb2F0aW5nOml9PXt9LHRyYW5zZm9ybTpsPSEwLHdoaWxlRWxlbWVudHNNb3VudGVkOnMsb3BlbjpjfT1lLFt1LGRdPUMudXNlU3RhdGUoe3g6MCx5OjAsc3RyYXRlZ3k6dCxwbGFjZW1lbnQ6bixtaWRkbGV3YXJlRGF0YTp7fSxpc1Bvc2l0aW9uZWQ6ITF9KSxbZixwXT1DLnVzZVN0YXRlKHIpO3JRKGYscil8fHAocik7bGV0W2gsZ109Qy51c2VTdGF0ZShudWxsKSxbbSx2XT1DLnVzZVN0YXRlKG51bGwpLGI9Qy51c2VDYWxsYmFjayhlPT57ZSE9PWouY3VycmVudCYmKGouY3VycmVudD1lLGcoZSkpfSxbXSkseT1DLnVzZUNhbGxiYWNrKGU9PntlIT09ay5jdXJyZW50JiYoay5jdXJyZW50PWUsdihlKSl9LFtdKSx4PWF8fGgsdz1pfHxtLGo9Qy51c2VSZWYobnVsbCksaz1DLnVzZVJlZihudWxsKSxBPUMudXNlUmVmKHUpLE89bnVsbCE9cyxTPXIwKHMpLF89cjAobyksUD1yMChjKSx6PUMudXNlQ2FsbGJhY2soKCk9PntpZighai5jdXJyZW50fHwhay5jdXJyZW50KXJldHVybjtsZXQgZT17cGxhY2VtZW50Om4sc3RyYXRlZ3k6dCxtaWRkbGV3YXJlOmZ9O18uY3VycmVudCYmKGUucGxhdGZvcm09Xy5jdXJyZW50KSwoKGUsbix0KT0+e2xldCByPW5ldyBNYXAsbz17cGxhdGZvcm06ciQsLi4udH0sYT17Li4uby5wbGF0Zm9ybSxfYzpyfTtyZXR1cm4gckMoZSxuLHsuLi5vLHBsYXRmb3JtOmF9KX0pKGouY3VycmVudCxrLmN1cnJlbnQsZSkudGhlbihlPT57bGV0IG49ey4uLmUsaXNQb3NpdGlvbmVkOiExIT09UC5jdXJyZW50fTtMLmN1cnJlbnQmJiFyUShBLmN1cnJlbnQsbikmJihBLmN1cnJlbnQ9bixFLmZsdXNoU3luYygoKT0+e2Qobil9KSl9KX0sW2Ysbix0LF8sUF0pO3JLKCgpPT57ITE9PT1jJiZBLmN1cnJlbnQuaXNQb3NpdGlvbmVkJiYoQS5jdXJyZW50LmlzUG9zaXRpb25lZD0hMSxkKGU9Pih7Li4uZSxpc1Bvc2l0aW9uZWQ6ITF9KSkpfSxbY10pO2xldCBMPUMudXNlUmVmKCExKTtySygoKT0+KEwuY3VycmVudD0hMCwoKT0+e0wuY3VycmVudD0hMX0pLFtdKSxySygoKT0+e2lmKHgmJihqLmN1cnJlbnQ9eCksdyYmKGsuY3VycmVudD13KSx4JiZ3KXtpZihTLmN1cnJlbnQpcmV0dXJuIFMuY3VycmVudCh4LHcseik7eigpfX0sW3gsdyx6LFMsT10pO2xldCBUPUMudXNlTWVtbygoKT0+KHtyZWZlcmVuY2U6aixmbG9hdGluZzprLHNldFJlZmVyZW5jZTpiLHNldEZsb2F0aW5nOnl9KSxbYix5XSksUj1DLnVzZU1lbW8oKCk9Pih7cmVmZXJlbmNlOngsZmxvYXRpbmc6d30pLFt4LHddKSxOPUMudXNlTWVtbygoKT0+e2xldCBlPXtwb3NpdGlvbjp0LGxlZnQ6MCx0b3A6MH07aWYoIVIuZmxvYXRpbmcpcmV0dXJuIGU7bGV0IG49ckooUi5mbG9hdGluZyx1LngpLHI9ckooUi5mbG9hdGluZyx1LnkpO3JldHVybiBsP3suLi5lLHRyYW5zZm9ybTpcInRyYW5zbGF0ZShcIituK1wicHgsIFwiK3IrXCJweClcIiwuLi5yRyhSLmZsb2F0aW5nKT49MS41JiZ7d2lsbENoYW5nZTpcInRyYW5zZm9ybVwifX06e3Bvc2l0aW9uOnQsbGVmdDpuLHRvcDpyfX0sW3QsbCxSLmZsb2F0aW5nLHUueCx1LnldKTtyZXR1cm4gQy51c2VNZW1vKCgpPT4oey4uLnUsdXBkYXRlOnoscmVmczpULGVsZW1lbnRzOlIsZmxvYXRpbmdTdHlsZXM6Tn0pLFt1LHosVCxSLE5dKX0oey4uLmUsZWxlbWVudHM6ey4uLm8sLi4ubCYme3JlZmVyZW5jZTpsfX19KSxwPUMudXNlQ2FsbGJhY2soZT0+e2xldCBuPWVlKGUpP3tnZXRCb3VuZGluZ0NsaWVudFJlY3Q6KCk9PmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZ2V0Q2xpZW50UmVjdHM6KCk9PmUuZ2V0Q2xpZW50UmVjdHMoKSxjb250ZXh0RWxlbWVudDplfTplO3MobiksZi5yZWZzLnNldFJlZmVyZW5jZShuKX0sW2YucmVmc10pLGg9Qy51c2VDYWxsYmFjayhlPT57KGVlKGUpfHxudWxsPT09ZSkmJih1LmN1cnJlbnQ9ZSxpKGUpKSwoZWUoZi5yZWZzLnJlZmVyZW5jZS5jdXJyZW50KXx8bnVsbD09PWYucmVmcy5yZWZlcmVuY2UuY3VycmVudHx8bnVsbCE9PWUmJiFlZShlKSkmJmYucmVmcy5zZXRSZWZlcmVuY2UoZSl9LFtmLnJlZnNdKSxnPUMudXNlTWVtbygoKT0+KHsuLi5mLnJlZnMsc2V0UmVmZXJlbmNlOmgsc2V0UG9zaXRpb25SZWZlcmVuY2U6cCxkb21SZWZlcmVuY2U6dX0pLFtmLnJlZnMsaCxwXSksbT1DLnVzZU1lbW8oKCk9Pih7Li4uZi5lbGVtZW50cyxkb21SZWZlcmVuY2U6Y30pLFtmLmVsZW1lbnRzLGNdKSx2PUMudXNlTWVtbygoKT0+KHsuLi5mLC4uLnIscmVmczpnLGVsZW1lbnRzOm0sbm9kZUlkOm59KSxbZixnLG0sbixyXSk7cmV0dXJuIEYoKCk9PntyLmRhdGFSZWYuY3VycmVudC5mbG9hdGluZ0NvbnRleHQ9djtsZXQgZT1kPy5ub2Rlc1JlZi5jdXJyZW50LmZpbmQoZT0+ZS5pZD09PW4pO2UmJihlLmNvbnRleHQ9dil9KSxDLnVzZU1lbW8oKCk9Pih7Li4uZixjb250ZXh0OnYscmVmczpnLGVsZW1lbnRzOm19KSxbZixnLG0sdl0pfSh7cm9vdENvbnRleHQ6ZWMscGxhY2VtZW50OlEsbWlkZGxld2FyZTplbyxzdHJhdGVneTp5LHdoaWxlRWxlbWVudHNNb3VudGVkOno/dm9pZCAwOiguLi5lKT0+clkoLi4uZSxldSksbm9kZUlkOkJ9KSx7c2lkZVg6ZXcsc2lkZVk6ZWp9PWVnLmFkYXB0aXZlT3JpZ2lufHx7fSxlaz1DLnVzZU1lbW8oKCk9Pk0/e3Bvc2l0aW9uOnksW2V3XTpgJHtlcH1weGAsW2VqXTpgJHtlaH1weGB9OmV4LFtNLGV3LGVqLHksZXAsZWgsZXhdKSxlTz1DLnVzZVJlZihudWxsKTtGKCgpPT57aWYoIVIpcmV0dXJuO2xldCBlPVouY3VycmVudCxuPVwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZSgpOmUsdD0ocjUobik/bi5jdXJyZW50Om4pfHxudWxsO3QhPT1lTy5jdXJyZW50JiYoZWQuc2V0UG9zaXRpb25SZWZlcmVuY2UodCksZU8uY3VycmVudD10KX0sW1IsZWQsJCxaXSksQy51c2VFZmZlY3QoKCk9PntpZighUilyZXR1cm47bGV0IGU9Wi5jdXJyZW50O1wiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJnI1KGUpJiZlLmN1cnJlbnQhPT1lTy5jdXJyZW50JiYoZWQuc2V0UG9zaXRpb25SZWZlcmVuY2UoZS5jdXJyZW50KSxlTy5jdXJyZW50PWUuY3VycmVudCl9LFtSLGVkLCQsWl0pLEMudXNlRWZmZWN0KCgpPT57aWYoeiYmUiYmZWYuZG9tUmVmZXJlbmNlJiZlZi5mbG9hdGluZylyZXR1cm4gclkoZWYuZG9tUmVmZXJlbmNlLGVmLmZsb2F0aW5nLGVtLGV1KX0sW3osUixlZixlbSxldV0pO2xldCBlQz1yMSh4LG5rKGV2KSxYKSxlUz1uQShldil8fFwiY2VudGVyXCIsZUU9ISFlZy5oaWRlPy5yZWZlcmVuY2VIaWRkZW4sZV89Qy51c2VNZW1vKCgpPT4oe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6ZWcuYXJyb3c/LnksbGVmdDplZy5hcnJvdz8ueH0pLFtlZy5hcnJvd10pLGVQPWVnLmFycm93Py5jZW50ZXJPZmZzZXQhPT0wO3JldHVybiBDLnVzZU1lbW8oKCk9Pih7cG9zaXRpb25lclN0eWxlczplayxhcnJvd1N0eWxlczplXyxhcnJvd1JlZjpKLGFycm93VW5jZW50ZXJlZDplUCxzaWRlOmVDLGFsaWduOmVTLGFuY2hvckhpZGRlbjplRSxyZWZzOmVkLGNvbnRleHQ6ZWIsaXNQb3NpdGlvbmVkOmV5LHVwZGF0ZTplbX0pLFtlayxlXyxKLGVQLGVDLGVTLGVFLGVkLGViLGV5LGVtXSl9ZnVuY3Rpb24gcjUoZSl7cmV0dXJuIG51bGwhPWUmJlwiY3VycmVudFwiaW4gZX1mdW5jdGlvbiByMyhlKXtsZXR7Y2hpbGRyZW46bixlbGVtZW50c1JlZjp0LGxhYmVsc1JlZjpyLG9uTWFwQ2hhbmdlOm99PWUsYT1DLnVzZVJlZigwKSxpPVAocjkpLmN1cnJlbnQscz1QKHI2KS5jdXJyZW50LFtjLHVdPUMudXNlU3RhdGUoMCksZD1DLnVzZVJlZihjKSxmPVQoKGUsbik9PntzLnNldChlLG4/P251bGwpLGQuY3VycmVudCs9MSx1KGQuY3VycmVudCl9KSxwPVQoZT0+e3MuZGVsZXRlKGUpLGQuY3VycmVudCs9MSx1KGQuY3VycmVudCl9KSxoPUMudXNlTWVtbygoKT0+e2xldCBlPW5ldyBNYXA7cmV0dXJuIEFycmF5LmZyb20ocy5rZXlzKCkpLnNvcnQocjgpLmZvckVhY2goKG4sdCk9PntsZXQgcj1zLmdldChuKT8/e307ZS5zZXQobix7Li4ucixpbmRleDp0fSl9KSxlfSxbcyxjXSk7RigoKT0+e2QuY3VycmVudD09PWMmJih0LmN1cnJlbnQubGVuZ3RoIT09aC5zaXplJiYodC5jdXJyZW50Lmxlbmd0aD1oLnNpemUpLHImJnIuY3VycmVudC5sZW5ndGghPT1oLnNpemUmJihyLmN1cnJlbnQubGVuZ3RoPWguc2l6ZSkpLG8/LihoKX0sW28saCx0LHIsYyxkXSk7bGV0IGc9VChlPT4oaS5hZGQoZSksKCk9PntpLmRlbGV0ZShlKX0pKTtGKCgpPT57aS5mb3JFYWNoKGU9PmUoaCkpfSxbaSxoXSk7bGV0IG09Qy51c2VNZW1vKCgpPT4oe3JlZ2lzdGVyOmYsdW5yZWdpc3RlcjpwLHN1YnNjcmliZU1hcENoYW5nZTpnLGVsZW1lbnRzUmVmOnQsbGFiZWxzUmVmOnIsbmV4dEluZGV4UmVmOmF9KSxbZixwLGcsdCxyLGFdKTtyZXR1cm4oMCxsLmpzeCkodEMuUHJvdmlkZXIse3ZhbHVlOm0sY2hpbGRyZW46bn0pfWZ1bmN0aW9uIHI2KCl7cmV0dXJuIG5ldyBNYXB9ZnVuY3Rpb24gcjkoKXtyZXR1cm4gbmV3IFNldH1mdW5jdGlvbiByOChlLG4pe2xldCB0PWUuY29tcGFyZURvY3VtZW50UG9zaXRpb24obik7cmV0dXJuIHQmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkd8fHQmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlk/LTE6dCZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElOR3x8dCZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TPzE6MH1sZXQgcjc9Qy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7bGV0IHQse2N1dG91dDpyLC4uLm99PWU7aWYocil7bGV0IGU9cj8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dD1gcG9seWdvbihcbiAgICAgIDAlIDAlLFxuICAgICAgMTAwJSAwJSxcbiAgICAgIDEwMCUgMTAwJSxcbiAgICAgIDAlIDEwMCUsXG4gICAgICAwJSAwJSxcbiAgICAgICR7ZS5sZWZ0fXB4ICR7ZS50b3B9cHgsXG4gICAgICAke2UubGVmdH1weCAke2UuYm90dG9tfXB4LFxuICAgICAgJHtlLnJpZ2h0fXB4ICR7ZS5ib3R0b219cHgsXG4gICAgICAke2UucmlnaHR9cHggJHtlLnRvcH1weCxcbiAgICAgICR7ZS5sZWZ0fXB4ICR7ZS50b3B9cHhcbiAgICApYH1yZXR1cm4oMCxsLmpzeCkoXCJkaXZcIix7cmVmOm4scm9sZTpcInByZXNlbnRhdGlvblwiLFwiZGF0YS1iYXNlLXVpLWluZXJ0XCI6XCJcIiwuLi5vLHN0eWxlOntwb3NpdGlvbjpcImZpeGVkXCIsaW5zZXQ6MCx1c2VyU2VsZWN0Olwibm9uZVwiLFdlYmtpdFVzZXJTZWxlY3Q6XCJub25lXCIsY2xpcFBhdGg6dH19KX0pLG9lPUMuZm9yd2FyZFJlZihmdW5jdGlvbihlLG4pe3ZhciB0O2xldHthbmNob3I6cixwb3NpdGlvbk1ldGhvZDpvPVwiYWJzb2x1dGVcIixjbGFzc05hbWU6YSxyZW5kZXI6aSxzaWRlOnMsYWxpZ246YyxzaWRlT2Zmc2V0OnU9MCxhbGlnbk9mZnNldDpkPTAsY29sbGlzaW9uQm91bmRhcnk6Zj1cImNsaXBwaW5nLWFuY2VzdG9yc1wiLGNvbGxpc2lvblBhZGRpbmc6cD01LGFycm93UGFkZGluZzpoPTUsc3RpY2t5Omc9ITEsdHJhY2tBbmNob3I6bT0hMCxjb2xsaXNpb25Bdm9pZGFuY2U6dj1ubywuLi5ifT1lLHtvcGVuOnksc2V0T3Blbjp4LGZsb2F0aW5nUm9vdENvbnRleHQ6dyxzZXRQb3NpdGlvbmVyRWxlbWVudDpqLGl0ZW1Eb21FbGVtZW50czprLGl0ZW1MYWJlbHM6QSxtb3VudGVkOk8sbW9kYWw6UyxsYXN0T3BlbkNoYW5nZVJlYXNvbjpFLHBhcmVudDpfLHNldEhvdmVyRW5hYmxlZDpQLHRyaWdnZXJFbGVtZW50Onp9PW4wKCksTD1mdW5jdGlvbigpe2xldCBlPUMudXNlQ29udGV4dChyaik7aWYodm9pZCAwPT09ZSl0aHJvdyBFcnJvcihcIkJhc2UgVUk6IDxNZW51LlBvcnRhbD4gaXMgbWlzc2luZy5cIik7cmV0dXJuIGV9KCksVD1mdW5jdGlvbihlKXtsZXQgbj1IKCksdD1XKCkscj1xKCk7cmV0dXJuIEYoKCk9PntpZighbilyZXR1cm47bGV0IGU9e2lkOm4scGFyZW50SWQ6cn07cmV0dXJuIHQ/LmFkZE5vZGUoZSksKCk9Pnt0Py5yZW1vdmVOb2RlKGUpfX0sW3QsbixyXSksbn0oKSxSPXEoKSxOPXRhKCEwKSxEPXIsQj11LE09ZCxJPWM7XCJjb250ZXh0LW1lbnVcIj09PV8udHlwZSYmKEQ9Xy5jb250ZXh0Py5hbmNob3I/P3IsST1lLmFsaWduPz9cInN0YXJ0XCIsTT1lLmFsaWduT2Zmc2V0Pz8yLEI9ZS5zaWRlT2Zmc2V0Pz8tNSk7bGV0IFU9cyxWPUk7XCJtZW51XCI9PT1fLnR5cGU/KFU9VT8/XCJpbmxpbmUtZW5kXCIsVj1WPz9cInN0YXJ0XCIpOlwibWVudWJhclwiPT09Xy50eXBlJiYoVT1VPz9cImJvdHRvbVwiLFY9Vj8/XCJzdGFydFwiKTtsZXQgWj1cImNvbnRleHQtbWVudVwiPT09Xy50eXBlLFk9cjQoe2FuY2hvcjpELGZsb2F0aW5nUm9vdENvbnRleHQ6dyxwb3NpdGlvbk1ldGhvZDpOP1wiZml4ZWRcIjpvLG1vdW50ZWQ6TyxzaWRlOlUsc2lkZU9mZnNldDpCLGFsaWduOlYsYWxpZ25PZmZzZXQ6TSxhcnJvd1BhZGRpbmc6Wj8wOmgsY29sbGlzaW9uQm91bmRhcnk6Zixjb2xsaXNpb25QYWRkaW5nOnAsc3RpY2t5Omcsbm9kZUlkOlQsa2VlcE1vdW50ZWQ6TCx0cmFja0FuY2hvcjptLGNvbGxpc2lvbkF2b2lkYW5jZTp2LHNoaWZ0Q3Jvc3NBeGlzOlp9KSx7ZXZlbnRzOlh9PVcoKSxLPUMudXNlTWVtbygoKT0+e2xldCBlPXt9O3JldHVybiB5fHwoZS5wb2ludGVyRXZlbnRzPVwibm9uZVwiKSx7cm9sZTpcInByZXNlbnRhdGlvblwiLGhpZGRlbjohTyxzdHlsZTp7Li4uWS5wb3NpdGlvbmVyU3R5bGVzLC4uLmV9fX0sW3ksTyxZLnBvc2l0aW9uZXJTdHlsZXNdKTtDLnVzZUVmZmVjdCgoKT0+e2Z1bmN0aW9uIGUoZSl7ZS5vcGVuPyhlLnBhcmVudE5vZGVJZD09PVQmJlAoITEpLGUubm9kZUlkIT09VCYmZS5wYXJlbnROb2RlSWQ9PT1SJiZ4KCExLHZvaWQgMCxcInNpYmxpbmctb3BlblwiKSk6ZS5wYXJlbnROb2RlSWQ9PT1UJiZQKCEwKX1yZXR1cm4gWC5vbihcIm9wZW5jaGFuZ2VcIixlKSwoKT0+e1gub2ZmKFwib3BlbmNoYW5nZVwiLGUpfX0sW1gsVCxSLHgsUF0pLEMudXNlRWZmZWN0KCgpPT57WC5lbWl0KFwib3BlbmNoYW5nZVwiLHtvcGVuOnksbm9kZUlkOlQscGFyZW50Tm9kZUlkOlJ9KX0sW1gseSxULFJdKTtsZXQgUT1DLnVzZU1lbW8oKCk9Pih7b3Blbjp5LHNpZGU6WS5zaWRlLGFsaWduOlkuYWxpZ24sYW5jaG9ySGlkZGVuOlkuYW5jaG9ySGlkZGVuLG5lc3RlZDpcIm1lbnVcIj09PV8udHlwZX0pLFt5LFkuc2lkZSxZLmFsaWduLFkuYW5jaG9ySGlkZGVuLF8udHlwZV0pLEc9Qy51c2VNZW1vKCgpPT4oe3NpZGU6WS5zaWRlLGFsaWduOlkuYWxpZ24sYXJyb3dSZWY6WS5hcnJvd1JlZixhcnJvd1VuY2VudGVyZWQ6WS5hcnJvd1VuY2VudGVyZWQsYXJyb3dTdHlsZXM6WS5hcnJvd1N0eWxlcyxmbG9hdGluZ0NvbnRleHQ6WS5jb250ZXh0fSksW1kuc2lkZSxZLmFsaWduLFkuYXJyb3dSZWYsWS5hcnJvd1VuY2VudGVyZWQsWS5hcnJvd1N0eWxlcyxZLmNvbnRleHRdKSxKPXRqKFwiZGl2XCIsZSx7c3RhdGU6USxjdXN0b21TdHlsZUhvb2tNYXBwaW5nOnRWLHJlZjpbbixqXSxwcm9wczp7Li4uSywuLi5ifX0pLGVlPU8mJlwibWVudVwiIT09Xy50eXBlJiYoXCJtZW51YmFyXCIhPT1fLnR5cGUmJlMmJlwidHJpZ2dlci1ob3ZlclwiIT09RXx8XCJtZW51YmFyXCI9PT1fLnR5cGUmJl8uY29udGV4dC5tb2RhbCksZW49bnVsbDtyZXR1cm5cIm1lbnViYXJcIj09PV8udHlwZT9lbj1fLmNvbnRleHQuY29udGVudEVsZW1lbnQ6dm9pZCAwPT09Xy50eXBlJiYoZW49eiksKDAsbC5qc3hzKShyQS5Qcm92aWRlcix7dmFsdWU6RyxjaGlsZHJlbjpbZWUmJigwLGwuanN4KShyNyx7cmVmOlwiY29udGV4dC1tZW51XCI9PT1fLnR5cGV8fFwibmVzdGVkLWNvbnRleHQtbWVudVwiPT09Xy50eXBlP18uY29udGV4dC5pbnRlcm5hbEJhY2tkcm9wUmVmOm51bGwsaW5lcnQ6KHQ9IXksdHc+PTE5P3Q6dD9cInRydWVcIjp2b2lkIDApLGN1dG91dDplbn0pLCgwLGwuanN4KSgkLHtpZDpULGNoaWxkcmVuOigwLGwuanN4KShyMyx7ZWxlbWVudHNSZWY6ayxsYWJlbHNSZWY6QSxjaGlsZHJlbjpKfSl9KV19KX0pLG9uPXtpbmVydDpuZXcgV2Vha01hcCxcImFyaWEtaGlkZGVuXCI6bmV3IFdlYWtNYXAsbm9uZTpuZXcgV2Vha01hcH07ZnVuY3Rpb24gb3QoZSl7cmV0dXJuXCJpbmVydFwiPT09ZT9vbi5pbmVydDpcImFyaWEtaGlkZGVuXCI9PT1lP29uW1wiYXJpYS1oaWRkZW5cIl06b24ubm9uZX1sZXQgb3I9bmV3IFdlYWtTZXQsb289e30sb2E9MCxvaT1lPT5lJiYoZS5ob3N0fHxvaShlLnBhcmVudE5vZGUpKTtmdW5jdGlvbiBvbChlLG49ITEsdD0hMSl7bGV0IHI9ZVEoZVswXSkuYm9keTtyZXR1cm4gZnVuY3Rpb24oZSxuLHQscil7bGV0IG89XCJkYXRhLWJhc2UtdWktaW5lcnRcIixhPXI/XCJpbmVydFwiOnQ/XCJhcmlhLWhpZGRlblwiOm51bGwsaT1lLm1hcChlPT57aWYobi5jb250YWlucyhlKSlyZXR1cm4gZTtsZXQgdD1vaShlKTtyZXR1cm4gbi5jb250YWlucyh0KT90Om51bGx9KS5maWx0ZXIoZT0+bnVsbCE9ZSksbD1uZXcgU2V0LHM9bmV3IFNldChpKSxjPVtdO29vW29dfHwob29bb109bmV3IFdlYWtNYXApO2xldCB1PW9vW29dO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24gZShuKXshKCFufHxsLmhhcyhuKSkmJihsLmFkZChuKSxuLnBhcmVudE5vZGUmJmUobi5wYXJlbnROb2RlKSl9KSxmdW5jdGlvbiBlKG4peyFufHxzLmhhcyhuKXx8W10uZm9yRWFjaC5jYWxsKG4uY2hpbGRyZW4sbj0+e2lmKFwic2NyaXB0XCIhPT1LKG4pKWlmKGwuaGFzKG4pKWUobik7ZWxzZXtsZXQgZT1hP24uZ2V0QXR0cmlidXRlKGEpOm51bGwsdD1udWxsIT09ZSYmXCJmYWxzZVwiIT09ZSxyPW90KGEpLGk9KHIuZ2V0KG4pfHwwKSsxLGw9KHUuZ2V0KG4pfHwwKSsxO3Iuc2V0KG4saSksdS5zZXQobixsKSxjLnB1c2gobiksMT09PWkmJnQmJm9yLmFkZChuKSwxPT09bCYmbi5zZXRBdHRyaWJ1dGUobyxcIlwiKSwhdCYmYSYmbi5zZXRBdHRyaWJ1dGUoYSxcImluZXJ0XCI9PT1hP1wiXCI6XCJ0cnVlXCIpfX0pfShuKSxsLmNsZWFyKCksb2ErPTEsKCk9PntjLmZvckVhY2goZT0+e2xldCBuPW90KGEpLHQ9KG4uZ2V0KGUpfHwwKS0xLHI9KHUuZ2V0KGUpfHwwKS0xO24uc2V0KGUsdCksdS5zZXQoZSxyKSx0fHwoIW9yLmhhcyhlKSYmYSYmZS5yZW1vdmVBdHRyaWJ1dGUoYSksb3IuZGVsZXRlKGUpKSxyfHxlLnJlbW92ZUF0dHJpYnV0ZShvKX0pLChvYS09MSl8fChvbi5pbmVydD1uZXcgV2Vha01hcCxvbltcImFyaWEtaGlkZGVuXCJdPW5ldyBXZWFrTWFwLG9uLm5vbmU9bmV3IFdlYWtNYXAsb3I9bmV3IFdlYWtTZXQsb289e30pfX0oZS5jb25jYXQoQXJyYXkuZnJvbShyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbYXJpYS1saXZlXVwiKSkpLHIsbix0KX1sZXQgb3M9W107ZnVuY3Rpb24gb2MoKXtyZXR1cm4gb3Muc2xpY2UoKS5yZXZlcnNlKCkuZmluZChlPT5lLmlzQ29ubmVjdGVkKX1mdW5jdGlvbiBvdShlLG4pe2lmKCFuLmN1cnJlbnQuaW5jbHVkZXMoXCJmbG9hdGluZ1wiKSYmIWUuZ2V0QXR0cmlidXRlKFwicm9sZVwiKT8uaW5jbHVkZXMoXCJkaWFsb2dcIikpcmV0dXJuO2xldCB0PXJkKCkscj1yYyhlLHQpLmZpbHRlcihlPT57bGV0IG49ZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLXRhYmluZGV4XCIpfHxcIlwiO3JldHVybiBydShlLHQpfHxlLmhhc0F0dHJpYnV0ZShcImRhdGEtdGFiaW5kZXhcIikmJiFuLnN0YXJ0c1dpdGgoXCItXCIpfSksbz1lLmdldEF0dHJpYnV0ZShcInRhYmluZGV4XCIpO24uY3VycmVudC5pbmNsdWRlcyhcImZsb2F0aW5nXCIpfHwwPT09ci5sZW5ndGg/XCIwXCIhPT1vJiZlLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCIwXCIpOihcIi0xXCIhPT1vfHxlLmhhc0F0dHJpYnV0ZShcImRhdGEtdGFiaW5kZXhcIikmJlwiLTFcIiE9PWUuZ2V0QXR0cmlidXRlKFwiZGF0YS10YWJpbmRleFwiKSkmJihlLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCItMVwiKSxlLnNldEF0dHJpYnV0ZShcImRhdGEtdGFiaW5kZXhcIixcIi0xXCIpKX1sZXQgb2Q9Qy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7cmV0dXJuKDAsbC5qc3gpKFwiYnV0dG9uXCIsey4uLmUsdHlwZTpcImJ1dHRvblwiLHJlZjpuLHRhYkluZGV4Oi0xLHN0eWxlOnQkfSl9KTtmdW5jdGlvbiBvZihlKXtsZXR7Y29udGV4dDpuLGNoaWxkcmVuOnQsZGlzYWJsZWQ6cj0hMSxvcmRlcjpvPVtcImNvbnRlbnRcIl0sZ3VhcmRzOmE9ITAsaW5pdGlhbEZvY3VzOmk9MCxyZXR1cm5Gb2N1czpzPSEwLHJlc3RvcmVGb2N1czpjPSExLG1vZGFsOnU9ITAsdmlzdWFsbHlIaWRkZW5EaXNtaXNzOmQ9ITEsY2xvc2VPbkZvY3VzT3V0OmY9ITAsb3V0c2lkZUVsZW1lbnRzSW5lcnQ6cD0hMSxnZXRJbnNpZGVFbGVtZW50czpoPSgpPT5bXX09ZSx7b3BlbjpnLG9uT3BlbkNoYW5nZTptLGV2ZW50czp2LGRhdGFSZWY6YixlbGVtZW50czp7ZG9tUmVmZXJlbmNlOnksZmxvYXRpbmc6eH19PW4sdz1UKCgpPT5iLmN1cnJlbnQuZmxvYXRpbmdDb250ZXh0Py5ub2RlSWQpLGo9VChoKSxrPVwibnVtYmVyXCI9PXR5cGVvZiBpJiZpPDAsQT1lSih5KSYmayxPPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBIVE1MRWxlbWVudCYmXCJpbmVydFwiaW4gSFRNTEVsZW1lbnQucHJvdG90eXBlLFM9IU98fGEsRT0hU3x8TyYmcCxfPWVBKG8pLFA9ZUEoaSksej1lQShzKSxMPVcoKSxSPXJiKCksTj1DLnVzZVJlZihudWxsKSxEPUMudXNlUmVmKG51bGwpLEI9Qy51c2VSZWYoITEpLE09Qy51c2VSZWYoITEpLEk9Qy51c2VSZWYoLTEpLEg9bnVsbCE9UixVPWUwKHgpLFY9VCgoZT1VKT0+ZT9ycyhlLHJkKCkpOltdKSxxPVQoZT0+e2xldCBuPVYoZSk7cmV0dXJuIF8uY3VycmVudC5tYXAoZT0+eSYmXCJyZWZlcmVuY2VcIj09PWU/eTpVJiZcImZsb2F0aW5nXCI9PT1lP1U6bikuZmlsdGVyKEJvb2xlYW4pLmZsYXQoKX0pO0MudXNlRWZmZWN0KCgpPT57aWYocnx8IXUpcmV0dXJuO2Z1bmN0aW9uIGUoZSl7aWYoXCJUYWJcIj09PWUua2V5KXtlWShVLGVaKGVRKFUpKSkmJjA9PT1WKCkubGVuZ3RoJiYhQSYmZUQoZSk7bGV0IG49cSgpLHQ9ZVgoZSk7XCJyZWZlcmVuY2VcIj09PV8uY3VycmVudFswXSYmdD09PXkmJihlRChlKSxlLnNoaWZ0S2V5P25xKG5bbi5sZW5ndGgtMV0pOm5xKG5bMV0pKSxcImZsb2F0aW5nXCI9PT1fLmN1cnJlbnRbMV0mJnQ9PT1VJiZlLnNoaWZ0S2V5JiYoZUQoZSksbnEoblswXSkpfX1sZXQgbj1lUShVKTtyZXR1cm4gbi5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGUpLCgpPT57bi5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGUpfX0sW3IseSxVLHUsXyxBLFYscV0pLEMudXNlRWZmZWN0KCgpPT57aWYoIXImJngpcmV0dXJuIHguYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzaW5cIixlKSwoKT0+e3gucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzaW5cIixlKX07ZnVuY3Rpb24gZShlKXtsZXQgbj1lWChlKSx0PVYoKS5pbmRleE9mKG4pOy0xIT09dCYmKEkuY3VycmVudD10KX19LFtyLHgsVl0pLEMudXNlRWZmZWN0KCgpPT57aWYoIXImJmYmJngmJmVuKHkpKXJldHVybiB5LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c291dFwiLG4pLHkuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsZSkseC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNvdXRcIixuKSwoKT0+e3kucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3Vzb3V0XCIsbikseS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIixlKSx4LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c291dFwiLG4pfTtmdW5jdGlvbiBlKCl7TS5jdXJyZW50PSEwLHNldFRpbWVvdXQoKCk9PntNLmN1cnJlbnQ9ITF9KX1mdW5jdGlvbiBuKGUpe2xldCBuPWUucmVsYXRlZFRhcmdldCx0PWUuY3VycmVudFRhcmdldCxyPWVYKGUpO3F1ZXVlTWljcm90YXNrKCgpPT57bGV0IG89dygpLGE9IShlWSh5LG4pfHxlWSh4LG4pfHxlWShuLHgpfHxlWShSPy5wb3J0YWxOb2RlLG4pfHxuPy5oYXNBdHRyaWJ1dGUoZTEoXCJmb2N1cy1ndWFyZFwiKSl8fEwmJihlNihMLm5vZGVzUmVmLmN1cnJlbnQsbykuZmluZChlPT5lWShlLmNvbnRleHQ/LmVsZW1lbnRzLmZsb2F0aW5nLG4pfHxlWShlLmNvbnRleHQ/LmVsZW1lbnRzLmRvbVJlZmVyZW5jZSxuKSl8fGU5KEwubm9kZXNSZWYuY3VycmVudCxvKS5maW5kKGU9PltlLmNvbnRleHQ/LmVsZW1lbnRzLmZsb2F0aW5nLGUwKGUuY29udGV4dD8uZWxlbWVudHMuZmxvYXRpbmcpXS5pbmNsdWRlcyhuKXx8ZS5jb250ZXh0Py5lbGVtZW50cy5kb21SZWZlcmVuY2U9PT1uKSkpO2lmKHQ9PT15JiZVJiZvdShVLF8pLGMmJnQhPT15JiYhcj8uaXNDb25uZWN0ZWQmJmVaKGVRKFUpKT09PWVRKFUpLmJvZHkpe2VuKFUpJiZVLmZvY3VzKCk7bGV0IGU9SS5jdXJyZW50LG49VigpLHQ9bltlXXx8bltuLmxlbmd0aC0xXXx8VTtlbih0KSYmdC5mb2N1cygpfWlmKGIuY3VycmVudC5pbnNpZGVSZWFjdFRyZWUpe2IuY3VycmVudC5pbnNpZGVSZWFjdFRyZWU9ITE7cmV0dXJufShBfHwhdSkmJm4mJmEmJiFNLmN1cnJlbnQmJm4hPT1vYygpJiYoQi5jdXJyZW50PSEwLG0oITEsZSxcImZvY3VzLW91dFwiKSl9KX19LFtyLHkseCxVLHUsTCxSLG0sZixjLFYsQSx3LF8sYl0pO2xldCAkPUMudXNlUmVmKG51bGwpLFo9Qy51c2VSZWYobnVsbCksWT10YigkLFI/LmJlZm9yZUluc2lkZVJlZiksWD10YihaLFI/LmFmdGVySW5zaWRlUmVmKTtmdW5jdGlvbiBRKGUpe3JldHVybiFyJiZkJiZ1PygwLGwuanN4KShvZCx7cmVmOlwic3RhcnRcIj09PWU/TjpELG9uQ2xpY2s6ZT0+bSghMSxlLm5hdGl2ZUV2ZW50KSxjaGlsZHJlbjpcInN0cmluZ1wiPT10eXBlb2YgZD9kOlwiRGlzbWlzc1wifSk6bnVsbH1DLnVzZUVmZmVjdCgoKT0+e2lmKHJ8fCF4KXJldHVybjtsZXQgZT1BcnJheS5mcm9tKFI/LnBvcnRhbE5vZGU/LnF1ZXJ5U2VsZWN0b3JBbGwoYFske2UxKFwicG9ydGFsXCIpfV1gKXx8W10pLG49TD9lOShMLm5vZGVzUmVmLmN1cnJlbnQsdygpKTpbXSx0PUwmJiF1P24ubWFwKGU9PmUuY29udGV4dD8uZWxlbWVudHMuZmxvYXRpbmcpOltdLG89W3gsbi5maW5kKGU9PmVKKGUuY29udGV4dD8uZWxlbWVudHMuZG9tUmVmZXJlbmNlfHxudWxsKSk/LmNvbnRleHQ/LmVsZW1lbnRzLmRvbVJlZmVyZW5jZSwuLi5lLC4uLnQsLi4uaigpLE4uY3VycmVudCxELmN1cnJlbnQsJC5jdXJyZW50LFouY3VycmVudCxSPy5iZWZvcmVPdXRzaWRlUmVmLmN1cnJlbnQsUj8uYWZ0ZXJPdXRzaWRlUmVmLmN1cnJlbnQsXy5jdXJyZW50LmluY2x1ZGVzKFwicmVmZXJlbmNlXCIpfHxBP3k6bnVsbF0uZmlsdGVyKGU9Pm51bGwhPWUpLGE9dXx8QT9vbChvLCFFLEUpOm9sKG8pO3JldHVybigpPT57YSgpfX0sW3IseSx4LHUsXyxSLEEsUyxFLEwsdyxqXSksRigoKT0+e2lmKHJ8fCFlbihVKSlyZXR1cm47bGV0IGU9ZVooZVEoVSkpO3F1ZXVlTWljcm90YXNrKCgpPT57bGV0IG49cShVKSx0PVAuY3VycmVudCxyPShcIm51bWJlclwiPT10eXBlb2YgdD9uW3RdOnQuY3VycmVudCl8fFUsbz1lWShVLGUpO2t8fG98fCFnfHxucShyLHtwcmV2ZW50U2Nyb2xsOnI9PT1VfSl9KX0sW3IsZyxVLGsscSxQXSksRigoKT0+e3ZhciBlO2lmKHJ8fCFVKXJldHVybjtsZXQgbj1lUShVKTtmdW5jdGlvbiB0KHtyZWFzb246ZSxldmVudDpuLG5lc3RlZDp0fSl7aWYoW1wiaG92ZXJcIixcInNhZmUtcG9seWdvblwiXS5pbmNsdWRlcyhlKSYmXCJtb3VzZWxlYXZlXCI9PT1uLnR5cGUmJihCLmN1cnJlbnQ9ITApLFwib3V0c2lkZS1wcmVzc1wiPT09ZSlpZih0KUIuY3VycmVudD0hMTtlbHNlIGlmKGVCKG4pfHxlTShuKSlCLmN1cnJlbnQ9ITE7ZWxzZXtsZXQgZT0hMTtkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLmZvY3VzKHtnZXQgcHJldmVudFNjcm9sbCgpe3JldHVybiBlPSEwLCExfX0pLGU/Qi5jdXJyZW50PSExOkIuY3VycmVudD0hMH19ZT1lWihuKSxvcz1vcy5maWx0ZXIoZT0+ZS5pc0Nvbm5lY3RlZCksZSYmXCJib2R5XCIhPT1LKGUpJiYob3MucHVzaChlKSxvcy5sZW5ndGg+MjAmJihvcz1vcy5zbGljZSgtMjApKSksdi5vbihcIm9wZW5jaGFuZ2VcIix0KTtsZXQgbz1uLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO3JldHVybiBvLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCItMVwiKSxvLnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLE9iamVjdC5hc3NpZ24oby5zdHlsZSx0JCksSCYmeSYmeS5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJhZnRlcmVuZFwiLG8pLCgpPT57di5vZmYoXCJvcGVuY2hhbmdlXCIsdCk7bGV0IGU9ZVoobikscj1lWSh4LGUpfHxMJiZlNihMLm5vZGVzUmVmLmN1cnJlbnQsdygpLCExKS5zb21lKG49PmVZKG4uY29udGV4dD8uZWxlbWVudHMuZmxvYXRpbmcsZSkpLGE9ZnVuY3Rpb24oKXtpZihcImJvb2xlYW5cIj09dHlwZW9mIHouY3VycmVudCl7bGV0IGU9eXx8b2MoKTtyZXR1cm4gZSYmZS5pc0Nvbm5lY3RlZD9lOm99cmV0dXJuIHouY3VycmVudC5jdXJyZW50fHxvfSgpO3F1ZXVlTWljcm90YXNrKCgpPT57bGV0IHQ9ZnVuY3Rpb24oZSl7bGV0IG49cmQoKTtyZXR1cm4gcnUoZSxuKT9lOnJzKGUsbilbMF18fGV9KGEpO3ouY3VycmVudCYmIUIuY3VycmVudCYmZW4odCkmJih0PT09ZXx8ZT09PW4uYm9keXx8cikmJnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSxvLnJlbW92ZSgpfSl9fSxbcix4LFUseixiLHYsTCxILHksd10pLEMudXNlRWZmZWN0KCgpPT57cXVldWVNaWNyb3Rhc2soKCk9PntCLmN1cnJlbnQ9ITF9KX0sW3JdKSxGKCgpPT57aWYoIXImJlIpcmV0dXJuIFIuc2V0Rm9jdXNNYW5hZ2VyU3RhdGUoe21vZGFsOnUsY2xvc2VPbkZvY3VzT3V0OmYsb3BlbjpnLG9uT3BlbkNoYW5nZTptLGRvbVJlZmVyZW5jZTp5fSksKCk9PntSLnNldEZvY3VzTWFuYWdlclN0YXRlKG51bGwpfX0sW3IsUix1LGcsbSxmLHldKSxGKCgpPT57IXImJlUmJm91KFUsXyl9LFtyLFUsX10pO2xldCBHPSFyJiZTJiYoIXV8fCFBKSYmKEh8fHUpO3JldHVybigwLGwuanN4cykoQy5GcmFnbWVudCx7Y2hpbGRyZW46W0cmJigwLGwuanN4KSh0Wix7XCJkYXRhLXR5cGVcIjpcImluc2lkZVwiLHJlZjpZLG9uRm9jdXM6ZT0+e2lmKHUpe2xldCBlPXEoKTtucShcInJlZmVyZW5jZVwiPT09b1swXT9lWzBdOmVbZS5sZW5ndGgtMV0pfWVsc2UgaWYoUj8ucHJlc2VydmVUYWJPcmRlciYmUi5wb3J0YWxOb2RlKWlmKEIuY3VycmVudD0hMSxyZyhlLFIucG9ydGFsTm9kZSkpe2xldCBlPXJwKHkpO2U/LmZvY3VzKCl9ZWxzZSBSLmJlZm9yZU91dHNpZGVSZWYuY3VycmVudD8uZm9jdXMoKX19KSwhQSYmUShcInN0YXJ0XCIpLHQsUShcImVuZFwiKSxHJiYoMCxsLmpzeCkodFose1wiZGF0YS10eXBlXCI6XCJpbnNpZGVcIixyZWY6WCxvbkZvY3VzOmU9PntpZih1KW5xKHEoKVswXSk7ZWxzZSBpZihSPy5wcmVzZXJ2ZVRhYk9yZGVyJiZSLnBvcnRhbE5vZGUpaWYoZiYmKEIuY3VycmVudD0hMCkscmcoZSxSLnBvcnRhbE5vZGUpKXtsZXQgZT1yaCh5KTtlPy5mb2N1cygpfWVsc2UgUi5hZnRlck91dHNpZGVSZWYuY3VycmVudD8uZm9jdXMoKX19KV19KX1sZXQgb3A9ey4uLnRWLC4uLnRUfSxvaD1DLmZvcndhcmRSZWYoZnVuY3Rpb24oZSxuKXtsZXR7cmVuZGVyOnQsY2xhc3NOYW1lOnIsZmluYWxGb2N1czpvLC4uLmF9PWUse29wZW46aSxzZXRPcGVuOnMscG9wdXBSZWY6Yyx0cmFuc2l0aW9uU3RhdHVzOnUscG9wdXBQcm9wczpkLG1vdW50ZWQ6ZixpbnN0YW50VHlwZTpwLG9uT3BlbkNoYW5nZUNvbXBsZXRlOmgscGFyZW50OmcsbGFzdE9wZW5DaGFuZ2VSZWFzb246bSxyb290SWQ6dn09bjAoKSx7c2lkZTpiLGFsaWduOnksZmxvYXRpbmdDb250ZXh0Onh9PWZ1bmN0aW9uKCl7bGV0IGU9Qy51c2VDb250ZXh0KHJBKTtpZih2b2lkIDA9PT1lKXRocm93IEVycm9yKFwiQmFzZSBVSTogTWVudVBvc2l0aW9uZXJDb250ZXh0IGlzIG1pc3NpbmcuIE1lbnVQb3NpdGlvbmVyIHBhcnRzIG11c3QgYmUgcGxhY2VkIHdpdGhpbiA8TWVudS5Qb3NpdGlvbmVyPi5cIik7cmV0dXJuIGV9KCk7bjUoe29wZW46aSxyZWY6YyxvbkNvbXBsZXRlKCl7aSYmaD8uKCEwKX19KTtsZXR7ZXZlbnRzOnd9PVcoKTtDLnVzZUVmZmVjdCgoKT0+e2Z1bmN0aW9uIGUoZSl7cyghMSxlLmRvbUV2ZW50LGUucmVhc29uKX1yZXR1cm4gdy5vbihcImNsb3NlXCIsZSksKCk9Pnt3Lm9mZihcImNsb3NlXCIsZSl9fSxbdyxzXSk7bGV0IGo9dGooXCJkaXZcIixlLHtzdGF0ZTpDLnVzZU1lbW8oKCk9Pih7dHJhbnNpdGlvblN0YXR1czp1LHNpZGU6YixhbGlnbjp5LG9wZW46aSxuZXN0ZWQ6XCJtZW51XCI9PT1nLnR5cGUsaW5zdGFudDpwfSksW3UsYix5LGksZy50eXBlLHBdKSxyZWY6W24sY10sY3VzdG9tU3R5bGVIb29rTWFwcGluZzpvcCxwcm9wczpbZCxcInN0YXJ0aW5nXCI9PT11P250Om5yLGEse1wiZGF0YS1yb290b3duZXJpZFwiOnZ9XX0pLGs9dm9pZCAwPT09Zy50eXBlfHxcImNvbnRleHQtbWVudVwiPT09Zy50eXBlO3JldHVyblwibWVudWJhclwiPT09Zy50eXBlJiZcIm91dHNpZGUtcHJlc3NcIiE9PW0mJihrPSEwKSwoMCxsLmpzeCkob2Yse2NvbnRleHQ6eCxtb2RhbDohMSxkaXNhYmxlZDohZixyZXR1cm5Gb2N1czpvfHxrLGluaXRpYWxGb2N1czpcIm1lbnVcIj09PWcudHlwZT8tMTowLHJlc3RvcmVGb2N1czohMCxjaGlsZHJlbjpqfSl9KSxvZz1DLmNyZWF0ZUNvbnRleHQodm9pZCAwKSxvbT1DLmZvcndhcmRSZWYoZnVuY3Rpb24oZSxuKXtsZXR7cmVuZGVyOnQsY2xhc3NOYW1lOnIsLi4ub309ZSxbYSxpXT1DLnVzZVN0YXRlKHZvaWQgMCkscz1DLnVzZU1lbW8oKCk9Pih7c2V0TGFiZWxJZDppfSksW2ldKSxjPXRqKFwiZGl2XCIsZSx7cmVmOm4scHJvcHM6e3JvbGU6XCJncm91cFwiLFwiYXJpYS1sYWJlbGxlZGJ5XCI6YSwuLi5vfX0pO3JldHVybigwLGwuanN4KShvZy5Qcm92aWRlcix7dmFsdWU6cyxjaGlsZHJlbjpjfSl9KTtmdW5jdGlvbiBvdihlKXtyZXR1cm4gSChlLFwiYmFzZS11aVwiKX1sZXQgb2I9Qy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7bGV0e2NsYXNzTmFtZTp0LHJlbmRlcjpyLGlkOm8sLi4uYX09ZSxpPW92KG8pLHtzZXRMYWJlbElkOmx9PWZ1bmN0aW9uKCl7bGV0IGU9Qy51c2VDb250ZXh0KG9nKTtpZih2b2lkIDA9PT1lKXRocm93IEVycm9yKFwiQmFzZSBVSTogTWVudUdyb3VwUm9vdENvbnRleHQgaXMgbWlzc2luZy4gTWVudSBncm91cCBwYXJ0cyBtdXN0IGJlIHVzZWQgd2l0aGluIDxNZW51Lkdyb3VwPi5cIik7cmV0dXJuIGV9KCk7cmV0dXJuIEYoKCk9PihsKGkpLCgpPT57bCh2b2lkIDApfSksW2wsaV0pLHRqKFwiZGl2XCIsZSx7cmVmOm4scHJvcHM6e2lkOmkscm9sZTpcInByZXNlbnRhdGlvblwiLC4uLmF9fSl9KSxveT17dHlwZTpcInJlZ3VsYXItaXRlbVwifSxveD1DLm1lbW8oQy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7bGV0e2NsYXNzTmFtZTp0LGNsb3NlT25DbGljazpyPSEwLGRpc2FibGVkOm89ITEsaGlnaGxpZ2h0ZWQ6YSxpZDppLG1lbnVFdmVudHM6bCxpdGVtUHJvcHM6cyxyZW5kZXI6YyxhbGxvd01vdXNlVXBUcmlnZ2VyUmVmOnUsdHlwaW5nUmVmOmQsbmF0aXZlQnV0dG9uOmYsLi4ucH09ZSx7Z2V0SXRlbVByb3BzOmgsaXRlbVJlZjpnfT1mdW5jdGlvbihlKXtsZXR7Y2xvc2VPbkNsaWNrOm4sZGlzYWJsZWQ6dD0hMSxoaWdobGlnaHRlZDpyLGlkOm8sbWVudUV2ZW50czphLGFsbG93TW91c2VVcFRyaWdnZXJSZWY6aSx0eXBpbmdSZWY6bCxuYXRpdmVCdXR0b246cyxpdGVtTWV0YWRhdGE6Y309ZSx1PUMudXNlUmVmKG51bGwpLHtnZXRCdXR0b25Qcm9wczpkLGJ1dHRvblJlZjpmfT10cSh7ZGlzYWJsZWQ6dCxmb2N1c2FibGVXaGVuRGlzYWJsZWQ6ITAsbmF0aXZlOnN9KSxwPUMudXNlQ2FsbGJhY2soZT0+dGMoe2lkOm8scm9sZTpcIm1lbnVpdGVtXCIsdGFiSW5kZXg6cj8wOi0xLG9uTW91c2VFbnRlcigpe1wic3VibWVudS10cmlnZ2VyXCI9PT1jLnR5cGUmJmMuc2V0QWN0aXZlKCl9LG9uS2V5VXA6ZT0+e1wiIFwiPT09ZS5rZXkmJmwuY3VycmVudCYmZS5wcmV2ZW50QmFzZVVJSGFuZGxlcigpfSxvbkNsaWNrOmU9PntuJiZhLmVtaXQoXCJjbG9zZVwiLHtkb21FdmVudDplLHJlYXNvbjpcIml0ZW0tcHJlc3NcIn0pfSxvbk1vdXNlVXA6KCk9Pnt1LmN1cnJlbnQmJmkuY3VycmVudCYmXCJyZWd1bGFyLWl0ZW1cIj09PWMudHlwZSYmdS5jdXJyZW50LmNsaWNrKCl9fSxlLGQpLFtvLHIsZCxsLG4sYSxpLGNdKSxoPXRiKHUsZik7cmV0dXJuIEMudXNlTWVtbygoKT0+KHtnZXRJdGVtUHJvcHM6cCxpdGVtUmVmOmh9KSxbcCxoXSl9KHtjbG9zZU9uQ2xpY2s6cixkaXNhYmxlZDpvLGhpZ2hsaWdodGVkOmEsaWQ6aSxtZW51RXZlbnRzOmwsYWxsb3dNb3VzZVVwVHJpZ2dlclJlZjp1LHR5cGluZ1JlZjpkLG5hdGl2ZUJ1dHRvbjpmLGl0ZW1NZXRhZGF0YTpveX0pO3JldHVybiB0aihcImRpdlwiLGUse3N0YXRlOkMudXNlTWVtbygoKT0+KHtkaXNhYmxlZDpvLGhpZ2hsaWdodGVkOmF9KSxbbyxhXSkscmVmOltnLG5dLHByb3BzOltzLHAsaF19KX0pKSxvdz1DLmZvcndhcmRSZWYoZnVuY3Rpb24oZSxuKXtsZXR7aWQ6dCxsYWJlbDpyLG5hdGl2ZUJ1dHRvbjpvPSExLC4uLmF9PWUsaT1DLnVzZVJlZihudWxsKSxzPXRFKHtsYWJlbDpyfSksYz10YihuLHMucmVmLGkpLHtpdGVtUHJvcHM6dSxhY3RpdmVJbmRleDpkLGFsbG93TW91c2VVcFRyaWdnZXJSZWY6Zix0eXBpbmdSZWY6cH09bjAoKSxoPW92KHQpLGc9cy5pbmRleD09PWQse2V2ZW50czptfT1XKCk7cmV0dXJuKDAsbC5qc3gpKG94LHsuLi5hLGlkOmgscmVmOmMsaGlnaGxpZ2h0ZWQ6ZyxtZW51RXZlbnRzOm0saXRlbVByb3BzOnUsYWxsb3dNb3VzZVVwVHJpZ2dlclJlZjpmLHR5cGluZ1JlZjpwLG5hdGl2ZUJ1dHRvbjpvfSl9KTt2YXIgb2o9XCJfX25leHRfYnVpbHRpbl9fXCI7ZnVuY3Rpb24gb2soZSl7cmV0dXJuIGUucmVwbGFjZShuZXcgUmVnRXhwKFwiXlwiLmNvbmNhdChvaikpLFwiXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChcIlwiLmNvbmNhdChcIkBib3VuZGFyeVwiLFwiJFwiKSksXCJcIil9dmFyIG9BPVwiYm91bmRhcnk6XCI7ZnVuY3Rpb24gb08oZSl7cmV0dXJuIGUuc3RhcnRzV2l0aChvQSl9dmFyIG9DPXQoXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvZXJyb3JzL2Rldi10b29scy1pbmRpY2F0b3IvdXRpbHMudHNcIik7ZnVuY3Rpb24gb1MoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIG9FKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcjtyPXRbbl0sbiBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW25dPXJ9KX1yZXR1cm4gZX1mdW5jdGlvbiBvXyhlLG4pe3JldHVybiBuPW51bGwhPW4/bjp7fSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pLGV9ZnVuY3Rpb24gb1AoZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG9TKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG9TKGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfXZhciBvej1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkoZSksdD0wO3Q8ZTt0Kyspblt0XT1hcmd1bWVudHNbdF07cmV0dXJuIGZ1bmN0aW9uKGUpe24uZm9yRWFjaChmdW5jdGlvbihuKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuP24oZSk6biYmKG4uY3VycmVudD1lKX0pfX07ZnVuY3Rpb24gb0woZSl7dmFyIG4sdCxyPWUubm9kZVN0YXRlLG89ZS5ib3VuZGFyaWVzLGE9ci5wYWdlUGF0aCxpPXIuYm91bmRhcnlUeXBlLHM9ci5zZXRCb3VuZGFyeVR5cGUsYz1vUCgoMCxDLnVzZVN0YXRlKSghMSksMiksdT1jWzBdLGQ9Y1sxXSxmPW9QKCgwLEMudXNlU3RhdGUpKGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJuZXh0anMtcG9ydGFsXCIpLnNoYWRvd1Jvb3R9KSwxKVswXSxwPSgwLEMudXNlUmVmKShmKSxoPSgwLEMudXNlUmVmKShudWxsKSxnPSgwLEMudXNlUmVmKShudWxsKTsoMCxvQy5POCkoZyxoLHUsZnVuY3Rpb24oKXtkKCExKX0sbnVsbD09KG49aC5jdXJyZW50KT92b2lkIDA6bi5vd25lckRvY3VtZW50KTt2YXIgbT1PYmplY3QudmFsdWVzKG8pLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPT1lfSksdj1tP251bGw9PSh0PW0uc3BsaXQoXCIuXCIpKT92b2lkIDA6dC5wb3AoKTpcImpzXCIsYj0oMCxDLnVzZU1lbW8pKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIG49b1AoZSwyKSx0PW5bMF0scj1vaygoblsxXXx8XCJcIikuc3BsaXQoXCIvXCIpLnBvcCgpfHxcIlwiLmNvbmNhdCh0LFwiLlwiKS5jb25jYXQodikpO3JldHVyblt0LHJdfSkpfSxbbyx2XSkseT0oYXx8XCJcIikuc3BsaXQoXCIvXCIpLnBvcCgpfHxcIlwiLHg9b2soaT9cInBhZ2UuXCIuY29uY2F0KHYpOnl8fFwicGFnZS5cIi5jb25jYXQodikpLHc9W3tsYWJlbDpiLmxvYWRpbmcsdmFsdWU6XCJsb2FkaW5nXCIsaWNvbjooMCxsLmpzeCkob1Qse30pLGRpc2FibGVkOiFvLmxvYWRpbmd9LHtsYWJlbDpiLmVycm9yLHZhbHVlOlwiZXJyb3JcIixpY29uOigwLGwuanN4KShvUix7fSksZGlzYWJsZWQ6IW8uZXJyb3J9LHtsYWJlbDpiW1wibm90LWZvdW5kXCJdLHZhbHVlOlwibm90LWZvdW5kXCIsaWNvbjooMCxsLmpzeCkob04se30pLGRpc2FibGVkOiFvW1wibm90LWZvdW5kXCJdfV0saj17bGFiZWw6aT9cIlJlc2V0XCI6eCx2YWx1ZTpcInJlc2V0XCIsaWNvbjooMCxsLmpzeCkob0Qse30pLGRpc2FibGVkOm51bGw9PT1pfSxrPSgwLEMudXNlQ2FsbGJhY2spKGZ1bmN0aW9uKGUpe3ZhciBuPW5ldyBVUkxTZWFyY2hQYXJhbXMoe2ZpbGU6ZS5maWxlUGF0aCxpc0FwcFJlbGF0aXZlUGF0aDpcIjFcIn0pO2ZldGNoKFwiXCIuY29uY2F0KHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEh8fFwiXCIsXCIvX19uZXh0anNfbGF1bmNoLWVkaXRvcj9cIikuY29uY2F0KG4udG9TdHJpbmcoKSkpLmNhdGNoKGNvbnNvbGUud2Fybil9LFtdKSxBPSgwLEMudXNlQ2FsbGJhY2spKGZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlXCJub3QtZm91bmRcIjpjYXNlXCJsb2FkaW5nXCI6Y2FzZVwiZXJyb3JcIjpzKGUpO2JyZWFrO2Nhc2VcInJlc2V0XCI6cyhudWxsKTticmVhaztjYXNlXCJvcGVuLWVkaXRvclwiOmEmJmsoe2ZpbGVQYXRoOmF9KX19LFtzLGEsa10pLE89KDAsQy51c2VNZW1vKShmdW5jdGlvbigpe3JldHVyblwibGF5b3V0XCIhPT1yLnR5cGUmJlwidGVtcGxhdGVcIiE9PXIudHlwZSYmT2JqZWN0LnZhbHVlcyhvKS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZX0pfSxbci50eXBlLG9dKTtyZXR1cm4oMCxsLmpzeHMpKHR2LHtkZWxheTowLG1vZGFsOiExLG9wZW46dSxvbk9wZW5DaGFuZ2U6ZCxjaGlsZHJlbjpbKDAsbC5qc3gpKHRXLHtjbGFzc05hbWU6XCJzZWdtZW50LWJvdW5kYXJ5LXRyaWdnZXJcIixcImRhdGEtbmV4dGpzLWRldi1vdmVybGF5LXNlZ21lbnQtYm91bmRhcnktdHJpZ2dlci1idXR0b25cIjohMCxyZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIG49b3ooZS5yZWYsaCk7cmV0dXJuKDAsbC5qc3gpKG9NLG9fKG9FKHt9LGUpLHtyZWY6bn0pKX0sZGlzYWJsZWQ6IU99KSwoMCxsLmpzeCkocmsse2NvbnRhaW5lcjpwLGNoaWxkcmVuOigwLGwuanN4KShvZSx7Y2xhc3NOYW1lOlwic2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1wb3NpdGlvbmVyXCIsc2lkZTpcImJvdHRvbVwiLGFsaWduOlwiY2VudGVyXCIsc2lkZU9mZnNldDo2LGFycm93UGFkZGluZzo4LHJlZjpnLGNoaWxkcmVuOigwLGwuanN4cykob2gse2NsYXNzTmFtZTpcInNlZ21lbnQtYm91bmRhcnktZHJvcGRvd25cIixjaGlsZHJlbjpbKDAsbC5qc3hzKShvbSx7Y2hpbGRyZW46WygwLGwuanN4KShvYix7Y2xhc3NOYW1lOlwic2VnbWVudC1ib3VuZGFyeS1ncm91cC1sYWJlbFwiLGNoaWxkcmVuOlwiVG9nZ2xlIE92ZXJyaWRlc1wifSksdy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuKDAsbC5qc3hzKShvdyx7Y2xhc3NOYW1lOlwic2VnbWVudC1ib3VuZGFyeS1kcm9wZG93bi1pdGVtXCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBBKGUudmFsdWUpfSxkaXNhYmxlZDplLmRpc2FibGVkLGNoaWxkcmVuOltlLmljb24sZS5sYWJlbF19LGUudmFsdWUpfSldfSksKDAsbC5qc3gpKG9tLHtjaGlsZHJlbjooMCxsLmpzeHMpKG93LHtjbGFzc05hbWU6XCJzZWdtZW50LWJvdW5kYXJ5LWRyb3Bkb3duLWl0ZW1cIixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIEEoai52YWx1ZSl9LGRpc2FibGVkOmouZGlzYWJsZWQsY2hpbGRyZW46W2ouaWNvbixqLmxhYmVsXX0sai52YWx1ZSl9KV19KX0pfSldfSl9ZnVuY3Rpb24gb1QoKXtyZXR1cm4oMCxsLmpzeHMpKFwic3ZnXCIse3dpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDIwIDIwXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2hpbGRyZW46WygwLGwuanN4KShcImdcIix7Y2xpcFBhdGg6XCJ1cmwoI2NsaXAwXzI3NTlfMTg2NilcIixjaGlsZHJlbjooMCxsLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTAgMy41QzEzLjU4OTkgMy41IDE2LjUgNi40MTAxNSAxNi41IDEwQzE2LjUgMTMuNTg5OSAxMy41ODk5IDE2LjUgMTAgMTYuNUM2LjQxMDE1IDE2LjUgMy41IDEzLjU4OTkgMy41IDEwQzMuNSA2LjQxMDE1IDYuNDEwMTUgMy41IDEwIDMuNVpNMiAxMEMyIDE0LjQxODMgNS41ODE3MiAxOCAxMCAxOEMxNC40MTgzIDE4IDE4IDE0LjQxODMgMTggMTBDMTggNS41ODE3MiAxNC40MTgzIDIgMTAgMkM1LjU4MTcyIDIgMiA1LjU4MTcyIDIgMTBaTTEwLjc1IDkuNjI0MDJWNkg5LjI1VjkuODc1QzkuMjUgMTAuMTg5OCA5LjM5ODU4IDEwLjQ4NiA5LjY1MDM5IDEwLjY3NDhMMTEuNTQ5OCAxMi4wOTk2TDEyLjE1MDQgMTIuNTQ5OEwxMy4wNDk4IDExLjM0OTZMMTIuNDUwMiAxMC45MDA0TDEwLjc1IDkuNjI0MDJaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KSwoMCxsLmpzeCkoXCJkZWZzXCIse2NoaWxkcmVuOigwLGwuanN4KShcImNsaXBQYXRoXCIse2lkOlwiY2xpcDBfMjc1OV8xODY2XCIsY2hpbGRyZW46KDAsbC5qc3gpKFwicmVjdFwiLHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIixmaWxsOlwid2hpdGVcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMiAyKVwifSl9KX0pXX0pfWZ1bmN0aW9uIG9SKCl7cmV0dXJuKDAsbC5qc3hzKShcInN2Z1wiLHt3aWR0aDpcIjIwXCIsaGVpZ2h0OlwiMjBcIix2aWV3Qm94OlwiMCAwIDIwIDIwXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2hpbGRyZW46WygwLGwuanN4KShcImdcIix7Y2xpcFBhdGg6XCJ1cmwoI2NsaXAwXzI3NTlfMTg4MSlcIixjaGlsZHJlbjooMCxsLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMy41IDcuMzA3NjJWMTIuNjkyNEw3LjMwNzYyIDE2LjVIMTIuNjkyNEwxNi41IDEyLjY5MjRWNy4zMDc2MkwxMi42OTI0IDMuNUg3LjMwNzYyTDMuNSA3LjMwNzYyWk0xOCAxMi44OTk0TDE3Ljk5NTEgMTIuOTk4QzE3Ljk3MjQgMTMuMjI3MSAxNy44NzEyIDEzLjQ0MjMgMTcuNzA3IDEzLjYwNjRMMTMuNjA2NCAxNy43MDdMMTMuNTMzMiAxNy43NzM0QzEzLjM4MDYgMTcuODk4NSAxMy4xOTQ0IDE3Ljk3NTcgMTIuOTk4IDE3Ljk5NTFMMTIuODk5NCAxOEg3LjEwMDU5TDcuMDAxOTUgMTcuOTk1MUM2LjgwNTYyIDE3Ljk3NTcgNi42MTk0IDE3Ljg5ODUgNi40NjY4IDE3Ljc3MzRMNi4zOTM1NSAxNy43MDdMMi4yOTI5NyAxMy42MDY0QzIuMTI4ODMgMTMuNDQyMyAyLjAyNzU2IDEzLjIyNzEgMi4wMDQ4OCAxMi45OThMMiAxMi44OTk0VjcuMTAwNTlDMiA2LjgzNTM5IDIuMTA1NDYgNi41ODEwOSAyLjI5Mjk3IDYuMzkzNTVMNi4zOTM1NSAyLjI5Mjk3QzYuNTU3NzEgMi4xMjg4MyA2Ljc3Mjk0IDIuMDI3NTYgNy4wMDE5NSAyLjAwNDg4TDcuMTAwNTkgMkgxMi44OTk0TDEyLjk5OCAyLjAwNDg4QzEzLjIyNzEgMi4wMjc1NiAxMy40NDIzIDIuMTI4ODMgMTMuNjA2NCAyLjI5Mjk3TDE3LjcwNyA2LjM5MzU1QzE3Ljg5NDUgNi41ODEwOSAxOCA2LjgzNTM5IDE4IDcuMTAwNTlWMTIuODk5NFpNOS4yNSA1Ljc1SDEwLjc1TDEwLjc1IDEwLjc1SDkuMjVMOS4yNSA1Ljc1Wk0xMCAxNEMxMC41NTIzIDE0IDExIDEzLjU1MjMgMTEgMTNDMTEgMTIuNDQ3NyAxMC41NTIzIDEyIDEwIDEyQzkuNDQ3NzIgMTIgOSAxMi40NDc3IDkgMTNDOSAxMy41NTIzIDkuNDQ3NzIgMTQgMTAgMTRaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KSwoMCxsLmpzeCkoXCJkZWZzXCIse2NoaWxkcmVuOigwLGwuanN4KShcImNsaXBQYXRoXCIse2lkOlwiY2xpcDBfMjc1OV8xODgxXCIsY2hpbGRyZW46KDAsbC5qc3gpKFwicmVjdFwiLHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIixmaWxsOlwid2hpdGVcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMiAyKVwifSl9KX0pXX0pfWZ1bmN0aW9uIG9OKCl7cmV0dXJuKDAsbC5qc3gpKFwic3ZnXCIse3dpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDIwIDIwXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2hpbGRyZW46KDAsbC5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTEwLjU1ODYgMi41QzExLjEzNDEgMi41MDAwNCAxMS42NTg4IDIuODI5NCAxMS45MDkxIDMuMzQ3NjZMMTcuODA3NiAxNS41NjU0QzE4LjEyNzggMTYuMjI5MiAxNy42NDQyIDE2Ljk5OTcgMTYuOTA3MiAxN0gzLjA5Mjc0QzIuMzU1NzQgMTYuOTk5NyAxLjg3MjEgMTYuMjI5MiAyLjE5MjM1IDE1LjU2NTRMOC4wOTA3OSAzLjM0NzY2QzguMzQxMDkgMi44Mjk0IDguODY1ODMgMi41MDAwNCA5LjQ0MTM3IDIuNUgxMC41NTg2Wk0zLjg5MDU5IDE1LjVIMTYuMTA5M0wxMC41NTg2IDRIOS40NDEzN0wzLjg5MDU5IDE1LjVaTTkuMjQ5OTcgNi43NUgxMC43NUwxMC43NSAxMC43NUg5LjI0OTk3TDkuMjQ5OTcgNi43NVpNOS45OTk5NyAxNEMxMC41NTIzIDE0IDExIDEzLjU1MjMgMTEgMTNDMTEgMTIuNDQ3NyAxMC41NTIzIDEyIDkuOTk5OTcgMTJDOS40NDc2OCAxMiA4Ljk5OTk3IDEyLjQ0NzcgOC45OTk5NyAxM0M4Ljk5OTk3IDEzLjU1MjMgOS40NDc2OCAxNCA5Ljk5OTk3IDE0WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSl9ZnVuY3Rpb24gb0QoKXtyZXR1cm4oMCxsLmpzeCkoXCJzdmdcIix7d2lkdGg6XCIyMFwiLGhlaWdodDpcIjIwXCIsdmlld0JveDpcIjAgMCAyMCAyMFwiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNoaWxkcmVuOigwLGwuanN4KShcInBhdGhcIix7ZDpcIk05Ljk2NDg0IDNDMTMuODQ2MyAzLjAwMDE4IDE3IDYuMTMwMTIgMTcgMTBDMTcgMTMuODY5OSAxMy44NDYzIDE2Ljk5OTggOS45NjQ4NCAxN0M3LjYyNDA0IDE3IDUuNTQ4NzcgMTUuODYxNyA0LjI3MDUxIDE0LjExMjNMMy44MjgxMiAxMy41MDY4TDUuMDM5MDYgMTIuNjIyMUw1LjQ4MTQ1IDEzLjIyNzVDNi40ODgxNSAxNC42MDUzIDguMTIwOTIgMTUuNSA5Ljk2NDg0IDE1LjVDMTMuMDI1OSAxNS40OTk4IDE1LjUgMTMuMDMzNSAxNS41IDEwQzE1LjUgNi45NjY1NCAxMy4wMjU5IDQuNTAwMTggOS45NjQ4NCA0LjVDNy40MjkwNSA0LjUgNS4yOTU0NCA2LjE5NDI5IDQuNjM4NjcgOC41SDhWMTBIMi43NUMyLjMzNTc5IDEwIDIgOS42NjQyMSAyIDkuMjVWNEgzLjVWNy4yMzczQzQuNTc3ODEgNC43NDM3NiA3LjA2NzQ5IDMgOS45NjQ4NCAzWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSl9ZnVuY3Rpb24gb0IoZSl7cmV0dXJuKDAsbC5qc3gpKFwic3ZnXCIsb18ob0Uoe3N0cm9rZUxpbmVqb2luOlwicm91bmRcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCJ9LGUpLHtjaGlsZHJlbjooMCxsLmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNOC43MDcxIDIuMzk2NDRDOC4zMTY1OCAyLjAwNTkyIDcuNjgzNDEgMi4wMDU5MiA3LjI5Mjg5IDIuMzk2NDRMNC40Njk2NiA1LjIxOTY2TDMuOTM5MzMgNS43NDk5OUw0Ljk5OTk5IDYuODEwNjVMNS41MzAzMiA2LjI4MDMyTDcuOTk5OTkgMy44MTA2NUwxMC40Njk3IDYuMjgwMzJMMTEgNi44MTA2NUwxMi4wNjA3IDUuNzQ5OTlMMTEuNTMwMyA1LjIxOTY2TDguNzA3MSAyLjM5NjQ0Wk01LjUzMDMyIDkuNzE5NjZMNC45OTk5OSA5LjE4OTMzTDMuOTM5MzMgMTAuMjVMNC40Njk2NiAxMC43ODAzTDcuMjkyODkgMTMuNjAzNUM3LjY4MzQxIDEzLjk5NDEgOC4zMTY1OCAxMy45OTQxIDguNzA3MSAxMy42MDM1TDExLjUzMDMgMTAuNzgwM0wxMi4wNjA3IDEwLjI1TDExIDkuMTg5MzNMMTAuNDY5NyA5LjcxOTY2TDcuOTk5OTkgMTIuMTg5M0w1LjUzMDMyIDkuNzE5NjZaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KSl9ZnVuY3Rpb24gb00oZSl7cmV0dXJuKDAsbC5qc3gpKFwiYnV0dG9uXCIsb18ob0Uoe30sZSkse2NoaWxkcmVuOigwLGwuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwic2VnbWVudC1ib3VuZGFyeS10cmlnZ2VyLXRleHRcIixjaGlsZHJlbjooMCxsLmpzeCkob0Ise2NsYXNzTmFtZTpcInBsdXMtaWNvblwifSl9KX0pKX1sZXQgb0k9Qy5jcmVhdGVDb250ZXh0KHtoYXNQcm92aWRlcjohMSx0aW1lb3V0TXM6MCxkZWxheVJlZjp7Y3VycmVudDowfSxpbml0aWFsRGVsYXlSZWY6e2N1cnJlbnQ6MH0sdGltZW91dDpuZXcgZWosY3VycmVudElkUmVmOntjdXJyZW50Om51bGx9LGN1cnJlbnRDb250ZXh0UmVmOntjdXJyZW50Om51bGx9fSk7ZnVuY3Rpb24gb0goZSl7bGV0e2NoaWxkcmVuOm4sZGVsYXk6dCx0aW1lb3V0TXM6cj0wfT1lLG89Qy51c2VSZWYodCksYT1DLnVzZVJlZih0KSxpPUMudXNlUmVmKG51bGwpLHM9Qy51c2VSZWYobnVsbCksYz1laygpO3JldHVybigwLGwuanN4KShvSS5Qcm92aWRlcix7dmFsdWU6Qy51c2VNZW1vKCgpPT4oe2hhc1Byb3ZpZGVyOiEwLGRlbGF5UmVmOm8saW5pdGlhbERlbGF5UmVmOmEsY3VycmVudElkUmVmOmksdGltZW91dE1zOnIsY3VycmVudENvbnRleHRSZWY6cyx0aW1lb3V0OmN9KSxbcixjXSksY2hpbGRyZW46bn0pfWxldCBvRj1DLmNyZWF0ZUNvbnRleHQodm9pZCAwKSxvVT1mdW5jdGlvbihlKXtsZXR7ZGVsYXk6bixjbG9zZURlbGF5OnQsdGltZW91dDpyPTQwMH09ZSxvPUMudXNlTWVtbygoKT0+KHtkZWxheTpuLGNsb3NlRGVsYXk6dH0pLFtuLHRdKTtyZXR1cm4oMCxsLmpzeCkob0YuUHJvdmlkZXIse3ZhbHVlOm8sY2hpbGRyZW46KDAsbC5qc3gpKG9ILHtkZWxheTp7b3BlbjpuLGNsb3NlOnR9LHRpbWVvdXRNczpyLGNoaWxkcmVuOmUuY2hpbGRyZW59KX0pfSxvVj1DLmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiBvcSgpe2xldCBlPUMudXNlQ29udGV4dChvVik7aWYodm9pZCAwPT09ZSl0aHJvdyBFcnJvcihcIkJhc2UgVUk6IFRvb2x0aXBSb290Q29udGV4dCBpcyBtaXNzaW5nLiBUb29sdGlwIHBhcnRzIG11c3QgYmUgcGxhY2VkIHdpdGhpbiA8VG9vbHRpcC5Sb290Pi5cIik7cmV0dXJuIGV9ZnVuY3Rpb24gb1coZSl7cmV0dXJuIG51bGwhPWUmJm51bGwhPWUuY2xpZW50WH1mdW5jdGlvbiBvJChlKXtsZXR7ZGlzYWJsZWQ6bj0hMSxkZWZhdWx0T3Blbjp0PSExLG9uT3BlbkNoYW5nZTpyLG9wZW46byxkZWxheTphLGNsb3NlRGVsYXk6aSxob3ZlcmFibGU6cz0hMCx0cmFja0N1cnNvckF4aXM6Yz1cIm5vbmVcIixhY3Rpb25zUmVmOnUsb25PcGVuQ2hhbmdlQ29tcGxldGU6ZH09ZSxmPWE/PzYwMCxwPWk/PzAsW2gsZ109Qy51c2VTdGF0ZShudWxsKSxbbSx2XT1DLnVzZVN0YXRlKG51bGwpLFtiLHldPUMudXNlU3RhdGUoKSx4PUMudXNlUmVmKG51bGwpLFt3LGpdPW40KHtjb250cm9sbGVkOm8sZGVmYXVsdDp0LG5hbWU6XCJUb29sdGlwXCIsc3RhdGU6XCJvcGVuXCJ9KSxrPVQociksQT1UKChlLG4sdCk9PntsZXQgcj1cInRyaWdnZXItaG92ZXJcIj09PXQsbz1lJiZcInRyaWdnZXItZm9jdXNcIj09PXQsYT0hZSYmKFwidHJpZ2dlci1wcmVzc1wiPT09dHx8XCJlc2NhcGUta2V5XCI9PT10KTtmdW5jdGlvbiBpKCl7ayhlLG4sdCksaihlKX1yP0UuZmx1c2hTeW5jKGkpOmkoKSxvfHxhP3kobz9cImZvY3VzXCI6XCJkaXNtaXNzXCIpOlwidHJpZ2dlci1ob3ZlclwiPT09dCYmeSh2b2lkIDApfSk7dyYmbiYmQSghMSx2b2lkIDAsXCJkaXNhYmxlZFwiKTtsZXR7bW91bnRlZDpPLHNldE1vdW50ZWQ6Uyx0cmFuc2l0aW9uU3RhdHVzOl99PW4yKHcpLFA9VCgoKT0+e1MoITEpLGQ/LighMSl9KTtuNSh7ZW5hYmxlZDohdSxvcGVuOncscmVmOngsb25Db21wbGV0ZSgpe3d8fFAoKX19KSxDLnVzZUltcGVyYXRpdmVIYW5kbGUodSwoKT0+KHt1bm1vdW50OlB9KSxbUF0pO2xldCB6PVkoe2VsZW1lbnRzOntyZWZlcmVuY2U6aCxmbG9hdGluZzptfSxvcGVuOncsb25PcGVuQ2hhbmdlKGUsbix0KXtBKGUsbix0cih0KSl9fSksTD1DLnVzZUNvbnRleHQob0YpLHtkZWxheVJlZjpSLGlzSW5zdGFudFBoYXNlOk4saGFzUHJvdmlkZXI6RH09ZnVuY3Rpb24oZSxuPXt9KXtsZXR7b3Blbjp0LG9uT3BlbkNoYW5nZTpyLGZsb2F0aW5nSWQ6b309ZSx7ZW5hYmxlZDphPSEwfT1uLHtjdXJyZW50SWRSZWY6aSxkZWxheVJlZjpsLHRpbWVvdXRNczpzLGluaXRpYWxEZWxheVJlZjpjLGN1cnJlbnRDb250ZXh0UmVmOnUsaGFzUHJvdmlkZXI6ZCx0aW1lb3V0OmZ9PUMudXNlQ29udGV4dChvSSksW3AsaF09Qy51c2VTdGF0ZSghMSk7cmV0dXJuIEYoKCk9PntmdW5jdGlvbiBlKCl7aCghMSksdS5jdXJyZW50Py5zZXRJc0luc3RhbnRQaGFzZSghMSksaS5jdXJyZW50PW51bGwsdS5jdXJyZW50PW51bGwsbC5jdXJyZW50PWMuY3VycmVudH1pZihhJiZpLmN1cnJlbnQmJiF0JiZpLmN1cnJlbnQ9PT1vKXtpZihoKCExKSxzKXJldHVybiBmLnN0YXJ0KHMsZSksKCk9PntmLmNsZWFyKCl9O2UoKX19LFthLHQsbyxpLGwscyxjLHUsZl0pLEYoKCk9PntpZighYXx8IXQpcmV0dXJuO2xldCBlPXUuY3VycmVudCxuPWkuY3VycmVudDt1LmN1cnJlbnQ9e29uT3BlbkNoYW5nZTpyLHNldElzSW5zdGFudFBoYXNlOmh9LGkuY3VycmVudD1vLGwuY3VycmVudD17b3BlbjowLGNsb3NlOmU0KGMuY3VycmVudCxcImNsb3NlXCIpfSxudWxsIT09biYmbiE9PW8/KGYuY2xlYXIoKSxoKCEwKSxlPy5zZXRJc0luc3RhbnRQaGFzZSghMCksZT8ub25PcGVuQ2hhbmdlKCExKSk6KGgoITEpLGU/LnNldElzSW5zdGFudFBoYXNlKCExKSl9LFthLHQsbyxyLGksbCxzLGMsdSxmXSksRigoKT0+KCk9Pnt1LmN1cnJlbnQ9bnVsbH0sW3VdKSxDLnVzZU1lbW8oKCk9Pih7aGFzUHJvdmlkZXI6ZCxkZWxheVJlZjpsLGlzSW5zdGFudFBoYXNlOnB9KSxbZCxsLHBdKX0oeiksQj1OP1wiZGVsYXlcIjpiLE09ZTMoeix7ZW5hYmxlZDohbixtb3VzZU9ubHk6ITAsbW92ZTohMSxoYW5kbGVDbG9zZTpzJiZcImJvdGhcIiE9PWM/ZTcoKTpudWxsLHJlc3RNcygpe2xldCBlPUw/LmRlbGF5LG49XCJvYmplY3RcIj09dHlwZW9mIFIuY3VycmVudD9SLmN1cnJlbnQub3Blbjp2b2lkIDAsdD1mO3JldHVybiBEJiYodD0wIT09bj9hPz9lPz9mOjApLHR9LGRlbGF5KCl7bGV0IGU9XCJvYmplY3RcIj09dHlwZW9mIFIuY3VycmVudD9SLmN1cnJlbnQuY2xvc2U6dm9pZCAwLG49cDtyZXR1cm4gbnVsbD09aSYmRCYmKG49ZSkse2Nsb3NlOm59fX0pLEk9bm4oeix7ZW5hYmxlZDohbn0pLHtnZXRSZWZlcmVuY2VQcm9wczpILGdldEZsb2F0aW5nUHJvcHM6VX09bksoW00sSSxuZih6LHtlbmFibGVkOiFuLHJlZmVyZW5jZVByZXNzOiEwfSksZnVuY3Rpb24oZSxuPXt9KXtsZXR7b3Blbjp0LGRhdGFSZWY6cixlbGVtZW50czp7ZmxvYXRpbmc6byxkb21SZWZlcmVuY2U6YX0scmVmczppfT1lLHtlbmFibGVkOmw9ITAsYXhpczpzPVwiYm90aFwiLHg6Yz1udWxsLHk6dT1udWxsfT1uLGQ9Qy51c2VSZWYoITEpLGY9Qy51c2VSZWYobnVsbCksW3AsaF09Qy51c2VTdGF0ZSgpLFtnLG1dPUMudXNlU3RhdGUoW10pLHY9VCgoZSxuKT0+e2lmKCFkLmN1cnJlbnQmJighci5jdXJyZW50Lm9wZW5FdmVudHx8b1coci5jdXJyZW50Lm9wZW5FdmVudCkpKXt2YXIgdDtsZXQgbyxsLGM7aS5zZXRQb3NpdGlvblJlZmVyZW5jZSgodD17eDplLHk6bixheGlzOnMsZGF0YVJlZjpyLHBvaW50ZXJUeXBlOnB9LG89bnVsbCxsPW51bGwsYz0hMSx7Y29udGV4dEVsZW1lbnQ6YXx8dm9pZCAwLGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpe2xldCBlPWE/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfHx7d2lkdGg6MCxoZWlnaHQ6MCx4OjAseTowfSxuPVwieFwiPT09dC5heGlzfHxcImJvdGhcIj09PXQuYXhpcyxyPVwieVwiPT09dC5heGlzfHxcImJvdGhcIj09PXQuYXhpcyxpPVtcIm1vdXNlZW50ZXJcIixcIm1vdXNlbW92ZVwiXS5pbmNsdWRlcyh0LmRhdGFSZWYuY3VycmVudC5vcGVuRXZlbnQ/LnR5cGV8fFwiXCIpJiZcInRvdWNoXCIhPT10LnBvaW50ZXJUeXBlLHM9ZS53aWR0aCx1PWUuaGVpZ2h0LGQ9ZS54LGY9ZS55O3JldHVybiBudWxsPT1vJiZ0LngmJm4mJihvPWUueC10LngpLG51bGw9PWwmJnQueSYmciYmKGw9ZS55LXQueSksZC09b3x8MCxmLT1sfHwwLHM9MCx1PTAsIWN8fGk/KHM9XCJ5XCI9PT10LmF4aXM/ZS53aWR0aDowLHU9XCJ4XCI9PT10LmF4aXM/ZS5oZWlnaHQ6MCxkPW4mJm51bGwhPXQueD90Lng6ZCxmPXImJm51bGwhPXQueT90Lnk6Zik6YyYmIWkmJih1PVwieFwiPT09dC5heGlzP2UuaGVpZ2h0OnUscz1cInlcIj09PXQuYXhpcz9lLndpZHRoOnMpLGM9ITAse3dpZHRoOnMsaGVpZ2h0OnUseDpkLHk6Zix0b3A6ZixyaWdodDpkK3MsYm90dG9tOmYrdSxsZWZ0OmR9fX0pKX19KSxiPVQoZT0+e251bGw9PWMmJm51bGw9PXUmJih0P2YuY3VycmVudHx8bShbXSk6dihlLmNsaWVudFgsZS5jbGllbnRZKSl9KSx5PWVJKHApP286dCx4PUMudXNlQ2FsbGJhY2soKCk9PntpZigheXx8IWx8fG51bGwhPWN8fG51bGwhPXUpcmV0dXJuO2xldCBlPVEobyk7ZnVuY3Rpb24gbih0KXtlWShvLGVYKHQpKT8oZS5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsbiksZi5jdXJyZW50PW51bGwpOnYodC5jbGllbnRYLHQuY2xpZW50WSl9aWYoIXIuY3VycmVudC5vcGVuRXZlbnR8fG9XKHIuY3VycmVudC5vcGVuRXZlbnQpKXtlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixuKTtsZXQgdD0oKT0+e2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLG4pLGYuY3VycmVudD1udWxsfTtyZXR1cm4gZi5jdXJyZW50PXQsdH1pLnNldFBvc2l0aW9uUmVmZXJlbmNlKGEpfSxbeSxsLGMsdSxvLHIsaSxhLHZdKTtDLnVzZUVmZmVjdCgoKT0+eCgpLFt4LGddKSxDLnVzZUVmZmVjdCgoKT0+e2wmJiFvJiYoZC5jdXJyZW50PSExKX0sW2wsb10pLEMudXNlRWZmZWN0KCgpPT57IWwmJnQmJihkLmN1cnJlbnQ9ITApfSxbbCx0XSksRigoKT0+e2wmJihudWxsIT1jfHxudWxsIT11KSYmKGQuY3VycmVudD0hMSx2KGMsdSkpfSxbbCxjLHUsdl0pO2xldCB3PUMudXNlTWVtbygoKT0+e2Z1bmN0aW9uIGUoZSl7aChlLnBvaW50ZXJUeXBlKX1yZXR1cm57b25Qb2ludGVyRG93bjplLG9uUG9pbnRlckVudGVyOmUsb25Nb3VzZU1vdmU6Yixvbk1vdXNlRW50ZXI6Yn19LFtiXSk7cmV0dXJuIEMudXNlTWVtbygoKT0+bD97cmVmZXJlbmNlOnd9Ont9LFtsLHddKX0oeix7ZW5hYmxlZDohbiYmXCJub25lXCIhPT1jLGF4aXM6XCJub25lXCI9PT1jP3ZvaWQgMDpjfSldKSxWPUMudXNlTWVtbygoKT0+KHtvcGVuOncsc2V0T3BlbjpBLG1vdW50ZWQ6TyxzZXRNb3VudGVkOlMsc2V0VHJpZ2dlckVsZW1lbnQ6Zyxwb3NpdGlvbmVyRWxlbWVudDptLHNldFBvc2l0aW9uZXJFbGVtZW50OnYscG9wdXBSZWY6eCx0cmlnZ2VyUHJvcHM6SCgpLHBvcHVwUHJvcHM6VSgpLGZsb2F0aW5nUm9vdENvbnRleHQ6eixpbnN0YW50VHlwZTpCLHRyYW5zaXRpb25TdGF0dXM6Xyxvbk9wZW5DaGFuZ2VDb21wbGV0ZTpkfSksW3csQSxPLFMsZyxtLHYseCxILFUseixCLF8sZF0pLHE9Qy51c2VNZW1vKCgpPT4oey4uLlYsZGVsYXk6ZixjbG9zZURlbGF5OnAsdHJhY2tDdXJzb3JBeGlzOmMsaG92ZXJhYmxlOnN9KSxbVixmLHAsYyxzXSk7cmV0dXJuKDAsbC5qc3gpKG9WLlByb3ZpZGVyLHt2YWx1ZTpxLGNoaWxkcmVuOmUuY2hpbGRyZW59KX1sZXQgb1o9Qy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7bGV0e2NsYXNzTmFtZTp0LHJlbmRlcjpyLC4uLm99PWUse29wZW46YSxzZXRUcmlnZ2VyRWxlbWVudDppLHRyaWdnZXJQcm9wczpsfT1vcSgpO3JldHVybiB0aihcImJ1dHRvblwiLGUse3N0YXRlOkMudXNlTWVtbygoKT0+KHtvcGVuOmF9KSxbYV0pLHJlZjpbbixpXSxwcm9wczpbbCxvXSxjdXN0b21TdHlsZUhvb2tNYXBwaW5nOnRGfSl9KSxvWT1DLmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiBvWChlKXtsZXQgbj1yeCh7cm9vdDplLnJvb3R9KTtyZXR1cm4gbiYmRS5jcmVhdGVQb3J0YWwoZS5jaGlsZHJlbixuKX1mdW5jdGlvbiBvSyhlKXtsZXR7Y2hpbGRyZW46bixrZWVwTW91bnRlZDp0PSExLGNvbnRhaW5lcjpyfT1lLHttb3VudGVkOm99PW9xKCk7cmV0dXJuIG98fHQ/KDAsbC5qc3gpKG9ZLlByb3ZpZGVyLHt2YWx1ZTp0LGNoaWxkcmVuOigwLGwuanN4KShvWCx7cm9vdDpyLGNoaWxkcmVuOm59KX0pOm51bGx9bGV0IG9RPUMuY3JlYXRlQ29udGV4dCh2b2lkIDApO2Z1bmN0aW9uIG9HKCl7bGV0IGU9Qy51c2VDb250ZXh0KG9RKTtpZih2b2lkIDA9PT1lKXRocm93IEVycm9yKFwiQmFzZSBVSTogVG9vbHRpcFBvc2l0aW9uZXJDb250ZXh0IGlzIG1pc3NpbmcuIFRvb2x0aXBQb3NpdGlvbmVyIHBhcnRzIG11c3QgYmUgcGxhY2VkIHdpdGhpbiA8VG9vbHRpcC5Qb3NpdGlvbmVyPi5cIik7cmV0dXJuIGV9bGV0IG9KPUMuZm9yd2FyZFJlZihmdW5jdGlvbihlLG4pe2xldHtyZW5kZXI6dCxjbGFzc05hbWU6cixhbmNob3I6byxwb3NpdGlvbk1ldGhvZDphPVwiYWJzb2x1dGVcIixzaWRlOmk9XCJ0b3BcIixhbGlnbjpzPVwiY2VudGVyXCIsc2lkZU9mZnNldDpjPTAsYWxpZ25PZmZzZXQ6dT0wLGNvbGxpc2lvbkJvdW5kYXJ5OmQ9XCJjbGlwcGluZy1hbmNlc3RvcnNcIixjb2xsaXNpb25QYWRkaW5nOmY9NSxhcnJvd1BhZGRpbmc6cD01LHN0aWNreTpoPSExLHRyYWNrQW5jaG9yOmc9ITAsY29sbGlzaW9uQXZvaWRhbmNlOm09bmEsLi4udn09ZSx7b3BlbjpiLHNldFBvc2l0aW9uZXJFbGVtZW50OnksbW91bnRlZDp4LGZsb2F0aW5nUm9vdENvbnRleHQ6dyx0cmFja0N1cnNvckF4aXM6aixob3ZlcmFibGU6a309b3EoKSxBPXI0KHthbmNob3I6byxwb3NpdGlvbk1ldGhvZDphLGZsb2F0aW5nUm9vdENvbnRleHQ6dyxtb3VudGVkOngsc2lkZTppLHNpZGVPZmZzZXQ6YyxhbGlnbjpzLGFsaWduT2Zmc2V0OnUsY29sbGlzaW9uQm91bmRhcnk6ZCxjb2xsaXNpb25QYWRkaW5nOmYsc3RpY2t5OmgsYXJyb3dQYWRkaW5nOnAsdHJhY2tBbmNob3I6ZyxrZWVwTW91bnRlZDpmdW5jdGlvbigpe2xldCBlPUMudXNlQ29udGV4dChvWSk7aWYodm9pZCAwPT09ZSl0aHJvdyBFcnJvcihcIkJhc2UgVUk6IDxUb29sdGlwLlBvcnRhbD4gaXMgbWlzc2luZy5cIik7cmV0dXJuIGV9KCksY29sbGlzaW9uQXZvaWRhbmNlOm19KSxPPUMudXNlTWVtbygoKT0+e2xldCBlPXt9O3JldHVybiBiJiZcImJvdGhcIiE9PWomJmt8fChlLnBvaW50ZXJFdmVudHM9XCJub25lXCIpLHtyb2xlOlwicHJlc2VudGF0aW9uXCIsaGlkZGVuOiF4LHN0eWxlOnsuLi5BLnBvc2l0aW9uZXJTdHlsZXMsLi4uZX19fSxbYixqLGsseCxBLnBvc2l0aW9uZXJTdHlsZXNdKSxTPUMudXNlTWVtbygoKT0+KHtwcm9wczpPLC4uLkF9KSxbTyxBXSksRT1DLnVzZU1lbW8oKCk9Pih7b3BlbjpiLHNpZGU6Uy5zaWRlLGFsaWduOlMuYWxpZ24sYW5jaG9ySGlkZGVuOlMuYW5jaG9ySGlkZGVufSksW2IsUy5zaWRlLFMuYWxpZ24sUy5hbmNob3JIaWRkZW5dKSxfPUMudXNlTWVtbygoKT0+KHsuLi5FLGFycm93UmVmOlMuYXJyb3dSZWYsYXJyb3dTdHlsZXM6Uy5hcnJvd1N0eWxlcyxhcnJvd1VuY2VudGVyZWQ6Uy5hcnJvd1VuY2VudGVyZWR9KSxbRSxTLmFycm93UmVmLFMuYXJyb3dTdHlsZXMsUy5hcnJvd1VuY2VudGVyZWRdKSxQPXRqKFwiZGl2XCIsZSx7c3RhdGU6RSxwcm9wczpbUy5wcm9wcyx2XSxyZWY6W24seV0sY3VzdG9tU3R5bGVIb29rTWFwcGluZzp0Vn0pO3JldHVybigwLGwuanN4KShvUS5Qcm92aWRlcix7dmFsdWU6XyxjaGlsZHJlbjpQfSl9KSxvMD17Li4udFYsLi4udFR9LG8xPUMuZm9yd2FyZFJlZihmdW5jdGlvbihlLG4pe2xldHtjbGFzc05hbWU6dCxyZW5kZXI6ciwuLi5vfT1lLHtvcGVuOmEsaW5zdGFudFR5cGU6aSx0cmFuc2l0aW9uU3RhdHVzOmwscG9wdXBQcm9wczpzLHBvcHVwUmVmOmMsb25PcGVuQ2hhbmdlQ29tcGxldGU6dX09b3EoKSx7c2lkZTpkLGFsaWduOmZ9PW9HKCk7cmV0dXJuIG41KHtvcGVuOmEscmVmOmMsb25Db21wbGV0ZSgpe2EmJnU/LighMCl9fSksdGooXCJkaXZcIixlLHtzdGF0ZTpDLnVzZU1lbW8oKCk9Pih7b3BlbjphLHNpZGU6ZCxhbGlnbjpmLGluc3RhbnQ6aSx0cmFuc2l0aW9uU3RhdHVzOmx9KSxbYSxkLGYsaSxsXSkscmVmOltuLGNdLHByb3BzOltzLFwic3RhcnRpbmdcIj09PWw/bnQ6bnIsb10sY3VzdG9tU3R5bGVIb29rTWFwcGluZzpvMH0pfSksbzI9Qy5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7bGV0e2NsYXNzTmFtZTp0LHJlbmRlcjpyLC4uLm99PWUse29wZW46YSxhcnJvd1JlZjppLHNpZGU6bCxhbGlnbjpzLGFycm93VW5jZW50ZXJlZDpjLGFycm93U3R5bGVzOnV9PW9HKCk7cmV0dXJuIHRqKFwiZGl2XCIsZSx7c3RhdGU6Qy51c2VNZW1vKCgpPT4oe29wZW46YSxzaWRlOmwsYWxpZ246cyx1bmNlbnRlcmVkOmN9KSxbYSxsLHMsY10pLHJlZjpbbixpXSxwcm9wczpbe3N0eWxlOnUsXCJhcmlhLWhpZGRlblwiOiEwfSxvXSxjdXN0b21TdHlsZUhvb2tNYXBwaW5nOnRWfSl9KTt2YXIgbzQ9dChcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9jb21wb25lbnRzL3Rvb2x0aXAuY3NzXCIpLG81PXt9O2Z1bmN0aW9uIG8zKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1vNS5zdHlsZVRhZ1RyYW5zZm9ybT15KCksbzUuc2V0QXR0cmlidXRlcz1nKCksbzUuaW5zZXJ0PXAoKSxvNS5kb21BUEk9ZCgpLG81Lmluc2VydFN0eWxlRWxlbWVudD12KCksYygpKG80LlosbzUpLG80LlomJm80LloubG9jYWxzJiZvNC5aLmxvY2Fsczt2YXIgbzY9KDAsQy5mb3J3YXJkUmVmKShmdW5jdGlvbihlLG4pe3ZhciB0LHI9ZS5jbGFzc05hbWUsbz1lLmNoaWxkcmVuLGE9ZS50aXRsZSxpPWUuZGlyZWN0aW9uLHM9dm9pZCAwPT09aT9cInRvcFwiOmksYz1lLmFycm93U2l6ZSx1PXZvaWQgMD09PWM/NjpjLGQ9ZS5vZmZzZXQsZj1lLmJnY29sb3IscD12b2lkIDA9PT1mP1wiIzAwMFwiOmYsaD1lLmNvbG9yLGc9KHQ9KDAsQy51c2VTdGF0ZSkoZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm5leHRqcy1wb3J0YWxcIikuc2hhZG93Um9vdH0pLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHQpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KHQsMSl8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG8zKGUsMSk7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG8zKGUsbil9fSh0LDEpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKVswXSxtPSgwLEMudXNlUmVmKShnKTtyZXR1cm4gYT8oMCxsLmpzeCkob1Use2NoaWxkcmVuOigwLGwuanN4cykobyQse2RlbGF5OjQwMCxjaGlsZHJlbjpbKDAsbC5qc3gpKG9aLHtyZWY6bixyZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIG4sdDtyZXR1cm4oMCxsLmpzeCkoXCJzcGFuXCIsKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByO3I9dFtuXSxuIGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbbl09cn0pfXJldHVybiBlfSh7fSxlKSx0PXQ9e2NoaWxkcmVuOm99LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpfX0pLCgwLGwuanN4KShvSyx7Y29udGFpbmVyOm0sY2hpbGRyZW46KDAsbC5qc3gpKG9KLHtzaWRlOnMsc2lkZU9mZnNldDoodm9pZCAwPT09ZD84OmQpK3UsY2xhc3NOYW1lOlwidG9vbHRpcC1wb3NpdGlvbmVyXCIsc3R5bGU6e1wiLS1hbmNob3Itd2lkdGhcIjpcIlwiLmNvbmNhdCh1LFwicHhcIiksXCItLWFuY2hvci1oZWlnaHRcIjpcIlwiLmNvbmNhdCh1LFwicHhcIil9LGNoaWxkcmVuOigwLGwuanN4cykobzEse2NsYXNzTmFtZTooMCxrLmN4KShcInRvb2x0aXBcIixyKSxzdHlsZTp7YmFja2dyb3VuZENvbG9yOnAsY29sb3I6dm9pZCAwPT09aD9cIiNmZmZcIjpoLFwiLS10b29sdGlwLWJnLWNvbG9yXCI6cCxcIi0tYXJyb3ctc2l6ZVwiOlwiXCIuY29uY2F0KHUsXCJweFwiKX0sY2hpbGRyZW46W2EsKDAsbC5qc3gpKG8yLHtjbGFzc05hbWU6KDAsay5jeCkoXCJ0b29sdGlwLWFycm93XCIsXCJ0b29sdGlwLWFycm93LS1cIi5jb25jYXQocykpLHN0eWxlOntcIi0tYXJyb3ctc2l6ZVwiOlwiXCIuY29uY2F0KHUsXCJweFwiKSxcIi0tdG9vbHRpcC1iZy1jb2xvclwiOnB9fSldfSl9KX0pXX0pfSk6b30pO2Z1bmN0aW9uIG85KGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcjtyPXRbbl0sbiBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW25dPXJ9KX1yZXR1cm4gZX1mdW5jdGlvbiBvOChlLG4pe3JldHVybiBuPW51bGwhPW4/bjp7fSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pLGV9dmFyIG83PWZ1bmN0aW9uKGUpe3ZhciBuLHQ7cmV0dXJuISEobnVsbD09KG49ZS52YWx1ZSk/dm9pZCAwOm4udHlwZSkmJiEhKG51bGw9PSh0PWUudmFsdWUpP3ZvaWQgMDp0LnBhZ2VQYXRoKX07ZnVuY3Rpb24gYWUoZSl7dmFyIG49ZS5wYWdlO3JldHVybigwLGwuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1wYWdlLXJvdXRlLWJhclwiLGNoaWxkcmVuOlsoMCxsLmpzeCkoYWEse30pLCgwLGwuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1wYWdlLXJvdXRlLWJhci1wYXRoXCIsY2hpbGRyZW46bn0pXX0pfWZ1bmN0aW9uIGFuKGUpe3ZhciBuPWUuYWN0aXZlQm91bmRhcmllc0NvdW50LHQ9ZS5vbkdsb2JhbFJlc2V0LHI9bj4wO3JldHVybigwLGwuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJzZWdtZW50LWV4cGxvcmVyLWZvb3RlclwiLGNoaWxkcmVuOigwLGwuanN4cykoXCJidXR0b25cIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1mb290ZXItYnV0dG9uIFwiLmNvbmNhdChyP1wiXCI6XCJzZWdtZW50LWV4cGxvcmVyLWZvb3Rlci1idXR0b24tLWRpc2FibGVkXCIpLG9uQ2xpY2s6cj90OnZvaWQgMCxkaXNhYmxlZDohcix0eXBlOlwiYnV0dG9uXCIsY2hpbGRyZW46WygwLGwuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1mb290ZXItdGV4dFwiLGNoaWxkcmVuOlwiQ2xlYXIgU2VnbWVudCBPdmVycmlkZXNcIn0pLHImJigwLGwuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1mb290ZXItYmFkZ2VcIixjaGlsZHJlbjpufSldfSl9KX1mdW5jdGlvbiBhdChlKXt2YXIgbj1lLmlzQXBwUm91dGVyLHQ9ZS5wYWdlLHI9KDAsai5pOCkoKSxvPSgwLEMudXNlTWVtbykoZnVuY3Rpb24oKXtyZXR1cm4gbj9mdW5jdGlvbiBlKG4pe3ZhciB0LHI9MDtyZXR1cm4obnVsbD09KHQ9bi52YWx1ZSk/dm9pZCAwOnQuc2V0Qm91bmRhcnlUeXBlKSYmbnVsbCE9PW4udmFsdWUuYm91bmRhcnlUeXBlJiYhb08obi52YWx1ZS50eXBlKSYmcisrLE9iamVjdC52YWx1ZXMobi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuJiYocis9ZShuKSl9KSxyfShyKTowfSxbcixuXSksYT0oMCxDLnVzZUNhbGxiYWNrKShmdW5jdGlvbigpe24mJmZ1bmN0aW9uIGUobil7dmFyIHQ7KG51bGw9PSh0PW4udmFsdWUpP3ZvaWQgMDp0LnNldEJvdW5kYXJ5VHlwZSkmJm4udmFsdWUuc2V0Qm91bmRhcnlUeXBlKG51bGwpLE9iamVjdC52YWx1ZXMobi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihuKXtuJiZlKG4pfSl9KHIpfSxbcixuXSk7cmV0dXJuKDAsbC5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNlZ21lbnRzLWV4cGxvcmVyXCI6ITAsY2hpbGRyZW46W24mJigwLGwuanN4KShhZSx7cGFnZTp0fSksKDAsbC5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItY29udGVudFwiLFwiZGF0YS1uZXh0anMtZGV2dG9vbC1zZWdtZW50LWV4cGxvcmVyXCI6ITAsY2hpbGRyZW46bj8oMCxsLmpzeCkoYXIse25vZGU6cixsZXZlbDowLHNlZ21lbnQ6XCJcIn0pOigwLGwuanN4KShcInBcIix7Y2hpbGRyZW46XCJSb3V0ZSBJbmZvIGN1cnJlbnRseSBpcyBvbmx5IGF2YWlsYWJsZSBmb3IgdGhlIEFwcCBSb3V0ZXIuXCJ9KX0pLG4mJigwLGwuanN4KShhbix7YWN0aXZlQm91bmRhcmllc0NvdW50Om8sb25HbG9iYWxSZXNldDphfSldfSl9ZnVuY3Rpb24gYXIoZSl7dmFyIG49ZS5zZWdtZW50LHQ9ZS5ub2RlLHI9ZS5sZXZlbCxvPU9iamVjdC5rZXlzKHQuY2hpbGRyZW4pLnNvcnQoZnVuY3Rpb24oZSxuKXt2YXIgcj1lLmluY2x1ZGVzKFwiLlwiKSxvPW4uaW5jbHVkZXMoXCIuXCIpO2lmKHImJiFvKXJldHVybiAtMTtpZighciYmbylyZXR1cm4gMTtpZihyJiZvKXt2YXIgYSxpLGwscyxjLHUsZCxmLHA9bnVsbD09KGk9dC5jaGlsZHJlbltlXSl8fG51bGw9PShhPWkudmFsdWUpP3ZvaWQgMDphLnR5cGUsaD1udWxsPT0ocz10LmNoaWxkcmVuW25dKXx8bnVsbD09KGw9cy52YWx1ZSk/dm9pZCAwOmwudHlwZSxnPWZ1bmN0aW9uKGUpe3JldHVybiBlP1wibGF5b3V0XCI9PT1lPzE6XCJ0ZW1wbGF0ZVwiPT09ZT8yOlwicGFnZVwiPT09ZT8zOm9PKGUpPzQ6NTo1fSxtPWcocCksdj1nKGgpO2lmKG0hPT12KXJldHVybiBtLXY7dmFyIGI9KG51bGw9PSh1PXQuY2hpbGRyZW5bZV0pfHxudWxsPT0oYz11LnZhbHVlKT92b2lkIDA6Yy5wYWdlUGF0aCl8fFwiXCIseT0obnVsbD09KGY9dC5jaGlsZHJlbltuXSl8fG51bGw9PShkPWYudmFsdWUpP3ZvaWQgMDpkLnBhZ2VQYXRoKXx8XCJcIjtyZXR1cm4gYi5sb2NhbGVDb21wYXJlKHkpfXJldHVybiBlLmxvY2FsZUNvbXBhcmUobil9KSxhPTAhPT1yfHxuP246XCJhcHBcIixpPVtdLHM9W10sYz0hMCx1PSExLGQ9dm9pZCAwO3RyeXtmb3IodmFyIGYscD1vW1N5bWJvbC5pdGVyYXRvcl0oKTshKGM9KGY9cC5uZXh0KCkpLmRvbmUpO2M9ITApe3ZhciBoPWYudmFsdWUsZz10LmNoaWxkcmVuW2hdO2lmKGcpe2lmKG83KGcpKXtzLnB1c2goaCk7Y29udGludWV9aS5wdXNoKGgpfX19Y2F0Y2goZSl7dT0hMCxkPWV9ZmluYWxseXt0cnl7Y3x8bnVsbD09cC5yZXR1cm58fHAucmV0dXJuKCl9ZmluYWxseXtpZih1KXRocm93IGR9fWZvcih2YXIgbT1udWxsLHY9by5sZW5ndGgtMTt2Pj0wO3YtLSl7dmFyIGI9dC5jaGlsZHJlbltvW3ZdXTtpZihiJiZiLnZhbHVlKXt2YXIgeT1vTyhiLnZhbHVlLnR5cGUpO2lmKCFtJiYheSl7bT1iO2JyZWFrfX19dmFyIHg9bnVsbCx3PSEwLGo9ITEsQT12b2lkIDA7dHJ5e2Zvcih2YXIgTyxDPW9bU3ltYm9sLml0ZXJhdG9yXSgpOyEodz0oTz1DLm5leHQoKSkuZG9uZSk7dz0hMCl7dmFyIFM9Ty52YWx1ZSxFPXQuY2hpbGRyZW5bU107aWYoRSYmRS52YWx1ZSYmb08oRS52YWx1ZS50eXBlKSl7eD1FO2JyZWFrfX19Y2F0Y2goZSl7aj0hMCxBPWV9ZmluYWxseXt0cnl7d3x8bnVsbD09Qy5yZXR1cm58fEMucmV0dXJuKCl9ZmluYWxseXtpZihqKXRocm93IEF9fW09bXx8eDt2YXIgXz1zLmxlbmd0aD4wLFA9e1wibm90LWZvdW5kXCI6bnVsbCxsb2FkaW5nOm51bGwsZXJyb3I6bnVsbH07cmV0dXJuIHMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgbj10LmNoaWxkcmVuW2VdO2lmKG4mJm4udmFsdWUmJm9PKG4udmFsdWUudHlwZSkpe3ZhciByPW4udmFsdWUudHlwZS5yZXBsYWNlKG9BLFwiXCIpO3IgaW4gUCYmKFBbcl09bi52YWx1ZS5wYWdlUGF0aHx8bnVsbCl9fSksKDAsbC5qc3hzKShsLkZyYWdtZW50LHtjaGlsZHJlbjpbXyYmKDAsbC5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItaXRlbVwiLFwiZGF0YS1uZXh0anMtZGV2dG9vbC1zZWdtZW50LWV4cGxvcmVyLXNlZ21lbnRcIjpuK1wiLVwiK3IsY2hpbGRyZW46KDAsbC5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItaXRlbS1yb3dcIixzdHlsZTpvOSh7fSx7cGFkZGluZ0xlZnQ6XCJcIi5jb25jYXQoKHIrMSkqOCxcInB4XCIpfSksY2hpbGRyZW46KDAsbC5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJzZWdtZW50LWV4cGxvcmVyLWZpbGVuYW1lXCIsY2hpbGRyZW46W2EmJigwLGwuanN4cykoXCJzcGFuXCIse2NsYXNzTmFtZTpcInNlZ21lbnQtZXhwbG9yZXItZmlsZW5hbWUtLXBhdGhcIixjaGlsZHJlbjpbYSwoMCxsLmpzeCkoXCJzbWFsbFwiLHtjaGlsZHJlbjpcIi9cIn0pXX0pLHMubGVuZ3RoPjAmJigwLGwuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1maWxlc1wiLGNoaWxkcmVuOnMubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPXQuY2hpbGRyZW5bZV07aWYoIW58fCFuLnZhbHVlfHxvTyhuLnZhbHVlLnR5cGUpKXJldHVybiBudWxsO3ZhciByPW4udmFsdWUucGFnZVBhdGgsbz1yLnNwbGl0KFwiL1wiKS5wb3AoKXx8XCJcIixhPXIuc3RhcnRzV2l0aChvaiksaT1vayhvKSxzPWE/XCJUaGUgZGVmYXVsdCBOZXh0LmpzIFwiLmNvbmNhdChuLnZhbHVlLnR5cGUsXCIgaXMgYmVpbmcgc2hvd24uIFlvdSBjYW4gY3VzdG9taXplIHRoaXMgcGFnZSBieSBhZGRpbmcgeW91ciBvd24gXCIpLmNvbmNhdChpLFwiIGZpbGUgdG8gdGhlIGFwcC8gZGlyZWN0b3J5LlwiKTpudWxsLGM9bnVsbCE9PW4udmFsdWUuYm91bmRhcnlUeXBlO3JldHVybigwLGwuanN4KShvNix7Y2xhc3NOYW1lOlwic2VnbWVudC1leHBsb3Jlci1maWxlLWxhYmVsLXRvb2x0aXAtLVwiKyhhP1wibGdcIjpcInNtXCIpLGRpcmVjdGlvbjphP1wicmlnaHRcIjpcInRvcFwiLHRpdGxlOnMsb2Zmc2V0OjEyLGJnY29sb3I6XCJ2YXIoLS1jb2xvci1ncmF5LTEwMDApXCIsY29sb3I6XCJ2YXIoLS1jb2xvci1ncmF5LTEwMClcIixjaGlsZHJlbjooMCxsLmpzeHMpKFwic3BhblwiLHtjbGFzc05hbWU6KDAsay5jeCkoXCJzZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWxcIixcInNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC0tXCIuY29uY2F0KG4udmFsdWUudHlwZSksYSYmXCJzZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtLWJ1aWx0aW5cIixjJiZcInNlZ21lbnQtZXhwbG9yZXItZmlsZS1sYWJlbC0tb3ZlcnJpZGRlblwiKSxvbkNsaWNrOmZ1bmN0aW9uKCl7dmFyIGU7ZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHtmaWxlOntmaWxlUGF0aDpyfS5maWxlUGF0aCxpc0FwcFJlbGF0aXZlUGF0aDpcIjFcIn0pLGZldGNoKFwiXCIuY29uY2F0KHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEh8fFwiXCIsXCIvX19uZXh0anNfbGF1bmNoLWVkaXRvcj9cIikuY29uY2F0KGUudG9TdHJpbmcoKSkpfSxjaGlsZHJlbjpbKDAsbC5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJzZWdtZW50LWV4cGxvcmVyLWZpbGUtbGFiZWwtdGV4dFwiLGNoaWxkcmVuOml9KSxhPygwLGwuanN4KShhbyx7fSk6KDAsbC5qc3gpKGFpLHtjbGFzc05hbWU6XCJjb2RlLWljb25cIn0pXX0pfSxlKX0pfSksbSYmbS52YWx1ZSYmKDAsbC5qc3gpKG9MLHtub2RlU3RhdGU6bS52YWx1ZSxib3VuZGFyaWVzOlB9KV19KX0pfSksaS5tYXAoZnVuY3Rpb24oZSl7dmFyIG89dC5jaGlsZHJlbltlXTtpZighbylyZXR1cm4gbnVsbDt2YXIgYT1fP2U6bitcIiAvIFwiK2U7cmV0dXJuKDAsbC5qc3gpKGFyLHtzZWdtZW50OmEsbm9kZTpvLGxldmVsOl8/cisxOnJ9LGUpfSldfSl9ZnVuY3Rpb24gYW8oZSl7cmV0dXJuKDAsbC5qc3hzKShcInN2Z1wiLG84KG85KHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHtjaGlsZHJlbjpbKDAsbC5qc3gpKFwicGF0aFwiLHtkOlwiTTE0IDhDMTQgMTEuMzEzNyAxMS4zMTM3IDE0IDggMTRDNC42ODYyOSAxNCAyIDExLjMxMzcgMiA4QzIgNC42ODYyOSA0LjY4NjI5IDIgOCAyQzExLjMxMzcgMiAxNCA0LjY4NjI5IDE0IDhaXCIsZmlsbDpcInZhcigtLWNvbG9yLWdyYXktNDAwKVwifSksKDAsbC5qc3gpKFwicGF0aFwiLHtkOlwiTTcuNzUgN0M4LjMwMjI4IDcuMDAwMDEgOC43NSA3LjQ0NzcyIDguNzUgOFYxMS4yNUg3LjI1VjguNUg2LjI1VjdINy43NVpNOCA0QzguNTUyMjggNCA5IDQuNDQ3NzIgOSA1QzkgNS41NTIyOCA4LjU1MjI4IDYgOCA2QzcuNDQ3NzIgNiA3IDUuNTUyMjggNyA1QzcgNC40NDc3MiA3LjQ0NzcyIDQgOCA0WlwiLGZpbGw6XCJ2YXIoLS1jb2xvci1ncmF5LTkwMClcIn0pXX0pKX1mdW5jdGlvbiBhYSgpe3JldHVybigwLGwuanN4KShcInN2Z1wiLHt3aWR0aDpcIjIwXCIsaGVpZ2h0OlwiMjBcIix2aWV3Qm94OlwiMCAwIDIwIDIwXCIsZmlsbDpcInZhcigtLWNvbG9yLWdyYXktNjAwKVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGlsZHJlbjooMCxsLmpzeCkoXCJwYXRoXCIse2Q6XCJNNC41IDExLjI1QzQuNSAxMS4zODgxIDQuNjExOTMgMTEuNSA0Ljc1IDExLjVIMTQuNDM5NUwxMS45Mzk1IDlMMTMgNy45Mzk0NUwxNi43ODAzIDExLjcxOTdMMTYuODMyIDExLjc3NjRDMTcuMDcyMyAxMi4wNzA5IDE3LjA1NDkgMTIuNTA1NyAxNi43ODAzIDEyLjc4MDNMMTMgMTYuNTYwNUwxMS45Mzk1IDE1LjVMMTQuNDM5NSAxM0g0Ljc1QzMuNzgzNSAxMyAzIDEyLjIxNjUgMyAxMS4yNVY0LjI1SDQuNVYxMS4yNVpcIn0pfSl9ZnVuY3Rpb24gYWkoZSl7cmV0dXJuKDAsbC5qc3gpKFwic3ZnXCIsbzgobzkoe3dpZHRoOlwiMTJcIixoZWlnaHQ6XCIxMlwiLHN0cm9rZUxpbmVqb2luOlwicm91bmRcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSxlKSx7Y2hpbGRyZW46KDAsbC5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTcuMjI3NjMgMTQuMTgxOUwxMC4yMjc2IDIuMTgxOTNMMTAuNDA5NSAxLjQ1NDMyTDguOTU0MzIgMS4wOTA1Mkw4Ljc3MjQyIDEuODE4MTJMNS43NzI0MiAxMy44MTgxTDUuNTkwNTEgMTQuNTQ1N0w3LjA0NTczIDE0LjkwOTVMNy4yMjc2MyAxNC4xODE5Wk0zLjc1MDAyIDEyLjA2MDdMMy4yMTk2OSAxMS41MzA0TDAuMzk2NDcgOC43MDcxM0MwLjAwNTk0NTU5IDguMzE2NjEgMC4wMDU5NDU1OSA3LjY4MzQ0IDAuMzk2NDcgNy4yOTI5MkwzLjIxOTY5IDQuNDY5NjlMMy43NTAwMiAzLjkzOTM2TDQuODEwNjggNS4wMDAwMkw0LjI4MDM1IDUuNTMwMzVMMS44MTA2OCA4LjAwMDAzTDQuMjgwMzUgMTAuNDY5N0w0LjgxMDY4IDExTDMuNzUwMDIgMTIuMDYwN1pNMTIuMjUgMTIuMDYwN0wxMi43ODA0IDExLjUzMDRMMTUuNjAzNiA4LjcwNzEzQzE1Ljk5NDEgOC4zMTY2MSAxNS45OTQxIDcuNjgzNDQgMTUuNjAzNiA3LjI5MjkyTDEyLjc4MDQgNC40Njk2OUwxMi4yNSAzLjkzOTM2TDExLjE4OTQgNS4wMDAwMkwxMS43MTk3IDUuNTMwMzVMMTQuMTg5NCA4LjAwMDAzTDExLjcxOTcgMTAuNDY5N0wxMS4xODk0IDExTDEyLjI1IDEyLjA2MDdaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KSl9fSxcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvaG9va3MvdXNlLWRlbGF5ZWQtcmVuZGVyLnRzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3QuZChuLHtOOigpPT5pfSk7dmFyIHI9dChcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9pbmRleC5qc1wiKTtmdW5jdGlvbiBvKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBhKGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBvKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG8oZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gaSgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sdD1hKCgwLHIudXNlU3RhdGUpKGUpLDIpLG89dFswXSxpPXRbMV0sbD1hKCgwLHIudXNlU3RhdGUpKCExKSwyKSxzPWxbMF0sYz1sWzFdLHU9bi5lbnRlckRlbGF5LGQ9dm9pZCAwPT09dT8xOnUsZj1uLmV4aXREZWxheSxwPXZvaWQgMD09PWY/MDpmO3JldHVybigwLHIudXNlRWZmZWN0KShmdW5jdGlvbigpe3ZhciBuLHQ7cmV0dXJuIGU/KGkoITApLGQ8PTA/YyghMCk6bj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YyghMCl9LGQpKTooYyghMSkscDw9MD9pKCExKTp0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpKCExKX0scCkpLGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KG4pLGNsZWFyVGltZW91dCh0KX19LFtlLGQscF0pLHttb3VudGVkOm8scmVuZGVyZWQ6c319fSxcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvc2VnbWVudC1leHBsb3Jlci10cmllLnRzXCI6ZnVuY3Rpb24oZSxuLHQpe1widXNlIHN0cmljdFwiO3QuZChuLHtfYzooKT0+ZCxpODooKT0+Zix0aDooKT0+dX0pO3ZhciByPXQoXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvaW5kZXguanNcIik7ZnVuY3Rpb24gbyhlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI7cj10W25dLG4gaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVtuXT1yfSl9cmV0dXJuIGV9dmFyIGE9bmV3IFNldCxpPWZ1bmN0aW9uKGUpe3JldHVybiBhLmFkZChlKSxmdW5jdGlvbigpe3JldHVybiBhLmRlbGV0ZShlKX19LGw9ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZXRSb290KCl9LHM9ZnVuY3Rpb24oKXtyZXR1cm4gYy5nZXRSb290KCl9LGM9ZnVuY3Rpb24oZSl7dmFyIG49ZS5nZXRDaGFyYWN0ZXJzLHQ9dm9pZCAwPT09bj9mdW5jdGlvbihlKXtyZXR1cm5bZV19Om4scj1lLmNvbXBhcmUsaT12b2lkIDA9PT1yP2Z1bmN0aW9uKGUsbil7cmV0dXJuIGU9PT1ufTpyLGw9e3ZhbHVlOnZvaWQgMCxjaGlsZHJlbjp7fX07ZnVuY3Rpb24gcygpe3ZhciBlPSEwLG49ITEsdD12b2lkIDA7dHJ5e2Zvcih2YXIgcixvPWFbU3ltYm9sLml0ZXJhdG9yXSgpOyEoZT0ocj1vLm5leHQoKSkuZG9uZSk7ZT0hMCkoMCxyLnZhbHVlKSgpfWNhdGNoKGUpe249ITAsdD1lfWZpbmFsbHl7dHJ5e2V8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyB0fX19cmV0dXJue2luc2VydDpmdW5jdGlvbihlKXt2YXIgbj1sLHI9dChlKSxhPSEwLGk9ITEsYz12b2lkIDA7dHJ5e2Zvcih2YXIgdSxkPXJbU3ltYm9sLml0ZXJhdG9yXSgpOyEoYT0odT1kLm5leHQoKSkuZG9uZSk7YT0hMCl7dmFyIGY9dS52YWx1ZTtuLmNoaWxkcmVuW2ZdfHwobi5jaGlsZHJlbltmXT17dmFsdWU6dm9pZCAwLGNoaWxkcmVuOnt9fSksbj1uLmNoaWxkcmVuW2ZdfX1jYXRjaChlKXtpPSEwLGM9ZX1maW5hbGx5e3RyeXthfHxudWxsPT1kLnJldHVybnx8ZC5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgY319bi52YWx1ZT1lLGw9byh7fSxsKSxzKCl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgbj1sLHI9dChlKSxhPVtdLGM9ITAsdT0hMCxkPSExLGY9dm9pZCAwO3RyeXtmb3IodmFyIHAsaD1yW1N5bWJvbC5pdGVyYXRvcl0oKTshKHU9KHA9aC5uZXh0KCkpLmRvbmUpO3U9ITApe3ZhciBnPXAudmFsdWU7aWYoIW4uY2hpbGRyZW5bZ10pe2M9ITE7YnJlYWt9YS5wdXNoKG4pLG49bi5jaGlsZHJlbltnXX19Y2F0Y2goZSl7ZD0hMCxmPWV9ZmluYWxseXt0cnl7dXx8bnVsbD09aC5yZXR1cm58fGgucmV0dXJuKCl9ZmluYWxseXtpZihkKXRocm93IGZ9fWlmKGMmJmkobi52YWx1ZSxlKSl7bi52YWx1ZT12b2lkIDA7Zm9yKHZhciBtPWEubGVuZ3RoLTE7bT49MDttLS0pe3ZhciB2PWFbbV0sYj1yW21dOzA9PT1PYmplY3Qua2V5cyh2LmNoaWxkcmVuW2JdLmNoaWxkcmVuKS5sZW5ndGgmJmRlbGV0ZSB2LmNoaWxkcmVuW2JdfWw9byh7fSxsKSxzKCl9fSxnZXRSb290OmZ1bmN0aW9uKCl7cmV0dXJuIGx9fX0oe2NvbXBhcmU6ZnVuY3Rpb24oZSxuKXtyZXR1cm4hIWUmJiEhbiYmZS5wYWdlUGF0aD09PW4ucGFnZVBhdGgmJmUudHlwZT09PW4udHlwZSYmZS5ib3VuZGFyeVR5cGU9PT1uLmJvdW5kYXJ5VHlwZX0sZ2V0Q2hhcmFjdGVyczpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYWdlUGF0aC5zcGxpdChcIi9cIil9fSksdT1jLmluc2VydCxkPWMucmVtb3ZlO2Z1bmN0aW9uIGYoKXtyZXR1cm4oMCxyLnVzZVN5bmNFeHRlcm5hbFN0b3JlKShpLGwscyl9fSxcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvdXRpbHMvY3gudHNcIjpmdW5jdGlvbihlLG4sdCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkoZSksdD0wO3Q8ZTt0Kyspblt0XT1hcmd1bWVudHNbdF07cmV0dXJuIG4uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfXQuZChuLHtjeDooKT0+cn0pfX0sX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fPXt9O2Z1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18oZSl7dmFyIG49X193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW2VdO2lmKHZvaWQgMCE9PW4pcmV0dXJuIG4uZXhwb3J0czt2YXIgdD1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bZV09e2lkOmUsZXhwb3J0czp7fX07cmV0dXJuIF9fd2VicGFja19tb2R1bGVzX19bZV0odCx0LmV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyksdC5leHBvcnRzfV9fd2VicGFja19yZXF1aXJlX18ubj1lPT57dmFyIG49ZSYmZS5fX2VzTW9kdWxlPygpPT5lLmRlZmF1bHQ6KCk9PmU7cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uZChuLHthOm59KSxufSwoKCk9Pnt2YXIgZSxuPU9iamVjdC5nZXRQcm90b3R5cGVPZj9lPT5PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk6ZT0+ZS5fX3Byb3RvX187X193ZWJwYWNrX3JlcXVpcmVfXy50PWZ1bmN0aW9uKHQscil7aWYoMSZyJiYodD10aGlzKHQpKSw4JnJ8fFwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0JiYoNCZyJiZ0Ll9fZXNNb2R1bGV8fDE2JnImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQudGhlbikpcmV0dXJuIHQ7dmFyIG89T2JqZWN0LmNyZWF0ZShudWxsKTtfX3dlYnBhY2tfcmVxdWlyZV9fLnIobyk7dmFyIGE9e307ZT1lfHxbbnVsbCxuKHt9KSxuKFtdKSxuKG4pXTtmb3IodmFyIGk9MiZyJiZ0O1wib2JqZWN0XCI9PXR5cGVvZiBpJiYhfmUuaW5kZXhPZihpKTtpPW4oaSkpT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaSkuZm9yRWFjaChlPT57YVtlXT0oKT0+dFtlXX0pO3JldHVybiBhLmRlZmF1bHQ9KCk9PnQsX193ZWJwYWNrX3JlcXVpcmVfXy5kKG8sYSksb319KSgpLF9fd2VicGFja19yZXF1aXJlX18uZD0oZSxuKT0+e2Zvcih2YXIgdCBpbiBuKV9fd2VicGFja19yZXF1aXJlX18ubyhuLHQpJiYhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGUsdCkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0Om5bdF19KX0sX193ZWJwYWNrX3JlcXVpcmVfXy5vPShlLG4pPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSxfX3dlYnBhY2tfcmVxdWlyZV9fLnI9ZT0+e1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9LF9fd2VicGFja19yZXF1aXJlX18ubmM9dm9pZCAwO3ZhciBfX3dlYnBhY2tfZXhwb3J0c19fPXt9O2Zvcih2YXIgX193ZWJwYWNrX2lfXyBpbigoKT0+e1widXNlIHN0cmljdFwiO19fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKSxfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXyx7ZGlzcGF0Y2hlcjooKT0+YUgscmVuZGVyQXBwRGV2T3ZlcmxheTooKT0+YVcscmVuZGVyUGFnZXNEZXZPdmVybGF5OigpPT5hJH0pO3ZhciBlLG4sdCxyPV9fd2VicGFja19yZXF1aXJlX18oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIiksbz1fX3dlYnBhY2tfcmVxdWlyZV9fLm4ociksYT1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIiksaT1fX3dlYnBhY2tfcmVxdWlyZV9fLm4oYSksbD1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvYnVpbGQvd2VicGFjay9sb2FkZXJzL2RldnRvb2wvZGV2dG9vbC1zdHlsZS1pbmplY3QuanNcIikscz1fX3dlYnBhY2tfcmVxdWlyZV9fLm4obCksYz1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3N0eWxlLWxvYWRlckA0LjAuMF93ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3djK2hlbHBlcnNAMC41LjE1X19lc2J1aWxkQDAuMjQuMl8vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCIpLHU9X193ZWJwYWNrX3JlcXVpcmVfXy5uKGMpLGQ9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHlsZS1sb2FkZXJANC4wLjBfd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3YytoZWxwZXJzQDAuNS4xNV9fZXNidWlsZEAwLjI0LjJfL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiKSxmPV9fd2VicGFja19yZXF1aXJlX18ubihkKSxwPV9fd2VicGFja19yZXF1aXJlX18oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc3R5bGUtbG9hZGVyQDQuMC4wX3dlYnBhY2tANS45OC4wX0Bzd2MrY29yZUAxLjExLjI0X0Bzd2MraGVscGVyc0AwLjUuMTVfX2VzYnVpbGRAMC4yNC4yXy9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiKSxoPV9fd2VicGFja19yZXF1aXJlX18ubihwKSxnPV9fd2VicGFja19yZXF1aXJlX18oXCIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3NzLWxvYWRlckA3LjEuMl9AcnNwYWNrK2NvcmVAMS40LjVfQHN3YytoZWxwZXJzQDAuNS4xNV9fd2VicGFja0A1Ljk4LjBfQHN3Yytjb3JlQDEuMTEuMjRfQHN3X3dtN2VlNWljNG1vZnJoaXN1ZHdvbjRxcHE0L25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3JjL25leHQtZGV2dG9vbHMvZ2xvYmFsLmNzc1wiKSxtPXt9O20uc3R5bGVUYWdUcmFuc2Zvcm09aCgpLG0uc2V0QXR0cmlidXRlcz11KCksbS5pbnNlcnQ9cygpLG0uZG9tQVBJPWkoKSxtLmluc2VydFN0eWxlRWxlbWVudD1mKCksbygpKGcuWixtKSxnLlomJmcuWi5sb2NhbHMmJmcuWi5sb2NhbHM7dmFyIHY9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL3RvYXN0L3N0eWxlLmNzc1wiKSxiPXt9O2Iuc3R5bGVUYWdUcmFuc2Zvcm09aCgpLGIuc2V0QXR0cmlidXRlcz11KCksYi5pbnNlcnQ9cygpLGIuZG9tQVBJPWkoKSxiLmluc2VydFN0eWxlRWxlbWVudD1mKCksbygpKHYuWixiKSx2LlomJnYuWi5sb2NhbHMmJnYuWi5sb2NhbHM7dmFyIHk9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vZGlzdC9jb21waWxlZC9yZWFjdC9qc3gtcnVudGltZS5qc1wiKSx4PV9fd2VicGFja19yZXF1aXJlX18oXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QvaW5kZXguanNcIik7ZnVuY3Rpb24gdyhlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9dmFyIGo9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vZGlzdC9jb21waWxlZC9zdGFja3RyYWNlLXBhcnNlci9zdGFjay10cmFjZS1wYXJzZXIuY2pzLmpzXCIpLGs9L1xcL19uZXh0KFxcL3N0YXRpY1xcLy4rKS8sQT1TeW1ib2wuZm9yKFwibmV4dC5jb25zb2xlLmVycm9yLmRpZ2VzdFwiKTtmdW5jdGlvbiBPKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX1mdW5jdGlvbiBDKGUsbil7cmV0dXJuIG49bnVsbCE9bj9uOnt9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSksZX12YXIgUz17U21hbGw6MTYvMTQsTWVkaXVtOjEsTGFyZ2U6MTYvMTh9LEU9XCJzdGF0aWMtaW5kaWNhdG9yXCIsXz1cImJ1aWxkLW9rXCIsUD1cImJ1aWxkLWVycm9yXCIsej1cImJlZm9yZS1mYXN0LXJlZnJlc2hcIixMPVwiZmFzdC1yZWZyZXNoXCIsVD1cInZlcnNpb24taW5mb1wiLFI9XCJ1bmhhbmRsZWQtZXJyb3JcIixOPVwidW5oYW5kbGVkLXJlamVjdGlvblwiLEQ9XCJkZWJ1Zy1pbmZvXCIsQj1cImRldi1pbmRpY2F0b3JcIixNPVwiZXJyb3Itb3ZlcmxheS1vcGVuXCIsST1cImVycm9yLW92ZXJsYXktY2xvc2VcIixIPVwiZXJyb3Itb3ZlcmxheS10b2dnbGVcIixGPVwiYnVpbGRpbmctaW5kaWNhdG9yLXNob3dcIixVPVwiYnVpbGRpbmctaW5kaWNhdG9yLWhpZGVcIixWPVwicmVuZGVyaW5nLWluZGljYXRvci1zaG93XCIscT1cInJlbmRlcmluZy1pbmRpY2F0b3ItaGlkZVwiLFc9XCJkZXZ0b29scy1wYW5lbC1vcGVuXCIsJD1cImRldnRvb2xzLXBhbmVsLWNsb3NlXCIsWj1cImRldnRvb2xzLXBhbmVsLXRvZ2dsZVwiLFk9XCJkZXZ0b29scy1wb3NpdGlvblwiLFg9XCJkZXZ0b29scy1zY2FsZVwiLEs9XCJyZXN0YXJ0LXNlcnZlci1idXR0b25cIixRPVwiX19uZXh0anMtZGV2LXRvb2xzLXRoZW1lXCIsRz1cIl9fbmV4dGpzLWRldi10b29scy1wb3NpdGlvblwiLEo9XCJfX25leHRqcy1kZXYtdG9vbHMtc2NhbGVcIixlZT1cInNlZ21lbnQtZXhwbG9yZXItdXBkYXRlLXJvdXRlLXN0YXRlXCIsZW49L1xccysoYXQgT2JqZWN0XFwucmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lLiopfChyZWFjdF9zdGFja19ib3R0b21fZnJhbWVALiopfChhdCByZWFjdC1zdGFjay1ib3R0b20tZnJhbWUuKil8KHJlYWN0LXN0YWNrLWJvdHRvbS1mcmFtZUAuKikvO2Z1bmN0aW9uIGV0KGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplLnNwbGl0KGVuKVswXX12YXIgZXI9KG51bGw9PShlPXByb2Nlc3MuZW52Ll9fTkVYVF9ERVZfSU5ESUNBVE9SKT92b2lkIDA6ZS50b1N0cmluZygpKT09PVwiZmFsc2VcIixlbz17bmV4dElkOjEsYnVpbGRFcnJvcjpudWxsLGVycm9yczpbXSxub3RGb3VuZDohMSxyZW5kZXJpbmdJbmRpY2F0b3I6ITEsc3RhdGljSW5kaWNhdG9yOiExLHNob3dJbmRpY2F0b3I6ITEsZGlzYWJsZURldkluZGljYXRvcjohMSxidWlsZGluZ0luZGljYXRvcjohMSxyZWZyZXNoU3RhdGU6e3R5cGU6XCJpZGxlXCJ9LHZlcnNpb25JbmZvOntpbnN0YWxsZWQ6XCIwLjAuMFwiLHN0YWxlbmVzczpcInVua25vd25cIn0sZGVidWdJbmZvOntkZXZ0b29sc0Zyb250ZW5kVXJsOnZvaWQgMH0saXNEZXZUb29sc1BhbmVsT3BlbjohMSxzaG93UmVzdGFydFNlcnZlckJ1dHRvbjohMSxkZXZUb29sc1Bvc2l0aW9uOlwiYm90dG9tLWxlZnRcIixzY2FsZTpTLk1lZGl1bSxwYWdlOlwiXCJ9LGVhPV9fd2VicGFja19yZXF1aXJlX18oXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2NsaWVudC5qc1wiKTtmdW5jdGlvbiBlaShlKXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCx0PUFycmF5KG4+MT9uLTE6MCkscj0xO3I8bjtyKyspdFtyLTFdPWFyZ3VtZW50c1tyXTt2YXIgbz1lLmxlbmd0aC0xO3JldHVybihlLnNsaWNlKDAsbykucmVkdWNlKGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gZStuK3Rbcl19LFwiXCIpK2Vbb10pLnJlcGxhY2UoL1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vZyxcIlwiKS5yZXBsYWNlKC9cXHMrL2csXCIgXCIpLnJlcGxhY2UoL1xccyooWzo7LHt9XSlcXHMqL2csXCIkMVwiKS5yZXBsYWNlKC87K30vZyxcIn1cIikudHJpbSgpfWZ1bmN0aW9uIGVsKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgICAgIC8qIGxhdGluLWV4dCAqL1xcbiAgICAgIEBmb250LWZhY2Uge1xcbiAgICAgICAgZm9udC1mYW1pbHk6ICdfX25leHRqcy1HZWlzdCc7XFxuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XFxuICAgICAgICBmb250LXdlaWdodDogNDAwIDYwMDtcXG4gICAgICAgIGZvbnQtZGlzcGxheTogc3dhcDtcXG4gICAgICAgIHNyYzogdXJsKC9fX25leHRqc19mb250L2dlaXN0LWxhdGluLWV4dC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpO1xcbiAgICAgICAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyQkEsIFUrMDJCRC0wMkM1LCBVKzAyQzctMDJDQywgVSswMkNFLTAyRDcsXFxuICAgICAgICAgIFUrMDJERC0wMkZGLCBVKzAzMDQsIFUrMDMwOCwgVSswMzI5LCBVKzFEMDAtMURCRiwgVSsxRTAwLTFFOUYsXFxuICAgICAgICAgIFUrMUVGMi0xRUZGLCBVKzIwMjAsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDMCwgVSsyMTEzLCBVKzJDNjAtMkM3RixcXG4gICAgICAgICAgVStBNzIwLUE3RkY7XFxuICAgICAgfVxcbiAgICAgIC8qIGxhdGluLWV4dCAqL1xcbiAgICAgIEBmb250LWZhY2Uge1xcbiAgICAgICAgZm9udC1mYW1pbHk6ICdfX25leHRqcy1HZWlzdCBNb25vJztcXG4gICAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDAgNjAwO1xcbiAgICAgICAgZm9udC1kaXNwbGF5OiBzd2FwO1xcbiAgICAgICAgc3JjOiB1cmwoL19fbmV4dGpzX2ZvbnQvZ2Vpc3QtbW9uby1sYXRpbi1leHQud29mZjIpIGZvcm1hdCgnd29mZjInKTtcXG4gICAgICAgIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMkJBLCBVKzAyQkQtMDJDNSwgVSswMkM3LTAyQ0MsIFUrMDJDRS0wMkQ3LFxcbiAgICAgICAgICBVKzAyREQtMDJGRiwgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsxRDAwLTFEQkYsIFUrMUUwMC0xRTlGLFxcbiAgICAgICAgICBVKzFFRjItMUVGRiwgVSsyMDIwLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQzAsIFUrMjExMywgVSsyQzYwLTJDN0YsXFxuICAgICAgICAgIFUrQTcyMC1BN0ZGO1xcbiAgICAgIH1cXG4gICAgICAvKiBsYXRpbiAqL1xcbiAgICAgIEBmb250LWZhY2Uge1xcbiAgICAgICAgZm9udC1mYW1pbHk6ICdfX25leHRqcy1HZWlzdCc7XFxuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XFxuICAgICAgICBmb250LXdlaWdodDogNDAwIDYwMDtcXG4gICAgICAgIGZvbnQtZGlzcGxheTogc3dhcDtcXG4gICAgICAgIHNyYzogdXJsKC9fX25leHRqc19mb250L2dlaXN0LWxhdGluLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7XFxuICAgICAgICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkJCLTAyQkMsIFUrMDJDNixcXG4gICAgICAgICAgVSswMkRBLCBVKzAyREMsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMjAwMC0yMDZGLCBVKzIwQUMsIFUrMjEyMixcXG4gICAgICAgICAgVSsyMTkxLCBVKzIxOTMsIFUrMjIxMiwgVSsyMjE1LCBVK0ZFRkYsIFUrRkZGRDtcXG4gICAgICB9XFxuICAgICAgLyogbGF0aW4gKi9cXG4gICAgICBAZm9udC1mYWNlIHtcXG4gICAgICAgIGZvbnQtZmFtaWx5OiAnX19uZXh0anMtR2Vpc3QgTW9ubyc7XFxuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XFxuICAgICAgICBmb250LXdlaWdodDogNDAwIDYwMDtcXG4gICAgICAgIGZvbnQtZGlzcGxheTogc3dhcDtcXG4gICAgICAgIHNyYzogdXJsKC9fX25leHRqc19mb250L2dlaXN0LW1vbm8tbGF0aW4ud29mZjIpIGZvcm1hdCgnd29mZjInKTtcXG4gICAgICAgIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQkItMDJCQywgVSswMkM2LFxcbiAgICAgICAgICBVKzAyREEsIFUrMDJEQywgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsyMDAwLTIwNkYsIFUrMjBBQywgVSsyMTIyLFxcbiAgICAgICAgICBVKzIxOTEsIFUrMjE5MywgVSsyMjEyLCBVKzIyMTUsIFUrRkVGRiwgVStGRkZEO1xcbiAgICAgIH1cXG4gICAgXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIGVsPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9dmFyIGVzPWZ1bmN0aW9uKCl7cmV0dXJuKDAseC51c2VJbnNlcnRpb25FZmZlY3QpKGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO3JldHVybiBlLnRleHRDb250ZW50PWVpKGVsKCkpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZSksZnVuY3Rpb24oKXtkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKGUpfX0sW10pLG51bGx9LGVjPV9fd2VicGFja19yZXF1aXJlX18oXCIuL2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2luZGV4LmpzXCIpO2Z1bmN0aW9uIGV1KGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBlZChlKXt2YXIgbix0LHI9ZS5jaGlsZHJlbixvPXgudXNlUmVmKG51bGwpLGE9eC51c2VSZWYobnVsbCksaT0obj14LnVzZVN0YXRlKCksdD0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG4pfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KG4sMil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGV1KGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIGV1KGUsbil9fShuLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKVsxXTtyZXR1cm4geC51c2VFZmZlY3QoZnVuY3Rpb24oKXtpZihvLmN1cnJlbnQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm5leHRqcy1wb3J0YWxcIiksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGxvY2FsU3RvcmFnZSl7dmFyIGU9bG9jYWxTdG9yYWdlLmdldEl0ZW0oUSk7XCJkYXJrXCI9PT1lPyhvLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChcImRhcmtcIiksby5jdXJyZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJsaWdodFwiKSk6XCJsaWdodFwiPT09ZSYmKG8uY3VycmVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZGFya1wiKSxvLmN1cnJlbnQuY2xhc3NMaXN0LmFkZChcImxpZ2h0XCIpKX1udWxsPT09by5jdXJyZW50LnNoYWRvd1Jvb3QmJihhLmN1cnJlbnQ9by5jdXJyZW50LmF0dGFjaFNoYWRvdyh7bW9kZTpcIm9wZW5cIn0pKSxpKHt9KX0sW10pLGEuY3VycmVudD8oMCxlYy5jcmVhdGVQb3J0YWwpKHIsYS5jdXJyZW50KTpudWxsfWZ1bmN0aW9uIGVmKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgICAgICAgOmhvc3Qge1xcbiAgICAgICAgICAvKiBcXG4gICAgICAgICAgICogQWx0aG91Z2ggdGhlIHN0eWxlIGFwcGxpZWQgdG8gdGhlIHNoYWRvdyBob3N0IGlzIGlzb2xhdGVkLFxcbiAgICAgICAgICAgKiB0aGUgZWxlbWVudCB0aGF0IGF0dGFjaGVkIHRoZSBzaGFkb3cgaG9zdCAoaS5lLiBcXFwibmV4dGpzLXBvcnRhbFxcXCIpXFxuICAgICAgICAgICAqIGlzIHN0aWxsIGFmZmVjdGVkIGJ5IHRoZSBwYXJlbnQncyBzdHlsZSAoZS5nLiBcXFwiYm9keVxcXCIpLiBUaGlzIG1heVxcbiAgICAgICAgICAgKiBvY2N1ciBzdHlsZSBjb25mbGljdHMgbGlrZSBcXFwiZGlzcGxheTogZmxleFxcXCIsIHdpdGggb3RoZXIgY2hpbGRyZW5cXG4gICAgICAgICAgICogZWxlbWVudHMgdGhlcmVmb3JlIGdpdmUgdGhlIHNoYWRvdyBob3N0IGFuIGFic29sdXRlIHBvc2l0aW9uLlxcbiAgICAgICAgICAgKi9cXG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcblxcbiAgICAgICAgICAtLWNvbG9yLWZvbnQ6ICM3NTc1NzU7XFxuICAgICAgICAgIC0tY29sb3ItYmFja2Ryb3A6IHJnYmEoMjUwLCAyNTAsIDI1MCwgMC44KTtcXG4gICAgICAgICAgLS1jb2xvci1ib3JkZXItc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMTQ1KTtcXG5cXG4gICAgICAgICAgLS1jb2xvci10aXRsZS1jb2xvcjogIzFmMWYxZjtcXG4gICAgICAgICAgLS1jb2xvci1zdGFjay1ub3RlczogIzc3NztcXG5cXG4gICAgICAgICAgLS1jb2xvci1hY2NlbnRzLTE6ICM4MDgwODA7XFxuICAgICAgICAgIC0tY29sb3ItYWNjZW50cy0yOiAjMjIyMjIyO1xcbiAgICAgICAgICAtLWNvbG9yLWFjY2VudHMtMzogIzQwNDA0MDtcXG5cXG4gICAgICAgICAgLS1mb250LXN0YWNrLW1vbm9zcGFjZTogJ19fbmV4dGpzLUdlaXN0IE1vbm8nLCAnR2Vpc3QgTW9ubycsXFxuICAgICAgICAgICAgJ1NGTW9uby1SZWd1bGFyJywgQ29uc29sYXMsICdMaWJlcmF0aW9uIE1vbm8nLCBNZW5sbywgQ291cmllcixcXG4gICAgICAgICAgICBtb25vc3BhY2U7XFxuICAgICAgICAgIC0tZm9udC1zdGFjay1zYW5zOiAnX19uZXh0anMtR2Vpc3QnLCAnR2Vpc3QnLCAtYXBwbGUtc3lzdGVtLFxcbiAgICAgICAgICAgICdTb3VyY2UgU2FucyBQcm8nLCBzYW5zLXNlcmlmO1xcblxcbiAgICAgICAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1zYW5zKTtcXG4gICAgICAgICAgZm9udC12YXJpYW50LWxpZ2F0dXJlczogbm9uZTtcXG5cXG4gICAgICAgICAgLyogVE9ETzogUmVtb3ZlIHJlcGxhY2VkIG9uZXMuICovXFxuICAgICAgICAgIC0tc2hhZG93LXNtOiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KTtcXG4gICAgICAgICAgLS1zaGFkb3c6IDAgMXB4IDNweCAwIHJnYigwIDAgMCAvIDAuMSksXFxuICAgICAgICAgICAgMCAxcHggMnB4IC0xcHggcmdiKDAgMCAwIC8gMC4xKTtcXG4gICAgICAgICAgLS1zaGFkb3ctbWQ6IDAgNHB4IDZweCAtMXB4IHJnYigwIDAgMCAvIDAuMSksXFxuICAgICAgICAgICAgMCAycHggNHB4IC0ycHggcmdiKDAgMCAwIC8gMC4xKTtcXG4gICAgICAgICAgLS1zaGFkb3ctbGc6IDAgMTBweCAxNXB4IC0zcHggcmdiKDAgMCAwIC8gMC4xKSxcXG4gICAgICAgICAgICAwIDRweCA2cHggLTRweCByZ2IoMCAwIDAgLyAwLjEpO1xcbiAgICAgICAgICAtLXNoYWRvdy14bDogMCAyMHB4IDI1cHggLTVweCByZ2IoMCAwIDAgLyAwLjEpLFxcbiAgICAgICAgICAgIDAgOHB4IDEwcHggLTZweCByZ2IoMCAwIDAgLyAwLjEpO1xcbiAgICAgICAgICAtLXNoYWRvdy0yeGw6IDAgMjVweCA1MHB4IC0xMnB4IHJnYigwIDAgMCAvIDAuMjUpO1xcbiAgICAgICAgICAtLXNoYWRvdy1pbm5lcjogaW5zZXQgMCAycHggNHB4IDAgcmdiKDAgMCAwIC8gMC4wNSk7XFxuICAgICAgICAgIC0tc2hhZG93LW5vbmU6IDAgMCAjMDAwMDtcXG5cXG4gICAgICAgICAgLS1zaGFkb3ctc21hbGw6IDBweCAycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNCk7XFxuICAgICAgICAgIC0tc2hhZG93LW1lbnU6IDBweCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wMiksXFxuICAgICAgICAgICAgMHB4IDRweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMDQpLFxcbiAgICAgICAgICAgIDBweCAxNnB4IDI0cHggLThweCByZ2JhKDAsIDAsIDAsIDAuMDYpO1xcblxcbiAgICAgICAgICAtLWZvY3VzLWNvbG9yOiB2YXIoLS1jb2xvci1ibHVlLTgwMCk7XFxuICAgICAgICAgIC0tZm9jdXMtcmluZzogMnB4IHNvbGlkIHZhcigtLWZvY3VzLWNvbG9yKTtcXG5cXG4gICAgICAgICAgLS10aW1pbmctc3dpZnQ6IGN1YmljLWJlemllcigwLjIzLCAwLjg4LCAwLjI2LCAwLjkyKTtcXG4gICAgICAgICAgLS10aW1pbmctb3ZlcmxheTogY3ViaWMtYmV6aWVyKDAuMTc1LCAwLjg4NSwgMC4zMiwgMS4xKTtcXG4gICAgICAgICAgLyogcHJldHRpZXItaWdub3JlICovXFxuICAgICAgICAgIC0tdGltaW5nLWJvdW5jZTogbGluZWFyKDAgMCUsIDAuMDA1ODcxIDElLCAwLjAyMjA1OCAyJSwgMC4wNDY2MTIgMyUsIDAuMDc3ODIzIDQlLCAwLjExNDE5OSA1JSwgMC4xNTQ0NDEgNiUsIDAuMTk3NDMxIDcuMDAwMDAwMDAwMDAwMDAxJSwgMC4yNDIyMDggOCUsIDAuMjg3OTU5IDklLCAwLjMzMzk5NSAxMCUsIDAuMzc5NzQzIDExJSwgMC40MjQ3MzIgMTIlLCAwLjQ2ODU4IDEzJSwgMC41MTA5ODIgMTQuMDAwMDAwMDAwMDAwMDAyJSwgMC41NTE3MDIgMTUlLCAwLjU5MDU2NCAxNiUsIDAuNjI3NDQ1IDE3JSwgMC42NjIyNjEgMTglLCAwLjY5NDk3MSAxOSUsIDAuNzI1NTYxIDIwJSwgMC43NTQwNDcgMjElLCAwLjc4MDQ2MiAyMiUsIDAuODA0ODYxIDIzJSwgMC44MjczMSAyNCUsIDAuODQ3ODg4IDI1JSwgMC44NjY2NzkgMjYlLCAwLjg4Mzc3NSAyNyUsIDAuODk5MjcyIDI4LjAwMDAwMDAwMDAwMDAwNCUsIDAuOTEzMjY3IDI4Ljk5OTk5OTk5OTk5OTk5NiUsIDAuOTI1ODU2IDMwJSwgMC45MzcxMzcgMzElLCAwLjk0NzIwNSAzMiUsIDAuOTU2MTUzIDMzJSwgMC45NjQwNyAzNCUsIDAuOTcxMDQzIDM1JSwgMC45NzcxNTMgMzYlLCAwLjk4MjQ3OSAzNyUsIDAuOTg3MDk0IDM4JSwgMC45OTEwNjYgMzklLCAwLjk5NDQ2MiA0MCUsIDAuOTk3MzM5IDQxJSwgMC45OTk3NTUgNDIlLCAxLjAwMTc2MSA0MyUsIDEuMDAzNDA0IDQ0JSwgMS4wMDQ3MjcgNDUlLCAxLjAwNTc3IDQ2JSwgMS4wMDY1NjkgNDclLCAxLjAwNzE1NyA0OCUsIDEuMDA3NTYzIDQ5JSwgMS4wMDc4MTMgNTAlLCAxLjAwNzkzMSA1MSUsIDEuMDA3OTM5IDUyJSwgMS4wMDc4NTUgNTMlLCAxLjAwNzY5NyA1NCUsIDEuMDA3NDc3IDU1LjAwMDAwMDAwMDAwMDAxJSwgMS4wMDcyMSA1Ni4wMDAwMDAwMDAwMDAwMSUsIDEuMDA2OTA3IDU2Ljk5OTk5OTk5OTk5OTk5JSwgMS4wMDY1NzYgNTcuOTk5OTk5OTk5OTk5OTklLCAxLjAwNjIyOCA1OSUsIDEuMDA1ODY4IDYwJSwgMS4wMDU1MDMgNjElLCAxLjAwNTEzNyA2MiUsIDEuMDA0Nzc2IDYzJSwgMS4wMDQ0MjIgNjQlLCAxLjAwNDA3OCA2NSUsIDEuMDAzNzQ2IDY2JSwgMS4wMDM0MjkgNjclLCAxLjAwMzEyNyA2OCUsIDEuMDAyODQgNjklLCAxLjAwMjU3MSA3MCUsIDEuMDAyMzE4IDcxJSwgMS4wMDIwODIgNzIlLCAxLjAwMTg2MyA3MyUsIDEuMDAxNjYgNzQlLCAxLjAwMTQ3MyA3NSUsIDEuMDAxMzAxIDc2JSwgMS4wMDExNDMgNzclLCAxLjAwMSA3OCUsIDEuMDAwODY5IDc5JSwgMS4wMDA3NTIgODAlLCAxLjAwMDY0NSA4MSUsIDEuMDAwNTUgODIlLCAxLjAwMDQ2NCA4MyUsIDEuMDAwMzg4IDg0JSwgMS4wMDAzMjEgODUlLCAxLjAwMDI2MSA4NiUsIDEuMDAwMjA5IDg3JSwgMS4wMDAxNjMgODglLCAxLjAwMDEyMyA4OSUsIDEuMDAwMDg4IDkwJSk7XFxuXFxuICAgICAgICAgIC0tcm91bmRlZC1ub25lOiAwcHg7XFxuICAgICAgICAgIC0tcm91bmRlZC1zbTogMnB4O1xcbiAgICAgICAgICAtLXJvdW5kZWQtbWQ6IDRweDtcXG4gICAgICAgICAgLS1yb3VuZGVkLW1kLTI6IDZweDtcXG4gICAgICAgICAgLS1yb3VuZGVkLWxnOiA4cHg7XFxuICAgICAgICAgIC0tcm91bmRlZC14bDogMTJweDtcXG4gICAgICAgICAgLS1yb3VuZGVkLTJ4bDogMTZweDtcXG4gICAgICAgICAgLS1yb3VuZGVkLTN4bDogMjRweDtcXG4gICAgICAgICAgLS1yb3VuZGVkLTR4bDogMzJweDtcXG4gICAgICAgICAgLS1yb3VuZGVkLWZ1bGw6IDk5OTlweDtcXG5cXG4gICAgICAgICAgLyogXFxuICAgICAgICAgICAgVGhpcyB2YWx1ZSBnZXRzIHNldCBmcm9tIHRoZSBEZXYgVG9vbHMgcHJlZmVyZW5jZXMsXFxuICAgICAgICAgICAgYW5kIHdlIHVzZSB0aGUgZm9sbG93aW5nIC0tc2l6ZS0qIHZhcmlhYmxlcyB0byBcXG4gICAgICAgICAgICBzY2FsZSB0aGUgcmVsZXZhbnQgZWxlbWVudHMuXFxuXFxuICAgICAgICAgICAgVGhlIHJlYXNvbiB3aHkgd2UgZG9uJ3QgcmVseSBvbiByZW0gdmFsdWVzIGlzIGJlY2F1c2VcXG4gICAgICAgICAgICBpZiBhbiBhcHAgc2V0cyB0aGVpciByb290IGZvbnQgc2l6ZSB0byBzb21ldGhpbmcgdGlueSwgXFxuICAgICAgICAgICAgaXQgZmVlbHMgdW5leHBlY3RlZCB0byBoYXZlIHRoZSBhcHAgcm9vdCBzaXplIGxlYWsgXFxuICAgICAgICAgICAgaW50byBhIE5leHQuanMgc3VyZmFjZS5cXG5cXG4gICAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL25leHQuanMvZGlzY3Vzc2lvbnMvNzY4MTJcXG4gICAgICAgICAgKi9cXG4gICAgICAgICAgLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlOiBcIixcIjtcXG4gICAgICAgICAgLS1zaXplLTE6IGNhbGMoMXB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMjogY2FsYygycHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0zOiBjYWxjKDNweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTQ6IGNhbGMoNHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtNTogY2FsYyg1cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS02OiBjYWxjKDZweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTc6IGNhbGMoN3B4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtODogY2FsYyg4cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS05OiBjYWxjKDlweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTEwOiBjYWxjKDEwcHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0xMTogY2FsYygxMXB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMTI6IGNhbGMoMTJweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTEzOiBjYWxjKDEzcHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0xNDogY2FsYygxNHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMTU6IGNhbGMoMTVweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTE2OiBjYWxjKDE2cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0xNzogY2FsYygxN3B4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMTg6IGNhbGMoMThweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTIwOiBjYWxjKDIwcHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0yMjogY2FsYygyMnB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMjQ6IGNhbGMoMjRweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTI2OiBjYWxjKDI2cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0yODogY2FsYygyOHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMzA6IGNhbGMoMzBweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTMyOiBjYWxjKDMycHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS0zNDogY2FsYygzNHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtMzY6IGNhbGMoMzZweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTM4OiBjYWxjKDM4cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS00MDogY2FsYyg0MHB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtNDI6IGNhbGMoNDJweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG4gICAgICAgICAgLS1zaXplLTQ0OiBjYWxjKDQ0cHggLyB2YXIoLS1uZXh0anMtZGV2LXRvb2xzLXNjYWxlKSk7XFxuICAgICAgICAgIC0tc2l6ZS00NjogY2FsYyg0NnB4IC8gdmFyKC0tbmV4dGpzLWRldi10b29scy1zY2FsZSkpO1xcbiAgICAgICAgICAtLXNpemUtNDg6IGNhbGMoNDhweCAvIHZhcigtLW5leHRqcy1kZXYtdG9vbHMtc2NhbGUpKTtcXG5cXG4gICAgICAgICAgQG1lZGlhIHByaW50IHtcXG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICBoMSxcXG4gICAgICAgIGgyLFxcbiAgICAgICAgaDMsXFxuICAgICAgICBoNCxcXG4gICAgICAgIGg1LFxcbiAgICAgICAgaDYge1xcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBhIHtcXG4gICAgICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWJsdWUtOTAwKTtcXG4gICAgICAgICAgJjpob3ZlciB7XFxuICAgICAgICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWJsdWUtOTAwKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgICAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIGVmPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9ZnVuY3Rpb24gZXAoZSl7dmFyIG49ZS5zY2FsZTtyZXR1cm4oMCx5LmpzeCkoXCJzdHlsZVwiLHtjaGlsZHJlbjplaShlZigpLFN0cmluZyh2b2lkIDA9PT1uPzE6bikpfSl9ZnVuY3Rpb24gZWgoZSl7aWYoXCJcIj09PWUudHJpbSgpKXRocm93IEVycm9yKFwiY2FuJ3QgZGVjb2RlIGVtcHR5IGhleFwiKTt2YXIgbj1wYXJzZUludChlLDE2KTtpZihpc05hTihuKSl0aHJvdyBFcnJvcihcImludmFsaWQgaGV4OiBgXCIuY29uY2F0KGUsXCJgXCIpKTtyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQobil9dmFyIGVnPS9eX19UVVJCT1BBQ0tfXyhbYS16QS1aMC05XyRdKylfXyQvLGVtPS9odHRwcz86XFwvXFwvW15cXHMvJC4/I10uW15cXHMpJ1wiXSovaSxldj1uZXcgUmVnRXhwKFwiKFwiLmNvbmNhdCgvX19UVVJCT1BBQ0tfX1thLXpBLVowLTlfJF0rX18vZy5zb3VyY2UsXCJ8XFxcXHMrKVwiKSksZWI9ZnVuY3Rpb24oZSl7dmFyIG49ZS50ZXh0LHQ9ZS5tYXRjaGVyLHI9bi5zcGxpdChldik7cmV0dXJuKDAseS5qc3gpKHkuRnJhZ21lbnQse2NoaWxkcmVuOnIubWFwKGZ1bmN0aW9uKGUsbil7aWYoZW0udGVzdChlKSl7dmFyIHI9ZW0uZXhlYyhlKVswXTtyZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiB0fHx0KHIpPygwLHkuanN4KSh4LkZyYWdtZW50LHtjaGlsZHJlbjooMCx5LmpzeCkoXCJhXCIse2hyZWY6cix0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub3JlZmVycmVyIG5vb3BlbmVyXCIsY2hpbGRyZW46ZX0pfSxcImxpbmstXCIuY29uY2F0KG4pKTplfXRyeXt2YXIgbz1mdW5jdGlvbihlKXt2YXIgbj1lLm1hdGNoKGVnKTtpZighbilyZXR1cm4gZTtmb3IodmFyIHQ9blsxXSxyPVwiXCIsbz0wLGE9XCJcIixpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBsPXRbaV07aWYoMD09PW8pXCJfXCI9PT1sP289MTpcIiRcIj09PWw/bz0yOnIrPWw7ZWxzZSBpZigxPT09bylcIl9cIj09PWw/KHIrPVwiIFwiLG89MCk6XCIkXCI9PT1sPyhyKz1cIl9cIixvPTIpOihyKz1sLG89MCk7ZWxzZSBpZigyPT09bylpZigyPT09YS5sZW5ndGgmJihyKz1laChhKSxhPVwiXCIpLFwiX1wiPT09bCl7aWYoXCJcIiE9PWEpdGhyb3cgRXJyb3IoXCJpbnZhbGlkIGhleDogYFwiLmNvbmNhdChhLFwiYFwiKSk7bz0zfWVsc2UgaWYoXCIkXCI9PT1sKXtpZihcIlwiIT09YSl0aHJvdyBFcnJvcihcImludmFsaWQgaGV4OiBgXCIuY29uY2F0KGEsXCJgXCIpKTtvPTB9ZWxzZSBhKz1sO2Vsc2UgaWYoMz09PW8paWYoXCJfXCI9PT1sKXRocm93IEVycm9yKFwiaW52YWxpZCBoZXg6IGBcIi5jb25jYXQoYStsLFwiYFwiKSk7ZWxzZVwiJFwiPT09bD8ocis9ZWgoYSksYT1cIlwiLG89MCk6YSs9bH1yZXR1cm4gcn0oZSk7aWYobyE9PWUpcmV0dXJuKDAseS5qc3hzKShcImlcIix7Y2hpbGRyZW46W1wie1wiLG8sXCJ9XCJdfSxcImlkZW50LVwiLmNvbmNhdChuKSl9Y2F0Y2godCl7cmV0dXJuKDAseS5qc3hzKShcImlcIix7Y2hpbGRyZW46W1wie1wiLGUsXCIgKGRlY29kaW5nIGZhaWxlZDogXCIsXCJcIit0LFwiKVwiLFwifVwiXX0sXCJpZGVudC1cIi5jb25jYXQobikpfXJldHVybigwLHkuanN4KSh4LkZyYWdtZW50LHtjaGlsZHJlbjplfSxcInRleHQtXCIuY29uY2F0KG4pKX0pfSl9LGV5PVsvXndlYnBhY2staW50ZXJuYWw6XFwvXFwvXFwvKFxcKFtcXHctXStcXClcXC8pPy8sL14od2VicGFjazpcXC9cXC9cXC98d2VicGFjazpcXC9cXC8oX05fRVxcLyk/KShcXChbXFx3LV0rXFwpXFwvKT8vXTtmdW5jdGlvbiBleChlKXt2YXIgbj0hMCx0PSExLHI9dm9pZCAwO3RyeXtmb3IodmFyIG8sYT1leVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPWEubmV4dCgpKS5kb25lKTtuPSEwKXt2YXIgaT1vLnZhbHVlO2lmKGkudGVzdChlKSlyZXR1cm4hMDtlPWUucmVwbGFjZShpLFwiXCIpfX1jYXRjaChlKXt0PSEwLHI9ZX1maW5hbGx5e3RyeXtufHxudWxsPT1hLnJldHVybnx8YS5yZXR1cm4oKX1maW5hbGx5e2lmKHQpdGhyb3cgcn19cmV0dXJuITF9ZnVuY3Rpb24gZXcoZSl7dmFyIG49ITAsdD0hMSxyPXZvaWQgMDt0cnl7Zm9yKHZhciBvLGE9ZXlbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1hLm5leHQoKSkuZG9uZSk7bj0hMCl7dmFyIGk9by52YWx1ZTtlPWUucmVwbGFjZShpLFwiXCIpfX1jYXRjaChlKXt0PSEwLHI9ZX1maW5hbGx5e3RyeXtufHxudWxsPT1hLnJldHVybnx8YS5yZXR1cm4oKX1maW5hbGx5e2lmKHQpdGhyb3cgcn19cmV0dXJuIGV9ZnVuY3Rpb24gZWooZSxuLHQscixvLGEsaSl7dHJ5e3ZhciBsPWVbYV0oaSkscz1sLnZhbHVlfWNhdGNoKGUpe3QoZSk7cmV0dXJufWwuZG9uZT9uKHMpOlByb21pc2UucmVzb2x2ZShzKS50aGVuKHIsbyl9ZnVuY3Rpb24gZWsoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcyx0PWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixvKXt2YXIgYT1lLmFwcGx5KG4sdCk7ZnVuY3Rpb24gaShlKXtlaihhLHIsbyxpLGwsXCJuZXh0XCIsZSl9ZnVuY3Rpb24gbChlKXtlaihhLHIsbyxpLGwsXCJ0aHJvd1wiLGUpfWkodm9pZCAwKX0pfX1mdW5jdGlvbiBlQShlLG4pe3ZhciB0LHIsbyxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJm9bMF0pdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119LGk9T2JqZWN0LmNyZWF0ZSgoXCJmdW5jdGlvblwiPT10eXBlb2YgSXRlcmF0b3I/SXRlcmF0b3I6T2JqZWN0KS5wcm90b3R5cGUpO3JldHVybiBpLm5leHQ9bCgwKSxpLnRocm93PWwoMSksaS5yZXR1cm49bCgyKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGk7ZnVuY3Rpb24gbChsKXtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIGM9W2wsc107aWYodCl0aHJvdyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7aSYmKGk9MCxjWzBdJiYoYT0wKSksYTspdHJ5e2lmKHQ9MSxyJiYobz0yJmNbMF0/ci5yZXR1cm46Y1swXT9yLnRocm93fHwoKG89ci5yZXR1cm4pJiZvLmNhbGwociksMCk6ci5uZXh0KSYmIShvPW8uY2FsbChyLGNbMV0pKS5kb25lKXJldHVybiBvO3N3aXRjaChyPTAsbyYmKGM9WzImY1swXSxvLnZhbHVlXSksY1swXSl7Y2FzZSAwOmNhc2UgMTpvPWM7YnJlYWs7Y2FzZSA0OnJldHVybiBhLmxhYmVsKysse3ZhbHVlOmNbMV0sZG9uZTohMX07Y2FzZSA1OmEubGFiZWwrKyxyPWNbMV0sYz1bMF07Y29udGludWU7Y2FzZSA3OmM9YS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShvPShvPWEudHJ5cykubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoNj09PWNbMF18fDI9PT1jWzBdKSl7YT0wO2NvbnRpbnVlfWlmKDM9PT1jWzBdJiYoIW98fGNbMV0+b1swXSYmY1sxXTxvWzNdKSl7YS5sYWJlbD1jWzFdO2JyZWFrfWlmKDY9PT1jWzBdJiZhLmxhYmVsPG9bMV0pe2EubGFiZWw9b1sxXSxvPWM7YnJlYWt9aWYobyYmYS5sYWJlbDxvWzJdKXthLmxhYmVsPW9bMl0sYS5vcHMucHVzaChjKTticmVha31vWzJdJiZhLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWV9Yz1uLmNhbGwoZSxhKX1jYXRjaChlKXtjPVs2LGVdLHI9MH1maW5hbGx5e3Q9bz0wfWlmKDUmY1swXSl0aHJvdyBjWzFdO3JldHVybnt2YWx1ZTpjWzBdP2NbMV06dm9pZCAwLGRvbmU6ITB9fX19ZnVuY3Rpb24gZU8oZSxuKXt2YXIgdDtyZXR1cm5cImZpbGU6Ly9cIj09PWUuZmlsZXx8KG51bGw9PSh0PWUuZmlsZSk/dm9pZCAwOnQubWF0Y2goL2h0dHBzPzpcXC9cXC8vKSk/UHJvbWlzZS5yZXNvbHZlKHtlcnJvcjohMSxyZWFzb246bnVsbCxleHRlcm5hbDohMCxzb3VyY2VTdGFja0ZyYW1lOmUsb3JpZ2luYWxTdGFja0ZyYW1lOm51bGwsb3JpZ2luYWxDb2RlRnJhbWU6bnVsbCxpZ25vcmVkOiEwfSk6ZWsoZnVuY3Rpb24oKXt2YXIgdCxyO3JldHVybiBlQSh0aGlzLGZ1bmN0aW9uKG8pe2lmKFwicmVqZWN0ZWRcIj09PW4uc3RhdHVzKXRocm93IEVycm9yKG4ucmVhc29uKTtyZXR1cm5bMix7ZXJyb3I6ITEscmVhc29uOm51bGwsZXh0ZXJuYWw6ITEsc291cmNlU3RhY2tGcmFtZTplLG9yaWdpbmFsU3RhY2tGcmFtZToocj1uLnZhbHVlKS5vcmlnaW5hbFN0YWNrRnJhbWUsb3JpZ2luYWxDb2RlRnJhbWU6ci5vcmlnaW5hbENvZGVGcmFtZXx8bnVsbCxpZ25vcmVkOihudWxsPT0odD1yLm9yaWdpbmFsU3RhY2tGcmFtZSk/dm9pZCAwOnQuaWdub3JlZCl8fCExfV19KX0pKCkuY2F0Y2goZnVuY3Rpb24obil7dmFyIHQscjtyZXR1cm57ZXJyb3I6ITAscmVhc29uOm51bGwhPShyPW51bGwhPSh0PW51bGw9PW4/dm9pZCAwOm4ubWVzc2FnZSk/dDpudWxsPT1uP3ZvaWQgMDpuLnRvU3RyaW5nKCkpP3I6XCJVbmtub3duIEVycm9yXCIsZXh0ZXJuYWw6ITEsc291cmNlU3RhY2tGcmFtZTplLG9yaWdpbmFsU3RhY2tGcmFtZTpudWxsLG9yaWdpbmFsQ29kZUZyYW1lOm51bGwsaWdub3JlZDohMX19KX1mdW5jdGlvbiBlQyhlLG4sdCl7cmV0dXJuIGVrKGZ1bmN0aW9uKCl7dmFyIHIsbyxhLGk7cmV0dXJuIGVBKHRoaXMsZnVuY3Rpb24obCl7c3dpdGNoKGwubGFiZWwpe2Nhc2UgMDpyPXtmcmFtZXM6ZSxpc1NlcnZlcjpcInNlcnZlclwiPT09bixpc0VkZ2VTZXJ2ZXI6XCJlZGdlLXNlcnZlclwiPT09bixpc0FwcERpcmVjdG9yeTp0fSxvPXZvaWQgMCxhPXZvaWQgMCxsLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBsLnRyeXMucHVzaChbMSwzLCw0XSksWzQsZmV0Y2goXCIvX19uZXh0anNfb3JpZ2luYWwtc3RhY2stZnJhbWVzXCIse21ldGhvZDpcIlBPU1RcIixib2R5OkpTT04uc3RyaW5naWZ5KHIpfSldO2Nhc2UgMjpyZXR1cm4gbz1sLnNlbnQoKSxbMyw0XTtjYXNlIDM6cmV0dXJuIGE9bC5zZW50KCkrXCJcIixbMyw0XTtjYXNlIDQ6aWYoIShvJiZvLm9rJiYyMDQhPT1vLnN0YXR1cykpcmV0dXJuWzMsNl07cmV0dXJuWzQsby5qc29uKCldO2Nhc2UgNTpyZXR1cm4gaT1sLnNlbnQoKSxbMixQcm9taXNlLmFsbChlLm1hcChmdW5jdGlvbihlLG4pe3JldHVybiBlTyhlLGlbbl0pfSkpXTtjYXNlIDY6aWYoIW8pcmV0dXJuWzMsOF07cmV0dXJuWzQsby50ZXh0KCldO2Nhc2UgNzphPWwuc2VudCgpLGwubGFiZWw9ODtjYXNlIDg6cmV0dXJuWzIsUHJvbWlzZS5hbGwoZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGVPKGUse3N0YXR1czpcInJlamVjdGVkXCIscmVhc29uOlwiRmFpbGVkIHRvIGZldGNoIHRoZSBvcmlnaW5hbCBzdGFjayBmcmFtZXMgXCIuY29uY2F0KGE/XCI6IFwiLmNvbmNhdChhKTpcIlwiKX0pfSkpXX19KX0pKCl9ZnVuY3Rpb24gZVMoZSl7aWYoIWUuZmlsZSlyZXR1cm5cIlwiO3ZhciBuPWV4KGUuZmlsZSksdD1cIlwiO2lmKG4pdD1ldyhlLmZpbGUpO2Vsc2UgdHJ5e3ZhciByLG89bmV3IFVSTChlLmZpbGUpLGE9XCJcIjsobnVsbD09KHI9Z2xvYmFsVGhpcy5sb2NhdGlvbik/dm9pZCAwOnIub3JpZ2luKSE9PW8ub3JpZ2luJiYoXCJudWxsXCI9PT1vLm9yaWdpbj9hKz1vLnByb3RvY29sOmErPW8ub3JpZ2luKSxhKz1vLnBhdGhuYW1lLHQ9ZXcoYSl9Y2F0Y2gobil7dD1ldyhlLmZpbGUpfXJldHVybiFleChlLmZpbGUpJiZudWxsIT1lLmxpbmVOdW1iZXImJnQmJlwiPGFub255bW91cz5cIiE9PWUuZmlsZSYmKG51bGwhPWUuY29sdW1uP3QrPVwiIChcIi5jb25jYXQoZS5saW5lTnVtYmVyLFwiOlwiKS5jb25jYXQoZS5jb2x1bW4sXCIpXCIpOnQrPVwiIChcIi5jb25jYXQoZS5saW5lTnVtYmVyLFwiKVwiKSksdH1mdW5jdGlvbiBlRSgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxuPWUuZmlsZSx0PWUubGluZU51bWJlcixyPWUuY29sdW1uO3JldHVybigwLHgudXNlQ2FsbGJhY2spKGZ1bmN0aW9uKCl7aWYobnVsbCE9biYmbnVsbCE9dCYmbnVsbCE9cil7dmFyIGU9bmV3IFVSTFNlYXJjaFBhcmFtcztlLmFwcGVuZChcImZpbGVcIixuKSxlLmFwcGVuZChcImxpbmVOdW1iZXJcIixTdHJpbmcodCkpLGUuYXBwZW5kKFwiY29sdW1uXCIsU3RyaW5nKHIpKSxzZWxmLmZldGNoKFwiXCIuY29uY2F0KHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEh8fFwiXCIsXCIvX19uZXh0anNfbGF1bmNoLWVkaXRvcj9cIikuY29uY2F0KGUudG9TdHJpbmcoKSkpLnRoZW4oZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUpe2NvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBvcGVuIGZpbGUgXCInLmNvbmNhdChuLFwiIChcIikuY29uY2F0KHQsXCI6XCIpLmNvbmNhdChyLCcpXCIgaW4geW91ciBlZGl0b3IuIENhdXNlOicpLGUpfSl9fSxbbix0LHJdKX1mdW5jdGlvbiBlXyhlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gZVAoZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfWZ1bmN0aW9uIGV6KGUpe3JldHVybigwLHkuanN4KShcInN2Z1wiLGVQKGVfKHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCJ9LGUpLHtjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixkOlwiTTExLjUgOS43NVYxMS4yNUMxMS41IDExLjM4ODEgMTEuMzg4MSAxMS41IDExLjI1IDExLjVINC43NUM0LjYxMTkzIDExLjUgNC41IDExLjM4ODEgNC41IDExLjI1TDQuNSA0Ljc1QzQuNSA0LjYxMTkzIDQuNjExOTMgNC41IDQuNzUgNC41SDYuMjVIN1YzSDYuMjVINC43NUMzLjc4MzUgMyAzIDMuNzgzNSAzIDQuNzVWMTEuMjVDMyAxMi4yMTY1IDMuNzgzNSAxMyA0Ljc1IDEzSDExLjI1QzEyLjIxNjUgMTMgMTMgMTIuMjE2NSAxMyAxMS4yNVY5Ljc1VjlIMTEuNVY5Ljc1Wk04LjUgM0g5LjI1SDEyLjI0OTVDMTIuNjYzNyAzIDEyLjk5OTUgMy4zMzU3OSAxMi45OTk1IDMuNzVWNi43NVY3LjVIMTEuNDk5NVY2Ljc1VjUuNTYwNjZMOC41MzAzMyA4LjUyOTc4TDggOS4wNjAxMUw2LjkzOTM0IDcuOTk5NDVMNy40Njk2NyA3LjQ2OTEyTDEwLjQzODggNC41SDkuMjVIOC41VjNaXCJ9KX0pKX1mdW5jdGlvbiBlTChlKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIixlUChlXyh7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGhlaWdodDpcIjE2XCIsc3Ryb2tlTGluZWpvaW46XCJyb3VuZFwiLHZpZXdCb3g6XCItNCAtNCAyNCAyNFwiLHdpZHRoOlwiMTZcIn0sZSkse2NoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk04LjU1ODQ2IDJINy40NDE0OEwxLjg4OTc1IDEzLjVIMTQuMTEwMkw4LjU1ODQ2IDJaTTkuOTA5MjkgMS4zNDc4OEM5LjY1OTAyIDAuODI5NDU2IDkuMTM0MTMgMC41IDguNTU4NDYgMC41SDcuNDQxNDhDNi44NjU4MSAwLjUgNi4zNDA5MiAwLjgyOTQ1NCA2LjA5MDY1IDEuMzQ3ODdMMC4xOTI2MDggMTMuNTY1M0MtMC4xMjc5NDMgMTQuMjI5MyAwLjM1NTgzNSAxNSAxLjA5MzE2IDE1SDE0LjkwNjhDMTUuNjQ0MSAxNSAxNi4xMjc5IDE0LjIyOTMgMTUuODA3MyAxMy41NjUzTDkuOTA5MjkgMS4zNDc4OFpNOC43NDk5NyA0Ljc1VjUuNVY4VjguNzVINy4yNDk5N1Y4VjUuNVY0Ljc1SDguNzQ5OTdaTTcuOTk5OTcgMTJDOC41NTIyNiAxMiA4Ljk5OTk3IDExLjU1MjMgOC45OTk5NyAxMUM4Ljk5OTk3IDEwLjQ0NzcgOC41NTIyNiAxMCA3Ljk5OTk3IDEwQzcuNDQ3NjkgMTAgNi45OTk5NyAxMC40NDc3IDYuOTk5OTcgMTFDNi45OTk5NyAxMS41NTIzIDcuNDQ3NjkgMTIgNy45OTk5NyAxMlpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pKX1mdW5jdGlvbiBlVChlKXt2YXIgbj1lLmxhbmc7aWYoIW4pcmV0dXJuKDAseS5qc3gpKGVCLHt9KTtzd2l0Y2gobi50b0xvd2VyQ2FzZSgpKXtjYXNlXCJqc3hcIjpjYXNlXCJ0c3hcIjpyZXR1cm4oMCx5LmpzeCkoZU0se30pO2Nhc2VcInRzXCI6Y2FzZVwidHlwZXNjcmlwdFwiOnJldHVybigwLHkuanN4KShlRCx7fSk7Y2FzZVwiamF2YXNjcmlwdFwiOmNhc2VcImpzXCI6Y2FzZVwibWpzXCI6cmV0dXJuKDAseS5qc3gpKGVOLHt9KTtjYXNlXCJqc29uXCI6cmV0dXJuKDAseS5qc3gpKGVSLHt9KTtkZWZhdWx0OnJldHVybigwLHkuanN4KShlQix7fSl9fWZ1bmN0aW9uIGVSKCl7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIse2NsaXBSdWxlOlwiZXZlbm9kZFwiLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxMzIxLjQ1IDEzMzMuMzNcIix3aWR0aDpcIjE2XCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTIyMS4zNyA2MTguNDRoNzU3Ljk0VjQwNS4xNUg3NTUuMTRjLTIzLjUgMC01Ni4zMi0xMi43NC03MS44Mi0yOC4yNC0xNS41LTE1LjUtMjUtNDMuNDctMjUtNjYuOTdWODIuODlIODguMzljLTEuOTkgMC0zLjQ5IDEtNC40OSAyLTEuNSAxLTIgMi41LTIgNC41djExNTUuMDRjMCAxLjUgMSAzLjUgMiA0LjUgMSAxLjQ5IDMgMS45OSA0LjQ5IDEuOTlIOTcyLjhjMiAwIDEuODktLjk5IDIuODktMS45OSAxLjUtMSAzLjYxLTMgMy42MS00LjV2LTEyMS4wOUgyMjEuMzZjLTQ0Ljk2IDAtODItMzYuOS04Mi04MS45OVY3MDAuNDRjMC00NS4xIDM2LjktODIgODItODJ6bTEyNi41MSAxMTcuNDdoNzUuMjR2MTQ2LjYxYzAgMzAuNzktMi40NCA1NC4yMy03LjMzIDcwLjMxLTQuOTIgMTYuMDMtMTQuOCAyOS42Ny0yOS42NSA0MC44NS0xNC44NiAxMS4xMi0zMy45MSAxNi43Mi01Ny4wNSAxNi43Mi0yNC41MyAwLTQzLjUxLTMuNzEtNTYuOTQtMTEuMDYtMTMuNS03LjM2LTIzLjg5LTE4LjEtMzEuMjMtMzIuMy03LjM1LTE0LjE0LTExLjY5LTMxLjY3LTEyLjk5LTUyLjUzbDcxLjUtMTAuODFjLjExIDExLjgxIDEuMDcgMjAuNjEgMi44MSAyNi4zMyAxLjc2IDUuNzggNC43NSAxMC4zNyA5IDEzLjk1IDIuODcgMi4zMyA2Ljk0IDMuNDYgMTIuMjUgMy40NiA4LjQgMCAxNC41OC0zLjQ2IDE4LjUzLTEwLjM3IDMuOS02LjkyIDUuODctMTguNiA1Ljg3LTM1VjczNS45MnptMTEyLjc3IDE4MC42N2w3MS4xNy00Ljk3YzEuNTQgMTIuODEgNC42OSAyMi42MiA5LjQ0IDI5LjI4IDcuNzQgMTAuODggMTguNzQgMTYuMzQgMzMuMDkgMTYuMzQgMTAuNjggMCAxOC45My0yLjc2IDI0LjY4LTguMzYgNS44MS01LjU4IDguNy0xMi4wNyA4LjctMTkuNDEgMC02Ljk3LTIuNzEtMTMuMjYtOC4yLTE4Ljc5LTUuNDctNS41My0xOC4yMy0xMC42OC0zOC4yOC0xNS42NS0zMi44OS04LjE3LTU2LjI3LTE5LjEtNzAuMjYtMzIuNzQtMTQuMTItMTMuNTctMjEuMTgtMzAuOTItMjEuMTgtNTIuMDMgMC0xMy44MyAzLjYxLTI2Ljg5IDEwLjg1LTM5LjIxIDcuMjItMTIuMzggMTguMDctMjIuMDYgMzIuNTktMjkuMDkgMTQuNTItNy4wNCAzNC40LTEwLjU2IDU5LjY1LTEwLjU2IDMxIDAgNTQuNjIgNi40MSA3MC44OCAxOS4yOSAxNi4yOCAxMi44MSAyNS45MiAzMy4yNCAyOS4wNCA2MS4yN2wtNzAuNSA0LjY1Yy0xLjg3LTEyLjI1LTUuODEtMjEuMTctMTEuODEtMjYuNy02LjA1LTUuNi0xNC4zNS04LjM2LTI0LjktOC4zNi04LjcxIDAtMTUuMzEgMi4wNy0xOS43MyA2LjE2LTQuNCA0LjA5LTYuNTkgOS4xMi02LjU5IDE1LjAyIDAgNC4yNyAxLjgxIDguMTEgNS4zNyAxMS41NyAzLjQ1IDMuNTkgMTEuOCA2Ljg1IDI1LjAyIDkuOTMgMzIuNzUgNy44NiA1Ni4yIDE1Ljg0IDcwLjMxIDIzLjg3IDE0LjE4IDguMDUgMjQuNTIgMTcuOTggMzAuOTYgMjkuOTIgNi40NCAxMS44OCA5LjY2IDI1LjIgOS42NiAzOS45NiAwIDE3LjI5LTQuMyAzMy4yNC0xMi44OCA0Ny44OS04LjYzIDE0LjU4LTIwLjYxIDI1LjctMzYuMDggMzMuMjQtMTUuNDEgNy41NC0zNC44NSAxMS4zMS01OC4zMyAxMS4zMS00MS4yNCAwLTY5LjgxLTguODYtODUuNjgtMjYuNTItMTUuODgtMTcuNjUtMjQuODUtNDAuMDktMjYuOTYtNjcuM3ptMjQ4Ljc0LTQ1LjVjMC00NC4wNSAxMS4wMi03OC4zNiAzMy4wOS0xMDIuODcgMjIuMDktMjQuNTcgNTIuODItMzYuODIgOTIuMjQtMzYuODIgNDAuMzggMCA3MS41IDEyLjA3IDkzLjM0IDM2LjEzIDIxLjg2IDI0LjEzIDMyLjc3IDU3Ljk0IDMyLjc3IDEwMS4zNyAwIDMxLjU0LTQuNzUgNTcuMzYtMTQuMyA3Ny41NC05LjU0IDIwLjE4LTIzLjM3IDM1Ljg5LTQxLjQgNDcuMTMtMTguMDcgMTEuMjQtNDAuNTUgMTYuODQtNjcuNDggMTYuODQtMjcuMzMgMC00OS45OS00LjgzLTY3Ljk0LTE0LjUyLTE3LjkyLTkuNzQtMzIuNDktMjUuMDctNDMuNjItNDYuMDYtMTEuMTMtMjAuOTItMTYuNzItNDcuMTktMTYuNzItNzguNzR6bTc0Ljg5LjE5YzAgMjcuMjEgNC41NyA0Ni44MSAxMy42OCA1OC42OCA5LjEzIDExLjg4IDIxLjU3IDE3Ljg1IDM3LjI2IDE3Ljg1IDE2LjEgMCAyOC42NS01Ljg0IDM3LjQ1LTE3LjQ3IDguODctMTEuNjggMTMuMjgtMzIuNTQgMTMuMjgtNjIuNzcgMC0yNS4zOS00LjYzLTQzLjkyLTEzLjg0LTU1LjYxLTkuMjYtMTEuNzYtMjEuNzUtMTcuNi0zNy41Ni0xNy42LTE1LjEzIDAtMjcuMzQgNS45Ny0zNi40OSAxNy44NS05LjIxIDExLjg4LTEzLjc4IDMxLjYxLTEzLjc4IDU5LjA3em0yMDkuMDgtMTM1LjM2aDY5Ljk5bDkwLjk4IDE0OS4wNVY3MzUuOTFoNzAuODN2MjY5Ljk2aC03MC44M2wtOTAuNDgtMTQ4LjI0djE0OC4yNGgtNzAuNDlWNzM1Ljkxem02Ny43MS0xMTcuNDdoMTc4LjM3YzQ1LjEgMCA4MiAzNy4wNCA4MiA4MnYzNDAuOTFjMCA0NC45Ni0zNy4wMyA4MS45OS04MiA4MS45OWgtMTc4LjM3djE0N2MwIDE3LjUtNi45OSAzMi45OS0xOC41IDQ0LjUtMTEuNSAxMS40OS0yNyAxOC41LTQ0LjUgMTguNUg2Mi45N2MtMTcuNSAwLTMyLjk5LTctNDQuNS0xOC41LTExLjQ5LTExLjUtMTguNS0yNy0xOC41LTQ0LjVWNjMuNDljMC0xNy41IDctMzMgMTguNS00NC41UzQ1Ljk3LjQ5IDYyLjk3LjQ5SDcwMC4xYzEuNS0uNSAzLS41IDQuNS0uNSA3IDAgMTQgMyAxOSA3LjQ5aDFjMSAuNSAxLjUgMSAyLjUgMmwzMjUuNDYgMzI5LjQ3YzUuNSA1LjUgOS41IDEzIDkuNSAyMS41IDAgMi41LS41IDQuNS0xIDd2MjUwLjk4ek03MzIuNjEgMzAzLjQ3Vjk2Ljk5bDIzMi40OCAyMzUuNDdINzYxLjZjLTcuOTkgMC0xNC45OS0zLjUtMjAuNS04LjQ5LTQuOTktNS04LjQ5LTEyLjUtOC40OS0yMC41elwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSl9ZnVuY3Rpb24gZU4oKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix7aGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDUwIDUwXCIsd2lkdGg6XCIxNlwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNIDQzLjMzNTkzOCA0IEwgNi42Njc5NjkgNCBDIDUuMTk1MzEzIDQgNCA1LjE5NTMxMyA0IDYuNjY3OTY5IEwgNCA0My4zMzIwMzEgQyA0IDQ0LjgwNDY4OCA1LjE5NTMxMyA0NiA2LjY2Nzk2OSA0NiBMIDQzLjMzMjAzMSA0NiBDIDQ0LjgwNDY4OCA0NiA0NiA0NC44MDQ2ODggNDYgNDMuMzM1OTM4IEwgNDYgNi42Njc5NjkgQyA0NiA1LjE5NTMxMyA0NC44MDQ2ODggNCA0My4zMzU5MzggNCBaIE0gMjcgMzYuMTgzNTk0IEMgMjcgNDAuMTc5Njg4IDI0LjY1NjI1IDQyIDIxLjIzNDM3NSA0MiBDIDE4LjE0MDYyNSA0MiAxNS45MTAxNTYgMzkuOTI1NzgxIDE1IDM4IEwgMTguMTQ0NTMxIDM2LjA5NzY1NiBDIDE4Ljc1IDM3LjE3MTg3NSAxOS42NzE4NzUgMzggMjEgMzggQyAyMi4yNjk1MzEgMzggMjMgMzcuNTAzOTA2IDIzIDM1LjU3NDIxOSBMIDIzIDIzIEwgMjcgMjMgWiBNIDM1LjY3NTc4MSA0MiBDIDMyLjEzMjgxMyA0MiAzMC4xMjEwOTQgNDAuMjE0ODQ0IDI5IDM4IEwgMzIgMzYgQyAzMi44MTY0MDYgMzcuMzM1OTM4IDMzLjcwNzAzMSAzOC42MTMyODEgMzUuNTg5ODQ0IDM4LjYxMzI4MSBDIDM3LjE3MTg3NSAzOC42MTMyODEgMzggMzcuODI0MjE5IDM4IDM2LjczMDQ2OSBDIDM4IDM1LjQyNTc4MSAzNy4xNDA2MjUgMzQuOTYwOTM4IDM1LjQwMjM0NCAzNC4xOTkyMTkgTCAzNC40NDkyMTkgMzMuNzg5MDYzIEMgMzEuNjk1MzEzIDMyLjYxNzE4OCAyOS44NjMyODEgMzEuMTQ4NDM4IDI5Ljg2MzI4MSAyOC4wMzkwNjMgQyAyOS44NjMyODEgMjUuMTc5Njg4IDMyLjA0Njg3NSAyMyAzNS40NTMxMjUgMjMgQyAzNy44Nzg5MDYgMjMgMzkuNjIxMDk0IDIzLjg0Mzc1IDQwLjg3ODkwNiAyNi4wNTQ2ODggTCAzNy45MTAxNTYgMjcuOTY0ODQ0IEMgMzcuMjUzOTA2IDI2Ljc4OTA2MyAzNi41NTA3ODEgMjYuMzI4MTI1IDM1LjQ1MzEyNSAyNi4zMjgxMjUgQyAzNC4zMzU5MzggMjYuMzI4MTI1IDMzLjYyODkwNiAyNy4wMzkwNjMgMzMuNjI4OTA2IDI3Ljk2NDg0NCBDIDMzLjYyODkwNiAyOS4xMDkzNzUgMzQuMzM1OTM4IDI5LjU3MDMxMyAzNS45NzI2NTYgMzAuMjgxMjUgTCAzNi45MjU3ODEgMzAuNjkxNDA2IEMgNDAuMTcxODc1IDMyLjA3ODEyNSA0MiAzMy40OTYwOTQgNDIgMzYuNjgzNTk0IEMgNDIgNDAuMTE3MTg4IDM5LjMwMDc4MSA0MiAzNS42NzU3ODEgNDIgWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSl9ZnVuY3Rpb24gZUQoKXtyZXR1cm4oMCx5LmpzeHMpKFwic3ZnXCIse2ZpbGw6XCJub25lXCIsaGVpZ2h0OlwiMTRcIix2aWV3Qm94OlwiMCAwIDUxMiA1MTJcIix3aWR0aDpcIjE0XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJyZWN0XCIse2ZpbGw6XCJjdXJyZW50Q29sb3JcIixoZWlnaHQ6XCI1MTJcIixyeDpcIjUwXCIsd2lkdGg6XCI1MTJcIn0pLCgwLHkuanN4KShcInJlY3RcIix7ZmlsbDpcImN1cnJlbnRDb2xvclwiLGhlaWdodDpcIjUxMlwiLHJ4OlwiNTBcIix3aWR0aDpcIjUxMlwifSksKDAseS5qc3gpKFwicGF0aFwiLHtjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwibTMxNi45MzkgNDA3LjQyNHY1MC4wNjFjOC4xMzggNC4xNzIgMTcuNzYzIDcuMyAyOC44NzUgOS4zODZzMjIuODIzIDMuMTI5IDM1LjEzNSAzLjEyOWMxMS45OTkgMCAyMy4zOTctMS4xNDcgMzQuMTk2LTMuNDQyIDEwLjc5OS0yLjI5NCAyMC4yNjgtNi4wNzUgMjguNDA2LTExLjM0MiA4LjEzOC01LjI2NiAxNC41ODEtMTIuMTUgMTkuMzI4LTIwLjY1czcuMTIxLTE5LjAwNyA3LjEyMS0zMS41MjJjMC05LjA3NC0xLjM1Ni0xNy4wMjYtNC4wNjktMjMuODU3cy02LjYyNS0xMi45MDYtMTEuNzM4LTE4LjIyNWMtNS4xMTItNS4zMTktMTEuMjQyLTEwLjA5MS0xOC4zODktMTQuMzE1cy0xNS4yMDctOC4yMTMtMjQuMTgtMTEuOTY3Yy02LjU3My0yLjcxMi0xMi40NjgtNS4zNDUtMTcuNjg1LTcuOS01LjIxNy0yLjU1Ni05LjY1MS01LjE2My0xMy4zMDMtNy44MjItMy42NTItMi42Ni02LjQ2OS01LjQ3Ni04LjQ1MS04LjQ0OC0xLjk4Mi0yLjk3My0yLjk3NC02LjMzNi0yLjk3NC0xMC4wOTEgMC0zLjQ0MS44ODctNi41NDQgMi42NjEtOS4zMDhzNC4yNzgtNS4xMzYgNy41MTItNy4xMThjMy4yMzUtMS45ODEgNy4xOTktMy41MiAxMS44OTQtNC42MTUgNC42OTYtMS4wOTUgOS45MTItMS42NDIgMTUuNjUxLTEuNjQyIDQuMTczIDAgOC41ODEuMzEzIDEzLjIyNC45MzggNC42NDMuNjI2IDkuMzEyIDEuNTkxIDE0LjAwOCAyLjg5NCA0LjY5NSAxLjMwNCA5LjI1OSAyLjk0NyAxMy42OTQgNC45MjggNC40MzQgMS45ODIgOC41MjkgNC4yNzYgMTIuMjg1IDYuODg0di00Ni43NzZjLTcuNjE2LTIuOTItMTUuOTM3LTUuMDg0LTI0Ljk2Mi02LjQ5MnMtMTkuMzgxLTIuMTEyLTMxLjA2Ni0yLjExMmMtMTEuODk1IDAtMjMuMTYzIDEuMjc4LTMzLjgwNSAzLjgzM3MtMjAuMDA2IDYuNTQ0LTI4LjA5MyAxMS45NjdjLTguMDg2IDUuNDI0LTE0LjQ3NiAxMi4zMzMtMTkuMTcxIDIwLjcyOS00LjY5NSA4LjM5NS03LjA0MyAxOC40MzMtNy4wNDMgMzAuMTE0IDAgMTQuOTE0IDQuMzA0IDI3LjYzOCAxMi45MTIgMzguMTcyIDguNjA3IDEwLjUzMyAyMS42NzUgMTkuNDUgMzkuMjA0IDI2Ljc1MSA2Ljg4NiAyLjgxNiAxMy4zMDMgNS41NzkgMTkuMjUgOC4yOTFzMTEuMDg2IDUuNTI4IDE1LjQxNSA4LjQ0OGM0LjMzIDIuOTIgNy43NDcgNi4xMDEgMTAuMjUyIDkuNTQzIDIuNTA0IDMuNDQxIDMuNzU2IDcuMzUyIDMuNzU2IDExLjczMyAwIDMuMjMzLS43ODMgNi4yMzEtMi4zNDggOC45OTVzLTMuOTM5IDUuMTYyLTcuMTIxIDcuMTk2LTcuMTQ3IDMuNjI0LTExLjg5NCA0Ljc3MWMtNC43NDggMS4xNDgtMTAuMzAzIDEuNzIxLTE2LjY2OCAxLjcyMS0xMC44NTEgMC0yMS41OTctMS45MDMtMzIuMjQtNS43MS0xMC42NDItMy44MDYtMjAuNTAyLTkuNTE2LTI5LjU3OS0xNy4xM3ptLTg0LjE1OS0xMjMuMzQyaDY0LjIydi00MS4wODJoLTE3OXY0MS4wODJoNjMuOTA2djE4Mi45MThoNTAuODc0elwiLGZpbGw6XCJ2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMClcIixmaWxsUnVsZTpcImV2ZW5vZGRcIn0pXX0pfWZ1bmN0aW9uIGVCKCl7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIse3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxN1wiLGZpbGw6XCJub25lXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0xNC41IDd2N2EyLjUgMi41IDAgMCAxLTIuNSAyLjVINEEyLjUgMi41IDAgMCAxIDEuNSAxNFYuNWg3LjU4NmExIDEgMCAwIDEgLjcwNy4yOTNsNC40MTQgNC40MTRhMSAxIDAgMCAxIC4yOTMuNzA3Vjd6TTEzIDd2N2ExIDEgMCAwIDEtMSAxSDRhMSAxIDAgMCAxLTEtMVYyaDV2NWg1ek05LjUgMi42MjFWNS41aDIuODc5TDkuNSAyLjYyMXpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pfWZ1bmN0aW9uIGVNKCl7cmV0dXJuKDAseS5qc3hzKShcInN2Z1wiLHtoZWlnaHQ6XCIxNlwiLHN0cm9rZUxpbmVqb2luOlwicm91bmRcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsd2lkdGg6XCIxNlwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJnXCIse2NsaXBQYXRoOlwidXJsKCNmaWxlX3JlYWN0X2NsaXAwXzg3Ml8zMTgzKVwiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk00LjUgMS45Mzc4MkM0LjcwMTI5IDEuODIxNjEgNC45OTQ3MiAxLjc4NTggNS40MTMxNSAxLjkxMDUzQzUuODMyOTggMi4wMzU2NyA2LjMzMTM5IDIuMzEwNzMgNi44NzYyNyAyLjczOTQ4QzcuMDExMzYgMi44NDU3OCA3LjE0ODAzIDIuOTYwNTIgNy4yODU3MyAzLjA4MzMxQzYuODYyMTcgMy41MzQ0NiA2LjQ0MjM5IDQuMDQzNTggNi4wMzc1MiA0LjYwMDkyQzUuMzUyNDMgNC42NzI4OCA0LjcwMTY0IDQuNzgxODYgNC4wOTkxNiA0LjkyMzA5QzQuMDYxNjcgNC43NDI0NCA0LjAzMDY0IDQuNTY2NzEgNC4wMDYxMiA0LjM5NjU2QzMuOTA3MjUgMy43MTAzMSAzLjkxODI1IDMuMTQxMTQgNC4wMTk3OSAyLjcxNDk5QzQuMTIwOTkgMi4yOTAyNSA0LjI5ODcxIDIuMDU0MDQgNC41IDEuOTM3ODJaTTcuNDk0NjYgMS45NTM2MUM3LjY2MjI1IDIuMDg1NDggNy44MzA5MiAyLjIyODA0IDcuOTk5OTkgMi4zODA2N0M4LjE2OTA2IDIuMjI4MDQgOC4zMzc3MyAyLjA4NTQ4IDguNTA1MzIgMS45NTM2MUM5LjEwOTIxIDEuNDc4NDIgOS43MTk4MiAxLjEyNTQ5IDEwLjMwMTIgMC45NTIyMDJDMTAuODgzOSAwLjc3ODQ5NiAxMS40ODM4IDAuNzczOCAxMiAxLjA3MThDMTIuNTE2MSAxLjM2OTggMTIuODEyIDEuODkxNjkgMTIuOTUzIDIuNDgzMjJDMTMuMDkzNiAzLjA3MzMzIDEzLjA5MzIgMy43Nzg1OCAxMi45ODM2IDQuNTM5MTdDMTIuOTUzMiA0Ljc1MDI0IDEyLjkxNDEgNC45Njc2IDEyLjg2NjUgNS4xOTAzNEMxMy4wODMyIDUuMjYwNDQgMTMuMjkxIDUuMzM1MjQgMTMuNDg5IDUuNDE0NDRDMTQuMjAyNSA1LjY5OTgzIDE0LjgxMzQgNi4wNTIxNyAxNS4yNTQyIDYuNDY4OTlDMTUuNjk2IDYuODg2OCAxNiA3LjQwNCAxNiA4QzE2IDguNTk2IDE1LjY5NiA5LjExMzE5IDE1LjI1NDIgOS41MzEwMUMxNC44MTM0IDkuOTQ3ODMgMTQuMjAyNSAxMC4zMDAyIDEzLjQ4OSAxMC41ODU2QzEzLjI5MSAxMC42NjQ4IDEzLjA4MzIgMTAuNzM5NiAxMi44NjY1IDEwLjgwOTdDMTIuOTE0MSAxMS4wMzI0IDEyLjk1MzIgMTEuMjQ5OCAxMi45ODM3IDExLjQ2MDhDMTMuMDkzMiAxMi4yMjE0IDEzLjA5MzYgMTIuOTI2NyAxMi45NTMgMTMuNTE2OEMxMi44MTIgMTQuMTA4MyAxMi41MTYxIDE0LjYzMDIgMTIgMTQuOTI4MkMxMS40ODM5IDE1LjIyNjIgMTAuODgzOSAxNS4yMjE1IDEwLjMwMTIgMTUuMDQ3OEM5LjcxOTg0IDE0Ljg3NDUgOS4xMDkyMyAxNC41MjE2IDguNTA1MzQgMTQuMDQ2NEM4LjMzNzc1IDEzLjkxNDUgOC4xNjkwNiAxMy43NzE5IDcuOTk5OTkgMTMuNjE5M0M3LjgzMDkxIDEzLjc3MTkgNy42NjIyMyAxMy45MTQ1IDcuNDk0NjQgMTQuMDQ2NEM2Ljg5MDc1IDE0LjUyMTYgNi4yODAxNCAxNC44NzQ1IDUuNjk4NzkgMTUuMDQ3OEM1LjExNjA1IDE1LjIyMTUgNC41MTYxMyAxNS4yMjYyIDMuOTk5OTggMTQuOTI4MkMzLjQ4MzgzIDE0LjYzMDIgMy4xODc5NCAxNC4xMDgzIDMuMDQ3IDEzLjUxNjhDMi45MDY0IDEyLjkyNjcgMi45MDY3NCAxMi4yMjE0IDMuMDE2MzIgMTEuNDYwOEMzLjA0NjczIDExLjI0OTggMy4wODU4NiAxMS4wMzI0IDMuMTMzNTEgMTAuODA5N0MyLjkxNjc5IDEwLjczOTUgMi43MDkgMTAuNjY0OCAyLjUxMSAxMC41ODU2QzEuNzk3NTIgMTAuMzAwMiAxLjE4NjU4IDkuOTQ3ODMgMC43NDU4MzMgOS41MzEwMUMwLjMwNDAyOCA5LjExMzE5IDAgOC41OTYgMCA4QzAgNy40MDQgMC4zMDQwMjggNi44ODY4IDAuNzQ1ODMzIDYuNDY4OTlDMS4xODY1OCA2LjA1MjE3IDEuNzk3NTIgNS42OTk4MyAyLjUxMSA1LjQxNDQ0QzIuNzA5IDUuMzM1MjQgMi45MTY4IDUuMjYwNDQgMy4xMzM1MiA1LjE5MDM0QzMuMDg1ODcgNC45Njc2IDMuMDQ2NzUgNC43NTAyNCAzLjAxNjM0IDQuNTM5MTdDMi45MDY3NiAzLjc3ODU4IDIuOTA2NDIgMy4wNzMzMiAzLjA0NzAyIDIuNDgzMjFDMy4xODc5NiAxLjg5MTY5IDMuNDgzODUgMS4zNjk4IDQgMS4wNzE4QzQuNTE2MTUgMC43NzM3OTggNS4xMTYwNyAwLjc3ODQ5NSA1LjY5ODgxIDAuOTUyMjAxQzYuMjgwMTYgMS4xMjU0OSA2Ljg5MDc3IDEuNDc4NDEgNy40OTQ2NiAxLjk1MzYxWk03LjM2NzQ3IDQuNTEwMjVDNy41NzczNSA0LjI1MTk0IDcuNzg4ODEgNC4wMDkyNyA3Ljk5OTk5IDMuNzgzNTZDOC4yMTExNyA0LjAwOTI3IDguNDIyNjMgNC4yNTE5NCA4LjYzMjUxIDQuNTEwMjVDOC40MjM2OSA0LjUwMzQ2IDguMjEyNzQgNC41IDggNC41QzcuNzg3MjUgNC41IDcuNTc2MyA0LjUwMzQ1IDcuMzY3NDcgNC41MTAyNVpNOC43MTQyNSAzLjA4MzMxQzkuMTM3ODEgMy41MzQ0NyA5LjU1NzU5IDQuMDQzNTggOS45NjI0NiA0LjYwMDkyQzEwLjY0NzUgNC42NzI4OCAxMS4yOTgzIDQuNzgxODYgMTEuOTAwOCA0LjkyMzA5QzExLjkzODMgNC43NDI0NCAxMS45NjkzIDQuNTY2NzEgMTEuOTkzOSA0LjM5NjU3QzEyLjA5MjcgMy43MTAzMSAxMi4wODE3IDMuMTQxMTQgMTEuOTgwMiAyLjcxNDk5QzExLjg3OSAyLjI5MDI1IDExLjcwMTMgMi4wNTQwNCAxMS41IDEuOTM3ODJDMTEuMjk4NyAxLjgyMTYxIDExLjAwNTMgMS43ODU4IDEwLjU4NjggMS45MTA1M0MxMC4xNjcgMi4wMzU2OCA5LjY2ODU5IDIuMzEwNzMgOS4xMjM3MSAyLjczOTQ4QzguOTg4NjIgMi44NDU3OCA4Ljg1MTk2IDIuOTYwNTIgOC43MTQyNSAzLjA4MzMxWk04IDUuNUM4LjQ4NDMzIDUuNSA4Ljk1NjM4IDUuNTE4ODUgOS40MTE4OCA1LjU1NDU2QzkuNjcwNTYgNS45MzExOCA5LjkyMjkgNi4zMzA1NiAxMC4xNjUxIDYuNzVDMTAuNDA3MiA3LjE2OTQ0IDEwLjYyNjkgNy41ODc2NiAxMC44MjM3IDcuOTk5OThDMTAuNjI2OSA4LjQxMjMyIDEwLjQwNzIgOC44MzA1NSAxMC4xNjUgOS4yNUM5LjkyMjg4IDkuNjY5NDQgOS42NzA1MyAxMC4wNjg4IDkuNDExODUgMTAuNDQ1NEM4Ljk1NjM2IDEwLjQ4MTIgOC40ODQzMiAxMC41IDggMTAuNUM3LjUxNTY3IDEwLjUgNy4wNDM2MyAxMC40ODEyIDYuNTg4MTMgMTAuNDQ1NEM2LjMyOTQ1IDEwLjA2ODggNi4wNzcxIDkuNjY5NDQgNS44MzQ5NCA5LjI1QzUuNTkyNzcgOC44MzA1NSA1LjM3MzA2IDguNDEyMzIgNS4xNzYyNCA3Ljk5OTk4QzUuMzczMDYgNy41ODc2NSA1LjU5Mjc1IDcuMTY5NDQgNS44MzQ5MiA2Ljc1QzYuMDc3MDggNi4zMzA1NiA2LjMyOTQyIDUuOTMxMTggNi41ODgxIDUuNTU0NTZDNy4wNDM2MSA1LjUxODg0IDcuNTE1NjYgNS41IDggNS41Wk0xMS4wMzExIDYuMjVDMTEuMTM3NSA2LjQzNDIzIDExLjIzOTkgNi42MTg2NCAxMS4zMzg1IDYuODAyODdDMTEuNDU3MiA2LjQ5MTk3IDExLjU2MTYgNi4xODc1MiAxMS42NTE1IDUuODkxNzhDMTEuMzUwNSA1LjgyMTc1IDExLjAzNDYgNS43NTk5NiAxMC43MDYgNS43MDczNkMxMC44MTYzIDUuODg0OCAxMC45MjQ3IDYuMDY1NzYgMTEuMDMxMSA2LjI1Wk0xMS4wMzExIDkuNzVDMTEuMTM3NCA5LjU2NTc2IDExLjIzOTkgOS4zODEzMyAxMS4zMzg1IDkuMTk3MDlDMTEuNDU3MiA5LjUwODAxIDExLjU2MTcgOS44MTI0NiAxMS42NTE1IDEwLjEwODJDMTEuMzUwNSAxMC4xNzgyIDExLjAzNDYgMTAuMjQgMTAuNzA1OSAxMC4yOTI2QzEwLjgxNjIgMTAuMTE1MiAxMC45MjQ3IDkuOTM0MjQgMTEuMDMxMSA5Ljc1Wk0xMS45MjQ5IDcuOTk5OThDMTIuMjA1MSA4LjYyOTI3IDEyLjQzNjIgOS4yNDczOCAxMi42MTUxIDkuODM5NzdDMTIuNzkwMyA5Ljc4MTkxIDEyLjk1OCA5LjcyMDkyIDEzLjExNzYgOS42NTcwOEMxMy43NjE0IDkuMzk5NTggMTQuMjQ4OCA5LjEwNTQ3IDE0LjU2NzEgOC44MDQ0NkMxNC44ODQzIDguNTA0NDUgMTUgOC4yMzI0MyAxNSA4QzE1IDcuNzY3NTcgMTQuODg0MyA3LjQ5NTU1IDE0LjU2NzEgNy4xOTU1NEMxNC4yNDg4IDYuODk0NTMgMTMuNzYxNCA2LjYwMDQyIDEzLjExNzYgNi4zNDI5MkMxMi45NTggNi4yNzkwNyAxMi43OTAzIDYuMjE4MDggMTIuNjE1MSA2LjE2MDIyQzEyLjQzNjIgNi43NTI2IDEyLjIwNTEgNy4zNzA2OSAxMS45MjQ5IDcuOTk5OThaTTkuOTYyNDQgMTEuMzk5MUMxMC42NDc1IDExLjMyNzEgMTEuMjk4MyAxMS4yMTgxIDExLjkwMDggMTEuMDc2OUMxMS45MzgzIDExLjI1NzYgMTEuOTY5NCAxMS40MzMzIDExLjk5MzkgMTEuNjAzNEMxMi4wOTI4IDEyLjI4OTcgMTIuMDgxNyAxMi44NTg5IDExLjk4MDIgMTMuMjg1QzExLjg3OSAxMy43MDk4IDExLjcwMTMgMTMuOTQ2IDExLjUgMTQuMDYyMkMxMS4yOTg3IDE0LjE3ODQgMTEuMDA1MyAxNC4yMTQyIDEwLjU4NjggMTQuMDg5NUMxMC4xNjcgMTMuOTY0MyA5LjY2ODYxIDEzLjY4OTMgOS4xMjM3MyAxMy4yNjA1QzguOTg4NjMgMTMuMTU0MiA4Ljg1MTk2IDEzLjAzOTUgOC43MTQyNCAxMi45MTY3QzkuMTM3OCAxMi40NjU1IDkuNTU3NTggMTEuOTU2NCA5Ljk2MjQ0IDExLjM5OTFaTTguNjMyNDkgMTEuNDg5OEM4LjQyMjYyIDExLjc0ODEgOC4yMTExNiAxMS45OTA3IDcuOTk5OTkgMTIuMjE2NEM3Ljc4ODgxIDExLjk5MDcgNy41NzczNyAxMS43NDgxIDcuMzY3NDkgMTEuNDg5N0M3LjU3NjMxIDExLjQ5NjUgNy43ODcyNiAxMS41IDggMTEuNUM4LjIxMjczIDExLjUgOC40MjM2NyAxMS40OTY1IDguNjMyNDkgMTEuNDg5OFpNNC45Njg5MSA5Ljc1QzUuMDc1MjggOS45MzQyNCA1LjE4Mzc1IDEwLjExNTIgNS4yOTQwNCAxMC4yOTI2QzQuOTY1NCAxMC4yNCA0LjY0OTUxIDEwLjE3ODIgNC4zNDg0NCAxMC4xMDgyQzQuNDM4MzMgOS44MTI0NiA0LjU0Mjc2IDkuNTA4IDQuNjYxNTIgOS4xOTcwOEM0Ljc2MDA1IDkuMzgxMzMgNC44NjI1NCA5LjU2NTc1IDQuOTY4OTEgOS43NVpNNi4wMzc1NCAxMS4zOTkxQzUuMzUyNDQgMTEuMzI3MSA0LjcwMTYzIDExLjIxODEgNC4wOTkxNCAxMS4wNzY5QzQuMDYxNjUgMTEuMjU3NiA0LjAzMDYyIDExLjQzMzMgNC4wMDYxIDExLjYwMzRDMy45MDcyMyAxMi4yODk3IDMuOTE4MjMgMTIuODU4OSA0LjAxOTc3IDEzLjI4NUM0LjEyMDk3IDEzLjcwOTggNC4yOTg2OSAxMy45NDYgNC40OTk5OCAxNC4wNjIyQzQuNzAxMjcgMTQuMTc4NCA0Ljk5NDcgMTQuMjE0MiA1LjQxMzEzIDE0LjA4OTVDNS44MzI5NiAxMy45NjQzIDYuMzMxMzcgMTMuNjg5MyA2Ljg3NjI1IDEzLjI2MDVDNy4wMTEzNSAxMy4xNTQyIDcuMTQ4MDIgMTMuMDM5NSA3LjI4NTczIDEyLjkxNjdDNi44NjIxNyAxMi40NjU1IDYuNDQyNCAxMS45NTY0IDYuMDM3NTQgMTEuMzk5MVpNNC4wNzUwNyA3Ljk5OTk4QzMuNzk0ODQgOC42MjkyNyAzLjU2MzgxIDkuMjQ3MzcgMy4zODQ4OSA5LjgzOTc3QzMuMjA5NjkgOS43ODE5MSAzLjA0MiA5LjcyMDkyIDIuODgyMzkgOS42NTcwOEMyLjIzODY0IDkuMzk5NTggMS43NTEyMyA5LjEwNTQ3IDEuNDMyOTQgOC44MDQ0NkMxLjExNTcxIDguNTA0NDUgMSA4LjIzMjQzIDEgOEMxIDcuNzY3NTcgMS4xMTU3MSA3LjQ5NTU1IDEuNDMyOTQgNy4xOTU1NEMxLjc1MTIzIDYuODk0NTMgMi4yMzg2NCA2LjYwMDQyIDIuODgyMzkgNi4zNDI5MkMzLjA0MiA2LjI3OTA3IDMuMjA5NyA2LjIxODA4IDMuMzg0OSA2LjE2MDIyQzMuNTYzODMgNi43NTI2MSAzLjc5NDg0IDcuMzcwNjkgNC4wNzUwNyA3Ljk5OTk4Wk00LjY2MTUyIDYuODAyODdDNC41NDI3NyA2LjQ5MTk3IDQuNDM4MzUgNi4xODc1MiA0LjM0ODQ2IDUuODkxNzhDNC42NDk1MiA1LjgyMTc1IDQuOTY1MzkgNS43NTk5NiA1LjI5NDAyIDUuNzA3MzZDNS4xODM3MyA1Ljg4NDggNS4wNzUyNiA2LjA2NTc2IDQuOTY4ODkgNi4yNUM0Ljg2MjUzIDYuNDM0MjMgNC43NjAwNSA2LjYxODY0IDQuNjYxNTIgNi44MDI4N1pNOS4yNSA4QzkuMjUgOC42OTAzNiA4LjY5MDM2IDkuMjUgOCA5LjI1QzcuMzA5NjQgOS4yNSA2Ljc1IDguNjkwMzYgNi43NSA4QzYuNzUgNy4zMDk2NSA3LjMwOTY0IDYuNzUgOCA2Ljc1QzguNjkwMzYgNi43NSA5LjI1IDcuMzA5NjUgOS4yNSA4WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSksKDAseS5qc3gpKFwiZGVmc1wiLHtjaGlsZHJlbjooMCx5LmpzeCkoXCJjbGlwUGF0aFwiLHtpZDpcImZpbGVfcmVhY3RfY2xpcDBfODcyXzMxODNcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJyZWN0XCIse3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLGZpbGw6XCJ3aGl0ZVwifSl9KX0pXX0pfXZhciBlST1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9kaXN0L2NvbXBpbGVkL2Fuc2VyL2luZGV4LmpzXCIpLGVIPV9fd2VicGFja19yZXF1aXJlX18ubihlSSksZUY9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vZGlzdC9jb21waWxlZC9zdHJpcC1hbnNpL2luZGV4LmpzXCIpLGVVPV9fd2VicGFja19yZXF1aXJlX18ubihlRik7ZnVuY3Rpb24gZVYoZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfWZ1bmN0aW9uIGVxKGUpe3ZhciBuLHQ9ZS5zdGFja0ZyYW1lLHI9ZS5jb2RlRnJhbWUsbz0oMCx4LnVzZU1lbW8pKGZ1bmN0aW9uKCl7dmFyIGUsbjtyZXR1cm4oZnVuY3Rpb24oZSl7dmFyIG49ZUgoKS5hbnNpVG9Kc29uKGUse2pzb246ITAsdXNlX2NsYXNzZXM6ITAscmVtb3ZlX2VtcHR5OiEwfSksdD1bXSxyPVtdLG89ITAsYT0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBsLHM9bltTeW1ib2wuaXRlcmF0b3JdKCk7IShvPShsPXMubmV4dCgpKS5kb25lKTtvPSEwKXt2YXIgYz1sLnZhbHVlO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBjLmNvbnRlbnQmJmMuY29udGVudC5pbmNsdWRlcyhcIlxcblwiKSlmb3IodmFyIHU9Yy5jb250ZW50LnNwbGl0KFwiXFxuXCIpLGQ9MDtkPHUubGVuZ3RoO2QrKyl7dmFyIGY9dVtkXTtmJiZyLnB1c2goZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfShmdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt9LGMpLHtjb250ZW50OmZ9KSksZDx1Lmxlbmd0aC0xJiYodC5wdXNoKHIpLHI9W10pfWVsc2Ugci5wdXNoKGMpfX1jYXRjaChlKXthPSEwLGk9ZX1maW5hbGx5e3RyeXtvfHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgaX19cmV0dXJuIHIubGVuZ3RoPjAmJnQucHVzaChyKSx0fSkoKG49KGU9ci5zcGxpdCgvXFxyP1xcbi9nKSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09L14+PyArXFxkKyArXFx8IFsgXSsvLmV4ZWMoZVUoKShlKSk/bnVsbDovXj4/ICtcXGQrICtcXHwgKCAqKS8uZXhlYyhlVSgpKGUpKX0pLmZpbHRlcihCb29sZWFuKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUucG9wKCl9KS5yZWR1Y2UoZnVuY3Rpb24oZSxuKXtyZXR1cm4gaXNOYU4oZSk/bi5sZW5ndGg6TWF0aC5taW4oZSxuLmxlbmd0aCl9LE5hTikpPjE/ZS5tYXAoZnVuY3Rpb24oZSx0KXtyZXR1cm5+KHQ9ZS5pbmRleE9mKFwifFwiKSk/ZS5zdWJzdHJpbmcoMCx0KStlLnN1YnN0cmluZyh0KS5yZXBsYWNlKFwiXlxcXFwge1wiLmNvbmNhdChuLFwifVwiKSxcIlwiKTplfSkuam9pbihcIlxcblwiKTplLmpvaW4oXCJcXG5cIikpLm1hcChmdW5jdGlvbihlKXt2YXIgbixyLG8sYSxpLGwscyxjLHU7cmV0dXJue2xpbmU6ZSxwYXJzZWRMaW5lOihuPWUscj10LCgobnVsbD09KG89blswXSk/dm9pZCAwOm8uY29udGVudCk9PT1cIj5cInx8KG51bGw9PShhPW5bMF0pP3ZvaWQgMDphLmNvbnRlbnQpPT09XCIgXCIpJiYocz1udWxsPT0obD1uWzFdKXx8bnVsbD09KHU9bC5jb250ZW50KXx8bnVsbD09KGM9dS5yZXBsYWNlKFwifFwiLFwiXCIpKT92b2lkIDA6Yy50cmltKCkpLHtsaW5lTnVtYmVyOnMsaXNFcnJvcmVkTGluZTpzPT09KG51bGw9PShpPXIubGluZU51bWJlcik/dm9pZCAwOmkudG9TdHJpbmcoKSl9KX19KX0sW3IsdF0pLGE9ZUUoe2ZpbGU6dC5maWxlLGxpbmVOdW1iZXI6dC5saW5lTnVtYmVyLGNvbHVtbjp0LmNvbHVtbn0pLGk9bnVsbD09dHx8bnVsbD09KG49dC5maWxlKT92b2lkIDA6bi5zcGxpdChcIi5cIikucG9wKCk7cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNvZGVmcmFtZVwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiY29kZS1mcmFtZS1oZWFkZXJcIixjaGlsZHJlbjooMCx5LmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLWxpbmtcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLWljb25cIixjaGlsZHJlbjooMCx5LmpzeCkoZVQse2xhbmc6aX0pfSksKDAseS5qc3hzKShcInNwYW5cIix7XCJkYXRhLXRleHRcIjohMCxjaGlsZHJlbjpbZVModCksXCIgQFwiLFwiIFwiLCgwLHkuanN4KShlYix7dGV4dDp0Lm1ldGhvZE5hbWV9KV19KSwoMCx5LmpzeCkoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6XCJPcGVuIGluIGVkaXRvclwiLFwiZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmstc291cmNlLWZpbGVcIjohMCxvbkNsaWNrOmEsY2hpbGRyZW46KDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLWljb25cIixcImRhdGEtaWNvblwiOlwicmlnaHRcIixjaGlsZHJlbjooMCx5LmpzeCkoZXose3dpZHRoOjE2LGhlaWdodDoxNn0pfSl9KV19KX0pLCgwLHkuanN4KShcInByZVwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLXByZVwiLGNoaWxkcmVuOigwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLWxpbmVzXCIsY2hpbGRyZW46by5tYXAoZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89ZS5saW5lLGE9ZS5wYXJzZWRMaW5lLGk9YS5saW5lTnVtYmVyLGw9YS5pc0Vycm9yZWRMaW5lLHM9e307cmV0dXJuIGkmJihzW1wiZGF0YS1uZXh0anMtY29kZWZyYW1lLWxpbmVcIl09aSksbCYmKHNbXCJkYXRhLW5leHRqcy1jb2RlZnJhbWUtbGluZS0tZXJyb3JlZFwiXT0hMCksKDAseS5qc3gpKFwiZGl2XCIsKHQ9ZVYoe30scykscj1yPXtjaGlsZHJlbjpvLm1hcChmdW5jdGlvbihlLG4pe3JldHVybigwLHkuanN4KShcInNwYW5cIix7c3R5bGU6ZVYoe2NvbG9yOmUuZmc/XCJ2YXIoLS1jb2xvci1cIi5jb25jYXQoZS5mZyxcIilcIik6dm9pZCAwfSxcImJvbGRcIj09PWUuZGVjb3JhdGlvbj97Zm9udFdlaWdodDo1MDB9OlwiaXRhbGljXCI9PT1lLmRlY29yYXRpb24/e2ZvbnRTdHlsZTpcIml0YWxpY1wifTp2b2lkIDApLGNoaWxkcmVuOmUuY29udGVudH0sXCJmcmFtZS1cIi5jb25jYXQobikpfSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QocikpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkpfSksdCksXCJsaW5lLVwiLmNvbmNhdChuKSl9KX0pfSldfSl9ZnVuY3Rpb24gZVcoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfXZhciBlJD1bXCJbZGF0YS1uZXh0LW1hcmtdXCIsXCJbZGF0YS1pc3N1ZXMtb3Blbl1cIixcIiNuZXh0anMtZGV2LXRvb2xzLW1lbnVcIixcIltkYXRhLW5leHRqcy1lcnJvci1vdmVybGF5LW5hdl1cIixcIltkYXRhLWluZm8tcG9wb3Zlcl1cIixcIltkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1vdmVybGF5XVwiLFwiW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlcl1cIixcIltkYXRhLW5leHRqcy1lcnJvci1vdmVybGF5LWZvb3Rlcl1cIl0sZVo9ZnVuY3Rpb24oZSl7dmFyIG4sdCxyLG8sYSxpLGwscz1lLmNoaWxkcmVuLGM9ZS5jbGFzc05hbWUsdT1lLm9uQ2xvc2UsZD1lW1wiYXJpYS1sYWJlbGxlZGJ5XCJdLGY9ZVtcImFyaWEtZGVzY3JpYmVkYnlcIl0scD0oZS5kaWFsb2dSZXNpemVyUmVmLGZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJjaGlsZHJlblwiLFwiY2xhc3NOYW1lXCIsXCJvbkNsb3NlXCIsXCJhcmlhLWxhYmVsbGVkYnlcIixcImFyaWEtZGVzY3JpYmVkYnlcIixcImRpYWxvZ1Jlc2l6ZXJSZWZcIl0pKSxoPXgudXNlUmVmKG51bGwpLGc9KG49eC51c2VTdGF0ZShcInVuZGVmaW5lZFwiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50Lmhhc0ZvY3VzKCk/XCJkaWFsb2dcIjp2b2lkIDApLHQ9MixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShuKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShuLDIpfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBlVyhlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBlVyhlLG4pfX0obix0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSksbT1nWzBdLHY9Z1sxXTtyZXR1cm4gcj1oLmN1cnJlbnQsbz1lJCxhPWZ1bmN0aW9uKGUpe3JldHVybiBlLnByZXZlbnREZWZhdWx0KCksbnVsbD09dT92b2lkIDA6dSgpfSx4LnVzZUVmZmVjdChmdW5jdGlvbigpe2lmKG51bGwhPXImJm51bGwhPWEpe3ZhciBlPWZ1bmN0aW9uKGUpeyEoIXJ8fHIuY29udGFpbnMoZS50YXJnZXQpKSYmKG8uc29tZShmdW5jdGlvbihuKXtyZXR1cm4gZS50YXJnZXQuY2xvc2VzdChuKX0pfHxhKGUpKX0sbj1yLmdldFJvb3ROb2RlKCk7cmV0dXJuIG4uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixlKSxuLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLGUse3Bhc3NpdmU6ITF9KSxmdW5jdGlvbigpe24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixlKSxuLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLGUpfX19LFthLHIsb10pLHgudXNlRWZmZWN0KGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXt2KGRvY3VtZW50Lmhhc0ZvY3VzKCk/XCJkaWFsb2dcIjp2b2lkIDApfTtpZihudWxsIT1oLmN1cnJlbnQpcmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIixlKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIixlKSxmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIixlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIixlKX19LFtdKSx4LnVzZUVmZmVjdChmdW5jdGlvbigpe3ZhciBlLG4sdD1oLmN1cnJlbnQscj1udWxsPT10P3ZvaWQgMDp0LmdldFJvb3ROb2RlKCksbz0oZT1yLG51bGwhPShuPVNoYWRvd1Jvb3QpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZuW1N5bWJvbC5oYXNJbnN0YW5jZV0/ISFuW1N5bWJvbC5oYXNJbnN0YW5jZV0oZSk6ZSBpbnN0YW5jZW9mIG4pP251bGw9PXI/dm9pZCAwOnIuYWN0aXZlRWxlbWVudDpudWxsO3JldHVybiBudWxsPT10fHx0LmZvY3VzKCksZnVuY3Rpb24oKXtudWxsPT10fHx0LmJsdXIoKSxudWxsPT1vfHxvLmZvY3VzKCl9fSxbXSksKDAseS5qc3gpKFwiZGl2XCIsKGk9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7cmVmOmgsdGFiSW5kZXg6LTEsXCJkYXRhLW5leHRqcy1kaWFsb2dcIjohMCxyb2xlOm0sXCJhcmlhLWxhYmVsbGVkYnlcIjpkLFwiYXJpYS1kZXNjcmliZWRieVwiOmYsXCJhcmlhLW1vZGFsXCI6XCJ0cnVlXCIsY2xhc3NOYW1lOmMsb25LZXlEb3duOmZ1bmN0aW9uKGUpe1wiRXNjYXBlXCI9PT1lLmtleSYmKG51bGw9PXV8fHUoKSl9fSxwKSxsPWw9e2NoaWxkcmVuOnN9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGksZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGwsZSkpfSksaSkpfSxlWT1mdW5jdGlvbihlKXt2YXIgbix0LHI9ZS5jaGlsZHJlbixvPWUuY2xhc3NOYW1lLGE9ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sbi5pbmRleE9mKHQpPj0wfHwob1t0XT1lW3RdKTtyZXR1cm4gb30oZSxuKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLCEobi5pbmRleE9mKHQpPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsdCkmJihvW3RdPWVbdF0pfXJldHVybiBvfShlLFtcImNoaWxkcmVuXCIsXCJjbGFzc05hbWVcIl0pO3JldHVybigwLHkuanN4KShcImRpdlwiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe1wiZGF0YS1uZXh0anMtZGlhbG9nLWJvZHlcIjohMCxjbGFzc05hbWU6b30sYSksdD10PXtjaGlsZHJlbjpyfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX0sZVg9ZnVuY3Rpb24oZSl7dmFyIG4sdCxyPWUuY2hpbGRyZW4sbz1lLmNsYXNzTmFtZSxhPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJjaGlsZHJlblwiLFwiY2xhc3NOYW1lXCJdKTtyZXR1cm4oMCx5LmpzeCkoXCJkaXZcIiwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHtcImRhdGEtbmV4dGpzLWRpYWxvZy1jb250ZW50XCI6ITAsY2xhc3NOYW1lOm99LGEpLHQ9dD17Y2hpbGRyZW46cn0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9O2Z1bmN0aW9uIGVLKGUpe3ZhciBuLHQ7cmV0dXJuKDAseS5qc3gpKFwiZGl2XCIsKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7XCJkYXRhLW5leHRqcy1kaWFsb2ctaGVhZGVyXCI6ITB9LGUpLHQ9dD17Y2hpbGRyZW46ZS5jaGlsZHJlbn0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9ZnVuY3Rpb24gZVEoKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLXJvb3RdIHtcXG4gICAgLS1uZXh0LWRpYWxvZy1yYWRpdXM6IHZhcigtLXJvdW5kZWQteGwpO1xcbiAgICAtLW5leHQtZGlhbG9nLW1heC13aWR0aDogOTYwcHg7XFxuICAgIC0tbmV4dC1kaWFsb2ctcm93LXBhZGRpbmc6IDE2cHg7XFxuICAgIC0tbmV4dC1kaWFsb2ctcGFkZGluZzogMTJweDtcXG4gICAgLS1uZXh0LWRpYWxvZy1ub3RjaC1oZWlnaHQ6IDQycHg7XFxuICAgIC0tbmV4dC1kaWFsb2ctYm9yZGVyLXdpZHRoOiAxcHg7XFxuXFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSA1NnB4KTtcXG4gICAgbWF4LXdpZHRoOiB2YXIoLS1uZXh0LWRpYWxvZy1tYXgtd2lkdGgpO1xcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgICBzY2FsZTogMC45NztcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogc2NhbGUsIG9wYWNpdHk7XFxuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXRyYW5zaXRpb24tZHVyYXRpb24pO1xcbiAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tdGltaW5nLW92ZXJsYXkpO1xcblxcbiAgICAmW2RhdGEtcmVuZGVyZWQ9J3RydWUnXSB7XFxuICAgICAgb3BhY2l0eTogMTtcXG4gICAgICBzY2FsZTogMTtcXG4gICAgfVxcblxcbiAgICBbZGF0YS1uZXh0anMtc2Nyb2xsLWZhZGVyXVtkYXRhLXNpZGU9J3RvcCddIHtcXG4gICAgICBsZWZ0OiAxcHg7XFxuICAgICAgdG9wOiBjYWxjKFxcbiAgICAgICAgdmFyKC0tbmV4dC1kaWFsb2ctbm90Y2gtaGVpZ2h0KSArIHZhcigtLW5leHQtZGlhbG9nLWJvcmRlci13aWR0aClcXG4gICAgICApO1xcbiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSB2YXIoLS1uZXh0LWRpYWxvZy1wYWRkaW5nKSk7XFxuICAgICAgb3BhY2l0eTogMDtcXG4gICAgfVxcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZ10ge1xcbiAgICBvdXRsaW5lOiAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZ10sXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nXSAqIHtcXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xcbiAgICAgIHdpZHRoOiA2cHg7XFxuICAgICAgaGVpZ2h0OiA2cHg7XFxuICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDFyZW0gMXJlbTtcXG4gICAgICBtYXJnaW4tYm90dG9tOiAxcmVtO1xcbiAgICB9XFxuXFxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiB7XFxuICAgICAgZGlzcGxheTogbm9uZTtcXG4gICAgfVxcblxcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XFxuICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDFyZW0gMXJlbTtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIH1cXG5cXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFyZW07XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS01MDApO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKiBQbGFjZSBvdmVyZmxvdzogaGlkZGVuIG9uIHRoaXMgc28gd2UgY2FuIGJyZWFrIG91dCBmcm9tIFtkYXRhLW5leHRqcy1kaWFsb2ddICovXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLXNpemVyXSB7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWJhY2tkcm9wXSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tdHJhbnNpdGlvbi1kdXJhdGlvbikgdmFyKC0tdGltaW5nLW92ZXJsYXkpO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1vdmVybGF5XSB7XFxuICAgIG1hcmdpbjogOHB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1vdmVybGF5XVtkYXRhLXJlbmRlcmVkPSd0cnVlJ11cXG4gICAgW2RhdGEtbmV4dGpzLWRpYWxvZy1iYWNrZHJvcF0ge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1jb250ZW50XSB7XFxuICAgIGJvcmRlcjogbm9uZTtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIHBhZGRpbmc6IHZhcigtLW5leHQtZGlhbG9nLXBhZGRpbmcpO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1jb250ZW50XSA+IFtkYXRhLW5leHRqcy1kaWFsb2ctaGVhZGVyXSB7XFxuICAgIGZsZXgtc2hyaW5rOiAwO1xcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWNvbnRlbnRdID4gW2RhdGEtbmV4dGpzLWRpYWxvZy1ib2R5XSB7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgZmxleDogMSAxIGF1dG87XFxuICB9XFxuXFxuICBAbWVkaWEgKG1heC1oZWlnaHQ6IDgxMnB4KSB7XFxuICAgIFtkYXRhLW5leHRqcy1kaWFsb2ctb3ZlcmxheV0ge1xcbiAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDE1cHgpO1xcbiAgICB9XFxuICB9XFxuXFxuICBAbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gICAgW2RhdGEtbmV4dGpzLWRpYWxvZy1yb290XSB7XFxuICAgICAgLS1uZXh0LWRpYWxvZy1tYXgtd2lkdGg6IDU0MHB4O1xcbiAgICB9XFxuICB9XFxuXFxuICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gICAgW2RhdGEtbmV4dGpzLWRpYWxvZy1yb290XSB7XFxuICAgICAgLS1uZXh0LWRpYWxvZy1tYXgtd2lkdGg6IDcyMHB4O1xcbiAgICB9XFxuICB9XFxuXFxuICBAbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcXG4gICAgW2RhdGEtbmV4dGpzLWRpYWxvZy1yb290XSB7XFxuICAgICAgLS1uZXh0LWRpYWxvZy1tYXgtd2lkdGg6IDk2MHB4O1xcbiAgICB9XFxuICB9XFxuXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIGVRPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9dmFyIGVHPWVpKGVRKCkpLGVKPV9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L3V0aWxzL2N4LnRzXCIpO2Z1bmN0aW9uIGUwKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBlMShlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gZTIoZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfWZ1bmN0aW9uIGU0KGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBlMChlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBlMChlLG4pfX0oZSxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX12YXIgZTU9XCJmdW5jdGlvblwiPT10eXBlb2YgeC51c2VBY3Rpb25TdGF0ZT9mdW5jdGlvbihlKXt2YXIgbj1lNCh4LnVzZUFjdGlvblN0YXRlKGZ1bmN0aW9uKG4sdCl7cmV0dXJuXCJyZXNldFwiPT09dD97c3RhdGU6XCJpbml0aWFsXCJ9OlwiY29weVwiPT09dD9uYXZpZ2F0b3IuY2xpcGJvYXJkP25hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGUpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm57c3RhdGU6XCJzdWNjZXNzXCJ9fSxmdW5jdGlvbihlKXtyZXR1cm57c3RhdGU6XCJlcnJvclwiLGVycm9yOmV9fSk6e3N0YXRlOlwiZXJyb3JcIixlcnJvcjpcIkNvcHkgdG8gY2xpcGJvYXJkIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCJ9Om59LHtzdGF0ZTpcImluaXRpYWxcIn0pLDMpLHQ9blswXSxyPW5bMV0sbz1uWzJdO3JldHVyblt0LGZ1bmN0aW9uKCl7eC5zdGFydFRyYW5zaXRpb24oZnVuY3Rpb24oKXtyKFwiY29weVwiKX0pfSx4LnVzZUNhbGxiYWNrKGZ1bmN0aW9uKCl7cihcInJlc2V0XCIpfSxbcl0pLG9dfTpmdW5jdGlvbihlKXt2YXIgbj1lNCh4LnVzZVJlZHVjZXIoZnVuY3Rpb24oZSxuKXtyZXR1cm5cInJlc2V0XCI9PT1uLnR5cGU/e3N0YXRlOlwiaW5pdGlhbFwifTpcImNvcGllZFwiPT09bi50eXBlP3tzdGF0ZTpcInN1Y2Nlc3NcIn06XCJjb3B5aW5nXCI9PT1uLnR5cGU/e3N0YXRlOlwicGVuZGluZ1wifTpcImVycm9yXCI9PT1uLnR5cGU/e3N0YXRlOlwiZXJyb3JcIixlcnJvcjpuLmVycm9yfTplfSx7c3RhdGU6XCJpbml0aWFsXCJ9KSwyKSx0PW5bMF0scj1uWzFdLG89eC51c2VDYWxsYmFjayhmdW5jdGlvbigpe3Ioe3R5cGU6XCJyZXNldFwifSl9LFtdKSxhPVwicGVuZGluZ1wiPT09dC5zdGF0ZTtyZXR1cm5bdCxmdW5jdGlvbigpe2F8fChuYXZpZ2F0b3IuY2xpcGJvYXJkPyhyKHt0eXBlOlwiY29weWluZ1wifSksbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZSkudGhlbihmdW5jdGlvbigpe3Ioe3R5cGU6XCJjb3BpZWRcIn0pfSxmdW5jdGlvbihlKXtyKHt0eXBlOlwiZXJyb3JcIixlcnJvcjplfSl9KSk6cih7dHlwZTpcImVycm9yXCIsZXJyb3I6XCJDb3B5IHRvIGNsaXBib2FyZCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlclwifSkpfSxvLGFdfTtmdW5jdGlvbiBlMyhlKXt2YXIgbj1lLmFjdGlvbkxhYmVsLHQ9ZS5zdWNjZXNzTGFiZWwscj1lLmNvbnRlbnQsbz1lLmljb24sYT1lLmRpc2FibGVkLGk9ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sbi5pbmRleE9mKHQpPj0wfHwob1t0XT1lW3RdKTtyZXR1cm4gb30oZSxuKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLCEobi5pbmRleE9mKHQpPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsdCkmJihvW3RdPWVbdF0pfXJldHVybiBvfShlLFtcImFjdGlvbkxhYmVsXCIsXCJzdWNjZXNzTGFiZWxcIixcImNvbnRlbnRcIixcImljb25cIixcImRpc2FibGVkXCJdKSxsPWU0KGU1KHIpLDQpLHM9bFswXSxjPWxbMV0sdT1sWzJdLGQ9bFszXSxmPVwiZXJyb3JcIj09PXMuc3RhdGU/cy5lcnJvcjpudWxsO3gudXNlRWZmZWN0KGZ1bmN0aW9uKCl7bnVsbCE9PWYmJmNvbnNvbGUud2FybihmKX0sW2ZdKSx4LnVzZUVmZmVjdChmdW5jdGlvbigpe2lmKFwic3VjY2Vzc1wiPT09cy5zdGF0ZSl7dmFyIGU9c2V0VGltZW91dChmdW5jdGlvbigpe3UoKX0sMmUzKTtyZXR1cm4gZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZSl9fX0sW2Qscy5zdGF0ZSx1XSk7dmFyIHA9IW5hdmlnYXRvci5jbGlwYm9hcmR8fGR8fGF8fCEhZixoPVwic3VjY2Vzc1wiPT09cy5zdGF0ZT90Om4sZz1cInN1Y2Nlc3NcIj09PXMuc3RhdGU/KDAseS5qc3gpKGU5LHt9KTpvfHwoMCx5LmpzeCkoZTYse3dpZHRoOjE0LGhlaWdodDoxNCxjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LXRvb2xiYXItYnV0dG9uLWljb25cIn0pO3JldHVybigwLHkuanN4cykoXCJidXR0b25cIixlMihlMSh7fSxpKSx7dHlwZTpcImJ1dHRvblwiLHRpdGxlOmgsXCJhcmlhLWxhYmVsXCI6aCxcImFyaWEtZGlzYWJsZWRcIjpwLGRpc2FibGVkOnAsXCJkYXRhLW5leHRqcy1jb3B5LWJ1dHRvblwiOiEwLGNsYXNzTmFtZTooMCxlSi5jeCkoaS5jbGFzc05hbWUsXCJuZXh0anMtZGF0YS1jb3B5LWJ1dHRvblwiLFwibmV4dGpzLWRhdGEtY29weS1idXR0b24tLVwiLmNvbmNhdChzLnN0YXRlKSksb25DbGljazpmdW5jdGlvbigpe3B8fGMoKX0sY2hpbGRyZW46W2csXCJlcnJvclwiPT09cy5zdGF0ZT9cIiBcIi5jb25jYXQocy5lcnJvcik6bnVsbF19KSl9ZnVuY3Rpb24gZTYoZSl7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIsZTIoZTEoe3dpZHRoOlwiMTRcIixoZWlnaHQ6XCIxNFwiLHZpZXdCb3g6XCIwIDAgMTQgMTRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSkse2NoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk0yLjQwNi40MzhjLS44NDUgMC0xLjUzMS42ODUtMS41MzEgMS41M3Y2LjU2M2MwIC44NDYuNjg2IDEuNTMxIDEuNTMxIDEuNTMxSDMuOTM3VjguNzVIMi40MDZhLjIxOS4yMTkgMCAwIDEtLjIxOS0uMjE5VjEuOTdjMC0uMTIxLjA5OC0uMjE5LjIyLS4yMTloNC44MTJjLjEyIDAgLjIxOC4wOTguMjE4LjIxOXYuNjU2SDguNzV2LS42NTZjMC0uODQ2LS42ODYtMS41MzItMS41MzEtMS41MzJIMi40MDZ6bTQuMzc1IDMuNWMtLjg0NSAwLTEuNTMxLjY4NS0xLjUzMSAxLjUzdjYuNTYzYzAgLjg0Ni42ODYgMS41MzEgMS41MzEgMS41MzFoNC44MTNjLjg0NSAwIDEuNTMxLS42ODUgMS41MzEtMS41M1Y1LjQ2OGMwLS44NDYtLjY4Ni0xLjUzMi0xLjUzMS0xLjUzMkg2Ljc4em0tLjIxOCAxLjUzYzAtLjEyLjA5Ny0uMjE4LjIxOC0uMjE4aDQuODEzYy4xMiAwIC4yMTkuMDk4LjIxOS4yMTl2Ni41NjJjMCAuMTIxLS4wOTguMjE5LS4yMi4yMTlINi43ODJhLjIxOS4yMTkgMCAwIDEtLjIxOC0uMjE5VjUuNDd6XCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KSl9ZnVuY3Rpb24gZTkoKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix7aGVpZ2h0OlwiMTZcIix4bGlua1RpdGxlOlwiY29waWVkXCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLHdpZHRoOlwiMTZcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIixmaWxsOlwiY3VycmVudENvbG9yXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTEzLjc4IDQuMjJhLjc1Ljc1IDAgMCAxIDAgMS4wNmwtNy4yNSA3LjI1YS43NS43NSAwIDAgMS0xLjA2IDBMMi4yMiA5LjI4YS43NTEuNzUxIDAgMCAxIC4wMTgtMS4wNDIuNzUxLjc1MSAwIDAgMSAxLjA0Mi0uMDE4TDYgMTAuOTRsNi43Mi02LjcyYS43NS43NSAwIDAgMSAxLjA2IDBaXCJ9KX0pfWZ1bmN0aW9uIGU4KGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX1mdW5jdGlvbiBlNyhlLG4pe3JldHVybiBuPW51bGwhPW4/bjp7fSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pLGV9dmFyIG5lPWZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIHdpbmRvdylyZXR1cm4hMTt2YXIgZT1cImNocm9tZVwiaW4gd2luZG93JiZ3aW5kb3cuY2hyb21lLG49d2luZG93Lm5hdmlnYXRvci52ZW5kb3I7cmV0dXJuIG51bGwhPWUmJlwiR29vZ2xlIEluYy5cIj09PW59KCk7ZnVuY3Rpb24gbm4oZSl7cmV0dXJuKDAseS5qc3hzKShcInN2Z1wiLGU3KGU4KHt3aWR0aDpcIjE0XCIsaGVpZ2h0OlwiMTRcIix2aWV3Qm94OlwiMCAwIDE0IDE0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHtjaGlsZHJlbjpbKDAseS5qc3gpKFwibWFza1wiLHtpZDpcIm5vZGVqc19pY29uX21hc2tfYVwiLHN0eWxlOnttYXNrVHlwZTpcImx1bWluYW5jZVwifSxtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6XCIwXCIseTpcIjBcIix3aWR0aDpcIjE0XCIsaGVpZ2h0OlwiMTRcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNNi42Ny4wODkgMS4yMDUgMy4yNTZhLjY2My42NjMgMCAwIDAtLjMzLjU3M3Y2LjMzOWMwIC4yMzcuMTI2LjQ1NS4zMy41NzRsNS40NjYgMy4xN2EuNjYuNjYgMCAwIDAgLjY2IDBsNS40NjUtMy4xN2EuNjY0LjY2NCAwIDAgMCAuMzI5LS41NzRWMy44MjlhLjY2My42NjMgMCAwIDAtLjMzLS41NzNMNy4zMy4wODlhLjY2My42NjMgMCAwIDAtLjY2MSAwXCIsZmlsbDpcIiNmZmZcIn0pfSksKDAseS5qc3gpKFwiZ1wiLHttYXNrOlwidXJsKCNub2RlanNfaWNvbl9tYXNrX2EpXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTE4LjY0OCAyLjcxNyAzLjI0OC00Ljg2LTQuNjQ4IDExLjMxbDE1LjQgNy41OCA3Ljg5Ni0xNi4xNzR6XCIsZmlsbDpcInVybCgjbm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2IpXCJ9KX0pLCgwLHkuanN4KShcIm1hc2tcIix7aWQ6XCJub2RlanNfaWNvbl9tYXNrX2NcIixzdHlsZTp7bWFza1R5cGU6XCJsdW1pbmFuY2VcIn0sbWFza1VuaXRzOlwidXNlclNwYWNlT25Vc2VcIix4OlwiMVwiLHk6XCIwXCIsd2lkdGg6XCIxMlwiLGhlaWdodDpcIjE0XCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTEuMDEgMTAuNTdhLjY2My42NjMgMCAwIDAgLjE5NS4xN2w0LjY4OCAyLjcyLjc4MS40NWEuNjYuNjYgMCAwIDAgLjUxLjA2M2w1Ljc2NC0xMC41OTdhLjY1My42NTMgMCAwIDAtLjE1My0uMTIyTDkuMjE2IDEuMTggNy4zMjUuMDg3YS42ODguNjg4IDAgMCAwLS4xNzEtLjA3TDEuMDEgMTAuNTd6XCIsZmlsbDpcIiNmZmZcIn0pfSksKDAseS5qc3gpKFwiZ1wiLHttYXNrOlwidXJsKCNub2RlanNfaWNvbl9tYXNrX2MpXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTS01LjY0NyA0Ljk1OCA1LjIyNiAxOS43MzRsMTQuMzgtMTAuNjY3TDguNzM0LTUuNzEtNS42NDcgNC45NTh6XCIsZmlsbDpcInVybCgjbm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2QpXCJ9KX0pLCgwLHkuanN4cykoXCJnXCIse2NoaWxkcmVuOlsoMCx5LmpzeCkoXCJtYXNrXCIse2lkOlwibm9kZWpzX2ljb25fbWFza19lXCIsc3R5bGU6e21hc2tUeXBlOlwibHVtaW5hbmNlXCJ9LG1hc2tVbml0czpcInVzZXJTcGFjZU9uVXNlXCIseDpcIjFcIix5OlwiMFwiLHdpZHRoOlwiMTNcIixoZWlnaHQ6XCIxNFwiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZDpcIk02LjkzNC4wMDRBLjY2NS42NjUgMCAwIDAgNi42Ny4wOUwxLjIyIDMuMjQ3bDUuODc3IDEwLjc0NmEuNjU1LjY1NSAwIDAgMCAuMjM1LS4wOGw1LjQ2NS0zLjE3YS42NjUuNjY1IDAgMCAwIC4zMTktLjQ1M0w3LjEyNi4wMTVhLjY4NC42ODQgMCAwIDAtLjE4OS0uMDFcIixmaWxsOlwiI2ZmZlwifSl9KSwoMCx5LmpzeCkoXCJnXCIse21hc2s6XCJ1cmwoI25vZGVqc19pY29uX21hc2tfZSlcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNMS4yMi4wMDJ2MTMuOTkyaDExLjg5NFYuMDAySDEuMjJ6XCIsZmlsbDpcInVybCgjbm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2YpXCJ9KX0pXX0pLCgwLHkuanN4cykoXCJkZWZzXCIse2NoaWxkcmVuOlsoMCx5LmpzeHMpKFwibGluZWFyR3JhZGllbnRcIix7aWQ6XCJub2RlanNfaWNvbl9saW5lYXJfZ3JhZGllbnRfYlwiLHgxOlwiMTAuOTQzXCIseTE6XCItMS4wODRcIix4MjpcIjIuOTk3XCIseTI6XCIxNS4wNjJcIixncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuM1wiLHN0b3BDb2xvcjpcIiMzRTg2M0RcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjVcIixzdG9wQ29sb3I6XCIjNTU5MzRGXCJ9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi44XCIsc3RvcENvbG9yOlwiIzVBQUQ0NVwifSldfSksKDAseS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIse2lkOlwibm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2RcIix4MTpcIi0uMTQ1XCIseTE6XCIxMi40MzFcIix4MjpcIjE0LjI3N1wiLHkyOlwiMS44MThcIixncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuNTdcIixzdG9wQ29sb3I6XCIjM0U4NjNEXCJ9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi43MlwiLHN0b3BDb2xvcjpcIiM2MTk4NTdcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiMVwiLHN0b3BDb2xvcjpcIiM3NkFDNjRcIn0pXX0pLCgwLHkuanN4cykoXCJsaW5lYXJHcmFkaWVudFwiLHtpZDpcIm5vZGVqc19pY29uX2xpbmVhcl9ncmFkaWVudF9mXCIseDE6XCIxLjIyNVwiLHkxOlwiNi45OThcIix4MjpcIjEzLjExNlwiLHkyOlwiNi45OThcIixncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuMTZcIixzdG9wQ29sb3I6XCIjNkJCRjQ3XCJ9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi4zOFwiLHN0b3BDb2xvcjpcIiM3OUI0NjFcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjQ3XCIsc3RvcENvbG9yOlwiIzc1QUM2NFwifSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuN1wiLHN0b3BDb2xvcjpcIiM2NTlFNUFcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjlcIixzdG9wQ29sb3I6XCIjM0U4NjNEXCJ9KV19KV19KV19KSl9ZnVuY3Rpb24gbnQoZSl7cmV0dXJuKDAseS5qc3hzKShcInN2Z1wiLGU3KGU4KHt3aWR0aDpcIjE0XCIsaGVpZ2h0OlwiMTRcIix2aWV3Qm94OlwiMCAwIDE0IDE0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHtjaGlsZHJlbjpbKDAseS5qc3gpKFwibWFza1wiLHtpZDpcIm5vZGVqc19pY29uX21hc2tfYVwiLHN0eWxlOnttYXNrVHlwZTpcImx1bWluYW5jZVwifSxtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6XCIwXCIseTpcIjBcIix3aWR0aDpcIjE0XCIsaGVpZ2h0OlwiMTRcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNNi42Ny4wODkgMS4yMDUgMy4yNTZhLjY2My42NjMgMCAwIDAtLjMzLjU3M3Y2LjMzOWMwIC4yMzcuMTI2LjQ1NS4zMy41NzRsNS40NjYgMy4xN2EuNjYuNjYgMCAwIDAgLjY2IDBsNS40NjUtMy4xN2EuNjY0LjY2NCAwIDAgMCAuMzI5LS41NzRWMy44MjlhLjY2My42NjMgMCAwIDAtLjMzLS41NzNMNy4zMy4wODlhLjY2My42NjMgMCAwIDAtLjY2MSAwXCIsZmlsbDpcIiNmZmZcIn0pfSksKDAseS5qc3gpKFwiZ1wiLHttYXNrOlwidXJsKCNub2RlanNfaWNvbl9tYXNrX2EpXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTE4LjY0OCAyLjcxNyAzLjI0OC00Ljg2LTQuNjQ2IDExLjMxbDE1LjM5OSA3LjU4IDcuODk2LTE2LjE3NHpcIixmaWxsOlwidXJsKCNub2RlanNfaWNvbl9saW5lYXJfZ3JhZGllbnRfYilcIn0pfSksKDAseS5qc3gpKFwibWFza1wiLHtpZDpcIm5vZGVqc19pY29uX21hc2tfY1wiLHN0eWxlOnttYXNrVHlwZTpcImx1bWluYW5jZVwifSxtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6XCIxXCIseTpcIjBcIix3aWR0aDpcIjEyXCIsaGVpZ2h0OlwiMTVcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNMS4wMSAxMC41NzFhLjY2LjY2IDAgMCAwIC4xOTUuMTcybDQuNjg4IDIuNzE4Ljc4MS40NTFhLjY2LjY2IDAgMCAwIC41MS4wNjNsNS43NjQtMTAuNTk3YS42NTMuNjUzIDAgMCAwLS4xNTMtLjEyMkw5LjIxNiAxLjE4MSA3LjMyNS4wOWEuNjg4LjY4OCAwIDAgMC0uMTcxLS4wN0wxLjAxIDEwLjU3MnpcIixmaWxsOlwiI2ZmZlwifSl9KSwoMCx5LmpzeCkoXCJnXCIse21hc2s6XCJ1cmwoI25vZGVqc19pY29uX21hc2tfYylcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNLTUuNjQ3IDQuOTYgNS4yMjYgMTkuNzM2IDE5LjYwNiA5LjA3IDguNzM0LTUuNzA3LTUuNjQ3IDQuOTZ6XCIsZmlsbDpcInVybCgjbm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2QpXCJ9KX0pLCgwLHkuanN4cykoXCJnXCIse2NoaWxkcmVuOlsoMCx5LmpzeCkoXCJtYXNrXCIse2lkOlwibm9kZWpzX2ljb25fbWFza19lXCIsc3R5bGU6e21hc2tUeXBlOlwibHVtaW5hbmNlXCJ9LG1hc2tVbml0czpcInVzZXJTcGFjZU9uVXNlXCIseDpcIjFcIix5OlwiMFwiLHdpZHRoOlwiMTNcIixoZWlnaHQ6XCIxNFwiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZDpcIk02LjkzNS4wMDNhLjY2NS42NjUgMCAwIDAtLjI2NC4wODVsLTUuNDUgMy4xNTggNS44NzcgMTAuNzQ3YS42NTMuNjUzIDAgMCAwIC4yMzUtLjA4Mmw1LjQ2NS0zLjE3YS42NjUuNjY1IDAgMCAwIC4zMTktLjQ1Mkw3LjEyNy4wMTRhLjY4NC42ODQgMCAwIDAtLjE4OS0uMDFcIixmaWxsOlwiI2ZmZlwifSl9KSwoMCx5LmpzeCkoXCJnXCIse21hc2s6XCJ1cmwoI25vZGVqc19pY29uX21hc2tfZSlcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNMS4yMjIuMDAxdjEzLjk5MmgxMS44OTNWMEgxLjIyMnpcIixmaWxsOlwidXJsKCNub2RlanNfaWNvbl9saW5lYXJfZ3JhZGllbnRfZilcIn0pfSldfSksKDAseS5qc3hzKShcImRlZnNcIix7Y2hpbGRyZW46WygwLHkuanN4cykoXCJsaW5lYXJHcmFkaWVudFwiLHtpZDpcIm5vZGVqc19pY29uX2xpbmVhcl9ncmFkaWVudF9iXCIseDE6XCIxMC45NDRcIix5MTpcIi0xLjA4NFwiLHgyOlwiMi45OTdcIix5MjpcIjE1LjA2MlwiLGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi4zXCIsc3RvcENvbG9yOlwiIzY3Njc2N1wifSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuNVwiLHN0b3BDb2xvcjpcIiM4NTg1ODVcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjhcIixzdG9wQ29sb3I6XCIjOTg5QTk4XCJ9KV19KSwoMCx5LmpzeHMpKFwibGluZWFyR3JhZGllbnRcIix7aWQ6XCJub2RlanNfaWNvbl9saW5lYXJfZ3JhZGllbnRfZFwiLHgxOlwiLS4xNDVcIix5MTpcIjEyLjQzM1wiLHgyOlwiMTQuMjc3XCIseTI6XCIxLjgxOVwiLGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi41N1wiLHN0b3BDb2xvcjpcIiM3NDc0NzRcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjcyXCIsc3RvcENvbG9yOlwiIzcwNzA3MFwifSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIxXCIsc3RvcENvbG9yOlwiIzkyOTI5MlwifSldfSksKDAseS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIse2lkOlwibm9kZWpzX2ljb25fbGluZWFyX2dyYWRpZW50X2ZcIix4MTpcIjEuMjI2XCIseTE6XCI2Ljk5N1wiLHgyOlwiMTMuMTE3XCIseTI6XCI2Ljk5N1wiLGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi4xNlwiLHN0b3BDb2xvcjpcIiM4Nzg3ODdcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiLjM4XCIsc3RvcENvbG9yOlwiI0E5QTlBOVwifSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuNDdcIixzdG9wQ29sb3I6XCIjQTVBNUE1XCJ9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIi43XCIsc3RvcENvbG9yOlwiIzhGOEY4RlwifSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIuOVwiLHN0b3BDb2xvcjpcIiM2MjYyNjJcIn0pXX0pXX0pXX0pKX12YXIgbnI9XCJMZWFybiBtb3JlIGFib3V0IGVuYWJsaW5nIE5vZGUuanMgaW5zcGVjdG9yIGZvciBzZXJ2ZXIgY29kZSB3aXRoIENocm9tZSBEZXZUb29sc1wiO2Z1bmN0aW9uIG5vKGUpe3ZhciBuPWUuZGV2dG9vbHNGcm9udGVuZFVybHx8XCJcIjtyZXR1cm4gbiYmbmU/KDAseS5qc3gpKGUzLHtcImRhdGEtbmV4dGpzLWRhdGEtcnVudGltZS1lcnJvci1jb3B5LWRldnRvb2xzLXVybFwiOiEwLGNsYXNzTmFtZTpcIm5vZGVqcy1pbnNwZWN0b3ItYnV0dG9uXCIsYWN0aW9uTGFiZWw6XCJDb3B5IENocm9tZSBEZXZUb29scyBVUkxcIixzdWNjZXNzTGFiZWw6XCJDb3BpZWRcIixjb250ZW50Om4saWNvbjooMCx5LmpzeCkobm4se2NsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktdG9vbGJhci1idXR0b24taWNvblwiLHdpZHRoOjE0LGhlaWdodDoxNH0pfSk6KDAseS5qc3gpKFwiYVwiLHt0aXRsZTpucixcImFyaWEtbGFiZWxcIjpucixjbGFzc05hbWU6XCJub2RlanMtaW5zcGVjdG9yLWJ1dHRvblwiLGhyZWY6XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9jb25maWd1cmluZy9kZWJ1Z2dpbmcjc2VydmVyLXNpZGUtY29kZVwiLHRhcmdldDpcIl9ibGFua1wiLHJlbDpcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixjaGlsZHJlbjooMCx5LmpzeCkobnQse2NsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktdG9vbGJhci1idXR0b24taWNvblwiLHdpZHRoOjE0LGhlaWdodDoxNH0pfSl9ZnVuY3Rpb24gbmEoZSl7dmFyIG49ZS5lcnJvcjtyZXR1cm4oMCx5LmpzeCkoZTMse1wiZGF0YS1uZXh0anMtZGF0YS1ydW50aW1lLWVycm9yLWNvcHktc3RhY2tcIjohMCxjbGFzc05hbWU6XCJjb3B5LXN0YWNrLXRyYWNlLWJ1dHRvblwiLGFjdGlvbkxhYmVsOlwiQ29weSBTdGFjayBUcmFjZVwiLHN1Y2Nlc3NMYWJlbDpcIlN0YWNrIFRyYWNlIENvcGllZFwiLGNvbnRlbnQ6bi5zdGFja3x8XCJcIixkaXNhYmxlZDohbi5zdGFja30pfWZ1bmN0aW9uIG5pKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBubChlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfWZ1bmN0aW9uIG5zKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9ZnVuY3Rpb24gbmMoZSxuKXtyZXR1cm4gbmwoZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fG5kKGUsbil8fG5zKCl9ZnVuY3Rpb24gbnUoZSl7cmV0dXJuIG5sKGUpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8bmQoZSl8fG5zKCl9ZnVuY3Rpb24gbmQoZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbmkoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gbmkoZSxuKX19dmFyIG5mPVwiaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9oeWRyYXRpb24tbWlzbWF0Y2hcIixucD1cImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3JlYWN0LWh5ZHJhdGlvbi1lcnJvclwiLG5oPVsvXkluIEhUTUwsICguKz8pIGNhbm5vdCBiZSBhIGNoaWxkIG9mIDwoLis/KT5cXC4oLiopXFxuVGhpcyB3aWxsIGNhdXNlIGEgaHlkcmF0aW9uIGVycm9yXFwuKC4qKS8sL15JbiBIVE1MLCAoLis/KSBjYW5ub3QgYmUgYSBkZXNjZW5kYW50IG9mIDwoLis/KT5cXC5cXG5UaGlzIHdpbGwgY2F1c2UgYSBoeWRyYXRpb24gZXJyb3JcXC4oLiopLywvXkluIEhUTUwsIHRleHQgbm9kZXMgY2Fubm90IGJlIGEgY2hpbGQgb2YgPCguKz8pPlxcLlxcblRoaXMgd2lsbCBjYXVzZSBhIGh5ZHJhdGlvbiBlcnJvclxcLi8sL15JbiBIVE1MLCB3aGl0ZXNwYWNlIHRleHQgbm9kZXMgY2Fubm90IGJlIGEgY2hpbGQgb2YgPCguKz8pPlxcLiBNYWtlIHN1cmUgeW91IGRvbid0IGhhdmUgYW55IGV4dHJhIHdoaXRlc3BhY2UgYmV0d2VlbiB0YWdzIG9uIGVhY2ggbGluZSBvZiB5b3VyIHNvdXJjZSBjb2RlXFwuXFxuVGhpcyB3aWxsIGNhdXNlIGEgaHlkcmF0aW9uIGVycm9yXFwuL107ZnVuY3Rpb24gbmcoZSl7cmV0dXJuIG5oLnNvbWUoZnVuY3Rpb24obil7cmV0dXJuIG4udGVzdChlKX0pfXZhciBubT1bXCJodHRwczovL25leHRqcy5vcmdcIixcImh0dHBzOi8vcmVhY3QuZGV2XCJdO2Z1bmN0aW9uIG52KGUpe3JldHVybiBubS5zb21lKGZ1bmN0aW9uKG4pe3JldHVybiBlLnN0YXJ0c1dpdGgobil9KX1mdW5jdGlvbiBuYihlKXt2YXIgbj1mdW5jdGlvbihlKXt2YXIgbix0LHIsbz0obj1lLHQ9bnYscj1BcnJheS5mcm9tKG4ubWF0Y2hBbGwoL2h0dHBzPzpcXC9cXC9bXlxccy8kLj8jXS5bXlxccyknXCJdKi9naSksZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF19KSx0P3IuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfSk6cik7aWYoMD09PW8ubGVuZ3RoKXJldHVybiBudWxsO3ZhciBhPW9bMF07cmV0dXJuIGE9PT1uZj9ucDphfShlLmVycm9yTWVzc2FnZSk7cmV0dXJuIG4/KDAseS5qc3gpKFwiYVwiLHt0aXRsZTpcIkdvIHRvIHJlbGF0ZWQgZG9jdW1lbnRhdGlvblwiLFwiYXJpYS1sYWJlbFwiOlwiR28gdG8gcmVsYXRlZCBkb2N1bWVudGF0aW9uXCIsY2xhc3NOYW1lOlwiZG9jcy1saW5rLWJ1dHRvblwiLGhyZWY6bix0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub29wZW5lciBub3JlZmVycmVyXCIsY2hpbGRyZW46KDAseS5qc3gpKG55LHtjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LXRvb2xiYXItYnV0dG9uLWljb25cIix3aWR0aDoxNCxoZWlnaHQ6MTR9KX0pOigwLHkuanN4KShcImJ1dHRvblwiLHt0aXRsZTpcIk5vIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBmb3VuZFwiLFwiYXJpYS1sYWJlbFwiOlwiTm8gcmVsYXRlZCBkb2N1bWVudGF0aW9uIGZvdW5kXCIsY2xhc3NOYW1lOlwiZG9jcy1saW5rLWJ1dHRvblwiLGRpc2FibGVkOiEwLGNoaWxkcmVuOigwLHkuanN4KShueSx7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS10b29sYmFyLWJ1dHRvbi1pY29uXCIsd2lkdGg6MTQsaGVpZ2h0OjE0fSl9KX1mdW5jdGlvbiBueShlKXt2YXIgbix0O3JldHVybigwLHkuanN4KShcInN2Z1wiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3dpZHRoOlwiMTRcIixoZWlnaHQ6XCIxNFwiLHZpZXdCb3g6XCIwIDAgMTQgMTRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksdD10PXtjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMCAuODc1aDQuMzc1QzUuNDQ4Ljg3NSA2LjQwMSAxLjM5IDcgMi4xODdBMy4yNzYgMy4yNzYgMCAwIDEgOS42MjUuODc1SDE0djExLjE1Nkg5LjRjLS41MjIgMC0xLjAyMy4yMDgtMS4zOTIuNTc3bC0uNTQ0LjU0M2gtLjkyOGwtLjU0NC0uNTQzYy0uMzY5LS4zNy0uODctLjU3Ny0xLjM5Mi0uNTc3SDBWLjg3NXptNi4zNDQgMy4yODFhMS45NjkgMS45NjkgMCAwIDAtMS45NjktMS45NjhIMS4zMTJ2OC41M0g0LjZjLjYyMiAwIDEuMjI1LjE3NyAxLjc0NC41MDJWNC4xNTZ6bTEuMzEyIDcuMDY0VjQuMTU2YzAtMS4wODcuODgyLTEuOTY4IDEuOTY5LTEuOTY4aDMuMDYzdjguNTNIOS40Yy0uNjIyIDAtMS4yMjUuMTc3LTEuNzQ0LjUwMnpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9ZnVuY3Rpb24gbngoZSl7dmFyIG49ZS5lcnJvcix0PWUuZGVidWdJbmZvLHI9ZS5mZWVkYmFja0J1dHRvbjtyZXR1cm4oMCx5LmpzeHMpKFwic3BhblwiLHtjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LXRvb2xiYXJcIixjaGlsZHJlbjpbciwoMCx5LmpzeCkobmEse2Vycm9yOm59KSwoMCx5LmpzeCkobmIse2Vycm9yTWVzc2FnZTpuLm1lc3NhZ2V9KSwoMCx5LmpzeCkobm8se2RldnRvb2xzRnJvbnRlbmRVcmw6bnVsbD09dD92b2lkIDA6dC5kZXZ0b29sc0Zyb250ZW5kVXJsfSldfSl9ZnVuY3Rpb24gbncoZSl7dmFyIG4sdDtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIiwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2xhc3NOYW1lOlwidGh1bWJzLXVwLWljb25cIn0sZSksdD10PXtjaGlsZHJlbjooMCx5LmpzeCkoXCJnXCIse2lkOlwidGh1bWItdXAtMTZcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2lkOlwiVW5pb25cIixmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTYuODk1MzEgMi4yMzk1OUM2LjcyOTg0IDIuMTIxNCA2LjUgMi4yMzk2OCA2LjUgMi40NDMwM1Y1LjI0OTg5QzYuNSA2LjIxNjM5IDUuNzE2NSA2Ljk5OTg5IDQuNzUgNi45OTk4OUgyLjVWMTMuNDk5OUgxMi4xODg0QzEyLjc2MiAxMy40OTk5IDEzLjI2MiAxMy4xMDk1IDEzLjQwMTEgMTIuNTUzMUwxNC40MDExIDguNTUzMDZDMTQuNTk4NCA3Ljc2NDEyIDE0LjAwMTcgNi45OTk4OSAxMy4xODg0IDYuOTk5ODlIOS4yNUg4LjVWNi4yNDk4OVYzLjUxNDQ2QzguNSAzLjQzMzcyIDguNDYxMDEgMy4zNTc5NSA4LjM5NTMxIDMuMzExMDJMNi44OTUzMSAyLjIzOTU5Wk01IDIuNDQzMDNDNSAxLjAxOTYzIDYuNjA4OSAwLjE5MTY1NiA3Ljc2NzE3IDEuMDE4OTlMOS4yNjcxNyAyLjA5MDQyQzkuNzI3MDYgMi40MTg5MiAxMCAyLjk0OTI5IDEwIDMuNTE0NDZWNS40OTk4OUgxMy4xODg0QzE0Ljk3NzUgNS40OTk4OSAxNi4yOTAzIDcuMTgxMjEgMTUuODU2MyA4LjkxNjg2TDE0Ljg1NjMgMTIuOTE2OUMxNC41NTAzIDE0LjE0MTEgMTMuNDUwMyAxNC45OTk5IDEyLjE4ODQgMTQuOTk5OUgxLjc1SDFWMTQuMjQ5OVY2LjI0OTg5VjUuNDk5ODlIMS43NUg0Ljc1QzQuODg4MDcgNS40OTk4OSA1IDUuMzg3OTYgNSA1LjI0OTg5VjIuNDQzMDNaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9ZnVuY3Rpb24gbmooZSl7dmFyIG4sdDtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIiwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2xhc3NOYW1lOlwidGh1bWJzLWRvd24taWNvblwifSxlKSx0PXQ9e2NoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbFJ1bGU6XCJldmVub2RkXCIsY2xpcFJ1bGU6XCJldmVub2RkXCIsZDpcIk01Ljg5NTMxIDEyLjc2MDNDNS43Mjk4NCAxMi44Nzg1IDUuNSAxMi43NjAyIDUuNSAxMi41NTY5VjkuNzVDNS41IDguNzgzNSA0LjcxNjUgOCAzLjc1IDhIMS41VjEuNUgxMS4xODg0QzExLjc2MiAxLjUgMTIuMjYyIDEuODkwMzcgMTIuNDAxMSAyLjQ0NjgzTDEzLjQwMTEgNi40NDY4M0MxMy41OTg0IDcuMjM1NzYgMTMuMDAxNyA4IDEyLjE4ODQgOEg4LjI1SDcuNVY4Ljc1VjExLjQ4NTRDNy41IDExLjU2NjIgNy40NjEwMSAxMS42NDE5IDcuMzk1MzEgMTEuNjg4OUw1Ljg5NTMxIDEyLjc2MDNaTTQgMTIuNTU2OUM0IDEzLjk4MDMgNS42MDg5IDE0LjgwODIgNi43NjcxNyAxMy45ODA5TDguMjY3MTcgMTIuOTA5NUM4LjcyNzA2IDEyLjU4MSA5IDEyLjA1MDYgOSAxMS40ODU0VjkuNUgxMi4xODg0QzEzLjk3NzUgOS41IDE1LjI5MDMgNy44MTg2OCAxNC44NTYzIDYuMDgzMDNMMTMuODU2MyAyLjA4MzAzQzEzLjU1MDMgMC44NTg4MTYgMTIuNDUwMyAwIDExLjE4ODQgMEgwLjc1SDBWMC43NVY4Ljc1VjkuNUgwLjc1SDMuNzVDMy44ODgwNyA5LjUgNCA5LjYxMTkzIDQgOS43NVYxMi41NTY5WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX1mdW5jdGlvbiBuayhlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gbkEoZSxuLHQscixvLGEsaSl7dHJ5e3ZhciBsPWVbYV0oaSkscz1sLnZhbHVlfWNhdGNoKGUpe3QoZSk7cmV0dXJufWwuZG9uZT9uKHMpOlByb21pc2UucmVzb2x2ZShzKS50aGVuKHIsbyl9ZnVuY3Rpb24gbk8oZSxuLHQpe3JldHVybiBuIGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7dmFsdWU6dCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbbl09dCxlfWZ1bmN0aW9uIG5DKGUpe3ZhciBuLHQscj1lLmVycm9yQ29kZSxvPWUuY2xhc3NOYW1lLGE9KG49KDAseC51c2VTdGF0ZSkoe30pLHQ9MixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShuKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShuLDIpfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBuayhlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBuayhlLG4pfX0obix0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSksaT1hWzBdLGw9YVsxXSxzPWlbcl0sYz1wcm9jZXNzLmVudi5fX05FWFRfVEVMRU1FVFJZX0RJU0FCTEVELHU9KDAseC51c2VDYWxsYmFjaykoZnVuY3Rpb24oZSl7dmFyIG47cmV0dXJuKG49ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG8sYT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZvWzBdKXRocm93IG9bMV07cmV0dXJuIG9bMV19LHRyeXM6W10sb3BzOltdfSxpPU9iamVjdC5jcmVhdGUoKFwiZnVuY3Rpb25cIj09dHlwZW9mIEl0ZXJhdG9yP0l0ZXJhdG9yOk9iamVjdCkucHJvdG90eXBlKTtyZXR1cm4gaS5uZXh0PWwoMCksaS50aHJvdz1sKDEpLGkucmV0dXJuPWwoMiksXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYoaVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxpO2Z1bmN0aW9uIGwobCl7cmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciBjPVtsLHNdO2lmKHQpdGhyb3cgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtmb3IoO2kmJihpPTAsY1swXSYmKGE9MCkpLGE7KXRyeXtpZih0PTEsciYmKG89MiZjWzBdP3IucmV0dXJuOmNbMF0/ci50aHJvd3x8KChvPXIucmV0dXJuKSYmby5jYWxsKHIpLDApOnIubmV4dCkmJiEobz1vLmNhbGwocixjWzFdKSkuZG9uZSlyZXR1cm4gbztzd2l0Y2gocj0wLG8mJihjPVsyJmNbMF0sby52YWx1ZV0pLGNbMF0pe2Nhc2UgMDpjYXNlIDE6bz1jO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYS5sYWJlbCsrLHt2YWx1ZTpjWzFdLGRvbmU6ITF9O2Nhc2UgNTphLmxhYmVsKysscj1jWzFdLGM9WzBdO2NvbnRpbnVlO2Nhc2UgNzpjPWEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEobz0obz1hLnRyeXMpLmxlbmd0aD4wJiZvW28ubGVuZ3RoLTFdKSYmKDY9PT1jWzBdfHwyPT09Y1swXSkpe2E9MDtjb250aW51ZX1pZigzPT09Y1swXSYmKCFvfHxjWzFdPm9bMF0mJmNbMV08b1szXSkpe2EubGFiZWw9Y1sxXTticmVha31pZig2PT09Y1swXSYmYS5sYWJlbDxvWzFdKXthLmxhYmVsPW9bMV0sbz1jO2JyZWFrfWlmKG8mJmEubGFiZWw8b1syXSl7YS5sYWJlbD1vWzJdLGEub3BzLnB1c2goYyk7YnJlYWt9b1syXSYmYS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlfWM9bi5jYWxsKGUsYSl9Y2F0Y2goZSl7Yz1bNixlXSxyPTB9ZmluYWxseXt0PW89MH1pZig1JmNbMF0pdGhyb3cgY1sxXTtyZXR1cm57dmFsdWU6Y1swXT9jWzFdOnZvaWQgMCxkb25lOiEwfX19fSh0aGlzLGZ1bmN0aW9uKG4pe3N3aXRjaChuLmxhYmVsKXtjYXNlIDA6bChmdW5jdGlvbihuKXt2YXIgdCxvO3JldHVybiB0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXtuTyhlLG4sdFtuXSl9KX1yZXR1cm4gZX0oe30sbiksbz1udWxsIT0obz1uTyh7fSxyLGUpKT9vOnt9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobykpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobykpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sZSkpfSksdH0pLG4ubGFiZWw9MTtjYXNlIDE6cmV0dXJuIG4udHJ5cy5wdXNoKFsxLDMsLDRdKSxbNCxmZXRjaChcIlwiLmNvbmNhdChwcm9jZXNzLmVudi5fX05FWFRfUk9VVEVSX0JBU0VQQVRIfHxcIlwiLFwiL19fbmV4dGpzX2Vycm9yX2ZlZWRiYWNrP1wiKS5jb25jYXQobmV3IFVSTFNlYXJjaFBhcmFtcyh7ZXJyb3JDb2RlOnIsd2FzSGVscGZ1bDplLnRvU3RyaW5nKCl9KSkpXTtjYXNlIDI6cmV0dXJuIG4uc2VudCgpLm9rfHxjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHJlY29yZCBmZWVkYmFjayBvbiB0aGUgc2VydmVyLlwiKSxbMyw0XTtjYXNlIDM6cmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gcmVjb3JkIGZlZWRiYWNrOlwiLG4uc2VudCgpKSxbMyw0XTtjYXNlIDQ6cmV0dXJuWzJdfX0pfSxmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbyl7dmFyIGE9bi5hcHBseShlLHQpO2Z1bmN0aW9uIGkoZSl7bkEoYSxyLG8saSxsLFwibmV4dFwiLGUpfWZ1bmN0aW9uIGwoZSl7bkEoYSxyLG8saSxsLFwidGhyb3dcIixlKX1pKHZvaWQgMCl9KX0pKCl9LFtyXSk7cmV0dXJuKDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTooMCxlSi5jeCkoXCJlcnJvci1mZWVkYmFja1wiLG8pLHJvbGU6XCJyZWdpb25cIixcImFyaWEtbGFiZWxcIjpcIkVycm9yIGZlZWRiYWNrXCIsY2hpbGRyZW46dm9pZCAwIT09cz8oMCx5LmpzeCkoXCJwXCIse2NsYXNzTmFtZTpcImVycm9yLWZlZWRiYWNrLXRoYW5rc1wiLHJvbGU6XCJzdGF0dXNcIixcImFyaWEtbGl2ZVwiOlwicG9saXRlXCIsY2hpbGRyZW46XCJUaGFua3MgZm9yIHlvdXIgZmVlZGJhY2shXCJ9KTooMCx5LmpzeHMpKHkuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCx5LmpzeCkoXCJwXCIse2NoaWxkcmVuOigwLHkuanN4KShcImFcIix7aHJlZjpcImh0dHBzOi8vbmV4dGpzLm9yZy90ZWxlbWV0cnkjZXJyb3ItZmVlZGJhY2tcIixyZWw6XCJub29wZW5lciBub3JlZmVycmVyXCIsdGFyZ2V0OlwiX2JsYW5rXCIsY2hpbGRyZW46XCJXYXMgdGhpcyBoZWxwZnVsP1wifSl9KSwoMCx5LmpzeCkoXCJidXR0b25cIix7XCJhcmlhLWRpc2FibGVkXCI6Yz9cInRydWVcIjp2b2lkIDAsXCJhcmlhLWxhYmVsXCI6XCJNYXJrIGFzIGhlbHBmdWxcIixvbkNsaWNrOmM/dm9pZCAwOmZ1bmN0aW9uKCl7cmV0dXJuIHUoITApfSxjbGFzc05hbWU6KDAsZUouY3gpKFwiZmVlZGJhY2stYnV0dG9uXCIsITA9PT1zJiZcInZvdGVkXCIpLHRpdGxlOmM/XCJGZWVkYmFjayBkaXNhYmxlZCBkdWUgdG8gc2V0dGluZyBORVhUX1RFTEVNRVRSWV9ESVNBQkxFRFwiOnZvaWQgMCx0eXBlOlwiYnV0dG9uXCIsY2hpbGRyZW46KDAseS5qc3gpKG53LHtcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCJ9KX0pLCgwLHkuanN4KShcImJ1dHRvblwiLHtcImFyaWEtZGlzYWJsZWRcIjpjP1widHJ1ZVwiOnZvaWQgMCxcImFyaWEtbGFiZWxcIjpcIk1hcmsgYXMgbm90IGhlbHBmdWxcIixvbkNsaWNrOmM/dm9pZCAwOmZ1bmN0aW9uKCl7cmV0dXJuIHUoITEpfSxjbGFzc05hbWU6KDAsZUouY3gpKFwiZmVlZGJhY2stYnV0dG9uXCIsITE9PT1zJiZcInZvdGVkXCIpLHRpdGxlOmM/XCJGZWVkYmFjayBkaXNhYmxlZCBkdWUgdG8gc2V0dGluZyBORVhUX1RFTEVNRVRSWV9ESVNBQkxFRFwiOnZvaWQgMCx0eXBlOlwiYnV0dG9uXCIsY2hpbGRyZW46KDAseS5qc3gpKG5qLHtcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCIsc3R5bGU6e3RyYW5zbGF0ZTpcIjFweCAxcHhcIn19KX0pXX0pfSl9ZnVuY3Rpb24gblMoZSl7dmFyIG49ZS5lcnJvckNvZGU7cmV0dXJuKDAseS5qc3gpKFwiZm9vdGVyXCIse1wiZGF0YS1uZXh0anMtZXJyb3Itb3ZlcmxheS1mb290ZXJcIjohMCxjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LWZvb3RlclwiLGNoaWxkcmVuOm4/KDAseS5qc3gpKG5DLHtjbGFzc05hbWU6XCJlcnJvci1mZWVkYmFja1wiLGVycm9yQ29kZTpufSk6bnVsbH0pfXZhciBuRT1cIlxcbiAgLmVycm9yLW92ZXJsYXktZm9vdGVyIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcblxcbiAgICBnYXA6IDhweDtcXG4gICAgcGFkZGluZzogMTJweDtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0yMDApO1xcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgfVxcblxcbiAgLmVycm9yLWZlZWRiYWNrIHtcXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XFxuXFxuICAgIHAge1xcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgICBtYXJnaW46IDA7XFxuICAgIH1cXG4gIH1cXG5cXG4gIFwiLmNvbmNhdChcIlxcbiAgLmVycm9yLWZlZWRiYWNrIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiA4cHg7XFxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICB9XFxuXFxuICAuZXJyb3ItZmVlZGJhY2stdGhhbmtzIHtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTI0KTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgcGFkZGluZy1yaWdodDogNHB4OyAvKiBUbyBtYXRjaCB0aGUgNHB4IGlubmVyIHBhZGRpbmcgb2YgdGhlIHRodW1icyB1cCBhbmQgZG93biBpY29ucyAqL1xcbiAgfVxcblxcbiAgLmZlZWRiYWNrLWJ1dHRvbiB7XFxuICAgIGJhY2tncm91bmQ6IG5vbmU7XFxuICAgIGJvcmRlcjogbm9uZTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZCk7XFxuICAgIHdpZHRoOiB2YXIoLS1zaXplLTI0KTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTI0KTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG5cXG4gICAgJjpmb2N1cyB7XFxuICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgIH1cXG5cXG4gICAgJjpob3ZlciB7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS1hbHBoYS0xMDApO1xcbiAgICB9XFxuXFxuICAgICY6YWN0aXZlIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTIwMCk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5mZWVkYmFjay1idXR0b25bYXJpYS1kaXNhYmxlZD0ndHJ1ZSddIHtcXG4gICAgb3BhY2l0eTogMC43O1xcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgfVxcblxcbiAgLmZlZWRiYWNrLWJ1dHRvbi52b3RlZCB7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktYWxwaGEtMjAwKTtcXG4gIH1cXG5cXG4gIC50aHVtYnMtdXAtaWNvbixcXG4gIC50aHVtYnMtZG93bi1pY29uIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgd2lkdGg6IHZhcigtLXNpemUtMTYpO1xcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgfVxcblwiLFwiXFxuXCIpO2Z1bmN0aW9uIG5fKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBuUChlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbl8oZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gbl8oZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gbnooZSl7dmFyIG49ZS5lcnJvck1lc3NhZ2UsdD1uUCgoMCx4LnVzZVN0YXRlKSghMSksMikscj10WzBdLG89dFsxXSxhPW5QKCgwLHgudXNlU3RhdGUpKCExKSwyKSxpPWFbMF0sbD1hWzFdLHM9KDAseC51c2VSZWYpKG51bGwpO3JldHVybigwLHgudXNlTGF5b3V0RWZmZWN0KShmdW5jdGlvbigpe3MuY3VycmVudCYmbChzLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0PjIwMCl9LFtuXSksKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfd3JhcHBlclwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJwXCIse3JlZjpzLGlkOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2Rlc2NcIixjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZGVzYyBcIi5jb25jYXQoaSYmIXI/XCJ0cnVuY2F0ZWRcIjpcIlwiKSxjaGlsZHJlbjpufSksaSYmIXImJigwLHkuanN4cykoeS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZ3JhZGllbnRfb3ZlcmxheVwifSksKDAseS5qc3gpKFwiYnV0dG9uXCIse29uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbyghMCl9LGNsYXNzTmFtZTpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19leHBhbmRfYnV0dG9uXCIsXCJhcmlhLWV4cGFuZGVkXCI6cixcImFyaWEtY29udHJvbHNcIjpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19kZXNjXCIsY2hpbGRyZW46XCJTaG93IE1vcmVcIn0pXX0pXX0pfWZ1bmN0aW9uIG5MKGUpe3ZhciBuPWUuZXJyb3JUeXBlO3JldHVybigwLHkuanN4KShcInNwYW5cIix7aWQ6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfbGFiZWxcIixjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfbGFiZWxcIixjaGlsZHJlbjpufSl9ZnVuY3Rpb24gblQoZSl7dmFyIG49ZS50aXRsZSx0PWUuY2xhc3NOYW1lO3JldHVybigwLHkuanN4KShcInN2Z1wiLHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXCJhcmlhLWxhYmVsXCI6bixjbGFzc05hbWU6dCxjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNOS4yNDk5NiAxMi4wNjA4TDguNzE5NjMgMTEuNTMwNEw1Ljg5NjQxIDguNzA3MjJDNS41MDU4OCA4LjMxNjcgNS41MDU4OCA3LjY4MzUzIDUuODk2NDEgNy4yOTMwMUw4LjcxOTYzIDQuNDY5NzhMOS4yNDk5NiAzLjkzOTQ1TDEwLjMxMDYgNS4wMDAxMUw5Ljc4MDI5IDUuNTMwNDRMNy4zMTA2MiA4LjAwMDExTDkuNzgwMjkgMTAuNDY5OEwxMC4zMTA2IDExLjAwMDFMOS4yNDk5NiAxMi4wNjA4WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSl9ZnVuY3Rpb24gblIoZSl7dmFyIG49ZS50aXRsZSx0PWUuY2xhc3NOYW1lO3JldHVybigwLHkuanN4KShcInN2Z1wiLHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2xhc3NOYW1lOnQsXCJhcmlhLWxhYmVsXCI6bixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNi43NTAxMSAzLjkzOTQ1TDcuMjgwNDQgNC40Njk3OEwxMC4xMDM3IDcuMjkzMDFDMTAuNDk0MiA3LjY4MzUzIDEwLjQ5NDIgOC4zMTY3IDEwLjEwMzcgOC43MDcyMkw3LjI4MDQ0IDExLjUzMDRMNi43NTAxMSAxMi4wNjA4TDUuNjg5NDUgMTEuMDAwMUw2LjIxOTc4IDEwLjQ2OThMOC42ODk0NSA4LjAwMDExTDYuMjE5NzggNS41MzA0NEw1LjY4OTQ1IDUuMDAwMTFMNi43NTAxMSAzLjkzOTQ1WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSl9ZnVuY3Rpb24gbk4oZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIG5EKGUpe3ZhciBuLHQscj1lLnJ1bnRpbWVFcnJvcnMsbz1lLmFjdGl2ZUlkeCxhPWUub25BY3RpdmVJbmRleENoYW5nZSxpPSgwLHgudXNlQ2FsbGJhY2spKGZ1bmN0aW9uKCl7cmV0dXJuKDAseC5zdGFydFRyYW5zaXRpb24pKGZ1bmN0aW9uKCl7bz4wJiZhKE1hdGgubWF4KDAsby0xKSl9KX0sW28sYV0pLGw9KDAseC51c2VDYWxsYmFjaykoZnVuY3Rpb24oKXtyZXR1cm4oMCx4LnN0YXJ0VHJhbnNpdGlvbikoZnVuY3Rpb24oKXtvPHIubGVuZ3RoLTEmJmEoTWF0aC5tYXgoMCxNYXRoLm1pbihyLmxlbmd0aC0xLG8rMSkpKX0pfSxbbyxyLmxlbmd0aCxhXSkscz0oMCx4LnVzZVJlZikobnVsbCksYz0oMCx4LnVzZVJlZikobnVsbCksdT0obj0oMCx4LnVzZVN0YXRlKShudWxsKSx0PTIsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0obil8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksYS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0obiwyKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbk4oZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gbk4oZSxuKX19KG4sdCl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLGQ9dVswXSxmPXVbMV0scD0oMCx4LnVzZUNhbGxiYWNrKShmdW5jdGlvbihlKXtmKGUpfSxbXSk7cmV0dXJuKDAseC51c2VFZmZlY3QpKGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7XCJBcnJvd0xlZnRcIj09PWUua2V5PyhlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxpJiZpKCkpOlwiQXJyb3dSaWdodFwiPT09ZS5rZXkmJihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxsJiZsKCkpfTtpZihudWxsIT1kKXt2YXIgbj1kLmdldFJvb3ROb2RlKCksdD1zZWxmLmRvY3VtZW50O3JldHVybiBuLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsZSksbiE9PXQmJnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKSxmdW5jdGlvbigpe24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKSxuIT09dCYmdC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGUpfX19LFtkLGwsaV0pLCgwLHgudXNlRWZmZWN0KShmdW5jdGlvbigpe2lmKG51bGwhPWQpe3ZhciBlLG4sdD1kLmdldFJvb3ROb2RlKCk7aWYoZT10LG51bGwhPShuPVNoYWRvd1Jvb3QpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZuW1N5bWJvbC5oYXNJbnN0YW5jZV0/ISFuW1N5bWJvbC5oYXNJbnN0YW5jZV0oZSk6ZSBpbnN0YW5jZW9mIG4pe3ZhciBhPXQuYWN0aXZlRWxlbWVudDswPT09bz9zLmN1cnJlbnQmJmE9PT1zLmN1cnJlbnQmJnMuY3VycmVudC5ibHVyKCk6bz09PXIubGVuZ3RoLTEmJmMuY3VycmVudCYmYT09PWMuY3VycmVudCYmYy5jdXJyZW50LmJsdXIoKX19fSxbZCxvLHIubGVuZ3RoXSksKDAseS5qc3hzKShcIm5hdlwiLHtjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LXBhZ2luYXRpb24gZGlhbG9nLWV4Y2x1ZGUtY2xvc2luZy1mcm9tLW91dHNpZGUtY2xpY2tcIixyZWY6cCxjaGlsZHJlbjpbKDAseS5qc3gpKFwiYnV0dG9uXCIse3JlZjpzLHR5cGU6XCJidXR0b25cIixkaXNhYmxlZDowPT09byxcImFyaWEtZGlzYWJsZWRcIjowPT09byxvbkNsaWNrOmksXCJkYXRhLW5leHRqcy1kaWFsb2ctZXJyb3ItcHJldmlvdXNcIjohMCxjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LXBhZ2luYXRpb24tYnV0dG9uXCIsY2hpbGRyZW46KDAseS5qc3gpKG5ULHt0aXRsZTpcInByZXZpb3VzXCIsY2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1wYWdpbmF0aW9uLWJ1dHRvbi1pY29uXCJ9KX0pLCgwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1wYWdpbmF0aW9uLWNvdW50XCIsY2hpbGRyZW46WygwLHkuanN4cykoXCJzcGFuXCIse1wiZGF0YS1uZXh0anMtZGlhbG9nLWVycm9yLWluZGV4XCI6byxjaGlsZHJlbjpbbysxLFwiL1wiXX0pLCgwLHkuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1kaWFsb2ctaGVhZGVyLXRvdGFsLWNvdW50XCI6ITAsY2hpbGRyZW46ci5sZW5ndGh8fDF9KV19KSwoMCx5LmpzeCkoXCJidXR0b25cIix7cmVmOmMsdHlwZTpcImJ1dHRvblwiLGRpc2FibGVkOm8+PXIubGVuZ3RoLTEsXCJhcmlhLWRpc2FibGVkXCI6bz49ci5sZW5ndGgtMSxvbkNsaWNrOmwsXCJkYXRhLW5leHRqcy1kaWFsb2ctZXJyb3ItbmV4dFwiOiEwLGNsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktcGFnaW5hdGlvbi1idXR0b25cIixjaGlsZHJlbjooMCx5LmpzeCkoblIse3RpdGxlOlwibmV4dFwiLGNsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktcGFnaW5hdGlvbi1idXR0b24taWNvblwifSl9KV19KX1mdW5jdGlvbiBuQihlKXt2YXIgbj1lLmluc3RhbGxlZCx0PWUuc3RhbGVuZXNzLHI9ZS5leHBlY3RlZCxvPVwiXCIsYT1cIlwiLGk9XCJcIixsPVwiTmV4dC5qcyBcIi5jb25jYXQobik7c3dpdGNoKHQpe2Nhc2VcIm5ld2VyLXRoYW4tbnBtXCI6Y2FzZVwiZnJlc2hcIjpvPWwsYT1cIkxhdGVzdCBhdmFpbGFibGUgdmVyc2lvbiBpcyBkZXRlY3RlZCAoXCIuY29uY2F0KG4sXCIpLlwiKSxpPVwiZnJlc2hcIjticmVhaztjYXNlXCJzdGFsZS1wYXRjaFwiOmNhc2VcInN0YWxlLW1pbm9yXCI6bz1cIlwiLmNvbmNhdChsLFwiIChzdGFsZSlcIiksYT1cIlRoZXJlIGlzIGEgbmV3ZXIgdmVyc2lvbiAoXCIuY29uY2F0KHIsXCIpIGF2YWlsYWJsZSwgdXBncmFkZSByZWNvbW1lbmRlZCEgXCIpLGk9XCJzdGFsZVwiO2JyZWFrO2Nhc2VcInN0YWxlLW1ham9yXCI6bz1cIlwiLmNvbmNhdChsLFwiIChvdXRkYXRlZClcIiksYT1cIkFuIG91dGRhdGVkIHZlcnNpb24gZGV0ZWN0ZWQgKGxhdGVzdCBpcyBcIi5jb25jYXQocixcIiksIHVwZ3JhZGUgaXMgaGlnaGx5IHJlY29tbWVuZGVkIVwiKSxpPVwib3V0ZGF0ZWRcIjticmVhaztjYXNlXCJzdGFsZS1wcmVyZWxlYXNlXCI6bz1cIlwiLmNvbmNhdChsLFwiIChzdGFsZSlcIiksYT1cIlRoZXJlIGlzIGEgbmV3ZXIgY2FuYXJ5IHZlcnNpb24gKFwiLmNvbmNhdChyLFwiKSBhdmFpbGFibGUsIHBsZWFzZSB1cGdyYWRlISBcIiksaT1cInN0YWxlXCI7YnJlYWs7Y2FzZVwidW5rbm93blwiOm89XCJcIi5jb25jYXQobCxcIiAodW5rbm93bilcIiksYT1cIk5vIE5leHQuanMgdmVyc2lvbiBkYXRhIHdhcyBmb3VuZC5cIixpPVwidW5rbm93blwifXJldHVybnt0ZXh0Om8saW5kaWNhdG9yQ2xhc3M6aSx0aXRsZTphfX1mdW5jdGlvbiBuTShlKXt2YXIgbix0O3JldHVybigwLHkuanN4KShcInN2Z1wiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3dpZHRoOlwiMTRcIixoZWlnaHQ6XCIxNFwiLHZpZXdCb3g6XCIwIDAgMTQgMTRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksdD10PXtjaGlsZHJlbjooMCx5LmpzeCkoXCJjaXJjbGVcIix7Y3g6XCI3XCIsY3k6XCI3XCIscjpcIjUuNVwiLHN0cm9rZVdpZHRoOlwiM1wifSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpfWZ1bmN0aW9uIG5JKGUpe3ZhciBuPWUudmVyc2lvbkluZm8sdD1lLmJ1bmRsZXJOYW1lLHI9bi5zdGFsZW5lc3Msbz1uQihuKSxhPW8udGV4dCxpPW8uaW5kaWNhdG9yQ2xhc3MsbD1vLnRpdGxlLHM9XCJUdXJib3BhY2tcIj09PXQ7cmV0dXJuIHIuc3RhcnRzV2l0aChcInN0YWxlXCIpPygwLHkuanN4cykoXCJhXCIse2NsYXNzTmFtZTpcIm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItdmVyc2lvbi1zdGF0dXMgZGlhbG9nLWV4Y2x1ZGUtY2xvc2luZy1mcm9tLW91dHNpZGUtY2xpY2tcIix0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub29wZW5lciBub3JlZmVycmVyXCIsaHJlZjpcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3ZlcnNpb24tc3RhbGVuZXNzXCIsY2hpbGRyZW46WygwLHkuanN4KShuTSx7Y2xhc3NOYW1lOigwLGVKLmN4KShcInZlcnNpb24tc3RhbGVuZXNzLWluZGljYXRvclwiLGkpfSksKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLXZlcnNpb24tY2hlY2tlclwiOiEwLHRpdGxlOmwsY2hpbGRyZW46YX0pLCgwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOigwLGVKLmN4KShzJiZcInR1cmJvcGFjay10ZXh0XCIpLGNoaWxkcmVuOnR9KV19KTooMCx5LmpzeHMpKFwic3BhblwiLHtjbGFzc05hbWU6XCJuZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLXZlcnNpb24tc3RhdHVzIGRpYWxvZy1leGNsdWRlLWNsb3NpbmctZnJvbS1vdXRzaWRlLWNsaWNrXCIsY2hpbGRyZW46WygwLHkuanN4KShuTSx7Y2xhc3NOYW1lOigwLGVKLmN4KShcInZlcnNpb24tc3RhbGVuZXNzLWluZGljYXRvclwiLGkpfSksKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLXZlcnNpb24tY2hlY2tlclwiOiEwLHRpdGxlOmwsY2hpbGRyZW46YX0pLCgwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOigwLGVKLmN4KShzJiZcInR1cmJvcGFjay10ZXh0XCIpLGNoaWxkcmVuOnR9KV19KX1mdW5jdGlvbiBuSChlKXt2YXIgbj1lLnJ1bnRpbWVFcnJvcnMsdD1lLmFjdGl2ZUlkeCxyPWUuc2V0QWN0aXZlSW5kZXgsbz1lLnZlcnNpb25JbmZvLGE9cHJvY2Vzcy5lbnYuX19ORVhUX0JVTkRMRVJ8fFwiV2VicGFja1wiO3JldHVybigwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1lcnJvci1vdmVybGF5LW5hdlwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkobkYse3NpZGU6XCJsZWZ0XCIsY2hpbGRyZW46KDAseS5qc3gpKG5ELHtydW50aW1lRXJyb3JzOm51bGwhPW4/bjpbXSxhY3RpdmVJZHg6bnVsbCE9dD90OjAsb25BY3RpdmVJbmRleENoYW5nZTpudWxsIT1yP3I6ZnVuY3Rpb24oKXt9fSl9KSxvJiYoMCx5LmpzeCkobkYse3NpZGU6XCJyaWdodFwiLGNoaWxkcmVuOigwLHkuanN4KShuSSx7dmVyc2lvbkluZm86byxidW5kbGVyTmFtZTphfSl9KV19KX1mdW5jdGlvbiBuRihlKXt2YXIgbj1lLmNoaWxkcmVuLHQ9ZS5zaWRlO3JldHVybigwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1ub3RjaFwiLFwiZGF0YS1zaWRlXCI6dm9pZCAwPT09dD9cImxlZnRcIjp0LGNoaWxkcmVuOltuLCgwLHkuanN4KShuVSx7fSldfSl9ZnVuY3Rpb24gblUoKXtyZXR1cm4oMCx5LmpzeHMpKFwic3ZnXCIse3dpZHRoOlwiNjBcIixoZWlnaHQ6XCI0MlwiLHZpZXdCb3g6XCIwIDAgNjAgNDJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LW5vdGNoLXRhaWxcIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwibm9uZVwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwibWFza1wiLHtpZDpcImVycm9yX292ZXJsYXlfbmF2X21hc2swXzI2NjdfMTQ2ODdcIixzdHlsZTp7bWFza1R5cGU6XCJhbHBoYVwifSxtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6XCIwXCIseTpcIi0xXCIsd2lkdGg6XCI2MFwiLGhlaWdodDpcIjQzXCIsY2hpbGRyZW46WygwLHkuanN4cykoXCJtYXNrXCIse2lkOlwiZXJyb3Jfb3ZlcmxheV9uYXZfcGF0aF8xX291dHNpZGVfMV8yNjY3XzE0Njg3XCIsbWFza1VuaXRzOlwidXNlclNwYWNlT25Vc2VcIix4OlwiMFwiLHk6XCItMVwiLHdpZHRoOlwiNjBcIixoZWlnaHQ6XCI0M1wiLGZpbGw6XCJibGFja1wiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJyZWN0XCIse2ZpbGw6XCJ3aGl0ZVwiLHk6XCItMVwiLHdpZHRoOlwiNjBcIixoZWlnaHQ6XCI0M1wifSksKDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTEgMEw4LjA3ODMgMEMxNS43NzIgMCAyMi43ODM2IDQuNDEzMjQgMjYuMTExIDExLjM1MDFMMzQuODg4OSAyOS42NDk4QzM4LjIxNjQgMzYuNTg2OCA0NS4yMjggNDEgNTIuOTIxNyA0MUg2MEgxTDEgMFpcIn0pXX0pLCgwLHkuanN4KShcInBhdGhcIix7ZDpcIk0xIDBMOC4wNzgzIDBDMTUuNzcyIDAgMjIuNzgzNiA0LjQxMzI0IDI2LjExMSAxMS4zNTAxTDM0Ljg4ODkgMjkuNjQ5OEMzOC4yMTY0IDM2LjU4NjggNDUuMjI4IDQxIDUyLjkyMTcgNDFINjBIMUwxIDBaXCIsZmlsbDpcIndoaXRlXCJ9KSwoMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNMSAwVi0xSDBWMEwxIDBaTTEgNDFIMFY0MkgxVjQxWk0zNC44ODg5IDI5LjY0OThMMzMuOTg3MyAzMC4wODIzTDM0Ljg4ODkgMjkuNjQ5OFpNMjYuMTExIDExLjM1MDFMMjcuMDEyNyAxMC45MTc3TDI2LjExMSAxMS4zNTAxWk0xIDFIOC4wNzgzVi0xSDFWMVpNNjAgNDBIMVY0Mkg2MFY0MFpNMiA0MVYwTDAgMEwwIDQxSDJaTTI1LjIwOTQgMTEuNzgyNkwzMy45ODczIDMwLjA4MjNMMzUuNzkwNiAyOS4yMTc0TDI3LjAxMjcgMTAuOTE3N0wyNS4yMDk0IDExLjc4MjZaTTUyLjkyMTcgNDJINjBWNDBINTIuOTIxN1Y0MlpNMzMuOTg3MyAzMC4wODIzQzM3LjQ4MTEgMzcuMzY2MSA0NC44NDMzIDQyIDUyLjkyMTcgNDJWNDBDNDUuNjEyNyA0MCAzOC45NTE3IDM1LjgwNzQgMzUuNzkwNiAyOS4yMTc0TDMzLjk4NzMgMzAuMDgyM1pNOC4wNzgzIDFDMTUuMzg3MyAxIDIyLjA0ODMgNS4xOTI1NyAyNS4yMDk0IDExLjc4MjZMMjcuMDEyNyAxMC45MTc3QzIzLjUxODggMy42MzM5IDE2LjE1NjcgLTEgOC4wNzgzIC0xVjFaXCIsZmlsbDpcImJsYWNrXCIsbWFzazpcInVybCgjZXJyb3Jfb3ZlcmxheV9uYXZfcGF0aF8xX291dHNpZGVfMV8yNjY3XzE0Njg3KVwifSldfSksKDAseS5qc3hzKShcImdcIix7bWFzazpcInVybCgjZXJyb3Jfb3ZlcmxheV9uYXZfbWFzazBfMjY2N18xNDY4NylcIixjaGlsZHJlbjpbKDAseS5qc3hzKShcIm1hc2tcIix7aWQ6XCJlcnJvcl9vdmVybGF5X25hdl9wYXRoXzNfb3V0c2lkZV8yXzI2NjdfMTQ2ODdcIixtYXNrVW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLHg6XCItMVwiLHk6XCIwLjAyNDQxNDFcIix3aWR0aDpcIjYwXCIsaGVpZ2h0OlwiNDNcIixmaWxsOlwiYmxhY2tcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwicmVjdFwiLHtmaWxsOlwid2hpdGVcIix4OlwiLTFcIix5OlwiMC4wMjQ0MTQxXCIsd2lkdGg6XCI2MFwiLGhlaWdodDpcIjQzXCJ9KSwoMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNMCAxLjAyNDQxSDcuMDc4M0MxNC43NzIgMS4wMjQ0MSAyMS43ODM2IDUuNDM3NjUgMjUuMTExIDEyLjM3NDZMMzMuODg4OSAzMC42NzQzQzM3LjIxNjQgMzcuNjExMiA0NC4yMjggNDIuMDI0NCA1MS45MjE3IDQyLjAyNDRINTlIMEwwIDEuMDI0NDFaXCJ9KV19KSwoMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNMCAxLjAyNDQxSDcuMDc4M0MxNC43NzIgMS4wMjQ0MSAyMS43ODM2IDUuNDM3NjUgMjUuMTExIDEyLjM3NDZMMzMuODg4OSAzMC42NzQzQzM3LjIxNjQgMzcuNjExMiA0NC4yMjggNDIuMDI0NCA1MS45MjE3IDQyLjAyNDRINTlIMEwwIDEuMDI0NDFaXCIsZmlsbDpcInZhcigtLWJhY2tncm91bmQtY29sb3IpXCJ9KSwoMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNMCAxLjAyNDQxTDAgMC4wMjQ0MTQxSC0xVjEuMDI0NDFIMFpNMCA0Mi4wMjQ0SC0xVjQzLjAyNDRIMEwwIDQyLjAyNDRaTTMzLjg4ODkgMzAuNjc0M0wzMi45ODczIDMxLjEwNjhMMzMuODg4OSAzMC42NzQzWk0yNS4xMTEgMTIuMzc0NkwyNi4wMTI3IDExLjk0MjFMMjUuMTExIDEyLjM3NDZaTTAgMi4wMjQ0MUg3LjA3ODNWMC4wMjQ0MTQxSDBMMCAyLjAyNDQxWk01OSA0MS4wMjQ0SDBMMCA0My4wMjQ0SDU5VjQxLjAyNDRaTTEgNDIuMDI0NEwxIDEuMDI0NDFILTFMLTEgNDIuMDI0NEgxWk0yNC4yMDk0IDEyLjgwNzFMMzIuOTg3MyAzMS4xMDY4TDM0Ljc5MDYgMzAuMjQxOEwyNi4wMTI3IDExLjk0MjFMMjQuMjA5NCAxMi44MDcxWk01MS45MjE3IDQzLjAyNDRINTlWNDEuMDI0NEg1MS45MjE3VjQzLjAyNDRaTTMyLjk4NzMgMzEuMTA2OEMzNi40ODExIDM4LjM5MDUgNDMuODQzMyA0My4wMjQ0IDUxLjkyMTcgNDMuMDI0NFY0MS4wMjQ0QzQ0LjYxMjcgNDEuMDI0NCAzNy45NTE3IDM2LjgzMTggMzQuNzkwNiAzMC4yNDE4TDMyLjk4NzMgMzEuMTA2OFpNNy4wNzgzIDIuMDI0NDFDMTQuMzg3MyAyLjAyNDQxIDIxLjA0ODMgNi4yMTY5OSAyNC4yMDk0IDEyLjgwNzFMMjYuMDEyNyAxMS45NDIxQzIyLjUxODggNC42NTgzMSAxNS4xNTY3IDAuMDI0NDE0MSA3LjA3ODMgMC4wMjQ0MTQxVjIuMDI0NDFaXCIsZmlsbDpcInZhcigtLXN0cm9rZS1jb2xvcilcIixtYXNrOlwidXJsKCNlcnJvcl9vdmVybGF5X25hdl9wYXRoXzNfb3V0c2lkZV8yXzI2NjdfMTQ2ODcpXCJ9KV19KV19KX1mdW5jdGlvbiBuVihlKXt2YXIgbix0LHI9ZS5jaGlsZHJlbixvPWUub25DbG9zZSxhPWUuZm9vdGVyLGk9ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sbi5pbmRleE9mKHQpPj0wfHwob1t0XT1lW3RdKTtyZXR1cm4gb30oZSxuKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLCEobi5pbmRleE9mKHQpPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsdCkmJihvW3RdPWVbdF0pfXJldHVybiBvfShlLFtcImNoaWxkcmVuXCIsXCJvbkNsb3NlXCIsXCJmb290ZXJcIl0pO3JldHVybigwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1kaWFsb2ctY29udGFpbmVyXCIsY2hpbGRyZW46WygwLHkuanN4KShlWiwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHtcImFyaWEtbGFiZWxsZWRieVwiOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX2xhYmVsXCIsXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZGVzY1wiLGNsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktZGlhbG9nLXNjcm9sbFwiLG9uQ2xvc2U6b30saSksdD10PXtjaGlsZHJlbjpyfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKSxhXX0pfWZ1bmN0aW9uIG5xKGUpe3ZhciBuPWUuY2hpbGRyZW47cmV0dXJuKDAseS5qc3gpKGVLLHtjbGFzc05hbWU6XCJuZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXJcIixjaGlsZHJlbjpufSl9ZnVuY3Rpb24gblcoZSl7dmFyIG49ZS5jaGlsZHJlbjtyZXR1cm4oMCx5LmpzeCkoZVkse2NsYXNzTmFtZTpcIm5leHRqcy1jb250YWluZXItZXJyb3JzLWJvZHlcIixjaGlsZHJlbjpufSl9dmFyIG4kPTAsblo9ZnVuY3Rpb24oZSl7dmFyIHIsbyxhPWUuY2xhc3NOYW1lLGk9ZS5jaGlsZHJlbixsPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJjbGFzc05hbWVcIixcImNoaWxkcmVuXCJdKTtyZXR1cm4geC51c2VFZmZlY3QoZnVuY3Rpb24oKXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe2lmKCEobiQrKz4wKSl7dmFyIGU9d2luZG93LmlubmVyV2lkdGgtZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO2U+MCYmKG49ZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQsZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQ9XCJcIi5jb25jYXQoZSxcInB4XCIpKSx0PWRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3csZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz1cImhpZGRlblwifX0pLGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpezAhPT1uJCYmMD09LS1uJCYmKHZvaWQgMCE9PW4mJihkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodD1uLG49dm9pZCAwKSx2b2lkIDAhPT10JiYoZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz10LHQ9dm9pZCAwKSl9KX19LFtdKSwoMCx5LmpzeCkoXCJkaXZcIiwocj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHtcImRhdGEtbmV4dGpzLWRpYWxvZy1vdmVybGF5XCI6ITAsY2xhc3NOYW1lOmF9LGwpLG89bz17Y2hpbGRyZW46aX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChvKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkocixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobyxlKSl9KSxyKSl9O2Z1bmN0aW9uIG5ZKGUpe3ZhciBuLHQscj1lLmNoaWxkcmVuLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sbi5pbmRleE9mKHQpPj0wfHwob1t0XT1lW3RdKTtyZXR1cm4gb30oZSxuKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLCEobi5pbmRleE9mKHQpPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsdCkmJihvW3RdPWVbdF0pfXJldHVybiBvfShlLFtcImNoaWxkcmVuXCJdKTtyZXR1cm4oMCx5LmpzeCkoblosKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7fSxvKSx0PXQ9e2NoaWxkcmVuOnJ9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpfWZ1bmN0aW9uIG5YKGUpe3ZhciBuPU1hdGgubWluKGUuZXJyb3JDb3VudC1lLmFjdGl2ZUlkeC0xLDIpO3JldHVybigwLHkuanN4KShcImRpdlwiLHtcImFyaWEtaGlkZGVuXCI6ITAsY2xhc3NOYW1lOlwiZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2tcIixjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLXN0YWNrXCIsXCJkYXRhLXN0YWNrLWNvdW50XCI6bixjaGlsZHJlbjpbKDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLWxheWVyIGVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLWxheWVyLTFcIixjaGlsZHJlbjpcIjFcIn0pLCgwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1sYXllciBlcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1sYXllci0yXCIsY2hpbGRyZW46XCIyXCJ9KV19KX0pfWZ1bmN0aW9uIG5LKGUpe3ZhciBuPWUuZW52aXJvbm1lbnROYW1lO3JldHVybigwLHkuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1lbnZpcm9ubWVudC1uYW1lLWxhYmVsXCI6ITAsY2hpbGRyZW46bn0pfXZhciBuUT1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL2Vycm9ycy9kZXYtdG9vbHMtaW5kaWNhdG9yL3V0aWxzLnRzXCIpLG5HPSgwLHguZm9yd2FyZFJlZikoZnVuY3Rpb24oZSxuKXt2YXIgdD1lLnN0b3Ascj1lLmJsdXIsbz1lLnNpZGUsYT1lLnN0eWxlLGk9ZS5oZWlnaHQ7cmV0dXJuKDAseS5qc3gpKFwiZGl2XCIse3JlZjpuLFwiYXJpYS1oaWRkZW5cIjohMCxcImRhdGEtbmV4dGpzLXNjcm9sbC1mYWRlclwiOiEwLGNsYXNzTmFtZTpcIm5leHRqcy1zY3JvbGwtZmFkZXJcIixcImRhdGEtc2lkZVwiOm8sc3R5bGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7XCItLXN0b3BcIjp0LFwiLS1ibHVyXCI6cixcIi0taGVpZ2h0XCI6XCJcIi5jb25jYXQoaSxcInB4XCIpfSxhKX0pfSk7ZnVuY3Rpb24gbkooZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIG4wKGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBuSihlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBuSihlLG4pfX0oZSxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX12YXIgbjE9KDAseC5mb3J3YXJkUmVmKShmdW5jdGlvbihlLG4pe3ZhciB0LHIsbyxhLGksbCxzLGMsdSxkLGY9ZS5jaGlsZHJlbixwPWUubWVhc3VyZSxoPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJjaGlsZHJlblwiLFwibWVhc3VyZVwiXSksZz0oMCx4LnVzZVJlZikobnVsbCksbT1uMCgodD1nLHI9cCxhPShvPW4wKCgwLHgudXNlU3RhdGUpKDApLDIpKVswXSxpPW9bMV0scz0obD1uMCgoMCx4LnVzZVN0YXRlKSghMCksMikpWzBdLGM9bFsxXSwoMCx4LnVzZUVmZmVjdCkoZnVuY3Rpb24oKXtpZihyKXt2YXIgZSxuPXQuY3VycmVudDtpZihuKXt2YXIgbz1uZXcgUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24obil7dmFyIHQ9bjAobiwxKVswXS5jb250ZW50UmVjdDtjbGVhclRpbWVvdXQoZSksZT13aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2MoITEpfSwxMDApLGkodC5oZWlnaHQpfSk7cmV0dXJuIG8ub2JzZXJ2ZShuKSxmdW5jdGlvbigpe3JldHVybiBvLmRpc2Nvbm5lY3QoKX19fX0sW3JdKSxbYSxzXSksMiksdj1tWzBdLGI9bVsxXTtyZXR1cm4oMCx5LmpzeCkoXCJkaXZcIiwodT1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt9LGgpLGQ9ZD17cmVmOm4sc3R5bGU6e2hlaWdodDpiP1wiYXV0b1wiOnYsdHJhbnNpdGlvbjpcImhlaWdodCAyNTBtcyB2YXIoLS10aW1pbmctc3dpZnQpXCJ9LGNoaWxkcmVuOigwLHkuanN4KShcImRpdlwiLHtyZWY6ZyxjaGlsZHJlbjpmfSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QoZCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHUsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGQsZSkpfSksdSkpfSk7ZnVuY3Rpb24gbjIoZSl7dmFyIG49ZS5maXhlZCx0PWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJmaXhlZFwiXSk7cmV0dXJuKDAseS5qc3gpKFwiZGl2XCIsZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7XCJkYXRhLW5leHRqcy1kaWFsb2ctYmFja2Ryb3BcIjohMCxcImRhdGEtbmV4dGpzLWRpYWxvZy1iYWNrZHJvcC1maXhlZFwiOiEhbnx8dm9pZCAwfSx0KSl9ZnVuY3Rpb24gbjQoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIG41KGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX1mdW5jdGlvbiBuMyhlLG4pe3JldHVybiBuPW51bGwhPW4/bjp7fSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pLGV9ZnVuY3Rpb24gbjYoZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG40KGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG40KGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIG45KGUpe3ZhciBuPWUuZXJyb3JNZXNzYWdlLHQ9ZS5lcnJvclR5cGUscj1lLmNoaWxkcmVuLG89ZS5lcnJvckNvZGUsYT1lLmVycm9yQ291bnQsaT1lLmVycm9yLGw9ZS5kZWJ1Z0luZm8scz1lLmlzQnVpbGRFcnJvcixjPWUub25DbG9zZSx1PWUudmVyc2lvbkluZm8sZD1lLnJ1bnRpbWVFcnJvcnMsZj1lLmFjdGl2ZUlkeCxwPWUuc2V0QWN0aXZlSW5kZXgsaD1lLmlzVHVyYm9wYWNrLGc9ZS5kaWFsb2dSZXNpemVyUmVmLG09ZS5yZW5kZXJlZCx2PXZvaWQgMD09PW18fG0sYj1lLnRyYW5zaXRpb25EdXJhdGlvbk1zLHc9e1wiZGF0YS1yZW5kZXJlZFwiOnYsc3R5bGU6e1wiLS10cmFuc2l0aW9uLWR1cmF0aW9uXCI6XCJcIi5jb25jYXQoYixcIm1zXCIpfX0saj1uNih4LnVzZVN0YXRlKCEhYiksMiksaz1qWzBdLEE9alsxXSxPPXgudXNlUmVmKG51bGwpLEM9ISFvLFM9eC51c2VSZWYobnVsbCk7cmV0dXJuKDAsblEuUDUpKFMsbnVsbCx2KSwoMCx5LmpzeHMpKG5ZLG4zKG41KHt9LHcpLHtjaGlsZHJlbjpbKDAseS5qc3gpKG4yLHtmaXhlZDpzfSksKDAseS5qc3hzKShcImRpdlwiLG4zKG41KHtcImRhdGEtbmV4dGpzLWRpYWxvZy1yb290XCI6ITAsb25UcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKGUpe3ZhciBuPWUucHJvcGVydHlOYW1lLHQ9ZS50YXJnZXQ7XCJzY2FsZVwiPT09biYmdD09PVMuY3VycmVudCYmQSghMSl9LHJlZjpTfSx3KSx7Y2hpbGRyZW46WygwLHkuanN4KShuSCx7cnVudGltZUVycm9yczpkLGFjdGl2ZUlkeDpmLHNldEFjdGl2ZUluZGV4OnAsdmVyc2lvbkluZm86dSxpc1R1cmJvcGFjazpofSksKDAseS5qc3hzKShuVix7b25DbG9zZTpjLGRpYWxvZ1Jlc2l6ZXJSZWY6ZyxcImRhdGEtaGFzLWZvb3RlclwiOkMsb25TY3JvbGw6ZnVuY3Rpb24oZSl7aWYoTy5jdXJyZW50KXt2YXIgbix0LHI9KG49ZS5jdXJyZW50VGFyZ2V0LnNjcm9sbFRvcC8xNyxNYXRoLm1pbihNYXRoLm1heChuLCh0PW42KFswLDFdLDIpKVswXSksdFsxXSkpO08uY3VycmVudC5zdHlsZS5vcGFjaXR5PVN0cmluZyhyKX19LGZvb3RlcjpDJiYoMCx5LmpzeCkoblMse2Vycm9yQ29kZTpvfSksY2hpbGRyZW46WygwLHkuanN4KShuMSx7cmVmOmcsbWVhc3VyZTohayxcImRhdGEtbmV4dGpzLWRpYWxvZy1zaXplclwiOiEwLGNoaWxkcmVuOigwLHkuanN4cykoZVgse2NoaWxkcmVuOlsoMCx5LmpzeHMpKG5xLHtjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX2Vycm9yX3RpdGxlXCIsXCJkYXRhLW5leHRqcy1lcnJvci1jb2RlXCI6byxjaGlsZHJlbjpbKDAseS5qc3hzKShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1lcnJvci1sYWJlbC1ncm91cFwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkobkwse2Vycm9yVHlwZTp0fSksaS5lbnZpcm9ubWVudE5hbWUmJigwLHkuanN4KShuSyx7ZW52aXJvbm1lbnROYW1lOmkuZW52aXJvbm1lbnROYW1lfSldfSksKDAseS5qc3gpKG54LHtlcnJvcjppLGRlYnVnSW5mbzpsfSldfSksKDAseS5qc3gpKG56LHtlcnJvck1lc3NhZ2U6bn0pXX0pLCgwLHkuanN4KShuVyx7Y2hpbGRyZW46cn0pXX0pfSksKDAseS5qc3gpKG5YLHtlcnJvckNvdW50OmEsYWN0aXZlSWR4Om51bGwhPWY/ZjowfSldfSksKDAseS5qc3gpKG5HLHtyZWY6TyxzaWRlOlwidG9wXCIsc3RvcDpcIjUwJVwiLGJsdXI6XCI0cHhcIixoZWlnaHQ6NDh9KV19KSldfSkpfXZhciBuOD1cIlxcbiAgXCIuY29uY2F0KFwiXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLW92ZXJsYXldIHtcXG4gICAgcGFkZGluZzogaW5pdGlhbDtcXG4gICAgdG9wOiAxMHZoO1xcbiAgfVxcblwiLFwiXFxuICBcIikuY29uY2F0KFwiXFxuICAuZXJyb3Itb3ZlcmxheS1kaWFsb2ctY29udGFpbmVyIHtcXG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gICAgYm9yZGVyOiB2YXIoLS1uZXh0LWRpYWxvZy1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogMCAwIHZhcigtLW5leHQtZGlhbG9nLXJhZGl1cykgdmFyKC0tbmV4dC1kaWFsb2ctcmFkaXVzKTtcXG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1lbnUpO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICB9XFxuXFxuICAuZXJyb3Itb3ZlcmxheS1kaWFsb2ctc2Nyb2xsIHtcXG4gICAgb3ZlcmZsb3cteTogYXV0bztcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgfVxcblwiLFwiXFxuICBcIikuY29uY2F0KFwiXFxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtaGVhZGVyIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlciA+IGgxIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTIwKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMjQpO1xcbiAgICBmb250LXdlaWdodDogYm9sZDtcXG4gICAgbWFyZ2luOiBjYWxjKDE2cHggKiAxLjUpIDA7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10aXRsZS1oMSk7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtaGVhZGVyIHNtYWxsIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudHMtMSk7XFxuICAgIG1hcmdpbi1sZWZ0OiAxNnB4O1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlciBzbWFsbCA+IHNwYW4ge1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1tb25vc3BhY2UpO1xcbiAgfVxcbiAgLm5leHRqcy1jb250YWluZXItZXJyb3JzLWhlYWRlciA+IGRpdiA+IHNtYWxsIHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBtYXJnaW4tdG9wOiA0cHg7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtaGVhZGVyID4gcCA+IGEge1xcbiAgICBjb2xvcjogaW5oZXJpdDtcXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtaGVhZGVyXFxuICAgID4gLm5leHRqcy1jb250YWluZXItYnVpbGQtZXJyb3ItdmVyc2lvbi1zdGF0dXMge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHRvcDogMTZweDtcXG4gICAgcmlnaHQ6IDE2cHg7XFxuICB9XFxuXCIsXCJcXG4gIFwiKS5jb25jYXQoXCJcIixcIlxcblxcbiAgXCIpLmNvbmNhdChcIlxcbiAgW2RhdGEtbmV4dGpzLWVycm9yLW92ZXJsYXktbmF2XSB7XFxuICAgIC0tc3Ryb2tlLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIC0tYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFxuICAgIHdpZHRoOiAxMDAlO1xcblxcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIHotaW5kZXg6IDI7XFxuICAgIG91dGxpbmU6IG5vbmU7XFxuICAgIHRyYW5zbGF0ZTogdmFyKC0tbmV4dC1kaWFsb2ctYm9yZGVyLXdpZHRoKSB2YXIoLS1uZXh0LWRpYWxvZy1ib3JkZXItd2lkdGgpO1xcbiAgICBtYXgtd2lkdGg6IHZhcigtLW5leHQtZGlhbG9nLW1heC13aWR0aCk7XFxuXFxuICAgIC5lcnJvci1vdmVybGF5LW5vdGNoIHtcXG4gICAgICB0cmFuc2xhdGU6IGNhbGModmFyKC0tbmV4dC1kaWFsb2ctYm9yZGVyLXdpZHRoKSAqIC0xKTtcXG4gICAgICB3aWR0aDogYXV0bztcXG4gICAgICBoZWlnaHQ6IHZhcigtLW5leHQtZGlhbG9nLW5vdGNoLWhlaWdodCk7XFxuICAgICAgcGFkZGluZzogMTJweDtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrZ3JvdW5kLWNvbG9yKTtcXG4gICAgICBib3JkZXI6IHZhcigtLW5leHQtZGlhbG9nLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tc3Ryb2tlLWNvbG9yKTtcXG4gICAgICBib3JkZXItYm90dG9tOiBub25lO1xcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG5cXG4gICAgICAmW2RhdGEtc2lkZT0nbGVmdCddIHtcXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XFxuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1uZXh0LWRpYWxvZy1yYWRpdXMpIDAgMCAwO1xcblxcbiAgICAgICAgLmVycm9yLW92ZXJsYXktbm90Y2gtdGFpbCB7XFxuICAgICAgICAgIHJpZ2h0OiAtNTRweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgID4gKjpub3QoLmVycm9yLW92ZXJsYXktbm90Y2gtdGFpbCkge1xcbiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC0xMHB4O1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG5cXG4gICAgICAmW2RhdGEtc2lkZT0ncmlnaHQnXSB7XFxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICAgICAgICBib3JkZXItcmFkaXVzOiAwIHZhcigtLW5leHQtZGlhbG9nLXJhZGl1cykgMCAwO1xcblxcbiAgICAgICAgLmVycm9yLW92ZXJsYXktbm90Y2gtdGFpbCB7XFxuICAgICAgICAgIGxlZnQ6IC01NHB4O1xcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVkoMTgwZGVnKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgID4gKjpub3QoLmVycm9yLW92ZXJsYXktbm90Y2gtdGFpbCkge1xcbiAgICAgICAgICBtYXJnaW4tbGVmdDogLTEycHg7XFxuICAgICAgICB9XFxuICAgICAgfVxcblxcbiAgICAgIC5lcnJvci1vdmVybGF5LW5vdGNoLXRhaWwge1xcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgdG9wOiBjYWxjKHZhcigtLW5leHQtZGlhbG9nLWJvcmRlci13aWR0aCkgKiAtMSk7XFxuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gICAgICAgIHotaW5kZXg6IC0xO1xcbiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgKyB2YXIoLS1uZXh0LWRpYWxvZy1ib3JkZXItd2lkdGgpKTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cXG4gIEBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xcbiAgICBbZGF0YS1uZXh0anMtZXJyb3Itb3ZlcmxheS1uYXZdIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrZ3JvdW5kLWNvbG9yKTtcXG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1uZXh0LWRpYWxvZy1yYWRpdXMpIHZhcigtLW5leHQtZGlhbG9nLXJhZGl1cykgMCAwO1xcbiAgICAgIGJvcmRlcjogdmFyKC0tbmV4dC1kaWFsb2ctYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1zdHJva2UtY29sb3IpO1xcbiAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XFxuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgICB0cmFuc2xhdGU6IDAgdmFyKC0tbmV4dC1kaWFsb2ctYm9yZGVyLXdpZHRoKTtcXG4gICAgICBcXG4gICAgICAuZXJyb3Itb3ZlcmxheS1ub3RjaCB7XFxuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xcbiAgICAgICAgYm9yZGVyOiAwO1xcblxcbiAgICAgICAgJltkYXRhLXNpZGU9XFxcImxlZnRcXFwiXSwgJltkYXRhLXNpZGU9XFxcInJpZ2h0XFxcIl0ge1xcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLmVycm9yLW92ZXJsYXktbm90Y2gtdGFpbCB7XFxuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuXCIsXCJcXG4gIFwiKS5jb25jYXQoXCJcXG4gIC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfbGFiZWwge1xcbiAgICBwYWRkaW5nOiAycHggNnB4O1xcbiAgICBtYXJnaW46IDA7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbWQtMik7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXJlZC0xMDApO1xcbiAgICBmb250LXdlaWdodDogNjAwO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTIpO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcmVkLTkwMCk7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcXG4gIH1cXG5cIixcIlxcbiAgXCIpLmNvbmNhdChcIlxcbiAgLm5leHRqc19fY29udGFpbmVyX2Vycm9yc193cmFwcGVyIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgfVxcblxcbiAgLm5leHRqc19fY29udGFpbmVyX2Vycm9yc19kZXNjIHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBtYXJnaW4tbGVmdDogNHB4O1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcmVkLTkwMCk7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNik7XFxuICAgIGxldHRlci1zcGFjaW5nOiAtMC4zMnB4O1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0yNCk7XFxuICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7XFxuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG4gIH1cXG5cXG4gIC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZGVzYy50cnVuY2F0ZWQge1xcbiAgICBtYXgtaGVpZ2h0OiAyMDBweDtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIH1cXG5cXG4gIC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZ3JhZGllbnRfb3ZlcmxheSB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgYm90dG9tOiAwO1xcbiAgICBsZWZ0OiAwO1xcbiAgICByaWdodDogMDtcXG4gICAgaGVpZ2h0OiA4NXB4O1xcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoXFxuICAgICAgMTgwZGVnLFxcbiAgICAgIHJnYmEoMjUwLCAyNTAsIDI1MCwgMCkgMCUsXFxuICAgICAgdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApIDEwMCVcXG4gICAgKTtcXG4gIH1cXG5cXG4gIC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZXhwYW5kX2J1dHRvbiB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgYm90dG9tOiAxMHB4O1xcbiAgICBsZWZ0OiA1MCU7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgcGFkZGluZzogNnB4IDhweDtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xcbiAgICBib3gtc2hhZG93OlxcbiAgICAgIDBweCAycHggMnB4IHZhcigtLWNvbG9yLWdyYXktYWxwaGEtMTAwKSxcXG4gICAgICAwcHggOHB4IDhweCAtOHB4IHZhcigtLWNvbG9yLWdyYXktYWxwaGEtMTAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEzKTtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnMgZWFzZTtcXG4gIH1cXG5cXG4gIC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfZXhwYW5kX2J1dHRvbjpob3ZlciB7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMTAwKTtcXG4gIH1cXG5cIixcIlxcbiAgXCIpLmNvbmNhdChcIlxcbiAgLmVycm9yLW92ZXJsYXktdG9vbGJhciB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGdhcDogNnB4O1xcbiAgfVxcblxcbiAgLm5vZGVqcy1pbnNwZWN0b3ItYnV0dG9uLFxcbiAgLmNvcHktc3RhY2stdHJhY2UtYnV0dG9uLFxcbiAgLmRvY3MtbGluay1idXR0b24ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cXG4gICAgd2lkdGg6IHZhcigtLXNpemUtMjgpO1xcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtMjgpO1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNDAwKTtcXG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNtYWxsKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG5cXG4gICAgc3ZnIHtcXG4gICAgICB3aWR0aDogdmFyKC0tc2l6ZS0xNCk7XFxuICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTE0KTtcXG4gICAgfVxcblxcbiAgICAmOmZvY3VzIHtcXG4gICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgfVxcblxcbiAgICAmOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTEwMCk7XFxuICAgIH1cXG5cXG4gICAgJjpub3QoOmRpc2FibGVkKTphY3RpdmUge1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktYWxwaGEtMjAwKTtcXG4gICAgfVxcblxcbiAgICAmOmRpc2FibGVkIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmVycm9yLW92ZXJsYXktdG9vbGJhci1idXR0b24taWNvbiB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICB9XFxuXCIsXCJcXG5cXG4gIFtkYXRhLW5leHRqcy1lcnJvci1sYWJlbC1ncm91cF0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDhweDtcXG4gIH1cXG5cIik7ZnVuY3Rpb24gbjcoZSl7dmFyIG4sdCxyPWUuZmlsZSxvPWUubG9jYXRpb24sYT1lRSh7ZmlsZTpyLGxpbmVOdW1iZXI6bnVsbCE9KG49bnVsbD09bz92b2lkIDA6by5saW5lKT9uOjEsY29sdW1uOm51bGwhPSh0PW51bGw9PW8/dm9pZCAwOm8uY29sdW1uKT90OjB9KTtyZXR1cm4oMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmtcIjohMCxcImRhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rLWltcG9ydC10cmFjZVwiOiEwLHJvbGU6XCJsaW5rXCIsb25DbGljazphLHRpdGxlOlwiQ2xpY2sgdG8gb3BlbiBpbiB5b3VyIGVkaXRvclwiLGNoaWxkcmVuOltyLG8/XCI6XCIuY29uY2F0KG8ubGluZSxcIjpcIikuY29uY2F0KG8uY29sdW1uKTpudWxsLCgwLHkuanN4cykoXCJzdmdcIix7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixmaWxsOlwibm9uZVwiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLHN0cm9rZVdpZHRoOlwiMlwiLHN0cm9rZUxpbmVjYXA6XCJyb3VuZFwiLHN0cm9rZUxpbmVqb2luOlwicm91bmRcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDZcIn0pLCgwLHkuanN4KShcInBvbHlsaW5lXCIse3BvaW50czpcIjE1IDMgMjEgMyAyMSA5XCJ9KSwoMCx5LmpzeCkoXCJsaW5lXCIse3gxOlwiMTBcIix5MTpcIjE0XCIseDI6XCIyMVwiLHkyOlwiM1wifSldfSldfSl9ZnVuY3Rpb24gdGUoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfXZhciB0bj1mdW5jdGlvbihlKXt2YXIgbix0LHIsbyxhLGksbCxzLGMsdSxkPWUuY29udGVudCxmPXgudXNlTWVtbyhmdW5jdGlvbigpe3ZhciBlLG4sdDtyZXR1cm4gbj1mdW5jdGlvbihlKXt2YXIgbix0LHI9ZS5zaGlmdCgpO2lmKCFyKXJldHVybiBudWxsO3ZhciBvPShuPXIuc3BsaXQoXCI6XCIsMyksdD0zLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG4pfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KG4sMyl8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHRlKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHRlKGUsbil9fShuLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxhPW9bMF0saT1vWzFdLGw9b1syXSxzPU51bWJlcihpKSxjPU51bWJlcihsKSx1PSFOdW1iZXIuaXNOYU4ocykmJiFOdW1iZXIuaXNOYU4oYyk7cmV0dXJue2ZpbGVOYW1lOnU/YTpyLGxvY2F0aW9uOnU/e2xpbmU6cyxjb2x1bW46Y306dm9pZCAwfX0oZT1kLnNwbGl0KFwiXFxuXCIpKSx0PWZ1bmN0aW9uKGUpe2lmKGUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4vUmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3I6Ly50ZXN0KGUpfSl8fGUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4vSW1wb3J0IHRyYWNlIGZvciByZXF1ZXN0ZWQgbW9kdWxlOi8udGVzdChlKX0pKXtmb3IodmFyIG49W107Ly4rXFwuLisvLnRlc3QoZVtlLmxlbmd0aC0xXSkmJiFlW2UubGVuZ3RoLTFdLmluY2x1ZGVzKFwiOlwiKTspe3ZhciB0PWUucG9wKCkudHJpbSgpO24udW5zaGlmdCh0KX1yZXR1cm4gbn1yZXR1cm5bXX0oZSkse2ZpbGU6bixzb3VyY2U6ZS5qb2luKFwiXFxuXCIpLGltcG9ydFRyYWNlRmlsZXM6dH19LFtkXSkscD1mLmZpbGUsaD1mLnNvdXJjZSxnPWYuaW1wb3J0VHJhY2VGaWxlcyxtPXgudXNlTWVtbyhmdW5jdGlvbigpe3JldHVybiBlSCgpLmFuc2lUb0pzb24oaCx7anNvbjohMCx1c2VfY2xhc3NlczohMCxyZW1vdmVfZW1wdHk6ITB9KX0sW2hdKSx2PWVFKHtmaWxlOm51bGw9PXA/dm9pZCAwOnAuZmlsZU5hbWUsbGluZU51bWJlcjpudWxsIT0oaT1udWxsPT1wfHxudWxsPT0obj1wLmxvY2F0aW9uKT92b2lkIDA6bi5saW5lKT9pOjEsY29sdW1uOm51bGwhPShsPW51bGw9PXB8fG51bGw9PSh0PXAubG9jYXRpb24pP3ZvaWQgMDp0LmNvbHVtbik/bDowfSksYj17ZmlsZTpudWxsIT0ocz1udWxsPT1wP3ZvaWQgMDpwLmZpbGVOYW1lKT9zOm51bGwsbWV0aG9kTmFtZTpcIlwiLGFyZ3VtZW50czpbXSxsaW5lTnVtYmVyOm51bGwhPShjPW51bGw9PXB8fG51bGw9PShyPXAubG9jYXRpb24pP3ZvaWQgMDpyLmxpbmUpP2M6bnVsbCxjb2x1bW46bnVsbCE9KHU9bnVsbD09cHx8bnVsbD09KG89cC5sb2NhdGlvbik/dm9pZCAwOm8uY29sdW1uKT91Om51bGx9LHc9bnVsbD09Ynx8bnVsbD09KGE9Yi5maWxlKT92b2lkIDA6YS5zcGxpdChcIi5cIikucG9wKCk7cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNvZGVmcmFtZVwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiY29kZS1mcmFtZS1oZWFkZXJcIixjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImNvZGUtZnJhbWUtbGlua1wiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcImNvZGUtZnJhbWUtaWNvblwiLGNoaWxkcmVuOigwLHkuanN4KShlVCx7bGFuZzp3fSl9KSwoMCx5LmpzeCkoXCJzcGFuXCIse1wiZGF0YS10ZXh0XCI6ITAsY2hpbGRyZW46ZVMoYil9KSwoMCx5LmpzeCkoXCJidXR0b25cIix7XCJhcmlhLWxhYmVsXCI6XCJPcGVuIGluIGVkaXRvclwiLFwiZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmstc291cmNlLWZpbGVcIjohMCxvbkNsaWNrOnYsY2hpbGRyZW46KDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLWljb25cIixcImRhdGEtaWNvblwiOlwicmlnaHRcIixjaGlsZHJlbjooMCx5LmpzeCkoZXose3dpZHRoOjE2LGhlaWdodDoxNn0pfSl9KV19KX0pLCgwLHkuanN4KShcInByZVwiLHtjbGFzc05hbWU6XCJjb2RlLWZyYW1lLXByZVwiLGNoaWxkcmVuOigwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiY29kZS1mcmFtZS1saW5lc1wiLGNoaWxkcmVuOlttLm1hcChmdW5jdGlvbihlLG4pe3JldHVybigwLHkuanN4KShcInNwYW5cIix7c3R5bGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7Y29sb3I6ZS5mZz9cInZhcigtLWNvbG9yLVwiLmNvbmNhdChlLmZnLFwiKVwiKTp2b2lkIDB9LFwiYm9sZFwiPT09ZS5kZWNvcmF0aW9uP3tmb250V2VpZ2h0OjUwMH06XCJpdGFsaWNcIj09PWUuZGVjb3JhdGlvbj97Zm9udFN0eWxlOlwiaXRhbGljXCJ9OnZvaWQgMCksY2hpbGRyZW46KDAseS5qc3gpKGViLHt0ZXh0OmUuY29udGVudH0pfSxcInRlcm1pbmFsLWVudHJ5LVwiLmNvbmNhdChuKSl9KSxnLm1hcChmdW5jdGlvbihlKXtyZXR1cm4oMCx5LmpzeCkobjcse2lzU291cmNlRmlsZTohMSxmaWxlOmV9LGUpfSldfSl9KV19KX0sdHQ9ZnVuY3Rpb24oZSl7dmFyIG49ZS5zcGxpdChcIlxcblwiKTtyZXR1cm4gZVUoKShuWzFdfHxcIlwiKS5yZXBsYWNlKC9eRXJyb3I6IC8sXCJcIil9LHRyPWZ1bmN0aW9uKGUpe3ZhciBuLHQscj1lLm1lc3NhZ2Usbz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99KGUsW1wibWVzc2FnZVwiXSksYT0oMCx4LnVzZUNhbGxiYWNrKShmdW5jdGlvbigpe30sW10pLGk9RXJyb3IociksbD0oMCx4LnVzZU1lbW8pKGZ1bmN0aW9uKCl7cmV0dXJuIHR0KHIpfHxcIkZhaWxlZCB0byBjb21waWxlXCJ9LFtyXSk7cmV0dXJuKDAseS5qc3gpKG45LChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe2Vycm9yVHlwZTpcIkJ1aWxkIEVycm9yXCIsZXJyb3JNZXNzYWdlOmwsb25DbG9zZTphLGVycm9yOml9LG8pLHQ9dD17Y2hpbGRyZW46KDAseS5qc3gpKHRuLHtjb250ZW50OnJ9KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9LHRvPWZ1bmN0aW9uKGUpe3ZhciBuLHQ9ZS5mcmFtZSxyPW51bGwhPShuPXQub3JpZ2luYWxTdGFja0ZyYW1lKT9uOnQuc291cmNlU3RhY2tGcmFtZSxvPSEhdC5vcmlnaW5hbENvZGVGcmFtZSxhPWVFKG8/e2ZpbGU6ci5maWxlLGxpbmVOdW1iZXI6ci5saW5lTnVtYmVyLGNvbHVtbjpyLmNvbHVtbn06dm9pZCAwKSxpPWVTKHIpO3JldHVybiBpPygwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1lXCI6ITAsXCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWZyYW1lLW5vLXNvdXJjZVwiOiFvLFwiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZS1pZ25vcmVkXCI6dC5pZ25vcmVkLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImNhbGwtc3RhY2stZnJhbWUtbWV0aG9kLW5hbWVcIixjaGlsZHJlbjpbKDAseS5qc3gpKGViLHt0ZXh0OnIubWV0aG9kTmFtZX0pLG8mJigwLHkuanN4KShcImJ1dHRvblwiLHtvbkNsaWNrOmEsY2xhc3NOYW1lOlwib3Blbi1pbi1lZGl0b3ItYnV0dG9uXCIsXCJhcmlhLWxhYmVsXCI6XCJPcGVuIFwiLmNvbmNhdChyLm1ldGhvZE5hbWUsXCIgaW4gZWRpdG9yXCIpLGNoaWxkcmVuOigwLHkuanN4KShleix7d2lkdGg6MTYsaGVpZ2h0OjE2fSl9KSx0LmVycm9yPygwLHkuanN4KShcImJ1dHRvblwiLHtjbGFzc05hbWU6XCJzb3VyY2UtbWFwcGluZy1lcnJvci1idXR0b25cIixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IodC5yZWFzb24pfSx0aXRsZTpcIlNvdXJjZW1hcHBpbmcgZmFpbGVkLiBDbGljayB0byBsb2cgY2F1c2Ugb2YgZXJyb3IuXCIsY2hpbGRyZW46KDAseS5qc3gpKGVMLHt3aWR0aDoxNixoZWlnaHQ6MTZ9KX0pOm51bGxdfSksKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJjYWxsLXN0YWNrLWZyYW1lLWZpbGUtc291cmNlXCIsXCJkYXRhLWhhcy1zb3VyY2VcIjpvLGNoaWxkcmVuOml9KV19KTpudWxsfTtmdW5jdGlvbiB0YSgpe3JldHVybigwLHkuanN4KShcInN2Z1wiLHt3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTguNzA3MjIgMi4zOTY0MUM4LjMxNjcgMi4wMDU4OCA3LjY4MzUzIDIuMDA1ODggNy4yOTMwMSAyLjM5NjQxTDQuNDY5NzggNS4yMTk2M0wzLjkzOTQ1IDUuNzQ5OTZMNS4wMDAxMSA2LjgxMDYyTDUuNTMwNDQgNi4yODAyOUw4LjAwMDExIDMuODEwNjJMMTAuNDY5OCA2LjI4MDI5TDExLjAwMDEgNi44MTA2MkwxMi4wNjA4IDUuNzQ5OTZMMTEuNTMwNCA1LjIxOTYzTDguNzA3MjIgMi4zOTY0MVpNNS41MzA0NCA5LjcxOTYzTDUuMDAwMTEgOS4xODkzTDMuOTM5NDUgMTAuMjVMNC40Njk3OCAxMC43ODAzTDcuMjkzMDEgMTMuNjAzNUM3LjY4MzUzIDEzLjk5NCA4LjMxNjcgMTMuOTk0IDguNzA3MjIgMTMuNjAzNUwxMS41MzA0IDEwLjc4MDNMMTIuMDYwOCAxMC4yNUwxMS4wMDAxIDkuMTg5M0wxMC40Njk4IDkuNzE5NjNMOC4wMDAxMSAxMi4xODkzTDUuNTMwNDQgOS43MTk2M1pcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pfWZ1bmN0aW9uIHRpKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stY29udGFpbmVyXSB7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgbWFyZ2luLXRvcDogOHB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2staGVhZGVyXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgbWluLWhlaWdodDogdmFyKC0tc2l6ZS0yOCk7XFxuICAgIHBhZGRpbmc6IDhweCA4cHggMTJweCA0cHg7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stdGl0bGVdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDhweDtcXG5cXG4gICAgbWFyZ2luOiAwO1xcblxcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWNvdW50XSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcblxcbiAgICB3aWR0aDogdmFyKC0tc2l6ZS0yMCk7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yMCk7XFxuICAgIGdhcDogNHB4O1xcblxcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTEpO1xcbiAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0xNik7XFxuXFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMzAwKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWlnbm9yZWQtbGlzdC10b2dnbGUtYnV0dG9uXSB7XFxuICAgIGFsbDogdW5zZXQ7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGdhcDogNnB4O1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0yMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gICAgcGFkZGluZzogNHB4IDZweDtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtNnB4O1xcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDE1MG1zIGVhc2U7XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMTAwKTtcXG4gICAgfVxcblxcbiAgICAmOmZvY3VzIHtcXG4gICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgfVxcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgICB9XFxuICB9XFxuXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIHRpPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9ZnVuY3Rpb24gdGwoZSl7dmFyIG49ZS5mcmFtZXMsdD1lLmlzSWdub3JlTGlzdE9wZW4scj1lLmlnbm9yZWRGcmFtZXNUYWxseSxvPWUub25Ub2dnbGVJZ25vcmVMaXN0O3JldHVybigwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWNvbnRhaW5lclwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1oZWFkZXJcIjohMCxjaGlsZHJlbjpbKDAseS5qc3hzKShcInBcIix7XCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLXRpdGxlXCI6ITAsY2hpbGRyZW46W1wiQ2FsbCBTdGFjayBcIiwoMCx5LmpzeCkoXCJzcGFuXCIse1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1jb3VudFwiOiEwLGNoaWxkcmVuOm4ubGVuZ3RofSldfSkscj4wJiYoMCx5LmpzeHMpKFwiYnV0dG9uXCIse1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1pZ25vcmVkLWxpc3QtdG9nZ2xlLWJ1dHRvblwiOnQsb25DbGljazpvLGNoaWxkcmVuOltcIlwiLmNvbmNhdCh0P1wiSGlkZVwiOlwiU2hvd1wiLFwiIFwiKS5jb25jYXQocixcIiBpZ25vcmUtbGlzdGVkIGZyYW1lKHMpXCIpLCgwLHkuanN4KSh0YSx7fSldfSldfSksbi5tYXAoZnVuY3Rpb24oZSxuKXtyZXR1cm4hZS5pZ25vcmVkfHx0PygwLHkuanN4KSh0byx7ZnJhbWU6ZX0sbik6bnVsbH0pXX0pfXZhciB0cz1laSh0aSgpKTtmdW5jdGlvbiB0YyhlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gdHUoZSl7dmFyIG4sdCxyPWUuZnJhbWVzLG89ZS5kaWFsb2dSZXNpemVyUmVmLGE9KDAseC51c2VSZWYpKE5hTiksaT0obj0oMCx4LnVzZVN0YXRlKSghMSksdD0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG4pfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KG4sMil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHRjKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHRjKGUsbil9fShuLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxsPWlbMF0scz1pWzFdLGM9KDAseC51c2VNZW1vKShmdW5jdGlvbigpe3JldHVybiByLnJlZHVjZShmdW5jdGlvbihlLG4pe3JldHVybiBlKyArISFuLmlnbm9yZWR9LDApfSxbcl0pO3JldHVybigwLHkuanN4KSh0bCx7ZnJhbWVzOnIsaXNJZ25vcmVMaXN0T3BlbjpsLG9uVG9nZ2xlSWdub3JlTGlzdDpmdW5jdGlvbigpe3ZhciBlPW51bGw9PW8/dm9pZCAwOm8uY3VycmVudDtpZihlKXt2YXIgbj0obnVsbD09ZT92b2lkIDA6ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSkuaGVpZ2h0O2EuY3VycmVudHx8KGEuY3VycmVudD1uKSxsPyhlLnN0eWxlLmhlaWdodD1cIlwiLmNvbmNhdChhLmN1cnJlbnQsXCJweFwiKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsZnVuY3Rpb24gbigpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIixuKSxzKCExKX0pKTpzKCEwKX19LGlnbm9yZWRGcmFtZXNUYWxseTpjfSl9ZnVuY3Rpb24gdGQoKXt2YXIgZSxuLHQ9KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSkuY29sbGFwc2VkO3JldHVybigwLHkuanN4KShcInN2Z1wiLChlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1jaGV2cm9uLWljb25cIjohMCxcImRhdGEtY29sbGFwc2VkXCI6dCx3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIixmaWxsOlwibm9uZVwifSxcImJvb2xlYW5cIj09dHlwZW9mIHQ/e3N0eWxlOnt0cmFuc2Zvcm06dD92b2lkIDA6XCJyb3RhdGUoOTBkZWcpXCJ9fTp7fSksbj1uPXtjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse3N0eWxlOntmaWxsOlwidmFyKC0tY29sb3ItZm9udClcIn0sZmlsbFJ1bGU6XCJldmVub2RkXCIsZDpcIm02Ljc1IDMuOTQuNTMuNTMgMi44MjQgMi44MjNhMSAxIDAgMCAxIDAgMS40MTRMNy4yOCAxMS41M2wtLjUzLjUzTDUuNjkgMTFsLjUzLS41M0w4LjY5IDggNi4yMiA1LjUzIDUuNjkgNWwxLjA2LTEuMDZaXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlKSl9ZnVuY3Rpb24gdGYoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIHRwKGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiB0ZihlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiB0ZihlLG4pfX0oZSxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiB0aChlKXt2YXIgbj1lLnJlYWN0T3V0cHV0Q29tcG9uZW50RGlmZix0PXRwKCgwLHgudXNlU3RhdGUpKCEwKSwyKSxyPXRbMF0sbz10WzFdLGE9KDAseC51c2VNZW1vKShmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiBuLnNwbGl0KFwiXFxuXCIpLmZvckVhY2goZnVuY3Rpb24obix0KXt2YXIgcixvLGE9XCIrXCI9PT1uWzBdfHxcIi1cIj09PW5bMF0saT1cIj5cIj09PW5bMF0sbD1hfHxpLHM9bD9uWzBdOlwiXCIsYz1sP24uaW5kZXhPZihzKTotMSx1PXRwKGw/W24uc2xpY2UoMCxjKSxuLnNsaWNlKGMrMSldOltuLFwiXCJdLDIpLGQ9dVswXSxmPXVbMV07YT9lLnB1c2goKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtbGluZVwiOiEwLFwiZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZlwiOlwiK1wiPT09cz9cImFkZFwiOlwicmVtb3ZlXCIsY2hpbGRyZW46KDAseS5qc3hzKShcInNwYW5cIix7Y2hpbGRyZW46W2QsKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtbGluZS1zaWduXCI6ITAsY2hpbGRyZW46c30pLGYsXCJcXG5cIl19KX0sXCJjb21wLWRpZmZcIit0KSk6ZS5wdXNoKCgwLHkuanN4cykoXCJzcGFuXCIsKHI9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7XCJkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLWxpbmVcIjohMH0saT97XCJkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLS1kaWZmXCI6XCJlcnJvclwifTp2b2lkIDApLG89bz17Y2hpbGRyZW46W2QsKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtbGluZS1zaWduXCI6ITAsY2hpbGRyZW46c30pLGYsXCJcXG5cIl19LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHIsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobykpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobykpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sZSkpfSksciksXCJjb21wLWRpZmZcIit0KSl9KSxlfSxbbl0pO3JldHVybigwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sXCI6ITAsXCJkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLWNvbGxhcHNlXCI6cixjaGlsZHJlbjpbKDAseS5qc3gpKFwiYnV0dG9uXCIse1wiYXJpYS1leHBhbmRlZFwiOiFyLFwiYXJpYS1sYWJlbFwiOlwiY29tcGxldGUgQ29tcG9uZW50IFN0YWNrXCIsXCJkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLWNvbGxhcHNlLWJ1dHRvblwiOiEwLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbyghcil9LGNoaWxkcmVuOigwLHkuanN4KSh0ZCx7Y29sbGFwc2VkOnJ9KX0pLCgwLHkuanN4KShcInByZVwiLHtjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX2NvbXBvbmVudC1zdGFja1wiLGNoaWxkcmVuOigwLHkuanN4KShcImNvZGVcIix7Y2hpbGRyZW46YX0pfSldfSl9dmFyIHRnPVN5bWJvbC5mb3IoXCJOZXh0anNFcnJvclwiKTtmdW5jdGlvbiB0bShlKXtyZXR1cm4gZVt0Z118fG51bGx9ZnVuY3Rpb24gdHYoZSxuLHQscixvLGEsaSl7dHJ5e3ZhciBsPWVbYV0oaSkscz1sLnZhbHVlfWNhdGNoKGUpe3QoZSk7cmV0dXJufWwuZG9uZT9uKHMpOlByb21pc2UucmVzb2x2ZShzKS50aGVuKHIsbyl9ZnVuY3Rpb24gdGIoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcyx0PWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixvKXt2YXIgYT1lLmFwcGx5KG4sdCk7ZnVuY3Rpb24gaShlKXt0dihhLHIsbyxpLGwsXCJuZXh0XCIsZSl9ZnVuY3Rpb24gbChlKXt0dihhLHIsbyxpLGwsXCJ0aHJvd1wiLGUpfWkodm9pZCAwKX0pfX1mdW5jdGlvbiB0eShlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gdHgoZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfWZ1bmN0aW9uIHR3KGUsbil7dmFyIHQscixvLGE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmb1swXSl0aHJvdyBvWzFdO3JldHVybiBvWzFdfSx0cnlzOltdLG9wczpbXX0saT1PYmplY3QuY3JlYXRlKChcImZ1bmN0aW9uXCI9PXR5cGVvZiBJdGVyYXRvcj9JdGVyYXRvcjpPYmplY3QpLnByb3RvdHlwZSk7cmV0dXJuIGkubmV4dD1sKDApLGkudGhyb3c9bCgxKSxpLnJldHVybj1sKDIpLFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKGlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksaTtmdW5jdGlvbiBsKGwpe3JldHVybiBmdW5jdGlvbihzKXt2YXIgYz1bbCxzXTtpZih0KXRocm93IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7Zm9yKDtpJiYoaT0wLGNbMF0mJihhPTApKSxhOyl0cnl7aWYodD0xLHImJihvPTImY1swXT9yLnJldHVybjpjWzBdP3IudGhyb3d8fCgobz1yLnJldHVybikmJm8uY2FsbChyKSwwKTpyLm5leHQpJiYhKG89by5jYWxsKHIsY1sxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKHI9MCxvJiYoYz1bMiZjWzBdLG8udmFsdWVdKSxjWzBdKXtjYXNlIDA6Y2FzZSAxOm89YzticmVhaztjYXNlIDQ6cmV0dXJuIGEubGFiZWwrKyx7dmFsdWU6Y1sxXSxkb25lOiExfTtjYXNlIDU6YS5sYWJlbCsrLHI9Y1sxXSxjPVswXTtjb250aW51ZTtjYXNlIDc6Yz1hLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKG89KG89YS50cnlzKS5sZW5ndGg+MCYmb1tvLmxlbmd0aC0xXSkmJig2PT09Y1swXXx8Mj09PWNbMF0pKXthPTA7Y29udGludWV9aWYoMz09PWNbMF0mJighb3x8Y1sxXT5vWzBdJiZjWzFdPG9bM10pKXthLmxhYmVsPWNbMV07YnJlYWt9aWYoNj09PWNbMF0mJmEubGFiZWw8b1sxXSl7YS5sYWJlbD1vWzFdLG89YzticmVha31pZihvJiZhLmxhYmVsPG9bMl0pe2EubGFiZWw9b1syXSxhLm9wcy5wdXNoKGMpO2JyZWFrfW9bMl0mJmEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZX1jPW4uY2FsbChlLGEpfWNhdGNoKGUpe2M9WzYsZV0scj0wfWZpbmFsbHl7dD1vPTB9aWYoNSZjWzBdKXRocm93IGNbMV07cmV0dXJue3ZhbHVlOmNbMF0/Y1sxXTp2b2lkIDAsZG9uZTohMH19fX12YXIgdGo9ZnVuY3Rpb24oZSl7aWYoXCJ1c2VcImluIHgpe3ZhciBuPWUuZnJhbWVzO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIG4pdGhyb3cgRXJyb3IoXCJJbnZhcmlhbnQ6IGZyYW1lcyBtdXN0IGJlIGEgZnVuY3Rpb24gd2hlbiB0aGUgUmVhY3QgdmVyc2lvbiBoYXMgUmVhY3QudXNlLiBUaGlzIGlzIGEgYnVnIGluIE5leHQuanMuXCIpO3JldHVybiB4LnVzZShuKCkpfWlmKCFBcnJheS5pc0FycmF5KGUuZnJhbWVzKSl0aHJvdyBFcnJvcihcIkludmFyaWFudDogZnJhbWVzIG11c3QgYmUgYW4gYXJyYXkgd2hlbiB0aGUgUmVhY3QgdmVyc2lvbiBkb2VzIG5vdCBoYXZlIFJlYWN0LnVzZS4gVGhpcyBpcyBhIGJ1ZyBpbiBOZXh0LmpzLlwiKTtyZXR1cm4gZS5mcmFtZXN9O2Z1bmN0aW9uIHRrKGUpe3ZhciBuPWUuZXJyb3IsdD1lLmRpYWxvZ1Jlc2l6ZXJSZWYscj10aihuKSxvPSgwLHgudXNlTWVtbykoZnVuY3Rpb24oKXt2YXIgZSxuPXIuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiFlLmlnbm9yZWQmJiEhZS5vcmlnaW5hbENvZGVGcmFtZSYmISFlLm9yaWdpbmFsU3RhY2tGcmFtZX0pO3JldHVybiBudWxsIT0oZT1yW25dKT9lOm51bGx9LFtyXSk7cmV0dXJuKDAseS5qc3hzKSh5LkZyYWdtZW50LHtjaGlsZHJlbjpbbyYmKDAseS5qc3gpKGVxLHtzdGFja0ZyYW1lOm8ub3JpZ2luYWxTdGFja0ZyYW1lLGNvZGVGcmFtZTpvLm9yaWdpbmFsQ29kZUZyYW1lfSksci5sZW5ndGg+MCYmKDAseS5qc3gpKHR1LHtkaWFsb2dSZXNpemVyUmVmOnQsZnJhbWVzOnJ9KV19KX12YXIgdEE9XCJcXG4gIFwiLmNvbmNhdChcIlxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWxdIHtcXG4gICAgcGFkZGluZzogOHB4IDA7XFxuICAgIG1hcmdpbjogOHB4IDA7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0yMDApO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3Itc3ludGF4LWNvbnN0YW50KTtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gICAgbGluZS1oZWlnaHQ6IDEuMzNlbTsgLyogMTZweCBpbiAxMnB4IGZvbnQgc2l6ZSAqL1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLW1kLTIpO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtbGluZV0ge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBwYWRkaW5nLWxlZnQ6IDQwcHg7XFxuICAgIGxpbmUtaGVpZ2h0OiBjYWxjKDUgLyAzKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLS1kaWZmPSdlcnJvciddIHtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYW1iZXItMTAwKTtcXG4gICAgYm94LXNoYWRvdzogMnB4IDAgMCAwIHZhcigtLWNvbG9yLWFtYmVyLTkwMCkgaW5zZXQ7XFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtY29sbGFwc2UtYnV0dG9uXSB7XFxuICAgIGFsbDogdW5zZXQ7XFxuICAgIG1hcmdpbi1sZWZ0OiAxMnB4O1xcbiAgICAmOmZvY3VzIHtcXG4gICAgICBvdXRsaW5lOiBub25lO1xcbiAgICB9XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZj0nYWRkJ10ge1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmVlbi0zMDApO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtcHNldWRvLWh0bWwtbGluZS1zaWduXSB7XFxuICAgIG1hcmdpbi1sZWZ0OiBjYWxjKDI0cHggKiAtMSk7XFxuICAgIG1hcmdpbi1yaWdodDogMjRweDtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLS1kaWZmPSdhZGQnXVxcbiAgICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC1saW5lLXNpZ25dIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyZWVuLTkwMCk7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZj0ncmVtb3ZlJ10ge1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1yZWQtMzAwKTtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLS1kaWZmPSdyZW1vdmUnXVxcbiAgICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC1saW5lLXNpZ25dIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXJlZC05MDApO1xcbiAgICBtYXJnaW4tbGVmdDogY2FsYygyNHB4ICogLTEpO1xcbiAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZj0nZXJyb3InXVxcbiAgICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC1saW5lLXNpZ25dIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFtYmVyLTkwMCk7XFxuICB9XFxuICBcXG4gIFtkYXRhLW5leHRqcy1jb250YWluZXItZXJyb3JzLXBzZXVkby1odG1sLS1oaW50XSB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgZm9udC1zaXplOiAwO1xcbiAgICBoZWlnaHQ6IDA7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tdGFnLWFkamFjZW50PSdmYWxzZSddIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudHMtMSk7XFxuICB9XFxuICAubmV4dGpzX19jb250YWluZXJfZXJyb3JzX19jb21wb25lbnQtc3RhY2sge1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC1jb2xsYXBzZT0ndHJ1ZSddXFxuICAgIC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX2NvbXBvbmVudC1zdGFja1xcbiAgICBjb2RlIHtcXG4gICAgbWF4LWhlaWdodDogMTIwcHg7XFxuICAgIG1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20scmdiYSgwLDAsMCwwKSAwJSxibGFjayAxMCUpO1xcbiAgICBwYWRkaW5nLWJvdHRvbTogNDBweDtcXG4gIH1cXG4gIC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX2NvbXBvbmVudC1zdGFjayBjb2RlIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxuICAgIHNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xcbiAgICBvdmVyZmxvdy15OiBoaWRkZW47XFxuICB9XFxuICBbZGF0YS1uZXh0anMtY29udGFpbmVyLWVycm9ycy1wc2V1ZG8taHRtbC0tZGlmZl0ge1xcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogY2VudGVyO1xcbiAgfVxcbiAgLmVycm9yLW92ZXJsYXktaHlkcmF0aW9uLWVycm9yLWRpZmYtcGx1cy1pY29uIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyZWVuLTkwMCk7XFxuICB9XFxuICAuZXJyb3Itb3ZlcmxheS1oeWRyYXRpb24tZXJyb3ItZGlmZi1taW51cy1pY29uIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXJlZC05MDApO1xcbiAgfVxcblwiLFwiXFxuXCIpO2Z1bmN0aW9uIHRPKGUpe3JldHVybiBlJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sP1wic3ltYm9sXCI6dHlwZW9mIGV9ZnVuY3Rpb24gdEMoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIHRTKGUpe3ZhciBuLHQscixvLGEsaT1lLnJ1bnRpbWVFcnJvcnMsbD1lLmdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzLHM9KHI9KDAseC51c2VTdGF0ZSkoMCksbz0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KHIpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KHIsMil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHRDKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHRDKGUsbil9fShyLG8pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxjPXNbMF0sdT1zWzFdLGQ9KDAseC51c2VNZW1vKShmdW5jdGlvbigpe3JldHVybiAwPT09aS5sZW5ndGh9LFtpLmxlbmd0aF0pLGY9KDAseC51c2VNZW1vKShmdW5jdGlvbigpe3ZhciBlO3JldHVybiBudWxsIT0oZT1pW2NdKT9lOm51bGx9LFtjLGldKSxwPShuPW51bGw9PWY/dm9pZCAwOmYuZXJyb3IsdD1sLCgwLHgudXNlTWVtbykoZnVuY3Rpb24oKXtpZih2b2lkIDA9PT1uKXJldHVybiB0TDt2YXIgZSxyLG8sYT10KG4pO2lmKG51bGwhPT1hKXJldHVybntoeWRyYXRpb25XYXJuaW5nOm51bGwhPShyPWEud2FybmluZyk/cjpudWxsLG5vdGVzOm51bGwscmVhY3RPdXRwdXRDb21wb25lbnREaWZmOm51bGwhPShvPWEucmVhY3RPdXRwdXRDb21wb25lbnREaWZmKT9vOm51bGx9O2lmKCEobmcoKGU9bikubWVzc2FnZSl8fC9IeWRyYXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIHNlcnZlciByZW5kZXJlZCAodGV4dHxIVE1MKSBkaWRuJ3QgbWF0Y2ggdGhlIGNsaWVudFxcLi8udGVzdChlLm1lc3NhZ2UpfHwvQSB0cmVlIGh5ZHJhdGVkIGJ1dCBzb21lIGF0dHJpYnV0ZXMgb2YgdGhlIHNlcnZlciByZW5kZXJlZCBIVE1MIGRpZG4ndCBtYXRjaCB0aGUgY2xpZW50IHByb3BlcnRpZXMuLy50ZXN0KGUubWVzc2FnZSkpKXJldHVybiB0TDt2YXIgaT1mdW5jdGlvbihlKXt2YXIgbj1lLm1lc3NhZ2U7aWYobmcobikpe3ZhciB0PW5jKG4uc3BsaXQoXCJcXG5cXG5cIiksMikscj10WzBdLG89dFsxXSxhPSh2b2lkIDA9PT1vP1wiXCI6bykudHJpbSgpO3JldHVybnttZXNzYWdlOlwiXCI9PT1hP24udHJpbSgpOnIudHJpbSgpLGRpZmY6YSxub3RlczpudWxsfX12YXIgaT1uYyhuLnNwbGl0KFwiXCIuY29uY2F0KG5mKSksMiksbD1pWzBdLHM9aVsxXSxjPWwudHJpbSgpO2lmKHZvaWQgMCE9PXMmJnMubGVuZ3RoPjEpe3ZhciB1PVtdO3Muc3BsaXQoXCJcXG5cIikuZm9yRWFjaChmdW5jdGlvbihlKXtcIlwiIT09ZS50cmltKCkmJihlLnRyaW0oKS5zdGFydHNXaXRoKFwiYXQgXCIpfHx1LnB1c2goZSkpfSk7dmFyIGQ9bnUoYy5zcGxpdChcIlxcblxcblwiKSksZj1kWzBdLHA9ZC5zbGljZSgxKTtyZXR1cm57bWVzc2FnZTpmLGRpZmY6dS5qb2luKFwiXFxuXCIpLG5vdGVzOnAuam9pbihcIlxcblxcblwiKXx8bnVsbH19dmFyIGg9bnUoYy5zcGxpdChcIlxcblxcblwiKSk7cmV0dXJue21lc3NhZ2U6aFswXSxkaWZmOm51bGwsbm90ZXM6aC5zbGljZSgxKS5qb2luKFwiXFxuXFxuXCIpfX0obiksbD1pLm1lc3NhZ2Uscz1pLm5vdGVzLGM9aS5kaWZmO3JldHVybiBudWxsPT09bD90TDp7aHlkcmF0aW9uV2FybmluZzpsLG5vdGVzOnMscmVhY3RPdXRwdXRDb21wb25lbnREaWZmOmN9fSxbbix0XSkpO2lmKGR8fCFmKXJldHVybntpc0xvYWRpbmc6ZCxhY3RpdmVJZHg6YyxzZXRBY3RpdmVJbmRleDp1LGFjdGl2ZUVycm9yOm51bGwsZXJyb3JEZXRhaWxzOm51bGwsZXJyb3JDb2RlOm51bGwsZXJyb3JUeXBlOm51bGwsbm90ZXM6bnVsbCxoeWRyYXRpb25XYXJuaW5nOm51bGx9O3ZhciBoPWYuZXJyb3IsZz0odm9pZCAwPT09KGE9aCk/XCJ1bmRlZmluZWRcIjp0TyhhKSk9PT1cIm9iamVjdFwiJiZudWxsIT09YSYmXCJfX05FWFRfRVJST1JfQ09ERVwiaW4gYSYmXCJzdHJpbmdcIj09dHlwZW9mIGEuX19ORVhUX0VSUk9SX0NPREU/YS5fX05FWFRfRVJST1JfQ09ERToodm9pZCAwPT09YT9cInVuZGVmaW5lZFwiOnRPKGEpKT09PVwib2JqZWN0XCImJm51bGwhPT1hJiZcImRpZ2VzdFwiaW4gYSYmXCJzdHJpbmdcIj09dHlwZW9mIGEuZGlnZXN0P2EuZGlnZXN0LnNwbGl0KFwiQFwiKS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoXCJFXCIpfSk6dm9pZCAwLG09dHooaCxmLnR5cGUpLHY9cC5ub3RlcyxiPXAuaHlkcmF0aW9uV2FybmluZztyZXR1cm57aXNMb2FkaW5nOmQsYWN0aXZlSWR4OmMsc2V0QWN0aXZlSW5kZXg6dSxhY3RpdmVFcnJvcjpmLGVycm9yRGV0YWlsczpwLGVycm9yQ29kZTpnLGVycm9yVHlwZTptLG5vdGVzOnYsaHlkcmF0aW9uV2FybmluZzpifX1mdW5jdGlvbiB0RShlKXtyZXR1cm4gZS5zdGFydHNXaXRoKFwiaHR0cHM6Ly9uZXh0anMub3JnXCIpfWZ1bmN0aW9uIHRfKGUpe3ZhciBuPWUubWVzc2FnZTtyZXR1cm4oMCx5LmpzeCkoZWIse3RleHQ6bixtYXRjaGVyOnRFfSl9ZnVuY3Rpb24gdFAoZSl7dmFyIG49ZS5lcnJvcix0PVwiZW52aXJvbm1lbnROYW1lXCJpbiBuP24uZW52aXJvbm1lbnROYW1lOlwiXCIscj10P1wiWyBcIi5jb25jYXQodCxcIiBdIFwiKTpcIlwiLG89bi5tZXNzYWdlO3JldHVybiBvLnN0YXJ0c1dpdGgocikmJihvPW8uc2xpY2Uoci5sZW5ndGgpKSwoMCx5LmpzeCkoeS5GcmFnbWVudCx7Y2hpbGRyZW46KDAseS5qc3gpKGViLHt0ZXh0Om8sbWF0Y2hlcjp0RX0pfSl9ZnVuY3Rpb24gdHooZSxuKXtyZXR1cm5cInJlY292ZXJhYmxlXCI9PT1uP1wiUmVjb3ZlcmFibGUgXCIuY29uY2F0KGUubmFtZSk6XCJjb25zb2xlXCI9PT1uP1wiQ29uc29sZSBcIi5jb25jYXQoZS5uYW1lKTpcIlJ1bnRpbWUgXCIuY29uY2F0KGUubmFtZSl9dmFyIHRMPXtoeWRyYXRpb25XYXJuaW5nOm51bGwsbm90ZXM6bnVsbCxyZWFjdE91dHB1dENvbXBvbmVudERpZmY6bnVsbH07ZnVuY3Rpb24gdFQoZSl7dmFyIG4sdCxyPWUuZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHMsbz1lLnJ1bnRpbWVFcnJvcnMsYT1lLmRlYnVnSW5mbyxpPWUub25DbG9zZSxsPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJnZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlsc1wiLFwicnVudGltZUVycm9yc1wiLFwiZGVidWdJbmZvXCIsXCJvbkNsb3NlXCJdKSxzPSgwLHgudXNlUmVmKShudWxsKSxjPXRTKHtydW50aW1lRXJyb3JzOm8sZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHM6cn0pLHU9Yy5pc0xvYWRpbmcsZD1jLmVycm9yQ29kZSxmPWMuZXJyb3JUeXBlLHA9Yy5ub3RlcyxoPWMuaHlkcmF0aW9uV2FybmluZyxnPWMuYWN0aXZlSWR4LG09Yy5lcnJvckRldGFpbHMsdj1jLmFjdGl2ZUVycm9yLGI9Yy5zZXRBY3RpdmVJbmRleDtpZih1KXJldHVybigwLHkuanN4KShuWix7Y2hpbGRyZW46KDAseS5qc3gpKG4yLHt9KX0pO2lmKCF2KXJldHVybiBudWxsO3ZhciB3PXYuZXJyb3Isaj1bXCJzZXJ2ZXJcIixcImVkZ2Utc2VydmVyXCJdLmluY2x1ZGVzKHRtKHcpfHxcIlwiKTtyZXR1cm4oMCx5LmpzeHMpKG45LChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe2Vycm9yQ29kZTpkLGVycm9yVHlwZTpmLGVycm9yTWVzc2FnZTpoPygwLHkuanN4KSh0Xyx7bWVzc2FnZTpofSk6KDAseS5qc3gpKHRQLHtlcnJvcjp3fSksb25DbG9zZTpqP3ZvaWQgMDppLGRlYnVnSW5mbzphLGVycm9yOncscnVudGltZUVycm9yczpvLGFjdGl2ZUlkeDpnLHNldEFjdGl2ZUluZGV4OmIsZGlhbG9nUmVzaXplclJlZjpzfSxsKSx0PXQ9e2NoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImVycm9yLW92ZXJsYXktbm90ZXMtY29udGFpbmVyXCIsY2hpbGRyZW46W3A/KDAseS5qc3gpKHkuRnJhZ21lbnQse2NoaWxkcmVuOigwLHkuanN4KShcInBcIix7aWQ6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX25vdGVzXCIsY2xhc3NOYW1lOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX19ub3Rlc1wiLGNoaWxkcmVuOnB9KX0pOm51bGwsaD8oMCx5LmpzeCkoXCJwXCIse2lkOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX19saW5rXCIsY2xhc3NOYW1lOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX19saW5rXCIsY2hpbGRyZW46KDAseS5qc3gpKGViLHt0ZXh0OlwiU2VlIG1vcmUgaW5mbyBoZXJlOiBcIi5jb25jYXQobnApfSl9KTpudWxsXX0pLG0ucmVhY3RPdXRwdXRDb21wb25lbnREaWZmPygwLHkuanN4KSh0aCx7cmVhY3RPdXRwdXRDb21wb25lbnREaWZmOm0ucmVhY3RPdXRwdXRDb21wb25lbnREaWZmfHxcIlwifSk6bnVsbCwoMCx5LmpzeCkoeC5TdXNwZW5zZSx7ZmFsbGJhY2s6KDAseS5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZXJyb3Itc3VzcGVuZGVkXCI6ITB9KSxjaGlsZHJlbjooMCx5LmpzeCkodGsse2Vycm9yOnYsZGlhbG9nUmVzaXplclJlZjpzfSx2LmlkLnRvU3RyaW5nKCkpfSldfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX12YXIgdFI9eC5mb3J3YXJkUmVmKGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPWUub25DbGljayxhPWUuY2hpbGRyZW4saT1lLmNsYXNzTmFtZSxsPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJvbkNsaWNrXCIsXCJjaGlsZHJlblwiLFwiY2xhc3NOYW1lXCJdKTtyZXR1cm4oMCx5LmpzeCkoXCJkaXZcIiwodD1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt9LGwpLHI9cj17cmVmOm4sb25DbGljazpmdW5jdGlvbihlKXtyZXR1cm4gZS50YXJnZXQuY2xvc2VzdChcImFcIil8fGUucHJldmVudERlZmF1bHQoKSxudWxsPT1vP3ZvaWQgMDpvKCl9LGNsYXNzTmFtZTooMCxlSi5jeCkoXCJuZXh0anMtdG9hc3RcIixpKSxjaGlsZHJlbjphfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHIpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHIpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpKX0pLHQpKX0pO2Z1bmN0aW9uIHROKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiB0RChlKXt2YXIgbix0LHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjc1MCxvPShuPSgwLHgudXNlU3RhdGUpKCExKSx0PTIsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0obil8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksYS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0obiwyKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gdE4oZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gdE4oZSxuKX19KG4sdCl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLGE9b1swXSxpPW9bMV0sbD0oMCx4LnVzZVJlZikobnVsbCkscz0oMCx4LnVzZVJlZikobnVsbCk7cmV0dXJuKDAseC51c2VFZmZlY3QpKGZ1bmN0aW9uKCl7aWYocy5jdXJyZW50JiYoY2xlYXJUaW1lb3V0KHMuY3VycmVudCkscy5jdXJyZW50PW51bGwpLGUpbnVsbD09PWwuY3VycmVudCYmKGwuY3VycmVudD1EYXRlLm5vdygpKSxpKCEwKTtlbHNlIGlmKG51bGw9PT1sLmN1cnJlbnQpaSghMSk7ZWxzZXt2YXIgbj1EYXRlLm5vdygpLWwuY3VycmVudCx0PXIqTWF0aC5jZWlsKG4vciktbjt0PjA/cy5jdXJyZW50PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpKCExKSxsLmN1cnJlbnQ9bnVsbH0sdCk6KGkoITEpLGwuY3VycmVudD1udWxsKX1yZXR1cm4gZnVuY3Rpb24oKXtzLmN1cnJlbnQmJmNsZWFyVGltZW91dChzLmN1cnJlbnQpfX0sW2Uscl0pLGF9ZnVuY3Rpb24gdEIoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIHRNKGUpe3ZhciBuLHQscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxvPSgwLHgudXNlUmVmKShudWxsKSxhPShuPSgwLHgudXNlU3RhdGUpKCExKSx0PTIsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0obil8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksYS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0obiwyKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gdEIoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gdEIoZSxuKX19KG4sdCl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLGk9YVswXSxsPWFbMV07cmV0dXJuKDAseC51c2VFZmZlY3QpKGZ1bmN0aW9uKCl7aWYoZT4wKXt2YXIgbj1vLmN1cnJlbnQ/RGF0ZS5ub3coKS1vLmN1cnJlbnQ6LTE7aWYoby5jdXJyZW50PURhdGUubm93KCksIShuPD1yKSl7bCghMCk7dmFyIHQ9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtsKCExKX0scik7cmV0dXJuIGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHQpfX19fSxbZSxyXSksaX1mdW5jdGlvbiB0SShlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gdEgoZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHRJKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHRJKGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIHRGKGUpe3ZhciBuPXRIKCgwLHgudXNlU3RhdGUpKDApLDIpLHQ9blswXSxyPW5bMV07cmV0dXJuKDAseC51c2VFZmZlY3QpKGZ1bmN0aW9uKCl7dmFyIG49ZS5jdXJyZW50O2lmKG4pe3ZhciB0PW5ldyBSZXNpemVPYnNlcnZlcihmdW5jdGlvbihlKXtyKHRIKGUsMSlbMF0uY29udGVudFJlY3Qud2lkdGgpfSk7cmV0dXJuIHQub2JzZXJ2ZShuKSxmdW5jdGlvbigpe3JldHVybiB0LmRpc2Nvbm5lY3QoKX19fSxbZV0pLHR9ZnVuY3Rpb24gdFUoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIHRWKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX1mdW5jdGlvbiB0cShlLG4pe3JldHVybiBuPW51bGwhPW4/bjp7fSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpKX0pLGV9ZnVuY3Rpb24gdFcoZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPXt9LGE9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sbi5pbmRleE9mKHQpPj0wfHwob1t0XT1lW3RdKTtyZXR1cm4gb30oZSxuKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLCEobi5pbmRleE9mKHQpPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsdCkmJihvW3RdPWVbdF0pfXJldHVybiBvfWZ1bmN0aW9uIHQkKGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiB0VShlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiB0VShlLG4pfX0oZSxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiB0Wigpe3ZhciBlLG4sdD0oZT1bXCJcXG4gICAgICAgICAgW2RhdGEtbmV4dC1iYWRnZS1yb290XSB7XFxuICAgICAgICAgICAgLS10aW1pbmc6IGN1YmljLWJlemllcigwLjIzLCAwLjg4LCAwLjI2LCAwLjkyKTtcXG4gICAgICAgICAgICAtLWR1cmF0aW9uLWxvbmc6IDI1MG1zO1xcbiAgICAgICAgICAgIC0tY29sb3Itb3V0ZXItYm9yZGVyOiAjMTcxNzE3O1xcbiAgICAgICAgICAgIC0tY29sb3ItaW5uZXItYm9yZGVyOiBoc2xhKDAsIDAlLCAxMDAlLCAwLjE0KTtcXG4gICAgICAgICAgICAtLWNvbG9yLWhvdmVyLWFscGhhLXN1YnRsZTogaHNsYSgwLCAwJSwgMTAwJSwgMC4xMyk7XFxuICAgICAgICAgICAgLS1jb2xvci1ob3Zlci1hbHBoYS1lcnJvcjogaHNsYSgwLCAwJSwgMTAwJSwgMC4yKTtcXG4gICAgICAgICAgICAtLWNvbG9yLWhvdmVyLWFscGhhLWVycm9yLTI6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMjUpO1xcbiAgICAgICAgICAgIC0tbWFyay1zaXplOiBjYWxjKHZhcigtLXNpemUpIC0gdmFyKC0tc2l6ZS0yKSAqIDIpO1xcblxcbiAgICAgICAgICAgIC0tZm9jdXMtY29sb3I6IHZhcigtLWNvbG9yLWJsdWUtODAwKTtcXG4gICAgICAgICAgICAtLWZvY3VzLXJpbmc6IDJweCBzb2xpZCB2YXIoLS1mb2N1cy1jb2xvcik7XFxuXFxuICAgICAgICAgICAgJjpoYXMoW2RhdGEtbmV4dC1iYWRnZV1bZGF0YS1lcnJvcj0ndHJ1ZSddKSB7XFxuICAgICAgICAgICAgICAtLWZvY3VzLWNvbG9yOiAjZmZmO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1kaXNhYmxlZC1pY29uXSB7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDRweDtcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1uZXh0LWJhZGdlXSB7XFxuICAgICAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XFxuICAgICAgICAgICAgd2lkdGg6IHZhcigtLXNpemUpO1xcbiAgICAgICAgICAgIGhlaWdodDogdmFyKC0tc2l6ZSk7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7XFxuICAgICAgICAgICAgYm94LXNoYWRvdzpcXG4gICAgICAgICAgICAgIDAgMCAwIDFweCB2YXIoLS1jb2xvci1vdXRlci1ib3JkZXIpLFxcbiAgICAgICAgICAgICAgaW5zZXQgMCAwIDAgMXB4IHZhcigtLWNvbG9yLWlubmVyLWJvcmRlciksXFxuICAgICAgICAgICAgICAwcHggMTZweCAzMnB4IC04cHggcmdiYSgwLCAwLCAwLCAwLjI0KTtcXG4gICAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNDhweCk7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gICAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgICAgICAgc2NhbGU6IDE7XFxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgICAgICAgICB3aWxsLWNoYW5nZTogc2NhbGUsIGJveC1zaGFkb3csIHdpZHRoLCBiYWNrZ3JvdW5kO1xcbiAgICAgICAgICAgIHRyYW5zaXRpb246XFxuICAgICAgICAgICAgICBzY2FsZSB2YXIoLS1kdXJhdGlvbi1zaG9ydCkgdmFyKC0tdGltaW5nKSxcXG4gICAgICAgICAgICAgIHdpZHRoIHZhcigtLWR1cmF0aW9uLWxvbmcpIHZhcigtLXRpbWluZyksXFxuICAgICAgICAgICAgICBib3gtc2hhZG93IHZhcigtLWR1cmF0aW9uLWxvbmcpIHZhcigtLXRpbWluZyksXFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLXNob3J0KSBlYXNlO1xcblxcbiAgICAgICAgICAgICY6YWN0aXZlW2RhdGEtZXJyb3I9J2ZhbHNlJ10ge1xcbiAgICAgICAgICAgICAgc2NhbGU6IDAuOTU7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICZbZGF0YS1hbmltYXRlPSd0cnVlJ106bm90KDpob3Zlcikge1xcbiAgICAgICAgICAgICAgc2NhbGU6IDEuMDI7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICZbZGF0YS1lcnJvcj0nZmFsc2UnXTpoYXMoW2RhdGEtbmV4dC1tYXJrXTpmb2N1cy12aXNpYmxlKSB7XFxuICAgICAgICAgICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAzcHg7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICZbZGF0YS1lcnJvcj0ndHJ1ZSddIHtcXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNjYTJhMzA7XFxuICAgICAgICAgICAgICAtLWNvbG9yLWlubmVyLWJvcmRlcjogI2U1NDg0ZDtcXG5cXG4gICAgICAgICAgICAgIFtkYXRhLW5leHQtbWFya10ge1xcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ob3Zlci1hbHBoYS1lcnJvcik7XFxuICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwcHg7XFxuXFxuICAgICAgICAgICAgICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgICAgICAgICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgICAgICAgICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgJjpob3ZlciB7XFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItaG92ZXItYWxwaGEtZXJyb3ItMik7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgJltkYXRhLWVycm9yLWV4cGFuZGVkPSdmYWxzZSddW2RhdGEtZXJyb3I9J3RydWUnXSB+IFtkYXRhLWRvdF0ge1xcbiAgICAgICAgICAgICAgc2NhbGU6IDE7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgID4gZGl2IHtcXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb2xsYXBzZV06Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtaXNzdWVzXTpoYXMoW2RhdGEtaXNzdWVzLW9wZW5dOmZvY3VzLXZpc2libGUpIHtcXG4gICAgICAgICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgICAgICAgICBvdXRsaW5lLW9mZnNldDogLTFweDtcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1kb3RdIHtcXG4gICAgICAgICAgICBjb250ZW50OiAnJztcXG4gICAgICAgICAgICB3aWR0aDogdmFyKC0tc2l6ZS04KTtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUtOCk7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZjtcXG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggdmFyKC0tY29sb3Itb3V0ZXItYm9yZGVyKTtcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgICAgIHRvcDogMnB4O1xcbiAgICAgICAgICAgIHJpZ2h0OiAwcHg7XFxuICAgICAgICAgICAgc2NhbGU6IDA7XFxuICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogc2NhbGUgMjAwbXMgdmFyKC0tdGltaW5nKTtcXG4gICAgICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiB2YXIoLS1kdXJhdGlvbi1zaG9ydCk7XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtaXNzdWVzXSB7XFxuICAgICAgICAgICAgLS1wYWRkaW5nLWxlZnQ6IDhweDtcXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgICAgIGdhcDogMnB4O1xcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA4cHg7XFxuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogOHB4O1xcbiAgICAgICAgICAgIGhlaWdodDogdmFyKC0tc2l6ZS0zMik7XFxuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAycHg7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLXNob3J0KSBlYXNlO1xcblxcbiAgICAgICAgICAgICY6aGFzKFtkYXRhLWlzc3Vlcy1vcGVuXTpob3Zlcikge1xcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItaG92ZXItYWxwaGEtZXJyb3IpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAmOmhhcyhbZGF0YS1pc3N1ZXMtY29sbGFwc2VdKSB7XFxuICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiBjYWxjKHZhcigtLXBhZGRpbmctbGVmdCkgLyAyKTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgW2RhdGEtY3Jvc3NdIHtcXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZTogMHB4IC0xcHg7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWlzc3Vlcy1vcGVuXSB7XFxuICAgICAgICAgICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEzKTtcXG4gICAgICAgICAgICBjb2xvcjogd2hpdGU7XFxuICAgICAgICAgICAgd2lkdGg6IGZpdC1jb250ZW50O1xcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgICAgIGdhcDogMnB4O1xcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgICAgICAgbWFyZ2luOiAwO1xcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTM2KTtcXG4gICAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICAgICAgICAgIHotaW5kZXg6IDI7XFxuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG5cXG4gICAgICAgICAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgICAgICAgICAgb3V0bGluZTogMDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtaXNzdWVzLWNvbGxhcHNlXSB7XFxuICAgICAgICAgICAgd2lkdGg6IHZhcigtLXNpemUtMjQpO1xcbiAgICAgICAgICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yNCk7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLXNob3J0KSBlYXNlO1xcblxcbiAgICAgICAgICAgICY6aG92ZXIge1xcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItaG92ZXItYWxwaGEtZXJyb3IpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1jcm9zc10ge1xcbiAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xcbiAgICAgICAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTEyKTtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTIpO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLW5leHQtbWFya10ge1xcbiAgICAgICAgICAgIHdpZHRoOiB2YXIoLS1tYXJrLXNpemUpO1xcbiAgICAgICAgICAgIGhlaWdodDogdmFyKC0tbWFyay1zaXplKTtcXG4gICAgICAgICAgICBtYXJnaW46IDAgMnB4O1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcbiAgICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tbG9uZykgdmFyKC0tdGltaW5nKTtcXG5cXG4gICAgICAgICAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgICAgICAgICAgb3V0bGluZTogMDtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgJjpob3ZlciB7XFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ob3Zlci1hbHBoYS1zdWJ0bGUpO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBzdmcge1xcbiAgICAgICAgICAgICAgZmxleC1zaHJpbms6IDA7XFxuICAgICAgICAgICAgICB3aWR0aDogdmFyKC0tc2l6ZS00MCk7XFxuICAgICAgICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUtNDApO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtYW5pbWF0aW9uXSB7XFxuICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcXG4gICAgICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyIGNlbnRlcjtcXG4gICAgICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xcblxcbiAgICAgICAgICAgICZbZGF0YS1hbmltYXRlPSdmYWxzZSddIHtcXG4gICAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1leGl0XSxcXG4gICAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1lbnRlcl0ge1xcbiAgICAgICAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDBtcztcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgPiAqIHtcXG4gICAgICAgICAgICAgIGdyaWQtYXJlYTogMSAvIDE7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1leGl0XSB7XFxuICAgICAgICAgICAgICBhbmltYXRpb246IGZhZGVPdXQgMzAwbXMgdmFyKC0tdGltaW5nKSBmb3J3YXJkcztcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgW2RhdGEtaXNzdWVzLWNvdW50LWVudGVyXSB7XFxuICAgICAgICAgICAgICBhbmltYXRpb246IGZhZGVJbiAzMDBtcyB2YXIoLS10aW1pbmcpIGZvcndhcmRzO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtcGx1cmFsXSB7XFxuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICAgICAgICAgICZbZGF0YS1hbmltYXRlPSd0cnVlJ10ge1xcbiAgICAgICAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW4gMzAwbXMgdmFyKC0tdGltaW5nKSBmb3J3YXJkcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgLnBhdGgwIHtcXG4gICAgICAgICAgICBhbmltYXRpb246IGRyYXcwIDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgLnBhdGgxIHtcXG4gICAgICAgICAgICBhbmltYXRpb246IGRyYXcxIDEuNXMgZWFzZS1vdXQgaW5maW5pdGU7XFxuICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAwLjNzO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIC5wYXVzZWQge1xcbiAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIEBrZXlmcmFtZXMgZmFkZUluIHtcXG4gICAgICAgICAgICAwJSB7XFxuICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xcbiAgICAgICAgICAgICAgZmlsdGVyOiBibHVyKDJweCk7XFxuICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoOHB4KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgMTAwJSB7XFxuICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xcbiAgICAgICAgICAgICAgZmlsdGVyOiBibHVyKDBweCk7XFxuICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIEBrZXlmcmFtZXMgZmFkZU91dCB7XFxuICAgICAgICAgICAgMCUge1xcbiAgICAgICAgICAgICAgb3BhY2l0eTogMTtcXG4gICAgICAgICAgICAgIGZpbHRlcjogYmx1cigwcHgpO1xcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAxMDAlIHtcXG4gICAgICAgICAgICAgIG9wYWNpdHk6IDA7XFxuICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEycHgpO1xcbiAgICAgICAgICAgICAgZmlsdGVyOiBibHVyKDJweCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIEBrZXlmcmFtZXMgZHJhdzAge1xcbiAgICAgICAgICAgIDAlLFxcbiAgICAgICAgICAgIDI1JSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogLTI5LjY7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIDI1JSxcXG4gICAgICAgICAgICA1MCUge1xcbiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIDUwJSxcXG4gICAgICAgICAgICA3NSUge1xcbiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIDc1JSxcXG4gICAgICAgICAgICAxMDAlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAyOS42O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBAa2V5ZnJhbWVzIGRyYXcxIHtcXG4gICAgICAgICAgICAwJSxcXG4gICAgICAgICAgICAyMCUge1xcbiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0xMS42O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAyMCUsXFxuICAgICAgICAgICAgNTAlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICA1MCUsXFxuICAgICAgICAgICAgNzUlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICA3NSUsXFxuICAgICAgICAgICAgMTAwJSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMTEuNjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uKSB7XFxuICAgICAgICAgICAgW2RhdGEtaXNzdWVzLWNvdW50LWV4aXRdLFxcbiAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1lbnRlcl0sXFxuICAgICAgICAgICAgW2RhdGEtaXNzdWVzLWNvdW50LXBsdXJhbF0ge1xcbiAgICAgICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwbXMgIWltcG9ydGFudDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIFwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiB0Wj1mdW5jdGlvbigpe3JldHVybiB0fSx0fXZhciB0WT0oMCx4LmZvcndhcmRSZWYpKGZ1bmN0aW9uKGUsbil7dmFyIHQ9ZS5kaXNhYmxlZCxyPWUuaXNzdWVDb3VudCxvPWUuaXNEZXZCdWlsZGluZyxhPWUuaXNEZXZSZW5kZXJpbmcsaT1lLmlzQnVpbGRFcnJvcixsPWUub25UcmlnZ2VyQ2xpY2sscz1lLnRvZ2dsZUVycm9yT3ZlcmxheSxjPWUuc2NhbGUsdT10VyhlLFtcImRpc2FibGVkXCIsXCJpc3N1ZUNvdW50XCIsXCJpc0RldkJ1aWxkaW5nXCIsXCJpc0RldlJlbmRlcmluZ1wiLFwiaXNCdWlsZEVycm9yXCIsXCJvblRyaWdnZXJDbGlja1wiLFwidG9nZ2xlRXJyb3JPdmVybGF5XCIsXCJzY2FsZVwiXSksZD1yPjAsZj10JCgoMCx4LnVzZVN0YXRlKShkKSwyKSxwPWZbMF0saD1mWzFdLGc9dCQoKDAseC51c2VTdGF0ZSkoITEpLDIpLG09Z1swXSx2PWdbMV0sYj10TShyLDE1MCksdz0oMCx4LnVzZVJlZikobnVsbCksaj0oMCx4LnVzZVJlZikobnVsbCksaz10RihqKSxBPXREKG98fGEpLE89cHx8dDtyZXR1cm4oMCx4LnVzZUVmZmVjdCkoZnVuY3Rpb24oKXtoKGQpfSxbZF0pLCgwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHQtYmFkZ2Utcm9vdFwiOiEwLHN0eWxlOntcIi0tc2l6ZVwiOlwiXCIuY29uY2F0KDM2Lyh2b2lkIDA9PT1jPzE6YyksXCJweFwiKSxcIi0tZHVyYXRpb24tc2hvcnRcIjpcIlwiLmNvbmNhdCgxNTAsXCJtc1wiKSxkaXNwbGF5OnQmJighZHx8bSk/XCJub25lXCI6XCJibG9ja1wifSxjaGlsZHJlbjpbKDAseS5qc3gpKFwic3R5bGVcIix7Y2hpbGRyZW46ZWkodFooKSl9KSwoMCx5LmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHQtYmFkZ2VcIjohMCxcImRhdGEtZXJyb3JcIjpkLFwiZGF0YS1lcnJvci1leHBhbmRlZFwiOk8sXCJkYXRhLWFuaW1hdGVcIjpiLHN0eWxlOnt3aWR0aDowPT09az9cImF1dG9cIjprfSxjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse3JlZjpqLGNoaWxkcmVuOlshdCYmKDAseS5qc3gpKFwiYnV0dG9uXCIsdHEodFYoe3JlZjpmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkoZSksdD0wO3Q8ZTt0Kyspblt0XT1hcmd1bWVudHNbdF07dmFyIHI9bi5maWx0ZXIoQm9vbGVhbik7cmV0dXJuIHIubGVuZ3RoPD0xP3JbMF18fG51bGw6ZnVuY3Rpb24oZSl7dmFyIG49ITAsdD0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLGk9cltTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShhPWkubmV4dCgpKS5kb25lKTtuPSEwKXt2YXIgbD1hLnZhbHVlO1wiZnVuY3Rpb25cIj09dHlwZW9mIGw/bChlKTpsJiYobC5jdXJyZW50PWUpfX1jYXRjaChlKXt0PSEwLG89ZX1maW5hbGx5e3RyeXtufHxudWxsPT1pLnJldHVybnx8aS5yZXR1cm4oKX1maW5hbGx5e2lmKHQpdGhyb3cgb319fX0odyxuKSxcImRhdGEtbmV4dC1tYXJrXCI6ITAsXCJkYXRhLW5leHQtbWFyay1sb2FkaW5nXCI6QSxvbkNsaWNrOmx9LHUpLHtjaGlsZHJlbjooMCx5LmpzeCkodEsse2lzTG9hZGluZzpBLGlzRGV2QnVpbGRpbmc6b30pfSkpLE8mJigwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLWlzc3Vlc1wiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiYnV0dG9uXCIse1wiZGF0YS1pc3N1ZXMtb3BlblwiOiEwLFwiYXJpYS1sYWJlbFwiOlwiT3BlbiBpc3N1ZXMgb3ZlcmxheVwiLG9uQ2xpY2s6cyxjaGlsZHJlbjpbdCYmKDAseS5qc3gpKFwiZGl2XCIse1wiZGF0YS1kaXNhYmxlZC1pY29uXCI6ITAsY2hpbGRyZW46KDAseS5qc3gpKHRRLHt9KX0pLCgwLHkuanN4KSh0WCx7YW5pbWF0ZTpiLFwiZGF0YS1pc3N1ZXMtY291bnQtYW5pbWF0aW9uXCI6ITAsY2hpbGRyZW46cn0sciksXCIgXCIsKDAseS5qc3hzKShcImRpdlwiLHtjaGlsZHJlbjpbXCJJc3N1ZVwiLHI+MSYmKDAseS5qc3gpKFwic3BhblwiLHtcImFyaWEtaGlkZGVuXCI6ITAsXCJkYXRhLWlzc3Vlcy1jb3VudC1wbHVyYWxcIjohMCxcImRhdGEtYW5pbWF0ZVwiOmImJjI9PT1yLGNoaWxkcmVuOlwic1wifSldfSldfSksIWkmJigwLHkuanN4KShcImJ1dHRvblwiLHtcImRhdGEtaXNzdWVzLWNvbGxhcHNlXCI6ITAsXCJhcmlhLWxhYmVsXCI6XCJDb2xsYXBzZSBpc3N1ZXMgYmFkZ2VcIixvbkNsaWNrOmZ1bmN0aW9uKCl7dmFyIGU7dD92KCEwKTpoKCExKSxudWxsPT0oZT13LmN1cnJlbnQpfHxlLmZvY3VzKCl9LGNoaWxkcmVuOigwLHkuanN4KSh0Ryx7XCJkYXRhLWNyb3NzXCI6ITB9KX0pXX0pXX0pfSksKDAseS5qc3gpKFwiZGl2XCIse1wiYXJpYS1oaWRkZW5cIjohMCxcImRhdGEtZG90XCI6ITB9KV19KX0pO2Z1bmN0aW9uIHRYKGUpe3ZhciBuPWUuY2hpbGRyZW4sdD1lLmFuaW1hdGUscj10VyhlLFtcImNoaWxkcmVuXCIsXCJhbmltYXRlXCJdKTtyZXR1cm4oMCx5LmpzeHMpKFwiZGl2XCIsdHEodFYoe30scikse1wiZGF0YS1hbmltYXRlXCI6dm9pZCAwPT09dHx8dCxjaGlsZHJlbjpbKDAseS5qc3gpKFwiZGl2XCIse1wiYXJpYS1oaWRkZW5cIjohMCxcImRhdGEtaXNzdWVzLWNvdW50LWV4aXRcIjohMCxjaGlsZHJlbjpuLTF9KSwoMCx5LmpzeCkoXCJkaXZcIix7XCJkYXRhLWlzc3Vlcy1jb3VudFwiOiEwLFwiZGF0YS1pc3N1ZXMtY291bnQtZW50ZXJcIjohMCxjaGlsZHJlbjpufSldfSkpfWZ1bmN0aW9uIHRLKGUpe3ZhciBuPWUuaXNMb2FkaW5nLHQ9ZS5pc0RldkJ1aWxkaW5nP1wicmdiYSgyNTUsMjU1LDI1NSwwLjcpXCI6XCJ3aGl0ZVwiO3JldHVybigwLHkuanN4cykoXCJzdmdcIix7d2lkdGg6XCI0MFwiLGhlaWdodDpcIjQwXCIsdmlld0JveDpcIjAgMCA0MCA0MFwiLGZpbGw6XCJub25lXCIsXCJkYXRhLW5leHQtbWFyay1sb2FkaW5nXCI6bixjaGlsZHJlbjpbKDAseS5qc3hzKShcImdcIix7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDguNSwgMTMpXCIsY2hpbGRyZW46WygwLHkuanN4KShcInBhdGhcIix7Y2xhc3NOYW1lOm4/XCJwYXRoMFwiOlwicGF1c2VkXCIsZDpcIk0xMy4zIDE1LjIgTDIuMzQgMSBWMTIuNlwiLGZpbGw6XCJub25lXCIsc3Ryb2tlOlwidXJsKCNuZXh0X2xvZ29fcGFpbnQwX2xpbmVhcl8xMzU3XzEwODUzKVwiLHN0cm9rZVdpZHRoOlwiMS44NlwiLG1hc2s6XCJ1cmwoI25leHRfbG9nb19tYXNrMClcIixzdHJva2VEYXNoYXJyYXk6XCIyOS42XCIsc3Ryb2tlRGFzaG9mZnNldDpcIjI5LjZcIn0pLCgwLHkuanN4KShcInBhdGhcIix7Y2xhc3NOYW1lOm4/XCJwYXRoMVwiOlwicGF1c2VkXCIsZDpcIk0xMS44MjUgMS41IFYxMy4xXCIsc3Ryb2tlV2lkdGg6XCIxLjg2XCIsc3Ryb2tlOlwidXJsKCNuZXh0X2xvZ29fcGFpbnQxX2xpbmVhcl8xMzU3XzEwODUzKVwiLHN0cm9rZURhc2hhcnJheTpcIjExLjZcIixzdHJva2VEYXNob2Zmc2V0OlwiMTEuNlwifSldfSksKDAseS5qc3hzKShcImRlZnNcIix7Y2hpbGRyZW46WygwLHkuanN4cykoXCJsaW5lYXJHcmFkaWVudFwiLHtpZDpcIm5leHRfbG9nb19wYWludDBfbGluZWFyXzEzNTdfMTA4NTNcIix4MTpcIjkuOTU1NTVcIix5MTpcIjExLjEyMjZcIix4MjpcIjE1LjQ3NzhcIix5MjpcIjE3Ljk2NzFcIixncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwic3RvcFwiLHtzdG9wQ29sb3I6dH0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiMC42MDQwNzJcIixzdG9wQ29sb3I6dCxzdG9wT3BhY2l0eTpcIjBcIn0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiMVwiLHN0b3BDb2xvcjp0LHN0b3BPcGFjaXR5OlwiMFwifSldfSksKDAseS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIse2lkOlwibmV4dF9sb2dvX3BhaW50MV9saW5lYXJfMTM1N18xMDg1M1wiLHgxOlwiMTEuODIyMlwiLHkxOlwiMS40MDAzOVwiLHgyOlwiMTEuNzkxXCIseTI6XCI5LjYyNTQyXCIsZ3JhZGllbnRVbml0czpcInVzZXJTcGFjZU9uVXNlXCIsY2hpbGRyZW46WygwLHkuanN4KShcInN0b3BcIix7c3RvcENvbG9yOnR9KSwoMCx5LmpzeCkoXCJzdG9wXCIse29mZnNldDpcIjFcIixzdG9wQ29sb3I6dCxzdG9wT3BhY2l0eTpcIjBcIn0pXX0pLCgwLHkuanN4cykoXCJtYXNrXCIse2lkOlwibmV4dF9sb2dvX21hc2swXCIsY2hpbGRyZW46WygwLHkuanN4KShcInJlY3RcIix7d2lkdGg6XCIxMDAlXCIsaGVpZ2h0OlwiMTAwJVwiLGZpbGw6XCJ3aGl0ZVwifSksKDAseS5qc3gpKFwicmVjdFwiLHt3aWR0aDpcIjVcIixoZWlnaHQ6XCIxLjVcIixmaWxsOlwiYmxhY2tcIn0pXX0pXX0pXX0pfWZ1bmN0aW9uIHRRKCl7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIse3dpZHRoOlwiMTJcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTIgMTJcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMy45ODA3MSAxLjEyNUwxLjEyNSAzLjk4MDcxTDEuMTI1IDguMDE5MjlMMy45ODA3MSAxMC44NzVIOC4wMTkyOUwxMC44NzUgOC4wMTkyOVYzLjk4MDcxTDguMDE5MjkgMS4xMjVIMy45ODA3MVpNMy44MjUzOCAwQzMuNjI2NDcgMCAzLjQzNTcgMC4wNzkwMTc2IDMuMjk1MDUgMC4yMTk2N0wwLjIxOTY3IDMuMjk1MDVDMC4wNzkwMTc2IDMuNDM1NyAwIDMuNjI2NDcgMCAzLjgyNTM4VjguMTc0NjJDMCA4LjM3MzUzIDAuMDc5MDE3OCA4LjU2NDMgMC4yMTk2NyA4LjcwNDk1TDMuMjk1MDUgMTEuNzgwM0MzLjQzNTcgMTEuOTIxIDMuNjI2NDcgMTIgMy44MjUzOCAxMkg4LjE3NDYyQzguMzczNTMgMTIgOC41NjQzIDExLjkyMSA4LjcwNDk1IDExLjc4MDNMMTEuNzgwMyA4LjcwNDk1QzExLjkyMSA4LjU2NDMgMTIgOC4zNzM1MyAxMiA4LjE3NDYyVjMuODI1MzhDMTIgMy42MjY0NyAxMS45MjEgMy40MzU3IDExLjc4MDMgMy4yOTUwNUw4LjcwNDk1IDAuMjE5NjdDOC41NjQzIDAuMDc5MDE3NyA4LjM3MzUzIDAgOC4xNzQ2MiAwSDMuODI1MzhaTTYuNTYyNSAyLjgxMjVWMy4zNzVWNlY2LjU2MjVINS40Mzc1VjZWMy4zNzVWMi44MTI1SDYuNTYyNVpNNiA5QzYuNDE0MjEgOSA2Ljc1IDguNjY0MjEgNi43NSA4LjI1QzYuNzUgNy44MzU3OSA2LjQxNDIxIDcuNSA2IDcuNUM1LjU4NTc5IDcuNSA1LjI1IDcuODM1NzkgNS4yNSA4LjI1QzUuMjUgOC42NjQyMSA1LjU4NTc5IDkgNiA5WlwiLGZpbGw6XCIjRUFFQUVBXCJ9KX0pfWZ1bmN0aW9uIHRHKGUpe3JldHVybigwLHkuanN4KShcInN2Z1wiLHRxKHRWKHt3aWR0aDpcIjEyXCIsaGVpZ2h0OlwiMTJcIix2aWV3Qm94OlwiMCAwIDE0IDE0XCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHtjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMy4wODg4OSAxMS44Mzg0TDIuNjI0ODYgMTIuMzAyNEwxLjY5Njc4IDExLjM3NDRMMi4xNjA4MiAxMC45MTAzTDYuMDcxNzggNi45OTkzN0wyLjE2MDgyIDMuMDg4NDFMMS42OTY3OCAyLjYyNDM3TDIuNjI0ODYgMS42OTYyOUwzLjA4ODg5IDIuMTYwMzNMNi45OTk4NiA2LjA3MTI5TDEwLjkxMDggMi4xNjAzM0wxMS4zNzQ5IDEuNjk2MjlMMTIuMzAyOSAyLjYyNDM3TDExLjgzODkgMy4wODg0MUw3LjkyNzkzIDYuOTk5MzdMMTEuODM4OSAxMC45MTAzTDEyLjMwMjkgMTEuMzc0NEwxMS4zNzQ5IDEyLjMwMjRMMTAuOTEwOCAxMS44Mzg0TDYuOTk5ODYgNy45Mjc0NEwzLjA4ODg5IDExLjgzODRaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9KSl9dmFyIHRKPV9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2hvb2tzL3VzZS1kZWxheWVkLXJlbmRlci50c1wiKSx0MD1fX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL2Vycm9ycy9kZXYtdG9vbHMtaW5kaWNhdG9yL2Rldi10b29scy1pbmZvL2Rldi10b29scy1pbmZvLnRzeFwiKTtmdW5jdGlvbiB0MShlKXt2YXIgbix0O3JldHVybigwLHkuanN4cykodDAueCwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt0aXRsZTpcIlR1cmJvcGFja1wiLGxlYXJuTW9yZUxpbms6XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS90dXJib3BhY2tcIn0sZSksdD10PXtjaGlsZHJlbjpbKDAseS5qc3hzKShcImFydGljbGVcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tYXJ0aWNsZVwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYXJhZ3JhcGhcIixjaGlsZHJlbjpbXCJUdXJib3BhY2sgaXMgYW4gaW5jcmVtZW50YWwgYnVuZGxlciBvcHRpbWl6ZWQgZm9yIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQsIHdyaXR0ZW4gaW4gUnVzdCwgYW5kIGJ1aWx0IGludG8gTmV4dC5qcy4gVHVyYm9wYWNrIGNhbiBiZSB1c2VkIGluIE5leHQuanMgaW4gYm90aCB0aGVcIixcIiBcIiwoMCx5LmpzeCkoXCJjb2RlXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGVcIixjaGlsZHJlbjpcInBhZ2VzXCJ9KSxcIiBhbmRcIixcIiBcIiwoMCx5LmpzeCkoXCJjb2RlXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGVcIixjaGlsZHJlbjpcImFwcFwifSksXCIgZGlyZWN0b3JpZXMgZm9yIGZhc3RlciBsb2NhbCBkZXZlbG9wbWVudC5cIl19KSwoMCx5LmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYXJhZ3JhcGhcIixjaGlsZHJlbjpbXCJUbyBlbmFibGUgVHVyYm9wYWNrLCB1c2UgdGhlXCIsXCIgXCIsKDAseS5qc3gpKFwiY29kZVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlXCIsY2hpbGRyZW46XCItLXR1cmJvcGFja1wifSksXCIgZmxhZyB3aGVuIHJ1bm5pbmcgdGhlIE5leHQuanMgZGV2ZWxvcG1lbnQgc2VydmVyLlwiXX0pXX0pLCgwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWNvbnRhaW5lclwiLGNoaWxkcmVuOigwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9ja1wiLGNoaWxkcmVuOlsoMCx5LmpzeCkoZTMse2FjdGlvbkxhYmVsOlwiQ29weSBOZXh0LmpzIFR1cmJvcGFjayBDb21tYW5kXCIsc3VjY2Vzc0xhYmVsOlwiTmV4dC5qcyBUdXJib3BhY2sgQ29tbWFuZCBDb3BpZWRcIixjb250ZW50OlwiLS10dXJib3BhY2tcIixjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb3B5LWJ1dHRvblwifSksKDAseS5qc3gpKFwicHJlXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stcHJlXCIsY2hpbGRyZW46KDAseS5qc3hzKShcImNvZGVcIix7Y2hpbGRyZW46WygwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmVcIixjaGlsZHJlbjpcIiAgXCJ9KSwoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1saW5lXCIsY2hpbGRyZW46XCJ7XCJ9KSwoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stbGluZVwiLGNoaWxkcmVuOltcIiAgXCIsKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24ta2V5XCIsY2hpbGRyZW46J1wic2NyaXB0c1wiJ30pLFwiOiBcIixcIntcIl19KSwoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stbGluZSBkZXYtdG9vbHMtaW5mby1oaWdobGlnaHRcIixjaGlsZHJlbjpbXCIgICAgXCIsKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24ta2V5XCIsY2hpbGRyZW46J1wiZGV2XCInfSksXCI6XCIsXCIgXCIsKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24tdmFsdWVcIixjaGlsZHJlbjonXCJuZXh0IGRldiAtLXR1cmJvcGFja1wiJ30pLFwiLFwiXX0pLCgwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1saW5lXCIsY2hpbGRyZW46W1wiICAgIFwiLCgwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1qc29uLWtleVwiLGNoaWxkcmVuOidcImJ1aWxkXCInfSksXCI6XCIsXCIgXCIsKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24tdmFsdWVcIixjaGlsZHJlbjonXCJuZXh0IGJ1aWxkXCInfSksXCIsXCJdfSksKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmVcIixjaGlsZHJlbjpbXCIgICAgXCIsKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24ta2V5XCIsY2hpbGRyZW46J1wic3RhcnRcIid9KSxcIjpcIixcIiBcIiwoMCx5LmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stanNvbi12YWx1ZVwiLGNoaWxkcmVuOidcIm5leHQgc3RhcnRcIid9KSxcIixcIl19KSwoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stbGluZVwiLGNoaWxkcmVuOltcIiAgICBcIiwoMCx5LmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGUtYmxvY2stanNvbi1rZXlcIixjaGlsZHJlbjonXCJsaW50XCInfSksXCI6XCIsXCIgXCIsKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWpzb24tdmFsdWVcIixjaGlsZHJlbjonXCJuZXh0IGxpbnRcIid9KV19KSwoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZS1ibG9jay1saW5lXCIsY2hpbGRyZW46XCIgIH1cIn0pLCgwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmVcIixjaGlsZHJlbjpcIn1cIn0pLCgwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmVcIixjaGlsZHJlbjpcIiAgXCJ9KV19KX0pXX0pfSldfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX1mdW5jdGlvbiB0MihlKXt2YXIgbj1lLnJvdXRlclR5cGU7cmV0dXJuKDAseS5qc3hzKShcImFydGljbGVcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tYXJ0aWNsZVwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYXJhZ3JhcGhcIixjaGlsZHJlbjpbXCJUaGUgcGF0aFwiLFwiIFwiLCgwLHkuanN4KShcImNvZGVcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZVwiLGNoaWxkcmVuOndpbmRvdy5sb2NhdGlvbi5wYXRobmFtZX0pLFwiIFwiLCdpcyBtYXJrZWQgYXMgXCJzdGF0aWNcIiBzaW5jZSBpdCB3aWxsIGJlIHByZXJlbmRlcmVkIGR1cmluZyB0aGUgYnVpbGQgdGltZS4nXX0pLCgwLHkuanN4cykoXCJwXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLXBhcmFncmFwaFwiLGNoaWxkcmVuOltcIldpdGggU3RhdGljIFJlbmRlcmluZywgcm91dGVzIGFyZSByZW5kZXJlZCBhdCBidWlsZCB0aW1lLCBvciBpbiB0aGUgYmFja2dyb3VuZCBhZnRlclwiLFwiIFwiLCgwLHkuanN4KShcImFcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tbGlua1wiLGhyZWY6XCJwYWdlc1wiPT09bj9cImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL3BhZ2VzL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vZGF0YS1mZXRjaGluZy9pbmNyZW1lbnRhbC1zdGF0aWMtcmVnZW5lcmF0aW9uXCI6XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9kYXRhLWZldGNoaW5nL2luY3JlbWVudGFsLXN0YXRpYy1yZWdlbmVyYXRpb25cIix0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub29wZW5lciBub3JlZmVycmVyXCIsY2hpbGRyZW46XCJkYXRhIHJldmFsaWRhdGlvblwifSksXCIuXCJdfSksKDAseS5qc3gpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYXJhZ3JhcGhcIixjaGlsZHJlbjpcIlN0YXRpYyByZW5kZXJpbmcgaXMgdXNlZnVsIHdoZW4gYSByb3V0ZSBoYXMgZGF0YSB0aGF0IGlzIG5vdCBwZXJzb25hbGl6ZWQgdG8gdGhlIHVzZXIgYW5kIGNhbiBiZSBrbm93biBhdCBidWlsZCB0aW1lLCBzdWNoIGFzIGEgc3RhdGljIGJsb2cgcG9zdCBvciBhIHByb2R1Y3QgcGFnZS5cIn0pXX0pfWZ1bmN0aW9uIHQ0KGUpe3ZhciBuPWUucm91dGVyVHlwZTtyZXR1cm4oMCx5LmpzeHMpKFwiYXJ0aWNsZVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1hcnRpY2xlXCIsY2hpbGRyZW46WygwLHkuanN4cykoXCJwXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLXBhcmFncmFwaFwiLGNoaWxkcmVuOltcIlRoZSBwYXRoXCIsXCIgXCIsKDAseS5qc3gpKFwiY29kZVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlXCIsY2hpbGRyZW46d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfSksXCIgXCIsJ2lzIG1hcmtlZCBhcyBcImR5bmFtaWNcIiBzaW5jZSBpdCB3aWxsIGJlIHJlbmRlcmVkIGZvciBlYWNoIHVzZXIgYXQnLFwiIFwiLCgwLHkuanN4KShcInN0cm9uZ1wiLHtjaGlsZHJlbjpcInJlcXVlc3QgdGltZVwifSksXCIuXCJdfSksKDAseS5qc3gpKFwicFwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1wYXJhZ3JhcGhcIixjaGlsZHJlbjpcIkR5bmFtaWMgcmVuZGVyaW5nIGlzIHVzZWZ1bCB3aGVuIGEgcm91dGUgaGFzIGRhdGEgdGhhdCBpcyBwZXJzb25hbGl6ZWQgdG8gdGhlIHVzZXIgb3IgaGFzIGluZm9ybWF0aW9uIHRoYXQgY2FuIG9ubHkgYmUga25vd24gYXQgcmVxdWVzdCB0aW1lLCBzdWNoIGFzIGNvb2tpZXMgb3IgdGhlIFVSTCdzIHNlYXJjaCBwYXJhbXMuXCJ9KSxcInBhZ2VzXCI9PT1uPygwLHkuanN4cykoXCJwXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLXBhZ3JhcGhcIixjaGlsZHJlbjpbXCJFeHBvcnRpbmcgdGhlXCIsXCIgXCIsKDAseS5qc3gpKFwiYVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1saW5rXCIsaHJlZjpcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL3BhZ2VzL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vZGF0YS1mZXRjaGluZy9nZXQtc2VydmVyLXNpZGUtcHJvcHNcIix0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub29wZW5lciBub3JlZmVycmVyXCIsY2hpbGRyZW46XCJnZXRTZXJ2ZXJTaWRlUHJvcHNcIn0pLFwiIFwiLFwiZnVuY3Rpb24gd2lsbCBvcHQgdGhlIHJvdXRlIGludG8gZHluYW1pYyByZW5kZXJpbmcuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgdGhlIHNlcnZlciBvbiBldmVyeSByZXF1ZXN0LlwiXX0pOigwLHkuanN4cykoXCJwXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLXBhcmFncmFwaFwiLGNoaWxkcmVuOltcIkR1cmluZyByZW5kZXJpbmcsIGlmIGFcIixcIiBcIiwoMCx5LmpzeCkoXCJhXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWxpbmtcIixocmVmOlwiaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcmVuZGVyaW5nL3NlcnZlci1jb21wb25lbnRzI2R5bmFtaWMtYXBpc1wiLHRhcmdldDpcIl9ibGFua1wiLHJlbDpcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIixjaGlsZHJlbjpcIkR5bmFtaWMgQVBJXCJ9KSxcIiBcIixcIm9yIGFcIixcIiBcIiwoMCx5LmpzeCkoXCJhXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWxpbmtcIixocmVmOlwiaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvZnVuY3Rpb25zL2ZldGNoXCIsdGFyZ2V0OlwiX2JsYW5rXCIscmVsOlwibm9vcGVuZXIgbm9yZWZlcnJlclwiLGNoaWxkcmVuOlwiZmV0Y2hcIn0pLFwiIFwiLFwib3B0aW9uIG9mXCIsXCIgXCIsKDAseS5qc3gpKFwiY29kZVwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1jb2RlXCIsY2hpbGRyZW46XCJ7IGNhY2hlOiAnbm8tc3RvcmUnIH1cIn0pLFwiIFwiLFwiaXMgZGlzY292ZXJlZCwgTmV4dC5qcyB3aWxsIHN3aXRjaCB0byBkeW5hbWljYWxseSByZW5kZXJpbmcgdGhlIHdob2xlIHJvdXRlLlwiXX0pXX0pfXZhciB0NT17cGFnZXM6e3N0YXRpYzpcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL3BhZ2VzL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcmVuZGVyaW5nL3N0YXRpYy1zaXRlLWdlbmVyYXRpb25cIixkeW5hbWljOlwiaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvcGFnZXMvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yZW5kZXJpbmcvc2VydmVyLXNpZGUtcmVuZGVyaW5nXCJ9LGFwcDp7c3RhdGljOlwiaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcmVuZGVyaW5nL3NlcnZlci1jb21wb25lbnRzI3N0YXRpYy1yZW5kZXJpbmctZGVmYXVsdFwiLGR5bmFtaWM6XCJodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yZW5kZXJpbmcvc2VydmVyLWNvbXBvbmVudHMjZHluYW1pYy1yZW5kZXJpbmdcIn19O2Z1bmN0aW9uIHQzKGUpe3ZhciBuLHQscj1lLnJvdXRlVHlwZSxvPWUucm91dGVyVHlwZSxhPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb30oZSxbXCJyb3V0ZVR5cGVcIixcInJvdXRlclR5cGVcIl0pLGk9XCJTdGF0aWNcIj09PXIsbD1pP3Q1W29dLnN0YXRpYzp0NVtvXS5keW5hbWljO3JldHVybigwLHkuanN4KSh0MC54LChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3RpdGxlOlwiXCIuY29uY2F0KHIsXCIgUm91dGVcIiksbGVhcm5Nb3JlTGluazpsfSxhKSx0PXQ9e2NoaWxkcmVuOmk/KDAseS5qc3gpKHQyLHtyb3V0ZXJUeXBlOm99KTooMCx5LmpzeCkodDQse3JvdXRlclR5cGU6b30pfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX1mdW5jdGlvbiB0Nigpe3JldHVybigwLHkuanN4KShcInN2Z1wiLHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAyMCAyMFwiLGZpbGw6XCJub25lXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsOlwiY3VycmVudENvbG9yXCIsZmlsbFJ1bGU6XCJldmVub2RkXCIsZDpcIm05LjcgMy43MzYuMDQ1LS4yMzZoLjUxbC4wNDQuMjM2YTIuMDI0IDIuMDI0IDAgMCAwIDEuMzM0IDEuNTM2Yy4xOS4wNjYuMzc1LjE0My41NTQuMjMuNjE4LjMwMSAxLjM5OC4yOSAyLjAzLS4xNDNsLjE5OS0uMTM2LjM2LjM2MS0uMTM1LjE5OWEyLjAyNCAyLjAyNCAwIDAgMC0uMTQzIDIuMDNjLjA4Ny4xNzkuMTY0LjM2NC4yMy41NTQuMjI0LjY1Ljc4MyAxLjE5MiAxLjUzNiAxLjMzNGwuMjM2LjA0NHYuNTFsLS4yMzYuMDQ0YTIuMDI0IDIuMDI0IDAgMCAwLTEuNTM2IDEuMzM0IDQuOTUgNC45NSAwIDAgMS0uMjMuNTU0IDIuMDI0IDIuMDI0IDAgMCAwIC4xNDMgMi4wM2wuMTM2LjE5OS0uMzYxLjM2LS4xOTktLjEzNWEyLjAyNCAyLjAyNCAwIDAgMC0yLjAzLS4xNDNjLS4xNzkuMDg3LS4zNjQuMTY0LS41NTQuMjNhMi4wMjQgMi4wMjQgMCAwIDAtMS4zMzQgMS41MzZsLS4wNDQuMjM2aC0uNTFsLS4wNDQtLjIzNmEyLjAyNCAyLjAyNCAwIDAgMC0xLjMzNC0xLjUzNiA0Ljk1MiA0Ljk1MiAwIDAgMS0uNTU0LS4yMyAyLjAyNCAyLjAyNCAwIDAgMC0yLjAzLjE0M2wtLjE5OS4xMzYtLjM2LS4zNjEuMTM1LS4xOTlhMi4wMjQgMi4wMjQgMCAwIDAgLjE0My0yLjAzIDQuOTU4IDQuOTU4IDAgMCAxLS4yMy0uNTU0IDIuMDI0IDIuMDI0IDAgMCAwLTEuNTM2LTEuMzM0bC0uMjM2LS4wNDR2LS41MWwuMjM2LS4wNDRhMi4wMjQgMi4wMjQgMCAwIDAgMS41MzYtMS4zMzQgNC45NiA0Ljk2IDAgMCAxIC4yMy0uNTU0IDIuMDI0IDIuMDI0IDAgMCAwLS4xNDMtMi4wM2wtLjEzNi0uMTk5LjM2MS0uMzYuMTk5LjEzNWEyLjAyNCAyLjAyNCAwIDAgMCAyLjAzLjE0M2MuMTc5LS4wODcuMzY0LS4xNjQuNTU0LS4yM2EyLjAyNCAyLjAyNCAwIDAgMCAxLjMzNC0xLjUzNlpNOC41IDJoM2wuMjc0IDEuNDZjLjAzNC4xODUuMTcuMzMzLjM0OC4zOTQuMjQ4LjA4Ni40OS4xODYuNzIyLjMuMTcuMDgyLjM3LjA3NC41MjYtLjAzM2wxLjIyNi0uODM5IDIuMTIyIDIuMTIyLS44NCAxLjIyNmEuNTI0LjUyNCAwIDAgMC0uMDMyLjUyNmMuMTE0LjIzMy4yMTQuNDc0LjMuNzIyLjA2MS4xNzcuMjEuMzE0LjM5NC4zNDhMMTggOC41djNsLTEuNDYuMjc0YS41MjQuNTI0IDAgMCAwLS4zOTQuMzQ4IDYuNDcgNi40NyAwIDAgMS0uMy43MjIuNTI0LjUyNCAwIDAgMCAuMDMzLjUyNmwuODM5IDEuMjI2LTIuMTIyIDIuMTIyLTEuMjI2LS44NGEuNTI0LjUyNCAwIDAgMC0uNTI2LS4wMzIgNi40NzcgNi40NzcgMCAwIDEtLjcyMi4zLjUyNC41MjQgMCAwIDAtLjM0OC4zOTRMMTEuNSAxOGgtM2wtLjI3NC0xLjQ2YS41MjQuNTI0IDAgMCAwLS4zNDgtLjM5NCA2LjQ3NyA2LjQ3NyAwIDAgMS0uNzIyLS4zLjUyNC41MjQgMCAwIDAtLjUyNi4wMzNsLTEuMjI2LjgzOS0yLjEyMi0yLjEyMi44NC0xLjIyNmEuNTI0LjUyNCAwIDAgMCAuMDMyLS41MjYgNi40NTMgNi40NTMgMCAwIDEtLjMtLjcyMi41MjQuNTI0IDAgMCAwLS4zOTQtLjM0OEwyIDExLjV2LTNsMS40Ni0uMjc0YS41MjQuNTI0IDAgMCAwIC4zOTQtLjM0OGMuMDg2LS4yNDguMTg2LS40OS4zLS43MjJhLjUyNC41MjQgMCAwIDAtLjAzMy0uNTI2bC0uODM5LTEuMjI2IDIuMTIyLTIuMTIyIDEuMjI2Ljg0YS41MjQuNTI0IDAgMCAwIC41MjYuMDMyIDYuNDYgNi40NiAwIDAgMSAuNzIyLS4zLjUyNC41MjQgMCAwIDAgLjM0OC0uMzk0TDguNSAyWm0zIDhhMS41IDEuNSAwIDEgMS0zIDAgMS41IDEuNSAwIDAgMSAzIDBabTEuNSAwYTMgMyAwIDEgMS02IDAgMyAzIDAgMCAxIDYgMFpcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pfSl9ZnVuY3Rpb24gdDkoKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLGZpbGw6XCJub25lXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsOlwiY3VycmVudENvbG9yXCIsZmlsbFJ1bGU6XCJldmVub2RkXCIsZDpcIm0uMTkxIDIuMDYzLjU2LjQ5OCAxMy41IDEyIC41NjEuNDk4Ljk5Ny0xLjEyMS0uNTYtLjQ5OC0xLjgxLTEuNjA4IDIuODgtMy4zNDJ2LS45OGwtMy4yMDQtMy43MkMxMC42NDUuOTIzIDYuMzY1LjY4NiAzLjU5NCAzLjA4TDEuNzQ4IDEuNDQgMS4xODguOTQuMTkgMi4wNjNaTTE0Ljc2MSA4bC0yLjQ0MiAyLjgzNi0xLjY1LTEuNDY2YTMuMDAxIDMuMDAxIDAgMCAwLTQuMzQyLTMuODZsLTEuNi0xLjQyMmE1LjI1MyA1LjI1MyAwIDAgMSA3LjI1MS42ODJMMTQuNzYgOFpNNy41MjYgNi41NzZsMS45NDIgMS43MjdhMS40OTkgMS40OTkgMCAwIDAtMS45NDItMS43MjdabS03Ljg0NS45MzUgMS43MjItMiAxLjEzNy45NzlMMS4yNCA4bDIuNzgyIDMuMjNBNS4yNSA1LjI1IDAgMCAwIDkuOSAxMi43MDNsLjU0IDEuNGE2Ljc1MSA2Ljc1MSAwIDAgMS03LjU1NS0xLjg5MkwtLjMxOCA4LjQ5di0uOThaXCIsY2xpcFJ1bGU6XCJldmVub2RkXCJ9KX0pfWZ1bmN0aW9uIHQ4KCl7cmV0dXJuKDAseS5qc3hzKShcInN2Z1wiLHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIyMFwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIsY2hpbGRyZW46WygwLHkuanN4KShcImdcIix7Y2xpcFBhdGg6XCJ1cmwoI2xpZ2h0X2ljb25fY2xpcF9wYXRoKVwiLGNoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZmlsbDpcImN1cnJlbnRDb2xvclwiLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNOC43NS43NVYwaC0xLjV2MmgxLjVWLjc1Wk0zLjI2IDQuMzJsLS41My0uNTMtLjM1NC0uMzUzLS41My0uNTMgMS4wNi0xLjA2MS41My41My4zNTQuMzU0LjUzLjUzLTEuMDYgMS4wNlptOC40Mi0xLjA2LjUzLS41My4zNTMtLjM1NC41My0uNTMgMS4wNjEgMS4wNi0uNTMuNTMtLjM1NC4zNTQtLjUzLjUzLTEuMDYtMS4wNlpNOCAxMS4yNWEzLjI1IDMuMjUgMCAxIDAgMC02LjUgMy4yNSAzLjI1IDAgMCAwIDAgNi41Wm0wIDEuNWE0Ljc1IDQuNzUgMCAxIDAgMC05LjUgNC43NSA0Ljc1IDAgMCAwIDAgOS41Wm02LTUuNWgydjEuNWgtMnYtMS41Wm0tMTMuMjUgMEgwdjEuNWgydi0xLjVILjc1Wm0xLjYyIDUuMzItLjUzLjUzIDEuMDYgMS4wNi41My0uNTMuMzU0LS4zNTMuNTMtLjUzLTEuMDYtMS4wNjEtLjUzLjUzLS4zNTQuMzU0Wm0xMC4yIDEuMDYuNTMuNTMgMS4wNi0xLjA2LS41My0uNTMtLjM1NC0uMzU0LS41My0uNTMtMS4wNiAxLjA2LjUzLjUzLjM1My4zNTRaTTguNzUgMTR2MmgtMS41di0yaDEuNVpcIixjbGlwUnVsZTpcImV2ZW5vZGRcIn0pfSksKDAseS5qc3gpKFwiZGVmc1wiLHtjaGlsZHJlbjooMCx5LmpzeCkoXCJjbGlwUGF0aFwiLHtpZDpcImxpZ2h0X2ljb25fY2xpcF9wYXRoXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsOlwiY3VycmVudENvbG9yXCIsZDpcIk0wIDBoMTZ2MTZIMHpcIn0pfSl9KV19KX1mdW5jdGlvbiB0Nygpe3JldHVybigwLHkuanN4KShcInN2Z1wiLHtcImRhdGEtdGVzdGlkXCI6XCJnZWlzdC1pY29uXCIsaGVpZ2h0OlwiMTZcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLHdpZHRoOlwiMTZcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMS41IDguMDAwMDVDMS41IDUuNTMwODkgMi45OTE5OCAzLjQwOTMyIDUuMTIzNDkgMi40ODg4OUM0Ljg4MTM2IDMuMTk4NTggNC43NSAzLjk1OTM2IDQuNzUgNC43NTAxQzQuNzUgOC42MTYwOSA3Ljg4NDAxIDExLjc1MDEgMTEuNzUgMTEuNzUwMUMxMS44OTk1IDExLjc1MDEgMTIuMDQ4IDExLjc0NTQgMTIuMTk1MyAxMS43MzYxQzExLjA5NTUgMTMuMTE2NCA5LjQwMDQ3IDE0LjAwMDEgNy41IDE0LjAwMDFDNC4xODYyOSAxNC4wMDAxIDEuNSAxMS4zMTM4IDEuNSA4LjAwMDA1Wk02LjQxNzA2IDAuNTc3NzU5QzIuNzg3ODQgMS4xMDMxIDAgNC4yMjUzNiAwIDguMDAwMDVDMCAxMi4xNDIyIDMuMzU3ODYgMTUuNTAwMSA3LjUgMTUuNTAwMUMxMC41Nzk4IDE1LjUwMDEgMTMuMjI0NCAxMy42NDM4IDE0LjM3OTIgMTAuOTkyMUwxMy40NTg4IDkuOTc5N0MxMi45MjE4IDEwLjE1NSAxMi4zNDc4IDEwLjI1MDEgMTEuNzUgMTAuMjUwMUM4LjcxMjQzIDEwLjI1MDEgNi4yNSA3Ljc4NzY3IDYuMjUgNC43NTAxQzYuMjUgMy42MzQzMSA2LjU4MTQ2IDIuNTk4MjMgNy4xNTExMSAxLjczMjE3TDYuNDE3MDYgMC41Nzc3NTlaTTEzLjI1IDFWMS43NVYyLjc1TDE0LjI1IDIuNzVIMTVWNC4yNUgxNC4yNUgxMy4yNVY1LjI1VjZIMTEuNzVWNS4yNVY0LjI1SDEwLjc1TDEwIDQuMjVWMi43NUgxMC43NUwxMS43NSAyLjc1VjEuNzVWMUgxMy4yNVpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pfWZ1bmN0aW9uIHJlKCl7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIse3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHN0cm9rZUxpbmVqb2luOlwicm91bmRcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGw6XCJjdXJyZW50Q29sb3JcIixmaWxsUnVsZTpcImV2ZW5vZGRcIixkOlwiTTAgMmExIDEgMCAwIDEgMS0xaDE0YTEgMSAwIDAgMSAxIDF2OC41YTEgMSAwIDAgMS0xIDFIOC43NXYzaDEuNzVWMTZoLTV2LTEuNWgxLjc1di0zSDFhMSAxIDAgMCAxLTEtMVYyWm0xLjUuNVYxMGgxM1YyLjVoLTEzWlwiLGNsaXBSdWxlOlwiZXZlbm9kZFwifSl9KX1mdW5jdGlvbiBybihlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gcnQoZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHJuKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHJuKGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfXZhciBycj1wcm9jZXNzLmVudi5fX05FWFRfREVWX0lORElDQVRPUl9QT1NJVElPTnx8XCJib3R0b20tbGVmdFwiLHJvPVwiX19uZXh0anNfaGlkZV9zaG9ydGN1dFwiO2Z1bmN0aW9uIHJhKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiByaShlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8cnMoZSxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBybChlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gcmEoZSl9KGUpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8cnMoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIHJzKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHJhKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHJhKGUsbil9fWZ1bmN0aW9uIHJjKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgLnNob3J0Y3V0LXJlY29yZGVyIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGdhcDogOHB4O1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLXNhbnMpO1xcblxcbiAgICAuc2hvcnRjdXQtcmVjb3JkZXItYnV0dG9uIHtcXG4gICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgZ2FwOiA0cHg7XFxuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIHZhcigtLWNvbG9yLWdyYXktNTAwKTtcXG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWxnKTtcXG4gICAgICBwYWRkaW5nOiA2cHggOHB4O1xcbiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICAgICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMTUwbXMgdmFyKC0tdGltaW5nLXN3aWZ0KTtcXG5cXG4gICAgICAmW2RhdGEtaGFzLXNob3J0Y3V0PSd0cnVlJ10ge1xcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS1hbHBoYS00MDApO1xcblxcbiAgICAgICAgJjpob3ZlciB7XFxuICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS01MDApO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG5cXG4gICAgICAmOmhvdmVyIHtcXG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS02MDApO1xcbiAgICAgIH1cXG5cXG4gICAgICAmOjpwbGFjZWhvbGRlciB7XFxuICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICAgIH1cXG5cXG4gICAgICAmW2RhdGEtcHJpc3RpbmU9J2ZhbHNlJ106OnBsYWNlaG9sZGVyIHtcXG4gICAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcXG4gICAgICB9XFxuXFxuICAgICAgJjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGtiZCB7XFxuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1zYW5zKTtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XFxuICAgICAgbWluLXdpZHRoOiAyMHB4O1xcbiAgICAgIGhlaWdodDogMjBweDtcXG4gICAgICBmb250LXNpemU6IDE0cHg7XFxuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcblxcbiAgICAgICZbZGF0YS1zeW1ib2w9J2ZhbHNlJ10ge1xcbiAgICAgICAgcGFkZGluZzogMCA0cHg7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIC5zaG9ydGN1dC1yZWNvcmRlci1jbGVhci1idXR0b24ge1xcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgICB3aWR0aDogMjBweDtcXG4gICAgICBoZWlnaHQ6IDIwcHg7XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDE1MG1zIHZhcigtLXRpbWluZy1zd2lmdCk7XFxuXFxuICAgICAgJjpob3ZlciB7XFxuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTMwMCk7XFxuICAgICAgfVxcblxcbiAgICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgICB9XFxuXFxuICAgICAgc3ZnIHtcXG4gICAgICAgIHdpZHRoOiAxNHB4O1xcbiAgICAgICAgaGVpZ2h0OiAxNHB4O1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblxcbiAgLnNob3J0Y3V0LXJlY29yZGVyLWtleXMge1xcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGdhcDogMnB4O1xcbiAgfVxcblxcbiAgLnNob3J0Y3V0LXJlY29yZGVyLXRvb2x0aXAge1xcbiAgICAtLWdhcDogOHB4O1xcbiAgICAtLWJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWJhY2tncm91bmQpO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBwYWRkaW5nOiA0cHggOHB4O1xcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgYm90dG9tOiBjYWxjKDEwMCUgKyB2YXIoLS1nYXApKTtcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgICBzY2FsZTogMC45NjtcXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgIHRyYW5zaXRpb246XFxuICAgICAgb3BhY2l0eSAxNTBtcyB2YXIoLS10aW1pbmctc3dpZnQpLFxcbiAgICAgIHNjYWxlIDE1MG1zIHZhcigtLXRpbWluZy1zd2lmdCk7XFxuXFxuICAgICZbZGF0YS1zaG93PSd0cnVlJ10ge1xcbiAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgc2NhbGU6IDE7XFxuICAgIH1cXG5cXG4gICAgc3ZnIHtcXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xcbiAgICAgIGJvdHRvbTogLTZweDtcXG4gICAgICBsZWZ0OiA1MCU7XFxuICAgIH1cXG5cXG4gICAgLnNob3J0Y3V0LXJlY29yZGVyLXN0YXR1cyB7XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIGdhcDogNnB4O1xcbiAgICB9XFxuXFxuICAgIC5zaG9ydGN1dC1yZWNvcmRlci1zdGF0dXMtaWNvbiB7XFxuICAgICAgd2lkdGg6IDdweDtcXG4gICAgICBoZWlnaHQ6IDdweDtcXG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAgICAgZmxleC1zaHJpbms6IDA7XFxuICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItcmVkLTcwMCk7XFxuXFxuICAgICAgJltkYXRhLXN1Y2Nlc3M9J3RydWUnXSB7XFxuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmVlbi03MDApO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcblwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiByYz1mdW5jdGlvbigpe3JldHVybiB0fSx0fXZhciBydT1bXCJNZXRhXCIsXCJDb250cm9sXCIsXCJDdHJsXCIsXCJBbHRcIixcIk9wdGlvblwiLFwiU2hpZnRcIl07ZnVuY3Rpb24gcmQoZSl7dmFyIG49ZS52YWx1ZSx0PWUub25DaGFuZ2Uscj1yaSgoMCx4LnVzZVN0YXRlKSghMSksMiksbz1yWzBdLGE9clsxXSxpPXJpKCgwLHgudXNlU3RhdGUpKG51bGwhPW4/bjpbXSksMiksbD1pWzBdLHM9aVsxXSxjPXJpKCgwLHgudXNlU3RhdGUpKCExKSwyKSx1PWNbMF0sZD1jWzFdLGY9KDAseC51c2VSZWYpKG51bGwpLHA9KDAseC51c2VSZWYpKG51bGwpLGg9ISFufHxsLmxlbmd0aD4wO2Z1bmN0aW9uIGcoKXt2YXIgZTtudWxsPT0oZT1wLmN1cnJlbnQpfHxlLmZvY3VzKCkscyhbXSksZCghMSksc2V0VGltZW91dChmdW5jdGlvbigpe2EoITApfSksdChudWxsKX1mdW5jdGlvbiBtKCl7dmFyIGU7Zi5jdXJyZW50JiZjbGVhclRpbWVvdXQoZi5jdXJyZW50KSxhKCEwKSxudWxsPT0oZT1wLmN1cnJlbnQpfHxlLmZvY3VzKCl9cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJzaG9ydGN1dC1yZWNvcmRlclwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiYnV0dG9uXCIse2NsYXNzTmFtZTpcInNob3J0Y3V0LXJlY29yZGVyLWJ1dHRvblwiLHJlZjpwLG9uQ2xpY2s6bSxvbkZvY3VzOm0sb25CbHVyOmZ1bmN0aW9uKCl7ZCghMSksYSghMSl9LG9uS2V5RG93bjpmdW5jdGlvbihlKXtlLnRhcmdldD09PXAuY3VycmVudCYmXCJUYWJcIiE9PWUua2V5JiYoZi5jdXJyZW50JiZjbGVhclRpbWVvdXQoZi5jdXJyZW50KSxvfHxhKCEwKSwzIT09bC5sZW5ndGgmJihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxzKGZ1bmN0aW9uKHQpe2lmKHQuaW5jbHVkZXMoZS5rZXkpKXJldHVybiB0O2lmKCFydS5pbmNsdWRlcyhlLmtleSkpe3ZhciByPXQuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiFydS5pbmNsdWRlcyhlKX0pO2lmKC0xIT09cil7dmFyIG89cmwodCk7cmV0dXJuIG9bcl09ZS5rZXksbihvKSxvfXZhciBhPXJsKHQpLmNvbmNhdChbZS5rZXldKTtyZXR1cm4gbihhKSxhfWZvcih2YXIgaT1ybCh0KSxsPXJ1LmluZGV4T2YoZS5rZXkpLHM9MCxjPTA7YzxpLmxlbmd0aDtjKyspaWYocnUuaW5jbHVkZXMoaVtjXSkpe2lmKGw8cnUuaW5kZXhPZihpW2NdKSl7cz1jO2JyZWFrfXM9YysxfWVsc2UgYnJlYWs7cmV0dXJuIGkuc3BsaWNlKHMsMCxlLmtleSksbihpKSxpfSkpKTtmdW5jdGlvbiBuKGUpe2YuY3VycmVudD13aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2QoITApLHQoZS5qb2luKFwiK1wiKSksZi5jdXJyZW50PXdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YSghMSl9LDFlMyl9LDE4MCl9fSxcImRhdGEtaGFzLXNob3J0Y3V0XCI6aCxcImRhdGEtc2hvcnRjdXQtcmVjb3JkZXJcIjpcInRydWVcIixjaGlsZHJlbjpbaD8oMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwic2hvcnRjdXQtcmVjb3JkZXIta2V5c1wiLGNoaWxkcmVuOmwubWFwKGZ1bmN0aW9uKGUpe3JldHVybigwLHkuanN4KShycCx7Y2hpbGRyZW46ZX0sZSl9KX0pOlwiUmVjb3JkIFNob3J0Y3V0XCIsaCYmKDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNob3J0Y3V0LXJlY29yZGVyLWNsZWFyLWJ1dHRvblwiLHJvbGU6XCJidXR0b25cIixvbkNsaWNrOmcsb25Gb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKX0sb25LZXlEb3duOmZ1bmN0aW9uKGUpeyhcIkVudGVyXCI9PT1lLmtleXx8XCIgXCI9PT1lLmtleSkmJihnKCksZS5zdG9wUHJvcGFnYXRpb24oKSl9LFwiYXJpYS1sYWJlbFwiOlwiQ2xlYXIgc2hvcnRjdXRcIix0YWJJbmRleDowLGNoaWxkcmVuOigwLHkuanN4KShyZyx7fSl9KV19KSwoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNob3J0Y3V0LXJlY29yZGVyLXRvb2x0aXBcIixcImRhdGEtc2hvd1wiOm8sY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwic2hvcnRjdXQtcmVjb3JkZXItc3RhdHVzXCIsY2hpbGRyZW46WygwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJzaG9ydGN1dC1yZWNvcmRlci1zdGF0dXMtaWNvblwiLFwiZGF0YS1zdWNjZXNzXCI6dX0pLHU/XCJTaG9ydGN1dCBzZXRcIjpcIlJlY29yZGluZ1wiXX0pLCgwLHkuanN4KShyZix7fSldfSldfSl9ZnVuY3Rpb24gcmYoKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix7ZmlsbDpcIm5vbmVcIixoZWlnaHQ6XCI2XCIsdmlld0JveDpcIjAgMCAxNCA2XCIsd2lkdGg6XCIxNFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2Q6XCJNMTMuODI4NCAwSDAuMTcxNTdDMC43MDIwMDMgMCAxLjIxMDcxIDAuMjEwNzE0IDEuNTg1NzggMC41ODU3ODdMNS41ODU3OCA0LjU4NTc5QzYuMzY2ODMgNS4zNjY4NCA3LjYzMzE2IDUuMzY2ODMgOC40MTQyMSA0LjU4NTc5TDEyLjQxNDIgMC41ODU3ODZDMTIuNzg5MyAwLjIxMDcxNCAxMy4yOTggMCAxMy44Mjg0IDBaXCIsZmlsbDpcInZhcigtLWJhY2tncm91bmQpXCJ9KX0pfWZ1bmN0aW9uIHJwKGUpe3ZhciBuPWUuY2hpbGRyZW4sdD1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZVwiTWV0YVwiOnJldHVybigwLHkuanN4KShyaCx7fSk7Y2FzZVwiQWx0XCI6Y2FzZVwiT3B0aW9uXCI6cmV0dXJuXCLijKVcIjtjYXNlXCJDb250cm9sXCI6Y2FzZVwiQ3RybFwiOnJldHVyblwiQ3RybFwiO2Nhc2VcIlNoaWZ0XCI6cmV0dXJuXCLih6dcIjtjYXNlXCJFbnRlclwiOnJldHVyblwi4o+OXCI7Y2FzZVwiRXNjYXBlXCI6Y2FzZVwiRXNjXCI6cmV0dXJuXCJFc2NcIjtjYXNlXCIgXCI6Y2FzZVwiU3BhY2VcIjpjYXNlXCJTcGFjZWJhclwiOnJldHVyblwiU3BhY2VcIjtjYXNlXCJBcnJvd1VwXCI6cmV0dXJuXCLihpFcIjtjYXNlXCJBcnJvd0Rvd25cIjpyZXR1cm5cIuKGk1wiO2Nhc2VcIkFycm93TGVmdFwiOnJldHVyblwi4oaQXCI7Y2FzZVwiQXJyb3dSaWdodFwiOnJldHVyblwi4oaSXCI7Y2FzZVwiVGFiXCI6cmV0dXJuXCJUYWJcIjtjYXNlXCJCYWNrc3BhY2VcIjpyZXR1cm5cIuKMq1wiO2Nhc2VcIkRlbGV0ZVwiOnJldHVyblwi4oymXCI7ZGVmYXVsdDppZigxPT09bi5sZW5ndGgpcmV0dXJuIG4udG9VcHBlckNhc2UoKTtyZXR1cm4gbn19KG4pLHI9XCJzdHJpbmdcIj09dHlwZW9mIHQmJjE9PT10Lmxlbmd0aDtyZXR1cm4oMCx5LmpzeCkoXCJrYmRcIix7XCJkYXRhLXN5bWJvbFwiOnIsY2hpbGRyZW46dH0pfWZ1bmN0aW9uIHJoKCl7dmFyIGU9cmkoKDAseC51c2VTdGF0ZSkoXCJcXHhhMFwiKSwyKSxuPWVbMF0sdD1lWzFdLHI9cnYoL15NYWMvKXx8cnYoL15pUGhvbmUvKXx8cnYoL15pUGFkLyl8fHJ2KC9eTWFjLykmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cz4xO3JldHVybigwLHgudXNlRWZmZWN0KShmdW5jdGlvbigpeyEwPT09ciYmdChcIuKMmFwiKSwhMT09PXImJnQoXCJDdHJsXCIpfSxbcl0pLCgwLHkuanN4KShcInNwYW5cIix7c3R5bGU6e21pbldpZHRoOlwiMWVtXCIsZGlzcGxheTpcImlubGluZS1ibG9ja1wifSxjaGlsZHJlbjpufSl9ZnVuY3Rpb24gcmcoKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix7aGVpZ2h0OlwiMTZcIixzdHJva2VMaW5lam9pbjpcInJvdW5kXCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLHdpZHRoOlwiMTZcIixjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTIuNDY5NyAxMy41MzAzTDEzIDE0LjA2MDdMMTQuMDYwNyAxM0wxMy41MzAzIDEyLjQ2OTdMOS4wNjA2NSA3Ljk5OTk5TDEzLjUzMDMgMy41MzAzMkwxNC4wNjA3IDIuOTk5OTlMMTMgMS45MzkzM0wxMi40Njk3IDIuNDY5NjZMNy45OTk5OSA2LjkzOTMzTDMuNTMwMzIgMi40Njk2NkwyLjk5OTk5IDEuOTM5MzNMMS45MzkzMyAyLjk5OTk5TDIuNDY5NjYgMy41MzAzMkw2LjkzOTMzIDcuOTk5OTlMMi40Njk2NiAxMi40Njk3TDEuOTM5MzMgMTNMMi45OTk5OSAxNC4wNjA3TDMuNTMwMzIgMTMuNTMwM0w3Ljk5OTk5IDkuMDYwNjVMMTIuNDY5NyAxMy41MzAzWlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSl9dmFyIHJtPWVpKHJjKCkpO2Z1bmN0aW9uIHJ2KGUpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJm51bGwhPXdpbmRvdy5uYXZpZ2F0b3I/ZS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0pOnZvaWQgMH1mdW5jdGlvbiByYihlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gcnkoZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfWZ1bmN0aW9uIHJ4KGUsbil7cmV0dXJuIG49bnVsbCE9bj9uOnt9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QobikpLmZvckVhY2goZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSksZX1mdW5jdGlvbiBydyhlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99ZnVuY3Rpb24gcmooZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHJiKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHJiKGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIHJrKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgLnByZWZlcmVuY2VzLWNvbnRhaW5lciB7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcblxcbiAgQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSB7XFxuICAgIC5wcmVmZXJlbmNlcy1jb250YWluZXIge1xcbiAgICAgIHdpZHRoOiA0ODBweDtcXG4gICAgfVxcbiAgfVxcblxcbiAgLnByZWZlcmVuY2Utc2VjdGlvbjpmaXJzdC1jaGlsZCB7XFxuICAgIHBhZGRpbmctdG9wOiAwO1xcbiAgfVxcblxcbiAgLnByZWZlcmVuY2Utc2VjdGlvbiB7XFxuICAgIHBhZGRpbmc6IDEycHggMDtcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDI0cHg7XFxuICB9XFxuXFxuICAucHJlZmVyZW5jZS1zZWN0aW9uOmxhc3QtY2hpbGQge1xcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xcbiAgfVxcblxcbiAgLnByZWZlcmVuY2UtaGVhZGVyIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gICAgZmxleDogMTtcXG4gIH1cXG5cXG4gIC5wcmVmZXJlbmNlLWhlYWRlciBsYWJlbCB7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuXFxuICAucHJlZmVyZW5jZS1kZXNjcmlwdGlvbiB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIG1hcmdpbjogMDtcXG4gIH1cXG5cXG4gIC5zZWxlY3QtYnV0dG9uLFxcbiAgLmFjdGlvbi1idXR0b24ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDhweDtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbGcpO1xcbiAgICBmb250LXdlaWdodDogNDAwO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgcGFkZGluZzogNnB4IDhweDtcXG4gICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDE1MG1zIHZhcigtLXRpbWluZy1zd2lmdCk7XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS01MDApO1xcbiAgICB9XFxuXFxuICAgIHN2ZyB7XFxuICAgICAgd2lkdGg6IDE0cHg7XFxuICAgICAgaGVpZ2h0OiAxNHB4O1xcbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgICB9XFxuICB9XFxuXFxuICAuc2VsZWN0LWJ1dHRvbiB7XFxuICAgICY6Zm9jdXMtd2l0aGluIHtcXG4gICAgICBvdXRsaW5lOiB2YXIoLS1mb2N1cy1yaW5nKTtcXG4gICAgICBvdXRsaW5lLW9mZnNldDogLTFweDtcXG4gICAgfVxcblxcbiAgICBzZWxlY3Qge1xcbiAgICAgIGFsbDogdW5zZXQ7XFxuICAgIH1cXG5cXG4gICAgb3B0aW9uIHtcXG4gICAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIDpnbG9iYWwoLmljb24pIHtcXG4gICAgd2lkdGg6IDE4cHg7XFxuICAgIGhlaWdodDogMThweDtcXG4gICAgY29sb3I6ICM2NjY7XFxuICB9XFxuXCJdLG58fChuPWUuc2xpY2UoMCkpLE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmF3Ont2YWx1ZTpPYmplY3QuZnJlZXplKG4pfX0pKSk7cmV0dXJuIHJrPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LHR9ZnVuY3Rpb24gckEoZSl7dmFyIG4sdD1lLnNldFBvc2l0aW9uLHI9ZS5wb3NpdGlvbixvPWUuaGlkZSxhPWUuc2NhbGUsaT1lLnNldFNjYWxlLGw9ZS5oaWRlU2hvcnRjdXQscz1lLnNldEhpZGVTaG9ydGN1dCxjPXJ3KGUsW1wic2V0UG9zaXRpb25cIixcInBvc2l0aW9uXCIsXCJoaWRlXCIsXCJzY2FsZVwiLFwic2V0U2NhbGVcIixcImhpZGVTaG9ydGN1dFwiLFwic2V0SGlkZVNob3J0Y3V0XCJdKSx1PXJqKCgwLHgudXNlU3RhdGUpKGZ1bmN0aW9uKCl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGxvY2FsU3RvcmFnZSlyZXR1cm5cInN5c3RlbVwiO3ZhciBlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKFEpO3JldHVyblwiZGFya1wiPT09ZXx8XCJsaWdodFwiPT09ZT9lOlwic3lzdGVtXCJ9KCkpLDIpLGQ9dVswXSxmPXVbMV07ZnVuY3Rpb24gcChlKXt2YXIgbj1cIi9fX25leHRqc19yZXN0YXJ0X2RldlwiO2UmJihuPVwiL19fbmV4dGpzX3Jlc3RhcnRfZGV2P2ludmFsaWRhdGVQZXJzaXN0ZW50Q2FjaGVcIiksZmV0Y2gobix7bWV0aG9kOlwiUE9TVFwifSkudGhlbihmdW5jdGlvbigpe30pfXJldHVybigwLHkuanN4cykodDAueCxyeChyeSh7dGl0bGU6XCJQcmVmZXJlbmNlc1wifSxjKSx7Y2hpbGRyZW46WygwLHkuanN4KShcImgyXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLXNlY3Rpb24tdGl0bGVcIixjaGlsZHJlbjpcIkdlbmVyYWxcIn0pLCgwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZXMtY29udGFpbmVyXCIsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1zZWN0aW9uXCIsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1oZWFkZXJcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwibGFiZWxcIix7aHRtbEZvcjpcInRoZW1lXCIsY2hpbGRyZW46XCJUaGVtZVwifSksKDAseS5qc3gpKFwicFwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWRlc2NyaXB0aW9uXCIsY2hpbGRyZW46XCJTZWxlY3QgeW91ciB0aGVtZSBwcmVmZXJlbmNlLlwifSldfSksKDAseS5qc3hzKShyTyx7aWQ6XCJ0aGVtZVwiLG5hbWU6XCJ0aGVtZVwiLHByZWZpeDooMCx5LmpzeCkockMse3RoZW1lOmR9KSx2YWx1ZTpkLG9uQ2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciBuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJuZXh0anMtcG9ydGFsXCIpO2lmKG4pe2lmKGYoZS50YXJnZXQudmFsdWUpLFwic3lzdGVtXCI9PT1lLnRhcmdldC52YWx1ZSl7bi5jbGFzc0xpc3QucmVtb3ZlKFwiZGFya1wiKSxuLmNsYXNzTGlzdC5yZW1vdmUoXCJsaWdodFwiKSxsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShRKTtyZXR1cm59XCJkYXJrXCI9PT1lLnRhcmdldC52YWx1ZT8obi5jbGFzc0xpc3QuYWRkKFwiZGFya1wiKSxuLmNsYXNzTGlzdC5yZW1vdmUoXCJsaWdodFwiKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbShRLFwiZGFya1wiKSk6KG4uY2xhc3NMaXN0LnJlbW92ZShcImRhcmtcIiksbi5jbGFzc0xpc3QuYWRkKFwibGlnaHRcIiksbG9jYWxTdG9yYWdlLnNldEl0ZW0oUSxcImxpZ2h0XCIpKX19LGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJvcHRpb25cIix7dmFsdWU6XCJzeXN0ZW1cIixjaGlsZHJlbjpcIlN5c3RlbVwifSksKDAseS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwibGlnaHRcIixjaGlsZHJlbjpcIkxpZ2h0XCJ9KSwoMCx5LmpzeCkoXCJvcHRpb25cIix7dmFsdWU6XCJkYXJrXCIsY2hpbGRyZW46XCJEYXJrXCJ9KV19KV19KSwoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2Utc2VjdGlvblwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtaGVhZGVyXCIsY2hpbGRyZW46WygwLHkuanN4KShcImxhYmVsXCIse2h0bWxGb3I6XCJwb3NpdGlvblwiLGNoaWxkcmVuOlwiUG9zaXRpb25cIn0pLCgwLHkuanN4KShcInBcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1kZXNjcmlwdGlvblwiLGNoaWxkcmVuOlwiQWRqdXN0IHRoZSBwbGFjZW1lbnQgb2YgeW91ciBkZXYgdG9vbHMuXCJ9KV19KSwoMCx5LmpzeHMpKHJPLHtpZDpcInBvc2l0aW9uXCIsbmFtZTpcInBvc2l0aW9uXCIsdmFsdWU6cixvbkNoYW5nZTpmdW5jdGlvbihlKXt0KGUudGFyZ2V0LnZhbHVlKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbShHLGUudGFyZ2V0LnZhbHVlKX0sY2hpbGRyZW46WygwLHkuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcImJvdHRvbS1sZWZ0XCIsY2hpbGRyZW46XCJCb3R0b20gTGVmdFwifSksKDAseS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwiYm90dG9tLXJpZ2h0XCIsY2hpbGRyZW46XCJCb3R0b20gUmlnaHRcIn0pLCgwLHkuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcInRvcC1sZWZ0XCIsY2hpbGRyZW46XCJUb3AgTGVmdFwifSksKDAseS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwidG9wLXJpZ2h0XCIsY2hpbGRyZW46XCJUb3AgUmlnaHRcIn0pXX0pXX0pLCgwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1zZWN0aW9uXCIsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1oZWFkZXJcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwibGFiZWxcIix7aHRtbEZvcjpcInNpemVcIixjaGlsZHJlbjpcIlNpemVcIn0pLCgwLHkuanN4KShcInBcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1kZXNjcmlwdGlvblwiLGNoaWxkcmVuOlwiQWRqdXN0IHRoZSBzaXplIG9mIHlvdXIgZGV2IHRvb2xzLlwifSldfSksKDAseS5qc3gpKHJPLHtpZDpcInNpemVcIixuYW1lOlwic2l6ZVwiLHZhbHVlOmEsb25DaGFuZ2U6ZnVuY3Rpb24oZSl7aShOdW1iZXIoZS50YXJnZXQudmFsdWUpKX0sY2hpbGRyZW46T2JqZWN0LmVudHJpZXMoUykubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPXJqKGUsMiksdD1uWzBdLHI9blsxXTtyZXR1cm4oMCx5LmpzeCkoXCJvcHRpb25cIix7dmFsdWU6cixjaGlsZHJlbjp0fSx0KX0pfSldfSksKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLXNlY3Rpb25cIixjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWhlYWRlclwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJsYWJlbFwiLHtpZDpcImhpZGUtZGV2LXRvb2xzXCIsY2hpbGRyZW46XCJIaWRlIERldiBUb29scyBmb3IgdGhpcyBzZXNzaW9uXCJ9KSwoMCx5LmpzeCkoXCJwXCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtZGVzY3JpcHRpb25cIixjaGlsZHJlbjpcIkhpZGUgRGV2IFRvb2xzIHVudGlsIHlvdSByZXN0YXJ0IHlvdXIgZGV2IHNlcnZlciwgb3IgMSBkYXkuXCJ9KV19KSwoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1jb250cm9sXCIsY2hpbGRyZW46KDAseS5qc3hzKShcImJ1dHRvblwiLHtcImFyaWEtZGVzY3JpYmVkYnlcIjpcImhpZGUtZGV2LXRvb2xzXCIsbmFtZTpcImhpZGUtZGV2LXRvb2xzXCIsXCJkYXRhLWhpZGUtZGV2LXRvb2xzXCI6ITAsY2xhc3NOYW1lOlwiYWN0aW9uLWJ1dHRvblwiLG9uQ2xpY2s6byxjaGlsZHJlbjpbKDAseS5qc3gpKHQ5LHt9KSwoMCx5LmpzeCkoXCJzcGFuXCIse2NoaWxkcmVuOlwiSGlkZVwifSldfSl9KV19KSwoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2Utc2VjdGlvblwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtaGVhZGVyXCIsY2hpbGRyZW46WygwLHkuanN4KShcImxhYmVsXCIse2lkOlwiaGlkZS1kZXYtdG9vbHNcIixjaGlsZHJlbjpcIkhpZGUgRGV2IFRvb2xzIHNob3J0Y3V0XCJ9KSwoMCx5LmpzeCkoXCJwXCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtZGVzY3JpcHRpb25cIixjaGlsZHJlbjpcIlNldCBhIGN1c3RvbSBrZXlib2FyZCBzaG9ydGN1dCB0byB0b2dnbGUgdmlzaWJpbGl0eS5cIn0pXX0pLCgwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWNvbnRyb2xcIixjaGlsZHJlbjooMCx5LmpzeCkocmQse3ZhbHVlOm51bGwhPShuPW51bGw9PWw/dm9pZCAwOmwuc3BsaXQoXCIrXCIpKT9uOm51bGwsb25DaGFuZ2U6c30pfSldfSksKDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2Utc2VjdGlvblwiLGNoaWxkcmVuOigwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1oZWFkZXJcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwibGFiZWxcIix7Y2hpbGRyZW46XCJEaXNhYmxlIERldiBUb29scyBmb3IgdGhpcyBwcm9qZWN0XCJ9KSwoMCx5LmpzeHMpKFwicFwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlLWRlc2NyaXB0aW9uXCIsY2hpbGRyZW46W1wiVG8gZGlzYWJsZSB0aGlzIFVJIGNvbXBsZXRlbHksIHNldFwiLFwiIFwiLCgwLHkuanN4KShcImNvZGVcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZVwiLGNoaWxkcmVuOlwiZGV2SW5kaWNhdG9yczogZmFsc2VcIn0pLFwiIFwiLFwiaW4geW91ciBcIiwoMCx5LmpzeCkoXCJjb2RlXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGVcIixjaGlsZHJlbjpcIm5leHQuY29uZmlnXCJ9KSxcIiBcIixcImZpbGUuXCJdfSldfSl9KV19KSwoMCx5LmpzeCkoXCJoMlwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5mby1zZWN0aW9uLXRpdGxlXCIsY2hpbGRyZW46XCJEZXZlbG9wbWVudCBTZXJ2ZXJcIn0pLCgwLHkuanN4KShcImRpdlwiLHtjbGFzc05hbWU6XCJwcmVmZXJlbmNlcy1jb250YWluZXJcIixjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2Utc2VjdGlvblwiLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtaGVhZGVyXCIsY2hpbGRyZW46WygwLHkuanN4KShcImxhYmVsXCIse2lkOlwicmVzdGFydC1kZXYtc2VydmVyXCIsY2hpbGRyZW46XCJSZXN0YXJ0IERldiBTZXJ2ZXJcIn0pLCgwLHkuanN4KShcInBcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1kZXNjcmlwdGlvblwiLGNoaWxkcmVuOlwiUmVzdGFydHMgdGhlIGRldmVsb3BtZW50IHNlcnZlciB3aXRob3V0IG5lZWRpbmcgdG8gbGVhdmUgdGhlIGJyb3dzZXIuXCJ9KV19KSwoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1jb250cm9sXCIsY2hpbGRyZW46KDAseS5qc3gpKFwiYnV0dG9uXCIse1wiYXJpYS1kZXNjcmliZWRieVwiOlwicmVzdGFydC1kZXYtc2VydmVyXCIsdGl0bGU6XCJSZXN0YXJ0cyB0aGUgZGV2ZWxvcG1lbnQgc2VydmVyIHdpdGhvdXQgbmVlZGluZyB0byBsZWF2ZSB0aGUgYnJvd3Nlci5cIixuYW1lOlwicmVzdGFydC1kZXYtc2VydmVyXCIsXCJkYXRhLXJlc3RhcnQtZGV2LXNlcnZlclwiOiEwLGNsYXNzTmFtZTpcImFjdGlvbi1idXR0b25cIixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHAoITEpfSxjaGlsZHJlbjooMCx5LmpzeCkoXCJzcGFuXCIse2NoaWxkcmVuOlwiUmVzdGFydFwifSl9KX0pXX0pfSkscHJvY2Vzcy5lbnYuX19ORVhUX0JVTkRMRVJfSEFTX1BFUlNJU1RFTlRfQ0FDSEU/KDAseS5qc3gpKFwiZGl2XCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2VzLWNvbnRhaW5lclwiLGNoaWxkcmVuOigwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1zZWN0aW9uXCIsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1oZWFkZXJcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwibGFiZWxcIix7aWQ6XCJyZXNldC1idW5kbGVyLWNhY2hlXCIsY2hpbGRyZW46XCJSZXNldCBCdW5kbGVyIENhY2hlXCJ9KSwoMCx5LmpzeCkoXCJwXCIse2NsYXNzTmFtZTpcInByZWZlcmVuY2UtZGVzY3JpcHRpb25cIixjaGlsZHJlbjpcIkNsZWFycyB0aGUgYnVuZGxlciBjYWNoZSBhbmQgcmVzdGFydHMgdGhlIGRldiBzZXJ2ZXIuIEhlbHBmdWwgaWYgeW91IGFyZSBzZWVpbmcgc3RhbGUgZXJyb3JzIG9yIGNoYW5nZXMgYXJlIG5vdCBhcHBlYXJpbmcuXCJ9KV19KSwoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwicHJlZmVyZW5jZS1jb250cm9sXCIsY2hpbGRyZW46KDAseS5qc3gpKFwiYnV0dG9uXCIse1wiYXJpYS1kZXNjcmliZWRieVwiOlwicmVzZXQtYnVuZGxlci1jYWNoZVwiLHRpdGxlOlwiQ2xlYXJzIHRoZSBidW5kbGVyIGNhY2hlIGFuZCByZXN0YXJ0cyB0aGUgZGV2IHNlcnZlci4gSGVscGZ1bCBpZiB5b3UgYXJlIHNlZWluZyBzdGFsZSBlcnJvcnMgb3IgY2hhbmdlcyBhcmUgbm90IGFwcGVhcmluZy5cIixuYW1lOlwicmVzZXQtYnVuZGxlci1jYWNoZVwiLFwiZGF0YS1yZXNldC1idW5kbGVyLWNhY2hlXCI6ITAsY2xhc3NOYW1lOlwiYWN0aW9uLWJ1dHRvblwiLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gcCghMCl9LGNoaWxkcmVuOigwLHkuanN4KShcInNwYW5cIix7Y2hpbGRyZW46XCJSZXNldCBDYWNoZVwifSl9KX0pXX0pfSk6bnVsbF19KSl9ZnVuY3Rpb24gck8oZSl7dmFyIG49ZS5jaGlsZHJlbix0PWUucHJlZml4LHI9cncoZSxbXCJjaGlsZHJlblwiLFwicHJlZml4XCJdKTtyZXR1cm4oMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcInNlbGVjdC1idXR0b25cIixjaGlsZHJlbjpbdCwoMCx5LmpzeCkoXCJzZWxlY3RcIixyeChyeSh7fSxyKSx7Y2hpbGRyZW46bn0pKSwoMCx5LmpzeCkockUse30pXX0pfWZ1bmN0aW9uIHJDKGUpe3N3aXRjaChlLnRoZW1lKXtjYXNlXCJzeXN0ZW1cIjpyZXR1cm4oMCx5LmpzeCkocmUse30pO2Nhc2VcImRhcmtcIjpyZXR1cm4oMCx5LmpzeCkodDcse30pO2Nhc2VcImxpZ2h0XCI6cmV0dXJuKDAseS5qc3gpKHQ4LHt9KTtkZWZhdWx0OnJldHVybiBudWxsfX12YXIgclM9ZWkocmsoKSk7ZnVuY3Rpb24gckUoKXtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIix7d2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLFwiYXJpYS1oaWRkZW5cIjohMCxjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMTQuMDYwNyA1LjQ5OTk5TDEzLjUzMDMgNi4wMzAzMkw4LjcwNzEgMTAuODUzNUM4LjMxNjU4IDExLjI0NDEgNy42ODM0MSAxMS4yNDQxIDcuMjkyODkgMTAuODUzNUwyLjQ2OTY2IDYuMDMwMzJMMS45MzkzMyA1LjQ5OTk5TDIuOTk5OTkgNC40MzkzM0wzLjUzMDMyIDQuOTY5NjZMNy45OTk5OSA5LjQzOTMzTDEyLjQ2OTcgNC45Njk2NkwxMyA0LjQzOTMzTDE0LjA2MDcgNS40OTk5OVpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0pfWZ1bmN0aW9uIHJfKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiByUChlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gcnooZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfWZ1bmN0aW9uIHJMKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb31mdW5jdGlvbiByVChlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gcl8oZSl9KGUpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8clIoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIHJSKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHJfKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIHJfKGUsbil9fWZ1bmN0aW9uIHJOKGUpe3ZhciBuPWUuY2hpbGRyZW4sdD1lLnBhZGRpbmcscj1lLnBvc2l0aW9uLG89ZS5zZXRQb3NpdGlvbixhPWUub25EcmFnU3RhcnQsaT1lLmRyYWdIYW5kbGVTZWxlY3RvcixsPWUuZGlzYWJsZURyYWcscz1yTChlLFtcImNoaWxkcmVuXCIsXCJwYWRkaW5nXCIsXCJwb3NpdGlvblwiLFwic2V0UG9zaXRpb25cIixcIm9uRHJhZ1N0YXJ0XCIsXCJkcmFnSGFuZGxlU2VsZWN0b3JcIixcImRpc2FibGVEcmFnXCJdKSxjPWZ1bmN0aW9uKGUpe3ZhciBuPSgwLHgudXNlUmVmKShudWxsKSx0PSgwLHgudXNlUmVmKSh7c3RhdGU6XCJpZGxlXCJ9KSxyPSgwLHgudXNlUmVmKShudWxsKSxvPSgwLHgudXNlUmVmKSh7eDowLHk6MH0pLGE9KDAseC51c2VSZWYpKHt4OjAseTowfSksaT0oMCx4LnVzZVJlZikoMCksbD0oMCx4LnVzZVJlZikoW10pLHM9KDAseC51c2VDYWxsYmFjaykoZnVuY3Rpb24oKXt2YXIgZSxvO1wiZHJhZ1wiPT09dC5jdXJyZW50LnN0YXRlJiYobnVsbD09KG89bi5jdXJyZW50KXx8by5yZWxlYXNlUG9pbnRlckNhcHR1cmUodC5jdXJyZW50LnBvaW50ZXJJZCkpLHQuY3VycmVudD1cImRyYWdcIj09PXQuY3VycmVudC5zdGF0ZT97c3RhdGU6XCJkcmFnLWVuZFwifTp7c3RhdGU6XCJpZGxlXCJ9LG51bGwhPT1yLmN1cnJlbnQmJihyLmN1cnJlbnQoKSxyLmN1cnJlbnQ9bnVsbCksbC5jdXJyZW50PVtdLG51bGw9PShlPW4uY3VycmVudCl8fGUuY2xhc3NMaXN0LnJlbW92ZShcImRldi10b29scy1ncmFiYmluZ1wiKX0sW10pO2Z1bmN0aW9uIGMoZSl7bi5jdXJyZW50JiYoYS5jdXJyZW50PWUsbi5jdXJyZW50LnN0eWxlLnRyYW5zbGF0ZT1cIlwiLmNvbmNhdChlLngsXCJweCBcIikuY29uY2F0KGUueSxcInB4XCIpKX1mdW5jdGlvbiB1KGUpe2lmKFwiZHJhZy1lbmRcIj09PXQuY3VycmVudC5zdGF0ZSl7dmFyIHI7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdC5jdXJyZW50PXtzdGF0ZTpcImlkbGVcIn0sbnVsbD09KHI9bi5jdXJyZW50KXx8ci5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIix1KX19ZnVuY3Rpb24gZChyKXtpZihcInByZXNzXCI9PT10LmN1cnJlbnQuc3RhdGUpe3ZhciBzLHUsZCxmLHA9ci5jbGllbnRYLW8uY3VycmVudC54LGg9ci5jbGllbnRZLW8uY3VycmVudC55O01hdGguc3FydChwKnAraCpoKT49ZS50aHJlc2hvbGQmJih0LmN1cnJlbnQ9e3N0YXRlOlwiZHJhZ1wiLHBvaW50ZXJJZDpyLnBvaW50ZXJJZH0sbnVsbD09KHU9bi5jdXJyZW50KXx8dS5zZXRQb2ludGVyQ2FwdHVyZShyLnBvaW50ZXJJZCksbnVsbD09KGQ9bi5jdXJyZW50KXx8ZC5jbGFzc0xpc3QuYWRkKFwiZGV2LXRvb2xzLWdyYWJiaW5nXCIpLG51bGw9PShmPWUub25EcmFnU3RhcnQpfHxmLmNhbGwoZSkpfWlmKFwiZHJhZ1wiPT09dC5jdXJyZW50LnN0YXRlKXt2YXIgZz17eDpyLmNsaWVudFgseTpyLmNsaWVudFl9LG09Zy54LW8uY3VycmVudC54LHY9Zy55LW8uY3VycmVudC55O28uY3VycmVudD1nLGMoe3g6YS5jdXJyZW50LngrbSx5OmEuY3VycmVudC55K3Z9KTt2YXIgYj1EYXRlLm5vdygpO2ItaS5jdXJyZW50Pj0xMCYmKGwuY3VycmVudD1yVChsLmN1cnJlbnQuc2xpY2UoLTUpKS5jb25jYXQoW3twb3NpdGlvbjpnLHRpbWVzdGFtcDpifV0pKSxpLmN1cnJlbnQ9YixudWxsPT0ocz1lLm9uRHJhZyl8fHMuY2FsbChlLGEuY3VycmVudCl9fWZ1bmN0aW9uIGYoKXt2YXIgbix0PWZ1bmN0aW9uKGUpe2lmKGUubGVuZ3RoPDIpcmV0dXJue3g6MCx5OjB9O3ZhciBuPWVbMF0sdD1lW2UubGVuZ3RoLTFdLHI9dC50aW1lc3RhbXAtbi50aW1lc3RhbXA7cmV0dXJuIDA9PT1yP3t4OjAseTowfTp7eDoxZTMqKCh0LnBvc2l0aW9uLngtbi5wb3NpdGlvbi54KS9yKSx5OjFlMyooKHQucG9zaXRpb24ueS1uLnBvc2l0aW9uLnkpL3IpfX0obC5jdXJyZW50KTtzKCksbnVsbD09KG49ZS5vbkRyYWdFbmQpfHxuLmNhbGwoZSxhLmN1cnJlbnQsdCl9cmV0dXJuKDAseC51c2VMYXlvdXRFZmZlY3QpKGZ1bmN0aW9uKCl7ZS5kaXNhYmxlZCYmcygpfSxbcyxlLmRpc2FibGVkXSkse3JlZjpuLG9uUG9pbnRlckRvd246ZnVuY3Rpb24oYSl7dmFyIGksbDswPT09YS5idXR0b24mJihsPWEudGFyZ2V0LCghZS5kcmFnSGFuZGxlU2VsZWN0b3J8fCFuLmN1cnJlbnR8fCFsfHxsLm1hdGNoZXMmJmwubWF0Y2hlcyhlLmRyYWdIYW5kbGVTZWxlY3RvcikpJiYoby5jdXJyZW50PXt4OmEuY2xpZW50WCx5OmEuY2xpZW50WX0sdC5jdXJyZW50PXtzdGF0ZTpcInByZXNzXCJ9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIixkKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLGYpLG51bGwhPT1yLmN1cnJlbnQmJihyLmN1cnJlbnQoKSxyLmN1cnJlbnQ9bnVsbCksci5jdXJyZW50PWZ1bmN0aW9uKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLGQpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsZil9LG51bGw9PShpPW4uY3VycmVudCl8fGkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdSkpKX0sYW5pbWF0ZTpmdW5jdGlvbih0KXt2YXIgcj1uLmN1cnJlbnQ7bnVsbCE9PXImJihyLnN0eWxlLnRyYW5zaXRpb249XCJ0cmFuc2xhdGUgNDkxLjIybXMgdmFyKC0tdGltaW5nLWJvdW5jZSlcIixyLmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsZnVuY3Rpb24gbihvKXtpZihcInRyYW5zbGF0ZVwiPT09by5wcm9wZXJ0eU5hbWUpe3ZhciBpO251bGw9PShpPWUub25BbmltYXRpb25FbmQpfHxpLmNhbGwoZSx0KSxhLmN1cnJlbnQ9e3g6MCx5OjB9LHIuc3R5bGUudHJhbnNpdGlvbj1cIlwiLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIixuKX19KSxjKHQudHJhbnNsYXRpb24pKX19fSh7ZGlzYWJsZWQ6dm9pZCAwIT09bCYmbCx0aHJlc2hvbGQ6NSxvbkRyYWdTdGFydDphLG9uRHJhZ0VuZDpmdW5jdGlvbihlLG4pe3ZhciBvLGEsaSxsLHMsYyxmLHAsaCxnLG0sdixiLHkseCx3LGosayxBO2lmKDA9PT1NYXRoLnNxcnQoZS54KmUueCtlLnkqZS55KSl7bnVsbD09KG89dS5jdXJyZW50KXx8by5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInRyYW5zbGF0ZVwiKTtyZXR1cm59ZCgoeT0oYT17eDplLngrckQobi54KSx5OmUueStyRChuLnkpfSkueCx4PWEueSxqPU9iamVjdC5lbnRyaWVzKHc9KHA9Mip0LGg9KG51bGw9PShjPXUuY3VycmVudCk/dm9pZCAwOmMub2Zmc2V0V2lkdGgpfHwwLGc9KG51bGw9PShmPXUuY3VycmVudCk/dm9pZCAwOmYub2Zmc2V0SGVpZ2h0KXx8MCxtPXdpbmRvdy5pbm5lcldpZHRoLWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCx7XCJ0b3AtbGVmdFwiOnt4OjAtKHY9KGw9KGk9cikuaW5jbHVkZXMoXCJyaWdodFwiKSxzPWkuaW5jbHVkZXMoXCJib3R0b21cIikse3g6bD93aW5kb3cuaW5uZXJXaWR0aC1tLXAtaDowLHk6cz93aW5kb3cuaW5uZXJIZWlnaHQtcC1nOjB9KSkueCx5OjAtdi55fSxcInRvcC1yaWdodFwiOnt4OndpbmRvdy5pbm5lcldpZHRoLW0tcC1oLXYueCx5OjAtdi55fSxcImJvdHRvbS1sZWZ0XCI6e3g6MC12LngseTp3aW5kb3cuaW5uZXJIZWlnaHQtcC1nLXYueX0sXCJib3R0b20tcmlnaHRcIjp7eDp3aW5kb3cuaW5uZXJXaWR0aC1tLXAtaC12LngseTp3aW5kb3cuaW5uZXJIZWlnaHQtcC1nLXYueX19KSkubWFwKGZ1bmN0aW9uKGUpe3ZhciBuLHQscj0odD0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG49ZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksYS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0obiwyKXx8clIobix0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSksbz1yWzBdLGE9clsxXTtyZXR1cm57a2V5Om8sZGlzdGFuY2U6TWF0aC5zcXJ0KE1hdGgucG93KHktYS54LDIpK01hdGgucG93KHgtYS55LDIpKX19KSxrPShiPU1hdGgpLm1pbi5hcHBseShiLHJUKGoubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc3RhbmNlfSkpKSwoQT1qLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzdGFuY2U9PT1rfSkpP3t0cmFuc2xhdGlvbjp3W0Eua2V5XSxjb3JuZXI6QS5rZXl9Ontjb3JuZXI6cix0cmFuc2xhdGlvbjp3W3JdfSkpfSxvbkFuaW1hdGlvbkVuZDpmdW5jdGlvbihlKXt2YXIgbj1lLmNvcm5lcjtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGU7bnVsbD09KGU9dS5jdXJyZW50KXx8ZS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInRyYW5zbGF0ZVwiKSxvKG4pfSl9LGRyYWdIYW5kbGVTZWxlY3RvcjppfSksdT1jLnJlZixkPWMuYW5pbWF0ZSxmPXJMKGMsW1wicmVmXCIsXCJhbmltYXRlXCJdKTtyZXR1cm4oMCx5LmpzeCkoXCJkaXZcIixyeihyUChyeihyUCh7fSxzKSx7cmVmOnV9KSxmKSx7c3R5bGU6e3RvdWNoQWN0aW9uOlwibm9uZVwifSxjaGlsZHJlbjpufSkpfWZ1bmN0aW9uIHJEKGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTouOTk5O3JldHVybiBlLzFlMypuLygxLW4pfWZ1bmN0aW9uIHJCKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiByTShlLG4sdCl7cmV0dXJuIG4gaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHt2YWx1ZTp0LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVtuXT10LGV9ZnVuY3Rpb24gckkoZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JNKGUsbix0W25dKX0pfXJldHVybiBlfWZ1bmN0aW9uIHJIKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb31mdW5jdGlvbiByRihlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gckIoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gckIoZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gclUoZSl7dmFyIG49ZS5zdGF0ZSx0PWUuZXJyb3JDb3VudCxyPWUuaXNCdWlsZEVycm9yLG89ckgoZSxbXCJzdGF0ZVwiLFwiZXJyb3JDb3VudFwiLFwiaXNCdWlsZEVycm9yXCJdKSxhPXJGKCgwLHgudXNlU3RhdGUpKCEwKSwyKSxpPWFbMF0sbD1hWzFdO3JldHVybigwLHkuanN4KShyJCxySSh7cm91dGVyVHlwZTpuLnJvdXRlclR5cGUsc2VtdmVyOm4udmVyc2lvbkluZm8uaW5zdGFsbGVkLGlzc3VlQ291bnQ6dCxpc0RldkJ1aWxkaW5nOm4uYnVpbGRpbmdJbmRpY2F0b3IsaXNEZXZSZW5kZXJpbmc6bi5yZW5kZXJpbmdJbmRpY2F0b3IsaXNTdGF0aWNSb3V0ZTpuLnN0YXRpY0luZGljYXRvcixoaWRlOmZ1bmN0aW9uKCl7bCghMSksZmV0Y2goXCIvX19uZXh0anNfZGlzYWJsZV9kZXZfaW5kaWNhdG9yXCIse21ldGhvZDpcIlBPU1RcIn0pfSx0b2dnbGVWaXNpYmlsaXR5OmZ1bmN0aW9uKCl7bCghaSl9LGlzVHVyYm9wYWNrOiEhcHJvY2Vzcy5lbnYuVFVSQk9QQUNLLGRpc2FibGVkOm4uZGlzYWJsZURldkluZGljYXRvcnx8IWksaXNCdWlsZEVycm9yOnIscGFnZTpuLnBhZ2V9LG8pKX12YXIgclY9KDAseC5jcmVhdGVDb250ZXh0KSh7fSkscnE9e1Jvb3Q6XCJyb290XCIsVHVyYm86XCJ0dXJib1wiLFJvdXRlOlwicm91dGVcIixQcmVmZXJlbmNlczpcInByZWZlcmVuY2VzXCIsU2VnbWVudEV4cGxvcmVyOlwic2VnbWVudC1leHBsb3JlclwifSxyVz1wcm9jZXNzLmVudi5fX05FWFRfREVWVE9PTF9TRUdNRU5UX0VYUExPUkVSP19fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9uZXh0LWRldnRvb2xzL2Rldi1vdmVybGF5L2NvbXBvbmVudHMvZXJyb3JzL2Rldi10b29scy1pbmRpY2F0b3IvZGV2LXRvb2xzLWluZm8vc2VnbWVudHMtZXhwbG9yZXIudHN4XCIpLlc6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH07ZnVuY3Rpb24gciQoZSl7dmFyIG4sdCxyLG8sYSxpLGwscz1lLnJvdXRlclR5cGUsYz1lLmRpc2FibGVkLHU9ZS5pc3N1ZUNvdW50LGQ9ZS5pc0RldkJ1aWxkaW5nLGY9ZS5pc0RldlJlbmRlcmluZyxwPWUuaXNTdGF0aWNSb3V0ZSxoPWUuaXNUdXJib3BhY2ssZz1lLmlzQnVpbGRFcnJvcixtPWUuaGlkZSx2PWUudG9nZ2xlVmlzaWJpbGl0eSxiPWUuZGlzcGF0Y2gsdz1lLnNjYWxlLGo9ZS5zZXRTY2FsZSxrPWUucGFnZSxBPSgwLHgudXNlUmVmKShudWxsKSxPPSgwLHgudXNlUmVmKShudWxsKSxDPSgwLHgudXNlUmVmKShudWxsKSxTPXJGKCgwLHgudXNlU3RhdGUpKG51bGwpLDIpLEU9U1swXSxfPVNbMV0sUD1yRigoMCx4LnVzZVN0YXRlKShcInVuZGVmaW5lZFwiIT10eXBlb2YgbG9jYWxTdG9yYWdlJiZsb2NhbFN0b3JhZ2UuZ2V0SXRlbShHKT9sb2NhbFN0b3JhZ2UuZ2V0SXRlbShHKTpyciksMiksej1QWzBdLEw9UFsxXSxUPXJGKCgwLHgudXNlU3RhdGUpKC0xKSwyKSxSPVRbMF0sTj1UWzFdLEQ9ckYoKHQ9KG49cnQoKDAseC51c2VTdGF0ZSkoZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgbG9jYWxTdG9yYWdlKXJldHVybiBudWxsO3ZhciBlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKHJvKTtyZXR1cm4gZXx8bnVsbH0oKSksMikpWzBdLHI9blsxXSxbdCxmdW5jdGlvbihlKXtyKGUpLG51bGw9PT1lP2xvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHJvKTpsb2NhbFN0b3JhZ2Uuc2V0SXRlbShybyxlKX1dKSwyKSxCPURbMF0sST1EWzFdLEY9RT09PXJxLlJvb3QsVT1FPT09cnEuVHVyYm8sVj1FPT09cnEuUm91dGUscT1FPT09cnEuUHJlZmVyZW5jZXMsVz1FPT09cnEuU2VnbWVudEV4cGxvcmVyLCQ9KDAsdEouTikoRix7ZW50ZXJEZWxheTowLGV4aXREZWxheTpuUS5LN30pLFo9JC5tb3VudGVkLFk9JC5yZW5kZXJlZDtmdW5jdGlvbiBYKGUpe2lmKFwiZmlyc3RcIj09PWUpcmV0dXJuIHZvaWQgc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBlLG49bnVsbD09KGU9Ty5jdXJyZW50KT92b2lkIDA6ZS5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT1cIm1lbnVpdGVtXCJdJyk7biYmWChOdW1iZXIoblswXS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWluZGV4XCIpKSl9KTtpZihcImxhc3RcIj09PWUpcmV0dXJuIHZvaWQgc2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBlLG49bnVsbD09KGU9Ty5jdXJyZW50KT92b2lkIDA6ZS5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT1cIm1lbnVpdGVtXCJdJyk7biYmWChuLmxlbmd0aC0xKX0pO3ZhciBuLHQ9bnVsbD09KG49Ty5jdXJyZW50KT92b2lkIDA6bi5xdWVyeVNlbGVjdG9yKCdbZGF0YS1pbmRleD1cIicuY29uY2F0KGUsJ1wiXScpKTt0JiYoTihlKSxudWxsPT10fHx0LmZvY3VzKCkpfWZ1bmN0aW9uIEsoKXtfKHJxLlJvb3QpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtYKFIpfSxuUS5LNyl9ZnVuY3Rpb24gUSgpe18oZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1ycS5Sb290P251bGw6ZX0pfSgwLG5RLlA1KShPLEMsRiksKDAsblEuTzgpKE8sQyxaLFEpLG89Qj9yTSh7fSxCLGZ1bmN0aW9uKCl7digpO3ZhciBlPUEuY3VycmVudDtlJiYoZS5kYXRhc2V0LmhpZGRlbj1cInRydWVcIj09PWUuZGF0YXNldC5oaWRkZW4/XCJmYWxzZVwiOlwidHJ1ZVwiKX0pOnt9LGE9QywoMCx4LnVzZUVmZmVjdCkoZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlKXtpZihuPWEsISh0PSgwLG5RLnZZKShuLmN1cnJlbnQpKXx8XCJ0cnVlXCIhPT10LmNvbnRlbnRFZGl0YWJsZSYmXCJJTlBVVFwiIT09dC50YWdOYW1lJiZcIlRFWFRBUkVBXCIhPT10LnRhZ05hbWUmJlwiU0VMRUNUXCIhPT10LnRhZ05hbWUmJlwidHJ1ZVwiIT09dC5kYXRhc2V0W1wic2hvcnRjdXQtcmVjb3JkZXJcIl18fHQuaGFzQXR0cmlidXRlKFwicmVhZG9ubHlcIikpe3ZhciBuLHQscj1bXTtlLm1ldGFLZXkmJnIucHVzaChcIk1ldGFcIiksZS5jdHJsS2V5JiZyLnB1c2goXCJDb250cm9sXCIpLGUuYWx0S2V5JiZyLnB1c2goXCJBbHRcIiksZS5zaGlmdEtleSYmci5wdXNoKFwiU2hpZnRcIiksXCJNZXRhXCIhPT1lLmtleSYmXCJDb250cm9sXCIhPT1lLmtleSYmXCJBbHRcIiE9PWUua2V5JiZcIlNoaWZ0XCIhPT1lLmtleSYmci5wdXNoKGUua2V5KTt2YXIgaT1yLmpvaW4oXCIrXCIpO29baV0mJihlLnByZXZlbnREZWZhdWx0KCksb1tpXSgpKX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKSxmdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixlKX19LFtvXSksKDAseC51c2VFZmZlY3QpKGZ1bmN0aW9uKCl7aWYobnVsbD09PUUpe3ZhciBlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtOKC0xKX0sblEuSzcpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjbGVhclRpbWVvdXQoZSl9fX0sW0VdKTt2YXIgSj1yRih6LnNwbGl0KFwiLVwiLDIpLDIpLGVlPUpbMF0sZW49SlsxXSxldD0ock0oaT17fSxlZSxcImNhbGMoMTAwJSArIDhweClcIiksck0oaSxlbiwwKSxpKTtyZXR1cm4oMCx5LmpzeHMpKHRSLHtyZWY6QSxcImRhdGEtbmV4dGpzLXRvYXN0XCI6ITAsc3R5bGU6KHJNKGw9e1wiLS1hbmltYXRlLW91dC1kdXJhdGlvbi1tc1wiOlwiXCIuY29uY2F0KG5RLks3LFwibXNcIiksXCItLWFuaW1hdGUtb3V0LXRpbWluZy1mdW5jdGlvblwiOm5RLnVELGJveFNoYWRvdzpcIm5vbmVcIn0sZWUsXCJcIi5jb25jYXQoMjAsXCJweFwiKSksck0obCxlbixcIlwiLmNvbmNhdCgyMCxcInB4XCIpKSxsKSxjaGlsZHJlbjpbKDAseS5qc3gpKHJOLHtwYWRkaW5nOjIwLG9uRHJhZ1N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIF8obnVsbCl9LHBvc2l0aW9uOnosc2V0UG9zaXRpb246ZnVuY3Rpb24oZSl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oRyxlKSxMKGUpfSxjaGlsZHJlbjooMCx5LmpzeCkodFkse3JlZjpDLFwiYXJpYS1oYXNwb3B1cFwiOlwibWVudVwiLFwiYXJpYS1leHBhbmRlZFwiOkYsXCJhcmlhLWNvbnRyb2xzXCI6XCJuZXh0anMtZGV2LXRvb2xzLW1lbnVcIixcImFyaWEtbGFiZWxcIjpcIlwiLmNvbmNhdChGP1wiQ2xvc2VcIjpcIk9wZW5cIixcIiBOZXh0LmpzIERldiBUb29sc1wiKSxcImRhdGEtbmV4dGpzLWRldi10b29scy1idXR0b25cIjohMCxkaXNhYmxlZDpjLGlzc3VlQ291bnQ6dSxvblRyaWdnZXJDbGljazpmdW5jdGlvbigpe0U9PT1ycS5Sb290P18obnVsbCk6KF8ocnEuUm9vdCksc2V0VGltZW91dChmdW5jdGlvbigpe1goXCJmaXJzdFwiKX0pKX0sdG9nZ2xlRXJyb3JPdmVybGF5OmZ1bmN0aW9uKCl7Yih7dHlwZTpIfSl9LGlzRGV2QnVpbGRpbmc6ZCxpc0RldlJlbmRlcmluZzpmLGlzQnVpbGRFcnJvcjpnLHNjYWxlOnd9KX0pLCgwLHkuanN4KSh0Myx7aXNPcGVuOlYsY2xvc2U6Syx0cmlnZ2VyUmVmOkMsc3R5bGU6ZXQscm91dGVyVHlwZTpzLHJvdXRlVHlwZTpwP1wiU3RhdGljXCI6XCJEeW5hbWljXCJ9KSwoMCx5LmpzeCkodDEse2lzT3BlbjpVLGNsb3NlOkssdHJpZ2dlclJlZjpDLHN0eWxlOmV0fSksKDAseS5qc3gpKHJBLHtpc09wZW46cSxjbG9zZTpLLHRyaWdnZXJSZWY6QyxzdHlsZTpldCxoaWRlOmZ1bmN0aW9uKCl7XyhudWxsKSxtKCl9LHNldFBvc2l0aW9uOkwscG9zaXRpb246eixzY2FsZTp3LHNldFNjYWxlOmosaGlkZVNob3J0Y3V0OkIsc2V0SGlkZVNob3J0Y3V0Okl9KSxwcm9jZXNzLmVudi5fX05FWFRfREVWVE9PTF9TRUdNRU5UX0VYUExPUkVSPygwLHkuanN4KShyVyx7aXNPcGVuOlcsY2xvc2U6Syx0cmlnZ2VyUmVmOkMsc3R5bGU6ZXQscm91dGVyVHlwZTpzLHBhZ2U6a30pOm51bGwsWiYmKDAseS5qc3gpKFwiZGl2XCIse3JlZjpPLGlkOlwibmV4dGpzLWRldi10b29scy1tZW51XCIscm9sZTpcIm1lbnVcIixkaXI6XCJsdHJcIixcImFyaWEtb3JpZW50YXRpb25cIjpcInZlcnRpY2FsXCIsXCJhcmlhLWxhYmVsXCI6XCJOZXh0LmpzIERldiBUb29scyBJdGVtc1wiLHRhYkluZGV4Oi0xLGNsYXNzTmFtZTpcImRldi10b29scy1pbmRpY2F0b3ItbWVudVwiLG9uS2V5RG93bjpmdW5jdGlvbihlKXtzd2l0Y2goZS5wcmV2ZW50RGVmYXVsdCgpLGUua2V5KXtjYXNlXCJBcnJvd0Rvd25cIjpYKFIrMSk7YnJlYWs7Y2FzZVwiQXJyb3dVcFwiOlgoUi0xKTticmVhaztjYXNlXCJIb21lXCI6WChcImZpcnN0XCIpO2JyZWFrO2Nhc2VcIkVuZFwiOlgoXCJsYXN0XCIpfX0sXCJkYXRhLXJlbmRlcmVkXCI6WSxzdHlsZTpldCxjaGlsZHJlbjooMCx5LmpzeHMpKHJWLlByb3ZpZGVyLHt2YWx1ZTp7Y2xvc2VNZW51OlEsc2VsZWN0ZWRJbmRleDpSLHNldFNlbGVjdGVkSW5kZXg6Tn0sY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZGljYXRvci1pbm5lclwiLGNoaWxkcmVuOlt1PjAmJigwLHkuanN4KShyWSx7dGl0bGU6XCJcIi5jb25jYXQodSxcIiBcIikuY29uY2F0KDE9PT11P1wiaXNzdWVcIjpcImlzc3Vlc1wiLFwiIGZvdW5kLiBDbGljayB0byB2aWV3IGRldGFpbHMgaW4gdGhlIGRldiBvdmVybGF5LlwiKSxpbmRleDowLGxhYmVsOlwiSXNzdWVzXCIsdmFsdWU6KDAseS5qc3gpKHJYLHtjaGlsZHJlbjp1fSksb25DbGljazpmdW5jdGlvbigpe18obnVsbCksdT4wJiZiKHt0eXBlOk19KX19KSwoMCx5LmpzeCkoclkse3RpdGxlOlwiQ3VycmVudCByb3V0ZSBpcyBcIi5jb25jYXQocD9cInN0YXRpY1wiOlwiZHluYW1pY1wiLFwiLlwiKSxsYWJlbDpcIlJvdXRlXCIsaW5kZXg6MSx2YWx1ZTpwP1wiU3RhdGljXCI6XCJEeW5hbWljXCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBfKHJxLlJvdXRlKX0sXCJkYXRhLW5leHRqcy1yb3V0ZS10eXBlXCI6cD9cInN0YXRpY1wiOlwiZHluYW1pY1wifSksaD8oMCx5LmpzeCkoclkse3RpdGxlOlwiVHVyYm9wYWNrIGlzIGVuYWJsZWQuXCIsbGFiZWw6XCJUdXJib3BhY2tcIix2YWx1ZTpcIkVuYWJsZWRcIn0pOigwLHkuanN4KShyWSx7aW5kZXg6Mix0aXRsZTpcIkxlYXJuIGFib3V0IFR1cmJvcGFjayBhbmQgaG93IHRvIGVuYWJsZSBpdCBpbiB5b3VyIGFwcGxpY2F0aW9uLlwiLGxhYmVsOlwiVHJ5IFR1cmJvcGFja1wiLHZhbHVlOigwLHkuanN4KShyWix7fSksb25DbGljazpmdW5jdGlvbigpe3JldHVybiBfKHJxLlR1cmJvKX19KV19KSwoMCx5LmpzeHMpKFwiZGl2XCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmRpY2F0b3ItZm9vdGVyXCIsY2hpbGRyZW46WygwLHkuanN4KShyWSx7XCJkYXRhLXByZWZlcmVuY2VzXCI6ITAsbGFiZWw6XCJQcmVmZXJlbmNlc1wiLHZhbHVlOigwLHkuanN4KSh0Nix7fSksb25DbGljazpmdW5jdGlvbigpe3JldHVybiBfKHJxLlByZWZlcmVuY2VzKX0saW5kZXg6aD8yOjN9KSxwcm9jZXNzLmVudi5fX05FWFRfREVWVE9PTF9TRUdNRU5UX0VYUExPUkVSPygwLHkuanN4KShyWSx7XCJkYXRhLXNlZ21lbnQtZXhwbG9yZXJcIjohMCxsYWJlbDpcIlJvdXRlIEluZm9cIix2YWx1ZTooMCx5LmpzeCkoclose30pLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gXyhycS5TZWdtZW50RXhwbG9yZXIpfSxpbmRleDpoPzM6NH0pOm51bGxdfSldfSl9KV19KX1mdW5jdGlvbiByWigpe3JldHVybigwLHkuanN4KShcInN2Z1wiLHt4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsd2lkdGg6XCIxNlwiLGhlaWdodDpcIjE2XCIsdmlld0JveDpcIjAgMCAxNiAxNlwiLGZpbGw6XCJub25lXCIsY2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsOlwiIzY2NlwiLGZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNNS41MDAxMSAxLjkzOTQ1TDYuMDMwNDQgMi40Njk3OEwxMC44NTM3IDcuMjkzQzExLjI0NDIgNy42ODM1MyAxMS4yNDQyIDguMzE2NjkgMTAuODUzNyA4LjcwNzIyTDYuMDMwNDQgMTMuNTMwNEw1LjUwMDExIDE0LjA2MDhMNC40Mzk0NSAxMy4wMDAxTDQuOTY5NzggMTIuNDY5OEw5LjQzOTQ1IDguMDAwMTFMNC45Njk3OCAzLjUzMDQ0TDQuNDM5NDUgMy4wMDAxMUw1LjUwMDExIDEuOTM5NDVaXCJ9KX0pfWZ1bmN0aW9uIHJZKGUpe3ZhciBuLHQscj1lLmluZGV4LG89ZS5sYWJlbCxhPWUudmFsdWUsaT1lLm9uQ2xpY2ssbD1lLmhyZWYscz1ySChlLFtcImluZGV4XCIsXCJsYWJlbFwiLFwidmFsdWVcIixcIm9uQ2xpY2tcIixcImhyZWZcIl0pLGM9XCJmdW5jdGlvblwiPT10eXBlb2YgaXx8XCJzdHJpbmdcIj09dHlwZW9mIGwsdT0oMCx4LnVzZUNvbnRleHQpKHJWKSxkPXUuY2xvc2VNZW51LGY9dS5zZWxlY3RlZEluZGV4LHA9dS5zZXRTZWxlY3RlZEluZGV4LGg9Zj09PXI7ZnVuY3Rpb24gZygpe2MmJihudWxsPT1pfHxpKCksZCgpLGwmJndpbmRvdy5vcGVuKGwsXCJfYmxhbmtcIixcIm5vb3BlbmVyLCBub3JlZmVycmVyXCIpKX1yZXR1cm4oMCx5LmpzeHMpKFwiZGl2XCIsKG49ckkoe2NsYXNzTmFtZTpcImRldi10b29scy1pbmRpY2F0b3ItaXRlbVwiLFwiZGF0YS1pbmRleFwiOnIsXCJkYXRhLXNlbGVjdGVkXCI6aCxvbkNsaWNrOmcsb25Nb3VzZU1vdmU6ZnVuY3Rpb24oKXtjJiZ2b2lkIDAhPT1yJiZmIT09ciYmcChyKX0sb25Nb3VzZUxlYXZlOmZ1bmN0aW9uKCl7cmV0dXJuIHAoLTEpfSxvbktleURvd246ZnVuY3Rpb24oZSl7KFwiRW50ZXJcIj09PWUua2V5fHxcIiBcIj09PWUua2V5KSYmZygpfSxyb2xlOmM/XCJtZW51aXRlbVwiOnZvaWQgMCx0YWJJbmRleDpoPzA6LTF9LHMpLHQ9dD17Y2hpbGRyZW46WygwLHkuanN4KShcInNwYW5cIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZGljYXRvci1sYWJlbFwiLGNoaWxkcmVuOm99KSwoMCx5LmpzeCkoXCJzcGFuXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmRpY2F0b3ItdmFsdWVcIixjaGlsZHJlbjphfSldfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX1mdW5jdGlvbiByWChlKXt2YXIgbj1lLmNoaWxkcmVuO3JldHVybigwLHkuanN4cykoXCJzcGFuXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmRpY2F0b3ItaXNzdWUtY291bnRcIixcImRhdGEtaGFzLWlzc3Vlc1wiOm4+MCxjaGlsZHJlbjpbKDAseS5qc3gpKFwic3BhblwiLHtjbGFzc05hbWU6XCJkZXYtdG9vbHMtaW5kaWNhdG9yLWlzc3VlLWNvdW50LWluZGljYXRvclwifSksbl19KX1mdW5jdGlvbiBySyhlKXt2YXIgbix0O3JldHVybigwLHkuanN4KShcInN2Z1wiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3htbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9LGUpLHQ9dD17Y2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtkOlwiTTQuMzA5NjkgOC4zNzg5MUgyLjM4NzgyQzIuOTgwNSAxMC4zNjQ3IDQuODIxODggMTEuODEyNCA3LjAwMDEyIDExLjgxMjVDOC44MTk3NyAxMS44MTI0IDEwLjQwNDMgMTAuODAyNCAxMS4yMjI4IDkuMzA5NTdMMTEuNTM4MiA4LjczNDM4TDEyLjY4OTYgOS4zNjUyM0wxMi4zNzQxIDkuOTQwNDNMMTIuMTY4MSAxMC4yODkxQzExLjA4MTUgMTEuOTkzIDkuMTczMjQgMTMuMTI0OSA3LjAwMDEyIDEzLjEyNUM0LjQyMjA3IDEzLjEyNDkgMi4yMTc0NyAxMS41MzIyIDEuMzEzNiA5LjI3NzM0VjExLjM3NUgwLjAwMTA5ODYzVjcuNzIyNjZMMC4wMTQ3NzA1IDcuNTg5ODRDMC4wNzYwMzA0IDcuMjkwODkgMC4zNDAyNzggNy4wNjY0MSAwLjY1NzM0OSA3LjA2NjQxSDQuMzA5NjlWOC4zNzg5MVpNNy4wMDAxMiAwLjg3NUM5LjU3Njg1IDAuODc1MTE4IDExLjc4MTkgMi40NjU2OSAxMi42ODY2IDQuNzE4NzVWMi42MjVIMTMuOTk5MVY2LjI3NzM0QzEzLjk5OTEgNi42Mzk3NCAxMy43MDUzIDYuOTMzNTQgMTMuMzQyOSA2LjkzMzU5SDkuNjg5NThWNS42MjEwOUgxMS42MTE1QzExLjAxODYgMy42MzU2IDkuMTc4MTMgMi4xODc2MyA3LjAwMDEyIDIuMTg3NUM1LjE3MTMxIDIuMTg3NTcgMy41Nzk1OSAzLjIwNzcxIDIuNzY0NzcgNC43MTI4OUwyLjQ1MjI3IDUuMjkwMDRMMS4yOTc5NyA0LjY2NTA0TDEuNjEwNDcgNC4wODc4OUMyLjY0NTQ3IDIuMTc2MDUgNC42NzA1MiAwLjg3NTA2OCA3LjAwMDEyIDAuODc1WlwiLGZpbGw6XCIjQTM1MjAwXCJ9KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9ZnVuY3Rpb24gclEoZSl7cmV0dXJuIGUuc2hvd0J1dHRvbj8oMCx5LmpzeHMpKFwiYnV0dG9uXCIse2NsYXNzTmFtZTpcInJlc3RhcnQtZGV2LXNlcnZlci1idXR0b25cIixvbkNsaWNrOmZ1bmN0aW9uKCl7ZmV0Y2goXCIvX19uZXh0anNfcmVzdGFydF9kZXY/aW52YWxpZGF0ZVBlcnNpc3RlbnRDYWNoZVwiLHttZXRob2Q6XCJQT1NUXCJ9KS50aGVuKGZ1bmN0aW9uKCl7fSl9LHRpdGxlOlwiQ2xlYXJzIHRoZSBidW5kbGVyIGNhY2hlIGFuZCByZXN0YXJ0cyB0aGUgZGV2IHNlcnZlci4gSGVscGZ1bCBpZiB5b3UgYXJlIHNlZWluZyBzdGFsZSBlcnJvcnMgb3IgY2hhbmdlcyBhcmUgbm90IGFwcGVhcmluZy5cIixjaGlsZHJlbjpbKDAseS5qc3gpKHJLLHt3aWR0aDoxNCxoZWlnaHQ6MTR9KSxcIkNsZWFyIEJ1bmRsZXIgQ2FjaGUgJiBSZXN0YXJ0XCJdfSk6bnVsbH1mdW5jdGlvbiByRygpe3ZhciBlLG4sdD0oZT1bXCJcXG4gIFtkYXRhLW5leHRqcy12ZXJzaW9uLXN0YWxlbmVzcy1pbmRpY2F0b3I9J2ZyZXNoJ10ge1xcbiAgICBmaWxsOiB2YXIoLS1jb2xvci1ncmVlbi04MDApO1xcbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLWdyZWVuLTMwMCk7XFxuICB9XFxuICBbZGF0YS1uZXh0anMtdmVyc2lvbi1zdGFsZW5lc3MtaW5kaWNhdG9yPSdzdGFsZSddIHtcXG4gICAgZmlsbDogdmFyKC0tY29sb3ItYW1iZXItODAwKTtcXG4gICAgc3Ryb2tlOiB2YXIoLS1jb2xvci1hbWJlci0zMDApO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLXZlcnNpb24tc3RhbGVuZXNzLWluZGljYXRvcj0nb3V0ZGF0ZWQnXSB7XFxuICAgIGZpbGw6IHZhcigtLWNvbG9yLXJlZC04MDApO1xcbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLXJlZC0zMDApO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLXZlcnNpb24tc3RhbGVuZXNzLWluZGljYXRvcj0ndW5rbm93biddIHtcXG4gICAgZmlsbDogdmFyKC0tY29sb3ItZ3JheS04MDApO1xcbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLWdyYXktMzAwKTtcXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gckc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBySihlKXt2YXIgbj1lLnZlcnNpb25JbmZvLHQ9bi5zdGFsZW5lc3Mscj1uQihuKSxvPXIudGV4dCxhPXIuaW5kaWNhdG9yQ2xhc3MsaT1yLnRpdGxlO3JldHVybiB0LnN0YXJ0c1dpdGgoXCJzdGFsZVwiKT8oMCx5LmpzeHMpKFwiYVwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlci10YWJcIjohMCx0YXJnZXQ6XCJfYmxhbmtcIixyZWw6XCJub29wZW5lciBub3JlZmVycmVyXCIsaHJlZjpcImh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3ZlcnNpb24tc3RhbGVuZXNzXCIsdGl0bGU6aSxjaGlsZHJlbjpbKDAseS5qc3gpKG5NLHtcImRhdGEtbmV4dGpzLXZlcnNpb24tc3RhbGVuZXNzLWluZGljYXRvclwiOmF9KSwoMCx5LmpzeCkoXCJzcGFuXCIse2NoaWxkcmVuOm99KV19KTooMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZm9vdGVyLXRhYlwiOiEwLHRpdGxlOmksY2hpbGRyZW46WygwLHkuanN4KShuTSx7XCJkYXRhLW5leHRqcy12ZXJzaW9uLXN0YWxlbmVzcy1pbmRpY2F0b3JcIjphfSksKDAseS5qc3gpKFwic3BhblwiLHtjaGlsZHJlbjpvfSldfSl9dmFyIHIwPWVpKHJHKCkpO2Z1bmN0aW9uIHIxKCl7dmFyIGUsbix0PShlPVtcIlxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlcl0ge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTIwMCk7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogMCAwIHZhcigtLXJvdW5kZWQteGwpIHZhcigtLXJvdW5kZWQteGwpO1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZm9vdGVyLXRhYi1ncm91cF0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlci10YWJdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgcGFkZGluZzogMTJweDtcXG4gICAgZ2FwOiA4cHg7XFxuICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7XFxuICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG5cXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgZm9udC1zaXplOiAxMnB4O1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1tb25vc3BhY2UpO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlci10YWItYnVuZGxlci1uYW1lPSdUVVJCT1BBQ0snXSB7XFxuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudChcXG4gICAgICB0byByaWdodCxcXG4gICAgICB2YXIoLS1jb2xvci10dXJib3BhY2stdGV4dC1yZWQpIDAlLFxcbiAgICAgIHZhcigtLWNvbG9yLXR1cmJvcGFjay10ZXh0LWJsdWUpIDEwMCVcXG4gICAgKTtcXG4gICAgYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1xcbiAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDtcXG4gICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgfVxcblwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiByMT1mdW5jdGlvbigpe3JldHVybiB0fSx0fWZ1bmN0aW9uIHIyKGUpe3ZhciBuPWUudmVyc2lvbkluZm8sdD1lLmlzRHJhZ2dhYmxlLHI9ZS5zaG93UmVzdGFydFNlcnZlckJ1dHRvbixvPShwcm9jZXNzLmVudi5fX05FWFRfQlVORExFUnx8XCJXRUJQQUNLXCIpLnRvVXBwZXJDYXNlKCk7cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3RlclwiOiEwLFwiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZHJhZ2dhYmxlXCI6dCxjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlci10YWItZ3JvdXBcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKHJKLHt2ZXJzaW9uSW5mbzpufSksKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlci10YWJcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlci10YWItYnVuZGxlci1uYW1lXCI6byxjaGlsZHJlbjpvfSksKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlci10YWItYnVuZGxlci1zdGF0dXNcIjohMCxjaGlsZHJlbjpcImVuYWJsZWRcIn0pXX0pXX0pLHImJigwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlci10YWItZ3JvdXBcIjohMCxjaGlsZHJlbjooMCx5LmpzeCkoclEse3Nob3dCdXR0b246ITB9KX0pXX0pfXZhciByND1laShyMSgpKTtmdW5jdGlvbiByNShlKXt2YXIgbix0O3JldHVybigwLHkuanN4KShcInN2Z1wiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3dpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixcImFyaWEtaGlkZGVuXCI6ITB9LGUpLHQ9dD17Y2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTE0LjA2MDcgNS40OTk5OUwxMy41MzAzIDYuMDMwMzJMOC43MDcxIDEwLjg1MzVDOC4zMTY1OCAxMS4yNDQxIDcuNjgzNDEgMTEuMjQ0MSA3LjI5Mjg5IDEwLjg1MzVMMi40Njk2NiA2LjAzMDMyTDEuOTM5MzMgNS40OTk5OUwyLjk5OTk5IDQuNDM5MzNMMy41MzAzMiA0Ljk2OTY2TDcuOTk5OTkgOS40MzkzM0wxMi40Njk3IDQuOTY5NjZMMTMgNC40MzkzM0wxNC4wNjA3IDUuNDk5OTlaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpfWZ1bmN0aW9uIHIzKGUpe3ZhciBuLHQscj1lLmNoaWxkcmVuLG89ZS5wcmVmaXgsYT1mdW5jdGlvbihlLG4pe2lmKG51bGw9PWUpcmV0dXJue307dmFyIHQscixvPWZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89e30sYT1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSxuLmluZGV4T2YodCk+PTB8fChvW3RdPWVbdF0pO3JldHVybiBvfShlLG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl0PWFbcl0sIShuLmluZGV4T2YodCk+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSx0KSYmKG9bdF09ZVt0XSl9cmV0dXJuIG99KGUsW1wiY2hpbGRyZW5cIixcInByZWZpeFwiXSk7cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLXNlbGVjdFwiOiEwLGNoaWxkcmVuOltvLCgwLHkuanN4KShcInNlbGVjdFwiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe30sYSksdD10PXtjaGlsZHJlbjpyfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKSwoMCx5LmpzeCkocjUse3dpZHRoOjE2LGhlaWdodDoxNn0pXX0pfWZ1bmN0aW9uIHI2KGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiByOShlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gcjYoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gcjYoZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gcjgoKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3NdIHtcXG4gICAgcGFkZGluZzogMTZweDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uXTpmaXJzdC1jaGlsZCB7XFxuICAgIHBhZGRpbmctdG9wOiAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb25dIHtcXG4gICAgcGFkZGluZzogMTJweCAwO1xcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGdhcDogMjRweDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uXTpsYXN0LWNoaWxkIHtcXG4gICAgcGFkZGluZy1ib3R0b206IDA7XFxuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1oZWFkZXJdIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcXG4gICAgZmxleDogMTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWhlYWRlcl0gbGFiZWwge1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24tZGVzY3JpcHRpb25dIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLXNlbGVjdF0sXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1hY3Rpb24tYnV0dG9uXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGdhcDogOHB4O1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1sZyk7XFxuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICBwYWRkaW5nOiA2cHggOHB4O1xcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1zZWxlY3RdIHtcXG4gICAgJjpmb2N1cy13aXRoaW4ge1xcbiAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICB9XFxuXFxuICAgIHNlbGVjdCB7XFxuICAgICAgYWxsOiB1bnNldDtcXG4gICAgfVxcblxcbiAgICBvcHRpb24ge1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgOmdsb2JhbCguaWNvbikge1xcbiAgICB3aWR0aDogMThweDtcXG4gICAgaGVpZ2h0OiAxOHB4O1xcbiAgICBjb2xvcjogIzY2NjtcXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gcjg9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiByNyhlKXtzd2l0Y2goZS50aGVtZSl7Y2FzZVwic3lzdGVtXCI6cmV0dXJuKDAseS5qc3gpKHJlLHt9KTtjYXNlXCJkYXJrXCI6cmV0dXJuKDAseS5qc3gpKHQ3LHt9KTtjYXNlXCJsaWdodFwiOnJldHVybigwLHkuanN4KSh0OCx7fSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gb2UoZSl7dmFyIG49ZS5kZXZUb29sc1Bvc2l0aW9uLHQ9ZS5zY2FsZSxyPWUuaGFuZGxlUG9zaXRpb25DaGFuZ2Usbz1lLmhhbmRsZVNjYWxlQ2hhbmdlLGE9cjkoKDAseC51c2VTdGF0ZSkoZnVuY3Rpb24oKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgbG9jYWxTdG9yYWdlKXJldHVyblwic3lzdGVtXCI7dmFyIGU9bG9jYWxTdG9yYWdlLmdldEl0ZW0oUSk7cmV0dXJuXCJkYXJrXCI9PT1lfHxcImxpZ2h0XCI9PT1lP2U6XCJzeXN0ZW1cIn0oKSksMiksaT1hWzBdLGw9YVsxXTtmdW5jdGlvbiBzKGUpe3ZhciBuPVwiL19fbmV4dGpzX3Jlc3RhcnRfZGV2XCI7ZSYmKG49XCIvX19uZXh0anNfcmVzdGFydF9kZXY/aW52YWxpZGF0ZVBlcnNpc3RlbnRDYWNoZVwiKSxmZXRjaChuLHttZXRob2Q6XCJQT1NUXCJ9KS50aGVuKGZ1bmN0aW9uKCl7fSl9cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzXCI6ITAsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uXCI6ITAsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWhlYWRlclwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJsYWJlbFwiLHtodG1sRm9yOlwidGhlbWVcIixjaGlsZHJlbjpcIlRoZW1lXCJ9KSwoMCx5LmpzeCkoXCJwXCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1kZXNjcmlwdGlvblwiOiEwLGNoaWxkcmVuOlwiU2VsZWN0IHlvdXIgdGhlbWUgcHJlZmVyZW5jZS5cIn0pXX0pLCgwLHkuanN4cykocjMse2lkOlwidGhlbWVcIixuYW1lOlwidGhlbWVcIixwcmVmaXg6KDAseS5qc3gpKHI3LHt0aGVtZTppfSksdmFsdWU6aSxvbkNoYW5nZTpmdW5jdGlvbihlKXt2YXIgbj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibmV4dGpzLXBvcnRhbFwiKTtpZihuKXtpZihsKGUudGFyZ2V0LnZhbHVlKSxcInN5c3RlbVwiPT09ZS50YXJnZXQudmFsdWUpe24uY2xhc3NMaXN0LnJlbW92ZShcImRhcmtcIiksbi5jbGFzc0xpc3QucmVtb3ZlKFwibGlnaHRcIiksbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oUSk7cmV0dXJufVwiZGFya1wiPT09ZS50YXJnZXQudmFsdWU/KG4uY2xhc3NMaXN0LmFkZChcImRhcmtcIiksbi5jbGFzc0xpc3QucmVtb3ZlKFwibGlnaHRcIiksbG9jYWxTdG9yYWdlLnNldEl0ZW0oUSxcImRhcmtcIikpOihuLmNsYXNzTGlzdC5yZW1vdmUoXCJkYXJrXCIpLG4uY2xhc3NMaXN0LmFkZChcImxpZ2h0XCIpLGxvY2FsU3RvcmFnZS5zZXRJdGVtKFEsXCJsaWdodFwiKSl9fSxjaGlsZHJlbjpbKDAseS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwic3lzdGVtXCIsY2hpbGRyZW46XCJTeXN0ZW1cIn0pLCgwLHkuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcImxpZ2h0XCIsY2hpbGRyZW46XCJMaWdodFwifSksKDAseS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwiZGFya1wiLGNoaWxkcmVuOlwiRGFya1wifSldfSldfSksKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb25cIjohMCxjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24taGVhZGVyXCI6ITAsY2hpbGRyZW46WygwLHkuanN4KShcImxhYmVsXCIse2h0bWxGb3I6XCJwb3NpdGlvblwiLGNoaWxkcmVuOlwiUG9zaXRpb25cIn0pLCgwLHkuanN4KShcInBcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWRlc2NyaXB0aW9uXCI6ITAsY2hpbGRyZW46XCJBZGp1c3QgdGhlIHBsYWNlbWVudCBvZiB5b3VyIGRldiB0b29scy5cIn0pXX0pLCgwLHkuanN4cykocjMse2lkOlwicG9zaXRpb25cIixuYW1lOlwicG9zaXRpb25cIix2YWx1ZTpuLG9uQ2hhbmdlOnIsY2hpbGRyZW46WygwLHkuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcImJvdHRvbS1sZWZ0XCIsY2hpbGRyZW46XCJCb3R0b20gTGVmdFwifSksKDAseS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwiYm90dG9tLXJpZ2h0XCIsY2hpbGRyZW46XCJCb3R0b20gUmlnaHRcIn0pLCgwLHkuanN4KShcIm9wdGlvblwiLHt2YWx1ZTpcInRvcC1sZWZ0XCIsY2hpbGRyZW46XCJUb3AgTGVmdFwifSksKDAseS5qc3gpKFwib3B0aW9uXCIse3ZhbHVlOlwidG9wLXJpZ2h0XCIsY2hpbGRyZW46XCJUb3AgUmlnaHRcIn0pXX0pXX0pLCgwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uXCI6ITAsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWhlYWRlclwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJsYWJlbFwiLHtodG1sRm9yOlwic2l6ZVwiLGNoaWxkcmVuOlwiU2l6ZVwifSksKDAseS5qc3gpKFwicFwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24tZGVzY3JpcHRpb25cIjohMCxjaGlsZHJlbjpcIkFkanVzdCB0aGUgc2l6ZSBvZiB5b3VyIGRldiB0b29scy5cIn0pXX0pLCgwLHkuanN4KShyMyx7aWQ6XCJzaXplXCIsbmFtZTpcInNpemVcIix2YWx1ZTp0LG9uQ2hhbmdlOm8sY2hpbGRyZW46T2JqZWN0LmVudHJpZXMoUykubWFwKGZ1bmN0aW9uKGUpe3ZhciBuPXI5KGUsMiksdD1uWzBdLHI9blsxXTtyZXR1cm4oMCx5LmpzeCkoXCJvcHRpb25cIix7dmFsdWU6cixjaGlsZHJlbjp0fSx0KX0pfSldfSksKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb25cIjohMCxjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24taGVhZGVyXCI6ITAsY2hpbGRyZW46WygwLHkuanN4KShcImxhYmVsXCIse2lkOlwiaGlkZS1kZXYtdG9vbHNcIixjaGlsZHJlbjpcIkhpZGUgRGV2IFRvb2xzIGZvciB0aGlzIHNlc3Npb25cIn0pLCgwLHkuanN4KShcInBcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWRlc2NyaXB0aW9uXCI6ITAsY2hpbGRyZW46XCJIaWRlIERldiBUb29scyB1bnRpbCB5b3UgcmVzdGFydCB5b3VyIGRldiBzZXJ2ZXIsIG9yIDEgZGF5LlwifSldfSksKDAseS5qc3gpKFwiZGl2XCIse2NoaWxkcmVuOigwLHkuanN4cykoXCJidXR0b25cIix7XCJhcmlhLWRlc2NyaWJlZGJ5XCI6XCJoaWRlLWRldi10b29sc1wiLG5hbWU6XCJoaWRlLWRldi10b29sc1wiLFwiZGF0YS1oaWRlLWRldi10b29sc1wiOiEwLFwiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1hY3Rpb24tYnV0dG9uXCI6ITAsb25DbGljazpmdW5jdGlvbigpe2ZldGNoKFwiL19fbmV4dGpzX2Rpc2FibGVfZGV2X2luZGljYXRvclwiLHttZXRob2Q6XCJQT1NUXCJ9KX0sY2hpbGRyZW46WygwLHkuanN4KSh0OSx7fSksKDAseS5qc3gpKFwic3BhblwiLHtjaGlsZHJlbjpcIkhpZGVcIn0pXX0pfSldfSksKDAseS5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvblwiOiEwLGNoaWxkcmVuOigwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWhlYWRlclwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJsYWJlbFwiLHtjaGlsZHJlbjpcIkRpc2FibGUgRGV2IFRvb2xzIGZvciB0aGlzIHByb2plY3RcIn0pLCgwLHkuanN4cykoXCJwXCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1kZXNjcmlwdGlvblwiOiEwLGNoaWxkcmVuOltcIlRvIGRpc2FibGUgdGhpcyBVSSBjb21wbGV0ZWx5LCBzZXRcIixcIiBcIiwoMCx5LmpzeCkoXCJjb2RlXCIse2NsYXNzTmFtZTpcImRldi10b29scy1pbmZvLWNvZGVcIixjaGlsZHJlbjpcImRldkluZGljYXRvcnM6IGZhbHNlXCJ9KSxcIiBpbiB5b3VyIFwiLCgwLHkuanN4KShcImNvZGVcIix7Y2xhc3NOYW1lOlwiZGV2LXRvb2xzLWluZm8tY29kZVwiLGNoaWxkcmVuOlwibmV4dC5jb25maWdcIn0pLFwiIGZpbGUuXCJdfSldfSl9KSwoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvblwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1oZWFkZXJcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKFwibGFiZWxcIix7aWQ6XCJyZXN0YXJ0LWRldi1zZXJ2ZXJcIixjaGlsZHJlbjpcIlJlc3RhcnQgRGV2IFNlcnZlclwifSksKDAseS5qc3gpKFwicFwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24tZGVzY3JpcHRpb25cIjohMCxjaGlsZHJlbjpcIlJlc3RhcnRzIHRoZSBkZXZlbG9wbWVudCBzZXJ2ZXIgd2l0aG91dCBuZWVkaW5nIHRvIGxlYXZlIHRoZSBicm93c2VyLlwifSldfSksKDAseS5qc3gpKFwiZGl2XCIse2NoaWxkcmVuOigwLHkuanN4KShcImJ1dHRvblwiLHtcImFyaWEtZGVzY3JpYmVkYnlcIjpcInJlc3RhcnQtZGV2LXNlcnZlclwiLHRpdGxlOlwiUmVzdGFydHMgdGhlIGRldmVsb3BtZW50IHNlcnZlciB3aXRob3V0IG5lZWRpbmcgdG8gbGVhdmUgdGhlIGJyb3dzZXIuXCIsbmFtZTpcInJlc3RhcnQtZGV2LXNlcnZlclwiLFwiZGF0YS1yZXN0YXJ0LWRldi1zZXJ2ZXJcIjohMCxcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXNldHRpbmdzLXNlY3Rpb24tYWN0aW9uLWJ1dHRvblwiOiEwLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gcyghMSl9LGNoaWxkcmVuOigwLHkuanN4KShcInNwYW5cIix7Y2hpbGRyZW46XCJSZXN0YXJ0XCJ9KX0pfSldfSkscHJvY2Vzcy5lbnYuX19ORVhUX1RVUkJPUEFDS19QRVJTSVNURU5UX0NBQ0hFPygwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uXCI6ITAsY2hpbGRyZW46WygwLHkuanN4cykoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWhlYWRlclwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJsYWJlbFwiLHtpZDpcInJlc2V0LWJ1bmRsZXItY2FjaGVcIixjaGlsZHJlbjpcIlJlc2V0IEJ1bmRsZXIgQ2FjaGVcIn0pLCgwLHkuanN4KShcInBcIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1zZXR0aW5ncy1zZWN0aW9uLWRlc2NyaXB0aW9uXCI6ITAsY2hpbGRyZW46XCJDbGVhcnMgdGhlIGJ1bmRsZXIgY2FjaGUgYW5kIHJlc3RhcnRzIHRoZSBkZXYgc2VydmVyLiBIZWxwZnVsIGlmIHlvdSBhcmUgc2VlaW5nIHN0YWxlIGVycm9ycyBvciBjaGFuZ2VzIGFyZSBub3QgYXBwZWFyaW5nLlwifSldfSksKDAseS5qc3gpKFwiZGl2XCIse2NoaWxkcmVuOigwLHkuanN4KShcImJ1dHRvblwiLHtcImFyaWEtZGVzY3JpYmVkYnlcIjpcInJlc2V0LWJ1bmRsZXItY2FjaGVcIix0aXRsZTpcIkNsZWFycyB0aGUgYnVuZGxlciBjYWNoZSBhbmQgcmVzdGFydHMgdGhlIGRldiBzZXJ2ZXIuIEhlbHBmdWwgaWYgeW91IGFyZSBzZWVpbmcgc3RhbGUgZXJyb3JzIG9yIGNoYW5nZXMgYXJlIG5vdCBhcHBlYXJpbmcuXCIsbmFtZTpcInJlc2V0LWJ1bmRsZXItY2FjaGVcIixcImRhdGEtcmVzZXQtYnVuZGxlci1jYWNoZVwiOiEwLFwiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtc2V0dGluZ3Mtc2VjdGlvbi1hY3Rpb24tYnV0dG9uXCI6ITAsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBzKCEwKX0sY2hpbGRyZW46KDAseS5qc3gpKFwic3BhblwiLHtjaGlsZHJlbjpcIlJlc2V0IENhY2hlXCJ9KX0pfSldfSk6bnVsbF19KX12YXIgb249ZWkocjgoKSk7ZnVuY3Rpb24gb3QoKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyLWZyYW1lLXNrZWxldG9uLWJhcl0ge1xcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTIpO1xcbiAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcXG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KFxcbiAgICAgIDkwZGVnLFxcbiAgICAgIHZhcigtLWNvbG9yLWdyYXktMjAwKSAyNSUsXFxuICAgICAgdmFyKC0tY29sb3ItZ3JheS0xMDApIDUwJSxcXG4gICAgICB2YXIoLS1jb2xvci1ncmF5LTIwMCkgNzUlXFxuICAgICk7XFxuICAgIGJhY2tncm91bmQtc2l6ZTogMjAwJSAxMDAlO1xcbiAgICBhbmltYXRpb246IHNrZWxldG9uLXNoaW1tZXIgMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXItZnJhbWUtc2tlbGV0b24tYmFyPScxJ10ge1xcbiAgICB3aWR0aDogNzUlO1xcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyLWZyYW1lLXNrZWxldG9uLWJhcj0nMiddIHtcXG4gICAgd2lkdGg6IDM2LjUlO1xcbiAgfVxcblxcbiAgQGtleWZyYW1lcyBza2VsZXRvbi1zaGltbWVyIHtcXG4gICAgMCUge1xcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yMDAlIDA7XFxuICAgIH1cXG4gICAgMTAwJSB7XFxuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMjAwJSAwO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKiBSZXNwZWN0IHVzZXIncyBtb3Rpb24gcHJlZmVyZW5jZXMgKi9cXG4gIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XFxuICAgIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXItZnJhbWUtc2tlbGV0b24tYmFyPScxJ10sXFxuICAgIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXItZnJhbWUtc2tlbGV0b24tYmFyPScyJ10ge1xcbiAgICAgIGFuaW1hdGlvbjogbm9uZTtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XFxuICAgIH1cXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBvcigpe3JldHVybigwLHkuanN4cykoeS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtc2lkZWJhci1mcmFtZS1za2VsZXRvbi1iYXJcIjpcIjFcIn0pLCgwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtc2lkZWJhci1mcmFtZS1za2VsZXRvbi1iYXJcIjpcIjJcIn0pXX0pfXZhciBvbz1laShvdCgpKTtmdW5jdGlvbiBvYSgpe3ZhciBlLG4sdD0oZT1bXCJcXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXJdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgZ2FwOiA0cHg7XFxuICAgIHBhZGRpbmc6IDhweDtcXG4gICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgICBtaW4taGVpZ2h0OiAwO1xcblxcbiAgICBAbWVkaWEgKG1heC13aWR0aDogNTc1cHgpIHtcXG4gICAgICBtYXgtd2lkdGg6IDExMnB4O1xcbiAgICB9XFxuXFxuICAgIEBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xcbiAgICAgIG1heC13aWR0aDogMTM4cHg7XFxuICAgICAgd2lkdGg6IDEwMCU7XFxuICAgIH1cXG5cXG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAgICAgbWF4LXdpZHRoOiAxNzIuNXB4O1xcbiAgICAgIHdpZHRoOiAxMDAlO1xcbiAgICB9XFxuXFxuICAgIEBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgICAgIG1heC13aWR0aDogMjMwcHg7XFxuICAgICAgd2lkdGg6IDEwMCU7XFxuICAgIH1cXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXItZnJhbWVdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgcGFkZGluZzogMTBweCA4cHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbGcpO1xcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnMgZWFzZS1pbi1vdXQ7XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMjAwKTtcXG4gICAgfVxcblxcbiAgICAmOmFjdGl2ZSB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS0zMDApO1xcbiAgICB9XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyLWZyYW1lLWFjdGl2ZT0ndHJ1ZSddIHtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDApO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtc2lkZWJhci1mcmFtZS1lcnJvci10eXBlXSB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXItZnJhbWUtc291cmNlXSB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEzKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMTgpO1xcbiAgfVxcblxcbiAgLyogRWxsaXBzaXMgZm9yIGxvbmcgc3RhY2sgZnJhbWUgc291cmNlIG9yIHNtYWxsIGRldmljZXMuICovXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyLWZyYW1lLWVycm9yLXR5cGVdLFxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtc2lkZWJhci1mcmFtZS1zb3VyY2VdIHtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gb2E9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBvaShlKXt2YXIgbj1lLnJ1bnRpbWVFcnJvcnMsdD1lLmFjdGl2ZUlkeCxyPWUuc2V0QWN0aXZlSW5kZXg7cmV0dXJuIDA9PT1uLmxlbmd0aD9udWxsOigwLHkuanN4KShcImFzaWRlXCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyXCI6ITAsY2hpbGRyZW46bi5tYXAoZnVuY3Rpb24oZSxuKXt2YXIgbz1uPT09dDtyZXR1cm4oMCx5LmpzeCkob3Mse3J1bnRpbWVFcnJvcjplLGlkeDpuLGlzQWN0aXZlOm8sc2V0QWN0aXZlSW5kZXg6cn0sbil9KX0pfXZhciBvbD0oMCx4Lm1lbW8pKGZ1bmN0aW9uKGUpe3ZhciBuPWUucnVudGltZUVycm9yLHQ9dGoobikscj0oMCx4LnVzZU1lbW8pKGZ1bmN0aW9uKCl7dmFyIGUsbj10LmZpbmRJbmRleChmdW5jdGlvbihlKXtyZXR1cm4hZS5pZ25vcmVkJiYhIWUub3JpZ2luYWxDb2RlRnJhbWUmJiEhZS5vcmlnaW5hbFN0YWNrRnJhbWV9KTtyZXR1cm4gbnVsbCE9KGU9dFtuXSk/ZTpudWxsfSxbdF0pO2lmKCEobnVsbD09cj92b2lkIDA6ci5vcmlnaW5hbFN0YWNrRnJhbWUpKXJldHVybiBudWxsO3ZhciBvPXR6KG4uZXJyb3Isbi50eXBlKSxhPWVTKHIub3JpZ2luYWxTdGFja0ZyYW1lKTtyZXR1cm4oMCx5LmpzeHMpKHkuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCx5LmpzeCkoXCJzcGFuXCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1zaWRlYmFyLWZyYW1lLWVycm9yLXR5cGVcIjohMCxjaGlsZHJlbjpvfSksKDAseS5qc3gpKFwic3BhblwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtc2lkZWJhci1mcmFtZS1zb3VyY2VcIjohMCxjaGlsZHJlbjphfSldfSl9KSxvcz0oMCx4Lm1lbW8pKGZ1bmN0aW9uKGUpe3ZhciBuPWUucnVudGltZUVycm9yLHQ9ZS5pZHgscj1lLmlzQWN0aXZlLG89ZS5zZXRBY3RpdmVJbmRleDtyZXR1cm4oMCx5LmpzeCkoXCJidXR0b25cIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLXNpZGViYXItZnJhbWVcIjohMCxcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtc2lkZWJhci1mcmFtZS1hY3RpdmVcIjpyLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbyh0KX0sY2hpbGRyZW46KDAseS5qc3gpKHguU3VzcGVuc2Use2ZhbGxiYWNrOigwLHkuanN4KShvcix7fSksY2hpbGRyZW46KDAseS5qc3gpKG9sLHtydW50aW1lRXJyb3I6bn0pfSl9KX0pLG9jPWVpKG9hKCkpO2Z1bmN0aW9uIG91KCl7dmFyIGUsbix0PShlPVtcIlxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbl0ge1xcbiAgICBtYXJnaW46IDhweCAwO1xcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1oZWFkZXJdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgcGFkZGluZzogMTJweDtcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogOHB4IDhweCAwIDA7XFxuICAgIGdhcDogNnB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1pY29uXSB7XFxuICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoXFxuICAgICAgOTBkZWcsXFxuICAgICAgdmFyKC0tY29sb3ItZ3JheS0yMDApIDI1JSxcXG4gICAgICB2YXIoLS1jb2xvci1ncmF5LTEwMCkgNTAlLFxcbiAgICAgIHZhcigtLWNvbG9yLWdyYXktMjAwKSA3NSVcXG4gICAgKTtcXG4gICAgYmFja2dyb3VuZC1zaXplOiAyMDAlIDEwMCU7XFxuICAgIGFuaW1hdGlvbjogc2tlbGV0b24tc2hpbW1lciAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xcbiAgICBmbGV4LXNocmluazogMDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b24taGVhZGVyLWJhcl0ge1xcbiAgICB3aWR0aDogNDIuOSU7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWJ1dHRvbl0ge1xcbiAgICB3aWR0aDogdmFyKC0tc2l6ZS0xNik7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0xNik7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudChcXG4gICAgICA5MGRlZyxcXG4gICAgICB2YXIoLS1jb2xvci1ncmF5LTIwMCkgMjUlLFxcbiAgICAgIHZhcigtLWNvbG9yLWdyYXktMTAwKSA1MCUsXFxuICAgICAgdmFyKC0tY29sb3ItZ3JheS0yMDApIDc1JVxcbiAgICApO1xcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDIwMCUgMTAwJTtcXG4gICAgYW5pbWF0aW9uOiBza2VsZXRvbi1zaGltbWVyIDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XFxuICAgIGZsZXgtc2hyaW5rOiAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1jb250ZW50XSB7XFxuICAgIHBhZGRpbmc6IDEycHg7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWxpbmVdIHtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gICAgYm9yZGVyLXJhZGl1czogMTAwcHg7XFxuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudChcXG4gICAgICA5MGRlZyxcXG4gICAgICB2YXIoLS1jb2xvci1ncmF5LTIwMCkgMjUlLFxcbiAgICAgIHZhcigtLWNvbG9yLWdyYXktMTAwKSA1MCUsXFxuICAgICAgdmFyKC0tY29sb3ItZ3JheS0yMDApIDc1JVxcbiAgICApO1xcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDIwMCUgMTAwJTtcXG4gICAgYW5pbWF0aW9uOiBza2VsZXRvbi1zaGltbWVyIDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XFxuICAgIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b24tbGluZV06bGFzdC1jaGlsZCB7XFxuICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWxpbmUtMV0ge1xcbiAgICB3aWR0aDogMzIuNSU7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWxpbmUtMl0ge1xcbiAgICB3aWR0aDogNTYuOCU7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWxpbmUtM10ge1xcbiAgICB3aWR0aDogMjkuNiU7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1jb250YWluZXJdIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBtYXJnaW4tdG9wOiA4cHg7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1jb3VudC1za2VsZXRvbl0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgd2lkdGg6IHZhcigtLXNpemUtMjApO1xcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoXFxuICAgICAgOTBkZWcsXFxuICAgICAgdmFyKC0tY29sb3ItZ3JheS0yMDApIDI1JSxcXG4gICAgICB2YXIoLS1jb2xvci1ncmF5LTEwMCkgNTAlLFxcbiAgICAgIHZhcigtLWNvbG9yLWdyYXktMjAwKSA3NSVcXG4gICAgKTtcXG4gICAgYmFja2dyb3VuZC1zaXplOiAyMDAlIDEwMCU7XFxuICAgIGFuaW1hdGlvbjogc2tlbGV0b24tc2hpbW1lciAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2staWdub3JlZC1saXN0LXRvZ2dsZS1idXR0b24tc2tlbGV0b25dIHtcXG4gICAgYWxsOiB1bnNldDtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgICBwYWRkaW5nOiA0cHggNnB4O1xcbiAgICBtYXJnaW4tcmlnaHQ6IC02cHg7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1za2VsZXRvbi1iYXJdIHtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTEyKTtcXG4gICAgd2lkdGg6IDE0OHB4O1xcbiAgICBib3JkZXItcmFkaXVzOiAxMDBweDtcXG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KFxcbiAgICAgIDkwZGVnLFxcbiAgICAgIHZhcigtLWNvbG9yLWdyYXktMjAwKSAyNSUsXFxuICAgICAgdmFyKC0tY29sb3ItZ3JheS0xMDApIDUwJSxcXG4gICAgICB2YXIoLS1jb2xvci1ncmF5LTIwMCkgNzUlXFxuICAgICk7XFxuICAgIGJhY2tncm91bmQtc2l6ZTogMjAwJSAxMDAlO1xcbiAgICBhbmltYXRpb246IHNrZWxldG9uLXNoaW1tZXIgMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcXG4gIH1cXG5cXG4gIEBrZXlmcmFtZXMgc2tlbGV0b24tc2hpbW1lciB7XFxuICAgIDAlIHtcXG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjAwJSAwO1xcbiAgICB9XFxuICAgIDEwMCUge1xcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDIwMCUgMDtcXG4gICAgfVxcbiAgfVxcblxcbiAgLyogUmVzcGVjdCB1c2VyJ3MgbW90aW9uIHByZWZlcmVuY2VzICovXFxuICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xcbiAgICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWljb25dLFxcbiAgICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWhlYWRlci1iYXJdLFxcbiAgICBbZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWJ1dHRvbl0sXFxuICAgIFtkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b24tbGluZV0sXFxuICAgIFtkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWNvdW50LXNrZWxldG9uXSxcXG4gICAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stc2tlbGV0b24tYmFyXSB7XFxuICAgICAgYW5pbWF0aW9uOiBub25lO1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMjAwKTtcXG4gICAgfVxcbiAgfVxcblwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiBvdT1mdW5jdGlvbigpe3JldHVybiB0fSx0fWZ1bmN0aW9uIG9kKCl7cmV0dXJuKDAseS5qc3hzKSh5LkZyYWdtZW50LHtjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvblwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWhlYWRlclwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b24taWNvblwiOiEwfSksKDAseS5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWxpbmVcIjohMCxcImRhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1oZWFkZXItYmFyXCI6ITB9KV19KSwoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWNvbnRlbnRcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWxpbmVcIjohMCxcImRhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1saW5lLTFcIjohMH0pLCgwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNvZGVmcmFtZS1za2VsZXRvbi1saW5lXCI6ITAsXCJkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b24tbGluZS0yXCI6ITB9KSwoMCx5LmpzeCkoXCJkaXZcIix7XCJkYXRhLW5leHRqcy1jb2RlZnJhbWUtc2tlbGV0b24tbGluZVwiOiEwLFwiZGF0YS1uZXh0anMtY29kZWZyYW1lLXNrZWxldG9uLWxpbmUtM1wiOiEwfSldfSldfSksKDAseS5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1jb250YWluZXJcIjohMCxjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtY2FsbC1zdGFjay1oZWFkZXJcIjohMCxjaGlsZHJlbjpbKDAseS5qc3hzKShcInBcIix7XCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLXRpdGxlXCI6ITAsY2hpbGRyZW46W1wiQ2FsbCBTdGFja1wiLFwiIFwiLCgwLHkuanN4KShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWNvdW50XCI6ITAsXCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWNvdW50LXNrZWxldG9uXCI6ITB9KV19KSwoMCx5LmpzeCkoXCJidXR0b25cIix7XCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWlnbm9yZWQtbGlzdC10b2dnbGUtYnV0dG9uXCI6ITAsXCJkYXRhLW5leHRqcy1jYWxsLXN0YWNrLWlnbm9yZWQtbGlzdC10b2dnbGUtYnV0dG9uLXNrZWxldG9uXCI6ITAsXCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwiLGNoaWxkcmVuOigwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWNhbGwtc3RhY2stc2tlbGV0b24tYmFyXCI6ITB9KX0pXX0pfSldfSl9dmFyIG9mPWVpKG91KCkpO2Z1bmN0aW9uIG9wKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBvaChlLG4sdCxyLG8sYSxpKXt0cnl7dmFyIGw9ZVthXShpKSxzPWwudmFsdWV9Y2F0Y2goZSl7dChlKTtyZXR1cm59bC5kb25lP24ocyk6UHJvbWlzZS5yZXNvbHZlKHMpLnRoZW4ocixvKX1mdW5jdGlvbiBvZyhlLG4sdCl7cmV0dXJuIG4gaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHt2YWx1ZTp0LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVtuXT10LGV9ZnVuY3Rpb24gb20oKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICBbZGF0YS1uZXh0anMtaXNzdWUtZmVlZGJhY2stYnV0dG9uLWdyb3VwXSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctc21hbGwpO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWlzc3VlLWZlZWRiYWNrLWJ1dHRvbi1ncm91cF0gYnV0dG9uIHtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1pc3N1ZS1mZWVkYmFjay1idXR0b24tZ3JvdXBdIGJ1dHRvbjpmaXJzdC1jaGlsZCB7XFxuICAgIHBhZGRpbmc6IDRweCAzcHggNHB4IDVweDtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKSAwIDAgdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1pc3N1ZS1mZWVkYmFjay1idXR0b24tZ3JvdXBdIGJ1dHRvbjpsYXN0LWNoaWxkIHtcXG4gICAgcGFkZGluZzogNHB4IDVweCA0cHggM3B4O1xcbiAgICBib3JkZXItcmFkaXVzOiAwIHZhcigtLXJvdW5kZWQtZnVsbCkgdmFyKC0tcm91bmRlZC1mdWxsKSAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWlzc3VlLWZlZWRiYWNrLXNlcGFyYXRvcl0ge1xcbiAgICB3aWR0aDogMXB4O1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gb209ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBvdihlKXt2YXIgbix0LHI9ZS5lcnJvckNvZGUsbz0obj0oMCx4LnVzZVN0YXRlKSh7fSksdD0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG4pfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KG4sMil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG9wKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIG9wKGUsbil9fShuLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxhPW9bMF0saT1vWzFdLGw9YVtyXSxzPXByb2Nlc3MuZW52Ll9fTkVYVF9URUxFTUVUUllfRElTQUJMRUQsYz0oMCx4LnVzZUNhbGxiYWNrKShmdW5jdGlvbihlKXt2YXIgbjtyZXR1cm4obj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciB0LHIsbyxhPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJm9bMF0pdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119LGk9T2JqZWN0LmNyZWF0ZSgoXCJmdW5jdGlvblwiPT10eXBlb2YgSXRlcmF0b3I/SXRlcmF0b3I6T2JqZWN0KS5wcm90b3R5cGUpO3JldHVybiBpLm5leHQ9bCgwKSxpLnRocm93PWwoMSksaS5yZXR1cm49bCgyKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGk7ZnVuY3Rpb24gbChsKXtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIGM9W2wsc107aWYodCl0aHJvdyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO2Zvcig7aSYmKGk9MCxjWzBdJiYoYT0wKSksYTspdHJ5e2lmKHQ9MSxyJiYobz0yJmNbMF0/ci5yZXR1cm46Y1swXT9yLnRocm93fHwoKG89ci5yZXR1cm4pJiZvLmNhbGwociksMCk6ci5uZXh0KSYmIShvPW8uY2FsbChyLGNbMV0pKS5kb25lKXJldHVybiBvO3N3aXRjaChyPTAsbyYmKGM9WzImY1swXSxvLnZhbHVlXSksY1swXSl7Y2FzZSAwOmNhc2UgMTpvPWM7YnJlYWs7Y2FzZSA0OnJldHVybiBhLmxhYmVsKysse3ZhbHVlOmNbMV0sZG9uZTohMX07Y2FzZSA1OmEubGFiZWwrKyxyPWNbMV0sYz1bMF07Y29udGludWU7Y2FzZSA3OmM9YS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShvPShvPWEudHJ5cykubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoNj09PWNbMF18fDI9PT1jWzBdKSl7YT0wO2NvbnRpbnVlfWlmKDM9PT1jWzBdJiYoIW98fGNbMV0+b1swXSYmY1sxXTxvWzNdKSl7YS5sYWJlbD1jWzFdO2JyZWFrfWlmKDY9PT1jWzBdJiZhLmxhYmVsPG9bMV0pe2EubGFiZWw9b1sxXSxvPWM7YnJlYWt9aWYobyYmYS5sYWJlbDxvWzJdKXthLmxhYmVsPW9bMl0sYS5vcHMucHVzaChjKTticmVha31vWzJdJiZhLm9wcy5wb3AoKSxhLnRyeXMucG9wKCk7Y29udGludWV9Yz1uLmNhbGwoZSxhKX1jYXRjaChlKXtjPVs2LGVdLHI9MH1maW5hbGx5e3Q9bz0wfWlmKDUmY1swXSl0aHJvdyBjWzFdO3JldHVybnt2YWx1ZTpjWzBdP2NbMV06dm9pZCAwLGRvbmU6ITB9fX19KHRoaXMsZnVuY3Rpb24obil7c3dpdGNoKG4ubGFiZWwpe2Nhc2UgMDppKGZ1bmN0aW9uKG4pe3ZhciB0LG87cmV0dXJuIHQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe29nKGUsbix0W25dKX0pfXJldHVybiBlfSh7fSxuKSxvPW51bGwhPShvPW9nKHt9LHIsZSkpP286e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChvKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobyxlKSl9KSx0fSksbi5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gbi50cnlzLnB1c2goWzEsMywsNF0pLFs0LGZldGNoKFwiXCIuY29uY2F0KHByb2Nlc3MuZW52Ll9fTkVYVF9ST1VURVJfQkFTRVBBVEh8fFwiXCIsXCIvX19uZXh0anNfZXJyb3JfZmVlZGJhY2s/XCIpLmNvbmNhdChuZXcgVVJMU2VhcmNoUGFyYW1zKHtlcnJvckNvZGU6cix3YXNIZWxwZnVsOmUudG9TdHJpbmcoKX0pKSldO2Nhc2UgMjpyZXR1cm4gbi5zZW50KCkub2t8fGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gcmVjb3JkIGZlZWRiYWNrIG9uIHRoZSBzZXJ2ZXIuXCIpLFszLDRdO2Nhc2UgMzpyZXR1cm4gY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byByZWNvcmQgZmVlZGJhY2s6XCIsbi5zZW50KCkpLFszLDRdO2Nhc2UgNDpyZXR1cm5bMl19fSl9LGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixvKXt2YXIgYT1uLmFwcGx5KGUsdCk7ZnVuY3Rpb24gaShlKXtvaChhLHIsbyxpLGwsXCJuZXh0XCIsZSl9ZnVuY3Rpb24gbChlKXtvaChhLHIsbyxpLGwsXCJ0aHJvd1wiLGUpfWkodm9pZCAwKX0pfSkoKX0sW3JdKTtyZXR1cm4oMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtaXNzdWUtZmVlZGJhY2stYnV0dG9uLWdyb3VwXCI6ITAsY2hpbGRyZW46WygwLHkuanN4KShcImJ1dHRvblwiLHtcImFyaWEtZGlzYWJsZWRcIjpzP1widHJ1ZVwiOnZvaWQgMCxcImFyaWEtbGFiZWxcIjpcIk1hcmsgYXMgaGVscGZ1bFwiLG9uQ2xpY2s6cz92b2lkIDA6ZnVuY3Rpb24oKXtyZXR1cm4gYyghMCl9LGNsYXNzTmFtZTooMCxlSi5jeCkoXCJmZWVkYmFjay1idXR0b25cIiwhMD09PWwmJlwidm90ZWRcIiksdGl0bGU6cz9cIkZlZWRiYWNrIGRpc2FibGVkIGR1ZSB0byBzZXR0aW5nIE5FWFRfVEVMRU1FVFJZX0RJU0FCTEVEXCI6dm9pZCAwLHR5cGU6XCJidXR0b25cIixjaGlsZHJlbjooMCx5LmpzeCkobncse1wiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0pfSksKDAseS5qc3gpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtaXNzdWUtZmVlZGJhY2stc2VwYXJhdG9yXCI6ITB9KSwoMCx5LmpzeCkoXCJidXR0b25cIix7XCJhcmlhLWRpc2FibGVkXCI6cz9cInRydWVcIjp2b2lkIDAsXCJhcmlhLWxhYmVsXCI6XCJNYXJrIGFzIG5vdCBoZWxwZnVsXCIsb25DbGljazpzP3ZvaWQgMDpmdW5jdGlvbigpe3JldHVybiBjKCExKX0sY2xhc3NOYW1lOigwLGVKLmN4KShcImZlZWRiYWNrLWJ1dHRvblwiLCExPT09bCYmXCJ2b3RlZFwiKSx0aXRsZTpzP1wiRmVlZGJhY2sgZGlzYWJsZWQgZHVlIHRvIHNldHRpbmcgTkVYVF9URUxFTUVUUllfRElTQUJMRURcIjp2b2lkIDAsdHlwZTpcImJ1dHRvblwiLGNoaWxkcmVuOigwLHkuanN4KShuaix7XCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwiLHN0eWxlOnt0cmFuc2xhdGU6XCIxcHggMXB4XCJ9fSl9KV19KX12YXIgb2I9ZWkob20oKSk7ZnVuY3Rpb24gb3koKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1jb250ZW50LWxheW91dF0ge1xcbiAgICBmbGV4OiAxO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgICBtaW4taGVpZ2h0OiAwO1xcbiAgICBwYWRkaW5nOiAxNHB4O1xcbiAgfVxcblwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiBveT1mdW5jdGlvbigpe3JldHVybiB0fSx0fWZ1bmN0aW9uIG94KGUpe3ZhciBuPWUuZXJyb3IsdD1lLmVycm9yVHlwZSxyPWUubWVzc2FnZSxvPWUuZGVidWdJbmZvLGE9ZS5jaGlsZHJlbixpPWUuZXJyb3JDb2RlLGw9ZS5lbnZpcm9ubWVudE5hbWU7cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtY29udGVudC1sYXlvdXRcIjohMCxjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJuZXh0anMtY29udGFpbmVyLWVycm9ycy1oZWFkZXJcIixjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJuZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX2Vycm9yX3RpdGxlXCIsXCJkYXRhLW5leHRqcy1lcnJvci1jb2RlXCI6aSxjaGlsZHJlbjpbKDAseS5qc3hzKShcInNwYW5cIix7XCJkYXRhLW5leHRqcy1lcnJvci1sYWJlbC1ncm91cFwiOiEwLGNoaWxkcmVuOlsoMCx5LmpzeCkobkwse2Vycm9yVHlwZTp0fSksbCYmKDAseS5qc3gpKG5LLHtlbnZpcm9ubWVudE5hbWU6bH0pXX0pLCgwLHkuanN4KShueCx7ZXJyb3I6bixkZWJ1Z0luZm86byxmZWVkYmFja0J1dHRvbjppJiYoMCx5LmpzeCkob3Yse2Vycm9yQ29kZTppfSl9KV19KSwoMCx5LmpzeCkobnose2Vycm9yTWVzc2FnZTpyfSldfSksYV19KX12YXIgb3c9ZWkob3koKSk7ZnVuY3Rpb24gb2ooZSl7dmFyIG4sdDtyZXR1cm4oMCx5LmpzeCkoXCJzdmdcIiwobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt3aWR0aDpcIjEyXCIsaGVpZ2h0OlwiMTJcIix2aWV3Qm94OlwiMCAwIDEyIDEyXCIsZmlsbDpcIm5vbmVcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9LGUpLHQ9dD17Y2hpbGRyZW46KDAseS5qc3gpKFwicGF0aFwiLHtmaWxsUnVsZTpcImV2ZW5vZGRcIixjbGlwUnVsZTpcImV2ZW5vZGRcIixkOlwiTTMuOTgwNzEgMS4xMjVMMS4xMjUgMy45ODA3MUwxLjEyNSA4LjAxOTI5TDMuOTgwNzEgMTAuODc1SDguMDE5MjlMMTAuODc1IDguMDE5MjlWMy45ODA3MUw4LjAxOTI5IDEuMTI1SDMuOTgwNzFaTTMuODI1MzggMEMzLjYyNjQ3IDAgMy40MzU3IDAuMDc5MDE3NiAzLjI5NTA1IDAuMjE5NjdMMC4yMTk2NyAzLjI5NTA1QzAuMDc5MDE3NiAzLjQzNTcgMCAzLjYyNjQ3IDAgMy44MjUzOFY4LjE3NDYyQzAgOC4zNzM1MyAwLjA3OTAxNzggOC41NjQzIDAuMjE5NjcgOC43MDQ5NUwzLjI5NTA1IDExLjc4MDNDMy40MzU3IDExLjkyMSAzLjYyNjQ3IDEyIDMuODI1MzggMTJIOC4xNzQ2MkM4LjM3MzUzIDEyIDguNTY0MyAxMS45MjEgOC43MDQ5NSAxMS43ODAzTDExLjc4MDMgOC43MDQ5NUMxMS45MjEgOC41NjQzIDEyIDguMzczNTMgMTIgOC4xNzQ2MlYzLjgyNTM4QzEyIDMuNjI2NDcgMTEuOTIxIDMuNDM1NyAxMS43ODAzIDMuMjk1MDVMOC43MDQ5NSAwLjIxOTY3QzguNTY0MyAwLjA3OTAxNzcgOC4zNzM1MyAwIDguMTc0NjIgMEgzLjgyNTM4Wk02LjU2MjUgMi44MTI1VjMuMzc1VjZWNi41NjI1SDUuNDM3NVY2VjMuMzc1VjIuODEyNUg2LjU2MjVaTTYgOUM2LjQxNDIxIDkgNi43NSA4LjY2NDIxIDYuNzUgOC4yNUM2Ljc1IDcuODM1NzkgNi40MTQyMSA3LjUgNiA3LjVDNS41ODU3OSA3LjUgNS4yNSA3LjgzNTc5IDUuMjUgOC4yNUM1LjI1IDguNjY0MjEgNS41ODU3OSA5IDYgOVpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9ZnVuY3Rpb24gb2soKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1lbXB0eV0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4OiAxO1xcbiAgICBwYWRkaW5nOiAxMnB4O1xcbiAgICBtaW4taGVpZ2h0OiAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtZW1wdHktY29udGVudF0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgZmxleDogMTtcXG4gICAgYm9yZGVyOiAxcHggZGFzaGVkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNTAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtZW1wdHktaWNvbl0ge1xcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xcbiAgICBwYWRkaW5nOiA4cHg7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogNnB4O1xcblxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtZW1wdHktdGl0bGVdIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIGZvbnQtc2l6ZTogMTZweDtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LTIwKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC10YWItaXNzdWVzLWVtcHR5LXN1YnRpdGxlXSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIGZvbnQtc2l6ZTogMTRweDtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0LTIxKTtcXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gb2s9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBvQSgpe3JldHVybigwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtZW1wdHlcIjohMCxjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlcy1lbXB0eS1jb250ZW50XCI6ITAsY2hpbGRyZW46WygwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtZW1wdHktaWNvblwiOiEwLGNoaWxkcmVuOigwLHkuanN4KShvaix7d2lkdGg6MTYsaGVpZ2h0OjE2fSl9KSwoMCx5LmpzeCkoXCJoM1wiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtZW1wdHktdGl0bGVcIjohMCxjaGlsZHJlbjpcIk5vIElzc3VlcyBGb3VuZFwifSksKDAseS5qc3gpKFwicFwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXMtZW1wdHktc3VidGl0bGVcIjohMCxjaGlsZHJlbjpcIklzc3VlcyB3aWxsIGFwcGVhciBoZXJlIHdoZW4gdGhleSBvY2N1ci5cIn0pXX0pfSl9dmFyIG9PPWVpKG9rKCkpO2Z1bmN0aW9uIG9DKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBvUygpe3ZhciBlLG4sdD0oZT1bXCJcIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gb1M9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBvRShlKXt2YXIgbj1lLm5vdGVzLHQ9ZS5idWlsZEVycm9yLHI9ZS5oeWRyYXRpb25XYXJuaW5nLG89ZS5lcnJvckRldGFpbHMsYT1lLmFjdGl2ZUVycm9yLGk9ZS5lcnJvclR5cGUsbD1lLmRlYnVnSW5mbyxzPWUuZXJyb3JDb2RlO3JldHVybiB0PygwLHkuanN4KShveix7bWVzc2FnZTp0LGRlYnVnSW5mbzpsfSk6KDAseS5qc3gpKG9fLHtub3RlczpuLGh5ZHJhdGlvbldhcm5pbmc6cixlcnJvckRldGFpbHM6byxhY3RpdmVFcnJvcjphLGVycm9yVHlwZTppLGRlYnVnSW5mbzpsLGVycm9yQ29kZTpzfSl9ZnVuY3Rpb24gb18oZSl7dmFyIG49ZS5ub3Rlcyx0PWUuaHlkcmF0aW9uV2FybmluZyxyPWUuZXJyb3JEZXRhaWxzLG89ZS5hY3RpdmVFcnJvcixhPWUuZXJyb3JUeXBlLGk9ZS5kZWJ1Z0luZm8sbD1lLmVycm9yQ29kZTtyZXR1cm4gbyYmYT8oMCx5LmpzeHMpKG94LHtlcnJvcjpvLmVycm9yLGVycm9yVHlwZTphLG1lc3NhZ2U6by5lcnJvci5tZXNzYWdlLGRlYnVnSW5mbzppLGVycm9yQ29kZTpsLGVudmlyb25tZW50TmFtZTpvLmVycm9yLmVudmlyb25tZW50TmFtZSxjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtjbGFzc05hbWU6XCJlcnJvci1vdmVybGF5LW5vdGVzLWNvbnRhaW5lclwiLGNoaWxkcmVuOltuPygwLHkuanN4KSh5LkZyYWdtZW50LHtjaGlsZHJlbjooMCx5LmpzeCkoXCJwXCIse2lkOlwibmV4dGpzX19jb250YWluZXJfZXJyb3JzX19ub3Rlc1wiLGNsYXNzTmFtZTpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fbm90ZXNcIixjaGlsZHJlbjpufSl9KTpudWxsLHQ/KDAseS5qc3gpKFwicFwiLHtpZDpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fbGlua1wiLGNsYXNzTmFtZTpcIm5leHRqc19fY29udGFpbmVyX2Vycm9yc19fbGlua1wiLGNoaWxkcmVuOigwLHkuanN4KShlYix7dGV4dDpcIlNlZSBtb3JlIGluZm8gaGVyZTogXCIuY29uY2F0KG5wKX0pfSk6bnVsbF19KSwobnVsbD09cj92b2lkIDA6ci5yZWFjdE91dHB1dENvbXBvbmVudERpZmYpPygwLHkuanN4KSh0aCx7cmVhY3RPdXRwdXRDb21wb25lbnREaWZmOnIucmVhY3RPdXRwdXRDb21wb25lbnREaWZmfHxcIlwifSk6bnVsbCwoMCx5LmpzeCkoeC5TdXNwZW5zZSx7ZmFsbGJhY2s6KDAseS5qc3gpKG9kLHt9KSxjaGlsZHJlbjooMCx5LmpzeCkob1Ase2Vycm9yOm99LG8uaWQudG9TdHJpbmcoKSl9KV19KTooMCx5LmpzeCkob0Ese30pfWZ1bmN0aW9uIG9QKGUpe3ZhciBuLHQscj1lLmVycm9yLG89KG49KDAseC51c2VTdGF0ZSkoITEpLHQ9MixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShuKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShuLDIpfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBvQyhlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBvQyhlLG4pfX0obix0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSksYT1vWzBdLGk9b1sxXSxsPXRqKHIpLHM9KDAseC51c2VNZW1vKShmdW5jdGlvbigpe3JldHVybiBsLnJlZHVjZShmdW5jdGlvbihlLG4pe3JldHVybiBlKyArISFuLmlnbm9yZWR9LDApfSxbbF0pLGM9KDAseC51c2VNZW1vKShmdW5jdGlvbigpe3ZhciBlLG49bC5maW5kSW5kZXgoZnVuY3Rpb24oZSl7cmV0dXJuIWUuaWdub3JlZCYmISFlLm9yaWdpbmFsQ29kZUZyYW1lJiYhIWUub3JpZ2luYWxTdGFja0ZyYW1lfSk7cmV0dXJuIG51bGwhPShlPWxbbl0pP2U6bnVsbH0sW2xdKTtyZXR1cm4oMCx5LmpzeHMpKHkuRnJhZ21lbnQse2NoaWxkcmVuOltjJiZjLm9yaWdpbmFsU3RhY2tGcmFtZSYmYy5vcmlnaW5hbENvZGVGcmFtZSYmKDAseS5qc3gpKGVxLHtzdGFja0ZyYW1lOmMub3JpZ2luYWxTdGFja0ZyYW1lLGNvZGVGcmFtZTpjLm9yaWdpbmFsQ29kZUZyYW1lfSksbC5sZW5ndGg+MCYmKDAseS5qc3gpKHRsLHtmcmFtZXM6bCxpc0lnbm9yZUxpc3RPcGVuOmEsb25Ub2dnbGVJZ25vcmVMaXN0OmZ1bmN0aW9uKCl7cmV0dXJuIGkoIWEpfSxpZ25vcmVkRnJhbWVzVGFsbHk6c30pXX0pfWZ1bmN0aW9uIG96KGUpe3ZhciBuPWUubWVzc2FnZSx0PWUuZGVidWdJbmZvLHI9RXJyb3Iobiksbz0oMCx4LnVzZU1lbW8pKGZ1bmN0aW9uKCl7cmV0dXJuIHR0KG4pfHxcIkZhaWxlZCB0byBjb21waWxlXCJ9LFtuXSk7cmV0dXJuKDAseS5qc3gpKG94LHtlcnJvclR5cGU6XCJCdWlsZCBFcnJvclwiLGVycm9yOnIsbWVzc2FnZTpvLGRlYnVnSW5mbzp0LGNoaWxkcmVuOigwLHkuanN4KSh0bix7Y29udGVudDpufSl9KX12YXIgb0w9ZWkob1MoKSk7ZnVuY3Rpb24gb1QoKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtdGFiLWlzc3Vlc10ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4OiAxO1xcbiAgICBtaW4taGVpZ2h0OiAwO1xcbiAgfVxcblwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiBvVD1mdW5jdGlvbigpe3JldHVybiB0fSx0fWZ1bmN0aW9uIG9SKGUpe3ZhciBuPWUuZGVidWdJbmZvLHQ9ZS5ydW50aW1lRXJyb3JzLHI9ZS5nZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlscyxvPWUuYnVpbGRFcnJvcixhPXRTKHtydW50aW1lRXJyb3JzOnQsZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHM6cn0pLGk9YS5lcnJvckNvZGUsbD1hLmVycm9yVHlwZSxzPWEuaHlkcmF0aW9uV2FybmluZyxjPWEuYWN0aXZlRXJyb3IsdT1hLmFjdGl2ZUlkeCxkPWEuc2V0QWN0aXZlSW5kZXgsZj1hLm5vdGVzLHA9YS5lcnJvckRldGFpbHM7cmV0dXJuKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLXRhYi1pc3N1ZXNcIjohMCxjaGlsZHJlbjpbbz9udWxsOigwLHkuanN4KShvaSx7cnVudGltZUVycm9yczp0LGVycm9yVHlwZTpsLGFjdGl2ZUlkeDp1LHNldEFjdGl2ZUluZGV4OmR9KSwoMCx5LmpzeCkob0Use2J1aWxkRXJyb3I6byxub3RlczpmLGh5ZHJhdGlvbldhcm5pbmc6cyxlcnJvckRldGFpbHM6cCxhY3RpdmVFcnJvcjpjLGVycm9yVHlwZTpsLGRlYnVnSW5mbzpuLGVycm9yQ29kZTppfSldfSl9dmFyIG9OPWVpKG9UKCkpLG9EPXByb2Nlc3MuZW52Ll9fTkVYVF9ERVZUT09MX1NFR01FTlRfRVhQTE9SRVI/X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvY29tcG9uZW50cy9vdmVydmlldy9zZWdtZW50LWV4cGxvcmVyLnRzeFwiKS51OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9O2Z1bmN0aW9uIG9CKGUpe3ZhciBuPWUucm91dGVyVHlwZSx0PWUucGFnZTtyZXR1cm4oMCx5LmpzeCkob0Qse2lzQXBwUm91dGVyOlwiYXBwXCI9PT1uLHBhZ2U6dH0pfWZ1bmN0aW9uIG9NKGUpe3ZhciBuPWUucm91dGVyVHlwZSx0PWUucGFnZTtyZXR1cm4oMCx5LmpzeCkob0Ise3JvdXRlclR5cGU6bixwYWdlOnR9KX1mdW5jdGlvbiBvSShlKXt2YXIgbj1lLmFjdGl2ZVRhYix0PWUuZGV2VG9vbHNQb3NpdGlvbixyPWUuc2NhbGUsbz1lLnJvdXRlclR5cGUsYT1lLmhhbmRsZVBvc2l0aW9uQ2hhbmdlLGk9ZS5oYW5kbGVTY2FsZUNoYW5nZSxsPWUuZGVidWdJbmZvLHM9ZS5ydW50aW1lRXJyb3JzLGM9ZS5nZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlscyx1PWUuYnVpbGRFcnJvcixkPWUucGFnZTtzd2l0Y2gobil7Y2FzZVwic2V0dGluZ3NcIjpyZXR1cm4oMCx5LmpzeCkob2Use2RldlRvb2xzUG9zaXRpb246dCxzY2FsZTpyLGhhbmRsZVBvc2l0aW9uQ2hhbmdlOmEsaGFuZGxlU2NhbGVDaGFuZ2U6aX0pO2Nhc2VcInJvdXRlXCI6cmV0dXJuKDAseS5qc3gpKG9NLHtyb3V0ZXJUeXBlOm8scGFnZTpkfSk7Y2FzZVwiaXNzdWVzXCI6cmV0dXJuKDAseS5qc3gpKG9SLHtkZWJ1Z0luZm86bCxydW50aW1lRXJyb3JzOnMsZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHM6YyxidWlsZEVycm9yOnV9KTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiBvSChlKXt2YXIgbix0O3JldHVybigwLHkuanN4KShcInN2Z1wiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3dpZHRoOlwiMTJcIixoZWlnaHQ6XCIxMlwiLHZpZXdCb3g6XCIwIDAgMTQgMTRcIixmaWxsOlwibm9uZVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn0sZSksdD10PXtjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMy4wODg4OSAxMS44Mzg0TDIuNjI0ODYgMTIuMzAyNEwxLjY5Njc4IDExLjM3NDRMMi4xNjA4MiAxMC45MTAzTDYuMDcxNzggNi45OTkzN0wyLjE2MDgyIDMuMDg4NDFMMS42OTY3OCAyLjYyNDM3TDIuNjI0ODYgMS42OTYyOUwzLjA4ODg5IDIuMTYwMzNMNi45OTk4NiA2LjA3MTI5TDEwLjkxMDggMi4xNjAzM0wxMS4zNzQ5IDEuNjk2MjlMMTIuMzAyOSAyLjYyNDM3TDExLjgzODkgMy4wODg0MUw3LjkyNzkzIDYuOTk5MzdMMTEuODM4OSAxMC45MTAzTDEyLjMwMjkgMTEuMzc0NEwxMS4zNzQ5IDEyLjMwMjRMMTAuOTEwOCAxMS44Mzg0TDYuOTk5ODYgNy45Mjc0NEwzLjA4ODg5IDExLjgzODRaXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifSl9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpOihmdW5jdGlvbihlLG4pe3ZhciB0PU9iamVjdC5rZXlzKGUpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7dC5wdXNoLmFwcGx5KHQscil9cmV0dXJuIHR9KShPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkpfSksbikpfWZ1bmN0aW9uIG9GKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBvVShlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gb1YoZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfWZ1bmN0aW9uIG9xKGUsbil7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgdCxyLG89ZnVuY3Rpb24oZSxuKXtpZihudWxsPT1lKXJldHVybnt9O3ZhciB0LHIsbz17fSxhPU9iamVjdC5rZXlzKGUpO2ZvcihyPTA7cjxhLmxlbmd0aDtyKyspdD1hW3JdLG4uaW5kZXhPZih0KT49MHx8KG9bdF09ZVt0XSk7cmV0dXJuIG99KGUsbik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXQ9YVtyXSwhKG4uaW5kZXhPZih0KT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHQpJiYob1t0XT1lW3RdKX1yZXR1cm4gb31mdW5jdGlvbiBvVyhlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gb0YoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gb0YoZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gbyQoKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICAgICAgICAgIFtkYXRhLW5leHQtYmFkZ2Utcm9vdF0ge1xcbiAgICAgICAgICAgIC0tdGltaW5nOiBjdWJpYy1iZXppZXIoMC4yMywgMC44OCwgMC4yNiwgMC45Mik7XFxuICAgICAgICAgICAgLS1kdXJhdGlvbi1sb25nOiAyNTBtcztcXG4gICAgICAgICAgICAtLWNvbG9yLW91dGVyLWJvcmRlcjogIzE3MTcxNztcXG4gICAgICAgICAgICAtLWNvbG9yLWlubmVyLWJvcmRlcjogaHNsYSgwLCAwJSwgMTAwJSwgMC4xNCk7XFxuICAgICAgICAgICAgLS1jb2xvci1ob3Zlci1hbHBoYS1zdWJ0bGU6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMTMpO1xcbiAgICAgICAgICAgIC0tY29sb3ItaG92ZXItYWxwaGEtZXJyb3I6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMik7XFxuICAgICAgICAgICAgLS1jb2xvci1ob3Zlci1hbHBoYS1lcnJvci0yOiBoc2xhKDAsIDAlLCAxMDAlLCAwLjI1KTtcXG4gICAgICAgICAgICAtLW1hcmstc2l6ZTogY2FsYyh2YXIoLS1zaXplKSAtIHZhcigtLXNpemUtMikgKiAyKTtcXG5cXG4gICAgICAgICAgICAtLWZvY3VzLWNvbG9yOiB2YXIoLS1jb2xvci1ibHVlLTgwMCk7XFxuICAgICAgICAgICAgLS1mb2N1cy1yaW5nOiAycHggc29saWQgdmFyKC0tZm9jdXMtY29sb3IpO1xcblxcbiAgICAgICAgICAgICY6aGFzKFtkYXRhLW5leHQtYmFkZ2VdW2RhdGEtZXJyb3I9J3RydWUnXSkge1xcbiAgICAgICAgICAgICAgLS1mb2N1cy1jb2xvcjogI2ZmZjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtZGlzYWJsZWQtaWNvbl0ge1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiA0cHg7XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtbmV4dC1iYWRnZV0ge1xcbiAgICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgICAgICAgICAgIHdpZHRoOiB2YXIoLS1zaXplKTtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUpO1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpO1xcbiAgICAgICAgICAgIGJveC1zaGFkb3c6XFxuICAgICAgICAgICAgICAwIDAgMCAxcHggdmFyKC0tY29sb3Itb3V0ZXItYm9yZGVyKSxcXG4gICAgICAgICAgICAgIGluc2V0IDAgMCAwIDFweCB2YXIoLS1jb2xvci1pbm5lci1ib3JkZXIpLFxcbiAgICAgICAgICAgICAgMHB4IDE2cHggMzJweCAtOHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7XFxuICAgICAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDQ4cHgpO1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgICAgIHNjYWxlOiAxO1xcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgICAgICAgICAgd2lsbC1jaGFuZ2U6IHNjYWxlLCBib3gtc2hhZG93LCB3aWR0aCwgYmFja2dyb3VuZDtcXG4gICAgICAgICAgICB0cmFuc2l0aW9uOlxcbiAgICAgICAgICAgICAgc2NhbGUgdmFyKC0tZHVyYXRpb24tc2hvcnQpIHZhcigtLXRpbWluZyksXFxuICAgICAgICAgICAgICB3aWR0aCB2YXIoLS1kdXJhdGlvbi1sb25nKSB2YXIoLS10aW1pbmcpLFxcbiAgICAgICAgICAgICAgYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1sb25nKSB2YXIoLS10aW1pbmcpLFxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1zaG9ydCkgZWFzZTtcXG5cXG4gICAgICAgICAgICAmOmFjdGl2ZVtkYXRhLWVycm9yPSdmYWxzZSddIHtcXG4gICAgICAgICAgICAgIHNjYWxlOiAwLjk1O1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAmW2RhdGEtYW5pbWF0ZT0ndHJ1ZSddOm5vdCg6aG92ZXIpIHtcXG4gICAgICAgICAgICAgIHNjYWxlOiAxLjAyO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAmW2RhdGEtZXJyb3I9J2ZhbHNlJ106aGFzKFtkYXRhLW5leHQtbWFya106Zm9jdXMtdmlzaWJsZSkge1xcbiAgICAgICAgICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgICAgICAgICAgICBvdXRsaW5lLW9mZnNldDogM3B4O1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAmW2RhdGEtZXJyb3I9J3RydWUnXSB7XFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjY2EyYTMwO1xcbiAgICAgICAgICAgICAgLS1jb2xvci1pbm5lci1ib3JkZXI6ICNlNTQ4NGQ7XFxuXFxuICAgICAgICAgICAgICBbZGF0YS1uZXh0LW1hcmtdIHtcXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItaG92ZXItYWxwaGEtZXJyb3IpO1xcbiAgICAgICAgICAgICAgICBvdXRsaW5lLW9mZnNldDogMHB4O1xcblxcbiAgICAgICAgICAgICAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgICAgICAgICAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMXB4O1xcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICY6aG92ZXIge1xcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWhvdmVyLWFscGhhLWVycm9yLTIpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICZbZGF0YS1lcnJvci1leHBhbmRlZD0nZmFsc2UnXVtkYXRhLWVycm9yPSd0cnVlJ10gfiBbZGF0YS1kb3RdIHtcXG4gICAgICAgICAgICAgIHNjYWxlOiAxO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICA+IGRpdiB7XFxuICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1pc3N1ZXMtY29sbGFwc2VdOmZvY3VzLXZpc2libGUge1xcbiAgICAgICAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWlzc3Vlc106aGFzKFtkYXRhLWlzc3Vlcy1vcGVuXTpmb2N1cy12aXNpYmxlKSB7XFxuICAgICAgICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtZG90XSB7XFxuICAgICAgICAgICAgY29udGVudDogJyc7XFxuICAgICAgICAgICAgd2lkdGg6IHZhcigtLXNpemUtOCk7XFxuICAgICAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTgpO1xcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7XFxuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHZhcigtLWNvbG9yLW91dGVyLWJvcmRlcik7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgICAgICB0b3A6IDJweDtcXG4gICAgICAgICAgICByaWdodDogMHB4O1xcbiAgICAgICAgICAgIHNjYWxlOiAwO1xcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHNjYWxlIDIwMG1zIHZhcigtLXRpbWluZyk7XFxuICAgICAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogdmFyKC0tZHVyYXRpb24tc2hvcnQpO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWlzc3Vlc10ge1xcbiAgICAgICAgICAgIC0tcGFkZGluZy1sZWZ0OiA4cHg7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBnYXA6IDJweDtcXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogOHB4O1xcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDhweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMzIpO1xcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMnB4O1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1zaG9ydCkgZWFzZTtcXG5cXG4gICAgICAgICAgICAmOmhhcyhbZGF0YS1pc3N1ZXMtb3Blbl06aG92ZXIpIHtcXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWhvdmVyLWFscGhhLWVycm9yKTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgJjpoYXMoW2RhdGEtaXNzdWVzLWNvbGxhcHNlXSkge1xcbiAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogY2FsYyh2YXIoLS1wYWRkaW5nLWxlZnQpIC8gMik7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIFtkYXRhLWNyb3NzXSB7XFxuICAgICAgICAgICAgICB0cmFuc2xhdGU6IDBweCAtMXB4O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1pc3N1ZXMtb3Blbl0ge1xcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMyk7XFxuICAgICAgICAgICAgY29sb3I6IHdoaXRlO1xcbiAgICAgICAgICAgIHdpZHRoOiBmaXQtY29udGVudDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBnYXA6IDJweDtcXG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgICAgICAgIG1hcmdpbjogMDtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0zNik7XFxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgICAgICAgICB6LWluZGV4OiAyO1xcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuXFxuICAgICAgICAgICAgJjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb2xsYXBzZV0ge1xcbiAgICAgICAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTI0KTtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMjQpO1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1zaG9ydCkgZWFzZTtcXG5cXG4gICAgICAgICAgICAmOmhvdmVyIHtcXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWhvdmVyLWFscGhhLWVycm9yKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtY3Jvc3NdIHtcXG4gICAgICAgICAgICBjb2xvcjogI2ZmZjtcXG4gICAgICAgICAgICB3aWR0aDogdmFyKC0tc2l6ZS0xMik7XFxuICAgICAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTEyKTtcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBbZGF0YS1uZXh0LW1hcmtdIHtcXG4gICAgICAgICAgICB3aWR0aDogdmFyKC0tbWFyay1zaXplKTtcXG4gICAgICAgICAgICBoZWlnaHQ6IHZhcigtLW1hcmstc2l6ZSk7XFxuICAgICAgICAgICAgbWFyZ2luOiAwIDJweDtcXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLWxvbmcpIHZhcigtLXRpbWluZyk7XFxuXFxuICAgICAgICAgICAgJjpmb2N1cy12aXNpYmxlIHtcXG4gICAgICAgICAgICAgIG91dGxpbmU6IDA7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICY6aG92ZXIge1xcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItaG92ZXItYWxwaGEtc3VidGxlKTtcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgc3ZnIHtcXG4gICAgICAgICAgICAgIGZsZXgtc2hyaW5rOiAwO1xcbiAgICAgICAgICAgICAgd2lkdGg6IHZhcigtLXNpemUtNDApO1xcbiAgICAgICAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTQwKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtaXNzdWVzLWNvdW50LWFuaW1hdGlvbl0ge1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7XFxuICAgICAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlciBjZW50ZXI7XFxuICAgICAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcXG5cXG4gICAgICAgICAgICAmW2RhdGEtYW5pbWF0ZT0nZmFsc2UnXSB7XFxuICAgICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtZXhpdF0sXFxuICAgICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtZW50ZXJdIHtcXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwbXM7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgID4gKiB7XFxuICAgICAgICAgICAgICBncmlkLWFyZWE6IDEgLyAxO1xcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtZXhpdF0ge1xcbiAgICAgICAgICAgICAgYW5pbWF0aW9uOiBmYWRlT3V0IDMwMG1zIHZhcigtLXRpbWluZykgZm9yd2FyZHM7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1lbnRlcl0ge1xcbiAgICAgICAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW4gMzAwbXMgdmFyKC0tdGltaW5nKSBmb3J3YXJkcztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgW2RhdGEtaXNzdWVzLWNvdW50LXBsdXJhbF0ge1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgICAgICAgICAmW2RhdGEtYW5pbWF0ZT0ndHJ1ZSddIHtcXG4gICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZUluIDMwMG1zIHZhcigtLXRpbWluZykgZm9yd2FyZHM7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIC5wYXRoMCB7XFxuICAgICAgICAgICAgYW5pbWF0aW9uOiBkcmF3MCAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIC5wYXRoMSB7XFxuICAgICAgICAgICAgYW5pbWF0aW9uOiBkcmF3MSAxLjVzIGVhc2Utb3V0IGluZmluaXRlO1xcbiAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheTogMC4zcztcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICAucGF1c2VkIHtcXG4gICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBAa2V5ZnJhbWVzIGZhZGVJbiB7XFxuICAgICAgICAgICAgMCUge1xcbiAgICAgICAgICAgICAgb3BhY2l0eTogMDtcXG4gICAgICAgICAgICAgIGZpbHRlcjogYmx1cigycHgpO1xcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDhweCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIDEwMCUge1xcbiAgICAgICAgICAgICAgb3BhY2l0eTogMTtcXG4gICAgICAgICAgICAgIGZpbHRlcjogYmx1cigwcHgpO1xcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBAa2V5ZnJhbWVzIGZhZGVPdXQge1xcbiAgICAgICAgICAgIDAlIHtcXG4gICAgICAgICAgICAgIG9wYWNpdHk6IDE7XFxuICAgICAgICAgICAgICBmaWx0ZXI6IGJsdXIoMHB4KTtcXG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgMTAwJSB7XFxuICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMnB4KTtcXG4gICAgICAgICAgICAgIGZpbHRlcjogYmx1cigycHgpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcblxcbiAgICAgICAgICBAa2V5ZnJhbWVzIGRyYXcwIHtcXG4gICAgICAgICAgICAwJSxcXG4gICAgICAgICAgICAyNSUge1xcbiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0yOS42O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAyNSUsXFxuICAgICAgICAgICAgNTAlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICA1MCUsXFxuICAgICAgICAgICAgNzUlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICA3NSUsXFxuICAgICAgICAgICAgMTAwJSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMjkuNjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgQGtleWZyYW1lcyBkcmF3MSB7XFxuICAgICAgICAgICAgMCUsXFxuICAgICAgICAgICAgMjAlIHtcXG4gICAgICAgICAgICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTEuNjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgMjAlLFxcbiAgICAgICAgICAgIDUwJSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgNTAlLFxcbiAgICAgICAgICAgIDc1JSB7XFxuICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgNzUlLFxcbiAgICAgICAgICAgIDEwMCUge1xcbiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDExLjY7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuXFxuICAgICAgICAgIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbikge1xcbiAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1leGl0XSxcXG4gICAgICAgICAgICBbZGF0YS1pc3N1ZXMtY291bnQtZW50ZXJdLFxcbiAgICAgICAgICAgIFtkYXRhLWlzc3Vlcy1jb3VudC1wbHVyYWxdIHtcXG4gICAgICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMG1zICFpbXBvcnRhbnQ7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICBcIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gbyQ9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBvWihlKXt2YXIgbj1lLmRpc2FibGVkLHQ9ZS5pc3N1ZUNvdW50LHI9ZS5pc0RldkJ1aWxkaW5nLG89ZS5pc0RldlJlbmRlcmluZyxhPWUuaXNCdWlsZEVycm9yLGk9ZS5vblRyaWdnZXJDbGljayxsPWUudG9nZ2xlRXJyb3JPdmVybGF5LHM9ZS5zY2FsZSxjPW9xKGUsW1wiZGlzYWJsZWRcIixcImlzc3VlQ291bnRcIixcImlzRGV2QnVpbGRpbmdcIixcImlzRGV2UmVuZGVyaW5nXCIsXCJpc0J1aWxkRXJyb3JcIixcIm9uVHJpZ2dlckNsaWNrXCIsXCJ0b2dnbGVFcnJvck92ZXJsYXlcIixcInNjYWxlXCJdKSx1PXQ+MCxkPW9XKCgwLHgudXNlU3RhdGUpKHUpLDIpLGY9ZFswXSxwPWRbMV0saD1vVygoMCx4LnVzZVN0YXRlKSghMSksMiksZz1oWzBdLG09aFsxXSx2PXRNKHQsMTUwKSxiPSgwLHgudXNlUmVmKShudWxsKSx3PSgwLHgudXNlUmVmKShudWxsKSxqPXRGKHcpLGs9dEQocnx8byksQT1mfHxuO3JldHVybigwLHgudXNlRWZmZWN0KShmdW5jdGlvbigpe3AodSl9LFt1XSksKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dC1iYWRnZS1yb290XCI6ITAsc3R5bGU6e1wiLS1zaXplXCI6XCJcIi5jb25jYXQoMzYvKHZvaWQgMD09PXM/MTpzKSxcInB4XCIpLFwiLS1kdXJhdGlvbi1zaG9ydFwiOlwiXCIuY29uY2F0KDE1MCxcIm1zXCIpLGRpc3BsYXk6biYmKCF1fHxnKT9cIm5vbmVcIjpcImJsb2NrXCJ9LGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJzdHlsZVwiLHtjaGlsZHJlbjplaShvJCgpKX0pLCgwLHkuanN4KShcImRpdlwiLHtcImRhdGEtbmV4dC1iYWRnZVwiOiEwLFwiZGF0YS1lcnJvclwiOnUsXCJkYXRhLWVycm9yLWV4cGFuZGVkXCI6QSxcImRhdGEtYW5pbWF0ZVwiOnYsc3R5bGU6e3dpZHRoOjA9PT1qP1wiYXV0b1wiOmp9LGNoaWxkcmVuOigwLHkuanN4cykoXCJkaXZcIix7cmVmOncsY2hpbGRyZW46WyFuJiYoMCx5LmpzeCkoXCJidXR0b25cIixvVihvVSh7cmVmOmIsXCJkYXRhLW5leHQtbWFya1wiOiEwLFwiZGF0YS1uZXh0LW1hcmstbG9hZGluZ1wiOmssb25DbGljazppfSxjKSx7Y2hpbGRyZW46KDAseS5qc3gpKG9YLHtpc0xvYWRpbmc6ayxpc0RldkJ1aWxkaW5nOnJ9KX0pKSxBJiYoMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1pc3N1ZXNcIjohMCxjaGlsZHJlbjpbKDAseS5qc3hzKShcImJ1dHRvblwiLHtcImRhdGEtaXNzdWVzLW9wZW5cIjohMCxcImFyaWEtbGFiZWxcIjpcIk9wZW4gaXNzdWVzIG92ZXJsYXlcIixvbkNsaWNrOmwsY2hpbGRyZW46W24mJigwLHkuanN4KShcImRpdlwiLHtcImRhdGEtZGlzYWJsZWQtaWNvblwiOiEwLGNoaWxkcmVuOigwLHkuanN4KShvaix7fSl9KSwoMCx5LmpzeCkob1kse2FuaW1hdGU6dixcImRhdGEtaXNzdWVzLWNvdW50LWFuaW1hdGlvblwiOiEwLGNoaWxkcmVuOnR9LHQpLFwiIFwiLCgwLHkuanN4cykoXCJkaXZcIix7Y2hpbGRyZW46W1wiSXNzdWVcIix0PjEmJigwLHkuanN4KShcInNwYW5cIix7XCJhcmlhLWhpZGRlblwiOiEwLFwiZGF0YS1pc3N1ZXMtY291bnQtcGx1cmFsXCI6ITAsXCJkYXRhLWFuaW1hdGVcIjp2JiYyPT09dCxjaGlsZHJlbjpcInNcIn0pXX0pXX0pLCFhJiYoMCx5LmpzeCkoXCJidXR0b25cIix7XCJkYXRhLWlzc3Vlcy1jb2xsYXBzZVwiOiEwLFwiYXJpYS1sYWJlbFwiOlwiQ29sbGFwc2UgaXNzdWVzIGJhZGdlXCIsb25DbGljazpmdW5jdGlvbigpe3ZhciBlO24/bSghMCk6cCghMSksbnVsbD09KGU9Yi5jdXJyZW50KXx8ZS5mb2N1cygpfSxjaGlsZHJlbjooMCx5LmpzeCkob0gse1wiZGF0YS1jcm9zc1wiOiEwfSl9KV19KV19KX0pLCgwLHkuanN4KShcImRpdlwiLHtcImFyaWEtaGlkZGVuXCI6ITAsXCJkYXRhLWRvdFwiOiEwfSldfSl9ZnVuY3Rpb24gb1koZSl7dmFyIG49ZS5jaGlsZHJlbix0PWUuYW5pbWF0ZSxyPW9xKGUsW1wiY2hpbGRyZW5cIixcImFuaW1hdGVcIl0pO3JldHVybigwLHkuanN4cykoXCJkaXZcIixvVihvVSh7fSxyKSx7XCJkYXRhLWFuaW1hdGVcIjp2b2lkIDA9PT10fHx0LGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJkaXZcIix7XCJhcmlhLWhpZGRlblwiOiEwLFwiZGF0YS1pc3N1ZXMtY291bnQtZXhpdFwiOiEwLGNoaWxkcmVuOm4tMX0pLCgwLHkuanN4KShcImRpdlwiLHtcImRhdGEtaXNzdWVzLWNvdW50XCI6ITAsXCJkYXRhLWlzc3Vlcy1jb3VudC1lbnRlclwiOiEwLGNoaWxkcmVuOm59KV19KSl9ZnVuY3Rpb24gb1goZSl7dmFyIG49ZS5pc0xvYWRpbmcsdD1lLmlzRGV2QnVpbGRpbmc/XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNylcIjpcIndoaXRlXCI7cmV0dXJuKDAseS5qc3hzKShcInN2Z1wiLHt3aWR0aDpcIjQwXCIsaGVpZ2h0OlwiNDBcIix2aWV3Qm94OlwiMCAwIDQwIDQwXCIsZmlsbDpcIm5vbmVcIixcImRhdGEtbmV4dC1tYXJrLWxvYWRpbmdcIjpuLGNoaWxkcmVuOlsoMCx5LmpzeHMpKFwiZ1wiLHt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoOC41LCAxMylcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwicGF0aFwiLHtjbGFzc05hbWU6bj9cInBhdGgwXCI6XCJwYXVzZWRcIixkOlwiTTEzLjMgMTUuMiBMMi4zNCAxIFYxMi42XCIsZmlsbDpcIm5vbmVcIixzdHJva2U6XCJ1cmwoI25leHRfbG9nb19wYWludDBfbGluZWFyXzEzNTdfMTA4NTMpXCIsc3Ryb2tlV2lkdGg6XCIxLjg2XCIsbWFzazpcInVybCgjbmV4dF9sb2dvX21hc2swKVwiLHN0cm9rZURhc2hhcnJheTpcIjI5LjZcIixzdHJva2VEYXNob2Zmc2V0OlwiMjkuNlwifSksKDAseS5qc3gpKFwicGF0aFwiLHtjbGFzc05hbWU6bj9cInBhdGgxXCI6XCJwYXVzZWRcIixkOlwiTTExLjgyNSAxLjUgVjEzLjFcIixzdHJva2VXaWR0aDpcIjEuODZcIixzdHJva2U6XCJ1cmwoI25leHRfbG9nb19wYWludDFfbGluZWFyXzEzNTdfMTA4NTMpXCIsc3Ryb2tlRGFzaGFycmF5OlwiMTEuNlwiLHN0cm9rZURhc2hvZmZzZXQ6XCIxMS42XCJ9KV19KSwoMCx5LmpzeHMpKFwiZGVmc1wiLHtjaGlsZHJlbjpbKDAseS5qc3hzKShcImxpbmVhckdyYWRpZW50XCIse2lkOlwibmV4dF9sb2dvX3BhaW50MF9saW5lYXJfMTM1N18xMDg1M1wiLHgxOlwiOS45NTU1NVwiLHkxOlwiMTEuMTIyNlwiLHgyOlwiMTUuNDc3OFwiLHkyOlwiMTcuOTY3MVwiLGdyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwiLGNoaWxkcmVuOlsoMCx5LmpzeCkoXCJzdG9wXCIse3N0b3BDb2xvcjp0fSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIwLjYwNDA3MlwiLHN0b3BDb2xvcjp0LHN0b3BPcGFjaXR5OlwiMFwifSksKDAseS5qc3gpKFwic3RvcFwiLHtvZmZzZXQ6XCIxXCIsc3RvcENvbG9yOnQsc3RvcE9wYWNpdHk6XCIwXCJ9KV19KSwoMCx5LmpzeHMpKFwibGluZWFyR3JhZGllbnRcIix7aWQ6XCJuZXh0X2xvZ29fcGFpbnQxX2xpbmVhcl8xMzU3XzEwODUzXCIseDE6XCIxMS44MjIyXCIseTE6XCIxLjQwMDM5XCIseDI6XCIxMS43OTFcIix5MjpcIjkuNjI1NDJcIixncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwic3RvcFwiLHtzdG9wQ29sb3I6dH0pLCgwLHkuanN4KShcInN0b3BcIix7b2Zmc2V0OlwiMVwiLHN0b3BDb2xvcjp0LHN0b3BPcGFjaXR5OlwiMFwifSldfSksKDAseS5qc3hzKShcIm1hc2tcIix7aWQ6XCJuZXh0X2xvZ29fbWFzazBcIixjaGlsZHJlbjpbKDAseS5qc3gpKFwicmVjdFwiLHt3aWR0aDpcIjEwMCVcIixoZWlnaHQ6XCIxMDAlXCIsZmlsbDpcIndoaXRlXCJ9KSwoMCx5LmpzeCkoXCJyZWN0XCIse3dpZHRoOlwiNVwiLGhlaWdodDpcIjEuNVwiLGZpbGw6XCJibGFja1wifSldfSldfSldfSl9ZnVuY3Rpb24gb0soZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIG9RKGUsbix0KXtyZXR1cm4gbiBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se3ZhbHVlOnQsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW25dPXQsZX1mdW5jdGlvbiBvRyhlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gb0soZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gb0soZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gb0ooZSl7dmFyIG4sdD1lLnN0YXRlLHI9ZS5kaXNwYXRjaCxvPWUuZXJyb3JDb3VudCxhPWUuaXNCdWlsZEVycm9yLGk9b0coKDAseC51c2VTdGF0ZSkoITEpLDIpLGw9aVswXSxzPWlbMV0sYz1vRyh0LmRldlRvb2xzUG9zaXRpb24uc3BsaXQoXCItXCIsMiksMiksdT1jWzBdLGQ9Y1sxXTtyZXR1cm4oMCx5LmpzeCkodFIse1wiZGF0YS1uZXh0anMtdG9hc3RcIjohMCxzdHlsZToob1Eobj17XCItLWFuaW1hdGUtb3V0LWR1cmF0aW9uLW1zXCI6XCJcIi5jb25jYXQoblEuSzcsXCJtc1wiKSxcIi0tYW5pbWF0ZS1vdXQtdGltaW5nLWZ1bmN0aW9uXCI6blEudUQsYm94U2hhZG93Olwibm9uZVwifSx1LFwiXCIuY29uY2F0KDIwLFwicHhcIikpLG9RKG4sZCxcIlwiLmNvbmNhdCgyMCxcInB4XCIpKSxvUShuLFwidmlzaWJpbGl0eVwiLHQuaXNEZXZUb29sc1BhbmVsT3Blbnx8dC5pc0Vycm9yT3ZlcmxheU9wZW4/XCJoaWRkZW5cIjpcInZpc2libGVcIiksbiksY2hpbGRyZW46KDAseS5qc3gpKHJOLHtwYWRkaW5nOjIwLG9uRHJhZ1N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHMoITEpfSxwb3NpdGlvbjp0LmRldlRvb2xzUG9zaXRpb24sc2V0UG9zaXRpb246ZnVuY3Rpb24oZSl7cih7dHlwZTpZLGRldlRvb2xzUG9zaXRpb246ZX0pLGxvY2FsU3RvcmFnZS5zZXRJdGVtKEcsZSl9LGNoaWxkcmVuOigwLHkuanN4KShvWix7XCJhcmlhLWhhc3BvcHVwXCI6XCJtZW51XCIsXCJhcmlhLWV4cGFuZGVkXCI6bCxcImFyaWEtY29udHJvbHNcIjpcIm5leHRqcy1kZXYtdG9vbHMtbWVudVwiLFwiYXJpYS1sYWJlbFwiOlwiXCIuY29uY2F0KGw/XCJDbG9zZVwiOlwiT3BlblwiLFwiIE5leHQuanMgRGV2IFRvb2xzXCIpLFwiZGF0YS1uZXh0anMtZGV2LXRvb2xzLWJ1dHRvblwiOiEwLGRpc2FibGVkOnQuZGlzYWJsZURldkluZGljYXRvcixpc3N1ZUNvdW50Om8sb25UcmlnZ2VyQ2xpY2s6ZnVuY3Rpb24oKXtyKHt0eXBlOlp9KX0sdG9nZ2xlRXJyb3JPdmVybGF5OmZ1bmN0aW9uKCl7cih7dHlwZTpNfSkscih7dHlwZTpXfSl9LGlzRGV2QnVpbGRpbmc6dC5idWlsZGluZ0luZGljYXRvcixpc0RldlJlbmRlcmluZzp0LnJlbmRlcmluZ0luZGljYXRvcixpc0J1aWxkRXJyb3I6YSxzY2FsZTp0LnNjYWxlfSl9KX0pfWZ1bmN0aW9uIG8wKGUpe3ZhciBuLHQ7cmV0dXJuKDAseS5qc3gpKFwic3ZnXCIsKG49ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByLG8sYTtyPWUsbz1uLGE9dFtuXSxvIGluIHI/T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnJbb109YX0pfXJldHVybiBlfSh7eG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHdpZHRoOlwiMTZcIixoZWlnaHQ6XCIxNlwiLHZpZXdCb3g6XCIwIDAgMTYgMTZcIixmaWxsOlwibm9uZVwifSxlKSx0PXQ9e2NoaWxkcmVuOigwLHkuanN4KShcInBhdGhcIix7ZDpcIk0xNSAxNEMxNSAxNC41NTIzIDE0LjU1MjMgMTUgMTQgMTVIMTBWMTMuNUgxMy41VjEwSDE1VjE0Wk0yLjUgMTMuNDk5SDZWMTQuOTk5SDJDMS40NDc3MiAxNC45OTkgMSAxNC41NTEzIDEgMTMuOTk5VjkuOTk5MDJIMi41VjEzLjQ5OVpNNiAyLjVIMi41VjZIMVYyQzEgMS40NDc3MiAxLjQ0NzcyIDEgMiAxSDZWMi41Wk0xNCAxQzE0LjU1MjMgMSAxNSAxLjQ0NzcyIDE1IDJWNkgxMy41VjIuNUgxMFYxSDE0WlwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn0pfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKX1mdW5jdGlvbiBvMShlKXt2YXIgbix0O3JldHVybigwLHkuanN4KShcInN2Z1wiLChuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspe3ZhciB0PW51bGwhPWFyZ3VtZW50c1tuXT9hcmd1bWVudHNbbl06e30scj1PYmplY3Qua2V5cyh0KTtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYocj1yLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgcixvLGE7cj1lLG89bixhPXRbbl0sbyBpbiByP09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8se3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpyW29dPWF9KX1yZXR1cm4gZX0oe3htbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix3aWR0aDpcIjE2XCIsaGVpZ2h0OlwiMTZcIix2aWV3Qm94OlwiMCAwIDE2IDE2XCIsZmlsbDpcIm5vbmVcIn0sZSksdD10PXtjaGlsZHJlbjooMCx5LmpzeCkoXCJwYXRoXCIse2ZpbGxSdWxlOlwiZXZlbm9kZFwiLGNsaXBSdWxlOlwiZXZlbm9kZFwiLGQ6XCJNMSA2VjQuNUg0LjVWMUg2VjVDNiA1LjU1MjI4IDUuNTUyMjggNiA1IDZIMVpNMTEuNSAxSDEwVjVDMTAgNS41NTIyOCAxMC40NDc3IDYgMTEgNkgxNVY0LjVIMTEuNVYxWk0xNS4wNCAxMS41VjEwSDExQzEwLjQ0NzcgMTAgMTAgMTAuNDQ3NyAxMCAxMVYxNUgxMS41VjExLjVIMTUuMDRaTTQuNSAxNUg2VjExQzYgMTAuNDQ3NyA1LjU1MjI4IDEwIDUgMTBIMVYxMS41SDQuNVYxNVpcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9KX0sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobixlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKSl9KSxuKSl9ZnVuY3Rpb24gbzIoZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfXZhciBvND1cIm5leHRqcy1kZXZ0b29scy1kaW1lbnNpb25zXCIsbzU9KDAseC5jcmVhdGVDb250ZXh0KShudWxsKSxvMz1mdW5jdGlvbihlKXt2YXIgbj0uOTUqd2luZG93LmlubmVyV2lkdGgsdD0uOTUqd2luZG93LmlubmVySGVpZ2h0O3JldHVybnt3aWR0aDpNYXRoLm1pbihuLE1hdGgubWF4KGUubWluV2lkdGgsZS53aWR0aCkpLGhlaWdodDpNYXRoLm1pbih0LE1hdGgubWF4KGUubWluSGVpZ2h0LGUuaGVpZ2h0KSl9fSxvNj1mdW5jdGlvbigpe3ZhciBlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKG80KTtpZighZSlyZXR1cm4gbnVsbDt0cnl7dmFyIG4sdD1KU09OLnBhcnNlKGUpO2lmKCh2b2lkIDA9PT10P1widW5kZWZpbmVkXCI6KG49dCkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm4uY29uc3RydWN0b3I9PT1TeW1ib2w/XCJzeW1ib2xcIjp0eXBlb2Ygbik9PVwib2JqZWN0XCImJm51bGwhPT10JiZcIm51bWJlclwiPT10eXBlb2YgdC53aWR0aCYmXCJudW1iZXJcIj09dHlwZW9mIHQuaGVpZ2h0KXJldHVybnt3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH07cmV0dXJuIG51bGx9Y2F0Y2goZSl7cmV0dXJuIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG80KSxudWxsfX0sbzk9ZnVuY3Rpb24oZSl7dmFyIG4sdCxyLG8sYT1lLnZhbHVlLGk9ZS5jaGlsZHJlbixsPW51bGwhPShyPWEubWluV2lkdGgpP3I6MTAwLHM9bnVsbCE9KG89YS5taW5IZWlnaHQpP286ODAsYz0obj0oMCx4LnVzZVN0YXRlKShudWxsKSx0PTIsZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0obil8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksYS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0obiwyKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbzIoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gbzIoZSxuKX19KG4sdCl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCkpLHU9Y1swXSxkPWNbMV07cmV0dXJuKDAseC51c2VMYXlvdXRFZmZlY3QpKGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXtpZihhLnJlc2l6ZVJlZi5jdXJyZW50KXt2YXIgZT1vNigpO2lmKGUpe3ZhciBuLHQscj1vMygobj1mdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHt9LGUpLHQ9dD17bWluV2lkdGg6bnVsbCE9bD9sOjEwMCxtaW5IZWlnaHQ6bnVsbCE9cz9zOjgwfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKTooZnVuY3Rpb24oZSxuKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QucHVzaC5hcHBseSh0LHIpfXJldHVybiB0fSkoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpKX0pLG4pKSxvPXIuaGVpZ2h0LGk9ci53aWR0aDthLnJlc2l6ZVJlZi5jdXJyZW50LnN0eWxlLndpZHRoPVwiXCIuY29uY2F0KGksXCJweFwiKSxhLnJlc2l6ZVJlZi5jdXJyZW50LnN0eWxlLmhlaWdodD1cIlwiLmNvbmNhdChvLFwicHhcIil9fX07cmV0dXJuIGUoKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLGUpLGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsZSl9fSxbYS5yZXNpemVSZWYsbCxzXSksKDAseS5qc3gpKG81LlByb3ZpZGVyLHt2YWx1ZTp7cmVzaXplUmVmOmEucmVzaXplUmVmLG1pbldpZHRoOmwsbWluSGVpZ2h0OnMsZGV2VG9vbHNQb3NpdGlvbjphLmRldlRvb2xzUG9zaXRpb24sZHJhZ2dpbmdEaXJlY3Rpb246dSxzZXREcmFnZ2luZ0RpcmVjdGlvbjpkfSxjaGlsZHJlbjppfSl9LG84PWZ1bmN0aW9uKCl7dmFyIGU9KDAseC51c2VDb250ZXh0KShvNSk7aWYoIWUpdGhyb3cgRXJyb3IoXCJ1c2VSZXNpemUgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFJlc2l6ZSBwcm92aWRlclwiKTtyZXR1cm4gZX0sbzc9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9jc3MtbG9hZGVyQDcuMS4yX0Byc3BhY2srY29yZUAxLjQuNV9Ac3djK2hlbHBlcnNAMC41LjE1X193ZWJwYWNrQDUuOTguMF9Ac3djK2NvcmVAMS4xMS4yNF9Ac3dfd203ZWU1aWM0bW9mcmhpc3Vkd29uNHFwcTQvbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zcmMvbmV4dC1kZXZ0b29scy9kZXYtb3ZlcmxheS9jb21wb25lbnRzL2RldnRvb2xzLXBhbmVsL3Jlc2l6ZS9yZXNpemUtaGFuZGxlLmNzc1wiKSxhZT17fTtmdW5jdGlvbiBhbihlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9YWUuc3R5bGVUYWdUcmFuc2Zvcm09aCgpLGFlLnNldEF0dHJpYnV0ZXM9dSgpLGFlLmluc2VydD1zKCksYWUuZG9tQVBJPWkoKSxhZS5pbnNlcnRTdHlsZUVsZW1lbnQ9ZigpLG8oKShvNy5aLGFlKSxvNy5aJiZvNy5aLmxvY2FscyYmbzcuWi5sb2NhbHM7dmFyIGF0PWZ1bmN0aW9uKGUpe3ZhciBuLHQscj1lLmRpcmVjdGlvbixvPW84KCksYT1vLnJlc2l6ZVJlZixpPW8ubWluV2lkdGgsbD1vLm1pbkhlaWdodCxzPW8uZGV2VG9vbHNQb3NpdGlvbixjPW8uZHJhZ2dpbmdEaXJlY3Rpb24sdT1vLnNldERyYWdnaW5nRGlyZWN0aW9uLGQ9KG49KDAseC51c2VTdGF0ZSkoe3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSksdD0yLGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG4pfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KG4sMil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGFuKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIGFuKGUsbil9fShuLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxmPWRbMF0scD1kWzFdO2lmKCgwLHgudXNlTGF5b3V0RWZmZWN0KShmdW5jdGlvbigpe2lmKGEuY3VycmVudCl7dmFyIGU9YS5jdXJyZW50LG49d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSk7cCh7dG9wOnBhcnNlRmxvYXQobi5ib3JkZXJUb3BXaWR0aCl8fDAscmlnaHQ6cGFyc2VGbG9hdChuLmJvcmRlclJpZ2h0V2lkdGgpfHwwLGJvdHRvbTpwYXJzZUZsb2F0KG4uYm9yZGVyQm90dG9tV2lkdGgpfHwwLGxlZnQ6cGFyc2VGbG9hdChuLmJvcmRlckxlZnRXaWR0aCl8fDB9KX19LFthXSksISghcy5zcGxpdChcIi1cIikuaW5jbHVkZXMocikmJighci5pbmNsdWRlcyhcIi1cIil8fHI9PT1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZVwidG9wLWxlZnRcIjpyZXR1cm5cImJvdHRvbS1yaWdodFwiO2Nhc2VcInRvcC1yaWdodFwiOnJldHVyblwiYm90dG9tLWxlZnRcIjtjYXNlXCJib3R0b20tbGVmdFwiOnJldHVyblwidG9wLXJpZ2h0XCI7Y2FzZVwiYm90dG9tLXJpZ2h0XCI6cmV0dXJuXCJ0b3AtbGVmdFwiO2RlZmF1bHQ6cmV0dXJuIG51bGx9fShzKSkpKXJldHVybiBudWxsO3ZhciBoPWYubGVmdCtmLnJpZ2h0LGc9Zi50b3ArZi5ib3R0b20sbT1yLmluY2x1ZGVzKFwiLVwiKTtyZXR1cm4oMCx5LmpzeHMpKHkuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVzaXplLWNvbnRhaW5lciBcIi5jb25jYXQocixcIiBcIikuY29uY2F0KGMmJmMhPT1yP1wibm8taG92ZXJcIjpcIlwiKSxvbk1vdXNlRG93bjpmdW5jdGlvbihlKXtpZihlLnByZXZlbnREZWZhdWx0KCksYS5jdXJyZW50KXt1KHIpO3ZhciBuPWEuY3VycmVudCx0PW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1uLm9mZnNldExlZnQscz1uLm9mZnNldFRvcCxjPWUuY2xpZW50WCxkPWUuY2xpZW50WSxmPWZ1bmN0aW9uKGUpe3ZhciBhPWFyKHIsZS5jbGllbnRYLWMsZS5jbGllbnRZLWQsdCxvLHMsaSxsKSx1PWEubmV3V2lkdGgsZj1hLm5ld0hlaWdodCxwPWEubmV3TGVmdCxoPWEubmV3VG9wO24uc3R5bGUud2lkdGg9XCJcIi5jb25jYXQodSxcInB4XCIpLG4uc3R5bGUuaGVpZ2h0PVwiXCIuY29uY2F0KGYsXCJweFwiKSwoci5pbmNsdWRlcyhcImxlZnRcIil8fFwibGVmdFwiPT09cikmJihuLnN0eWxlLmxlZnQ9XCJcIi5jb25jYXQocCxcInB4XCIpKSwoci5pbmNsdWRlcyhcInRvcFwiKXx8XCJ0b3BcIj09PXIpJiYobi5zdHlsZS50b3A9XCJcIi5jb25jYXQoaCxcInB4XCIpKX0scD1mdW5jdGlvbigpe3UobnVsbCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLGYpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIscCk7dmFyIGU9YS5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ZS53aWR0aCx0PWUuaGVpZ2h0O2xvY2FsU3RvcmFnZS5zZXRJdGVtKFwibmV4dGpzLWRldnRvb2xzLWRpbWVuc2lvbnNcIixKU09OLnN0cmluZ2lmeSh7d2lkdGg6bixoZWlnaHQ6dH0pKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLGYpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIscCl9fX0pLCFtJiYoMCx5LmpzeCkoXCJkaXZcIix7Y2xhc3NOYW1lOlwicmVzaXplLWxpbmUgXCIuY29uY2F0KHIsXCIgXCIpLmNvbmNhdChjPT09cj9cImRyYWdnaW5nXCI6XCJcIiksc3R5bGU6e1wiLS1ib3JkZXItaG9yaXpvbnRhbFwiOlwiXCIuY29uY2F0KGgsXCJweFwiKSxcIi0tYm9yZGVyLXZlcnRpY2FsXCI6XCJcIi5jb25jYXQoZyxcInB4XCIpLFwiLS1ib3JkZXItdG9wXCI6XCJcIi5jb25jYXQoZi50b3AsXCJweFwiKSxcIi0tYm9yZGVyLXJpZ2h0XCI6XCJcIi5jb25jYXQoZi5yaWdodCxcInB4XCIpLFwiLS1ib3JkZXItYm90dG9tXCI6XCJcIi5jb25jYXQoZi5ib3R0b20sXCJweFwiKSxcIi0tYm9yZGVyLWxlZnRcIjpcIlwiLmNvbmNhdChmLmxlZnQsXCJweFwiKX19KV19KX0sYXI9ZnVuY3Rpb24oZSxuLHQscixvLGEsaSxsKXt2YXIgcz0uOTUqd2luZG93LmlubmVyV2lkdGgsYz0uOTUqd2luZG93LmlubmVySGVpZ2h0O3N3aXRjaChlKXtjYXNlXCJyaWdodFwiOnJldHVybntuZXdXaWR0aDpNYXRoLm1pbihzLE1hdGgubWF4KGksci53aWR0aCtuKSksbmV3SGVpZ2h0OnIuaGVpZ2h0LG5ld0xlZnQ6byxuZXdUb3A6YX07Y2FzZVwibGVmdFwiOnZhciB1PU1hdGgubWluKHMsTWF0aC5tYXgoaSxyLndpZHRoLW4pKSxkPXUtci53aWR0aDtyZXR1cm57bmV3V2lkdGg6dSxuZXdIZWlnaHQ6ci5oZWlnaHQsbmV3TGVmdDpvLWQsbmV3VG9wOmF9O2Nhc2VcImJvdHRvbVwiOnJldHVybntuZXdXaWR0aDpyLndpZHRoLG5ld0hlaWdodDpNYXRoLm1pbihjLE1hdGgubWF4KGwsci5oZWlnaHQrdCkpLG5ld0xlZnQ6byxuZXdUb3A6YX07Y2FzZVwidG9wXCI6dmFyIGY9TWF0aC5taW4oYyxNYXRoLm1heChsLHIuaGVpZ2h0LXQpKSxwPWYtci5oZWlnaHQ7cmV0dXJue25ld1dpZHRoOnIud2lkdGgsbmV3SGVpZ2h0OmYsbmV3TGVmdDpvLG5ld1RvcDphLXB9O2Nhc2VcInRvcC1sZWZ0XCI6dmFyIGg9TWF0aC5taW4ocyxNYXRoLm1heChpLHIud2lkdGgtbikpLGc9TWF0aC5taW4oYyxNYXRoLm1heChsLHIuaGVpZ2h0LXQpKSxtPWgtci53aWR0aCx2PWctci5oZWlnaHQ7cmV0dXJue25ld1dpZHRoOmgsbmV3SGVpZ2h0OmcsbmV3TGVmdDpvLW0sbmV3VG9wOmEtdn07Y2FzZVwidG9wLXJpZ2h0XCI6dmFyIGI9TWF0aC5taW4oYyxNYXRoLm1heChsLHIuaGVpZ2h0LXQpKSx5PWItci5oZWlnaHQ7cmV0dXJue25ld1dpZHRoOk1hdGgubWluKHMsTWF0aC5tYXgoaSxyLndpZHRoK24pKSxuZXdIZWlnaHQ6YixuZXdMZWZ0Om8sbmV3VG9wOmEteX07Y2FzZVwiYm90dG9tLWxlZnRcIjp2YXIgeD1NYXRoLm1pbihzLE1hdGgubWF4KGksci53aWR0aC1uKSksdz14LXIud2lkdGg7cmV0dXJue25ld1dpZHRoOngsbmV3SGVpZ2h0Ok1hdGgubWluKGMsTWF0aC5tYXgobCxyLmhlaWdodCt0KSksbmV3TGVmdDpvLXcsbmV3VG9wOmF9O2Nhc2VcImJvdHRvbS1yaWdodFwiOnJldHVybntuZXdXaWR0aDpNYXRoLm1pbihzLE1hdGgubWF4KGksci53aWR0aCtuKSksbmV3SGVpZ2h0Ok1hdGgubWluKGMsTWF0aC5tYXgobCxyLmhlaWdodCt0KSksbmV3TGVmdDpvLG5ld1RvcDphfTtkZWZhdWx0OnJldHVybiBudWxsfX07ZnVuY3Rpb24gYW8oZSxuKXsobnVsbD09bnx8bj5lLmxlbmd0aCkmJihuPWUubGVuZ3RoKTtmb3IodmFyIHQ9MCxyPUFycmF5KG4pO3Q8bjt0Kyspclt0XT1lW3RdO3JldHVybiByfWZ1bmN0aW9uIGFhKGUsbix0KXtyZXR1cm4gbiBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se3ZhbHVlOnQsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW25dPXQsZX1mdW5jdGlvbiBhaShlLG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSwhbnx8YS5sZW5ndGghPT1uKTtpPSEwKTt9Y2F0Y2goZSl7bD0hMCxyPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihsKXRocm93IHJ9fXJldHVybiBhfX0oZSxuKXx8ZnVuY3Rpb24oZSxuKXtpZihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gYW8oZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gYW8oZSxuKX19KGUsbil8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXFxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gYWwoKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICAvKiBUT0RPOiBCZXR0ZXIgb3ZlcnJpZGUgZGlhbG9nIGhlYWRlciBzdHlsZS4gVGhpcyBjb25mbGljdHMgd2l0aCBpc3N1ZXMgdGFiIGNvbnRlbnQuICovXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZGlhbG9nLWhlYWRlcl0ge1xcbiAgICBmbGV4LXNocmluazogMDtcXG4gICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWRpYWxvZy1jb250ZW50XSB7XFxuICAgIGZsZXg6IDE7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIG1pbi1oZWlnaHQ6IDA7IC8vIHdoYXQgYWxsb3dzIGNvbnRlbnQgdG8gb3ZlcmZsb3dcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1kaWFsb2ctYm9keV0ge1xcbiAgICBmbGV4OiAxO1xcbiAgICBvdmVyZmxvdzogYXV0bztcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1vdmVybGF5XSB7XFxuICAgIG1hcmdpbjogYXV0bztcXG4gICAgd2lkdGg6IDUyNXB4O1xcbiAgICBoZWlnaHQ6IDM3NXB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLW92ZXJsYXktYmFja2Ryb3BdIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLW92ZXJsYXktYmFja2Ryb3A9J3RydWUnXSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZHJhZ2dhYmxlXSB7XFxuICAgIC8qIEZvciByZXNwb25zaXZlbmVzcyAqL1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWRpYWxvZ10ge1xcbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQteGwpO1xcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctbGcpO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIG1pbi13aWR0aDogNDAwcHg7XFxuICAgIG1pbi1oZWlnaHQ6IDM1MHB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlcl0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtaGVhZGVyLXRhYi1ncm91cF0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBwYWRkaW5nOiA4cHg7XFxuICAgIGdhcDogNnB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlci10YWJdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1tZC0yKTtcXG4gICAgcGFkZGluZzogNHB4IDEycHg7XFxuICAgIGZvbnQtc2l6ZTogMTRweDtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyMDBtcyBlYXNlO1xcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XFxuICAgIH1cXG5cXG4gICAgJjphY3RpdmUge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMzAwKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlci10YWI9J3RydWUnXSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtaGVhZGVyLXRhYi1pc3N1ZXMtYmFkZ2VdIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXJlZC00MDApO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcmVkLTkwMCk7XFxuICAgIGZvbnQtc2l6ZTogMTFweDtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG4gICAgcGFkZGluZzogMnB4IDZweDtcXG4gICAgd2lkdGg6IDIwcHg7XFxuICAgIGhlaWdodDogMjBweDtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1oZWFkZXItYWN0aW9uLWJ1dHRvbi1ncm91cF0ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDRweDtcXG4gICAgcGFkZGluZy1yaWdodDogOHB4O1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlci1hY3Rpb24tYnV0dG9uXSB7XFxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIHBhZGRpbmc6IDZweDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZC1jb2xvciwgY29sb3I7XFxuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDIwMG1zO1xcbiAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTtcXG5cXG4gICAgJjpob3ZlciB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItZ3JheS0yMDApO1xcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIH1cXG5cXG4gICAgJjphY3RpdmUge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMzAwKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWRyYWdnYWJsZT0ndHJ1ZSddIHtcXG4gICAgY3Vyc29yOiBtb3ZlO1xcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgJiA+ICoge1xcbiAgICAgIGN1cnNvcjogYXV0bztcXG4gICAgICAvKiB1c2VyLXNlbGVjdDogYXV0bzsgZm9sbG93cyB0aGUgcGFyZW50IChwYXJlbnQgbm9uZSAtPiBjaGlsZCBub25lKSwgc28gcmVzZXQgdGhlIGRpcmVjdCBjaGlsZCB0byB0ZXh0ICovXFxuICAgICAgdXNlci1zZWxlY3Q6IHRleHQ7XFxuICAgIH1cXG4gIH1cXG5cIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBhcyhlKXt2YXIgbix0LHIsbyxhLGksbD1lLnN0YXRlLHM9ZS5kaXNwYXRjaCxjPWUuaXNzdWVDb3VudCx1PWUucnVudGltZUVycm9ycyxkPWUuZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHMsZj1haSgobj1cIl9fbmV4dGpzLWRldnRvb2xzLWFjdGl2ZS10YWJcIix0PVwiaXNzdWVzXCIsbz0ocj1haSgoMCx4LnVzZVN0YXRlKShmdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZXNzaW9uU3RvcmFnZSl7dmFyIGU9c2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShuKTtyZXR1cm4gbnVsbCE9ZT9lOnR9cmV0dXJuIHR9KSwyKSlbMF0sYT1yWzFdLCgwLHgudXNlRWZmZWN0KShmdW5jdGlvbigpe1widW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZXNzaW9uU3RvcmFnZSYmc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShuLG8pfSxbbixvXSksW28sYV0pLDIpLHA9ZlswXSxoPWZbMV0sZz1haSgoMCx4LnVzZVN0YXRlKSghMSksMiksbT1nWzBdLHY9Z1sxXSxiPWFpKCgwLHgudXNlU3RhdGUpKCExKSwyKSx3PWJbMF0saj1iWzFdLGs9KDAseC51c2VSZWYpKG51bGwpO2wuaXNFcnJvck92ZXJsYXlPcGVuIT09dyYmKGwuaXNFcnJvck92ZXJsYXlPcGVuJiYodighMCksaChcImlzc3Vlc1wiKSksaihsLmlzRXJyb3JPdmVybGF5T3BlbikpO3ZhciBBPWFpKGwuZGV2VG9vbHNQb3NpdGlvbi5zcGxpdChcIi1cIiwyKSwyKSxPPUFbMF0sQz1BWzFdLFM9ZnVuY3Rpb24oKXtzKHt0eXBlOiR9KSxzKHt0eXBlOkl9KX07cmV0dXJuKDAseS5qc3gpKG85LHt2YWx1ZTp7cmVzaXplUmVmOmssbWluV2lkdGg6NDAwLG1pbkhlaWdodDozNTAsZGV2VG9vbHNQb3NpdGlvbjpsLmRldlRvb2xzUG9zaXRpb259LGNoaWxkcmVuOigwLHkuanN4cykoblose3JlZjprLFwiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtb3ZlcmxheVwiOiEwLHN0eWxlOm0/e306KGFhKGk9e30sTyxcIlwiLmNvbmNhdCgyMCxcInB4XCIpKSxhYShpLEMsXCJcIi5jb25jYXQoMjAsXCJweFwiKSksYWEoaSxcInRvcFwiPT09Tz9cImJvdHRvbVwiOlwidG9wXCIsXCJhdXRvXCIpLGFhKGksXCJsZWZ0XCI9PT1DP1wicmlnaHRcIjpcImxlZnRcIixcImF1dG9cIiksaSksY2hpbGRyZW46WygwLHkuanN4KShuMix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1vdmVybGF5LWJhY2tkcm9wXCI6bSxvbkNsaWNrOlN9KSwoMCx5LmpzeCkock4se1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZHJhZ2dhYmxlXCI6ITAscGFkZGluZzoyMCxvbkRyYWdTdGFydDpmdW5jdGlvbigpe30scG9zaXRpb246bC5kZXZUb29sc1Bvc2l0aW9uLHNldFBvc2l0aW9uOmZ1bmN0aW9uKGUpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKEcsZSkscyh7dHlwZTpZLGRldlRvb2xzUG9zaXRpb246ZX0pfSxkcmFnSGFuZGxlU2VsZWN0b3I6XCJbZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtaGVhZGVyXSwgW2RhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWZvb3Rlcl1cIixkaXNhYmxlRHJhZzptLGNoaWxkcmVuOigwLHkuanN4cykoeS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLHkuanN4cykoZVose1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZGlhbG9nXCI6ITAsXCJhcmlhLWxhYmVsbGVkYnlcIjpcIm5leHRqc19fY29udGFpbmVyX2Rldl90b29sc19wYW5lbF9sYWJlbFwiLFwiYXJpYS1kZXNjcmliZWRieVwiOlwibmV4dGpzX19jb250YWluZXJfZGV2X3Rvb2xzX3BhbmVsX2Rlc2NcIixvbkNsb3NlOlMsY2hpbGRyZW46WygwLHkuanN4cykoZVgse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZGlhbG9nLWNvbnRlbnRcIjohMCxjaGlsZHJlbjpbKDAseS5qc3gpKGVLLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWRpYWxvZy1oZWFkZXJcIjohMCxjaGlsZHJlbjooMCx5LmpzeHMpKFwiZGl2XCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtaGVhZGVyXCI6ITAsXCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1kcmFnZ2FibGVcIjohbSxjaGlsZHJlbjpbKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlci10YWItZ3JvdXBcIjohMCxjaGlsZHJlbjpbKDAseS5qc3hzKShcImJ1dHRvblwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlci10YWJcIjpcImlzc3Vlc1wiPT09cCxvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGgoXCJpc3N1ZXNcIil9LGNoaWxkcmVuOltcIklzc3Vlc1wiLGM+MD8oMCx5LmpzeCkoXCJzcGFuXCIse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtaGVhZGVyLXRhYi1pc3N1ZXMtYmFkZ2VcIjohMCxjaGlsZHJlbjpjfSk6bnVsbF19KSwoMCx5LmpzeCkoXCJidXR0b25cIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1oZWFkZXItdGFiXCI6XCJyb3V0ZVwiPT09cCxvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGgoXCJyb3V0ZVwiKX0sY2hpbGRyZW46XCJSb3V0ZSBJbmZvXCJ9KSwoMCx5LmpzeCkoXCJidXR0b25cIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1oZWFkZXItdGFiXCI6XCJzZXR0aW5nc1wiPT09cCxvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGgoXCJzZXR0aW5nc1wiKX0sY2hpbGRyZW46XCJTZXR0aW5nc1wifSldfSksKDAseS5qc3hzKShcImRpdlwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlci1hY3Rpb24tYnV0dG9uLWdyb3VwXCI6ITAsY2hpbGRyZW46WygwLHkuanN4KShcImJ1dHRvblwiLHtcImRhdGEtbmV4dGpzLWRldnRvb2xzLXBhbmVsLWhlYWRlci1hY3Rpb24tYnV0dG9uXCI6ITAsb25DbGljazpmdW5jdGlvbigpe3YoZnVuY3Rpb24oZSl7cmV0dXJuIWV9KSxzKHt0eXBlOkl9KX0sY2hpbGRyZW46bT8oMCx5LmpzeCkobzEse3dpZHRoOjE2LGhlaWdodDoxNn0pOigwLHkuanN4KShvMCx7d2lkdGg6MTYsaGVpZ2h0OjE2fSl9KSwoMCx5LmpzeCkoXCJidXR0b25cIix7XCJkYXRhLW5leHRqcy1kZXZ0b29scy1wYW5lbC1oZWFkZXItYWN0aW9uLWJ1dHRvblwiOiEwLG9uQ2xpY2s6UyxjaGlsZHJlbjooMCx5LmpzeCkob0gse3dpZHRoOjE2LGhlaWdodDoxNn0pfSldfSldfSl9KSwoMCx5LmpzeCkoZVkse1wiZGF0YS1uZXh0anMtZGV2dG9vbHMtcGFuZWwtZGlhbG9nLWJvZHlcIjohMCxjaGlsZHJlbjooMCx5LmpzeCkob0kse3BhZ2U6bC5wYWdlLGFjdGl2ZVRhYjpwLGRldlRvb2xzUG9zaXRpb246bC5kZXZUb29sc1Bvc2l0aW9uLHNjYWxlOmwuc2NhbGUscm91dGVyVHlwZTpsLnJvdXRlclR5cGUsaGFuZGxlUG9zaXRpb25DaGFuZ2U6ZnVuY3Rpb24oZSl7cyh7dHlwZTpZLGRldlRvb2xzUG9zaXRpb246ZS50YXJnZXQudmFsdWV9KSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbShHLGUudGFyZ2V0LnZhbHVlKX0saGFuZGxlU2NhbGVDaGFuZ2U6ZnVuY3Rpb24oZSl7cyh7dHlwZTpYLHNjYWxlOk51bWJlcihlLnRhcmdldC52YWx1ZSl9KSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbShKLGUudGFyZ2V0LnZhbHVlKX0sZGVidWdJbmZvOmwuZGVidWdJbmZvLHJ1bnRpbWVFcnJvcnM6dSxnZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlsczpkLGJ1aWxkRXJyb3I6bC5idWlsZEVycm9yfSl9KV19KSwoMCx5LmpzeCkocjIse3ZlcnNpb25JbmZvOmwudmVyc2lvbkluZm8saXNEcmFnZ2FibGU6IW0sc2hvd1Jlc3RhcnRTZXJ2ZXJCdXR0b246bC5zaG93UmVzdGFydFNlcnZlckJ1dHRvbn0pXX0pLCFtJiYoMCx5LmpzeHMpKHkuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCx5LmpzeCkoYXQse2RpcmVjdGlvbjpcInRvcFwifSksKDAseS5qc3gpKGF0LHtkaXJlY3Rpb246XCJyaWdodFwifSksKDAseS5qc3gpKGF0LHtkaXJlY3Rpb246XCJib3R0b21cIn0pLCgwLHkuanN4KShhdCx7ZGlyZWN0aW9uOlwibGVmdFwifSksKDAseS5qc3gpKGF0LHtkaXJlY3Rpb246XCJ0b3AtbGVmdFwifSksKDAseS5qc3gpKGF0LHtkaXJlY3Rpb246XCJ0b3AtcmlnaHRcIn0pLCgwLHkuanN4KShhdCx7ZGlyZWN0aW9uOlwiYm90dG9tLWxlZnRcIn0pLCgwLHkuanN4KShhdCx7ZGlyZWN0aW9uOlwiYm90dG9tLXJpZ2h0XCJ9KV19KV19KX0pXX0pfSl9dmFyIGFjPWVpKGFsKCkpO2Z1bmN0aW9uIGF1KCl7dmFyIGUsbix0PShlPVtcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgICAgXCIsXCJcXG4gICAgICBcIl0sbnx8KG49ZS5zbGljZSgwKSksT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHtyYXc6e3ZhbHVlOk9iamVjdC5mcmVlemUobil9fSkpKTtyZXR1cm4gYXU9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sdH1mdW5jdGlvbiBhZCgpe3JldHVybigwLHkuanN4KShcInN0eWxlXCIse2NoaWxkcmVuOmVpKGF1KCksXCJcXG4gIC5uZXh0anMtZGF0YS1jb3B5LWJ1dHRvbiB7XFxuICAgIGNvbG9yOiBpbmhlcml0O1xcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgICB9XFxuICB9XFxuICAubmV4dGpzLWRhdGEtY29weS1idXR0b246ZGlzYWJsZWQge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICB9XFxuICAubmV4dGpzLWRhdGEtY29weS1idXR0b24tLWluaXRpYWw6aG92ZXI6bm90KDpkaXNhYmxlZCkge1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICB9XFxuICAubmV4dGpzLWRhdGEtY29weS1idXR0b24tLWVycm9yOm5vdCg6ZGlzYWJsZWQpLFxcbiAgLm5leHRqcy1kYXRhLWNvcHktYnV0dG9uLS1lcnJvcjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hbnNpLXJlZCk7XFxuICB9XFxuICAubmV4dGpzLWRhdGEtY29weS1idXR0b24tLXN1Y2Nlc3M6bm90KDpkaXNhYmxlZCkge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYW5zaS1ncmVlbik7XFxuICB9XFxuXCIsJ1xcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWUtbm8tc291cmNlXSB7XFxuICAgIHBhZGRpbmc6IDZweCA4cHg7XFxuICAgIG1hcmdpbi1ib3R0b206IDRweDtcXG5cXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1sZyk7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZS1uby1zb3VyY2VdOmxhc3QtY2hpbGQge1xcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNhbGwtc3RhY2stZnJhbWUtaWdub3JlZD1cInRydWVcIl0ge1xcbiAgICBvcGFjaXR5OiAwLjY7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtY2FsbC1zdGFjay1mcmFtZV0ge1xcbiAgICB1c2VyLXNlbGVjdDogdGV4dDtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuXFxuICAgIHVzZXItc2VsZWN0OiB0ZXh0O1xcbiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0O1xcbiAgICAtbW96LXVzZXItc2VsZWN0OiB0ZXh0O1xcbiAgICAtbXMtdXNlci1zZWxlY3Q6IHRleHQ7XFxuXFxuICAgIHBhZGRpbmc6IDZweCA4cHg7XFxuXFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbGcpO1xcbiAgfVxcblxcbiAgLmNhbGwtc3RhY2stZnJhbWUtbWV0aG9kLW5hbWUge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDRweDtcXG5cXG4gICAgbWFyZ2luLWJvdHRvbTogNHB4O1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1tb25vc3BhY2UpO1xcblxcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2cHgpO1xcbiAgICAgIGhlaWdodDogdmFyKC0tc2l6ZS0xNnB4KTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLm9wZW4taW4tZWRpdG9yLWJ1dHRvbiwgLnNvdXJjZS1tYXBwaW5nLWVycm9yLWJ1dHRvbiB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcbiAgICBwYWRkaW5nOiA0cHg7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1mb250KTtcXG5cXG4gICAgc3ZnIHtcXG4gICAgICB3aWR0aDogdmFyKC0tc2l6ZS0xNik7XFxuICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gICAgfVxcblxcbiAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xcbiAgICB9XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMTAwKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmNhbGwtc3RhY2stZnJhbWUtZmlsZS1zb3VyY2Uge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTQpO1xcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tc2l6ZS0yMCk7XFxuICB9XFxuJyx0cyxcIlxcbiAgW2RhdGEtbmV4dGpzLWVudmlyb25tZW50LW5hbWUtbGFiZWxdIHtcXG4gICAgcGFkZGluZzogMnB4IDZweDtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLW1kLTIpO1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTkwMCk7XFxuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrLW1vbm9zcGFjZSk7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTIwKTtcXG4gIH1cXG5cIixcIlxcbiAgW2RhdGEtbmV4dGpzLWRpYWxvZy1vdmVybGF5XSB7XFxuICAgIHBvc2l0aW9uOiBmaXhlZDtcXG4gICAgdG9wOiAwO1xcbiAgICByaWdodDogMDtcXG4gICAgYm90dG9tOiAwO1xcbiAgICBsZWZ0OiAwO1xcbiAgICAvKiBzZWNvbmRhcnkgei1pbmRleCwgLTEgdGhhbiB0b2FzdCB6LWluZGV4ICovXFxuICAgIHotaW5kZXg6IDIxNDc0ODM2NDY7XFxuXFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgcGFkZGluZzogMTB2aCAxNXB4IDA7XFxuICB9XFxuXFxuICBAbWVkaWEgKG1heC1oZWlnaHQ6IDgxMnB4KSB7XFxuICAgIFtkYXRhLW5leHRqcy1kaWFsb2ctb3ZlcmxheV0ge1xcbiAgICAgIHBhZGRpbmc6IDE1cHggMTVweCAwO1xcbiAgICB9XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWJhY2tkcm9wXSB7XFxuICAgIHBvc2l0aW9uOiBmaXhlZDtcXG4gICAgdG9wOiAwO1xcbiAgICByaWdodDogMDtcXG4gICAgYm90dG9tOiAwO1xcbiAgICBsZWZ0OiAwO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iYWNrZHJvcCk7XFxuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTtcXG4gICAgcG9pbnRlci1ldmVudHM6IGFsbDtcXG4gICAgei1pbmRleDogLTE7XFxuICB9XFxuXFxuICBbZGF0YS1uZXh0anMtZGlhbG9nLWJhY2tkcm9wLWZpeGVkXSB7XFxuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7XFxuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpO1xcbiAgfVxcblwiLGVHLG44LG5FLFwiXFxuICAuZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2stbGF5ZXIge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zdGFjay1sYXllci1oZWlnaHQpO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC14bCk7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG4gICAgdHJhbnNpdGlvbjpcXG4gICAgICB0cmFuc2xhdGUgMzUwbXMgdmFyKC0tdGltaW5nLXN3aWZ0KSxcXG4gICAgICBib3gtc2hhZG93IDM1MG1zIHZhcigtLXRpbWluZy1zd2lmdCk7XFxuICB9XFxuXFxuICAuZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2stbGF5ZXItMSB7XFxuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSB2YXIoLS1zaXplLTI0KSk7XFxuICB9XFxuXFxuICAuZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2stbGF5ZXItMiB7XFxuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSB2YXIoLS1zaXplLTQ4KSk7XFxuICAgIHotaW5kZXg6IC0xO1xcbiAgfVxcblxcbiAgLmVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrIHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgYm90dG9tOiAtMXB4O1xcbiAgICBoZWlnaHQ6IDA7XFxuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgfVxcblxcbiAgLmVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLXN0YWNrIHtcXG4gICAgLS1zdGFjay1sYXllci1oZWlnaHQ6IDQ0cHg7XFxuICAgIC0tc3RhY2stbGF5ZXItaGVpZ2h0LWhhbGY6IGNhbGModmFyKC0tc3RhY2stbGF5ZXItaGVpZ2h0KSAvIDIpO1xcbiAgICAtLXN0YWNrLWxheWVyLXRyaW06IDEzcHg7XFxuICAgIC0tc2hhZG93OiAwcHggMC45MjVweCAwLjkyNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMDIpLFxcbiAgICAgIDBweCAzLjdweCA3LjRweCAtMy43cHggcmdiYSgwLCAwLCAwLCAwLjA0KSxcXG4gICAgICAwcHggMTQuOHB4IDIyLjJweCAtNy40cHggcmdiYSgwLCAwLCAwLCAwLjA2KTtcXG5cXG4gICAgZGlzcGxheTogZ3JpZDtcXG4gICAgcGxhY2UtaXRlbXM6IGNlbnRlciBjZW50ZXI7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBwb3NpdGlvbjogZml4ZWQ7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIHotaW5kZXg6IC0xO1xcbiAgICBtYXgtd2lkdGg6IHZhcigtLW5leHQtZGlhbG9nLW1heC13aWR0aCk7XFxuXFxuICAgIC5lcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1sYXllciB7XFxuICAgICAgZ3JpZC1hcmVhOiAxIC8gMTtcXG4gICAgICAvKiBIaWRlICovXFxuICAgICAgdHJhbnNsYXRlOiAwIGNhbGModmFyKC0tc3RhY2stbGF5ZXItaGVpZ2h0KSAqIC0xKTtcXG4gICAgfVxcblxcbiAgICAmW2RhdGEtc3RhY2stY291bnQ9JzEnXSxcXG4gICAgJltkYXRhLXN0YWNrLWNvdW50PScyJ10ge1xcbiAgICAgIC5lcnJvci1vdmVybGF5LWJvdHRvbS1zdGFjay1sYXllci0xIHtcXG4gICAgICAgIHRyYW5zbGF0ZTogMFxcbiAgICAgICAgICBjYWxjKHZhcigtLXN0YWNrLWxheWVyLWhlaWdodC1oYWxmKSAqIC0xIC0gdmFyKC0tc3RhY2stbGF5ZXItdHJpbSkpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAmW2RhdGEtc3RhY2stY291bnQ9JzInXSB7XFxuICAgICAgLmVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLWxheWVyLTIge1xcbiAgICAgICAgdHJhbnNsYXRlOiAwIGNhbGModmFyKC0tc3RhY2stbGF5ZXItdHJpbSkgKiAtMSAqIDIpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICAvKiBPbmx5IHRoZSBib3R0b20gc3RhY2sgc2hvdWxkIGhhdmUgdGhlIHNoYWRvdyAqL1xcbiAgICAmW2RhdGEtc3RhY2stY291bnQ9JzEnXSAuZXJyb3Itb3ZlcmxheS1ib3R0b20tc3RhY2stbGF5ZXItMSB7XFxuICAgICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93KTtcXG4gICAgfVxcblxcbiAgICAmW2RhdGEtc3RhY2stY291bnQ9JzInXSB7XFxuICAgICAgLmVycm9yLW92ZXJsYXktYm90dG9tLXN0YWNrLWxheWVyLTIge1xcbiAgICAgICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93KTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cIixcIlxcbiAgLmVycm9yLW92ZXJsYXktcGFnaW5hdGlvbiB7XFxuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgZ2FwOiA4cHg7XFxuICAgIHdpZHRoOiBmaXQtY29udGVudDtcXG4gIH1cXG5cXG4gIC5lcnJvci1vdmVybGF5LXBhZ2luYXRpb24tY291bnQge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1zaXplLTE2KTtcXG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcXG4gIH1cXG5cXG4gIC5lcnJvci1vdmVybGF5LXBhZ2luYXRpb24tYnV0dG9uIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFxuICAgIHdpZHRoOiB2YXIoLS1zaXplLTI0KTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTI0KTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS0zMDApO1xcbiAgICBmbGV4LXNocmluazogMDtcXG5cXG4gICAgYm9yZGVyOiBub25lO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgICB9XFxuXFxuICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgIH1cXG5cXG4gICAgJjpub3QoOmRpc2FibGVkKTphY3RpdmUge1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktNTAwKTtcXG4gICAgfVxcblxcbiAgICAmOmRpc2FibGVkIHtcXG4gICAgICBvcGFjaXR5OiAwLjU7XFxuICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmVycm9yLW92ZXJsYXktcGFnaW5hdGlvbi1idXR0b24taWNvbiB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgfVxcblwiLCdcXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdIHtcXG4gICAgLS1jb2RlLWZyYW1lLXBhZGRpbmc6IDEycHg7XFxuICAgIC0tY29kZS1mcmFtZS1saW5lLWhlaWdodDogdmFyKC0tc2l6ZS0xNik7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDhweDtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWNvZGUtZnJhbWUtbGluZS1oZWlnaHQpO1xcbiAgICBtYXJnaW46IDhweCAwO1xcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgICB9XFxuICB9XFxuXFxuICAuY29kZS1mcmFtZS1saW5rLFxcbiAgLmNvZGUtZnJhbWUtcHJlIHtcXG4gICAgcGFkZGluZzogdmFyKC0tY29kZS1mcmFtZS1wYWRkaW5nKTtcXG4gIH1cXG5cXG4gIC5jb2RlLWZyYW1lLWxpbmsgc3ZnIHtcXG4gICAgZmxleC1zaHJpbms6IDA7XFxuICB9XFxuXFxuICAuY29kZS1mcmFtZS1saW5lcyB7XFxuICAgIG1pbi13aWR0aDogbWF4LWNvbnRlbnQ7XFxuICB9XFxuXFxuICAuY29kZS1mcmFtZS1saW5rIFtkYXRhLXRleHRdIHtcXG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxuICAgIHRleHQtYWxpZ246IGxlZnQ7XFxuICAgIG1hcmdpbjogYXV0byA2cHg7XFxuICB9XFxuXFxuICAuY29kZS1mcmFtZS1oZWFkZXIge1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxMDBtcyBlYXNlLW91dDtcXG4gICAgYm9yZGVyLXJhZGl1czogOHB4IDhweCAwIDA7XFxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICB9XFxuXFxuICBbZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmstc291cmNlLWZpbGVdIHtcXG4gICAgcGFkZGluZzogNHB4O1xcbiAgICBtYXJnaW46IC00cHggMCAtNHB4IGF1dG87XFxuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtZnVsbCk7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcblxcbiAgICAmOmZvY3VzLXZpc2libGUge1xcbiAgICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXJpbmcpO1xcbiAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xcbiAgICB9XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWdyYXktMTAwKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV06OnNlbGVjdGlvbixcXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdICo6OnNlbGVjdGlvbiB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktc2VsZWN0aW9uKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy1jb2RlZnJhbWVdICo6bm90KGEpIHtcXG4gICAgY29sb3I6IGluaGVyaXQ7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1tb25vc3BhY2UpO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZS1saW5lXVtkYXRhLW5leHRqcy1jb2RlZnJhbWUtbGluZS0tZXJyb3JlZD1cInRydWVcIl0ge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIGlzb2xhdGlvbjogaXNvbGF0ZTtcXG5cXG4gICAgPiBzcGFuIHsgXFxuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICAgIHotaW5kZXg6IDE7XFxuICAgIH1cXG5cXG4gICAgJjo6YWZ0ZXIge1xcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XFxuICAgICAgd2lkdGg6IGNhbGMoMTAwJSArIHZhcigtLWNvZGUtZnJhbWUtcGFkZGluZykgKiAyKTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLWNvZGUtZnJhbWUtbGluZS1oZWlnaHQpO1xcbiAgICAgIGxlZnQ6IGNhbGMoLTEgKiB2YXIoLS1jb2RlLWZyYW1lLXBhZGRpbmcpKTtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1yZWQtMjAwKTtcXG4gICAgICBib3gtc2hhZG93OiAycHggMCAwIDAgdmFyKC0tY29sb3ItcmVkLTkwMCkgaW5zZXQ7XFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB9XFxuICB9XFxuXFxuXFxuICBbZGF0YS1uZXh0anMtY29kZWZyYW1lXSA+ICoge1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuXFxuICAuY29kZS1mcmFtZS1saW5rIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBvdXRsaW5lOiAwO1xcbiAgfVxcbiAgLmNvZGUtZnJhbWUtbGluayBbZGF0YS1pY29uPVxcJ3JpZ2h0XFwnXSB7XFxuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV0gZGl2ID4gcHJlIHtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgfVxcblxcbiAgW2RhdGEtbmV4dGpzLWNvZGVmcmFtZV0gc3ZnIHtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gIH1cXG4nLFwiXFxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdOjpzZWxlY3Rpb24sXFxuICBbZGF0YS1uZXh0anMtdGVybWluYWxdICo6OnNlbGVjdGlvbiB7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktc2VsZWN0aW9uKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy10ZXJtaW5hbF0gKiB7XFxuICAgIGNvbG9yOiBpbmhlcml0O1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gIH1cXG5cXG4gIFtkYXRhLW5leHRqcy10ZXJtaW5hbF0gPiBkaXYgPiBwIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIG1hcmdpbjogMDtcXG4gIH1cXG4gIFtkYXRhLW5leHRqcy10ZXJtaW5hbF0gPiBkaXYgPiBwOmhvdmVyIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkO1xcbiAgfVxcbiAgW2RhdGEtbmV4dGpzLXRlcm1pbmFsXSBkaXYgPiBwcmUge1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB9XFxuXCIsXCJcXG4gIFtkYXRhLXdpdGgtb3Blbi1pbi1lZGl0b3ItbGlua10gc3ZnIHtcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIG1hcmdpbi1sZWZ0OiA4cHg7XFxuICB9XFxuICBbZGF0YS13aXRoLW9wZW4taW4tZWRpdG9yLWxpbmtdIHtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgfVxcbiAgW2RhdGEtd2l0aC1vcGVuLWluLWVkaXRvci1saW5rXTpob3ZlciB7XFxuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG4gIH1cXG4gIFtkYXRhLXdpdGgtb3Blbi1pbi1lZGl0b3ItbGluay1pbXBvcnQtdHJhY2VdIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2cHg7XFxuICB9XFxuXCIsXCJcIixcIlxcbiAgLm5leHRqcy1lcnJvci13aXRoLXN0YXRpYyB7XFxuICAgIGJvdHRvbTogY2FsYygxNnB4ICogNC41KTtcXG4gIH1cXG4gIHAubmV4dGpzX19jb250YWluZXJfZXJyb3JzX19saW5rIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gIH1cXG4gIHAubmV4dGpzX19jb250YWluZXJfZXJyb3JzX19ub3RlcyB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1zdGFjay1ub3Rlcyk7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xNCk7XFxuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICB9XFxuICAubmV4dGpzLWNvbnRhaW5lci1lcnJvcnMtYm9keSA+IGgyOm5vdCg6Zmlyc3QtY2hpbGQpIHtcXG4gICAgbWFyZ2luLXRvcDogY2FsYygxNnB4ICsgOHB4KTtcXG4gIH1cXG4gIC5uZXh0anMtY29udGFpbmVyLWVycm9ycy1ib2R5ID4gaDIge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGl0bGUtY29sb3IpO1xcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0yMCk7XFxuICB9XFxuICAubmV4dGpzLXRvYXN0LWVycm9ycy1wYXJlbnQge1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2U7XFxuICB9XFxuICAubmV4dGpzLXRvYXN0LWVycm9ycy1wYXJlbnQ6aG92ZXIge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XFxuICB9XFxuICAubmV4dGpzLXRvYXN0LWVycm9ycyB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG4gIH1cXG4gIC5uZXh0anMtdG9hc3QtZXJyb3JzID4gc3ZnIHtcXG4gICAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxuICB9XFxuICAubmV4dGpzLXRvYXN0LWhpZGUtYnV0dG9uIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDI0cHg7XFxuICAgIGJvcmRlcjogbm9uZTtcXG4gICAgYmFja2dyb3VuZDogbm9uZTtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFuc2ktYnJpZ2h0LXdoaXRlKTtcXG4gICAgcGFkZGluZzogMDtcXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjI1cyBlYXNlO1xcbiAgICBvcGFjaXR5OiAwLjc7XFxuICB9XFxuICAubmV4dGpzLXRvYXN0LWhpZGUtYnV0dG9uOmhvdmVyIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG4gIC5uZXh0anNfX2NvbnRhaW5lcl9lcnJvcnNfX2Vycm9yX3RpdGxlIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICBtYXJnaW4tYm90dG9tOiAxNHB4O1xcbiAgfVxcbiAgLmVycm9yLW92ZXJsYXktbm90ZXMtY29udGFpbmVyIHtcXG4gICAgbWFyZ2luOiA4cHggMnB4O1xcbiAgfVxcbiAgLmVycm9yLW92ZXJsYXktbm90ZXMtY29udGFpbmVyIHAge1xcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxuICB9XFxuXCIsdEEsXCJcXG4gIC5uZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLXZlcnNpb24tc3RhdHVzIHtcXG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDRweDtcXG5cXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTI2KTtcXG4gICAgcGFkZGluZzogNnB4IDhweCA2cHggNnB4O1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNDAwKTtcXG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNtYWxsKTtcXG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcm91bmRlZC1mdWxsKTtcXG5cXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktOTAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgfVxcblxcbiAgYS5uZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLXZlcnNpb24tc3RhdHVzIHtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICAgIH1cXG5cXG4gICAgJjpmb2N1cyB7XFxuICAgICAgb3V0bGluZTogdmFyKC0tZm9jdXMtcmluZyk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC52ZXJzaW9uLXN0YWxlbmVzcy1pbmRpY2F0b3IuZnJlc2gge1xcbiAgICBmaWxsOiB2YXIoLS1jb2xvci1ncmVlbi04MDApO1xcbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLWdyZWVuLTMwMCk7XFxuICB9XFxuICAudmVyc2lvbi1zdGFsZW5lc3MtaW5kaWNhdG9yLnN0YWxlIHtcXG4gICAgZmlsbDogdmFyKC0tY29sb3ItYW1iZXItODAwKTtcXG4gICAgc3Ryb2tlOiB2YXIoLS1jb2xvci1hbWJlci0zMDApO1xcbiAgfVxcbiAgLnZlcnNpb24tc3RhbGVuZXNzLWluZGljYXRvci5vdXRkYXRlZCB7XFxuICAgIGZpbGw6IHZhcigtLWNvbG9yLXJlZC04MDApO1xcbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLXJlZC0zMDApO1xcbiAgfVxcbiAgLnZlcnNpb24tc3RhbGVuZXNzLWluZGljYXRvci51bmtub3duIHtcXG4gICAgZmlsbDogdmFyKC0tY29sb3ItZ3JheS04MDApO1xcbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLWdyYXktMzAwKTtcXG4gIH1cXG5cXG4gIC5uZXh0anMtY29udGFpbmVyLWJ1aWxkLWVycm9yLXZlcnNpb24tc3RhdHVzID4gLnR1cmJvcGFjay10ZXh0IHtcXG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KFxcbiAgICAgIHRvIHJpZ2h0LFxcbiAgICAgIHZhcigtLWNvbG9yLXR1cmJvcGFjay10ZXh0LXJlZCkgMCUsXFxuICAgICAgdmFyKC0tY29sb3ItdHVyYm9wYWNrLXRleHQtYmx1ZSkgMTAwJVxcbiAgICApO1xcbiAgICBiYWNrZ3JvdW5kLWNsaXA6IHRleHQ7XFxuICAgIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1xcbiAgICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICB9XFxuXCIsXCJcXG4gIC5yZXN0YXJ0LWRldi1zZXJ2ZXItYnV0dG9uIHtcXG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBnYXA6IDRweDtcXG4gICAgbWFyZ2luOiAwIDEycHg7XFxuXFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yNik7XFxuICAgIHBhZGRpbmc6IDZweCA4cHggNnB4IDZweDtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYW1iZXItMTAwKTtcXG4gICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS1hbHBoYS00MDApO1xcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctc21hbGwpO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLWZ1bGwpO1xcblxcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYW1iZXItOTAwKTtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTEyKTtcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgfVxcblwiLFwiXFxuICBbZGF0YS1uZXh0anMtdG9hc3RdIHtcXG4gICAgJltkYXRhLWhpZGRlbj0ndHJ1ZSddIHtcXG4gICAgICBkaXNwbGF5OiBub25lO1xcbiAgICB9XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWluZGljYXRvci1tZW51IHtcXG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktYWxwaGEtNDAwKTtcXG4gICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LW1lbnUpO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLXhsKTtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1zYW5zKTtcXG4gICAgei1pbmRleDogMztcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgb3V0bGluZTogMDtcXG4gICAgbWluLXdpZHRoOiAyNDhweDtcXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSB2YXIoLS1hbmltYXRlLW91dC1kdXJhdGlvbi1tcylcXG4gICAgICB2YXIoLS1hbmltYXRlLW91dC10aW1pbmctZnVuY3Rpb24pO1xcblxcbiAgICAmW2RhdGEtcmVuZGVyZWQ9J3RydWUnXSB7XFxuICAgICAgb3BhY2l0eTogMTtcXG4gICAgICBzY2FsZTogMTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmRpY2F0b3ItaW5uZXIge1xcbiAgICBwYWRkaW5nOiA2cHg7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmRpY2F0b3ItaXRlbSB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIHBhZGRpbmc6IDhweCA2cHg7XFxuICAgIGhlaWdodDogdmFyKC0tc2l6ZS0zNik7XFxuICAgIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7XFxuICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcblxcbiAgICBzdmcge1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTE2KTtcXG4gICAgICBoZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgICB9XFxuXFxuICAgICY6Zm9jdXMtdmlzaWJsZSB7XFxuICAgICAgb3V0bGluZTogMDtcXG4gICAgfVxcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmRpY2F0b3ItZm9vdGVyIHtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0yMDApO1xcbiAgICBwYWRkaW5nOiA2cHg7XFxuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LTQwMCk7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmRpY2F0b3ItaXRlbVtkYXRhLXNlbGVjdGVkPSd0cnVlJ10ge1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMjAwKTtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5kaWNhdG9yLWxhYmVsIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5kaWNhdG9yLXZhbHVlIHtcXG4gICAgZm9udC1zaXplOiB2YXIoLS1zaXplLTE0KTtcXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMjApO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS05MDApO1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5kaWNhdG9yLWlzc3VlLWNvdW50IHtcXG4gICAgLS1jb2xvci1wcmltYXJ5OiB2YXIoLS1jb2xvci1ncmF5LTgwMCk7XFxuICAgIC0tY29sb3Itc2Vjb25kYXJ5OiB2YXIoLS1jb2xvci1ncmF5LTEwMCk7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICBnYXA6IDhweDtcXG4gICAgbWluLXdpZHRoOiB2YXIoLS1zaXplLTQwKTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTI0KTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmFja2dyb3VuZC0xMDApO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XFxuICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zbWFsbCk7XFxuICAgIHBhZGRpbmc6IDJweDtcXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDEyOHB4O1xcbiAgICBmb250LXdlaWdodDogNTAwO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTMpO1xcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xcblxcbiAgICAmW2RhdGEtaGFzLWlzc3Vlcz0ndHJ1ZSddIHtcXG4gICAgICAtLWNvbG9yLXByaW1hcnk6IHZhcigtLWNvbG9yLXJlZC04MDApO1xcbiAgICAgIC0tY29sb3Itc2Vjb25kYXJ5OiB2YXIoLS1jb2xvci1yZWQtMTAwKTtcXG4gICAgfVxcblxcbiAgICAuZGV2LXRvb2xzLWluZGljYXRvci1pc3N1ZS1jb3VudC1pbmRpY2F0b3Ige1xcbiAgICAgIHdpZHRoOiB2YXIoLS1zaXplLTgpO1xcbiAgICAgIGhlaWdodDogdmFyKC0tc2l6ZS04KTtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1wcmltYXJ5KTtcXG4gICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tY29sb3Itc2Vjb25kYXJ5KTtcXG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5kaWNhdG9yLXNob3J0Y3V0IHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZ2FwOiA0cHg7XFxuXFxuICAgIGtiZCB7XFxuICAgICAgd2lkdGg6IHZhcigtLXNpemUtMjApO1xcbiAgICAgIGhlaWdodDogdmFyKC0tc2l6ZS0yMCk7XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJvdW5kZWQtbWQpO1xcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLWdyYXktNDAwKTtcXG4gICAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1zYW5zKTtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgICAgY29sb3I6IHZhcigtLWNvbG9yLWdyYXktMTAwMCk7XFxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tc2l6ZS0xMik7XFxuICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLXNpemUtMTYpO1xcbiAgICB9XFxuICB9XFxuXFxuICAuZGV2LXRvb2xzLWdyYWJiaW5nIHtcXG4gICAgY3Vyc29yOiBncmFiYmluZztcXG5cXG4gICAgPiAqIHtcXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gICAgfVxcbiAgfVxcblwiLHQwLmcsXCJcXG4gIC5kZXYtdG9vbHMtaW5mby1jb2RlIHtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItZ3JheS00MDApO1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZ3JheS0xMDAwKTtcXG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2stbW9ub3NwYWNlKTtcXG4gICAgcGFkZGluZzogMnB4IDRweDtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTMpO1xcbiAgICB3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLW1kLTIpO1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWNvZGUtYmxvY2stY29udGFpbmVyIHtcXG4gICAgcGFkZGluZzogNnB4O1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWNvZGUtYmxvY2sge1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY29sb3ItZ3JheS1hbHBoYS00MDApO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLW1kLTIpO1xcbiAgICBtaW4td2lkdGg6IDMyNnB4O1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWNvZGUtYmxvY2stcHJlIHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjay1tb25vc3BhY2UpO1xcbiAgICBmb250LXNpemU6IHZhcigtLXNpemUtMTIpO1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWNvcHktYnV0dG9uIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcblxcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgcmlnaHQ6IDhweDtcXG4gICAgdG9wOiA4cHg7XFxuICAgIHBhZGRpbmc6IDRweDtcXG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplLTI0KTtcXG4gICAgd2lkdGg6IHZhcigtLXNpemUtMjQpO1xcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yb3VuZGVkLW1kLTIpO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ncmF5LWFscGhhLTQwMCk7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMTAwKTtcXG4gIH1cXG5cXG4gIC5kZXYtdG9vbHMtaW5mby1jb2RlLWJsb2NrLWxpbmUge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gICAgcGFkZGluZzogMCAxNnB4O1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWNvZGUtYmxvY2stbGluZS5kZXYtdG9vbHMtaW5mby1oaWdobGlnaHQge1xcbiAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkIHZhcigtLWNvbG9yLWJsdWUtOTAwKTtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3ItYmx1ZS00MDApO1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWNvZGUtYmxvY2stanNvbi1rZXkge1xcbiAgICBjb2xvcjogdmFyKC0tY29sb3Itc3ludGF4LWtleXdvcmQpO1xcbiAgfVxcblxcbiAgLmRldi10b29scy1pbmZvLWNvZGUtYmxvY2stanNvbi12YWx1ZSB7XFxuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1zeW50YXgtbGluayk7XFxuICB9XFxuXCIsXCJcIixyUywnXFxuICAubmV4dGpzLXNjcm9sbC1mYWRlciB7XFxuICAgIC0tYmx1cjogMXB4O1xcbiAgICAtLXN0b3A6IDI1JTtcXG4gICAgLS1oZWlnaHQ6IDE1MHB4O1xcbiAgICAtLWNvbG9yLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLTEwMCk7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpO1xcbiAgICBsZWZ0OiAwO1xcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIodmFyKC0tYmx1cikpO1xcblxcbiAgICAmW2RhdGEtc2lkZT1cInRvcFwiXSB7XFxuICAgICAgdG9wOiAwO1xcbiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsIHRyYW5zcGFyZW50LCB2YXIoLS1jb2xvci1iZykpO1xcbiAgICAgIG1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHZhcigtLWNvbG9yLWJnKSB2YXIoLS1zdG9wKSwgdHJhbnNwYXJlbnQpO1xcbiAgICB9XFxuICB9XFxuJyxhYyxyNCxyMCxvbixvTixvTyxvYyxvbyxvTCxvdyxvYixvZixybSl9KX1mdW5jdGlvbiBhZigpe3ZhciBlLG4sdD0oZT1bXCJcXG4gICAgICAgIDpob3N0IHtcXG4gICAgICAgICAgYWxsOiBpbml0aWFsO1xcblxcbiAgICAgICAgICAvKiB0aGUgZGlyZWN0aW9uIHByb3BlcnR5IGlzIG5vdCByZXNldCBieSAnYWxsJyAqL1xcbiAgICAgICAgICBkaXJlY3Rpb246IGx0cjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIC8qIVxcbiAgICAgICAgICogQm9vdHN0cmFwIFJlYm9vdCB2NC40LjEgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXFxuICAgICAgICAgKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFRoZSBCb290c3RyYXAgQXV0aG9yc1xcbiAgICAgICAgICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUd2l0dGVyLCBJbmMuXFxuICAgICAgICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxcbiAgICAgICAgICogRm9ya2VkIGZyb20gTm9ybWFsaXplLmNzcywgbGljZW5zZWQgTUlUIChodHRwczovL2dpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzL2Jsb2IvbWFzdGVyL0xJQ0VOU0UubWQpXFxuICAgICAgICAgKi9cXG4gICAgICAgICosXFxuICAgICAgICAqOjpiZWZvcmUsXFxuICAgICAgICAqOjphZnRlciB7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICB9XFxuXFxuICAgICAgICA6aG9zdCB7XFxuICAgICAgICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmO1xcbiAgICAgICAgICBsaW5lLWhlaWdodDogMS4xNTtcXG4gICAgICAgICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xcbiAgICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBhcnRpY2xlLFxcbiAgICAgICAgYXNpZGUsXFxuICAgICAgICBmaWdjYXB0aW9uLFxcbiAgICAgICAgZmlndXJlLFxcbiAgICAgICAgZm9vdGVyLFxcbiAgICAgICAgaGVhZGVyLFxcbiAgICAgICAgaGdyb3VwLFxcbiAgICAgICAgbWFpbixcXG4gICAgICAgIG5hdixcXG4gICAgICAgIHNlY3Rpb24ge1xcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIDpob3N0IHtcXG4gICAgICAgICAgbWFyZ2luOiAwO1xcbiAgICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sXFxuICAgICAgICAgICAgJ0hlbHZldGljYSBOZXVlJywgQXJpYWwsICdOb3RvIFNhbnMnLCBzYW5zLXNlcmlmLFxcbiAgICAgICAgICAgICdBcHBsZSBDb2xvciBFbW9qaScsICdTZWdvZSBVSSBFbW9qaScsICdTZWdvZSBVSSBTeW1ib2wnLFxcbiAgICAgICAgICAgICdOb3RvIENvbG9yIEVtb2ppJztcXG4gICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xcbiAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xcbiAgICAgICAgICBsaW5lLWhlaWdodDogMS41O1xcbiAgICAgICAgICBjb2xvcjogdmFyKC0tY29sb3ItZm9udCk7XFxuICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XFxuICAgICAgICB9XFxuXFxuICAgICAgICA6aG9zdDpub3QoYnV0dG9uKSB7XFxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBbdGFiaW5kZXg9Jy0xJ106Zm9jdXM6bm90KDpmb2N1cy12aXNpYmxlKSB7XFxuICAgICAgICAgIG91dGxpbmU6IDAgIWltcG9ydGFudDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGhyIHtcXG4gICAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICAgICAgICAgIGhlaWdodDogMDtcXG4gICAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBoMSxcXG4gICAgICAgIGgyLFxcbiAgICAgICAgaDMsXFxuICAgICAgICBoNCxcXG4gICAgICAgIGg1LFxcbiAgICAgICAgaDYge1xcbiAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBwIHtcXG4gICAgICAgICAgbWFyZ2luLXRvcDogMDtcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGFiYnJbdGl0bGVdLFxcbiAgICAgICAgYWJicltkYXRhLW9yaWdpbmFsLXRpdGxlXSB7XFxuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgICAgICAgICAtd2Via2l0LXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcXG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkO1xcbiAgICAgICAgICBjdXJzb3I6IGhlbHA7XFxuICAgICAgICAgIGJvcmRlci1ib3R0b206IDA7XFxuICAgICAgICAgIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uLXNraXAtaW5rOiBub25lO1xcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb24tc2tpcC1pbms6IG5vbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBhZGRyZXNzIHtcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcXG4gICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIG9sLFxcbiAgICAgICAgdWwsXFxuICAgICAgICBkbCB7XFxuICAgICAgICAgIG1hcmdpbi10b3A6IDA7XFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBvbCBvbCxcXG4gICAgICAgIHVsIHVsLFxcbiAgICAgICAgb2wgdWwsXFxuICAgICAgICB1bCBvbCB7XFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBkdCB7XFxuICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBkZCB7XFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcXG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBibG9ja3F1b3RlIHtcXG4gICAgICAgICAgbWFyZ2luOiAwIDAgMTZweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGIsXFxuICAgICAgICBzdHJvbmcge1xcbiAgICAgICAgICBmb250LXdlaWdodDogYm9sZGVyO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgc21hbGwge1xcbiAgICAgICAgICBmb250LXNpemU6IDgwJTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHN1YixcXG4gICAgICAgIHN1cCB7XFxuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICAgICAgZm9udC1zaXplOiA3NSU7XFxuICAgICAgICAgIGxpbmUtaGVpZ2h0OiAwO1xcbiAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBzdWIge1xcbiAgICAgICAgICBib3R0b206IC0wLjI1ZW07XFxuICAgICAgICB9XFxuXFxuICAgICAgICBzdXAge1xcbiAgICAgICAgICB0b3A6IC0wLjVlbTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGEge1xcbiAgICAgICAgICBjb2xvcjogIzAwN2JmZjtcXG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGE6aG92ZXIge1xcbiAgICAgICAgICBjb2xvcjogIzAwNTZiMztcXG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBhOm5vdChbaHJlZl0pIHtcXG4gICAgICAgICAgY29sb3I6IGluaGVyaXQ7XFxuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGE6bm90KFtocmVmXSk6aG92ZXIge1xcbiAgICAgICAgICBjb2xvcjogaW5oZXJpdDtcXG4gICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgcHJlLFxcbiAgICAgICAgY29kZSxcXG4gICAgICAgIGtiZCxcXG4gICAgICAgIHNhbXAge1xcbiAgICAgICAgICBmb250LWZhbWlseTogU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLFxcbiAgICAgICAgICAgICdMaWJlcmF0aW9uIE1vbm8nLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XFxuICAgICAgICAgIGZvbnQtc2l6ZTogMWVtO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgcHJlIHtcXG4gICAgICAgICAgbWFyZ2luLXRvcDogMDtcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcXG4gICAgICAgICAgb3ZlcmZsb3c6IGF1dG87XFxuICAgICAgICB9XFxuXFxuICAgICAgICBmaWd1cmUge1xcbiAgICAgICAgICBtYXJnaW46IDAgMCAxNnB4O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaW1nIHtcXG4gICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gICAgICAgICAgYm9yZGVyLXN0eWxlOiBub25lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgc3ZnIHtcXG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHRhYmxlIHtcXG4gICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGNhcHRpb24ge1xcbiAgICAgICAgICBwYWRkaW5nLXRvcDogMTJweDtcXG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDEycHg7XFxuICAgICAgICAgIGNvbG9yOiAjNmM3NTdkO1xcbiAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgICAgICAgICBjYXB0aW9uLXNpZGU6IGJvdHRvbTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHRoIHtcXG4gICAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGxhYmVsIHtcXG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBidXR0b24ge1xcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xcbiAgICAgICAgICBib3JkZXI6IDA7XFxuICAgICAgICAgIHBhZGRpbmc6IDA7XFxuICAgICAgICAgIG1hcmdpbjogMDtcXG4gICAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcXG4gICAgICAgICAgYXBwZWFyYW5jZTogbm9uZTtcXG4gICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYnV0dG9uOmZvY3VzIHtcXG4gICAgICAgICAgb3V0bGluZTogMXB4IGRvdHRlZDtcXG4gICAgICAgICAgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYnV0dG9uOmZvY3VzOm5vdCg6Zm9jdXMtdmlzaWJsZSkge1xcbiAgICAgICAgICBvdXRsaW5lOiBub25lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaW5wdXQsXFxuICAgICAgICBidXR0b24sXFxuICAgICAgICBzZWxlY3QsXFxuICAgICAgICBvcHRncm91cCxcXG4gICAgICAgIHRleHRhcmVhIHtcXG4gICAgICAgICAgbWFyZ2luOiAwO1xcbiAgICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDtcXG4gICAgICAgICAgZm9udC1zaXplOiBpbmhlcml0O1xcbiAgICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGJ1dHRvbixcXG4gICAgICAgIGlucHV0IHtcXG4gICAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBidXR0b24sXFxuICAgICAgICBzZWxlY3Qge1xcbiAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHNlbGVjdCB7XFxuICAgICAgICAgIHdvcmQtd3JhcDogbm9ybWFsO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYnV0dG9uLFxcbiAgICAgICAgW3R5cGU9J2J1dHRvbiddLFxcbiAgICAgICAgW3R5cGU9J3Jlc2V0J10sXFxuICAgICAgICBbdHlwZT0nc3VibWl0J10ge1xcbiAgICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGJ1dHRvbjpub3QoOmRpc2FibGVkKSxcXG4gICAgICAgIFt0eXBlPSdidXR0b24nXTpub3QoOmRpc2FibGVkKSxcXG4gICAgICAgIFt0eXBlPSdyZXNldCddOm5vdCg6ZGlzYWJsZWQpLFxcbiAgICAgICAgW3R5cGU9J3N1Ym1pdCddOm5vdCg6ZGlzYWJsZWQpIHtcXG4gICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxcbiAgICAgICAgW3R5cGU9J2J1dHRvbiddOjotbW96LWZvY3VzLWlubmVyLFxcbiAgICAgICAgW3R5cGU9J3Jlc2V0J106Oi1tb3otZm9jdXMtaW5uZXIsXFxuICAgICAgICBbdHlwZT0nc3VibWl0J106Oi1tb3otZm9jdXMtaW5uZXIge1xcbiAgICAgICAgICBwYWRkaW5nOiAwO1xcbiAgICAgICAgICBib3JkZXItc3R5bGU6IG5vbmU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpbnB1dFt0eXBlPSdyYWRpbyddLFxcbiAgICAgICAgaW5wdXRbdHlwZT0nY2hlY2tib3gnXSB7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIHBhZGRpbmc6IDA7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpbnB1dFt0eXBlPSdkYXRlJ10sXFxuICAgICAgICBpbnB1dFt0eXBlPSd0aW1lJ10sXFxuICAgICAgICBpbnB1dFt0eXBlPSdkYXRldGltZS1sb2NhbCddLFxcbiAgICAgICAgaW5wdXRbdHlwZT0nbW9udGgnXSB7XFxuICAgICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbGlzdGJveDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHRleHRhcmVhIHtcXG4gICAgICAgICAgb3ZlcmZsb3c6IGF1dG87XFxuICAgICAgICAgIHJlc2l6ZTogdmVydGljYWw7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBmaWVsZHNldCB7XFxuICAgICAgICAgIG1pbi13aWR0aDogMDtcXG4gICAgICAgICAgcGFkZGluZzogMDtcXG4gICAgICAgICAgbWFyZ2luOiAwO1xcbiAgICAgICAgICBib3JkZXI6IDA7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBsZWdlbmQge1xcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgICAgICAgd2lkdGg6IDEwMCU7XFxuICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcXG4gICAgICAgICAgcGFkZGluZzogMDtcXG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbiAgICAgICAgICBmb250LXNpemU6IDI0cHg7XFxuICAgICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgICAgICAgICBjb2xvcjogaW5oZXJpdDtcXG4gICAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHByb2dyZXNzIHtcXG4gICAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgW3R5cGU9J251bWJlciddOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxcbiAgICAgICAgW3R5cGU9J251bWJlciddOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcXG4gICAgICAgICAgaGVpZ2h0OiBhdXRvO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgW3R5cGU9J3NlYXJjaCddIHtcXG4gICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxuICAgICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIFt0eXBlPSdzZWFyY2gnXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XFxuICAgICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIDo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24ge1xcbiAgICAgICAgICBmb250OiBpbmhlcml0O1xcbiAgICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIG91dHB1dCB7XFxuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHN1bW1hcnkge1xcbiAgICAgICAgICBkaXNwbGF5OiBsaXN0LWl0ZW07XFxuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHRlbXBsYXRlIHtcXG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIFtoaWRkZW5dIHtcXG4gICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgICAgICAgfVxcbiAgICAgIFwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiBhZj1mdW5jdGlvbigpe3JldHVybiB0fSx0fWZ1bmN0aW9uIGFwKCl7cmV0dXJuKDAseS5qc3gpKFwic3R5bGVcIix7Y2hpbGRyZW46ZWkoYWYoKSl9KX1mdW5jdGlvbiBhaCgpe3ZhciBlLG4sdD0oZT1bJ1xcbiAgICAgICAgOmhvc3Qge1xcbiAgICAgICAgICAvKiBcXG4gICAgICAgICAgICogQ0FVVElPTjogVEhJUyBJUyBBIFdPUktBUk9VTkQhXFxuICAgICAgICAgICAqIEZvciBub3csIHdlIHVzZSBAYmFiZWwvY29kZS1mcmFtZSB0byBwYXJzZSB0aGUgY29kZSBmcmFtZSB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IG9wdGlvbiB0byBjaGFuZ2UgdGhlIGNvbG9yLlxcbiAgICAgICAgICAgKiB4LXJlZjogaHR0cHM6Ly9naXRodWIuY29tL2JhYmVsL2JhYmVsL2Jsb2IvZWZhNTIzMjRmZjgzNWI3OTRjNDgwODBmMTQ4NzdiNmNhZjMyY2QxNS9wYWNrYWdlcy9iYWJlbC1jb2RlLWZyYW1lL3NyYy9kZWZzLnRzI0w0MC1MNTRcXG4gICAgICAgICAgICogU28sIHdlIGRvIGEgd29ya2Fyb3VuZCBtYXBwaW5nIHRvIGNoYW5nZSB0aGUgY29sb3IgbWF0Y2hpbmcgdGhlIHRoZW1lLlxcbiAgICAgICAgICAgKlxcbiAgICAgICAgICAgKiBGb3IgZXhhbXBsZSwgaW4gQGJhYmVsL2NvZGUtZnJhbWUsIHRoZSBcImtleXdvcmRcIiBpcyBtYXBwZWQgdG8gQU5TSSBcImN5YW5cIi5cXG4gICAgICAgICAgICogV2Ugd2FudCB0aGUgXCJrZXl3b3JkXCIgdG8gdXNlIHRoZSBcInN5bnRheC1rZXl3b3JkXCIgY29sb3IgaW4gdGhlIHRoZW1lLlxcbiAgICAgICAgICAgKiBTbywgd2UgbWFwIHRoZSBcImN5YW5cIiB0byB0aGUgXCJzeW50YXgta2V5d29yZFwiIGluIHRoZSB0aGVtZS5cXG4gICAgICAgICAgICovXFxuICAgICAgICAgIC8qIGN5YW46IGtleXdvcmQgKi9cXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWN5YW46IHZhcigtLWNvbG9yLXN5bnRheC1rZXl3b3JkKTtcXG4gICAgICAgICAgLyogeWVsbG93OiBjYXBpdGFsaXplZCwganN4SWRlbnRpZmllciwgcHVuY3R1YXRpb24gKi9cXG4gICAgICAgICAgLS1jb2xvci1hbnNpLXllbGxvdzogdmFyKC0tY29sb3Itc3ludGF4LWZ1bmN0aW9uKTtcXG4gICAgICAgICAgLyogbWFnZW50YTogbnVtYmVyLCByZWdleCAqL1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktbWFnZW50YTogdmFyKC0tY29sb3Itc3ludGF4LWtleXdvcmQpO1xcbiAgICAgICAgICAvKiBncmVlbjogc3RyaW5nICovXFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1ncmVlbjogdmFyKC0tY29sb3Itc3ludGF4LXN0cmluZyk7XFxuICAgICAgICAgIC8qIGdyYXkgKGJyaWdodCBibGFjayk6IGNvbW1lbnQsIGd1dHRlciAqL1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYnJpZ2h0LWJsYWNrOiB2YXIoLS1jb2xvci1zeW50YXgtY29tbWVudCk7XFxuXFxuICAgICAgICAgIC8qIEFuc2kgLSBUZW1wb3JhcnkgKi9cXG4gICAgICAgICAgLS1jb2xvci1hbnNpLXNlbGVjdGlvbjogdmFyKC0tY29sb3ItZ3JheS1hbHBoYS0zMDApO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtMjAwKTtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWZnOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcblxcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktd2hpdGU6IHZhcigtLWNvbG9yLWdyYXktNzAwKTtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJsYWNrOiB2YXIoLS1jb2xvci1ncmF5LTIwMCk7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1ibHVlOiB2YXIoLS1jb2xvci1ibHVlLTcwMCk7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1yZWQ6IHZhcigtLWNvbG9yLXJlZC03MDApO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYnJpZ2h0LXdoaXRlOiB2YXIoLS1jb2xvci1ncmF5LTEwMDApO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYnJpZ2h0LWJsdWU6IHZhcigtLWNvbG9yLWJsdWUtODAwKTtcXG4gICAgICAgICAgLS1jb2xvci1hbnNpLWJyaWdodC1jeWFuOiB2YXIoLS1jb2xvci1ibHVlLTgwMCk7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1icmlnaHQtZ3JlZW46IHZhcigtLWNvbG9yLWdyZWVuLTgwMCk7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1icmlnaHQtbWFnZW50YTogdmFyKC0tY29sb3ItYmx1ZS04MDApO1xcbiAgICAgICAgICAtLWNvbG9yLWFuc2ktYnJpZ2h0LXJlZDogdmFyKC0tY29sb3ItcmVkLTgwMCk7XFxuICAgICAgICAgIC0tY29sb3ItYW5zaS1icmlnaHQteWVsbG93OiB2YXIoLS1jb2xvci1hbWJlci05MDApO1xcblxcbiAgICAgICAgICAvKiBCYWNrZ3JvdW5kIExpZ2h0ICovXFxuICAgICAgICAgIC0tY29sb3ItYmFja2dyb3VuZC0xMDA6ICNmZmZmZmY7XFxuICAgICAgICAgIC0tY29sb3ItYmFja2dyb3VuZC0yMDA6ICNmYWZhZmE7XFxuXFxuICAgICAgICAgIC8qIFN5bnRheCBMaWdodCAqL1xcbiAgICAgICAgICAtLWNvbG9yLXN5bnRheC1jb21tZW50OiAjNTQ1NDU0O1xcbiAgICAgICAgICAtLWNvbG9yLXN5bnRheC1jb25zdGFudDogIzE3MTcxNztcXG4gICAgICAgICAgLS1jb2xvci1zeW50YXgtZnVuY3Rpb246ICMwMDU0YWQ7XFxuICAgICAgICAgIC0tY29sb3Itc3ludGF4LWtleXdvcmQ6ICNhNTE4NTA7XFxuICAgICAgICAgIC0tY29sb3Itc3ludGF4LWxpbms6ICMwNjYwNTY7XFxuICAgICAgICAgIC0tY29sb3Itc3ludGF4LXBhcmFtZXRlcjogIzhmM2UwMDtcXG4gICAgICAgICAgLS1jb2xvci1zeW50YXgtcHVuY3R1YXRpb246ICMxNzE3MTc7XFxuICAgICAgICAgIC0tY29sb3Itc3ludGF4LXN0cmluZzogIzAzNjE1NztcXG4gICAgICAgICAgLS1jb2xvci1zeW50YXgtc3RyaW5nLWV4cHJlc3Npb246ICMwNjYwNTY7XFxuXFxuICAgICAgICAgIC8qIEdyYXkgU2NhbGUgTGlnaHQgKi9cXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTEwMDogI2YyZjJmMjtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTIwMDogI2ViZWJlYjtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTMwMDogI2U2ZTZlNjtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTQwMDogI2VhZWFlYTtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTUwMDogI2M5YzljOTtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTYwMDogI2E4YThhODtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTcwMDogIzhmOGY4ZjtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTgwMDogIzdkN2Q3ZDtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTkwMDogIzY2NjY2NjtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LTEwMDA6ICMxNzE3MTc7XFxuXFxuICAgICAgICAgIC8qIEdyYXkgQWxwaGEgU2NhbGUgTGlnaHQgKi9cXG4gICAgICAgICAgLS1jb2xvci1ncmF5LWFscGhhLTEwMDogcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LWFscGhhLTIwMDogcmdiYSgwLCAwLCAwLCAwLjA4MSk7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS1hbHBoYS0zMDA6IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LWFscGhhLTQwMDogcmdiYSgwLCAwLCAwLCAwLjA4KTtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LWFscGhhLTUwMDogcmdiYSgwLCAwLCAwLCAwLjIxKTtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LWFscGhhLTYwMDogcmdiYSgwLCAwLCAwLCAwLjM0KTtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LWFscGhhLTcwMDogcmdiYSgwLCAwLCAwLCAwLjQ0KTtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LWFscGhhLTgwMDogcmdiYSgwLCAwLCAwLCAwLjUxKTtcXG4gICAgICAgICAgLS1jb2xvci1ncmF5LWFscGhhLTkwMDogcmdiYSgwLCAwLCAwLCAwLjYwNSk7XFxuICAgICAgICAgIC0tY29sb3ItZ3JheS1hbHBoYS0xMDAwOiByZ2JhKDAsIDAsIDAsIDAuOTEpO1xcblxcbiAgICAgICAgICAvKiBCbHVlIFNjYWxlIExpZ2h0ICovXFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS0xMDA6ICNmMGY3ZmY7XFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS0yMDA6ICNlZGY2ZmY7XFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS0zMDA6ICNlMWYwZmY7XFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS00MDA6ICNjZGU3ZmY7XFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS01MDA6ICM5OWNlZmY7XFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS02MDA6ICM1MmFlZmY7XFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS03MDA6ICMwMDcwZjM7XFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS04MDA6ICMwMDYwZDE7XFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS05MDA6ICMwMDY3ZDY7XFxuICAgICAgICAgIC0tY29sb3ItYmx1ZS0xMDAwOiAjMDAyNWFkO1xcblxcbiAgICAgICAgICAvKiBSZWQgU2NhbGUgTGlnaHQgKi9cXG4gICAgICAgICAgLS1jb2xvci1yZWQtMTAwOiAjZmZmMGYwO1xcbiAgICAgICAgICAtLWNvbG9yLXJlZC0yMDA6ICNmZmViZWI7XFxuICAgICAgICAgIC0tY29sb3ItcmVkLTMwMDogI2ZmZTVlNTtcXG4gICAgICAgICAgLS1jb2xvci1yZWQtNDAwOiAjZmRkOGQ4O1xcbiAgICAgICAgICAtLWNvbG9yLXJlZC01MDA6ICNmOGJhYmE7XFxuICAgICAgICAgIC0tY29sb3ItcmVkLTYwMDogI2Y4NzI3NDtcXG4gICAgICAgICAgLS1jb2xvci1yZWQtNzAwOiAjZTU0ODRkO1xcbiAgICAgICAgICAtLWNvbG9yLXJlZC04MDA6ICNkYTMwMzY7XFxuICAgICAgICAgIC0tY29sb3ItcmVkLTkwMDogI2NhMmEzMDtcXG4gICAgICAgICAgLS1jb2xvci1yZWQtMTAwMDogIzM4MTMxNjtcXG5cXG4gICAgICAgICAgLyogQW1iZXIgU2NhbGUgTGlnaHQgKi9cXG4gICAgICAgICAgLS1jb2xvci1hbWJlci0xMDA6ICNmZmY2ZTU7XFxuICAgICAgICAgIC0tY29sb3ItYW1iZXItMjAwOiAjZmZmNGQ1O1xcbiAgICAgICAgICAtLWNvbG9yLWFtYmVyLTMwMDogI2ZlZjBjZDtcXG4gICAgICAgICAgLS1jb2xvci1hbWJlci00MDA6ICNmZmRkYmY7XFxuICAgICAgICAgIC0tY29sb3ItYW1iZXItNTAwOiAjZmZjOTZiO1xcbiAgICAgICAgICAtLWNvbG9yLWFtYmVyLTYwMDogI2Y1YjA0NztcXG4gICAgICAgICAgLS1jb2xvci1hbWJlci03MDA6ICNmZmIyMjQ7XFxuICAgICAgICAgIC0tY29sb3ItYW1iZXItODAwOiAjZmY5OTBhO1xcbiAgICAgICAgICAtLWNvbG9yLWFtYmVyLTkwMDogI2EzNTIwMDtcXG4gICAgICAgICAgLS1jb2xvci1hbWJlci0xMDAwOiAjNGUyMDA5O1xcblxcbiAgICAgICAgICAvKiBHcmVlbiBTY2FsZSBMaWdodCAqL1xcbiAgICAgICAgICAtLWNvbG9yLWdyZWVuLTEwMDogI2VmZmJlZjtcXG4gICAgICAgICAgLS1jb2xvci1ncmVlbi0yMDA6ICNlYWZhZWE7XFxuICAgICAgICAgIC0tY29sb3ItZ3JlZW4tMzAwOiAjZGNmNmRjO1xcbiAgICAgICAgICAtLWNvbG9yLWdyZWVuLTQwMDogI2M4ZjFjOTtcXG4gICAgICAgICAgLS1jb2xvci1ncmVlbi01MDA6ICM5OWU1OWY7XFxuICAgICAgICAgIC0tY29sb3ItZ3JlZW4tNjAwOiAjNmNkYTc2O1xcbiAgICAgICAgICAtLWNvbG9yLWdyZWVuLTcwMDogIzQ2YTc1ODtcXG4gICAgICAgICAgLS1jb2xvci1ncmVlbi04MDA6ICMzODhlNGE7XFxuICAgICAgICAgIC0tY29sb3ItZ3JlZW4tOTAwOiAjMjk3YzNiO1xcbiAgICAgICAgICAtLWNvbG9yLWdyZWVuLTEwMDA6ICMxODMxMWU7XFxuXFxuICAgICAgICAgIC8qIFR1cmJvcGFjayBMaWdodCAtIFRlbXBvcmFyeSAqL1xcbiAgICAgICAgICAtLWNvbG9yLXR1cmJvcGFjay10ZXh0LXJlZDogI2ZmMWU1NjtcXG4gICAgICAgICAgLS1jb2xvci10dXJib3BhY2stdGV4dC1ibHVlOiAjMDA5NmZmO1xcbiAgICAgICAgICAtLWNvbG9yLXR1cmJvcGFjay1ib3JkZXItcmVkOiAjZjBhZGJlO1xcbiAgICAgICAgICAtLWNvbG9yLXR1cmJvcGFjay1ib3JkZXItYmx1ZTogI2FkY2NlYTtcXG4gICAgICAgICAgLS1jb2xvci10dXJib3BhY2stYmFja2dyb3VuZC1yZWQ6ICNmZmY3Zjk7XFxuICAgICAgICAgIC0tY29sb3ItdHVyYm9wYWNrLWJhY2tncm91bmQtYmx1ZTogI2Y2ZmJmZjtcXG4gICAgICAgIH1cXG4gICAgICAnXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiBhaD1mdW5jdGlvbigpe3JldHVybiB0fSx0fWZ1bmN0aW9uIGFnKCl7cmV0dXJuKDAseS5qc3gpKFwic3R5bGVcIix7Y2hpbGRyZW46ZWkoYWgoKSl9KX1mdW5jdGlvbiBhbShlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9ZnVuY3Rpb24gYXYoZSxuKXtyZXR1cm4gbj1udWxsIT1uP246e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KSl9KSxlfWZ1bmN0aW9uIGFiKGUpe3ZhciBuPWUuc3RhdGUsdD1lLmRpc3BhdGNoLHI9ZS5nZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlscyxvPWUucnVudGltZUVycm9ycyxhPWUuZXJyb3JDb3VudCxpPSEhcHJvY2Vzcy5lbnYuVFVSQk9QQUNLLGw9KDAsdEouTikobi5pc0Vycm9yT3ZlcmxheU9wZW4se2V4aXREZWxheToyMDB9KSxzPWwubW91bnRlZCxjPXtyZW5kZXJlZDpsLnJlbmRlcmVkLHRyYW5zaXRpb25EdXJhdGlvbk1zOjIwMCxpc1R1cmJvcGFjazppLHZlcnNpb25JbmZvOm4udmVyc2lvbkluZm8sZXJyb3JDb3VudDphfTtyZXR1cm4gbnVsbCE9PW4uYnVpbGRFcnJvcj8oMCx5LmpzeCkodHIsYXYoYW0oe30sYykse21lc3NhZ2U6bi5idWlsZEVycm9yLHJlbmRlcmVkOiEwfSkpOm8ubGVuZ3RoJiZzPygwLHkuanN4KSh0VCxhdihhbSh7fSxjKSx7ZGVidWdJbmZvOm4uZGVidWdJbmZvLGdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzOnIscnVudGltZUVycm9yczpvLG9uQ2xvc2U6ZnVuY3Rpb24oKXt0KHt0eXBlOkl9KX19KSk6KDAseS5qc3gpKHguU3VzcGVuc2Use30pfWZ1bmN0aW9uIGF5KGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBheChlLG4sdCl7cmV0dXJuIG4gaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHt2YWx1ZTp0LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVtuXT10LGV9ZnVuY3Rpb24gYXcoZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIHQ9bnVsbCE9YXJndW1lbnRzW25dP2FyZ3VtZW50c1tuXTp7fSxyPU9iamVjdC5rZXlzKHQpO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKG4pe2F4KGUsbix0W25dKX0pfXJldHVybiBlfWZ1bmN0aW9uIGFqKGUsbil7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLCFufHxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShlLG4pfHxmdW5jdGlvbihlLG4pe2lmKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBheShlLG4pO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS5zbGljZSg4LC0xKTtpZihcIk9iamVjdFwiPT09dCYmZS5jb25zdHJ1Y3RvciYmKHQ9ZS5jb25zdHJ1Y3Rvci5uYW1lKSxcIk1hcFwiPT09dHx8XCJTZXRcIj09PXQpcmV0dXJuIEFycmF5LmZyb20odCk7aWYoXCJBcmd1bWVudHNcIj09PXR8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpKXJldHVybiBheShlLG4pfX0oZSxuKXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX12YXIgYWs9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhdGUuYnVpbGRFcnJvcj8oMCx5LmpzeCkoYU8sYXcoe30sZSkpOigwLHkuanN4KShhQSxhdyh7fSxlKSl9LGFBPWZ1bmN0aW9uKGUpe3ZhciBuLHQscixvPWUuY2hpbGRyZW4sYT1lLnN0YXRlLGk9ZS5pc0FwcERpcixsPWUuZGlzcGF0Y2gscz1hLmVycm9ycyxjPWFqKCgwLHgudXNlU3RhdGUpKHt9KSwyKSx1PWNbMF0sZD1jWzFdLGY9YWooKDAseC51c2VNZW1vKShmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSxuPW51bGwsdD0wO3Q8cy5sZW5ndGg7Kyt0KXt2YXIgcj1zW3RdLG89ci5pZDtpZihvIGluIHUpe2UucHVzaCh1W29dKTtjb250aW51ZX1uPXI7YnJlYWt9cmV0dXJuW2Usbl19LFtzLHVdKSwyKSxwPWZbMF0saD1mWzFdO3JldHVybiB0PShuPXtlcnJvcnM6cyxkaXNwYXRjaDpsfSkuZXJyb3JzLHI9bi5kaXNwYXRjaCwoMCx4LnVzZUVmZmVjdCkoZnVuY3Rpb24oKXt2YXIgZSxuLG89KG51bGw9PShlPXByb2Nlc3MuZW52Ll9fTkVYVF9CVU5ETEVSKT92b2lkIDA6ZS50b1VwcGVyQ2FzZSgpKT09PVwiVFVSQk9QQUNLXCImJnByb2Nlc3MuZW52Ll9fTkVYVF9CVU5ETEVSX0hBU19QRVJTSVNURU5UX0NBQ0hFLGE9bnVsbD09KG49dFswXSk/dm9pZCAwOm4uZXJyb3I7aWYobyYmYSl7dmFyIGk9XCJfX25leHRfZXJyb3Jfb3ZlcmxheTpcIi5jb25jYXQod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLFwiOlwiKS5jb25jYXQoYS5tZXNzYWdlKTtyKHt0eXBlOkssc2hvd1Jlc3RhcnRTZXJ2ZXJCdXR0b246XCIxXCI9PT1zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGkpfSk7dmFyIGw9ZnVuY3Rpb24oKXtzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGksXCIxXCIpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIixsKSxmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsbCl9fXIoe3R5cGU6SyxzaG93UmVzdGFydFNlcnZlckJ1dHRvbjohMX0pfSxbdCxyXSksKDAseC51c2VFZmZlY3QpKGZ1bmN0aW9uKCl7aWYobnVsbCE9aCl7dmFyIGUsbix0PSEwO3JldHVybihlPWgsbj1pLHRiKGZ1bmN0aW9uKCl7dmFyIHQscixvLGEsaTtyZXR1cm4gdHcodGhpcyxmdW5jdGlvbihsKXtzd2l0Y2gobC5sYWJlbCl7Y2FzZSAwOnZhciBzLGM7aWYodD17aWQ6ZS5pZCxydW50aW1lOiEwLGVycm9yOmUuZXJyb3IsdHlwZTplLnR5cGV9LCEoXCJ1c2VcImluIHgpKXJldHVyblszLDFdO3JldHVybiByPXR4KHR5KHt9LHQpLHtmcmFtZXM6KGM9KHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGIoZnVuY3Rpb24oKXtyZXR1cm4gdHcodGhpcyxmdW5jdGlvbih0KXtzd2l0Y2godC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LGVDKGUuZnJhbWVzLHRtKGUuZXJyb3IpLG4pXTtjYXNlIDE6cmV0dXJuWzIsdC5zZW50KCldfX0pfSkoKX0pKCksZnVuY3Rpb24oKXtyZXR1cm4gY30pfSksdm9pZCAwIT09ZS5jb21wb25lbnRTdGFja0ZyYW1lcyYmKHIuY29tcG9uZW50U3RhY2tGcmFtZXM9ZS5jb21wb25lbnRTdGFja0ZyYW1lcyksWzIscl07Y2FzZSAxOnJldHVybiBhPVt0eSh7fSx0KV0saT17fSxbNCxlQyhlLmZyYW1lcyx0bShlLmVycm9yKSxuKV07Y2FzZSAyOnJldHVybiBvPXR4LmFwcGx5KHZvaWQgMCxhLmNvbmNhdChbKGkuZnJhbWVzPWwuc2VudCgpLGkpXSkpLHZvaWQgMCE9PWUuY29tcG9uZW50U3RhY2tGcmFtZXMmJihvLmNvbXBvbmVudFN0YWNrRnJhbWVzPWUuY29tcG9uZW50U3RhY2tGcmFtZXMpLFsyLG9dO2Nhc2UgMzpyZXR1cm5bMl19fSl9KSgpKS50aGVuKGZ1bmN0aW9uKGUpe3QmJmQoZnVuY3Rpb24obil7dmFyIHQscjtyZXR1cm4gdD1hdyh7fSxuKSxyPW51bGwhPShyPWF4KHt9LGUuaWQsZSkpP3I6e30sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6KGZ1bmN0aW9uKGUsbil7dmFyIHQ9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0LnB1c2guYXBwbHkodCxyKX1yZXR1cm4gdH0pKE9iamVjdChyKSkuZm9yRWFjaChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSx0fSl9KSxmdW5jdGlvbigpe3Q9ITF9fX0sW2gsaV0pLG8oe3J1bnRpbWVFcnJvcnM6cCx0b3RhbEVycm9yQ291bnQ6cy5sZW5ndGh9KX0sYU89ZnVuY3Rpb24oZSl7cmV0dXJuKDAsZS5jaGlsZHJlbikoe3J1bnRpbWVFcnJvcnM6W10sdG90YWxFcnJvckNvdW50OjF9KX07ZnVuY3Rpb24gYUMoKXt2YXIgZSxuLHQ9KGU9W1wiXFxuICAgICAgOmhvc3QoLmRhcmspIHtcXG4gICAgICAgIFwiLFwiXFxuICAgICAgICBcIixcIlxcbiAgICAgIH1cXG5cXG4gICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XFxuICAgICAgICA6aG9zdCg6bm90KC5saWdodCkpIHtcXG4gICAgICAgICAgXCIsXCJcXG4gICAgICAgICAgXCIsXCJcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIFwiXSxufHwobj1lLnNsaWNlKDApKSxPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUse3Jhdzp7dmFsdWU6T2JqZWN0LmZyZWV6ZShuKX19KSkpO3JldHVybiBhQz1mdW5jdGlvbigpe3JldHVybiB0fSx0fXZhciBhUz1cIlxcbiAgLyogQmFja2dyb3VuZCBEYXJrICovXFxuICAtLWNvbG9yLWJhY2tncm91bmQtMTAwOiAjMGEwYTBhO1xcbiAgLS1jb2xvci1iYWNrZ3JvdW5kLTIwMDogIzAwMDAwMDtcXG5cXG4gIC8qIFN5bnRheCBEYXJrICovXFxuICAtLWNvbG9yLXN5bnRheC1jb21tZW50OiAjYTBhMGEwO1xcbiAgLS1jb2xvci1zeW50YXgtY29uc3RhbnQ6ICNlZGVkZWQ7XFxuICAtLWNvbG9yLXN5bnRheC1mdW5jdGlvbjogIzUyYTlmZjtcXG4gIC0tY29sb3Itc3ludGF4LWtleXdvcmQ6ICNmNzZlOTk7XFxuICAtLWNvbG9yLXN5bnRheC1saW5rOiAjMGFjNWIyO1xcbiAgLS1jb2xvci1zeW50YXgtcGFyYW1ldGVyOiAjZjFhMTBkO1xcbiAgLS1jb2xvci1zeW50YXgtcHVuY3R1YXRpb246ICNlZGVkZWQ7XFxuICAtLWNvbG9yLXN5bnRheC1zdHJpbmc6ICMwYWM1YjI7XFxuICAtLWNvbG9yLXN5bnRheC1zdHJpbmctZXhwcmVzc2lvbjogIzBhYzViMjtcXG5cXG4gIC8qIEdyYXkgU2NhbGUgRGFyayAqL1xcbiAgLS1jb2xvci1ncmF5LTEwMDogIzFhMWExYTtcXG4gIC0tY29sb3ItZ3JheS0yMDA6ICMxZjFmMWY7XFxuICAtLWNvbG9yLWdyYXktMzAwOiAjMjkyOTI5O1xcbiAgLS1jb2xvci1ncmF5LTQwMDogIzJlMmUyZTtcXG4gIC0tY29sb3ItZ3JheS01MDA6ICM0NTQ1NDU7XFxuICAtLWNvbG9yLWdyYXktNjAwOiAjODc4Nzg3O1xcbiAgLS1jb2xvci1ncmF5LTcwMDogIzhmOGY4ZjtcXG4gIC0tY29sb3ItZ3JheS04MDA6ICM3ZDdkN2Q7XFxuICAtLWNvbG9yLWdyYXktOTAwOiAjYTBhMGEwO1xcbiAgLS1jb2xvci1ncmF5LTEwMDA6ICNlZGVkZWQ7XFxuXFxuICAvKiBHcmF5IEFscGhhIFNjYWxlIERhcmsgKi9cXG4gIC0tY29sb3ItZ3JheS1hbHBoYS0xMDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNjYpO1xcbiAgLS1jb2xvci1ncmF5LWFscGhhLTIwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4Nyk7XFxuICAtLWNvbG9yLWdyYXktYWxwaGEtMzAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTI1KTtcXG4gIC0tY29sb3ItZ3JheS1hbHBoYS00MDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNDUpO1xcbiAgLS1jb2xvci1ncmF5LWFscGhhLTUwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIzOSk7XFxuICAtLWNvbG9yLWdyYXktYWxwaGEtNjAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTA2KTtcXG4gIC0tY29sb3ItZ3JheS1hbHBoYS03MDA6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NCk7XFxuICAtLWNvbG9yLWdyYXktYWxwaGEtODAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDcpO1xcbiAgLS1jb2xvci1ncmF5LWFscGhhLTkwMDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYxKTtcXG4gIC0tY29sb3ItZ3JheS1hbHBoYS0xMDAwOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTIzKTtcXG5cXG4gIC8qIEJsdWUgU2NhbGUgRGFyayAqL1xcbiAgLS1jb2xvci1ibHVlLTEwMDogIzBmMWIyZDtcXG4gIC0tY29sb3ItYmx1ZS0yMDA6ICMxMDI0M2U7XFxuICAtLWNvbG9yLWJsdWUtMzAwOiAjMGYzMDU4O1xcbiAgLS1jb2xvci1ibHVlLTQwMDogIzBkMzg2ODtcXG4gIC0tY29sb3ItYmx1ZS01MDA6ICMwYTQ0ODE7XFxuICAtLWNvbG9yLWJsdWUtNjAwOiAjMDA5MWZmO1xcbiAgLS1jb2xvci1ibHVlLTcwMDogIzAwNzBmMztcXG4gIC0tY29sb3ItYmx1ZS04MDA6ICMwMDYwZDE7XFxuICAtLWNvbG9yLWJsdWUtOTAwOiAjNTJhOWZmO1xcbiAgLS1jb2xvci1ibHVlLTEwMDA6ICNlYWY2ZmY7XFxuXFxuICAvKiBSZWQgU2NhbGUgRGFyayAqL1xcbiAgLS1jb2xvci1yZWQtMTAwOiAjMmExMzE0O1xcbiAgLS1jb2xvci1yZWQtMjAwOiAjM2QxNzE5O1xcbiAgLS1jb2xvci1yZWQtMzAwOiAjNTUxYTFlO1xcbiAgLS1jb2xvci1yZWQtNDAwOiAjNjcxZTIyO1xcbiAgLS1jb2xvci1yZWQtNTAwOiAjODIyMDI1O1xcbiAgLS1jb2xvci1yZWQtNjAwOiAjZTU0ODRkO1xcbiAgLS1jb2xvci1yZWQtNzAwOiAjZTU0ODRkO1xcbiAgLS1jb2xvci1yZWQtODAwOiAjZGEzMDM2O1xcbiAgLS1jb2xvci1yZWQtOTAwOiAjZmY2MzY5O1xcbiAgLS1jb2xvci1yZWQtMTAwMDogI2ZmZWNlZTtcXG5cXG4gIC8qIEFtYmVyIFNjYWxlIERhcmsgKi9cXG4gIC0tY29sb3ItYW1iZXItMTAwOiAjMjcxNzAwO1xcbiAgLS1jb2xvci1hbWJlci0yMDA6ICMzNDFjMDA7XFxuICAtLWNvbG9yLWFtYmVyLTMwMDogIzRhMjkwMDtcXG4gIC0tY29sb3ItYW1iZXItNDAwOiAjNTczMzAwO1xcbiAgLS1jb2xvci1hbWJlci01MDA6ICM2OTNmMDU7XFxuICAtLWNvbG9yLWFtYmVyLTYwMDogI2U3OWMxMztcXG4gIC0tY29sb3ItYW1iZXItNzAwOiAjZmZiMjI0O1xcbiAgLS1jb2xvci1hbWJlci04MDA6ICNmZjk5MGE7XFxuICAtLWNvbG9yLWFtYmVyLTkwMDogI2YxYTEwZDtcXG4gIC0tY29sb3ItYW1iZXItMTAwMDogI2ZlZjNkZDtcXG5cXG4gIC8qIEdyZWVuIFNjYWxlIERhcmsgKi9cXG4gIC0tY29sb3ItZ3JlZW4tMTAwOiAjMGIyMjExO1xcbiAgLS1jb2xvci1ncmVlbi0yMDA6ICMwZjJjMTc7XFxuICAtLWNvbG9yLWdyZWVuLTMwMDogIzExMzUxYjtcXG4gIC0tY29sb3ItZ3JlZW4tNDAwOiAjMGM0NjFiO1xcbiAgLS1jb2xvci1ncmVlbi01MDA6ICMxMjY0Mjc7XFxuICAtLWNvbG9yLWdyZWVuLTYwMDogIzFhOTMzODtcXG4gIC0tY29sb3ItZ3JlZW4tNzAwOiAjNDZhNzU4O1xcbiAgLS1jb2xvci1ncmVlbi04MDA6ICMzODhlNGE7XFxuICAtLWNvbG9yLWdyZWVuLTkwMDogIzYzYzE3NDtcXG4gIC0tY29sb3ItZ3JlZW4tMTAwMDogI2U1ZmJlYjtcXG5cXG4gIC8qIFR1cmJvcGFjayBEYXJrIC0gVGVtcG9yYXJ5ICovXFxuICAtLWNvbG9yLXR1cmJvcGFjay10ZXh0LXJlZDogI2ZmNmQ5MjtcXG4gIC0tY29sb3ItdHVyYm9wYWNrLXRleHQtYmx1ZTogIzQ1YjJmZjtcXG4gIC0tY29sb3ItdHVyYm9wYWNrLWJvcmRlci1yZWQ6ICM2ZTI5M2I7XFxuICAtLWNvbG9yLXR1cmJvcGFjay1ib3JkZXItYmx1ZTogIzI4NGY4MDtcXG4gIC0tY29sb3ItdHVyYm9wYWNrLWJhY2tncm91bmQtcmVkOiAjMjUwZDEyO1xcbiAgLS1jb2xvci10dXJib3BhY2stYmFja2dyb3VuZC1ibHVlOiAjMGExNzIzO1xcblwiLGFFPVwiXFxuICAtLWNvbG9yLWZvbnQ6IHdoaXRlO1xcbiAgLS1jb2xvci1iYWNrZHJvcDogcmdiYSgwLCAwLCAwLCAwLjgpO1xcbiAgLS1jb2xvci1ib3JkZXItc2hhZG93OiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQ1KTtcXG5cXG4gIC0tY29sb3ItdGl0bGUtY29sb3I6ICNmYWZhZmE7XFxuICAtLWNvbG9yLXN0YWNrLW5vdGVzOiAjYTlhOWE5O1xcblwiO2Z1bmN0aW9uIGFfKCl7cmV0dXJuKDAseS5qc3gpKFwic3R5bGVcIix7Y2hpbGRyZW46ZWkoYUMoKSxhRSxhUyxhRSxhUyl9KX1mdW5jdGlvbiBhUChlLG4peyhudWxsPT1ufHxuPmUubGVuZ3RoKSYmKG49ZS5sZW5ndGgpO2Zvcih2YXIgdD0wLHI9QXJyYXkobik7dDxuO3QrKylyW3RdPWVbdF07cmV0dXJuIHJ9ZnVuY3Rpb24gYXooZSxuKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsbil7dmFyIHQscixvPW51bGw9PWU/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZlW1N5bWJvbC5pdGVyYXRvcl18fGVbXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPW8pe3ZhciBhPVtdLGk9ITAsbD0hMTt0cnl7Zm9yKG89by5jYWxsKGUpOyEoaT0odD1vLm5leHQoKSkuZG9uZSkmJihhLnB1c2godC52YWx1ZSksIW58fGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KGUsbil8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGFQKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIGFQKGUsbil9fShlLG4pfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIGFMKGUpe3ZhciBuLHQscixvPWUuc3RhdGUsYT1lLmRpc3BhdGNoLGk9ZS5nZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlscyxsPWF6KCh0PShuPXJ0KCgwLHgudXNlU3RhdGUpKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBsb2NhbFN0b3JhZ2UmJmxvY2FsU3RvcmFnZS5nZXRJdGVtKEopP051bWJlcihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShKKSk6Uy5NZWRpdW0pLDIpKVswXSxyPW5bMV0sW3QsZnVuY3Rpb24oZSl7cihlKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbShKLFN0cmluZyhlKSl9XSksMikscz1sWzBdLGM9bFsxXSx1PWF6KCgwLHgudXNlU3RhdGUpKCExKSwyKSxkPXVbMF0sZj11WzFdLHA9bnVsbCE9PW8uYnVpbGRFcnJvcjtyZXR1cm4gcHJvY2Vzcy5lbnYuX19ORVhUX0RFVlRPT0xfTkVXX1BBTkVMX1VJJiZwIT09ZCYmKHAmJihhKHt0eXBlOld9KSxhKHt0eXBlOk19KSksZihwKSksKDAseS5qc3hzKShlZCx7Y2hpbGRyZW46WygwLHkuanN4KShhcCx7fSksKDAseS5qc3gpKGVwLHtzY2FsZTpwcm9jZXNzLmVudi5fX05FWFRfREVWVE9PTF9ORVdfUEFORUxfVUk/by5zY2FsZTpzfSksKDAseS5qc3gpKGFnLHt9KSwoMCx5LmpzeCkoYWQse30pLCgwLHkuanN4KShhXyx7fSksKDAseS5qc3gpKGFrLHtzdGF0ZTpvLGRpc3BhdGNoOmEsaXNBcHBEaXI6ITAsY2hpbGRyZW46ZnVuY3Rpb24oZSl7dmFyIG49ZS5ydW50aW1lRXJyb3JzLHQ9ZS50b3RhbEVycm9yQ291bnQ7cmV0dXJuKDAseS5qc3gpKHkuRnJhZ21lbnQse2NoaWxkcmVuOm8uc2hvd0luZGljYXRvciYmKHByb2Nlc3MuZW52Ll9fTkVYVF9ERVZUT09MX05FV19QQU5FTF9VST8oMCx5LmpzeHMpKHkuRnJhZ21lbnQse2NoaWxkcmVuOlsoMCx5LmpzeCkob0ose3N0YXRlOm8sZGlzcGF0Y2g6YSxlcnJvckNvdW50OnQsaXNCdWlsZEVycm9yOnB9KSwoby5pc0RldlRvb2xzUGFuZWxPcGVufHxvLmlzRXJyb3JPdmVybGF5T3BlbikmJigwLHkuanN4KShhcyx7c3RhdGU6byxkaXNwYXRjaDphLGlzc3VlQ291bnQ6dCxydW50aW1lRXJyb3JzOm4sZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHM6aX0pXX0pOigwLHkuanN4cykoeS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLHkuanN4KShyVSx7c2NhbGU6cyxzZXRTY2FsZTpjLHN0YXRlOm8sZGlzcGF0Y2g6YSxlcnJvckNvdW50OnQsaXNCdWlsZEVycm9yOnB9KSwoMCx5LmpzeCkoYWIse3N0YXRlOm8sZGlzcGF0Y2g6YSxnZXRTcXVhc2hlZEh5ZHJhdGlvbkVycm9yRGV0YWlsczppLHJ1bnRpbWVFcnJvcnM6bixlcnJvckNvdW50OnR9KV19KSl9KX19KV19KX12YXIgYVQ9X193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL25leHQtZGV2dG9vbHMvZGV2LW92ZXJsYXkvc2VnbWVudC1leHBsb3Jlci10cmllLnRzXCIpO2Z1bmN0aW9uIGFSKGUsbil7KG51bGw9PW58fG4+ZS5sZW5ndGgpJiYobj1lLmxlbmd0aCk7Zm9yKHZhciB0PTAscj1BcnJheShuKTt0PG47dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiBhTihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gYVIoZSl9KGUpfHxmdW5jdGlvbihlKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1lW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPWVbXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8YUQoZSl8fGZ1bmN0aW9uKCl7dGhyb3cgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIGFEKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGFSKGUsbik7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO2lmKFwiT2JqZWN0XCI9PT10JiZlLmNvbnN0cnVjdG9yJiYodD1lLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT10fHxcIlNldFwiPT09dClyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZihcIkFyZ3VtZW50c1wiPT09dHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodCkpcmV0dXJuIGFSKGUsbil9fXZhciBhQj1udWxsLGFNPVtdO2Z1bmN0aW9uIGFJKGUpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHQ9QXJyYXkobikscj0wO3I8bjtyKyspdFtyXT1hcmd1bWVudHNbcl07YUI/ZS5hcHBseSh2b2lkIDAsW2FCXS5jb25jYXQoYU4odCkpKTphTS5wdXNoKGZ1bmN0aW9uKG4pe2UuYXBwbHkodm9pZCAwLFtuXS5jb25jYXQoYU4odCkpKX0pfX12YXIgYUg9e29uQnVpbGRPazphSShmdW5jdGlvbihlKXtlKHt0eXBlOl99KX0pLG9uQnVpbGRFcnJvcjphSShmdW5jdGlvbihlLG4pe2Uoe3R5cGU6UCxtZXNzYWdlOm59KX0pLG9uQmVmb3JlUmVmcmVzaDphSShmdW5jdGlvbihlKXtlKHt0eXBlOnp9KX0pLG9uUmVmcmVzaDphSShmdW5jdGlvbihlKXtlKHt0eXBlOkx9KX0pLG9uVmVyc2lvbkluZm86YUkoZnVuY3Rpb24oZSxuKXtlKHt0eXBlOlQsdmVyc2lvbkluZm86bn0pfSksb25TdGF0aWNJbmRpY2F0b3I6YUkoZnVuY3Rpb24oZSxuKXtlKHt0eXBlOkUsc3RhdGljSW5kaWNhdG9yOm59KX0pLG9uRGVidWdJbmZvOmFJKGZ1bmN0aW9uKGUsbil7ZSh7dHlwZTpELGRlYnVnSW5mbzpufSl9KSxvbkRldkluZGljYXRvcjphSShmdW5jdGlvbihlLG4pe2Uoe3R5cGU6QixkZXZJbmRpY2F0b3I6bn0pfSksb25VbmhhbmRsZWRFcnJvcjphSShmdW5jdGlvbihlLG4pe2Uoe3R5cGU6UixyZWFzb246bn0pfSksb25VbmhhbmRsZWRSZWplY3Rpb246YUkoZnVuY3Rpb24oZSxuKXtlKHt0eXBlOk4scmVhc29uOm59KX0pLG9wZW5FcnJvck92ZXJsYXk6YUkoZnVuY3Rpb24oZSl7ZSh7dHlwZTpNfSl9KSxjbG9zZUVycm9yT3ZlcmxheTphSShmdW5jdGlvbihlKXtlKHt0eXBlOkl9KX0pLHRvZ2dsZUVycm9yT3ZlcmxheTphSShmdW5jdGlvbihlKXtlKHt0eXBlOkh9KX0pLGJ1aWxkaW5nSW5kaWNhdG9ySGlkZTphSShmdW5jdGlvbihlKXtlKHt0eXBlOlV9KX0pLGJ1aWxkaW5nSW5kaWNhdG9yU2hvdzphSShmdW5jdGlvbihlKXtlKHt0eXBlOkZ9KX0pLHJlbmRlcmluZ0luZGljYXRvckhpZGU6YUkoZnVuY3Rpb24oZSl7ZSh7dHlwZTpxfSl9KSxyZW5kZXJpbmdJbmRpY2F0b3JTaG93OmFJKGZ1bmN0aW9uKGUpe2Uoe3R5cGU6Vn0pfSksc2VnbWVudEV4cGxvcmVyTm9kZUFkZDphSShmdW5jdGlvbihlLG4peygwLGFULnRoKShuKX0pLHNlZ21lbnRFeHBsb3Jlck5vZGVSZW1vdmU6YUkoZnVuY3Rpb24oZSxuKXsoMCxhVC5fYykobil9KSxzZWdtZW50RXhwbG9yZXJVcGRhdGVSb3V0ZVN0YXRlOmFJKGZ1bmN0aW9uKGUsbil7ZSh7dHlwZTplZSxwYWdlOm59KX0pfTtmdW5jdGlvbiBhRihlKXt2YXIgbix0LHI9ZS5nZXRDb21wb25lbnRTdGFjayxvPWUuZ2V0T3duZXJTdGFjayxhPWUuZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHMsaT1lLmlzUmVjb3ZlcmFibGVFcnJvcixsPShuPWZ1bmN0aW9uKGUsbix0LHIpe3ZhciBvO2Z1bmN0aW9uIGEoZSxvLGEpe3ZhciBpLGw9bihhKSxzPXZvaWQgMD09PWw/dm9pZCAwOmZ1bmN0aW9uKGUpe3ZhciBuPVtdLHQ9ITAscj0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLGk9ZS50cmltKCkuc3BsaXQoXCJcXG5cIilbU3ltYm9sLml0ZXJhdG9yXSgpOyEodD0oYT1pLm5leHQoKSkuZG9uZSk7dD0hMCl7dmFyIGw9YS52YWx1ZSxzPS9hdCAoW14gXSspKCBcXCgoLiopXFwpKT8vLmV4ZWMobCk7aWYobnVsbD09cz92b2lkIDA6c1sxXSl7dmFyIGM9c1sxXSx1PXNbM107aWYoIXUpe24ucHVzaCh7Y2FuT3BlbkluRWRpdG9yOiExLGNvbXBvbmVudDpjfSk7Y29udGludWV9aWYobnVsbD09dT92b2lkIDA6dS5pbmNsdWRlcyhcIm5leHQvZGlzdFwiKSlicmVhazt2YXIgZD1mdW5jdGlvbihlKXt2YXIgbix0LHIsbyxhPShyPWUpLnN0YXJ0c1dpdGgoXCJmaWxlOi8vXCIpP1wiZmlsZVwiOnIuaW5jbHVkZXMoXCJ3ZWJwYWNrLWludGVybmFsOi8vXCIpP1wid2VicGFjay1pbnRlcm5hbFwiOnIuc3RhcnRzV2l0aChcImh0dHA6Ly9cIil8fHIuc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpP1wiaHR0cFwiOnIuc3RhcnRzV2l0aChcIi8vXCIpP1wicHJvdG9jb2wtcmVsYXRpdmVcIjpcInVua25vd25cIixpPW51bGw9PWU/dm9pZCAwOmUucmVwbGFjZSgvXih3ZWJwYWNrLWludGVybmFsOlxcL1xcL1xcL3xmaWxlOlxcL1xcLykoXFwoLipcXClcXC8pPy8sXCJcIiksbD0obj1udWxsIT0obz1udWxsPT1pP3ZvaWQgMDppLm1hdGNoKC9eKC4rKTooXFxkKyk6KFxcZCspLykpP286W10sdD00LGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KG4pfHxmdW5jdGlvbihlLG4pe3ZhciB0LHIsbz1udWxsPT1lP251bGw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmZVtTeW1ib2wuaXRlcmF0b3JdfHxlW1wiQEBpdGVyYXRvclwiXTtpZihudWxsIT1vKXt2YXIgYT1bXSxpPSEwLGw9ITE7dHJ5e2ZvcihvPW8uY2FsbChlKTshKGk9KHQ9by5uZXh0KCkpLmRvbmUpJiYoYS5wdXNoKHQudmFsdWUpLGEubGVuZ3RoIT09bik7aT0hMCk7fWNhdGNoKGUpe2w9ITAscj1lfWZpbmFsbHl7dHJ5e2l8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyByfX1yZXR1cm4gYX19KG4sNCl8fGZ1bmN0aW9uKGUsbil7aWYoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIHcoZSxuKTt2YXIgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7aWYoXCJPYmplY3RcIj09PXQmJmUuY29uc3RydWN0b3ImJih0PWUuY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PXR8fFwiU2V0XCI9PT10KXJldHVybiBBcnJheS5mcm9tKHQpO2lmKFwiQXJndW1lbnRzXCI9PT10fHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gdyhlLG4pfX0obix0KXx8ZnVuY3Rpb24oKXt0aHJvdyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKSkscz1sWzFdLGM9bFsyXSx1PWxbM107c3dpdGNoKGEpe2Nhc2VcImZpbGVcIjpjYXNlXCJ3ZWJwYWNrLWludGVybmFsXCI6cmV0dXJue2Nhbk9wZW5JbkVkaXRvcjohMCxmaWxlOnMsbGluZU51bWJlcjpjP051bWJlcihjKTp2b2lkIDAsY29sdW1uOnU/TnVtYmVyKHUpOnZvaWQgMH07ZGVmYXVsdDpyZXR1cm57Y2FuT3BlbkluRWRpdG9yOiExfX19KHUpO24ucHVzaChmdW5jdGlvbihlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgdD1udWxsIT1hcmd1bWVudHNbbl0/YXJndW1lbnRzW25dOnt9LHI9T2JqZWN0LmtleXModCk7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKHI9ci5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKS5lbnVtZXJhYmxlfSkpKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHIsbyxhO3I9ZSxvPW4sYT10W25dLG8gaW4gcj9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6cltvXT1hfSl9cmV0dXJuIGV9KHtjb21wb25lbnQ6Y30sZCkpfX19Y2F0Y2goZSl7cj0hMCxvPWV9ZmluYWxseXt0cnl7dHx8bnVsbD09aS5yZXR1cm58fGkucmV0dXJuKCl9ZmluYWxseXtpZihyKXRocm93IG99fXJldHVybiBufShsKSxjPXQoYSksdT1mdW5jdGlvbihlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06cHJvY2Vzcy5lbnYuX19ORVhUX0RJU1RfRElSO3JldHVybiBlPyhlPWUuc3BsaXQoXCJcXG5cIikubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmluY2x1ZGVzKFwiKGV2YWwgXCIpJiYoZT1lLnJlcGxhY2UoL2V2YWwgY29kZS9nLFwiZXZhbFwiKS5yZXBsYWNlKC9cXChldmFsIGF0IFteKCldKiBcXCgvLFwiKGZpbGU6Ly9cIikucmVwbGFjZSgvXFwpLC4qJC9nLFwiKVwiKSksZX0pLmpvaW4oXCJcXG5cIiksKDAsai5wYXJzZSkoZSkubWFwKGZ1bmN0aW9uKGUpe3RyeXt2YXIgdD1uZXcgVVJMKGUuZmlsZSkscj1rLmV4ZWModC5wYXRobmFtZSk7aWYocil7dmFyIG8sYT1udWxsPT1ufHxudWxsPT0obz1uLnJlcGxhY2UoL1xcXFwvZyxcIi9cIikpP3ZvaWQgMDpvLnJlcGxhY2UoL1xcLyQvLFwiXCIpO2EmJihlLmZpbGU9XCJmaWxlOi8vXCIrYS5jb25jYXQoci5wb3AoKSkrdC5zZWFyY2gpfX1jYXRjaChlKXt9cmV0dXJuIGV9KSk6W119KChhLnN0YWNrfHxcIlwiKSsoY3x8XCJcIikpLGQ9e2lkOm8sZXJyb3I6YSxmcmFtZXM6dSxjb21wb25lbnRTdGFja0ZyYW1lczpzLHR5cGU6cihhKT9cInJlY292ZXJhYmxlXCI6KGk9YSkmJlwiTkVYVF9DT05TT0xFX0VSUk9SXCI9PT1pW0FdP1wiY29uc29sZVwiOlwicnVudGltZVwifSxmPWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yLnN0YWNrIT09ZC5lcnJvci5zdGFjayYmZXQoZS5lcnJvci5zdGFjaykhPT1ldChkLmVycm9yLnN0YWNrKXx8dChlLmVycm9yKSE9PXQoZC5lcnJvcil9KTtyZXR1cm4gZi5sZW5ndGg9PT1lLmxlbmd0aD8oZi5wdXNoKGQpLGYpOmV9cmV0dXJuKDAseC51c2VSZWR1Y2VyKShmdW5jdGlvbihlLG4pe3N3aXRjaChuLnR5cGUpe2Nhc2UgRDpyZXR1cm4gQyhPKHt9LGUpLHtkZWJ1Z0luZm86bi5kZWJ1Z0luZm99KTtjYXNlIEU6cmV0dXJuIEMoTyh7fSxlKSx7c3RhdGljSW5kaWNhdG9yOm4uc3RhdGljSW5kaWNhdG9yfSk7Y2FzZSBfOnJldHVybiBDKE8oe30sZSkse2J1aWxkRXJyb3I6bnVsbH0pO2Nhc2UgUDpyZXR1cm4gQyhPKHt9LGUpLHtidWlsZEVycm9yOm4ubWVzc2FnZX0pO2Nhc2UgejpyZXR1cm4gQyhPKHt9LGUpLHtyZWZyZXNoU3RhdGU6e3R5cGU6XCJwZW5kaW5nXCIsZXJyb3JzOltdfX0pO2Nhc2UgTDpyZXR1cm4gQyhPKHt9LGUpLHtidWlsZEVycm9yOm51bGwsZXJyb3JzOlwicGVuZGluZ1wiPT09ZS5yZWZyZXNoU3RhdGUudHlwZT9lLnJlZnJlc2hTdGF0ZS5lcnJvcnM6W10scmVmcmVzaFN0YXRlOnt0eXBlOlwiaWRsZVwifX0pO2Nhc2UgUjpjYXNlIE46c3dpdGNoKGUucmVmcmVzaFN0YXRlLnR5cGUpe2Nhc2VcImlkbGVcIjpyZXR1cm4gQyhPKHt9LGUpLHtuZXh0SWQ6ZS5uZXh0SWQrMSxlcnJvcnM6YShlLmVycm9ycyxlLm5leHRJZCxuLnJlYXNvbil9KTtjYXNlXCJwZW5kaW5nXCI6cmV0dXJuIEMoTyh7fSxlKSx7bmV4dElkOmUubmV4dElkKzEscmVmcmVzaFN0YXRlOkMoTyh7fSxlLnJlZnJlc2hTdGF0ZSkse2Vycm9yczphKGUuZXJyb3JzLGUubmV4dElkLG4ucmVhc29uKX0pfSk7ZGVmYXVsdDpyZXR1cm4gZX1jYXNlIFQ6cmV0dXJuIEMoTyh7fSxlKSx7dmVyc2lvbkluZm86bi52ZXJzaW9uSW5mb30pO2Nhc2UgQjpyZXR1cm4gQyhPKHt9LGUpLHtzaG93SW5kaWNhdG9yOiEwLGRpc2FibGVEZXZJbmRpY2F0b3I6ZXJ8fCEhbi5kZXZJbmRpY2F0b3IuZGlzYWJsZWRVbnRpbH0pO2Nhc2UgTTpyZXR1cm4gQyhPKHt9LGUpLHtpc0Vycm9yT3ZlcmxheU9wZW46ITB9KTtjYXNlIEk6cmV0dXJuIEMoTyh7fSxlKSx7aXNFcnJvck92ZXJsYXlPcGVuOiExfSk7Y2FzZSBIOnJldHVybiBDKE8oe30sZSkse2lzRXJyb3JPdmVybGF5T3BlbjohZS5pc0Vycm9yT3ZlcmxheU9wZW59KTtjYXNlIEY6cmV0dXJuIEMoTyh7fSxlKSx7YnVpbGRpbmdJbmRpY2F0b3I6ITB9KTtjYXNlIFU6cmV0dXJuIEMoTyh7fSxlKSx7YnVpbGRpbmdJbmRpY2F0b3I6ITF9KTtjYXNlIFY6cmV0dXJuIEMoTyh7fSxlKSx7cmVuZGVyaW5nSW5kaWNhdG9yOiEwfSk7Y2FzZSBxOnJldHVybiBDKE8oe30sZSkse3JlbmRlcmluZ0luZGljYXRvcjohMX0pO2Nhc2UgVzpyZXR1cm4gQyhPKHt9LGUpLHtpc0RldlRvb2xzUGFuZWxPcGVuOiEwfSk7Y2FzZSAkOnJldHVybiBDKE8oe30sZSkse2lzRGV2VG9vbHNQYW5lbE9wZW46ITF9KTtjYXNlIFo6cmV0dXJuIEMoTyh7fSxlKSx7aXNEZXZUb29sc1BhbmVsT3BlbjohZS5pc0RldlRvb2xzUGFuZWxPcGVufSk7Y2FzZSBZOnJldHVybiBDKE8oe30sZSkse2RldlRvb2xzUG9zaXRpb246bi5kZXZUb29sc1Bvc2l0aW9ufSk7Y2FzZSBYOnJldHVybiBDKE8oe30sZSkse3NjYWxlOm4uc2NhbGV9KTtjYXNlIGVlOnJldHVybiBDKE8oe30sZSkse3BhZ2U6bi5wYWdlfSk7Y2FzZSBLOnJldHVybiBDKE8oe30sZSkse3Nob3dSZXN0YXJ0U2VydmVyQnV0dG9uOm4uc2hvd1Jlc3RhcnRTZXJ2ZXJCdXR0b259KTtkZWZhdWx0OnJldHVybiBlfX0sKG89ZSxDKE8oe30sZW8pLHtpc0Vycm9yT3ZlcmxheU9wZW46XCJwYWdlc1wiPT09byxyb3V0ZXJUeXBlOm99KSkpfShlLnJvdXRlclR5cGUscixvLGkpLHQ9MixmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShuKXx8ZnVuY3Rpb24oZSxuKXt2YXIgdCxyLG89bnVsbD09ZT9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9byl7dmFyIGE9W10saT0hMCxsPSExO3RyeXtmb3Iobz1vLmNhbGwoZSk7IShpPSh0PW8ubmV4dCgpKS5kb25lKSYmKGEucHVzaCh0LnZhbHVlKSxhLmxlbmd0aCE9PW4pO2k9ITApO31jYXRjaChlKXtsPSEwLHI9ZX1maW5hbGx5e3RyeXtpfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgcn19cmV0dXJuIGF9fShuLDIpfHxhRChuLHQpfHxmdW5jdGlvbigpe3Rocm93IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxcXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpKSxzPWxbMF0sYz1sWzFdO3JldHVybigwLHgudXNlSW5zZXJ0aW9uRWZmZWN0KShmdW5jdGlvbigpe2FCPWM7dmFyIGU9c2V0VGltZW91dChmdW5jdGlvbigpeyFmdW5jdGlvbihlKXt0cnl7dmFyIG49ITAsdD0hMSxyPXZvaWQgMDt0cnl7Zm9yKHZhciBvLGE9YU1bU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1hLm5leHQoKSkuZG9uZSk7bj0hMCkoMCxvLnZhbHVlKShlKX1jYXRjaChlKXt0PSEwLHI9ZX1maW5hbGx5e3RyeXtufHxudWxsPT1hLnJldHVybnx8YS5yZXR1cm4oKX1maW5hbGx5e2lmKHQpdGhyb3cgcn19fWZpbmFsbHl7YU0ubGVuZ3RoPTB9fShjKX0pO3JldHVybiBmdW5jdGlvbigpe2FCPW51bGwsY2xlYXJUaW1lb3V0KGUpfX0sW10pLCgwLHkuanN4cykoeS5GcmFnbWVudCx7Y2hpbGRyZW46WygwLHkuanN4KShlcyx7fSksKDAseS5qc3gpKGFMLHtzdGF0ZTpzLGRpc3BhdGNoOmMsZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHM6YX0pXX0pfXZhciBhVT0hMSxhVj0hMTtmdW5jdGlvbiBhcSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIGFXKGUsbix0KXtpZihhVSl0aHJvdyBFcnJvcihcIk5leHQgRGV2VG9vbHM6IFBhZ2VzIERldiBPdmVybGF5IGlzIGFscmVhZHkgbW91bnRlZC4gVGhpcyBpcyBhIGJ1ZyBpbiBOZXh0LmpzXCIpO2lmKCFhVil7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtyLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiLHIuc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLHIuc2V0QXR0cmlidXRlKFwiZGF0YS1uZXh0anMtZGV2LW92ZXJsYXlcIixcInRydWVcIik7dmFyIG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm5leHRqcy1wb3J0YWxcIik7ci5hcHBlbmRDaGlsZChvKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHIpO3ZhciBhPSgwLGVhLmNyZWF0ZVJvb3QpKG8se2lkZW50aWZpZXJQcmVmaXg6XCJuZHQtXCJ9KTsoMCx4LnN0YXJ0VHJhbnNpdGlvbikoZnVuY3Rpb24oKXthLnJlbmRlcigoMCx5LmpzeCkoYUYse2dldENvbXBvbmVudFN0YWNrOmUsZ2V0T3duZXJTdGFjazpuLGdldFNxdWFzaGVkSHlkcmF0aW9uRXJyb3JEZXRhaWxzOmFxLGlzUmVjb3ZlcmFibGVFcnJvcjp0LHJvdXRlclR5cGU6XCJhcHBcIn0pKX0pLGFWPSEwfX1mdW5jdGlvbiBhJChlLG4sdCxyKXtpZihhVil0aHJvdyBFcnJvcihcIk5leHQgRGV2VG9vbHM6IEFwcCBEZXYgT3ZlcmxheSBpcyBhbHJlYWR5IG1vdW50ZWQuIFRoaXMgaXMgYSBidWcgaW4gTmV4dC5qc1wiKTtpZighYVUpe3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJuZXh0anMtcG9ydGFsXCIpO28uc3R5bGUucG9zaXRpb249XCJhYnNvbHV0ZVwiLG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGUpe3ZhciBuPSEwLHQ9ITEscj12b2lkIDA7dHJ5e2Zvcih2YXIgYSxpPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0oYT1pLm5leHQoKSkuZG9uZSk7bj0hMCl7dmFyIGw9YS52YWx1ZTtpZihcImNoaWxkTGlzdFwiPT09bC50eXBlKXt2YXIgcz0hMCxjPSExLHU9dm9pZCAwO3RyeXtmb3IodmFyIGQsZj1sLnJlbW92ZWROb2Rlc1tTeW1ib2wuaXRlcmF0b3JdKCk7IShzPShkPWYubmV4dCgpKS5kb25lKTtzPSEwKWQudmFsdWU9PT1vJiZkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG8pfWNhdGNoKGUpe2M9ITAsdT1lfWZpbmFsbHl7dHJ5e3N8fG51bGw9PWYucmV0dXJufHxmLnJldHVybigpfWZpbmFsbHl7aWYoYyl0aHJvdyB1fX19fX1jYXRjaChlKXt0PSEwLHI9ZX1maW5hbGx5e3RyeXtufHxudWxsPT1pLnJldHVybnx8aS5yZXR1cm4oKX1maW5hbGx5e2lmKHQpdGhyb3cgcn19fSkub2JzZXJ2ZShkb2N1bWVudC5ib2R5LHtjaGlsZExpc3Q6ITB9KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG8pO3ZhciBhPSgwLGVhLmNyZWF0ZVJvb3QpKG8pOygwLHguc3RhcnRUcmFuc2l0aW9uKShmdW5jdGlvbigpe2EucmVuZGVyKCgwLHkuanN4KShhRix7Z2V0Q29tcG9uZW50U3RhY2s6ZSxnZXRPd25lclN0YWNrOm4sZ2V0U3F1YXNoZWRIeWRyYXRpb25FcnJvckRldGFpbHM6dCxpc1JlY292ZXJhYmxlRXJyb3I6cixyb3V0ZXJUeXBlOlwicGFnZXNcIn0pKX0pLGFVPSEwfX19KSgpLGV4cG9ydHMuZGlzcGF0Y2hlcj1fX3dlYnBhY2tfZXhwb3J0c19fLmRpc3BhdGNoZXIsZXhwb3J0cy5yZW5kZXJBcHBEZXZPdmVybGF5PV9fd2VicGFja19leHBvcnRzX18ucmVuZGVyQXBwRGV2T3ZlcmxheSxleHBvcnRzLnJlbmRlclBhZ2VzRGV2T3ZlcmxheT1fX3dlYnBhY2tfZXhwb3J0c19fLnJlbmRlclBhZ2VzRGV2T3ZlcmxheSxfX3dlYnBhY2tfZXhwb3J0c19fKS0xPT09W1wiZGlzcGF0Y2hlclwiLFwicmVuZGVyQXBwRGV2T3ZlcmxheVwiLFwicmVuZGVyUGFnZXNEZXZPdmVybGF5XCJdLmluZGV4T2YoX193ZWJwYWNrX2lfXykmJihleHBvcnRzW19fd2VicGFja19pX19dPV9fd2VicGFja19leHBvcnRzX19bX193ZWJwYWNrX2lfX10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/next-devtools/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/path-to-regexp/index.js":
/*!*************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/path-to-regexp/index.js ***!
  \*************************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
eval(__webpack_require__.ts("var __dirname = \"/\";\n(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;Object.defineProperty(r,\"__esModule\",{value:true});function lexer(e){var r=[];var n=0;while(n<e.length){var t=e[n];if(t===\"*\"||t===\"+\"||t===\"?\"){r.push({type:\"MODIFIER\",index:n,value:e[n++]});continue}if(t===\"\\\\\"){r.push({type:\"ESCAPED_CHAR\",index:n++,value:e[n++]});continue}if(t===\"{\"){r.push({type:\"OPEN\",index:n,value:e[n++]});continue}if(t===\"}\"){r.push({type:\"CLOSE\",index:n,value:e[n++]});continue}if(t===\":\"){var i=\"\";var a=n+1;while(a<e.length){var o=e.charCodeAt(a);if(o>=48&&o<=57||o>=65&&o<=90||o>=97&&o<=122||o===95){i+=e[a++];continue}break}if(!i)throw new TypeError(\"Missing parameter name at \"+n);r.push({type:\"NAME\",index:n,value:i});n=a;continue}if(t===\"(\"){var f=1;var u=\"\";var a=n+1;if(e[a]===\"?\"){throw new TypeError('Pattern cannot start with \"?\" at '+a)}while(a<e.length){if(e[a]===\"\\\\\"){u+=e[a++]+e[a++];continue}if(e[a]===\")\"){f--;if(f===0){a++;break}}else if(e[a]===\"(\"){f++;if(e[a+1]!==\"?\"){throw new TypeError(\"Capturing groups are not allowed at \"+a)}}u+=e[a++]}if(f)throw new TypeError(\"Unbalanced pattern at \"+n);if(!u)throw new TypeError(\"Missing pattern at \"+n);r.push({type:\"PATTERN\",index:n,value:u});n=a;continue}r.push({type:\"CHAR\",index:n,value:e[n++]})}r.push({type:\"END\",index:n,value:\"\"});return r}function parse(e,r){if(r===void 0){r={}}var n=lexer(e);var t=r.prefixes,i=t===void 0?\"./\":t;var a=\"[^\"+escapeString(r.delimiter||\"/#?\")+\"]+?\";var o=[];var f=0;var u=0;var p=\"\";var tryConsume=function(e){if(u<n.length&&n[u].type===e)return n[u++].value};var mustConsume=function(e){var r=tryConsume(e);if(r!==undefined)return r;var t=n[u],i=t.type,a=t.index;throw new TypeError(\"Unexpected \"+i+\" at \"+a+\", expected \"+e)};var consumeText=function(){var e=\"\";var r;while(r=tryConsume(\"CHAR\")||tryConsume(\"ESCAPED_CHAR\")){e+=r}return e};while(u<n.length){var v=tryConsume(\"CHAR\");var c=tryConsume(\"NAME\");var s=tryConsume(\"PATTERN\");if(c||s){var d=v||\"\";if(i.indexOf(d)===-1){p+=d;d=\"\"}if(p){o.push(p);p=\"\"}o.push({name:c||f++,prefix:d,suffix:\"\",pattern:s||a,modifier:tryConsume(\"MODIFIER\")||\"\"});continue}var g=v||tryConsume(\"ESCAPED_CHAR\");if(g){p+=g;continue}if(p){o.push(p);p=\"\"}var x=tryConsume(\"OPEN\");if(x){var d=consumeText();var l=tryConsume(\"NAME\")||\"\";var h=tryConsume(\"PATTERN\")||\"\";var m=consumeText();mustConsume(\"CLOSE\");o.push({name:l||(h?f++:\"\"),pattern:l&&!h?a:h,prefix:d,suffix:m,modifier:tryConsume(\"MODIFIER\")||\"\"});continue}mustConsume(\"END\")}return o}r.parse=parse;function compile(e,r){return tokensToFunction(parse(e,r),r)}r.compile=compile;function tokensToFunction(e,r){if(r===void 0){r={}}var n=flags(r);var t=r.encode,i=t===void 0?function(e){return e}:t,a=r.validate,o=a===void 0?true:a;var f=e.map((function(e){if(typeof e===\"object\"){return new RegExp(\"^(?:\"+e.pattern+\")$\",n)}}));return function(r){var n=\"\";for(var t=0;t<e.length;t++){var a=e[t];if(typeof a===\"string\"){n+=a;continue}var u=r?r[a.name]:undefined;var p=a.modifier===\"?\"||a.modifier===\"*\";var v=a.modifier===\"*\"||a.modifier===\"+\";if(Array.isArray(u)){if(!v){throw new TypeError('Expected \"'+a.name+'\" to not repeat, but got an array')}if(u.length===0){if(p)continue;throw new TypeError('Expected \"'+a.name+'\" to not be empty')}for(var c=0;c<u.length;c++){var s=i(u[c],a);if(o&&!f[t].test(s)){throw new TypeError('Expected all \"'+a.name+'\" to match \"'+a.pattern+'\", but got \"'+s+'\"')}n+=a.prefix+s+a.suffix}continue}if(typeof u===\"string\"||typeof u===\"number\"){var s=i(String(u),a);if(o&&!f[t].test(s)){throw new TypeError('Expected \"'+a.name+'\" to match \"'+a.pattern+'\", but got \"'+s+'\"')}n+=a.prefix+s+a.suffix;continue}if(p)continue;var d=v?\"an array\":\"a string\";throw new TypeError('Expected \"'+a.name+'\" to be '+d)}return n}}r.tokensToFunction=tokensToFunction;function match(e,r){var n=[];var t=pathToRegexp(e,n,r);return regexpToFunction(t,n,r)}r.match=match;function regexpToFunction(e,r,n){if(n===void 0){n={}}var t=n.decode,i=t===void 0?function(e){return e}:t;return function(n){var t=e.exec(n);if(!t)return false;var a=t[0],o=t.index;var f=Object.create(null);var _loop_1=function(e){if(t[e]===undefined)return\"continue\";var n=r[e-1];if(n.modifier===\"*\"||n.modifier===\"+\"){f[n.name]=t[e].split(n.prefix+n.suffix).map((function(e){return i(e,n)}))}else{f[n.name]=i(t[e],n)}};for(var u=1;u<t.length;u++){_loop_1(u)}return{path:a,index:o,params:f}}}r.regexpToFunction=regexpToFunction;function escapeString(e){return e.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g,\"\\\\$1\")}function flags(e){return e&&e.sensitive?\"\":\"i\"}function regexpToRegexp(e,r){if(!r)return e;var n=e.source.match(/\\((?!\\?)/g);if(n){for(var t=0;t<n.length;t++){r.push({name:t,prefix:\"\",suffix:\"\",modifier:\"\",pattern:\"\"})}}return e}function arrayToRegexp(e,r,n){var t=e.map((function(e){return pathToRegexp(e,r,n).source}));return new RegExp(\"(?:\"+t.join(\"|\")+\")\",flags(n))}function stringToRegexp(e,r,n){return tokensToRegexp(parse(e,n),r,n)}function tokensToRegexp(e,r,n){if(n===void 0){n={}}var t=n.strict,i=t===void 0?false:t,a=n.start,o=a===void 0?true:a,f=n.end,u=f===void 0?true:f,p=n.encode,v=p===void 0?function(e){return e}:p;var c=\"[\"+escapeString(n.endsWith||\"\")+\"]|$\";var s=\"[\"+escapeString(n.delimiter||\"/#?\")+\"]\";var d=o?\"^\":\"\";for(var g=0,x=e;g<x.length;g++){var l=x[g];if(typeof l===\"string\"){d+=escapeString(v(l))}else{var h=escapeString(v(l.prefix));var m=escapeString(v(l.suffix));if(l.pattern){if(r)r.push(l);if(h||m){if(l.modifier===\"+\"||l.modifier===\"*\"){var E=l.modifier===\"*\"?\"?\":\"\";d+=\"(?:\"+h+\"((?:\"+l.pattern+\")(?:\"+m+h+\"(?:\"+l.pattern+\"))*)\"+m+\")\"+E}else{d+=\"(?:\"+h+\"(\"+l.pattern+\")\"+m+\")\"+l.modifier}}else{d+=\"(\"+l.pattern+\")\"+l.modifier}}else{d+=\"(?:\"+h+m+\")\"+l.modifier}}}if(u){if(!i)d+=s+\"?\";d+=!n.endsWith?\"$\":\"(?=\"+c+\")\"}else{var T=e[e.length-1];var y=typeof T===\"string\"?s.indexOf(T[T.length-1])>-1:T===undefined;if(!i){d+=\"(?:\"+s+\"(?=\"+c+\"))?\"}if(!y){d+=\"(?=\"+s+\"|\"+c+\")\"}}return new RegExp(d,flags(n))}r.tokensToRegexp=tokensToRegexp;function pathToRegexp(e,r,n){if(e instanceof RegExp)return regexpToRegexp(e,r);if(Array.isArray(e))return arrayToRegexp(e,r,n);return stringToRegexp(e,r,n)}r.pathToRegexp=pathToRegexp})();module.exports=e})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9wYXRoLXRvLXJlZ2V4cC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiO0FBQUEsTUFBTSxhQUFhLG1FQUFtRSxTQUFTLEtBQUssU0FBUyxNQUFNLFFBQVEsc0NBQXNDLFdBQVcsRUFBRSxrQkFBa0IsU0FBUyxRQUFRLGtCQUFrQixXQUFXLDhCQUE4QixRQUFRLHFDQUFxQyxFQUFFLFNBQVMsYUFBYSxRQUFRLDJDQUEyQyxFQUFFLFNBQVMsU0FBUyxHQUFHLFFBQVEsaUNBQWlDLEVBQUUsU0FBUyxTQUFTLEdBQUcsUUFBUSxrQ0FBa0MsRUFBRSxTQUFTLFlBQVksU0FBUyxVQUFVLGtCQUFrQixzQkFBc0Isc0RBQXNELFVBQVUsU0FBUyxNQUFNLDBEQUEwRCxRQUFRLDRCQUE0QixFQUFFLElBQUksU0FBUyxZQUFZLFFBQVEsU0FBUyxVQUFVLGVBQWUsMkRBQTJELGtCQUFrQixnQkFBZ0IsaUJBQWlCLFNBQVMsZUFBZSxJQUFJLFVBQVUsSUFBSSxPQUFPLG9CQUFvQixJQUFJLGlCQUFpQiwrREFBK0QsVUFBVSxxREFBcUQsbURBQW1ELFFBQVEsK0JBQStCLEVBQUUsSUFBSSxTQUFTLFFBQVEsaUNBQWlDLEVBQUUsUUFBUSw0QkFBNEIsRUFBRSxTQUFTLG9CQUFvQixlQUFlLEtBQUssZUFBZSxxQ0FBcUMsa0RBQWtELFNBQVMsUUFBUSxRQUFRLFNBQVMsMkJBQTJCLGtEQUFrRCw0QkFBNEIsb0JBQW9CLDBCQUEwQiw4QkFBOEIsK0RBQStELDJCQUEyQixTQUFTLE1BQU0sd0RBQXdELEtBQUssVUFBVSxrQkFBa0IseUJBQXlCLHlCQUF5Qiw0QkFBNEIsU0FBUyxZQUFZLHNCQUFzQixLQUFLLEtBQUssTUFBTSxVQUFVLEtBQUssUUFBUSxnRkFBZ0YsRUFBRSxTQUFTLG9DQUFvQyxNQUFNLEtBQUssU0FBUyxNQUFNLFVBQVUsS0FBSyx5QkFBeUIsTUFBTSxvQkFBb0IsNkJBQTZCLGdDQUFnQyxvQkFBb0IscUJBQXFCLFFBQVEsMkZBQTJGLEVBQUUsU0FBUyxtQkFBbUIsU0FBUyxjQUFjLHNCQUFzQixzQ0FBc0Msa0JBQWtCLCtCQUErQixlQUFlLEtBQUssZUFBZSx3Q0FBd0MsU0FBUyxvQ0FBb0MseUJBQXlCLHdCQUF3Qiw0Q0FBNEMsR0FBRyxtQkFBbUIsU0FBUyxZQUFZLFdBQVcsS0FBSyxXQUFXLHdCQUF3QixLQUFLLFNBQVMsNEJBQTRCLHlDQUF5Qyx5Q0FBeUMscUJBQXFCLE9BQU8sNkVBQTZFLGlCQUFpQixjQUFjLDZEQUE2RCxZQUFZLFdBQVcsS0FBSyxnQkFBZ0IscUJBQXFCLDJGQUEyRix1QkFBdUIsU0FBUyw2Q0FBNkMscUJBQXFCLHFCQUFxQix1RkFBdUYsdUJBQXVCLFNBQVMsY0FBYyw4QkFBOEIsc0RBQXNELFVBQVUsb0NBQW9DLG9CQUFvQixTQUFTLDBCQUEwQiwrQkFBK0IsY0FBYyxpQ0FBaUMsZUFBZSxLQUFLLHdDQUF3QyxTQUFTLEdBQUcsbUJBQW1CLGdCQUFnQixtQkFBbUIscUJBQXFCLDBCQUEwQix3QkFBd0IscUNBQXFDLGFBQWEsdUNBQXVDLHlEQUF5RCxjQUFjLEdBQUcsS0FBSyxzQkFBc0IsWUFBWSxXQUFXLEtBQUssV0FBVyxPQUFPLDBCQUEwQixvQ0FBb0MseUJBQXlCLCtCQUErQixzQkFBc0Isa0JBQWtCLDZCQUE2Qiw2QkFBNkIsZUFBZSxrQ0FBa0MsTUFBTSxZQUFZLFdBQVcsS0FBSyxRQUFRLGtEQUFrRCxHQUFHLFNBQVMsOEJBQThCLHlCQUF5QixrQ0FBa0MsR0FBRyxrREFBa0QsK0JBQStCLHNDQUFzQywrQkFBK0IsZUFBZSxLQUFLLGtJQUFrSSxTQUFTLEdBQUcsNkNBQTZDLCtDQUErQyxlQUFlLGdCQUFnQixXQUFXLEtBQUssV0FBVyx3QkFBd0Isc0JBQXNCLEtBQUssZ0NBQWdDLGdDQUFnQyxjQUFjLGVBQWUsU0FBUyx1Q0FBdUMsOEJBQThCLHNFQUFzRSxLQUFLLCtDQUErQyxLQUFLLGlDQUFpQyxLQUFLLDhCQUE4QixNQUFNLGVBQWUsK0JBQStCLEtBQUssb0JBQW9CLG9FQUFvRSxPQUFPLHlCQUF5QixPQUFPLHNCQUFzQiw4QkFBOEIsZ0NBQWdDLDZCQUE2QixrREFBa0QsZ0RBQWdELDZCQUE2Qiw0QkFBNEIsSUFBSSxpQkFBaUIiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS40LjdfQGJhYmVsK2NvcmVANy4yOC4zX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMF9AcGxheXdyaWdodCt0ZXN0QDEuNTUuMF9yZWFjdC1kXzQ3ZmYzODEzZDc5MDU2NmRmMjU0YTIxNjM1NTBjMmQ1L25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcGF0aC10by1yZWdleHAvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiKCgpPT57XCJ1c2Ugc3RyaWN0XCI7aWYodHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18hPT1cInVuZGVmaW5lZFwiKV9fbmNjd3Bja19yZXF1aXJlX18uYWI9X19kaXJuYW1lK1wiL1wiO3ZhciBlPXt9OygoKT0+e3ZhciByPWU7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOnRydWV9KTtmdW5jdGlvbiBsZXhlcihlKXt2YXIgcj1bXTt2YXIgbj0wO3doaWxlKG48ZS5sZW5ndGgpe3ZhciB0PWVbbl07aWYodD09PVwiKlwifHx0PT09XCIrXCJ8fHQ9PT1cIj9cIil7ci5wdXNoKHt0eXBlOlwiTU9ESUZJRVJcIixpbmRleDpuLHZhbHVlOmVbbisrXX0pO2NvbnRpbnVlfWlmKHQ9PT1cIlxcXFxcIil7ci5wdXNoKHt0eXBlOlwiRVNDQVBFRF9DSEFSXCIsaW5kZXg6bisrLHZhbHVlOmVbbisrXX0pO2NvbnRpbnVlfWlmKHQ9PT1cIntcIil7ci5wdXNoKHt0eXBlOlwiT1BFTlwiLGluZGV4Om4sdmFsdWU6ZVtuKytdfSk7Y29udGludWV9aWYodD09PVwifVwiKXtyLnB1c2goe3R5cGU6XCJDTE9TRVwiLGluZGV4Om4sdmFsdWU6ZVtuKytdfSk7Y29udGludWV9aWYodD09PVwiOlwiKXt2YXIgaT1cIlwiO3ZhciBhPW4rMTt3aGlsZShhPGUubGVuZ3RoKXt2YXIgbz1lLmNoYXJDb2RlQXQoYSk7aWYobz49NDgmJm88PTU3fHxvPj02NSYmbzw9OTB8fG8+PTk3JiZvPD0xMjJ8fG89PT05NSl7aSs9ZVthKytdO2NvbnRpbnVlfWJyZWFrfWlmKCFpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJNaXNzaW5nIHBhcmFtZXRlciBuYW1lIGF0IFwiK24pO3IucHVzaCh7dHlwZTpcIk5BTUVcIixpbmRleDpuLHZhbHVlOml9KTtuPWE7Y29udGludWV9aWYodD09PVwiKFwiKXt2YXIgZj0xO3ZhciB1PVwiXCI7dmFyIGE9bisxO2lmKGVbYV09PT1cIj9cIil7dGhyb3cgbmV3IFR5cGVFcnJvcignUGF0dGVybiBjYW5ub3Qgc3RhcnQgd2l0aCBcIj9cIiBhdCAnK2EpfXdoaWxlKGE8ZS5sZW5ndGgpe2lmKGVbYV09PT1cIlxcXFxcIil7dSs9ZVthKytdK2VbYSsrXTtjb250aW51ZX1pZihlW2FdPT09XCIpXCIpe2YtLTtpZihmPT09MCl7YSsrO2JyZWFrfX1lbHNlIGlmKGVbYV09PT1cIihcIil7ZisrO2lmKGVbYSsxXSE9PVwiP1wiKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2FwdHVyaW5nIGdyb3VwcyBhcmUgbm90IGFsbG93ZWQgYXQgXCIrYSl9fXUrPWVbYSsrXX1pZihmKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmJhbGFuY2VkIHBhdHRlcm4gYXQgXCIrbik7aWYoIXUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1pc3NpbmcgcGF0dGVybiBhdCBcIituKTtyLnB1c2goe3R5cGU6XCJQQVRURVJOXCIsaW5kZXg6bix2YWx1ZTp1fSk7bj1hO2NvbnRpbnVlfXIucHVzaCh7dHlwZTpcIkNIQVJcIixpbmRleDpuLHZhbHVlOmVbbisrXX0pfXIucHVzaCh7dHlwZTpcIkVORFwiLGluZGV4Om4sdmFsdWU6XCJcIn0pO3JldHVybiByfWZ1bmN0aW9uIHBhcnNlKGUscil7aWYocj09PXZvaWQgMCl7cj17fX12YXIgbj1sZXhlcihlKTt2YXIgdD1yLnByZWZpeGVzLGk9dD09PXZvaWQgMD9cIi4vXCI6dDt2YXIgYT1cIlteXCIrZXNjYXBlU3RyaW5nKHIuZGVsaW1pdGVyfHxcIi8jP1wiKStcIl0rP1wiO3ZhciBvPVtdO3ZhciBmPTA7dmFyIHU9MDt2YXIgcD1cIlwiO3ZhciB0cnlDb25zdW1lPWZ1bmN0aW9uKGUpe2lmKHU8bi5sZW5ndGgmJm5bdV0udHlwZT09PWUpcmV0dXJuIG5bdSsrXS52YWx1ZX07dmFyIG11c3RDb25zdW1lPWZ1bmN0aW9uKGUpe3ZhciByPXRyeUNvbnN1bWUoZSk7aWYociE9PXVuZGVmaW5lZClyZXR1cm4gcjt2YXIgdD1uW3VdLGk9dC50eXBlLGE9dC5pbmRleDt0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5leHBlY3RlZCBcIitpK1wiIGF0IFwiK2ErXCIsIGV4cGVjdGVkIFwiK2UpfTt2YXIgY29uc3VtZVRleHQ9ZnVuY3Rpb24oKXt2YXIgZT1cIlwiO3ZhciByO3doaWxlKHI9dHJ5Q29uc3VtZShcIkNIQVJcIil8fHRyeUNvbnN1bWUoXCJFU0NBUEVEX0NIQVJcIikpe2UrPXJ9cmV0dXJuIGV9O3doaWxlKHU8bi5sZW5ndGgpe3ZhciB2PXRyeUNvbnN1bWUoXCJDSEFSXCIpO3ZhciBjPXRyeUNvbnN1bWUoXCJOQU1FXCIpO3ZhciBzPXRyeUNvbnN1bWUoXCJQQVRURVJOXCIpO2lmKGN8fHMpe3ZhciBkPXZ8fFwiXCI7aWYoaS5pbmRleE9mKGQpPT09LTEpe3ArPWQ7ZD1cIlwifWlmKHApe28ucHVzaChwKTtwPVwiXCJ9by5wdXNoKHtuYW1lOmN8fGYrKyxwcmVmaXg6ZCxzdWZmaXg6XCJcIixwYXR0ZXJuOnN8fGEsbW9kaWZpZXI6dHJ5Q29uc3VtZShcIk1PRElGSUVSXCIpfHxcIlwifSk7Y29udGludWV9dmFyIGc9dnx8dHJ5Q29uc3VtZShcIkVTQ0FQRURfQ0hBUlwiKTtpZihnKXtwKz1nO2NvbnRpbnVlfWlmKHApe28ucHVzaChwKTtwPVwiXCJ9dmFyIHg9dHJ5Q29uc3VtZShcIk9QRU5cIik7aWYoeCl7dmFyIGQ9Y29uc3VtZVRleHQoKTt2YXIgbD10cnlDb25zdW1lKFwiTkFNRVwiKXx8XCJcIjt2YXIgaD10cnlDb25zdW1lKFwiUEFUVEVSTlwiKXx8XCJcIjt2YXIgbT1jb25zdW1lVGV4dCgpO211c3RDb25zdW1lKFwiQ0xPU0VcIik7by5wdXNoKHtuYW1lOmx8fChoP2YrKzpcIlwiKSxwYXR0ZXJuOmwmJiFoP2E6aCxwcmVmaXg6ZCxzdWZmaXg6bSxtb2RpZmllcjp0cnlDb25zdW1lKFwiTU9ESUZJRVJcIil8fFwiXCJ9KTtjb250aW51ZX1tdXN0Q29uc3VtZShcIkVORFwiKX1yZXR1cm4gb31yLnBhcnNlPXBhcnNlO2Z1bmN0aW9uIGNvbXBpbGUoZSxyKXtyZXR1cm4gdG9rZW5zVG9GdW5jdGlvbihwYXJzZShlLHIpLHIpfXIuY29tcGlsZT1jb21waWxlO2Z1bmN0aW9uIHRva2Vuc1RvRnVuY3Rpb24oZSxyKXtpZihyPT09dm9pZCAwKXtyPXt9fXZhciBuPWZsYWdzKHIpO3ZhciB0PXIuZW5jb2RlLGk9dD09PXZvaWQgMD9mdW5jdGlvbihlKXtyZXR1cm4gZX06dCxhPXIudmFsaWRhdGUsbz1hPT09dm9pZCAwP3RydWU6YTt2YXIgZj1lLm1hcCgoZnVuY3Rpb24oZSl7aWYodHlwZW9mIGU9PT1cIm9iamVjdFwiKXtyZXR1cm4gbmV3IFJlZ0V4cChcIl4oPzpcIitlLnBhdHRlcm4rXCIpJFwiLG4pfX0pKTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49XCJcIjtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIGE9ZVt0XTtpZih0eXBlb2YgYT09PVwic3RyaW5nXCIpe24rPWE7Y29udGludWV9dmFyIHU9cj9yW2EubmFtZV06dW5kZWZpbmVkO3ZhciBwPWEubW9kaWZpZXI9PT1cIj9cInx8YS5tb2RpZmllcj09PVwiKlwiO3ZhciB2PWEubW9kaWZpZXI9PT1cIipcInx8YS5tb2RpZmllcj09PVwiK1wiO2lmKEFycmF5LmlzQXJyYXkodSkpe2lmKCF2KXt0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicrYS5uYW1lKydcIiB0byBub3QgcmVwZWF0LCBidXQgZ290IGFuIGFycmF5Jyl9aWYodS5sZW5ndGg9PT0wKXtpZihwKWNvbnRpbnVlO3Rocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJythLm5hbWUrJ1wiIHRvIG5vdCBiZSBlbXB0eScpfWZvcih2YXIgYz0wO2M8dS5sZW5ndGg7YysrKXt2YXIgcz1pKHVbY10sYSk7aWYobyYmIWZbdF0udGVzdChzKSl7dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIFwiJythLm5hbWUrJ1wiIHRvIG1hdGNoIFwiJythLnBhdHRlcm4rJ1wiLCBidXQgZ290IFwiJytzKydcIicpfW4rPWEucHJlZml4K3MrYS5zdWZmaXh9Y29udGludWV9aWYodHlwZW9mIHU9PT1cInN0cmluZ1wifHx0eXBlb2YgdT09PVwibnVtYmVyXCIpe3ZhciBzPWkoU3RyaW5nKHUpLGEpO2lmKG8mJiFmW3RdLnRlc3Qocykpe3Rocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJythLm5hbWUrJ1wiIHRvIG1hdGNoIFwiJythLnBhdHRlcm4rJ1wiLCBidXQgZ290IFwiJytzKydcIicpfW4rPWEucHJlZml4K3MrYS5zdWZmaXg7Y29udGludWV9aWYocCljb250aW51ZTt2YXIgZD12P1wiYW4gYXJyYXlcIjpcImEgc3RyaW5nXCI7dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInK2EubmFtZSsnXCIgdG8gYmUgJytkKX1yZXR1cm4gbn19ci50b2tlbnNUb0Z1bmN0aW9uPXRva2Vuc1RvRnVuY3Rpb247ZnVuY3Rpb24gbWF0Y2goZSxyKXt2YXIgbj1bXTt2YXIgdD1wYXRoVG9SZWdleHAoZSxuLHIpO3JldHVybiByZWdleHBUb0Z1bmN0aW9uKHQsbixyKX1yLm1hdGNoPW1hdGNoO2Z1bmN0aW9uIHJlZ2V4cFRvRnVuY3Rpb24oZSxyLG4pe2lmKG49PT12b2lkIDApe249e319dmFyIHQ9bi5kZWNvZGUsaT10PT09dm9pZCAwP2Z1bmN0aW9uKGUpe3JldHVybiBlfTp0O3JldHVybiBmdW5jdGlvbihuKXt2YXIgdD1lLmV4ZWMobik7aWYoIXQpcmV0dXJuIGZhbHNlO3ZhciBhPXRbMF0sbz10LmluZGV4O3ZhciBmPU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIF9sb29wXzE9ZnVuY3Rpb24oZSl7aWYodFtlXT09PXVuZGVmaW5lZClyZXR1cm5cImNvbnRpbnVlXCI7dmFyIG49cltlLTFdO2lmKG4ubW9kaWZpZXI9PT1cIipcInx8bi5tb2RpZmllcj09PVwiK1wiKXtmW24ubmFtZV09dFtlXS5zcGxpdChuLnByZWZpeCtuLnN1ZmZpeCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gaShlLG4pfSkpfWVsc2V7ZltuLm5hbWVdPWkodFtlXSxuKX19O2Zvcih2YXIgdT0xO3U8dC5sZW5ndGg7dSsrKXtfbG9vcF8xKHUpfXJldHVybntwYXRoOmEsaW5kZXg6byxwYXJhbXM6Zn19fXIucmVnZXhwVG9GdW5jdGlvbj1yZWdleHBUb0Z1bmN0aW9uO2Z1bmN0aW9uIGVzY2FwZVN0cmluZyhlKXtyZXR1cm4gZS5yZXBsYWNlKC8oWy4rKj89XiE6JHt9KClbXFxdfC9cXFxcXSkvZyxcIlxcXFwkMVwiKX1mdW5jdGlvbiBmbGFncyhlKXtyZXR1cm4gZSYmZS5zZW5zaXRpdmU/XCJcIjpcImlcIn1mdW5jdGlvbiByZWdleHBUb1JlZ2V4cChlLHIpe2lmKCFyKXJldHVybiBlO3ZhciBuPWUuc291cmNlLm1hdGNoKC9cXCgoPyFcXD8pL2cpO2lmKG4pe2Zvcih2YXIgdD0wO3Q8bi5sZW5ndGg7dCsrKXtyLnB1c2goe25hbWU6dCxwcmVmaXg6XCJcIixzdWZmaXg6XCJcIixtb2RpZmllcjpcIlwiLHBhdHRlcm46XCJcIn0pfX1yZXR1cm4gZX1mdW5jdGlvbiBhcnJheVRvUmVnZXhwKGUscixuKXt2YXIgdD1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHBhdGhUb1JlZ2V4cChlLHIsbikuc291cmNlfSkpO3JldHVybiBuZXcgUmVnRXhwKFwiKD86XCIrdC5qb2luKFwifFwiKStcIilcIixmbGFncyhuKSl9ZnVuY3Rpb24gc3RyaW5nVG9SZWdleHAoZSxyLG4pe3JldHVybiB0b2tlbnNUb1JlZ2V4cChwYXJzZShlLG4pLHIsbil9ZnVuY3Rpb24gdG9rZW5zVG9SZWdleHAoZSxyLG4pe2lmKG49PT12b2lkIDApe249e319dmFyIHQ9bi5zdHJpY3QsaT10PT09dm9pZCAwP2ZhbHNlOnQsYT1uLnN0YXJ0LG89YT09PXZvaWQgMD90cnVlOmEsZj1uLmVuZCx1PWY9PT12b2lkIDA/dHJ1ZTpmLHA9bi5lbmNvZGUsdj1wPT09dm9pZCAwP2Z1bmN0aW9uKGUpe3JldHVybiBlfTpwO3ZhciBjPVwiW1wiK2VzY2FwZVN0cmluZyhuLmVuZHNXaXRofHxcIlwiKStcIl18JFwiO3ZhciBzPVwiW1wiK2VzY2FwZVN0cmluZyhuLmRlbGltaXRlcnx8XCIvIz9cIikrXCJdXCI7dmFyIGQ9bz9cIl5cIjpcIlwiO2Zvcih2YXIgZz0wLHg9ZTtnPHgubGVuZ3RoO2crKyl7dmFyIGw9eFtnXTtpZih0eXBlb2YgbD09PVwic3RyaW5nXCIpe2QrPWVzY2FwZVN0cmluZyh2KGwpKX1lbHNle3ZhciBoPWVzY2FwZVN0cmluZyh2KGwucHJlZml4KSk7dmFyIG09ZXNjYXBlU3RyaW5nKHYobC5zdWZmaXgpKTtpZihsLnBhdHRlcm4pe2lmKHIpci5wdXNoKGwpO2lmKGh8fG0pe2lmKGwubW9kaWZpZXI9PT1cIitcInx8bC5tb2RpZmllcj09PVwiKlwiKXt2YXIgRT1sLm1vZGlmaWVyPT09XCIqXCI/XCI/XCI6XCJcIjtkKz1cIig/OlwiK2grXCIoKD86XCIrbC5wYXR0ZXJuK1wiKSg/OlwiK20raCtcIig/OlwiK2wucGF0dGVybitcIikpKilcIittK1wiKVwiK0V9ZWxzZXtkKz1cIig/OlwiK2grXCIoXCIrbC5wYXR0ZXJuK1wiKVwiK20rXCIpXCIrbC5tb2RpZmllcn19ZWxzZXtkKz1cIihcIitsLnBhdHRlcm4rXCIpXCIrbC5tb2RpZmllcn19ZWxzZXtkKz1cIig/OlwiK2grbStcIilcIitsLm1vZGlmaWVyfX19aWYodSl7aWYoIWkpZCs9cytcIj9cIjtkKz0hbi5lbmRzV2l0aD9cIiRcIjpcIig/PVwiK2MrXCIpXCJ9ZWxzZXt2YXIgVD1lW2UubGVuZ3RoLTFdO3ZhciB5PXR5cGVvZiBUPT09XCJzdHJpbmdcIj9zLmluZGV4T2YoVFtULmxlbmd0aC0xXSk+LTE6VD09PXVuZGVmaW5lZDtpZighaSl7ZCs9XCIoPzpcIitzK1wiKD89XCIrYytcIikpP1wifWlmKCF5KXtkKz1cIig/PVwiK3MrXCJ8XCIrYytcIilcIn19cmV0dXJuIG5ldyBSZWdFeHAoZCxmbGFncyhuKSl9ci50b2tlbnNUb1JlZ2V4cD10b2tlbnNUb1JlZ2V4cDtmdW5jdGlvbiBwYXRoVG9SZWdleHAoZSxyLG4pe2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuIHJlZ2V4cFRvUmVnZXhwKGUscik7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gYXJyYXlUb1JlZ2V4cChlLHIsbik7cmV0dXJuIHN0cmluZ1RvUmVnZXhwKGUscixuKX1yLnBhdGhUb1JlZ2V4cD1wYXRoVG9SZWdleHB9KSgpO21vZHVsZS5leHBvcnRzPWV9KSgpOyJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/path-to-regexp/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js":
/*!***********************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js ***!
  \***********************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js\");\n/**\n * @license React\n * react-dom-client.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\n true &&\n  (function () {\n    function findHook(fiber, id) {\n      for (fiber = fiber.memoizedState; null !== fiber && 0 < id; )\n        (fiber = fiber.next), id--;\n      return fiber;\n    }\n    function copyWithSetImpl(obj, path, index, value) {\n      if (index >= path.length) return value;\n      var key = path[index],\n        updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);\n      updated[key] = copyWithSetImpl(obj[key], path, index + 1, value);\n      return updated;\n    }\n    function copyWithRename(obj, oldPath, newPath) {\n      if (oldPath.length !== newPath.length)\n        console.warn(\"copyWithRename() expects paths of the same length\");\n      else {\n        for (var i = 0; i < newPath.length - 1; i++)\n          if (oldPath[i] !== newPath[i]) {\n            console.warn(\n              \"copyWithRename() expects paths to be the same except for the deepest key\"\n            );\n            return;\n          }\n        return copyWithRenameImpl(obj, oldPath, newPath, 0);\n      }\n    }\n    function copyWithRenameImpl(obj, oldPath, newPath, index) {\n      var oldKey = oldPath[index],\n        updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);\n      index + 1 === oldPath.length\n        ? ((updated[newPath[index]] = updated[oldKey]),\n          isArrayImpl(updated)\n            ? updated.splice(oldKey, 1)\n            : delete updated[oldKey])\n        : (updated[oldKey] = copyWithRenameImpl(\n            obj[oldKey],\n            oldPath,\n            newPath,\n            index + 1\n          ));\n      return updated;\n    }\n    function copyWithDeleteImpl(obj, path, index) {\n      var key = path[index],\n        updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj);\n      if (index + 1 === path.length)\n        return (\n          isArrayImpl(updated) ? updated.splice(key, 1) : delete updated[key],\n          updated\n        );\n      updated[key] = copyWithDeleteImpl(obj[key], path, index + 1);\n      return updated;\n    }\n    function shouldSuspendImpl() {\n      return !1;\n    }\n    function shouldErrorImpl() {\n      return null;\n    }\n    function warnInvalidHookAccess() {\n      console.error(\n        \"Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks\"\n      );\n    }\n    function warnInvalidContextAccess() {\n      console.error(\n        \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\"\n      );\n    }\n    function noop() {}\n    function warnForMissingKey() {}\n    function setToSortedString(set) {\n      var array = [];\n      set.forEach(function (value) {\n        array.push(value);\n      });\n      return array.sort().join(\", \");\n    }\n    function createFiber(tag, pendingProps, key, mode) {\n      return new FiberNode(tag, pendingProps, key, mode);\n    }\n    function scheduleRoot(root, element) {\n      root.context === emptyContextObject &&\n        (updateContainerImpl(root.current, 2, element, root, null, null),\n        flushSyncWork$1());\n    }\n    function scheduleRefresh(root, update) {\n      if (null !== resolveFamily) {\n        var staleFamilies = update.staleFamilies;\n        update = update.updatedFamilies;\n        flushPendingEffects();\n        scheduleFibersWithFamiliesRecursively(\n          root.current,\n          update,\n          staleFamilies\n        );\n        flushSyncWork$1();\n      }\n    }\n    function setRefreshHandler(handler) {\n      resolveFamily = handler;\n    }\n    function isValidContainer(node) {\n      return !(\n        !node ||\n        (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n      );\n    }\n    function getNearestMountedFiber(fiber) {\n      var node = fiber,\n        nearestMounted = fiber;\n      if (fiber.alternate) for (; node.return; ) node = node.return;\n      else {\n        fiber = node;\n        do\n          (node = fiber),\n            0 !== (node.flags & 4098) && (nearestMounted = node.return),\n            (fiber = node.return);\n        while (fiber);\n      }\n      return 3 === node.tag ? nearestMounted : null;\n    }\n    function getSuspenseInstanceFromFiber(fiber) {\n      if (13 === fiber.tag) {\n        var suspenseState = fiber.memoizedState;\n        null === suspenseState &&\n          ((fiber = fiber.alternate),\n          null !== fiber && (suspenseState = fiber.memoizedState));\n        if (null !== suspenseState) return suspenseState.dehydrated;\n      }\n      return null;\n    }\n    function getActivityInstanceFromFiber(fiber) {\n      if (31 === fiber.tag) {\n        var activityState = fiber.memoizedState;\n        null === activityState &&\n          ((fiber = fiber.alternate),\n          null !== fiber && (activityState = fiber.memoizedState));\n        if (null !== activityState) return activityState.dehydrated;\n      }\n      return null;\n    }\n    function assertIsMounted(fiber) {\n      if (getNearestMountedFiber(fiber) !== fiber)\n        throw Error(\"Unable to find node on an unmounted component.\");\n    }\n    function findCurrentFiberUsingSlowPath(fiber) {\n      var alternate = fiber.alternate;\n      if (!alternate) {\n        alternate = getNearestMountedFiber(fiber);\n        if (null === alternate)\n          throw Error(\"Unable to find node on an unmounted component.\");\n        return alternate !== fiber ? null : fiber;\n      }\n      for (var a = fiber, b = alternate; ; ) {\n        var parentA = a.return;\n        if (null === parentA) break;\n        var parentB = parentA.alternate;\n        if (null === parentB) {\n          b = parentA.return;\n          if (null !== b) {\n            a = b;\n            continue;\n          }\n          break;\n        }\n        if (parentA.child === parentB.child) {\n          for (parentB = parentA.child; parentB; ) {\n            if (parentB === a) return assertIsMounted(parentA), fiber;\n            if (parentB === b) return assertIsMounted(parentA), alternate;\n            parentB = parentB.sibling;\n          }\n          throw Error(\"Unable to find node on an unmounted component.\");\n        }\n        if (a.return !== b.return) (a = parentA), (b = parentB);\n        else {\n          for (var didFindChild = !1, _child = parentA.child; _child; ) {\n            if (_child === a) {\n              didFindChild = !0;\n              a = parentA;\n              b = parentB;\n              break;\n            }\n            if (_child === b) {\n              didFindChild = !0;\n              b = parentA;\n              a = parentB;\n              break;\n            }\n            _child = _child.sibling;\n          }\n          if (!didFindChild) {\n            for (_child = parentB.child; _child; ) {\n              if (_child === a) {\n                didFindChild = !0;\n                a = parentB;\n                b = parentA;\n                break;\n              }\n              if (_child === b) {\n                didFindChild = !0;\n                b = parentB;\n                a = parentA;\n                break;\n              }\n              _child = _child.sibling;\n            }\n            if (!didFindChild)\n              throw Error(\n                \"Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.\"\n              );\n          }\n        }\n        if (a.alternate !== b)\n          throw Error(\n            \"Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.\"\n          );\n      }\n      if (3 !== a.tag)\n        throw Error(\"Unable to find node on an unmounted component.\");\n      return a.stateNode.current === a ? fiber : alternate;\n    }\n    function findCurrentHostFiberImpl(node) {\n      var tag = node.tag;\n      if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n      for (node = node.child; null !== node; ) {\n        tag = findCurrentHostFiberImpl(node);\n        if (null !== tag) return tag;\n        node = node.sibling;\n      }\n      return null;\n    }\n    function getIteratorFn(maybeIterable) {\n      if (null === maybeIterable || \"object\" !== typeof maybeIterable)\n        return null;\n      maybeIterable =\n        (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n        maybeIterable[\"@@iterator\"];\n      return \"function\" === typeof maybeIterable ? maybeIterable : null;\n    }\n    function getComponentNameFromType(type) {\n      if (null == type) return null;\n      if (\"function\" === typeof type)\n        return type.$$typeof === REACT_CLIENT_REFERENCE\n          ? null\n          : type.displayName || type.name || null;\n      if (\"string\" === typeof type) return type;\n      switch (type) {\n        case REACT_FRAGMENT_TYPE:\n          return \"Fragment\";\n        case REACT_PROFILER_TYPE:\n          return \"Profiler\";\n        case REACT_STRICT_MODE_TYPE:\n          return \"StrictMode\";\n        case REACT_SUSPENSE_TYPE:\n          return \"Suspense\";\n        case REACT_SUSPENSE_LIST_TYPE:\n          return \"SuspenseList\";\n        case REACT_ACTIVITY_TYPE:\n          return \"Activity\";\n      }\n      if (\"object\" === typeof type)\n        switch (\n          (\"number\" === typeof type.tag &&\n            console.error(\n              \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n            ),\n          type.$$typeof)\n        ) {\n          case REACT_PORTAL_TYPE:\n            return \"Portal\";\n          case REACT_CONTEXT_TYPE:\n            return type.displayName || \"Context\";\n          case REACT_CONSUMER_TYPE:\n            return (type._context.displayName || \"Context\") + \".Consumer\";\n          case REACT_FORWARD_REF_TYPE:\n            var innerType = type.render;\n            type = type.displayName;\n            type ||\n              ((type = innerType.displayName || innerType.name || \"\"),\n              (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n            return type;\n          case REACT_MEMO_TYPE:\n            return (\n              (innerType = type.displayName || null),\n              null !== innerType\n                ? innerType\n                : getComponentNameFromType(type.type) || \"Memo\"\n            );\n          case REACT_LAZY_TYPE:\n            innerType = type._payload;\n            type = type._init;\n            try {\n              return getComponentNameFromType(type(innerType));\n            } catch (x) {}\n        }\n      return null;\n    }\n    function getComponentNameFromOwner(owner) {\n      return \"number\" === typeof owner.tag\n        ? getComponentNameFromFiber(owner)\n        : \"string\" === typeof owner.name\n          ? owner.name\n          : null;\n    }\n    function getComponentNameFromFiber(fiber) {\n      var type = fiber.type;\n      switch (fiber.tag) {\n        case 31:\n          return \"Activity\";\n        case 24:\n          return \"Cache\";\n        case 9:\n          return (type._context.displayName || \"Context\") + \".Consumer\";\n        case 10:\n          return type.displayName || \"Context\";\n        case 18:\n          return \"DehydratedFragment\";\n        case 11:\n          return (\n            (fiber = type.render),\n            (fiber = fiber.displayName || fiber.name || \"\"),\n            type.displayName ||\n              (\"\" !== fiber ? \"ForwardRef(\" + fiber + \")\" : \"ForwardRef\")\n          );\n        case 7:\n          return \"Fragment\";\n        case 26:\n        case 27:\n        case 5:\n          return type;\n        case 4:\n          return \"Portal\";\n        case 3:\n          return \"Root\";\n        case 6:\n          return \"Text\";\n        case 16:\n          return getComponentNameFromType(type);\n        case 8:\n          return type === REACT_STRICT_MODE_TYPE ? \"StrictMode\" : \"Mode\";\n        case 22:\n          return \"Offscreen\";\n        case 12:\n          return \"Profiler\";\n        case 21:\n          return \"Scope\";\n        case 13:\n          return \"Suspense\";\n        case 19:\n          return \"SuspenseList\";\n        case 25:\n          return \"TracingMarker\";\n        case 1:\n        case 0:\n        case 14:\n        case 15:\n          if (\"function\" === typeof type)\n            return type.displayName || type.name || null;\n          if (\"string\" === typeof type) return type;\n          break;\n        case 29:\n          type = fiber._debugInfo;\n          if (null != type)\n            for (var i = type.length - 1; 0 <= i; i--)\n              if (\"string\" === typeof type[i].name) return type[i].name;\n          if (null !== fiber.return)\n            return getComponentNameFromFiber(fiber.return);\n      }\n      return null;\n    }\n    function createCursor(defaultValue) {\n      return { current: defaultValue };\n    }\n    function pop(cursor, fiber) {\n      0 > index$jscomp$0\n        ? console.error(\"Unexpected pop.\")\n        : (fiber !== fiberStack[index$jscomp$0] &&\n            console.error(\"Unexpected Fiber popped.\"),\n          (cursor.current = valueStack[index$jscomp$0]),\n          (valueStack[index$jscomp$0] = null),\n          (fiberStack[index$jscomp$0] = null),\n          index$jscomp$0--);\n    }\n    function push(cursor, value, fiber) {\n      index$jscomp$0++;\n      valueStack[index$jscomp$0] = cursor.current;\n      fiberStack[index$jscomp$0] = fiber;\n      cursor.current = value;\n    }\n    function requiredContext(c) {\n      null === c &&\n        console.error(\n          \"Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.\"\n        );\n      return c;\n    }\n    function pushHostContainer(fiber, nextRootInstance) {\n      push(rootInstanceStackCursor, nextRootInstance, fiber);\n      push(contextFiberStackCursor, fiber, fiber);\n      push(contextStackCursor, null, fiber);\n      var nextRootContext = nextRootInstance.nodeType;\n      switch (nextRootContext) {\n        case 9:\n        case 11:\n          nextRootContext = 9 === nextRootContext ? \"#document\" : \"#fragment\";\n          nextRootInstance = (nextRootInstance =\n            nextRootInstance.documentElement)\n            ? (nextRootInstance = nextRootInstance.namespaceURI)\n              ? getOwnHostContext(nextRootInstance)\n              : HostContextNamespaceNone\n            : HostContextNamespaceNone;\n          break;\n        default:\n          if (\n            ((nextRootContext = nextRootInstance.tagName),\n            (nextRootInstance = nextRootInstance.namespaceURI))\n          )\n            (nextRootInstance = getOwnHostContext(nextRootInstance)),\n              (nextRootInstance = getChildHostContextProd(\n                nextRootInstance,\n                nextRootContext\n              ));\n          else\n            switch (nextRootContext) {\n              case \"svg\":\n                nextRootInstance = HostContextNamespaceSvg;\n                break;\n              case \"math\":\n                nextRootInstance = HostContextNamespaceMath;\n                break;\n              default:\n                nextRootInstance = HostContextNamespaceNone;\n            }\n      }\n      nextRootContext = nextRootContext.toLowerCase();\n      nextRootContext = updatedAncestorInfoDev(null, nextRootContext);\n      nextRootContext = {\n        context: nextRootInstance,\n        ancestorInfo: nextRootContext\n      };\n      pop(contextStackCursor, fiber);\n      push(contextStackCursor, nextRootContext, fiber);\n    }\n    function popHostContainer(fiber) {\n      pop(contextStackCursor, fiber);\n      pop(contextFiberStackCursor, fiber);\n      pop(rootInstanceStackCursor, fiber);\n    }\n    function getHostContext() {\n      return requiredContext(contextStackCursor.current);\n    }\n    function pushHostContext(fiber) {\n      null !== fiber.memoizedState &&\n        push(hostTransitionProviderCursor, fiber, fiber);\n      var context = requiredContext(contextStackCursor.current);\n      var type = fiber.type;\n      var nextContext = getChildHostContextProd(context.context, type);\n      type = updatedAncestorInfoDev(context.ancestorInfo, type);\n      nextContext = { context: nextContext, ancestorInfo: type };\n      context !== nextContext &&\n        (push(contextFiberStackCursor, fiber, fiber),\n        push(contextStackCursor, nextContext, fiber));\n    }\n    function popHostContext(fiber) {\n      contextFiberStackCursor.current === fiber &&\n        (pop(contextStackCursor, fiber), pop(contextFiberStackCursor, fiber));\n      hostTransitionProviderCursor.current === fiber &&\n        (pop(hostTransitionProviderCursor, fiber),\n        (HostTransitionContext._currentValue = NotPendingTransition));\n    }\n    function disabledLog() {}\n    function disableLogs() {\n      if (0 === disabledDepth) {\n        prevLog = console.log;\n        prevInfo = console.info;\n        prevWarn = console.warn;\n        prevError = console.error;\n        prevGroup = console.group;\n        prevGroupCollapsed = console.groupCollapsed;\n        prevGroupEnd = console.groupEnd;\n        var props = {\n          configurable: !0,\n          enumerable: !0,\n          value: disabledLog,\n          writable: !0\n        };\n        Object.defineProperties(console, {\n          info: props,\n          log: props,\n          warn: props,\n          error: props,\n          group: props,\n          groupCollapsed: props,\n          groupEnd: props\n        });\n      }\n      disabledDepth++;\n    }\n    function reenableLogs() {\n      disabledDepth--;\n      if (0 === disabledDepth) {\n        var props = { configurable: !0, enumerable: !0, writable: !0 };\n        Object.defineProperties(console, {\n          log: assign({}, props, { value: prevLog }),\n          info: assign({}, props, { value: prevInfo }),\n          warn: assign({}, props, { value: prevWarn }),\n          error: assign({}, props, { value: prevError }),\n          group: assign({}, props, { value: prevGroup }),\n          groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),\n          groupEnd: assign({}, props, { value: prevGroupEnd })\n        });\n      }\n      0 > disabledDepth &&\n        console.error(\n          \"disabledDepth fell below zero. This is a bug in React. Please file an issue.\"\n        );\n    }\n    function formatOwnerStack(error) {\n      var prevPrepareStackTrace = Error.prepareStackTrace;\n      Error.prepareStackTrace = void 0;\n      error = error.stack;\n      Error.prepareStackTrace = prevPrepareStackTrace;\n      error.startsWith(\"Error: react-stack-top-frame\\n\") &&\n        (error = error.slice(29));\n      prevPrepareStackTrace = error.indexOf(\"\\n\");\n      -1 !== prevPrepareStackTrace &&\n        (error = error.slice(prevPrepareStackTrace + 1));\n      prevPrepareStackTrace = error.indexOf(\"react_stack_bottom_frame\");\n      -1 !== prevPrepareStackTrace &&\n        (prevPrepareStackTrace = error.lastIndexOf(\n          \"\\n\",\n          prevPrepareStackTrace\n        ));\n      if (-1 !== prevPrepareStackTrace)\n        error = error.slice(0, prevPrepareStackTrace);\n      else return \"\";\n      return error;\n    }\n    function describeBuiltInComponentFrame(name) {\n      if (void 0 === prefix)\n        try {\n          throw Error();\n        } catch (x) {\n          var match = x.stack.trim().match(/\\n( *(at )?)/);\n          prefix = (match && match[1]) || \"\";\n          suffix =\n            -1 < x.stack.indexOf(\"\\n    at\")\n              ? \" (<anonymous>)\"\n              : -1 < x.stack.indexOf(\"@\")\n                ? \"@unknown:0:0\"\n                : \"\";\n        }\n      return \"\\n\" + prefix + name + suffix;\n    }\n    function describeNativeComponentFrame(fn, construct) {\n      if (!fn || reentry) return \"\";\n      var frame = componentFrameCache.get(fn);\n      if (void 0 !== frame) return frame;\n      reentry = !0;\n      frame = Error.prepareStackTrace;\n      Error.prepareStackTrace = void 0;\n      var previousDispatcher = null;\n      previousDispatcher = ReactSharedInternals.H;\n      ReactSharedInternals.H = null;\n      disableLogs();\n      try {\n        var RunInRootFrame = {\n          DetermineComponentFrameRoot: function () {\n            try {\n              if (construct) {\n                var Fake = function () {\n                  throw Error();\n                };\n                Object.defineProperty(Fake.prototype, \"props\", {\n                  set: function () {\n                    throw Error();\n                  }\n                });\n                if (\"object\" === typeof Reflect && Reflect.construct) {\n                  try {\n                    Reflect.construct(Fake, []);\n                  } catch (x) {\n                    var control = x;\n                  }\n                  Reflect.construct(fn, [], Fake);\n                } else {\n                  try {\n                    Fake.call();\n                  } catch (x$0) {\n                    control = x$0;\n                  }\n                  fn.call(Fake.prototype);\n                }\n              } else {\n                try {\n                  throw Error();\n                } catch (x$1) {\n                  control = x$1;\n                }\n                (Fake = fn()) &&\n                  \"function\" === typeof Fake.catch &&\n                  Fake.catch(function () {});\n              }\n            } catch (sample) {\n              if (sample && control && \"string\" === typeof sample.stack)\n                return [sample.stack, control.stack];\n            }\n            return [null, null];\n          }\n        };\n        RunInRootFrame.DetermineComponentFrameRoot.displayName =\n          \"DetermineComponentFrameRoot\";\n        var namePropDescriptor = Object.getOwnPropertyDescriptor(\n          RunInRootFrame.DetermineComponentFrameRoot,\n          \"name\"\n        );\n        namePropDescriptor &&\n          namePropDescriptor.configurable &&\n          Object.defineProperty(\n            RunInRootFrame.DetermineComponentFrameRoot,\n            \"name\",\n            { value: \"DetermineComponentFrameRoot\" }\n          );\n        var _RunInRootFrame$Deter =\n            RunInRootFrame.DetermineComponentFrameRoot(),\n          sampleStack = _RunInRootFrame$Deter[0],\n          controlStack = _RunInRootFrame$Deter[1];\n        if (sampleStack && controlStack) {\n          var sampleLines = sampleStack.split(\"\\n\"),\n            controlLines = controlStack.split(\"\\n\");\n          for (\n            _RunInRootFrame$Deter = namePropDescriptor = 0;\n            namePropDescriptor < sampleLines.length &&\n            !sampleLines[namePropDescriptor].includes(\n              \"DetermineComponentFrameRoot\"\n            );\n\n          )\n            namePropDescriptor++;\n          for (\n            ;\n            _RunInRootFrame$Deter < controlLines.length &&\n            !controlLines[_RunInRootFrame$Deter].includes(\n              \"DetermineComponentFrameRoot\"\n            );\n\n          )\n            _RunInRootFrame$Deter++;\n          if (\n            namePropDescriptor === sampleLines.length ||\n            _RunInRootFrame$Deter === controlLines.length\n          )\n            for (\n              namePropDescriptor = sampleLines.length - 1,\n                _RunInRootFrame$Deter = controlLines.length - 1;\n              1 <= namePropDescriptor &&\n              0 <= _RunInRootFrame$Deter &&\n              sampleLines[namePropDescriptor] !==\n                controlLines[_RunInRootFrame$Deter];\n\n            )\n              _RunInRootFrame$Deter--;\n          for (\n            ;\n            1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter;\n            namePropDescriptor--, _RunInRootFrame$Deter--\n          )\n            if (\n              sampleLines[namePropDescriptor] !==\n              controlLines[_RunInRootFrame$Deter]\n            ) {\n              if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) {\n                do\n                  if (\n                    (namePropDescriptor--,\n                    _RunInRootFrame$Deter--,\n                    0 > _RunInRootFrame$Deter ||\n                      sampleLines[namePropDescriptor] !==\n                        controlLines[_RunInRootFrame$Deter])\n                  ) {\n                    var _frame =\n                      \"\\n\" +\n                      sampleLines[namePropDescriptor].replace(\n                        \" at new \",\n                        \" at \"\n                      );\n                    fn.displayName &&\n                      _frame.includes(\"<anonymous>\") &&\n                      (_frame = _frame.replace(\"<anonymous>\", fn.displayName));\n                    \"function\" === typeof fn &&\n                      componentFrameCache.set(fn, _frame);\n                    return _frame;\n                  }\n                while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);\n              }\n              break;\n            }\n        }\n      } finally {\n        (reentry = !1),\n          (ReactSharedInternals.H = previousDispatcher),\n          reenableLogs(),\n          (Error.prepareStackTrace = frame);\n      }\n      sampleLines = (sampleLines = fn ? fn.displayName || fn.name : \"\")\n        ? describeBuiltInComponentFrame(sampleLines)\n        : \"\";\n      \"function\" === typeof fn && componentFrameCache.set(fn, sampleLines);\n      return sampleLines;\n    }\n    function describeFiber(fiber, childFiber) {\n      switch (fiber.tag) {\n        case 26:\n        case 27:\n        case 5:\n          return describeBuiltInComponentFrame(fiber.type);\n        case 16:\n          return describeBuiltInComponentFrame(\"Lazy\");\n        case 13:\n          return fiber.child !== childFiber && null !== childFiber\n            ? describeBuiltInComponentFrame(\"Suspense Fallback\")\n            : describeBuiltInComponentFrame(\"Suspense\");\n        case 19:\n          return describeBuiltInComponentFrame(\"SuspenseList\");\n        case 0:\n        case 15:\n          return describeNativeComponentFrame(fiber.type, !1);\n        case 11:\n          return describeNativeComponentFrame(fiber.type.render, !1);\n        case 1:\n          return describeNativeComponentFrame(fiber.type, !0);\n        case 31:\n          return describeBuiltInComponentFrame(\"Activity\");\n        default:\n          return \"\";\n      }\n    }\n    function getStackByFiberInDevAndProd(workInProgress) {\n      try {\n        var info = \"\",\n          previous = null;\n        do {\n          info += describeFiber(workInProgress, previous);\n          var debugInfo = workInProgress._debugInfo;\n          if (debugInfo)\n            for (var i = debugInfo.length - 1; 0 <= i; i--) {\n              var entry = debugInfo[i];\n              if (\"string\" === typeof entry.name) {\n                var JSCompiler_temp_const = info;\n                a: {\n                  var name = entry.name,\n                    env = entry.env,\n                    location = entry.debugLocation;\n                  if (null != location) {\n                    var childStack = formatOwnerStack(location),\n                      idx = childStack.lastIndexOf(\"\\n\"),\n                      lastLine =\n                        -1 === idx ? childStack : childStack.slice(idx + 1);\n                    if (-1 !== lastLine.indexOf(name)) {\n                      var JSCompiler_inline_result = \"\\n\" + lastLine;\n                      break a;\n                    }\n                  }\n                  JSCompiler_inline_result = describeBuiltInComponentFrame(\n                    name + (env ? \" [\" + env + \"]\" : \"\")\n                  );\n                }\n                info = JSCompiler_temp_const + JSCompiler_inline_result;\n              }\n            }\n          previous = workInProgress;\n          workInProgress = workInProgress.return;\n        } while (workInProgress);\n        return info;\n      } catch (x) {\n        return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n      }\n    }\n    function describeFunctionComponentFrameWithoutLineNumber(fn) {\n      return (fn = fn ? fn.displayName || fn.name : \"\")\n        ? describeBuiltInComponentFrame(fn)\n        : \"\";\n    }\n    function getCurrentFiberOwnerNameInDevOrNull() {\n      if (null === current) return null;\n      var owner = current._debugOwner;\n      return null != owner ? getComponentNameFromOwner(owner) : null;\n    }\n    function getCurrentFiberStackInDev() {\n      if (null === current) return \"\";\n      var workInProgress = current;\n      try {\n        var info = \"\";\n        6 === workInProgress.tag && (workInProgress = workInProgress.return);\n        switch (workInProgress.tag) {\n          case 26:\n          case 27:\n          case 5:\n            info += describeBuiltInComponentFrame(workInProgress.type);\n            break;\n          case 13:\n            info += describeBuiltInComponentFrame(\"Suspense\");\n            break;\n          case 19:\n            info += describeBuiltInComponentFrame(\"SuspenseList\");\n            break;\n          case 31:\n            info += describeBuiltInComponentFrame(\"Activity\");\n            break;\n          case 30:\n          case 0:\n          case 15:\n          case 1:\n            workInProgress._debugOwner ||\n              \"\" !== info ||\n              (info += describeFunctionComponentFrameWithoutLineNumber(\n                workInProgress.type\n              ));\n            break;\n          case 11:\n            workInProgress._debugOwner ||\n              \"\" !== info ||\n              (info += describeFunctionComponentFrameWithoutLineNumber(\n                workInProgress.type.render\n              ));\n        }\n        for (; workInProgress; )\n          if (\"number\" === typeof workInProgress.tag) {\n            var fiber = workInProgress;\n            workInProgress = fiber._debugOwner;\n            var debugStack = fiber._debugStack;\n            workInProgress &&\n              debugStack &&\n              (\"string\" !== typeof debugStack &&\n                (fiber._debugStack = debugStack = formatOwnerStack(debugStack)),\n              \"\" !== debugStack && (info += \"\\n\" + debugStack));\n          } else if (null != workInProgress.debugStack) {\n            var ownerStack = workInProgress.debugStack;\n            (workInProgress = workInProgress.owner) &&\n              ownerStack &&\n              (info += \"\\n\" + formatOwnerStack(ownerStack));\n          } else break;\n        var JSCompiler_inline_result = info;\n      } catch (x) {\n        JSCompiler_inline_result =\n          \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n      }\n      return JSCompiler_inline_result;\n    }\n    function runWithFiberInDEV(fiber, callback, arg0, arg1, arg2, arg3, arg4) {\n      var previousFiber = current;\n      setCurrentFiber(fiber);\n      try {\n        return null !== fiber && fiber._debugTask\n          ? fiber._debugTask.run(\n              callback.bind(null, arg0, arg1, arg2, arg3, arg4)\n            )\n          : callback(arg0, arg1, arg2, arg3, arg4);\n      } finally {\n        setCurrentFiber(previousFiber);\n      }\n      throw Error(\n        \"runWithFiberInDEV should never be called in production. This is a bug in React.\"\n      );\n    }\n    function setCurrentFiber(fiber) {\n      ReactSharedInternals.getCurrentStack =\n        null === fiber ? null : getCurrentFiberStackInDev;\n      isRendering = !1;\n      current = fiber;\n    }\n    function typeName(value) {\n      return (\n        (\"function\" === typeof Symbol &&\n          Symbol.toStringTag &&\n          value[Symbol.toStringTag]) ||\n        value.constructor.name ||\n        \"Object\"\n      );\n    }\n    function willCoercionThrow(value) {\n      try {\n        return testStringCoercion(value), !1;\n      } catch (e) {\n        return !0;\n      }\n    }\n    function testStringCoercion(value) {\n      return \"\" + value;\n    }\n    function checkAttributeStringCoercion(value, attributeName) {\n      if (willCoercionThrow(value))\n        return (\n          console.error(\n            \"The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.\",\n            attributeName,\n            typeName(value)\n          ),\n          testStringCoercion(value)\n        );\n    }\n    function checkCSSPropertyStringCoercion(value, propName) {\n      if (willCoercionThrow(value))\n        return (\n          console.error(\n            \"The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.\",\n            propName,\n            typeName(value)\n          ),\n          testStringCoercion(value)\n        );\n    }\n    function checkFormFieldValueStringCoercion(value) {\n      if (willCoercionThrow(value))\n        return (\n          console.error(\n            \"Form field values (value, checked, defaultValue, or defaultChecked props) must be strings, not %s. This value must be coerced to a string before using it here.\",\n            typeName(value)\n          ),\n          testStringCoercion(value)\n        );\n    }\n    function injectInternals(internals) {\n      if (\"undefined\" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) return !1;\n      var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n      if (hook.isDisabled) return !0;\n      if (!hook.supportsFiber)\n        return (\n          console.error(\n            \"The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://react.dev/link/react-devtools\"\n          ),\n          !0\n        );\n      try {\n        (rendererID = hook.inject(internals)), (injectedHook = hook);\n      } catch (err) {\n        console.error(\"React instrumentation encountered an error: %s.\", err);\n      }\n      return hook.checkDCE ? !0 : !1;\n    }\n    function setIsStrictModeForDevtools(newIsStrictMode) {\n      \"function\" === typeof log$1 &&\n        unstable_setDisableYieldValue(newIsStrictMode);\n      if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n        try {\n          injectedHook.setStrictMode(rendererID, newIsStrictMode);\n        } catch (err) {\n          hasLoggedError ||\n            ((hasLoggedError = !0),\n            console.error(\n              \"React instrumentation encountered an error: %s\",\n              err\n            ));\n        }\n    }\n    function injectProfilingHooks(profilingHooks) {\n      injectedProfilingHooks = profilingHooks;\n    }\n    function markCommitStopped() {\n      null !== injectedProfilingHooks &&\n        \"function\" === typeof injectedProfilingHooks.markCommitStopped &&\n        injectedProfilingHooks.markCommitStopped();\n    }\n    function markComponentRenderStarted(fiber) {\n      null !== injectedProfilingHooks &&\n        \"function\" ===\n          typeof injectedProfilingHooks.markComponentRenderStarted &&\n        injectedProfilingHooks.markComponentRenderStarted(fiber);\n    }\n    function markComponentRenderStopped() {\n      null !== injectedProfilingHooks &&\n        \"function\" ===\n          typeof injectedProfilingHooks.markComponentRenderStopped &&\n        injectedProfilingHooks.markComponentRenderStopped();\n    }\n    function markRenderStarted(lanes) {\n      null !== injectedProfilingHooks &&\n        \"function\" === typeof injectedProfilingHooks.markRenderStarted &&\n        injectedProfilingHooks.markRenderStarted(lanes);\n    }\n    function markRenderStopped() {\n      null !== injectedProfilingHooks &&\n        \"function\" === typeof injectedProfilingHooks.markRenderStopped &&\n        injectedProfilingHooks.markRenderStopped();\n    }\n    function markStateUpdateScheduled(fiber, lane) {\n      null !== injectedProfilingHooks &&\n        \"function\" === typeof injectedProfilingHooks.markStateUpdateScheduled &&\n        injectedProfilingHooks.markStateUpdateScheduled(fiber, lane);\n    }\n    function clz32Fallback(x) {\n      x >>>= 0;\n      return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n    }\n    function getLabelForLane(lane) {\n      if (lane & 1) return \"SyncHydrationLane\";\n      if (lane & 2) return \"Sync\";\n      if (lane & 4) return \"InputContinuousHydration\";\n      if (lane & 8) return \"InputContinuous\";\n      if (lane & 16) return \"DefaultHydration\";\n      if (lane & 32) return \"Default\";\n      if (lane & 128) return \"TransitionHydration\";\n      if (lane & 4194048) return \"Transition\";\n      if (lane & 62914560) return \"Retry\";\n      if (lane & 67108864) return \"SelectiveHydration\";\n      if (lane & 134217728) return \"IdleHydration\";\n      if (lane & 268435456) return \"Idle\";\n      if (lane & 536870912) return \"Offscreen\";\n      if (lane & 1073741824) return \"Deferred\";\n    }\n    function getHighestPriorityLanes(lanes) {\n      var pendingSyncLanes = lanes & 42;\n      if (0 !== pendingSyncLanes) return pendingSyncLanes;\n      switch (lanes & -lanes) {\n        case 1:\n          return 1;\n        case 2:\n          return 2;\n        case 4:\n          return 4;\n        case 8:\n          return 8;\n        case 16:\n          return 16;\n        case 32:\n          return 32;\n        case 64:\n          return 64;\n        case 128:\n          return 128;\n        case 256:\n        case 512:\n        case 1024:\n        case 2048:\n        case 4096:\n        case 8192:\n        case 16384:\n        case 32768:\n        case 65536:\n        case 131072:\n        case 262144:\n        case 524288:\n        case 1048576:\n        case 2097152:\n          return lanes & 4194048;\n        case 4194304:\n        case 8388608:\n        case 16777216:\n        case 33554432:\n          return lanes & 62914560;\n        case 67108864:\n          return 67108864;\n        case 134217728:\n          return 134217728;\n        case 268435456:\n          return 268435456;\n        case 536870912:\n          return 536870912;\n        case 1073741824:\n          return 0;\n        default:\n          return (\n            console.error(\n              \"Should have found matching lanes. This is a bug in React.\"\n            ),\n            lanes\n          );\n      }\n    }\n    function getNextLanes(root, wipLanes, rootHasPendingCommit) {\n      var pendingLanes = root.pendingLanes;\n      if (0 === pendingLanes) return 0;\n      var nextLanes = 0,\n        suspendedLanes = root.suspendedLanes,\n        pingedLanes = root.pingedLanes;\n      root = root.warmLanes;\n      var nonIdlePendingLanes = pendingLanes & 134217727;\n      0 !== nonIdlePendingLanes\n        ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n          0 !== pendingLanes\n            ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n            : ((pingedLanes &= nonIdlePendingLanes),\n              0 !== pingedLanes\n                ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n                : rootHasPendingCommit ||\n                  ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n                  0 !== rootHasPendingCommit &&\n                    (nextLanes =\n                      getHighestPriorityLanes(rootHasPendingCommit)))))\n        : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n          0 !== nonIdlePendingLanes\n            ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n            : 0 !== pingedLanes\n              ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n              : rootHasPendingCommit ||\n                ((rootHasPendingCommit = pendingLanes & ~root),\n                0 !== rootHasPendingCommit &&\n                  (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n      return 0 === nextLanes\n        ? 0\n        : 0 !== wipLanes &&\n            wipLanes !== nextLanes &&\n            0 === (wipLanes & suspendedLanes) &&\n            ((suspendedLanes = nextLanes & -nextLanes),\n            (rootHasPendingCommit = wipLanes & -wipLanes),\n            suspendedLanes >= rootHasPendingCommit ||\n              (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n          ? wipLanes\n          : nextLanes;\n    }\n    function checkIfRootIsPrerendering(root, renderLanes) {\n      return (\n        0 ===\n        (root.pendingLanes &\n          ~(root.suspendedLanes & ~root.pingedLanes) &\n          renderLanes)\n      );\n    }\n    function computeExpirationTime(lane, currentTime) {\n      switch (lane) {\n        case 1:\n        case 2:\n        case 4:\n        case 8:\n        case 64:\n          return currentTime + 250;\n        case 16:\n        case 32:\n        case 128:\n        case 256:\n        case 512:\n        case 1024:\n        case 2048:\n        case 4096:\n        case 8192:\n        case 16384:\n        case 32768:\n        case 65536:\n        case 131072:\n        case 262144:\n        case 524288:\n        case 1048576:\n        case 2097152:\n          return currentTime + 5e3;\n        case 4194304:\n        case 8388608:\n        case 16777216:\n        case 33554432:\n          return -1;\n        case 67108864:\n        case 134217728:\n        case 268435456:\n        case 536870912:\n        case 1073741824:\n          return -1;\n        default:\n          return (\n            console.error(\n              \"Should have found matching lanes. This is a bug in React.\"\n            ),\n            -1\n          );\n      }\n    }\n    function claimNextTransitionLane() {\n      var lane = nextTransitionLane;\n      nextTransitionLane <<= 1;\n      0 === (nextTransitionLane & 4194048) && (nextTransitionLane = 256);\n      return lane;\n    }\n    function claimNextRetryLane() {\n      var lane = nextRetryLane;\n      nextRetryLane <<= 1;\n      0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n      return lane;\n    }\n    function createLaneMap(initial) {\n      for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n      return laneMap;\n    }\n    function markRootUpdated$1(root, updateLane) {\n      root.pendingLanes |= updateLane;\n      268435456 !== updateLane &&\n        ((root.suspendedLanes = 0),\n        (root.pingedLanes = 0),\n        (root.warmLanes = 0));\n    }\n    function markRootFinished(\n      root,\n      finishedLanes,\n      remainingLanes,\n      spawnedLane,\n      updatedLanes,\n      suspendedRetryLanes\n    ) {\n      var previouslyPendingLanes = root.pendingLanes;\n      root.pendingLanes = remainingLanes;\n      root.suspendedLanes = 0;\n      root.pingedLanes = 0;\n      root.warmLanes = 0;\n      root.expiredLanes &= remainingLanes;\n      root.entangledLanes &= remainingLanes;\n      root.errorRecoveryDisabledLanes &= remainingLanes;\n      root.shellSuspendCounter = 0;\n      var entanglements = root.entanglements,\n        expirationTimes = root.expirationTimes,\n        hiddenUpdates = root.hiddenUpdates;\n      for (\n        remainingLanes = previouslyPendingLanes & ~remainingLanes;\n        0 < remainingLanes;\n\n      ) {\n        var index = 31 - clz32(remainingLanes),\n          lane = 1 << index;\n        entanglements[index] = 0;\n        expirationTimes[index] = -1;\n        var hiddenUpdatesForLane = hiddenUpdates[index];\n        if (null !== hiddenUpdatesForLane)\n          for (\n            hiddenUpdates[index] = null, index = 0;\n            index < hiddenUpdatesForLane.length;\n            index++\n          ) {\n            var update = hiddenUpdatesForLane[index];\n            null !== update && (update.lane &= -536870913);\n          }\n        remainingLanes &= ~lane;\n      }\n      0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n      0 !== suspendedRetryLanes &&\n        0 === updatedLanes &&\n        0 !== root.tag &&\n        (root.suspendedLanes |=\n          suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n    }\n    function markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n      root.pendingLanes |= spawnedLane;\n      root.suspendedLanes &= ~spawnedLane;\n      var spawnedLaneIndex = 31 - clz32(spawnedLane);\n      root.entangledLanes |= spawnedLane;\n      root.entanglements[spawnedLaneIndex] =\n        root.entanglements[spawnedLaneIndex] |\n        1073741824 |\n        (entangledLanes & 4194090);\n    }\n    function markRootEntangled(root, entangledLanes) {\n      var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n      for (root = root.entanglements; rootEntangledLanes; ) {\n        var index = 31 - clz32(rootEntangledLanes),\n          lane = 1 << index;\n        (lane & entangledLanes) | (root[index] & entangledLanes) &&\n          (root[index] |= entangledLanes);\n        rootEntangledLanes &= ~lane;\n      }\n    }\n    function getBumpedLaneForHydration(root, renderLanes) {\n      var renderLane = renderLanes & -renderLanes;\n      renderLane =\n        0 !== (renderLane & 42)\n          ? 1\n          : getBumpedLaneForHydrationByLane(renderLane);\n      return 0 !== (renderLane & (root.suspendedLanes | renderLanes))\n        ? 0\n        : renderLane;\n    }\n    function getBumpedLaneForHydrationByLane(lane) {\n      switch (lane) {\n        case 2:\n          lane = 1;\n          break;\n        case 8:\n          lane = 4;\n          break;\n        case 32:\n          lane = 16;\n          break;\n        case 256:\n        case 512:\n        case 1024:\n        case 2048:\n        case 4096:\n        case 8192:\n        case 16384:\n        case 32768:\n        case 65536:\n        case 131072:\n        case 262144:\n        case 524288:\n        case 1048576:\n        case 2097152:\n        case 4194304:\n        case 8388608:\n        case 16777216:\n        case 33554432:\n          lane = 128;\n          break;\n        case 268435456:\n          lane = 134217728;\n          break;\n        default:\n          lane = 0;\n      }\n      return lane;\n    }\n    function addFiberToLanesMap(root, fiber, lanes) {\n      if (isDevToolsPresent)\n        for (root = root.pendingUpdatersLaneMap; 0 < lanes; ) {\n          var index = 31 - clz32(lanes),\n            lane = 1 << index;\n          root[index].add(fiber);\n          lanes &= ~lane;\n        }\n    }\n    function movePendingFibersToMemoized(root, lanes) {\n      if (isDevToolsPresent)\n        for (\n          var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap,\n            memoizedUpdaters = root.memoizedUpdaters;\n          0 < lanes;\n\n        ) {\n          var index = 31 - clz32(lanes);\n          root = 1 << index;\n          index = pendingUpdatersLaneMap[index];\n          0 < index.size &&\n            (index.forEach(function (fiber) {\n              var alternate = fiber.alternate;\n              (null !== alternate && memoizedUpdaters.has(alternate)) ||\n                memoizedUpdaters.add(fiber);\n            }),\n            index.clear());\n          lanes &= ~root;\n        }\n    }\n    function lanesToEventPriority(lanes) {\n      lanes &= -lanes;\n      return 0 !== DiscreteEventPriority && DiscreteEventPriority < lanes\n        ? 0 !== ContinuousEventPriority && ContinuousEventPriority < lanes\n          ? 0 !== (lanes & 134217727)\n            ? DefaultEventPriority\n            : IdleEventPriority\n          : ContinuousEventPriority\n        : DiscreteEventPriority;\n    }\n    function resolveUpdatePriority() {\n      var updatePriority = ReactDOMSharedInternals.p;\n      if (0 !== updatePriority) return updatePriority;\n      updatePriority = window.event;\n      return void 0 === updatePriority\n        ? DefaultEventPriority\n        : getEventPriority(updatePriority.type);\n    }\n    function runWithPriority(priority, fn) {\n      var previousPriority = ReactDOMSharedInternals.p;\n      try {\n        return (ReactDOMSharedInternals.p = priority), fn();\n      } finally {\n        ReactDOMSharedInternals.p = previousPriority;\n      }\n    }\n    function detachDeletedInstance(node) {\n      delete node[internalInstanceKey];\n      delete node[internalPropsKey];\n      delete node[internalEventHandlersKey];\n      delete node[internalEventHandlerListenersKey];\n      delete node[internalEventHandlesSetKey];\n    }\n    function getClosestInstanceFromNode(targetNode) {\n      var targetInst = targetNode[internalInstanceKey];\n      if (targetInst) return targetInst;\n      for (var parentNode = targetNode.parentNode; parentNode; ) {\n        if (\n          (targetInst =\n            parentNode[internalContainerInstanceKey] ||\n            parentNode[internalInstanceKey])\n        ) {\n          parentNode = targetInst.alternate;\n          if (\n            null !== targetInst.child ||\n            (null !== parentNode && null !== parentNode.child)\n          )\n            for (\n              targetNode = getParentHydrationBoundary(targetNode);\n              null !== targetNode;\n\n            ) {\n              if ((parentNode = targetNode[internalInstanceKey]))\n                return parentNode;\n              targetNode = getParentHydrationBoundary(targetNode);\n            }\n          return targetInst;\n        }\n        targetNode = parentNode;\n        parentNode = targetNode.parentNode;\n      }\n      return null;\n    }\n    function getInstanceFromNode(node) {\n      if (\n        (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n      ) {\n        var tag = node.tag;\n        if (\n          5 === tag ||\n          6 === tag ||\n          13 === tag ||\n          31 === tag ||\n          26 === tag ||\n          27 === tag ||\n          3 === tag\n        )\n          return node;\n      }\n      return null;\n    }\n    function getNodeFromInstance(inst) {\n      var tag = inst.tag;\n      if (5 === tag || 26 === tag || 27 === tag || 6 === tag)\n        return inst.stateNode;\n      throw Error(\"getNodeFromInstance: Invalid argument.\");\n    }\n    function getResourcesFromRoot(root) {\n      var resources = root[internalRootNodeResourcesKey];\n      resources ||\n        (resources = root[internalRootNodeResourcesKey] =\n          { hoistableStyles: new Map(), hoistableScripts: new Map() });\n      return resources;\n    }\n    function markNodeAsHoistable(node) {\n      node[internalHoistableMarker] = !0;\n    }\n    function registerTwoPhaseEvent(registrationName, dependencies) {\n      registerDirectEvent(registrationName, dependencies);\n      registerDirectEvent(registrationName + \"Capture\", dependencies);\n    }\n    function registerDirectEvent(registrationName, dependencies) {\n      registrationNameDependencies[registrationName] &&\n        console.error(\n          \"EventRegistry: More than one plugin attempted to publish the same registration name, `%s`.\",\n          registrationName\n        );\n      registrationNameDependencies[registrationName] = dependencies;\n      var lowerCasedName = registrationName.toLowerCase();\n      possibleRegistrationNames[lowerCasedName] = registrationName;\n      \"onDoubleClick\" === registrationName &&\n        (possibleRegistrationNames.ondblclick = registrationName);\n      for (\n        registrationName = 0;\n        registrationName < dependencies.length;\n        registrationName++\n      )\n        allNativeEvents.add(dependencies[registrationName]);\n    }\n    function checkControlledValueProps(tagName, props) {\n      hasReadOnlyValue[props.type] ||\n        props.onChange ||\n        props.onInput ||\n        props.readOnly ||\n        props.disabled ||\n        null == props.value ||\n        (\"select\" === tagName\n          ? console.error(\n              \"You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`.\"\n            )\n          : console.error(\n              \"You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.\"\n            ));\n      props.onChange ||\n        props.readOnly ||\n        props.disabled ||\n        null == props.checked ||\n        console.error(\n          \"You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.\"\n        );\n    }\n    function isAttributeNameSafe(attributeName) {\n      if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n        return !0;\n      if (hasOwnProperty.call(illegalAttributeNameCache, attributeName))\n        return !1;\n      if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n        return (validatedAttributeNameCache[attributeName] = !0);\n      illegalAttributeNameCache[attributeName] = !0;\n      console.error(\"Invalid attribute name: `%s`\", attributeName);\n      return !1;\n    }\n    function getValueForAttributeOnCustomComponent(node, name, expected) {\n      if (isAttributeNameSafe(name)) {\n        if (!node.hasAttribute(name)) {\n          switch (typeof expected) {\n            case \"symbol\":\n            case \"object\":\n              return expected;\n            case \"function\":\n              return expected;\n            case \"boolean\":\n              if (!1 === expected) return expected;\n          }\n          return void 0 === expected ? void 0 : null;\n        }\n        node = node.getAttribute(name);\n        if (\"\" === node && !0 === expected) return !0;\n        checkAttributeStringCoercion(expected, name);\n        return node === \"\" + expected ? expected : node;\n      }\n    }\n    function setValueForAttribute(node, name, value) {\n      if (isAttributeNameSafe(name))\n        if (null === value) node.removeAttribute(name);\n        else {\n          switch (typeof value) {\n            case \"undefined\":\n            case \"function\":\n            case \"symbol\":\n              node.removeAttribute(name);\n              return;\n            case \"boolean\":\n              var prefix = name.toLowerCase().slice(0, 5);\n              if (\"data-\" !== prefix && \"aria-\" !== prefix) {\n                node.removeAttribute(name);\n                return;\n              }\n          }\n          checkAttributeStringCoercion(value, name);\n          node.setAttribute(name, \"\" + value);\n        }\n    }\n    function setValueForKnownAttribute(node, name, value) {\n      if (null === value) node.removeAttribute(name);\n      else {\n        switch (typeof value) {\n          case \"undefined\":\n          case \"function\":\n          case \"symbol\":\n          case \"boolean\":\n            node.removeAttribute(name);\n            return;\n        }\n        checkAttributeStringCoercion(value, name);\n        node.setAttribute(name, \"\" + value);\n      }\n    }\n    function setValueForNamespacedAttribute(node, namespace, name, value) {\n      if (null === value) node.removeAttribute(name);\n      else {\n        switch (typeof value) {\n          case \"undefined\":\n          case \"function\":\n          case \"symbol\":\n          case \"boolean\":\n            node.removeAttribute(name);\n            return;\n        }\n        checkAttributeStringCoercion(value, name);\n        node.setAttributeNS(namespace, name, \"\" + value);\n      }\n    }\n    function getToStringValue(value) {\n      switch (typeof value) {\n        case \"bigint\":\n        case \"boolean\":\n        case \"number\":\n        case \"string\":\n        case \"undefined\":\n          return value;\n        case \"object\":\n          return checkFormFieldValueStringCoercion(value), value;\n        default:\n          return \"\";\n      }\n    }\n    function isCheckable(elem) {\n      var type = elem.type;\n      return (\n        (elem = elem.nodeName) &&\n        \"input\" === elem.toLowerCase() &&\n        (\"checkbox\" === type || \"radio\" === type)\n      );\n    }\n    function trackValueOnNode(node, valueField, currentValue) {\n      var descriptor = Object.getOwnPropertyDescriptor(\n        node.constructor.prototype,\n        valueField\n      );\n      if (\n        !node.hasOwnProperty(valueField) &&\n        \"undefined\" !== typeof descriptor &&\n        \"function\" === typeof descriptor.get &&\n        \"function\" === typeof descriptor.set\n      ) {\n        var get = descriptor.get,\n          set = descriptor.set;\n        Object.defineProperty(node, valueField, {\n          configurable: !0,\n          get: function () {\n            return get.call(this);\n          },\n          set: function (value) {\n            checkFormFieldValueStringCoercion(value);\n            currentValue = \"\" + value;\n            set.call(this, value);\n          }\n        });\n        Object.defineProperty(node, valueField, {\n          enumerable: descriptor.enumerable\n        });\n        return {\n          getValue: function () {\n            return currentValue;\n          },\n          setValue: function (value) {\n            checkFormFieldValueStringCoercion(value);\n            currentValue = \"\" + value;\n          },\n          stopTracking: function () {\n            node._valueTracker = null;\n            delete node[valueField];\n          }\n        };\n      }\n    }\n    function track(node) {\n      if (!node._valueTracker) {\n        var valueField = isCheckable(node) ? \"checked\" : \"value\";\n        node._valueTracker = trackValueOnNode(\n          node,\n          valueField,\n          \"\" + node[valueField]\n        );\n      }\n    }\n    function updateValueIfChanged(node) {\n      if (!node) return !1;\n      var tracker = node._valueTracker;\n      if (!tracker) return !0;\n      var lastValue = tracker.getValue();\n      var value = \"\";\n      node &&\n        (value = isCheckable(node)\n          ? node.checked\n            ? \"true\"\n            : \"false\"\n          : node.value);\n      node = value;\n      return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n    }\n    function getActiveElement(doc) {\n      doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n      if (\"undefined\" === typeof doc) return null;\n      try {\n        return doc.activeElement || doc.body;\n      } catch (e) {\n        return doc.body;\n      }\n    }\n    function escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n      return value.replace(\n        escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n        function (ch) {\n          return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n        }\n      );\n    }\n    function validateInputProps(element, props) {\n      void 0 === props.checked ||\n        void 0 === props.defaultChecked ||\n        didWarnCheckedDefaultChecked ||\n        (console.error(\n          \"%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components\",\n          getCurrentFiberOwnerNameInDevOrNull() || \"A component\",\n          props.type\n        ),\n        (didWarnCheckedDefaultChecked = !0));\n      void 0 === props.value ||\n        void 0 === props.defaultValue ||\n        didWarnValueDefaultValue$1 ||\n        (console.error(\n          \"%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components\",\n          getCurrentFiberOwnerNameInDevOrNull() || \"A component\",\n          props.type\n        ),\n        (didWarnValueDefaultValue$1 = !0));\n    }\n    function updateInput(\n      element,\n      value,\n      defaultValue,\n      lastDefaultValue,\n      checked,\n      defaultChecked,\n      type,\n      name\n    ) {\n      element.name = \"\";\n      null != type &&\n      \"function\" !== typeof type &&\n      \"symbol\" !== typeof type &&\n      \"boolean\" !== typeof type\n        ? (checkAttributeStringCoercion(type, \"type\"), (element.type = type))\n        : element.removeAttribute(\"type\");\n      if (null != value)\n        if (\"number\" === type) {\n          if ((0 === value && \"\" === element.value) || element.value != value)\n            element.value = \"\" + getToStringValue(value);\n        } else\n          element.value !== \"\" + getToStringValue(value) &&\n            (element.value = \"\" + getToStringValue(value));\n      else\n        (\"submit\" !== type && \"reset\" !== type) ||\n          element.removeAttribute(\"value\");\n      null != value\n        ? setDefaultValue(element, type, getToStringValue(value))\n        : null != defaultValue\n          ? setDefaultValue(element, type, getToStringValue(defaultValue))\n          : null != lastDefaultValue && element.removeAttribute(\"value\");\n      null == checked &&\n        null != defaultChecked &&\n        (element.defaultChecked = !!defaultChecked);\n      null != checked &&\n        (element.checked =\n          checked &&\n          \"function\" !== typeof checked &&\n          \"symbol\" !== typeof checked);\n      null != name &&\n      \"function\" !== typeof name &&\n      \"symbol\" !== typeof name &&\n      \"boolean\" !== typeof name\n        ? (checkAttributeStringCoercion(name, \"name\"),\n          (element.name = \"\" + getToStringValue(name)))\n        : element.removeAttribute(\"name\");\n    }\n    function initInput(\n      element,\n      value,\n      defaultValue,\n      checked,\n      defaultChecked,\n      type,\n      name,\n      isHydrating\n    ) {\n      null != type &&\n        \"function\" !== typeof type &&\n        \"symbol\" !== typeof type &&\n        \"boolean\" !== typeof type &&\n        (checkAttributeStringCoercion(type, \"type\"), (element.type = type));\n      if (null != value || null != defaultValue) {\n        if (\n          !(\n            (\"submit\" !== type && \"reset\" !== type) ||\n            (void 0 !== value && null !== value)\n          )\n        ) {\n          track(element);\n          return;\n        }\n        defaultValue =\n          null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n        value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n        isHydrating || value === element.value || (element.value = value);\n        element.defaultValue = value;\n      }\n      checked = null != checked ? checked : defaultChecked;\n      checked =\n        \"function\" !== typeof checked &&\n        \"symbol\" !== typeof checked &&\n        !!checked;\n      element.checked = isHydrating ? element.checked : !!checked;\n      element.defaultChecked = !!checked;\n      null != name &&\n        \"function\" !== typeof name &&\n        \"symbol\" !== typeof name &&\n        \"boolean\" !== typeof name &&\n        (checkAttributeStringCoercion(name, \"name\"), (element.name = name));\n      track(element);\n    }\n    function setDefaultValue(node, type, value) {\n      (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n        node.defaultValue === \"\" + value ||\n        (node.defaultValue = \"\" + value);\n    }\n    function validateOptionProps(element, props) {\n      null == props.value &&\n        (\"object\" === typeof props.children && null !== props.children\n          ? React.Children.forEach(props.children, function (child) {\n              null == child ||\n                \"string\" === typeof child ||\n                \"number\" === typeof child ||\n                \"bigint\" === typeof child ||\n                didWarnInvalidChild ||\n                ((didWarnInvalidChild = !0),\n                console.error(\n                  \"Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to <option>.\"\n                ));\n            })\n          : null == props.dangerouslySetInnerHTML ||\n            didWarnInvalidInnerHTML ||\n            ((didWarnInvalidInnerHTML = !0),\n            console.error(\n              \"Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected.\"\n            )));\n      null == props.selected ||\n        didWarnSelectedSetOnOption ||\n        (console.error(\n          \"Use the `defaultValue` or `value` props on <select> instead of setting `selected` on <option>.\"\n        ),\n        (didWarnSelectedSetOnOption = !0));\n    }\n    function getDeclarationErrorAddendum() {\n      var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n      return ownerName\n        ? \"\\n\\nCheck the render method of `\" + ownerName + \"`.\"\n        : \"\";\n    }\n    function updateOptions(node, multiple, propValue, setDefaultSelected) {\n      node = node.options;\n      if (multiple) {\n        multiple = {};\n        for (var i = 0; i < propValue.length; i++)\n          multiple[\"$\" + propValue[i]] = !0;\n        for (propValue = 0; propValue < node.length; propValue++)\n          (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n            node[propValue].selected !== i && (node[propValue].selected = i),\n            i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n      } else {\n        propValue = \"\" + getToStringValue(propValue);\n        multiple = null;\n        for (i = 0; i < node.length; i++) {\n          if (node[i].value === propValue) {\n            node[i].selected = !0;\n            setDefaultSelected && (node[i].defaultSelected = !0);\n            return;\n          }\n          null !== multiple || node[i].disabled || (multiple = node[i]);\n        }\n        null !== multiple && (multiple.selected = !0);\n      }\n    }\n    function validateSelectProps(element, props) {\n      for (element = 0; element < valuePropNames.length; element++) {\n        var propName = valuePropNames[element];\n        if (null != props[propName]) {\n          var propNameIsArray = isArrayImpl(props[propName]);\n          props.multiple && !propNameIsArray\n            ? console.error(\n                \"The `%s` prop supplied to <select> must be an array if `multiple` is true.%s\",\n                propName,\n                getDeclarationErrorAddendum()\n              )\n            : !props.multiple &&\n              propNameIsArray &&\n              console.error(\n                \"The `%s` prop supplied to <select> must be a scalar value if `multiple` is false.%s\",\n                propName,\n                getDeclarationErrorAddendum()\n              );\n        }\n      }\n      void 0 === props.value ||\n        void 0 === props.defaultValue ||\n        didWarnValueDefaultValue ||\n        (console.error(\n          \"Select elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled select element and remove one of these props. More info: https://react.dev/link/controlled-components\"\n        ),\n        (didWarnValueDefaultValue = !0));\n    }\n    function validateTextareaProps(element, props) {\n      void 0 === props.value ||\n        void 0 === props.defaultValue ||\n        didWarnValDefaultVal ||\n        (console.error(\n          \"%s contains a textarea with both value and defaultValue props. Textarea elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled textarea and remove one of these props. More info: https://react.dev/link/controlled-components\",\n          getCurrentFiberOwnerNameInDevOrNull() || \"A component\"\n        ),\n        (didWarnValDefaultVal = !0));\n      null != props.children &&\n        null == props.value &&\n        console.error(\n          \"Use the `defaultValue` or `value` props instead of setting children on <textarea>.\"\n        );\n    }\n    function updateTextarea(element, value, defaultValue) {\n      if (\n        null != value &&\n        ((value = \"\" + getToStringValue(value)),\n        value !== element.value && (element.value = value),\n        null == defaultValue)\n      ) {\n        element.defaultValue !== value && (element.defaultValue = value);\n        return;\n      }\n      element.defaultValue =\n        null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n    }\n    function initTextarea(element, value, defaultValue, children) {\n      if (null == value) {\n        if (null != children) {\n          if (null != defaultValue)\n            throw Error(\n              \"If you supply `defaultValue` on a <textarea>, do not pass children.\"\n            );\n          if (isArrayImpl(children)) {\n            if (1 < children.length)\n              throw Error(\"<textarea> can only have at most one child.\");\n            children = children[0];\n          }\n          defaultValue = children;\n        }\n        null == defaultValue && (defaultValue = \"\");\n        value = defaultValue;\n      }\n      defaultValue = getToStringValue(value);\n      element.defaultValue = defaultValue;\n      children = element.textContent;\n      children === defaultValue &&\n        \"\" !== children &&\n        null !== children &&\n        (element.value = children);\n      track(element);\n    }\n    function findNotableNode(node, indent) {\n      return void 0 === node.serverProps &&\n        0 === node.serverTail.length &&\n        1 === node.children.length &&\n        3 < node.distanceFromLeaf &&\n        node.distanceFromLeaf > 15 - indent\n        ? findNotableNode(node.children[0], indent)\n        : node;\n    }\n    function indentation(indent) {\n      return \"  \" + \"  \".repeat(indent);\n    }\n    function added(indent) {\n      return \"+ \" + \"  \".repeat(indent);\n    }\n    function removed(indent) {\n      return \"- \" + \"  \".repeat(indent);\n    }\n    function describeFiberType(fiber) {\n      switch (fiber.tag) {\n        case 26:\n        case 27:\n        case 5:\n          return fiber.type;\n        case 16:\n          return \"Lazy\";\n        case 31:\n          return \"Activity\";\n        case 13:\n          return \"Suspense\";\n        case 19:\n          return \"SuspenseList\";\n        case 0:\n        case 15:\n          return (fiber = fiber.type), fiber.displayName || fiber.name || null;\n        case 11:\n          return (\n            (fiber = fiber.type.render), fiber.displayName || fiber.name || null\n          );\n        case 1:\n          return (fiber = fiber.type), fiber.displayName || fiber.name || null;\n        default:\n          return null;\n      }\n    }\n    function describeTextNode(content, maxLength) {\n      return needsEscaping.test(content)\n        ? ((content = JSON.stringify(content)),\n          content.length > maxLength - 2\n            ? 8 > maxLength\n              ? '{\"...\"}'\n              : \"{\" + content.slice(0, maxLength - 7) + '...\"}'\n            : \"{\" + content + \"}\")\n        : content.length > maxLength\n          ? 5 > maxLength\n            ? '{\"...\"}'\n            : content.slice(0, maxLength - 3) + \"...\"\n          : content;\n    }\n    function describeTextDiff(clientText, serverProps, indent) {\n      var maxLength = 120 - 2 * indent;\n      if (null === serverProps)\n        return added(indent) + describeTextNode(clientText, maxLength) + \"\\n\";\n      if (\"string\" === typeof serverProps) {\n        for (\n          var firstDiff = 0;\n          firstDiff < serverProps.length &&\n          firstDiff < clientText.length &&\n          serverProps.charCodeAt(firstDiff) ===\n            clientText.charCodeAt(firstDiff);\n          firstDiff++\n        );\n        firstDiff > maxLength - 8 &&\n          10 < firstDiff &&\n          ((clientText = \"...\" + clientText.slice(firstDiff - 8)),\n          (serverProps = \"...\" + serverProps.slice(firstDiff - 8)));\n        return (\n          added(indent) +\n          describeTextNode(clientText, maxLength) +\n          \"\\n\" +\n          removed(indent) +\n          describeTextNode(serverProps, maxLength) +\n          \"\\n\"\n        );\n      }\n      return (\n        indentation(indent) + describeTextNode(clientText, maxLength) + \"\\n\"\n      );\n    }\n    function objectName(object) {\n      return Object.prototype.toString\n        .call(object)\n        .replace(/^\\[object (.*)\\]$/, function (m, p0) {\n          return p0;\n        });\n    }\n    function describeValue(value, maxLength) {\n      switch (typeof value) {\n        case \"string\":\n          return (\n            (value = JSON.stringify(value)),\n            value.length > maxLength\n              ? 5 > maxLength\n                ? '\"...\"'\n                : value.slice(0, maxLength - 4) + '...\"'\n              : value\n          );\n        case \"object\":\n          if (null === value) return \"null\";\n          if (isArrayImpl(value)) return \"[...]\";\n          if (value.$$typeof === REACT_ELEMENT_TYPE)\n            return (maxLength = getComponentNameFromType(value.type))\n              ? \"<\" + maxLength + \">\"\n              : \"<...>\";\n          var name = objectName(value);\n          if (\"Object\" === name) {\n            name = \"\";\n            maxLength -= 2;\n            for (var propName in value)\n              if (value.hasOwnProperty(propName)) {\n                var jsonPropName = JSON.stringify(propName);\n                jsonPropName !== '\"' + propName + '\"' &&\n                  (propName = jsonPropName);\n                maxLength -= propName.length - 2;\n                jsonPropName = describeValue(\n                  value[propName],\n                  15 > maxLength ? maxLength : 15\n                );\n                maxLength -= jsonPropName.length;\n                if (0 > maxLength) {\n                  name += \"\" === name ? \"...\" : \", ...\";\n                  break;\n                }\n                name +=\n                  (\"\" === name ? \"\" : \",\") + propName + \":\" + jsonPropName;\n              }\n            return \"{\" + name + \"}\";\n          }\n          return name;\n        case \"function\":\n          return (maxLength = value.displayName || value.name)\n            ? \"function \" + maxLength\n            : \"function\";\n        default:\n          return String(value);\n      }\n    }\n    function describePropValue(value, maxLength) {\n      return \"string\" !== typeof value || needsEscaping.test(value)\n        ? \"{\" + describeValue(value, maxLength - 2) + \"}\"\n        : value.length > maxLength - 2\n          ? 5 > maxLength\n            ? '\"...\"'\n            : '\"' + value.slice(0, maxLength - 5) + '...\"'\n          : '\"' + value + '\"';\n    }\n    function describeExpandedElement(type, props, rowPrefix) {\n      var remainingRowLength = 120 - rowPrefix.length - type.length,\n        properties = [],\n        propName;\n      for (propName in props)\n        if (props.hasOwnProperty(propName) && \"children\" !== propName) {\n          var propValue = describePropValue(\n            props[propName],\n            120 - rowPrefix.length - propName.length - 1\n          );\n          remainingRowLength -= propName.length + propValue.length + 2;\n          properties.push(propName + \"=\" + propValue);\n        }\n      return 0 === properties.length\n        ? rowPrefix + \"<\" + type + \">\\n\"\n        : 0 < remainingRowLength\n          ? rowPrefix + \"<\" + type + \" \" + properties.join(\" \") + \">\\n\"\n          : rowPrefix +\n            \"<\" +\n            type +\n            \"\\n\" +\n            rowPrefix +\n            \"  \" +\n            properties.join(\"\\n\" + rowPrefix + \"  \") +\n            \"\\n\" +\n            rowPrefix +\n            \">\\n\";\n    }\n    function describePropertiesDiff(clientObject, serverObject, indent) {\n      var properties = \"\",\n        remainingServerProperties = assign({}, serverObject),\n        propName;\n      for (propName in clientObject)\n        if (clientObject.hasOwnProperty(propName)) {\n          delete remainingServerProperties[propName];\n          var maxLength = 120 - 2 * indent - propName.length - 2,\n            clientPropValue = describeValue(clientObject[propName], maxLength);\n          serverObject.hasOwnProperty(propName)\n            ? ((maxLength = describeValue(serverObject[propName], maxLength)),\n              (properties +=\n                added(indent) + propName + \": \" + clientPropValue + \"\\n\"),\n              (properties +=\n                removed(indent) + propName + \": \" + maxLength + \"\\n\"))\n            : (properties +=\n                added(indent) + propName + \": \" + clientPropValue + \"\\n\");\n        }\n      for (var _propName in remainingServerProperties)\n        remainingServerProperties.hasOwnProperty(_propName) &&\n          ((clientObject = describeValue(\n            remainingServerProperties[_propName],\n            120 - 2 * indent - _propName.length - 2\n          )),\n          (properties +=\n            removed(indent) + _propName + \": \" + clientObject + \"\\n\"));\n      return properties;\n    }\n    function describeElementDiff(type, clientProps, serverProps, indent) {\n      var content = \"\",\n        serverPropNames = new Map();\n      for (propName$jscomp$0 in serverProps)\n        serverProps.hasOwnProperty(propName$jscomp$0) &&\n          serverPropNames.set(\n            propName$jscomp$0.toLowerCase(),\n            propName$jscomp$0\n          );\n      if (1 === serverPropNames.size && serverPropNames.has(\"children\"))\n        content += describeExpandedElement(\n          type,\n          clientProps,\n          indentation(indent)\n        );\n      else {\n        for (var _propName2 in clientProps)\n          if (\n            clientProps.hasOwnProperty(_propName2) &&\n            \"children\" !== _propName2\n          ) {\n            var maxLength$jscomp$0 =\n                120 - 2 * (indent + 1) - _propName2.length - 1,\n              serverPropName = serverPropNames.get(_propName2.toLowerCase());\n            if (void 0 !== serverPropName) {\n              serverPropNames.delete(_propName2.toLowerCase());\n              var propName$jscomp$0 = clientProps[_propName2];\n              serverPropName = serverProps[serverPropName];\n              var clientPropValue = describePropValue(\n                propName$jscomp$0,\n                maxLength$jscomp$0\n              );\n              maxLength$jscomp$0 = describePropValue(\n                serverPropName,\n                maxLength$jscomp$0\n              );\n              \"object\" === typeof propName$jscomp$0 &&\n              null !== propName$jscomp$0 &&\n              \"object\" === typeof serverPropName &&\n              null !== serverPropName &&\n              \"Object\" === objectName(propName$jscomp$0) &&\n              \"Object\" === objectName(serverPropName) &&\n              (2 < Object.keys(propName$jscomp$0).length ||\n                2 < Object.keys(serverPropName).length ||\n                -1 < clientPropValue.indexOf(\"...\") ||\n                -1 < maxLength$jscomp$0.indexOf(\"...\"))\n                ? (content +=\n                    indentation(indent + 1) +\n                    _propName2 +\n                    \"={{\\n\" +\n                    describePropertiesDiff(\n                      propName$jscomp$0,\n                      serverPropName,\n                      indent + 2\n                    ) +\n                    indentation(indent + 1) +\n                    \"}}\\n\")\n                : ((content +=\n                    added(indent + 1) +\n                    _propName2 +\n                    \"=\" +\n                    clientPropValue +\n                    \"\\n\"),\n                  (content +=\n                    removed(indent + 1) +\n                    _propName2 +\n                    \"=\" +\n                    maxLength$jscomp$0 +\n                    \"\\n\"));\n            } else\n              content +=\n                indentation(indent + 1) +\n                _propName2 +\n                \"=\" +\n                describePropValue(clientProps[_propName2], maxLength$jscomp$0) +\n                \"\\n\";\n          }\n        serverPropNames.forEach(function (propName) {\n          if (\"children\" !== propName) {\n            var maxLength = 120 - 2 * (indent + 1) - propName.length - 1;\n            content +=\n              removed(indent + 1) +\n              propName +\n              \"=\" +\n              describePropValue(serverProps[propName], maxLength) +\n              \"\\n\";\n          }\n        });\n        content =\n          \"\" === content\n            ? indentation(indent) + \"<\" + type + \">\\n\"\n            : indentation(indent) +\n              \"<\" +\n              type +\n              \"\\n\" +\n              content +\n              indentation(indent) +\n              \">\\n\";\n      }\n      type = serverProps.children;\n      clientProps = clientProps.children;\n      if (\n        \"string\" === typeof type ||\n        \"number\" === typeof type ||\n        \"bigint\" === typeof type\n      ) {\n        serverPropNames = \"\";\n        if (\n          \"string\" === typeof clientProps ||\n          \"number\" === typeof clientProps ||\n          \"bigint\" === typeof clientProps\n        )\n          serverPropNames = \"\" + clientProps;\n        content += describeTextDiff(serverPropNames, \"\" + type, indent + 1);\n      } else if (\n        \"string\" === typeof clientProps ||\n        \"number\" === typeof clientProps ||\n        \"bigint\" === typeof clientProps\n      )\n        content =\n          null == type\n            ? content + describeTextDiff(\"\" + clientProps, null, indent + 1)\n            : content + describeTextDiff(\"\" + clientProps, void 0, indent + 1);\n      return content;\n    }\n    function describeSiblingFiber(fiber, indent) {\n      var type = describeFiberType(fiber);\n      if (null === type) {\n        type = \"\";\n        for (fiber = fiber.child; fiber; )\n          (type += describeSiblingFiber(fiber, indent)),\n            (fiber = fiber.sibling);\n        return type;\n      }\n      return indentation(indent) + \"<\" + type + \">\\n\";\n    }\n    function describeNode(node, indent) {\n      var skipToNode = findNotableNode(node, indent);\n      if (\n        skipToNode !== node &&\n        (1 !== node.children.length || node.children[0] !== skipToNode)\n      )\n        return (\n          indentation(indent) + \"...\\n\" + describeNode(skipToNode, indent + 1)\n        );\n      skipToNode = \"\";\n      var debugInfo = node.fiber._debugInfo;\n      if (debugInfo)\n        for (var i = 0; i < debugInfo.length; i++) {\n          var serverComponentName = debugInfo[i].name;\n          \"string\" === typeof serverComponentName &&\n            ((skipToNode +=\n              indentation(indent) + \"<\" + serverComponentName + \">\\n\"),\n            indent++);\n        }\n      debugInfo = \"\";\n      i = node.fiber.pendingProps;\n      if (6 === node.fiber.tag)\n        (debugInfo = describeTextDiff(i, node.serverProps, indent)), indent++;\n      else if (\n        ((serverComponentName = describeFiberType(node.fiber)),\n        null !== serverComponentName)\n      )\n        if (void 0 === node.serverProps) {\n          debugInfo = indent;\n          var maxLength = 120 - 2 * debugInfo - serverComponentName.length - 2,\n            content = \"\";\n          for (propName in i)\n            if (i.hasOwnProperty(propName) && \"children\" !== propName) {\n              var propValue = describePropValue(i[propName], 15);\n              maxLength -= propName.length + propValue.length + 2;\n              if (0 > maxLength) {\n                content += \" ...\";\n                break;\n              }\n              content += \" \" + propName + \"=\" + propValue;\n            }\n          debugInfo =\n            indentation(debugInfo) +\n            \"<\" +\n            serverComponentName +\n            content +\n            \">\\n\";\n          indent++;\n        } else\n          null === node.serverProps\n            ? ((debugInfo = describeExpandedElement(\n                serverComponentName,\n                i,\n                added(indent)\n              )),\n              indent++)\n            : \"string\" === typeof node.serverProps\n              ? console.error(\n                  \"Should not have matched a non HostText fiber to a Text node. This is a bug in React.\"\n                )\n              : ((debugInfo = describeElementDiff(\n                  serverComponentName,\n                  i,\n                  node.serverProps,\n                  indent\n                )),\n                indent++);\n      var propName = \"\";\n      i = node.fiber.child;\n      for (\n        serverComponentName = 0;\n        i && serverComponentName < node.children.length;\n\n      )\n        (maxLength = node.children[serverComponentName]),\n          maxLength.fiber === i\n            ? ((propName += describeNode(maxLength, indent)),\n              serverComponentName++)\n            : (propName += describeSiblingFiber(i, indent)),\n          (i = i.sibling);\n      i &&\n        0 < node.children.length &&\n        (propName += indentation(indent) + \"...\\n\");\n      i = node.serverTail;\n      null === node.serverProps && indent--;\n      for (node = 0; node < i.length; node++)\n        (serverComponentName = i[node]),\n          (propName =\n            \"string\" === typeof serverComponentName\n              ? propName +\n                (removed(indent) +\n                  describeTextNode(serverComponentName, 120 - 2 * indent) +\n                  \"\\n\")\n              : propName +\n                describeExpandedElement(\n                  serverComponentName.type,\n                  serverComponentName.props,\n                  removed(indent)\n                ));\n      return skipToNode + debugInfo + propName;\n    }\n    function describeDiff(rootNode) {\n      try {\n        return \"\\n\\n\" + describeNode(rootNode, 0);\n      } catch (x) {\n        return \"\";\n      }\n    }\n    function describeAncestors(ancestor, child, props) {\n      for (var fiber = child, node = null, distanceFromLeaf = 0; fiber; )\n        fiber === ancestor && (distanceFromLeaf = 0),\n          (node = {\n            fiber: fiber,\n            children: null !== node ? [node] : [],\n            serverProps:\n              fiber === child ? props : fiber === ancestor ? null : void 0,\n            serverTail: [],\n            distanceFromLeaf: distanceFromLeaf\n          }),\n          distanceFromLeaf++,\n          (fiber = fiber.return);\n      return null !== node ? describeDiff(node).replaceAll(/^[+-]/gm, \">\") : \"\";\n    }\n    function updatedAncestorInfoDev(oldInfo, tag) {\n      var ancestorInfo = assign({}, oldInfo || emptyAncestorInfoDev),\n        info = { tag: tag };\n      -1 !== inScopeTags.indexOf(tag) &&\n        ((ancestorInfo.aTagInScope = null),\n        (ancestorInfo.buttonTagInScope = null),\n        (ancestorInfo.nobrTagInScope = null));\n      -1 !== buttonScopeTags.indexOf(tag) &&\n        (ancestorInfo.pTagInButtonScope = null);\n      -1 !== specialTags.indexOf(tag) &&\n        \"address\" !== tag &&\n        \"div\" !== tag &&\n        \"p\" !== tag &&\n        ((ancestorInfo.listItemTagAutoclosing = null),\n        (ancestorInfo.dlItemTagAutoclosing = null));\n      ancestorInfo.current = info;\n      \"form\" === tag && (ancestorInfo.formTag = info);\n      \"a\" === tag && (ancestorInfo.aTagInScope = info);\n      \"button\" === tag && (ancestorInfo.buttonTagInScope = info);\n      \"nobr\" === tag && (ancestorInfo.nobrTagInScope = info);\n      \"p\" === tag && (ancestorInfo.pTagInButtonScope = info);\n      \"li\" === tag && (ancestorInfo.listItemTagAutoclosing = info);\n      if (\"dd\" === tag || \"dt\" === tag)\n        ancestorInfo.dlItemTagAutoclosing = info;\n      \"#document\" === tag || \"html\" === tag\n        ? (ancestorInfo.containerTagInScope = null)\n        : ancestorInfo.containerTagInScope ||\n          (ancestorInfo.containerTagInScope = info);\n      null !== oldInfo ||\n      (\"#document\" !== tag && \"html\" !== tag && \"body\" !== tag)\n        ? !0 === ancestorInfo.implicitRootScope &&\n          (ancestorInfo.implicitRootScope = !1)\n        : (ancestorInfo.implicitRootScope = !0);\n      return ancestorInfo;\n    }\n    function isTagValidWithParent(tag, parentTag, implicitRootScope) {\n      switch (parentTag) {\n        case \"select\":\n          return (\n            \"hr\" === tag ||\n            \"option\" === tag ||\n            \"optgroup\" === tag ||\n            \"script\" === tag ||\n            \"template\" === tag ||\n            \"#text\" === tag\n          );\n        case \"optgroup\":\n          return \"option\" === tag || \"#text\" === tag;\n        case \"option\":\n          return \"#text\" === tag;\n        case \"tr\":\n          return (\n            \"th\" === tag ||\n            \"td\" === tag ||\n            \"style\" === tag ||\n            \"script\" === tag ||\n            \"template\" === tag\n          );\n        case \"tbody\":\n        case \"thead\":\n        case \"tfoot\":\n          return (\n            \"tr\" === tag ||\n            \"style\" === tag ||\n            \"script\" === tag ||\n            \"template\" === tag\n          );\n        case \"colgroup\":\n          return \"col\" === tag || \"template\" === tag;\n        case \"table\":\n          return (\n            \"caption\" === tag ||\n            \"colgroup\" === tag ||\n            \"tbody\" === tag ||\n            \"tfoot\" === tag ||\n            \"thead\" === tag ||\n            \"style\" === tag ||\n            \"script\" === tag ||\n            \"template\" === tag\n          );\n        case \"head\":\n          return (\n            \"base\" === tag ||\n            \"basefont\" === tag ||\n            \"bgsound\" === tag ||\n            \"link\" === tag ||\n            \"meta\" === tag ||\n            \"title\" === tag ||\n            \"noscript\" === tag ||\n            \"noframes\" === tag ||\n            \"style\" === tag ||\n            \"script\" === tag ||\n            \"template\" === tag\n          );\n        case \"html\":\n          if (implicitRootScope) break;\n          return \"head\" === tag || \"body\" === tag || \"frameset\" === tag;\n        case \"frameset\":\n          return \"frame\" === tag;\n        case \"#document\":\n          if (!implicitRootScope) return \"html\" === tag;\n      }\n      switch (tag) {\n        case \"h1\":\n        case \"h2\":\n        case \"h3\":\n        case \"h4\":\n        case \"h5\":\n        case \"h6\":\n          return (\n            \"h1\" !== parentTag &&\n            \"h2\" !== parentTag &&\n            \"h3\" !== parentTag &&\n            \"h4\" !== parentTag &&\n            \"h5\" !== parentTag &&\n            \"h6\" !== parentTag\n          );\n        case \"rp\":\n        case \"rt\":\n          return -1 === impliedEndTags.indexOf(parentTag);\n        case \"caption\":\n        case \"col\":\n        case \"colgroup\":\n        case \"frameset\":\n        case \"frame\":\n        case \"tbody\":\n        case \"td\":\n        case \"tfoot\":\n        case \"th\":\n        case \"thead\":\n        case \"tr\":\n          return null == parentTag;\n        case \"head\":\n          return implicitRootScope || null === parentTag;\n        case \"html\":\n          return (\n            (implicitRootScope && \"#document\" === parentTag) ||\n            null === parentTag\n          );\n        case \"body\":\n          return (\n            (implicitRootScope &&\n              (\"#document\" === parentTag || \"html\" === parentTag)) ||\n            null === parentTag\n          );\n      }\n      return !0;\n    }\n    function findInvalidAncestorForTag(tag, ancestorInfo) {\n      switch (tag) {\n        case \"address\":\n        case \"article\":\n        case \"aside\":\n        case \"blockquote\":\n        case \"center\":\n        case \"details\":\n        case \"dialog\":\n        case \"dir\":\n        case \"div\":\n        case \"dl\":\n        case \"fieldset\":\n        case \"figcaption\":\n        case \"figure\":\n        case \"footer\":\n        case \"header\":\n        case \"hgroup\":\n        case \"main\":\n        case \"menu\":\n        case \"nav\":\n        case \"ol\":\n        case \"p\":\n        case \"section\":\n        case \"summary\":\n        case \"ul\":\n        case \"pre\":\n        case \"listing\":\n        case \"table\":\n        case \"hr\":\n        case \"xmp\":\n        case \"h1\":\n        case \"h2\":\n        case \"h3\":\n        case \"h4\":\n        case \"h5\":\n        case \"h6\":\n          return ancestorInfo.pTagInButtonScope;\n        case \"form\":\n          return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n        case \"li\":\n          return ancestorInfo.listItemTagAutoclosing;\n        case \"dd\":\n        case \"dt\":\n          return ancestorInfo.dlItemTagAutoclosing;\n        case \"button\":\n          return ancestorInfo.buttonTagInScope;\n        case \"a\":\n          return ancestorInfo.aTagInScope;\n        case \"nobr\":\n          return ancestorInfo.nobrTagInScope;\n      }\n      return null;\n    }\n    function findAncestor(parent, tagName) {\n      for (; parent; ) {\n        switch (parent.tag) {\n          case 5:\n          case 26:\n          case 27:\n            if (parent.type === tagName) return parent;\n        }\n        parent = parent.return;\n      }\n      return null;\n    }\n    function validateDOMNesting(childTag, ancestorInfo) {\n      ancestorInfo = ancestorInfo || emptyAncestorInfoDev;\n      var parentInfo = ancestorInfo.current;\n      ancestorInfo = (parentInfo = isTagValidWithParent(\n        childTag,\n        parentInfo && parentInfo.tag,\n        ancestorInfo.implicitRootScope\n      )\n        ? null\n        : parentInfo)\n        ? null\n        : findInvalidAncestorForTag(childTag, ancestorInfo);\n      ancestorInfo = parentInfo || ancestorInfo;\n      if (!ancestorInfo) return !0;\n      var ancestorTag = ancestorInfo.tag;\n      ancestorInfo = String(!!parentInfo) + \"|\" + childTag + \"|\" + ancestorTag;\n      if (didWarn[ancestorInfo]) return !1;\n      didWarn[ancestorInfo] = !0;\n      var ancestor = (ancestorInfo = current)\n          ? findAncestor(ancestorInfo.return, ancestorTag)\n          : null,\n        ancestorDescription =\n          null !== ancestorInfo && null !== ancestor\n            ? describeAncestors(ancestor, ancestorInfo, null)\n            : \"\",\n        tagDisplayName = \"<\" + childTag + \">\";\n      parentInfo\n        ? ((parentInfo = \"\"),\n          \"table\" === ancestorTag &&\n            \"tr\" === childTag &&\n            (parentInfo +=\n              \" Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by the browser.\"),\n          console.error(\n            \"In HTML, %s cannot be a child of <%s>.%s\\nThis will cause a hydration error.%s\",\n            tagDisplayName,\n            ancestorTag,\n            parentInfo,\n            ancestorDescription\n          ))\n        : console.error(\n            \"In HTML, %s cannot be a descendant of <%s>.\\nThis will cause a hydration error.%s\",\n            tagDisplayName,\n            ancestorTag,\n            ancestorDescription\n          );\n      ancestorInfo &&\n        ((childTag = ancestorInfo.return),\n        null === ancestor ||\n          null === childTag ||\n          (ancestor === childTag &&\n            childTag._debugOwner === ancestorInfo._debugOwner) ||\n          runWithFiberInDEV(ancestor, function () {\n            console.error(\n              \"<%s> cannot contain a nested %s.\\nSee this log for the ancestor stack trace.\",\n              ancestorTag,\n              tagDisplayName\n            );\n          }));\n      return !1;\n    }\n    function validateTextNesting(childText, parentTag, implicitRootScope) {\n      if (implicitRootScope || isTagValidWithParent(\"#text\", parentTag, !1))\n        return !0;\n      implicitRootScope = \"#text|\" + parentTag;\n      if (didWarn[implicitRootScope]) return !1;\n      didWarn[implicitRootScope] = !0;\n      var ancestor = (implicitRootScope = current)\n        ? findAncestor(implicitRootScope, parentTag)\n        : null;\n      implicitRootScope =\n        null !== implicitRootScope && null !== ancestor\n          ? describeAncestors(\n              ancestor,\n              implicitRootScope,\n              6 !== implicitRootScope.tag ? { children: null } : null\n            )\n          : \"\";\n      /\\S/.test(childText)\n        ? console.error(\n            \"In HTML, text nodes cannot be a child of <%s>.\\nThis will cause a hydration error.%s\",\n            parentTag,\n            implicitRootScope\n          )\n        : console.error(\n            \"In HTML, whitespace text nodes cannot be a child of <%s>. Make sure you don't have any extra whitespace between tags on each line of your source code.\\nThis will cause a hydration error.%s\",\n            parentTag,\n            implicitRootScope\n          );\n      return !1;\n    }\n    function setTextContent(node, text) {\n      if (text) {\n        var firstChild = node.firstChild;\n        if (\n          firstChild &&\n          firstChild === node.lastChild &&\n          3 === firstChild.nodeType\n        ) {\n          firstChild.nodeValue = text;\n          return;\n        }\n      }\n      node.textContent = text;\n    }\n    function camelize(string) {\n      return string.replace(hyphenPattern, function (_, character) {\n        return character.toUpperCase();\n      });\n    }\n    function setValueForStyle(style, styleName, value) {\n      var isCustomProperty = 0 === styleName.indexOf(\"--\");\n      isCustomProperty ||\n        (-1 < styleName.indexOf(\"-\")\n          ? (warnedStyleNames.hasOwnProperty(styleName) &&\n              warnedStyleNames[styleName]) ||\n            ((warnedStyleNames[styleName] = !0),\n            console.error(\n              \"Unsupported style property %s. Did you mean %s?\",\n              styleName,\n              camelize(styleName.replace(msPattern, \"ms-\"))\n            ))\n          : badVendoredStyleNamePattern.test(styleName)\n            ? (warnedStyleNames.hasOwnProperty(styleName) &&\n                warnedStyleNames[styleName]) ||\n              ((warnedStyleNames[styleName] = !0),\n              console.error(\n                \"Unsupported vendor-prefixed style property %s. Did you mean %s?\",\n                styleName,\n                styleName.charAt(0).toUpperCase() + styleName.slice(1)\n              ))\n            : !badStyleValueWithSemicolonPattern.test(value) ||\n              (warnedStyleValues.hasOwnProperty(value) &&\n                warnedStyleValues[value]) ||\n              ((warnedStyleValues[value] = !0),\n              console.error(\n                'Style property values shouldn\\'t contain a semicolon. Try \"%s: %s\" instead.',\n                styleName,\n                value.replace(badStyleValueWithSemicolonPattern, \"\")\n              )),\n        \"number\" === typeof value &&\n          (isNaN(value)\n            ? warnedForNaNValue ||\n              ((warnedForNaNValue = !0),\n              console.error(\n                \"`NaN` is an invalid value for the `%s` css style property.\",\n                styleName\n              ))\n            : isFinite(value) ||\n              warnedForInfinityValue ||\n              ((warnedForInfinityValue = !0),\n              console.error(\n                \"`Infinity` is an invalid value for the `%s` css style property.\",\n                styleName\n              ))));\n      null == value || \"boolean\" === typeof value || \"\" === value\n        ? isCustomProperty\n          ? style.setProperty(styleName, \"\")\n          : \"float\" === styleName\n            ? (style.cssFloat = \"\")\n            : (style[styleName] = \"\")\n        : isCustomProperty\n          ? style.setProperty(styleName, value)\n          : \"number\" !== typeof value ||\n              0 === value ||\n              unitlessNumbers.has(styleName)\n            ? \"float\" === styleName\n              ? (style.cssFloat = value)\n              : (checkCSSPropertyStringCoercion(value, styleName),\n                (style[styleName] = (\"\" + value).trim()))\n            : (style[styleName] = value + \"px\");\n    }\n    function setValueForStyles(node, styles, prevStyles) {\n      if (null != styles && \"object\" !== typeof styles)\n        throw Error(\n          \"The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.\"\n        );\n      styles && Object.freeze(styles);\n      node = node.style;\n      if (null != prevStyles) {\n        if (styles) {\n          var expandedUpdates = {};\n          if (prevStyles)\n            for (var key in prevStyles)\n              if (prevStyles.hasOwnProperty(key) && !styles.hasOwnProperty(key))\n                for (\n                  var longhands = shorthandToLonghand[key] || [key], i = 0;\n                  i < longhands.length;\n                  i++\n                )\n                  expandedUpdates[longhands[i]] = key;\n          for (var _key in styles)\n            if (\n              styles.hasOwnProperty(_key) &&\n              (!prevStyles || prevStyles[_key] !== styles[_key])\n            )\n              for (\n                key = shorthandToLonghand[_key] || [_key], longhands = 0;\n                longhands < key.length;\n                longhands++\n              )\n                expandedUpdates[key[longhands]] = _key;\n          _key = {};\n          for (var key$jscomp$0 in styles)\n            for (\n              key = shorthandToLonghand[key$jscomp$0] || [key$jscomp$0],\n                longhands = 0;\n              longhands < key.length;\n              longhands++\n            )\n              _key[key[longhands]] = key$jscomp$0;\n          key$jscomp$0 = {};\n          for (var _key2 in expandedUpdates)\n            if (\n              ((key = expandedUpdates[_key2]),\n              (longhands = _key[_key2]) &&\n                key !== longhands &&\n                ((i = key + \",\" + longhands), !key$jscomp$0[i]))\n            ) {\n              key$jscomp$0[i] = !0;\n              i = console;\n              var value = styles[key];\n              i.error.call(\n                i,\n                \"%s a style property during rerender (%s) when a conflicting property is set (%s) can lead to styling bugs. To avoid this, don't mix shorthand and non-shorthand properties for the same value; instead, replace the shorthand with separate values.\",\n                null == value || \"boolean\" === typeof value || \"\" === value\n                  ? \"Removing\"\n                  : \"Updating\",\n                key,\n                longhands\n              );\n            }\n        }\n        for (var styleName in prevStyles)\n          !prevStyles.hasOwnProperty(styleName) ||\n            (null != styles && styles.hasOwnProperty(styleName)) ||\n            (0 === styleName.indexOf(\"--\")\n              ? node.setProperty(styleName, \"\")\n              : \"float\" === styleName\n                ? (node.cssFloat = \"\")\n                : (node[styleName] = \"\"));\n        for (var _styleName in styles)\n          (_key2 = styles[_styleName]),\n            styles.hasOwnProperty(_styleName) &&\n              prevStyles[_styleName] !== _key2 &&\n              setValueForStyle(node, _styleName, _key2);\n      } else\n        for (expandedUpdates in styles)\n          styles.hasOwnProperty(expandedUpdates) &&\n            setValueForStyle(node, expandedUpdates, styles[expandedUpdates]);\n    }\n    function isCustomElement(tagName) {\n      if (-1 === tagName.indexOf(\"-\")) return !1;\n      switch (tagName) {\n        case \"annotation-xml\":\n        case \"color-profile\":\n        case \"font-face\":\n        case \"font-face-src\":\n        case \"font-face-uri\":\n        case \"font-face-format\":\n        case \"font-face-name\":\n        case \"missing-glyph\":\n          return !1;\n        default:\n          return !0;\n      }\n    }\n    function getAttributeAlias(name) {\n      return aliases.get(name) || name;\n    }\n    function validateProperty$1(tagName, name) {\n      if (\n        hasOwnProperty.call(warnedProperties$1, name) &&\n        warnedProperties$1[name]\n      )\n        return !0;\n      if (rARIACamel$1.test(name)) {\n        tagName = \"aria-\" + name.slice(4).toLowerCase();\n        tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;\n        if (null == tagName)\n          return (\n            console.error(\n              \"Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.\",\n              name\n            ),\n            (warnedProperties$1[name] = !0)\n          );\n        if (name !== tagName)\n          return (\n            console.error(\n              \"Invalid ARIA attribute `%s`. Did you mean `%s`?\",\n              name,\n              tagName\n            ),\n            (warnedProperties$1[name] = !0)\n          );\n      }\n      if (rARIA$1.test(name)) {\n        tagName = name.toLowerCase();\n        tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null;\n        if (null == tagName) return (warnedProperties$1[name] = !0), !1;\n        name !== tagName &&\n          (console.error(\n            \"Unknown ARIA attribute `%s`. Did you mean `%s`?\",\n            name,\n            tagName\n          ),\n          (warnedProperties$1[name] = !0));\n      }\n      return !0;\n    }\n    function validateProperties$2(type, props) {\n      var invalidProps = [],\n        key;\n      for (key in props)\n        validateProperty$1(type, key) || invalidProps.push(key);\n      props = invalidProps\n        .map(function (prop) {\n          return \"`\" + prop + \"`\";\n        })\n        .join(\", \");\n      1 === invalidProps.length\n        ? console.error(\n            \"Invalid aria prop %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props\",\n            props,\n            type\n          )\n        : 1 < invalidProps.length &&\n          console.error(\n            \"Invalid aria props %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props\",\n            props,\n            type\n          );\n    }\n    function validateProperty(tagName, name, value, eventRegistry) {\n      if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name])\n        return !0;\n      var lowerCasedName = name.toLowerCase();\n      if (\"onfocusin\" === lowerCasedName || \"onfocusout\" === lowerCasedName)\n        return (\n          console.error(\n            \"React uses onFocus and onBlur instead of onFocusIn and onFocusOut. All React events are normalized to bubble, so onFocusIn and onFocusOut are not needed/supported by React.\"\n          ),\n          (warnedProperties[name] = !0)\n        );\n      if (\n        \"function\" === typeof value &&\n        ((\"form\" === tagName && \"action\" === name) ||\n          (\"input\" === tagName && \"formAction\" === name) ||\n          (\"button\" === tagName && \"formAction\" === name))\n      )\n        return !0;\n      if (null != eventRegistry) {\n        tagName = eventRegistry.possibleRegistrationNames;\n        if (eventRegistry.registrationNameDependencies.hasOwnProperty(name))\n          return !0;\n        eventRegistry = tagName.hasOwnProperty(lowerCasedName)\n          ? tagName[lowerCasedName]\n          : null;\n        if (null != eventRegistry)\n          return (\n            console.error(\n              \"Invalid event handler property `%s`. Did you mean `%s`?\",\n              name,\n              eventRegistry\n            ),\n            (warnedProperties[name] = !0)\n          );\n        if (EVENT_NAME_REGEX.test(name))\n          return (\n            console.error(\n              \"Unknown event handler property `%s`. It will be ignored.\",\n              name\n            ),\n            (warnedProperties[name] = !0)\n          );\n      } else if (EVENT_NAME_REGEX.test(name))\n        return (\n          INVALID_EVENT_NAME_REGEX.test(name) &&\n            console.error(\n              \"Invalid event handler property `%s`. React events use the camelCase naming convention, for example `onClick`.\",\n              name\n            ),\n          (warnedProperties[name] = !0)\n        );\n      if (rARIA.test(name) || rARIACamel.test(name)) return !0;\n      if (\"innerhtml\" === lowerCasedName)\n        return (\n          console.error(\n            \"Directly setting property `innerHTML` is not permitted. For more information, lookup documentation on `dangerouslySetInnerHTML`.\"\n          ),\n          (warnedProperties[name] = !0)\n        );\n      if (\"aria\" === lowerCasedName)\n        return (\n          console.error(\n            \"The `aria` attribute is reserved for future use in React. Pass individual `aria-` attributes instead.\"\n          ),\n          (warnedProperties[name] = !0)\n        );\n      if (\n        \"is\" === lowerCasedName &&\n        null !== value &&\n        void 0 !== value &&\n        \"string\" !== typeof value\n      )\n        return (\n          console.error(\n            \"Received a `%s` for a string attribute `is`. If this is expected, cast the value to a string.\",\n            typeof value\n          ),\n          (warnedProperties[name] = !0)\n        );\n      if (\"number\" === typeof value && isNaN(value))\n        return (\n          console.error(\n            \"Received NaN for the `%s` attribute. If this is expected, cast the value to a string.\",\n            name\n          ),\n          (warnedProperties[name] = !0)\n        );\n      if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n        if (\n          ((lowerCasedName = possibleStandardNames[lowerCasedName]),\n          lowerCasedName !== name)\n        )\n          return (\n            console.error(\n              \"Invalid DOM property `%s`. Did you mean `%s`?\",\n              name,\n              lowerCasedName\n            ),\n            (warnedProperties[name] = !0)\n          );\n      } else if (name !== lowerCasedName)\n        return (\n          console.error(\n            \"React does not recognize the `%s` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `%s` instead. If you accidentally passed it from a parent component, remove it from the DOM element.\",\n            name,\n            lowerCasedName\n          ),\n          (warnedProperties[name] = !0)\n        );\n      switch (name) {\n        case \"dangerouslySetInnerHTML\":\n        case \"children\":\n        case \"style\":\n        case \"suppressContentEditableWarning\":\n        case \"suppressHydrationWarning\":\n        case \"defaultValue\":\n        case \"defaultChecked\":\n        case \"innerHTML\":\n        case \"ref\":\n          return !0;\n        case \"innerText\":\n        case \"textContent\":\n          return !0;\n      }\n      switch (typeof value) {\n        case \"boolean\":\n          switch (name) {\n            case \"autoFocus\":\n            case \"checked\":\n            case \"multiple\":\n            case \"muted\":\n            case \"selected\":\n            case \"contentEditable\":\n            case \"spellCheck\":\n            case \"draggable\":\n            case \"value\":\n            case \"autoReverse\":\n            case \"externalResourcesRequired\":\n            case \"focusable\":\n            case \"preserveAlpha\":\n            case \"allowFullScreen\":\n            case \"async\":\n            case \"autoPlay\":\n            case \"controls\":\n            case \"default\":\n            case \"defer\":\n            case \"disabled\":\n            case \"disablePictureInPicture\":\n            case \"disableRemotePlayback\":\n            case \"formNoValidate\":\n            case \"hidden\":\n            case \"loop\":\n            case \"noModule\":\n            case \"noValidate\":\n            case \"open\":\n            case \"playsInline\":\n            case \"readOnly\":\n            case \"required\":\n            case \"reversed\":\n            case \"scoped\":\n            case \"seamless\":\n            case \"itemScope\":\n            case \"capture\":\n            case \"download\":\n            case \"inert\":\n              return !0;\n            default:\n              lowerCasedName = name.toLowerCase().slice(0, 5);\n              if (\"data-\" === lowerCasedName || \"aria-\" === lowerCasedName)\n                return !0;\n              value\n                ? console.error(\n                    'Received `%s` for a non-boolean attribute `%s`.\\n\\nIf you want to write it to the DOM, pass a string instead: %s=\"%s\" or %s={value.toString()}.',\n                    value,\n                    name,\n                    name,\n                    value,\n                    name\n                  )\n                : console.error(\n                    'Received `%s` for a non-boolean attribute `%s`.\\n\\nIf you want to write it to the DOM, pass a string instead: %s=\"%s\" or %s={value.toString()}.\\n\\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.',\n                    value,\n                    name,\n                    name,\n                    value,\n                    name,\n                    name,\n                    name\n                  );\n              return (warnedProperties[name] = !0);\n          }\n        case \"function\":\n        case \"symbol\":\n          return (warnedProperties[name] = !0), !1;\n        case \"string\":\n          if (\"false\" === value || \"true\" === value) {\n            switch (name) {\n              case \"checked\":\n              case \"selected\":\n              case \"multiple\":\n              case \"muted\":\n              case \"allowFullScreen\":\n              case \"async\":\n              case \"autoPlay\":\n              case \"controls\":\n              case \"default\":\n              case \"defer\":\n              case \"disabled\":\n              case \"disablePictureInPicture\":\n              case \"disableRemotePlayback\":\n              case \"formNoValidate\":\n              case \"hidden\":\n              case \"loop\":\n              case \"noModule\":\n              case \"noValidate\":\n              case \"open\":\n              case \"playsInline\":\n              case \"readOnly\":\n              case \"required\":\n              case \"reversed\":\n              case \"scoped\":\n              case \"seamless\":\n              case \"itemScope\":\n              case \"inert\":\n                break;\n              default:\n                return !0;\n            }\n            console.error(\n              \"Received the string `%s` for the boolean attribute `%s`. %s Did you mean %s={%s}?\",\n              value,\n              name,\n              \"false\" === value\n                ? \"The browser will interpret it as a truthy value.\"\n                : 'Although this works, it will not work as expected if you pass the string \"false\".',\n              name,\n              value\n            );\n            warnedProperties[name] = !0;\n          }\n      }\n      return !0;\n    }\n    function warnUnknownProperties(type, props, eventRegistry) {\n      var unknownProps = [],\n        key;\n      for (key in props)\n        validateProperty(type, key, props[key], eventRegistry) ||\n          unknownProps.push(key);\n      props = unknownProps\n        .map(function (prop) {\n          return \"`\" + prop + \"`\";\n        })\n        .join(\", \");\n      1 === unknownProps.length\n        ? console.error(\n            \"Invalid value for prop %s on <%s> tag. Either remove it from the element, or pass a string or number value to keep it in the DOM. For details, see https://react.dev/link/attribute-behavior \",\n            props,\n            type\n          )\n        : 1 < unknownProps.length &&\n          console.error(\n            \"Invalid values for props %s on <%s> tag. Either remove them from the element, or pass a string or number value to keep them in the DOM. For details, see https://react.dev/link/attribute-behavior \",\n            props,\n            type\n          );\n    }\n    function sanitizeURL(url) {\n      return isJavaScriptProtocol.test(\"\" + url)\n        ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n        : url;\n    }\n    function noop$1() {}\n    function getEventTarget(nativeEvent) {\n      nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n      nativeEvent.correspondingUseElement &&\n        (nativeEvent = nativeEvent.correspondingUseElement);\n      return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n    }\n    function restoreStateOfTarget(target) {\n      var internalInstance = getInstanceFromNode(target);\n      if (internalInstance && (target = internalInstance.stateNode)) {\n        var props = target[internalPropsKey] || null;\n        a: switch (\n          ((target = internalInstance.stateNode), internalInstance.type)\n        ) {\n          case \"input\":\n            updateInput(\n              target,\n              props.value,\n              props.defaultValue,\n              props.defaultValue,\n              props.checked,\n              props.defaultChecked,\n              props.type,\n              props.name\n            );\n            internalInstance = props.name;\n            if (\"radio\" === props.type && null != internalInstance) {\n              for (props = target; props.parentNode; ) props = props.parentNode;\n              checkAttributeStringCoercion(internalInstance, \"name\");\n              props = props.querySelectorAll(\n                'input[name=\"' +\n                  escapeSelectorAttributeValueInsideDoubleQuotes(\n                    \"\" + internalInstance\n                  ) +\n                  '\"][type=\"radio\"]'\n              );\n              for (\n                internalInstance = 0;\n                internalInstance < props.length;\n                internalInstance++\n              ) {\n                var otherNode = props[internalInstance];\n                if (otherNode !== target && otherNode.form === target.form) {\n                  var otherProps = otherNode[internalPropsKey] || null;\n                  if (!otherProps)\n                    throw Error(\n                      \"ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.\"\n                    );\n                  updateInput(\n                    otherNode,\n                    otherProps.value,\n                    otherProps.defaultValue,\n                    otherProps.defaultValue,\n                    otherProps.checked,\n                    otherProps.defaultChecked,\n                    otherProps.type,\n                    otherProps.name\n                  );\n                }\n              }\n              for (\n                internalInstance = 0;\n                internalInstance < props.length;\n                internalInstance++\n              )\n                (otherNode = props[internalInstance]),\n                  otherNode.form === target.form &&\n                    updateValueIfChanged(otherNode);\n            }\n            break a;\n          case \"textarea\":\n            updateTextarea(target, props.value, props.defaultValue);\n            break a;\n          case \"select\":\n            (internalInstance = props.value),\n              null != internalInstance &&\n                updateOptions(target, !!props.multiple, internalInstance, !1);\n        }\n      }\n    }\n    function batchedUpdates$1(fn, a, b) {\n      if (isInsideEventHandler) return fn(a, b);\n      isInsideEventHandler = !0;\n      try {\n        var JSCompiler_inline_result = fn(a);\n        return JSCompiler_inline_result;\n      } finally {\n        if (\n          ((isInsideEventHandler = !1),\n          null !== restoreTarget || null !== restoreQueue)\n        )\n          if (\n            (flushSyncWork$1(),\n            restoreTarget &&\n              ((a = restoreTarget),\n              (fn = restoreQueue),\n              (restoreQueue = restoreTarget = null),\n              restoreStateOfTarget(a),\n              fn))\n          )\n            for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n      }\n    }\n    function getListener(inst, registrationName) {\n      var stateNode = inst.stateNode;\n      if (null === stateNode) return null;\n      var props = stateNode[internalPropsKey] || null;\n      if (null === props) return null;\n      stateNode = props[registrationName];\n      a: switch (registrationName) {\n        case \"onClick\":\n        case \"onClickCapture\":\n        case \"onDoubleClick\":\n        case \"onDoubleClickCapture\":\n        case \"onMouseDown\":\n        case \"onMouseDownCapture\":\n        case \"onMouseMove\":\n        case \"onMouseMoveCapture\":\n        case \"onMouseUp\":\n        case \"onMouseUpCapture\":\n        case \"onMouseEnter\":\n          (props = !props.disabled) ||\n            ((inst = inst.type),\n            (props = !(\n              \"button\" === inst ||\n              \"input\" === inst ||\n              \"select\" === inst ||\n              \"textarea\" === inst\n            )));\n          inst = !props;\n          break a;\n        default:\n          inst = !1;\n      }\n      if (inst) return null;\n      if (stateNode && \"function\" !== typeof stateNode)\n        throw Error(\n          \"Expected `\" +\n            registrationName +\n            \"` listener to be a function, instead got a value of `\" +\n            typeof stateNode +\n            \"` type.\"\n        );\n      return stateNode;\n    }\n    function getData() {\n      if (fallbackText) return fallbackText;\n      var start,\n        startValue = startText,\n        startLength = startValue.length,\n        end,\n        endValue = \"value\" in root ? root.value : root.textContent,\n        endLength = endValue.length;\n      for (\n        start = 0;\n        start < startLength && startValue[start] === endValue[start];\n        start++\n      );\n      var minEnd = startLength - start;\n      for (\n        end = 1;\n        end <= minEnd &&\n        startValue[startLength - end] === endValue[endLength - end];\n        end++\n      );\n      return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n    }\n    function getEventCharCode(nativeEvent) {\n      var keyCode = nativeEvent.keyCode;\n      \"charCode\" in nativeEvent\n        ? ((nativeEvent = nativeEvent.charCode),\n          0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n        : (nativeEvent = keyCode);\n      10 === nativeEvent && (nativeEvent = 13);\n      return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n    }\n    function functionThatReturnsTrue() {\n      return !0;\n    }\n    function functionThatReturnsFalse() {\n      return !1;\n    }\n    function createSyntheticEvent(Interface) {\n      function SyntheticBaseEvent(\n        reactName,\n        reactEventType,\n        targetInst,\n        nativeEvent,\n        nativeEventTarget\n      ) {\n        this._reactName = reactName;\n        this._targetInst = targetInst;\n        this.type = reactEventType;\n        this.nativeEvent = nativeEvent;\n        this.target = nativeEventTarget;\n        this.currentTarget = null;\n        for (var propName in Interface)\n          Interface.hasOwnProperty(propName) &&\n            ((reactName = Interface[propName]),\n            (this[propName] = reactName\n              ? reactName(nativeEvent)\n              : nativeEvent[propName]));\n        this.isDefaultPrevented = (\n          null != nativeEvent.defaultPrevented\n            ? nativeEvent.defaultPrevented\n            : !1 === nativeEvent.returnValue\n        )\n          ? functionThatReturnsTrue\n          : functionThatReturnsFalse;\n        this.isPropagationStopped = functionThatReturnsFalse;\n        return this;\n      }\n      assign(SyntheticBaseEvent.prototype, {\n        preventDefault: function () {\n          this.defaultPrevented = !0;\n          var event = this.nativeEvent;\n          event &&\n            (event.preventDefault\n              ? event.preventDefault()\n              : \"unknown\" !== typeof event.returnValue &&\n                (event.returnValue = !1),\n            (this.isDefaultPrevented = functionThatReturnsTrue));\n        },\n        stopPropagation: function () {\n          var event = this.nativeEvent;\n          event &&\n            (event.stopPropagation\n              ? event.stopPropagation()\n              : \"unknown\" !== typeof event.cancelBubble &&\n                (event.cancelBubble = !0),\n            (this.isPropagationStopped = functionThatReturnsTrue));\n        },\n        persist: function () {},\n        isPersistent: functionThatReturnsTrue\n      });\n      return SyntheticBaseEvent;\n    }\n    function modifierStateGetter(keyArg) {\n      var nativeEvent = this.nativeEvent;\n      return nativeEvent.getModifierState\n        ? nativeEvent.getModifierState(keyArg)\n        : (keyArg = modifierKeyToProp[keyArg])\n          ? !!nativeEvent[keyArg]\n          : !1;\n    }\n    function getEventModifierState() {\n      return modifierStateGetter;\n    }\n    function isFallbackCompositionEnd(domEventName, nativeEvent) {\n      switch (domEventName) {\n        case \"keyup\":\n          return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n        case \"keydown\":\n          return nativeEvent.keyCode !== START_KEYCODE;\n        case \"keypress\":\n        case \"mousedown\":\n        case \"focusout\":\n          return !0;\n        default:\n          return !1;\n      }\n    }\n    function getDataFromCustomEvent(nativeEvent) {\n      nativeEvent = nativeEvent.detail;\n      return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n        ? nativeEvent.data\n        : null;\n    }\n    function getNativeBeforeInputChars(domEventName, nativeEvent) {\n      switch (domEventName) {\n        case \"compositionend\":\n          return getDataFromCustomEvent(nativeEvent);\n        case \"keypress\":\n          if (nativeEvent.which !== SPACEBAR_CODE) return null;\n          hasSpaceKeypress = !0;\n          return SPACEBAR_CHAR;\n        case \"textInput\":\n          return (\n            (domEventName = nativeEvent.data),\n            domEventName === SPACEBAR_CHAR && hasSpaceKeypress\n              ? null\n              : domEventName\n          );\n        default:\n          return null;\n      }\n    }\n    function getFallbackBeforeInputChars(domEventName, nativeEvent) {\n      if (isComposing)\n        return \"compositionend\" === domEventName ||\n          (!canUseCompositionEvent &&\n            isFallbackCompositionEnd(domEventName, nativeEvent))\n          ? ((domEventName = getData()),\n            (fallbackText = startText = root = null),\n            (isComposing = !1),\n            domEventName)\n          : null;\n      switch (domEventName) {\n        case \"paste\":\n          return null;\n        case \"keypress\":\n          if (\n            !(\n              nativeEvent.ctrlKey ||\n              nativeEvent.altKey ||\n              nativeEvent.metaKey\n            ) ||\n            (nativeEvent.ctrlKey && nativeEvent.altKey)\n          ) {\n            if (nativeEvent.char && 1 < nativeEvent.char.length)\n              return nativeEvent.char;\n            if (nativeEvent.which)\n              return String.fromCharCode(nativeEvent.which);\n          }\n          return null;\n        case \"compositionend\":\n          return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n            ? null\n            : nativeEvent.data;\n        default:\n          return null;\n      }\n    }\n    function isTextInputElement(elem) {\n      var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n      return \"input\" === nodeName\n        ? !!supportedInputTypes[elem.type]\n        : \"textarea\" === nodeName\n          ? !0\n          : !1;\n    }\n    function isEventSupported(eventNameSuffix) {\n      if (!canUseDOM) return !1;\n      eventNameSuffix = \"on\" + eventNameSuffix;\n      var isSupported = eventNameSuffix in document;\n      isSupported ||\n        ((isSupported = document.createElement(\"div\")),\n        isSupported.setAttribute(eventNameSuffix, \"return;\"),\n        (isSupported = \"function\" === typeof isSupported[eventNameSuffix]));\n      return isSupported;\n    }\n    function createAndAccumulateChangeEvent(\n      dispatchQueue,\n      inst,\n      nativeEvent,\n      target\n    ) {\n      restoreTarget\n        ? restoreQueue\n          ? restoreQueue.push(target)\n          : (restoreQueue = [target])\n        : (restoreTarget = target);\n      inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n      0 < inst.length &&\n        ((nativeEvent = new SyntheticEvent(\n          \"onChange\",\n          \"change\",\n          null,\n          nativeEvent,\n          target\n        )),\n        dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n    }\n    function runEventInBatch(dispatchQueue) {\n      processDispatchQueue(dispatchQueue, 0);\n    }\n    function getInstIfValueChanged(targetInst) {\n      var targetNode = getNodeFromInstance(targetInst);\n      if (updateValueIfChanged(targetNode)) return targetInst;\n    }\n    function getTargetInstForChangeEvent(domEventName, targetInst) {\n      if (\"change\" === domEventName) return targetInst;\n    }\n    function stopWatchingForValueChange() {\n      activeElement$1 &&\n        (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n        (activeElementInst$1 = activeElement$1 = null));\n    }\n    function handlePropertyChange(nativeEvent) {\n      if (\n        \"value\" === nativeEvent.propertyName &&\n        getInstIfValueChanged(activeElementInst$1)\n      ) {\n        var dispatchQueue = [];\n        createAndAccumulateChangeEvent(\n          dispatchQueue,\n          activeElementInst$1,\n          nativeEvent,\n          getEventTarget(nativeEvent)\n        );\n        batchedUpdates$1(runEventInBatch, dispatchQueue);\n      }\n    }\n    function handleEventsForInputEventPolyfill(\n      domEventName,\n      target,\n      targetInst\n    ) {\n      \"focusin\" === domEventName\n        ? (stopWatchingForValueChange(),\n          (activeElement$1 = target),\n          (activeElementInst$1 = targetInst),\n          activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n        : \"focusout\" === domEventName && stopWatchingForValueChange();\n    }\n    function getTargetInstForInputEventPolyfill(domEventName) {\n      if (\n        \"selectionchange\" === domEventName ||\n        \"keyup\" === domEventName ||\n        \"keydown\" === domEventName\n      )\n        return getInstIfValueChanged(activeElementInst$1);\n    }\n    function getTargetInstForClickEvent(domEventName, targetInst) {\n      if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n    }\n    function getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n      if (\"input\" === domEventName || \"change\" === domEventName)\n        return getInstIfValueChanged(targetInst);\n    }\n    function is(x, y) {\n      return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n    }\n    function shallowEqual(objA, objB) {\n      if (objectIs(objA, objB)) return !0;\n      if (\n        \"object\" !== typeof objA ||\n        null === objA ||\n        \"object\" !== typeof objB ||\n        null === objB\n      )\n        return !1;\n      var keysA = Object.keys(objA),\n        keysB = Object.keys(objB);\n      if (keysA.length !== keysB.length) return !1;\n      for (keysB = 0; keysB < keysA.length; keysB++) {\n        var currentKey = keysA[keysB];\n        if (\n          !hasOwnProperty.call(objB, currentKey) ||\n          !objectIs(objA[currentKey], objB[currentKey])\n        )\n          return !1;\n      }\n      return !0;\n    }\n    function getLeafNode(node) {\n      for (; node && node.firstChild; ) node = node.firstChild;\n      return node;\n    }\n    function getNodeForCharacterOffset(root, offset) {\n      var node = getLeafNode(root);\n      root = 0;\n      for (var nodeEnd; node; ) {\n        if (3 === node.nodeType) {\n          nodeEnd = root + node.textContent.length;\n          if (root <= offset && nodeEnd >= offset)\n            return { node: node, offset: offset - root };\n          root = nodeEnd;\n        }\n        a: {\n          for (; node; ) {\n            if (node.nextSibling) {\n              node = node.nextSibling;\n              break a;\n            }\n            node = node.parentNode;\n          }\n          node = void 0;\n        }\n        node = getLeafNode(node);\n      }\n    }\n    function containsNode(outerNode, innerNode) {\n      return outerNode && innerNode\n        ? outerNode === innerNode\n          ? !0\n          : outerNode && 3 === outerNode.nodeType\n            ? !1\n            : innerNode && 3 === innerNode.nodeType\n              ? containsNode(outerNode, innerNode.parentNode)\n              : \"contains\" in outerNode\n                ? outerNode.contains(innerNode)\n                : outerNode.compareDocumentPosition\n                  ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n                  : !1\n        : !1;\n    }\n    function getActiveElementDeep(containerInfo) {\n      containerInfo =\n        null != containerInfo &&\n        null != containerInfo.ownerDocument &&\n        null != containerInfo.ownerDocument.defaultView\n          ? containerInfo.ownerDocument.defaultView\n          : window;\n      for (\n        var element = getActiveElement(containerInfo.document);\n        element instanceof containerInfo.HTMLIFrameElement;\n\n      ) {\n        try {\n          var JSCompiler_inline_result =\n            \"string\" === typeof element.contentWindow.location.href;\n        } catch (err) {\n          JSCompiler_inline_result = !1;\n        }\n        if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n        else break;\n        element = getActiveElement(containerInfo.document);\n      }\n      return element;\n    }\n    function hasSelectionCapabilities(elem) {\n      var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n      return (\n        nodeName &&\n        ((\"input\" === nodeName &&\n          (\"text\" === elem.type ||\n            \"search\" === elem.type ||\n            \"tel\" === elem.type ||\n            \"url\" === elem.type ||\n            \"password\" === elem.type)) ||\n          \"textarea\" === nodeName ||\n          \"true\" === elem.contentEditable)\n      );\n    }\n    function constructSelectEvent(\n      dispatchQueue,\n      nativeEvent,\n      nativeEventTarget\n    ) {\n      var doc =\n        nativeEventTarget.window === nativeEventTarget\n          ? nativeEventTarget.document\n          : 9 === nativeEventTarget.nodeType\n            ? nativeEventTarget\n            : nativeEventTarget.ownerDocument;\n      mouseDown ||\n        null == activeElement ||\n        activeElement !== getActiveElement(doc) ||\n        ((doc = activeElement),\n        \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n          ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n          : ((doc = (\n              (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n              window\n            ).getSelection()),\n            (doc = {\n              anchorNode: doc.anchorNode,\n              anchorOffset: doc.anchorOffset,\n              focusNode: doc.focusNode,\n              focusOffset: doc.focusOffset\n            })),\n        (lastSelection && shallowEqual(lastSelection, doc)) ||\n          ((lastSelection = doc),\n          (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n          0 < doc.length &&\n            ((nativeEvent = new SyntheticEvent(\n              \"onSelect\",\n              \"select\",\n              null,\n              nativeEvent,\n              nativeEventTarget\n            )),\n            dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n            (nativeEvent.target = activeElement))));\n    }\n    function makePrefixMap(styleProp, eventName) {\n      var prefixes = {};\n      prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n      prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n      prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n      return prefixes;\n    }\n    function getVendorPrefixedEventName(eventName) {\n      if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n      if (!vendorPrefixes[eventName]) return eventName;\n      var prefixMap = vendorPrefixes[eventName],\n        styleProp;\n      for (styleProp in prefixMap)\n        if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n          return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n      return eventName;\n    }\n    function registerSimpleEvent(domEventName, reactName) {\n      topLevelEventsToReactNames.set(domEventName, reactName);\n      registerTwoPhaseEvent(reactName, [domEventName]);\n    }\n    function finishQueueingConcurrentUpdates() {\n      for (\n        var endIndex = concurrentQueuesIndex,\n          i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n        i < endIndex;\n\n      ) {\n        var fiber = concurrentQueues[i];\n        concurrentQueues[i++] = null;\n        var queue = concurrentQueues[i];\n        concurrentQueues[i++] = null;\n        var update = concurrentQueues[i];\n        concurrentQueues[i++] = null;\n        var lane = concurrentQueues[i];\n        concurrentQueues[i++] = null;\n        if (null !== queue && null !== update) {\n          var pending = queue.pending;\n          null === pending\n            ? (update.next = update)\n            : ((update.next = pending.next), (pending.next = update));\n          queue.pending = update;\n        }\n        0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n      }\n    }\n    function enqueueUpdate$1(fiber, queue, update, lane) {\n      concurrentQueues[concurrentQueuesIndex++] = fiber;\n      concurrentQueues[concurrentQueuesIndex++] = queue;\n      concurrentQueues[concurrentQueuesIndex++] = update;\n      concurrentQueues[concurrentQueuesIndex++] = lane;\n      concurrentlyUpdatedLanes |= lane;\n      fiber.lanes |= lane;\n      fiber = fiber.alternate;\n      null !== fiber && (fiber.lanes |= lane);\n    }\n    function enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n      enqueueUpdate$1(fiber, queue, update, lane);\n      return getRootForUpdatedFiber(fiber);\n    }\n    function enqueueConcurrentRenderForLane(fiber, lane) {\n      enqueueUpdate$1(fiber, null, null, lane);\n      return getRootForUpdatedFiber(fiber);\n    }\n    function markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n      sourceFiber.lanes |= lane;\n      var alternate = sourceFiber.alternate;\n      null !== alternate && (alternate.lanes |= lane);\n      for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n        (parent.childLanes |= lane),\n          (alternate = parent.alternate),\n          null !== alternate && (alternate.childLanes |= lane),\n          22 === parent.tag &&\n            ((sourceFiber = parent.stateNode),\n            null === sourceFiber ||\n              sourceFiber._visibility & OffscreenVisible ||\n              (isHidden = !0)),\n          (sourceFiber = parent),\n          (parent = parent.return);\n      return 3 === sourceFiber.tag\n        ? ((parent = sourceFiber.stateNode),\n          isHidden &&\n            null !== update &&\n            ((isHidden = 31 - clz32(lane)),\n            (sourceFiber = parent.hiddenUpdates),\n            (alternate = sourceFiber[isHidden]),\n            null === alternate\n              ? (sourceFiber[isHidden] = [update])\n              : alternate.push(update),\n            (update.lane = lane | 536870912)),\n          parent)\n        : null;\n    }\n    function getRootForUpdatedFiber(sourceFiber) {\n      if (nestedUpdateCount > NESTED_UPDATE_LIMIT)\n        throw (\n          ((nestedPassiveUpdateCount = nestedUpdateCount = 0),\n          (rootWithPassiveNestedUpdates = rootWithNestedUpdates = null),\n          Error(\n            \"Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.\"\n          ))\n        );\n      nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT &&\n        ((nestedPassiveUpdateCount = 0),\n        (rootWithPassiveNestedUpdates = null),\n        console.error(\n          \"Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render.\"\n        ));\n      null === sourceFiber.alternate &&\n        0 !== (sourceFiber.flags & 4098) &&\n        warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber);\n      for (var node = sourceFiber, parent = node.return; null !== parent; )\n        null === node.alternate &&\n          0 !== (node.flags & 4098) &&\n          warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber),\n          (node = parent),\n          (parent = node.return);\n      return 3 === node.tag ? node.stateNode : null;\n    }\n    function resolveFunctionForHotReloading(type) {\n      if (null === resolveFamily) return type;\n      var family = resolveFamily(type);\n      return void 0 === family ? type : family.current;\n    }\n    function resolveForwardRefForHotReloading(type) {\n      if (null === resolveFamily) return type;\n      var family = resolveFamily(type);\n      return void 0 === family\n        ? null !== type &&\n          void 0 !== type &&\n          \"function\" === typeof type.render &&\n          ((family = resolveFunctionForHotReloading(type.render)),\n          type.render !== family)\n          ? ((family = { $$typeof: REACT_FORWARD_REF_TYPE, render: family }),\n            void 0 !== type.displayName &&\n              (family.displayName = type.displayName),\n            family)\n          : type\n        : family.current;\n    }\n    function isCompatibleFamilyForHotReloading(fiber, element) {\n      if (null === resolveFamily) return !1;\n      var prevType = fiber.elementType;\n      element = element.type;\n      var needsCompareFamilies = !1,\n        $$typeofNextType =\n          \"object\" === typeof element && null !== element\n            ? element.$$typeof\n            : null;\n      switch (fiber.tag) {\n        case 1:\n          \"function\" === typeof element && (needsCompareFamilies = !0);\n          break;\n        case 0:\n          \"function\" === typeof element\n            ? (needsCompareFamilies = !0)\n            : $$typeofNextType === REACT_LAZY_TYPE &&\n              (needsCompareFamilies = !0);\n          break;\n        case 11:\n          $$typeofNextType === REACT_FORWARD_REF_TYPE\n            ? (needsCompareFamilies = !0)\n            : $$typeofNextType === REACT_LAZY_TYPE &&\n              (needsCompareFamilies = !0);\n          break;\n        case 14:\n        case 15:\n          $$typeofNextType === REACT_MEMO_TYPE\n            ? (needsCompareFamilies = !0)\n            : $$typeofNextType === REACT_LAZY_TYPE &&\n              (needsCompareFamilies = !0);\n          break;\n        default:\n          return !1;\n      }\n      return needsCompareFamilies &&\n        ((fiber = resolveFamily(prevType)),\n        void 0 !== fiber && fiber === resolveFamily(element))\n        ? !0\n        : !1;\n    }\n    function markFailedErrorBoundaryForHotReloading(fiber) {\n      null !== resolveFamily &&\n        \"function\" === typeof WeakSet &&\n        (null === failedBoundaries && (failedBoundaries = new WeakSet()),\n        failedBoundaries.add(fiber));\n    }\n    function scheduleFibersWithFamiliesRecursively(\n      fiber,\n      updatedFamilies,\n      staleFamilies\n    ) {\n      var alternate = fiber.alternate,\n        child = fiber.child,\n        sibling = fiber.sibling,\n        tag = fiber.tag,\n        type = fiber.type,\n        candidateType = null;\n      switch (tag) {\n        case 0:\n        case 15:\n        case 1:\n          candidateType = type;\n          break;\n        case 11:\n          candidateType = type.render;\n      }\n      if (null === resolveFamily)\n        throw Error(\"Expected resolveFamily to be set during hot reload.\");\n      var needsRender = !1;\n      type = !1;\n      null !== candidateType &&\n        ((candidateType = resolveFamily(candidateType)),\n        void 0 !== candidateType &&\n          (staleFamilies.has(candidateType)\n            ? (type = !0)\n            : updatedFamilies.has(candidateType) &&\n              (1 === tag ? (type = !0) : (needsRender = !0))));\n      null !== failedBoundaries &&\n        (failedBoundaries.has(fiber) ||\n          (null !== alternate && failedBoundaries.has(alternate))) &&\n        (type = !0);\n      type && (fiber._debugNeedsRemount = !0);\n      if (type || needsRender)\n        (alternate = enqueueConcurrentRenderForLane(fiber, 2)),\n          null !== alternate && scheduleUpdateOnFiber(alternate, fiber, 2);\n      null === child ||\n        type ||\n        scheduleFibersWithFamiliesRecursively(\n          child,\n          updatedFamilies,\n          staleFamilies\n        );\n      null !== sibling &&\n        scheduleFibersWithFamiliesRecursively(\n          sibling,\n          updatedFamilies,\n          staleFamilies\n        );\n    }\n    function FiberNode(tag, pendingProps, key, mode) {\n      this.tag = tag;\n      this.key = key;\n      this.sibling =\n        this.child =\n        this.return =\n        this.stateNode =\n        this.type =\n        this.elementType =\n          null;\n      this.index = 0;\n      this.refCleanup = this.ref = null;\n      this.pendingProps = pendingProps;\n      this.dependencies =\n        this.memoizedState =\n        this.updateQueue =\n        this.memoizedProps =\n          null;\n      this.mode = mode;\n      this.subtreeFlags = this.flags = 0;\n      this.deletions = null;\n      this.childLanes = this.lanes = 0;\n      this.alternate = null;\n      this.actualDuration = -0;\n      this.actualStartTime = -1.1;\n      this.treeBaseDuration = this.selfBaseDuration = -0;\n      this._debugTask =\n        this._debugStack =\n        this._debugOwner =\n        this._debugInfo =\n          null;\n      this._debugNeedsRemount = !1;\n      this._debugHookTypes = null;\n      hasBadMapPolyfill ||\n        \"function\" !== typeof Object.preventExtensions ||\n        Object.preventExtensions(this);\n    }\n    function shouldConstruct(Component) {\n      Component = Component.prototype;\n      return !(!Component || !Component.isReactComponent);\n    }\n    function createWorkInProgress(current, pendingProps) {\n      var workInProgress = current.alternate;\n      null === workInProgress\n        ? ((workInProgress = createFiber(\n            current.tag,\n            pendingProps,\n            current.key,\n            current.mode\n          )),\n          (workInProgress.elementType = current.elementType),\n          (workInProgress.type = current.type),\n          (workInProgress.stateNode = current.stateNode),\n          (workInProgress._debugOwner = current._debugOwner),\n          (workInProgress._debugStack = current._debugStack),\n          (workInProgress._debugTask = current._debugTask),\n          (workInProgress._debugHookTypes = current._debugHookTypes),\n          (workInProgress.alternate = current),\n          (current.alternate = workInProgress))\n        : ((workInProgress.pendingProps = pendingProps),\n          (workInProgress.type = current.type),\n          (workInProgress.flags = 0),\n          (workInProgress.subtreeFlags = 0),\n          (workInProgress.deletions = null),\n          (workInProgress.actualDuration = -0),\n          (workInProgress.actualStartTime = -1.1));\n      workInProgress.flags = current.flags & 65011712;\n      workInProgress.childLanes = current.childLanes;\n      workInProgress.lanes = current.lanes;\n      workInProgress.child = current.child;\n      workInProgress.memoizedProps = current.memoizedProps;\n      workInProgress.memoizedState = current.memoizedState;\n      workInProgress.updateQueue = current.updateQueue;\n      pendingProps = current.dependencies;\n      workInProgress.dependencies =\n        null === pendingProps\n          ? null\n          : {\n              lanes: pendingProps.lanes,\n              firstContext: pendingProps.firstContext,\n              _debugThenableState: pendingProps._debugThenableState\n            };\n      workInProgress.sibling = current.sibling;\n      workInProgress.index = current.index;\n      workInProgress.ref = current.ref;\n      workInProgress.refCleanup = current.refCleanup;\n      workInProgress.selfBaseDuration = current.selfBaseDuration;\n      workInProgress.treeBaseDuration = current.treeBaseDuration;\n      workInProgress._debugInfo = current._debugInfo;\n      workInProgress._debugNeedsRemount = current._debugNeedsRemount;\n      switch (workInProgress.tag) {\n        case 0:\n        case 15:\n          workInProgress.type = resolveFunctionForHotReloading(current.type);\n          break;\n        case 1:\n          workInProgress.type = resolveFunctionForHotReloading(current.type);\n          break;\n        case 11:\n          workInProgress.type = resolveForwardRefForHotReloading(current.type);\n      }\n      return workInProgress;\n    }\n    function resetWorkInProgress(workInProgress, renderLanes) {\n      workInProgress.flags &= 65011714;\n      var current = workInProgress.alternate;\n      null === current\n        ? ((workInProgress.childLanes = 0),\n          (workInProgress.lanes = renderLanes),\n          (workInProgress.child = null),\n          (workInProgress.subtreeFlags = 0),\n          (workInProgress.memoizedProps = null),\n          (workInProgress.memoizedState = null),\n          (workInProgress.updateQueue = null),\n          (workInProgress.dependencies = null),\n          (workInProgress.stateNode = null),\n          (workInProgress.selfBaseDuration = 0),\n          (workInProgress.treeBaseDuration = 0))\n        : ((workInProgress.childLanes = current.childLanes),\n          (workInProgress.lanes = current.lanes),\n          (workInProgress.child = current.child),\n          (workInProgress.subtreeFlags = 0),\n          (workInProgress.deletions = null),\n          (workInProgress.memoizedProps = current.memoizedProps),\n          (workInProgress.memoizedState = current.memoizedState),\n          (workInProgress.updateQueue = current.updateQueue),\n          (workInProgress.type = current.type),\n          (renderLanes = current.dependencies),\n          (workInProgress.dependencies =\n            null === renderLanes\n              ? null\n              : {\n                  lanes: renderLanes.lanes,\n                  firstContext: renderLanes.firstContext,\n                  _debugThenableState: renderLanes._debugThenableState\n                }),\n          (workInProgress.selfBaseDuration = current.selfBaseDuration),\n          (workInProgress.treeBaseDuration = current.treeBaseDuration));\n      return workInProgress;\n    }\n    function createFiberFromTypeAndProps(\n      type,\n      key,\n      pendingProps,\n      owner,\n      mode,\n      lanes\n    ) {\n      var fiberTag = 0,\n        resolvedType = type;\n      if (\"function\" === typeof type)\n        shouldConstruct(type) && (fiberTag = 1),\n          (resolvedType = resolveFunctionForHotReloading(resolvedType));\n      else if (\"string\" === typeof type)\n        (fiberTag = getHostContext()),\n          (fiberTag = isHostHoistableType(type, pendingProps, fiberTag)\n            ? 26\n            : \"html\" === type || \"head\" === type || \"body\" === type\n              ? 27\n              : 5);\n      else\n        a: switch (type) {\n          case REACT_ACTIVITY_TYPE:\n            return (\n              (key = createFiber(31, pendingProps, key, mode)),\n              (key.elementType = REACT_ACTIVITY_TYPE),\n              (key.lanes = lanes),\n              key\n            );\n          case REACT_FRAGMENT_TYPE:\n            return createFiberFromFragment(\n              pendingProps.children,\n              mode,\n              lanes,\n              key\n            );\n          case REACT_STRICT_MODE_TYPE:\n            fiberTag = 8;\n            mode |= StrictLegacyMode;\n            mode |= StrictEffectsMode;\n            break;\n          case REACT_PROFILER_TYPE:\n            return (\n              (type = pendingProps),\n              (owner = mode),\n              \"string\" !== typeof type.id &&\n                console.error(\n                  'Profiler must specify an \"id\" of type `string` as a prop. Received the type `%s` instead.',\n                  typeof type.id\n                ),\n              (key = createFiber(12, type, key, owner | ProfileMode)),\n              (key.elementType = REACT_PROFILER_TYPE),\n              (key.lanes = lanes),\n              (key.stateNode = { effectDuration: 0, passiveEffectDuration: 0 }),\n              key\n            );\n          case REACT_SUSPENSE_TYPE:\n            return (\n              (key = createFiber(13, pendingProps, key, mode)),\n              (key.elementType = REACT_SUSPENSE_TYPE),\n              (key.lanes = lanes),\n              key\n            );\n          case REACT_SUSPENSE_LIST_TYPE:\n            return (\n              (key = createFiber(19, pendingProps, key, mode)),\n              (key.elementType = REACT_SUSPENSE_LIST_TYPE),\n              (key.lanes = lanes),\n              key\n            );\n          default:\n            if (\"object\" === typeof type && null !== type)\n              switch (type.$$typeof) {\n                case REACT_CONTEXT_TYPE:\n                  fiberTag = 10;\n                  break a;\n                case REACT_CONSUMER_TYPE:\n                  fiberTag = 9;\n                  break a;\n                case REACT_FORWARD_REF_TYPE:\n                  fiberTag = 11;\n                  resolvedType = resolveForwardRefForHotReloading(resolvedType);\n                  break a;\n                case REACT_MEMO_TYPE:\n                  fiberTag = 14;\n                  break a;\n                case REACT_LAZY_TYPE:\n                  fiberTag = 16;\n                  resolvedType = null;\n                  break a;\n              }\n            resolvedType = \"\";\n            if (\n              void 0 === type ||\n              (\"object\" === typeof type &&\n                null !== type &&\n                0 === Object.keys(type).length)\n            )\n              resolvedType +=\n                \" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\";\n            null === type\n              ? (pendingProps = \"null\")\n              : isArrayImpl(type)\n                ? (pendingProps = \"array\")\n                : void 0 !== type && type.$$typeof === REACT_ELEMENT_TYPE\n                  ? ((pendingProps =\n                      \"<\" +\n                      (getComponentNameFromType(type.type) || \"Unknown\") +\n                      \" />\"),\n                    (resolvedType =\n                      \" Did you accidentally export a JSX literal instead of a component?\"))\n                  : (pendingProps = typeof type);\n            (fiberTag = owner ? getComponentNameFromOwner(owner) : null) &&\n              (resolvedType +=\n                \"\\n\\nCheck the render method of `\" + fiberTag + \"`.\");\n            fiberTag = 29;\n            pendingProps = Error(\n              \"Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: \" +\n                (pendingProps + \".\" + resolvedType)\n            );\n            resolvedType = null;\n        }\n      key = createFiber(fiberTag, pendingProps, key, mode);\n      key.elementType = type;\n      key.type = resolvedType;\n      key.lanes = lanes;\n      key._debugOwner = owner;\n      return key;\n    }\n    function createFiberFromElement(element, mode, lanes) {\n      mode = createFiberFromTypeAndProps(\n        element.type,\n        element.key,\n        element.props,\n        element._owner,\n        mode,\n        lanes\n      );\n      mode._debugOwner = element._owner;\n      mode._debugStack = element._debugStack;\n      mode._debugTask = element._debugTask;\n      return mode;\n    }\n    function createFiberFromFragment(elements, mode, lanes, key) {\n      elements = createFiber(7, elements, key, mode);\n      elements.lanes = lanes;\n      return elements;\n    }\n    function createFiberFromText(content, mode, lanes) {\n      content = createFiber(6, content, null, mode);\n      content.lanes = lanes;\n      return content;\n    }\n    function createFiberFromDehydratedFragment(dehydratedNode) {\n      var fiber = createFiber(18, null, null, NoMode);\n      fiber.stateNode = dehydratedNode;\n      return fiber;\n    }\n    function createFiberFromPortal(portal, mode, lanes) {\n      mode = createFiber(\n        4,\n        null !== portal.children ? portal.children : [],\n        portal.key,\n        mode\n      );\n      mode.lanes = lanes;\n      mode.stateNode = {\n        containerInfo: portal.containerInfo,\n        pendingChildren: null,\n        implementation: portal.implementation\n      };\n      return mode;\n    }\n    function createCapturedValueAtFiber(value, source) {\n      if (\"object\" === typeof value && null !== value) {\n        var existing = CapturedStacks.get(value);\n        if (void 0 !== existing) return existing;\n        source = {\n          value: value,\n          source: source,\n          stack: getStackByFiberInDevAndProd(source)\n        };\n        CapturedStacks.set(value, source);\n        return source;\n      }\n      return {\n        value: value,\n        source: source,\n        stack: getStackByFiberInDevAndProd(source)\n      };\n    }\n    function pushTreeFork(workInProgress, totalChildren) {\n      warnIfNotHydrating();\n      forkStack[forkStackIndex++] = treeForkCount;\n      forkStack[forkStackIndex++] = treeForkProvider;\n      treeForkProvider = workInProgress;\n      treeForkCount = totalChildren;\n    }\n    function pushTreeId(workInProgress, totalChildren, index) {\n      warnIfNotHydrating();\n      idStack[idStackIndex++] = treeContextId;\n      idStack[idStackIndex++] = treeContextOverflow;\n      idStack[idStackIndex++] = treeContextProvider;\n      treeContextProvider = workInProgress;\n      var baseIdWithLeadingBit = treeContextId;\n      workInProgress = treeContextOverflow;\n      var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n      baseIdWithLeadingBit &= ~(1 << baseLength);\n      index += 1;\n      var length = 32 - clz32(totalChildren) + baseLength;\n      if (30 < length) {\n        var numberOfOverflowBits = baseLength - (baseLength % 5);\n        length = (\n          baseIdWithLeadingBit &\n          ((1 << numberOfOverflowBits) - 1)\n        ).toString(32);\n        baseIdWithLeadingBit >>= numberOfOverflowBits;\n        baseLength -= numberOfOverflowBits;\n        treeContextId =\n          (1 << (32 - clz32(totalChildren) + baseLength)) |\n          (index << baseLength) |\n          baseIdWithLeadingBit;\n        treeContextOverflow = length + workInProgress;\n      } else\n        (treeContextId =\n          (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n          (treeContextOverflow = workInProgress);\n    }\n    function pushMaterializedTreeId(workInProgress) {\n      warnIfNotHydrating();\n      null !== workInProgress.return &&\n        (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n    }\n    function popTreeContext(workInProgress) {\n      for (; workInProgress === treeForkProvider; )\n        (treeForkProvider = forkStack[--forkStackIndex]),\n          (forkStack[forkStackIndex] = null),\n          (treeForkCount = forkStack[--forkStackIndex]),\n          (forkStack[forkStackIndex] = null);\n      for (; workInProgress === treeContextProvider; )\n        (treeContextProvider = idStack[--idStackIndex]),\n          (idStack[idStackIndex] = null),\n          (treeContextOverflow = idStack[--idStackIndex]),\n          (idStack[idStackIndex] = null),\n          (treeContextId = idStack[--idStackIndex]),\n          (idStack[idStackIndex] = null);\n    }\n    function getSuspendedTreeContext() {\n      warnIfNotHydrating();\n      return null !== treeContextProvider\n        ? { id: treeContextId, overflow: treeContextOverflow }\n        : null;\n    }\n    function restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n      warnIfNotHydrating();\n      idStack[idStackIndex++] = treeContextId;\n      idStack[idStackIndex++] = treeContextOverflow;\n      idStack[idStackIndex++] = treeContextProvider;\n      treeContextId = suspendedContext.id;\n      treeContextOverflow = suspendedContext.overflow;\n      treeContextProvider = workInProgress;\n    }\n    function warnIfNotHydrating() {\n      isHydrating ||\n        console.error(\n          \"Expected to be hydrating. This is a bug in React. Please file an issue.\"\n        );\n    }\n    function buildHydrationDiffNode(fiber, distanceFromLeaf) {\n      if (null === fiber.return) {\n        if (null === hydrationDiffRootDEV)\n          hydrationDiffRootDEV = {\n            fiber: fiber,\n            children: [],\n            serverProps: void 0,\n            serverTail: [],\n            distanceFromLeaf: distanceFromLeaf\n          };\n        else {\n          if (hydrationDiffRootDEV.fiber !== fiber)\n            throw Error(\n              \"Saw multiple hydration diff roots in a pass. This is a bug in React.\"\n            );\n          hydrationDiffRootDEV.distanceFromLeaf > distanceFromLeaf &&\n            (hydrationDiffRootDEV.distanceFromLeaf = distanceFromLeaf);\n        }\n        return hydrationDiffRootDEV;\n      }\n      var siblings = buildHydrationDiffNode(\n        fiber.return,\n        distanceFromLeaf + 1\n      ).children;\n      if (0 < siblings.length && siblings[siblings.length - 1].fiber === fiber)\n        return (\n          (siblings = siblings[siblings.length - 1]),\n          siblings.distanceFromLeaf > distanceFromLeaf &&\n            (siblings.distanceFromLeaf = distanceFromLeaf),\n          siblings\n        );\n      distanceFromLeaf = {\n        fiber: fiber,\n        children: [],\n        serverProps: void 0,\n        serverTail: [],\n        distanceFromLeaf: distanceFromLeaf\n      };\n      siblings.push(distanceFromLeaf);\n      return distanceFromLeaf;\n    }\n    function warnIfHydrating() {\n      isHydrating &&\n        console.error(\n          \"We should not be hydrating here. This is a bug in React. Please file a bug.\"\n        );\n    }\n    function warnNonHydratedInstance(fiber, rejectedCandidate) {\n      didSuspendOrErrorDEV ||\n        ((fiber = buildHydrationDiffNode(fiber, 0)),\n        (fiber.serverProps = null),\n        null !== rejectedCandidate &&\n          ((rejectedCandidate =\n            describeHydratableInstanceForDevWarnings(rejectedCandidate)),\n          fiber.serverTail.push(rejectedCandidate)));\n    }\n    function throwOnHydrationMismatch(fiber) {\n      var fromText =\n          1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : !1,\n        diff = \"\",\n        diffRoot = hydrationDiffRootDEV;\n      null !== diffRoot &&\n        ((hydrationDiffRootDEV = null), (diff = describeDiff(diffRoot)));\n      queueHydrationError(\n        createCapturedValueAtFiber(\n          Error(\n            \"Hydration failed because the server rendered \" +\n              (fromText ? \"text\" : \"HTML\") +\n              \" didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\\n\\n- A server/client branch `if (typeof window !== 'undefined')`.\\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\\n- Date formatting in a user's locale which doesn't match the server.\\n- External changing data without sending a snapshot of it along with the HTML.\\n- Invalid HTML tag nesting.\\n\\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\\n\\nhttps://react.dev/link/hydration-mismatch\" +\n              diff\n          ),\n          fiber\n        )\n      );\n      throw HydrationMismatchException;\n    }\n    function prepareToHydrateHostInstance(fiber) {\n      var didHydrate = fiber.stateNode;\n      var type = fiber.type,\n        props = fiber.memoizedProps;\n      didHydrate[internalInstanceKey] = fiber;\n      didHydrate[internalPropsKey] = props;\n      validatePropertiesInDevelopment(type, props);\n      switch (type) {\n        case \"dialog\":\n          listenToNonDelegatedEvent(\"cancel\", didHydrate);\n          listenToNonDelegatedEvent(\"close\", didHydrate);\n          break;\n        case \"iframe\":\n        case \"object\":\n        case \"embed\":\n          listenToNonDelegatedEvent(\"load\", didHydrate);\n          break;\n        case \"video\":\n        case \"audio\":\n          for (type = 0; type < mediaEventTypes.length; type++)\n            listenToNonDelegatedEvent(mediaEventTypes[type], didHydrate);\n          break;\n        case \"source\":\n          listenToNonDelegatedEvent(\"error\", didHydrate);\n          break;\n        case \"img\":\n        case \"image\":\n        case \"link\":\n          listenToNonDelegatedEvent(\"error\", didHydrate);\n          listenToNonDelegatedEvent(\"load\", didHydrate);\n          break;\n        case \"details\":\n          listenToNonDelegatedEvent(\"toggle\", didHydrate);\n          break;\n        case \"input\":\n          checkControlledValueProps(\"input\", props);\n          listenToNonDelegatedEvent(\"invalid\", didHydrate);\n          validateInputProps(didHydrate, props);\n          initInput(\n            didHydrate,\n            props.value,\n            props.defaultValue,\n            props.checked,\n            props.defaultChecked,\n            props.type,\n            props.name,\n            !0\n          );\n          break;\n        case \"option\":\n          validateOptionProps(didHydrate, props);\n          break;\n        case \"select\":\n          checkControlledValueProps(\"select\", props);\n          listenToNonDelegatedEvent(\"invalid\", didHydrate);\n          validateSelectProps(didHydrate, props);\n          break;\n        case \"textarea\":\n          checkControlledValueProps(\"textarea\", props),\n            listenToNonDelegatedEvent(\"invalid\", didHydrate),\n            validateTextareaProps(didHydrate, props),\n            initTextarea(\n              didHydrate,\n              props.value,\n              props.defaultValue,\n              props.children\n            );\n      }\n      type = props.children;\n      (\"string\" !== typeof type &&\n        \"number\" !== typeof type &&\n        \"bigint\" !== typeof type) ||\n      didHydrate.textContent === \"\" + type ||\n      !0 === props.suppressHydrationWarning ||\n      checkForUnmatchedText(didHydrate.textContent, type)\n        ? (null != props.popover &&\n            (listenToNonDelegatedEvent(\"beforetoggle\", didHydrate),\n            listenToNonDelegatedEvent(\"toggle\", didHydrate)),\n          null != props.onScroll &&\n            listenToNonDelegatedEvent(\"scroll\", didHydrate),\n          null != props.onScrollEnd &&\n            listenToNonDelegatedEvent(\"scrollend\", didHydrate),\n          null != props.onClick && (didHydrate.onclick = noop$1),\n          (didHydrate = !0))\n        : (didHydrate = !1);\n      didHydrate || throwOnHydrationMismatch(fiber, !0);\n    }\n    function popToNextHostParent(fiber) {\n      for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n        switch (hydrationParentFiber.tag) {\n          case 5:\n          case 31:\n          case 13:\n            rootOrSingletonContext = !1;\n            return;\n          case 27:\n          case 3:\n            rootOrSingletonContext = !0;\n            return;\n          default:\n            hydrationParentFiber = hydrationParentFiber.return;\n        }\n    }\n    function popHydrationState(fiber) {\n      if (fiber !== hydrationParentFiber) return !1;\n      if (!isHydrating)\n        return popToNextHostParent(fiber), (isHydrating = !0), !1;\n      var tag = fiber.tag,\n        JSCompiler_temp;\n      if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n        if ((JSCompiler_temp = 5 === tag))\n          (JSCompiler_temp = fiber.type),\n            (JSCompiler_temp =\n              !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n              shouldSetTextContent(fiber.type, fiber.memoizedProps));\n        JSCompiler_temp = !JSCompiler_temp;\n      }\n      if (JSCompiler_temp && nextHydratableInstance) {\n        for (JSCompiler_temp = nextHydratableInstance; JSCompiler_temp; ) {\n          var diffNode = buildHydrationDiffNode(fiber, 0),\n            description =\n              describeHydratableInstanceForDevWarnings(JSCompiler_temp);\n          diffNode.serverTail.push(description);\n          JSCompiler_temp =\n            \"Suspense\" === description.type\n              ? getNextHydratableInstanceAfterHydrationBoundary(JSCompiler_temp)\n              : getNextHydratable(JSCompiler_temp.nextSibling);\n        }\n        throwOnHydrationMismatch(fiber);\n      }\n      popToNextHostParent(fiber);\n      if (13 === tag) {\n        fiber = fiber.memoizedState;\n        fiber = null !== fiber ? fiber.dehydrated : null;\n        if (!fiber)\n          throw Error(\n            \"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\"\n          );\n        nextHydratableInstance =\n          getNextHydratableInstanceAfterHydrationBoundary(fiber);\n      } else if (31 === tag) {\n        fiber = fiber.memoizedState;\n        fiber = null !== fiber ? fiber.dehydrated : null;\n        if (!fiber)\n          throw Error(\n            \"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\"\n          );\n        nextHydratableInstance =\n          getNextHydratableInstanceAfterHydrationBoundary(fiber);\n      } else\n        27 === tag\n          ? ((tag = nextHydratableInstance),\n            isSingletonScope(fiber.type)\n              ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n                (previousHydratableOnEnteringScopedSingleton = null),\n                (nextHydratableInstance = fiber))\n              : (nextHydratableInstance = tag))\n          : (nextHydratableInstance = hydrationParentFiber\n              ? getNextHydratable(fiber.stateNode.nextSibling)\n              : null);\n      return !0;\n    }\n    function resetHydrationState() {\n      nextHydratableInstance = hydrationParentFiber = null;\n      didSuspendOrErrorDEV = isHydrating = !1;\n    }\n    function upgradeHydrationErrorsToRecoverable() {\n      var queuedErrors = hydrationErrors;\n      null !== queuedErrors &&\n        (null === workInProgressRootRecoverableErrors\n          ? (workInProgressRootRecoverableErrors = queuedErrors)\n          : workInProgressRootRecoverableErrors.push.apply(\n              workInProgressRootRecoverableErrors,\n              queuedErrors\n            ),\n        (hydrationErrors = null));\n      return queuedErrors;\n    }\n    function queueHydrationError(error) {\n      null === hydrationErrors\n        ? (hydrationErrors = [error])\n        : hydrationErrors.push(error);\n    }\n    function emitPendingHydrationWarnings() {\n      var diffRoot = hydrationDiffRootDEV;\n      if (null !== diffRoot) {\n        hydrationDiffRootDEV = null;\n        for (var diff = describeDiff(diffRoot); 0 < diffRoot.children.length; )\n          diffRoot = diffRoot.children[0];\n        runWithFiberInDEV(diffRoot.fiber, function () {\n          console.error(\n            \"A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\\n\\n- A server/client branch `if (typeof window !== 'undefined')`.\\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\\n- Date formatting in a user's locale which doesn't match the server.\\n- External changing data without sending a snapshot of it along with the HTML.\\n- Invalid HTML tag nesting.\\n\\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\\n\\n%s%s\",\n            \"https://react.dev/link/hydration-mismatch\",\n            diff\n          );\n        });\n      }\n    }\n    function resetContextDependencies() {\n      lastContextDependency = currentlyRenderingFiber$1 = null;\n      isDisallowedContextReadInDEV = !1;\n    }\n    function pushProvider(providerFiber, context, nextValue) {\n      push(valueCursor, context._currentValue, providerFiber);\n      context._currentValue = nextValue;\n      push(rendererCursorDEV, context._currentRenderer, providerFiber);\n      void 0 !== context._currentRenderer &&\n        null !== context._currentRenderer &&\n        context._currentRenderer !== rendererSigil &&\n        console.error(\n          \"Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported.\"\n        );\n      context._currentRenderer = rendererSigil;\n    }\n    function popProvider(context, providerFiber) {\n      context._currentValue = valueCursor.current;\n      var currentRenderer = rendererCursorDEV.current;\n      pop(rendererCursorDEV, providerFiber);\n      context._currentRenderer = currentRenderer;\n      pop(valueCursor, providerFiber);\n    }\n    function scheduleContextWorkOnParentPath(\n      parent,\n      renderLanes,\n      propagationRoot\n    ) {\n      for (; null !== parent; ) {\n        var alternate = parent.alternate;\n        (parent.childLanes & renderLanes) !== renderLanes\n          ? ((parent.childLanes |= renderLanes),\n            null !== alternate && (alternate.childLanes |= renderLanes))\n          : null !== alternate &&\n            (alternate.childLanes & renderLanes) !== renderLanes &&\n            (alternate.childLanes |= renderLanes);\n        if (parent === propagationRoot) break;\n        parent = parent.return;\n      }\n      parent !== propagationRoot &&\n        console.error(\n          \"Expected to find the propagation root when scheduling context work. This error is likely caused by a bug in React. Please file an issue.\"\n        );\n    }\n    function propagateContextChanges(\n      workInProgress,\n      contexts,\n      renderLanes,\n      forcePropagateEntireTree\n    ) {\n      var fiber = workInProgress.child;\n      null !== fiber && (fiber.return = workInProgress);\n      for (; null !== fiber; ) {\n        var list = fiber.dependencies;\n        if (null !== list) {\n          var nextFiber = fiber.child;\n          list = list.firstContext;\n          a: for (; null !== list; ) {\n            var dependency = list;\n            list = fiber;\n            for (var i = 0; i < contexts.length; i++)\n              if (dependency.context === contexts[i]) {\n                list.lanes |= renderLanes;\n                dependency = list.alternate;\n                null !== dependency && (dependency.lanes |= renderLanes);\n                scheduleContextWorkOnParentPath(\n                  list.return,\n                  renderLanes,\n                  workInProgress\n                );\n                forcePropagateEntireTree || (nextFiber = null);\n                break a;\n              }\n            list = dependency.next;\n          }\n        } else if (18 === fiber.tag) {\n          nextFiber = fiber.return;\n          if (null === nextFiber)\n            throw Error(\n              \"We just came from a parent so we must have had a parent. This is a bug in React.\"\n            );\n          nextFiber.lanes |= renderLanes;\n          list = nextFiber.alternate;\n          null !== list && (list.lanes |= renderLanes);\n          scheduleContextWorkOnParentPath(\n            nextFiber,\n            renderLanes,\n            workInProgress\n          );\n          nextFiber = null;\n        } else nextFiber = fiber.child;\n        if (null !== nextFiber) nextFiber.return = fiber;\n        else\n          for (nextFiber = fiber; null !== nextFiber; ) {\n            if (nextFiber === workInProgress) {\n              nextFiber = null;\n              break;\n            }\n            fiber = nextFiber.sibling;\n            if (null !== fiber) {\n              fiber.return = nextFiber.return;\n              nextFiber = fiber;\n              break;\n            }\n            nextFiber = nextFiber.return;\n          }\n        fiber = nextFiber;\n      }\n    }\n    function propagateParentContextChanges(\n      current,\n      workInProgress,\n      renderLanes,\n      forcePropagateEntireTree\n    ) {\n      current = null;\n      for (\n        var parent = workInProgress, isInsidePropagationBailout = !1;\n        null !== parent;\n\n      ) {\n        if (!isInsidePropagationBailout)\n          if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n          else if (0 !== (parent.flags & 262144)) break;\n        if (10 === parent.tag) {\n          var currentParent = parent.alternate;\n          if (null === currentParent)\n            throw Error(\"Should have a current fiber. This is a bug in React.\");\n          currentParent = currentParent.memoizedProps;\n          if (null !== currentParent) {\n            var context = parent.type;\n            objectIs(parent.pendingProps.value, currentParent.value) ||\n              (null !== current\n                ? current.push(context)\n                : (current = [context]));\n          }\n        } else if (parent === hostTransitionProviderCursor.current) {\n          currentParent = parent.alternate;\n          if (null === currentParent)\n            throw Error(\"Should have a current fiber. This is a bug in React.\");\n          currentParent.memoizedState.memoizedState !==\n            parent.memoizedState.memoizedState &&\n            (null !== current\n              ? current.push(HostTransitionContext)\n              : (current = [HostTransitionContext]));\n        }\n        parent = parent.return;\n      }\n      null !== current &&\n        propagateContextChanges(\n          workInProgress,\n          current,\n          renderLanes,\n          forcePropagateEntireTree\n        );\n      workInProgress.flags |= 262144;\n    }\n    function checkIfContextChanged(currentDependencies) {\n      for (\n        currentDependencies = currentDependencies.firstContext;\n        null !== currentDependencies;\n\n      ) {\n        if (\n          !objectIs(\n            currentDependencies.context._currentValue,\n            currentDependencies.memoizedValue\n          )\n        )\n          return !0;\n        currentDependencies = currentDependencies.next;\n      }\n      return !1;\n    }\n    function prepareToReadContext(workInProgress) {\n      currentlyRenderingFiber$1 = workInProgress;\n      lastContextDependency = null;\n      workInProgress = workInProgress.dependencies;\n      null !== workInProgress && (workInProgress.firstContext = null);\n    }\n    function readContext(context) {\n      isDisallowedContextReadInDEV &&\n        console.error(\n          \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\"\n        );\n      return readContextForConsumer(currentlyRenderingFiber$1, context);\n    }\n    function readContextDuringReconciliation(consumer, context) {\n      null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n      return readContextForConsumer(consumer, context);\n    }\n    function readContextForConsumer(consumer, context) {\n      var value = context._currentValue;\n      context = { context: context, memoizedValue: value, next: null };\n      if (null === lastContextDependency) {\n        if (null === consumer)\n          throw Error(\n            \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\"\n          );\n        lastContextDependency = context;\n        consumer.dependencies = {\n          lanes: 0,\n          firstContext: context,\n          _debugThenableState: null\n        };\n        consumer.flags |= 524288;\n      } else lastContextDependency = lastContextDependency.next = context;\n      return value;\n    }\n    function createCache() {\n      return {\n        controller: new AbortControllerLocal(),\n        data: new Map(),\n        refCount: 0\n      };\n    }\n    function retainCache(cache) {\n      cache.controller.signal.aborted &&\n        console.warn(\n          \"A cache instance was retained after it was already freed. This likely indicates a bug in React.\"\n        );\n      cache.refCount++;\n    }\n    function releaseCache(cache) {\n      cache.refCount--;\n      0 > cache.refCount &&\n        console.warn(\n          \"A cache instance was released after it was already freed. This likely indicates a bug in React.\"\n        );\n      0 === cache.refCount &&\n        scheduleCallback$2(NormalPriority, function () {\n          cache.controller.abort();\n        });\n    }\n    function pushNestedEffectDurations() {\n      var prevEffectDuration = profilerEffectDuration;\n      profilerEffectDuration = 0;\n      return prevEffectDuration;\n    }\n    function popNestedEffectDurations(prevEffectDuration) {\n      var elapsedTime = profilerEffectDuration;\n      profilerEffectDuration = prevEffectDuration;\n      return elapsedTime;\n    }\n    function bubbleNestedEffectDurations(prevEffectDuration) {\n      var elapsedTime = profilerEffectDuration;\n      profilerEffectDuration += prevEffectDuration;\n      return elapsedTime;\n    }\n    function pushComponentEffectStart() {\n      var prevEffectStart = componentEffectStartTime;\n      componentEffectStartTime = -1.1;\n      return prevEffectStart;\n    }\n    function popComponentEffectStart(prevEffectStart) {\n      0 <= prevEffectStart && (componentEffectStartTime = prevEffectStart);\n    }\n    function startProfilerTimer(fiber) {\n      profilerStartTime = now();\n      0 > fiber.actualStartTime && (fiber.actualStartTime = profilerStartTime);\n    }\n    function stopProfilerTimerIfRunningAndRecordDuration(fiber) {\n      if (0 <= profilerStartTime) {\n        var elapsedTime = now() - profilerStartTime;\n        fiber.actualDuration += elapsedTime;\n        fiber.selfBaseDuration = elapsedTime;\n        profilerStartTime = -1;\n      }\n    }\n    function stopProfilerTimerIfRunningAndRecordIncompleteDuration(fiber) {\n      if (0 <= profilerStartTime) {\n        var elapsedTime = now() - profilerStartTime;\n        fiber.actualDuration += elapsedTime;\n        profilerStartTime = -1;\n      }\n    }\n    function recordEffectDuration() {\n      if (0 <= profilerStartTime) {\n        var elapsedTime = now() - profilerStartTime;\n        profilerStartTime = -1;\n        profilerEffectDuration += elapsedTime;\n      }\n    }\n    function startEffectTimer() {\n      profilerStartTime = now();\n      0 > componentEffectStartTime &&\n        (componentEffectStartTime = profilerStartTime);\n    }\n    function transferActualDuration(fiber) {\n      for (var child = fiber.child; child; )\n        (fiber.actualDuration += child.actualDuration), (child = child.sibling);\n    }\n    function entangleAsyncAction(transition, thenable) {\n      if (null === currentEntangledListeners) {\n        var entangledListeners = (currentEntangledListeners = []);\n        currentEntangledPendingCount = 0;\n        currentEntangledLane = requestTransitionLane();\n        currentEntangledActionThenable = {\n          status: \"pending\",\n          value: void 0,\n          then: function (resolve) {\n            entangledListeners.push(resolve);\n          }\n        };\n      }\n      currentEntangledPendingCount++;\n      thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n      return thenable;\n    }\n    function pingEngtangledActionScope() {\n      if (\n        0 === --currentEntangledPendingCount &&\n        null !== currentEntangledListeners\n      ) {\n        null !== currentEntangledActionThenable &&\n          (currentEntangledActionThenable.status = \"fulfilled\");\n        var listeners = currentEntangledListeners;\n        currentEntangledListeners = null;\n        currentEntangledLane = 0;\n        currentEntangledActionThenable = null;\n        for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n      }\n    }\n    function chainThenableValue(thenable, result) {\n      var listeners = [],\n        thenableWithOverride = {\n          status: \"pending\",\n          value: null,\n          reason: null,\n          then: function (resolve) {\n            listeners.push(resolve);\n          }\n        };\n      thenable.then(\n        function () {\n          thenableWithOverride.status = \"fulfilled\";\n          thenableWithOverride.value = result;\n          for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n        },\n        function (error) {\n          thenableWithOverride.status = \"rejected\";\n          thenableWithOverride.reason = error;\n          for (error = 0; error < listeners.length; error++)\n            (0, listeners[error])(void 0);\n        }\n      );\n      return thenableWithOverride;\n    }\n    function peekCacheFromPool() {\n      var cacheResumedFromPreviousRender = resumedCache.current;\n      return null !== cacheResumedFromPreviousRender\n        ? cacheResumedFromPreviousRender\n        : workInProgressRoot.pooledCache;\n    }\n    function pushTransition(offscreenWorkInProgress, prevCachePool) {\n      null === prevCachePool\n        ? push(resumedCache, resumedCache.current, offscreenWorkInProgress)\n        : push(resumedCache, prevCachePool.pool, offscreenWorkInProgress);\n    }\n    function getSuspendedCache() {\n      var cacheFromPool = peekCacheFromPool();\n      return null === cacheFromPool\n        ? null\n        : { parent: CacheContext._currentValue, pool: cacheFromPool };\n    }\n    function createThenableState() {\n      return { didWarnAboutUncachedPromise: !1, thenables: [] };\n    }\n    function isThenableResolved(thenable) {\n      thenable = thenable.status;\n      return \"fulfilled\" === thenable || \"rejected\" === thenable;\n    }\n    function trackUsedThenable(thenableState, thenable, index) {\n      null !== ReactSharedInternals.actQueue &&\n        (ReactSharedInternals.didUsePromise = !0);\n      var trackedThenables = thenableState.thenables;\n      index = trackedThenables[index];\n      void 0 === index\n        ? trackedThenables.push(thenable)\n        : index !== thenable &&\n          (thenableState.didWarnAboutUncachedPromise ||\n            ((thenableState.didWarnAboutUncachedPromise = !0),\n            console.error(\n              \"A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework.\"\n            )),\n          thenable.then(noop$1, noop$1),\n          (thenable = index));\n      switch (thenable.status) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw (\n            ((thenableState = thenable.reason),\n            checkIfUseWrappedInAsyncCatch(thenableState),\n            thenableState)\n          );\n        default:\n          if (\"string\" === typeof thenable.status)\n            thenable.then(noop$1, noop$1);\n          else {\n            thenableState = workInProgressRoot;\n            if (\n              null !== thenableState &&\n              100 < thenableState.shellSuspendCounter\n            )\n              throw Error(\n                \"An unknown Component is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.\"\n              );\n            thenableState = thenable;\n            thenableState.status = \"pending\";\n            thenableState.then(\n              function (fulfilledValue) {\n                if (\"pending\" === thenable.status) {\n                  var fulfilledThenable = thenable;\n                  fulfilledThenable.status = \"fulfilled\";\n                  fulfilledThenable.value = fulfilledValue;\n                }\n              },\n              function (error) {\n                if (\"pending\" === thenable.status) {\n                  var rejectedThenable = thenable;\n                  rejectedThenable.status = \"rejected\";\n                  rejectedThenable.reason = error;\n                }\n              }\n            );\n          }\n          switch (thenable.status) {\n            case \"fulfilled\":\n              return thenable.value;\n            case \"rejected\":\n              throw (\n                ((thenableState = thenable.reason),\n                checkIfUseWrappedInAsyncCatch(thenableState),\n                thenableState)\n              );\n          }\n          suspendedThenable = thenable;\n          needsToResetSuspendedThenableDEV = !0;\n          throw SuspenseException;\n      }\n    }\n    function getSuspendedThenable() {\n      if (null === suspendedThenable)\n        throw Error(\n          \"Expected a suspended thenable. This is a bug in React. Please file an issue.\"\n        );\n      var thenable = suspendedThenable;\n      suspendedThenable = null;\n      needsToResetSuspendedThenableDEV = !1;\n      return thenable;\n    }\n    function checkIfUseWrappedInAsyncCatch(rejectedReason) {\n      if (\n        rejectedReason === SuspenseException ||\n        rejectedReason === SuspenseActionException\n      )\n        throw Error(\n          \"Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.\"\n        );\n    }\n    function pushDebugInfo(debugInfo) {\n      var previousDebugInfo = currentDebugInfo;\n      null != debugInfo &&\n        (currentDebugInfo =\n          null === previousDebugInfo\n            ? debugInfo\n            : previousDebugInfo.concat(debugInfo));\n      return previousDebugInfo;\n    }\n    function validateFragmentProps(element, fiber, returnFiber) {\n      for (var keys = Object.keys(element.props), i = 0; i < keys.length; i++) {\n        var key = keys[i];\n        if (\"children\" !== key && \"key\" !== key) {\n          null === fiber &&\n            ((fiber = createFiberFromElement(element, returnFiber.mode, 0)),\n            (fiber._debugInfo = currentDebugInfo),\n            (fiber.return = returnFiber));\n          runWithFiberInDEV(\n            fiber,\n            function (erroredKey) {\n              console.error(\n                \"Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.\",\n                erroredKey\n              );\n            },\n            key\n          );\n          break;\n        }\n      }\n    }\n    function unwrapThenable(thenable) {\n      var index = thenableIndexCounter$1;\n      thenableIndexCounter$1 += 1;\n      null === thenableState$1 && (thenableState$1 = createThenableState());\n      return trackUsedThenable(thenableState$1, thenable, index);\n    }\n    function coerceRef(workInProgress, element) {\n      element = element.props.ref;\n      workInProgress.ref = void 0 !== element ? element : null;\n    }\n    function throwOnInvalidObjectType(returnFiber, newChild) {\n      if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n        throw Error(\n          'A React Element from an older version of React was rendered. This is not supported. It can happen if:\\n- Multiple copies of the \"react\" package is used.\\n- A library pre-bundled an old copy of \"react\" or \"react/jsx-runtime\".\\n- A compiler tries to \"inline\" JSX instead of using the runtime.'\n        );\n      returnFiber = Object.prototype.toString.call(newChild);\n      throw Error(\n        \"Objects are not valid as a React child (found: \" +\n          (\"[object Object]\" === returnFiber\n            ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n            : returnFiber) +\n          \"). If you meant to render a collection of children, use an array instead.\"\n      );\n    }\n    function warnOnFunctionType(returnFiber, invalidChild) {\n      var parentName = getComponentNameFromFiber(returnFiber) || \"Component\";\n      ownerHasFunctionTypeWarning[parentName] ||\n        ((ownerHasFunctionTypeWarning[parentName] = !0),\n        (invalidChild =\n          invalidChild.displayName || invalidChild.name || \"Component\"),\n        3 === returnFiber.tag\n          ? console.error(\n              \"Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.\\n  root.render(%s)\",\n              invalidChild,\n              invalidChild,\n              invalidChild\n            )\n          : console.error(\n              \"Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.\\n  <%s>{%s}</%s>\",\n              invalidChild,\n              invalidChild,\n              parentName,\n              invalidChild,\n              parentName\n            ));\n    }\n    function warnOnSymbolType(returnFiber, invalidChild) {\n      var parentName = getComponentNameFromFiber(returnFiber) || \"Component\";\n      ownerHasSymbolTypeWarning[parentName] ||\n        ((ownerHasSymbolTypeWarning[parentName] = !0),\n        (invalidChild = String(invalidChild)),\n        3 === returnFiber.tag\n          ? console.error(\n              \"Symbols are not valid as a React child.\\n  root.render(%s)\",\n              invalidChild\n            )\n          : console.error(\n              \"Symbols are not valid as a React child.\\n  <%s>%s</%s>\",\n              parentName,\n              invalidChild,\n              parentName\n            ));\n    }\n    function createChildReconciler(shouldTrackSideEffects) {\n      function deleteChild(returnFiber, childToDelete) {\n        if (shouldTrackSideEffects) {\n          var deletions = returnFiber.deletions;\n          null === deletions\n            ? ((returnFiber.deletions = [childToDelete]),\n              (returnFiber.flags |= 16))\n            : deletions.push(childToDelete);\n        }\n      }\n      function deleteRemainingChildren(returnFiber, currentFirstChild) {\n        if (!shouldTrackSideEffects) return null;\n        for (; null !== currentFirstChild; )\n          deleteChild(returnFiber, currentFirstChild),\n            (currentFirstChild = currentFirstChild.sibling);\n        return null;\n      }\n      function mapRemainingChildren(currentFirstChild) {\n        for (var existingChildren = new Map(); null !== currentFirstChild; )\n          null !== currentFirstChild.key\n            ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n            : existingChildren.set(currentFirstChild.index, currentFirstChild),\n            (currentFirstChild = currentFirstChild.sibling);\n        return existingChildren;\n      }\n      function useFiber(fiber, pendingProps) {\n        fiber = createWorkInProgress(fiber, pendingProps);\n        fiber.index = 0;\n        fiber.sibling = null;\n        return fiber;\n      }\n      function placeChild(newFiber, lastPlacedIndex, newIndex) {\n        newFiber.index = newIndex;\n        if (!shouldTrackSideEffects)\n          return (newFiber.flags |= 1048576), lastPlacedIndex;\n        newIndex = newFiber.alternate;\n        if (null !== newIndex)\n          return (\n            (newIndex = newIndex.index),\n            newIndex < lastPlacedIndex\n              ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n              : newIndex\n          );\n        newFiber.flags |= 67108866;\n        return lastPlacedIndex;\n      }\n      function placeSingleChild(newFiber) {\n        shouldTrackSideEffects &&\n          null === newFiber.alternate &&\n          (newFiber.flags |= 67108866);\n        return newFiber;\n      }\n      function updateTextNode(returnFiber, current, textContent, lanes) {\n        if (null === current || 6 !== current.tag)\n          return (\n            (current = createFiberFromText(\n              textContent,\n              returnFiber.mode,\n              lanes\n            )),\n            (current.return = returnFiber),\n            (current._debugOwner = returnFiber),\n            (current._debugTask = returnFiber._debugTask),\n            (current._debugInfo = currentDebugInfo),\n            current\n          );\n        current = useFiber(current, textContent);\n        current.return = returnFiber;\n        current._debugInfo = currentDebugInfo;\n        return current;\n      }\n      function updateElement(returnFiber, current, element, lanes) {\n        var elementType = element.type;\n        if (elementType === REACT_FRAGMENT_TYPE)\n          return (\n            (current = updateFragment(\n              returnFiber,\n              current,\n              element.props.children,\n              lanes,\n              element.key\n            )),\n            validateFragmentProps(element, current, returnFiber),\n            current\n          );\n        if (\n          null !== current &&\n          (current.elementType === elementType ||\n            isCompatibleFamilyForHotReloading(current, element) ||\n            (\"object\" === typeof elementType &&\n              null !== elementType &&\n              elementType.$$typeof === REACT_LAZY_TYPE &&\n              callLazyInitInDEV(elementType) === current.type))\n        )\n          return (\n            (current = useFiber(current, element.props)),\n            coerceRef(current, element),\n            (current.return = returnFiber),\n            (current._debugOwner = element._owner),\n            (current._debugInfo = currentDebugInfo),\n            current\n          );\n        current = createFiberFromElement(element, returnFiber.mode, lanes);\n        coerceRef(current, element);\n        current.return = returnFiber;\n        current._debugInfo = currentDebugInfo;\n        return current;\n      }\n      function updatePortal(returnFiber, current, portal, lanes) {\n        if (\n          null === current ||\n          4 !== current.tag ||\n          current.stateNode.containerInfo !== portal.containerInfo ||\n          current.stateNode.implementation !== portal.implementation\n        )\n          return (\n            (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n            (current.return = returnFiber),\n            (current._debugInfo = currentDebugInfo),\n            current\n          );\n        current = useFiber(current, portal.children || []);\n        current.return = returnFiber;\n        current._debugInfo = currentDebugInfo;\n        return current;\n      }\n      function updateFragment(returnFiber, current, fragment, lanes, key) {\n        if (null === current || 7 !== current.tag)\n          return (\n            (current = createFiberFromFragment(\n              fragment,\n              returnFiber.mode,\n              lanes,\n              key\n            )),\n            (current.return = returnFiber),\n            (current._debugOwner = returnFiber),\n            (current._debugTask = returnFiber._debugTask),\n            (current._debugInfo = currentDebugInfo),\n            current\n          );\n        current = useFiber(current, fragment);\n        current.return = returnFiber;\n        current._debugInfo = currentDebugInfo;\n        return current;\n      }\n      function createChild(returnFiber, newChild, lanes) {\n        if (\n          (\"string\" === typeof newChild && \"\" !== newChild) ||\n          \"number\" === typeof newChild ||\n          \"bigint\" === typeof newChild\n        )\n          return (\n            (newChild = createFiberFromText(\n              \"\" + newChild,\n              returnFiber.mode,\n              lanes\n            )),\n            (newChild.return = returnFiber),\n            (newChild._debugOwner = returnFiber),\n            (newChild._debugTask = returnFiber._debugTask),\n            (newChild._debugInfo = currentDebugInfo),\n            newChild\n          );\n        if (\"object\" === typeof newChild && null !== newChild) {\n          switch (newChild.$$typeof) {\n            case REACT_ELEMENT_TYPE:\n              return (\n                (lanes = createFiberFromElement(\n                  newChild,\n                  returnFiber.mode,\n                  lanes\n                )),\n                coerceRef(lanes, newChild),\n                (lanes.return = returnFiber),\n                (returnFiber = pushDebugInfo(newChild._debugInfo)),\n                (lanes._debugInfo = currentDebugInfo),\n                (currentDebugInfo = returnFiber),\n                lanes\n              );\n            case REACT_PORTAL_TYPE:\n              return (\n                (newChild = createFiberFromPortal(\n                  newChild,\n                  returnFiber.mode,\n                  lanes\n                )),\n                (newChild.return = returnFiber),\n                (newChild._debugInfo = currentDebugInfo),\n                newChild\n              );\n            case REACT_LAZY_TYPE:\n              var _prevDebugInfo = pushDebugInfo(newChild._debugInfo);\n              newChild = callLazyInitInDEV(newChild);\n              returnFiber = createChild(returnFiber, newChild, lanes);\n              currentDebugInfo = _prevDebugInfo;\n              return returnFiber;\n          }\n          if (isArrayImpl(newChild) || getIteratorFn(newChild))\n            return (\n              (lanes = createFiberFromFragment(\n                newChild,\n                returnFiber.mode,\n                lanes,\n                null\n              )),\n              (lanes.return = returnFiber),\n              (lanes._debugOwner = returnFiber),\n              (lanes._debugTask = returnFiber._debugTask),\n              (returnFiber = pushDebugInfo(newChild._debugInfo)),\n              (lanes._debugInfo = currentDebugInfo),\n              (currentDebugInfo = returnFiber),\n              lanes\n            );\n          if (\"function\" === typeof newChild.then)\n            return (\n              (_prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n              (returnFiber = createChild(\n                returnFiber,\n                unwrapThenable(newChild),\n                lanes\n              )),\n              (currentDebugInfo = _prevDebugInfo),\n              returnFiber\n            );\n          if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n            return createChild(\n              returnFiber,\n              readContextDuringReconciliation(returnFiber, newChild),\n              lanes\n            );\n          throwOnInvalidObjectType(returnFiber, newChild);\n        }\n        \"function\" === typeof newChild &&\n          warnOnFunctionType(returnFiber, newChild);\n        \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n        return null;\n      }\n      function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n        var key = null !== oldFiber ? oldFiber.key : null;\n        if (\n          (\"string\" === typeof newChild && \"\" !== newChild) ||\n          \"number\" === typeof newChild ||\n          \"bigint\" === typeof newChild\n        )\n          return null !== key\n            ? null\n            : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n        if (\"object\" === typeof newChild && null !== newChild) {\n          switch (newChild.$$typeof) {\n            case REACT_ELEMENT_TYPE:\n              return newChild.key === key\n                ? ((key = pushDebugInfo(newChild._debugInfo)),\n                  (returnFiber = updateElement(\n                    returnFiber,\n                    oldFiber,\n                    newChild,\n                    lanes\n                  )),\n                  (currentDebugInfo = key),\n                  returnFiber)\n                : null;\n            case REACT_PORTAL_TYPE:\n              return newChild.key === key\n                ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n                : null;\n            case REACT_LAZY_TYPE:\n              return (\n                (key = pushDebugInfo(newChild._debugInfo)),\n                (newChild = callLazyInitInDEV(newChild)),\n                (returnFiber = updateSlot(\n                  returnFiber,\n                  oldFiber,\n                  newChild,\n                  lanes\n                )),\n                (currentDebugInfo = key),\n                returnFiber\n              );\n          }\n          if (isArrayImpl(newChild) || getIteratorFn(newChild)) {\n            if (null !== key) return null;\n            key = pushDebugInfo(newChild._debugInfo);\n            returnFiber = updateFragment(\n              returnFiber,\n              oldFiber,\n              newChild,\n              lanes,\n              null\n            );\n            currentDebugInfo = key;\n            return returnFiber;\n          }\n          if (\"function\" === typeof newChild.then)\n            return (\n              (key = pushDebugInfo(newChild._debugInfo)),\n              (returnFiber = updateSlot(\n                returnFiber,\n                oldFiber,\n                unwrapThenable(newChild),\n                lanes\n              )),\n              (currentDebugInfo = key),\n              returnFiber\n            );\n          if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n            return updateSlot(\n              returnFiber,\n              oldFiber,\n              readContextDuringReconciliation(returnFiber, newChild),\n              lanes\n            );\n          throwOnInvalidObjectType(returnFiber, newChild);\n        }\n        \"function\" === typeof newChild &&\n          warnOnFunctionType(returnFiber, newChild);\n        \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n        return null;\n      }\n      function updateFromMap(\n        existingChildren,\n        returnFiber,\n        newIdx,\n        newChild,\n        lanes\n      ) {\n        if (\n          (\"string\" === typeof newChild && \"\" !== newChild) ||\n          \"number\" === typeof newChild ||\n          \"bigint\" === typeof newChild\n        )\n          return (\n            (existingChildren = existingChildren.get(newIdx) || null),\n            updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n          );\n        if (\"object\" === typeof newChild && null !== newChild) {\n          switch (newChild.$$typeof) {\n            case REACT_ELEMENT_TYPE:\n              return (\n                (newIdx =\n                  existingChildren.get(\n                    null === newChild.key ? newIdx : newChild.key\n                  ) || null),\n                (existingChildren = pushDebugInfo(newChild._debugInfo)),\n                (returnFiber = updateElement(\n                  returnFiber,\n                  newIdx,\n                  newChild,\n                  lanes\n                )),\n                (currentDebugInfo = existingChildren),\n                returnFiber\n              );\n            case REACT_PORTAL_TYPE:\n              return (\n                (existingChildren =\n                  existingChildren.get(\n                    null === newChild.key ? newIdx : newChild.key\n                  ) || null),\n                updatePortal(returnFiber, existingChildren, newChild, lanes)\n              );\n            case REACT_LAZY_TYPE:\n              var _prevDebugInfo7 = pushDebugInfo(newChild._debugInfo);\n              newChild = callLazyInitInDEV(newChild);\n              returnFiber = updateFromMap(\n                existingChildren,\n                returnFiber,\n                newIdx,\n                newChild,\n                lanes\n              );\n              currentDebugInfo = _prevDebugInfo7;\n              return returnFiber;\n          }\n          if (isArrayImpl(newChild) || getIteratorFn(newChild))\n            return (\n              (newIdx = existingChildren.get(newIdx) || null),\n              (existingChildren = pushDebugInfo(newChild._debugInfo)),\n              (returnFiber = updateFragment(\n                returnFiber,\n                newIdx,\n                newChild,\n                lanes,\n                null\n              )),\n              (currentDebugInfo = existingChildren),\n              returnFiber\n            );\n          if (\"function\" === typeof newChild.then)\n            return (\n              (_prevDebugInfo7 = pushDebugInfo(newChild._debugInfo)),\n              (returnFiber = updateFromMap(\n                existingChildren,\n                returnFiber,\n                newIdx,\n                unwrapThenable(newChild),\n                lanes\n              )),\n              (currentDebugInfo = _prevDebugInfo7),\n              returnFiber\n            );\n          if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n            return updateFromMap(\n              existingChildren,\n              returnFiber,\n              newIdx,\n              readContextDuringReconciliation(returnFiber, newChild),\n              lanes\n            );\n          throwOnInvalidObjectType(returnFiber, newChild);\n        }\n        \"function\" === typeof newChild &&\n          warnOnFunctionType(returnFiber, newChild);\n        \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n        return null;\n      }\n      function warnOnInvalidKey(returnFiber, workInProgress, child, knownKeys) {\n        if (\"object\" !== typeof child || null === child) return knownKeys;\n        switch (child.$$typeof) {\n          case REACT_ELEMENT_TYPE:\n          case REACT_PORTAL_TYPE:\n            warnForMissingKey(returnFiber, workInProgress, child);\n            var key = child.key;\n            if (\"string\" !== typeof key) break;\n            if (null === knownKeys) {\n              knownKeys = new Set();\n              knownKeys.add(key);\n              break;\n            }\n            if (!knownKeys.has(key)) {\n              knownKeys.add(key);\n              break;\n            }\n            runWithFiberInDEV(workInProgress, function () {\n              console.error(\n                \"Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted \\u2014 the behavior is unsupported and could change in a future version.\",\n                key\n              );\n            });\n            break;\n          case REACT_LAZY_TYPE:\n            (child = callLazyInitInDEV(child)),\n              warnOnInvalidKey(returnFiber, workInProgress, child, knownKeys);\n        }\n        return knownKeys;\n      }\n      function reconcileChildrenArray(\n        returnFiber,\n        currentFirstChild,\n        newChildren,\n        lanes\n      ) {\n        for (\n          var knownKeys = null,\n            resultingFirstChild = null,\n            previousNewFiber = null,\n            oldFiber = currentFirstChild,\n            newIdx = (currentFirstChild = 0),\n            nextOldFiber = null;\n          null !== oldFiber && newIdx < newChildren.length;\n          newIdx++\n        ) {\n          oldFiber.index > newIdx\n            ? ((nextOldFiber = oldFiber), (oldFiber = null))\n            : (nextOldFiber = oldFiber.sibling);\n          var newFiber = updateSlot(\n            returnFiber,\n            oldFiber,\n            newChildren[newIdx],\n            lanes\n          );\n          if (null === newFiber) {\n            null === oldFiber && (oldFiber = nextOldFiber);\n            break;\n          }\n          knownKeys = warnOnInvalidKey(\n            returnFiber,\n            newFiber,\n            newChildren[newIdx],\n            knownKeys\n          );\n          shouldTrackSideEffects &&\n            oldFiber &&\n            null === newFiber.alternate &&\n            deleteChild(returnFiber, oldFiber);\n          currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n          null === previousNewFiber\n            ? (resultingFirstChild = newFiber)\n            : (previousNewFiber.sibling = newFiber);\n          previousNewFiber = newFiber;\n          oldFiber = nextOldFiber;\n        }\n        if (newIdx === newChildren.length)\n          return (\n            deleteRemainingChildren(returnFiber, oldFiber),\n            isHydrating && pushTreeFork(returnFiber, newIdx),\n            resultingFirstChild\n          );\n        if (null === oldFiber) {\n          for (; newIdx < newChildren.length; newIdx++)\n            (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n              null !== oldFiber &&\n                ((knownKeys = warnOnInvalidKey(\n                  returnFiber,\n                  oldFiber,\n                  newChildren[newIdx],\n                  knownKeys\n                )),\n                (currentFirstChild = placeChild(\n                  oldFiber,\n                  currentFirstChild,\n                  newIdx\n                )),\n                null === previousNewFiber\n                  ? (resultingFirstChild = oldFiber)\n                  : (previousNewFiber.sibling = oldFiber),\n                (previousNewFiber = oldFiber));\n          isHydrating && pushTreeFork(returnFiber, newIdx);\n          return resultingFirstChild;\n        }\n        for (\n          oldFiber = mapRemainingChildren(oldFiber);\n          newIdx < newChildren.length;\n          newIdx++\n        )\n          (nextOldFiber = updateFromMap(\n            oldFiber,\n            returnFiber,\n            newIdx,\n            newChildren[newIdx],\n            lanes\n          )),\n            null !== nextOldFiber &&\n              ((knownKeys = warnOnInvalidKey(\n                returnFiber,\n                nextOldFiber,\n                newChildren[newIdx],\n                knownKeys\n              )),\n              shouldTrackSideEffects &&\n                null !== nextOldFiber.alternate &&\n                oldFiber.delete(\n                  null === nextOldFiber.key ? newIdx : nextOldFiber.key\n                ),\n              (currentFirstChild = placeChild(\n                nextOldFiber,\n                currentFirstChild,\n                newIdx\n              )),\n              null === previousNewFiber\n                ? (resultingFirstChild = nextOldFiber)\n                : (previousNewFiber.sibling = nextOldFiber),\n              (previousNewFiber = nextOldFiber));\n        shouldTrackSideEffects &&\n          oldFiber.forEach(function (child) {\n            return deleteChild(returnFiber, child);\n          });\n        isHydrating && pushTreeFork(returnFiber, newIdx);\n        return resultingFirstChild;\n      }\n      function reconcileChildrenIterator(\n        returnFiber,\n        currentFirstChild,\n        newChildren,\n        lanes\n      ) {\n        if (null == newChildren)\n          throw Error(\"An iterable object provided no iterator.\");\n        for (\n          var resultingFirstChild = null,\n            previousNewFiber = null,\n            oldFiber = currentFirstChild,\n            newIdx = (currentFirstChild = 0),\n            nextOldFiber = null,\n            knownKeys = null,\n            step = newChildren.next();\n          null !== oldFiber && !step.done;\n          newIdx++, step = newChildren.next()\n        ) {\n          oldFiber.index > newIdx\n            ? ((nextOldFiber = oldFiber), (oldFiber = null))\n            : (nextOldFiber = oldFiber.sibling);\n          var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n          if (null === newFiber) {\n            null === oldFiber && (oldFiber = nextOldFiber);\n            break;\n          }\n          knownKeys = warnOnInvalidKey(\n            returnFiber,\n            newFiber,\n            step.value,\n            knownKeys\n          );\n          shouldTrackSideEffects &&\n            oldFiber &&\n            null === newFiber.alternate &&\n            deleteChild(returnFiber, oldFiber);\n          currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n          null === previousNewFiber\n            ? (resultingFirstChild = newFiber)\n            : (previousNewFiber.sibling = newFiber);\n          previousNewFiber = newFiber;\n          oldFiber = nextOldFiber;\n        }\n        if (step.done)\n          return (\n            deleteRemainingChildren(returnFiber, oldFiber),\n            isHydrating && pushTreeFork(returnFiber, newIdx),\n            resultingFirstChild\n          );\n        if (null === oldFiber) {\n          for (; !step.done; newIdx++, step = newChildren.next())\n            (oldFiber = createChild(returnFiber, step.value, lanes)),\n              null !== oldFiber &&\n                ((knownKeys = warnOnInvalidKey(\n                  returnFiber,\n                  oldFiber,\n                  step.value,\n                  knownKeys\n                )),\n                (currentFirstChild = placeChild(\n                  oldFiber,\n                  currentFirstChild,\n                  newIdx\n                )),\n                null === previousNewFiber\n                  ? (resultingFirstChild = oldFiber)\n                  : (previousNewFiber.sibling = oldFiber),\n                (previousNewFiber = oldFiber));\n          isHydrating && pushTreeFork(returnFiber, newIdx);\n          return resultingFirstChild;\n        }\n        for (\n          oldFiber = mapRemainingChildren(oldFiber);\n          !step.done;\n          newIdx++, step = newChildren.next()\n        )\n          (nextOldFiber = updateFromMap(\n            oldFiber,\n            returnFiber,\n            newIdx,\n            step.value,\n            lanes\n          )),\n            null !== nextOldFiber &&\n              ((knownKeys = warnOnInvalidKey(\n                returnFiber,\n                nextOldFiber,\n                step.value,\n                knownKeys\n              )),\n              shouldTrackSideEffects &&\n                null !== nextOldFiber.alternate &&\n                oldFiber.delete(\n                  null === nextOldFiber.key ? newIdx : nextOldFiber.key\n                ),\n              (currentFirstChild = placeChild(\n                nextOldFiber,\n                currentFirstChild,\n                newIdx\n              )),\n              null === previousNewFiber\n                ? (resultingFirstChild = nextOldFiber)\n                : (previousNewFiber.sibling = nextOldFiber),\n              (previousNewFiber = nextOldFiber));\n        shouldTrackSideEffects &&\n          oldFiber.forEach(function (child) {\n            return deleteChild(returnFiber, child);\n          });\n        isHydrating && pushTreeFork(returnFiber, newIdx);\n        return resultingFirstChild;\n      }\n      function reconcileChildFibersImpl(\n        returnFiber,\n        currentFirstChild,\n        newChild,\n        lanes\n      ) {\n        \"object\" === typeof newChild &&\n          null !== newChild &&\n          newChild.type === REACT_FRAGMENT_TYPE &&\n          null === newChild.key &&\n          (validateFragmentProps(newChild, null, returnFiber),\n          (newChild = newChild.props.children));\n        if (\"object\" === typeof newChild && null !== newChild) {\n          switch (newChild.$$typeof) {\n            case REACT_ELEMENT_TYPE:\n              var prevDebugInfo = pushDebugInfo(newChild._debugInfo);\n              a: {\n                for (var key = newChild.key; null !== currentFirstChild; ) {\n                  if (currentFirstChild.key === key) {\n                    key = newChild.type;\n                    if (key === REACT_FRAGMENT_TYPE) {\n                      if (7 === currentFirstChild.tag) {\n                        deleteRemainingChildren(\n                          returnFiber,\n                          currentFirstChild.sibling\n                        );\n                        lanes = useFiber(\n                          currentFirstChild,\n                          newChild.props.children\n                        );\n                        lanes.return = returnFiber;\n                        lanes._debugOwner = newChild._owner;\n                        lanes._debugInfo = currentDebugInfo;\n                        validateFragmentProps(newChild, lanes, returnFiber);\n                        returnFiber = lanes;\n                        break a;\n                      }\n                    } else if (\n                      currentFirstChild.elementType === key ||\n                      isCompatibleFamilyForHotReloading(\n                        currentFirstChild,\n                        newChild\n                      ) ||\n                      (\"object\" === typeof key &&\n                        null !== key &&\n                        key.$$typeof === REACT_LAZY_TYPE &&\n                        callLazyInitInDEV(key) === currentFirstChild.type)\n                    ) {\n                      deleteRemainingChildren(\n                        returnFiber,\n                        currentFirstChild.sibling\n                      );\n                      lanes = useFiber(currentFirstChild, newChild.props);\n                      coerceRef(lanes, newChild);\n                      lanes.return = returnFiber;\n                      lanes._debugOwner = newChild._owner;\n                      lanes._debugInfo = currentDebugInfo;\n                      returnFiber = lanes;\n                      break a;\n                    }\n                    deleteRemainingChildren(returnFiber, currentFirstChild);\n                    break;\n                  } else deleteChild(returnFiber, currentFirstChild);\n                  currentFirstChild = currentFirstChild.sibling;\n                }\n                newChild.type === REACT_FRAGMENT_TYPE\n                  ? ((lanes = createFiberFromFragment(\n                      newChild.props.children,\n                      returnFiber.mode,\n                      lanes,\n                      newChild.key\n                    )),\n                    (lanes.return = returnFiber),\n                    (lanes._debugOwner = returnFiber),\n                    (lanes._debugTask = returnFiber._debugTask),\n                    (lanes._debugInfo = currentDebugInfo),\n                    validateFragmentProps(newChild, lanes, returnFiber),\n                    (returnFiber = lanes))\n                  : ((lanes = createFiberFromElement(\n                      newChild,\n                      returnFiber.mode,\n                      lanes\n                    )),\n                    coerceRef(lanes, newChild),\n                    (lanes.return = returnFiber),\n                    (lanes._debugInfo = currentDebugInfo),\n                    (returnFiber = lanes));\n              }\n              returnFiber = placeSingleChild(returnFiber);\n              currentDebugInfo = prevDebugInfo;\n              return returnFiber;\n            case REACT_PORTAL_TYPE:\n              a: {\n                prevDebugInfo = newChild;\n                for (\n                  newChild = prevDebugInfo.key;\n                  null !== currentFirstChild;\n\n                ) {\n                  if (currentFirstChild.key === newChild)\n                    if (\n                      4 === currentFirstChild.tag &&\n                      currentFirstChild.stateNode.containerInfo ===\n                        prevDebugInfo.containerInfo &&\n                      currentFirstChild.stateNode.implementation ===\n                        prevDebugInfo.implementation\n                    ) {\n                      deleteRemainingChildren(\n                        returnFiber,\n                        currentFirstChild.sibling\n                      );\n                      lanes = useFiber(\n                        currentFirstChild,\n                        prevDebugInfo.children || []\n                      );\n                      lanes.return = returnFiber;\n                      returnFiber = lanes;\n                      break a;\n                    } else {\n                      deleteRemainingChildren(returnFiber, currentFirstChild);\n                      break;\n                    }\n                  else deleteChild(returnFiber, currentFirstChild);\n                  currentFirstChild = currentFirstChild.sibling;\n                }\n                lanes = createFiberFromPortal(\n                  prevDebugInfo,\n                  returnFiber.mode,\n                  lanes\n                );\n                lanes.return = returnFiber;\n                returnFiber = lanes;\n              }\n              return placeSingleChild(returnFiber);\n            case REACT_LAZY_TYPE:\n              return (\n                (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n                (newChild = callLazyInitInDEV(newChild)),\n                (returnFiber = reconcileChildFibersImpl(\n                  returnFiber,\n                  currentFirstChild,\n                  newChild,\n                  lanes\n                )),\n                (currentDebugInfo = prevDebugInfo),\n                returnFiber\n              );\n          }\n          if (isArrayImpl(newChild))\n            return (\n              (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n              (returnFiber = reconcileChildrenArray(\n                returnFiber,\n                currentFirstChild,\n                newChild,\n                lanes\n              )),\n              (currentDebugInfo = prevDebugInfo),\n              returnFiber\n            );\n          if (getIteratorFn(newChild)) {\n            prevDebugInfo = pushDebugInfo(newChild._debugInfo);\n            key = getIteratorFn(newChild);\n            if (\"function\" !== typeof key)\n              throw Error(\n                \"An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.\"\n              );\n            var newChildren = key.call(newChild);\n            if (newChildren === newChild) {\n              if (\n                0 !== returnFiber.tag ||\n                \"[object GeneratorFunction]\" !==\n                  Object.prototype.toString.call(returnFiber.type) ||\n                \"[object Generator]\" !==\n                  Object.prototype.toString.call(newChildren)\n              )\n                didWarnAboutGenerators ||\n                  console.error(\n                    \"Using Iterators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. You can also use an Iterable that can iterate multiple times over the same items.\"\n                  ),\n                  (didWarnAboutGenerators = !0);\n            } else\n              newChild.entries !== key ||\n                didWarnAboutMaps ||\n                (console.error(\n                  \"Using Maps as children is not supported. Use an array of keyed ReactElements instead.\"\n                ),\n                (didWarnAboutMaps = !0));\n            returnFiber = reconcileChildrenIterator(\n              returnFiber,\n              currentFirstChild,\n              newChildren,\n              lanes\n            );\n            currentDebugInfo = prevDebugInfo;\n            return returnFiber;\n          }\n          if (\"function\" === typeof newChild.then)\n            return (\n              (prevDebugInfo = pushDebugInfo(newChild._debugInfo)),\n              (returnFiber = reconcileChildFibersImpl(\n                returnFiber,\n                currentFirstChild,\n                unwrapThenable(newChild),\n                lanes\n              )),\n              (currentDebugInfo = prevDebugInfo),\n              returnFiber\n            );\n          if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n            return reconcileChildFibersImpl(\n              returnFiber,\n              currentFirstChild,\n              readContextDuringReconciliation(returnFiber, newChild),\n              lanes\n            );\n          throwOnInvalidObjectType(returnFiber, newChild);\n        }\n        if (\n          (\"string\" === typeof newChild && \"\" !== newChild) ||\n          \"number\" === typeof newChild ||\n          \"bigint\" === typeof newChild\n        )\n          return (\n            (prevDebugInfo = \"\" + newChild),\n            null !== currentFirstChild && 6 === currentFirstChild.tag\n              ? (deleteRemainingChildren(\n                  returnFiber,\n                  currentFirstChild.sibling\n                ),\n                (lanes = useFiber(currentFirstChild, prevDebugInfo)),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes))\n              : (deleteRemainingChildren(returnFiber, currentFirstChild),\n                (lanes = createFiberFromText(\n                  prevDebugInfo,\n                  returnFiber.mode,\n                  lanes\n                )),\n                (lanes.return = returnFiber),\n                (lanes._debugOwner = returnFiber),\n                (lanes._debugTask = returnFiber._debugTask),\n                (lanes._debugInfo = currentDebugInfo),\n                (returnFiber = lanes)),\n            placeSingleChild(returnFiber)\n          );\n        \"function\" === typeof newChild &&\n          warnOnFunctionType(returnFiber, newChild);\n        \"symbol\" === typeof newChild && warnOnSymbolType(returnFiber, newChild);\n        return deleteRemainingChildren(returnFiber, currentFirstChild);\n      }\n      return function (returnFiber, currentFirstChild, newChild, lanes) {\n        var prevDebugInfo = currentDebugInfo;\n        currentDebugInfo = null;\n        try {\n          thenableIndexCounter$1 = 0;\n          var firstChildFiber = reconcileChildFibersImpl(\n            returnFiber,\n            currentFirstChild,\n            newChild,\n            lanes\n          );\n          thenableState$1 = null;\n          return firstChildFiber;\n        } catch (x) {\n          if (x === SuspenseException || x === SuspenseActionException) throw x;\n          var fiber = createFiber(29, x, null, returnFiber.mode);\n          fiber.lanes = lanes;\n          fiber.return = returnFiber;\n          var debugInfo = (fiber._debugInfo = currentDebugInfo);\n          fiber._debugOwner = returnFiber._debugOwner;\n          fiber._debugTask = returnFiber._debugTask;\n          if (null != debugInfo)\n            for (var i = debugInfo.length - 1; 0 <= i; i--)\n              if (\"string\" === typeof debugInfo[i].stack) {\n                fiber._debugOwner = debugInfo[i];\n                fiber._debugTask = debugInfo[i].debugTask;\n                break;\n              }\n          return fiber;\n        } finally {\n          currentDebugInfo = prevDebugInfo;\n        }\n      };\n    }\n    function validateSuspenseListNestedChild(childSlot, index) {\n      var isAnArray = isArrayImpl(childSlot);\n      childSlot = !isAnArray && \"function\" === typeof getIteratorFn(childSlot);\n      return isAnArray || childSlot\n        ? ((isAnArray = isAnArray ? \"array\" : \"iterable\"),\n          console.error(\n            \"A nested %s was passed to row #%s in <SuspenseList />. Wrap it in an additional SuspenseList to configure its revealOrder: <SuspenseList revealOrder=...> ... <SuspenseList revealOrder=...>{%s}</SuspenseList> ... </SuspenseList>\",\n            isAnArray,\n            index,\n            isAnArray\n          ),\n          !1)\n        : !0;\n    }\n    function initializeUpdateQueue(fiber) {\n      fiber.updateQueue = {\n        baseState: fiber.memoizedState,\n        firstBaseUpdate: null,\n        lastBaseUpdate: null,\n        shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n        callbacks: null\n      };\n    }\n    function cloneUpdateQueue(current, workInProgress) {\n      current = current.updateQueue;\n      workInProgress.updateQueue === current &&\n        (workInProgress.updateQueue = {\n          baseState: current.baseState,\n          firstBaseUpdate: current.firstBaseUpdate,\n          lastBaseUpdate: current.lastBaseUpdate,\n          shared: current.shared,\n          callbacks: null\n        });\n    }\n    function createUpdate(lane) {\n      return {\n        lane: lane,\n        tag: UpdateState,\n        payload: null,\n        callback: null,\n        next: null\n      };\n    }\n    function enqueueUpdate(fiber, update, lane) {\n      var updateQueue = fiber.updateQueue;\n      if (null === updateQueue) return null;\n      updateQueue = updateQueue.shared;\n      if (\n        currentlyProcessingQueue === updateQueue &&\n        !didWarnUpdateInsideUpdate\n      ) {\n        var componentName = getComponentNameFromFiber(fiber);\n        console.error(\n          \"An update (setState, replaceState, or forceUpdate) was scheduled from inside an update function. Update functions should be pure, with zero side-effects. Consider using componentDidUpdate or a callback.\\n\\nPlease update the following component: %s\",\n          componentName\n        );\n        didWarnUpdateInsideUpdate = !0;\n      }\n      if ((executionContext & RenderContext) !== NoContext)\n        return (\n          (componentName = updateQueue.pending),\n          null === componentName\n            ? (update.next = update)\n            : ((update.next = componentName.next),\n              (componentName.next = update)),\n          (updateQueue.pending = update),\n          (update = getRootForUpdatedFiber(fiber)),\n          markUpdateLaneFromFiberToRoot(fiber, null, lane),\n          update\n        );\n      enqueueUpdate$1(fiber, updateQueue, update, lane);\n      return getRootForUpdatedFiber(fiber);\n    }\n    function entangleTransitions(root, fiber, lane) {\n      fiber = fiber.updateQueue;\n      if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n        var queueLanes = fiber.lanes;\n        queueLanes &= root.pendingLanes;\n        lane |= queueLanes;\n        fiber.lanes = lane;\n        markRootEntangled(root, lane);\n      }\n    }\n    function enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n      var queue = workInProgress.updateQueue,\n        current = workInProgress.alternate;\n      if (\n        null !== current &&\n        ((current = current.updateQueue), queue === current)\n      ) {\n        var newFirst = null,\n          newLast = null;\n        queue = queue.firstBaseUpdate;\n        if (null !== queue) {\n          do {\n            var clone = {\n              lane: queue.lane,\n              tag: queue.tag,\n              payload: queue.payload,\n              callback: null,\n              next: null\n            };\n            null === newLast\n              ? (newFirst = newLast = clone)\n              : (newLast = newLast.next = clone);\n            queue = queue.next;\n          } while (null !== queue);\n          null === newLast\n            ? (newFirst = newLast = capturedUpdate)\n            : (newLast = newLast.next = capturedUpdate);\n        } else newFirst = newLast = capturedUpdate;\n        queue = {\n          baseState: current.baseState,\n          firstBaseUpdate: newFirst,\n          lastBaseUpdate: newLast,\n          shared: current.shared,\n          callbacks: current.callbacks\n        };\n        workInProgress.updateQueue = queue;\n        return;\n      }\n      workInProgress = queue.lastBaseUpdate;\n      null === workInProgress\n        ? (queue.firstBaseUpdate = capturedUpdate)\n        : (workInProgress.next = capturedUpdate);\n      queue.lastBaseUpdate = capturedUpdate;\n    }\n    function suspendIfUpdateReadFromEntangledAsyncAction() {\n      if (didReadFromEntangledAsyncAction) {\n        var entangledActionThenable = currentEntangledActionThenable;\n        if (null !== entangledActionThenable) throw entangledActionThenable;\n      }\n    }\n    function processUpdateQueue(\n      workInProgress,\n      props,\n      instance$jscomp$0,\n      renderLanes\n    ) {\n      didReadFromEntangledAsyncAction = !1;\n      var queue = workInProgress.updateQueue;\n      hasForceUpdate = !1;\n      currentlyProcessingQueue = queue.shared;\n      var firstBaseUpdate = queue.firstBaseUpdate,\n        lastBaseUpdate = queue.lastBaseUpdate,\n        pendingQueue = queue.shared.pending;\n      if (null !== pendingQueue) {\n        queue.shared.pending = null;\n        var lastPendingUpdate = pendingQueue,\n          firstPendingUpdate = lastPendingUpdate.next;\n        lastPendingUpdate.next = null;\n        null === lastBaseUpdate\n          ? (firstBaseUpdate = firstPendingUpdate)\n          : (lastBaseUpdate.next = firstPendingUpdate);\n        lastBaseUpdate = lastPendingUpdate;\n        var current = workInProgress.alternate;\n        null !== current &&\n          ((current = current.updateQueue),\n          (pendingQueue = current.lastBaseUpdate),\n          pendingQueue !== lastBaseUpdate &&\n            (null === pendingQueue\n              ? (current.firstBaseUpdate = firstPendingUpdate)\n              : (pendingQueue.next = firstPendingUpdate),\n            (current.lastBaseUpdate = lastPendingUpdate)));\n      }\n      if (null !== firstBaseUpdate) {\n        var newState = queue.baseState;\n        lastBaseUpdate = 0;\n        current = firstPendingUpdate = lastPendingUpdate = null;\n        pendingQueue = firstBaseUpdate;\n        do {\n          var updateLane = pendingQueue.lane & -536870913,\n            isHiddenUpdate = updateLane !== pendingQueue.lane;\n          if (\n            isHiddenUpdate\n              ? (workInProgressRootRenderLanes & updateLane) === updateLane\n              : (renderLanes & updateLane) === updateLane\n          ) {\n            0 !== updateLane &&\n              updateLane === currentEntangledLane &&\n              (didReadFromEntangledAsyncAction = !0);\n            null !== current &&\n              (current = current.next =\n                {\n                  lane: 0,\n                  tag: pendingQueue.tag,\n                  payload: pendingQueue.payload,\n                  callback: null,\n                  next: null\n                });\n            a: {\n              updateLane = workInProgress;\n              var partialState = pendingQueue;\n              var nextProps = props,\n                instance = instance$jscomp$0;\n              switch (partialState.tag) {\n                case ReplaceState:\n                  partialState = partialState.payload;\n                  if (\"function\" === typeof partialState) {\n                    isDisallowedContextReadInDEV = !0;\n                    var nextState = partialState.call(\n                      instance,\n                      newState,\n                      nextProps\n                    );\n                    if (updateLane.mode & StrictLegacyMode) {\n                      setIsStrictModeForDevtools(!0);\n                      try {\n                        partialState.call(instance, newState, nextProps);\n                      } finally {\n                        setIsStrictModeForDevtools(!1);\n                      }\n                    }\n                    isDisallowedContextReadInDEV = !1;\n                    newState = nextState;\n                    break a;\n                  }\n                  newState = partialState;\n                  break a;\n                case CaptureUpdate:\n                  updateLane.flags = (updateLane.flags & -65537) | 128;\n                case UpdateState:\n                  nextState = partialState.payload;\n                  if (\"function\" === typeof nextState) {\n                    isDisallowedContextReadInDEV = !0;\n                    partialState = nextState.call(\n                      instance,\n                      newState,\n                      nextProps\n                    );\n                    if (updateLane.mode & StrictLegacyMode) {\n                      setIsStrictModeForDevtools(!0);\n                      try {\n                        nextState.call(instance, newState, nextProps);\n                      } finally {\n                        setIsStrictModeForDevtools(!1);\n                      }\n                    }\n                    isDisallowedContextReadInDEV = !1;\n                  } else partialState = nextState;\n                  if (null === partialState || void 0 === partialState) break a;\n                  newState = assign({}, newState, partialState);\n                  break a;\n                case ForceUpdate:\n                  hasForceUpdate = !0;\n              }\n            }\n            updateLane = pendingQueue.callback;\n            null !== updateLane &&\n              ((workInProgress.flags |= 64),\n              isHiddenUpdate && (workInProgress.flags |= 8192),\n              (isHiddenUpdate = queue.callbacks),\n              null === isHiddenUpdate\n                ? (queue.callbacks = [updateLane])\n                : isHiddenUpdate.push(updateLane));\n          } else\n            (isHiddenUpdate = {\n              lane: updateLane,\n              tag: pendingQueue.tag,\n              payload: pendingQueue.payload,\n              callback: pendingQueue.callback,\n              next: null\n            }),\n              null === current\n                ? ((firstPendingUpdate = current = isHiddenUpdate),\n                  (lastPendingUpdate = newState))\n                : (current = current.next = isHiddenUpdate),\n              (lastBaseUpdate |= updateLane);\n          pendingQueue = pendingQueue.next;\n          if (null === pendingQueue)\n            if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n              break;\n            else\n              (isHiddenUpdate = pendingQueue),\n                (pendingQueue = isHiddenUpdate.next),\n                (isHiddenUpdate.next = null),\n                (queue.lastBaseUpdate = isHiddenUpdate),\n                (queue.shared.pending = null);\n        } while (1);\n        null === current && (lastPendingUpdate = newState);\n        queue.baseState = lastPendingUpdate;\n        queue.firstBaseUpdate = firstPendingUpdate;\n        queue.lastBaseUpdate = current;\n        null === firstBaseUpdate && (queue.shared.lanes = 0);\n        workInProgressRootSkippedLanes |= lastBaseUpdate;\n        workInProgress.lanes = lastBaseUpdate;\n        workInProgress.memoizedState = newState;\n      }\n      currentlyProcessingQueue = null;\n    }\n    function callCallback(callback, context) {\n      if (\"function\" !== typeof callback)\n        throw Error(\n          \"Invalid argument passed as callback. Expected a function. Instead received: \" +\n            callback\n        );\n      callback.call(context);\n    }\n    function commitHiddenCallbacks(updateQueue, context) {\n      var hiddenCallbacks = updateQueue.shared.hiddenCallbacks;\n      if (null !== hiddenCallbacks)\n        for (\n          updateQueue.shared.hiddenCallbacks = null, updateQueue = 0;\n          updateQueue < hiddenCallbacks.length;\n          updateQueue++\n        )\n          callCallback(hiddenCallbacks[updateQueue], context);\n    }\n    function commitCallbacks(updateQueue, context) {\n      var callbacks = updateQueue.callbacks;\n      if (null !== callbacks)\n        for (\n          updateQueue.callbacks = null, updateQueue = 0;\n          updateQueue < callbacks.length;\n          updateQueue++\n        )\n          callCallback(callbacks[updateQueue], context);\n    }\n    function pushHiddenContext(fiber, context) {\n      var prevEntangledRenderLanes = entangledRenderLanes;\n      push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber);\n      push(currentTreeHiddenStackCursor, context, fiber);\n      entangledRenderLanes = prevEntangledRenderLanes | context.baseLanes;\n    }\n    function reuseHiddenContextOnStack(fiber) {\n      push(prevEntangledRenderLanesCursor, entangledRenderLanes, fiber);\n      push(\n        currentTreeHiddenStackCursor,\n        currentTreeHiddenStackCursor.current,\n        fiber\n      );\n    }\n    function popHiddenContext(fiber) {\n      entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n      pop(currentTreeHiddenStackCursor, fiber);\n      pop(prevEntangledRenderLanesCursor, fiber);\n    }\n    function pushPrimaryTreeSuspenseHandler(handler) {\n      var current = handler.alternate;\n      push(\n        suspenseStackCursor,\n        suspenseStackCursor.current & SubtreeSuspenseContextMask,\n        handler\n      );\n      push(suspenseHandlerStackCursor, handler, handler);\n      null === shellBoundary &&\n        (null === current || null !== currentTreeHiddenStackCursor.current\n          ? (shellBoundary = handler)\n          : null !== current.memoizedState && (shellBoundary = handler));\n    }\n    function pushDehydratedActivitySuspenseHandler(fiber) {\n      push(suspenseStackCursor, suspenseStackCursor.current, fiber);\n      push(suspenseHandlerStackCursor, fiber, fiber);\n      null === shellBoundary && (shellBoundary = fiber);\n    }\n    function pushOffscreenSuspenseHandler(fiber) {\n      22 === fiber.tag\n        ? (push(suspenseStackCursor, suspenseStackCursor.current, fiber),\n          push(suspenseHandlerStackCursor, fiber, fiber),\n          null === shellBoundary && (shellBoundary = fiber))\n        : reuseSuspenseHandlerOnStack(fiber);\n    }\n    function reuseSuspenseHandlerOnStack(fiber) {\n      push(suspenseStackCursor, suspenseStackCursor.current, fiber);\n      push(\n        suspenseHandlerStackCursor,\n        suspenseHandlerStackCursor.current,\n        fiber\n      );\n    }\n    function popSuspenseHandler(fiber) {\n      pop(suspenseHandlerStackCursor, fiber);\n      shellBoundary === fiber && (shellBoundary = null);\n      pop(suspenseStackCursor, fiber);\n    }\n    function findFirstSuspended(row) {\n      for (var node = row; null !== node; ) {\n        if (13 === node.tag) {\n          var state = node.memoizedState;\n          if (\n            null !== state &&\n            ((state = state.dehydrated),\n            null === state ||\n              isSuspenseInstancePending(state) ||\n              isSuspenseInstanceFallback(state))\n          )\n            return node;\n        } else if (\n          19 === node.tag &&\n          (\"forwards\" === node.memoizedProps.revealOrder ||\n            \"backwards\" === node.memoizedProps.revealOrder ||\n            \"unstable_legacy-backwards\" === node.memoizedProps.revealOrder ||\n            \"together\" === node.memoizedProps.revealOrder)\n        ) {\n          if (0 !== (node.flags & 128)) return node;\n        } else if (null !== node.child) {\n          node.child.return = node;\n          node = node.child;\n          continue;\n        }\n        if (node === row) break;\n        for (; null === node.sibling; ) {\n          if (null === node.return || node.return === row) return null;\n          node = node.return;\n        }\n        node.sibling.return = node.return;\n        node = node.sibling;\n      }\n      return null;\n    }\n    function mountHookTypesDev() {\n      var hookName = currentHookNameInDev;\n      null === hookTypesDev\n        ? (hookTypesDev = [hookName])\n        : hookTypesDev.push(hookName);\n    }\n    function updateHookTypesDev() {\n      var hookName = currentHookNameInDev;\n      if (\n        null !== hookTypesDev &&\n        (hookTypesUpdateIndexDev++,\n        hookTypesDev[hookTypesUpdateIndexDev] !== hookName)\n      ) {\n        var componentName = getComponentNameFromFiber(currentlyRenderingFiber);\n        if (\n          !didWarnAboutMismatchedHooksForComponent.has(componentName) &&\n          (didWarnAboutMismatchedHooksForComponent.add(componentName),\n          null !== hookTypesDev)\n        ) {\n          for (var table = \"\", i = 0; i <= hookTypesUpdateIndexDev; i++) {\n            var oldHookName = hookTypesDev[i],\n              newHookName =\n                i === hookTypesUpdateIndexDev ? hookName : oldHookName;\n            for (\n              oldHookName = i + 1 + \". \" + oldHookName;\n              30 > oldHookName.length;\n\n            )\n              oldHookName += \" \";\n            oldHookName += newHookName + \"\\n\";\n            table += oldHookName;\n          }\n          console.error(\n            \"React has detected a change in the order of Hooks called by %s. This will lead to bugs and errors if not fixed. For more information, read the Rules of Hooks: https://react.dev/link/rules-of-hooks\\n\\n   Previous render            Next render\\n   ------------------------------------------------------\\n%s   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n\",\n            componentName,\n            table\n          );\n        }\n      }\n    }\n    function checkDepsAreArrayDev(deps) {\n      void 0 === deps ||\n        null === deps ||\n        isArrayImpl(deps) ||\n        console.error(\n          \"%s received a final argument that is not an array (instead, received `%s`). When specified, the final argument must be an array.\",\n          currentHookNameInDev,\n          typeof deps\n        );\n    }\n    function warnOnUseFormStateInDev() {\n      var componentName = getComponentNameFromFiber(currentlyRenderingFiber);\n      didWarnAboutUseFormState.has(componentName) ||\n        (didWarnAboutUseFormState.add(componentName),\n        console.error(\n          \"ReactDOM.useFormState has been renamed to React.useActionState. Please update %s to use React.useActionState.\",\n          componentName\n        ));\n    }\n    function throwInvalidHookError() {\n      throw Error(\n        \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n      );\n    }\n    function areHookInputsEqual(nextDeps, prevDeps) {\n      if (ignorePreviousDependencies) return !1;\n      if (null === prevDeps)\n        return (\n          console.error(\n            \"%s received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.\",\n            currentHookNameInDev\n          ),\n          !1\n        );\n      nextDeps.length !== prevDeps.length &&\n        console.error(\n          \"The final argument passed to %s changed size between renders. The order and size of this array must remain constant.\\n\\nPrevious: %s\\nIncoming: %s\",\n          currentHookNameInDev,\n          \"[\" + prevDeps.join(\", \") + \"]\",\n          \"[\" + nextDeps.join(\", \") + \"]\"\n        );\n      for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n        if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n      return !0;\n    }\n    function renderWithHooks(\n      current,\n      workInProgress,\n      Component,\n      props,\n      secondArg,\n      nextRenderLanes\n    ) {\n      renderLanes = nextRenderLanes;\n      currentlyRenderingFiber = workInProgress;\n      hookTypesDev = null !== current ? current._debugHookTypes : null;\n      hookTypesUpdateIndexDev = -1;\n      ignorePreviousDependencies =\n        null !== current && current.type !== workInProgress.type;\n      if (\n        \"[object AsyncFunction]\" ===\n          Object.prototype.toString.call(Component) ||\n        \"[object AsyncGeneratorFunction]\" ===\n          Object.prototype.toString.call(Component)\n      )\n        (nextRenderLanes = getComponentNameFromFiber(currentlyRenderingFiber)),\n          didWarnAboutAsyncClientComponent.has(nextRenderLanes) ||\n            (didWarnAboutAsyncClientComponent.add(nextRenderLanes),\n            console.error(\n              \"%s is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.\",\n              null === nextRenderLanes\n                ? \"An unknown Component\"\n                : \"<\" + nextRenderLanes + \">\"\n            ));\n      workInProgress.memoizedState = null;\n      workInProgress.updateQueue = null;\n      workInProgress.lanes = 0;\n      ReactSharedInternals.H =\n        null !== current && null !== current.memoizedState\n          ? HooksDispatcherOnUpdateInDEV\n          : null !== hookTypesDev\n            ? HooksDispatcherOnMountWithHookTypesInDEV\n            : HooksDispatcherOnMountInDEV;\n      shouldDoubleInvokeUserFnsInHooksDEV = nextRenderLanes =\n        (workInProgress.mode & StrictLegacyMode) !== NoMode;\n      var children = callComponentInDEV(Component, props, secondArg);\n      shouldDoubleInvokeUserFnsInHooksDEV = !1;\n      didScheduleRenderPhaseUpdateDuringThisPass &&\n        (children = renderWithHooksAgain(\n          workInProgress,\n          Component,\n          props,\n          secondArg\n        ));\n      if (nextRenderLanes) {\n        setIsStrictModeForDevtools(!0);\n        try {\n          children = renderWithHooksAgain(\n            workInProgress,\n            Component,\n            props,\n            secondArg\n          );\n        } finally {\n          setIsStrictModeForDevtools(!1);\n        }\n      }\n      finishRenderingHooks(current, workInProgress);\n      return children;\n    }\n    function finishRenderingHooks(current, workInProgress) {\n      workInProgress._debugHookTypes = hookTypesDev;\n      null === workInProgress.dependencies\n        ? null !== thenableState &&\n          (workInProgress.dependencies = {\n            lanes: 0,\n            firstContext: null,\n            _debugThenableState: thenableState\n          })\n        : (workInProgress.dependencies._debugThenableState = thenableState);\n      ReactSharedInternals.H = ContextOnlyDispatcher;\n      var didRenderTooFewHooks =\n        null !== currentHook && null !== currentHook.next;\n      renderLanes = 0;\n      hookTypesDev =\n        currentHookNameInDev =\n        workInProgressHook =\n        currentHook =\n        currentlyRenderingFiber =\n          null;\n      hookTypesUpdateIndexDev = -1;\n      null !== current &&\n        (current.flags & 65011712) !== (workInProgress.flags & 65011712) &&\n        console.error(\n          \"Internal React error: Expected static flag was missing. Please notify the React team.\"\n        );\n      didScheduleRenderPhaseUpdate = !1;\n      thenableIndexCounter = 0;\n      thenableState = null;\n      if (didRenderTooFewHooks)\n        throw Error(\n          \"Rendered fewer hooks than expected. This may be caused by an accidental early return statement.\"\n        );\n      null === current ||\n        didReceiveUpdate ||\n        ((current = current.dependencies),\n        null !== current &&\n          checkIfContextChanged(current) &&\n          (didReceiveUpdate = !0));\n      needsToResetSuspendedThenableDEV\n        ? ((needsToResetSuspendedThenableDEV = !1), (current = !0))\n        : (current = !1);\n      current &&\n        ((workInProgress =\n          getComponentNameFromFiber(workInProgress) || \"Unknown\"),\n        didWarnAboutUseWrappedInTryCatch.has(workInProgress) ||\n          didWarnAboutAsyncClientComponent.has(workInProgress) ||\n          (didWarnAboutUseWrappedInTryCatch.add(workInProgress),\n          console.error(\n            \"`use` was called from inside a try/catch block. This is not allowed and can lead to unexpected behavior. To handle errors triggered by `use`, wrap your component in a error boundary.\"\n          )));\n    }\n    function renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n      currentlyRenderingFiber = workInProgress;\n      var numberOfReRenders = 0;\n      do {\n        didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n        thenableIndexCounter = 0;\n        didScheduleRenderPhaseUpdateDuringThisPass = !1;\n        if (numberOfReRenders >= RE_RENDER_LIMIT)\n          throw Error(\n            \"Too many re-renders. React limits the number of renders to prevent an infinite loop.\"\n          );\n        numberOfReRenders += 1;\n        ignorePreviousDependencies = !1;\n        workInProgressHook = currentHook = null;\n        if (null != workInProgress.updateQueue) {\n          var children = workInProgress.updateQueue;\n          children.lastEffect = null;\n          children.events = null;\n          children.stores = null;\n          null != children.memoCache && (children.memoCache.index = 0);\n        }\n        hookTypesUpdateIndexDev = -1;\n        ReactSharedInternals.H = HooksDispatcherOnRerenderInDEV;\n        children = callComponentInDEV(Component, props, secondArg);\n      } while (didScheduleRenderPhaseUpdateDuringThisPass);\n      return children;\n    }\n    function TransitionAwareHostComponent() {\n      var dispatcher = ReactSharedInternals.H,\n        maybeThenable = dispatcher.useState()[0];\n      maybeThenable =\n        \"function\" === typeof maybeThenable.then\n          ? useThenable(maybeThenable)\n          : maybeThenable;\n      dispatcher = dispatcher.useState()[0];\n      (null !== currentHook ? currentHook.memoizedState : null) !==\n        dispatcher && (currentlyRenderingFiber.flags |= 1024);\n      return maybeThenable;\n    }\n    function checkDidRenderIdHook() {\n      var didRenderIdHook = 0 !== localIdCounter;\n      localIdCounter = 0;\n      return didRenderIdHook;\n    }\n    function bailoutHooks(current, workInProgress, lanes) {\n      workInProgress.updateQueue = current.updateQueue;\n      workInProgress.flags =\n        (workInProgress.mode & StrictEffectsMode) !== NoMode\n          ? workInProgress.flags & -402655237\n          : workInProgress.flags & -2053;\n      current.lanes &= ~lanes;\n    }\n    function resetHooksOnUnwind(workInProgress) {\n      if (didScheduleRenderPhaseUpdate) {\n        for (\n          workInProgress = workInProgress.memoizedState;\n          null !== workInProgress;\n\n        ) {\n          var queue = workInProgress.queue;\n          null !== queue && (queue.pending = null);\n          workInProgress = workInProgress.next;\n        }\n        didScheduleRenderPhaseUpdate = !1;\n      }\n      renderLanes = 0;\n      hookTypesDev =\n        workInProgressHook =\n        currentHook =\n        currentlyRenderingFiber =\n          null;\n      hookTypesUpdateIndexDev = -1;\n      currentHookNameInDev = null;\n      didScheduleRenderPhaseUpdateDuringThisPass = !1;\n      thenableIndexCounter = localIdCounter = 0;\n      thenableState = null;\n    }\n    function mountWorkInProgressHook() {\n      var hook = {\n        memoizedState: null,\n        baseState: null,\n        baseQueue: null,\n        queue: null,\n        next: null\n      };\n      null === workInProgressHook\n        ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n        : (workInProgressHook = workInProgressHook.next = hook);\n      return workInProgressHook;\n    }\n    function updateWorkInProgressHook() {\n      if (null === currentHook) {\n        var nextCurrentHook = currentlyRenderingFiber.alternate;\n        nextCurrentHook =\n          null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n      } else nextCurrentHook = currentHook.next;\n      var nextWorkInProgressHook =\n        null === workInProgressHook\n          ? currentlyRenderingFiber.memoizedState\n          : workInProgressHook.next;\n      if (null !== nextWorkInProgressHook)\n        (workInProgressHook = nextWorkInProgressHook),\n          (currentHook = nextCurrentHook);\n      else {\n        if (null === nextCurrentHook) {\n          if (null === currentlyRenderingFiber.alternate)\n            throw Error(\n              \"Update hook called on initial render. This is likely a bug in React. Please file an issue.\"\n            );\n          throw Error(\"Rendered more hooks than during the previous render.\");\n        }\n        currentHook = nextCurrentHook;\n        nextCurrentHook = {\n          memoizedState: currentHook.memoizedState,\n          baseState: currentHook.baseState,\n          baseQueue: currentHook.baseQueue,\n          queue: currentHook.queue,\n          next: null\n        };\n        null === workInProgressHook\n          ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n              nextCurrentHook)\n          : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n      }\n      return workInProgressHook;\n    }\n    function createFunctionComponentUpdateQueue() {\n      return { lastEffect: null, events: null, stores: null, memoCache: null };\n    }\n    function useThenable(thenable) {\n      var index = thenableIndexCounter;\n      thenableIndexCounter += 1;\n      null === thenableState && (thenableState = createThenableState());\n      thenable = trackUsedThenable(thenableState, thenable, index);\n      index = currentlyRenderingFiber;\n      null ===\n        (null === workInProgressHook\n          ? index.memoizedState\n          : workInProgressHook.next) &&\n        ((index = index.alternate),\n        (ReactSharedInternals.H =\n          null !== index && null !== index.memoizedState\n            ? HooksDispatcherOnUpdateInDEV\n            : HooksDispatcherOnMountInDEV));\n      return thenable;\n    }\n    function use(usable) {\n      if (null !== usable && \"object\" === typeof usable) {\n        if (\"function\" === typeof usable.then) return useThenable(usable);\n        if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n      }\n      throw Error(\"An unsupported type was passed to use(): \" + String(usable));\n    }\n    function useMemoCache(size) {\n      var memoCache = null,\n        updateQueue = currentlyRenderingFiber.updateQueue;\n      null !== updateQueue && (memoCache = updateQueue.memoCache);\n      if (null == memoCache) {\n        var current = currentlyRenderingFiber.alternate;\n        null !== current &&\n          ((current = current.updateQueue),\n          null !== current &&\n            ((current = current.memoCache),\n            null != current &&\n              (memoCache = {\n                data: current.data.map(function (array) {\n                  return array.slice();\n                }),\n                index: 0\n              })));\n      }\n      null == memoCache && (memoCache = { data: [], index: 0 });\n      null === updateQueue &&\n        ((updateQueue = createFunctionComponentUpdateQueue()),\n        (currentlyRenderingFiber.updateQueue = updateQueue));\n      updateQueue.memoCache = memoCache;\n      updateQueue = memoCache.data[memoCache.index];\n      if (void 0 === updateQueue || ignorePreviousDependencies)\n        for (\n          updateQueue = memoCache.data[memoCache.index] = Array(size),\n            current = 0;\n          current < size;\n          current++\n        )\n          updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n      else\n        updateQueue.length !== size &&\n          console.error(\n            \"Expected a constant size argument for each invocation of useMemoCache. The previous cache was allocated with size %s but size %s was requested.\",\n            updateQueue.length,\n            size\n          );\n      memoCache.index++;\n      return updateQueue;\n    }\n    function basicStateReducer(state, action) {\n      return \"function\" === typeof action ? action(state) : action;\n    }\n    function mountReducer(reducer, initialArg, init) {\n      var hook = mountWorkInProgressHook();\n      if (void 0 !== init) {\n        var initialState = init(initialArg);\n        if (shouldDoubleInvokeUserFnsInHooksDEV) {\n          setIsStrictModeForDevtools(!0);\n          try {\n            init(initialArg);\n          } finally {\n            setIsStrictModeForDevtools(!1);\n          }\n        }\n      } else initialState = initialArg;\n      hook.memoizedState = hook.baseState = initialState;\n      reducer = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: reducer,\n        lastRenderedState: initialState\n      };\n      hook.queue = reducer;\n      reducer = reducer.dispatch = dispatchReducerAction.bind(\n        null,\n        currentlyRenderingFiber,\n        reducer\n      );\n      return [hook.memoizedState, reducer];\n    }\n    function updateReducer(reducer) {\n      var hook = updateWorkInProgressHook();\n      return updateReducerImpl(hook, currentHook, reducer);\n    }\n    function updateReducerImpl(hook, current, reducer) {\n      var queue = hook.queue;\n      if (null === queue)\n        throw Error(\n          \"Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)\"\n        );\n      queue.lastRenderedReducer = reducer;\n      var baseQueue = hook.baseQueue,\n        pendingQueue = queue.pending;\n      if (null !== pendingQueue) {\n        if (null !== baseQueue) {\n          var baseFirst = baseQueue.next;\n          baseQueue.next = pendingQueue.next;\n          pendingQueue.next = baseFirst;\n        }\n        current.baseQueue !== baseQueue &&\n          console.error(\n            \"Internal error: Expected work-in-progress queue to be a clone. This is a bug in React.\"\n          );\n        current.baseQueue = baseQueue = pendingQueue;\n        queue.pending = null;\n      }\n      pendingQueue = hook.baseState;\n      if (null === baseQueue) hook.memoizedState = pendingQueue;\n      else {\n        current = baseQueue.next;\n        var newBaseQueueFirst = (baseFirst = null),\n          newBaseQueueLast = null,\n          update = current,\n          didReadFromEntangledAsyncAction = !1;\n        do {\n          var updateLane = update.lane & -536870913;\n          if (\n            updateLane !== update.lane\n              ? (workInProgressRootRenderLanes & updateLane) === updateLane\n              : (renderLanes & updateLane) === updateLane\n          ) {\n            var revertLane = update.revertLane;\n            if (0 === revertLane)\n              null !== newBaseQueueLast &&\n                (newBaseQueueLast = newBaseQueueLast.next =\n                  {\n                    lane: 0,\n                    revertLane: 0,\n                    gesture: null,\n                    action: update.action,\n                    hasEagerState: update.hasEagerState,\n                    eagerState: update.eagerState,\n                    next: null\n                  }),\n                updateLane === currentEntangledLane &&\n                  (didReadFromEntangledAsyncAction = !0);\n            else if ((renderLanes & revertLane) === revertLane) {\n              update = update.next;\n              revertLane === currentEntangledLane &&\n                (didReadFromEntangledAsyncAction = !0);\n              continue;\n            } else\n              (updateLane = {\n                lane: 0,\n                revertLane: update.revertLane,\n                gesture: null,\n                action: update.action,\n                hasEagerState: update.hasEagerState,\n                eagerState: update.eagerState,\n                next: null\n              }),\n                null === newBaseQueueLast\n                  ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n                    (baseFirst = pendingQueue))\n                  : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n                (currentlyRenderingFiber.lanes |= revertLane),\n                (workInProgressRootSkippedLanes |= revertLane);\n            updateLane = update.action;\n            shouldDoubleInvokeUserFnsInHooksDEV &&\n              reducer(pendingQueue, updateLane);\n            pendingQueue = update.hasEagerState\n              ? update.eagerState\n              : reducer(pendingQueue, updateLane);\n          } else\n            (revertLane = {\n              lane: updateLane,\n              revertLane: update.revertLane,\n              gesture: update.gesture,\n              action: update.action,\n              hasEagerState: update.hasEagerState,\n              eagerState: update.eagerState,\n              next: null\n            }),\n              null === newBaseQueueLast\n                ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n                  (baseFirst = pendingQueue))\n                : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n              (currentlyRenderingFiber.lanes |= updateLane),\n              (workInProgressRootSkippedLanes |= updateLane);\n          update = update.next;\n        } while (null !== update && update !== current);\n        null === newBaseQueueLast\n          ? (baseFirst = pendingQueue)\n          : (newBaseQueueLast.next = newBaseQueueFirst);\n        if (\n          !objectIs(pendingQueue, hook.memoizedState) &&\n          ((didReceiveUpdate = !0),\n          didReadFromEntangledAsyncAction &&\n            ((reducer = currentEntangledActionThenable), null !== reducer))\n        )\n          throw reducer;\n        hook.memoizedState = pendingQueue;\n        hook.baseState = baseFirst;\n        hook.baseQueue = newBaseQueueLast;\n        queue.lastRenderedState = pendingQueue;\n      }\n      null === baseQueue && (queue.lanes = 0);\n      return [hook.memoizedState, queue.dispatch];\n    }\n    function rerenderReducer(reducer) {\n      var hook = updateWorkInProgressHook(),\n        queue = hook.queue;\n      if (null === queue)\n        throw Error(\n          \"Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)\"\n        );\n      queue.lastRenderedReducer = reducer;\n      var dispatch = queue.dispatch,\n        lastRenderPhaseUpdate = queue.pending,\n        newState = hook.memoizedState;\n      if (null !== lastRenderPhaseUpdate) {\n        queue.pending = null;\n        var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n        do\n          (newState = reducer(newState, update.action)), (update = update.next);\n        while (update !== lastRenderPhaseUpdate);\n        objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n        hook.memoizedState = newState;\n        null === hook.baseQueue && (hook.baseState = newState);\n        queue.lastRenderedState = newState;\n      }\n      return [newState, dispatch];\n    }\n    function mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n      var fiber = currentlyRenderingFiber,\n        hook = mountWorkInProgressHook();\n      if (isHydrating) {\n        if (void 0 === getServerSnapshot)\n          throw Error(\n            \"Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering.\"\n          );\n        var nextSnapshot = getServerSnapshot();\n        didWarnUncachedGetSnapshot ||\n          nextSnapshot === getServerSnapshot() ||\n          (console.error(\n            \"The result of getServerSnapshot should be cached to avoid an infinite loop\"\n          ),\n          (didWarnUncachedGetSnapshot = !0));\n      } else {\n        nextSnapshot = getSnapshot();\n        didWarnUncachedGetSnapshot ||\n          ((getServerSnapshot = getSnapshot()),\n          objectIs(nextSnapshot, getServerSnapshot) ||\n            (console.error(\n              \"The result of getSnapshot should be cached to avoid an infinite loop\"\n            ),\n            (didWarnUncachedGetSnapshot = !0)));\n        if (null === workInProgressRoot)\n          throw Error(\n            \"Expected a work-in-progress root. This is a bug in React. Please file an issue.\"\n          );\n        0 !== (workInProgressRootRenderLanes & 124) ||\n          pushStoreConsistencyCheck(fiber, getSnapshot, nextSnapshot);\n      }\n      hook.memoizedState = nextSnapshot;\n      getServerSnapshot = { value: nextSnapshot, getSnapshot: getSnapshot };\n      hook.queue = getServerSnapshot;\n      mountEffect(\n        subscribeToStore.bind(null, fiber, getServerSnapshot, subscribe),\n        [subscribe]\n      );\n      fiber.flags |= 2048;\n      pushSimpleEffect(\n        HasEffect | Passive,\n        { destroy: void 0 },\n        updateStoreInstance.bind(\n          null,\n          fiber,\n          getServerSnapshot,\n          nextSnapshot,\n          getSnapshot\n        ),\n        null\n      );\n      return nextSnapshot;\n    }\n    function updateSyncExternalStore(\n      subscribe,\n      getSnapshot,\n      getServerSnapshot\n    ) {\n      var fiber = currentlyRenderingFiber,\n        hook = updateWorkInProgressHook(),\n        isHydrating$jscomp$0 = isHydrating;\n      if (isHydrating$jscomp$0) {\n        if (void 0 === getServerSnapshot)\n          throw Error(\n            \"Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering.\"\n          );\n        getServerSnapshot = getServerSnapshot();\n      } else if (\n        ((getServerSnapshot = getSnapshot()), !didWarnUncachedGetSnapshot)\n      ) {\n        var cachedSnapshot = getSnapshot();\n        objectIs(getServerSnapshot, cachedSnapshot) ||\n          (console.error(\n            \"The result of getSnapshot should be cached to avoid an infinite loop\"\n          ),\n          (didWarnUncachedGetSnapshot = !0));\n      }\n      if (\n        (cachedSnapshot = !objectIs(\n          (currentHook || hook).memoizedState,\n          getServerSnapshot\n        ))\n      )\n        (hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0);\n      hook = hook.queue;\n      var create = subscribeToStore.bind(null, fiber, hook, subscribe);\n      updateEffectImpl(2048, Passive, create, [subscribe]);\n      if (\n        hook.getSnapshot !== getSnapshot ||\n        cachedSnapshot ||\n        (null !== workInProgressHook &&\n          workInProgressHook.memoizedState.tag & HasEffect)\n      ) {\n        fiber.flags |= 2048;\n        pushSimpleEffect(\n          HasEffect | Passive,\n          { destroy: void 0 },\n          updateStoreInstance.bind(\n            null,\n            fiber,\n            hook,\n            getServerSnapshot,\n            getSnapshot\n          ),\n          null\n        );\n        if (null === workInProgressRoot)\n          throw Error(\n            \"Expected a work-in-progress root. This is a bug in React. Please file an issue.\"\n          );\n        isHydrating$jscomp$0 ||\n          0 !== (renderLanes & 124) ||\n          pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n      }\n      return getServerSnapshot;\n    }\n    function pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n      fiber.flags |= 16384;\n      fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n      getSnapshot = currentlyRenderingFiber.updateQueue;\n      null === getSnapshot\n        ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n          (currentlyRenderingFiber.updateQueue = getSnapshot),\n          (getSnapshot.stores = [fiber]))\n        : ((renderedSnapshot = getSnapshot.stores),\n          null === renderedSnapshot\n            ? (getSnapshot.stores = [fiber])\n            : renderedSnapshot.push(fiber));\n    }\n    function updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n      inst.value = nextSnapshot;\n      inst.getSnapshot = getSnapshot;\n      checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n    }\n    function subscribeToStore(fiber, inst, subscribe) {\n      return subscribe(function () {\n        checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n      });\n    }\n    function checkIfSnapshotChanged(inst) {\n      var latestGetSnapshot = inst.getSnapshot;\n      inst = inst.value;\n      try {\n        var nextValue = latestGetSnapshot();\n        return !objectIs(inst, nextValue);\n      } catch (error) {\n        return !0;\n      }\n    }\n    function forceStoreRerender(fiber) {\n      var root = enqueueConcurrentRenderForLane(fiber, 2);\n      null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n    }\n    function mountStateImpl(initialState) {\n      var hook = mountWorkInProgressHook();\n      if (\"function\" === typeof initialState) {\n        var initialStateInitializer = initialState;\n        initialState = initialStateInitializer();\n        if (shouldDoubleInvokeUserFnsInHooksDEV) {\n          setIsStrictModeForDevtools(!0);\n          try {\n            initialStateInitializer();\n          } finally {\n            setIsStrictModeForDevtools(!1);\n          }\n        }\n      }\n      hook.memoizedState = hook.baseState = initialState;\n      hook.queue = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: basicStateReducer,\n        lastRenderedState: initialState\n      };\n      return hook;\n    }\n    function mountState(initialState) {\n      initialState = mountStateImpl(initialState);\n      var queue = initialState.queue,\n        dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n      queue.dispatch = dispatch;\n      return [initialState.memoizedState, dispatch];\n    }\n    function mountOptimistic(passthrough) {\n      var hook = mountWorkInProgressHook();\n      hook.memoizedState = hook.baseState = passthrough;\n      var queue = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: null,\n        lastRenderedState: null\n      };\n      hook.queue = queue;\n      hook = dispatchOptimisticSetState.bind(\n        null,\n        currentlyRenderingFiber,\n        !0,\n        queue\n      );\n      queue.dispatch = hook;\n      return [passthrough, hook];\n    }\n    function updateOptimistic(passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n    }\n    function updateOptimisticImpl(hook, current, passthrough, reducer) {\n      hook.baseState = passthrough;\n      return updateReducerImpl(\n        hook,\n        currentHook,\n        \"function\" === typeof reducer ? reducer : basicStateReducer\n      );\n    }\n    function rerenderOptimistic(passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      if (null !== currentHook)\n        return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n      hook.baseState = passthrough;\n      return [passthrough, hook.queue.dispatch];\n    }\n    function dispatchActionState(\n      fiber,\n      actionQueue,\n      setPendingState,\n      setState,\n      payload\n    ) {\n      if (isRenderPhaseUpdate(fiber))\n        throw Error(\"Cannot update form state while rendering.\");\n      fiber = actionQueue.action;\n      if (null !== fiber) {\n        var actionNode = {\n          payload: payload,\n          action: fiber,\n          next: null,\n          isTransition: !0,\n          status: \"pending\",\n          value: null,\n          reason: null,\n          listeners: [],\n          then: function (listener) {\n            actionNode.listeners.push(listener);\n          }\n        };\n        null !== ReactSharedInternals.T\n          ? setPendingState(!0)\n          : (actionNode.isTransition = !1);\n        setState(actionNode);\n        setPendingState = actionQueue.pending;\n        null === setPendingState\n          ? ((actionNode.next = actionQueue.pending = actionNode),\n            runActionStateAction(actionQueue, actionNode))\n          : ((actionNode.next = setPendingState.next),\n            (actionQueue.pending = setPendingState.next = actionNode));\n      }\n    }\n    function runActionStateAction(actionQueue, node) {\n      var action = node.action,\n        payload = node.payload,\n        prevState = actionQueue.state;\n      if (node.isTransition) {\n        var prevTransition = ReactSharedInternals.T,\n          currentTransition = {};\n        currentTransition._updatedFibers = new Set();\n        ReactSharedInternals.T = currentTransition;\n        try {\n          var returnValue = action(prevState, payload),\n            onStartTransitionFinish = ReactSharedInternals.S;\n          null !== onStartTransitionFinish &&\n            onStartTransitionFinish(currentTransition, returnValue);\n          handleActionReturnValue(actionQueue, node, returnValue);\n        } catch (error) {\n          onActionError(actionQueue, node, error);\n        } finally {\n          null !== prevTransition &&\n            null !== currentTransition.types &&\n            (null !== prevTransition.types &&\n              prevTransition.types !== currentTransition.types &&\n              console.error(\n                \"We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React.\"\n              ),\n            (prevTransition.types = currentTransition.types)),\n            (ReactSharedInternals.T = prevTransition),\n            null === prevTransition &&\n              currentTransition._updatedFibers &&\n              ((actionQueue = currentTransition._updatedFibers.size),\n              currentTransition._updatedFibers.clear(),\n              10 < actionQueue &&\n                console.warn(\n                  \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n                ));\n        }\n      } else\n        try {\n          (currentTransition = action(prevState, payload)),\n            handleActionReturnValue(actionQueue, node, currentTransition);\n        } catch (error$4) {\n          onActionError(actionQueue, node, error$4);\n        }\n    }\n    function handleActionReturnValue(actionQueue, node, returnValue) {\n      null !== returnValue &&\n      \"object\" === typeof returnValue &&\n      \"function\" === typeof returnValue.then\n        ? (ReactSharedInternals.asyncTransitions++,\n          returnValue.then(releaseAsyncTransition, releaseAsyncTransition),\n          returnValue.then(\n            function (nextState) {\n              onActionSuccess(actionQueue, node, nextState);\n            },\n            function (error) {\n              return onActionError(actionQueue, node, error);\n            }\n          ),\n          node.isTransition ||\n            console.error(\n              \"An async function with useActionState was called outside of a transition. This is likely not what you intended (for example, isPending will not update correctly). Either call the returned function inside startTransition, or pass it to an `action` or `formAction` prop.\"\n            ))\n        : onActionSuccess(actionQueue, node, returnValue);\n    }\n    function onActionSuccess(actionQueue, actionNode, nextState) {\n      actionNode.status = \"fulfilled\";\n      actionNode.value = nextState;\n      notifyActionListeners(actionNode);\n      actionQueue.state = nextState;\n      actionNode = actionQueue.pending;\n      null !== actionNode &&\n        ((nextState = actionNode.next),\n        nextState === actionNode\n          ? (actionQueue.pending = null)\n          : ((nextState = nextState.next),\n            (actionNode.next = nextState),\n            runActionStateAction(actionQueue, nextState)));\n    }\n    function onActionError(actionQueue, actionNode, error) {\n      var last = actionQueue.pending;\n      actionQueue.pending = null;\n      if (null !== last) {\n        last = last.next;\n        do\n          (actionNode.status = \"rejected\"),\n            (actionNode.reason = error),\n            notifyActionListeners(actionNode),\n            (actionNode = actionNode.next);\n        while (actionNode !== last);\n      }\n      actionQueue.action = null;\n    }\n    function notifyActionListeners(actionNode) {\n      actionNode = actionNode.listeners;\n      for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n    }\n    function actionStateReducer(oldState, newState) {\n      return newState;\n    }\n    function mountActionState(action, initialStateProp) {\n      if (isHydrating) {\n        var ssrFormState = workInProgressRoot.formState;\n        if (null !== ssrFormState) {\n          a: {\n            var isMatching = currentlyRenderingFiber;\n            if (isHydrating) {\n              if (nextHydratableInstance) {\n                b: {\n                  var markerInstance = nextHydratableInstance;\n                  for (\n                    var inRootOrSingleton = rootOrSingletonContext;\n                    8 !== markerInstance.nodeType;\n\n                  ) {\n                    if (!inRootOrSingleton) {\n                      markerInstance = null;\n                      break b;\n                    }\n                    markerInstance = getNextHydratable(\n                      markerInstance.nextSibling\n                    );\n                    if (null === markerInstance) {\n                      markerInstance = null;\n                      break b;\n                    }\n                  }\n                  inRootOrSingleton = markerInstance.data;\n                  markerInstance =\n                    inRootOrSingleton === FORM_STATE_IS_MATCHING ||\n                    inRootOrSingleton === FORM_STATE_IS_NOT_MATCHING\n                      ? markerInstance\n                      : null;\n                }\n                if (markerInstance) {\n                  nextHydratableInstance = getNextHydratable(\n                    markerInstance.nextSibling\n                  );\n                  isMatching = markerInstance.data === FORM_STATE_IS_MATCHING;\n                  break a;\n                }\n              }\n              throwOnHydrationMismatch(isMatching);\n            }\n            isMatching = !1;\n          }\n          isMatching && (initialStateProp = ssrFormState[0]);\n        }\n      }\n      ssrFormState = mountWorkInProgressHook();\n      ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n      isMatching = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: actionStateReducer,\n        lastRenderedState: initialStateProp\n      };\n      ssrFormState.queue = isMatching;\n      ssrFormState = dispatchSetState.bind(\n        null,\n        currentlyRenderingFiber,\n        isMatching\n      );\n      isMatching.dispatch = ssrFormState;\n      isMatching = mountStateImpl(!1);\n      inRootOrSingleton = dispatchOptimisticSetState.bind(\n        null,\n        currentlyRenderingFiber,\n        !1,\n        isMatching.queue\n      );\n      isMatching = mountWorkInProgressHook();\n      markerInstance = {\n        state: initialStateProp,\n        dispatch: null,\n        action: action,\n        pending: null\n      };\n      isMatching.queue = markerInstance;\n      ssrFormState = dispatchActionState.bind(\n        null,\n        currentlyRenderingFiber,\n        markerInstance,\n        inRootOrSingleton,\n        ssrFormState\n      );\n      markerInstance.dispatch = ssrFormState;\n      isMatching.memoizedState = action;\n      return [initialStateProp, ssrFormState, !1];\n    }\n    function updateActionState(action) {\n      var stateHook = updateWorkInProgressHook();\n      return updateActionStateImpl(stateHook, currentHook, action);\n    }\n    function updateActionStateImpl(stateHook, currentStateHook, action) {\n      currentStateHook = updateReducerImpl(\n        stateHook,\n        currentStateHook,\n        actionStateReducer\n      )[0];\n      stateHook = updateReducer(basicStateReducer)[0];\n      if (\n        \"object\" === typeof currentStateHook &&\n        null !== currentStateHook &&\n        \"function\" === typeof currentStateHook.then\n      )\n        try {\n          var state = useThenable(currentStateHook);\n        } catch (x) {\n          if (x === SuspenseException) throw SuspenseActionException;\n          throw x;\n        }\n      else state = currentStateHook;\n      currentStateHook = updateWorkInProgressHook();\n      var actionQueue = currentStateHook.queue,\n        dispatch = actionQueue.dispatch;\n      action !== currentStateHook.memoizedState &&\n        ((currentlyRenderingFiber.flags |= 2048),\n        pushSimpleEffect(\n          HasEffect | Passive,\n          { destroy: void 0 },\n          actionStateActionEffect.bind(null, actionQueue, action),\n          null\n        ));\n      return [state, dispatch, stateHook];\n    }\n    function actionStateActionEffect(actionQueue, action) {\n      actionQueue.action = action;\n    }\n    function rerenderActionState(action) {\n      var stateHook = updateWorkInProgressHook(),\n        currentStateHook = currentHook;\n      if (null !== currentStateHook)\n        return updateActionStateImpl(stateHook, currentStateHook, action);\n      updateWorkInProgressHook();\n      stateHook = stateHook.memoizedState;\n      currentStateHook = updateWorkInProgressHook();\n      var dispatch = currentStateHook.queue.dispatch;\n      currentStateHook.memoizedState = action;\n      return [stateHook, dispatch, !1];\n    }\n    function pushSimpleEffect(tag, inst, create, deps) {\n      tag = { tag: tag, create: create, deps: deps, inst: inst, next: null };\n      inst = currentlyRenderingFiber.updateQueue;\n      null === inst &&\n        ((inst = createFunctionComponentUpdateQueue()),\n        (currentlyRenderingFiber.updateQueue = inst));\n      create = inst.lastEffect;\n      null === create\n        ? (inst.lastEffect = tag.next = tag)\n        : ((deps = create.next),\n          (create.next = tag),\n          (tag.next = deps),\n          (inst.lastEffect = tag));\n      return tag;\n    }\n    function mountRef(initialValue) {\n      var hook = mountWorkInProgressHook();\n      initialValue = { current: initialValue };\n      return (hook.memoizedState = initialValue);\n    }\n    function mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n      var hook = mountWorkInProgressHook();\n      currentlyRenderingFiber.flags |= fiberFlags;\n      hook.memoizedState = pushSimpleEffect(\n        HasEffect | hookFlags,\n        { destroy: void 0 },\n        create,\n        void 0 === deps ? null : deps\n      );\n    }\n    function updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n      var hook = updateWorkInProgressHook();\n      deps = void 0 === deps ? null : deps;\n      var inst = hook.memoizedState.inst;\n      null !== currentHook &&\n      null !== deps &&\n      areHookInputsEqual(deps, currentHook.memoizedState.deps)\n        ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n        : ((currentlyRenderingFiber.flags |= fiberFlags),\n          (hook.memoizedState = pushSimpleEffect(\n            HasEffect | hookFlags,\n            inst,\n            create,\n            deps\n          )));\n    }\n    function mountEffect(create, deps) {\n      (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode\n        ? mountEffectImpl(276826112, Passive, create, deps)\n        : mountEffectImpl(8390656, Passive, create, deps);\n    }\n    function mountLayoutEffect(create, deps) {\n      var fiberFlags = 4194308;\n      (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode &&\n        (fiberFlags |= 134217728);\n      return mountEffectImpl(fiberFlags, Layout, create, deps);\n    }\n    function imperativeHandleEffect(create, ref) {\n      if (\"function\" === typeof ref) {\n        create = create();\n        var refCleanup = ref(create);\n        return function () {\n          \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n        };\n      }\n      if (null !== ref && void 0 !== ref)\n        return (\n          ref.hasOwnProperty(\"current\") ||\n            console.error(\n              \"Expected useImperativeHandle() first argument to either be a ref callback or React.createRef() object. Instead received: %s.\",\n              \"an object with keys {\" + Object.keys(ref).join(\", \") + \"}\"\n            ),\n          (create = create()),\n          (ref.current = create),\n          function () {\n            ref.current = null;\n          }\n        );\n    }\n    function mountImperativeHandle(ref, create, deps) {\n      \"function\" !== typeof create &&\n        console.error(\n          \"Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.\",\n          null !== create ? typeof create : \"null\"\n        );\n      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n      var fiberFlags = 4194308;\n      (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode &&\n        (fiberFlags |= 134217728);\n      mountEffectImpl(\n        fiberFlags,\n        Layout,\n        imperativeHandleEffect.bind(null, create, ref),\n        deps\n      );\n    }\n    function updateImperativeHandle(ref, create, deps) {\n      \"function\" !== typeof create &&\n        console.error(\n          \"Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.\",\n          null !== create ? typeof create : \"null\"\n        );\n      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n      updateEffectImpl(\n        4,\n        Layout,\n        imperativeHandleEffect.bind(null, create, ref),\n        deps\n      );\n    }\n    function mountCallback(callback, deps) {\n      mountWorkInProgressHook().memoizedState = [\n        callback,\n        void 0 === deps ? null : deps\n      ];\n      return callback;\n    }\n    function updateCallback(callback, deps) {\n      var hook = updateWorkInProgressHook();\n      deps = void 0 === deps ? null : deps;\n      var prevState = hook.memoizedState;\n      if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n        return prevState[0];\n      hook.memoizedState = [callback, deps];\n      return callback;\n    }\n    function mountMemo(nextCreate, deps) {\n      var hook = mountWorkInProgressHook();\n      deps = void 0 === deps ? null : deps;\n      var nextValue = nextCreate();\n      if (shouldDoubleInvokeUserFnsInHooksDEV) {\n        setIsStrictModeForDevtools(!0);\n        try {\n          nextCreate();\n        } finally {\n          setIsStrictModeForDevtools(!1);\n        }\n      }\n      hook.memoizedState = [nextValue, deps];\n      return nextValue;\n    }\n    function updateMemo(nextCreate, deps) {\n      var hook = updateWorkInProgressHook();\n      deps = void 0 === deps ? null : deps;\n      var prevState = hook.memoizedState;\n      if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n        return prevState[0];\n      prevState = nextCreate();\n      if (shouldDoubleInvokeUserFnsInHooksDEV) {\n        setIsStrictModeForDevtools(!0);\n        try {\n          nextCreate();\n        } finally {\n          setIsStrictModeForDevtools(!1);\n        }\n      }\n      hook.memoizedState = [prevState, deps];\n      return prevState;\n    }\n    function mountDeferredValue(value, initialValue) {\n      var hook = mountWorkInProgressHook();\n      return mountDeferredValueImpl(hook, value, initialValue);\n    }\n    function updateDeferredValue(value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return updateDeferredValueImpl(\n        hook,\n        currentHook.memoizedState,\n        value,\n        initialValue\n      );\n    }\n    function rerenderDeferredValue(value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return null === currentHook\n        ? mountDeferredValueImpl(hook, value, initialValue)\n        : updateDeferredValueImpl(\n            hook,\n            currentHook.memoizedState,\n            value,\n            initialValue\n          );\n    }\n    function mountDeferredValueImpl(hook, value, initialValue) {\n      if (void 0 === initialValue || 0 !== (renderLanes & 1073741824))\n        return (hook.memoizedState = value);\n      hook.memoizedState = initialValue;\n      hook = requestDeferredLane();\n      currentlyRenderingFiber.lanes |= hook;\n      workInProgressRootSkippedLanes |= hook;\n      return initialValue;\n    }\n    function updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n      if (objectIs(value, prevValue)) return value;\n      if (null !== currentTreeHiddenStackCursor.current)\n        return (\n          (hook = mountDeferredValueImpl(hook, value, initialValue)),\n          objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n          hook\n        );\n      if (0 === (renderLanes & 42) || 0 !== (renderLanes & 1073741824))\n        return (didReceiveUpdate = !0), (hook.memoizedState = value);\n      hook = requestDeferredLane();\n      currentlyRenderingFiber.lanes |= hook;\n      workInProgressRootSkippedLanes |= hook;\n      return prevValue;\n    }\n    function releaseAsyncTransition() {\n      ReactSharedInternals.asyncTransitions--;\n    }\n    function startTransition(\n      fiber,\n      queue,\n      pendingState,\n      finishedState,\n      callback\n    ) {\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p =\n        0 !== previousPriority && previousPriority < ContinuousEventPriority\n          ? previousPriority\n          : ContinuousEventPriority;\n      var prevTransition = ReactSharedInternals.T,\n        currentTransition = {};\n      currentTransition._updatedFibers = new Set();\n      ReactSharedInternals.T = currentTransition;\n      dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n      try {\n        var returnValue = callback(),\n          onStartTransitionFinish = ReactSharedInternals.S;\n        null !== onStartTransitionFinish &&\n          onStartTransitionFinish(currentTransition, returnValue);\n        if (\n          null !== returnValue &&\n          \"object\" === typeof returnValue &&\n          \"function\" === typeof returnValue.then\n        ) {\n          ReactSharedInternals.asyncTransitions++;\n          returnValue.then(releaseAsyncTransition, releaseAsyncTransition);\n          var thenableForFinishedState = chainThenableValue(\n            returnValue,\n            finishedState\n          );\n          dispatchSetStateInternal(\n            fiber,\n            queue,\n            thenableForFinishedState,\n            requestUpdateLane(fiber)\n          );\n        } else\n          dispatchSetStateInternal(\n            fiber,\n            queue,\n            finishedState,\n            requestUpdateLane(fiber)\n          );\n      } catch (error) {\n        dispatchSetStateInternal(\n          fiber,\n          queue,\n          { then: function () {}, status: \"rejected\", reason: error },\n          requestUpdateLane(fiber)\n        );\n      } finally {\n        (ReactDOMSharedInternals.p = previousPriority),\n          null !== prevTransition &&\n            null !== currentTransition.types &&\n            (null !== prevTransition.types &&\n              prevTransition.types !== currentTransition.types &&\n              console.error(\n                \"We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React.\"\n              ),\n            (prevTransition.types = currentTransition.types)),\n          (ReactSharedInternals.T = prevTransition),\n          null === prevTransition &&\n            currentTransition._updatedFibers &&\n            ((fiber = currentTransition._updatedFibers.size),\n            currentTransition._updatedFibers.clear(),\n            10 < fiber &&\n              console.warn(\n                \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n              ));\n      }\n    }\n    function startHostTransition(formFiber, pendingState, action, formData) {\n      if (5 !== formFiber.tag)\n        throw Error(\n          \"Expected the form instance to be a HostComponent. This is a bug in React.\"\n        );\n      var queue = ensureFormComponentIsStateful(formFiber).queue;\n      startTransition(\n        formFiber,\n        queue,\n        pendingState,\n        NotPendingTransition,\n        null === action\n          ? noop\n          : function () {\n              requestFormReset$1(formFiber);\n              return action(formData);\n            }\n      );\n    }\n    function ensureFormComponentIsStateful(formFiber) {\n      var existingStateHook = formFiber.memoizedState;\n      if (null !== existingStateHook) return existingStateHook;\n      existingStateHook = {\n        memoizedState: NotPendingTransition,\n        baseState: NotPendingTransition,\n        baseQueue: null,\n        queue: {\n          pending: null,\n          lanes: 0,\n          dispatch: null,\n          lastRenderedReducer: basicStateReducer,\n          lastRenderedState: NotPendingTransition\n        },\n        next: null\n      };\n      var initialResetState = {};\n      existingStateHook.next = {\n        memoizedState: initialResetState,\n        baseState: initialResetState,\n        baseQueue: null,\n        queue: {\n          pending: null,\n          lanes: 0,\n          dispatch: null,\n          lastRenderedReducer: basicStateReducer,\n          lastRenderedState: initialResetState\n        },\n        next: null\n      };\n      formFiber.memoizedState = existingStateHook;\n      formFiber = formFiber.alternate;\n      null !== formFiber && (formFiber.memoizedState = existingStateHook);\n      return existingStateHook;\n    }\n    function requestFormReset$1(formFiber) {\n      null === ReactSharedInternals.T &&\n        console.error(\n          \"requestFormReset was called outside a transition or action. To fix, move to an action, or wrap with startTransition.\"\n        );\n      var stateHook = ensureFormComponentIsStateful(formFiber);\n      null === stateHook.next &&\n        (stateHook = formFiber.alternate.memoizedState);\n      dispatchSetStateInternal(\n        formFiber,\n        stateHook.next.queue,\n        {},\n        requestUpdateLane(formFiber)\n      );\n    }\n    function mountTransition() {\n      var stateHook = mountStateImpl(!1);\n      stateHook = startTransition.bind(\n        null,\n        currentlyRenderingFiber,\n        stateHook.queue,\n        !0,\n        !1\n      );\n      mountWorkInProgressHook().memoizedState = stateHook;\n      return [!1, stateHook];\n    }\n    function updateTransition() {\n      var booleanOrThenable = updateReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    }\n    function rerenderTransition() {\n      var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    }\n    function useHostTransitionStatus() {\n      return readContext(HostTransitionContext);\n    }\n    function mountId() {\n      var hook = mountWorkInProgressHook(),\n        identifierPrefix = workInProgressRoot.identifierPrefix;\n      if (isHydrating) {\n        var treeId = treeContextOverflow;\n        var idWithLeadingBit = treeContextId;\n        treeId =\n          (\n            idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n          ).toString(32) + treeId;\n        identifierPrefix = \"_\" + identifierPrefix + \"R_\" + treeId;\n        treeId = localIdCounter++;\n        0 < treeId && (identifierPrefix += \"H\" + treeId.toString(32));\n        identifierPrefix += \"_\";\n      } else\n        (treeId = globalClientIdCounter++),\n          (identifierPrefix =\n            \"_\" + identifierPrefix + \"r_\" + treeId.toString(32) + \"_\");\n      return (hook.memoizedState = identifierPrefix);\n    }\n    function mountRefresh() {\n      return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n        null,\n        currentlyRenderingFiber\n      ));\n    }\n    function refreshCache(fiber, seedKey) {\n      for (var provider = fiber.return; null !== provider; ) {\n        switch (provider.tag) {\n          case 24:\n          case 3:\n            var lane = requestUpdateLane(provider);\n            fiber = createUpdate(lane);\n            var root = enqueueUpdate(provider, fiber, lane);\n            null !== root &&\n              (scheduleUpdateOnFiber(root, provider, lane),\n              entangleTransitions(root, provider, lane));\n            provider = createCache();\n            null !== seedKey &&\n              void 0 !== seedKey &&\n              null !== root &&\n              console.error(\n                \"The seed argument is not enabled outside experimental channels.\"\n              );\n            fiber.payload = { cache: provider };\n            return;\n        }\n        provider = provider.return;\n      }\n    }\n    function dispatchReducerAction(fiber, queue, action) {\n      var args = arguments;\n      \"function\" === typeof args[3] &&\n        console.error(\n          \"State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect().\"\n        );\n      args = requestUpdateLane(fiber);\n      var update = {\n        lane: args,\n        revertLane: 0,\n        gesture: null,\n        action: action,\n        hasEagerState: !1,\n        eagerState: null,\n        next: null\n      };\n      isRenderPhaseUpdate(fiber)\n        ? enqueueRenderPhaseUpdate(queue, update)\n        : ((update = enqueueConcurrentHookUpdate(fiber, queue, update, args)),\n          null !== update &&\n            (scheduleUpdateOnFiber(update, fiber, args),\n            entangleTransitionUpdate(update, queue, args)));\n      markStateUpdateScheduled(fiber, args);\n    }\n    function dispatchSetState(fiber, queue, action) {\n      var args = arguments;\n      \"function\" === typeof args[3] &&\n        console.error(\n          \"State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect().\"\n        );\n      args = requestUpdateLane(fiber);\n      dispatchSetStateInternal(fiber, queue, action, args);\n      markStateUpdateScheduled(fiber, args);\n    }\n    function dispatchSetStateInternal(fiber, queue, action, lane) {\n      var update = {\n        lane: lane,\n        revertLane: 0,\n        gesture: null,\n        action: action,\n        hasEagerState: !1,\n        eagerState: null,\n        next: null\n      };\n      if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n      else {\n        var alternate = fiber.alternate;\n        if (\n          0 === fiber.lanes &&\n          (null === alternate || 0 === alternate.lanes) &&\n          ((alternate = queue.lastRenderedReducer), null !== alternate)\n        ) {\n          var prevDispatcher = ReactSharedInternals.H;\n          ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n          try {\n            var currentState = queue.lastRenderedState,\n              eagerState = alternate(currentState, action);\n            update.hasEagerState = !0;\n            update.eagerState = eagerState;\n            if (objectIs(eagerState, currentState))\n              return (\n                enqueueUpdate$1(fiber, queue, update, 0),\n                null === workInProgressRoot &&\n                  finishQueueingConcurrentUpdates(),\n                !1\n              );\n          } catch (error) {\n          } finally {\n            ReactSharedInternals.H = prevDispatcher;\n          }\n        }\n        action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n        if (null !== action)\n          return (\n            scheduleUpdateOnFiber(action, fiber, lane),\n            entangleTransitionUpdate(action, queue, lane),\n            !0\n          );\n      }\n      return !1;\n    }\n    function dispatchOptimisticSetState(\n      fiber,\n      throwIfDuringRender,\n      queue,\n      action\n    ) {\n      null === ReactSharedInternals.T &&\n        0 === currentEntangledLane &&\n        console.error(\n          \"An optimistic state update occurred outside a transition or action. To fix, move the update to an action, or wrap with startTransition.\"\n        );\n      action = {\n        lane: 2,\n        revertLane: requestTransitionLane(),\n        gesture: null,\n        action: action,\n        hasEagerState: !1,\n        eagerState: null,\n        next: null\n      };\n      if (isRenderPhaseUpdate(fiber)) {\n        if (throwIfDuringRender)\n          throw Error(\"Cannot update optimistic state while rendering.\");\n        console.error(\"Cannot call startTransition while rendering.\");\n      } else\n        (throwIfDuringRender = enqueueConcurrentHookUpdate(\n          fiber,\n          queue,\n          action,\n          2\n        )),\n          null !== throwIfDuringRender &&\n            scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n      markStateUpdateScheduled(fiber, 2);\n    }\n    function isRenderPhaseUpdate(fiber) {\n      var alternate = fiber.alternate;\n      return (\n        fiber === currentlyRenderingFiber ||\n        (null !== alternate && alternate === currentlyRenderingFiber)\n      );\n    }\n    function enqueueRenderPhaseUpdate(queue, update) {\n      didScheduleRenderPhaseUpdateDuringThisPass =\n        didScheduleRenderPhaseUpdate = !0;\n      var pending = queue.pending;\n      null === pending\n        ? (update.next = update)\n        : ((update.next = pending.next), (pending.next = update));\n      queue.pending = update;\n    }\n    function entangleTransitionUpdate(root, queue, lane) {\n      if (0 !== (lane & 4194048)) {\n        var queueLanes = queue.lanes;\n        queueLanes &= root.pendingLanes;\n        lane |= queueLanes;\n        queue.lanes = lane;\n        markRootEntangled(root, lane);\n      }\n    }\n    function warnOnInvalidCallback(callback) {\n      if (null !== callback && \"function\" !== typeof callback) {\n        var key = String(callback);\n        didWarnOnInvalidCallback.has(key) ||\n          (didWarnOnInvalidCallback.add(key),\n          console.error(\n            \"Expected the last optional `callback` argument to be a function. Instead received: %s.\",\n            callback\n          ));\n      }\n    }\n    function applyDerivedStateFromProps(\n      workInProgress,\n      ctor,\n      getDerivedStateFromProps,\n      nextProps\n    ) {\n      var prevState = workInProgress.memoizedState,\n        partialState = getDerivedStateFromProps(nextProps, prevState);\n      if (workInProgress.mode & StrictLegacyMode) {\n        setIsStrictModeForDevtools(!0);\n        try {\n          partialState = getDerivedStateFromProps(nextProps, prevState);\n        } finally {\n          setIsStrictModeForDevtools(!1);\n        }\n      }\n      void 0 === partialState &&\n        ((ctor = getComponentNameFromType(ctor) || \"Component\"),\n        didWarnAboutUndefinedDerivedState.has(ctor) ||\n          (didWarnAboutUndefinedDerivedState.add(ctor),\n          console.error(\n            \"%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.\",\n            ctor\n          )));\n      prevState =\n        null === partialState || void 0 === partialState\n          ? prevState\n          : assign({}, prevState, partialState);\n      workInProgress.memoizedState = prevState;\n      0 === workInProgress.lanes &&\n        (workInProgress.updateQueue.baseState = prevState);\n    }\n    function checkShouldComponentUpdate(\n      workInProgress,\n      ctor,\n      oldProps,\n      newProps,\n      oldState,\n      newState,\n      nextContext\n    ) {\n      var instance = workInProgress.stateNode;\n      if (\"function\" === typeof instance.shouldComponentUpdate) {\n        oldProps = instance.shouldComponentUpdate(\n          newProps,\n          newState,\n          nextContext\n        );\n        if (workInProgress.mode & StrictLegacyMode) {\n          setIsStrictModeForDevtools(!0);\n          try {\n            oldProps = instance.shouldComponentUpdate(\n              newProps,\n              newState,\n              nextContext\n            );\n          } finally {\n            setIsStrictModeForDevtools(!1);\n          }\n        }\n        void 0 === oldProps &&\n          console.error(\n            \"%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.\",\n            getComponentNameFromType(ctor) || \"Component\"\n          );\n        return oldProps;\n      }\n      return ctor.prototype && ctor.prototype.isPureReactComponent\n        ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n        : !0;\n    }\n    function callComponentWillReceiveProps(\n      workInProgress,\n      instance,\n      newProps,\n      nextContext\n    ) {\n      var oldState = instance.state;\n      \"function\" === typeof instance.componentWillReceiveProps &&\n        instance.componentWillReceiveProps(newProps, nextContext);\n      \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n        instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n      instance.state !== oldState &&\n        ((workInProgress =\n          getComponentNameFromFiber(workInProgress) || \"Component\"),\n        didWarnAboutStateAssignmentForComponent.has(workInProgress) ||\n          (didWarnAboutStateAssignmentForComponent.add(workInProgress),\n          console.error(\n            \"%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.\",\n            workInProgress\n          )),\n        classComponentUpdater.enqueueReplaceState(\n          instance,\n          instance.state,\n          null\n        ));\n    }\n    function resolveClassComponentProps(Component, baseProps) {\n      var newProps = baseProps;\n      if (\"ref\" in baseProps) {\n        newProps = {};\n        for (var propName in baseProps)\n          \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n      }\n      if ((Component = Component.defaultProps)) {\n        newProps === baseProps && (newProps = assign({}, newProps));\n        for (var _propName in Component)\n          void 0 === newProps[_propName] &&\n            (newProps[_propName] = Component[_propName]);\n      }\n      return newProps;\n    }\n    function defaultOnUncaughtError(error) {\n      reportGlobalError(error);\n      console.warn(\n        \"%s\\n\\n%s\\n\",\n        componentName\n          ? \"An error occurred in the <\" + componentName + \"> component.\"\n          : \"An error occurred in one of your React components.\",\n        \"Consider adding an error boundary to your tree to customize error handling behavior.\\nVisit https://react.dev/link/error-boundaries to learn more about error boundaries.\"\n      );\n    }\n    function defaultOnCaughtError(error) {\n      var componentNameMessage = componentName\n          ? \"The above error occurred in the <\" + componentName + \"> component.\"\n          : \"The above error occurred in one of your React components.\",\n        recreateMessage =\n          \"React will try to recreate this component tree from scratch using the error boundary you provided, \" +\n          ((errorBoundaryName || \"Anonymous\") + \".\");\n      if (\n        \"object\" === typeof error &&\n        null !== error &&\n        \"string\" === typeof error.environmentName\n      ) {\n        var JSCompiler_inline_result = error.environmentName;\n        error = [\n          \"%o\\n\\n%s\\n\\n%s\\n\",\n          error,\n          componentNameMessage,\n          recreateMessage\n        ].slice(0);\n        \"string\" === typeof error[0]\n          ? error.splice(\n              0,\n              1,\n              badgeFormat + error[0],\n              badgeStyle,\n              pad + JSCompiler_inline_result + pad,\n              resetStyle\n            )\n          : error.splice(\n              0,\n              0,\n              badgeFormat,\n              badgeStyle,\n              pad + JSCompiler_inline_result + pad,\n              resetStyle\n            );\n        error.unshift(console);\n        JSCompiler_inline_result = bind.apply(console.error, error);\n        JSCompiler_inline_result();\n      } else\n        console.error(\n          \"%o\\n\\n%s\\n\\n%s\\n\",\n          error,\n          componentNameMessage,\n          recreateMessage\n        );\n    }\n    function defaultOnRecoverableError(error) {\n      reportGlobalError(error);\n    }\n    function logUncaughtError(root, errorInfo) {\n      try {\n        componentName = errorInfo.source\n          ? getComponentNameFromFiber(errorInfo.source)\n          : null;\n        errorBoundaryName = null;\n        var error = errorInfo.value;\n        if (null !== ReactSharedInternals.actQueue)\n          ReactSharedInternals.thrownErrors.push(error);\n        else {\n          var onUncaughtError = root.onUncaughtError;\n          onUncaughtError(error, { componentStack: errorInfo.stack });\n        }\n      } catch (e$5) {\n        setTimeout(function () {\n          throw e$5;\n        });\n      }\n    }\n    function logCaughtError(root, boundary, errorInfo) {\n      try {\n        componentName = errorInfo.source\n          ? getComponentNameFromFiber(errorInfo.source)\n          : null;\n        errorBoundaryName = getComponentNameFromFiber(boundary);\n        var onCaughtError = root.onCaughtError;\n        onCaughtError(errorInfo.value, {\n          componentStack: errorInfo.stack,\n          errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n        });\n      } catch (e$6) {\n        setTimeout(function () {\n          throw e$6;\n        });\n      }\n    }\n    function createRootErrorUpdate(root, errorInfo, lane) {\n      lane = createUpdate(lane);\n      lane.tag = CaptureUpdate;\n      lane.payload = { element: null };\n      lane.callback = function () {\n        runWithFiberInDEV(errorInfo.source, logUncaughtError, root, errorInfo);\n      };\n      return lane;\n    }\n    function createClassErrorUpdate(lane) {\n      lane = createUpdate(lane);\n      lane.tag = CaptureUpdate;\n      return lane;\n    }\n    function initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n      var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n      if (\"function\" === typeof getDerivedStateFromError) {\n        var error = errorInfo.value;\n        update.payload = function () {\n          return getDerivedStateFromError(error);\n        };\n        update.callback = function () {\n          markFailedErrorBoundaryForHotReloading(fiber);\n          runWithFiberInDEV(\n            errorInfo.source,\n            logCaughtError,\n            root,\n            fiber,\n            errorInfo\n          );\n        };\n      }\n      var inst = fiber.stateNode;\n      null !== inst &&\n        \"function\" === typeof inst.componentDidCatch &&\n        (update.callback = function () {\n          markFailedErrorBoundaryForHotReloading(fiber);\n          runWithFiberInDEV(\n            errorInfo.source,\n            logCaughtError,\n            root,\n            fiber,\n            errorInfo\n          );\n          \"function\" !== typeof getDerivedStateFromError &&\n            (null === legacyErrorBoundariesThatAlreadyFailed\n              ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n              : legacyErrorBoundariesThatAlreadyFailed.add(this));\n          callComponentDidCatchInDEV(this, errorInfo);\n          \"function\" === typeof getDerivedStateFromError ||\n            (0 === (fiber.lanes & 2) &&\n              console.error(\n                \"%s: Error boundaries should implement getDerivedStateFromError(). In that method, return a state update to display an error message or fallback UI.\",\n                getComponentNameFromFiber(fiber) || \"Unknown\"\n              ));\n        });\n    }\n    function throwException(\n      root,\n      returnFiber,\n      sourceFiber,\n      value,\n      rootRenderLanes\n    ) {\n      sourceFiber.flags |= 32768;\n      isDevToolsPresent && restorePendingUpdaters(root, rootRenderLanes);\n      if (\n        null !== value &&\n        \"object\" === typeof value &&\n        \"function\" === typeof value.then\n      ) {\n        returnFiber = sourceFiber.alternate;\n        null !== returnFiber &&\n          propagateParentContextChanges(\n            returnFiber,\n            sourceFiber,\n            rootRenderLanes,\n            !0\n          );\n        isHydrating && (didSuspendOrErrorDEV = !0);\n        sourceFiber = suspenseHandlerStackCursor.current;\n        if (null !== sourceFiber) {\n          switch (sourceFiber.tag) {\n            case 31:\n            case 13:\n              return (\n                null === shellBoundary\n                  ? renderDidSuspendDelayIfPossible()\n                  : null === sourceFiber.alternate &&\n                    workInProgressRootExitStatus === RootInProgress &&\n                    (workInProgressRootExitStatus = RootSuspended),\n                (sourceFiber.flags &= -257),\n                (sourceFiber.flags |= 65536),\n                (sourceFiber.lanes = rootRenderLanes),\n                value === noopSuspenseyCommitThenable\n                  ? (sourceFiber.flags |= 16384)\n                  : ((returnFiber = sourceFiber.updateQueue),\n                    null === returnFiber\n                      ? (sourceFiber.updateQueue = new Set([value]))\n                      : returnFiber.add(value),\n                    attachPingListener(root, value, rootRenderLanes)),\n                !1\n              );\n            case 22:\n              return (\n                (sourceFiber.flags |= 65536),\n                value === noopSuspenseyCommitThenable\n                  ? (sourceFiber.flags |= 16384)\n                  : ((returnFiber = sourceFiber.updateQueue),\n                    null === returnFiber\n                      ? ((returnFiber = {\n                          transitions: null,\n                          markerInstances: null,\n                          retryQueue: new Set([value])\n                        }),\n                        (sourceFiber.updateQueue = returnFiber))\n                      : ((sourceFiber = returnFiber.retryQueue),\n                        null === sourceFiber\n                          ? (returnFiber.retryQueue = new Set([value]))\n                          : sourceFiber.add(value)),\n                    attachPingListener(root, value, rootRenderLanes)),\n                !1\n              );\n          }\n          throw Error(\n            \"Unexpected Suspense handler tag (\" +\n              sourceFiber.tag +\n              \"). This is a bug in React.\"\n          );\n        }\n        attachPingListener(root, value, rootRenderLanes);\n        renderDidSuspendDelayIfPossible();\n        return !1;\n      }\n      if (isHydrating)\n        return (\n          (didSuspendOrErrorDEV = !0),\n          (returnFiber = suspenseHandlerStackCursor.current),\n          null !== returnFiber\n            ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n              (returnFiber.flags |= 65536),\n              (returnFiber.lanes = rootRenderLanes),\n              value !== HydrationMismatchException &&\n                queueHydrationError(\n                  createCapturedValueAtFiber(\n                    Error(\n                      \"There was an error while hydrating but React was able to recover by instead client rendering from the nearest Suspense boundary.\",\n                      { cause: value }\n                    ),\n                    sourceFiber\n                  )\n                ))\n            : (value !== HydrationMismatchException &&\n                queueHydrationError(\n                  createCapturedValueAtFiber(\n                    Error(\n                      \"There was an error while hydrating but React was able to recover by instead client rendering the entire root.\",\n                      { cause: value }\n                    ),\n                    sourceFiber\n                  )\n                ),\n              (root = root.current.alternate),\n              (root.flags |= 65536),\n              (rootRenderLanes &= -rootRenderLanes),\n              (root.lanes |= rootRenderLanes),\n              (value = createCapturedValueAtFiber(value, sourceFiber)),\n              (rootRenderLanes = createRootErrorUpdate(\n                root.stateNode,\n                value,\n                rootRenderLanes\n              )),\n              enqueueCapturedUpdate(root, rootRenderLanes),\n              workInProgressRootExitStatus !== RootSuspendedWithDelay &&\n                (workInProgressRootExitStatus = RootErrored)),\n          !1\n        );\n      var error = createCapturedValueAtFiber(\n        Error(\n          \"There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root.\",\n          { cause: value }\n        ),\n        sourceFiber\n      );\n      null === workInProgressRootConcurrentErrors\n        ? (workInProgressRootConcurrentErrors = [error])\n        : workInProgressRootConcurrentErrors.push(error);\n      workInProgressRootExitStatus !== RootSuspendedWithDelay &&\n        (workInProgressRootExitStatus = RootErrored);\n      if (null === returnFiber) return !0;\n      value = createCapturedValueAtFiber(value, sourceFiber);\n      sourceFiber = returnFiber;\n      do {\n        switch (sourceFiber.tag) {\n          case 3:\n            return (\n              (sourceFiber.flags |= 65536),\n              (root = rootRenderLanes & -rootRenderLanes),\n              (sourceFiber.lanes |= root),\n              (root = createRootErrorUpdate(\n                sourceFiber.stateNode,\n                value,\n                root\n              )),\n              enqueueCapturedUpdate(sourceFiber, root),\n              !1\n            );\n          case 1:\n            if (\n              ((returnFiber = sourceFiber.type),\n              (error = sourceFiber.stateNode),\n              0 === (sourceFiber.flags & 128) &&\n                (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n                  (null !== error &&\n                    \"function\" === typeof error.componentDidCatch &&\n                    (null === legacyErrorBoundariesThatAlreadyFailed ||\n                      !legacyErrorBoundariesThatAlreadyFailed.has(error)))))\n            )\n              return (\n                (sourceFiber.flags |= 65536),\n                (rootRenderLanes &= -rootRenderLanes),\n                (sourceFiber.lanes |= rootRenderLanes),\n                (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n                initializeClassErrorUpdate(\n                  rootRenderLanes,\n                  root,\n                  sourceFiber,\n                  value\n                ),\n                enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n                !1\n              );\n        }\n        sourceFiber = sourceFiber.return;\n      } while (null !== sourceFiber);\n      return !1;\n    }\n    function reconcileChildren(\n      current,\n      workInProgress,\n      nextChildren,\n      renderLanes\n    ) {\n      workInProgress.child =\n        null === current\n          ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n          : reconcileChildFibers(\n              workInProgress,\n              current.child,\n              nextChildren,\n              renderLanes\n            );\n    }\n    function updateForwardRef(\n      current,\n      workInProgress,\n      Component,\n      nextProps,\n      renderLanes\n    ) {\n      Component = Component.render;\n      var ref = workInProgress.ref;\n      if (\"ref\" in nextProps) {\n        var propsWithoutRef = {};\n        for (var key in nextProps)\n          \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n      } else propsWithoutRef = nextProps;\n      prepareToReadContext(workInProgress);\n      markComponentRenderStarted(workInProgress);\n      nextProps = renderWithHooks(\n        current,\n        workInProgress,\n        Component,\n        propsWithoutRef,\n        ref,\n        renderLanes\n      );\n      key = checkDidRenderIdHook();\n      markComponentRenderStopped();\n      if (null !== current && !didReceiveUpdate)\n        return (\n          bailoutHooks(current, workInProgress, renderLanes),\n          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n        );\n      isHydrating && key && pushMaterializedTreeId(workInProgress);\n      workInProgress.flags |= 1;\n      reconcileChildren(current, workInProgress, nextProps, renderLanes);\n      return workInProgress.child;\n    }\n    function updateMemoComponent(\n      current,\n      workInProgress,\n      Component,\n      nextProps,\n      renderLanes\n    ) {\n      if (null === current) {\n        var type = Component.type;\n        if (\n          \"function\" === typeof type &&\n          !shouldConstruct(type) &&\n          void 0 === type.defaultProps &&\n          null === Component.compare\n        )\n          return (\n            (Component = resolveFunctionForHotReloading(type)),\n            (workInProgress.tag = 15),\n            (workInProgress.type = Component),\n            validateFunctionComponentInDev(workInProgress, type),\n            updateSimpleMemoComponent(\n              current,\n              workInProgress,\n              Component,\n              nextProps,\n              renderLanes\n            )\n          );\n        current = createFiberFromTypeAndProps(\n          Component.type,\n          null,\n          nextProps,\n          workInProgress,\n          workInProgress.mode,\n          renderLanes\n        );\n        current.ref = workInProgress.ref;\n        current.return = workInProgress;\n        return (workInProgress.child = current);\n      }\n      type = current.child;\n      if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n        var prevProps = type.memoizedProps;\n        Component = Component.compare;\n        Component = null !== Component ? Component : shallowEqual;\n        if (\n          Component(prevProps, nextProps) &&\n          current.ref === workInProgress.ref\n        )\n          return bailoutOnAlreadyFinishedWork(\n            current,\n            workInProgress,\n            renderLanes\n          );\n      }\n      workInProgress.flags |= 1;\n      current = createWorkInProgress(type, nextProps);\n      current.ref = workInProgress.ref;\n      current.return = workInProgress;\n      return (workInProgress.child = current);\n    }\n    function updateSimpleMemoComponent(\n      current,\n      workInProgress,\n      Component,\n      nextProps,\n      renderLanes\n    ) {\n      if (null !== current) {\n        var prevProps = current.memoizedProps;\n        if (\n          shallowEqual(prevProps, nextProps) &&\n          current.ref === workInProgress.ref &&\n          workInProgress.type === current.type\n        )\n          if (\n            ((didReceiveUpdate = !1),\n            (workInProgress.pendingProps = nextProps = prevProps),\n            checkScheduledUpdateOrContext(current, renderLanes))\n          )\n            0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n          else\n            return (\n              (workInProgress.lanes = current.lanes),\n              bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n            );\n      }\n      return updateFunctionComponent(\n        current,\n        workInProgress,\n        Component,\n        nextProps,\n        renderLanes\n      );\n    }\n    function updateOffscreenComponent(\n      current,\n      workInProgress,\n      renderLanes,\n      nextProps\n    ) {\n      var nextChildren = nextProps.children,\n        prevState = null !== current ? current.memoizedState : null;\n      if (\"hidden\" === nextProps.mode) {\n        if (0 !== (workInProgress.flags & 128)) {\n          nextProps =\n            null !== prevState\n              ? prevState.baseLanes | renderLanes\n              : renderLanes;\n          if (null !== current) {\n            nextChildren = workInProgress.child = current.child;\n            for (prevState = 0; null !== nextChildren; )\n              (prevState =\n                prevState | nextChildren.lanes | nextChildren.childLanes),\n                (nextChildren = nextChildren.sibling);\n            workInProgress.childLanes = prevState & ~nextProps;\n          } else (workInProgress.childLanes = 0), (workInProgress.child = null);\n          return deferHiddenOffscreenComponent(\n            current,\n            workInProgress,\n            nextProps,\n            renderLanes\n          );\n        }\n        if (0 !== (renderLanes & 536870912))\n          (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n            null !== current &&\n              pushTransition(\n                workInProgress,\n                null !== prevState ? prevState.cachePool : null\n              ),\n            null !== prevState\n              ? pushHiddenContext(workInProgress, prevState)\n              : reuseHiddenContextOnStack(workInProgress),\n            pushOffscreenSuspenseHandler(workInProgress);\n        else\n          return (\n            (workInProgress.lanes = workInProgress.childLanes = 536870912),\n            deferHiddenOffscreenComponent(\n              current,\n              workInProgress,\n              null !== prevState\n                ? prevState.baseLanes | renderLanes\n                : renderLanes,\n              renderLanes\n            )\n          );\n      } else\n        null !== prevState\n          ? (pushTransition(workInProgress, prevState.cachePool),\n            pushHiddenContext(workInProgress, prevState),\n            reuseSuspenseHandlerOnStack(workInProgress),\n            (workInProgress.memoizedState = null))\n          : (null !== current && pushTransition(workInProgress, null),\n            reuseHiddenContextOnStack(workInProgress),\n            reuseSuspenseHandlerOnStack(workInProgress));\n      reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n      return workInProgress.child;\n    }\n    function deferHiddenOffscreenComponent(\n      current,\n      workInProgress,\n      nextBaseLanes,\n      renderLanes\n    ) {\n      var JSCompiler_inline_result = peekCacheFromPool();\n      JSCompiler_inline_result =\n        null === JSCompiler_inline_result\n          ? null\n          : {\n              parent: CacheContext._currentValue,\n              pool: JSCompiler_inline_result\n            };\n      workInProgress.memoizedState = {\n        baseLanes: nextBaseLanes,\n        cachePool: JSCompiler_inline_result\n      };\n      null !== current && pushTransition(workInProgress, null);\n      reuseHiddenContextOnStack(workInProgress);\n      pushOffscreenSuspenseHandler(workInProgress);\n      null !== current &&\n        propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n      return null;\n    }\n    function mountActivityChildren(workInProgress, nextProps) {\n      var hiddenProp = nextProps.hidden;\n      void 0 !== hiddenProp &&\n        console.error(\n          '<Activity> doesn\\'t accept a hidden prop. Use mode=\"hidden\" instead.\\n- <Activity %s>\\n+ <Activity %s>',\n          !0 === hiddenProp\n            ? \"hidden\"\n            : !1 === hiddenProp\n              ? \"hidden={false}\"\n              : \"hidden={...}\",\n          hiddenProp ? 'mode=\"hidden\"' : 'mode=\"visible\"'\n        );\n      nextProps = mountWorkInProgressOffscreenFiber(\n        { mode: nextProps.mode, children: nextProps.children },\n        workInProgress.mode\n      );\n      nextProps.ref = workInProgress.ref;\n      workInProgress.child = nextProps;\n      nextProps.return = workInProgress;\n      return nextProps;\n    }\n    function retryActivityComponentWithoutHydrating(\n      current,\n      workInProgress,\n      renderLanes\n    ) {\n      reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n      current = mountActivityChildren(\n        workInProgress,\n        workInProgress.pendingProps\n      );\n      current.flags |= 2;\n      popSuspenseHandler(workInProgress);\n      workInProgress.memoizedState = null;\n      return current;\n    }\n    function markRef(current, workInProgress) {\n      var ref = workInProgress.ref;\n      if (null === ref)\n        null !== current &&\n          null !== current.ref &&\n          (workInProgress.flags |= 4194816);\n      else {\n        if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n          throw Error(\n            \"Expected ref to be a function, an object returned by React.createRef(), or undefined/null.\"\n          );\n        if (null === current || current.ref !== ref)\n          workInProgress.flags |= 4194816;\n      }\n    }\n    function updateFunctionComponent(\n      current,\n      workInProgress,\n      Component,\n      nextProps,\n      renderLanes\n    ) {\n      if (\n        Component.prototype &&\n        \"function\" === typeof Component.prototype.render\n      ) {\n        var componentName = getComponentNameFromType(Component) || \"Unknown\";\n        didWarnAboutBadClass[componentName] ||\n          (console.error(\n            \"The <%s /> component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.\",\n            componentName,\n            componentName\n          ),\n          (didWarnAboutBadClass[componentName] = !0));\n      }\n      workInProgress.mode & StrictLegacyMode &&\n        ReactStrictModeWarnings.recordLegacyContextWarning(\n          workInProgress,\n          null\n        );\n      null === current &&\n        (validateFunctionComponentInDev(workInProgress, workInProgress.type),\n        Component.contextTypes &&\n          ((componentName = getComponentNameFromType(Component) || \"Unknown\"),\n          didWarnAboutContextTypes[componentName] ||\n            ((didWarnAboutContextTypes[componentName] = !0),\n            console.error(\n              \"%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with React.useContext() instead. (https://react.dev/link/legacy-context)\",\n              componentName\n            ))));\n      prepareToReadContext(workInProgress);\n      markComponentRenderStarted(workInProgress);\n      Component = renderWithHooks(\n        current,\n        workInProgress,\n        Component,\n        nextProps,\n        void 0,\n        renderLanes\n      );\n      nextProps = checkDidRenderIdHook();\n      markComponentRenderStopped();\n      if (null !== current && !didReceiveUpdate)\n        return (\n          bailoutHooks(current, workInProgress, renderLanes),\n          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n        );\n      isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n      workInProgress.flags |= 1;\n      reconcileChildren(current, workInProgress, Component, renderLanes);\n      return workInProgress.child;\n    }\n    function replayFunctionComponent(\n      current,\n      workInProgress,\n      nextProps,\n      Component,\n      secondArg,\n      renderLanes\n    ) {\n      prepareToReadContext(workInProgress);\n      markComponentRenderStarted(workInProgress);\n      hookTypesUpdateIndexDev = -1;\n      ignorePreviousDependencies =\n        null !== current && current.type !== workInProgress.type;\n      workInProgress.updateQueue = null;\n      nextProps = renderWithHooksAgain(\n        workInProgress,\n        Component,\n        nextProps,\n        secondArg\n      );\n      finishRenderingHooks(current, workInProgress);\n      Component = checkDidRenderIdHook();\n      markComponentRenderStopped();\n      if (null !== current && !didReceiveUpdate)\n        return (\n          bailoutHooks(current, workInProgress, renderLanes),\n          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n        );\n      isHydrating && Component && pushMaterializedTreeId(workInProgress);\n      workInProgress.flags |= 1;\n      reconcileChildren(current, workInProgress, nextProps, renderLanes);\n      return workInProgress.child;\n    }\n    function updateClassComponent(\n      current,\n      workInProgress,\n      Component,\n      nextProps,\n      renderLanes\n    ) {\n      switch (shouldErrorImpl(workInProgress)) {\n        case !1:\n          var _instance = workInProgress.stateNode,\n            state = new workInProgress.type(\n              workInProgress.memoizedProps,\n              _instance.context\n            ).state;\n          _instance.updater.enqueueSetState(_instance, state, null);\n          break;\n        case !0:\n          workInProgress.flags |= 128;\n          workInProgress.flags |= 65536;\n          _instance = Error(\"Simulated error coming from DevTools\");\n          var lane = renderLanes & -renderLanes;\n          workInProgress.lanes |= lane;\n          state = workInProgressRoot;\n          if (null === state)\n            throw Error(\n              \"Expected a work-in-progress root. This is a bug in React. Please file an issue.\"\n            );\n          lane = createClassErrorUpdate(lane);\n          initializeClassErrorUpdate(\n            lane,\n            state,\n            workInProgress,\n            createCapturedValueAtFiber(_instance, workInProgress)\n          );\n          enqueueCapturedUpdate(workInProgress, lane);\n      }\n      prepareToReadContext(workInProgress);\n      if (null === workInProgress.stateNode) {\n        state = emptyContextObject;\n        _instance = Component.contextType;\n        \"contextType\" in Component &&\n          null !== _instance &&\n          (void 0 === _instance || _instance.$$typeof !== REACT_CONTEXT_TYPE) &&\n          !didWarnAboutInvalidateContextType.has(Component) &&\n          (didWarnAboutInvalidateContextType.add(Component),\n          (lane =\n            void 0 === _instance\n              ? \" However, it is set to undefined. This can be caused by a typo or by mixing up named and default imports. This can also happen due to a circular dependency, so try moving the createContext() call to a separate file.\"\n              : \"object\" !== typeof _instance\n                ? \" However, it is set to a \" + typeof _instance + \".\"\n                : _instance.$$typeof === REACT_CONSUMER_TYPE\n                  ? \" Did you accidentally pass the Context.Consumer instead?\"\n                  : \" However, it is set to an object with keys {\" +\n                    Object.keys(_instance).join(\", \") +\n                    \"}.\"),\n          console.error(\n            \"%s defines an invalid contextType. contextType should point to the Context object returned by React.createContext().%s\",\n            getComponentNameFromType(Component) || \"Component\",\n            lane\n          ));\n        \"object\" === typeof _instance &&\n          null !== _instance &&\n          (state = readContext(_instance));\n        _instance = new Component(nextProps, state);\n        if (workInProgress.mode & StrictLegacyMode) {\n          setIsStrictModeForDevtools(!0);\n          try {\n            _instance = new Component(nextProps, state);\n          } finally {\n            setIsStrictModeForDevtools(!1);\n          }\n        }\n        state = workInProgress.memoizedState =\n          null !== _instance.state && void 0 !== _instance.state\n            ? _instance.state\n            : null;\n        _instance.updater = classComponentUpdater;\n        workInProgress.stateNode = _instance;\n        _instance._reactInternals = workInProgress;\n        _instance._reactInternalInstance = fakeInternalInstance;\n        \"function\" === typeof Component.getDerivedStateFromProps &&\n          null === state &&\n          ((state = getComponentNameFromType(Component) || \"Component\"),\n          didWarnAboutUninitializedState.has(state) ||\n            (didWarnAboutUninitializedState.add(state),\n            console.error(\n              \"`%s` uses `getDerivedStateFromProps` but its initial state is %s. This is not recommended. Instead, define the initial state by assigning an object to `this.state` in the constructor of `%s`. This ensures that `getDerivedStateFromProps` arguments have a consistent shape.\",\n              state,\n              null === _instance.state ? \"null\" : \"undefined\",\n              state\n            )));\n        if (\n          \"function\" === typeof Component.getDerivedStateFromProps ||\n          \"function\" === typeof _instance.getSnapshotBeforeUpdate\n        ) {\n          var foundWillUpdateName = (lane = state = null);\n          \"function\" === typeof _instance.componentWillMount &&\n          !0 !== _instance.componentWillMount.__suppressDeprecationWarning\n            ? (state = \"componentWillMount\")\n            : \"function\" === typeof _instance.UNSAFE_componentWillMount &&\n              (state = \"UNSAFE_componentWillMount\");\n          \"function\" === typeof _instance.componentWillReceiveProps &&\n          !0 !==\n            _instance.componentWillReceiveProps.__suppressDeprecationWarning\n            ? (lane = \"componentWillReceiveProps\")\n            : \"function\" ===\n                typeof _instance.UNSAFE_componentWillReceiveProps &&\n              (lane = \"UNSAFE_componentWillReceiveProps\");\n          \"function\" === typeof _instance.componentWillUpdate &&\n          !0 !== _instance.componentWillUpdate.__suppressDeprecationWarning\n            ? (foundWillUpdateName = \"componentWillUpdate\")\n            : \"function\" === typeof _instance.UNSAFE_componentWillUpdate &&\n              (foundWillUpdateName = \"UNSAFE_componentWillUpdate\");\n          if (null !== state || null !== lane || null !== foundWillUpdateName) {\n            _instance = getComponentNameFromType(Component) || \"Component\";\n            var newApiName =\n              \"function\" === typeof Component.getDerivedStateFromProps\n                ? \"getDerivedStateFromProps()\"\n                : \"getSnapshotBeforeUpdate()\";\n            didWarnAboutLegacyLifecyclesAndDerivedState.has(_instance) ||\n              (didWarnAboutLegacyLifecyclesAndDerivedState.add(_instance),\n              console.error(\n                \"Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n%s uses %s but also contains the following legacy lifecycles:%s%s%s\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\nhttps://react.dev/link/unsafe-component-lifecycles\",\n                _instance,\n                newApiName,\n                null !== state ? \"\\n  \" + state : \"\",\n                null !== lane ? \"\\n  \" + lane : \"\",\n                null !== foundWillUpdateName ? \"\\n  \" + foundWillUpdateName : \"\"\n              ));\n          }\n        }\n        _instance = workInProgress.stateNode;\n        state = getComponentNameFromType(Component) || \"Component\";\n        _instance.render ||\n          (Component.prototype &&\n          \"function\" === typeof Component.prototype.render\n            ? console.error(\n                \"No `render` method found on the %s instance: did you accidentally return an object from the constructor?\",\n                state\n              )\n            : console.error(\n                \"No `render` method found on the %s instance: you may have forgotten to define `render`.\",\n                state\n              ));\n        !_instance.getInitialState ||\n          _instance.getInitialState.isReactClassApproved ||\n          _instance.state ||\n          console.error(\n            \"getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?\",\n            state\n          );\n        _instance.getDefaultProps &&\n          !_instance.getDefaultProps.isReactClassApproved &&\n          console.error(\n            \"getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.\",\n            state\n          );\n        _instance.contextType &&\n          console.error(\n            \"contextType was defined as an instance property on %s. Use a static property to define contextType instead.\",\n            state\n          );\n        Component.childContextTypes &&\n          !didWarnAboutChildContextTypes.has(Component) &&\n          (didWarnAboutChildContextTypes.add(Component),\n          console.error(\n            \"%s uses the legacy childContextTypes API which was removed in React 19. Use React.createContext() instead. (https://react.dev/link/legacy-context)\",\n            state\n          ));\n        Component.contextTypes &&\n          !didWarnAboutContextTypes$1.has(Component) &&\n          (didWarnAboutContextTypes$1.add(Component),\n          console.error(\n            \"%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with static contextType instead. (https://react.dev/link/legacy-context)\",\n            state\n          ));\n        \"function\" === typeof _instance.componentShouldUpdate &&\n          console.error(\n            \"%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.\",\n            state\n          );\n        Component.prototype &&\n          Component.prototype.isPureReactComponent &&\n          \"undefined\" !== typeof _instance.shouldComponentUpdate &&\n          console.error(\n            \"%s has a method called shouldComponentUpdate(). shouldComponentUpdate should not be used when extending React.PureComponent. Please extend React.Component if shouldComponentUpdate is used.\",\n            getComponentNameFromType(Component) || \"A pure component\"\n          );\n        \"function\" === typeof _instance.componentDidUnmount &&\n          console.error(\n            \"%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?\",\n            state\n          );\n        \"function\" === typeof _instance.componentDidReceiveProps &&\n          console.error(\n            \"%s has a method called componentDidReceiveProps(). But there is no such lifecycle method. If you meant to update the state in response to changing props, use componentWillReceiveProps(). If you meant to fetch data or run side-effects or mutations after React has updated the UI, use componentDidUpdate().\",\n            state\n          );\n        \"function\" === typeof _instance.componentWillRecieveProps &&\n          console.error(\n            \"%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?\",\n            state\n          );\n        \"function\" === typeof _instance.UNSAFE_componentWillRecieveProps &&\n          console.error(\n            \"%s has a method called UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?\",\n            state\n          );\n        lane = _instance.props !== nextProps;\n        void 0 !== _instance.props &&\n          lane &&\n          console.error(\n            \"When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.\",\n            state\n          );\n        _instance.defaultProps &&\n          console.error(\n            \"Setting defaultProps as an instance property on %s is not supported and will be ignored. Instead, define defaultProps as a static property on %s.\",\n            state,\n            state\n          );\n        \"function\" !== typeof _instance.getSnapshotBeforeUpdate ||\n          \"function\" === typeof _instance.componentDidUpdate ||\n          didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(Component) ||\n          (didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(Component),\n          console.error(\n            \"%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). This component defines getSnapshotBeforeUpdate() only.\",\n            getComponentNameFromType(Component)\n          ));\n        \"function\" === typeof _instance.getDerivedStateFromProps &&\n          console.error(\n            \"%s: getDerivedStateFromProps() is defined as an instance method and will be ignored. Instead, declare it as a static method.\",\n            state\n          );\n        \"function\" === typeof _instance.getDerivedStateFromError &&\n          console.error(\n            \"%s: getDerivedStateFromError() is defined as an instance method and will be ignored. Instead, declare it as a static method.\",\n            state\n          );\n        \"function\" === typeof Component.getSnapshotBeforeUpdate &&\n          console.error(\n            \"%s: getSnapshotBeforeUpdate() is defined as a static method and will be ignored. Instead, declare it as an instance method.\",\n            state\n          );\n        (lane = _instance.state) &&\n          (\"object\" !== typeof lane || isArrayImpl(lane)) &&\n          console.error(\"%s.state: must be set to an object or null\", state);\n        \"function\" === typeof _instance.getChildContext &&\n          \"object\" !== typeof Component.childContextTypes &&\n          console.error(\n            \"%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().\",\n            state\n          );\n        _instance = workInProgress.stateNode;\n        _instance.props = nextProps;\n        _instance.state = workInProgress.memoizedState;\n        _instance.refs = {};\n        initializeUpdateQueue(workInProgress);\n        state = Component.contextType;\n        _instance.context =\n          \"object\" === typeof state && null !== state\n            ? readContext(state)\n            : emptyContextObject;\n        _instance.state === nextProps &&\n          ((state = getComponentNameFromType(Component) || \"Component\"),\n          didWarnAboutDirectlyAssigningPropsToState.has(state) ||\n            (didWarnAboutDirectlyAssigningPropsToState.add(state),\n            console.error(\n              \"%s: It is not recommended to assign props directly to state because updates to props won't be reflected in state. In most cases, it is better to use props directly.\",\n              state\n            )));\n        workInProgress.mode & StrictLegacyMode &&\n          ReactStrictModeWarnings.recordLegacyContextWarning(\n            workInProgress,\n            _instance\n          );\n        ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(\n          workInProgress,\n          _instance\n        );\n        _instance.state = workInProgress.memoizedState;\n        state = Component.getDerivedStateFromProps;\n        \"function\" === typeof state &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            state,\n            nextProps\n          ),\n          (_instance.state = workInProgress.memoizedState));\n        \"function\" === typeof Component.getDerivedStateFromProps ||\n          \"function\" === typeof _instance.getSnapshotBeforeUpdate ||\n          (\"function\" !== typeof _instance.UNSAFE_componentWillMount &&\n            \"function\" !== typeof _instance.componentWillMount) ||\n          ((state = _instance.state),\n          \"function\" === typeof _instance.componentWillMount &&\n            _instance.componentWillMount(),\n          \"function\" === typeof _instance.UNSAFE_componentWillMount &&\n            _instance.UNSAFE_componentWillMount(),\n          state !== _instance.state &&\n            (console.error(\n              \"%s.componentWillMount(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.\",\n              getComponentNameFromFiber(workInProgress) || \"Component\"\n            ),\n            classComponentUpdater.enqueueReplaceState(\n              _instance,\n              _instance.state,\n              null\n            )),\n          processUpdateQueue(workInProgress, nextProps, _instance, renderLanes),\n          suspendIfUpdateReadFromEntangledAsyncAction(),\n          (_instance.state = workInProgress.memoizedState));\n        \"function\" === typeof _instance.componentDidMount &&\n          (workInProgress.flags |= 4194308);\n        (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n          (workInProgress.flags |= 134217728);\n        _instance = !0;\n      } else if (null === current) {\n        _instance = workInProgress.stateNode;\n        var unresolvedOldProps = workInProgress.memoizedProps;\n        lane = resolveClassComponentProps(Component, unresolvedOldProps);\n        _instance.props = lane;\n        var oldContext = _instance.context;\n        foundWillUpdateName = Component.contextType;\n        state = emptyContextObject;\n        \"object\" === typeof foundWillUpdateName &&\n          null !== foundWillUpdateName &&\n          (state = readContext(foundWillUpdateName));\n        newApiName = Component.getDerivedStateFromProps;\n        foundWillUpdateName =\n          \"function\" === typeof newApiName ||\n          \"function\" === typeof _instance.getSnapshotBeforeUpdate;\n        unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n        foundWillUpdateName ||\n          (\"function\" !== typeof _instance.UNSAFE_componentWillReceiveProps &&\n            \"function\" !== typeof _instance.componentWillReceiveProps) ||\n          ((unresolvedOldProps || oldContext !== state) &&\n            callComponentWillReceiveProps(\n              workInProgress,\n              _instance,\n              nextProps,\n              state\n            ));\n        hasForceUpdate = !1;\n        var oldState = workInProgress.memoizedState;\n        _instance.state = oldState;\n        processUpdateQueue(workInProgress, nextProps, _instance, renderLanes);\n        suspendIfUpdateReadFromEntangledAsyncAction();\n        oldContext = workInProgress.memoizedState;\n        unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n          ? (\"function\" === typeof newApiName &&\n              (applyDerivedStateFromProps(\n                workInProgress,\n                Component,\n                newApiName,\n                nextProps\n              ),\n              (oldContext = workInProgress.memoizedState)),\n            (lane =\n              hasForceUpdate ||\n              checkShouldComponentUpdate(\n                workInProgress,\n                Component,\n                lane,\n                nextProps,\n                oldState,\n                oldContext,\n                state\n              ))\n              ? (foundWillUpdateName ||\n                  (\"function\" !== typeof _instance.UNSAFE_componentWillMount &&\n                    \"function\" !== typeof _instance.componentWillMount) ||\n                  (\"function\" === typeof _instance.componentWillMount &&\n                    _instance.componentWillMount(),\n                  \"function\" === typeof _instance.UNSAFE_componentWillMount &&\n                    _instance.UNSAFE_componentWillMount()),\n                \"function\" === typeof _instance.componentDidMount &&\n                  (workInProgress.flags |= 4194308),\n                (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n                  (workInProgress.flags |= 134217728))\n              : (\"function\" === typeof _instance.componentDidMount &&\n                  (workInProgress.flags |= 4194308),\n                (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n                  (workInProgress.flags |= 134217728),\n                (workInProgress.memoizedProps = nextProps),\n                (workInProgress.memoizedState = oldContext)),\n            (_instance.props = nextProps),\n            (_instance.state = oldContext),\n            (_instance.context = state),\n            (_instance = lane))\n          : (\"function\" === typeof _instance.componentDidMount &&\n              (workInProgress.flags |= 4194308),\n            (workInProgress.mode & StrictEffectsMode) !== NoMode &&\n              (workInProgress.flags |= 134217728),\n            (_instance = !1));\n      } else {\n        _instance = workInProgress.stateNode;\n        cloneUpdateQueue(current, workInProgress);\n        state = workInProgress.memoizedProps;\n        foundWillUpdateName = resolveClassComponentProps(Component, state);\n        _instance.props = foundWillUpdateName;\n        newApiName = workInProgress.pendingProps;\n        oldState = _instance.context;\n        oldContext = Component.contextType;\n        lane = emptyContextObject;\n        \"object\" === typeof oldContext &&\n          null !== oldContext &&\n          (lane = readContext(oldContext));\n        unresolvedOldProps = Component.getDerivedStateFromProps;\n        (oldContext =\n          \"function\" === typeof unresolvedOldProps ||\n          \"function\" === typeof _instance.getSnapshotBeforeUpdate) ||\n          (\"function\" !== typeof _instance.UNSAFE_componentWillReceiveProps &&\n            \"function\" !== typeof _instance.componentWillReceiveProps) ||\n          ((state !== newApiName || oldState !== lane) &&\n            callComponentWillReceiveProps(\n              workInProgress,\n              _instance,\n              nextProps,\n              lane\n            ));\n        hasForceUpdate = !1;\n        oldState = workInProgress.memoizedState;\n        _instance.state = oldState;\n        processUpdateQueue(workInProgress, nextProps, _instance, renderLanes);\n        suspendIfUpdateReadFromEntangledAsyncAction();\n        var newState = workInProgress.memoizedState;\n        state !== newApiName ||\n        oldState !== newState ||\n        hasForceUpdate ||\n        (null !== current &&\n          null !== current.dependencies &&\n          checkIfContextChanged(current.dependencies))\n          ? (\"function\" === typeof unresolvedOldProps &&\n              (applyDerivedStateFromProps(\n                workInProgress,\n                Component,\n                unresolvedOldProps,\n                nextProps\n              ),\n              (newState = workInProgress.memoizedState)),\n            (foundWillUpdateName =\n              hasForceUpdate ||\n              checkShouldComponentUpdate(\n                workInProgress,\n                Component,\n                foundWillUpdateName,\n                nextProps,\n                oldState,\n                newState,\n                lane\n              ) ||\n              (null !== current &&\n                null !== current.dependencies &&\n                checkIfContextChanged(current.dependencies)))\n              ? (oldContext ||\n                  (\"function\" !== typeof _instance.UNSAFE_componentWillUpdate &&\n                    \"function\" !== typeof _instance.componentWillUpdate) ||\n                  (\"function\" === typeof _instance.componentWillUpdate &&\n                    _instance.componentWillUpdate(nextProps, newState, lane),\n                  \"function\" === typeof _instance.UNSAFE_componentWillUpdate &&\n                    _instance.UNSAFE_componentWillUpdate(\n                      nextProps,\n                      newState,\n                      lane\n                    )),\n                \"function\" === typeof _instance.componentDidUpdate &&\n                  (workInProgress.flags |= 4),\n                \"function\" === typeof _instance.getSnapshotBeforeUpdate &&\n                  (workInProgress.flags |= 1024))\n              : (\"function\" !== typeof _instance.componentDidUpdate ||\n                  (state === current.memoizedProps &&\n                    oldState === current.memoizedState) ||\n                  (workInProgress.flags |= 4),\n                \"function\" !== typeof _instance.getSnapshotBeforeUpdate ||\n                  (state === current.memoizedProps &&\n                    oldState === current.memoizedState) ||\n                  (workInProgress.flags |= 1024),\n                (workInProgress.memoizedProps = nextProps),\n                (workInProgress.memoizedState = newState)),\n            (_instance.props = nextProps),\n            (_instance.state = newState),\n            (_instance.context = lane),\n            (_instance = foundWillUpdateName))\n          : (\"function\" !== typeof _instance.componentDidUpdate ||\n              (state === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 4),\n            \"function\" !== typeof _instance.getSnapshotBeforeUpdate ||\n              (state === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 1024),\n            (_instance = !1));\n      }\n      lane = _instance;\n      markRef(current, workInProgress);\n      state = 0 !== (workInProgress.flags & 128);\n      if (lane || state) {\n        lane = workInProgress.stateNode;\n        setCurrentFiber(workInProgress);\n        if (state && \"function\" !== typeof Component.getDerivedStateFromError)\n          (Component = null), (profilerStartTime = -1);\n        else {\n          markComponentRenderStarted(workInProgress);\n          Component = callRenderInDEV(lane);\n          if (workInProgress.mode & StrictLegacyMode) {\n            setIsStrictModeForDevtools(!0);\n            try {\n              callRenderInDEV(lane);\n            } finally {\n              setIsStrictModeForDevtools(!1);\n            }\n          }\n          markComponentRenderStopped();\n        }\n        workInProgress.flags |= 1;\n        null !== current && state\n          ? ((workInProgress.child = reconcileChildFibers(\n              workInProgress,\n              current.child,\n              null,\n              renderLanes\n            )),\n            (workInProgress.child = reconcileChildFibers(\n              workInProgress,\n              null,\n              Component,\n              renderLanes\n            )))\n          : reconcileChildren(current, workInProgress, Component, renderLanes);\n        workInProgress.memoizedState = lane.state;\n        current = workInProgress.child;\n      } else\n        current = bailoutOnAlreadyFinishedWork(\n          current,\n          workInProgress,\n          renderLanes\n        );\n      renderLanes = workInProgress.stateNode;\n      _instance &&\n        renderLanes.props !== nextProps &&\n        (didWarnAboutReassigningProps ||\n          console.error(\n            \"It looks like %s is reassigning its own `this.props` while rendering. This is not supported and can lead to confusing bugs.\",\n            getComponentNameFromFiber(workInProgress) || \"a component\"\n          ),\n        (didWarnAboutReassigningProps = !0));\n      return current;\n    }\n    function mountHostRootWithoutHydrating(\n      current,\n      workInProgress,\n      nextChildren,\n      renderLanes\n    ) {\n      resetHydrationState();\n      workInProgress.flags |= 256;\n      reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n      return workInProgress.child;\n    }\n    function validateFunctionComponentInDev(workInProgress, Component) {\n      Component &&\n        Component.childContextTypes &&\n        console.error(\n          \"childContextTypes cannot be defined on a function component.\\n  %s.childContextTypes = ...\",\n          Component.displayName || Component.name || \"Component\"\n        );\n      \"function\" === typeof Component.getDerivedStateFromProps &&\n        ((workInProgress = getComponentNameFromType(Component) || \"Unknown\"),\n        didWarnAboutGetDerivedStateOnFunctionComponent[workInProgress] ||\n          (console.error(\n            \"%s: Function components do not support getDerivedStateFromProps.\",\n            workInProgress\n          ),\n          (didWarnAboutGetDerivedStateOnFunctionComponent[workInProgress] =\n            !0)));\n      \"object\" === typeof Component.contextType &&\n        null !== Component.contextType &&\n        ((Component = getComponentNameFromType(Component) || \"Unknown\"),\n        didWarnAboutContextTypeOnFunctionComponent[Component] ||\n          (console.error(\n            \"%s: Function components do not support contextType.\",\n            Component\n          ),\n          (didWarnAboutContextTypeOnFunctionComponent[Component] = !0)));\n    }\n    function mountSuspenseOffscreenState(renderLanes) {\n      return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n    }\n    function getRemainingWorkInPrimaryTree(\n      current,\n      primaryTreeDidDefer,\n      renderLanes\n    ) {\n      current = null !== current ? current.childLanes & ~renderLanes : 0;\n      primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n      return current;\n    }\n    function updateSuspenseComponent(current, workInProgress, renderLanes) {\n      var JSCompiler_object_inline_digest_2551;\n      var JSCompiler_object_inline_stack_2552 = workInProgress.pendingProps;\n      shouldSuspendImpl(workInProgress) && (workInProgress.flags |= 128);\n      var JSCompiler_object_inline_message_2550 = !1;\n      var didSuspend = 0 !== (workInProgress.flags & 128);\n      (JSCompiler_object_inline_digest_2551 = didSuspend) ||\n        (JSCompiler_object_inline_digest_2551 =\n          null !== current && null === current.memoizedState\n            ? !1\n            : 0 !== (suspenseStackCursor.current & ForceSuspenseFallback));\n      JSCompiler_object_inline_digest_2551 &&\n        ((JSCompiler_object_inline_message_2550 = !0),\n        (workInProgress.flags &= -129));\n      JSCompiler_object_inline_digest_2551 = 0 !== (workInProgress.flags & 32);\n      workInProgress.flags &= -33;\n      if (null === current) {\n        if (isHydrating) {\n          JSCompiler_object_inline_message_2550\n            ? pushPrimaryTreeSuspenseHandler(workInProgress)\n            : reuseSuspenseHandlerOnStack(workInProgress);\n          (current = nextHydratableInstance)\n            ? ((renderLanes = canHydrateHydrationBoundary(\n                current,\n                rootOrSingletonContext\n              )),\n              (renderLanes =\n                null !== renderLanes && renderLanes.data !== ACTIVITY_START_DATA\n                  ? renderLanes\n                  : null),\n              null !== renderLanes &&\n                ((JSCompiler_object_inline_digest_2551 = {\n                  dehydrated: renderLanes,\n                  treeContext: getSuspendedTreeContext(),\n                  retryLane: 536870912,\n                  hydrationErrors: null\n                }),\n                (workInProgress.memoizedState =\n                  JSCompiler_object_inline_digest_2551),\n                (JSCompiler_object_inline_digest_2551 =\n                  createFiberFromDehydratedFragment(renderLanes)),\n                (JSCompiler_object_inline_digest_2551.return = workInProgress),\n                (workInProgress.child = JSCompiler_object_inline_digest_2551),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = null)))\n            : (renderLanes = null);\n          if (null === renderLanes)\n            throw (\n              (warnNonHydratedInstance(workInProgress, current),\n              throwOnHydrationMismatch(workInProgress))\n            );\n          isSuspenseInstanceFallback(renderLanes)\n            ? (workInProgress.lanes = 32)\n            : (workInProgress.lanes = 536870912);\n          return null;\n        }\n        var nextPrimaryChildren = JSCompiler_object_inline_stack_2552.children;\n        JSCompiler_object_inline_stack_2552 =\n          JSCompiler_object_inline_stack_2552.fallback;\n        if (JSCompiler_object_inline_message_2550) {\n          reuseSuspenseHandlerOnStack(workInProgress);\n          var mode = workInProgress.mode;\n          nextPrimaryChildren = mountWorkInProgressOffscreenFiber(\n            { mode: \"hidden\", children: nextPrimaryChildren },\n            mode\n          );\n          JSCompiler_object_inline_stack_2552 = createFiberFromFragment(\n            JSCompiler_object_inline_stack_2552,\n            mode,\n            renderLanes,\n            null\n          );\n          nextPrimaryChildren.return = workInProgress;\n          JSCompiler_object_inline_stack_2552.return = workInProgress;\n          nextPrimaryChildren.sibling = JSCompiler_object_inline_stack_2552;\n          workInProgress.child = nextPrimaryChildren;\n          nextPrimaryChildren = workInProgress.child;\n          nextPrimaryChildren.memoizedState =\n            mountSuspenseOffscreenState(renderLanes);\n          nextPrimaryChildren.childLanes = getRemainingWorkInPrimaryTree(\n            current,\n            JSCompiler_object_inline_digest_2551,\n            renderLanes\n          );\n          workInProgress.memoizedState = SUSPENDED_MARKER;\n          return JSCompiler_object_inline_stack_2552;\n        }\n        pushPrimaryTreeSuspenseHandler(workInProgress);\n        return mountSuspensePrimaryChildren(\n          workInProgress,\n          nextPrimaryChildren\n        );\n      }\n      var prevState = current.memoizedState;\n      if (null !== prevState) {\n        var JSCompiler_object_inline_componentStack_2553 = prevState.dehydrated;\n        if (null !== JSCompiler_object_inline_componentStack_2553) {\n          if (didSuspend)\n            workInProgress.flags & 256\n              ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n                (workInProgress.flags &= -257),\n                (workInProgress = retrySuspenseComponentWithoutHydrating(\n                  current,\n                  workInProgress,\n                  renderLanes\n                )))\n              : null !== workInProgress.memoizedState\n                ? (reuseSuspenseHandlerOnStack(workInProgress),\n                  (workInProgress.child = current.child),\n                  (workInProgress.flags |= 128),\n                  (workInProgress = null))\n                : (reuseSuspenseHandlerOnStack(workInProgress),\n                  (nextPrimaryChildren =\n                    JSCompiler_object_inline_stack_2552.fallback),\n                  (mode = workInProgress.mode),\n                  (JSCompiler_object_inline_stack_2552 =\n                    mountWorkInProgressOffscreenFiber(\n                      {\n                        mode: \"visible\",\n                        children: JSCompiler_object_inline_stack_2552.children\n                      },\n                      mode\n                    )),\n                  (nextPrimaryChildren = createFiberFromFragment(\n                    nextPrimaryChildren,\n                    mode,\n                    renderLanes,\n                    null\n                  )),\n                  (nextPrimaryChildren.flags |= 2),\n                  (JSCompiler_object_inline_stack_2552.return = workInProgress),\n                  (nextPrimaryChildren.return = workInProgress),\n                  (JSCompiler_object_inline_stack_2552.sibling =\n                    nextPrimaryChildren),\n                  (workInProgress.child = JSCompiler_object_inline_stack_2552),\n                  reconcileChildFibers(\n                    workInProgress,\n                    current.child,\n                    null,\n                    renderLanes\n                  ),\n                  (JSCompiler_object_inline_stack_2552 = workInProgress.child),\n                  (JSCompiler_object_inline_stack_2552.memoizedState =\n                    mountSuspenseOffscreenState(renderLanes)),\n                  (JSCompiler_object_inline_stack_2552.childLanes =\n                    getRemainingWorkInPrimaryTree(\n                      current,\n                      JSCompiler_object_inline_digest_2551,\n                      renderLanes\n                    )),\n                  (workInProgress.memoizedState = SUSPENDED_MARKER),\n                  (workInProgress = nextPrimaryChildren));\n          else if (\n            (pushPrimaryTreeSuspenseHandler(workInProgress),\n            warnIfHydrating(),\n            isSuspenseInstanceFallback(\n              JSCompiler_object_inline_componentStack_2553\n            ))\n          ) {\n            JSCompiler_object_inline_digest_2551 =\n              JSCompiler_object_inline_componentStack_2553.nextSibling &&\n              JSCompiler_object_inline_componentStack_2553.nextSibling.dataset;\n            if (JSCompiler_object_inline_digest_2551) {\n              nextPrimaryChildren = JSCompiler_object_inline_digest_2551.dgst;\n              var message = JSCompiler_object_inline_digest_2551.msg;\n              mode = JSCompiler_object_inline_digest_2551.stck;\n              var componentStack = JSCompiler_object_inline_digest_2551.cstck;\n            }\n            JSCompiler_object_inline_message_2550 = message;\n            JSCompiler_object_inline_digest_2551 = nextPrimaryChildren;\n            JSCompiler_object_inline_stack_2552 = mode;\n            JSCompiler_object_inline_componentStack_2553 = componentStack;\n            nextPrimaryChildren = JSCompiler_object_inline_message_2550;\n            mode = JSCompiler_object_inline_componentStack_2553;\n            nextPrimaryChildren = nextPrimaryChildren\n              ? Error(nextPrimaryChildren)\n              : Error(\n                  \"The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering.\"\n                );\n            nextPrimaryChildren.stack =\n              JSCompiler_object_inline_stack_2552 || \"\";\n            nextPrimaryChildren.digest = JSCompiler_object_inline_digest_2551;\n            JSCompiler_object_inline_digest_2551 =\n              void 0 === mode ? null : mode;\n            JSCompiler_object_inline_stack_2552 = {\n              value: nextPrimaryChildren,\n              source: null,\n              stack: JSCompiler_object_inline_digest_2551\n            };\n            \"string\" === typeof JSCompiler_object_inline_digest_2551 &&\n              CapturedStacks.set(\n                nextPrimaryChildren,\n                JSCompiler_object_inline_stack_2552\n              );\n            queueHydrationError(JSCompiler_object_inline_stack_2552);\n            workInProgress = retrySuspenseComponentWithoutHydrating(\n              current,\n              workInProgress,\n              renderLanes\n            );\n          } else if (\n            (didReceiveUpdate ||\n              propagateParentContextChanges(\n                current,\n                workInProgress,\n                renderLanes,\n                !1\n              ),\n            (JSCompiler_object_inline_digest_2551 =\n              0 !== (renderLanes & current.childLanes)),\n            didReceiveUpdate || JSCompiler_object_inline_digest_2551)\n          ) {\n            JSCompiler_object_inline_digest_2551 = workInProgressRoot;\n            if (\n              null !== JSCompiler_object_inline_digest_2551 &&\n              ((JSCompiler_object_inline_stack_2552 = getBumpedLaneForHydration(\n                JSCompiler_object_inline_digest_2551,\n                renderLanes\n              )),\n              0 !== JSCompiler_object_inline_stack_2552 &&\n                JSCompiler_object_inline_stack_2552 !== prevState.retryLane)\n            )\n              throw (\n                ((prevState.retryLane = JSCompiler_object_inline_stack_2552),\n                enqueueConcurrentRenderForLane(\n                  current,\n                  JSCompiler_object_inline_stack_2552\n                ),\n                scheduleUpdateOnFiber(\n                  JSCompiler_object_inline_digest_2551,\n                  current,\n                  JSCompiler_object_inline_stack_2552\n                ),\n                SelectiveHydrationException)\n              );\n            isSuspenseInstancePending(\n              JSCompiler_object_inline_componentStack_2553\n            ) || renderDidSuspendDelayIfPossible();\n            workInProgress = retrySuspenseComponentWithoutHydrating(\n              current,\n              workInProgress,\n              renderLanes\n            );\n          } else\n            isSuspenseInstancePending(\n              JSCompiler_object_inline_componentStack_2553\n            )\n              ? ((workInProgress.flags |= 192),\n                (workInProgress.child = current.child),\n                (workInProgress = null))\n              : ((current = prevState.treeContext),\n                (nextHydratableInstance = getNextHydratable(\n                  JSCompiler_object_inline_componentStack_2553.nextSibling\n                )),\n                (hydrationParentFiber = workInProgress),\n                (isHydrating = !0),\n                (hydrationErrors = null),\n                (didSuspendOrErrorDEV = !1),\n                (hydrationDiffRootDEV = null),\n                (rootOrSingletonContext = !1),\n                null !== current &&\n                  restoreSuspendedTreeContext(workInProgress, current),\n                (workInProgress = mountSuspensePrimaryChildren(\n                  workInProgress,\n                  JSCompiler_object_inline_stack_2552.children\n                )),\n                (workInProgress.flags |= 4096));\n          return workInProgress;\n        }\n      }\n      if (JSCompiler_object_inline_message_2550)\n        return (\n          reuseSuspenseHandlerOnStack(workInProgress),\n          (nextPrimaryChildren = JSCompiler_object_inline_stack_2552.fallback),\n          (mode = workInProgress.mode),\n          (componentStack = current.child),\n          (JSCompiler_object_inline_componentStack_2553 =\n            componentStack.sibling),\n          (JSCompiler_object_inline_stack_2552 = createWorkInProgress(\n            componentStack,\n            {\n              mode: \"hidden\",\n              children: JSCompiler_object_inline_stack_2552.children\n            }\n          )),\n          (JSCompiler_object_inline_stack_2552.subtreeFlags =\n            componentStack.subtreeFlags & 65011712),\n          null !== JSCompiler_object_inline_componentStack_2553\n            ? (nextPrimaryChildren = createWorkInProgress(\n                JSCompiler_object_inline_componentStack_2553,\n                nextPrimaryChildren\n              ))\n            : ((nextPrimaryChildren = createFiberFromFragment(\n                nextPrimaryChildren,\n                mode,\n                renderLanes,\n                null\n              )),\n              (nextPrimaryChildren.flags |= 2)),\n          (nextPrimaryChildren.return = workInProgress),\n          (JSCompiler_object_inline_stack_2552.return = workInProgress),\n          (JSCompiler_object_inline_stack_2552.sibling = nextPrimaryChildren),\n          (workInProgress.child = JSCompiler_object_inline_stack_2552),\n          (JSCompiler_object_inline_stack_2552 = nextPrimaryChildren),\n          (nextPrimaryChildren = workInProgress.child),\n          (mode = current.child.memoizedState),\n          null === mode\n            ? (mode = mountSuspenseOffscreenState(renderLanes))\n            : ((componentStack = mode.cachePool),\n              null !== componentStack\n                ? ((JSCompiler_object_inline_componentStack_2553 =\n                    CacheContext._currentValue),\n                  (componentStack =\n                    componentStack.parent !==\n                    JSCompiler_object_inline_componentStack_2553\n                      ? {\n                          parent: JSCompiler_object_inline_componentStack_2553,\n                          pool: JSCompiler_object_inline_componentStack_2553\n                        }\n                      : componentStack))\n                : (componentStack = getSuspendedCache()),\n              (mode = {\n                baseLanes: mode.baseLanes | renderLanes,\n                cachePool: componentStack\n              })),\n          (nextPrimaryChildren.memoizedState = mode),\n          (nextPrimaryChildren.childLanes = getRemainingWorkInPrimaryTree(\n            current,\n            JSCompiler_object_inline_digest_2551,\n            renderLanes\n          )),\n          (workInProgress.memoizedState = SUSPENDED_MARKER),\n          JSCompiler_object_inline_stack_2552\n        );\n      pushPrimaryTreeSuspenseHandler(workInProgress);\n      renderLanes = current.child;\n      current = renderLanes.sibling;\n      renderLanes = createWorkInProgress(renderLanes, {\n        mode: \"visible\",\n        children: JSCompiler_object_inline_stack_2552.children\n      });\n      renderLanes.return = workInProgress;\n      renderLanes.sibling = null;\n      null !== current &&\n        ((JSCompiler_object_inline_digest_2551 = workInProgress.deletions),\n        null === JSCompiler_object_inline_digest_2551\n          ? ((workInProgress.deletions = [current]),\n            (workInProgress.flags |= 16))\n          : JSCompiler_object_inline_digest_2551.push(current));\n      workInProgress.child = renderLanes;\n      workInProgress.memoizedState = null;\n      return renderLanes;\n    }\n    function mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n      primaryChildren = mountWorkInProgressOffscreenFiber(\n        { mode: \"visible\", children: primaryChildren },\n        workInProgress.mode\n      );\n      primaryChildren.return = workInProgress;\n      return (workInProgress.child = primaryChildren);\n    }\n    function mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n      offscreenProps = createFiber(22, offscreenProps, null, mode);\n      offscreenProps.lanes = 0;\n      offscreenProps.stateNode = {\n        _visibility: OffscreenVisible,\n        _pendingMarkers: null,\n        _retryCache: null,\n        _transitions: null\n      };\n      return offscreenProps;\n    }\n    function retrySuspenseComponentWithoutHydrating(\n      current,\n      workInProgress,\n      renderLanes\n    ) {\n      reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n      current = mountSuspensePrimaryChildren(\n        workInProgress,\n        workInProgress.pendingProps.children\n      );\n      current.flags |= 2;\n      workInProgress.memoizedState = null;\n      return current;\n    }\n    function scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n      fiber.lanes |= renderLanes;\n      var alternate = fiber.alternate;\n      null !== alternate && (alternate.lanes |= renderLanes);\n      scheduleContextWorkOnParentPath(\n        fiber.return,\n        renderLanes,\n        propagationRoot\n      );\n    }\n    function initSuspenseListRenderState(\n      workInProgress,\n      isBackwards,\n      tail,\n      lastContentRow,\n      tailMode,\n      treeForkCount\n    ) {\n      var renderState = workInProgress.memoizedState;\n      null === renderState\n        ? (workInProgress.memoizedState = {\n            isBackwards: isBackwards,\n            rendering: null,\n            renderingStartTime: 0,\n            last: lastContentRow,\n            tail: tail,\n            tailMode: tailMode,\n            treeForkCount: treeForkCount\n          })\n        : ((renderState.isBackwards = isBackwards),\n          (renderState.rendering = null),\n          (renderState.renderingStartTime = 0),\n          (renderState.last = lastContentRow),\n          (renderState.tail = tail),\n          (renderState.tailMode = tailMode),\n          (renderState.treeForkCount = treeForkCount));\n    }\n    function updateSuspenseListComponent(current, workInProgress, renderLanes) {\n      var nextProps = workInProgress.pendingProps,\n        revealOrder = nextProps.revealOrder,\n        tailMode = nextProps.tail,\n        newChildren = nextProps.children,\n        suspenseContext = suspenseStackCursor.current;\n      (nextProps = 0 !== (suspenseContext & ForceSuspenseFallback))\n        ? ((suspenseContext =\n            (suspenseContext & SubtreeSuspenseContextMask) |\n            ForceSuspenseFallback),\n          (workInProgress.flags |= 128))\n        : (suspenseContext &= SubtreeSuspenseContextMask);\n      push(suspenseStackCursor, suspenseContext, workInProgress);\n      suspenseContext = null == revealOrder ? \"null\" : revealOrder;\n      if (\n        \"forwards\" !== revealOrder &&\n        \"unstable_legacy-backwards\" !== revealOrder &&\n        \"together\" !== revealOrder &&\n        \"independent\" !== revealOrder &&\n        !didWarnAboutRevealOrder[suspenseContext]\n      )\n        if (\n          ((didWarnAboutRevealOrder[suspenseContext] = !0), null == revealOrder)\n        )\n          console.error(\n            'The default for the <SuspenseList revealOrder=\"...\"> prop is changing. To be future compatible you must explictly specify either \"independent\" (the current default), \"together\", \"forwards\" or \"legacy_unstable-backwards\".'\n          );\n        else if (\"backwards\" === revealOrder)\n          console.error(\n            'The rendering order of <SuspenseList revealOrder=\"backwards\"> is changing. To be future compatible you must specify revealOrder=\"legacy_unstable-backwards\" instead.'\n          );\n        else if (\"string\" === typeof revealOrder)\n          switch (revealOrder.toLowerCase()) {\n            case \"together\":\n            case \"forwards\":\n            case \"backwards\":\n            case \"independent\":\n              console.error(\n                '\"%s\" is not a valid value for revealOrder on <SuspenseList />. Use lowercase \"%s\" instead.',\n                revealOrder,\n                revealOrder.toLowerCase()\n              );\n              break;\n            case \"forward\":\n            case \"backward\":\n              console.error(\n                '\"%s\" is not a valid value for revealOrder on <SuspenseList />. React uses the -s suffix in the spelling. Use \"%ss\" instead.',\n                revealOrder,\n                revealOrder.toLowerCase()\n              );\n              break;\n            default:\n              console.error(\n                '\"%s\" is not a supported revealOrder on <SuspenseList />. Did you mean \"independent\", \"together\", \"forwards\" or \"backwards\"?',\n                revealOrder\n              );\n          }\n        else\n          console.error(\n            '%s is not a supported value for revealOrder on <SuspenseList />. Did you mean \"independent\", \"together\", \"forwards\" or \"backwards\"?',\n            revealOrder\n          );\n      suspenseContext = null == tailMode ? \"null\" : tailMode;\n      if (!didWarnAboutTailOptions[suspenseContext])\n        if (null == tailMode) {\n          if (\n            \"forwards\" === revealOrder ||\n            \"backwards\" === revealOrder ||\n            \"unstable_legacy-backwards\" === revealOrder\n          )\n            (didWarnAboutTailOptions[suspenseContext] = !0),\n              console.error(\n                'The default for the <SuspenseList tail=\"...\"> prop is changing. To be future compatible you must explictly specify either \"visible\" (the current default), \"collapsed\" or \"hidden\".'\n              );\n        } else\n          \"visible\" !== tailMode &&\n          \"collapsed\" !== tailMode &&\n          \"hidden\" !== tailMode\n            ? ((didWarnAboutTailOptions[suspenseContext] = !0),\n              console.error(\n                '\"%s\" is not a supported value for tail on <SuspenseList />. Did you mean \"visible\", \"collapsed\" or \"hidden\"?',\n                tailMode\n              ))\n            : \"forwards\" !== revealOrder &&\n              \"backwards\" !== revealOrder &&\n              \"unstable_legacy-backwards\" !== revealOrder &&\n              ((didWarnAboutTailOptions[suspenseContext] = !0),\n              console.error(\n                '<SuspenseList tail=\"%s\" /> is only valid if revealOrder is \"forwards\" or \"backwards\". Did you mean to specify revealOrder=\"forwards\"?',\n                tailMode\n              ));\n      a: if (\n        (\"forwards\" === revealOrder ||\n          \"backwards\" === revealOrder ||\n          \"unstable_legacy-backwards\" === revealOrder) &&\n        void 0 !== newChildren &&\n        null !== newChildren &&\n        !1 !== newChildren\n      )\n        if (isArrayImpl(newChildren))\n          for (\n            suspenseContext = 0;\n            suspenseContext < newChildren.length;\n            suspenseContext++\n          ) {\n            if (\n              !validateSuspenseListNestedChild(\n                newChildren[suspenseContext],\n                suspenseContext\n              )\n            )\n              break a;\n          }\n        else if (\n          ((suspenseContext = getIteratorFn(newChildren)),\n          \"function\" === typeof suspenseContext)\n        ) {\n          if ((suspenseContext = suspenseContext.call(newChildren)))\n            for (\n              var step = suspenseContext.next(), _i = 0;\n              !step.done;\n              step = suspenseContext.next()\n            ) {\n              if (!validateSuspenseListNestedChild(step.value, _i)) break a;\n              _i++;\n            }\n        } else\n          console.error(\n            'A single row was passed to a <SuspenseList revealOrder=\"%s\" />. This is not useful since it needs multiple rows. Did you mean to pass multiple children or an array?',\n            revealOrder\n          );\n      reconcileChildren(current, workInProgress, newChildren, renderLanes);\n      isHydrating\n        ? (warnIfNotHydrating(), (newChildren = treeForkCount))\n        : (newChildren = 0);\n      if (!nextProps && null !== current && 0 !== (current.flags & 128))\n        a: for (current = workInProgress.child; null !== current; ) {\n          if (13 === current.tag)\n            null !== current.memoizedState &&\n              scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n          else if (19 === current.tag)\n            scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n          else if (null !== current.child) {\n            current.child.return = current;\n            current = current.child;\n            continue;\n          }\n          if (current === workInProgress) break a;\n          for (; null === current.sibling; ) {\n            if (null === current.return || current.return === workInProgress)\n              break a;\n            current = current.return;\n          }\n          current.sibling.return = current.return;\n          current = current.sibling;\n        }\n      switch (revealOrder) {\n        case \"forwards\":\n          renderLanes = workInProgress.child;\n          for (revealOrder = null; null !== renderLanes; )\n            (current = renderLanes.alternate),\n              null !== current &&\n                null === findFirstSuspended(current) &&\n                (revealOrder = renderLanes),\n              (renderLanes = renderLanes.sibling);\n          renderLanes = revealOrder;\n          null === renderLanes\n            ? ((revealOrder = workInProgress.child),\n              (workInProgress.child = null))\n            : ((revealOrder = renderLanes.sibling),\n              (renderLanes.sibling = null));\n          initSuspenseListRenderState(\n            workInProgress,\n            !1,\n            revealOrder,\n            renderLanes,\n            tailMode,\n            newChildren\n          );\n          break;\n        case \"backwards\":\n        case \"unstable_legacy-backwards\":\n          renderLanes = null;\n          revealOrder = workInProgress.child;\n          for (workInProgress.child = null; null !== revealOrder; ) {\n            current = revealOrder.alternate;\n            if (null !== current && null === findFirstSuspended(current)) {\n              workInProgress.child = revealOrder;\n              break;\n            }\n            current = revealOrder.sibling;\n            revealOrder.sibling = renderLanes;\n            renderLanes = revealOrder;\n            revealOrder = current;\n          }\n          initSuspenseListRenderState(\n            workInProgress,\n            !0,\n            renderLanes,\n            null,\n            tailMode,\n            newChildren\n          );\n          break;\n        case \"together\":\n          initSuspenseListRenderState(\n            workInProgress,\n            !1,\n            null,\n            null,\n            void 0,\n            newChildren\n          );\n          break;\n        default:\n          workInProgress.memoizedState = null;\n      }\n      return workInProgress.child;\n    }\n    function bailoutOnAlreadyFinishedWork(\n      current,\n      workInProgress,\n      renderLanes\n    ) {\n      null !== current && (workInProgress.dependencies = current.dependencies);\n      profilerStartTime = -1;\n      workInProgressRootSkippedLanes |= workInProgress.lanes;\n      if (0 === (renderLanes & workInProgress.childLanes))\n        if (null !== current) {\n          if (\n            (propagateParentContextChanges(\n              current,\n              workInProgress,\n              renderLanes,\n              !1\n            ),\n            0 === (renderLanes & workInProgress.childLanes))\n          )\n            return null;\n        } else return null;\n      if (null !== current && workInProgress.child !== current.child)\n        throw Error(\"Resuming work not yet implemented.\");\n      if (null !== workInProgress.child) {\n        current = workInProgress.child;\n        renderLanes = createWorkInProgress(current, current.pendingProps);\n        workInProgress.child = renderLanes;\n        for (renderLanes.return = workInProgress; null !== current.sibling; )\n          (current = current.sibling),\n            (renderLanes = renderLanes.sibling =\n              createWorkInProgress(current, current.pendingProps)),\n            (renderLanes.return = workInProgress);\n        renderLanes.sibling = null;\n      }\n      return workInProgress.child;\n    }\n    function checkScheduledUpdateOrContext(current, renderLanes) {\n      if (0 !== (current.lanes & renderLanes)) return !0;\n      current = current.dependencies;\n      return null !== current && checkIfContextChanged(current) ? !0 : !1;\n    }\n    function attemptEarlyBailoutIfNoScheduledUpdate(\n      current,\n      workInProgress,\n      renderLanes\n    ) {\n      switch (workInProgress.tag) {\n        case 3:\n          pushHostContainer(\n            workInProgress,\n            workInProgress.stateNode.containerInfo\n          );\n          pushProvider(\n            workInProgress,\n            CacheContext,\n            current.memoizedState.cache\n          );\n          resetHydrationState();\n          break;\n        case 27:\n        case 5:\n          pushHostContext(workInProgress);\n          break;\n        case 4:\n          pushHostContainer(\n            workInProgress,\n            workInProgress.stateNode.containerInfo\n          );\n          break;\n        case 10:\n          pushProvider(\n            workInProgress,\n            workInProgress.type,\n            workInProgress.memoizedProps.value\n          );\n          break;\n        case 12:\n          0 !== (renderLanes & workInProgress.childLanes) &&\n            (workInProgress.flags |= 4);\n          workInProgress.flags |= 2048;\n          var stateNode = workInProgress.stateNode;\n          stateNode.effectDuration = -0;\n          stateNode.passiveEffectDuration = -0;\n          break;\n        case 31:\n          if (null !== workInProgress.memoizedState)\n            return (\n              (workInProgress.flags |= 128),\n              pushDehydratedActivitySuspenseHandler(workInProgress),\n              null\n            );\n          break;\n        case 13:\n          stateNode = workInProgress.memoizedState;\n          if (null !== stateNode) {\n            if (null !== stateNode.dehydrated)\n              return (\n                pushPrimaryTreeSuspenseHandler(workInProgress),\n                (workInProgress.flags |= 128),\n                null\n              );\n            if (0 !== (renderLanes & workInProgress.child.childLanes))\n              return updateSuspenseComponent(\n                current,\n                workInProgress,\n                renderLanes\n              );\n            pushPrimaryTreeSuspenseHandler(workInProgress);\n            current = bailoutOnAlreadyFinishedWork(\n              current,\n              workInProgress,\n              renderLanes\n            );\n            return null !== current ? current.sibling : null;\n          }\n          pushPrimaryTreeSuspenseHandler(workInProgress);\n          break;\n        case 19:\n          var didSuspendBefore = 0 !== (current.flags & 128);\n          stateNode = 0 !== (renderLanes & workInProgress.childLanes);\n          stateNode ||\n            (propagateParentContextChanges(\n              current,\n              workInProgress,\n              renderLanes,\n              !1\n            ),\n            (stateNode = 0 !== (renderLanes & workInProgress.childLanes)));\n          if (didSuspendBefore) {\n            if (stateNode)\n              return updateSuspenseListComponent(\n                current,\n                workInProgress,\n                renderLanes\n              );\n            workInProgress.flags |= 128;\n          }\n          didSuspendBefore = workInProgress.memoizedState;\n          null !== didSuspendBefore &&\n            ((didSuspendBefore.rendering = null),\n            (didSuspendBefore.tail = null),\n            (didSuspendBefore.lastEffect = null));\n          push(\n            suspenseStackCursor,\n            suspenseStackCursor.current,\n            workInProgress\n          );\n          if (stateNode) break;\n          else return null;\n        case 22:\n          return (\n            (workInProgress.lanes = 0),\n            updateOffscreenComponent(\n              current,\n              workInProgress,\n              renderLanes,\n              workInProgress.pendingProps\n            )\n          );\n        case 24:\n          pushProvider(\n            workInProgress,\n            CacheContext,\n            current.memoizedState.cache\n          );\n      }\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n    }\n    function beginWork(current, workInProgress, renderLanes) {\n      if (workInProgress._debugNeedsRemount && null !== current) {\n        renderLanes = createFiberFromTypeAndProps(\n          workInProgress.type,\n          workInProgress.key,\n          workInProgress.pendingProps,\n          workInProgress._debugOwner || null,\n          workInProgress.mode,\n          workInProgress.lanes\n        );\n        renderLanes._debugStack = workInProgress._debugStack;\n        renderLanes._debugTask = workInProgress._debugTask;\n        var returnFiber = workInProgress.return;\n        if (null === returnFiber) throw Error(\"Cannot swap the root fiber.\");\n        current.alternate = null;\n        workInProgress.alternate = null;\n        renderLanes.index = workInProgress.index;\n        renderLanes.sibling = workInProgress.sibling;\n        renderLanes.return = workInProgress.return;\n        renderLanes.ref = workInProgress.ref;\n        renderLanes._debugInfo = workInProgress._debugInfo;\n        if (workInProgress === returnFiber.child)\n          returnFiber.child = renderLanes;\n        else {\n          var prevSibling = returnFiber.child;\n          if (null === prevSibling)\n            throw Error(\"Expected parent to have a child.\");\n          for (; prevSibling.sibling !== workInProgress; )\n            if (((prevSibling = prevSibling.sibling), null === prevSibling))\n              throw Error(\"Expected to find the previous sibling.\");\n          prevSibling.sibling = renderLanes;\n        }\n        workInProgress = returnFiber.deletions;\n        null === workInProgress\n          ? ((returnFiber.deletions = [current]), (returnFiber.flags |= 16))\n          : workInProgress.push(current);\n        renderLanes.flags |= 2;\n        return renderLanes;\n      }\n      if (null !== current)\n        if (\n          current.memoizedProps !== workInProgress.pendingProps ||\n          workInProgress.type !== current.type\n        )\n          didReceiveUpdate = !0;\n        else {\n          if (\n            !checkScheduledUpdateOrContext(current, renderLanes) &&\n            0 === (workInProgress.flags & 128)\n          )\n            return (\n              (didReceiveUpdate = !1),\n              attemptEarlyBailoutIfNoScheduledUpdate(\n                current,\n                workInProgress,\n                renderLanes\n              )\n            );\n          didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n        }\n      else {\n        didReceiveUpdate = !1;\n        if ((returnFiber = isHydrating))\n          warnIfNotHydrating(),\n            (returnFiber = 0 !== (workInProgress.flags & 1048576));\n        returnFiber &&\n          ((returnFiber = workInProgress.index),\n          warnIfNotHydrating(),\n          pushTreeId(workInProgress, treeForkCount, returnFiber));\n      }\n      workInProgress.lanes = 0;\n      switch (workInProgress.tag) {\n        case 16:\n          a: if (\n            ((returnFiber = workInProgress.pendingProps),\n            (current = callLazyInitInDEV(workInProgress.elementType)),\n            (workInProgress.type = current),\n            \"function\" === typeof current)\n          )\n            shouldConstruct(current)\n              ? ((returnFiber = resolveClassComponentProps(\n                  current,\n                  returnFiber\n                )),\n                (workInProgress.tag = 1),\n                (workInProgress.type = current =\n                  resolveFunctionForHotReloading(current)),\n                (workInProgress = updateClassComponent(\n                  null,\n                  workInProgress,\n                  current,\n                  returnFiber,\n                  renderLanes\n                )))\n              : ((workInProgress.tag = 0),\n                validateFunctionComponentInDev(workInProgress, current),\n                (workInProgress.type = current =\n                  resolveFunctionForHotReloading(current)),\n                (workInProgress = updateFunctionComponent(\n                  null,\n                  workInProgress,\n                  current,\n                  returnFiber,\n                  renderLanes\n                )));\n          else {\n            if (void 0 !== current && null !== current)\n              if (\n                ((prevSibling = current.$$typeof),\n                prevSibling === REACT_FORWARD_REF_TYPE)\n              ) {\n                workInProgress.tag = 11;\n                workInProgress.type = current =\n                  resolveForwardRefForHotReloading(current);\n                workInProgress = updateForwardRef(\n                  null,\n                  workInProgress,\n                  current,\n                  returnFiber,\n                  renderLanes\n                );\n                break a;\n              } else if (prevSibling === REACT_MEMO_TYPE) {\n                workInProgress.tag = 14;\n                workInProgress = updateMemoComponent(\n                  null,\n                  workInProgress,\n                  current,\n                  returnFiber,\n                  renderLanes\n                );\n                break a;\n              }\n            workInProgress = \"\";\n            null !== current &&\n              \"object\" === typeof current &&\n              current.$$typeof === REACT_LAZY_TYPE &&\n              (workInProgress =\n                \" Did you wrap a component in React.lazy() more than once?\");\n            renderLanes = getComponentNameFromType(current) || current;\n            throw Error(\n              \"Element type is invalid. Received a promise that resolves to: \" +\n                renderLanes +\n                \". Lazy element type must resolve to a class or function.\" +\n                workInProgress\n            );\n          }\n          return workInProgress;\n        case 0:\n          return updateFunctionComponent(\n            current,\n            workInProgress,\n            workInProgress.type,\n            workInProgress.pendingProps,\n            renderLanes\n          );\n        case 1:\n          return (\n            (returnFiber = workInProgress.type),\n            (prevSibling = resolveClassComponentProps(\n              returnFiber,\n              workInProgress.pendingProps\n            )),\n            updateClassComponent(\n              current,\n              workInProgress,\n              returnFiber,\n              prevSibling,\n              renderLanes\n            )\n          );\n        case 3:\n          a: {\n            pushHostContainer(\n              workInProgress,\n              workInProgress.stateNode.containerInfo\n            );\n            if (null === current)\n              throw Error(\n                \"Should have a current fiber. This is a bug in React.\"\n              );\n            returnFiber = workInProgress.pendingProps;\n            var prevState = workInProgress.memoizedState;\n            prevSibling = prevState.element;\n            cloneUpdateQueue(current, workInProgress);\n            processUpdateQueue(workInProgress, returnFiber, null, renderLanes);\n            var nextState = workInProgress.memoizedState;\n            returnFiber = nextState.cache;\n            pushProvider(workInProgress, CacheContext, returnFiber);\n            returnFiber !== prevState.cache &&\n              propagateContextChanges(\n                workInProgress,\n                [CacheContext],\n                renderLanes,\n                !0\n              );\n            suspendIfUpdateReadFromEntangledAsyncAction();\n            returnFiber = nextState.element;\n            if (prevState.isDehydrated)\n              if (\n                ((prevState = {\n                  element: returnFiber,\n                  isDehydrated: !1,\n                  cache: nextState.cache\n                }),\n                (workInProgress.updateQueue.baseState = prevState),\n                (workInProgress.memoizedState = prevState),\n                workInProgress.flags & 256)\n              ) {\n                workInProgress = mountHostRootWithoutHydrating(\n                  current,\n                  workInProgress,\n                  returnFiber,\n                  renderLanes\n                );\n                break a;\n              } else if (returnFiber !== prevSibling) {\n                prevSibling = createCapturedValueAtFiber(\n                  Error(\n                    \"This root received an early update, before anything was able hydrate. Switched the entire root to client rendering.\"\n                  ),\n                  workInProgress\n                );\n                queueHydrationError(prevSibling);\n                workInProgress = mountHostRootWithoutHydrating(\n                  current,\n                  workInProgress,\n                  returnFiber,\n                  renderLanes\n                );\n                break a;\n              } else {\n                current = workInProgress.stateNode.containerInfo;\n                switch (current.nodeType) {\n                  case 9:\n                    current = current.body;\n                    break;\n                  default:\n                    current =\n                      \"HTML\" === current.nodeName\n                        ? current.ownerDocument.body\n                        : current;\n                }\n                nextHydratableInstance = getNextHydratable(current.firstChild);\n                hydrationParentFiber = workInProgress;\n                isHydrating = !0;\n                hydrationErrors = null;\n                didSuspendOrErrorDEV = !1;\n                hydrationDiffRootDEV = null;\n                rootOrSingletonContext = !0;\n                renderLanes = mountChildFibers(\n                  workInProgress,\n                  null,\n                  returnFiber,\n                  renderLanes\n                );\n                for (workInProgress.child = renderLanes; renderLanes; )\n                  (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n                    (renderLanes = renderLanes.sibling);\n              }\n            else {\n              resetHydrationState();\n              if (returnFiber === prevSibling) {\n                workInProgress = bailoutOnAlreadyFinishedWork(\n                  current,\n                  workInProgress,\n                  renderLanes\n                );\n                break a;\n              }\n              reconcileChildren(\n                current,\n                workInProgress,\n                returnFiber,\n                renderLanes\n              );\n            }\n            workInProgress = workInProgress.child;\n          }\n          return workInProgress;\n        case 26:\n          return (\n            markRef(current, workInProgress),\n            null === current\n              ? (renderLanes = getResource(\n                  workInProgress.type,\n                  null,\n                  workInProgress.pendingProps,\n                  null\n                ))\n                ? (workInProgress.memoizedState = renderLanes)\n                : isHydrating ||\n                  ((renderLanes = workInProgress.type),\n                  (current = workInProgress.pendingProps),\n                  (returnFiber = requiredContext(\n                    rootInstanceStackCursor.current\n                  )),\n                  (returnFiber =\n                    getOwnerDocumentFromRootContainer(\n                      returnFiber\n                    ).createElement(renderLanes)),\n                  (returnFiber[internalInstanceKey] = workInProgress),\n                  (returnFiber[internalPropsKey] = current),\n                  setInitialProperties(returnFiber, renderLanes, current),\n                  markNodeAsHoistable(returnFiber),\n                  (workInProgress.stateNode = returnFiber))\n              : (workInProgress.memoizedState = getResource(\n                  workInProgress.type,\n                  current.memoizedProps,\n                  workInProgress.pendingProps,\n                  current.memoizedState\n                )),\n            null\n          );\n        case 27:\n          return (\n            pushHostContext(workInProgress),\n            null === current &&\n              isHydrating &&\n              ((returnFiber = requiredContext(rootInstanceStackCursor.current)),\n              (prevSibling = getHostContext()),\n              (returnFiber = workInProgress.stateNode =\n                resolveSingletonInstance(\n                  workInProgress.type,\n                  workInProgress.pendingProps,\n                  returnFiber,\n                  prevSibling,\n                  !1\n                )),\n              didSuspendOrErrorDEV ||\n                ((prevSibling = diffHydratedProperties(\n                  returnFiber,\n                  workInProgress.type,\n                  workInProgress.pendingProps,\n                  prevSibling\n                )),\n                null !== prevSibling &&\n                  (buildHydrationDiffNode(workInProgress, 0).serverProps =\n                    prevSibling)),\n              (hydrationParentFiber = workInProgress),\n              (rootOrSingletonContext = !0),\n              (prevSibling = nextHydratableInstance),\n              isSingletonScope(workInProgress.type)\n                ? ((previousHydratableOnEnteringScopedSingleton = prevSibling),\n                  (nextHydratableInstance = getNextHydratable(\n                    returnFiber.firstChild\n                  )))\n                : (nextHydratableInstance = prevSibling)),\n            reconcileChildren(\n              current,\n              workInProgress,\n              workInProgress.pendingProps.children,\n              renderLanes\n            ),\n            markRef(current, workInProgress),\n            null === current && (workInProgress.flags |= 4194304),\n            workInProgress.child\n          );\n        case 5:\n          return (\n            null === current &&\n              isHydrating &&\n              ((prevState = getHostContext()),\n              (returnFiber = validateDOMNesting(\n                workInProgress.type,\n                prevState.ancestorInfo\n              )),\n              (prevSibling = nextHydratableInstance),\n              (nextState = !prevSibling) ||\n                ((nextState = canHydrateInstance(\n                  prevSibling,\n                  workInProgress.type,\n                  workInProgress.pendingProps,\n                  rootOrSingletonContext\n                )),\n                null !== nextState\n                  ? ((workInProgress.stateNode = nextState),\n                    didSuspendOrErrorDEV ||\n                      ((prevState = diffHydratedProperties(\n                        nextState,\n                        workInProgress.type,\n                        workInProgress.pendingProps,\n                        prevState\n                      )),\n                      null !== prevState &&\n                        (buildHydrationDiffNode(workInProgress, 0).serverProps =\n                          prevState)),\n                    (hydrationParentFiber = workInProgress),\n                    (nextHydratableInstance = getNextHydratable(\n                      nextState.firstChild\n                    )),\n                    (rootOrSingletonContext = !1),\n                    (prevState = !0))\n                  : (prevState = !1),\n                (nextState = !prevState)),\n              nextState &&\n                (returnFiber &&\n                  warnNonHydratedInstance(workInProgress, prevSibling),\n                throwOnHydrationMismatch(workInProgress))),\n            pushHostContext(workInProgress),\n            (prevSibling = workInProgress.type),\n            (prevState = workInProgress.pendingProps),\n            (nextState = null !== current ? current.memoizedProps : null),\n            (returnFiber = prevState.children),\n            shouldSetTextContent(prevSibling, prevState)\n              ? (returnFiber = null)\n              : null !== nextState &&\n                shouldSetTextContent(prevSibling, nextState) &&\n                (workInProgress.flags |= 32),\n            null !== workInProgress.memoizedState &&\n              ((prevSibling = renderWithHooks(\n                current,\n                workInProgress,\n                TransitionAwareHostComponent,\n                null,\n                null,\n                renderLanes\n              )),\n              (HostTransitionContext._currentValue = prevSibling)),\n            markRef(current, workInProgress),\n            reconcileChildren(\n              current,\n              workInProgress,\n              returnFiber,\n              renderLanes\n            ),\n            workInProgress.child\n          );\n        case 6:\n          return (\n            null === current &&\n              isHydrating &&\n              ((renderLanes = workInProgress.pendingProps),\n              (current = getHostContext()),\n              (returnFiber = current.ancestorInfo.current),\n              (renderLanes =\n                null != returnFiber\n                  ? validateTextNesting(\n                      renderLanes,\n                      returnFiber.tag,\n                      current.ancestorInfo.implicitRootScope\n                    )\n                  : !0),\n              (current = nextHydratableInstance),\n              (returnFiber = !current) ||\n                ((returnFiber = canHydrateTextInstance(\n                  current,\n                  workInProgress.pendingProps,\n                  rootOrSingletonContext\n                )),\n                null !== returnFiber\n                  ? ((workInProgress.stateNode = returnFiber),\n                    (hydrationParentFiber = workInProgress),\n                    (nextHydratableInstance = null),\n                    (returnFiber = !0))\n                  : (returnFiber = !1),\n                (returnFiber = !returnFiber)),\n              returnFiber &&\n                (renderLanes &&\n                  warnNonHydratedInstance(workInProgress, current),\n                throwOnHydrationMismatch(workInProgress))),\n            null\n          );\n        case 13:\n          return updateSuspenseComponent(current, workInProgress, renderLanes);\n        case 4:\n          return (\n            pushHostContainer(\n              workInProgress,\n              workInProgress.stateNode.containerInfo\n            ),\n            (returnFiber = workInProgress.pendingProps),\n            null === current\n              ? (workInProgress.child = reconcileChildFibers(\n                  workInProgress,\n                  null,\n                  returnFiber,\n                  renderLanes\n                ))\n              : reconcileChildren(\n                  current,\n                  workInProgress,\n                  returnFiber,\n                  renderLanes\n                ),\n            workInProgress.child\n          );\n        case 11:\n          return updateForwardRef(\n            current,\n            workInProgress,\n            workInProgress.type,\n            workInProgress.pendingProps,\n            renderLanes\n          );\n        case 7:\n          return (\n            reconcileChildren(\n              current,\n              workInProgress,\n              workInProgress.pendingProps,\n              renderLanes\n            ),\n            workInProgress.child\n          );\n        case 8:\n          return (\n            reconcileChildren(\n              current,\n              workInProgress,\n              workInProgress.pendingProps.children,\n              renderLanes\n            ),\n            workInProgress.child\n          );\n        case 12:\n          return (\n            (workInProgress.flags |= 4),\n            (workInProgress.flags |= 2048),\n            (returnFiber = workInProgress.stateNode),\n            (returnFiber.effectDuration = -0),\n            (returnFiber.passiveEffectDuration = -0),\n            reconcileChildren(\n              current,\n              workInProgress,\n              workInProgress.pendingProps.children,\n              renderLanes\n            ),\n            workInProgress.child\n          );\n        case 10:\n          return (\n            (returnFiber = workInProgress.type),\n            (prevSibling = workInProgress.pendingProps),\n            (prevState = prevSibling.value),\n            \"value\" in prevSibling ||\n              hasWarnedAboutUsingNoValuePropOnContextProvider ||\n              ((hasWarnedAboutUsingNoValuePropOnContextProvider = !0),\n              console.error(\n                \"The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?\"\n              )),\n            pushProvider(workInProgress, returnFiber, prevState),\n            reconcileChildren(\n              current,\n              workInProgress,\n              prevSibling.children,\n              renderLanes\n            ),\n            workInProgress.child\n          );\n        case 9:\n          return (\n            (prevSibling = workInProgress.type._context),\n            (returnFiber = workInProgress.pendingProps.children),\n            \"function\" !== typeof returnFiber &&\n              console.error(\n                \"A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it.\"\n              ),\n            prepareToReadContext(workInProgress),\n            (prevSibling = readContext(prevSibling)),\n            markComponentRenderStarted(workInProgress),\n            (returnFiber = callComponentInDEV(\n              returnFiber,\n              prevSibling,\n              void 0\n            )),\n            markComponentRenderStopped(),\n            (workInProgress.flags |= 1),\n            reconcileChildren(\n              current,\n              workInProgress,\n              returnFiber,\n              renderLanes\n            ),\n            workInProgress.child\n          );\n        case 14:\n          return updateMemoComponent(\n            current,\n            workInProgress,\n            workInProgress.type,\n            workInProgress.pendingProps,\n            renderLanes\n          );\n        case 15:\n          return updateSimpleMemoComponent(\n            current,\n            workInProgress,\n            workInProgress.type,\n            workInProgress.pendingProps,\n            renderLanes\n          );\n        case 19:\n          return updateSuspenseListComponent(\n            current,\n            workInProgress,\n            renderLanes\n          );\n        case 31:\n          prevSibling = workInProgress.pendingProps;\n          nextState = 0 !== (workInProgress.flags & 128);\n          workInProgress.flags &= -129;\n          if (null === current)\n            if (isHydrating) {\n              if (\"hidden\" === prevSibling.mode)\n                mountActivityChildren(workInProgress, prevSibling);\n              else if (\n                (pushDehydratedActivitySuspenseHandler(workInProgress),\n                (renderLanes = nextHydratableInstance)\n                  ? ((current = canHydrateHydrationBoundary(\n                      renderLanes,\n                      rootOrSingletonContext\n                    )),\n                    (current =\n                      null !== current && current.data === ACTIVITY_START_DATA\n                        ? current\n                        : null),\n                    null !== current &&\n                      ((returnFiber = {\n                        dehydrated: current,\n                        treeContext: getSuspendedTreeContext(),\n                        retryLane: 536870912,\n                        hydrationErrors: null\n                      }),\n                      (workInProgress.memoizedState = returnFiber),\n                      (returnFiber =\n                        createFiberFromDehydratedFragment(current)),\n                      (returnFiber.return = workInProgress),\n                      (workInProgress.child = returnFiber),\n                      (hydrationParentFiber = workInProgress),\n                      (nextHydratableInstance = null)))\n                  : (current = null),\n                null === current)\n              )\n                throw (\n                  (warnNonHydratedInstance(workInProgress, renderLanes),\n                  throwOnHydrationMismatch(workInProgress))\n                );\n              workInProgress.lanes = 536870912;\n              workInProgress = null;\n            } else\n              workInProgress = mountActivityChildren(\n                workInProgress,\n                prevSibling\n              );\n          else if (\n            ((returnFiber = current.memoizedState), null !== returnFiber)\n          )\n            if (\n              ((prevState = returnFiber.dehydrated),\n              pushDehydratedActivitySuspenseHandler(workInProgress),\n              nextState)\n            )\n              if (workInProgress.flags & 256)\n                (workInProgress.flags &= -257),\n                  (workInProgress = retryActivityComponentWithoutHydrating(\n                    current,\n                    workInProgress,\n                    renderLanes\n                  ));\n              else if (null !== workInProgress.memoizedState)\n                (workInProgress.child = current.child),\n                  (workInProgress.flags |= 128),\n                  (workInProgress = null);\n              else\n                throw Error(\n                  \"Client rendering an Activity suspended it again. This is a bug in React.\"\n                );\n            else if (\n              (warnIfHydrating(),\n              didReceiveUpdate ||\n                propagateParentContextChanges(\n                  current,\n                  workInProgress,\n                  renderLanes,\n                  !1\n                ),\n              (nextState = 0 !== (renderLanes & current.childLanes)),\n              didReceiveUpdate || nextState)\n            ) {\n              prevSibling = workInProgressRoot;\n              if (\n                null !== prevSibling &&\n                ((prevState = getBumpedLaneForHydration(\n                  prevSibling,\n                  renderLanes\n                )),\n                0 !== prevState && prevState !== returnFiber.retryLane)\n              )\n                throw (\n                  ((returnFiber.retryLane = prevState),\n                  enqueueConcurrentRenderForLane(current, prevState),\n                  scheduleUpdateOnFiber(prevSibling, current, prevState),\n                  SelectiveHydrationException)\n                );\n              renderDidSuspendDelayIfPossible();\n              workInProgress = retryActivityComponentWithoutHydrating(\n                current,\n                workInProgress,\n                renderLanes\n              );\n            } else\n              (renderLanes = returnFiber.treeContext),\n                (nextHydratableInstance = getNextHydratable(\n                  prevState.nextSibling\n                )),\n                (hydrationParentFiber = workInProgress),\n                (isHydrating = !0),\n                (hydrationErrors = null),\n                (didSuspendOrErrorDEV = !1),\n                (hydrationDiffRootDEV = null),\n                (rootOrSingletonContext = !1),\n                null !== renderLanes &&\n                  restoreSuspendedTreeContext(workInProgress, renderLanes),\n                (workInProgress = mountActivityChildren(\n                  workInProgress,\n                  prevSibling\n                )),\n                (workInProgress.flags |= 4096);\n          else\n            (renderLanes = createWorkInProgress(current.child, {\n              mode: prevSibling.mode,\n              children: prevSibling.children\n            })),\n              (renderLanes.ref = workInProgress.ref),\n              (workInProgress.child = renderLanes),\n              (renderLanes.return = workInProgress),\n              (workInProgress = renderLanes);\n          return workInProgress;\n        case 22:\n          return updateOffscreenComponent(\n            current,\n            workInProgress,\n            renderLanes,\n            workInProgress.pendingProps\n          );\n        case 24:\n          return (\n            prepareToReadContext(workInProgress),\n            (returnFiber = readContext(CacheContext)),\n            null === current\n              ? ((prevSibling = peekCacheFromPool()),\n                null === prevSibling &&\n                  ((prevSibling = workInProgressRoot),\n                  (prevState = createCache()),\n                  (prevSibling.pooledCache = prevState),\n                  retainCache(prevState),\n                  null !== prevState &&\n                    (prevSibling.pooledCacheLanes |= renderLanes),\n                  (prevSibling = prevState)),\n                (workInProgress.memoizedState = {\n                  parent: returnFiber,\n                  cache: prevSibling\n                }),\n                initializeUpdateQueue(workInProgress),\n                pushProvider(workInProgress, CacheContext, prevSibling))\n              : (0 !== (current.lanes & renderLanes) &&\n                  (cloneUpdateQueue(current, workInProgress),\n                  processUpdateQueue(workInProgress, null, null, renderLanes),\n                  suspendIfUpdateReadFromEntangledAsyncAction()),\n                (prevSibling = current.memoizedState),\n                (prevState = workInProgress.memoizedState),\n                prevSibling.parent !== returnFiber\n                  ? ((prevSibling = {\n                      parent: returnFiber,\n                      cache: returnFiber\n                    }),\n                    (workInProgress.memoizedState = prevSibling),\n                    0 === workInProgress.lanes &&\n                      (workInProgress.memoizedState =\n                        workInProgress.updateQueue.baseState =\n                          prevSibling),\n                    pushProvider(workInProgress, CacheContext, returnFiber))\n                  : ((returnFiber = prevState.cache),\n                    pushProvider(workInProgress, CacheContext, returnFiber),\n                    returnFiber !== prevSibling.cache &&\n                      propagateContextChanges(\n                        workInProgress,\n                        [CacheContext],\n                        renderLanes,\n                        !0\n                      ))),\n            reconcileChildren(\n              current,\n              workInProgress,\n              workInProgress.pendingProps.children,\n              renderLanes\n            ),\n            workInProgress.child\n          );\n        case 29:\n          throw workInProgress.pendingProps;\n      }\n      throw Error(\n        \"Unknown unit of work tag (\" +\n          workInProgress.tag +\n          \"). This error is likely caused by a bug in React. Please file an issue.\"\n      );\n    }\n    function markUpdate(workInProgress) {\n      workInProgress.flags |= 4;\n    }\n    function preloadInstanceAndSuspendIfNeeded(\n      workInProgress,\n      type,\n      oldProps,\n      newProps,\n      renderLanes\n    ) {\n      if ((type = (workInProgress.mode & SuspenseyImagesMode) !== NoMode))\n        type = !1;\n      if (type) {\n        if (\n          ((workInProgress.flags |= 16777216),\n          (renderLanes & 335544128) === renderLanes)\n        )\n          if (workInProgress.stateNode.complete) workInProgress.flags |= 8192;\n          else if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n          else\n            throw (\n              ((suspendedThenable = noopSuspenseyCommitThenable),\n              SuspenseyCommitException)\n            );\n      } else workInProgress.flags &= -16777217;\n    }\n    function preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n      if (\n        \"stylesheet\" !== resource.type ||\n        (resource.state.loading & Inserted) !== NotLoaded\n      )\n        workInProgress.flags &= -16777217;\n      else if (((workInProgress.flags |= 16777216), !preloadResource(resource)))\n        if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n        else\n          throw (\n            ((suspendedThenable = noopSuspenseyCommitThenable),\n            SuspenseyCommitException)\n          );\n    }\n    function scheduleRetryEffect(workInProgress, retryQueue) {\n      null !== retryQueue && (workInProgress.flags |= 4);\n      workInProgress.flags & 16384 &&\n        ((retryQueue =\n          22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n        (workInProgress.lanes |= retryQueue),\n        (workInProgressSuspendedRetryLanes |= retryQueue));\n    }\n    function cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n      if (!isHydrating)\n        switch (renderState.tailMode) {\n          case \"hidden\":\n            hasRenderedATailFallback = renderState.tail;\n            for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n              null !== hasRenderedATailFallback.alternate &&\n                (lastTailNode = hasRenderedATailFallback),\n                (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n            null === lastTailNode\n              ? (renderState.tail = null)\n              : (lastTailNode.sibling = null);\n            break;\n          case \"collapsed\":\n            lastTailNode = renderState.tail;\n            for (var _lastTailNode = null; null !== lastTailNode; )\n              null !== lastTailNode.alternate && (_lastTailNode = lastTailNode),\n                (lastTailNode = lastTailNode.sibling);\n            null === _lastTailNode\n              ? hasRenderedATailFallback || null === renderState.tail\n                ? (renderState.tail = null)\n                : (renderState.tail.sibling = null)\n              : (_lastTailNode.sibling = null);\n        }\n    }\n    function bubbleProperties(completedWork) {\n      var didBailout =\n          null !== completedWork.alternate &&\n          completedWork.alternate.child === completedWork.child,\n        newChildLanes = 0,\n        subtreeFlags = 0;\n      if (didBailout)\n        if ((completedWork.mode & ProfileMode) !== NoMode) {\n          for (\n            var _treeBaseDuration = completedWork.selfBaseDuration,\n              _child2 = completedWork.child;\n            null !== _child2;\n\n          )\n            (newChildLanes |= _child2.lanes | _child2.childLanes),\n              (subtreeFlags |= _child2.subtreeFlags & 65011712),\n              (subtreeFlags |= _child2.flags & 65011712),\n              (_treeBaseDuration += _child2.treeBaseDuration),\n              (_child2 = _child2.sibling);\n          completedWork.treeBaseDuration = _treeBaseDuration;\n        } else\n          for (\n            _treeBaseDuration = completedWork.child;\n            null !== _treeBaseDuration;\n\n          )\n            (newChildLanes |=\n              _treeBaseDuration.lanes | _treeBaseDuration.childLanes),\n              (subtreeFlags |= _treeBaseDuration.subtreeFlags & 65011712),\n              (subtreeFlags |= _treeBaseDuration.flags & 65011712),\n              (_treeBaseDuration.return = completedWork),\n              (_treeBaseDuration = _treeBaseDuration.sibling);\n      else if ((completedWork.mode & ProfileMode) !== NoMode) {\n        _treeBaseDuration = completedWork.actualDuration;\n        _child2 = completedWork.selfBaseDuration;\n        for (var child = completedWork.child; null !== child; )\n          (newChildLanes |= child.lanes | child.childLanes),\n            (subtreeFlags |= child.subtreeFlags),\n            (subtreeFlags |= child.flags),\n            (_treeBaseDuration += child.actualDuration),\n            (_child2 += child.treeBaseDuration),\n            (child = child.sibling);\n        completedWork.actualDuration = _treeBaseDuration;\n        completedWork.treeBaseDuration = _child2;\n      } else\n        for (\n          _treeBaseDuration = completedWork.child;\n          null !== _treeBaseDuration;\n\n        )\n          (newChildLanes |=\n            _treeBaseDuration.lanes | _treeBaseDuration.childLanes),\n            (subtreeFlags |= _treeBaseDuration.subtreeFlags),\n            (subtreeFlags |= _treeBaseDuration.flags),\n            (_treeBaseDuration.return = completedWork),\n            (_treeBaseDuration = _treeBaseDuration.sibling);\n      completedWork.subtreeFlags |= subtreeFlags;\n      completedWork.childLanes = newChildLanes;\n      return didBailout;\n    }\n    function completeWork(current, workInProgress, renderLanes) {\n      var newProps = workInProgress.pendingProps;\n      popTreeContext(workInProgress);\n      switch (workInProgress.tag) {\n        case 16:\n        case 15:\n        case 0:\n        case 11:\n        case 7:\n        case 8:\n        case 12:\n        case 9:\n        case 14:\n          return bubbleProperties(workInProgress), null;\n        case 1:\n          return bubbleProperties(workInProgress), null;\n        case 3:\n          renderLanes = workInProgress.stateNode;\n          newProps = null;\n          null !== current && (newProps = current.memoizedState.cache);\n          workInProgress.memoizedState.cache !== newProps &&\n            (workInProgress.flags |= 2048);\n          popProvider(CacheContext, workInProgress);\n          popHostContainer(workInProgress);\n          renderLanes.pendingContext &&\n            ((renderLanes.context = renderLanes.pendingContext),\n            (renderLanes.pendingContext = null));\n          if (null === current || null === current.child)\n            popHydrationState(workInProgress)\n              ? (emitPendingHydrationWarnings(), markUpdate(workInProgress))\n              : null === current ||\n                (current.memoizedState.isDehydrated &&\n                  0 === (workInProgress.flags & 256)) ||\n                ((workInProgress.flags |= 1024),\n                upgradeHydrationErrorsToRecoverable());\n          bubbleProperties(workInProgress);\n          return null;\n        case 26:\n          var type = workInProgress.type,\n            nextResource = workInProgress.memoizedState;\n          null === current\n            ? (markUpdate(workInProgress),\n              null !== nextResource\n                ? (bubbleProperties(workInProgress),\n                  preloadResourceAndSuspendIfNeeded(\n                    workInProgress,\n                    nextResource\n                  ))\n                : (bubbleProperties(workInProgress),\n                  preloadInstanceAndSuspendIfNeeded(\n                    workInProgress,\n                    type,\n                    null,\n                    newProps,\n                    renderLanes\n                  )))\n            : nextResource\n              ? nextResource !== current.memoizedState\n                ? (markUpdate(workInProgress),\n                  bubbleProperties(workInProgress),\n                  preloadResourceAndSuspendIfNeeded(\n                    workInProgress,\n                    nextResource\n                  ))\n                : (bubbleProperties(workInProgress),\n                  (workInProgress.flags &= -16777217))\n              : ((current = current.memoizedProps),\n                current !== newProps && markUpdate(workInProgress),\n                bubbleProperties(workInProgress),\n                preloadInstanceAndSuspendIfNeeded(\n                  workInProgress,\n                  type,\n                  current,\n                  newProps,\n                  renderLanes\n                ));\n          return null;\n        case 27:\n          popHostContext(workInProgress);\n          renderLanes = requiredContext(rootInstanceStackCursor.current);\n          type = workInProgress.type;\n          if (null !== current && null != workInProgress.stateNode)\n            current.memoizedProps !== newProps && markUpdate(workInProgress);\n          else {\n            if (!newProps) {\n              if (null === workInProgress.stateNode)\n                throw Error(\n                  \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n                );\n              bubbleProperties(workInProgress);\n              return null;\n            }\n            current = getHostContext();\n            popHydrationState(workInProgress)\n              ? prepareToHydrateHostInstance(workInProgress, current)\n              : ((current = resolveSingletonInstance(\n                  type,\n                  newProps,\n                  renderLanes,\n                  current,\n                  !0\n                )),\n                (workInProgress.stateNode = current),\n                markUpdate(workInProgress));\n          }\n          bubbleProperties(workInProgress);\n          return null;\n        case 5:\n          popHostContext(workInProgress);\n          type = workInProgress.type;\n          if (null !== current && null != workInProgress.stateNode)\n            current.memoizedProps !== newProps && markUpdate(workInProgress);\n          else {\n            if (!newProps) {\n              if (null === workInProgress.stateNode)\n                throw Error(\n                  \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n                );\n              bubbleProperties(workInProgress);\n              return null;\n            }\n            var _currentHostContext = getHostContext();\n            if (popHydrationState(workInProgress))\n              prepareToHydrateHostInstance(workInProgress, _currentHostContext);\n            else {\n              nextResource = requiredContext(rootInstanceStackCursor.current);\n              validateDOMNesting(type, _currentHostContext.ancestorInfo);\n              _currentHostContext = _currentHostContext.context;\n              nextResource = getOwnerDocumentFromRootContainer(nextResource);\n              switch (_currentHostContext) {\n                case HostContextNamespaceSvg:\n                  nextResource = nextResource.createElementNS(\n                    SVG_NAMESPACE,\n                    type\n                  );\n                  break;\n                case HostContextNamespaceMath:\n                  nextResource = nextResource.createElementNS(\n                    MATH_NAMESPACE,\n                    type\n                  );\n                  break;\n                default:\n                  switch (type) {\n                    case \"svg\":\n                      nextResource = nextResource.createElementNS(\n                        SVG_NAMESPACE,\n                        type\n                      );\n                      break;\n                    case \"math\":\n                      nextResource = nextResource.createElementNS(\n                        MATH_NAMESPACE,\n                        type\n                      );\n                      break;\n                    case \"script\":\n                      nextResource = nextResource.createElement(\"div\");\n                      nextResource.innerHTML = \"<script>\\x3c/script>\";\n                      nextResource = nextResource.removeChild(\n                        nextResource.firstChild\n                      );\n                      break;\n                    case \"select\":\n                      nextResource =\n                        \"string\" === typeof newProps.is\n                          ? nextResource.createElement(\"select\", {\n                              is: newProps.is\n                            })\n                          : nextResource.createElement(\"select\");\n                      newProps.multiple\n                        ? (nextResource.multiple = !0)\n                        : newProps.size && (nextResource.size = newProps.size);\n                      break;\n                    default:\n                      (nextResource =\n                        \"string\" === typeof newProps.is\n                          ? nextResource.createElement(type, {\n                              is: newProps.is\n                            })\n                          : nextResource.createElement(type)),\n                        -1 === type.indexOf(\"-\") &&\n                          (type !== type.toLowerCase() &&\n                            console.error(\n                              \"<%s /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.\",\n                              type\n                            ),\n                          \"[object HTMLUnknownElement]\" !==\n                            Object.prototype.toString.call(nextResource) ||\n                            hasOwnProperty.call(warnedUnknownTags, type) ||\n                            ((warnedUnknownTags[type] = !0),\n                            console.error(\n                              \"The tag <%s> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.\",\n                              type\n                            )));\n                  }\n              }\n              nextResource[internalInstanceKey] = workInProgress;\n              nextResource[internalPropsKey] = newProps;\n              a: for (\n                _currentHostContext = workInProgress.child;\n                null !== _currentHostContext;\n\n              ) {\n                if (\n                  5 === _currentHostContext.tag ||\n                  6 === _currentHostContext.tag\n                )\n                  nextResource.appendChild(_currentHostContext.stateNode);\n                else if (\n                  4 !== _currentHostContext.tag &&\n                  27 !== _currentHostContext.tag &&\n                  null !== _currentHostContext.child\n                ) {\n                  _currentHostContext.child.return = _currentHostContext;\n                  _currentHostContext = _currentHostContext.child;\n                  continue;\n                }\n                if (_currentHostContext === workInProgress) break a;\n                for (; null === _currentHostContext.sibling; ) {\n                  if (\n                    null === _currentHostContext.return ||\n                    _currentHostContext.return === workInProgress\n                  )\n                    break a;\n                  _currentHostContext = _currentHostContext.return;\n                }\n                _currentHostContext.sibling.return = _currentHostContext.return;\n                _currentHostContext = _currentHostContext.sibling;\n              }\n              workInProgress.stateNode = nextResource;\n              a: switch (\n                (setInitialProperties(nextResource, type, newProps), type)\n              ) {\n                case \"button\":\n                case \"input\":\n                case \"select\":\n                case \"textarea\":\n                  newProps = !!newProps.autoFocus;\n                  break a;\n                case \"img\":\n                  newProps = !0;\n                  break a;\n                default:\n                  newProps = !1;\n              }\n              newProps && markUpdate(workInProgress);\n            }\n          }\n          bubbleProperties(workInProgress);\n          preloadInstanceAndSuspendIfNeeded(\n            workInProgress,\n            workInProgress.type,\n            null === current ? null : current.memoizedProps,\n            workInProgress.pendingProps,\n            renderLanes\n          );\n          return null;\n        case 6:\n          if (current && null != workInProgress.stateNode)\n            current.memoizedProps !== newProps && markUpdate(workInProgress);\n          else {\n            if (\n              \"string\" !== typeof newProps &&\n              null === workInProgress.stateNode\n            )\n              throw Error(\n                \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\"\n              );\n            current = requiredContext(rootInstanceStackCursor.current);\n            renderLanes = getHostContext();\n            if (popHydrationState(workInProgress)) {\n              current = workInProgress.stateNode;\n              renderLanes = workInProgress.memoizedProps;\n              type = !didSuspendOrErrorDEV;\n              newProps = null;\n              nextResource = hydrationParentFiber;\n              if (null !== nextResource)\n                switch (nextResource.tag) {\n                  case 3:\n                    type &&\n                      ((type = diffHydratedTextForDevWarnings(\n                        current,\n                        renderLanes,\n                        newProps\n                      )),\n                      null !== type &&\n                        (buildHydrationDiffNode(workInProgress, 0).serverProps =\n                          type));\n                    break;\n                  case 27:\n                  case 5:\n                    (newProps = nextResource.memoizedProps),\n                      type &&\n                        ((type = diffHydratedTextForDevWarnings(\n                          current,\n                          renderLanes,\n                          newProps\n                        )),\n                        null !== type &&\n                          (buildHydrationDiffNode(\n                            workInProgress,\n                            0\n                          ).serverProps = type));\n                }\n              current[internalInstanceKey] = workInProgress;\n              current =\n                current.nodeValue === renderLanes ||\n                (null !== newProps &&\n                  !0 === newProps.suppressHydrationWarning) ||\n                checkForUnmatchedText(current.nodeValue, renderLanes)\n                  ? !0\n                  : !1;\n              current || throwOnHydrationMismatch(workInProgress, !0);\n            } else\n              (type = renderLanes.ancestorInfo.current),\n                null != type &&\n                  validateTextNesting(\n                    newProps,\n                    type.tag,\n                    renderLanes.ancestorInfo.implicitRootScope\n                  ),\n                (current =\n                  getOwnerDocumentFromRootContainer(current).createTextNode(\n                    newProps\n                  )),\n                (current[internalInstanceKey] = workInProgress),\n                (workInProgress.stateNode = current);\n          }\n          bubbleProperties(workInProgress);\n          return null;\n        case 31:\n          renderLanes = workInProgress.memoizedState;\n          if (null === current || null !== current.memoizedState) {\n            newProps = popHydrationState(workInProgress);\n            if (null !== renderLanes) {\n              if (null === current) {\n                if (!newProps)\n                  throw Error(\n                    \"A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.\"\n                  );\n                current = workInProgress.memoizedState;\n                current = null !== current ? current.dehydrated : null;\n                if (!current)\n                  throw Error(\n                    \"Expected to have a hydrated activity instance. This error is likely caused by a bug in React. Please file an issue.\"\n                  );\n                current[internalInstanceKey] = workInProgress;\n                bubbleProperties(workInProgress);\n                (workInProgress.mode & ProfileMode) !== NoMode &&\n                  null !== renderLanes &&\n                  ((current = workInProgress.child),\n                  null !== current &&\n                    (workInProgress.treeBaseDuration -=\n                      current.treeBaseDuration));\n              } else\n                emitPendingHydrationWarnings(),\n                  resetHydrationState(),\n                  0 === (workInProgress.flags & 128) &&\n                    (renderLanes = workInProgress.memoizedState = null),\n                  (workInProgress.flags |= 4),\n                  bubbleProperties(workInProgress),\n                  (workInProgress.mode & ProfileMode) !== NoMode &&\n                    null !== renderLanes &&\n                    ((current = workInProgress.child),\n                    null !== current &&\n                      (workInProgress.treeBaseDuration -=\n                        current.treeBaseDuration));\n              current = !1;\n            } else\n              (renderLanes = upgradeHydrationErrorsToRecoverable()),\n                null !== current &&\n                  null !== current.memoizedState &&\n                  (current.memoizedState.hydrationErrors = renderLanes),\n                (current = !0);\n            if (!current) {\n              if (workInProgress.flags & 256)\n                return popSuspenseHandler(workInProgress), workInProgress;\n              popSuspenseHandler(workInProgress);\n              return null;\n            }\n            if (0 !== (workInProgress.flags & 128))\n              throw Error(\n                \"Client rendering an Activity suspended it again. This is a bug in React.\"\n              );\n          }\n          bubbleProperties(workInProgress);\n          return null;\n        case 13:\n          newProps = workInProgress.memoizedState;\n          if (\n            null === current ||\n            (null !== current.memoizedState &&\n              null !== current.memoizedState.dehydrated)\n          ) {\n            type = newProps;\n            nextResource = popHydrationState(workInProgress);\n            if (null !== type && null !== type.dehydrated) {\n              if (null === current) {\n                if (!nextResource)\n                  throw Error(\n                    \"A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.\"\n                  );\n                nextResource = workInProgress.memoizedState;\n                nextResource =\n                  null !== nextResource ? nextResource.dehydrated : null;\n                if (!nextResource)\n                  throw Error(\n                    \"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\"\n                  );\n                nextResource[internalInstanceKey] = workInProgress;\n                bubbleProperties(workInProgress);\n                (workInProgress.mode & ProfileMode) !== NoMode &&\n                  null !== type &&\n                  ((type = workInProgress.child),\n                  null !== type &&\n                    (workInProgress.treeBaseDuration -= type.treeBaseDuration));\n              } else\n                emitPendingHydrationWarnings(),\n                  resetHydrationState(),\n                  0 === (workInProgress.flags & 128) &&\n                    (type = workInProgress.memoizedState = null),\n                  (workInProgress.flags |= 4),\n                  bubbleProperties(workInProgress),\n                  (workInProgress.mode & ProfileMode) !== NoMode &&\n                    null !== type &&\n                    ((type = workInProgress.child),\n                    null !== type &&\n                      (workInProgress.treeBaseDuration -=\n                        type.treeBaseDuration));\n              type = !1;\n            } else\n              (type = upgradeHydrationErrorsToRecoverable()),\n                null !== current &&\n                  null !== current.memoizedState &&\n                  (current.memoizedState.hydrationErrors = type),\n                (type = !0);\n            if (!type) {\n              if (workInProgress.flags & 256)\n                return popSuspenseHandler(workInProgress), workInProgress;\n              popSuspenseHandler(workInProgress);\n              return null;\n            }\n          }\n          popSuspenseHandler(workInProgress);\n          if (0 !== (workInProgress.flags & 128))\n            return (\n              (workInProgress.lanes = renderLanes),\n              (workInProgress.mode & ProfileMode) !== NoMode &&\n                transferActualDuration(workInProgress),\n              workInProgress\n            );\n          renderLanes = null !== newProps;\n          current = null !== current && null !== current.memoizedState;\n          renderLanes &&\n            ((newProps = workInProgress.child),\n            (type = null),\n            null !== newProps.alternate &&\n              null !== newProps.alternate.memoizedState &&\n              null !== newProps.alternate.memoizedState.cachePool &&\n              (type = newProps.alternate.memoizedState.cachePool.pool),\n            (nextResource = null),\n            null !== newProps.memoizedState &&\n              null !== newProps.memoizedState.cachePool &&\n              (nextResource = newProps.memoizedState.cachePool.pool),\n            nextResource !== type && (newProps.flags |= 2048));\n          renderLanes !== current &&\n            renderLanes &&\n            (workInProgress.child.flags |= 8192);\n          scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n          bubbleProperties(workInProgress);\n          (workInProgress.mode & ProfileMode) !== NoMode &&\n            renderLanes &&\n            ((current = workInProgress.child),\n            null !== current &&\n              (workInProgress.treeBaseDuration -= current.treeBaseDuration));\n          return null;\n        case 4:\n          return (\n            popHostContainer(workInProgress),\n            null === current &&\n              listenToAllSupportedEvents(\n                workInProgress.stateNode.containerInfo\n              ),\n            bubbleProperties(workInProgress),\n            null\n          );\n        case 10:\n          return (\n            popProvider(workInProgress.type, workInProgress),\n            bubbleProperties(workInProgress),\n            null\n          );\n        case 19:\n          pop(suspenseStackCursor, workInProgress);\n          newProps = workInProgress.memoizedState;\n          if (null === newProps) return bubbleProperties(workInProgress), null;\n          type = 0 !== (workInProgress.flags & 128);\n          nextResource = newProps.rendering;\n          if (null === nextResource)\n            if (type) cutOffTailIfNeeded(newProps, !1);\n            else {\n              if (\n                workInProgressRootExitStatus !== RootInProgress ||\n                (null !== current && 0 !== (current.flags & 128))\n              )\n                for (current = workInProgress.child; null !== current; ) {\n                  nextResource = findFirstSuspended(current);\n                  if (null !== nextResource) {\n                    workInProgress.flags |= 128;\n                    cutOffTailIfNeeded(newProps, !1);\n                    current = nextResource.updateQueue;\n                    workInProgress.updateQueue = current;\n                    scheduleRetryEffect(workInProgress, current);\n                    workInProgress.subtreeFlags = 0;\n                    current = renderLanes;\n                    for (\n                      renderLanes = workInProgress.child;\n                      null !== renderLanes;\n\n                    )\n                      resetWorkInProgress(renderLanes, current),\n                        (renderLanes = renderLanes.sibling);\n                    push(\n                      suspenseStackCursor,\n                      (suspenseStackCursor.current &\n                        SubtreeSuspenseContextMask) |\n                        ForceSuspenseFallback,\n                      workInProgress\n                    );\n                    isHydrating &&\n                      pushTreeFork(workInProgress, newProps.treeForkCount);\n                    return workInProgress.child;\n                  }\n                  current = current.sibling;\n                }\n              null !== newProps.tail &&\n                now$1() > workInProgressRootRenderTargetTime &&\n                ((workInProgress.flags |= 128),\n                (type = !0),\n                cutOffTailIfNeeded(newProps, !1),\n                (workInProgress.lanes = 4194304));\n            }\n          else {\n            if (!type)\n              if (\n                ((current = findFirstSuspended(nextResource)), null !== current)\n              ) {\n                if (\n                  ((workInProgress.flags |= 128),\n                  (type = !0),\n                  (current = current.updateQueue),\n                  (workInProgress.updateQueue = current),\n                  scheduleRetryEffect(workInProgress, current),\n                  cutOffTailIfNeeded(newProps, !0),\n                  null === newProps.tail &&\n                    \"hidden\" === newProps.tailMode &&\n                    !nextResource.alternate &&\n                    !isHydrating)\n                )\n                  return bubbleProperties(workInProgress), null;\n              } else\n                2 * now$1() - newProps.renderingStartTime >\n                  workInProgressRootRenderTargetTime &&\n                  536870912 !== renderLanes &&\n                  ((workInProgress.flags |= 128),\n                  (type = !0),\n                  cutOffTailIfNeeded(newProps, !1),\n                  (workInProgress.lanes = 4194304));\n            newProps.isBackwards\n              ? ((nextResource.sibling = workInProgress.child),\n                (workInProgress.child = nextResource))\n              : ((current = newProps.last),\n                null !== current\n                  ? (current.sibling = nextResource)\n                  : (workInProgress.child = nextResource),\n                (newProps.last = nextResource));\n          }\n          if (null !== newProps.tail)\n            return (\n              (current = newProps.tail),\n              (newProps.rendering = current),\n              (newProps.tail = current.sibling),\n              (newProps.renderingStartTime = now$1()),\n              (current.sibling = null),\n              (renderLanes = suspenseStackCursor.current),\n              (renderLanes = type\n                ? (renderLanes & SubtreeSuspenseContextMask) |\n                  ForceSuspenseFallback\n                : renderLanes & SubtreeSuspenseContextMask),\n              push(suspenseStackCursor, renderLanes, workInProgress),\n              isHydrating &&\n                pushTreeFork(workInProgress, newProps.treeForkCount),\n              current\n            );\n          bubbleProperties(workInProgress);\n          return null;\n        case 22:\n        case 23:\n          return (\n            popSuspenseHandler(workInProgress),\n            popHiddenContext(workInProgress),\n            (newProps = null !== workInProgress.memoizedState),\n            null !== current\n              ? (null !== current.memoizedState) !== newProps &&\n                (workInProgress.flags |= 8192)\n              : newProps && (workInProgress.flags |= 8192),\n            newProps\n              ? 0 !== (renderLanes & 536870912) &&\n                0 === (workInProgress.flags & 128) &&\n                (bubbleProperties(workInProgress),\n                workInProgress.subtreeFlags & 6 &&\n                  (workInProgress.flags |= 8192))\n              : bubbleProperties(workInProgress),\n            (renderLanes = workInProgress.updateQueue),\n            null !== renderLanes &&\n              scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n            (renderLanes = null),\n            null !== current &&\n              null !== current.memoizedState &&\n              null !== current.memoizedState.cachePool &&\n              (renderLanes = current.memoizedState.cachePool.pool),\n            (newProps = null),\n            null !== workInProgress.memoizedState &&\n              null !== workInProgress.memoizedState.cachePool &&\n              (newProps = workInProgress.memoizedState.cachePool.pool),\n            newProps !== renderLanes && (workInProgress.flags |= 2048),\n            null !== current && pop(resumedCache, workInProgress),\n            null\n          );\n        case 24:\n          return (\n            (renderLanes = null),\n            null !== current && (renderLanes = current.memoizedState.cache),\n            workInProgress.memoizedState.cache !== renderLanes &&\n              (workInProgress.flags |= 2048),\n            popProvider(CacheContext, workInProgress),\n            bubbleProperties(workInProgress),\n            null\n          );\n        case 25:\n          return null;\n        case 30:\n          return null;\n      }\n      throw Error(\n        \"Unknown unit of work tag (\" +\n          workInProgress.tag +\n          \"). This error is likely caused by a bug in React. Please file an issue.\"\n      );\n    }\n    function unwindWork(current, workInProgress) {\n      popTreeContext(workInProgress);\n      switch (workInProgress.tag) {\n        case 1:\n          return (\n            (current = workInProgress.flags),\n            current & 65536\n              ? ((workInProgress.flags = (current & -65537) | 128),\n                (workInProgress.mode & ProfileMode) !== NoMode &&\n                  transferActualDuration(workInProgress),\n                workInProgress)\n              : null\n          );\n        case 3:\n          return (\n            popProvider(CacheContext, workInProgress),\n            popHostContainer(workInProgress),\n            (current = workInProgress.flags),\n            0 !== (current & 65536) && 0 === (current & 128)\n              ? ((workInProgress.flags = (current & -65537) | 128),\n                workInProgress)\n              : null\n          );\n        case 26:\n        case 27:\n        case 5:\n          return popHostContext(workInProgress), null;\n        case 31:\n          if (null !== workInProgress.memoizedState) {\n            popSuspenseHandler(workInProgress);\n            if (null === workInProgress.alternate)\n              throw Error(\n                \"Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.\"\n              );\n            resetHydrationState();\n          }\n          current = workInProgress.flags;\n          return current & 65536\n            ? ((workInProgress.flags = (current & -65537) | 128),\n              (workInProgress.mode & ProfileMode) !== NoMode &&\n                transferActualDuration(workInProgress),\n              workInProgress)\n            : null;\n        case 13:\n          popSuspenseHandler(workInProgress);\n          current = workInProgress.memoizedState;\n          if (null !== current && null !== current.dehydrated) {\n            if (null === workInProgress.alternate)\n              throw Error(\n                \"Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.\"\n              );\n            resetHydrationState();\n          }\n          current = workInProgress.flags;\n          return current & 65536\n            ? ((workInProgress.flags = (current & -65537) | 128),\n              (workInProgress.mode & ProfileMode) !== NoMode &&\n                transferActualDuration(workInProgress),\n              workInProgress)\n            : null;\n        case 19:\n          return pop(suspenseStackCursor, workInProgress), null;\n        case 4:\n          return popHostContainer(workInProgress), null;\n        case 10:\n          return popProvider(workInProgress.type, workInProgress), null;\n        case 22:\n        case 23:\n          return (\n            popSuspenseHandler(workInProgress),\n            popHiddenContext(workInProgress),\n            null !== current && pop(resumedCache, workInProgress),\n            (current = workInProgress.flags),\n            current & 65536\n              ? ((workInProgress.flags = (current & -65537) | 128),\n                (workInProgress.mode & ProfileMode) !== NoMode &&\n                  transferActualDuration(workInProgress),\n                workInProgress)\n              : null\n          );\n        case 24:\n          return popProvider(CacheContext, workInProgress), null;\n        case 25:\n          return null;\n        default:\n          return null;\n      }\n    }\n    function unwindInterruptedWork(current, interruptedWork) {\n      popTreeContext(interruptedWork);\n      switch (interruptedWork.tag) {\n        case 3:\n          popProvider(CacheContext, interruptedWork);\n          popHostContainer(interruptedWork);\n          break;\n        case 26:\n        case 27:\n        case 5:\n          popHostContext(interruptedWork);\n          break;\n        case 4:\n          popHostContainer(interruptedWork);\n          break;\n        case 31:\n          null !== interruptedWork.memoizedState &&\n            popSuspenseHandler(interruptedWork);\n          break;\n        case 13:\n          popSuspenseHandler(interruptedWork);\n          break;\n        case 19:\n          pop(suspenseStackCursor, interruptedWork);\n          break;\n        case 10:\n          popProvider(interruptedWork.type, interruptedWork);\n          break;\n        case 22:\n        case 23:\n          popSuspenseHandler(interruptedWork);\n          popHiddenContext(interruptedWork);\n          null !== current && pop(resumedCache, interruptedWork);\n          break;\n        case 24:\n          popProvider(CacheContext, interruptedWork);\n      }\n    }\n    function shouldProfile(current) {\n      return (current.mode & ProfileMode) !== NoMode;\n    }\n    function commitHookLayoutEffects(finishedWork, hookFlags) {\n      shouldProfile(finishedWork)\n        ? (startEffectTimer(),\n          commitHookEffectListMount(hookFlags, finishedWork),\n          recordEffectDuration())\n        : commitHookEffectListMount(hookFlags, finishedWork);\n    }\n    function commitHookLayoutUnmountEffects(\n      finishedWork,\n      nearestMountedAncestor,\n      hookFlags\n    ) {\n      shouldProfile(finishedWork)\n        ? (startEffectTimer(),\n          commitHookEffectListUnmount(\n            hookFlags,\n            finishedWork,\n            nearestMountedAncestor\n          ),\n          recordEffectDuration())\n        : commitHookEffectListUnmount(\n            hookFlags,\n            finishedWork,\n            nearestMountedAncestor\n          );\n    }\n    function commitHookEffectListMount(flags, finishedWork) {\n      try {\n        var updateQueue = finishedWork.updateQueue,\n          lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n        if (null !== lastEffect) {\n          var firstEffect = lastEffect.next;\n          updateQueue = firstEffect;\n          do {\n            if (\n              (updateQueue.tag & flags) === flags &&\n              ((flags & Passive) !== NoFlags\n                ? null !== injectedProfilingHooks &&\n                  \"function\" ===\n                    typeof injectedProfilingHooks.markComponentPassiveEffectMountStarted &&\n                  injectedProfilingHooks.markComponentPassiveEffectMountStarted(\n                    finishedWork\n                  )\n                : (flags & Layout) !== NoFlags &&\n                  null !== injectedProfilingHooks &&\n                  \"function\" ===\n                    typeof injectedProfilingHooks.markComponentLayoutEffectMountStarted &&\n                  injectedProfilingHooks.markComponentLayoutEffectMountStarted(\n                    finishedWork\n                  ),\n              (lastEffect = void 0),\n              (flags & Insertion) !== NoFlags &&\n                (isRunningInsertionEffect = !0),\n              (lastEffect = runWithFiberInDEV(\n                finishedWork,\n                callCreateInDEV,\n                updateQueue\n              )),\n              (flags & Insertion) !== NoFlags &&\n                (isRunningInsertionEffect = !1),\n              (flags & Passive) !== NoFlags\n                ? null !== injectedProfilingHooks &&\n                  \"function\" ===\n                    typeof injectedProfilingHooks.markComponentPassiveEffectMountStopped &&\n                  injectedProfilingHooks.markComponentPassiveEffectMountStopped()\n                : (flags & Layout) !== NoFlags &&\n                  null !== injectedProfilingHooks &&\n                  \"function\" ===\n                    typeof injectedProfilingHooks.markComponentLayoutEffectMountStopped &&\n                  injectedProfilingHooks.markComponentLayoutEffectMountStopped(),\n              void 0 !== lastEffect && \"function\" !== typeof lastEffect)\n            ) {\n              var hookName = void 0;\n              hookName =\n                0 !== (updateQueue.tag & Layout)\n                  ? \"useLayoutEffect\"\n                  : 0 !== (updateQueue.tag & Insertion)\n                    ? \"useInsertionEffect\"\n                    : \"useEffect\";\n              var addendum = void 0;\n              addendum =\n                null === lastEffect\n                  ? \" You returned null. If your effect does not require clean up, return undefined (or nothing).\"\n                  : \"function\" === typeof lastEffect.then\n                    ? \"\\n\\nIt looks like you wrote \" +\n                      hookName +\n                      \"(async () => ...) or returned a Promise. Instead, write the async function inside your effect and call it immediately:\\n\\n\" +\n                      hookName +\n                      \"(() => {\\n  async function fetchData() {\\n    // You can await here\\n    const response = await MyAPI.getData(someId);\\n    // ...\\n  }\\n  fetchData();\\n}, [someId]); // Or [] if effect doesn't need props or state\\n\\nLearn more about data fetching with Hooks: https://react.dev/link/hooks-data-fetching\"\n                    : \" You returned: \" + lastEffect;\n              runWithFiberInDEV(\n                finishedWork,\n                function (n, a) {\n                  console.error(\n                    \"%s must not return anything besides a function, which is used for clean-up.%s\",\n                    n,\n                    a\n                  );\n                },\n                hookName,\n                addendum\n              );\n            }\n            updateQueue = updateQueue.next;\n          } while (updateQueue !== firstEffect);\n        }\n      } catch (error) {\n        captureCommitPhaseError(finishedWork, finishedWork.return, error);\n      }\n    }\n    function commitHookEffectListUnmount(\n      flags,\n      finishedWork,\n      nearestMountedAncestor\n    ) {\n      try {\n        var updateQueue = finishedWork.updateQueue,\n          lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n        if (null !== lastEffect) {\n          var firstEffect = lastEffect.next;\n          updateQueue = firstEffect;\n          do {\n            if ((updateQueue.tag & flags) === flags) {\n              var inst = updateQueue.inst,\n                destroy = inst.destroy;\n              void 0 !== destroy &&\n                ((inst.destroy = void 0),\n                (flags & Passive) !== NoFlags\n                  ? null !== injectedProfilingHooks &&\n                    \"function\" ===\n                      typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStarted &&\n                    injectedProfilingHooks.markComponentPassiveEffectUnmountStarted(\n                      finishedWork\n                    )\n                  : (flags & Layout) !== NoFlags &&\n                    null !== injectedProfilingHooks &&\n                    \"function\" ===\n                      typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStarted &&\n                    injectedProfilingHooks.markComponentLayoutEffectUnmountStarted(\n                      finishedWork\n                    ),\n                (flags & Insertion) !== NoFlags &&\n                  (isRunningInsertionEffect = !0),\n                (lastEffect = finishedWork),\n                runWithFiberInDEV(\n                  lastEffect,\n                  callDestroyInDEV,\n                  lastEffect,\n                  nearestMountedAncestor,\n                  destroy\n                ),\n                (flags & Insertion) !== NoFlags &&\n                  (isRunningInsertionEffect = !1),\n                (flags & Passive) !== NoFlags\n                  ? null !== injectedProfilingHooks &&\n                    \"function\" ===\n                      typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStopped &&\n                    injectedProfilingHooks.markComponentPassiveEffectUnmountStopped()\n                  : (flags & Layout) !== NoFlags &&\n                    null !== injectedProfilingHooks &&\n                    \"function\" ===\n                      typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStopped &&\n                    injectedProfilingHooks.markComponentLayoutEffectUnmountStopped());\n            }\n            updateQueue = updateQueue.next;\n          } while (updateQueue !== firstEffect);\n        }\n      } catch (error) {\n        captureCommitPhaseError(finishedWork, finishedWork.return, error);\n      }\n    }\n    function commitHookPassiveMountEffects(finishedWork, hookFlags) {\n      shouldProfile(finishedWork)\n        ? (startEffectTimer(),\n          commitHookEffectListMount(hookFlags, finishedWork),\n          recordEffectDuration())\n        : commitHookEffectListMount(hookFlags, finishedWork);\n    }\n    function commitHookPassiveUnmountEffects(\n      finishedWork,\n      nearestMountedAncestor,\n      hookFlags\n    ) {\n      shouldProfile(finishedWork)\n        ? (startEffectTimer(),\n          commitHookEffectListUnmount(\n            hookFlags,\n            finishedWork,\n            nearestMountedAncestor\n          ),\n          recordEffectDuration())\n        : commitHookEffectListUnmount(\n            hookFlags,\n            finishedWork,\n            nearestMountedAncestor\n          );\n    }\n    function commitClassCallbacks(finishedWork) {\n      var updateQueue = finishedWork.updateQueue;\n      if (null !== updateQueue) {\n        var instance = finishedWork.stateNode;\n        finishedWork.type.defaultProps ||\n          \"ref\" in finishedWork.memoizedProps ||\n          didWarnAboutReassigningProps ||\n          (instance.props !== finishedWork.memoizedProps &&\n            console.error(\n              \"Expected %s props to match memoized props before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n              getComponentNameFromFiber(finishedWork) || \"instance\"\n            ),\n          instance.state !== finishedWork.memoizedState &&\n            console.error(\n              \"Expected %s state to match memoized state before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n              getComponentNameFromFiber(finishedWork) || \"instance\"\n            ));\n        try {\n          runWithFiberInDEV(\n            finishedWork,\n            commitCallbacks,\n            updateQueue,\n            instance\n          );\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n    }\n    function callGetSnapshotBeforeUpdates(instance, prevProps, prevState) {\n      return instance.getSnapshotBeforeUpdate(prevProps, prevState);\n    }\n    function commitClassSnapshot(finishedWork, current) {\n      var prevProps = current.memoizedProps,\n        prevState = current.memoizedState;\n      current = finishedWork.stateNode;\n      finishedWork.type.defaultProps ||\n        \"ref\" in finishedWork.memoizedProps ||\n        didWarnAboutReassigningProps ||\n        (current.props !== finishedWork.memoizedProps &&\n          console.error(\n            \"Expected %s props to match memoized props before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n            getComponentNameFromFiber(finishedWork) || \"instance\"\n          ),\n        current.state !== finishedWork.memoizedState &&\n          console.error(\n            \"Expected %s state to match memoized state before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n            getComponentNameFromFiber(finishedWork) || \"instance\"\n          ));\n      try {\n        var resolvedPrevProps = resolveClassComponentProps(\n          finishedWork.type,\n          prevProps\n        );\n        var snapshot = runWithFiberInDEV(\n          finishedWork,\n          callGetSnapshotBeforeUpdates,\n          current,\n          resolvedPrevProps,\n          prevState\n        );\n        prevProps = didWarnAboutUndefinedSnapshotBeforeUpdate;\n        void 0 !== snapshot ||\n          prevProps.has(finishedWork.type) ||\n          (prevProps.add(finishedWork.type),\n          runWithFiberInDEV(finishedWork, function () {\n            console.error(\n              \"%s.getSnapshotBeforeUpdate(): A snapshot value (or null) must be returned. You have returned undefined.\",\n              getComponentNameFromFiber(finishedWork)\n            );\n          }));\n        current.__reactInternalSnapshotBeforeUpdate = snapshot;\n      } catch (error) {\n        captureCommitPhaseError(finishedWork, finishedWork.return, error);\n      }\n    }\n    function safelyCallComponentWillUnmount(\n      current,\n      nearestMountedAncestor,\n      instance\n    ) {\n      instance.props = resolveClassComponentProps(\n        current.type,\n        current.memoizedProps\n      );\n      instance.state = current.memoizedState;\n      shouldProfile(current)\n        ? (startEffectTimer(),\n          runWithFiberInDEV(\n            current,\n            callComponentWillUnmountInDEV,\n            current,\n            nearestMountedAncestor,\n            instance\n          ),\n          recordEffectDuration())\n        : runWithFiberInDEV(\n            current,\n            callComponentWillUnmountInDEV,\n            current,\n            nearestMountedAncestor,\n            instance\n          );\n    }\n    function commitAttachRef(finishedWork) {\n      var ref = finishedWork.ref;\n      if (null !== ref) {\n        switch (finishedWork.tag) {\n          case 26:\n          case 27:\n          case 5:\n            var instanceToUse = finishedWork.stateNode;\n            break;\n          case 30:\n            instanceToUse = finishedWork.stateNode;\n            break;\n          default:\n            instanceToUse = finishedWork.stateNode;\n        }\n        if (\"function\" === typeof ref)\n          if (shouldProfile(finishedWork))\n            try {\n              startEffectTimer(),\n                (finishedWork.refCleanup = ref(instanceToUse));\n            } finally {\n              recordEffectDuration();\n            }\n          else finishedWork.refCleanup = ref(instanceToUse);\n        else\n          \"string\" === typeof ref\n            ? console.error(\"String refs are no longer supported.\")\n            : ref.hasOwnProperty(\"current\") ||\n              console.error(\n                \"Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().\",\n                getComponentNameFromFiber(finishedWork)\n              ),\n            (ref.current = instanceToUse);\n      }\n    }\n    function safelyAttachRef(current, nearestMountedAncestor) {\n      try {\n        runWithFiberInDEV(current, commitAttachRef, current);\n      } catch (error) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error);\n      }\n    }\n    function safelyDetachRef(current, nearestMountedAncestor) {\n      var ref = current.ref,\n        refCleanup = current.refCleanup;\n      if (null !== ref)\n        if (\"function\" === typeof refCleanup)\n          try {\n            if (shouldProfile(current))\n              try {\n                startEffectTimer(), runWithFiberInDEV(current, refCleanup);\n              } finally {\n                recordEffectDuration(current);\n              }\n            else runWithFiberInDEV(current, refCleanup);\n          } catch (error) {\n            captureCommitPhaseError(current, nearestMountedAncestor, error);\n          } finally {\n            (current.refCleanup = null),\n              (current = current.alternate),\n              null != current && (current.refCleanup = null);\n          }\n        else if (\"function\" === typeof ref)\n          try {\n            if (shouldProfile(current))\n              try {\n                startEffectTimer(), runWithFiberInDEV(current, ref, null);\n              } finally {\n                recordEffectDuration(current);\n              }\n            else runWithFiberInDEV(current, ref, null);\n          } catch (error$7) {\n            captureCommitPhaseError(current, nearestMountedAncestor, error$7);\n          }\n        else ref.current = null;\n    }\n    function commitProfiler(\n      finishedWork,\n      current,\n      commitStartTime,\n      effectDuration\n    ) {\n      var _finishedWork$memoize = finishedWork.memoizedProps,\n        id = _finishedWork$memoize.id,\n        onCommit = _finishedWork$memoize.onCommit;\n      _finishedWork$memoize = _finishedWork$memoize.onRender;\n      current = null === current ? \"mount\" : \"update\";\n      currentUpdateIsNested && (current = \"nested-update\");\n      \"function\" === typeof _finishedWork$memoize &&\n        _finishedWork$memoize(\n          id,\n          current,\n          finishedWork.actualDuration,\n          finishedWork.treeBaseDuration,\n          finishedWork.actualStartTime,\n          commitStartTime\n        );\n      \"function\" === typeof onCommit &&\n        onCommit(id, current, effectDuration, commitStartTime);\n    }\n    function commitProfilerPostCommitImpl(\n      finishedWork,\n      current,\n      commitStartTime,\n      passiveEffectDuration\n    ) {\n      var _finishedWork$memoize2 = finishedWork.memoizedProps;\n      finishedWork = _finishedWork$memoize2.id;\n      _finishedWork$memoize2 = _finishedWork$memoize2.onPostCommit;\n      current = null === current ? \"mount\" : \"update\";\n      currentUpdateIsNested && (current = \"nested-update\");\n      \"function\" === typeof _finishedWork$memoize2 &&\n        _finishedWork$memoize2(\n          finishedWork,\n          current,\n          passiveEffectDuration,\n          commitStartTime\n        );\n    }\n    function commitHostMount(finishedWork) {\n      var type = finishedWork.type,\n        props = finishedWork.memoizedProps,\n        instance = finishedWork.stateNode;\n      try {\n        runWithFiberInDEV(\n          finishedWork,\n          commitMount,\n          instance,\n          type,\n          props,\n          finishedWork\n        );\n      } catch (error) {\n        captureCommitPhaseError(finishedWork, finishedWork.return, error);\n      }\n    }\n    function commitHostUpdate(finishedWork, newProps, oldProps) {\n      try {\n        runWithFiberInDEV(\n          finishedWork,\n          commitUpdate,\n          finishedWork.stateNode,\n          finishedWork.type,\n          oldProps,\n          newProps,\n          finishedWork\n        );\n      } catch (error) {\n        captureCommitPhaseError(finishedWork, finishedWork.return, error);\n      }\n    }\n    function isHostParent(fiber) {\n      return (\n        5 === fiber.tag ||\n        3 === fiber.tag ||\n        26 === fiber.tag ||\n        (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n        4 === fiber.tag\n      );\n    }\n    function getHostSibling(fiber) {\n      a: for (;;) {\n        for (; null === fiber.sibling; ) {\n          if (null === fiber.return || isHostParent(fiber.return)) return null;\n          fiber = fiber.return;\n        }\n        fiber.sibling.return = fiber.return;\n        for (\n          fiber = fiber.sibling;\n          5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n        ) {\n          if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n          if (fiber.flags & 2) continue a;\n          if (null === fiber.child || 4 === fiber.tag) continue a;\n          else (fiber.child.return = fiber), (fiber = fiber.child);\n        }\n        if (!(fiber.flags & 2)) return fiber.stateNode;\n      }\n    }\n    function insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n      var tag = node.tag;\n      if (5 === tag || 6 === tag)\n        (node = node.stateNode),\n          before\n            ? (warnForReactChildrenConflict(parent),\n              (9 === parent.nodeType\n                ? parent.body\n                : \"HTML\" === parent.nodeName\n                  ? parent.ownerDocument.body\n                  : parent\n              ).insertBefore(node, before))\n            : (warnForReactChildrenConflict(parent),\n              (before =\n                9 === parent.nodeType\n                  ? parent.body\n                  : \"HTML\" === parent.nodeName\n                    ? parent.ownerDocument.body\n                    : parent),\n              before.appendChild(node),\n              (parent = parent._reactRootContainer),\n              (null !== parent && void 0 !== parent) ||\n                null !== before.onclick ||\n                (before.onclick = noop$1));\n      else if (\n        4 !== tag &&\n        (27 === tag &&\n          isSingletonScope(node.type) &&\n          ((parent = node.stateNode), (before = null)),\n        (node = node.child),\n        null !== node)\n      )\n        for (\n          insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n            node = node.sibling;\n          null !== node;\n\n        )\n          insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n            (node = node.sibling);\n    }\n    function insertOrAppendPlacementNode(node, before, parent) {\n      var tag = node.tag;\n      if (5 === tag || 6 === tag)\n        (node = node.stateNode),\n          before ? parent.insertBefore(node, before) : parent.appendChild(node);\n      else if (\n        4 !== tag &&\n        (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),\n        (node = node.child),\n        null !== node)\n      )\n        for (\n          insertOrAppendPlacementNode(node, before, parent),\n            node = node.sibling;\n          null !== node;\n\n        )\n          insertOrAppendPlacementNode(node, before, parent),\n            (node = node.sibling);\n    }\n    function commitPlacement(finishedWork) {\n      for (\n        var hostParentFiber, parentFiber = finishedWork.return;\n        null !== parentFiber;\n\n      ) {\n        if (isHostParent(parentFiber)) {\n          hostParentFiber = parentFiber;\n          break;\n        }\n        parentFiber = parentFiber.return;\n      }\n      if (null == hostParentFiber)\n        throw Error(\n          \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\"\n        );\n      switch (hostParentFiber.tag) {\n        case 27:\n          hostParentFiber = hostParentFiber.stateNode;\n          parentFiber = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(\n            finishedWork,\n            parentFiber,\n            hostParentFiber\n          );\n          break;\n        case 5:\n          parentFiber = hostParentFiber.stateNode;\n          hostParentFiber.flags & 32 &&\n            (resetTextContent(parentFiber), (hostParentFiber.flags &= -33));\n          hostParentFiber = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(\n            finishedWork,\n            hostParentFiber,\n            parentFiber\n          );\n          break;\n        case 3:\n        case 4:\n          hostParentFiber = hostParentFiber.stateNode.containerInfo;\n          parentFiber = getHostSibling(finishedWork);\n          insertOrAppendPlacementNodeIntoContainer(\n            finishedWork,\n            parentFiber,\n            hostParentFiber\n          );\n          break;\n        default:\n          throw Error(\n            \"Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.\"\n          );\n      }\n    }\n    function commitHostSingletonAcquisition(finishedWork) {\n      var singleton = finishedWork.stateNode,\n        props = finishedWork.memoizedProps;\n      try {\n        runWithFiberInDEV(\n          finishedWork,\n          acquireSingletonInstance,\n          finishedWork.type,\n          props,\n          singleton,\n          finishedWork\n        );\n      } catch (error) {\n        captureCommitPhaseError(finishedWork, finishedWork.return, error);\n      }\n    }\n    function commitBeforeMutationEffects(root, firstChild) {\n      root = root.containerInfo;\n      eventsEnabled = _enabled;\n      root = getActiveElementDeep(root);\n      if (hasSelectionCapabilities(root)) {\n        if (\"selectionStart\" in root)\n          var JSCompiler_temp = {\n            start: root.selectionStart,\n            end: root.selectionEnd\n          };\n        else\n          a: {\n            JSCompiler_temp =\n              ((JSCompiler_temp = root.ownerDocument) &&\n                JSCompiler_temp.defaultView) ||\n              window;\n            var selection =\n              JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n            if (selection && 0 !== selection.rangeCount) {\n              JSCompiler_temp = selection.anchorNode;\n              var anchorOffset = selection.anchorOffset,\n                focusNode = selection.focusNode;\n              selection = selection.focusOffset;\n              try {\n                JSCompiler_temp.nodeType, focusNode.nodeType;\n              } catch (e$2) {\n                JSCompiler_temp = null;\n                break a;\n              }\n              var length = 0,\n                start = -1,\n                end = -1,\n                indexWithinAnchor = 0,\n                indexWithinFocus = 0,\n                node = root,\n                parentNode = null;\n              b: for (;;) {\n                for (var next; ; ) {\n                  node !== JSCompiler_temp ||\n                    (0 !== anchorOffset && 3 !== node.nodeType) ||\n                    (start = length + anchorOffset);\n                  node !== focusNode ||\n                    (0 !== selection && 3 !== node.nodeType) ||\n                    (end = length + selection);\n                  3 === node.nodeType && (length += node.nodeValue.length);\n                  if (null === (next = node.firstChild)) break;\n                  parentNode = node;\n                  node = next;\n                }\n                for (;;) {\n                  if (node === root) break b;\n                  parentNode === JSCompiler_temp &&\n                    ++indexWithinAnchor === anchorOffset &&\n                    (start = length);\n                  parentNode === focusNode &&\n                    ++indexWithinFocus === selection &&\n                    (end = length);\n                  if (null !== (next = node.nextSibling)) break;\n                  node = parentNode;\n                  parentNode = node.parentNode;\n                }\n                node = next;\n              }\n              JSCompiler_temp =\n                -1 === start || -1 === end ? null : { start: start, end: end };\n            } else JSCompiler_temp = null;\n          }\n        JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n      } else JSCompiler_temp = null;\n      selectionInformation = {\n        focusedElem: root,\n        selectionRange: JSCompiler_temp\n      };\n      _enabled = !1;\n      for (nextEffect = firstChild; null !== nextEffect; )\n        if (\n          ((firstChild = nextEffect),\n          (root = firstChild.child),\n          0 !== (firstChild.subtreeFlags & 1024) && null !== root)\n        )\n          (root.return = firstChild), (nextEffect = root);\n        else\n          for (; null !== nextEffect; ) {\n            root = firstChild = nextEffect;\n            JSCompiler_temp = root.alternate;\n            anchorOffset = root.flags;\n            switch (root.tag) {\n              case 0:\n                break;\n              case 11:\n              case 15:\n                break;\n              case 1:\n                0 !== (anchorOffset & 1024) &&\n                  null !== JSCompiler_temp &&\n                  commitClassSnapshot(root, JSCompiler_temp);\n                break;\n              case 3:\n                if (0 !== (anchorOffset & 1024))\n                  if (\n                    ((root = root.stateNode.containerInfo),\n                    (JSCompiler_temp = root.nodeType),\n                    9 === JSCompiler_temp)\n                  )\n                    clearContainerSparingly(root);\n                  else if (1 === JSCompiler_temp)\n                    switch (root.nodeName) {\n                      case \"HEAD\":\n                      case \"HTML\":\n                      case \"BODY\":\n                        clearContainerSparingly(root);\n                        break;\n                      default:\n                        root.textContent = \"\";\n                    }\n                break;\n              case 5:\n              case 26:\n              case 27:\n              case 6:\n              case 4:\n              case 17:\n                break;\n              default:\n                if (0 !== (anchorOffset & 1024))\n                  throw Error(\n                    \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\"\n                  );\n            }\n            root = firstChild.sibling;\n            if (null !== root) {\n              root.return = firstChild.return;\n              nextEffect = root;\n              break;\n            }\n            nextEffect = firstChild.return;\n          }\n    }\n    function commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n      var prevEffectStart = pushComponentEffectStart(),\n        flags = finishedWork.flags;\n      switch (finishedWork.tag) {\n        case 0:\n        case 11:\n        case 15:\n          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n          flags & 4 &&\n            commitHookLayoutEffects(finishedWork, Layout | HasEffect);\n          break;\n        case 1:\n          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n          if (flags & 4)\n            if (((finishedRoot = finishedWork.stateNode), null === current))\n              finishedWork.type.defaultProps ||\n                \"ref\" in finishedWork.memoizedProps ||\n                didWarnAboutReassigningProps ||\n                (finishedRoot.props !== finishedWork.memoizedProps &&\n                  console.error(\n                    \"Expected %s props to match memoized props before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n                    getComponentNameFromFiber(finishedWork) || \"instance\"\n                  ),\n                finishedRoot.state !== finishedWork.memoizedState &&\n                  console.error(\n                    \"Expected %s state to match memoized state before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n                    getComponentNameFromFiber(finishedWork) || \"instance\"\n                  )),\n                shouldProfile(finishedWork)\n                  ? (startEffectTimer(),\n                    runWithFiberInDEV(\n                      finishedWork,\n                      callComponentDidMountInDEV,\n                      finishedWork,\n                      finishedRoot\n                    ),\n                    recordEffectDuration())\n                  : runWithFiberInDEV(\n                      finishedWork,\n                      callComponentDidMountInDEV,\n                      finishedWork,\n                      finishedRoot\n                    );\n            else {\n              var prevProps = resolveClassComponentProps(\n                finishedWork.type,\n                current.memoizedProps\n              );\n              current = current.memoizedState;\n              finishedWork.type.defaultProps ||\n                \"ref\" in finishedWork.memoizedProps ||\n                didWarnAboutReassigningProps ||\n                (finishedRoot.props !== finishedWork.memoizedProps &&\n                  console.error(\n                    \"Expected %s props to match memoized props before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\",\n                    getComponentNameFromFiber(finishedWork) || \"instance\"\n                  ),\n                finishedRoot.state !== finishedWork.memoizedState &&\n                  console.error(\n                    \"Expected %s state to match memoized state before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\",\n                    getComponentNameFromFiber(finishedWork) || \"instance\"\n                  ));\n              shouldProfile(finishedWork)\n                ? (startEffectTimer(),\n                  runWithFiberInDEV(\n                    finishedWork,\n                    callComponentDidUpdateInDEV,\n                    finishedWork,\n                    finishedRoot,\n                    prevProps,\n                    current,\n                    finishedRoot.__reactInternalSnapshotBeforeUpdate\n                  ),\n                  recordEffectDuration())\n                : runWithFiberInDEV(\n                    finishedWork,\n                    callComponentDidUpdateInDEV,\n                    finishedWork,\n                    finishedRoot,\n                    prevProps,\n                    current,\n                    finishedRoot.__reactInternalSnapshotBeforeUpdate\n                  );\n            }\n          flags & 64 && commitClassCallbacks(finishedWork);\n          flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n          break;\n        case 3:\n          current = pushNestedEffectDurations();\n          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n          if (\n            flags & 64 &&\n            ((flags = finishedWork.updateQueue), null !== flags)\n          ) {\n            prevProps = null;\n            if (null !== finishedWork.child)\n              switch (finishedWork.child.tag) {\n                case 27:\n                case 5:\n                  prevProps = finishedWork.child.stateNode;\n                  break;\n                case 1:\n                  prevProps = finishedWork.child.stateNode;\n              }\n            try {\n              runWithFiberInDEV(\n                finishedWork,\n                commitCallbacks,\n                flags,\n                prevProps\n              );\n            } catch (error) {\n              captureCommitPhaseError(finishedWork, finishedWork.return, error);\n            }\n          }\n          finishedRoot.effectDuration += popNestedEffectDurations(current);\n          break;\n        case 27:\n          null === current &&\n            flags & 4 &&\n            commitHostSingletonAcquisition(finishedWork);\n        case 26:\n        case 5:\n          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n          if (null === current)\n            if (flags & 4) commitHostMount(finishedWork);\n            else if (flags & 64) {\n              finishedRoot = finishedWork.type;\n              current = finishedWork.memoizedProps;\n              prevProps = finishedWork.stateNode;\n              try {\n                runWithFiberInDEV(\n                  finishedWork,\n                  commitHydratedInstance,\n                  prevProps,\n                  finishedRoot,\n                  current,\n                  finishedWork\n                );\n              } catch (error) {\n                captureCommitPhaseError(\n                  finishedWork,\n                  finishedWork.return,\n                  error\n                );\n              }\n            }\n          flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n          break;\n        case 12:\n          if (flags & 4) {\n            flags = pushNestedEffectDurations();\n            recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n            finishedRoot = finishedWork.stateNode;\n            finishedRoot.effectDuration += bubbleNestedEffectDurations(flags);\n            try {\n              runWithFiberInDEV(\n                finishedWork,\n                commitProfiler,\n                finishedWork,\n                current,\n                commitStartTime,\n                finishedRoot.effectDuration\n              );\n            } catch (error) {\n              captureCommitPhaseError(finishedWork, finishedWork.return, error);\n            }\n          } else recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n          break;\n        case 31:\n          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n          flags & 4 &&\n            commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n          break;\n        case 13:\n          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n          flags & 4 &&\n            commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n          flags & 64 &&\n            ((finishedRoot = finishedWork.memoizedState),\n            null !== finishedRoot &&\n              ((finishedRoot = finishedRoot.dehydrated),\n              null !== finishedRoot &&\n                ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n                  null,\n                  finishedWork\n                )),\n                registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n          break;\n        case 22:\n          flags =\n            null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n          if (!flags) {\n            current =\n              (null !== current && null !== current.memoizedState) ||\n              offscreenSubtreeWasHidden;\n            prevProps = offscreenSubtreeIsHidden;\n            var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n            offscreenSubtreeIsHidden = flags;\n            (offscreenSubtreeWasHidden = current) &&\n            !prevOffscreenSubtreeWasHidden\n              ? recursivelyTraverseReappearLayoutEffects(\n                  finishedRoot,\n                  finishedWork,\n                  0 !== (finishedWork.subtreeFlags & 8772)\n                )\n              : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n            offscreenSubtreeIsHidden = prevProps;\n            offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n          }\n          break;\n        case 30:\n          break;\n        default:\n          recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      }\n      popComponentEffectStart(prevEffectStart);\n    }\n    function detachFiberAfterEffects(fiber) {\n      var alternate = fiber.alternate;\n      null !== alternate &&\n        ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n      fiber.child = null;\n      fiber.deletions = null;\n      fiber.sibling = null;\n      5 === fiber.tag &&\n        ((alternate = fiber.stateNode),\n        null !== alternate && detachDeletedInstance(alternate));\n      fiber.stateNode = null;\n      fiber._debugOwner = null;\n      fiber.return = null;\n      fiber.dependencies = null;\n      fiber.memoizedProps = null;\n      fiber.memoizedState = null;\n      fiber.pendingProps = null;\n      fiber.stateNode = null;\n      fiber.updateQueue = null;\n    }\n    function recursivelyTraverseDeletionEffects(\n      finishedRoot,\n      nearestMountedAncestor,\n      parent\n    ) {\n      for (parent = parent.child; null !== parent; )\n        commitDeletionEffectsOnFiber(\n          finishedRoot,\n          nearestMountedAncestor,\n          parent\n        ),\n          (parent = parent.sibling);\n    }\n    function commitDeletionEffectsOnFiber(\n      finishedRoot,\n      nearestMountedAncestor,\n      deletedFiber\n    ) {\n      if (\n        injectedHook &&\n        \"function\" === typeof injectedHook.onCommitFiberUnmount\n      )\n        try {\n          injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n        } catch (err) {\n          hasLoggedError ||\n            ((hasLoggedError = !0),\n            console.error(\n              \"React instrumentation encountered an error: %s\",\n              err\n            ));\n        }\n      var prevEffectStart = pushComponentEffectStart();\n      switch (deletedFiber.tag) {\n        case 26:\n          offscreenSubtreeWasHidden ||\n            safelyDetachRef(deletedFiber, nearestMountedAncestor);\n          recursivelyTraverseDeletionEffects(\n            finishedRoot,\n            nearestMountedAncestor,\n            deletedFiber\n          );\n          deletedFiber.memoizedState\n            ? deletedFiber.memoizedState.count--\n            : deletedFiber.stateNode &&\n              ((deletedFiber = deletedFiber.stateNode),\n              deletedFiber.parentNode.removeChild(deletedFiber));\n          break;\n        case 27:\n          offscreenSubtreeWasHidden ||\n            safelyDetachRef(deletedFiber, nearestMountedAncestor);\n          var prevHostParent = hostParent,\n            prevHostParentIsContainer = hostParentIsContainer;\n          isSingletonScope(deletedFiber.type) &&\n            ((hostParent = deletedFiber.stateNode),\n            (hostParentIsContainer = !1));\n          recursivelyTraverseDeletionEffects(\n            finishedRoot,\n            nearestMountedAncestor,\n            deletedFiber\n          );\n          runWithFiberInDEV(\n            deletedFiber,\n            releaseSingletonInstance,\n            deletedFiber.stateNode\n          );\n          hostParent = prevHostParent;\n          hostParentIsContainer = prevHostParentIsContainer;\n          break;\n        case 5:\n          offscreenSubtreeWasHidden ||\n            safelyDetachRef(deletedFiber, nearestMountedAncestor);\n        case 6:\n          prevHostParent = hostParent;\n          prevHostParentIsContainer = hostParentIsContainer;\n          hostParent = null;\n          recursivelyTraverseDeletionEffects(\n            finishedRoot,\n            nearestMountedAncestor,\n            deletedFiber\n          );\n          hostParent = prevHostParent;\n          hostParentIsContainer = prevHostParentIsContainer;\n          if (null !== hostParent)\n            if (hostParentIsContainer)\n              try {\n                runWithFiberInDEV(\n                  deletedFiber,\n                  removeChildFromContainer,\n                  hostParent,\n                  deletedFiber.stateNode\n                );\n              } catch (error) {\n                captureCommitPhaseError(\n                  deletedFiber,\n                  nearestMountedAncestor,\n                  error\n                );\n              }\n            else\n              try {\n                runWithFiberInDEV(\n                  deletedFiber,\n                  removeChild,\n                  hostParent,\n                  deletedFiber.stateNode\n                );\n              } catch (error) {\n                captureCommitPhaseError(\n                  deletedFiber,\n                  nearestMountedAncestor,\n                  error\n                );\n              }\n          break;\n        case 18:\n          null !== hostParent &&\n            (hostParentIsContainer\n              ? ((finishedRoot = hostParent),\n                clearHydrationBoundary(\n                  9 === finishedRoot.nodeType\n                    ? finishedRoot.body\n                    : \"HTML\" === finishedRoot.nodeName\n                      ? finishedRoot.ownerDocument.body\n                      : finishedRoot,\n                  deletedFiber.stateNode\n                ),\n                retryIfBlockedOn(finishedRoot))\n              : clearHydrationBoundary(hostParent, deletedFiber.stateNode));\n          break;\n        case 4:\n          prevHostParent = hostParent;\n          prevHostParentIsContainer = hostParentIsContainer;\n          hostParent = deletedFiber.stateNode.containerInfo;\n          hostParentIsContainer = !0;\n          recursivelyTraverseDeletionEffects(\n            finishedRoot,\n            nearestMountedAncestor,\n            deletedFiber\n          );\n          hostParent = prevHostParent;\n          hostParentIsContainer = prevHostParentIsContainer;\n          break;\n        case 0:\n        case 11:\n        case 14:\n        case 15:\n          offscreenSubtreeWasHidden ||\n            commitHookEffectListUnmount(\n              Insertion,\n              deletedFiber,\n              nearestMountedAncestor\n            );\n          offscreenSubtreeWasHidden ||\n            commitHookLayoutUnmountEffects(\n              deletedFiber,\n              nearestMountedAncestor,\n              Layout\n            );\n          recursivelyTraverseDeletionEffects(\n            finishedRoot,\n            nearestMountedAncestor,\n            deletedFiber\n          );\n          break;\n        case 1:\n          offscreenSubtreeWasHidden ||\n            (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n            (prevHostParent = deletedFiber.stateNode),\n            \"function\" === typeof prevHostParent.componentWillUnmount &&\n              safelyCallComponentWillUnmount(\n                deletedFiber,\n                nearestMountedAncestor,\n                prevHostParent\n              ));\n          recursivelyTraverseDeletionEffects(\n            finishedRoot,\n            nearestMountedAncestor,\n            deletedFiber\n          );\n          break;\n        case 21:\n          recursivelyTraverseDeletionEffects(\n            finishedRoot,\n            nearestMountedAncestor,\n            deletedFiber\n          );\n          break;\n        case 22:\n          offscreenSubtreeWasHidden =\n            (prevHostParent = offscreenSubtreeWasHidden) ||\n            null !== deletedFiber.memoizedState;\n          recursivelyTraverseDeletionEffects(\n            finishedRoot,\n            nearestMountedAncestor,\n            deletedFiber\n          );\n          offscreenSubtreeWasHidden = prevHostParent;\n          break;\n        default:\n          recursivelyTraverseDeletionEffects(\n            finishedRoot,\n            nearestMountedAncestor,\n            deletedFiber\n          );\n      }\n      popComponentEffectStart(prevEffectStart);\n    }\n    function commitActivityHydrationCallbacks(finishedRoot, finishedWork) {\n      if (\n        null === finishedWork.memoizedState &&\n        ((finishedRoot = finishedWork.alternate),\n        null !== finishedRoot &&\n          ((finishedRoot = finishedRoot.memoizedState), null !== finishedRoot))\n      ) {\n        finishedRoot = finishedRoot.dehydrated;\n        try {\n          runWithFiberInDEV(\n            finishedWork,\n            commitHydratedActivityInstance,\n            finishedRoot\n          );\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n    }\n    function commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n      if (\n        null === finishedWork.memoizedState &&\n        ((finishedRoot = finishedWork.alternate),\n        null !== finishedRoot &&\n          ((finishedRoot = finishedRoot.memoizedState),\n          null !== finishedRoot &&\n            ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n      )\n        try {\n          runWithFiberInDEV(\n            finishedWork,\n            commitHydratedSuspenseInstance,\n            finishedRoot\n          );\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n    }\n    function getRetryCache(finishedWork) {\n      switch (finishedWork.tag) {\n        case 31:\n        case 13:\n        case 19:\n          var retryCache = finishedWork.stateNode;\n          null === retryCache &&\n            (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n          return retryCache;\n        case 22:\n          return (\n            (finishedWork = finishedWork.stateNode),\n            (retryCache = finishedWork._retryCache),\n            null === retryCache &&\n              (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n            retryCache\n          );\n        default:\n          throw Error(\n            \"Unexpected Suspense handler tag (\" +\n              finishedWork.tag +\n              \"). This is a bug in React.\"\n          );\n      }\n    }\n    function attachSuspenseRetryListeners(finishedWork, wakeables) {\n      var retryCache = getRetryCache(finishedWork);\n      wakeables.forEach(function (wakeable) {\n        var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n        if (!retryCache.has(wakeable)) {\n          retryCache.add(wakeable);\n          if (isDevToolsPresent)\n            if (null !== inProgressLanes && null !== inProgressRoot)\n              restorePendingUpdaters(inProgressRoot, inProgressLanes);\n            else\n              throw Error(\n                \"Expected finished root and lanes to be set. This is a bug in React.\"\n              );\n          wakeable.then(retry, retry);\n        }\n      });\n    }\n    function recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n      var deletions = parentFiber.deletions;\n      if (null !== deletions)\n        for (var i = 0; i < deletions.length; i++) {\n          var root = root$jscomp$0,\n            returnFiber = parentFiber,\n            deletedFiber = deletions[i],\n            prevEffectStart = pushComponentEffectStart(),\n            parent = returnFiber;\n          a: for (; null !== parent; ) {\n            switch (parent.tag) {\n              case 27:\n                if (isSingletonScope(parent.type)) {\n                  hostParent = parent.stateNode;\n                  hostParentIsContainer = !1;\n                  break a;\n                }\n                break;\n              case 5:\n                hostParent = parent.stateNode;\n                hostParentIsContainer = !1;\n                break a;\n              case 3:\n              case 4:\n                hostParent = parent.stateNode.containerInfo;\n                hostParentIsContainer = !0;\n                break a;\n            }\n            parent = parent.return;\n          }\n          if (null === hostParent)\n            throw Error(\n              \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\"\n            );\n          commitDeletionEffectsOnFiber(root, returnFiber, deletedFiber);\n          hostParent = null;\n          hostParentIsContainer = !1;\n          popComponentEffectStart(prevEffectStart);\n          root = deletedFiber;\n          returnFiber = root.alternate;\n          null !== returnFiber && (returnFiber.return = null);\n          root.return = null;\n        }\n      if (parentFiber.subtreeFlags & 13878)\n        for (parentFiber = parentFiber.child; null !== parentFiber; )\n          commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n            (parentFiber = parentFiber.sibling);\n    }\n    function commitMutationEffectsOnFiber(finishedWork, root) {\n      var prevEffectStart = pushComponentEffectStart(),\n        current = finishedWork.alternate,\n        flags = finishedWork.flags;\n      switch (finishedWork.tag) {\n        case 0:\n        case 11:\n        case 14:\n        case 15:\n          recursivelyTraverseMutationEffects(root, finishedWork);\n          commitReconciliationEffects(finishedWork);\n          flags & 4 &&\n            (commitHookEffectListUnmount(\n              Insertion | HasEffect,\n              finishedWork,\n              finishedWork.return\n            ),\n            commitHookEffectListMount(Insertion | HasEffect, finishedWork),\n            commitHookLayoutUnmountEffects(\n              finishedWork,\n              finishedWork.return,\n              Layout | HasEffect\n            ));\n          break;\n        case 1:\n          recursivelyTraverseMutationEffects(root, finishedWork);\n          commitReconciliationEffects(finishedWork);\n          flags & 512 &&\n            (offscreenSubtreeWasHidden ||\n              null === current ||\n              safelyDetachRef(current, current.return));\n          flags & 64 &&\n            offscreenSubtreeIsHidden &&\n            ((finishedWork = finishedWork.updateQueue),\n            null !== finishedWork &&\n              ((flags = finishedWork.callbacks),\n              null !== flags &&\n                ((current = finishedWork.shared.hiddenCallbacks),\n                (finishedWork.shared.hiddenCallbacks =\n                  null === current ? flags : current.concat(flags)))));\n          break;\n        case 26:\n          var hoistableRoot = currentHoistableRoot;\n          recursivelyTraverseMutationEffects(root, finishedWork);\n          commitReconciliationEffects(finishedWork);\n          flags & 512 &&\n            (offscreenSubtreeWasHidden ||\n              null === current ||\n              safelyDetachRef(current, current.return));\n          if (flags & 4) {\n            var currentResource =\n              null !== current ? current.memoizedState : null;\n            flags = finishedWork.memoizedState;\n            if (null === current)\n              if (null === flags)\n                if (null === finishedWork.stateNode) {\n                  a: {\n                    flags = finishedWork.type;\n                    current = finishedWork.memoizedProps;\n                    hoistableRoot =\n                      hoistableRoot.ownerDocument || hoistableRoot;\n                    b: switch (flags) {\n                      case \"title\":\n                        currentResource =\n                          hoistableRoot.getElementsByTagName(\"title\")[0];\n                        if (\n                          !currentResource ||\n                          currentResource[internalHoistableMarker] ||\n                          currentResource[internalInstanceKey] ||\n                          currentResource.namespaceURI === SVG_NAMESPACE ||\n                          currentResource.hasAttribute(\"itemprop\")\n                        )\n                          (currentResource =\n                            hoistableRoot.createElement(flags)),\n                            hoistableRoot.head.insertBefore(\n                              currentResource,\n                              hoistableRoot.querySelector(\"head > title\")\n                            );\n                        setInitialProperties(currentResource, flags, current);\n                        currentResource[internalInstanceKey] = finishedWork;\n                        markNodeAsHoistable(currentResource);\n                        flags = currentResource;\n                        break a;\n                      case \"link\":\n                        var maybeNodes = getHydratableHoistableCache(\n                          \"link\",\n                          \"href\",\n                          hoistableRoot\n                        ).get(flags + (current.href || \"\"));\n                        if (maybeNodes)\n                          for (var i = 0; i < maybeNodes.length; i++)\n                            if (\n                              ((currentResource = maybeNodes[i]),\n                              currentResource.getAttribute(\"href\") ===\n                                (null == current.href || \"\" === current.href\n                                  ? null\n                                  : current.href) &&\n                                currentResource.getAttribute(\"rel\") ===\n                                  (null == current.rel ? null : current.rel) &&\n                                currentResource.getAttribute(\"title\") ===\n                                  (null == current.title\n                                    ? null\n                                    : current.title) &&\n                                currentResource.getAttribute(\"crossorigin\") ===\n                                  (null == current.crossOrigin\n                                    ? null\n                                    : current.crossOrigin))\n                            ) {\n                              maybeNodes.splice(i, 1);\n                              break b;\n                            }\n                        currentResource = hoistableRoot.createElement(flags);\n                        setInitialProperties(currentResource, flags, current);\n                        hoistableRoot.head.appendChild(currentResource);\n                        break;\n                      case \"meta\":\n                        if (\n                          (maybeNodes = getHydratableHoistableCache(\n                            \"meta\",\n                            \"content\",\n                            hoistableRoot\n                          ).get(flags + (current.content || \"\")))\n                        )\n                          for (i = 0; i < maybeNodes.length; i++)\n                            if (\n                              ((currentResource = maybeNodes[i]),\n                              checkAttributeStringCoercion(\n                                current.content,\n                                \"content\"\n                              ),\n                              currentResource.getAttribute(\"content\") ===\n                                (null == current.content\n                                  ? null\n                                  : \"\" + current.content) &&\n                                currentResource.getAttribute(\"name\") ===\n                                  (null == current.name\n                                    ? null\n                                    : current.name) &&\n                                currentResource.getAttribute(\"property\") ===\n                                  (null == current.property\n                                    ? null\n                                    : current.property) &&\n                                currentResource.getAttribute(\"http-equiv\") ===\n                                  (null == current.httpEquiv\n                                    ? null\n                                    : current.httpEquiv) &&\n                                currentResource.getAttribute(\"charset\") ===\n                                  (null == current.charSet\n                                    ? null\n                                    : current.charSet))\n                            ) {\n                              maybeNodes.splice(i, 1);\n                              break b;\n                            }\n                        currentResource = hoistableRoot.createElement(flags);\n                        setInitialProperties(currentResource, flags, current);\n                        hoistableRoot.head.appendChild(currentResource);\n                        break;\n                      default:\n                        throw Error(\n                          'getNodesForType encountered a type it did not expect: \"' +\n                            flags +\n                            '\". This is a bug in React.'\n                        );\n                    }\n                    currentResource[internalInstanceKey] = finishedWork;\n                    markNodeAsHoistable(currentResource);\n                    flags = currentResource;\n                  }\n                  finishedWork.stateNode = flags;\n                } else\n                  mountHoistable(\n                    hoistableRoot,\n                    finishedWork.type,\n                    finishedWork.stateNode\n                  );\n              else\n                finishedWork.stateNode = acquireResource(\n                  hoistableRoot,\n                  flags,\n                  finishedWork.memoizedProps\n                );\n            else\n              currentResource !== flags\n                ? (null === currentResource\n                    ? null !== current.stateNode &&\n                      ((current = current.stateNode),\n                      current.parentNode.removeChild(current))\n                    : currentResource.count--,\n                  null === flags\n                    ? mountHoistable(\n                        hoistableRoot,\n                        finishedWork.type,\n                        finishedWork.stateNode\n                      )\n                    : acquireResource(\n                        hoistableRoot,\n                        flags,\n                        finishedWork.memoizedProps\n                      ))\n                : null === flags &&\n                  null !== finishedWork.stateNode &&\n                  commitHostUpdate(\n                    finishedWork,\n                    finishedWork.memoizedProps,\n                    current.memoizedProps\n                  );\n          }\n          break;\n        case 27:\n          recursivelyTraverseMutationEffects(root, finishedWork);\n          commitReconciliationEffects(finishedWork);\n          flags & 512 &&\n            (offscreenSubtreeWasHidden ||\n              null === current ||\n              safelyDetachRef(current, current.return));\n          null !== current &&\n            flags & 4 &&\n            commitHostUpdate(\n              finishedWork,\n              finishedWork.memoizedProps,\n              current.memoizedProps\n            );\n          break;\n        case 5:\n          recursivelyTraverseMutationEffects(root, finishedWork);\n          commitReconciliationEffects(finishedWork);\n          flags & 512 &&\n            (offscreenSubtreeWasHidden ||\n              null === current ||\n              safelyDetachRef(current, current.return));\n          if (finishedWork.flags & 32) {\n            hoistableRoot = finishedWork.stateNode;\n            try {\n              runWithFiberInDEV(finishedWork, resetTextContent, hoistableRoot);\n            } catch (error) {\n              captureCommitPhaseError(finishedWork, finishedWork.return, error);\n            }\n          }\n          flags & 4 &&\n            null != finishedWork.stateNode &&\n            ((hoistableRoot = finishedWork.memoizedProps),\n            commitHostUpdate(\n              finishedWork,\n              hoistableRoot,\n              null !== current ? current.memoizedProps : hoistableRoot\n            ));\n          flags & 1024 &&\n            ((needsFormReset = !0),\n            \"form\" !== finishedWork.type &&\n              console.error(\n                \"Unexpected host component type. Expected a form. This is a bug in React.\"\n              ));\n          break;\n        case 6:\n          recursivelyTraverseMutationEffects(root, finishedWork);\n          commitReconciliationEffects(finishedWork);\n          if (flags & 4) {\n            if (null === finishedWork.stateNode)\n              throw Error(\n                \"This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.\"\n              );\n            flags = finishedWork.memoizedProps;\n            current = null !== current ? current.memoizedProps : flags;\n            hoistableRoot = finishedWork.stateNode;\n            try {\n              runWithFiberInDEV(\n                finishedWork,\n                commitTextUpdate,\n                hoistableRoot,\n                current,\n                flags\n              );\n            } catch (error) {\n              captureCommitPhaseError(finishedWork, finishedWork.return, error);\n            }\n          }\n          break;\n        case 3:\n          hoistableRoot = pushNestedEffectDurations();\n          tagCaches = null;\n          currentResource = currentHoistableRoot;\n          currentHoistableRoot = getHoistableRoot(root.containerInfo);\n          recursivelyTraverseMutationEffects(root, finishedWork);\n          currentHoistableRoot = currentResource;\n          commitReconciliationEffects(finishedWork);\n          if (\n            flags & 4 &&\n            null !== current &&\n            current.memoizedState.isDehydrated\n          )\n            try {\n              runWithFiberInDEV(\n                finishedWork,\n                commitHydratedContainer,\n                root.containerInfo\n              );\n            } catch (error) {\n              captureCommitPhaseError(finishedWork, finishedWork.return, error);\n            }\n          needsFormReset &&\n            ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n          root.effectDuration += popNestedEffectDurations(hoistableRoot);\n          break;\n        case 4:\n          flags = currentHoistableRoot;\n          currentHoistableRoot = getHoistableRoot(\n            finishedWork.stateNode.containerInfo\n          );\n          recursivelyTraverseMutationEffects(root, finishedWork);\n          commitReconciliationEffects(finishedWork);\n          currentHoistableRoot = flags;\n          break;\n        case 12:\n          flags = pushNestedEffectDurations();\n          recursivelyTraverseMutationEffects(root, finishedWork);\n          commitReconciliationEffects(finishedWork);\n          finishedWork.stateNode.effectDuration +=\n            bubbleNestedEffectDurations(flags);\n          break;\n        case 31:\n          recursivelyTraverseMutationEffects(root, finishedWork);\n          commitReconciliationEffects(finishedWork);\n          flags & 4 &&\n            ((flags = finishedWork.updateQueue),\n            null !== flags &&\n              ((finishedWork.updateQueue = null),\n              attachSuspenseRetryListeners(finishedWork, flags)));\n          break;\n        case 13:\n          recursivelyTraverseMutationEffects(root, finishedWork);\n          commitReconciliationEffects(finishedWork);\n          finishedWork.child.flags & 8192 &&\n            (null !== finishedWork.memoizedState) !==\n              (null !== current && null !== current.memoizedState) &&\n            (globalMostRecentFallbackTime = now$1());\n          flags & 4 &&\n            ((flags = finishedWork.updateQueue),\n            null !== flags &&\n              ((finishedWork.updateQueue = null),\n              attachSuspenseRetryListeners(finishedWork, flags)));\n          break;\n        case 22:\n          hoistableRoot = null !== finishedWork.memoizedState;\n          var wasHidden = null !== current && null !== current.memoizedState,\n            prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n            prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n          offscreenSubtreeIsHidden =\n            prevOffscreenSubtreeIsHidden || hoistableRoot;\n          offscreenSubtreeWasHidden =\n            prevOffscreenSubtreeWasHidden || wasHidden;\n          recursivelyTraverseMutationEffects(root, finishedWork);\n          offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n          offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n          commitReconciliationEffects(finishedWork);\n          if (flags & 8192)\n            a: for (\n              root = finishedWork.stateNode,\n                root._visibility = hoistableRoot\n                  ? root._visibility & ~OffscreenVisible\n                  : root._visibility | OffscreenVisible,\n                hoistableRoot &&\n                  (null === current ||\n                    wasHidden ||\n                    offscreenSubtreeIsHidden ||\n                    offscreenSubtreeWasHidden ||\n                    recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n                current = null,\n                root = finishedWork;\n              ;\n\n            ) {\n              if (5 === root.tag || 26 === root.tag) {\n                if (null === current) {\n                  wasHidden = current = root;\n                  try {\n                    (currentResource = wasHidden.stateNode),\n                      hoistableRoot\n                        ? runWithFiberInDEV(\n                            wasHidden,\n                            hideInstance,\n                            currentResource\n                          )\n                        : runWithFiberInDEV(\n                            wasHidden,\n                            unhideInstance,\n                            wasHidden.stateNode,\n                            wasHidden.memoizedProps\n                          );\n                  } catch (error) {\n                    captureCommitPhaseError(wasHidden, wasHidden.return, error);\n                  }\n                }\n              } else if (6 === root.tag) {\n                if (null === current) {\n                  wasHidden = root;\n                  try {\n                    (maybeNodes = wasHidden.stateNode),\n                      hoistableRoot\n                        ? runWithFiberInDEV(\n                            wasHidden,\n                            hideTextInstance,\n                            maybeNodes\n                          )\n                        : runWithFiberInDEV(\n                            wasHidden,\n                            unhideTextInstance,\n                            maybeNodes,\n                            wasHidden.memoizedProps\n                          );\n                  } catch (error) {\n                    captureCommitPhaseError(wasHidden, wasHidden.return, error);\n                  }\n                }\n              } else if (18 === root.tag) {\n                if (null === current) {\n                  wasHidden = root;\n                  try {\n                    (i = wasHidden.stateNode),\n                      hoistableRoot\n                        ? runWithFiberInDEV(\n                            wasHidden,\n                            hideDehydratedBoundary,\n                            i\n                          )\n                        : runWithFiberInDEV(\n                            wasHidden,\n                            unhideDehydratedBoundary,\n                            wasHidden.stateNode\n                          );\n                  } catch (error) {\n                    captureCommitPhaseError(wasHidden, wasHidden.return, error);\n                  }\n                }\n              } else if (\n                ((22 !== root.tag && 23 !== root.tag) ||\n                  null === root.memoizedState ||\n                  root === finishedWork) &&\n                null !== root.child\n              ) {\n                root.child.return = root;\n                root = root.child;\n                continue;\n              }\n              if (root === finishedWork) break a;\n              for (; null === root.sibling; ) {\n                if (null === root.return || root.return === finishedWork)\n                  break a;\n                current === root && (current = null);\n                root = root.return;\n              }\n              current === root && (current = null);\n              root.sibling.return = root.return;\n              root = root.sibling;\n            }\n          flags & 4 &&\n            ((flags = finishedWork.updateQueue),\n            null !== flags &&\n              ((current = flags.retryQueue),\n              null !== current &&\n                ((flags.retryQueue = null),\n                attachSuspenseRetryListeners(finishedWork, current))));\n          break;\n        case 19:\n          recursivelyTraverseMutationEffects(root, finishedWork);\n          commitReconciliationEffects(finishedWork);\n          flags & 4 &&\n            ((flags = finishedWork.updateQueue),\n            null !== flags &&\n              ((finishedWork.updateQueue = null),\n              attachSuspenseRetryListeners(finishedWork, flags)));\n          break;\n        case 30:\n          break;\n        case 21:\n          break;\n        default:\n          recursivelyTraverseMutationEffects(root, finishedWork),\n            commitReconciliationEffects(finishedWork);\n      }\n      popComponentEffectStart(prevEffectStart);\n    }\n    function commitReconciliationEffects(finishedWork) {\n      var flags = finishedWork.flags;\n      if (flags & 2) {\n        try {\n          runWithFiberInDEV(finishedWork, commitPlacement, finishedWork);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n        finishedWork.flags &= -3;\n      }\n      flags & 4096 && (finishedWork.flags &= -4097);\n    }\n    function recursivelyResetForms(parentFiber) {\n      if (parentFiber.subtreeFlags & 1024)\n        for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n          var fiber = parentFiber;\n          recursivelyResetForms(fiber);\n          5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n          parentFiber = parentFiber.sibling;\n        }\n    }\n    function recursivelyTraverseLayoutEffects(root, parentFiber) {\n      if (parentFiber.subtreeFlags & 8772)\n        for (parentFiber = parentFiber.child; null !== parentFiber; )\n          commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n            (parentFiber = parentFiber.sibling);\n    }\n    function disappearLayoutEffects(finishedWork) {\n      var prevEffectStart = pushComponentEffectStart();\n      switch (finishedWork.tag) {\n        case 0:\n        case 11:\n        case 14:\n        case 15:\n          commitHookLayoutUnmountEffects(\n            finishedWork,\n            finishedWork.return,\n            Layout\n          );\n          recursivelyTraverseDisappearLayoutEffects(finishedWork);\n          break;\n        case 1:\n          safelyDetachRef(finishedWork, finishedWork.return);\n          var instance = finishedWork.stateNode;\n          \"function\" === typeof instance.componentWillUnmount &&\n            safelyCallComponentWillUnmount(\n              finishedWork,\n              finishedWork.return,\n              instance\n            );\n          recursivelyTraverseDisappearLayoutEffects(finishedWork);\n          break;\n        case 27:\n          runWithFiberInDEV(\n            finishedWork,\n            releaseSingletonInstance,\n            finishedWork.stateNode\n          );\n        case 26:\n        case 5:\n          safelyDetachRef(finishedWork, finishedWork.return);\n          recursivelyTraverseDisappearLayoutEffects(finishedWork);\n          break;\n        case 22:\n          null === finishedWork.memoizedState &&\n            recursivelyTraverseDisappearLayoutEffects(finishedWork);\n          break;\n        case 30:\n          recursivelyTraverseDisappearLayoutEffects(finishedWork);\n          break;\n        default:\n          recursivelyTraverseDisappearLayoutEffects(finishedWork);\n      }\n      popComponentEffectStart(prevEffectStart);\n    }\n    function recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n      for (parentFiber = parentFiber.child; null !== parentFiber; )\n        disappearLayoutEffects(parentFiber),\n          (parentFiber = parentFiber.sibling);\n    }\n    function reappearLayoutEffects(\n      finishedRoot,\n      current,\n      finishedWork,\n      includeWorkInProgressEffects\n    ) {\n      var prevEffectStart = pushComponentEffectStart(),\n        flags = finishedWork.flags;\n      switch (finishedWork.tag) {\n        case 0:\n        case 11:\n        case 15:\n          recursivelyTraverseReappearLayoutEffects(\n            finishedRoot,\n            finishedWork,\n            includeWorkInProgressEffects\n          );\n          commitHookLayoutEffects(finishedWork, Layout);\n          break;\n        case 1:\n          recursivelyTraverseReappearLayoutEffects(\n            finishedRoot,\n            finishedWork,\n            includeWorkInProgressEffects\n          );\n          current = finishedWork.stateNode;\n          \"function\" === typeof current.componentDidMount &&\n            runWithFiberInDEV(\n              finishedWork,\n              callComponentDidMountInDEV,\n              finishedWork,\n              current\n            );\n          current = finishedWork.updateQueue;\n          if (null !== current) {\n            finishedRoot = finishedWork.stateNode;\n            try {\n              runWithFiberInDEV(\n                finishedWork,\n                commitHiddenCallbacks,\n                current,\n                finishedRoot\n              );\n            } catch (error) {\n              captureCommitPhaseError(finishedWork, finishedWork.return, error);\n            }\n          }\n          includeWorkInProgressEffects &&\n            flags & 64 &&\n            commitClassCallbacks(finishedWork);\n          safelyAttachRef(finishedWork, finishedWork.return);\n          break;\n        case 27:\n          commitHostSingletonAcquisition(finishedWork);\n        case 26:\n        case 5:\n          recursivelyTraverseReappearLayoutEffects(\n            finishedRoot,\n            finishedWork,\n            includeWorkInProgressEffects\n          );\n          includeWorkInProgressEffects &&\n            null === current &&\n            flags & 4 &&\n            commitHostMount(finishedWork);\n          safelyAttachRef(finishedWork, finishedWork.return);\n          break;\n        case 12:\n          if (includeWorkInProgressEffects && flags & 4) {\n            flags = pushNestedEffectDurations();\n            recursivelyTraverseReappearLayoutEffects(\n              finishedRoot,\n              finishedWork,\n              includeWorkInProgressEffects\n            );\n            includeWorkInProgressEffects = finishedWork.stateNode;\n            includeWorkInProgressEffects.effectDuration +=\n              bubbleNestedEffectDurations(flags);\n            try {\n              runWithFiberInDEV(\n                finishedWork,\n                commitProfiler,\n                finishedWork,\n                current,\n                commitStartTime,\n                includeWorkInProgressEffects.effectDuration\n              );\n            } catch (error) {\n              captureCommitPhaseError(finishedWork, finishedWork.return, error);\n            }\n          } else\n            recursivelyTraverseReappearLayoutEffects(\n              finishedRoot,\n              finishedWork,\n              includeWorkInProgressEffects\n            );\n          break;\n        case 31:\n          recursivelyTraverseReappearLayoutEffects(\n            finishedRoot,\n            finishedWork,\n            includeWorkInProgressEffects\n          );\n          includeWorkInProgressEffects &&\n            flags & 4 &&\n            commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n          break;\n        case 13:\n          recursivelyTraverseReappearLayoutEffects(\n            finishedRoot,\n            finishedWork,\n            includeWorkInProgressEffects\n          );\n          includeWorkInProgressEffects &&\n            flags & 4 &&\n            commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n          break;\n        case 22:\n          null === finishedWork.memoizedState &&\n            recursivelyTraverseReappearLayoutEffects(\n              finishedRoot,\n              finishedWork,\n              includeWorkInProgressEffects\n            );\n          safelyAttachRef(finishedWork, finishedWork.return);\n          break;\n        case 30:\n          break;\n        default:\n          recursivelyTraverseReappearLayoutEffects(\n            finishedRoot,\n            finishedWork,\n            includeWorkInProgressEffects\n          );\n      }\n      popComponentEffectStart(prevEffectStart);\n    }\n    function recursivelyTraverseReappearLayoutEffects(\n      finishedRoot,\n      parentFiber,\n      includeWorkInProgressEffects\n    ) {\n      includeWorkInProgressEffects =\n        includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n      for (parentFiber = parentFiber.child; null !== parentFiber; )\n        reappearLayoutEffects(\n          finishedRoot,\n          parentFiber.alternate,\n          parentFiber,\n          includeWorkInProgressEffects\n        ),\n          (parentFiber = parentFiber.sibling);\n    }\n    function commitOffscreenPassiveMountEffects(current, finishedWork) {\n      var previousCache = null;\n      null !== current &&\n        null !== current.memoizedState &&\n        null !== current.memoizedState.cachePool &&\n        (previousCache = current.memoizedState.cachePool.pool);\n      current = null;\n      null !== finishedWork.memoizedState &&\n        null !== finishedWork.memoizedState.cachePool &&\n        (current = finishedWork.memoizedState.cachePool.pool);\n      current !== previousCache &&\n        (null != current && retainCache(current),\n        null != previousCache && releaseCache(previousCache));\n    }\n    function commitCachePassiveMountEffect(current, finishedWork) {\n      current = null;\n      null !== finishedWork.alternate &&\n        (current = finishedWork.alternate.memoizedState.cache);\n      finishedWork = finishedWork.memoizedState.cache;\n      finishedWork !== current &&\n        (retainCache(finishedWork), null != current && releaseCache(current));\n    }\n    function recursivelyTraversePassiveMountEffects(\n      root,\n      parentFiber,\n      committedLanes,\n      committedTransitions\n    ) {\n      if (parentFiber.subtreeFlags & 10256)\n        for (parentFiber = parentFiber.child; null !== parentFiber; )\n          commitPassiveMountOnFiber(\n            root,\n            parentFiber,\n            committedLanes,\n            committedTransitions\n          ),\n            (parentFiber = parentFiber.sibling);\n    }\n    function commitPassiveMountOnFiber(\n      finishedRoot,\n      finishedWork,\n      committedLanes,\n      committedTransitions\n    ) {\n      var prevEffectStart = pushComponentEffectStart(),\n        flags = finishedWork.flags;\n      switch (finishedWork.tag) {\n        case 0:\n        case 11:\n        case 15:\n          recursivelyTraversePassiveMountEffects(\n            finishedRoot,\n            finishedWork,\n            committedLanes,\n            committedTransitions\n          );\n          flags & 2048 &&\n            commitHookPassiveMountEffects(finishedWork, Passive | HasEffect);\n          break;\n        case 1:\n          recursivelyTraversePassiveMountEffects(\n            finishedRoot,\n            finishedWork,\n            committedLanes,\n            committedTransitions\n          );\n          break;\n        case 3:\n          var prevProfilerEffectDuration = pushNestedEffectDurations();\n          recursivelyTraversePassiveMountEffects(\n            finishedRoot,\n            finishedWork,\n            committedLanes,\n            committedTransitions\n          );\n          flags & 2048 &&\n            ((committedLanes = null),\n            null !== finishedWork.alternate &&\n              (committedLanes = finishedWork.alternate.memoizedState.cache),\n            (finishedWork = finishedWork.memoizedState.cache),\n            finishedWork !== committedLanes &&\n              (retainCache(finishedWork),\n              null != committedLanes && releaseCache(committedLanes)));\n          finishedRoot.passiveEffectDuration += popNestedEffectDurations(\n            prevProfilerEffectDuration\n          );\n          break;\n        case 12:\n          if (flags & 2048) {\n            flags = pushNestedEffectDurations();\n            recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            );\n            finishedRoot = finishedWork.stateNode;\n            finishedRoot.passiveEffectDuration +=\n              bubbleNestedEffectDurations(flags);\n            try {\n              runWithFiberInDEV(\n                finishedWork,\n                commitProfilerPostCommitImpl,\n                finishedWork,\n                finishedWork.alternate,\n                commitStartTime,\n                finishedRoot.passiveEffectDuration\n              );\n            } catch (error) {\n              captureCommitPhaseError(finishedWork, finishedWork.return, error);\n            }\n          } else\n            recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            );\n          break;\n        case 31:\n          recursivelyTraversePassiveMountEffects(\n            finishedRoot,\n            finishedWork,\n            committedLanes,\n            committedTransitions\n          );\n          break;\n        case 13:\n          recursivelyTraversePassiveMountEffects(\n            finishedRoot,\n            finishedWork,\n            committedLanes,\n            committedTransitions\n          );\n          break;\n        case 23:\n          break;\n        case 22:\n          prevProfilerEffectDuration = finishedWork.stateNode;\n          var _current = finishedWork.alternate;\n          null !== finishedWork.memoizedState\n            ? prevProfilerEffectDuration._visibility &\n              OffscreenPassiveEffectsConnected\n              ? recursivelyTraversePassiveMountEffects(\n                  finishedRoot,\n                  finishedWork,\n                  committedLanes,\n                  committedTransitions\n                )\n              : recursivelyTraverseAtomicPassiveEffects(\n                  finishedRoot,\n                  finishedWork\n                )\n            : prevProfilerEffectDuration._visibility &\n                OffscreenPassiveEffectsConnected\n              ? recursivelyTraversePassiveMountEffects(\n                  finishedRoot,\n                  finishedWork,\n                  committedLanes,\n                  committedTransitions\n                )\n              : ((prevProfilerEffectDuration._visibility |=\n                  OffscreenPassiveEffectsConnected),\n                recursivelyTraverseReconnectPassiveEffects(\n                  finishedRoot,\n                  finishedWork,\n                  committedLanes,\n                  committedTransitions,\n                  0 !== (finishedWork.subtreeFlags & 10256)\n                ));\n          flags & 2048 &&\n            commitOffscreenPassiveMountEffects(_current, finishedWork);\n          break;\n        case 24:\n          recursivelyTraversePassiveMountEffects(\n            finishedRoot,\n            finishedWork,\n            committedLanes,\n            committedTransitions\n          );\n          flags & 2048 &&\n            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n          break;\n        default:\n          recursivelyTraversePassiveMountEffects(\n            finishedRoot,\n            finishedWork,\n            committedLanes,\n            committedTransitions\n          );\n      }\n      popComponentEffectStart(prevEffectStart);\n    }\n    function recursivelyTraverseReconnectPassiveEffects(\n      finishedRoot,\n      parentFiber,\n      committedLanes,\n      committedTransitions,\n      includeWorkInProgressEffects\n    ) {\n      includeWorkInProgressEffects =\n        includeWorkInProgressEffects &&\n        0 !== (parentFiber.subtreeFlags & 10256);\n      for (parentFiber = parentFiber.child; null !== parentFiber; )\n        reconnectPassiveEffects(\n          finishedRoot,\n          parentFiber,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        ),\n          (parentFiber = parentFiber.sibling);\n    }\n    function reconnectPassiveEffects(\n      finishedRoot,\n      finishedWork,\n      committedLanes,\n      committedTransitions,\n      includeWorkInProgressEffects\n    ) {\n      var prevEffectStart = pushComponentEffectStart(),\n        flags = finishedWork.flags;\n      switch (finishedWork.tag) {\n        case 0:\n        case 11:\n        case 15:\n          recursivelyTraverseReconnectPassiveEffects(\n            finishedRoot,\n            finishedWork,\n            committedLanes,\n            committedTransitions,\n            includeWorkInProgressEffects\n          );\n          commitHookPassiveMountEffects(finishedWork, Passive);\n          break;\n        case 23:\n          break;\n        case 22:\n          var _instance2 = finishedWork.stateNode;\n          null !== finishedWork.memoizedState\n            ? _instance2._visibility & OffscreenPassiveEffectsConnected\n              ? recursivelyTraverseReconnectPassiveEffects(\n                  finishedRoot,\n                  finishedWork,\n                  committedLanes,\n                  committedTransitions,\n                  includeWorkInProgressEffects\n                )\n              : recursivelyTraverseAtomicPassiveEffects(\n                  finishedRoot,\n                  finishedWork\n                )\n            : ((_instance2._visibility |= OffscreenPassiveEffectsConnected),\n              recursivelyTraverseReconnectPassiveEffects(\n                finishedRoot,\n                finishedWork,\n                committedLanes,\n                committedTransitions,\n                includeWorkInProgressEffects\n              ));\n          includeWorkInProgressEffects &&\n            flags & 2048 &&\n            commitOffscreenPassiveMountEffects(\n              finishedWork.alternate,\n              finishedWork\n            );\n          break;\n        case 24:\n          recursivelyTraverseReconnectPassiveEffects(\n            finishedRoot,\n            finishedWork,\n            committedLanes,\n            committedTransitions,\n            includeWorkInProgressEffects\n          );\n          includeWorkInProgressEffects &&\n            flags & 2048 &&\n            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n          break;\n        default:\n          recursivelyTraverseReconnectPassiveEffects(\n            finishedRoot,\n            finishedWork,\n            committedLanes,\n            committedTransitions,\n            includeWorkInProgressEffects\n          );\n      }\n      popComponentEffectStart(prevEffectStart);\n    }\n    function recursivelyTraverseAtomicPassiveEffects(\n      finishedRoot$jscomp$0,\n      parentFiber\n    ) {\n      if (parentFiber.subtreeFlags & 10256)\n        for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n          var finishedRoot = finishedRoot$jscomp$0,\n            finishedWork = parentFiber,\n            flags = finishedWork.flags;\n          switch (finishedWork.tag) {\n            case 22:\n              recursivelyTraverseAtomicPassiveEffects(\n                finishedRoot,\n                finishedWork\n              );\n              flags & 2048 &&\n                commitOffscreenPassiveMountEffects(\n                  finishedWork.alternate,\n                  finishedWork\n                );\n              break;\n            case 24:\n              recursivelyTraverseAtomicPassiveEffects(\n                finishedRoot,\n                finishedWork\n              );\n              flags & 2048 &&\n                commitCachePassiveMountEffect(\n                  finishedWork.alternate,\n                  finishedWork\n                );\n              break;\n            default:\n              recursivelyTraverseAtomicPassiveEffects(\n                finishedRoot,\n                finishedWork\n              );\n          }\n          parentFiber = parentFiber.sibling;\n        }\n    }\n    function recursivelyAccumulateSuspenseyCommit(parentFiber) {\n      if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n        for (parentFiber = parentFiber.child; null !== parentFiber; )\n          accumulateSuspenseyCommitOnFiber(parentFiber),\n            (parentFiber = parentFiber.sibling);\n    }\n    function accumulateSuspenseyCommitOnFiber(fiber) {\n      switch (fiber.tag) {\n        case 26:\n          recursivelyAccumulateSuspenseyCommit(fiber);\n          fiber.flags & suspenseyCommitFlag &&\n            null !== fiber.memoizedState &&\n            suspendResource(\n              currentHoistableRoot,\n              fiber.memoizedState,\n              fiber.memoizedProps\n            );\n          break;\n        case 5:\n          recursivelyAccumulateSuspenseyCommit(fiber);\n          break;\n        case 3:\n        case 4:\n          var previousHoistableRoot = currentHoistableRoot;\n          currentHoistableRoot = getHoistableRoot(\n            fiber.stateNode.containerInfo\n          );\n          recursivelyAccumulateSuspenseyCommit(fiber);\n          currentHoistableRoot = previousHoistableRoot;\n          break;\n        case 22:\n          null === fiber.memoizedState &&\n            ((previousHoistableRoot = fiber.alternate),\n            null !== previousHoistableRoot &&\n            null !== previousHoistableRoot.memoizedState\n              ? ((previousHoistableRoot = suspenseyCommitFlag),\n                (suspenseyCommitFlag = 16777216),\n                recursivelyAccumulateSuspenseyCommit(fiber),\n                (suspenseyCommitFlag = previousHoistableRoot))\n              : recursivelyAccumulateSuspenseyCommit(fiber));\n          break;\n        default:\n          recursivelyAccumulateSuspenseyCommit(fiber);\n      }\n    }\n    function detachAlternateSiblings(parentFiber) {\n      var previousFiber = parentFiber.alternate;\n      if (\n        null !== previousFiber &&\n        ((parentFiber = previousFiber.child), null !== parentFiber)\n      ) {\n        previousFiber.child = null;\n        do\n          (previousFiber = parentFiber.sibling),\n            (parentFiber.sibling = null),\n            (parentFiber = previousFiber);\n        while (null !== parentFiber);\n      }\n    }\n    function recursivelyTraversePassiveUnmountEffects(parentFiber) {\n      var deletions = parentFiber.deletions;\n      if (0 !== (parentFiber.flags & 16)) {\n        if (null !== deletions)\n          for (var i = 0; i < deletions.length; i++) {\n            var childToDelete = deletions[i],\n              prevEffectStart = pushComponentEffectStart();\n            nextEffect = childToDelete;\n            commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n              childToDelete,\n              parentFiber\n            );\n            popComponentEffectStart(prevEffectStart);\n          }\n        detachAlternateSiblings(parentFiber);\n      }\n      if (parentFiber.subtreeFlags & 10256)\n        for (parentFiber = parentFiber.child; null !== parentFiber; )\n          commitPassiveUnmountOnFiber(parentFiber),\n            (parentFiber = parentFiber.sibling);\n    }\n    function commitPassiveUnmountOnFiber(finishedWork) {\n      var prevEffectStart = pushComponentEffectStart();\n      switch (finishedWork.tag) {\n        case 0:\n        case 11:\n        case 15:\n          recursivelyTraversePassiveUnmountEffects(finishedWork);\n          finishedWork.flags & 2048 &&\n            commitHookPassiveUnmountEffects(\n              finishedWork,\n              finishedWork.return,\n              Passive | HasEffect\n            );\n          break;\n        case 3:\n          var prevProfilerEffectDuration = pushNestedEffectDurations();\n          recursivelyTraversePassiveUnmountEffects(finishedWork);\n          finishedWork.stateNode.passiveEffectDuration +=\n            popNestedEffectDurations(prevProfilerEffectDuration);\n          break;\n        case 12:\n          prevProfilerEffectDuration = pushNestedEffectDurations();\n          recursivelyTraversePassiveUnmountEffects(finishedWork);\n          finishedWork.stateNode.passiveEffectDuration +=\n            bubbleNestedEffectDurations(prevProfilerEffectDuration);\n          break;\n        case 22:\n          prevProfilerEffectDuration = finishedWork.stateNode;\n          null !== finishedWork.memoizedState &&\n          prevProfilerEffectDuration._visibility &\n            OffscreenPassiveEffectsConnected &&\n          (null === finishedWork.return || 13 !== finishedWork.return.tag)\n            ? ((prevProfilerEffectDuration._visibility &=\n                ~OffscreenPassiveEffectsConnected),\n              recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n            : recursivelyTraversePassiveUnmountEffects(finishedWork);\n          break;\n        default:\n          recursivelyTraversePassiveUnmountEffects(finishedWork);\n      }\n      popComponentEffectStart(prevEffectStart);\n    }\n    function recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n      var deletions = parentFiber.deletions;\n      if (0 !== (parentFiber.flags & 16)) {\n        if (null !== deletions)\n          for (var i = 0; i < deletions.length; i++) {\n            var childToDelete = deletions[i],\n              prevEffectStart = pushComponentEffectStart();\n            nextEffect = childToDelete;\n            commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n              childToDelete,\n              parentFiber\n            );\n            popComponentEffectStart(prevEffectStart);\n          }\n        detachAlternateSiblings(parentFiber);\n      }\n      for (parentFiber = parentFiber.child; null !== parentFiber; )\n        disconnectPassiveEffect(parentFiber),\n          (parentFiber = parentFiber.sibling);\n    }\n    function disconnectPassiveEffect(finishedWork) {\n      var prevEffectStart = pushComponentEffectStart();\n      switch (finishedWork.tag) {\n        case 0:\n        case 11:\n        case 15:\n          commitHookPassiveUnmountEffects(\n            finishedWork,\n            finishedWork.return,\n            Passive\n          );\n          recursivelyTraverseDisconnectPassiveEffects(finishedWork);\n          break;\n        case 22:\n          var instance = finishedWork.stateNode;\n          instance._visibility & OffscreenPassiveEffectsConnected &&\n            ((instance._visibility &= ~OffscreenPassiveEffectsConnected),\n            recursivelyTraverseDisconnectPassiveEffects(finishedWork));\n          break;\n        default:\n          recursivelyTraverseDisconnectPassiveEffects(finishedWork);\n      }\n      popComponentEffectStart(prevEffectStart);\n    }\n    function commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n      deletedSubtreeRoot,\n      nearestMountedAncestor$jscomp$0\n    ) {\n      for (; null !== nextEffect; ) {\n        var fiber = nextEffect,\n          current = fiber,\n          nearestMountedAncestor = nearestMountedAncestor$jscomp$0,\n          prevEffectStart = pushComponentEffectStart();\n        switch (current.tag) {\n          case 0:\n          case 11:\n          case 15:\n            commitHookPassiveUnmountEffects(\n              current,\n              nearestMountedAncestor,\n              Passive\n            );\n            break;\n          case 23:\n          case 22:\n            null !== current.memoizedState &&\n              null !== current.memoizedState.cachePool &&\n              ((current = current.memoizedState.cachePool.pool),\n              null != current && retainCache(current));\n            break;\n          case 24:\n            releaseCache(current.memoizedState.cache);\n        }\n        popComponentEffectStart(prevEffectStart);\n        prevEffectStart = fiber.child;\n        if (null !== prevEffectStart)\n          (prevEffectStart.return = fiber), (nextEffect = prevEffectStart);\n        else\n          a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n            prevEffectStart = nextEffect;\n            current = prevEffectStart.sibling;\n            nearestMountedAncestor = prevEffectStart.return;\n            detachFiberAfterEffects(prevEffectStart);\n            if (prevEffectStart === fiber) {\n              nextEffect = null;\n              break a;\n            }\n            if (null !== current) {\n              current.return = nearestMountedAncestor;\n              nextEffect = current;\n              break a;\n            }\n            nextEffect = nearestMountedAncestor;\n          }\n      }\n    }\n    function onCommitRoot() {\n      commitHooks.forEach(function (commitHook) {\n        return commitHook();\n      });\n    }\n    function isConcurrentActEnvironment() {\n      var isReactActEnvironmentGlobal =\n        \"undefined\" !== typeof IS_REACT_ACT_ENVIRONMENT\n          ? IS_REACT_ACT_ENVIRONMENT\n          : void 0;\n      isReactActEnvironmentGlobal ||\n        null === ReactSharedInternals.actQueue ||\n        console.error(\n          \"The current testing environment is not configured to support act(...)\"\n        );\n      return isReactActEnvironmentGlobal;\n    }\n    function requestUpdateLane(fiber) {\n      if (\n        (executionContext & RenderContext) !== NoContext &&\n        0 !== workInProgressRootRenderLanes\n      )\n        return workInProgressRootRenderLanes & -workInProgressRootRenderLanes;\n      var transition = ReactSharedInternals.T;\n      return null !== transition\n        ? (transition._updatedFibers || (transition._updatedFibers = new Set()),\n          transition._updatedFibers.add(fiber),\n          requestTransitionLane())\n        : resolveUpdatePriority();\n    }\n    function requestDeferredLane() {\n      0 === workInProgressDeferredLane &&\n        (workInProgressDeferredLane =\n          0 === (workInProgressRootRenderLanes & 536870912) || isHydrating\n            ? claimNextTransitionLane()\n            : 536870912);\n      var suspenseHandler = suspenseHandlerStackCursor.current;\n      null !== suspenseHandler && (suspenseHandler.flags |= 32);\n      return workInProgressDeferredLane;\n    }\n    function scheduleUpdateOnFiber(root, fiber, lane) {\n      isRunningInsertionEffect &&\n        console.error(\"useInsertionEffect must not schedule updates.\");\n      isFlushingPassiveEffects && (didScheduleUpdateDuringPassiveEffects = !0);\n      if (\n        (root === workInProgressRoot &&\n          (workInProgressSuspendedReason === SuspendedOnData ||\n            workInProgressSuspendedReason === SuspendedOnAction)) ||\n        null !== root.cancelPendingCommit\n      )\n        prepareFreshStack(root, 0),\n          markRootSuspended(\n            root,\n            workInProgressRootRenderLanes,\n            workInProgressDeferredLane,\n            !1\n          );\n      markRootUpdated$1(root, lane);\n      if (\n        (executionContext & RenderContext) !== NoContext &&\n        root === workInProgressRoot\n      ) {\n        if (isRendering)\n          switch (fiber.tag) {\n            case 0:\n            case 11:\n            case 15:\n              root =\n                (workInProgress && getComponentNameFromFiber(workInProgress)) ||\n                \"Unknown\";\n              didWarnAboutUpdateInRenderForAnotherComponent.has(root) ||\n                (didWarnAboutUpdateInRenderForAnotherComponent.add(root),\n                (fiber = getComponentNameFromFiber(fiber) || \"Unknown\"),\n                console.error(\n                  \"Cannot update a component (`%s`) while rendering a different component (`%s`). To locate the bad setState() call inside `%s`, follow the stack trace as described in https://react.dev/link/setstate-in-render\",\n                  fiber,\n                  root,\n                  root\n                ));\n              break;\n            case 1:\n              didWarnAboutUpdateInRender ||\n                (console.error(\n                  \"Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state.\"\n                ),\n                (didWarnAboutUpdateInRender = !0));\n          }\n      } else\n        isDevToolsPresent && addFiberToLanesMap(root, fiber, lane),\n          warnIfUpdatesNotWrappedWithActDEV(fiber),\n          root === workInProgressRoot &&\n            ((executionContext & RenderContext) === NoContext &&\n              (workInProgressRootInterleavedUpdatedLanes |= lane),\n            workInProgressRootExitStatus === RootSuspendedWithDelay &&\n              markRootSuspended(\n                root,\n                workInProgressRootRenderLanes,\n                workInProgressDeferredLane,\n                !1\n              )),\n          ensureRootIsScheduled(root);\n    }\n    function performWorkOnRoot(root, lanes, forceSync) {\n      if ((executionContext & (RenderContext | CommitContext)) !== NoContext)\n        throw Error(\"Should not already be working.\");\n      var shouldTimeSlice =\n          (!forceSync &&\n            0 === (lanes & 124) &&\n            0 === (lanes & root.expiredLanes)) ||\n          checkIfRootIsPrerendering(root, lanes),\n        exitStatus = shouldTimeSlice\n          ? renderRootConcurrent(root, lanes)\n          : renderRootSync(root, lanes, !0),\n        renderWasConcurrent = shouldTimeSlice;\n      do {\n        if (exitStatus === RootInProgress) {\n          workInProgressRootIsPrerendering &&\n            !shouldTimeSlice &&\n            markRootSuspended(root, lanes, 0, !1);\n          break;\n        } else {\n          forceSync = root.current.alternate;\n          if (\n            renderWasConcurrent &&\n            !isRenderConsistentWithExternalStores(forceSync)\n          ) {\n            exitStatus = renderRootSync(root, lanes, !1);\n            renderWasConcurrent = !1;\n            continue;\n          }\n          if (exitStatus === RootErrored) {\n            renderWasConcurrent = lanes;\n            if (root.errorRecoveryDisabledLanes & renderWasConcurrent)\n              var errorRetryLanes = 0;\n            else\n              (errorRetryLanes = root.pendingLanes & -536870913),\n                (errorRetryLanes =\n                  0 !== errorRetryLanes\n                    ? errorRetryLanes\n                    : errorRetryLanes & 536870912\n                      ? 536870912\n                      : 0);\n            if (0 !== errorRetryLanes) {\n              lanes = errorRetryLanes;\n              a: {\n                exitStatus = root;\n                var errorRetryLanes$jscomp$0 = errorRetryLanes;\n                errorRetryLanes = workInProgressRootConcurrentErrors;\n                var wasRootDehydrated =\n                  exitStatus.current.memoizedState.isDehydrated;\n                wasRootDehydrated &&\n                  (prepareFreshStack(\n                    exitStatus,\n                    errorRetryLanes$jscomp$0\n                  ).flags |= 256);\n                errorRetryLanes$jscomp$0 = renderRootSync(\n                  exitStatus,\n                  errorRetryLanes$jscomp$0,\n                  !1\n                );\n                if (errorRetryLanes$jscomp$0 !== RootErrored) {\n                  if (\n                    workInProgressRootDidAttachPingListener &&\n                    !wasRootDehydrated\n                  ) {\n                    exitStatus.errorRecoveryDisabledLanes |=\n                      renderWasConcurrent;\n                    workInProgressRootInterleavedUpdatedLanes |=\n                      renderWasConcurrent;\n                    exitStatus = RootSuspendedWithDelay;\n                    break a;\n                  }\n                  exitStatus = workInProgressRootRecoverableErrors;\n                  workInProgressRootRecoverableErrors = errorRetryLanes;\n                  null !== exitStatus &&\n                    (null === workInProgressRootRecoverableErrors\n                      ? (workInProgressRootRecoverableErrors = exitStatus)\n                      : workInProgressRootRecoverableErrors.push.apply(\n                          workInProgressRootRecoverableErrors,\n                          exitStatus\n                        ));\n                }\n                exitStatus = errorRetryLanes$jscomp$0;\n              }\n              renderWasConcurrent = !1;\n              if (exitStatus !== RootErrored) continue;\n            }\n          }\n          if (exitStatus === RootFatalErrored) {\n            prepareFreshStack(root, 0);\n            markRootSuspended(root, lanes, 0, !0);\n            break;\n          }\n          a: {\n            shouldTimeSlice = root;\n            switch (exitStatus) {\n              case RootInProgress:\n              case RootFatalErrored:\n                throw Error(\"Root did not complete. This is a bug in React.\");\n              case RootSuspendedWithDelay:\n                if ((lanes & 4194048) !== lanes) break;\n              case RootSuspendedAtTheShell:\n                markRootSuspended(\n                  shouldTimeSlice,\n                  lanes,\n                  workInProgressDeferredLane,\n                  !workInProgressRootDidSkipSuspendedSiblings\n                );\n                break a;\n              case RootErrored:\n                workInProgressRootRecoverableErrors = null;\n                break;\n              case RootSuspended:\n              case RootCompleted:\n                break;\n              default:\n                throw Error(\"Unknown root exit status.\");\n            }\n            if (null !== ReactSharedInternals.actQueue)\n              commitRoot(\n                shouldTimeSlice,\n                forceSync,\n                lanes,\n                workInProgressRootRecoverableErrors,\n                workInProgressTransitions,\n                workInProgressRootDidIncludeRecursiveRenderUpdate,\n                workInProgressDeferredLane,\n                workInProgressRootInterleavedUpdatedLanes,\n                workInProgressSuspendedRetryLanes\n              );\n            else {\n              if (\n                (lanes & 62914560) === lanes &&\n                ((renderWasConcurrent =\n                  globalMostRecentFallbackTime +\n                  FALLBACK_THROTTLE_MS -\n                  now$1()),\n                10 < renderWasConcurrent)\n              ) {\n                markRootSuspended(\n                  shouldTimeSlice,\n                  lanes,\n                  workInProgressDeferredLane,\n                  !workInProgressRootDidSkipSuspendedSiblings\n                );\n                if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n                shouldTimeSlice.timeoutHandle = scheduleTimeout(\n                  commitRootWhenReady.bind(\n                    null,\n                    shouldTimeSlice,\n                    forceSync,\n                    workInProgressRootRecoverableErrors,\n                    workInProgressTransitions,\n                    workInProgressRootDidIncludeRecursiveRenderUpdate,\n                    lanes,\n                    workInProgressDeferredLane,\n                    workInProgressRootInterleavedUpdatedLanes,\n                    workInProgressSuspendedRetryLanes,\n                    workInProgressRootDidSkipSuspendedSiblings,\n                    exitStatus,\n                    THROTTLED_COMMIT,\n                    renderStartTime,\n                    0\n                  ),\n                  renderWasConcurrent\n                );\n                break a;\n              }\n              commitRootWhenReady(\n                shouldTimeSlice,\n                forceSync,\n                workInProgressRootRecoverableErrors,\n                workInProgressTransitions,\n                workInProgressRootDidIncludeRecursiveRenderUpdate,\n                lanes,\n                workInProgressDeferredLane,\n                workInProgressRootInterleavedUpdatedLanes,\n                workInProgressSuspendedRetryLanes,\n                workInProgressRootDidSkipSuspendedSiblings,\n                exitStatus,\n                IMMEDIATE_COMMIT,\n                renderStartTime,\n                0\n              );\n            }\n          }\n        }\n        break;\n      } while (1);\n      ensureRootIsScheduled(root);\n    }\n    function commitRootWhenReady(\n      root,\n      finishedWork,\n      recoverableErrors,\n      transitions,\n      didIncludeRenderPhaseUpdate,\n      lanes,\n      spawnedLane,\n      updatedLanes,\n      suspendedRetryLanes,\n      didSkipSuspendedSiblings,\n      exitStatus,\n      suspendedCommitReason,\n      completedRenderStartTime,\n      completedRenderEndTime\n    ) {\n      root.timeoutHandle = noTimeout;\n      suspendedCommitReason = finishedWork.subtreeFlags;\n      if (\n        suspendedCommitReason & 8192 ||\n        16785408 === (suspendedCommitReason & 16785408)\n      )\n        if (\n          ((suspendedState = {\n            stylesheets: null,\n            count: 0,\n            unsuspend: noop$1\n          }),\n          accumulateSuspenseyCommitOnFiber(finishedWork),\n          (suspendedCommitReason = waitForCommitToBeReady()),\n          null !== suspendedCommitReason)\n        ) {\n          root.cancelPendingCommit = suspendedCommitReason(\n            commitRoot.bind(\n              null,\n              root,\n              finishedWork,\n              lanes,\n              recoverableErrors,\n              transitions,\n              didIncludeRenderPhaseUpdate,\n              spawnedLane,\n              updatedLanes,\n              suspendedRetryLanes,\n              exitStatus,\n              SUSPENDED_COMMIT,\n              completedRenderStartTime,\n              completedRenderEndTime\n            )\n          );\n          markRootSuspended(\n            root,\n            lanes,\n            spawnedLane,\n            !didSkipSuspendedSiblings\n          );\n          return;\n        }\n      commitRoot(\n        root,\n        finishedWork,\n        lanes,\n        recoverableErrors,\n        transitions,\n        didIncludeRenderPhaseUpdate,\n        spawnedLane,\n        updatedLanes,\n        suspendedRetryLanes\n      );\n    }\n    function isRenderConsistentWithExternalStores(finishedWork) {\n      for (var node = finishedWork; ; ) {\n        var tag = node.tag;\n        if (\n          (0 === tag || 11 === tag || 15 === tag) &&\n          node.flags & 16384 &&\n          ((tag = node.updateQueue),\n          null !== tag && ((tag = tag.stores), null !== tag))\n        )\n          for (var i = 0; i < tag.length; i++) {\n            var check = tag[i],\n              getSnapshot = check.getSnapshot;\n            check = check.value;\n            try {\n              if (!objectIs(getSnapshot(), check)) return !1;\n            } catch (error) {\n              return !1;\n            }\n          }\n        tag = node.child;\n        if (node.subtreeFlags & 16384 && null !== tag)\n          (tag.return = node), (node = tag);\n        else {\n          if (node === finishedWork) break;\n          for (; null === node.sibling; ) {\n            if (null === node.return || node.return === finishedWork) return !0;\n            node = node.return;\n          }\n          node.sibling.return = node.return;\n          node = node.sibling;\n        }\n      }\n      return !0;\n    }\n    function markRootSuspended(\n      root,\n      suspendedLanes,\n      spawnedLane,\n      didAttemptEntireTree\n    ) {\n      suspendedLanes &= ~workInProgressRootPingedLanes;\n      suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n      root.suspendedLanes |= suspendedLanes;\n      root.pingedLanes &= ~suspendedLanes;\n      didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n      didAttemptEntireTree = root.expirationTimes;\n      for (var lanes = suspendedLanes; 0 < lanes; ) {\n        var index = 31 - clz32(lanes),\n          lane = 1 << index;\n        didAttemptEntireTree[index] = -1;\n        lanes &= ~lane;\n      }\n      0 !== spawnedLane &&\n        markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n    }\n    function flushSyncWork$1() {\n      return (executionContext & (RenderContext | CommitContext)) === NoContext\n        ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n        : !0;\n    }\n    function resetWorkInProgressStack() {\n      if (null !== workInProgress) {\n        if (workInProgressSuspendedReason === NotSuspended)\n          var interruptedWork = workInProgress.return;\n        else\n          (interruptedWork = workInProgress),\n            resetContextDependencies(),\n            resetHooksOnUnwind(interruptedWork),\n            (thenableState$1 = null),\n            (thenableIndexCounter$1 = 0),\n            (interruptedWork = workInProgress);\n        for (; null !== interruptedWork; )\n          unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n            (interruptedWork = interruptedWork.return);\n        workInProgress = null;\n      }\n    }\n    function prepareFreshStack(root, lanes) {\n      var timeoutHandle = root.timeoutHandle;\n      timeoutHandle !== noTimeout &&\n        ((root.timeoutHandle = noTimeout), cancelTimeout(timeoutHandle));\n      timeoutHandle = root.cancelPendingCommit;\n      null !== timeoutHandle &&\n        ((root.cancelPendingCommit = null), timeoutHandle());\n      resetWorkInProgressStack();\n      workInProgressRoot = root;\n      workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n      workInProgressRootRenderLanes = lanes;\n      workInProgressSuspendedReason = NotSuspended;\n      workInProgressThrownValue = null;\n      workInProgressRootDidSkipSuspendedSiblings = !1;\n      workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n      workInProgressRootDidAttachPingListener = !1;\n      workInProgressRootExitStatus = RootInProgress;\n      workInProgressSuspendedRetryLanes =\n        workInProgressDeferredLane =\n        workInProgressRootPingedLanes =\n        workInProgressRootInterleavedUpdatedLanes =\n        workInProgressRootSkippedLanes =\n          0;\n      workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n        null;\n      workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n      0 !== (lanes & 8) && (lanes |= lanes & 32);\n      var allEntangledLanes = root.entangledLanes;\n      if (0 !== allEntangledLanes)\n        for (\n          root = root.entanglements, allEntangledLanes &= lanes;\n          0 < allEntangledLanes;\n\n        ) {\n          var index = 31 - clz32(allEntangledLanes),\n            lane = 1 << index;\n          lanes |= root[index];\n          allEntangledLanes &= ~lane;\n        }\n      entangledRenderLanes = lanes;\n      finishQueueingConcurrentUpdates();\n      lanes = getCurrentTime();\n      1e3 < lanes - lastResetTime &&\n        ((ReactSharedInternals.recentlyCreatedOwnerStacks = 0),\n        (lastResetTime = lanes));\n      ReactStrictModeWarnings.discardPendingWarnings();\n      return timeoutHandle;\n    }\n    function handleThrow(root, thrownValue) {\n      currentlyRenderingFiber = null;\n      ReactSharedInternals.H = ContextOnlyDispatcher;\n      ReactSharedInternals.getCurrentStack = null;\n      isRendering = !1;\n      current = null;\n      thrownValue === SuspenseException ||\n      thrownValue === SuspenseActionException\n        ? ((thrownValue = getSuspendedThenable()),\n          (workInProgressSuspendedReason = SuspendedOnImmediate))\n        : thrownValue === SuspenseyCommitException\n          ? ((thrownValue = getSuspendedThenable()),\n            (workInProgressSuspendedReason = SuspendedOnInstance))\n          : (workInProgressSuspendedReason =\n              thrownValue === SelectiveHydrationException\n                ? SuspendedOnHydration\n                : null !== thrownValue &&\n                    \"object\" === typeof thrownValue &&\n                    \"function\" === typeof thrownValue.then\n                  ? SuspendedOnDeprecatedThrowPromise\n                  : SuspendedOnError);\n      workInProgressThrownValue = thrownValue;\n      var erroredWork = workInProgress;\n      if (null === erroredWork)\n        (workInProgressRootExitStatus = RootFatalErrored),\n          logUncaughtError(\n            root,\n            createCapturedValueAtFiber(thrownValue, root.current)\n          );\n      else\n        switch (\n          (erroredWork.mode & ProfileMode &&\n            stopProfilerTimerIfRunningAndRecordDuration(erroredWork),\n          markComponentRenderStopped(),\n          workInProgressSuspendedReason)\n        ) {\n          case SuspendedOnError:\n            null !== injectedProfilingHooks &&\n              \"function\" ===\n                typeof injectedProfilingHooks.markComponentErrored &&\n              injectedProfilingHooks.markComponentErrored(\n                erroredWork,\n                thrownValue,\n                workInProgressRootRenderLanes\n              );\n            break;\n          case SuspendedOnData:\n          case SuspendedOnAction:\n          case SuspendedOnImmediate:\n          case SuspendedOnDeprecatedThrowPromise:\n          case SuspendedAndReadyToContinue:\n            null !== injectedProfilingHooks &&\n              \"function\" ===\n                typeof injectedProfilingHooks.markComponentSuspended &&\n              injectedProfilingHooks.markComponentSuspended(\n                erroredWork,\n                thrownValue,\n                workInProgressRootRenderLanes\n              );\n        }\n    }\n    function shouldRemainOnPreviousScreen() {\n      var handler = suspenseHandlerStackCursor.current;\n      return null === handler\n        ? !0\n        : (workInProgressRootRenderLanes & 4194048) ===\n            workInProgressRootRenderLanes\n          ? null === shellBoundary\n            ? !0\n            : !1\n          : (workInProgressRootRenderLanes & 62914560) ===\n                workInProgressRootRenderLanes ||\n              0 !== (workInProgressRootRenderLanes & 536870912)\n            ? handler === shellBoundary\n            : !1;\n    }\n    function pushDispatcher() {\n      var prevDispatcher = ReactSharedInternals.H;\n      ReactSharedInternals.H = ContextOnlyDispatcher;\n      return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n    }\n    function pushAsyncDispatcher() {\n      var prevAsyncDispatcher = ReactSharedInternals.A;\n      ReactSharedInternals.A = DefaultAsyncDispatcher;\n      return prevAsyncDispatcher;\n    }\n    function renderDidSuspendDelayIfPossible() {\n      workInProgressRootExitStatus = RootSuspendedWithDelay;\n      workInProgressRootDidSkipSuspendedSiblings ||\n        ((workInProgressRootRenderLanes & 4194048) !==\n          workInProgressRootRenderLanes &&\n          null !== suspenseHandlerStackCursor.current) ||\n        (workInProgressRootIsPrerendering = !0);\n      (0 === (workInProgressRootSkippedLanes & 134217727) &&\n        0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n        null === workInProgressRoot ||\n        markRootSuspended(\n          workInProgressRoot,\n          workInProgressRootRenderLanes,\n          workInProgressDeferredLane,\n          !1\n        );\n    }\n    function renderRootSync(root, lanes, shouldYieldForPrerendering) {\n      var prevExecutionContext = executionContext;\n      executionContext |= RenderContext;\n      var prevDispatcher = pushDispatcher(),\n        prevAsyncDispatcher = pushAsyncDispatcher();\n      if (\n        workInProgressRoot !== root ||\n        workInProgressRootRenderLanes !== lanes\n      ) {\n        if (isDevToolsPresent) {\n          var memoizedUpdaters = root.memoizedUpdaters;\n          0 < memoizedUpdaters.size &&\n            (restorePendingUpdaters(root, workInProgressRootRenderLanes),\n            memoizedUpdaters.clear());\n          movePendingFibersToMemoized(root, lanes);\n        }\n        workInProgressTransitions = null;\n        prepareFreshStack(root, lanes);\n      }\n      markRenderStarted(lanes);\n      lanes = !1;\n      memoizedUpdaters = workInProgressRootExitStatus;\n      a: do\n        try {\n          if (\n            workInProgressSuspendedReason !== NotSuspended &&\n            null !== workInProgress\n          ) {\n            var unitOfWork = workInProgress,\n              thrownValue = workInProgressThrownValue;\n            switch (workInProgressSuspendedReason) {\n              case SuspendedOnHydration:\n                resetWorkInProgressStack();\n                memoizedUpdaters = RootSuspendedAtTheShell;\n                break a;\n              case SuspendedOnImmediate:\n              case SuspendedOnData:\n              case SuspendedOnAction:\n              case SuspendedOnDeprecatedThrowPromise:\n                null === suspenseHandlerStackCursor.current && (lanes = !0);\n                var reason = workInProgressSuspendedReason;\n                workInProgressSuspendedReason = NotSuspended;\n                workInProgressThrownValue = null;\n                throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n                if (\n                  shouldYieldForPrerendering &&\n                  workInProgressRootIsPrerendering\n                ) {\n                  memoizedUpdaters = RootInProgress;\n                  break a;\n                }\n                break;\n              default:\n                (reason = workInProgressSuspendedReason),\n                  (workInProgressSuspendedReason = NotSuspended),\n                  (workInProgressThrownValue = null),\n                  throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n            }\n          }\n          workLoopSync();\n          memoizedUpdaters = workInProgressRootExitStatus;\n          break;\n        } catch (thrownValue$8) {\n          handleThrow(root, thrownValue$8);\n        }\n      while (1);\n      lanes && root.shellSuspendCounter++;\n      resetContextDependencies();\n      executionContext = prevExecutionContext;\n      ReactSharedInternals.H = prevDispatcher;\n      ReactSharedInternals.A = prevAsyncDispatcher;\n      markRenderStopped();\n      null === workInProgress &&\n        ((workInProgressRoot = null),\n        (workInProgressRootRenderLanes = 0),\n        finishQueueingConcurrentUpdates());\n      return memoizedUpdaters;\n    }\n    function workLoopSync() {\n      for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n    }\n    function renderRootConcurrent(root, lanes) {\n      var prevExecutionContext = executionContext;\n      executionContext |= RenderContext;\n      var prevDispatcher = pushDispatcher(),\n        prevAsyncDispatcher = pushAsyncDispatcher();\n      if (\n        workInProgressRoot !== root ||\n        workInProgressRootRenderLanes !== lanes\n      ) {\n        if (isDevToolsPresent) {\n          var memoizedUpdaters = root.memoizedUpdaters;\n          0 < memoizedUpdaters.size &&\n            (restorePendingUpdaters(root, workInProgressRootRenderLanes),\n            memoizedUpdaters.clear());\n          movePendingFibersToMemoized(root, lanes);\n        }\n        workInProgressTransitions = null;\n        workInProgressRootRenderTargetTime = now$1() + RENDER_TIMEOUT_MS;\n        prepareFreshStack(root, lanes);\n      } else\n        workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n          root,\n          lanes\n        );\n      markRenderStarted(lanes);\n      a: do\n        try {\n          if (\n            workInProgressSuspendedReason !== NotSuspended &&\n            null !== workInProgress\n          )\n            b: switch (\n              ((lanes = workInProgress),\n              (memoizedUpdaters = workInProgressThrownValue),\n              workInProgressSuspendedReason)\n            ) {\n              case SuspendedOnError:\n                workInProgressSuspendedReason = NotSuspended;\n                workInProgressThrownValue = null;\n                throwAndUnwindWorkLoop(\n                  root,\n                  lanes,\n                  memoizedUpdaters,\n                  SuspendedOnError\n                );\n                break;\n              case SuspendedOnData:\n              case SuspendedOnAction:\n                if (isThenableResolved(memoizedUpdaters)) {\n                  workInProgressSuspendedReason = NotSuspended;\n                  workInProgressThrownValue = null;\n                  replaySuspendedUnitOfWork(lanes);\n                  break;\n                }\n                lanes = function () {\n                  (workInProgressSuspendedReason !== SuspendedOnData &&\n                    workInProgressSuspendedReason !== SuspendedOnAction) ||\n                    workInProgressRoot !== root ||\n                    (workInProgressSuspendedReason =\n                      SuspendedAndReadyToContinue);\n                  ensureRootIsScheduled(root);\n                };\n                memoizedUpdaters.then(lanes, lanes);\n                break a;\n              case SuspendedOnImmediate:\n                workInProgressSuspendedReason = SuspendedAndReadyToContinue;\n                break a;\n              case SuspendedOnInstance:\n                workInProgressSuspendedReason =\n                  SuspendedOnInstanceAndReadyToContinue;\n                break a;\n              case SuspendedAndReadyToContinue:\n                isThenableResolved(memoizedUpdaters)\n                  ? ((workInProgressSuspendedReason = NotSuspended),\n                    (workInProgressThrownValue = null),\n                    replaySuspendedUnitOfWork(lanes))\n                  : ((workInProgressSuspendedReason = NotSuspended),\n                    (workInProgressThrownValue = null),\n                    throwAndUnwindWorkLoop(\n                      root,\n                      lanes,\n                      memoizedUpdaters,\n                      SuspendedAndReadyToContinue\n                    ));\n                break;\n              case SuspendedOnInstanceAndReadyToContinue:\n                var resource = null;\n                switch (workInProgress.tag) {\n                  case 26:\n                    resource = workInProgress.memoizedState;\n                  case 5:\n                  case 27:\n                    var hostFiber = workInProgress;\n                    if (\n                      resource\n                        ? preloadResource(resource)\n                        : hostFiber.stateNode.complete\n                    ) {\n                      workInProgressSuspendedReason = NotSuspended;\n                      workInProgressThrownValue = null;\n                      var sibling = hostFiber.sibling;\n                      if (null !== sibling) workInProgress = sibling;\n                      else {\n                        var returnFiber = hostFiber.return;\n                        null !== returnFiber\n                          ? ((workInProgress = returnFiber),\n                            completeUnitOfWork(returnFiber))\n                          : (workInProgress = null);\n                      }\n                      break b;\n                    }\n                    break;\n                  default:\n                    console.error(\n                      \"Unexpected type of fiber triggered a suspensey commit. This is a bug in React.\"\n                    );\n                }\n                workInProgressSuspendedReason = NotSuspended;\n                workInProgressThrownValue = null;\n                throwAndUnwindWorkLoop(\n                  root,\n                  lanes,\n                  memoizedUpdaters,\n                  SuspendedOnInstanceAndReadyToContinue\n                );\n                break;\n              case SuspendedOnDeprecatedThrowPromise:\n                workInProgressSuspendedReason = NotSuspended;\n                workInProgressThrownValue = null;\n                throwAndUnwindWorkLoop(\n                  root,\n                  lanes,\n                  memoizedUpdaters,\n                  SuspendedOnDeprecatedThrowPromise\n                );\n                break;\n              case SuspendedOnHydration:\n                resetWorkInProgressStack();\n                workInProgressRootExitStatus = RootSuspendedAtTheShell;\n                break a;\n              default:\n                throw Error(\n                  \"Unexpected SuspendedReason. This is a bug in React.\"\n                );\n            }\n          null !== ReactSharedInternals.actQueue\n            ? workLoopSync()\n            : workLoopConcurrentByScheduler();\n          break;\n        } catch (thrownValue$9) {\n          handleThrow(root, thrownValue$9);\n        }\n      while (1);\n      resetContextDependencies();\n      ReactSharedInternals.H = prevDispatcher;\n      ReactSharedInternals.A = prevAsyncDispatcher;\n      executionContext = prevExecutionContext;\n      if (null !== workInProgress)\n        return (\n          null !== injectedProfilingHooks &&\n            \"function\" === typeof injectedProfilingHooks.markRenderYielded &&\n            injectedProfilingHooks.markRenderYielded(),\n          RootInProgress\n        );\n      markRenderStopped();\n      workInProgressRoot = null;\n      workInProgressRootRenderLanes = 0;\n      finishQueueingConcurrentUpdates();\n      return workInProgressRootExitStatus;\n    }\n    function workLoopConcurrentByScheduler() {\n      for (; null !== workInProgress && !shouldYield(); )\n        performUnitOfWork(workInProgress);\n    }\n    function performUnitOfWork(unitOfWork) {\n      var current = unitOfWork.alternate;\n      (unitOfWork.mode & ProfileMode) !== NoMode\n        ? (startProfilerTimer(unitOfWork),\n          (current = runWithFiberInDEV(\n            unitOfWork,\n            beginWork,\n            current,\n            unitOfWork,\n            entangledRenderLanes\n          )),\n          stopProfilerTimerIfRunningAndRecordDuration(unitOfWork))\n        : (current = runWithFiberInDEV(\n            unitOfWork,\n            beginWork,\n            current,\n            unitOfWork,\n            entangledRenderLanes\n          ));\n      unitOfWork.memoizedProps = unitOfWork.pendingProps;\n      null === current\n        ? completeUnitOfWork(unitOfWork)\n        : (workInProgress = current);\n    }\n    function replaySuspendedUnitOfWork(unitOfWork) {\n      var next = runWithFiberInDEV(unitOfWork, replayBeginWork, unitOfWork);\n      unitOfWork.memoizedProps = unitOfWork.pendingProps;\n      null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n    }\n    function replayBeginWork(unitOfWork) {\n      var current = unitOfWork.alternate,\n        isProfilingMode = (unitOfWork.mode & ProfileMode) !== NoMode;\n      isProfilingMode && startProfilerTimer(unitOfWork);\n      switch (unitOfWork.tag) {\n        case 15:\n        case 0:\n          current = replayFunctionComponent(\n            current,\n            unitOfWork,\n            unitOfWork.pendingProps,\n            unitOfWork.type,\n            void 0,\n            workInProgressRootRenderLanes\n          );\n          break;\n        case 11:\n          current = replayFunctionComponent(\n            current,\n            unitOfWork,\n            unitOfWork.pendingProps,\n            unitOfWork.type.render,\n            unitOfWork.ref,\n            workInProgressRootRenderLanes\n          );\n          break;\n        case 5:\n          resetHooksOnUnwind(unitOfWork);\n        default:\n          unwindInterruptedWork(current, unitOfWork),\n            (unitOfWork = workInProgress =\n              resetWorkInProgress(unitOfWork, entangledRenderLanes)),\n            (current = beginWork(current, unitOfWork, entangledRenderLanes));\n      }\n      isProfilingMode &&\n        stopProfilerTimerIfRunningAndRecordDuration(unitOfWork);\n      return current;\n    }\n    function throwAndUnwindWorkLoop(\n      root,\n      unitOfWork,\n      thrownValue,\n      suspendedReason\n    ) {\n      resetContextDependencies();\n      resetHooksOnUnwind(unitOfWork);\n      thenableState$1 = null;\n      thenableIndexCounter$1 = 0;\n      var returnFiber = unitOfWork.return;\n      try {\n        if (\n          throwException(\n            root,\n            returnFiber,\n            unitOfWork,\n            thrownValue,\n            workInProgressRootRenderLanes\n          )\n        ) {\n          workInProgressRootExitStatus = RootFatalErrored;\n          logUncaughtError(\n            root,\n            createCapturedValueAtFiber(thrownValue, root.current)\n          );\n          workInProgress = null;\n          return;\n        }\n      } catch (error) {\n        if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n        workInProgressRootExitStatus = RootFatalErrored;\n        logUncaughtError(\n          root,\n          createCapturedValueAtFiber(thrownValue, root.current)\n        );\n        workInProgress = null;\n        return;\n      }\n      if (unitOfWork.flags & 32768) {\n        if (isHydrating || suspendedReason === SuspendedOnError) root = !0;\n        else if (\n          workInProgressRootIsPrerendering ||\n          0 !== (workInProgressRootRenderLanes & 536870912)\n        )\n          root = !1;\n        else if (\n          ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n          suspendedReason === SuspendedOnData ||\n            suspendedReason === SuspendedOnAction ||\n            suspendedReason === SuspendedOnImmediate ||\n            suspendedReason === SuspendedOnDeprecatedThrowPromise)\n        )\n          (suspendedReason = suspenseHandlerStackCursor.current),\n            null !== suspendedReason &&\n              13 === suspendedReason.tag &&\n              (suspendedReason.flags |= 16384);\n        unwindUnitOfWork(unitOfWork, root);\n      } else completeUnitOfWork(unitOfWork);\n    }\n    function completeUnitOfWork(unitOfWork) {\n      var completedWork = unitOfWork;\n      do {\n        if (0 !== (completedWork.flags & 32768)) {\n          unwindUnitOfWork(\n            completedWork,\n            workInProgressRootDidSkipSuspendedSiblings\n          );\n          return;\n        }\n        var current = completedWork.alternate;\n        unitOfWork = completedWork.return;\n        startProfilerTimer(completedWork);\n        current = runWithFiberInDEV(\n          completedWork,\n          completeWork,\n          current,\n          completedWork,\n          entangledRenderLanes\n        );\n        (completedWork.mode & ProfileMode) !== NoMode &&\n          stopProfilerTimerIfRunningAndRecordIncompleteDuration(completedWork);\n        if (null !== current) {\n          workInProgress = current;\n          return;\n        }\n        completedWork = completedWork.sibling;\n        if (null !== completedWork) {\n          workInProgress = completedWork;\n          return;\n        }\n        workInProgress = completedWork = unitOfWork;\n      } while (null !== completedWork);\n      workInProgressRootExitStatus === RootInProgress &&\n        (workInProgressRootExitStatus = RootCompleted);\n    }\n    function unwindUnitOfWork(unitOfWork, skipSiblings) {\n      do {\n        var next = unwindWork(unitOfWork.alternate, unitOfWork);\n        if (null !== next) {\n          next.flags &= 32767;\n          workInProgress = next;\n          return;\n        }\n        if ((unitOfWork.mode & ProfileMode) !== NoMode) {\n          stopProfilerTimerIfRunningAndRecordIncompleteDuration(unitOfWork);\n          next = unitOfWork.actualDuration;\n          for (var child = unitOfWork.child; null !== child; )\n            (next += child.actualDuration), (child = child.sibling);\n          unitOfWork.actualDuration = next;\n        }\n        next = unitOfWork.return;\n        null !== next &&\n          ((next.flags |= 32768),\n          (next.subtreeFlags = 0),\n          (next.deletions = null));\n        if (\n          !skipSiblings &&\n          ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n        ) {\n          workInProgress = unitOfWork;\n          return;\n        }\n        workInProgress = unitOfWork = next;\n      } while (null !== unitOfWork);\n      workInProgressRootExitStatus = RootSuspendedAtTheShell;\n      workInProgress = null;\n    }\n    function commitRoot(\n      root,\n      finishedWork,\n      lanes,\n      recoverableErrors,\n      transitions,\n      didIncludeRenderPhaseUpdate,\n      spawnedLane,\n      updatedLanes,\n      suspendedRetryLanes\n    ) {\n      root.cancelPendingCommit = null;\n      do flushPendingEffects();\n      while (pendingEffectsStatus !== NO_PENDING_EFFECTS);\n      ReactStrictModeWarnings.flushLegacyContextWarning();\n      ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();\n      if ((executionContext & (RenderContext | CommitContext)) !== NoContext)\n        throw Error(\"Should not already be working.\");\n      null !== injectedProfilingHooks &&\n        \"function\" === typeof injectedProfilingHooks.markCommitStarted &&\n        injectedProfilingHooks.markCommitStarted(lanes);\n      if (null === finishedWork) markCommitStopped();\n      else {\n        0 === lanes &&\n          console.error(\n            \"finishedLanes should not be empty during a commit. This is a bug in React.\"\n          );\n        if (finishedWork === root.current)\n          throw Error(\n            \"Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.\"\n          );\n        didIncludeRenderPhaseUpdate =\n          finishedWork.lanes | finishedWork.childLanes;\n        didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;\n        markRootFinished(\n          root,\n          lanes,\n          didIncludeRenderPhaseUpdate,\n          spawnedLane,\n          updatedLanes,\n          suspendedRetryLanes\n        );\n        root === workInProgressRoot &&\n          ((workInProgress = workInProgressRoot = null),\n          (workInProgressRootRenderLanes = 0));\n        pendingFinishedWork = finishedWork;\n        pendingEffectsRoot = root;\n        pendingEffectsLanes = lanes;\n        pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;\n        pendingPassiveTransitions = transitions;\n        pendingRecoverableErrors = recoverableErrors;\n        0 !== (finishedWork.subtreeFlags & 10256) ||\n        0 !== (finishedWork.flags & 10256)\n          ? ((root.callbackNode = null),\n            (root.callbackPriority = 0),\n            scheduleCallback$1(NormalPriority$1, function () {\n              flushPassiveEffects(!0);\n              return null;\n            }))\n          : ((root.callbackNode = null), (root.callbackPriority = 0));\n        commitStartTime = now();\n        recoverableErrors = 0 !== (finishedWork.flags & 13878);\n        if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {\n          recoverableErrors = ReactSharedInternals.T;\n          ReactSharedInternals.T = null;\n          transitions = ReactDOMSharedInternals.p;\n          ReactDOMSharedInternals.p = DiscreteEventPriority;\n          spawnedLane = executionContext;\n          executionContext |= CommitContext;\n          try {\n            commitBeforeMutationEffects(root, finishedWork, lanes);\n          } finally {\n            (executionContext = spawnedLane),\n              (ReactDOMSharedInternals.p = transitions),\n              (ReactSharedInternals.T = recoverableErrors);\n          }\n        }\n        pendingEffectsStatus = PENDING_MUTATION_PHASE;\n        flushMutationEffects();\n        flushLayoutEffects();\n        flushSpawnedWork();\n      }\n    }\n    function flushMutationEffects() {\n      if (pendingEffectsStatus === PENDING_MUTATION_PHASE) {\n        pendingEffectsStatus = NO_PENDING_EFFECTS;\n        var root = pendingEffectsRoot,\n          finishedWork = pendingFinishedWork,\n          lanes = pendingEffectsLanes,\n          rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n        if (\n          0 !== (finishedWork.subtreeFlags & 13878) ||\n          rootMutationHasEffect\n        ) {\n          rootMutationHasEffect = ReactSharedInternals.T;\n          ReactSharedInternals.T = null;\n          var previousPriority = ReactDOMSharedInternals.p;\n          ReactDOMSharedInternals.p = DiscreteEventPriority;\n          var prevExecutionContext = executionContext;\n          executionContext |= CommitContext;\n          try {\n            inProgressLanes = lanes;\n            inProgressRoot = root;\n            componentEffectStartTime = -1.1;\n            commitMutationEffectsOnFiber(finishedWork, root);\n            inProgressRoot = inProgressLanes = null;\n            lanes = selectionInformation;\n            var curFocusedElem = getActiveElementDeep(root.containerInfo),\n              priorFocusedElem = lanes.focusedElem,\n              priorSelectionRange = lanes.selectionRange;\n            if (\n              curFocusedElem !== priorFocusedElem &&\n              priorFocusedElem &&\n              priorFocusedElem.ownerDocument &&\n              containsNode(\n                priorFocusedElem.ownerDocument.documentElement,\n                priorFocusedElem\n              )\n            ) {\n              if (\n                null !== priorSelectionRange &&\n                hasSelectionCapabilities(priorFocusedElem)\n              ) {\n                var start = priorSelectionRange.start,\n                  end = priorSelectionRange.end;\n                void 0 === end && (end = start);\n                if (\"selectionStart\" in priorFocusedElem)\n                  (priorFocusedElem.selectionStart = start),\n                    (priorFocusedElem.selectionEnd = Math.min(\n                      end,\n                      priorFocusedElem.value.length\n                    ));\n                else {\n                  var doc = priorFocusedElem.ownerDocument || document,\n                    win = (doc && doc.defaultView) || window;\n                  if (win.getSelection) {\n                    var selection = win.getSelection(),\n                      length = priorFocusedElem.textContent.length,\n                      start$jscomp$0 = Math.min(\n                        priorSelectionRange.start,\n                        length\n                      ),\n                      end$jscomp$0 =\n                        void 0 === priorSelectionRange.end\n                          ? start$jscomp$0\n                          : Math.min(priorSelectionRange.end, length);\n                    !selection.extend &&\n                      start$jscomp$0 > end$jscomp$0 &&\n                      ((curFocusedElem = end$jscomp$0),\n                      (end$jscomp$0 = start$jscomp$0),\n                      (start$jscomp$0 = curFocusedElem));\n                    var startMarker = getNodeForCharacterOffset(\n                        priorFocusedElem,\n                        start$jscomp$0\n                      ),\n                      endMarker = getNodeForCharacterOffset(\n                        priorFocusedElem,\n                        end$jscomp$0\n                      );\n                    if (\n                      startMarker &&\n                      endMarker &&\n                      (1 !== selection.rangeCount ||\n                        selection.anchorNode !== startMarker.node ||\n                        selection.anchorOffset !== startMarker.offset ||\n                        selection.focusNode !== endMarker.node ||\n                        selection.focusOffset !== endMarker.offset)\n                    ) {\n                      var range = doc.createRange();\n                      range.setStart(startMarker.node, startMarker.offset);\n                      selection.removeAllRanges();\n                      start$jscomp$0 > end$jscomp$0\n                        ? (selection.addRange(range),\n                          selection.extend(endMarker.node, endMarker.offset))\n                        : (range.setEnd(endMarker.node, endMarker.offset),\n                          selection.addRange(range));\n                    }\n                  }\n                }\n              }\n              doc = [];\n              for (\n                selection = priorFocusedElem;\n                (selection = selection.parentNode);\n\n              )\n                1 === selection.nodeType &&\n                  doc.push({\n                    element: selection,\n                    left: selection.scrollLeft,\n                    top: selection.scrollTop\n                  });\n              \"function\" === typeof priorFocusedElem.focus &&\n                priorFocusedElem.focus();\n              for (\n                priorFocusedElem = 0;\n                priorFocusedElem < doc.length;\n                priorFocusedElem++\n              ) {\n                var info = doc[priorFocusedElem];\n                info.element.scrollLeft = info.left;\n                info.element.scrollTop = info.top;\n              }\n            }\n            _enabled = !!eventsEnabled;\n            selectionInformation = eventsEnabled = null;\n          } finally {\n            (executionContext = prevExecutionContext),\n              (ReactDOMSharedInternals.p = previousPriority),\n              (ReactSharedInternals.T = rootMutationHasEffect);\n          }\n        }\n        root.current = finishedWork;\n        pendingEffectsStatus = PENDING_LAYOUT_PHASE;\n      }\n    }\n    function flushLayoutEffects() {\n      if (pendingEffectsStatus === PENDING_LAYOUT_PHASE) {\n        pendingEffectsStatus = NO_PENDING_EFFECTS;\n        var root = pendingEffectsRoot,\n          finishedWork = pendingFinishedWork,\n          lanes = pendingEffectsLanes,\n          rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n        if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n          rootHasLayoutEffect = ReactSharedInternals.T;\n          ReactSharedInternals.T = null;\n          var _previousPriority = ReactDOMSharedInternals.p;\n          ReactDOMSharedInternals.p = DiscreteEventPriority;\n          var _prevExecutionContext = executionContext;\n          executionContext |= CommitContext;\n          try {\n            null !== injectedProfilingHooks &&\n              \"function\" ===\n                typeof injectedProfilingHooks.markLayoutEffectsStarted &&\n              injectedProfilingHooks.markLayoutEffectsStarted(lanes),\n              (inProgressLanes = lanes),\n              (inProgressRoot = root),\n              (componentEffectStartTime = -1.1),\n              commitLayoutEffectOnFiber(\n                root,\n                finishedWork.alternate,\n                finishedWork\n              ),\n              (inProgressRoot = inProgressLanes = null),\n              null !== injectedProfilingHooks &&\n                \"function\" ===\n                  typeof injectedProfilingHooks.markLayoutEffectsStopped &&\n                injectedProfilingHooks.markLayoutEffectsStopped();\n          } finally {\n            (executionContext = _prevExecutionContext),\n              (ReactDOMSharedInternals.p = _previousPriority),\n              (ReactSharedInternals.T = rootHasLayoutEffect);\n          }\n        }\n        pendingEffectsStatus = PENDING_AFTER_MUTATION_PHASE;\n      }\n    }\n    function flushSpawnedWork() {\n      if (\n        pendingEffectsStatus === PENDING_SPAWNED_WORK ||\n        pendingEffectsStatus === PENDING_AFTER_MUTATION_PHASE\n      ) {\n        pendingEffectsStatus = NO_PENDING_EFFECTS;\n        requestPaint();\n        var root = pendingEffectsRoot,\n          finishedWork = pendingFinishedWork,\n          lanes = pendingEffectsLanes,\n          recoverableErrors = pendingRecoverableErrors,\n          rootDidHavePassiveEffects =\n            0 !== (finishedWork.subtreeFlags & 10256) ||\n            0 !== (finishedWork.flags & 10256);\n        rootDidHavePassiveEffects\n          ? (pendingEffectsStatus = PENDING_PASSIVE_PHASE)\n          : ((pendingEffectsStatus = NO_PENDING_EFFECTS),\n            (pendingFinishedWork = pendingEffectsRoot = null),\n            releaseRootPooledCache(root, root.pendingLanes),\n            (nestedPassiveUpdateCount = 0),\n            (rootWithPassiveNestedUpdates = null));\n        var remainingLanes = root.pendingLanes;\n        0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n        rootDidHavePassiveEffects || commitDoubleInvokeEffectsInDEV(root);\n        rootDidHavePassiveEffects = lanesToEventPriority(lanes);\n        finishedWork = finishedWork.stateNode;\n        if (\n          injectedHook &&\n          \"function\" === typeof injectedHook.onCommitFiberRoot\n        )\n          try {\n            var didError = 128 === (finishedWork.current.flags & 128);\n            switch (rootDidHavePassiveEffects) {\n              case DiscreteEventPriority:\n                var schedulerPriority = ImmediatePriority;\n                break;\n              case ContinuousEventPriority:\n                schedulerPriority = UserBlockingPriority;\n                break;\n              case DefaultEventPriority:\n                schedulerPriority = NormalPriority$1;\n                break;\n              case IdleEventPriority:\n                schedulerPriority = IdlePriority;\n                break;\n              default:\n                schedulerPriority = NormalPriority$1;\n            }\n            injectedHook.onCommitFiberRoot(\n              rendererID,\n              finishedWork,\n              schedulerPriority,\n              didError\n            );\n          } catch (err) {\n            hasLoggedError ||\n              ((hasLoggedError = !0),\n              console.error(\n                \"React instrumentation encountered an error: %s\",\n                err\n              ));\n          }\n        isDevToolsPresent && root.memoizedUpdaters.clear();\n        onCommitRoot();\n        if (null !== recoverableErrors) {\n          didError = ReactSharedInternals.T;\n          schedulerPriority = ReactDOMSharedInternals.p;\n          ReactDOMSharedInternals.p = DiscreteEventPriority;\n          ReactSharedInternals.T = null;\n          try {\n            var onRecoverableError = root.onRecoverableError;\n            for (\n              finishedWork = 0;\n              finishedWork < recoverableErrors.length;\n              finishedWork++\n            ) {\n              var recoverableError = recoverableErrors[finishedWork],\n                errorInfo = makeErrorInfo(recoverableError.stack);\n              runWithFiberInDEV(\n                recoverableError.source,\n                onRecoverableError,\n                recoverableError.value,\n                errorInfo\n              );\n            }\n          } finally {\n            (ReactSharedInternals.T = didError),\n              (ReactDOMSharedInternals.p = schedulerPriority);\n          }\n        }\n        0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n        ensureRootIsScheduled(root);\n        remainingLanes = root.pendingLanes;\n        0 !== (lanes & 4194090) && 0 !== (remainingLanes & 42)\n          ? ((nestedUpdateScheduled = !0),\n            root === rootWithNestedUpdates\n              ? nestedUpdateCount++\n              : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root)))\n          : (nestedUpdateCount = 0);\n        flushSyncWorkAcrossRoots_impl(0, !1);\n        markCommitStopped();\n      }\n    }\n    function makeErrorInfo(componentStack) {\n      componentStack = { componentStack: componentStack };\n      Object.defineProperty(componentStack, \"digest\", {\n        get: function () {\n          console.error(\n            'You are accessing \"digest\" from the errorInfo object passed to onRecoverableError. This property is no longer provided as part of errorInfo but can be accessed as a property of the Error instance itself.'\n          );\n        }\n      });\n      return componentStack;\n    }\n    function releaseRootPooledCache(root, remainingLanes) {\n      0 === (root.pooledCacheLanes &= remainingLanes) &&\n        ((remainingLanes = root.pooledCache),\n        null != remainingLanes &&\n          ((root.pooledCache = null), releaseCache(remainingLanes)));\n    }\n    function flushPendingEffects(wasDelayedCommit) {\n      flushMutationEffects();\n      flushLayoutEffects();\n      flushSpawnedWork();\n      return flushPassiveEffects(wasDelayedCommit);\n    }\n    function flushPassiveEffects() {\n      if (pendingEffectsStatus !== PENDING_PASSIVE_PHASE) return !1;\n      var root = pendingEffectsRoot,\n        remainingLanes = pendingEffectsRemainingLanes;\n      pendingEffectsRemainingLanes = 0;\n      var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n        priority =\n          0 === DefaultEventPriority || DefaultEventPriority > renderPriority\n            ? DefaultEventPriority\n            : renderPriority;\n      renderPriority = ReactSharedInternals.T;\n      var previousPriority = ReactDOMSharedInternals.p;\n      try {\n        ReactDOMSharedInternals.p = priority;\n        ReactSharedInternals.T = null;\n        priority = pendingPassiveTransitions;\n        pendingPassiveTransitions = null;\n        var root$jscomp$0 = pendingEffectsRoot,\n          lanes = pendingEffectsLanes;\n        pendingEffectsStatus = NO_PENDING_EFFECTS;\n        pendingFinishedWork = pendingEffectsRoot = null;\n        pendingEffectsLanes = 0;\n        if ((executionContext & (RenderContext | CommitContext)) !== NoContext)\n          throw Error(\"Cannot flush passive effects while already rendering.\");\n        isFlushingPassiveEffects = !0;\n        didScheduleUpdateDuringPassiveEffects = !1;\n        null !== injectedProfilingHooks &&\n          \"function\" ===\n            typeof injectedProfilingHooks.markPassiveEffectsStarted &&\n          injectedProfilingHooks.markPassiveEffectsStarted(lanes);\n        var prevExecutionContext = executionContext;\n        executionContext |= CommitContext;\n        var finishedWork = root$jscomp$0.current;\n        componentEffectStartTime = -1.1;\n        commitPassiveUnmountOnFiber(finishedWork);\n        var finishedWork$jscomp$0 = root$jscomp$0.current;\n        componentEffectStartTime = -1.1;\n        commitPassiveMountOnFiber(\n          root$jscomp$0,\n          finishedWork$jscomp$0,\n          lanes,\n          priority\n        );\n        null !== injectedProfilingHooks &&\n          \"function\" ===\n            typeof injectedProfilingHooks.markPassiveEffectsStopped &&\n          injectedProfilingHooks.markPassiveEffectsStopped();\n        commitDoubleInvokeEffectsInDEV(root$jscomp$0);\n        executionContext = prevExecutionContext;\n        flushSyncWorkAcrossRoots_impl(0, !1);\n        didScheduleUpdateDuringPassiveEffects\n          ? root$jscomp$0 === rootWithPassiveNestedUpdates\n            ? nestedPassiveUpdateCount++\n            : ((nestedPassiveUpdateCount = 0),\n              (rootWithPassiveNestedUpdates = root$jscomp$0))\n          : (nestedPassiveUpdateCount = 0);\n        didScheduleUpdateDuringPassiveEffects = isFlushingPassiveEffects = !1;\n        if (\n          injectedHook &&\n          \"function\" === typeof injectedHook.onPostCommitFiberRoot\n        )\n          try {\n            injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n          } catch (err) {\n            hasLoggedError ||\n              ((hasLoggedError = !0),\n              console.error(\n                \"React instrumentation encountered an error: %s\",\n                err\n              ));\n          }\n        var stateNode = root$jscomp$0.current.stateNode;\n        stateNode.effectDuration = 0;\n        stateNode.passiveEffectDuration = 0;\n        return !0;\n      } finally {\n        (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = renderPriority),\n          releaseRootPooledCache(root, remainingLanes);\n      }\n    }\n    function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n      sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n      sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n      rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n      null !== rootFiber &&\n        (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n    }\n    function captureCommitPhaseError(\n      sourceFiber,\n      nearestMountedAncestor,\n      error\n    ) {\n      isRunningInsertionEffect = !1;\n      if (3 === sourceFiber.tag)\n        captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n      else {\n        for (; null !== nearestMountedAncestor; ) {\n          if (3 === nearestMountedAncestor.tag) {\n            captureCommitPhaseErrorOnRoot(\n              nearestMountedAncestor,\n              sourceFiber,\n              error\n            );\n            return;\n          }\n          if (1 === nearestMountedAncestor.tag) {\n            var instance = nearestMountedAncestor.stateNode;\n            if (\n              \"function\" ===\n                typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n              (\"function\" === typeof instance.componentDidCatch &&\n                (null === legacyErrorBoundariesThatAlreadyFailed ||\n                  !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n            ) {\n              sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n              error = createClassErrorUpdate(2);\n              instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n              null !== instance &&\n                (initializeClassErrorUpdate(\n                  error,\n                  instance,\n                  nearestMountedAncestor,\n                  sourceFiber\n                ),\n                markRootUpdated$1(instance, 2),\n                ensureRootIsScheduled(instance));\n              return;\n            }\n          }\n          nearestMountedAncestor = nearestMountedAncestor.return;\n        }\n        console.error(\n          \"Internal React error: Attempted to capture a commit phase error inside a detached tree. This indicates a bug in React. Potential causes include deleting the same fiber more than once, committing an already-finished tree, or an inconsistent return pointer.\\n\\nError message:\\n\\n%s\",\n          error\n        );\n      }\n    }\n    function attachPingListener(root, wakeable, lanes) {\n      var pingCache = root.pingCache;\n      if (null === pingCache) {\n        pingCache = root.pingCache = new PossiblyWeakMap();\n        var threadIDs = new Set();\n        pingCache.set(wakeable, threadIDs);\n      } else\n        (threadIDs = pingCache.get(wakeable)),\n          void 0 === threadIDs &&\n            ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n      threadIDs.has(lanes) ||\n        ((workInProgressRootDidAttachPingListener = !0),\n        threadIDs.add(lanes),\n        (pingCache = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n        isDevToolsPresent && restorePendingUpdaters(root, lanes),\n        wakeable.then(pingCache, pingCache));\n    }\n    function pingSuspendedRoot(root, wakeable, pingedLanes) {\n      var pingCache = root.pingCache;\n      null !== pingCache && pingCache.delete(wakeable);\n      root.pingedLanes |= root.suspendedLanes & pingedLanes;\n      root.warmLanes &= ~pingedLanes;\n      isConcurrentActEnvironment() &&\n        null === ReactSharedInternals.actQueue &&\n        console.error(\n          \"A suspended resource finished loading inside a test, but the event was not wrapped in act(...).\\n\\nWhen testing, code that resolves suspended data should be wrapped into act(...):\\n\\nact(() => {\\n  /* finish loading suspended data */\\n});\\n/* assert on the output */\\n\\nThis ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act\"\n        );\n      workInProgressRoot === root &&\n        (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n        (workInProgressRootExitStatus === RootSuspendedWithDelay ||\n        (workInProgressRootExitStatus === RootSuspended &&\n          (workInProgressRootRenderLanes & 62914560) ===\n            workInProgressRootRenderLanes &&\n          now$1() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS)\n          ? (executionContext & RenderContext) === NoContext &&\n            prepareFreshStack(root, 0)\n          : (workInProgressRootPingedLanes |= pingedLanes),\n        workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n          (workInProgressSuspendedRetryLanes = 0));\n      ensureRootIsScheduled(root);\n    }\n    function retryTimedOutBoundary(boundaryFiber, retryLane) {\n      0 === retryLane && (retryLane = claimNextRetryLane());\n      boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n      null !== boundaryFiber &&\n        (markRootUpdated$1(boundaryFiber, retryLane),\n        ensureRootIsScheduled(boundaryFiber));\n    }\n    function retryDehydratedSuspenseBoundary(boundaryFiber) {\n      var suspenseState = boundaryFiber.memoizedState,\n        retryLane = 0;\n      null !== suspenseState && (retryLane = suspenseState.retryLane);\n      retryTimedOutBoundary(boundaryFiber, retryLane);\n    }\n    function resolveRetryWakeable(boundaryFiber, wakeable) {\n      var retryLane = 0;\n      switch (boundaryFiber.tag) {\n        case 31:\n        case 13:\n          var retryCache = boundaryFiber.stateNode;\n          var suspenseState = boundaryFiber.memoizedState;\n          null !== suspenseState && (retryLane = suspenseState.retryLane);\n          break;\n        case 19:\n          retryCache = boundaryFiber.stateNode;\n          break;\n        case 22:\n          retryCache = boundaryFiber.stateNode._retryCache;\n          break;\n        default:\n          throw Error(\n            \"Pinged unknown suspense boundary type. This is probably a bug in React.\"\n          );\n      }\n      null !== retryCache && retryCache.delete(wakeable);\n      retryTimedOutBoundary(boundaryFiber, retryLane);\n    }\n    function recursivelyTraverseAndDoubleInvokeEffectsInDEV(\n      root$jscomp$0,\n      parentFiber,\n      isInStrictMode\n    ) {\n      if (0 !== (parentFiber.subtreeFlags & 67117056))\n        for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n          var root = root$jscomp$0,\n            fiber = parentFiber,\n            isStrictModeFiber = fiber.type === REACT_STRICT_MODE_TYPE;\n          isStrictModeFiber = isInStrictMode || isStrictModeFiber;\n          22 !== fiber.tag\n            ? fiber.flags & 67108864\n              ? isStrictModeFiber &&\n                runWithFiberInDEV(\n                  fiber,\n                  doubleInvokeEffectsOnFiber,\n                  root,\n                  fiber\n                )\n              : recursivelyTraverseAndDoubleInvokeEffectsInDEV(\n                  root,\n                  fiber,\n                  isStrictModeFiber\n                )\n            : null === fiber.memoizedState &&\n              (isStrictModeFiber && fiber.flags & 8192\n                ? runWithFiberInDEV(\n                    fiber,\n                    doubleInvokeEffectsOnFiber,\n                    root,\n                    fiber\n                  )\n                : fiber.subtreeFlags & 67108864 &&\n                  runWithFiberInDEV(\n                    fiber,\n                    recursivelyTraverseAndDoubleInvokeEffectsInDEV,\n                    root,\n                    fiber,\n                    isStrictModeFiber\n                  ));\n          parentFiber = parentFiber.sibling;\n        }\n    }\n    function doubleInvokeEffectsOnFiber(root, fiber) {\n      setIsStrictModeForDevtools(!0);\n      try {\n        disappearLayoutEffects(fiber),\n          disconnectPassiveEffect(fiber),\n          reappearLayoutEffects(root, fiber.alternate, fiber, !1),\n          reconnectPassiveEffects(root, fiber, 0, null, !1, 0);\n      } finally {\n        setIsStrictModeForDevtools(!1);\n      }\n    }\n    function commitDoubleInvokeEffectsInDEV(root) {\n      var doubleInvokeEffects = !0;\n      root.current.mode & (StrictLegacyMode | StrictEffectsMode) ||\n        (doubleInvokeEffects = !1);\n      recursivelyTraverseAndDoubleInvokeEffectsInDEV(\n        root,\n        root.current,\n        doubleInvokeEffects\n      );\n    }\n    function warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) {\n      if ((executionContext & RenderContext) === NoContext) {\n        var tag = fiber.tag;\n        if (\n          3 === tag ||\n          1 === tag ||\n          0 === tag ||\n          11 === tag ||\n          14 === tag ||\n          15 === tag\n        ) {\n          tag = getComponentNameFromFiber(fiber) || \"ReactComponent\";\n          if (null !== didWarnStateUpdateForNotYetMountedComponent) {\n            if (didWarnStateUpdateForNotYetMountedComponent.has(tag)) return;\n            didWarnStateUpdateForNotYetMountedComponent.add(tag);\n          } else didWarnStateUpdateForNotYetMountedComponent = new Set([tag]);\n          runWithFiberInDEV(fiber, function () {\n            console.error(\n              \"Can't perform a React state update on a component that hasn't mounted yet. This indicates that you have a side-effect in your render function that asynchronously tries to update the component. Move this work to useEffect instead.\"\n            );\n          });\n        }\n      }\n    }\n    function restorePendingUpdaters(root, lanes) {\n      isDevToolsPresent &&\n        root.memoizedUpdaters.forEach(function (schedulingFiber) {\n          addFiberToLanesMap(root, schedulingFiber, lanes);\n        });\n    }\n    function scheduleCallback$1(priorityLevel, callback) {\n      var actQueue = ReactSharedInternals.actQueue;\n      return null !== actQueue\n        ? (actQueue.push(callback), fakeActCallbackNode$1)\n        : scheduleCallback$3(priorityLevel, callback);\n    }\n    function warnIfUpdatesNotWrappedWithActDEV(fiber) {\n      isConcurrentActEnvironment() &&\n        null === ReactSharedInternals.actQueue &&\n        runWithFiberInDEV(fiber, function () {\n          console.error(\n            \"An update to %s inside a test was not wrapped in act(...).\\n\\nWhen testing, code that causes React state updates should be wrapped into act(...):\\n\\nact(() => {\\n  /* fire events that update state */\\n});\\n/* assert on the output */\\n\\nThis ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act\",\n            getComponentNameFromFiber(fiber)\n          );\n        });\n    }\n    function ensureRootIsScheduled(root) {\n      root !== lastScheduledRoot &&\n        null === root.next &&\n        (null === lastScheduledRoot\n          ? (firstScheduledRoot = lastScheduledRoot = root)\n          : (lastScheduledRoot = lastScheduledRoot.next = root));\n      mightHavePendingSyncWork = !0;\n      null !== ReactSharedInternals.actQueue\n        ? didScheduleMicrotask_act ||\n          ((didScheduleMicrotask_act = !0), scheduleImmediateRootScheduleTask())\n        : didScheduleMicrotask ||\n          ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n    }\n    function flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n      if (!isFlushingWork && mightHavePendingSyncWork) {\n        isFlushingWork = !0;\n        do {\n          var didPerformSomeWork = !1;\n          for (var root = firstScheduledRoot; null !== root; ) {\n            if (!onlyLegacy)\n              if (0 !== syncTransitionLanes) {\n                var pendingLanes = root.pendingLanes;\n                if (0 === pendingLanes) var nextLanes = 0;\n                else {\n                  var suspendedLanes = root.suspendedLanes,\n                    pingedLanes = root.pingedLanes;\n                  nextLanes =\n                    (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n                  nextLanes &= pendingLanes & ~(suspendedLanes & ~pingedLanes);\n                  nextLanes =\n                    nextLanes & 201326741\n                      ? (nextLanes & 201326741) | 1\n                      : nextLanes\n                        ? nextLanes | 2\n                        : 0;\n                }\n                0 !== nextLanes &&\n                  ((didPerformSomeWork = !0),\n                  performSyncWorkOnRoot(root, nextLanes));\n              } else\n                (nextLanes = workInProgressRootRenderLanes),\n                  (nextLanes = getNextLanes(\n                    root,\n                    root === workInProgressRoot ? nextLanes : 0,\n                    null !== root.cancelPendingCommit ||\n                      root.timeoutHandle !== noTimeout\n                  )),\n                  0 === (nextLanes & 3) ||\n                    checkIfRootIsPrerendering(root, nextLanes) ||\n                    ((didPerformSomeWork = !0),\n                    performSyncWorkOnRoot(root, nextLanes));\n            root = root.next;\n          }\n        } while (didPerformSomeWork);\n        isFlushingWork = !1;\n      }\n    }\n    function processRootScheduleInImmediateTask() {\n      processRootScheduleInMicrotask();\n    }\n    function processRootScheduleInMicrotask() {\n      mightHavePendingSyncWork =\n        didScheduleMicrotask_act =\n        didScheduleMicrotask =\n          !1;\n      var syncTransitionLanes = 0;\n      0 !== currentEventTransitionLane &&\n        shouldAttemptEagerTransition() &&\n        (syncTransitionLanes = currentEventTransitionLane);\n      for (\n        var currentTime = now$1(), prev = null, root = firstScheduledRoot;\n        null !== root;\n\n      ) {\n        var next = root.next,\n          nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n        if (0 === nextLanes)\n          (root.next = null),\n            null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n            null === next && (lastScheduledRoot = prev);\n        else if (\n          ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n        )\n          mightHavePendingSyncWork = !0;\n        root = next;\n      }\n      (pendingEffectsStatus !== NO_PENDING_EFFECTS &&\n        pendingEffectsStatus !== PENDING_PASSIVE_PHASE) ||\n        flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n      0 !== currentEventTransitionLane && (currentEventTransitionLane = 0);\n    }\n    function scheduleTaskForRootDuringMicrotask(root, currentTime) {\n      for (\n        var suspendedLanes = root.suspendedLanes,\n          pingedLanes = root.pingedLanes,\n          expirationTimes = root.expirationTimes,\n          lanes = root.pendingLanes & -62914561;\n        0 < lanes;\n\n      ) {\n        var index = 31 - clz32(lanes),\n          lane = 1 << index,\n          expirationTime = expirationTimes[index];\n        if (-1 === expirationTime) {\n          if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n            expirationTimes[index] = computeExpirationTime(lane, currentTime);\n        } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n        lanes &= ~lane;\n      }\n      currentTime = workInProgressRoot;\n      suspendedLanes = workInProgressRootRenderLanes;\n      suspendedLanes = getNextLanes(\n        root,\n        root === currentTime ? suspendedLanes : 0,\n        null !== root.cancelPendingCommit || root.timeoutHandle !== noTimeout\n      );\n      pingedLanes = root.callbackNode;\n      if (\n        0 === suspendedLanes ||\n        (root === currentTime &&\n          (workInProgressSuspendedReason === SuspendedOnData ||\n            workInProgressSuspendedReason === SuspendedOnAction)) ||\n        null !== root.cancelPendingCommit\n      )\n        return (\n          null !== pingedLanes && cancelCallback(pingedLanes),\n          (root.callbackNode = null),\n          (root.callbackPriority = 0)\n        );\n      if (\n        0 === (suspendedLanes & 3) ||\n        checkIfRootIsPrerendering(root, suspendedLanes)\n      ) {\n        currentTime = suspendedLanes & -suspendedLanes;\n        if (\n          currentTime !== root.callbackPriority ||\n          (null !== ReactSharedInternals.actQueue &&\n            pingedLanes !== fakeActCallbackNode)\n        )\n          cancelCallback(pingedLanes);\n        else return currentTime;\n        switch (lanesToEventPriority(suspendedLanes)) {\n          case DiscreteEventPriority:\n          case ContinuousEventPriority:\n            suspendedLanes = UserBlockingPriority;\n            break;\n          case DefaultEventPriority:\n            suspendedLanes = NormalPriority$1;\n            break;\n          case IdleEventPriority:\n            suspendedLanes = IdlePriority;\n            break;\n          default:\n            suspendedLanes = NormalPriority$1;\n        }\n        pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n        null !== ReactSharedInternals.actQueue\n          ? (ReactSharedInternals.actQueue.push(pingedLanes),\n            (suspendedLanes = fakeActCallbackNode))\n          : (suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes));\n        root.callbackPriority = currentTime;\n        root.callbackNode = suspendedLanes;\n        return currentTime;\n      }\n      null !== pingedLanes && cancelCallback(pingedLanes);\n      root.callbackPriority = 2;\n      root.callbackNode = null;\n      return 2;\n    }\n    function performWorkOnRootViaSchedulerTask(root, didTimeout) {\n      nestedUpdateScheduled = currentUpdateIsNested = !1;\n      if (\n        pendingEffectsStatus !== NO_PENDING_EFFECTS &&\n        pendingEffectsStatus !== PENDING_PASSIVE_PHASE\n      )\n        return (root.callbackNode = null), (root.callbackPriority = 0), null;\n      var originalCallbackNode = root.callbackNode;\n      if (flushPendingEffects(!0) && root.callbackNode !== originalCallbackNode)\n        return null;\n      var workInProgressRootRenderLanes$jscomp$0 =\n        workInProgressRootRenderLanes;\n      workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n        root,\n        root === workInProgressRoot\n          ? workInProgressRootRenderLanes$jscomp$0\n          : 0,\n        null !== root.cancelPendingCommit || root.timeoutHandle !== noTimeout\n      );\n      if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n      performWorkOnRoot(\n        root,\n        workInProgressRootRenderLanes$jscomp$0,\n        didTimeout\n      );\n      scheduleTaskForRootDuringMicrotask(root, now$1());\n      return null != root.callbackNode &&\n        root.callbackNode === originalCallbackNode\n        ? performWorkOnRootViaSchedulerTask.bind(null, root)\n        : null;\n    }\n    function performSyncWorkOnRoot(root, lanes) {\n      if (flushPendingEffects()) return null;\n      currentUpdateIsNested = nestedUpdateScheduled;\n      nestedUpdateScheduled = !1;\n      performWorkOnRoot(root, lanes, !0);\n    }\n    function cancelCallback(callbackNode) {\n      callbackNode !== fakeActCallbackNode &&\n        null !== callbackNode &&\n        cancelCallback$1(callbackNode);\n    }\n    function scheduleImmediateRootScheduleTask() {\n      null !== ReactSharedInternals.actQueue &&\n        ReactSharedInternals.actQueue.push(function () {\n          processRootScheduleInMicrotask();\n          return null;\n        });\n      scheduleMicrotask(function () {\n        (executionContext & (RenderContext | CommitContext)) !== NoContext\n          ? scheduleCallback$3(\n              ImmediatePriority,\n              processRootScheduleInImmediateTask\n            )\n          : processRootScheduleInMicrotask();\n      });\n    }\n    function requestTransitionLane() {\n      if (0 === currentEventTransitionLane) {\n        var actionScopeLane = currentEntangledLane;\n        currentEventTransitionLane =\n          0 !== actionScopeLane ? actionScopeLane : claimNextTransitionLane();\n      }\n      return currentEventTransitionLane;\n    }\n    function coerceFormActionProp(actionProp) {\n      if (\n        null == actionProp ||\n        \"symbol\" === typeof actionProp ||\n        \"boolean\" === typeof actionProp\n      )\n        return null;\n      if (\"function\" === typeof actionProp) return actionProp;\n      checkAttributeStringCoercion(actionProp, \"action\");\n      return sanitizeURL(\"\" + actionProp);\n    }\n    function createFormDataWithSubmitter(form, submitter) {\n      var temp = submitter.ownerDocument.createElement(\"input\");\n      temp.name = submitter.name;\n      temp.value = submitter.value;\n      form.id && temp.setAttribute(\"form\", form.id);\n      submitter.parentNode.insertBefore(temp, submitter);\n      form = new FormData(form);\n      temp.parentNode.removeChild(temp);\n      return form;\n    }\n    function extractEvents$1(\n      dispatchQueue,\n      domEventName,\n      maybeTargetInst,\n      nativeEvent,\n      nativeEventTarget\n    ) {\n      if (\n        \"submit\" === domEventName &&\n        maybeTargetInst &&\n        maybeTargetInst.stateNode === nativeEventTarget\n      ) {\n        var action = coerceFormActionProp(\n            (nativeEventTarget[internalPropsKey] || null).action\n          ),\n          submitter = nativeEvent.submitter;\n        submitter &&\n          ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n            ? coerceFormActionProp(domEventName.formAction)\n            : submitter.getAttribute(\"formAction\")),\n          null !== domEventName &&\n            ((action = domEventName), (submitter = null)));\n        var event = new SyntheticEvent(\n          \"action\",\n          \"action\",\n          null,\n          nativeEvent,\n          nativeEventTarget\n        );\n        dispatchQueue.push({\n          event: event,\n          listeners: [\n            {\n              instance: null,\n              listener: function () {\n                if (nativeEvent.defaultPrevented) {\n                  if (0 !== currentEventTransitionLane) {\n                    var formData = submitter\n                        ? createFormDataWithSubmitter(\n                            nativeEventTarget,\n                            submitter\n                          )\n                        : new FormData(nativeEventTarget),\n                      pendingState = {\n                        pending: !0,\n                        data: formData,\n                        method: nativeEventTarget.method,\n                        action: action\n                      };\n                    Object.freeze(pendingState);\n                    startHostTransition(\n                      maybeTargetInst,\n                      pendingState,\n                      null,\n                      formData\n                    );\n                  }\n                } else\n                  \"function\" === typeof action &&\n                    (event.preventDefault(),\n                    (formData = submitter\n                      ? createFormDataWithSubmitter(\n                          nativeEventTarget,\n                          submitter\n                        )\n                      : new FormData(nativeEventTarget)),\n                    (pendingState = {\n                      pending: !0,\n                      data: formData,\n                      method: nativeEventTarget.method,\n                      action: action\n                    }),\n                    Object.freeze(pendingState),\n                    startHostTransition(\n                      maybeTargetInst,\n                      pendingState,\n                      action,\n                      formData\n                    ));\n              },\n              currentTarget: nativeEventTarget\n            }\n          ]\n        });\n      }\n    }\n    function executeDispatch(event, listener, currentTarget) {\n      event.currentTarget = currentTarget;\n      try {\n        listener(event);\n      } catch (error) {\n        reportGlobalError(error);\n      }\n      event.currentTarget = null;\n    }\n    function processDispatchQueue(dispatchQueue, eventSystemFlags) {\n      eventSystemFlags = 0 !== (eventSystemFlags & 4);\n      for (var i = 0; i < dispatchQueue.length; i++) {\n        var _dispatchQueue$i = dispatchQueue[i];\n        a: {\n          var previousInstance = void 0,\n            event = _dispatchQueue$i.event;\n          _dispatchQueue$i = _dispatchQueue$i.listeners;\n          if (eventSystemFlags)\n            for (\n              var i$jscomp$0 = _dispatchQueue$i.length - 1;\n              0 <= i$jscomp$0;\n              i$jscomp$0--\n            ) {\n              var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n                instance = _dispatchListeners$i.instance,\n                currentTarget = _dispatchListeners$i.currentTarget;\n              _dispatchListeners$i = _dispatchListeners$i.listener;\n              if (instance !== previousInstance && event.isPropagationStopped())\n                break a;\n              null !== instance\n                ? runWithFiberInDEV(\n                    instance,\n                    executeDispatch,\n                    event,\n                    _dispatchListeners$i,\n                    currentTarget\n                  )\n                : executeDispatch(event, _dispatchListeners$i, currentTarget);\n              previousInstance = instance;\n            }\n          else\n            for (\n              i$jscomp$0 = 0;\n              i$jscomp$0 < _dispatchQueue$i.length;\n              i$jscomp$0++\n            ) {\n              _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n              instance = _dispatchListeners$i.instance;\n              currentTarget = _dispatchListeners$i.currentTarget;\n              _dispatchListeners$i = _dispatchListeners$i.listener;\n              if (instance !== previousInstance && event.isPropagationStopped())\n                break a;\n              null !== instance\n                ? runWithFiberInDEV(\n                    instance,\n                    executeDispatch,\n                    event,\n                    _dispatchListeners$i,\n                    currentTarget\n                  )\n                : executeDispatch(event, _dispatchListeners$i, currentTarget);\n              previousInstance = instance;\n            }\n        }\n      }\n    }\n    function listenToNonDelegatedEvent(domEventName, targetElement) {\n      nonDelegatedEvents.has(domEventName) ||\n        console.error(\n          'Did not expect a listenToNonDelegatedEvent() call for \"%s\". This is a bug in React. Please file an issue.',\n          domEventName\n        );\n      var listenerSet = targetElement[internalEventHandlersKey];\n      void 0 === listenerSet &&\n        (listenerSet = targetElement[internalEventHandlersKey] = new Set());\n      var listenerSetKey = domEventName + \"__bubble\";\n      listenerSet.has(listenerSetKey) ||\n        (addTrappedEventListener(targetElement, domEventName, 2, !1),\n        listenerSet.add(listenerSetKey));\n    }\n    function listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n      nonDelegatedEvents.has(domEventName) &&\n        !isCapturePhaseListener &&\n        console.error(\n          'Did not expect a listenToNativeEvent() call for \"%s\" in the bubble phase. This is a bug in React. Please file an issue.',\n          domEventName\n        );\n      var eventSystemFlags = 0;\n      isCapturePhaseListener && (eventSystemFlags |= 4);\n      addTrappedEventListener(\n        target,\n        domEventName,\n        eventSystemFlags,\n        isCapturePhaseListener\n      );\n    }\n    function listenToAllSupportedEvents(rootContainerElement) {\n      if (!rootContainerElement[listeningMarker]) {\n        rootContainerElement[listeningMarker] = !0;\n        allNativeEvents.forEach(function (domEventName) {\n          \"selectionchange\" !== domEventName &&\n            (nonDelegatedEvents.has(domEventName) ||\n              listenToNativeEvent(domEventName, !1, rootContainerElement),\n            listenToNativeEvent(domEventName, !0, rootContainerElement));\n        });\n        var ownerDocument =\n          9 === rootContainerElement.nodeType\n            ? rootContainerElement\n            : rootContainerElement.ownerDocument;\n        null === ownerDocument ||\n          ownerDocument[listeningMarker] ||\n          ((ownerDocument[listeningMarker] = !0),\n          listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n      }\n    }\n    function addTrappedEventListener(\n      targetContainer,\n      domEventName,\n      eventSystemFlags,\n      isCapturePhaseListener\n    ) {\n      switch (getEventPriority(domEventName)) {\n        case DiscreteEventPriority:\n          var listenerWrapper = dispatchDiscreteEvent;\n          break;\n        case ContinuousEventPriority:\n          listenerWrapper = dispatchContinuousEvent;\n          break;\n        default:\n          listenerWrapper = dispatchEvent;\n      }\n      eventSystemFlags = listenerWrapper.bind(\n        null,\n        domEventName,\n        eventSystemFlags,\n        targetContainer\n      );\n      listenerWrapper = void 0;\n      !passiveBrowserEventsSupported ||\n        (\"touchstart\" !== domEventName &&\n          \"touchmove\" !== domEventName &&\n          \"wheel\" !== domEventName) ||\n        (listenerWrapper = !0);\n      isCapturePhaseListener\n        ? void 0 !== listenerWrapper\n          ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n              capture: !0,\n              passive: listenerWrapper\n            })\n          : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n        : void 0 !== listenerWrapper\n          ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n              passive: listenerWrapper\n            })\n          : targetContainer.addEventListener(\n              domEventName,\n              eventSystemFlags,\n              !1\n            );\n    }\n    function dispatchEventForPluginEventSystem(\n      domEventName,\n      eventSystemFlags,\n      nativeEvent,\n      targetInst$jscomp$0,\n      targetContainer\n    ) {\n      var ancestorInst = targetInst$jscomp$0;\n      if (\n        0 === (eventSystemFlags & 1) &&\n        0 === (eventSystemFlags & 2) &&\n        null !== targetInst$jscomp$0\n      )\n        a: for (;;) {\n          if (null === targetInst$jscomp$0) return;\n          var nodeTag = targetInst$jscomp$0.tag;\n          if (3 === nodeTag || 4 === nodeTag) {\n            var container = targetInst$jscomp$0.stateNode.containerInfo;\n            if (container === targetContainer) break;\n            if (4 === nodeTag)\n              for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n                var grandTag = nodeTag.tag;\n                if (\n                  (3 === grandTag || 4 === grandTag) &&\n                  nodeTag.stateNode.containerInfo === targetContainer\n                )\n                  return;\n                nodeTag = nodeTag.return;\n              }\n            for (; null !== container; ) {\n              nodeTag = getClosestInstanceFromNode(container);\n              if (null === nodeTag) return;\n              grandTag = nodeTag.tag;\n              if (\n                5 === grandTag ||\n                6 === grandTag ||\n                26 === grandTag ||\n                27 === grandTag\n              ) {\n                targetInst$jscomp$0 = ancestorInst = nodeTag;\n                continue a;\n              }\n              container = container.parentNode;\n            }\n          }\n          targetInst$jscomp$0 = targetInst$jscomp$0.return;\n        }\n      batchedUpdates$1(function () {\n        var targetInst = ancestorInst,\n          nativeEventTarget = getEventTarget(nativeEvent),\n          dispatchQueue = [];\n        a: {\n          var reactName = topLevelEventsToReactNames.get(domEventName);\n          if (void 0 !== reactName) {\n            var SyntheticEventCtor = SyntheticEvent,\n              reactEventType = domEventName;\n            switch (domEventName) {\n              case \"keypress\":\n                if (0 === getEventCharCode(nativeEvent)) break a;\n              case \"keydown\":\n              case \"keyup\":\n                SyntheticEventCtor = SyntheticKeyboardEvent;\n                break;\n              case \"focusin\":\n                reactEventType = \"focus\";\n                SyntheticEventCtor = SyntheticFocusEvent;\n                break;\n              case \"focusout\":\n                reactEventType = \"blur\";\n                SyntheticEventCtor = SyntheticFocusEvent;\n                break;\n              case \"beforeblur\":\n              case \"afterblur\":\n                SyntheticEventCtor = SyntheticFocusEvent;\n                break;\n              case \"click\":\n                if (2 === nativeEvent.button) break a;\n              case \"auxclick\":\n              case \"dblclick\":\n              case \"mousedown\":\n              case \"mousemove\":\n              case \"mouseup\":\n              case \"mouseout\":\n              case \"mouseover\":\n              case \"contextmenu\":\n                SyntheticEventCtor = SyntheticMouseEvent;\n                break;\n              case \"drag\":\n              case \"dragend\":\n              case \"dragenter\":\n              case \"dragexit\":\n              case \"dragleave\":\n              case \"dragover\":\n              case \"dragstart\":\n              case \"drop\":\n                SyntheticEventCtor = SyntheticDragEvent;\n                break;\n              case \"touchcancel\":\n              case \"touchend\":\n              case \"touchmove\":\n              case \"touchstart\":\n                SyntheticEventCtor = SyntheticTouchEvent;\n                break;\n              case ANIMATION_END:\n              case ANIMATION_ITERATION:\n              case ANIMATION_START:\n                SyntheticEventCtor = SyntheticAnimationEvent;\n                break;\n              case TRANSITION_END:\n                SyntheticEventCtor = SyntheticTransitionEvent;\n                break;\n              case \"scroll\":\n              case \"scrollend\":\n                SyntheticEventCtor = SyntheticUIEvent;\n                break;\n              case \"wheel\":\n                SyntheticEventCtor = SyntheticWheelEvent;\n                break;\n              case \"copy\":\n              case \"cut\":\n              case \"paste\":\n                SyntheticEventCtor = SyntheticClipboardEvent;\n                break;\n              case \"gotpointercapture\":\n              case \"lostpointercapture\":\n              case \"pointercancel\":\n              case \"pointerdown\":\n              case \"pointermove\":\n              case \"pointerout\":\n              case \"pointerover\":\n              case \"pointerup\":\n                SyntheticEventCtor = SyntheticPointerEvent;\n                break;\n              case \"toggle\":\n              case \"beforetoggle\":\n                SyntheticEventCtor = SyntheticToggleEvent;\n            }\n            var inCapturePhase = 0 !== (eventSystemFlags & 4),\n              accumulateTargetOnly =\n                !inCapturePhase &&\n                (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n              reactEventName = inCapturePhase\n                ? null !== reactName\n                  ? reactName + \"Capture\"\n                  : null\n                : reactName;\n            inCapturePhase = [];\n            for (\n              var instance = targetInst, lastHostComponent;\n              null !== instance;\n\n            ) {\n              var _instance2 = instance;\n              lastHostComponent = _instance2.stateNode;\n              _instance2 = _instance2.tag;\n              (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n                null === lastHostComponent ||\n                null === reactEventName ||\n                ((_instance2 = getListener(instance, reactEventName)),\n                null != _instance2 &&\n                  inCapturePhase.push(\n                    createDispatchListener(\n                      instance,\n                      _instance2,\n                      lastHostComponent\n                    )\n                  ));\n              if (accumulateTargetOnly) break;\n              instance = instance.return;\n            }\n            0 < inCapturePhase.length &&\n              ((reactName = new SyntheticEventCtor(\n                reactName,\n                reactEventType,\n                null,\n                nativeEvent,\n                nativeEventTarget\n              )),\n              dispatchQueue.push({\n                event: reactName,\n                listeners: inCapturePhase\n              }));\n          }\n        }\n        if (0 === (eventSystemFlags & 7)) {\n          a: {\n            reactName =\n              \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n            SyntheticEventCtor =\n              \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n            if (\n              reactName &&\n              nativeEvent !== currentReplayingEvent &&\n              (reactEventType =\n                nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n              (getClosestInstanceFromNode(reactEventType) ||\n                reactEventType[internalContainerInstanceKey])\n            )\n              break a;\n            if (SyntheticEventCtor || reactName) {\n              reactName =\n                nativeEventTarget.window === nativeEventTarget\n                  ? nativeEventTarget\n                  : (reactName = nativeEventTarget.ownerDocument)\n                    ? reactName.defaultView || reactName.parentWindow\n                    : window;\n              if (SyntheticEventCtor) {\n                if (\n                  ((reactEventType =\n                    nativeEvent.relatedTarget || nativeEvent.toElement),\n                  (SyntheticEventCtor = targetInst),\n                  (reactEventType = reactEventType\n                    ? getClosestInstanceFromNode(reactEventType)\n                    : null),\n                  null !== reactEventType &&\n                    ((accumulateTargetOnly =\n                      getNearestMountedFiber(reactEventType)),\n                    (inCapturePhase = reactEventType.tag),\n                    reactEventType !== accumulateTargetOnly ||\n                      (5 !== inCapturePhase &&\n                        27 !== inCapturePhase &&\n                        6 !== inCapturePhase)))\n                )\n                  reactEventType = null;\n              } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n              if (SyntheticEventCtor !== reactEventType) {\n                inCapturePhase = SyntheticMouseEvent;\n                _instance2 = \"onMouseLeave\";\n                reactEventName = \"onMouseEnter\";\n                instance = \"mouse\";\n                if (\n                  \"pointerout\" === domEventName ||\n                  \"pointerover\" === domEventName\n                )\n                  (inCapturePhase = SyntheticPointerEvent),\n                    (_instance2 = \"onPointerLeave\"),\n                    (reactEventName = \"onPointerEnter\"),\n                    (instance = \"pointer\");\n                accumulateTargetOnly =\n                  null == SyntheticEventCtor\n                    ? reactName\n                    : getNodeFromInstance(SyntheticEventCtor);\n                lastHostComponent =\n                  null == reactEventType\n                    ? reactName\n                    : getNodeFromInstance(reactEventType);\n                reactName = new inCapturePhase(\n                  _instance2,\n                  instance + \"leave\",\n                  SyntheticEventCtor,\n                  nativeEvent,\n                  nativeEventTarget\n                );\n                reactName.target = accumulateTargetOnly;\n                reactName.relatedTarget = lastHostComponent;\n                _instance2 = null;\n                getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n                  ((inCapturePhase = new inCapturePhase(\n                    reactEventName,\n                    instance + \"enter\",\n                    reactEventType,\n                    nativeEvent,\n                    nativeEventTarget\n                  )),\n                  (inCapturePhase.target = lastHostComponent),\n                  (inCapturePhase.relatedTarget = accumulateTargetOnly),\n                  (_instance2 = inCapturePhase));\n                accumulateTargetOnly = _instance2;\n                if (SyntheticEventCtor && reactEventType)\n                  b: {\n                    inCapturePhase = getParent;\n                    reactEventName = SyntheticEventCtor;\n                    instance = reactEventType;\n                    lastHostComponent = 0;\n                    for (\n                      _instance2 = reactEventName;\n                      _instance2;\n                      _instance2 = inCapturePhase(_instance2)\n                    )\n                      lastHostComponent++;\n                    _instance2 = 0;\n                    for (\n                      var tempB = instance;\n                      tempB;\n                      tempB = inCapturePhase(tempB)\n                    )\n                      _instance2++;\n                    for (; 0 < lastHostComponent - _instance2; )\n                      (reactEventName = inCapturePhase(reactEventName)),\n                        lastHostComponent--;\n                    for (; 0 < _instance2 - lastHostComponent; )\n                      (instance = inCapturePhase(instance)), _instance2--;\n                    for (; lastHostComponent--; ) {\n                      if (\n                        reactEventName === instance ||\n                        (null !== instance &&\n                          reactEventName === instance.alternate)\n                      ) {\n                        inCapturePhase = reactEventName;\n                        break b;\n                      }\n                      reactEventName = inCapturePhase(reactEventName);\n                      instance = inCapturePhase(instance);\n                    }\n                    inCapturePhase = null;\n                  }\n                else inCapturePhase = null;\n                null !== SyntheticEventCtor &&\n                  accumulateEnterLeaveListenersForEvent(\n                    dispatchQueue,\n                    reactName,\n                    SyntheticEventCtor,\n                    inCapturePhase,\n                    !1\n                  );\n                null !== reactEventType &&\n                  null !== accumulateTargetOnly &&\n                  accumulateEnterLeaveListenersForEvent(\n                    dispatchQueue,\n                    accumulateTargetOnly,\n                    reactEventType,\n                    inCapturePhase,\n                    !0\n                  );\n              }\n            }\n          }\n          a: {\n            reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n            SyntheticEventCtor =\n              reactName.nodeName && reactName.nodeName.toLowerCase();\n            if (\n              \"select\" === SyntheticEventCtor ||\n              (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n            )\n              var getTargetInstFunc = getTargetInstForChangeEvent;\n            else if (isTextInputElement(reactName))\n              if (isInputEventSupported)\n                getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n              else {\n                getTargetInstFunc = getTargetInstForInputEventPolyfill;\n                var handleEventFunc = handleEventsForInputEventPolyfill;\n              }\n            else\n              (SyntheticEventCtor = reactName.nodeName),\n                !SyntheticEventCtor ||\n                \"input\" !== SyntheticEventCtor.toLowerCase() ||\n                (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n                  ? targetInst &&\n                    isCustomElement(targetInst.elementType) &&\n                    (getTargetInstFunc = getTargetInstForChangeEvent)\n                  : (getTargetInstFunc = getTargetInstForClickEvent);\n            if (\n              getTargetInstFunc &&\n              (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n            ) {\n              createAndAccumulateChangeEvent(\n                dispatchQueue,\n                getTargetInstFunc,\n                nativeEvent,\n                nativeEventTarget\n              );\n              break a;\n            }\n            handleEventFunc &&\n              handleEventFunc(domEventName, reactName, targetInst);\n            \"focusout\" === domEventName &&\n              targetInst &&\n              \"number\" === reactName.type &&\n              null != targetInst.memoizedProps.value &&\n              setDefaultValue(reactName, \"number\", reactName.value);\n          }\n          handleEventFunc = targetInst\n            ? getNodeFromInstance(targetInst)\n            : window;\n          switch (domEventName) {\n            case \"focusin\":\n              if (\n                isTextInputElement(handleEventFunc) ||\n                \"true\" === handleEventFunc.contentEditable\n              )\n                (activeElement = handleEventFunc),\n                  (activeElementInst = targetInst),\n                  (lastSelection = null);\n              break;\n            case \"focusout\":\n              lastSelection = activeElementInst = activeElement = null;\n              break;\n            case \"mousedown\":\n              mouseDown = !0;\n              break;\n            case \"contextmenu\":\n            case \"mouseup\":\n            case \"dragend\":\n              mouseDown = !1;\n              constructSelectEvent(\n                dispatchQueue,\n                nativeEvent,\n                nativeEventTarget\n              );\n              break;\n            case \"selectionchange\":\n              if (skipSelectionChangeEvent) break;\n            case \"keydown\":\n            case \"keyup\":\n              constructSelectEvent(\n                dispatchQueue,\n                nativeEvent,\n                nativeEventTarget\n              );\n          }\n          var fallbackData;\n          if (canUseCompositionEvent)\n            b: {\n              switch (domEventName) {\n                case \"compositionstart\":\n                  var eventType = \"onCompositionStart\";\n                  break b;\n                case \"compositionend\":\n                  eventType = \"onCompositionEnd\";\n                  break b;\n                case \"compositionupdate\":\n                  eventType = \"onCompositionUpdate\";\n                  break b;\n              }\n              eventType = void 0;\n            }\n          else\n            isComposing\n              ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n                (eventType = \"onCompositionEnd\")\n              : \"keydown\" === domEventName &&\n                nativeEvent.keyCode === START_KEYCODE &&\n                (eventType = \"onCompositionStart\");\n          eventType &&\n            (useFallbackCompositionData &&\n              \"ko\" !== nativeEvent.locale &&\n              (isComposing || \"onCompositionStart\" !== eventType\n                ? \"onCompositionEnd\" === eventType &&\n                  isComposing &&\n                  (fallbackData = getData())\n                : ((root = nativeEventTarget),\n                  (startText = \"value\" in root ? root.value : root.textContent),\n                  (isComposing = !0))),\n            (handleEventFunc = accumulateTwoPhaseListeners(\n              targetInst,\n              eventType\n            )),\n            0 < handleEventFunc.length &&\n              ((eventType = new SyntheticCompositionEvent(\n                eventType,\n                domEventName,\n                null,\n                nativeEvent,\n                nativeEventTarget\n              )),\n              dispatchQueue.push({\n                event: eventType,\n                listeners: handleEventFunc\n              }),\n              fallbackData\n                ? (eventType.data = fallbackData)\n                : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n                  null !== fallbackData && (eventType.data = fallbackData))));\n          if (\n            (fallbackData = canUseTextInputEvent\n              ? getNativeBeforeInputChars(domEventName, nativeEvent)\n              : getFallbackBeforeInputChars(domEventName, nativeEvent))\n          )\n            (eventType = accumulateTwoPhaseListeners(\n              targetInst,\n              \"onBeforeInput\"\n            )),\n              0 < eventType.length &&\n                ((handleEventFunc = new SyntheticInputEvent(\n                  \"onBeforeInput\",\n                  \"beforeinput\",\n                  null,\n                  nativeEvent,\n                  nativeEventTarget\n                )),\n                dispatchQueue.push({\n                  event: handleEventFunc,\n                  listeners: eventType\n                }),\n                (handleEventFunc.data = fallbackData));\n          extractEvents$1(\n            dispatchQueue,\n            domEventName,\n            targetInst,\n            nativeEvent,\n            nativeEventTarget\n          );\n        }\n        processDispatchQueue(dispatchQueue, eventSystemFlags);\n      });\n    }\n    function createDispatchListener(instance, listener, currentTarget) {\n      return {\n        instance: instance,\n        listener: listener,\n        currentTarget: currentTarget\n      };\n    }\n    function accumulateTwoPhaseListeners(targetFiber, reactName) {\n      for (\n        var captureName = reactName + \"Capture\", listeners = [];\n        null !== targetFiber;\n\n      ) {\n        var _instance3 = targetFiber,\n          stateNode = _instance3.stateNode;\n        _instance3 = _instance3.tag;\n        (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n          null === stateNode ||\n          ((_instance3 = getListener(targetFiber, captureName)),\n          null != _instance3 &&\n            listeners.unshift(\n              createDispatchListener(targetFiber, _instance3, stateNode)\n            ),\n          (_instance3 = getListener(targetFiber, reactName)),\n          null != _instance3 &&\n            listeners.push(\n              createDispatchListener(targetFiber, _instance3, stateNode)\n            ));\n        if (3 === targetFiber.tag) return listeners;\n        targetFiber = targetFiber.return;\n      }\n      return [];\n    }\n    function getParent(inst) {\n      if (null === inst) return null;\n      do inst = inst.return;\n      while (inst && 5 !== inst.tag && 27 !== inst.tag);\n      return inst ? inst : null;\n    }\n    function accumulateEnterLeaveListenersForEvent(\n      dispatchQueue,\n      event,\n      target,\n      common,\n      inCapturePhase\n    ) {\n      for (\n        var registrationName = event._reactName, listeners = [];\n        null !== target && target !== common;\n\n      ) {\n        var _instance4 = target,\n          alternate = _instance4.alternate,\n          stateNode = _instance4.stateNode;\n        _instance4 = _instance4.tag;\n        if (null !== alternate && alternate === common) break;\n        (5 !== _instance4 && 26 !== _instance4 && 27 !== _instance4) ||\n          null === stateNode ||\n          ((alternate = stateNode),\n          inCapturePhase\n            ? ((stateNode = getListener(target, registrationName)),\n              null != stateNode &&\n                listeners.unshift(\n                  createDispatchListener(target, stateNode, alternate)\n                ))\n            : inCapturePhase ||\n              ((stateNode = getListener(target, registrationName)),\n              null != stateNode &&\n                listeners.push(\n                  createDispatchListener(target, stateNode, alternate)\n                )));\n        target = target.return;\n      }\n      0 !== listeners.length &&\n        dispatchQueue.push({ event: event, listeners: listeners });\n    }\n    function validatePropertiesInDevelopment(type, props) {\n      validateProperties$2(type, props);\n      (\"input\" !== type && \"textarea\" !== type && \"select\" !== type) ||\n        null == props ||\n        null !== props.value ||\n        didWarnValueNull ||\n        ((didWarnValueNull = !0),\n        \"select\" === type && props.multiple\n          ? console.error(\n              \"`value` prop on `%s` should not be null. Consider using an empty array when `multiple` is set to `true` to clear the component or `undefined` for uncontrolled components.\",\n              type\n            )\n          : console.error(\n              \"`value` prop on `%s` should not be null. Consider using an empty string to clear the component or `undefined` for uncontrolled components.\",\n              type\n            ));\n      var eventRegistry = {\n        registrationNameDependencies: registrationNameDependencies,\n        possibleRegistrationNames: possibleRegistrationNames\n      };\n      isCustomElement(type) ||\n        \"string\" === typeof props.is ||\n        warnUnknownProperties(type, props, eventRegistry);\n      props.contentEditable &&\n        !props.suppressContentEditableWarning &&\n        null != props.children &&\n        console.error(\n          \"A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional.\"\n        );\n    }\n    function warnForPropDifference(\n      propName,\n      serverValue,\n      clientValue,\n      serverDifferences\n    ) {\n      serverValue !== clientValue &&\n        ((clientValue = normalizeMarkupForTextOrAttribute(clientValue)),\n        normalizeMarkupForTextOrAttribute(serverValue) !== clientValue &&\n          (serverDifferences[propName] = serverValue));\n    }\n    function warnForExtraAttributes(\n      domElement,\n      attributeNames,\n      serverDifferences\n    ) {\n      attributeNames.forEach(function (attributeName) {\n        serverDifferences[getPropNameFromAttributeName(attributeName)] =\n          \"style\" === attributeName\n            ? getStylesObjectFromElement(domElement)\n            : domElement.getAttribute(attributeName);\n      });\n    }\n    function warnForInvalidEventListener(registrationName, listener) {\n      !1 === listener\n        ? console.error(\n            \"Expected `%s` listener to be a function, instead got `false`.\\n\\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.\",\n            registrationName,\n            registrationName,\n            registrationName\n          )\n        : console.error(\n            \"Expected `%s` listener to be a function, instead got a value of `%s` type.\",\n            registrationName,\n            typeof listener\n          );\n    }\n    function normalizeHTML(parent, html) {\n      parent =\n        parent.namespaceURI === MATH_NAMESPACE ||\n        parent.namespaceURI === SVG_NAMESPACE\n          ? parent.ownerDocument.createElementNS(\n              parent.namespaceURI,\n              parent.tagName\n            )\n          : parent.ownerDocument.createElement(parent.tagName);\n      parent.innerHTML = html;\n      return parent.innerHTML;\n    }\n    function normalizeMarkupForTextOrAttribute(markup) {\n      willCoercionThrow(markup) &&\n        (console.error(\n          \"The provided HTML markup uses a value of unsupported type %s. This value must be coerced to a string before using it here.\",\n          typeName(markup)\n        ),\n        testStringCoercion(markup));\n      return (\"string\" === typeof markup ? markup : \"\" + markup)\n        .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n        .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n    }\n    function checkForUnmatchedText(serverText, clientText) {\n      clientText = normalizeMarkupForTextOrAttribute(clientText);\n      return normalizeMarkupForTextOrAttribute(serverText) === clientText\n        ? !0\n        : !1;\n    }\n    function setProp(domElement, tag, key, value, props, prevValue) {\n      switch (key) {\n        case \"children\":\n          if (\"string\" === typeof value)\n            validateTextNesting(value, tag, !1),\n              \"body\" === tag ||\n                (\"textarea\" === tag && \"\" === value) ||\n                setTextContent(domElement, value);\n          else if (\"number\" === typeof value || \"bigint\" === typeof value)\n            validateTextNesting(\"\" + value, tag, !1),\n              \"body\" !== tag && setTextContent(domElement, \"\" + value);\n          break;\n        case \"className\":\n          setValueForKnownAttribute(domElement, \"class\", value);\n          break;\n        case \"tabIndex\":\n          setValueForKnownAttribute(domElement, \"tabindex\", value);\n          break;\n        case \"dir\":\n        case \"role\":\n        case \"viewBox\":\n        case \"width\":\n        case \"height\":\n          setValueForKnownAttribute(domElement, key, value);\n          break;\n        case \"style\":\n          setValueForStyles(domElement, value, prevValue);\n          break;\n        case \"data\":\n          if (\"object\" !== tag) {\n            setValueForKnownAttribute(domElement, \"data\", value);\n            break;\n          }\n        case \"src\":\n        case \"href\":\n          if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n            \"src\" === key\n              ? console.error(\n                  'An empty string (\"\") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n                  key,\n                  key\n                )\n              : console.error(\n                  'An empty string (\"\") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n                  key,\n                  key\n                );\n            domElement.removeAttribute(key);\n            break;\n          }\n          if (\n            null == value ||\n            \"function\" === typeof value ||\n            \"symbol\" === typeof value ||\n            \"boolean\" === typeof value\n          ) {\n            domElement.removeAttribute(key);\n            break;\n          }\n          checkAttributeStringCoercion(value, key);\n          value = sanitizeURL(\"\" + value);\n          domElement.setAttribute(key, value);\n          break;\n        case \"action\":\n        case \"formAction\":\n          null != value &&\n            (\"form\" === tag\n              ? \"formAction\" === key\n                ? console.error(\n                    \"You can only pass the formAction prop to <input> or <button>. Use the action prop on <form>.\"\n                  )\n                : \"function\" === typeof value &&\n                  ((null == props.encType && null == props.method) ||\n                    didWarnFormActionMethod ||\n                    ((didWarnFormActionMethod = !0),\n                    console.error(\n                      \"Cannot specify a encType or method for a form that specifies a function as the action. React provides those automatically. They will get overridden.\"\n                    )),\n                  null == props.target ||\n                    didWarnFormActionTarget ||\n                    ((didWarnFormActionTarget = !0),\n                    console.error(\n                      \"Cannot specify a target for a form that specifies a function as the action. The function will always be executed in the same window.\"\n                    )))\n              : \"input\" === tag || \"button\" === tag\n                ? \"action\" === key\n                  ? console.error(\n                      \"You can only pass the action prop to <form>. Use the formAction prop on <input> or <button>.\"\n                    )\n                  : \"input\" !== tag ||\n                      \"submit\" === props.type ||\n                      \"image\" === props.type ||\n                      didWarnFormActionType\n                    ? \"button\" !== tag ||\n                      null == props.type ||\n                      \"submit\" === props.type ||\n                      didWarnFormActionType\n                      ? \"function\" === typeof value &&\n                        (null == props.name ||\n                          didWarnFormActionName ||\n                          ((didWarnFormActionName = !0),\n                          console.error(\n                            'Cannot specify a \"name\" prop for a button that specifies a function as a formAction. React needs it to encode which action should be invoked. It will get overridden.'\n                          )),\n                        (null == props.formEncType &&\n                          null == props.formMethod) ||\n                          didWarnFormActionMethod ||\n                          ((didWarnFormActionMethod = !0),\n                          console.error(\n                            \"Cannot specify a formEncType or formMethod for a button that specifies a function as a formAction. React provides those automatically. They will get overridden.\"\n                          )),\n                        null == props.formTarget ||\n                          didWarnFormActionTarget ||\n                          ((didWarnFormActionTarget = !0),\n                          console.error(\n                            \"Cannot specify a formTarget for a button that specifies a function as a formAction. The function will always be executed in the same window.\"\n                          )))\n                      : ((didWarnFormActionType = !0),\n                        console.error(\n                          'A button can only specify a formAction along with type=\"submit\" or no type.'\n                        ))\n                    : ((didWarnFormActionType = !0),\n                      console.error(\n                        'An input can only specify a formAction along with type=\"submit\" or type=\"image\".'\n                      ))\n                : \"action\" === key\n                  ? console.error(\n                      \"You can only pass the action prop to <form>.\"\n                    )\n                  : console.error(\n                      \"You can only pass the formAction prop to <input> or <button>.\"\n                    ));\n          if (\"function\" === typeof value) {\n            domElement.setAttribute(\n              key,\n              \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n            );\n            break;\n          } else\n            \"function\" === typeof prevValue &&\n              (\"formAction\" === key\n                ? (\"input\" !== tag &&\n                    setProp(domElement, tag, \"name\", props.name, props, null),\n                  setProp(\n                    domElement,\n                    tag,\n                    \"formEncType\",\n                    props.formEncType,\n                    props,\n                    null\n                  ),\n                  setProp(\n                    domElement,\n                    tag,\n                    \"formMethod\",\n                    props.formMethod,\n                    props,\n                    null\n                  ),\n                  setProp(\n                    domElement,\n                    tag,\n                    \"formTarget\",\n                    props.formTarget,\n                    props,\n                    null\n                  ))\n                : (setProp(\n                    domElement,\n                    tag,\n                    \"encType\",\n                    props.encType,\n                    props,\n                    null\n                  ),\n                  setProp(domElement, tag, \"method\", props.method, props, null),\n                  setProp(\n                    domElement,\n                    tag,\n                    \"target\",\n                    props.target,\n                    props,\n                    null\n                  )));\n          if (\n            null == value ||\n            \"symbol\" === typeof value ||\n            \"boolean\" === typeof value\n          ) {\n            domElement.removeAttribute(key);\n            break;\n          }\n          checkAttributeStringCoercion(value, key);\n          value = sanitizeURL(\"\" + value);\n          domElement.setAttribute(key, value);\n          break;\n        case \"onClick\":\n          null != value &&\n            (\"function\" !== typeof value &&\n              warnForInvalidEventListener(key, value),\n            (domElement.onclick = noop$1));\n          break;\n        case \"onScroll\":\n          null != value &&\n            (\"function\" !== typeof value &&\n              warnForInvalidEventListener(key, value),\n            listenToNonDelegatedEvent(\"scroll\", domElement));\n          break;\n        case \"onScrollEnd\":\n          null != value &&\n            (\"function\" !== typeof value &&\n              warnForInvalidEventListener(key, value),\n            listenToNonDelegatedEvent(\"scrollend\", domElement));\n          break;\n        case \"dangerouslySetInnerHTML\":\n          if (null != value) {\n            if (\"object\" !== typeof value || !(\"__html\" in value))\n              throw Error(\n                \"`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information.\"\n              );\n            key = value.__html;\n            if (null != key) {\n              if (null != props.children)\n                throw Error(\n                  \"Can only set one of `children` or `props.dangerouslySetInnerHTML`.\"\n                );\n              domElement.innerHTML = key;\n            }\n          }\n          break;\n        case \"multiple\":\n          domElement.multiple =\n            value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n          break;\n        case \"muted\":\n          domElement.muted =\n            value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n          break;\n        case \"suppressContentEditableWarning\":\n        case \"suppressHydrationWarning\":\n        case \"defaultValue\":\n        case \"defaultChecked\":\n        case \"innerHTML\":\n        case \"ref\":\n          break;\n        case \"autoFocus\":\n          break;\n        case \"xlinkHref\":\n          if (\n            null == value ||\n            \"function\" === typeof value ||\n            \"boolean\" === typeof value ||\n            \"symbol\" === typeof value\n          ) {\n            domElement.removeAttribute(\"xlink:href\");\n            break;\n          }\n          checkAttributeStringCoercion(value, key);\n          key = sanitizeURL(\"\" + value);\n          domElement.setAttributeNS(xlinkNamespace, \"xlink:href\", key);\n          break;\n        case \"contentEditable\":\n        case \"spellCheck\":\n        case \"draggable\":\n        case \"value\":\n        case \"autoReverse\":\n        case \"externalResourcesRequired\":\n        case \"focusable\":\n        case \"preserveAlpha\":\n          null != value &&\n          \"function\" !== typeof value &&\n          \"symbol\" !== typeof value\n            ? (checkAttributeStringCoercion(value, key),\n              domElement.setAttribute(key, \"\" + value))\n            : domElement.removeAttribute(key);\n          break;\n        case \"inert\":\n          \"\" !== value ||\n            didWarnForNewBooleanPropsWithEmptyValue[key] ||\n            ((didWarnForNewBooleanPropsWithEmptyValue[key] = !0),\n            console.error(\n              \"Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.\",\n              key\n            ));\n        case \"allowFullScreen\":\n        case \"async\":\n        case \"autoPlay\":\n        case \"controls\":\n        case \"default\":\n        case \"defer\":\n        case \"disabled\":\n        case \"disablePictureInPicture\":\n        case \"disableRemotePlayback\":\n        case \"formNoValidate\":\n        case \"hidden\":\n        case \"loop\":\n        case \"noModule\":\n        case \"noValidate\":\n        case \"open\":\n        case \"playsInline\":\n        case \"readOnly\":\n        case \"required\":\n        case \"reversed\":\n        case \"scoped\":\n        case \"seamless\":\n        case \"itemScope\":\n          value && \"function\" !== typeof value && \"symbol\" !== typeof value\n            ? domElement.setAttribute(key, \"\")\n            : domElement.removeAttribute(key);\n          break;\n        case \"capture\":\n        case \"download\":\n          !0 === value\n            ? domElement.setAttribute(key, \"\")\n            : !1 !== value &&\n                null != value &&\n                \"function\" !== typeof value &&\n                \"symbol\" !== typeof value\n              ? (checkAttributeStringCoercion(value, key),\n                domElement.setAttribute(key, value))\n              : domElement.removeAttribute(key);\n          break;\n        case \"cols\":\n        case \"rows\":\n        case \"size\":\n        case \"span\":\n          null != value &&\n          \"function\" !== typeof value &&\n          \"symbol\" !== typeof value &&\n          !isNaN(value) &&\n          1 <= value\n            ? (checkAttributeStringCoercion(value, key),\n              domElement.setAttribute(key, value))\n            : domElement.removeAttribute(key);\n          break;\n        case \"rowSpan\":\n        case \"start\":\n          null == value ||\n          \"function\" === typeof value ||\n          \"symbol\" === typeof value ||\n          isNaN(value)\n            ? domElement.removeAttribute(key)\n            : (checkAttributeStringCoercion(value, key),\n              domElement.setAttribute(key, value));\n          break;\n        case \"popover\":\n          listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n          listenToNonDelegatedEvent(\"toggle\", domElement);\n          setValueForAttribute(domElement, \"popover\", value);\n          break;\n        case \"xlinkActuate\":\n          setValueForNamespacedAttribute(\n            domElement,\n            xlinkNamespace,\n            \"xlink:actuate\",\n            value\n          );\n          break;\n        case \"xlinkArcrole\":\n          setValueForNamespacedAttribute(\n            domElement,\n            xlinkNamespace,\n            \"xlink:arcrole\",\n            value\n          );\n          break;\n        case \"xlinkRole\":\n          setValueForNamespacedAttribute(\n            domElement,\n            xlinkNamespace,\n            \"xlink:role\",\n            value\n          );\n          break;\n        case \"xlinkShow\":\n          setValueForNamespacedAttribute(\n            domElement,\n            xlinkNamespace,\n            \"xlink:show\",\n            value\n          );\n          break;\n        case \"xlinkTitle\":\n          setValueForNamespacedAttribute(\n            domElement,\n            xlinkNamespace,\n            \"xlink:title\",\n            value\n          );\n          break;\n        case \"xlinkType\":\n          setValueForNamespacedAttribute(\n            domElement,\n            xlinkNamespace,\n            \"xlink:type\",\n            value\n          );\n          break;\n        case \"xmlBase\":\n          setValueForNamespacedAttribute(\n            domElement,\n            xmlNamespace,\n            \"xml:base\",\n            value\n          );\n          break;\n        case \"xmlLang\":\n          setValueForNamespacedAttribute(\n            domElement,\n            xmlNamespace,\n            \"xml:lang\",\n            value\n          );\n          break;\n        case \"xmlSpace\":\n          setValueForNamespacedAttribute(\n            domElement,\n            xmlNamespace,\n            \"xml:space\",\n            value\n          );\n          break;\n        case \"is\":\n          null != prevValue &&\n            console.error(\n              'Cannot update the \"is\" prop after it has been initialized.'\n            );\n          setValueForAttribute(domElement, \"is\", value);\n          break;\n        case \"innerText\":\n        case \"textContent\":\n          break;\n        case \"popoverTarget\":\n          didWarnPopoverTargetObject ||\n            null == value ||\n            \"object\" !== typeof value ||\n            ((didWarnPopoverTargetObject = !0),\n            console.error(\n              \"The `popoverTarget` prop expects the ID of an Element as a string. Received %s instead.\",\n              value\n            ));\n        default:\n          !(2 < key.length) ||\n          (\"o\" !== key[0] && \"O\" !== key[0]) ||\n          (\"n\" !== key[1] && \"N\" !== key[1])\n            ? ((key = getAttributeAlias(key)),\n              setValueForAttribute(domElement, key, value))\n            : registrationNameDependencies.hasOwnProperty(key) &&\n              null != value &&\n              \"function\" !== typeof value &&\n              warnForInvalidEventListener(key, value);\n      }\n    }\n    function setPropOnCustomElement(\n      domElement,\n      tag,\n      key,\n      value,\n      props,\n      prevValue\n    ) {\n      switch (key) {\n        case \"style\":\n          setValueForStyles(domElement, value, prevValue);\n          break;\n        case \"dangerouslySetInnerHTML\":\n          if (null != value) {\n            if (\"object\" !== typeof value || !(\"__html\" in value))\n              throw Error(\n                \"`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information.\"\n              );\n            key = value.__html;\n            if (null != key) {\n              if (null != props.children)\n                throw Error(\n                  \"Can only set one of `children` or `props.dangerouslySetInnerHTML`.\"\n                );\n              domElement.innerHTML = key;\n            }\n          }\n          break;\n        case \"children\":\n          \"string\" === typeof value\n            ? setTextContent(domElement, value)\n            : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n              setTextContent(domElement, \"\" + value);\n          break;\n        case \"onScroll\":\n          null != value &&\n            (\"function\" !== typeof value &&\n              warnForInvalidEventListener(key, value),\n            listenToNonDelegatedEvent(\"scroll\", domElement));\n          break;\n        case \"onScrollEnd\":\n          null != value &&\n            (\"function\" !== typeof value &&\n              warnForInvalidEventListener(key, value),\n            listenToNonDelegatedEvent(\"scrollend\", domElement));\n          break;\n        case \"onClick\":\n          null != value &&\n            (\"function\" !== typeof value &&\n              warnForInvalidEventListener(key, value),\n            (domElement.onclick = noop$1));\n          break;\n        case \"suppressContentEditableWarning\":\n        case \"suppressHydrationWarning\":\n        case \"innerHTML\":\n        case \"ref\":\n          break;\n        case \"innerText\":\n        case \"textContent\":\n          break;\n        default:\n          if (registrationNameDependencies.hasOwnProperty(key))\n            null != value &&\n              \"function\" !== typeof value &&\n              warnForInvalidEventListener(key, value);\n          else\n            a: {\n              if (\n                \"o\" === key[0] &&\n                \"n\" === key[1] &&\n                ((props = key.endsWith(\"Capture\")),\n                (tag = key.slice(2, props ? key.length - 7 : void 0)),\n                (prevValue = domElement[internalPropsKey] || null),\n                (prevValue = null != prevValue ? prevValue[key] : null),\n                \"function\" === typeof prevValue &&\n                  domElement.removeEventListener(tag, prevValue, props),\n                \"function\" === typeof value)\n              ) {\n                \"function\" !== typeof prevValue &&\n                  null !== prevValue &&\n                  (key in domElement\n                    ? (domElement[key] = null)\n                    : domElement.hasAttribute(key) &&\n                      domElement.removeAttribute(key));\n                domElement.addEventListener(tag, value, props);\n                break a;\n              }\n              key in domElement\n                ? (domElement[key] = value)\n                : !0 === value\n                  ? domElement.setAttribute(key, \"\")\n                  : setValueForAttribute(domElement, key, value);\n            }\n      }\n    }\n    function setInitialProperties(domElement, tag, props) {\n      validatePropertiesInDevelopment(tag, props);\n      switch (tag) {\n        case \"div\":\n        case \"span\":\n        case \"svg\":\n        case \"path\":\n        case \"a\":\n        case \"g\":\n        case \"p\":\n        case \"li\":\n          break;\n        case \"img\":\n          listenToNonDelegatedEvent(\"error\", domElement);\n          listenToNonDelegatedEvent(\"load\", domElement);\n          var hasSrc = !1,\n            hasSrcSet = !1,\n            propKey;\n          for (propKey in props)\n            if (props.hasOwnProperty(propKey)) {\n              var propValue = props[propKey];\n              if (null != propValue)\n                switch (propKey) {\n                  case \"src\":\n                    hasSrc = !0;\n                    break;\n                  case \"srcSet\":\n                    hasSrcSet = !0;\n                    break;\n                  case \"children\":\n                  case \"dangerouslySetInnerHTML\":\n                    throw Error(\n                      tag +\n                        \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n                    );\n                  default:\n                    setProp(domElement, tag, propKey, propValue, props, null);\n                }\n            }\n          hasSrcSet &&\n            setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n          hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n          return;\n        case \"input\":\n          checkControlledValueProps(\"input\", props);\n          listenToNonDelegatedEvent(\"invalid\", domElement);\n          var defaultValue = (propKey = propValue = hasSrcSet = null),\n            checked = null,\n            defaultChecked = null;\n          for (hasSrc in props)\n            if (props.hasOwnProperty(hasSrc)) {\n              var _propValue = props[hasSrc];\n              if (null != _propValue)\n                switch (hasSrc) {\n                  case \"name\":\n                    hasSrcSet = _propValue;\n                    break;\n                  case \"type\":\n                    propValue = _propValue;\n                    break;\n                  case \"checked\":\n                    checked = _propValue;\n                    break;\n                  case \"defaultChecked\":\n                    defaultChecked = _propValue;\n                    break;\n                  case \"value\":\n                    propKey = _propValue;\n                    break;\n                  case \"defaultValue\":\n                    defaultValue = _propValue;\n                    break;\n                  case \"children\":\n                  case \"dangerouslySetInnerHTML\":\n                    if (null != _propValue)\n                      throw Error(\n                        tag +\n                          \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n                      );\n                    break;\n                  default:\n                    setProp(domElement, tag, hasSrc, _propValue, props, null);\n                }\n            }\n          validateInputProps(domElement, props);\n          initInput(\n            domElement,\n            propKey,\n            defaultValue,\n            checked,\n            defaultChecked,\n            propValue,\n            hasSrcSet,\n            !1\n          );\n          return;\n        case \"select\":\n          checkControlledValueProps(\"select\", props);\n          listenToNonDelegatedEvent(\"invalid\", domElement);\n          hasSrc = propValue = propKey = null;\n          for (hasSrcSet in props)\n            if (\n              props.hasOwnProperty(hasSrcSet) &&\n              ((defaultValue = props[hasSrcSet]), null != defaultValue)\n            )\n              switch (hasSrcSet) {\n                case \"value\":\n                  propKey = defaultValue;\n                  break;\n                case \"defaultValue\":\n                  propValue = defaultValue;\n                  break;\n                case \"multiple\":\n                  hasSrc = defaultValue;\n                default:\n                  setProp(\n                    domElement,\n                    tag,\n                    hasSrcSet,\n                    defaultValue,\n                    props,\n                    null\n                  );\n              }\n          validateSelectProps(domElement, props);\n          tag = propKey;\n          props = propValue;\n          domElement.multiple = !!hasSrc;\n          null != tag\n            ? updateOptions(domElement, !!hasSrc, tag, !1)\n            : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n          return;\n        case \"textarea\":\n          checkControlledValueProps(\"textarea\", props);\n          listenToNonDelegatedEvent(\"invalid\", domElement);\n          propKey = hasSrcSet = hasSrc = null;\n          for (propValue in props)\n            if (\n              props.hasOwnProperty(propValue) &&\n              ((defaultValue = props[propValue]), null != defaultValue)\n            )\n              switch (propValue) {\n                case \"value\":\n                  hasSrc = defaultValue;\n                  break;\n                case \"defaultValue\":\n                  hasSrcSet = defaultValue;\n                  break;\n                case \"children\":\n                  propKey = defaultValue;\n                  break;\n                case \"dangerouslySetInnerHTML\":\n                  if (null != defaultValue)\n                    throw Error(\n                      \"`dangerouslySetInnerHTML` does not make sense on <textarea>.\"\n                    );\n                  break;\n                default:\n                  setProp(\n                    domElement,\n                    tag,\n                    propValue,\n                    defaultValue,\n                    props,\n                    null\n                  );\n              }\n          validateTextareaProps(domElement, props);\n          initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n          return;\n        case \"option\":\n          validateOptionProps(domElement, props);\n          for (checked in props)\n            if (\n              props.hasOwnProperty(checked) &&\n              ((hasSrc = props[checked]), null != hasSrc)\n            )\n              switch (checked) {\n                case \"selected\":\n                  domElement.selected =\n                    hasSrc &&\n                    \"function\" !== typeof hasSrc &&\n                    \"symbol\" !== typeof hasSrc;\n                  break;\n                default:\n                  setProp(domElement, tag, checked, hasSrc, props, null);\n              }\n          return;\n        case \"dialog\":\n          listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n          listenToNonDelegatedEvent(\"toggle\", domElement);\n          listenToNonDelegatedEvent(\"cancel\", domElement);\n          listenToNonDelegatedEvent(\"close\", domElement);\n          break;\n        case \"iframe\":\n        case \"object\":\n          listenToNonDelegatedEvent(\"load\", domElement);\n          break;\n        case \"video\":\n        case \"audio\":\n          for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n            listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n          break;\n        case \"image\":\n          listenToNonDelegatedEvent(\"error\", domElement);\n          listenToNonDelegatedEvent(\"load\", domElement);\n          break;\n        case \"details\":\n          listenToNonDelegatedEvent(\"toggle\", domElement);\n          break;\n        case \"embed\":\n        case \"source\":\n        case \"link\":\n          listenToNonDelegatedEvent(\"error\", domElement),\n            listenToNonDelegatedEvent(\"load\", domElement);\n        case \"area\":\n        case \"base\":\n        case \"br\":\n        case \"col\":\n        case \"hr\":\n        case \"keygen\":\n        case \"meta\":\n        case \"param\":\n        case \"track\":\n        case \"wbr\":\n        case \"menuitem\":\n          for (defaultChecked in props)\n            if (\n              props.hasOwnProperty(defaultChecked) &&\n              ((hasSrc = props[defaultChecked]), null != hasSrc)\n            )\n              switch (defaultChecked) {\n                case \"children\":\n                case \"dangerouslySetInnerHTML\":\n                  throw Error(\n                    tag +\n                      \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n                  );\n                default:\n                  setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n              }\n          return;\n        default:\n          if (isCustomElement(tag)) {\n            for (_propValue in props)\n              props.hasOwnProperty(_propValue) &&\n                ((hasSrc = props[_propValue]),\n                void 0 !== hasSrc &&\n                  setPropOnCustomElement(\n                    domElement,\n                    tag,\n                    _propValue,\n                    hasSrc,\n                    props,\n                    void 0\n                  ));\n            return;\n          }\n      }\n      for (defaultValue in props)\n        props.hasOwnProperty(defaultValue) &&\n          ((hasSrc = props[defaultValue]),\n          null != hasSrc &&\n            setProp(domElement, tag, defaultValue, hasSrc, props, null));\n    }\n    function updateProperties(domElement, tag, lastProps, nextProps) {\n      validatePropertiesInDevelopment(tag, nextProps);\n      switch (tag) {\n        case \"div\":\n        case \"span\":\n        case \"svg\":\n        case \"path\":\n        case \"a\":\n        case \"g\":\n        case \"p\":\n        case \"li\":\n          break;\n        case \"input\":\n          var name = null,\n            type = null,\n            value = null,\n            defaultValue = null,\n            lastDefaultValue = null,\n            checked = null,\n            defaultChecked = null;\n          for (propKey in lastProps) {\n            var lastProp = lastProps[propKey];\n            if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n              switch (propKey) {\n                case \"checked\":\n                  break;\n                case \"value\":\n                  break;\n                case \"defaultValue\":\n                  lastDefaultValue = lastProp;\n                default:\n                  nextProps.hasOwnProperty(propKey) ||\n                    setProp(\n                      domElement,\n                      tag,\n                      propKey,\n                      null,\n                      nextProps,\n                      lastProp\n                    );\n              }\n          }\n          for (var _propKey8 in nextProps) {\n            var propKey = nextProps[_propKey8];\n            lastProp = lastProps[_propKey8];\n            if (\n              nextProps.hasOwnProperty(_propKey8) &&\n              (null != propKey || null != lastProp)\n            )\n              switch (_propKey8) {\n                case \"type\":\n                  type = propKey;\n                  break;\n                case \"name\":\n                  name = propKey;\n                  break;\n                case \"checked\":\n                  checked = propKey;\n                  break;\n                case \"defaultChecked\":\n                  defaultChecked = propKey;\n                  break;\n                case \"value\":\n                  value = propKey;\n                  break;\n                case \"defaultValue\":\n                  defaultValue = propKey;\n                  break;\n                case \"children\":\n                case \"dangerouslySetInnerHTML\":\n                  if (null != propKey)\n                    throw Error(\n                      tag +\n                        \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n                    );\n                  break;\n                default:\n                  propKey !== lastProp &&\n                    setProp(\n                      domElement,\n                      tag,\n                      _propKey8,\n                      propKey,\n                      nextProps,\n                      lastProp\n                    );\n              }\n          }\n          tag =\n            \"checkbox\" === lastProps.type || \"radio\" === lastProps.type\n              ? null != lastProps.checked\n              : null != lastProps.value;\n          nextProps =\n            \"checkbox\" === nextProps.type || \"radio\" === nextProps.type\n              ? null != nextProps.checked\n              : null != nextProps.value;\n          tag ||\n            !nextProps ||\n            didWarnUncontrolledToControlled ||\n            (console.error(\n              \"A component is changing an uncontrolled input to be controlled. This is likely caused by the value changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components\"\n            ),\n            (didWarnUncontrolledToControlled = !0));\n          !tag ||\n            nextProps ||\n            didWarnControlledToUncontrolled ||\n            (console.error(\n              \"A component is changing a controlled input to be uncontrolled. This is likely caused by the value changing from a defined to undefined, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components\"\n            ),\n            (didWarnControlledToUncontrolled = !0));\n          updateInput(\n            domElement,\n            value,\n            defaultValue,\n            lastDefaultValue,\n            checked,\n            defaultChecked,\n            type,\n            name\n          );\n          return;\n        case \"select\":\n          propKey = value = defaultValue = _propKey8 = null;\n          for (type in lastProps)\n            if (\n              ((lastDefaultValue = lastProps[type]),\n              lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n            )\n              switch (type) {\n                case \"value\":\n                  break;\n                case \"multiple\":\n                  propKey = lastDefaultValue;\n                default:\n                  nextProps.hasOwnProperty(type) ||\n                    setProp(\n                      domElement,\n                      tag,\n                      type,\n                      null,\n                      nextProps,\n                      lastDefaultValue\n                    );\n              }\n          for (name in nextProps)\n            if (\n              ((type = nextProps[name]),\n              (lastDefaultValue = lastProps[name]),\n              nextProps.hasOwnProperty(name) &&\n                (null != type || null != lastDefaultValue))\n            )\n              switch (name) {\n                case \"value\":\n                  _propKey8 = type;\n                  break;\n                case \"defaultValue\":\n                  defaultValue = type;\n                  break;\n                case \"multiple\":\n                  value = type;\n                default:\n                  type !== lastDefaultValue &&\n                    setProp(\n                      domElement,\n                      tag,\n                      name,\n                      type,\n                      nextProps,\n                      lastDefaultValue\n                    );\n              }\n          nextProps = defaultValue;\n          tag = value;\n          lastProps = propKey;\n          null != _propKey8\n            ? updateOptions(domElement, !!tag, _propKey8, !1)\n            : !!lastProps !== !!tag &&\n              (null != nextProps\n                ? updateOptions(domElement, !!tag, nextProps, !0)\n                : updateOptions(domElement, !!tag, tag ? [] : \"\", !1));\n          return;\n        case \"textarea\":\n          propKey = _propKey8 = null;\n          for (defaultValue in lastProps)\n            if (\n              ((name = lastProps[defaultValue]),\n              lastProps.hasOwnProperty(defaultValue) &&\n                null != name &&\n                !nextProps.hasOwnProperty(defaultValue))\n            )\n              switch (defaultValue) {\n                case \"value\":\n                  break;\n                case \"children\":\n                  break;\n                default:\n                  setProp(domElement, tag, defaultValue, null, nextProps, name);\n              }\n          for (value in nextProps)\n            if (\n              ((name = nextProps[value]),\n              (type = lastProps[value]),\n              nextProps.hasOwnProperty(value) && (null != name || null != type))\n            )\n              switch (value) {\n                case \"value\":\n                  _propKey8 = name;\n                  break;\n                case \"defaultValue\":\n                  propKey = name;\n                  break;\n                case \"children\":\n                  break;\n                case \"dangerouslySetInnerHTML\":\n                  if (null != name)\n                    throw Error(\n                      \"`dangerouslySetInnerHTML` does not make sense on <textarea>.\"\n                    );\n                  break;\n                default:\n                  name !== type &&\n                    setProp(domElement, tag, value, name, nextProps, type);\n              }\n          updateTextarea(domElement, _propKey8, propKey);\n          return;\n        case \"option\":\n          for (var _propKey13 in lastProps)\n            if (\n              ((_propKey8 = lastProps[_propKey13]),\n              lastProps.hasOwnProperty(_propKey13) &&\n                null != _propKey8 &&\n                !nextProps.hasOwnProperty(_propKey13))\n            )\n              switch (_propKey13) {\n                case \"selected\":\n                  domElement.selected = !1;\n                  break;\n                default:\n                  setProp(\n                    domElement,\n                    tag,\n                    _propKey13,\n                    null,\n                    nextProps,\n                    _propKey8\n                  );\n              }\n          for (lastDefaultValue in nextProps)\n            if (\n              ((_propKey8 = nextProps[lastDefaultValue]),\n              (propKey = lastProps[lastDefaultValue]),\n              nextProps.hasOwnProperty(lastDefaultValue) &&\n                _propKey8 !== propKey &&\n                (null != _propKey8 || null != propKey))\n            )\n              switch (lastDefaultValue) {\n                case \"selected\":\n                  domElement.selected =\n                    _propKey8 &&\n                    \"function\" !== typeof _propKey8 &&\n                    \"symbol\" !== typeof _propKey8;\n                  break;\n                default:\n                  setProp(\n                    domElement,\n                    tag,\n                    lastDefaultValue,\n                    _propKey8,\n                    nextProps,\n                    propKey\n                  );\n              }\n          return;\n        case \"img\":\n        case \"link\":\n        case \"area\":\n        case \"base\":\n        case \"br\":\n        case \"col\":\n        case \"embed\":\n        case \"hr\":\n        case \"keygen\":\n        case \"meta\":\n        case \"param\":\n        case \"source\":\n        case \"track\":\n        case \"wbr\":\n        case \"menuitem\":\n          for (var _propKey15 in lastProps)\n            (_propKey8 = lastProps[_propKey15]),\n              lastProps.hasOwnProperty(_propKey15) &&\n                null != _propKey8 &&\n                !nextProps.hasOwnProperty(_propKey15) &&\n                setProp(\n                  domElement,\n                  tag,\n                  _propKey15,\n                  null,\n                  nextProps,\n                  _propKey8\n                );\n          for (checked in nextProps)\n            if (\n              ((_propKey8 = nextProps[checked]),\n              (propKey = lastProps[checked]),\n              nextProps.hasOwnProperty(checked) &&\n                _propKey8 !== propKey &&\n                (null != _propKey8 || null != propKey))\n            )\n              switch (checked) {\n                case \"children\":\n                case \"dangerouslySetInnerHTML\":\n                  if (null != _propKey8)\n                    throw Error(\n                      tag +\n                        \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\"\n                    );\n                  break;\n                default:\n                  setProp(\n                    domElement,\n                    tag,\n                    checked,\n                    _propKey8,\n                    nextProps,\n                    propKey\n                  );\n              }\n          return;\n        default:\n          if (isCustomElement(tag)) {\n            for (var _propKey17 in lastProps)\n              (_propKey8 = lastProps[_propKey17]),\n                lastProps.hasOwnProperty(_propKey17) &&\n                  void 0 !== _propKey8 &&\n                  !nextProps.hasOwnProperty(_propKey17) &&\n                  setPropOnCustomElement(\n                    domElement,\n                    tag,\n                    _propKey17,\n                    void 0,\n                    nextProps,\n                    _propKey8\n                  );\n            for (defaultChecked in nextProps)\n              (_propKey8 = nextProps[defaultChecked]),\n                (propKey = lastProps[defaultChecked]),\n                !nextProps.hasOwnProperty(defaultChecked) ||\n                  _propKey8 === propKey ||\n                  (void 0 === _propKey8 && void 0 === propKey) ||\n                  setPropOnCustomElement(\n                    domElement,\n                    tag,\n                    defaultChecked,\n                    _propKey8,\n                    nextProps,\n                    propKey\n                  );\n            return;\n          }\n      }\n      for (var _propKey19 in lastProps)\n        (_propKey8 = lastProps[_propKey19]),\n          lastProps.hasOwnProperty(_propKey19) &&\n            null != _propKey8 &&\n            !nextProps.hasOwnProperty(_propKey19) &&\n            setProp(domElement, tag, _propKey19, null, nextProps, _propKey8);\n      for (lastProp in nextProps)\n        (_propKey8 = nextProps[lastProp]),\n          (propKey = lastProps[lastProp]),\n          !nextProps.hasOwnProperty(lastProp) ||\n            _propKey8 === propKey ||\n            (null == _propKey8 && null == propKey) ||\n            setProp(domElement, tag, lastProp, _propKey8, nextProps, propKey);\n    }\n    function getPropNameFromAttributeName(attrName) {\n      switch (attrName) {\n        case \"class\":\n          return \"className\";\n        case \"for\":\n          return \"htmlFor\";\n        default:\n          return attrName;\n      }\n    }\n    function getStylesObjectFromElement(domElement) {\n      var serverValueInObjectForm = {};\n      domElement = domElement.style;\n      for (var i = 0; i < domElement.length; i++) {\n        var styleName = domElement[i];\n        serverValueInObjectForm[styleName] =\n          domElement.getPropertyValue(styleName);\n      }\n      return serverValueInObjectForm;\n    }\n    function diffHydratedStyles(domElement, value$jscomp$0, serverDifferences) {\n      if (null != value$jscomp$0 && \"object\" !== typeof value$jscomp$0)\n        console.error(\n          \"The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.\"\n        );\n      else {\n        var clientValue;\n        var delimiter = (clientValue = \"\"),\n          styleName;\n        for (styleName in value$jscomp$0)\n          if (value$jscomp$0.hasOwnProperty(styleName)) {\n            var value = value$jscomp$0[styleName];\n            null != value &&\n              \"boolean\" !== typeof value &&\n              \"\" !== value &&\n              (0 === styleName.indexOf(\"--\")\n                ? (checkCSSPropertyStringCoercion(value, styleName),\n                  (clientValue +=\n                    delimiter + styleName + \":\" + (\"\" + value).trim()))\n                : \"number\" !== typeof value ||\n                    0 === value ||\n                    unitlessNumbers.has(styleName)\n                  ? (checkCSSPropertyStringCoercion(value, styleName),\n                    (clientValue +=\n                      delimiter +\n                      styleName\n                        .replace(uppercasePattern, \"-$1\")\n                        .toLowerCase()\n                        .replace(msPattern$1, \"-ms-\") +\n                      \":\" +\n                      (\"\" + value).trim()))\n                  : (clientValue +=\n                      delimiter +\n                      styleName\n                        .replace(uppercasePattern, \"-$1\")\n                        .toLowerCase()\n                        .replace(msPattern$1, \"-ms-\") +\n                      \":\" +\n                      value +\n                      \"px\"),\n              (delimiter = \";\"));\n          }\n        clientValue = clientValue || null;\n        value$jscomp$0 = domElement.getAttribute(\"style\");\n        value$jscomp$0 !== clientValue &&\n          ((clientValue = normalizeMarkupForTextOrAttribute(clientValue)),\n          normalizeMarkupForTextOrAttribute(value$jscomp$0) !== clientValue &&\n            (serverDifferences.style = getStylesObjectFromElement(domElement)));\n      }\n    }\n    function hydrateAttribute(\n      domElement,\n      propKey,\n      attributeName,\n      value,\n      extraAttributes,\n      serverDifferences\n    ) {\n      extraAttributes.delete(attributeName);\n      domElement = domElement.getAttribute(attributeName);\n      if (null === domElement)\n        switch (typeof value) {\n          case \"undefined\":\n          case \"function\":\n          case \"symbol\":\n          case \"boolean\":\n            return;\n        }\n      else if (null != value)\n        switch (typeof value) {\n          case \"function\":\n          case \"symbol\":\n          case \"boolean\":\n            break;\n          default:\n            if (\n              (checkAttributeStringCoercion(value, propKey),\n              domElement === \"\" + value)\n            )\n              return;\n        }\n      warnForPropDifference(propKey, domElement, value, serverDifferences);\n    }\n    function hydrateBooleanAttribute(\n      domElement,\n      propKey,\n      attributeName,\n      value,\n      extraAttributes,\n      serverDifferences\n    ) {\n      extraAttributes.delete(attributeName);\n      domElement = domElement.getAttribute(attributeName);\n      if (null === domElement) {\n        switch (typeof value) {\n          case \"function\":\n          case \"symbol\":\n            return;\n        }\n        if (!value) return;\n      } else\n        switch (typeof value) {\n          case \"function\":\n          case \"symbol\":\n            break;\n          default:\n            if (value) return;\n        }\n      warnForPropDifference(propKey, domElement, value, serverDifferences);\n    }\n    function hydrateBooleanishAttribute(\n      domElement,\n      propKey,\n      attributeName,\n      value,\n      extraAttributes,\n      serverDifferences\n    ) {\n      extraAttributes.delete(attributeName);\n      domElement = domElement.getAttribute(attributeName);\n      if (null === domElement)\n        switch (typeof value) {\n          case \"undefined\":\n          case \"function\":\n          case \"symbol\":\n            return;\n        }\n      else if (null != value)\n        switch (typeof value) {\n          case \"function\":\n          case \"symbol\":\n            break;\n          default:\n            if (\n              (checkAttributeStringCoercion(value, attributeName),\n              domElement === \"\" + value)\n            )\n              return;\n        }\n      warnForPropDifference(propKey, domElement, value, serverDifferences);\n    }\n    function hydrateNumericAttribute(\n      domElement,\n      propKey,\n      attributeName,\n      value,\n      extraAttributes,\n      serverDifferences\n    ) {\n      extraAttributes.delete(attributeName);\n      domElement = domElement.getAttribute(attributeName);\n      if (null === domElement)\n        switch (typeof value) {\n          case \"undefined\":\n          case \"function\":\n          case \"symbol\":\n          case \"boolean\":\n            return;\n          default:\n            if (isNaN(value)) return;\n        }\n      else if (null != value)\n        switch (typeof value) {\n          case \"function\":\n          case \"symbol\":\n          case \"boolean\":\n            break;\n          default:\n            if (\n              !isNaN(value) &&\n              (checkAttributeStringCoercion(value, propKey),\n              domElement === \"\" + value)\n            )\n              return;\n        }\n      warnForPropDifference(propKey, domElement, value, serverDifferences);\n    }\n    function hydrateSanitizedAttribute(\n      domElement,\n      propKey,\n      attributeName,\n      value,\n      extraAttributes,\n      serverDifferences\n    ) {\n      extraAttributes.delete(attributeName);\n      domElement = domElement.getAttribute(attributeName);\n      if (null === domElement)\n        switch (typeof value) {\n          case \"undefined\":\n          case \"function\":\n          case \"symbol\":\n          case \"boolean\":\n            return;\n        }\n      else if (null != value)\n        switch (typeof value) {\n          case \"function\":\n          case \"symbol\":\n          case \"boolean\":\n            break;\n          default:\n            if (\n              (checkAttributeStringCoercion(value, propKey),\n              (attributeName = sanitizeURL(\"\" + value)),\n              domElement === attributeName)\n            )\n              return;\n        }\n      warnForPropDifference(propKey, domElement, value, serverDifferences);\n    }\n    function diffHydratedProperties(domElement, tag, props, hostContext) {\n      for (\n        var serverDifferences = {},\n          extraAttributes = new Set(),\n          attributes = domElement.attributes,\n          i = 0;\n        i < attributes.length;\n        i++\n      )\n        switch (attributes[i].name.toLowerCase()) {\n          case \"value\":\n            break;\n          case \"checked\":\n            break;\n          case \"selected\":\n            break;\n          default:\n            extraAttributes.add(attributes[i].name);\n        }\n      if (isCustomElement(tag))\n        for (var propKey in props) {\n          if (props.hasOwnProperty(propKey)) {\n            var value = props[propKey];\n            if (null != value)\n              if (registrationNameDependencies.hasOwnProperty(propKey))\n                \"function\" !== typeof value &&\n                  warnForInvalidEventListener(propKey, value);\n              else if (!0 !== props.suppressHydrationWarning)\n                switch (propKey) {\n                  case \"children\":\n                    (\"string\" !== typeof value && \"number\" !== typeof value) ||\n                      warnForPropDifference(\n                        \"children\",\n                        domElement.textContent,\n                        value,\n                        serverDifferences\n                      );\n                    continue;\n                  case \"suppressContentEditableWarning\":\n                  case \"suppressHydrationWarning\":\n                  case \"defaultValue\":\n                  case \"defaultChecked\":\n                  case \"innerHTML\":\n                  case \"ref\":\n                    continue;\n                  case \"dangerouslySetInnerHTML\":\n                    attributes = domElement.innerHTML;\n                    value = value ? value.__html : void 0;\n                    null != value &&\n                      ((value = normalizeHTML(domElement, value)),\n                      warnForPropDifference(\n                        propKey,\n                        attributes,\n                        value,\n                        serverDifferences\n                      ));\n                    continue;\n                  case \"style\":\n                    extraAttributes.delete(propKey);\n                    diffHydratedStyles(domElement, value, serverDifferences);\n                    continue;\n                  case \"offsetParent\":\n                  case \"offsetTop\":\n                  case \"offsetLeft\":\n                  case \"offsetWidth\":\n                  case \"offsetHeight\":\n                  case \"isContentEditable\":\n                  case \"outerText\":\n                  case \"outerHTML\":\n                    extraAttributes.delete(propKey.toLowerCase());\n                    console.error(\n                      \"Assignment to read-only property will result in a no-op: `%s`\",\n                      propKey\n                    );\n                    continue;\n                  case \"className\":\n                    extraAttributes.delete(\"class\");\n                    attributes = getValueForAttributeOnCustomComponent(\n                      domElement,\n                      \"class\",\n                      value\n                    );\n                    warnForPropDifference(\n                      \"className\",\n                      attributes,\n                      value,\n                      serverDifferences\n                    );\n                    continue;\n                  default:\n                    hostContext.context === HostContextNamespaceNone &&\n                    \"svg\" !== tag &&\n                    \"math\" !== tag\n                      ? extraAttributes.delete(propKey.toLowerCase())\n                      : extraAttributes.delete(propKey),\n                      (attributes = getValueForAttributeOnCustomComponent(\n                        domElement,\n                        propKey,\n                        value\n                      )),\n                      warnForPropDifference(\n                        propKey,\n                        attributes,\n                        value,\n                        serverDifferences\n                      );\n                }\n          }\n        }\n      else\n        for (value in props)\n          if (\n            props.hasOwnProperty(value) &&\n            ((propKey = props[value]), null != propKey)\n          )\n            if (registrationNameDependencies.hasOwnProperty(value))\n              \"function\" !== typeof propKey &&\n                warnForInvalidEventListener(value, propKey);\n            else if (!0 !== props.suppressHydrationWarning)\n              switch (value) {\n                case \"children\":\n                  (\"string\" !== typeof propKey &&\n                    \"number\" !== typeof propKey) ||\n                    warnForPropDifference(\n                      \"children\",\n                      domElement.textContent,\n                      propKey,\n                      serverDifferences\n                    );\n                  continue;\n                case \"suppressContentEditableWarning\":\n                case \"suppressHydrationWarning\":\n                case \"value\":\n                case \"checked\":\n                case \"selected\":\n                case \"defaultValue\":\n                case \"defaultChecked\":\n                case \"innerHTML\":\n                case \"ref\":\n                  continue;\n                case \"dangerouslySetInnerHTML\":\n                  attributes = domElement.innerHTML;\n                  propKey = propKey ? propKey.__html : void 0;\n                  null != propKey &&\n                    ((propKey = normalizeHTML(domElement, propKey)),\n                    attributes !== propKey &&\n                      (serverDifferences[value] = { __html: attributes }));\n                  continue;\n                case \"className\":\n                  hydrateAttribute(\n                    domElement,\n                    value,\n                    \"class\",\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"tabIndex\":\n                  hydrateAttribute(\n                    domElement,\n                    value,\n                    \"tabindex\",\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"style\":\n                  extraAttributes.delete(value);\n                  diffHydratedStyles(domElement, propKey, serverDifferences);\n                  continue;\n                case \"multiple\":\n                  extraAttributes.delete(value);\n                  warnForPropDifference(\n                    value,\n                    domElement.multiple,\n                    propKey,\n                    serverDifferences\n                  );\n                  continue;\n                case \"muted\":\n                  extraAttributes.delete(value);\n                  warnForPropDifference(\n                    value,\n                    domElement.muted,\n                    propKey,\n                    serverDifferences\n                  );\n                  continue;\n                case \"autoFocus\":\n                  extraAttributes.delete(\"autofocus\");\n                  warnForPropDifference(\n                    value,\n                    domElement.autofocus,\n                    propKey,\n                    serverDifferences\n                  );\n                  continue;\n                case \"data\":\n                  if (\"object\" !== tag) {\n                    extraAttributes.delete(value);\n                    attributes = domElement.getAttribute(\"data\");\n                    warnForPropDifference(\n                      value,\n                      attributes,\n                      propKey,\n                      serverDifferences\n                    );\n                    continue;\n                  }\n                case \"src\":\n                case \"href\":\n                  if (\n                    !(\n                      \"\" !== propKey ||\n                      (\"a\" === tag && \"href\" === value) ||\n                      (\"object\" === tag && \"data\" === value)\n                    )\n                  ) {\n                    \"src\" === value\n                      ? console.error(\n                          'An empty string (\"\") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n                          value,\n                          value\n                        )\n                      : console.error(\n                          'An empty string (\"\") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.',\n                          value,\n                          value\n                        );\n                    continue;\n                  }\n                  hydrateSanitizedAttribute(\n                    domElement,\n                    value,\n                    value,\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"action\":\n                case \"formAction\":\n                  attributes = domElement.getAttribute(value);\n                  if (\"function\" === typeof propKey) {\n                    extraAttributes.delete(value.toLowerCase());\n                    \"formAction\" === value\n                      ? (extraAttributes.delete(\"name\"),\n                        extraAttributes.delete(\"formenctype\"),\n                        extraAttributes.delete(\"formmethod\"),\n                        extraAttributes.delete(\"formtarget\"))\n                      : (extraAttributes.delete(\"enctype\"),\n                        extraAttributes.delete(\"method\"),\n                        extraAttributes.delete(\"target\"));\n                    continue;\n                  } else if (attributes === EXPECTED_FORM_ACTION_URL) {\n                    extraAttributes.delete(value.toLowerCase());\n                    warnForPropDifference(\n                      value,\n                      \"function\",\n                      propKey,\n                      serverDifferences\n                    );\n                    continue;\n                  }\n                  hydrateSanitizedAttribute(\n                    domElement,\n                    value,\n                    value.toLowerCase(),\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"xlinkHref\":\n                  hydrateSanitizedAttribute(\n                    domElement,\n                    value,\n                    \"xlink:href\",\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"contentEditable\":\n                  hydrateBooleanishAttribute(\n                    domElement,\n                    value,\n                    \"contenteditable\",\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"spellCheck\":\n                  hydrateBooleanishAttribute(\n                    domElement,\n                    value,\n                    \"spellcheck\",\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"draggable\":\n                case \"autoReverse\":\n                case \"externalResourcesRequired\":\n                case \"focusable\":\n                case \"preserveAlpha\":\n                  hydrateBooleanishAttribute(\n                    domElement,\n                    value,\n                    value,\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"allowFullScreen\":\n                case \"async\":\n                case \"autoPlay\":\n                case \"controls\":\n                case \"default\":\n                case \"defer\":\n                case \"disabled\":\n                case \"disablePictureInPicture\":\n                case \"disableRemotePlayback\":\n                case \"formNoValidate\":\n                case \"hidden\":\n                case \"loop\":\n                case \"noModule\":\n                case \"noValidate\":\n                case \"open\":\n                case \"playsInline\":\n                case \"readOnly\":\n                case \"required\":\n                case \"reversed\":\n                case \"scoped\":\n                case \"seamless\":\n                case \"itemScope\":\n                  hydrateBooleanAttribute(\n                    domElement,\n                    value,\n                    value.toLowerCase(),\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"capture\":\n                case \"download\":\n                  a: {\n                    i = domElement;\n                    var attributeName = (attributes = value),\n                      serverDifferences$jscomp$0 = serverDifferences;\n                    extraAttributes.delete(attributeName);\n                    i = i.getAttribute(attributeName);\n                    if (null === i)\n                      switch (typeof propKey) {\n                        case \"undefined\":\n                        case \"function\":\n                        case \"symbol\":\n                          break a;\n                        default:\n                          if (!1 === propKey) break a;\n                      }\n                    else if (null != propKey)\n                      switch (typeof propKey) {\n                        case \"function\":\n                        case \"symbol\":\n                          break;\n                        case \"boolean\":\n                          if (!0 === propKey && \"\" === i) break a;\n                          break;\n                        default:\n                          if (\n                            (checkAttributeStringCoercion(propKey, attributes),\n                            i === \"\" + propKey)\n                          )\n                            break a;\n                      }\n                    warnForPropDifference(\n                      attributes,\n                      i,\n                      propKey,\n                      serverDifferences$jscomp$0\n                    );\n                  }\n                  continue;\n                case \"cols\":\n                case \"rows\":\n                case \"size\":\n                case \"span\":\n                  a: {\n                    i = domElement;\n                    attributeName = attributes = value;\n                    serverDifferences$jscomp$0 = serverDifferences;\n                    extraAttributes.delete(attributeName);\n                    i = i.getAttribute(attributeName);\n                    if (null === i)\n                      switch (typeof propKey) {\n                        case \"undefined\":\n                        case \"function\":\n                        case \"symbol\":\n                        case \"boolean\":\n                          break a;\n                        default:\n                          if (isNaN(propKey) || 1 > propKey) break a;\n                      }\n                    else if (null != propKey)\n                      switch (typeof propKey) {\n                        case \"function\":\n                        case \"symbol\":\n                        case \"boolean\":\n                          break;\n                        default:\n                          if (\n                            !(isNaN(propKey) || 1 > propKey) &&\n                            (checkAttributeStringCoercion(propKey, attributes),\n                            i === \"\" + propKey)\n                          )\n                            break a;\n                      }\n                    warnForPropDifference(\n                      attributes,\n                      i,\n                      propKey,\n                      serverDifferences$jscomp$0\n                    );\n                  }\n                  continue;\n                case \"rowSpan\":\n                  hydrateNumericAttribute(\n                    domElement,\n                    value,\n                    \"rowspan\",\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"start\":\n                  hydrateNumericAttribute(\n                    domElement,\n                    value,\n                    value,\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"xHeight\":\n                  hydrateAttribute(\n                    domElement,\n                    value,\n                    \"x-height\",\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"xlinkActuate\":\n                  hydrateAttribute(\n                    domElement,\n                    value,\n                    \"xlink:actuate\",\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"xlinkArcrole\":\n                  hydrateAttribute(\n                    domElement,\n                    value,\n                    \"xlink:arcrole\",\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"xlinkRole\":\n                  hydrateAttribute(\n                    domElement,\n                    value,\n                    \"xlink:role\",\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"xlinkShow\":\n                  hydrateAttribute(\n                    domElement,\n                    value,\n                    \"xlink:show\",\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"xlinkTitle\":\n                  hydrateAttribute(\n                    domElement,\n                    value,\n                    \"xlink:title\",\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"xlinkType\":\n                  hydrateAttribute(\n                    domElement,\n                    value,\n                    \"xlink:type\",\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"xmlBase\":\n                  hydrateAttribute(\n                    domElement,\n                    value,\n                    \"xml:base\",\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"xmlLang\":\n                  hydrateAttribute(\n                    domElement,\n                    value,\n                    \"xml:lang\",\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"xmlSpace\":\n                  hydrateAttribute(\n                    domElement,\n                    value,\n                    \"xml:space\",\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                case \"inert\":\n                  \"\" !== propKey ||\n                    didWarnForNewBooleanPropsWithEmptyValue[value] ||\n                    ((didWarnForNewBooleanPropsWithEmptyValue[value] = !0),\n                    console.error(\n                      \"Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.\",\n                      value\n                    ));\n                  hydrateBooleanAttribute(\n                    domElement,\n                    value,\n                    value,\n                    propKey,\n                    extraAttributes,\n                    serverDifferences\n                  );\n                  continue;\n                default:\n                  if (\n                    !(2 < value.length) ||\n                    (\"o\" !== value[0] && \"O\" !== value[0]) ||\n                    (\"n\" !== value[1] && \"N\" !== value[1])\n                  ) {\n                    i = getAttributeAlias(value);\n                    attributes = !1;\n                    hostContext.context === HostContextNamespaceNone &&\n                    \"svg\" !== tag &&\n                    \"math\" !== tag\n                      ? extraAttributes.delete(i.toLowerCase())\n                      : ((attributeName = value.toLowerCase()),\n                        (attributeName = possibleStandardNames.hasOwnProperty(\n                          attributeName\n                        )\n                          ? possibleStandardNames[attributeName] || null\n                          : null),\n                        null !== attributeName &&\n                          attributeName !== value &&\n                          ((attributes = !0),\n                          extraAttributes.delete(attributeName)),\n                        extraAttributes.delete(i));\n                    a: if (\n                      ((attributeName = domElement),\n                      (serverDifferences$jscomp$0 = i),\n                      (i = propKey),\n                      isAttributeNameSafe(serverDifferences$jscomp$0))\n                    )\n                      if (\n                        attributeName.hasAttribute(serverDifferences$jscomp$0)\n                      )\n                        (attributeName = attributeName.getAttribute(\n                          serverDifferences$jscomp$0\n                        )),\n                          checkAttributeStringCoercion(\n                            i,\n                            serverDifferences$jscomp$0\n                          ),\n                          (i = attributeName === \"\" + i ? i : attributeName);\n                      else {\n                        switch (typeof i) {\n                          case \"function\":\n                          case \"symbol\":\n                            break a;\n                          case \"boolean\":\n                            if (\n                              ((attributeName = serverDifferences$jscomp$0\n                                .toLowerCase()\n                                .slice(0, 5)),\n                              \"data-\" !== attributeName &&\n                                \"aria-\" !== attributeName)\n                            )\n                              break a;\n                        }\n                        i = void 0 === i ? void 0 : null;\n                      }\n                    else i = void 0;\n                    attributes ||\n                      warnForPropDifference(\n                        value,\n                        i,\n                        propKey,\n                        serverDifferences\n                      );\n                  }\n              }\n      0 < extraAttributes.size &&\n        !0 !== props.suppressHydrationWarning &&\n        warnForExtraAttributes(domElement, extraAttributes, serverDifferences);\n      return 0 === Object.keys(serverDifferences).length\n        ? null\n        : serverDifferences;\n    }\n    function propNamesListJoin(list, combinator) {\n      switch (list.length) {\n        case 0:\n          return \"\";\n        case 1:\n          return list[0];\n        case 2:\n          return list[0] + \" \" + combinator + \" \" + list[1];\n        default:\n          return (\n            list.slice(0, -1).join(\", \") +\n            \", \" +\n            combinator +\n            \" \" +\n            list[list.length - 1]\n          );\n      }\n    }\n    function getOwnerDocumentFromRootContainer(rootContainerElement) {\n      return 9 === rootContainerElement.nodeType\n        ? rootContainerElement\n        : rootContainerElement.ownerDocument;\n    }\n    function getOwnHostContext(namespaceURI) {\n      switch (namespaceURI) {\n        case SVG_NAMESPACE:\n          return HostContextNamespaceSvg;\n        case MATH_NAMESPACE:\n          return HostContextNamespaceMath;\n        default:\n          return HostContextNamespaceNone;\n      }\n    }\n    function getChildHostContextProd(parentNamespace, type) {\n      if (parentNamespace === HostContextNamespaceNone)\n        switch (type) {\n          case \"svg\":\n            return HostContextNamespaceSvg;\n          case \"math\":\n            return HostContextNamespaceMath;\n          default:\n            return HostContextNamespaceNone;\n        }\n      return parentNamespace === HostContextNamespaceSvg &&\n        \"foreignObject\" === type\n        ? HostContextNamespaceNone\n        : parentNamespace;\n    }\n    function shouldSetTextContent(type, props) {\n      return (\n        \"textarea\" === type ||\n        \"noscript\" === type ||\n        \"string\" === typeof props.children ||\n        \"number\" === typeof props.children ||\n        \"bigint\" === typeof props.children ||\n        (\"object\" === typeof props.dangerouslySetInnerHTML &&\n          null !== props.dangerouslySetInnerHTML &&\n          null != props.dangerouslySetInnerHTML.__html)\n      );\n    }\n    function shouldAttemptEagerTransition() {\n      var event = window.event;\n      if (event && \"popstate\" === event.type) {\n        if (event === currentPopstateTransitionEvent) return !1;\n        currentPopstateTransitionEvent = event;\n        return !0;\n      }\n      currentPopstateTransitionEvent = null;\n      return !1;\n    }\n    function handleErrorInNextTick(error) {\n      setTimeout(function () {\n        throw error;\n      });\n    }\n    function commitMount(domElement, type, newProps) {\n      switch (type) {\n        case \"button\":\n        case \"input\":\n        case \"select\":\n        case \"textarea\":\n          newProps.autoFocus && domElement.focus();\n          break;\n        case \"img\":\n          newProps.src\n            ? (domElement.src = newProps.src)\n            : newProps.srcSet && (domElement.srcset = newProps.srcSet);\n      }\n    }\n    function commitHydratedInstance() {}\n    function commitUpdate(domElement, type, oldProps, newProps) {\n      updateProperties(domElement, type, oldProps, newProps);\n      domElement[internalPropsKey] = newProps;\n    }\n    function resetTextContent(domElement) {\n      setTextContent(domElement, \"\");\n    }\n    function commitTextUpdate(textInstance, oldText, newText) {\n      textInstance.nodeValue = newText;\n    }\n    function warnForReactChildrenConflict(container) {\n      if (!container.__reactWarnedAboutChildrenConflict) {\n        var props = container[internalPropsKey] || null;\n        if (null !== props) {\n          var fiber = getInstanceFromNode(container);\n          null !== fiber &&\n            (\"string\" === typeof props.children ||\n            \"number\" === typeof props.children\n              ? ((container.__reactWarnedAboutChildrenConflict = !0),\n                runWithFiberInDEV(fiber, function () {\n                  console.error(\n                    'Cannot use a ref on a React element as a container to `createRoot` or `createPortal` if that element also sets \"children\" text content using React. It should be a leaf with no children. Otherwise it\\'s ambiguous which children should be used.'\n                  );\n                }))\n              : null != props.dangerouslySetInnerHTML &&\n                ((container.__reactWarnedAboutChildrenConflict = !0),\n                runWithFiberInDEV(fiber, function () {\n                  console.error(\n                    'Cannot use a ref on a React element as a container to `createRoot` or `createPortal` if that element also sets \"dangerouslySetInnerHTML\" using React. It should be a leaf with no children. Otherwise it\\'s ambiguous which children should be used.'\n                  );\n                })));\n        }\n      }\n    }\n    function isSingletonScope(type) {\n      return \"head\" === type;\n    }\n    function removeChild(parentInstance, child) {\n      parentInstance.removeChild(child);\n    }\n    function removeChildFromContainer(container, child) {\n      (9 === container.nodeType\n        ? container.body\n        : \"HTML\" === container.nodeName\n          ? container.ownerDocument.body\n          : container\n      ).removeChild(child);\n    }\n    function clearHydrationBoundary(parentInstance, hydrationInstance) {\n      var node = hydrationInstance,\n        depth = 0;\n      do {\n        var nextNode = node.nextSibling;\n        parentInstance.removeChild(node);\n        if (nextNode && 8 === nextNode.nodeType)\n          if (\n            ((node = nextNode.data),\n            node === SUSPENSE_END_DATA || node === ACTIVITY_END_DATA)\n          ) {\n            if (0 === depth) {\n              parentInstance.removeChild(nextNode);\n              retryIfBlockedOn(hydrationInstance);\n              return;\n            }\n            depth--;\n          } else if (\n            node === SUSPENSE_START_DATA ||\n            node === SUSPENSE_PENDING_START_DATA ||\n            node === SUSPENSE_QUEUED_START_DATA ||\n            node === SUSPENSE_FALLBACK_START_DATA ||\n            node === ACTIVITY_START_DATA\n          )\n            depth++;\n          else if (node === PREAMBLE_CONTRIBUTION_HTML)\n            releaseSingletonInstance(\n              parentInstance.ownerDocument.documentElement\n            );\n          else if (node === PREAMBLE_CONTRIBUTION_HEAD) {\n            node = parentInstance.ownerDocument.head;\n            releaseSingletonInstance(node);\n            for (var node$jscomp$0 = node.firstChild; node$jscomp$0; ) {\n              var nextNode$jscomp$0 = node$jscomp$0.nextSibling,\n                nodeName = node$jscomp$0.nodeName;\n              node$jscomp$0[internalHoistableMarker] ||\n                \"SCRIPT\" === nodeName ||\n                \"STYLE\" === nodeName ||\n                (\"LINK\" === nodeName &&\n                  \"stylesheet\" === node$jscomp$0.rel.toLowerCase()) ||\n                node.removeChild(node$jscomp$0);\n              node$jscomp$0 = nextNode$jscomp$0;\n            }\n          } else\n            node === PREAMBLE_CONTRIBUTION_BODY &&\n              releaseSingletonInstance(parentInstance.ownerDocument.body);\n        node = nextNode;\n      } while (node);\n      retryIfBlockedOn(hydrationInstance);\n    }\n    function hideOrUnhideDehydratedBoundary(suspenseInstance, isHidden) {\n      var node = suspenseInstance;\n      suspenseInstance = 0;\n      do {\n        var nextNode = node.nextSibling;\n        1 === node.nodeType\n          ? isHidden\n            ? ((node._stashedDisplay = node.style.display),\n              (node.style.display = \"none\"))\n            : ((node.style.display = node._stashedDisplay || \"\"),\n              \"\" === node.getAttribute(\"style\") &&\n                node.removeAttribute(\"style\"))\n          : 3 === node.nodeType &&\n            (isHidden\n              ? ((node._stashedText = node.nodeValue), (node.nodeValue = \"\"))\n              : (node.nodeValue = node._stashedText || \"\"));\n        if (nextNode && 8 === nextNode.nodeType)\n          if (((node = nextNode.data), node === SUSPENSE_END_DATA))\n            if (0 === suspenseInstance) break;\n            else suspenseInstance--;\n          else\n            (node !== SUSPENSE_START_DATA &&\n              node !== SUSPENSE_PENDING_START_DATA &&\n              node !== SUSPENSE_QUEUED_START_DATA &&\n              node !== SUSPENSE_FALLBACK_START_DATA) ||\n              suspenseInstance++;\n        node = nextNode;\n      } while (node);\n    }\n    function hideDehydratedBoundary(suspenseInstance) {\n      hideOrUnhideDehydratedBoundary(suspenseInstance, !0);\n    }\n    function hideInstance(instance) {\n      instance = instance.style;\n      \"function\" === typeof instance.setProperty\n        ? instance.setProperty(\"display\", \"none\", \"important\")\n        : (instance.display = \"none\");\n    }\n    function hideTextInstance(textInstance) {\n      textInstance.nodeValue = \"\";\n    }\n    function unhideDehydratedBoundary(dehydratedInstance) {\n      hideOrUnhideDehydratedBoundary(dehydratedInstance, !1);\n    }\n    function unhideInstance(instance, props) {\n      props = props[STYLE];\n      props =\n        void 0 !== props && null !== props && props.hasOwnProperty(\"display\")\n          ? props.display\n          : null;\n      instance.style.display =\n        null == props || \"boolean\" === typeof props ? \"\" : (\"\" + props).trim();\n    }\n    function unhideTextInstance(textInstance, text) {\n      textInstance.nodeValue = text;\n    }\n    function clearContainerSparingly(container) {\n      var nextNode = container.firstChild;\n      nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n      for (; nextNode; ) {\n        var node = nextNode;\n        nextNode = nextNode.nextSibling;\n        switch (node.nodeName) {\n          case \"HTML\":\n          case \"HEAD\":\n          case \"BODY\":\n            clearContainerSparingly(node);\n            detachDeletedInstance(node);\n            continue;\n          case \"SCRIPT\":\n          case \"STYLE\":\n            continue;\n          case \"LINK\":\n            if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n        }\n        container.removeChild(node);\n      }\n    }\n    function canHydrateInstance(instance, type, props, inRootOrSingleton) {\n      for (; 1 === instance.nodeType; ) {\n        var anyProps = props;\n        if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n          if (\n            !inRootOrSingleton &&\n            (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n          )\n            break;\n        } else if (!inRootOrSingleton)\n          if (\"input\" === type && \"hidden\" === instance.type) {\n            checkAttributeStringCoercion(anyProps.name, \"name\");\n            var name = null == anyProps.name ? null : \"\" + anyProps.name;\n            if (\n              \"hidden\" === anyProps.type &&\n              instance.getAttribute(\"name\") === name\n            )\n              return instance;\n          } else return instance;\n        else if (!instance[internalHoistableMarker])\n          switch (type) {\n            case \"meta\":\n              if (!instance.hasAttribute(\"itemprop\")) break;\n              return instance;\n            case \"link\":\n              name = instance.getAttribute(\"rel\");\n              if (\n                \"stylesheet\" === name &&\n                instance.hasAttribute(\"data-precedence\")\n              )\n                break;\n              else if (\n                name !== anyProps.rel ||\n                instance.getAttribute(\"href\") !==\n                  (null == anyProps.href || \"\" === anyProps.href\n                    ? null\n                    : anyProps.href) ||\n                instance.getAttribute(\"crossorigin\") !==\n                  (null == anyProps.crossOrigin\n                    ? null\n                    : anyProps.crossOrigin) ||\n                instance.getAttribute(\"title\") !==\n                  (null == anyProps.title ? null : anyProps.title)\n              )\n                break;\n              return instance;\n            case \"style\":\n              if (instance.hasAttribute(\"data-precedence\")) break;\n              return instance;\n            case \"script\":\n              name = instance.getAttribute(\"src\");\n              if (\n                (name !== (null == anyProps.src ? null : anyProps.src) ||\n                  instance.getAttribute(\"type\") !==\n                    (null == anyProps.type ? null : anyProps.type) ||\n                  instance.getAttribute(\"crossorigin\") !==\n                    (null == anyProps.crossOrigin\n                      ? null\n                      : anyProps.crossOrigin)) &&\n                name &&\n                instance.hasAttribute(\"async\") &&\n                !instance.hasAttribute(\"itemprop\")\n              )\n                break;\n              return instance;\n            default:\n              return instance;\n          }\n        instance = getNextHydratable(instance.nextSibling);\n        if (null === instance) break;\n      }\n      return null;\n    }\n    function canHydrateTextInstance(instance, text, inRootOrSingleton) {\n      if (\"\" === text) return null;\n      for (; 3 !== instance.nodeType; ) {\n        if (\n          (1 !== instance.nodeType ||\n            \"INPUT\" !== instance.nodeName ||\n            \"hidden\" !== instance.type) &&\n          !inRootOrSingleton\n        )\n          return null;\n        instance = getNextHydratable(instance.nextSibling);\n        if (null === instance) return null;\n      }\n      return instance;\n    }\n    function canHydrateHydrationBoundary(instance, inRootOrSingleton) {\n      for (; 8 !== instance.nodeType; ) {\n        if (!inRootOrSingleton) return null;\n        instance = getNextHydratable(instance.nextSibling);\n        if (null === instance) return null;\n      }\n      return instance;\n    }\n    function isSuspenseInstancePending(instance) {\n      return (\n        instance.data === SUSPENSE_PENDING_START_DATA ||\n        instance.data === SUSPENSE_QUEUED_START_DATA\n      );\n    }\n    function isSuspenseInstanceFallback(instance) {\n      return (\n        instance.data === SUSPENSE_FALLBACK_START_DATA ||\n        (instance.data === SUSPENSE_PENDING_START_DATA &&\n          instance.ownerDocument.readyState !== DOCUMENT_READY_STATE_LOADING)\n      );\n    }\n    function registerSuspenseInstanceRetry(instance, callback) {\n      var ownerDocument = instance.ownerDocument;\n      if (instance.data === SUSPENSE_QUEUED_START_DATA)\n        instance._reactRetry = callback;\n      else if (\n        instance.data !== SUSPENSE_PENDING_START_DATA ||\n        ownerDocument.readyState !== DOCUMENT_READY_STATE_LOADING\n      )\n        callback();\n      else {\n        var listener = function () {\n          callback();\n          ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n        };\n        ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n        instance._reactRetry = listener;\n      }\n    }\n    function getNextHydratable(node) {\n      for (; null != node; node = node.nextSibling) {\n        var nodeType = node.nodeType;\n        if (1 === nodeType || 3 === nodeType) break;\n        if (8 === nodeType) {\n          nodeType = node.data;\n          if (\n            nodeType === SUSPENSE_START_DATA ||\n            nodeType === SUSPENSE_FALLBACK_START_DATA ||\n            nodeType === SUSPENSE_PENDING_START_DATA ||\n            nodeType === SUSPENSE_QUEUED_START_DATA ||\n            nodeType === ACTIVITY_START_DATA ||\n            nodeType === FORM_STATE_IS_MATCHING ||\n            nodeType === FORM_STATE_IS_NOT_MATCHING\n          )\n            break;\n          if (nodeType === SUSPENSE_END_DATA || nodeType === ACTIVITY_END_DATA)\n            return null;\n        }\n      }\n      return node;\n    }\n    function describeHydratableInstanceForDevWarnings(instance) {\n      if (1 === instance.nodeType) {\n        for (\n          var JSCompiler_temp_const = instance.nodeName.toLowerCase(),\n            serverDifferences = {},\n            attributes = instance.attributes,\n            i = 0;\n          i < attributes.length;\n          i++\n        ) {\n          var attr = attributes[i];\n          serverDifferences[getPropNameFromAttributeName(attr.name)] =\n            \"style\" === attr.name.toLowerCase()\n              ? getStylesObjectFromElement(instance)\n              : attr.value;\n        }\n        return { type: JSCompiler_temp_const, props: serverDifferences };\n      }\n      return 8 === instance.nodeType\n        ? instance.data === ACTIVITY_START_DATA\n          ? { type: \"Activity\", props: {} }\n          : { type: \"Suspense\", props: {} }\n        : instance.nodeValue;\n    }\n    function diffHydratedTextForDevWarnings(textInstance, text, parentProps) {\n      return null === parentProps ||\n        !0 !== parentProps[SUPPRESS_HYDRATION_WARNING]\n        ? (textInstance.nodeValue === text\n            ? (textInstance = null)\n            : ((text = normalizeMarkupForTextOrAttribute(text)),\n              (textInstance =\n                normalizeMarkupForTextOrAttribute(textInstance.nodeValue) ===\n                text\n                  ? null\n                  : textInstance.nodeValue)),\n          textInstance)\n        : null;\n    }\n    function getNextHydratableInstanceAfterHydrationBoundary(\n      hydrationInstance\n    ) {\n      hydrationInstance = hydrationInstance.nextSibling;\n      for (var depth = 0; hydrationInstance; ) {\n        if (8 === hydrationInstance.nodeType) {\n          var data = hydrationInstance.data;\n          if (data === SUSPENSE_END_DATA || data === ACTIVITY_END_DATA) {\n            if (0 === depth)\n              return getNextHydratable(hydrationInstance.nextSibling);\n            depth--;\n          } else\n            (data !== SUSPENSE_START_DATA &&\n              data !== SUSPENSE_FALLBACK_START_DATA &&\n              data !== SUSPENSE_PENDING_START_DATA &&\n              data !== SUSPENSE_QUEUED_START_DATA &&\n              data !== ACTIVITY_START_DATA) ||\n              depth++;\n        }\n        hydrationInstance = hydrationInstance.nextSibling;\n      }\n      return null;\n    }\n    function getParentHydrationBoundary(targetInstance) {\n      targetInstance = targetInstance.previousSibling;\n      for (var depth = 0; targetInstance; ) {\n        if (8 === targetInstance.nodeType) {\n          var data = targetInstance.data;\n          if (\n            data === SUSPENSE_START_DATA ||\n            data === SUSPENSE_FALLBACK_START_DATA ||\n            data === SUSPENSE_PENDING_START_DATA ||\n            data === SUSPENSE_QUEUED_START_DATA ||\n            data === ACTIVITY_START_DATA\n          ) {\n            if (0 === depth) return targetInstance;\n            depth--;\n          } else\n            (data !== SUSPENSE_END_DATA && data !== ACTIVITY_END_DATA) ||\n              depth++;\n        }\n        targetInstance = targetInstance.previousSibling;\n      }\n      return null;\n    }\n    function commitHydratedContainer(container) {\n      retryIfBlockedOn(container);\n    }\n    function commitHydratedActivityInstance(activityInstance) {\n      retryIfBlockedOn(activityInstance);\n    }\n    function commitHydratedSuspenseInstance(suspenseInstance) {\n      retryIfBlockedOn(suspenseInstance);\n    }\n    function resolveSingletonInstance(\n      type,\n      props,\n      rootContainerInstance,\n      hostContext,\n      validateDOMNestingDev\n    ) {\n      validateDOMNestingDev &&\n        validateDOMNesting(type, hostContext.ancestorInfo);\n      props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n      switch (type) {\n        case \"html\":\n          type = props.documentElement;\n          if (!type)\n            throw Error(\n              \"React expected an <html> element (document.documentElement) to exist in the Document but one was not found. React never removes the documentElement for any Document it renders into so the cause is likely in some other script running on this page.\"\n            );\n          return type;\n        case \"head\":\n          type = props.head;\n          if (!type)\n            throw Error(\n              \"React expected a <head> element (document.head) to exist in the Document but one was not found. React never removes the head for any Document it renders into so the cause is likely in some other script running on this page.\"\n            );\n          return type;\n        case \"body\":\n          type = props.body;\n          if (!type)\n            throw Error(\n              \"React expected a <body> element (document.body) to exist in the Document but one was not found. React never removes the body for any Document it renders into so the cause is likely in some other script running on this page.\"\n            );\n          return type;\n        default:\n          throw Error(\n            \"resolveSingletonInstance was called with an element type that is not supported. This is a bug in React.\"\n          );\n      }\n    }\n    function acquireSingletonInstance(\n      type,\n      props,\n      instance,\n      internalInstanceHandle\n    ) {\n      if (\n        !instance[internalContainerInstanceKey] &&\n        getInstanceFromNode(instance)\n      ) {\n        var tagName = instance.tagName.toLowerCase();\n        console.error(\n          \"You are mounting a new %s component when a previous one has not first unmounted. It is an error to render more than one %s component at a time and attributes and children of these components will likely fail in unpredictable ways. Please only render a single instance of <%s> and if you need to mount a new one, ensure any previous ones have unmounted first.\",\n          tagName,\n          tagName,\n          tagName\n        );\n      }\n      switch (type) {\n        case \"html\":\n        case \"head\":\n        case \"body\":\n          break;\n        default:\n          console.error(\n            \"acquireSingletonInstance was called with an element type that is not supported. This is a bug in React.\"\n          );\n      }\n      for (tagName = instance.attributes; tagName.length; )\n        instance.removeAttributeNode(tagName[0]);\n      setInitialProperties(instance, type, props);\n      instance[internalInstanceKey] = internalInstanceHandle;\n      instance[internalPropsKey] = props;\n    }\n    function releaseSingletonInstance(instance) {\n      for (var attributes = instance.attributes; attributes.length; )\n        instance.removeAttributeNode(attributes[0]);\n      detachDeletedInstance(instance);\n    }\n    function getHoistableRoot(container) {\n      return \"function\" === typeof container.getRootNode\n        ? container.getRootNode()\n        : 9 === container.nodeType\n          ? container\n          : container.ownerDocument;\n    }\n    function preconnectAs(rel, href, crossOrigin) {\n      var ownerDocument = globalDocument;\n      if (ownerDocument && \"string\" === typeof href && href) {\n        var limitedEscapedHref =\n          escapeSelectorAttributeValueInsideDoubleQuotes(href);\n        limitedEscapedHref =\n          'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n        \"string\" === typeof crossOrigin &&\n          (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n        preconnectsSet.has(limitedEscapedHref) ||\n          (preconnectsSet.add(limitedEscapedHref),\n          (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n          null === ownerDocument.querySelector(limitedEscapedHref) &&\n            ((href = ownerDocument.createElement(\"link\")),\n            setInitialProperties(href, \"link\", rel),\n            markNodeAsHoistable(href),\n            ownerDocument.head.appendChild(href)));\n      }\n    }\n    function getResource(type, currentProps, pendingProps, currentResource) {\n      var resourceRoot = (resourceRoot = rootInstanceStackCursor.current)\n        ? getHoistableRoot(resourceRoot)\n        : null;\n      if (!resourceRoot)\n        throw Error(\n          '\"resourceRoot\" was expected to exist. This is a bug in React.'\n        );\n      switch (type) {\n        case \"meta\":\n        case \"title\":\n          return null;\n        case \"style\":\n          return \"string\" === typeof pendingProps.precedence &&\n            \"string\" === typeof pendingProps.href\n            ? ((pendingProps = getStyleKey(pendingProps.href)),\n              (currentProps =\n                getResourcesFromRoot(resourceRoot).hoistableStyles),\n              (currentResource = currentProps.get(pendingProps)),\n              currentResource ||\n                ((currentResource = {\n                  type: \"style\",\n                  instance: null,\n                  count: 0,\n                  state: null\n                }),\n                currentProps.set(pendingProps, currentResource)),\n              currentResource)\n            : { type: \"void\", instance: null, count: 0, state: null };\n        case \"link\":\n          if (\n            \"stylesheet\" === pendingProps.rel &&\n            \"string\" === typeof pendingProps.href &&\n            \"string\" === typeof pendingProps.precedence\n          ) {\n            type = getStyleKey(pendingProps.href);\n            var _styles = getResourcesFromRoot(resourceRoot).hoistableStyles,\n              _resource = _styles.get(type);\n            if (\n              !_resource &&\n              ((resourceRoot = resourceRoot.ownerDocument || resourceRoot),\n              (_resource = {\n                type: \"stylesheet\",\n                instance: null,\n                count: 0,\n                state: { loading: NotLoaded, preload: null }\n              }),\n              _styles.set(type, _resource),\n              (_styles = resourceRoot.querySelector(\n                getStylesheetSelectorFromKey(type)\n              )) &&\n                !_styles._p &&\n                ((_resource.instance = _styles),\n                (_resource.state.loading = Loaded | Inserted)),\n              !preloadPropsMap.has(type))\n            ) {\n              var preloadProps = {\n                rel: \"preload\",\n                as: \"style\",\n                href: pendingProps.href,\n                crossOrigin: pendingProps.crossOrigin,\n                integrity: pendingProps.integrity,\n                media: pendingProps.media,\n                hrefLang: pendingProps.hrefLang,\n                referrerPolicy: pendingProps.referrerPolicy\n              };\n              preloadPropsMap.set(type, preloadProps);\n              _styles ||\n                preloadStylesheet(\n                  resourceRoot,\n                  type,\n                  preloadProps,\n                  _resource.state\n                );\n            }\n            if (currentProps && null === currentResource)\n              throw (\n                ((pendingProps =\n                  \"\\n\\n  - \" +\n                  describeLinkForResourceErrorDEV(currentProps) +\n                  \"\\n  + \" +\n                  describeLinkForResourceErrorDEV(pendingProps)),\n                Error(\n                  \"Expected <link> not to update to be updated to a stylesheet with precedence. Check the `rel`, `href`, and `precedence` props of this component. Alternatively, check whether two different <link> components render in the same slot or share the same key.\" +\n                    pendingProps\n                ))\n              );\n            return _resource;\n          }\n          if (currentProps && null !== currentResource)\n            throw (\n              ((pendingProps =\n                \"\\n\\n  - \" +\n                describeLinkForResourceErrorDEV(currentProps) +\n                \"\\n  + \" +\n                describeLinkForResourceErrorDEV(pendingProps)),\n              Error(\n                \"Expected stylesheet with precedence to not be updated to a different kind of <link>. Check the `rel`, `href`, and `precedence` props of this component. Alternatively, check whether two different <link> components render in the same slot or share the same key.\" +\n                  pendingProps\n              ))\n            );\n          return null;\n        case \"script\":\n          return (\n            (currentProps = pendingProps.async),\n            (pendingProps = pendingProps.src),\n            \"string\" === typeof pendingProps &&\n            currentProps &&\n            \"function\" !== typeof currentProps &&\n            \"symbol\" !== typeof currentProps\n              ? ((pendingProps = getScriptKey(pendingProps)),\n                (currentProps =\n                  getResourcesFromRoot(resourceRoot).hoistableScripts),\n                (currentResource = currentProps.get(pendingProps)),\n                currentResource ||\n                  ((currentResource = {\n                    type: \"script\",\n                    instance: null,\n                    count: 0,\n                    state: null\n                  }),\n                  currentProps.set(pendingProps, currentResource)),\n                currentResource)\n              : { type: \"void\", instance: null, count: 0, state: null }\n          );\n        default:\n          throw Error(\n            'getResource encountered a type it did not expect: \"' +\n              type +\n              '\". this is a bug in React.'\n          );\n      }\n    }\n    function describeLinkForResourceErrorDEV(props) {\n      var describedProps = 0,\n        description = \"<link\";\n      \"string\" === typeof props.rel\n        ? (describedProps++, (description += ' rel=\"' + props.rel + '\"'))\n        : hasOwnProperty.call(props, \"rel\") &&\n          (describedProps++,\n          (description +=\n            ' rel=\"' +\n            (null === props.rel ? \"null\" : \"invalid type \" + typeof props.rel) +\n            '\"'));\n      \"string\" === typeof props.href\n        ? (describedProps++, (description += ' href=\"' + props.href + '\"'))\n        : hasOwnProperty.call(props, \"href\") &&\n          (describedProps++,\n          (description +=\n            ' href=\"' +\n            (null === props.href\n              ? \"null\"\n              : \"invalid type \" + typeof props.href) +\n            '\"'));\n      \"string\" === typeof props.precedence\n        ? (describedProps++,\n          (description += ' precedence=\"' + props.precedence + '\"'))\n        : hasOwnProperty.call(props, \"precedence\") &&\n          (describedProps++,\n          (description +=\n            \" precedence={\" +\n            (null === props.precedence\n              ? \"null\"\n              : \"invalid type \" + typeof props.precedence) +\n            \"}\"));\n      Object.getOwnPropertyNames(props).length > describedProps &&\n        (description += \" ...\");\n      return description + \" />\";\n    }\n    function getStyleKey(href) {\n      return (\n        'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"'\n      );\n    }\n    function getStylesheetSelectorFromKey(key) {\n      return 'link[rel=\"stylesheet\"][' + key + \"]\";\n    }\n    function stylesheetPropsFromRawProps(rawProps) {\n      return assign({}, rawProps, {\n        \"data-precedence\": rawProps.precedence,\n        precedence: null\n      });\n    }\n    function preloadStylesheet(ownerDocument, key, preloadProps, state) {\n      ownerDocument.querySelector(\n        'link[rel=\"preload\"][as=\"style\"][' + key + \"]\"\n      )\n        ? (state.loading = Loaded)\n        : ((key = ownerDocument.createElement(\"link\")),\n          (state.preload = key),\n          key.addEventListener(\"load\", function () {\n            return (state.loading |= Loaded);\n          }),\n          key.addEventListener(\"error\", function () {\n            return (state.loading |= Errored);\n          }),\n          setInitialProperties(key, \"link\", preloadProps),\n          markNodeAsHoistable(key),\n          ownerDocument.head.appendChild(key));\n    }\n    function getScriptKey(src) {\n      return (\n        '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]'\n      );\n    }\n    function getScriptSelectorFromKey(key) {\n      return \"script[async]\" + key;\n    }\n    function acquireResource(hoistableRoot, resource, props) {\n      resource.count++;\n      if (null === resource.instance)\n        switch (resource.type) {\n          case \"style\":\n            var instance = hoistableRoot.querySelector(\n              'style[data-href~=\"' +\n                escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n                '\"]'\n            );\n            if (instance)\n              return (\n                (resource.instance = instance),\n                markNodeAsHoistable(instance),\n                instance\n              );\n            var styleProps = assign({}, props, {\n              \"data-href\": props.href,\n              \"data-precedence\": props.precedence,\n              href: null,\n              precedence: null\n            });\n            instance = (\n              hoistableRoot.ownerDocument || hoistableRoot\n            ).createElement(\"style\");\n            markNodeAsHoistable(instance);\n            setInitialProperties(instance, \"style\", styleProps);\n            insertStylesheet(instance, props.precedence, hoistableRoot);\n            return (resource.instance = instance);\n          case \"stylesheet\":\n            styleProps = getStyleKey(props.href);\n            var _instance = hoistableRoot.querySelector(\n              getStylesheetSelectorFromKey(styleProps)\n            );\n            if (_instance)\n              return (\n                (resource.state.loading |= Inserted),\n                (resource.instance = _instance),\n                markNodeAsHoistable(_instance),\n                _instance\n              );\n            instance = stylesheetPropsFromRawProps(props);\n            (styleProps = preloadPropsMap.get(styleProps)) &&\n              adoptPreloadPropsForStylesheet(instance, styleProps);\n            _instance = (\n              hoistableRoot.ownerDocument || hoistableRoot\n            ).createElement(\"link\");\n            markNodeAsHoistable(_instance);\n            var linkInstance = _instance;\n            linkInstance._p = new Promise(function (resolve, reject) {\n              linkInstance.onload = resolve;\n              linkInstance.onerror = reject;\n            });\n            setInitialProperties(_instance, \"link\", instance);\n            resource.state.loading |= Inserted;\n            insertStylesheet(_instance, props.precedence, hoistableRoot);\n            return (resource.instance = _instance);\n          case \"script\":\n            _instance = getScriptKey(props.src);\n            if (\n              (styleProps = hoistableRoot.querySelector(\n                getScriptSelectorFromKey(_instance)\n              ))\n            )\n              return (\n                (resource.instance = styleProps),\n                markNodeAsHoistable(styleProps),\n                styleProps\n              );\n            instance = props;\n            if ((styleProps = preloadPropsMap.get(_instance)))\n              (instance = assign({}, props)),\n                adoptPreloadPropsForScript(instance, styleProps);\n            hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n            styleProps = hoistableRoot.createElement(\"script\");\n            markNodeAsHoistable(styleProps);\n            setInitialProperties(styleProps, \"link\", instance);\n            hoistableRoot.head.appendChild(styleProps);\n            return (resource.instance = styleProps);\n          case \"void\":\n            return null;\n          default:\n            throw Error(\n              'acquireResource encountered a resource type it did not expect: \"' +\n                resource.type +\n                '\". this is a bug in React.'\n            );\n        }\n      else\n        \"stylesheet\" === resource.type &&\n          (resource.state.loading & Inserted) === NotLoaded &&\n          ((instance = resource.instance),\n          (resource.state.loading |= Inserted),\n          insertStylesheet(instance, props.precedence, hoistableRoot));\n      return resource.instance;\n    }\n    function insertStylesheet(instance, precedence, root) {\n      for (\n        var nodes = root.querySelectorAll(\n            'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n          ),\n          last = nodes.length ? nodes[nodes.length - 1] : null,\n          prior = last,\n          i = 0;\n        i < nodes.length;\n        i++\n      ) {\n        var node = nodes[i];\n        if (node.dataset.precedence === precedence) prior = node;\n        else if (prior !== last) break;\n      }\n      prior\n        ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n        : ((precedence = 9 === root.nodeType ? root.head : root),\n          precedence.insertBefore(instance, precedence.firstChild));\n    }\n    function adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n      null == stylesheetProps.crossOrigin &&\n        (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n      null == stylesheetProps.referrerPolicy &&\n        (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n      null == stylesheetProps.title &&\n        (stylesheetProps.title = preloadProps.title);\n    }\n    function adoptPreloadPropsForScript(scriptProps, preloadProps) {\n      null == scriptProps.crossOrigin &&\n        (scriptProps.crossOrigin = preloadProps.crossOrigin);\n      null == scriptProps.referrerPolicy &&\n        (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n      null == scriptProps.integrity &&\n        (scriptProps.integrity = preloadProps.integrity);\n    }\n    function getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n      if (null === tagCaches) {\n        var cache = new Map();\n        var caches = (tagCaches = new Map());\n        caches.set(ownerDocument, cache);\n      } else\n        (caches = tagCaches),\n          (cache = caches.get(ownerDocument)),\n          cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n      if (cache.has(type)) return cache;\n      cache.set(type, null);\n      ownerDocument = ownerDocument.getElementsByTagName(type);\n      for (caches = 0; caches < ownerDocument.length; caches++) {\n        var node = ownerDocument[caches];\n        if (\n          !(\n            node[internalHoistableMarker] ||\n            node[internalInstanceKey] ||\n            (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n          ) &&\n          node.namespaceURI !== SVG_NAMESPACE\n        ) {\n          var nodeKey = node.getAttribute(keyAttribute) || \"\";\n          nodeKey = type + nodeKey;\n          var existing = cache.get(nodeKey);\n          existing ? existing.push(node) : cache.set(nodeKey, [node]);\n        }\n      }\n      return cache;\n    }\n    function mountHoistable(hoistableRoot, type, instance) {\n      hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n      hoistableRoot.head.insertBefore(\n        instance,\n        \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n      );\n    }\n    function isHostHoistableType(type, props, hostContext) {\n      var outsideHostContainerContext =\n        !hostContext.ancestorInfo.containerTagInScope;\n      if (\n        hostContext.context === HostContextNamespaceSvg ||\n        null != props.itemProp\n      )\n        return (\n          !outsideHostContainerContext ||\n            null == props.itemProp ||\n            (\"meta\" !== type &&\n              \"title\" !== type &&\n              \"style\" !== type &&\n              \"link\" !== type &&\n              \"script\" !== type) ||\n            console.error(\n              \"Cannot render a <%s> outside the main document if it has an `itemProp` prop. `itemProp` suggests the tag belongs to an `itemScope` which can appear anywhere in the DOM. If you were intending for React to hoist this <%s> remove the `itemProp` prop. Otherwise, try moving this tag into the <head> or <body> of the Document.\",\n              type,\n              type\n            ),\n          !1\n        );\n      switch (type) {\n        case \"meta\":\n        case \"title\":\n          return !0;\n        case \"style\":\n          if (\n            \"string\" !== typeof props.precedence ||\n            \"string\" !== typeof props.href ||\n            \"\" === props.href\n          ) {\n            outsideHostContainerContext &&\n              console.error(\n                'Cannot render a <style> outside the main document without knowing its precedence and a unique href key. React can hoist and deduplicate <style> tags if you provide a `precedence` prop along with an `href` prop that does not conflict with the `href` values used in any other hoisted <style> or <link rel=\"stylesheet\" ...> tags.  Note that hoisting <style> tags is considered an advanced feature that most will not use directly. Consider moving the <style> tag to the <head> or consider adding a `precedence=\"default\"` and `href=\"some unique resource identifier\"`.'\n              );\n            break;\n          }\n          return !0;\n        case \"link\":\n          if (\n            \"string\" !== typeof props.rel ||\n            \"string\" !== typeof props.href ||\n            \"\" === props.href ||\n            props.onLoad ||\n            props.onError\n          ) {\n            if (\n              \"stylesheet\" === props.rel &&\n              \"string\" === typeof props.precedence\n            ) {\n              type = props.href;\n              var onError = props.onError,\n                disabled = props.disabled;\n              hostContext = [];\n              props.onLoad && hostContext.push(\"`onLoad`\");\n              onError && hostContext.push(\"`onError`\");\n              null != disabled && hostContext.push(\"`disabled`\");\n              onError = propNamesListJoin(hostContext, \"and\");\n              onError += 1 === hostContext.length ? \" prop\" : \" props\";\n              disabled =\n                1 === hostContext.length ? \"an \" + onError : \"the \" + onError;\n              hostContext.length &&\n                console.error(\n                  'React encountered a <link rel=\"stylesheet\" href=\"%s\" ... /> with a `precedence` prop that also included %s. The presence of loading and error handlers indicates an intent to manage the stylesheet loading state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the %s, otherwise remove the `precedence` prop.',\n                  type,\n                  disabled,\n                  onError\n                );\n            }\n            outsideHostContainerContext &&\n              (\"string\" !== typeof props.rel ||\n              \"string\" !== typeof props.href ||\n              \"\" === props.href\n                ? console.error(\n                    \"Cannot render a <link> outside the main document without a `rel` and `href` prop. Try adding a `rel` and/or `href` prop to this <link> or moving the link into the <head> tag\"\n                  )\n                : (props.onError || props.onLoad) &&\n                  console.error(\n                    \"Cannot render a <link> with onLoad or onError listeners outside the main document. Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or somewhere in the <body>.\"\n                  ));\n            break;\n          }\n          switch (props.rel) {\n            case \"stylesheet\":\n              return (\n                (type = props.precedence),\n                (props = props.disabled),\n                \"string\" !== typeof type &&\n                  outsideHostContainerContext &&\n                  console.error(\n                    'Cannot render a <link rel=\"stylesheet\" /> outside the main document without knowing its precedence. Consider adding precedence=\"default\" or moving it into the root <head> tag.'\n                  ),\n                \"string\" === typeof type && null == props\n              );\n            default:\n              return !0;\n          }\n        case \"script\":\n          type =\n            props.async &&\n            \"function\" !== typeof props.async &&\n            \"symbol\" !== typeof props.async;\n          if (\n            !type ||\n            props.onLoad ||\n            props.onError ||\n            !props.src ||\n            \"string\" !== typeof props.src\n          ) {\n            outsideHostContainerContext &&\n              (type\n                ? props.onLoad || props.onError\n                  ? console.error(\n                      \"Cannot render a <script> with onLoad or onError listeners outside the main document. Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or somewhere in the <body>.\"\n                    )\n                  : console.error(\n                      \"Cannot render a <script> outside the main document without `async={true}` and a non-empty `src` prop. Ensure there is a valid `src` and either make the script async or move it into the root <head> tag or somewhere in the <body>.\"\n                    )\n                : console.error(\n                    'Cannot render a sync or defer <script> outside the main document without knowing its order. Try adding async=\"\" or moving it into the root <head> tag.'\n                  ));\n            break;\n          }\n          return !0;\n        case \"noscript\":\n        case \"template\":\n          outsideHostContainerContext &&\n            console.error(\n              \"Cannot render <%s> outside the main document. Try moving it into the root <head> tag.\",\n              type\n            );\n      }\n      return !1;\n    }\n    function preloadResource(resource) {\n      return \"stylesheet\" === resource.type &&\n        (resource.state.loading & Settled) === NotLoaded\n        ? !1\n        : !0;\n    }\n    function suspendResource(hoistableRoot, resource, props) {\n      if (null === suspendedState)\n        throw Error(\n          \"Internal React Error: suspendedState null when it was expected to exists. Please report this as a React bug.\"\n        );\n      var state = suspendedState;\n      if (\n        \"stylesheet\" === resource.type &&\n        (\"string\" !== typeof props.media ||\n          !1 !== matchMedia(props.media).matches) &&\n        (resource.state.loading & Inserted) === NotLoaded\n      ) {\n        if (null === resource.instance) {\n          var key = getStyleKey(props.href),\n            instance = hoistableRoot.querySelector(\n              getStylesheetSelectorFromKey(key)\n            );\n          if (instance) {\n            hoistableRoot = instance._p;\n            null !== hoistableRoot &&\n              \"object\" === typeof hoistableRoot &&\n              \"function\" === typeof hoistableRoot.then &&\n              (state.count++,\n              (state = onUnsuspend.bind(state)),\n              hoistableRoot.then(state, state));\n            resource.state.loading |= Inserted;\n            resource.instance = instance;\n            markNodeAsHoistable(instance);\n            return;\n          }\n          instance = hoistableRoot.ownerDocument || hoistableRoot;\n          props = stylesheetPropsFromRawProps(props);\n          (key = preloadPropsMap.get(key)) &&\n            adoptPreloadPropsForStylesheet(props, key);\n          instance = instance.createElement(\"link\");\n          markNodeAsHoistable(instance);\n          var linkInstance = instance;\n          linkInstance._p = new Promise(function (resolve, reject) {\n            linkInstance.onload = resolve;\n            linkInstance.onerror = reject;\n          });\n          setInitialProperties(instance, \"link\", props);\n          resource.instance = instance;\n        }\n        null === state.stylesheets && (state.stylesheets = new Map());\n        state.stylesheets.set(resource, hoistableRoot);\n        (hoistableRoot = resource.state.preload) &&\n          (resource.state.loading & Settled) === NotLoaded &&\n          (state.count++,\n          (resource = onUnsuspend.bind(state)),\n          hoistableRoot.addEventListener(\"load\", resource),\n          hoistableRoot.addEventListener(\"error\", resource));\n      }\n    }\n    function waitForCommitToBeReady() {\n      if (null === suspendedState)\n        throw Error(\n          \"Internal React Error: suspendedState null when it was expected to exists. Please report this as a React bug.\"\n        );\n      var state = suspendedState;\n      state.stylesheets &&\n        0 === state.count &&\n        insertSuspendedStylesheets(state, state.stylesheets);\n      return 0 < state.count\n        ? function (commit) {\n            var stylesheetTimer = setTimeout(function () {\n              state.stylesheets &&\n                insertSuspendedStylesheets(state, state.stylesheets);\n              if (state.unsuspend) {\n                var unsuspend = state.unsuspend;\n                state.unsuspend = null;\n                unsuspend();\n              }\n            }, 6e4);\n            state.unsuspend = commit;\n            return function () {\n              state.unsuspend = null;\n              clearTimeout(stylesheetTimer);\n            };\n          }\n        : null;\n    }\n    function onUnsuspend() {\n      this.count--;\n      if (0 === this.count)\n        if (this.stylesheets)\n          insertSuspendedStylesheets(this, this.stylesheets);\n        else if (this.unsuspend) {\n          var unsuspend = this.unsuspend;\n          this.unsuspend = null;\n          unsuspend();\n        }\n    }\n    function insertSuspendedStylesheets(state, resources) {\n      state.stylesheets = null;\n      null !== state.unsuspend &&\n        (state.count++,\n        (precedencesByRoot = new Map()),\n        resources.forEach(insertStylesheetIntoRoot, state),\n        (precedencesByRoot = null),\n        onUnsuspend.call(state));\n    }\n    function insertStylesheetIntoRoot(root, resource) {\n      if (!(resource.state.loading & Inserted)) {\n        var precedences = precedencesByRoot.get(root);\n        if (precedences) var last = precedences.get(LAST_PRECEDENCE);\n        else {\n          precedences = new Map();\n          precedencesByRoot.set(root, precedences);\n          for (\n            var nodes = root.querySelectorAll(\n                \"link[data-precedence],style[data-precedence]\"\n              ),\n              i = 0;\n            i < nodes.length;\n            i++\n          ) {\n            var node = nodes[i];\n            if (\n              \"LINK\" === node.nodeName ||\n              \"not all\" !== node.getAttribute(\"media\")\n            )\n              precedences.set(node.dataset.precedence, node), (last = node);\n          }\n          last && precedences.set(LAST_PRECEDENCE, last);\n        }\n        nodes = resource.instance;\n        node = nodes.getAttribute(\"data-precedence\");\n        i = precedences.get(node) || last;\n        i === last && precedences.set(LAST_PRECEDENCE, nodes);\n        precedences.set(node, nodes);\n        this.count++;\n        last = onUnsuspend.bind(this);\n        nodes.addEventListener(\"load\", last);\n        nodes.addEventListener(\"error\", last);\n        i\n          ? i.parentNode.insertBefore(nodes, i.nextSibling)\n          : ((root = 9 === root.nodeType ? root.head : root),\n            root.insertBefore(nodes, root.firstChild));\n        resource.state.loading |= Inserted;\n      }\n    }\n    function FiberRootNode(\n      containerInfo,\n      tag,\n      hydrate,\n      identifierPrefix,\n      onUncaughtError,\n      onCaughtError,\n      onRecoverableError,\n      onDefaultTransitionIndicator,\n      formState\n    ) {\n      this.tag = 1;\n      this.containerInfo = containerInfo;\n      this.pingCache = this.current = this.pendingChildren = null;\n      this.timeoutHandle = noTimeout;\n      this.callbackNode =\n        this.next =\n        this.pendingContext =\n        this.context =\n        this.cancelPendingCommit =\n          null;\n      this.callbackPriority = 0;\n      this.expirationTimes = createLaneMap(-1);\n      this.entangledLanes =\n        this.shellSuspendCounter =\n        this.errorRecoveryDisabledLanes =\n        this.expiredLanes =\n        this.warmLanes =\n        this.pingedLanes =\n        this.suspendedLanes =\n        this.pendingLanes =\n          0;\n      this.entanglements = createLaneMap(0);\n      this.hiddenUpdates = createLaneMap(null);\n      this.identifierPrefix = identifierPrefix;\n      this.onUncaughtError = onUncaughtError;\n      this.onCaughtError = onCaughtError;\n      this.onRecoverableError = onRecoverableError;\n      this.pooledCache = null;\n      this.pooledCacheLanes = 0;\n      this.formState = formState;\n      this.incompleteTransitions = new Map();\n      this.passiveEffectDuration = this.effectDuration = -0;\n      this.memoizedUpdaters = new Set();\n      containerInfo = this.pendingUpdatersLaneMap = [];\n      for (tag = 0; 31 > tag; tag++) containerInfo.push(new Set());\n      this._debugRootType = hydrate ? \"hydrateRoot()\" : \"createRoot()\";\n    }\n    function createFiberRoot(\n      containerInfo,\n      tag,\n      hydrate,\n      initialChildren,\n      hydrationCallbacks,\n      isStrictMode,\n      identifierPrefix,\n      formState,\n      onUncaughtError,\n      onCaughtError,\n      onRecoverableError,\n      onDefaultTransitionIndicator\n    ) {\n      containerInfo = new FiberRootNode(\n        containerInfo,\n        tag,\n        hydrate,\n        identifierPrefix,\n        onUncaughtError,\n        onCaughtError,\n        onRecoverableError,\n        onDefaultTransitionIndicator,\n        formState\n      );\n      tag = ConcurrentMode;\n      !0 === isStrictMode && (tag |= StrictLegacyMode | StrictEffectsMode);\n      isDevToolsPresent && (tag |= ProfileMode);\n      isStrictMode = createFiber(3, null, null, tag);\n      containerInfo.current = isStrictMode;\n      isStrictMode.stateNode = containerInfo;\n      tag = createCache();\n      retainCache(tag);\n      containerInfo.pooledCache = tag;\n      retainCache(tag);\n      isStrictMode.memoizedState = {\n        element: initialChildren,\n        isDehydrated: hydrate,\n        cache: tag\n      };\n      initializeUpdateQueue(isStrictMode);\n      return containerInfo;\n    }\n    function getContextForSubtree(parentComponent) {\n      if (!parentComponent) return emptyContextObject;\n      parentComponent = emptyContextObject;\n      return parentComponent;\n    }\n    function updateContainerImpl(\n      rootFiber,\n      lane,\n      element,\n      container,\n      parentComponent,\n      callback\n    ) {\n      if (\n        injectedHook &&\n        \"function\" === typeof injectedHook.onScheduleFiberRoot\n      )\n        try {\n          injectedHook.onScheduleFiberRoot(rendererID, container, element);\n        } catch (err) {\n          hasLoggedError ||\n            ((hasLoggedError = !0),\n            console.error(\n              \"React instrumentation encountered an error: %s\",\n              err\n            ));\n        }\n      null !== injectedProfilingHooks &&\n        \"function\" === typeof injectedProfilingHooks.markRenderScheduled &&\n        injectedProfilingHooks.markRenderScheduled(lane);\n      parentComponent = getContextForSubtree(parentComponent);\n      null === container.context\n        ? (container.context = parentComponent)\n        : (container.pendingContext = parentComponent);\n      isRendering &&\n        null !== current &&\n        !didWarnAboutNestedUpdates &&\n        ((didWarnAboutNestedUpdates = !0),\n        console.error(\n          \"Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate.\\n\\nCheck the render method of %s.\",\n          getComponentNameFromFiber(current) || \"Unknown\"\n        ));\n      container = createUpdate(lane);\n      container.payload = { element: element };\n      callback = void 0 === callback ? null : callback;\n      null !== callback &&\n        (\"function\" !== typeof callback &&\n          console.error(\n            \"Expected the last optional `callback` argument to be a function. Instead received: %s.\",\n            callback\n          ),\n        (container.callback = callback));\n      element = enqueueUpdate(rootFiber, container, lane);\n      null !== element &&\n        (scheduleUpdateOnFiber(element, rootFiber, lane),\n        entangleTransitions(element, rootFiber, lane));\n    }\n    function markRetryLaneImpl(fiber, retryLane) {\n      fiber = fiber.memoizedState;\n      if (null !== fiber && null !== fiber.dehydrated) {\n        var a = fiber.retryLane;\n        fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n      }\n    }\n    function markRetryLaneIfNotHydrated(fiber, retryLane) {\n      markRetryLaneImpl(fiber, retryLane);\n      (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n    }\n    function attemptContinuousHydration(fiber) {\n      if (13 === fiber.tag || 31 === fiber.tag) {\n        var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n        null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n        markRetryLaneIfNotHydrated(fiber, 67108864);\n      }\n    }\n    function attemptHydrationAtCurrentPriority(fiber) {\n      if (13 === fiber.tag || 31 === fiber.tag) {\n        var lane = requestUpdateLane(fiber);\n        lane = getBumpedLaneForHydrationByLane(lane);\n        var root = enqueueConcurrentRenderForLane(fiber, lane);\n        null !== root && scheduleUpdateOnFiber(root, fiber, lane);\n        markRetryLaneIfNotHydrated(fiber, lane);\n      }\n    }\n    function getCurrentFiberForDevTools() {\n      return current;\n    }\n    function getLaneLabelMap() {\n      for (var map = new Map(), lane = 1, index = 0; 31 > index; index++) {\n        var label = getLabelForLane(lane);\n        map.set(lane, label);\n        lane *= 2;\n      }\n      return map;\n    }\n    function dispatchDiscreteEvent(\n      domEventName,\n      eventSystemFlags,\n      container,\n      nativeEvent\n    ) {\n      var prevTransition = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      try {\n        (ReactDOMSharedInternals.p = DiscreteEventPriority),\n          dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n      } finally {\n        (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = prevTransition);\n      }\n    }\n    function dispatchContinuousEvent(\n      domEventName,\n      eventSystemFlags,\n      container,\n      nativeEvent\n    ) {\n      var prevTransition = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      try {\n        (ReactDOMSharedInternals.p = ContinuousEventPriority),\n          dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n      } finally {\n        (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = prevTransition);\n      }\n    }\n    function dispatchEvent(\n      domEventName,\n      eventSystemFlags,\n      targetContainer,\n      nativeEvent\n    ) {\n      if (_enabled) {\n        var blockedOn = findInstanceBlockingEvent(nativeEvent);\n        if (null === blockedOn)\n          dispatchEventForPluginEventSystem(\n            domEventName,\n            eventSystemFlags,\n            nativeEvent,\n            return_targetInst,\n            targetContainer\n          ),\n            clearIfContinuousEvent(domEventName, nativeEvent);\n        else if (\n          queueIfContinuousEvent(\n            blockedOn,\n            domEventName,\n            eventSystemFlags,\n            targetContainer,\n            nativeEvent\n          )\n        )\n          nativeEvent.stopPropagation();\n        else if (\n          (clearIfContinuousEvent(domEventName, nativeEvent),\n          eventSystemFlags & 4 &&\n            -1 < discreteReplayableEvents.indexOf(domEventName))\n        ) {\n          for (; null !== blockedOn; ) {\n            var fiber = getInstanceFromNode(blockedOn);\n            if (null !== fiber)\n              switch (fiber.tag) {\n                case 3:\n                  fiber = fiber.stateNode;\n                  if (fiber.current.memoizedState.isDehydrated) {\n                    var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n                    if (0 !== lanes) {\n                      var root = fiber;\n                      root.pendingLanes |= 2;\n                      for (root.entangledLanes |= 2; lanes; ) {\n                        var lane = 1 << (31 - clz32(lanes));\n                        root.entanglements[1] |= lane;\n                        lanes &= ~lane;\n                      }\n                      ensureRootIsScheduled(fiber);\n                      (executionContext & (RenderContext | CommitContext)) ===\n                        NoContext &&\n                        ((workInProgressRootRenderTargetTime =\n                          now$1() + RENDER_TIMEOUT_MS),\n                        flushSyncWorkAcrossRoots_impl(0, !1));\n                    }\n                  }\n                  break;\n                case 31:\n                case 13:\n                  (root = enqueueConcurrentRenderForLane(fiber, 2)),\n                    null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n                    flushSyncWork$1(),\n                    markRetryLaneIfNotHydrated(fiber, 2);\n              }\n            fiber = findInstanceBlockingEvent(nativeEvent);\n            null === fiber &&\n              dispatchEventForPluginEventSystem(\n                domEventName,\n                eventSystemFlags,\n                nativeEvent,\n                return_targetInst,\n                targetContainer\n              );\n            if (fiber === blockedOn) break;\n            blockedOn = fiber;\n          }\n          null !== blockedOn && nativeEvent.stopPropagation();\n        } else\n          dispatchEventForPluginEventSystem(\n            domEventName,\n            eventSystemFlags,\n            nativeEvent,\n            null,\n            targetContainer\n          );\n      }\n    }\n    function findInstanceBlockingEvent(nativeEvent) {\n      nativeEvent = getEventTarget(nativeEvent);\n      return findInstanceBlockingTarget(nativeEvent);\n    }\n    function findInstanceBlockingTarget(targetNode) {\n      return_targetInst = null;\n      targetNode = getClosestInstanceFromNode(targetNode);\n      if (null !== targetNode) {\n        var nearestMounted = getNearestMountedFiber(targetNode);\n        if (null === nearestMounted) targetNode = null;\n        else {\n          var tag = nearestMounted.tag;\n          if (13 === tag) {\n            targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n            if (null !== targetNode) return targetNode;\n            targetNode = null;\n          } else if (31 === tag) {\n            targetNode = getActivityInstanceFromFiber(nearestMounted);\n            if (null !== targetNode) return targetNode;\n            targetNode = null;\n          } else if (3 === tag) {\n            if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n              return 3 === nearestMounted.tag\n                ? nearestMounted.stateNode.containerInfo\n                : null;\n            targetNode = null;\n          } else nearestMounted !== targetNode && (targetNode = null);\n        }\n      }\n      return_targetInst = targetNode;\n      return null;\n    }\n    function getEventPriority(domEventName) {\n      switch (domEventName) {\n        case \"beforetoggle\":\n        case \"cancel\":\n        case \"click\":\n        case \"close\":\n        case \"contextmenu\":\n        case \"copy\":\n        case \"cut\":\n        case \"auxclick\":\n        case \"dblclick\":\n        case \"dragend\":\n        case \"dragstart\":\n        case \"drop\":\n        case \"focusin\":\n        case \"focusout\":\n        case \"input\":\n        case \"invalid\":\n        case \"keydown\":\n        case \"keypress\":\n        case \"keyup\":\n        case \"mousedown\":\n        case \"mouseup\":\n        case \"paste\":\n        case \"pause\":\n        case \"play\":\n        case \"pointercancel\":\n        case \"pointerdown\":\n        case \"pointerup\":\n        case \"ratechange\":\n        case \"reset\":\n        case \"resize\":\n        case \"seeked\":\n        case \"submit\":\n        case \"toggle\":\n        case \"touchcancel\":\n        case \"touchend\":\n        case \"touchstart\":\n        case \"volumechange\":\n        case \"change\":\n        case \"selectionchange\":\n        case \"textInput\":\n        case \"compositionstart\":\n        case \"compositionend\":\n        case \"compositionupdate\":\n        case \"beforeblur\":\n        case \"afterblur\":\n        case \"beforeinput\":\n        case \"blur\":\n        case \"fullscreenchange\":\n        case \"focus\":\n        case \"hashchange\":\n        case \"popstate\":\n        case \"select\":\n        case \"selectstart\":\n          return DiscreteEventPriority;\n        case \"drag\":\n        case \"dragenter\":\n        case \"dragexit\":\n        case \"dragleave\":\n        case \"dragover\":\n        case \"mousemove\":\n        case \"mouseout\":\n        case \"mouseover\":\n        case \"pointermove\":\n        case \"pointerout\":\n        case \"pointerover\":\n        case \"scroll\":\n        case \"touchmove\":\n        case \"wheel\":\n        case \"mouseenter\":\n        case \"mouseleave\":\n        case \"pointerenter\":\n        case \"pointerleave\":\n          return ContinuousEventPriority;\n        case \"message\":\n          switch (getCurrentPriorityLevel()) {\n            case ImmediatePriority:\n              return DiscreteEventPriority;\n            case UserBlockingPriority:\n              return ContinuousEventPriority;\n            case NormalPriority$1:\n            case LowPriority:\n              return DefaultEventPriority;\n            case IdlePriority:\n              return IdleEventPriority;\n            default:\n              return DefaultEventPriority;\n          }\n        default:\n          return DefaultEventPriority;\n      }\n    }\n    function clearIfContinuousEvent(domEventName, nativeEvent) {\n      switch (domEventName) {\n        case \"focusin\":\n        case \"focusout\":\n          queuedFocus = null;\n          break;\n        case \"dragenter\":\n        case \"dragleave\":\n          queuedDrag = null;\n          break;\n        case \"mouseover\":\n        case \"mouseout\":\n          queuedMouse = null;\n          break;\n        case \"pointerover\":\n        case \"pointerout\":\n          queuedPointers.delete(nativeEvent.pointerId);\n          break;\n        case \"gotpointercapture\":\n        case \"lostpointercapture\":\n          queuedPointerCaptures.delete(nativeEvent.pointerId);\n      }\n    }\n    function accumulateOrCreateContinuousQueuedReplayableEvent(\n      existingQueuedEvent,\n      blockedOn,\n      domEventName,\n      eventSystemFlags,\n      targetContainer,\n      nativeEvent\n    ) {\n      if (\n        null === existingQueuedEvent ||\n        existingQueuedEvent.nativeEvent !== nativeEvent\n      )\n        return (\n          (existingQueuedEvent = {\n            blockedOn: blockedOn,\n            domEventName: domEventName,\n            eventSystemFlags: eventSystemFlags,\n            nativeEvent: nativeEvent,\n            targetContainers: [targetContainer]\n          }),\n          null !== blockedOn &&\n            ((blockedOn = getInstanceFromNode(blockedOn)),\n            null !== blockedOn && attemptContinuousHydration(blockedOn)),\n          existingQueuedEvent\n        );\n      existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n      blockedOn = existingQueuedEvent.targetContainers;\n      null !== targetContainer &&\n        -1 === blockedOn.indexOf(targetContainer) &&\n        blockedOn.push(targetContainer);\n      return existingQueuedEvent;\n    }\n    function queueIfContinuousEvent(\n      blockedOn,\n      domEventName,\n      eventSystemFlags,\n      targetContainer,\n      nativeEvent\n    ) {\n      switch (domEventName) {\n        case \"focusin\":\n          return (\n            (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n              queuedFocus,\n              blockedOn,\n              domEventName,\n              eventSystemFlags,\n              targetContainer,\n              nativeEvent\n            )),\n            !0\n          );\n        case \"dragenter\":\n          return (\n            (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n              queuedDrag,\n              blockedOn,\n              domEventName,\n              eventSystemFlags,\n              targetContainer,\n              nativeEvent\n            )),\n            !0\n          );\n        case \"mouseover\":\n          return (\n            (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n              queuedMouse,\n              blockedOn,\n              domEventName,\n              eventSystemFlags,\n              targetContainer,\n              nativeEvent\n            )),\n            !0\n          );\n        case \"pointerover\":\n          var pointerId = nativeEvent.pointerId;\n          queuedPointers.set(\n            pointerId,\n            accumulateOrCreateContinuousQueuedReplayableEvent(\n              queuedPointers.get(pointerId) || null,\n              blockedOn,\n              domEventName,\n              eventSystemFlags,\n              targetContainer,\n              nativeEvent\n            )\n          );\n          return !0;\n        case \"gotpointercapture\":\n          return (\n            (pointerId = nativeEvent.pointerId),\n            queuedPointerCaptures.set(\n              pointerId,\n              accumulateOrCreateContinuousQueuedReplayableEvent(\n                queuedPointerCaptures.get(pointerId) || null,\n                blockedOn,\n                domEventName,\n                eventSystemFlags,\n                targetContainer,\n                nativeEvent\n              )\n            ),\n            !0\n          );\n      }\n      return !1;\n    }\n    function attemptExplicitHydrationTarget(queuedTarget) {\n      var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n      if (null !== targetInst) {\n        var nearestMounted = getNearestMountedFiber(targetInst);\n        if (null !== nearestMounted)\n          if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n            if (\n              ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n              null !== targetInst)\n            ) {\n              queuedTarget.blockedOn = targetInst;\n              runWithPriority(queuedTarget.priority, function () {\n                attemptHydrationAtCurrentPriority(nearestMounted);\n              });\n              return;\n            }\n          } else if (31 === targetInst) {\n            if (\n              ((targetInst = getActivityInstanceFromFiber(nearestMounted)),\n              null !== targetInst)\n            ) {\n              queuedTarget.blockedOn = targetInst;\n              runWithPriority(queuedTarget.priority, function () {\n                attemptHydrationAtCurrentPriority(nearestMounted);\n              });\n              return;\n            }\n          } else if (\n            3 === targetInst &&\n            nearestMounted.stateNode.current.memoizedState.isDehydrated\n          ) {\n            queuedTarget.blockedOn =\n              3 === nearestMounted.tag\n                ? nearestMounted.stateNode.containerInfo\n                : null;\n            return;\n          }\n      }\n      queuedTarget.blockedOn = null;\n    }\n    function attemptReplayContinuousQueuedEvent(queuedEvent) {\n      if (null !== queuedEvent.blockedOn) return !1;\n      for (\n        var targetContainers = queuedEvent.targetContainers;\n        0 < targetContainers.length;\n\n      ) {\n        var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n        if (null === nextBlockedOn) {\n          nextBlockedOn = queuedEvent.nativeEvent;\n          var nativeEventClone = new nextBlockedOn.constructor(\n              nextBlockedOn.type,\n              nextBlockedOn\n            ),\n            event = nativeEventClone;\n          null !== currentReplayingEvent &&\n            console.error(\n              \"Expected currently replaying event to be null. This error is likely caused by a bug in React. Please file an issue.\"\n            );\n          currentReplayingEvent = event;\n          nextBlockedOn.target.dispatchEvent(nativeEventClone);\n          null === currentReplayingEvent &&\n            console.error(\n              \"Expected currently replaying event to not be null. This error is likely caused by a bug in React. Please file an issue.\"\n            );\n          currentReplayingEvent = null;\n        } else\n          return (\n            (targetContainers = getInstanceFromNode(nextBlockedOn)),\n            null !== targetContainers &&\n              attemptContinuousHydration(targetContainers),\n            (queuedEvent.blockedOn = nextBlockedOn),\n            !1\n          );\n        targetContainers.shift();\n      }\n      return !0;\n    }\n    function attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n      attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n    }\n    function replayUnblockedEvents() {\n      hasScheduledReplayAttempt = !1;\n      null !== queuedFocus &&\n        attemptReplayContinuousQueuedEvent(queuedFocus) &&\n        (queuedFocus = null);\n      null !== queuedDrag &&\n        attemptReplayContinuousQueuedEvent(queuedDrag) &&\n        (queuedDrag = null);\n      null !== queuedMouse &&\n        attemptReplayContinuousQueuedEvent(queuedMouse) &&\n        (queuedMouse = null);\n      queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n      queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n    }\n    function scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n      queuedEvent.blockedOn === unblocked &&\n        ((queuedEvent.blockedOn = null),\n        hasScheduledReplayAttempt ||\n          ((hasScheduledReplayAttempt = !0),\n          Scheduler.unstable_scheduleCallback(\n            Scheduler.unstable_NormalPriority,\n            replayUnblockedEvents\n          )));\n    }\n    function scheduleReplayQueueIfNeeded(formReplayingQueue) {\n      lastScheduledReplayQueue !== formReplayingQueue &&\n        ((lastScheduledReplayQueue = formReplayingQueue),\n        Scheduler.unstable_scheduleCallback(\n          Scheduler.unstable_NormalPriority,\n          function () {\n            lastScheduledReplayQueue === formReplayingQueue &&\n              (lastScheduledReplayQueue = null);\n            for (var i = 0; i < formReplayingQueue.length; i += 3) {\n              var form = formReplayingQueue[i],\n                submitterOrAction = formReplayingQueue[i + 1],\n                formData = formReplayingQueue[i + 2];\n              if (\"function\" !== typeof submitterOrAction)\n                if (\n                  null === findInstanceBlockingTarget(submitterOrAction || form)\n                )\n                  continue;\n                else break;\n              var formInst = getInstanceFromNode(form);\n              null !== formInst &&\n                (formReplayingQueue.splice(i, 3),\n                (i -= 3),\n                (form = {\n                  pending: !0,\n                  data: formData,\n                  method: form.method,\n                  action: submitterOrAction\n                }),\n                Object.freeze(form),\n                startHostTransition(\n                  formInst,\n                  form,\n                  submitterOrAction,\n                  formData\n                ));\n            }\n          }\n        ));\n    }\n    function retryIfBlockedOn(unblocked) {\n      function unblock(queuedEvent) {\n        return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n      }\n      null !== queuedFocus &&\n        scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n      null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n      null !== queuedMouse &&\n        scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n      queuedPointers.forEach(unblock);\n      queuedPointerCaptures.forEach(unblock);\n      for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n        var queuedTarget = queuedExplicitHydrationTargets[i];\n        queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n      }\n      for (\n        ;\n        0 < queuedExplicitHydrationTargets.length &&\n        ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n      )\n        attemptExplicitHydrationTarget(i),\n          null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n      i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n      if (null != i)\n        for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n          var form = i[queuedTarget],\n            submitterOrAction = i[queuedTarget + 1],\n            formProps = form[internalPropsKey] || null;\n          if (\"function\" === typeof submitterOrAction)\n            formProps || scheduleReplayQueueIfNeeded(i);\n          else if (formProps) {\n            var action = null;\n            if (\n              submitterOrAction &&\n              submitterOrAction.hasAttribute(\"formAction\")\n            )\n              if (\n                ((form = submitterOrAction),\n                (formProps = submitterOrAction[internalPropsKey] || null))\n              )\n                action = formProps.formAction;\n              else {\n                if (null !== findInstanceBlockingTarget(form)) continue;\n              }\n            else action = formProps.action;\n            \"function\" === typeof action\n              ? (i[queuedTarget + 1] = action)\n              : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n            scheduleReplayQueueIfNeeded(i);\n          }\n        }\n    }\n    function defaultOnDefaultTransitionIndicator() {\n      function handleNavigate(event) {\n        event.canIntercept &&\n          \"react-transition\" === event.info &&\n          event.intercept({\n            handler: function () {\n              return new Promise(function (resolve) {\n                return (pendingResolve = resolve);\n              });\n            },\n            focusReset: \"manual\",\n            scroll: \"manual\"\n          });\n      }\n      function handleNavigateComplete() {\n        null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n        isCancelled || setTimeout(startFakeNavigation, 20);\n      }\n      function startFakeNavigation() {\n        if (!isCancelled && !navigation.transition) {\n          var currentEntry = navigation.currentEntry;\n          currentEntry &&\n            null != currentEntry.url &&\n            navigation.navigate(currentEntry.url, {\n              state: currentEntry.getState(),\n              info: \"react-transition\",\n              history: \"replace\"\n            });\n        }\n      }\n      if (\"object\" === typeof navigation) {\n        var isCancelled = !1,\n          pendingResolve = null;\n        navigation.addEventListener(\"navigate\", handleNavigate);\n        navigation.addEventListener(\"navigatesuccess\", handleNavigateComplete);\n        navigation.addEventListener(\"navigateerror\", handleNavigateComplete);\n        setTimeout(startFakeNavigation, 100);\n        return function () {\n          isCancelled = !0;\n          navigation.removeEventListener(\"navigate\", handleNavigate);\n          navigation.removeEventListener(\n            \"navigatesuccess\",\n            handleNavigateComplete\n          );\n          navigation.removeEventListener(\n            \"navigateerror\",\n            handleNavigateComplete\n          );\n          null !== pendingResolve &&\n            (pendingResolve(), (pendingResolve = null));\n        };\n      }\n    }\n    function ReactDOMRoot(internalRoot) {\n      this._internalRoot = internalRoot;\n    }\n    function ReactDOMHydrationRoot(internalRoot) {\n      this._internalRoot = internalRoot;\n    }\n    function warnIfReactDOMContainerInDEV(container) {\n      container[internalContainerInstanceKey] &&\n        (container._reactRootContainer\n          ? console.error(\n              \"You are calling ReactDOMClient.createRoot() on a container that was previously passed to ReactDOM.render(). This is not supported.\"\n            )\n          : console.error(\n              \"You are calling ReactDOMClient.createRoot() on a container that has already been passed to createRoot() before. Instead, call root.render() on the existing root instead if you want to update it.\"\n            ));\n    }\n    \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n      \"function\" ===\n        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n    var Scheduler = __webpack_require__(/*! next/dist/compiled/scheduler */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/scheduler/index.js\"),\n      React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"),\n      ReactDOM = __webpack_require__(/*! next/dist/compiled/react-dom */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/index.js\"),\n      assign = Object.assign,\n      REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n      REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n      REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n      REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n      REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n      REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n      REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n      REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n      REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n      REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n      REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n      REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n      REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\n    Symbol.for(\"react.scope\");\n    var REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\n    Symbol.for(\"react.legacy_hidden\");\n    Symbol.for(\"react.tracing_marker\");\n    var REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\n    Symbol.for(\"react.view_transition\");\n    var MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n      REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n      isArrayImpl = Array.isArray,\n      ReactSharedInternals =\n        React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n      ReactDOMSharedInternals =\n        ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n      NotPending = Object.freeze({\n        pending: !1,\n        data: null,\n        method: null,\n        action: null\n      }),\n      valueStack = [];\n    var fiberStack = [];\n    var index$jscomp$0 = -1,\n      contextStackCursor = createCursor(null),\n      contextFiberStackCursor = createCursor(null),\n      rootInstanceStackCursor = createCursor(null),\n      hostTransitionProviderCursor = createCursor(null),\n      disabledDepth = 0,\n      prevLog,\n      prevInfo,\n      prevWarn,\n      prevError,\n      prevGroup,\n      prevGroupCollapsed,\n      prevGroupEnd;\n    disabledLog.__reactDisabledLog = !0;\n    var prefix,\n      suffix,\n      reentry = !1;\n    var componentFrameCache = new (\n      \"function\" === typeof WeakMap ? WeakMap : Map\n    )();\n    var current = null,\n      isRendering = !1,\n      hasOwnProperty = Object.prototype.hasOwnProperty,\n      scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n      cancelCallback$1 = Scheduler.unstable_cancelCallback,\n      shouldYield = Scheduler.unstable_shouldYield,\n      requestPaint = Scheduler.unstable_requestPaint,\n      now$1 = Scheduler.unstable_now,\n      getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n      ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n      UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n      NormalPriority$1 = Scheduler.unstable_NormalPriority,\n      LowPriority = Scheduler.unstable_LowPriority,\n      IdlePriority = Scheduler.unstable_IdlePriority,\n      log$1 = Scheduler.log,\n      unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n      rendererID = null,\n      injectedHook = null,\n      injectedProfilingHooks = null,\n      hasLoggedError = !1,\n      isDevToolsPresent = \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__,\n      clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n      log = Math.log,\n      LN2 = Math.LN2,\n      nextTransitionLane = 256,\n      nextRetryLane = 4194304,\n      DiscreteEventPriority = 2,\n      ContinuousEventPriority = 8,\n      DefaultEventPriority = 32,\n      IdleEventPriority = 268435456,\n      randomKey = Math.random().toString(36).slice(2),\n      internalInstanceKey = \"__reactFiber$\" + randomKey,\n      internalPropsKey = \"__reactProps$\" + randomKey,\n      internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n      internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n      internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n      internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n      internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n      internalHoistableMarker = \"__reactMarker$\" + randomKey,\n      allNativeEvents = new Set(),\n      registrationNameDependencies = {},\n      possibleRegistrationNames = {},\n      hasReadOnlyValue = {\n        button: !0,\n        checkbox: !0,\n        image: !0,\n        hidden: !0,\n        radio: !0,\n        reset: !0,\n        submit: !0\n      },\n      VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n        \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n      ),\n      illegalAttributeNameCache = {},\n      validatedAttributeNameCache = {},\n      escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g,\n      didWarnValueDefaultValue$1 = !1,\n      didWarnCheckedDefaultChecked = !1,\n      didWarnSelectedSetOnOption = !1,\n      didWarnInvalidChild = !1,\n      didWarnInvalidInnerHTML = !1;\n    var didWarnValueDefaultValue = !1;\n    var valuePropNames = [\"value\", \"defaultValue\"],\n      didWarnValDefaultVal = !1,\n      needsEscaping = /[\"'&<>\\n\\t]|^\\s|\\s$/,\n      specialTags =\n        \"address applet area article aside base basefont bgsound blockquote body br button caption center col colgroup dd details dir div dl dt embed fieldset figcaption figure footer form frame frameset h1 h2 h3 h4 h5 h6 head header hgroup hr html iframe img input isindex li link listing main marquee menu menuitem meta nav noembed noframes noscript object ol p param plaintext pre script section select source style summary table tbody td template textarea tfoot th thead title tr track ul wbr xmp\".split(\n          \" \"\n        ),\n      inScopeTags =\n        \"applet caption html table td th marquee object template foreignObject desc title\".split(\n          \" \"\n        ),\n      buttonScopeTags = inScopeTags.concat([\"button\"]),\n      impliedEndTags = \"dd dt li option optgroup p rp rt\".split(\" \"),\n      emptyAncestorInfoDev = {\n        current: null,\n        formTag: null,\n        aTagInScope: null,\n        buttonTagInScope: null,\n        nobrTagInScope: null,\n        pTagInButtonScope: null,\n        listItemTagAutoclosing: null,\n        dlItemTagAutoclosing: null,\n        containerTagInScope: null,\n        implicitRootScope: !1\n      },\n      didWarn = {},\n      shorthandToLonghand = {\n        animation:\n          \"animationDelay animationDirection animationDuration animationFillMode animationIterationCount animationName animationPlayState animationTimingFunction\".split(\n            \" \"\n          ),\n        background:\n          \"backgroundAttachment backgroundClip backgroundColor backgroundImage backgroundOrigin backgroundPositionX backgroundPositionY backgroundRepeat backgroundSize\".split(\n            \" \"\n          ),\n        backgroundPosition: [\"backgroundPositionX\", \"backgroundPositionY\"],\n        border:\n          \"borderBottomColor borderBottomStyle borderBottomWidth borderImageOutset borderImageRepeat borderImageSlice borderImageSource borderImageWidth borderLeftColor borderLeftStyle borderLeftWidth borderRightColor borderRightStyle borderRightWidth borderTopColor borderTopStyle borderTopWidth\".split(\n            \" \"\n          ),\n        borderBlockEnd: [\n          \"borderBlockEndColor\",\n          \"borderBlockEndStyle\",\n          \"borderBlockEndWidth\"\n        ],\n        borderBlockStart: [\n          \"borderBlockStartColor\",\n          \"borderBlockStartStyle\",\n          \"borderBlockStartWidth\"\n        ],\n        borderBottom: [\n          \"borderBottomColor\",\n          \"borderBottomStyle\",\n          \"borderBottomWidth\"\n        ],\n        borderColor: [\n          \"borderBottomColor\",\n          \"borderLeftColor\",\n          \"borderRightColor\",\n          \"borderTopColor\"\n        ],\n        borderImage: [\n          \"borderImageOutset\",\n          \"borderImageRepeat\",\n          \"borderImageSlice\",\n          \"borderImageSource\",\n          \"borderImageWidth\"\n        ],\n        borderInlineEnd: [\n          \"borderInlineEndColor\",\n          \"borderInlineEndStyle\",\n          \"borderInlineEndWidth\"\n        ],\n        borderInlineStart: [\n          \"borderInlineStartColor\",\n          \"borderInlineStartStyle\",\n          \"borderInlineStartWidth\"\n        ],\n        borderLeft: [\"borderLeftColor\", \"borderLeftStyle\", \"borderLeftWidth\"],\n        borderRadius: [\n          \"borderBottomLeftRadius\",\n          \"borderBottomRightRadius\",\n          \"borderTopLeftRadius\",\n          \"borderTopRightRadius\"\n        ],\n        borderRight: [\n          \"borderRightColor\",\n          \"borderRightStyle\",\n          \"borderRightWidth\"\n        ],\n        borderStyle: [\n          \"borderBottomStyle\",\n          \"borderLeftStyle\",\n          \"borderRightStyle\",\n          \"borderTopStyle\"\n        ],\n        borderTop: [\"borderTopColor\", \"borderTopStyle\", \"borderTopWidth\"],\n        borderWidth: [\n          \"borderBottomWidth\",\n          \"borderLeftWidth\",\n          \"borderRightWidth\",\n          \"borderTopWidth\"\n        ],\n        columnRule: [\"columnRuleColor\", \"columnRuleStyle\", \"columnRuleWidth\"],\n        columns: [\"columnCount\", \"columnWidth\"],\n        flex: [\"flexBasis\", \"flexGrow\", \"flexShrink\"],\n        flexFlow: [\"flexDirection\", \"flexWrap\"],\n        font: \"fontFamily fontFeatureSettings fontKerning fontLanguageOverride fontSize fontSizeAdjust fontStretch fontStyle fontVariant fontVariantAlternates fontVariantCaps fontVariantEastAsian fontVariantLigatures fontVariantNumeric fontVariantPosition fontWeight lineHeight\".split(\n          \" \"\n        ),\n        fontVariant:\n          \"fontVariantAlternates fontVariantCaps fontVariantEastAsian fontVariantLigatures fontVariantNumeric fontVariantPosition\".split(\n            \" \"\n          ),\n        gap: [\"columnGap\", \"rowGap\"],\n        grid: \"gridAutoColumns gridAutoFlow gridAutoRows gridTemplateAreas gridTemplateColumns gridTemplateRows\".split(\n          \" \"\n        ),\n        gridArea: [\n          \"gridColumnEnd\",\n          \"gridColumnStart\",\n          \"gridRowEnd\",\n          \"gridRowStart\"\n        ],\n        gridColumn: [\"gridColumnEnd\", \"gridColumnStart\"],\n        gridColumnGap: [\"columnGap\"],\n        gridGap: [\"columnGap\", \"rowGap\"],\n        gridRow: [\"gridRowEnd\", \"gridRowStart\"],\n        gridRowGap: [\"rowGap\"],\n        gridTemplate: [\n          \"gridTemplateAreas\",\n          \"gridTemplateColumns\",\n          \"gridTemplateRows\"\n        ],\n        listStyle: [\"listStyleImage\", \"listStylePosition\", \"listStyleType\"],\n        margin: [\"marginBottom\", \"marginLeft\", \"marginRight\", \"marginTop\"],\n        marker: [\"markerEnd\", \"markerMid\", \"markerStart\"],\n        mask: \"maskClip maskComposite maskImage maskMode maskOrigin maskPositionX maskPositionY maskRepeat maskSize\".split(\n          \" \"\n        ),\n        maskPosition: [\"maskPositionX\", \"maskPositionY\"],\n        outline: [\"outlineColor\", \"outlineStyle\", \"outlineWidth\"],\n        overflow: [\"overflowX\", \"overflowY\"],\n        padding: [\"paddingBottom\", \"paddingLeft\", \"paddingRight\", \"paddingTop\"],\n        placeContent: [\"alignContent\", \"justifyContent\"],\n        placeItems: [\"alignItems\", \"justifyItems\"],\n        placeSelf: [\"alignSelf\", \"justifySelf\"],\n        textDecoration: [\n          \"textDecorationColor\",\n          \"textDecorationLine\",\n          \"textDecorationStyle\"\n        ],\n        textEmphasis: [\"textEmphasisColor\", \"textEmphasisStyle\"],\n        transition: [\n          \"transitionDelay\",\n          \"transitionDuration\",\n          \"transitionProperty\",\n          \"transitionTimingFunction\"\n        ],\n        wordWrap: [\"overflowWrap\"]\n      },\n      uppercasePattern = /([A-Z])/g,\n      msPattern$1 = /^ms-/,\n      badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/,\n      msPattern = /^-ms-/,\n      hyphenPattern = /-(.)/g,\n      badStyleValueWithSemicolonPattern = /;\\s*$/,\n      warnedStyleNames = {},\n      warnedStyleValues = {},\n      warnedForNaNValue = !1,\n      warnedForInfinityValue = !1,\n      unitlessNumbers = new Set(\n        \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n          \" \"\n        )\n      ),\n      MATH_NAMESPACE = \"http://www.w3.org/1998/Math/MathML\",\n      SVG_NAMESPACE = \"http://www.w3.org/2000/svg\",\n      aliases = new Map([\n        [\"acceptCharset\", \"accept-charset\"],\n        [\"htmlFor\", \"for\"],\n        [\"httpEquiv\", \"http-equiv\"],\n        [\"crossOrigin\", \"crossorigin\"],\n        [\"accentHeight\", \"accent-height\"],\n        [\"alignmentBaseline\", \"alignment-baseline\"],\n        [\"arabicForm\", \"arabic-form\"],\n        [\"baselineShift\", \"baseline-shift\"],\n        [\"capHeight\", \"cap-height\"],\n        [\"clipPath\", \"clip-path\"],\n        [\"clipRule\", \"clip-rule\"],\n        [\"colorInterpolation\", \"color-interpolation\"],\n        [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n        [\"colorProfile\", \"color-profile\"],\n        [\"colorRendering\", \"color-rendering\"],\n        [\"dominantBaseline\", \"dominant-baseline\"],\n        [\"enableBackground\", \"enable-background\"],\n        [\"fillOpacity\", \"fill-opacity\"],\n        [\"fillRule\", \"fill-rule\"],\n        [\"floodColor\", \"flood-color\"],\n        [\"floodOpacity\", \"flood-opacity\"],\n        [\"fontFamily\", \"font-family\"],\n        [\"fontSize\", \"font-size\"],\n        [\"fontSizeAdjust\", \"font-size-adjust\"],\n        [\"fontStretch\", \"font-stretch\"],\n        [\"fontStyle\", \"font-style\"],\n        [\"fontVariant\", \"font-variant\"],\n        [\"fontWeight\", \"font-weight\"],\n        [\"glyphName\", \"glyph-name\"],\n        [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n        [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n        [\"horizAdvX\", \"horiz-adv-x\"],\n        [\"horizOriginX\", \"horiz-origin-x\"],\n        [\"imageRendering\", \"image-rendering\"],\n        [\"letterSpacing\", \"letter-spacing\"],\n        [\"lightingColor\", \"lighting-color\"],\n        [\"markerEnd\", \"marker-end\"],\n        [\"markerMid\", \"marker-mid\"],\n        [\"markerStart\", \"marker-start\"],\n        [\"overlinePosition\", \"overline-position\"],\n        [\"overlineThickness\", \"overline-thickness\"],\n        [\"paintOrder\", \"paint-order\"],\n        [\"panose-1\", \"panose-1\"],\n        [\"pointerEvents\", \"pointer-events\"],\n        [\"renderingIntent\", \"rendering-intent\"],\n        [\"shapeRendering\", \"shape-rendering\"],\n        [\"stopColor\", \"stop-color\"],\n        [\"stopOpacity\", \"stop-opacity\"],\n        [\"strikethroughPosition\", \"strikethrough-position\"],\n        [\"strikethroughThickness\", \"strikethrough-thickness\"],\n        [\"strokeDasharray\", \"stroke-dasharray\"],\n        [\"strokeDashoffset\", \"stroke-dashoffset\"],\n        [\"strokeLinecap\", \"stroke-linecap\"],\n        [\"strokeLinejoin\", \"stroke-linejoin\"],\n        [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n        [\"strokeOpacity\", \"stroke-opacity\"],\n        [\"strokeWidth\", \"stroke-width\"],\n        [\"textAnchor\", \"text-anchor\"],\n        [\"textDecoration\", \"text-decoration\"],\n        [\"textRendering\", \"text-rendering\"],\n        [\"transformOrigin\", \"transform-origin\"],\n        [\"underlinePosition\", \"underline-position\"],\n        [\"underlineThickness\", \"underline-thickness\"],\n        [\"unicodeBidi\", \"unicode-bidi\"],\n        [\"unicodeRange\", \"unicode-range\"],\n        [\"unitsPerEm\", \"units-per-em\"],\n        [\"vAlphabetic\", \"v-alphabetic\"],\n        [\"vHanging\", \"v-hanging\"],\n        [\"vIdeographic\", \"v-ideographic\"],\n        [\"vMathematical\", \"v-mathematical\"],\n        [\"vectorEffect\", \"vector-effect\"],\n        [\"vertAdvY\", \"vert-adv-y\"],\n        [\"vertOriginX\", \"vert-origin-x\"],\n        [\"vertOriginY\", \"vert-origin-y\"],\n        [\"wordSpacing\", \"word-spacing\"],\n        [\"writingMode\", \"writing-mode\"],\n        [\"xmlnsXlink\", \"xmlns:xlink\"],\n        [\"xHeight\", \"x-height\"]\n      ]),\n      possibleStandardNames = {\n        accept: \"accept\",\n        acceptcharset: \"acceptCharset\",\n        \"accept-charset\": \"acceptCharset\",\n        accesskey: \"accessKey\",\n        action: \"action\",\n        allowfullscreen: \"allowFullScreen\",\n        alt: \"alt\",\n        as: \"as\",\n        async: \"async\",\n        autocapitalize: \"autoCapitalize\",\n        autocomplete: \"autoComplete\",\n        autocorrect: \"autoCorrect\",\n        autofocus: \"autoFocus\",\n        autoplay: \"autoPlay\",\n        autosave: \"autoSave\",\n        capture: \"capture\",\n        cellpadding: \"cellPadding\",\n        cellspacing: \"cellSpacing\",\n        challenge: \"challenge\",\n        charset: \"charSet\",\n        checked: \"checked\",\n        children: \"children\",\n        cite: \"cite\",\n        class: \"className\",\n        classid: \"classID\",\n        classname: \"className\",\n        cols: \"cols\",\n        colspan: \"colSpan\",\n        content: \"content\",\n        contenteditable: \"contentEditable\",\n        contextmenu: \"contextMenu\",\n        controls: \"controls\",\n        controlslist: \"controlsList\",\n        coords: \"coords\",\n        crossorigin: \"crossOrigin\",\n        dangerouslysetinnerhtml: \"dangerouslySetInnerHTML\",\n        data: \"data\",\n        datetime: \"dateTime\",\n        default: \"default\",\n        defaultchecked: \"defaultChecked\",\n        defaultvalue: \"defaultValue\",\n        defer: \"defer\",\n        dir: \"dir\",\n        disabled: \"disabled\",\n        disablepictureinpicture: \"disablePictureInPicture\",\n        disableremoteplayback: \"disableRemotePlayback\",\n        download: \"download\",\n        draggable: \"draggable\",\n        enctype: \"encType\",\n        enterkeyhint: \"enterKeyHint\",\n        fetchpriority: \"fetchPriority\",\n        for: \"htmlFor\",\n        form: \"form\",\n        formmethod: \"formMethod\",\n        formaction: \"formAction\",\n        formenctype: \"formEncType\",\n        formnovalidate: \"formNoValidate\",\n        formtarget: \"formTarget\",\n        frameborder: \"frameBorder\",\n        headers: \"headers\",\n        height: \"height\",\n        hidden: \"hidden\",\n        high: \"high\",\n        href: \"href\",\n        hreflang: \"hrefLang\",\n        htmlfor: \"htmlFor\",\n        httpequiv: \"httpEquiv\",\n        \"http-equiv\": \"httpEquiv\",\n        icon: \"icon\",\n        id: \"id\",\n        imagesizes: \"imageSizes\",\n        imagesrcset: \"imageSrcSet\",\n        inert: \"inert\",\n        innerhtml: \"innerHTML\",\n        inputmode: \"inputMode\",\n        integrity: \"integrity\",\n        is: \"is\",\n        itemid: \"itemID\",\n        itemprop: \"itemProp\",\n        itemref: \"itemRef\",\n        itemscope: \"itemScope\",\n        itemtype: \"itemType\",\n        keyparams: \"keyParams\",\n        keytype: \"keyType\",\n        kind: \"kind\",\n        label: \"label\",\n        lang: \"lang\",\n        list: \"list\",\n        loop: \"loop\",\n        low: \"low\",\n        manifest: \"manifest\",\n        marginwidth: \"marginWidth\",\n        marginheight: \"marginHeight\",\n        max: \"max\",\n        maxlength: \"maxLength\",\n        media: \"media\",\n        mediagroup: \"mediaGroup\",\n        method: \"method\",\n        min: \"min\",\n        minlength: \"minLength\",\n        multiple: \"multiple\",\n        muted: \"muted\",\n        name: \"name\",\n        nomodule: \"noModule\",\n        nonce: \"nonce\",\n        novalidate: \"noValidate\",\n        open: \"open\",\n        optimum: \"optimum\",\n        pattern: \"pattern\",\n        placeholder: \"placeholder\",\n        playsinline: \"playsInline\",\n        poster: \"poster\",\n        preload: \"preload\",\n        profile: \"profile\",\n        radiogroup: \"radioGroup\",\n        readonly: \"readOnly\",\n        referrerpolicy: \"referrerPolicy\",\n        rel: \"rel\",\n        required: \"required\",\n        reversed: \"reversed\",\n        role: \"role\",\n        rows: \"rows\",\n        rowspan: \"rowSpan\",\n        sandbox: \"sandbox\",\n        scope: \"scope\",\n        scoped: \"scoped\",\n        scrolling: \"scrolling\",\n        seamless: \"seamless\",\n        selected: \"selected\",\n        shape: \"shape\",\n        size: \"size\",\n        sizes: \"sizes\",\n        span: \"span\",\n        spellcheck: \"spellCheck\",\n        src: \"src\",\n        srcdoc: \"srcDoc\",\n        srclang: \"srcLang\",\n        srcset: \"srcSet\",\n        start: \"start\",\n        step: \"step\",\n        style: \"style\",\n        summary: \"summary\",\n        tabindex: \"tabIndex\",\n        target: \"target\",\n        title: \"title\",\n        type: \"type\",\n        usemap: \"useMap\",\n        value: \"value\",\n        width: \"width\",\n        wmode: \"wmode\",\n        wrap: \"wrap\",\n        about: \"about\",\n        accentheight: \"accentHeight\",\n        \"accent-height\": \"accentHeight\",\n        accumulate: \"accumulate\",\n        additive: \"additive\",\n        alignmentbaseline: \"alignmentBaseline\",\n        \"alignment-baseline\": \"alignmentBaseline\",\n        allowreorder: \"allowReorder\",\n        alphabetic: \"alphabetic\",\n        amplitude: \"amplitude\",\n        arabicform: \"arabicForm\",\n        \"arabic-form\": \"arabicForm\",\n        ascent: \"ascent\",\n        attributename: \"attributeName\",\n        attributetype: \"attributeType\",\n        autoreverse: \"autoReverse\",\n        azimuth: \"azimuth\",\n        basefrequency: \"baseFrequency\",\n        baselineshift: \"baselineShift\",\n        \"baseline-shift\": \"baselineShift\",\n        baseprofile: \"baseProfile\",\n        bbox: \"bbox\",\n        begin: \"begin\",\n        bias: \"bias\",\n        by: \"by\",\n        calcmode: \"calcMode\",\n        capheight: \"capHeight\",\n        \"cap-height\": \"capHeight\",\n        clip: \"clip\",\n        clippath: \"clipPath\",\n        \"clip-path\": \"clipPath\",\n        clippathunits: \"clipPathUnits\",\n        cliprule: \"clipRule\",\n        \"clip-rule\": \"clipRule\",\n        color: \"color\",\n        colorinterpolation: \"colorInterpolation\",\n        \"color-interpolation\": \"colorInterpolation\",\n        colorinterpolationfilters: \"colorInterpolationFilters\",\n        \"color-interpolation-filters\": \"colorInterpolationFilters\",\n        colorprofile: \"colorProfile\",\n        \"color-profile\": \"colorProfile\",\n        colorrendering: \"colorRendering\",\n        \"color-rendering\": \"colorRendering\",\n        contentscripttype: \"contentScriptType\",\n        contentstyletype: \"contentStyleType\",\n        cursor: \"cursor\",\n        cx: \"cx\",\n        cy: \"cy\",\n        d: \"d\",\n        datatype: \"datatype\",\n        decelerate: \"decelerate\",\n        descent: \"descent\",\n        diffuseconstant: \"diffuseConstant\",\n        direction: \"direction\",\n        display: \"display\",\n        divisor: \"divisor\",\n        dominantbaseline: \"dominantBaseline\",\n        \"dominant-baseline\": \"dominantBaseline\",\n        dur: \"dur\",\n        dx: \"dx\",\n        dy: \"dy\",\n        edgemode: \"edgeMode\",\n        elevation: \"elevation\",\n        enablebackground: \"enableBackground\",\n        \"enable-background\": \"enableBackground\",\n        end: \"end\",\n        exponent: \"exponent\",\n        externalresourcesrequired: \"externalResourcesRequired\",\n        fill: \"fill\",\n        fillopacity: \"fillOpacity\",\n        \"fill-opacity\": \"fillOpacity\",\n        fillrule: \"fillRule\",\n        \"fill-rule\": \"fillRule\",\n        filter: \"filter\",\n        filterres: \"filterRes\",\n        filterunits: \"filterUnits\",\n        floodopacity: \"floodOpacity\",\n        \"flood-opacity\": \"floodOpacity\",\n        floodcolor: \"floodColor\",\n        \"flood-color\": \"floodColor\",\n        focusable: \"focusable\",\n        fontfamily: \"fontFamily\",\n        \"font-family\": \"fontFamily\",\n        fontsize: \"fontSize\",\n        \"font-size\": \"fontSize\",\n        fontsizeadjust: \"fontSizeAdjust\",\n        \"font-size-adjust\": \"fontSizeAdjust\",\n        fontstretch: \"fontStretch\",\n        \"font-stretch\": \"fontStretch\",\n        fontstyle: \"fontStyle\",\n        \"font-style\": \"fontStyle\",\n        fontvariant: \"fontVariant\",\n        \"font-variant\": \"fontVariant\",\n        fontweight: \"fontWeight\",\n        \"font-weight\": \"fontWeight\",\n        format: \"format\",\n        from: \"from\",\n        fx: \"fx\",\n        fy: \"fy\",\n        g1: \"g1\",\n        g2: \"g2\",\n        glyphname: \"glyphName\",\n        \"glyph-name\": \"glyphName\",\n        glyphorientationhorizontal: \"glyphOrientationHorizontal\",\n        \"glyph-orientation-horizontal\": \"glyphOrientationHorizontal\",\n        glyphorientationvertical: \"glyphOrientationVertical\",\n        \"glyph-orientation-vertical\": \"glyphOrientationVertical\",\n        glyphref: \"glyphRef\",\n        gradienttransform: \"gradientTransform\",\n        gradientunits: \"gradientUnits\",\n        hanging: \"hanging\",\n        horizadvx: \"horizAdvX\",\n        \"horiz-adv-x\": \"horizAdvX\",\n        horizoriginx: \"horizOriginX\",\n        \"horiz-origin-x\": \"horizOriginX\",\n        ideographic: \"ideographic\",\n        imagerendering: \"imageRendering\",\n        \"image-rendering\": \"imageRendering\",\n        in2: \"in2\",\n        in: \"in\",\n        inlist: \"inlist\",\n        intercept: \"intercept\",\n        k1: \"k1\",\n        k2: \"k2\",\n        k3: \"k3\",\n        k4: \"k4\",\n        k: \"k\",\n        kernelmatrix: \"kernelMatrix\",\n        kernelunitlength: \"kernelUnitLength\",\n        kerning: \"kerning\",\n        keypoints: \"keyPoints\",\n        keysplines: \"keySplines\",\n        keytimes: \"keyTimes\",\n        lengthadjust: \"lengthAdjust\",\n        letterspacing: \"letterSpacing\",\n        \"letter-spacing\": \"letterSpacing\",\n        lightingcolor: \"lightingColor\",\n        \"lighting-color\": \"lightingColor\",\n        limitingconeangle: \"limitingConeAngle\",\n        local: \"local\",\n        markerend: \"markerEnd\",\n        \"marker-end\": \"markerEnd\",\n        markerheight: \"markerHeight\",\n        markermid: \"markerMid\",\n        \"marker-mid\": \"markerMid\",\n        markerstart: \"markerStart\",\n        \"marker-start\": \"markerStart\",\n        markerunits: \"markerUnits\",\n        markerwidth: \"markerWidth\",\n        mask: \"mask\",\n        maskcontentunits: \"maskContentUnits\",\n        maskunits: \"maskUnits\",\n        mathematical: \"mathematical\",\n        mode: \"mode\",\n        numoctaves: \"numOctaves\",\n        offset: \"offset\",\n        opacity: \"opacity\",\n        operator: \"operator\",\n        order: \"order\",\n        orient: \"orient\",\n        orientation: \"orientation\",\n        origin: \"origin\",\n        overflow: \"overflow\",\n        overlineposition: \"overlinePosition\",\n        \"overline-position\": \"overlinePosition\",\n        overlinethickness: \"overlineThickness\",\n        \"overline-thickness\": \"overlineThickness\",\n        paintorder: \"paintOrder\",\n        \"paint-order\": \"paintOrder\",\n        panose1: \"panose1\",\n        \"panose-1\": \"panose1\",\n        pathlength: \"pathLength\",\n        patterncontentunits: \"patternContentUnits\",\n        patterntransform: \"patternTransform\",\n        patternunits: \"patternUnits\",\n        pointerevents: \"pointerEvents\",\n        \"pointer-events\": \"pointerEvents\",\n        points: \"points\",\n        pointsatx: \"pointsAtX\",\n        pointsaty: \"pointsAtY\",\n        pointsatz: \"pointsAtZ\",\n        popover: \"popover\",\n        popovertarget: \"popoverTarget\",\n        popovertargetaction: \"popoverTargetAction\",\n        prefix: \"prefix\",\n        preservealpha: \"preserveAlpha\",\n        preserveaspectratio: \"preserveAspectRatio\",\n        primitiveunits: \"primitiveUnits\",\n        property: \"property\",\n        r: \"r\",\n        radius: \"radius\",\n        refx: \"refX\",\n        refy: \"refY\",\n        renderingintent: \"renderingIntent\",\n        \"rendering-intent\": \"renderingIntent\",\n        repeatcount: \"repeatCount\",\n        repeatdur: \"repeatDur\",\n        requiredextensions: \"requiredExtensions\",\n        requiredfeatures: \"requiredFeatures\",\n        resource: \"resource\",\n        restart: \"restart\",\n        result: \"result\",\n        results: \"results\",\n        rotate: \"rotate\",\n        rx: \"rx\",\n        ry: \"ry\",\n        scale: \"scale\",\n        security: \"security\",\n        seed: \"seed\",\n        shaperendering: \"shapeRendering\",\n        \"shape-rendering\": \"shapeRendering\",\n        slope: \"slope\",\n        spacing: \"spacing\",\n        specularconstant: \"specularConstant\",\n        specularexponent: \"specularExponent\",\n        speed: \"speed\",\n        spreadmethod: \"spreadMethod\",\n        startoffset: \"startOffset\",\n        stddeviation: \"stdDeviation\",\n        stemh: \"stemh\",\n        stemv: \"stemv\",\n        stitchtiles: \"stitchTiles\",\n        stopcolor: \"stopColor\",\n        \"stop-color\": \"stopColor\",\n        stopopacity: \"stopOpacity\",\n        \"stop-opacity\": \"stopOpacity\",\n        strikethroughposition: \"strikethroughPosition\",\n        \"strikethrough-position\": \"strikethroughPosition\",\n        strikethroughthickness: \"strikethroughThickness\",\n        \"strikethrough-thickness\": \"strikethroughThickness\",\n        string: \"string\",\n        stroke: \"stroke\",\n        strokedasharray: \"strokeDasharray\",\n        \"stroke-dasharray\": \"strokeDasharray\",\n        strokedashoffset: \"strokeDashoffset\",\n        \"stroke-dashoffset\": \"strokeDashoffset\",\n        strokelinecap: \"strokeLinecap\",\n        \"stroke-linecap\": \"strokeLinecap\",\n        strokelinejoin: \"strokeLinejoin\",\n        \"stroke-linejoin\": \"strokeLinejoin\",\n        strokemiterlimit: \"strokeMiterlimit\",\n        \"stroke-miterlimit\": \"strokeMiterlimit\",\n        strokewidth: \"strokeWidth\",\n        \"stroke-width\": \"strokeWidth\",\n        strokeopacity: \"strokeOpacity\",\n        \"stroke-opacity\": \"strokeOpacity\",\n        suppresscontenteditablewarning: \"suppressContentEditableWarning\",\n        suppresshydrationwarning: \"suppressHydrationWarning\",\n        surfacescale: \"surfaceScale\",\n        systemlanguage: \"systemLanguage\",\n        tablevalues: \"tableValues\",\n        targetx: \"targetX\",\n        targety: \"targetY\",\n        textanchor: \"textAnchor\",\n        \"text-anchor\": \"textAnchor\",\n        textdecoration: \"textDecoration\",\n        \"text-decoration\": \"textDecoration\",\n        textlength: \"textLength\",\n        textrendering: \"textRendering\",\n        \"text-rendering\": \"textRendering\",\n        to: \"to\",\n        transform: \"transform\",\n        transformorigin: \"transformOrigin\",\n        \"transform-origin\": \"transformOrigin\",\n        typeof: \"typeof\",\n        u1: \"u1\",\n        u2: \"u2\",\n        underlineposition: \"underlinePosition\",\n        \"underline-position\": \"underlinePosition\",\n        underlinethickness: \"underlineThickness\",\n        \"underline-thickness\": \"underlineThickness\",\n        unicode: \"unicode\",\n        unicodebidi: \"unicodeBidi\",\n        \"unicode-bidi\": \"unicodeBidi\",\n        unicoderange: \"unicodeRange\",\n        \"unicode-range\": \"unicodeRange\",\n        unitsperem: \"unitsPerEm\",\n        \"units-per-em\": \"unitsPerEm\",\n        unselectable: \"unselectable\",\n        valphabetic: \"vAlphabetic\",\n        \"v-alphabetic\": \"vAlphabetic\",\n        values: \"values\",\n        vectoreffect: \"vectorEffect\",\n        \"vector-effect\": \"vectorEffect\",\n        version: \"version\",\n        vertadvy: \"vertAdvY\",\n        \"vert-adv-y\": \"vertAdvY\",\n        vertoriginx: \"vertOriginX\",\n        \"vert-origin-x\": \"vertOriginX\",\n        vertoriginy: \"vertOriginY\",\n        \"vert-origin-y\": \"vertOriginY\",\n        vhanging: \"vHanging\",\n        \"v-hanging\": \"vHanging\",\n        videographic: \"vIdeographic\",\n        \"v-ideographic\": \"vIdeographic\",\n        viewbox: \"viewBox\",\n        viewtarget: \"viewTarget\",\n        visibility: \"visibility\",\n        vmathematical: \"vMathematical\",\n        \"v-mathematical\": \"vMathematical\",\n        vocab: \"vocab\",\n        widths: \"widths\",\n        wordspacing: \"wordSpacing\",\n        \"word-spacing\": \"wordSpacing\",\n        writingmode: \"writingMode\",\n        \"writing-mode\": \"writingMode\",\n        x1: \"x1\",\n        x2: \"x2\",\n        x: \"x\",\n        xchannelselector: \"xChannelSelector\",\n        xheight: \"xHeight\",\n        \"x-height\": \"xHeight\",\n        xlinkactuate: \"xlinkActuate\",\n        \"xlink:actuate\": \"xlinkActuate\",\n        xlinkarcrole: \"xlinkArcrole\",\n        \"xlink:arcrole\": \"xlinkArcrole\",\n        xlinkhref: \"xlinkHref\",\n        \"xlink:href\": \"xlinkHref\",\n        xlinkrole: \"xlinkRole\",\n        \"xlink:role\": \"xlinkRole\",\n        xlinkshow: \"xlinkShow\",\n        \"xlink:show\": \"xlinkShow\",\n        xlinktitle: \"xlinkTitle\",\n        \"xlink:title\": \"xlinkTitle\",\n        xlinktype: \"xlinkType\",\n        \"xlink:type\": \"xlinkType\",\n        xmlbase: \"xmlBase\",\n        \"xml:base\": \"xmlBase\",\n        xmllang: \"xmlLang\",\n        \"xml:lang\": \"xmlLang\",\n        xmlns: \"xmlns\",\n        \"xml:space\": \"xmlSpace\",\n        xmlnsxlink: \"xmlnsXlink\",\n        \"xmlns:xlink\": \"xmlnsXlink\",\n        xmlspace: \"xmlSpace\",\n        y1: \"y1\",\n        y2: \"y2\",\n        y: \"y\",\n        ychannelselector: \"yChannelSelector\",\n        z: \"z\",\n        zoomandpan: \"zoomAndPan\"\n      },\n      ariaProperties = {\n        \"aria-current\": 0,\n        \"aria-description\": 0,\n        \"aria-details\": 0,\n        \"aria-disabled\": 0,\n        \"aria-hidden\": 0,\n        \"aria-invalid\": 0,\n        \"aria-keyshortcuts\": 0,\n        \"aria-label\": 0,\n        \"aria-roledescription\": 0,\n        \"aria-autocomplete\": 0,\n        \"aria-checked\": 0,\n        \"aria-expanded\": 0,\n        \"aria-haspopup\": 0,\n        \"aria-level\": 0,\n        \"aria-modal\": 0,\n        \"aria-multiline\": 0,\n        \"aria-multiselectable\": 0,\n        \"aria-orientation\": 0,\n        \"aria-placeholder\": 0,\n        \"aria-pressed\": 0,\n        \"aria-readonly\": 0,\n        \"aria-required\": 0,\n        \"aria-selected\": 0,\n        \"aria-sort\": 0,\n        \"aria-valuemax\": 0,\n        \"aria-valuemin\": 0,\n        \"aria-valuenow\": 0,\n        \"aria-valuetext\": 0,\n        \"aria-atomic\": 0,\n        \"aria-busy\": 0,\n        \"aria-live\": 0,\n        \"aria-relevant\": 0,\n        \"aria-dropeffect\": 0,\n        \"aria-grabbed\": 0,\n        \"aria-activedescendant\": 0,\n        \"aria-colcount\": 0,\n        \"aria-colindex\": 0,\n        \"aria-colspan\": 0,\n        \"aria-controls\": 0,\n        \"aria-describedby\": 0,\n        \"aria-errormessage\": 0,\n        \"aria-flowto\": 0,\n        \"aria-labelledby\": 0,\n        \"aria-owns\": 0,\n        \"aria-posinset\": 0,\n        \"aria-rowcount\": 0,\n        \"aria-rowindex\": 0,\n        \"aria-rowspan\": 0,\n        \"aria-setsize\": 0\n      },\n      warnedProperties$1 = {},\n      rARIA$1 = RegExp(\n        \"^(aria)-[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n      ),\n      rARIACamel$1 = RegExp(\n        \"^(aria)[A-Z][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n      ),\n      didWarnValueNull = !1,\n      warnedProperties = {},\n      EVENT_NAME_REGEX = /^on./,\n      INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/,\n      rARIA = RegExp(\n        \"^(aria)-[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n      ),\n      rARIACamel = RegExp(\n        \"^(aria)[A-Z][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n      ),\n      isJavaScriptProtocol =\n        /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i,\n      currentReplayingEvent = null,\n      restoreTarget = null,\n      restoreQueue = null,\n      isInsideEventHandler = !1,\n      canUseDOM = !(\n        \"undefined\" === typeof window ||\n        \"undefined\" === typeof window.document ||\n        \"undefined\" === typeof window.document.createElement\n      ),\n      passiveBrowserEventsSupported = !1;\n    if (canUseDOM)\n      try {\n        var options$jscomp$0 = {};\n        Object.defineProperty(options$jscomp$0, \"passive\", {\n          get: function () {\n            passiveBrowserEventsSupported = !0;\n          }\n        });\n        window.addEventListener(\"test\", options$jscomp$0, options$jscomp$0);\n        window.removeEventListener(\"test\", options$jscomp$0, options$jscomp$0);\n      } catch (e) {\n        passiveBrowserEventsSupported = !1;\n      }\n    var root = null,\n      startText = null,\n      fallbackText = null,\n      EventInterface = {\n        eventPhase: 0,\n        bubbles: 0,\n        cancelable: 0,\n        timeStamp: function (event) {\n          return event.timeStamp || Date.now();\n        },\n        defaultPrevented: 0,\n        isTrusted: 0\n      },\n      SyntheticEvent = createSyntheticEvent(EventInterface),\n      UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n      SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n      lastMovementX,\n      lastMovementY,\n      lastMouseEvent,\n      MouseEventInterface = assign({}, UIEventInterface, {\n        screenX: 0,\n        screenY: 0,\n        clientX: 0,\n        clientY: 0,\n        pageX: 0,\n        pageY: 0,\n        ctrlKey: 0,\n        shiftKey: 0,\n        altKey: 0,\n        metaKey: 0,\n        getModifierState: getEventModifierState,\n        button: 0,\n        buttons: 0,\n        relatedTarget: function (event) {\n          return void 0 === event.relatedTarget\n            ? event.fromElement === event.srcElement\n              ? event.toElement\n              : event.fromElement\n            : event.relatedTarget;\n        },\n        movementX: function (event) {\n          if (\"movementX\" in event) return event.movementX;\n          event !== lastMouseEvent &&\n            (lastMouseEvent && \"mousemove\" === event.type\n              ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n                (lastMovementY = event.screenY - lastMouseEvent.screenY))\n              : (lastMovementY = lastMovementX = 0),\n            (lastMouseEvent = event));\n          return lastMovementX;\n        },\n        movementY: function (event) {\n          return \"movementY\" in event ? event.movementY : lastMovementY;\n        }\n      }),\n      SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n      DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n      SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n      FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n      SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n      AnimationEventInterface = assign({}, EventInterface, {\n        animationName: 0,\n        elapsedTime: 0,\n        pseudoElement: 0\n      }),\n      SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n      ClipboardEventInterface = assign({}, EventInterface, {\n        clipboardData: function (event) {\n          return \"clipboardData\" in event\n            ? event.clipboardData\n            : window.clipboardData;\n        }\n      }),\n      SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n      CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n      SyntheticCompositionEvent = createSyntheticEvent(\n        CompositionEventInterface\n      ),\n      SyntheticInputEvent = SyntheticCompositionEvent,\n      normalizeKey = {\n        Esc: \"Escape\",\n        Spacebar: \" \",\n        Left: \"ArrowLeft\",\n        Up: \"ArrowUp\",\n        Right: \"ArrowRight\",\n        Down: \"ArrowDown\",\n        Del: \"Delete\",\n        Win: \"OS\",\n        Menu: \"ContextMenu\",\n        Apps: \"ContextMenu\",\n        Scroll: \"ScrollLock\",\n        MozPrintableKey: \"Unidentified\"\n      },\n      translateToKey = {\n        8: \"Backspace\",\n        9: \"Tab\",\n        12: \"Clear\",\n        13: \"Enter\",\n        16: \"Shift\",\n        17: \"Control\",\n        18: \"Alt\",\n        19: \"Pause\",\n        20: \"CapsLock\",\n        27: \"Escape\",\n        32: \" \",\n        33: \"PageUp\",\n        34: \"PageDown\",\n        35: \"End\",\n        36: \"Home\",\n        37: \"ArrowLeft\",\n        38: \"ArrowUp\",\n        39: \"ArrowRight\",\n        40: \"ArrowDown\",\n        45: \"Insert\",\n        46: \"Delete\",\n        112: \"F1\",\n        113: \"F2\",\n        114: \"F3\",\n        115: \"F4\",\n        116: \"F5\",\n        117: \"F6\",\n        118: \"F7\",\n        119: \"F8\",\n        120: \"F9\",\n        121: \"F10\",\n        122: \"F11\",\n        123: \"F12\",\n        144: \"NumLock\",\n        145: \"ScrollLock\",\n        224: \"Meta\"\n      },\n      modifierKeyToProp = {\n        Alt: \"altKey\",\n        Control: \"ctrlKey\",\n        Meta: \"metaKey\",\n        Shift: \"shiftKey\"\n      },\n      KeyboardEventInterface = assign({}, UIEventInterface, {\n        key: function (nativeEvent) {\n          if (nativeEvent.key) {\n            var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n            if (\"Unidentified\" !== key) return key;\n          }\n          return \"keypress\" === nativeEvent.type\n            ? ((nativeEvent = getEventCharCode(nativeEvent)),\n              13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n            : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n              ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n              : \"\";\n        },\n        code: 0,\n        location: 0,\n        ctrlKey: 0,\n        shiftKey: 0,\n        altKey: 0,\n        metaKey: 0,\n        repeat: 0,\n        locale: 0,\n        getModifierState: getEventModifierState,\n        charCode: function (event) {\n          return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n        },\n        keyCode: function (event) {\n          return \"keydown\" === event.type || \"keyup\" === event.type\n            ? event.keyCode\n            : 0;\n        },\n        which: function (event) {\n          return \"keypress\" === event.type\n            ? getEventCharCode(event)\n            : \"keydown\" === event.type || \"keyup\" === event.type\n              ? event.keyCode\n              : 0;\n        }\n      }),\n      SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n      PointerEventInterface = assign({}, MouseEventInterface, {\n        pointerId: 0,\n        width: 0,\n        height: 0,\n        pressure: 0,\n        tangentialPressure: 0,\n        tiltX: 0,\n        tiltY: 0,\n        twist: 0,\n        pointerType: 0,\n        isPrimary: 0\n      }),\n      SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n      TouchEventInterface = assign({}, UIEventInterface, {\n        touches: 0,\n        targetTouches: 0,\n        changedTouches: 0,\n        altKey: 0,\n        metaKey: 0,\n        ctrlKey: 0,\n        shiftKey: 0,\n        getModifierState: getEventModifierState\n      }),\n      SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n      TransitionEventInterface = assign({}, EventInterface, {\n        propertyName: 0,\n        elapsedTime: 0,\n        pseudoElement: 0\n      }),\n      SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n      WheelEventInterface = assign({}, MouseEventInterface, {\n        deltaX: function (event) {\n          return \"deltaX\" in event\n            ? event.deltaX\n            : \"wheelDeltaX\" in event\n              ? -event.wheelDeltaX\n              : 0;\n        },\n        deltaY: function (event) {\n          return \"deltaY\" in event\n            ? event.deltaY\n            : \"wheelDeltaY\" in event\n              ? -event.wheelDeltaY\n              : \"wheelDelta\" in event\n                ? -event.wheelDelta\n                : 0;\n        },\n        deltaZ: 0,\n        deltaMode: 0\n      }),\n      SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n      ToggleEventInterface = assign({}, EventInterface, {\n        newState: 0,\n        oldState: 0\n      }),\n      SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n      END_KEYCODES = [9, 13, 27, 32],\n      START_KEYCODE = 229,\n      canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n      documentMode = null;\n    canUseDOM &&\n      \"documentMode\" in document &&\n      (documentMode = document.documentMode);\n    var canUseTextInputEvent =\n        canUseDOM && \"TextEvent\" in window && !documentMode,\n      useFallbackCompositionData =\n        canUseDOM &&\n        (!canUseCompositionEvent ||\n          (documentMode && 8 < documentMode && 11 >= documentMode)),\n      SPACEBAR_CODE = 32,\n      SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE),\n      hasSpaceKeypress = !1,\n      isComposing = !1,\n      supportedInputTypes = {\n        color: !0,\n        date: !0,\n        datetime: !0,\n        \"datetime-local\": !0,\n        email: !0,\n        month: !0,\n        number: !0,\n        password: !0,\n        range: !0,\n        search: !0,\n        tel: !0,\n        text: !0,\n        time: !0,\n        url: !0,\n        week: !0\n      },\n      activeElement$1 = null,\n      activeElementInst$1 = null,\n      isInputEventSupported = !1;\n    canUseDOM &&\n      (isInputEventSupported =\n        isEventSupported(\"input\") &&\n        (!document.documentMode || 9 < document.documentMode));\n    var objectIs = \"function\" === typeof Object.is ? Object.is : is,\n      skipSelectionChangeEvent =\n        canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n      activeElement = null,\n      activeElementInst = null,\n      lastSelection = null,\n      mouseDown = !1,\n      vendorPrefixes = {\n        animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n        animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n        animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n        transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n        transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n        transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n        transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n      },\n      prefixedEventNames = {},\n      style = {};\n    canUseDOM &&\n      ((style = document.createElement(\"div\").style),\n      \"AnimationEvent\" in window ||\n        (delete vendorPrefixes.animationend.animation,\n        delete vendorPrefixes.animationiteration.animation,\n        delete vendorPrefixes.animationstart.animation),\n      \"TransitionEvent\" in window ||\n        delete vendorPrefixes.transitionend.transition);\n    var ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n      ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n      ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n      TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n      TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n      TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n      TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n      topLevelEventsToReactNames = new Map(),\n      simpleEventPluginEvents =\n        \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n          \" \"\n        );\n    simpleEventPluginEvents.push(\"scrollEnd\");\n    var lastResetTime = 0;\n    if (\n      \"object\" === typeof performance &&\n      \"function\" === typeof performance.now\n    ) {\n      var localPerformance = performance;\n      var getCurrentTime = function () {\n        return localPerformance.now();\n      };\n    } else {\n      var localDate = Date;\n      getCurrentTime = function () {\n        return localDate.now();\n      };\n    }\n    var reportGlobalError =\n        \"function\" === typeof reportError\n          ? reportError\n          : function (error) {\n              if (\n                \"object\" === typeof window &&\n                \"function\" === typeof window.ErrorEvent\n              ) {\n                var event = new window.ErrorEvent(\"error\", {\n                  bubbles: !0,\n                  cancelable: !0,\n                  message:\n                    \"object\" === typeof error &&\n                    null !== error &&\n                    \"string\" === typeof error.message\n                      ? String(error.message)\n                      : String(error),\n                  error: error\n                });\n                if (!window.dispatchEvent(event)) return;\n              } else if (\n                \"object\" === typeof process &&\n                \"function\" === typeof process.emit\n              ) {\n                process.emit(\"uncaughtException\", error);\n                return;\n              }\n              console.error(error);\n            },\n      OffscreenVisible = 1,\n      OffscreenPassiveEffectsConnected = 2,\n      concurrentQueues = [],\n      concurrentQueuesIndex = 0,\n      concurrentlyUpdatedLanes = 0,\n      emptyContextObject = {};\n    Object.freeze(emptyContextObject);\n    var resolveFamily = null,\n      failedBoundaries = null,\n      NoMode = 0,\n      ConcurrentMode = 1,\n      ProfileMode = 2,\n      StrictLegacyMode = 8,\n      StrictEffectsMode = 16,\n      SuspenseyImagesMode = 32;\n    var hasBadMapPolyfill = !1;\n    try {\n      var nonExtensibleObject = Object.preventExtensions({});\n      new Map([[nonExtensibleObject, null]]);\n      new Set([nonExtensibleObject]);\n    } catch (e$3) {\n      hasBadMapPolyfill = !0;\n    }\n    var CapturedStacks = new WeakMap(),\n      forkStack = [],\n      forkStackIndex = 0,\n      treeForkProvider = null,\n      treeForkCount = 0,\n      idStack = [],\n      idStackIndex = 0,\n      treeContextProvider = null,\n      treeContextId = 1,\n      treeContextOverflow = \"\",\n      hydrationParentFiber = null,\n      nextHydratableInstance = null,\n      isHydrating = !1,\n      didSuspendOrErrorDEV = !1,\n      hydrationDiffRootDEV = null,\n      hydrationErrors = null,\n      rootOrSingletonContext = !1,\n      HydrationMismatchException = Error(\n        \"Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React.\"\n      ),\n      valueCursor = createCursor(null);\n    var rendererCursorDEV = createCursor(null);\n    var rendererSigil = {};\n    var currentlyRenderingFiber$1 = null,\n      lastContextDependency = null,\n      isDisallowedContextReadInDEV = !1,\n      AbortControllerLocal =\n        \"undefined\" !== typeof AbortController\n          ? AbortController\n          : function () {\n              var listeners = [],\n                signal = (this.signal = {\n                  aborted: !1,\n                  addEventListener: function (type, listener) {\n                    listeners.push(listener);\n                  }\n                });\n              this.abort = function () {\n                signal.aborted = !0;\n                listeners.forEach(function (listener) {\n                  return listener();\n                });\n              };\n            },\n      scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n      NormalPriority = Scheduler.unstable_NormalPriority,\n      CacheContext = {\n        $$typeof: REACT_CONTEXT_TYPE,\n        Consumer: null,\n        Provider: null,\n        _currentValue: null,\n        _currentValue2: null,\n        _threadCount: 0,\n        _currentRenderer: null,\n        _currentRenderer2: null\n      },\n      now = Scheduler.unstable_now,\n      renderStartTime = -0,\n      commitStartTime = -0,\n      profilerStartTime = -1.1,\n      profilerEffectDuration = -0,\n      componentEffectStartTime = -1.1,\n      currentUpdateIsNested = !1,\n      nestedUpdateScheduled = !1,\n      currentEntangledListeners = null,\n      currentEntangledPendingCount = 0,\n      currentEntangledLane = 0,\n      currentEntangledActionThenable = null,\n      prevOnStartTransitionFinish = ReactSharedInternals.S;\n    ReactSharedInternals.S = function (transition, returnValue) {\n      \"object\" === typeof returnValue &&\n        null !== returnValue &&\n        \"function\" === typeof returnValue.then &&\n        entangleAsyncAction(transition, returnValue);\n      null !== prevOnStartTransitionFinish &&\n        prevOnStartTransitionFinish(transition, returnValue);\n    };\n    var resumedCache = createCursor(null),\n      ReactStrictModeWarnings = {\n        recordUnsafeLifecycleWarnings: function () {},\n        flushPendingUnsafeLifecycleWarnings: function () {},\n        recordLegacyContextWarning: function () {},\n        flushLegacyContextWarning: function () {},\n        discardPendingWarnings: function () {}\n      },\n      pendingComponentWillMountWarnings = [],\n      pendingUNSAFE_ComponentWillMountWarnings = [],\n      pendingComponentWillReceivePropsWarnings = [],\n      pendingUNSAFE_ComponentWillReceivePropsWarnings = [],\n      pendingComponentWillUpdateWarnings = [],\n      pendingUNSAFE_ComponentWillUpdateWarnings = [],\n      didWarnAboutUnsafeLifecycles = new Set();\n    ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (\n      fiber,\n      instance\n    ) {\n      didWarnAboutUnsafeLifecycles.has(fiber.type) ||\n        (\"function\" === typeof instance.componentWillMount &&\n          !0 !== instance.componentWillMount.__suppressDeprecationWarning &&\n          pendingComponentWillMountWarnings.push(fiber),\n        fiber.mode & StrictLegacyMode &&\n          \"function\" === typeof instance.UNSAFE_componentWillMount &&\n          pendingUNSAFE_ComponentWillMountWarnings.push(fiber),\n        \"function\" === typeof instance.componentWillReceiveProps &&\n          !0 !==\n            instance.componentWillReceiveProps.__suppressDeprecationWarning &&\n          pendingComponentWillReceivePropsWarnings.push(fiber),\n        fiber.mode & StrictLegacyMode &&\n          \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n          pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber),\n        \"function\" === typeof instance.componentWillUpdate &&\n          !0 !== instance.componentWillUpdate.__suppressDeprecationWarning &&\n          pendingComponentWillUpdateWarnings.push(fiber),\n        fiber.mode & StrictLegacyMode &&\n          \"function\" === typeof instance.UNSAFE_componentWillUpdate &&\n          pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber));\n    };\n    ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () {\n      var componentWillMountUniqueNames = new Set();\n      0 < pendingComponentWillMountWarnings.length &&\n        (pendingComponentWillMountWarnings.forEach(function (fiber) {\n          componentWillMountUniqueNames.add(\n            getComponentNameFromFiber(fiber) || \"Component\"\n          );\n          didWarnAboutUnsafeLifecycles.add(fiber.type);\n        }),\n        (pendingComponentWillMountWarnings = []));\n      var UNSAFE_componentWillMountUniqueNames = new Set();\n      0 < pendingUNSAFE_ComponentWillMountWarnings.length &&\n        (pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) {\n          UNSAFE_componentWillMountUniqueNames.add(\n            getComponentNameFromFiber(fiber) || \"Component\"\n          );\n          didWarnAboutUnsafeLifecycles.add(fiber.type);\n        }),\n        (pendingUNSAFE_ComponentWillMountWarnings = []));\n      var componentWillReceivePropsUniqueNames = new Set();\n      0 < pendingComponentWillReceivePropsWarnings.length &&\n        (pendingComponentWillReceivePropsWarnings.forEach(function (fiber) {\n          componentWillReceivePropsUniqueNames.add(\n            getComponentNameFromFiber(fiber) || \"Component\"\n          );\n          didWarnAboutUnsafeLifecycles.add(fiber.type);\n        }),\n        (pendingComponentWillReceivePropsWarnings = []));\n      var UNSAFE_componentWillReceivePropsUniqueNames = new Set();\n      0 < pendingUNSAFE_ComponentWillReceivePropsWarnings.length &&\n        (pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(\n          function (fiber) {\n            UNSAFE_componentWillReceivePropsUniqueNames.add(\n              getComponentNameFromFiber(fiber) || \"Component\"\n            );\n            didWarnAboutUnsafeLifecycles.add(fiber.type);\n          }\n        ),\n        (pendingUNSAFE_ComponentWillReceivePropsWarnings = []));\n      var componentWillUpdateUniqueNames = new Set();\n      0 < pendingComponentWillUpdateWarnings.length &&\n        (pendingComponentWillUpdateWarnings.forEach(function (fiber) {\n          componentWillUpdateUniqueNames.add(\n            getComponentNameFromFiber(fiber) || \"Component\"\n          );\n          didWarnAboutUnsafeLifecycles.add(fiber.type);\n        }),\n        (pendingComponentWillUpdateWarnings = []));\n      var UNSAFE_componentWillUpdateUniqueNames = new Set();\n      0 < pendingUNSAFE_ComponentWillUpdateWarnings.length &&\n        (pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) {\n          UNSAFE_componentWillUpdateUniqueNames.add(\n            getComponentNameFromFiber(fiber) || \"Component\"\n          );\n          didWarnAboutUnsafeLifecycles.add(fiber.type);\n        }),\n        (pendingUNSAFE_ComponentWillUpdateWarnings = []));\n      if (0 < UNSAFE_componentWillMountUniqueNames.size) {\n        var sortedNames = setToSortedString(\n          UNSAFE_componentWillMountUniqueNames\n        );\n        console.error(\n          \"Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n\\nPlease update the following components: %s\",\n          sortedNames\n        );\n      }\n      0 < UNSAFE_componentWillReceivePropsUniqueNames.size &&\n        ((sortedNames = setToSortedString(\n          UNSAFE_componentWillReceivePropsUniqueNames\n        )),\n        console.error(\n          \"Using UNSAFE_componentWillReceiveProps in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state\\n\\nPlease update the following components: %s\",\n          sortedNames\n        ));\n      0 < UNSAFE_componentWillUpdateUniqueNames.size &&\n        ((sortedNames = setToSortedString(\n          UNSAFE_componentWillUpdateUniqueNames\n        )),\n        console.error(\n          \"Using UNSAFE_componentWillUpdate in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n\\nPlease update the following components: %s\",\n          sortedNames\n        ));\n      0 < componentWillMountUniqueNames.size &&\n        ((sortedNames = setToSortedString(componentWillMountUniqueNames)),\n        console.warn(\n          \"componentWillMount has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n\\nPlease update the following components: %s\",\n          sortedNames\n        ));\n      0 < componentWillReceivePropsUniqueNames.size &&\n        ((sortedNames = setToSortedString(\n          componentWillReceivePropsUniqueNames\n        )),\n        console.warn(\n          \"componentWillReceiveProps has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state\\n* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n\\nPlease update the following components: %s\",\n          sortedNames\n        ));\n      0 < componentWillUpdateUniqueNames.size &&\n        ((sortedNames = setToSortedString(componentWillUpdateUniqueNames)),\n        console.warn(\n          \"componentWillUpdate has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\\n\\n* Move data fetching code or side effects to componentDidUpdate.\\n* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n\\nPlease update the following components: %s\",\n          sortedNames\n        ));\n    };\n    var pendingLegacyContextWarning = new Map(),\n      didWarnAboutLegacyContext = new Set();\n    ReactStrictModeWarnings.recordLegacyContextWarning = function (\n      fiber,\n      instance\n    ) {\n      var strictRoot = null;\n      for (var node = fiber; null !== node; )\n        node.mode & StrictLegacyMode && (strictRoot = node),\n          (node = node.return);\n      null === strictRoot\n        ? console.error(\n            \"Expected to find a StrictMode component in a strict mode tree. This error is likely caused by a bug in React. Please file an issue.\"\n          )\n        : !didWarnAboutLegacyContext.has(fiber.type) &&\n          ((node = pendingLegacyContextWarning.get(strictRoot)),\n          null != fiber.type.contextTypes ||\n            null != fiber.type.childContextTypes ||\n            (null !== instance &&\n              \"function\" === typeof instance.getChildContext)) &&\n          (void 0 === node &&\n            ((node = []), pendingLegacyContextWarning.set(strictRoot, node)),\n          node.push(fiber));\n    };\n    ReactStrictModeWarnings.flushLegacyContextWarning = function () {\n      pendingLegacyContextWarning.forEach(function (fiberArray) {\n        if (0 !== fiberArray.length) {\n          var firstFiber = fiberArray[0],\n            uniqueNames = new Set();\n          fiberArray.forEach(function (fiber) {\n            uniqueNames.add(getComponentNameFromFiber(fiber) || \"Component\");\n            didWarnAboutLegacyContext.add(fiber.type);\n          });\n          var sortedNames = setToSortedString(uniqueNames);\n          runWithFiberInDEV(firstFiber, function () {\n            console.error(\n              \"Legacy context API has been detected within a strict-mode tree.\\n\\nThe old API will be supported in all 16.x releases, but applications using it should migrate to the new version.\\n\\nPlease update the following components: %s\\n\\nLearn more about this warning here: https://react.dev/link/legacy-context\",\n              sortedNames\n            );\n          });\n        }\n      });\n    };\n    ReactStrictModeWarnings.discardPendingWarnings = function () {\n      pendingComponentWillMountWarnings = [];\n      pendingUNSAFE_ComponentWillMountWarnings = [];\n      pendingComponentWillReceivePropsWarnings = [];\n      pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n      pendingComponentWillUpdateWarnings = [];\n      pendingUNSAFE_ComponentWillUpdateWarnings = [];\n      pendingLegacyContextWarning = new Map();\n    };\n    var SuspenseException = Error(\n        \"Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\\n\\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`.\"\n      ),\n      SuspenseyCommitException = Error(\n        \"Suspense Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React.\"\n      ),\n      SuspenseActionException = Error(\n        \"Suspense Exception: This is not a real error! It's an implementation detail of `useActionState` to interrupt the current render. You must either rethrow it immediately, or move the `useActionState` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\\n\\nTo handle async errors, wrap your component in an error boundary.\"\n      ),\n      noopSuspenseyCommitThenable = {\n        then: function () {\n          console.error(\n            'Internal React error: A listener was unexpectedly attached to a \"noop\" thenable. This is a bug in React. Please file an issue.'\n          );\n        }\n      },\n      suspendedThenable = null,\n      needsToResetSuspendedThenableDEV = !1,\n      callComponent = {\n        react_stack_bottom_frame: function (Component, props, secondArg) {\n          var wasRendering = isRendering;\n          isRendering = !0;\n          try {\n            return Component(props, secondArg);\n          } finally {\n            isRendering = wasRendering;\n          }\n        }\n      },\n      callComponentInDEV =\n        callComponent.react_stack_bottom_frame.bind(callComponent),\n      callRender = {\n        react_stack_bottom_frame: function (instance) {\n          var wasRendering = isRendering;\n          isRendering = !0;\n          try {\n            return instance.render();\n          } finally {\n            isRendering = wasRendering;\n          }\n        }\n      },\n      callRenderInDEV = callRender.react_stack_bottom_frame.bind(callRender),\n      callComponentDidMount = {\n        react_stack_bottom_frame: function (finishedWork, instance) {\n          try {\n            instance.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(finishedWork, finishedWork.return, error);\n          }\n        }\n      },\n      callComponentDidMountInDEV =\n        callComponentDidMount.react_stack_bottom_frame.bind(\n          callComponentDidMount\n        ),\n      callComponentDidUpdate = {\n        react_stack_bottom_frame: function (\n          finishedWork,\n          instance,\n          prevProps,\n          prevState,\n          snapshot\n        ) {\n          try {\n            instance.componentDidUpdate(prevProps, prevState, snapshot);\n          } catch (error) {\n            captureCommitPhaseError(finishedWork, finishedWork.return, error);\n          }\n        }\n      },\n      callComponentDidUpdateInDEV =\n        callComponentDidUpdate.react_stack_bottom_frame.bind(\n          callComponentDidUpdate\n        ),\n      callComponentDidCatch = {\n        react_stack_bottom_frame: function (instance, errorInfo) {\n          var stack = errorInfo.stack;\n          instance.componentDidCatch(errorInfo.value, {\n            componentStack: null !== stack ? stack : \"\"\n          });\n        }\n      },\n      callComponentDidCatchInDEV =\n        callComponentDidCatch.react_stack_bottom_frame.bind(\n          callComponentDidCatch\n        ),\n      callComponentWillUnmount = {\n        react_stack_bottom_frame: function (\n          current,\n          nearestMountedAncestor,\n          instance\n        ) {\n          try {\n            instance.componentWillUnmount();\n          } catch (error) {\n            captureCommitPhaseError(current, nearestMountedAncestor, error);\n          }\n        }\n      },\n      callComponentWillUnmountInDEV =\n        callComponentWillUnmount.react_stack_bottom_frame.bind(\n          callComponentWillUnmount\n        ),\n      callCreate = {\n        react_stack_bottom_frame: function (effect) {\n          var create = effect.create;\n          effect = effect.inst;\n          create = create();\n          return (effect.destroy = create);\n        }\n      },\n      callCreateInDEV = callCreate.react_stack_bottom_frame.bind(callCreate),\n      callDestroy = {\n        react_stack_bottom_frame: function (\n          current,\n          nearestMountedAncestor,\n          destroy\n        ) {\n          try {\n            destroy();\n          } catch (error) {\n            captureCommitPhaseError(current, nearestMountedAncestor, error);\n          }\n        }\n      },\n      callDestroyInDEV = callDestroy.react_stack_bottom_frame.bind(callDestroy),\n      callLazyInit = {\n        react_stack_bottom_frame: function (lazy) {\n          var init = lazy._init;\n          return init(lazy._payload);\n        }\n      },\n      callLazyInitInDEV =\n        callLazyInit.react_stack_bottom_frame.bind(callLazyInit),\n      thenableState$1 = null,\n      thenableIndexCounter$1 = 0,\n      currentDebugInfo = null,\n      didWarnAboutMaps;\n    var didWarnAboutGenerators = (didWarnAboutMaps = !1);\n    var ownerHasKeyUseWarning = {};\n    var ownerHasFunctionTypeWarning = {};\n    var ownerHasSymbolTypeWarning = {};\n    warnForMissingKey = function (returnFiber, workInProgress, child) {\n      if (\n        null !== child &&\n        \"object\" === typeof child &&\n        child._store &&\n        ((!child._store.validated && null == child.key) ||\n          2 === child._store.validated)\n      ) {\n        if (\"object\" !== typeof child._store)\n          throw Error(\n            \"React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue.\"\n          );\n        child._store.validated = 1;\n        var componentName = getComponentNameFromFiber(returnFiber),\n          componentKey = componentName || \"null\";\n        if (!ownerHasKeyUseWarning[componentKey]) {\n          ownerHasKeyUseWarning[componentKey] = !0;\n          child = child._owner;\n          returnFiber = returnFiber._debugOwner;\n          var currentComponentErrorInfo = \"\";\n          returnFiber &&\n            \"number\" === typeof returnFiber.tag &&\n            (componentKey = getComponentNameFromFiber(returnFiber)) &&\n            (currentComponentErrorInfo =\n              \"\\n\\nCheck the render method of `\" + componentKey + \"`.\");\n          currentComponentErrorInfo ||\n            (componentName &&\n              (currentComponentErrorInfo =\n                \"\\n\\nCheck the top-level render call using <\" +\n                componentName +\n                \">.\"));\n          var childOwnerAppendix = \"\";\n          null != child &&\n            returnFiber !== child &&\n            ((componentName = null),\n            \"number\" === typeof child.tag\n              ? (componentName = getComponentNameFromFiber(child))\n              : \"string\" === typeof child.name && (componentName = child.name),\n            componentName &&\n              (childOwnerAppendix =\n                \" It was passed a child from \" + componentName + \".\"));\n          runWithFiberInDEV(workInProgress, function () {\n            console.error(\n              'Each child in a list should have a unique \"key\" prop.%s%s See https://react.dev/link/warning-keys for more information.',\n              currentComponentErrorInfo,\n              childOwnerAppendix\n            );\n          });\n        }\n      }\n    };\n    var reconcileChildFibers = createChildReconciler(!0),\n      mountChildFibers = createChildReconciler(!1),\n      UpdateState = 0,\n      ReplaceState = 1,\n      ForceUpdate = 2,\n      CaptureUpdate = 3,\n      hasForceUpdate = !1;\n    var didWarnUpdateInsideUpdate = !1;\n    var currentlyProcessingQueue = null;\n    var didReadFromEntangledAsyncAction = !1,\n      currentTreeHiddenStackCursor = createCursor(null),\n      prevEntangledRenderLanesCursor = createCursor(0),\n      suspenseHandlerStackCursor = createCursor(null),\n      shellBoundary = null,\n      SubtreeSuspenseContextMask = 1,\n      ForceSuspenseFallback = 2,\n      suspenseStackCursor = createCursor(0),\n      NoFlags = 0,\n      HasEffect = 1,\n      Insertion = 2,\n      Layout = 4,\n      Passive = 8,\n      didWarnUncachedGetSnapshot;\n    var didWarnAboutMismatchedHooksForComponent = new Set();\n    var didWarnAboutUseWrappedInTryCatch = new Set();\n    var didWarnAboutAsyncClientComponent = new Set();\n    var didWarnAboutUseFormState = new Set();\n    var renderLanes = 0,\n      currentlyRenderingFiber = null,\n      currentHook = null,\n      workInProgressHook = null,\n      didScheduleRenderPhaseUpdate = !1,\n      didScheduleRenderPhaseUpdateDuringThisPass = !1,\n      shouldDoubleInvokeUserFnsInHooksDEV = !1,\n      localIdCounter = 0,\n      thenableIndexCounter = 0,\n      thenableState = null,\n      globalClientIdCounter = 0,\n      RE_RENDER_LIMIT = 25,\n      currentHookNameInDev = null,\n      hookTypesDev = null,\n      hookTypesUpdateIndexDev = -1,\n      ignorePreviousDependencies = !1,\n      ContextOnlyDispatcher = {\n        readContext: readContext,\n        use: use,\n        useCallback: throwInvalidHookError,\n        useContext: throwInvalidHookError,\n        useEffect: throwInvalidHookError,\n        useImperativeHandle: throwInvalidHookError,\n        useLayoutEffect: throwInvalidHookError,\n        useInsertionEffect: throwInvalidHookError,\n        useMemo: throwInvalidHookError,\n        useReducer: throwInvalidHookError,\n        useRef: throwInvalidHookError,\n        useState: throwInvalidHookError,\n        useDebugValue: throwInvalidHookError,\n        useDeferredValue: throwInvalidHookError,\n        useTransition: throwInvalidHookError,\n        useSyncExternalStore: throwInvalidHookError,\n        useId: throwInvalidHookError,\n        useHostTransitionStatus: throwInvalidHookError,\n        useFormState: throwInvalidHookError,\n        useActionState: throwInvalidHookError,\n        useOptimistic: throwInvalidHookError,\n        useMemoCache: throwInvalidHookError,\n        useCacheRefresh: throwInvalidHookError\n      },\n      HooksDispatcherOnMountInDEV = null,\n      HooksDispatcherOnMountWithHookTypesInDEV = null,\n      HooksDispatcherOnUpdateInDEV = null,\n      HooksDispatcherOnRerenderInDEV = null,\n      InvalidNestedHooksDispatcherOnMountInDEV = null,\n      InvalidNestedHooksDispatcherOnUpdateInDEV = null,\n      InvalidNestedHooksDispatcherOnRerenderInDEV = null;\n    HooksDispatcherOnMountInDEV = {\n      readContext: function (context) {\n        return readContext(context);\n      },\n      use: use,\n      useCallback: function (callback, deps) {\n        currentHookNameInDev = \"useCallback\";\n        mountHookTypesDev();\n        checkDepsAreArrayDev(deps);\n        return mountCallback(callback, deps);\n      },\n      useContext: function (context) {\n        currentHookNameInDev = \"useContext\";\n        mountHookTypesDev();\n        return readContext(context);\n      },\n      useEffect: function (create, deps) {\n        currentHookNameInDev = \"useEffect\";\n        mountHookTypesDev();\n        checkDepsAreArrayDev(deps);\n        return mountEffect(create, deps);\n      },\n      useImperativeHandle: function (ref, create, deps) {\n        currentHookNameInDev = \"useImperativeHandle\";\n        mountHookTypesDev();\n        checkDepsAreArrayDev(deps);\n        return mountImperativeHandle(ref, create, deps);\n      },\n      useInsertionEffect: function (create, deps) {\n        currentHookNameInDev = \"useInsertionEffect\";\n        mountHookTypesDev();\n        checkDepsAreArrayDev(deps);\n        mountEffectImpl(4, Insertion, create, deps);\n      },\n      useLayoutEffect: function (create, deps) {\n        currentHookNameInDev = \"useLayoutEffect\";\n        mountHookTypesDev();\n        checkDepsAreArrayDev(deps);\n        return mountLayoutEffect(create, deps);\n      },\n      useMemo: function (create, deps) {\n        currentHookNameInDev = \"useMemo\";\n        mountHookTypesDev();\n        checkDepsAreArrayDev(deps);\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n        try {\n          return mountMemo(create, deps);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useReducer: function (reducer, initialArg, init) {\n        currentHookNameInDev = \"useReducer\";\n        mountHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n        try {\n          return mountReducer(reducer, initialArg, init);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useRef: function (initialValue) {\n        currentHookNameInDev = \"useRef\";\n        mountHookTypesDev();\n        return mountRef(initialValue);\n      },\n      useState: function (initialState) {\n        currentHookNameInDev = \"useState\";\n        mountHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n        try {\n          return mountState(initialState);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useDebugValue: function () {\n        currentHookNameInDev = \"useDebugValue\";\n        mountHookTypesDev();\n      },\n      useDeferredValue: function (value, initialValue) {\n        currentHookNameInDev = \"useDeferredValue\";\n        mountHookTypesDev();\n        return mountDeferredValue(value, initialValue);\n      },\n      useTransition: function () {\n        currentHookNameInDev = \"useTransition\";\n        mountHookTypesDev();\n        return mountTransition();\n      },\n      useSyncExternalStore: function (\n        subscribe,\n        getSnapshot,\n        getServerSnapshot\n      ) {\n        currentHookNameInDev = \"useSyncExternalStore\";\n        mountHookTypesDev();\n        return mountSyncExternalStore(\n          subscribe,\n          getSnapshot,\n          getServerSnapshot\n        );\n      },\n      useId: function () {\n        currentHookNameInDev = \"useId\";\n        mountHookTypesDev();\n        return mountId();\n      },\n      useFormState: function (action, initialState) {\n        currentHookNameInDev = \"useFormState\";\n        mountHookTypesDev();\n        warnOnUseFormStateInDev();\n        return mountActionState(action, initialState);\n      },\n      useActionState: function (action, initialState) {\n        currentHookNameInDev = \"useActionState\";\n        mountHookTypesDev();\n        return mountActionState(action, initialState);\n      },\n      useOptimistic: function (passthrough) {\n        currentHookNameInDev = \"useOptimistic\";\n        mountHookTypesDev();\n        return mountOptimistic(passthrough);\n      },\n      useHostTransitionStatus: useHostTransitionStatus,\n      useMemoCache: useMemoCache,\n      useCacheRefresh: function () {\n        currentHookNameInDev = \"useCacheRefresh\";\n        mountHookTypesDev();\n        return mountRefresh();\n      }\n    };\n    HooksDispatcherOnMountWithHookTypesInDEV = {\n      readContext: function (context) {\n        return readContext(context);\n      },\n      use: use,\n      useCallback: function (callback, deps) {\n        currentHookNameInDev = \"useCallback\";\n        updateHookTypesDev();\n        return mountCallback(callback, deps);\n      },\n      useContext: function (context) {\n        currentHookNameInDev = \"useContext\";\n        updateHookTypesDev();\n        return readContext(context);\n      },\n      useEffect: function (create, deps) {\n        currentHookNameInDev = \"useEffect\";\n        updateHookTypesDev();\n        return mountEffect(create, deps);\n      },\n      useImperativeHandle: function (ref, create, deps) {\n        currentHookNameInDev = \"useImperativeHandle\";\n        updateHookTypesDev();\n        return mountImperativeHandle(ref, create, deps);\n      },\n      useInsertionEffect: function (create, deps) {\n        currentHookNameInDev = \"useInsertionEffect\";\n        updateHookTypesDev();\n        mountEffectImpl(4, Insertion, create, deps);\n      },\n      useLayoutEffect: function (create, deps) {\n        currentHookNameInDev = \"useLayoutEffect\";\n        updateHookTypesDev();\n        return mountLayoutEffect(create, deps);\n      },\n      useMemo: function (create, deps) {\n        currentHookNameInDev = \"useMemo\";\n        updateHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n        try {\n          return mountMemo(create, deps);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useReducer: function (reducer, initialArg, init) {\n        currentHookNameInDev = \"useReducer\";\n        updateHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n        try {\n          return mountReducer(reducer, initialArg, init);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useRef: function (initialValue) {\n        currentHookNameInDev = \"useRef\";\n        updateHookTypesDev();\n        return mountRef(initialValue);\n      },\n      useState: function (initialState) {\n        currentHookNameInDev = \"useState\";\n        updateHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n        try {\n          return mountState(initialState);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useDebugValue: function () {\n        currentHookNameInDev = \"useDebugValue\";\n        updateHookTypesDev();\n      },\n      useDeferredValue: function (value, initialValue) {\n        currentHookNameInDev = \"useDeferredValue\";\n        updateHookTypesDev();\n        return mountDeferredValue(value, initialValue);\n      },\n      useTransition: function () {\n        currentHookNameInDev = \"useTransition\";\n        updateHookTypesDev();\n        return mountTransition();\n      },\n      useSyncExternalStore: function (\n        subscribe,\n        getSnapshot,\n        getServerSnapshot\n      ) {\n        currentHookNameInDev = \"useSyncExternalStore\";\n        updateHookTypesDev();\n        return mountSyncExternalStore(\n          subscribe,\n          getSnapshot,\n          getServerSnapshot\n        );\n      },\n      useId: function () {\n        currentHookNameInDev = \"useId\";\n        updateHookTypesDev();\n        return mountId();\n      },\n      useActionState: function (action, initialState) {\n        currentHookNameInDev = \"useActionState\";\n        updateHookTypesDev();\n        return mountActionState(action, initialState);\n      },\n      useFormState: function (action, initialState) {\n        currentHookNameInDev = \"useFormState\";\n        updateHookTypesDev();\n        warnOnUseFormStateInDev();\n        return mountActionState(action, initialState);\n      },\n      useOptimistic: function (passthrough) {\n        currentHookNameInDev = \"useOptimistic\";\n        updateHookTypesDev();\n        return mountOptimistic(passthrough);\n      },\n      useHostTransitionStatus: useHostTransitionStatus,\n      useMemoCache: useMemoCache,\n      useCacheRefresh: function () {\n        currentHookNameInDev = \"useCacheRefresh\";\n        updateHookTypesDev();\n        return mountRefresh();\n      }\n    };\n    HooksDispatcherOnUpdateInDEV = {\n      readContext: function (context) {\n        return readContext(context);\n      },\n      use: use,\n      useCallback: function (callback, deps) {\n        currentHookNameInDev = \"useCallback\";\n        updateHookTypesDev();\n        return updateCallback(callback, deps);\n      },\n      useContext: function (context) {\n        currentHookNameInDev = \"useContext\";\n        updateHookTypesDev();\n        return readContext(context);\n      },\n      useEffect: function (create, deps) {\n        currentHookNameInDev = \"useEffect\";\n        updateHookTypesDev();\n        updateEffectImpl(2048, Passive, create, deps);\n      },\n      useImperativeHandle: function (ref, create, deps) {\n        currentHookNameInDev = \"useImperativeHandle\";\n        updateHookTypesDev();\n        return updateImperativeHandle(ref, create, deps);\n      },\n      useInsertionEffect: function (create, deps) {\n        currentHookNameInDev = \"useInsertionEffect\";\n        updateHookTypesDev();\n        return updateEffectImpl(4, Insertion, create, deps);\n      },\n      useLayoutEffect: function (create, deps) {\n        currentHookNameInDev = \"useLayoutEffect\";\n        updateHookTypesDev();\n        return updateEffectImpl(4, Layout, create, deps);\n      },\n      useMemo: function (create, deps) {\n        currentHookNameInDev = \"useMemo\";\n        updateHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n        try {\n          return updateMemo(create, deps);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useReducer: function (reducer, initialArg, init) {\n        currentHookNameInDev = \"useReducer\";\n        updateHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n        try {\n          return updateReducer(reducer, initialArg, init);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useRef: function () {\n        currentHookNameInDev = \"useRef\";\n        updateHookTypesDev();\n        return updateWorkInProgressHook().memoizedState;\n      },\n      useState: function () {\n        currentHookNameInDev = \"useState\";\n        updateHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n        try {\n          return updateReducer(basicStateReducer);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useDebugValue: function () {\n        currentHookNameInDev = \"useDebugValue\";\n        updateHookTypesDev();\n      },\n      useDeferredValue: function (value, initialValue) {\n        currentHookNameInDev = \"useDeferredValue\";\n        updateHookTypesDev();\n        return updateDeferredValue(value, initialValue);\n      },\n      useTransition: function () {\n        currentHookNameInDev = \"useTransition\";\n        updateHookTypesDev();\n        return updateTransition();\n      },\n      useSyncExternalStore: function (\n        subscribe,\n        getSnapshot,\n        getServerSnapshot\n      ) {\n        currentHookNameInDev = \"useSyncExternalStore\";\n        updateHookTypesDev();\n        return updateSyncExternalStore(\n          subscribe,\n          getSnapshot,\n          getServerSnapshot\n        );\n      },\n      useId: function () {\n        currentHookNameInDev = \"useId\";\n        updateHookTypesDev();\n        return updateWorkInProgressHook().memoizedState;\n      },\n      useFormState: function (action) {\n        currentHookNameInDev = \"useFormState\";\n        updateHookTypesDev();\n        warnOnUseFormStateInDev();\n        return updateActionState(action);\n      },\n      useActionState: function (action) {\n        currentHookNameInDev = \"useActionState\";\n        updateHookTypesDev();\n        return updateActionState(action);\n      },\n      useOptimistic: function (passthrough, reducer) {\n        currentHookNameInDev = \"useOptimistic\";\n        updateHookTypesDev();\n        return updateOptimistic(passthrough, reducer);\n      },\n      useHostTransitionStatus: useHostTransitionStatus,\n      useMemoCache: useMemoCache,\n      useCacheRefresh: function () {\n        currentHookNameInDev = \"useCacheRefresh\";\n        updateHookTypesDev();\n        return updateWorkInProgressHook().memoizedState;\n      }\n    };\n    HooksDispatcherOnRerenderInDEV = {\n      readContext: function (context) {\n        return readContext(context);\n      },\n      use: use,\n      useCallback: function (callback, deps) {\n        currentHookNameInDev = \"useCallback\";\n        updateHookTypesDev();\n        return updateCallback(callback, deps);\n      },\n      useContext: function (context) {\n        currentHookNameInDev = \"useContext\";\n        updateHookTypesDev();\n        return readContext(context);\n      },\n      useEffect: function (create, deps) {\n        currentHookNameInDev = \"useEffect\";\n        updateHookTypesDev();\n        updateEffectImpl(2048, Passive, create, deps);\n      },\n      useImperativeHandle: function (ref, create, deps) {\n        currentHookNameInDev = \"useImperativeHandle\";\n        updateHookTypesDev();\n        return updateImperativeHandle(ref, create, deps);\n      },\n      useInsertionEffect: function (create, deps) {\n        currentHookNameInDev = \"useInsertionEffect\";\n        updateHookTypesDev();\n        return updateEffectImpl(4, Insertion, create, deps);\n      },\n      useLayoutEffect: function (create, deps) {\n        currentHookNameInDev = \"useLayoutEffect\";\n        updateHookTypesDev();\n        return updateEffectImpl(4, Layout, create, deps);\n      },\n      useMemo: function (create, deps) {\n        currentHookNameInDev = \"useMemo\";\n        updateHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;\n        try {\n          return updateMemo(create, deps);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useReducer: function (reducer, initialArg, init) {\n        currentHookNameInDev = \"useReducer\";\n        updateHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;\n        try {\n          return rerenderReducer(reducer, initialArg, init);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useRef: function () {\n        currentHookNameInDev = \"useRef\";\n        updateHookTypesDev();\n        return updateWorkInProgressHook().memoizedState;\n      },\n      useState: function () {\n        currentHookNameInDev = \"useState\";\n        updateHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV;\n        try {\n          return rerenderReducer(basicStateReducer);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useDebugValue: function () {\n        currentHookNameInDev = \"useDebugValue\";\n        updateHookTypesDev();\n      },\n      useDeferredValue: function (value, initialValue) {\n        currentHookNameInDev = \"useDeferredValue\";\n        updateHookTypesDev();\n        return rerenderDeferredValue(value, initialValue);\n      },\n      useTransition: function () {\n        currentHookNameInDev = \"useTransition\";\n        updateHookTypesDev();\n        return rerenderTransition();\n      },\n      useSyncExternalStore: function (\n        subscribe,\n        getSnapshot,\n        getServerSnapshot\n      ) {\n        currentHookNameInDev = \"useSyncExternalStore\";\n        updateHookTypesDev();\n        return updateSyncExternalStore(\n          subscribe,\n          getSnapshot,\n          getServerSnapshot\n        );\n      },\n      useId: function () {\n        currentHookNameInDev = \"useId\";\n        updateHookTypesDev();\n        return updateWorkInProgressHook().memoizedState;\n      },\n      useFormState: function (action) {\n        currentHookNameInDev = \"useFormState\";\n        updateHookTypesDev();\n        warnOnUseFormStateInDev();\n        return rerenderActionState(action);\n      },\n      useActionState: function (action) {\n        currentHookNameInDev = \"useActionState\";\n        updateHookTypesDev();\n        return rerenderActionState(action);\n      },\n      useOptimistic: function (passthrough, reducer) {\n        currentHookNameInDev = \"useOptimistic\";\n        updateHookTypesDev();\n        return rerenderOptimistic(passthrough, reducer);\n      },\n      useHostTransitionStatus: useHostTransitionStatus,\n      useMemoCache: useMemoCache,\n      useCacheRefresh: function () {\n        currentHookNameInDev = \"useCacheRefresh\";\n        updateHookTypesDev();\n        return updateWorkInProgressHook().memoizedState;\n      }\n    };\n    InvalidNestedHooksDispatcherOnMountInDEV = {\n      readContext: function (context) {\n        warnInvalidContextAccess();\n        return readContext(context);\n      },\n      use: function (usable) {\n        warnInvalidHookAccess();\n        return use(usable);\n      },\n      useCallback: function (callback, deps) {\n        currentHookNameInDev = \"useCallback\";\n        warnInvalidHookAccess();\n        mountHookTypesDev();\n        return mountCallback(callback, deps);\n      },\n      useContext: function (context) {\n        currentHookNameInDev = \"useContext\";\n        warnInvalidHookAccess();\n        mountHookTypesDev();\n        return readContext(context);\n      },\n      useEffect: function (create, deps) {\n        currentHookNameInDev = \"useEffect\";\n        warnInvalidHookAccess();\n        mountHookTypesDev();\n        return mountEffect(create, deps);\n      },\n      useImperativeHandle: function (ref, create, deps) {\n        currentHookNameInDev = \"useImperativeHandle\";\n        warnInvalidHookAccess();\n        mountHookTypesDev();\n        return mountImperativeHandle(ref, create, deps);\n      },\n      useInsertionEffect: function (create, deps) {\n        currentHookNameInDev = \"useInsertionEffect\";\n        warnInvalidHookAccess();\n        mountHookTypesDev();\n        mountEffectImpl(4, Insertion, create, deps);\n      },\n      useLayoutEffect: function (create, deps) {\n        currentHookNameInDev = \"useLayoutEffect\";\n        warnInvalidHookAccess();\n        mountHookTypesDev();\n        return mountLayoutEffect(create, deps);\n      },\n      useMemo: function (create, deps) {\n        currentHookNameInDev = \"useMemo\";\n        warnInvalidHookAccess();\n        mountHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n        try {\n          return mountMemo(create, deps);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useReducer: function (reducer, initialArg, init) {\n        currentHookNameInDev = \"useReducer\";\n        warnInvalidHookAccess();\n        mountHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n        try {\n          return mountReducer(reducer, initialArg, init);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useRef: function (initialValue) {\n        currentHookNameInDev = \"useRef\";\n        warnInvalidHookAccess();\n        mountHookTypesDev();\n        return mountRef(initialValue);\n      },\n      useState: function (initialState) {\n        currentHookNameInDev = \"useState\";\n        warnInvalidHookAccess();\n        mountHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV;\n        try {\n          return mountState(initialState);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useDebugValue: function () {\n        currentHookNameInDev = \"useDebugValue\";\n        warnInvalidHookAccess();\n        mountHookTypesDev();\n      },\n      useDeferredValue: function (value, initialValue) {\n        currentHookNameInDev = \"useDeferredValue\";\n        warnInvalidHookAccess();\n        mountHookTypesDev();\n        return mountDeferredValue(value, initialValue);\n      },\n      useTransition: function () {\n        currentHookNameInDev = \"useTransition\";\n        warnInvalidHookAccess();\n        mountHookTypesDev();\n        return mountTransition();\n      },\n      useSyncExternalStore: function (\n        subscribe,\n        getSnapshot,\n        getServerSnapshot\n      ) {\n        currentHookNameInDev = \"useSyncExternalStore\";\n        warnInvalidHookAccess();\n        mountHookTypesDev();\n        return mountSyncExternalStore(\n          subscribe,\n          getSnapshot,\n          getServerSnapshot\n        );\n      },\n      useId: function () {\n        currentHookNameInDev = \"useId\";\n        warnInvalidHookAccess();\n        mountHookTypesDev();\n        return mountId();\n      },\n      useFormState: function (action, initialState) {\n        currentHookNameInDev = \"useFormState\";\n        warnInvalidHookAccess();\n        mountHookTypesDev();\n        return mountActionState(action, initialState);\n      },\n      useActionState: function (action, initialState) {\n        currentHookNameInDev = \"useActionState\";\n        warnInvalidHookAccess();\n        mountHookTypesDev();\n        return mountActionState(action, initialState);\n      },\n      useOptimistic: function (passthrough) {\n        currentHookNameInDev = \"useOptimistic\";\n        warnInvalidHookAccess();\n        mountHookTypesDev();\n        return mountOptimistic(passthrough);\n      },\n      useMemoCache: function (size) {\n        warnInvalidHookAccess();\n        return useMemoCache(size);\n      },\n      useHostTransitionStatus: useHostTransitionStatus,\n      useCacheRefresh: function () {\n        currentHookNameInDev = \"useCacheRefresh\";\n        mountHookTypesDev();\n        return mountRefresh();\n      }\n    };\n    InvalidNestedHooksDispatcherOnUpdateInDEV = {\n      readContext: function (context) {\n        warnInvalidContextAccess();\n        return readContext(context);\n      },\n      use: function (usable) {\n        warnInvalidHookAccess();\n        return use(usable);\n      },\n      useCallback: function (callback, deps) {\n        currentHookNameInDev = \"useCallback\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateCallback(callback, deps);\n      },\n      useContext: function (context) {\n        currentHookNameInDev = \"useContext\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return readContext(context);\n      },\n      useEffect: function (create, deps) {\n        currentHookNameInDev = \"useEffect\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        updateEffectImpl(2048, Passive, create, deps);\n      },\n      useImperativeHandle: function (ref, create, deps) {\n        currentHookNameInDev = \"useImperativeHandle\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateImperativeHandle(ref, create, deps);\n      },\n      useInsertionEffect: function (create, deps) {\n        currentHookNameInDev = \"useInsertionEffect\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateEffectImpl(4, Insertion, create, deps);\n      },\n      useLayoutEffect: function (create, deps) {\n        currentHookNameInDev = \"useLayoutEffect\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateEffectImpl(4, Layout, create, deps);\n      },\n      useMemo: function (create, deps) {\n        currentHookNameInDev = \"useMemo\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n        try {\n          return updateMemo(create, deps);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useReducer: function (reducer, initialArg, init) {\n        currentHookNameInDev = \"useReducer\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n        try {\n          return updateReducer(reducer, initialArg, init);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useRef: function () {\n        currentHookNameInDev = \"useRef\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateWorkInProgressHook().memoizedState;\n      },\n      useState: function () {\n        currentHookNameInDev = \"useState\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n        try {\n          return updateReducer(basicStateReducer);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useDebugValue: function () {\n        currentHookNameInDev = \"useDebugValue\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n      },\n      useDeferredValue: function (value, initialValue) {\n        currentHookNameInDev = \"useDeferredValue\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateDeferredValue(value, initialValue);\n      },\n      useTransition: function () {\n        currentHookNameInDev = \"useTransition\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateTransition();\n      },\n      useSyncExternalStore: function (\n        subscribe,\n        getSnapshot,\n        getServerSnapshot\n      ) {\n        currentHookNameInDev = \"useSyncExternalStore\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateSyncExternalStore(\n          subscribe,\n          getSnapshot,\n          getServerSnapshot\n        );\n      },\n      useId: function () {\n        currentHookNameInDev = \"useId\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateWorkInProgressHook().memoizedState;\n      },\n      useFormState: function (action) {\n        currentHookNameInDev = \"useFormState\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateActionState(action);\n      },\n      useActionState: function (action) {\n        currentHookNameInDev = \"useActionState\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateActionState(action);\n      },\n      useOptimistic: function (passthrough, reducer) {\n        currentHookNameInDev = \"useOptimistic\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateOptimistic(passthrough, reducer);\n      },\n      useMemoCache: function (size) {\n        warnInvalidHookAccess();\n        return useMemoCache(size);\n      },\n      useHostTransitionStatus: useHostTransitionStatus,\n      useCacheRefresh: function () {\n        currentHookNameInDev = \"useCacheRefresh\";\n        updateHookTypesDev();\n        return updateWorkInProgressHook().memoizedState;\n      }\n    };\n    InvalidNestedHooksDispatcherOnRerenderInDEV = {\n      readContext: function (context) {\n        warnInvalidContextAccess();\n        return readContext(context);\n      },\n      use: function (usable) {\n        warnInvalidHookAccess();\n        return use(usable);\n      },\n      useCallback: function (callback, deps) {\n        currentHookNameInDev = \"useCallback\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateCallback(callback, deps);\n      },\n      useContext: function (context) {\n        currentHookNameInDev = \"useContext\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return readContext(context);\n      },\n      useEffect: function (create, deps) {\n        currentHookNameInDev = \"useEffect\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        updateEffectImpl(2048, Passive, create, deps);\n      },\n      useImperativeHandle: function (ref, create, deps) {\n        currentHookNameInDev = \"useImperativeHandle\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateImperativeHandle(ref, create, deps);\n      },\n      useInsertionEffect: function (create, deps) {\n        currentHookNameInDev = \"useInsertionEffect\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateEffectImpl(4, Insertion, create, deps);\n      },\n      useLayoutEffect: function (create, deps) {\n        currentHookNameInDev = \"useLayoutEffect\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateEffectImpl(4, Layout, create, deps);\n      },\n      useMemo: function (create, deps) {\n        currentHookNameInDev = \"useMemo\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n        try {\n          return updateMemo(create, deps);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useReducer: function (reducer, initialArg, init) {\n        currentHookNameInDev = \"useReducer\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n        try {\n          return rerenderReducer(reducer, initialArg, init);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useRef: function () {\n        currentHookNameInDev = \"useRef\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateWorkInProgressHook().memoizedState;\n      },\n      useState: function () {\n        currentHookNameInDev = \"useState\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        var prevDispatcher = ReactSharedInternals.H;\n        ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV;\n        try {\n          return rerenderReducer(basicStateReducer);\n        } finally {\n          ReactSharedInternals.H = prevDispatcher;\n        }\n      },\n      useDebugValue: function () {\n        currentHookNameInDev = \"useDebugValue\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n      },\n      useDeferredValue: function (value, initialValue) {\n        currentHookNameInDev = \"useDeferredValue\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return rerenderDeferredValue(value, initialValue);\n      },\n      useTransition: function () {\n        currentHookNameInDev = \"useTransition\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return rerenderTransition();\n      },\n      useSyncExternalStore: function (\n        subscribe,\n        getSnapshot,\n        getServerSnapshot\n      ) {\n        currentHookNameInDev = \"useSyncExternalStore\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateSyncExternalStore(\n          subscribe,\n          getSnapshot,\n          getServerSnapshot\n        );\n      },\n      useId: function () {\n        currentHookNameInDev = \"useId\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return updateWorkInProgressHook().memoizedState;\n      },\n      useFormState: function (action) {\n        currentHookNameInDev = \"useFormState\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return rerenderActionState(action);\n      },\n      useActionState: function (action) {\n        currentHookNameInDev = \"useActionState\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return rerenderActionState(action);\n      },\n      useOptimistic: function (passthrough, reducer) {\n        currentHookNameInDev = \"useOptimistic\";\n        warnInvalidHookAccess();\n        updateHookTypesDev();\n        return rerenderOptimistic(passthrough, reducer);\n      },\n      useMemoCache: function (size) {\n        warnInvalidHookAccess();\n        return useMemoCache(size);\n      },\n      useHostTransitionStatus: useHostTransitionStatus,\n      useCacheRefresh: function () {\n        currentHookNameInDev = \"useCacheRefresh\";\n        updateHookTypesDev();\n        return updateWorkInProgressHook().memoizedState;\n      }\n    };\n    var fakeInternalInstance = {};\n    var didWarnAboutStateAssignmentForComponent = new Set();\n    var didWarnAboutUninitializedState = new Set();\n    var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();\n    var didWarnAboutLegacyLifecyclesAndDerivedState = new Set();\n    var didWarnAboutDirectlyAssigningPropsToState = new Set();\n    var didWarnAboutUndefinedDerivedState = new Set();\n    var didWarnAboutContextTypes$1 = new Set();\n    var didWarnAboutChildContextTypes = new Set();\n    var didWarnAboutInvalidateContextType = new Set();\n    var didWarnOnInvalidCallback = new Set();\n    Object.freeze(fakeInternalInstance);\n    var classComponentUpdater = {\n        enqueueSetState: function (inst, payload, callback) {\n          inst = inst._reactInternals;\n          var lane = requestUpdateLane(inst),\n            update = createUpdate(lane);\n          update.payload = payload;\n          void 0 !== callback &&\n            null !== callback &&\n            (warnOnInvalidCallback(callback), (update.callback = callback));\n          payload = enqueueUpdate(inst, update, lane);\n          null !== payload &&\n            (scheduleUpdateOnFiber(payload, inst, lane),\n            entangleTransitions(payload, inst, lane));\n          markStateUpdateScheduled(inst, lane);\n        },\n        enqueueReplaceState: function (inst, payload, callback) {\n          inst = inst._reactInternals;\n          var lane = requestUpdateLane(inst),\n            update = createUpdate(lane);\n          update.tag = ReplaceState;\n          update.payload = payload;\n          void 0 !== callback &&\n            null !== callback &&\n            (warnOnInvalidCallback(callback), (update.callback = callback));\n          payload = enqueueUpdate(inst, update, lane);\n          null !== payload &&\n            (scheduleUpdateOnFiber(payload, inst, lane),\n            entangleTransitions(payload, inst, lane));\n          markStateUpdateScheduled(inst, lane);\n        },\n        enqueueForceUpdate: function (inst, callback) {\n          inst = inst._reactInternals;\n          var lane = requestUpdateLane(inst),\n            update = createUpdate(lane);\n          update.tag = ForceUpdate;\n          void 0 !== callback &&\n            null !== callback &&\n            (warnOnInvalidCallback(callback), (update.callback = callback));\n          callback = enqueueUpdate(inst, update, lane);\n          null !== callback &&\n            (scheduleUpdateOnFiber(callback, inst, lane),\n            entangleTransitions(callback, inst, lane));\n          null !== injectedProfilingHooks &&\n            \"function\" ===\n              typeof injectedProfilingHooks.markForceUpdateScheduled &&\n            injectedProfilingHooks.markForceUpdateScheduled(inst, lane);\n        }\n      },\n      componentName = null,\n      errorBoundaryName = null,\n      SelectiveHydrationException = Error(\n        \"This is not a real error. It's an implementation detail of React's selective hydration feature. If this leaks into userspace, it's a bug in React. Please file an issue.\"\n      ),\n      didReceiveUpdate = !1;\n    var didWarnAboutBadClass = {};\n    var didWarnAboutContextTypeOnFunctionComponent = {};\n    var didWarnAboutContextTypes = {};\n    var didWarnAboutGetDerivedStateOnFunctionComponent = {};\n    var didWarnAboutReassigningProps = !1;\n    var didWarnAboutRevealOrder = {};\n    var didWarnAboutTailOptions = {};\n    var SUSPENDED_MARKER = {\n        dehydrated: null,\n        treeContext: null,\n        retryLane: 0,\n        hydrationErrors: null\n      },\n      hasWarnedAboutUsingNoValuePropOnContextProvider = !1,\n      didWarnAboutUndefinedSnapshotBeforeUpdate = null;\n    didWarnAboutUndefinedSnapshotBeforeUpdate = new Set();\n    var offscreenSubtreeIsHidden = !1,\n      offscreenSubtreeWasHidden = !1,\n      needsFormReset = !1,\n      PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n      nextEffect = null,\n      inProgressLanes = null,\n      inProgressRoot = null,\n      hostParent = null,\n      hostParentIsContainer = !1,\n      currentHoistableRoot = null,\n      suspenseyCommitFlag = 8192,\n      DefaultAsyncDispatcher = {\n        getCacheForType: function (resourceType) {\n          var cache = readContext(CacheContext),\n            cacheForType = cache.data.get(resourceType);\n          void 0 === cacheForType &&\n            ((cacheForType = resourceType()),\n            cache.data.set(resourceType, cacheForType));\n          return cacheForType;\n        },\n        cacheSignal: function () {\n          return readContext(CacheContext).controller.signal;\n        },\n        getOwner: function () {\n          return current;\n        }\n      };\n    if (\"function\" === typeof Symbol && Symbol.for) {\n      var symbolFor = Symbol.for;\n      symbolFor(\"selector.component\");\n      symbolFor(\"selector.has_pseudo_class\");\n      symbolFor(\"selector.role\");\n      symbolFor(\"selector.test_id\");\n      symbolFor(\"selector.text\");\n    }\n    var commitHooks = [],\n      PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n      NoContext = 0,\n      RenderContext = 2,\n      CommitContext = 4,\n      RootInProgress = 0,\n      RootFatalErrored = 1,\n      RootErrored = 2,\n      RootSuspended = 3,\n      RootSuspendedWithDelay = 4,\n      RootSuspendedAtTheShell = 6,\n      RootCompleted = 5,\n      executionContext = NoContext,\n      workInProgressRoot = null,\n      workInProgress = null,\n      workInProgressRootRenderLanes = 0,\n      NotSuspended = 0,\n      SuspendedOnError = 1,\n      SuspendedOnData = 2,\n      SuspendedOnImmediate = 3,\n      SuspendedOnInstance = 4,\n      SuspendedOnInstanceAndReadyToContinue = 5,\n      SuspendedOnDeprecatedThrowPromise = 6,\n      SuspendedAndReadyToContinue = 7,\n      SuspendedOnHydration = 8,\n      SuspendedOnAction = 9,\n      workInProgressSuspendedReason = NotSuspended,\n      workInProgressThrownValue = null,\n      workInProgressRootDidSkipSuspendedSiblings = !1,\n      workInProgressRootIsPrerendering = !1,\n      workInProgressRootDidAttachPingListener = !1,\n      entangledRenderLanes = 0,\n      workInProgressRootExitStatus = RootInProgress,\n      workInProgressRootSkippedLanes = 0,\n      workInProgressRootInterleavedUpdatedLanes = 0,\n      workInProgressRootPingedLanes = 0,\n      workInProgressDeferredLane = 0,\n      workInProgressSuspendedRetryLanes = 0,\n      workInProgressRootConcurrentErrors = null,\n      workInProgressRootRecoverableErrors = null,\n      workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n      globalMostRecentFallbackTime = 0,\n      FALLBACK_THROTTLE_MS = 300,\n      workInProgressRootRenderTargetTime = Infinity,\n      RENDER_TIMEOUT_MS = 500,\n      workInProgressTransitions = null,\n      legacyErrorBoundariesThatAlreadyFailed = null,\n      IMMEDIATE_COMMIT = 0,\n      SUSPENDED_COMMIT = 1,\n      THROTTLED_COMMIT = 2,\n      NO_PENDING_EFFECTS = 0,\n      PENDING_MUTATION_PHASE = 1,\n      PENDING_LAYOUT_PHASE = 2,\n      PENDING_AFTER_MUTATION_PHASE = 3,\n      PENDING_SPAWNED_WORK = 4,\n      PENDING_PASSIVE_PHASE = 5,\n      pendingEffectsStatus = 0,\n      pendingEffectsRoot = null,\n      pendingFinishedWork = null,\n      pendingEffectsLanes = 0,\n      pendingEffectsRemainingLanes = 0,\n      pendingPassiveTransitions = null,\n      pendingRecoverableErrors = null,\n      NESTED_UPDATE_LIMIT = 50,\n      nestedUpdateCount = 0,\n      rootWithNestedUpdates = null,\n      isFlushingPassiveEffects = !1,\n      didScheduleUpdateDuringPassiveEffects = !1,\n      NESTED_PASSIVE_UPDATE_LIMIT = 50,\n      nestedPassiveUpdateCount = 0,\n      rootWithPassiveNestedUpdates = null,\n      isRunningInsertionEffect = !1,\n      didWarnStateUpdateForNotYetMountedComponent = null,\n      didWarnAboutUpdateInRender = !1;\n    var didWarnAboutUpdateInRenderForAnotherComponent = new Set();\n    var fakeActCallbackNode$1 = {},\n      firstScheduledRoot = null,\n      lastScheduledRoot = null,\n      didScheduleMicrotask = !1,\n      didScheduleMicrotask_act = !1,\n      mightHavePendingSyncWork = !1,\n      isFlushingWork = !1,\n      currentEventTransitionLane = 0,\n      fakeActCallbackNode = {};\n    (function () {\n      for (var i = 0; i < simpleEventPluginEvents.length; i++) {\n        var eventName = simpleEventPluginEvents[i],\n          domEventName = eventName.toLowerCase();\n        eventName = eventName[0].toUpperCase() + eventName.slice(1);\n        registerSimpleEvent(domEventName, \"on\" + eventName);\n      }\n      registerSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\n      registerSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\n      registerSimpleEvent(ANIMATION_START, \"onAnimationStart\");\n      registerSimpleEvent(\"dblclick\", \"onDoubleClick\");\n      registerSimpleEvent(\"focusin\", \"onFocus\");\n      registerSimpleEvent(\"focusout\", \"onBlur\");\n      registerSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\n      registerSimpleEvent(TRANSITION_START, \"onTransitionStart\");\n      registerSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\n      registerSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\n    })();\n    registerDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\n    registerDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\n    registerDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\n    registerDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\n    registerTwoPhaseEvent(\n      \"onChange\",\n      \"change click focusin focusout input keydown keyup selectionchange\".split(\n        \" \"\n      )\n    );\n    registerTwoPhaseEvent(\n      \"onSelect\",\n      \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n        \" \"\n      )\n    );\n    registerTwoPhaseEvent(\"onBeforeInput\", [\n      \"compositionend\",\n      \"keypress\",\n      \"textInput\",\n      \"paste\"\n    ]);\n    registerTwoPhaseEvent(\n      \"onCompositionEnd\",\n      \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n    );\n    registerTwoPhaseEvent(\n      \"onCompositionStart\",\n      \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n    );\n    registerTwoPhaseEvent(\n      \"onCompositionUpdate\",\n      \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n    );\n    var mediaEventTypes =\n        \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n          \" \"\n        ),\n      nonDelegatedEvents = new Set(\n        \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n          .split(\" \")\n          .concat(mediaEventTypes)\n      ),\n      listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2),\n      didWarnControlledToUncontrolled = !1,\n      didWarnUncontrolledToControlled = !1,\n      didWarnFormActionType = !1,\n      didWarnFormActionName = !1,\n      didWarnFormActionTarget = !1,\n      didWarnFormActionMethod = !1,\n      didWarnPopoverTargetObject = !1;\n    var didWarnForNewBooleanPropsWithEmptyValue = {};\n    var NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n      NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g,\n      xlinkNamespace = \"http://www.w3.org/1999/xlink\",\n      xmlNamespace = \"http://www.w3.org/XML/1998/namespace\",\n      EXPECTED_FORM_ACTION_URL =\n        \"javascript:throw new Error('React form unexpectedly submitted.')\",\n      SUPPRESS_HYDRATION_WARNING = \"suppressHydrationWarning\",\n      ACTIVITY_START_DATA = \"&\",\n      ACTIVITY_END_DATA = \"/&\",\n      SUSPENSE_START_DATA = \"$\",\n      SUSPENSE_END_DATA = \"/$\",\n      SUSPENSE_PENDING_START_DATA = \"$?\",\n      SUSPENSE_QUEUED_START_DATA = \"$~\",\n      SUSPENSE_FALLBACK_START_DATA = \"$!\",\n      PREAMBLE_CONTRIBUTION_HTML = \"html\",\n      PREAMBLE_CONTRIBUTION_BODY = \"body\",\n      PREAMBLE_CONTRIBUTION_HEAD = \"head\",\n      FORM_STATE_IS_MATCHING = \"F!\",\n      FORM_STATE_IS_NOT_MATCHING = \"F\",\n      DOCUMENT_READY_STATE_LOADING = \"loading\",\n      STYLE = \"style\",\n      HostContextNamespaceNone = 0,\n      HostContextNamespaceSvg = 1,\n      HostContextNamespaceMath = 2,\n      eventsEnabled = null,\n      selectionInformation = null,\n      warnedUnknownTags = { dialog: !0, webview: !0 },\n      currentPopstateTransitionEvent = null,\n      scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n      cancelTimeout =\n        \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n      noTimeout = -1,\n      localPromise = \"function\" === typeof Promise ? Promise : void 0,\n      scheduleMicrotask =\n        \"function\" === typeof queueMicrotask\n          ? queueMicrotask\n          : \"undefined\" !== typeof localPromise\n            ? function (callback) {\n                return localPromise\n                  .resolve(null)\n                  .then(callback)\n                  .catch(handleErrorInNextTick);\n              }\n            : scheduleTimeout,\n      previousHydratableOnEnteringScopedSingleton = null,\n      NotLoaded = 0,\n      Loaded = 1,\n      Errored = 2,\n      Settled = 3,\n      Inserted = 4,\n      preloadPropsMap = new Map(),\n      preconnectsSet = new Set(),\n      previousDispatcher = ReactDOMSharedInternals.d;\n    ReactDOMSharedInternals.d = {\n      f: function () {\n        var previousWasRendering = previousDispatcher.f(),\n          wasRendering = flushSyncWork$1();\n        return previousWasRendering || wasRendering;\n      },\n      r: function (form) {\n        var formInst = getInstanceFromNode(form);\n        null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n          ? requestFormReset$1(formInst)\n          : previousDispatcher.r(form);\n      },\n      D: function (href) {\n        previousDispatcher.D(href);\n        preconnectAs(\"dns-prefetch\", href, null);\n      },\n      C: function (href, crossOrigin) {\n        previousDispatcher.C(href, crossOrigin);\n        preconnectAs(\"preconnect\", href, crossOrigin);\n      },\n      L: function (href, as, options) {\n        previousDispatcher.L(href, as, options);\n        var ownerDocument = globalDocument;\n        if (ownerDocument && href && as) {\n          var preloadSelector =\n            'link[rel=\"preload\"][as=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n            '\"]';\n          \"image\" === as\n            ? options && options.imageSrcSet\n              ? ((preloadSelector +=\n                  '[imagesrcset=\"' +\n                  escapeSelectorAttributeValueInsideDoubleQuotes(\n                    options.imageSrcSet\n                  ) +\n                  '\"]'),\n                \"string\" === typeof options.imageSizes &&\n                  (preloadSelector +=\n                    '[imagesizes=\"' +\n                    escapeSelectorAttributeValueInsideDoubleQuotes(\n                      options.imageSizes\n                    ) +\n                    '\"]'))\n              : (preloadSelector +=\n                  '[href=\"' +\n                  escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n                  '\"]')\n            : (preloadSelector +=\n                '[href=\"' +\n                escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n                '\"]');\n          var key = preloadSelector;\n          switch (as) {\n            case \"style\":\n              key = getStyleKey(href);\n              break;\n            case \"script\":\n              key = getScriptKey(href);\n          }\n          preloadPropsMap.has(key) ||\n            ((href = assign(\n              {\n                rel: \"preload\",\n                href:\n                  \"image\" === as && options && options.imageSrcSet\n                    ? void 0\n                    : href,\n                as: as\n              },\n              options\n            )),\n            preloadPropsMap.set(key, href),\n            null !== ownerDocument.querySelector(preloadSelector) ||\n              (\"style\" === as &&\n                ownerDocument.querySelector(\n                  getStylesheetSelectorFromKey(key)\n                )) ||\n              (\"script\" === as &&\n                ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n              ((as = ownerDocument.createElement(\"link\")),\n              setInitialProperties(as, \"link\", href),\n              markNodeAsHoistable(as),\n              ownerDocument.head.appendChild(as)));\n        }\n      },\n      m: function (href, options) {\n        previousDispatcher.m(href, options);\n        var ownerDocument = globalDocument;\n        if (ownerDocument && href) {\n          var as =\n              options && \"string\" === typeof options.as ? options.as : \"script\",\n            preloadSelector =\n              'link[rel=\"modulepreload\"][as=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n              '\"][href=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n              '\"]',\n            key = preloadSelector;\n          switch (as) {\n            case \"audioworklet\":\n            case \"paintworklet\":\n            case \"serviceworker\":\n            case \"sharedworker\":\n            case \"worker\":\n            case \"script\":\n              key = getScriptKey(href);\n          }\n          if (\n            !preloadPropsMap.has(key) &&\n            ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n            preloadPropsMap.set(key, href),\n            null === ownerDocument.querySelector(preloadSelector))\n          ) {\n            switch (as) {\n              case \"audioworklet\":\n              case \"paintworklet\":\n              case \"serviceworker\":\n              case \"sharedworker\":\n              case \"worker\":\n              case \"script\":\n                if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n                  return;\n            }\n            as = ownerDocument.createElement(\"link\");\n            setInitialProperties(as, \"link\", href);\n            markNodeAsHoistable(as);\n            ownerDocument.head.appendChild(as);\n          }\n        }\n      },\n      X: function (src, options) {\n        previousDispatcher.X(src, options);\n        var ownerDocument = globalDocument;\n        if (ownerDocument && src) {\n          var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n            key = getScriptKey(src),\n            resource = scripts.get(key);\n          resource ||\n            ((resource = ownerDocument.querySelector(\n              getScriptSelectorFromKey(key)\n            )),\n            resource ||\n              ((src = assign({ src: src, async: !0 }, options)),\n              (options = preloadPropsMap.get(key)) &&\n                adoptPreloadPropsForScript(src, options),\n              (resource = ownerDocument.createElement(\"script\")),\n              markNodeAsHoistable(resource),\n              setInitialProperties(resource, \"link\", src),\n              ownerDocument.head.appendChild(resource)),\n            (resource = {\n              type: \"script\",\n              instance: resource,\n              count: 1,\n              state: null\n            }),\n            scripts.set(key, resource));\n        }\n      },\n      S: function (href, precedence, options) {\n        previousDispatcher.S(href, precedence, options);\n        var ownerDocument = globalDocument;\n        if (ownerDocument && href) {\n          var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n            key = getStyleKey(href);\n          precedence = precedence || \"default\";\n          var resource = styles.get(key);\n          if (!resource) {\n            var state = { loading: NotLoaded, preload: null };\n            if (\n              (resource = ownerDocument.querySelector(\n                getStylesheetSelectorFromKey(key)\n              ))\n            )\n              state.loading = Loaded | Inserted;\n            else {\n              href = assign(\n                {\n                  rel: \"stylesheet\",\n                  href: href,\n                  \"data-precedence\": precedence\n                },\n                options\n              );\n              (options = preloadPropsMap.get(key)) &&\n                adoptPreloadPropsForStylesheet(href, options);\n              var link = (resource = ownerDocument.createElement(\"link\"));\n              markNodeAsHoistable(link);\n              setInitialProperties(link, \"link\", href);\n              link._p = new Promise(function (resolve, reject) {\n                link.onload = resolve;\n                link.onerror = reject;\n              });\n              link.addEventListener(\"load\", function () {\n                state.loading |= Loaded;\n              });\n              link.addEventListener(\"error\", function () {\n                state.loading |= Errored;\n              });\n              state.loading |= Inserted;\n              insertStylesheet(resource, precedence, ownerDocument);\n            }\n            resource = {\n              type: \"stylesheet\",\n              instance: resource,\n              count: 1,\n              state: state\n            };\n            styles.set(key, resource);\n          }\n        }\n      },\n      M: function (src, options) {\n        previousDispatcher.M(src, options);\n        var ownerDocument = globalDocument;\n        if (ownerDocument && src) {\n          var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n            key = getScriptKey(src),\n            resource = scripts.get(key);\n          resource ||\n            ((resource = ownerDocument.querySelector(\n              getScriptSelectorFromKey(key)\n            )),\n            resource ||\n              ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n              (options = preloadPropsMap.get(key)) &&\n                adoptPreloadPropsForScript(src, options),\n              (resource = ownerDocument.createElement(\"script\")),\n              markNodeAsHoistable(resource),\n              setInitialProperties(resource, \"link\", src),\n              ownerDocument.head.appendChild(resource)),\n            (resource = {\n              type: \"script\",\n              instance: resource,\n              count: 1,\n              state: null\n            }),\n            scripts.set(key, resource));\n        }\n      }\n    };\n    var globalDocument = \"undefined\" === typeof document ? null : document,\n      tagCaches = null,\n      suspendedState = null,\n      LAST_PRECEDENCE = null,\n      precedencesByRoot = null,\n      NotPendingTransition = NotPending,\n      HostTransitionContext = {\n        $$typeof: REACT_CONTEXT_TYPE,\n        Provider: null,\n        Consumer: null,\n        _currentValue: NotPendingTransition,\n        _currentValue2: NotPendingTransition,\n        _threadCount: 0\n      },\n      badgeFormat = \"%c%s%c \",\n      badgeStyle =\n        \"background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px\",\n      resetStyle = \"\",\n      pad = \" \",\n      bind = Function.prototype.bind;\n    var didWarnAboutNestedUpdates = !1;\n    var overrideHookState = null,\n      overrideHookStateDeletePath = null,\n      overrideHookStateRenamePath = null,\n      overrideProps = null,\n      overridePropsDeletePath = null,\n      overridePropsRenamePath = null,\n      scheduleUpdate = null,\n      setErrorHandler = null,\n      setSuspenseHandler = null;\n    overrideHookState = function (fiber, id, path, value) {\n      id = findHook(fiber, id);\n      null !== id &&\n        ((path = copyWithSetImpl(id.memoizedState, path, 0, value)),\n        (id.memoizedState = path),\n        (id.baseState = path),\n        (fiber.memoizedProps = assign({}, fiber.memoizedProps)),\n        (path = enqueueConcurrentRenderForLane(fiber, 2)),\n        null !== path && scheduleUpdateOnFiber(path, fiber, 2));\n    };\n    overrideHookStateDeletePath = function (fiber, id, path) {\n      id = findHook(fiber, id);\n      null !== id &&\n        ((path = copyWithDeleteImpl(id.memoizedState, path, 0)),\n        (id.memoizedState = path),\n        (id.baseState = path),\n        (fiber.memoizedProps = assign({}, fiber.memoizedProps)),\n        (path = enqueueConcurrentRenderForLane(fiber, 2)),\n        null !== path && scheduleUpdateOnFiber(path, fiber, 2));\n    };\n    overrideHookStateRenamePath = function (fiber, id, oldPath, newPath) {\n      id = findHook(fiber, id);\n      null !== id &&\n        ((oldPath = copyWithRename(id.memoizedState, oldPath, newPath)),\n        (id.memoizedState = oldPath),\n        (id.baseState = oldPath),\n        (fiber.memoizedProps = assign({}, fiber.memoizedProps)),\n        (oldPath = enqueueConcurrentRenderForLane(fiber, 2)),\n        null !== oldPath && scheduleUpdateOnFiber(oldPath, fiber, 2));\n    };\n    overrideProps = function (fiber, path, value) {\n      fiber.pendingProps = copyWithSetImpl(fiber.memoizedProps, path, 0, value);\n      fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);\n      path = enqueueConcurrentRenderForLane(fiber, 2);\n      null !== path && scheduleUpdateOnFiber(path, fiber, 2);\n    };\n    overridePropsDeletePath = function (fiber, path) {\n      fiber.pendingProps = copyWithDeleteImpl(fiber.memoizedProps, path, 0);\n      fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);\n      path = enqueueConcurrentRenderForLane(fiber, 2);\n      null !== path && scheduleUpdateOnFiber(path, fiber, 2);\n    };\n    overridePropsRenamePath = function (fiber, oldPath, newPath) {\n      fiber.pendingProps = copyWithRename(\n        fiber.memoizedProps,\n        oldPath,\n        newPath\n      );\n      fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps);\n      oldPath = enqueueConcurrentRenderForLane(fiber, 2);\n      null !== oldPath && scheduleUpdateOnFiber(oldPath, fiber, 2);\n    };\n    scheduleUpdate = function (fiber) {\n      var root = enqueueConcurrentRenderForLane(fiber, 2);\n      null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n    };\n    setErrorHandler = function (newShouldErrorImpl) {\n      shouldErrorImpl = newShouldErrorImpl;\n    };\n    setSuspenseHandler = function (newShouldSuspendImpl) {\n      shouldSuspendImpl = newShouldSuspendImpl;\n    };\n    var _enabled = !0,\n      return_targetInst = null,\n      hasScheduledReplayAttempt = !1,\n      queuedFocus = null,\n      queuedDrag = null,\n      queuedMouse = null,\n      queuedPointers = new Map(),\n      queuedPointerCaptures = new Map(),\n      queuedExplicitHydrationTargets = [],\n      discreteReplayableEvents =\n        \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n          \" \"\n        ),\n      lastScheduledReplayQueue = null;\n    ReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n      function (children) {\n        var root = this._internalRoot;\n        if (null === root) throw Error(\"Cannot update an unmounted root.\");\n        var args = arguments;\n        \"function\" === typeof args[1]\n          ? console.error(\n              \"does not support the second callback argument. To execute a side effect after rendering, declare it in a component body with useEffect().\"\n            )\n          : isValidContainer(args[1])\n            ? console.error(\n                \"You passed a container to the second argument of root.render(...). You don't need to pass it again since you already passed it to create the root.\"\n              )\n            : \"undefined\" !== typeof args[1] &&\n              console.error(\n                \"You passed a second argument to root.render(...) but it only accepts one argument.\"\n              );\n        args = children;\n        var current = root.current,\n          lane = requestUpdateLane(current);\n        updateContainerImpl(current, lane, args, root, null, null);\n      };\n    ReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n      function () {\n        var args = arguments;\n        \"function\" === typeof args[0] &&\n          console.error(\n            \"does not support a callback argument. To execute a side effect after rendering, declare it in a component body with useEffect().\"\n          );\n        args = this._internalRoot;\n        if (null !== args) {\n          this._internalRoot = null;\n          var container = args.containerInfo;\n          (executionContext & (RenderContext | CommitContext)) !== NoContext &&\n            console.error(\n              \"Attempted to synchronously unmount a root while React was already rendering. React cannot finish unmounting the root until the current render has completed, which may lead to a race condition.\"\n            );\n          updateContainerImpl(args.current, 2, null, args, null, null);\n          flushSyncWork$1();\n          container[internalContainerInstanceKey] = null;\n        }\n      };\n    ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (\n      target\n    ) {\n      if (target) {\n        var updatePriority = resolveUpdatePriority();\n        target = { blockedOn: null, target: target, priority: updatePriority };\n        for (\n          var i = 0;\n          i < queuedExplicitHydrationTargets.length &&\n          0 !== updatePriority &&\n          updatePriority < queuedExplicitHydrationTargets[i].priority;\n          i++\n        );\n        queuedExplicitHydrationTargets.splice(i, 0, target);\n        0 === i && attemptExplicitHydrationTarget(target);\n      }\n    };\n    (function () {\n      var isomorphicReactPackageVersion = React.version;\n      if (\"19.2.0-canary-97cdd5d3-20250710\" !== isomorphicReactPackageVersion)\n        throw Error(\n          'Incompatible React versions: The \"react\" and \"react-dom\" packages must have the exact same version. Instead got:\\n  - react:      ' +\n            (isomorphicReactPackageVersion +\n              \"\\n  - react-dom:  19.2.0-canary-97cdd5d3-20250710\\nLearn more: https://react.dev/warnings/version-mismatch\")\n        );\n    })();\n    (\"function\" === typeof Map &&\n      null != Map.prototype &&\n      \"function\" === typeof Map.prototype.forEach &&\n      \"function\" === typeof Set &&\n      null != Set.prototype &&\n      \"function\" === typeof Set.prototype.clear &&\n      \"function\" === typeof Set.prototype.forEach) ||\n      console.error(\n        \"React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://react.dev/link/react-polyfills\"\n      );\n    ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n      var fiber = componentOrElement._reactInternals;\n      if (void 0 === fiber) {\n        if (\"function\" === typeof componentOrElement.render)\n          throw Error(\"Unable to find node on an unmounted component.\");\n        componentOrElement = Object.keys(componentOrElement).join(\",\");\n        throw Error(\n          \"Argument appears to not be a ReactComponent. Keys: \" +\n            componentOrElement\n        );\n      }\n      componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n      componentOrElement =\n        null !== componentOrElement\n          ? findCurrentHostFiberImpl(componentOrElement)\n          : null;\n      componentOrElement =\n        null === componentOrElement ? null : componentOrElement.stateNode;\n      return componentOrElement;\n    };\n    if (\n      !(function () {\n        var internals = {\n          bundleType: 1,\n          version: \"19.2.0-canary-97cdd5d3-20250710\",\n          rendererPackageName: \"react-dom\",\n          currentDispatcherRef: ReactSharedInternals,\n          reconcilerVersion: \"19.2.0-canary-97cdd5d3-20250710\"\n        };\n        internals.overrideHookState = overrideHookState;\n        internals.overrideHookStateDeletePath = overrideHookStateDeletePath;\n        internals.overrideHookStateRenamePath = overrideHookStateRenamePath;\n        internals.overrideProps = overrideProps;\n        internals.overridePropsDeletePath = overridePropsDeletePath;\n        internals.overridePropsRenamePath = overridePropsRenamePath;\n        internals.scheduleUpdate = scheduleUpdate;\n        internals.setErrorHandler = setErrorHandler;\n        internals.setSuspenseHandler = setSuspenseHandler;\n        internals.scheduleRefresh = scheduleRefresh;\n        internals.scheduleRoot = scheduleRoot;\n        internals.setRefreshHandler = setRefreshHandler;\n        internals.getCurrentFiber = getCurrentFiberForDevTools;\n        internals.getLaneLabelMap = getLaneLabelMap;\n        internals.injectProfilingHooks = injectProfilingHooks;\n        return injectInternals(internals);\n      })() &&\n      canUseDOM &&\n      window.top === window.self &&\n      ((-1 < navigator.userAgent.indexOf(\"Chrome\") &&\n        -1 === navigator.userAgent.indexOf(\"Edge\")) ||\n        -1 < navigator.userAgent.indexOf(\"Firefox\"))\n    ) {\n      var protocol = window.location.protocol;\n      /^(https?|file):$/.test(protocol) &&\n        console.info(\n          \"%cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools\" +\n            (\"file:\" === protocol\n              ? \"\\nYou might need to use a local HTTP server (instead of file://): https://react.dev/link/react-devtools-faq\"\n              : \"\"),\n          \"font-weight:bold\"\n        );\n    }\n    exports.createRoot = function (container, options) {\n      if (!isValidContainer(container))\n        throw Error(\"Target container is not a DOM element.\");\n      warnIfReactDOMContainerInDEV(container);\n      var isStrictMode = !1,\n        identifierPrefix = \"\",\n        onUncaughtError = defaultOnUncaughtError,\n        onCaughtError = defaultOnCaughtError,\n        onRecoverableError = defaultOnRecoverableError;\n      null !== options &&\n        void 0 !== options &&\n        (options.hydrate\n          ? console.warn(\n              \"hydrate through createRoot is deprecated. Use ReactDOMClient.hydrateRoot(container, <App />) instead.\"\n            )\n          : \"object\" === typeof options &&\n            null !== options &&\n            options.$$typeof === REACT_ELEMENT_TYPE &&\n            console.error(\n              \"You passed a JSX element to createRoot. You probably meant to call root.render instead. Example usage:\\n\\n  let root = createRoot(domContainer);\\n  root.render(<App />);\"\n            ),\n        !0 === options.unstable_strictMode && (isStrictMode = !0),\n        void 0 !== options.identifierPrefix &&\n          (identifierPrefix = options.identifierPrefix),\n        void 0 !== options.onUncaughtError &&\n          (onUncaughtError = options.onUncaughtError),\n        void 0 !== options.onCaughtError &&\n          (onCaughtError = options.onCaughtError),\n        void 0 !== options.onRecoverableError &&\n          (onRecoverableError = options.onRecoverableError));\n      options = createFiberRoot(\n        container,\n        1,\n        !1,\n        null,\n        null,\n        isStrictMode,\n        identifierPrefix,\n        null,\n        onUncaughtError,\n        onCaughtError,\n        onRecoverableError,\n        defaultOnDefaultTransitionIndicator\n      );\n      container[internalContainerInstanceKey] = options.current;\n      listenToAllSupportedEvents(container);\n      return new ReactDOMRoot(options);\n    };\n    exports.hydrateRoot = function (container, initialChildren, options) {\n      if (!isValidContainer(container))\n        throw Error(\"Target container is not a DOM element.\");\n      warnIfReactDOMContainerInDEV(container);\n      void 0 === initialChildren &&\n        console.error(\n          \"Must provide initial children as second argument to hydrateRoot. Example usage: hydrateRoot(domContainer, <App />)\"\n        );\n      var isStrictMode = !1,\n        identifierPrefix = \"\",\n        onUncaughtError = defaultOnUncaughtError,\n        onCaughtError = defaultOnCaughtError,\n        onRecoverableError = defaultOnRecoverableError,\n        formState = null;\n      null !== options &&\n        void 0 !== options &&\n        (!0 === options.unstable_strictMode && (isStrictMode = !0),\n        void 0 !== options.identifierPrefix &&\n          (identifierPrefix = options.identifierPrefix),\n        void 0 !== options.onUncaughtError &&\n          (onUncaughtError = options.onUncaughtError),\n        void 0 !== options.onCaughtError &&\n          (onCaughtError = options.onCaughtError),\n        void 0 !== options.onRecoverableError &&\n          (onRecoverableError = options.onRecoverableError),\n        void 0 !== options.formState && (formState = options.formState));\n      initialChildren = createFiberRoot(\n        container,\n        1,\n        !0,\n        initialChildren,\n        null != options ? options : null,\n        isStrictMode,\n        identifierPrefix,\n        formState,\n        onUncaughtError,\n        onCaughtError,\n        onRecoverableError,\n        defaultOnDefaultTransitionIndicator\n      );\n      initialChildren.context = getContextForSubtree(null);\n      options = initialChildren.current;\n      isStrictMode = requestUpdateLane(options);\n      isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n      identifierPrefix = createUpdate(isStrictMode);\n      identifierPrefix.callback = null;\n      enqueueUpdate(options, identifierPrefix, isStrictMode);\n      options = isStrictMode;\n      initialChildren.current.lanes = options;\n      markRootUpdated$1(initialChildren, options);\n      ensureRootIsScheduled(initialChildren);\n      container[internalContainerInstanceKey] = initialChildren.current;\n      listenToAllSupportedEvents(container);\n      return new ReactDOMHydrationRoot(initialChildren);\n    };\n    exports.version = \"19.2.0-canary-97cdd5d3-20250710\";\n    \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n      \"function\" ===\n        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n  })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS1jbGllbnQuZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDYTtBQUNiLEtBQXFDO0FBQ3JDO0FBQ0E7QUFDQSx3Q0FBd0MsMEJBQTBCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RDtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qix3QkFBd0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RDtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsYUFBYTtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLFNBQVM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RCxRQUFRO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxRQUFRO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsZUFBZTtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxRQUFRO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQSx3QkFBd0IsV0FBVyxnQkFBZ0I7QUFDbkQseUJBQXlCLFdBQVcsaUJBQWlCO0FBQ3JELHlCQUF5QixXQUFXLGlCQUFpQjtBQUNyRCwwQkFBMEIsV0FBVyxrQkFBa0I7QUFDdkQsMEJBQTBCLFdBQVcsa0JBQWtCO0FBQ3ZELG1DQUFtQyxXQUFXLDJCQUEyQjtBQUN6RSw2QkFBNkIsV0FBVyxxQkFBcUI7QUFDN0QsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsUUFBUTtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxRQUFRO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLG9CQUFvQjtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxXQUFXO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxZQUFZO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx5REFBeUQ7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0JBQXNCO0FBQzlDO0FBQ0EsNEJBQTRCLHlCQUF5QjtBQUNyRDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLG9CQUFvQixpQkFBaUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixpQ0FBaUM7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsTUFBTTtBQUN4QixrQkFBa0IsNENBQTRDO0FBQzlELGdCQUFnQixnQkFBZ0I7QUFDaEM7QUFDQTtBQUNBLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixhQUFhO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksNENBQTRDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsT0FBTztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0JBQXNCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsaUJBQWlCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFpRSxPQUFPO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQyxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxpQkFBaUI7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrSEFBa0gsOEJBQThCO0FBQ2hKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdOQUFnTjtBQUNoTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrSkFBa0osaUJBQWlCO0FBQ25LO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0pBQWtKLGlCQUFpQixtREFBbUQsbUJBQW1CLFdBQVcsK0JBQStCO0FBQ25SO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRGQUE0RixHQUFHO0FBQy9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGtCQUFrQjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixlQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsK0JBQStCO0FBQy9CO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLHFDQUFxQztBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixzQkFBc0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHlCQUF5QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLE1BQU07QUFDOUI7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLGtEQUFrRDtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxvQ0FBb0M7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxpQkFBaUI7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELGlCQUFpQjtBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsa0RBQWtEO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyw2Q0FBNkM7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHFDQUFxQztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsd0NBQXdDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLCtCQUErQjtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELHNCQUFzQjtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELGlCQUFpQjtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCw4QkFBOEI7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZ0JBQWdCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGVBQWU7QUFDbkM7QUFDQTtBQUNBLDRCQUE0QixxQkFBcUI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxrQ0FBa0Msb0JBQW9CO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxPQUFPO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsc0JBQXNCO0FBQ2hELFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsMEJBQTBCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQsaUJBQWlCO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLHlDQUF5QztBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpTUFBaU0sR0FBRztBQUNwTTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLDRCQUE0QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDLDRCQUE0QjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiw2QkFBNkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsNEJBQTRCO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxRQUFRO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBNQUEwTSxHQUFHO0FBQzdNO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixnREFBZ0Q7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsZUFBZTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx1QkFBdUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLDhCQUE4QjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDRDQUE0QztBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsMENBQTBDLG9CQUFvQjtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLGlCQUFpQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksaUJBQWlCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHVCQUF1QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksaUJBQWlCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLGlCQUFpQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLG9DQUFvQztBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFlBQVksb0JBQW9CLHFDQUFxQztBQUNyRTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsbUJBQW1CO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxpQ0FBaUM7QUFDcEU7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyx1QkFBdUI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QywrQkFBK0I7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsTUFBTTtBQUMvQix5QkFBeUIsSUFBSTtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxVQUFVLG9EQUFvRDtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFO0FBQ2pFO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYywrQ0FBK0M7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsNENBQTRDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0Qsa0JBQWtCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsMEJBQTBCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLHNCQUFzQjtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsc0JBQXNCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsMEJBQTBCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsd0NBQXdDO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELGFBQWE7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxtQ0FBbUM7QUFDN0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLHVCQUF1QjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGdCQUFnQjtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNDQUFzQztBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsa0JBQWtCO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixnQ0FBZ0MsOEVBQThFLGlCQUFpQixnQkFBZ0IsR0FBRyxhQUFhO0FBQzlMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixlQUFlLHdCQUF3QjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEIsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RCxjQUFjO0FBQ2Q7QUFDQSwrQ0FBK0M7QUFDL0MsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MscUJBQXFCO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHFCQUFxQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLGlCQUFpQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isc0JBQXNCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsaUJBQWlCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHNCQUFzQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsdUJBQXVCO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsdUJBQXVCO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsdUJBQXVCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxzQkFBc0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxzQkFBc0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsc0JBQXNCO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxzQkFBc0I7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsc0JBQXNCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLHNCQUFzQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxzQkFBc0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsc0JBQXNCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixzQkFBc0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHNCQUFzQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixzQkFBc0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxzQkFBc0I7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHFCQUFxQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHFCQUFxQjtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsZ0JBQWdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix1QkFBdUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLFdBQVc7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSwwQkFBMEI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx5QkFBeUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSwyQ0FBMkM7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxnQkFBZ0I7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQ0FBaUM7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNk1BQTZNLDBDQUEwQyxFQUFFO0FBQ3pQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxzQkFBc0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2S0FBNkssMENBQTBDLEVBQUU7QUFDek47QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxlQUFlO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwwQkFBMEI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQsa0JBQWtCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsb0NBQW9DO0FBQy9EO0FBQ0E7QUFDQSwyQkFBMkIsb0NBQW9DO0FBQy9EO0FBQ0EsMkJBQTJCLHFCQUFxQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixvQ0FBb0M7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0SEFBNEgsbUJBQW1CLFdBQVcsK0JBQStCO0FBQ3pMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RSxZQUFZO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLFlBQVk7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixpQ0FBaUM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQix1QkFBdUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0hBQWtILDhCQUE4QjtBQUNoSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELG9CQUFvQjtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELGVBQWU7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFVBQVU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHlCQUF5QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHlCQUF5QjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEseUJBQXlCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGNBQWM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLG1CQUFtQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsZ0JBQWdCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsZ0JBQWdCO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxtQkFBbUI7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGdEQUFnRDtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekIsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QiwrQkFBK0I7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2SEFBNkgsS0FBSyxhQUFhLEtBQUs7QUFDcEo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpSUFBaUksS0FBSyxhQUFhLEtBQUs7QUFDeEo7QUFDQTtBQUNBLDBGQUEwRixLQUFLO0FBQy9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsVUFBVTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdFQUF3RTtBQUN4RTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxZQUFZO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsb0JBQW9CO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELE9BQU87QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsK0JBQStCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwyQ0FBMkM7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQix5QkFBeUI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZixhQUFhO0FBQ2I7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixtQkFBTyxDQUFDLDBQQUE4QjtBQUMxRCxjQUFjLG1CQUFPLENBQUMsa1BBQTBCO0FBQ2hELGlCQUFpQixtQkFBTyxDQUFDLDBQQUE4QjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkMsb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDLDJCQUEyQjtBQUMzQiw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLGtDQUFrQyxvQkFBb0Isb0JBQW9CO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxvQ0FBb0MseUJBQXlCLGlCQUFpQjtBQUM5RTtBQUNBLHFDQUFxQyxzQkFBc0Isa0JBQWtCO0FBQzdFO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsMkNBQTJDLG9CQUFvQixTQUFTO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQjtBQUNoQixvQ0FBb0MsT0FBTztBQUMzQyxzQ0FBc0MsT0FBTztBQUM3QztBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQsMkRBQTJEO0FBQzNELGtEQUFrRDtBQUNsRCxpREFBaUQ7QUFDakQ7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLGVBQWU7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixvQ0FBb0M7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qix5QkFBeUI7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLGtDQUFrQztBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IscUJBQXFCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLHFDQUFxQztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLDZCQUE2QixnRUFBZ0UsZUFBZSxvQ0FBb0M7QUFDaEo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGtCQUFrQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrSkFBK0oseUJBQXlCO0FBQ3hMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxtQkFBbUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxlQUFlO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS1jbGllbnQuZGV2ZWxvcG1lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtZG9tLWNsaWVudC5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuLypcbiBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiovXG5cInVzZSBzdHJpY3RcIjtcblwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViAmJlxuICAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIGZpbmRIb29rKGZpYmVyLCBpZCkge1xuICAgICAgZm9yIChmaWJlciA9IGZpYmVyLm1lbW9pemVkU3RhdGU7IG51bGwgIT09IGZpYmVyICYmIDAgPCBpZDsgKVxuICAgICAgICAoZmliZXIgPSBmaWJlci5uZXh0KSwgaWQtLTtcbiAgICAgIHJldHVybiBmaWJlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29weVdpdGhTZXRJbXBsKG9iaiwgcGF0aCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICBpZiAoaW5kZXggPj0gcGF0aC5sZW5ndGgpIHJldHVybiB2YWx1ZTtcbiAgICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XSxcbiAgICAgICAgdXBkYXRlZCA9IGlzQXJyYXlJbXBsKG9iaikgPyBvYmouc2xpY2UoKSA6IGFzc2lnbih7fSwgb2JqKTtcbiAgICAgIHVwZGF0ZWRba2V5XSA9IGNvcHlXaXRoU2V0SW1wbChvYmpba2V5XSwgcGF0aCwgaW5kZXggKyAxLCB2YWx1ZSk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29weVdpdGhSZW5hbWUob2JqLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgICBpZiAob2xkUGF0aC5sZW5ndGggIT09IG5ld1BhdGgubGVuZ3RoKVxuICAgICAgICBjb25zb2xlLndhcm4oXCJjb3B5V2l0aFJlbmFtZSgpIGV4cGVjdHMgcGF0aHMgb2YgdGhlIHNhbWUgbGVuZ3RoXCIpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3UGF0aC5sZW5ndGggLSAxOyBpKyspXG4gICAgICAgICAgaWYgKG9sZFBhdGhbaV0gIT09IG5ld1BhdGhbaV0pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgXCJjb3B5V2l0aFJlbmFtZSgpIGV4cGVjdHMgcGF0aHMgdG8gYmUgdGhlIHNhbWUgZXhjZXB0IGZvciB0aGUgZGVlcGVzdCBrZXlcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb3B5V2l0aFJlbmFtZUltcGwob2JqLCBvbGRQYXRoLCBuZXdQYXRoLCAwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29weVdpdGhSZW5hbWVJbXBsKG9iaiwgb2xkUGF0aCwgbmV3UGF0aCwgaW5kZXgpIHtcbiAgICAgIHZhciBvbGRLZXkgPSBvbGRQYXRoW2luZGV4XSxcbiAgICAgICAgdXBkYXRlZCA9IGlzQXJyYXlJbXBsKG9iaikgPyBvYmouc2xpY2UoKSA6IGFzc2lnbih7fSwgb2JqKTtcbiAgICAgIGluZGV4ICsgMSA9PT0gb2xkUGF0aC5sZW5ndGhcbiAgICAgICAgPyAoKHVwZGF0ZWRbbmV3UGF0aFtpbmRleF1dID0gdXBkYXRlZFtvbGRLZXldKSxcbiAgICAgICAgICBpc0FycmF5SW1wbCh1cGRhdGVkKVxuICAgICAgICAgICAgPyB1cGRhdGVkLnNwbGljZShvbGRLZXksIDEpXG4gICAgICAgICAgICA6IGRlbGV0ZSB1cGRhdGVkW29sZEtleV0pXG4gICAgICAgIDogKHVwZGF0ZWRbb2xkS2V5XSA9IGNvcHlXaXRoUmVuYW1lSW1wbChcbiAgICAgICAgICAgIG9ialtvbGRLZXldLFxuICAgICAgICAgICAgb2xkUGF0aCxcbiAgICAgICAgICAgIG5ld1BhdGgsXG4gICAgICAgICAgICBpbmRleCArIDFcbiAgICAgICAgICApKTtcbiAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb3B5V2l0aERlbGV0ZUltcGwob2JqLCBwYXRoLCBpbmRleCkge1xuICAgICAgdmFyIGtleSA9IHBhdGhbaW5kZXhdLFxuICAgICAgICB1cGRhdGVkID0gaXNBcnJheUltcGwob2JqKSA/IG9iai5zbGljZSgpIDogYXNzaWduKHt9LCBvYmopO1xuICAgICAgaWYgKGluZGV4ICsgMSA9PT0gcGF0aC5sZW5ndGgpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgaXNBcnJheUltcGwodXBkYXRlZCkgPyB1cGRhdGVkLnNwbGljZShrZXksIDEpIDogZGVsZXRlIHVwZGF0ZWRba2V5XSxcbiAgICAgICAgICB1cGRhdGVkXG4gICAgICAgICk7XG4gICAgICB1cGRhdGVkW2tleV0gPSBjb3B5V2l0aERlbGV0ZUltcGwob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkU3VzcGVuZEltcGwoKSB7XG4gICAgICByZXR1cm4gITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZEVycm9ySW1wbCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIkRvIG5vdCBjYWxsIEhvb2tzIGluc2lkZSB1c2VFZmZlY3QoLi4uKSwgdXNlTWVtbyguLi4pLCBvciBvdGhlciBidWlsdC1pbiBIb29rcy4gWW91IGNhbiBvbmx5IGNhbGwgSG9va3MgYXQgdGhlIHRvcCBsZXZlbCBvZiB5b3VyIFJlYWN0IGZ1bmN0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvcnVsZXMtb2YtaG9va3NcIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgXCJDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiBJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gd2FybkZvck1pc3NpbmdLZXkoKSB7fVxuICAgIGZ1bmN0aW9uIHNldFRvU29ydGVkU3RyaW5nKHNldCkge1xuICAgICAgdmFyIGFycmF5ID0gW107XG4gICAgICBzZXQuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgYXJyYXkucHVzaCh2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhcnJheS5zb3J0KCkuam9pbihcIiwgXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlcih0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gICAgICByZXR1cm4gbmV3IEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVSb290KHJvb3QsIGVsZW1lbnQpIHtcbiAgICAgIHJvb3QuY29udGV4dCA9PT0gZW1wdHlDb250ZXh0T2JqZWN0ICYmXG4gICAgICAgICh1cGRhdGVDb250YWluZXJJbXBsKHJvb3QuY3VycmVudCwgMiwgZWxlbWVudCwgcm9vdCwgbnVsbCwgbnVsbCksXG4gICAgICAgIGZsdXNoU3luY1dvcmskMSgpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVSZWZyZXNoKHJvb3QsIHVwZGF0ZSkge1xuICAgICAgaWYgKG51bGwgIT09IHJlc29sdmVGYW1pbHkpIHtcbiAgICAgICAgdmFyIHN0YWxlRmFtaWxpZXMgPSB1cGRhdGUuc3RhbGVGYW1pbGllcztcbiAgICAgICAgdXBkYXRlID0gdXBkYXRlLnVwZGF0ZWRGYW1pbGllcztcbiAgICAgICAgZmx1c2hQZW5kaW5nRWZmZWN0cygpO1xuICAgICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KFxuICAgICAgICAgIHJvb3QuY3VycmVudCxcbiAgICAgICAgICB1cGRhdGUsXG4gICAgICAgICAgc3RhbGVGYW1pbGllc1xuICAgICAgICApO1xuICAgICAgICBmbHVzaFN5bmNXb3JrJDEoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0UmVmcmVzaEhhbmRsZXIoaGFuZGxlcikge1xuICAgICAgcmVzb2x2ZUZhbWlseSA9IGhhbmRsZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzVmFsaWRDb250YWluZXIobm9kZSkge1xuICAgICAgcmV0dXJuICEoXG4gICAgICAgICFub2RlIHx8XG4gICAgICAgICgxICE9PSBub2RlLm5vZGVUeXBlICYmIDkgIT09IG5vZGUubm9kZVR5cGUgJiYgMTEgIT09IG5vZGUubm9kZVR5cGUpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSB7XG4gICAgICB2YXIgbm9kZSA9IGZpYmVyLFxuICAgICAgICBuZWFyZXN0TW91bnRlZCA9IGZpYmVyO1xuICAgICAgaWYgKGZpYmVyLmFsdGVybmF0ZSkgZm9yICg7IG5vZGUucmV0dXJuOyApIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIGVsc2Uge1xuICAgICAgICBmaWJlciA9IG5vZGU7XG4gICAgICAgIGRvXG4gICAgICAgICAgKG5vZGUgPSBmaWJlciksXG4gICAgICAgICAgICAwICE9PSAobm9kZS5mbGFncyAmIDQwOTgpICYmIChuZWFyZXN0TW91bnRlZCA9IG5vZGUucmV0dXJuKSxcbiAgICAgICAgICAgIChmaWJlciA9IG5vZGUucmV0dXJuKTtcbiAgICAgICAgd2hpbGUgKGZpYmVyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAzID09PSBub2RlLnRhZyA/IG5lYXJlc3RNb3VudGVkIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihmaWJlcikge1xuICAgICAgaWYgKDEzID09PSBmaWJlci50YWcpIHtcbiAgICAgICAgdmFyIHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuICAgICAgICBudWxsID09PSBzdXNwZW5zZVN0YXRlICYmXG4gICAgICAgICAgKChmaWJlciA9IGZpYmVyLmFsdGVybmF0ZSksXG4gICAgICAgICAgbnVsbCAhPT0gZmliZXIgJiYgKHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlKSk7XG4gICAgICAgIGlmIChudWxsICE9PSBzdXNwZW5zZVN0YXRlKSByZXR1cm4gc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEFjdGl2aXR5SW5zdGFuY2VGcm9tRmliZXIoZmliZXIpIHtcbiAgICAgIGlmICgzMSA9PT0gZmliZXIudGFnKSB7XG4gICAgICAgIHZhciBhY3Rpdml0eVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgbnVsbCA9PT0gYWN0aXZpdHlTdGF0ZSAmJlxuICAgICAgICAgICgoZmliZXIgPSBmaWJlci5hbHRlcm5hdGUpLFxuICAgICAgICAgIG51bGwgIT09IGZpYmVyICYmIChhY3Rpdml0eVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZSkpO1xuICAgICAgICBpZiAobnVsbCAhPT0gYWN0aXZpdHlTdGF0ZSkgcmV0dXJuIGFjdGl2aXR5U3RhdGUuZGVoeWRyYXRlZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhc3NlcnRJc01vdW50ZWQoZmliZXIpIHtcbiAgICAgIGlmIChnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSAhPT0gZmliZXIpXG4gICAgICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgoZmliZXIpIHtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICBpZiAoIWFsdGVybmF0ZSkge1xuICAgICAgICBhbHRlcm5hdGUgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKTtcbiAgICAgICAgaWYgKG51bGwgPT09IGFsdGVybmF0ZSlcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gICAgICAgIHJldHVybiBhbHRlcm5hdGUgIT09IGZpYmVyID8gbnVsbCA6IGZpYmVyO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgYSA9IGZpYmVyLCBiID0gYWx0ZXJuYXRlOyA7ICkge1xuICAgICAgICB2YXIgcGFyZW50QSA9IGEucmV0dXJuO1xuICAgICAgICBpZiAobnVsbCA9PT0gcGFyZW50QSkgYnJlYWs7XG4gICAgICAgIHZhciBwYXJlbnRCID0gcGFyZW50QS5hbHRlcm5hdGU7XG4gICAgICAgIGlmIChudWxsID09PSBwYXJlbnRCKSB7XG4gICAgICAgICAgYiA9IHBhcmVudEEucmV0dXJuO1xuICAgICAgICAgIGlmIChudWxsICE9PSBiKSB7XG4gICAgICAgICAgICBhID0gYjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50QS5jaGlsZCA9PT0gcGFyZW50Qi5jaGlsZCkge1xuICAgICAgICAgIGZvciAocGFyZW50QiA9IHBhcmVudEEuY2hpbGQ7IHBhcmVudEI7ICkge1xuICAgICAgICAgICAgaWYgKHBhcmVudEIgPT09IGEpIHJldHVybiBhc3NlcnRJc01vdW50ZWQocGFyZW50QSksIGZpYmVyO1xuICAgICAgICAgICAgaWYgKHBhcmVudEIgPT09IGIpIHJldHVybiBhc3NlcnRJc01vdW50ZWQocGFyZW50QSksIGFsdGVybmF0ZTtcbiAgICAgICAgICAgIHBhcmVudEIgPSBwYXJlbnRCLnNpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgbm9kZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYS5yZXR1cm4gIT09IGIucmV0dXJuKSAoYSA9IHBhcmVudEEpLCAoYiA9IHBhcmVudEIpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBmb3IgKHZhciBkaWRGaW5kQ2hpbGQgPSAhMSwgX2NoaWxkID0gcGFyZW50QS5jaGlsZDsgX2NoaWxkOyApIHtcbiAgICAgICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAgICAgZGlkRmluZENoaWxkID0gITA7XG4gICAgICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX2NoaWxkID09PSBiKSB7XG4gICAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9ICEwO1xuICAgICAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgICAgICBmb3IgKF9jaGlsZCA9IHBhcmVudEIuY2hpbGQ7IF9jaGlsZDsgKSB7XG4gICAgICAgICAgICAgIGlmIChfY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSAhMDtcbiAgICAgICAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoX2NoaWxkID09PSBiKSB7XG4gICAgICAgICAgICAgICAgZGlkRmluZENoaWxkID0gITA7XG4gICAgICAgICAgICAgICAgYiA9IHBhcmVudEI7XG4gICAgICAgICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWRpZEZpbmRDaGlsZClcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJDaGlsZCB3YXMgbm90IGZvdW5kIGluIGVpdGhlciBwYXJlbnQgc2V0LiBUaGlzIGluZGljYXRlcyBhIGJ1ZyBpbiBSZWFjdCByZWxhdGVkIHRvIHRoZSByZXR1cm4gcG9pbnRlci4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEuYWx0ZXJuYXRlICE9PSBiKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJSZXR1cm4gZmliZXJzIHNob3VsZCBhbHdheXMgYmUgZWFjaCBvdGhlcnMnIGFsdGVybmF0ZXMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKDMgIT09IGEudGFnKVxuICAgICAgICB0aHJvdyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gICAgICByZXR1cm4gYS5zdGF0ZU5vZGUuY3VycmVudCA9PT0gYSA/IGZpYmVyIDogYWx0ZXJuYXRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kQ3VycmVudEhvc3RGaWJlckltcGwobm9kZSkge1xuICAgICAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICAgICAgaWYgKDUgPT09IHRhZyB8fCAyNiA9PT0gdGFnIHx8IDI3ID09PSB0YWcgfHwgNiA9PT0gdGFnKSByZXR1cm4gbm9kZTtcbiAgICAgIGZvciAobm9kZSA9IG5vZGUuY2hpbGQ7IG51bGwgIT09IG5vZGU7ICkge1xuICAgICAgICB0YWcgPSBmaW5kQ3VycmVudEhvc3RGaWJlckltcGwobm9kZSk7XG4gICAgICAgIGlmIChudWxsICE9PSB0YWcpIHJldHVybiB0YWc7XG4gICAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgICBpZiAobnVsbCA9PT0gbWF5YmVJdGVyYWJsZSB8fCBcIm9iamVjdFwiICE9PSB0eXBlb2YgbWF5YmVJdGVyYWJsZSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBtYXliZUl0ZXJhYmxlID1cbiAgICAgICAgKE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0pIHx8XG4gICAgICAgIG1heWJlSXRlcmFibGVbXCJAQGl0ZXJhdG9yXCJdO1xuICAgICAgcmV0dXJuIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG1heWJlSXRlcmFibGUgPyBtYXliZUl0ZXJhYmxlIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgICAgIGlmIChudWxsID09IHR5cGUpIHJldHVybiBudWxsO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIHJldHVybiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlKSByZXR1cm4gdHlwZTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiRnJhZ21lbnRcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlByb2ZpbGVyXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdHJpY3RNb2RlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZVwiO1xuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZUxpc3RcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9BQ1RJVklUWV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIkFjdGl2aXR5XCI7XG4gICAgICB9XG4gICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIHN3aXRjaCAoXG4gICAgICAgICAgKFwibnVtYmVyXCIgPT09IHR5cGVvZiB0eXBlLnRhZyAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoKS4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgIHR5cGUuJCR0eXBlb2YpXG4gICAgICAgICkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gXCJQb3J0YWxcIjtcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OU1VNRVJfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZS5fY29udGV4dC5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Db25zdW1lclwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgIHZhciBpbm5lclR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgdHlwZSB8fFxuICAgICAgICAgICAgICAoKHR5cGUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgXCJcIiksXG4gICAgICAgICAgICAgICh0eXBlID0gXCJcIiAhPT0gdHlwZSA/IFwiRm9yd2FyZFJlZihcIiArIHR5cGUgKyBcIilcIiA6IFwiRm9yd2FyZFJlZlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChpbm5lclR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGwpLFxuICAgICAgICAgICAgICBudWxsICE9PSBpbm5lclR5cGVcbiAgICAgICAgICAgICAgICA/IGlubmVyVHlwZVxuICAgICAgICAgICAgICAgIDogZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgXCJNZW1vXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICBpbm5lclR5cGUgPSB0eXBlLl9wYXlsb2FkO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuX2luaXQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUoaW5uZXJUeXBlKSk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21Pd25lcihvd25lcikge1xuICAgICAgcmV0dXJuIFwibnVtYmVyXCIgPT09IHR5cGVvZiBvd25lci50YWdcbiAgICAgICAgPyBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKG93bmVyKVxuICAgICAgICA6IFwic3RyaW5nXCIgPT09IHR5cGVvZiBvd25lci5uYW1lXG4gICAgICAgICAgPyBvd25lci5uYW1lXG4gICAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB7XG4gICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgIHJldHVybiBcIkFjdGl2aXR5XCI7XG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgcmV0dXJuIFwiQ2FjaGVcIjtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiAodHlwZS5fY29udGV4dC5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Db25zdW1lclwiO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiO1xuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIHJldHVybiBcIkRlaHlkcmF0ZWRGcmFnbWVudFwiO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoZmliZXIgPSB0eXBlLnJlbmRlciksXG4gICAgICAgICAgICAoZmliZXIgPSBmaWJlci5kaXNwbGF5TmFtZSB8fCBmaWJlci5uYW1lIHx8IFwiXCIpLFxuICAgICAgICAgICAgdHlwZS5kaXNwbGF5TmFtZSB8fFxuICAgICAgICAgICAgICAoXCJcIiAhPT0gZmliZXIgPyBcIkZvcndhcmRSZWYoXCIgKyBmaWJlciArIFwiKVwiIDogXCJGb3J3YXJkUmVmXCIpXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHJldHVybiBcIkZyYWdtZW50XCI7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBcIlBvcnRhbFwiO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFwiUm9vdFwiO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIFwiVGV4dFwiO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA/IFwiU3RyaWN0TW9kZVwiIDogXCJNb2RlXCI7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgcmV0dXJuIFwiT2Zmc2NyZWVuXCI7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICByZXR1cm4gXCJTY29wZVwiO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VMaXN0XCI7XG4gICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgcmV0dXJuIFwiVHJhY2luZ01hcmtlclwiO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICAgICAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSkgcmV0dXJuIHR5cGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgdHlwZSA9IGZpYmVyLl9kZWJ1Z0luZm87XG4gICAgICAgICAgaWYgKG51bGwgIT0gdHlwZSlcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSB0eXBlLmxlbmd0aCAtIDE7IDAgPD0gaTsgaS0tKVxuICAgICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGVbaV0ubmFtZSkgcmV0dXJuIHR5cGVbaV0ubmFtZTtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gZmliZXIucmV0dXJuKVxuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIucmV0dXJuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDdXJzb3IoZGVmYXVsdFZhbHVlKSB7XG4gICAgICByZXR1cm4geyBjdXJyZW50OiBkZWZhdWx0VmFsdWUgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wKGN1cnNvciwgZmliZXIpIHtcbiAgICAgIDAgPiBpbmRleCRqc2NvbXAkMFxuICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXCJVbmV4cGVjdGVkIHBvcC5cIilcbiAgICAgICAgOiAoZmliZXIgIT09IGZpYmVyU3RhY2tbaW5kZXgkanNjb21wJDBdICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVW5leHBlY3RlZCBGaWJlciBwb3BwZWQuXCIpLFxuICAgICAgICAgIChjdXJzb3IuY3VycmVudCA9IHZhbHVlU3RhY2tbaW5kZXgkanNjb21wJDBdKSxcbiAgICAgICAgICAodmFsdWVTdGFja1tpbmRleCRqc2NvbXAkMF0gPSBudWxsKSxcbiAgICAgICAgICAoZmliZXJTdGFja1tpbmRleCRqc2NvbXAkMF0gPSBudWxsKSxcbiAgICAgICAgICBpbmRleCRqc2NvbXAkMC0tKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaChjdXJzb3IsIHZhbHVlLCBmaWJlcikge1xuICAgICAgaW5kZXgkanNjb21wJDArKztcbiAgICAgIHZhbHVlU3RhY2tbaW5kZXgkanNjb21wJDBdID0gY3Vyc29yLmN1cnJlbnQ7XG4gICAgICBmaWJlclN0YWNrW2luZGV4JGpzY29tcCQwXSA9IGZpYmVyO1xuICAgICAgY3Vyc29yLmN1cnJlbnQgPSB2YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVxdWlyZWRDb250ZXh0KGMpIHtcbiAgICAgIG51bGwgPT09IGMgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkV4cGVjdGVkIGhvc3QgY29udGV4dCB0byBleGlzdC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hIb3N0Q29udGFpbmVyKGZpYmVyLCBuZXh0Um9vdEluc3RhbmNlKSB7XG4gICAgICBwdXNoKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBuZXh0Um9vdEluc3RhbmNlLCBmaWJlcik7XG4gICAgICBwdXNoKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpO1xuICAgICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIG51bGwsIGZpYmVyKTtcbiAgICAgIHZhciBuZXh0Um9vdENvbnRleHQgPSBuZXh0Um9vdEluc3RhbmNlLm5vZGVUeXBlO1xuICAgICAgc3dpdGNoIChuZXh0Um9vdENvbnRleHQpIHtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIG5leHRSb290Q29udGV4dCA9IDkgPT09IG5leHRSb290Q29udGV4dCA/IFwiI2RvY3VtZW50XCIgOiBcIiNmcmFnbWVudFwiO1xuICAgICAgICAgIG5leHRSb290SW5zdGFuY2UgPSAobmV4dFJvb3RJbnN0YW5jZSA9XG4gICAgICAgICAgICBuZXh0Um9vdEluc3RhbmNlLmRvY3VtZW50RWxlbWVudClcbiAgICAgICAgICAgID8gKG5leHRSb290SW5zdGFuY2UgPSBuZXh0Um9vdEluc3RhbmNlLm5hbWVzcGFjZVVSSSlcbiAgICAgICAgICAgICAgPyBnZXRPd25Ib3N0Q29udGV4dChuZXh0Um9vdEluc3RhbmNlKVxuICAgICAgICAgICAgICA6IEhvc3RDb250ZXh0TmFtZXNwYWNlTm9uZVxuICAgICAgICAgICAgOiBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKChuZXh0Um9vdENvbnRleHQgPSBuZXh0Um9vdEluc3RhbmNlLnRhZ05hbWUpLFxuICAgICAgICAgICAgKG5leHRSb290SW5zdGFuY2UgPSBuZXh0Um9vdEluc3RhbmNlLm5hbWVzcGFjZVVSSSkpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgKG5leHRSb290SW5zdGFuY2UgPSBnZXRPd25Ib3N0Q29udGV4dChuZXh0Um9vdEluc3RhbmNlKSksXG4gICAgICAgICAgICAgIChuZXh0Um9vdEluc3RhbmNlID0gZ2V0Q2hpbGRIb3N0Q29udGV4dFByb2QoXG4gICAgICAgICAgICAgICAgbmV4dFJvb3RJbnN0YW5jZSxcbiAgICAgICAgICAgICAgICBuZXh0Um9vdENvbnRleHRcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3dpdGNoIChuZXh0Um9vdENvbnRleHQpIHtcbiAgICAgICAgICAgICAgY2FzZSBcInN2Z1wiOlxuICAgICAgICAgICAgICAgIG5leHRSb290SW5zdGFuY2UgPSBIb3N0Q29udGV4dE5hbWVzcGFjZVN2ZztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIm1hdGhcIjpcbiAgICAgICAgICAgICAgICBuZXh0Um9vdEluc3RhbmNlID0gSG9zdENvbnRleHROYW1lc3BhY2VNYXRoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG5leHRSb290SW5zdGFuY2UgPSBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0Um9vdENvbnRleHQgPSBuZXh0Um9vdENvbnRleHQudG9Mb3dlckNhc2UoKTtcbiAgICAgIG5leHRSb290Q29udGV4dCA9IHVwZGF0ZWRBbmNlc3RvckluZm9EZXYobnVsbCwgbmV4dFJvb3RDb250ZXh0KTtcbiAgICAgIG5leHRSb290Q29udGV4dCA9IHtcbiAgICAgICAgY29udGV4dDogbmV4dFJvb3RJbnN0YW5jZSxcbiAgICAgICAgYW5jZXN0b3JJbmZvOiBuZXh0Um9vdENvbnRleHRcbiAgICAgIH07XG4gICAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbmV4dFJvb3RDb250ZXh0LCBmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcEhvc3RDb250YWluZXIoZmliZXIpIHtcbiAgICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICAgIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpO1xuICAgICAgcG9wKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEhvc3RDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hIb3N0Q29udGV4dChmaWJlcikge1xuICAgICAgbnVsbCAhPT0gZmliZXIubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICBwdXNoKGhvc3RUcmFuc2l0aW9uUHJvdmlkZXJDdXJzb3IsIGZpYmVyLCBmaWJlcik7XG4gICAgICB2YXIgY29udGV4dCA9IHJlcXVpcmVkQ29udGV4dChjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICB2YXIgbmV4dENvbnRleHQgPSBnZXRDaGlsZEhvc3RDb250ZXh0UHJvZChjb250ZXh0LmNvbnRleHQsIHR5cGUpO1xuICAgICAgdHlwZSA9IHVwZGF0ZWRBbmNlc3RvckluZm9EZXYoY29udGV4dC5hbmNlc3RvckluZm8sIHR5cGUpO1xuICAgICAgbmV4dENvbnRleHQgPSB7IGNvbnRleHQ6IG5leHRDb250ZXh0LCBhbmNlc3RvckluZm86IHR5cGUgfTtcbiAgICAgIGNvbnRleHQgIT09IG5leHRDb250ZXh0ICYmXG4gICAgICAgIChwdXNoKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpLFxuICAgICAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbmV4dENvbnRleHQsIGZpYmVyKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gICAgICBjb250ZXh0RmliZXJTdGFja0N1cnNvci5jdXJyZW50ID09PSBmaWJlciAmJlxuICAgICAgICAocG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpLCBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKSk7XG4gICAgICBob3N0VHJhbnNpdGlvblByb3ZpZGVyQ3Vyc29yLmN1cnJlbnQgPT09IGZpYmVyICYmXG4gICAgICAgIChwb3AoaG9zdFRyYW5zaXRpb25Qcm92aWRlckN1cnNvciwgZmliZXIpLFxuICAgICAgICAoSG9zdFRyYW5zaXRpb25Db250ZXh0Ll9jdXJyZW50VmFsdWUgPSBOb3RQZW5kaW5nVHJhbnNpdGlvbikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG4gICAgZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gICAgICBpZiAoMCA9PT0gZGlzYWJsZWREZXB0aCkge1xuICAgICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDtcbiAgICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICAgIHdyaXRhYmxlOiAhMFxuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgICB3YXJuOiBwcm9wcyxcbiAgICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcbiAgICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBkaXNhYmxlZERlcHRoKys7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAgICAgIGRpc2FibGVkRGVwdGgtLTtcbiAgICAgIGlmICgwID09PSBkaXNhYmxlZERlcHRoKSB7XG4gICAgICAgIHZhciBwcm9wcyA9IHsgY29uZmlndXJhYmxlOiAhMCwgZW51bWVyYWJsZTogITAsIHdyaXRhYmxlOiAhMCB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgICAgbG9nOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2TG9nIH0pLFxuICAgICAgICAgIGluZm86IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZJbmZvIH0pLFxuICAgICAgICAgIHdhcm46IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZXYXJuIH0pLFxuICAgICAgICAgIGVycm9yOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2RXJyb3IgfSksXG4gICAgICAgICAgZ3JvdXA6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZHcm91cCB9KSxcbiAgICAgICAgICBncm91cENvbGxhcHNlZDogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkIH0pLFxuICAgICAgICAgIGdyb3VwRW5kOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2R3JvdXBFbmQgfSlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAwID4gZGlzYWJsZWREZXB0aCAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZvcm1hdE93bmVyU3RhY2soZXJyb3IpIHtcbiAgICAgIHZhciBwcmV2UHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtcbiAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdm9pZCAwO1xuICAgICAgZXJyb3IgPSBlcnJvci5zdGFjaztcbiAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldlByZXBhcmVTdGFja1RyYWNlO1xuICAgICAgZXJyb3Iuc3RhcnRzV2l0aChcIkVycm9yOiByZWFjdC1zdGFjay10b3AtZnJhbWVcXG5cIikgJiZcbiAgICAgICAgKGVycm9yID0gZXJyb3Iuc2xpY2UoMjkpKTtcbiAgICAgIHByZXZQcmVwYXJlU3RhY2tUcmFjZSA9IGVycm9yLmluZGV4T2YoXCJcXG5cIik7XG4gICAgICAtMSAhPT0gcHJldlByZXBhcmVTdGFja1RyYWNlICYmXG4gICAgICAgIChlcnJvciA9IGVycm9yLnNsaWNlKHByZXZQcmVwYXJlU3RhY2tUcmFjZSArIDEpKTtcbiAgICAgIHByZXZQcmVwYXJlU3RhY2tUcmFjZSA9IGVycm9yLmluZGV4T2YoXCJyZWFjdF9zdGFja19ib3R0b21fZnJhbWVcIik7XG4gICAgICAtMSAhPT0gcHJldlByZXBhcmVTdGFja1RyYWNlICYmXG4gICAgICAgIChwcmV2UHJlcGFyZVN0YWNrVHJhY2UgPSBlcnJvci5sYXN0SW5kZXhPZihcbiAgICAgICAgICBcIlxcblwiLFxuICAgICAgICAgIHByZXZQcmVwYXJlU3RhY2tUcmFjZVxuICAgICAgICApKTtcbiAgICAgIGlmICgtMSAhPT0gcHJldlByZXBhcmVTdGFja1RyYWNlKVxuICAgICAgICBlcnJvciA9IGVycm9yLnNsaWNlKDAsIHByZXZQcmVwYXJlU3RhY2tUcmFjZSk7XG4gICAgICBlbHNlIHJldHVybiBcIlwiO1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSB7XG4gICAgICBpZiAodm9pZCAwID09PSBwcmVmaXgpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XG4gICAgICAgICAgcHJlZml4ID0gKG1hdGNoICYmIG1hdGNoWzFdKSB8fCBcIlwiO1xuICAgICAgICAgIHN1ZmZpeCA9XG4gICAgICAgICAgICAtMSA8IHguc3RhY2suaW5kZXhPZihcIlxcbiAgICBhdFwiKVxuICAgICAgICAgICAgICA/IFwiICg8YW5vbnltb3VzPilcIlxuICAgICAgICAgICAgICA6IC0xIDwgeC5zdGFjay5pbmRleE9mKFwiQFwiKVxuICAgICAgICAgICAgICAgID8gXCJAdW5rbm93bjowOjBcIlxuICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgfVxuICAgICAgcmV0dXJuIFwiXFxuXCIgKyBwcmVmaXggKyBuYW1lICsgc3VmZml4O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBjb25zdHJ1Y3QpIHtcbiAgICAgIGlmICghZm4gfHwgcmVlbnRyeSkgcmV0dXJuIFwiXCI7XG4gICAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XG4gICAgICBpZiAodm9pZCAwICE9PSBmcmFtZSkgcmV0dXJuIGZyYW1lO1xuICAgICAgcmVlbnRyeSA9ICEwO1xuICAgICAgZnJhbWUgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtcbiAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdm9pZCAwO1xuICAgICAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlciA9IG51bGw7XG4gICAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IG51bGw7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIFJ1bkluUm9vdEZyYW1lID0ge1xuICAgICAgICAgIERldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKGNvbnN0cnVjdCkge1xuICAgICAgICAgICAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgXCJwcm9wc1wiLCB7XG4gICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIFJlZmxlY3QgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2wgPSB4O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoICh4JDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbCA9IHgkMDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoICh4JDEpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2wgPSB4JDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIChGYWtlID0gZm4oKSkgJiZcbiAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIEZha2UuY2F0Y2ggJiZcbiAgICAgICAgICAgICAgICAgIEZha2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAgICAgICAgICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIFwic3RyaW5nXCIgPT09IHR5cGVvZiBzYW1wbGUuc3RhY2spXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtzYW1wbGUuc3RhY2ssIGNvbnRyb2wuc3RhY2tdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtudWxsLCBudWxsXTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdC5kaXNwbGF5TmFtZSA9XG4gICAgICAgICAgXCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIjtcbiAgICAgICAgdmFyIG5hbWVQcm9wRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LFxuICAgICAgICAgIFwibmFtZVwiXG4gICAgICAgICk7XG4gICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvciAmJlxuICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvci5jb25maWd1cmFibGUgJiZcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QsXG4gICAgICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgICAgIHsgdmFsdWU6IFwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCIgfVxuICAgICAgICAgICk7XG4gICAgICAgIHZhciBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPVxuICAgICAgICAgICAgUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290KCksXG4gICAgICAgICAgc2FtcGxlU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMF0sXG4gICAgICAgICAgY29udHJvbFN0YWNrID0gX1J1bkluUm9vdEZyYW1lJERldGVyWzFdO1xuICAgICAgICBpZiAoc2FtcGxlU3RhY2sgJiYgY29udHJvbFN0YWNrKSB7XG4gICAgICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlU3RhY2suc3BsaXQoXCJcXG5cIiksXG4gICAgICAgICAgICBjb250cm9sTGluZXMgPSBjb250cm9sU3RhY2suc3BsaXQoXCJcXG5cIik7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlciA9IG5hbWVQcm9wRGVzY3JpcHRvciA9IDA7XG4gICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgPCBzYW1wbGVMaW5lcy5sZW5ndGggJiZcbiAgICAgICAgICAgICFzYW1wbGVMaW5lc1tuYW1lUHJvcERlc2NyaXB0b3JdLmluY2x1ZGVzKFxuICAgICAgICAgICAgICBcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yKys7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlciA8IGNvbnRyb2xMaW5lcy5sZW5ndGggJiZcbiAgICAgICAgICAgICFjb250cm9sTGluZXNbX1J1bkluUm9vdEZyYW1lJERldGVyXS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgXCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIClcbiAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlcisrO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvciA9PT0gc2FtcGxlTGluZXMubGVuZ3RoIHx8XG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPT09IGNvbnRyb2xMaW5lcy5sZW5ndGhcbiAgICAgICAgICApXG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxLFxuICAgICAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlciA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAxIDw9IG5hbWVQcm9wRGVzY3JpcHRvciAmJlxuICAgICAgICAgICAgICAwIDw9IF9SdW5JblJvb3RGcmFtZSREZXRlciAmJlxuICAgICAgICAgICAgICBzYW1wbGVMaW5lc1tuYW1lUHJvcERlc2NyaXB0b3JdICE9PVxuICAgICAgICAgICAgICAgIGNvbnRyb2xMaW5lc1tfUnVuSW5Sb290RnJhbWUkRGV0ZXJdO1xuXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlci0tO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICA7XG4gICAgICAgICAgICAxIDw9IG5hbWVQcm9wRGVzY3JpcHRvciAmJiAwIDw9IF9SdW5JblJvb3RGcmFtZSREZXRlcjtcbiAgICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvci0tLCBfUnVuSW5Sb290RnJhbWUkRGV0ZXItLVxuICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXSAhPT1cbiAgICAgICAgICAgICAgY29udHJvbExpbmVzW19SdW5JblJvb3RGcmFtZSREZXRlcl1cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoMSAhPT0gbmFtZVByb3BEZXNjcmlwdG9yIHx8IDEgIT09IF9SdW5JblJvb3RGcmFtZSREZXRlcikge1xuICAgICAgICAgICAgICAgIGRvXG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIChuYW1lUHJvcERlc2NyaXB0b3ItLSxcbiAgICAgICAgICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyLS0sXG4gICAgICAgICAgICAgICAgICAgIDAgPiBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVMaW5lc1tuYW1lUHJvcERlc2NyaXB0b3JdICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbExpbmVzW19SdW5JblJvb3RGcmFtZSREZXRlcl0pXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgICAgICAgICAgICAgc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgYXQgbmV3IFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgYXQgXCJcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBmbi5kaXNwbGF5TmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICAgIF9mcmFtZS5pbmNsdWRlcyhcIjxhbm9ueW1vdXM+XCIpICYmXG4gICAgICAgICAgICAgICAgICAgICAgKF9mcmFtZSA9IF9mcmFtZS5yZXBsYWNlKFwiPGFub255bW91cz5cIiwgZm4uZGlzcGxheU5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZm4gJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoMSA8PSBuYW1lUHJvcERlc2NyaXB0b3IgJiYgMCA8PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAocmVlbnRyeSA9ICExKSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZpb3VzRGlzcGF0Y2hlciksXG4gICAgICAgICAgcmVlbmFibGVMb2dzKCksXG4gICAgICAgICAgKEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gZnJhbWUpO1xuICAgICAgfVxuICAgICAgc2FtcGxlTGluZXMgPSAoc2FtcGxlTGluZXMgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiBcIlwiKVxuICAgICAgICA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHNhbXBsZUxpbmVzKVxuICAgICAgICA6IFwiXCI7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBmbiAmJiBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc2FtcGxlTGluZXMpO1xuICAgICAgcmV0dXJuIHNhbXBsZUxpbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUZpYmVyKGZpYmVyLCBjaGlsZEZpYmVyKSB7XG4gICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICBjYXNlIDI3OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIkxhenlcIik7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgcmV0dXJuIGZpYmVyLmNoaWxkICE9PSBjaGlsZEZpYmVyICYmIG51bGwgIT09IGNoaWxkRmliZXJcbiAgICAgICAgICAgID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoXCJTdXNwZW5zZSBGYWxsYmFja1wiKVxuICAgICAgICAgICAgOiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIlN1c3BlbnNlXCIpO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIlN1c3BlbnNlTGlzdFwiKTtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUsICExKTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmaWJlci50eXBlLnJlbmRlciwgITEpO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSwgITApO1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIkFjdGl2aXR5XCIpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qod29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBpbmZvID0gXCJcIixcbiAgICAgICAgICBwcmV2aW91cyA9IG51bGw7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICBpbmZvICs9IGRlc2NyaWJlRmliZXIod29ya0luUHJvZ3Jlc3MsIHByZXZpb3VzKTtcbiAgICAgICAgICB2YXIgZGVidWdJbmZvID0gd29ya0luUHJvZ3Jlc3MuX2RlYnVnSW5mbztcbiAgICAgICAgICBpZiAoZGVidWdJbmZvKVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGRlYnVnSW5mby5sZW5ndGggLSAxOyAwIDw9IGk7IGktLSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBkZWJ1Z0luZm9baV07XG4gICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgZW50cnkubmFtZSkge1xuICAgICAgICAgICAgICAgIHZhciBKU0NvbXBpbGVyX3RlbXBfY29uc3QgPSBpbmZvO1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gZW50cnkubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZW52ID0gZW50cnkuZW52LFxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IGVudHJ5LmRlYnVnTG9jYXRpb247XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSBsb2NhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRTdGFjayA9IGZvcm1hdE93bmVyU3RhY2sobG9jYXRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgIGlkeCA9IGNoaWxkU3RhY2subGFzdEluZGV4T2YoXCJcXG5cIiksXG4gICAgICAgICAgICAgICAgICAgICAgbGFzdExpbmUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgLTEgPT09IGlkeCA/IGNoaWxkU3RhY2sgOiBjaGlsZFN0YWNrLnNsaWNlKGlkeCArIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoLTEgIT09IGxhc3RMaW5lLmluZGV4T2YobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gXCJcXG5cIiArIGxhc3RMaW5lO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFxuICAgICAgICAgICAgICAgICAgICBuYW1lICsgKGVudiA/IFwiIFtcIiArIGVudiArIFwiXVwiIDogXCJcIilcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluZm8gPSBKU0NvbXBpbGVyX3RlbXBfY29uc3QgKyBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBwcmV2aW91cyA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICAgICAgICB9IHdoaWxlICh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBpbmZvO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICByZXR1cm4gXCJcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiBcIiArIHgubWVzc2FnZSArIFwiXFxuXCIgKyB4LnN0YWNrO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWVXaXRob3V0TGluZU51bWJlcihmbikge1xuICAgICAgcmV0dXJuIChmbiA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6IFwiXCIpXG4gICAgICAgID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoZm4pXG4gICAgICAgIDogXCJcIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB7XG4gICAgICBpZiAobnVsbCA9PT0gY3VycmVudCkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgb3duZXIgPSBjdXJyZW50Ll9kZWJ1Z093bmVyO1xuICAgICAgcmV0dXJuIG51bGwgIT0gb3duZXIgPyBnZXRDb21wb25lbnROYW1lRnJvbU93bmVyKG93bmVyKSA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXYoKSB7XG4gICAgICBpZiAobnVsbCA9PT0gY3VycmVudCkgcmV0dXJuIFwiXCI7XG4gICAgICB2YXIgd29ya0luUHJvZ3Jlc3MgPSBjdXJyZW50O1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGluZm8gPSBcIlwiO1xuICAgICAgICA2ID09PSB3b3JrSW5Qcm9ncmVzcy50YWcgJiYgKHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuKTtcbiAgICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgaW5mbyArPSBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICBpbmZvICs9IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiU3VzcGVuc2VcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgaW5mbyArPSBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIlN1c3BlbnNlTGlzdFwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgICBpbmZvICs9IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiQWN0aXZpdHlcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyIHx8XG4gICAgICAgICAgICAgIFwiXCIgIT09IGluZm8gfHxcbiAgICAgICAgICAgICAgKGluZm8gKz0gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lV2l0aG91dExpbmVOdW1iZXIoXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZVxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciB8fFxuICAgICAgICAgICAgICBcIlwiICE9PSBpbmZvIHx8XG4gICAgICAgICAgICAgIChpbmZvICs9IGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZVdpdGhvdXRMaW5lTnVtYmVyKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUucmVuZGVyXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoOyB3b3JrSW5Qcm9ncmVzczsgKVxuICAgICAgICAgIGlmIChcIm51bWJlclwiID09PSB0eXBlb2Ygd29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgICAgICB2YXIgZmliZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gZmliZXIuX2RlYnVnT3duZXI7XG4gICAgICAgICAgICB2YXIgZGVidWdTdGFjayA9IGZpYmVyLl9kZWJ1Z1N0YWNrO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgJiZcbiAgICAgICAgICAgICAgZGVidWdTdGFjayAmJlxuICAgICAgICAgICAgICAoXCJzdHJpbmdcIiAhPT0gdHlwZW9mIGRlYnVnU3RhY2sgJiZcbiAgICAgICAgICAgICAgICAoZmliZXIuX2RlYnVnU3RhY2sgPSBkZWJ1Z1N0YWNrID0gZm9ybWF0T3duZXJTdGFjayhkZWJ1Z1N0YWNrKSksXG4gICAgICAgICAgICAgIFwiXCIgIT09IGRlYnVnU3RhY2sgJiYgKGluZm8gKz0gXCJcXG5cIiArIGRlYnVnU3RhY2spKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG51bGwgIT0gd29ya0luUHJvZ3Jlc3MuZGVidWdTdGFjaykge1xuICAgICAgICAgICAgdmFyIG93bmVyU3RhY2sgPSB3b3JrSW5Qcm9ncmVzcy5kZWJ1Z1N0YWNrO1xuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3Mub3duZXIpICYmXG4gICAgICAgICAgICAgIG93bmVyU3RhY2sgJiZcbiAgICAgICAgICAgICAgKGluZm8gKz0gXCJcXG5cIiArIGZvcm1hdE93bmVyU3RhY2sob3duZXJTdGFjaykpO1xuICAgICAgICAgIH0gZWxzZSBicmVhaztcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGluZm87XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9XG4gICAgICAgICAgXCJcXG5FcnJvciBnZW5lcmF0aW5nIHN0YWNrOiBcIiArIHgubWVzc2FnZSArIFwiXFxuXCIgKyB4LnN0YWNrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcnVuV2l0aEZpYmVySW5ERVYoZmliZXIsIGNhbGxiYWNrLCBhcmcwLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KSB7XG4gICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG4gICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG51bGwgIT09IGZpYmVyICYmIGZpYmVyLl9kZWJ1Z1Rhc2tcbiAgICAgICAgICA/IGZpYmVyLl9kZWJ1Z1Rhc2sucnVuKFxuICAgICAgICAgICAgICBjYWxsYmFjay5iaW5kKG51bGwsIGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBjYWxsYmFjayhhcmcwLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihwcmV2aW91c0ZpYmVyKTtcbiAgICAgIH1cbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcInJ1bldpdGhGaWJlckluREVWIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgaW4gcHJvZHVjdGlvbi4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0Q3VycmVudEZpYmVyKGZpYmVyKSB7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5nZXRDdXJyZW50U3RhY2sgPVxuICAgICAgICBudWxsID09PSBmaWJlciA/IG51bGwgOiBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2O1xuICAgICAgaXNSZW5kZXJpbmcgPSAhMTtcbiAgICAgIGN1cnJlbnQgPSBmaWJlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHlwZU5hbWUodmFsdWUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTeW1ib2wgJiZcbiAgICAgICAgICBTeW1ib2wudG9TdHJpbmdUYWcgJiZcbiAgICAgICAgICB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddKSB8fFxuICAgICAgICB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8XG4gICAgICAgIFwiT2JqZWN0XCJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSwgITE7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiAhMDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gXCJcIiArIHZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBhdHRyaWJ1dGVOYW1lKSB7XG4gICAgICBpZiAod2lsbENvZXJjaW9uVGhyb3codmFsdWUpKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlRoZSBwcm92aWRlZCBgJXNgIGF0dHJpYnV0ZSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLiBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS5cIixcbiAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUsXG4gICAgICAgICAgICB0eXBlTmFtZSh2YWx1ZSlcbiAgICAgICAgICApLFxuICAgICAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tDU1NQcm9wZXJ0eVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBwcm9wTmFtZSkge1xuICAgICAgaWYgKHdpbGxDb2VyY2lvblRocm93KHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJUaGUgcHJvdmlkZWQgYCVzYCBDU1MgcHJvcGVydHkgaXMgYW4gdW5zdXBwb3J0ZWQgdHlwZSAlcy4gVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGhlcmUuXCIsXG4gICAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICAgIHR5cGVOYW1lKHZhbHVlKVxuICAgICAgICAgICksXG4gICAgICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKVxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0Zvcm1GaWVsZFZhbHVlU3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiRm9ybSBmaWVsZCB2YWx1ZXMgKHZhbHVlLCBjaGVja2VkLCBkZWZhdWx0VmFsdWUsIG9yIGRlZmF1bHRDaGVja2VkIHByb3BzKSBtdXN0IGJlIHN0cmluZ3MsIG5vdCAlcy4gVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGhlcmUuXCIsXG4gICAgICAgICAgICB0eXBlTmFtZSh2YWx1ZSlcbiAgICAgICAgICApLFxuICAgICAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5qZWN0SW50ZXJuYWxzKGludGVybmFscykge1xuICAgICAgaWYgKFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18pIHJldHVybiAhMTtcbiAgICAgIHZhciBob29rID0gX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuICAgICAgaWYgKGhvb2suaXNEaXNhYmxlZCkgcmV0dXJuICEwO1xuICAgICAgaWYgKCFob29rLnN1cHBvcnRzRmliZXIpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiVGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIFJlYWN0IERldlRvb2xzIGlzIHRvbyBvbGQgYW5kIHdpbGwgbm90IHdvcmsgd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIFJlYWN0LiBQbGVhc2UgdXBkYXRlIFJlYWN0IERldlRvb2xzLiBodHRwczovL3JlYWN0LmRldi9saW5rL3JlYWN0LWRldnRvb2xzXCJcbiAgICAgICAgICApLFxuICAgICAgICAgICEwXG4gICAgICAgICk7XG4gICAgICB0cnkge1xuICAgICAgICAocmVuZGVyZXJJRCA9IGhvb2suaW5qZWN0KGludGVybmFscykpLCAoaW5qZWN0ZWRIb29rID0gaG9vayk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIlJlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMuXCIsIGVycik7XG4gICAgICB9XG4gICAgICByZXR1cm4gaG9vay5jaGVja0RDRSA/ICEwIDogITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKG5ld0lzU3RyaWN0TW9kZSkge1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbG9nJDEgJiZcbiAgICAgICAgdW5zdGFibGVfc2V0RGlzYWJsZVlpZWxkVmFsdWUobmV3SXNTdHJpY3RNb2RlKTtcbiAgICAgIGlmIChpbmplY3RlZEhvb2sgJiYgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRIb29rLnNldFN0cmljdE1vZGUpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaW5qZWN0ZWRIb29rLnNldFN0cmljdE1vZGUocmVuZGVyZXJJRCwgbmV3SXNTdHJpY3RNb2RlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgfHxcbiAgICAgICAgICAgICgoaGFzTG9nZ2VkRXJyb3IgPSAhMCksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXNcIixcbiAgICAgICAgICAgICAgZXJyXG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbmplY3RQcm9maWxpbmdIb29rcyhwcm9maWxpbmdIb29rcykge1xuICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcyA9IHByb2ZpbGluZ0hvb2tzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrQ29tbWl0U3RvcHBlZCgpIHtcbiAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tbWl0U3RvcHBlZCAmJlxuICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21taXRTdG9wcGVkKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkKGZpYmVyKSB7XG4gICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZCAmJlxuICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRSZW5kZXJTdGFydGVkKGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQoKSB7XG4gICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCAmJlxuICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtSZW5kZXJTdGFydGVkKGxhbmVzKSB7XG4gICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlclN0YXJ0ZWQgJiZcbiAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUmVuZGVyU3RhcnRlZChsYW5lcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtSZW5kZXJTdG9wcGVkKCkge1xuICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtSZW5kZXJTdG9wcGVkICYmXG4gICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlclN0b3BwZWQoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1N0YXRlVXBkYXRlU2NoZWR1bGVkKGZpYmVyLCBsYW5lKSB7XG4gICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1N0YXRlVXBkYXRlU2NoZWR1bGVkICYmXG4gICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1N0YXRlVXBkYXRlU2NoZWR1bGVkKGZpYmVyLCBsYW5lKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2x6MzJGYWxsYmFjayh4KSB7XG4gICAgICB4ID4+Pj0gMDtcbiAgICAgIHJldHVybiAwID09PSB4ID8gMzIgOiAoMzEgLSAoKGxvZyh4KSAvIExOMikgfCAwKSkgfCAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRMYWJlbEZvckxhbmUobGFuZSkge1xuICAgICAgaWYgKGxhbmUgJiAxKSByZXR1cm4gXCJTeW5jSHlkcmF0aW9uTGFuZVwiO1xuICAgICAgaWYgKGxhbmUgJiAyKSByZXR1cm4gXCJTeW5jXCI7XG4gICAgICBpZiAobGFuZSAmIDQpIHJldHVybiBcIklucHV0Q29udGludW91c0h5ZHJhdGlvblwiO1xuICAgICAgaWYgKGxhbmUgJiA4KSByZXR1cm4gXCJJbnB1dENvbnRpbnVvdXNcIjtcbiAgICAgIGlmIChsYW5lICYgMTYpIHJldHVybiBcIkRlZmF1bHRIeWRyYXRpb25cIjtcbiAgICAgIGlmIChsYW5lICYgMzIpIHJldHVybiBcIkRlZmF1bHRcIjtcbiAgICAgIGlmIChsYW5lICYgMTI4KSByZXR1cm4gXCJUcmFuc2l0aW9uSHlkcmF0aW9uXCI7XG4gICAgICBpZiAobGFuZSAmIDQxOTQwNDgpIHJldHVybiBcIlRyYW5zaXRpb25cIjtcbiAgICAgIGlmIChsYW5lICYgNjI5MTQ1NjApIHJldHVybiBcIlJldHJ5XCI7XG4gICAgICBpZiAobGFuZSAmIDY3MTA4ODY0KSByZXR1cm4gXCJTZWxlY3RpdmVIeWRyYXRpb25cIjtcbiAgICAgIGlmIChsYW5lICYgMTM0MjE3NzI4KSByZXR1cm4gXCJJZGxlSHlkcmF0aW9uXCI7XG4gICAgICBpZiAobGFuZSAmIDI2ODQzNTQ1NikgcmV0dXJuIFwiSWRsZVwiO1xuICAgICAgaWYgKGxhbmUgJiA1MzY4NzA5MTIpIHJldHVybiBcIk9mZnNjcmVlblwiO1xuICAgICAgaWYgKGxhbmUgJiAxMDczNzQxODI0KSByZXR1cm4gXCJEZWZlcnJlZFwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhsYW5lcykge1xuICAgICAgdmFyIHBlbmRpbmdTeW5jTGFuZXMgPSBsYW5lcyAmIDQyO1xuICAgICAgaWYgKDAgIT09IHBlbmRpbmdTeW5jTGFuZXMpIHJldHVybiBwZW5kaW5nU3luY0xhbmVzO1xuICAgICAgc3dpdGNoIChsYW5lcyAmIC1sYW5lcykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gMjtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiA0O1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIDg7XG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgIHJldHVybiAzMjtcbiAgICAgICAgY2FzZSA2NDpcbiAgICAgICAgICByZXR1cm4gNjQ7XG4gICAgICAgIGNhc2UgMTI4OlxuICAgICAgICAgIHJldHVybiAxMjg7XG4gICAgICAgIGNhc2UgMjU2OlxuICAgICAgICBjYXNlIDUxMjpcbiAgICAgICAgY2FzZSAxMDI0OlxuICAgICAgICBjYXNlIDIwNDg6XG4gICAgICAgIGNhc2UgNDA5NjpcbiAgICAgICAgY2FzZSA4MTkyOlxuICAgICAgICBjYXNlIDE2Mzg0OlxuICAgICAgICBjYXNlIDMyNzY4OlxuICAgICAgICBjYXNlIDY1NTM2OlxuICAgICAgICBjYXNlIDEzMTA3MjpcbiAgICAgICAgY2FzZSAyNjIxNDQ6XG4gICAgICAgIGNhc2UgNTI0Mjg4OlxuICAgICAgICBjYXNlIDEwNDg1NzY6XG4gICAgICAgIGNhc2UgMjA5NzE1MjpcbiAgICAgICAgICByZXR1cm4gbGFuZXMgJiA0MTk0MDQ4O1xuICAgICAgICBjYXNlIDQxOTQzMDQ6XG4gICAgICAgIGNhc2UgODM4ODYwODpcbiAgICAgICAgY2FzZSAxNjc3NzIxNjpcbiAgICAgICAgY2FzZSAzMzU1NDQzMjpcbiAgICAgICAgICByZXR1cm4gbGFuZXMgJiA2MjkxNDU2MDtcbiAgICAgICAgY2FzZSA2NzEwODg2NDpcbiAgICAgICAgICByZXR1cm4gNjcxMDg4NjQ7XG4gICAgICAgIGNhc2UgMTM0MjE3NzI4OlxuICAgICAgICAgIHJldHVybiAxMzQyMTc3Mjg7XG4gICAgICAgIGNhc2UgMjY4NDM1NDU2OlxuICAgICAgICAgIHJldHVybiAyNjg0MzU0NTY7XG4gICAgICAgIGNhc2UgNTM2ODcwOTEyOlxuICAgICAgICAgIHJldHVybiA1MzY4NzA5MTI7XG4gICAgICAgIGNhc2UgMTA3Mzc0MTgyNDpcbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJTaG91bGQgaGF2ZSBmb3VuZCBtYXRjaGluZyBsYW5lcy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0TmV4dExhbmVzKHJvb3QsIHdpcExhbmVzLCByb290SGFzUGVuZGluZ0NvbW1pdCkge1xuICAgICAgdmFyIHBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICAgICAgaWYgKDAgPT09IHBlbmRpbmdMYW5lcykgcmV0dXJuIDA7XG4gICAgICB2YXIgbmV4dExhbmVzID0gMCxcbiAgICAgICAgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzLFxuICAgICAgICBwaW5nZWRMYW5lcyA9IHJvb3QucGluZ2VkTGFuZXM7XG4gICAgICByb290ID0gcm9vdC53YXJtTGFuZXM7XG4gICAgICB2YXIgbm9uSWRsZVBlbmRpbmdMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIDEzNDIxNzcyNztcbiAgICAgIDAgIT09IG5vbklkbGVQZW5kaW5nTGFuZXNcbiAgICAgICAgPyAoKHBlbmRpbmdMYW5lcyA9IG5vbklkbGVQZW5kaW5nTGFuZXMgJiB+c3VzcGVuZGVkTGFuZXMpLFxuICAgICAgICAgIDAgIT09IHBlbmRpbmdMYW5lc1xuICAgICAgICAgICAgPyAobmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocGVuZGluZ0xhbmVzKSlcbiAgICAgICAgICAgIDogKChwaW5nZWRMYW5lcyAmPSBub25JZGxlUGVuZGluZ0xhbmVzKSxcbiAgICAgICAgICAgICAgMCAhPT0gcGluZ2VkTGFuZXNcbiAgICAgICAgICAgICAgICA/IChuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhwaW5nZWRMYW5lcykpXG4gICAgICAgICAgICAgICAgOiByb290SGFzUGVuZGluZ0NvbW1pdCB8fFxuICAgICAgICAgICAgICAgICAgKChyb290SGFzUGVuZGluZ0NvbW1pdCA9IG5vbklkbGVQZW5kaW5nTGFuZXMgJiB+cm9vdCksXG4gICAgICAgICAgICAgICAgICAwICE9PSByb290SGFzUGVuZGluZ0NvbW1pdCAmJlxuICAgICAgICAgICAgICAgICAgICAobmV4dExhbmVzID1cbiAgICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhyb290SGFzUGVuZGluZ0NvbW1pdCkpKSkpXG4gICAgICAgIDogKChub25JZGxlUGVuZGluZ0xhbmVzID0gcGVuZGluZ0xhbmVzICYgfnN1c3BlbmRlZExhbmVzKSxcbiAgICAgICAgICAwICE9PSBub25JZGxlUGVuZGluZ0xhbmVzXG4gICAgICAgICAgICA/IChuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhub25JZGxlUGVuZGluZ0xhbmVzKSlcbiAgICAgICAgICAgIDogMCAhPT0gcGluZ2VkTGFuZXNcbiAgICAgICAgICAgICAgPyAobmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocGluZ2VkTGFuZXMpKVxuICAgICAgICAgICAgICA6IHJvb3RIYXNQZW5kaW5nQ29tbWl0IHx8XG4gICAgICAgICAgICAgICAgKChyb290SGFzUGVuZGluZ0NvbW1pdCA9IHBlbmRpbmdMYW5lcyAmIH5yb290KSxcbiAgICAgICAgICAgICAgICAwICE9PSByb290SGFzUGVuZGluZ0NvbW1pdCAmJlxuICAgICAgICAgICAgICAgICAgKG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHJvb3RIYXNQZW5kaW5nQ29tbWl0KSkpKTtcbiAgICAgIHJldHVybiAwID09PSBuZXh0TGFuZXNcbiAgICAgICAgPyAwXG4gICAgICAgIDogMCAhPT0gd2lwTGFuZXMgJiZcbiAgICAgICAgICAgIHdpcExhbmVzICE9PSBuZXh0TGFuZXMgJiZcbiAgICAgICAgICAgIDAgPT09ICh3aXBMYW5lcyAmIHN1c3BlbmRlZExhbmVzKSAmJlxuICAgICAgICAgICAgKChzdXNwZW5kZWRMYW5lcyA9IG5leHRMYW5lcyAmIC1uZXh0TGFuZXMpLFxuICAgICAgICAgICAgKHJvb3RIYXNQZW5kaW5nQ29tbWl0ID0gd2lwTGFuZXMgJiAtd2lwTGFuZXMpLFxuICAgICAgICAgICAgc3VzcGVuZGVkTGFuZXMgPj0gcm9vdEhhc1BlbmRpbmdDb21taXQgfHxcbiAgICAgICAgICAgICAgKDMyID09PSBzdXNwZW5kZWRMYW5lcyAmJiAwICE9PSAocm9vdEhhc1BlbmRpbmdDb21taXQgJiA0MTk0MDQ4KSkpXG4gICAgICAgICAgPyB3aXBMYW5lc1xuICAgICAgICAgIDogbmV4dExhbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0lmUm9vdElzUHJlcmVuZGVyaW5nKHJvb3QsIHJlbmRlckxhbmVzKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAwID09PVxuICAgICAgICAocm9vdC5wZW5kaW5nTGFuZXMgJlxuICAgICAgICAgIH4ocm9vdC5zdXNwZW5kZWRMYW5lcyAmIH5yb290LnBpbmdlZExhbmVzKSAmXG4gICAgICAgICAgcmVuZGVyTGFuZXMpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpIHtcbiAgICAgIHN3aXRjaCAobGFuZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICBjYXNlIDg6XG4gICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lICsgMjUwO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICBjYXNlIDMyOlxuICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgY2FzZSAyNTY6XG4gICAgICAgIGNhc2UgNTEyOlxuICAgICAgICBjYXNlIDEwMjQ6XG4gICAgICAgIGNhc2UgMjA0ODpcbiAgICAgICAgY2FzZSA0MDk2OlxuICAgICAgICBjYXNlIDgxOTI6XG4gICAgICAgIGNhc2UgMTYzODQ6XG4gICAgICAgIGNhc2UgMzI3Njg6XG4gICAgICAgIGNhc2UgNjU1MzY6XG4gICAgICAgIGNhc2UgMTMxMDcyOlxuICAgICAgICBjYXNlIDI2MjE0NDpcbiAgICAgICAgY2FzZSA1MjQyODg6XG4gICAgICAgIGNhc2UgMTA0ODU3NjpcbiAgICAgICAgY2FzZSAyMDk3MTUyOlxuICAgICAgICAgIHJldHVybiBjdXJyZW50VGltZSArIDVlMztcbiAgICAgICAgY2FzZSA0MTk0MzA0OlxuICAgICAgICBjYXNlIDgzODg2MDg6XG4gICAgICAgIGNhc2UgMTY3NzcyMTY6XG4gICAgICAgIGNhc2UgMzM1NTQ0MzI6XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICBjYXNlIDY3MTA4ODY0OlxuICAgICAgICBjYXNlIDEzNDIxNzcyODpcbiAgICAgICAgY2FzZSAyNjg0MzU0NTY6XG4gICAgICAgIGNhc2UgNTM2ODcwOTEyOlxuICAgICAgICBjYXNlIDEwNzM3NDE4MjQ6XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlNob3VsZCBoYXZlIGZvdW5kIG1hdGNoaW5nIGxhbmVzLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgLTFcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjbGFpbU5leHRUcmFuc2l0aW9uTGFuZSgpIHtcbiAgICAgIHZhciBsYW5lID0gbmV4dFRyYW5zaXRpb25MYW5lO1xuICAgICAgbmV4dFRyYW5zaXRpb25MYW5lIDw8PSAxO1xuICAgICAgMCA9PT0gKG5leHRUcmFuc2l0aW9uTGFuZSAmIDQxOTQwNDgpICYmIChuZXh0VHJhbnNpdGlvbkxhbmUgPSAyNTYpO1xuICAgICAgcmV0dXJuIGxhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsYWltTmV4dFJldHJ5TGFuZSgpIHtcbiAgICAgIHZhciBsYW5lID0gbmV4dFJldHJ5TGFuZTtcbiAgICAgIG5leHRSZXRyeUxhbmUgPDw9IDE7XG4gICAgICAwID09PSAobmV4dFJldHJ5TGFuZSAmIDYyOTE0NTYwKSAmJiAobmV4dFJldHJ5TGFuZSA9IDQxOTQzMDQpO1xuICAgICAgcmV0dXJuIGxhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxhbmVNYXAoaW5pdGlhbCkge1xuICAgICAgZm9yICh2YXIgbGFuZU1hcCA9IFtdLCBpID0gMDsgMzEgPiBpOyBpKyspIGxhbmVNYXAucHVzaChpbml0aWFsKTtcbiAgICAgIHJldHVybiBsYW5lTWFwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUm9vdFVwZGF0ZWQkMShyb290LCB1cGRhdGVMYW5lKSB7XG4gICAgICByb290LnBlbmRpbmdMYW5lcyB8PSB1cGRhdGVMYW5lO1xuICAgICAgMjY4NDM1NDU2ICE9PSB1cGRhdGVMYW5lICYmXG4gICAgICAgICgocm9vdC5zdXNwZW5kZWRMYW5lcyA9IDApLFxuICAgICAgICAocm9vdC5waW5nZWRMYW5lcyA9IDApLFxuICAgICAgICAocm9vdC53YXJtTGFuZXMgPSAwKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtSb290RmluaXNoZWQoXG4gICAgICByb290LFxuICAgICAgZmluaXNoZWRMYW5lcyxcbiAgICAgIHJlbWFpbmluZ0xhbmVzLFxuICAgICAgc3Bhd25lZExhbmUsXG4gICAgICB1cGRhdGVkTGFuZXMsXG4gICAgICBzdXNwZW5kZWRSZXRyeUxhbmVzXG4gICAgKSB7XG4gICAgICB2YXIgcHJldmlvdXNseVBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICAgICAgcm9vdC5wZW5kaW5nTGFuZXMgPSByZW1haW5pbmdMYW5lcztcbiAgICAgIHJvb3Quc3VzcGVuZGVkTGFuZXMgPSAwO1xuICAgICAgcm9vdC5waW5nZWRMYW5lcyA9IDA7XG4gICAgICByb290Lndhcm1MYW5lcyA9IDA7XG4gICAgICByb290LmV4cGlyZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgICAgIHJvb3QuZW50YW5nbGVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gICAgICByb290LmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICAgICAgcm9vdC5zaGVsbFN1c3BlbmRDb3VudGVyID0gMDtcbiAgICAgIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzLFxuICAgICAgICBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lcyxcbiAgICAgICAgaGlkZGVuVXBkYXRlcyA9IHJvb3QuaGlkZGVuVXBkYXRlcztcbiAgICAgIGZvciAoXG4gICAgICAgIHJlbWFpbmluZ0xhbmVzID0gcHJldmlvdXNseVBlbmRpbmdMYW5lcyAmIH5yZW1haW5pbmdMYW5lcztcbiAgICAgICAgMCA8IHJlbWFpbmluZ0xhbmVzO1xuXG4gICAgICApIHtcbiAgICAgICAgdmFyIGluZGV4ID0gMzEgLSBjbHozMihyZW1haW5pbmdMYW5lcyksXG4gICAgICAgICAgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgICAgIGVudGFuZ2xlbWVudHNbaW5kZXhdID0gMDtcbiAgICAgICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IC0xO1xuICAgICAgICB2YXIgaGlkZGVuVXBkYXRlc0ZvckxhbmUgPSBoaWRkZW5VcGRhdGVzW2luZGV4XTtcbiAgICAgICAgaWYgKG51bGwgIT09IGhpZGRlblVwZGF0ZXNGb3JMYW5lKVxuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBoaWRkZW5VcGRhdGVzW2luZGV4XSA9IG51bGwsIGluZGV4ID0gMDtcbiAgICAgICAgICAgIGluZGV4IDwgaGlkZGVuVXBkYXRlc0ZvckxhbmUubGVuZ3RoO1xuICAgICAgICAgICAgaW5kZXgrK1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGhpZGRlblVwZGF0ZXNGb3JMYW5lW2luZGV4XTtcbiAgICAgICAgICAgIG51bGwgIT09IHVwZGF0ZSAmJiAodXBkYXRlLmxhbmUgJj0gLTUzNjg3MDkxMyk7XG4gICAgICAgICAgfVxuICAgICAgICByZW1haW5pbmdMYW5lcyAmPSB+bGFuZTtcbiAgICAgIH1cbiAgICAgIDAgIT09IHNwYXduZWRMYW5lICYmIG1hcmtTcGF3bmVkRGVmZXJyZWRMYW5lKHJvb3QsIHNwYXduZWRMYW5lLCAwKTtcbiAgICAgIDAgIT09IHN1c3BlbmRlZFJldHJ5TGFuZXMgJiZcbiAgICAgICAgMCA9PT0gdXBkYXRlZExhbmVzICYmXG4gICAgICAgIDAgIT09IHJvb3QudGFnICYmXG4gICAgICAgIChyb290LnN1c3BlbmRlZExhbmVzIHw9XG4gICAgICAgICAgc3VzcGVuZGVkUmV0cnlMYW5lcyAmIH4ocHJldmlvdXNseVBlbmRpbmdMYW5lcyAmIH5maW5pc2hlZExhbmVzKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtTcGF3bmVkRGVmZXJyZWRMYW5lKHJvb3QsIHNwYXduZWRMYW5lLCBlbnRhbmdsZWRMYW5lcykge1xuICAgICAgcm9vdC5wZW5kaW5nTGFuZXMgfD0gc3Bhd25lZExhbmU7XG4gICAgICByb290LnN1c3BlbmRlZExhbmVzICY9IH5zcGF3bmVkTGFuZTtcbiAgICAgIHZhciBzcGF3bmVkTGFuZUluZGV4ID0gMzEgLSBjbHozMihzcGF3bmVkTGFuZSk7XG4gICAgICByb290LmVudGFuZ2xlZExhbmVzIHw9IHNwYXduZWRMYW5lO1xuICAgICAgcm9vdC5lbnRhbmdsZW1lbnRzW3NwYXduZWRMYW5lSW5kZXhdID1cbiAgICAgICAgcm9vdC5lbnRhbmdsZW1lbnRzW3NwYXduZWRMYW5lSW5kZXhdIHxcbiAgICAgICAgMTA3Mzc0MTgyNCB8XG4gICAgICAgIChlbnRhbmdsZWRMYW5lcyAmIDQxOTQwOTApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBlbnRhbmdsZWRMYW5lcykge1xuICAgICAgdmFyIHJvb3RFbnRhbmdsZWRMYW5lcyA9IChyb290LmVudGFuZ2xlZExhbmVzIHw9IGVudGFuZ2xlZExhbmVzKTtcbiAgICAgIGZvciAocm9vdCA9IHJvb3QuZW50YW5nbGVtZW50czsgcm9vdEVudGFuZ2xlZExhbmVzOyApIHtcbiAgICAgICAgdmFyIGluZGV4ID0gMzEgLSBjbHozMihyb290RW50YW5nbGVkTGFuZXMpLFxuICAgICAgICAgIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgICAobGFuZSAmIGVudGFuZ2xlZExhbmVzKSB8IChyb290W2luZGV4XSAmIGVudGFuZ2xlZExhbmVzKSAmJlxuICAgICAgICAgIChyb290W2luZGV4XSB8PSBlbnRhbmdsZWRMYW5lcyk7XG4gICAgICAgIHJvb3RFbnRhbmdsZWRMYW5lcyAmPSB+bGFuZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QnVtcGVkTGFuZUZvckh5ZHJhdGlvbihyb290LCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIHJlbmRlckxhbmUgPSByZW5kZXJMYW5lcyAmIC1yZW5kZXJMYW5lcztcbiAgICAgIHJlbmRlckxhbmUgPVxuICAgICAgICAwICE9PSAocmVuZGVyTGFuZSAmIDQyKVxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogZ2V0QnVtcGVkTGFuZUZvckh5ZHJhdGlvbkJ5TGFuZShyZW5kZXJMYW5lKTtcbiAgICAgIHJldHVybiAwICE9PSAocmVuZGVyTGFuZSAmIChyb290LnN1c3BlbmRlZExhbmVzIHwgcmVuZGVyTGFuZXMpKVxuICAgICAgICA/IDBcbiAgICAgICAgOiByZW5kZXJMYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRCdW1wZWRMYW5lRm9ySHlkcmF0aW9uQnlMYW5lKGxhbmUpIHtcbiAgICAgIHN3aXRjaCAobGFuZSkge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbGFuZSA9IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICBsYW5lID0gNDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICBsYW5lID0gMTY7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjU2OlxuICAgICAgICBjYXNlIDUxMjpcbiAgICAgICAgY2FzZSAxMDI0OlxuICAgICAgICBjYXNlIDIwNDg6XG4gICAgICAgIGNhc2UgNDA5NjpcbiAgICAgICAgY2FzZSA4MTkyOlxuICAgICAgICBjYXNlIDE2Mzg0OlxuICAgICAgICBjYXNlIDMyNzY4OlxuICAgICAgICBjYXNlIDY1NTM2OlxuICAgICAgICBjYXNlIDEzMTA3MjpcbiAgICAgICAgY2FzZSAyNjIxNDQ6XG4gICAgICAgIGNhc2UgNTI0Mjg4OlxuICAgICAgICBjYXNlIDEwNDg1NzY6XG4gICAgICAgIGNhc2UgMjA5NzE1MjpcbiAgICAgICAgY2FzZSA0MTk0MzA0OlxuICAgICAgICBjYXNlIDgzODg2MDg6XG4gICAgICAgIGNhc2UgMTY3NzcyMTY6XG4gICAgICAgIGNhc2UgMzM1NTQ0MzI6XG4gICAgICAgICAgbGFuZSA9IDEyODtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNjg0MzU0NTY6XG4gICAgICAgICAgbGFuZSA9IDEzNDIxNzcyODtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBsYW5lID0gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRGaWJlclRvTGFuZXNNYXAocm9vdCwgZmliZXIsIGxhbmVzKSB7XG4gICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpXG4gICAgICAgIGZvciAocm9vdCA9IHJvb3QucGVuZGluZ1VwZGF0ZXJzTGFuZU1hcDsgMCA8IGxhbmVzOyApIHtcbiAgICAgICAgICB2YXIgaW5kZXggPSAzMSAtIGNsejMyKGxhbmVzKSxcbiAgICAgICAgICAgIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgICAgIHJvb3RbaW5kZXhdLmFkZChmaWJlcik7XG4gICAgICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbW92ZVBlbmRpbmdGaWJlcnNUb01lbW9pemVkKHJvb3QsIGxhbmVzKSB7XG4gICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdmFyIHBlbmRpbmdVcGRhdGVyc0xhbmVNYXAgPSByb290LnBlbmRpbmdVcGRhdGVyc0xhbmVNYXAsXG4gICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzID0gcm9vdC5tZW1vaXplZFVwZGF0ZXJzO1xuICAgICAgICAgIDAgPCBsYW5lcztcblxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgaW5kZXggPSAzMSAtIGNsejMyKGxhbmVzKTtcbiAgICAgICAgICByb290ID0gMSA8PCBpbmRleDtcbiAgICAgICAgICBpbmRleCA9IHBlbmRpbmdVcGRhdGVyc0xhbmVNYXBbaW5kZXhdO1xuICAgICAgICAgIDAgPCBpbmRleC5zaXplICYmXG4gICAgICAgICAgICAoaW5kZXguZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgICAgICAgICAgICAgKG51bGwgIT09IGFsdGVybmF0ZSAmJiBtZW1vaXplZFVwZGF0ZXJzLmhhcyhhbHRlcm5hdGUpKSB8fFxuICAgICAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMuYWRkKGZpYmVyKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgaW5kZXguY2xlYXIoKSk7XG4gICAgICAgICAgbGFuZXMgJj0gfnJvb3Q7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbGFuZXNUb0V2ZW50UHJpb3JpdHkobGFuZXMpIHtcbiAgICAgIGxhbmVzICY9IC1sYW5lcztcbiAgICAgIHJldHVybiAwICE9PSBEaXNjcmV0ZUV2ZW50UHJpb3JpdHkgJiYgRGlzY3JldGVFdmVudFByaW9yaXR5IDwgbGFuZXNcbiAgICAgICAgPyAwICE9PSBDb250aW51b3VzRXZlbnRQcmlvcml0eSAmJiBDb250aW51b3VzRXZlbnRQcmlvcml0eSA8IGxhbmVzXG4gICAgICAgICAgPyAwICE9PSAobGFuZXMgJiAxMzQyMTc3MjcpXG4gICAgICAgICAgICA/IERlZmF1bHRFdmVudFByaW9yaXR5XG4gICAgICAgICAgICA6IElkbGVFdmVudFByaW9yaXR5XG4gICAgICAgICAgOiBDb250aW51b3VzRXZlbnRQcmlvcml0eVxuICAgICAgICA6IERpc2NyZXRlRXZlbnRQcmlvcml0eTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVVwZGF0ZVByaW9yaXR5KCkge1xuICAgICAgdmFyIHVwZGF0ZVByaW9yaXR5ID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgICAgIGlmICgwICE9PSB1cGRhdGVQcmlvcml0eSkgcmV0dXJuIHVwZGF0ZVByaW9yaXR5O1xuICAgICAgdXBkYXRlUHJpb3JpdHkgPSB3aW5kb3cuZXZlbnQ7XG4gICAgICByZXR1cm4gdm9pZCAwID09PSB1cGRhdGVQcmlvcml0eVxuICAgICAgICA/IERlZmF1bHRFdmVudFByaW9yaXR5XG4gICAgICAgIDogZ2V0RXZlbnRQcmlvcml0eSh1cGRhdGVQcmlvcml0eS50eXBlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcnVuV2l0aFByaW9yaXR5KHByaW9yaXR5LCBmbikge1xuICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHkgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5wO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gcHJpb3JpdHkpLCBmbigpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHByZXZpb3VzUHJpb3JpdHk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRldGFjaERlbGV0ZWRJbnN0YW5jZShub2RlKSB7XG4gICAgICBkZWxldGUgbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcbiAgICAgIGRlbGV0ZSBub2RlW2ludGVybmFsUHJvcHNLZXldO1xuICAgICAgZGVsZXRlIG5vZGVbaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5XTtcbiAgICAgIGRlbGV0ZSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyTGlzdGVuZXJzS2V5XTtcbiAgICAgIGRlbGV0ZSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVzU2V0S2V5XTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0Tm9kZSkge1xuICAgICAgdmFyIHRhcmdldEluc3QgPSB0YXJnZXROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuICAgICAgaWYgKHRhcmdldEluc3QpIHJldHVybiB0YXJnZXRJbnN0O1xuICAgICAgZm9yICh2YXIgcGFyZW50Tm9kZSA9IHRhcmdldE5vZGUucGFyZW50Tm9kZTsgcGFyZW50Tm9kZTsgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAodGFyZ2V0SW5zdCA9XG4gICAgICAgICAgICBwYXJlbnROb2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldIHx8XG4gICAgICAgICAgICBwYXJlbnROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldKVxuICAgICAgICApIHtcbiAgICAgICAgICBwYXJlbnROb2RlID0gdGFyZ2V0SW5zdC5hbHRlcm5hdGU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbnVsbCAhPT0gdGFyZ2V0SW5zdC5jaGlsZCB8fFxuICAgICAgICAgICAgKG51bGwgIT09IHBhcmVudE5vZGUgJiYgbnVsbCAhPT0gcGFyZW50Tm9kZS5jaGlsZClcbiAgICAgICAgICApXG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICB0YXJnZXROb2RlID0gZ2V0UGFyZW50SHlkcmF0aW9uQm91bmRhcnkodGFyZ2V0Tm9kZSk7XG4gICAgICAgICAgICAgIG51bGwgIT09IHRhcmdldE5vZGU7XG5cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoKHBhcmVudE5vZGUgPSB0YXJnZXROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IGdldFBhcmVudEh5ZHJhdGlvbkJvdW5kYXJ5KHRhcmdldE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldE5vZGUgPSBwYXJlbnROb2RlO1xuICAgICAgICBwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEluc3RhbmNlRnJvbU5vZGUobm9kZSkge1xuICAgICAgaWYgKFxuICAgICAgICAobm9kZSA9IG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gfHwgbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSlcbiAgICAgICkge1xuICAgICAgICB2YXIgdGFnID0gbm9kZS50YWc7XG4gICAgICAgIGlmIChcbiAgICAgICAgICA1ID09PSB0YWcgfHxcbiAgICAgICAgICA2ID09PSB0YWcgfHxcbiAgICAgICAgICAxMyA9PT0gdGFnIHx8XG4gICAgICAgICAgMzEgPT09IHRhZyB8fFxuICAgICAgICAgIDI2ID09PSB0YWcgfHxcbiAgICAgICAgICAyNyA9PT0gdGFnIHx8XG4gICAgICAgICAgMyA9PT0gdGFnXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXROb2RlRnJvbUluc3RhbmNlKGluc3QpIHtcbiAgICAgIHZhciB0YWcgPSBpbnN0LnRhZztcbiAgICAgIGlmICg1ID09PSB0YWcgfHwgMjYgPT09IHRhZyB8fCAyNyA9PT0gdGFnIHx8IDYgPT09IHRhZylcbiAgICAgICAgcmV0dXJuIGluc3Quc3RhdGVOb2RlO1xuICAgICAgdGhyb3cgRXJyb3IoXCJnZXROb2RlRnJvbUluc3RhbmNlOiBJbnZhbGlkIGFyZ3VtZW50LlwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0UmVzb3VyY2VzRnJvbVJvb3Qocm9vdCkge1xuICAgICAgdmFyIHJlc291cmNlcyA9IHJvb3RbaW50ZXJuYWxSb290Tm9kZVJlc291cmNlc0tleV07XG4gICAgICByZXNvdXJjZXMgfHxcbiAgICAgICAgKHJlc291cmNlcyA9IHJvb3RbaW50ZXJuYWxSb290Tm9kZVJlc291cmNlc0tleV0gPVxuICAgICAgICAgIHsgaG9pc3RhYmxlU3R5bGVzOiBuZXcgTWFwKCksIGhvaXN0YWJsZVNjcmlwdHM6IG5ldyBNYXAoKSB9KTtcbiAgICAgIHJldHVybiByZXNvdXJjZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtOb2RlQXNIb2lzdGFibGUobm9kZSkge1xuICAgICAgbm9kZVtpbnRlcm5hbEhvaXN0YWJsZU1hcmtlcl0gPSAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVnaXN0ZXJUd29QaGFzZUV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcykge1xuICAgICAgcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpO1xuICAgICAgcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lICsgXCJDYXB0dXJlXCIsIGRlcGVuZGVuY2llcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKSB7XG4gICAgICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJFdmVudFJlZ2lzdHJ5OiBNb3JlIHRoYW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSByZWdpc3RyYXRpb24gbmFtZSwgYCVzYC5cIixcbiAgICAgICAgICByZWdpc3RyYXRpb25OYW1lXG4gICAgICAgICk7XG4gICAgICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdID0gZGVwZW5kZW5jaWVzO1xuICAgICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gcmVnaXN0cmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1tsb3dlckNhc2VkTmFtZV0gPSByZWdpc3RyYXRpb25OYW1lO1xuICAgICAgXCJvbkRvdWJsZUNsaWNrXCIgPT09IHJlZ2lzdHJhdGlvbk5hbWUgJiZcbiAgICAgICAgKHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMub25kYmxjbGljayA9IHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgICAgZm9yIChcbiAgICAgICAgcmVnaXN0cmF0aW9uTmFtZSA9IDA7XG4gICAgICAgIHJlZ2lzdHJhdGlvbk5hbWUgPCBkZXBlbmRlbmNpZXMubGVuZ3RoO1xuICAgICAgICByZWdpc3RyYXRpb25OYW1lKytcbiAgICAgIClcbiAgICAgICAgYWxsTmF0aXZlRXZlbnRzLmFkZChkZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKHRhZ05hbWUsIHByb3BzKSB7XG4gICAgICBoYXNSZWFkT25seVZhbHVlW3Byb3BzLnR5cGVdIHx8XG4gICAgICAgIHByb3BzLm9uQ2hhbmdlIHx8XG4gICAgICAgIHByb3BzLm9uSW5wdXQgfHxcbiAgICAgICAgcHJvcHMucmVhZE9ubHkgfHxcbiAgICAgICAgcHJvcHMuZGlzYWJsZWQgfHxcbiAgICAgICAgbnVsbCA9PSBwcm9wcy52YWx1ZSB8fFxuICAgICAgICAoXCJzZWxlY3RcIiA9PT0gdGFnTmFtZVxuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJZb3UgcHJvdmlkZWQgYSBgdmFsdWVgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiB0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsIHNldCBgb25DaGFuZ2VgLlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIllvdSBwcm92aWRlZCBhIGB2YWx1ZWAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiBgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmIHRoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRWYWx1ZWAuIE90aGVyd2lzZSwgc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuXCJcbiAgICAgICAgICAgICkpO1xuICAgICAgcHJvcHMub25DaGFuZ2UgfHxcbiAgICAgICAgcHJvcHMucmVhZE9ubHkgfHxcbiAgICAgICAgcHJvcHMuZGlzYWJsZWQgfHxcbiAgICAgICAgbnVsbCA9PSBwcm9wcy5jaGVja2VkIHx8XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJZb3UgcHJvdmlkZWQgYSBgY2hlY2tlZGAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiBgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmIHRoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRDaGVja2VkYC4gT3RoZXJ3aXNlLCBzZXQgZWl0aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC5cIlxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0F0dHJpYnV0ZU5hbWVTYWZlKGF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSwgYXR0cmlidXRlTmFtZSkpXG4gICAgICAgIHJldHVybiAhMDtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGUsIGF0dHJpYnV0ZU5hbWUpKVxuICAgICAgICByZXR1cm4gITE7XG4gICAgICBpZiAoVkFMSURfQVRUUklCVVRFX05BTUVfUkVHRVgudGVzdChhdHRyaWJ1dGVOYW1lKSlcbiAgICAgICAgcmV0dXJuICh2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGVbYXR0cmlidXRlTmFtZV0gPSAhMCk7XG4gICAgICBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gITA7XG4gICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBhdHRyaWJ1dGUgbmFtZTogYCVzYFwiLCBhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VmFsdWVGb3JBdHRyaWJ1dGVPbkN1c3RvbUNvbXBvbmVudChub2RlLCBuYW1lLCBleHBlY3RlZCkge1xuICAgICAgaWYgKGlzQXR0cmlidXRlTmFtZVNhZmUobmFtZSkpIHtcbiAgICAgICAgaWYgKCFub2RlLmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGV4cGVjdGVkKSB7XG4gICAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICBpZiAoITEgPT09IGV4cGVjdGVkKSByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2b2lkIDAgPT09IGV4cGVjdGVkID8gdm9pZCAwIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgIGlmIChcIlwiID09PSBub2RlICYmICEwID09PSBleHBlY3RlZCkgcmV0dXJuICEwO1xuICAgICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKGV4cGVjdGVkLCBuYW1lKTtcbiAgICAgICAgcmV0dXJuIG5vZGUgPT09IFwiXCIgKyBleHBlY3RlZCA/IGV4cGVjdGVkIDogbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0VmFsdWVGb3JBdHRyaWJ1dGUobm9kZSwgbmFtZSwgdmFsdWUpIHtcbiAgICAgIGlmIChpc0F0dHJpYnV0ZU5hbWVTYWZlKG5hbWUpKVxuICAgICAgICBpZiAobnVsbCA9PT0gdmFsdWUpIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICB2YXIgcHJlZml4ID0gbmFtZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsIDUpO1xuICAgICAgICAgICAgICBpZiAoXCJkYXRhLVwiICE9PSBwcmVmaXggJiYgXCJhcmlhLVwiICE9PSBwcmVmaXgpIHtcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgbmFtZSk7XG4gICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgXCJcIiArIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRWYWx1ZUZvcktub3duQXR0cmlidXRlKG5vZGUsIG5hbWUsIHZhbHVlKSB7XG4gICAgICBpZiAobnVsbCA9PT0gdmFsdWUpIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgbmFtZSk7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIFwiXCIgKyB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShub2RlLCBuYW1lc3BhY2UsIG5hbWUsIHZhbHVlKSB7XG4gICAgICBpZiAobnVsbCA9PT0gdmFsdWUpIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgbmFtZSk7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlLCBuYW1lLCBcIlwiICsgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgcmV0dXJuIGNoZWNrRm9ybUZpZWxkVmFsdWVTdHJpbmdDb2VyY2lvbih2YWx1ZSksIHZhbHVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc0NoZWNrYWJsZShlbGVtKSB7XG4gICAgICB2YXIgdHlwZSA9IGVsZW0udHlwZTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChlbGVtID0gZWxlbS5ub2RlTmFtZSkgJiZcbiAgICAgICAgXCJpbnB1dFwiID09PSBlbGVtLnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgKFwiY2hlY2tib3hcIiA9PT0gdHlwZSB8fCBcInJhZGlvXCIgPT09IHR5cGUpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFja1ZhbHVlT25Ob2RlKG5vZGUsIHZhbHVlRmllbGQsIGN1cnJlbnRWYWx1ZSkge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICBub2RlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSxcbiAgICAgICAgdmFsdWVGaWVsZFxuICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgIW5vZGUuaGFzT3duUHJvcGVydHkodmFsdWVGaWVsZCkgJiZcbiAgICAgICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIGRlc2NyaXB0b3IgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZGVzY3JpcHRvci5nZXQgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZGVzY3JpcHRvci5zZXRcbiAgICAgICkge1xuICAgICAgICB2YXIgZ2V0ID0gZGVzY3JpcHRvci5nZXQsXG4gICAgICAgICAgc2V0ID0gZGVzY3JpcHRvci5zZXQ7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub2RlLCB2YWx1ZUZpZWxkLCB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQuY2FsbCh0aGlzKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBjaGVja0Zvcm1GaWVsZFZhbHVlU3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgICAgICAgY3VycmVudFZhbHVlID0gXCJcIiArIHZhbHVlO1xuICAgICAgICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub2RlLCB2YWx1ZUZpZWxkLCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZGVzY3JpcHRvci5lbnVtZXJhYmxlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGdldFZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgY2hlY2tGb3JtRmllbGRWYWx1ZVN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IFwiXCIgKyB2YWx1ZTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0b3BUcmFja2luZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbm9kZS5fdmFsdWVUcmFja2VyID0gbnVsbDtcbiAgICAgICAgICAgIGRlbGV0ZSBub2RlW3ZhbHVlRmllbGRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhY2sobm9kZSkge1xuICAgICAgaWYgKCFub2RlLl92YWx1ZVRyYWNrZXIpIHtcbiAgICAgICAgdmFyIHZhbHVlRmllbGQgPSBpc0NoZWNrYWJsZShub2RlKSA/IFwiY2hlY2tlZFwiIDogXCJ2YWx1ZVwiO1xuICAgICAgICBub2RlLl92YWx1ZVRyYWNrZXIgPSB0cmFja1ZhbHVlT25Ob2RlKFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgdmFsdWVGaWVsZCxcbiAgICAgICAgICBcIlwiICsgbm9kZVt2YWx1ZUZpZWxkXVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVWYWx1ZUlmQ2hhbmdlZChub2RlKSB7XG4gICAgICBpZiAoIW5vZGUpIHJldHVybiAhMTtcbiAgICAgIHZhciB0cmFja2VyID0gbm9kZS5fdmFsdWVUcmFja2VyO1xuICAgICAgaWYgKCF0cmFja2VyKSByZXR1cm4gITA7XG4gICAgICB2YXIgbGFzdFZhbHVlID0gdHJhY2tlci5nZXRWYWx1ZSgpO1xuICAgICAgdmFyIHZhbHVlID0gXCJcIjtcbiAgICAgIG5vZGUgJiZcbiAgICAgICAgKHZhbHVlID0gaXNDaGVja2FibGUobm9kZSlcbiAgICAgICAgICA/IG5vZGUuY2hlY2tlZFxuICAgICAgICAgICAgPyBcInRydWVcIlxuICAgICAgICAgICAgOiBcImZhbHNlXCJcbiAgICAgICAgICA6IG5vZGUudmFsdWUpO1xuICAgICAgbm9kZSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIG5vZGUgIT09IGxhc3RWYWx1ZSA/ICh0cmFja2VyLnNldFZhbHVlKG5vZGUpLCAhMCkgOiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudChkb2MpIHtcbiAgICAgIGRvYyA9IGRvYyB8fCAoXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIGRvY3VtZW50ID8gZG9jdW1lbnQgOiB2b2lkIDApO1xuICAgICAgaWYgKFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiBkb2MpIHJldHVybiBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRvYy5hY3RpdmVFbGVtZW50IHx8IGRvYy5ib2R5O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZG9jLmJvZHk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXModmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKFxuICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzUmVnZXgsXG4gICAgICAgIGZ1bmN0aW9uIChjaCkge1xuICAgICAgICAgIHJldHVybiBcIlxcXFxcIiArIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpICsgXCIgXCI7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlSW5wdXRQcm9wcyhlbGVtZW50LCBwcm9wcykge1xuICAgICAgdm9pZCAwID09PSBwcm9wcy5jaGVja2VkIHx8XG4gICAgICAgIHZvaWQgMCA9PT0gcHJvcHMuZGVmYXVsdENoZWNrZWQgfHxcbiAgICAgICAgZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCB8fFxuICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIiVzIGNvbnRhaW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIGNoZWNrZWQgYW5kIGRlZmF1bHRDaGVja2VkIHByb3BzLiBJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAoc3BlY2lmeSBlaXRoZXIgdGhlIGNoZWNrZWQgcHJvcCwgb3IgdGhlIGRlZmF1bHRDaGVja2VkIHByb3AsIGJ1dCBub3QgYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiBodHRwczovL3JlYWN0LmRldi9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50c1wiLFxuICAgICAgICAgIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgXCJBIGNvbXBvbmVudFwiLFxuICAgICAgICAgIHByb3BzLnR5cGVcbiAgICAgICAgKSxcbiAgICAgICAgKGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSAhMCkpO1xuICAgICAgdm9pZCAwID09PSBwcm9wcy52YWx1ZSB8fFxuICAgICAgICB2b2lkIDAgPT09IHByb3BzLmRlZmF1bHRWYWx1ZSB8fFxuICAgICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMSB8fFxuICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIiVzIGNvbnRhaW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIHZhbHVlIGFuZCBkZWZhdWx0VmFsdWUgcHJvcHMuIElucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIChzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90IGJvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0IGVsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHNcIixcbiAgICAgICAgICBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8IFwiQSBjb21wb25lbnRcIixcbiAgICAgICAgICBwcm9wcy50eXBlXG4gICAgICAgICksXG4gICAgICAgIChkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMSA9ICEwKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUlucHV0KFxuICAgICAgZWxlbWVudCxcbiAgICAgIHZhbHVlLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgbGFzdERlZmF1bHRWYWx1ZSxcbiAgICAgIGNoZWNrZWQsXG4gICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgIHR5cGUsXG4gICAgICBuYW1lXG4gICAgKSB7XG4gICAgICBlbGVtZW50Lm5hbWUgPSBcIlwiO1xuICAgICAgbnVsbCAhPSB0eXBlICYmXG4gICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB0eXBlICYmXG4gICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgXCJib29sZWFuXCIgIT09IHR5cGVvZiB0eXBlXG4gICAgICAgID8gKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odHlwZSwgXCJ0eXBlXCIpLCAoZWxlbWVudC50eXBlID0gdHlwZSkpXG4gICAgICAgIDogZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJ0eXBlXCIpO1xuICAgICAgaWYgKG51bGwgIT0gdmFsdWUpXG4gICAgICAgIGlmIChcIm51bWJlclwiID09PSB0eXBlKSB7XG4gICAgICAgICAgaWYgKCgwID09PSB2YWx1ZSAmJiBcIlwiID09PSBlbGVtZW50LnZhbHVlKSB8fCBlbGVtZW50LnZhbHVlICE9IHZhbHVlKVxuICAgICAgICAgICAgZWxlbWVudC52YWx1ZSA9IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgZWxlbWVudC52YWx1ZSAhPT0gXCJcIiArIGdldFRvU3RyaW5nVmFsdWUodmFsdWUpICYmXG4gICAgICAgICAgICAoZWxlbWVudC52YWx1ZSA9IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSk7XG4gICAgICBlbHNlXG4gICAgICAgIChcInN1Ym1pdFwiICE9PSB0eXBlICYmIFwicmVzZXRcIiAhPT0gdHlwZSkgfHxcbiAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcInZhbHVlXCIpO1xuICAgICAgbnVsbCAhPSB2YWx1ZVxuICAgICAgICA/IHNldERlZmF1bHRWYWx1ZShlbGVtZW50LCB0eXBlLCBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSlcbiAgICAgICAgOiBudWxsICE9IGRlZmF1bHRWYWx1ZVxuICAgICAgICAgID8gc2V0RGVmYXVsdFZhbHVlKGVsZW1lbnQsIHR5cGUsIGdldFRvU3RyaW5nVmFsdWUoZGVmYXVsdFZhbHVlKSlcbiAgICAgICAgICA6IG51bGwgIT0gbGFzdERlZmF1bHRWYWx1ZSAmJiBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcInZhbHVlXCIpO1xuICAgICAgbnVsbCA9PSBjaGVja2VkICYmXG4gICAgICAgIG51bGwgIT0gZGVmYXVsdENoZWNrZWQgJiZcbiAgICAgICAgKGVsZW1lbnQuZGVmYXVsdENoZWNrZWQgPSAhIWRlZmF1bHRDaGVja2VkKTtcbiAgICAgIG51bGwgIT0gY2hlY2tlZCAmJlxuICAgICAgICAoZWxlbWVudC5jaGVja2VkID1cbiAgICAgICAgICBjaGVja2VkICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY2hlY2tlZCAmJlxuICAgICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBjaGVja2VkKTtcbiAgICAgIG51bGwgIT0gbmFtZSAmJlxuICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgbmFtZSAmJlxuICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIG5hbWUgJiZcbiAgICAgIFwiYm9vbGVhblwiICE9PSB0eXBlb2YgbmFtZVxuICAgICAgICA/IChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKG5hbWUsIFwibmFtZVwiKSxcbiAgICAgICAgICAoZWxlbWVudC5uYW1lID0gXCJcIiArIGdldFRvU3RyaW5nVmFsdWUobmFtZSkpKVxuICAgICAgICA6IGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwibmFtZVwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdElucHV0KFxuICAgICAgZWxlbWVudCxcbiAgICAgIHZhbHVlLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgY2hlY2tlZCxcbiAgICAgIGRlZmF1bHRDaGVja2VkLFxuICAgICAgdHlwZSxcbiAgICAgIG5hbWUsXG4gICAgICBpc0h5ZHJhdGluZ1xuICAgICkge1xuICAgICAgbnVsbCAhPSB0eXBlICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgXCJib29sZWFuXCIgIT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgIChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHR5cGUsIFwidHlwZVwiKSwgKGVsZW1lbnQudHlwZSA9IHR5cGUpKTtcbiAgICAgIGlmIChudWxsICE9IHZhbHVlIHx8IG51bGwgIT0gZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhKFxuICAgICAgICAgICAgKFwic3VibWl0XCIgIT09IHR5cGUgJiYgXCJyZXNldFwiICE9PSB0eXBlKSB8fFxuICAgICAgICAgICAgKHZvaWQgMCAhPT0gdmFsdWUgJiYgbnVsbCAhPT0gdmFsdWUpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0cmFjayhlbGVtZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdFZhbHVlID1cbiAgICAgICAgICBudWxsICE9IGRlZmF1bHRWYWx1ZSA/IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKGRlZmF1bHRWYWx1ZSkgOiBcIlwiO1xuICAgICAgICB2YWx1ZSA9IG51bGwgIT0gdmFsdWUgPyBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkgOiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIGlzSHlkcmF0aW5nIHx8IHZhbHVlID09PSBlbGVtZW50LnZhbHVlIHx8IChlbGVtZW50LnZhbHVlID0gdmFsdWUpO1xuICAgICAgICBlbGVtZW50LmRlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgY2hlY2tlZCA9IG51bGwgIT0gY2hlY2tlZCA/IGNoZWNrZWQgOiBkZWZhdWx0Q2hlY2tlZDtcbiAgICAgIGNoZWNrZWQgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBjaGVja2VkICYmXG4gICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBjaGVja2VkICYmXG4gICAgICAgICEhY2hlY2tlZDtcbiAgICAgIGVsZW1lbnQuY2hlY2tlZCA9IGlzSHlkcmF0aW5nID8gZWxlbWVudC5jaGVja2VkIDogISFjaGVja2VkO1xuICAgICAgZWxlbWVudC5kZWZhdWx0Q2hlY2tlZCA9ICEhY2hlY2tlZDtcbiAgICAgIG51bGwgIT0gbmFtZSAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBuYW1lICYmXG4gICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBuYW1lICYmXG4gICAgICAgIFwiYm9vbGVhblwiICE9PSB0eXBlb2YgbmFtZSAmJlxuICAgICAgICAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihuYW1lLCBcIm5hbWVcIiksIChlbGVtZW50Lm5hbWUgPSBuYW1lKSk7XG4gICAgICB0cmFjayhlbGVtZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0RGVmYXVsdFZhbHVlKG5vZGUsIHR5cGUsIHZhbHVlKSB7XG4gICAgICAoXCJudW1iZXJcIiA9PT0gdHlwZSAmJiBnZXRBY3RpdmVFbGVtZW50KG5vZGUub3duZXJEb2N1bWVudCkgPT09IG5vZGUpIHx8XG4gICAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID09PSBcIlwiICsgdmFsdWUgfHxcbiAgICAgICAgKG5vZGUuZGVmYXVsdFZhbHVlID0gXCJcIiArIHZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVPcHRpb25Qcm9wcyhlbGVtZW50LCBwcm9wcykge1xuICAgICAgbnVsbCA9PSBwcm9wcy52YWx1ZSAmJlxuICAgICAgICAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHByb3BzLmNoaWxkcmVuICYmIG51bGwgIT09IHByb3BzLmNoaWxkcmVuXG4gICAgICAgICAgPyBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKHByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgICAgICAgbnVsbCA9PSBjaGlsZCB8fFxuICAgICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBjaGlsZCB8fFxuICAgICAgICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBjaGlsZCB8fFxuICAgICAgICAgICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiBjaGlsZCB8fFxuICAgICAgICAgICAgICAgIGRpZFdhcm5JbnZhbGlkQ2hpbGQgfHxcbiAgICAgICAgICAgICAgICAoKGRpZFdhcm5JbnZhbGlkQ2hpbGQgPSAhMCksXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IGluZmVyIHRoZSBvcHRpb24gdmFsdWUgb2YgY29tcGxleCBjaGlsZHJlbi4gUGFzcyBhIGB2YWx1ZWAgcHJvcCBvciB1c2UgYSBwbGFpbiBzdHJpbmcgYXMgY2hpbGRyZW4gdG8gPG9wdGlvbj4uXCJcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsID09IHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIHx8XG4gICAgICAgICAgICBkaWRXYXJuSW52YWxpZElubmVySFRNTCB8fFxuICAgICAgICAgICAgKChkaWRXYXJuSW52YWxpZElubmVySFRNTCA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUGFzcyBhIGB2YWx1ZWAgcHJvcCBpZiB5b3Ugc2V0IGRhbmdlcm91c2x5SW5uZXJIVE1MIHNvIFJlYWN0IGtub3dzIHdoaWNoIHZhbHVlIHNob3VsZCBiZSBzZWxlY3RlZC5cIlxuICAgICAgICAgICAgKSkpO1xuICAgICAgbnVsbCA9PSBwcm9wcy5zZWxlY3RlZCB8fFxuICAgICAgICBkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbiB8fFxuICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlVzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBvbiA8c2VsZWN0PiBpbnN0ZWFkIG9mIHNldHRpbmcgYHNlbGVjdGVkYCBvbiA8b3B0aW9uPi5cIlxuICAgICAgICApLFxuICAgICAgICAoZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24gPSAhMCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gICAgICB2YXIgb3duZXJOYW1lID0gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKTtcbiAgICAgIHJldHVybiBvd25lck5hbWVcbiAgICAgICAgPyBcIlxcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGBcIiArIG93bmVyTmFtZSArIFwiYC5cIlxuICAgICAgICA6IFwiXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnMobm9kZSwgbXVsdGlwbGUsIHByb3BWYWx1ZSwgc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gICAgICBub2RlID0gbm9kZS5vcHRpb25zO1xuICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgIG11bHRpcGxlID0ge307XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIG11bHRpcGxlW1wiJFwiICsgcHJvcFZhbHVlW2ldXSA9ICEwO1xuICAgICAgICBmb3IgKHByb3BWYWx1ZSA9IDA7IHByb3BWYWx1ZSA8IG5vZGUubGVuZ3RoOyBwcm9wVmFsdWUrKylcbiAgICAgICAgICAoaSA9IG11bHRpcGxlLmhhc093blByb3BlcnR5KFwiJFwiICsgbm9kZVtwcm9wVmFsdWVdLnZhbHVlKSksXG4gICAgICAgICAgICBub2RlW3Byb3BWYWx1ZV0uc2VsZWN0ZWQgIT09IGkgJiYgKG5vZGVbcHJvcFZhbHVlXS5zZWxlY3RlZCA9IGkpLFxuICAgICAgICAgICAgaSAmJiBzZXREZWZhdWx0U2VsZWN0ZWQgJiYgKG5vZGVbcHJvcFZhbHVlXS5kZWZhdWx0U2VsZWN0ZWQgPSAhMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wVmFsdWUgPSBcIlwiICsgZ2V0VG9TdHJpbmdWYWx1ZShwcm9wVmFsdWUpO1xuICAgICAgICBtdWx0aXBsZSA9IG51bGw7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKG5vZGVbaV0udmFsdWUgPT09IHByb3BWYWx1ZSkge1xuICAgICAgICAgICAgbm9kZVtpXS5zZWxlY3RlZCA9ICEwO1xuICAgICAgICAgICAgc2V0RGVmYXVsdFNlbGVjdGVkICYmIChub2RlW2ldLmRlZmF1bHRTZWxlY3RlZCA9ICEwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbnVsbCAhPT0gbXVsdGlwbGUgfHwgbm9kZVtpXS5kaXNhYmxlZCB8fCAobXVsdGlwbGUgPSBub2RlW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBudWxsICE9PSBtdWx0aXBsZSAmJiAobXVsdGlwbGUuc2VsZWN0ZWQgPSAhMCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlU2VsZWN0UHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAgICAgIGZvciAoZWxlbWVudCA9IDA7IGVsZW1lbnQgPCB2YWx1ZVByb3BOYW1lcy5sZW5ndGg7IGVsZW1lbnQrKykge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSB2YWx1ZVByb3BOYW1lc1tlbGVtZW50XTtcbiAgICAgICAgaWYgKG51bGwgIT0gcHJvcHNbcHJvcE5hbWVdKSB7XG4gICAgICAgICAgdmFyIHByb3BOYW1lSXNBcnJheSA9IGlzQXJyYXlJbXBsKHByb3BzW3Byb3BOYW1lXSk7XG4gICAgICAgICAgcHJvcHMubXVsdGlwbGUgJiYgIXByb3BOYW1lSXNBcnJheVxuICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGFuIGFycmF5IGlmIGBtdWx0aXBsZWAgaXMgdHJ1ZS4lc1wiLFxuICAgICAgICAgICAgICAgIHByb3BOYW1lLFxuICAgICAgICAgICAgICAgIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogIXByb3BzLm11bHRpcGxlICYmXG4gICAgICAgICAgICAgIHByb3BOYW1lSXNBcnJheSAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGEgc2NhbGFyIHZhbHVlIGlmIGBtdWx0aXBsZWAgaXMgZmFsc2UuJXNcIixcbiAgICAgICAgICAgICAgICBwcm9wTmFtZSxcbiAgICAgICAgICAgICAgICBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKVxuICAgICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2b2lkIDAgPT09IHByb3BzLnZhbHVlIHx8XG4gICAgICAgIHZvaWQgMCA9PT0gcHJvcHMuZGVmYXVsdFZhbHVlIHx8XG4gICAgICAgIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSB8fFxuICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlNlbGVjdCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCBib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBzZWxlY3QgZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiBodHRwczovL3JlYWN0LmRldi9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50c1wiXG4gICAgICAgICksXG4gICAgICAgIChkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSAhMCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVRleHRhcmVhUHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAgICAgIHZvaWQgMCA9PT0gcHJvcHMudmFsdWUgfHxcbiAgICAgICAgdm9pZCAwID09PSBwcm9wcy5kZWZhdWx0VmFsdWUgfHxcbiAgICAgICAgZGlkV2FyblZhbERlZmF1bHRWYWwgfHxcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCIlcyBjb250YWlucyBhIHRleHRhcmVhIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiBUZXh0YXJlYSBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCBib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCB0ZXh0YXJlYSBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiBodHRwczovL3JlYWN0LmRldi9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50c1wiLFxuICAgICAgICAgIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgXCJBIGNvbXBvbmVudFwiXG4gICAgICAgICksXG4gICAgICAgIChkaWRXYXJuVmFsRGVmYXVsdFZhbCA9ICEwKSk7XG4gICAgICBudWxsICE9IHByb3BzLmNoaWxkcmVuICYmXG4gICAgICAgIG51bGwgPT0gcHJvcHMudmFsdWUgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlVzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBpbnN0ZWFkIG9mIHNldHRpbmcgY2hpbGRyZW4gb24gPHRleHRhcmVhPi5cIlxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVUZXh0YXJlYShlbGVtZW50LCB2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgKCh2YWx1ZSA9IFwiXCIgKyBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKSksXG4gICAgICAgIHZhbHVlICE9PSBlbGVtZW50LnZhbHVlICYmIChlbGVtZW50LnZhbHVlID0gdmFsdWUpLFxuICAgICAgICBudWxsID09IGRlZmF1bHRWYWx1ZSlcbiAgICAgICkge1xuICAgICAgICBlbGVtZW50LmRlZmF1bHRWYWx1ZSAhPT0gdmFsdWUgJiYgKGVsZW1lbnQuZGVmYXVsdFZhbHVlID0gdmFsdWUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbGVtZW50LmRlZmF1bHRWYWx1ZSA9XG4gICAgICAgIG51bGwgIT0gZGVmYXVsdFZhbHVlID8gXCJcIiArIGdldFRvU3RyaW5nVmFsdWUoZGVmYXVsdFZhbHVlKSA6IFwiXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRUZXh0YXJlYShlbGVtZW50LCB2YWx1ZSwgZGVmYXVsdFZhbHVlLCBjaGlsZHJlbikge1xuICAgICAgaWYgKG51bGwgPT0gdmFsdWUpIHtcbiAgICAgICAgaWYgKG51bGwgIT0gY2hpbGRyZW4pIHtcbiAgICAgICAgICBpZiAobnVsbCAhPSBkZWZhdWx0VmFsdWUpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJJZiB5b3Ugc3VwcGx5IGBkZWZhdWx0VmFsdWVgIG9uIGEgPHRleHRhcmVhPiwgZG8gbm90IHBhc3MgY2hpbGRyZW4uXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgaWYgKDEgPCBjaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFwiPHRleHRhcmVhPiBjYW4gb25seSBoYXZlIGF0IG1vc3Qgb25lIGNoaWxkLlwiKTtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW5bMF07XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IGNoaWxkcmVuO1xuICAgICAgICB9XG4gICAgICAgIG51bGwgPT0gZGVmYXVsdFZhbHVlICYmIChkZWZhdWx0VmFsdWUgPSBcIlwiKTtcbiAgICAgICAgdmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICB9XG4gICAgICBkZWZhdWx0VmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHZhbHVlKTtcbiAgICAgIGVsZW1lbnQuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgY2hpbGRyZW4gPSBlbGVtZW50LnRleHRDb250ZW50O1xuICAgICAgY2hpbGRyZW4gPT09IGRlZmF1bHRWYWx1ZSAmJlxuICAgICAgICBcIlwiICE9PSBjaGlsZHJlbiAmJlxuICAgICAgICBudWxsICE9PSBjaGlsZHJlbiAmJlxuICAgICAgICAoZWxlbWVudC52YWx1ZSA9IGNoaWxkcmVuKTtcbiAgICAgIHRyYWNrKGVsZW1lbnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kTm90YWJsZU5vZGUobm9kZSwgaW5kZW50KSB7XG4gICAgICByZXR1cm4gdm9pZCAwID09PSBub2RlLnNlcnZlclByb3BzICYmXG4gICAgICAgIDAgPT09IG5vZGUuc2VydmVyVGFpbC5sZW5ndGggJiZcbiAgICAgICAgMSA9PT0gbm9kZS5jaGlsZHJlbi5sZW5ndGggJiZcbiAgICAgICAgMyA8IG5vZGUuZGlzdGFuY2VGcm9tTGVhZiAmJlxuICAgICAgICBub2RlLmRpc3RhbmNlRnJvbUxlYWYgPiAxNSAtIGluZGVudFxuICAgICAgICA/IGZpbmROb3RhYmxlTm9kZShub2RlLmNoaWxkcmVuWzBdLCBpbmRlbnQpXG4gICAgICAgIDogbm9kZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5kZW50YXRpb24oaW5kZW50KSB7XG4gICAgICByZXR1cm4gXCIgIFwiICsgXCIgIFwiLnJlcGVhdChpbmRlbnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRlZChpbmRlbnQpIHtcbiAgICAgIHJldHVybiBcIisgXCIgKyBcIiAgXCIucmVwZWF0KGluZGVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZWQoaW5kZW50KSB7XG4gICAgICByZXR1cm4gXCItIFwiICsgXCIgIFwiLnJlcGVhdChpbmRlbnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUZpYmVyVHlwZShmaWJlcikge1xuICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBmaWJlci50eXBlO1xuICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgIHJldHVybiBcIkxhenlcIjtcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICByZXR1cm4gXCJBY3Rpdml0eVwiO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VMaXN0XCI7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICByZXR1cm4gKGZpYmVyID0gZmliZXIudHlwZSksIGZpYmVyLmRpc3BsYXlOYW1lIHx8IGZpYmVyLm5hbWUgfHwgbnVsbDtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGZpYmVyID0gZmliZXIudHlwZS5yZW5kZXIpLCBmaWJlci5kaXNwbGF5TmFtZSB8fCBmaWJlci5uYW1lIHx8IG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIChmaWJlciA9IGZpYmVyLnR5cGUpLCBmaWJlci5kaXNwbGF5TmFtZSB8fCBmaWJlci5uYW1lIHx8IG51bGw7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlVGV4dE5vZGUoY29udGVudCwgbWF4TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmVlZHNFc2NhcGluZy50ZXN0KGNvbnRlbnQpXG4gICAgICAgID8gKChjb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoY29udGVudCkpLFxuICAgICAgICAgIGNvbnRlbnQubGVuZ3RoID4gbWF4TGVuZ3RoIC0gMlxuICAgICAgICAgICAgPyA4ID4gbWF4TGVuZ3RoXG4gICAgICAgICAgICAgID8gJ3tcIi4uLlwifSdcbiAgICAgICAgICAgICAgOiBcIntcIiArIGNvbnRlbnQuc2xpY2UoMCwgbWF4TGVuZ3RoIC0gNykgKyAnLi4uXCJ9J1xuICAgICAgICAgICAgOiBcIntcIiArIGNvbnRlbnQgKyBcIn1cIilcbiAgICAgICAgOiBjb250ZW50Lmxlbmd0aCA+IG1heExlbmd0aFxuICAgICAgICAgID8gNSA+IG1heExlbmd0aFxuICAgICAgICAgICAgPyAne1wiLi4uXCJ9J1xuICAgICAgICAgICAgOiBjb250ZW50LnNsaWNlKDAsIG1heExlbmd0aCAtIDMpICsgXCIuLi5cIlxuICAgICAgICAgIDogY29udGVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVUZXh0RGlmZihjbGllbnRUZXh0LCBzZXJ2ZXJQcm9wcywgaW5kZW50KSB7XG4gICAgICB2YXIgbWF4TGVuZ3RoID0gMTIwIC0gMiAqIGluZGVudDtcbiAgICAgIGlmIChudWxsID09PSBzZXJ2ZXJQcm9wcylcbiAgICAgICAgcmV0dXJuIGFkZGVkKGluZGVudCkgKyBkZXNjcmliZVRleHROb2RlKGNsaWVudFRleHQsIG1heExlbmd0aCkgKyBcIlxcblwiO1xuICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBzZXJ2ZXJQcm9wcykge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciBmaXJzdERpZmYgPSAwO1xuICAgICAgICAgIGZpcnN0RGlmZiA8IHNlcnZlclByb3BzLmxlbmd0aCAmJlxuICAgICAgICAgIGZpcnN0RGlmZiA8IGNsaWVudFRleHQubGVuZ3RoICYmXG4gICAgICAgICAgc2VydmVyUHJvcHMuY2hhckNvZGVBdChmaXJzdERpZmYpID09PVxuICAgICAgICAgICAgY2xpZW50VGV4dC5jaGFyQ29kZUF0KGZpcnN0RGlmZik7XG4gICAgICAgICAgZmlyc3REaWZmKytcbiAgICAgICAgKTtcbiAgICAgICAgZmlyc3REaWZmID4gbWF4TGVuZ3RoIC0gOCAmJlxuICAgICAgICAgIDEwIDwgZmlyc3REaWZmICYmXG4gICAgICAgICAgKChjbGllbnRUZXh0ID0gXCIuLi5cIiArIGNsaWVudFRleHQuc2xpY2UoZmlyc3REaWZmIC0gOCkpLFxuICAgICAgICAgIChzZXJ2ZXJQcm9wcyA9IFwiLi4uXCIgKyBzZXJ2ZXJQcm9wcy5zbGljZShmaXJzdERpZmYgLSA4KSkpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGFkZGVkKGluZGVudCkgK1xuICAgICAgICAgIGRlc2NyaWJlVGV4dE5vZGUoY2xpZW50VGV4dCwgbWF4TGVuZ3RoKSArXG4gICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgcmVtb3ZlZChpbmRlbnQpICtcbiAgICAgICAgICBkZXNjcmliZVRleHROb2RlKHNlcnZlclByb3BzLCBtYXhMZW5ndGgpICtcbiAgICAgICAgICBcIlxcblwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpbmRlbnRhdGlvbihpbmRlbnQpICsgZGVzY3JpYmVUZXh0Tm9kZShjbGllbnRUZXh0LCBtYXhMZW5ndGgpICsgXCJcXG5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gb2JqZWN0TmFtZShvYmplY3QpIHtcbiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nXG4gICAgICAgIC5jYWxsKG9iamVjdClcbiAgICAgICAgLnJlcGxhY2UoL15cXFtvYmplY3QgKC4qKVxcXSQvLCBmdW5jdGlvbiAobSwgcDApIHtcbiAgICAgICAgICByZXR1cm4gcDA7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZVZhbHVlKHZhbHVlLCBtYXhMZW5ndGgpIHtcbiAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpKSxcbiAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA+IG1heExlbmd0aFxuICAgICAgICAgICAgICA/IDUgPiBtYXhMZW5ndGhcbiAgICAgICAgICAgICAgICA/ICdcIi4uLlwiJ1xuICAgICAgICAgICAgICAgIDogdmFsdWUuc2xpY2UoMCwgbWF4TGVuZ3RoIC0gNCkgKyAnLi4uXCInXG4gICAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgaWYgKG51bGwgPT09IHZhbHVlKSByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKHZhbHVlKSkgcmV0dXJuIFwiWy4uLl1cIjtcbiAgICAgICAgICBpZiAodmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSlcbiAgICAgICAgICAgIHJldHVybiAobWF4TGVuZ3RoID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHZhbHVlLnR5cGUpKVxuICAgICAgICAgICAgICA/IFwiPFwiICsgbWF4TGVuZ3RoICsgXCI+XCJcbiAgICAgICAgICAgICAgOiBcIjwuLi4+XCI7XG4gICAgICAgICAgdmFyIG5hbWUgPSBvYmplY3ROYW1lKHZhbHVlKTtcbiAgICAgICAgICBpZiAoXCJPYmplY3RcIiA9PT0gbmFtZSkge1xuICAgICAgICAgICAgbmFtZSA9IFwiXCI7XG4gICAgICAgICAgICBtYXhMZW5ndGggLT0gMjtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIHZhbHVlKVxuICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGpzb25Qcm9wTmFtZSA9IEpTT04uc3RyaW5naWZ5KHByb3BOYW1lKTtcbiAgICAgICAgICAgICAgICBqc29uUHJvcE5hbWUgIT09ICdcIicgKyBwcm9wTmFtZSArICdcIicgJiZcbiAgICAgICAgICAgICAgICAgIChwcm9wTmFtZSA9IGpzb25Qcm9wTmFtZSk7XG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoIC09IHByb3BOYW1lLmxlbmd0aCAtIDI7XG4gICAgICAgICAgICAgICAganNvblByb3BOYW1lID0gZGVzY3JpYmVWYWx1ZShcbiAgICAgICAgICAgICAgICAgIHZhbHVlW3Byb3BOYW1lXSxcbiAgICAgICAgICAgICAgICAgIDE1ID4gbWF4TGVuZ3RoID8gbWF4TGVuZ3RoIDogMTVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIG1heExlbmd0aCAtPSBqc29uUHJvcE5hbWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmICgwID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICBuYW1lICs9IFwiXCIgPT09IG5hbWUgPyBcIi4uLlwiIDogXCIsIC4uLlwiO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5hbWUgKz1cbiAgICAgICAgICAgICAgICAgIChcIlwiID09PSBuYW1lID8gXCJcIiA6IFwiLFwiKSArIHByb3BOYW1lICsgXCI6XCIgKyBqc29uUHJvcE5hbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcIntcIiArIG5hbWUgKyBcIn1cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIHJldHVybiAobWF4TGVuZ3RoID0gdmFsdWUuZGlzcGxheU5hbWUgfHwgdmFsdWUubmFtZSlcbiAgICAgICAgICAgID8gXCJmdW5jdGlvbiBcIiArIG1heExlbmd0aFxuICAgICAgICAgICAgOiBcImZ1bmN0aW9uXCI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlUHJvcFZhbHVlKHZhbHVlLCBtYXhMZW5ndGgpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiICE9PSB0eXBlb2YgdmFsdWUgfHwgbmVlZHNFc2NhcGluZy50ZXN0KHZhbHVlKVxuICAgICAgICA/IFwie1wiICsgZGVzY3JpYmVWYWx1ZSh2YWx1ZSwgbWF4TGVuZ3RoIC0gMikgKyBcIn1cIlxuICAgICAgICA6IHZhbHVlLmxlbmd0aCA+IG1heExlbmd0aCAtIDJcbiAgICAgICAgICA/IDUgPiBtYXhMZW5ndGhcbiAgICAgICAgICAgID8gJ1wiLi4uXCInXG4gICAgICAgICAgICA6ICdcIicgKyB2YWx1ZS5zbGljZSgwLCBtYXhMZW5ndGggLSA1KSArICcuLi5cIidcbiAgICAgICAgICA6ICdcIicgKyB2YWx1ZSArICdcIic7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlRXhwYW5kZWRFbGVtZW50KHR5cGUsIHByb3BzLCByb3dQcmVmaXgpIHtcbiAgICAgIHZhciByZW1haW5pbmdSb3dMZW5ndGggPSAxMjAgLSByb3dQcmVmaXgubGVuZ3RoIC0gdHlwZS5sZW5ndGgsXG4gICAgICAgIHByb3BlcnRpZXMgPSBbXSxcbiAgICAgICAgcHJvcE5hbWU7XG4gICAgICBmb3IgKHByb3BOYW1lIGluIHByb3BzKVxuICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpICYmIFwiY2hpbGRyZW5cIiAhPT0gcHJvcE5hbWUpIHtcbiAgICAgICAgICB2YXIgcHJvcFZhbHVlID0gZGVzY3JpYmVQcm9wVmFsdWUoXG4gICAgICAgICAgICBwcm9wc1twcm9wTmFtZV0sXG4gICAgICAgICAgICAxMjAgLSByb3dQcmVmaXgubGVuZ3RoIC0gcHJvcE5hbWUubGVuZ3RoIC0gMVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVtYWluaW5nUm93TGVuZ3RoIC09IHByb3BOYW1lLmxlbmd0aCArIHByb3BWYWx1ZS5sZW5ndGggKyAyO1xuICAgICAgICAgIHByb3BlcnRpZXMucHVzaChwcm9wTmFtZSArIFwiPVwiICsgcHJvcFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgcmV0dXJuIDAgPT09IHByb3BlcnRpZXMubGVuZ3RoXG4gICAgICAgID8gcm93UHJlZml4ICsgXCI8XCIgKyB0eXBlICsgXCI+XFxuXCJcbiAgICAgICAgOiAwIDwgcmVtYWluaW5nUm93TGVuZ3RoXG4gICAgICAgICAgPyByb3dQcmVmaXggKyBcIjxcIiArIHR5cGUgKyBcIiBcIiArIHByb3BlcnRpZXMuam9pbihcIiBcIikgKyBcIj5cXG5cIlxuICAgICAgICAgIDogcm93UHJlZml4ICtcbiAgICAgICAgICAgIFwiPFwiICtcbiAgICAgICAgICAgIHR5cGUgK1xuICAgICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgICByb3dQcmVmaXggK1xuICAgICAgICAgICAgXCIgIFwiICtcbiAgICAgICAgICAgIHByb3BlcnRpZXMuam9pbihcIlxcblwiICsgcm93UHJlZml4ICsgXCIgIFwiKSArXG4gICAgICAgICAgICBcIlxcblwiICtcbiAgICAgICAgICAgIHJvd1ByZWZpeCArXG4gICAgICAgICAgICBcIj5cXG5cIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVQcm9wZXJ0aWVzRGlmZihjbGllbnRPYmplY3QsIHNlcnZlck9iamVjdCwgaW5kZW50KSB7XG4gICAgICB2YXIgcHJvcGVydGllcyA9IFwiXCIsXG4gICAgICAgIHJlbWFpbmluZ1NlcnZlclByb3BlcnRpZXMgPSBhc3NpZ24oe30sIHNlcnZlck9iamVjdCksXG4gICAgICAgIHByb3BOYW1lO1xuICAgICAgZm9yIChwcm9wTmFtZSBpbiBjbGllbnRPYmplY3QpXG4gICAgICAgIGlmIChjbGllbnRPYmplY3QuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgICAgZGVsZXRlIHJlbWFpbmluZ1NlcnZlclByb3BlcnRpZXNbcHJvcE5hbWVdO1xuICAgICAgICAgIHZhciBtYXhMZW5ndGggPSAxMjAgLSAyICogaW5kZW50IC0gcHJvcE5hbWUubGVuZ3RoIC0gMixcbiAgICAgICAgICAgIGNsaWVudFByb3BWYWx1ZSA9IGRlc2NyaWJlVmFsdWUoY2xpZW50T2JqZWN0W3Byb3BOYW1lXSwgbWF4TGVuZ3RoKTtcbiAgICAgICAgICBzZXJ2ZXJPYmplY3QuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpXG4gICAgICAgICAgICA/ICgobWF4TGVuZ3RoID0gZGVzY3JpYmVWYWx1ZShzZXJ2ZXJPYmplY3RbcHJvcE5hbWVdLCBtYXhMZW5ndGgpKSxcbiAgICAgICAgICAgICAgKHByb3BlcnRpZXMgKz1cbiAgICAgICAgICAgICAgICBhZGRlZChpbmRlbnQpICsgcHJvcE5hbWUgKyBcIjogXCIgKyBjbGllbnRQcm9wVmFsdWUgKyBcIlxcblwiKSxcbiAgICAgICAgICAgICAgKHByb3BlcnRpZXMgKz1cbiAgICAgICAgICAgICAgICByZW1vdmVkKGluZGVudCkgKyBwcm9wTmFtZSArIFwiOiBcIiArIG1heExlbmd0aCArIFwiXFxuXCIpKVxuICAgICAgICAgICAgOiAocHJvcGVydGllcyArPVxuICAgICAgICAgICAgICAgIGFkZGVkKGluZGVudCkgKyBwcm9wTmFtZSArIFwiOiBcIiArIGNsaWVudFByb3BWYWx1ZSArIFwiXFxuXCIpO1xuICAgICAgICB9XG4gICAgICBmb3IgKHZhciBfcHJvcE5hbWUgaW4gcmVtYWluaW5nU2VydmVyUHJvcGVydGllcylcbiAgICAgICAgcmVtYWluaW5nU2VydmVyUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShfcHJvcE5hbWUpICYmXG4gICAgICAgICAgKChjbGllbnRPYmplY3QgPSBkZXNjcmliZVZhbHVlKFxuICAgICAgICAgICAgcmVtYWluaW5nU2VydmVyUHJvcGVydGllc1tfcHJvcE5hbWVdLFxuICAgICAgICAgICAgMTIwIC0gMiAqIGluZGVudCAtIF9wcm9wTmFtZS5sZW5ndGggLSAyXG4gICAgICAgICAgKSksXG4gICAgICAgICAgKHByb3BlcnRpZXMgKz1cbiAgICAgICAgICAgIHJlbW92ZWQoaW5kZW50KSArIF9wcm9wTmFtZSArIFwiOiBcIiArIGNsaWVudE9iamVjdCArIFwiXFxuXCIpKTtcbiAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUVsZW1lbnREaWZmKHR5cGUsIGNsaWVudFByb3BzLCBzZXJ2ZXJQcm9wcywgaW5kZW50KSB7XG4gICAgICB2YXIgY29udGVudCA9IFwiXCIsXG4gICAgICAgIHNlcnZlclByb3BOYW1lcyA9IG5ldyBNYXAoKTtcbiAgICAgIGZvciAocHJvcE5hbWUkanNjb21wJDAgaW4gc2VydmVyUHJvcHMpXG4gICAgICAgIHNlcnZlclByb3BzLmhhc093blByb3BlcnR5KHByb3BOYW1lJGpzY29tcCQwKSAmJlxuICAgICAgICAgIHNlcnZlclByb3BOYW1lcy5zZXQoXG4gICAgICAgICAgICBwcm9wTmFtZSRqc2NvbXAkMC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgcHJvcE5hbWUkanNjb21wJDBcbiAgICAgICAgICApO1xuICAgICAgaWYgKDEgPT09IHNlcnZlclByb3BOYW1lcy5zaXplICYmIHNlcnZlclByb3BOYW1lcy5oYXMoXCJjaGlsZHJlblwiKSlcbiAgICAgICAgY29udGVudCArPSBkZXNjcmliZUV4cGFuZGVkRWxlbWVudChcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGNsaWVudFByb3BzLFxuICAgICAgICAgIGluZGVudGF0aW9uKGluZGVudClcbiAgICAgICAgKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBfcHJvcE5hbWUyIGluIGNsaWVudFByb3BzKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNsaWVudFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wTmFtZTIpICYmXG4gICAgICAgICAgICBcImNoaWxkcmVuXCIgIT09IF9wcm9wTmFtZTJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciBtYXhMZW5ndGgkanNjb21wJDAgPVxuICAgICAgICAgICAgICAgIDEyMCAtIDIgKiAoaW5kZW50ICsgMSkgLSBfcHJvcE5hbWUyLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgIHNlcnZlclByb3BOYW1lID0gc2VydmVyUHJvcE5hbWVzLmdldChfcHJvcE5hbWUyLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gc2VydmVyUHJvcE5hbWUpIHtcbiAgICAgICAgICAgICAgc2VydmVyUHJvcE5hbWVzLmRlbGV0ZShfcHJvcE5hbWUyLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICB2YXIgcHJvcE5hbWUkanNjb21wJDAgPSBjbGllbnRQcm9wc1tfcHJvcE5hbWUyXTtcbiAgICAgICAgICAgICAgc2VydmVyUHJvcE5hbWUgPSBzZXJ2ZXJQcm9wc1tzZXJ2ZXJQcm9wTmFtZV07XG4gICAgICAgICAgICAgIHZhciBjbGllbnRQcm9wVmFsdWUgPSBkZXNjcmliZVByb3BWYWx1ZShcbiAgICAgICAgICAgICAgICBwcm9wTmFtZSRqc2NvbXAkMCxcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGgkanNjb21wJDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoJGpzY29tcCQwID0gZGVzY3JpYmVQcm9wVmFsdWUoXG4gICAgICAgICAgICAgICAgc2VydmVyUHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoJGpzY29tcCQwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBwcm9wTmFtZSRqc2NvbXAkMCAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBwcm9wTmFtZSRqc2NvbXAkMCAmJlxuICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygc2VydmVyUHJvcE5hbWUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gc2VydmVyUHJvcE5hbWUgJiZcbiAgICAgICAgICAgICAgXCJPYmplY3RcIiA9PT0gb2JqZWN0TmFtZShwcm9wTmFtZSRqc2NvbXAkMCkgJiZcbiAgICAgICAgICAgICAgXCJPYmplY3RcIiA9PT0gb2JqZWN0TmFtZShzZXJ2ZXJQcm9wTmFtZSkgJiZcbiAgICAgICAgICAgICAgKDIgPCBPYmplY3Qua2V5cyhwcm9wTmFtZSRqc2NvbXAkMCkubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgMiA8IE9iamVjdC5rZXlzKHNlcnZlclByb3BOYW1lKS5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICAtMSA8IGNsaWVudFByb3BWYWx1ZS5pbmRleE9mKFwiLi4uXCIpIHx8XG4gICAgICAgICAgICAgICAgLTEgPCBtYXhMZW5ndGgkanNjb21wJDAuaW5kZXhPZihcIi4uLlwiKSlcbiAgICAgICAgICAgICAgICA/IChjb250ZW50ICs9XG4gICAgICAgICAgICAgICAgICAgIGluZGVudGF0aW9uKGluZGVudCArIDEpICtcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BOYW1lMiArXG4gICAgICAgICAgICAgICAgICAgIFwiPXt7XFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmliZVByb3BlcnRpZXNEaWZmKFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BOYW1lJGpzY29tcCQwLFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclByb3BOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIGluZGVudCArIDJcbiAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgIGluZGVudGF0aW9uKGluZGVudCArIDEpICtcbiAgICAgICAgICAgICAgICAgICAgXCJ9fVxcblwiKVxuICAgICAgICAgICAgICAgIDogKChjb250ZW50ICs9XG4gICAgICAgICAgICAgICAgICAgIGFkZGVkKGluZGVudCArIDEpICtcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BOYW1lMiArXG4gICAgICAgICAgICAgICAgICAgIFwiPVwiICtcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50UHJvcFZhbHVlICtcbiAgICAgICAgICAgICAgICAgICAgXCJcXG5cIiksXG4gICAgICAgICAgICAgICAgICAoY29udGVudCArPVxuICAgICAgICAgICAgICAgICAgICByZW1vdmVkKGluZGVudCArIDEpICtcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BOYW1lMiArXG4gICAgICAgICAgICAgICAgICAgIFwiPVwiICtcbiAgICAgICAgICAgICAgICAgICAgbWF4TGVuZ3RoJGpzY29tcCQwICtcbiAgICAgICAgICAgICAgICAgICAgXCJcXG5cIikpO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgIGNvbnRlbnQgKz1cbiAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbihpbmRlbnQgKyAxKSArXG4gICAgICAgICAgICAgICAgX3Byb3BOYW1lMiArXG4gICAgICAgICAgICAgICAgXCI9XCIgK1xuICAgICAgICAgICAgICAgIGRlc2NyaWJlUHJvcFZhbHVlKGNsaWVudFByb3BzW19wcm9wTmFtZTJdLCBtYXhMZW5ndGgkanNjb21wJDApICtcbiAgICAgICAgICAgICAgICBcIlxcblwiO1xuICAgICAgICAgIH1cbiAgICAgICAgc2VydmVyUHJvcE5hbWVzLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XG4gICAgICAgICAgaWYgKFwiY2hpbGRyZW5cIiAhPT0gcHJvcE5hbWUpIHtcbiAgICAgICAgICAgIHZhciBtYXhMZW5ndGggPSAxMjAgLSAyICogKGluZGVudCArIDEpIC0gcHJvcE5hbWUubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGNvbnRlbnQgKz1cbiAgICAgICAgICAgICAgcmVtb3ZlZChpbmRlbnQgKyAxKSArXG4gICAgICAgICAgICAgIHByb3BOYW1lICtcbiAgICAgICAgICAgICAgXCI9XCIgK1xuICAgICAgICAgICAgICBkZXNjcmliZVByb3BWYWx1ZShzZXJ2ZXJQcm9wc1twcm9wTmFtZV0sIG1heExlbmd0aCkgK1xuICAgICAgICAgICAgICBcIlxcblwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRlbnQgPVxuICAgICAgICAgIFwiXCIgPT09IGNvbnRlbnRcbiAgICAgICAgICAgID8gaW5kZW50YXRpb24oaW5kZW50KSArIFwiPFwiICsgdHlwZSArIFwiPlxcblwiXG4gICAgICAgICAgICA6IGluZGVudGF0aW9uKGluZGVudCkgK1xuICAgICAgICAgICAgICBcIjxcIiArXG4gICAgICAgICAgICAgIHR5cGUgK1xuICAgICAgICAgICAgICBcIlxcblwiICtcbiAgICAgICAgICAgICAgY29udGVudCArXG4gICAgICAgICAgICAgIGluZGVudGF0aW9uKGluZGVudCkgK1xuICAgICAgICAgICAgICBcIj5cXG5cIjtcbiAgICAgIH1cbiAgICAgIHR5cGUgPSBzZXJ2ZXJQcm9wcy5jaGlsZHJlbjtcbiAgICAgIGNsaWVudFByb3BzID0gY2xpZW50UHJvcHMuY2hpbGRyZW47XG4gICAgICBpZiAoXG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlIHx8XG4gICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiB0eXBlIHx8XG4gICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiB0eXBlXG4gICAgICApIHtcbiAgICAgICAgc2VydmVyUHJvcE5hbWVzID0gXCJcIjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBjbGllbnRQcm9wcyB8fFxuICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBjbGllbnRQcm9wcyB8fFxuICAgICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiBjbGllbnRQcm9wc1xuICAgICAgICApXG4gICAgICAgICAgc2VydmVyUHJvcE5hbWVzID0gXCJcIiArIGNsaWVudFByb3BzO1xuICAgICAgICBjb250ZW50ICs9IGRlc2NyaWJlVGV4dERpZmYoc2VydmVyUHJvcE5hbWVzLCBcIlwiICsgdHlwZSwgaW5kZW50ICsgMSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgY2xpZW50UHJvcHMgfHxcbiAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIGNsaWVudFByb3BzIHx8XG4gICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiBjbGllbnRQcm9wc1xuICAgICAgKVxuICAgICAgICBjb250ZW50ID1cbiAgICAgICAgICBudWxsID09IHR5cGVcbiAgICAgICAgICAgID8gY29udGVudCArIGRlc2NyaWJlVGV4dERpZmYoXCJcIiArIGNsaWVudFByb3BzLCBudWxsLCBpbmRlbnQgKyAxKVxuICAgICAgICAgICAgOiBjb250ZW50ICsgZGVzY3JpYmVUZXh0RGlmZihcIlwiICsgY2xpZW50UHJvcHMsIHZvaWQgMCwgaW5kZW50ICsgMSk7XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVTaWJsaW5nRmliZXIoZmliZXIsIGluZGVudCkge1xuICAgICAgdmFyIHR5cGUgPSBkZXNjcmliZUZpYmVyVHlwZShmaWJlcik7XG4gICAgICBpZiAobnVsbCA9PT0gdHlwZSkge1xuICAgICAgICB0eXBlID0gXCJcIjtcbiAgICAgICAgZm9yIChmaWJlciA9IGZpYmVyLmNoaWxkOyBmaWJlcjsgKVxuICAgICAgICAgICh0eXBlICs9IGRlc2NyaWJlU2libGluZ0ZpYmVyKGZpYmVyLCBpbmRlbnQpKSxcbiAgICAgICAgICAgIChmaWJlciA9IGZpYmVyLnNpYmxpbmcpO1xuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbmRlbnRhdGlvbihpbmRlbnQpICsgXCI8XCIgKyB0eXBlICsgXCI+XFxuXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlTm9kZShub2RlLCBpbmRlbnQpIHtcbiAgICAgIHZhciBza2lwVG9Ob2RlID0gZmluZE5vdGFibGVOb2RlKG5vZGUsIGluZGVudCk7XG4gICAgICBpZiAoXG4gICAgICAgIHNraXBUb05vZGUgIT09IG5vZGUgJiZcbiAgICAgICAgKDEgIT09IG5vZGUuY2hpbGRyZW4ubGVuZ3RoIHx8IG5vZGUuY2hpbGRyZW5bMF0gIT09IHNraXBUb05vZGUpXG4gICAgICApXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgaW5kZW50YXRpb24oaW5kZW50KSArIFwiLi4uXFxuXCIgKyBkZXNjcmliZU5vZGUoc2tpcFRvTm9kZSwgaW5kZW50ICsgMSlcbiAgICAgICAgKTtcbiAgICAgIHNraXBUb05vZGUgPSBcIlwiO1xuICAgICAgdmFyIGRlYnVnSW5mbyA9IG5vZGUuZmliZXIuX2RlYnVnSW5mbztcbiAgICAgIGlmIChkZWJ1Z0luZm8pXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVidWdJbmZvLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHNlcnZlckNvbXBvbmVudE5hbWUgPSBkZWJ1Z0luZm9baV0ubmFtZTtcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygc2VydmVyQ29tcG9uZW50TmFtZSAmJlxuICAgICAgICAgICAgKChza2lwVG9Ob2RlICs9XG4gICAgICAgICAgICAgIGluZGVudGF0aW9uKGluZGVudCkgKyBcIjxcIiArIHNlcnZlckNvbXBvbmVudE5hbWUgKyBcIj5cXG5cIiksXG4gICAgICAgICAgICBpbmRlbnQrKyk7XG4gICAgICAgIH1cbiAgICAgIGRlYnVnSW5mbyA9IFwiXCI7XG4gICAgICBpID0gbm9kZS5maWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICBpZiAoNiA9PT0gbm9kZS5maWJlci50YWcpXG4gICAgICAgIChkZWJ1Z0luZm8gPSBkZXNjcmliZVRleHREaWZmKGksIG5vZGUuc2VydmVyUHJvcHMsIGluZGVudCkpLCBpbmRlbnQrKztcbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICAoKHNlcnZlckNvbXBvbmVudE5hbWUgPSBkZXNjcmliZUZpYmVyVHlwZShub2RlLmZpYmVyKSksXG4gICAgICAgIG51bGwgIT09IHNlcnZlckNvbXBvbmVudE5hbWUpXG4gICAgICApXG4gICAgICAgIGlmICh2b2lkIDAgPT09IG5vZGUuc2VydmVyUHJvcHMpIHtcbiAgICAgICAgICBkZWJ1Z0luZm8gPSBpbmRlbnQ7XG4gICAgICAgICAgdmFyIG1heExlbmd0aCA9IDEyMCAtIDIgKiBkZWJ1Z0luZm8gLSBzZXJ2ZXJDb21wb25lbnROYW1lLmxlbmd0aCAtIDIsXG4gICAgICAgICAgICBjb250ZW50ID0gXCJcIjtcbiAgICAgICAgICBmb3IgKHByb3BOYW1lIGluIGkpXG4gICAgICAgICAgICBpZiAoaS5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkgJiYgXCJjaGlsZHJlblwiICE9PSBwcm9wTmFtZSkge1xuICAgICAgICAgICAgICB2YXIgcHJvcFZhbHVlID0gZGVzY3JpYmVQcm9wVmFsdWUoaVtwcm9wTmFtZV0sIDE1KTtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoIC09IHByb3BOYW1lLmxlbmd0aCArIHByb3BWYWx1ZS5sZW5ndGggKyAyO1xuICAgICAgICAgICAgICBpZiAoMCA+IG1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgKz0gXCIgLi4uXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29udGVudCArPSBcIiBcIiArIHByb3BOYW1lICsgXCI9XCIgKyBwcm9wVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZGVidWdJbmZvID1cbiAgICAgICAgICAgIGluZGVudGF0aW9uKGRlYnVnSW5mbykgK1xuICAgICAgICAgICAgXCI8XCIgK1xuICAgICAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZSArXG4gICAgICAgICAgICBjb250ZW50ICtcbiAgICAgICAgICAgIFwiPlxcblwiO1xuICAgICAgICAgIGluZGVudCsrO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBudWxsID09PSBub2RlLnNlcnZlclByb3BzXG4gICAgICAgICAgICA/ICgoZGVidWdJbmZvID0gZGVzY3JpYmVFeHBhbmRlZEVsZW1lbnQoXG4gICAgICAgICAgICAgICAgc2VydmVyQ29tcG9uZW50TmFtZSxcbiAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgIGFkZGVkKGluZGVudClcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIGluZGVudCsrKVxuICAgICAgICAgICAgOiBcInN0cmluZ1wiID09PSB0eXBlb2Ygbm9kZS5zZXJ2ZXJQcm9wc1xuICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIlNob3VsZCBub3QgaGF2ZSBtYXRjaGVkIGEgbm9uIEhvc3RUZXh0IGZpYmVyIHRvIGEgVGV4dCBub2RlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6ICgoZGVidWdJbmZvID0gZGVzY3JpYmVFbGVtZW50RGlmZihcbiAgICAgICAgICAgICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWUsXG4gICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgbm9kZS5zZXJ2ZXJQcm9wcyxcbiAgICAgICAgICAgICAgICAgIGluZGVudFxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIGluZGVudCsrKTtcbiAgICAgIHZhciBwcm9wTmFtZSA9IFwiXCI7XG4gICAgICBpID0gbm9kZS5maWJlci5jaGlsZDtcbiAgICAgIGZvciAoXG4gICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWUgPSAwO1xuICAgICAgICBpICYmIHNlcnZlckNvbXBvbmVudE5hbWUgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDtcblxuICAgICAgKVxuICAgICAgICAobWF4TGVuZ3RoID0gbm9kZS5jaGlsZHJlbltzZXJ2ZXJDb21wb25lbnROYW1lXSksXG4gICAgICAgICAgbWF4TGVuZ3RoLmZpYmVyID09PSBpXG4gICAgICAgICAgICA/ICgocHJvcE5hbWUgKz0gZGVzY3JpYmVOb2RlKG1heExlbmd0aCwgaW5kZW50KSksXG4gICAgICAgICAgICAgIHNlcnZlckNvbXBvbmVudE5hbWUrKylcbiAgICAgICAgICAgIDogKHByb3BOYW1lICs9IGRlc2NyaWJlU2libGluZ0ZpYmVyKGksIGluZGVudCkpLFxuICAgICAgICAgIChpID0gaS5zaWJsaW5nKTtcbiAgICAgIGkgJiZcbiAgICAgICAgMCA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoICYmXG4gICAgICAgIChwcm9wTmFtZSArPSBpbmRlbnRhdGlvbihpbmRlbnQpICsgXCIuLi5cXG5cIik7XG4gICAgICBpID0gbm9kZS5zZXJ2ZXJUYWlsO1xuICAgICAgbnVsbCA9PT0gbm9kZS5zZXJ2ZXJQcm9wcyAmJiBpbmRlbnQtLTtcbiAgICAgIGZvciAobm9kZSA9IDA7IG5vZGUgPCBpLmxlbmd0aDsgbm9kZSsrKVxuICAgICAgICAoc2VydmVyQ29tcG9uZW50TmFtZSA9IGlbbm9kZV0pLFxuICAgICAgICAgIChwcm9wTmFtZSA9XG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygc2VydmVyQ29tcG9uZW50TmFtZVxuICAgICAgICAgICAgICA/IHByb3BOYW1lICtcbiAgICAgICAgICAgICAgICAocmVtb3ZlZChpbmRlbnQpICtcbiAgICAgICAgICAgICAgICAgIGRlc2NyaWJlVGV4dE5vZGUoc2VydmVyQ29tcG9uZW50TmFtZSwgMTIwIC0gMiAqIGluZGVudCkgK1xuICAgICAgICAgICAgICAgICAgXCJcXG5cIilcbiAgICAgICAgICAgICAgOiBwcm9wTmFtZSArXG4gICAgICAgICAgICAgICAgZGVzY3JpYmVFeHBhbmRlZEVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lLnR5cGUsXG4gICAgICAgICAgICAgICAgICBzZXJ2ZXJDb21wb25lbnROYW1lLnByb3BzLFxuICAgICAgICAgICAgICAgICAgcmVtb3ZlZChpbmRlbnQpXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICByZXR1cm4gc2tpcFRvTm9kZSArIGRlYnVnSW5mbyArIHByb3BOYW1lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZURpZmYocm9vdE5vZGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBcIlxcblxcblwiICsgZGVzY3JpYmVOb2RlKHJvb3ROb2RlLCAwKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlQW5jZXN0b3JzKGFuY2VzdG9yLCBjaGlsZCwgcHJvcHMpIHtcbiAgICAgIGZvciAodmFyIGZpYmVyID0gY2hpbGQsIG5vZGUgPSBudWxsLCBkaXN0YW5jZUZyb21MZWFmID0gMDsgZmliZXI7IClcbiAgICAgICAgZmliZXIgPT09IGFuY2VzdG9yICYmIChkaXN0YW5jZUZyb21MZWFmID0gMCksXG4gICAgICAgICAgKG5vZGUgPSB7XG4gICAgICAgICAgICBmaWJlcjogZmliZXIsXG4gICAgICAgICAgICBjaGlsZHJlbjogbnVsbCAhPT0gbm9kZSA/IFtub2RlXSA6IFtdLFxuICAgICAgICAgICAgc2VydmVyUHJvcHM6XG4gICAgICAgICAgICAgIGZpYmVyID09PSBjaGlsZCA/IHByb3BzIDogZmliZXIgPT09IGFuY2VzdG9yID8gbnVsbCA6IHZvaWQgMCxcbiAgICAgICAgICAgIHNlcnZlclRhaWw6IFtdLFxuICAgICAgICAgICAgZGlzdGFuY2VGcm9tTGVhZjogZGlzdGFuY2VGcm9tTGVhZlxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGRpc3RhbmNlRnJvbUxlYWYrKyxcbiAgICAgICAgICAoZmliZXIgPSBmaWJlci5yZXR1cm4pO1xuICAgICAgcmV0dXJuIG51bGwgIT09IG5vZGUgPyBkZXNjcmliZURpZmYobm9kZSkucmVwbGFjZUFsbCgvXlsrLV0vZ20sIFwiPlwiKSA6IFwiXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZWRBbmNlc3RvckluZm9EZXYob2xkSW5mbywgdGFnKSB7XG4gICAgICB2YXIgYW5jZXN0b3JJbmZvID0gYXNzaWduKHt9LCBvbGRJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvRGV2KSxcbiAgICAgICAgaW5mbyA9IHsgdGFnOiB0YWcgfTtcbiAgICAgIC0xICE9PSBpblNjb3BlVGFncy5pbmRleE9mKHRhZykgJiZcbiAgICAgICAgKChhbmNlc3RvckluZm8uYVRhZ0luU2NvcGUgPSBudWxsKSxcbiAgICAgICAgKGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gbnVsbCksXG4gICAgICAgIChhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGUgPSBudWxsKSk7XG4gICAgICAtMSAhPT0gYnV0dG9uU2NvcGVUYWdzLmluZGV4T2YodGFnKSAmJlxuICAgICAgICAoYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gbnVsbCk7XG4gICAgICAtMSAhPT0gc3BlY2lhbFRhZ3MuaW5kZXhPZih0YWcpICYmXG4gICAgICAgIFwiYWRkcmVzc1wiICE9PSB0YWcgJiZcbiAgICAgICAgXCJkaXZcIiAhPT0gdGFnICYmXG4gICAgICAgIFwicFwiICE9PSB0YWcgJiZcbiAgICAgICAgKChhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGwpLFxuICAgICAgICAoYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nID0gbnVsbCkpO1xuICAgICAgYW5jZXN0b3JJbmZvLmN1cnJlbnQgPSBpbmZvO1xuICAgICAgXCJmb3JtXCIgPT09IHRhZyAmJiAoYW5jZXN0b3JJbmZvLmZvcm1UYWcgPSBpbmZvKTtcbiAgICAgIFwiYVwiID09PSB0YWcgJiYgKGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZSA9IGluZm8pO1xuICAgICAgXCJidXR0b25cIiA9PT0gdGFnICYmIChhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IGluZm8pO1xuICAgICAgXCJub2JyXCIgPT09IHRhZyAmJiAoYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlID0gaW5mbyk7XG4gICAgICBcInBcIiA9PT0gdGFnICYmIChhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGUgPSBpbmZvKTtcbiAgICAgIFwibGlcIiA9PT0gdGFnICYmIChhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm8pO1xuICAgICAgaWYgKFwiZGRcIiA9PT0gdGFnIHx8IFwiZHRcIiA9PT0gdGFnKVxuICAgICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBpbmZvO1xuICAgICAgXCIjZG9jdW1lbnRcIiA9PT0gdGFnIHx8IFwiaHRtbFwiID09PSB0YWdcbiAgICAgICAgPyAoYW5jZXN0b3JJbmZvLmNvbnRhaW5lclRhZ0luU2NvcGUgPSBudWxsKVxuICAgICAgICA6IGFuY2VzdG9ySW5mby5jb250YWluZXJUYWdJblNjb3BlIHx8XG4gICAgICAgICAgKGFuY2VzdG9ySW5mby5jb250YWluZXJUYWdJblNjb3BlID0gaW5mbyk7XG4gICAgICBudWxsICE9PSBvbGRJbmZvIHx8XG4gICAgICAoXCIjZG9jdW1lbnRcIiAhPT0gdGFnICYmIFwiaHRtbFwiICE9PSB0YWcgJiYgXCJib2R5XCIgIT09IHRhZylcbiAgICAgICAgPyAhMCA9PT0gYW5jZXN0b3JJbmZvLmltcGxpY2l0Um9vdFNjb3BlICYmXG4gICAgICAgICAgKGFuY2VzdG9ySW5mby5pbXBsaWNpdFJvb3RTY29wZSA9ICExKVxuICAgICAgICA6IChhbmNlc3RvckluZm8uaW1wbGljaXRSb290U2NvcGUgPSAhMCk7XG4gICAgICByZXR1cm4gYW5jZXN0b3JJbmZvO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1RhZ1ZhbGlkV2l0aFBhcmVudCh0YWcsIHBhcmVudFRhZywgaW1wbGljaXRSb290U2NvcGUpIHtcbiAgICAgIHN3aXRjaCAocGFyZW50VGFnKSB7XG4gICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgXCJoclwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwib3B0aW9uXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJvcHRncm91cFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwic2NyaXB0XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJ0ZW1wbGF0ZVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwiI3RleHRcIiA9PT0gdGFnXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcIm9wdGdyb3VwXCI6XG4gICAgICAgICAgcmV0dXJuIFwib3B0aW9uXCIgPT09IHRhZyB8fCBcIiN0ZXh0XCIgPT09IHRhZztcbiAgICAgICAgY2FzZSBcIm9wdGlvblwiOlxuICAgICAgICAgIHJldHVybiBcIiN0ZXh0XCIgPT09IHRhZztcbiAgICAgICAgY2FzZSBcInRyXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIFwidGhcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInRkXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJzdHlsZVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwic2NyaXB0XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJ0ZW1wbGF0ZVwiID09PSB0YWdcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwidGJvZHlcIjpcbiAgICAgICAgY2FzZSBcInRoZWFkXCI6XG4gICAgICAgIGNhc2UgXCJ0Zm9vdFwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBcInRyXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJzdHlsZVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwic2NyaXB0XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJ0ZW1wbGF0ZVwiID09PSB0YWdcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIFwiY29sZ3JvdXBcIjpcbiAgICAgICAgICByZXR1cm4gXCJjb2xcIiA9PT0gdGFnIHx8IFwidGVtcGxhdGVcIiA9PT0gdGFnO1xuICAgICAgICBjYXNlIFwidGFibGVcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgXCJjYXB0aW9uXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJjb2xncm91cFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwidGJvZHlcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInRmb290XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJ0aGVhZFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwic3R5bGVcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInNjcmlwdFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwidGVtcGxhdGVcIiA9PT0gdGFnXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcImhlYWRcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgXCJiYXNlXCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJiYXNlZm9udFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwiYmdzb3VuZFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwibGlua1wiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwibWV0YVwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwidGl0bGVcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcIm5vc2NyaXB0XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgXCJub2ZyYW1lc1wiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwic3R5bGVcIiA9PT0gdGFnIHx8XG4gICAgICAgICAgICBcInNjcmlwdFwiID09PSB0YWcgfHxcbiAgICAgICAgICAgIFwidGVtcGxhdGVcIiA9PT0gdGFnXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcImh0bWxcIjpcbiAgICAgICAgICBpZiAoaW1wbGljaXRSb290U2NvcGUpIGJyZWFrO1xuICAgICAgICAgIHJldHVybiBcImhlYWRcIiA9PT0gdGFnIHx8IFwiYm9keVwiID09PSB0YWcgfHwgXCJmcmFtZXNldFwiID09PSB0YWc7XG4gICAgICAgIGNhc2UgXCJmcmFtZXNldFwiOlxuICAgICAgICAgIHJldHVybiBcImZyYW1lXCIgPT09IHRhZztcbiAgICAgICAgY2FzZSBcIiNkb2N1bWVudFwiOlxuICAgICAgICAgIGlmICghaW1wbGljaXRSb290U2NvcGUpIHJldHVybiBcImh0bWxcIiA9PT0gdGFnO1xuICAgICAgfVxuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSBcImgxXCI6XG4gICAgICAgIGNhc2UgXCJoMlwiOlxuICAgICAgICBjYXNlIFwiaDNcIjpcbiAgICAgICAgY2FzZSBcImg0XCI6XG4gICAgICAgIGNhc2UgXCJoNVwiOlxuICAgICAgICBjYXNlIFwiaDZcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgXCJoMVwiICE9PSBwYXJlbnRUYWcgJiZcbiAgICAgICAgICAgIFwiaDJcIiAhPT0gcGFyZW50VGFnICYmXG4gICAgICAgICAgICBcImgzXCIgIT09IHBhcmVudFRhZyAmJlxuICAgICAgICAgICAgXCJoNFwiICE9PSBwYXJlbnRUYWcgJiZcbiAgICAgICAgICAgIFwiaDVcIiAhPT0gcGFyZW50VGFnICYmXG4gICAgICAgICAgICBcImg2XCIgIT09IHBhcmVudFRhZ1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJycFwiOlxuICAgICAgICBjYXNlIFwicnRcIjpcbiAgICAgICAgICByZXR1cm4gLTEgPT09IGltcGxpZWRFbmRUYWdzLmluZGV4T2YocGFyZW50VGFnKTtcbiAgICAgICAgY2FzZSBcImNhcHRpb25cIjpcbiAgICAgICAgY2FzZSBcImNvbFwiOlxuICAgICAgICBjYXNlIFwiY29sZ3JvdXBcIjpcbiAgICAgICAgY2FzZSBcImZyYW1lc2V0XCI6XG4gICAgICAgIGNhc2UgXCJmcmFtZVwiOlxuICAgICAgICBjYXNlIFwidGJvZHlcIjpcbiAgICAgICAgY2FzZSBcInRkXCI6XG4gICAgICAgIGNhc2UgXCJ0Zm9vdFwiOlxuICAgICAgICBjYXNlIFwidGhcIjpcbiAgICAgICAgY2FzZSBcInRoZWFkXCI6XG4gICAgICAgIGNhc2UgXCJ0clwiOlxuICAgICAgICAgIHJldHVybiBudWxsID09IHBhcmVudFRhZztcbiAgICAgICAgY2FzZSBcImhlYWRcIjpcbiAgICAgICAgICByZXR1cm4gaW1wbGljaXRSb290U2NvcGUgfHwgbnVsbCA9PT0gcGFyZW50VGFnO1xuICAgICAgICBjYXNlIFwiaHRtbFwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoaW1wbGljaXRSb290U2NvcGUgJiYgXCIjZG9jdW1lbnRcIiA9PT0gcGFyZW50VGFnKSB8fFxuICAgICAgICAgICAgbnVsbCA9PT0gcGFyZW50VGFnXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcImJvZHlcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGltcGxpY2l0Um9vdFNjb3BlICYmXG4gICAgICAgICAgICAgIChcIiNkb2N1bWVudFwiID09PSBwYXJlbnRUYWcgfHwgXCJodG1sXCIgPT09IHBhcmVudFRhZykpIHx8XG4gICAgICAgICAgICBudWxsID09PSBwYXJlbnRUYWdcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kSW52YWxpZEFuY2VzdG9yRm9yVGFnKHRhZywgYW5jZXN0b3JJbmZvKSB7XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIFwiYWRkcmVzc1wiOlxuICAgICAgICBjYXNlIFwiYXJ0aWNsZVwiOlxuICAgICAgICBjYXNlIFwiYXNpZGVcIjpcbiAgICAgICAgY2FzZSBcImJsb2NrcXVvdGVcIjpcbiAgICAgICAgY2FzZSBcImNlbnRlclwiOlxuICAgICAgICBjYXNlIFwiZGV0YWlsc1wiOlxuICAgICAgICBjYXNlIFwiZGlhbG9nXCI6XG4gICAgICAgIGNhc2UgXCJkaXJcIjpcbiAgICAgICAgY2FzZSBcImRpdlwiOlxuICAgICAgICBjYXNlIFwiZGxcIjpcbiAgICAgICAgY2FzZSBcImZpZWxkc2V0XCI6XG4gICAgICAgIGNhc2UgXCJmaWdjYXB0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJmaWd1cmVcIjpcbiAgICAgICAgY2FzZSBcImZvb3RlclwiOlxuICAgICAgICBjYXNlIFwiaGVhZGVyXCI6XG4gICAgICAgIGNhc2UgXCJoZ3JvdXBcIjpcbiAgICAgICAgY2FzZSBcIm1haW5cIjpcbiAgICAgICAgY2FzZSBcIm1lbnVcIjpcbiAgICAgICAgY2FzZSBcIm5hdlwiOlxuICAgICAgICBjYXNlIFwib2xcIjpcbiAgICAgICAgY2FzZSBcInBcIjpcbiAgICAgICAgY2FzZSBcInNlY3Rpb25cIjpcbiAgICAgICAgY2FzZSBcInN1bW1hcnlcIjpcbiAgICAgICAgY2FzZSBcInVsXCI6XG4gICAgICAgIGNhc2UgXCJwcmVcIjpcbiAgICAgICAgY2FzZSBcImxpc3RpbmdcIjpcbiAgICAgICAgY2FzZSBcInRhYmxlXCI6XG4gICAgICAgIGNhc2UgXCJoclwiOlxuICAgICAgICBjYXNlIFwieG1wXCI6XG4gICAgICAgIGNhc2UgXCJoMVwiOlxuICAgICAgICBjYXNlIFwiaDJcIjpcbiAgICAgICAgY2FzZSBcImgzXCI6XG4gICAgICAgIGNhc2UgXCJoNFwiOlxuICAgICAgICBjYXNlIFwiaDVcIjpcbiAgICAgICAgY2FzZSBcImg2XCI6XG4gICAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZTtcbiAgICAgICAgY2FzZSBcImZvcm1cIjpcbiAgICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmZvcm1UYWcgfHwgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlO1xuICAgICAgICBjYXNlIFwibGlcIjpcbiAgICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc7XG4gICAgICAgIGNhc2UgXCJkZFwiOlxuICAgICAgICBjYXNlIFwiZHRcIjpcbiAgICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nO1xuICAgICAgICBjYXNlIFwiYnV0dG9uXCI6XG4gICAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlO1xuICAgICAgICBjYXNlIFwiYVwiOlxuICAgICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGU7XG4gICAgICAgIGNhc2UgXCJub2JyXCI6XG4gICAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kQW5jZXN0b3IocGFyZW50LCB0YWdOYW1lKSB7XG4gICAgICBmb3IgKDsgcGFyZW50OyApIHtcbiAgICAgICAgc3dpdGNoIChwYXJlbnQudGFnKSB7XG4gICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gdGFnTmFtZSkgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlRE9NTmVzdGluZyhjaGlsZFRhZywgYW5jZXN0b3JJbmZvKSB7XG4gICAgICBhbmNlc3RvckluZm8gPSBhbmNlc3RvckluZm8gfHwgZW1wdHlBbmNlc3RvckluZm9EZXY7XG4gICAgICB2YXIgcGFyZW50SW5mbyA9IGFuY2VzdG9ySW5mby5jdXJyZW50O1xuICAgICAgYW5jZXN0b3JJbmZvID0gKHBhcmVudEluZm8gPSBpc1RhZ1ZhbGlkV2l0aFBhcmVudChcbiAgICAgICAgY2hpbGRUYWcsXG4gICAgICAgIHBhcmVudEluZm8gJiYgcGFyZW50SW5mby50YWcsXG4gICAgICAgIGFuY2VzdG9ySW5mby5pbXBsaWNpdFJvb3RTY29wZVxuICAgICAgKVxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiBwYXJlbnRJbmZvKVxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiBmaW5kSW52YWxpZEFuY2VzdG9yRm9yVGFnKGNoaWxkVGFnLCBhbmNlc3RvckluZm8pO1xuICAgICAgYW5jZXN0b3JJbmZvID0gcGFyZW50SW5mbyB8fCBhbmNlc3RvckluZm87XG4gICAgICBpZiAoIWFuY2VzdG9ySW5mbykgcmV0dXJuICEwO1xuICAgICAgdmFyIGFuY2VzdG9yVGFnID0gYW5jZXN0b3JJbmZvLnRhZztcbiAgICAgIGFuY2VzdG9ySW5mbyA9IFN0cmluZyghIXBhcmVudEluZm8pICsgXCJ8XCIgKyBjaGlsZFRhZyArIFwifFwiICsgYW5jZXN0b3JUYWc7XG4gICAgICBpZiAoZGlkV2FyblthbmNlc3RvckluZm9dKSByZXR1cm4gITE7XG4gICAgICBkaWRXYXJuW2FuY2VzdG9ySW5mb10gPSAhMDtcbiAgICAgIHZhciBhbmNlc3RvciA9IChhbmNlc3RvckluZm8gPSBjdXJyZW50KVxuICAgICAgICAgID8gZmluZEFuY2VzdG9yKGFuY2VzdG9ySW5mby5yZXR1cm4sIGFuY2VzdG9yVGFnKVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgYW5jZXN0b3JEZXNjcmlwdGlvbiA9XG4gICAgICAgICAgbnVsbCAhPT0gYW5jZXN0b3JJbmZvICYmIG51bGwgIT09IGFuY2VzdG9yXG4gICAgICAgICAgICA/IGRlc2NyaWJlQW5jZXN0b3JzKGFuY2VzdG9yLCBhbmNlc3RvckluZm8sIG51bGwpXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gXCI8XCIgKyBjaGlsZFRhZyArIFwiPlwiO1xuICAgICAgcGFyZW50SW5mb1xuICAgICAgICA/ICgocGFyZW50SW5mbyA9IFwiXCIpLFxuICAgICAgICAgIFwidGFibGVcIiA9PT0gYW5jZXN0b3JUYWcgJiZcbiAgICAgICAgICAgIFwidHJcIiA9PT0gY2hpbGRUYWcgJiZcbiAgICAgICAgICAgIChwYXJlbnRJbmZvICs9XG4gICAgICAgICAgICAgIFwiIEFkZCBhIDx0Ym9keT4sIDx0aGVhZD4gb3IgPHRmb290PiB0byB5b3VyIGNvZGUgdG8gbWF0Y2ggdGhlIERPTSB0cmVlIGdlbmVyYXRlZCBieSB0aGUgYnJvd3Nlci5cIiksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiSW4gSFRNTCwgJXMgY2Fubm90IGJlIGEgY2hpbGQgb2YgPCVzPi4lc1xcblRoaXMgd2lsbCBjYXVzZSBhIGh5ZHJhdGlvbiBlcnJvci4lc1wiLFxuICAgICAgICAgICAgdGFnRGlzcGxheU5hbWUsXG4gICAgICAgICAgICBhbmNlc3RvclRhZyxcbiAgICAgICAgICAgIHBhcmVudEluZm8sXG4gICAgICAgICAgICBhbmNlc3RvckRlc2NyaXB0aW9uXG4gICAgICAgICAgKSlcbiAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbiBIVE1MLCAlcyBjYW5ub3QgYmUgYSBkZXNjZW5kYW50IG9mIDwlcz4uXFxuVGhpcyB3aWxsIGNhdXNlIGEgaHlkcmF0aW9uIGVycm9yLiVzXCIsXG4gICAgICAgICAgICB0YWdEaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIGFuY2VzdG9yVGFnLFxuICAgICAgICAgICAgYW5jZXN0b3JEZXNjcmlwdGlvblxuICAgICAgICAgICk7XG4gICAgICBhbmNlc3RvckluZm8gJiZcbiAgICAgICAgKChjaGlsZFRhZyA9IGFuY2VzdG9ySW5mby5yZXR1cm4pLFxuICAgICAgICBudWxsID09PSBhbmNlc3RvciB8fFxuICAgICAgICAgIG51bGwgPT09IGNoaWxkVGFnIHx8XG4gICAgICAgICAgKGFuY2VzdG9yID09PSBjaGlsZFRhZyAmJlxuICAgICAgICAgICAgY2hpbGRUYWcuX2RlYnVnT3duZXIgPT09IGFuY2VzdG9ySW5mby5fZGVidWdPd25lcikgfHxcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihhbmNlc3RvciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCI8JXM+IGNhbm5vdCBjb250YWluIGEgbmVzdGVkICVzLlxcblNlZSB0aGlzIGxvZyBmb3IgdGhlIGFuY2VzdG9yIHN0YWNrIHRyYWNlLlwiLFxuICAgICAgICAgICAgICBhbmNlc3RvclRhZyxcbiAgICAgICAgICAgICAgdGFnRGlzcGxheU5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSkpO1xuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVRleHROZXN0aW5nKGNoaWxkVGV4dCwgcGFyZW50VGFnLCBpbXBsaWNpdFJvb3RTY29wZSkge1xuICAgICAgaWYgKGltcGxpY2l0Um9vdFNjb3BlIHx8IGlzVGFnVmFsaWRXaXRoUGFyZW50KFwiI3RleHRcIiwgcGFyZW50VGFnLCAhMSkpXG4gICAgICAgIHJldHVybiAhMDtcbiAgICAgIGltcGxpY2l0Um9vdFNjb3BlID0gXCIjdGV4dHxcIiArIHBhcmVudFRhZztcbiAgICAgIGlmIChkaWRXYXJuW2ltcGxpY2l0Um9vdFNjb3BlXSkgcmV0dXJuICExO1xuICAgICAgZGlkV2FybltpbXBsaWNpdFJvb3RTY29wZV0gPSAhMDtcbiAgICAgIHZhciBhbmNlc3RvciA9IChpbXBsaWNpdFJvb3RTY29wZSA9IGN1cnJlbnQpXG4gICAgICAgID8gZmluZEFuY2VzdG9yKGltcGxpY2l0Um9vdFNjb3BlLCBwYXJlbnRUYWcpXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGltcGxpY2l0Um9vdFNjb3BlID1cbiAgICAgICAgbnVsbCAhPT0gaW1wbGljaXRSb290U2NvcGUgJiYgbnVsbCAhPT0gYW5jZXN0b3JcbiAgICAgICAgICA/IGRlc2NyaWJlQW5jZXN0b3JzKFxuICAgICAgICAgICAgICBhbmNlc3RvcixcbiAgICAgICAgICAgICAgaW1wbGljaXRSb290U2NvcGUsXG4gICAgICAgICAgICAgIDYgIT09IGltcGxpY2l0Um9vdFNjb3BlLnRhZyA/IHsgY2hpbGRyZW46IG51bGwgfSA6IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IFwiXCI7XG4gICAgICAvXFxTLy50ZXN0KGNoaWxkVGV4dClcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbiBIVE1MLCB0ZXh0IG5vZGVzIGNhbm5vdCBiZSBhIGNoaWxkIG9mIDwlcz4uXFxuVGhpcyB3aWxsIGNhdXNlIGEgaHlkcmF0aW9uIGVycm9yLiVzXCIsXG4gICAgICAgICAgICBwYXJlbnRUYWcsXG4gICAgICAgICAgICBpbXBsaWNpdFJvb3RTY29wZVxuICAgICAgICAgIClcbiAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbiBIVE1MLCB3aGl0ZXNwYWNlIHRleHQgbm9kZXMgY2Fubm90IGJlIGEgY2hpbGQgb2YgPCVzPi4gTWFrZSBzdXJlIHlvdSBkb24ndCBoYXZlIGFueSBleHRyYSB3aGl0ZXNwYWNlIGJldHdlZW4gdGFncyBvbiBlYWNoIGxpbmUgb2YgeW91ciBzb3VyY2UgY29kZS5cXG5UaGlzIHdpbGwgY2F1c2UgYSBoeWRyYXRpb24gZXJyb3IuJXNcIixcbiAgICAgICAgICAgIHBhcmVudFRhZyxcbiAgICAgICAgICAgIGltcGxpY2l0Um9vdFNjb3BlXG4gICAgICAgICAgKTtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0VGV4dENvbnRlbnQobm9kZSwgdGV4dCkge1xuICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgdmFyIGZpcnN0Q2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmaXJzdENoaWxkICYmXG4gICAgICAgICAgZmlyc3RDaGlsZCA9PT0gbm9kZS5sYXN0Q2hpbGQgJiZcbiAgICAgICAgICAzID09PSBmaXJzdENoaWxkLm5vZGVUeXBlXG4gICAgICAgICkge1xuICAgICAgICAgIGZpcnN0Q2hpbGQubm9kZVZhbHVlID0gdGV4dDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYW1lbGl6ZShzdHJpbmcpIHtcbiAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShoeXBoZW5QYXR0ZXJuLCBmdW5jdGlvbiAoXywgY2hhcmFjdGVyKSB7XG4gICAgICAgIHJldHVybiBjaGFyYWN0ZXIudG9VcHBlckNhc2UoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRWYWx1ZUZvclN0eWxlKHN0eWxlLCBzdHlsZU5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IDAgPT09IHN0eWxlTmFtZS5pbmRleE9mKFwiLS1cIik7XG4gICAgICBpc0N1c3RvbVByb3BlcnR5IHx8XG4gICAgICAgICgtMSA8IHN0eWxlTmFtZS5pbmRleE9mKFwiLVwiKVxuICAgICAgICAgID8gKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJlxuICAgICAgICAgICAgICB3YXJuZWRTdHlsZU5hbWVzW3N0eWxlTmFtZV0pIHx8XG4gICAgICAgICAgICAoKHdhcm5lZFN0eWxlTmFtZXNbc3R5bGVOYW1lXSA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiVW5zdXBwb3J0ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz9cIixcbiAgICAgICAgICAgICAgc3R5bGVOYW1lLFxuICAgICAgICAgICAgICBjYW1lbGl6ZShzdHlsZU5hbWUucmVwbGFjZShtc1BhdHRlcm4sIFwibXMtXCIpKVxuICAgICAgICAgICAgKSlcbiAgICAgICAgICA6IGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybi50ZXN0KHN0eWxlTmFtZSlcbiAgICAgICAgICAgID8gKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJlxuICAgICAgICAgICAgICAgIHdhcm5lZFN0eWxlTmFtZXNbc3R5bGVOYW1lXSkgfHxcbiAgICAgICAgICAgICAgKCh3YXJuZWRTdHlsZU5hbWVzW3N0eWxlTmFtZV0gPSAhMCksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJVbnN1cHBvcnRlZCB2ZW5kb3ItcHJlZml4ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz9cIixcbiAgICAgICAgICAgICAgICBzdHlsZU5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVOYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3R5bGVOYW1lLnNsaWNlKDEpXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgICA6ICFiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4udGVzdCh2YWx1ZSkgfHxcbiAgICAgICAgICAgICAgKHdhcm5lZFN0eWxlVmFsdWVzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJlxuICAgICAgICAgICAgICAgIHdhcm5lZFN0eWxlVmFsdWVzW3ZhbHVlXSkgfHxcbiAgICAgICAgICAgICAgKCh3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0gPSAhMCksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgJ1N0eWxlIHByb3BlcnR5IHZhbHVlcyBzaG91bGRuXFwndCBjb250YWluIGEgc2VtaWNvbG9uLiBUcnkgXCIlczogJXNcIiBpbnN0ZWFkLicsXG4gICAgICAgICAgICAgICAgc3R5bGVOYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlLnJlcGxhY2UoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLCBcIlwiKVxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgKGlzTmFOKHZhbHVlKVxuICAgICAgICAgICAgPyB3YXJuZWRGb3JOYU5WYWx1ZSB8fFxuICAgICAgICAgICAgICAoKHdhcm5lZEZvck5hTlZhbHVlID0gITApLFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiYE5hTmAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LlwiLFxuICAgICAgICAgICAgICAgIHN0eWxlTmFtZVxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgOiBpc0Zpbml0ZSh2YWx1ZSkgfHxcbiAgICAgICAgICAgICAgd2FybmVkRm9ySW5maW5pdHlWYWx1ZSB8fFxuICAgICAgICAgICAgICAoKHdhcm5lZEZvckluZmluaXR5VmFsdWUgPSAhMCksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJgSW5maW5pdHlgIGlzIGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSBgJXNgIGNzcyBzdHlsZSBwcm9wZXJ0eS5cIixcbiAgICAgICAgICAgICAgICBzdHlsZU5hbWVcbiAgICAgICAgICAgICAgKSkpKTtcbiAgICAgIG51bGwgPT0gdmFsdWUgfHwgXCJib29sZWFuXCIgPT09IHR5cGVvZiB2YWx1ZSB8fCBcIlwiID09PSB2YWx1ZVxuICAgICAgICA/IGlzQ3VzdG9tUHJvcGVydHlcbiAgICAgICAgICA/IHN0eWxlLnNldFByb3BlcnR5KHN0eWxlTmFtZSwgXCJcIilcbiAgICAgICAgICA6IFwiZmxvYXRcIiA9PT0gc3R5bGVOYW1lXG4gICAgICAgICAgICA/IChzdHlsZS5jc3NGbG9hdCA9IFwiXCIpXG4gICAgICAgICAgICA6IChzdHlsZVtzdHlsZU5hbWVdID0gXCJcIilcbiAgICAgICAgOiBpc0N1c3RvbVByb3BlcnR5XG4gICAgICAgICAgPyBzdHlsZS5zZXRQcm9wZXJ0eShzdHlsZU5hbWUsIHZhbHVlKVxuICAgICAgICAgIDogXCJudW1iZXJcIiAhPT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgICAgIDAgPT09IHZhbHVlIHx8XG4gICAgICAgICAgICAgIHVuaXRsZXNzTnVtYmVycy5oYXMoc3R5bGVOYW1lKVxuICAgICAgICAgICAgPyBcImZsb2F0XCIgPT09IHN0eWxlTmFtZVxuICAgICAgICAgICAgICA/IChzdHlsZS5jc3NGbG9hdCA9IHZhbHVlKVxuICAgICAgICAgICAgICA6IChjaGVja0NTU1Byb3BlcnR5U3RyaW5nQ29lcmNpb24odmFsdWUsIHN0eWxlTmFtZSksXG4gICAgICAgICAgICAgICAgKHN0eWxlW3N0eWxlTmFtZV0gPSAoXCJcIiArIHZhbHVlKS50cmltKCkpKVxuICAgICAgICAgICAgOiAoc3R5bGVbc3R5bGVOYW1lXSA9IHZhbHVlICsgXCJweFwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0VmFsdWVGb3JTdHlsZXMobm9kZSwgc3R5bGVzLCBwcmV2U3R5bGVzKSB7XG4gICAgICBpZiAobnVsbCAhPSBzdHlsZXMgJiYgXCJvYmplY3RcIiAhPT0gdHlwZW9mIHN0eWxlcylcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJUaGUgYHN0eWxlYCBwcm9wIGV4cGVjdHMgYSBtYXBwaW5nIGZyb20gc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMsIG5vdCBhIHN0cmluZy4gRm9yIGV4YW1wbGUsIHN0eWxlPXt7bWFyZ2luUmlnaHQ6IHNwYWNpbmcgKyAnZW0nfX0gd2hlbiB1c2luZyBKU1guXCJcbiAgICAgICAgKTtcbiAgICAgIHN0eWxlcyAmJiBPYmplY3QuZnJlZXplKHN0eWxlcyk7XG4gICAgICBub2RlID0gbm9kZS5zdHlsZTtcbiAgICAgIGlmIChudWxsICE9IHByZXZTdHlsZXMpIHtcbiAgICAgICAgaWYgKHN0eWxlcykge1xuICAgICAgICAgIHZhciBleHBhbmRlZFVwZGF0ZXMgPSB7fTtcbiAgICAgICAgICBpZiAocHJldlN0eWxlcylcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwcmV2U3R5bGVzKVxuICAgICAgICAgICAgICBpZiAocHJldlN0eWxlcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICFzdHlsZXMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgdmFyIGxvbmdoYW5kcyA9IHNob3J0aGFuZFRvTG9uZ2hhbmRba2V5XSB8fCBba2V5XSwgaSA9IDA7XG4gICAgICAgICAgICAgICAgICBpIDwgbG9uZ2hhbmRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgIGkrK1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIGV4cGFuZGVkVXBkYXRlc1tsb25naGFuZHNbaV1dID0ga2V5O1xuICAgICAgICAgIGZvciAodmFyIF9rZXkgaW4gc3R5bGVzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzdHlsZXMuaGFzT3duUHJvcGVydHkoX2tleSkgJiZcbiAgICAgICAgICAgICAgKCFwcmV2U3R5bGVzIHx8IHByZXZTdHlsZXNbX2tleV0gIT09IHN0eWxlc1tfa2V5XSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICBrZXkgPSBzaG9ydGhhbmRUb0xvbmdoYW5kW19rZXldIHx8IFtfa2V5XSwgbG9uZ2hhbmRzID0gMDtcbiAgICAgICAgICAgICAgICBsb25naGFuZHMgPCBrZXkubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxvbmdoYW5kcysrXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBleHBhbmRlZFVwZGF0ZXNba2V5W2xvbmdoYW5kc11dID0gX2tleTtcbiAgICAgICAgICBfa2V5ID0ge307XG4gICAgICAgICAgZm9yICh2YXIga2V5JGpzY29tcCQwIGluIHN0eWxlcylcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIGtleSA9IHNob3J0aGFuZFRvTG9uZ2hhbmRba2V5JGpzY29tcCQwXSB8fCBba2V5JGpzY29tcCQwXSxcbiAgICAgICAgICAgICAgICBsb25naGFuZHMgPSAwO1xuICAgICAgICAgICAgICBsb25naGFuZHMgPCBrZXkubGVuZ3RoO1xuICAgICAgICAgICAgICBsb25naGFuZHMrK1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBfa2V5W2tleVtsb25naGFuZHNdXSA9IGtleSRqc2NvbXAkMDtcbiAgICAgICAgICBrZXkkanNjb21wJDAgPSB7fTtcbiAgICAgICAgICBmb3IgKHZhciBfa2V5MiBpbiBleHBhbmRlZFVwZGF0ZXMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgoa2V5ID0gZXhwYW5kZWRVcGRhdGVzW19rZXkyXSksXG4gICAgICAgICAgICAgIChsb25naGFuZHMgPSBfa2V5W19rZXkyXSkgJiZcbiAgICAgICAgICAgICAgICBrZXkgIT09IGxvbmdoYW5kcyAmJlxuICAgICAgICAgICAgICAgICgoaSA9IGtleSArIFwiLFwiICsgbG9uZ2hhbmRzKSwgIWtleSRqc2NvbXAkMFtpXSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAga2V5JGpzY29tcCQwW2ldID0gITA7XG4gICAgICAgICAgICAgIGkgPSBjb25zb2xlO1xuICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzdHlsZXNba2V5XTtcbiAgICAgICAgICAgICAgaS5lcnJvci5jYWxsKFxuICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgXCIlcyBhIHN0eWxlIHByb3BlcnR5IGR1cmluZyByZXJlbmRlciAoJXMpIHdoZW4gYSBjb25mbGljdGluZyBwcm9wZXJ0eSBpcyBzZXQgKCVzKSBjYW4gbGVhZCB0byBzdHlsaW5nIGJ1Z3MuIFRvIGF2b2lkIHRoaXMsIGRvbid0IG1peCBzaG9ydGhhbmQgYW5kIG5vbi1zaG9ydGhhbmQgcHJvcGVydGllcyBmb3IgdGhlIHNhbWUgdmFsdWU7IGluc3RlYWQsIHJlcGxhY2UgdGhlIHNob3J0aGFuZCB3aXRoIHNlcGFyYXRlIHZhbHVlcy5cIixcbiAgICAgICAgICAgICAgICBudWxsID09IHZhbHVlIHx8IFwiYm9vbGVhblwiID09PSB0eXBlb2YgdmFsdWUgfHwgXCJcIiA9PT0gdmFsdWVcbiAgICAgICAgICAgICAgICAgID8gXCJSZW1vdmluZ1wiXG4gICAgICAgICAgICAgICAgICA6IFwiVXBkYXRpbmdcIixcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgbG9uZ2hhbmRzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgc3R5bGVOYW1lIGluIHByZXZTdHlsZXMpXG4gICAgICAgICAgIXByZXZTdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSB8fFxuICAgICAgICAgICAgKG51bGwgIT0gc3R5bGVzICYmIHN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB8fFxuICAgICAgICAgICAgKDAgPT09IHN0eWxlTmFtZS5pbmRleE9mKFwiLS1cIilcbiAgICAgICAgICAgICAgPyBub2RlLnNldFByb3BlcnR5KHN0eWxlTmFtZSwgXCJcIilcbiAgICAgICAgICAgICAgOiBcImZsb2F0XCIgPT09IHN0eWxlTmFtZVxuICAgICAgICAgICAgICAgID8gKG5vZGUuY3NzRmxvYXQgPSBcIlwiKVxuICAgICAgICAgICAgICAgIDogKG5vZGVbc3R5bGVOYW1lXSA9IFwiXCIpKTtcbiAgICAgICAgZm9yICh2YXIgX3N0eWxlTmFtZSBpbiBzdHlsZXMpXG4gICAgICAgICAgKF9rZXkyID0gc3R5bGVzW19zdHlsZU5hbWVdKSxcbiAgICAgICAgICAgIHN0eWxlcy5oYXNPd25Qcm9wZXJ0eShfc3R5bGVOYW1lKSAmJlxuICAgICAgICAgICAgICBwcmV2U3R5bGVzW19zdHlsZU5hbWVdICE9PSBfa2V5MiAmJlxuICAgICAgICAgICAgICBzZXRWYWx1ZUZvclN0eWxlKG5vZGUsIF9zdHlsZU5hbWUsIF9rZXkyKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICBmb3IgKGV4cGFuZGVkVXBkYXRlcyBpbiBzdHlsZXMpXG4gICAgICAgICAgc3R5bGVzLmhhc093blByb3BlcnR5KGV4cGFuZGVkVXBkYXRlcykgJiZcbiAgICAgICAgICAgIHNldFZhbHVlRm9yU3R5bGUobm9kZSwgZXhwYW5kZWRVcGRhdGVzLCBzdHlsZXNbZXhwYW5kZWRVcGRhdGVzXSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzQ3VzdG9tRWxlbWVudCh0YWdOYW1lKSB7XG4gICAgICBpZiAoLTEgPT09IHRhZ05hbWUuaW5kZXhPZihcIi1cIikpIHJldHVybiAhMTtcbiAgICAgIHN3aXRjaCAodGFnTmFtZSkge1xuICAgICAgICBjYXNlIFwiYW5ub3RhdGlvbi14bWxcIjpcbiAgICAgICAgY2FzZSBcImNvbG9yLXByb2ZpbGVcIjpcbiAgICAgICAgY2FzZSBcImZvbnQtZmFjZVwiOlxuICAgICAgICBjYXNlIFwiZm9udC1mYWNlLXNyY1wiOlxuICAgICAgICBjYXNlIFwiZm9udC1mYWNlLXVyaVwiOlxuICAgICAgICBjYXNlIFwiZm9udC1mYWNlLWZvcm1hdFwiOlxuICAgICAgICBjYXNlIFwiZm9udC1mYWNlLW5hbWVcIjpcbiAgICAgICAgY2FzZSBcIm1pc3NpbmctZ2x5cGhcIjpcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVBbGlhcyhuYW1lKSB7XG4gICAgICByZXR1cm4gYWxpYXNlcy5nZXQobmFtZSkgfHwgbmFtZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eSQxKHRhZ05hbWUsIG5hbWUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRQcm9wZXJ0aWVzJDEsIG5hbWUpICYmXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXVxuICAgICAgKVxuICAgICAgICByZXR1cm4gITA7XG4gICAgICBpZiAockFSSUFDYW1lbCQxLnRlc3QobmFtZSkpIHtcbiAgICAgICAgdGFnTmFtZSA9IFwiYXJpYS1cIiArIG5hbWUuc2xpY2UoNCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdGFnTmFtZSA9IGFyaWFQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHRhZ05hbWUpID8gdGFnTmFtZSA6IG51bGw7XG4gICAgICAgIGlmIChudWxsID09IHRhZ05hbWUpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBBUklBIGF0dHJpYnV0ZXMgZm9sbG93IHRoZSBwYXR0ZXJuIGFyaWEtKiBhbmQgbXVzdCBiZSBsb3dlcmNhc2UuXCIsXG4gICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAod2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gITApXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKG5hbWUgIT09IHRhZ05hbWUpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD9cIixcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgdGFnTmFtZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSAhMClcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHJBUklBJDEudGVzdChuYW1lKSkge1xuICAgICAgICB0YWdOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB0YWdOYW1lID0gYXJpYVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkodGFnTmFtZSkgPyB0YWdOYW1lIDogbnVsbDtcbiAgICAgICAgaWYgKG51bGwgPT0gdGFnTmFtZSkgcmV0dXJuICh3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSAhMCksICExO1xuICAgICAgICBuYW1lICE9PSB0YWdOYW1lICYmXG4gICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlVua25vd24gQVJJQSBhdHRyaWJ1dGUgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/XCIsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdGFnTmFtZVxuICAgICAgICAgICksXG4gICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9ICEwKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyQyKHR5cGUsIHByb3BzKSB7XG4gICAgICB2YXIgaW52YWxpZFByb3BzID0gW10sXG4gICAgICAgIGtleTtcbiAgICAgIGZvciAoa2V5IGluIHByb3BzKVxuICAgICAgICB2YWxpZGF0ZVByb3BlcnR5JDEodHlwZSwga2V5KSB8fCBpbnZhbGlkUHJvcHMucHVzaChrZXkpO1xuICAgICAgcHJvcHMgPSBpbnZhbGlkUHJvcHNcbiAgICAgICAgLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgIHJldHVybiBcImBcIiArIHByb3AgKyBcImBcIjtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIsIFwiKTtcbiAgICAgIDEgPT09IGludmFsaWRQcm9wcy5sZW5ndGhcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbnZhbGlkIGFyaWEgcHJvcCAlcyBvbiA8JXM+IHRhZy4gRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL2ludmFsaWQtYXJpYS1wcm9wc1wiLFxuICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgICAgKVxuICAgICAgICA6IDEgPCBpbnZhbGlkUHJvcHMubGVuZ3RoICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiSW52YWxpZCBhcmlhIHByb3BzICVzIG9uIDwlcz4gdGFnLiBGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaW52YWxpZC1hcmlhLXByb3BzXCIsXG4gICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnR5KHRhZ05hbWUsIG5hbWUsIHZhbHVlLCBldmVudFJlZ2lzdHJ5KSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRQcm9wZXJ0aWVzLCBuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdKVxuICAgICAgICByZXR1cm4gITA7XG4gICAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoXCJvbmZvY3VzaW5cIiA9PT0gbG93ZXJDYXNlZE5hbWUgfHwgXCJvbmZvY3Vzb3V0XCIgPT09IGxvd2VyQ2FzZWROYW1lKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlJlYWN0IHVzZXMgb25Gb2N1cyBhbmQgb25CbHVyIGluc3RlYWQgb2Ygb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0LiBBbGwgUmVhY3QgZXZlbnRzIGFyZSBub3JtYWxpemVkIHRvIGJ1YmJsZSwgc28gb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0IGFyZSBub3QgbmVlZGVkL3N1cHBvcnRlZCBieSBSZWFjdC5cIlxuICAgICAgICAgICksXG4gICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSAhMClcbiAgICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgKChcImZvcm1cIiA9PT0gdGFnTmFtZSAmJiBcImFjdGlvblwiID09PSBuYW1lKSB8fFxuICAgICAgICAgIChcImlucHV0XCIgPT09IHRhZ05hbWUgJiYgXCJmb3JtQWN0aW9uXCIgPT09IG5hbWUpIHx8XG4gICAgICAgICAgKFwiYnV0dG9uXCIgPT09IHRhZ05hbWUgJiYgXCJmb3JtQWN0aW9uXCIgPT09IG5hbWUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gITA7XG4gICAgICBpZiAobnVsbCAhPSBldmVudFJlZ2lzdHJ5KSB7XG4gICAgICAgIHRhZ05hbWUgPSBldmVudFJlZ2lzdHJ5LnBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM7XG4gICAgICAgIGlmIChldmVudFJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkobmFtZSkpXG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICBldmVudFJlZ2lzdHJ5ID0gdGFnTmFtZS5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSlcbiAgICAgICAgICA/IHRhZ05hbWVbbG93ZXJDYXNlZE5hbWVdXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICBpZiAobnVsbCAhPSBldmVudFJlZ2lzdHJ5KVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkludmFsaWQgZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD9cIixcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgZXZlbnRSZWdpc3RyeVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKEVWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSlcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJVbmtub3duIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gSXQgd2lsbCBiZSBpZ25vcmVkLlwiLFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgKHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSAhMClcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChFVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgSU5WQUxJRF9FVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiSW52YWxpZCBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuIFJlYWN0IGV2ZW50cyB1c2UgdGhlIGNhbWVsQ2FzZSBuYW1pbmcgY29udmVudGlvbiwgZm9yIGV4YW1wbGUgYG9uQ2xpY2tgLlwiLFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICApLFxuICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICk7XG4gICAgICBpZiAockFSSUEudGVzdChuYW1lKSB8fCByQVJJQUNhbWVsLnRlc3QobmFtZSkpIHJldHVybiAhMDtcbiAgICAgIGlmIChcImlubmVyaHRtbFwiID09PSBsb3dlckNhc2VkTmFtZSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJEaXJlY3RseSBzZXR0aW5nIHByb3BlcnR5IGBpbm5lckhUTUxgIGlzIG5vdCBwZXJtaXR0ZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBsb29rdXAgZG9jdW1lbnRhdGlvbiBvbiBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKVxuICAgICAgICApO1xuICAgICAgaWYgKFwiYXJpYVwiID09PSBsb3dlckNhc2VkTmFtZSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJUaGUgYGFyaWFgIGF0dHJpYnV0ZSBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBpbiBSZWFjdC4gUGFzcyBpbmRpdmlkdWFsIGBhcmlhLWAgYXR0cmlidXRlcyBpbnN0ZWFkLlwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKVxuICAgICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICBcImlzXCIgPT09IGxvd2VyQ2FzZWROYW1lICYmXG4gICAgICAgIG51bGwgIT09IHZhbHVlICYmXG4gICAgICAgIHZvaWQgMCAhPT0gdmFsdWUgJiZcbiAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHZhbHVlXG4gICAgICApXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiUmVjZWl2ZWQgYSBgJXNgIGZvciBhIHN0cmluZyBhdHRyaWJ1dGUgYGlzYC4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCB0aGUgdmFsdWUgdG8gYSBzdHJpbmcuXCIsXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWVcbiAgICAgICAgICApLFxuICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICk7XG4gICAgICBpZiAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHZhbHVlICYmIGlzTmFOKHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJSZWNlaXZlZCBOYU4gZm9yIHRoZSBgJXNgIGF0dHJpYnV0ZS4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCB0aGUgdmFsdWUgdG8gYSBzdHJpbmcuXCIsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKSxcbiAgICAgICAgICAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKVxuICAgICAgICApO1xuICAgICAgaWYgKHBvc3NpYmxlU3RhbmRhcmROYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICgobG93ZXJDYXNlZE5hbWUgPSBwb3NzaWJsZVN0YW5kYXJkTmFtZXNbbG93ZXJDYXNlZE5hbWVdKSxcbiAgICAgICAgICBsb3dlckNhc2VkTmFtZSAhPT0gbmFtZSlcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkludmFsaWQgRE9NIHByb3BlcnR5IGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgP1wiLFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICBsb3dlckNhc2VkTmFtZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAobmFtZSAhPT0gbG93ZXJDYXNlZE5hbWUpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiUmVhY3QgZG9lcyBub3QgcmVjb2duaXplIHRoZSBgJXNgIHByb3Agb24gYSBET00gZWxlbWVudC4gSWYgeW91IGludGVudGlvbmFsbHkgd2FudCBpdCB0byBhcHBlYXIgaW4gdGhlIERPTSBhcyBhIGN1c3RvbSBhdHRyaWJ1dGUsIHNwZWxsIGl0IGFzIGxvd2VyY2FzZSBgJXNgIGluc3RlYWQuIElmIHlvdSBhY2NpZGVudGFsbHkgcGFzc2VkIGl0IGZyb20gYSBwYXJlbnQgY29tcG9uZW50LCByZW1vdmUgaXQgZnJvbSB0aGUgRE9NIGVsZW1lbnQuXCIsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgbG93ZXJDYXNlZE5hbWVcbiAgICAgICAgICApLFxuICAgICAgICAgICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApXG4gICAgICAgICk7XG4gICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgY2FzZSBcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiOlxuICAgICAgICBjYXNlIFwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCI6XG4gICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgY2FzZSBcImRlZmF1bHRDaGVja2VkXCI6XG4gICAgICAgIGNhc2UgXCJpbm5lckhUTUxcIjpcbiAgICAgICAgY2FzZSBcInJlZlwiOlxuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgY2FzZSBcImlubmVyVGV4dFwiOlxuICAgICAgICBjYXNlIFwidGV4dENvbnRlbnRcIjpcbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgY2FzZSBcImF1dG9Gb2N1c1wiOlxuICAgICAgICAgICAgY2FzZSBcImNoZWNrZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJtdWx0aXBsZVwiOlxuICAgICAgICAgICAgY2FzZSBcIm11dGVkXCI6XG4gICAgICAgICAgICBjYXNlIFwic2VsZWN0ZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJjb250ZW50RWRpdGFibGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGVsbENoZWNrXCI6XG4gICAgICAgICAgICBjYXNlIFwiZHJhZ2dhYmxlXCI6XG4gICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJhdXRvUmV2ZXJzZVwiOlxuICAgICAgICAgICAgY2FzZSBcImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmb2N1c2FibGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwcmVzZXJ2ZUFscGhhXCI6XG4gICAgICAgICAgICBjYXNlIFwiYWxsb3dGdWxsU2NyZWVuXCI6XG4gICAgICAgICAgICBjYXNlIFwiYXN5bmNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJhdXRvUGxheVwiOlxuICAgICAgICAgICAgY2FzZSBcImNvbnRyb2xzXCI6XG4gICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFwiOlxuICAgICAgICAgICAgY2FzZSBcImRlZmVyXCI6XG4gICAgICAgICAgICBjYXNlIFwiZGlzYWJsZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJkaXNhYmxlUGljdHVyZUluUGljdHVyZVwiOlxuICAgICAgICAgICAgY2FzZSBcImRpc2FibGVSZW1vdGVQbGF5YmFja1wiOlxuICAgICAgICAgICAgY2FzZSBcImZvcm1Ob1ZhbGlkYXRlXCI6XG4gICAgICAgICAgICBjYXNlIFwiaGlkZGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwibG9vcFwiOlxuICAgICAgICAgICAgY2FzZSBcIm5vTW9kdWxlXCI6XG4gICAgICAgICAgICBjYXNlIFwibm9WYWxpZGF0ZVwiOlxuICAgICAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJwbGF5c0lubGluZVwiOlxuICAgICAgICAgICAgY2FzZSBcInJlYWRPbmx5XCI6XG4gICAgICAgICAgICBjYXNlIFwicmVxdWlyZWRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJyZXZlcnNlZFwiOlxuICAgICAgICAgICAgY2FzZSBcInNjb3BlZFwiOlxuICAgICAgICAgICAgY2FzZSBcInNlYW1sZXNzXCI6XG4gICAgICAgICAgICBjYXNlIFwiaXRlbVNjb3BlXCI6XG4gICAgICAgICAgICBjYXNlIFwiY2FwdHVyZVwiOlxuICAgICAgICAgICAgY2FzZSBcImRvd25sb2FkXCI6XG4gICAgICAgICAgICBjYXNlIFwiaW5lcnRcIjpcbiAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCwgNSk7XG4gICAgICAgICAgICAgIGlmIChcImRhdGEtXCIgPT09IGxvd2VyQ2FzZWROYW1lIHx8IFwiYXJpYS1cIiA9PT0gbG93ZXJDYXNlZE5hbWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ1JlY2VpdmVkIGAlc2AgZm9yIGEgbm9uLWJvb2xlYW4gYXR0cmlidXRlIGAlc2AuXFxuXFxuSWYgeW91IHdhbnQgdG8gd3JpdGUgaXQgdG8gdGhlIERPTSwgcGFzcyBhIHN0cmluZyBpbnN0ZWFkOiAlcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LicsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ1JlY2VpdmVkIGAlc2AgZm9yIGEgbm9uLWJvb2xlYW4gYXR0cmlidXRlIGAlc2AuXFxuXFxuSWYgeW91IHdhbnQgdG8gd3JpdGUgaXQgdG8gdGhlIERPTSwgcGFzcyBhIHN0cmluZyBpbnN0ZWFkOiAlcz1cIiVzXCIgb3IgJXM9e3ZhbHVlLnRvU3RyaW5nKCl9LlxcblxcbklmIHlvdSB1c2VkIHRvIGNvbmRpdGlvbmFsbHkgb21pdCBpdCB3aXRoICVzPXtjb25kaXRpb24gJiYgdmFsdWV9LCBwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC4nLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiAod2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwKTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgcmV0dXJuICh3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gITApLCAhMTtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIGlmIChcImZhbHNlXCIgPT09IHZhbHVlIHx8IFwidHJ1ZVwiID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJjaGVja2VkXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJzZWxlY3RlZFwiOlxuICAgICAgICAgICAgICBjYXNlIFwibXVsdGlwbGVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm11dGVkXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJhbGxvd0Z1bGxTY3JlZW5cIjpcbiAgICAgICAgICAgICAgY2FzZSBcImFzeW5jXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJhdXRvUGxheVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiY29udHJvbHNcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRlZmVyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkaXNhYmxlZFwiOlxuICAgICAgICAgICAgICBjYXNlIFwiZGlzYWJsZVBpY3R1cmVJblBpY3R1cmVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRpc2FibGVSZW1vdGVQbGF5YmFja1wiOlxuICAgICAgICAgICAgICBjYXNlIFwiZm9ybU5vVmFsaWRhdGVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImhpZGRlblwiOlxuICAgICAgICAgICAgICBjYXNlIFwibG9vcFwiOlxuICAgICAgICAgICAgICBjYXNlIFwibm9Nb2R1bGVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm5vVmFsaWRhdGVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm9wZW5cIjpcbiAgICAgICAgICAgICAgY2FzZSBcInBsYXlzSW5saW5lXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJyZWFkT25seVwiOlxuICAgICAgICAgICAgICBjYXNlIFwicmVxdWlyZWRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInJldmVyc2VkXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJzY29wZWRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInNlYW1sZXNzXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJpdGVtU2NvcGVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImluZXJ0XCI6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWNlaXZlZCB0aGUgc3RyaW5nIGAlc2AgZm9yIHRoZSBib29sZWFuIGF0dHJpYnV0ZSBgJXNgLiAlcyBEaWQgeW91IG1lYW4gJXM9eyVzfT9cIixcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIFwiZmFsc2VcIiA9PT0gdmFsdWVcbiAgICAgICAgICAgICAgICA/IFwiVGhlIGJyb3dzZXIgd2lsbCBpbnRlcnByZXQgaXQgYXMgYSB0cnV0aHkgdmFsdWUuXCJcbiAgICAgICAgICAgICAgICA6ICdBbHRob3VnaCB0aGlzIHdvcmtzLCBpdCB3aWxsIG5vdCB3b3JrIGFzIGV4cGVjdGVkIGlmIHlvdSBwYXNzIHRoZSBzdHJpbmcgXCJmYWxzZVwiLicsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9ICEwO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FyblVua25vd25Qcm9wZXJ0aWVzKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KSB7XG4gICAgICB2YXIgdW5rbm93blByb3BzID0gW10sXG4gICAgICAgIGtleTtcbiAgICAgIGZvciAoa2V5IGluIHByb3BzKVxuICAgICAgICB2YWxpZGF0ZVByb3BlcnR5KHR5cGUsIGtleSwgcHJvcHNba2V5XSwgZXZlbnRSZWdpc3RyeSkgfHxcbiAgICAgICAgICB1bmtub3duUHJvcHMucHVzaChrZXkpO1xuICAgICAgcHJvcHMgPSB1bmtub3duUHJvcHNcbiAgICAgICAgLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgIHJldHVybiBcImBcIiArIHByb3AgKyBcImBcIjtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIsIFwiKTtcbiAgICAgIDEgPT09IHVua25vd25Qcm9wcy5sZW5ndGhcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBwcm9wICVzIG9uIDwlcz4gdGFnLiBFaXRoZXIgcmVtb3ZlIGl0IGZyb20gdGhlIGVsZW1lbnQsIG9yIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlIHRvIGtlZXAgaXQgaW4gdGhlIERPTS4gRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL2F0dHJpYnV0ZS1iZWhhdmlvciBcIixcbiAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgdHlwZVxuICAgICAgICAgIClcbiAgICAgICAgOiAxIDwgdW5rbm93blByb3BzLmxlbmd0aCAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkludmFsaWQgdmFsdWVzIGZvciBwcm9wcyAlcyBvbiA8JXM+IHRhZy4gRWl0aGVyIHJlbW92ZSB0aGVtIGZyb20gdGhlIGVsZW1lbnQsIG9yIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlIHRvIGtlZXAgdGhlbSBpbiB0aGUgRE9NLiBGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvYXR0cmlidXRlLWJlaGF2aW9yIFwiLFxuICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2FuaXRpemVVUkwodXJsKSB7XG4gICAgICByZXR1cm4gaXNKYXZhU2NyaXB0UHJvdG9jb2wudGVzdChcIlwiICsgdXJsKVxuICAgICAgICA/IFwiamF2YXNjcmlwdDp0aHJvdyBuZXcgRXJyb3IoJ1JlYWN0IGhhcyBibG9ja2VkIGEgamF2YXNjcmlwdDogVVJMIGFzIGEgc2VjdXJpdHkgcHJlY2F1dGlvbi4nKVwiXG4gICAgICAgIDogdXJsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub29wJDEoKSB7fVxuICAgIGZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSB7XG4gICAgICBuYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50LnRhcmdldCB8fCBuYXRpdmVFdmVudC5zcmNFbGVtZW50IHx8IHdpbmRvdztcbiAgICAgIG5hdGl2ZUV2ZW50LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50ICYmXG4gICAgICAgIChuYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KTtcbiAgICAgIHJldHVybiAzID09PSBuYXRpdmVFdmVudC5ub2RlVHlwZSA/IG5hdGl2ZUV2ZW50LnBhcmVudE5vZGUgOiBuYXRpdmVFdmVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzdG9yZVN0YXRlT2ZUYXJnZXQodGFyZ2V0KSB7XG4gICAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0KTtcbiAgICAgIGlmIChpbnRlcm5hbEluc3RhbmNlICYmICh0YXJnZXQgPSBpbnRlcm5hbEluc3RhbmNlLnN0YXRlTm9kZSkpIHtcbiAgICAgICAgdmFyIHByb3BzID0gdGFyZ2V0W2ludGVybmFsUHJvcHNLZXldIHx8IG51bGw7XG4gICAgICAgIGE6IHN3aXRjaCAoXG4gICAgICAgICAgKCh0YXJnZXQgPSBpbnRlcm5hbEluc3RhbmNlLnN0YXRlTm9kZSksIGludGVybmFsSW5zdGFuY2UudHlwZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2FzZSBcImlucHV0XCI6XG4gICAgICAgICAgICB1cGRhdGVJbnB1dChcbiAgICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgICBwcm9wcy52YWx1ZSxcbiAgICAgICAgICAgICAgcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICBwcm9wcy5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgIHByb3BzLmNoZWNrZWQsXG4gICAgICAgICAgICAgIHByb3BzLmRlZmF1bHRDaGVja2VkLFxuICAgICAgICAgICAgICBwcm9wcy50eXBlLFxuICAgICAgICAgICAgICBwcm9wcy5uYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZSA9IHByb3BzLm5hbWU7XG4gICAgICAgICAgICBpZiAoXCJyYWRpb1wiID09PSBwcm9wcy50eXBlICYmIG51bGwgIT0gaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgICAgICAgICAgICBmb3IgKHByb3BzID0gdGFyZ2V0OyBwcm9wcy5wYXJlbnROb2RlOyApIHByb3BzID0gcHJvcHMucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihpbnRlcm5hbEluc3RhbmNlLCBcIm5hbWVcIik7XG4gICAgICAgICAgICAgIHByb3BzID0gcHJvcHMucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgICAnaW5wdXRbbmFtZT1cIicgK1xuICAgICAgICAgICAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhcbiAgICAgICAgICAgICAgICAgICAgXCJcIiArIGludGVybmFsSW5zdGFuY2VcbiAgICAgICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAgICAgJ1wiXVt0eXBlPVwicmFkaW9cIl0nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZSA9IDA7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxJbnN0YW5jZSA8IHByb3BzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbEluc3RhbmNlKytcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyTm9kZSA9IHByb3BzW2ludGVybmFsSW5zdGFuY2VdO1xuICAgICAgICAgICAgICAgIGlmIChvdGhlck5vZGUgIT09IHRhcmdldCAmJiBvdGhlck5vZGUuZm9ybSA9PT0gdGFyZ2V0LmZvcm0pIHtcbiAgICAgICAgICAgICAgICAgIHZhciBvdGhlclByb3BzID0gb3RoZXJOb2RlW2ludGVybmFsUHJvcHNLZXldIHx8IG51bGw7XG4gICAgICAgICAgICAgICAgICBpZiAoIW90aGVyUHJvcHMpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiUmVhY3RET01JbnB1dDogTWl4aW5nIFJlYWN0IGFuZCBub24tUmVhY3QgcmFkaW8gaW5wdXRzIHdpdGggdGhlIHNhbWUgYG5hbWVgIGlzIG5vdCBzdXBwb3J0ZWQuXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHVwZGF0ZUlucHV0KFxuICAgICAgICAgICAgICAgICAgICBvdGhlck5vZGUsXG4gICAgICAgICAgICAgICAgICAgIG90aGVyUHJvcHMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG90aGVyUHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBvdGhlclByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJQcm9wcy5jaGVja2VkLFxuICAgICAgICAgICAgICAgICAgICBvdGhlclByb3BzLmRlZmF1bHRDaGVja2VkLFxuICAgICAgICAgICAgICAgICAgICBvdGhlclByb3BzLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG90aGVyUHJvcHMubmFtZVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICBpbnRlcm5hbEluc3RhbmNlID0gMDtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbEluc3RhbmNlIDwgcHJvcHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGludGVybmFsSW5zdGFuY2UrK1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKG90aGVyTm9kZSA9IHByb3BzW2ludGVybmFsSW5zdGFuY2VdKSxcbiAgICAgICAgICAgICAgICAgIG90aGVyTm9kZS5mb3JtID09PSB0YXJnZXQuZm9ybSAmJlxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVWYWx1ZUlmQ2hhbmdlZChvdGhlck5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICBjYXNlIFwidGV4dGFyZWFcIjpcbiAgICAgICAgICAgIHVwZGF0ZVRleHRhcmVhKHRhcmdldCwgcHJvcHMudmFsdWUsIHByb3BzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgICAgIChpbnRlcm5hbEluc3RhbmNlID0gcHJvcHMudmFsdWUpLFxuICAgICAgICAgICAgICBudWxsICE9IGludGVybmFsSW5zdGFuY2UgJiZcbiAgICAgICAgICAgICAgICB1cGRhdGVPcHRpb25zKHRhcmdldCwgISFwcm9wcy5tdWx0aXBsZSwgaW50ZXJuYWxJbnN0YW5jZSwgITEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJhdGNoZWRVcGRhdGVzJDEoZm4sIGEsIGIpIHtcbiAgICAgIGlmIChpc0luc2lkZUV2ZW50SGFuZGxlcikgcmV0dXJuIGZuKGEsIGIpO1xuICAgICAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSAhMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBmbihhKTtcbiAgICAgICAgcmV0dXJuIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoKGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gITEpLFxuICAgICAgICAgIG51bGwgIT09IHJlc3RvcmVUYXJnZXQgfHwgbnVsbCAhPT0gcmVzdG9yZVF1ZXVlKVxuICAgICAgICApXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGZsdXNoU3luY1dvcmskMSgpLFxuICAgICAgICAgICAgcmVzdG9yZVRhcmdldCAmJlxuICAgICAgICAgICAgICAoKGEgPSByZXN0b3JlVGFyZ2V0KSxcbiAgICAgICAgICAgICAgKGZuID0gcmVzdG9yZVF1ZXVlKSxcbiAgICAgICAgICAgICAgKHJlc3RvcmVRdWV1ZSA9IHJlc3RvcmVUYXJnZXQgPSBudWxsKSxcbiAgICAgICAgICAgICAgcmVzdG9yZVN0YXRlT2ZUYXJnZXQoYSksXG4gICAgICAgICAgICAgIGZuKSlcbiAgICAgICAgICApXG4gICAgICAgICAgICBmb3IgKGEgPSAwOyBhIDwgZm4ubGVuZ3RoOyBhKyspIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KGZuW2FdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICAgICAgdmFyIHN0YXRlTm9kZSA9IGluc3Quc3RhdGVOb2RlO1xuICAgICAgaWYgKG51bGwgPT09IHN0YXRlTm9kZSkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgcHJvcHMgPSBzdGF0ZU5vZGVbaW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbDtcbiAgICAgIGlmIChudWxsID09PSBwcm9wcykgcmV0dXJuIG51bGw7XG4gICAgICBzdGF0ZU5vZGUgPSBwcm9wc1tyZWdpc3RyYXRpb25OYW1lXTtcbiAgICAgIGE6IHN3aXRjaCAocmVnaXN0cmF0aW9uTmFtZSkge1xuICAgICAgICBjYXNlIFwib25DbGlja1wiOlxuICAgICAgICBjYXNlIFwib25DbGlja0NhcHR1cmVcIjpcbiAgICAgICAgY2FzZSBcIm9uRG91YmxlQ2xpY2tcIjpcbiAgICAgICAgY2FzZSBcIm9uRG91YmxlQ2xpY2tDYXB0dXJlXCI6XG4gICAgICAgIGNhc2UgXCJvbk1vdXNlRG93blwiOlxuICAgICAgICBjYXNlIFwib25Nb3VzZURvd25DYXB0dXJlXCI6XG4gICAgICAgIGNhc2UgXCJvbk1vdXNlTW92ZVwiOlxuICAgICAgICBjYXNlIFwib25Nb3VzZU1vdmVDYXB0dXJlXCI6XG4gICAgICAgIGNhc2UgXCJvbk1vdXNlVXBcIjpcbiAgICAgICAgY2FzZSBcIm9uTW91c2VVcENhcHR1cmVcIjpcbiAgICAgICAgY2FzZSBcIm9uTW91c2VFbnRlclwiOlxuICAgICAgICAgIChwcm9wcyA9ICFwcm9wcy5kaXNhYmxlZCkgfHxcbiAgICAgICAgICAgICgoaW5zdCA9IGluc3QudHlwZSksXG4gICAgICAgICAgICAocHJvcHMgPSAhKFxuICAgICAgICAgICAgICBcImJ1dHRvblwiID09PSBpbnN0IHx8XG4gICAgICAgICAgICAgIFwiaW5wdXRcIiA9PT0gaW5zdCB8fFxuICAgICAgICAgICAgICBcInNlbGVjdFwiID09PSBpbnN0IHx8XG4gICAgICAgICAgICAgIFwidGV4dGFyZWFcIiA9PT0gaW5zdFxuICAgICAgICAgICAgKSkpO1xuICAgICAgICAgIGluc3QgPSAhcHJvcHM7XG4gICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpbnN0ID0gITE7XG4gICAgICB9XG4gICAgICBpZiAoaW5zdCkgcmV0dXJuIG51bGw7XG4gICAgICBpZiAoc3RhdGVOb2RlICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHN0YXRlTm9kZSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCBgXCIgK1xuICAgICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZSArXG4gICAgICAgICAgICBcImAgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYSB2YWx1ZSBvZiBgXCIgK1xuICAgICAgICAgICAgdHlwZW9mIHN0YXRlTm9kZSArXG4gICAgICAgICAgICBcImAgdHlwZS5cIlxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHN0YXRlTm9kZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RGF0YSgpIHtcbiAgICAgIGlmIChmYWxsYmFja1RleHQpIHJldHVybiBmYWxsYmFja1RleHQ7XG4gICAgICB2YXIgc3RhcnQsXG4gICAgICAgIHN0YXJ0VmFsdWUgPSBzdGFydFRleHQsXG4gICAgICAgIHN0YXJ0TGVuZ3RoID0gc3RhcnRWYWx1ZS5sZW5ndGgsXG4gICAgICAgIGVuZCxcbiAgICAgICAgZW5kVmFsdWUgPSBcInZhbHVlXCIgaW4gcm9vdCA/IHJvb3QudmFsdWUgOiByb290LnRleHRDb250ZW50LFxuICAgICAgICBlbmRMZW5ndGggPSBlbmRWYWx1ZS5sZW5ndGg7XG4gICAgICBmb3IgKFxuICAgICAgICBzdGFydCA9IDA7XG4gICAgICAgIHN0YXJ0IDwgc3RhcnRMZW5ndGggJiYgc3RhcnRWYWx1ZVtzdGFydF0gPT09IGVuZFZhbHVlW3N0YXJ0XTtcbiAgICAgICAgc3RhcnQrK1xuICAgICAgKTtcbiAgICAgIHZhciBtaW5FbmQgPSBzdGFydExlbmd0aCAtIHN0YXJ0O1xuICAgICAgZm9yIChcbiAgICAgICAgZW5kID0gMTtcbiAgICAgICAgZW5kIDw9IG1pbkVuZCAmJlxuICAgICAgICBzdGFydFZhbHVlW3N0YXJ0TGVuZ3RoIC0gZW5kXSA9PT0gZW5kVmFsdWVbZW5kTGVuZ3RoIC0gZW5kXTtcbiAgICAgICAgZW5kKytcbiAgICAgICk7XG4gICAgICByZXR1cm4gKGZhbGxiYWNrVGV4dCA9IGVuZFZhbHVlLnNsaWNlKHN0YXJ0LCAxIDwgZW5kID8gMSAtIGVuZCA6IHZvaWQgMCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSB7XG4gICAgICB2YXIga2V5Q29kZSA9IG5hdGl2ZUV2ZW50LmtleUNvZGU7XG4gICAgICBcImNoYXJDb2RlXCIgaW4gbmF0aXZlRXZlbnRcbiAgICAgICAgPyAoKG5hdGl2ZUV2ZW50ID0gbmF0aXZlRXZlbnQuY2hhckNvZGUpLFxuICAgICAgICAgIDAgPT09IG5hdGl2ZUV2ZW50ICYmIDEzID09PSBrZXlDb2RlICYmIChuYXRpdmVFdmVudCA9IDEzKSlcbiAgICAgICAgOiAobmF0aXZlRXZlbnQgPSBrZXlDb2RlKTtcbiAgICAgIDEwID09PSBuYXRpdmVFdmVudCAmJiAobmF0aXZlRXZlbnQgPSAxMyk7XG4gICAgICByZXR1cm4gMzIgPD0gbmF0aXZlRXZlbnQgfHwgMTMgPT09IG5hdGl2ZUV2ZW50ID8gbmF0aXZlRXZlbnQgOiAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSgpIHtcbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlKCkge1xuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVTeW50aGV0aWNFdmVudChJbnRlcmZhY2UpIHtcbiAgICAgIGZ1bmN0aW9uIFN5bnRoZXRpY0Jhc2VFdmVudChcbiAgICAgICAgcmVhY3ROYW1lLFxuICAgICAgICByZWFjdEV2ZW50VHlwZSxcbiAgICAgICAgdGFyZ2V0SW5zdCxcbiAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fcmVhY3ROYW1lID0gcmVhY3ROYW1lO1xuICAgICAgICB0aGlzLl90YXJnZXRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgICAgICAgdGhpcy50eXBlID0gcmVhY3RFdmVudFR5cGU7XG4gICAgICAgIHRoaXMubmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgdGhpcy50YXJnZXQgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgICAgICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gSW50ZXJmYWNlKVxuICAgICAgICAgIEludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkgJiZcbiAgICAgICAgICAgICgocmVhY3ROYW1lID0gSW50ZXJmYWNlW3Byb3BOYW1lXSksXG4gICAgICAgICAgICAodGhpc1twcm9wTmFtZV0gPSByZWFjdE5hbWVcbiAgICAgICAgICAgICAgPyByZWFjdE5hbWUobmF0aXZlRXZlbnQpXG4gICAgICAgICAgICAgIDogbmF0aXZlRXZlbnRbcHJvcE5hbWVdKSk7XG4gICAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gKFxuICAgICAgICAgIG51bGwgIT0gbmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZFxuICAgICAgICAgICAgPyBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkXG4gICAgICAgICAgICA6ICExID09PSBuYXRpdmVFdmVudC5yZXR1cm5WYWx1ZVxuICAgICAgICApXG4gICAgICAgICAgPyBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZVxuICAgICAgICAgIDogZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICAgICAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIGFzc2lnbihTeW50aGV0aWNCYXNlRXZlbnQucHJvdG90eXBlLCB7XG4gICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gITA7XG4gICAgICAgICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcbiAgICAgICAgICBldmVudCAmJlxuICAgICAgICAgICAgKGV2ZW50LnByZXZlbnREZWZhdWx0XG4gICAgICAgICAgICAgID8gZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICA6IFwidW5rbm93blwiICE9PSB0eXBlb2YgZXZlbnQucmV0dXJuVmFsdWUgJiZcbiAgICAgICAgICAgICAgICAoZXZlbnQucmV0dXJuVmFsdWUgPSAhMSksXG4gICAgICAgICAgICAodGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSkpO1xuICAgICAgICB9LFxuICAgICAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuICAgICAgICAgIGV2ZW50ICYmXG4gICAgICAgICAgICAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uXG4gICAgICAgICAgICAgID8gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgOiBcInVua25vd25cIiAhPT0gdHlwZW9mIGV2ZW50LmNhbmNlbEJ1YmJsZSAmJlxuICAgICAgICAgICAgICAgIChldmVudC5jYW5jZWxCdWJibGUgPSAhMCksXG4gICAgICAgICAgICAodGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBlcnNpc3Q6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgICBpc1BlcnNpc3RlbnQ6IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBTeW50aGV0aWNCYXNlRXZlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vZGlmaWVyU3RhdGVHZXR0ZXIoa2V5QXJnKSB7XG4gICAgICB2YXIgbmF0aXZlRXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmdldE1vZGlmaWVyU3RhdGVcbiAgICAgICAgPyBuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKGtleUFyZylcbiAgICAgICAgOiAoa2V5QXJnID0gbW9kaWZpZXJLZXlUb1Byb3Bba2V5QXJnXSlcbiAgICAgICAgICA/ICEhbmF0aXZlRXZlbnRba2V5QXJnXVxuICAgICAgICAgIDogITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEV2ZW50TW9kaWZpZXJTdGF0ZSgpIHtcbiAgICAgIHJldHVybiBtb2RpZmllclN0YXRlR2V0dGVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICAgICAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICAgICAgY2FzZSBcImtleXVwXCI6XG4gICAgICAgICAgcmV0dXJuIC0xICE9PSBFTkRfS0VZQ09ERVMuaW5kZXhPZihuYXRpdmVFdmVudC5rZXlDb2RlKTtcbiAgICAgICAgY2FzZSBcImtleWRvd25cIjpcbiAgICAgICAgICByZXR1cm4gbmF0aXZlRXZlbnQua2V5Q29kZSAhPT0gU1RBUlRfS0VZQ09ERTtcbiAgICAgICAgY2FzZSBcImtleXByZXNzXCI6XG4gICAgICAgIGNhc2UgXCJtb3VzZWRvd25cIjpcbiAgICAgICAgY2FzZSBcImZvY3Vzb3V0XCI6XG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCkge1xuICAgICAgbmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudC5kZXRhaWw7XG4gICAgICByZXR1cm4gXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5hdGl2ZUV2ZW50ICYmIFwiZGF0YVwiIGluIG5hdGl2ZUV2ZW50XG4gICAgICAgID8gbmF0aXZlRXZlbnQuZGF0YVxuICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICAgICAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6XG4gICAgICAgICAgcmV0dXJuIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpO1xuICAgICAgICBjYXNlIFwia2V5cHJlc3NcIjpcbiAgICAgICAgICBpZiAobmF0aXZlRXZlbnQud2hpY2ggIT09IFNQQUNFQkFSX0NPREUpIHJldHVybiBudWxsO1xuICAgICAgICAgIGhhc1NwYWNlS2V5cHJlc3MgPSAhMDtcbiAgICAgICAgICByZXR1cm4gU1BBQ0VCQVJfQ0hBUjtcbiAgICAgICAgY2FzZSBcInRleHRJbnB1dFwiOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoZG9tRXZlbnROYW1lID0gbmF0aXZlRXZlbnQuZGF0YSksXG4gICAgICAgICAgICBkb21FdmVudE5hbWUgPT09IFNQQUNFQkFSX0NIQVIgJiYgaGFzU3BhY2VLZXlwcmVzc1xuICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgOiBkb21FdmVudE5hbWVcbiAgICAgICAgICApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICAgICAgaWYgKGlzQ29tcG9zaW5nKVxuICAgICAgICByZXR1cm4gXCJjb21wb3NpdGlvbmVuZFwiID09PSBkb21FdmVudE5hbWUgfHxcbiAgICAgICAgICAoIWNhblVzZUNvbXBvc2l0aW9uRXZlbnQgJiZcbiAgICAgICAgICAgIGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSlcbiAgICAgICAgICA/ICgoZG9tRXZlbnROYW1lID0gZ2V0RGF0YSgpKSxcbiAgICAgICAgICAgIChmYWxsYmFja1RleHQgPSBzdGFydFRleHQgPSByb290ID0gbnVsbCksXG4gICAgICAgICAgICAoaXNDb21wb3NpbmcgPSAhMSksXG4gICAgICAgICAgICBkb21FdmVudE5hbWUpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICAgICAgY2FzZSBcInBhc3RlXCI6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNhc2UgXCJrZXlwcmVzc1wiOlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmN0cmxLZXkgfHxcbiAgICAgICAgICAgICAgbmF0aXZlRXZlbnQuYWx0S2V5IHx8XG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50Lm1ldGFLZXlcbiAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgIChuYXRpdmVFdmVudC5jdHJsS2V5ICYmIG5hdGl2ZUV2ZW50LmFsdEtleSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChuYXRpdmVFdmVudC5jaGFyICYmIDEgPCBuYXRpdmVFdmVudC5jaGFyLmxlbmd0aClcbiAgICAgICAgICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmNoYXI7XG4gICAgICAgICAgICBpZiAobmF0aXZlRXZlbnQud2hpY2gpXG4gICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG5hdGl2ZUV2ZW50LndoaWNoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNhc2UgXCJjb21wb3NpdGlvbmVuZFwiOlxuICAgICAgICAgIHJldHVybiB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSAmJiBcImtvXCIgIT09IG5hdGl2ZUV2ZW50LmxvY2FsZVxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IG5hdGl2ZUV2ZW50LmRhdGE7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzVGV4dElucHV0RWxlbWVudChlbGVtKSB7XG4gICAgICB2YXIgbm9kZU5hbWUgPSBlbGVtICYmIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIFwiaW5wdXRcIiA9PT0gbm9kZU5hbWVcbiAgICAgICAgPyAhIXN1cHBvcnRlZElucHV0VHlwZXNbZWxlbS50eXBlXVxuICAgICAgICA6IFwidGV4dGFyZWFcIiA9PT0gbm9kZU5hbWVcbiAgICAgICAgICA/ICEwXG4gICAgICAgICAgOiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZChldmVudE5hbWVTdWZmaXgpIHtcbiAgICAgIGlmICghY2FuVXNlRE9NKSByZXR1cm4gITE7XG4gICAgICBldmVudE5hbWVTdWZmaXggPSBcIm9uXCIgKyBldmVudE5hbWVTdWZmaXg7XG4gICAgICB2YXIgaXNTdXBwb3J0ZWQgPSBldmVudE5hbWVTdWZmaXggaW4gZG9jdW1lbnQ7XG4gICAgICBpc1N1cHBvcnRlZCB8fFxuICAgICAgICAoKGlzU3VwcG9ydGVkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSksXG4gICAgICAgIGlzU3VwcG9ydGVkLnNldEF0dHJpYnV0ZShldmVudE5hbWVTdWZmaXgsIFwicmV0dXJuO1wiKSxcbiAgICAgICAgKGlzU3VwcG9ydGVkID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaXNTdXBwb3J0ZWRbZXZlbnROYW1lU3VmZml4XSkpO1xuICAgICAgcmV0dXJuIGlzU3VwcG9ydGVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoXG4gICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgaW5zdCxcbiAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgdGFyZ2V0XG4gICAgKSB7XG4gICAgICByZXN0b3JlVGFyZ2V0XG4gICAgICAgID8gcmVzdG9yZVF1ZXVlXG4gICAgICAgICAgPyByZXN0b3JlUXVldWUucHVzaCh0YXJnZXQpXG4gICAgICAgICAgOiAocmVzdG9yZVF1ZXVlID0gW3RhcmdldF0pXG4gICAgICAgIDogKHJlc3RvcmVUYXJnZXQgPSB0YXJnZXQpO1xuICAgICAgaW5zdCA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyhpbnN0LCBcIm9uQ2hhbmdlXCIpO1xuICAgICAgMCA8IGluc3QubGVuZ3RoICYmXG4gICAgICAgICgobmF0aXZlRXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnQoXG4gICAgICAgICAgXCJvbkNoYW5nZVwiLFxuICAgICAgICAgIFwiY2hhbmdlXCIsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgKSksXG4gICAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7IGV2ZW50OiBuYXRpdmVFdmVudCwgbGlzdGVuZXJzOiBpbnN0IH0pKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcnVuRXZlbnRJbkJhdGNoKGRpc3BhdGNoUXVldWUpIHtcbiAgICAgIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIDApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCkge1xuICAgICAgdmFyIHRhcmdldE5vZGUgPSBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpO1xuICAgICAgaWYgKHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKHRhcmdldE5vZGUpKSByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICAgICAgaWYgKFwiY2hhbmdlXCIgPT09IGRvbUV2ZW50TmFtZSkgcmV0dXJuIHRhcmdldEluc3Q7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCkge1xuICAgICAgYWN0aXZlRWxlbWVudCQxICYmXG4gICAgICAgIChhY3RpdmVFbGVtZW50JDEuZGV0YWNoRXZlbnQoXCJvbnByb3BlcnR5Y2hhbmdlXCIsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKSxcbiAgICAgICAgKGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSBhY3RpdmVFbGVtZW50JDEgPSBudWxsKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZVByb3BlcnR5Q2hhbmdlKG5hdGl2ZUV2ZW50KSB7XG4gICAgICBpZiAoXG4gICAgICAgIFwidmFsdWVcIiA9PT0gbmF0aXZlRXZlbnQucHJvcGVydHlOYW1lICYmXG4gICAgICAgIGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCQxKVxuICAgICAgKSB7XG4gICAgICAgIHZhciBkaXNwYXRjaFF1ZXVlID0gW107XG4gICAgICAgIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChcbiAgICAgICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgICAgIGFjdGl2ZUVsZW1lbnRJbnN0JDEsXG4gICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpXG4gICAgICAgICk7XG4gICAgICAgIGJhdGNoZWRVcGRhdGVzJDEocnVuRXZlbnRJbkJhdGNoLCBkaXNwYXRjaFF1ZXVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsKFxuICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGFyZ2V0SW5zdFxuICAgICkge1xuICAgICAgXCJmb2N1c2luXCIgPT09IGRvbUV2ZW50TmFtZVxuICAgICAgICA/IChzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpLFxuICAgICAgICAgIChhY3RpdmVFbGVtZW50JDEgPSB0YXJnZXQpLFxuICAgICAgICAgIChhY3RpdmVFbGVtZW50SW5zdCQxID0gdGFyZ2V0SW5zdCksXG4gICAgICAgICAgYWN0aXZlRWxlbWVudCQxLmF0dGFjaEV2ZW50KFwib25wcm9wZXJ0eWNoYW5nZVwiLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSkpXG4gICAgICAgIDogXCJmb2N1c291dFwiID09PSBkb21FdmVudE5hbWUgJiYgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvcklucHV0RXZlbnRQb2x5ZmlsbChkb21FdmVudE5hbWUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgXCJzZWxlY3Rpb25jaGFuZ2VcIiA9PT0gZG9tRXZlbnROYW1lIHx8XG4gICAgICAgIFwia2V5dXBcIiA9PT0gZG9tRXZlbnROYW1lIHx8XG4gICAgICAgIFwia2V5ZG93blwiID09PSBkb21FdmVudE5hbWVcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCQxKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvckNsaWNrRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gICAgICBpZiAoXCJjbGlja1wiID09PSBkb21FdmVudE5hbWUpIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gICAgICBpZiAoXCJpbnB1dFwiID09PSBkb21FdmVudE5hbWUgfHwgXCJjaGFuZ2VcIiA9PT0gZG9tRXZlbnROYW1lKVxuICAgICAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgICByZXR1cm4gKHggPT09IHkgJiYgKDAgIT09IHggfHwgMSAvIHggPT09IDEgLyB5KSkgfHwgKHggIT09IHggJiYgeSAhPT0geSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XG4gICAgICBpZiAob2JqZWN0SXMob2JqQSwgb2JqQikpIHJldHVybiAhMDtcbiAgICAgIGlmIChcbiAgICAgICAgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9iakEgfHxcbiAgICAgICAgbnVsbCA9PT0gb2JqQSB8fFxuICAgICAgICBcIm9iamVjdFwiICE9PSB0eXBlb2Ygb2JqQiB8fFxuICAgICAgICBudWxsID09PSBvYmpCXG4gICAgICApXG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpLFxuICAgICAgICBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xuICAgICAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSByZXR1cm4gITE7XG4gICAgICBmb3IgKGtleXNCID0gMDsga2V5c0IgPCBrZXlzQS5sZW5ndGg7IGtleXNCKyspIHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBrZXlzQVtrZXlzQl07XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaGFzT3duUHJvcGVydHkuY2FsbChvYmpCLCBjdXJyZW50S2V5KSB8fFxuICAgICAgICAgICFvYmplY3RJcyhvYmpBW2N1cnJlbnRLZXldLCBvYmpCW2N1cnJlbnRLZXldKVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgfVxuICAgICAgcmV0dXJuICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRMZWFmTm9kZShub2RlKSB7XG4gICAgICBmb3IgKDsgbm9kZSAmJiBub2RlLmZpcnN0Q2hpbGQ7ICkgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KHJvb3QsIG9mZnNldCkge1xuICAgICAgdmFyIG5vZGUgPSBnZXRMZWFmTm9kZShyb290KTtcbiAgICAgIHJvb3QgPSAwO1xuICAgICAgZm9yICh2YXIgbm9kZUVuZDsgbm9kZTsgKSB7XG4gICAgICAgIGlmICgzID09PSBub2RlLm5vZGVUeXBlKSB7XG4gICAgICAgICAgbm9kZUVuZCA9IHJvb3QgKyBub2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgICAgICAgICBpZiAocm9vdCA8PSBvZmZzZXQgJiYgbm9kZUVuZCA+PSBvZmZzZXQpXG4gICAgICAgICAgICByZXR1cm4geyBub2RlOiBub2RlLCBvZmZzZXQ6IG9mZnNldCAtIHJvb3QgfTtcbiAgICAgICAgICByb290ID0gbm9kZUVuZDtcbiAgICAgICAgfVxuICAgICAgICBhOiB7XG4gICAgICAgICAgZm9yICg7IG5vZGU7ICkge1xuICAgICAgICAgICAgaWYgKG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBub2RlID0gdm9pZCAwO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBnZXRMZWFmTm9kZShub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlKSB7XG4gICAgICByZXR1cm4gb3V0ZXJOb2RlICYmIGlubmVyTm9kZVxuICAgICAgICA/IG91dGVyTm9kZSA9PT0gaW5uZXJOb2RlXG4gICAgICAgICAgPyAhMFxuICAgICAgICAgIDogb3V0ZXJOb2RlICYmIDMgPT09IG91dGVyTm9kZS5ub2RlVHlwZVxuICAgICAgICAgICAgPyAhMVxuICAgICAgICAgICAgOiBpbm5lck5vZGUgJiYgMyA9PT0gaW5uZXJOb2RlLm5vZGVUeXBlXG4gICAgICAgICAgICAgID8gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlLnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgIDogXCJjb250YWluc1wiIGluIG91dGVyTm9kZVxuICAgICAgICAgICAgICAgID8gb3V0ZXJOb2RlLmNvbnRhaW5zKGlubmVyTm9kZSlcbiAgICAgICAgICAgICAgICA6IG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuICAgICAgICAgICAgICAgICAgPyAhIShvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oaW5uZXJOb2RlKSAmIDE2KVxuICAgICAgICAgICAgICAgICAgOiAhMVxuICAgICAgICA6ICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50RGVlcChjb250YWluZXJJbmZvKSB7XG4gICAgICBjb250YWluZXJJbmZvID1cbiAgICAgICAgbnVsbCAhPSBjb250YWluZXJJbmZvICYmXG4gICAgICAgIG51bGwgIT0gY29udGFpbmVySW5mby5vd25lckRvY3VtZW50ICYmXG4gICAgICAgIG51bGwgIT0gY29udGFpbmVySW5mby5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3XG4gICAgICAgICAgPyBjb250YWluZXJJbmZvLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXdcbiAgICAgICAgICA6IHdpbmRvdztcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBlbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChjb250YWluZXJJbmZvLmRvY3VtZW50KTtcbiAgICAgICAgZWxlbWVudCBpbnN0YW5jZW9mIGNvbnRhaW5lckluZm8uSFRNTElGcmFtZUVsZW1lbnQ7XG5cbiAgICAgICkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPVxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVsZW1lbnQuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KSBjb250YWluZXJJbmZvID0gZWxlbWVudC5jb250ZW50V2luZG93O1xuICAgICAgICBlbHNlIGJyZWFrO1xuICAgICAgICBlbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudChjb250YWluZXJJbmZvLmRvY3VtZW50KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZWxlbSkge1xuICAgICAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIG5vZGVOYW1lICYmXG4gICAgICAgICgoXCJpbnB1dFwiID09PSBub2RlTmFtZSAmJlxuICAgICAgICAgIChcInRleHRcIiA9PT0gZWxlbS50eXBlIHx8XG4gICAgICAgICAgICBcInNlYXJjaFwiID09PSBlbGVtLnR5cGUgfHxcbiAgICAgICAgICAgIFwidGVsXCIgPT09IGVsZW0udHlwZSB8fFxuICAgICAgICAgICAgXCJ1cmxcIiA9PT0gZWxlbS50eXBlIHx8XG4gICAgICAgICAgICBcInBhc3N3b3JkXCIgPT09IGVsZW0udHlwZSkpIHx8XG4gICAgICAgICAgXCJ0ZXh0YXJlYVwiID09PSBub2RlTmFtZSB8fFxuICAgICAgICAgIFwidHJ1ZVwiID09PSBlbGVtLmNvbnRlbnRFZGl0YWJsZSlcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbnN0cnVjdFNlbGVjdEV2ZW50KFxuICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICApIHtcbiAgICAgIHZhciBkb2MgPVxuICAgICAgICBuYXRpdmVFdmVudFRhcmdldC53aW5kb3cgPT09IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgPyBuYXRpdmVFdmVudFRhcmdldC5kb2N1bWVudFxuICAgICAgICAgIDogOSA9PT0gbmF0aXZlRXZlbnRUYXJnZXQubm9kZVR5cGVcbiAgICAgICAgICAgID8gbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgIDogbmF0aXZlRXZlbnRUYXJnZXQub3duZXJEb2N1bWVudDtcbiAgICAgIG1vdXNlRG93biB8fFxuICAgICAgICBudWxsID09IGFjdGl2ZUVsZW1lbnQgfHxcbiAgICAgICAgYWN0aXZlRWxlbWVudCAhPT0gZ2V0QWN0aXZlRWxlbWVudChkb2MpIHx8XG4gICAgICAgICgoZG9jID0gYWN0aXZlRWxlbWVudCksXG4gICAgICAgIFwic2VsZWN0aW9uU3RhcnRcIiBpbiBkb2MgJiYgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGRvYylcbiAgICAgICAgICA/IChkb2MgPSB7IHN0YXJ0OiBkb2Muc2VsZWN0aW9uU3RhcnQsIGVuZDogZG9jLnNlbGVjdGlvbkVuZCB9KVxuICAgICAgICAgIDogKChkb2MgPSAoXG4gICAgICAgICAgICAgIChkb2Mub3duZXJEb2N1bWVudCAmJiBkb2Mub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgfHxcbiAgICAgICAgICAgICAgd2luZG93XG4gICAgICAgICAgICApLmdldFNlbGVjdGlvbigpKSxcbiAgICAgICAgICAgIChkb2MgPSB7XG4gICAgICAgICAgICAgIGFuY2hvck5vZGU6IGRvYy5hbmNob3JOb2RlLFxuICAgICAgICAgICAgICBhbmNob3JPZmZzZXQ6IGRvYy5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgICAgIGZvY3VzTm9kZTogZG9jLmZvY3VzTm9kZSxcbiAgICAgICAgICAgICAgZm9jdXNPZmZzZXQ6IGRvYy5mb2N1c09mZnNldFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAobGFzdFNlbGVjdGlvbiAmJiBzaGFsbG93RXF1YWwobGFzdFNlbGVjdGlvbiwgZG9jKSkgfHxcbiAgICAgICAgICAoKGxhc3RTZWxlY3Rpb24gPSBkb2MpLFxuICAgICAgICAgIChkb2MgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoYWN0aXZlRWxlbWVudEluc3QsIFwib25TZWxlY3RcIikpLFxuICAgICAgICAgIDAgPCBkb2MubGVuZ3RoICYmXG4gICAgICAgICAgICAoKG5hdGl2ZUV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50KFxuICAgICAgICAgICAgICBcIm9uU2VsZWN0XCIsXG4gICAgICAgICAgICAgIFwic2VsZWN0XCIsXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goeyBldmVudDogbmF0aXZlRXZlbnQsIGxpc3RlbmVyczogZG9jIH0pLFxuICAgICAgICAgICAgKG5hdGl2ZUV2ZW50LnRhcmdldCA9IGFjdGl2ZUVsZW1lbnQpKSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYWtlUHJlZml4TWFwKHN0eWxlUHJvcCwgZXZlbnROYW1lKSB7XG4gICAgICB2YXIgcHJlZml4ZXMgPSB7fTtcbiAgICAgIHByZWZpeGVzW3N0eWxlUHJvcC50b0xvd2VyQ2FzZSgpXSA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcHJlZml4ZXNbXCJXZWJraXRcIiArIHN0eWxlUHJvcF0gPSBcIndlYmtpdFwiICsgZXZlbnROYW1lO1xuICAgICAgcHJlZml4ZXNbXCJNb3pcIiArIHN0eWxlUHJvcF0gPSBcIm1velwiICsgZXZlbnROYW1lO1xuICAgICAgcmV0dXJuIHByZWZpeGVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgICAgIGlmIChwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSkgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdO1xuICAgICAgaWYgKCF2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdKSByZXR1cm4gZXZlbnROYW1lO1xuICAgICAgdmFyIHByZWZpeE1hcCA9IHZlbmRvclByZWZpeGVzW2V2ZW50TmFtZV0sXG4gICAgICAgIHN0eWxlUHJvcDtcbiAgICAgIGZvciAoc3R5bGVQcm9wIGluIHByZWZpeE1hcClcbiAgICAgICAgaWYgKHByZWZpeE1hcC5oYXNPd25Qcm9wZXJ0eShzdHlsZVByb3ApICYmIHN0eWxlUHJvcCBpbiBzdHlsZSlcbiAgICAgICAgICByZXR1cm4gKHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdID0gcHJlZml4TWFwW3N0eWxlUHJvcF0pO1xuICAgICAgcmV0dXJuIGV2ZW50TmFtZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVnaXN0ZXJTaW1wbGVFdmVudChkb21FdmVudE5hbWUsIHJlYWN0TmFtZSkge1xuICAgICAgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuc2V0KGRvbUV2ZW50TmFtZSwgcmVhY3ROYW1lKTtcbiAgICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChyZWFjdE5hbWUsIFtkb21FdmVudE5hbWVdKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBlbmRJbmRleCA9IGNvbmN1cnJlbnRRdWV1ZXNJbmRleCxcbiAgICAgICAgICBpID0gKGNvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcyA9IGNvbmN1cnJlbnRRdWV1ZXNJbmRleCA9IDApO1xuICAgICAgICBpIDwgZW5kSW5kZXg7XG5cbiAgICAgICkge1xuICAgICAgICB2YXIgZmliZXIgPSBjb25jdXJyZW50UXVldWVzW2ldO1xuICAgICAgICBjb25jdXJyZW50UXVldWVzW2krK10gPSBudWxsO1xuICAgICAgICB2YXIgcXVldWUgPSBjb25jdXJyZW50UXVldWVzW2ldO1xuICAgICAgICBjb25jdXJyZW50UXVldWVzW2krK10gPSBudWxsO1xuICAgICAgICB2YXIgdXBkYXRlID0gY29uY3VycmVudFF1ZXVlc1tpXTtcbiAgICAgICAgY29uY3VycmVudFF1ZXVlc1tpKytdID0gbnVsbDtcbiAgICAgICAgdmFyIGxhbmUgPSBjb25jdXJyZW50UXVldWVzW2ldO1xuICAgICAgICBjb25jdXJyZW50UXVldWVzW2krK10gPSBudWxsO1xuICAgICAgICBpZiAobnVsbCAhPT0gcXVldWUgJiYgbnVsbCAhPT0gdXBkYXRlKSB7XG4gICAgICAgICAgdmFyIHBlbmRpbmcgPSBxdWV1ZS5wZW5kaW5nO1xuICAgICAgICAgIG51bGwgPT09IHBlbmRpbmdcbiAgICAgICAgICAgID8gKHVwZGF0ZS5uZXh0ID0gdXBkYXRlKVxuICAgICAgICAgICAgOiAoKHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0KSwgKHBlbmRpbmcubmV4dCA9IHVwZGF0ZSkpO1xuICAgICAgICAgIHF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgMCAhPT0gbGFuZSAmJiBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgdXBkYXRlLCBsYW5lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCBsYW5lKSB7XG4gICAgICBjb25jdXJyZW50UXVldWVzW2NvbmN1cnJlbnRRdWV1ZXNJbmRleCsrXSA9IGZpYmVyO1xuICAgICAgY29uY3VycmVudFF1ZXVlc1tjb25jdXJyZW50UXVldWVzSW5kZXgrK10gPSBxdWV1ZTtcbiAgICAgIGNvbmN1cnJlbnRRdWV1ZXNbY29uY3VycmVudFF1ZXVlc0luZGV4KytdID0gdXBkYXRlO1xuICAgICAgY29uY3VycmVudFF1ZXVlc1tjb25jdXJyZW50UXVldWVzSW5kZXgrK10gPSBsYW5lO1xuICAgICAgY29uY3VycmVudGx5VXBkYXRlZExhbmVzIHw9IGxhbmU7XG4gICAgICBmaWJlci5sYW5lcyB8PSBsYW5lO1xuICAgICAgZmliZXIgPSBmaWJlci5hbHRlcm5hdGU7XG4gICAgICBudWxsICE9PSBmaWJlciAmJiAoZmliZXIubGFuZXMgfD0gbGFuZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVucXVldWVDb25jdXJyZW50SG9va1VwZGF0ZShmaWJlciwgcXVldWUsIHVwZGF0ZSwgbGFuZSkge1xuICAgICAgZW5xdWV1ZVVwZGF0ZSQxKGZpYmVyLCBxdWV1ZSwgdXBkYXRlLCBsYW5lKTtcbiAgICAgIHJldHVybiBnZXRSb290Rm9yVXBkYXRlZEZpYmVyKGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCBsYW5lKSB7XG4gICAgICBlbnF1ZXVlVXBkYXRlJDEoZmliZXIsIG51bGwsIG51bGwsIGxhbmUpO1xuICAgICAgcmV0dXJuIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChzb3VyY2VGaWJlciwgdXBkYXRlLCBsYW5lKSB7XG4gICAgICBzb3VyY2VGaWJlci5sYW5lcyB8PSBsYW5lO1xuICAgICAgdmFyIGFsdGVybmF0ZSA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcbiAgICAgIG51bGwgIT09IGFsdGVybmF0ZSAmJiAoYWx0ZXJuYXRlLmxhbmVzIHw9IGxhbmUpO1xuICAgICAgZm9yICh2YXIgaXNIaWRkZW4gPSAhMSwgcGFyZW50ID0gc291cmNlRmliZXIucmV0dXJuOyBudWxsICE9PSBwYXJlbnQ7IClcbiAgICAgICAgKHBhcmVudC5jaGlsZExhbmVzIHw9IGxhbmUpLFxuICAgICAgICAgIChhbHRlcm5hdGUgPSBwYXJlbnQuYWx0ZXJuYXRlKSxcbiAgICAgICAgICBudWxsICE9PSBhbHRlcm5hdGUgJiYgKGFsdGVybmF0ZS5jaGlsZExhbmVzIHw9IGxhbmUpLFxuICAgICAgICAgIDIyID09PSBwYXJlbnQudGFnICYmXG4gICAgICAgICAgICAoKHNvdXJjZUZpYmVyID0gcGFyZW50LnN0YXRlTm9kZSksXG4gICAgICAgICAgICBudWxsID09PSBzb3VyY2VGaWJlciB8fFxuICAgICAgICAgICAgICBzb3VyY2VGaWJlci5fdmlzaWJpbGl0eSAmIE9mZnNjcmVlblZpc2libGUgfHxcbiAgICAgICAgICAgICAgKGlzSGlkZGVuID0gITApKSxcbiAgICAgICAgICAoc291cmNlRmliZXIgPSBwYXJlbnQpLFxuICAgICAgICAgIChwYXJlbnQgPSBwYXJlbnQucmV0dXJuKTtcbiAgICAgIHJldHVybiAzID09PSBzb3VyY2VGaWJlci50YWdcbiAgICAgICAgPyAoKHBhcmVudCA9IHNvdXJjZUZpYmVyLnN0YXRlTm9kZSksXG4gICAgICAgICAgaXNIaWRkZW4gJiZcbiAgICAgICAgICAgIG51bGwgIT09IHVwZGF0ZSAmJlxuICAgICAgICAgICAgKChpc0hpZGRlbiA9IDMxIC0gY2x6MzIobGFuZSkpLFxuICAgICAgICAgICAgKHNvdXJjZUZpYmVyID0gcGFyZW50LmhpZGRlblVwZGF0ZXMpLFxuICAgICAgICAgICAgKGFsdGVybmF0ZSA9IHNvdXJjZUZpYmVyW2lzSGlkZGVuXSksXG4gICAgICAgICAgICBudWxsID09PSBhbHRlcm5hdGVcbiAgICAgICAgICAgICAgPyAoc291cmNlRmliZXJbaXNIaWRkZW5dID0gW3VwZGF0ZV0pXG4gICAgICAgICAgICAgIDogYWx0ZXJuYXRlLnB1c2godXBkYXRlKSxcbiAgICAgICAgICAgICh1cGRhdGUubGFuZSA9IGxhbmUgfCA1MzY4NzA5MTIpKSxcbiAgICAgICAgICBwYXJlbnQpXG4gICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Um9vdEZvclVwZGF0ZWRGaWJlcihzb3VyY2VGaWJlcikge1xuICAgICAgaWYgKG5lc3RlZFVwZGF0ZUNvdW50ID4gTkVTVEVEX1VQREFURV9MSU1JVClcbiAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICgobmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gbmVzdGVkVXBkYXRlQ291bnQgPSAwKSxcbiAgICAgICAgICAocm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IG51bGwpLFxuICAgICAgICAgIEVycm9yKFxuICAgICAgICAgICAgXCJNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBjb21wb25lbnQgcmVwZWF0ZWRseSBjYWxscyBzZXRTdGF0ZSBpbnNpZGUgY29tcG9uZW50V2lsbFVwZGF0ZSBvciBjb21wb25lbnREaWRVcGRhdGUuIFJlYWN0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIG5lc3RlZCB1cGRhdGVzIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuXCJcbiAgICAgICAgICApKVxuICAgICAgICApO1xuICAgICAgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID4gTkVTVEVEX1BBU1NJVkVfVVBEQVRFX0xJTUlUICYmXG4gICAgICAgICgobmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMCksXG4gICAgICAgIChyb290V2l0aFBhc3NpdmVOZXN0ZWRVcGRhdGVzID0gbnVsbCksXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBjb21wb25lbnQgY2FsbHMgc2V0U3RhdGUgaW5zaWRlIHVzZUVmZmVjdCwgYnV0IHVzZUVmZmVjdCBlaXRoZXIgZG9lc24ndCBoYXZlIGEgZGVwZW5kZW5jeSBhcnJheSwgb3Igb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgY2hhbmdlcyBvbiBldmVyeSByZW5kZXIuXCJcbiAgICAgICAgKSk7XG4gICAgICBudWxsID09PSBzb3VyY2VGaWJlci5hbHRlcm5hdGUgJiZcbiAgICAgICAgMCAhPT0gKHNvdXJjZUZpYmVyLmZsYWdzICYgNDA5OCkgJiZcbiAgICAgICAgd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihzb3VyY2VGaWJlcik7XG4gICAgICBmb3IgKHZhciBub2RlID0gc291cmNlRmliZXIsIHBhcmVudCA9IG5vZGUucmV0dXJuOyBudWxsICE9PSBwYXJlbnQ7IClcbiAgICAgICAgbnVsbCA9PT0gbm9kZS5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAwICE9PSAobm9kZS5mbGFncyAmIDQwOTgpICYmXG4gICAgICAgICAgd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihzb3VyY2VGaWJlciksXG4gICAgICAgICAgKG5vZGUgPSBwYXJlbnQpLFxuICAgICAgICAgIChwYXJlbnQgPSBub2RlLnJldHVybik7XG4gICAgICByZXR1cm4gMyA9PT0gbm9kZS50YWcgPyBub2RlLnN0YXRlTm9kZSA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gICAgICBpZiAobnVsbCA9PT0gcmVzb2x2ZUZhbWlseSkgcmV0dXJuIHR5cGU7XG4gICAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseSh0eXBlKTtcbiAgICAgIHJldHVybiB2b2lkIDAgPT09IGZhbWlseSA/IHR5cGUgOiBmYW1pbHkuY3VycmVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICAgICAgaWYgKG51bGwgPT09IHJlc29sdmVGYW1pbHkpIHJldHVybiB0eXBlO1xuICAgICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkodHlwZSk7XG4gICAgICByZXR1cm4gdm9pZCAwID09PSBmYW1pbHlcbiAgICAgICAgPyBudWxsICE9PSB0eXBlICYmXG4gICAgICAgICAgdm9pZCAwICE9PSB0eXBlICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZS5yZW5kZXIgJiZcbiAgICAgICAgICAoKGZhbWlseSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlLnJlbmRlcikpLFxuICAgICAgICAgIHR5cGUucmVuZGVyICE9PSBmYW1pbHkpXG4gICAgICAgICAgPyAoKGZhbWlseSA9IHsgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsIHJlbmRlcjogZmFtaWx5IH0pLFxuICAgICAgICAgICAgdm9pZCAwICE9PSB0eXBlLmRpc3BsYXlOYW1lICYmXG4gICAgICAgICAgICAgIChmYW1pbHkuZGlzcGxheU5hbWUgPSB0eXBlLmRpc3BsYXlOYW1lKSxcbiAgICAgICAgICAgIGZhbWlseSlcbiAgICAgICAgICA6IHR5cGVcbiAgICAgICAgOiBmYW1pbHkuY3VycmVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGZpYmVyLCBlbGVtZW50KSB7XG4gICAgICBpZiAobnVsbCA9PT0gcmVzb2x2ZUZhbWlseSkgcmV0dXJuICExO1xuICAgICAgdmFyIHByZXZUeXBlID0gZmliZXIuZWxlbWVudFR5cGU7XG4gICAgICBlbGVtZW50ID0gZWxlbWVudC50eXBlO1xuICAgICAgdmFyIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gITEsXG4gICAgICAgICQkdHlwZW9mTmV4dFR5cGUgPVxuICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBlbGVtZW50ICYmIG51bGwgIT09IGVsZW1lbnRcbiAgICAgICAgICAgID8gZWxlbWVudC4kJHR5cGVvZlxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGVsZW1lbnQgJiYgKG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gITApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZWxlbWVudFxuICAgICAgICAgICAgPyAobmVlZHNDb21wYXJlRmFtaWxpZXMgPSAhMClcbiAgICAgICAgICAgIDogJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFICYmXG4gICAgICAgICAgICAgIChuZWVkc0NvbXBhcmVGYW1pbGllcyA9ICEwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFXG4gICAgICAgICAgICA/IChuZWVkc0NvbXBhcmVGYW1pbGllcyA9ICEwKVxuICAgICAgICAgICAgOiAkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUgJiZcbiAgICAgICAgICAgICAgKG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gITApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX01FTU9fVFlQRVxuICAgICAgICAgICAgPyAobmVlZHNDb21wYXJlRmFtaWxpZXMgPSAhMClcbiAgICAgICAgICAgIDogJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFICYmXG4gICAgICAgICAgICAgIChuZWVkc0NvbXBhcmVGYW1pbGllcyA9ICEwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmVlZHNDb21wYXJlRmFtaWxpZXMgJiZcbiAgICAgICAgKChmaWJlciA9IHJlc29sdmVGYW1pbHkocHJldlR5cGUpKSxcbiAgICAgICAgdm9pZCAwICE9PSBmaWJlciAmJiBmaWJlciA9PT0gcmVzb2x2ZUZhbWlseShlbGVtZW50KSlcbiAgICAgICAgPyAhMFxuICAgICAgICA6ICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcikge1xuICAgICAgbnVsbCAhPT0gcmVzb2x2ZUZhbWlseSAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBXZWFrU2V0ICYmXG4gICAgICAgIChudWxsID09PSBmYWlsZWRCb3VuZGFyaWVzICYmIChmYWlsZWRCb3VuZGFyaWVzID0gbmV3IFdlYWtTZXQoKSksXG4gICAgICAgIGZhaWxlZEJvdW5kYXJpZXMuYWRkKGZpYmVyKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoXG4gICAgICBmaWJlcixcbiAgICAgIHVwZGF0ZWRGYW1pbGllcyxcbiAgICAgIHN0YWxlRmFtaWxpZXNcbiAgICApIHtcbiAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGUsXG4gICAgICAgIGNoaWxkID0gZmliZXIuY2hpbGQsXG4gICAgICAgIHNpYmxpbmcgPSBmaWJlci5zaWJsaW5nLFxuICAgICAgICB0YWcgPSBmaWJlci50YWcsXG4gICAgICAgIHR5cGUgPSBmaWJlci50eXBlLFxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gbnVsbDtcbiAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgIH1cbiAgICAgIGlmIChudWxsID09PSByZXNvbHZlRmFtaWx5KVxuICAgICAgICB0aHJvdyBFcnJvcihcIkV4cGVjdGVkIHJlc29sdmVGYW1pbHkgdG8gYmUgc2V0IGR1cmluZyBob3QgcmVsb2FkLlwiKTtcbiAgICAgIHZhciBuZWVkc1JlbmRlciA9ICExO1xuICAgICAgdHlwZSA9ICExO1xuICAgICAgbnVsbCAhPT0gY2FuZGlkYXRlVHlwZSAmJlxuICAgICAgICAoKGNhbmRpZGF0ZVR5cGUgPSByZXNvbHZlRmFtaWx5KGNhbmRpZGF0ZVR5cGUpKSxcbiAgICAgICAgdm9pZCAwICE9PSBjYW5kaWRhdGVUeXBlICYmXG4gICAgICAgICAgKHN0YWxlRmFtaWxpZXMuaGFzKGNhbmRpZGF0ZVR5cGUpXG4gICAgICAgICAgICA/ICh0eXBlID0gITApXG4gICAgICAgICAgICA6IHVwZGF0ZWRGYW1pbGllcy5oYXMoY2FuZGlkYXRlVHlwZSkgJiZcbiAgICAgICAgICAgICAgKDEgPT09IHRhZyA/ICh0eXBlID0gITApIDogKG5lZWRzUmVuZGVyID0gITApKSkpO1xuICAgICAgbnVsbCAhPT0gZmFpbGVkQm91bmRhcmllcyAmJlxuICAgICAgICAoZmFpbGVkQm91bmRhcmllcy5oYXMoZmliZXIpIHx8XG4gICAgICAgICAgKG51bGwgIT09IGFsdGVybmF0ZSAmJiBmYWlsZWRCb3VuZGFyaWVzLmhhcyhhbHRlcm5hdGUpKSkgJiZcbiAgICAgICAgKHR5cGUgPSAhMCk7XG4gICAgICB0eXBlICYmIChmaWJlci5fZGVidWdOZWVkc1JlbW91bnQgPSAhMCk7XG4gICAgICBpZiAodHlwZSB8fCBuZWVkc1JlbmRlcilcbiAgICAgICAgKGFsdGVybmF0ZSA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgMikpLFxuICAgICAgICAgIG51bGwgIT09IGFsdGVybmF0ZSAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoYWx0ZXJuYXRlLCBmaWJlciwgMik7XG4gICAgICBudWxsID09PSBjaGlsZCB8fFxuICAgICAgICB0eXBlIHx8XG4gICAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoXG4gICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgdXBkYXRlZEZhbWlsaWVzLFxuICAgICAgICAgIHN0YWxlRmFtaWxpZXNcbiAgICAgICAgKTtcbiAgICAgIG51bGwgIT09IHNpYmxpbmcgJiZcbiAgICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShcbiAgICAgICAgICBzaWJsaW5nLFxuICAgICAgICAgIHVwZGF0ZWRGYW1pbGllcyxcbiAgICAgICAgICBzdGFsZUZhbWlsaWVzXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIEZpYmVyTm9kZSh0YWcsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSB7XG4gICAgICB0aGlzLnRhZyA9IHRhZztcbiAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgICAgdGhpcy5zaWJsaW5nID1cbiAgICAgICAgdGhpcy5jaGlsZCA9XG4gICAgICAgIHRoaXMucmV0dXJuID1cbiAgICAgICAgdGhpcy5zdGF0ZU5vZGUgPVxuICAgICAgICB0aGlzLnR5cGUgPVxuICAgICAgICB0aGlzLmVsZW1lbnRUeXBlID1cbiAgICAgICAgICBudWxsO1xuICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgICB0aGlzLnJlZkNsZWFudXAgPSB0aGlzLnJlZiA9IG51bGw7XG4gICAgICB0aGlzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wcztcbiAgICAgIHRoaXMuZGVwZW5kZW5jaWVzID1cbiAgICAgICAgdGhpcy5tZW1vaXplZFN0YXRlID1cbiAgICAgICAgdGhpcy51cGRhdGVRdWV1ZSA9XG4gICAgICAgIHRoaXMubWVtb2l6ZWRQcm9wcyA9XG4gICAgICAgICAgbnVsbDtcbiAgICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgICB0aGlzLnN1YnRyZWVGbGFncyA9IHRoaXMuZmxhZ3MgPSAwO1xuICAgICAgdGhpcy5kZWxldGlvbnMgPSBudWxsO1xuICAgICAgdGhpcy5jaGlsZExhbmVzID0gdGhpcy5sYW5lcyA9IDA7XG4gICAgICB0aGlzLmFsdGVybmF0ZSA9IG51bGw7XG4gICAgICB0aGlzLmFjdHVhbER1cmF0aW9uID0gLTA7XG4gICAgICB0aGlzLmFjdHVhbFN0YXJ0VGltZSA9IC0xLjE7XG4gICAgICB0aGlzLnRyZWVCYXNlRHVyYXRpb24gPSB0aGlzLnNlbGZCYXNlRHVyYXRpb24gPSAtMDtcbiAgICAgIHRoaXMuX2RlYnVnVGFzayA9XG4gICAgICAgIHRoaXMuX2RlYnVnU3RhY2sgPVxuICAgICAgICB0aGlzLl9kZWJ1Z093bmVyID1cbiAgICAgICAgdGhpcy5fZGVidWdJbmZvID1cbiAgICAgICAgICBudWxsO1xuICAgICAgdGhpcy5fZGVidWdOZWVkc1JlbW91bnQgPSAhMTtcbiAgICAgIHRoaXMuX2RlYnVnSG9va1R5cGVzID0gbnVsbDtcbiAgICAgIGhhc0JhZE1hcFBvbHlmaWxsIHx8XG4gICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyB8fFxuICAgICAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnModGhpcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgICAgIENvbXBvbmVudCA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gICAgICByZXR1cm4gISghQ29tcG9uZW50IHx8ICFDb21wb25lbnQuaXNSZWFjdENvbXBvbmVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQsIHBlbmRpbmdQcm9wcykge1xuICAgICAgdmFyIHdvcmtJblByb2dyZXNzID0gY3VycmVudC5hbHRlcm5hdGU7XG4gICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MgPSBjcmVhdGVGaWJlcihcbiAgICAgICAgICAgIGN1cnJlbnQudGFnLFxuICAgICAgICAgICAgcGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgY3VycmVudC5rZXksXG4gICAgICAgICAgICBjdXJyZW50Lm1vZGVcbiAgICAgICAgICApKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPSBjdXJyZW50LmVsZW1lbnRUeXBlKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZSksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnQuc3RhdGVOb2RlKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuX2RlYnVnT3duZXIgPSBjdXJyZW50Ll9kZWJ1Z093bmVyKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuX2RlYnVnU3RhY2sgPSBjdXJyZW50Ll9kZWJ1Z1N0YWNrKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuX2RlYnVnVGFzayA9IGN1cnJlbnQuX2RlYnVnVGFzayksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLl9kZWJ1Z0hvb2tUeXBlcyA9IGN1cnJlbnQuX2RlYnVnSG9va1R5cGVzKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gY3VycmVudCksXG4gICAgICAgICAgKGN1cnJlbnQuYWx0ZXJuYXRlID0gd29ya0luUHJvZ3Jlc3MpKVxuICAgICAgICA6ICgod29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzID0gcGVuZGluZ1Byb3BzKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZSksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzID0gMCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyA9IDApLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnMgPSBudWxsKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuYWN0dWFsRHVyYXRpb24gPSAtMCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmFjdHVhbFN0YXJ0VGltZSA9IC0xLjEpKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gY3VycmVudC5mbGFncyAmIDY1MDExNzEyO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGN1cnJlbnQuY2hpbGRMYW5lcztcbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcztcbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICAgICAgcGVuZGluZ1Byb3BzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPVxuICAgICAgICBudWxsID09PSBwZW5kaW5nUHJvcHNcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgbGFuZXM6IHBlbmRpbmdQcm9wcy5sYW5lcyxcbiAgICAgICAgICAgICAgZmlyc3RDb250ZXh0OiBwZW5kaW5nUHJvcHMuZmlyc3RDb250ZXh0LFxuICAgICAgICAgICAgICBfZGVidWdUaGVuYWJsZVN0YXRlOiBwZW5kaW5nUHJvcHMuX2RlYnVnVGhlbmFibGVTdGF0ZVxuICAgICAgICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLnNpYmxpbmcgPSBjdXJyZW50LnNpYmxpbmc7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5pbmRleCA9IGN1cnJlbnQuaW5kZXg7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5yZWYgPSBjdXJyZW50LnJlZjtcbiAgICAgIHdvcmtJblByb2dyZXNzLnJlZkNsZWFudXAgPSBjdXJyZW50LnJlZkNsZWFudXA7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudC5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0luZm8gPSBjdXJyZW50Ll9kZWJ1Z0luZm87XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdOZWVkc1JlbW91bnQgPSBjdXJyZW50Ll9kZWJ1Z05lZWRzUmVtb3VudDtcbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc2V0V29ya0luUHJvZ3Jlc3Mod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSA2NTAxMTcxNDtcbiAgICAgIHZhciBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuICAgICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IDApLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJlbmRlckxhbmVzKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3Muc3VidHJlZUZsYWdzID0gMCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBudWxsKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGwpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGwpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBudWxsKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSAwKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IDApKVxuICAgICAgICA6ICgod29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGN1cnJlbnQuY2hpbGRMYW5lcyksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcyksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnN1YnRyZWVGbGFncyA9IDApLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnMgPSBudWxsKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWUpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlKSxcbiAgICAgICAgICAocmVuZGVyTGFuZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcyksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9XG4gICAgICAgICAgICBudWxsID09PSByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBsYW5lczogcmVuZGVyTGFuZXMubGFuZXMsXG4gICAgICAgICAgICAgICAgICBmaXJzdENvbnRleHQ6IHJlbmRlckxhbmVzLmZpcnN0Q29udGV4dCxcbiAgICAgICAgICAgICAgICAgIF9kZWJ1Z1RoZW5hYmxlU3RhdGU6IHJlbmRlckxhbmVzLl9kZWJ1Z1RoZW5hYmxlU3RhdGVcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnQuc2VsZkJhc2VEdXJhdGlvbiksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb24pKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKFxuICAgICAgdHlwZSxcbiAgICAgIGtleSxcbiAgICAgIHBlbmRpbmdQcm9wcyxcbiAgICAgIG93bmVyLFxuICAgICAgbW9kZSxcbiAgICAgIGxhbmVzXG4gICAgKSB7XG4gICAgICB2YXIgZmliZXJUYWcgPSAwLFxuICAgICAgICByZXNvbHZlZFR5cGUgPSB0eXBlO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIHNob3VsZENvbnN0cnVjdCh0eXBlKSAmJiAoZmliZXJUYWcgPSAxKSxcbiAgICAgICAgICAocmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSkpO1xuICAgICAgZWxzZSBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIChmaWJlclRhZyA9IGdldEhvc3RDb250ZXh0KCkpLFxuICAgICAgICAgIChmaWJlclRhZyA9IGlzSG9zdEhvaXN0YWJsZVR5cGUodHlwZSwgcGVuZGluZ1Byb3BzLCBmaWJlclRhZylcbiAgICAgICAgICAgID8gMjZcbiAgICAgICAgICAgIDogXCJodG1sXCIgPT09IHR5cGUgfHwgXCJoZWFkXCIgPT09IHR5cGUgfHwgXCJib2R5XCIgPT09IHR5cGVcbiAgICAgICAgICAgICAgPyAyN1xuICAgICAgICAgICAgICA6IDUpO1xuICAgICAgZWxzZVxuICAgICAgICBhOiBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0FDVElWSVRZX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoa2V5ID0gY3JlYXRlRmliZXIoMzEsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSksXG4gICAgICAgICAgICAgIChrZXkuZWxlbWVudFR5cGUgPSBSRUFDVF9BQ1RJVklUWV9UWVBFKSxcbiAgICAgICAgICAgICAgKGtleS5sYW5lcyA9IGxhbmVzKSxcbiAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChcbiAgICAgICAgICAgICAgcGVuZGluZ1Byb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgICBtb2RlLFxuICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICAgIGZpYmVyVGFnID0gODtcbiAgICAgICAgICAgIG1vZGUgfD0gU3RyaWN0TGVnYWN5TW9kZTtcbiAgICAgICAgICAgIG1vZGUgfD0gU3RyaWN0RWZmZWN0c01vZGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAodHlwZSA9IHBlbmRpbmdQcm9wcyksXG4gICAgICAgICAgICAgIChvd25lciA9IG1vZGUpLFxuICAgICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgdHlwZS5pZCAmJlxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAnUHJvZmlsZXIgbXVzdCBzcGVjaWZ5IGFuIFwiaWRcIiBvZiB0eXBlIGBzdHJpbmdgIGFzIGEgcHJvcC4gUmVjZWl2ZWQgdGhlIHR5cGUgYCVzYCBpbnN0ZWFkLicsXG4gICAgICAgICAgICAgICAgICB0eXBlb2YgdHlwZS5pZFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIChrZXkgPSBjcmVhdGVGaWJlcigxMiwgdHlwZSwga2V5LCBvd25lciB8IFByb2ZpbGVNb2RlKSksXG4gICAgICAgICAgICAgIChrZXkuZWxlbWVudFR5cGUgPSBSRUFDVF9QUk9GSUxFUl9UWVBFKSxcbiAgICAgICAgICAgICAgKGtleS5sYW5lcyA9IGxhbmVzKSxcbiAgICAgICAgICAgICAgKGtleS5zdGF0ZU5vZGUgPSB7IGVmZmVjdER1cmF0aW9uOiAwLCBwYXNzaXZlRWZmZWN0RHVyYXRpb246IDAgfSksXG4gICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoa2V5ID0gY3JlYXRlRmliZXIoMTMsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKSksXG4gICAgICAgICAgICAgIChrZXkuZWxlbWVudFR5cGUgPSBSRUFDVF9TVVNQRU5TRV9UWVBFKSxcbiAgICAgICAgICAgICAgKGtleS5sYW5lcyA9IGxhbmVzKSxcbiAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGtleSA9IGNyZWF0ZUZpYmVyKDE5LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkpLFxuICAgICAgICAgICAgICAoa2V5LmVsZW1lbnRUeXBlID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFKSxcbiAgICAgICAgICAgICAgKGtleS5sYW5lcyA9IGxhbmVzKSxcbiAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICApO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUgJiYgbnVsbCAhPT0gdHlwZSlcbiAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgICAgICBmaWJlclRhZyA9IDEwO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlNVTUVSX1RZUEU6XG4gICAgICAgICAgICAgICAgICBmaWJlclRhZyA9IDk7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gMTE7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyhyZXNvbHZlZFR5cGUpO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gMTQ7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICAgICAgZmliZXJUYWcgPSAxNjtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlZFR5cGUgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB2b2lkIDAgPT09IHR5cGUgfHxcbiAgICAgICAgICAgICAgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICAgIDAgPT09IE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlICs9XG4gICAgICAgICAgICAgICAgXCIgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgICAgICAgICAgbnVsbCA9PT0gdHlwZVxuICAgICAgICAgICAgICA/IChwZW5kaW5nUHJvcHMgPSBcIm51bGxcIilcbiAgICAgICAgICAgICAgOiBpc0FycmF5SW1wbCh0eXBlKVxuICAgICAgICAgICAgICAgID8gKHBlbmRpbmdQcm9wcyA9IFwiYXJyYXlcIilcbiAgICAgICAgICAgICAgICA6IHZvaWQgMCAhPT0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEVcbiAgICAgICAgICAgICAgICAgID8gKChwZW5kaW5nUHJvcHMgPVxuICAgICAgICAgICAgICAgICAgICAgIFwiPFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAoZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgXCJVbmtub3duXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICBcIiAvPlwiKSxcbiAgICAgICAgICAgICAgICAgICAgKHJlc29sdmVkVHlwZSA9XG4gICAgICAgICAgICAgICAgICAgICAgXCIgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD9cIikpXG4gICAgICAgICAgICAgICAgICA6IChwZW5kaW5nUHJvcHMgPSB0eXBlb2YgdHlwZSk7XG4gICAgICAgICAgICAoZmliZXJUYWcgPSBvd25lciA/IGdldENvbXBvbmVudE5hbWVGcm9tT3duZXIob3duZXIpIDogbnVsbCkgJiZcbiAgICAgICAgICAgICAgKHJlc29sdmVkVHlwZSArPVxuICAgICAgICAgICAgICAgIFwiXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYFwiICsgZmliZXJUYWcgKyBcImAuXCIpO1xuICAgICAgICAgICAgZmliZXJUYWcgPSAyOTtcbiAgICAgICAgICAgIHBlbmRpbmdQcm9wcyA9IEVycm9yKFxuICAgICAgICAgICAgICBcIkVsZW1lbnQgdHlwZSBpcyBpbnZhbGlkOiBleHBlY3RlZCBhIHN0cmluZyAoZm9yIGJ1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgY29tcG9uZW50cykgYnV0IGdvdDogXCIgK1xuICAgICAgICAgICAgICAgIChwZW5kaW5nUHJvcHMgKyBcIi5cIiArIHJlc29sdmVkVHlwZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXNvbHZlZFR5cGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICBrZXkgPSBjcmVhdGVGaWJlcihmaWJlclRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuICAgICAga2V5LmVsZW1lbnRUeXBlID0gdHlwZTtcbiAgICAgIGtleS50eXBlID0gcmVzb2x2ZWRUeXBlO1xuICAgICAga2V5LmxhbmVzID0gbGFuZXM7XG4gICAgICBrZXkuX2RlYnVnT3duZXIgPSBvd25lcjtcbiAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgbW9kZSwgbGFuZXMpIHtcbiAgICAgIG1vZGUgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoXG4gICAgICAgIGVsZW1lbnQudHlwZSxcbiAgICAgICAgZWxlbWVudC5rZXksXG4gICAgICAgIGVsZW1lbnQucHJvcHMsXG4gICAgICAgIGVsZW1lbnQuX293bmVyLFxuICAgICAgICBtb2RlLFxuICAgICAgICBsYW5lc1xuICAgICAgKTtcbiAgICAgIG1vZGUuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIG1vZGUuX2RlYnVnU3RhY2sgPSBlbGVtZW50Ll9kZWJ1Z1N0YWNrO1xuICAgICAgbW9kZS5fZGVidWdUYXNrID0gZWxlbWVudC5fZGVidWdUYXNrO1xuICAgICAgcmV0dXJuIG1vZGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGVsZW1lbnRzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gICAgICBlbGVtZW50cyA9IGNyZWF0ZUZpYmVyKDcsIGVsZW1lbnRzLCBrZXksIG1vZGUpO1xuICAgICAgZWxlbWVudHMubGFuZXMgPSBsYW5lcztcbiAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tVGV4dChjb250ZW50LCBtb2RlLCBsYW5lcykge1xuICAgICAgY29udGVudCA9IGNyZWF0ZUZpYmVyKDYsIGNvbnRlbnQsIG51bGwsIG1vZGUpO1xuICAgICAgY29udGVudC5sYW5lcyA9IGxhbmVzO1xuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbURlaHlkcmF0ZWRGcmFnbWVudChkZWh5ZHJhdGVkTm9kZSkge1xuICAgICAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoMTgsIG51bGwsIG51bGwsIE5vTW9kZSk7XG4gICAgICBmaWJlci5zdGF0ZU5vZGUgPSBkZWh5ZHJhdGVkTm9kZTtcbiAgICAgIHJldHVybiBmaWJlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgbW9kZSwgbGFuZXMpIHtcbiAgICAgIG1vZGUgPSBjcmVhdGVGaWJlcihcbiAgICAgICAgNCxcbiAgICAgICAgbnVsbCAhPT0gcG9ydGFsLmNoaWxkcmVuID8gcG9ydGFsLmNoaWxkcmVuIDogW10sXG4gICAgICAgIHBvcnRhbC5rZXksXG4gICAgICAgIG1vZGVcbiAgICAgICk7XG4gICAgICBtb2RlLmxhbmVzID0gbGFuZXM7XG4gICAgICBtb2RlLnN0YXRlTm9kZSA9IHtcbiAgICAgICAgY29udGFpbmVySW5mbzogcG9ydGFsLmNvbnRhaW5lckluZm8sXG4gICAgICAgIHBlbmRpbmdDaGlsZHJlbjogbnVsbCxcbiAgICAgICAgaW1wbGVtZW50YXRpb246IHBvcnRhbC5pbXBsZW1lbnRhdGlvblxuICAgICAgfTtcbiAgICAgIHJldHVybiBtb2RlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcih2YWx1ZSwgc291cmNlKSB7XG4gICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHZhbHVlICYmIG51bGwgIT09IHZhbHVlKSB7XG4gICAgICAgIHZhciBleGlzdGluZyA9IENhcHR1cmVkU3RhY2tzLmdldCh2YWx1ZSk7XG4gICAgICAgIGlmICh2b2lkIDAgIT09IGV4aXN0aW5nKSByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgIHNvdXJjZSA9IHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgc3RhY2s6IGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChzb3VyY2UpXG4gICAgICAgIH07XG4gICAgICAgIENhcHR1cmVkU3RhY2tzLnNldCh2YWx1ZSwgc291cmNlKTtcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgIHN0YWNrOiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qoc291cmNlKVxuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaFRyZWVGb3JrKHdvcmtJblByb2dyZXNzLCB0b3RhbENoaWxkcmVuKSB7XG4gICAgICB3YXJuSWZOb3RIeWRyYXRpbmcoKTtcbiAgICAgIGZvcmtTdGFja1tmb3JrU3RhY2tJbmRleCsrXSA9IHRyZWVGb3JrQ291bnQ7XG4gICAgICBmb3JrU3RhY2tbZm9ya1N0YWNrSW5kZXgrK10gPSB0cmVlRm9ya1Byb3ZpZGVyO1xuICAgICAgdHJlZUZvcmtQcm92aWRlciA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgdHJlZUZvcmtDb3VudCA9IHRvdGFsQ2hpbGRyZW47XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hUcmVlSWQod29ya0luUHJvZ3Jlc3MsIHRvdGFsQ2hpbGRyZW4sIGluZGV4KSB7XG4gICAgICB3YXJuSWZOb3RIeWRyYXRpbmcoKTtcbiAgICAgIGlkU3RhY2tbaWRTdGFja0luZGV4KytdID0gdHJlZUNvbnRleHRJZDtcbiAgICAgIGlkU3RhY2tbaWRTdGFja0luZGV4KytdID0gdHJlZUNvbnRleHRPdmVyZmxvdztcbiAgICAgIGlkU3RhY2tbaWRTdGFja0luZGV4KytdID0gdHJlZUNvbnRleHRQcm92aWRlcjtcbiAgICAgIHRyZWVDb250ZXh0UHJvdmlkZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIHZhciBiYXNlSWRXaXRoTGVhZGluZ0JpdCA9IHRyZWVDb250ZXh0SWQ7XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IHRyZWVDb250ZXh0T3ZlcmZsb3c7XG4gICAgICB2YXIgYmFzZUxlbmd0aCA9IDMyIC0gY2x6MzIoYmFzZUlkV2l0aExlYWRpbmdCaXQpIC0gMTtcbiAgICAgIGJhc2VJZFdpdGhMZWFkaW5nQml0ICY9IH4oMSA8PCBiYXNlTGVuZ3RoKTtcbiAgICAgIGluZGV4ICs9IDE7XG4gICAgICB2YXIgbGVuZ3RoID0gMzIgLSBjbHozMih0b3RhbENoaWxkcmVuKSArIGJhc2VMZW5ndGg7XG4gICAgICBpZiAoMzAgPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIG51bWJlck9mT3ZlcmZsb3dCaXRzID0gYmFzZUxlbmd0aCAtIChiYXNlTGVuZ3RoICUgNSk7XG4gICAgICAgIGxlbmd0aCA9IChcbiAgICAgICAgICBiYXNlSWRXaXRoTGVhZGluZ0JpdCAmXG4gICAgICAgICAgKCgxIDw8IG51bWJlck9mT3ZlcmZsb3dCaXRzKSAtIDEpXG4gICAgICAgICkudG9TdHJpbmcoMzIpO1xuICAgICAgICBiYXNlSWRXaXRoTGVhZGluZ0JpdCA+Pj0gbnVtYmVyT2ZPdmVyZmxvd0JpdHM7XG4gICAgICAgIGJhc2VMZW5ndGggLT0gbnVtYmVyT2ZPdmVyZmxvd0JpdHM7XG4gICAgICAgIHRyZWVDb250ZXh0SWQgPVxuICAgICAgICAgICgxIDw8ICgzMiAtIGNsejMyKHRvdGFsQ2hpbGRyZW4pICsgYmFzZUxlbmd0aCkpIHxcbiAgICAgICAgICAoaW5kZXggPDwgYmFzZUxlbmd0aCkgfFxuICAgICAgICAgIGJhc2VJZFdpdGhMZWFkaW5nQml0O1xuICAgICAgICB0cmVlQ29udGV4dE92ZXJmbG93ID0gbGVuZ3RoICsgd29ya0luUHJvZ3Jlc3M7XG4gICAgICB9IGVsc2VcbiAgICAgICAgKHRyZWVDb250ZXh0SWQgPVxuICAgICAgICAgICgxIDw8IGxlbmd0aCkgfCAoaW5kZXggPDwgYmFzZUxlbmd0aCkgfCBiYXNlSWRXaXRoTGVhZGluZ0JpdCksXG4gICAgICAgICAgKHRyZWVDb250ZXh0T3ZlcmZsb3cgPSB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hNYXRlcmlhbGl6ZWRUcmVlSWQod29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHdhcm5JZk5vdEh5ZHJhdGluZygpO1xuICAgICAgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MucmV0dXJuICYmXG4gICAgICAgIChwdXNoVHJlZUZvcmsod29ya0luUHJvZ3Jlc3MsIDEpLCBwdXNoVHJlZUlkKHdvcmtJblByb2dyZXNzLCAxLCAwKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcFRyZWVDb250ZXh0KHdvcmtJblByb2dyZXNzKSB7XG4gICAgICBmb3IgKDsgd29ya0luUHJvZ3Jlc3MgPT09IHRyZWVGb3JrUHJvdmlkZXI7IClcbiAgICAgICAgKHRyZWVGb3JrUHJvdmlkZXIgPSBmb3JrU3RhY2tbLS1mb3JrU3RhY2tJbmRleF0pLFxuICAgICAgICAgIChmb3JrU3RhY2tbZm9ya1N0YWNrSW5kZXhdID0gbnVsbCksXG4gICAgICAgICAgKHRyZWVGb3JrQ291bnQgPSBmb3JrU3RhY2tbLS1mb3JrU3RhY2tJbmRleF0pLFxuICAgICAgICAgIChmb3JrU3RhY2tbZm9ya1N0YWNrSW5kZXhdID0gbnVsbCk7XG4gICAgICBmb3IgKDsgd29ya0luUHJvZ3Jlc3MgPT09IHRyZWVDb250ZXh0UHJvdmlkZXI7IClcbiAgICAgICAgKHRyZWVDb250ZXh0UHJvdmlkZXIgPSBpZFN0YWNrWy0taWRTdGFja0luZGV4XSksXG4gICAgICAgICAgKGlkU3RhY2tbaWRTdGFja0luZGV4XSA9IG51bGwpLFxuICAgICAgICAgICh0cmVlQ29udGV4dE92ZXJmbG93ID0gaWRTdGFja1stLWlkU3RhY2tJbmRleF0pLFxuICAgICAgICAgIChpZFN0YWNrW2lkU3RhY2tJbmRleF0gPSBudWxsKSxcbiAgICAgICAgICAodHJlZUNvbnRleHRJZCA9IGlkU3RhY2tbLS1pZFN0YWNrSW5kZXhdKSxcbiAgICAgICAgICAoaWRTdGFja1tpZFN0YWNrSW5kZXhdID0gbnVsbCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1c3BlbmRlZFRyZWVDb250ZXh0KCkge1xuICAgICAgd2FybklmTm90SHlkcmF0aW5nKCk7XG4gICAgICByZXR1cm4gbnVsbCAhPT0gdHJlZUNvbnRleHRQcm92aWRlclxuICAgICAgICA/IHsgaWQ6IHRyZWVDb250ZXh0SWQsIG92ZXJmbG93OiB0cmVlQ29udGV4dE92ZXJmbG93IH1cbiAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXN0b3JlU3VzcGVuZGVkVHJlZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbmRlZENvbnRleHQpIHtcbiAgICAgIHdhcm5JZk5vdEh5ZHJhdGluZygpO1xuICAgICAgaWRTdGFja1tpZFN0YWNrSW5kZXgrK10gPSB0cmVlQ29udGV4dElkO1xuICAgICAgaWRTdGFja1tpZFN0YWNrSW5kZXgrK10gPSB0cmVlQ29udGV4dE92ZXJmbG93O1xuICAgICAgaWRTdGFja1tpZFN0YWNrSW5kZXgrK10gPSB0cmVlQ29udGV4dFByb3ZpZGVyO1xuICAgICAgdHJlZUNvbnRleHRJZCA9IHN1c3BlbmRlZENvbnRleHQuaWQ7XG4gICAgICB0cmVlQ29udGV4dE92ZXJmbG93ID0gc3VzcGVuZGVkQ29udGV4dC5vdmVyZmxvdztcbiAgICAgIHRyZWVDb250ZXh0UHJvdmlkZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybklmTm90SHlkcmF0aW5nKCkge1xuICAgICAgaXNIeWRyYXRpbmcgfHxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkV4cGVjdGVkIHRvIGJlIGh5ZHJhdGluZy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYnVpbGRIeWRyYXRpb25EaWZmTm9kZShmaWJlciwgZGlzdGFuY2VGcm9tTGVhZikge1xuICAgICAgaWYgKG51bGwgPT09IGZpYmVyLnJldHVybikge1xuICAgICAgICBpZiAobnVsbCA9PT0gaHlkcmF0aW9uRGlmZlJvb3RERVYpXG4gICAgICAgICAgaHlkcmF0aW9uRGlmZlJvb3RERVYgPSB7XG4gICAgICAgICAgICBmaWJlcjogZmliZXIsXG4gICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICBzZXJ2ZXJQcm9wczogdm9pZCAwLFxuICAgICAgICAgICAgc2VydmVyVGFpbDogW10sXG4gICAgICAgICAgICBkaXN0YW5jZUZyb21MZWFmOiBkaXN0YW5jZUZyb21MZWFmXG4gICAgICAgICAgfTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKGh5ZHJhdGlvbkRpZmZSb290REVWLmZpYmVyICE9PSBmaWJlcilcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIlNhdyBtdWx0aXBsZSBoeWRyYXRpb24gZGlmZiByb290cyBpbiBhIHBhc3MuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaHlkcmF0aW9uRGlmZlJvb3RERVYuZGlzdGFuY2VGcm9tTGVhZiA+IGRpc3RhbmNlRnJvbUxlYWYgJiZcbiAgICAgICAgICAgIChoeWRyYXRpb25EaWZmUm9vdERFVi5kaXN0YW5jZUZyb21MZWFmID0gZGlzdGFuY2VGcm9tTGVhZik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh5ZHJhdGlvbkRpZmZSb290REVWO1xuICAgICAgfVxuICAgICAgdmFyIHNpYmxpbmdzID0gYnVpbGRIeWRyYXRpb25EaWZmTm9kZShcbiAgICAgICAgZmliZXIucmV0dXJuLFxuICAgICAgICBkaXN0YW5jZUZyb21MZWFmICsgMVxuICAgICAgKS5jaGlsZHJlbjtcbiAgICAgIGlmICgwIDwgc2libGluZ3MubGVuZ3RoICYmIHNpYmxpbmdzW3NpYmxpbmdzLmxlbmd0aCAtIDFdLmZpYmVyID09PSBmaWJlcilcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoc2libGluZ3MgPSBzaWJsaW5nc1tzaWJsaW5ncy5sZW5ndGggLSAxXSksXG4gICAgICAgICAgc2libGluZ3MuZGlzdGFuY2VGcm9tTGVhZiA+IGRpc3RhbmNlRnJvbUxlYWYgJiZcbiAgICAgICAgICAgIChzaWJsaW5ncy5kaXN0YW5jZUZyb21MZWFmID0gZGlzdGFuY2VGcm9tTGVhZiksXG4gICAgICAgICAgc2libGluZ3NcbiAgICAgICAgKTtcbiAgICAgIGRpc3RhbmNlRnJvbUxlYWYgPSB7XG4gICAgICAgIGZpYmVyOiBmaWJlcixcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICBzZXJ2ZXJQcm9wczogdm9pZCAwLFxuICAgICAgICBzZXJ2ZXJUYWlsOiBbXSxcbiAgICAgICAgZGlzdGFuY2VGcm9tTGVhZjogZGlzdGFuY2VGcm9tTGVhZlxuICAgICAgfTtcbiAgICAgIHNpYmxpbmdzLnB1c2goZGlzdGFuY2VGcm9tTGVhZik7XG4gICAgICByZXR1cm4gZGlzdGFuY2VGcm9tTGVhZjtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybklmSHlkcmF0aW5nKCkge1xuICAgICAgaXNIeWRyYXRpbmcgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIldlIHNob3VsZCBub3QgYmUgaHlkcmF0aW5nIGhlcmUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGEgYnVnLlwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5Ob25IeWRyYXRlZEluc3RhbmNlKGZpYmVyLCByZWplY3RlZENhbmRpZGF0ZSkge1xuICAgICAgZGlkU3VzcGVuZE9yRXJyb3JERVYgfHxcbiAgICAgICAgKChmaWJlciA9IGJ1aWxkSHlkcmF0aW9uRGlmZk5vZGUoZmliZXIsIDApKSxcbiAgICAgICAgKGZpYmVyLnNlcnZlclByb3BzID0gbnVsbCksXG4gICAgICAgIG51bGwgIT09IHJlamVjdGVkQ2FuZGlkYXRlICYmXG4gICAgICAgICAgKChyZWplY3RlZENhbmRpZGF0ZSA9XG4gICAgICAgICAgICBkZXNjcmliZUh5ZHJhdGFibGVJbnN0YW5jZUZvckRldldhcm5pbmdzKHJlamVjdGVkQ2FuZGlkYXRlKSksXG4gICAgICAgICAgZmliZXIuc2VydmVyVGFpbC5wdXNoKHJlamVjdGVkQ2FuZGlkYXRlKSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2goZmliZXIpIHtcbiAgICAgIHZhciBmcm9tVGV4dCA9XG4gICAgICAgICAgMSA8IGFyZ3VtZW50cy5sZW5ndGggJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiAhMSxcbiAgICAgICAgZGlmZiA9IFwiXCIsXG4gICAgICAgIGRpZmZSb290ID0gaHlkcmF0aW9uRGlmZlJvb3RERVY7XG4gICAgICBudWxsICE9PSBkaWZmUm9vdCAmJlxuICAgICAgICAoKGh5ZHJhdGlvbkRpZmZSb290REVWID0gbnVsbCksIChkaWZmID0gZGVzY3JpYmVEaWZmKGRpZmZSb290KSkpO1xuICAgICAgcXVldWVIeWRyYXRpb25FcnJvcihcbiAgICAgICAgY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoXG4gICAgICAgICAgRXJyb3IoXG4gICAgICAgICAgICBcIkh5ZHJhdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgc2VydmVyIHJlbmRlcmVkIFwiICtcbiAgICAgICAgICAgICAgKGZyb21UZXh0ID8gXCJ0ZXh0XCIgOiBcIkhUTUxcIikgK1xuICAgICAgICAgICAgICBcIiBkaWRuJ3QgbWF0Y2ggdGhlIGNsaWVudC4gQXMgYSByZXN1bHQgdGhpcyB0cmVlIHdpbGwgYmUgcmVnZW5lcmF0ZWQgb24gdGhlIGNsaWVudC4gVGhpcyBjYW4gaGFwcGVuIGlmIGEgU1NSLWVkIENsaWVudCBDb21wb25lbnQgdXNlZDpcXG5cXG4tIEEgc2VydmVyL2NsaWVudCBicmFuY2ggYGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJylgLlxcbi0gVmFyaWFibGUgaW5wdXQgc3VjaCBhcyBgRGF0ZS5ub3coKWAgb3IgYE1hdGgucmFuZG9tKClgIHdoaWNoIGNoYW5nZXMgZWFjaCB0aW1lIGl0J3MgY2FsbGVkLlxcbi0gRGF0ZSBmb3JtYXR0aW5nIGluIGEgdXNlcidzIGxvY2FsZSB3aGljaCBkb2Vzbid0IG1hdGNoIHRoZSBzZXJ2ZXIuXFxuLSBFeHRlcm5hbCBjaGFuZ2luZyBkYXRhIHdpdGhvdXQgc2VuZGluZyBhIHNuYXBzaG90IG9mIGl0IGFsb25nIHdpdGggdGhlIEhUTUwuXFxuLSBJbnZhbGlkIEhUTUwgdGFnIG5lc3RpbmcuXFxuXFxuSXQgY2FuIGFsc28gaGFwcGVuIGlmIHRoZSBjbGllbnQgaGFzIGEgYnJvd3NlciBleHRlbnNpb24gaW5zdGFsbGVkIHdoaWNoIG1lc3NlcyB3aXRoIHRoZSBIVE1MIGJlZm9yZSBSZWFjdCBsb2FkZWQuXFxuXFxuaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9oeWRyYXRpb24tbWlzbWF0Y2hcIiArXG4gICAgICAgICAgICAgIGRpZmZcbiAgICAgICAgICApLFxuICAgICAgICAgIGZpYmVyXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICB0aHJvdyBIeWRyYXRpb25NaXNtYXRjaEV4Y2VwdGlvbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZShmaWJlcikge1xuICAgICAgdmFyIGRpZEh5ZHJhdGUgPSBmaWJlci5zdGF0ZU5vZGU7XG4gICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGUsXG4gICAgICAgIHByb3BzID0gZmliZXIubWVtb2l6ZWRQcm9wcztcbiAgICAgIGRpZEh5ZHJhdGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSBmaWJlcjtcbiAgICAgIGRpZEh5ZHJhdGVbaW50ZXJuYWxQcm9wc0tleV0gPSBwcm9wcztcbiAgICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodHlwZSwgcHJvcHMpO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJkaWFsb2dcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiY2FuY2VsXCIsIGRpZEh5ZHJhdGUpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJjbG9zZVwiLCBkaWRIeWRyYXRlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImlmcmFtZVwiOlxuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgIGNhc2UgXCJlbWJlZFwiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJsb2FkXCIsIGRpZEh5ZHJhdGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidmlkZW9cIjpcbiAgICAgICAgY2FzZSBcImF1ZGlvXCI6XG4gICAgICAgICAgZm9yICh0eXBlID0gMDsgdHlwZSA8IG1lZGlhRXZlbnRUeXBlcy5sZW5ndGg7IHR5cGUrKylcbiAgICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQobWVkaWFFdmVudFR5cGVzW3R5cGVdLCBkaWRIeWRyYXRlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInNvdXJjZVwiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJlcnJvclwiLCBkaWRIeWRyYXRlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImltZ1wiOlxuICAgICAgICBjYXNlIFwiaW1hZ2VcIjpcbiAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiZXJyb3JcIiwgZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImxvYWRcIiwgZGlkSHlkcmF0ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkZXRhaWxzXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInRvZ2dsZVwiLCBkaWRIeWRyYXRlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImlucHV0XCI6XG4gICAgICAgICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcyhcImlucHV0XCIsIHByb3BzKTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiaW52YWxpZFwiLCBkaWRIeWRyYXRlKTtcbiAgICAgICAgICB2YWxpZGF0ZUlucHV0UHJvcHMoZGlkSHlkcmF0ZSwgcHJvcHMpO1xuICAgICAgICAgIGluaXRJbnB1dChcbiAgICAgICAgICAgIGRpZEh5ZHJhdGUsXG4gICAgICAgICAgICBwcm9wcy52YWx1ZSxcbiAgICAgICAgICAgIHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIHByb3BzLmNoZWNrZWQsXG4gICAgICAgICAgICBwcm9wcy5kZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgICAgIHByb3BzLnR5cGUsXG4gICAgICAgICAgICBwcm9wcy5uYW1lLFxuICAgICAgICAgICAgITBcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib3B0aW9uXCI6XG4gICAgICAgICAgdmFsaWRhdGVPcHRpb25Qcm9wcyhkaWRIeWRyYXRlLCBwcm9wcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKFwic2VsZWN0XCIsIHByb3BzKTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiaW52YWxpZFwiLCBkaWRIeWRyYXRlKTtcbiAgICAgICAgICB2YWxpZGF0ZVNlbGVjdFByb3BzKGRpZEh5ZHJhdGUsIHByb3BzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRleHRhcmVhXCI6XG4gICAgICAgICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcyhcInRleHRhcmVhXCIsIHByb3BzKSxcbiAgICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJpbnZhbGlkXCIsIGRpZEh5ZHJhdGUpLFxuICAgICAgICAgICAgdmFsaWRhdGVUZXh0YXJlYVByb3BzKGRpZEh5ZHJhdGUsIHByb3BzKSxcbiAgICAgICAgICAgIGluaXRUZXh0YXJlYShcbiAgICAgICAgICAgICAgZGlkSHlkcmF0ZSxcbiAgICAgICAgICAgICAgcHJvcHMudmFsdWUsXG4gICAgICAgICAgICAgIHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgcHJvcHMuY2hpbGRyZW5cbiAgICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICB0eXBlID0gcHJvcHMuY2hpbGRyZW47XG4gICAgICAoXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgXCJudW1iZXJcIiAhPT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgXCJiaWdpbnRcIiAhPT0gdHlwZW9mIHR5cGUpIHx8XG4gICAgICBkaWRIeWRyYXRlLnRleHRDb250ZW50ID09PSBcIlwiICsgdHlwZSB8fFxuICAgICAgITAgPT09IHByb3BzLnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyB8fFxuICAgICAgY2hlY2tGb3JVbm1hdGNoZWRUZXh0KGRpZEh5ZHJhdGUudGV4dENvbnRlbnQsIHR5cGUpXG4gICAgICAgID8gKG51bGwgIT0gcHJvcHMucG9wb3ZlciAmJlxuICAgICAgICAgICAgKGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJiZWZvcmV0b2dnbGVcIiwgZGlkSHlkcmF0ZSksXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwidG9nZ2xlXCIsIGRpZEh5ZHJhdGUpKSxcbiAgICAgICAgICBudWxsICE9IHByb3BzLm9uU2Nyb2xsICYmXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwic2Nyb2xsXCIsIGRpZEh5ZHJhdGUpLFxuICAgICAgICAgIG51bGwgIT0gcHJvcHMub25TY3JvbGxFbmQgJiZcbiAgICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJzY3JvbGxlbmRcIiwgZGlkSHlkcmF0ZSksXG4gICAgICAgICAgbnVsbCAhPSBwcm9wcy5vbkNsaWNrICYmIChkaWRIeWRyYXRlLm9uY2xpY2sgPSBub29wJDEpLFxuICAgICAgICAgIChkaWRIeWRyYXRlID0gITApKVxuICAgICAgICA6IChkaWRIeWRyYXRlID0gITEpO1xuICAgICAgZGlkSHlkcmF0ZSB8fCB0aHJvd09uSHlkcmF0aW9uTWlzbWF0Y2goZmliZXIsICEwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcikge1xuICAgICAgZm9yIChoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyLnJldHVybjsgaHlkcmF0aW9uUGFyZW50RmliZXI7IClcbiAgICAgICAgc3dpdGNoIChoeWRyYXRpb25QYXJlbnRGaWJlci50YWcpIHtcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgcm9vdE9yU2luZ2xldG9uQ29udGV4dCA9ICExO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcm9vdE9yU2luZ2xldG9uQ29udGV4dCA9ICEwO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGh5ZHJhdGlvblBhcmVudEZpYmVyLnJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwb3BIeWRyYXRpb25TdGF0ZShmaWJlcikge1xuICAgICAgaWYgKGZpYmVyICE9PSBoeWRyYXRpb25QYXJlbnRGaWJlcikgcmV0dXJuICExO1xuICAgICAgaWYgKCFpc0h5ZHJhdGluZylcbiAgICAgICAgcmV0dXJuIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpLCAoaXNIeWRyYXRpbmcgPSAhMCksICExO1xuICAgICAgdmFyIHRhZyA9IGZpYmVyLnRhZyxcbiAgICAgICAgSlNDb21waWxlcl90ZW1wO1xuICAgICAgaWYgKChKU0NvbXBpbGVyX3RlbXAgPSAzICE9PSB0YWcgJiYgMjcgIT09IHRhZykpIHtcbiAgICAgICAgaWYgKChKU0NvbXBpbGVyX3RlbXAgPSA1ID09PSB0YWcpKVxuICAgICAgICAgIChKU0NvbXBpbGVyX3RlbXAgPSBmaWJlci50eXBlKSxcbiAgICAgICAgICAgIChKU0NvbXBpbGVyX3RlbXAgPVxuICAgICAgICAgICAgICAhKFwiZm9ybVwiICE9PSBKU0NvbXBpbGVyX3RlbXAgJiYgXCJidXR0b25cIiAhPT0gSlNDb21waWxlcl90ZW1wKSB8fFxuICAgICAgICAgICAgICBzaG91bGRTZXRUZXh0Q29udGVudChmaWJlci50eXBlLCBmaWJlci5tZW1vaXplZFByb3BzKSk7XG4gICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9ICFKU0NvbXBpbGVyX3RlbXA7XG4gICAgICB9XG4gICAgICBpZiAoSlNDb21waWxlcl90ZW1wICYmIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UpIHtcbiAgICAgICAgZm9yIChKU0NvbXBpbGVyX3RlbXAgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlOyBKU0NvbXBpbGVyX3RlbXA7ICkge1xuICAgICAgICAgIHZhciBkaWZmTm9kZSA9IGJ1aWxkSHlkcmF0aW9uRGlmZk5vZGUoZmliZXIsIDApLFxuICAgICAgICAgICAgZGVzY3JpcHRpb24gPVxuICAgICAgICAgICAgICBkZXNjcmliZUh5ZHJhdGFibGVJbnN0YW5jZUZvckRldldhcm5pbmdzKEpTQ29tcGlsZXJfdGVtcCk7XG4gICAgICAgICAgZGlmZk5vZGUuc2VydmVyVGFpbC5wdXNoKGRlc2NyaXB0aW9uKTtcbiAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPVxuICAgICAgICAgICAgXCJTdXNwZW5zZVwiID09PSBkZXNjcmlwdGlvbi50eXBlXG4gICAgICAgICAgICAgID8gZ2V0TmV4dEh5ZHJhdGFibGVJbnN0YW5jZUFmdGVySHlkcmF0aW9uQm91bmRhcnkoSlNDb21waWxlcl90ZW1wKVxuICAgICAgICAgICAgICA6IGdldE5leHRIeWRyYXRhYmxlKEpTQ29tcGlsZXJfdGVtcC5uZXh0U2libGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3dPbkh5ZHJhdGlvbk1pc21hdGNoKGZpYmVyKTtcbiAgICAgIH1cbiAgICAgIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpO1xuICAgICAgaWYgKDEzID09PSB0YWcpIHtcbiAgICAgICAgZmliZXIgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuICAgICAgICBmaWJlciA9IG51bGwgIT09IGZpYmVyID8gZmliZXIuZGVoeWRyYXRlZCA6IG51bGw7XG4gICAgICAgIGlmICghZmliZXIpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIHRvIGhhdmUgYSBoeWRyYXRlZCBzdXNwZW5zZSBpbnN0YW5jZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPVxuICAgICAgICAgIGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlckh5ZHJhdGlvbkJvdW5kYXJ5KGZpYmVyKTtcbiAgICAgIH0gZWxzZSBpZiAoMzEgPT09IHRhZykge1xuICAgICAgICBmaWJlciA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIGZpYmVyID0gbnVsbCAhPT0gZmliZXIgPyBmaWJlci5kZWh5ZHJhdGVkIDogbnVsbDtcbiAgICAgICAgaWYgKCFmaWJlcilcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgdG8gaGF2ZSBhIGh5ZHJhdGVkIHN1c3BlbnNlIGluc3RhbmNlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9XG4gICAgICAgICAgZ2V0TmV4dEh5ZHJhdGFibGVJbnN0YW5jZUFmdGVySHlkcmF0aW9uQm91bmRhcnkoZmliZXIpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIDI3ID09PSB0YWdcbiAgICAgICAgICA/ICgodGFnID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSksXG4gICAgICAgICAgICBpc1NpbmdsZXRvblNjb3BlKGZpYmVyLnR5cGUpXG4gICAgICAgICAgICAgID8gKChmaWJlciA9IHByZXZpb3VzSHlkcmF0YWJsZU9uRW50ZXJpbmdTY29wZWRTaW5nbGV0b24pLFxuICAgICAgICAgICAgICAgIChwcmV2aW91c0h5ZHJhdGFibGVPbkVudGVyaW5nU2NvcGVkU2luZ2xldG9uID0gbnVsbCksXG4gICAgICAgICAgICAgICAgKG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBmaWJlcikpXG4gICAgICAgICAgICAgIDogKG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSB0YWcpKVxuICAgICAgICAgIDogKG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBoeWRyYXRpb25QYXJlbnRGaWJlclxuICAgICAgICAgICAgICA/IGdldE5leHRIeWRyYXRhYmxlKGZpYmVyLnN0YXRlTm9kZS5uZXh0U2libGluZylcbiAgICAgICAgICAgICAgOiBudWxsKTtcbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzZXRIeWRyYXRpb25TdGF0ZSgpIHtcbiAgICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBoeWRyYXRpb25QYXJlbnRGaWJlciA9IG51bGw7XG4gICAgICBkaWRTdXNwZW5kT3JFcnJvckRFViA9IGlzSHlkcmF0aW5nID0gITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZ3JhZGVIeWRyYXRpb25FcnJvcnNUb1JlY292ZXJhYmxlKCkge1xuICAgICAgdmFyIHF1ZXVlZEVycm9ycyA9IGh5ZHJhdGlvbkVycm9ycztcbiAgICAgIG51bGwgIT09IHF1ZXVlZEVycm9ycyAmJlxuICAgICAgICAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnNcbiAgICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IHF1ZXVlZEVycm9ycylcbiAgICAgICAgICA6IHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLnB1c2guYXBwbHkoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgICAgICAgICBxdWV1ZWRFcnJvcnNcbiAgICAgICAgICAgICksXG4gICAgICAgIChoeWRyYXRpb25FcnJvcnMgPSBudWxsKSk7XG4gICAgICByZXR1cm4gcXVldWVkRXJyb3JzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBxdWV1ZUh5ZHJhdGlvbkVycm9yKGVycm9yKSB7XG4gICAgICBudWxsID09PSBoeWRyYXRpb25FcnJvcnNcbiAgICAgICAgPyAoaHlkcmF0aW9uRXJyb3JzID0gW2Vycm9yXSlcbiAgICAgICAgOiBoeWRyYXRpb25FcnJvcnMucHVzaChlcnJvcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVtaXRQZW5kaW5nSHlkcmF0aW9uV2FybmluZ3MoKSB7XG4gICAgICB2YXIgZGlmZlJvb3QgPSBoeWRyYXRpb25EaWZmUm9vdERFVjtcbiAgICAgIGlmIChudWxsICE9PSBkaWZmUm9vdCkge1xuICAgICAgICBoeWRyYXRpb25EaWZmUm9vdERFViA9IG51bGw7XG4gICAgICAgIGZvciAodmFyIGRpZmYgPSBkZXNjcmliZURpZmYoZGlmZlJvb3QpOyAwIDwgZGlmZlJvb3QuY2hpbGRyZW4ubGVuZ3RoOyApXG4gICAgICAgICAgZGlmZlJvb3QgPSBkaWZmUm9vdC5jaGlsZHJlblswXTtcbiAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoZGlmZlJvb3QuZmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJBIHRyZWUgaHlkcmF0ZWQgYnV0IHNvbWUgYXR0cmlidXRlcyBvZiB0aGUgc2VydmVyIHJlbmRlcmVkIEhUTUwgZGlkbid0IG1hdGNoIHRoZSBjbGllbnQgcHJvcGVydGllcy4gVGhpcyB3b24ndCBiZSBwYXRjaGVkIHVwLiBUaGlzIGNhbiBoYXBwZW4gaWYgYSBTU1ItZWQgQ2xpZW50IENvbXBvbmVudCB1c2VkOlxcblxcbi0gQSBzZXJ2ZXIvY2xpZW50IGJyYW5jaCBgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKWAuXFxuLSBWYXJpYWJsZSBpbnB1dCBzdWNoIGFzIGBEYXRlLm5vdygpYCBvciBgTWF0aC5yYW5kb20oKWAgd2hpY2ggY2hhbmdlcyBlYWNoIHRpbWUgaXQncyBjYWxsZWQuXFxuLSBEYXRlIGZvcm1hdHRpbmcgaW4gYSB1c2VyJ3MgbG9jYWxlIHdoaWNoIGRvZXNuJ3QgbWF0Y2ggdGhlIHNlcnZlci5cXG4tIEV4dGVybmFsIGNoYW5naW5nIGRhdGEgd2l0aG91dCBzZW5kaW5nIGEgc25hcHNob3Qgb2YgaXQgYWxvbmcgd2l0aCB0aGUgSFRNTC5cXG4tIEludmFsaWQgSFRNTCB0YWcgbmVzdGluZy5cXG5cXG5JdCBjYW4gYWxzbyBoYXBwZW4gaWYgdGhlIGNsaWVudCBoYXMgYSBicm93c2VyIGV4dGVuc2lvbiBpbnN0YWxsZWQgd2hpY2ggbWVzc2VzIHdpdGggdGhlIEhUTUwgYmVmb3JlIFJlYWN0IGxvYWRlZC5cXG5cXG4lcyVzXCIsXG4gICAgICAgICAgICBcImh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaHlkcmF0aW9uLW1pc21hdGNoXCIsXG4gICAgICAgICAgICBkaWZmXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpIHtcbiAgICAgIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICAgICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9ICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoUHJvdmlkZXIocHJvdmlkZXJGaWJlciwgY29udGV4dCwgbmV4dFZhbHVlKSB7XG4gICAgICBwdXNoKHZhbHVlQ3Vyc29yLCBjb250ZXh0Ll9jdXJyZW50VmFsdWUsIHByb3ZpZGVyRmliZXIpO1xuICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gbmV4dFZhbHVlO1xuICAgICAgcHVzaChyZW5kZXJlckN1cnNvckRFViwgY29udGV4dC5fY3VycmVudFJlbmRlcmVyLCBwcm92aWRlckZpYmVyKTtcbiAgICAgIHZvaWQgMCAhPT0gY29udGV4dC5fY3VycmVudFJlbmRlcmVyICYmXG4gICAgICAgIG51bGwgIT09IGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAmJlxuICAgICAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IHJlbmRlcmVyU2lnaWwgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkRldGVjdGVkIG11bHRpcGxlIHJlbmRlcmVycyBjb25jdXJyZW50bHkgcmVuZGVyaW5nIHRoZSBzYW1lIGNvbnRleHQgcHJvdmlkZXIuIFRoaXMgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLlwiXG4gICAgICAgICk7XG4gICAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgPSByZW5kZXJlclNpZ2lsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3BQcm92aWRlcihjb250ZXh0LCBwcm92aWRlckZpYmVyKSB7XG4gICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSB2YWx1ZUN1cnNvci5jdXJyZW50O1xuICAgICAgdmFyIGN1cnJlbnRSZW5kZXJlciA9IHJlbmRlcmVyQ3Vyc29yREVWLmN1cnJlbnQ7XG4gICAgICBwb3AocmVuZGVyZXJDdXJzb3JERVYsIHByb3ZpZGVyRmliZXIpO1xuICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gY3VycmVudFJlbmRlcmVyO1xuICAgICAgcG9wKHZhbHVlQ3Vyc29yLCBwcm92aWRlckZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChcbiAgICAgIHBhcmVudCxcbiAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgcHJvcGFnYXRpb25Sb290XG4gICAgKSB7XG4gICAgICBmb3IgKDsgbnVsbCAhPT0gcGFyZW50OyApIHtcbiAgICAgICAgdmFyIGFsdGVybmF0ZSA9IHBhcmVudC5hbHRlcm5hdGU7XG4gICAgICAgIChwYXJlbnQuY2hpbGRMYW5lcyAmIHJlbmRlckxhbmVzKSAhPT0gcmVuZGVyTGFuZXNcbiAgICAgICAgICA/ICgocGFyZW50LmNoaWxkTGFuZXMgfD0gcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgbnVsbCAhPT0gYWx0ZXJuYXRlICYmIChhbHRlcm5hdGUuY2hpbGRMYW5lcyB8PSByZW5kZXJMYW5lcykpXG4gICAgICAgICAgOiBudWxsICE9PSBhbHRlcm5hdGUgJiZcbiAgICAgICAgICAgIChhbHRlcm5hdGUuY2hpbGRMYW5lcyAmIHJlbmRlckxhbmVzKSAhPT0gcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgIChhbHRlcm5hdGUuY2hpbGRMYW5lcyB8PSByZW5kZXJMYW5lcyk7XG4gICAgICAgIGlmIChwYXJlbnQgPT09IHByb3BhZ2F0aW9uUm9vdCkgYnJlYWs7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gICAgICB9XG4gICAgICBwYXJlbnQgIT09IHByb3BhZ2F0aW9uUm9vdCAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgdG8gZmluZCB0aGUgcHJvcGFnYXRpb24gcm9vdCB3aGVuIHNjaGVkdWxpbmcgY29udGV4dCB3b3JrLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2VzKFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBjb250ZXh0cyxcbiAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgZm9yY2VQcm9wYWdhdGVFbnRpcmVUcmVlXG4gICAgKSB7XG4gICAgICB2YXIgZmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgIG51bGwgIT09IGZpYmVyICYmIChmaWJlci5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBmb3IgKDsgbnVsbCAhPT0gZmliZXI7ICkge1xuICAgICAgICB2YXIgbGlzdCA9IGZpYmVyLmRlcGVuZGVuY2llcztcbiAgICAgICAgaWYgKG51bGwgIT09IGxpc3QpIHtcbiAgICAgICAgICB2YXIgbmV4dEZpYmVyID0gZmliZXIuY2hpbGQ7XG4gICAgICAgICAgbGlzdCA9IGxpc3QuZmlyc3RDb250ZXh0O1xuICAgICAgICAgIGE6IGZvciAoOyBudWxsICE9PSBsaXN0OyApIHtcbiAgICAgICAgICAgIHZhciBkZXBlbmRlbmN5ID0gbGlzdDtcbiAgICAgICAgICAgIGxpc3QgPSBmaWJlcjtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29udGV4dHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5LmNvbnRleHQgPT09IGNvbnRleHRzW2ldKSB7XG4gICAgICAgICAgICAgICAgbGlzdC5sYW5lcyB8PSByZW5kZXJMYW5lcztcbiAgICAgICAgICAgICAgICBkZXBlbmRlbmN5ID0gbGlzdC5hbHRlcm5hdGU7XG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gZGVwZW5kZW5jeSAmJiAoZGVwZW5kZW5jeS5sYW5lcyB8PSByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChcbiAgICAgICAgICAgICAgICAgIGxpc3QucmV0dXJuLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZm9yY2VQcm9wYWdhdGVFbnRpcmVUcmVlIHx8IChuZXh0RmliZXIgPSBudWxsKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBsaXN0ID0gZGVwZW5kZW5jeS5uZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgxOCA9PT0gZmliZXIudGFnKSB7XG4gICAgICAgICAgbmV4dEZpYmVyID0gZmliZXIucmV0dXJuO1xuICAgICAgICAgIGlmIChudWxsID09PSBuZXh0RmliZXIpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJXZSBqdXN0IGNhbWUgZnJvbSBhIHBhcmVudCBzbyB3ZSBtdXN0IGhhdmUgaGFkIGEgcGFyZW50LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIG5leHRGaWJlci5sYW5lcyB8PSByZW5kZXJMYW5lcztcbiAgICAgICAgICBsaXN0ID0gbmV4dEZpYmVyLmFsdGVybmF0ZTtcbiAgICAgICAgICBudWxsICE9PSBsaXN0ICYmIChsaXN0LmxhbmVzIHw9IHJlbmRlckxhbmVzKTtcbiAgICAgICAgICBzY2hlZHVsZUNvbnRleHRXb3JrT25QYXJlbnRQYXRoKFxuICAgICAgICAgICAgbmV4dEZpYmVyLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICk7XG4gICAgICAgICAgbmV4dEZpYmVyID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgICAgICBpZiAobnVsbCAhPT0gbmV4dEZpYmVyKSBuZXh0RmliZXIucmV0dXJuID0gZmliZXI7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBmb3IgKG5leHRGaWJlciA9IGZpYmVyOyBudWxsICE9PSBuZXh0RmliZXI7ICkge1xuICAgICAgICAgICAgaWYgKG5leHRGaWJlciA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgbmV4dEZpYmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWJlciA9IG5leHRGaWJlci5zaWJsaW5nO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IGZpYmVyKSB7XG4gICAgICAgICAgICAgIGZpYmVyLnJldHVybiA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICAgICAgICAgIG5leHRGaWJlciA9IGZpYmVyO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHRGaWJlciA9IG5leHRGaWJlci5yZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICBmaWJlciA9IG5leHRGaWJlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvcGFnYXRlUGFyZW50Q29udGV4dENoYW5nZXMoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICByZW5kZXJMYW5lcyxcbiAgICAgIGZvcmNlUHJvcGFnYXRlRW50aXJlVHJlZVxuICAgICkge1xuICAgICAgY3VycmVudCA9IG51bGw7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgcGFyZW50ID0gd29ya0luUHJvZ3Jlc3MsIGlzSW5zaWRlUHJvcGFnYXRpb25CYWlsb3V0ID0gITE7XG4gICAgICAgIG51bGwgIT09IHBhcmVudDtcblxuICAgICAgKSB7XG4gICAgICAgIGlmICghaXNJbnNpZGVQcm9wYWdhdGlvbkJhaWxvdXQpXG4gICAgICAgICAgaWYgKDAgIT09IChwYXJlbnQuZmxhZ3MgJiA1MjQyODgpKSBpc0luc2lkZVByb3BhZ2F0aW9uQmFpbG91dCA9ICEwO1xuICAgICAgICAgIGVsc2UgaWYgKDAgIT09IChwYXJlbnQuZmxhZ3MgJiAyNjIxNDQpKSBicmVhaztcbiAgICAgICAgaWYgKDEwID09PSBwYXJlbnQudGFnKSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnQuYWx0ZXJuYXRlO1xuICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50UGFyZW50KVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJTaG91bGQgaGF2ZSBhIGN1cnJlbnQgZmliZXIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIpO1xuICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBjdXJyZW50UGFyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gcGFyZW50LnR5cGU7XG4gICAgICAgICAgICBvYmplY3RJcyhwYXJlbnQucGVuZGluZ1Byb3BzLnZhbHVlLCBjdXJyZW50UGFyZW50LnZhbHVlKSB8fFxuICAgICAgICAgICAgICAobnVsbCAhPT0gY3VycmVudFxuICAgICAgICAgICAgICAgID8gY3VycmVudC5wdXNoKGNvbnRleHQpXG4gICAgICAgICAgICAgICAgOiAoY3VycmVudCA9IFtjb250ZXh0XSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJlbnQgPT09IGhvc3RUcmFuc2l0aW9uUHJvdmlkZXJDdXJzb3IuY3VycmVudCkge1xuICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnQuYWx0ZXJuYXRlO1xuICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50UGFyZW50KVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJTaG91bGQgaGF2ZSBhIGN1cnJlbnQgZmliZXIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIpO1xuICAgICAgICAgIGN1cnJlbnRQYXJlbnQubWVtb2l6ZWRTdGF0ZS5tZW1vaXplZFN0YXRlICE9PVxuICAgICAgICAgICAgcGFyZW50Lm1lbW9pemVkU3RhdGUubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgKG51bGwgIT09IGN1cnJlbnRcbiAgICAgICAgICAgICAgPyBjdXJyZW50LnB1c2goSG9zdFRyYW5zaXRpb25Db250ZXh0KVxuICAgICAgICAgICAgICA6IChjdXJyZW50ID0gW0hvc3RUcmFuc2l0aW9uQ29udGV4dF0pKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgfVxuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlcyhcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgIGZvcmNlUHJvcGFnYXRlRW50aXJlVHJlZVxuICAgICAgICApO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMjYyMTQ0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0lmQ29udGV4dENoYW5nZWQoY3VycmVudERlcGVuZGVuY2llcykge1xuICAgICAgZm9yIChcbiAgICAgICAgY3VycmVudERlcGVuZGVuY2llcyA9IGN1cnJlbnREZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0O1xuICAgICAgICBudWxsICE9PSBjdXJyZW50RGVwZW5kZW5jaWVzO1xuXG4gICAgICApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFvYmplY3RJcyhcbiAgICAgICAgICAgIGN1cnJlbnREZXBlbmRlbmNpZXMuY29udGV4dC5fY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgY3VycmVudERlcGVuZGVuY2llcy5tZW1vaXplZFZhbHVlXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICBjdXJyZW50RGVwZW5kZW5jaWVzID0gY3VycmVudERlcGVuZGVuY2llcy5uZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzO1xuICAgICAgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MgJiYgKHdvcmtJblByb2dyZXNzLmZpcnN0Q29udGV4dCA9IG51bGwpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkQ29udGV4dChjb250ZXh0KSB7XG4gICAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiBJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS5cIlxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0Rm9yQ29uc3VtZXIoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgY29udGV4dCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRDb250ZXh0RHVyaW5nUmVjb25jaWxpYXRpb24oY29uc3VtZXIsIGNvbnRleHQpIHtcbiAgICAgIG51bGwgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgJiYgcHJlcGFyZVRvUmVhZENvbnRleHQoY29uc3VtZXIpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0Rm9yQ29uc3VtZXIoY29uc3VtZXIsIGNvbnRleHQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkQ29udGV4dEZvckNvbnN1bWVyKGNvbnN1bWVyLCBjb250ZXh0KSB7XG4gICAgICB2YXIgdmFsdWUgPSBjb250ZXh0Ll9jdXJyZW50VmFsdWU7XG4gICAgICBjb250ZXh0ID0geyBjb250ZXh0OiBjb250ZXh0LCBtZW1vaXplZFZhbHVlOiB2YWx1ZSwgbmV4dDogbnVsbCB9O1xuICAgICAgaWYgKG51bGwgPT09IGxhc3RDb250ZXh0RGVwZW5kZW5jeSkge1xuICAgICAgICBpZiAobnVsbCA9PT0gY29uc3VtZXIpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIkNvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuIEluIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIEluIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCBpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gY29udGV4dDtcbiAgICAgICAgY29uc3VtZXIuZGVwZW5kZW5jaWVzID0ge1xuICAgICAgICAgIGxhbmVzOiAwLFxuICAgICAgICAgIGZpcnN0Q29udGV4dDogY29udGV4dCxcbiAgICAgICAgICBfZGVidWdUaGVuYWJsZVN0YXRlOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN1bWVyLmZsYWdzIHw9IDUyNDI4ODtcbiAgICAgIH0gZWxzZSBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBsYXN0Q29udGV4dERlcGVuZGVuY3kubmV4dCA9IGNvbnRleHQ7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udHJvbGxlcjogbmV3IEFib3J0Q29udHJvbGxlckxvY2FsKCksXG4gICAgICAgIGRhdGE6IG5ldyBNYXAoKSxcbiAgICAgICAgcmVmQ291bnQ6IDBcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJldGFpbkNhY2hlKGNhY2hlKSB7XG4gICAgICBjYWNoZS5jb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkICYmXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcIkEgY2FjaGUgaW5zdGFuY2Ugd2FzIHJldGFpbmVkIGFmdGVyIGl0IHdhcyBhbHJlYWR5IGZyZWVkLiBUaGlzIGxpa2VseSBpbmRpY2F0ZXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgKTtcbiAgICAgIGNhY2hlLnJlZkNvdW50Kys7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGVhc2VDYWNoZShjYWNoZSkge1xuICAgICAgY2FjaGUucmVmQ291bnQtLTtcbiAgICAgIDAgPiBjYWNoZS5yZWZDb3VudCAmJlxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJBIGNhY2hlIGluc3RhbmNlIHdhcyByZWxlYXNlZCBhZnRlciBpdCB3YXMgYWxyZWFkeSBmcmVlZC4gVGhpcyBsaWtlbHkgaW5kaWNhdGVzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICk7XG4gICAgICAwID09PSBjYWNoZS5yZWZDb3VudCAmJlxuICAgICAgICBzY2hlZHVsZUNhbGxiYWNrJDIoTm9ybWFsUHJpb3JpdHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjYWNoZS5jb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCkge1xuICAgICAgdmFyIHByZXZFZmZlY3REdXJhdGlvbiA9IHByb2ZpbGVyRWZmZWN0RHVyYXRpb247XG4gICAgICBwcm9maWxlckVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgIHJldHVybiBwcmV2RWZmZWN0RHVyYXRpb247XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcE5lc3RlZEVmZmVjdER1cmF0aW9ucyhwcmV2RWZmZWN0RHVyYXRpb24pIHtcbiAgICAgIHZhciBlbGFwc2VkVGltZSA9IHByb2ZpbGVyRWZmZWN0RHVyYXRpb247XG4gICAgICBwcm9maWxlckVmZmVjdER1cmF0aW9uID0gcHJldkVmZmVjdER1cmF0aW9uO1xuICAgICAgcmV0dXJuIGVsYXBzZWRUaW1lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBidWJibGVOZXN0ZWRFZmZlY3REdXJhdGlvbnMocHJldkVmZmVjdER1cmF0aW9uKSB7XG4gICAgICB2YXIgZWxhcHNlZFRpbWUgPSBwcm9maWxlckVmZmVjdER1cmF0aW9uO1xuICAgICAgcHJvZmlsZXJFZmZlY3REdXJhdGlvbiArPSBwcmV2RWZmZWN0RHVyYXRpb247XG4gICAgICByZXR1cm4gZWxhcHNlZFRpbWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hDb21wb25lbnRFZmZlY3RTdGFydCgpIHtcbiAgICAgIHZhciBwcmV2RWZmZWN0U3RhcnQgPSBjb21wb25lbnRFZmZlY3RTdGFydFRpbWU7XG4gICAgICBjb21wb25lbnRFZmZlY3RTdGFydFRpbWUgPSAtMS4xO1xuICAgICAgcmV0dXJuIHByZXZFZmZlY3RTdGFydDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wQ29tcG9uZW50RWZmZWN0U3RhcnQocHJldkVmZmVjdFN0YXJ0KSB7XG4gICAgICAwIDw9IHByZXZFZmZlY3RTdGFydCAmJiAoY29tcG9uZW50RWZmZWN0U3RhcnRUaW1lID0gcHJldkVmZmVjdFN0YXJ0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RhcnRQcm9maWxlclRpbWVyKGZpYmVyKSB7XG4gICAgICBwcm9maWxlclN0YXJ0VGltZSA9IG5vdygpO1xuICAgICAgMCA+IGZpYmVyLmFjdHVhbFN0YXJ0VGltZSAmJiAoZmliZXIuYWN0dWFsU3RhcnRUaW1lID0gcHJvZmlsZXJTdGFydFRpbWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZER1cmF0aW9uKGZpYmVyKSB7XG4gICAgICBpZiAoMCA8PSBwcm9maWxlclN0YXJ0VGltZSkge1xuICAgICAgICB2YXIgZWxhcHNlZFRpbWUgPSBub3coKSAtIHByb2ZpbGVyU3RhcnRUaW1lO1xuICAgICAgICBmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBlbGFwc2VkVGltZTtcbiAgICAgICAgZmliZXIuc2VsZkJhc2VEdXJhdGlvbiA9IGVsYXBzZWRUaW1lO1xuICAgICAgICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZEluY29tcGxldGVEdXJhdGlvbihmaWJlcikge1xuICAgICAgaWYgKDAgPD0gcHJvZmlsZXJTdGFydFRpbWUpIHtcbiAgICAgICAgdmFyIGVsYXBzZWRUaW1lID0gbm93KCkgLSBwcm9maWxlclN0YXJ0VGltZTtcbiAgICAgICAgZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gZWxhcHNlZFRpbWU7XG4gICAgICAgIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY29yZEVmZmVjdER1cmF0aW9uKCkge1xuICAgICAgaWYgKDAgPD0gcHJvZmlsZXJTdGFydFRpbWUpIHtcbiAgICAgICAgdmFyIGVsYXBzZWRUaW1lID0gbm93KCkgLSBwcm9maWxlclN0YXJ0VGltZTtcbiAgICAgICAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbiAgICAgICAgcHJvZmlsZXJFZmZlY3REdXJhdGlvbiArPSBlbGFwc2VkVGltZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc3RhcnRFZmZlY3RUaW1lcigpIHtcbiAgICAgIHByb2ZpbGVyU3RhcnRUaW1lID0gbm93KCk7XG4gICAgICAwID4gY29tcG9uZW50RWZmZWN0U3RhcnRUaW1lICYmXG4gICAgICAgIChjb21wb25lbnRFZmZlY3RTdGFydFRpbWUgPSBwcm9maWxlclN0YXJ0VGltZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24oZmliZXIpIHtcbiAgICAgIGZvciAodmFyIGNoaWxkID0gZmliZXIuY2hpbGQ7IGNoaWxkOyApXG4gICAgICAgIChmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbiksIChjaGlsZCA9IGNoaWxkLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnRhbmdsZUFzeW5jQWN0aW9uKHRyYW5zaXRpb24sIHRoZW5hYmxlKSB7XG4gICAgICBpZiAobnVsbCA9PT0gY3VycmVudEVudGFuZ2xlZExpc3RlbmVycykge1xuICAgICAgICB2YXIgZW50YW5nbGVkTGlzdGVuZXJzID0gKGN1cnJlbnRFbnRhbmdsZWRMaXN0ZW5lcnMgPSBbXSk7XG4gICAgICAgIGN1cnJlbnRFbnRhbmdsZWRQZW5kaW5nQ291bnQgPSAwO1xuICAgICAgICBjdXJyZW50RW50YW5nbGVkTGFuZSA9IHJlcXVlc3RUcmFuc2l0aW9uTGFuZSgpO1xuICAgICAgICBjdXJyZW50RW50YW5nbGVkQWN0aW9uVGhlbmFibGUgPSB7XG4gICAgICAgICAgc3RhdHVzOiBcInBlbmRpbmdcIixcbiAgICAgICAgICB2YWx1ZTogdm9pZCAwLFxuICAgICAgICAgIHRoZW46IGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICBlbnRhbmdsZWRMaXN0ZW5lcnMucHVzaChyZXNvbHZlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjdXJyZW50RW50YW5nbGVkUGVuZGluZ0NvdW50Kys7XG4gICAgICB0aGVuYWJsZS50aGVuKHBpbmdFbmd0YW5nbGVkQWN0aW9uU2NvcGUsIHBpbmdFbmd0YW5nbGVkQWN0aW9uU2NvcGUpO1xuICAgICAgcmV0dXJuIHRoZW5hYmxlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwaW5nRW5ndGFuZ2xlZEFjdGlvblNjb3BlKCkge1xuICAgICAgaWYgKFxuICAgICAgICAwID09PSAtLWN1cnJlbnRFbnRhbmdsZWRQZW5kaW5nQ291bnQgJiZcbiAgICAgICAgbnVsbCAhPT0gY3VycmVudEVudGFuZ2xlZExpc3RlbmVyc1xuICAgICAgKSB7XG4gICAgICAgIG51bGwgIT09IGN1cnJlbnRFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSAmJlxuICAgICAgICAgIChjdXJyZW50RW50YW5nbGVkQWN0aW9uVGhlbmFibGUuc3RhdHVzID0gXCJmdWxmaWxsZWRcIik7XG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSBjdXJyZW50RW50YW5nbGVkTGlzdGVuZXJzO1xuICAgICAgICBjdXJyZW50RW50YW5nbGVkTGlzdGVuZXJzID0gbnVsbDtcbiAgICAgICAgY3VycmVudEVudGFuZ2xlZExhbmUgPSAwO1xuICAgICAgICBjdXJyZW50RW50YW5nbGVkQWN0aW9uVGhlbmFibGUgPSBudWxsO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykgKDAsIGxpc3RlbmVyc1tpXSkoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY2hhaW5UaGVuYWJsZVZhbHVlKHRoZW5hYmxlLCByZXN1bHQpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXSxcbiAgICAgICAgdGhlbmFibGVXaXRoT3ZlcnJpZGUgPSB7XG4gICAgICAgICAgc3RhdHVzOiBcInBlbmRpbmdcIixcbiAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICByZWFzb246IG51bGwsXG4gICAgICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIGxpc3RlbmVycy5wdXNoKHJlc29sdmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIHRoZW5hYmxlLnRoZW4oXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGVuYWJsZVdpdGhPdmVycmlkZS5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiO1xuICAgICAgICAgIHRoZW5hYmxlV2l0aE92ZXJyaWRlLnZhbHVlID0gcmVzdWx0O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSAoMCwgbGlzdGVuZXJzW2ldKShyZXN1bHQpO1xuICAgICAgICB9LFxuICAgICAgICBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICB0aGVuYWJsZVdpdGhPdmVycmlkZS5zdGF0dXMgPSBcInJlamVjdGVkXCI7XG4gICAgICAgICAgdGhlbmFibGVXaXRoT3ZlcnJpZGUucmVhc29uID0gZXJyb3I7XG4gICAgICAgICAgZm9yIChlcnJvciA9IDA7IGVycm9yIDwgbGlzdGVuZXJzLmxlbmd0aDsgZXJyb3IrKylcbiAgICAgICAgICAgICgwLCBsaXN0ZW5lcnNbZXJyb3JdKSh2b2lkIDApO1xuICAgICAgICB9XG4gICAgICApO1xuICAgICAgcmV0dXJuIHRoZW5hYmxlV2l0aE92ZXJyaWRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZWVrQ2FjaGVGcm9tUG9vbCgpIHtcbiAgICAgIHZhciBjYWNoZVJlc3VtZWRGcm9tUHJldmlvdXNSZW5kZXIgPSByZXN1bWVkQ2FjaGUuY3VycmVudDtcbiAgICAgIHJldHVybiBudWxsICE9PSBjYWNoZVJlc3VtZWRGcm9tUHJldmlvdXNSZW5kZXJcbiAgICAgICAgPyBjYWNoZVJlc3VtZWRGcm9tUHJldmlvdXNSZW5kZXJcbiAgICAgICAgOiB3b3JrSW5Qcm9ncmVzc1Jvb3QucG9vbGVkQ2FjaGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hUcmFuc2l0aW9uKG9mZnNjcmVlbldvcmtJblByb2dyZXNzLCBwcmV2Q2FjaGVQb29sKSB7XG4gICAgICBudWxsID09PSBwcmV2Q2FjaGVQb29sXG4gICAgICAgID8gcHVzaChyZXN1bWVkQ2FjaGUsIHJlc3VtZWRDYWNoZS5jdXJyZW50LCBvZmZzY3JlZW5Xb3JrSW5Qcm9ncmVzcylcbiAgICAgICAgOiBwdXNoKHJlc3VtZWRDYWNoZSwgcHJldkNhY2hlUG9vbC5wb29sLCBvZmZzY3JlZW5Xb3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1c3BlbmRlZENhY2hlKCkge1xuICAgICAgdmFyIGNhY2hlRnJvbVBvb2wgPSBwZWVrQ2FjaGVGcm9tUG9vbCgpO1xuICAgICAgcmV0dXJuIG51bGwgPT09IGNhY2hlRnJvbVBvb2xcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogeyBwYXJlbnQ6IENhY2hlQ29udGV4dC5fY3VycmVudFZhbHVlLCBwb29sOiBjYWNoZUZyb21Qb29sIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVRoZW5hYmxlU3RhdGUoKSB7XG4gICAgICByZXR1cm4geyBkaWRXYXJuQWJvdXRVbmNhY2hlZFByb21pc2U6ICExLCB0aGVuYWJsZXM6IFtdIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzVGhlbmFibGVSZXNvbHZlZCh0aGVuYWJsZSkge1xuICAgICAgdGhlbmFibGUgPSB0aGVuYWJsZS5zdGF0dXM7XG4gICAgICByZXR1cm4gXCJmdWxmaWxsZWRcIiA9PT0gdGhlbmFibGUgfHwgXCJyZWplY3RlZFwiID09PSB0aGVuYWJsZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhY2tVc2VkVGhlbmFibGUodGhlbmFibGVTdGF0ZSwgdGhlbmFibGUsIGluZGV4KSB7XG4gICAgICBudWxsICE9PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSAmJlxuICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuZGlkVXNlUHJvbWlzZSA9ICEwKTtcbiAgICAgIHZhciB0cmFja2VkVGhlbmFibGVzID0gdGhlbmFibGVTdGF0ZS50aGVuYWJsZXM7XG4gICAgICBpbmRleCA9IHRyYWNrZWRUaGVuYWJsZXNbaW5kZXhdO1xuICAgICAgdm9pZCAwID09PSBpbmRleFxuICAgICAgICA/IHRyYWNrZWRUaGVuYWJsZXMucHVzaCh0aGVuYWJsZSlcbiAgICAgICAgOiBpbmRleCAhPT0gdGhlbmFibGUgJiZcbiAgICAgICAgICAodGhlbmFibGVTdGF0ZS5kaWRXYXJuQWJvdXRVbmNhY2hlZFByb21pc2UgfHxcbiAgICAgICAgICAgICgodGhlbmFibGVTdGF0ZS5kaWRXYXJuQWJvdXRVbmNhY2hlZFByb21pc2UgPSAhMCksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkEgY29tcG9uZW50IHdhcyBzdXNwZW5kZWQgYnkgYW4gdW5jYWNoZWQgcHJvbWlzZS4gQ3JlYXRpbmcgcHJvbWlzZXMgaW5zaWRlIGEgQ2xpZW50IENvbXBvbmVudCBvciBob29rIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLCBleGNlcHQgdmlhIGEgU3VzcGVuc2UtY29tcGF0aWJsZSBsaWJyYXJ5IG9yIGZyYW1ld29yay5cIlxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgdGhlbmFibGUudGhlbihub29wJDEsIG5vb3AkMSksXG4gICAgICAgICAgKHRoZW5hYmxlID0gaW5kZXgpKTtcbiAgICAgIHN3aXRjaCAodGhlbmFibGUuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgICAgICByZXR1cm4gdGhlbmFibGUudmFsdWU7XG4gICAgICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgICAgICAgIHRocm93IChcbiAgICAgICAgICAgICgodGhlbmFibGVTdGF0ZSA9IHRoZW5hYmxlLnJlYXNvbiksXG4gICAgICAgICAgICBjaGVja0lmVXNlV3JhcHBlZEluQXN5bmNDYXRjaCh0aGVuYWJsZVN0YXRlKSxcbiAgICAgICAgICAgIHRoZW5hYmxlU3RhdGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHRoZW5hYmxlLnN0YXR1cylcbiAgICAgICAgICAgIHRoZW5hYmxlLnRoZW4obm9vcCQxLCBub29wJDEpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhlbmFibGVTdGF0ZSA9IHdvcmtJblByb2dyZXNzUm9vdDtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbnVsbCAhPT0gdGhlbmFibGVTdGF0ZSAmJlxuICAgICAgICAgICAgICAxMDAgPCB0aGVuYWJsZVN0YXRlLnNoZWxsU3VzcGVuZENvdW50ZXJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJBbiB1bmtub3duIENvbXBvbmVudCBpcyBhbiBhc3luYyBDbGllbnQgQ29tcG9uZW50LiBPbmx5IFNlcnZlciBDb21wb25lbnRzIGNhbiBiZSBhc3luYyBhdCB0aGUgbW9tZW50LiBUaGlzIGVycm9yIGlzIG9mdGVuIGNhdXNlZCBieSBhY2NpZGVudGFsbHkgYWRkaW5nIGAndXNlIGNsaWVudCdgIHRvIGEgbW9kdWxlIHRoYXQgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBmb3IgdGhlIHNlcnZlci5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhlbmFibGVTdGF0ZSA9IHRoZW5hYmxlO1xuICAgICAgICAgICAgdGhlbmFibGVTdGF0ZS5zdGF0dXMgPSBcInBlbmRpbmdcIjtcbiAgICAgICAgICAgIHRoZW5hYmxlU3RhdGUudGhlbihcbiAgICAgICAgICAgICAgZnVuY3Rpb24gKGZ1bGZpbGxlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKFwicGVuZGluZ1wiID09PSB0aGVuYWJsZS5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBmdWxmaWxsZWRUaGVuYWJsZSA9IHRoZW5hYmxlO1xuICAgICAgICAgICAgICAgICAgZnVsZmlsbGVkVGhlbmFibGUuc3RhdHVzID0gXCJmdWxmaWxsZWRcIjtcbiAgICAgICAgICAgICAgICAgIGZ1bGZpbGxlZFRoZW5hYmxlLnZhbHVlID0gZnVsZmlsbGVkVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoXCJwZW5kaW5nXCIgPT09IHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgdmFyIHJlamVjdGVkVGhlbmFibGUgPSB0aGVuYWJsZTtcbiAgICAgICAgICAgICAgICAgIHJlamVjdGVkVGhlbmFibGUuc3RhdHVzID0gXCJyZWplY3RlZFwiO1xuICAgICAgICAgICAgICAgICAgcmVqZWN0ZWRUaGVuYWJsZS5yZWFzb24gPSBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN3aXRjaCAodGhlbmFibGUuc3RhdHVzKSB7XG4gICAgICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgICAgIHJldHVybiB0aGVuYWJsZS52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgICAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAgICAgKCh0aGVuYWJsZVN0YXRlID0gdGhlbmFibGUucmVhc29uKSxcbiAgICAgICAgICAgICAgICBjaGVja0lmVXNlV3JhcHBlZEluQXN5bmNDYXRjaCh0aGVuYWJsZVN0YXRlKSxcbiAgICAgICAgICAgICAgICB0aGVuYWJsZVN0YXRlKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdXNwZW5kZWRUaGVuYWJsZSA9IHRoZW5hYmxlO1xuICAgICAgICAgIG5lZWRzVG9SZXNldFN1c3BlbmRlZFRoZW5hYmxlREVWID0gITA7XG4gICAgICAgICAgdGhyb3cgU3VzcGVuc2VFeGNlcHRpb247XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1c3BlbmRlZFRoZW5hYmxlKCkge1xuICAgICAgaWYgKG51bGwgPT09IHN1c3BlbmRlZFRoZW5hYmxlKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIkV4cGVjdGVkIGEgc3VzcGVuZGVkIHRoZW5hYmxlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgICAgdmFyIHRoZW5hYmxlID0gc3VzcGVuZGVkVGhlbmFibGU7XG4gICAgICBzdXNwZW5kZWRUaGVuYWJsZSA9IG51bGw7XG4gICAgICBuZWVkc1RvUmVzZXRTdXNwZW5kZWRUaGVuYWJsZURFViA9ICExO1xuICAgICAgcmV0dXJuIHRoZW5hYmxlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0lmVXNlV3JhcHBlZEluQXN5bmNDYXRjaChyZWplY3RlZFJlYXNvbikge1xuICAgICAgaWYgKFxuICAgICAgICByZWplY3RlZFJlYXNvbiA9PT0gU3VzcGVuc2VFeGNlcHRpb24gfHxcbiAgICAgICAgcmVqZWN0ZWRSZWFzb24gPT09IFN1c3BlbnNlQWN0aW9uRXhjZXB0aW9uXG4gICAgICApXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiSG9va3MgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGFuIGFzeW5jIGNvbXBvbmVudC4gVGhpcyBlcnJvciBpcyBvZnRlbiBjYXVzZWQgYnkgYWNjaWRlbnRhbGx5IGFkZGluZyBgJ3VzZSBjbGllbnQnYCB0byBhIG1vZHVsZSB0aGF0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gZm9yIHRoZSBzZXJ2ZXIuXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaERlYnVnSW5mbyhkZWJ1Z0luZm8pIHtcbiAgICAgIHZhciBwcmV2aW91c0RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm87XG4gICAgICBudWxsICE9IGRlYnVnSW5mbyAmJlxuICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9XG4gICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNEZWJ1Z0luZm9cbiAgICAgICAgICAgID8gZGVidWdJbmZvXG4gICAgICAgICAgICA6IHByZXZpb3VzRGVidWdJbmZvLmNvbmNhdChkZWJ1Z0luZm8pKTtcbiAgICAgIHJldHVybiBwcmV2aW91c0RlYnVnSW5mbztcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQsIGZpYmVyLCByZXR1cm5GaWJlcikge1xuICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKGVsZW1lbnQucHJvcHMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgIGlmIChcImNoaWxkcmVuXCIgIT09IGtleSAmJiBcImtleVwiICE9PSBrZXkpIHtcbiAgICAgICAgICBudWxsID09PSBmaWJlciAmJlxuICAgICAgICAgICAgKChmaWJlciA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgcmV0dXJuRmliZXIubW9kZSwgMCkpLFxuICAgICAgICAgICAgKGZpYmVyLl9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgIChmaWJlci5yZXR1cm4gPSByZXR1cm5GaWJlcikpO1xuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyb3JlZEtleSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy5cIixcbiAgICAgICAgICAgICAgICBlcnJvcmVkS2V5XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2V5XG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1bndyYXBUaGVuYWJsZSh0aGVuYWJsZSkge1xuICAgICAgdmFyIGluZGV4ID0gdGhlbmFibGVJbmRleENvdW50ZXIkMTtcbiAgICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyJDEgKz0gMTtcbiAgICAgIG51bGwgPT09IHRoZW5hYmxlU3RhdGUkMSAmJiAodGhlbmFibGVTdGF0ZSQxID0gY3JlYXRlVGhlbmFibGVTdGF0ZSgpKTtcbiAgICAgIHJldHVybiB0cmFja1VzZWRUaGVuYWJsZSh0aGVuYWJsZVN0YXRlJDEsIHRoZW5hYmxlLCBpbmRleCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvZXJjZVJlZih3b3JrSW5Qcm9ncmVzcywgZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IGVsZW1lbnQucHJvcHMucmVmO1xuICAgICAgd29ya0luUHJvZ3Jlc3MucmVmID0gdm9pZCAwICE9PSBlbGVtZW50ID8gZWxlbWVudCA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpIHtcbiAgICAgIGlmIChuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfTEVHQUNZX0VMRU1FTlRfVFlQRSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgJ0EgUmVhY3QgRWxlbWVudCBmcm9tIGFuIG9sZGVyIHZlcnNpb24gb2YgUmVhY3Qgd2FzIHJlbmRlcmVkLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuIEl0IGNhbiBoYXBwZW4gaWY6XFxuLSBNdWx0aXBsZSBjb3BpZXMgb2YgdGhlIFwicmVhY3RcIiBwYWNrYWdlIGlzIHVzZWQuXFxuLSBBIGxpYnJhcnkgcHJlLWJ1bmRsZWQgYW4gb2xkIGNvcHkgb2YgXCJyZWFjdFwiIG9yIFwicmVhY3QvanN4LXJ1bnRpbWVcIi5cXG4tIEEgY29tcGlsZXIgdHJpZXMgdG8gXCJpbmxpbmVcIiBKU1ggaW5zdGVhZCBvZiB1c2luZyB0aGUgcnVudGltZS4nXG4gICAgICAgICk7XG4gICAgICByZXR1cm5GaWJlciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXdDaGlsZCk7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICtcbiAgICAgICAgICAoXCJbb2JqZWN0IE9iamVjdF1cIiA9PT0gcmV0dXJuRmliZXJcbiAgICAgICAgICAgID8gXCJvYmplY3Qgd2l0aCBrZXlzIHtcIiArIE9iamVjdC5rZXlzKG5ld0NoaWxkKS5qb2luKFwiLCBcIikgKyBcIn1cIlxuICAgICAgICAgICAgOiByZXR1cm5GaWJlcikgK1xuICAgICAgICAgIFwiKS4gSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSBpbnN0ZWFkLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIsIGludmFsaWRDaGlsZCkge1xuICAgICAgdmFyIHBhcmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHJldHVybkZpYmVyKSB8fCBcIkNvbXBvbmVudFwiO1xuICAgICAgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW3BhcmVudE5hbWVdIHx8XG4gICAgICAgICgob3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nW3BhcmVudE5hbWVdID0gITApLFxuICAgICAgICAoaW52YWxpZENoaWxkID1cbiAgICAgICAgICBpbnZhbGlkQ2hpbGQuZGlzcGxheU5hbWUgfHwgaW52YWxpZENoaWxkLm5hbWUgfHwgXCJDb21wb25lbnRcIiksXG4gICAgICAgIDMgPT09IHJldHVybkZpYmVyLnRhZ1xuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJGdW5jdGlvbnMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkLiBUaGlzIG1heSBoYXBwZW4gaWYgeW91IHJldHVybiAlcyBpbnN0ZWFkIG9mIDwlcyAvPiBmcm9tIHJlbmRlci4gT3IgbWF5YmUgeW91IG1lYW50IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiByZXR1cm4gaXQuXFxuICByb290LnJlbmRlciglcylcIixcbiAgICAgICAgICAgICAgaW52YWxpZENoaWxkLFxuICAgICAgICAgICAgICBpbnZhbGlkQ2hpbGQsXG4gICAgICAgICAgICAgIGludmFsaWRDaGlsZFxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJGdW5jdGlvbnMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkLiBUaGlzIG1heSBoYXBwZW4gaWYgeW91IHJldHVybiAlcyBpbnN0ZWFkIG9mIDwlcyAvPiBmcm9tIHJlbmRlci4gT3IgbWF5YmUgeW91IG1lYW50IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiByZXR1cm4gaXQuXFxuICA8JXM+eyVzfTwvJXM+XCIsXG4gICAgICAgICAgICAgIGludmFsaWRDaGlsZCxcbiAgICAgICAgICAgICAgaW52YWxpZENoaWxkLFxuICAgICAgICAgICAgICBwYXJlbnROYW1lLFxuICAgICAgICAgICAgICBpbnZhbGlkQ2hpbGQsXG4gICAgICAgICAgICAgIHBhcmVudE5hbWVcbiAgICAgICAgICAgICkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuT25TeW1ib2xUeXBlKHJldHVybkZpYmVyLCBpbnZhbGlkQ2hpbGQpIHtcbiAgICAgIHZhciBwYXJlbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihyZXR1cm5GaWJlcikgfHwgXCJDb21wb25lbnRcIjtcbiAgICAgIG93bmVySGFzU3ltYm9sVHlwZVdhcm5pbmdbcGFyZW50TmFtZV0gfHxcbiAgICAgICAgKChvd25lckhhc1N5bWJvbFR5cGVXYXJuaW5nW3BhcmVudE5hbWVdID0gITApLFxuICAgICAgICAoaW52YWxpZENoaWxkID0gU3RyaW5nKGludmFsaWRDaGlsZCkpLFxuICAgICAgICAzID09PSByZXR1cm5GaWJlci50YWdcbiAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiU3ltYm9scyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQuXFxuICByb290LnJlbmRlciglcylcIixcbiAgICAgICAgICAgICAgaW52YWxpZENoaWxkXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlN5bWJvbHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkLlxcbiAgPCVzPiVzPC8lcz5cIixcbiAgICAgICAgICAgICAgcGFyZW50TmFtZSxcbiAgICAgICAgICAgICAgaW52YWxpZENoaWxkLFxuICAgICAgICAgICAgICBwYXJlbnROYW1lXG4gICAgICAgICAgICApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ2hpbGRSZWNvbmNpbGVyKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIGZ1bmN0aW9uIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKSB7XG4gICAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgICAgdmFyIGRlbGV0aW9ucyA9IHJldHVybkZpYmVyLmRlbGV0aW9ucztcbiAgICAgICAgICBudWxsID09PSBkZWxldGlvbnNcbiAgICAgICAgICAgID8gKChyZXR1cm5GaWJlci5kZWxldGlvbnMgPSBbY2hpbGRUb0RlbGV0ZV0pLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIuZmxhZ3MgfD0gMTYpKVxuICAgICAgICAgICAgOiBkZWxldGlvbnMucHVzaChjaGlsZFRvRGVsZXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykgcmV0dXJuIG51bGw7XG4gICAgICAgIGZvciAoOyBudWxsICE9PSBjdXJyZW50Rmlyc3RDaGlsZDsgKVxuICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCksXG4gICAgICAgICAgICAoY3VycmVudEZpcnN0Q2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBtYXBSZW1haW5pbmdDaGlsZHJlbihjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgICAgICBmb3IgKHZhciBleGlzdGluZ0NoaWxkcmVuID0gbmV3IE1hcCgpOyBudWxsICE9PSBjdXJyZW50Rmlyc3RDaGlsZDsgKVxuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnRGaXJzdENoaWxkLmtleVxuICAgICAgICAgICAgPyBleGlzdGluZ0NoaWxkcmVuLnNldChjdXJyZW50Rmlyc3RDaGlsZC5rZXksIGN1cnJlbnRGaXJzdENoaWxkKVxuICAgICAgICAgICAgOiBleGlzdGluZ0NoaWxkcmVuLnNldChjdXJyZW50Rmlyc3RDaGlsZC5pbmRleCwgY3VycmVudEZpcnN0Q2hpbGQpLFxuICAgICAgICAgICAgKGN1cnJlbnRGaXJzdENoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQuc2libGluZyk7XG4gICAgICAgIHJldHVybiBleGlzdGluZ0NoaWxkcmVuO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdXNlRmliZXIoZmliZXIsIHBlbmRpbmdQcm9wcykge1xuICAgICAgICBmaWJlciA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGZpYmVyLCBwZW5kaW5nUHJvcHMpO1xuICAgICAgICBmaWJlci5pbmRleCA9IDA7XG4gICAgICAgIGZpYmVyLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICByZXR1cm4gZmliZXI7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0luZGV4KSB7XG4gICAgICAgIG5ld0ZpYmVyLmluZGV4ID0gbmV3SW5kZXg7XG4gICAgICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cylcbiAgICAgICAgICByZXR1cm4gKG5ld0ZpYmVyLmZsYWdzIHw9IDEwNDg1NzYpLCBsYXN0UGxhY2VkSW5kZXg7XG4gICAgICAgIG5ld0luZGV4ID0gbmV3RmliZXIuYWx0ZXJuYXRlO1xuICAgICAgICBpZiAobnVsbCAhPT0gbmV3SW5kZXgpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChuZXdJbmRleCA9IG5ld0luZGV4LmluZGV4KSxcbiAgICAgICAgICAgIG5ld0luZGV4IDwgbGFzdFBsYWNlZEluZGV4XG4gICAgICAgICAgICAgID8gKChuZXdGaWJlci5mbGFncyB8PSA2NzEwODg2NiksIGxhc3RQbGFjZWRJbmRleClcbiAgICAgICAgICAgICAgOiBuZXdJbmRleFxuICAgICAgICAgICk7XG4gICAgICAgIG5ld0ZpYmVyLmZsYWdzIHw9IDY3MTA4ODY2O1xuICAgICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcGxhY2VTaW5nbGVDaGlsZChuZXdGaWJlcikge1xuICAgICAgICBzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmXG4gICAgICAgICAgbnVsbCA9PT0gbmV3RmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgKG5ld0ZpYmVyLmZsYWdzIHw9IDY3MTA4ODY2KTtcbiAgICAgICAgcmV0dXJuIG5ld0ZpYmVyO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnQsIHRleHRDb250ZW50LCBsYW5lcykge1xuICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudCB8fCA2ICE9PSBjdXJyZW50LnRhZylcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGN1cnJlbnQgPSBjcmVhdGVGaWJlckZyb21UZXh0KFxuICAgICAgICAgICAgICB0ZXh0Q29udGVudCxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgKGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgKGN1cnJlbnQuX2RlYnVnT3duZXIgPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAoY3VycmVudC5fZGVidWdUYXNrID0gcmV0dXJuRmliZXIuX2RlYnVnVGFzayksXG4gICAgICAgICAgICAoY3VycmVudC5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICBjdXJyZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgY3VycmVudCA9IHVzZUZpYmVyKGN1cnJlbnQsIHRleHRDb250ZW50KTtcbiAgICAgICAgY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgY3VycmVudC5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbztcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50LCBsYW5lcykge1xuICAgICAgICB2YXIgZWxlbWVudFR5cGUgPSBlbGVtZW50LnR5cGU7XG4gICAgICAgIGlmIChlbGVtZW50VHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSlcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGN1cnJlbnQgPSB1cGRhdGVGcmFnbWVudChcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIGVsZW1lbnQucHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICBlbGVtZW50LmtleVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZWxlbWVudCwgY3VycmVudCwgcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgY3VycmVudFxuICAgICAgICAgICk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgKGN1cnJlbnQuZWxlbWVudFR5cGUgPT09IGVsZW1lbnRUeXBlIHx8XG4gICAgICAgICAgICBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoY3VycmVudCwgZWxlbWVudCkgfHxcbiAgICAgICAgICAgIChcIm9iamVjdFwiID09PSB0eXBlb2YgZWxlbWVudFR5cGUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gZWxlbWVudFR5cGUgJiZcbiAgICAgICAgICAgICAgZWxlbWVudFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSAmJlxuICAgICAgICAgICAgICBjYWxsTGF6eUluaXRJbkRFVihlbGVtZW50VHlwZSkgPT09IGN1cnJlbnQudHlwZSkpXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGN1cnJlbnQgPSB1c2VGaWJlcihjdXJyZW50LCBlbGVtZW50LnByb3BzKSksXG4gICAgICAgICAgICBjb2VyY2VSZWYoY3VycmVudCwgZWxlbWVudCksXG4gICAgICAgICAgICAoY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAoY3VycmVudC5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyKSxcbiAgICAgICAgICAgIChjdXJyZW50Ll9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgIGN1cnJlbnRcbiAgICAgICAgICApO1xuICAgICAgICBjdXJyZW50ID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICAgIGNvZXJjZVJlZihjdXJyZW50LCBlbGVtZW50KTtcbiAgICAgICAgY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgY3VycmVudC5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbztcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIGN1cnJlbnQsIHBvcnRhbCwgbGFuZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgICAgICA0ICE9PSBjdXJyZW50LnRhZyB8fFxuICAgICAgICAgIGN1cnJlbnQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gIT09IHBvcnRhbC5jb250YWluZXJJbmZvIHx8XG4gICAgICAgICAgY3VycmVudC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gIT09IHBvcnRhbC5pbXBsZW1lbnRhdGlvblxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChjdXJyZW50ID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpKSxcbiAgICAgICAgICAgIChjdXJyZW50LnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIChjdXJyZW50Ll9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgIGN1cnJlbnRcbiAgICAgICAgICApO1xuICAgICAgICBjdXJyZW50ID0gdXNlRmliZXIoY3VycmVudCwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgICAgY3VycmVudC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgY3VycmVudC5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbztcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgY3VycmVudCwgZnJhZ21lbnQsIGxhbmVzLCBrZXkpIHtcbiAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQgfHwgNyAhPT0gY3VycmVudC50YWcpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChjdXJyZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICAgIGZyYWdtZW50LFxuICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIChjdXJyZW50LnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgIChjdXJyZW50Ll9kZWJ1Z093bmVyID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgKGN1cnJlbnQuX2RlYnVnVGFzayA9IHJldHVybkZpYmVyLl9kZWJ1Z1Rhc2spLFxuICAgICAgICAgICAgKGN1cnJlbnQuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgY3VycmVudFxuICAgICAgICAgICk7XG4gICAgICAgIGN1cnJlbnQgPSB1c2VGaWJlcihjdXJyZW50LCBmcmFnbWVudCk7XG4gICAgICAgIGN1cnJlbnQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgIGN1cnJlbnQuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm87XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBcIlwiICE9PSBuZXdDaGlsZCkgfHxcbiAgICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgbmV3Q2hpbGQgfHxcbiAgICAgICAgICBcImJpZ2ludFwiID09PSB0eXBlb2YgbmV3Q2hpbGRcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobmV3Q2hpbGQgPSBjcmVhdGVGaWJlckZyb21UZXh0KFxuICAgICAgICAgICAgICBcIlwiICsgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIChuZXdDaGlsZC5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAobmV3Q2hpbGQuX2RlYnVnT3duZXIgPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAobmV3Q2hpbGQuX2RlYnVnVGFzayA9IHJldHVybkZpYmVyLl9kZWJ1Z1Rhc2spLFxuICAgICAgICAgICAgKG5ld0NoaWxkLl9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgIG5ld0NoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBudWxsICE9PSBuZXdDaGlsZCkge1xuICAgICAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIChsYW5lcyA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIGNvZXJjZVJlZihsYW5lcywgbmV3Q2hpbGQpLFxuICAgICAgICAgICAgICAgIChsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKSksXG4gICAgICAgICAgICAgICAgKGxhbmVzLl9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAobmV3Q2hpbGQgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwoXG4gICAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChuZXdDaGlsZC5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgKG5ld0NoaWxkLl9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgICAgICBuZXdDaGlsZFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIHZhciBfcHJldkRlYnVnSW5mbyA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbyk7XG4gICAgICAgICAgICAgIG5ld0NoaWxkID0gY2FsbExhenlJbml0SW5ERVYobmV3Q2hpbGQpO1xuICAgICAgICAgICAgICByZXR1cm5GaWJlciA9IGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgICAgICBjdXJyZW50RGVidWdJbmZvID0gX3ByZXZEZWJ1Z0luZm87XG4gICAgICAgICAgICAgIHJldHVybiByZXR1cm5GaWJlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSlcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChsYW5lcyA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KFxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgKGxhbmVzLl9kZWJ1Z093bmVyID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAobGFuZXMuX2RlYnVnVGFzayA9IHJldHVybkZpYmVyLl9kZWJ1Z1Rhc2spLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgKGxhbmVzLl9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdDaGlsZC50aGVuKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKF9wcmV2RGVidWdJbmZvID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKSksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IGNyZWF0ZUNoaWxkKFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgIHVud3JhcFRoZW5hYmxlKG5ld0NoaWxkKSxcbiAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnREZWJ1Z0luZm8gPSBfcHJldkRlYnVnSW5mbyksXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFKVxuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNoaWxkKFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgcmVhZENvbnRleHREdXJpbmdSZWNvbmNpbGlhdGlvbihyZXR1cm5GaWJlciwgbmV3Q2hpbGQpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJlxuICAgICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICBcInN5bWJvbFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgd2Fybk9uU3ltYm9sVHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAgICAgdmFyIGtleSA9IG51bGwgIT09IG9sZEZpYmVyID8gb2xkRmliZXIua2V5IDogbnVsbDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgXCJcIiAhPT0gbmV3Q2hpbGQpIHx8XG4gICAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIG5ld0NoaWxkIHx8XG4gICAgICAgICAgXCJiaWdpbnRcIiA9PT0gdHlwZW9mIG5ld0NoaWxkXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gbnVsbCAhPT0ga2V5XG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDogdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBcIlwiICsgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBudWxsICE9PSBuZXdDaGlsZCkge1xuICAgICAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3Q2hpbGQua2V5ID09PSBrZXlcbiAgICAgICAgICAgICAgICA/ICgoa2V5ID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKSksXG4gICAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSB1cGRhdGVFbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9IGtleSksXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcilcbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3Q2hpbGQua2V5ID09PSBrZXlcbiAgICAgICAgICAgICAgICA/IHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcylcbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAoa2V5ID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKSksXG4gICAgICAgICAgICAgICAgKG5ld0NoaWxkID0gY2FsbExhenlJbml0SW5ERVYobmV3Q2hpbGQpKSxcbiAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSB1cGRhdGVTbG90KFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9IGtleSksXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IGtleSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBrZXkgPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pO1xuICAgICAgICAgICAgcmV0dXJuRmliZXIgPSB1cGRhdGVGcmFnbWVudChcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjdXJyZW50RGVidWdJbmZvID0ga2V5O1xuICAgICAgICAgICAgcmV0dXJuIHJldHVybkZpYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQudGhlbilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChrZXkgPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gdXBkYXRlU2xvdChcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgICAgICB1bndyYXBUaGVuYWJsZShuZXdDaGlsZCksXG4gICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0ga2V5KSxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG5ld0NoaWxkLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUpXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlU2xvdChcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgICByZWFkQ29udGV4dER1cmluZ1JlY29uY2lsaWF0aW9uKHJldHVybkZpYmVyLCBuZXdDaGlsZCksXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmXG4gICAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIFwic3ltYm9sXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiB3YXJuT25TeW1ib2xUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgZXhpc3RpbmdDaGlsZHJlbixcbiAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgIG5ld0lkeCxcbiAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgIGxhbmVzXG4gICAgICApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgXCJcIiAhPT0gbmV3Q2hpbGQpIHx8XG4gICAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIG5ld0NoaWxkIHx8XG4gICAgICAgICAgXCJiaWdpbnRcIiA9PT0gdHlwZW9mIG5ld0NoaWxkXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGV4aXN0aW5nQ2hpbGRyZW4gPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdJZHgpIHx8IG51bGwpLFxuICAgICAgICAgICAgdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIGV4aXN0aW5nQ2hpbGRyZW4sIFwiXCIgKyBuZXdDaGlsZCwgbGFuZXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBudWxsICE9PSBuZXdDaGlsZCkge1xuICAgICAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIChuZXdJZHggPVxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5nZXQoXG4gICAgICAgICAgICAgICAgICAgIG51bGwgPT09IG5ld0NoaWxkLmtleSA/IG5ld0lkeCA6IG5ld0NoaWxkLmtleVxuICAgICAgICAgICAgICAgICAgKSB8fCBudWxsKSxcbiAgICAgICAgICAgICAgICAoZXhpc3RpbmdDaGlsZHJlbiA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHVwZGF0ZUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9IGV4aXN0aW5nQ2hpbGRyZW4pLFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIChleGlzdGluZ0NoaWxkcmVuID1cbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KFxuICAgICAgICAgICAgICAgICAgICBudWxsID09PSBuZXdDaGlsZC5rZXkgPyBuZXdJZHggOiBuZXdDaGlsZC5rZXlcbiAgICAgICAgICAgICAgICAgICkgfHwgbnVsbCksXG4gICAgICAgICAgICAgICAgdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBleGlzdGluZ0NoaWxkcmVuLCBuZXdDaGlsZCwgbGFuZXMpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgdmFyIF9wcmV2RGVidWdJbmZvNyA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbyk7XG4gICAgICAgICAgICAgIG5ld0NoaWxkID0gY2FsbExhenlJbml0SW5ERVYobmV3Q2hpbGQpO1xuICAgICAgICAgICAgICByZXR1cm5GaWJlciA9IHVwZGF0ZUZyb21NYXAoXG4gICAgICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbixcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICBuZXdJZHgsXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY3VycmVudERlYnVnSW5mbyA9IF9wcmV2RGVidWdJbmZvNztcbiAgICAgICAgICAgICAgcmV0dXJuIHJldHVybkZpYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNBcnJheUltcGwobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKG5ld0lkeCA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbCksXG4gICAgICAgICAgICAgIChleGlzdGluZ0NoaWxkcmVuID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKSksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHVwZGF0ZUZyYWdtZW50KFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9IGV4aXN0aW5nQ2hpbGRyZW4pLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQudGhlbilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChfcHJldkRlYnVnSW5mbzcgPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICAgICAgICB1bndyYXBUaGVuYWJsZShuZXdDaGlsZCksXG4gICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0gX3ByZXZEZWJ1Z0luZm83KSxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG5ld0NoaWxkLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUpXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbixcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIG5ld0lkeCxcbiAgICAgICAgICAgICAgcmVhZENvbnRleHREdXJpbmdSZWNvbmNpbGlhdGlvbihyZXR1cm5GaWJlciwgbmV3Q2hpbGQpLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJlxuICAgICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICBcInN5bWJvbFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgd2Fybk9uU3ltYm9sVHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHdhcm5PbkludmFsaWRLZXkocmV0dXJuRmliZXIsIHdvcmtJblByb2dyZXNzLCBjaGlsZCwga25vd25LZXlzKSB7XG4gICAgICAgIGlmIChcIm9iamVjdFwiICE9PSB0eXBlb2YgY2hpbGQgfHwgbnVsbCA9PT0gY2hpbGQpIHJldHVybiBrbm93bktleXM7XG4gICAgICAgIHN3aXRjaCAoY2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgd2FybkZvck1pc3NpbmdLZXkocmV0dXJuRmliZXIsIHdvcmtJblByb2dyZXNzLCBjaGlsZCk7XG4gICAgICAgICAgICB2YXIga2V5ID0gY2hpbGQua2V5O1xuICAgICAgICAgICAgaWYgKFwic3RyaW5nXCIgIT09IHR5cGVvZiBrZXkpIGJyZWFrO1xuICAgICAgICAgICAgaWYgKG51bGwgPT09IGtub3duS2V5cykge1xuICAgICAgICAgICAgICBrbm93bktleXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICAgIGtub3duS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWtub3duS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICBrbm93bktleXMuYWRkKGtleSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYod29ya0luUHJvZ3Jlc3MsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIkVuY291bnRlcmVkIHR3byBjaGlsZHJlbiB3aXRoIHRoZSBzYW1lIGtleSwgYCVzYC4gS2V5cyBzaG91bGQgYmUgdW5pcXVlIHNvIHRoYXQgY29tcG9uZW50cyBtYWludGFpbiB0aGVpciBpZGVudGl0eSBhY3Jvc3MgdXBkYXRlcy4gTm9uLXVuaXF1ZSBrZXlzIG1heSBjYXVzZSBjaGlsZHJlbiB0byBiZSBkdXBsaWNhdGVkIGFuZC9vciBvbWl0dGVkIFxcdTIwMTQgdGhlIGJlaGF2aW9yIGlzIHVuc3VwcG9ydGVkIGFuZCBjb3VsZCBjaGFuZ2UgaW4gYSBmdXR1cmUgdmVyc2lvbi5cIixcbiAgICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAoY2hpbGQgPSBjYWxsTGF6eUluaXRJbkRFVihjaGlsZCkpLFxuICAgICAgICAgICAgICB3YXJuT25JbnZhbGlkS2V5KHJldHVybkZpYmVyLCB3b3JrSW5Qcm9ncmVzcywgY2hpbGQsIGtub3duS2V5cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtub3duS2V5cztcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkoXG4gICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgbmV3Q2hpbGRyZW4sXG4gICAgICAgIGxhbmVzXG4gICAgICApIHtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICB2YXIga25vd25LZXlzID0gbnVsbCxcbiAgICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBudWxsLFxuICAgICAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG51bGwsXG4gICAgICAgICAgICBvbGRGaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgbmV3SWR4ID0gKGN1cnJlbnRGaXJzdENoaWxkID0gMCksXG4gICAgICAgICAgICBuZXh0T2xkRmliZXIgPSBudWxsO1xuICAgICAgICAgIG51bGwgIT09IG9sZEZpYmVyICYmIG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICBuZXdJZHgrK1xuICAgICAgICApIHtcbiAgICAgICAgICBvbGRGaWJlci5pbmRleCA+IG5ld0lkeFxuICAgICAgICAgICAgPyAoKG5leHRPbGRGaWJlciA9IG9sZEZpYmVyKSwgKG9sZEZpYmVyID0gbnVsbCkpXG4gICAgICAgICAgICA6IChuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nKTtcbiAgICAgICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KFxuICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgIG5ld0NoaWxkcmVuW25ld0lkeF0sXG4gICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG51bGwgPT09IG5ld0ZpYmVyKSB7XG4gICAgICAgICAgICBudWxsID09PSBvbGRGaWJlciAmJiAob2xkRmliZXIgPSBuZXh0T2xkRmliZXIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoXG4gICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgIG5ld0ZpYmVyLFxuICAgICAgICAgICAgbmV3Q2hpbGRyZW5bbmV3SWR4XSxcbiAgICAgICAgICAgIGtub3duS2V5c1xuICAgICAgICAgICk7XG4gICAgICAgICAgc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJlxuICAgICAgICAgICAgb2xkRmliZXIgJiZcbiAgICAgICAgICAgIG51bGwgPT09IG5ld0ZpYmVyLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCA9IHBsYWNlQ2hpbGQobmV3RmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdJZHgpO1xuICAgICAgICAgIG51bGwgPT09IHByZXZpb3VzTmV3RmliZXJcbiAgICAgICAgICAgID8gKHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcilcbiAgICAgICAgICAgIDogKHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5ld0ZpYmVyKTtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gbmV3RmliZXI7XG4gICAgICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld0lkeCA9PT0gbmV3Q2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpLFxuICAgICAgICAgICAgaXNIeWRyYXRpbmcgJiYgcHVzaFRyZWVGb3JrKHJldHVybkZpYmVyLCBuZXdJZHgpLFxuICAgICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZFxuICAgICAgICAgICk7XG4gICAgICAgIGlmIChudWxsID09PSBvbGRGaWJlcikge1xuICAgICAgICAgIGZvciAoOyBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKVxuICAgICAgICAgICAgKG9sZEZpYmVyID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIG5ld0NoaWxkcmVuW25ld0lkeF0sIGxhbmVzKSksXG4gICAgICAgICAgICAgIG51bGwgIT09IG9sZEZpYmVyICYmXG4gICAgICAgICAgICAgICAgKChrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuW25ld0lkeF0sXG4gICAgICAgICAgICAgICAgICBrbm93bktleXNcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudEZpcnN0Q2hpbGQgPSBwbGFjZUNoaWxkKFxuICAgICAgICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgICAgIG5ld0lkeFxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIG51bGwgPT09IHByZXZpb3VzTmV3RmliZXJcbiAgICAgICAgICAgICAgICAgID8gKHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBvbGRGaWJlcilcbiAgICAgICAgICAgICAgICAgIDogKHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG9sZEZpYmVyKSxcbiAgICAgICAgICAgICAgICAocHJldmlvdXNOZXdGaWJlciA9IG9sZEZpYmVyKSk7XG4gICAgICAgICAgaXNIeWRyYXRpbmcgJiYgcHVzaFRyZWVGb3JrKHJldHVybkZpYmVyLCBuZXdJZHgpO1xuICAgICAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgb2xkRmliZXIgPSBtYXBSZW1haW5pbmdDaGlsZHJlbihvbGRGaWJlcik7XG4gICAgICAgICAgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgIG5ld0lkeCsrXG4gICAgICAgIClcbiAgICAgICAgICAobmV4dE9sZEZpYmVyID0gdXBkYXRlRnJvbU1hcChcbiAgICAgICAgICAgIG9sZEZpYmVyLFxuICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICBuZXdJZHgsXG4gICAgICAgICAgICBuZXdDaGlsZHJlbltuZXdJZHhdLFxuICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICApKSxcbiAgICAgICAgICAgIG51bGwgIT09IG5leHRPbGRGaWJlciAmJlxuICAgICAgICAgICAgICAoKGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoXG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgbmV4dE9sZEZpYmVyLFxuICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuW25ld0lkeF0sXG4gICAgICAgICAgICAgICAga25vd25LZXlzXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICBzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gbmV4dE9sZEZpYmVyLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgICAgIG9sZEZpYmVyLmRlbGV0ZShcbiAgICAgICAgICAgICAgICAgIG51bGwgPT09IG5leHRPbGRGaWJlci5rZXkgPyBuZXdJZHggOiBuZXh0T2xkRmliZXIua2V5XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnRGaXJzdENoaWxkID0gcGxhY2VDaGlsZChcbiAgICAgICAgICAgICAgICBuZXh0T2xkRmliZXIsXG4gICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgbmV3SWR4XG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICBudWxsID09PSBwcmV2aW91c05ld0ZpYmVyXG4gICAgICAgICAgICAgICAgPyAocmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5leHRPbGRGaWJlcilcbiAgICAgICAgICAgICAgICA6IChwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXh0T2xkRmliZXIpLFxuICAgICAgICAgICAgICAocHJldmlvdXNOZXdGaWJlciA9IG5leHRPbGRGaWJlcikpO1xuICAgICAgICBzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmXG4gICAgICAgICAgb2xkRmliZXIuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICBpc0h5ZHJhdGluZyAmJiBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIG5ld0lkeCk7XG4gICAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcihcbiAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICBuZXdDaGlsZHJlbixcbiAgICAgICAgbGFuZXNcbiAgICAgICkge1xuICAgICAgICBpZiAobnVsbCA9PSBuZXdDaGlsZHJlbilcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIkFuIGl0ZXJhYmxlIG9iamVjdCBwcm92aWRlZCBubyBpdGVyYXRvci5cIik7XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdmFyIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBudWxsLFxuICAgICAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG51bGwsXG4gICAgICAgICAgICBvbGRGaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgbmV3SWR4ID0gKGN1cnJlbnRGaXJzdENoaWxkID0gMCksXG4gICAgICAgICAgICBuZXh0T2xkRmliZXIgPSBudWxsLFxuICAgICAgICAgICAga25vd25LZXlzID0gbnVsbCxcbiAgICAgICAgICAgIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCk7XG4gICAgICAgICAgbnVsbCAhPT0gb2xkRmliZXIgJiYgIXN0ZXAuZG9uZTtcbiAgICAgICAgICBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKVxuICAgICAgICApIHtcbiAgICAgICAgICBvbGRGaWJlci5pbmRleCA+IG5ld0lkeFxuICAgICAgICAgICAgPyAoKG5leHRPbGRGaWJlciA9IG9sZEZpYmVyKSwgKG9sZEZpYmVyID0gbnVsbCkpXG4gICAgICAgICAgICA6IChuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nKTtcbiAgICAgICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgc3RlcC52YWx1ZSwgbGFuZXMpO1xuICAgICAgICAgIGlmIChudWxsID09PSBuZXdGaWJlcikge1xuICAgICAgICAgICAgbnVsbCA9PT0gb2xkRmliZXIgJiYgKG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KFxuICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICBuZXdGaWJlcixcbiAgICAgICAgICAgIHN0ZXAudmFsdWUsXG4gICAgICAgICAgICBrbm93bktleXNcbiAgICAgICAgICApO1xuICAgICAgICAgIHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiZcbiAgICAgICAgICAgIG9sZEZpYmVyICYmXG4gICAgICAgICAgICBudWxsID09PSBuZXdGaWJlci5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQgPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3SWR4KTtcbiAgICAgICAgICBudWxsID09PSBwcmV2aW91c05ld0ZpYmVyXG4gICAgICAgICAgICA/IChyZXN1bHRpbmdGaXJzdENoaWxkID0gbmV3RmliZXIpXG4gICAgICAgICAgICA6IChwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcik7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwLmRvbmUpXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlciksXG4gICAgICAgICAgICBpc0h5ZHJhdGluZyAmJiBwdXNoVHJlZUZvcmsocmV0dXJuRmliZXIsIG5ld0lkeCksXG4gICAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKG51bGwgPT09IG9sZEZpYmVyKSB7XG4gICAgICAgICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKVxuICAgICAgICAgICAgKG9sZEZpYmVyID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIHN0ZXAudmFsdWUsIGxhbmVzKSksXG4gICAgICAgICAgICAgIG51bGwgIT09IG9sZEZpYmVyICYmXG4gICAgICAgICAgICAgICAgKChrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgICAgICAgIHN0ZXAudmFsdWUsXG4gICAgICAgICAgICAgICAgICBrbm93bktleXNcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudEZpcnN0Q2hpbGQgPSBwbGFjZUNoaWxkKFxuICAgICAgICAgICAgICAgICAgb2xkRmliZXIsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgICAgIG5ld0lkeFxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIG51bGwgPT09IHByZXZpb3VzTmV3RmliZXJcbiAgICAgICAgICAgICAgICAgID8gKHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBvbGRGaWJlcilcbiAgICAgICAgICAgICAgICAgIDogKHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG9sZEZpYmVyKSxcbiAgICAgICAgICAgICAgICAocHJldmlvdXNOZXdGaWJlciA9IG9sZEZpYmVyKSk7XG4gICAgICAgICAgaXNIeWRyYXRpbmcgJiYgcHVzaFRyZWVGb3JrKHJldHVybkZpYmVyLCBuZXdJZHgpO1xuICAgICAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgb2xkRmliZXIgPSBtYXBSZW1haW5pbmdDaGlsZHJlbihvbGRGaWJlcik7XG4gICAgICAgICAgIXN0ZXAuZG9uZTtcbiAgICAgICAgICBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKVxuICAgICAgICApXG4gICAgICAgICAgKG5leHRPbGRGaWJlciA9IHVwZGF0ZUZyb21NYXAoXG4gICAgICAgICAgICBvbGRGaWJlcixcbiAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgbmV3SWR4LFxuICAgICAgICAgICAgc3RlcC52YWx1ZSxcbiAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgKSksXG4gICAgICAgICAgICBudWxsICE9PSBuZXh0T2xkRmliZXIgJiZcbiAgICAgICAgICAgICAgKChrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgIG5leHRPbGRGaWJlcixcbiAgICAgICAgICAgICAgICBzdGVwLnZhbHVlLFxuICAgICAgICAgICAgICAgIGtub3duS2V5c1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJlxuICAgICAgICAgICAgICAgIG51bGwgIT09IG5leHRPbGRGaWJlci5hbHRlcm5hdGUgJiZcbiAgICAgICAgICAgICAgICBvbGRGaWJlci5kZWxldGUoXG4gICAgICAgICAgICAgICAgICBudWxsID09PSBuZXh0T2xkRmliZXIua2V5ID8gbmV3SWR4IDogbmV4dE9sZEZpYmVyLmtleVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIChjdXJyZW50Rmlyc3RDaGlsZCA9IHBsYWNlQ2hpbGQoXG4gICAgICAgICAgICAgICAgbmV4dE9sZEZpYmVyLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgIG5ld0lkeFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gcHJldmlvdXNOZXdGaWJlclxuICAgICAgICAgICAgICAgID8gKHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXh0T2xkRmliZXIpXG4gICAgICAgICAgICAgICAgOiAocHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV4dE9sZEZpYmVyKSxcbiAgICAgICAgICAgICAgKHByZXZpb3VzTmV3RmliZXIgPSBuZXh0T2xkRmliZXIpKTtcbiAgICAgICAgc2hvdWxkVHJhY2tTaWRlRWZmZWN0cyAmJlxuICAgICAgICAgIG9sZEZpYmVyLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgaXNIeWRyYXRpbmcgJiYgcHVzaFRyZWVGb3JrKHJldHVybkZpYmVyLCBuZXdJZHgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkRmliZXJzSW1wbChcbiAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICBuZXdDaGlsZCxcbiAgICAgICAgbGFuZXNcbiAgICAgICkge1xuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiZcbiAgICAgICAgICBudWxsICE9PSBuZXdDaGlsZCAmJlxuICAgICAgICAgIG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgJiZcbiAgICAgICAgICBudWxsID09PSBuZXdDaGlsZC5rZXkgJiZcbiAgICAgICAgICAodmFsaWRhdGVGcmFnbWVudFByb3BzKG5ld0NoaWxkLCBudWxsLCByZXR1cm5GaWJlciksXG4gICAgICAgICAgKG5ld0NoaWxkID0gbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW4pKTtcbiAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJiBudWxsICE9PSBuZXdDaGlsZCkge1xuICAgICAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgICAgICB2YXIgcHJldkRlYnVnSW5mbyA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbyk7XG4gICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgPSBuZXdDaGlsZC5rZXk7IG51bGwgIT09IGN1cnJlbnRGaXJzdENoaWxkOyApIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rmlyc3RDaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBuZXdDaGlsZC50eXBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKDcgPT09IGN1cnJlbnRGaXJzdENoaWxkLnRhZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZXMgPSB1c2VGaWJlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5lcy5fZGVidWdPd25lciA9IG5ld0NoaWxkLl9vd25lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmVzLl9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKG5ld0NoaWxkLCBsYW5lcywgcmV0dXJuRmliZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBsYW5lcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLmVsZW1lbnRUeXBlID09PSBrZXkgfHxcbiAgICAgICAgICAgICAgICAgICAgICBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkXG4gICAgICAgICAgICAgICAgICAgICAgKSB8fFxuICAgICAgICAgICAgICAgICAgICAgIChcIm9iamVjdFwiID09PSB0eXBlb2Yga2V5ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBrZXkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGF6eUluaXRJbkRFVihrZXkpID09PSBjdXJyZW50Rmlyc3RDaGlsZC50eXBlKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQuc2libGluZ1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgbGFuZXMgPSB1c2VGaWJlcihjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQucHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvZXJjZVJlZihsYW5lcywgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgIGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgICAgICAgICAgIGxhbmVzLl9kZWJ1Z093bmVyID0gbmV3Q2hpbGQuX293bmVyO1xuICAgICAgICAgICAgICAgICAgICAgIGxhbmVzLl9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvO1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyID0gbGFuZXM7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFXG4gICAgICAgICAgICAgICAgICA/ICgobGFuZXMgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChcbiAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlci5tb2RlLFxuICAgICAgICAgICAgICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLmtleVxuICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgKGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgKGxhbmVzLl9kZWJ1Z093bmVyID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgICAgICAobGFuZXMuX2RlYnVnVGFzayA9IHJldHVybkZpYmVyLl9kZWJ1Z1Rhc2spLFxuICAgICAgICAgICAgICAgICAgICAobGFuZXMuX2RlYnVnSW5mbyA9IGN1cnJlbnREZWJ1Z0luZm8pLFxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUZyYWdtZW50UHJvcHMobmV3Q2hpbGQsIGxhbmVzLCByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IGxhbmVzKSlcbiAgICAgICAgICAgICAgICAgIDogKChsYW5lcyA9IGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIubW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgY29lcmNlUmVmKGxhbmVzLCBuZXdDaGlsZCksXG4gICAgICAgICAgICAgICAgICAgIChsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgICAgIChsYW5lcy5fZGVidWdJbmZvID0gY3VycmVudERlYnVnSW5mbyksXG4gICAgICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IGxhbmVzKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBwbGFjZVNpbmdsZUNoaWxkKHJldHVybkZpYmVyKTtcbiAgICAgICAgICAgICAgY3VycmVudERlYnVnSW5mbyA9IHByZXZEZWJ1Z0luZm87XG4gICAgICAgICAgICAgIHJldHVybiByZXR1cm5GaWJlcjtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICBwcmV2RGVidWdJbmZvID0gbmV3Q2hpbGQ7XG4gICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgIG5ld0NoaWxkID0gcHJldkRlYnVnSW5mby5rZXk7XG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGaXJzdENoaWxkLmtleSA9PT0gbmV3Q2hpbGQpXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICA0ID09PSBjdXJyZW50Rmlyc3RDaGlsZC50YWcgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZEZWJ1Z0luZm8uY29udGFpbmVySW5mbyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZEZWJ1Z0luZm8uaW1wbGVtZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmdcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIGxhbmVzID0gdXNlRmliZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZEZWJ1Z0luZm8uY2hpbGRyZW4gfHwgW11cbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIGxhbmVzLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyID0gbGFuZXM7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBlbHNlIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxhbmVzID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKFxuICAgICAgICAgICAgICAgICAgcHJldkRlYnVnSW5mbyxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICAgICAgcmV0dXJuRmliZXIgPSBsYW5lcztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcGxhY2VTaW5nbGVDaGlsZChyZXR1cm5GaWJlcik7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAocHJldkRlYnVnSW5mbyA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAgIChuZXdDaGlsZCA9IGNhbGxMYXp5SW5pdEluREVWKG5ld0NoaWxkKSksXG4gICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gcmVjb25jaWxlQ2hpbGRGaWJlcnNJbXBsKFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9IHByZXZEZWJ1Z0luZm8pLFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc0FycmF5SW1wbChuZXdDaGlsZCkpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAocHJldkRlYnVnSW5mbyA9IHB1c2hEZWJ1Z0luZm8obmV3Q2hpbGQuX2RlYnVnSW5mbykpLFxuICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSByZWNvbmNpbGVDaGlsZHJlbkFycmF5KFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAoY3VycmVudERlYnVnSW5mbyA9IHByZXZEZWJ1Z0luZm8pLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgICAgIHByZXZEZWJ1Z0luZm8gPSBwdXNoRGVidWdJbmZvKG5ld0NoaWxkLl9kZWJ1Z0luZm8pO1xuICAgICAgICAgICAga2V5ID0gZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCk7XG4gICAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2Yga2V5KVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkFuIG9iamVjdCBpcyBub3QgYW4gaXRlcmFibGUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHZhciBuZXdDaGlsZHJlbiA9IGtleS5jYWxsKG5ld0NoaWxkKTtcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZHJlbiA9PT0gbmV3Q2hpbGQpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIDAgIT09IHJldHVybkZpYmVyLnRhZyB8fFxuICAgICAgICAgICAgICAgIFwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIiAhPT1cbiAgICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyZXR1cm5GaWJlci50eXBlKSB8fFxuICAgICAgICAgICAgICAgIFwiW29iamVjdCBHZW5lcmF0b3JdXCIgIT09XG4gICAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3Q2hpbGRyZW4pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzIHx8XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIlVzaW5nIEl0ZXJhdG9ycyBhcyBjaGlsZHJlbiBpcyB1bnN1cHBvcnRlZCBhbmQgd2lsbCBsaWtlbHkgeWllbGQgdW5leHBlY3RlZCByZXN1bHRzIGJlY2F1c2UgZW51bWVyYXRpbmcgYSBnZW5lcmF0b3IgbXV0YXRlcyBpdC4gWW91IG1heSBjb252ZXJ0IGl0IHRvIGFuIGFycmF5IHdpdGggYEFycmF5LmZyb20oKWAgb3IgdGhlIGBbLi4uc3ByZWFkXWAgb3BlcmF0b3IgYmVmb3JlIHJlbmRlcmluZy4gWW91IGNhbiBhbHNvIHVzZSBhbiBJdGVyYWJsZSB0aGF0IGNhbiBpdGVyYXRlIG11bHRpcGxlIHRpbWVzIG92ZXIgdGhlIHNhbWUgaXRlbXMuXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAoZGlkV2FybkFib3V0R2VuZXJhdG9ycyA9ICEwKTtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICBuZXdDaGlsZC5lbnRyaWVzICE9PSBrZXkgfHxcbiAgICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRNYXBzIHx8XG4gICAgICAgICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICBcIlVzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHN1cHBvcnRlZC4gVXNlIGFuIGFycmF5IG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC5cIlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKGRpZFdhcm5BYm91dE1hcHMgPSAhMCkpO1xuICAgICAgICAgICAgcmV0dXJuRmliZXIgPSByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQsXG4gICAgICAgICAgICAgIG5ld0NoaWxkcmVuLFxuICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGN1cnJlbnREZWJ1Z0luZm8gPSBwcmV2RGVidWdJbmZvO1xuICAgICAgICAgICAgcmV0dXJuIHJldHVybkZpYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbmV3Q2hpbGQudGhlbilcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChwcmV2RGVidWdJbmZvID0gcHVzaERlYnVnSW5mbyhuZXdDaGlsZC5fZGVidWdJbmZvKSksXG4gICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHJlY29uY2lsZUNoaWxkRmliZXJzSW1wbChcbiAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgICAgICB1bndyYXBUaGVuYWJsZShuZXdDaGlsZCksXG4gICAgICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIChjdXJyZW50RGVidWdJbmZvID0gcHJldkRlYnVnSW5mbyksXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmIChuZXdDaGlsZC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFKVxuICAgICAgICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkRmliZXJzSW1wbChcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIGN1cnJlbnRGaXJzdENoaWxkLFxuICAgICAgICAgICAgICByZWFkQ29udGV4dER1cmluZ1JlY29uY2lsaWF0aW9uKHJldHVybkZpYmVyLCBuZXdDaGlsZCksXG4gICAgICAgICAgICAgIGxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG5ld0NoaWxkICYmIFwiXCIgIT09IG5ld0NoaWxkKSB8fFxuICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBuZXdDaGlsZCB8fFxuICAgICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiBuZXdDaGlsZFxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChwcmV2RGVidWdJbmZvID0gXCJcIiArIG5ld0NoaWxkKSxcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnRGaXJzdENoaWxkICYmIDYgPT09IGN1cnJlbnRGaXJzdENoaWxkLnRhZ1xuICAgICAgICAgICAgICA/IChkZWxldGVSZW1haW5pbmdDaGlsZHJlbihcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgY3VycmVudEZpcnN0Q2hpbGQuc2libGluZ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKGxhbmVzID0gdXNlRmliZXIoY3VycmVudEZpcnN0Q2hpbGQsIHByZXZEZWJ1Z0luZm8pKSxcbiAgICAgICAgICAgICAgICAobGFuZXMucmV0dXJuID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IGxhbmVzKSlcbiAgICAgICAgICAgICAgOiAoZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSxcbiAgICAgICAgICAgICAgICAobGFuZXMgPSBjcmVhdGVGaWJlckZyb21UZXh0KFxuICAgICAgICAgICAgICAgICAgcHJldkRlYnVnSW5mbyxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLm1vZGUsXG4gICAgICAgICAgICAgICAgICBsYW5lc1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIChsYW5lcy5yZXR1cm4gPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgKGxhbmVzLl9kZWJ1Z093bmVyID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgIChsYW5lcy5fZGVidWdUYXNrID0gcmV0dXJuRmliZXIuX2RlYnVnVGFzayksXG4gICAgICAgICAgICAgICAgKGxhbmVzLl9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKSxcbiAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgPSBsYW5lcykpLFxuICAgICAgICAgICAgcGxhY2VTaW5nbGVDaGlsZChyZXR1cm5GaWJlcilcbiAgICAgICAgICApO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXdDaGlsZCAmJlxuICAgICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICBcInN5bWJvbFwiID09PSB0eXBlb2YgbmV3Q2hpbGQgJiYgd2Fybk9uU3ltYm9sVHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgICAgICByZXR1cm4gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiAocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAgICAgdmFyIHByZXZEZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvO1xuICAgICAgICBjdXJyZW50RGVidWdJbmZvID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGVuYWJsZUluZGV4Q291bnRlciQxID0gMDtcbiAgICAgICAgICB2YXIgZmlyc3RDaGlsZEZpYmVyID0gcmVjb25jaWxlQ2hpbGRGaWJlcnNJbXBsKFxuICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICBjdXJyZW50Rmlyc3RDaGlsZCxcbiAgICAgICAgICAgIG5ld0NoaWxkLFxuICAgICAgICAgICAgbGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoZW5hYmxlU3RhdGUkMSA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGRGaWJlcjtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGlmICh4ID09PSBTdXNwZW5zZUV4Y2VwdGlvbiB8fCB4ID09PSBTdXNwZW5zZUFjdGlvbkV4Y2VwdGlvbikgdGhyb3cgeDtcbiAgICAgICAgICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcigyOSwgeCwgbnVsbCwgcmV0dXJuRmliZXIubW9kZSk7XG4gICAgICAgICAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgICAgICAgICBmaWJlci5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICB2YXIgZGVidWdJbmZvID0gKGZpYmVyLl9kZWJ1Z0luZm8gPSBjdXJyZW50RGVidWdJbmZvKTtcbiAgICAgICAgICBmaWJlci5fZGVidWdPd25lciA9IHJldHVybkZpYmVyLl9kZWJ1Z093bmVyO1xuICAgICAgICAgIGZpYmVyLl9kZWJ1Z1Rhc2sgPSByZXR1cm5GaWJlci5fZGVidWdUYXNrO1xuICAgICAgICAgIGlmIChudWxsICE9IGRlYnVnSW5mbylcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBkZWJ1Z0luZm8ubGVuZ3RoIC0gMTsgMCA8PSBpOyBpLS0pXG4gICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgZGVidWdJbmZvW2ldLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgZmliZXIuX2RlYnVnT3duZXIgPSBkZWJ1Z0luZm9baV07XG4gICAgICAgICAgICAgICAgZmliZXIuX2RlYnVnVGFzayA9IGRlYnVnSW5mb1tpXS5kZWJ1Z1Rhc2s7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmliZXI7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgY3VycmVudERlYnVnSW5mbyA9IHByZXZEZWJ1Z0luZm87XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoY2hpbGRTbG90LCBpbmRleCkge1xuICAgICAgdmFyIGlzQW5BcnJheSA9IGlzQXJyYXlJbXBsKGNoaWxkU2xvdCk7XG4gICAgICBjaGlsZFNsb3QgPSAhaXNBbkFycmF5ICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGdldEl0ZXJhdG9yRm4oY2hpbGRTbG90KTtcbiAgICAgIHJldHVybiBpc0FuQXJyYXkgfHwgY2hpbGRTbG90XG4gICAgICAgID8gKChpc0FuQXJyYXkgPSBpc0FuQXJyYXkgPyBcImFycmF5XCIgOiBcIml0ZXJhYmxlXCIpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkEgbmVzdGVkICVzIHdhcyBwYXNzZWQgdG8gcm93ICMlcyBpbiA8U3VzcGVuc2VMaXN0IC8+LiBXcmFwIGl0IGluIGFuIGFkZGl0aW9uYWwgU3VzcGVuc2VMaXN0IHRvIGNvbmZpZ3VyZSBpdHMgcmV2ZWFsT3JkZXI6IDxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9Li4uPiAuLi4gPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj0uLi4+eyVzfTwvU3VzcGVuc2VMaXN0PiAuLi4gPC9TdXNwZW5zZUxpc3Q+XCIsXG4gICAgICAgICAgICBpc0FuQXJyYXksXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGlzQW5BcnJheVxuICAgICAgICAgICksXG4gICAgICAgICAgITEpXG4gICAgICAgIDogITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVVcGRhdGVRdWV1ZShmaWJlcikge1xuICAgICAgZmliZXIudXBkYXRlUXVldWUgPSB7XG4gICAgICAgIGJhc2VTdGF0ZTogZmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgZmlyc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgICAgICBsYXN0QmFzZVVwZGF0ZTogbnVsbCxcbiAgICAgICAgc2hhcmVkOiB7IHBlbmRpbmc6IG51bGwsIGxhbmVzOiAwLCBoaWRkZW5DYWxsYmFja3M6IG51bGwgfSxcbiAgICAgICAgY2FsbGJhY2tzOiBudWxsXG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gICAgICBjdXJyZW50ID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID09PSBjdXJyZW50ICYmXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHtcbiAgICAgICAgICBiYXNlU3RhdGU6IGN1cnJlbnQuYmFzZVN0YXRlLFxuICAgICAgICAgIGZpcnN0QmFzZVVwZGF0ZTogY3VycmVudC5maXJzdEJhc2VVcGRhdGUsXG4gICAgICAgICAgbGFzdEJhc2VVcGRhdGU6IGN1cnJlbnQubGFzdEJhc2VVcGRhdGUsXG4gICAgICAgICAgc2hhcmVkOiBjdXJyZW50LnNoYXJlZCxcbiAgICAgICAgICBjYWxsYmFja3M6IG51bGxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVwZGF0ZShsYW5lKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYW5lOiBsYW5lLFxuICAgICAgICB0YWc6IFVwZGF0ZVN0YXRlLFxuICAgICAgICBwYXlsb2FkOiBudWxsLFxuICAgICAgICBjYWxsYmFjazogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlLCBsYW5lKSB7XG4gICAgICB2YXIgdXBkYXRlUXVldWUgPSBmaWJlci51cGRhdGVRdWV1ZTtcbiAgICAgIGlmIChudWxsID09PSB1cGRhdGVRdWV1ZSkgcmV0dXJuIG51bGw7XG4gICAgICB1cGRhdGVRdWV1ZSA9IHVwZGF0ZVF1ZXVlLnNoYXJlZDtcbiAgICAgIGlmIChcbiAgICAgICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID09PSB1cGRhdGVRdWV1ZSAmJlxuICAgICAgICAhZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZVxuICAgICAgKSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJBbiB1cGRhdGUgKHNldFN0YXRlLCByZXBsYWNlU3RhdGUsIG9yIGZvcmNlVXBkYXRlKSB3YXMgc2NoZWR1bGVkIGZyb20gaW5zaWRlIGFuIHVwZGF0ZSBmdW5jdGlvbi4gVXBkYXRlIGZ1bmN0aW9ucyBzaG91bGQgYmUgcHVyZSwgd2l0aCB6ZXJvIHNpZGUtZWZmZWN0cy4gQ29uc2lkZXIgdXNpbmcgY29tcG9uZW50RGlkVXBkYXRlIG9yIGEgY2FsbGJhY2suXFxuXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudDogJXNcIixcbiAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICk7XG4gICAgICAgIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSAhMDtcbiAgICAgIH1cbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKGNvbXBvbmVudE5hbWUgPSB1cGRhdGVRdWV1ZS5wZW5kaW5nKSxcbiAgICAgICAgICBudWxsID09PSBjb21wb25lbnROYW1lXG4gICAgICAgICAgICA/ICh1cGRhdGUubmV4dCA9IHVwZGF0ZSlcbiAgICAgICAgICAgIDogKCh1cGRhdGUubmV4dCA9IGNvbXBvbmVudE5hbWUubmV4dCksXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lLm5leHQgPSB1cGRhdGUpKSxcbiAgICAgICAgICAodXBkYXRlUXVldWUucGVuZGluZyA9IHVwZGF0ZSksXG4gICAgICAgICAgKHVwZGF0ZSA9IGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpKSxcbiAgICAgICAgICBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgbnVsbCwgbGFuZSksXG4gICAgICAgICAgdXBkYXRlXG4gICAgICAgICk7XG4gICAgICBlbnF1ZXVlVXBkYXRlJDEoZmliZXIsIHVwZGF0ZVF1ZXVlLCB1cGRhdGUsIGxhbmUpO1xuICAgICAgcmV0dXJuIGdldFJvb3RGb3JVcGRhdGVkRmliZXIoZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnRhbmdsZVRyYW5zaXRpb25zKHJvb3QsIGZpYmVyLCBsYW5lKSB7XG4gICAgICBmaWJlciA9IGZpYmVyLnVwZGF0ZVF1ZXVlO1xuICAgICAgaWYgKG51bGwgIT09IGZpYmVyICYmICgoZmliZXIgPSBmaWJlci5zaGFyZWQpLCAwICE9PSAobGFuZSAmIDQxOTQwNDgpKSkge1xuICAgICAgICB2YXIgcXVldWVMYW5lcyA9IGZpYmVyLmxhbmVzO1xuICAgICAgICBxdWV1ZUxhbmVzICY9IHJvb3QucGVuZGluZ0xhbmVzO1xuICAgICAgICBsYW5lIHw9IHF1ZXVlTGFuZXM7XG4gICAgICAgIGZpYmVyLmxhbmVzID0gbGFuZTtcbiAgICAgICAgbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgbGFuZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY2FwdHVyZWRVcGRhdGUpIHtcbiAgICAgIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlLFxuICAgICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICgoY3VycmVudCA9IGN1cnJlbnQudXBkYXRlUXVldWUpLCBxdWV1ZSA9PT0gY3VycmVudClcbiAgICAgICkge1xuICAgICAgICB2YXIgbmV3Rmlyc3QgPSBudWxsLFxuICAgICAgICAgIG5ld0xhc3QgPSBudWxsO1xuICAgICAgICBxdWV1ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZTtcbiAgICAgICAgaWYgKG51bGwgIT09IHF1ZXVlKSB7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgICAgICBsYW5lOiBxdWV1ZS5sYW5lLFxuICAgICAgICAgICAgICB0YWc6IHF1ZXVlLnRhZyxcbiAgICAgICAgICAgICAgcGF5bG9hZDogcXVldWUucGF5bG9hZCxcbiAgICAgICAgICAgICAgY2FsbGJhY2s6IG51bGwsXG4gICAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBudWxsID09PSBuZXdMYXN0XG4gICAgICAgICAgICAgID8gKG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNsb25lKVxuICAgICAgICAgICAgICA6IChuZXdMYXN0ID0gbmV3TGFzdC5uZXh0ID0gY2xvbmUpO1xuICAgICAgICAgICAgcXVldWUgPSBxdWV1ZS5uZXh0O1xuICAgICAgICAgIH0gd2hpbGUgKG51bGwgIT09IHF1ZXVlKTtcbiAgICAgICAgICBudWxsID09PSBuZXdMYXN0XG4gICAgICAgICAgICA/IChuZXdGaXJzdCA9IG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZSlcbiAgICAgICAgICAgIDogKG5ld0xhc3QgPSBuZXdMYXN0Lm5leHQgPSBjYXB0dXJlZFVwZGF0ZSk7XG4gICAgICAgIH0gZWxzZSBuZXdGaXJzdCA9IG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgcXVldWUgPSB7XG4gICAgICAgICAgYmFzZVN0YXRlOiBjdXJyZW50LmJhc2VTdGF0ZSxcbiAgICAgICAgICBmaXJzdEJhc2VVcGRhdGU6IG5ld0ZpcnN0LFxuICAgICAgICAgIGxhc3RCYXNlVXBkYXRlOiBuZXdMYXN0LFxuICAgICAgICAgIHNoYXJlZDogY3VycmVudC5zaGFyZWQsXG4gICAgICAgICAgY2FsbGJhY2tzOiBjdXJyZW50LmNhbGxiYWNrc1xuICAgICAgICB9O1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IHF1ZXVlLmxhc3RCYXNlVXBkYXRlO1xuICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgPyAocXVldWUuZmlyc3RCYXNlVXBkYXRlID0gY2FwdHVyZWRVcGRhdGUpXG4gICAgICAgIDogKHdvcmtJblByb2dyZXNzLm5leHQgPSBjYXB0dXJlZFVwZGF0ZSk7XG4gICAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdXNwZW5kSWZVcGRhdGVSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKCkge1xuICAgICAgaWYgKGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24pIHtcbiAgICAgICAgdmFyIGVudGFuZ2xlZEFjdGlvblRoZW5hYmxlID0gY3VycmVudEVudGFuZ2xlZEFjdGlvblRoZW5hYmxlO1xuICAgICAgICBpZiAobnVsbCAhPT0gZW50YW5nbGVkQWN0aW9uVGhlbmFibGUpIHRocm93IGVudGFuZ2xlZEFjdGlvblRoZW5hYmxlO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzVXBkYXRlUXVldWUoXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIHByb3BzLFxuICAgICAgaW5zdGFuY2UkanNjb21wJDAsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgZGlkUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiA9ICExO1xuICAgICAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gICAgICBoYXNGb3JjZVVwZGF0ZSA9ICExO1xuICAgICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gcXVldWUuc2hhcmVkO1xuICAgICAgdmFyIGZpcnN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSxcbiAgICAgICAgbGFzdEJhc2VVcGRhdGUgPSBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSxcbiAgICAgICAgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG4gICAgICBpZiAobnVsbCAhPT0gcGVuZGluZ1F1ZXVlKSB7XG4gICAgICAgIHF1ZXVlLnNoYXJlZC5wZW5kaW5nID0gbnVsbDtcbiAgICAgICAgdmFyIGxhc3RQZW5kaW5nVXBkYXRlID0gcGVuZGluZ1F1ZXVlLFxuICAgICAgICAgIGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlLm5leHQ7XG4gICAgICAgIGxhc3RQZW5kaW5nVXBkYXRlLm5leHQgPSBudWxsO1xuICAgICAgICBudWxsID09PSBsYXN0QmFzZVVwZGF0ZVxuICAgICAgICAgID8gKGZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZSlcbiAgICAgICAgICA6IChsYXN0QmFzZVVwZGF0ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlKTtcbiAgICAgICAgbGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAoKGN1cnJlbnQgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAocGVuZGluZ1F1ZXVlID0gY3VycmVudC5sYXN0QmFzZVVwZGF0ZSksXG4gICAgICAgICAgcGVuZGluZ1F1ZXVlICE9PSBsYXN0QmFzZVVwZGF0ZSAmJlxuICAgICAgICAgICAgKG51bGwgPT09IHBlbmRpbmdRdWV1ZVxuICAgICAgICAgICAgICA/IChjdXJyZW50LmZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZSlcbiAgICAgICAgICAgICAgOiAocGVuZGluZ1F1ZXVlLm5leHQgPSBmaXJzdFBlbmRpbmdVcGRhdGUpLFxuICAgICAgICAgICAgKGN1cnJlbnQubGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZSkpKTtcbiAgICAgIH1cbiAgICAgIGlmIChudWxsICE9PSBmaXJzdEJhc2VVcGRhdGUpIHtcbiAgICAgICAgdmFyIG5ld1N0YXRlID0gcXVldWUuYmFzZVN0YXRlO1xuICAgICAgICBsYXN0QmFzZVVwZGF0ZSA9IDA7XG4gICAgICAgIGN1cnJlbnQgPSBmaXJzdFBlbmRpbmdVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZSA9IG51bGw7XG4gICAgICAgIHBlbmRpbmdRdWV1ZSA9IGZpcnN0QmFzZVVwZGF0ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIHZhciB1cGRhdGVMYW5lID0gcGVuZGluZ1F1ZXVlLmxhbmUgJiAtNTM2ODcwOTEzLFxuICAgICAgICAgICAgaXNIaWRkZW5VcGRhdGUgPSB1cGRhdGVMYW5lICE9PSBwZW5kaW5nUXVldWUubGFuZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0hpZGRlblVwZGF0ZVxuICAgICAgICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIHVwZGF0ZUxhbmUpID09PSB1cGRhdGVMYW5lXG4gICAgICAgICAgICAgIDogKHJlbmRlckxhbmVzICYgdXBkYXRlTGFuZSkgPT09IHVwZGF0ZUxhbmVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIDAgIT09IHVwZGF0ZUxhbmUgJiZcbiAgICAgICAgICAgICAgdXBkYXRlTGFuZSA9PT0gY3VycmVudEVudGFuZ2xlZExhbmUgJiZcbiAgICAgICAgICAgICAgKGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSAhMCk7XG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgIChjdXJyZW50ID0gY3VycmVudC5uZXh0ID1cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBsYW5lOiAwLFxuICAgICAgICAgICAgICAgICAgdGFnOiBwZW5kaW5nUXVldWUudGFnLFxuICAgICAgICAgICAgICAgICAgcGF5bG9hZDogcGVuZGluZ1F1ZXVlLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgICBjYWxsYmFjazogbnVsbCxcbiAgICAgICAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgdXBkYXRlTGFuZSA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgICAgICB2YXIgcGFydGlhbFN0YXRlID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgICAgICAgICB2YXIgbmV4dFByb3BzID0gcHJvcHMsXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZSRqc2NvbXAkMDtcbiAgICAgICAgICAgICAgc3dpdGNoIChwYXJ0aWFsU3RhdGUudGFnKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBSZXBsYWNlU3RhdGU6XG4gICAgICAgICAgICAgICAgICBwYXJ0aWFsU3RhdGUgPSBwYXJ0aWFsU3RhdGUucGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwYXJ0aWFsU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9ICEwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFN0YXRlID0gcGFydGlhbFN0YXRlLmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1cGRhdGVMYW5lLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsU3RhdGUuY2FsbChpbnN0YW5jZSwgbmV3U3RhdGUsIG5leHRQcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9ICExO1xuICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG5ld1N0YXRlID0gcGFydGlhbFN0YXRlO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICBjYXNlIENhcHR1cmVVcGRhdGU6XG4gICAgICAgICAgICAgICAgICB1cGRhdGVMYW5lLmZsYWdzID0gKHVwZGF0ZUxhbmUuZmxhZ3MgJiAtNjU1MzcpIHwgMTI4O1xuICAgICAgICAgICAgICAgIGNhc2UgVXBkYXRlU3RhdGU6XG4gICAgICAgICAgICAgICAgICBuZXh0U3RhdGUgPSBwYXJ0aWFsU3RhdGUucGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBuZXh0U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9ICEwO1xuICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsU3RhdGUgPSBuZXh0U3RhdGUuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZUxhbmUubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5jYWxsKGluc3RhbmNlLCBuZXdTdGF0ZSwgbmV4dFByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gITE7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgcGFydGlhbFN0YXRlID0gbmV4dFN0YXRlO1xuICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IHBhcnRpYWxTdGF0ZSB8fCB2b2lkIDAgPT09IHBhcnRpYWxTdGF0ZSkgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgIG5ld1N0YXRlID0gYXNzaWduKHt9LCBuZXdTdGF0ZSwgcGFydGlhbFN0YXRlKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgY2FzZSBGb3JjZVVwZGF0ZTpcbiAgICAgICAgICAgICAgICAgIGhhc0ZvcmNlVXBkYXRlID0gITA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZUxhbmUgPSBwZW5kaW5nUXVldWUuY2FsbGJhY2s7XG4gICAgICAgICAgICBudWxsICE9PSB1cGRhdGVMYW5lICYmXG4gICAgICAgICAgICAgICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNjQpLFxuICAgICAgICAgICAgICBpc0hpZGRlblVwZGF0ZSAmJiAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gODE5MiksXG4gICAgICAgICAgICAgIChpc0hpZGRlblVwZGF0ZSA9IHF1ZXVlLmNhbGxiYWNrcyksXG4gICAgICAgICAgICAgIG51bGwgPT09IGlzSGlkZGVuVXBkYXRlXG4gICAgICAgICAgICAgICAgPyAocXVldWUuY2FsbGJhY2tzID0gW3VwZGF0ZUxhbmVdKVxuICAgICAgICAgICAgICAgIDogaXNIaWRkZW5VcGRhdGUucHVzaCh1cGRhdGVMYW5lKSk7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAoaXNIaWRkZW5VcGRhdGUgPSB7XG4gICAgICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgICAgIHRhZzogcGVuZGluZ1F1ZXVlLnRhZyxcbiAgICAgICAgICAgICAgcGF5bG9hZDogcGVuZGluZ1F1ZXVlLnBheWxvYWQsXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiBwZW5kaW5nUXVldWUuY2FsbGJhY2ssXG4gICAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50XG4gICAgICAgICAgICAgICAgPyAoKGZpcnN0UGVuZGluZ1VwZGF0ZSA9IGN1cnJlbnQgPSBpc0hpZGRlblVwZGF0ZSksXG4gICAgICAgICAgICAgICAgICAobGFzdFBlbmRpbmdVcGRhdGUgPSBuZXdTdGF0ZSkpXG4gICAgICAgICAgICAgICAgOiAoY3VycmVudCA9IGN1cnJlbnQubmV4dCA9IGlzSGlkZGVuVXBkYXRlKSxcbiAgICAgICAgICAgICAgKGxhc3RCYXNlVXBkYXRlIHw9IHVwZGF0ZUxhbmUpO1xuICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IHBlbmRpbmdRdWV1ZS5uZXh0O1xuICAgICAgICAgIGlmIChudWxsID09PSBwZW5kaW5nUXVldWUpXG4gICAgICAgICAgICBpZiAoKChwZW5kaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQucGVuZGluZyksIG51bGwgPT09IHBlbmRpbmdRdWV1ZSkpXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAoaXNIaWRkZW5VcGRhdGUgPSBwZW5kaW5nUXVldWUpLFxuICAgICAgICAgICAgICAgIChwZW5kaW5nUXVldWUgPSBpc0hpZGRlblVwZGF0ZS5uZXh0KSxcbiAgICAgICAgICAgICAgICAoaXNIaWRkZW5VcGRhdGUubmV4dCA9IG51bGwpLFxuICAgICAgICAgICAgICAgIChxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGlzSGlkZGVuVXBkYXRlKSxcbiAgICAgICAgICAgICAgICAocXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsKTtcbiAgICAgICAgfSB3aGlsZSAoMSk7XG4gICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiYgKGxhc3RQZW5kaW5nVXBkYXRlID0gbmV3U3RhdGUpO1xuICAgICAgICBxdWV1ZS5iYXNlU3RhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgcXVldWUuZmlyc3RCYXNlVXBkYXRlID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGN1cnJlbnQ7XG4gICAgICAgIG51bGwgPT09IGZpcnN0QmFzZVVwZGF0ZSAmJiAocXVldWUuc2hhcmVkLmxhbmVzID0gMCk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyB8PSBsYXN0QmFzZVVwZGF0ZTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBsYXN0QmFzZVVwZGF0ZTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgfVxuICAgICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY2FsbGJhY2spXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgYXMgY2FsbGJhY2suIEV4cGVjdGVkIGEgZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6IFwiICtcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICk7XG4gICAgICBjYWxsYmFjay5jYWxsKGNvbnRleHQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIaWRkZW5DYWxsYmFja3ModXBkYXRlUXVldWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciBoaWRkZW5DYWxsYmFja3MgPSB1cGRhdGVRdWV1ZS5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzO1xuICAgICAgaWYgKG51bGwgIT09IGhpZGRlbkNhbGxiYWNrcylcbiAgICAgICAgZm9yIChcbiAgICAgICAgICB1cGRhdGVRdWV1ZS5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzID0gbnVsbCwgdXBkYXRlUXVldWUgPSAwO1xuICAgICAgICAgIHVwZGF0ZVF1ZXVlIDwgaGlkZGVuQ2FsbGJhY2tzLmxlbmd0aDtcbiAgICAgICAgICB1cGRhdGVRdWV1ZSsrXG4gICAgICAgIClcbiAgICAgICAgICBjYWxsQ2FsbGJhY2soaGlkZGVuQ2FsbGJhY2tzW3VwZGF0ZVF1ZXVlXSwgY29udGV4dCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdENhbGxiYWNrcyh1cGRhdGVRdWV1ZSwgY29udGV4dCkge1xuICAgICAgdmFyIGNhbGxiYWNrcyA9IHVwZGF0ZVF1ZXVlLmNhbGxiYWNrcztcbiAgICAgIGlmIChudWxsICE9PSBjYWxsYmFja3MpXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdXBkYXRlUXVldWUuY2FsbGJhY2tzID0gbnVsbCwgdXBkYXRlUXVldWUgPSAwO1xuICAgICAgICAgIHVwZGF0ZVF1ZXVlIDwgY2FsbGJhY2tzLmxlbmd0aDtcbiAgICAgICAgICB1cGRhdGVRdWV1ZSsrXG4gICAgICAgIClcbiAgICAgICAgICBjYWxsQ2FsbGJhY2soY2FsbGJhY2tzW3VwZGF0ZVF1ZXVlXSwgY29udGV4dCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hIaWRkZW5Db250ZXh0KGZpYmVyLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcHJldkVudGFuZ2xlZFJlbmRlckxhbmVzID0gZW50YW5nbGVkUmVuZGVyTGFuZXM7XG4gICAgICBwdXNoKHByZXZFbnRhbmdsZWRSZW5kZXJMYW5lc0N1cnNvciwgcHJldkVudGFuZ2xlZFJlbmRlckxhbmVzLCBmaWJlcik7XG4gICAgICBwdXNoKGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IsIGNvbnRleHQsIGZpYmVyKTtcbiAgICAgIGVudGFuZ2xlZFJlbmRlckxhbmVzID0gcHJldkVudGFuZ2xlZFJlbmRlckxhbmVzIHwgY29udGV4dC5iYXNlTGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2soZmliZXIpIHtcbiAgICAgIHB1c2gocHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yLCBlbnRhbmdsZWRSZW5kZXJMYW5lcywgZmliZXIpO1xuICAgICAgcHVzaChcbiAgICAgICAgY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvcixcbiAgICAgICAgY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvci5jdXJyZW50LFxuICAgICAgICBmaWJlclxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcG9wSGlkZGVuQ29udGV4dChmaWJlcikge1xuICAgICAgZW50YW5nbGVkUmVuZGVyTGFuZXMgPSBwcmV2RW50YW5nbGVkUmVuZGVyTGFuZXNDdXJzb3IuY3VycmVudDtcbiAgICAgIHBvcChjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgICBwb3AocHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yLCBmaWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcihoYW5kbGVyKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGhhbmRsZXIuYWx0ZXJuYXRlO1xuICAgICAgcHVzaChcbiAgICAgICAgc3VzcGVuc2VTdGFja0N1cnNvcixcbiAgICAgICAgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50ICYgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2ssXG4gICAgICAgIGhhbmRsZXJcbiAgICAgICk7XG4gICAgICBwdXNoKHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLCBoYW5kbGVyLCBoYW5kbGVyKTtcbiAgICAgIG51bGwgPT09IHNoZWxsQm91bmRhcnkgJiZcbiAgICAgICAgKG51bGwgPT09IGN1cnJlbnQgfHwgbnVsbCAhPT0gY3VycmVudFRyZWVIaWRkZW5TdGFja0N1cnNvci5jdXJyZW50XG4gICAgICAgICAgPyAoc2hlbGxCb3VuZGFyeSA9IGhhbmRsZXIpXG4gICAgICAgICAgOiBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiYgKHNoZWxsQm91bmRhcnkgPSBoYW5kbGVyKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hEZWh5ZHJhdGVkQWN0aXZpdHlTdXNwZW5zZUhhbmRsZXIoZmliZXIpIHtcbiAgICAgIHB1c2goc3VzcGVuc2VTdGFja0N1cnNvciwgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBmaWJlcik7XG4gICAgICBwdXNoKHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpO1xuICAgICAgbnVsbCA9PT0gc2hlbGxCb3VuZGFyeSAmJiAoc2hlbGxCb3VuZGFyeSA9IGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaE9mZnNjcmVlblN1c3BlbnNlSGFuZGxlcihmaWJlcikge1xuICAgICAgMjIgPT09IGZpYmVyLnRhZ1xuICAgICAgICA/IChwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgZmliZXIpLFxuICAgICAgICAgIHB1c2goc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlciksXG4gICAgICAgICAgbnVsbCA9PT0gc2hlbGxCb3VuZGFyeSAmJiAoc2hlbGxCb3VuZGFyeSA9IGZpYmVyKSlcbiAgICAgICAgOiByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2soZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2soZmliZXIpIHtcbiAgICAgIHB1c2goc3VzcGVuc2VTdGFja0N1cnNvciwgc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBmaWJlcik7XG4gICAgICBwdXNoKFxuICAgICAgICBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvcixcbiAgICAgICAgc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudCxcbiAgICAgICAgZmliZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcFN1c3BlbnNlSGFuZGxlcihmaWJlcikge1xuICAgICAgcG9wKHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgICBzaGVsbEJvdW5kYXJ5ID09PSBmaWJlciAmJiAoc2hlbGxCb3VuZGFyeSA9IG51bGwpO1xuICAgICAgcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZEZpcnN0U3VzcGVuZGVkKHJvdykge1xuICAgICAgZm9yICh2YXIgbm9kZSA9IHJvdzsgbnVsbCAhPT0gbm9kZTsgKSB7XG4gICAgICAgIGlmICgxMyA9PT0gbm9kZS50YWcpIHtcbiAgICAgICAgICB2YXIgc3RhdGUgPSBub2RlLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbnVsbCAhPT0gc3RhdGUgJiZcbiAgICAgICAgICAgICgoc3RhdGUgPSBzdGF0ZS5kZWh5ZHJhdGVkKSxcbiAgICAgICAgICAgIG51bGwgPT09IHN0YXRlIHx8XG4gICAgICAgICAgICAgIGlzU3VzcGVuc2VJbnN0YW5jZVBlbmRpbmcoc3RhdGUpIHx8XG4gICAgICAgICAgICAgIGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKHN0YXRlKSlcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAxOSA9PT0gbm9kZS50YWcgJiZcbiAgICAgICAgICAoXCJmb3J3YXJkc1wiID09PSBub2RlLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIgfHxcbiAgICAgICAgICAgIFwiYmFja3dhcmRzXCIgPT09IG5vZGUubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlciB8fFxuICAgICAgICAgICAgXCJ1bnN0YWJsZV9sZWdhY3ktYmFja3dhcmRzXCIgPT09IG5vZGUubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlciB8fFxuICAgICAgICAgICAgXCJ0b2dldGhlclwiID09PSBub2RlLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICgwICE9PSAobm9kZS5mbGFncyAmIDEyOCkpIHJldHVybiBub2RlO1xuICAgICAgICB9IGVsc2UgaWYgKG51bGwgIT09IG5vZGUuY2hpbGQpIHtcbiAgICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUgPT09IHJvdykgYnJlYWs7XG4gICAgICAgIGZvciAoOyBudWxsID09PSBub2RlLnNpYmxpbmc7ICkge1xuICAgICAgICAgIGlmIChudWxsID09PSBub2RlLnJldHVybiB8fCBub2RlLnJldHVybiA9PT0gcm93KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50SG9va1R5cGVzRGV2KCkge1xuICAgICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG4gICAgICBudWxsID09PSBob29rVHlwZXNEZXZcbiAgICAgICAgPyAoaG9va1R5cGVzRGV2ID0gW2hvb2tOYW1lXSlcbiAgICAgICAgOiBob29rVHlwZXNEZXYucHVzaChob29rTmFtZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUhvb2tUeXBlc0RldigpIHtcbiAgICAgIHZhciBob29rTmFtZSA9IGN1cnJlbnRIb29rTmFtZUluRGV2O1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9PSBob29rVHlwZXNEZXYgJiZcbiAgICAgICAgKGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2KyssXG4gICAgICAgIGhvb2tUeXBlc0Rldltob29rVHlwZXNVcGRhdGVJbmRleERldl0gIT09IGhvb2tOYW1lKVxuICAgICAgKSB7XG4gICAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihjdXJyZW50bHlSZW5kZXJpbmdGaWJlcik7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSAmJlxuICAgICAgICAgIChkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpLFxuICAgICAgICAgIG51bGwgIT09IGhvb2tUeXBlc0RldilcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9yICh2YXIgdGFibGUgPSBcIlwiLCBpID0gMDsgaSA8PSBob29rVHlwZXNVcGRhdGVJbmRleERldjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgb2xkSG9va05hbWUgPSBob29rVHlwZXNEZXZbaV0sXG4gICAgICAgICAgICAgIG5ld0hvb2tOYW1lID1cbiAgICAgICAgICAgICAgICBpID09PSBob29rVHlwZXNVcGRhdGVJbmRleERldiA/IGhvb2tOYW1lIDogb2xkSG9va05hbWU7XG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICBvbGRIb29rTmFtZSA9IGkgKyAxICsgXCIuIFwiICsgb2xkSG9va05hbWU7XG4gICAgICAgICAgICAgIDMwID4gb2xkSG9va05hbWUubGVuZ3RoO1xuXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIG9sZEhvb2tOYW1lICs9IFwiIFwiO1xuICAgICAgICAgICAgb2xkSG9va05hbWUgKz0gbmV3SG9va05hbWUgKyBcIlxcblwiO1xuICAgICAgICAgICAgdGFibGUgKz0gb2xkSG9va05hbWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlJlYWN0IGhhcyBkZXRlY3RlZCBhIGNoYW5nZSBpbiB0aGUgb3JkZXIgb2YgSG9va3MgY2FsbGVkIGJ5ICVzLiBUaGlzIHdpbGwgbGVhZCB0byBidWdzIGFuZCBlcnJvcnMgaWYgbm90IGZpeGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVhZCB0aGUgUnVsZXMgb2YgSG9va3M6IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvcnVsZXMtb2YtaG9va3NcXG5cXG4gICBQcmV2aW91cyByZW5kZXIgICAgICAgICAgICBOZXh0IHJlbmRlclxcbiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiVzICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXFxuXCIsXG4gICAgICAgICAgICBjb21wb25lbnROYW1lLFxuICAgICAgICAgICAgdGFibGVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpIHtcbiAgICAgIHZvaWQgMCA9PT0gZGVwcyB8fFxuICAgICAgICBudWxsID09PSBkZXBzIHx8XG4gICAgICAgIGlzQXJyYXlJbXBsKGRlcHMpIHx8XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCIlcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IHRoYXQgaXMgbm90IGFuIGFycmF5IChpbnN0ZWFkLCByZWNlaXZlZCBgJXNgKS4gV2hlbiBzcGVjaWZpZWQsIHRoZSBmaW5hbCBhcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5LlwiLFxuICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2LFxuICAgICAgICAgIHR5cGVvZiBkZXBzXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5PblVzZUZvcm1TdGF0ZUluRGV2KCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyKTtcbiAgICAgIGRpZFdhcm5BYm91dFVzZUZvcm1TdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkgfHxcbiAgICAgICAgKGRpZFdhcm5BYm91dFVzZUZvcm1TdGF0ZS5hZGQoY29tcG9uZW50TmFtZSksXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJSZWFjdERPTS51c2VGb3JtU3RhdGUgaGFzIGJlZW4gcmVuYW1lZCB0byBSZWFjdC51c2VBY3Rpb25TdGF0ZS4gUGxlYXNlIHVwZGF0ZSAlcyB0byB1c2UgUmVhY3QudXNlQWN0aW9uU3RhdGUuXCIsXG4gICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdGhyb3dJbnZhbGlkSG9va0Vycm9yKCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSB7XG4gICAgICBpZiAoaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMpIHJldHVybiAhMTtcbiAgICAgIGlmIChudWxsID09PSBwcmV2RGVwcylcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IGR1cmluZyB0aGlzIHJlbmRlciwgYnV0IG5vdCBkdXJpbmcgdGhlIHByZXZpb3VzIHJlbmRlci4gRXZlbiB0aG91Z2ggdGhlIGZpbmFsIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBpdHMgdHlwZSBjYW5ub3QgY2hhbmdlIGJldHdlZW4gcmVuZGVycy5cIixcbiAgICAgICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2XG4gICAgICAgICAgKSxcbiAgICAgICAgICAhMVxuICAgICAgICApO1xuICAgICAgbmV4dERlcHMubGVuZ3RoICE9PSBwcmV2RGVwcy5sZW5ndGggJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlRoZSBmaW5hbCBhcmd1bWVudCBwYXNzZWQgdG8gJXMgY2hhbmdlZCBzaXplIGJldHdlZW4gcmVuZGVycy4gVGhlIG9yZGVyIGFuZCBzaXplIG9mIHRoaXMgYXJyYXkgbXVzdCByZW1haW4gY29uc3RhbnQuXFxuXFxuUHJldmlvdXM6ICVzXFxuSW5jb21pbmc6ICVzXCIsXG4gICAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYsXG4gICAgICAgICAgXCJbXCIgKyBwcmV2RGVwcy5qb2luKFwiLCBcIikgKyBcIl1cIixcbiAgICAgICAgICBcIltcIiArIG5leHREZXBzLmpvaW4oXCIsIFwiKSArIFwiXVwiXG4gICAgICAgICk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZEZXBzLmxlbmd0aCAmJiBpIDwgbmV4dERlcHMubGVuZ3RoOyBpKyspXG4gICAgICAgIGlmICghb2JqZWN0SXMobmV4dERlcHNbaV0sIHByZXZEZXBzW2ldKSkgcmV0dXJuICExO1xuICAgICAgcmV0dXJuICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW5kZXJXaXRoSG9va3MoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBwcm9wcyxcbiAgICAgIHNlY29uZEFyZyxcbiAgICAgIG5leHRSZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgcmVuZGVyTGFuZXMgPSBuZXh0UmVuZGVyTGFuZXM7XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgaG9va1R5cGVzRGV2ID0gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQuX2RlYnVnSG9va1R5cGVzIDogbnVsbDtcbiAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9XG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgY3VycmVudC50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgaWYgKFxuICAgICAgICBcIltvYmplY3QgQXN5bmNGdW5jdGlvbl1cIiA9PT1cbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQ29tcG9uZW50KSB8fFxuICAgICAgICBcIltvYmplY3QgQXN5bmNHZW5lcmF0b3JGdW5jdGlvbl1cIiA9PT1cbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQ29tcG9uZW50KVxuICAgICAgKVxuICAgICAgICAobmV4dFJlbmRlckxhbmVzID0gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihjdXJyZW50bHlSZW5kZXJpbmdGaWJlcikpLFxuICAgICAgICAgIGRpZFdhcm5BYm91dEFzeW5jQ2xpZW50Q29tcG9uZW50LmhhcyhuZXh0UmVuZGVyTGFuZXMpIHx8XG4gICAgICAgICAgICAoZGlkV2FybkFib3V0QXN5bmNDbGllbnRDb21wb25lbnQuYWRkKG5leHRSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIiVzIGlzIGFuIGFzeW5jIENsaWVudCBDb21wb25lbnQuIE9ubHkgU2VydmVyIENvbXBvbmVudHMgY2FuIGJlIGFzeW5jIGF0IHRoZSBtb21lbnQuIFRoaXMgZXJyb3IgaXMgb2Z0ZW4gY2F1c2VkIGJ5IGFjY2lkZW50YWxseSBhZGRpbmcgYCd1c2UgY2xpZW50J2AgdG8gYSBtb2R1bGUgdGhhdCB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGZvciB0aGUgc2VydmVyLlwiLFxuICAgICAgICAgICAgICBudWxsID09PSBuZXh0UmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICA/IFwiQW4gdW5rbm93biBDb21wb25lbnRcIlxuICAgICAgICAgICAgICAgIDogXCI8XCIgKyBuZXh0UmVuZGVyTGFuZXMgKyBcIj5cIlxuICAgICAgICAgICAgKSk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gMDtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPVxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgID8gSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVlxuICAgICAgICAgIDogbnVsbCAhPT0gaG9va1R5cGVzRGV2XG4gICAgICAgICAgICA/IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVZcbiAgICAgICAgICAgIDogSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYgPSBuZXh0UmVuZGVyTGFuZXMgPVxuICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpICE9PSBOb01vZGU7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBjYWxsQ29tcG9uZW50SW5ERVYoQ29tcG9uZW50LCBwcm9wcywgc2Vjb25kQXJnKTtcbiAgICAgIHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWID0gITE7XG4gICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgJiZcbiAgICAgICAgKGNoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzQWdhaW4oXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgIHByb3BzLFxuICAgICAgICAgIHNlY29uZEFyZ1xuICAgICAgICApKTtcbiAgICAgIGlmIChuZXh0UmVuZGVyTGFuZXMpIHtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzQWdhaW4oXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgc2Vjb25kQXJnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZpbmlzaFJlbmRlcmluZ0hvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluaXNoUmVuZGVyaW5nSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0hvb2tUeXBlcyA9IGhvb2tUeXBlc0RldjtcbiAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llc1xuICAgICAgICA/IG51bGwgIT09IHRoZW5hYmxlU3RhdGUgJiZcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0ge1xuICAgICAgICAgICAgbGFuZXM6IDAsXG4gICAgICAgICAgICBmaXJzdENvbnRleHQ6IG51bGwsXG4gICAgICAgICAgICBfZGVidWdUaGVuYWJsZVN0YXRlOiB0aGVuYWJsZVN0YXRlXG4gICAgICAgICAgfSlcbiAgICAgICAgOiAod29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzLl9kZWJ1Z1RoZW5hYmxlU3RhdGUgPSB0aGVuYWJsZVN0YXRlKTtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG4gICAgICB2YXIgZGlkUmVuZGVyVG9vRmV3SG9va3MgPVxuICAgICAgICBudWxsICE9PSBjdXJyZW50SG9vayAmJiBudWxsICE9PSBjdXJyZW50SG9vay5uZXh0O1xuICAgICAgcmVuZGVyTGFuZXMgPSAwO1xuICAgICAgaG9va1R5cGVzRGV2ID1cbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPVxuICAgICAgICBjdXJyZW50SG9vayA9XG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID1cbiAgICAgICAgICBudWxsO1xuICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTtcbiAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgKGN1cnJlbnQuZmxhZ3MgJiA2NTAxMTcxMikgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDY1MDExNzEyKSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiSW50ZXJuYWwgUmVhY3QgZXJyb3I6IEV4cGVjdGVkIHN0YXRpYyBmbGFnIHdhcyBtaXNzaW5nLiBQbGVhc2Ugbm90aWZ5IHRoZSBSZWFjdCB0ZWFtLlwiXG4gICAgICAgICk7XG4gICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gITE7XG4gICAgICB0aGVuYWJsZUluZGV4Q291bnRlciA9IDA7XG4gICAgICB0aGVuYWJsZVN0YXRlID0gbnVsbDtcbiAgICAgIGlmIChkaWRSZW5kZXJUb29GZXdIb29rcylcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJSZW5kZXJlZCBmZXdlciBob29rcyB0aGFuIGV4cGVjdGVkLiBUaGlzIG1heSBiZSBjYXVzZWQgYnkgYW4gYWNjaWRlbnRhbCBlYXJseSByZXR1cm4gc3RhdGVtZW50LlwiXG4gICAgICAgICk7XG4gICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgfHxcbiAgICAgICAgKChjdXJyZW50ID0gY3VycmVudC5kZXBlbmRlbmNpZXMpLFxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgY2hlY2tJZkNvbnRleHRDaGFuZ2VkKGN1cnJlbnQpICYmXG4gICAgICAgICAgKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCkpO1xuICAgICAgbmVlZHNUb1Jlc2V0U3VzcGVuZGVkVGhlbmFibGVERVZcbiAgICAgICAgPyAoKG5lZWRzVG9SZXNldFN1c3BlbmRlZFRoZW5hYmxlREVWID0gITEpLCAoY3VycmVudCA9ICEwKSlcbiAgICAgICAgOiAoY3VycmVudCA9ICExKTtcbiAgICAgIGN1cnJlbnQgJiZcbiAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcyA9XG4gICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykgfHwgXCJVbmtub3duXCIpLFxuICAgICAgICBkaWRXYXJuQWJvdXRVc2VXcmFwcGVkSW5UcnlDYXRjaC5oYXMod29ya0luUHJvZ3Jlc3MpIHx8XG4gICAgICAgICAgZGlkV2FybkFib3V0QXN5bmNDbGllbnRDb21wb25lbnQuaGFzKHdvcmtJblByb2dyZXNzKSB8fFxuICAgICAgICAgIChkaWRXYXJuQWJvdXRVc2VXcmFwcGVkSW5UcnlDYXRjaC5hZGQod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcImB1c2VgIHdhcyBjYWxsZWQgZnJvbSBpbnNpZGUgYSB0cnkvY2F0Y2ggYmxvY2suIFRoaXMgaXMgbm90IGFsbG93ZWQgYW5kIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRvIGhhbmRsZSBlcnJvcnMgdHJpZ2dlcmVkIGJ5IGB1c2VgLCB3cmFwIHlvdXIgY29tcG9uZW50IGluIGEgZXJyb3IgYm91bmRhcnkuXCJcbiAgICAgICAgICApKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbmRlcldpdGhIb29rc0FnYWluKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBzZWNvbmRBcmcpIHtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICB2YXIgbnVtYmVyT2ZSZVJlbmRlcnMgPSAwO1xuICAgICAgZG8ge1xuICAgICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgJiYgKHRoZW5hYmxlU3RhdGUgPSBudWxsKTtcbiAgICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIgPSAwO1xuICAgICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSAhMTtcbiAgICAgICAgaWYgKG51bWJlck9mUmVSZW5kZXJzID49IFJFX1JFTkRFUl9MSU1JVClcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiVG9vIG1hbnkgcmUtcmVuZGVycy4gUmVhY3QgbGltaXRzIHRoZSBudW1iZXIgb2YgcmVuZGVycyB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3AuXCJcbiAgICAgICAgICApO1xuICAgICAgICBudW1iZXJPZlJlUmVuZGVycyArPSAxO1xuICAgICAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9ICExO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBjdXJyZW50SG9vayA9IG51bGw7XG4gICAgICAgIGlmIChudWxsICE9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlKSB7XG4gICAgICAgICAgdmFyIGNoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gICAgICAgICAgY2hpbGRyZW4ubGFzdEVmZmVjdCA9IG51bGw7XG4gICAgICAgICAgY2hpbGRyZW4uZXZlbnRzID0gbnVsbDtcbiAgICAgICAgICBjaGlsZHJlbi5zdG9yZXMgPSBudWxsO1xuICAgICAgICAgIG51bGwgIT0gY2hpbGRyZW4ubWVtb0NhY2hlICYmIChjaGlsZHJlbi5tZW1vQ2FjaGUuaW5kZXggPSAwKTtcbiAgICAgICAgfVxuICAgICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuICAgICAgICBjaGlsZHJlbiA9IGNhbGxDb21wb25lbnRJbkRFVihDb21wb25lbnQsIHByb3BzLCBzZWNvbmRBcmcpO1xuICAgICAgfSB3aGlsZSAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzKTtcbiAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gVHJhbnNpdGlvbkF3YXJlSG9zdENvbXBvbmVudCgpIHtcbiAgICAgIHZhciBkaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCxcbiAgICAgICAgbWF5YmVUaGVuYWJsZSA9IGRpc3BhdGNoZXIudXNlU3RhdGUoKVswXTtcbiAgICAgIG1heWJlVGhlbmFibGUgPVxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBtYXliZVRoZW5hYmxlLnRoZW5cbiAgICAgICAgICA/IHVzZVRoZW5hYmxlKG1heWJlVGhlbmFibGUpXG4gICAgICAgICAgOiBtYXliZVRoZW5hYmxlO1xuICAgICAgZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXIudXNlU3RhdGUoKVswXTtcbiAgICAgIChudWxsICE9PSBjdXJyZW50SG9vayA/IGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUgOiBudWxsKSAhPT1cbiAgICAgICAgZGlzcGF0Y2hlciAmJiAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIuZmxhZ3MgfD0gMTAyNCk7XG4gICAgICByZXR1cm4gbWF5YmVUaGVuYWJsZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tEaWRSZW5kZXJJZEhvb2soKSB7XG4gICAgICB2YXIgZGlkUmVuZGVySWRIb29rID0gMCAhPT0gbG9jYWxJZENvdW50ZXI7XG4gICAgICBsb2NhbElkQ291bnRlciA9IDA7XG4gICAgICByZXR1cm4gZGlkUmVuZGVySWRIb29rO1xuICAgIH1cbiAgICBmdW5jdGlvbiBiYWlsb3V0SG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGxhbmVzKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9XG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGVcbiAgICAgICAgICA/IHdvcmtJblByb2dyZXNzLmZsYWdzICYgLTQwMjY1NTIzN1xuICAgICAgICAgIDogd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAtMjA1MztcbiAgICAgIGN1cnJlbnQubGFuZXMgJj0gfmxhbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNldEhvb2tzT25VbndpbmQod29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIGlmIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlKSB7XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIG51bGwgIT09IHdvcmtJblByb2dyZXNzO1xuXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnF1ZXVlO1xuICAgICAgICAgIG51bGwgIT09IHF1ZXVlICYmIChxdWV1ZS5wZW5kaW5nID0gbnVsbCk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcy5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSAhMTtcbiAgICAgIH1cbiAgICAgIHJlbmRlckxhbmVzID0gMDtcbiAgICAgIGhvb2tUeXBlc0RldiA9XG4gICAgICAgIHdvcmtJblByb2dyZXNzSG9vayA9XG4gICAgICAgIGN1cnJlbnRIb29rID1cbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPVxuICAgICAgICAgIG51bGw7XG4gICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsO1xuICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gITE7XG4gICAgICB0aGVuYWJsZUluZGV4Q291bnRlciA9IGxvY2FsSWRDb3VudGVyID0gMDtcbiAgICAgIHRoZW5hYmxlU3RhdGUgPSBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgICAgIHZhciBob29rID0ge1xuICAgICAgICBtZW1vaXplZFN0YXRlOiBudWxsLFxuICAgICAgICBiYXNlU3RhdGU6IG51bGwsXG4gICAgICAgIGJhc2VRdWV1ZTogbnVsbCxcbiAgICAgICAgcXVldWU6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc0hvb2tcbiAgICAgICAgPyAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIubWVtb2l6ZWRTdGF0ZSA9IHdvcmtJblByb2dyZXNzSG9vayA9IGhvb2spXG4gICAgICAgIDogKHdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0ID0gaG9vayk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gICAgICBpZiAobnVsbCA9PT0gY3VycmVudEhvb2spIHtcbiAgICAgICAgdmFyIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmFsdGVybmF0ZTtcbiAgICAgICAgbmV4dEN1cnJlbnRIb29rID1cbiAgICAgICAgICBudWxsICE9PSBuZXh0Q3VycmVudEhvb2sgPyBuZXh0Q3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZSA6IG51bGw7XG4gICAgICB9IGVsc2UgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudEhvb2submV4dDtcbiAgICAgIHZhciBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID1cbiAgICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NIb29rXG4gICAgICAgICAgPyBjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgOiB3b3JrSW5Qcm9ncmVzc0hvb2submV4dDtcbiAgICAgIGlmIChudWxsICE9PSBuZXh0V29ya0luUHJvZ3Jlc3NIb29rKVxuICAgICAgICAod29ya0luUHJvZ3Jlc3NIb29rID0gbmV4dFdvcmtJblByb2dyZXNzSG9vayksXG4gICAgICAgICAgKGN1cnJlbnRIb29rID0gbmV4dEN1cnJlbnRIb29rKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAobnVsbCA9PT0gbmV4dEN1cnJlbnRIb29rKSB7XG4gICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmFsdGVybmF0ZSlcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIlVwZGF0ZSBob29rIGNhbGxlZCBvbiBpbml0aWFsIHJlbmRlci4gVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHRocm93IEVycm9yKFwiUmVuZGVyZWQgbW9yZSBob29rcyB0aGFuIGR1cmluZyB0aGUgcHJldmlvdXMgcmVuZGVyLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50SG9vayA9IG5leHRDdXJyZW50SG9vaztcbiAgICAgICAgbmV4dEN1cnJlbnRIb29rID0ge1xuICAgICAgICAgIG1lbW9pemVkU3RhdGU6IGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUsXG4gICAgICAgICAgYmFzZVN0YXRlOiBjdXJyZW50SG9vay5iYXNlU3RhdGUsXG4gICAgICAgICAgYmFzZVF1ZXVlOiBjdXJyZW50SG9vay5iYXNlUXVldWUsXG4gICAgICAgICAgcXVldWU6IGN1cnJlbnRIb29rLnF1ZXVlLFxuICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgfTtcbiAgICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NIb29rXG4gICAgICAgICAgPyAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIubWVtb2l6ZWRTdGF0ZSA9IHdvcmtJblByb2dyZXNzSG9vayA9XG4gICAgICAgICAgICAgIG5leHRDdXJyZW50SG9vaylcbiAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dCA9IG5leHRDdXJyZW50SG9vayk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCkge1xuICAgICAgcmV0dXJuIHsgbGFzdEVmZmVjdDogbnVsbCwgZXZlbnRzOiBudWxsLCBzdG9yZXM6IG51bGwsIG1lbW9DYWNoZTogbnVsbCB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiB1c2VUaGVuYWJsZSh0aGVuYWJsZSkge1xuICAgICAgdmFyIGluZGV4ID0gdGhlbmFibGVJbmRleENvdW50ZXI7XG4gICAgICB0aGVuYWJsZUluZGV4Q291bnRlciArPSAxO1xuICAgICAgbnVsbCA9PT0gdGhlbmFibGVTdGF0ZSAmJiAodGhlbmFibGVTdGF0ZSA9IGNyZWF0ZVRoZW5hYmxlU3RhdGUoKSk7XG4gICAgICB0aGVuYWJsZSA9IHRyYWNrVXNlZFRoZW5hYmxlKHRoZW5hYmxlU3RhdGUsIHRoZW5hYmxlLCBpbmRleCk7XG4gICAgICBpbmRleCA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyO1xuICAgICAgbnVsbCA9PT1cbiAgICAgICAgKG51bGwgPT09IHdvcmtJblByb2dyZXNzSG9va1xuICAgICAgICAgID8gaW5kZXgubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgIDogd29ya0luUHJvZ3Jlc3NIb29rLm5leHQpICYmXG4gICAgICAgICgoaW5kZXggPSBpbmRleC5hbHRlcm5hdGUpLFxuICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9XG4gICAgICAgICAgbnVsbCAhPT0gaW5kZXggJiYgbnVsbCAhPT0gaW5kZXgubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgICAgPyBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWXG4gICAgICAgICAgICA6IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVikpO1xuICAgICAgcmV0dXJuIHRoZW5hYmxlO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1c2UodXNhYmxlKSB7XG4gICAgICBpZiAobnVsbCAhPT0gdXNhYmxlICYmIFwib2JqZWN0XCIgPT09IHR5cGVvZiB1c2FibGUpIHtcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHVzYWJsZS50aGVuKSByZXR1cm4gdXNlVGhlbmFibGUodXNhYmxlKTtcbiAgICAgICAgaWYgKHVzYWJsZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFKSByZXR1cm4gcmVhZENvbnRleHQodXNhYmxlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IEVycm9yKFwiQW4gdW5zdXBwb3J0ZWQgdHlwZSB3YXMgcGFzc2VkIHRvIHVzZSgpOiBcIiArIFN0cmluZyh1c2FibGUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXNlTWVtb0NhY2hlKHNpemUpIHtcbiAgICAgIHZhciBtZW1vQ2FjaGUgPSBudWxsLFxuICAgICAgICB1cGRhdGVRdWV1ZSA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLnVwZGF0ZVF1ZXVlO1xuICAgICAgbnVsbCAhPT0gdXBkYXRlUXVldWUgJiYgKG1lbW9DYWNoZSA9IHVwZGF0ZVF1ZXVlLm1lbW9DYWNoZSk7XG4gICAgICBpZiAobnVsbCA9PSBtZW1vQ2FjaGUpIHtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5hbHRlcm5hdGU7XG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAoKGN1cnJlbnQgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAoKGN1cnJlbnQgPSBjdXJyZW50Lm1lbW9DYWNoZSksXG4gICAgICAgICAgICBudWxsICE9IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgKG1lbW9DYWNoZSA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiBjdXJyZW50LmRhdGEubWFwKGZ1bmN0aW9uIChhcnJheSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5LnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaW5kZXg6IDBcbiAgICAgICAgICAgICAgfSkpKTtcbiAgICAgIH1cbiAgICAgIG51bGwgPT0gbWVtb0NhY2hlICYmIChtZW1vQ2FjaGUgPSB7IGRhdGE6IFtdLCBpbmRleDogMCB9KTtcbiAgICAgIG51bGwgPT09IHVwZGF0ZVF1ZXVlICYmXG4gICAgICAgICgodXBkYXRlUXVldWUgPSBjcmVhdGVGdW5jdGlvbkNvbXBvbmVudFVwZGF0ZVF1ZXVlKCkpLFxuICAgICAgICAoY3VycmVudGx5UmVuZGVyaW5nRmliZXIudXBkYXRlUXVldWUgPSB1cGRhdGVRdWV1ZSkpO1xuICAgICAgdXBkYXRlUXVldWUubWVtb0NhY2hlID0gbWVtb0NhY2hlO1xuICAgICAgdXBkYXRlUXVldWUgPSBtZW1vQ2FjaGUuZGF0YVttZW1vQ2FjaGUuaW5kZXhdO1xuICAgICAgaWYgKHZvaWQgMCA9PT0gdXBkYXRlUXVldWUgfHwgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMpXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdXBkYXRlUXVldWUgPSBtZW1vQ2FjaGUuZGF0YVttZW1vQ2FjaGUuaW5kZXhdID0gQXJyYXkoc2l6ZSksXG4gICAgICAgICAgICBjdXJyZW50ID0gMDtcbiAgICAgICAgICBjdXJyZW50IDwgc2l6ZTtcbiAgICAgICAgICBjdXJyZW50KytcbiAgICAgICAgKVxuICAgICAgICAgIHVwZGF0ZVF1ZXVlW2N1cnJlbnRdID0gUkVBQ1RfTUVNT19DQUNIRV9TRU5USU5FTDtcbiAgICAgIGVsc2VcbiAgICAgICAgdXBkYXRlUXVldWUubGVuZ3RoICE9PSBzaXplICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgYSBjb25zdGFudCBzaXplIGFyZ3VtZW50IGZvciBlYWNoIGludm9jYXRpb24gb2YgdXNlTWVtb0NhY2hlLiBUaGUgcHJldmlvdXMgY2FjaGUgd2FzIGFsbG9jYXRlZCB3aXRoIHNpemUgJXMgYnV0IHNpemUgJXMgd2FzIHJlcXVlc3RlZC5cIixcbiAgICAgICAgICAgIHVwZGF0ZVF1ZXVlLmxlbmd0aCxcbiAgICAgICAgICAgIHNpemVcbiAgICAgICAgICApO1xuICAgICAgbWVtb0NhY2hlLmluZGV4Kys7XG4gICAgICByZXR1cm4gdXBkYXRlUXVldWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJhc2ljU3RhdGVSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgICAgIHJldHVybiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhY3Rpb24gPyBhY3Rpb24oc3RhdGUpIDogYWN0aW9uO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgaWYgKHZvaWQgMCAhPT0gaW5pdCkge1xuICAgICAgICB2YXIgaW5pdGlhbFN0YXRlID0gaW5pdChpbml0aWFsQXJnKTtcbiAgICAgICAgaWYgKHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWKSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbml0KGluaXRpYWxBcmcpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaW5pdGlhbFN0YXRlID0gaW5pdGlhbEFyZztcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgICAgcmVkdWNlciA9IHtcbiAgICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgICAgbGFuZXM6IDAsXG4gICAgICAgIGRpc3BhdGNoOiBudWxsLFxuICAgICAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiByZWR1Y2VyLFxuICAgICAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlXG4gICAgICB9O1xuICAgICAgaG9vay5xdWV1ZSA9IHJlZHVjZXI7XG4gICAgICByZWR1Y2VyID0gcmVkdWNlci5kaXNwYXRjaCA9IGRpc3BhdGNoUmVkdWNlckFjdGlvbi5iaW5kKFxuICAgICAgICBudWxsLFxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlcixcbiAgICAgICAgcmVkdWNlclxuICAgICAgKTtcbiAgICAgIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCByZWR1Y2VyXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlUmVkdWNlcihyZWR1Y2VyKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXJJbXBsKGhvb2ssIGN1cnJlbnRIb29rLCByZWR1Y2VyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlUmVkdWNlckltcGwoaG9vaywgY3VycmVudCwgcmVkdWNlcikge1xuICAgICAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcbiAgICAgIGlmIChudWxsID09PSBxdWV1ZSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJTaG91bGQgaGF2ZSBhIHF1ZXVlLiBZb3UgYXJlIGxpa2VseSBjYWxsaW5nIEhvb2tzIGNvbmRpdGlvbmFsbHksIHdoaWNoIGlzIG5vdCBhbGxvd2VkLiAoaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9pbnZhbGlkLWhvb2stY2FsbClcIlxuICAgICAgICApO1xuICAgICAgcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlciA9IHJlZHVjZXI7XG4gICAgICB2YXIgYmFzZVF1ZXVlID0gaG9vay5iYXNlUXVldWUsXG4gICAgICAgIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnBlbmRpbmc7XG4gICAgICBpZiAobnVsbCAhPT0gcGVuZGluZ1F1ZXVlKSB7XG4gICAgICAgIGlmIChudWxsICE9PSBiYXNlUXVldWUpIHtcbiAgICAgICAgICB2YXIgYmFzZUZpcnN0ID0gYmFzZVF1ZXVlLm5leHQ7XG4gICAgICAgICAgYmFzZVF1ZXVlLm5leHQgPSBwZW5kaW5nUXVldWUubmV4dDtcbiAgICAgICAgICBwZW5kaW5nUXVldWUubmV4dCA9IGJhc2VGaXJzdDtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50LmJhc2VRdWV1ZSAhPT0gYmFzZVF1ZXVlICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiSW50ZXJuYWwgZXJyb3I6IEV4cGVjdGVkIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgdG8gYmUgYSBjbG9uZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIGN1cnJlbnQuYmFzZVF1ZXVlID0gYmFzZVF1ZXVlID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHBlbmRpbmdRdWV1ZSA9IGhvb2suYmFzZVN0YXRlO1xuICAgICAgaWYgKG51bGwgPT09IGJhc2VRdWV1ZSkgaG9vay5tZW1vaXplZFN0YXRlID0gcGVuZGluZ1F1ZXVlO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGN1cnJlbnQgPSBiYXNlUXVldWUubmV4dDtcbiAgICAgICAgdmFyIG5ld0Jhc2VRdWV1ZUZpcnN0ID0gKGJhc2VGaXJzdCA9IG51bGwpLFxuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QgPSBudWxsLFxuICAgICAgICAgIHVwZGF0ZSA9IGN1cnJlbnQsXG4gICAgICAgICAgZGlkUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiA9ICExO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgdmFyIHVwZGF0ZUxhbmUgPSB1cGRhdGUubGFuZSAmIC01MzY4NzA5MTM7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdXBkYXRlTGFuZSAhPT0gdXBkYXRlLmxhbmVcbiAgICAgICAgICAgICAgPyAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiB1cGRhdGVMYW5lKSA9PT0gdXBkYXRlTGFuZVxuICAgICAgICAgICAgICA6IChyZW5kZXJMYW5lcyAmIHVwZGF0ZUxhbmUpID09PSB1cGRhdGVMYW5lXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YXIgcmV2ZXJ0TGFuZSA9IHVwZGF0ZS5yZXZlcnRMYW5lO1xuICAgICAgICAgICAgaWYgKDAgPT09IHJldmVydExhbmUpXG4gICAgICAgICAgICAgIG51bGwgIT09IG5ld0Jhc2VRdWV1ZUxhc3QgJiZcbiAgICAgICAgICAgICAgICAobmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9XG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhbmU6IDAsXG4gICAgICAgICAgICAgICAgICAgIHJldmVydExhbmU6IDAsXG4gICAgICAgICAgICAgICAgICAgIGdlc3R1cmU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaGFzRWFnZXJTdGF0ZTogdXBkYXRlLmhhc0VhZ2VyU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIGVhZ2VyU3RhdGU6IHVwZGF0ZS5lYWdlclN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB1cGRhdGVMYW5lID09PSBjdXJyZW50RW50YW5nbGVkTGFuZSAmJlxuICAgICAgICAgICAgICAgICAgKGRpZFJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24gPSAhMCk7XG4gICAgICAgICAgICBlbHNlIGlmICgocmVuZGVyTGFuZXMgJiByZXZlcnRMYW5lKSA9PT0gcmV2ZXJ0TGFuZSkge1xuICAgICAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgICAgICAgcmV2ZXJ0TGFuZSA9PT0gY3VycmVudEVudGFuZ2xlZExhbmUgJiZcbiAgICAgICAgICAgICAgICAoZGlkUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbiA9ICEwKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgKHVwZGF0ZUxhbmUgPSB7XG4gICAgICAgICAgICAgICAgbGFuZTogMCxcbiAgICAgICAgICAgICAgICByZXZlcnRMYW5lOiB1cGRhdGUucmV2ZXJ0TGFuZSxcbiAgICAgICAgICAgICAgICBnZXN0dXJlOiBudWxsLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICAgICAgICBoYXNFYWdlclN0YXRlOiB1cGRhdGUuaGFzRWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG51bGwgPT09IG5ld0Jhc2VRdWV1ZUxhc3RcbiAgICAgICAgICAgICAgICAgID8gKChuZXdCYXNlUXVldWVGaXJzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QgPSB1cGRhdGVMYW5lKSxcbiAgICAgICAgICAgICAgICAgICAgKGJhc2VGaXJzdCA9IHBlbmRpbmdRdWV1ZSkpXG4gICAgICAgICAgICAgICAgICA6IChuZXdCYXNlUXVldWVMYXN0ID0gbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gdXBkYXRlTGFuZSksXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmxhbmVzIHw9IHJldmVydExhbmUpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgfD0gcmV2ZXJ0TGFuZSk7XG4gICAgICAgICAgICB1cGRhdGVMYW5lID0gdXBkYXRlLmFjdGlvbjtcbiAgICAgICAgICAgIHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWICYmXG4gICAgICAgICAgICAgIHJlZHVjZXIocGVuZGluZ1F1ZXVlLCB1cGRhdGVMYW5lKTtcbiAgICAgICAgICAgIHBlbmRpbmdRdWV1ZSA9IHVwZGF0ZS5oYXNFYWdlclN0YXRlXG4gICAgICAgICAgICAgID8gdXBkYXRlLmVhZ2VyU3RhdGVcbiAgICAgICAgICAgICAgOiByZWR1Y2VyKHBlbmRpbmdRdWV1ZSwgdXBkYXRlTGFuZSk7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAocmV2ZXJ0TGFuZSA9IHtcbiAgICAgICAgICAgICAgbGFuZTogdXBkYXRlTGFuZSxcbiAgICAgICAgICAgICAgcmV2ZXJ0TGFuZTogdXBkYXRlLnJldmVydExhbmUsXG4gICAgICAgICAgICAgIGdlc3R1cmU6IHVwZGF0ZS5nZXN0dXJlLFxuICAgICAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgICAgIGhhc0VhZ2VyU3RhdGU6IHVwZGF0ZS5oYXNFYWdlclN0YXRlLFxuICAgICAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIG51bGwgPT09IG5ld0Jhc2VRdWV1ZUxhc3RcbiAgICAgICAgICAgICAgICA/ICgobmV3QmFzZVF1ZXVlRmlyc3QgPSBuZXdCYXNlUXVldWVMYXN0ID0gcmV2ZXJ0TGFuZSksXG4gICAgICAgICAgICAgICAgICAoYmFzZUZpcnN0ID0gcGVuZGluZ1F1ZXVlKSlcbiAgICAgICAgICAgICAgICA6IChuZXdCYXNlUXVldWVMYXN0ID0gbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gcmV2ZXJ0TGFuZSksXG4gICAgICAgICAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5sYW5lcyB8PSB1cGRhdGVMYW5lKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyB8PSB1cGRhdGVMYW5lKTtcbiAgICAgICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICAgICAgfSB3aGlsZSAobnVsbCAhPT0gdXBkYXRlICYmIHVwZGF0ZSAhPT0gY3VycmVudCk7XG4gICAgICAgIG51bGwgPT09IG5ld0Jhc2VRdWV1ZUxhc3RcbiAgICAgICAgICA/IChiYXNlRmlyc3QgPSBwZW5kaW5nUXVldWUpXG4gICAgICAgICAgOiAobmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gbmV3QmFzZVF1ZXVlRmlyc3QpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIW9iamVjdElzKHBlbmRpbmdRdWV1ZSwgaG9vay5tZW1vaXplZFN0YXRlKSAmJlxuICAgICAgICAgICgoZGlkUmVjZWl2ZVVwZGF0ZSA9ICEwKSxcbiAgICAgICAgICBkaWRSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uICYmXG4gICAgICAgICAgICAoKHJlZHVjZXIgPSBjdXJyZW50RW50YW5nbGVkQWN0aW9uVGhlbmFibGUpLCBudWxsICE9PSByZWR1Y2VyKSlcbiAgICAgICAgKVxuICAgICAgICAgIHRocm93IHJlZHVjZXI7XG4gICAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICAgICAgaG9vay5iYXNlU3RhdGUgPSBiYXNlRmlyc3Q7XG4gICAgICAgIGhvb2suYmFzZVF1ZXVlID0gbmV3QmFzZVF1ZXVlTGFzdDtcbiAgICAgICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBwZW5kaW5nUXVldWU7XG4gICAgICB9XG4gICAgICBudWxsID09PSBiYXNlUXVldWUgJiYgKHF1ZXVlLmxhbmVzID0gMCk7XG4gICAgICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgcXVldWUuZGlzcGF0Y2hdO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXJlbmRlclJlZHVjZXIocmVkdWNlcikge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKSxcbiAgICAgICAgcXVldWUgPSBob29rLnF1ZXVlO1xuICAgICAgaWYgKG51bGwgPT09IHF1ZXVlKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIlNob3VsZCBoYXZlIGEgcXVldWUuIFlvdSBhcmUgbGlrZWx5IGNhbGxpbmcgSG9va3MgY29uZGl0aW9uYWxseSwgd2hpY2ggaXMgbm90IGFsbG93ZWQuIChodHRwczovL3JlYWN0LmRldi9saW5rL2ludmFsaWQtaG9vay1jYWxsKVwiXG4gICAgICAgICk7XG4gICAgICBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcmVkdWNlcjtcbiAgICAgIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoLFxuICAgICAgICBsYXN0UmVuZGVyUGhhc2VVcGRhdGUgPSBxdWV1ZS5wZW5kaW5nLFxuICAgICAgICBuZXdTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGlmIChudWxsICE9PSBsYXN0UmVuZGVyUGhhc2VVcGRhdGUpIHtcbiAgICAgICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgICAgIHZhciB1cGRhdGUgPSAobGFzdFJlbmRlclBoYXNlVXBkYXRlID0gbGFzdFJlbmRlclBoYXNlVXBkYXRlLm5leHQpO1xuICAgICAgICBkb1xuICAgICAgICAgIChuZXdTdGF0ZSA9IHJlZHVjZXIobmV3U3RhdGUsIHVwZGF0ZS5hY3Rpb24pKSwgKHVwZGF0ZSA9IHVwZGF0ZS5uZXh0KTtcbiAgICAgICAgd2hpbGUgKHVwZGF0ZSAhPT0gbGFzdFJlbmRlclBoYXNlVXBkYXRlKTtcbiAgICAgICAgb2JqZWN0SXMobmV3U3RhdGUsIGhvb2subWVtb2l6ZWRTdGF0ZSkgfHwgKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCk7XG4gICAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgICBudWxsID09PSBob29rLmJhc2VRdWV1ZSAmJiAoaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZSk7XG4gICAgICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gW25ld1N0YXRlLCBkaXNwYXRjaF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50U3luY0V4dGVybmFsU3RvcmUoc3Vic2NyaWJlLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpIHtcbiAgICAgIHZhciBmaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLFxuICAgICAgICBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGlmIChpc0h5ZHJhdGluZykge1xuICAgICAgICBpZiAodm9pZCAwID09PSBnZXRTZXJ2ZXJTbmFwc2hvdClcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiTWlzc2luZyBnZXRTZXJ2ZXJTbmFwc2hvdCwgd2hpY2ggaXMgcmVxdWlyZWQgZm9yIHNlcnZlci1yZW5kZXJlZCBjb250ZW50LiBXaWxsIHJldmVydCB0byBjbGllbnQgcmVuZGVyaW5nLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgdmFyIG5leHRTbmFwc2hvdCA9IGdldFNlcnZlclNuYXBzaG90KCk7XG4gICAgICAgIGRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90IHx8XG4gICAgICAgICAgbmV4dFNuYXBzaG90ID09PSBnZXRTZXJ2ZXJTbmFwc2hvdCgpIHx8XG4gICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlRoZSByZXN1bHQgb2YgZ2V0U2VydmVyU25hcHNob3Qgc2hvdWxkIGJlIGNhY2hlZCB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wXCJcbiAgICAgICAgICApLFxuICAgICAgICAgIChkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCA9ICEwKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0U25hcHNob3QgPSBnZXRTbmFwc2hvdCgpO1xuICAgICAgICBkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCB8fFxuICAgICAgICAgICgoZ2V0U2VydmVyU25hcHNob3QgPSBnZXRTbmFwc2hvdCgpKSxcbiAgICAgICAgICBvYmplY3RJcyhuZXh0U25hcHNob3QsIGdldFNlcnZlclNuYXBzaG90KSB8fFxuICAgICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiVGhlIHJlc3VsdCBvZiBnZXRTbmFwc2hvdCBzaG91bGQgYmUgY2FjaGVkIHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3BcIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChkaWRXYXJuVW5jYWNoZWRHZXRTbmFwc2hvdCA9ICEwKSkpO1xuICAgICAgICBpZiAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgICAwICE9PSAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiAxMjQpIHx8XG4gICAgICAgICAgcHVzaFN0b3JlQ29uc2lzdGVuY3lDaGVjayhmaWJlciwgZ2V0U25hcHNob3QsIG5leHRTbmFwc2hvdCk7XG4gICAgICB9XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXh0U25hcHNob3Q7XG4gICAgICBnZXRTZXJ2ZXJTbmFwc2hvdCA9IHsgdmFsdWU6IG5leHRTbmFwc2hvdCwgZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90IH07XG4gICAgICBob29rLnF1ZXVlID0gZ2V0U2VydmVyU25hcHNob3Q7XG4gICAgICBtb3VudEVmZmVjdChcbiAgICAgICAgc3Vic2NyaWJlVG9TdG9yZS5iaW5kKG51bGwsIGZpYmVyLCBnZXRTZXJ2ZXJTbmFwc2hvdCwgc3Vic2NyaWJlKSxcbiAgICAgICAgW3N1YnNjcmliZV1cbiAgICAgICk7XG4gICAgICBmaWJlci5mbGFncyB8PSAyMDQ4O1xuICAgICAgcHVzaFNpbXBsZUVmZmVjdChcbiAgICAgICAgSGFzRWZmZWN0IHwgUGFzc2l2ZSxcbiAgICAgICAgeyBkZXN0cm95OiB2b2lkIDAgfSxcbiAgICAgICAgdXBkYXRlU3RvcmVJbnN0YW5jZS5iaW5kKFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgZmliZXIsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3QsXG4gICAgICAgICAgbmV4dFNuYXBzaG90LFxuICAgICAgICAgIGdldFNuYXBzaG90XG4gICAgICAgICksXG4gICAgICAgIG51bGxcbiAgICAgICk7XG4gICAgICByZXR1cm4gbmV4dFNuYXBzaG90O1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICAgIHN1YnNjcmliZSxcbiAgICAgIGdldFNuYXBzaG90LFxuICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICApIHtcbiAgICAgIHZhciBmaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLFxuICAgICAgICBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCksXG4gICAgICAgIGlzSHlkcmF0aW5nJGpzY29tcCQwID0gaXNIeWRyYXRpbmc7XG4gICAgICBpZiAoaXNIeWRyYXRpbmckanNjb21wJDApIHtcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0gZ2V0U2VydmVyU25hcHNob3QpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIk1pc3NpbmcgZ2V0U2VydmVyU25hcHNob3QsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBzZXJ2ZXItcmVuZGVyZWQgY29udGVudC4gV2lsbCByZXZlcnQgdG8gY2xpZW50IHJlbmRlcmluZy5cIlxuICAgICAgICAgICk7XG4gICAgICAgIGdldFNlcnZlclNuYXBzaG90ID0gZ2V0U2VydmVyU25hcHNob3QoKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICgoZ2V0U2VydmVyU25hcHNob3QgPSBnZXRTbmFwc2hvdCgpKSwgIWRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90KVxuICAgICAgKSB7XG4gICAgICAgIHZhciBjYWNoZWRTbmFwc2hvdCA9IGdldFNuYXBzaG90KCk7XG4gICAgICAgIG9iamVjdElzKGdldFNlcnZlclNuYXBzaG90LCBjYWNoZWRTbmFwc2hvdCkgfHxcbiAgICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiVGhlIHJlc3VsdCBvZiBnZXRTbmFwc2hvdCBzaG91bGQgYmUgY2FjaGVkIHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3BcIlxuICAgICAgICAgICksXG4gICAgICAgICAgKGRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90ID0gITApKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgKGNhY2hlZFNuYXBzaG90ID0gIW9iamVjdElzKFxuICAgICAgICAgIChjdXJyZW50SG9vayB8fCBob29rKS5tZW1vaXplZFN0YXRlLFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICkpXG4gICAgICApXG4gICAgICAgIChob29rLm1lbW9pemVkU3RhdGUgPSBnZXRTZXJ2ZXJTbmFwc2hvdCksIChkaWRSZWNlaXZlVXBkYXRlID0gITApO1xuICAgICAgaG9vayA9IGhvb2sucXVldWU7XG4gICAgICB2YXIgY3JlYXRlID0gc3Vic2NyaWJlVG9TdG9yZS5iaW5kKG51bGwsIGZpYmVyLCBob29rLCBzdWJzY3JpYmUpO1xuICAgICAgdXBkYXRlRWZmZWN0SW1wbCgyMDQ4LCBQYXNzaXZlLCBjcmVhdGUsIFtzdWJzY3JpYmVdKTtcbiAgICAgIGlmIChcbiAgICAgICAgaG9vay5nZXRTbmFwc2hvdCAhPT0gZ2V0U25hcHNob3QgfHxcbiAgICAgICAgY2FjaGVkU25hcHNob3QgfHxcbiAgICAgICAgKG51bGwgIT09IHdvcmtJblByb2dyZXNzSG9vayAmJlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzSG9vay5tZW1vaXplZFN0YXRlLnRhZyAmIEhhc0VmZmVjdClcbiAgICAgICkge1xuICAgICAgICBmaWJlci5mbGFncyB8PSAyMDQ4O1xuICAgICAgICBwdXNoU2ltcGxlRWZmZWN0KFxuICAgICAgICAgIEhhc0VmZmVjdCB8IFBhc3NpdmUsXG4gICAgICAgICAgeyBkZXN0cm95OiB2b2lkIDAgfSxcbiAgICAgICAgICB1cGRhdGVTdG9yZUluc3RhbmNlLmJpbmQoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICBob29rLFxuICAgICAgICAgICAgZ2V0U2VydmVyU25hcHNob3QsXG4gICAgICAgICAgICBnZXRTbmFwc2hvdFxuICAgICAgICAgICksXG4gICAgICAgICAgbnVsbFxuICAgICAgICApO1xuICAgICAgICBpZiAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCBhIHdvcmstaW4tcHJvZ3Jlc3Mgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgICBpc0h5ZHJhdGluZyRqc2NvbXAkMCB8fFxuICAgICAgICAgIDAgIT09IChyZW5kZXJMYW5lcyAmIDEyNCkgfHxcbiAgICAgICAgICBwdXNoU3RvcmVDb25zaXN0ZW5jeUNoZWNrKGZpYmVyLCBnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldFNlcnZlclNuYXBzaG90O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoU3RvcmVDb25zaXN0ZW5jeUNoZWNrKGZpYmVyLCBnZXRTbmFwc2hvdCwgcmVuZGVyZWRTbmFwc2hvdCkge1xuICAgICAgZmliZXIuZmxhZ3MgfD0gMTYzODQ7XG4gICAgICBmaWJlciA9IHsgZ2V0U25hcHNob3Q6IGdldFNuYXBzaG90LCB2YWx1ZTogcmVuZGVyZWRTbmFwc2hvdCB9O1xuICAgICAgZ2V0U25hcHNob3QgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlci51cGRhdGVRdWV1ZTtcbiAgICAgIG51bGwgPT09IGdldFNuYXBzaG90XG4gICAgICAgID8gKChnZXRTbmFwc2hvdCA9IGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKSksXG4gICAgICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLnVwZGF0ZVF1ZXVlID0gZ2V0U25hcHNob3QpLFxuICAgICAgICAgIChnZXRTbmFwc2hvdC5zdG9yZXMgPSBbZmliZXJdKSlcbiAgICAgICAgOiAoKHJlbmRlcmVkU25hcHNob3QgPSBnZXRTbmFwc2hvdC5zdG9yZXMpLFxuICAgICAgICAgIG51bGwgPT09IHJlbmRlcmVkU25hcHNob3RcbiAgICAgICAgICAgID8gKGdldFNuYXBzaG90LnN0b3JlcyA9IFtmaWJlcl0pXG4gICAgICAgICAgICA6IHJlbmRlcmVkU25hcHNob3QucHVzaChmaWJlcikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVTdG9yZUluc3RhbmNlKGZpYmVyLCBpbnN0LCBuZXh0U25hcHNob3QsIGdldFNuYXBzaG90KSB7XG4gICAgICBpbnN0LnZhbHVlID0gbmV4dFNuYXBzaG90O1xuICAgICAgaW5zdC5nZXRTbmFwc2hvdCA9IGdldFNuYXBzaG90O1xuICAgICAgY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSAmJiBmb3JjZVN0b3JlUmVyZW5kZXIoZmliZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdWJzY3JpYmVUb1N0b3JlKGZpYmVyLCBpbnN0LCBzdWJzY3JpYmUpIHtcbiAgICAgIHJldHVybiBzdWJzY3JpYmUoZnVuY3Rpb24gKCkge1xuICAgICAgICBjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpICYmIGZvcmNlU3RvcmVSZXJlbmRlcihmaWJlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSB7XG4gICAgICB2YXIgbGF0ZXN0R2V0U25hcHNob3QgPSBpbnN0LmdldFNuYXBzaG90O1xuICAgICAgaW5zdCA9IGluc3QudmFsdWU7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbmV4dFZhbHVlID0gbGF0ZXN0R2V0U25hcHNob3QoKTtcbiAgICAgICAgcmV0dXJuICFvYmplY3RJcyhpbnN0LCBuZXh0VmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuICEwO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBmb3JjZVN0b3JlUmVyZW5kZXIoZmliZXIpIHtcbiAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKTtcbiAgICAgIG51bGwgIT09IHJvb3QgJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCAyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRTdGF0ZUltcGwoaW5pdGlhbFN0YXRlKSB7XG4gICAgICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5pdGlhbFN0YXRlKSB7XG4gICAgICAgIHZhciBpbml0aWFsU3RhdGVJbml0aWFsaXplciA9IGluaXRpYWxTdGF0ZTtcbiAgICAgICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlSW5pdGlhbGl6ZXIoKTtcbiAgICAgICAgaWYgKHNob3VsZERvdWJsZUludm9rZVVzZXJGbnNJbkhvb2tzREVWKSB7XG4gICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbml0aWFsU3RhdGVJbml0aWFsaXplcigpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgICAgIGhvb2sucXVldWUgPSB7XG4gICAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICAgIGxhbmVzOiAwLFxuICAgICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgICAgIH07XG4gICAgICByZXR1cm4gaG9vaztcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgICAgIGluaXRpYWxTdGF0ZSA9IG1vdW50U3RhdGVJbXBsKGluaXRpYWxTdGF0ZSk7XG4gICAgICB2YXIgcXVldWUgPSBpbml0aWFsU3RhdGUucXVldWUsXG4gICAgICAgIGRpc3BhdGNoID0gZGlzcGF0Y2hTZXRTdGF0ZS5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLCBxdWV1ZSk7XG4gICAgICBxdWV1ZS5kaXNwYXRjaCA9IGRpc3BhdGNoO1xuICAgICAgcmV0dXJuIFtpbml0aWFsU3RhdGUubWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudE9wdGltaXN0aWMocGFzc3Rocm91Z2gpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gcGFzc3Rocm91Z2g7XG4gICAgICB2YXIgcXVldWUgPSB7XG4gICAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICAgIGxhbmVzOiAwLFxuICAgICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogbnVsbCxcbiAgICAgICAgbGFzdFJlbmRlcmVkU3RhdGU6IG51bGxcbiAgICAgIH07XG4gICAgICBob29rLnF1ZXVlID0gcXVldWU7XG4gICAgICBob29rID0gZGlzcGF0Y2hPcHRpbWlzdGljU2V0U3RhdGUuYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIsXG4gICAgICAgICEwLFxuICAgICAgICBxdWV1ZVxuICAgICAgKTtcbiAgICAgIHF1ZXVlLmRpc3BhdGNoID0gaG9vaztcbiAgICAgIHJldHVybiBbcGFzc3Rocm91Z2gsIGhvb2tdO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU9wdGltaXN0aWNJbXBsKGhvb2ssIGN1cnJlbnRIb29rLCBwYXNzdGhyb3VnaCwgcmVkdWNlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZU9wdGltaXN0aWNJbXBsKGhvb2ssIGN1cnJlbnQsIHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IHBhc3N0aHJvdWdoO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXJJbXBsKFxuICAgICAgICBob29rLFxuICAgICAgICBjdXJyZW50SG9vayxcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVkdWNlciA/IHJlZHVjZXIgOiBiYXNpY1N0YXRlUmVkdWNlclxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVyZW5kZXJPcHRpbWlzdGljKHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnRIb29rKVxuICAgICAgICByZXR1cm4gdXBkYXRlT3B0aW1pc3RpY0ltcGwoaG9vaywgY3VycmVudEhvb2ssIHBhc3N0aHJvdWdoLCByZWR1Y2VyKTtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gcGFzc3Rocm91Z2g7XG4gICAgICByZXR1cm4gW3Bhc3N0aHJvdWdoLCBob29rLnF1ZXVlLmRpc3BhdGNoXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2hBY3Rpb25TdGF0ZShcbiAgICAgIGZpYmVyLFxuICAgICAgYWN0aW9uUXVldWUsXG4gICAgICBzZXRQZW5kaW5nU3RhdGUsXG4gICAgICBzZXRTdGF0ZSxcbiAgICAgIHBheWxvYWRcbiAgICApIHtcbiAgICAgIGlmIChpc1JlbmRlclBoYXNlVXBkYXRlKGZpYmVyKSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW5ub3QgdXBkYXRlIGZvcm0gc3RhdGUgd2hpbGUgcmVuZGVyaW5nLlwiKTtcbiAgICAgIGZpYmVyID0gYWN0aW9uUXVldWUuYWN0aW9uO1xuICAgICAgaWYgKG51bGwgIT09IGZpYmVyKSB7XG4gICAgICAgIHZhciBhY3Rpb25Ob2RlID0ge1xuICAgICAgICAgIHBheWxvYWQ6IHBheWxvYWQsXG4gICAgICAgICAgYWN0aW9uOiBmaWJlcixcbiAgICAgICAgICBuZXh0OiBudWxsLFxuICAgICAgICAgIGlzVHJhbnNpdGlvbjogITAsXG4gICAgICAgICAgc3RhdHVzOiBcInBlbmRpbmdcIixcbiAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICByZWFzb246IG51bGwsXG4gICAgICAgICAgbGlzdGVuZXJzOiBbXSxcbiAgICAgICAgICB0aGVuOiBmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGFjdGlvbk5vZGUubGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgbnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVFxuICAgICAgICAgID8gc2V0UGVuZGluZ1N0YXRlKCEwKVxuICAgICAgICAgIDogKGFjdGlvbk5vZGUuaXNUcmFuc2l0aW9uID0gITEpO1xuICAgICAgICBzZXRTdGF0ZShhY3Rpb25Ob2RlKTtcbiAgICAgICAgc2V0UGVuZGluZ1N0YXRlID0gYWN0aW9uUXVldWUucGVuZGluZztcbiAgICAgICAgbnVsbCA9PT0gc2V0UGVuZGluZ1N0YXRlXG4gICAgICAgICAgPyAoKGFjdGlvbk5vZGUubmV4dCA9IGFjdGlvblF1ZXVlLnBlbmRpbmcgPSBhY3Rpb25Ob2RlKSxcbiAgICAgICAgICAgIHJ1bkFjdGlvblN0YXRlQWN0aW9uKGFjdGlvblF1ZXVlLCBhY3Rpb25Ob2RlKSlcbiAgICAgICAgICA6ICgoYWN0aW9uTm9kZS5uZXh0ID0gc2V0UGVuZGluZ1N0YXRlLm5leHQpLFxuICAgICAgICAgICAgKGFjdGlvblF1ZXVlLnBlbmRpbmcgPSBzZXRQZW5kaW5nU3RhdGUubmV4dCA9IGFjdGlvbk5vZGUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcnVuQWN0aW9uU3RhdGVBY3Rpb24oYWN0aW9uUXVldWUsIG5vZGUpIHtcbiAgICAgIHZhciBhY3Rpb24gPSBub2RlLmFjdGlvbixcbiAgICAgICAgcGF5bG9hZCA9IG5vZGUucGF5bG9hZCxcbiAgICAgICAgcHJldlN0YXRlID0gYWN0aW9uUXVldWUuc3RhdGU7XG4gICAgICBpZiAobm9kZS5pc1RyYW5zaXRpb24pIHtcbiAgICAgICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCxcbiAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbiA9IHt9O1xuICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IGN1cnJlbnRUcmFuc2l0aW9uO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IGFjdGlvbihwcmV2U3RhdGUsIHBheWxvYWQpLFxuICAgICAgICAgICAgb25TdGFydFRyYW5zaXRpb25GaW5pc2ggPSBSZWFjdFNoYXJlZEludGVybmFscy5TO1xuICAgICAgICAgIG51bGwgIT09IG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoICYmXG4gICAgICAgICAgICBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaChjdXJyZW50VHJhbnNpdGlvbiwgcmV0dXJuVmFsdWUpO1xuICAgICAgICAgIGhhbmRsZUFjdGlvblJldHVyblZhbHVlKGFjdGlvblF1ZXVlLCBub2RlLCByZXR1cm5WYWx1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgb25BY3Rpb25FcnJvcihhY3Rpb25RdWV1ZSwgbm9kZSwgZXJyb3IpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIG51bGwgIT09IHByZXZUcmFuc2l0aW9uICYmXG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50VHJhbnNpdGlvbi50eXBlcyAmJlxuICAgICAgICAgICAgKG51bGwgIT09IHByZXZUcmFuc2l0aW9uLnR5cGVzICYmXG4gICAgICAgICAgICAgIHByZXZUcmFuc2l0aW9uLnR5cGVzICE9PSBjdXJyZW50VHJhbnNpdGlvbi50eXBlcyAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiV2UgZXhwZWN0ZWQgaW5uZXIgVHJhbnNpdGlvbnMgdG8gaGF2ZSB0cmFuc2ZlcnJlZCB0aGUgb3V0ZXIgdHlwZXMgc2V0IGFuZCB0aGF0IHlvdSBjYW5ub3QgYWRkIHRvIHRoZSBvdXRlciBUcmFuc2l0aW9uIHdoaWxlIGluc2lkZSB0aGUgaW5uZXIuVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKHByZXZUcmFuc2l0aW9uLnR5cGVzID0gY3VycmVudFRyYW5zaXRpb24udHlwZXMpKSxcbiAgICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5UID0gcHJldlRyYW5zaXRpb24pLFxuICAgICAgICAgICAgbnVsbCA9PT0gcHJldlRyYW5zaXRpb24gJiZcbiAgICAgICAgICAgICAgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMgJiZcbiAgICAgICAgICAgICAgKChhY3Rpb25RdWV1ZSA9IGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLnNpemUpLFxuICAgICAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5jbGVhcigpLFxuICAgICAgICAgICAgICAxMCA8IGFjdGlvblF1ZXVlICYmXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgXCJEZXRlY3RlZCBhIGxhcmdlIG51bWJlciBvZiB1cGRhdGVzIGluc2lkZSBzdGFydFRyYW5zaXRpb24uIElmIHRoaXMgaXMgZHVlIHRvIGEgc3Vic2NyaXB0aW9uIHBsZWFzZSByZS13cml0ZSBpdCB0byB1c2UgUmVhY3QgcHJvdmlkZWQgaG9va3MuIE90aGVyd2lzZSBjb25jdXJyZW50IG1vZGUgZ3VhcmFudGVlcyBhcmUgb2ZmIHRoZSB0YWJsZS5cIlxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2VcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAoY3VycmVudFRyYW5zaXRpb24gPSBhY3Rpb24ocHJldlN0YXRlLCBwYXlsb2FkKSksXG4gICAgICAgICAgICBoYW5kbGVBY3Rpb25SZXR1cm5WYWx1ZShhY3Rpb25RdWV1ZSwgbm9kZSwgY3VycmVudFRyYW5zaXRpb24pO1xuICAgICAgICB9IGNhdGNoIChlcnJvciQ0KSB7XG4gICAgICAgICAgb25BY3Rpb25FcnJvcihhY3Rpb25RdWV1ZSwgbm9kZSwgZXJyb3IkNCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlQWN0aW9uUmV0dXJuVmFsdWUoYWN0aW9uUXVldWUsIG5vZGUsIHJldHVyblZhbHVlKSB7XG4gICAgICBudWxsICE9PSByZXR1cm5WYWx1ZSAmJlxuICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHJldHVyblZhbHVlICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZS50aGVuXG4gICAgICAgID8gKFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFzeW5jVHJhbnNpdGlvbnMrKyxcbiAgICAgICAgICByZXR1cm5WYWx1ZS50aGVuKHJlbGVhc2VBc3luY1RyYW5zaXRpb24sIHJlbGVhc2VBc3luY1RyYW5zaXRpb24pLFxuICAgICAgICAgIHJldHVyblZhbHVlLnRoZW4oXG4gICAgICAgICAgICBmdW5jdGlvbiAobmV4dFN0YXRlKSB7XG4gICAgICAgICAgICAgIG9uQWN0aW9uU3VjY2VzcyhhY3Rpb25RdWV1ZSwgbm9kZSwgbmV4dFN0YXRlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9uQWN0aW9uRXJyb3IoYWN0aW9uUXVldWUsIG5vZGUsIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApLFxuICAgICAgICAgIG5vZGUuaXNUcmFuc2l0aW9uIHx8XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkFuIGFzeW5jIGZ1bmN0aW9uIHdpdGggdXNlQWN0aW9uU3RhdGUgd2FzIGNhbGxlZCBvdXRzaWRlIG9mIGEgdHJhbnNpdGlvbi4gVGhpcyBpcyBsaWtlbHkgbm90IHdoYXQgeW91IGludGVuZGVkIChmb3IgZXhhbXBsZSwgaXNQZW5kaW5nIHdpbGwgbm90IHVwZGF0ZSBjb3JyZWN0bHkpLiBFaXRoZXIgY2FsbCB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gaW5zaWRlIHN0YXJ0VHJhbnNpdGlvbiwgb3IgcGFzcyBpdCB0byBhbiBgYWN0aW9uYCBvciBgZm9ybUFjdGlvbmAgcHJvcC5cIlxuICAgICAgICAgICAgKSlcbiAgICAgICAgOiBvbkFjdGlvblN1Y2Nlc3MoYWN0aW9uUXVldWUsIG5vZGUsIHJldHVyblZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gb25BY3Rpb25TdWNjZXNzKGFjdGlvblF1ZXVlLCBhY3Rpb25Ob2RlLCBuZXh0U3RhdGUpIHtcbiAgICAgIGFjdGlvbk5vZGUuc3RhdHVzID0gXCJmdWxmaWxsZWRcIjtcbiAgICAgIGFjdGlvbk5vZGUudmFsdWUgPSBuZXh0U3RhdGU7XG4gICAgICBub3RpZnlBY3Rpb25MaXN0ZW5lcnMoYWN0aW9uTm9kZSk7XG4gICAgICBhY3Rpb25RdWV1ZS5zdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICAgIGFjdGlvbk5vZGUgPSBhY3Rpb25RdWV1ZS5wZW5kaW5nO1xuICAgICAgbnVsbCAhPT0gYWN0aW9uTm9kZSAmJlxuICAgICAgICAoKG5leHRTdGF0ZSA9IGFjdGlvbk5vZGUubmV4dCksXG4gICAgICAgIG5leHRTdGF0ZSA9PT0gYWN0aW9uTm9kZVxuICAgICAgICAgID8gKGFjdGlvblF1ZXVlLnBlbmRpbmcgPSBudWxsKVxuICAgICAgICAgIDogKChuZXh0U3RhdGUgPSBuZXh0U3RhdGUubmV4dCksXG4gICAgICAgICAgICAoYWN0aW9uTm9kZS5uZXh0ID0gbmV4dFN0YXRlKSxcbiAgICAgICAgICAgIHJ1bkFjdGlvblN0YXRlQWN0aW9uKGFjdGlvblF1ZXVlLCBuZXh0U3RhdGUpKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uRXJyb3IoYWN0aW9uUXVldWUsIGFjdGlvbk5vZGUsIGVycm9yKSB7XG4gICAgICB2YXIgbGFzdCA9IGFjdGlvblF1ZXVlLnBlbmRpbmc7XG4gICAgICBhY3Rpb25RdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgICAgIGlmIChudWxsICE9PSBsYXN0KSB7XG4gICAgICAgIGxhc3QgPSBsYXN0Lm5leHQ7XG4gICAgICAgIGRvXG4gICAgICAgICAgKGFjdGlvbk5vZGUuc3RhdHVzID0gXCJyZWplY3RlZFwiKSxcbiAgICAgICAgICAgIChhY3Rpb25Ob2RlLnJlYXNvbiA9IGVycm9yKSxcbiAgICAgICAgICAgIG5vdGlmeUFjdGlvbkxpc3RlbmVycyhhY3Rpb25Ob2RlKSxcbiAgICAgICAgICAgIChhY3Rpb25Ob2RlID0gYWN0aW9uTm9kZS5uZXh0KTtcbiAgICAgICAgd2hpbGUgKGFjdGlvbk5vZGUgIT09IGxhc3QpO1xuICAgICAgfVxuICAgICAgYWN0aW9uUXVldWUuYWN0aW9uID0gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm90aWZ5QWN0aW9uTGlzdGVuZXJzKGFjdGlvbk5vZGUpIHtcbiAgICAgIGFjdGlvbk5vZGUgPSBhY3Rpb25Ob2RlLmxpc3RlbmVycztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0aW9uTm9kZS5sZW5ndGg7IGkrKykgKDAsIGFjdGlvbk5vZGVbaV0pKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFjdGlvblN0YXRlUmVkdWNlcihvbGRTdGF0ZSwgbmV3U3RhdGUpIHtcbiAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRBY3Rpb25TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZVByb3ApIHtcbiAgICAgIGlmIChpc0h5ZHJhdGluZykge1xuICAgICAgICB2YXIgc3NyRm9ybVN0YXRlID0gd29ya0luUHJvZ3Jlc3NSb290LmZvcm1TdGF0ZTtcbiAgICAgICAgaWYgKG51bGwgIT09IHNzckZvcm1TdGF0ZSkge1xuICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgIHZhciBpc01hdGNoaW5nID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXI7XG4gICAgICAgICAgICBpZiAoaXNIeWRyYXRpbmcpIHtcbiAgICAgICAgICAgICAgaWYgKG5leHRIeWRyYXRhYmxlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICB2YXIgbWFya2VySW5zdGFuY2UgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluUm9vdE9yU2luZ2xldG9uID0gcm9vdE9yU2luZ2xldG9uQ29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgOCAhPT0gbWFya2VySW5zdGFuY2Uubm9kZVR5cGU7XG5cbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWluUm9vdE9yU2luZ2xldG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbWFya2VySW5zdGFuY2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWFya2VySW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShcbiAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJJbnN0YW5jZS5uZXh0U2libGluZ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gbWFya2VySW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJJbnN0YW5jZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaW5Sb290T3JTaW5nbGV0b24gPSBtYXJrZXJJbnN0YW5jZS5kYXRhO1xuICAgICAgICAgICAgICAgICAgbWFya2VySW5zdGFuY2UgPVxuICAgICAgICAgICAgICAgICAgICBpblJvb3RPclNpbmdsZXRvbiA9PT0gRk9STV9TVEFURV9JU19NQVRDSElORyB8fFxuICAgICAgICAgICAgICAgICAgICBpblJvb3RPclNpbmdsZXRvbiA9PT0gRk9STV9TVEFURV9JU19OT1RfTUFUQ0hJTkdcbiAgICAgICAgICAgICAgICAgICAgICA/IG1hcmtlckluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobWFya2VySW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShcbiAgICAgICAgICAgICAgICAgICAgbWFya2VySW5zdGFuY2UubmV4dFNpYmxpbmdcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpc01hdGNoaW5nID0gbWFya2VySW5zdGFuY2UuZGF0YSA9PT0gRk9STV9TVEFURV9JU19NQVRDSElORztcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRocm93T25IeWRyYXRpb25NaXNtYXRjaChpc01hdGNoaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlzTWF0Y2hpbmcgPSAhMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaXNNYXRjaGluZyAmJiAoaW5pdGlhbFN0YXRlUHJvcCA9IHNzckZvcm1TdGF0ZVswXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNzckZvcm1TdGF0ZSA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBzc3JGb3JtU3RhdGUubWVtb2l6ZWRTdGF0ZSA9IHNzckZvcm1TdGF0ZS5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGVQcm9wO1xuICAgICAgaXNNYXRjaGluZyA9IHtcbiAgICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgICAgbGFuZXM6IDAsXG4gICAgICAgIGRpc3BhdGNoOiBudWxsLFxuICAgICAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBhY3Rpb25TdGF0ZVJlZHVjZXIsXG4gICAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBpbml0aWFsU3RhdGVQcm9wXG4gICAgICB9O1xuICAgICAgc3NyRm9ybVN0YXRlLnF1ZXVlID0gaXNNYXRjaGluZztcbiAgICAgIHNzckZvcm1TdGF0ZSA9IGRpc3BhdGNoU2V0U3RhdGUuYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIsXG4gICAgICAgIGlzTWF0Y2hpbmdcbiAgICAgICk7XG4gICAgICBpc01hdGNoaW5nLmRpc3BhdGNoID0gc3NyRm9ybVN0YXRlO1xuICAgICAgaXNNYXRjaGluZyA9IG1vdW50U3RhdGVJbXBsKCExKTtcbiAgICAgIGluUm9vdE9yU2luZ2xldG9uID0gZGlzcGF0Y2hPcHRpbWlzdGljU2V0U3RhdGUuYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIsXG4gICAgICAgICExLFxuICAgICAgICBpc01hdGNoaW5nLnF1ZXVlXG4gICAgICApO1xuICAgICAgaXNNYXRjaGluZyA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBtYXJrZXJJbnN0YW5jZSA9IHtcbiAgICAgICAgc3RhdGU6IGluaXRpYWxTdGF0ZVByb3AsXG4gICAgICAgIGRpc3BhdGNoOiBudWxsLFxuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgcGVuZGluZzogbnVsbFxuICAgICAgfTtcbiAgICAgIGlzTWF0Y2hpbmcucXVldWUgPSBtYXJrZXJJbnN0YW5jZTtcbiAgICAgIHNzckZvcm1TdGF0ZSA9IGRpc3BhdGNoQWN0aW9uU3RhdGUuYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIsXG4gICAgICAgIG1hcmtlckluc3RhbmNlLFxuICAgICAgICBpblJvb3RPclNpbmdsZXRvbixcbiAgICAgICAgc3NyRm9ybVN0YXRlXG4gICAgICApO1xuICAgICAgbWFya2VySW5zdGFuY2UuZGlzcGF0Y2ggPSBzc3JGb3JtU3RhdGU7XG4gICAgICBpc01hdGNoaW5nLm1lbW9pemVkU3RhdGUgPSBhY3Rpb247XG4gICAgICByZXR1cm4gW2luaXRpYWxTdGF0ZVByb3AsIHNzckZvcm1TdGF0ZSwgITFdO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVBY3Rpb25TdGF0ZShhY3Rpb24pIHtcbiAgICAgIHZhciBzdGF0ZUhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHJldHVybiB1cGRhdGVBY3Rpb25TdGF0ZUltcGwoc3RhdGVIb29rLCBjdXJyZW50SG9vaywgYWN0aW9uKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlQWN0aW9uU3RhdGVJbXBsKHN0YXRlSG9vaywgY3VycmVudFN0YXRlSG9vaywgYWN0aW9uKSB7XG4gICAgICBjdXJyZW50U3RhdGVIb29rID0gdXBkYXRlUmVkdWNlckltcGwoXG4gICAgICAgIHN0YXRlSG9vayxcbiAgICAgICAgY3VycmVudFN0YXRlSG9vayxcbiAgICAgICAgYWN0aW9uU3RhdGVSZWR1Y2VyXG4gICAgICApWzBdO1xuICAgICAgc3RhdGVIb29rID0gdXBkYXRlUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcilbMF07XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBjdXJyZW50U3RhdGVIb29rICYmXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnRTdGF0ZUhvb2sgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY3VycmVudFN0YXRlSG9vay50aGVuXG4gICAgICApXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIHN0YXRlID0gdXNlVGhlbmFibGUoY3VycmVudFN0YXRlSG9vayk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBpZiAoeCA9PT0gU3VzcGVuc2VFeGNlcHRpb24pIHRocm93IFN1c3BlbnNlQWN0aW9uRXhjZXB0aW9uO1xuICAgICAgICAgIHRocm93IHg7XG4gICAgICAgIH1cbiAgICAgIGVsc2Ugc3RhdGUgPSBjdXJyZW50U3RhdGVIb29rO1xuICAgICAgY3VycmVudFN0YXRlSG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgdmFyIGFjdGlvblF1ZXVlID0gY3VycmVudFN0YXRlSG9vay5xdWV1ZSxcbiAgICAgICAgZGlzcGF0Y2ggPSBhY3Rpb25RdWV1ZS5kaXNwYXRjaDtcbiAgICAgIGFjdGlvbiAhPT0gY3VycmVudFN0YXRlSG9vay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICgoY3VycmVudGx5UmVuZGVyaW5nRmliZXIuZmxhZ3MgfD0gMjA0OCksXG4gICAgICAgIHB1c2hTaW1wbGVFZmZlY3QoXG4gICAgICAgICAgSGFzRWZmZWN0IHwgUGFzc2l2ZSxcbiAgICAgICAgICB7IGRlc3Ryb3k6IHZvaWQgMCB9LFxuICAgICAgICAgIGFjdGlvblN0YXRlQWN0aW9uRWZmZWN0LmJpbmQobnVsbCwgYWN0aW9uUXVldWUsIGFjdGlvbiksXG4gICAgICAgICAgbnVsbFxuICAgICAgICApKTtcbiAgICAgIHJldHVybiBbc3RhdGUsIGRpc3BhdGNoLCBzdGF0ZUhvb2tdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhY3Rpb25TdGF0ZUFjdGlvbkVmZmVjdChhY3Rpb25RdWV1ZSwgYWN0aW9uKSB7XG4gICAgICBhY3Rpb25RdWV1ZS5hY3Rpb24gPSBhY3Rpb247XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcmVuZGVyQWN0aW9uU3RhdGUoYWN0aW9uKSB7XG4gICAgICB2YXIgc3RhdGVIb29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCksXG4gICAgICAgIGN1cnJlbnRTdGF0ZUhvb2sgPSBjdXJyZW50SG9vaztcbiAgICAgIGlmIChudWxsICE9PSBjdXJyZW50U3RhdGVIb29rKVxuICAgICAgICByZXR1cm4gdXBkYXRlQWN0aW9uU3RhdGVJbXBsKHN0YXRlSG9vaywgY3VycmVudFN0YXRlSG9vaywgYWN0aW9uKTtcbiAgICAgIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgc3RhdGVIb29rID0gc3RhdGVIb29rLm1lbW9pemVkU3RhdGU7XG4gICAgICBjdXJyZW50U3RhdGVIb29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICB2YXIgZGlzcGF0Y2ggPSBjdXJyZW50U3RhdGVIb29rLnF1ZXVlLmRpc3BhdGNoO1xuICAgICAgY3VycmVudFN0YXRlSG9vay5tZW1vaXplZFN0YXRlID0gYWN0aW9uO1xuICAgICAgcmV0dXJuIFtzdGF0ZUhvb2ssIGRpc3BhdGNoLCAhMV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHB1c2hTaW1wbGVFZmZlY3QodGFnLCBpbnN0LCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHRhZyA9IHsgdGFnOiB0YWcsIGNyZWF0ZTogY3JlYXRlLCBkZXBzOiBkZXBzLCBpbnN0OiBpbnN0LCBuZXh0OiBudWxsIH07XG4gICAgICBpbnN0ID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIudXBkYXRlUXVldWU7XG4gICAgICBudWxsID09PSBpbnN0ICYmXG4gICAgICAgICgoaW5zdCA9IGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKSksXG4gICAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci51cGRhdGVRdWV1ZSA9IGluc3QpKTtcbiAgICAgIGNyZWF0ZSA9IGluc3QubGFzdEVmZmVjdDtcbiAgICAgIG51bGwgPT09IGNyZWF0ZVxuICAgICAgICA/IChpbnN0Lmxhc3RFZmZlY3QgPSB0YWcubmV4dCA9IHRhZylcbiAgICAgICAgOiAoKGRlcHMgPSBjcmVhdGUubmV4dCksXG4gICAgICAgICAgKGNyZWF0ZS5uZXh0ID0gdGFnKSxcbiAgICAgICAgICAodGFnLm5leHQgPSBkZXBzKSxcbiAgICAgICAgICAoaW5zdC5sYXN0RWZmZWN0ID0gdGFnKSk7XG4gICAgICByZXR1cm4gdGFnO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudFJlZihpbml0aWFsVmFsdWUpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGluaXRpYWxWYWx1ZSA9IHsgY3VycmVudDogaW5pdGlhbFZhbHVlIH07XG4gICAgICByZXR1cm4gKGhvb2subWVtb2l6ZWRTdGF0ZSA9IGluaXRpYWxWYWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50RWZmZWN0SW1wbChmaWJlckZsYWdzLCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIuZmxhZ3MgfD0gZmliZXJGbGFncztcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hTaW1wbGVFZmZlY3QoXG4gICAgICAgIEhhc0VmZmVjdCB8IGhvb2tGbGFncyxcbiAgICAgICAgeyBkZXN0cm95OiB2b2lkIDAgfSxcbiAgICAgICAgY3JlYXRlLFxuICAgICAgICB2b2lkIDAgPT09IGRlcHMgPyBudWxsIDogZGVwc1xuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlRWZmZWN0SW1wbChmaWJlckZsYWdzLCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIGRlcHMgPSB2b2lkIDAgPT09IGRlcHMgPyBudWxsIDogZGVwcztcbiAgICAgIHZhciBpbnN0ID0gaG9vay5tZW1vaXplZFN0YXRlLmluc3Q7XG4gICAgICBudWxsICE9PSBjdXJyZW50SG9vayAmJlxuICAgICAgbnVsbCAhPT0gZGVwcyAmJlxuICAgICAgYXJlSG9va0lucHV0c0VxdWFsKGRlcHMsIGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUuZGVwcylcbiAgICAgICAgPyAoaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaFNpbXBsZUVmZmVjdChob29rRmxhZ3MsIGluc3QsIGNyZWF0ZSwgZGVwcykpXG4gICAgICAgIDogKChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5mbGFncyB8PSBmaWJlckZsYWdzKSxcbiAgICAgICAgICAoaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaFNpbXBsZUVmZmVjdChcbiAgICAgICAgICAgIEhhc0VmZmVjdCB8IGhvb2tGbGFncyxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjcmVhdGUsXG4gICAgICAgICAgICBkZXBzXG4gICAgICAgICAgKSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIChjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGVcbiAgICAgICAgPyBtb3VudEVmZmVjdEltcGwoMjc2ODI2MTEyLCBQYXNzaXZlLCBjcmVhdGUsIGRlcHMpXG4gICAgICAgIDogbW91bnRFZmZlY3RJbXBsKDgzOTA2NTYsIFBhc3NpdmUsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICAgICAgdmFyIGZpYmVyRmxhZ3MgPSA0MTk0MzA4O1xuICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAoZmliZXJGbGFncyB8PSAxMzQyMTc3MjgpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChmaWJlckZsYWdzLCBMYXlvdXQsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QoY3JlYXRlLCByZWYpIHtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZWYpIHtcbiAgICAgICAgY3JlYXRlID0gY3JlYXRlKCk7XG4gICAgICAgIHZhciByZWZDbGVhbnVwID0gcmVmKGNyZWF0ZSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVmQ2xlYW51cCA/IHJlZkNsZWFudXAoKSA6IHJlZihudWxsKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChudWxsICE9PSByZWYgJiYgdm9pZCAwICE9PSByZWYpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgcmVmLmhhc093blByb3BlcnR5KFwiY3VycmVudFwiKSB8fFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgZmlyc3QgYXJndW1lbnQgdG8gZWl0aGVyIGJlIGEgcmVmIGNhbGxiYWNrIG9yIFJlYWN0LmNyZWF0ZVJlZigpIG9iamVjdC4gSW5zdGVhZCByZWNlaXZlZDogJXMuXCIsXG4gICAgICAgICAgICAgIFwiYW4gb2JqZWN0IHdpdGgga2V5cyB7XCIgKyBPYmplY3Qua2V5cyhyZWYpLmpvaW4oXCIsIFwiKSArIFwifVwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgIChjcmVhdGUgPSBjcmVhdGUoKSksXG4gICAgICAgICAgKHJlZi5jdXJyZW50ID0gY3JlYXRlKSxcbiAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNyZWF0ZSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuXCIsXG4gICAgICAgICAgbnVsbCAhPT0gY3JlYXRlID8gdHlwZW9mIGNyZWF0ZSA6IFwibnVsbFwiXG4gICAgICAgICk7XG4gICAgICBkZXBzID0gbnVsbCAhPT0gZGVwcyAmJiB2b2lkIDAgIT09IGRlcHMgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICAgICAgdmFyIGZpYmVyRmxhZ3MgPSA0MTk0MzA4O1xuICAgICAgKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAoZmliZXJGbGFncyB8PSAxMzQyMTc3MjgpO1xuICAgICAgbW91bnRFZmZlY3RJbXBsKFxuICAgICAgICBmaWJlckZsYWdzLFxuICAgICAgICBMYXlvdXQsXG4gICAgICAgIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QuYmluZChudWxsLCBjcmVhdGUsIHJlZiksXG4gICAgICAgIGRlcHNcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNyZWF0ZSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuXCIsXG4gICAgICAgICAgbnVsbCAhPT0gY3JlYXRlID8gdHlwZW9mIGNyZWF0ZSA6IFwibnVsbFwiXG4gICAgICAgICk7XG4gICAgICBkZXBzID0gbnVsbCAhPT0gZGVwcyAmJiB2b2lkIDAgIT09IGRlcHMgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICAgICAgdXBkYXRlRWZmZWN0SW1wbChcbiAgICAgICAgNCxcbiAgICAgICAgTGF5b3V0LFxuICAgICAgICBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLFxuICAgICAgICBkZXBzXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGUgPSBbXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICB2b2lkIDAgPT09IGRlcHMgPyBudWxsIDogZGVwc1xuICAgICAgXTtcbiAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBkZXBzID0gdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHM7XG4gICAgICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICAgICAgaWYgKG51bGwgIT09IGRlcHMgJiYgYXJlSG9va0lucHV0c0VxdWFsKGRlcHMsIHByZXZTdGF0ZVsxXSkpXG4gICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBbY2FsbGJhY2ssIGRlcHNdO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudE1lbW8obmV4dENyZWF0ZSwgZGVwcykge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgZGVwcyA9IHZvaWQgMCA9PT0gZGVwcyA/IG51bGwgOiBkZXBzO1xuICAgICAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcbiAgICAgIGlmIChzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFVikge1xuICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbmV4dENyZWF0ZSgpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgZGVwc107XG4gICAgICByZXR1cm4gbmV4dFZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVNZW1vKG5leHRDcmVhdGUsIGRlcHMpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICBkZXBzID0gdm9pZCAwID09PSBkZXBzID8gbnVsbCA6IGRlcHM7XG4gICAgICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICAgICAgaWYgKG51bGwgIT09IGRlcHMgJiYgYXJlSG9va0lucHV0c0VxdWFsKGRlcHMsIHByZXZTdGF0ZVsxXSkpXG4gICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICBwcmV2U3RhdGUgPSBuZXh0Q3JlYXRlKCk7XG4gICAgICBpZiAoc2hvdWxkRG91YmxlSW52b2tlVXNlckZuc0luSG9va3NERVYpIHtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG5leHRDcmVhdGUoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtwcmV2U3RhdGUsIGRlcHNdO1xuICAgICAgcmV0dXJuIHByZXZTdGF0ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWVJbXBsKGhvb2ssIHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZUltcGwoXG4gICAgICAgIGhvb2ssXG4gICAgICAgIGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBpbml0aWFsVmFsdWVcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICAgICAgcmV0dXJuIG51bGwgPT09IGN1cnJlbnRIb29rXG4gICAgICAgID8gbW91bnREZWZlcnJlZFZhbHVlSW1wbChob29rLCB2YWx1ZSwgaW5pdGlhbFZhbHVlKVxuICAgICAgICA6IHVwZGF0ZURlZmVycmVkVmFsdWVJbXBsKFxuICAgICAgICAgICAgaG9vayxcbiAgICAgICAgICAgIGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZVxuICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50RGVmZXJyZWRWYWx1ZUltcGwoaG9vaywgdmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgaWYgKHZvaWQgMCA9PT0gaW5pdGlhbFZhbHVlIHx8IDAgIT09IChyZW5kZXJMYW5lcyAmIDEwNzM3NDE4MjQpKVxuICAgICAgICByZXR1cm4gKGhvb2subWVtb2l6ZWRTdGF0ZSA9IHZhbHVlKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICAgIGhvb2sgPSByZXF1ZXN0RGVmZXJyZWRMYW5lKCk7XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5sYW5lcyB8PSBob29rO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzIHw9IGhvb2s7XG4gICAgICByZXR1cm4gaW5pdGlhbFZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVEZWZlcnJlZFZhbHVlSW1wbChob29rLCBwcmV2VmFsdWUsIHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIGlmIChvYmplY3RJcyh2YWx1ZSwgcHJldlZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnRUcmVlSGlkZGVuU3RhY2tDdXJzb3IuY3VycmVudClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoaG9vayA9IG1vdW50RGVmZXJyZWRWYWx1ZUltcGwoaG9vaywgdmFsdWUsIGluaXRpYWxWYWx1ZSkpLFxuICAgICAgICAgIG9iamVjdElzKGhvb2ssIHByZXZWYWx1ZSkgfHwgKGRpZFJlY2VpdmVVcGRhdGUgPSAhMCksXG4gICAgICAgICAgaG9va1xuICAgICAgICApO1xuICAgICAgaWYgKDAgPT09IChyZW5kZXJMYW5lcyAmIDQyKSB8fCAwICE9PSAocmVuZGVyTGFuZXMgJiAxMDczNzQxODI0KSlcbiAgICAgICAgcmV0dXJuIChkaWRSZWNlaXZlVXBkYXRlID0gITApLCAoaG9vay5tZW1vaXplZFN0YXRlID0gdmFsdWUpO1xuICAgICAgaG9vayA9IHJlcXVlc3REZWZlcnJlZExhbmUoKTtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmxhbmVzIHw9IGhvb2s7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgfD0gaG9vaztcbiAgICAgIHJldHVybiBwcmV2VmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGVhc2VBc3luY1RyYW5zaXRpb24oKSB7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5hc3luY1RyYW5zaXRpb25zLS07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihcbiAgICAgIGZpYmVyLFxuICAgICAgcXVldWUsXG4gICAgICBwZW5kaW5nU3RhdGUsXG4gICAgICBmaW5pc2hlZFN0YXRlLFxuICAgICAgY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIHZhciBwcmV2aW91c1ByaW9yaXR5ID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucDtcbiAgICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPVxuICAgICAgICAwICE9PSBwcmV2aW91c1ByaW9yaXR5ICYmIHByZXZpb3VzUHJpb3JpdHkgPCBDb250aW51b3VzRXZlbnRQcmlvcml0eVxuICAgICAgICAgID8gcHJldmlvdXNQcmlvcml0eVxuICAgICAgICAgIDogQ29udGludW91c0V2ZW50UHJpb3JpdHk7XG4gICAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdFNoYXJlZEludGVybmFscy5ULFxuICAgICAgICBjdXJyZW50VHJhbnNpdGlvbiA9IHt9O1xuICAgICAgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMgPSBuZXcgU2V0KCk7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gY3VycmVudFRyYW5zaXRpb247XG4gICAgICBkaXNwYXRjaE9wdGltaXN0aWNTZXRTdGF0ZShmaWJlciwgITEsIHF1ZXVlLCBwZW5kaW5nU3RhdGUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJldHVyblZhbHVlID0gY2FsbGJhY2soKSxcbiAgICAgICAgICBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlM7XG4gICAgICAgIG51bGwgIT09IG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoICYmXG4gICAgICAgICAgb25TdGFydFRyYW5zaXRpb25GaW5pc2goY3VycmVudFRyYW5zaXRpb24sIHJldHVyblZhbHVlKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG51bGwgIT09IHJldHVyblZhbHVlICYmXG4gICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHJldHVyblZhbHVlICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmV0dXJuVmFsdWUudGhlblxuICAgICAgICApIHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5hc3luY1RyYW5zaXRpb25zKys7XG4gICAgICAgICAgcmV0dXJuVmFsdWUudGhlbihyZWxlYXNlQXN5bmNUcmFuc2l0aW9uLCByZWxlYXNlQXN5bmNUcmFuc2l0aW9uKTtcbiAgICAgICAgICB2YXIgdGhlbmFibGVGb3JGaW5pc2hlZFN0YXRlID0gY2hhaW5UaGVuYWJsZVZhbHVlKFxuICAgICAgICAgICAgcmV0dXJuVmFsdWUsXG4gICAgICAgICAgICBmaW5pc2hlZFN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkaXNwYXRjaFNldFN0YXRlSW50ZXJuYWwoXG4gICAgICAgICAgICBmaWJlcixcbiAgICAgICAgICAgIHF1ZXVlLFxuICAgICAgICAgICAgdGhlbmFibGVGb3JGaW5pc2hlZFN0YXRlLFxuICAgICAgICAgICAgcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgZGlzcGF0Y2hTZXRTdGF0ZUludGVybmFsKFxuICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICBxdWV1ZSxcbiAgICAgICAgICAgIGZpbmlzaGVkU3RhdGUsXG4gICAgICAgICAgICByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcilcbiAgICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZGlzcGF0Y2hTZXRTdGF0ZUludGVybmFsKFxuICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgIHF1ZXVlLFxuICAgICAgICAgIHsgdGhlbjogZnVuY3Rpb24gKCkge30sIHN0YXR1czogXCJyZWplY3RlZFwiLCByZWFzb246IGVycm9yIH0sXG4gICAgICAgICAgcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpXG4gICAgICAgICk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHByZXZpb3VzUHJpb3JpdHkpLFxuICAgICAgICAgIG51bGwgIT09IHByZXZUcmFuc2l0aW9uICYmXG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50VHJhbnNpdGlvbi50eXBlcyAmJlxuICAgICAgICAgICAgKG51bGwgIT09IHByZXZUcmFuc2l0aW9uLnR5cGVzICYmXG4gICAgICAgICAgICAgIHByZXZUcmFuc2l0aW9uLnR5cGVzICE9PSBjdXJyZW50VHJhbnNpdGlvbi50eXBlcyAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiV2UgZXhwZWN0ZWQgaW5uZXIgVHJhbnNpdGlvbnMgdG8gaGF2ZSB0cmFuc2ZlcnJlZCB0aGUgb3V0ZXIgdHlwZXMgc2V0IGFuZCB0aGF0IHlvdSBjYW5ub3QgYWRkIHRvIHRoZSBvdXRlciBUcmFuc2l0aW9uIHdoaWxlIGluc2lkZSB0aGUgaW5uZXIuVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKHByZXZUcmFuc2l0aW9uLnR5cGVzID0gY3VycmVudFRyYW5zaXRpb24udHlwZXMpKSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IHByZXZUcmFuc2l0aW9uKSxcbiAgICAgICAgICBudWxsID09PSBwcmV2VHJhbnNpdGlvbiAmJlxuICAgICAgICAgICAgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMgJiZcbiAgICAgICAgICAgICgoZmliZXIgPSBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5zaXplKSxcbiAgICAgICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLmNsZWFyKCksXG4gICAgICAgICAgICAxMCA8IGZpYmVyICYmXG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICBcIkRldGVjdGVkIGEgbGFyZ2UgbnVtYmVyIG9mIHVwZGF0ZXMgaW5zaWRlIHN0YXJ0VHJhbnNpdGlvbi4gSWYgdGhpcyBpcyBkdWUgdG8gYSBzdWJzY3JpcHRpb24gcGxlYXNlIHJlLXdyaXRlIGl0IHRvIHVzZSBSZWFjdCBwcm92aWRlZCBob29rcy4gT3RoZXJ3aXNlIGNvbmN1cnJlbnQgbW9kZSBndWFyYW50ZWVzIGFyZSBvZmYgdGhlIHRhYmxlLlwiXG4gICAgICAgICAgICAgICkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzdGFydEhvc3RUcmFuc2l0aW9uKGZvcm1GaWJlciwgcGVuZGluZ1N0YXRlLCBhY3Rpb24sIGZvcm1EYXRhKSB7XG4gICAgICBpZiAoNSAhPT0gZm9ybUZpYmVyLnRhZylcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJFeHBlY3RlZCB0aGUgZm9ybSBpbnN0YW5jZSB0byBiZSBhIEhvc3RDb21wb25lbnQuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgKTtcbiAgICAgIHZhciBxdWV1ZSA9IGVuc3VyZUZvcm1Db21wb25lbnRJc1N0YXRlZnVsKGZvcm1GaWJlcikucXVldWU7XG4gICAgICBzdGFydFRyYW5zaXRpb24oXG4gICAgICAgIGZvcm1GaWJlcixcbiAgICAgICAgcXVldWUsXG4gICAgICAgIHBlbmRpbmdTdGF0ZSxcbiAgICAgICAgTm90UGVuZGluZ1RyYW5zaXRpb24sXG4gICAgICAgIG51bGwgPT09IGFjdGlvblxuICAgICAgICAgID8gbm9vcFxuICAgICAgICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXF1ZXN0Rm9ybVJlc2V0JDEoZm9ybUZpYmVyKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbihmb3JtRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnN1cmVGb3JtQ29tcG9uZW50SXNTdGF0ZWZ1bChmb3JtRmliZXIpIHtcbiAgICAgIHZhciBleGlzdGluZ1N0YXRlSG9vayA9IGZvcm1GaWJlci5tZW1vaXplZFN0YXRlO1xuICAgICAgaWYgKG51bGwgIT09IGV4aXN0aW5nU3RhdGVIb29rKSByZXR1cm4gZXhpc3RpbmdTdGF0ZUhvb2s7XG4gICAgICBleGlzdGluZ1N0YXRlSG9vayA9IHtcbiAgICAgICAgbWVtb2l6ZWRTdGF0ZTogTm90UGVuZGluZ1RyYW5zaXRpb24sXG4gICAgICAgIGJhc2VTdGF0ZTogTm90UGVuZGluZ1RyYW5zaXRpb24sXG4gICAgICAgIGJhc2VRdWV1ZTogbnVsbCxcbiAgICAgICAgcXVldWU6IHtcbiAgICAgICAgICBwZW5kaW5nOiBudWxsLFxuICAgICAgICAgIGxhbmVzOiAwLFxuICAgICAgICAgIGRpc3BhdGNoOiBudWxsLFxuICAgICAgICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgICAgICAgIGxhc3RSZW5kZXJlZFN0YXRlOiBOb3RQZW5kaW5nVHJhbnNpdGlvblxuICAgICAgICB9LFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgICB9O1xuICAgICAgdmFyIGluaXRpYWxSZXNldFN0YXRlID0ge307XG4gICAgICBleGlzdGluZ1N0YXRlSG9vay5uZXh0ID0ge1xuICAgICAgICBtZW1vaXplZFN0YXRlOiBpbml0aWFsUmVzZXRTdGF0ZSxcbiAgICAgICAgYmFzZVN0YXRlOiBpbml0aWFsUmVzZXRTdGF0ZSxcbiAgICAgICAgYmFzZVF1ZXVlOiBudWxsLFxuICAgICAgICBxdWV1ZToge1xuICAgICAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICAgICAgbGFuZXM6IDAsXG4gICAgICAgICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgICAgICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxSZXNldFN0YXRlXG4gICAgICAgIH0sXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgICBmb3JtRmliZXIubWVtb2l6ZWRTdGF0ZSA9IGV4aXN0aW5nU3RhdGVIb29rO1xuICAgICAgZm9ybUZpYmVyID0gZm9ybUZpYmVyLmFsdGVybmF0ZTtcbiAgICAgIG51bGwgIT09IGZvcm1GaWJlciAmJiAoZm9ybUZpYmVyLm1lbW9pemVkU3RhdGUgPSBleGlzdGluZ1N0YXRlSG9vayk7XG4gICAgICByZXR1cm4gZXhpc3RpbmdTdGF0ZUhvb2s7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcXVlc3RGb3JtUmVzZXQkMShmb3JtRmliZXIpIHtcbiAgICAgIG51bGwgPT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcInJlcXVlc3RGb3JtUmVzZXQgd2FzIGNhbGxlZCBvdXRzaWRlIGEgdHJhbnNpdGlvbiBvciBhY3Rpb24uIFRvIGZpeCwgbW92ZSB0byBhbiBhY3Rpb24sIG9yIHdyYXAgd2l0aCBzdGFydFRyYW5zaXRpb24uXCJcbiAgICAgICAgKTtcbiAgICAgIHZhciBzdGF0ZUhvb2sgPSBlbnN1cmVGb3JtQ29tcG9uZW50SXNTdGF0ZWZ1bChmb3JtRmliZXIpO1xuICAgICAgbnVsbCA9PT0gc3RhdGVIb29rLm5leHQgJiZcbiAgICAgICAgKHN0YXRlSG9vayA9IGZvcm1GaWJlci5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZSk7XG4gICAgICBkaXNwYXRjaFNldFN0YXRlSW50ZXJuYWwoXG4gICAgICAgIGZvcm1GaWJlcixcbiAgICAgICAgc3RhdGVIb29rLm5leHQucXVldWUsXG4gICAgICAgIHt9LFxuICAgICAgICByZXF1ZXN0VXBkYXRlTGFuZShmb3JtRmliZXIpXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudFRyYW5zaXRpb24oKSB7XG4gICAgICB2YXIgc3RhdGVIb29rID0gbW91bnRTdGF0ZUltcGwoITEpO1xuICAgICAgc3RhdGVIb29rID0gc3RhcnRUcmFuc2l0aW9uLmJpbmQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLFxuICAgICAgICBzdGF0ZUhvb2sucXVldWUsXG4gICAgICAgICEwLFxuICAgICAgICAhMVxuICAgICAgKTtcbiAgICAgIG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZSA9IHN0YXRlSG9vaztcbiAgICAgIHJldHVybiBbITEsIHN0YXRlSG9va107XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZVRyYW5zaXRpb24oKSB7XG4gICAgICB2YXIgYm9vbGVhbk9yVGhlbmFibGUgPSB1cGRhdGVSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKVswXSxcbiAgICAgICAgc3RhcnQgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJib29sZWFuXCIgPT09IHR5cGVvZiBib29sZWFuT3JUaGVuYWJsZVxuICAgICAgICAgID8gYm9vbGVhbk9yVGhlbmFibGVcbiAgICAgICAgICA6IHVzZVRoZW5hYmxlKGJvb2xlYW5PclRoZW5hYmxlKSxcbiAgICAgICAgc3RhcnRcbiAgICAgIF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcmVuZGVyVHJhbnNpdGlvbigpIHtcbiAgICAgIHZhciBib29sZWFuT3JUaGVuYWJsZSA9IHJlcmVuZGVyUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcilbMF0sXG4gICAgICAgIHN0YXJ0ID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFwiYm9vbGVhblwiID09PSB0eXBlb2YgYm9vbGVhbk9yVGhlbmFibGVcbiAgICAgICAgICA/IGJvb2xlYW5PclRoZW5hYmxlXG4gICAgICAgICAgOiB1c2VUaGVuYWJsZShib29sZWFuT3JUaGVuYWJsZSksXG4gICAgICAgIHN0YXJ0XG4gICAgICBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1c2VIb3N0VHJhbnNpdGlvblN0YXR1cygpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChIb3N0VHJhbnNpdGlvbkNvbnRleHQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudElkKCkge1xuICAgICAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpLFxuICAgICAgICBpZGVudGlmaWVyUHJlZml4ID0gd29ya0luUHJvZ3Jlc3NSb290LmlkZW50aWZpZXJQcmVmaXg7XG4gICAgICBpZiAoaXNIeWRyYXRpbmcpIHtcbiAgICAgICAgdmFyIHRyZWVJZCA9IHRyZWVDb250ZXh0T3ZlcmZsb3c7XG4gICAgICAgIHZhciBpZFdpdGhMZWFkaW5nQml0ID0gdHJlZUNvbnRleHRJZDtcbiAgICAgICAgdHJlZUlkID1cbiAgICAgICAgICAoXG4gICAgICAgICAgICBpZFdpdGhMZWFkaW5nQml0ICYgfigxIDw8ICgzMiAtIGNsejMyKGlkV2l0aExlYWRpbmdCaXQpIC0gMSkpXG4gICAgICAgICAgKS50b1N0cmluZygzMikgKyB0cmVlSWQ7XG4gICAgICAgIGlkZW50aWZpZXJQcmVmaXggPSBcIl9cIiArIGlkZW50aWZpZXJQcmVmaXggKyBcIlJfXCIgKyB0cmVlSWQ7XG4gICAgICAgIHRyZWVJZCA9IGxvY2FsSWRDb3VudGVyKys7XG4gICAgICAgIDAgPCB0cmVlSWQgJiYgKGlkZW50aWZpZXJQcmVmaXggKz0gXCJIXCIgKyB0cmVlSWQudG9TdHJpbmcoMzIpKTtcbiAgICAgICAgaWRlbnRpZmllclByZWZpeCArPSBcIl9cIjtcbiAgICAgIH0gZWxzZVxuICAgICAgICAodHJlZUlkID0gZ2xvYmFsQ2xpZW50SWRDb3VudGVyKyspLFxuICAgICAgICAgIChpZGVudGlmaWVyUHJlZml4ID1cbiAgICAgICAgICAgIFwiX1wiICsgaWRlbnRpZmllclByZWZpeCArIFwicl9cIiArIHRyZWVJZC50b1N0cmluZygzMikgKyBcIl9cIik7XG4gICAgICByZXR1cm4gKGhvb2subWVtb2l6ZWRTdGF0ZSA9IGlkZW50aWZpZXJQcmVmaXgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudFJlZnJlc2goKSB7XG4gICAgICByZXR1cm4gKG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZSA9IHJlZnJlc2hDYWNoZS5iaW5kKFxuICAgICAgICBudWxsLFxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlclxuICAgICAgKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZnJlc2hDYWNoZShmaWJlciwgc2VlZEtleSkge1xuICAgICAgZm9yICh2YXIgcHJvdmlkZXIgPSBmaWJlci5yZXR1cm47IG51bGwgIT09IHByb3ZpZGVyOyApIHtcbiAgICAgICAgc3dpdGNoIChwcm92aWRlci50YWcpIHtcbiAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUocHJvdmlkZXIpO1xuICAgICAgICAgICAgZmliZXIgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgICAgICAgICB2YXIgcm9vdCA9IGVucXVldWVVcGRhdGUocHJvdmlkZXIsIGZpYmVyLCBsYW5lKTtcbiAgICAgICAgICAgIG51bGwgIT09IHJvb3QgJiZcbiAgICAgICAgICAgICAgKHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBwcm92aWRlciwgbGFuZSksXG4gICAgICAgICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMocm9vdCwgcHJvdmlkZXIsIGxhbmUpKTtcbiAgICAgICAgICAgIHByb3ZpZGVyID0gY3JlYXRlQ2FjaGUoKTtcbiAgICAgICAgICAgIG51bGwgIT09IHNlZWRLZXkgJiZcbiAgICAgICAgICAgICAgdm9pZCAwICE9PSBzZWVkS2V5ICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IHJvb3QgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSBzZWVkIGFyZ3VtZW50IGlzIG5vdCBlbmFibGVkIG91dHNpZGUgZXhwZXJpbWVudGFsIGNoYW5uZWxzLlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmaWJlci5wYXlsb2FkID0geyBjYWNoZTogcHJvdmlkZXIgfTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwcm92aWRlciA9IHByb3ZpZGVyLnJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzcGF0Y2hSZWR1Y2VyQWN0aW9uKGZpYmVyLCBxdWV1ZSwgYWN0aW9uKSB7XG4gICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGFyZ3NbM10gJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlN0YXRlIHVwZGF0ZXMgZnJvbSB0aGUgdXNlU3RhdGUoKSBhbmQgdXNlUmVkdWNlcigpIEhvb2tzIGRvbid0IHN1cHBvcnQgdGhlIHNlY29uZCBjYWxsYmFjayBhcmd1bWVudC4gVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyIHJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiB0aGUgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS5cIlxuICAgICAgICApO1xuICAgICAgYXJncyA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICAgIHZhciB1cGRhdGUgPSB7XG4gICAgICAgIGxhbmU6IGFyZ3MsXG4gICAgICAgIHJldmVydExhbmU6IDAsXG4gICAgICAgIGdlc3R1cmU6IG51bGwsXG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICBoYXNFYWdlclN0YXRlOiAhMSxcbiAgICAgICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICAgICAgbmV4dDogbnVsbFxuICAgICAgfTtcbiAgICAgIGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpXG4gICAgICAgID8gZW5xdWV1ZVJlbmRlclBoYXNlVXBkYXRlKHF1ZXVlLCB1cGRhdGUpXG4gICAgICAgIDogKCh1cGRhdGUgPSBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGUoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGFyZ3MpKSxcbiAgICAgICAgICBudWxsICE9PSB1cGRhdGUgJiZcbiAgICAgICAgICAgIChzY2hlZHVsZVVwZGF0ZU9uRmliZXIodXBkYXRlLCBmaWJlciwgYXJncyksXG4gICAgICAgICAgICBlbnRhbmdsZVRyYW5zaXRpb25VcGRhdGUodXBkYXRlLCBxdWV1ZSwgYXJncykpKTtcbiAgICAgIG1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgYXJncyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoU2V0U3RhdGUoZmliZXIsIHF1ZXVlLCBhY3Rpb24pIHtcbiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYXJnc1szXSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiU3RhdGUgdXBkYXRlcyBmcm9tIHRoZSB1c2VTdGF0ZSgpIGFuZCB1c2VSZWR1Y2VyKCkgSG9va3MgZG9uJ3Qgc3VwcG9ydCB0aGUgc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiBUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgcmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIHRoZSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLlwiXG4gICAgICAgICk7XG4gICAgICBhcmdzID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgICAgZGlzcGF0Y2hTZXRTdGF0ZUludGVybmFsKGZpYmVyLCBxdWV1ZSwgYWN0aW9uLCBhcmdzKTtcbiAgICAgIG1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChmaWJlciwgYXJncyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoU2V0U3RhdGVJbnRlcm5hbChmaWJlciwgcXVldWUsIGFjdGlvbiwgbGFuZSkge1xuICAgICAgdmFyIHVwZGF0ZSA9IHtcbiAgICAgICAgbGFuZTogbGFuZSxcbiAgICAgICAgcmV2ZXJ0TGFuZTogMCxcbiAgICAgICAgZ2VzdHVyZTogbnVsbCxcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGhhc0VhZ2VyU3RhdGU6ICExLFxuICAgICAgICBlYWdlclN0YXRlOiBudWxsLFxuICAgICAgICBuZXh0OiBudWxsXG4gICAgICB9O1xuICAgICAgaWYgKGlzUmVuZGVyUGhhc2VVcGRhdGUoZmliZXIpKSBlbnF1ZXVlUmVuZGVyUGhhc2VVcGRhdGUocXVldWUsIHVwZGF0ZSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIDAgPT09IGZpYmVyLmxhbmVzICYmXG4gICAgICAgICAgKG51bGwgPT09IGFsdGVybmF0ZSB8fCAwID09PSBhbHRlcm5hdGUubGFuZXMpICYmXG4gICAgICAgICAgKChhbHRlcm5hdGUgPSBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyKSwgbnVsbCAhPT0gYWx0ZXJuYXRlKVxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlLFxuICAgICAgICAgICAgICBlYWdlclN0YXRlID0gYWx0ZXJuYXRlKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICAgIHVwZGF0ZS5oYXNFYWdlclN0YXRlID0gITA7XG4gICAgICAgICAgICB1cGRhdGUuZWFnZXJTdGF0ZSA9IGVhZ2VyU3RhdGU7XG4gICAgICAgICAgICBpZiAob2JqZWN0SXMoZWFnZXJTdGF0ZSwgY3VycmVudFN0YXRlKSlcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBlbnF1ZXVlVXBkYXRlJDEoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIDApLFxuICAgICAgICAgICAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdCAmJlxuICAgICAgICAgICAgICAgICAgZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpLFxuICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhY3Rpb24gPSBlbnF1ZXVlQ29uY3VycmVudEhvb2tVcGRhdGUoZmliZXIsIHF1ZXVlLCB1cGRhdGUsIGxhbmUpO1xuICAgICAgICBpZiAobnVsbCAhPT0gYWN0aW9uKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoYWN0aW9uLCBmaWJlciwgbGFuZSksXG4gICAgICAgICAgICBlbnRhbmdsZVRyYW5zaXRpb25VcGRhdGUoYWN0aW9uLCBxdWV1ZSwgbGFuZSksXG4gICAgICAgICAgICAhMFxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoT3B0aW1pc3RpY1NldFN0YXRlKFxuICAgICAgZmliZXIsXG4gICAgICB0aHJvd0lmRHVyaW5nUmVuZGVyLFxuICAgICAgcXVldWUsXG4gICAgICBhY3Rpb25cbiAgICApIHtcbiAgICAgIG51bGwgPT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgJiZcbiAgICAgICAgMCA9PT0gY3VycmVudEVudGFuZ2xlZExhbmUgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkFuIG9wdGltaXN0aWMgc3RhdGUgdXBkYXRlIG9jY3VycmVkIG91dHNpZGUgYSB0cmFuc2l0aW9uIG9yIGFjdGlvbi4gVG8gZml4LCBtb3ZlIHRoZSB1cGRhdGUgdG8gYW4gYWN0aW9uLCBvciB3cmFwIHdpdGggc3RhcnRUcmFuc2l0aW9uLlwiXG4gICAgICAgICk7XG4gICAgICBhY3Rpb24gPSB7XG4gICAgICAgIGxhbmU6IDIsXG4gICAgICAgIHJldmVydExhbmU6IHJlcXVlc3RUcmFuc2l0aW9uTGFuZSgpLFxuICAgICAgICBnZXN0dXJlOiBudWxsLFxuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgaGFzRWFnZXJTdGF0ZTogITEsXG4gICAgICAgIGVhZ2VyU3RhdGU6IG51bGwsXG4gICAgICAgIG5leHQ6IG51bGxcbiAgICAgIH07XG4gICAgICBpZiAoaXNSZW5kZXJQaGFzZVVwZGF0ZShmaWJlcikpIHtcbiAgICAgICAgaWYgKHRocm93SWZEdXJpbmdSZW5kZXIpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW5ub3QgdXBkYXRlIG9wdGltaXN0aWMgc3RhdGUgd2hpbGUgcmVuZGVyaW5nLlwiKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkNhbm5vdCBjYWxsIHN0YXJ0VHJhbnNpdGlvbiB3aGlsZSByZW5kZXJpbmcuXCIpO1xuICAgICAgfSBlbHNlXG4gICAgICAgICh0aHJvd0lmRHVyaW5nUmVuZGVyID0gZW5xdWV1ZUNvbmN1cnJlbnRIb29rVXBkYXRlKFxuICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgIHF1ZXVlLFxuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAyXG4gICAgICAgICkpLFxuICAgICAgICAgIG51bGwgIT09IHRocm93SWZEdXJpbmdSZW5kZXIgJiZcbiAgICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcih0aHJvd0lmRHVyaW5nUmVuZGVyLCBmaWJlciwgMik7XG4gICAgICBtYXJrU3RhdGVVcGRhdGVTY2hlZHVsZWQoZmliZXIsIDIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1JlbmRlclBoYXNlVXBkYXRlKGZpYmVyKSB7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgZmliZXIgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyIHx8XG4gICAgICAgIChudWxsICE9PSBhbHRlcm5hdGUgJiYgYWx0ZXJuYXRlID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlcilcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVucXVldWVSZW5kZXJQaGFzZVVwZGF0ZShxdWV1ZSwgdXBkYXRlKSB7XG4gICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPVxuICAgICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gITA7XG4gICAgICB2YXIgcGVuZGluZyA9IHF1ZXVlLnBlbmRpbmc7XG4gICAgICBudWxsID09PSBwZW5kaW5nXG4gICAgICAgID8gKHVwZGF0ZS5uZXh0ID0gdXBkYXRlKVxuICAgICAgICA6ICgodXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQpLCAocGVuZGluZy5uZXh0ID0gdXBkYXRlKSk7XG4gICAgICBxdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnRhbmdsZVRyYW5zaXRpb25VcGRhdGUocm9vdCwgcXVldWUsIGxhbmUpIHtcbiAgICAgIGlmICgwICE9PSAobGFuZSAmIDQxOTQwNDgpKSB7XG4gICAgICAgIHZhciBxdWV1ZUxhbmVzID0gcXVldWUubGFuZXM7XG4gICAgICAgIHF1ZXVlTGFuZXMgJj0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gICAgICAgIGxhbmUgfD0gcXVldWVMYW5lcztcbiAgICAgICAgcXVldWUubGFuZXMgPSBsYW5lO1xuICAgICAgICBtYXJrUm9vdEVudGFuZ2xlZChyb290LCBsYW5lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgICBpZiAobnVsbCAhPT0gY2FsbGJhY2sgJiYgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGtleSA9IFN0cmluZyhjYWxsYmFjayk7XG4gICAgICAgIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjay5oYXMoa2V5KSB8fFxuICAgICAgICAgIChkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2suYWRkKGtleSksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy5cIixcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBjdG9yLFxuICAgICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLFxuICAgICAgbmV4dFByb3BzXG4gICAgKSB7XG4gICAgICB2YXIgcHJldlN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgcGFydGlhbFN0YXRlID0gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZvaWQgMCA9PT0gcGFydGlhbFN0YXRlICYmXG4gICAgICAgICgoY3RvciA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdG9yKSB8fCBcIkNvbXBvbmVudFwiKSxcbiAgICAgICAgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmhhcyhjdG9yKSB8fFxuICAgICAgICAgIChkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUuYWRkKGN0b3IpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpOiBBIHZhbGlkIHN0YXRlIG9iamVjdCAob3IgbnVsbCkgbXVzdCBiZSByZXR1cm5lZC4gWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLlwiLFxuICAgICAgICAgICAgY3RvclxuICAgICAgICAgICkpKTtcbiAgICAgIHByZXZTdGF0ZSA9XG4gICAgICAgIG51bGwgPT09IHBhcnRpYWxTdGF0ZSB8fCB2b2lkIDAgPT09IHBhcnRpYWxTdGF0ZVxuICAgICAgICAgID8gcHJldlN0YXRlXG4gICAgICAgICAgOiBhc3NpZ24oe30sIHByZXZTdGF0ZSwgcGFydGlhbFN0YXRlKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBwcmV2U3RhdGU7XG4gICAgICAwID09PSB3b3JrSW5Qcm9ncmVzcy5sYW5lcyAmJlxuICAgICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUuYmFzZVN0YXRlID0gcHJldlN0YXRlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUoXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIGN0b3IsXG4gICAgICBvbGRQcm9wcyxcbiAgICAgIG5ld1Byb3BzLFxuICAgICAgb2xkU3RhdGUsXG4gICAgICBuZXdTdGF0ZSxcbiAgICAgIG5leHRDb250ZXh0XG4gICAgKSB7XG4gICAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKSB7XG4gICAgICAgIG9sZFByb3BzID0gaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgIG5ld1N0YXRlLFxuICAgICAgICAgIG5leHRDb250ZXh0XG4gICAgICAgICk7XG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgb2xkUHJvcHMgPSBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUoXG4gICAgICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgICAgICAgbmV4dENvbnRleHRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdm9pZCAwID09PSBvbGRQcm9wcyAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzLnNob3VsZENvbXBvbmVudFVwZGF0ZSgpOiBSZXR1cm5lZCB1bmRlZmluZWQgaW5zdGVhZCBvZiBhIGJvb2xlYW4gdmFsdWUuIE1ha2Ugc3VyZSB0byByZXR1cm4gdHJ1ZSBvciBmYWxzZS5cIixcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShjdG9yKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIG9sZFByb3BzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGN0b3IucHJvdG90eXBlICYmIGN0b3IucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50XG4gICAgICAgID8gIXNoYWxsb3dFcXVhbChvbGRQcm9wcywgbmV3UHJvcHMpIHx8ICFzaGFsbG93RXF1YWwob2xkU3RhdGUsIG5ld1N0YXRlKVxuICAgICAgICA6ICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgaW5zdGFuY2UsXG4gICAgICBuZXdQcm9wcyxcbiAgICAgIG5leHRDb250ZXh0XG4gICAgKSB7XG4gICAgICB2YXIgb2xkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICAgIGluc3RhbmNlLnN0YXRlICE9PSBvbGRTdGF0ZSAmJlxuICAgICAgICAoKHdvcmtJblByb2dyZXNzID1cbiAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHdvcmtJblByb2dyZXNzKSB8fCBcIkNvbXBvbmVudFwiKSxcbiAgICAgICAgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50Lmhhcyh3b3JrSW5Qcm9ncmVzcykgfHxcbiAgICAgICAgICAoZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50LmFkZCh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gdGhpcy5zdGF0ZSBpcyBkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC5cIixcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgKSksXG4gICAgICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKFxuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIGluc3RhbmNlLnN0YXRlLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKENvbXBvbmVudCwgYmFzZVByb3BzKSB7XG4gICAgICB2YXIgbmV3UHJvcHMgPSBiYXNlUHJvcHM7XG4gICAgICBpZiAoXCJyZWZcIiBpbiBiYXNlUHJvcHMpIHtcbiAgICAgICAgbmV3UHJvcHMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gYmFzZVByb3BzKVxuICAgICAgICAgIFwicmVmXCIgIT09IHByb3BOYW1lICYmIChuZXdQcm9wc1twcm9wTmFtZV0gPSBiYXNlUHJvcHNbcHJvcE5hbWVdKTtcbiAgICAgIH1cbiAgICAgIGlmICgoQ29tcG9uZW50ID0gQ29tcG9uZW50LmRlZmF1bHRQcm9wcykpIHtcbiAgICAgICAgbmV3UHJvcHMgPT09IGJhc2VQcm9wcyAmJiAobmV3UHJvcHMgPSBhc3NpZ24oe30sIG5ld1Byb3BzKSk7XG4gICAgICAgIGZvciAodmFyIF9wcm9wTmFtZSBpbiBDb21wb25lbnQpXG4gICAgICAgICAgdm9pZCAwID09PSBuZXdQcm9wc1tfcHJvcE5hbWVdICYmXG4gICAgICAgICAgICAobmV3UHJvcHNbX3Byb3BOYW1lXSA9IENvbXBvbmVudFtfcHJvcE5hbWVdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdQcm9wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVmYXVsdE9uVW5jYXVnaHRFcnJvcihlcnJvcikge1xuICAgICAgcmVwb3J0R2xvYmFsRXJyb3IoZXJyb3IpO1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIiVzXFxuXFxuJXNcXG5cIixcbiAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgID8gXCJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgPFwiICsgY29tcG9uZW50TmFtZSArIFwiPiBjb21wb25lbnQuXCJcbiAgICAgICAgICA6IFwiQW4gZXJyb3Igb2NjdXJyZWQgaW4gb25lIG9mIHlvdXIgUmVhY3QgY29tcG9uZW50cy5cIixcbiAgICAgICAgXCJDb25zaWRlciBhZGRpbmcgYW4gZXJyb3IgYm91bmRhcnkgdG8geW91ciB0cmVlIHRvIGN1c3RvbWl6ZSBlcnJvciBoYW5kbGluZyBiZWhhdmlvci5cXG5WaXNpdCBodHRwczovL3JlYWN0LmRldi9saW5rL2Vycm9yLWJvdW5kYXJpZXMgdG8gbGVhcm4gbW9yZSBhYm91dCBlcnJvciBib3VuZGFyaWVzLlwiXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWZhdWx0T25DYXVnaHRFcnJvcihlcnJvcikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWVNZXNzYWdlID0gY29tcG9uZW50TmFtZVxuICAgICAgICAgID8gXCJUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gdGhlIDxcIiArIGNvbXBvbmVudE5hbWUgKyBcIj4gY29tcG9uZW50LlwiXG4gICAgICAgICAgOiBcIlRoZSBhYm92ZSBlcnJvciBvY2N1cnJlZCBpbiBvbmUgb2YgeW91ciBSZWFjdCBjb21wb25lbnRzLlwiLFxuICAgICAgICByZWNyZWF0ZU1lc3NhZ2UgPVxuICAgICAgICAgIFwiUmVhY3Qgd2lsbCB0cnkgdG8gcmVjcmVhdGUgdGhpcyBjb21wb25lbnQgdHJlZSBmcm9tIHNjcmF0Y2ggdXNpbmcgdGhlIGVycm9yIGJvdW5kYXJ5IHlvdSBwcm92aWRlZCwgXCIgK1xuICAgICAgICAgICgoZXJyb3JCb3VuZGFyeU5hbWUgfHwgXCJBbm9ueW1vdXNcIikgKyBcIi5cIik7XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBlcnJvciAmJlxuICAgICAgICBudWxsICE9PSBlcnJvciAmJlxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgZXJyb3IuZW52aXJvbm1lbnROYW1lXG4gICAgICApIHtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGVycm9yLmVudmlyb25tZW50TmFtZTtcbiAgICAgICAgZXJyb3IgPSBbXG4gICAgICAgICAgXCIlb1xcblxcbiVzXFxuXFxuJXNcXG5cIixcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICBjb21wb25lbnROYW1lTWVzc2FnZSxcbiAgICAgICAgICByZWNyZWF0ZU1lc3NhZ2VcbiAgICAgICAgXS5zbGljZSgwKTtcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVycm9yWzBdXG4gICAgICAgICAgPyBlcnJvci5zcGxpY2UoXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgIGJhZGdlRm9ybWF0ICsgZXJyb3JbMF0sXG4gICAgICAgICAgICAgIGJhZGdlU3R5bGUsXG4gICAgICAgICAgICAgIHBhZCArIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCArIHBhZCxcbiAgICAgICAgICAgICAgcmVzZXRTdHlsZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogZXJyb3Iuc3BsaWNlKFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICBiYWRnZUZvcm1hdCxcbiAgICAgICAgICAgICAgYmFkZ2VTdHlsZSxcbiAgICAgICAgICAgICAgcGFkICsgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ICsgcGFkLFxuICAgICAgICAgICAgICByZXNldFN0eWxlXG4gICAgICAgICAgICApO1xuICAgICAgICBlcnJvci51bnNoaWZ0KGNvbnNvbGUpO1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBiaW5kLmFwcGx5KGNvbnNvbGUuZXJyb3IsIGVycm9yKTtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KCk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIiVvXFxuXFxuJXNcXG5cXG4lc1xcblwiLFxuICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIGNvbXBvbmVudE5hbWVNZXNzYWdlLFxuICAgICAgICAgIHJlY3JlYXRlTWVzc2FnZVxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWZhdWx0T25SZWNvdmVyYWJsZUVycm9yKGVycm9yKSB7XG4gICAgICByZXBvcnRHbG9iYWxFcnJvcihlcnJvcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxvZ1VuY2F1Z2h0RXJyb3Iocm9vdCwgZXJyb3JJbmZvKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb21wb25lbnROYW1lID0gZXJyb3JJbmZvLnNvdXJjZVxuICAgICAgICAgID8gZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihlcnJvckluZm8uc291cmNlKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgZXJyb3JCb3VuZGFyeU5hbWUgPSBudWxsO1xuICAgICAgICB2YXIgZXJyb3IgPSBlcnJvckluZm8udmFsdWU7XG4gICAgICAgIGlmIChudWxsICE9PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSlcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMucHVzaChlcnJvcik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBvblVuY2F1Z2h0RXJyb3IgPSByb290Lm9uVW5jYXVnaHRFcnJvcjtcbiAgICAgICAgICBvblVuY2F1Z2h0RXJyb3IoZXJyb3IsIHsgY29tcG9uZW50U3RhY2s6IGVycm9ySW5mby5zdGFjayB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSQ1KSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRocm93IGUkNTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxvZ0NhdWdodEVycm9yKHJvb3QsIGJvdW5kYXJ5LCBlcnJvckluZm8pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbXBvbmVudE5hbWUgPSBlcnJvckluZm8uc291cmNlXG4gICAgICAgICAgPyBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGVycm9ySW5mby5zb3VyY2UpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICBlcnJvckJvdW5kYXJ5TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoYm91bmRhcnkpO1xuICAgICAgICB2YXIgb25DYXVnaHRFcnJvciA9IHJvb3Qub25DYXVnaHRFcnJvcjtcbiAgICAgICAgb25DYXVnaHRFcnJvcihlcnJvckluZm8udmFsdWUsIHtcbiAgICAgICAgICBjb21wb25lbnRTdGFjazogZXJyb3JJbmZvLnN0YWNrLFxuICAgICAgICAgIGVycm9yQm91bmRhcnk6IDEgPT09IGJvdW5kYXJ5LnRhZyA/IGJvdW5kYXJ5LnN0YXRlTm9kZSA6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlJDYpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhyb3cgZSQ2O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUm9vdEVycm9yVXBkYXRlKHJvb3QsIGVycm9ySW5mbywgbGFuZSkge1xuICAgICAgbGFuZSA9IGNyZWF0ZVVwZGF0ZShsYW5lKTtcbiAgICAgIGxhbmUudGFnID0gQ2FwdHVyZVVwZGF0ZTtcbiAgICAgIGxhbmUucGF5bG9hZCA9IHsgZWxlbWVudDogbnVsbCB9O1xuICAgICAgbGFuZS5jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoZXJyb3JJbmZvLnNvdXJjZSwgbG9nVW5jYXVnaHRFcnJvciwgcm9vdCwgZXJyb3JJbmZvKTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gbGFuZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZShsYW5lKSB7XG4gICAgICBsYW5lID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICAgICAgbGFuZS50YWcgPSBDYXB0dXJlVXBkYXRlO1xuICAgICAgcmV0dXJuIGxhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVDbGFzc0Vycm9yVXBkYXRlKHVwZGF0ZSwgcm9vdCwgZmliZXIsIGVycm9ySW5mbykge1xuICAgICAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9IGZpYmVyLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcikge1xuICAgICAgICB2YXIgZXJyb3IgPSBlcnJvckluZm8udmFsdWU7XG4gICAgICAgIHVwZGF0ZS5wYXlsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpO1xuICAgICAgICB9O1xuICAgICAgICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpO1xuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgZXJyb3JJbmZvLnNvdXJjZSxcbiAgICAgICAgICAgIGxvZ0NhdWdodEVycm9yLFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgZXJyb3JJbmZvXG4gICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHZhciBpbnN0ID0gZmliZXIuc3RhdGVOb2RlO1xuICAgICAgbnVsbCAhPT0gaW5zdCAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0LmNvbXBvbmVudERpZENhdGNoICYmXG4gICAgICAgICh1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpO1xuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgZXJyb3JJbmZvLnNvdXJjZSxcbiAgICAgICAgICAgIGxvZ0NhdWdodEVycm9yLFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgZXJyb3JJbmZvXG4gICAgICAgICAgKTtcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgJiZcbiAgICAgICAgICAgIChudWxsID09PSBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZFxuICAgICAgICAgICAgICA/IChsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG5ldyBTZXQoW3RoaXNdKSlcbiAgICAgICAgICAgICAgOiBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZC5hZGQodGhpcykpO1xuICAgICAgICAgIGNhbGxDb21wb25lbnREaWRDYXRjaEluREVWKHRoaXMsIGVycm9ySW5mbyk7XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIHx8XG4gICAgICAgICAgICAoMCA9PT0gKGZpYmVyLmxhbmVzICYgMikgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIiVzOiBFcnJvciBib3VuZGFyaWVzIHNob3VsZCBpbXBsZW1lbnQgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkuIEluIHRoYXQgbWV0aG9kLCByZXR1cm4gYSBzdGF0ZSB1cGRhdGUgdG8gZGlzcGxheSBhbiBlcnJvciBtZXNzYWdlIG9yIGZhbGxiYWNrIFVJLlwiLFxuICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiVW5rbm93blwiXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdGhyb3dFeGNlcHRpb24oXG4gICAgICByb290LFxuICAgICAgcmV0dXJuRmliZXIsXG4gICAgICBzb3VyY2VGaWJlcixcbiAgICAgIHZhbHVlLFxuICAgICAgcm9vdFJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBzb3VyY2VGaWJlci5mbGFncyB8PSAzMjc2ODtcbiAgICAgIGlzRGV2VG9vbHNQcmVzZW50ICYmIHJlc3RvcmVQZW5kaW5nVXBkYXRlcnMocm9vdCwgcm9vdFJlbmRlckxhbmVzKTtcbiAgICAgIGlmIChcbiAgICAgICAgbnVsbCAhPT0gdmFsdWUgJiZcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHZhbHVlLnRoZW5cbiAgICAgICkge1xuICAgICAgICByZXR1cm5GaWJlciA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcbiAgICAgICAgbnVsbCAhPT0gcmV0dXJuRmliZXIgJiZcbiAgICAgICAgICBwcm9wYWdhdGVQYXJlbnRDb250ZXh0Q2hhbmdlcyhcbiAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgc291cmNlRmliZXIsXG4gICAgICAgICAgICByb290UmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAhMFxuICAgICAgICAgICk7XG4gICAgICAgIGlzSHlkcmF0aW5nICYmIChkaWRTdXNwZW5kT3JFcnJvckRFViA9ICEwKTtcbiAgICAgICAgc291cmNlRmliZXIgPSBzdXNwZW5zZUhhbmRsZXJTdGFja0N1cnNvci5jdXJyZW50O1xuICAgICAgICBpZiAobnVsbCAhPT0gc291cmNlRmliZXIpIHtcbiAgICAgICAgICBzd2l0Y2ggKHNvdXJjZUZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gc2hlbGxCb3VuZGFyeVxuICAgICAgICAgICAgICAgICAgPyByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKClcbiAgICAgICAgICAgICAgICAgIDogbnVsbCA9PT0gc291cmNlRmliZXIuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJblByb2dyZXNzICYmXG4gICAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZCksXG4gICAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmZsYWdzICY9IC0yNTcpLFxuICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci5mbGFncyB8PSA2NTUzNiksXG4gICAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmxhbmVzID0gcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9PT0gbm9vcFN1c3BlbnNleUNvbW1pdFRoZW5hYmxlXG4gICAgICAgICAgICAgICAgICA/IChzb3VyY2VGaWJlci5mbGFncyB8PSAxNjM4NClcbiAgICAgICAgICAgICAgICAgIDogKChyZXR1cm5GaWJlciA9IHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgICAgICAgICA/IChzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IG5ldyBTZXQoW3ZhbHVlXSkpXG4gICAgICAgICAgICAgICAgICAgICAgOiByZXR1cm5GaWJlci5hZGQodmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgdmFsdWUsIHJvb3RSZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci5mbGFncyB8PSA2NTUzNiksXG4gICAgICAgICAgICAgICAgdmFsdWUgPT09IG5vb3BTdXNwZW5zZXlDb21taXRUaGVuYWJsZVxuICAgICAgICAgICAgICAgICAgPyAoc291cmNlRmliZXIuZmxhZ3MgfD0gMTYzODQpXG4gICAgICAgICAgICAgICAgICA6ICgocmV0dXJuRmliZXIgPSBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgICAgICAgICAgIG51bGwgPT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICAgICAgPyAoKHJldHVybkZpYmVyID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VySW5zdGFuY2VzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeVF1ZXVlOiBuZXcgU2V0KFt2YWx1ZV0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IHJldHVybkZpYmVyKSlcbiAgICAgICAgICAgICAgICAgICAgICA6ICgoc291cmNlRmliZXIgPSByZXR1cm5GaWJlci5yZXRyeVF1ZXVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgPT09IHNvdXJjZUZpYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gKHJldHVybkZpYmVyLnJldHJ5UXVldWUgPSBuZXcgU2V0KFt2YWx1ZV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvdXJjZUZpYmVyLmFkZCh2YWx1ZSkpLFxuICAgICAgICAgICAgICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgdmFsdWUsIHJvb3RSZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJVbmV4cGVjdGVkIFN1c3BlbnNlIGhhbmRsZXIgdGFnIChcIiArXG4gICAgICAgICAgICAgIHNvdXJjZUZpYmVyLnRhZyArXG4gICAgICAgICAgICAgIFwiKS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHZhbHVlLCByb290UmVuZGVyTGFuZXMpO1xuICAgICAgICByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKCk7XG4gICAgICAgIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0h5ZHJhdGluZylcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoZGlkU3VzcGVuZE9yRXJyb3JERVYgPSAhMCksXG4gICAgICAgICAgKHJldHVybkZpYmVyID0gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudCksXG4gICAgICAgICAgbnVsbCAhPT0gcmV0dXJuRmliZXJcbiAgICAgICAgICAgID8gKDAgPT09IChyZXR1cm5GaWJlci5mbGFncyAmIDY1NTM2KSAmJiAocmV0dXJuRmliZXIuZmxhZ3MgfD0gMjU2KSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyLmZsYWdzIHw9IDY1NTM2KSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyLmxhbmVzID0gcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgdmFsdWUgIT09IEh5ZHJhdGlvbk1pc21hdGNoRXhjZXB0aW9uICYmXG4gICAgICAgICAgICAgICAgcXVldWVIeWRyYXRpb25FcnJvcihcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKFxuICAgICAgICAgICAgICAgICAgICBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIlRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBoeWRyYXRpbmcgYnV0IFJlYWN0IHdhcyBhYmxlIHRvIHJlY292ZXIgYnkgaW5zdGVhZCBjbGllbnQgcmVuZGVyaW5nIGZyb20gdGhlIG5lYXJlc3QgU3VzcGVuc2UgYm91bmRhcnkuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgeyBjYXVzZTogdmFsdWUgfVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWJlclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICA6ICh2YWx1ZSAhPT0gSHlkcmF0aW9uTWlzbWF0Y2hFeGNlcHRpb24gJiZcbiAgICAgICAgICAgICAgICBxdWV1ZUh5ZHJhdGlvbkVycm9yKFxuICAgICAgICAgICAgICAgICAgY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoXG4gICAgICAgICAgICAgICAgICAgIEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiVGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGh5ZHJhdGluZyBidXQgUmVhY3Qgd2FzIGFibGUgdG8gcmVjb3ZlciBieSBpbnN0ZWFkIGNsaWVudCByZW5kZXJpbmcgdGhlIGVudGlyZSByb290LlwiLFxuICAgICAgICAgICAgICAgICAgICAgIHsgY2F1c2U6IHZhbHVlIH1cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlRmliZXJcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAocm9vdCA9IHJvb3QuY3VycmVudC5hbHRlcm5hdGUpLFxuICAgICAgICAgICAgICAocm9vdC5mbGFncyB8PSA2NTUzNiksXG4gICAgICAgICAgICAgIChyb290UmVuZGVyTGFuZXMgJj0gLXJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgIChyb290LmxhbmVzIHw9IHJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgICh2YWx1ZSA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKHZhbHVlLCBzb3VyY2VGaWJlcikpLFxuICAgICAgICAgICAgICAocm9vdFJlbmRlckxhbmVzID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKFxuICAgICAgICAgICAgICAgIHJvb3Quc3RhdGVOb2RlLFxuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHJvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHJvb3QsIHJvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgIT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgJiZcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RFcnJvcmVkKSksXG4gICAgICAgICAgITFcbiAgICAgICAgKTtcbiAgICAgIHZhciBlcnJvciA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKFxuICAgICAgICBFcnJvcihcbiAgICAgICAgICBcIlRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgY29uY3VycmVudCByZW5kZXJpbmcgYnV0IFJlYWN0IHdhcyBhYmxlIHRvIHJlY292ZXIgYnkgaW5zdGVhZCBzeW5jaHJvbm91c2x5IHJlbmRlcmluZyB0aGUgZW50aXJlIHJvb3QuXCIsXG4gICAgICAgICAgeyBjYXVzZTogdmFsdWUgfVxuICAgICAgICApLFxuICAgICAgICBzb3VyY2VGaWJlclxuICAgICAgKTtcbiAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzUm9vdENvbmN1cnJlbnRFcnJvcnNcbiAgICAgICAgPyAod29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycyA9IFtlcnJvcl0pXG4gICAgICAgIDogd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgIT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgJiZcbiAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RXJyb3JlZCk7XG4gICAgICBpZiAobnVsbCA9PT0gcmV0dXJuRmliZXIpIHJldHVybiAhMDtcbiAgICAgIHZhbHVlID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIodmFsdWUsIHNvdXJjZUZpYmVyKTtcbiAgICAgIHNvdXJjZUZpYmVyID0gcmV0dXJuRmliZXI7XG4gICAgICBkbyB7XG4gICAgICAgIHN3aXRjaCAoc291cmNlRmliZXIudGFnKSB7XG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmZsYWdzIHw9IDY1NTM2KSxcbiAgICAgICAgICAgICAgKHJvb3QgPSByb290UmVuZGVyTGFuZXMgJiAtcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmxhbmVzIHw9IHJvb3QpLFxuICAgICAgICAgICAgICAocm9vdCA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShcbiAgICAgICAgICAgICAgICBzb3VyY2VGaWJlci5zdGF0ZU5vZGUsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgcm9vdFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHNvdXJjZUZpYmVyLCByb290KSxcbiAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoKHJldHVybkZpYmVyID0gc291cmNlRmliZXIudHlwZSksXG4gICAgICAgICAgICAgIChlcnJvciA9IHNvdXJjZUZpYmVyLnN0YXRlTm9kZSksXG4gICAgICAgICAgICAgIDAgPT09IChzb3VyY2VGaWJlci5mbGFncyAmIDEyOCkgJiZcbiAgICAgICAgICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmV0dXJuRmliZXIuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIHx8XG4gICAgICAgICAgICAgICAgICAobnVsbCAhPT0gZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZXJyb3IuY29tcG9uZW50RGlkQ2F0Y2ggJiZcbiAgICAgICAgICAgICAgICAgICAgKG51bGwgPT09IGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgIWxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmhhcyhlcnJvcikpKSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKHNvdXJjZUZpYmVyLmZsYWdzIHw9IDY1NTM2KSxcbiAgICAgICAgICAgICAgICAocm9vdFJlbmRlckxhbmVzICY9IC1yb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgIChzb3VyY2VGaWJlci5sYW5lcyB8PSByb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgIChyb290UmVuZGVyTGFuZXMgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKHJvb3RSZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgICAgIGluaXRpYWxpemVDbGFzc0Vycm9yVXBkYXRlKFxuICAgICAgICAgICAgICAgICAgcm9vdFJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgIHNvdXJjZUZpYmVyLFxuICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZShzb3VyY2VGaWJlciwgcm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHNvdXJjZUZpYmVyID0gc291cmNlRmliZXIucmV0dXJuO1xuICAgICAgfSB3aGlsZSAobnVsbCAhPT0gc291cmNlRmliZXIpO1xuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIG5leHRDaGlsZHJlbixcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9XG4gICAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgICA/IG1vdW50Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpXG4gICAgICAgICAgOiByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIGN1cnJlbnQuY2hpbGQsXG4gICAgICAgICAgICAgIG5leHRDaGlsZHJlbixcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUZvcndhcmRSZWYoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBuZXh0UHJvcHMsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgQ29tcG9uZW50ID0gQ29tcG9uZW50LnJlbmRlcjtcbiAgICAgIHZhciByZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gICAgICBpZiAoXCJyZWZcIiBpbiBuZXh0UHJvcHMpIHtcbiAgICAgICAgdmFyIHByb3BzV2l0aG91dFJlZiA9IHt9O1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gbmV4dFByb3BzKVxuICAgICAgICAgIFwicmVmXCIgIT09IGtleSAmJiAocHJvcHNXaXRob3V0UmVmW2tleV0gPSBuZXh0UHJvcHNba2V5XSk7XG4gICAgICB9IGVsc2UgcHJvcHNXaXRob3V0UmVmID0gbmV4dFByb3BzO1xuICAgICAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgbmV4dFByb3BzID0gcmVuZGVyV2l0aEhvb2tzKFxuICAgICAgICBjdXJyZW50LFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICBwcm9wc1dpdGhvdXRSZWYsXG4gICAgICAgIHJlZixcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICk7XG4gICAgICBrZXkgPSBjaGVja0RpZFJlbmRlcklkSG9vaygpO1xuICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQoKTtcbiAgICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmICFkaWRSZWNlaXZlVXBkYXRlKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpLFxuICAgICAgICAgIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKVxuICAgICAgICApO1xuICAgICAgaXNIeWRyYXRpbmcgJiYga2V5ICYmIHB1c2hNYXRlcmlhbGl6ZWRUcmVlSWQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTtcbiAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlTWVtb0NvbXBvbmVudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIG5leHRQcm9wcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBpZiAobnVsbCA9PT0gY3VycmVudCkge1xuICAgICAgICB2YXIgdHlwZSA9IENvbXBvbmVudC50eXBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICAgICFzaG91bGRDb25zdHJ1Y3QodHlwZSkgJiZcbiAgICAgICAgICB2b2lkIDAgPT09IHR5cGUuZGVmYXVsdFByb3BzICYmXG4gICAgICAgICAgbnVsbCA9PT0gQ29tcG9uZW50LmNvbXBhcmVcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoQ29tcG9uZW50ID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50YWcgPSAxNSksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCksXG4gICAgICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIHR5cGUpLFxuICAgICAgICAgICAgdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIGN1cnJlbnQgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoXG4gICAgICAgICAgQ29tcG9uZW50LnR5cGUsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubW9kZSxcbiAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICApO1xuICAgICAgICBjdXJyZW50LnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgICAgICAgY3VycmVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgcmV0dXJuICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQpO1xuICAgICAgfVxuICAgICAgdHlwZSA9IGN1cnJlbnQuY2hpbGQ7XG4gICAgICBpZiAoIWNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0KGN1cnJlbnQsIHJlbmRlckxhbmVzKSkge1xuICAgICAgICB2YXIgcHJldlByb3BzID0gdHlwZS5tZW1vaXplZFByb3BzO1xuICAgICAgICBDb21wb25lbnQgPSBDb21wb25lbnQuY29tcGFyZTtcbiAgICAgICAgQ29tcG9uZW50ID0gbnVsbCAhPT0gQ29tcG9uZW50ID8gQ29tcG9uZW50IDogc2hhbGxvd0VxdWFsO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgQ29tcG9uZW50KHByZXZQcm9wcywgbmV4dFByb3BzKSAmJlxuICAgICAgICAgIGN1cnJlbnQucmVmID09PSB3b3JrSW5Qcm9ncmVzcy5yZWZcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTtcbiAgICAgIGN1cnJlbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyh0eXBlLCBuZXh0UHJvcHMpO1xuICAgICAgY3VycmVudC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gICAgICBjdXJyZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgcmV0dXJuICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgQ29tcG9uZW50LFxuICAgICAgbmV4dFByb3BzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIGlmIChudWxsICE9PSBjdXJyZW50KSB7XG4gICAgICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzaGFsbG93RXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpICYmXG4gICAgICAgICAgY3VycmVudC5yZWYgPT09IHdvcmtJblByb2dyZXNzLnJlZiAmJlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPT09IGN1cnJlbnQudHlwZVxuICAgICAgICApXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKChkaWRSZWNlaXZlVXBkYXRlID0gITEpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyA9IG5leHRQcm9wcyA9IHByZXZQcm9wcyksXG4gICAgICAgICAgICBjaGVja1NjaGVkdWxlZFVwZGF0ZU9yQ29udGV4dChjdXJyZW50LCByZW5kZXJMYW5lcykpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgMCAhPT0gKGN1cnJlbnQuZmxhZ3MgJiAxMzEwNzIpICYmIChkaWRSZWNlaXZlVXBkYXRlID0gITApO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXMpLFxuICAgICAgICAgICAgICBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcylcbiAgICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgbmV4dFByb3BzXG4gICAgKSB7XG4gICAgICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuLFxuICAgICAgICBwcmV2U3RhdGUgPSBudWxsICE9PSBjdXJyZW50ID8gY3VycmVudC5tZW1vaXplZFN0YXRlIDogbnVsbDtcbiAgICAgIGlmIChcImhpZGRlblwiID09PSBuZXh0UHJvcHMubW9kZSkge1xuICAgICAgICBpZiAoMCAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KSkge1xuICAgICAgICAgIG5leHRQcm9wcyA9XG4gICAgICAgICAgICBudWxsICE9PSBwcmV2U3RhdGVcbiAgICAgICAgICAgICAgPyBwcmV2U3RhdGUuYmFzZUxhbmVzIHwgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgOiByZW5kZXJMYW5lcztcbiAgICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudCkge1xuICAgICAgICAgICAgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkO1xuICAgICAgICAgICAgZm9yIChwcmV2U3RhdGUgPSAwOyBudWxsICE9PSBuZXh0Q2hpbGRyZW47IClcbiAgICAgICAgICAgICAgKHByZXZTdGF0ZSA9XG4gICAgICAgICAgICAgICAgcHJldlN0YXRlIHwgbmV4dENoaWxkcmVuLmxhbmVzIHwgbmV4dENoaWxkcmVuLmNoaWxkTGFuZXMpLFxuICAgICAgICAgICAgICAgIChuZXh0Q2hpbGRyZW4gPSBuZXh0Q2hpbGRyZW4uc2libGluZyk7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gcHJldlN0YXRlICYgfm5leHRQcm9wcztcbiAgICAgICAgICB9IGVsc2UgKHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSAwKSwgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbCk7XG4gICAgICAgICAgcmV0dXJuIGRlZmVySGlkZGVuT2Zmc2NyZWVuQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmICgwICE9PSAocmVuZGVyTGFuZXMgJiA1MzY4NzA5MTIpKVxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0geyBiYXNlTGFuZXM6IDAsIGNhY2hlUG9vbDogbnVsbCB9KSxcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgcHVzaFRyYW5zaXRpb24oXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gcHJldlN0YXRlID8gcHJldlN0YXRlLmNhY2hlUG9vbCA6IG51bGxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG51bGwgIT09IHByZXZTdGF0ZVxuICAgICAgICAgICAgICA/IHB1c2hIaWRkZW5Db250ZXh0KHdvcmtJblByb2dyZXNzLCBwcmV2U3RhdGUpXG4gICAgICAgICAgICAgIDogcmV1c2VIaWRkZW5Db250ZXh0T25TdGFjayh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBwdXNoT2Zmc2NyZWVuU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gNTM2ODcwOTEyKSxcbiAgICAgICAgICAgIGRlZmVySGlkZGVuT2Zmc2NyZWVuQ29tcG9uZW50KFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gcHJldlN0YXRlXG4gICAgICAgICAgICAgICAgPyBwcmV2U3RhdGUuYmFzZUxhbmVzIHwgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICA6IHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgbnVsbCAhPT0gcHJldlN0YXRlXG4gICAgICAgICAgPyAocHVzaFRyYW5zaXRpb24od29ya0luUHJvZ3Jlc3MsIHByZXZTdGF0ZS5jYWNoZVBvb2wpLFxuICAgICAgICAgICAgcHVzaEhpZGRlbkNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHByZXZTdGF0ZSksXG4gICAgICAgICAgICByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsKSlcbiAgICAgICAgICA6IChudWxsICE9PSBjdXJyZW50ICYmIHB1c2hUcmFuc2l0aW9uKHdvcmtJblByb2dyZXNzLCBudWxsKSxcbiAgICAgICAgICAgIHJldXNlSGlkZGVuQ29udGV4dE9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKSk7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZmVySGlkZGVuT2Zmc2NyZWVuQ29tcG9uZW50KFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgbmV4dEJhc2VMYW5lcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gcGVla0NhY2hlRnJvbVBvb2woKTtcbiAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9XG4gICAgICAgIG51bGwgPT09IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdFxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBwYXJlbnQ6IENhY2hlQ29udGV4dC5fY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICBwb29sOiBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHRcbiAgICAgICAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0ge1xuICAgICAgICBiYXNlTGFuZXM6IG5leHRCYXNlTGFuZXMsXG4gICAgICAgIGNhY2hlUG9vbDogSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0XG4gICAgICB9O1xuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBwdXNoVHJhbnNpdGlvbih3b3JrSW5Qcm9ncmVzcywgbnVsbCk7XG4gICAgICByZXVzZUhpZGRlbkNvbnRleHRPblN0YWNrKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHB1c2hPZmZzY3JlZW5TdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICBwcm9wYWdhdGVQYXJlbnRDb250ZXh0Q2hhbmdlcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMsICEwKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudEFjdGl2aXR5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcykge1xuICAgICAgdmFyIGhpZGRlblByb3AgPSBuZXh0UHJvcHMuaGlkZGVuO1xuICAgICAgdm9pZCAwICE9PSBoaWRkZW5Qcm9wICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJzxBY3Rpdml0eT4gZG9lc25cXCd0IGFjY2VwdCBhIGhpZGRlbiBwcm9wLiBVc2UgbW9kZT1cImhpZGRlblwiIGluc3RlYWQuXFxuLSA8QWN0aXZpdHkgJXM+XFxuKyA8QWN0aXZpdHkgJXM+JyxcbiAgICAgICAgICAhMCA9PT0gaGlkZGVuUHJvcFxuICAgICAgICAgICAgPyBcImhpZGRlblwiXG4gICAgICAgICAgICA6ICExID09PSBoaWRkZW5Qcm9wXG4gICAgICAgICAgICAgID8gXCJoaWRkZW49e2ZhbHNlfVwiXG4gICAgICAgICAgICAgIDogXCJoaWRkZW49ey4uLn1cIixcbiAgICAgICAgICBoaWRkZW5Qcm9wID8gJ21vZGU9XCJoaWRkZW5cIicgOiAnbW9kZT1cInZpc2libGVcIidcbiAgICAgICAgKTtcbiAgICAgIG5leHRQcm9wcyA9IG1vdW50V29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihcbiAgICAgICAgeyBtb2RlOiBuZXh0UHJvcHMubW9kZSwgY2hpbGRyZW46IG5leHRQcm9wcy5jaGlsZHJlbiB9LFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tb2RlXG4gICAgICApO1xuICAgICAgbmV4dFByb3BzLnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV4dFByb3BzO1xuICAgICAgbmV4dFByb3BzLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgcmV0dXJuIG5leHRQcm9wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmV0cnlBY3Rpdml0eUNvbXBvbmVudFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICBjdXJyZW50LFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG51bGwsIHJlbmRlckxhbmVzKTtcbiAgICAgIGN1cnJlbnQgPSBtb3VudEFjdGl2aXR5Q2hpbGRyZW4oXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHNcbiAgICAgICk7XG4gICAgICBjdXJyZW50LmZsYWdzIHw9IDI7XG4gICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgdmFyIHJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgICAgIGlmIChudWxsID09PSByZWYpXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50LnJlZiAmJlxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MTk0ODE2KTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgcmVmICYmIFwib2JqZWN0XCIgIT09IHR5cGVvZiByZWYpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIHJlZiB0byBiZSBhIGZ1bmN0aW9uLCBhbiBvYmplY3QgcmV0dXJuZWQgYnkgUmVhY3QuY3JlYXRlUmVmKCksIG9yIHVuZGVmaW5lZC9udWxsLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQgfHwgY3VycmVudC5yZWYgIT09IHJlZilcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MTk0ODE2O1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIG5leHRQcm9wcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIENvbXBvbmVudC5wcm90b3R5cGUgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQ29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXJcbiAgICAgICkge1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiVW5rbm93blwiO1xuICAgICAgICBkaWRXYXJuQWJvdXRCYWRDbGFzc1tjb21wb25lbnROYW1lXSB8fFxuICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGhhdmUgYSByZW5kZXIgbWV0aG9kLCBidXQgZG9lc24ndCBleHRlbmQgUmVhY3QuQ29tcG9uZW50LiBUaGlzIGlzIGxpa2VseSB0byBjYXVzZSBlcnJvcnMuIENoYW5nZSAlcyB0byBleHRlbmQgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuXCIsXG4gICAgICAgICAgICBjb21wb25lbnROYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICksXG4gICAgICAgICAgKGRpZFdhcm5BYm91dEJhZENsYXNzW2NvbXBvbmVudE5hbWVdID0gITApKTtcbiAgICAgIH1cbiAgICAgIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlICYmXG4gICAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKTtcbiAgICAgIG51bGwgPT09IGN1cnJlbnQgJiZcbiAgICAgICAgKHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MudHlwZSksXG4gICAgICAgIENvbXBvbmVudC5jb250ZXh0VHlwZXMgJiZcbiAgICAgICAgICAoKGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIlVua25vd25cIiksXG4gICAgICAgICAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVzW2NvbXBvbmVudE5hbWVdIHx8XG4gICAgICAgICAgICAoKGRpZFdhcm5BYm91dENvbnRleHRUeXBlc1tjb21wb25lbnROYW1lXSA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiJXMgdXNlcyB0aGUgbGVnYWN5IGNvbnRleHRUeXBlcyBBUEkgd2hpY2ggd2FzIHJlbW92ZWQgaW4gUmVhY3QgMTkuIFVzZSBSZWFjdC5jcmVhdGVDb250ZXh0KCkgd2l0aCBSZWFjdC51c2VDb250ZXh0KCkgaW5zdGVhZC4gKGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvbGVnYWN5LWNvbnRleHQpXCIsXG4gICAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICAgICkpKSk7XG4gICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBDb21wb25lbnQgPSByZW5kZXJXaXRoSG9va3MoXG4gICAgICAgIGN1cnJlbnQsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICBDb21wb25lbnQsXG4gICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgKTtcbiAgICAgIG5leHRQcm9wcyA9IGNoZWNrRGlkUmVuZGVySWRIb29rKCk7XG4gICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgIWRpZFJlY2VpdmVVcGRhdGUpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyksXG4gICAgICAgICAgYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpXG4gICAgICAgICk7XG4gICAgICBpc0h5ZHJhdGluZyAmJiBuZXh0UHJvcHMgJiYgcHVzaE1hdGVyaWFsaXplZFRyZWVJZCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxO1xuICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVuZGVyTGFuZXMpO1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXBsYXlGdW5jdGlvbkNvbXBvbmVudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIG5leHRQcm9wcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIHNlY29uZEFyZyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPVxuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIGN1cnJlbnQudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgICAgIG5leHRQcm9wcyA9IHJlbmRlcldpdGhIb29rc0FnYWluKFxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgIHNlY29uZEFyZ1xuICAgICAgKTtcbiAgICAgIGZpbmlzaFJlbmRlcmluZ0hvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIENvbXBvbmVudCA9IGNoZWNrRGlkUmVuZGVySWRIb29rKCk7XG4gICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpO1xuICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgIWRpZFJlY2VpdmVVcGRhdGUpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyksXG4gICAgICAgICAgYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpXG4gICAgICAgICk7XG4gICAgICBpc0h5ZHJhdGluZyAmJiBDb21wb25lbnQgJiYgcHVzaE1hdGVyaWFsaXplZFRyZWVJZCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxO1xuICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVDbGFzc0NvbXBvbmVudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIENvbXBvbmVudCxcbiAgICAgIG5leHRQcm9wcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKHNob3VsZEVycm9ySW1wbCh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgICAgY2FzZSAhMTpcbiAgICAgICAgICB2YXIgX2luc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLFxuICAgICAgICAgICAgc3RhdGUgPSBuZXcgd29ya0luUHJvZ3Jlc3MudHlwZShcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICAgICAgX2luc3RhbmNlLmNvbnRleHRcbiAgICAgICAgICAgICkuc3RhdGU7XG4gICAgICAgICAgX2luc3RhbmNlLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKF9pbnN0YW5jZSwgc3RhdGUsIG51bGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICEwOlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyODtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA2NTUzNjtcbiAgICAgICAgICBfaW5zdGFuY2UgPSBFcnJvcihcIlNpbXVsYXRlZCBlcnJvciBjb21pbmcgZnJvbSBEZXZUb29sc1wiKTtcbiAgICAgICAgICB2YXIgbGFuZSA9IHJlbmRlckxhbmVzICYgLXJlbmRlckxhbmVzO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzIHw9IGxhbmU7XG4gICAgICAgICAgc3RhdGUgPSB3b3JrSW5Qcm9ncmVzc1Jvb3Q7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHN0YXRlKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiRXhwZWN0ZWQgYSB3b3JrLWluLXByb2dyZXNzIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGxhbmUgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKGxhbmUpO1xuICAgICAgICAgIGluaXRpYWxpemVDbGFzc0Vycm9yVXBkYXRlKFxuICAgICAgICAgICAgbGFuZSxcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcihfaW5zdGFuY2UsIHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgICk7XG4gICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBsYW5lKTtcbiAgICAgIH1cbiAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgIGlmIChudWxsID09PSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpIHtcbiAgICAgICAgc3RhdGUgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgICAgIF9pbnN0YW5jZSA9IENvbXBvbmVudC5jb250ZXh0VHlwZTtcbiAgICAgICAgXCJjb250ZXh0VHlwZVwiIGluIENvbXBvbmVudCAmJlxuICAgICAgICAgIG51bGwgIT09IF9pbnN0YW5jZSAmJlxuICAgICAgICAgICh2b2lkIDAgPT09IF9pbnN0YW5jZSB8fCBfaW5zdGFuY2UuJCR0eXBlb2YgIT09IFJFQUNUX0NPTlRFWFRfVFlQRSkgJiZcbiAgICAgICAgICAhZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlLmhhcyhDb21wb25lbnQpICYmXG4gICAgICAgICAgKGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZS5hZGQoQ29tcG9uZW50KSxcbiAgICAgICAgICAobGFuZSA9XG4gICAgICAgICAgICB2b2lkIDAgPT09IF9pbnN0YW5jZVxuICAgICAgICAgICAgICA/IFwiIEhvd2V2ZXIsIGl0IGlzIHNldCB0byB1bmRlZmluZWQuIFRoaXMgY2FuIGJlIGNhdXNlZCBieSBhIHR5cG8gb3IgYnkgbWl4aW5nIHVwIG5hbWVkIGFuZCBkZWZhdWx0IGltcG9ydHMuIFRoaXMgY2FuIGFsc28gaGFwcGVuIGR1ZSB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3ksIHNvIHRyeSBtb3ZpbmcgdGhlIGNyZWF0ZUNvbnRleHQoKSBjYWxsIHRvIGEgc2VwYXJhdGUgZmlsZS5cIlxuICAgICAgICAgICAgICA6IFwib2JqZWN0XCIgIT09IHR5cGVvZiBfaW5zdGFuY2VcbiAgICAgICAgICAgICAgICA/IFwiIEhvd2V2ZXIsIGl0IGlzIHNldCB0byBhIFwiICsgdHlwZW9mIF9pbnN0YW5jZSArIFwiLlwiXG4gICAgICAgICAgICAgICAgOiBfaW5zdGFuY2UuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlNVTUVSX1RZUEVcbiAgICAgICAgICAgICAgICAgID8gXCIgRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyB0aGUgQ29udGV4dC5Db25zdW1lciBpbnN0ZWFkP1wiXG4gICAgICAgICAgICAgICAgICA6IFwiIEhvd2V2ZXIsIGl0IGlzIHNldCB0byBhbiBvYmplY3Qgd2l0aCBrZXlzIHtcIiArXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKF9pbnN0YW5jZSkuam9pbihcIiwgXCIpICtcbiAgICAgICAgICAgICAgICAgICAgXCJ9LlwiKSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcyBkZWZpbmVzIGFuIGludmFsaWQgY29udGV4dFR5cGUuIGNvbnRleHRUeXBlIHNob3VsZCBwb2ludCB0byB0aGUgQ29udGV4dCBvYmplY3QgcmV0dXJuZWQgYnkgUmVhY3QuY3JlYXRlQ29udGV4dCgpLiVzXCIsXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIkNvbXBvbmVudFwiLFxuICAgICAgICAgICAgbGFuZVxuICAgICAgICAgICkpO1xuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgX2luc3RhbmNlICYmXG4gICAgICAgICAgbnVsbCAhPT0gX2luc3RhbmNlICYmXG4gICAgICAgICAgKHN0YXRlID0gcmVhZENvbnRleHQoX2luc3RhbmNlKSk7XG4gICAgICAgIF9pbnN0YW5jZSA9IG5ldyBDb21wb25lbnQobmV4dFByb3BzLCBzdGF0ZSk7XG4gICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSkge1xuICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgX2luc3RhbmNlID0gbmV3IENvbXBvbmVudChuZXh0UHJvcHMsIHN0YXRlKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPVxuICAgICAgICAgIG51bGwgIT09IF9pbnN0YW5jZS5zdGF0ZSAmJiB2b2lkIDAgIT09IF9pbnN0YW5jZS5zdGF0ZVxuICAgICAgICAgICAgPyBfaW5zdGFuY2Uuc3RhdGVcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgX2luc3RhbmNlLnVwZGF0ZXIgPSBjbGFzc0NvbXBvbmVudFVwZGF0ZXI7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IF9pbnN0YW5jZTtcbiAgICAgICAgX2luc3RhbmNlLl9yZWFjdEludGVybmFscyA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICBfaW5zdGFuY2UuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSA9IGZha2VJbnRlcm5hbEluc3RhbmNlO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzICYmXG4gICAgICAgICAgbnVsbCA9PT0gc3RhdGUgJiZcbiAgICAgICAgICAoKHN0YXRlID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJDb21wb25lbnRcIiksXG4gICAgICAgICAgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlLmhhcyhzdGF0ZSkgfHxcbiAgICAgICAgICAgIChkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUuYWRkKHN0YXRlKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiYCVzYCB1c2VzIGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGJ1dCBpdHMgaW5pdGlhbCBzdGF0ZSBpcyAlcy4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQuIEluc3RlYWQsIGRlZmluZSB0aGUgaW5pdGlhbCBzdGF0ZSBieSBhc3NpZ25pbmcgYW4gb2JqZWN0IHRvIGB0aGlzLnN0YXRlYCBpbiB0aGUgY29uc3RydWN0b3Igb2YgYCVzYC4gVGhpcyBlbnN1cmVzIHRoYXQgYGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc2AgYXJndW1lbnRzIGhhdmUgYSBjb25zaXN0ZW50IHNoYXBlLlwiLFxuICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gX2luc3RhbmNlLnN0YXRlID8gXCJudWxsXCIgOiBcInVuZGVmaW5lZFwiLFxuICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgKSkpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyB8fFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgZm91bmRXaWxsVXBkYXRlTmFtZSA9IChsYW5lID0gc3RhdGUgPSBudWxsKTtcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgITAgIT09IF9pbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ1xuICAgICAgICAgICAgPyAoc3RhdGUgPSBcImNvbXBvbmVudFdpbGxNb3VudFwiKVxuICAgICAgICAgICAgOiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgICAgICAoc3RhdGUgPSBcIlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRcIik7XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgICAhMCAhPT1cbiAgICAgICAgICAgIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdcbiAgICAgICAgICAgID8gKGxhbmUgPSBcImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNcIilcbiAgICAgICAgICAgIDogXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgIHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgJiZcbiAgICAgICAgICAgICAgKGxhbmUgPSBcIlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzXCIpO1xuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlICYmXG4gICAgICAgICAgITAgIT09IF9pbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdcbiAgICAgICAgICAgID8gKGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSBcImNvbXBvbmVudFdpbGxVcGRhdGVcIilcbiAgICAgICAgICAgIDogXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlICYmXG4gICAgICAgICAgICAgIChmb3VuZFdpbGxVcGRhdGVOYW1lID0gXCJVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVwiKTtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gc3RhdGUgfHwgbnVsbCAhPT0gbGFuZSB8fCBudWxsICE9PSBmb3VuZFdpbGxVcGRhdGVOYW1lKSB7XG4gICAgICAgICAgICBfaW5zdGFuY2UgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIkNvbXBvbmVudFwiO1xuICAgICAgICAgICAgdmFyIG5ld0FwaU5hbWUgPVxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXG4gICAgICAgICAgICAgICAgPyBcImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpXCJcbiAgICAgICAgICAgICAgICA6IFwiZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKVwiO1xuICAgICAgICAgICAgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZS5oYXMoX2luc3RhbmNlKSB8fFxuICAgICAgICAgICAgICAoZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZS5hZGQoX2luc3RhbmNlKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlVuc2FmZSBsZWdhY3kgbGlmZWN5Y2xlcyB3aWxsIG5vdCBiZSBjYWxsZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgbmV3IGNvbXBvbmVudCBBUElzLlxcblxcbiVzIHVzZXMgJXMgYnV0IGFsc28gY29udGFpbnMgdGhlIGZvbGxvd2luZyBsZWdhY3kgbGlmZWN5Y2xlczolcyVzJXNcXG5cXG5UaGUgYWJvdmUgbGlmZWN5Y2xlcyBzaG91bGQgYmUgcmVtb3ZlZC4gTGVhcm4gbW9yZSBhYm91dCB0aGlzIHdhcm5pbmcgaGVyZTpcXG5odHRwczovL3JlYWN0LmRldi9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlc1wiLFxuICAgICAgICAgICAgICAgIF9pbnN0YW5jZSxcbiAgICAgICAgICAgICAgICBuZXdBcGlOYW1lLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IHN0YXRlID8gXCJcXG4gIFwiICsgc3RhdGUgOiBcIlwiLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IGxhbmUgPyBcIlxcbiAgXCIgKyBsYW5lIDogXCJcIixcbiAgICAgICAgICAgICAgICBudWxsICE9PSBmb3VuZFdpbGxVcGRhdGVOYW1lID8gXCJcXG4gIFwiICsgZm91bmRXaWxsVXBkYXRlTmFtZSA6IFwiXCJcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9pbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgc3RhdGUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIkNvbXBvbmVudFwiO1xuICAgICAgICBfaW5zdGFuY2UucmVuZGVyIHx8XG4gICAgICAgICAgKENvbXBvbmVudC5wcm90b3R5cGUgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBDb21wb25lbnQucHJvdG90eXBlLnJlbmRlclxuICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5kIG9uIHRoZSAlcyBpbnN0YW5jZTogZGlkIHlvdSBhY2NpZGVudGFsbHkgcmV0dXJuIGFuIG9iamVjdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvcj9cIixcbiAgICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlICVzIGluc3RhbmNlOiB5b3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGRlZmluZSBgcmVuZGVyYC5cIixcbiAgICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgIV9pbnN0YW5jZS5nZXRJbml0aWFsU3RhdGUgfHxcbiAgICAgICAgICBfaW5zdGFuY2UuZ2V0SW5pdGlhbFN0YXRlLmlzUmVhY3RDbGFzc0FwcHJvdmVkIHx8XG4gICAgICAgICAgX2luc3RhbmNlLnN0YXRlIHx8XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiZ2V0SW5pdGlhbFN0YXRlIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gRGlkIHlvdSBtZWFuIHRvIGRlZmluZSBhIHN0YXRlIHByb3BlcnR5IGluc3RlYWQ/XCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIF9pbnN0YW5jZS5nZXREZWZhdWx0UHJvcHMgJiZcbiAgICAgICAgICAhX2luc3RhbmNlLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcImdldERlZmF1bHRQcm9wcyB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjbGFzc2VzIGNyZWF0ZWQgdXNpbmcgUmVhY3QuY3JlYXRlQ2xhc3MuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmUgZGVmYXVsdFByb3BzIGluc3RlYWQuXCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIF9pbnN0YW5jZS5jb250ZXh0VHlwZSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcImNvbnRleHRUeXBlIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlIGluc3RlYWQuXCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIENvbXBvbmVudC5jaGlsZENvbnRleHRUeXBlcyAmJlxuICAgICAgICAgICFkaWRXYXJuQWJvdXRDaGlsZENvbnRleHRUeXBlcy5oYXMoQ29tcG9uZW50KSAmJlxuICAgICAgICAgIChkaWRXYXJuQWJvdXRDaGlsZENvbnRleHRUeXBlcy5hZGQoQ29tcG9uZW50KSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcyB1c2VzIHRoZSBsZWdhY3kgY2hpbGRDb250ZXh0VHlwZXMgQVBJIHdoaWNoIHdhcyByZW1vdmVkIGluIFJlYWN0IDE5LiBVc2UgUmVhY3QuY3JlYXRlQ29udGV4dCgpIGluc3RlYWQuIChodHRwczovL3JlYWN0LmRldi9saW5rL2xlZ2FjeS1jb250ZXh0KVwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApKTtcbiAgICAgICAgQ29tcG9uZW50LmNvbnRleHRUeXBlcyAmJlxuICAgICAgICAgICFkaWRXYXJuQWJvdXRDb250ZXh0VHlwZXMkMS5oYXMoQ29tcG9uZW50KSAmJlxuICAgICAgICAgIChkaWRXYXJuQWJvdXRDb250ZXh0VHlwZXMkMS5hZGQoQ29tcG9uZW50KSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcyB1c2VzIHRoZSBsZWdhY3kgY29udGV4dFR5cGVzIEFQSSB3aGljaCB3YXMgcmVtb3ZlZCBpbiBSZWFjdCAxOS4gVXNlIFJlYWN0LmNyZWF0ZUNvbnRleHQoKSB3aXRoIHN0YXRpYyBjb250ZXh0VHlwZSBpbnN0ZWFkLiAoaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9sZWdhY3ktY29udGV4dClcIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKSk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRTaG91bGRVcGRhdGUgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcyBoYXMgYSBtZXRob2QgY2FsbGVkIGNvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/IFRoZSBuYW1lIGlzIHBocmFzZWQgYXMgYSBxdWVzdGlvbiBiZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byByZXR1cm4gYSB2YWx1ZS5cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgQ29tcG9uZW50LnByb3RvdHlwZSAmJlxuICAgICAgICAgIENvbXBvbmVudC5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgJiZcbiAgICAgICAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX2luc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkuIHNob3VsZENvbXBvbmVudFVwZGF0ZSBzaG91bGQgbm90IGJlIHVzZWQgd2hlbiBleHRlbmRpbmcgUmVhY3QuUHVyZUNvbXBvbmVudC4gUGxlYXNlIGV4dGVuZCBSZWFjdC5Db21wb25lbnQgaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIGlzIHVzZWQuXCIsXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoQ29tcG9uZW50KSB8fCBcIkEgcHVyZSBjb21wb25lbnRcIlxuICAgICAgICAgICk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnREaWRVbm1vdW50ICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBjb21wb25lbnREaWRVbm1vdW50KCkuIEJ1dCB0aGVyZSBpcyBubyBzdWNoIGxpZmVjeWNsZSBtZXRob2QuIERpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsVW5tb3VudCgpP1wiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50RGlkUmVjZWl2ZVByb3BzICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBjb21wb25lbnREaWRSZWNlaXZlUHJvcHMoKS4gQnV0IHRoZXJlIGlzIG5vIHN1Y2ggbGlmZWN5Y2xlIG1ldGhvZC4gSWYgeW91IG1lYW50IHRvIHVwZGF0ZSB0aGUgc3RhdGUgaW4gcmVzcG9uc2UgdG8gY2hhbmdpbmcgcHJvcHMsIHVzZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCkuIElmIHlvdSBtZWFudCB0byBmZXRjaCBkYXRhIG9yIHJ1biBzaWRlLWVmZmVjdHMgb3IgbXV0YXRpb25zIGFmdGVyIFJlYWN0IGhhcyB1cGRhdGVkIHRoZSBVSSwgdXNlIGNvbXBvbmVudERpZFVwZGF0ZSgpLlwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpP1wiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcyBoYXMgYSBtZXRob2QgY2FsbGVkIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpP1wiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBsYW5lID0gX2luc3RhbmNlLnByb3BzICE9PSBuZXh0UHJvcHM7XG4gICAgICAgIHZvaWQgMCAhPT0gX2luc3RhbmNlLnByb3BzICYmXG4gICAgICAgICAgbGFuZSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIldoZW4gY2FsbGluZyBzdXBlcigpIGluIGAlc2AsIG1ha2Ugc3VyZSB0byBwYXNzIHVwIHRoZSBzYW1lIHByb3BzIHRoYXQgeW91ciBjb21wb25lbnQncyBjb25zdHJ1Y3RvciB3YXMgcGFzc2VkLlwiLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICApO1xuICAgICAgICBfaW5zdGFuY2UuZGVmYXVsdFByb3BzICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiU2V0dGluZyBkZWZhdWx0UHJvcHMgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMgaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWZpbmUgZGVmYXVsdFByb3BzIGFzIGEgc3RhdGljIHByb3BlcnR5IG9uICVzLlwiLFxuICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSB8fFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgfHxcbiAgICAgICAgICBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUuaGFzKENvbXBvbmVudCkgfHxcbiAgICAgICAgICAoZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlLmFkZChDb21wb25lbnQpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzOiBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSgpIHNob3VsZCBiZSB1c2VkIHdpdGggY29tcG9uZW50RGlkVXBkYXRlKCkuIFRoaXMgY29tcG9uZW50IGRlZmluZXMgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBvbmx5LlwiLFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudClcbiAgICAgICAgICApKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzOiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKSBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCBhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC5cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzOiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoKSBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCBhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC5cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQ29tcG9uZW50LmdldFNuYXBzaG90QmVmb3JlVXBkYXRlICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXM6IGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBtZXRob2QgYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhbiBpbnN0YW5jZSBtZXRob2QuXCIsXG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICk7XG4gICAgICAgIChsYW5lID0gX2luc3RhbmNlLnN0YXRlKSAmJlxuICAgICAgICAgIChcIm9iamVjdFwiICE9PSB0eXBlb2YgbGFuZSB8fCBpc0FycmF5SW1wbChsYW5lKSkgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiJXMuc3RhdGU6IG11c3QgYmUgc2V0IHRvIGFuIG9iamVjdCBvciBudWxsXCIsIHN0YXRlKTtcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmdldENoaWxkQ29udGV4dCAmJlxuICAgICAgICAgIFwib2JqZWN0XCIgIT09IHR5cGVvZiBDb21wb25lbnQuY2hpbGRDb250ZXh0VHlwZXMgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlcy5nZXRDaGlsZENvbnRleHQoKTogY2hpbGRDb250ZXh0VHlwZXMgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvIHVzZSBnZXRDaGlsZENvbnRleHQoKS5cIixcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgX2luc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICBfaW5zdGFuY2UucHJvcHMgPSBuZXh0UHJvcHM7XG4gICAgICAgIF9pbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIF9pbnN0YW5jZS5yZWZzID0ge307XG4gICAgICAgIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHN0YXRlID0gQ29tcG9uZW50LmNvbnRleHRUeXBlO1xuICAgICAgICBfaW5zdGFuY2UuY29udGV4dCA9XG4gICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHN0YXRlICYmIG51bGwgIT09IHN0YXRlXG4gICAgICAgICAgICA/IHJlYWRDb250ZXh0KHN0YXRlKVxuICAgICAgICAgICAgOiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgICAgIF9pbnN0YW5jZS5zdGF0ZSA9PT0gbmV4dFByb3BzICYmXG4gICAgICAgICAgKChzdGF0ZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiQ29tcG9uZW50XCIpLFxuICAgICAgICAgIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmhhcyhzdGF0ZSkgfHxcbiAgICAgICAgICAgIChkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZS5hZGQoc3RhdGUpLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCIlczogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFzc2lnbiBwcm9wcyBkaXJlY3RseSB0byBzdGF0ZSBiZWNhdXNlIHVwZGF0ZXMgdG8gcHJvcHMgd29uJ3QgYmUgcmVmbGVjdGVkIGluIHN0YXRlLiBJbiBtb3N0IGNhc2VzLCBpdCBpcyBiZXR0ZXIgdG8gdXNlIHByb3BzIGRpcmVjdGx5LlwiLFxuICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgKSkpO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TGVnYWN5TW9kZSAmJlxuICAgICAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICBfaW5zdGFuY2VcbiAgICAgICAgICApO1xuICAgICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyhcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICBfaW5zdGFuY2VcbiAgICAgICAgKTtcbiAgICAgICAgX2luc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgc3RhdGUgPSBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBzdGF0ZSAmJlxuICAgICAgICAgIChhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICBuZXh0UHJvcHNcbiAgICAgICAgICApLFxuICAgICAgICAgIChfaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKSk7XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgfHxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgfHxcbiAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgJiZcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQpIHx8XG4gICAgICAgICAgKChzdGF0ZSA9IF9pbnN0YW5jZS5zdGF0ZSksXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgICAgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCgpLFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgICBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpLFxuICAgICAgICAgIHN0YXRlICE9PSBfaW5zdGFuY2Uuc3RhdGUgJiZcbiAgICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIiVzLmNvbXBvbmVudFdpbGxNb3VudCgpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gdGhpcy5zdGF0ZSBpcyBkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC5cIixcbiAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcih3b3JrSW5Qcm9ncmVzcykgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKFxuICAgICAgICAgICAgICBfaW5zdGFuY2UsXG4gICAgICAgICAgICAgIF9pbnN0YW5jZS5zdGF0ZSxcbiAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIF9pbnN0YW5jZSwgcmVuZGVyTGFuZXMpLFxuICAgICAgICAgIHN1c3BlbmRJZlVwZGF0ZVJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24oKSxcbiAgICAgICAgICAoX2luc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSkpO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgJiZcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDE5NDMwOCk7XG4gICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTM0MjE3NzI4KTtcbiAgICAgICAgX2luc3RhbmNlID0gITA7XG4gICAgICB9IGVsc2UgaWYgKG51bGwgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgX2luc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICB2YXIgdW5yZXNvbHZlZE9sZFByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgbGFuZSA9IHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKENvbXBvbmVudCwgdW5yZXNvbHZlZE9sZFByb3BzKTtcbiAgICAgICAgX2luc3RhbmNlLnByb3BzID0gbGFuZTtcbiAgICAgICAgdmFyIG9sZENvbnRleHQgPSBfaW5zdGFuY2UuY29udGV4dDtcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9IENvbXBvbmVudC5jb250ZXh0VHlwZTtcbiAgICAgICAgc3RhdGUgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBmb3VuZFdpbGxVcGRhdGVOYW1lICYmXG4gICAgICAgICAgbnVsbCAhPT0gZm91bmRXaWxsVXBkYXRlTmFtZSAmJlxuICAgICAgICAgIChzdGF0ZSA9IHJlYWRDb250ZXh0KGZvdW5kV2lsbFVwZGF0ZU5hbWUpKTtcbiAgICAgICAgbmV3QXBpTmFtZSA9IENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPVxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0FwaU5hbWUgfHxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU7XG4gICAgICAgIHVucmVzb2x2ZWRPbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyAhPT0gdW5yZXNvbHZlZE9sZFByb3BzO1xuICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lIHx8XG4gICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAmJlxuICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMpIHx8XG4gICAgICAgICAgKCh1bnJlc29sdmVkT2xkUHJvcHMgfHwgb2xkQ29udGV4dCAhPT0gc3RhdGUpICYmXG4gICAgICAgICAgICBjYWxsQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIF9pbnN0YW5jZSxcbiAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIGhhc0ZvcmNlVXBkYXRlID0gITE7XG4gICAgICAgIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIF9pbnN0YW5jZS5zdGF0ZSA9IG9sZFN0YXRlO1xuICAgICAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgX2luc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHN1c3BlbmRJZlVwZGF0ZVJlYWRGcm9tRW50YW5nbGVkQXN5bmNBY3Rpb24oKTtcbiAgICAgICAgb2xkQ29udGV4dCA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHVucmVzb2x2ZWRPbGRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gb2xkQ29udGV4dCB8fCBoYXNGb3JjZVVwZGF0ZVxuICAgICAgICAgID8gKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG5ld0FwaU5hbWUgJiZcbiAgICAgICAgICAgICAgKGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBuZXdBcGlOYW1lLFxuICAgICAgICAgICAgICAgIG5leHRQcm9wc1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAob2xkQ29udGV4dCA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpKSxcbiAgICAgICAgICAgIChsYW5lID1cbiAgICAgICAgICAgICAgaGFzRm9yY2VVcGRhdGUgfHxcbiAgICAgICAgICAgICAgY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUoXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgIGxhbmUsXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgIG9sZFN0YXRlLFxuICAgICAgICAgICAgICAgIG9sZENvbnRleHQsXG4gICAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgPyAoZm91bmRXaWxsVXBkYXRlTmFtZSB8fFxuICAgICAgICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQpIHx8XG4gICAgICAgICAgICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgICAgICAgICAgICBfaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCksXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgICAgICAgICAgICBfaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCgpKSxcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgJiZcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MTk0MzA4KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdEVmZmVjdHNNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTM0MjE3NzI4KSlcbiAgICAgICAgICAgICAgOiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ICYmXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDE5NDMwOCksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RFZmZlY3RzTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEzNDIxNzcyOCksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXh0UHJvcHMpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gb2xkQ29udGV4dCkpLFxuICAgICAgICAgICAgKF9pbnN0YW5jZS5wcm9wcyA9IG5leHRQcm9wcyksXG4gICAgICAgICAgICAoX2luc3RhbmNlLnN0YXRlID0gb2xkQ29udGV4dCksXG4gICAgICAgICAgICAoX2luc3RhbmNlLmNvbnRleHQgPSBzdGF0ZSksXG4gICAgICAgICAgICAoX2luc3RhbmNlID0gbGFuZSkpXG4gICAgICAgICAgOiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ICYmXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MTk0MzA4KSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0RWZmZWN0c01vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEzNDIxNzcyOCksXG4gICAgICAgICAgICAoX2luc3RhbmNlID0gITEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9pbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9IHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKENvbXBvbmVudCwgc3RhdGUpO1xuICAgICAgICBfaW5zdGFuY2UucHJvcHMgPSBmb3VuZFdpbGxVcGRhdGVOYW1lO1xuICAgICAgICBuZXdBcGlOYW1lID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgICBvbGRTdGF0ZSA9IF9pbnN0YW5jZS5jb250ZXh0O1xuICAgICAgICBvbGRDb250ZXh0ID0gQ29tcG9uZW50LmNvbnRleHRUeXBlO1xuICAgICAgICBsYW5lID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygb2xkQ29udGV4dCAmJlxuICAgICAgICAgIG51bGwgIT09IG9sZENvbnRleHQgJiZcbiAgICAgICAgICAobGFuZSA9IHJlYWRDb250ZXh0KG9sZENvbnRleHQpKTtcbiAgICAgICAgdW5yZXNvbHZlZE9sZFByb3BzID0gQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgICAgICAgKG9sZENvbnRleHQgPVxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHVucmVzb2x2ZWRPbGRQcm9wcyB8fFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSkgfHxcbiAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzICYmXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcykgfHxcbiAgICAgICAgICAoKHN0YXRlICE9PSBuZXdBcGlOYW1lIHx8IG9sZFN0YXRlICE9PSBsYW5lKSAmJlxuICAgICAgICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBfaW5zdGFuY2UsXG4gICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgbGFuZVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIGhhc0ZvcmNlVXBkYXRlID0gITE7XG4gICAgICAgIG9sZFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgX2luc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gICAgICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV4dFByb3BzLCBfaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgc3VzcGVuZElmVXBkYXRlUmVhZEZyb21FbnRhbmdsZWRBc3luY0FjdGlvbigpO1xuICAgICAgICB2YXIgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICBzdGF0ZSAhPT0gbmV3QXBpTmFtZSB8fFxuICAgICAgICBvbGRTdGF0ZSAhPT0gbmV3U3RhdGUgfHxcbiAgICAgICAgaGFzRm9yY2VVcGRhdGUgfHxcbiAgICAgICAgKG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50LmRlcGVuZGVuY2llcyAmJlxuICAgICAgICAgIGNoZWNrSWZDb250ZXh0Q2hhbmdlZChjdXJyZW50LmRlcGVuZGVuY2llcykpXG4gICAgICAgICAgPyAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdW5yZXNvbHZlZE9sZFByb3BzICYmXG4gICAgICAgICAgICAgIChhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyhcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgdW5yZXNvbHZlZE9sZFByb3BzLFxuICAgICAgICAgICAgICAgIG5leHRQcm9wc1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAobmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKSksXG4gICAgICAgICAgICAoZm91bmRXaWxsVXBkYXRlTmFtZSA9XG4gICAgICAgICAgICAgIGhhc0ZvcmNlVXBkYXRlIHx8XG4gICAgICAgICAgICAgIGNoZWNrU2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lLFxuICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICBvbGRTdGF0ZSxcbiAgICAgICAgICAgICAgICBuZXdTdGF0ZSxcbiAgICAgICAgICAgICAgICBsYW5lXG4gICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgKG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50LmRlcGVuZGVuY2llcyAmJlxuICAgICAgICAgICAgICAgIGNoZWNrSWZDb250ZXh0Q2hhbmdlZChjdXJyZW50LmRlcGVuZGVuY2llcykpKVxuICAgICAgICAgICAgICA/IChvbGRDb250ZXh0IHx8XG4gICAgICAgICAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIF9pbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlKG5leHRQcm9wcywgbmV3U3RhdGUsIGxhbmUpLFxuICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIF9pbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgbGFuZVxuICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlICYmXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNCksXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2luc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlICYmXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTAyNCkpXG4gICAgICAgICAgICAgIDogKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIF9pbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgfHxcbiAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PT0gY3VycmVudC5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgICAgICAgICAgIG9sZFN0YXRlID09PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNCksXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIHx8XG4gICAgICAgICAgICAgICAgICAoc3RhdGUgPT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgICAgICAgICAgICBvbGRTdGF0ZSA9PT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB8fFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEwMjQpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbmV4dFByb3BzKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlKSksXG4gICAgICAgICAgICAoX2luc3RhbmNlLnByb3BzID0gbmV4dFByb3BzKSxcbiAgICAgICAgICAgIChfaW5zdGFuY2Uuc3RhdGUgPSBuZXdTdGF0ZSksXG4gICAgICAgICAgICAoX2luc3RhbmNlLmNvbnRleHQgPSBsYW5lKSxcbiAgICAgICAgICAgIChfaW5zdGFuY2UgPSBmb3VuZFdpbGxVcGRhdGVOYW1lKSlcbiAgICAgICAgICA6IChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBfaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlIHx8XG4gICAgICAgICAgICAgIChzdGF0ZSA9PT0gY3VycmVudC5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgICAgICAgb2xkU3RhdGUgPT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkgfHxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpLFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX2luc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIHx8XG4gICAgICAgICAgICAgIChzdGF0ZSA9PT0gY3VycmVudC5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgICAgICAgb2xkU3RhdGUgPT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkgfHxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEwMjQpLFxuICAgICAgICAgICAgKF9pbnN0YW5jZSA9ICExKSk7XG4gICAgICB9XG4gICAgICBsYW5lID0gX2luc3RhbmNlO1xuICAgICAgbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBzdGF0ZSA9IDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCk7XG4gICAgICBpZiAobGFuZSB8fCBzdGF0ZSkge1xuICAgICAgICBsYW5lID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICBzZXRDdXJyZW50RmliZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBpZiAoc3RhdGUgJiYgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcilcbiAgICAgICAgICAoQ29tcG9uZW50ID0gbnVsbCksIChwcm9maWxlclN0YXJ0VGltZSA9IC0xKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0YXJ0ZWQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIENvbXBvbmVudCA9IGNhbGxSZW5kZXJJbkRFVihsYW5lKTtcbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUpIHtcbiAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCEwKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNhbGxSZW5kZXJJbkRFVihsYW5lKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIHNldElzU3RyaWN0TW9kZUZvckRldnRvb2xzKCExKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgbWFya0NvbXBvbmVudFJlbmRlclN0b3BwZWQoKTtcbiAgICAgICAgfVxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxO1xuICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIHN0YXRlXG4gICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMoXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICBjdXJyZW50LmNoaWxkLFxuICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZWNvbmNpbGVDaGlsZEZpYmVycyhcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICkpKVxuICAgICAgICAgIDogcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVuZGVyTGFuZXMpO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbGFuZS5zdGF0ZTtcbiAgICAgICAgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGN1cnJlbnQgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgKTtcbiAgICAgIHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgX2luc3RhbmNlICYmXG4gICAgICAgIHJlbmRlckxhbmVzLnByb3BzICE9PSBuZXh0UHJvcHMgJiZcbiAgICAgICAgKGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgfHxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJJdCBsb29rcyBsaWtlICVzIGlzIHJlYXNzaWduaW5nIGl0cyBvd24gYHRoaXMucHJvcHNgIHdoaWxlIHJlbmRlcmluZy4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBjYW4gbGVhZCB0byBjb25mdXNpbmcgYnVncy5cIixcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIod29ya0luUHJvZ3Jlc3MpIHx8IFwiYSBjb21wb25lbnRcIlxuICAgICAgICAgICksXG4gICAgICAgIChkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gITApKTtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudEhvc3RSb290V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIG5leHRDaGlsZHJlbixcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAyNTY7XG4gICAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KSB7XG4gICAgICBDb21wb25lbnQgJiZcbiAgICAgICAgQ29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVzICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJjaGlsZENvbnRleHRUeXBlcyBjYW5ub3QgYmUgZGVmaW5lZCBvbiBhIGZ1bmN0aW9uIGNvbXBvbmVudC5cXG4gICVzLmNoaWxkQ29udGV4dFR5cGVzID0gLi4uXCIsXG4gICAgICAgICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8IFwiQ29tcG9uZW50XCJcbiAgICAgICAgKTtcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgJiZcbiAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcyA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShDb21wb25lbnQpIHx8IFwiVW5rbm93blwiKSxcbiAgICAgICAgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudFt3b3JrSW5Qcm9ncmVzc10gfHxcbiAgICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXM6IEZ1bmN0aW9uIGNvbXBvbmVudHMgZG8gbm90IHN1cHBvcnQgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLlwiLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICApLFxuICAgICAgICAgIChkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W3dvcmtJblByb2dyZXNzXSA9XG4gICAgICAgICAgICAhMCkpKTtcbiAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBDb21wb25lbnQuY29udGV4dFR5cGUgJiZcbiAgICAgICAgbnVsbCAhPT0gQ29tcG9uZW50LmNvbnRleHRUeXBlICYmXG4gICAgICAgICgoQ29tcG9uZW50ID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKENvbXBvbmVudCkgfHwgXCJVbmtub3duXCIpLFxuICAgICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnRbQ29tcG9uZW50XSB8fFxuICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlczogRnVuY3Rpb24gY29tcG9uZW50cyBkbyBub3Qgc3VwcG9ydCBjb250ZXh0VHlwZS5cIixcbiAgICAgICAgICAgIENvbXBvbmVudFxuICAgICAgICAgICksXG4gICAgICAgICAgKGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudFtDb21wb25lbnRdID0gITApKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykge1xuICAgICAgcmV0dXJuIHsgYmFzZUxhbmVzOiByZW5kZXJMYW5lcywgY2FjaGVQb29sOiBnZXRTdXNwZW5kZWRDYWNoZSgpIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFJlbWFpbmluZ1dvcmtJblByaW1hcnlUcmVlKFxuICAgICAgY3VycmVudCxcbiAgICAgIHByaW1hcnlUcmVlRGlkRGVmZXIsXG4gICAgICByZW5kZXJMYW5lc1xuICAgICkge1xuICAgICAgY3VycmVudCA9IG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50LmNoaWxkTGFuZXMgJiB+cmVuZGVyTGFuZXMgOiAwO1xuICAgICAgcHJpbWFyeVRyZWVEaWREZWZlciAmJiAoY3VycmVudCB8PSB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSk7XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gICAgICB2YXIgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxO1xuICAgICAgdmFyIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgc2hvdWxkU3VzcGVuZEltcGwod29ya0luUHJvZ3Jlc3MpICYmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpO1xuICAgICAgdmFyIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9tZXNzYWdlXzI1NTAgPSAhMTtcbiAgICAgIHZhciBkaWRTdXNwZW5kID0gMCAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KTtcbiAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTEgPSBkaWRTdXNwZW5kKSB8fFxuICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxID1cbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIG51bGwgPT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgICAgPyAhMVxuICAgICAgICAgICAgOiAwICE9PSAoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50ICYgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKSk7XG4gICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTEgJiZcbiAgICAgICAgKChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNTUwID0gITApLFxuICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gLTEyOSkpO1xuICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxID0gMCAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMzIpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gLTMzO1xuICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgaWYgKGlzSHlkcmF0aW5nKSB7XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjU1MFxuICAgICAgICAgICAgPyBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgICA6IHJldXNlU3VzcGVuc2VIYW5kbGVyT25TdGFjayh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgKGN1cnJlbnQgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlKVxuICAgICAgICAgICAgPyAoKHJlbmRlckxhbmVzID0gY2FuSHlkcmF0ZUh5ZHJhdGlvbkJvdW5kYXJ5KFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgcm9vdE9yU2luZ2xldG9uQ29udGV4dFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKHJlbmRlckxhbmVzID1cbiAgICAgICAgICAgICAgICBudWxsICE9PSByZW5kZXJMYW5lcyAmJiByZW5kZXJMYW5lcy5kYXRhICE9PSBBQ1RJVklUWV9TVEFSVF9EQVRBXG4gICAgICAgICAgICAgICAgICA/IHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgICA6IG51bGwpLFxuICAgICAgICAgICAgICBudWxsICE9PSByZW5kZXJMYW5lcyAmJlxuICAgICAgICAgICAgICAgICgoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxID0ge1xuICAgICAgICAgICAgICAgICAgZGVoeWRyYXRlZDogcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICB0cmVlQ29udGV4dDogZ2V0U3VzcGVuZGVkVHJlZUNvbnRleHQoKSxcbiAgICAgICAgICAgICAgICAgIHJldHJ5TGFuZTogNTM2ODcwOTEyLFxuICAgICAgICAgICAgICAgICAgaHlkcmF0aW9uRXJyb3JzOiBudWxsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPVxuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxKSxcbiAgICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxID1cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUZpYmVyRnJvbURlaHlkcmF0ZWRGcmFnbWVudChyZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTEucmV0dXJuID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MSksXG4gICAgICAgICAgICAgICAgKGh5ZHJhdGlvblBhcmVudEZpYmVyID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbCkpKVxuICAgICAgICAgICAgOiAocmVuZGVyTGFuZXMgPSBudWxsKTtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gcmVuZGVyTGFuZXMpXG4gICAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAgICh3YXJuTm9uSHlkcmF0ZWRJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3VycmVudCksXG4gICAgICAgICAgICAgIHRocm93T25IeWRyYXRpb25NaXNtYXRjaCh3b3JrSW5Qcm9ncmVzcykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKHJlbmRlckxhbmVzKVxuICAgICAgICAgICAgPyAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSAzMilcbiAgICAgICAgICAgIDogKHdvcmtJblByb2dyZXNzLmxhbmVzID0gNTM2ODcwOTEyKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmV4dFByaW1hcnlDaGlsZHJlbiA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyLmNoaWxkcmVuO1xuICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1MiA9XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIuZmFsbGJhY2s7XG4gICAgICAgIGlmIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNTUwKSB7XG4gICAgICAgICAgcmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gICAgICAgICAgbmV4dFByaW1hcnlDaGlsZHJlbiA9IG1vdW50V29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihcbiAgICAgICAgICAgIHsgbW9kZTogXCJoaWRkZW5cIiwgY2hpbGRyZW46IG5leHRQcmltYXJ5Q2hpbGRyZW4gfSxcbiAgICAgICAgICAgIG1vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoXG4gICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1MixcbiAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICAgIG5leHRQcmltYXJ5Q2hpbGRyZW4ucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgbmV4dFByaW1hcnlDaGlsZHJlbi5zaWJsaW5nID0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTI7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBuZXh0UHJpbWFyeUNoaWxkcmVuO1xuICAgICAgICAgIG5leHRQcmltYXJ5Q2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICBuZXh0UHJpbWFyeUNoaWxkcmVuLm1lbW9pemVkU3RhdGUgPVxuICAgICAgICAgICAgbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKTtcbiAgICAgICAgICBuZXh0UHJpbWFyeUNoaWxkcmVuLmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTEsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgICAgICAgcmV0dXJuIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyO1xuICAgICAgICB9XG4gICAgICAgIHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgIG5leHRQcmltYXJ5Q2hpbGRyZW5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICBpZiAobnVsbCAhPT0gcHJldlN0YXRlKSB7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfY29tcG9uZW50U3RhY2tfMjU1MyA9IHByZXZTdGF0ZS5kZWh5ZHJhdGVkO1xuICAgICAgICBpZiAobnVsbCAhPT0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI1NTMpIHtcbiAgICAgICAgICBpZiAoZGlkU3VzcGVuZClcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICYgMjU2XG4gICAgICAgICAgICAgID8gKHB1c2hQcmltYXJ5VHJlZVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0yNTcpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IHJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApKSlcbiAgICAgICAgICAgICAgOiBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgICAgICAgPyAocmV1c2VTdXNwZW5zZUhhbmRsZXJPblN0YWNrKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSBudWxsKSlcbiAgICAgICAgICAgICAgICA6IChyZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgKG5leHRQcmltYXJ5Q2hpbGRyZW4gPVxuICAgICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1Mi5mYWxsYmFjayksXG4gICAgICAgICAgICAgICAgICAobW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGUpLFxuICAgICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyID1cbiAgICAgICAgICAgICAgICAgICAgbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6IFwidmlzaWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyLmNoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBtb2RlXG4gICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgKG5leHRQcmltYXJ5Q2hpbGRyZW4gPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChcbiAgICAgICAgICAgICAgICAgICAgbmV4dFByaW1hcnlDaGlsZHJlbixcbiAgICAgICAgICAgICAgICAgICAgbW9kZSxcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgKG5leHRQcmltYXJ5Q2hpbGRyZW4uZmxhZ3MgfD0gMiksXG4gICAgICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIucmV0dXJuID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgKG5leHRQcmltYXJ5Q2hpbGRyZW4ucmV0dXJuID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyLnNpYmxpbmcgPVxuICAgICAgICAgICAgICAgICAgICBuZXh0UHJpbWFyeUNoaWxkcmVuKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyKSxcbiAgICAgICAgICAgICAgICAgIHJlY29uY2lsZUNoaWxkRmliZXJzKFxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC5jaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCksXG4gICAgICAgICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIubWVtb2l6ZWRTdGF0ZSA9XG4gICAgICAgICAgICAgICAgICAgIG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykpLFxuICAgICAgICAgICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyLmNoaWxkTGFuZXMgPVxuICAgICAgICAgICAgICAgICAgICBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MSxcbiAgICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUiksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSBuZXh0UHJpbWFyeUNoaWxkcmVuKSk7XG4gICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAocHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIHdhcm5JZkh5ZHJhdGluZygpLFxuICAgICAgICAgICAgaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soXG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNTUzXG4gICAgICAgICAgICApKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxID1cbiAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI1NTMubmV4dFNpYmxpbmcgJiZcbiAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI1NTMubmV4dFNpYmxpbmcuZGF0YXNldDtcbiAgICAgICAgICAgIGlmIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTEpIHtcbiAgICAgICAgICAgICAgbmV4dFByaW1hcnlDaGlsZHJlbiA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MS5kZ3N0O1xuICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MS5tc2c7XG4gICAgICAgICAgICAgIG1vZGUgPSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTEuc3RjaztcbiAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudFN0YWNrID0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxLmNzdGNrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjU1MCA9IG1lc3NhZ2U7XG4gICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTEgPSBuZXh0UHJpbWFyeUNoaWxkcmVuO1xuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIgPSBtb2RlO1xuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI1NTMgPSBjb21wb25lbnRTdGFjaztcbiAgICAgICAgICAgIG5leHRQcmltYXJ5Q2hpbGRyZW4gPSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfbWVzc2FnZV8yNTUwO1xuICAgICAgICAgICAgbW9kZSA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNTUzO1xuICAgICAgICAgICAgbmV4dFByaW1hcnlDaGlsZHJlbiA9IG5leHRQcmltYXJ5Q2hpbGRyZW5cbiAgICAgICAgICAgICAgPyBFcnJvcihuZXh0UHJpbWFyeUNoaWxkcmVuKVxuICAgICAgICAgICAgICA6IEVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJUaGUgc2VydmVyIGNvdWxkIG5vdCBmaW5pc2ggdGhpcyBTdXNwZW5zZSBib3VuZGFyeSwgbGlrZWx5IGR1ZSB0byBhbiBlcnJvciBkdXJpbmcgc2VydmVyIHJlbmRlcmluZy4gU3dpdGNoZWQgdG8gY2xpZW50IHJlbmRlcmluZy5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBuZXh0UHJpbWFyeUNoaWxkcmVuLnN0YWNrID1cbiAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIgfHwgXCJcIjtcbiAgICAgICAgICAgIG5leHRQcmltYXJ5Q2hpbGRyZW4uZGlnZXN0ID0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxO1xuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxID1cbiAgICAgICAgICAgICAgdm9pZCAwID09PSBtb2RlID8gbnVsbCA6IG1vZGU7XG4gICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1MiA9IHtcbiAgICAgICAgICAgICAgdmFsdWU6IG5leHRQcmltYXJ5Q2hpbGRyZW4sXG4gICAgICAgICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgICAgICAgc3RhY2s6IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTEgJiZcbiAgICAgICAgICAgICAgQ2FwdHVyZWRTdGFja3Muc2V0KFxuICAgICAgICAgICAgICAgIG5leHRQcmltYXJ5Q2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHF1ZXVlSHlkcmF0aW9uRXJyb3IoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSByZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAoZGlkUmVjZWl2ZVVwZGF0ZSB8fFxuICAgICAgICAgICAgICBwcm9wYWdhdGVQYXJlbnRDb250ZXh0Q2hhbmdlcyhcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxID1cbiAgICAgICAgICAgICAgMCAhPT0gKHJlbmRlckxhbmVzICYgY3VycmVudC5jaGlsZExhbmVzKSksXG4gICAgICAgICAgICBkaWRSZWNlaXZlVXBkYXRlIHx8IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MSA9IHdvcmtJblByb2dyZXNzUm9vdDtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbnVsbCAhPT0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxICYmXG4gICAgICAgICAgICAgICgoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIgPSBnZXRCdW1wZWRMYW5lRm9ySHlkcmF0aW9uKFxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MSxcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgMCAhPT0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIgJiZcbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1MiAhPT0gcHJldlN0YXRlLnJldHJ5TGFuZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICAgICAgICgocHJldlN0YXRlLnJldHJ5TGFuZSA9IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyKSxcbiAgICAgICAgICAgICAgICBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTJcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihcbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9kaWdlc3RfMjU1MSxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1MlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaXNTdXNwZW5zZUluc3RhbmNlUGVuZGluZyhcbiAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI1NTNcbiAgICAgICAgICAgICkgfHwgcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSByZXRyeVN1c3BlbnNlQ29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgaXNTdXNwZW5zZUluc3RhbmNlUGVuZGluZyhcbiAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI1NTNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDE5MiksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZCksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gbnVsbCkpXG4gICAgICAgICAgICAgIDogKChjdXJyZW50ID0gcHJldlN0YXRlLnRyZWVDb250ZXh0KSxcbiAgICAgICAgICAgICAgICAobmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKFxuICAgICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI1NTMubmV4dFNpYmxpbmdcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAoaHlkcmF0aW9uUGFyZW50RmliZXIgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgKGlzSHlkcmF0aW5nID0gITApLFxuICAgICAgICAgICAgICAgIChoeWRyYXRpb25FcnJvcnMgPSBudWxsKSxcbiAgICAgICAgICAgICAgICAoZGlkU3VzcGVuZE9yRXJyb3JERVYgPSAhMSksXG4gICAgICAgICAgICAgICAgKGh5ZHJhdGlvbkRpZmZSb290REVWID0gbnVsbCksXG4gICAgICAgICAgICAgICAgKHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMSksXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICAgICAgcmVzdG9yZVN1c3BlbmRlZFRyZWVDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdXJyZW50KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1Mi5jaGlsZHJlblxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0MDk2KSk7XG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX21lc3NhZ2VfMjU1MClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICByZXVzZVN1c3BlbnNlSGFuZGxlck9uU3RhY2sod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgIChuZXh0UHJpbWFyeUNoaWxkcmVuID0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIuZmFsbGJhY2spLFxuICAgICAgICAgIChtb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZSksXG4gICAgICAgICAgKGNvbXBvbmVudFN0YWNrID0gY3VycmVudC5jaGlsZCksXG4gICAgICAgICAgKEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNTUzID1cbiAgICAgICAgICAgIGNvbXBvbmVudFN0YWNrLnNpYmxpbmcpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1MiA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKFxuICAgICAgICAgICAgY29tcG9uZW50U3RhY2ssXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1vZGU6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICAgIGNoaWxkcmVuOiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1Mi5jaGlsZHJlblxuICAgICAgICAgICAgfVxuICAgICAgICAgICkpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1Mi5zdWJ0cmVlRmxhZ3MgPVxuICAgICAgICAgICAgY29tcG9uZW50U3RhY2suc3VidHJlZUZsYWdzICYgNjUwMTE3MTIpLFxuICAgICAgICAgIG51bGwgIT09IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNTUzXG4gICAgICAgICAgICA/IChuZXh0UHJpbWFyeUNoaWxkcmVuID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoXG4gICAgICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI1NTMsXG4gICAgICAgICAgICAgICAgbmV4dFByaW1hcnlDaGlsZHJlblxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgOiAoKG5leHRQcmltYXJ5Q2hpbGRyZW4gPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChcbiAgICAgICAgICAgICAgICBuZXh0UHJpbWFyeUNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKG5leHRQcmltYXJ5Q2hpbGRyZW4uZmxhZ3MgfD0gMikpLFxuICAgICAgICAgIChuZXh0UHJpbWFyeUNoaWxkcmVuLnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIucmV0dXJuID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1Mi5zaWJsaW5nID0gbmV4dFByaW1hcnlDaGlsZHJlbiksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIpLFxuICAgICAgICAgIChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfc3RhY2tfMjU1MiA9IG5leHRQcmltYXJ5Q2hpbGRyZW4pLFxuICAgICAgICAgIChuZXh0UHJpbWFyeUNoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgIChtb2RlID0gY3VycmVudC5jaGlsZC5tZW1vaXplZFN0YXRlKSxcbiAgICAgICAgICBudWxsID09PSBtb2RlXG4gICAgICAgICAgICA/IChtb2RlID0gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSlcbiAgICAgICAgICAgIDogKChjb21wb25lbnRTdGFjayA9IG1vZGUuY2FjaGVQb29sKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gY29tcG9uZW50U3RhY2tcbiAgICAgICAgICAgICAgICA/ICgoSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI1NTMgPVxuICAgICAgICAgICAgICAgICAgICBDYWNoZUNvbnRleHQuX2N1cnJlbnRWYWx1ZSksXG4gICAgICAgICAgICAgICAgICAoY29tcG9uZW50U3RhY2sgPVxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRTdGFjay5wYXJlbnQgIT09XG4gICAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNTUzXG4gICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2NvbXBvbmVudFN0YWNrXzI1NTMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBvb2w6IEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9jb21wb25lbnRTdGFja18yNTUzXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgOiBjb21wb25lbnRTdGFjaykpXG4gICAgICAgICAgICAgICAgOiAoY29tcG9uZW50U3RhY2sgPSBnZXRTdXNwZW5kZWRDYWNoZSgpKSxcbiAgICAgICAgICAgICAgKG1vZGUgPSB7XG4gICAgICAgICAgICAgICAgYmFzZUxhbmVzOiBtb2RlLmJhc2VMYW5lcyB8IHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgIGNhY2hlUG9vbDogY29tcG9uZW50U3RhY2tcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIChuZXh0UHJpbWFyeUNoaWxkcmVuLm1lbW9pemVkU3RhdGUgPSBtb2RlKSxcbiAgICAgICAgICAobmV4dFByaW1hcnlDaGlsZHJlbi5jaGlsZExhbmVzID0gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgSlNDb21waWxlcl9vYmplY3RfaW5saW5lX2RpZ2VzdF8yNTUxLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApKSxcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVIpLFxuICAgICAgICAgIEpTQ29tcGlsZXJfb2JqZWN0X2lubGluZV9zdGFja18yNTUyXG4gICAgICAgICk7XG4gICAgICBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmVuZGVyTGFuZXMgPSBjdXJyZW50LmNoaWxkO1xuICAgICAgY3VycmVudCA9IHJlbmRlckxhbmVzLnNpYmxpbmc7XG4gICAgICByZW5kZXJMYW5lcyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKHJlbmRlckxhbmVzLCB7XG4gICAgICAgIG1vZGU6IFwidmlzaWJsZVwiLFxuICAgICAgICBjaGlsZHJlbjogSlNDb21waWxlcl9vYmplY3RfaW5saW5lX3N0YWNrXzI1NTIuY2hpbGRyZW5cbiAgICAgIH0pO1xuICAgICAgcmVuZGVyTGFuZXMucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICByZW5kZXJMYW5lcy5zaWJsaW5nID0gbnVsbDtcbiAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgKChKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTEgPSB3b3JrSW5Qcm9ncmVzcy5kZWxldGlvbnMpLFxuICAgICAgICBudWxsID09PSBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTFcbiAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZGVsZXRpb25zID0gW2N1cnJlbnRdKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxNikpXG4gICAgICAgICAgOiBKU0NvbXBpbGVyX29iamVjdF9pbmxpbmVfZGlnZXN0XzI1NTEucHVzaChjdXJyZW50KSk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlckxhbmVzO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gcmVuZGVyTGFuZXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1vdW50U3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbikge1xuICAgICAgcHJpbWFyeUNoaWxkcmVuID0gbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKFxuICAgICAgICB7IG1vZGU6IFwidmlzaWJsZVwiLCBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuIH0sXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1vZGVcbiAgICAgICk7XG4gICAgICBwcmltYXJ5Q2hpbGRyZW4ucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICByZXR1cm4gKHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkcmVuKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbW91bnRXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKG9mZnNjcmVlblByb3BzLCBtb2RlKSB7XG4gICAgICBvZmZzY3JlZW5Qcm9wcyA9IGNyZWF0ZUZpYmVyKDIyLCBvZmZzY3JlZW5Qcm9wcywgbnVsbCwgbW9kZSk7XG4gICAgICBvZmZzY3JlZW5Qcm9wcy5sYW5lcyA9IDA7XG4gICAgICBvZmZzY3JlZW5Qcm9wcy5zdGF0ZU5vZGUgPSB7XG4gICAgICAgIF92aXNpYmlsaXR5OiBPZmZzY3JlZW5WaXNpYmxlLFxuICAgICAgICBfcGVuZGluZ01hcmtlcnM6IG51bGwsXG4gICAgICAgIF9yZXRyeUNhY2hlOiBudWxsLFxuICAgICAgICBfdHJhbnNpdGlvbnM6IG51bGxcbiAgICAgIH07XG4gICAgICByZXR1cm4gb2Zmc2NyZWVuUHJvcHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJldHJ5U3VzcGVuc2VDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50LmNoaWxkLCBudWxsLCByZW5kZXJMYW5lcyk7XG4gICAgICBjdXJyZW50ID0gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlblxuICAgICAgKTtcbiAgICAgIGN1cnJlbnQuZmxhZ3MgfD0gMjtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlU3VzcGVuc2VXb3JrT25GaWJlcihmaWJlciwgcmVuZGVyTGFuZXMsIHByb3BhZ2F0aW9uUm9vdCkge1xuICAgICAgZmliZXIubGFuZXMgfD0gcmVuZGVyTGFuZXM7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuICAgICAgbnVsbCAhPT0gYWx0ZXJuYXRlICYmIChhbHRlcm5hdGUubGFuZXMgfD0gcmVuZGVyTGFuZXMpO1xuICAgICAgc2NoZWR1bGVDb250ZXh0V29ya09uUGFyZW50UGF0aChcbiAgICAgICAgZmliZXIucmV0dXJuLFxuICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgcHJvcGFnYXRpb25Sb290XG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUoXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIGlzQmFja3dhcmRzLFxuICAgICAgdGFpbCxcbiAgICAgIGxhc3RDb250ZW50Um93LFxuICAgICAgdGFpbE1vZGUsXG4gICAgICB0cmVlRm9ya0NvdW50XG4gICAgKSB7XG4gICAgICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgbnVsbCA9PT0gcmVuZGVyU3RhdGVcbiAgICAgICAgPyAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICAgICAgICAgIGlzQmFja3dhcmRzOiBpc0JhY2t3YXJkcyxcbiAgICAgICAgICAgIHJlbmRlcmluZzogbnVsbCxcbiAgICAgICAgICAgIHJlbmRlcmluZ1N0YXJ0VGltZTogMCxcbiAgICAgICAgICAgIGxhc3Q6IGxhc3RDb250ZW50Um93LFxuICAgICAgICAgICAgdGFpbDogdGFpbCxcbiAgICAgICAgICAgIHRhaWxNb2RlOiB0YWlsTW9kZSxcbiAgICAgICAgICAgIHRyZWVGb3JrQ291bnQ6IHRyZWVGb3JrQ291bnRcbiAgICAgICAgICB9KVxuICAgICAgICA6ICgocmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMgPSBpc0JhY2t3YXJkcyksXG4gICAgICAgICAgKHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG51bGwpLFxuICAgICAgICAgIChyZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPSAwKSxcbiAgICAgICAgICAocmVuZGVyU3RhdGUubGFzdCA9IGxhc3RDb250ZW50Um93KSxcbiAgICAgICAgICAocmVuZGVyU3RhdGUudGFpbCA9IHRhaWwpLFxuICAgICAgICAgIChyZW5kZXJTdGF0ZS50YWlsTW9kZSA9IHRhaWxNb2RlKSxcbiAgICAgICAgICAocmVuZGVyU3RhdGUudHJlZUZvcmtDb3VudCA9IHRyZWVGb3JrQ291bnQpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgcmV2ZWFsT3JkZXIgPSBuZXh0UHJvcHMucmV2ZWFsT3JkZXIsXG4gICAgICAgIHRhaWxNb2RlID0gbmV4dFByb3BzLnRhaWwsXG4gICAgICAgIG5ld0NoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuLFxuICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgICAobmV4dFByb3BzID0gMCAhPT0gKHN1c3BlbnNlQ29udGV4dCAmIEZvcmNlU3VzcGVuc2VGYWxsYmFjaykpXG4gICAgICAgID8gKChzdXNwZW5zZUNvbnRleHQgPVxuICAgICAgICAgICAgKHN1c3BlbnNlQ29udGV4dCAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrKSB8XG4gICAgICAgICAgICBGb3JjZVN1c3BlbnNlRmFsbGJhY2spLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjgpKVxuICAgICAgICA6IChzdXNwZW5zZUNvbnRleHQgJj0gU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2spO1xuICAgICAgcHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBzdXNwZW5zZUNvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHN1c3BlbnNlQ29udGV4dCA9IG51bGwgPT0gcmV2ZWFsT3JkZXIgPyBcIm51bGxcIiA6IHJldmVhbE9yZGVyO1xuICAgICAgaWYgKFxuICAgICAgICBcImZvcndhcmRzXCIgIT09IHJldmVhbE9yZGVyICYmXG4gICAgICAgIFwidW5zdGFibGVfbGVnYWN5LWJhY2t3YXJkc1wiICE9PSByZXZlYWxPcmRlciAmJlxuICAgICAgICBcInRvZ2V0aGVyXCIgIT09IHJldmVhbE9yZGVyICYmXG4gICAgICAgIFwiaW5kZXBlbmRlbnRcIiAhPT0gcmV2ZWFsT3JkZXIgJiZcbiAgICAgICAgIWRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3N1c3BlbnNlQ29udGV4dF1cbiAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgICgoZGlkV2FybkFib3V0UmV2ZWFsT3JkZXJbc3VzcGVuc2VDb250ZXh0XSA9ICEwKSwgbnVsbCA9PSByZXZlYWxPcmRlcilcbiAgICAgICAgKVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAnVGhlIGRlZmF1bHQgZm9yIHRoZSA8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPVwiLi4uXCI+IHByb3AgaXMgY2hhbmdpbmcuIFRvIGJlIGZ1dHVyZSBjb21wYXRpYmxlIHlvdSBtdXN0IGV4cGxpY3RseSBzcGVjaWZ5IGVpdGhlciBcImluZGVwZW5kZW50XCIgKHRoZSBjdXJyZW50IGRlZmF1bHQpLCBcInRvZ2V0aGVyXCIsIFwiZm9yd2FyZHNcIiBvciBcImxlZ2FjeV91bnN0YWJsZS1iYWNrd2FyZHNcIi4nXG4gICAgICAgICAgKTtcbiAgICAgICAgZWxzZSBpZiAoXCJiYWNrd2FyZHNcIiA9PT0gcmV2ZWFsT3JkZXIpXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICdUaGUgcmVuZGVyaW5nIG9yZGVyIG9mIDxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9XCJiYWNrd2FyZHNcIj4gaXMgY2hhbmdpbmcuIFRvIGJlIGZ1dHVyZSBjb21wYXRpYmxlIHlvdSBtdXN0IHNwZWNpZnkgcmV2ZWFsT3JkZXI9XCJsZWdhY3lfdW5zdGFibGUtYmFja3dhcmRzXCIgaW5zdGVhZC4nXG4gICAgICAgICAgKTtcbiAgICAgICAgZWxzZSBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHJldmVhbE9yZGVyKVxuICAgICAgICAgIHN3aXRjaCAocmV2ZWFsT3JkZXIudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcInRvZ2V0aGVyXCI6XG4gICAgICAgICAgICBjYXNlIFwiZm9yd2FyZHNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJiYWNrd2FyZHNcIjpcbiAgICAgICAgICAgIGNhc2UgXCJpbmRlcGVuZGVudFwiOlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICdcIiVzXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uIFVzZSBsb3dlcmNhc2UgXCIlc1wiIGluc3RlYWQuJyxcbiAgICAgICAgICAgICAgICByZXZlYWxPcmRlcixcbiAgICAgICAgICAgICAgICByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImZvcndhcmRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJiYWNrd2FyZFwiOlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICdcIiVzXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uIFJlYWN0IHVzZXMgdGhlIC1zIHN1ZmZpeCBpbiB0aGUgc3BlbGxpbmcuIFVzZSBcIiVzc1wiIGluc3RlYWQuJyxcbiAgICAgICAgICAgICAgICByZXZlYWxPcmRlcixcbiAgICAgICAgICAgICAgICByZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAnXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiBEaWQgeW91IG1lYW4gXCJpbmRlcGVuZGVudFwiLCBcInRvZ2V0aGVyXCIsIFwiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiPycsXG4gICAgICAgICAgICAgICAgcmV2ZWFsT3JkZXJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJyVzIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gRGlkIHlvdSBtZWFuIFwiaW5kZXBlbmRlbnRcIiwgXCJ0b2dldGhlclwiLCBcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIj8nLFxuICAgICAgICAgICAgcmV2ZWFsT3JkZXJcbiAgICAgICAgICApO1xuICAgICAgc3VzcGVuc2VDb250ZXh0ID0gbnVsbCA9PSB0YWlsTW9kZSA/IFwibnVsbFwiIDogdGFpbE1vZGU7XG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3N1c3BlbnNlQ29udGV4dF0pXG4gICAgICAgIGlmIChudWxsID09IHRhaWxNb2RlKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgXCJmb3J3YXJkc1wiID09PSByZXZlYWxPcmRlciB8fFxuICAgICAgICAgICAgXCJiYWNrd2FyZHNcIiA9PT0gcmV2ZWFsT3JkZXIgfHxcbiAgICAgICAgICAgIFwidW5zdGFibGVfbGVnYWN5LWJhY2t3YXJkc1wiID09PSByZXZlYWxPcmRlclxuICAgICAgICAgIClcbiAgICAgICAgICAgIChkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1tzdXNwZW5zZUNvbnRleHRdID0gITApLFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICdUaGUgZGVmYXVsdCBmb3IgdGhlIDxTdXNwZW5zZUxpc3QgdGFpbD1cIi4uLlwiPiBwcm9wIGlzIGNoYW5naW5nLiBUbyBiZSBmdXR1cmUgY29tcGF0aWJsZSB5b3UgbXVzdCBleHBsaWN0bHkgc3BlY2lmeSBlaXRoZXIgXCJ2aXNpYmxlXCIgKHRoZSBjdXJyZW50IGRlZmF1bHQpLCBcImNvbGxhcHNlZFwiIG9yIFwiaGlkZGVuXCIuJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICBcInZpc2libGVcIiAhPT0gdGFpbE1vZGUgJiZcbiAgICAgICAgICBcImNvbGxhcHNlZFwiICE9PSB0YWlsTW9kZSAmJlxuICAgICAgICAgIFwiaGlkZGVuXCIgIT09IHRhaWxNb2RlXG4gICAgICAgICAgICA/ICgoZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbc3VzcGVuc2VDb250ZXh0XSA9ICEwKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAnXCIlc1wiIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgdGFpbCBvbiA8U3VzcGVuc2VMaXN0IC8+LiBEaWQgeW91IG1lYW4gXCJ2aXNpYmxlXCIsIFwiY29sbGFwc2VkXCIgb3IgXCJoaWRkZW5cIj8nLFxuICAgICAgICAgICAgICAgIHRhaWxNb2RlXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgICA6IFwiZm9yd2FyZHNcIiAhPT0gcmV2ZWFsT3JkZXIgJiZcbiAgICAgICAgICAgICAgXCJiYWNrd2FyZHNcIiAhPT0gcmV2ZWFsT3JkZXIgJiZcbiAgICAgICAgICAgICAgXCJ1bnN0YWJsZV9sZWdhY3ktYmFja3dhcmRzXCIgIT09IHJldmVhbE9yZGVyICYmXG4gICAgICAgICAgICAgICgoZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbc3VzcGVuc2VDb250ZXh0XSA9ICEwKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAnPFN1c3BlbnNlTGlzdCB0YWlsPVwiJXNcIiAvPiBpcyBvbmx5IHZhbGlkIGlmIHJldmVhbE9yZGVyIGlzIFwiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiLiBEaWQgeW91IG1lYW4gdG8gc3BlY2lmeSByZXZlYWxPcmRlcj1cImZvcndhcmRzXCI/JyxcbiAgICAgICAgICAgICAgICB0YWlsTW9kZVxuICAgICAgICAgICAgICApKTtcbiAgICAgIGE6IGlmIChcbiAgICAgICAgKFwiZm9yd2FyZHNcIiA9PT0gcmV2ZWFsT3JkZXIgfHxcbiAgICAgICAgICBcImJhY2t3YXJkc1wiID09PSByZXZlYWxPcmRlciB8fFxuICAgICAgICAgIFwidW5zdGFibGVfbGVnYWN5LWJhY2t3YXJkc1wiID09PSByZXZlYWxPcmRlcikgJiZcbiAgICAgICAgdm9pZCAwICE9PSBuZXdDaGlsZHJlbiAmJlxuICAgICAgICBudWxsICE9PSBuZXdDaGlsZHJlbiAmJlxuICAgICAgICAhMSAhPT0gbmV3Q2hpbGRyZW5cbiAgICAgIClcbiAgICAgICAgaWYgKGlzQXJyYXlJbXBsKG5ld0NoaWxkcmVuKSlcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gMDtcbiAgICAgICAgICAgIHN1c3BlbnNlQ29udGV4dCA8IG5ld0NoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgIHN1c3BlbnNlQ29udGV4dCsrXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICF2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKFxuICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuW3N1c3BlbnNlQ29udGV4dF0sXG4gICAgICAgICAgICAgICAgc3VzcGVuc2VDb250ZXh0XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICgoc3VzcGVuc2VDb250ZXh0ID0gZ2V0SXRlcmF0b3JGbihuZXdDaGlsZHJlbikpLFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHN1c3BlbnNlQ29udGV4dClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKChzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZUNvbnRleHQuY2FsbChuZXdDaGlsZHJlbikpKVxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgdmFyIHN0ZXAgPSBzdXNwZW5zZUNvbnRleHQubmV4dCgpLCBfaSA9IDA7XG4gICAgICAgICAgICAgICFzdGVwLmRvbmU7XG4gICAgICAgICAgICAgIHN0ZXAgPSBzdXNwZW5zZUNvbnRleHQubmV4dCgpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKHN0ZXAudmFsdWUsIF9pKSkgYnJlYWsgYTtcbiAgICAgICAgICAgICAgX2krKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICdBIHNpbmdsZSByb3cgd2FzIHBhc3NlZCB0byBhIDxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9XCIlc1wiIC8+LiBUaGlzIGlzIG5vdCB1c2VmdWwgc2luY2UgaXQgbmVlZHMgbXVsdGlwbGUgcm93cy4gRGlkIHlvdSBtZWFuIHRvIHBhc3MgbXVsdGlwbGUgY2hpbGRyZW4gb3IgYW4gYXJyYXk/JyxcbiAgICAgICAgICAgIHJldmVhbE9yZGVyXG4gICAgICAgICAgKTtcbiAgICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgICAgaXNIeWRyYXRpbmdcbiAgICAgICAgPyAod2FybklmTm90SHlkcmF0aW5nKCksIChuZXdDaGlsZHJlbiA9IHRyZWVGb3JrQ291bnQpKVxuICAgICAgICA6IChuZXdDaGlsZHJlbiA9IDApO1xuICAgICAgaWYgKCFuZXh0UHJvcHMgJiYgbnVsbCAhPT0gY3VycmVudCAmJiAwICE9PSAoY3VycmVudC5mbGFncyAmIDEyOCkpXG4gICAgICAgIGE6IGZvciAoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkOyBudWxsICE9PSBjdXJyZW50OyApIHtcbiAgICAgICAgICBpZiAoMTMgPT09IGN1cnJlbnQudGFnKVxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgIHNjaGVkdWxlU3VzcGVuc2VXb3JrT25GaWJlcihjdXJyZW50LCByZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGVsc2UgaWYgKDE5ID09PSBjdXJyZW50LnRhZylcbiAgICAgICAgICAgIHNjaGVkdWxlU3VzcGVuc2VXb3JrT25GaWJlcihjdXJyZW50LCByZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGVsc2UgaWYgKG51bGwgIT09IGN1cnJlbnQuY2hpbGQpIHtcbiAgICAgICAgICAgIGN1cnJlbnQuY2hpbGQucmV0dXJuID0gY3VycmVudDtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmNoaWxkO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjdXJyZW50ID09PSB3b3JrSW5Qcm9ncmVzcykgYnJlYWsgYTtcbiAgICAgICAgICBmb3IgKDsgbnVsbCA9PT0gY3VycmVudC5zaWJsaW5nOyApIHtcbiAgICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50LnJldHVybiB8fCBjdXJyZW50LnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5yZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnQuc2libGluZy5yZXR1cm4gPSBjdXJyZW50LnJldHVybjtcbiAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgICBzd2l0Y2ggKHJldmVhbE9yZGVyKSB7XG4gICAgICAgIGNhc2UgXCJmb3J3YXJkc1wiOlxuICAgICAgICAgIHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgZm9yIChyZXZlYWxPcmRlciA9IG51bGw7IG51bGwgIT09IHJlbmRlckxhbmVzOyApXG4gICAgICAgICAgICAoY3VycmVudCA9IHJlbmRlckxhbmVzLmFsdGVybmF0ZSksXG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgICBudWxsID09PSBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudCkgJiZcbiAgICAgICAgICAgICAgICAocmV2ZWFsT3JkZXIgPSByZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzLnNpYmxpbmcpO1xuICAgICAgICAgIHJlbmRlckxhbmVzID0gcmV2ZWFsT3JkZXI7XG4gICAgICAgICAgbnVsbCA9PT0gcmVuZGVyTGFuZXNcbiAgICAgICAgICAgID8gKChyZXZlYWxPcmRlciA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbCkpXG4gICAgICAgICAgICA6ICgocmV2ZWFsT3JkZXIgPSByZW5kZXJMYW5lcy5zaWJsaW5nKSxcbiAgICAgICAgICAgICAgKHJlbmRlckxhbmVzLnNpYmxpbmcgPSBudWxsKSk7XG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAhMSxcbiAgICAgICAgICAgIHJldmVhbE9yZGVyLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICB0YWlsTW9kZSxcbiAgICAgICAgICAgIG5ld0NoaWxkcmVuXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImJhY2t3YXJkc1wiOlxuICAgICAgICBjYXNlIFwidW5zdGFibGVfbGVnYWN5LWJhY2t3YXJkc1wiOlxuICAgICAgICAgIHJlbmRlckxhbmVzID0gbnVsbDtcbiAgICAgICAgICByZXZlYWxPcmRlciA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgIGZvciAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsOyBudWxsICE9PSByZXZlYWxPcmRlcjsgKSB7XG4gICAgICAgICAgICBjdXJyZW50ID0gcmV2ZWFsT3JkZXIuYWx0ZXJuYXRlO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCA9PT0gZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmV2ZWFsT3JkZXI7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VycmVudCA9IHJldmVhbE9yZGVyLnNpYmxpbmc7XG4gICAgICAgICAgICByZXZlYWxPcmRlci5zaWJsaW5nID0gcmVuZGVyTGFuZXM7XG4gICAgICAgICAgICByZW5kZXJMYW5lcyA9IHJldmVhbE9yZGVyO1xuICAgICAgICAgICAgcmV2ZWFsT3JkZXIgPSBjdXJyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICEwLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgdGFpbE1vZGUsXG4gICAgICAgICAgICBuZXdDaGlsZHJlblxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ0b2dldGhlclwiOlxuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZShcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgITEsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICAgIG5ld0NoaWxkcmVuXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhcbiAgICAgIGN1cnJlbnQsXG4gICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBudWxsICE9PSBjdXJyZW50ICYmICh3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcyk7XG4gICAgICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzIHw9IHdvcmtJblByb2dyZXNzLmxhbmVzO1xuICAgICAgaWYgKDAgPT09IChyZW5kZXJMYW5lcyAmIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpKVxuICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChwcm9wYWdhdGVQYXJlbnRDb250ZXh0Q2hhbmdlcyhcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIDAgPT09IChyZW5kZXJMYW5lcyAmIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIG51bGw7XG4gICAgICBpZiAobnVsbCAhPT0gY3VycmVudCAmJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZCAhPT0gY3VycmVudC5jaGlsZClcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJSZXN1bWluZyB3b3JrIG5vdCB5ZXQgaW1wbGVtZW50ZWQuXCIpO1xuICAgICAgaWYgKG51bGwgIT09IHdvcmtJblByb2dyZXNzLmNoaWxkKSB7XG4gICAgICAgIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgcmVuZGVyTGFuZXMgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBjdXJyZW50LnBlbmRpbmdQcm9wcyk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyTGFuZXM7XG4gICAgICAgIGZvciAocmVuZGVyTGFuZXMucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7IG51bGwgIT09IGN1cnJlbnQuc2libGluZzsgKVxuICAgICAgICAgIChjdXJyZW50ID0gY3VycmVudC5zaWJsaW5nKSxcbiAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHJlbmRlckxhbmVzLnNpYmxpbmcgPVxuICAgICAgICAgICAgICBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBjdXJyZW50LnBlbmRpbmdQcm9wcykpLFxuICAgICAgICAgICAgKHJlbmRlckxhbmVzLnJldHVybiA9IHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmVuZGVyTGFuZXMuc2libGluZyA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0KGN1cnJlbnQsIHJlbmRlckxhbmVzKSB7XG4gICAgICBpZiAoMCAhPT0gKGN1cnJlbnQubGFuZXMgJiByZW5kZXJMYW5lcykpIHJldHVybiAhMDtcbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgICAgIHJldHVybiBudWxsICE9PSBjdXJyZW50ICYmIGNoZWNrSWZDb250ZXh0Q2hhbmdlZChjdXJyZW50KSA/ICEwIDogITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGF0dGVtcHRFYXJseUJhaWxvdXRJZk5vU2NoZWR1bGVkVXBkYXRlKFxuICAgICAgY3VycmVudCxcbiAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgcmVuZGVyTGFuZXNcbiAgICApIHtcbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBwdXNoSG9zdENvbnRhaW5lcihcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICApO1xuICAgICAgICAgIHB1c2hQcm92aWRlcihcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgQ2FjaGVDb250ZXh0LFxuICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcHVzaEhvc3RDb250YWluZXIoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBwdXNoUHJvdmlkZXIoXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLnZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAwICE9PSAocmVuZGVyTGFuZXMgJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKSAmJlxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDIwNDg7XG4gICAgICAgICAgdmFyIHN0YXRlTm9kZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgICBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gPSAtMDtcbiAgICAgICAgICBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gLTA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgaWYgKG51bGwgIT09IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KSxcbiAgICAgICAgICAgICAgcHVzaERlaHlkcmF0ZWRBY3Rpdml0eVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgc3RhdGVOb2RlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gc3RhdGVOb2RlKSB7XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gc3RhdGVOb2RlLmRlaHlkcmF0ZWQpXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KSxcbiAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoMCAhPT0gKHJlbmRlckxhbmVzICYgd29ya0luUHJvZ3Jlc3MuY2hpbGQuY2hpbGRMYW5lcykpXG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBwdXNoUHJpbWFyeVRyZWVTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgY3VycmVudCA9IGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsICE9PSBjdXJyZW50ID8gY3VycmVudC5zaWJsaW5nIDogbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHVzaFByaW1hcnlUcmVlU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICB2YXIgZGlkU3VzcGVuZEJlZm9yZSA9IDAgIT09IChjdXJyZW50LmZsYWdzICYgMTI4KTtcbiAgICAgICAgICBzdGF0ZU5vZGUgPSAwICE9PSAocmVuZGVyTGFuZXMgJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKTtcbiAgICAgICAgICBzdGF0ZU5vZGUgfHxcbiAgICAgICAgICAgIChwcm9wYWdhdGVQYXJlbnRDb250ZXh0Q2hhbmdlcyhcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAhMVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIChzdGF0ZU5vZGUgPSAwICE9PSAocmVuZGVyTGFuZXMgJiB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKSkpO1xuICAgICAgICAgIGlmIChkaWRTdXNwZW5kQmVmb3JlKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGVOb2RlKVxuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyODtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGlkU3VzcGVuZEJlZm9yZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgbnVsbCAhPT0gZGlkU3VzcGVuZEJlZm9yZSAmJlxuICAgICAgICAgICAgKChkaWRTdXNwZW5kQmVmb3JlLnJlbmRlcmluZyA9IG51bGwpLFxuICAgICAgICAgICAgKGRpZFN1c3BlbmRCZWZvcmUudGFpbCA9IG51bGwpLFxuICAgICAgICAgICAgKGRpZFN1c3BlbmRCZWZvcmUubGFzdEVmZmVjdCA9IG51bGwpKTtcbiAgICAgICAgICBwdXNoKFxuICAgICAgICAgICAgc3VzcGVuc2VTdGFja0N1cnNvcixcbiAgICAgICAgICAgIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoc3RhdGVOb2RlKSBicmVhaztcbiAgICAgICAgICBlbHNlIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSAwKSxcbiAgICAgICAgICAgIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHNcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHB1c2hQcm92aWRlcihcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgQ2FjaGVDb250ZXh0LFxuICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJlZ2luV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5fZGVidWdOZWVkc1JlbW91bnQgJiYgbnVsbCAhPT0gY3VycmVudCkge1xuICAgICAgICByZW5kZXJMYW5lcyA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmtleSxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnT3duZXIgfHwgbnVsbCxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tb2RlLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzXG4gICAgICAgICk7XG4gICAgICAgIHJlbmRlckxhbmVzLl9kZWJ1Z1N0YWNrID0gd29ya0luUHJvZ3Jlc3MuX2RlYnVnU3RhY2s7XG4gICAgICAgIHJlbmRlckxhbmVzLl9kZWJ1Z1Rhc2sgPSB3b3JrSW5Qcm9ncmVzcy5fZGVidWdUYXNrO1xuICAgICAgICB2YXIgcmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgICAgIGlmIChudWxsID09PSByZXR1cm5GaWJlcikgdGhyb3cgRXJyb3IoXCJDYW5ub3Qgc3dhcCB0aGUgcm9vdCBmaWJlci5cIik7XG4gICAgICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICAgICAgcmVuZGVyTGFuZXMuaW5kZXggPSB3b3JrSW5Qcm9ncmVzcy5pbmRleDtcbiAgICAgICAgcmVuZGVyTGFuZXMuc2libGluZyA9IHdvcmtJblByb2dyZXNzLnNpYmxpbmc7XG4gICAgICAgIHJlbmRlckxhbmVzLnJldHVybiA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICAgICAgcmVuZGVyTGFuZXMucmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuICAgICAgICByZW5kZXJMYW5lcy5fZGVidWdJbmZvID0gd29ya0luUHJvZ3Jlc3MuX2RlYnVnSW5mbztcbiAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzID09PSByZXR1cm5GaWJlci5jaGlsZClcbiAgICAgICAgICByZXR1cm5GaWJlci5jaGlsZCA9IHJlbmRlckxhbmVzO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgcHJldlNpYmxpbmcgPSByZXR1cm5GaWJlci5jaGlsZDtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gcHJldlNpYmxpbmcpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIkV4cGVjdGVkIHBhcmVudCB0byBoYXZlIGEgY2hpbGQuXCIpO1xuICAgICAgICAgIGZvciAoOyBwcmV2U2libGluZy5zaWJsaW5nICE9PSB3b3JrSW5Qcm9ncmVzczsgKVxuICAgICAgICAgICAgaWYgKCgocHJldlNpYmxpbmcgPSBwcmV2U2libGluZy5zaWJsaW5nKSwgbnVsbCA9PT0gcHJldlNpYmxpbmcpKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkV4cGVjdGVkIHRvIGZpbmQgdGhlIHByZXZpb3VzIHNpYmxpbmcuXCIpO1xuICAgICAgICAgIHByZXZTaWJsaW5nLnNpYmxpbmcgPSByZW5kZXJMYW5lcztcbiAgICAgICAgfVxuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyLmRlbGV0aW9ucztcbiAgICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICA/ICgocmV0dXJuRmliZXIuZGVsZXRpb25zID0gW2N1cnJlbnRdKSwgKHJldHVybkZpYmVyLmZsYWdzIHw9IDE2KSlcbiAgICAgICAgICA6IHdvcmtJblByb2dyZXNzLnB1c2goY3VycmVudCk7XG4gICAgICAgIHJlbmRlckxhbmVzLmZsYWdzIHw9IDI7XG4gICAgICAgIHJldHVybiByZW5kZXJMYW5lcztcbiAgICAgIH1cbiAgICAgIGlmIChudWxsICE9PSBjdXJyZW50KVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY3VycmVudC5tZW1vaXplZFByb3BzICE9PSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMgfHxcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSBjdXJyZW50LnR5cGVcbiAgICAgICAgKVxuICAgICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSAhMDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWNoZWNrU2NoZWR1bGVkVXBkYXRlT3JDb250ZXh0KGN1cnJlbnQsIHJlbmRlckxhbmVzKSAmJlxuICAgICAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KVxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChkaWRSZWNlaXZlVXBkYXRlID0gITEpLFxuICAgICAgICAgICAgICBhdHRlbXB0RWFybHlCYWlsb3V0SWZOb1NjaGVkdWxlZFVwZGF0ZShcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IDAgIT09IChjdXJyZW50LmZsYWdzICYgMTMxMDcyKSA/ICEwIDogITE7XG4gICAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gITE7XG4gICAgICAgIGlmICgocmV0dXJuRmliZXIgPSBpc0h5ZHJhdGluZykpXG4gICAgICAgICAgd2FybklmTm90SHlkcmF0aW5nKCksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSAwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMDQ4NTc2KSk7XG4gICAgICAgIHJldHVybkZpYmVyICYmXG4gICAgICAgICAgKChyZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLmluZGV4KSxcbiAgICAgICAgICB3YXJuSWZOb3RIeWRyYXRpbmcoKSxcbiAgICAgICAgICBwdXNoVHJlZUlkKHdvcmtJblByb2dyZXNzLCB0cmVlRm9ya0NvdW50LCByZXR1cm5GaWJlcikpO1xuICAgICAgfVxuICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSAwO1xuICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICBhOiBpZiAoXG4gICAgICAgICAgICAoKHJldHVybkZpYmVyID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzKSxcbiAgICAgICAgICAgIChjdXJyZW50ID0gY2FsbExhenlJbml0SW5ERVYod29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpKSxcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudCksXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjdXJyZW50KVxuICAgICAgICAgIClcbiAgICAgICAgICAgIHNob3VsZENvbnN0cnVjdChjdXJyZW50KVxuICAgICAgICAgICAgICA/ICgocmV0dXJuRmliZXIgPSByZXNvbHZlQ2xhc3NDb21wb25lbnRQcm9wcyhcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50YWcgPSAxKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQgPVxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQpKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSB1cGRhdGVDbGFzc0NvbXBvbmVudChcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKSkpXG4gICAgICAgICAgICAgIDogKCh3b3JrSW5Qcm9ncmVzcy50YWcgPSAwKSxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudCA9XG4gICAgICAgICAgICAgICAgICByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoY3VycmVudCkpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApKSk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodm9pZCAwICE9PSBjdXJyZW50ICYmIG51bGwgIT09IGN1cnJlbnQpXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoKHByZXZTaWJsaW5nID0gY3VycmVudC4kJHR5cGVvZiksXG4gICAgICAgICAgICAgICAgcHJldlNpYmxpbmcgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IDExO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50ID1cbiAgICAgICAgICAgICAgICAgIHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gdXBkYXRlRm9yd2FyZFJlZihcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByZXZTaWJsaW5nID09PSBSRUFDVF9NRU1PX1RZUEUpIHtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSAxNDtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHVwZGF0ZU1lbW9Db21wb25lbnQoXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBcIlwiO1xuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgY3VycmVudCAmJlxuICAgICAgICAgICAgICBjdXJyZW50LiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgJiZcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID1cbiAgICAgICAgICAgICAgICBcIiBEaWQgeW91IHdyYXAgYSBjb21wb25lbnQgaW4gUmVhY3QubGF6eSgpIG1vcmUgdGhhbiBvbmNlP1wiKTtcbiAgICAgICAgICAgIHJlbmRlckxhbmVzID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGN1cnJlbnQpIHx8IGN1cnJlbnQ7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJFbGVtZW50IHR5cGUgaXMgaW52YWxpZC4gUmVjZWl2ZWQgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG86IFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyArXG4gICAgICAgICAgICAgICAgXCIuIExhenkgZWxlbWVudCB0eXBlIG11c3QgcmVzb2x2ZSB0byBhIGNsYXNzIG9yIGZ1bmN0aW9uLlwiICtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy50eXBlKSxcbiAgICAgICAgICAgIChwcmV2U2libGluZyA9IHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIHVwZGF0ZUNsYXNzQ29tcG9uZW50KFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgIHByZXZTaWJsaW5nLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBhOiB7XG4gICAgICAgICAgICBwdXNoSG9zdENvbnRhaW5lcihcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiU2hvdWxkIGhhdmUgYSBjdXJyZW50IGZpYmVyLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgIHZhciBwcmV2U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgICAgcHJldlNpYmxpbmcgPSBwcmV2U3RhdGUuZWxlbWVudDtcbiAgICAgICAgICAgIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCByZXR1cm5GaWJlciwgbnVsbCwgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgICByZXR1cm5GaWJlciA9IG5leHRTdGF0ZS5jYWNoZTtcbiAgICAgICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ2FjaGVDb250ZXh0LCByZXR1cm5GaWJlcik7XG4gICAgICAgICAgICByZXR1cm5GaWJlciAhPT0gcHJldlN0YXRlLmNhY2hlICYmXG4gICAgICAgICAgICAgIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2VzKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIFtDYWNoZUNvbnRleHRdLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICEwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBzdXNwZW5kSWZVcGRhdGVSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm5GaWJlciA9IG5leHRTdGF0ZS5lbGVtZW50O1xuICAgICAgICAgICAgaWYgKHByZXZTdGF0ZS5pc0RlaHlkcmF0ZWQpXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoKHByZXZTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgaXNEZWh5ZHJhdGVkOiAhMSxcbiAgICAgICAgICAgICAgICAgIGNhY2hlOiBuZXh0U3RhdGUuY2FjaGVcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUuYmFzZVN0YXRlID0gcHJldlN0YXRlKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHByZXZTdGF0ZSksXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAyNTYpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gbW91bnRIb3N0Um9vdFdpdGhvdXRIeWRyYXRpbmcoXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHVybkZpYmVyICE9PSBwcmV2U2libGluZykge1xuICAgICAgICAgICAgICAgIHByZXZTaWJsaW5nID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoXG4gICAgICAgICAgICAgICAgICBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJUaGlzIHJvb3QgcmVjZWl2ZWQgYW4gZWFybHkgdXBkYXRlLCBiZWZvcmUgYW55dGhpbmcgd2FzIGFibGUgaHlkcmF0ZS4gU3dpdGNoZWQgdGhlIGVudGlyZSByb290IHRvIGNsaWVudCByZW5kZXJpbmcuXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcXVldWVIeWRyYXRpb25FcnJvcihwcmV2U2libGluZyk7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBtb3VudEhvc3RSb290V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudC5ub2RlVHlwZSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5ib2R5O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPVxuICAgICAgICAgICAgICAgICAgICAgIFwiSFRNTFwiID09PSBjdXJyZW50Lm5vZGVOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGN1cnJlbnQub3duZXJEb2N1bWVudC5ib2R5XG4gICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShjdXJyZW50LmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgaXNIeWRyYXRpbmcgPSAhMDtcbiAgICAgICAgICAgICAgICBoeWRyYXRpb25FcnJvcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIGRpZFN1c3BlbmRPckVycm9yREVWID0gITE7XG4gICAgICAgICAgICAgICAgaHlkcmF0aW9uRGlmZlJvb3RERVYgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMDtcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyA9IG1vdW50Q2hpbGRGaWJlcnMoXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmb3IgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVuZGVyTGFuZXM7IHJlbmRlckxhbmVzOyApXG4gICAgICAgICAgICAgICAgICAocmVuZGVyTGFuZXMuZmxhZ3MgPSAocmVuZGVyTGFuZXMuZmxhZ3MgJiAtMykgfCA0MDk2KSxcbiAgICAgICAgICAgICAgICAgICAgKHJlbmRlckxhbmVzID0gcmVuZGVyTGFuZXMuc2libGluZyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgICAgICAgICAgIGlmIChyZXR1cm5GaWJlciA9PT0gcHJldlNpYmxpbmcpIHtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgICAgICAgICA/IChyZW5kZXJMYW5lcyA9IGdldFJlc291cmNlKFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gcmVuZGVyTGFuZXMpXG4gICAgICAgICAgICAgICAgOiBpc0h5ZHJhdGluZyB8fFxuICAgICAgICAgICAgICAgICAgKChyZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLnR5cGUpLFxuICAgICAgICAgICAgICAgICAgKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMpLFxuICAgICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gcmVxdWlyZWRDb250ZXh0KFxuICAgICAgICAgICAgICAgICAgICByb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50XG4gICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9XG4gICAgICAgICAgICAgICAgICAgIGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm5GaWJlclxuICAgICAgICAgICAgICAgICAgICApLmNyZWF0ZUVsZW1lbnQocmVuZGVyTGFuZXMpKSxcbiAgICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlcltpbnRlcm5hbEluc3RhbmNlS2V5XSA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlcltpbnRlcm5hbFByb3BzS2V5XSA9IGN1cnJlbnQpLFxuICAgICAgICAgICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMocmV0dXJuRmliZXIsIHJlbmRlckxhbmVzLCBjdXJyZW50KSxcbiAgICAgICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUocmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IHJldHVybkZpYmVyKSlcbiAgICAgICAgICAgICAgOiAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGdldFJlc291cmNlKFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZVxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBudWxsID09PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgIGlzSHlkcmF0aW5nICYmXG4gICAgICAgICAgICAgICgocmV0dXJuRmliZXIgPSByZXF1aXJlZENvbnRleHQocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudCkpLFxuICAgICAgICAgICAgICAocHJldlNpYmxpbmcgPSBnZXRIb3N0Q29udGV4dCgpKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID1cbiAgICAgICAgICAgICAgICByZXNvbHZlU2luZ2xldG9uSW5zdGFuY2UoXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICBwcmV2U2libGluZyxcbiAgICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRPckVycm9yREVWIHx8XG4gICAgICAgICAgICAgICAgKChwcmV2U2libGluZyA9IGRpZmZIeWRyYXRlZFByb3BlcnRpZXMoXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgICAgICBwcmV2U2libGluZ1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IHByZXZTaWJsaW5nICYmXG4gICAgICAgICAgICAgICAgICAoYnVpbGRIeWRyYXRpb25EaWZmTm9kZSh3b3JrSW5Qcm9ncmVzcywgMCkuc2VydmVyUHJvcHMgPVxuICAgICAgICAgICAgICAgICAgICBwcmV2U2libGluZykpLFxuICAgICAgICAgICAgICAoaHlkcmF0aW9uUGFyZW50RmliZXIgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgIChyb290T3JTaW5nbGV0b25Db250ZXh0ID0gITApLFxuICAgICAgICAgICAgICAocHJldlNpYmxpbmcgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlKSxcbiAgICAgICAgICAgICAgaXNTaW5nbGV0b25TY29wZSh3b3JrSW5Qcm9ncmVzcy50eXBlKVxuICAgICAgICAgICAgICAgID8gKChwcmV2aW91c0h5ZHJhdGFibGVPbkVudGVyaW5nU2NvcGVkU2luZ2xldG9uID0gcHJldlNpYmxpbmcpLFxuICAgICAgICAgICAgICAgICAgKG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIuZmlyc3RDaGlsZFxuICAgICAgICAgICAgICAgICAgKSkpXG4gICAgICAgICAgICAgICAgOiAobmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IHByZXZTaWJsaW5nKSksXG4gICAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiYgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQxOTQzMDQpLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgaXNIeWRyYXRpbmcgJiZcbiAgICAgICAgICAgICAgKChwcmV2U3RhdGUgPSBnZXRIb3N0Q29udGV4dCgpKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gdmFsaWRhdGVET01OZXN0aW5nKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICAgICAgcHJldlN0YXRlLmFuY2VzdG9ySW5mb1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKHByZXZTaWJsaW5nID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSksXG4gICAgICAgICAgICAgIChuZXh0U3RhdGUgPSAhcHJldlNpYmxpbmcpIHx8XG4gICAgICAgICAgICAgICAgKChuZXh0U3RhdGUgPSBjYW5IeWRyYXRlSW5zdGFuY2UoXG4gICAgICAgICAgICAgICAgICBwcmV2U2libGluZyxcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgICAgICByb290T3JTaW5nbGV0b25Db250ZXh0XG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gbmV4dFN0YXRlXG4gICAgICAgICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gbmV4dFN0YXRlKSxcbiAgICAgICAgICAgICAgICAgICAgZGlkU3VzcGVuZE9yRXJyb3JERVYgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoKHByZXZTdGF0ZSA9IGRpZmZIeWRyYXRlZFByb3BlcnRpZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldlN0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcHJldlN0YXRlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoYnVpbGRIeWRyYXRpb25EaWZmTm9kZSh3b3JrSW5Qcm9ncmVzcywgMCkuc2VydmVyUHJvcHMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2U3RhdGUpKSxcbiAgICAgICAgICAgICAgICAgICAgKGh5ZHJhdGlvblBhcmVudEZpYmVyID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgICAobmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKFxuICAgICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZS5maXJzdENoaWxkXG4gICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAocm9vdE9yU2luZ2xldG9uQ29udGV4dCA9ICExKSxcbiAgICAgICAgICAgICAgICAgICAgKHByZXZTdGF0ZSA9ICEwKSlcbiAgICAgICAgICAgICAgICAgIDogKHByZXZTdGF0ZSA9ICExKSxcbiAgICAgICAgICAgICAgICAobmV4dFN0YXRlID0gIXByZXZTdGF0ZSkpLFxuICAgICAgICAgICAgICBuZXh0U3RhdGUgJiZcbiAgICAgICAgICAgICAgICAocmV0dXJuRmliZXIgJiZcbiAgICAgICAgICAgICAgICAgIHdhcm5Ob25IeWRyYXRlZEluc3RhbmNlKHdvcmtJblByb2dyZXNzLCBwcmV2U2libGluZyksXG4gICAgICAgICAgICAgICAgdGhyb3dPbkh5ZHJhdGlvbk1pc21hdGNoKHdvcmtJblByb2dyZXNzKSkpLFxuICAgICAgICAgICAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIChwcmV2U2libGluZyA9IHdvcmtJblByb2dyZXNzLnR5cGUpLFxuICAgICAgICAgICAgKHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyksXG4gICAgICAgICAgICAobmV4dFN0YXRlID0gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG51bGwpLFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gcHJldlN0YXRlLmNoaWxkcmVuKSxcbiAgICAgICAgICAgIHNob3VsZFNldFRleHRDb250ZW50KHByZXZTaWJsaW5nLCBwcmV2U3RhdGUpXG4gICAgICAgICAgICAgID8gKHJldHVybkZpYmVyID0gbnVsbClcbiAgICAgICAgICAgICAgOiBudWxsICE9PSBuZXh0U3RhdGUgJiZcbiAgICAgICAgICAgICAgICBzaG91bGRTZXRUZXh0Q29udGVudChwcmV2U2libGluZywgbmV4dFN0YXRlKSAmJlxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAzMiksXG4gICAgICAgICAgICBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgICgocHJldlNpYmxpbmcgPSByZW5kZXJXaXRoSG9va3MoXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBUcmFuc2l0aW9uQXdhcmVIb3N0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgKEhvc3RUcmFuc2l0aW9uQ29udGV4dC5fY3VycmVudFZhbHVlID0gcHJldlNpYmxpbmcpKSxcbiAgICAgICAgICAgIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICBpc0h5ZHJhdGluZyAmJlxuICAgICAgICAgICAgICAoKHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnQgPSBnZXRIb3N0Q29udGV4dCgpKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gY3VycmVudC5hbmNlc3RvckluZm8uY3VycmVudCksXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9XG4gICAgICAgICAgICAgICAgbnVsbCAhPSByZXR1cm5GaWJlclxuICAgICAgICAgICAgICAgICAgPyB2YWxpZGF0ZVRleHROZXN0aW5nKFxuICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybkZpYmVyLnRhZyxcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmFuY2VzdG9ySW5mby5pbXBsaWNpdFJvb3RTY29wZVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6ICEwKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnQgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlKSxcbiAgICAgICAgICAgICAgKHJldHVybkZpYmVyID0gIWN1cnJlbnQpIHx8XG4gICAgICAgICAgICAgICAgKChyZXR1cm5GaWJlciA9IGNhbkh5ZHJhdGVUZXh0SW5zdGFuY2UoXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgICAgICAgcm9vdE9yU2luZ2xldG9uQ29udGV4dFxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIG51bGwgIT09IHJldHVybkZpYmVyXG4gICAgICAgICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgICAgICAoaHlkcmF0aW9uUGFyZW50RmliZXIgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICAgIChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbCksXG4gICAgICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9ICEwKSlcbiAgICAgICAgICAgICAgICAgIDogKHJldHVybkZpYmVyID0gITEpLFxuICAgICAgICAgICAgICAgIChyZXR1cm5GaWJlciA9ICFyZXR1cm5GaWJlcikpLFxuICAgICAgICAgICAgICByZXR1cm5GaWJlciAmJlxuICAgICAgICAgICAgICAgIChyZW5kZXJMYW5lcyAmJlxuICAgICAgICAgICAgICAgICAgd2Fybk5vbkh5ZHJhdGVkSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQpLFxuICAgICAgICAgICAgICAgIHRocm93T25IeWRyYXRpb25NaXNtYXRjaCh3b3JrSW5Qcm9ncmVzcykpKSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHB1c2hIb3N0Q29udGFpbmVyKFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMpLFxuICAgICAgICAgICAgbnVsbCA9PT0gY3VycmVudFxuICAgICAgICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgIDogcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICByZXR1cm5GaWJlcixcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlRm9yd2FyZFJlZihcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcmVjb25jaWxlQ2hpbGRyZW4oXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDQpLFxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDIwNDgpLFxuICAgICAgICAgICAgKHJldHVybkZpYmVyID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlci5lZmZlY3REdXJhdGlvbiA9IC0wKSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlci5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSAtMCksXG4gICAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbixcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLnR5cGUpLFxuICAgICAgICAgICAgKHByZXZTaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzKSxcbiAgICAgICAgICAgIChwcmV2U3RhdGUgPSBwcmV2U2libGluZy52YWx1ZSksXG4gICAgICAgICAgICBcInZhbHVlXCIgaW4gcHJldlNpYmxpbmcgfHxcbiAgICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIgfHxcbiAgICAgICAgICAgICAgKChoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciA9ICEwKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoZSBgdmFsdWVgIHByb3AgaXMgcmVxdWlyZWQgZm9yIHRoZSBgPENvbnRleHQuUHJvdmlkZXI+YC4gRGlkIHlvdSBtaXNzcGVsbCBpdCBvciBmb3JnZXQgdG8gcGFzcyBpdD9cIlxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgcmV0dXJuRmliZXIsIHByZXZTdGF0ZSksXG4gICAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHByZXZTaWJsaW5nLmNoaWxkcmVuLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAocHJldlNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzcy50eXBlLl9jb250ZXh0KSxcbiAgICAgICAgICAgIChyZXR1cm5GaWJlciA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcy5jaGlsZHJlbiksXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiByZXR1cm5GaWJlciAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiQSBjb250ZXh0IGNvbnN1bWVyIHdhcyByZW5kZXJlZCB3aXRoIG11bHRpcGxlIGNoaWxkcmVuLCBvciBhIGNoaWxkIHRoYXQgaXNuJ3QgYSBmdW5jdGlvbi4gQSBjb250ZXh0IGNvbnN1bWVyIGV4cGVjdHMgYSBzaW5nbGUgY2hpbGQgdGhhdCBpcyBhIGZ1bmN0aW9uLiBJZiB5b3UgZGlkIHBhc3MgYSBmdW5jdGlvbiwgbWFrZSBzdXJlIHRoZXJlIGlzIG5vIHRyYWlsaW5nIG9yIGxlYWRpbmcgd2hpdGVzcGFjZSBhcm91bmQgaXQuXCJcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIChwcmV2U2libGluZyA9IHJlYWRDb250ZXh0KHByZXZTaWJsaW5nKSksXG4gICAgICAgICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RhcnRlZCh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSBjYWxsQ29tcG9uZW50SW5ERVYoXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICBwcmV2U2libGluZyxcbiAgICAgICAgICAgICAgdm9pZCAwXG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIG1hcmtDb21wb25lbnRSZW5kZXJTdG9wcGVkKCksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMSksXG4gICAgICAgICAgICByZWNvbmNpbGVDaGlsZHJlbihcbiAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlTWVtb0NvbXBvbmVudChcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgcHJldlNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgbmV4dFN0YXRlID0gMCAhPT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMTI5O1xuICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50KVxuICAgICAgICAgICAgaWYgKGlzSHlkcmF0aW5nKSB7XG4gICAgICAgICAgICAgIGlmIChcImhpZGRlblwiID09PSBwcmV2U2libGluZy5tb2RlKVxuICAgICAgICAgICAgICAgIG1vdW50QWN0aXZpdHlDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgcHJldlNpYmxpbmcpO1xuICAgICAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAocHVzaERlaHlkcmF0ZWRBY3Rpdml0eVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgKHJlbmRlckxhbmVzID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSlcbiAgICAgICAgICAgICAgICAgID8gKChjdXJyZW50ID0gY2FuSHlkcmF0ZUh5ZHJhdGlvbkJvdW5kYXJ5KFxuICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgICAgIHJvb3RPclNpbmdsZXRvbkNvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAgIChjdXJyZW50ID1cbiAgICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIGN1cnJlbnQuZGF0YSA9PT0gQUNUSVZJVFlfU1RBUlRfREFUQVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjdXJyZW50XG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpLFxuICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgKChyZXR1cm5GaWJlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlaHlkcmF0ZWQ6IGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmVlQ29udGV4dDogZ2V0U3VzcGVuZGVkVHJlZUNvbnRleHQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5TGFuZTogNTM2ODcwOTEyLFxuICAgICAgICAgICAgICAgICAgICAgICAgaHlkcmF0aW9uRXJyb3JzOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgICAgICAgKHJldHVybkZpYmVyID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUZpYmVyRnJvbURlaHlkcmF0ZWRGcmFnbWVudChjdXJyZW50KSksXG4gICAgICAgICAgICAgICAgICAgICAgKHJldHVybkZpYmVyLnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZXR1cm5GaWJlciksXG4gICAgICAgICAgICAgICAgICAgICAgKGh5ZHJhdGlvblBhcmVudEZpYmVyID0gd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgICAgIChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbCkpKVxuICAgICAgICAgICAgICAgICAgOiAoY3VycmVudCA9IG51bGwpLFxuICAgICAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAgICAgICAod2Fybk5vbkh5ZHJhdGVkSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgICAgIHRocm93T25IeWRyYXRpb25NaXNtYXRjaCh3b3JrSW5Qcm9ncmVzcykpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSA1MzY4NzA5MTI7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG1vdW50QWN0aXZpdHlDaGlsZHJlbihcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICBwcmV2U2libGluZ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgKChyZXR1cm5GaWJlciA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSksIG51bGwgIT09IHJldHVybkZpYmVyKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKChwcmV2U3RhdGUgPSByZXR1cm5GaWJlci5kZWh5ZHJhdGVkKSxcbiAgICAgICAgICAgICAgcHVzaERlaHlkcmF0ZWRBY3Rpdml0eVN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgIG5leHRTdGF0ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMjU2KVxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMjU3KSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IHJldHJ5QWN0aXZpdHlDb21wb25lbnRXaXRob3V0SHlkcmF0aW5nKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICBlbHNlIGlmIChudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlKVxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MgPSBudWxsKTtcbiAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJDbGllbnQgcmVuZGVyaW5nIGFuIEFjdGl2aXR5IHN1c3BlbmRlZCBpdCBhZ2Fpbi4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICAgKHdhcm5JZkh5ZHJhdGluZygpLFxuICAgICAgICAgICAgICBkaWRSZWNlaXZlVXBkYXRlIHx8XG4gICAgICAgICAgICAgICAgcHJvcGFnYXRlUGFyZW50Q29udGV4dENoYW5nZXMoXG4gICAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lcyxcbiAgICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKG5leHRTdGF0ZSA9IDAgIT09IChyZW5kZXJMYW5lcyAmIGN1cnJlbnQuY2hpbGRMYW5lcykpLFxuICAgICAgICAgICAgICBkaWRSZWNlaXZlVXBkYXRlIHx8IG5leHRTdGF0ZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBwcmV2U2libGluZyA9IHdvcmtJblByb2dyZXNzUm9vdDtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG51bGwgIT09IHByZXZTaWJsaW5nICYmXG4gICAgICAgICAgICAgICAgKChwcmV2U3RhdGUgPSBnZXRCdW1wZWRMYW5lRm9ySHlkcmF0aW9uKFxuICAgICAgICAgICAgICAgICAgcHJldlNpYmxpbmcsXG4gICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgIDAgIT09IHByZXZTdGF0ZSAmJiBwcmV2U3RhdGUgIT09IHJldHVybkZpYmVyLnJldHJ5TGFuZSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHRocm93IChcbiAgICAgICAgICAgICAgICAgICgocmV0dXJuRmliZXIucmV0cnlMYW5lID0gcHJldlN0YXRlKSxcbiAgICAgICAgICAgICAgICAgIGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShjdXJyZW50LCBwcmV2U3RhdGUpLFxuICAgICAgICAgICAgICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHByZXZTaWJsaW5nLCBjdXJyZW50LCBwcmV2U3RhdGUpLFxuICAgICAgICAgICAgICAgICAgU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSByZXRyeUFjdGl2aXR5Q29tcG9uZW50V2l0aG91dEh5ZHJhdGluZyhcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgKHJlbmRlckxhbmVzID0gcmV0dXJuRmliZXIudHJlZUNvbnRleHQpLFxuICAgICAgICAgICAgICAgIChuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGUoXG4gICAgICAgICAgICAgICAgICBwcmV2U3RhdGUubmV4dFNpYmxpbmdcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAoaHlkcmF0aW9uUGFyZW50RmliZXIgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgKGlzSHlkcmF0aW5nID0gITApLFxuICAgICAgICAgICAgICAgIChoeWRyYXRpb25FcnJvcnMgPSBudWxsKSxcbiAgICAgICAgICAgICAgICAoZGlkU3VzcGVuZE9yRXJyb3JERVYgPSAhMSksXG4gICAgICAgICAgICAgICAgKGh5ZHJhdGlvbkRpZmZSb290REVWID0gbnVsbCksXG4gICAgICAgICAgICAgICAgKHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMSksXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgICAgICAgIHJlc3RvcmVTdXNwZW5kZWRUcmVlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyA9IG1vdW50QWN0aXZpdHlDaGlsZHJlbihcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgICAgICAgcHJldlNpYmxpbmdcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDA5Nik7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgKHJlbmRlckxhbmVzID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudC5jaGlsZCwge1xuICAgICAgICAgICAgICBtb2RlOiBwcmV2U2libGluZy5tb2RlLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogcHJldlNpYmxpbmcuY2hpbGRyZW5cbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgKHJlbmRlckxhbmVzLnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZiksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgICAgKHJlbmRlckxhbmVzLnJldHVybiA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzID0gcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICByZXR1cm4gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHNcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAocmV0dXJuRmliZXIgPSByZWFkQ29udGV4dChDYWNoZUNvbnRleHQpKSxcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgICAgICAgPyAoKHByZXZTaWJsaW5nID0gcGVla0NhY2hlRnJvbVBvb2woKSksXG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gcHJldlNpYmxpbmcgJiZcbiAgICAgICAgICAgICAgICAgICgocHJldlNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzc1Jvb3QpLFxuICAgICAgICAgICAgICAgICAgKHByZXZTdGF0ZSA9IGNyZWF0ZUNhY2hlKCkpLFxuICAgICAgICAgICAgICAgICAgKHByZXZTaWJsaW5nLnBvb2xlZENhY2hlID0gcHJldlN0YXRlKSxcbiAgICAgICAgICAgICAgICAgIHJldGFpbkNhY2hlKHByZXZTdGF0ZSksXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBwcmV2U3RhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgKHByZXZTaWJsaW5nLnBvb2xlZENhY2hlTGFuZXMgfD0gcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgICAgKHByZXZTaWJsaW5nID0gcHJldlN0YXRlKSksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICBwYXJlbnQ6IHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgY2FjaGU6IHByZXZTaWJsaW5nXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENhY2hlQ29udGV4dCwgcHJldlNpYmxpbmcpKVxuICAgICAgICAgICAgICA6ICgwICE9PSAoY3VycmVudC5sYW5lcyAmIHJlbmRlckxhbmVzKSAmJlxuICAgICAgICAgICAgICAgICAgKGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBudWxsLCBudWxsLCByZW5kZXJMYW5lcyksXG4gICAgICAgICAgICAgICAgICBzdXNwZW5kSWZVcGRhdGVSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uKCkpLFxuICAgICAgICAgICAgICAgIChwcmV2U2libGluZyA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgICAgICAgKHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpLFxuICAgICAgICAgICAgICAgIHByZXZTaWJsaW5nLnBhcmVudCAhPT0gcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgICAgID8gKChwcmV2U2libGluZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IHJldHVybkZpYmVyLFxuICAgICAgICAgICAgICAgICAgICAgIGNhY2hlOiByZXR1cm5GaWJlclxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBwcmV2U2libGluZyksXG4gICAgICAgICAgICAgICAgICAgIDAgPT09IHdvcmtJblByb2dyZXNzLmxhbmVzICYmXG4gICAgICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUuYmFzZVN0YXRlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldlNpYmxpbmcpLFxuICAgICAgICAgICAgICAgICAgICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENhY2hlQ29udGV4dCwgcmV0dXJuRmliZXIpKVxuICAgICAgICAgICAgICAgICAgOiAoKHJldHVybkZpYmVyID0gcHJldlN0YXRlLmNhY2hlKSxcbiAgICAgICAgICAgICAgICAgICAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBDYWNoZUNvbnRleHQsIHJldHVybkZpYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuRmliZXIgIT09IHByZXZTaWJsaW5nLmNhY2hlICYmXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcGFnYXRlQ29udGV4dENoYW5nZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtDYWNoZUNvbnRleHRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAhMFxuICAgICAgICAgICAgICAgICAgICAgICkpKSxcbiAgICAgICAgICAgIHJlY29uY2lsZUNoaWxkcmVuKFxuICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuLFxuICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgICB0aHJvdyB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gICAgICB9XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgK1xuICAgICAgICAgIFwiKS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gNDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlbG9hZEluc3RhbmNlQW5kU3VzcGVuZElmTmVlZGVkKFxuICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICB0eXBlLFxuICAgICAgb2xkUHJvcHMsXG4gICAgICBuZXdQcm9wcyxcbiAgICAgIHJlbmRlckxhbmVzXG4gICAgKSB7XG4gICAgICBpZiAoKHR5cGUgPSAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN1c3BlbnNleUltYWdlc01vZGUpICE9PSBOb01vZGUpKVxuICAgICAgICB0eXBlID0gITE7XG4gICAgICBpZiAodHlwZSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxNjc3NzIxNiksXG4gICAgICAgICAgKHJlbmRlckxhbmVzICYgMzM1NTQ0MTI4KSA9PT0gcmVuZGVyTGFuZXMpXG4gICAgICAgIClcbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbXBsZXRlKSB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA4MTkyO1xuICAgICAgICAgIGVsc2UgaWYgKHNob3VsZFJlbWFpbk9uUHJldmlvdXNTY3JlZW4oKSkgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gODE5MjtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAgICgoc3VzcGVuZGVkVGhlbmFibGUgPSBub29wU3VzcGVuc2V5Q29tbWl0VGhlbmFibGUpLFxuICAgICAgICAgICAgICBTdXNwZW5zZXlDb21taXRFeGNlcHRpb24pXG4gICAgICAgICAgICApO1xuICAgICAgfSBlbHNlIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0xNjc3NzIxNztcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlbG9hZFJlc291cmNlQW5kU3VzcGVuZElmTmVlZGVkKHdvcmtJblByb2dyZXNzLCByZXNvdXJjZSkge1xuICAgICAgaWYgKFxuICAgICAgICBcInN0eWxlc2hlZXRcIiAhPT0gcmVzb3VyY2UudHlwZSB8fFxuICAgICAgICAocmVzb3VyY2Uuc3RhdGUubG9hZGluZyAmIEluc2VydGVkKSAhPT0gTm90TG9hZGVkXG4gICAgICApXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IC0xNjc3NzIxNztcbiAgICAgIGVsc2UgaWYgKCgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTY3NzcyMTYpLCAhcHJlbG9hZFJlc291cmNlKHJlc291cmNlKSkpXG4gICAgICAgIGlmIChzaG91bGRSZW1haW5PblByZXZpb3VzU2NyZWVuKCkpIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDgxOTI7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgICAoKHN1c3BlbmRlZFRoZW5hYmxlID0gbm9vcFN1c3BlbnNleUNvbW1pdFRoZW5hYmxlKSxcbiAgICAgICAgICAgIFN1c3BlbnNleUNvbW1pdEV4Y2VwdGlvbilcbiAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZVJldHJ5RWZmZWN0KHdvcmtJblByb2dyZXNzLCByZXRyeVF1ZXVlKSB7XG4gICAgICBudWxsICE9PSByZXRyeVF1ZXVlICYmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KTtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTYzODQgJiZcbiAgICAgICAgKChyZXRyeVF1ZXVlID1cbiAgICAgICAgICAyMiAhPT0gd29ya0luUHJvZ3Jlc3MudGFnID8gY2xhaW1OZXh0UmV0cnlMYW5lKCkgOiA1MzY4NzA5MTIpLFxuICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgfD0gcmV0cnlRdWV1ZSksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJldHJ5TGFuZXMgfD0gcmV0cnlRdWV1ZSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjaykge1xuICAgICAgaWYgKCFpc0h5ZHJhdGluZylcbiAgICAgICAgc3dpdGNoIChyZW5kZXJTdGF0ZS50YWlsTW9kZSkge1xuICAgICAgICAgIGNhc2UgXCJoaWRkZW5cIjpcbiAgICAgICAgICAgIGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjayA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgICAgICBmb3IgKHZhciBsYXN0VGFpbE5vZGUgPSBudWxsOyBudWxsICE9PSBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2s7IClcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgICAgIChsYXN0VGFpbE5vZGUgPSBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2spLFxuICAgICAgICAgICAgICAgIChoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2sgPSBoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2suc2libGluZyk7XG4gICAgICAgICAgICBudWxsID09PSBsYXN0VGFpbE5vZGVcbiAgICAgICAgICAgICAgPyAocmVuZGVyU3RhdGUudGFpbCA9IG51bGwpXG4gICAgICAgICAgICAgIDogKGxhc3RUYWlsTm9kZS5zaWJsaW5nID0gbnVsbCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiY29sbGFwc2VkXCI6XG4gICAgICAgICAgICBsYXN0VGFpbE5vZGUgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICAgICAgZm9yICh2YXIgX2xhc3RUYWlsTm9kZSA9IG51bGw7IG51bGwgIT09IGxhc3RUYWlsTm9kZTsgKVxuICAgICAgICAgICAgICBudWxsICE9PSBsYXN0VGFpbE5vZGUuYWx0ZXJuYXRlICYmIChfbGFzdFRhaWxOb2RlID0gbGFzdFRhaWxOb2RlKSxcbiAgICAgICAgICAgICAgICAobGFzdFRhaWxOb2RlID0gbGFzdFRhaWxOb2RlLnNpYmxpbmcpO1xuICAgICAgICAgICAgbnVsbCA9PT0gX2xhc3RUYWlsTm9kZVxuICAgICAgICAgICAgICA/IGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjayB8fCBudWxsID09PSByZW5kZXJTdGF0ZS50YWlsXG4gICAgICAgICAgICAgICAgPyAocmVuZGVyU3RhdGUudGFpbCA9IG51bGwpXG4gICAgICAgICAgICAgICAgOiAocmVuZGVyU3RhdGUudGFpbC5zaWJsaW5nID0gbnVsbClcbiAgICAgICAgICAgICAgOiAoX2xhc3RUYWlsTm9kZS5zaWJsaW5nID0gbnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYnViYmxlUHJvcGVydGllcyhjb21wbGV0ZWRXb3JrKSB7XG4gICAgICB2YXIgZGlkQmFpbG91dCA9XG4gICAgICAgICAgbnVsbCAhPT0gY29tcGxldGVkV29yay5hbHRlcm5hdGUgJiZcbiAgICAgICAgICBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZS5jaGlsZCA9PT0gY29tcGxldGVkV29yay5jaGlsZCxcbiAgICAgICAgbmV3Q2hpbGRMYW5lcyA9IDAsXG4gICAgICAgIHN1YnRyZWVGbGFncyA9IDA7XG4gICAgICBpZiAoZGlkQmFpbG91dClcbiAgICAgICAgaWYgKChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICB2YXIgX3RyZWVCYXNlRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLnNlbGZCYXNlRHVyYXRpb24sXG4gICAgICAgICAgICAgIF9jaGlsZDIgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuICAgICAgICAgICAgbnVsbCAhPT0gX2NoaWxkMjtcblxuICAgICAgICAgIClcbiAgICAgICAgICAgIChuZXdDaGlsZExhbmVzIHw9IF9jaGlsZDIubGFuZXMgfCBfY2hpbGQyLmNoaWxkTGFuZXMpLFxuICAgICAgICAgICAgICAoc3VidHJlZUZsYWdzIHw9IF9jaGlsZDIuc3VidHJlZUZsYWdzICYgNjUwMTE3MTIpLFxuICAgICAgICAgICAgICAoc3VidHJlZUZsYWdzIHw9IF9jaGlsZDIuZmxhZ3MgJiA2NTAxMTcxMiksXG4gICAgICAgICAgICAgIChfdHJlZUJhc2VEdXJhdGlvbiArPSBfY2hpbGQyLnRyZWVCYXNlRHVyYXRpb24pLFxuICAgICAgICAgICAgICAoX2NoaWxkMiA9IF9jaGlsZDIuc2libGluZyk7XG4gICAgICAgICAgY29tcGxldGVkV29yay50cmVlQmFzZUR1cmF0aW9uID0gX3RyZWVCYXNlRHVyYXRpb247XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBfdHJlZUJhc2VEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG4gICAgICAgICAgICBudWxsICE9PSBfdHJlZUJhc2VEdXJhdGlvbjtcblxuICAgICAgICAgIClcbiAgICAgICAgICAgIChuZXdDaGlsZExhbmVzIHw9XG4gICAgICAgICAgICAgIF90cmVlQmFzZUR1cmF0aW9uLmxhbmVzIHwgX3RyZWVCYXNlRHVyYXRpb24uY2hpbGRMYW5lcyksXG4gICAgICAgICAgICAgIChzdWJ0cmVlRmxhZ3MgfD0gX3RyZWVCYXNlRHVyYXRpb24uc3VidHJlZUZsYWdzICYgNjUwMTE3MTIpLFxuICAgICAgICAgICAgICAoc3VidHJlZUZsYWdzIHw9IF90cmVlQmFzZUR1cmF0aW9uLmZsYWdzICYgNjUwMTE3MTIpLFxuICAgICAgICAgICAgICAoX3RyZWVCYXNlRHVyYXRpb24ucmV0dXJuID0gY29tcGxldGVkV29yayksXG4gICAgICAgICAgICAgIChfdHJlZUJhc2VEdXJhdGlvbiA9IF90cmVlQmFzZUR1cmF0aW9uLnNpYmxpbmcpO1xuICAgICAgZWxzZSBpZiAoKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIF90cmVlQmFzZUR1cmF0aW9uID0gY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgX2NoaWxkMiA9IGNvbXBsZXRlZFdvcmsuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgICAgZm9yICh2YXIgY2hpbGQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkOyBudWxsICE9PSBjaGlsZDsgKVxuICAgICAgICAgIChuZXdDaGlsZExhbmVzIHw9IGNoaWxkLmxhbmVzIHwgY2hpbGQuY2hpbGRMYW5lcyksXG4gICAgICAgICAgICAoc3VidHJlZUZsYWdzIHw9IGNoaWxkLnN1YnRyZWVGbGFncyksXG4gICAgICAgICAgICAoc3VidHJlZUZsYWdzIHw9IGNoaWxkLmZsYWdzKSxcbiAgICAgICAgICAgIChfdHJlZUJhc2VEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbiksXG4gICAgICAgICAgICAoX2NoaWxkMiArPSBjaGlsZC50cmVlQmFzZUR1cmF0aW9uKSxcbiAgICAgICAgICAgIChjaGlsZCA9IGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uID0gX3RyZWVCYXNlRHVyYXRpb247XG4gICAgICAgIGNvbXBsZXRlZFdvcmsudHJlZUJhc2VEdXJhdGlvbiA9IF9jaGlsZDI7XG4gICAgICB9IGVsc2VcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBfdHJlZUJhc2VEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG4gICAgICAgICAgbnVsbCAhPT0gX3RyZWVCYXNlRHVyYXRpb247XG5cbiAgICAgICAgKVxuICAgICAgICAgIChuZXdDaGlsZExhbmVzIHw9XG4gICAgICAgICAgICBfdHJlZUJhc2VEdXJhdGlvbi5sYW5lcyB8IF90cmVlQmFzZUR1cmF0aW9uLmNoaWxkTGFuZXMpLFxuICAgICAgICAgICAgKHN1YnRyZWVGbGFncyB8PSBfdHJlZUJhc2VEdXJhdGlvbi5zdWJ0cmVlRmxhZ3MpLFxuICAgICAgICAgICAgKHN1YnRyZWVGbGFncyB8PSBfdHJlZUJhc2VEdXJhdGlvbi5mbGFncyksXG4gICAgICAgICAgICAoX3RyZWVCYXNlRHVyYXRpb24ucmV0dXJuID0gY29tcGxldGVkV29yayksXG4gICAgICAgICAgICAoX3RyZWVCYXNlRHVyYXRpb24gPSBfdHJlZUJhc2VEdXJhdGlvbi5zaWJsaW5nKTtcbiAgICAgIGNvbXBsZXRlZFdvcmsuc3VidHJlZUZsYWdzIHw9IHN1YnRyZWVGbGFncztcbiAgICAgIGNvbXBsZXRlZFdvcmsuY2hpbGRMYW5lcyA9IG5ld0NoaWxkTGFuZXM7XG4gICAgICByZXR1cm4gZGlkQmFpbG91dDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tcGxldGVXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAgICAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgcG9wVHJlZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDExOlxuICAgICAgICBjYXNlIDc6XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIHJldHVybiBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICAgIG5ld1Byb3BzID0gbnVsbDtcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIChuZXdQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5jYWNoZSk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZS5jYWNoZSAhPT0gbmV3UHJvcHMgJiZcbiAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAyMDQ4KTtcbiAgICAgICAgICBwb3BQcm92aWRlcihDYWNoZUNvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZW5kZXJMYW5lcy5wZW5kaW5nQ29udGV4dCAmJlxuICAgICAgICAgICAgKChyZW5kZXJMYW5lcy5jb250ZXh0ID0gcmVuZGVyTGFuZXMucGVuZGluZ0NvbnRleHQpLFxuICAgICAgICAgICAgKHJlbmRlckxhbmVzLnBlbmRpbmdDb250ZXh0ID0gbnVsbCkpO1xuICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50IHx8IG51bGwgPT09IGN1cnJlbnQuY2hpbGQpXG4gICAgICAgICAgICBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICAgICAgPyAoZW1pdFBlbmRpbmdIeWRyYXRpb25XYXJuaW5ncygpLCBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKSlcbiAgICAgICAgICAgICAgOiBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICAgICAgKGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQgJiZcbiAgICAgICAgICAgICAgICAgIDAgPT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDI1NikpIHx8XG4gICAgICAgICAgICAgICAgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMDI0KSxcbiAgICAgICAgICAgICAgICB1cGdyYWRlSHlkcmF0aW9uRXJyb3JzVG9SZWNvdmVyYWJsZSgpKTtcbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGUsXG4gICAgICAgICAgICBuZXh0UmVzb3VyY2UgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIG51bGwgPT09IGN1cnJlbnRcbiAgICAgICAgICAgID8gKG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICBudWxsICE9PSBuZXh0UmVzb3VyY2VcbiAgICAgICAgICAgICAgICA/IChidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgIHByZWxvYWRSZXNvdXJjZUFuZFN1c3BlbmRJZk5lZWRlZChcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICAgIG5leHRSZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICA6IChidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgIHByZWxvYWRJbnN0YW5jZUFuZFN1c3BlbmRJZk5lZWRlZChcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJMYW5lc1xuICAgICAgICAgICAgICAgICAgKSkpXG4gICAgICAgICAgICA6IG5leHRSZXNvdXJjZVxuICAgICAgICAgICAgICA/IG5leHRSZXNvdXJjZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgICAgICAgPyAobWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgIHByZWxvYWRSZXNvdXJjZUFuZFN1c3BlbmRJZk5lZWRlZChcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICAgIG5leHRSZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICA6IChidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSAtMTY3NzcyMTcpKVxuICAgICAgICAgICAgICA6ICgoY3VycmVudCA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyksXG4gICAgICAgICAgICAgICAgY3VycmVudCAhPT0gbmV3UHJvcHMgJiYgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgICAgcHJlbG9hZEluc3RhbmNlQW5kU3VzcGVuZElmTmVlZGVkKFxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgIG5ld1Byb3BzLFxuICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmVuZGVyTGFuZXMgPSByZXF1aXJlZENvbnRleHQocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gICAgICAgICAgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpXG4gICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHMgIT09IG5ld1Byb3BzICYmIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFuZXdQcm9wcykge1xuICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKVxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VycmVudCA9IGdldEhvc3RDb250ZXh0KCk7XG4gICAgICAgICAgICBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICAgICAgPyBwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdXJyZW50KVxuICAgICAgICAgICAgICA6ICgoY3VycmVudCA9IHJlc29sdmVTaW5nbGV0b25JbnN0YW5jZShcbiAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICEwXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGN1cnJlbnQpLFxuICAgICAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpXG4gICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHMgIT09IG5ld1Byb3BzICYmIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFuZXdQcm9wcykge1xuICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlKVxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIF9jdXJyZW50SG9zdENvbnRleHQgPSBnZXRIb3N0Q29udGV4dCgpO1xuICAgICAgICAgICAgaWYgKHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKSlcbiAgICAgICAgICAgICAgcHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgX2N1cnJlbnRIb3N0Q29udGV4dCk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgbmV4dFJlc291cmNlID0gcmVxdWlyZWRDb250ZXh0KHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuICAgICAgICAgICAgICB2YWxpZGF0ZURPTU5lc3RpbmcodHlwZSwgX2N1cnJlbnRIb3N0Q29udGV4dC5hbmNlc3RvckluZm8pO1xuICAgICAgICAgICAgICBfY3VycmVudEhvc3RDb250ZXh0ID0gX2N1cnJlbnRIb3N0Q29udGV4dC5jb250ZXh0O1xuICAgICAgICAgICAgICBuZXh0UmVzb3VyY2UgPSBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIobmV4dFJlc291cmNlKTtcbiAgICAgICAgICAgICAgc3dpdGNoIChfY3VycmVudEhvc3RDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSBIb3N0Q29udGV4dE5hbWVzcGFjZVN2ZzpcbiAgICAgICAgICAgICAgICAgIG5leHRSZXNvdXJjZSA9IG5leHRSZXNvdXJjZS5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgICAgICAgICAgIFNWR19OQU1FU1BBQ0UsXG4gICAgICAgICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEhvc3RDb250ZXh0TmFtZXNwYWNlTWF0aDpcbiAgICAgICAgICAgICAgICAgIG5leHRSZXNvdXJjZSA9IG5leHRSZXNvdXJjZS5jcmVhdGVFbGVtZW50TlMoXG4gICAgICAgICAgICAgICAgICAgIE1BVEhfTkFNRVNQQUNFLFxuICAgICAgICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3ZnXCI6XG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFJlc291cmNlID0gbmV4dFJlc291cmNlLmNyZWF0ZUVsZW1lbnROUyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFNWR19OQU1FU1BBQ0UsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm1hdGhcIjpcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0UmVzb3VyY2UgPSBuZXh0UmVzb3VyY2UuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgICAgICAgICAgICAgICAgTUFUSF9OQU1FU1BBQ0UsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNjcmlwdFwiOlxuICAgICAgICAgICAgICAgICAgICAgIG5leHRSZXNvdXJjZSA9IG5leHRSZXNvdXJjZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgICAgICAgICAgICAgIG5leHRSZXNvdXJjZS5pbm5lckhUTUwgPSBcIjxzY3JpcHQ+XFx4M2Mvc2NyaXB0PlwiO1xuICAgICAgICAgICAgICAgICAgICAgIG5leHRSZXNvdXJjZSA9IG5leHRSZXNvdXJjZS5yZW1vdmVDaGlsZChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRSZXNvdXJjZS5maXJzdENoaWxkXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICAgICAgICAgICAgICAgIG5leHRSZXNvdXJjZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgbmV3UHJvcHMuaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXh0UmVzb3VyY2UuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpczogbmV3UHJvcHMuaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5leHRSZXNvdXJjZS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO1xuICAgICAgICAgICAgICAgICAgICAgIG5ld1Byb3BzLm11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChuZXh0UmVzb3VyY2UubXVsdGlwbGUgPSAhMClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3UHJvcHMuc2l6ZSAmJiAobmV4dFJlc291cmNlLnNpemUgPSBuZXdQcm9wcy5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAobmV4dFJlc291cmNlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBuZXdQcm9wcy5pc1xuICAgICAgICAgICAgICAgICAgICAgICAgICA/IG5leHRSZXNvdXJjZS5jcmVhdGVFbGVtZW50KHR5cGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzOiBuZXdQcm9wcy5pc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogbmV4dFJlc291cmNlLmNyZWF0ZUVsZW1lbnQodHlwZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLTEgPT09IHR5cGUuaW5kZXhPZihcIi1cIikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUgIT09IHR5cGUudG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIjwlcyAvPiBpcyB1c2luZyBpbmNvcnJlY3QgY2FzaW5nLiBVc2UgUGFzY2FsQ2FzZSBmb3IgUmVhY3QgY29tcG9uZW50cywgb3IgbG93ZXJjYXNlIGZvciBIVE1MIGVsZW1lbnRzLlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiW29iamVjdCBIVE1MVW5rbm93bkVsZW1lbnRdXCIgIT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5leHRSZXNvdXJjZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNPd25Qcm9wZXJ0eS5jYWxsKHdhcm5lZFVua25vd25UYWdzLCB0eXBlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgod2FybmVkVW5rbm93blRhZ3NbdHlwZV0gPSAhMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlIHRhZyA8JXM+IGlzIHVucmVjb2duaXplZCBpbiB0aGlzIGJyb3dzZXIuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBSZWFjdCBjb21wb25lbnQsIHN0YXJ0IGl0cyBuYW1lIHdpdGggYW4gdXBwZXJjYXNlIGxldHRlci5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbmV4dFJlc291cmNlW2ludGVybmFsSW5zdGFuY2VLZXldID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgIG5leHRSZXNvdXJjZVtpbnRlcm5hbFByb3BzS2V5XSA9IG5ld1Byb3BzO1xuICAgICAgICAgICAgICBhOiBmb3IgKFxuICAgICAgICAgICAgICAgIF9jdXJyZW50SG9zdENvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgICBudWxsICE9PSBfY3VycmVudEhvc3RDb250ZXh0O1xuXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIDUgPT09IF9jdXJyZW50SG9zdENvbnRleHQudGFnIHx8XG4gICAgICAgICAgICAgICAgICA2ID09PSBfY3VycmVudEhvc3RDb250ZXh0LnRhZ1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIG5leHRSZXNvdXJjZS5hcHBlbmRDaGlsZChfY3VycmVudEhvc3RDb250ZXh0LnN0YXRlTm9kZSk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICA0ICE9PSBfY3VycmVudEhvc3RDb250ZXh0LnRhZyAmJlxuICAgICAgICAgICAgICAgICAgMjcgIT09IF9jdXJyZW50SG9zdENvbnRleHQudGFnICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBfY3VycmVudEhvc3RDb250ZXh0LmNoaWxkXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBfY3VycmVudEhvc3RDb250ZXh0LmNoaWxkLnJldHVybiA9IF9jdXJyZW50SG9zdENvbnRleHQ7XG4gICAgICAgICAgICAgICAgICBfY3VycmVudEhvc3RDb250ZXh0ID0gX2N1cnJlbnRIb3N0Q29udGV4dC5jaGlsZDtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX2N1cnJlbnRIb3N0Q29udGV4dCA9PT0gd29ya0luUHJvZ3Jlc3MpIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgZm9yICg7IG51bGwgPT09IF9jdXJyZW50SG9zdENvbnRleHQuc2libGluZzsgKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG51bGwgPT09IF9jdXJyZW50SG9zdENvbnRleHQucmV0dXJuIHx8XG4gICAgICAgICAgICAgICAgICAgIF9jdXJyZW50SG9zdENvbnRleHQucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgX2N1cnJlbnRIb3N0Q29udGV4dCA9IF9jdXJyZW50SG9zdENvbnRleHQucmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfY3VycmVudEhvc3RDb250ZXh0LnNpYmxpbmcucmV0dXJuID0gX2N1cnJlbnRIb3N0Q29udGV4dC5yZXR1cm47XG4gICAgICAgICAgICAgICAgX2N1cnJlbnRIb3N0Q29udGV4dCA9IF9jdXJyZW50SG9zdENvbnRleHQuc2libGluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBuZXh0UmVzb3VyY2U7XG4gICAgICAgICAgICAgIGE6IHN3aXRjaCAoXG4gICAgICAgICAgICAgICAgKHNldEluaXRpYWxQcm9wZXJ0aWVzKG5leHRSZXNvdXJjZSwgdHlwZSwgbmV3UHJvcHMpLCB0eXBlKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiYnV0dG9uXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImlucHV0XCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxuICAgICAgICAgICAgICAgICAgbmV3UHJvcHMgPSAhIW5ld1Byb3BzLmF1dG9Gb2N1cztcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgY2FzZSBcImltZ1wiOlxuICAgICAgICAgICAgICAgICAgbmV3UHJvcHMgPSAhMDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIG5ld1Byb3BzID0gITE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbmV3UHJvcHMgJiYgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHByZWxvYWRJbnN0YW5jZUFuZFN1c3BlbmRJZk5lZWRlZChcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSxcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgPyBudWxsIDogY3VycmVudC5tZW1vaXplZFByb3BzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgcmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgaWYgKGN1cnJlbnQgJiYgbnVsbCAhPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUpXG4gICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkUHJvcHMgIT09IG5ld1Byb3BzICYmIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgbmV3UHJvcHMgJiZcbiAgICAgICAgICAgICAgbnVsbCA9PT0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiV2UgbXVzdCBoYXZlIG5ldyBwcm9wcyBmb3IgbmV3IG1vdW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgY3VycmVudCA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgICAgICAgICAgIHJlbmRlckxhbmVzID0gZ2V0SG9zdENvbnRleHQoKTtcbiAgICAgICAgICAgIGlmIChwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgICAgICAgICAgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgcmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgICB0eXBlID0gIWRpZFN1c3BlbmRPckVycm9yREVWO1xuICAgICAgICAgICAgICBuZXdQcm9wcyA9IG51bGw7XG4gICAgICAgICAgICAgIG5leHRSZXNvdXJjZSA9IGh5ZHJhdGlvblBhcmVudEZpYmVyO1xuICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gbmV4dFJlc291cmNlKVxuICAgICAgICAgICAgICAgIHN3aXRjaCAobmV4dFJlc291cmNlLnRhZykge1xuICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICB0eXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgKCh0eXBlID0gZGlmZkh5ZHJhdGVkVGV4dEZvckRldldhcm5pbmdzKFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgICBudWxsICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoYnVpbGRIeWRyYXRpb25EaWZmTm9kZSh3b3JrSW5Qcm9ncmVzcywgMCkuc2VydmVyUHJvcHMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgKG5ld1Byb3BzID0gbmV4dFJlc291cmNlLm1lbW9pemVkUHJvcHMpLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICgodHlwZSA9IGRpZmZIeWRyYXRlZFRleHRGb3JEZXZXYXJuaW5ncyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Byb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgIT09IHR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1aWxkSHlkcmF0aW9uRGlmZk5vZGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICApLnNlcnZlclByb3BzID0gdHlwZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY3VycmVudFtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgICAgICAgICBjdXJyZW50ID1cbiAgICAgICAgICAgICAgICBjdXJyZW50Lm5vZGVWYWx1ZSA9PT0gcmVuZGVyTGFuZXMgfHxcbiAgICAgICAgICAgICAgICAobnVsbCAhPT0gbmV3UHJvcHMgJiZcbiAgICAgICAgICAgICAgICAgICEwID09PSBuZXdQcm9wcy5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIHx8XG4gICAgICAgICAgICAgICAgY2hlY2tGb3JVbm1hdGNoZWRUZXh0KGN1cnJlbnQubm9kZVZhbHVlLCByZW5kZXJMYW5lcylcbiAgICAgICAgICAgICAgICAgID8gITBcbiAgICAgICAgICAgICAgICAgIDogITE7XG4gICAgICAgICAgICAgIGN1cnJlbnQgfHwgdGhyb3dPbkh5ZHJhdGlvbk1pc21hdGNoKHdvcmtJblByb2dyZXNzLCAhMCk7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgKHR5cGUgPSByZW5kZXJMYW5lcy5hbmNlc3RvckluZm8uY3VycmVudCksXG4gICAgICAgICAgICAgICAgbnVsbCAhPSB0eXBlICYmXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0ZVRleHROZXN0aW5nKFxuICAgICAgICAgICAgICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZS50YWcsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckxhbmVzLmFuY2VzdG9ySW5mby5pbXBsaWNpdFJvb3RTY29wZVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudCA9XG4gICAgICAgICAgICAgICAgICBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIoY3VycmVudCkuY3JlYXRlVGV4dE5vZGUoXG4gICAgICAgICAgICAgICAgICAgIG5ld1Byb3BzXG4gICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudFtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgIHJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudCB8fCBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgIG5ld1Byb3BzID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IHJlbmRlckxhbmVzKSB7XG4gICAgICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXdQcm9wcylcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIkEgZGVoeWRyYXRlZCBzdXNwZW5zZSBjb21wb25lbnQgd2FzIGNvbXBsZXRlZCB3aXRob3V0IGEgaHlkcmF0ZWQgbm9kZS4gVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQuZGVoeWRyYXRlZCA6IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50KVxuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgdG8gaGF2ZSBhIGh5ZHJhdGVkIGFjdGl2aXR5IGluc3RhbmNlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSByZW5kZXJMYW5lcyAmJlxuICAgICAgICAgICAgICAgICAgKChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiAtPVxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbikpO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBlbWl0UGVuZGluZ0h5ZHJhdGlvbldhcm5pbmdzKCksXG4gICAgICAgICAgICAgICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCksXG4gICAgICAgICAgICAgICAgICAwID09PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpICYmXG4gICAgICAgICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KSxcbiAgICAgICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICAgICAgICAgICBudWxsICE9PSByZW5kZXJMYW5lcyAmJlxuICAgICAgICAgICAgICAgICAgICAoKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCksXG4gICAgICAgICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiAtPVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50cmVlQmFzZUR1cmF0aW9uKSk7XG4gICAgICAgICAgICAgIGN1cnJlbnQgPSAhMTtcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPSB1cGdyYWRlSHlkcmF0aW9uRXJyb3JzVG9SZWNvdmVyYWJsZSgpKSxcbiAgICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgICAgIChjdXJyZW50Lm1lbW9pemVkU3RhdGUuaHlkcmF0aW9uRXJyb3JzID0gcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50ID0gITApO1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50KSB7XG4gICAgICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDI1NilcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKSwgd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCkpXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiQ2xpZW50IHJlbmRlcmluZyBhbiBBY3Rpdml0eSBzdXNwZW5kZWQgaXQgYWdhaW4uIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgICAgICAgIChudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlLmRlaHlkcmF0ZWQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0eXBlID0gbmV3UHJvcHM7XG4gICAgICAgICAgICBuZXh0UmVzb3VyY2UgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gdHlwZSAmJiBudWxsICE9PSB0eXBlLmRlaHlkcmF0ZWQpIHtcbiAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW5leHRSZXNvdXJjZSlcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIkEgZGVoeWRyYXRlZCBzdXNwZW5zZSBjb21wb25lbnQgd2FzIGNvbXBsZXRlZCB3aXRob3V0IGEgaHlkcmF0ZWQgbm9kZS4gVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBuZXh0UmVzb3VyY2UgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgICAgICAgIG5leHRSZXNvdXJjZSA9XG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBuZXh0UmVzb3VyY2UgPyBuZXh0UmVzb3VyY2UuZGVoeWRyYXRlZCA6IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKCFuZXh0UmVzb3VyY2UpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJFeHBlY3RlZCB0byBoYXZlIGEgaHlkcmF0ZWQgc3VzcGVuc2UgaW5zdGFuY2UuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbmV4dFJlc291cmNlW2ludGVybmFsSW5zdGFuY2VLZXldID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICAgICAgKCh0eXBlID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiAtPSB0eXBlLnRyZWVCYXNlRHVyYXRpb24pKTtcbiAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgZW1pdFBlbmRpbmdIeWRyYXRpb25XYXJuaW5ncygpLFxuICAgICAgICAgICAgICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KSAmJlxuICAgICAgICAgICAgICAgICAgICAodHlwZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSA0KSxcbiAgICAgICAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICAgICAgICAgICBudWxsICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgICAgICAgICgodHlwZSA9IHdvcmtJblByb2dyZXNzLmNoaWxkKSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uIC09XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlLnRyZWVCYXNlRHVyYXRpb24pKTtcbiAgICAgICAgICAgICAgdHlwZSA9ICExO1xuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICh0eXBlID0gdXBncmFkZUh5ZHJhdGlvbkVycm9yc1RvUmVjb3ZlcmFibGUoKSksXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgICAgICAoY3VycmVudC5tZW1vaXplZFN0YXRlLmh5ZHJhdGlvbkVycm9ycyA9IHR5cGUpLFxuICAgICAgICAgICAgICAgICh0eXBlID0gITApO1xuICAgICAgICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDI1NilcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKSwgd29ya0luUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGlmICgwICE9PSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiAxMjgpKVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJlbmRlckxhbmVzID0gbnVsbCAhPT0gbmV3UHJvcHM7XG4gICAgICAgICAgY3VycmVudCA9IG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIHJlbmRlckxhbmVzICYmXG4gICAgICAgICAgICAoKG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgKHR5cGUgPSBudWxsKSxcbiAgICAgICAgICAgIG51bGwgIT09IG5ld1Byb3BzLmFsdGVybmF0ZSAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBuZXdQcm9wcy5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBuZXdQcm9wcy5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wgJiZcbiAgICAgICAgICAgICAgKHR5cGUgPSBuZXdQcm9wcy5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZVBvb2wucG9vbCksXG4gICAgICAgICAgICAobmV4dFJlc291cmNlID0gbnVsbCksXG4gICAgICAgICAgICBudWxsICE9PSBuZXdQcm9wcy5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IG5ld1Byb3BzLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sICYmXG4gICAgICAgICAgICAgIChuZXh0UmVzb3VyY2UgPSBuZXdQcm9wcy5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKSxcbiAgICAgICAgICAgIG5leHRSZXNvdXJjZSAhPT0gdHlwZSAmJiAobmV3UHJvcHMuZmxhZ3MgfD0gMjA0OCkpO1xuICAgICAgICAgIHJlbmRlckxhbmVzICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICByZW5kZXJMYW5lcyAmJlxuICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkLmZsYWdzIHw9IDgxOTIpO1xuICAgICAgICAgIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlKTtcbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICByZW5kZXJMYW5lcyAmJlxuICAgICAgICAgICAgKChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQpLFxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiAtPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb24pKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMoXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm9cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIGJ1YmJsZVByb3BlcnRpZXMod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgaWYgKG51bGwgPT09IG5ld1Byb3BzKSByZXR1cm4gYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICAgICAgdHlwZSA9IDAgIT09ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIDEyOCk7XG4gICAgICAgICAgbmV4dFJlc291cmNlID0gbmV3UHJvcHMucmVuZGVyaW5nO1xuICAgICAgICAgIGlmIChudWxsID09PSBuZXh0UmVzb3VyY2UpXG4gICAgICAgICAgICBpZiAodHlwZSkgY3V0T2ZmVGFpbElmTmVlZGVkKG5ld1Byb3BzLCAhMSk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgIT09IFJvb3RJblByb2dyZXNzIHx8XG4gICAgICAgICAgICAgICAgKG51bGwgIT09IGN1cnJlbnQgJiYgMCAhPT0gKGN1cnJlbnQuZmxhZ3MgJiAxMjgpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgZm9yIChjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7IG51bGwgIT09IGN1cnJlbnQ7ICkge1xuICAgICAgICAgICAgICAgICAgbmV4dFJlc291cmNlID0gZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT09IG5leHRSZXNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAxMjg7XG4gICAgICAgICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChuZXdQcm9wcywgITEpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gbmV4dFJlc291cmNlLnVwZGF0ZVF1ZXVlO1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gcmVuZGVyTGFuZXM7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgcmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgICAgICAgICBudWxsICE9PSByZW5kZXJMYW5lcztcblxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzcyhyZW5kZXJMYW5lcywgY3VycmVudCksXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPSByZW5kZXJMYW5lcy5zaWJsaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaChcbiAgICAgICAgICAgICAgICAgICAgICBzdXNwZW5zZVN0YWNrQ3Vyc29yLFxuICAgICAgICAgICAgICAgICAgICAgIChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQgJlxuICAgICAgICAgICAgICAgICAgICAgICAgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2spIHxcbiAgICAgICAgICAgICAgICAgICAgICAgIEZvcmNlU3VzcGVuc2VGYWxsYmFjayxcbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpc0h5ZHJhdGluZyAmJlxuICAgICAgICAgICAgICAgICAgICAgIHB1c2hUcmVlRm9yayh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMudHJlZUZvcmtDb3VudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBudWxsICE9PSBuZXdQcm9wcy50YWlsICYmXG4gICAgICAgICAgICAgICAgbm93JDEoKSA+IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgJiZcbiAgICAgICAgICAgICAgICAoKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCksXG4gICAgICAgICAgICAgICAgKHR5cGUgPSAhMCksXG4gICAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKG5ld1Byb3BzLCAhMSksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmxhbmVzID0gNDE5NDMwNCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0eXBlKVxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKChjdXJyZW50ID0gZmluZEZpcnN0U3VzcGVuZGVkKG5leHRSZXNvdXJjZSkpLCBudWxsICE9PSBjdXJyZW50KVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAoKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDEyOCksXG4gICAgICAgICAgICAgICAgICAodHlwZSA9ICEwKSxcbiAgICAgICAgICAgICAgICAgIChjdXJyZW50ID0gY3VycmVudC51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50KSxcbiAgICAgICAgICAgICAgICAgIHNjaGVkdWxlUmV0cnlFZmZlY3Qod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQpLFxuICAgICAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKG5ld1Byb3BzLCAhMCksXG4gICAgICAgICAgICAgICAgICBudWxsID09PSBuZXdQcm9wcy50YWlsICYmXG4gICAgICAgICAgICAgICAgICAgIFwiaGlkZGVuXCIgPT09IG5ld1Byb3BzLnRhaWxNb2RlICYmXG4gICAgICAgICAgICAgICAgICAgICFuZXh0UmVzb3VyY2UuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICAgICAgICAgICFpc0h5ZHJhdGluZylcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIDIgKiBub3ckMSgpIC0gbmV3UHJvcHMucmVuZGVyaW5nU3RhcnRUaW1lID5cbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgJiZcbiAgICAgICAgICAgICAgICAgIDUzNjg3MDkxMiAhPT0gcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgICAgICAgICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gMTI4KSxcbiAgICAgICAgICAgICAgICAgICh0eXBlID0gITApLFxuICAgICAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKG5ld1Byb3BzLCAhMSksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubGFuZXMgPSA0MTk0MzA0KSk7XG4gICAgICAgICAgICBuZXdQcm9wcy5pc0JhY2t3YXJkc1xuICAgICAgICAgICAgICA/ICgobmV4dFJlc291cmNlLnNpYmxpbmcgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZCksXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV4dFJlc291cmNlKSlcbiAgICAgICAgICAgICAgOiAoKGN1cnJlbnQgPSBuZXdQcm9wcy5sYXN0KSxcbiAgICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50XG4gICAgICAgICAgICAgICAgICA/IChjdXJyZW50LnNpYmxpbmcgPSBuZXh0UmVzb3VyY2UpXG4gICAgICAgICAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG5leHRSZXNvdXJjZSksXG4gICAgICAgICAgICAgICAgKG5ld1Byb3BzLmxhc3QgPSBuZXh0UmVzb3VyY2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG51bGwgIT09IG5ld1Byb3BzLnRhaWwpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoY3VycmVudCA9IG5ld1Byb3BzLnRhaWwpLFxuICAgICAgICAgICAgICAobmV3UHJvcHMucmVuZGVyaW5nID0gY3VycmVudCksXG4gICAgICAgICAgICAgIChuZXdQcm9wcy50YWlsID0gY3VycmVudC5zaWJsaW5nKSxcbiAgICAgICAgICAgICAgKG5ld1Byb3BzLnJlbmRlcmluZ1N0YXJ0VGltZSA9IG5vdyQxKCkpLFxuICAgICAgICAgICAgICAoY3VycmVudC5zaWJsaW5nID0gbnVsbCksXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCksXG4gICAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IHR5cGVcbiAgICAgICAgICAgICAgICA/IChyZW5kZXJMYW5lcyAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrKSB8XG4gICAgICAgICAgICAgICAgICBGb3JjZVN1c3BlbnNlRmFsbGJhY2tcbiAgICAgICAgICAgICAgICA6IHJlbmRlckxhbmVzICYgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2spLFxuICAgICAgICAgICAgICBwdXNoKHN1c3BlbnNlU3RhY2tDdXJzb3IsIHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAgIGlzSHlkcmF0aW5nICYmXG4gICAgICAgICAgICAgICAgcHVzaFRyZWVGb3JrKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcy50cmVlRm9ya0NvdW50KSxcbiAgICAgICAgICAgICAgY3VycmVudFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIHBvcEhpZGRlbkNvbnRleHQod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgKG5ld1Byb3BzID0gbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSksXG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50XG4gICAgICAgICAgICAgID8gKG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkgIT09IG5ld1Byb3BzICYmXG4gICAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDgxOTIpXG4gICAgICAgICAgICAgIDogbmV3UHJvcHMgJiYgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDgxOTIpLFxuICAgICAgICAgICAgbmV3UHJvcHNcbiAgICAgICAgICAgICAgPyAwICE9PSAocmVuZGVyTGFuZXMgJiA1MzY4NzA5MTIpICYmXG4gICAgICAgICAgICAgICAgMCA9PT0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgMTI4KSAmJlxuICAgICAgICAgICAgICAgIChidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdWJ0cmVlRmxhZ3MgJiA2ICYmXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gODE5MikpXG4gICAgICAgICAgICAgIDogYnViYmxlUHJvcGVydGllcyh3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAocmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgICBudWxsICE9PSByZW5kZXJMYW5lcyAmJlxuICAgICAgICAgICAgICBzY2hlZHVsZVJldHJ5RWZmZWN0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcy5yZXRyeVF1ZXVlKSxcbiAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IG51bGwpLFxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCAmJlxuICAgICAgICAgICAgICAocmVuZGVyTGFuZXMgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLFxuICAgICAgICAgICAgKG5ld1Byb3BzID0gbnVsbCksXG4gICAgICAgICAgICBudWxsICE9PSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgIG51bGwgIT09IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sICYmXG4gICAgICAgICAgICAgIChuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLFxuICAgICAgICAgICAgbmV3UHJvcHMgIT09IHJlbmRlckxhbmVzICYmICh3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSAyMDQ4KSxcbiAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiYgcG9wKHJlc3VtZWRDYWNoZSwgd29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChyZW5kZXJMYW5lcyA9IG51bGwpLFxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiAocmVuZGVyTGFuZXMgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGUpLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZS5jYWNoZSAhPT0gcmVuZGVyTGFuZXMgJiZcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IDIwNDgpLFxuICAgICAgICAgICAgcG9wUHJvdmlkZXIoQ2FjaGVDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICBidWJibGVQcm9wZXJ0aWVzKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudGFnICtcbiAgICAgICAgICBcIikuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVud2luZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgIHBvcFRyZWVDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncyksXG4gICAgICAgICAgICBjdXJyZW50ICYgNjU1MzZcbiAgICAgICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmZsYWdzID0gKGN1cnJlbnQgJiAtNjU1MzcpIHwgMTI4KSxcbiAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlICYmXG4gICAgICAgICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwb3BQcm92aWRlcihDYWNoZUNvbnRleHQsIHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgKGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncyksXG4gICAgICAgICAgICAwICE9PSAoY3VycmVudCAmIDY1NTM2KSAmJiAwID09PSAoY3VycmVudCAmIDEyOClcbiAgICAgICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmZsYWdzID0gKGN1cnJlbnQgJiAtNjU1MzcpIHwgMTI4KSxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgaWYgKG51bGwgIT09IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICBpZiAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlRocmV3IGluIG5ld2x5IG1vdW50ZWQgZGVoeWRyYXRlZCBjb21wb25lbnQuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3M7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQgJiA2NTUzNlxuICAgICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzLmZsYWdzID0gKGN1cnJlbnQgJiAtNjU1MzcpIHwgMTI4KSxcbiAgICAgICAgICAgICAgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcylcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICBwb3BTdXNwZW5zZUhhbmRsZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50ICYmIG51bGwgIT09IGN1cnJlbnQuZGVoeWRyYXRlZCkge1xuICAgICAgICAgICAgaWYgKG51bGwgPT09IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSlcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJUaHJldyBpbiBuZXdseSBtb3VudGVkIGRlaHlkcmF0ZWQgY29tcG9uZW50LiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuICAgICAgICAgIHJldHVybiBjdXJyZW50ICYgNjU1MzZcbiAgICAgICAgICAgID8gKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IChjdXJyZW50ICYgLTY1NTM3KSB8IDEyOCksXG4gICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgcmV0dXJuIHBvcChzdXNwZW5zZVN0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyksIG51bGw7XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLnR5cGUsIHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcG9wU3VzcGVuc2VIYW5kbGVyKHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgIHBvcEhpZGRlbkNvbnRleHQod29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJiBwb3AocmVzdW1lZENhY2hlLCB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICAoY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmZsYWdzKSxcbiAgICAgICAgICAgIGN1cnJlbnQgJiA2NTUzNlxuICAgICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSAoY3VycmVudCAmIC02NTUzNykgfCAxMjgpLFxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUgJiZcbiAgICAgICAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICApO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHJldHVybiBwb3BQcm92aWRlcihDYWNoZUNvbnRleHQsIHdvcmtJblByb2dyZXNzKSwgbnVsbDtcbiAgICAgICAgY2FzZSAyNTpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdW53aW5kSW50ZXJydXB0ZWRXb3JrKGN1cnJlbnQsIGludGVycnVwdGVkV29yaykge1xuICAgICAgcG9wVHJlZUNvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIHN3aXRjaCAoaW50ZXJydXB0ZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcG9wUHJvdmlkZXIoQ2FjaGVDb250ZXh0LCBpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIHBvcEhvc3RDb250YWluZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHBvcEhvc3RDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgbnVsbCAhPT0gaW50ZXJydXB0ZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHBvcChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHBvcFByb3ZpZGVyKGludGVycnVwdGVkV29yay50eXBlLCBpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIHBvcFN1c3BlbnNlSGFuZGxlcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICAgIHBvcEhpZGRlbkNvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmIHBvcChyZXN1bWVkQ2FjaGUsIGludGVycnVwdGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjQ6XG4gICAgICAgICAgcG9wUHJvdmlkZXIoQ2FjaGVDb250ZXh0LCBpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzaG91bGRQcm9maWxlKGN1cnJlbnQpIHtcbiAgICAgIHJldHVybiAoY3VycmVudC5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvb2tMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaywgaG9va0ZsYWdzKSB7XG4gICAgICBzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaylcbiAgICAgICAgPyAoc3RhcnRFZmZlY3RUaW1lcigpLFxuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoaG9va0ZsYWdzLCBmaW5pc2hlZFdvcmspLFxuICAgICAgICAgIHJlY29yZEVmZmVjdER1cmF0aW9uKCkpXG4gICAgICAgIDogY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChob29rRmxhZ3MsIGZpbmlzaGVkV29yayk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvb2tMYXlvdXRVbm1vdW50RWZmZWN0cyhcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICBob29rRmxhZ3NcbiAgICApIHtcbiAgICAgIHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKVxuICAgICAgICA/IChzdGFydEVmZmVjdFRpbWVyKCksXG4gICAgICAgICAgY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICAgICAgICAgICAgaG9va0ZsYWdzLFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuICAgICAgICAgICksXG4gICAgICAgICAgcmVjb3JkRWZmZWN0RHVyYXRpb24oKSlcbiAgICAgICAgOiBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgICBob29rRmxhZ3MsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yXG4gICAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChmbGFncywgZmluaXNoZWRXb3JrKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUsXG4gICAgICAgICAgbGFzdEVmZmVjdCA9IG51bGwgIT09IHVwZGF0ZVF1ZXVlID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG4gICAgICAgIGlmIChudWxsICE9PSBsYXN0RWZmZWN0KSB7XG4gICAgICAgICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgICAgICAgIHVwZGF0ZVF1ZXVlID0gZmlyc3RFZmZlY3Q7XG4gICAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAodXBkYXRlUXVldWUudGFnICYgZmxhZ3MpID09PSBmbGFncyAmJlxuICAgICAgICAgICAgICAoKGZsYWdzICYgUGFzc2l2ZSkgIT09IE5vRmxhZ3NcbiAgICAgICAgICAgICAgICA/IG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0YXJ0ZWQgJiZcbiAgICAgICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0YXJ0ZWQoXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogKGZsYWdzICYgTGF5b3V0KSAhPT0gTm9GbGFncyAmJlxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0TW91bnRTdGFydGVkICYmXG4gICAgICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RNb3VudFN0YXJ0ZWQoXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKGxhc3RFZmZlY3QgPSB2b2lkIDApLFxuICAgICAgICAgICAgICAoZmxhZ3MgJiBJbnNlcnRpb24pICE9PSBOb0ZsYWdzICYmXG4gICAgICAgICAgICAgICAgKGlzUnVubmluZ0luc2VydGlvbkVmZmVjdCA9ICEwKSxcbiAgICAgICAgICAgICAgKGxhc3RFZmZlY3QgPSBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY2FsbENyZWF0ZUluREVWLFxuICAgICAgICAgICAgICAgIHVwZGF0ZVF1ZXVlXG4gICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAoZmxhZ3MgJiBJbnNlcnRpb24pICE9PSBOb0ZsYWdzICYmXG4gICAgICAgICAgICAgICAgKGlzUnVubmluZ0luc2VydGlvbkVmZmVjdCA9ICExKSxcbiAgICAgICAgICAgICAgKGZsYWdzICYgUGFzc2l2ZSkgIT09IE5vRmxhZ3NcbiAgICAgICAgICAgICAgICA/IG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0b3BwZWQgJiZcbiAgICAgICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RNb3VudFN0b3BwZWQoKVxuICAgICAgICAgICAgICAgIDogKGZsYWdzICYgTGF5b3V0KSAhPT0gTm9GbGFncyAmJlxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gaW5qZWN0ZWRQcm9maWxpbmdIb29rcyAmJlxuICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0TW91bnRTdG9wcGVkICYmXG4gICAgICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RNb3VudFN0b3BwZWQoKSxcbiAgICAgICAgICAgICAgdm9pZCAwICE9PSBsYXN0RWZmZWN0ICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGxhc3RFZmZlY3QpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdmFyIGhvb2tOYW1lID0gdm9pZCAwO1xuICAgICAgICAgICAgICBob29rTmFtZSA9XG4gICAgICAgICAgICAgICAgMCAhPT0gKHVwZGF0ZVF1ZXVlLnRhZyAmIExheW91dClcbiAgICAgICAgICAgICAgICAgID8gXCJ1c2VMYXlvdXRFZmZlY3RcIlxuICAgICAgICAgICAgICAgICAgOiAwICE9PSAodXBkYXRlUXVldWUudGFnICYgSW5zZXJ0aW9uKVxuICAgICAgICAgICAgICAgICAgICA/IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgOiBcInVzZUVmZmVjdFwiO1xuICAgICAgICAgICAgICB2YXIgYWRkZW5kdW0gPSB2b2lkIDA7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID1cbiAgICAgICAgICAgICAgICBudWxsID09PSBsYXN0RWZmZWN0XG4gICAgICAgICAgICAgICAgICA/IFwiIFlvdSByZXR1cm5lZCBudWxsLiBJZiB5b3VyIGVmZmVjdCBkb2VzIG5vdCByZXF1aXJlIGNsZWFuIHVwLCByZXR1cm4gdW5kZWZpbmVkIChvciBub3RoaW5nKS5cIlxuICAgICAgICAgICAgICAgICAgOiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBsYXN0RWZmZWN0LnRoZW5cbiAgICAgICAgICAgICAgICAgICAgPyBcIlxcblxcbkl0IGxvb2tzIGxpa2UgeW91IHdyb3RlIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICBob29rTmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgXCIoYXN5bmMgKCkgPT4gLi4uKSBvciByZXR1cm5lZCBhIFByb21pc2UuIEluc3RlYWQsIHdyaXRlIHRoZSBhc3luYyBmdW5jdGlvbiBpbnNpZGUgeW91ciBlZmZlY3QgYW5kIGNhbGwgaXQgaW1tZWRpYXRlbHk6XFxuXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIGhvb2tOYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICBcIigoKSA9PiB7XFxuICBhc3luYyBmdW5jdGlvbiBmZXRjaERhdGEoKSB7XFxuICAgIC8vIFlvdSBjYW4gYXdhaXQgaGVyZVxcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IE15QVBJLmdldERhdGEoc29tZUlkKTtcXG4gICAgLy8gLi4uXFxuICB9XFxuICBmZXRjaERhdGEoKTtcXG59LCBbc29tZUlkXSk7IC8vIE9yIFtdIGlmIGVmZmVjdCBkb2Vzbid0IG5lZWQgcHJvcHMgb3Igc3RhdGVcXG5cXG5MZWFybiBtb3JlIGFib3V0IGRhdGEgZmV0Y2hpbmcgd2l0aCBIb29rczogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9ob29rcy1kYXRhLWZldGNoaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIiBZb3UgcmV0dXJuZWQ6IFwiICsgbGFzdEVmZmVjdDtcbiAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChuLCBhKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIiVzIG11c3Qgbm90IHJldHVybiBhbnl0aGluZyBiZXNpZGVzIGEgZnVuY3Rpb24sIHdoaWNoIGlzIHVzZWQgZm9yIGNsZWFuLXVwLiVzXCIsXG4gICAgICAgICAgICAgICAgICAgIG4sXG4gICAgICAgICAgICAgICAgICAgIGFcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBob29rTmFtZSxcbiAgICAgICAgICAgICAgICBhZGRlbmR1bVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdXBkYXRlUXVldWUgPSB1cGRhdGVRdWV1ZS5uZXh0O1xuICAgICAgICAgIH0gd2hpbGUgKHVwZGF0ZVF1ZXVlICE9PSBmaXJzdEVmZmVjdCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICBmbGFncyxcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3JcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSxcbiAgICAgICAgICBsYXN0RWZmZWN0ID0gbnVsbCAhPT0gdXBkYXRlUXVldWUgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcbiAgICAgICAgaWYgKG51bGwgIT09IGxhc3RFZmZlY3QpIHtcbiAgICAgICAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgICAgICAgdXBkYXRlUXVldWUgPSBmaXJzdEVmZmVjdDtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoKHVwZGF0ZVF1ZXVlLnRhZyAmIGZsYWdzKSA9PT0gZmxhZ3MpIHtcbiAgICAgICAgICAgICAgdmFyIGluc3QgPSB1cGRhdGVRdWV1ZS5pbnN0LFxuICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBpbnN0LmRlc3Ryb3k7XG4gICAgICAgICAgICAgIHZvaWQgMCAhPT0gZGVzdHJveSAmJlxuICAgICAgICAgICAgICAgICgoaW5zdC5kZXN0cm95ID0gdm9pZCAwKSxcbiAgICAgICAgICAgICAgICAoZmxhZ3MgJiBQYXNzaXZlKSAhPT0gTm9GbGFnc1xuICAgICAgICAgICAgICAgICAgPyBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdFVubW91bnRTdGFydGVkICYmXG4gICAgICAgICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFBhc3NpdmVFZmZlY3RVbm1vdW50U3RhcnRlZChcbiAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiAoZmxhZ3MgJiBMYXlvdXQpICE9PSBOb0ZsYWdzICYmXG4gICAgICAgICAgICAgICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RhcnRlZCAmJlxuICAgICAgICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRMYXlvdXRFZmZlY3RVbm1vdW50U3RhcnRlZChcbiAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAoZmxhZ3MgJiBJbnNlcnRpb24pICE9PSBOb0ZsYWdzICYmXG4gICAgICAgICAgICAgICAgICAoaXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0ID0gITApLFxuICAgICAgICAgICAgICAgIChsYXN0RWZmZWN0ID0gZmluaXNoZWRXb3JrKSxcbiAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgIGxhc3RFZmZlY3QsXG4gICAgICAgICAgICAgICAgICBjYWxsRGVzdHJveUluREVWLFxuICAgICAgICAgICAgICAgICAgbGFzdEVmZmVjdCxcbiAgICAgICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICAgICAgICBkZXN0cm95XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAoZmxhZ3MgJiBJbnNlcnRpb24pICE9PSBOb0ZsYWdzICYmXG4gICAgICAgICAgICAgICAgICAoaXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0ID0gITEpLFxuICAgICAgICAgICAgICAgIChmbGFncyAmIFBhc3NpdmUpICE9PSBOb0ZsYWdzXG4gICAgICAgICAgICAgICAgICA/IG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRQYXNzaXZlRWZmZWN0VW5tb3VudFN0b3BwZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50UGFzc2l2ZUVmZmVjdFVubW91bnRTdG9wcGVkKClcbiAgICAgICAgICAgICAgICAgIDogKGZsYWdzICYgTGF5b3V0KSAhPT0gTm9GbGFncyAmJlxuICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0VW5tb3VudFN0b3BwZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50TGF5b3V0RWZmZWN0VW5tb3VudFN0b3BwZWQoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVRdWV1ZSA9IHVwZGF0ZVF1ZXVlLm5leHQ7XG4gICAgICAgICAgfSB3aGlsZSAodXBkYXRlUXVldWUgIT09IGZpcnN0RWZmZWN0KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvb2tQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkV29yaywgaG9va0ZsYWdzKSB7XG4gICAgICBzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaylcbiAgICAgICAgPyAoc3RhcnRFZmZlY3RUaW1lcigpLFxuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoaG9va0ZsYWdzLCBmaW5pc2hlZFdvcmspLFxuICAgICAgICAgIHJlY29yZEVmZmVjdER1cmF0aW9uKCkpXG4gICAgICAgIDogY29tbWl0SG9va0VmZmVjdExpc3RNb3VudChob29rRmxhZ3MsIGZpbmlzaGVkV29yayk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvb2tQYXNzaXZlVW5tb3VudEVmZmVjdHMoXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgaG9va0ZsYWdzXG4gICAgKSB7XG4gICAgICBzaG91bGRQcm9maWxlKGZpbmlzaGVkV29yaylcbiAgICAgICAgPyAoc3RhcnRFZmZlY3RUaW1lcigpLFxuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChcbiAgICAgICAgICAgIGhvb2tGbGFncyxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3JcbiAgICAgICAgICApLFxuICAgICAgICAgIHJlY29yZEVmZmVjdER1cmF0aW9uKCkpXG4gICAgICAgIDogY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KFxuICAgICAgICAgICAgaG9va0ZsYWdzLFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvclxuICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdENsYXNzQ2FsbGJhY2tzKGZpbmlzaGVkV29yaykge1xuICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICAgICAgaWYgKG51bGwgIT09IHVwZGF0ZVF1ZXVlKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgIGZpbmlzaGVkV29yay50eXBlLmRlZmF1bHRQcm9wcyB8fFxuICAgICAgICAgIFwicmVmXCIgaW4gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMgfHxcbiAgICAgICAgICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzIHx8XG4gICAgICAgICAgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlLiBUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIGEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkV4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUuIFRoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIixcbiAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8IFwiaW5zdGFuY2VcIlxuICAgICAgICAgICAgKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBjb21taXRDYWxsYmFja3MsXG4gICAgICAgICAgICB1cGRhdGVRdWV1ZSxcbiAgICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjYWxsR2V0U25hcHNob3RCZWZvcmVVcGRhdGVzKGluc3RhbmNlLCBwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0Q2xhc3NTbmFwc2hvdChmaW5pc2hlZFdvcmssIGN1cnJlbnQpIHtcbiAgICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHMsXG4gICAgICAgIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgZmluaXNoZWRXb3JrLnR5cGUuZGVmYXVsdFByb3BzIHx8XG4gICAgICAgIFwicmVmXCIgaW4gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMgfHxcbiAgICAgICAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyB8fFxuICAgICAgICAoY3VycmVudC5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUuIFRoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIixcbiAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICApLFxuICAgICAgICBjdXJyZW50LnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS4gVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSBhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiLFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8IFwiaW5zdGFuY2VcIlxuICAgICAgICAgICkpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlc29sdmVkUHJldlByb3BzID0gcmVzb2x2ZUNsYXNzQ29tcG9uZW50UHJvcHMoXG4gICAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUsXG4gICAgICAgICAgcHJldlByb3BzXG4gICAgICAgICk7XG4gICAgICAgIHZhciBzbmFwc2hvdCA9IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICBjYWxsR2V0U25hcHNob3RCZWZvcmVVcGRhdGVzLFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgcmVzb2x2ZWRQcmV2UHJvcHMsXG4gICAgICAgICAgcHJldlN0YXRlXG4gICAgICAgICk7XG4gICAgICAgIHByZXZQcm9wcyA9IGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlO1xuICAgICAgICB2b2lkIDAgIT09IHNuYXBzaG90IHx8XG4gICAgICAgICAgcHJldlByb3BzLmhhcyhmaW5pc2hlZFdvcmsudHlwZSkgfHxcbiAgICAgICAgICAocHJldlByb3BzLmFkZChmaW5pc2hlZFdvcmsudHlwZSksXG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoZmluaXNoZWRXb3JrLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIiVzLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCk6IEEgc25hcHNob3QgdmFsdWUgKG9yIG51bGwpIG11c3QgYmUgcmV0dXJuZWQuIFlvdSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZC5cIixcbiAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgY3VycmVudC5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IHNuYXBzaG90O1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChcbiAgICAgIGN1cnJlbnQsXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgaW5zdGFuY2VcbiAgICApIHtcbiAgICAgIGluc3RhbmNlLnByb3BzID0gcmVzb2x2ZUNsYXNzQ29tcG9uZW50UHJvcHMoXG4gICAgICAgIGN1cnJlbnQudHlwZSxcbiAgICAgICAgY3VycmVudC5tZW1vaXplZFByb3BzXG4gICAgICApO1xuICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICBzaG91bGRQcm9maWxlKGN1cnJlbnQpXG4gICAgICAgID8gKHN0YXJ0RWZmZWN0VGltZXIoKSxcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRJbkRFVixcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgaW5zdGFuY2VcbiAgICAgICAgICApLFxuICAgICAgICAgIHJlY29yZEVmZmVjdER1cmF0aW9uKCkpXG4gICAgICAgIDogcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50SW5ERVYsXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0QXR0YWNoUmVmKGZpbmlzaGVkV29yaykge1xuICAgICAgdmFyIHJlZiA9IGZpbmlzaGVkV29yay5yZWY7XG4gICAgICBpZiAobnVsbCAhPT0gcmVmKSB7XG4gICAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2VUb1VzZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDMwOlxuICAgICAgICAgICAgaW5zdGFuY2VUb1VzZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaW5zdGFuY2VUb1VzZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlZilcbiAgICAgICAgICBpZiAoc2hvdWxkUHJvZmlsZShmaW5pc2hlZFdvcmspKVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgc3RhcnRFZmZlY3RUaW1lcigpLFxuICAgICAgICAgICAgICAgIChmaW5pc2hlZFdvcmsucmVmQ2xlYW51cCA9IHJlZihpbnN0YW5jZVRvVXNlKSk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICByZWNvcmRFZmZlY3REdXJhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgZmluaXNoZWRXb3JrLnJlZkNsZWFudXAgPSByZWYoaW5zdGFuY2VUb1VzZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcmVmXG4gICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXCJTdHJpbmcgcmVmcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZC5cIilcbiAgICAgICAgICAgIDogcmVmLmhhc093blByb3BlcnR5KFwiY3VycmVudFwiKSB8fFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiVW5leHBlY3RlZCByZWYgb2JqZWN0IHByb3ZpZGVkIGZvciAlcy4gVXNlIGVpdGhlciBhIHJlZi1zZXR0ZXIgZnVuY3Rpb24gb3IgUmVhY3QuY3JlYXRlUmVmKCkuXCIsXG4gICAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAocmVmLmN1cnJlbnQgPSBpbnN0YW5jZVRvVXNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2FmZWx5QXR0YWNoUmVmKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJ1bldpdGhGaWJlckluREVWKGN1cnJlbnQsIGNvbW1pdEF0dGFjaFJlZiwgY3VycmVudCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNhZmVseURldGFjaFJlZihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKSB7XG4gICAgICB2YXIgcmVmID0gY3VycmVudC5yZWYsXG4gICAgICAgIHJlZkNsZWFudXAgPSBjdXJyZW50LnJlZkNsZWFudXA7XG4gICAgICBpZiAobnVsbCAhPT0gcmVmKVxuICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVmQ2xlYW51cClcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNob3VsZFByb2ZpbGUoY3VycmVudCkpXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc3RhcnRFZmZlY3RUaW1lcigpLCBydW5XaXRoRmliZXJJbkRFVihjdXJyZW50LCByZWZDbGVhbnVwKTtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICByZWNvcmRFZmZlY3REdXJhdGlvbihjdXJyZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBydW5XaXRoRmliZXJJbkRFVihjdXJyZW50LCByZWZDbGVhbnVwKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAoY3VycmVudC5yZWZDbGVhbnVwID0gbnVsbCksXG4gICAgICAgICAgICAgIChjdXJyZW50ID0gY3VycmVudC5hbHRlcm5hdGUpLFxuICAgICAgICAgICAgICBudWxsICE9IGN1cnJlbnQgJiYgKGN1cnJlbnQucmVmQ2xlYW51cCA9IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVmKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkUHJvZmlsZShjdXJyZW50KSlcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzdGFydEVmZmVjdFRpbWVyKCksIHJ1bldpdGhGaWJlckluREVWKGN1cnJlbnQsIHJlZiwgbnVsbCk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVjb3JkRWZmZWN0RHVyYXRpb24oY3VycmVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgcnVuV2l0aEZpYmVySW5ERVYoY3VycmVudCwgcmVmLCBudWxsKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvciQ3KSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLCBlcnJvciQ3KTtcbiAgICAgICAgICB9XG4gICAgICAgIGVsc2UgcmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRQcm9maWxlcihcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIGN1cnJlbnQsXG4gICAgICBjb21taXRTdGFydFRpbWUsXG4gICAgICBlZmZlY3REdXJhdGlvblxuICAgICkge1xuICAgICAgdmFyIF9maW5pc2hlZFdvcmskbWVtb2l6ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLFxuICAgICAgICBpZCA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZS5pZCxcbiAgICAgICAgb25Db21taXQgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUub25Db21taXQ7XG4gICAgICBfZmluaXNoZWRXb3JrJG1lbW9pemUgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUub25SZW5kZXI7XG4gICAgICBjdXJyZW50ID0gbnVsbCA9PT0gY3VycmVudCA/IFwibW91bnRcIiA6IFwidXBkYXRlXCI7XG4gICAgICBjdXJyZW50VXBkYXRlSXNOZXN0ZWQgJiYgKGN1cnJlbnQgPSBcIm5lc3RlZC11cGRhdGVcIik7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfZmluaXNoZWRXb3JrJG1lbW9pemUgJiZcbiAgICAgICAgX2ZpbmlzaGVkV29yayRtZW1vaXplKFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLmFjdHVhbER1cmF0aW9uLFxuICAgICAgICAgIGZpbmlzaGVkV29yay50cmVlQmFzZUR1cmF0aW9uLFxuICAgICAgICAgIGZpbmlzaGVkV29yay5hY3R1YWxTdGFydFRpbWUsXG4gICAgICAgICAgY29tbWl0U3RhcnRUaW1lXG4gICAgICAgICk7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBvbkNvbW1pdCAmJlxuICAgICAgICBvbkNvbW1pdChpZCwgY3VycmVudCwgZWZmZWN0RHVyYXRpb24sIGNvbW1pdFN0YXJ0VGltZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFByb2ZpbGVyUG9zdENvbW1pdEltcGwoXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICBjdXJyZW50LFxuICAgICAgY29tbWl0U3RhcnRUaW1lLFxuICAgICAgcGFzc2l2ZUVmZmVjdER1cmF0aW9uXG4gICAgKSB7XG4gICAgICB2YXIgX2ZpbmlzaGVkV29yayRtZW1vaXplMiA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzO1xuICAgICAgZmluaXNoZWRXb3JrID0gX2ZpbmlzaGVkV29yayRtZW1vaXplMi5pZDtcbiAgICAgIF9maW5pc2hlZFdvcmskbWVtb2l6ZTIgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUyLm9uUG9zdENvbW1pdDtcbiAgICAgIGN1cnJlbnQgPSBudWxsID09PSBjdXJyZW50ID8gXCJtb3VudFwiIDogXCJ1cGRhdGVcIjtcbiAgICAgIGN1cnJlbnRVcGRhdGVJc05lc3RlZCAmJiAoY3VycmVudCA9IFwibmVzdGVkLXVwZGF0ZVwiKTtcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIF9maW5pc2hlZFdvcmskbWVtb2l6ZTIgJiZcbiAgICAgICAgX2ZpbmlzaGVkV29yayRtZW1vaXplMihcbiAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICBwYXNzaXZlRWZmZWN0RHVyYXRpb24sXG4gICAgICAgICAgY29tbWl0U3RhcnRUaW1lXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvc3RNb3VudChmaW5pc2hlZFdvcmspIHtcbiAgICAgIHZhciB0eXBlID0gZmluaXNoZWRXb3JrLnR5cGUsXG4gICAgICAgIHByb3BzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMsXG4gICAgICAgIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICBjb21taXRNb3VudCxcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIHByb3BzLFxuICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvc3RVcGRhdGUoZmluaXNoZWRXb3JrLCBuZXdQcm9wcywgb2xkUHJvcHMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICBjb21taXRVcGRhdGUsXG4gICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZSxcbiAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZSxcbiAgICAgICAgICBvbGRQcm9wcyxcbiAgICAgICAgICBuZXdQcm9wcyxcbiAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc0hvc3RQYXJlbnQoZmliZXIpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDUgPT09IGZpYmVyLnRhZyB8fFxuICAgICAgICAzID09PSBmaWJlci50YWcgfHxcbiAgICAgICAgMjYgPT09IGZpYmVyLnRhZyB8fFxuICAgICAgICAoMjcgPT09IGZpYmVyLnRhZyAmJiBpc1NpbmdsZXRvblNjb3BlKGZpYmVyLnR5cGUpKSB8fFxuICAgICAgICA0ID09PSBmaWJlci50YWdcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEhvc3RTaWJsaW5nKGZpYmVyKSB7XG4gICAgICBhOiBmb3IgKDs7KSB7XG4gICAgICAgIGZvciAoOyBudWxsID09PSBmaWJlci5zaWJsaW5nOyApIHtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gZmliZXIucmV0dXJuIHx8IGlzSG9zdFBhcmVudChmaWJlci5yZXR1cm4pKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICBmaWJlciA9IGZpYmVyLnJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmaWJlci5zaWJsaW5nLnJldHVybiA9IGZpYmVyLnJldHVybjtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICBmaWJlciA9IGZpYmVyLnNpYmxpbmc7XG4gICAgICAgICAgNSAhPT0gZmliZXIudGFnICYmIDYgIT09IGZpYmVyLnRhZyAmJiAxOCAhPT0gZmliZXIudGFnO1xuXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICgyNyA9PT0gZmliZXIudGFnICYmIGlzU2luZ2xldG9uU2NvcGUoZmliZXIudHlwZSkpIGNvbnRpbnVlIGE7XG4gICAgICAgICAgaWYgKGZpYmVyLmZsYWdzICYgMikgY29udGludWUgYTtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gZmliZXIuY2hpbGQgfHwgNCA9PT0gZmliZXIudGFnKSBjb250aW51ZSBhO1xuICAgICAgICAgIGVsc2UgKGZpYmVyLmNoaWxkLnJldHVybiA9IGZpYmVyKSwgKGZpYmVyID0gZmliZXIuY2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKGZpYmVyLmZsYWdzICYgMikpIHJldHVybiBmaWJlci5zdGF0ZU5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIobm9kZSwgYmVmb3JlLCBwYXJlbnQpIHtcbiAgICAgIHZhciB0YWcgPSBub2RlLnRhZztcbiAgICAgIGlmICg1ID09PSB0YWcgfHwgNiA9PT0gdGFnKVxuICAgICAgICAobm9kZSA9IG5vZGUuc3RhdGVOb2RlKSxcbiAgICAgICAgICBiZWZvcmVcbiAgICAgICAgICAgID8gKHdhcm5Gb3JSZWFjdENoaWxkcmVuQ29uZmxpY3QocGFyZW50KSxcbiAgICAgICAgICAgICAgKDkgPT09IHBhcmVudC5ub2RlVHlwZVxuICAgICAgICAgICAgICAgID8gcGFyZW50LmJvZHlcbiAgICAgICAgICAgICAgICA6IFwiSFRNTFwiID09PSBwYXJlbnQubm9kZU5hbWVcbiAgICAgICAgICAgICAgICAgID8gcGFyZW50Lm93bmVyRG9jdW1lbnQuYm9keVxuICAgICAgICAgICAgICAgICAgOiBwYXJlbnRcbiAgICAgICAgICAgICAgKS5pbnNlcnRCZWZvcmUobm9kZSwgYmVmb3JlKSlcbiAgICAgICAgICAgIDogKHdhcm5Gb3JSZWFjdENoaWxkcmVuQ29uZmxpY3QocGFyZW50KSxcbiAgICAgICAgICAgICAgKGJlZm9yZSA9XG4gICAgICAgICAgICAgICAgOSA9PT0gcGFyZW50Lm5vZGVUeXBlXG4gICAgICAgICAgICAgICAgICA/IHBhcmVudC5ib2R5XG4gICAgICAgICAgICAgICAgICA6IFwiSFRNTFwiID09PSBwYXJlbnQubm9kZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgPyBwYXJlbnQub3duZXJEb2N1bWVudC5ib2R5XG4gICAgICAgICAgICAgICAgICAgIDogcGFyZW50KSxcbiAgICAgICAgICAgICAgYmVmb3JlLmFwcGVuZENoaWxkKG5vZGUpLFxuICAgICAgICAgICAgICAocGFyZW50ID0gcGFyZW50Ll9yZWFjdFJvb3RDb250YWluZXIpLFxuICAgICAgICAgICAgICAobnVsbCAhPT0gcGFyZW50ICYmIHZvaWQgMCAhPT0gcGFyZW50KSB8fFxuICAgICAgICAgICAgICAgIG51bGwgIT09IGJlZm9yZS5vbmNsaWNrIHx8XG4gICAgICAgICAgICAgICAgKGJlZm9yZS5vbmNsaWNrID0gbm9vcCQxKSk7XG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgNCAhPT0gdGFnICYmXG4gICAgICAgICgyNyA9PT0gdGFnICYmXG4gICAgICAgICAgaXNTaW5nbGV0b25TY29wZShub2RlLnR5cGUpICYmXG4gICAgICAgICAgKChwYXJlbnQgPSBub2RlLnN0YXRlTm9kZSksIChiZWZvcmUgPSBudWxsKSksXG4gICAgICAgIChub2RlID0gbm9kZS5jaGlsZCksXG4gICAgICAgIG51bGwgIT09IG5vZGUpXG4gICAgICApXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihub2RlLCBiZWZvcmUsIHBhcmVudCksXG4gICAgICAgICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgICAgICAgIG51bGwgIT09IG5vZGU7XG5cbiAgICAgICAgKVxuICAgICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIobm9kZSwgYmVmb3JlLCBwYXJlbnQpLFxuICAgICAgICAgICAgKG5vZGUgPSBub2RlLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUobm9kZSwgYmVmb3JlLCBwYXJlbnQpIHtcbiAgICAgIHZhciB0YWcgPSBub2RlLnRhZztcbiAgICAgIGlmICg1ID09PSB0YWcgfHwgNiA9PT0gdGFnKVxuICAgICAgICAobm9kZSA9IG5vZGUuc3RhdGVOb2RlKSxcbiAgICAgICAgICBiZWZvcmUgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIGJlZm9yZSkgOiBwYXJlbnQuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgNCAhPT0gdGFnICYmXG4gICAgICAgICgyNyA9PT0gdGFnICYmIGlzU2luZ2xldG9uU2NvcGUobm9kZS50eXBlKSAmJiAocGFyZW50ID0gbm9kZS5zdGF0ZU5vZGUpLFxuICAgICAgICAobm9kZSA9IG5vZGUuY2hpbGQpLFxuICAgICAgICBudWxsICE9PSBub2RlKVxuICAgICAgKVxuICAgICAgICBmb3IgKFxuICAgICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShub2RlLCBiZWZvcmUsIHBhcmVudCksXG4gICAgICAgICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgICAgICAgIG51bGwgIT09IG5vZGU7XG5cbiAgICAgICAgKVxuICAgICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShub2RlLCBiZWZvcmUsIHBhcmVudCksXG4gICAgICAgICAgICAobm9kZSA9IG5vZGUuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFBsYWNlbWVudChmaW5pc2hlZFdvcmspIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBob3N0UGFyZW50RmliZXIsIHBhcmVudEZpYmVyID0gZmluaXNoZWRXb3JrLnJldHVybjtcbiAgICAgICAgbnVsbCAhPT0gcGFyZW50RmliZXI7XG5cbiAgICAgICkge1xuICAgICAgICBpZiAoaXNIb3N0UGFyZW50KHBhcmVudEZpYmVyKSkge1xuICAgICAgICAgIGhvc3RQYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIucmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKG51bGwgPT0gaG9zdFBhcmVudEZpYmVyKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIkV4cGVjdGVkIHRvIGZpbmQgYSBob3N0IHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgICAgc3dpdGNoIChob3N0UGFyZW50RmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgaG9zdFBhcmVudEZpYmVyID0gaG9zdFBhcmVudEZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICBwYXJlbnRGaWJlciA9IGdldEhvc3RTaWJsaW5nKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgcGFyZW50RmliZXIsXG4gICAgICAgICAgICBob3N0UGFyZW50RmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcGFyZW50RmliZXIgPSBob3N0UGFyZW50RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgIGhvc3RQYXJlbnRGaWJlci5mbGFncyAmIDMyICYmXG4gICAgICAgICAgICAocmVzZXRUZXh0Q29udGVudChwYXJlbnRGaWJlciksIChob3N0UGFyZW50RmliZXIuZmxhZ3MgJj0gLTMzKSk7XG4gICAgICAgICAgaG9zdFBhcmVudEZpYmVyID0gZ2V0SG9zdFNpYmxpbmcoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBob3N0UGFyZW50RmliZXIsXG4gICAgICAgICAgICBwYXJlbnRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGhvc3RQYXJlbnRGaWJlciA9IGhvc3RQYXJlbnRGaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICBwYXJlbnRGaWJlciA9IGdldEhvc3RTaWJsaW5nKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIHBhcmVudEZpYmVyLFxuICAgICAgICAgICAgaG9zdFBhcmVudEZpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiSW52YWxpZCBob3N0IHBhcmVudCBmaWJlci4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEhvc3RTaW5nbGV0b25BY3F1aXNpdGlvbihmaW5pc2hlZFdvcmspIHtcbiAgICAgIHZhciBzaW5nbGV0b24gPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLFxuICAgICAgICBwcm9wcyA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGFjcXVpcmVTaW5nbGV0b25JbnN0YW5jZSxcbiAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZSxcbiAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICBzaW5nbGV0b24sXG4gICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpcnN0Q2hpbGQpIHtcbiAgICAgIHJvb3QgPSByb290LmNvbnRhaW5lckluZm87XG4gICAgICBldmVudHNFbmFibGVkID0gX2VuYWJsZWQ7XG4gICAgICByb290ID0gZ2V0QWN0aXZlRWxlbWVudERlZXAocm9vdCk7XG4gICAgICBpZiAoaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKHJvb3QpKSB7XG4gICAgICAgIGlmIChcInNlbGVjdGlvblN0YXJ0XCIgaW4gcm9vdClcbiAgICAgICAgICB2YXIgSlNDb21waWxlcl90ZW1wID0ge1xuICAgICAgICAgICAgc3RhcnQ6IHJvb3Quc2VsZWN0aW9uU3RhcnQsXG4gICAgICAgICAgICBlbmQ6IHJvb3Quc2VsZWN0aW9uRW5kXG4gICAgICAgICAgfTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9XG4gICAgICAgICAgICAgICgoSlNDb21waWxlcl90ZW1wID0gcm9vdC5vd25lckRvY3VtZW50KSAmJlxuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcC5kZWZhdWx0VmlldykgfHxcbiAgICAgICAgICAgICAgd2luZG93O1xuICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9XG4gICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcC5nZXRTZWxlY3Rpb24gJiYgSlNDb21waWxlcl90ZW1wLmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiAwICE9PSBzZWxlY3Rpb24ucmFuZ2VDb3VudCkge1xuICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZTtcbiAgICAgICAgICAgICAgdmFyIGFuY2hvck9mZnNldCA9IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgICAgICAgZm9jdXNOb2RlID0gc2VsZWN0aW9uLmZvY3VzTm9kZTtcbiAgICAgICAgICAgICAgc2VsZWN0aW9uID0gc2VsZWN0aW9uLmZvY3VzT2Zmc2V0O1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcC5ub2RlVHlwZSwgZm9jdXNOb2RlLm5vZGVUeXBlO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlJDIpIHtcbiAgICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IDAsXG4gICAgICAgICAgICAgICAgc3RhcnQgPSAtMSxcbiAgICAgICAgICAgICAgICBlbmQgPSAtMSxcbiAgICAgICAgICAgICAgICBpbmRleFdpdGhpbkFuY2hvciA9IDAsXG4gICAgICAgICAgICAgICAgaW5kZXhXaXRoaW5Gb2N1cyA9IDAsXG4gICAgICAgICAgICAgICAgbm9kZSA9IHJvb3QsXG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IG51bGw7XG4gICAgICAgICAgICAgIGI6IGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBuZXh0OyA7ICkge1xuICAgICAgICAgICAgICAgICAgbm9kZSAhPT0gSlNDb21waWxlcl90ZW1wIHx8XG4gICAgICAgICAgICAgICAgICAgICgwICE9PSBhbmNob3JPZmZzZXQgJiYgMyAhPT0gbm9kZS5ub2RlVHlwZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKHN0YXJ0ID0gbGVuZ3RoICsgYW5jaG9yT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgIG5vZGUgIT09IGZvY3VzTm9kZSB8fFxuICAgICAgICAgICAgICAgICAgICAoMCAhPT0gc2VsZWN0aW9uICYmIDMgIT09IG5vZGUubm9kZVR5cGUpIHx8XG4gICAgICAgICAgICAgICAgICAgIChlbmQgPSBsZW5ndGggKyBzZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgMyA9PT0gbm9kZS5ub2RlVHlwZSAmJiAobGVuZ3RoICs9IG5vZGUubm9kZVZhbHVlLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gKG5leHQgPSBub2RlLmZpcnN0Q2hpbGQpKSBicmVhaztcbiAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGUgPSBub2RlO1xuICAgICAgICAgICAgICAgICAgbm9kZSA9IG5leHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICAgIGlmIChub2RlID09PSByb290KSBicmVhayBiO1xuICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9PT0gSlNDb21waWxlcl90ZW1wICYmXG4gICAgICAgICAgICAgICAgICAgICsraW5kZXhXaXRoaW5BbmNob3IgPT09IGFuY2hvck9mZnNldCAmJlxuICAgICAgICAgICAgICAgICAgICAoc3RhcnQgPSBsZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9PT0gZm9jdXNOb2RlICYmXG4gICAgICAgICAgICAgICAgICAgICsraW5kZXhXaXRoaW5Gb2N1cyA9PT0gc2VsZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgICAgIChlbmQgPSBsZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT09IChuZXh0ID0gbm9kZS5uZXh0U2libGluZykpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgbm9kZSA9IHBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBub2RlID0gbmV4dDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPVxuICAgICAgICAgICAgICAgIC0xID09PSBzdGFydCB8fCAtMSA9PT0gZW5kID8gbnVsbCA6IHsgc3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZCB9O1xuICAgICAgICAgICAgfSBlbHNlIEpTQ29tcGlsZXJfdGVtcCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICBKU0NvbXBpbGVyX3RlbXAgPSBKU0NvbXBpbGVyX3RlbXAgfHwgeyBzdGFydDogMCwgZW5kOiAwIH07XG4gICAgICB9IGVsc2UgSlNDb21waWxlcl90ZW1wID0gbnVsbDtcbiAgICAgIHNlbGVjdGlvbkluZm9ybWF0aW9uID0ge1xuICAgICAgICBmb2N1c2VkRWxlbTogcm9vdCxcbiAgICAgICAgc2VsZWN0aW9uUmFuZ2U6IEpTQ29tcGlsZXJfdGVtcFxuICAgICAgfTtcbiAgICAgIF9lbmFibGVkID0gITE7XG4gICAgICBmb3IgKG5leHRFZmZlY3QgPSBmaXJzdENoaWxkOyBudWxsICE9PSBuZXh0RWZmZWN0OyApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoKGZpcnN0Q2hpbGQgPSBuZXh0RWZmZWN0KSxcbiAgICAgICAgICAocm9vdCA9IGZpcnN0Q2hpbGQuY2hpbGQpLFxuICAgICAgICAgIDAgIT09IChmaXJzdENoaWxkLnN1YnRyZWVGbGFncyAmIDEwMjQpICYmIG51bGwgIT09IHJvb3QpXG4gICAgICAgIClcbiAgICAgICAgICAocm9vdC5yZXR1cm4gPSBmaXJzdENoaWxkKSwgKG5leHRFZmZlY3QgPSByb290KTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGZvciAoOyBudWxsICE9PSBuZXh0RWZmZWN0OyApIHtcbiAgICAgICAgICAgIHJvb3QgPSBmaXJzdENoaWxkID0gbmV4dEVmZmVjdDtcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcCA9IHJvb3QuYWx0ZXJuYXRlO1xuICAgICAgICAgICAgYW5jaG9yT2Zmc2V0ID0gcm9vdC5mbGFncztcbiAgICAgICAgICAgIHN3aXRjaCAocm9vdC50YWcpIHtcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgMCAhPT0gKGFuY2hvck9mZnNldCAmIDEwMjQpICYmXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSBKU0NvbXBpbGVyX3RlbXAgJiZcbiAgICAgICAgICAgICAgICAgIGNvbW1pdENsYXNzU25hcHNob3Qocm9vdCwgSlNDb21waWxlcl90ZW1wKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIGlmICgwICE9PSAoYW5jaG9yT2Zmc2V0ICYgMTAyNCkpXG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICgocm9vdCA9IHJvb3Quc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLFxuICAgICAgICAgICAgICAgICAgICAoSlNDb21waWxlcl90ZW1wID0gcm9vdC5ub2RlVHlwZSksXG4gICAgICAgICAgICAgICAgICAgIDkgPT09IEpTQ29tcGlsZXJfdGVtcClcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJDb250YWluZXJTcGFyaW5nbHkocm9vdCk7XG4gICAgICAgICAgICAgICAgICBlbHNlIGlmICgxID09PSBKU0NvbXBpbGVyX3RlbXApXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm9vdC5ub2RlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJIRUFEXCI6XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkhUTUxcIjpcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiQk9EWVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJDb250YWluZXJTcGFyaW5nbHkocm9vdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC50ZXh0Q29udGVudCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBjYXNlIDI2OlxuICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoMCAhPT0gKGFuY2hvck9mZnNldCAmIDEwMjQpKVxuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb290ID0gZmlyc3RDaGlsZC5zaWJsaW5nO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IHJvb3QpIHtcbiAgICAgICAgICAgICAgcm9vdC5yZXR1cm4gPSBmaXJzdENoaWxkLnJldHVybjtcbiAgICAgICAgICAgICAgbmV4dEVmZmVjdCA9IHJvb3Q7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dEVmZmVjdCA9IGZpcnN0Q2hpbGQucmV0dXJuO1xuICAgICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0TGF5b3V0RWZmZWN0T25GaWJlcihmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuICAgICAgdmFyIHByZXZFZmZlY3RTdGFydCA9IHB1c2hDb21wb25lbnRFZmZlY3RTdGFydCgpLFxuICAgICAgICBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgY29tbWl0SG9va0xheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrLCBMYXlvdXQgfCBIYXNFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGlmIChmbGFncyAmIDQpXG4gICAgICAgICAgICBpZiAoKChmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlKSwgbnVsbCA9PT0gY3VycmVudCkpXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay50eXBlLmRlZmF1bHRQcm9wcyB8fFxuICAgICAgICAgICAgICAgIFwicmVmXCIgaW4gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMgfHxcbiAgICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzIHx8XG4gICAgICAgICAgICAgICAgKGZpbmlzaGVkUm9vdC5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMgJiZcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlIGNvbXBvbmVudERpZE1vdW50LiBUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlIGEgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIsXG4gICAgICAgICAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmluaXNoZWRXb3JrKSB8fCBcImluc3RhbmNlXCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgY29tcG9uZW50RGlkTW91bnQuIFRoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIixcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8IFwiaW5zdGFuY2VcIlxuICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgc2hvdWxkUHJvZmlsZShmaW5pc2hlZFdvcmspXG4gICAgICAgICAgICAgICAgICA/IChzdGFydEVmZmVjdFRpbWVyKCksXG4gICAgICAgICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgICAgICBjYWxsQ29tcG9uZW50RGlkTW91bnRJbkRFVixcbiAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290XG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZEVmZmVjdER1cmF0aW9uKCkpXG4gICAgICAgICAgICAgICAgICA6IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgICAgICBjYWxsQ29tcG9uZW50RGlkTW91bnRJbkRFVixcbiAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIHByZXZQcm9wcyA9IHJlc29sdmVDbGFzc0NvbXBvbmVudFByb3BzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay50eXBlLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZS5kZWZhdWx0UHJvcHMgfHxcbiAgICAgICAgICAgICAgICBcInJlZlwiIGluIGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzIHx8XG4gICAgICAgICAgICAgICAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyB8fFxuICAgICAgICAgICAgICAgIChmaW5pc2hlZFJvb3QucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzICYmXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSBjb21wb25lbnREaWRVcGRhdGUuIFRoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIixcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8IFwiaW5zdGFuY2VcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3Quc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIkV4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSBjb21wb25lbnREaWRVcGRhdGUuIFRoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIixcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaW5pc2hlZFdvcmspIHx8IFwiaW5zdGFuY2VcIlxuICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgIHNob3VsZFByb2ZpbGUoZmluaXNoZWRXb3JrKVxuICAgICAgICAgICAgICAgID8gKHN0YXJ0RWZmZWN0VGltZXIoKSxcbiAgICAgICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxDb21wb25lbnREaWRVcGRhdGVJbkRFVixcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgICAgIHByZXZQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290Ll9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgcmVjb3JkRWZmZWN0RHVyYXRpb24oKSlcbiAgICAgICAgICAgICAgICA6IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgICAgIGNhbGxDb21wb25lbnREaWRVcGRhdGVJbkRFVixcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgICAgIHByZXZQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290Ll9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGZsYWdzICYgNjQgJiYgY29tbWl0Q2xhc3NDYWxsYmFja3MoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDUxMiAmJiBzYWZlbHlBdHRhY2hSZWYoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGN1cnJlbnQgPSBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZsYWdzICYgNjQgJiZcbiAgICAgICAgICAgICgoZmxhZ3MgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUpLCBudWxsICE9PSBmbGFncylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByZXZQcm9wcyA9IG51bGw7XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gZmluaXNoZWRXb3JrLmNoaWxkKVxuICAgICAgICAgICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay5jaGlsZC50YWcpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgIHByZXZQcm9wcyA9IGZpbmlzaGVkV29yay5jaGlsZC5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICBwcmV2UHJvcHMgPSBmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY29tbWl0Q2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgIGZsYWdzLFxuICAgICAgICAgICAgICAgIHByZXZQcm9wc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpbmlzaGVkUm9vdC5lZmZlY3REdXJhdGlvbiArPSBwb3BOZXN0ZWRFZmZlY3REdXJhdGlvbnMoY3VycmVudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgbnVsbCA9PT0gY3VycmVudCAmJlxuICAgICAgICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICAgICBjb21taXRIb3N0U2luZ2xldG9uQWNxdWlzaXRpb24oZmluaXNoZWRXb3JrKTtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudClcbiAgICAgICAgICAgIGlmIChmbGFncyAmIDQpIGNvbW1pdEhvc3RNb3VudChmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiA2NCkge1xuICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QgPSBmaW5pc2hlZFdvcmsudHlwZTtcbiAgICAgICAgICAgICAgY3VycmVudCA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgICBwcmV2UHJvcHMgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgY29tbWl0SHlkcmF0ZWRJbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgIHByZXZQcm9wcyxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnJldHVybixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIGZsYWdzICYgNTEyICYmIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIGlmIChmbGFncyAmIDQpIHtcbiAgICAgICAgICAgIGZsYWdzID0gcHVzaE5lc3RlZEVmZmVjdER1cmF0aW9ucygpO1xuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgZmluaXNoZWRSb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdC5lZmZlY3REdXJhdGlvbiArPSBidWJibGVOZXN0ZWRFZmZlY3REdXJhdGlvbnMoZmxhZ3MpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGNvbW1pdFByb2ZpbGVyLFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgICAgIGNvbW1pdFN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QuZWZmZWN0RHVyYXRpb25cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgY29tbWl0QWN0aXZpdHlIeWRyYXRpb25DYWxsYmFja3MoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VMYXlvdXRFZmZlY3RzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmbGFncyAmIDY0ICYmXG4gICAgICAgICAgICAoKGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSxcbiAgICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkUm9vdCAmJlxuICAgICAgICAgICAgICAoKGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkUm9vdC5kZWh5ZHJhdGVkKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRSb290ICYmXG4gICAgICAgICAgICAgICAgKChmaW5pc2hlZFdvcmsgPSByZXRyeURlaHlkcmF0ZWRTdXNwZW5zZUJvdW5kYXJ5LmJpbmQoXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJTdXNwZW5zZUluc3RhbmNlUmV0cnkoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIGZsYWdzID1cbiAgICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlIHx8IG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbjtcbiAgICAgICAgICBpZiAoIWZsYWdzKSB7XG4gICAgICAgICAgICBjdXJyZW50ID1cbiAgICAgICAgICAgICAgKG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB8fFxuICAgICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgICAgICAgcHJldlByb3BzID0gb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuO1xuICAgICAgICAgICAgdmFyIHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9IGZsYWdzO1xuICAgICAgICAgICAgKG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBjdXJyZW50KSAmJlxuICAgICAgICAgICAgIXByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuXG4gICAgICAgICAgICAgID8gcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgIDAgIT09IChmaW5pc2hlZFdvcmsuc3VidHJlZUZsYWdzICYgODc3MilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID0gcHJldlByb3BzO1xuICAgICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IHByZXZPZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICB9XG4gICAgICBwb3BDb21wb25lbnRFZmZlY3RTdGFydChwcmV2RWZmZWN0U3RhcnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhmaWJlcikge1xuICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcbiAgICAgIG51bGwgIT09IGFsdGVybmF0ZSAmJlxuICAgICAgICAoKGZpYmVyLmFsdGVybmF0ZSA9IG51bGwpLCBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhhbHRlcm5hdGUpKTtcbiAgICAgIGZpYmVyLmNoaWxkID0gbnVsbDtcbiAgICAgIGZpYmVyLmRlbGV0aW9ucyA9IG51bGw7XG4gICAgICBmaWJlci5zaWJsaW5nID0gbnVsbDtcbiAgICAgIDUgPT09IGZpYmVyLnRhZyAmJlxuICAgICAgICAoKGFsdGVybmF0ZSA9IGZpYmVyLnN0YXRlTm9kZSksXG4gICAgICAgIG51bGwgIT09IGFsdGVybmF0ZSAmJiBkZXRhY2hEZWxldGVkSW5zdGFuY2UoYWx0ZXJuYXRlKSk7XG4gICAgICBmaWJlci5zdGF0ZU5vZGUgPSBudWxsO1xuICAgICAgZmliZXIuX2RlYnVnT3duZXIgPSBudWxsO1xuICAgICAgZmliZXIucmV0dXJuID0gbnVsbDtcbiAgICAgIGZpYmVyLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgICAgIGZpYmVyLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgZmliZXIucGVuZGluZ1Byb3BzID0gbnVsbDtcbiAgICAgIGZpYmVyLnN0YXRlTm9kZSA9IG51bGw7XG4gICAgICBmaWJlci51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgcGFyZW50XG4gICAgKSB7XG4gICAgICBmb3IgKHBhcmVudCA9IHBhcmVudC5jaGlsZDsgbnVsbCAhPT0gcGFyZW50OyApXG4gICAgICAgIGNvbW1pdERlbGV0aW9uRWZmZWN0c09uRmliZXIoXG4gICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgcGFyZW50XG4gICAgICAgICksXG4gICAgICAgICAgKHBhcmVudCA9IHBhcmVudC5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0RGVsZXRpb25FZmZlY3RzT25GaWJlcihcbiAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICBkZWxldGVkRmliZXJcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgaW5qZWN0ZWRIb29rICYmXG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyVW5tb3VudFxuICAgICAgKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyVW5tb3VudChyZW5kZXJlcklELCBkZWxldGVkRmliZXIpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciB8fFxuICAgICAgICAgICAgKChoYXNMb2dnZWRFcnJvciA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlc1wiLFxuICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgICB2YXIgcHJldkVmZmVjdFN0YXJ0ID0gcHVzaENvbXBvbmVudEVmZmVjdFN0YXJ0KCk7XG4gICAgICBzd2l0Y2ggKGRlbGV0ZWRGaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgICAgICBzYWZlbHlEZXRhY2hSZWYoZGVsZXRlZEZpYmVyLCBuZWFyZXN0TW91bnRlZEFuY2VzdG9yKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgZGVsZXRlZEZpYmVyLm1lbW9pemVkU3RhdGVcbiAgICAgICAgICAgID8gZGVsZXRlZEZpYmVyLm1lbW9pemVkU3RhdGUuY291bnQtLVxuICAgICAgICAgICAgOiBkZWxldGVkRmliZXIuc3RhdGVOb2RlICYmXG4gICAgICAgICAgICAgICgoZGVsZXRlZEZpYmVyID0gZGVsZXRlZEZpYmVyLnN0YXRlTm9kZSksXG4gICAgICAgICAgICAgIGRlbGV0ZWRGaWJlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRlbGV0ZWRGaWJlcikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihkZWxldGVkRmliZXIsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpO1xuICAgICAgICAgIHZhciBwcmV2SG9zdFBhcmVudCA9IGhvc3RQYXJlbnQsXG4gICAgICAgICAgICBwcmV2SG9zdFBhcmVudElzQ29udGFpbmVyID0gaG9zdFBhcmVudElzQ29udGFpbmVyO1xuICAgICAgICAgIGlzU2luZ2xldG9uU2NvcGUoZGVsZXRlZEZpYmVyLnR5cGUpICYmXG4gICAgICAgICAgICAoKGhvc3RQYXJlbnQgPSBkZWxldGVkRmliZXIuc3RhdGVOb2RlKSxcbiAgICAgICAgICAgIChob3N0UGFyZW50SXNDb250YWluZXIgPSAhMSkpO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlcixcbiAgICAgICAgICAgIHJlbGVhc2VTaW5nbGV0b25JbnN0YW5jZSxcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGhvc3RQYXJlbnQgPSBwcmV2SG9zdFBhcmVudDtcbiAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSBwcmV2SG9zdFBhcmVudElzQ29udGFpbmVyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGRlbGV0ZWRGaWJlciwgbmVhcmVzdE1vdW50ZWRBbmNlc3Rvcik7XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBwcmV2SG9zdFBhcmVudCA9IGhvc3RQYXJlbnQ7XG4gICAgICAgICAgcHJldkhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IGhvc3RQYXJlbnRJc0NvbnRhaW5lcjtcbiAgICAgICAgICBob3N0UGFyZW50ID0gbnVsbDtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgaG9zdFBhcmVudCA9IHByZXZIb3N0UGFyZW50O1xuICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IHByZXZIb3N0UGFyZW50SXNDb250YWluZXI7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGhvc3RQYXJlbnQpXG4gICAgICAgICAgICBpZiAoaG9zdFBhcmVudElzQ29udGFpbmVyKVxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGRGcm9tQ29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgaG9zdFBhcmVudCxcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKFxuICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGQsXG4gICAgICAgICAgICAgICAgICBob3N0UGFyZW50LFxuICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLnN0YXRlTm9kZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoXG4gICAgICAgICAgICAgICAgICBkZWxldGVkRmliZXIsXG4gICAgICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgbnVsbCAhPT0gaG9zdFBhcmVudCAmJlxuICAgICAgICAgICAgKGhvc3RQYXJlbnRJc0NvbnRhaW5lclxuICAgICAgICAgICAgICA/ICgoZmluaXNoZWRSb290ID0gaG9zdFBhcmVudCksXG4gICAgICAgICAgICAgICAgY2xlYXJIeWRyYXRpb25Cb3VuZGFyeShcbiAgICAgICAgICAgICAgICAgIDkgPT09IGZpbmlzaGVkUm9vdC5ub2RlVHlwZVxuICAgICAgICAgICAgICAgICAgICA/IGZpbmlzaGVkUm9vdC5ib2R5XG4gICAgICAgICAgICAgICAgICAgIDogXCJIVE1MXCIgPT09IGZpbmlzaGVkUm9vdC5ub2RlTmFtZVxuICAgICAgICAgICAgICAgICAgICAgID8gZmluaXNoZWRSb290Lm93bmVyRG9jdW1lbnQuYm9keVxuICAgICAgICAgICAgICAgICAgICAgIDogZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLnN0YXRlTm9kZVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgcmV0cnlJZkJsb2NrZWRPbihmaW5pc2hlZFJvb3QpKVxuICAgICAgICAgICAgICA6IGNsZWFySHlkcmF0aW9uQm91bmRhcnkoaG9zdFBhcmVudCwgZGVsZXRlZEZpYmVyLnN0YXRlTm9kZSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcHJldkhvc3RQYXJlbnQgPSBob3N0UGFyZW50O1xuICAgICAgICAgIHByZXZIb3N0UGFyZW50SXNDb250YWluZXIgPSBob3N0UGFyZW50SXNDb250YWluZXI7XG4gICAgICAgICAgaG9zdFBhcmVudCA9IGRlbGV0ZWRGaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMDtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgaG9zdFBhcmVudCA9IHByZXZIb3N0UGFyZW50O1xuICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9IHByZXZIb3N0UGFyZW50SXNDb250YWluZXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoXG4gICAgICAgICAgICAgIEluc2VydGlvbixcbiAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yXG4gICAgICAgICAgICApO1xuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gfHxcbiAgICAgICAgICAgIGNvbW1pdEhvb2tMYXlvdXRVbm1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICBMYXlvdXRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgKHNhZmVseURldGFjaFJlZihkZWxldGVkRmliZXIsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IpLFxuICAgICAgICAgICAgKHByZXZIb3N0UGFyZW50ID0gZGVsZXRlZEZpYmVyLnN0YXRlTm9kZSksXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwcmV2SG9zdFBhcmVudC5jb21wb25lbnRXaWxsVW5tb3VudCAmJlxuICAgICAgICAgICAgICBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoXG4gICAgICAgICAgICAgICAgZGVsZXRlZEZpYmVyLFxuICAgICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICAgICAgcHJldkhvc3RQYXJlbnRcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURlbGV0aW9uRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICBkZWxldGVkRmliZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuID1cbiAgICAgICAgICAgIChwcmV2SG9zdFBhcmVudCA9IG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4pIHx8XG4gICAgICAgICAgICBudWxsICE9PSBkZWxldGVkRmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGVsZXRpb25FZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICAgIGRlbGV0ZWRGaWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9IHByZXZIb3N0UGFyZW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEZWxldGlvbkVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgZGVsZXRlZEZpYmVyXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHBvcENvbXBvbmVudEVmZmVjdFN0YXJ0KHByZXZFZmZlY3RTdGFydCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEFjdGl2aXR5SHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgPT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICgoZmluaXNoZWRSb290ID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZSksXG4gICAgICAgIG51bGwgIT09IGZpbmlzaGVkUm9vdCAmJlxuICAgICAgICAgICgoZmluaXNoZWRSb290ID0gZmluaXNoZWRSb290Lm1lbW9pemVkU3RhdGUpLCBudWxsICE9PSBmaW5pc2hlZFJvb3QpKVxuICAgICAgKSB7XG4gICAgICAgIGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkUm9vdC5kZWh5ZHJhdGVkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0SHlkcmF0ZWRBY3Rpdml0eUluc3RhbmNlLFxuICAgICAgICAgICAgZmluaXNoZWRSb290XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaykge1xuICAgICAgaWYgKFxuICAgICAgICBudWxsID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAoKGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGUpLFxuICAgICAgICBudWxsICE9PSBmaW5pc2hlZFJvb3QgJiZcbiAgICAgICAgICAoKGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkUm9vdC5tZW1vaXplZFN0YXRlKSxcbiAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFJvb3QgJiZcbiAgICAgICAgICAgICgoZmluaXNoZWRSb290ID0gZmluaXNoZWRSb290LmRlaHlkcmF0ZWQpLCBudWxsICE9PSBmaW5pc2hlZFJvb3QpKSlcbiAgICAgIClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdEh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZSxcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdFxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0UmV0cnlDYWNoZShmaW5pc2hlZFdvcmspIHtcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDMxOlxuICAgICAgICBjYXNlIDEzOlxuICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgIHZhciByZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICBudWxsID09PSByZXRyeUNhY2hlICYmXG4gICAgICAgICAgICAocmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgPSBuZXcgUG9zc2libHlXZWFrU2V0KCkpO1xuICAgICAgICAgIHJldHVybiByZXRyeUNhY2hlO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSksXG4gICAgICAgICAgICAocmV0cnlDYWNoZSA9IGZpbmlzaGVkV29yay5fcmV0cnlDYWNoZSksXG4gICAgICAgICAgICBudWxsID09PSByZXRyeUNhY2hlICYmXG4gICAgICAgICAgICAgIChyZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLl9yZXRyeUNhY2hlID0gbmV3IFBvc3NpYmx5V2Vha1NldCgpKSxcbiAgICAgICAgICAgIHJldHJ5Q2FjaGVcbiAgICAgICAgICApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJVbmV4cGVjdGVkIFN1c3BlbnNlIGhhbmRsZXIgdGFnIChcIiArXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay50YWcgK1xuICAgICAgICAgICAgICBcIikuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhdHRhY2hTdXNwZW5zZVJldHJ5TGlzdGVuZXJzKGZpbmlzaGVkV29yaywgd2FrZWFibGVzKSB7XG4gICAgICB2YXIgcmV0cnlDYWNoZSA9IGdldFJldHJ5Q2FjaGUoZmluaXNoZWRXb3JrKTtcbiAgICAgIHdha2VhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uICh3YWtlYWJsZSkge1xuICAgICAgICB2YXIgcmV0cnkgPSByZXNvbHZlUmV0cnlXYWtlYWJsZS5iaW5kKG51bGwsIGZpbmlzaGVkV29yaywgd2FrZWFibGUpO1xuICAgICAgICBpZiAoIXJldHJ5Q2FjaGUuaGFzKHdha2VhYmxlKSkge1xuICAgICAgICAgIHJldHJ5Q2FjaGUuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpXG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gaW5Qcm9ncmVzc0xhbmVzICYmIG51bGwgIT09IGluUHJvZ3Jlc3NSb290KVxuICAgICAgICAgICAgICByZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKGluUHJvZ3Jlc3NSb290LCBpblByb2dyZXNzTGFuZXMpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIGZpbmlzaGVkIHJvb3QgYW5kIGxhbmVzIHRvIGJlIHNldC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIHdha2VhYmxlLnRoZW4ocmV0cnksIHJldHJ5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VNdXRhdGlvbkVmZmVjdHMocm9vdCRqc2NvbXAkMCwgcGFyZW50RmliZXIpIHtcbiAgICAgIHZhciBkZWxldGlvbnMgPSBwYXJlbnRGaWJlci5kZWxldGlvbnM7XG4gICAgICBpZiAobnVsbCAhPT0gZGVsZXRpb25zKVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciByb290ID0gcm9vdCRqc2NvbXAkMCxcbiAgICAgICAgICAgIHJldHVybkZpYmVyID0gcGFyZW50RmliZXIsXG4gICAgICAgICAgICBkZWxldGVkRmliZXIgPSBkZWxldGlvbnNbaV0sXG4gICAgICAgICAgICBwcmV2RWZmZWN0U3RhcnQgPSBwdXNoQ29tcG9uZW50RWZmZWN0U3RhcnQoKSxcbiAgICAgICAgICAgIHBhcmVudCA9IHJldHVybkZpYmVyO1xuICAgICAgICAgIGE6IGZvciAoOyBudWxsICE9PSBwYXJlbnQ7ICkge1xuICAgICAgICAgICAgc3dpdGNoIChwYXJlbnQudGFnKSB7XG4gICAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgICAgaWYgKGlzU2luZ2xldG9uU2NvcGUocGFyZW50LnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICBob3N0UGFyZW50ID0gcGFyZW50LnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9ICExO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICBob3N0UGFyZW50ID0gcGFyZW50LnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMTtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICBob3N0UGFyZW50ID0gcGFyZW50LnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9ICEwO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobnVsbCA9PT0gaG9zdFBhcmVudClcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICBcIkV4cGVjdGVkIHRvIGZpbmQgYSBob3N0IHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjb21taXREZWxldGlvbkVmZmVjdHNPbkZpYmVyKHJvb3QsIHJldHVybkZpYmVyLCBkZWxldGVkRmliZXIpO1xuICAgICAgICAgIGhvc3RQYXJlbnQgPSBudWxsO1xuICAgICAgICAgIGhvc3RQYXJlbnRJc0NvbnRhaW5lciA9ICExO1xuICAgICAgICAgIHBvcENvbXBvbmVudEVmZmVjdFN0YXJ0KHByZXZFZmZlY3RTdGFydCk7XG4gICAgICAgICAgcm9vdCA9IGRlbGV0ZWRGaWJlcjtcbiAgICAgICAgICByZXR1cm5GaWJlciA9IHJvb3QuYWx0ZXJuYXRlO1xuICAgICAgICAgIG51bGwgIT09IHJldHVybkZpYmVyICYmIChyZXR1cm5GaWJlci5yZXR1cm4gPSBudWxsKTtcbiAgICAgICAgICByb290LnJldHVybiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiAxMzg3OClcbiAgICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgICAgIGNvbW1pdE11dGF0aW9uRWZmZWN0c09uRmliZXIocGFyZW50RmliZXIsIHJvb3QkanNjb21wJDApLFxuICAgICAgICAgICAgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdE11dGF0aW9uRWZmZWN0c09uRmliZXIoZmluaXNoZWRXb3JrLCByb290KSB7XG4gICAgICB2YXIgcHJldkVmZmVjdFN0YXJ0ID0gcHVzaENvbXBvbmVudEVmZmVjdFN0YXJ0KCksXG4gICAgICAgIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLFxuICAgICAgICBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgKGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChcbiAgICAgICAgICAgICAgSW5zZXJ0aW9uIHwgSGFzRWZmZWN0LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZXR1cm5cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KEluc2VydGlvbiB8IEhhc0VmZmVjdCwgZmluaXNoZWRXb3JrKSxcbiAgICAgICAgICAgIGNvbW1pdEhvb2tMYXlvdXRVbm1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgICBMYXlvdXQgfCBIYXNFZmZlY3RcbiAgICAgICAgICAgICkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNTEyICYmXG4gICAgICAgICAgICAob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50LCBjdXJyZW50LnJldHVybikpO1xuICAgICAgICAgIGZsYWdzICYgNjQgJiZcbiAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiAmJlxuICAgICAgICAgICAgKChmaW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUpLFxuICAgICAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrICYmXG4gICAgICAgICAgICAgICgoZmxhZ3MgPSBmaW5pc2hlZFdvcmsuY2FsbGJhY2tzKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gZmxhZ3MgJiZcbiAgICAgICAgICAgICAgICAoKGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuc2hhcmVkLmhpZGRlbkNhbGxiYWNrcyksXG4gICAgICAgICAgICAgICAgKGZpbmlzaGVkV29yay5zaGFyZWQuaGlkZGVuQ2FsbGJhY2tzID1cbiAgICAgICAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgPyBmbGFncyA6IGN1cnJlbnQuY29uY2F0KGZsYWdzKSkpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgdmFyIGhvaXN0YWJsZVJvb3QgPSBjdXJyZW50SG9pc3RhYmxlUm9vdDtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmxhZ3MgJiA1MTIgJiZcbiAgICAgICAgICAgIChvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQsIGN1cnJlbnQucmV0dXJuKSk7XG4gICAgICAgICAgaWYgKGZsYWdzICYgNCkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRSZXNvdXJjZSA9XG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50Lm1lbW9pemVkU3RhdGUgOiBudWxsO1xuICAgICAgICAgICAgZmxhZ3MgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgIGlmIChudWxsID09PSBjdXJyZW50KVxuICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gZmxhZ3MpXG4gICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBmaW5pc2hlZFdvcmsudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzO1xuICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290ID1cbiAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290Lm93bmVyRG9jdW1lbnQgfHwgaG9pc3RhYmxlUm9vdDtcbiAgICAgICAgICAgICAgICAgICAgYjogc3dpdGNoIChmbGFncykge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ0aXRsZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRpdGxlXCIpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAhY3VycmVudFJlc291cmNlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZVtpbnRlcm5hbEhvaXN0YWJsZU1hcmtlcl0gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlW2ludGVybmFsSW5zdGFuY2VLZXldIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZS5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlLmhhc0F0dHJpYnV0ZShcIml0ZW1wcm9wXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50UmVzb3VyY2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QuY3JlYXRlRWxlbWVudChmbGFncykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QuaGVhZC5pbnNlcnRCZWZvcmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LnF1ZXJ5U2VsZWN0b3IoXCJoZWFkID4gdGl0bGVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoY3VycmVudFJlc291cmNlLCBmbGFncywgY3VycmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2VbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSBmaW5pc2hlZFdvcms7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGN1cnJlbnRSZXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncyA9IGN1cnJlbnRSZXNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXliZU5vZGVzID0gZ2V0SHlkcmF0YWJsZUhvaXN0YWJsZUNhY2hlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpbmtcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJocmVmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3RcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZ2V0KGZsYWdzICsgKGN1cnJlbnQuaHJlZiB8fCBcIlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF5YmVOb2RlcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXliZU5vZGVzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY3VycmVudFJlc291cmNlID0gbWF5YmVOb2Rlc1tpXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY3VycmVudC5ocmVmIHx8IFwiXCIgPT09IGN1cnJlbnQuaHJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudC5ocmVmKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UuZ2V0QXR0cmlidXRlKFwicmVsXCIpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQucmVsID8gbnVsbCA6IGN1cnJlbnQucmVsKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UuZ2V0QXR0cmlidXRlKFwidGl0bGVcIikgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY3VycmVudC50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQudGl0bGUpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZS5nZXRBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVsbCA9PSBjdXJyZW50LmNyb3NzT3JpZ2luXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudC5jcm9zc09yaWdpbikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXliZU5vZGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlID0gaG9pc3RhYmxlUm9vdC5jcmVhdGVFbGVtZW50KGZsYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGN1cnJlbnRSZXNvdXJjZSwgZmxhZ3MsIGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5oZWFkLmFwcGVuZENoaWxkKGN1cnJlbnRSZXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwibWV0YVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAobWF5YmVOb2RlcyA9IGdldEh5ZHJhdGFibGVIb2lzdGFibGVDYWNoZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1ldGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2lzdGFibGVSb290XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkuZ2V0KGZsYWdzICsgKGN1cnJlbnQuY29udGVudCB8fCBcIlwiKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtYXliZU5vZGVzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY3VycmVudFJlc291cmNlID0gbWF5YmVOb2Rlc1tpXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlLmdldEF0dHJpYnV0ZShcImNvbnRlbnRcIikgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQuY29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIiArIGN1cnJlbnQuY29udGVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlLmdldEF0dHJpYnV0ZShcIm5hbWVcIikgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY3VycmVudC5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudC5uYW1lKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UuZ2V0QXR0cmlidXRlKFwicHJvcGVydHlcIikgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY3VycmVudC5wcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQucHJvcGVydHkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZS5nZXRBdHRyaWJ1dGUoXCJodHRwLWVxdWl2XCIpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQuaHR0cEVxdWl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VycmVudC5odHRwRXF1aXYpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZS5nZXRBdHRyaWJ1dGUoXCJjaGFyc2V0XCIpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IGN1cnJlbnQuY2hhclNldFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnQuY2hhclNldCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXliZU5vZGVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlc291cmNlID0gaG9pc3RhYmxlUm9vdC5jcmVhdGVFbGVtZW50KGZsYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGN1cnJlbnRSZXNvdXJjZSwgZmxhZ3MsIGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdC5oZWFkLmFwcGVuZENoaWxkKGN1cnJlbnRSZXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdnZXROb2Rlc0ZvclR5cGUgZW5jb3VudGVyZWQgYSB0eXBlIGl0IGRpZCBub3QgZXhwZWN0OiBcIicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2VbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSBmaW5pc2hlZFdvcms7XG4gICAgICAgICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUoY3VycmVudFJlc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBjdXJyZW50UmVzb3VyY2U7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID0gZmxhZ3M7XG4gICAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgICBtb3VudEhvaXN0YWJsZShcbiAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5zdGF0ZU5vZGVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID0gYWNxdWlyZVJlc291cmNlKFxuICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCxcbiAgICAgICAgICAgICAgICAgIGZsYWdzLFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UgIT09IGZsYWdzXG4gICAgICAgICAgICAgICAgPyAobnVsbCA9PT0gY3VycmVudFJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgID8gbnVsbCAhPT0gY3VycmVudC5zdGF0ZU5vZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoKGN1cnJlbnQgPSBjdXJyZW50LnN0YXRlTm9kZSksXG4gICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGN1cnJlbnQpKVxuICAgICAgICAgICAgICAgICAgICA6IGN1cnJlbnRSZXNvdXJjZS5jb3VudC0tLFxuICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gZmxhZ3NcbiAgICAgICAgICAgICAgICAgICAgPyBtb3VudEhvaXN0YWJsZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yay5zdGF0ZU5vZGVcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogYWNxdWlyZVJlc291cmNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHNcbiAgICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgIDogbnVsbCA9PT0gZmxhZ3MgJiZcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUgJiZcbiAgICAgICAgICAgICAgICAgIGNvbW1pdEhvc3RVcGRhdGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQubWVtb2l6ZWRQcm9wc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNTEyICYmXG4gICAgICAgICAgICAob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50LCBjdXJyZW50LnJldHVybikpO1xuICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgY29tbWl0SG9zdFVwZGF0ZShcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICAgICAgY3VycmVudC5tZW1vaXplZFByb3BzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGZsYWdzICYgNTEyICYmXG4gICAgICAgICAgICAob2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fFxuICAgICAgICAgICAgICBudWxsID09PSBjdXJyZW50IHx8XG4gICAgICAgICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50LCBjdXJyZW50LnJldHVybikpO1xuICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiAzMikge1xuICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihmaW5pc2hlZFdvcmssIHJlc2V0VGV4dENvbnRlbnQsIGhvaXN0YWJsZVJvb3QpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgbnVsbCAhPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlICYmXG4gICAgICAgICAgICAoKGhvaXN0YWJsZVJvb3QgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyksXG4gICAgICAgICAgICBjb21taXRIb3N0VXBkYXRlKFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QsXG4gICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnQgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBob2lzdGFibGVSb290XG4gICAgICAgICAgICApKTtcbiAgICAgICAgICBmbGFncyAmIDEwMjQgJiZcbiAgICAgICAgICAgICgobmVlZHNGb3JtUmVzZXQgPSAhMCksXG4gICAgICAgICAgICBcImZvcm1cIiAhPT0gZmluaXNoZWRXb3JrLnR5cGUgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlVuZXhwZWN0ZWQgaG9zdCBjb21wb25lbnQgdHlwZS4gRXhwZWN0ZWQgYSBmb3JtLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGlmIChmbGFncyAmIDQpIHtcbiAgICAgICAgICAgIGlmIChudWxsID09PSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIlRoaXMgc2hvdWxkIGhhdmUgYSB0ZXh0IG5vZGUgaW5pdGlhbGl6ZWQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZsYWdzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICBjdXJyZW50ID0gbnVsbCAhPT0gY3VycmVudCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IGZsYWdzO1xuICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY29tbWl0VGV4dFVwZGF0ZSxcbiAgICAgICAgICAgICAgICBob2lzdGFibGVSb290LFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgZmxhZ3NcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGhvaXN0YWJsZVJvb3QgPSBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCk7XG4gICAgICAgICAgdGFnQ2FjaGVzID0gbnVsbDtcbiAgICAgICAgICBjdXJyZW50UmVzb3VyY2UgPSBjdXJyZW50SG9pc3RhYmxlUm9vdDtcbiAgICAgICAgICBjdXJyZW50SG9pc3RhYmxlUm9vdCA9IGdldEhvaXN0YWJsZVJvb3Qocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY3VycmVudEhvaXN0YWJsZVJvb3QgPSBjdXJyZW50UmVzb3VyY2U7XG4gICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgICAgICBjdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkXG4gICAgICAgICAgKVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGNvbW1pdEh5ZHJhdGVkQ29udGFpbmVyLFxuICAgICAgICAgICAgICAgIHJvb3QuY29udGFpbmVySW5mb1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgbmVlZHNGb3JtUmVzZXQgJiZcbiAgICAgICAgICAgICgobmVlZHNGb3JtUmVzZXQgPSAhMSksIHJlY3Vyc2l2ZWx5UmVzZXRGb3JtcyhmaW5pc2hlZFdvcmspKTtcbiAgICAgICAgICByb290LmVmZmVjdER1cmF0aW9uICs9IHBvcE5lc3RlZEVmZmVjdER1cmF0aW9ucyhob2lzdGFibGVSb290KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGZsYWdzID0gY3VycmVudEhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgY3VycmVudEhvaXN0YWJsZVJvb3QgPSBnZXRIb2lzdGFibGVSb290KFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZS5jb250YWluZXJJbmZvXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY3VycmVudEhvaXN0YWJsZVJvb3QgPSBmbGFncztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICBmbGFncyA9IHB1c2hOZXN0ZWRFZmZlY3REdXJhdGlvbnMoKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiArPVxuICAgICAgICAgICAgYnViYmxlTmVzdGVkRWZmZWN0RHVyYXRpb25zKGZsYWdzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICAgICAoKGZsYWdzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgIG51bGwgIT09IGZsYWdzICYmXG4gICAgICAgICAgICAgICgoZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbCksXG4gICAgICAgICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrLCBmbGFncykpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmluaXNoZWRXb3JrLmNoaWxkLmZsYWdzICYgODE5MiAmJlxuICAgICAgICAgICAgKG51bGwgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSAhPT1cbiAgICAgICAgICAgICAgKG51bGwgIT09IGN1cnJlbnQgJiYgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSAmJlxuICAgICAgICAgICAgKGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPSBub3ckMSgpKTtcbiAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgICgoZmxhZ3MgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUpLFxuICAgICAgICAgICAgbnVsbCAhPT0gZmxhZ3MgJiZcbiAgICAgICAgICAgICAgKChmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUgPSBudWxsKSxcbiAgICAgICAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmssIGZsYWdzKSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgIGhvaXN0YWJsZVJvb3QgPSBudWxsICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgd2FzSGlkZGVuID0gbnVsbCAhPT0gY3VycmVudCAmJiBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUsXG4gICAgICAgICAgICBwcmV2T2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuID0gb2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuLFxuICAgICAgICAgICAgcHJldk9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuO1xuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9XG4gICAgICAgICAgICBwcmV2T2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuIHx8IGhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9XG4gICAgICAgICAgICBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiB8fCB3YXNIaWRkZW47XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZU11dGF0aW9uRWZmZWN0cyhyb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVXYXNIaWRkZW4gPSBwcmV2T2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbjtcbiAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlSXNIaWRkZW4gPSBwcmV2T2Zmc2NyZWVuU3VidHJlZUlzSGlkZGVuO1xuICAgICAgICAgIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGlmIChmbGFncyAmIDgxOTIpXG4gICAgICAgICAgICBhOiBmb3IgKFxuICAgICAgICAgICAgICByb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSxcbiAgICAgICAgICAgICAgICByb290Ll92aXNpYmlsaXR5ID0gaG9pc3RhYmxlUm9vdFxuICAgICAgICAgICAgICAgICAgPyByb290Ll92aXNpYmlsaXR5ICYgfk9mZnNjcmVlblZpc2libGVcbiAgICAgICAgICAgICAgICAgIDogcm9vdC5fdmlzaWJpbGl0eSB8IE9mZnNjcmVlblZpc2libGUsXG4gICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdCAmJlxuICAgICAgICAgICAgICAgICAgKG51bGwgPT09IGN1cnJlbnQgfHxcbiAgICAgICAgICAgICAgICAgICAgd2FzSGlkZGVuIHx8XG4gICAgICAgICAgICAgICAgICAgIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiB8fFxuICAgICAgICAgICAgICAgICAgICBvZmZzY3JlZW5TdWJ0cmVlV2FzSGlkZGVuIHx8XG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaykpLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBudWxsLFxuICAgICAgICAgICAgICAgIHJvb3QgPSBmaW5pc2hlZFdvcms7XG4gICAgICAgICAgICAgIDtcblxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmICg1ID09PSByb290LnRhZyB8fCAyNiA9PT0gcm9vdC50YWcpIHtcbiAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgd2FzSGlkZGVuID0gY3VycmVudCA9IHJvb3Q7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAoY3VycmVudFJlc291cmNlID0gd2FzSGlkZGVuLnN0YXRlTm9kZSksXG4gICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXNIaWRkZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhc0hpZGRlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmhpZGVJbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXNIaWRkZW4uc3RhdGVOb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhc0hpZGRlbi5tZW1vaXplZFByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcih3YXNIaWRkZW4sIHdhc0hpZGRlbi5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoNiA9PT0gcm9vdC50YWcpIHtcbiAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgd2FzSGlkZGVuID0gcm9vdDtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIChtYXliZU5vZGVzID0gd2FzSGlkZGVuLnN0YXRlTm9kZSksXG4gICAgICAgICAgICAgICAgICAgICAgaG9pc3RhYmxlUm9vdFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXNIaWRkZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZVRleHRJbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXliZU5vZGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzSGlkZGVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaGlkZVRleHRJbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXliZU5vZGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhc0hpZGRlbi5tZW1vaXplZFByb3BzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcih3YXNIaWRkZW4sIHdhc0hpZGRlbi5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoMTggPT09IHJvb3QudGFnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHdhc0hpZGRlbiA9IHJvb3Q7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAoaSA9IHdhc0hpZGRlbi5zdGF0ZU5vZGUpLFxuICAgICAgICAgICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3RcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzSGlkZGVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVEZWh5ZHJhdGVkQm91bmRhcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaVxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhc0hpZGRlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmhpZGVEZWh5ZHJhdGVkQm91bmRhcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzSGlkZGVuLnN0YXRlTm9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3Iod2FzSGlkZGVuLCB3YXNIaWRkZW4ucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICgoMjIgIT09IHJvb3QudGFnICYmIDIzICE9PSByb290LnRhZykgfHxcbiAgICAgICAgICAgICAgICAgIG51bGwgPT09IHJvb3QubWVtb2l6ZWRTdGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgcm9vdCA9PT0gZmluaXNoZWRXb3JrKSAmJlxuICAgICAgICAgICAgICAgIG51bGwgIT09IHJvb3QuY2hpbGRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcm9vdC5jaGlsZC5yZXR1cm4gPSByb290O1xuICAgICAgICAgICAgICAgIHJvb3QgPSByb290LmNoaWxkO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyb290ID09PSBmaW5pc2hlZFdvcmspIGJyZWFrIGE7XG4gICAgICAgICAgICAgIGZvciAoOyBudWxsID09PSByb290LnNpYmxpbmc7ICkge1xuICAgICAgICAgICAgICAgIGlmIChudWxsID09PSByb290LnJldHVybiB8fCByb290LnJldHVybiA9PT0gZmluaXNoZWRXb3JrKVxuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICBjdXJyZW50ID09PSByb290ICYmIChjdXJyZW50ID0gbnVsbCk7XG4gICAgICAgICAgICAgICAgcm9vdCA9IHJvb3QucmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGN1cnJlbnQgPT09IHJvb3QgJiYgKGN1cnJlbnQgPSBudWxsKTtcbiAgICAgICAgICAgICAgcm9vdC5zaWJsaW5nLnJldHVybiA9IHJvb3QucmV0dXJuO1xuICAgICAgICAgICAgICByb290ID0gcm9vdC5zaWJsaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgKChmbGFncyA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgICBudWxsICE9PSBmbGFncyAmJlxuICAgICAgICAgICAgICAoKGN1cnJlbnQgPSBmbGFncy5yZXRyeVF1ZXVlKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgICAgICgoZmxhZ3MucmV0cnlRdWV1ZSA9IG51bGwpLFxuICAgICAgICAgICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrLCBjdXJyZW50KSkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgY29tbWl0UmVjb25jaWxpYXRpb25FZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmxhZ3MgJiA0ICYmXG4gICAgICAgICAgICAoKGZsYWdzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlKSxcbiAgICAgICAgICAgIG51bGwgIT09IGZsYWdzICYmXG4gICAgICAgICAgICAgICgoZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbCksXG4gICAgICAgICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrLCBmbGFncykpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yayksXG4gICAgICAgICAgICBjb21taXRSZWNvbmNpbGlhdGlvbkVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgIH1cbiAgICAgIHBvcENvbXBvbmVudEVmZmVjdFN0YXJ0KHByZXZFZmZlY3RTdGFydCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFJlY29uY2lsaWF0aW9uRWZmZWN0cyhmaW5pc2hlZFdvcmspIHtcbiAgICAgIHZhciBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcbiAgICAgIGlmIChmbGFncyAmIDIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihmaW5pc2hlZFdvcmssIGNvbW1pdFBsYWNlbWVudCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5pc2hlZFdvcmsuZmxhZ3MgJj0gLTM7XG4gICAgICB9XG4gICAgICBmbGFncyAmIDQwOTYgJiYgKGZpbmlzaGVkV29yay5mbGFncyAmPSAtNDA5Nyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5UmVzZXRGb3JtcyhwYXJlbnRGaWJlcikge1xuICAgICAgaWYgKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDEwMjQpXG4gICAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7ICkge1xuICAgICAgICAgIHZhciBmaWJlciA9IHBhcmVudEZpYmVyO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5UmVzZXRGb3JtcyhmaWJlcik7XG4gICAgICAgICAgNSA9PT0gZmliZXIudGFnICYmIGZpYmVyLmZsYWdzICYgMTAyNCAmJiBmaWJlci5zdGF0ZU5vZGUucmVzZXQoKTtcbiAgICAgICAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZUxheW91dEVmZmVjdHMocm9vdCwgcGFyZW50RmliZXIpIHtcbiAgICAgIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiA4NzcyKVxuICAgICAgICBmb3IgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuY2hpbGQ7IG51bGwgIT09IHBhcmVudEZpYmVyOyApXG4gICAgICAgICAgY29tbWl0TGF5b3V0RWZmZWN0T25GaWJlcihyb290LCBwYXJlbnRGaWJlci5hbHRlcm5hdGUsIHBhcmVudEZpYmVyKSxcbiAgICAgICAgICAgIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yaykge1xuICAgICAgdmFyIHByZXZFZmZlY3RTdGFydCA9IHB1c2hDb21wb25lbnRFZmZlY3RTdGFydCgpO1xuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICBjb21taXRIb29rTGF5b3V0VW5tb3VudEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgTGF5b3V0XG4gICAgICAgICAgKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgc2FmZWx5RGV0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCAmJlxuICAgICAgICAgICAgc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZXR1cm4sXG4gICAgICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICByZWxlYXNlU2luZ2xldG9uSW5zdGFuY2UsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHNhZmVseURldGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgbnVsbCA9PT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgfVxuICAgICAgcG9wQ29tcG9uZW50RWZmZWN0U3RhcnQocHJldkVmZmVjdFN0YXJ0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZURpc2FwcGVhckxheW91dEVmZmVjdHMocGFyZW50RmliZXIpIHtcbiAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgICAgZGlzYXBwZWFyTGF5b3V0RWZmZWN0cyhwYXJlbnRGaWJlciksXG4gICAgICAgICAgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgIGN1cnJlbnQsXG4gICAgICBmaW5pc2hlZFdvcmssXG4gICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgKSB7XG4gICAgICB2YXIgcHJldkVmZmVjdFN0YXJ0ID0gcHVzaENvbXBvbmVudEVmZmVjdFN0YXJ0KCksXG4gICAgICAgIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVhcHBlYXJMYXlvdXRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29tbWl0SG9va0xheW91dEVmZmVjdHMoZmluaXNoZWRXb3JrLCBMYXlvdXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApO1xuICAgICAgICAgIGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGN1cnJlbnQuY29tcG9uZW50RGlkTW91bnQgJiZcbiAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGNhbGxDb21wb25lbnREaWRNb3VudEluREVWLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGN1cnJlbnRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY3VycmVudCA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudCkge1xuICAgICAgICAgICAgZmluaXNoZWRSb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjb21taXRIaWRkZW5DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3RcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmXG4gICAgICAgICAgICBmbGFncyAmIDY0ICYmXG4gICAgICAgICAgICBjb21taXRDbGFzc0NhbGxiYWNrcyhmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIHNhZmVseUF0dGFjaFJlZihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgIGNvbW1pdEhvc3RTaW5nbGV0b25BY3F1aXNpdGlvbihmaW5pc2hlZFdvcmspO1xuICAgICAgICBjYXNlIDI2OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApO1xuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiZcbiAgICAgICAgICAgIG51bGwgPT09IGN1cnJlbnQgJiZcbiAgICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgY29tbWl0SG9zdE1vdW50KGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgaWYgKGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiYgZmxhZ3MgJiA0KSB7XG4gICAgICAgICAgICBmbGFncyA9IHB1c2hOZXN0ZWRFZmZlY3REdXJhdGlvbnMoKTtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzLmVmZmVjdER1cmF0aW9uICs9XG4gICAgICAgICAgICAgIGJ1YmJsZU5lc3RlZEVmZmVjdER1cmF0aW9ucyhmbGFncyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY29tbWl0UHJvZmlsZXIsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgICAgY29tbWl0U3RhcnRUaW1lLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMuZWZmZWN0RHVyYXRpb25cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApO1xuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiZcbiAgICAgICAgICAgIGZsYWdzICYgNCAmJlxuICAgICAgICAgICAgY29tbWl0QWN0aXZpdHlIeWRyYXRpb25DYWxsYmFja3MoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmXG4gICAgICAgICAgICBmbGFncyAmIDQgJiZcbiAgICAgICAgICAgIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBudWxsID09PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgc2FmZWx5QXR0YWNoUmVmKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgcG9wQ29tcG9uZW50RWZmZWN0U3RhcnQocHJldkVmZmVjdFN0YXJ0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZVJlYXBwZWFyTGF5b3V0RWZmZWN0cyhcbiAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgIHBhcmVudEZpYmVyLFxuICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICkge1xuICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyA9XG4gICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiYgMCAhPT0gKHBhcmVudEZpYmVyLnN1YnRyZWVGbGFncyAmIDg3NzIpO1xuICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgICByZWFwcGVhckxheW91dEVmZmVjdHMoXG4gICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgIHBhcmVudEZpYmVyLmFsdGVybmF0ZSxcbiAgICAgICAgICBwYXJlbnRGaWJlcixcbiAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICksXG4gICAgICAgICAgKHBhcmVudEZpYmVyID0gcGFyZW50RmliZXIuc2libGluZyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdE9mZnNjcmVlblBhc3NpdmVNb3VudEVmZmVjdHMoY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG4gICAgICB2YXIgcHJldmlvdXNDYWNoZSA9IG51bGw7XG4gICAgICBudWxsICE9PSBjdXJyZW50ICYmXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sICYmXG4gICAgICAgIChwcmV2aW91c0NhY2hlID0gY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbC5wb29sKTtcbiAgICAgIGN1cnJlbnQgPSBudWxsO1xuICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sICYmXG4gICAgICAgIChjdXJyZW50ID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpO1xuICAgICAgY3VycmVudCAhPT0gcHJldmlvdXNDYWNoZSAmJlxuICAgICAgICAobnVsbCAhPSBjdXJyZW50ICYmIHJldGFpbkNhY2hlKGN1cnJlbnQpLFxuICAgICAgICBudWxsICE9IHByZXZpb3VzQ2FjaGUgJiYgcmVsZWFzZUNhY2hlKHByZXZpb3VzQ2FjaGUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0Q2FjaGVQYXNzaXZlTW91bnRFZmZlY3QoY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG4gICAgICBjdXJyZW50ID0gbnVsbDtcbiAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yay5hbHRlcm5hdGUgJiZcbiAgICAgICAgKGN1cnJlbnQgPSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuY2FjaGUpO1xuICAgICAgZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUuY2FjaGU7XG4gICAgICBmaW5pc2hlZFdvcmsgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgKHJldGFpbkNhY2hlKGZpbmlzaGVkV29yayksIG51bGwgIT0gY3VycmVudCAmJiByZWxlYXNlQ2FjaGUoY3VycmVudCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgIHJvb3QsXG4gICAgICBwYXJlbnRGaWJlcixcbiAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICApIHtcbiAgICAgIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiAxMDI1NilcbiAgICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgICAgIGNvbW1pdFBhc3NpdmVNb3VudE9uRmliZXIoXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgcGFyZW50RmliZXIsXG4gICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgICAgICAgKSxcbiAgICAgICAgICAgIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRQYXNzaXZlTW91bnRPbkZpYmVyKFxuICAgICAgZmluaXNoZWRSb290LFxuICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICkge1xuICAgICAgdmFyIHByZXZFZmZlY3RTdGFydCA9IHB1c2hDb21wb25lbnRFZmZlY3RTdGFydCgpLFxuICAgICAgICBmbGFncyA9IGZpbmlzaGVkV29yay5mbGFncztcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVBhc3NpdmVNb3VudEVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zXG4gICAgICAgICAgKTtcbiAgICAgICAgICBmbGFncyAmIDIwNDggJiZcbiAgICAgICAgICAgIGNvbW1pdEhvb2tQYXNzaXZlTW91bnRFZmZlY3RzKGZpbmlzaGVkV29yaywgUGFzc2l2ZSB8IEhhc0VmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgdmFyIHByZXZQcm9maWxlckVmZmVjdER1cmF0aW9uID0gcHVzaE5lc3RlZEVmZmVjdER1cmF0aW9ucygpO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICk7XG4gICAgICAgICAgZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgICAgICAoKGNvbW1pdHRlZExhbmVzID0gbnVsbCksXG4gICAgICAgICAgICBudWxsICE9PSBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlICYmXG4gICAgICAgICAgICAgIChjb21taXR0ZWRMYW5lcyA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5jYWNoZSksXG4gICAgICAgICAgICAoZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUuY2FjaGUpLFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrICE9PSBjb21taXR0ZWRMYW5lcyAmJlxuICAgICAgICAgICAgICAocmV0YWluQ2FjaGUoZmluaXNoZWRXb3JrKSxcbiAgICAgICAgICAgICAgbnVsbCAhPSBjb21taXR0ZWRMYW5lcyAmJiByZWxlYXNlQ2FjaGUoY29tbWl0dGVkTGFuZXMpKSk7XG4gICAgICAgICAgZmluaXNoZWRSb290LnBhc3NpdmVFZmZlY3REdXJhdGlvbiArPSBwb3BOZXN0ZWRFZmZlY3REdXJhdGlvbnMoXG4gICAgICAgICAgICBwcmV2UHJvZmlsZXJFZmZlY3REdXJhdGlvblxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgaWYgKGZsYWdzICYgMjA0OCkge1xuICAgICAgICAgICAgZmxhZ3MgPSBwdXNoTmVzdGVkRWZmZWN0RHVyYXRpb25zKCk7XG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QucGFzc2l2ZUVmZmVjdER1cmF0aW9uICs9XG4gICAgICAgICAgICAgIGJ1YmJsZU5lc3RlZEVmZmVjdER1cmF0aW9ucyhmbGFncyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgY29tbWl0UHJvZmlsZXJQb3N0Q29tbWl0SW1wbCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLmFsdGVybmF0ZSxcbiAgICAgICAgICAgICAgICBjb21taXRTdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LnBhc3NpdmVFZmZlY3REdXJhdGlvblxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFdvcmsucmV0dXJuLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnNcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgcHJldlByb2ZpbGVyRWZmZWN0RHVyYXRpb24gPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgIHZhciBfY3VycmVudCA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGU7XG4gICAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGVcbiAgICAgICAgICAgID8gcHJldlByb2ZpbGVyRWZmZWN0RHVyYXRpb24uX3Zpc2liaWxpdHkgJlxuICAgICAgICAgICAgICBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZFxuICAgICAgICAgICAgICA/IHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiByZWN1cnNpdmVseVRyYXZlcnNlQXRvbWljUGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHByZXZQcm9maWxlckVmZmVjdER1cmF0aW9uLl92aXNpYmlsaXR5ICZcbiAgICAgICAgICAgICAgICBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZFxuICAgICAgICAgICAgICA/IHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiAoKHByZXZQcm9maWxlckVmZmVjdER1cmF0aW9uLl92aXNpYmlsaXR5IHw9XG4gICAgICAgICAgICAgICAgICBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZCksXG4gICAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgIDAgIT09IChmaW5pc2hlZFdvcmsuc3VidHJlZUZsYWdzICYgMTAyNTYpXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgICAgICBjb21taXRPZmZzY3JlZW5QYXNzaXZlTW91bnRFZmZlY3RzKF9jdXJyZW50LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICk7XG4gICAgICAgICAgZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgICAgICBjb21taXRDYWNoZVBhc3NpdmVNb3VudEVmZmVjdChmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLCBmaW5pc2hlZFdvcmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9uc1xuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBwb3BDb21wb25lbnRFZmZlY3RTdGFydChwcmV2RWZmZWN0U3RhcnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICBwYXJlbnRGaWJlcixcbiAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsXG4gICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgKSB7XG4gICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzID1cbiAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0cyAmJlxuICAgICAgICAwICE9PSAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgMTAyNTYpO1xuICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgICByZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgcGFyZW50RmliZXIsXG4gICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsXG4gICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICApLFxuICAgICAgICAgIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsXG4gICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgKSB7XG4gICAgICB2YXIgcHJldkVmZmVjdFN0YXJ0ID0gcHVzaENvbXBvbmVudEVmZmVjdFN0YXJ0KCksXG4gICAgICAgIGZsYWdzID0gZmluaXNoZWRXb3JrLmZsYWdzO1xuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICBmaW5pc2hlZFJvb3QsXG4gICAgICAgICAgICBmaW5pc2hlZFdvcmssXG4gICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgIGNvbW1pdHRlZFRyYW5zaXRpb25zLFxuICAgICAgICAgICAgaW5jbHVkZVdvcmtJblByb2dyZXNzRWZmZWN0c1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29tbWl0SG9va1Bhc3NpdmVNb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrLCBQYXNzaXZlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICB2YXIgX2luc3RhbmNlMiA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgICAgbnVsbCAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGVcbiAgICAgICAgICAgID8gX2luc3RhbmNlMi5fdmlzaWJpbGl0eSAmIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkXG4gICAgICAgICAgICAgID8gcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogcmVjdXJzaXZlbHlUcmF2ZXJzZUF0b21pY1Bhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiAoKF9pbnN0YW5jZTIuX3Zpc2liaWxpdHkgfD0gT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQpLFxuICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUmVjb25uZWN0UGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgICBjb21taXR0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHMgJiZcbiAgICAgICAgICAgIGZsYWdzICYgMjA0OCAmJlxuICAgICAgICAgICAgY29tbWl0T2Zmc2NyZWVuUGFzc2l2ZU1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLmFsdGVybmF0ZSxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VSZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGNvbW1pdHRlZExhbmVzLFxuICAgICAgICAgICAgY29tbWl0dGVkVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpbmNsdWRlV29ya0luUHJvZ3Jlc3NFZmZlY3RzICYmXG4gICAgICAgICAgICBmbGFncyAmIDIwNDggJiZcbiAgICAgICAgICAgIGNvbW1pdENhY2hlUGFzc2l2ZU1vdW50RWZmZWN0KGZpbmlzaGVkV29yay5hbHRlcm5hdGUsIGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZVJlY29ubmVjdFBhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgY29tbWl0dGVkTGFuZXMsXG4gICAgICAgICAgICBjb21taXR0ZWRUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgIGluY2x1ZGVXb3JrSW5Qcm9ncmVzc0VmZmVjdHNcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgcG9wQ29tcG9uZW50RWZmZWN0U3RhcnQocHJldkVmZmVjdFN0YXJ0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlUcmF2ZXJzZUF0b21pY1Bhc3NpdmVFZmZlY3RzKFxuICAgICAgZmluaXNoZWRSb290JGpzY29tcCQwLFxuICAgICAgcGFyZW50RmliZXJcbiAgICApIHtcbiAgICAgIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiAxMDI1NilcbiAgICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKSB7XG4gICAgICAgICAgdmFyIGZpbmlzaGVkUm9vdCA9IGZpbmlzaGVkUm9vdCRqc2NvbXAkMCxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayA9IHBhcmVudEZpYmVyLFxuICAgICAgICAgICAgZmxhZ3MgPSBmaW5pc2hlZFdvcmsuZmxhZ3M7XG4gICAgICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlQXRvbWljUGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBmbGFncyAmIDIwNDggJiZcbiAgICAgICAgICAgICAgICBjb21taXRPZmZzY3JlZW5QYXNzaXZlTW91bnRFZmZlY3RzKFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLmFsdGVybmF0ZSxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgICAgcmVjdXJzaXZlbHlUcmF2ZXJzZUF0b21pY1Bhc3NpdmVFZmZlY3RzKFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkUm9vdCxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZmxhZ3MgJiAyMDQ4ICYmXG4gICAgICAgICAgICAgICAgY29tbWl0Q2FjaGVQYXNzaXZlTW91bnRFZmZlY3QoXG4gICAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsuYWx0ZXJuYXRlLFxuICAgICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlQXRvbWljUGFzc2l2ZUVmZmVjdHMoXG4gICAgICAgICAgICAgICAgZmluaXNoZWRSb290LFxuICAgICAgICAgICAgICAgIGZpbmlzaGVkV29ya1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KHBhcmVudEZpYmVyKSB7XG4gICAgICBpZiAocGFyZW50RmliZXIuc3VidHJlZUZsYWdzICYgc3VzcGVuc2V5Q29tbWl0RmxhZylcbiAgICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgICAgIGFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXRPbkZpYmVyKHBhcmVudEZpYmVyKSxcbiAgICAgICAgICAgIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0T25GaWJlcihmaWJlcikge1xuICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuICAgICAgICAgIGZpYmVyLmZsYWdzICYgc3VzcGVuc2V5Q29tbWl0RmxhZyAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gZmliZXIubWVtb2l6ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgc3VzcGVuZFJlc291cmNlKFxuICAgICAgICAgICAgICBjdXJyZW50SG9pc3RhYmxlUm9vdCxcbiAgICAgICAgICAgICAgZmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICAgICAgICAgICAgZmliZXIubWVtb2l6ZWRQcm9wc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5QWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdChmaWJlcik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHZhciBwcmV2aW91c0hvaXN0YWJsZVJvb3QgPSBjdXJyZW50SG9pc3RhYmxlUm9vdDtcbiAgICAgICAgICBjdXJyZW50SG9pc3RhYmxlUm9vdCA9IGdldEhvaXN0YWJsZVJvb3QoXG4gICAgICAgICAgICBmaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mb1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmVjdXJzaXZlbHlBY2N1bXVsYXRlU3VzcGVuc2V5Q29tbWl0KGZpYmVyKTtcbiAgICAgICAgICBjdXJyZW50SG9pc3RhYmxlUm9vdCA9IHByZXZpb3VzSG9pc3RhYmxlUm9vdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBudWxsID09PSBmaWJlci5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgICAoKHByZXZpb3VzSG9pc3RhYmxlUm9vdCA9IGZpYmVyLmFsdGVybmF0ZSksXG4gICAgICAgICAgICBudWxsICE9PSBwcmV2aW91c0hvaXN0YWJsZVJvb3QgJiZcbiAgICAgICAgICAgIG51bGwgIT09IHByZXZpb3VzSG9pc3RhYmxlUm9vdC5tZW1vaXplZFN0YXRlXG4gICAgICAgICAgICAgID8gKChwcmV2aW91c0hvaXN0YWJsZVJvb3QgPSBzdXNwZW5zZXlDb21taXRGbGFnKSxcbiAgICAgICAgICAgICAgICAoc3VzcGVuc2V5Q29tbWl0RmxhZyA9IDE2Nzc3MjE2KSxcbiAgICAgICAgICAgICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpLFxuICAgICAgICAgICAgICAgIChzdXNwZW5zZXlDb21taXRGbGFnID0gcHJldmlvdXNIb2lzdGFibGVSb290KSlcbiAgICAgICAgICAgICAgOiByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWN1cnNpdmVseUFjY3VtdWxhdGVTdXNwZW5zZXlDb21taXQoZmliZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkZXRhY2hBbHRlcm5hdGVTaWJsaW5ncyhwYXJlbnRGaWJlcikge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBwYXJlbnRGaWJlci5hbHRlcm5hdGU7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgIT09IHByZXZpb3VzRmliZXIgJiZcbiAgICAgICAgKChwYXJlbnRGaWJlciA9IHByZXZpb3VzRmliZXIuY2hpbGQpLCBudWxsICE9PSBwYXJlbnRGaWJlcilcbiAgICAgICkge1xuICAgICAgICBwcmV2aW91c0ZpYmVyLmNoaWxkID0gbnVsbDtcbiAgICAgICAgZG9cbiAgICAgICAgICAocHJldmlvdXNGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpLFxuICAgICAgICAgICAgKHBhcmVudEZpYmVyLnNpYmxpbmcgPSBudWxsKSxcbiAgICAgICAgICAgIChwYXJlbnRGaWJlciA9IHByZXZpb3VzRmliZXIpO1xuICAgICAgICB3aGlsZSAobnVsbCAhPT0gcGFyZW50RmliZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKHBhcmVudEZpYmVyKSB7XG4gICAgICB2YXIgZGVsZXRpb25zID0gcGFyZW50RmliZXIuZGVsZXRpb25zO1xuICAgICAgaWYgKDAgIT09IChwYXJlbnRGaWJlci5mbGFncyAmIDE2KSkge1xuICAgICAgICBpZiAobnVsbCAhPT0gZGVsZXRpb25zKVxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGRUb0RlbGV0ZSA9IGRlbGV0aW9uc1tpXSxcbiAgICAgICAgICAgICAgcHJldkVmZmVjdFN0YXJ0ID0gcHVzaENvbXBvbmVudEVmZmVjdFN0YXJ0KCk7XG4gICAgICAgICAgICBuZXh0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICAgICAgICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0c0luc2lkZU9mRGVsZXRlZFRyZWVfYmVnaW4oXG4gICAgICAgICAgICAgIGNoaWxkVG9EZWxldGUsXG4gICAgICAgICAgICAgIHBhcmVudEZpYmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcG9wQ29tcG9uZW50RWZmZWN0U3RhcnQocHJldkVmZmVjdFN0YXJ0KTtcbiAgICAgICAgICB9XG4gICAgICAgIGRldGFjaEFsdGVybmF0ZVNpYmxpbmdzKHBhcmVudEZpYmVyKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiAxMDI1NilcbiAgICAgICAgZm9yIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLmNoaWxkOyBudWxsICE9PSBwYXJlbnRGaWJlcjsgKVxuICAgICAgICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50T25GaWJlcihwYXJlbnRGaWJlciksXG4gICAgICAgICAgICAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0UGFzc2l2ZVVubW91bnRPbkZpYmVyKGZpbmlzaGVkV29yaykge1xuICAgICAgdmFyIHByZXZFZmZlY3RTdGFydCA9IHB1c2hDb21wb25lbnRFZmZlY3RTdGFydCgpO1xuICAgICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmluaXNoZWRXb3JrLmZsYWdzICYgMjA0OCAmJlxuICAgICAgICAgICAgY29tbWl0SG9va1Bhc3NpdmVVbm1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsucmV0dXJuLFxuICAgICAgICAgICAgICBQYXNzaXZlIHwgSGFzRWZmZWN0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgdmFyIHByZXZQcm9maWxlckVmZmVjdER1cmF0aW9uID0gcHVzaE5lc3RlZEVmZmVjdER1cmF0aW9ucygpO1xuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlVW5tb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiArPVxuICAgICAgICAgICAgcG9wTmVzdGVkRWZmZWN0RHVyYXRpb25zKHByZXZQcm9maWxlckVmZmVjdER1cmF0aW9uKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICBwcmV2UHJvZmlsZXJFZmZlY3REdXJhdGlvbiA9IHB1c2hOZXN0ZWRFZmZlY3REdXJhdGlvbnMoKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgZmluaXNoZWRXb3JrLnN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gKz1cbiAgICAgICAgICAgIGJ1YmJsZU5lc3RlZEVmZmVjdER1cmF0aW9ucyhwcmV2UHJvZmlsZXJFZmZlY3REdXJhdGlvbik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgcHJldlByb2ZpbGVyRWZmZWN0RHVyYXRpb24gPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgIG51bGwgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlICYmXG4gICAgICAgICAgcHJldlByb2ZpbGVyRWZmZWN0RHVyYXRpb24uX3Zpc2liaWxpdHkgJlxuICAgICAgICAgICAgT2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQgJiZcbiAgICAgICAgICAobnVsbCA9PT0gZmluaXNoZWRXb3JrLnJldHVybiB8fCAxMyAhPT0gZmluaXNoZWRXb3JrLnJldHVybi50YWcpXG4gICAgICAgICAgICA/ICgocHJldlByb2ZpbGVyRWZmZWN0RHVyYXRpb24uX3Zpc2liaWxpdHkgJj1cbiAgICAgICAgICAgICAgICB+T2Zmc2NyZWVuUGFzc2l2ZUVmZmVjdHNDb25uZWN0ZWQpLFxuICAgICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yaykpXG4gICAgICAgICAgICA6IHJlY3Vyc2l2ZWx5VHJhdmVyc2VQYXNzaXZlVW5tb3VudEVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlUGFzc2l2ZVVubW91bnRFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICB9XG4gICAgICBwb3BDb21wb25lbnRFZmZlY3RTdGFydChwcmV2RWZmZWN0U3RhcnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzKHBhcmVudEZpYmVyKSB7XG4gICAgICB2YXIgZGVsZXRpb25zID0gcGFyZW50RmliZXIuZGVsZXRpb25zO1xuICAgICAgaWYgKDAgIT09IChwYXJlbnRGaWJlci5mbGFncyAmIDE2KSkge1xuICAgICAgICBpZiAobnVsbCAhPT0gZGVsZXRpb25zKVxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGRUb0RlbGV0ZSA9IGRlbGV0aW9uc1tpXSxcbiAgICAgICAgICAgICAgcHJldkVmZmVjdFN0YXJ0ID0gcHVzaENvbXBvbmVudEVmZmVjdFN0YXJ0KCk7XG4gICAgICAgICAgICBuZXh0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICAgICAgICAgIGNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0c0luc2lkZU9mRGVsZXRlZFRyZWVfYmVnaW4oXG4gICAgICAgICAgICAgIGNoaWxkVG9EZWxldGUsXG4gICAgICAgICAgICAgIHBhcmVudEZpYmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcG9wQ29tcG9uZW50RWZmZWN0U3RhcnQocHJldkVmZmVjdFN0YXJ0KTtcbiAgICAgICAgICB9XG4gICAgICAgIGRldGFjaEFsdGVybmF0ZVNpYmxpbmdzKHBhcmVudEZpYmVyKTtcbiAgICAgIH1cbiAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7IClcbiAgICAgICAgZGlzY29ubmVjdFBhc3NpdmVFZmZlY3QocGFyZW50RmliZXIpLFxuICAgICAgICAgIChwYXJlbnRGaWJlciA9IHBhcmVudEZpYmVyLnNpYmxpbmcpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNjb25uZWN0UGFzc2l2ZUVmZmVjdChmaW5pc2hlZFdvcmspIHtcbiAgICAgIHZhciBwcmV2RWZmZWN0U3RhcnQgPSBwdXNoQ29tcG9uZW50RWZmZWN0U3RhcnQoKTtcbiAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgY29tbWl0SG9va1Bhc3NpdmVVbm1vdW50RWZmZWN0cyhcbiAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgIGZpbmlzaGVkV29yay5yZXR1cm4sXG4gICAgICAgICAgICBQYXNzaXZlXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yayk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICBpbnN0YW5jZS5fdmlzaWJpbGl0eSAmIE9mZnNjcmVlblBhc3NpdmVFZmZlY3RzQ29ubmVjdGVkICYmXG4gICAgICAgICAgICAoKGluc3RhbmNlLl92aXNpYmlsaXR5ICY9IH5PZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZCksXG4gICAgICAgICAgICByZWN1cnNpdmVseVRyYXZlcnNlRGlzY29ubmVjdFBhc3NpdmVFZmZlY3RzKGZpbmlzaGVkV29yaykpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VEaXNjb25uZWN0UGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgIH1cbiAgICAgIHBvcENvbXBvbmVudEVmZmVjdFN0YXJ0KHByZXZFZmZlY3RTdGFydCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFBhc3NpdmVVbm1vdW50RWZmZWN0c0luc2lkZU9mRGVsZXRlZFRyZWVfYmVnaW4oXG4gICAgICBkZWxldGVkU3VidHJlZVJvb3QsXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yJGpzY29tcCQwXG4gICAgKSB7XG4gICAgICBmb3IgKDsgbnVsbCAhPT0gbmV4dEVmZmVjdDsgKSB7XG4gICAgICAgIHZhciBmaWJlciA9IG5leHRFZmZlY3QsXG4gICAgICAgICAgY3VycmVudCA9IGZpYmVyLFxuICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IgPSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yJGpzY29tcCQwLFxuICAgICAgICAgIHByZXZFZmZlY3RTdGFydCA9IHB1c2hDb21wb25lbnRFZmZlY3RTdGFydCgpO1xuICAgICAgICBzd2l0Y2ggKGN1cnJlbnQudGFnKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgIGNvbW1pdEhvb2tQYXNzaXZlVW5tb3VudEVmZmVjdHMoXG4gICAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICAgIFBhc3NpdmVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlLmNhY2hlUG9vbCAmJlxuICAgICAgICAgICAgICAoKGN1cnJlbnQgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGVQb29sLnBvb2wpLFxuICAgICAgICAgICAgICBudWxsICE9IGN1cnJlbnQgJiYgcmV0YWluQ2FjaGUoY3VycmVudCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgIHJlbGVhc2VDYWNoZShjdXJyZW50Lm1lbW9pemVkU3RhdGUuY2FjaGUpO1xuICAgICAgICB9XG4gICAgICAgIHBvcENvbXBvbmVudEVmZmVjdFN0YXJ0KHByZXZFZmZlY3RTdGFydCk7XG4gICAgICAgIHByZXZFZmZlY3RTdGFydCA9IGZpYmVyLmNoaWxkO1xuICAgICAgICBpZiAobnVsbCAhPT0gcHJldkVmZmVjdFN0YXJ0KVxuICAgICAgICAgIChwcmV2RWZmZWN0U3RhcnQucmV0dXJuID0gZmliZXIpLCAobmV4dEVmZmVjdCA9IHByZXZFZmZlY3RTdGFydCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBhOiBmb3IgKGZpYmVyID0gZGVsZXRlZFN1YnRyZWVSb290OyBudWxsICE9PSBuZXh0RWZmZWN0OyApIHtcbiAgICAgICAgICAgIHByZXZFZmZlY3RTdGFydCA9IG5leHRFZmZlY3Q7XG4gICAgICAgICAgICBjdXJyZW50ID0gcHJldkVmZmVjdFN0YXJ0LnNpYmxpbmc7XG4gICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yID0gcHJldkVmZmVjdFN0YXJ0LnJldHVybjtcbiAgICAgICAgICAgIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKHByZXZFZmZlY3RTdGFydCk7XG4gICAgICAgICAgICBpZiAocHJldkVmZmVjdFN0YXJ0ID09PSBmaWJlcikge1xuICAgICAgICAgICAgICBuZXh0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAgIGN1cnJlbnQucmV0dXJuID0gbmVhcmVzdE1vdW50ZWRBbmNlc3RvcjtcbiAgICAgICAgICAgICAgbmV4dEVmZmVjdCA9IGN1cnJlbnQ7XG4gICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0RWZmZWN0ID0gbmVhcmVzdE1vdW50ZWRBbmNlc3RvcjtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uQ29tbWl0Um9vdCgpIHtcbiAgICAgIGNvbW1pdEhvb2tzLmZvckVhY2goZnVuY3Rpb24gKGNvbW1pdEhvb2spIHtcbiAgICAgICAgcmV0dXJuIGNvbW1pdEhvb2soKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0NvbmN1cnJlbnRBY3RFbnZpcm9ubWVudCgpIHtcbiAgICAgIHZhciBpc1JlYWN0QWN0RW52aXJvbm1lbnRHbG9iYWwgPVxuICAgICAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgSVNfUkVBQ1RfQUNUX0VOVklST05NRU5UXG4gICAgICAgICAgPyBJU19SRUFDVF9BQ1RfRU5WSVJPTk1FTlRcbiAgICAgICAgICA6IHZvaWQgMDtcbiAgICAgIGlzUmVhY3RBY3RFbnZpcm9ubWVudEdsb2JhbCB8fFxuICAgICAgICBudWxsID09PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSB8fFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiVGhlIGN1cnJlbnQgdGVzdGluZyBlbnZpcm9ubWVudCBpcyBub3QgY29uZmlndXJlZCB0byBzdXBwb3J0IGFjdCguLi4pXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBpc1JlYWN0QWN0RW52aXJvbm1lbnRHbG9iYWw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCAmJlxuICAgICAgICAwICE9PSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgKVxuICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiAtd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXM7XG4gICAgICB2YXIgdHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQ7XG4gICAgICByZXR1cm4gbnVsbCAhPT0gdHJhbnNpdGlvblxuICAgICAgICA/ICh0cmFuc2l0aW9uLl91cGRhdGVkRmliZXJzIHx8ICh0cmFuc2l0aW9uLl91cGRhdGVkRmliZXJzID0gbmV3IFNldCgpKSxcbiAgICAgICAgICB0cmFuc2l0aW9uLl91cGRhdGVkRmliZXJzLmFkZChmaWJlciksXG4gICAgICAgICAgcmVxdWVzdFRyYW5zaXRpb25MYW5lKCkpXG4gICAgICAgIDogcmVzb2x2ZVVwZGF0ZVByaW9yaXR5KCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcXVlc3REZWZlcnJlZExhbmUoKSB7XG4gICAgICAwID09PSB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSAmJlxuICAgICAgICAod29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUgPVxuICAgICAgICAgIDAgPT09ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIDUzNjg3MDkxMikgfHwgaXNIeWRyYXRpbmdcbiAgICAgICAgICAgID8gY2xhaW1OZXh0VHJhbnNpdGlvbkxhbmUoKVxuICAgICAgICAgICAgOiA1MzY4NzA5MTIpO1xuICAgICAgdmFyIHN1c3BlbnNlSGFuZGxlciA9IHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgICBudWxsICE9PSBzdXNwZW5zZUhhbmRsZXIgJiYgKHN1c3BlbnNlSGFuZGxlci5mbGFncyB8PSAzMik7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgbGFuZSkge1xuICAgICAgaXNSdW5uaW5nSW5zZXJ0aW9uRWZmZWN0ICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJ1c2VJbnNlcnRpb25FZmZlY3QgbXVzdCBub3Qgc2NoZWR1bGUgdXBkYXRlcy5cIik7XG4gICAgICBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgJiYgKGRpZFNjaGVkdWxlVXBkYXRlRHVyaW5nUGFzc2l2ZUVmZmVjdHMgPSAhMCk7XG4gICAgICBpZiAoXG4gICAgICAgIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgJiZcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPT09IFN1c3BlbmRlZE9uRGF0YSB8fFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPT09IFN1c3BlbmRlZE9uQWN0aW9uKSkgfHxcbiAgICAgICAgbnVsbCAhPT0gcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0XG4gICAgICApXG4gICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIDApLFxuICAgICAgICAgIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUsXG4gICAgICAgICAgICAhMVxuICAgICAgICAgICk7XG4gICAgICBtYXJrUm9vdFVwZGF0ZWQkMShyb290LCBsYW5lKTtcbiAgICAgIGlmIChcbiAgICAgICAgKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmXG4gICAgICAgIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdFxuICAgICAgKSB7XG4gICAgICAgIGlmIChpc1JlbmRlcmluZylcbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgICAgIHJvb3QgPVxuICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzcyAmJiBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHdvcmtJblByb2dyZXNzKSkgfHxcbiAgICAgICAgICAgICAgICBcIlVua25vd25cIjtcbiAgICAgICAgICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50Lmhhcyhyb290KSB8fFxuICAgICAgICAgICAgICAgIChkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQuYWRkKHJvb3QpLFxuICAgICAgICAgICAgICAgIChmaWJlciA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoZmliZXIpIHx8IFwiVW5rbm93blwiKSxcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJDYW5ub3QgdXBkYXRlIGEgY29tcG9uZW50IChgJXNgKSB3aGlsZSByZW5kZXJpbmcgYSBkaWZmZXJlbnQgY29tcG9uZW50IChgJXNgKS4gVG8gbG9jYXRlIHRoZSBiYWQgc2V0U3RhdGUoKSBjYWxsIGluc2lkZSBgJXNgLCBmb2xsb3cgdGhlIHN0YWNrIHRyYWNlIGFzIGRlc2NyaWJlZCBpbiBodHRwczovL3JlYWN0LmRldi9saW5rL3NldHN0YXRlLWluLXJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgcm9vdFxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgfHxcbiAgICAgICAgICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IHVwZGF0ZSBkdXJpbmcgYW4gZXhpc3Rpbmcgc3RhdGUgdHJhbnNpdGlvbiAoc3VjaCBhcyB3aXRoaW4gYHJlbmRlcmApLiBSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS5cIlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyID0gITApKTtcbiAgICAgICAgICB9XG4gICAgICB9IGVsc2VcbiAgICAgICAgaXNEZXZUb29sc1ByZXNlbnQgJiYgYWRkRmliZXJUb0xhbmVzTWFwKHJvb3QsIGZpYmVyLCBsYW5lKSxcbiAgICAgICAgICB3YXJuSWZVcGRhdGVzTm90V3JhcHBlZFdpdGhBY3RERVYoZmliZXIpLFxuICAgICAgICAgIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCAmJlxuICAgICAgICAgICAgKChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgPT09IE5vQ29udGV4dCAmJlxuICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgfD0gbGFuZSksXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkV2l0aERlbGF5ICYmXG4gICAgICAgICAgICAgIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUsXG4gICAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZXJmb3JtV29ya09uUm9vdChyb290LCBsYW5lcywgZm9yY2VTeW5jKSB7XG4gICAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KVxuICAgICAgICB0aHJvdyBFcnJvcihcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiKTtcbiAgICAgIHZhciBzaG91bGRUaW1lU2xpY2UgPVxuICAgICAgICAgICghZm9yY2VTeW5jICYmXG4gICAgICAgICAgICAwID09PSAobGFuZXMgJiAxMjQpICYmXG4gICAgICAgICAgICAwID09PSAobGFuZXMgJiByb290LmV4cGlyZWRMYW5lcykpIHx8XG4gICAgICAgICAgY2hlY2tJZlJvb3RJc1ByZXJlbmRlcmluZyhyb290LCBsYW5lcyksXG4gICAgICAgIGV4aXRTdGF0dXMgPSBzaG91bGRUaW1lU2xpY2VcbiAgICAgICAgICA/IHJlbmRlclJvb3RDb25jdXJyZW50KHJvb3QsIGxhbmVzKVxuICAgICAgICAgIDogcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMsICEwKSxcbiAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9IHNob3VsZFRpbWVTbGljZTtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RJblByb2dyZXNzKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SXNQcmVyZW5kZXJpbmcgJiZcbiAgICAgICAgICAgICFzaG91bGRUaW1lU2xpY2UgJiZcbiAgICAgICAgICAgIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIGxhbmVzLCAwLCAhMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yY2VTeW5jID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICByZW5kZXJXYXNDb25jdXJyZW50ICYmXG4gICAgICAgICAgICAhaXNSZW5kZXJDb25zaXN0ZW50V2l0aEV4dGVybmFsU3RvcmVzKGZvcmNlU3luYylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcywgITEpO1xuICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9ICExO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChleGl0U3RhdHVzID09PSBSb290RXJyb3JlZCkge1xuICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9IGxhbmVzO1xuICAgICAgICAgICAgaWYgKHJvb3QuZXJyb3JSZWNvdmVyeURpc2FibGVkTGFuZXMgJiByZW5kZXJXYXNDb25jdXJyZW50KVxuICAgICAgICAgICAgICB2YXIgZXJyb3JSZXRyeUxhbmVzID0gMDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgKGVycm9yUmV0cnlMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzICYgLTUzNjg3MDkxMyksXG4gICAgICAgICAgICAgICAgKGVycm9yUmV0cnlMYW5lcyA9XG4gICAgICAgICAgICAgICAgICAwICE9PSBlcnJvclJldHJ5TGFuZXNcbiAgICAgICAgICAgICAgICAgICAgPyBlcnJvclJldHJ5TGFuZXNcbiAgICAgICAgICAgICAgICAgICAgOiBlcnJvclJldHJ5TGFuZXMgJiA1MzY4NzA5MTJcbiAgICAgICAgICAgICAgICAgICAgICA/IDUzNjg3MDkxMlxuICAgICAgICAgICAgICAgICAgICAgIDogMCk7XG4gICAgICAgICAgICBpZiAoMCAhPT0gZXJyb3JSZXRyeUxhbmVzKSB7XG4gICAgICAgICAgICAgIGxhbmVzID0gZXJyb3JSZXRyeUxhbmVzO1xuICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgZXhpdFN0YXR1cyA9IHJvb3Q7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9yUmV0cnlMYW5lcyRqc2NvbXAkMCA9IGVycm9yUmV0cnlMYW5lcztcbiAgICAgICAgICAgICAgICBlcnJvclJldHJ5TGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RDb25jdXJyZW50RXJyb3JzO1xuICAgICAgICAgICAgICAgIHZhciB3YXNSb290RGVoeWRyYXRlZCA9XG4gICAgICAgICAgICAgICAgICBleGl0U3RhdHVzLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQ7XG4gICAgICAgICAgICAgICAgd2FzUm9vdERlaHlkcmF0ZWQgJiZcbiAgICAgICAgICAgICAgICAgIChwcmVwYXJlRnJlc2hTdGFjayhcbiAgICAgICAgICAgICAgICAgICAgZXhpdFN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JSZXRyeUxhbmVzJGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICApLmZsYWdzIHw9IDI1Nik7XG4gICAgICAgICAgICAgICAgZXJyb3JSZXRyeUxhbmVzJGpzY29tcCQwID0gcmVuZGVyUm9vdFN5bmMoXG4gICAgICAgICAgICAgICAgICBleGl0U3RhdHVzLFxuICAgICAgICAgICAgICAgICAgZXJyb3JSZXRyeUxhbmVzJGpzY29tcCQwLFxuICAgICAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChlcnJvclJldHJ5TGFuZXMkanNjb21wJDAgIT09IFJvb3RFcnJvcmVkKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciAmJlxuICAgICAgICAgICAgICAgICAgICAhd2FzUm9vdERlaHlkcmF0ZWRcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBleGl0U3RhdHVzLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzIHw9XG4gICAgICAgICAgICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgfD1cbiAgICAgICAgICAgICAgICAgICAgICByZW5kZXJXYXNDb25jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICBleGl0U3RhdHVzID0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGV4aXRTdGF0dXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycztcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gZXJyb3JSZXRyeUxhbmVzO1xuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gZXhpdFN0YXR1cyAmJlxuICAgICAgICAgICAgICAgICAgICAobnVsbCA9PT0gd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICA/ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IGV4aXRTdGF0dXMpXG4gICAgICAgICAgICAgICAgICAgICAgOiB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycy5wdXNoLmFwcGx5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdFN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4aXRTdGF0dXMgPSBlcnJvclJldHJ5TGFuZXMkanNjb21wJDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVuZGVyV2FzQ29uY3VycmVudCA9ICExO1xuICAgICAgICAgICAgICBpZiAoZXhpdFN0YXR1cyAhPT0gUm9vdEVycm9yZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEZhdGFsRXJyb3JlZCkge1xuICAgICAgICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgMCk7XG4gICAgICAgICAgICBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBsYW5lcywgMCwgITApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgIHNob3VsZFRpbWVTbGljZSA9IHJvb3Q7XG4gICAgICAgICAgICBzd2l0Y2ggKGV4aXRTdGF0dXMpIHtcbiAgICAgICAgICAgICAgY2FzZSBSb290SW5Qcm9ncmVzczpcbiAgICAgICAgICAgICAgY2FzZSBSb290RmF0YWxFcnJvcmVkOlxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiUm9vdCBkaWQgbm90IGNvbXBsZXRlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiKTtcbiAgICAgICAgICAgICAgY2FzZSBSb290U3VzcGVuZGVkV2l0aERlbGF5OlxuICAgICAgICAgICAgICAgIGlmICgobGFuZXMgJiA0MTk0MDQ4KSAhPT0gbGFuZXMpIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFJvb3RTdXNwZW5kZWRBdFRoZVNoZWxsOlxuICAgICAgICAgICAgICAgIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgICAgICAgICAgICAgc2hvdWxkVGltZVNsaWNlLFxuICAgICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSxcbiAgICAgICAgICAgICAgICAgICF3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3NcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIGNhc2UgUm9vdEVycm9yZWQ6XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVjb3ZlcmFibGVFcnJvcnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFJvb3RTdXNwZW5kZWQ6XG4gICAgICAgICAgICAgIGNhc2UgUm9vdENvbXBsZXRlZDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIlVua25vd24gcm9vdCBleGl0IHN0YXR1cy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUpXG4gICAgICAgICAgICAgIGNvbW1pdFJvb3QoXG4gICAgICAgICAgICAgICAgc2hvdWxkVGltZVNsaWNlLFxuICAgICAgICAgICAgICAgIGZvcmNlU3luYyxcbiAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZEluY2x1ZGVSZWN1cnNpdmVSZW5kZXJVcGRhdGUsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NEZWZlcnJlZExhbmUsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZXRyeUxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChsYW5lcyAmIDYyOTE0NTYwKSA9PT0gbGFuZXMgJiZcbiAgICAgICAgICAgICAgICAoKHJlbmRlcldhc0NvbmN1cnJlbnQgPVxuICAgICAgICAgICAgICAgICAgZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSArXG4gICAgICAgICAgICAgICAgICBGQUxMQkFDS19USFJPVFRMRV9NUyAtXG4gICAgICAgICAgICAgICAgICBub3ckMSgpKSxcbiAgICAgICAgICAgICAgICAxMCA8IHJlbmRlcldhc0NvbmN1cnJlbnQpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgICAgICAgICAgICAgc2hvdWxkVGltZVNsaWNlLFxuICAgICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSxcbiAgICAgICAgICAgICAgICAgICF3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3NcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICgwICE9PSBnZXROZXh0TGFuZXMoc2hvdWxkVGltZVNsaWNlLCAwLCAhMCkpIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgc2hvdWxkVGltZVNsaWNlLnRpbWVvdXRIYW5kbGUgPSBzY2hlZHVsZVRpbWVvdXQoXG4gICAgICAgICAgICAgICAgICBjb21taXRSb290V2hlblJlYWR5LmJpbmQoXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFRpbWVTbGljZSxcbiAgICAgICAgICAgICAgICAgICAgZm9yY2VTeW5jLFxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkSW5jbHVkZVJlY3Vyc2l2ZVJlbmRlclVwZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lLFxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZXRyeUxhbmVzLFxuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3MsXG4gICAgICAgICAgICAgICAgICAgIGV4aXRTdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgIFRIUk9UVExFRF9DT01NSVQsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHJlbmRlcldhc0NvbmN1cnJlbnRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29tbWl0Um9vdFdoZW5SZWFkeShcbiAgICAgICAgICAgICAgICBzaG91bGRUaW1lU2xpY2UsXG4gICAgICAgICAgICAgICAgZm9yY2VTeW5jLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVHJhbnNpdGlvbnMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkSW5jbHVkZVJlY3Vyc2l2ZVJlbmRlclVwZGF0ZSxcbiAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcyxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJldHJ5TGFuZXMsXG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzLFxuICAgICAgICAgICAgICAgIGV4aXRTdGF0dXMsXG4gICAgICAgICAgICAgICAgSU1NRURJQVRFX0NPTU1JVCxcbiAgICAgICAgICAgICAgICByZW5kZXJTdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH0gd2hpbGUgKDEpO1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRSb290V2hlblJlYWR5KFxuICAgICAgcm9vdCxcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIHJlY292ZXJhYmxlRXJyb3JzLFxuICAgICAgdHJhbnNpdGlvbnMsXG4gICAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gICAgICBsYW5lcyxcbiAgICAgIHNwYXduZWRMYW5lLFxuICAgICAgdXBkYXRlZExhbmVzLFxuICAgICAgc3VzcGVuZGVkUmV0cnlMYW5lcyxcbiAgICAgIGRpZFNraXBTdXNwZW5kZWRTaWJsaW5ncyxcbiAgICAgIGV4aXRTdGF0dXMsXG4gICAgICBzdXNwZW5kZWRDb21taXRSZWFzb24sXG4gICAgICBjb21wbGV0ZWRSZW5kZXJTdGFydFRpbWUsXG4gICAgICBjb21wbGV0ZWRSZW5kZXJFbmRUaW1lXG4gICAgKSB7XG4gICAgICByb290LnRpbWVvdXRIYW5kbGUgPSBub1RpbWVvdXQ7XG4gICAgICBzdXNwZW5kZWRDb21taXRSZWFzb24gPSBmaW5pc2hlZFdvcmsuc3VidHJlZUZsYWdzO1xuICAgICAgaWYgKFxuICAgICAgICBzdXNwZW5kZWRDb21taXRSZWFzb24gJiA4MTkyIHx8XG4gICAgICAgIDE2Nzg1NDA4ID09PSAoc3VzcGVuZGVkQ29tbWl0UmVhc29uICYgMTY3ODU0MDgpXG4gICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoKHN1c3BlbmRlZFN0YXRlID0ge1xuICAgICAgICAgICAgc3R5bGVzaGVldHM6IG51bGwsXG4gICAgICAgICAgICBjb3VudDogMCxcbiAgICAgICAgICAgIHVuc3VzcGVuZDogbm9vcCQxXG4gICAgICAgICAgfSksXG4gICAgICAgICAgYWNjdW11bGF0ZVN1c3BlbnNleUNvbW1pdE9uRmliZXIoZmluaXNoZWRXb3JrKSxcbiAgICAgICAgICAoc3VzcGVuZGVkQ29tbWl0UmVhc29uID0gd2FpdEZvckNvbW1pdFRvQmVSZWFkeSgpKSxcbiAgICAgICAgICBudWxsICE9PSBzdXNwZW5kZWRDb21taXRSZWFzb24pXG4gICAgICAgICkge1xuICAgICAgICAgIHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdCA9IHN1c3BlbmRlZENvbW1pdFJlYXNvbihcbiAgICAgICAgICAgIGNvbW1pdFJvb3QuYmluZChcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgcmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgICAgICAgIHRyYW5zaXRpb25zLFxuICAgICAgICAgICAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gICAgICAgICAgICAgIHNwYXduZWRMYW5lLFxuICAgICAgICAgICAgICB1cGRhdGVkTGFuZXMsXG4gICAgICAgICAgICAgIHN1c3BlbmRlZFJldHJ5TGFuZXMsXG4gICAgICAgICAgICAgIGV4aXRTdGF0dXMsXG4gICAgICAgICAgICAgIFNVU1BFTkRFRF9DT01NSVQsXG4gICAgICAgICAgICAgIGNvbXBsZXRlZFJlbmRlclN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgY29tcGxldGVkUmVuZGVyRW5kVGltZVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICBzcGF3bmVkTGFuZSxcbiAgICAgICAgICAgICFkaWRTa2lwU3VzcGVuZGVkU2libGluZ3NcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgY29tbWl0Um9vdChcbiAgICAgICAgcm9vdCxcbiAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICBsYW5lcyxcbiAgICAgICAgcmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgIHRyYW5zaXRpb25zLFxuICAgICAgICBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGUsXG4gICAgICAgIHNwYXduZWRMYW5lLFxuICAgICAgICB1cGRhdGVkTGFuZXMsXG4gICAgICAgIHN1c3BlbmRlZFJldHJ5TGFuZXNcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzUmVuZGVyQ29uc2lzdGVudFdpdGhFeHRlcm5hbFN0b3JlcyhmaW5pc2hlZFdvcmspIHtcbiAgICAgIGZvciAodmFyIG5vZGUgPSBmaW5pc2hlZFdvcms7IDsgKSB7XG4gICAgICAgIHZhciB0YWcgPSBub2RlLnRhZztcbiAgICAgICAgaWYgKFxuICAgICAgICAgICgwID09PSB0YWcgfHwgMTEgPT09IHRhZyB8fCAxNSA9PT0gdGFnKSAmJlxuICAgICAgICAgIG5vZGUuZmxhZ3MgJiAxNjM4NCAmJlxuICAgICAgICAgICgodGFnID0gbm9kZS51cGRhdGVRdWV1ZSksXG4gICAgICAgICAgbnVsbCAhPT0gdGFnICYmICgodGFnID0gdGFnLnN0b3JlcyksIG51bGwgIT09IHRhZykpXG4gICAgICAgIClcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNoZWNrID0gdGFnW2ldLFxuICAgICAgICAgICAgICBnZXRTbmFwc2hvdCA9IGNoZWNrLmdldFNuYXBzaG90O1xuICAgICAgICAgICAgY2hlY2sgPSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmICghb2JqZWN0SXMoZ2V0U25hcHNob3QoKSwgY2hlY2spKSByZXR1cm4gITE7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB0YWcgPSBub2RlLmNoaWxkO1xuICAgICAgICBpZiAobm9kZS5zdWJ0cmVlRmxhZ3MgJiAxNjM4NCAmJiBudWxsICE9PSB0YWcpXG4gICAgICAgICAgKHRhZy5yZXR1cm4gPSBub2RlKSwgKG5vZGUgPSB0YWcpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAobm9kZSA9PT0gZmluaXNoZWRXb3JrKSBicmVhaztcbiAgICAgICAgICBmb3IgKDsgbnVsbCA9PT0gbm9kZS5zaWJsaW5nOyApIHtcbiAgICAgICAgICAgIGlmIChudWxsID09PSBub2RlLnJldHVybiB8fCBub2RlLnJldHVybiA9PT0gZmluaXNoZWRXb3JrKSByZXR1cm4gITA7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtSb290U3VzcGVuZGVkKFxuICAgICAgcm9vdCxcbiAgICAgIHN1c3BlbmRlZExhbmVzLFxuICAgICAgc3Bhd25lZExhbmUsXG4gICAgICBkaWRBdHRlbXB0RW50aXJlVHJlZVxuICAgICkge1xuICAgICAgc3VzcGVuZGVkTGFuZXMgJj0gfndvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzO1xuICAgICAgc3VzcGVuZGVkTGFuZXMgJj0gfndvcmtJblByb2dyZXNzUm9vdEludGVybGVhdmVkVXBkYXRlZExhbmVzO1xuICAgICAgcm9vdC5zdXNwZW5kZWRMYW5lcyB8PSBzdXNwZW5kZWRMYW5lcztcbiAgICAgIHJvb3QucGluZ2VkTGFuZXMgJj0gfnN1c3BlbmRlZExhbmVzO1xuICAgICAgZGlkQXR0ZW1wdEVudGlyZVRyZWUgJiYgKHJvb3Qud2FybUxhbmVzIHw9IHN1c3BlbmRlZExhbmVzKTtcbiAgICAgIGRpZEF0dGVtcHRFbnRpcmVUcmVlID0gcm9vdC5leHBpcmF0aW9uVGltZXM7XG4gICAgICBmb3IgKHZhciBsYW5lcyA9IHN1c3BlbmRlZExhbmVzOyAwIDwgbGFuZXM7ICkge1xuICAgICAgICB2YXIgaW5kZXggPSAzMSAtIGNsejMyKGxhbmVzKSxcbiAgICAgICAgICBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgICAgZGlkQXR0ZW1wdEVudGlyZVRyZWVbaW5kZXhdID0gLTE7XG4gICAgICAgIGxhbmVzICY9IH5sYW5lO1xuICAgICAgfVxuICAgICAgMCAhPT0gc3Bhd25lZExhbmUgJiZcbiAgICAgICAgbWFya1NwYXduZWREZWZlcnJlZExhbmUocm9vdCwgc3Bhd25lZExhbmUsIHN1c3BlbmRlZExhbmVzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmx1c2hTeW5jV29yayQxKCkge1xuICAgICAgcmV0dXJuIChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dFxuICAgICAgICA/IChmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbCgwLCAhMSksICExKVxuICAgICAgICA6ICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNldFdvcmtJblByb2dyZXNzU3RhY2soKSB7XG4gICAgICBpZiAobnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID09PSBOb3RTdXNwZW5kZWQpXG4gICAgICAgICAgdmFyIGludGVycnVwdGVkV29yayA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIChpbnRlcnJ1cHRlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcyksXG4gICAgICAgICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKSxcbiAgICAgICAgICAgIHJlc2V0SG9va3NPblVud2luZChpbnRlcnJ1cHRlZFdvcmspLFxuICAgICAgICAgICAgKHRoZW5hYmxlU3RhdGUkMSA9IG51bGwpLFxuICAgICAgICAgICAgKHRoZW5hYmxlSW5kZXhDb3VudGVyJDEgPSAwKSxcbiAgICAgICAgICAgIChpbnRlcnJ1cHRlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIGZvciAoOyBudWxsICE9PSBpbnRlcnJ1cHRlZFdvcms7IClcbiAgICAgICAgICB1bndpbmRJbnRlcnJ1cHRlZFdvcmsoaW50ZXJydXB0ZWRXb3JrLmFsdGVybmF0ZSwgaW50ZXJydXB0ZWRXb3JrKSxcbiAgICAgICAgICAgIChpbnRlcnJ1cHRlZFdvcmsgPSBpbnRlcnJ1cHRlZFdvcmsucmV0dXJuKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcykge1xuICAgICAgdmFyIHRpbWVvdXRIYW5kbGUgPSByb290LnRpbWVvdXRIYW5kbGU7XG4gICAgICB0aW1lb3V0SGFuZGxlICE9PSBub1RpbWVvdXQgJiZcbiAgICAgICAgKChyb290LnRpbWVvdXRIYW5kbGUgPSBub1RpbWVvdXQpLCBjYW5jZWxUaW1lb3V0KHRpbWVvdXRIYW5kbGUpKTtcbiAgICAgIHRpbWVvdXRIYW5kbGUgPSByb290LmNhbmNlbFBlbmRpbmdDb21taXQ7XG4gICAgICBudWxsICE9PSB0aW1lb3V0SGFuZGxlICYmXG4gICAgICAgICgocm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0ID0gbnVsbCksIHRpbWVvdXRIYW5kbGUoKSk7XG4gICAgICByZXNldFdvcmtJblByb2dyZXNzU3RhY2soKTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdCA9IHJvb3Q7XG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IHRpbWVvdXRIYW5kbGUgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhyb290LmN1cnJlbnQsIG51bGwpO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBsYW5lcztcbiAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3MgPSAhMTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdElzUHJlcmVuZGVyaW5nID0gY2hlY2tJZlJvb3RJc1ByZXJlbmRlcmluZyhyb290LCBsYW5lcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRBdHRhY2hQaW5nTGlzdGVuZXIgPSAhMTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290SW5Qcm9ncmVzcztcbiAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmV0cnlMYW5lcyA9XG4gICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lID1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcyA9XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9XG4gICAgICAgICAgMDtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlY292ZXJhYmxlRXJyb3JzID0gd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycyA9XG4gICAgICAgIG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRJbmNsdWRlUmVjdXJzaXZlUmVuZGVyVXBkYXRlID0gITE7XG4gICAgICAwICE9PSAobGFuZXMgJiA4KSAmJiAobGFuZXMgfD0gbGFuZXMgJiAzMik7XG4gICAgICB2YXIgYWxsRW50YW5nbGVkTGFuZXMgPSByb290LmVudGFuZ2xlZExhbmVzO1xuICAgICAgaWYgKDAgIT09IGFsbEVudGFuZ2xlZExhbmVzKVxuICAgICAgICBmb3IgKFxuICAgICAgICAgIHJvb3QgPSByb290LmVudGFuZ2xlbWVudHMsIGFsbEVudGFuZ2xlZExhbmVzICY9IGxhbmVzO1xuICAgICAgICAgIDAgPCBhbGxFbnRhbmdsZWRMYW5lcztcblxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgaW5kZXggPSAzMSAtIGNsejMyKGFsbEVudGFuZ2xlZExhbmVzKSxcbiAgICAgICAgICAgIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgICAgIGxhbmVzIHw9IHJvb3RbaW5kZXhdO1xuICAgICAgICAgIGFsbEVudGFuZ2xlZExhbmVzICY9IH5sYW5lO1xuICAgICAgICB9XG4gICAgICBlbnRhbmdsZWRSZW5kZXJMYW5lcyA9IGxhbmVzO1xuICAgICAgZmluaXNoUXVldWVpbmdDb25jdXJyZW50VXBkYXRlcygpO1xuICAgICAgbGFuZXMgPSBnZXRDdXJyZW50VGltZSgpO1xuICAgICAgMWUzIDwgbGFuZXMgLSBsYXN0UmVzZXRUaW1lICYmXG4gICAgICAgICgoUmVhY3RTaGFyZWRJbnRlcm5hbHMucmVjZW50bHlDcmVhdGVkT3duZXJTdGFja3MgPSAwKSxcbiAgICAgICAgKGxhc3RSZXNldFRpbWUgPSBsYW5lcykpO1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZGlzY2FyZFBlbmRpbmdXYXJuaW5ncygpO1xuICAgICAgcmV0dXJuIHRpbWVvdXRIYW5kbGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZVRocm93KHJvb3QsIHRocm93blZhbHVlKSB7XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGw7XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrID0gbnVsbDtcbiAgICAgIGlzUmVuZGVyaW5nID0gITE7XG4gICAgICBjdXJyZW50ID0gbnVsbDtcbiAgICAgIHRocm93blZhbHVlID09PSBTdXNwZW5zZUV4Y2VwdGlvbiB8fFxuICAgICAgdGhyb3duVmFsdWUgPT09IFN1c3BlbnNlQWN0aW9uRXhjZXB0aW9uXG4gICAgICAgID8gKCh0aHJvd25WYWx1ZSA9IGdldFN1c3BlbmRlZFRoZW5hYmxlKCkpLFxuICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IFN1c3BlbmRlZE9uSW1tZWRpYXRlKSlcbiAgICAgICAgOiB0aHJvd25WYWx1ZSA9PT0gU3VzcGVuc2V5Q29tbWl0RXhjZXB0aW9uXG4gICAgICAgICAgPyAoKHRocm93blZhbHVlID0gZ2V0U3VzcGVuZGVkVGhlbmFibGUoKSksXG4gICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBTdXNwZW5kZWRPbkluc3RhbmNlKSlcbiAgICAgICAgICA6ICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9XG4gICAgICAgICAgICAgIHRocm93blZhbHVlID09PSBTZWxlY3RpdmVIeWRyYXRpb25FeGNlcHRpb25cbiAgICAgICAgICAgICAgICA/IFN1c3BlbmRlZE9uSHlkcmF0aW9uXG4gICAgICAgICAgICAgICAgOiBudWxsICE9PSB0aHJvd25WYWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgdGhyb3duVmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdGhyb3duVmFsdWUudGhlblxuICAgICAgICAgICAgICAgICAgPyBTdXNwZW5kZWRPbkRlcHJlY2F0ZWRUaHJvd1Byb21pc2VcbiAgICAgICAgICAgICAgICAgIDogU3VzcGVuZGVkT25FcnJvcik7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gdGhyb3duVmFsdWU7XG4gICAgICB2YXIgZXJyb3JlZFdvcmsgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgIGlmIChudWxsID09PSBlcnJvcmVkV29yaylcbiAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RmF0YWxFcnJvcmVkKSxcbiAgICAgICAgICBsb2dVbmNhdWdodEVycm9yKFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKHRocm93blZhbHVlLCByb290LmN1cnJlbnQpXG4gICAgICAgICAgKTtcbiAgICAgIGVsc2VcbiAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAoZXJyb3JlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlICYmXG4gICAgICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZER1cmF0aW9uKGVycm9yZWRXb3JrKSxcbiAgICAgICAgICBtYXJrQ29tcG9uZW50UmVuZGVyU3RvcHBlZCgpLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uKVxuICAgICAgICApIHtcbiAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uRXJyb3I6XG4gICAgICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50RXJyb3JlZCAmJlxuICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21wb25lbnRFcnJvcmVkKFxuICAgICAgICAgICAgICAgIGVycm9yZWRXb3JrLFxuICAgICAgICAgICAgICAgIHRocm93blZhbHVlLFxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uRGF0YTpcbiAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uQWN0aW9uOlxuICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25JbW1lZGlhdGU6XG4gICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkRlcHJlY2F0ZWRUaHJvd1Byb21pc2U6XG4gICAgICAgICAgY2FzZSBTdXNwZW5kZWRBbmRSZWFkeVRvQ29udGludWU6XG4gICAgICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tcG9uZW50U3VzcGVuZGVkICYmXG4gICAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0NvbXBvbmVudFN1c3BlbmRlZChcbiAgICAgICAgICAgICAgICBlcnJvcmVkV29yayxcbiAgICAgICAgICAgICAgICB0aHJvd25WYWx1ZSxcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZFJlbWFpbk9uUHJldmlvdXNTY3JlZW4oKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgICByZXR1cm4gbnVsbCA9PT0gaGFuZGxlclxuICAgICAgICA/ICEwXG4gICAgICAgIDogKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNDE5NDA0OCkgPT09XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgID8gbnVsbCA9PT0gc2hlbGxCb3VuZGFyeVxuICAgICAgICAgICAgPyAhMFxuICAgICAgICAgICAgOiAhMVxuICAgICAgICAgIDogKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYgNjI5MTQ1NjApID09PVxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzIHx8XG4gICAgICAgICAgICAgIDAgIT09ICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIDUzNjg3MDkxMilcbiAgICAgICAgICAgID8gaGFuZGxlciA9PT0gc2hlbGxCb3VuZGFyeVxuICAgICAgICAgICAgOiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaERpc3BhdGNoZXIoKSB7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgICAgIHJldHVybiBudWxsID09PSBwcmV2RGlzcGF0Y2hlciA/IENvbnRleHRPbmx5RGlzcGF0Y2hlciA6IHByZXZEaXNwYXRjaGVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwdXNoQXN5bmNEaXNwYXRjaGVyKCkge1xuICAgICAgdmFyIHByZXZBc3luY0Rpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5BO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuQSA9IERlZmF1bHRBc3luY0Rpc3BhdGNoZXI7XG4gICAgICByZXR1cm4gcHJldkFzeW5jRGlzcGF0Y2hlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVuZGVyRGlkU3VzcGVuZERlbGF5SWZQb3NzaWJsZSgpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkV2l0aERlbGF5O1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzIHx8XG4gICAgICAgICgod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiA0MTk0MDQ4KSAhPT1cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmJlxuICAgICAgICAgIG51bGwgIT09IHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQpIHx8XG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RJc1ByZXJlbmRlcmluZyA9ICEwKTtcbiAgICAgICgwID09PSAod29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzICYgMTM0MjE3NzI3KSAmJlxuICAgICAgICAwID09PSAod29ya0luUHJvZ3Jlc3NSb290SW50ZXJsZWF2ZWRVcGRhdGVkTGFuZXMgJiAxMzQyMTc3MjcpKSB8fFxuICAgICAgICBudWxsID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgfHxcbiAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290LFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLFxuICAgICAgICAgIHdvcmtJblByb2dyZXNzRGVmZXJyZWRMYW5lLFxuICAgICAgICAgICExXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzLCBzaG91bGRZaWVsZEZvclByZXJlbmRlcmluZykge1xuICAgICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmVuZGVyQ29udGV4dDtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IHB1c2hEaXNwYXRjaGVyKCksXG4gICAgICAgIHByZXZBc3luY0Rpc3BhdGNoZXIgPSBwdXNoQXN5bmNEaXNwYXRjaGVyKCk7XG4gICAgICBpZiAoXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gbGFuZXNcbiAgICAgICkge1xuICAgICAgICBpZiAoaXNEZXZUb29sc1ByZXNlbnQpIHtcbiAgICAgICAgICB2YXIgbWVtb2l6ZWRVcGRhdGVycyA9IHJvb3QubWVtb2l6ZWRVcGRhdGVycztcbiAgICAgICAgICAwIDwgbWVtb2l6ZWRVcGRhdGVycy5zaXplICYmXG4gICAgICAgICAgICAocmVzdG9yZVBlbmRpbmdVcGRhdGVycyhyb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyksXG4gICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLmNsZWFyKCkpO1xuICAgICAgICAgIG1vdmVQZW5kaW5nRmliZXJzVG9NZW1vaXplZChyb290LCBsYW5lcyk7XG4gICAgICAgIH1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NUcmFuc2l0aW9ucyA9IG51bGw7XG4gICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKTtcbiAgICAgIH1cbiAgICAgIG1hcmtSZW5kZXJTdGFydGVkKGxhbmVzKTtcbiAgICAgIGxhbmVzID0gITE7XG4gICAgICBtZW1vaXplZFVwZGF0ZXJzID0gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbiAgICAgIGE6IGRvXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gIT09IE5vdFN1c3BlbmRlZCAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3NcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciB1bml0T2ZXb3JrID0gd29ya0luUHJvZ3Jlc3MsXG4gICAgICAgICAgICAgIHRocm93blZhbHVlID0gd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZTtcbiAgICAgICAgICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24pIHtcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkh5ZHJhdGlvbjpcbiAgICAgICAgICAgICAgICByZXNldFdvcmtJblByb2dyZXNzU3RhY2soKTtcbiAgICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzID0gUm9vdFN1c3BlbmRlZEF0VGhlU2hlbGw7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkltbWVkaWF0ZTpcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkRhdGE6XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25BY3Rpb246XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25EZXByZWNhdGVkVGhyb3dQcm9taXNlOlxuICAgICAgICAgICAgICAgIG51bGwgPT09IHN1c3BlbnNlSGFuZGxlclN0YWNrQ3Vyc29yLmN1cnJlbnQgJiYgKGxhbmVzID0gITApO1xuICAgICAgICAgICAgICAgIHZhciByZWFzb24gPSB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbjtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aHJvd0FuZFVud2luZFdvcmtMb29wKHJvb3QsIHVuaXRPZldvcmssIHRocm93blZhbHVlLCByZWFzb24pO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHNob3VsZFlpZWxkRm9yUHJlcmVuZGVyaW5nICYmXG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJc1ByZXJlbmRlcmluZ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycyA9IFJvb3RJblByb2dyZXNzO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgKHJlYXNvbiA9IHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uKSxcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZCksXG4gICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGwpLFxuICAgICAgICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChyb290LCB1bml0T2ZXb3JrLCB0aHJvd25WYWx1ZSwgcmVhc29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgd29ya0xvb3BTeW5jKCk7XG4gICAgICAgICAgbWVtb2l6ZWRVcGRhdGVycyA9IHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gY2F0Y2ggKHRocm93blZhbHVlJDgpIHtcbiAgICAgICAgICBoYW5kbGVUaHJvdyhyb290LCB0aHJvd25WYWx1ZSQ4KTtcbiAgICAgICAgfVxuICAgICAgd2hpbGUgKDEpO1xuICAgICAgbGFuZXMgJiYgcm9vdC5zaGVsbFN1c3BlbmRDb3VudGVyKys7XG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkEgPSBwcmV2QXN5bmNEaXNwYXRjaGVyO1xuICAgICAgbWFya1JlbmRlclN0b3BwZWQoKTtcbiAgICAgIG51bGwgPT09IHdvcmtJblByb2dyZXNzICYmXG4gICAgICAgICgod29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbCksXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IDApLFxuICAgICAgICBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCkpO1xuICAgICAgcmV0dXJuIG1lbW9pemVkVXBkYXRlcnM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdvcmtMb29wU3luYygpIHtcbiAgICAgIGZvciAoOyBudWxsICE9PSB3b3JrSW5Qcm9ncmVzczsgKSBwZXJmb3JtVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbmRlclJvb3RDb25jdXJyZW50KHJvb3QsIGxhbmVzKSB7XG4gICAgICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZW5kZXJDb250ZXh0O1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gcHVzaERpc3BhdGNoZXIoKSxcbiAgICAgICAgcHJldkFzeW5jRGlzcGF0Y2hlciA9IHB1c2hBc3luY0Rpc3BhdGNoZXIoKTtcbiAgICAgIGlmIChcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBsYW5lc1xuICAgICAgKSB7XG4gICAgICAgIGlmIChpc0RldlRvb2xzUHJlc2VudCkge1xuICAgICAgICAgIHZhciBtZW1vaXplZFVwZGF0ZXJzID0gcm9vdC5tZW1vaXplZFVwZGF0ZXJzO1xuICAgICAgICAgIDAgPCBtZW1vaXplZFVwZGF0ZXJzLnNpemUgJiZcbiAgICAgICAgICAgIChyZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKHJvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKSxcbiAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMuY2xlYXIoKSk7XG4gICAgICAgICAgbW92ZVBlbmRpbmdGaWJlcnNUb01lbW9pemVkKHJvb3QsIGxhbmVzKTtcbiAgICAgICAgfVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zID0gbnVsbDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IG5vdyQxKCkgKyBSRU5ERVJfVElNRU9VVF9NUztcbiAgICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdElzUHJlcmVuZGVyaW5nID0gY2hlY2tJZlJvb3RJc1ByZXJlbmRlcmluZyhcbiAgICAgICAgICByb290LFxuICAgICAgICAgIGxhbmVzXG4gICAgICAgICk7XG4gICAgICBtYXJrUmVuZGVyU3RhcnRlZChsYW5lcyk7XG4gICAgICBhOiBkb1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uICE9PSBOb3RTdXNwZW5kZWQgJiZcbiAgICAgICAgICAgIG51bGwgIT09IHdvcmtJblByb2dyZXNzXG4gICAgICAgICAgKVxuICAgICAgICAgICAgYjogc3dpdGNoIChcbiAgICAgICAgICAgICAgKChsYW5lcyA9IHdvcmtJblByb2dyZXNzKSxcbiAgICAgICAgICAgICAgKG1lbW9pemVkVXBkYXRlcnMgPSB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlKSxcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkVycm9yOlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzVGhyb3duVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3AoXG4gICAgICAgICAgICAgICAgICByb290LFxuICAgICAgICAgICAgICAgICAgbGFuZXMsXG4gICAgICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLFxuICAgICAgICAgICAgICAgICAgU3VzcGVuZGVkT25FcnJvclxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25EYXRhOlxuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uQWN0aW9uOlxuICAgICAgICAgICAgICAgIGlmIChpc1RoZW5hYmxlUmVzb2x2ZWQobWVtb2l6ZWRVcGRhdGVycykpIHtcbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkO1xuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICByZXBsYXlTdXNwZW5kZWRVbml0T2ZXb3JrKGxhbmVzKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsYW5lcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiAhPT0gU3VzcGVuZGVkT25EYXRhICYmXG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uICE9PSBTdXNwZW5kZWRPbkFjdGlvbikgfHxcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8XG4gICAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgU3VzcGVuZGVkQW5kUmVhZHlUb0NvbnRpbnVlKTtcbiAgICAgICAgICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMudGhlbihsYW5lcywgbGFuZXMpO1xuICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgIGNhc2UgU3VzcGVuZGVkT25JbW1lZGlhdGU6XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBTdXNwZW5kZWRBbmRSZWFkeVRvQ29udGludWU7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkluc3RhbmNlOlxuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID1cbiAgICAgICAgICAgICAgICAgIFN1c3BlbmRlZE9uSW5zdGFuY2VBbmRSZWFkeVRvQ29udGludWU7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRBbmRSZWFkeVRvQ29udGludWU6XG4gICAgICAgICAgICAgICAgaXNUaGVuYWJsZVJlc29sdmVkKG1lbW9pemVkVXBkYXRlcnMpXG4gICAgICAgICAgICAgICAgICA/ICgod29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQpLFxuICAgICAgICAgICAgICAgICAgICAod29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGwpLFxuICAgICAgICAgICAgICAgICAgICByZXBsYXlTdXNwZW5kZWRVbml0T2ZXb3JrKGxhbmVzKSlcbiAgICAgICAgICAgICAgICAgIDogKCh3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZCksXG4gICAgICAgICAgICAgICAgICAgICh3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbCksXG4gICAgICAgICAgICAgICAgICAgIHRocm93QW5kVW53aW5kV29ya0xvb3AoXG4gICAgICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICAgICAgICBtZW1vaXplZFVwZGF0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgIFN1c3BlbmRlZEFuZFJlYWR5VG9Db250aW51ZVxuICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkluc3RhbmNlQW5kUmVhZHlUb0NvbnRpbnVlOlxuICAgICAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgICAgICAgIHZhciBob3N0RmliZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHByZWxvYWRSZXNvdXJjZShyZXNvdXJjZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaG9zdEZpYmVyLnN0YXRlTm9kZS5jb21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJlYXNvbiA9IE5vdFN1c3BlbmRlZDtcbiAgICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Rocm93blZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgc2libGluZyA9IGhvc3RGaWJlci5zaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSBzaWJsaW5nKSB3b3JrSW5Qcm9ncmVzcyA9IHNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0dXJuRmliZXIgPSBob3N0RmliZXIucmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcmV0dXJuRmliZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoKHdvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlVW5pdE9mV29yayhyZXR1cm5GaWJlcikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogKHdvcmtJblByb2dyZXNzID0gbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiVW5leHBlY3RlZCB0eXBlIG9mIGZpYmVyIHRyaWdnZXJlZCBhIHN1c3BlbnNleSBjb21taXQuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChcbiAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMsXG4gICAgICAgICAgICAgICAgICBTdXNwZW5kZWRPbkluc3RhbmNlQW5kUmVhZHlUb0NvbnRpbnVlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBTdXNwZW5kZWRPbkRlcHJlY2F0ZWRUaHJvd1Byb21pc2U6XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NTdXNwZW5kZWRSZWFzb24gPSBOb3RTdXNwZW5kZWQ7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhyb3dBbmRVbndpbmRXb3JrTG9vcChcbiAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICAgICAgICAgIG1lbW9pemVkVXBkYXRlcnMsXG4gICAgICAgICAgICAgICAgICBTdXNwZW5kZWRPbkRlcHJlY2F0ZWRUaHJvd1Byb21pc2VcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFN1c3BlbmRlZE9uSHlkcmF0aW9uOlxuICAgICAgICAgICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NTdGFjaygpO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkQXRUaGVTaGVsbDtcbiAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJVbmV4cGVjdGVkIFN1c3BlbmRlZFJlYXNvbi4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgbnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWVcbiAgICAgICAgICAgID8gd29ya0xvb3BTeW5jKClcbiAgICAgICAgICAgIDogd29ya0xvb3BDb25jdXJyZW50QnlTY2hlZHVsZXIoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBjYXRjaCAodGhyb3duVmFsdWUkOSkge1xuICAgICAgICAgIGhhbmRsZVRocm93KHJvb3QsIHRocm93blZhbHVlJDkpO1xuICAgICAgICB9XG4gICAgICB3aGlsZSAoMSk7XG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkEgPSBwcmV2QXN5bmNEaXNwYXRjaGVyO1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICAgICAgaWYgKG51bGwgIT09IHdvcmtJblByb2dyZXNzKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlcllpZWxkZWQgJiZcbiAgICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlcllpZWxkZWQoKSxcbiAgICAgICAgICBSb290SW5Qcm9ncmVzc1xuICAgICAgICApO1xuICAgICAgbWFya1JlbmRlclN0b3BwZWQoKTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IDA7XG4gICAgICBmaW5pc2hRdWV1ZWluZ0NvbmN1cnJlbnRVcGRhdGVzKCk7XG4gICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbiAgICB9XG4gICAgZnVuY3Rpb24gd29ya0xvb3BDb25jdXJyZW50QnlTY2hlZHVsZXIoKSB7XG4gICAgICBmb3IgKDsgbnVsbCAhPT0gd29ya0luUHJvZ3Jlc3MgJiYgIXNob3VsZFlpZWxkKCk7IClcbiAgICAgICAgcGVyZm9ybVVuaXRPZldvcmsod29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZXJmb3JtVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gICAgICB2YXIgY3VycmVudCA9IHVuaXRPZldvcmsuYWx0ZXJuYXRlO1xuICAgICAgKHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlXG4gICAgICAgID8gKHN0YXJ0UHJvZmlsZXJUaW1lcih1bml0T2ZXb3JrKSxcbiAgICAgICAgICAoY3VycmVudCA9IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgICAgIGJlZ2luV29yayxcbiAgICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICAgICAgZW50YW5nbGVkUmVuZGVyTGFuZXNcbiAgICAgICAgICApKSxcbiAgICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZER1cmF0aW9uKHVuaXRPZldvcmspKVxuICAgICAgICA6IChjdXJyZW50ID0gcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICAgICAgYmVnaW5Xb3JrLFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHVuaXRPZldvcmssXG4gICAgICAgICAgICBlbnRhbmdsZWRSZW5kZXJMYW5lc1xuICAgICAgICAgICkpO1xuICAgICAgdW5pdE9mV29yay5tZW1vaXplZFByb3BzID0gdW5pdE9mV29yay5wZW5kaW5nUHJvcHM7XG4gICAgICBudWxsID09PSBjdXJyZW50XG4gICAgICAgID8gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspXG4gICAgICAgIDogKHdvcmtJblByb2dyZXNzID0gY3VycmVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcGxheVN1c3BlbmRlZFVuaXRPZldvcmsodW5pdE9mV29yaykge1xuICAgICAgdmFyIG5leHQgPSBydW5XaXRoRmliZXJJbkRFVih1bml0T2ZXb3JrLCByZXBsYXlCZWdpbldvcmssIHVuaXRPZldvcmspO1xuICAgICAgdW5pdE9mV29yay5tZW1vaXplZFByb3BzID0gdW5pdE9mV29yay5wZW5kaW5nUHJvcHM7XG4gICAgICBudWxsID09PSBuZXh0ID8gY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspIDogKHdvcmtJblByb2dyZXNzID0gbmV4dCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcGxheUJlZ2luV29yayh1bml0T2ZXb3JrKSB7XG4gICAgICB2YXIgY3VycmVudCA9IHVuaXRPZldvcmsuYWx0ZXJuYXRlLFxuICAgICAgICBpc1Byb2ZpbGluZ01vZGUgPSAodW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGU7XG4gICAgICBpc1Byb2ZpbGluZ01vZGUgJiYgc3RhcnRQcm9maWxlclRpbWVyKHVuaXRPZldvcmspO1xuICAgICAgc3dpdGNoICh1bml0T2ZXb3JrLnRhZykge1xuICAgICAgICBjYXNlIDE1OlxuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgY3VycmVudCA9IHJlcGxheUZ1bmN0aW9uQ29tcG9uZW50KFxuICAgICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICAgIHVuaXRPZldvcmssXG4gICAgICAgICAgICB1bml0T2ZXb3JrLnBlbmRpbmdQcm9wcyxcbiAgICAgICAgICAgIHVuaXRPZldvcmsudHlwZSxcbiAgICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICBjdXJyZW50ID0gcmVwbGF5RnVuY3Rpb25Db21wb25lbnQoXG4gICAgICAgICAgICBjdXJyZW50LFxuICAgICAgICAgICAgdW5pdE9mV29yayxcbiAgICAgICAgICAgIHVuaXRPZldvcmsucGVuZGluZ1Byb3BzLFxuICAgICAgICAgICAgdW5pdE9mV29yay50eXBlLnJlbmRlcixcbiAgICAgICAgICAgIHVuaXRPZldvcmsucmVmLFxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXNcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmVzZXRIb29rc09uVW53aW5kKHVuaXRPZldvcmspO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHVud2luZEludGVycnVwdGVkV29yayhjdXJyZW50LCB1bml0T2ZXb3JrKSxcbiAgICAgICAgICAgICh1bml0T2ZXb3JrID0gd29ya0luUHJvZ3Jlc3MgPVxuICAgICAgICAgICAgICByZXNldFdvcmtJblByb2dyZXNzKHVuaXRPZldvcmssIGVudGFuZ2xlZFJlbmRlckxhbmVzKSksXG4gICAgICAgICAgICAoY3VycmVudCA9IGJlZ2luV29yayhjdXJyZW50LCB1bml0T2ZXb3JrLCBlbnRhbmdsZWRSZW5kZXJMYW5lcykpO1xuICAgICAgfVxuICAgICAgaXNQcm9maWxpbmdNb2RlICYmXG4gICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRHVyYXRpb24odW5pdE9mV29yayk7XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdGhyb3dBbmRVbndpbmRXb3JrTG9vcChcbiAgICAgIHJvb3QsXG4gICAgICB1bml0T2ZXb3JrLFxuICAgICAgdGhyb3duVmFsdWUsXG4gICAgICBzdXNwZW5kZWRSZWFzb25cbiAgICApIHtcbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICAgICAgcmVzZXRIb29rc09uVW53aW5kKHVuaXRPZldvcmspO1xuICAgICAgdGhlbmFibGVTdGF0ZSQxID0gbnVsbDtcbiAgICAgIHRoZW5hYmxlSW5kZXhDb3VudGVyJDEgPSAwO1xuICAgICAgdmFyIHJldHVybkZpYmVyID0gdW5pdE9mV29yay5yZXR1cm47XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhyb3dFeGNlcHRpb24oXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgcmV0dXJuRmliZXIsXG4gICAgICAgICAgICB1bml0T2ZXb3JrLFxuICAgICAgICAgICAgdGhyb3duVmFsdWUsXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc1xuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RGYXRhbEVycm9yZWQ7XG4gICAgICAgICAgbG9nVW5jYXVnaHRFcnJvcihcbiAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICBjcmVhdGVDYXB0dXJlZFZhbHVlQXRGaWJlcih0aHJvd25WYWx1ZSwgcm9vdC5jdXJyZW50KVxuICAgICAgICAgICk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKG51bGwgIT09IHJldHVybkZpYmVyKSB0aHJvdyAoKHdvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXIpLCBlcnJvcik7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RmF0YWxFcnJvcmVkO1xuICAgICAgICBsb2dVbmNhdWdodEVycm9yKFxuICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIodGhyb3duVmFsdWUsIHJvb3QuY3VycmVudClcbiAgICAgICAgKTtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodW5pdE9mV29yay5mbGFncyAmIDMyNzY4KSB7XG4gICAgICAgIGlmIChpc0h5ZHJhdGluZyB8fCBzdXNwZW5kZWRSZWFzb24gPT09IFN1c3BlbmRlZE9uRXJyb3IpIHJvb3QgPSAhMDtcbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290SXNQcmVyZW5kZXJpbmcgfHxcbiAgICAgICAgICAwICE9PSAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiA1MzY4NzA5MTIpXG4gICAgICAgIClcbiAgICAgICAgICByb290ID0gITE7XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICgod29ya0luUHJvZ3Jlc3NSb290RGlkU2tpcFN1c3BlbmRlZFNpYmxpbmdzID0gcm9vdCA9ICEwKSxcbiAgICAgICAgICBzdXNwZW5kZWRSZWFzb24gPT09IFN1c3BlbmRlZE9uRGF0YSB8fFxuICAgICAgICAgICAgc3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkFjdGlvbiB8fFxuICAgICAgICAgICAgc3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkltbWVkaWF0ZSB8fFxuICAgICAgICAgICAgc3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkRlcHJlY2F0ZWRUaHJvd1Byb21pc2UpXG4gICAgICAgIClcbiAgICAgICAgICAoc3VzcGVuZGVkUmVhc29uID0gc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IuY3VycmVudCksXG4gICAgICAgICAgICBudWxsICE9PSBzdXNwZW5kZWRSZWFzb24gJiZcbiAgICAgICAgICAgICAgMTMgPT09IHN1c3BlbmRlZFJlYXNvbi50YWcgJiZcbiAgICAgICAgICAgICAgKHN1c3BlbmRlZFJlYXNvbi5mbGFncyB8PSAxNjM4NCk7XG4gICAgICAgIHVud2luZFVuaXRPZldvcmsodW5pdE9mV29yaywgcm9vdCk7XG4gICAgICB9IGVsc2UgY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yaykge1xuICAgICAgdmFyIGNvbXBsZXRlZFdvcmsgPSB1bml0T2ZXb3JrO1xuICAgICAgZG8ge1xuICAgICAgICBpZiAoMCAhPT0gKGNvbXBsZXRlZFdvcmsuZmxhZ3MgJiAzMjc2OCkpIHtcbiAgICAgICAgICB1bndpbmRVbml0T2ZXb3JrKFxuICAgICAgICAgICAgY29tcGxldGVkV29yayxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzUm9vdERpZFNraXBTdXNwZW5kZWRTaWJsaW5nc1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjdXJyZW50ID0gY29tcGxldGVkV29yay5hbHRlcm5hdGU7XG4gICAgICAgIHVuaXRPZldvcmsgPSBjb21wbGV0ZWRXb3JrLnJldHVybjtcbiAgICAgICAgc3RhcnRQcm9maWxlclRpbWVyKGNvbXBsZXRlZFdvcmspO1xuICAgICAgICBjdXJyZW50ID0gcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgY29tcGxldGVkV29yayxcbiAgICAgICAgICBjb21wbGV0ZVdvcmssXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgICBjb21wbGV0ZWRXb3JrLFxuICAgICAgICAgIGVudGFuZ2xlZFJlbmRlckxhbmVzXG4gICAgICAgICk7XG4gICAgICAgIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSAmJlxuICAgICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkSW5jb21wbGV0ZUR1cmF0aW9uKGNvbXBsZXRlZFdvcmspO1xuICAgICAgICBpZiAobnVsbCAhPT0gY3VycmVudCkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gY3VycmVudDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29tcGxldGVkV29yayA9IGNvbXBsZXRlZFdvcmsuc2libGluZztcbiAgICAgICAgaWYgKG51bGwgIT09IGNvbXBsZXRlZFdvcmspIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gY29tcGxldGVkV29yayA9IHVuaXRPZldvcms7XG4gICAgICB9IHdoaWxlIChudWxsICE9PSBjb21wbGV0ZWRXb3JrKTtcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJblByb2dyZXNzICYmXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdENvbXBsZXRlZCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVud2luZFVuaXRPZldvcmsodW5pdE9mV29yaywgc2tpcFNpYmxpbmdzKSB7XG4gICAgICBkbyB7XG4gICAgICAgIHZhciBuZXh0ID0gdW53aW5kV29yayh1bml0T2ZXb3JrLmFsdGVybmF0ZSwgdW5pdE9mV29yayk7XG4gICAgICAgIGlmIChudWxsICE9PSBuZXh0KSB7XG4gICAgICAgICAgbmV4dC5mbGFncyAmPSAzMjc2NztcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IG5leHQ7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgodW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZEluY29tcGxldGVEdXJhdGlvbih1bml0T2ZXb3JrKTtcbiAgICAgICAgICBuZXh0ID0gdW5pdE9mV29yay5hY3R1YWxEdXJhdGlvbjtcbiAgICAgICAgICBmb3IgKHZhciBjaGlsZCA9IHVuaXRPZldvcmsuY2hpbGQ7IG51bGwgIT09IGNoaWxkOyApXG4gICAgICAgICAgICAobmV4dCArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbiksIChjaGlsZCA9IGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICAgIHVuaXRPZldvcmsuYWN0dWFsRHVyYXRpb24gPSBuZXh0O1xuICAgICAgICB9XG4gICAgICAgIG5leHQgPSB1bml0T2ZXb3JrLnJldHVybjtcbiAgICAgICAgbnVsbCAhPT0gbmV4dCAmJlxuICAgICAgICAgICgobmV4dC5mbGFncyB8PSAzMjc2OCksXG4gICAgICAgICAgKG5leHQuc3VidHJlZUZsYWdzID0gMCksXG4gICAgICAgICAgKG5leHQuZGVsZXRpb25zID0gbnVsbCkpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXNraXBTaWJsaW5ncyAmJlxuICAgICAgICAgICgodW5pdE9mV29yayA9IHVuaXRPZldvcmsuc2libGluZyksIG51bGwgIT09IHVuaXRPZldvcmspXG4gICAgICAgICkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzID0gdW5pdE9mV29yaztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSB1bml0T2ZXb3JrID0gbmV4dDtcbiAgICAgIH0gd2hpbGUgKG51bGwgIT09IHVuaXRPZldvcmspO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RTdXNwZW5kZWRBdFRoZVNoZWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRSb290KFxuICAgICAgcm9vdCxcbiAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgIGxhbmVzLFxuICAgICAgcmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICB0cmFuc2l0aW9ucyxcbiAgICAgIGRpZEluY2x1ZGVSZW5kZXJQaGFzZVVwZGF0ZSxcbiAgICAgIHNwYXduZWRMYW5lLFxuICAgICAgdXBkYXRlZExhbmVzLFxuICAgICAgc3VzcGVuZGVkUmV0cnlMYW5lc1xuICAgICkge1xuICAgICAgcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0ID0gbnVsbDtcbiAgICAgIGRvIGZsdXNoUGVuZGluZ0VmZmVjdHMoKTtcbiAgICAgIHdoaWxlIChwZW5kaW5nRWZmZWN0c1N0YXR1cyAhPT0gTk9fUEVORElOR19FRkZFQ1RTKTtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcoKTtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzKCk7XG4gICAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KVxuICAgICAgICB0aHJvdyBFcnJvcihcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiKTtcbiAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrQ29tbWl0U3RhcnRlZCAmJlxuICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtDb21taXRTdGFydGVkKGxhbmVzKTtcbiAgICAgIGlmIChudWxsID09PSBmaW5pc2hlZFdvcmspIG1hcmtDb21taXRTdG9wcGVkKCk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgMCA9PT0gbGFuZXMgJiZcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJmaW5pc2hlZExhbmVzIHNob3VsZCBub3QgYmUgZW1wdHkgZHVyaW5nIGEgY29tbWl0LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgaWYgKGZpbmlzaGVkV29yayA9PT0gcm9vdC5jdXJyZW50KVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJDYW5ub3QgY29tbWl0IHRoZSBzYW1lIHRyZWUgYXMgYmVmb3JlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgZGlkSW5jbHVkZVJlbmRlclBoYXNlVXBkYXRlID1cbiAgICAgICAgICBmaW5pc2hlZFdvcmsubGFuZXMgfCBmaW5pc2hlZFdvcmsuY2hpbGRMYW5lcztcbiAgICAgICAgZGlkSW5jbHVkZVJlbmRlclBoYXNlVXBkYXRlIHw9IGNvbmN1cnJlbnRseVVwZGF0ZWRMYW5lcztcbiAgICAgICAgbWFya1Jvb3RGaW5pc2hlZChcbiAgICAgICAgICByb290LFxuICAgICAgICAgIGxhbmVzLFxuICAgICAgICAgIGRpZEluY2x1ZGVSZW5kZXJQaGFzZVVwZGF0ZSxcbiAgICAgICAgICBzcGF3bmVkTGFuZSxcbiAgICAgICAgICB1cGRhdGVkTGFuZXMsXG4gICAgICAgICAgc3VzcGVuZGVkUmV0cnlMYW5lc1xuICAgICAgICApO1xuICAgICAgICByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgJiZcbiAgICAgICAgICAoKHdvcmtJblByb2dyZXNzID0gd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbCksXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gMCkpO1xuICAgICAgICBwZW5kaW5nRmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrO1xuICAgICAgICBwZW5kaW5nRWZmZWN0c1Jvb3QgPSByb290O1xuICAgICAgICBwZW5kaW5nRWZmZWN0c0xhbmVzID0gbGFuZXM7XG4gICAgICAgIHBlbmRpbmdFZmZlY3RzUmVtYWluaW5nTGFuZXMgPSBkaWRJbmNsdWRlUmVuZGVyUGhhc2VVcGRhdGU7XG4gICAgICAgIHBlbmRpbmdQYXNzaXZlVHJhbnNpdGlvbnMgPSB0cmFuc2l0aW9ucztcbiAgICAgICAgcGVuZGluZ1JlY292ZXJhYmxlRXJyb3JzID0gcmVjb3ZlcmFibGVFcnJvcnM7XG4gICAgICAgIDAgIT09IChmaW5pc2hlZFdvcmsuc3VidHJlZUZsYWdzICYgMTAyNTYpIHx8XG4gICAgICAgIDAgIT09IChmaW5pc2hlZFdvcmsuZmxhZ3MgJiAxMDI1NilcbiAgICAgICAgICA/ICgocm9vdC5jYWxsYmFja05vZGUgPSBudWxsKSxcbiAgICAgICAgICAgIChyb290LmNhbGxiYWNrUHJpb3JpdHkgPSAwKSxcbiAgICAgICAgICAgIHNjaGVkdWxlQ2FsbGJhY2skMShOb3JtYWxQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoITApO1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIDogKChyb290LmNhbGxiYWNrTm9kZSA9IG51bGwpLCAocm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gMCkpO1xuICAgICAgICBjb21taXRTdGFydFRpbWUgPSBub3coKTtcbiAgICAgICAgcmVjb3ZlcmFibGVFcnJvcnMgPSAwICE9PSAoZmluaXNoZWRXb3JrLmZsYWdzICYgMTM4NzgpO1xuICAgICAgICBpZiAoMCAhPT0gKGZpbmlzaGVkV29yay5zdWJ0cmVlRmxhZ3MgJiAxMzg3OCkgfHwgcmVjb3ZlcmFibGVFcnJvcnMpIHtcbiAgICAgICAgICByZWNvdmVyYWJsZUVycm9ycyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQ7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IG51bGw7XG4gICAgICAgICAgdHJhbnNpdGlvbnMgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5wO1xuICAgICAgICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk7XG4gICAgICAgICAgc3Bhd25lZExhbmUgPSBleGVjdXRpb25Db250ZXh0O1xuICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzKHJvb3QsIGZpbmlzaGVkV29yaywgbGFuZXMpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAoZXhlY3V0aW9uQ29udGV4dCA9IHNwYXduZWRMYW5lKSxcbiAgICAgICAgICAgICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSB0cmFuc2l0aW9ucyksXG4gICAgICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5UID0gcmVjb3ZlcmFibGVFcnJvcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyA9IFBFTkRJTkdfTVVUQVRJT05fUEhBU0U7XG4gICAgICAgIGZsdXNoTXV0YXRpb25FZmZlY3RzKCk7XG4gICAgICAgIGZsdXNoTGF5b3V0RWZmZWN0cygpO1xuICAgICAgICBmbHVzaFNwYXduZWRXb3JrKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoTXV0YXRpb25FZmZlY3RzKCkge1xuICAgICAgaWYgKHBlbmRpbmdFZmZlY3RzU3RhdHVzID09PSBQRU5ESU5HX01VVEFUSU9OX1BIQVNFKSB7XG4gICAgICAgIHBlbmRpbmdFZmZlY3RzU3RhdHVzID0gTk9fUEVORElOR19FRkZFQ1RTO1xuICAgICAgICB2YXIgcm9vdCA9IHBlbmRpbmdFZmZlY3RzUm9vdCxcbiAgICAgICAgICBmaW5pc2hlZFdvcmsgPSBwZW5kaW5nRmluaXNoZWRXb3JrLFxuICAgICAgICAgIGxhbmVzID0gcGVuZGluZ0VmZmVjdHNMYW5lcyxcbiAgICAgICAgICByb290TXV0YXRpb25IYXNFZmZlY3QgPSAwICE9PSAoZmluaXNoZWRXb3JrLmZsYWdzICYgMTM4NzgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgMCAhPT0gKGZpbmlzaGVkV29yay5zdWJ0cmVlRmxhZ3MgJiAxMzg3OCkgfHxcbiAgICAgICAgICByb290TXV0YXRpb25IYXNFZmZlY3RcbiAgICAgICAgKSB7XG4gICAgICAgICAgcm9vdE11dGF0aW9uSGFzRWZmZWN0ID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVDtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gbnVsbDtcbiAgICAgICAgICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnA7XG4gICAgICAgICAgUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IERpc2NyZXRlRXZlbnRQcmlvcml0eTtcbiAgICAgICAgICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW5Qcm9ncmVzc0xhbmVzID0gbGFuZXM7XG4gICAgICAgICAgICBpblByb2dyZXNzUm9vdCA9IHJvb3Q7XG4gICAgICAgICAgICBjb21wb25lbnRFZmZlY3RTdGFydFRpbWUgPSAtMS4xO1xuICAgICAgICAgICAgY29tbWl0TXV0YXRpb25FZmZlY3RzT25GaWJlcihmaW5pc2hlZFdvcmssIHJvb3QpO1xuICAgICAgICAgICAgaW5Qcm9ncmVzc1Jvb3QgPSBpblByb2dyZXNzTGFuZXMgPSBudWxsO1xuICAgICAgICAgICAgbGFuZXMgPSBzZWxlY3Rpb25JbmZvcm1hdGlvbjtcbiAgICAgICAgICAgIHZhciBjdXJGb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnREZWVwKHJvb3QuY29udGFpbmVySW5mbyksXG4gICAgICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0gPSBsYW5lcy5mb2N1c2VkRWxlbSxcbiAgICAgICAgICAgICAgcHJpb3JTZWxlY3Rpb25SYW5nZSA9IGxhbmVzLnNlbGVjdGlvblJhbmdlO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjdXJGb2N1c2VkRWxlbSAhPT0gcHJpb3JGb2N1c2VkRWxlbSAmJlxuICAgICAgICAgICAgICBwcmlvckZvY3VzZWRFbGVtICYmXG4gICAgICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0ub3duZXJEb2N1bWVudCAmJlxuICAgICAgICAgICAgICBjb250YWluc05vZGUoXG4gICAgICAgICAgICAgICAgcHJpb3JGb2N1c2VkRWxlbS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICAgICAgICAgICAgICBwcmlvckZvY3VzZWRFbGVtXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gcHJpb3JTZWxlY3Rpb25SYW5nZSAmJlxuICAgICAgICAgICAgICAgIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhwcmlvckZvY3VzZWRFbGVtKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBwcmlvclNlbGVjdGlvblJhbmdlLnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgZW5kID0gcHJpb3JTZWxlY3Rpb25SYW5nZS5lbmQ7XG4gICAgICAgICAgICAgICAgdm9pZCAwID09PSBlbmQgJiYgKGVuZCA9IHN0YXJ0KTtcbiAgICAgICAgICAgICAgICBpZiAoXCJzZWxlY3Rpb25TdGFydFwiIGluIHByaW9yRm9jdXNlZEVsZW0pXG4gICAgICAgICAgICAgICAgICAocHJpb3JGb2N1c2VkRWxlbS5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0KSxcbiAgICAgICAgICAgICAgICAgICAgKHByaW9yRm9jdXNlZEVsZW0uc2VsZWN0aW9uRW5kID0gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgICAgICAgZW5kLFxuICAgICAgICAgICAgICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0udmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdmFyIGRvYyA9IHByaW9yRm9jdXNlZEVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCxcbiAgICAgICAgICAgICAgICAgICAgd2luID0gKGRvYyAmJiBkb2MuZGVmYXVsdFZpZXcpIHx8IHdpbmRvdztcbiAgICAgICAgICAgICAgICAgIGlmICh3aW4uZ2V0U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gcHJpb3JGb2N1c2VkRWxlbS50ZXh0Q29udGVudC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgc3RhcnQkanNjb21wJDAgPSBNYXRoLm1pbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yU2VsZWN0aW9uUmFuZ2Uuc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIGVuZCRqc2NvbXAkMCA9XG4gICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgPT09IHByaW9yU2VsZWN0aW9uUmFuZ2UuZW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gc3RhcnQkanNjb21wJDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNYXRoLm1pbihwcmlvclNlbGVjdGlvblJhbmdlLmVuZCwgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgIXNlbGVjdGlvbi5leHRlbmQgJiZcbiAgICAgICAgICAgICAgICAgICAgICBzdGFydCRqc2NvbXAkMCA+IGVuZCRqc2NvbXAkMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICgoY3VyRm9jdXNlZEVsZW0gPSBlbmQkanNjb21wJDApLFxuICAgICAgICAgICAgICAgICAgICAgIChlbmQkanNjb21wJDAgPSBzdGFydCRqc2NvbXAkMCksXG4gICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0JGpzY29tcCQwID0gY3VyRm9jdXNlZEVsZW0pKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0TWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCRqc2NvbXAkMFxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgZW5kTWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yRm9jdXNlZEVsZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQkanNjb21wJDBcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgc3RhcnRNYXJrZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICBlbmRNYXJrZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoMSAhPT0gc2VsZWN0aW9uLnJhbmdlQ291bnQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlICE9PSBzdGFydE1hcmtlci5ub2RlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0ICE9PSBzdGFydE1hcmtlci5vZmZzZXQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUgIT09IGVuZE1hcmtlci5ub2RlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXQgIT09IGVuZE1hcmtlci5vZmZzZXQpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IGRvYy5jcmVhdGVSYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0TWFya2VyLm5vZGUsIHN0YXJ0TWFya2VyLm9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0JGpzY29tcCQwID4gZW5kJGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZXh0ZW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogKHJhbmdlLnNldEVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGRvYyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IHByaW9yRm9jdXNlZEVsZW07XG4gICAgICAgICAgICAgICAgKHNlbGVjdGlvbiA9IHNlbGVjdGlvbi5wYXJlbnROb2RlKTtcblxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgMSA9PT0gc2VsZWN0aW9uLm5vZGVUeXBlICYmXG4gICAgICAgICAgICAgICAgICBkb2MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHNlbGVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogc2VsZWN0aW9uLnNjcm9sbExlZnQsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogc2VsZWN0aW9uLnNjcm9sbFRvcFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByaW9yRm9jdXNlZEVsZW0uZm9jdXMgJiZcbiAgICAgICAgICAgICAgICBwcmlvckZvY3VzZWRFbGVtLmZvY3VzKCk7XG4gICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgcHJpb3JGb2N1c2VkRWxlbSA9IDA7XG4gICAgICAgICAgICAgICAgcHJpb3JGb2N1c2VkRWxlbSA8IGRvYy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgcHJpb3JGb2N1c2VkRWxlbSsrXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBpbmZvID0gZG9jW3ByaW9yRm9jdXNlZEVsZW1dO1xuICAgICAgICAgICAgICAgIGluZm8uZWxlbWVudC5zY3JvbGxMZWZ0ID0gaW5mby5sZWZ0O1xuICAgICAgICAgICAgICAgIGluZm8uZWxlbWVudC5zY3JvbGxUb3AgPSBpbmZvLnRvcDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2VuYWJsZWQgPSAhIWV2ZW50c0VuYWJsZWQ7XG4gICAgICAgICAgICBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IGV2ZW50c0VuYWJsZWQgPSBudWxsO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAoZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0KSxcbiAgICAgICAgICAgICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBwcmV2aW91c1ByaW9yaXR5KSxcbiAgICAgICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSByb290TXV0YXRpb25IYXNFZmZlY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7XG4gICAgICAgIHBlbmRpbmdFZmZlY3RzU3RhdHVzID0gUEVORElOR19MQVlPVVRfUEhBU0U7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoTGF5b3V0RWZmZWN0cygpIHtcbiAgICAgIGlmIChwZW5kaW5nRWZmZWN0c1N0YXR1cyA9PT0gUEVORElOR19MQVlPVVRfUEhBU0UpIHtcbiAgICAgICAgcGVuZGluZ0VmZmVjdHNTdGF0dXMgPSBOT19QRU5ESU5HX0VGRkVDVFM7XG4gICAgICAgIHZhciByb290ID0gcGVuZGluZ0VmZmVjdHNSb290LFxuICAgICAgICAgIGZpbmlzaGVkV29yayA9IHBlbmRpbmdGaW5pc2hlZFdvcmssXG4gICAgICAgICAgbGFuZXMgPSBwZW5kaW5nRWZmZWN0c0xhbmVzLFxuICAgICAgICAgIHJvb3RIYXNMYXlvdXRFZmZlY3QgPSAwICE9PSAoZmluaXNoZWRXb3JrLmZsYWdzICYgODc3Mik7XG4gICAgICAgIGlmICgwICE9PSAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIDg3NzIpIHx8IHJvb3RIYXNMYXlvdXRFZmZlY3QpIHtcbiAgICAgICAgICByb290SGFzTGF5b3V0RWZmZWN0ID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVDtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gbnVsbDtcbiAgICAgICAgICB2YXIgX3ByZXZpb3VzUHJpb3JpdHkgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5wO1xuICAgICAgICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBEaXNjcmV0ZUV2ZW50UHJpb3JpdHk7XG4gICAgICAgICAgdmFyIF9wcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICAgICAgZXhlY3V0aW9uQ29udGV4dCB8PSBDb21taXRDb250ZXh0O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrTGF5b3V0RWZmZWN0c1N0YXJ0ZWQgJiZcbiAgICAgICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrTGF5b3V0RWZmZWN0c1N0YXJ0ZWQobGFuZXMpLFxuICAgICAgICAgICAgICAoaW5Qcm9ncmVzc0xhbmVzID0gbGFuZXMpLFxuICAgICAgICAgICAgICAoaW5Qcm9ncmVzc1Jvb3QgPSByb290KSxcbiAgICAgICAgICAgICAgKGNvbXBvbmVudEVmZmVjdFN0YXJ0VGltZSA9IC0xLjEpLFxuICAgICAgICAgICAgICBjb21taXRMYXlvdXRFZmZlY3RPbkZpYmVyKFxuICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgZmluaXNoZWRXb3JrLmFsdGVybmF0ZSxcbiAgICAgICAgICAgICAgICBmaW5pc2hlZFdvcmtcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKGluUHJvZ3Jlc3NSb290ID0gaW5Qcm9ncmVzc0xhbmVzID0gbnVsbCksXG4gICAgICAgICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrTGF5b3V0RWZmZWN0c1N0b3BwZWQgJiZcbiAgICAgICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtMYXlvdXRFZmZlY3RzU3RvcHBlZCgpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAoZXhlY3V0aW9uQ29udGV4dCA9IF9wcmV2RXhlY3V0aW9uQ29udGV4dCksXG4gICAgICAgICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gX3ByZXZpb3VzUHJpb3JpdHkpLFxuICAgICAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IHJvb3RIYXNMYXlvdXRFZmZlY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyA9IFBFTkRJTkdfQUZURVJfTVVUQVRJT05fUEhBU0U7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoU3Bhd25lZFdvcmsoKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHBlbmRpbmdFZmZlY3RzU3RhdHVzID09PSBQRU5ESU5HX1NQQVdORURfV09SSyB8fFxuICAgICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyA9PT0gUEVORElOR19BRlRFUl9NVVRBVElPTl9QSEFTRVxuICAgICAgKSB7XG4gICAgICAgIHBlbmRpbmdFZmZlY3RzU3RhdHVzID0gTk9fUEVORElOR19FRkZFQ1RTO1xuICAgICAgICByZXF1ZXN0UGFpbnQoKTtcbiAgICAgICAgdmFyIHJvb3QgPSBwZW5kaW5nRWZmZWN0c1Jvb3QsXG4gICAgICAgICAgZmluaXNoZWRXb3JrID0gcGVuZGluZ0ZpbmlzaGVkV29yayxcbiAgICAgICAgICBsYW5lcyA9IHBlbmRpbmdFZmZlY3RzTGFuZXMsXG4gICAgICAgICAgcmVjb3ZlcmFibGVFcnJvcnMgPSBwZW5kaW5nUmVjb3ZlcmFibGVFcnJvcnMsXG4gICAgICAgICAgcm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0cyA9XG4gICAgICAgICAgICAwICE9PSAoZmluaXNoZWRXb3JrLnN1YnRyZWVGbGFncyAmIDEwMjU2KSB8fFxuICAgICAgICAgICAgMCAhPT0gKGZpbmlzaGVkV29yay5mbGFncyAmIDEwMjU2KTtcbiAgICAgICAgcm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0c1xuICAgICAgICAgID8gKHBlbmRpbmdFZmZlY3RzU3RhdHVzID0gUEVORElOR19QQVNTSVZFX1BIQVNFKVxuICAgICAgICAgIDogKChwZW5kaW5nRWZmZWN0c1N0YXR1cyA9IE5PX1BFTkRJTkdfRUZGRUNUUyksXG4gICAgICAgICAgICAocGVuZGluZ0ZpbmlzaGVkV29yayA9IHBlbmRpbmdFZmZlY3RzUm9vdCA9IG51bGwpLFxuICAgICAgICAgICAgcmVsZWFzZVJvb3RQb29sZWRDYWNoZShyb290LCByb290LnBlbmRpbmdMYW5lcyksXG4gICAgICAgICAgICAobmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMCksXG4gICAgICAgICAgICAocm9vdFdpdGhQYXNzaXZlTmVzdGVkVXBkYXRlcyA9IG51bGwpKTtcbiAgICAgICAgdmFyIHJlbWFpbmluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gICAgICAgIDAgPT09IHJlbWFpbmluZ0xhbmVzICYmIChsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGwpO1xuICAgICAgICByb290RGlkSGF2ZVBhc3NpdmVFZmZlY3RzIHx8IGNvbW1pdERvdWJsZUludm9rZUVmZmVjdHNJbkRFVihyb290KTtcbiAgICAgICAgcm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0cyA9IGxhbmVzVG9FdmVudFByaW9yaXR5KGxhbmVzKTtcbiAgICAgICAgZmluaXNoZWRXb3JrID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluamVjdGVkSG9vayAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdFxuICAgICAgICApXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBkaWRFcnJvciA9IDEyOCA9PT0gKGZpbmlzaGVkV29yay5jdXJyZW50LmZsYWdzICYgMTI4KTtcbiAgICAgICAgICAgIHN3aXRjaCAocm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgICAgICAgICAgICBjYXNlIERpc2NyZXRlRXZlbnRQcmlvcml0eTpcbiAgICAgICAgICAgICAgICB2YXIgc2NoZWR1bGVyUHJpb3JpdHkgPSBJbW1lZGlhdGVQcmlvcml0eTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBDb250aW51b3VzRXZlbnRQcmlvcml0eTpcbiAgICAgICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IFVzZXJCbG9ja2luZ1ByaW9yaXR5O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIERlZmF1bHRFdmVudFByaW9yaXR5OlxuICAgICAgICAgICAgICAgIHNjaGVkdWxlclByaW9yaXR5ID0gTm9ybWFsUHJpb3JpdHkkMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBJZGxlRXZlbnRQcmlvcml0eTpcbiAgICAgICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IElkbGVQcmlvcml0eTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IE5vcm1hbFByaW9yaXR5JDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QoXG4gICAgICAgICAgICAgIHJlbmRlcmVySUQsXG4gICAgICAgICAgICAgIGZpbmlzaGVkV29yayxcbiAgICAgICAgICAgICAgc2NoZWR1bGVyUHJpb3JpdHksXG4gICAgICAgICAgICAgIGRpZEVycm9yXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgfHxcbiAgICAgICAgICAgICAgKChoYXNMb2dnZWRFcnJvciA9ICEwKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlJlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXNcIixcbiAgICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfVxuICAgICAgICBpc0RldlRvb2xzUHJlc2VudCAmJiByb290Lm1lbW9pemVkVXBkYXRlcnMuY2xlYXIoKTtcbiAgICAgICAgb25Db21taXRSb290KCk7XG4gICAgICAgIGlmIChudWxsICE9PSByZWNvdmVyYWJsZUVycm9ycykge1xuICAgICAgICAgIGRpZEVycm9yID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVDtcbiAgICAgICAgICBzY2hlZHVsZXJQcmlvcml0eSA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnA7XG4gICAgICAgICAgUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IERpc2NyZXRlRXZlbnRQcmlvcml0eTtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gbnVsbDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIG9uUmVjb3ZlcmFibGVFcnJvciA9IHJvb3Qub25SZWNvdmVyYWJsZUVycm9yO1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrID0gMDtcbiAgICAgICAgICAgICAgZmluaXNoZWRXb3JrIDwgcmVjb3ZlcmFibGVFcnJvcnMubGVuZ3RoO1xuICAgICAgICAgICAgICBmaW5pc2hlZFdvcmsrK1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHZhciByZWNvdmVyYWJsZUVycm9yID0gcmVjb3ZlcmFibGVFcnJvcnNbZmluaXNoZWRXb3JrXSxcbiAgICAgICAgICAgICAgICBlcnJvckluZm8gPSBtYWtlRXJyb3JJbmZvKHJlY292ZXJhYmxlRXJyb3Iuc3RhY2spO1xuICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICByZWNvdmVyYWJsZUVycm9yLnNvdXJjZSxcbiAgICAgICAgICAgICAgICBvblJlY292ZXJhYmxlRXJyb3IsXG4gICAgICAgICAgICAgICAgcmVjb3ZlcmFibGVFcnJvci52YWx1ZSxcbiAgICAgICAgICAgICAgICBlcnJvckluZm9cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBkaWRFcnJvciksXG4gICAgICAgICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gc2NoZWR1bGVyUHJpb3JpdHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAwICE9PSAocGVuZGluZ0VmZmVjdHNMYW5lcyAmIDMpICYmIGZsdXNoUGVuZGluZ0VmZmVjdHMoKTtcbiAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpO1xuICAgICAgICByZW1haW5pbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICAgICAgICAwICE9PSAobGFuZXMgJiA0MTk0MDkwKSAmJiAwICE9PSAocmVtYWluaW5nTGFuZXMgJiA0MilcbiAgICAgICAgICA/ICgobmVzdGVkVXBkYXRlU2NoZWR1bGVkID0gITApLFxuICAgICAgICAgICAgcm9vdCA9PT0gcm9vdFdpdGhOZXN0ZWRVcGRhdGVzXG4gICAgICAgICAgICAgID8gbmVzdGVkVXBkYXRlQ291bnQrK1xuICAgICAgICAgICAgICA6ICgobmVzdGVkVXBkYXRlQ291bnQgPSAwKSwgKHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IHJvb3QpKSlcbiAgICAgICAgICA6IChuZXN0ZWRVcGRhdGVDb3VudCA9IDApO1xuICAgICAgICBmbHVzaFN5bmNXb3JrQWNyb3NzUm9vdHNfaW1wbCgwLCAhMSk7XG4gICAgICAgIG1hcmtDb21taXRTdG9wcGVkKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1ha2VFcnJvckluZm8oY29tcG9uZW50U3RhY2spIHtcbiAgICAgIGNvbXBvbmVudFN0YWNrID0geyBjb21wb25lbnRTdGFjazogY29tcG9uZW50U3RhY2sgfTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb21wb25lbnRTdGFjaywgXCJkaWdlc3RcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgJ1lvdSBhcmUgYWNjZXNzaW5nIFwiZGlnZXN0XCIgZnJvbSB0aGUgZXJyb3JJbmZvIG9iamVjdCBwYXNzZWQgdG8gb25SZWNvdmVyYWJsZUVycm9yLiBUaGlzIHByb3BlcnR5IGlzIG5vIGxvbmdlciBwcm92aWRlZCBhcyBwYXJ0IG9mIGVycm9ySW5mbyBidXQgY2FuIGJlIGFjY2Vzc2VkIGFzIGEgcHJvcGVydHkgb2YgdGhlIEVycm9yIGluc3RhbmNlIGl0c2VsZi4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29tcG9uZW50U3RhY2s7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGVhc2VSb290UG9vbGVkQ2FjaGUocm9vdCwgcmVtYWluaW5nTGFuZXMpIHtcbiAgICAgIDAgPT09IChyb290LnBvb2xlZENhY2hlTGFuZXMgJj0gcmVtYWluaW5nTGFuZXMpICYmXG4gICAgICAgICgocmVtYWluaW5nTGFuZXMgPSByb290LnBvb2xlZENhY2hlKSxcbiAgICAgICAgbnVsbCAhPSByZW1haW5pbmdMYW5lcyAmJlxuICAgICAgICAgICgocm9vdC5wb29sZWRDYWNoZSA9IG51bGwpLCByZWxlYXNlQ2FjaGUocmVtYWluaW5nTGFuZXMpKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoUGVuZGluZ0VmZmVjdHMod2FzRGVsYXllZENvbW1pdCkge1xuICAgICAgZmx1c2hNdXRhdGlvbkVmZmVjdHMoKTtcbiAgICAgIGZsdXNoTGF5b3V0RWZmZWN0cygpO1xuICAgICAgZmx1c2hTcGF3bmVkV29yaygpO1xuICAgICAgcmV0dXJuIGZsdXNoUGFzc2l2ZUVmZmVjdHMod2FzRGVsYXllZENvbW1pdCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKSB7XG4gICAgICBpZiAocGVuZGluZ0VmZmVjdHNTdGF0dXMgIT09IFBFTkRJTkdfUEFTU0lWRV9QSEFTRSkgcmV0dXJuICExO1xuICAgICAgdmFyIHJvb3QgPSBwZW5kaW5nRWZmZWN0c1Jvb3QsXG4gICAgICAgIHJlbWFpbmluZ0xhbmVzID0gcGVuZGluZ0VmZmVjdHNSZW1haW5pbmdMYW5lcztcbiAgICAgIHBlbmRpbmdFZmZlY3RzUmVtYWluaW5nTGFuZXMgPSAwO1xuICAgICAgdmFyIHJlbmRlclByaW9yaXR5ID0gbGFuZXNUb0V2ZW50UHJpb3JpdHkocGVuZGluZ0VmZmVjdHNMYW5lcyksXG4gICAgICAgIHByaW9yaXR5ID1cbiAgICAgICAgICAwID09PSBEZWZhdWx0RXZlbnRQcmlvcml0eSB8fCBEZWZhdWx0RXZlbnRQcmlvcml0eSA+IHJlbmRlclByaW9yaXR5XG4gICAgICAgICAgICA/IERlZmF1bHRFdmVudFByaW9yaXR5XG4gICAgICAgICAgICA6IHJlbmRlclByaW9yaXR5O1xuICAgICAgcmVuZGVyUHJpb3JpdHkgPSBSZWFjdFNoYXJlZEludGVybmFscy5UO1xuICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHkgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5wO1xuICAgICAgdHJ5IHtcbiAgICAgICAgUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHByaW9yaXR5O1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gbnVsbDtcbiAgICAgICAgcHJpb3JpdHkgPSBwZW5kaW5nUGFzc2l2ZVRyYW5zaXRpb25zO1xuICAgICAgICBwZW5kaW5nUGFzc2l2ZVRyYW5zaXRpb25zID0gbnVsbDtcbiAgICAgICAgdmFyIHJvb3QkanNjb21wJDAgPSBwZW5kaW5nRWZmZWN0c1Jvb3QsXG4gICAgICAgICAgbGFuZXMgPSBwZW5kaW5nRWZmZWN0c0xhbmVzO1xuICAgICAgICBwZW5kaW5nRWZmZWN0c1N0YXR1cyA9IE5PX1BFTkRJTkdfRUZGRUNUUztcbiAgICAgICAgcGVuZGluZ0ZpbmlzaGVkV29yayA9IHBlbmRpbmdFZmZlY3RzUm9vdCA9IG51bGw7XG4gICAgICAgIHBlbmRpbmdFZmZlY3RzTGFuZXMgPSAwO1xuICAgICAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KVxuICAgICAgICAgIHRocm93IEVycm9yKFwiQ2Fubm90IGZsdXNoIHBhc3NpdmUgZWZmZWN0cyB3aGlsZSBhbHJlYWR5IHJlbmRlcmluZy5cIik7XG4gICAgICAgIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9ICEwO1xuICAgICAgICBkaWRTY2hlZHVsZVVwZGF0ZUR1cmluZ1Bhc3NpdmVFZmZlY3RzID0gITE7XG4gICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgICAgICB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUGFzc2l2ZUVmZmVjdHNTdGFydGVkICYmXG4gICAgICAgICAgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUGFzc2l2ZUVmZmVjdHNTdGFydGVkKGxhbmVzKTtcbiAgICAgICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICAgICAgZXhlY3V0aW9uQ29udGV4dCB8PSBDb21taXRDb250ZXh0O1xuICAgICAgICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdCRqc2NvbXAkMC5jdXJyZW50O1xuICAgICAgICBjb21wb25lbnRFZmZlY3RTdGFydFRpbWUgPSAtMS4xO1xuICAgICAgICBjb21taXRQYXNzaXZlVW5tb3VudE9uRmliZXIoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgdmFyIGZpbmlzaGVkV29yayRqc2NvbXAkMCA9IHJvb3QkanNjb21wJDAuY3VycmVudDtcbiAgICAgICAgY29tcG9uZW50RWZmZWN0U3RhcnRUaW1lID0gLTEuMTtcbiAgICAgICAgY29tbWl0UGFzc2l2ZU1vdW50T25GaWJlcihcbiAgICAgICAgICByb290JGpzY29tcCQwLFxuICAgICAgICAgIGZpbmlzaGVkV29yayRqc2NvbXAkMCxcbiAgICAgICAgICBsYW5lcyxcbiAgICAgICAgICBwcmlvcml0eVxuICAgICAgICApO1xuICAgICAgICBudWxsICE9PSBpbmplY3RlZFByb2ZpbGluZ0hvb2tzICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1Bhc3NpdmVFZmZlY3RzU3RvcHBlZCAmJlxuICAgICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1Bhc3NpdmVFZmZlY3RzU3RvcHBlZCgpO1xuICAgICAgICBjb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYocm9vdCRqc2NvbXAkMCk7XG4gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgICAgICAgZmx1c2hTeW5jV29ya0Fjcm9zc1Jvb3RzX2ltcGwoMCwgITEpO1xuICAgICAgICBkaWRTY2hlZHVsZVVwZGF0ZUR1cmluZ1Bhc3NpdmVFZmZlY3RzXG4gICAgICAgICAgPyByb290JGpzY29tcCQwID09PSByb290V2l0aFBhc3NpdmVOZXN0ZWRVcGRhdGVzXG4gICAgICAgICAgICA/IG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCsrXG4gICAgICAgICAgICA6ICgobmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMCksXG4gICAgICAgICAgICAgIChyb290V2l0aFBhc3NpdmVOZXN0ZWRVcGRhdGVzID0gcm9vdCRqc2NvbXAkMCkpXG4gICAgICAgICAgOiAobmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMCk7XG4gICAgICAgIGRpZFNjaGVkdWxlVXBkYXRlRHVyaW5nUGFzc2l2ZUVmZmVjdHMgPSBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSAhMTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluamVjdGVkSG9vayAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluamVjdGVkSG9vay5vblBvc3RDb21taXRGaWJlclJvb3RcbiAgICAgICAgKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpbmplY3RlZEhvb2sub25Qb3N0Q29tbWl0RmliZXJSb290KHJlbmRlcmVySUQsIHJvb3QkanNjb21wJDApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgfHxcbiAgICAgICAgICAgICAgKChoYXNMb2dnZWRFcnJvciA9ICEwKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlJlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXNcIixcbiAgICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfVxuICAgICAgICB2YXIgc3RhdGVOb2RlID0gcm9vdCRqc2NvbXAkMC5jdXJyZW50LnN0YXRlTm9kZTtcbiAgICAgICAgc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgIHJldHVybiAhMDtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gcHJldmlvdXNQcmlvcml0eSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSByZW5kZXJQcmlvcml0eSksXG4gICAgICAgICAgcmVsZWFzZVJvb3RQb29sZWRDYWNoZShyb290LCByZW1haW5pbmdMYW5lcyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KHJvb3RGaWJlciwgc291cmNlRmliZXIsIGVycm9yKSB7XG4gICAgICBzb3VyY2VGaWJlciA9IGNyZWF0ZUNhcHR1cmVkVmFsdWVBdEZpYmVyKGVycm9yLCBzb3VyY2VGaWJlcik7XG4gICAgICBzb3VyY2VGaWJlciA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShyb290RmliZXIuc3RhdGVOb2RlLCBzb3VyY2VGaWJlciwgMik7XG4gICAgICByb290RmliZXIgPSBlbnF1ZXVlVXBkYXRlKHJvb3RGaWJlciwgc291cmNlRmliZXIsIDIpO1xuICAgICAgbnVsbCAhPT0gcm9vdEZpYmVyICYmXG4gICAgICAgIChtYXJrUm9vdFVwZGF0ZWQkMShyb290RmliZXIsIDIpLCBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdEZpYmVyKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKFxuICAgICAgc291cmNlRmliZXIsXG4gICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgZXJyb3JcbiAgICApIHtcbiAgICAgIGlzUnVubmluZ0luc2VydGlvbkVmZmVjdCA9ICExO1xuICAgICAgaWYgKDMgPT09IHNvdXJjZUZpYmVyLnRhZylcbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3Qoc291cmNlRmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcik7XG4gICAgICBlbHNlIHtcbiAgICAgICAgZm9yICg7IG51bGwgIT09IG5lYXJlc3RNb3VudGVkQW5jZXN0b3I7ICkge1xuICAgICAgICAgIGlmICgzID09PSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLnRhZykge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3QoXG4gICAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsXG4gICAgICAgICAgICAgIHNvdXJjZUZpYmVyLFxuICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKDEgPT09IG5lYXJlc3RNb3VudGVkQW5jZXN0b3IudGFnKSB7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICAgICAgICAgIHR5cGVvZiBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIHx8XG4gICAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCAmJlxuICAgICAgICAgICAgICAgIChudWxsID09PSBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCB8fFxuICAgICAgICAgICAgICAgICAgIWxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmhhcyhpbnN0YW5jZSkpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHNvdXJjZUZpYmVyID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZUF0RmliZXIoZXJyb3IsIHNvdXJjZUZpYmVyKTtcbiAgICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKDIpO1xuICAgICAgICAgICAgICBpbnN0YW5jZSA9IGVucXVldWVVcGRhdGUobmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IsIDIpO1xuICAgICAgICAgICAgICBudWxsICE9PSBpbnN0YW5jZSAmJlxuICAgICAgICAgICAgICAgIChpbml0aWFsaXplQ2xhc3NFcnJvclVwZGF0ZShcbiAgICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yLFxuICAgICAgICAgICAgICAgICAgc291cmNlRmliZXJcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIG1hcmtSb290VXBkYXRlZCQxKGluc3RhbmNlLCAyKSxcbiAgICAgICAgICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQoaW5zdGFuY2UpKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBuZWFyZXN0TW91bnRlZEFuY2VzdG9yID0gbmVhcmVzdE1vdW50ZWRBbmNlc3Rvci5yZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkludGVybmFsIFJlYWN0IGVycm9yOiBBdHRlbXB0ZWQgdG8gY2FwdHVyZSBhIGNvbW1pdCBwaGFzZSBlcnJvciBpbnNpZGUgYSBkZXRhY2hlZCB0cmVlLiBUaGlzIGluZGljYXRlcyBhIGJ1ZyBpbiBSZWFjdC4gUG90ZW50aWFsIGNhdXNlcyBpbmNsdWRlIGRlbGV0aW5nIHRoZSBzYW1lIGZpYmVyIG1vcmUgdGhhbiBvbmNlLCBjb21taXR0aW5nIGFuIGFscmVhZHktZmluaXNoZWQgdHJlZSwgb3IgYW4gaW5jb25zaXN0ZW50IHJldHVybiBwb2ludGVyLlxcblxcbkVycm9yIG1lc3NhZ2U6XFxuXFxuJXNcIixcbiAgICAgICAgICBlcnJvclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIGxhbmVzKSB7XG4gICAgICB2YXIgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGU7XG4gICAgICBpZiAobnVsbCA9PT0gcGluZ0NhY2hlKSB7XG4gICAgICAgIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xuICAgICAgICB2YXIgdGhyZWFkSURzID0gbmV3IFNldCgpO1xuICAgICAgICBwaW5nQ2FjaGUuc2V0KHdha2VhYmxlLCB0aHJlYWRJRHMpO1xuICAgICAgfSBlbHNlXG4gICAgICAgICh0aHJlYWRJRHMgPSBwaW5nQ2FjaGUuZ2V0KHdha2VhYmxlKSksXG4gICAgICAgICAgdm9pZCAwID09PSB0aHJlYWRJRHMgJiZcbiAgICAgICAgICAgICgodGhyZWFkSURzID0gbmV3IFNldCgpKSwgcGluZ0NhY2hlLnNldCh3YWtlYWJsZSwgdGhyZWFkSURzKSk7XG4gICAgICB0aHJlYWRJRHMuaGFzKGxhbmVzKSB8fFxuICAgICAgICAoKHdvcmtJblByb2dyZXNzUm9vdERpZEF0dGFjaFBpbmdMaXN0ZW5lciA9ICEwKSxcbiAgICAgICAgdGhyZWFkSURzLmFkZChsYW5lcyksXG4gICAgICAgIChwaW5nQ2FjaGUgPSBwaW5nU3VzcGVuZGVkUm9vdC5iaW5kKG51bGwsIHJvb3QsIHdha2VhYmxlLCBsYW5lcykpLFxuICAgICAgICBpc0RldlRvb2xzUHJlc2VudCAmJiByZXN0b3JlUGVuZGluZ1VwZGF0ZXJzKHJvb3QsIGxhbmVzKSxcbiAgICAgICAgd2FrZWFibGUudGhlbihwaW5nQ2FjaGUsIHBpbmdDYWNoZSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwaW5nU3VzcGVuZGVkUm9vdChyb290LCB3YWtlYWJsZSwgcGluZ2VkTGFuZXMpIHtcbiAgICAgIHZhciBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZTtcbiAgICAgIG51bGwgIT09IHBpbmdDYWNoZSAmJiBwaW5nQ2FjaGUuZGVsZXRlKHdha2VhYmxlKTtcbiAgICAgIHJvb3QucGluZ2VkTGFuZXMgfD0gcm9vdC5zdXNwZW5kZWRMYW5lcyAmIHBpbmdlZExhbmVzO1xuICAgICAgcm9vdC53YXJtTGFuZXMgJj0gfnBpbmdlZExhbmVzO1xuICAgICAgaXNDb25jdXJyZW50QWN0RW52aXJvbm1lbnQoKSAmJlxuICAgICAgICBudWxsID09PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQSBzdXNwZW5kZWQgcmVzb3VyY2UgZmluaXNoZWQgbG9hZGluZyBpbnNpZGUgYSB0ZXN0LCBidXQgdGhlIGV2ZW50IHdhcyBub3Qgd3JhcHBlZCBpbiBhY3QoLi4uKS5cXG5cXG5XaGVuIHRlc3RpbmcsIGNvZGUgdGhhdCByZXNvbHZlcyBzdXNwZW5kZWQgZGF0YSBzaG91bGQgYmUgd3JhcHBlZCBpbnRvIGFjdCguLi4pOlxcblxcbmFjdCgoKSA9PiB7XFxuICAvKiBmaW5pc2ggbG9hZGluZyBzdXNwZW5kZWQgZGF0YSAqL1xcbn0pO1xcbi8qIGFzc2VydCBvbiB0aGUgb3V0cHV0ICovXFxuXFxuVGhpcyBlbnN1cmVzIHRoYXQgeW91J3JlIHRlc3RpbmcgdGhlIGJlaGF2aW9yIHRoZSB1c2VyIHdvdWxkIHNlZSBpbiB0aGUgYnJvd3Nlci4gTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0LmRldi9saW5rL3dyYXAtdGVzdHMtd2l0aC1hY3RcIlxuICAgICAgICApO1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290ID09PSByb290ICYmXG4gICAgICAgICh3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmIHBpbmdlZExhbmVzKSA9PT0gcGluZ2VkTGFuZXMgJiZcbiAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgfHxcbiAgICAgICAgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWQgJiZcbiAgICAgICAgICAod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgJiA2MjkxNDU2MCkgPT09XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAmJlxuICAgICAgICAgIG5vdyQxKCkgLSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lIDwgRkFMTEJBQ0tfVEhST1RUTEVfTVMpXG4gICAgICAgICAgPyAoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpID09PSBOb0NvbnRleHQgJiZcbiAgICAgICAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIDApXG4gICAgICAgICAgOiAod29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgfD0gcGluZ2VkTGFuZXMpLFxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJldHJ5TGFuZXMgPT09IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICYmXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmV0cnlMYW5lcyA9IDApKTtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSkge1xuICAgICAgMCA9PT0gcmV0cnlMYW5lICYmIChyZXRyeUxhbmUgPSBjbGFpbU5leHRSZXRyeUxhbmUoKSk7XG4gICAgICBib3VuZGFyeUZpYmVyID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG4gICAgICBudWxsICE9PSBib3VuZGFyeUZpYmVyICYmXG4gICAgICAgIChtYXJrUm9vdFVwZGF0ZWQkMShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpLFxuICAgICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQoYm91bmRhcnlGaWJlcikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXRyeURlaHlkcmF0ZWRTdXNwZW5zZUJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIpIHtcbiAgICAgIHZhciBzdXNwZW5zZVN0YXRlID0gYm91bmRhcnlGaWJlci5tZW1vaXplZFN0YXRlLFxuICAgICAgICByZXRyeUxhbmUgPSAwO1xuICAgICAgbnVsbCAhPT0gc3VzcGVuc2VTdGF0ZSAmJiAocmV0cnlMYW5lID0gc3VzcGVuc2VTdGF0ZS5yZXRyeUxhbmUpO1xuICAgICAgcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVSZXRyeVdha2VhYmxlKGJvdW5kYXJ5RmliZXIsIHdha2VhYmxlKSB7XG4gICAgICB2YXIgcmV0cnlMYW5lID0gMDtcbiAgICAgIHN3aXRjaCAoYm91bmRhcnlGaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICB2YXIgcmV0cnlDYWNoZSA9IGJvdW5kYXJ5RmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgIHZhciBzdXNwZW5zZVN0YXRlID0gYm91bmRhcnlGaWJlci5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgIG51bGwgIT09IHN1c3BlbnNlU3RhdGUgJiYgKHJldHJ5TGFuZSA9IHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICByZXRyeUNhY2hlID0gYm91bmRhcnlGaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgcmV0cnlDYWNoZSA9IGJvdW5kYXJ5RmliZXIuc3RhdGVOb2RlLl9yZXRyeUNhY2hlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJQaW5nZWQgdW5rbm93biBzdXNwZW5zZSBib3VuZGFyeSB0eXBlLiBUaGlzIGlzIHByb2JhYmx5IGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG51bGwgIT09IHJldHJ5Q2FjaGUgJiYgcmV0cnlDYWNoZS5kZWxldGUod2FrZWFibGUpO1xuICAgICAgcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5VHJhdmVyc2VBbmREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYoXG4gICAgICByb290JGpzY29tcCQwLFxuICAgICAgcGFyZW50RmliZXIsXG4gICAgICBpc0luU3RyaWN0TW9kZVxuICAgICkge1xuICAgICAgaWYgKDAgIT09IChwYXJlbnRGaWJlci5zdWJ0cmVlRmxhZ3MgJiA2NzExNzA1NikpXG4gICAgICAgIGZvciAocGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5jaGlsZDsgbnVsbCAhPT0gcGFyZW50RmliZXI7ICkge1xuICAgICAgICAgIHZhciByb290ID0gcm9vdCRqc2NvbXAkMCxcbiAgICAgICAgICAgIGZpYmVyID0gcGFyZW50RmliZXIsXG4gICAgICAgICAgICBpc1N0cmljdE1vZGVGaWJlciA9IGZpYmVyLnR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG4gICAgICAgICAgaXNTdHJpY3RNb2RlRmliZXIgPSBpc0luU3RyaWN0TW9kZSB8fCBpc1N0cmljdE1vZGVGaWJlcjtcbiAgICAgICAgICAyMiAhPT0gZmliZXIudGFnXG4gICAgICAgICAgICA/IGZpYmVyLmZsYWdzICYgNjcxMDg4NjRcbiAgICAgICAgICAgICAgPyBpc1N0cmljdE1vZGVGaWJlciAmJlxuICAgICAgICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICAgICAgICBkb3VibGVJbnZva2VFZmZlY3RzT25GaWJlcixcbiAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICBmaWJlclxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiByZWN1cnNpdmVseVRyYXZlcnNlQW5kRG91YmxlSW52b2tlRWZmZWN0c0luREVWKFxuICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgICAgICAgaXNTdHJpY3RNb2RlRmliZXJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGwgPT09IGZpYmVyLm1lbW9pemVkU3RhdGUgJiZcbiAgICAgICAgICAgICAgKGlzU3RyaWN0TW9kZUZpYmVyICYmIGZpYmVyLmZsYWdzICYgODE5MlxuICAgICAgICAgICAgICAgID8gcnVuV2l0aEZpYmVySW5ERVYoXG4gICAgICAgICAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgICAgICAgICBkb3VibGVJbnZva2VFZmZlY3RzT25GaWJlcixcbiAgICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgICAgZmliZXJcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IGZpYmVyLnN1YnRyZWVGbGFncyAmIDY3MTA4ODY0ICYmXG4gICAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihcbiAgICAgICAgICAgICAgICAgICAgZmliZXIsXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VHJhdmVyc2VBbmREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYsXG4gICAgICAgICAgICAgICAgICAgIHJvb3QsXG4gICAgICAgICAgICAgICAgICAgIGZpYmVyLFxuICAgICAgICAgICAgICAgICAgICBpc1N0cmljdE1vZGVGaWJlclxuICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgcGFyZW50RmliZXIgPSBwYXJlbnRGaWJlci5zaWJsaW5nO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRvdWJsZUludm9rZUVmZmVjdHNPbkZpYmVyKHJvb3QsIGZpYmVyKSB7XG4gICAgICBzZXRJc1N0cmljdE1vZGVGb3JEZXZ0b29scyghMCk7XG4gICAgICB0cnkge1xuICAgICAgICBkaXNhcHBlYXJMYXlvdXRFZmZlY3RzKGZpYmVyKSxcbiAgICAgICAgICBkaXNjb25uZWN0UGFzc2l2ZUVmZmVjdChmaWJlciksXG4gICAgICAgICAgcmVhcHBlYXJMYXlvdXRFZmZlY3RzKHJvb3QsIGZpYmVyLmFsdGVybmF0ZSwgZmliZXIsICExKSxcbiAgICAgICAgICByZWNvbm5lY3RQYXNzaXZlRWZmZWN0cyhyb290LCBmaWJlciwgMCwgbnVsbCwgITEsIDApO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0SXNTdHJpY3RNb2RlRm9yRGV2dG9vbHMoITEpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXREb3VibGVJbnZva2VFZmZlY3RzSW5ERVYocm9vdCkge1xuICAgICAgdmFyIGRvdWJsZUludm9rZUVmZmVjdHMgPSAhMDtcbiAgICAgIHJvb3QuY3VycmVudC5tb2RlICYgKFN0cmljdExlZ2FjeU1vZGUgfCBTdHJpY3RFZmZlY3RzTW9kZSkgfHxcbiAgICAgICAgKGRvdWJsZUludm9rZUVmZmVjdHMgPSAhMSk7XG4gICAgICByZWN1cnNpdmVseVRyYXZlcnNlQW5kRG91YmxlSW52b2tlRWZmZWN0c0luREVWKFxuICAgICAgICByb290LFxuICAgICAgICByb290LmN1cnJlbnQsXG4gICAgICAgIGRvdWJsZUludm9rZUVmZmVjdHNcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoZmliZXIpIHtcbiAgICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpID09PSBOb0NvbnRleHQpIHtcbiAgICAgICAgdmFyIHRhZyA9IGZpYmVyLnRhZztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIDMgPT09IHRhZyB8fFxuICAgICAgICAgIDEgPT09IHRhZyB8fFxuICAgICAgICAgIDAgPT09IHRhZyB8fFxuICAgICAgICAgIDExID09PSB0YWcgfHxcbiAgICAgICAgICAxNCA9PT0gdGFnIHx8XG4gICAgICAgICAgMTUgPT09IHRhZ1xuICAgICAgICApIHtcbiAgICAgICAgICB0YWcgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIlJlYWN0Q29tcG9uZW50XCI7XG4gICAgICAgICAgaWYgKG51bGwgIT09IGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50Lmhhcyh0YWcpKSByZXR1cm47XG4gICAgICAgICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50LmFkZCh0YWcpO1xuICAgICAgICAgIH0gZWxzZSBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50ID0gbmV3IFNldChbdGFnXSk7XG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoZmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiQ2FuJ3QgcGVyZm9ybSBhIFJlYWN0IHN0YXRlIHVwZGF0ZSBvbiBhIGNvbXBvbmVudCB0aGF0IGhhc24ndCBtb3VudGVkIHlldC4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB5b3UgaGF2ZSBhIHNpZGUtZWZmZWN0IGluIHlvdXIgcmVuZGVyIGZ1bmN0aW9uIHRoYXQgYXN5bmNocm9ub3VzbHkgdHJpZXMgdG8gdXBkYXRlIHRoZSBjb21wb25lbnQuIE1vdmUgdGhpcyB3b3JrIHRvIHVzZUVmZmVjdCBpbnN0ZWFkLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc3RvcmVQZW5kaW5nVXBkYXRlcnMocm9vdCwgbGFuZXMpIHtcbiAgICAgIGlzRGV2VG9vbHNQcmVzZW50ICYmXG4gICAgICAgIHJvb3QubWVtb2l6ZWRVcGRhdGVycy5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlZHVsaW5nRmliZXIpIHtcbiAgICAgICAgICBhZGRGaWJlclRvTGFuZXNNYXAocm9vdCwgc2NoZWR1bGluZ0ZpYmVyLCBsYW5lcyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZUNhbGxiYWNrJDEocHJpb3JpdHlMZXZlbCwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBhY3RRdWV1ZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlO1xuICAgICAgcmV0dXJuIG51bGwgIT09IGFjdFF1ZXVlXG4gICAgICAgID8gKGFjdFF1ZXVlLnB1c2goY2FsbGJhY2spLCBmYWtlQWN0Q2FsbGJhY2tOb2RlJDEpXG4gICAgICAgIDogc2NoZWR1bGVDYWxsYmFjayQzKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybklmVXBkYXRlc05vdFdyYXBwZWRXaXRoQWN0REVWKGZpYmVyKSB7XG4gICAgICBpc0NvbmN1cnJlbnRBY3RFbnZpcm9ubWVudCgpICYmXG4gICAgICAgIG51bGwgPT09IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlICYmXG4gICAgICAgIHJ1bldpdGhGaWJlckluREVWKGZpYmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiQW4gdXBkYXRlIHRvICVzIGluc2lkZSBhIHRlc3Qgd2FzIG5vdCB3cmFwcGVkIGluIGFjdCguLi4pLlxcblxcbldoZW4gdGVzdGluZywgY29kZSB0aGF0IGNhdXNlcyBSZWFjdCBzdGF0ZSB1cGRhdGVzIHNob3VsZCBiZSB3cmFwcGVkIGludG8gYWN0KC4uLik6XFxuXFxuYWN0KCgpID0+IHtcXG4gIC8qIGZpcmUgZXZlbnRzIHRoYXQgdXBkYXRlIHN0YXRlICovXFxufSk7XFxuLyogYXNzZXJ0IG9uIHRoZSBvdXRwdXQgKi9cXG5cXG5UaGlzIGVuc3VyZXMgdGhhdCB5b3UncmUgdGVzdGluZyB0aGUgYmVoYXZpb3IgdGhlIHVzZXIgd291bGQgc2VlIGluIHRoZSBicm93c2VyLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvd3JhcC10ZXN0cy13aXRoLWFjdFwiLFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcilcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QpIHtcbiAgICAgIHJvb3QgIT09IGxhc3RTY2hlZHVsZWRSb290ICYmXG4gICAgICAgIG51bGwgPT09IHJvb3QubmV4dCAmJlxuICAgICAgICAobnVsbCA9PT0gbGFzdFNjaGVkdWxlZFJvb3RcbiAgICAgICAgICA/IChmaXJzdFNjaGVkdWxlZFJvb3QgPSBsYXN0U2NoZWR1bGVkUm9vdCA9IHJvb3QpXG4gICAgICAgICAgOiAobGFzdFNjaGVkdWxlZFJvb3QgPSBsYXN0U2NoZWR1bGVkUm9vdC5uZXh0ID0gcm9vdCkpO1xuICAgICAgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrID0gITA7XG4gICAgICBudWxsICE9PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZVxuICAgICAgICA/IGRpZFNjaGVkdWxlTWljcm90YXNrX2FjdCB8fFxuICAgICAgICAgICgoZGlkU2NoZWR1bGVNaWNyb3Rhc2tfYWN0ID0gITApLCBzY2hlZHVsZUltbWVkaWF0ZVJvb3RTY2hlZHVsZVRhc2soKSlcbiAgICAgICAgOiBkaWRTY2hlZHVsZU1pY3JvdGFzayB8fFxuICAgICAgICAgICgoZGlkU2NoZWR1bGVNaWNyb3Rhc2sgPSAhMCksIHNjaGVkdWxlSW1tZWRpYXRlUm9vdFNjaGVkdWxlVGFzaygpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmx1c2hTeW5jV29ya0Fjcm9zc1Jvb3RzX2ltcGwoc3luY1RyYW5zaXRpb25MYW5lcywgb25seUxlZ2FjeSkge1xuICAgICAgaWYgKCFpc0ZsdXNoaW5nV29yayAmJiBtaWdodEhhdmVQZW5kaW5nU3luY1dvcmspIHtcbiAgICAgICAgaXNGbHVzaGluZ1dvcmsgPSAhMDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIHZhciBkaWRQZXJmb3JtU29tZVdvcmsgPSAhMTtcbiAgICAgICAgICBmb3IgKHZhciByb290ID0gZmlyc3RTY2hlZHVsZWRSb290OyBudWxsICE9PSByb290OyApIHtcbiAgICAgICAgICAgIGlmICghb25seUxlZ2FjeSlcbiAgICAgICAgICAgICAgaWYgKDAgIT09IHN5bmNUcmFuc2l0aW9uTGFuZXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gICAgICAgICAgICAgICAgaWYgKDAgPT09IHBlbmRpbmdMYW5lcykgdmFyIG5leHRMYW5lcyA9IDA7XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzLFxuICAgICAgICAgICAgICAgICAgICBwaW5nZWRMYW5lcyA9IHJvb3QucGluZ2VkTGFuZXM7XG4gICAgICAgICAgICAgICAgICBuZXh0TGFuZXMgPVxuICAgICAgICAgICAgICAgICAgICAoMSA8PCAoMzEgLSBjbHozMig0MiB8IHN5bmNUcmFuc2l0aW9uTGFuZXMpICsgMSkpIC0gMTtcbiAgICAgICAgICAgICAgICAgIG5leHRMYW5lcyAmPSBwZW5kaW5nTGFuZXMgJiB+KHN1c3BlbmRlZExhbmVzICYgfnBpbmdlZExhbmVzKTtcbiAgICAgICAgICAgICAgICAgIG5leHRMYW5lcyA9XG4gICAgICAgICAgICAgICAgICAgIG5leHRMYW5lcyAmIDIwMTMyNjc0MVxuICAgICAgICAgICAgICAgICAgICAgID8gKG5leHRMYW5lcyAmIDIwMTMyNjc0MSkgfCAxXG4gICAgICAgICAgICAgICAgICAgICAgOiBuZXh0TGFuZXNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV4dExhbmVzIHwgMlxuICAgICAgICAgICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAwICE9PSBuZXh0TGFuZXMgJiZcbiAgICAgICAgICAgICAgICAgICgoZGlkUGVyZm9ybVNvbWVXb3JrID0gITApLFxuICAgICAgICAgICAgICAgICAgcGVyZm9ybVN5bmNXb3JrT25Sb290KHJvb3QsIG5leHRMYW5lcykpO1xuICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAobmV4dExhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpLFxuICAgICAgICAgICAgICAgICAgKG5leHRMYW5lcyA9IGdldE5leHRMYW5lcyhcbiAgICAgICAgICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgICAgICAgICAgcm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290ID8gbmV4dExhbmVzIDogMCxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgcm9vdC50aW1lb3V0SGFuZGxlICE9PSBub1RpbWVvdXRcbiAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgMCA9PT0gKG5leHRMYW5lcyAmIDMpIHx8XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrSWZSb290SXNQcmVyZW5kZXJpbmcocm9vdCwgbmV4dExhbmVzKSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGRpZFBlcmZvcm1Tb21lV29yayA9ICEwKSxcbiAgICAgICAgICAgICAgICAgICAgcGVyZm9ybVN5bmNXb3JrT25Sb290KHJvb3QsIG5leHRMYW5lcykpO1xuICAgICAgICAgICAgcm9vdCA9IHJvb3QubmV4dDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGRpZFBlcmZvcm1Tb21lV29yayk7XG4gICAgICAgIGlzRmx1c2hpbmdXb3JrID0gITE7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSb290U2NoZWR1bGVJbkltbWVkaWF0ZVRhc2soKSB7XG4gICAgICBwcm9jZXNzUm9vdFNjaGVkdWxlSW5NaWNyb3Rhc2soKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc1Jvb3RTY2hlZHVsZUluTWljcm90YXNrKCkge1xuICAgICAgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrID1cbiAgICAgICAgZGlkU2NoZWR1bGVNaWNyb3Rhc2tfYWN0ID1cbiAgICAgICAgZGlkU2NoZWR1bGVNaWNyb3Rhc2sgPVxuICAgICAgICAgICExO1xuICAgICAgdmFyIHN5bmNUcmFuc2l0aW9uTGFuZXMgPSAwO1xuICAgICAgMCAhPT0gY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgJiZcbiAgICAgICAgc2hvdWxkQXR0ZW1wdEVhZ2VyVHJhbnNpdGlvbigpICYmXG4gICAgICAgIChzeW5jVHJhbnNpdGlvbkxhbmVzID0gY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUpO1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gbm93JDEoKSwgcHJldiA9IG51bGwsIHJvb3QgPSBmaXJzdFNjaGVkdWxlZFJvb3Q7XG4gICAgICAgIG51bGwgIT09IHJvb3Q7XG5cbiAgICAgICkge1xuICAgICAgICB2YXIgbmV4dCA9IHJvb3QubmV4dCxcbiAgICAgICAgICBuZXh0TGFuZXMgPSBzY2hlZHVsZVRhc2tGb3JSb290RHVyaW5nTWljcm90YXNrKHJvb3QsIGN1cnJlbnRUaW1lKTtcbiAgICAgICAgaWYgKDAgPT09IG5leHRMYW5lcylcbiAgICAgICAgICAocm9vdC5uZXh0ID0gbnVsbCksXG4gICAgICAgICAgICBudWxsID09PSBwcmV2ID8gKGZpcnN0U2NoZWR1bGVkUm9vdCA9IG5leHQpIDogKHByZXYubmV4dCA9IG5leHQpLFxuICAgICAgICAgICAgbnVsbCA9PT0gbmV4dCAmJiAobGFzdFNjaGVkdWxlZFJvb3QgPSBwcmV2KTtcbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgKChwcmV2ID0gcm9vdCksIDAgIT09IHN5bmNUcmFuc2l0aW9uTGFuZXMgfHwgMCAhPT0gKG5leHRMYW5lcyAmIDMpKVxuICAgICAgICApXG4gICAgICAgICAgbWlnaHRIYXZlUGVuZGluZ1N5bmNXb3JrID0gITA7XG4gICAgICAgIHJvb3QgPSBuZXh0O1xuICAgICAgfVxuICAgICAgKHBlbmRpbmdFZmZlY3RzU3RhdHVzICE9PSBOT19QRU5ESU5HX0VGRkVDVFMgJiZcbiAgICAgICAgcGVuZGluZ0VmZmVjdHNTdGF0dXMgIT09IFBFTkRJTkdfUEFTU0lWRV9QSEFTRSkgfHxcbiAgICAgICAgZmx1c2hTeW5jV29ya0Fjcm9zc1Jvb3RzX2ltcGwoc3luY1RyYW5zaXRpb25MYW5lcywgITEpO1xuICAgICAgMCAhPT0gY3VycmVudEV2ZW50VHJhbnNpdGlvbkxhbmUgJiYgKGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lID0gMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlVGFza0ZvclJvb3REdXJpbmdNaWNyb3Rhc2socm9vdCwgY3VycmVudFRpbWUpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXMsXG4gICAgICAgICAgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzLFxuICAgICAgICAgIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzLFxuICAgICAgICAgIGxhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXMgJiAtNjI5MTQ1NjE7XG4gICAgICAgIDAgPCBsYW5lcztcblxuICAgICAgKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDMxIC0gY2x6MzIobGFuZXMpLFxuICAgICAgICAgIGxhbmUgPSAxIDw8IGluZGV4LFxuICAgICAgICAgIGV4cGlyYXRpb25UaW1lID0gZXhwaXJhdGlvblRpbWVzW2luZGV4XTtcbiAgICAgICAgaWYgKC0xID09PSBleHBpcmF0aW9uVGltZSkge1xuICAgICAgICAgIGlmICgwID09PSAobGFuZSAmIHN1c3BlbmRlZExhbmVzKSB8fCAwICE9PSAobGFuZSAmIHBpbmdlZExhbmVzKSlcbiAgICAgICAgICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpO1xuICAgICAgICB9IGVsc2UgZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWUgJiYgKHJvb3QuZXhwaXJlZExhbmVzIHw9IGxhbmUpO1xuICAgICAgICBsYW5lcyAmPSB+bGFuZTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRUaW1lID0gd29ya0luUHJvZ3Jlc3NSb290O1xuICAgICAgc3VzcGVuZGVkTGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcztcbiAgICAgIHN1c3BlbmRlZExhbmVzID0gZ2V0TmV4dExhbmVzKFxuICAgICAgICByb290LFxuICAgICAgICByb290ID09PSBjdXJyZW50VGltZSA/IHN1c3BlbmRlZExhbmVzIDogMCxcbiAgICAgICAgbnVsbCAhPT0gcm9vdC5jYW5jZWxQZW5kaW5nQ29tbWl0IHx8IHJvb3QudGltZW91dEhhbmRsZSAhPT0gbm9UaW1lb3V0XG4gICAgICApO1xuICAgICAgcGluZ2VkTGFuZXMgPSByb290LmNhbGxiYWNrTm9kZTtcbiAgICAgIGlmIChcbiAgICAgICAgMCA9PT0gc3VzcGVuZGVkTGFuZXMgfHxcbiAgICAgICAgKHJvb3QgPT09IGN1cnJlbnRUaW1lICYmXG4gICAgICAgICAgKHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkRhdGEgfHxcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID09PSBTdXNwZW5kZWRPbkFjdGlvbikpIHx8XG4gICAgICAgIG51bGwgIT09IHJvb3QuY2FuY2VsUGVuZGluZ0NvbW1pdFxuICAgICAgKVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG51bGwgIT09IHBpbmdlZExhbmVzICYmIGNhbmNlbENhbGxiYWNrKHBpbmdlZExhbmVzKSxcbiAgICAgICAgICAocm9vdC5jYWxsYmFja05vZGUgPSBudWxsKSxcbiAgICAgICAgICAocm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gMClcbiAgICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgMCA9PT0gKHN1c3BlbmRlZExhbmVzICYgMykgfHxcbiAgICAgICAgY2hlY2tJZlJvb3RJc1ByZXJlbmRlcmluZyhyb290LCBzdXNwZW5kZWRMYW5lcylcbiAgICAgICkge1xuICAgICAgICBjdXJyZW50VGltZSA9IHN1c3BlbmRlZExhbmVzICYgLXN1c3BlbmRlZExhbmVzO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY3VycmVudFRpbWUgIT09IHJvb3QuY2FsbGJhY2tQcmlvcml0eSB8fFxuICAgICAgICAgIChudWxsICE9PSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSAmJlxuICAgICAgICAgICAgcGluZ2VkTGFuZXMgIT09IGZha2VBY3RDYWxsYmFja05vZGUpXG4gICAgICAgIClcbiAgICAgICAgICBjYW5jZWxDYWxsYmFjayhwaW5nZWRMYW5lcyk7XG4gICAgICAgIGVsc2UgcmV0dXJuIGN1cnJlbnRUaW1lO1xuICAgICAgICBzd2l0Y2ggKGxhbmVzVG9FdmVudFByaW9yaXR5KHN1c3BlbmRlZExhbmVzKSkge1xuICAgICAgICAgIGNhc2UgRGlzY3JldGVFdmVudFByaW9yaXR5OlxuICAgICAgICAgIGNhc2UgQ29udGludW91c0V2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzdXNwZW5kZWRMYW5lcyA9IFVzZXJCbG9ja2luZ1ByaW9yaXR5O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBEZWZhdWx0RXZlbnRQcmlvcml0eTpcbiAgICAgICAgICAgIHN1c3BlbmRlZExhbmVzID0gTm9ybWFsUHJpb3JpdHkkMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgSWRsZUV2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgICBzdXNwZW5kZWRMYW5lcyA9IElkbGVQcmlvcml0eTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBzdXNwZW5kZWRMYW5lcyA9IE5vcm1hbFByaW9yaXR5JDE7XG4gICAgICAgIH1cbiAgICAgICAgcGluZ2VkTGFuZXMgPSBwZXJmb3JtV29ya09uUm9vdFZpYVNjaGVkdWxlclRhc2suYmluZChudWxsLCByb290KTtcbiAgICAgICAgbnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWVcbiAgICAgICAgICA/IChSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZS5wdXNoKHBpbmdlZExhbmVzKSxcbiAgICAgICAgICAgIChzdXNwZW5kZWRMYW5lcyA9IGZha2VBY3RDYWxsYmFja05vZGUpKVxuICAgICAgICAgIDogKHN1c3BlbmRlZExhbmVzID0gc2NoZWR1bGVDYWxsYmFjayQzKHN1c3BlbmRlZExhbmVzLCBwaW5nZWRMYW5lcykpO1xuICAgICAgICByb290LmNhbGxiYWNrUHJpb3JpdHkgPSBjdXJyZW50VGltZTtcbiAgICAgICAgcm9vdC5jYWxsYmFja05vZGUgPSBzdXNwZW5kZWRMYW5lcztcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lO1xuICAgICAgfVxuICAgICAgbnVsbCAhPT0gcGluZ2VkTGFuZXMgJiYgY2FuY2VsQ2FsbGJhY2socGluZ2VkTGFuZXMpO1xuICAgICAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gMjtcbiAgICAgIHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwZXJmb3JtV29ya09uUm9vdFZpYVNjaGVkdWxlclRhc2socm9vdCwgZGlkVGltZW91dCkge1xuICAgICAgbmVzdGVkVXBkYXRlU2NoZWR1bGVkID0gY3VycmVudFVwZGF0ZUlzTmVzdGVkID0gITE7XG4gICAgICBpZiAoXG4gICAgICAgIHBlbmRpbmdFZmZlY3RzU3RhdHVzICE9PSBOT19QRU5ESU5HX0VGRkVDVFMgJiZcbiAgICAgICAgcGVuZGluZ0VmZmVjdHNTdGF0dXMgIT09IFBFTkRJTkdfUEFTU0lWRV9QSEFTRVxuICAgICAgKVxuICAgICAgICByZXR1cm4gKHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbCksIChyb290LmNhbGxiYWNrUHJpb3JpdHkgPSAwKSwgbnVsbDtcbiAgICAgIHZhciBvcmlnaW5hbENhbGxiYWNrTm9kZSA9IHJvb3QuY2FsbGJhY2tOb2RlO1xuICAgICAgaWYgKGZsdXNoUGVuZGluZ0VmZmVjdHMoITApICYmIHJvb3QuY2FsbGJhY2tOb2RlICE9PSBvcmlnaW5hbENhbGxiYWNrTm9kZSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMkanNjb21wJDAgPVxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcztcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJGpzY29tcCQwID0gZ2V0TmV4dExhbmVzKFxuICAgICAgICByb290LFxuICAgICAgICByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3RcbiAgICAgICAgICA/IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJGpzY29tcCQwXG4gICAgICAgICAgOiAwLFxuICAgICAgICBudWxsICE9PSByb290LmNhbmNlbFBlbmRpbmdDb21taXQgfHwgcm9vdC50aW1lb3V0SGFuZGxlICE9PSBub1RpbWVvdXRcbiAgICAgICk7XG4gICAgICBpZiAoMCA9PT0gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMkanNjb21wJDApIHJldHVybiBudWxsO1xuICAgICAgcGVyZm9ybVdvcmtPblJvb3QoXG4gICAgICAgIHJvb3QsXG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzJGpzY29tcCQwLFxuICAgICAgICBkaWRUaW1lb3V0XG4gICAgICApO1xuICAgICAgc2NoZWR1bGVUYXNrRm9yUm9vdER1cmluZ01pY3JvdGFzayhyb290LCBub3ckMSgpKTtcbiAgICAgIHJldHVybiBudWxsICE9IHJvb3QuY2FsbGJhY2tOb2RlICYmXG4gICAgICAgIHJvb3QuY2FsbGJhY2tOb2RlID09PSBvcmlnaW5hbENhbGxiYWNrTm9kZVxuICAgICAgICA/IHBlcmZvcm1Xb3JrT25Sb290VmlhU2NoZWR1bGVyVGFzay5iaW5kKG51bGwsIHJvb3QpXG4gICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGVyZm9ybVN5bmNXb3JrT25Sb290KHJvb3QsIGxhbmVzKSB7XG4gICAgICBpZiAoZmx1c2hQZW5kaW5nRWZmZWN0cygpKSByZXR1cm4gbnVsbDtcbiAgICAgIGN1cnJlbnRVcGRhdGVJc05lc3RlZCA9IG5lc3RlZFVwZGF0ZVNjaGVkdWxlZDtcbiAgICAgIG5lc3RlZFVwZGF0ZVNjaGVkdWxlZCA9ICExO1xuICAgICAgcGVyZm9ybVdvcmtPblJvb3Qocm9vdCwgbGFuZXMsICEwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FuY2VsQ2FsbGJhY2soY2FsbGJhY2tOb2RlKSB7XG4gICAgICBjYWxsYmFja05vZGUgIT09IGZha2VBY3RDYWxsYmFja05vZGUgJiZcbiAgICAgICAgbnVsbCAhPT0gY2FsbGJhY2tOb2RlICYmXG4gICAgICAgIGNhbmNlbENhbGxiYWNrJDEoY2FsbGJhY2tOb2RlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2NoZWR1bGVJbW1lZGlhdGVSb290U2NoZWR1bGVUYXNrKCkge1xuICAgICAgbnVsbCAhPT0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUgJiZcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcHJvY2Vzc1Jvb3RTY2hlZHVsZUluTWljcm90YXNrKCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHRcbiAgICAgICAgICA/IHNjaGVkdWxlQ2FsbGJhY2skMyhcbiAgICAgICAgICAgICAgSW1tZWRpYXRlUHJpb3JpdHksXG4gICAgICAgICAgICAgIHByb2Nlc3NSb290U2NoZWR1bGVJbkltbWVkaWF0ZVRhc2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IHByb2Nlc3NSb290U2NoZWR1bGVJbk1pY3JvdGFzaygpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcXVlc3RUcmFuc2l0aW9uTGFuZSgpIHtcbiAgICAgIGlmICgwID09PSBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSkge1xuICAgICAgICB2YXIgYWN0aW9uU2NvcGVMYW5lID0gY3VycmVudEVudGFuZ2xlZExhbmU7XG4gICAgICAgIGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lID1cbiAgICAgICAgICAwICE9PSBhY3Rpb25TY29wZUxhbmUgPyBhY3Rpb25TY29wZUxhbmUgOiBjbGFpbU5leHRUcmFuc2l0aW9uTGFuZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2VyY2VGb3JtQWN0aW9uUHJvcChhY3Rpb25Qcm9wKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgPT0gYWN0aW9uUHJvcCB8fFxuICAgICAgICBcInN5bWJvbFwiID09PSB0eXBlb2YgYWN0aW9uUHJvcCB8fFxuICAgICAgICBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIGFjdGlvblByb3BcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYWN0aW9uUHJvcCkgcmV0dXJuIGFjdGlvblByb3A7XG4gICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKGFjdGlvblByb3AsIFwiYWN0aW9uXCIpO1xuICAgICAgcmV0dXJuIHNhbml0aXplVVJMKFwiXCIgKyBhY3Rpb25Qcm9wKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRm9ybURhdGFXaXRoU3VibWl0dGVyKGZvcm0sIHN1Ym1pdHRlcikge1xuICAgICAgdmFyIHRlbXAgPSBzdWJtaXR0ZXIub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICB0ZW1wLm5hbWUgPSBzdWJtaXR0ZXIubmFtZTtcbiAgICAgIHRlbXAudmFsdWUgPSBzdWJtaXR0ZXIudmFsdWU7XG4gICAgICBmb3JtLmlkICYmIHRlbXAuc2V0QXR0cmlidXRlKFwiZm9ybVwiLCBmb3JtLmlkKTtcbiAgICAgIHN1Ym1pdHRlci5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZW1wLCBzdWJtaXR0ZXIpO1xuICAgICAgZm9ybSA9IG5ldyBGb3JtRGF0YShmb3JtKTtcbiAgICAgIHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZW1wKTtcbiAgICAgIHJldHVybiBmb3JtO1xuICAgIH1cbiAgICBmdW5jdGlvbiBleHRyYWN0RXZlbnRzJDEoXG4gICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgbWF5YmVUYXJnZXRJbnN0LFxuICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICBcInN1Ym1pdFwiID09PSBkb21FdmVudE5hbWUgJiZcbiAgICAgICAgbWF5YmVUYXJnZXRJbnN0ICYmXG4gICAgICAgIG1heWJlVGFyZ2V0SW5zdC5zdGF0ZU5vZGUgPT09IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICApIHtcbiAgICAgICAgdmFyIGFjdGlvbiA9IGNvZXJjZUZvcm1BY3Rpb25Qcm9wKFxuICAgICAgICAgICAgKG5hdGl2ZUV2ZW50VGFyZ2V0W2ludGVybmFsUHJvcHNLZXldIHx8IG51bGwpLmFjdGlvblxuICAgICAgICAgICksXG4gICAgICAgICAgc3VibWl0dGVyID0gbmF0aXZlRXZlbnQuc3VibWl0dGVyO1xuICAgICAgICBzdWJtaXR0ZXIgJiZcbiAgICAgICAgICAoKGRvbUV2ZW50TmFtZSA9IChkb21FdmVudE5hbWUgPSBzdWJtaXR0ZXJbaW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbClcbiAgICAgICAgICAgID8gY29lcmNlRm9ybUFjdGlvblByb3AoZG9tRXZlbnROYW1lLmZvcm1BY3Rpb24pXG4gICAgICAgICAgICA6IHN1Ym1pdHRlci5nZXRBdHRyaWJ1dGUoXCJmb3JtQWN0aW9uXCIpKSxcbiAgICAgICAgICBudWxsICE9PSBkb21FdmVudE5hbWUgJiZcbiAgICAgICAgICAgICgoYWN0aW9uID0gZG9tRXZlbnROYW1lKSwgKHN1Ym1pdHRlciA9IG51bGwpKSk7XG4gICAgICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudChcbiAgICAgICAgICBcImFjdGlvblwiLFxuICAgICAgICAgIFwiYWN0aW9uXCIsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICApO1xuICAgICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICBsaXN0ZW5lcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IG51bGwsXG4gICAgICAgICAgICAgIGxpc3RlbmVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICAgIGlmICgwICE9PSBjdXJyZW50RXZlbnRUcmFuc2l0aW9uTGFuZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm9ybURhdGEgPSBzdWJtaXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY3JlYXRlRm9ybURhdGFXaXRoU3VibWl0dGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBGb3JtRGF0YShuYXRpdmVFdmVudFRhcmdldCksXG4gICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZzogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogbmF0aXZlRXZlbnRUYXJnZXQubWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKHBlbmRpbmdTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0SG9zdFRyYW5zaXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgbWF5YmVUYXJnZXRJbnN0LFxuICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhY3Rpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgKGV2ZW50LnByZXZlbnREZWZhdWx0KCksXG4gICAgICAgICAgICAgICAgICAgIChmb3JtRGF0YSA9IHN1Ym1pdHRlclxuICAgICAgICAgICAgICAgICAgICAgID8gY3JlYXRlRm9ybURhdGFXaXRoU3VibWl0dGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibWl0dGVyXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBuZXcgRm9ybURhdGEobmF0aXZlRXZlbnRUYXJnZXQpKSxcbiAgICAgICAgICAgICAgICAgICAgKHBlbmRpbmdTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IG5hdGl2ZUV2ZW50VGFyZ2V0Lm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGFjdGlvblxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZShwZW5kaW5nU3RhdGUpLFxuICAgICAgICAgICAgICAgICAgICBzdGFydEhvc3RUcmFuc2l0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIG1heWJlVGFyZ2V0SW5zdCxcbiAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhXG4gICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0OiBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpIHtcbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGlzdGVuZXIoZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVwb3J0R2xvYmFsRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgICAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MgPSAwICE9PSAoZXZlbnRTeXN0ZW1GbGFncyAmIDQpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwYXRjaFF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBfZGlzcGF0Y2hRdWV1ZSRpID0gZGlzcGF0Y2hRdWV1ZVtpXTtcbiAgICAgICAgYToge1xuICAgICAgICAgIHZhciBwcmV2aW91c0luc3RhbmNlID0gdm9pZCAwLFxuICAgICAgICAgICAgZXZlbnQgPSBfZGlzcGF0Y2hRdWV1ZSRpLmV2ZW50O1xuICAgICAgICAgIF9kaXNwYXRjaFF1ZXVlJGkgPSBfZGlzcGF0Y2hRdWV1ZSRpLmxpc3RlbmVycztcbiAgICAgICAgICBpZiAoZXZlbnRTeXN0ZW1GbGFncylcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIHZhciBpJGpzY29tcCQwID0gX2Rpc3BhdGNoUXVldWUkaS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAwIDw9IGkkanNjb21wJDA7XG4gICAgICAgICAgICAgIGkkanNjb21wJDAtLVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHZhciBfZGlzcGF0Y2hMaXN0ZW5lcnMkaSA9IF9kaXNwYXRjaFF1ZXVlJGlbaSRqc2NvbXAkMF0sXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5pbnN0YW5jZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuY3VycmVudFRhcmdldDtcbiAgICAgICAgICAgICAgX2Rpc3BhdGNoTGlzdGVuZXJzJGkgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5saXN0ZW5lcjtcbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlICE9PSBwcmV2aW91c0luc3RhbmNlICYmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpXG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaW5zdGFuY2VcbiAgICAgICAgICAgICAgICA/IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZURpc3BhdGNoLFxuICAgICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgX2Rpc3BhdGNoTGlzdGVuZXJzJGksXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXRcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IGV4ZWN1dGVEaXNwYXRjaChldmVudCwgX2Rpc3BhdGNoTGlzdGVuZXJzJGksIGN1cnJlbnRUYXJnZXQpO1xuICAgICAgICAgICAgICBwcmV2aW91c0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgaSRqc2NvbXAkMCA9IDA7XG4gICAgICAgICAgICAgIGkkanNjb21wJDAgPCBfZGlzcGF0Y2hRdWV1ZSRpLmxlbmd0aDtcbiAgICAgICAgICAgICAgaSRqc2NvbXAkMCsrXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgX2Rpc3BhdGNoTGlzdGVuZXJzJGkgPSBfZGlzcGF0Y2hRdWV1ZSRpW2kkanNjb21wJDBdO1xuICAgICAgICAgICAgICBpbnN0YW5jZSA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmluc3RhbmNlO1xuICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuY3VycmVudFRhcmdldDtcbiAgICAgICAgICAgICAgX2Rpc3BhdGNoTGlzdGVuZXJzJGkgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5saXN0ZW5lcjtcbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlICE9PSBwcmV2aW91c0luc3RhbmNlICYmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpXG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaW5zdGFuY2VcbiAgICAgICAgICAgICAgICA/IHJ1bldpdGhGaWJlckluREVWKFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZURpc3BhdGNoLFxuICAgICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgX2Rpc3BhdGNoTGlzdGVuZXJzJGksXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXRcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IGV4ZWN1dGVEaXNwYXRjaChldmVudCwgX2Rpc3BhdGNoTGlzdGVuZXJzJGksIGN1cnJlbnRUYXJnZXQpO1xuICAgICAgICAgICAgICBwcmV2aW91c0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEVsZW1lbnQpIHtcbiAgICAgIG5vbkRlbGVnYXRlZEV2ZW50cy5oYXMoZG9tRXZlbnROYW1lKSB8fFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdEaWQgbm90IGV4cGVjdCBhIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoKSBjYWxsIGZvciBcIiVzXCIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicsXG4gICAgICAgICAgZG9tRXZlbnROYW1lXG4gICAgICAgICk7XG4gICAgICB2YXIgbGlzdGVuZXJTZXQgPSB0YXJnZXRFbGVtZW50W2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV07XG4gICAgICB2b2lkIDAgPT09IGxpc3RlbmVyU2V0ICYmXG4gICAgICAgIChsaXN0ZW5lclNldCA9IHRhcmdldEVsZW1lbnRbaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5XSA9IG5ldyBTZXQoKSk7XG4gICAgICB2YXIgbGlzdGVuZXJTZXRLZXkgPSBkb21FdmVudE5hbWUgKyBcIl9fYnViYmxlXCI7XG4gICAgICBsaXN0ZW5lclNldC5oYXMobGlzdGVuZXJTZXRLZXkpIHx8XG4gICAgICAgIChhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcih0YXJnZXRFbGVtZW50LCBkb21FdmVudE5hbWUsIDIsICExKSxcbiAgICAgICAgbGlzdGVuZXJTZXQuYWRkKGxpc3RlbmVyU2V0S2V5KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyLCB0YXJnZXQpIHtcbiAgICAgIG5vbkRlbGVnYXRlZEV2ZW50cy5oYXMoZG9tRXZlbnROYW1lKSAmJlxuICAgICAgICAhaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdEaWQgbm90IGV4cGVjdCBhIGxpc3RlblRvTmF0aXZlRXZlbnQoKSBjYWxsIGZvciBcIiVzXCIgaW4gdGhlIGJ1YmJsZSBwaGFzZS4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyxcbiAgICAgICAgICBkb21FdmVudE5hbWVcbiAgICAgICAgKTtcbiAgICAgIHZhciBldmVudFN5c3RlbUZsYWdzID0gMDtcbiAgICAgIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIgJiYgKGV2ZW50U3lzdGVtRmxhZ3MgfD0gNCk7XG4gICAgICBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXJcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gICAgICBpZiAoIXJvb3RDb250YWluZXJFbGVtZW50W2xpc3RlbmluZ01hcmtlcl0pIHtcbiAgICAgICAgcm9vdENvbnRhaW5lckVsZW1lbnRbbGlzdGVuaW5nTWFya2VyXSA9ICEwO1xuICAgICAgICBhbGxOYXRpdmVFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgICAgXCJzZWxlY3Rpb25jaGFuZ2VcIiAhPT0gZG9tRXZlbnROYW1lICYmXG4gICAgICAgICAgICAobm9uRGVsZWdhdGVkRXZlbnRzLmhhcyhkb21FdmVudE5hbWUpIHx8XG4gICAgICAgICAgICAgIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCAhMSwgcm9vdENvbnRhaW5lckVsZW1lbnQpLFxuICAgICAgICAgICAgbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsICEwLCByb290Q29udGFpbmVyRWxlbWVudCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPVxuICAgICAgICAgIDkgPT09IHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlXG4gICAgICAgICAgICA/IHJvb3RDb250YWluZXJFbGVtZW50XG4gICAgICAgICAgICA6IHJvb3RDb250YWluZXJFbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgIG51bGwgPT09IG93bmVyRG9jdW1lbnQgfHxcbiAgICAgICAgICBvd25lckRvY3VtZW50W2xpc3RlbmluZ01hcmtlcl0gfHxcbiAgICAgICAgICAoKG93bmVyRG9jdW1lbnRbbGlzdGVuaW5nTWFya2VyXSA9ICEwKSxcbiAgICAgICAgICBsaXN0ZW5Ub05hdGl2ZUV2ZW50KFwic2VsZWN0aW9uY2hhbmdlXCIsICExLCBvd25lckRvY3VtZW50KSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKFxuICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXJcbiAgICApIHtcbiAgICAgIHN3aXRjaCAoZ2V0RXZlbnRQcmlvcml0eShkb21FdmVudE5hbWUpKSB7XG4gICAgICAgIGNhc2UgRGlzY3JldGVFdmVudFByaW9yaXR5OlxuICAgICAgICAgIHZhciBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaERpc2NyZXRlRXZlbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29udGludW91c0V2ZW50UHJpb3JpdHk6XG4gICAgICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hDb250aW51b3VzRXZlbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hFdmVudDtcbiAgICAgIH1cbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MgPSBsaXN0ZW5lcldyYXBwZXIuYmluZChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICB0YXJnZXRDb250YWluZXJcbiAgICAgICk7XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSB2b2lkIDA7XG4gICAgICAhcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgfHxcbiAgICAgICAgKFwidG91Y2hzdGFydFwiICE9PSBkb21FdmVudE5hbWUgJiZcbiAgICAgICAgICBcInRvdWNobW92ZVwiICE9PSBkb21FdmVudE5hbWUgJiZcbiAgICAgICAgICBcIndoZWVsXCIgIT09IGRvbUV2ZW50TmFtZSkgfHxcbiAgICAgICAgKGxpc3RlbmVyV3JhcHBlciA9ICEwKTtcbiAgICAgIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXJcbiAgICAgICAgPyB2b2lkIDAgIT09IGxpc3RlbmVyV3JhcHBlclxuICAgICAgICAgID8gdGFyZ2V0Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB7XG4gICAgICAgICAgICAgIGNhcHR1cmU6ICEwLFxuICAgICAgICAgICAgICBwYXNzaXZlOiBsaXN0ZW5lcldyYXBwZXJcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiB0YXJnZXRDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsICEwKVxuICAgICAgICA6IHZvaWQgMCAhPT0gbGlzdGVuZXJXcmFwcGVyXG4gICAgICAgICAgPyB0YXJnZXRDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHtcbiAgICAgICAgICAgICAgcGFzc2l2ZTogbGlzdGVuZXJXcmFwcGVyXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogdGFyZ2V0Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShcbiAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICBuYXRpdmVFdmVudCxcbiAgICAgIHRhcmdldEluc3QkanNjb21wJDAsXG4gICAgICB0YXJnZXRDb250YWluZXJcbiAgICApIHtcbiAgICAgIHZhciBhbmNlc3Rvckluc3QgPSB0YXJnZXRJbnN0JGpzY29tcCQwO1xuICAgICAgaWYgKFxuICAgICAgICAwID09PSAoZXZlbnRTeXN0ZW1GbGFncyAmIDEpICYmXG4gICAgICAgIDAgPT09IChldmVudFN5c3RlbUZsYWdzICYgMikgJiZcbiAgICAgICAgbnVsbCAhPT0gdGFyZ2V0SW5zdCRqc2NvbXAkMFxuICAgICAgKVxuICAgICAgICBhOiBmb3IgKDs7KSB7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHRhcmdldEluc3QkanNjb21wJDApIHJldHVybjtcbiAgICAgICAgICB2YXIgbm9kZVRhZyA9IHRhcmdldEluc3QkanNjb21wJDAudGFnO1xuICAgICAgICAgIGlmICgzID09PSBub2RlVGFnIHx8IDQgPT09IG5vZGVUYWcpIHtcbiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSB0YXJnZXRJbnN0JGpzY29tcCQwLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gdGFyZ2V0Q29udGFpbmVyKSBicmVhaztcbiAgICAgICAgICAgIGlmICg0ID09PSBub2RlVGFnKVxuICAgICAgICAgICAgICBmb3IgKG5vZGVUYWcgPSB0YXJnZXRJbnN0JGpzY29tcCQwLnJldHVybjsgbnVsbCAhPT0gbm9kZVRhZzsgKSB7XG4gICAgICAgICAgICAgICAgdmFyIGdyYW5kVGFnID0gbm9kZVRhZy50YWc7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKDMgPT09IGdyYW5kVGFnIHx8IDQgPT09IGdyYW5kVGFnKSAmJlxuICAgICAgICAgICAgICAgICAgbm9kZVRhZy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyA9PT0gdGFyZ2V0Q29udGFpbmVyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIG5vZGVUYWcgPSBub2RlVGFnLnJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICg7IG51bGwgIT09IGNvbnRhaW5lcjsgKSB7XG4gICAgICAgICAgICAgIG5vZGVUYWcgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShjb250YWluZXIpO1xuICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gbm9kZVRhZykgcmV0dXJuO1xuICAgICAgICAgICAgICBncmFuZFRhZyA9IG5vZGVUYWcudGFnO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgNSA9PT0gZ3JhbmRUYWcgfHxcbiAgICAgICAgICAgICAgICA2ID09PSBncmFuZFRhZyB8fFxuICAgICAgICAgICAgICAgIDI2ID09PSBncmFuZFRhZyB8fFxuICAgICAgICAgICAgICAgIDI3ID09PSBncmFuZFRhZ1xuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRJbnN0JGpzY29tcCQwID0gYW5jZXN0b3JJbnN0ID0gbm9kZVRhZztcbiAgICAgICAgICAgICAgICBjb250aW51ZSBhO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0YXJnZXRJbnN0JGpzY29tcCQwID0gdGFyZ2V0SW5zdCRqc2NvbXAkMC5yZXR1cm47XG4gICAgICAgIH1cbiAgICAgIGJhdGNoZWRVcGRhdGVzJDEoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdGFyZ2V0SW5zdCA9IGFuY2VzdG9ySW5zdCxcbiAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSxcbiAgICAgICAgICBkaXNwYXRjaFF1ZXVlID0gW107XG4gICAgICAgIGE6IHtcbiAgICAgICAgICB2YXIgcmVhY3ROYW1lID0gdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuZ2V0KGRvbUV2ZW50TmFtZSk7XG4gICAgICAgICAgaWYgKHZvaWQgMCAhPT0gcmVhY3ROYW1lKSB7XG4gICAgICAgICAgICB2YXIgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRXZlbnQsXG4gICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlID0gZG9tRXZlbnROYW1lO1xuICAgICAgICAgICAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSBcImtleXByZXNzXCI6XG4gICAgICAgICAgICAgICAgaWYgKDAgPT09IGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpKSBicmVhayBhO1xuICAgICAgICAgICAgICBjYXNlIFwia2V5ZG93blwiOlxuICAgICAgICAgICAgICBjYXNlIFwia2V5dXBcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNLZXlib2FyZEV2ZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiZm9jdXNpblwiOlxuICAgICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlID0gXCJmb2N1c1wiO1xuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJmb2N1c291dFwiOlxuICAgICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlID0gXCJibHVyXCI7XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcImJlZm9yZWJsdXJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImFmdGVyYmx1clwiOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJjbGlja1wiOlxuICAgICAgICAgICAgICAgIGlmICgyID09PSBuYXRpdmVFdmVudC5idXR0b24pIGJyZWFrIGE7XG4gICAgICAgICAgICAgIGNhc2UgXCJhdXhjbGlja1wiOlxuICAgICAgICAgICAgICBjYXNlIFwiZGJsY2xpY2tcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIm1vdXNlZG93blwiOlxuICAgICAgICAgICAgICBjYXNlIFwibW91c2Vtb3ZlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJtb3VzZXVwXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJtb3VzZW91dFwiOlxuICAgICAgICAgICAgICBjYXNlIFwibW91c2VvdmVyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJjb250ZXh0bWVudVwiOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJkcmFnXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkcmFnZW5kXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkcmFnZW50ZXJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRyYWdleGl0XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkcmFnbGVhdmVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRyYWdvdmVyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJkcmFnc3RhcnRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImRyb3BcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNEcmFnRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJ0b3VjaGNhbmNlbFwiOlxuICAgICAgICAgICAgICBjYXNlIFwidG91Y2hlbmRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInRvdWNobW92ZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwidG91Y2hzdGFydFwiOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1RvdWNoRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgQU5JTUFUSU9OX0VORDpcbiAgICAgICAgICAgICAgY2FzZSBBTklNQVRJT05fSVRFUkFUSU9OOlxuICAgICAgICAgICAgICBjYXNlIEFOSU1BVElPTl9TVEFSVDpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNBbmltYXRpb25FdmVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBUUkFOU0lUSU9OX0VORDpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJzY3JvbGxcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInNjcm9sbGVuZFwiOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1VJRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJ3aGVlbFwiOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1doZWVsRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJjb3B5XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJjdXRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInBhc3RlXCI6XG4gICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljQ2xpcGJvYXJkRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJnb3Rwb2ludGVyY2FwdHVyZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwibG9zdHBvaW50ZXJjYXB0dXJlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJwb2ludGVyY2FuY2VsXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJwb2ludGVyZG93blwiOlxuICAgICAgICAgICAgICBjYXNlIFwicG9pbnRlcm1vdmVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInBvaW50ZXJvdXRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInBvaW50ZXJvdmVyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJwb2ludGVydXBcIjpcbiAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJ0b2dnbGVcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImJlZm9yZXRvZ2dsZVwiOlxuICAgICAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1RvZ2dsZUV2ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluQ2FwdHVyZVBoYXNlID0gMCAhPT0gKGV2ZW50U3lzdGVtRmxhZ3MgJiA0KSxcbiAgICAgICAgICAgICAgYWNjdW11bGF0ZVRhcmdldE9ubHkgPVxuICAgICAgICAgICAgICAgICFpbkNhcHR1cmVQaGFzZSAmJlxuICAgICAgICAgICAgICAgIChcInNjcm9sbFwiID09PSBkb21FdmVudE5hbWUgfHwgXCJzY3JvbGxlbmRcIiA9PT0gZG9tRXZlbnROYW1lKSxcbiAgICAgICAgICAgICAgcmVhY3RFdmVudE5hbWUgPSBpbkNhcHR1cmVQaGFzZVxuICAgICAgICAgICAgICAgID8gbnVsbCAhPT0gcmVhY3ROYW1lXG4gICAgICAgICAgICAgICAgICA/IHJlYWN0TmFtZSArIFwiQ2FwdHVyZVwiXG4gICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgICA6IHJlYWN0TmFtZTtcbiAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlID0gW107XG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSB0YXJnZXRJbnN0LCBsYXN0SG9zdENvbXBvbmVudDtcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaW5zdGFuY2U7XG5cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB2YXIgX2luc3RhbmNlMiA9IGluc3RhbmNlO1xuICAgICAgICAgICAgICBsYXN0SG9zdENvbXBvbmVudCA9IF9pbnN0YW5jZTIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICBfaW5zdGFuY2UyID0gX2luc3RhbmNlMi50YWc7XG4gICAgICAgICAgICAgICg1ICE9PSBfaW5zdGFuY2UyICYmIDI2ICE9PSBfaW5zdGFuY2UyICYmIDI3ICE9PSBfaW5zdGFuY2UyKSB8fFxuICAgICAgICAgICAgICAgIG51bGwgPT09IGxhc3RIb3N0Q29tcG9uZW50IHx8XG4gICAgICAgICAgICAgICAgbnVsbCA9PT0gcmVhY3RFdmVudE5hbWUgfHxcbiAgICAgICAgICAgICAgICAoKF9pbnN0YW5jZTIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVhY3RFdmVudE5hbWUpKSxcbiAgICAgICAgICAgICAgICBudWxsICE9IF9pbnN0YW5jZTIgJiZcbiAgICAgICAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgX2luc3RhbmNlMixcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0SG9zdENvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgaWYgKGFjY3VtdWxhdGVUYXJnZXRPbmx5KSBicmVhaztcbiAgICAgICAgICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAwIDwgaW5DYXB0dXJlUGhhc2UubGVuZ3RoICYmXG4gICAgICAgICAgICAgICgocmVhY3ROYW1lID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihcbiAgICAgICAgICAgICAgICByZWFjdE5hbWUsXG4gICAgICAgICAgICAgICAgcmVhY3RFdmVudFR5cGUsXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICBldmVudDogcmVhY3ROYW1lLFxuICAgICAgICAgICAgICAgIGxpc3RlbmVyczogaW5DYXB0dXJlUGhhc2VcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoMCA9PT0gKGV2ZW50U3lzdGVtRmxhZ3MgJiA3KSkge1xuICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgIHJlYWN0TmFtZSA9XG4gICAgICAgICAgICAgIFwibW91c2VvdmVyXCIgPT09IGRvbUV2ZW50TmFtZSB8fCBcInBvaW50ZXJvdmVyXCIgPT09IGRvbUV2ZW50TmFtZTtcbiAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9XG4gICAgICAgICAgICAgIFwibW91c2VvdXRcIiA9PT0gZG9tRXZlbnROYW1lIHx8IFwicG9pbnRlcm91dFwiID09PSBkb21FdmVudE5hbWU7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHJlYWN0TmFtZSAmJlxuICAgICAgICAgICAgICBuYXRpdmVFdmVudCAhPT0gY3VycmVudFJlcGxheWluZ0V2ZW50ICYmXG4gICAgICAgICAgICAgIChyZWFjdEV2ZW50VHlwZSA9XG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC5mcm9tRWxlbWVudCkgJiZcbiAgICAgICAgICAgICAgKGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHJlYWN0RXZlbnRUeXBlKSB8fFxuICAgICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgaWYgKFN5bnRoZXRpY0V2ZW50Q3RvciB8fCByZWFjdE5hbWUpIHtcbiAgICAgICAgICAgICAgcmVhY3ROYW1lID1cbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldC53aW5kb3cgPT09IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICAgICAgICA/IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICAgICAgICA6IChyZWFjdE5hbWUgPSBuYXRpdmVFdmVudFRhcmdldC5vd25lckRvY3VtZW50KVxuICAgICAgICAgICAgICAgICAgICA/IHJlYWN0TmFtZS5kZWZhdWx0VmlldyB8fCByZWFjdE5hbWUucGFyZW50V2luZG93XG4gICAgICAgICAgICAgICAgICAgIDogd2luZG93O1xuICAgICAgICAgICAgICBpZiAoU3ludGhldGljRXZlbnRDdG9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKChyZWFjdEV2ZW50VHlwZSA9XG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQudG9FbGVtZW50KSxcbiAgICAgICAgICAgICAgICAgIChTeW50aGV0aWNFdmVudEN0b3IgPSB0YXJnZXRJbnN0KSxcbiAgICAgICAgICAgICAgICAgIChyZWFjdEV2ZW50VHlwZSA9IHJlYWN0RXZlbnRUeXBlXG4gICAgICAgICAgICAgICAgICAgID8gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUocmVhY3RFdmVudFR5cGUpXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCksXG4gICAgICAgICAgICAgICAgICBudWxsICE9PSByZWFjdEV2ZW50VHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAoKGFjY3VtdWxhdGVUYXJnZXRPbmx5ID1cbiAgICAgICAgICAgICAgICAgICAgICBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHJlYWN0RXZlbnRUeXBlKSksXG4gICAgICAgICAgICAgICAgICAgIChpbkNhcHR1cmVQaGFzZSA9IHJlYWN0RXZlbnRUeXBlLnRhZyksXG4gICAgICAgICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlICE9PSBhY2N1bXVsYXRlVGFyZ2V0T25seSB8fFxuICAgICAgICAgICAgICAgICAgICAgICg1ICE9PSBpbkNhcHR1cmVQaGFzZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgMjcgIT09IGluQ2FwdHVyZVBoYXNlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA2ICE9PSBpbkNhcHR1cmVQaGFzZSkpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIHJlYWN0RXZlbnRUeXBlID0gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIChTeW50aGV0aWNFdmVudEN0b3IgPSBudWxsKSwgKHJlYWN0RXZlbnRUeXBlID0gdGFyZ2V0SW5zdCk7XG4gICAgICAgICAgICAgIGlmIChTeW50aGV0aWNFdmVudEN0b3IgIT09IHJlYWN0RXZlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgaW5DYXB0dXJlUGhhc2UgPSBTeW50aGV0aWNNb3VzZUV2ZW50O1xuICAgICAgICAgICAgICAgIF9pbnN0YW5jZTIgPSBcIm9uTW91c2VMZWF2ZVwiO1xuICAgICAgICAgICAgICAgIHJlYWN0RXZlbnROYW1lID0gXCJvbk1vdXNlRW50ZXJcIjtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IFwibW91c2VcIjtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBcInBvaW50ZXJvdXRcIiA9PT0gZG9tRXZlbnROYW1lIHx8XG4gICAgICAgICAgICAgICAgICBcInBvaW50ZXJvdmVyXCIgPT09IGRvbUV2ZW50TmFtZVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIChpbkNhcHR1cmVQaGFzZSA9IFN5bnRoZXRpY1BvaW50ZXJFdmVudCksXG4gICAgICAgICAgICAgICAgICAgIChfaW5zdGFuY2UyID0gXCJvblBvaW50ZXJMZWF2ZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgKHJlYWN0RXZlbnROYW1lID0gXCJvblBvaW50ZXJFbnRlclwiKSxcbiAgICAgICAgICAgICAgICAgICAgKGluc3RhbmNlID0gXCJwb2ludGVyXCIpO1xuICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVUYXJnZXRPbmx5ID1cbiAgICAgICAgICAgICAgICAgIG51bGwgPT0gU3ludGhldGljRXZlbnRDdG9yXG4gICAgICAgICAgICAgICAgICAgID8gcmVhY3ROYW1lXG4gICAgICAgICAgICAgICAgICAgIDogZ2V0Tm9kZUZyb21JbnN0YW5jZShTeW50aGV0aWNFdmVudEN0b3IpO1xuICAgICAgICAgICAgICAgIGxhc3RIb3N0Q29tcG9uZW50ID1cbiAgICAgICAgICAgICAgICAgIG51bGwgPT0gcmVhY3RFdmVudFR5cGVcbiAgICAgICAgICAgICAgICAgICAgPyByZWFjdE5hbWVcbiAgICAgICAgICAgICAgICAgICAgOiBnZXROb2RlRnJvbUluc3RhbmNlKHJlYWN0RXZlbnRUeXBlKTtcbiAgICAgICAgICAgICAgICByZWFjdE5hbWUgPSBuZXcgaW5DYXB0dXJlUGhhc2UoXG4gICAgICAgICAgICAgICAgICBfaW5zdGFuY2UyLFxuICAgICAgICAgICAgICAgICAgaW5zdGFuY2UgKyBcImxlYXZlXCIsXG4gICAgICAgICAgICAgICAgICBTeW50aGV0aWNFdmVudEN0b3IsXG4gICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZWFjdE5hbWUudGFyZ2V0ID0gYWNjdW11bGF0ZVRhcmdldE9ubHk7XG4gICAgICAgICAgICAgICAgcmVhY3ROYW1lLnJlbGF0ZWRUYXJnZXQgPSBsYXN0SG9zdENvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBfaW5zdGFuY2UyID0gbnVsbDtcbiAgICAgICAgICAgICAgICBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuYXRpdmVFdmVudFRhcmdldCkgPT09IHRhcmdldEluc3QgJiZcbiAgICAgICAgICAgICAgICAgICgoaW5DYXB0dXJlUGhhc2UgPSBuZXcgaW5DYXB0dXJlUGhhc2UoXG4gICAgICAgICAgICAgICAgICAgIHJlYWN0RXZlbnROYW1lLFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSArIFwiZW50ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgcmVhY3RFdmVudFR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAoaW5DYXB0dXJlUGhhc2UudGFyZ2V0ID0gbGFzdEhvc3RDb21wb25lbnQpLFxuICAgICAgICAgICAgICAgICAgKGluQ2FwdHVyZVBoYXNlLnJlbGF0ZWRUYXJnZXQgPSBhY2N1bXVsYXRlVGFyZ2V0T25seSksXG4gICAgICAgICAgICAgICAgICAoX2luc3RhbmNlMiA9IGluQ2FwdHVyZVBoYXNlKSk7XG4gICAgICAgICAgICAgICAgYWNjdW11bGF0ZVRhcmdldE9ubHkgPSBfaW5zdGFuY2UyO1xuICAgICAgICAgICAgICAgIGlmIChTeW50aGV0aWNFdmVudEN0b3IgJiYgcmVhY3RFdmVudFR5cGUpXG4gICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlID0gZ2V0UGFyZW50O1xuICAgICAgICAgICAgICAgICAgICByZWFjdEV2ZW50TmFtZSA9IFN5bnRoZXRpY0V2ZW50Q3RvcjtcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UgPSByZWFjdEV2ZW50VHlwZTtcbiAgICAgICAgICAgICAgICAgICAgbGFzdEhvc3RDb21wb25lbnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgIF9pbnN0YW5jZTIgPSByZWFjdEV2ZW50TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICBfaW5zdGFuY2UyO1xuICAgICAgICAgICAgICAgICAgICAgIF9pbnN0YW5jZTIgPSBpbkNhcHR1cmVQaGFzZShfaW5zdGFuY2UyKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgbGFzdEhvc3RDb21wb25lbnQrKztcbiAgICAgICAgICAgICAgICAgICAgX2luc3RhbmNlMiA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXBCID0gaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgdGVtcEI7XG4gICAgICAgICAgICAgICAgICAgICAgdGVtcEIgPSBpbkNhcHR1cmVQaGFzZSh0ZW1wQilcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIF9pbnN0YW5jZTIrKztcbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IDAgPCBsYXN0SG9zdENvbXBvbmVudCAtIF9pbnN0YW5jZTI7IClcbiAgICAgICAgICAgICAgICAgICAgICAocmVhY3RFdmVudE5hbWUgPSBpbkNhcHR1cmVQaGFzZShyZWFjdEV2ZW50TmFtZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEhvc3RDb21wb25lbnQtLTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IDAgPCBfaW5zdGFuY2UyIC0gbGFzdEhvc3RDb21wb25lbnQ7IClcbiAgICAgICAgICAgICAgICAgICAgICAoaW5zdGFuY2UgPSBpbkNhcHR1cmVQaGFzZShpbnN0YW5jZSkpLCBfaW5zdGFuY2UyLS07XG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyBsYXN0SG9zdENvbXBvbmVudC0tOyApIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFjdEV2ZW50TmFtZSA9PT0gaW5zdGFuY2UgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChudWxsICE9PSBpbnN0YW5jZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICByZWFjdEV2ZW50TmFtZSA9PT0gaW5zdGFuY2UuYWx0ZXJuYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5DYXB0dXJlUGhhc2UgPSByZWFjdEV2ZW50TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGI7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIHJlYWN0RXZlbnROYW1lID0gaW5DYXB0dXJlUGhhc2UocmVhY3RFdmVudE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlID0gaW5DYXB0dXJlUGhhc2UoaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGluQ2FwdHVyZVBoYXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBudWxsICE9PSBTeW50aGV0aWNFdmVudEN0b3IgJiZcbiAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoUXVldWUsXG4gICAgICAgICAgICAgICAgICAgIHJlYWN0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgU3ludGhldGljRXZlbnRDdG9yLFxuICAgICAgICAgICAgICAgICAgICBpbkNhcHR1cmVQaGFzZSxcbiAgICAgICAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gcmVhY3RFdmVudFR5cGUgJiZcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IGFjY3VtdWxhdGVUYXJnZXRPbmx5ICYmXG4gICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KFxuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlVGFyZ2V0T25seSxcbiAgICAgICAgICAgICAgICAgICAgcmVhY3RFdmVudFR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGluQ2FwdHVyZVBoYXNlLFxuICAgICAgICAgICAgICAgICAgICAhMFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBhOiB7XG4gICAgICAgICAgICByZWFjdE5hbWUgPSB0YXJnZXRJbnN0ID8gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KSA6IHdpbmRvdztcbiAgICAgICAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9XG4gICAgICAgICAgICAgIHJlYWN0TmFtZS5ub2RlTmFtZSAmJiByZWFjdE5hbWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgXCJzZWxlY3RcIiA9PT0gU3ludGhldGljRXZlbnRDdG9yIHx8XG4gICAgICAgICAgICAgIChcImlucHV0XCIgPT09IFN5bnRoZXRpY0V2ZW50Q3RvciAmJiBcImZpbGVcIiA9PT0gcmVhY3ROYW1lLnR5cGUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHZhciBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudDtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzVGV4dElucHV0RWxlbWVudChyZWFjdE5hbWUpKVxuICAgICAgICAgICAgICBpZiAoaXNJbnB1dEV2ZW50U3VwcG9ydGVkKVxuICAgICAgICAgICAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvcklucHV0T3JDaGFuZ2VFdmVudDtcbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsO1xuICAgICAgICAgICAgICAgIHZhciBoYW5kbGVFdmVudEZ1bmMgPSBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgKFN5bnRoZXRpY0V2ZW50Q3RvciA9IHJlYWN0TmFtZS5ub2RlTmFtZSksXG4gICAgICAgICAgICAgICAgIVN5bnRoZXRpY0V2ZW50Q3RvciB8fFxuICAgICAgICAgICAgICAgIFwiaW5wdXRcIiAhPT0gU3ludGhldGljRXZlbnRDdG9yLnRvTG93ZXJDYXNlKCkgfHxcbiAgICAgICAgICAgICAgICAoXCJjaGVja2JveFwiICE9PSByZWFjdE5hbWUudHlwZSAmJiBcInJhZGlvXCIgIT09IHJlYWN0TmFtZS50eXBlKVxuICAgICAgICAgICAgICAgICAgPyB0YXJnZXRJbnN0ICYmXG4gICAgICAgICAgICAgICAgICAgIGlzQ3VzdG9tRWxlbWVudCh0YXJnZXRJbnN0LmVsZW1lbnRUeXBlKSAmJlxuICAgICAgICAgICAgICAgICAgICAoZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQpXG4gICAgICAgICAgICAgICAgICA6IChnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgJiZcbiAgICAgICAgICAgICAgKGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZ1bmMoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoXG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgICAgICAgICAgICBnZXRUYXJnZXRJbnN0RnVuYyxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGFuZGxlRXZlbnRGdW5jICYmXG4gICAgICAgICAgICAgIGhhbmRsZUV2ZW50RnVuYyhkb21FdmVudE5hbWUsIHJlYWN0TmFtZSwgdGFyZ2V0SW5zdCk7XG4gICAgICAgICAgICBcImZvY3Vzb3V0XCIgPT09IGRvbUV2ZW50TmFtZSAmJlxuICAgICAgICAgICAgICB0YXJnZXRJbnN0ICYmXG4gICAgICAgICAgICAgIFwibnVtYmVyXCIgPT09IHJlYWN0TmFtZS50eXBlICYmXG4gICAgICAgICAgICAgIG51bGwgIT0gdGFyZ2V0SW5zdC5tZW1vaXplZFByb3BzLnZhbHVlICYmXG4gICAgICAgICAgICAgIHNldERlZmF1bHRWYWx1ZShyZWFjdE5hbWUsIFwibnVtYmVyXCIsIHJlYWN0TmFtZS52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGhhbmRsZUV2ZW50RnVuYyA9IHRhcmdldEluc3RcbiAgICAgICAgICAgID8gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KVxuICAgICAgICAgICAgOiB3aW5kb3c7XG4gICAgICAgICAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJmb2N1c2luXCI6XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBpc1RleHRJbnB1dEVsZW1lbnQoaGFuZGxlRXZlbnRGdW5jKSB8fFxuICAgICAgICAgICAgICAgIFwidHJ1ZVwiID09PSBoYW5kbGVFdmVudEZ1bmMuY29udGVudEVkaXRhYmxlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAoYWN0aXZlRWxlbWVudCA9IGhhbmRsZUV2ZW50RnVuYyksXG4gICAgICAgICAgICAgICAgICAoYWN0aXZlRWxlbWVudEluc3QgPSB0YXJnZXRJbnN0KSxcbiAgICAgICAgICAgICAgICAgIChsYXN0U2VsZWN0aW9uID0gbnVsbCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImZvY3Vzb3V0XCI6XG4gICAgICAgICAgICAgIGxhc3RTZWxlY3Rpb24gPSBhY3RpdmVFbGVtZW50SW5zdCA9IGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtb3VzZWRvd25cIjpcbiAgICAgICAgICAgICAgbW91c2VEb3duID0gITA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNvbnRleHRtZW51XCI6XG4gICAgICAgICAgICBjYXNlIFwibW91c2V1cFwiOlxuICAgICAgICAgICAgY2FzZSBcImRyYWdlbmRcIjpcbiAgICAgICAgICAgICAgbW91c2VEb3duID0gITE7XG4gICAgICAgICAgICAgIGNvbnN0cnVjdFNlbGVjdEV2ZW50KFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoUXVldWUsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnQsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic2VsZWN0aW9uY2hhbmdlXCI6XG4gICAgICAgICAgICAgIGlmIChza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQpIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImtleWRvd25cIjpcbiAgICAgICAgICAgIGNhc2UgXCJrZXl1cFwiOlxuICAgICAgICAgICAgICBjb25zdHJ1Y3RTZWxlY3RFdmVudChcbiAgICAgICAgICAgICAgICBkaXNwYXRjaFF1ZXVlLFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBmYWxsYmFja0RhdGE7XG4gICAgICAgICAgaWYgKGNhblVzZUNvbXBvc2l0aW9uRXZlbnQpXG4gICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9uc3RhcnRcIjpcbiAgICAgICAgICAgICAgICAgIHZhciBldmVudFR5cGUgPSBcIm9uQ29tcG9zaXRpb25TdGFydFwiO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICBjYXNlIFwiY29tcG9zaXRpb25lbmRcIjpcbiAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZSA9IFwib25Db21wb3NpdGlvbkVuZFwiO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgICBjYXNlIFwiY29tcG9zaXRpb251cGRhdGVcIjpcbiAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZSA9IFwib25Db21wb3NpdGlvblVwZGF0ZVwiO1xuICAgICAgICAgICAgICAgICAgYnJlYWsgYjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBldmVudFR5cGUgPSB2b2lkIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgaXNDb21wb3NpbmdcbiAgICAgICAgICAgICAgPyBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkgJiZcbiAgICAgICAgICAgICAgICAoZXZlbnRUeXBlID0gXCJvbkNvbXBvc2l0aW9uRW5kXCIpXG4gICAgICAgICAgICAgIDogXCJrZXlkb3duXCIgPT09IGRvbUV2ZW50TmFtZSAmJlxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LmtleUNvZGUgPT09IFNUQVJUX0tFWUNPREUgJiZcbiAgICAgICAgICAgICAgICAoZXZlbnRUeXBlID0gXCJvbkNvbXBvc2l0aW9uU3RhcnRcIik7XG4gICAgICAgICAgZXZlbnRUeXBlICYmXG4gICAgICAgICAgICAodXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgJiZcbiAgICAgICAgICAgICAgXCJrb1wiICE9PSBuYXRpdmVFdmVudC5sb2NhbGUgJiZcbiAgICAgICAgICAgICAgKGlzQ29tcG9zaW5nIHx8IFwib25Db21wb3NpdGlvblN0YXJ0XCIgIT09IGV2ZW50VHlwZVxuICAgICAgICAgICAgICAgID8gXCJvbkNvbXBvc2l0aW9uRW5kXCIgPT09IGV2ZW50VHlwZSAmJlxuICAgICAgICAgICAgICAgICAgaXNDb21wb3NpbmcgJiZcbiAgICAgICAgICAgICAgICAgIChmYWxsYmFja0RhdGEgPSBnZXREYXRhKCkpXG4gICAgICAgICAgICAgICAgOiAoKHJvb3QgPSBuYXRpdmVFdmVudFRhcmdldCksXG4gICAgICAgICAgICAgICAgICAoc3RhcnRUZXh0ID0gXCJ2YWx1ZVwiIGluIHJvb3QgPyByb290LnZhbHVlIDogcm9vdC50ZXh0Q29udGVudCksXG4gICAgICAgICAgICAgICAgICAoaXNDb21wb3NpbmcgPSAhMCkpKSxcbiAgICAgICAgICAgIChoYW5kbGVFdmVudEZ1bmMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnMoXG4gICAgICAgICAgICAgIHRhcmdldEluc3QsXG4gICAgICAgICAgICAgIGV2ZW50VHlwZVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAwIDwgaGFuZGxlRXZlbnRGdW5jLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAoKGV2ZW50VHlwZSA9IG5ldyBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50KFxuICAgICAgICAgICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFRhcmdldFxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICBldmVudDogZXZlbnRUeXBlLFxuICAgICAgICAgICAgICAgIGxpc3RlbmVyczogaGFuZGxlRXZlbnRGdW5jXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBmYWxsYmFja0RhdGFcbiAgICAgICAgICAgICAgICA/IChldmVudFR5cGUuZGF0YSA9IGZhbGxiYWNrRGF0YSlcbiAgICAgICAgICAgICAgICA6ICgoZmFsbGJhY2tEYXRhID0gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCkpLFxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gZmFsbGJhY2tEYXRhICYmIChldmVudFR5cGUuZGF0YSA9IGZhbGxiYWNrRGF0YSkpKSk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGZhbGxiYWNrRGF0YSA9IGNhblVzZVRleHRJbnB1dEV2ZW50XG4gICAgICAgICAgICAgID8gZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KVxuICAgICAgICAgICAgICA6IGdldEZhbGxiYWNrQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSlcbiAgICAgICAgICApXG4gICAgICAgICAgICAoZXZlbnRUeXBlID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKFxuICAgICAgICAgICAgICB0YXJnZXRJbnN0LFxuICAgICAgICAgICAgICBcIm9uQmVmb3JlSW5wdXRcIlxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIDAgPCBldmVudFR5cGUubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgKChoYW5kbGVFdmVudEZ1bmMgPSBuZXcgU3ludGhldGljSW5wdXRFdmVudChcbiAgICAgICAgICAgICAgICAgIFwib25CZWZvcmVJbnB1dFwiLFxuICAgICAgICAgICAgICAgICAgXCJiZWZvcmVpbnB1dFwiLFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICAgICAgbmF0aXZlRXZlbnRUYXJnZXRcbiAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgZXZlbnQ6IGhhbmRsZUV2ZW50RnVuYyxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyczogZXZlbnRUeXBlXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKGhhbmRsZUV2ZW50RnVuYy5kYXRhID0gZmFsbGJhY2tEYXRhKSk7XG4gICAgICAgICAgZXh0cmFjdEV2ZW50cyQxKFxuICAgICAgICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgIHRhcmdldEluc3QsXG4gICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50VGFyZ2V0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCBldmVudFN5c3RlbUZsYWdzKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBsaXN0ZW5lciwgY3VycmVudFRhcmdldCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICBsaXN0ZW5lcjogbGlzdGVuZXIsXG4gICAgICAgIGN1cnJlbnRUYXJnZXQ6IGN1cnJlbnRUYXJnZXRcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRGaWJlciwgcmVhY3ROYW1lKSB7XG4gICAgICBmb3IgKFxuICAgICAgICB2YXIgY2FwdHVyZU5hbWUgPSByZWFjdE5hbWUgKyBcIkNhcHR1cmVcIiwgbGlzdGVuZXJzID0gW107XG4gICAgICAgIG51bGwgIT09IHRhcmdldEZpYmVyO1xuXG4gICAgICApIHtcbiAgICAgICAgdmFyIF9pbnN0YW5jZTMgPSB0YXJnZXRGaWJlcixcbiAgICAgICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2UzLnN0YXRlTm9kZTtcbiAgICAgICAgX2luc3RhbmNlMyA9IF9pbnN0YW5jZTMudGFnO1xuICAgICAgICAoNSAhPT0gX2luc3RhbmNlMyAmJiAyNiAhPT0gX2luc3RhbmNlMyAmJiAyNyAhPT0gX2luc3RhbmNlMykgfHxcbiAgICAgICAgICBudWxsID09PSBzdGF0ZU5vZGUgfHxcbiAgICAgICAgICAoKF9pbnN0YW5jZTMgPSBnZXRMaXN0ZW5lcih0YXJnZXRGaWJlciwgY2FwdHVyZU5hbWUpKSxcbiAgICAgICAgICBudWxsICE9IF9pbnN0YW5jZTMgJiZcbiAgICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KFxuICAgICAgICAgICAgICBjcmVhdGVEaXNwYXRjaExpc3RlbmVyKHRhcmdldEZpYmVyLCBfaW5zdGFuY2UzLCBzdGF0ZU5vZGUpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIChfaW5zdGFuY2UzID0gZ2V0TGlzdGVuZXIodGFyZ2V0RmliZXIsIHJlYWN0TmFtZSkpLFxuICAgICAgICAgIG51bGwgIT0gX2luc3RhbmNlMyAmJlxuICAgICAgICAgICAgbGlzdGVuZXJzLnB1c2goXG4gICAgICAgICAgICAgIGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIodGFyZ2V0RmliZXIsIF9pbnN0YW5jZTMsIHN0YXRlTm9kZSlcbiAgICAgICAgICAgICkpO1xuICAgICAgICBpZiAoMyA9PT0gdGFyZ2V0RmliZXIudGFnKSByZXR1cm4gbGlzdGVuZXJzO1xuICAgICAgICB0YXJnZXRGaWJlciA9IHRhcmdldEZpYmVyLnJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50KGluc3QpIHtcbiAgICAgIGlmIChudWxsID09PSBpbnN0KSByZXR1cm4gbnVsbDtcbiAgICAgIGRvIGluc3QgPSBpbnN0LnJldHVybjtcbiAgICAgIHdoaWxlIChpbnN0ICYmIDUgIT09IGluc3QudGFnICYmIDI3ICE9PSBpbnN0LnRhZyk7XG4gICAgICByZXR1cm4gaW5zdCA/IGluc3QgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KFxuICAgICAgZGlzcGF0Y2hRdWV1ZSxcbiAgICAgIGV2ZW50LFxuICAgICAgdGFyZ2V0LFxuICAgICAgY29tbW9uLFxuICAgICAgaW5DYXB0dXJlUGhhc2VcbiAgICApIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lID0gZXZlbnQuX3JlYWN0TmFtZSwgbGlzdGVuZXJzID0gW107XG4gICAgICAgIG51bGwgIT09IHRhcmdldCAmJiB0YXJnZXQgIT09IGNvbW1vbjtcblxuICAgICAgKSB7XG4gICAgICAgIHZhciBfaW5zdGFuY2U0ID0gdGFyZ2V0LFxuICAgICAgICAgIGFsdGVybmF0ZSA9IF9pbnN0YW5jZTQuYWx0ZXJuYXRlLFxuICAgICAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTQuc3RhdGVOb2RlO1xuICAgICAgICBfaW5zdGFuY2U0ID0gX2luc3RhbmNlNC50YWc7XG4gICAgICAgIGlmIChudWxsICE9PSBhbHRlcm5hdGUgJiYgYWx0ZXJuYXRlID09PSBjb21tb24pIGJyZWFrO1xuICAgICAgICAoNSAhPT0gX2luc3RhbmNlNCAmJiAyNiAhPT0gX2luc3RhbmNlNCAmJiAyNyAhPT0gX2luc3RhbmNlNCkgfHxcbiAgICAgICAgICBudWxsID09PSBzdGF0ZU5vZGUgfHxcbiAgICAgICAgICAoKGFsdGVybmF0ZSA9IHN0YXRlTm9kZSksXG4gICAgICAgICAgaW5DYXB0dXJlUGhhc2VcbiAgICAgICAgICAgID8gKChzdGF0ZU5vZGUgPSBnZXRMaXN0ZW5lcih0YXJnZXQsIHJlZ2lzdHJhdGlvbk5hbWUpKSxcbiAgICAgICAgICAgICAgbnVsbCAhPSBzdGF0ZU5vZGUgJiZcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIodGFyZ2V0LCBzdGF0ZU5vZGUsIGFsdGVybmF0ZSlcbiAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgOiBpbkNhcHR1cmVQaGFzZSB8fFxuICAgICAgICAgICAgICAoKHN0YXRlTm9kZSA9IGdldExpc3RlbmVyKHRhcmdldCwgcmVnaXN0cmF0aW9uTmFtZSkpLFxuICAgICAgICAgICAgICBudWxsICE9IHN0YXRlTm9kZSAmJlxuICAgICAgICAgICAgICAgIGxpc3RlbmVycy5wdXNoKFxuICAgICAgICAgICAgICAgICAgY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcih0YXJnZXQsIHN0YXRlTm9kZSwgYWx0ZXJuYXRlKVxuICAgICAgICAgICAgICAgICkpKTtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnJldHVybjtcbiAgICAgIH1cbiAgICAgIDAgIT09IGxpc3RlbmVycy5sZW5ndGggJiZcbiAgICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHsgZXZlbnQ6IGV2ZW50LCBsaXN0ZW5lcnM6IGxpc3RlbmVycyB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0eXBlLCBwcm9wcykge1xuICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzJDIodHlwZSwgcHJvcHMpO1xuICAgICAgKFwiaW5wdXRcIiAhPT0gdHlwZSAmJiBcInRleHRhcmVhXCIgIT09IHR5cGUgJiYgXCJzZWxlY3RcIiAhPT0gdHlwZSkgfHxcbiAgICAgICAgbnVsbCA9PSBwcm9wcyB8fFxuICAgICAgICBudWxsICE9PSBwcm9wcy52YWx1ZSB8fFxuICAgICAgICBkaWRXYXJuVmFsdWVOdWxsIHx8XG4gICAgICAgICgoZGlkV2FyblZhbHVlTnVsbCA9ICEwKSxcbiAgICAgICAgXCJzZWxlY3RcIiA9PT0gdHlwZSAmJiBwcm9wcy5tdWx0aXBsZVxuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJgdmFsdWVgIHByb3Agb24gYCVzYCBzaG91bGQgbm90IGJlIG51bGwuIENvbnNpZGVyIHVzaW5nIGFuIGVtcHR5IGFycmF5IHdoZW4gYG11bHRpcGxlYCBpcyBzZXQgdG8gYHRydWVgIHRvIGNsZWFyIHRoZSBjb21wb25lbnQgb3IgYHVuZGVmaW5lZGAgZm9yIHVuY29udHJvbGxlZCBjb21wb25lbnRzLlwiLFxuICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcImB2YWx1ZWAgcHJvcCBvbiBgJXNgIHNob3VsZCBub3QgYmUgbnVsbC4gQ29uc2lkZXIgdXNpbmcgYW4gZW1wdHkgc3RyaW5nIHRvIGNsZWFyIHRoZSBjb21wb25lbnQgb3IgYHVuZGVmaW5lZGAgZm9yIHVuY29udHJvbGxlZCBjb21wb25lbnRzLlwiLFxuICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICApKTtcbiAgICAgIHZhciBldmVudFJlZ2lzdHJ5ID0ge1xuICAgICAgICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzOiByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLFxuICAgICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzOiBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzXG4gICAgICB9O1xuICAgICAgaXNDdXN0b21FbGVtZW50KHR5cGUpIHx8XG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwcm9wcy5pcyB8fFxuICAgICAgICB3YXJuVW5rbm93blByb3BlcnRpZXModHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpO1xuICAgICAgcHJvcHMuY29udGVudEVkaXRhYmxlICYmXG4gICAgICAgICFwcm9wcy5zdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgJiZcbiAgICAgICAgbnVsbCAhPSBwcm9wcy5jaGlsZHJlbiAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQSBjb21wb25lbnQgaXMgYGNvbnRlbnRFZGl0YWJsZWAgYW5kIGNvbnRhaW5zIGBjaGlsZHJlbmAgbWFuYWdlZCBieSBSZWFjdC4gSXQgaXMgbm93IHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gZ3VhcmFudGVlIHRoYXQgbm9uZSBvZiB0aG9zZSBub2RlcyBhcmUgdW5leHBlY3RlZGx5IG1vZGlmaWVkIG9yIGR1cGxpY2F0ZWQuIFRoaXMgaXMgcHJvYmFibHkgbm90IGludGVudGlvbmFsLlwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgIHByb3BOYW1lLFxuICAgICAgc2VydmVyVmFsdWUsXG4gICAgICBjbGllbnRWYWx1ZSxcbiAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgKSB7XG4gICAgICBzZXJ2ZXJWYWx1ZSAhPT0gY2xpZW50VmFsdWUgJiZcbiAgICAgICAgKChjbGllbnRWYWx1ZSA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShjbGllbnRWYWx1ZSkpLFxuICAgICAgICBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoc2VydmVyVmFsdWUpICE9PSBjbGllbnRWYWx1ZSAmJlxuICAgICAgICAgIChzZXJ2ZXJEaWZmZXJlbmNlc1twcm9wTmFtZV0gPSBzZXJ2ZXJWYWx1ZSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzKFxuICAgICAgZG9tRWxlbWVudCxcbiAgICAgIGF0dHJpYnV0ZU5hbWVzLFxuICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICApIHtcbiAgICAgIGF0dHJpYnV0ZU5hbWVzLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNbZ2V0UHJvcE5hbWVGcm9tQXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKV0gPVxuICAgICAgICAgIFwic3R5bGVcIiA9PT0gYXR0cmlidXRlTmFtZVxuICAgICAgICAgICAgPyBnZXRTdHlsZXNPYmplY3RGcm9tRWxlbWVudChkb21FbGVtZW50KVxuICAgICAgICAgICAgOiBkb21FbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXIpIHtcbiAgICAgICExID09PSBsaXN0ZW5lclxuICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIkV4cGVjdGVkIGAlc2AgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYGZhbHNlYC5cXG5cXG5JZiB5b3UgdXNlZCB0byBjb25kaXRpb25hbGx5IG9taXQgaXQgd2l0aCAlcz17Y29uZGl0aW9uICYmIHZhbHVlfSwgcGFzcyAlcz17Y29uZGl0aW9uID8gdmFsdWUgOiB1bmRlZmluZWR9IGluc3RlYWQuXCIsXG4gICAgICAgICAgICByZWdpc3RyYXRpb25OYW1lLFxuICAgICAgICAgICAgcmVnaXN0cmF0aW9uTmFtZSxcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWVcbiAgICAgICAgICApXG4gICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgYCVzYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBhIHZhbHVlIG9mIGAlc2AgdHlwZS5cIixcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbk5hbWUsXG4gICAgICAgICAgICB0eXBlb2YgbGlzdGVuZXJcbiAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub3JtYWxpemVIVE1MKHBhcmVudCwgaHRtbCkge1xuICAgICAgcGFyZW50ID1cbiAgICAgICAgcGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSF9OQU1FU1BBQ0UgfHxcbiAgICAgICAgcGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRVxuICAgICAgICAgID8gcGFyZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFxuICAgICAgICAgICAgICBwYXJlbnQubmFtZXNwYWNlVVJJLFxuICAgICAgICAgICAgICBwYXJlbnQudGFnTmFtZVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogcGFyZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChwYXJlbnQudGFnTmFtZSk7XG4gICAgICBwYXJlbnQuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIHJldHVybiBwYXJlbnQuaW5uZXJIVE1MO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUobWFya3VwKSB7XG4gICAgICB3aWxsQ29lcmNpb25UaHJvdyhtYXJrdXApICYmXG4gICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiVGhlIHByb3ZpZGVkIEhUTUwgbWFya3VwIHVzZXMgYSB2YWx1ZSBvZiB1bnN1cHBvcnRlZCB0eXBlICVzLiBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS5cIixcbiAgICAgICAgICB0eXBlTmFtZShtYXJrdXApXG4gICAgICAgICksXG4gICAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbihtYXJrdXApKTtcbiAgICAgIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG1hcmt1cCA/IG1hcmt1cCA6IFwiXCIgKyBtYXJrdXApXG4gICAgICAgIC5yZXBsYWNlKE5PUk1BTElaRV9ORVdMSU5FU19SRUdFWCwgXCJcXG5cIilcbiAgICAgICAgLnJlcGxhY2UoTk9STUFMSVpFX05VTExfQU5EX1JFUExBQ0VNRU5UX1JFR0VYLCBcIlwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tGb3JVbm1hdGNoZWRUZXh0KHNlcnZlclRleHQsIGNsaWVudFRleHQpIHtcbiAgICAgIGNsaWVudFRleHQgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoY2xpZW50VGV4dCk7XG4gICAgICByZXR1cm4gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHNlcnZlclRleHQpID09PSBjbGllbnRUZXh0XG4gICAgICAgID8gITBcbiAgICAgICAgOiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIGtleSwgdmFsdWUsIHByb3BzLCBwcmV2VmFsdWUpIHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdmFsdWUpXG4gICAgICAgICAgICB2YWxpZGF0ZVRleHROZXN0aW5nKHZhbHVlLCB0YWcsICExKSxcbiAgICAgICAgICAgICAgXCJib2R5XCIgPT09IHRhZyB8fFxuICAgICAgICAgICAgICAgIChcInRleHRhcmVhXCIgPT09IHRhZyAmJiBcIlwiID09PSB2YWx1ZSkgfHxcbiAgICAgICAgICAgICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCB2YWx1ZSk7XG4gICAgICAgICAgZWxzZSBpZiAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHZhbHVlIHx8IFwiYmlnaW50XCIgPT09IHR5cGVvZiB2YWx1ZSlcbiAgICAgICAgICAgIHZhbGlkYXRlVGV4dE5lc3RpbmcoXCJcIiArIHZhbHVlLCB0YWcsICExKSxcbiAgICAgICAgICAgICAgXCJib2R5XCIgIT09IHRhZyAmJiBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCBcIlwiICsgdmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiY2xhc3NOYW1lXCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JLbm93bkF0dHJpYnV0ZShkb21FbGVtZW50LCBcImNsYXNzXCIsIHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInRhYkluZGV4XCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JLbm93bkF0dHJpYnV0ZShkb21FbGVtZW50LCBcInRhYmluZGV4XCIsIHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRpclwiOlxuICAgICAgICBjYXNlIFwicm9sZVwiOlxuICAgICAgICBjYXNlIFwidmlld0JveFwiOlxuICAgICAgICBjYXNlIFwid2lkdGhcIjpcbiAgICAgICAgY2FzZSBcImhlaWdodFwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yS25vd25BdHRyaWJ1dGUoZG9tRWxlbWVudCwga2V5LCB2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzdHlsZVwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yU3R5bGVzKGRvbUVsZW1lbnQsIHZhbHVlLCBwcmV2VmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZGF0YVwiOlxuICAgICAgICAgIGlmIChcIm9iamVjdFwiICE9PSB0YWcpIHtcbiAgICAgICAgICAgIHNldFZhbHVlRm9yS25vd25BdHRyaWJ1dGUoZG9tRWxlbWVudCwgXCJkYXRhXCIsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBcInNyY1wiOlxuICAgICAgICBjYXNlIFwiaHJlZlwiOlxuICAgICAgICAgIGlmIChcIlwiID09PSB2YWx1ZSAmJiAoXCJhXCIgIT09IHRhZyB8fCBcImhyZWZcIiAhPT0ga2V5KSkge1xuICAgICAgICAgICAgXCJzcmNcIiA9PT0ga2V5XG4gICAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICdBbiBlbXB0eSBzdHJpbmcgKFwiXCIpIHdhcyBwYXNzZWQgdG8gdGhlICVzIGF0dHJpYnV0ZS4gVGhpcyBtYXkgY2F1c2UgdGhlIGJyb3dzZXIgdG8gZG93bmxvYWQgdGhlIHdob2xlIHBhZ2UgYWdhaW4gb3ZlciB0aGUgbmV0d29yay4gVG8gZml4IHRoaXMsIGVpdGhlciBkbyBub3QgcmVuZGVyIHRoZSBlbGVtZW50IGF0IGFsbCBvciBwYXNzIG51bGwgdG8gJXMgaW5zdGVhZCBvZiBhbiBlbXB0eSBzdHJpbmcuJyxcbiAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgJ0FuIGVtcHR5IHN0cmluZyAoXCJcIikgd2FzIHBhc3NlZCB0byB0aGUgJXMgYXR0cmlidXRlLiBUbyBmaXggdGhpcywgZWl0aGVyIGRvIG5vdCByZW5kZXIgdGhlIGVsZW1lbnQgYXQgYWxsIG9yIHBhc3MgbnVsbCB0byAlcyBpbnN0ZWFkIG9mIGFuIGVtcHR5IHN0cmluZy4nLFxuICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbnVsbCA9PSB2YWx1ZSB8fFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUgfHxcbiAgICAgICAgICAgIFwic3ltYm9sXCIgPT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICAgICAgXCJib29sZWFuXCIgPT09IHR5cGVvZiB2YWx1ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBrZXkpO1xuICAgICAgICAgIHZhbHVlID0gc2FuaXRpemVVUkwoXCJcIiArIHZhbHVlKTtcbiAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImFjdGlvblwiOlxuICAgICAgICBjYXNlIFwiZm9ybUFjdGlvblwiOlxuICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgIChcImZvcm1cIiA9PT0gdGFnXG4gICAgICAgICAgICAgID8gXCJmb3JtQWN0aW9uXCIgPT09IGtleVxuICAgICAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJZb3UgY2FuIG9ubHkgcGFzcyB0aGUgZm9ybUFjdGlvbiBwcm9wIHRvIDxpbnB1dD4gb3IgPGJ1dHRvbj4uIFVzZSB0aGUgYWN0aW9uIHByb3Agb24gPGZvcm0+LlwiXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgKChudWxsID09IHByb3BzLmVuY1R5cGUgJiYgbnVsbCA9PSBwcm9wcy5tZXRob2QpIHx8XG4gICAgICAgICAgICAgICAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uTWV0aG9kIHx8XG4gICAgICAgICAgICAgICAgICAgICgoZGlkV2FybkZvcm1BY3Rpb25NZXRob2QgPSAhMCksXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJDYW5ub3Qgc3BlY2lmeSBhIGVuY1R5cGUgb3IgbWV0aG9kIGZvciBhIGZvcm0gdGhhdCBzcGVjaWZpZXMgYSBmdW5jdGlvbiBhcyB0aGUgYWN0aW9uLiBSZWFjdCBwcm92aWRlcyB0aG9zZSBhdXRvbWF0aWNhbGx5LiBUaGV5IHdpbGwgZ2V0IG92ZXJyaWRkZW4uXCJcbiAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICBudWxsID09IHByb3BzLnRhcmdldCB8fFxuICAgICAgICAgICAgICAgICAgICBkaWRXYXJuRm9ybUFjdGlvblRhcmdldCB8fFxuICAgICAgICAgICAgICAgICAgICAoKGRpZFdhcm5Gb3JtQWN0aW9uVGFyZ2V0ID0gITApLFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IHNwZWNpZnkgYSB0YXJnZXQgZm9yIGEgZm9ybSB0aGF0IHNwZWNpZmllcyBhIGZ1bmN0aW9uIGFzIHRoZSBhY3Rpb24uIFRoZSBmdW5jdGlvbiB3aWxsIGFsd2F5cyBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSB3aW5kb3cuXCJcbiAgICAgICAgICAgICAgICAgICAgKSkpXG4gICAgICAgICAgICAgIDogXCJpbnB1dFwiID09PSB0YWcgfHwgXCJidXR0b25cIiA9PT0gdGFnXG4gICAgICAgICAgICAgICAgPyBcImFjdGlvblwiID09PSBrZXlcbiAgICAgICAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIllvdSBjYW4gb25seSBwYXNzIHRoZSBhY3Rpb24gcHJvcCB0byA8Zm9ybT4uIFVzZSB0aGUgZm9ybUFjdGlvbiBwcm9wIG9uIDxpbnB1dD4gb3IgPGJ1dHRvbj4uXCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiBcImlucHV0XCIgIT09IHRhZyB8fFxuICAgICAgICAgICAgICAgICAgICAgIFwic3VibWl0XCIgPT09IHByb3BzLnR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICBcImltYWdlXCIgPT09IHByb3BzLnR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICBkaWRXYXJuRm9ybUFjdGlvblR5cGVcbiAgICAgICAgICAgICAgICAgICAgPyBcImJ1dHRvblwiICE9PSB0YWcgfHxcbiAgICAgICAgICAgICAgICAgICAgICBudWxsID09IHByb3BzLnR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICBcInN1Ym1pdFwiID09PSBwcm9wcy50eXBlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgZGlkV2FybkZvcm1BY3Rpb25UeXBlXG4gICAgICAgICAgICAgICAgICAgICAgPyBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gcHJvcHMubmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRXYXJuRm9ybUFjdGlvbk5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKChkaWRXYXJuRm9ybUFjdGlvbk5hbWUgPSAhMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBzcGVjaWZ5IGEgXCJuYW1lXCIgcHJvcCBmb3IgYSBidXR0b24gdGhhdCBzcGVjaWZpZXMgYSBmdW5jdGlvbiBhcyBhIGZvcm1BY3Rpb24uIFJlYWN0IG5lZWRzIGl0IHRvIGVuY29kZSB3aGljaCBhY3Rpb24gc2hvdWxkIGJlIGludm9rZWQuIEl0IHdpbGwgZ2V0IG92ZXJyaWRkZW4uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChudWxsID09IHByb3BzLmZvcm1FbmNUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgPT0gcHJvcHMuZm9ybU1ldGhvZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkV2FybkZvcm1BY3Rpb25NZXRob2QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKChkaWRXYXJuRm9ybUFjdGlvbk1ldGhvZCA9ICEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkNhbm5vdCBzcGVjaWZ5IGEgZm9ybUVuY1R5cGUgb3IgZm9ybU1ldGhvZCBmb3IgYSBidXR0b24gdGhhdCBzcGVjaWZpZXMgYSBmdW5jdGlvbiBhcyBhIGZvcm1BY3Rpb24uIFJlYWN0IHByb3ZpZGVzIHRob3NlIGF1dG9tYXRpY2FsbHkuIFRoZXkgd2lsbCBnZXQgb3ZlcnJpZGRlbi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgPT0gcHJvcHMuZm9ybVRhcmdldCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRXYXJuRm9ybUFjdGlvblRhcmdldCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRpZFdhcm5Gb3JtQWN0aW9uVGFyZ2V0ID0gITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IHNwZWNpZnkgYSBmb3JtVGFyZ2V0IGZvciBhIGJ1dHRvbiB0aGF0IHNwZWNpZmllcyBhIGZ1bmN0aW9uIGFzIGEgZm9ybUFjdGlvbi4gVGhlIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkIGluIHRoZSBzYW1lIHdpbmRvdy5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICApKSlcbiAgICAgICAgICAgICAgICAgICAgICA6ICgoZGlkV2FybkZvcm1BY3Rpb25UeXBlID0gITApLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0EgYnV0dG9uIGNhbiBvbmx5IHNwZWNpZnkgYSBmb3JtQWN0aW9uIGFsb25nIHdpdGggdHlwZT1cInN1Ym1pdFwiIG9yIG5vIHR5cGUuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICAgICAgOiAoKGRpZFdhcm5Gb3JtQWN0aW9uVHlwZSA9ICEwKSxcbiAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FuIGlucHV0IGNhbiBvbmx5IHNwZWNpZnkgYSBmb3JtQWN0aW9uIGFsb25nIHdpdGggdHlwZT1cInN1Ym1pdFwiIG9yIHR5cGU9XCJpbWFnZVwiLidcbiAgICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgIDogXCJhY3Rpb25cIiA9PT0ga2V5XG4gICAgICAgICAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgXCJZb3UgY2FuIG9ubHkgcGFzcyB0aGUgYWN0aW9uIHByb3AgdG8gPGZvcm0+LlwiXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIllvdSBjYW4gb25seSBwYXNzIHRoZSBmb3JtQWN0aW9uIHByb3AgdG8gPGlucHV0PiBvciA8YnV0dG9uPi5cIlxuICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICAgIGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKFxuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgIFwiamF2YXNjcmlwdDp0aHJvdyBuZXcgRXJyb3IoJ0EgUmVhY3QgZm9ybSB3YXMgdW5leHBlY3RlZGx5IHN1Ym1pdHRlZC4gSWYgeW91IGNhbGxlZCBmb3JtLnN1Ym1pdCgpIG1hbnVhbGx5LCBjb25zaWRlciB1c2luZyBmb3JtLnJlcXVlc3RTdWJtaXQoKSBpbnN0ZWFkLiBJZiB5b3VcXFxcJ3JlIHRyeWluZyB0byB1c2UgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkgaW4gYSBzdWJtaXQgZXZlbnQgaGFuZGxlciwgY29uc2lkZXIgYWxzbyBjYWxsaW5nIGV2ZW50LnByZXZlbnREZWZhdWx0KCkuJylcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcHJldlZhbHVlICYmXG4gICAgICAgICAgICAgIChcImZvcm1BY3Rpb25cIiA9PT0ga2V5XG4gICAgICAgICAgICAgICAgPyAoXCJpbnB1dFwiICE9PSB0YWcgJiZcbiAgICAgICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIFwibmFtZVwiLCBwcm9wcy5uYW1lLCBwcm9wcywgbnVsbCksXG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIFwiZm9ybUVuY1R5cGVcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuZm9ybUVuY1R5cGUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBcImZvcm1NZXRob2RcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuZm9ybU1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIFwiZm9ybVRhcmdldFwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5mb3JtVGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICA6IChzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIFwiZW5jVHlwZVwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wcy5lbmNUeXBlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBcIm1ldGhvZFwiLCBwcm9wcy5tZXRob2QsIHByb3BzLCBudWxsKSxcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBwcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgKSkpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG51bGwgPT0gdmFsdWUgfHxcbiAgICAgICAgICAgIFwic3ltYm9sXCIgPT09IHR5cGVvZiB2YWx1ZSB8fFxuICAgICAgICAgICAgXCJib29sZWFuXCIgPT09IHR5cGVvZiB2YWx1ZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBrZXkpO1xuICAgICAgICAgIHZhbHVlID0gc2FuaXRpemVVUkwoXCJcIiArIHZhbHVlKTtcbiAgICAgICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9uQ2xpY2tcIjpcbiAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKGtleSwgdmFsdWUpLFxuICAgICAgICAgICAgKGRvbUVsZW1lbnQub25jbGljayA9IG5vb3AkMSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib25TY3JvbGxcIjpcbiAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKGtleSwgdmFsdWUpLFxuICAgICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInNjcm9sbFwiLCBkb21FbGVtZW50KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJvblNjcm9sbEVuZFwiOlxuICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIoa2V5LCB2YWx1ZSksXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwic2Nyb2xsZW5kXCIsIGRvbUVsZW1lbnQpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgaWYgKG51bGwgIT0gdmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChcIm9iamVjdFwiICE9PSB0eXBlb2YgdmFsdWUgfHwgIShcIl9faHRtbFwiIGluIHZhbHVlKSlcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIG11c3QgYmUgaW4gdGhlIGZvcm0gYHtfX2h0bWw6IC4uLn1gLiBQbGVhc2UgdmlzaXQgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9kYW5nZXJvdXNseS1zZXQtaW5uZXItaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAga2V5ID0gdmFsdWUuX19odG1sO1xuICAgICAgICAgICAgaWYgKG51bGwgIT0ga2V5KSB7XG4gICAgICAgICAgICAgIGlmIChudWxsICE9IHByb3BzLmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJDYW4gb25seSBzZXQgb25lIG9mIGBjaGlsZHJlbmAgb3IgYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGRvbUVsZW1lbnQuaW5uZXJIVE1MID0ga2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm11bHRpcGxlXCI6XG4gICAgICAgICAgZG9tRWxlbWVudC5tdWx0aXBsZSA9XG4gICAgICAgICAgICB2YWx1ZSAmJiBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJiBcInN5bWJvbFwiICE9PSB0eXBlb2YgdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJtdXRlZFwiOlxuICAgICAgICAgIGRvbUVsZW1lbnQubXV0ZWQgPVxuICAgICAgICAgICAgdmFsdWUgJiYgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiYgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHZhbHVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCI6XG4gICAgICAgIGNhc2UgXCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmdcIjpcbiAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICBjYXNlIFwiZGVmYXVsdENoZWNrZWRcIjpcbiAgICAgICAgY2FzZSBcImlubmVySFRNTFwiOlxuICAgICAgICBjYXNlIFwicmVmXCI6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJhdXRvRm9jdXNcIjpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhsaW5rSHJlZlwiOlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG51bGwgPT0gdmFsdWUgfHxcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgICBcImJvb2xlYW5cIiA9PT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgICBcInN5bWJvbFwiID09PSB0eXBlb2YgdmFsdWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwieGxpbms6aHJlZlwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBrZXkpO1xuICAgICAgICAgIGtleSA9IHNhbml0aXplVVJMKFwiXCIgKyB2YWx1ZSk7XG4gICAgICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGVOUyh4bGlua05hbWVzcGFjZSwgXCJ4bGluazpocmVmXCIsIGtleSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjb250ZW50RWRpdGFibGVcIjpcbiAgICAgICAgY2FzZSBcInNwZWxsQ2hlY2tcIjpcbiAgICAgICAgY2FzZSBcImRyYWdnYWJsZVwiOlxuICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgY2FzZSBcImF1dG9SZXZlcnNlXCI6XG4gICAgICAgIGNhc2UgXCJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkXCI6XG4gICAgICAgIGNhc2UgXCJmb2N1c2FibGVcIjpcbiAgICAgICAgY2FzZSBcInByZXNlcnZlQWxwaGFcIjpcbiAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICBcInN5bWJvbFwiICE9PSB0eXBlb2YgdmFsdWVcbiAgICAgICAgICAgID8gKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGtleSksXG4gICAgICAgICAgICAgIGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgXCJcIiArIHZhbHVlKSlcbiAgICAgICAgICAgIDogZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImluZXJ0XCI6XG4gICAgICAgICAgXCJcIiAhPT0gdmFsdWUgfHxcbiAgICAgICAgICAgIGRpZFdhcm5Gb3JOZXdCb29sZWFuUHJvcHNXaXRoRW1wdHlWYWx1ZVtrZXldIHx8XG4gICAgICAgICAgICAoKGRpZFdhcm5Gb3JOZXdCb29sZWFuUHJvcHNXaXRoRW1wdHlWYWx1ZVtrZXldID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWNlaXZlZCBhbiBlbXB0eSBzdHJpbmcgZm9yIGEgYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC4gVGhpcyB3aWxsIHRyZWF0IHRoZSBhdHRyaWJ1dGUgYXMgaWYgaXQgd2VyZSBmYWxzZS4gRWl0aGVyIHBhc3MgYGZhbHNlYCB0byBzaWxlbmNlIHRoaXMgd2FybmluZywgb3IgcGFzcyBgdHJ1ZWAgaWYgeW91IHVzZWQgYW4gZW1wdHkgc3RyaW5nIGluIGVhcmxpZXIgdmVyc2lvbnMgb2YgUmVhY3QgdG8gaW5kaWNhdGUgdGhpcyBhdHRyaWJ1dGUgaXMgdHJ1ZS5cIixcbiAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICApKTtcbiAgICAgICAgY2FzZSBcImFsbG93RnVsbFNjcmVlblwiOlxuICAgICAgICBjYXNlIFwiYXN5bmNcIjpcbiAgICAgICAgY2FzZSBcImF1dG9QbGF5XCI6XG4gICAgICAgIGNhc2UgXCJjb250cm9sc1wiOlxuICAgICAgICBjYXNlIFwiZGVmYXVsdFwiOlxuICAgICAgICBjYXNlIFwiZGVmZXJcIjpcbiAgICAgICAgY2FzZSBcImRpc2FibGVkXCI6XG4gICAgICAgIGNhc2UgXCJkaXNhYmxlUGljdHVyZUluUGljdHVyZVwiOlxuICAgICAgICBjYXNlIFwiZGlzYWJsZVJlbW90ZVBsYXliYWNrXCI6XG4gICAgICAgIGNhc2UgXCJmb3JtTm9WYWxpZGF0ZVwiOlxuICAgICAgICBjYXNlIFwiaGlkZGVuXCI6XG4gICAgICAgIGNhc2UgXCJsb29wXCI6XG4gICAgICAgIGNhc2UgXCJub01vZHVsZVwiOlxuICAgICAgICBjYXNlIFwibm9WYWxpZGF0ZVwiOlxuICAgICAgICBjYXNlIFwib3BlblwiOlxuICAgICAgICBjYXNlIFwicGxheXNJbmxpbmVcIjpcbiAgICAgICAgY2FzZSBcInJlYWRPbmx5XCI6XG4gICAgICAgIGNhc2UgXCJyZXF1aXJlZFwiOlxuICAgICAgICBjYXNlIFwicmV2ZXJzZWRcIjpcbiAgICAgICAgY2FzZSBcInNjb3BlZFwiOlxuICAgICAgICBjYXNlIFwic2VhbWxlc3NcIjpcbiAgICAgICAgY2FzZSBcIml0ZW1TY29wZVwiOlxuICAgICAgICAgIHZhbHVlICYmIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmIFwic3ltYm9sXCIgIT09IHR5cGVvZiB2YWx1ZVxuICAgICAgICAgICAgPyBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIFwiXCIpXG4gICAgICAgICAgICA6IGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjYXB0dXJlXCI6XG4gICAgICAgIGNhc2UgXCJkb3dubG9hZFwiOlxuICAgICAgICAgICEwID09PSB2YWx1ZVxuICAgICAgICAgICAgPyBkb21FbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIFwiXCIpXG4gICAgICAgICAgICA6ICExICE9PSB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiB2YWx1ZVxuICAgICAgICAgICAgICA/IChjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBrZXkpLFxuICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpKVxuICAgICAgICAgICAgICA6IGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjb2xzXCI6XG4gICAgICAgIGNhc2UgXCJyb3dzXCI6XG4gICAgICAgIGNhc2UgXCJzaXplXCI6XG4gICAgICAgIGNhc2UgXCJzcGFuXCI6XG4gICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgIWlzTmFOKHZhbHVlKSAmJlxuICAgICAgICAgIDEgPD0gdmFsdWVcbiAgICAgICAgICAgID8gKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGtleSksXG4gICAgICAgICAgICAgIGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpKVxuICAgICAgICAgICAgOiBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicm93U3BhblwiOlxuICAgICAgICBjYXNlIFwic3RhcnRcIjpcbiAgICAgICAgICBudWxsID09IHZhbHVlIHx8XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUgfHxcbiAgICAgICAgICBcInN5bWJvbFwiID09PSB0eXBlb2YgdmFsdWUgfHxcbiAgICAgICAgICBpc05hTih2YWx1ZSlcbiAgICAgICAgICAgID8gZG9tRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoa2V5KVxuICAgICAgICAgICAgOiAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwga2V5KSxcbiAgICAgICAgICAgICAgZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicG9wb3ZlclwiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJiZWZvcmV0b2dnbGVcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInRvZ2dsZVwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBzZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBcInBvcG92ZXJcIiwgdmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwieGxpbmtBY3R1YXRlXCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKFxuICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgIHhsaW5rTmFtZXNwYWNlLFxuICAgICAgICAgICAgXCJ4bGluazphY3R1YXRlXCIsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ4bGlua0FyY3JvbGVcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgeGxpbmtOYW1lc3BhY2UsXG4gICAgICAgICAgICBcInhsaW5rOmFyY3JvbGVcIixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhsaW5rUm9sZVwiOlxuICAgICAgICAgIHNldFZhbHVlRm9yTmFtZXNwYWNlZEF0dHJpYnV0ZShcbiAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICB4bGlua05hbWVzcGFjZSxcbiAgICAgICAgICAgIFwieGxpbms6cm9sZVwiLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwieGxpbmtTaG93XCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKFxuICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgIHhsaW5rTmFtZXNwYWNlLFxuICAgICAgICAgICAgXCJ4bGluazpzaG93XCIsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ4bGlua1RpdGxlXCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKFxuICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgIHhsaW5rTmFtZXNwYWNlLFxuICAgICAgICAgICAgXCJ4bGluazp0aXRsZVwiLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwieGxpbmtUeXBlXCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKFxuICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgIHhsaW5rTmFtZXNwYWNlLFxuICAgICAgICAgICAgXCJ4bGluazp0eXBlXCIsXG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJ4bWxCYXNlXCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JOYW1lc3BhY2VkQXR0cmlidXRlKFxuICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgIHhtbE5hbWVzcGFjZSxcbiAgICAgICAgICAgIFwieG1sOmJhc2VcIixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInhtbExhbmdcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgeG1sTmFtZXNwYWNlLFxuICAgICAgICAgICAgXCJ4bWw6bGFuZ1wiLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwieG1sU3BhY2VcIjpcbiAgICAgICAgICBzZXRWYWx1ZUZvck5hbWVzcGFjZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgeG1sTmFtZXNwYWNlLFxuICAgICAgICAgICAgXCJ4bWw6c3BhY2VcIixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImlzXCI6XG4gICAgICAgICAgbnVsbCAhPSBwcmV2VmFsdWUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICdDYW5ub3QgdXBkYXRlIHRoZSBcImlzXCIgcHJvcCBhZnRlciBpdCBoYXMgYmVlbiBpbml0aWFsaXplZC4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHNldFZhbHVlRm9yQXR0cmlidXRlKGRvbUVsZW1lbnQsIFwiaXNcIiwgdmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW5uZXJUZXh0XCI6XG4gICAgICAgIGNhc2UgXCJ0ZXh0Q29udGVudFwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicG9wb3ZlclRhcmdldFwiOlxuICAgICAgICAgIGRpZFdhcm5Qb3BvdmVyVGFyZ2V0T2JqZWN0IHx8XG4gICAgICAgICAgICBudWxsID09IHZhbHVlIHx8XG4gICAgICAgICAgICBcIm9iamVjdFwiICE9PSB0eXBlb2YgdmFsdWUgfHxcbiAgICAgICAgICAgICgoZGlkV2FyblBvcG92ZXJUYXJnZXRPYmplY3QgPSAhMCksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlRoZSBgcG9wb3ZlclRhcmdldGAgcHJvcCBleHBlY3RzIHRoZSBJRCBvZiBhbiBFbGVtZW50IGFzIGEgc3RyaW5nLiBSZWNlaXZlZCAlcyBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgKSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgISgyIDwga2V5Lmxlbmd0aCkgfHxcbiAgICAgICAgICAoXCJvXCIgIT09IGtleVswXSAmJiBcIk9cIiAhPT0ga2V5WzBdKSB8fFxuICAgICAgICAgIChcIm5cIiAhPT0ga2V5WzFdICYmIFwiTlwiICE9PSBrZXlbMV0pXG4gICAgICAgICAgICA/ICgoa2V5ID0gZ2V0QXR0cmlidXRlQWxpYXMoa2V5KSksXG4gICAgICAgICAgICAgIHNldFZhbHVlRm9yQXR0cmlidXRlKGRvbUVsZW1lbnQsIGtleSwgdmFsdWUpKVxuICAgICAgICAgICAgOiByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KGtleSkgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldFByb3BPbkN1c3RvbUVsZW1lbnQoXG4gICAgICBkb21FbGVtZW50LFxuICAgICAgdGFnLFxuICAgICAga2V5LFxuICAgICAgdmFsdWUsXG4gICAgICBwcm9wcyxcbiAgICAgIHByZXZWYWx1ZVxuICAgICkge1xuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgc2V0VmFsdWVGb3JTdHlsZXMoZG9tRWxlbWVudCwgdmFsdWUsIHByZXZWYWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgIGlmIChudWxsICE9IHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoXCJvYmplY3RcIiAhPT0gdHlwZW9mIHZhbHVlIHx8ICEoXCJfX2h0bWxcIiBpbiB2YWx1ZSkpXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBtdXN0IGJlIGluIHRoZSBmb3JtIGB7X19odG1sOiAuLi59YC4gUGxlYXNlIHZpc2l0IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvZGFuZ2Vyb3VzbHktc2V0LWlubmVyLWh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGtleSA9IHZhbHVlLl9faHRtbDtcbiAgICAgICAgICAgIGlmIChudWxsICE9IGtleSkge1xuICAgICAgICAgICAgICBpZiAobnVsbCAhPSBwcm9wcy5jaGlsZHJlbilcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiQ2FuIG9ubHkgc2V0IG9uZSBvZiBgY2hpbGRyZW5gIG9yIGBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAuXCJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBkb21FbGVtZW50LmlubmVySFRNTCA9IGtleTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiB2YWx1ZVxuICAgICAgICAgICAgPyBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCB2YWx1ZSlcbiAgICAgICAgICAgIDogKFwibnVtYmVyXCIgPT09IHR5cGVvZiB2YWx1ZSB8fCBcImJpZ2ludFwiID09PSB0eXBlb2YgdmFsdWUpICYmXG4gICAgICAgICAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIFwiXCIgKyB2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJvblNjcm9sbFwiOlxuICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIoa2V5LCB2YWx1ZSksXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwic2Nyb2xsXCIsIGRvbUVsZW1lbnQpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm9uU2Nyb2xsRW5kXCI6XG4gICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihrZXksIHZhbHVlKSxcbiAgICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJzY3JvbGxlbmRcIiwgZG9tRWxlbWVudCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwib25DbGlja1wiOlxuICAgICAgICAgIG51bGwgIT0gdmFsdWUgJiZcbiAgICAgICAgICAgIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIoa2V5LCB2YWx1ZSksXG4gICAgICAgICAgICAoZG9tRWxlbWVudC5vbmNsaWNrID0gbm9vcCQxKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIjpcbiAgICAgICAgY2FzZSBcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiOlxuICAgICAgICBjYXNlIFwiaW5uZXJIVE1MXCI6XG4gICAgICAgIGNhc2UgXCJyZWZcIjpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImlubmVyVGV4dFwiOlxuICAgICAgICBjYXNlIFwidGV4dENvbnRlbnRcIjpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShrZXkpKVxuICAgICAgICAgICAgbnVsbCAhPSB2YWx1ZSAmJlxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiB2YWx1ZSAmJlxuICAgICAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgXCJvXCIgPT09IGtleVswXSAmJlxuICAgICAgICAgICAgICAgIFwiblwiID09PSBrZXlbMV0gJiZcbiAgICAgICAgICAgICAgICAoKHByb3BzID0ga2V5LmVuZHNXaXRoKFwiQ2FwdHVyZVwiKSksXG4gICAgICAgICAgICAgICAgKHRhZyA9IGtleS5zbGljZSgyLCBwcm9wcyA/IGtleS5sZW5ndGggLSA3IDogdm9pZCAwKSksXG4gICAgICAgICAgICAgICAgKHByZXZWYWx1ZSA9IGRvbUVsZW1lbnRbaW50ZXJuYWxQcm9wc0tleV0gfHwgbnVsbCksXG4gICAgICAgICAgICAgICAgKHByZXZWYWx1ZSA9IG51bGwgIT0gcHJldlZhbHVlID8gcHJldlZhbHVlW2tleV0gOiBudWxsKSxcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwcmV2VmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0YWcsIHByZXZWYWx1ZSwgcHJvcHMpLFxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHZhbHVlKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBwcmV2VmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IHByZXZWYWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgKGtleSBpbiBkb21FbGVtZW50XG4gICAgICAgICAgICAgICAgICAgID8gKGRvbUVsZW1lbnRba2V5XSA9IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIDogZG9tRWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGtleSkpO1xuICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0YWcsIHZhbHVlLCBwcm9wcyk7XG4gICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBrZXkgaW4gZG9tRWxlbWVudFxuICAgICAgICAgICAgICAgID8gKGRvbUVsZW1lbnRba2V5XSA9IHZhbHVlKVxuICAgICAgICAgICAgICAgIDogITAgPT09IHZhbHVlXG4gICAgICAgICAgICAgICAgICA/IGRvbUVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgXCJcIilcbiAgICAgICAgICAgICAgICAgIDogc2V0VmFsdWVGb3JBdHRyaWJ1dGUoZG9tRWxlbWVudCwga2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldEluaXRpYWxQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgcHJvcHMpIHtcbiAgICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCBwcm9wcyk7XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIFwiZGl2XCI6XG4gICAgICAgIGNhc2UgXCJzcGFuXCI6XG4gICAgICAgIGNhc2UgXCJzdmdcIjpcbiAgICAgICAgY2FzZSBcInBhdGhcIjpcbiAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgY2FzZSBcImdcIjpcbiAgICAgICAgY2FzZSBcInBcIjpcbiAgICAgICAgY2FzZSBcImxpXCI6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbWdcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiZXJyb3JcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImxvYWRcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgdmFyIGhhc1NyYyA9ICExLFxuICAgICAgICAgICAgaGFzU3JjU2V0ID0gITEsXG4gICAgICAgICAgICBwcm9wS2V5O1xuICAgICAgICAgIGZvciAocHJvcEtleSBpbiBwcm9wcylcbiAgICAgICAgICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcEtleV07XG4gICAgICAgICAgICAgIGlmIChudWxsICE9IHByb3BWYWx1ZSlcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJzcmNcIjpcbiAgICAgICAgICAgICAgICAgICAgaGFzU3JjID0gITA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcInNyY1NldFwiOlxuICAgICAgICAgICAgICAgICAgICBoYXNTcmNTZXQgPSAhMDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICB0YWcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCIgaXMgYSB2b2lkIGVsZW1lbnQgdGFnIGFuZCBtdXN0IG5laXRoZXIgaGF2ZSBgY2hpbGRyZW5gIG5vciB1c2UgYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIHByb3BLZXksIHByb3BWYWx1ZSwgcHJvcHMsIG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBoYXNTcmNTZXQgJiZcbiAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBcInNyY1NldFwiLCBwcm9wcy5zcmNTZXQsIHByb3BzLCBudWxsKTtcbiAgICAgICAgICBoYXNTcmMgJiYgc2V0UHJvcChkb21FbGVtZW50LCB0YWcsIFwic3JjXCIsIHByb3BzLnNyYywgcHJvcHMsIG51bGwpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcImlucHV0XCI6XG4gICAgICAgICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcyhcImlucHV0XCIsIHByb3BzKTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiaW52YWxpZFwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICB2YXIgZGVmYXVsdFZhbHVlID0gKHByb3BLZXkgPSBwcm9wVmFsdWUgPSBoYXNTcmNTZXQgPSBudWxsKSxcbiAgICAgICAgICAgIGNoZWNrZWQgPSBudWxsLFxuICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQgPSBudWxsO1xuICAgICAgICAgIGZvciAoaGFzU3JjIGluIHByb3BzKVxuICAgICAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KGhhc1NyYykpIHtcbiAgICAgICAgICAgICAgdmFyIF9wcm9wVmFsdWUgPSBwcm9wc1toYXNTcmNdO1xuICAgICAgICAgICAgICBpZiAobnVsbCAhPSBfcHJvcFZhbHVlKVxuICAgICAgICAgICAgICAgIHN3aXRjaCAoaGFzU3JjKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwibmFtZVwiOlxuICAgICAgICAgICAgICAgICAgICBoYXNTcmNTZXQgPSBfcHJvcFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJ0eXBlXCI6XG4gICAgICAgICAgICAgICAgICAgIHByb3BWYWx1ZSA9IF9wcm9wVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImNoZWNrZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IF9wcm9wVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRDaGVja2VkXCI6XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkID0gX3Byb3BWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSA9IF9wcm9wVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBfcHJvcFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9IF9wcm9wVmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIHVzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgaGFzU3JjLCBfcHJvcFZhbHVlLCBwcm9wcywgbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIHZhbGlkYXRlSW5wdXRQcm9wcyhkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICAgICAgaW5pdElucHV0KFxuICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICBjaGVja2VkLFxuICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQsXG4gICAgICAgICAgICBwcm9wVmFsdWUsXG4gICAgICAgICAgICBoYXNTcmNTZXQsXG4gICAgICAgICAgICAhMVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcyhcInNlbGVjdFwiLCBwcm9wcyk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImludmFsaWRcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgaGFzU3JjID0gcHJvcFZhbHVlID0gcHJvcEtleSA9IG51bGw7XG4gICAgICAgICAgZm9yIChoYXNTcmNTZXQgaW4gcHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHByb3BzLmhhc093blByb3BlcnR5KGhhc1NyY1NldCkgJiZcbiAgICAgICAgICAgICAgKChkZWZhdWx0VmFsdWUgPSBwcm9wc1toYXNTcmNTZXRdKSwgbnVsbCAhPSBkZWZhdWx0VmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN3aXRjaCAoaGFzU3JjU2V0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBwcm9wS2V5ID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRWYWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgcHJvcFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm11bHRpcGxlXCI6XG4gICAgICAgICAgICAgICAgICBoYXNTcmMgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgaGFzU3JjU2V0LFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgdmFsaWRhdGVTZWxlY3RQcm9wcyhkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICAgICAgdGFnID0gcHJvcEtleTtcbiAgICAgICAgICBwcm9wcyA9IHByb3BWYWx1ZTtcbiAgICAgICAgICBkb21FbGVtZW50Lm11bHRpcGxlID0gISFoYXNTcmM7XG4gICAgICAgICAgbnVsbCAhPSB0YWdcbiAgICAgICAgICAgID8gdXBkYXRlT3B0aW9ucyhkb21FbGVtZW50LCAhIWhhc1NyYywgdGFnLCAhMSlcbiAgICAgICAgICAgIDogbnVsbCAhPSBwcm9wcyAmJiB1cGRhdGVPcHRpb25zKGRvbUVsZW1lbnQsICEhaGFzU3JjLCBwcm9wcywgITApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcInRleHRhcmVhXCI6XG4gICAgICAgICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcyhcInRleHRhcmVhXCIsIHByb3BzKTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiaW52YWxpZFwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBwcm9wS2V5ID0gaGFzU3JjU2V0ID0gaGFzU3JjID0gbnVsbDtcbiAgICAgICAgICBmb3IgKHByb3BWYWx1ZSBpbiBwcm9wcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcHJvcHMuaGFzT3duUHJvcGVydHkocHJvcFZhbHVlKSAmJlxuICAgICAgICAgICAgICAoKGRlZmF1bHRWYWx1ZSA9IHByb3BzW3Byb3BWYWx1ZV0pLCBudWxsICE9IGRlZmF1bHRWYWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoIChwcm9wVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIGhhc1NyYyA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIGhhc1NyY1NldCA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGlsZHJlblwiOlxuICAgICAgICAgICAgICAgICAgcHJvcEtleSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gZGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcImBkYW5nZXJvdXNseVNldElubmVySFRNTGAgZG9lcyBub3QgbWFrZSBzZW5zZSBvbiA8dGV4dGFyZWE+LlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBwcm9wVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB2YWxpZGF0ZVRleHRhcmVhUHJvcHMoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgICAgIGluaXRUZXh0YXJlYShkb21FbGVtZW50LCBoYXNTcmMsIGhhc1NyY1NldCwgcHJvcEtleSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFwib3B0aW9uXCI6XG4gICAgICAgICAgdmFsaWRhdGVPcHRpb25Qcm9wcyhkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICAgICAgZm9yIChjaGVja2VkIGluIHByb3BzKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBwcm9wcy5oYXNPd25Qcm9wZXJ0eShjaGVja2VkKSAmJlxuICAgICAgICAgICAgICAoKGhhc1NyYyA9IHByb3BzW2NoZWNrZWRdKSwgbnVsbCAhPSBoYXNTcmMpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN3aXRjaCAoY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzZWxlY3RlZFwiOlxuICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudC5zZWxlY3RlZCA9XG4gICAgICAgICAgICAgICAgICAgIGhhc1NyYyAmJlxuICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBoYXNTcmMgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIGhhc1NyYztcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgY2hlY2tlZCwgaGFzU3JjLCBwcm9wcywgbnVsbCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJkaWFsb2dcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiYmVmb3JldG9nZ2xlXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJ0b2dnbGVcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImNhbmNlbFwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiY2xvc2VcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpZnJhbWVcIjpcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoXCJsb2FkXCIsIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwidmlkZW9cIjpcbiAgICAgICAgY2FzZSBcImF1ZGlvXCI6XG4gICAgICAgICAgZm9yIChoYXNTcmMgPSAwOyBoYXNTcmMgPCBtZWRpYUV2ZW50VHlwZXMubGVuZ3RoOyBoYXNTcmMrKylcbiAgICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQobWVkaWFFdmVudFR5cGVzW2hhc1NyY10sIGRvbUVsZW1lbnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiaW1hZ2VcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiZXJyb3JcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcImxvYWRcIiwgZG9tRWxlbWVudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJkZXRhaWxzXCI6XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChcInRvZ2dsZVwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImVtYmVkXCI6XG4gICAgICAgIGNhc2UgXCJzb3VyY2VcIjpcbiAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwiZXJyb3JcIiwgZG9tRWxlbWVudCksXG4gICAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KFwibG9hZFwiLCBkb21FbGVtZW50KTtcbiAgICAgICAgY2FzZSBcImFyZWFcIjpcbiAgICAgICAgY2FzZSBcImJhc2VcIjpcbiAgICAgICAgY2FzZSBcImJyXCI6XG4gICAgICAgIGNhc2UgXCJjb2xcIjpcbiAgICAgICAgY2FzZSBcImhyXCI6XG4gICAgICAgIGNhc2UgXCJrZXlnZW5cIjpcbiAgICAgICAgY2FzZSBcIm1ldGFcIjpcbiAgICAgICAgY2FzZSBcInBhcmFtXCI6XG4gICAgICAgIGNhc2UgXCJ0cmFja1wiOlxuICAgICAgICBjYXNlIFwid2JyXCI6XG4gICAgICAgIGNhc2UgXCJtZW51aXRlbVwiOlxuICAgICAgICAgIGZvciAoZGVmYXVsdENoZWNrZWQgaW4gcHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHByb3BzLmhhc093blByb3BlcnR5KGRlZmF1bHRDaGVja2VkKSAmJlxuICAgICAgICAgICAgICAoKGhhc1NyYyA9IHByb3BzW2RlZmF1bHRDaGVja2VkXSksIG51bGwgIT0gaGFzU3JjKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKGRlZmF1bHRDaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgdGFnICtcbiAgICAgICAgICAgICAgICAgICAgICBcIiBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIHVzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgZGVmYXVsdENoZWNrZWQsIGhhc1NyYywgcHJvcHMsIG51bGwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChpc0N1c3RvbUVsZW1lbnQodGFnKSkge1xuICAgICAgICAgICAgZm9yIChfcHJvcFZhbHVlIGluIHByb3BzKVxuICAgICAgICAgICAgICBwcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcFZhbHVlKSAmJlxuICAgICAgICAgICAgICAgICgoaGFzU3JjID0gcHJvcHNbX3Byb3BWYWx1ZV0pLFxuICAgICAgICAgICAgICAgIHZvaWQgMCAhPT0gaGFzU3JjICYmXG4gICAgICAgICAgICAgICAgICBzZXRQcm9wT25DdXN0b21FbGVtZW50KFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIF9wcm9wVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGhhc1NyYyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIHZvaWQgMFxuICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChkZWZhdWx0VmFsdWUgaW4gcHJvcHMpXG4gICAgICAgIHByb3BzLmhhc093blByb3BlcnR5KGRlZmF1bHRWYWx1ZSkgJiZcbiAgICAgICAgICAoKGhhc1NyYyA9IHByb3BzW2RlZmF1bHRWYWx1ZV0pLFxuICAgICAgICAgIG51bGwgIT0gaGFzU3JjICYmXG4gICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgZGVmYXVsdFZhbHVlLCBoYXNTcmMsIHByb3BzLCBudWxsKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCBsYXN0UHJvcHMsIG5leHRQcm9wcykge1xuICAgICAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0YWcsIG5leHRQcm9wcyk7XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIFwiZGl2XCI6XG4gICAgICAgIGNhc2UgXCJzcGFuXCI6XG4gICAgICAgIGNhc2UgXCJzdmdcIjpcbiAgICAgICAgY2FzZSBcInBhdGhcIjpcbiAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgY2FzZSBcImdcIjpcbiAgICAgICAgY2FzZSBcInBcIjpcbiAgICAgICAgY2FzZSBcImxpXCI6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICAgIHZhciBuYW1lID0gbnVsbCxcbiAgICAgICAgICAgIHR5cGUgPSBudWxsLFxuICAgICAgICAgICAgdmFsdWUgPSBudWxsLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gbnVsbCxcbiAgICAgICAgICAgIGxhc3REZWZhdWx0VmFsdWUgPSBudWxsLFxuICAgICAgICAgICAgY2hlY2tlZCA9IG51bGwsXG4gICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZCA9IG51bGw7XG4gICAgICAgICAgZm9yIChwcm9wS2V5IGluIGxhc3RQcm9wcykge1xuICAgICAgICAgICAgdmFyIGxhc3RQcm9wID0gbGFzdFByb3BzW3Byb3BLZXldO1xuICAgICAgICAgICAgaWYgKGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSAmJiBudWxsICE9IGxhc3RQcm9wKVxuICAgICAgICAgICAgICBzd2l0Y2ggKHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiY2hlY2tlZFwiOlxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBsYXN0RGVmYXVsdFZhbHVlID0gbGFzdFByb3A7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fFxuICAgICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgbGFzdFByb3BcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKHZhciBfcHJvcEtleTggaW4gbmV4dFByb3BzKSB7XG4gICAgICAgICAgICB2YXIgcHJvcEtleSA9IG5leHRQcm9wc1tfcHJvcEtleThdO1xuICAgICAgICAgICAgbGFzdFByb3AgPSBsYXN0UHJvcHNbX3Byb3BLZXk4XTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbmV4dFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5OCkgJiZcbiAgICAgICAgICAgICAgKG51bGwgIT0gcHJvcEtleSB8fCBudWxsICE9IGxhc3RQcm9wKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKF9wcm9wS2V5OCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ0eXBlXCI6XG4gICAgICAgICAgICAgICAgICB0eXBlID0gcHJvcEtleTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJuYW1lXCI6XG4gICAgICAgICAgICAgICAgICBuYW1lID0gcHJvcEtleTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGVja2VkXCI6XG4gICAgICAgICAgICAgICAgICBjaGVja2VkID0gcHJvcEtleTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0Q2hlY2tlZFwiOlxuICAgICAgICAgICAgICAgICAgZGVmYXVsdENoZWNrZWQgPSBwcm9wS2V5O1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IHByb3BLZXk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBwcm9wS2V5O1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSBwcm9wS2V5KVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICB0YWcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCIgaXMgYSB2b2lkIGVsZW1lbnQgdGFnIGFuZCBtdXN0IG5laXRoZXIgaGF2ZSBgY2hpbGRyZW5gIG5vciB1c2UgYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIlxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHByb3BLZXkgIT09IGxhc3RQcm9wICYmXG4gICAgICAgICAgICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgX3Byb3BLZXk4LFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgIGxhc3RQcm9wXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGFnID1cbiAgICAgICAgICAgIFwiY2hlY2tib3hcIiA9PT0gbGFzdFByb3BzLnR5cGUgfHwgXCJyYWRpb1wiID09PSBsYXN0UHJvcHMudHlwZVxuICAgICAgICAgICAgICA/IG51bGwgIT0gbGFzdFByb3BzLmNoZWNrZWRcbiAgICAgICAgICAgICAgOiBudWxsICE9IGxhc3RQcm9wcy52YWx1ZTtcbiAgICAgICAgICBuZXh0UHJvcHMgPVxuICAgICAgICAgICAgXCJjaGVja2JveFwiID09PSBuZXh0UHJvcHMudHlwZSB8fCBcInJhZGlvXCIgPT09IG5leHRQcm9wcy50eXBlXG4gICAgICAgICAgICAgID8gbnVsbCAhPSBuZXh0UHJvcHMuY2hlY2tlZFxuICAgICAgICAgICAgICA6IG51bGwgIT0gbmV4dFByb3BzLnZhbHVlO1xuICAgICAgICAgIHRhZyB8fFxuICAgICAgICAgICAgIW5leHRQcm9wcyB8fFxuICAgICAgICAgICAgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCB8fFxuICAgICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgYW4gdW5jb250cm9sbGVkIGlucHV0IHRvIGJlIGNvbnRyb2xsZWQuIFRoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSB0aGUgdmFsdWUgY2hhbmdpbmcgZnJvbSB1bmRlZmluZWQgdG8gYSBkZWZpbmVkIHZhbHVlLCB3aGljaCBzaG91bGQgbm90IGhhcHBlbi4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCBlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gTW9yZSBpbmZvOiBodHRwczovL3JlYWN0LmRldi9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50c1wiXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgKGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgPSAhMCkpO1xuICAgICAgICAgICF0YWcgfHxcbiAgICAgICAgICAgIG5leHRQcm9wcyB8fFxuICAgICAgICAgICAgZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCB8fFxuICAgICAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiQSBjb21wb25lbnQgaXMgY2hhbmdpbmcgYSBjb250cm9sbGVkIGlucHV0IHRvIGJlIHVuY29udHJvbGxlZC4gVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IHRoZSB2YWx1ZSBjaGFuZ2luZyBmcm9tIGEgZGVmaW5lZCB0byB1bmRlZmluZWQsIHdoaWNoIHNob3VsZCBub3QgaGFwcGVuLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0IGVsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBNb3JlIGluZm86IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAoZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCA9ICEwKSk7XG4gICAgICAgICAgdXBkYXRlSW5wdXQoXG4gICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICBsYXN0RGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgICAgIGRlZmF1bHRDaGVja2VkLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICAgIHByb3BLZXkgPSB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSA9IF9wcm9wS2V5OCA9IG51bGw7XG4gICAgICAgICAgZm9yICh0eXBlIGluIGxhc3RQcm9wcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKChsYXN0RGVmYXVsdFZhbHVlID0gbGFzdFByb3BzW3R5cGVdKSxcbiAgICAgICAgICAgICAgbGFzdFByb3BzLmhhc093blByb3BlcnR5KHR5cGUpICYmIG51bGwgIT0gbGFzdERlZmF1bHRWYWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibXVsdGlwbGVcIjpcbiAgICAgICAgICAgICAgICAgIHByb3BLZXkgPSBsYXN0RGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkodHlwZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgIGxhc3REZWZhdWx0VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIGZvciAobmFtZSBpbiBuZXh0UHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgodHlwZSA9IG5leHRQcm9wc1tuYW1lXSksXG4gICAgICAgICAgICAgIChsYXN0RGVmYXVsdFZhbHVlID0gbGFzdFByb3BzW25hbWVdKSxcbiAgICAgICAgICAgICAgbmV4dFByb3BzLmhhc093blByb3BlcnR5KG5hbWUpICYmXG4gICAgICAgICAgICAgICAgKG51bGwgIT0gdHlwZSB8fCBudWxsICE9IGxhc3REZWZhdWx0VmFsdWUpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwidmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OCA9IHR5cGU7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0eXBlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm11bHRpcGxlXCI6XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IHR5cGU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHR5cGUgIT09IGxhc3REZWZhdWx0VmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgIGxhc3REZWZhdWx0VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIG5leHRQcm9wcyA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB0YWcgPSB2YWx1ZTtcbiAgICAgICAgICBsYXN0UHJvcHMgPSBwcm9wS2V5O1xuICAgICAgICAgIG51bGwgIT0gX3Byb3BLZXk4XG4gICAgICAgICAgICA/IHVwZGF0ZU9wdGlvbnMoZG9tRWxlbWVudCwgISF0YWcsIF9wcm9wS2V5OCwgITEpXG4gICAgICAgICAgICA6ICEhbGFzdFByb3BzICE9PSAhIXRhZyAmJlxuICAgICAgICAgICAgICAobnVsbCAhPSBuZXh0UHJvcHNcbiAgICAgICAgICAgICAgICA/IHVwZGF0ZU9wdGlvbnMoZG9tRWxlbWVudCwgISF0YWcsIG5leHRQcm9wcywgITApXG4gICAgICAgICAgICAgICAgOiB1cGRhdGVPcHRpb25zKGRvbUVsZW1lbnQsICEhdGFnLCB0YWcgPyBbXSA6IFwiXCIsICExKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFwidGV4dGFyZWFcIjpcbiAgICAgICAgICBwcm9wS2V5ID0gX3Byb3BLZXk4ID0gbnVsbDtcbiAgICAgICAgICBmb3IgKGRlZmF1bHRWYWx1ZSBpbiBsYXN0UHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgobmFtZSA9IGxhc3RQcm9wc1tkZWZhdWx0VmFsdWVdKSxcbiAgICAgICAgICAgICAgbGFzdFByb3BzLmhhc093blByb3BlcnR5KGRlZmF1bHRWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICBudWxsICE9IG5hbWUgJiZcbiAgICAgICAgICAgICAgICAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KGRlZmF1bHRWYWx1ZSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN3aXRjaCAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKGRvbUVsZW1lbnQsIHRhZywgZGVmYXVsdFZhbHVlLCBudWxsLCBuZXh0UHJvcHMsIG5hbWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgZm9yICh2YWx1ZSBpbiBuZXh0UHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgobmFtZSA9IG5leHRQcm9wc1t2YWx1ZV0pLFxuICAgICAgICAgICAgICAodHlwZSA9IGxhc3RQcm9wc1t2YWx1ZV0pLFxuICAgICAgICAgICAgICBuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkodmFsdWUpICYmIChudWxsICE9IG5hbWUgfHwgbnVsbCAhPSB0eXBlKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ2YWx1ZVwiOlxuICAgICAgICAgICAgICAgICAgX3Byb3BLZXk4ID0gbmFtZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkZWZhdWx0VmFsdWVcIjpcbiAgICAgICAgICAgICAgICAgIHByb3BLZXkgPSBuYW1lO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9IG5hbWUpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBkb2VzIG5vdCBtYWtlIHNlbnNlIG9uIDx0ZXh0YXJlYT4uXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBuYW1lICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCB2YWx1ZSwgbmFtZSwgbmV4dFByb3BzLCB0eXBlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIHVwZGF0ZVRleHRhcmVhKGRvbUVsZW1lbnQsIF9wcm9wS2V5OCwgcHJvcEtleSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFwib3B0aW9uXCI6XG4gICAgICAgICAgZm9yICh2YXIgX3Byb3BLZXkxMyBpbiBsYXN0UHJvcHMpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgoX3Byb3BLZXk4ID0gbGFzdFByb3BzW19wcm9wS2V5MTNdKSxcbiAgICAgICAgICAgICAgbGFzdFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTMpICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPSBfcHJvcEtleTggJiZcbiAgICAgICAgICAgICAgICAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTMpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKF9wcm9wS2V5MTMpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic2VsZWN0ZWRcIjpcbiAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQuc2VsZWN0ZWQgPSAhMTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIF9wcm9wS2V5MTMsXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BLZXk4XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChsYXN0RGVmYXVsdFZhbHVlIGluIG5leHRQcm9wcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKChfcHJvcEtleTggPSBuZXh0UHJvcHNbbGFzdERlZmF1bHRWYWx1ZV0pLFxuICAgICAgICAgICAgICAocHJvcEtleSA9IGxhc3RQcm9wc1tsYXN0RGVmYXVsdFZhbHVlXSksXG4gICAgICAgICAgICAgIG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShsYXN0RGVmYXVsdFZhbHVlKSAmJlxuICAgICAgICAgICAgICAgIF9wcm9wS2V5OCAhPT0gcHJvcEtleSAmJlxuICAgICAgICAgICAgICAgIChudWxsICE9IF9wcm9wS2V5OCB8fCBudWxsICE9IHByb3BLZXkpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKGxhc3REZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwic2VsZWN0ZWRcIjpcbiAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQuc2VsZWN0ZWQgPVxuICAgICAgICAgICAgICAgICAgICBfcHJvcEtleTggJiZcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgX3Byb3BLZXk4ICYmXG4gICAgICAgICAgICAgICAgICAgIFwic3ltYm9sXCIgIT09IHR5cGVvZiBfcHJvcEtleTg7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBsYXN0RGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBfcHJvcEtleTgsXG4gICAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBcImltZ1wiOlxuICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICBjYXNlIFwiYXJlYVwiOlxuICAgICAgICBjYXNlIFwiYmFzZVwiOlxuICAgICAgICBjYXNlIFwiYnJcIjpcbiAgICAgICAgY2FzZSBcImNvbFwiOlxuICAgICAgICBjYXNlIFwiZW1iZWRcIjpcbiAgICAgICAgY2FzZSBcImhyXCI6XG4gICAgICAgIGNhc2UgXCJrZXlnZW5cIjpcbiAgICAgICAgY2FzZSBcIm1ldGFcIjpcbiAgICAgICAgY2FzZSBcInBhcmFtXCI6XG4gICAgICAgIGNhc2UgXCJzb3VyY2VcIjpcbiAgICAgICAgY2FzZSBcInRyYWNrXCI6XG4gICAgICAgIGNhc2UgXCJ3YnJcIjpcbiAgICAgICAgY2FzZSBcIm1lbnVpdGVtXCI6XG4gICAgICAgICAgZm9yICh2YXIgX3Byb3BLZXkxNSBpbiBsYXN0UHJvcHMpXG4gICAgICAgICAgICAoX3Byb3BLZXk4ID0gbGFzdFByb3BzW19wcm9wS2V5MTVdKSxcbiAgICAgICAgICAgICAgbGFzdFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTUpICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPSBfcHJvcEtleTggJiZcbiAgICAgICAgICAgICAgICAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KF9wcm9wS2V5MTUpICYmXG4gICAgICAgICAgICAgICAgc2V0UHJvcChcbiAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICBfcHJvcEtleTE1LFxuICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgIG5leHRQcm9wcyxcbiAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgZm9yIChjaGVja2VkIGluIG5leHRQcm9wcylcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKChfcHJvcEtleTggPSBuZXh0UHJvcHNbY2hlY2tlZF0pLFxuICAgICAgICAgICAgICAocHJvcEtleSA9IGxhc3RQcm9wc1tjaGVja2VkXSksXG4gICAgICAgICAgICAgIG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShjaGVja2VkKSAmJlxuICAgICAgICAgICAgICAgIF9wcm9wS2V5OCAhPT0gcHJvcEtleSAmJlxuICAgICAgICAgICAgICAgIChudWxsICE9IF9wcm9wS2V5OCB8fCBudWxsICE9IHByb3BLZXkpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzd2l0Y2ggKGNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9IF9wcm9wS2V5OClcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgdGFnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIGlzIGEgdm9pZCBlbGVtZW50IHRhZyBhbmQgbXVzdCBuZWl0aGVyIGhhdmUgYGNoaWxkcmVuYCBub3IgdXNlIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBzZXRQcm9wKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YWcsXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQsXG4gICAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OCxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFByb3BzLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChpc0N1c3RvbUVsZW1lbnQodGFnKSkge1xuICAgICAgICAgICAgZm9yICh2YXIgX3Byb3BLZXkxNyBpbiBsYXN0UHJvcHMpXG4gICAgICAgICAgICAgIChfcHJvcEtleTggPSBsYXN0UHJvcHNbX3Byb3BLZXkxN10pLFxuICAgICAgICAgICAgICAgIGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTE3KSAmJlxuICAgICAgICAgICAgICAgICAgdm9pZCAwICE9PSBfcHJvcEtleTggJiZcbiAgICAgICAgICAgICAgICAgICFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXkxNykgJiZcbiAgICAgICAgICAgICAgICAgIHNldFByb3BPbkN1c3RvbUVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhZyxcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BLZXkxNyxcbiAgICAgICAgICAgICAgICAgICAgdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIF9wcm9wS2V5OFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZvciAoZGVmYXVsdENoZWNrZWQgaW4gbmV4dFByb3BzKVxuICAgICAgICAgICAgICAoX3Byb3BLZXk4ID0gbmV4dFByb3BzW2RlZmF1bHRDaGVja2VkXSksXG4gICAgICAgICAgICAgICAgKHByb3BLZXkgPSBsYXN0UHJvcHNbZGVmYXVsdENoZWNrZWRdKSxcbiAgICAgICAgICAgICAgICAhbmV4dFByb3BzLmhhc093blByb3BlcnR5KGRlZmF1bHRDaGVja2VkKSB8fFxuICAgICAgICAgICAgICAgICAgX3Byb3BLZXk4ID09PSBwcm9wS2V5IHx8XG4gICAgICAgICAgICAgICAgICAodm9pZCAwID09PSBfcHJvcEtleTggJiYgdm9pZCAwID09PSBwcm9wS2V5KSB8fFxuICAgICAgICAgICAgICAgICAgc2V0UHJvcE9uQ3VzdG9tRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgX3Byb3BLZXk4LFxuICAgICAgICAgICAgICAgICAgICBuZXh0UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXlcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yICh2YXIgX3Byb3BLZXkxOSBpbiBsYXN0UHJvcHMpXG4gICAgICAgIChfcHJvcEtleTggPSBsYXN0UHJvcHNbX3Byb3BLZXkxOV0pLFxuICAgICAgICAgIGxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShfcHJvcEtleTE5KSAmJlxuICAgICAgICAgICAgbnVsbCAhPSBfcHJvcEtleTggJiZcbiAgICAgICAgICAgICFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkoX3Byb3BLZXkxOSkgJiZcbiAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBfcHJvcEtleTE5LCBudWxsLCBuZXh0UHJvcHMsIF9wcm9wS2V5OCk7XG4gICAgICBmb3IgKGxhc3RQcm9wIGluIG5leHRQcm9wcylcbiAgICAgICAgKF9wcm9wS2V5OCA9IG5leHRQcm9wc1tsYXN0UHJvcF0pLFxuICAgICAgICAgIChwcm9wS2V5ID0gbGFzdFByb3BzW2xhc3RQcm9wXSksXG4gICAgICAgICAgIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShsYXN0UHJvcCkgfHxcbiAgICAgICAgICAgIF9wcm9wS2V5OCA9PT0gcHJvcEtleSB8fFxuICAgICAgICAgICAgKG51bGwgPT0gX3Byb3BLZXk4ICYmIG51bGwgPT0gcHJvcEtleSkgfHxcbiAgICAgICAgICAgIHNldFByb3AoZG9tRWxlbWVudCwgdGFnLCBsYXN0UHJvcCwgX3Byb3BLZXk4LCBuZXh0UHJvcHMsIHByb3BLZXkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRQcm9wTmFtZUZyb21BdHRyaWJ1dGVOYW1lKGF0dHJOYW1lKSB7XG4gICAgICBzd2l0Y2ggKGF0dHJOYW1lKSB7XG4gICAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICAgIHJldHVybiBcImNsYXNzTmFtZVwiO1xuICAgICAgICBjYXNlIFwiZm9yXCI6XG4gICAgICAgICAgcmV0dXJuIFwiaHRtbEZvclwiO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBhdHRyTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3R5bGVzT2JqZWN0RnJvbUVsZW1lbnQoZG9tRWxlbWVudCkge1xuICAgICAgdmFyIHNlcnZlclZhbHVlSW5PYmplY3RGb3JtID0ge307XG4gICAgICBkb21FbGVtZW50ID0gZG9tRWxlbWVudC5zdHlsZTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9tRWxlbWVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc3R5bGVOYW1lID0gZG9tRWxlbWVudFtpXTtcbiAgICAgICAgc2VydmVyVmFsdWVJbk9iamVjdEZvcm1bc3R5bGVOYW1lXSA9XG4gICAgICAgICAgZG9tRWxlbWVudC5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlTmFtZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VydmVyVmFsdWVJbk9iamVjdEZvcm07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpZmZIeWRyYXRlZFN0eWxlcyhkb21FbGVtZW50LCB2YWx1ZSRqc2NvbXAkMCwgc2VydmVyRGlmZmVyZW5jZXMpIHtcbiAgICAgIGlmIChudWxsICE9IHZhbHVlJGpzY29tcCQwICYmIFwib2JqZWN0XCIgIT09IHR5cGVvZiB2YWx1ZSRqc2NvbXAkMClcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIlRoZSBgc3R5bGVgIHByb3AgZXhwZWN0cyBhIG1hcHBpbmcgZnJvbSBzdHlsZSBwcm9wZXJ0aWVzIHRvIHZhbHVlcywgbm90IGEgc3RyaW5nLiBGb3IgZXhhbXBsZSwgc3R5bGU9e3ttYXJnaW5SaWdodDogc3BhY2luZyArICdlbSd9fSB3aGVuIHVzaW5nIEpTWC5cIlxuICAgICAgICApO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBjbGllbnRWYWx1ZTtcbiAgICAgICAgdmFyIGRlbGltaXRlciA9IChjbGllbnRWYWx1ZSA9IFwiXCIpLFxuICAgICAgICAgIHN0eWxlTmFtZTtcbiAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gdmFsdWUkanNjb21wJDApXG4gICAgICAgICAgaWYgKHZhbHVlJGpzY29tcCQwLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlJGpzY29tcCQwW3N0eWxlTmFtZV07XG4gICAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAgIFwiYm9vbGVhblwiICE9PSB0eXBlb2YgdmFsdWUgJiZcbiAgICAgICAgICAgICAgXCJcIiAhPT0gdmFsdWUgJiZcbiAgICAgICAgICAgICAgKDAgPT09IHN0eWxlTmFtZS5pbmRleE9mKFwiLS1cIilcbiAgICAgICAgICAgICAgICA/IChjaGVja0NTU1Byb3BlcnR5U3RyaW5nQ29lcmNpb24odmFsdWUsIHN0eWxlTmFtZSksXG4gICAgICAgICAgICAgICAgICAoY2xpZW50VmFsdWUgKz1cbiAgICAgICAgICAgICAgICAgICAgZGVsaW1pdGVyICsgc3R5bGVOYW1lICsgXCI6XCIgKyAoXCJcIiArIHZhbHVlKS50cmltKCkpKVxuICAgICAgICAgICAgICAgIDogXCJudW1iZXJcIiAhPT0gdHlwZW9mIHZhbHVlIHx8XG4gICAgICAgICAgICAgICAgICAgIDAgPT09IHZhbHVlIHx8XG4gICAgICAgICAgICAgICAgICAgIHVuaXRsZXNzTnVtYmVycy5oYXMoc3R5bGVOYW1lKVxuICAgICAgICAgICAgICAgICAgPyAoY2hlY2tDU1NQcm9wZXJ0eVN0cmluZ0NvZXJjaW9uKHZhbHVlLCBzdHlsZU5hbWUpLFxuICAgICAgICAgICAgICAgICAgICAoY2xpZW50VmFsdWUgKz1cbiAgICAgICAgICAgICAgICAgICAgICBkZWxpbWl0ZXIgK1xuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UodXBwZXJjYXNlUGF0dGVybiwgXCItJDFcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShtc1BhdHRlcm4kMSwgXCItbXMtXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICBcIjpcIiArXG4gICAgICAgICAgICAgICAgICAgICAgKFwiXCIgKyB2YWx1ZSkudHJpbSgpKSlcbiAgICAgICAgICAgICAgICAgIDogKGNsaWVudFZhbHVlICs9XG4gICAgICAgICAgICAgICAgICAgICAgZGVsaW1pdGVyICtcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKHVwcGVyY2FzZVBhdHRlcm4sIFwiLSQxXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UobXNQYXR0ZXJuJDEsIFwiLW1zLVwiKSArXG4gICAgICAgICAgICAgICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICtcbiAgICAgICAgICAgICAgICAgICAgICBcInB4XCIpLFxuICAgICAgICAgICAgICAoZGVsaW1pdGVyID0gXCI7XCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgIGNsaWVudFZhbHVlID0gY2xpZW50VmFsdWUgfHwgbnVsbDtcbiAgICAgICAgdmFsdWUkanNjb21wJDAgPSBkb21FbGVtZW50LmdldEF0dHJpYnV0ZShcInN0eWxlXCIpO1xuICAgICAgICB2YWx1ZSRqc2NvbXAkMCAhPT0gY2xpZW50VmFsdWUgJiZcbiAgICAgICAgICAoKGNsaWVudFZhbHVlID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKGNsaWVudFZhbHVlKSksXG4gICAgICAgICAgbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHZhbHVlJGpzY29tcCQwKSAhPT0gY2xpZW50VmFsdWUgJiZcbiAgICAgICAgICAgIChzZXJ2ZXJEaWZmZXJlbmNlcy5zdHlsZSA9IGdldFN0eWxlc09iamVjdEZyb21FbGVtZW50KGRvbUVsZW1lbnQpKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICBkb21FbGVtZW50LFxuICAgICAgcHJvcEtleSxcbiAgICAgIGF0dHJpYnV0ZU5hbWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgKSB7XG4gICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgaWYgKG51bGwgPT09IGRvbUVsZW1lbnQpXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICBlbHNlIGlmIChudWxsICE9IHZhbHVlKVxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIHByb3BLZXkpLFxuICAgICAgICAgICAgICBkb21FbGVtZW50ID09PSBcIlwiICsgdmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIGRvbUVsZW1lbnQsIHZhbHVlLCBzZXJ2ZXJEaWZmZXJlbmNlcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGh5ZHJhdGVCb29sZWFuQXR0cmlidXRlKFxuICAgICAgZG9tRWxlbWVudCxcbiAgICAgIHByb3BLZXksXG4gICAgICBhdHRyaWJ1dGVOYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICkge1xuICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIGRvbUVsZW1lbnQgPSBkb21FbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIGlmIChudWxsID09PSBkb21FbGVtZW50KSB7XG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICAgIH0gZWxzZVxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAodmFsdWUpIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIGRvbUVsZW1lbnQsIHZhbHVlLCBzZXJ2ZXJEaWZmZXJlbmNlcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGh5ZHJhdGVCb29sZWFuaXNoQXR0cmlidXRlKFxuICAgICAgZG9tRWxlbWVudCxcbiAgICAgIHByb3BLZXksXG4gICAgICBhdHRyaWJ1dGVOYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICkge1xuICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIGRvbUVsZW1lbnQgPSBkb21FbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIGlmIChudWxsID09PSBkb21FbGVtZW50KVxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG51bGwgIT0gdmFsdWUpXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24odmFsdWUsIGF0dHJpYnV0ZU5hbWUpLFxuICAgICAgICAgICAgICBkb21FbGVtZW50ID09PSBcIlwiICsgdmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIGRvbUVsZW1lbnQsIHZhbHVlLCBzZXJ2ZXJEaWZmZXJlbmNlcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGh5ZHJhdGVOdW1lcmljQXR0cmlidXRlKFxuICAgICAgZG9tRWxlbWVudCxcbiAgICAgIHByb3BLZXksXG4gICAgICBhdHRyaWJ1dGVOYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICkge1xuICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIGRvbUVsZW1lbnQgPSBkb21FbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIGlmIChudWxsID09PSBkb21FbGVtZW50KVxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICBlbHNlIGlmIChudWxsICE9IHZhbHVlKVxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIWlzTmFOKHZhbHVlKSAmJlxuICAgICAgICAgICAgICAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgcHJvcEtleSksXG4gICAgICAgICAgICAgIGRvbUVsZW1lbnQgPT09IFwiXCIgKyB2YWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgZG9tRWxlbWVudCwgdmFsdWUsIHNlcnZlckRpZmZlcmVuY2VzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHlkcmF0ZVNhbml0aXplZEF0dHJpYnV0ZShcbiAgICAgIGRvbUVsZW1lbnQsXG4gICAgICBwcm9wS2V5LFxuICAgICAgYXR0cmlidXRlTmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICApIHtcbiAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICBkb21FbGVtZW50ID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICBpZiAobnVsbCA9PT0gZG9tRWxlbWVudClcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG51bGwgIT0gdmFsdWUpXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbih2YWx1ZSwgcHJvcEtleSksXG4gICAgICAgICAgICAgIChhdHRyaWJ1dGVOYW1lID0gc2FuaXRpemVVUkwoXCJcIiArIHZhbHVlKSksXG4gICAgICAgICAgICAgIGRvbUVsZW1lbnQgPT09IGF0dHJpYnV0ZU5hbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIGRvbUVsZW1lbnQsIHZhbHVlLCBzZXJ2ZXJEaWZmZXJlbmNlcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpZmZIeWRyYXRlZFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCBwcm9wcywgaG9zdENvbnRleHQpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBzZXJ2ZXJEaWZmZXJlbmNlcyA9IHt9LFxuICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyA9IG5ldyBTZXQoKSxcbiAgICAgICAgICBhdHRyaWJ1dGVzID0gZG9tRWxlbWVudC5hdHRyaWJ1dGVzLFxuICAgICAgICAgIGkgPSAwO1xuICAgICAgICBpIDwgYXR0cmlidXRlcy5sZW5ndGg7XG4gICAgICAgIGkrK1xuICAgICAgKVxuICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZXNbaV0ubmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiY2hlY2tlZFwiOlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcInNlbGVjdGVkXCI6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmFkZChhdHRyaWJ1dGVzW2ldLm5hbWUpO1xuICAgICAgICB9XG4gICAgICBpZiAoaXNDdXN0b21FbGVtZW50KHRhZykpXG4gICAgICAgIGZvciAodmFyIHByb3BLZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHByb3BzW3Byb3BLZXldO1xuICAgICAgICAgICAgaWYgKG51bGwgIT0gdmFsdWUpXG4gICAgICAgICAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKVxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHZhbHVlICYmXG4gICAgICAgICAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICBlbHNlIGlmICghMCAhPT0gcHJvcHMuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKVxuICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvcEtleSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImNoaWxkcmVuXCI6XG4gICAgICAgICAgICAgICAgICAgIChcInN0cmluZ1wiICE9PSB0eXBlb2YgdmFsdWUgJiYgXCJudW1iZXJcIiAhPT0gdHlwZW9mIHZhbHVlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY2hpbGRyZW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQudGV4dENvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdENoZWNrZWRcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJpbm5lckhUTUxcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJyZWZcIjpcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIjpcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IGRvbUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlID8gdmFsdWUuX19odG1sIDogdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICBudWxsICE9IHZhbHVlICYmXG4gICAgICAgICAgICAgICAgICAgICAgKCh2YWx1ZSA9IG5vcm1hbGl6ZUhUTUwoZG9tRWxlbWVudCwgdmFsdWUpKSxcbiAgICAgICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShwcm9wS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgZGlmZkh5ZHJhdGVkU3R5bGVzKGRvbUVsZW1lbnQsIHZhbHVlLCBzZXJ2ZXJEaWZmZXJlbmNlcyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcIm9mZnNldFBhcmVudFwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm9mZnNldFRvcFwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm9mZnNldExlZnRcIjpcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJvZmZzZXRXaWR0aFwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm9mZnNldEhlaWdodFwiOlxuICAgICAgICAgICAgICAgICAgY2FzZSBcImlzQ29udGVudEVkaXRhYmxlXCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwib3V0ZXJUZXh0XCI6XG4gICAgICAgICAgICAgICAgICBjYXNlIFwib3V0ZXJIVE1MXCI6XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUocHJvcEtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIkFzc2lnbm1lbnQgdG8gcmVhZC1vbmx5IHByb3BlcnR5IHdpbGwgcmVzdWx0IGluIGEgbm8tb3A6IGAlc2BcIixcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImNsYXNzTmFtZVwiOlxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKFwiY2xhc3NcIik7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBnZXRWYWx1ZUZvckF0dHJpYnV0ZU9uQ3VzdG9tQ29tcG9uZW50KFxuICAgICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgXCJjbGFzc1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgICBcImNsYXNzTmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBob3N0Q29udGV4dC5jb250ZXh0ID09PSBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmUgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJzdmdcIiAhPT0gdGFnICYmXG4gICAgICAgICAgICAgICAgICAgIFwibWF0aFwiICE9PSB0YWdcbiAgICAgICAgICAgICAgICAgICAgICA/IGV4dHJhQXR0cmlidXRlcy5kZWxldGUocHJvcEtleS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICAgICAgICAgIDogZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShwcm9wS2V5KSxcbiAgICAgICAgICAgICAgICAgICAgICAoYXR0cmlidXRlcyA9IGdldFZhbHVlRm9yQXR0cmlidXRlT25DdXN0b21Db21wb25lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBlbHNlXG4gICAgICAgIGZvciAodmFsdWUgaW4gcHJvcHMpXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcHJvcHMuaGFzT3duUHJvcGVydHkodmFsdWUpICYmXG4gICAgICAgICAgICAoKHByb3BLZXkgPSBwcm9wc1t2YWx1ZV0pLCBudWxsICE9IHByb3BLZXkpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkodmFsdWUpKVxuICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBwcm9wS2V5ICYmXG4gICAgICAgICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKHZhbHVlLCBwcm9wS2V5KTtcbiAgICAgICAgICAgIGVsc2UgaWYgKCEwICE9PSBwcm9wcy5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpXG4gICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiY2hpbGRyZW5cIjpcbiAgICAgICAgICAgICAgICAgIChcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcEtleSAmJlxuICAgICAgICAgICAgICAgICAgICBcIm51bWJlclwiICE9PSB0eXBlb2YgcHJvcEtleSkgfHxcbiAgICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICAgIFwiY2hpbGRyZW5cIixcbiAgICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LnRleHRDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmdcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImNoZWNrZWRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwic2VsZWN0ZWRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmYXVsdFZhbHVlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRDaGVja2VkXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImlubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJyZWZcIjpcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiOlxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IGRvbUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgICAgcHJvcEtleSA9IHByb3BLZXkgPyBwcm9wS2V5Ll9faHRtbCA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgIG51bGwgIT0gcHJvcEtleSAmJlxuICAgICAgICAgICAgICAgICAgICAoKHByb3BLZXkgPSBub3JtYWxpemVIVE1MKGRvbUVsZW1lbnQsIHByb3BLZXkpKSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyAhPT0gcHJvcEtleSAmJlxuICAgICAgICAgICAgICAgICAgICAgIChzZXJ2ZXJEaWZmZXJlbmNlc1t2YWx1ZV0gPSB7IF9faHRtbDogYXR0cmlidXRlcyB9KSk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiY2xhc3NOYW1lXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJjbGFzc1wiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInRhYkluZGV4XCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ0YWJpbmRleFwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIGRpZmZIeWRyYXRlZFN0eWxlcyhkb21FbGVtZW50LCBwcm9wS2V5LCBzZXJ2ZXJEaWZmZXJlbmNlcyk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwibXVsdGlwbGVcIjpcbiAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudC5tdWx0aXBsZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwibXV0ZWRcIjpcbiAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudC5tdXRlZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiYXV0b0ZvY3VzXCI6XG4gICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKFwiYXV0b2ZvY3VzXCIpO1xuICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudC5hdXRvZm9jdXMsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImRhdGFcIjpcbiAgICAgICAgICAgICAgICAgIGlmIChcIm9iamVjdFwiICE9PSB0YWcpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBkb21FbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGFcIik7XG4gICAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBcInNyY1wiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJocmVmXCI6XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgICAgXCJcIiAhPT0gcHJvcEtleSB8fFxuICAgICAgICAgICAgICAgICAgICAgIChcImFcIiA9PT0gdGFnICYmIFwiaHJlZlwiID09PSB2YWx1ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoXCJvYmplY3RcIiA9PT0gdGFnICYmIFwiZGF0YVwiID09PSB2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIFwic3JjXCIgPT09IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnQW4gZW1wdHkgc3RyaW5nIChcIlwiKSB3YXMgcGFzc2VkIHRvIHRoZSAlcyBhdHRyaWJ1dGUuIFRoaXMgbWF5IGNhdXNlIHRoZSBicm93c2VyIHRvIGRvd25sb2FkIHRoZSB3aG9sZSBwYWdlIGFnYWluIG92ZXIgdGhlIG5ldHdvcmsuIFRvIGZpeCB0aGlzLCBlaXRoZXIgZG8gbm90IHJlbmRlciB0aGUgZWxlbWVudCBhdCBhbGwgb3IgcGFzcyBudWxsIHRvICVzIGluc3RlYWQgb2YgYW4gZW1wdHkgc3RyaW5nLicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FuIGVtcHR5IHN0cmluZyAoXCJcIikgd2FzIHBhc3NlZCB0byB0aGUgJXMgYXR0cmlidXRlLiBUbyBmaXggdGhpcywgZWl0aGVyIGRvIG5vdCByZW5kZXIgdGhlIGVsZW1lbnQgYXQgYWxsIG9yIHBhc3MgbnVsbCB0byAlcyBpbnN0ZWFkIG9mIGFuIGVtcHR5IHN0cmluZy4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZVNhbml0aXplZEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImFjdGlvblwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJmb3JtQWN0aW9uXCI6XG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZSh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgXCJmb3JtQWN0aW9uXCIgPT09IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgPyAoZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShcIm5hbWVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKFwiZm9ybWVuY3R5cGVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKFwiZm9ybW1ldGhvZFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoXCJmb3JtdGFyZ2V0XCIpKVxuICAgICAgICAgICAgICAgICAgICAgIDogKGV4dHJhQXR0cmlidXRlcy5kZWxldGUoXCJlbmN0eXBlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShcIm1ldGhvZFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoXCJ0YXJnZXRcIikpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcyA9PT0gRVhQRUNURURfRk9STV9BQ1RJT05fVVJMKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUodmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVTYW5pdGl6ZWRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhsaW5rSHJlZlwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZVNhbml0aXplZEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieGxpbms6aHJlZlwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbnRlbnRFZGl0YWJsZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUJvb2xlYW5pc2hBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcImNvbnRlbnRlZGl0YWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNwZWxsQ2hlY2tcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVCb29sZWFuaXNoQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJzcGVsbGNoZWNrXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiZHJhZ2dhYmxlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImF1dG9SZXZlcnNlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZm9jdXNhYmxlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInByZXNlcnZlQWxwaGFcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVCb29sZWFuaXNoQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiYWxsb3dGdWxsU2NyZWVuXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImFzeW5jXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImF1dG9QbGF5XCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbnRyb2xzXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRlZmF1bHRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGVmZXJcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGlzYWJsZWRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGlzYWJsZVBpY3R1cmVJblBpY3R1cmVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGlzYWJsZVJlbW90ZVBsYXliYWNrXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImZvcm1Ob1ZhbGlkYXRlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImhpZGRlblwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJsb29wXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcIm5vTW9kdWxlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcIm5vVmFsaWRhdGVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwib3BlblwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJwbGF5c0lubGluZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJyZWFkT25seVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJyZXF1aXJlZFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJyZXZlcnNlZFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJzY29wZWRcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwic2VhbWxlc3NcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiaXRlbVNjb3BlXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQm9vbGVhbkF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiY2FwdHVyZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJkb3dubG9hZFwiOlxuICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBpID0gZG9tRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSAoYXR0cmlidXRlcyA9IHZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlcyRqc2NvbXAkMCA9IHNlcnZlckRpZmZlcmVuY2VzO1xuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpID0gaS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09PSBpKVxuICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCExID09PSBwcm9wS2V5KSBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobnVsbCAhPSBwcm9wS2V5KVxuICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghMCA9PT0gcHJvcEtleSAmJiBcIlwiID09PSBpKSBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tBdHRyaWJ1dGVTdHJpbmdDb2VyY2lvbihwcm9wS2V5LCBhdHRyaWJ1dGVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID09PSBcIlwiICsgcHJvcEtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXMkanNjb21wJDBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb2xzXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInJvd3NcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwic2l6ZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJzcGFuXCI6XG4gICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBkb21FbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlcyRqc2NvbXAkMCA9IHNlcnZlckRpZmZlcmVuY2VzO1xuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpID0gaS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09PSBpKVxuICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHByb3BLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihwcm9wS2V5KSB8fCAxID4gcHJvcEtleSkgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG51bGwgIT0gcHJvcEtleSlcbiAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoaXNOYU4ocHJvcEtleSkgfHwgMSA+IHByb3BLZXkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoZWNrQXR0cmlidXRlU3RyaW5nQ29lcmNpb24ocHJvcEtleSwgYXR0cmlidXRlcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9PT0gXCJcIiArIHByb3BLZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzJGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwicm93U3BhblwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZU51bWVyaWNBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInJvd3NwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzdGFydFwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZU51bWVyaWNBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4SGVpZ2h0XCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ4LWhlaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhsaW5rQWN0dWF0ZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieGxpbms6YWN0dWF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhsaW5rQXJjcm9sZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieGxpbms6YXJjcm9sZVwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhsaW5rUm9sZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieGxpbms6cm9sZVwiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhsaW5rU2hvd1wiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieGxpbms6c2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhsaW5rVGl0bGVcIjpcbiAgICAgICAgICAgICAgICAgIGh5ZHJhdGVBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBcInhsaW5rOnRpdGxlXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwieGxpbmtUeXBlXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ4bGluazp0eXBlXCIsXG4gICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIFwieG1sQmFzZVwiOlxuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgZG9tRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIFwieG1sOmJhc2VcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ4bWxMYW5nXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ4bWw6bGFuZ1wiLFxuICAgICAgICAgICAgICAgICAgICBwcm9wS2V5LFxuICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlckRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhtbFNwYWNlXCI6XG4gICAgICAgICAgICAgICAgICBoeWRyYXRlQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICAgICBkb21FbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgXCJ4bWw6c3BhY2VcIixcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJpbmVydFwiOlxuICAgICAgICAgICAgICAgICAgXCJcIiAhPT0gcHJvcEtleSB8fFxuICAgICAgICAgICAgICAgICAgICBkaWRXYXJuRm9yTmV3Qm9vbGVhblByb3BzV2l0aEVtcHR5VmFsdWVbdmFsdWVdIHx8XG4gICAgICAgICAgICAgICAgICAgICgoZGlkV2FybkZvck5ld0Jvb2xlYW5Qcm9wc1dpdGhFbXB0eVZhbHVlW3ZhbHVlXSA9ICEwKSxcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIlJlY2VpdmVkIGFuIGVtcHR5IHN0cmluZyBmb3IgYSBib29sZWFuIGF0dHJpYnV0ZSBgJXNgLiBUaGlzIHdpbGwgdHJlYXQgdGhlIGF0dHJpYnV0ZSBhcyBpZiBpdCB3ZXJlIGZhbHNlLiBFaXRoZXIgcGFzcyBgZmFsc2VgIHRvIHNpbGVuY2UgdGhpcyB3YXJuaW5nLCBvciBwYXNzIGB0cnVlYCBpZiB5b3UgdXNlZCBhbiBlbXB0eSBzdHJpbmcgaW4gZWFybGllciB2ZXJzaW9ucyBvZiBSZWFjdCB0byBpbmRpY2F0ZSB0aGlzIGF0dHJpYnV0ZSBpcyB0cnVlLlwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgICAgICAgaHlkcmF0ZUJvb2xlYW5BdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcEtleSxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICEoMiA8IHZhbHVlLmxlbmd0aCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKFwib1wiICE9PSB2YWx1ZVswXSAmJiBcIk9cIiAhPT0gdmFsdWVbMF0pIHx8XG4gICAgICAgICAgICAgICAgICAgIChcIm5cIiAhPT0gdmFsdWVbMV0gJiYgXCJOXCIgIT09IHZhbHVlWzFdKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBnZXRBdHRyaWJ1dGVBbGlhcyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgaG9zdENvbnRleHQuY29udGV4dCA9PT0gSG9zdENvbnRleHROYW1lc3BhY2VOb25lICYmXG4gICAgICAgICAgICAgICAgICAgIFwic3ZnXCIgIT09IHRhZyAmJlxuICAgICAgICAgICAgICAgICAgICBcIm1hdGhcIiAhPT0gdGFnXG4gICAgICAgICAgICAgICAgICAgICAgPyBleHRyYUF0dHJpYnV0ZXMuZGVsZXRlKGkudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICAgICAgICA6ICgoYXR0cmlidXRlTmFtZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKGF0dHJpYnV0ZU5hbWUgPSBwb3NzaWJsZVN0YW5kYXJkTmFtZXMuaGFzT3duUHJvcGVydHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBwb3NzaWJsZVN0YW5kYXJkTmFtZXNbYXR0cmlidXRlTmFtZV0gfHwgbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gYXR0cmlidXRlTmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lICE9PSB2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKGF0dHJpYnV0ZXMgPSAhMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlcy5kZWxldGUoYXR0cmlidXRlTmFtZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVzLmRlbGV0ZShpKSk7XG4gICAgICAgICAgICAgICAgICAgIGE6IGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAoKGF0dHJpYnV0ZU5hbWUgPSBkb21FbGVtZW50KSxcbiAgICAgICAgICAgICAgICAgICAgICAoc2VydmVyRGlmZmVyZW5jZXMkanNjb21wJDAgPSBpKSxcbiAgICAgICAgICAgICAgICAgICAgICAoaSA9IHByb3BLZXkpLFxuICAgICAgICAgICAgICAgICAgICAgIGlzQXR0cmlidXRlTmFtZVNhZmUoc2VydmVyRGlmZmVyZW5jZXMkanNjb21wJDApKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZS5oYXNBdHRyaWJ1dGUoc2VydmVyRGlmZmVyZW5jZXMkanNjb21wJDApXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lLmdldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXMkanNjb21wJDBcbiAgICAgICAgICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXMkanNjb21wJDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGkgPSBhdHRyaWJ1dGVOYW1lID09PSBcIlwiICsgaSA/IGkgOiBhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYXR0cmlidXRlTmFtZSA9IHNlcnZlckRpZmZlcmVuY2VzJGpzY29tcCQwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCA1KSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtXCIgIT09IGF0dHJpYnV0ZU5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLVwiICE9PSBhdHRyaWJ1dGVOYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gdm9pZCAwID09PSBpID8gdm9pZCAwIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaSA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyB8fFxuICAgICAgICAgICAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJEaWZmZXJlbmNlc1xuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgIDAgPCBleHRyYUF0dHJpYnV0ZXMuc2l6ZSAmJlxuICAgICAgICAhMCAhPT0gcHJvcHMuc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nICYmXG4gICAgICAgIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXMoZG9tRWxlbWVudCwgZXh0cmFBdHRyaWJ1dGVzLCBzZXJ2ZXJEaWZmZXJlbmNlcyk7XG4gICAgICByZXR1cm4gMCA9PT0gT2JqZWN0LmtleXMoc2VydmVyRGlmZmVyZW5jZXMpLmxlbmd0aFxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiBzZXJ2ZXJEaWZmZXJlbmNlcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvcE5hbWVzTGlzdEpvaW4obGlzdCwgY29tYmluYXRvcikge1xuICAgICAgc3dpdGNoIChsaXN0Lmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gbGlzdFswXTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBsaXN0WzBdICsgXCIgXCIgKyBjb21iaW5hdG9yICsgXCIgXCIgKyBsaXN0WzFdO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBsaXN0LnNsaWNlKDAsIC0xKS5qb2luKFwiLCBcIikgK1xuICAgICAgICAgICAgXCIsIFwiICtcbiAgICAgICAgICAgIGNvbWJpbmF0b3IgK1xuICAgICAgICAgICAgXCIgXCIgK1xuICAgICAgICAgICAgbGlzdFtsaXN0Lmxlbmd0aCAtIDFdXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm4gOSA9PT0gcm9vdENvbnRhaW5lckVsZW1lbnQubm9kZVR5cGVcbiAgICAgICAgPyByb290Q29udGFpbmVyRWxlbWVudFxuICAgICAgICA6IHJvb3RDb250YWluZXJFbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE93bkhvc3RDb250ZXh0KG5hbWVzcGFjZVVSSSkge1xuICAgICAgc3dpdGNoIChuYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgY2FzZSBTVkdfTkFNRVNQQUNFOlxuICAgICAgICAgIHJldHVybiBIb3N0Q29udGV4dE5hbWVzcGFjZVN2ZztcbiAgICAgICAgY2FzZSBNQVRIX05BTUVTUEFDRTpcbiAgICAgICAgICByZXR1cm4gSG9zdENvbnRleHROYW1lc3BhY2VNYXRoO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENoaWxkSG9zdENvbnRleHRQcm9kKHBhcmVudE5hbWVzcGFjZSwgdHlwZSkge1xuICAgICAgaWYgKHBhcmVudE5hbWVzcGFjZSA9PT0gSG9zdENvbnRleHROYW1lc3BhY2VOb25lKVxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwic3ZnXCI6XG4gICAgICAgICAgICByZXR1cm4gSG9zdENvbnRleHROYW1lc3BhY2VTdmc7XG4gICAgICAgICAgY2FzZSBcIm1hdGhcIjpcbiAgICAgICAgICAgIHJldHVybiBIb3N0Q29udGV4dE5hbWVzcGFjZU1hdGg7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmU7XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBwYXJlbnROYW1lc3BhY2UgPT09IEhvc3RDb250ZXh0TmFtZXNwYWNlU3ZnICYmXG4gICAgICAgIFwiZm9yZWlnbk9iamVjdFwiID09PSB0eXBlXG4gICAgICAgID8gSG9zdENvbnRleHROYW1lc3BhY2VOb25lXG4gICAgICAgIDogcGFyZW50TmFtZXNwYWNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBwcm9wcykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgXCJ0ZXh0YXJlYVwiID09PSB0eXBlIHx8XG4gICAgICAgIFwibm9zY3JpcHRcIiA9PT0gdHlwZSB8fFxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gfHxcbiAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIHByb3BzLmNoaWxkcmVuIHx8XG4gICAgICAgIFwiYmlnaW50XCIgPT09IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiB8fFxuICAgICAgICAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICYmXG4gICAgICAgICAgbnVsbCAhPT0gcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgJiZcbiAgICAgICAgICBudWxsICE9IHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbClcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZEF0dGVtcHRFYWdlclRyYW5zaXRpb24oKSB7XG4gICAgICB2YXIgZXZlbnQgPSB3aW5kb3cuZXZlbnQ7XG4gICAgICBpZiAoZXZlbnQgJiYgXCJwb3BzdGF0ZVwiID09PSBldmVudC50eXBlKSB7XG4gICAgICAgIGlmIChldmVudCA9PT0gY3VycmVudFBvcHN0YXRlVHJhbnNpdGlvbkV2ZW50KSByZXR1cm4gITE7XG4gICAgICAgIGN1cnJlbnRQb3BzdGF0ZVRyYW5zaXRpb25FdmVudCA9IGV2ZW50O1xuICAgICAgICByZXR1cm4gITA7XG4gICAgICB9XG4gICAgICBjdXJyZW50UG9wc3RhdGVUcmFuc2l0aW9uRXZlbnQgPSBudWxsO1xuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVFcnJvckluTmV4dFRpY2soZXJyb3IpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRNb3VudChkb21FbGVtZW50LCB0eXBlLCBuZXdQcm9wcykge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJidXR0b25cIjpcbiAgICAgICAgY2FzZSBcImlucHV0XCI6XG4gICAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgY2FzZSBcInRleHRhcmVhXCI6XG4gICAgICAgICAgbmV3UHJvcHMuYXV0b0ZvY3VzICYmIGRvbUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImltZ1wiOlxuICAgICAgICAgIG5ld1Byb3BzLnNyY1xuICAgICAgICAgICAgPyAoZG9tRWxlbWVudC5zcmMgPSBuZXdQcm9wcy5zcmMpXG4gICAgICAgICAgICA6IG5ld1Byb3BzLnNyY1NldCAmJiAoZG9tRWxlbWVudC5zcmNzZXQgPSBuZXdQcm9wcy5zcmNTZXQpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIeWRyYXRlZEluc3RhbmNlKCkge31cbiAgICBmdW5jdGlvbiBjb21taXRVcGRhdGUoZG9tRWxlbWVudCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzKSB7XG4gICAgICB1cGRhdGVQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcyk7XG4gICAgICBkb21FbGVtZW50W2ludGVybmFsUHJvcHNLZXldID0gbmV3UHJvcHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCkge1xuICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgXCJcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdFRleHRVcGRhdGUodGV4dEluc3RhbmNlLCBvbGRUZXh0LCBuZXdUZXh0KSB7XG4gICAgICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gbmV3VGV4dDtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybkZvclJlYWN0Q2hpbGRyZW5Db25mbGljdChjb250YWluZXIpIHtcbiAgICAgIGlmICghY29udGFpbmVyLl9fcmVhY3RXYXJuZWRBYm91dENoaWxkcmVuQ29uZmxpY3QpIHtcbiAgICAgICAgdmFyIHByb3BzID0gY29udGFpbmVyW2ludGVybmFsUHJvcHNLZXldIHx8IG51bGw7XG4gICAgICAgIGlmIChudWxsICE9PSBwcm9wcykge1xuICAgICAgICAgIHZhciBmaWJlciA9IGdldEluc3RhbmNlRnJvbU5vZGUoY29udGFpbmVyKTtcbiAgICAgICAgICBudWxsICE9PSBmaWJlciAmJlxuICAgICAgICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiB8fFxuICAgICAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIHByb3BzLmNoaWxkcmVuXG4gICAgICAgICAgICAgID8gKChjb250YWluZXIuX19yZWFjdFdhcm5lZEFib3V0Q2hpbGRyZW5Db25mbGljdCA9ICEwKSxcbiAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihmaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCB1c2UgYSByZWYgb24gYSBSZWFjdCBlbGVtZW50IGFzIGEgY29udGFpbmVyIHRvIGBjcmVhdGVSb290YCBvciBgY3JlYXRlUG9ydGFsYCBpZiB0aGF0IGVsZW1lbnQgYWxzbyBzZXRzIFwiY2hpbGRyZW5cIiB0ZXh0IGNvbnRlbnQgdXNpbmcgUmVhY3QuIEl0IHNob3VsZCBiZSBhIGxlYWYgd2l0aCBubyBjaGlsZHJlbi4gT3RoZXJ3aXNlIGl0XFwncyBhbWJpZ3VvdXMgd2hpY2ggY2hpbGRyZW4gc2hvdWxkIGJlIHVzZWQuJ1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgOiBudWxsICE9IHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICYmXG4gICAgICAgICAgICAgICAgKChjb250YWluZXIuX19yZWFjdFdhcm5lZEFib3V0Q2hpbGRyZW5Db25mbGljdCA9ICEwKSxcbiAgICAgICAgICAgICAgICBydW5XaXRoRmliZXJJbkRFVihmaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCB1c2UgYSByZWYgb24gYSBSZWFjdCBlbGVtZW50IGFzIGEgY29udGFpbmVyIHRvIGBjcmVhdGVSb290YCBvciBgY3JlYXRlUG9ydGFsYCBpZiB0aGF0IGVsZW1lbnQgYWxzbyBzZXRzIFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIiB1c2luZyBSZWFjdC4gSXQgc2hvdWxkIGJlIGEgbGVhZiB3aXRoIG5vIGNoaWxkcmVuLiBPdGhlcndpc2UgaXRcXCdzIGFtYmlndW91cyB3aGljaCBjaGlsZHJlbiBzaG91bGQgYmUgdXNlZC4nXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaXNTaW5nbGV0b25TY29wZSh0eXBlKSB7XG4gICAgICByZXR1cm4gXCJoZWFkXCIgPT09IHR5cGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUNoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICAgICAgcGFyZW50SW5zdGFuY2UucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVDaGlsZEZyb21Db250YWluZXIoY29udGFpbmVyLCBjaGlsZCkge1xuICAgICAgKDkgPT09IGNvbnRhaW5lci5ub2RlVHlwZVxuICAgICAgICA/IGNvbnRhaW5lci5ib2R5XG4gICAgICAgIDogXCJIVE1MXCIgPT09IGNvbnRhaW5lci5ub2RlTmFtZVxuICAgICAgICAgID8gY29udGFpbmVyLm93bmVyRG9jdW1lbnQuYm9keVxuICAgICAgICAgIDogY29udGFpbmVyXG4gICAgICApLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xlYXJIeWRyYXRpb25Cb3VuZGFyeShwYXJlbnRJbnN0YW5jZSwgaHlkcmF0aW9uSW5zdGFuY2UpIHtcbiAgICAgIHZhciBub2RlID0gaHlkcmF0aW9uSW5zdGFuY2UsXG4gICAgICAgIGRlcHRoID0gMDtcbiAgICAgIGRvIHtcbiAgICAgICAgdmFyIG5leHROb2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgICAgcGFyZW50SW5zdGFuY2UucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgICAgIGlmIChuZXh0Tm9kZSAmJiA4ID09PSBuZXh0Tm9kZS5ub2RlVHlwZSlcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoKG5vZGUgPSBuZXh0Tm9kZS5kYXRhKSxcbiAgICAgICAgICAgIG5vZGUgPT09IFNVU1BFTlNFX0VORF9EQVRBIHx8IG5vZGUgPT09IEFDVElWSVRZX0VORF9EQVRBKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKDAgPT09IGRlcHRoKSB7XG4gICAgICAgICAgICAgIHBhcmVudEluc3RhbmNlLnJlbW92ZUNoaWxkKG5leHROb2RlKTtcbiAgICAgICAgICAgICAgcmV0cnlJZkJsb2NrZWRPbihoeWRyYXRpb25JbnN0YW5jZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIG5vZGUgPT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgfHxcbiAgICAgICAgICAgIG5vZGUgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgbm9kZSA9PT0gU1VTUEVOU0VfUVVFVUVEX1NUQVJUX0RBVEEgfHxcbiAgICAgICAgICAgIG5vZGUgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEEgfHxcbiAgICAgICAgICAgIG5vZGUgPT09IEFDVElWSVRZX1NUQVJUX0RBVEFcbiAgICAgICAgICApXG4gICAgICAgICAgICBkZXB0aCsrO1xuICAgICAgICAgIGVsc2UgaWYgKG5vZGUgPT09IFBSRUFNQkxFX0NPTlRSSUJVVElPTl9IVE1MKVxuICAgICAgICAgICAgcmVsZWFzZVNpbmdsZXRvbkluc3RhbmNlKFxuICAgICAgICAgICAgICBwYXJlbnRJbnN0YW5jZS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBlbHNlIGlmIChub2RlID09PSBQUkVBTUJMRV9DT05UUklCVVRJT05fSEVBRCkge1xuICAgICAgICAgICAgbm9kZSA9IHBhcmVudEluc3RhbmNlLm93bmVyRG9jdW1lbnQuaGVhZDtcbiAgICAgICAgICAgIHJlbGVhc2VTaW5nbGV0b25JbnN0YW5jZShub2RlKTtcbiAgICAgICAgICAgIGZvciAodmFyIG5vZGUkanNjb21wJDAgPSBub2RlLmZpcnN0Q2hpbGQ7IG5vZGUkanNjb21wJDA7ICkge1xuICAgICAgICAgICAgICB2YXIgbmV4dE5vZGUkanNjb21wJDAgPSBub2RlJGpzY29tcCQwLm5leHRTaWJsaW5nLFxuICAgICAgICAgICAgICAgIG5vZGVOYW1lID0gbm9kZSRqc2NvbXAkMC5ub2RlTmFtZTtcbiAgICAgICAgICAgICAgbm9kZSRqc2NvbXAkMFtpbnRlcm5hbEhvaXN0YWJsZU1hcmtlcl0gfHxcbiAgICAgICAgICAgICAgICBcIlNDUklQVFwiID09PSBub2RlTmFtZSB8fFxuICAgICAgICAgICAgICAgIFwiU1RZTEVcIiA9PT0gbm9kZU5hbWUgfHxcbiAgICAgICAgICAgICAgICAoXCJMSU5LXCIgPT09IG5vZGVOYW1lICYmXG4gICAgICAgICAgICAgICAgICBcInN0eWxlc2hlZXRcIiA9PT0gbm9kZSRqc2NvbXAkMC5yZWwudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUNoaWxkKG5vZGUkanNjb21wJDApO1xuICAgICAgICAgICAgICBub2RlJGpzY29tcCQwID0gbmV4dE5vZGUkanNjb21wJDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICBub2RlID09PSBQUkVBTUJMRV9DT05UUklCVVRJT05fQk9EWSAmJlxuICAgICAgICAgICAgICByZWxlYXNlU2luZ2xldG9uSW5zdGFuY2UocGFyZW50SW5zdGFuY2Uub3duZXJEb2N1bWVudC5ib2R5KTtcbiAgICAgICAgbm9kZSA9IG5leHROb2RlO1xuICAgICAgfSB3aGlsZSAobm9kZSk7XG4gICAgICByZXRyeUlmQmxvY2tlZE9uKGh5ZHJhdGlvbkluc3RhbmNlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGlkZU9yVW5oaWRlRGVoeWRyYXRlZEJvdW5kYXJ5KHN1c3BlbnNlSW5zdGFuY2UsIGlzSGlkZGVuKSB7XG4gICAgICB2YXIgbm9kZSA9IHN1c3BlbnNlSW5zdGFuY2U7XG4gICAgICBzdXNwZW5zZUluc3RhbmNlID0gMDtcbiAgICAgIGRvIHtcbiAgICAgICAgdmFyIG5leHROb2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgICAgMSA9PT0gbm9kZS5ub2RlVHlwZVxuICAgICAgICAgID8gaXNIaWRkZW5cbiAgICAgICAgICAgID8gKChub2RlLl9zdGFzaGVkRGlzcGxheSA9IG5vZGUuc3R5bGUuZGlzcGxheSksXG4gICAgICAgICAgICAgIChub2RlLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIikpXG4gICAgICAgICAgICA6ICgobm9kZS5zdHlsZS5kaXNwbGF5ID0gbm9kZS5fc3Rhc2hlZERpc3BsYXkgfHwgXCJcIiksXG4gICAgICAgICAgICAgIFwiXCIgPT09IG5vZGUuZ2V0QXR0cmlidXRlKFwic3R5bGVcIikgJiZcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShcInN0eWxlXCIpKVxuICAgICAgICAgIDogMyA9PT0gbm9kZS5ub2RlVHlwZSAmJlxuICAgICAgICAgICAgKGlzSGlkZGVuXG4gICAgICAgICAgICAgID8gKChub2RlLl9zdGFzaGVkVGV4dCA9IG5vZGUubm9kZVZhbHVlKSwgKG5vZGUubm9kZVZhbHVlID0gXCJcIikpXG4gICAgICAgICAgICAgIDogKG5vZGUubm9kZVZhbHVlID0gbm9kZS5fc3Rhc2hlZFRleHQgfHwgXCJcIikpO1xuICAgICAgICBpZiAobmV4dE5vZGUgJiYgOCA9PT0gbmV4dE5vZGUubm9kZVR5cGUpXG4gICAgICAgICAgaWYgKCgobm9kZSA9IG5leHROb2RlLmRhdGEpLCBub2RlID09PSBTVVNQRU5TRV9FTkRfREFUQSkpXG4gICAgICAgICAgICBpZiAoMCA9PT0gc3VzcGVuc2VJbnN0YW5jZSkgYnJlYWs7XG4gICAgICAgICAgICBlbHNlIHN1c3BlbnNlSW5zdGFuY2UtLTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAobm9kZSAhPT0gU1VTUEVOU0VfU1RBUlRfREFUQSAmJlxuICAgICAgICAgICAgICBub2RlICE9PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgJiZcbiAgICAgICAgICAgICAgbm9kZSAhPT0gU1VTUEVOU0VfUVVFVUVEX1NUQVJUX0RBVEEgJiZcbiAgICAgICAgICAgICAgbm9kZSAhPT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSkgfHxcbiAgICAgICAgICAgICAgc3VzcGVuc2VJbnN0YW5jZSsrO1xuICAgICAgICBub2RlID0gbmV4dE5vZGU7XG4gICAgICB9IHdoaWxlIChub2RlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGlkZURlaHlkcmF0ZWRCb3VuZGFyeShzdXNwZW5zZUluc3RhbmNlKSB7XG4gICAgICBoaWRlT3JVbmhpZGVEZWh5ZHJhdGVkQm91bmRhcnkoc3VzcGVuc2VJbnN0YW5jZSwgITApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoaWRlSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgICAgIGluc3RhbmNlID0gaW5zdGFuY2Uuc3R5bGU7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5zZXRQcm9wZXJ0eVxuICAgICAgICA/IGluc3RhbmNlLnNldFByb3BlcnR5KFwiZGlzcGxheVwiLCBcIm5vbmVcIiwgXCJpbXBvcnRhbnRcIilcbiAgICAgICAgOiAoaW5zdGFuY2UuZGlzcGxheSA9IFwibm9uZVwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGlkZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UpIHtcbiAgICAgIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1bmhpZGVEZWh5ZHJhdGVkQm91bmRhcnkoZGVoeWRyYXRlZEluc3RhbmNlKSB7XG4gICAgICBoaWRlT3JVbmhpZGVEZWh5ZHJhdGVkQm91bmRhcnkoZGVoeWRyYXRlZEluc3RhbmNlLCAhMSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVuaGlkZUluc3RhbmNlKGluc3RhbmNlLCBwcm9wcykge1xuICAgICAgcHJvcHMgPSBwcm9wc1tTVFlMRV07XG4gICAgICBwcm9wcyA9XG4gICAgICAgIHZvaWQgMCAhPT0gcHJvcHMgJiYgbnVsbCAhPT0gcHJvcHMgJiYgcHJvcHMuaGFzT3duUHJvcGVydHkoXCJkaXNwbGF5XCIpXG4gICAgICAgICAgPyBwcm9wcy5kaXNwbGF5XG4gICAgICAgICAgOiBudWxsO1xuICAgICAgaW5zdGFuY2Uuc3R5bGUuZGlzcGxheSA9XG4gICAgICAgIG51bGwgPT0gcHJvcHMgfHwgXCJib29sZWFuXCIgPT09IHR5cGVvZiBwcm9wcyA/IFwiXCIgOiAoXCJcIiArIHByb3BzKS50cmltKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVuaGlkZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHQpIHtcbiAgICAgIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSB0ZXh0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbGVhckNvbnRhaW5lclNwYXJpbmdseShjb250YWluZXIpIHtcbiAgICAgIHZhciBuZXh0Tm9kZSA9IGNvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgbmV4dE5vZGUgJiYgMTAgPT09IG5leHROb2RlLm5vZGVUeXBlICYmIChuZXh0Tm9kZSA9IG5leHROb2RlLm5leHRTaWJsaW5nKTtcbiAgICAgIGZvciAoOyBuZXh0Tm9kZTsgKSB7XG4gICAgICAgIHZhciBub2RlID0gbmV4dE5vZGU7XG4gICAgICAgIG5leHROb2RlID0gbmV4dE5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgIHN3aXRjaCAobm9kZS5ub2RlTmFtZSkge1xuICAgICAgICAgIGNhc2UgXCJIVE1MXCI6XG4gICAgICAgICAgY2FzZSBcIkhFQURcIjpcbiAgICAgICAgICBjYXNlIFwiQk9EWVwiOlxuICAgICAgICAgICAgY2xlYXJDb250YWluZXJTcGFyaW5nbHkobm9kZSk7XG4gICAgICAgICAgICBkZXRhY2hEZWxldGVkSW5zdGFuY2Uobm9kZSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICBjYXNlIFwiU0NSSVBUXCI6XG4gICAgICAgICAgY2FzZSBcIlNUWUxFXCI6XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICBjYXNlIFwiTElOS1wiOlxuICAgICAgICAgICAgaWYgKFwic3R5bGVzaGVldFwiID09PSBub2RlLnJlbC50b0xvd2VyQ2FzZSgpKSBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbkh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgdHlwZSwgcHJvcHMsIGluUm9vdE9yU2luZ2xldG9uKSB7XG4gICAgICBmb3IgKDsgMSA9PT0gaW5zdGFuY2Uubm9kZVR5cGU7ICkge1xuICAgICAgICB2YXIgYW55UHJvcHMgPSBwcm9wcztcbiAgICAgICAgaWYgKGluc3RhbmNlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IHR5cGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFpblJvb3RPclNpbmdsZXRvbiAmJlxuICAgICAgICAgICAgKFwiSU5QVVRcIiAhPT0gaW5zdGFuY2Uubm9kZU5hbWUgfHwgXCJoaWRkZW5cIiAhPT0gaW5zdGFuY2UudHlwZSlcbiAgICAgICAgICApXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICghaW5Sb290T3JTaW5nbGV0b24pXG4gICAgICAgICAgaWYgKFwiaW5wdXRcIiA9PT0gdHlwZSAmJiBcImhpZGRlblwiID09PSBpbnN0YW5jZS50eXBlKSB7XG4gICAgICAgICAgICBjaGVja0F0dHJpYnV0ZVN0cmluZ0NvZXJjaW9uKGFueVByb3BzLm5hbWUsIFwibmFtZVwiKTtcbiAgICAgICAgICAgIHZhciBuYW1lID0gbnVsbCA9PSBhbnlQcm9wcy5uYW1lID8gbnVsbCA6IFwiXCIgKyBhbnlQcm9wcy5uYW1lO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBcImhpZGRlblwiID09PSBhbnlQcm9wcy50eXBlICYmXG4gICAgICAgICAgICAgIGluc3RhbmNlLmdldEF0dHJpYnV0ZShcIm5hbWVcIikgPT09IG5hbWVcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgIH0gZWxzZSByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIGVsc2UgaWYgKCFpbnN0YW5jZVtpbnRlcm5hbEhvaXN0YWJsZU1hcmtlcl0pXG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwibWV0YVwiOlxuICAgICAgICAgICAgICBpZiAoIWluc3RhbmNlLmhhc0F0dHJpYnV0ZShcIml0ZW1wcm9wXCIpKSBicmVhaztcbiAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICAgICAgbmFtZSA9IGluc3RhbmNlLmdldEF0dHJpYnV0ZShcInJlbFwiKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIFwic3R5bGVzaGVldFwiID09PSBuYW1lICYmXG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuaGFzQXR0cmlidXRlKFwiZGF0YS1wcmVjZWRlbmNlXCIpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgbmFtZSAhPT0gYW55UHJvcHMucmVsIHx8XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSAhPT1cbiAgICAgICAgICAgICAgICAgIChudWxsID09IGFueVByb3BzLmhyZWYgfHwgXCJcIiA9PT0gYW55UHJvcHMuaHJlZlxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiBhbnlQcm9wcy5ocmVmKSB8fFxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmdldEF0dHJpYnV0ZShcImNyb3Nzb3JpZ2luXCIpICE9PVxuICAgICAgICAgICAgICAgICAgKG51bGwgPT0gYW55UHJvcHMuY3Jvc3NPcmlnaW5cbiAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgIDogYW55UHJvcHMuY3Jvc3NPcmlnaW4pIHx8XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwidGl0bGVcIikgIT09XG4gICAgICAgICAgICAgICAgICAobnVsbCA9PSBhbnlQcm9wcy50aXRsZSA/IG51bGwgOiBhbnlQcm9wcy50aXRsZSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLmhhc0F0dHJpYnV0ZShcImRhdGEtcHJlY2VkZW5jZVwiKSkgYnJlYWs7XG4gICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICAgICAgbmFtZSA9IGluc3RhbmNlLmdldEF0dHJpYnV0ZShcInNyY1wiKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChuYW1lICE9PSAobnVsbCA9PSBhbnlQcm9wcy5zcmMgPyBudWxsIDogYW55UHJvcHMuc3JjKSB8fFxuICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSAhPT1cbiAgICAgICAgICAgICAgICAgICAgKG51bGwgPT0gYW55UHJvcHMudHlwZSA/IG51bGwgOiBhbnlQcm9wcy50eXBlKSB8fFxuICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuZ2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIikgIT09XG4gICAgICAgICAgICAgICAgICAgIChudWxsID09IGFueVByb3BzLmNyb3NzT3JpZ2luXG4gICAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgOiBhbnlQcm9wcy5jcm9zc09yaWdpbikpICYmXG4gICAgICAgICAgICAgICAgbmFtZSAmJlxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmhhc0F0dHJpYnV0ZShcImFzeW5jXCIpICYmXG4gICAgICAgICAgICAgICAgIWluc3RhbmNlLmhhc0F0dHJpYnV0ZShcIml0ZW1wcm9wXCIpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShpbnN0YW5jZS5uZXh0U2libGluZyk7XG4gICAgICAgIGlmIChudWxsID09PSBpbnN0YW5jZSkgYnJlYWs7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2FuSHlkcmF0ZVRleHRJbnN0YW5jZShpbnN0YW5jZSwgdGV4dCwgaW5Sb290T3JTaW5nbGV0b24pIHtcbiAgICAgIGlmIChcIlwiID09PSB0ZXh0KSByZXR1cm4gbnVsbDtcbiAgICAgIGZvciAoOyAzICE9PSBpbnN0YW5jZS5ub2RlVHlwZTsgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoMSAhPT0gaW5zdGFuY2Uubm9kZVR5cGUgfHxcbiAgICAgICAgICAgIFwiSU5QVVRcIiAhPT0gaW5zdGFuY2Uubm9kZU5hbWUgfHxcbiAgICAgICAgICAgIFwiaGlkZGVuXCIgIT09IGluc3RhbmNlLnR5cGUpICYmXG4gICAgICAgICAgIWluUm9vdE9yU2luZ2xldG9uXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZShpbnN0YW5jZS5uZXh0U2libGluZyk7XG4gICAgICAgIGlmIChudWxsID09PSBpbnN0YW5jZSkgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbkh5ZHJhdGVIeWRyYXRpb25Cb3VuZGFyeShpbnN0YW5jZSwgaW5Sb290T3JTaW5nbGV0b24pIHtcbiAgICAgIGZvciAoOyA4ICE9PSBpbnN0YW5jZS5ub2RlVHlwZTsgKSB7XG4gICAgICAgIGlmICghaW5Sb290T3JTaW5nbGV0b24pIHJldHVybiBudWxsO1xuICAgICAgICBpbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlKGluc3RhbmNlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgaWYgKG51bGwgPT09IGluc3RhbmNlKSByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNTdXNwZW5zZUluc3RhbmNlUGVuZGluZyhpbnN0YW5jZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgaW5zdGFuY2UuZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBIHx8XG4gICAgICAgIGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX1FVRVVFRF9TVEFSVF9EQVRBXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayhpbnN0YW5jZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgaW5zdGFuY2UuZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fFxuICAgICAgICAoaW5zdGFuY2UuZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBICYmXG4gICAgICAgICAgaW5zdGFuY2Uub3duZXJEb2N1bWVudC5yZWFkeVN0YXRlICE9PSBET0NVTUVOVF9SRUFEWV9TVEFURV9MT0FESU5HKVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVnaXN0ZXJTdXNwZW5zZUluc3RhbmNlUmV0cnkoaW5zdGFuY2UsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgb3duZXJEb2N1bWVudCA9IGluc3RhbmNlLm93bmVyRG9jdW1lbnQ7XG4gICAgICBpZiAoaW5zdGFuY2UuZGF0YSA9PT0gU1VTUEVOU0VfUVVFVUVEX1NUQVJUX0RBVEEpXG4gICAgICAgIGluc3RhbmNlLl9yZWFjdFJldHJ5ID0gY2FsbGJhY2s7XG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgaW5zdGFuY2UuZGF0YSAhPT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBIHx8XG4gICAgICAgIG93bmVyRG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gRE9DVU1FTlRfUkVBRFlfU1RBVEVfTE9BRElOR1xuICAgICAgKVxuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgIG93bmVyRG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgbGlzdGVuZXIpO1xuICAgICAgICB9O1xuICAgICAgICBvd25lckRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGxpc3RlbmVyKTtcbiAgICAgICAgaW5zdGFuY2UuX3JlYWN0UmV0cnkgPSBsaXN0ZW5lcjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGUobm9kZSkge1xuICAgICAgZm9yICg7IG51bGwgIT0gbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgdmFyIG5vZGVUeXBlID0gbm9kZS5ub2RlVHlwZTtcbiAgICAgICAgaWYgKDEgPT09IG5vZGVUeXBlIHx8IDMgPT09IG5vZGVUeXBlKSBicmVhaztcbiAgICAgICAgaWYgKDggPT09IG5vZGVUeXBlKSB7XG4gICAgICAgICAgbm9kZVR5cGUgPSBub2RlLmRhdGE7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbm9kZVR5cGUgPT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgfHxcbiAgICAgICAgICAgIG5vZGVUeXBlID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBIHx8XG4gICAgICAgICAgICBub2RlVHlwZSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBIHx8XG4gICAgICAgICAgICBub2RlVHlwZSA9PT0gU1VTUEVOU0VfUVVFVUVEX1NUQVJUX0RBVEEgfHxcbiAgICAgICAgICAgIG5vZGVUeXBlID09PSBBQ1RJVklUWV9TVEFSVF9EQVRBIHx8XG4gICAgICAgICAgICBub2RlVHlwZSA9PT0gRk9STV9TVEFURV9JU19NQVRDSElORyB8fFxuICAgICAgICAgICAgbm9kZVR5cGUgPT09IEZPUk1fU1RBVEVfSVNfTk9UX01BVENISU5HXG4gICAgICAgICAgKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgaWYgKG5vZGVUeXBlID09PSBTVVNQRU5TRV9FTkRfREFUQSB8fCBub2RlVHlwZSA9PT0gQUNUSVZJVFlfRU5EX0RBVEEpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlSHlkcmF0YWJsZUluc3RhbmNlRm9yRGV2V2FybmluZ3MoaW5zdGFuY2UpIHtcbiAgICAgIGlmICgxID09PSBpbnN0YW5jZS5ub2RlVHlwZSkge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciBKU0NvbXBpbGVyX3RlbXBfY29uc3QgPSBpbnN0YW5jZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXMgPSB7fSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBpbnN0YW5jZS5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgICAgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoO1xuICAgICAgICAgIGkrK1xuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgYXR0ciA9IGF0dHJpYnV0ZXNbaV07XG4gICAgICAgICAgc2VydmVyRGlmZmVyZW5jZXNbZ2V0UHJvcE5hbWVGcm9tQXR0cmlidXRlTmFtZShhdHRyLm5hbWUpXSA9XG4gICAgICAgICAgICBcInN0eWxlXCIgPT09IGF0dHIubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgID8gZ2V0U3R5bGVzT2JqZWN0RnJvbUVsZW1lbnQoaW5zdGFuY2UpXG4gICAgICAgICAgICAgIDogYXR0ci52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB0eXBlOiBKU0NvbXBpbGVyX3RlbXBfY29uc3QsIHByb3BzOiBzZXJ2ZXJEaWZmZXJlbmNlcyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIDggPT09IGluc3RhbmNlLm5vZGVUeXBlXG4gICAgICAgID8gaW5zdGFuY2UuZGF0YSA9PT0gQUNUSVZJVFlfU1RBUlRfREFUQVxuICAgICAgICAgID8geyB0eXBlOiBcIkFjdGl2aXR5XCIsIHByb3BzOiB7fSB9XG4gICAgICAgICAgOiB7IHR5cGU6IFwiU3VzcGVuc2VcIiwgcHJvcHM6IHt9IH1cbiAgICAgICAgOiBpbnN0YW5jZS5ub2RlVmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpZmZIeWRyYXRlZFRleHRGb3JEZXZXYXJuaW5ncyh0ZXh0SW5zdGFuY2UsIHRleHQsIHBhcmVudFByb3BzKSB7XG4gICAgICByZXR1cm4gbnVsbCA9PT0gcGFyZW50UHJvcHMgfHxcbiAgICAgICAgITAgIT09IHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HXVxuICAgICAgICA/ICh0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID09PSB0ZXh0XG4gICAgICAgICAgICA/ICh0ZXh0SW5zdGFuY2UgPSBudWxsKVxuICAgICAgICAgICAgOiAoKHRleHQgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUodGV4dCkpLFxuICAgICAgICAgICAgICAodGV4dEluc3RhbmNlID1cbiAgICAgICAgICAgICAgICBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUodGV4dEluc3RhbmNlLm5vZGVWYWx1ZSkgPT09XG4gICAgICAgICAgICAgICAgdGV4dFxuICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICA6IHRleHRJbnN0YW5jZS5ub2RlVmFsdWUpKSxcbiAgICAgICAgICB0ZXh0SW5zdGFuY2UpXG4gICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGVJbnN0YW5jZUFmdGVySHlkcmF0aW9uQm91bmRhcnkoXG4gICAgICBoeWRyYXRpb25JbnN0YW5jZVxuICAgICkge1xuICAgICAgaHlkcmF0aW9uSW5zdGFuY2UgPSBoeWRyYXRpb25JbnN0YW5jZS5uZXh0U2libGluZztcbiAgICAgIGZvciAodmFyIGRlcHRoID0gMDsgaHlkcmF0aW9uSW5zdGFuY2U7ICkge1xuICAgICAgICBpZiAoOCA9PT0gaHlkcmF0aW9uSW5zdGFuY2Uubm9kZVR5cGUpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IGh5ZHJhdGlvbkluc3RhbmNlLmRhdGE7XG4gICAgICAgICAgaWYgKGRhdGEgPT09IFNVU1BFTlNFX0VORF9EQVRBIHx8IGRhdGEgPT09IEFDVElWSVRZX0VORF9EQVRBKSB7XG4gICAgICAgICAgICBpZiAoMCA9PT0gZGVwdGgpXG4gICAgICAgICAgICAgIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZShoeWRyYXRpb25JbnN0YW5jZS5uZXh0U2libGluZyk7XG4gICAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgKGRhdGEgIT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgJiZcbiAgICAgICAgICAgICAgZGF0YSAhPT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSAmJlxuICAgICAgICAgICAgICBkYXRhICE9PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEgJiZcbiAgICAgICAgICAgICAgZGF0YSAhPT0gU1VTUEVOU0VfUVVFVUVEX1NUQVJUX0RBVEEgJiZcbiAgICAgICAgICAgICAgZGF0YSAhPT0gQUNUSVZJVFlfU1RBUlRfREFUQSkgfHxcbiAgICAgICAgICAgICAgZGVwdGgrKztcbiAgICAgICAgfVxuICAgICAgICBoeWRyYXRpb25JbnN0YW5jZSA9IGh5ZHJhdGlvbkluc3RhbmNlLm5leHRTaWJsaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFBhcmVudEh5ZHJhdGlvbkJvdW5kYXJ5KHRhcmdldEluc3RhbmNlKSB7XG4gICAgICB0YXJnZXRJbnN0YW5jZSA9IHRhcmdldEluc3RhbmNlLnByZXZpb3VzU2libGluZztcbiAgICAgIGZvciAodmFyIGRlcHRoID0gMDsgdGFyZ2V0SW5zdGFuY2U7ICkge1xuICAgICAgICBpZiAoOCA9PT0gdGFyZ2V0SW5zdGFuY2Uubm9kZVR5cGUpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IHRhcmdldEluc3RhbmNlLmRhdGE7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGF0YSA9PT0gU1VTUEVOU0VfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBIHx8XG4gICAgICAgICAgICBkYXRhID09PSBTVVNQRU5TRV9RVUVVRURfU1RBUlRfREFUQSB8fFxuICAgICAgICAgICAgZGF0YSA9PT0gQUNUSVZJVFlfU1RBUlRfREFUQVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKDAgPT09IGRlcHRoKSByZXR1cm4gdGFyZ2V0SW5zdGFuY2U7XG4gICAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgKGRhdGEgIT09IFNVU1BFTlNFX0VORF9EQVRBICYmIGRhdGEgIT09IEFDVElWSVRZX0VORF9EQVRBKSB8fFxuICAgICAgICAgICAgICBkZXB0aCsrO1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldEluc3RhbmNlID0gdGFyZ2V0SW5zdGFuY2UucHJldmlvdXNTaWJsaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbW1pdEh5ZHJhdGVkQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICAgICAgcmV0cnlJZkJsb2NrZWRPbihjb250YWluZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21taXRIeWRyYXRlZEFjdGl2aXR5SW5zdGFuY2UoYWN0aXZpdHlJbnN0YW5jZSkge1xuICAgICAgcmV0cnlJZkJsb2NrZWRPbihhY3Rpdml0eUluc3RhbmNlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tbWl0SHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgICAgIHJldHJ5SWZCbG9ja2VkT24oc3VzcGVuc2VJbnN0YW5jZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVTaW5nbGV0b25JbnN0YW5jZShcbiAgICAgIHR5cGUsXG4gICAgICBwcm9wcyxcbiAgICAgIHJvb3RDb250YWluZXJJbnN0YW5jZSxcbiAgICAgIGhvc3RDb250ZXh0LFxuICAgICAgdmFsaWRhdGVET01OZXN0aW5nRGV2XG4gICAgKSB7XG4gICAgICB2YWxpZGF0ZURPTU5lc3RpbmdEZXYgJiZcbiAgICAgICAgdmFsaWRhdGVET01OZXN0aW5nKHR5cGUsIGhvc3RDb250ZXh0LmFuY2VzdG9ySW5mbyk7XG4gICAgICBwcm9wcyA9IGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVySW5zdGFuY2UpO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJodG1sXCI6XG4gICAgICAgICAgdHlwZSA9IHByb3BzLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgICBpZiAoIXR5cGUpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdCBleHBlY3RlZCBhbiA8aHRtbD4gZWxlbWVudCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB0byBleGlzdCBpbiB0aGUgRG9jdW1lbnQgYnV0IG9uZSB3YXMgbm90IGZvdW5kLiBSZWFjdCBuZXZlciByZW1vdmVzIHRoZSBkb2N1bWVudEVsZW1lbnQgZm9yIGFueSBEb2N1bWVudCBpdCByZW5kZXJzIGludG8gc28gdGhlIGNhdXNlIGlzIGxpa2VseSBpbiBzb21lIG90aGVyIHNjcmlwdCBydW5uaW5nIG9uIHRoaXMgcGFnZS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgY2FzZSBcImhlYWRcIjpcbiAgICAgICAgICB0eXBlID0gcHJvcHMuaGVhZDtcbiAgICAgICAgICBpZiAoIXR5cGUpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdCBleHBlY3RlZCBhIDxoZWFkPiBlbGVtZW50IChkb2N1bWVudC5oZWFkKSB0byBleGlzdCBpbiB0aGUgRG9jdW1lbnQgYnV0IG9uZSB3YXMgbm90IGZvdW5kLiBSZWFjdCBuZXZlciByZW1vdmVzIHRoZSBoZWFkIGZvciBhbnkgRG9jdW1lbnQgaXQgcmVuZGVycyBpbnRvIHNvIHRoZSBjYXVzZSBpcyBsaWtlbHkgaW4gc29tZSBvdGhlciBzY3JpcHQgcnVubmluZyBvbiB0aGlzIHBhZ2UuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIGNhc2UgXCJib2R5XCI6XG4gICAgICAgICAgdHlwZSA9IHByb3BzLmJvZHk7XG4gICAgICAgICAgaWYgKCF0eXBlKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3QgZXhwZWN0ZWQgYSA8Ym9keT4gZWxlbWVudCAoZG9jdW1lbnQuYm9keSkgdG8gZXhpc3QgaW4gdGhlIERvY3VtZW50IGJ1dCBvbmUgd2FzIG5vdCBmb3VuZC4gUmVhY3QgbmV2ZXIgcmVtb3ZlcyB0aGUgYm9keSBmb3IgYW55IERvY3VtZW50IGl0IHJlbmRlcnMgaW50byBzbyB0aGUgY2F1c2UgaXMgbGlrZWx5IGluIHNvbWUgb3RoZXIgc2NyaXB0IHJ1bm5pbmcgb24gdGhpcyBwYWdlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJyZXNvbHZlU2luZ2xldG9uSW5zdGFuY2Ugd2FzIGNhbGxlZCB3aXRoIGFuIGVsZW1lbnQgdHlwZSB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCJcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhY3F1aXJlU2luZ2xldG9uSW5zdGFuY2UoXG4gICAgICB0eXBlLFxuICAgICAgcHJvcHMsXG4gICAgICBpbnN0YW5jZSxcbiAgICAgIGludGVybmFsSW5zdGFuY2VIYW5kbGVcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgIWluc3RhbmNlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldICYmXG4gICAgICAgIGdldEluc3RhbmNlRnJvbU5vZGUoaW5zdGFuY2UpXG4gICAgICApIHtcbiAgICAgICAgdmFyIHRhZ05hbWUgPSBpbnN0YW5jZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJZb3UgYXJlIG1vdW50aW5nIGEgbmV3ICVzIGNvbXBvbmVudCB3aGVuIGEgcHJldmlvdXMgb25lIGhhcyBub3QgZmlyc3QgdW5tb3VudGVkLiBJdCBpcyBhbiBlcnJvciB0byByZW5kZXIgbW9yZSB0aGFuIG9uZSAlcyBjb21wb25lbnQgYXQgYSB0aW1lIGFuZCBhdHRyaWJ1dGVzIGFuZCBjaGlsZHJlbiBvZiB0aGVzZSBjb21wb25lbnRzIHdpbGwgbGlrZWx5IGZhaWwgaW4gdW5wcmVkaWN0YWJsZSB3YXlzLiBQbGVhc2Ugb25seSByZW5kZXIgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgPCVzPiBhbmQgaWYgeW91IG5lZWQgdG8gbW91bnQgYSBuZXcgb25lLCBlbnN1cmUgYW55IHByZXZpb3VzIG9uZXMgaGF2ZSB1bm1vdW50ZWQgZmlyc3QuXCIsXG4gICAgICAgICAgdGFnTmFtZSxcbiAgICAgICAgICB0YWdOYW1lLFxuICAgICAgICAgIHRhZ05hbWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiaHRtbFwiOlxuICAgICAgICBjYXNlIFwiaGVhZFwiOlxuICAgICAgICBjYXNlIFwiYm9keVwiOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcImFjcXVpcmVTaW5nbGV0b25JbnN0YW5jZSB3YXMgY2FsbGVkIHdpdGggYW4gZWxlbWVudCB0eXBlIHRoYXQgaXMgbm90IHN1cHBvcnRlZC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgICBmb3IgKHRhZ05hbWUgPSBpbnN0YW5jZS5hdHRyaWJ1dGVzOyB0YWdOYW1lLmxlbmd0aDsgKVxuICAgICAgICBpbnN0YW5jZS5yZW1vdmVBdHRyaWJ1dGVOb2RlKHRhZ05hbWVbMF0pO1xuICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoaW5zdGFuY2UsIHR5cGUsIHByb3BzKTtcbiAgICAgIGluc3RhbmNlW2ludGVybmFsSW5zdGFuY2VLZXldID0gaW50ZXJuYWxJbnN0YW5jZUhhbmRsZTtcbiAgICAgIGluc3RhbmNlW2ludGVybmFsUHJvcHNLZXldID0gcHJvcHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGVhc2VTaW5nbGV0b25JbnN0YW5jZShpbnN0YW5jZSkge1xuICAgICAgZm9yICh2YXIgYXR0cmlidXRlcyA9IGluc3RhbmNlLmF0dHJpYnV0ZXM7IGF0dHJpYnV0ZXMubGVuZ3RoOyApXG4gICAgICAgIGluc3RhbmNlLnJlbW92ZUF0dHJpYnV0ZU5vZGUoYXR0cmlidXRlc1swXSk7XG4gICAgICBkZXRhY2hEZWxldGVkSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRIb2lzdGFibGVSb290KGNvbnRhaW5lcikge1xuICAgICAgcmV0dXJuIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNvbnRhaW5lci5nZXRSb290Tm9kZVxuICAgICAgICA/IGNvbnRhaW5lci5nZXRSb290Tm9kZSgpXG4gICAgICAgIDogOSA9PT0gY29udGFpbmVyLm5vZGVUeXBlXG4gICAgICAgICAgPyBjb250YWluZXJcbiAgICAgICAgICA6IGNvbnRhaW5lci5vd25lckRvY3VtZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcmVjb25uZWN0QXMocmVsLCBocmVmLCBjcm9zc09yaWdpbikge1xuICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxEb2N1bWVudDtcbiAgICAgIGlmIChvd25lckRvY3VtZW50ICYmIFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmIGhyZWYpIHtcbiAgICAgICAgdmFyIGxpbWl0ZWRFc2NhcGVkSHJlZiA9XG4gICAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhocmVmKTtcbiAgICAgICAgbGltaXRlZEVzY2FwZWRIcmVmID1cbiAgICAgICAgICAnbGlua1tyZWw9XCInICsgcmVsICsgJ1wiXVtocmVmPVwiJyArIGxpbWl0ZWRFc2NhcGVkSHJlZiArICdcIl0nO1xuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgY3Jvc3NPcmlnaW4gJiZcbiAgICAgICAgICAobGltaXRlZEVzY2FwZWRIcmVmICs9ICdbY3Jvc3NvcmlnaW49XCInICsgY3Jvc3NPcmlnaW4gKyAnXCJdJyk7XG4gICAgICAgIHByZWNvbm5lY3RzU2V0LmhhcyhsaW1pdGVkRXNjYXBlZEhyZWYpIHx8XG4gICAgICAgICAgKHByZWNvbm5lY3RzU2V0LmFkZChsaW1pdGVkRXNjYXBlZEhyZWYpLFxuICAgICAgICAgIChyZWwgPSB7IHJlbDogcmVsLCBjcm9zc09yaWdpbjogY3Jvc3NPcmlnaW4sIGhyZWY6IGhyZWYgfSksXG4gICAgICAgICAgbnVsbCA9PT0gb3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKGxpbWl0ZWRFc2NhcGVkSHJlZikgJiZcbiAgICAgICAgICAgICgoaHJlZiA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIikpLFxuICAgICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoaHJlZiwgXCJsaW5rXCIsIHJlbCksXG4gICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGhyZWYpLFxuICAgICAgICAgICAgb3duZXJEb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGhyZWYpKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFJlc291cmNlKHR5cGUsIGN1cnJlbnRQcm9wcywgcGVuZGluZ1Byb3BzLCBjdXJyZW50UmVzb3VyY2UpIHtcbiAgICAgIHZhciByZXNvdXJjZVJvb3QgPSAocmVzb3VyY2VSb290ID0gcm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudClcbiAgICAgICAgPyBnZXRIb2lzdGFibGVSb290KHJlc291cmNlUm9vdClcbiAgICAgICAgOiBudWxsO1xuICAgICAgaWYgKCFyZXNvdXJjZVJvb3QpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdcInJlc291cmNlUm9vdFwiIHdhcyBleHBlY3RlZCB0byBleGlzdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4nXG4gICAgICAgICk7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcIm1ldGFcIjpcbiAgICAgICAgY2FzZSBcInRpdGxlXCI6XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNhc2UgXCJzdHlsZVwiOlxuICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiID09PSB0eXBlb2YgcGVuZGluZ1Byb3BzLnByZWNlZGVuY2UgJiZcbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwZW5kaW5nUHJvcHMuaHJlZlxuICAgICAgICAgICAgPyAoKHBlbmRpbmdQcm9wcyA9IGdldFN0eWxlS2V5KHBlbmRpbmdQcm9wcy5ocmVmKSksXG4gICAgICAgICAgICAgIChjdXJyZW50UHJvcHMgPVxuICAgICAgICAgICAgICAgIGdldFJlc291cmNlc0Zyb21Sb290KHJlc291cmNlUm9vdCkuaG9pc3RhYmxlU3R5bGVzKSxcbiAgICAgICAgICAgICAgKGN1cnJlbnRSZXNvdXJjZSA9IGN1cnJlbnRQcm9wcy5nZXQocGVuZGluZ1Byb3BzKSksXG4gICAgICAgICAgICAgIGN1cnJlbnRSZXNvdXJjZSB8fFxuICAgICAgICAgICAgICAgICgoY3VycmVudFJlc291cmNlID0ge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHlsZVwiLFxuICAgICAgICAgICAgICAgICAgaW5zdGFuY2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICBjb3VudDogMCxcbiAgICAgICAgICAgICAgICAgIHN0YXRlOiBudWxsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY3VycmVudFByb3BzLnNldChwZW5kaW5nUHJvcHMsIGN1cnJlbnRSZXNvdXJjZSkpLFxuICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UpXG4gICAgICAgICAgICA6IHsgdHlwZTogXCJ2b2lkXCIsIGluc3RhbmNlOiBudWxsLCBjb3VudDogMCwgc3RhdGU6IG51bGwgfTtcbiAgICAgICAgY2FzZSBcImxpbmtcIjpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBcInN0eWxlc2hlZXRcIiA9PT0gcGVuZGluZ1Byb3BzLnJlbCAmJlxuICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHBlbmRpbmdQcm9wcy5ocmVmICYmXG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcGVuZGluZ1Byb3BzLnByZWNlZGVuY2VcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHR5cGUgPSBnZXRTdHlsZUtleShwZW5kaW5nUHJvcHMuaHJlZik7XG4gICAgICAgICAgICB2YXIgX3N0eWxlcyA9IGdldFJlc291cmNlc0Zyb21Sb290KHJlc291cmNlUm9vdCkuaG9pc3RhYmxlU3R5bGVzLFxuICAgICAgICAgICAgICBfcmVzb3VyY2UgPSBfc3R5bGVzLmdldCh0eXBlKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIV9yZXNvdXJjZSAmJlxuICAgICAgICAgICAgICAoKHJlc291cmNlUm9vdCA9IHJlc291cmNlUm9vdC5vd25lckRvY3VtZW50IHx8IHJlc291cmNlUm9vdCksXG4gICAgICAgICAgICAgIChfcmVzb3VyY2UgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHlsZXNoZWV0XCIsXG4gICAgICAgICAgICAgICAgaW5zdGFuY2U6IG51bGwsXG4gICAgICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICAgICAgc3RhdGU6IHsgbG9hZGluZzogTm90TG9hZGVkLCBwcmVsb2FkOiBudWxsIH1cbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF9zdHlsZXMuc2V0KHR5cGUsIF9yZXNvdXJjZSksXG4gICAgICAgICAgICAgIChfc3R5bGVzID0gcmVzb3VyY2VSb290LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgZ2V0U3R5bGVzaGVldFNlbGVjdG9yRnJvbUtleSh0eXBlKVxuICAgICAgICAgICAgICApKSAmJlxuICAgICAgICAgICAgICAgICFfc3R5bGVzLl9wICYmXG4gICAgICAgICAgICAgICAgKChfcmVzb3VyY2UuaW5zdGFuY2UgPSBfc3R5bGVzKSxcbiAgICAgICAgICAgICAgICAoX3Jlc291cmNlLnN0YXRlLmxvYWRpbmcgPSBMb2FkZWQgfCBJbnNlcnRlZCkpLFxuICAgICAgICAgICAgICAhcHJlbG9hZFByb3BzTWFwLmhhcyh0eXBlKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB2YXIgcHJlbG9hZFByb3BzID0ge1xuICAgICAgICAgICAgICAgIHJlbDogXCJwcmVsb2FkXCIsXG4gICAgICAgICAgICAgICAgYXM6IFwic3R5bGVcIixcbiAgICAgICAgICAgICAgICBocmVmOiBwZW5kaW5nUHJvcHMuaHJlZixcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogcGVuZGluZ1Byb3BzLmNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGludGVncml0eTogcGVuZGluZ1Byb3BzLmludGVncml0eSxcbiAgICAgICAgICAgICAgICBtZWRpYTogcGVuZGluZ1Byb3BzLm1lZGlhLFxuICAgICAgICAgICAgICAgIGhyZWZMYW5nOiBwZW5kaW5nUHJvcHMuaHJlZkxhbmcsXG4gICAgICAgICAgICAgICAgcmVmZXJyZXJQb2xpY3k6IHBlbmRpbmdQcm9wcy5yZWZlcnJlclBvbGljeVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBwcmVsb2FkUHJvcHNNYXAuc2V0KHR5cGUsIHByZWxvYWRQcm9wcyk7XG4gICAgICAgICAgICAgIF9zdHlsZXMgfHxcbiAgICAgICAgICAgICAgICBwcmVsb2FkU3R5bGVzaGVldChcbiAgICAgICAgICAgICAgICAgIHJlc291cmNlUm9vdCxcbiAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICBwcmVsb2FkUHJvcHMsXG4gICAgICAgICAgICAgICAgICBfcmVzb3VyY2Uuc3RhdGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGN1cnJlbnRQcm9wcyAmJiBudWxsID09PSBjdXJyZW50UmVzb3VyY2UpXG4gICAgICAgICAgICAgIHRocm93IChcbiAgICAgICAgICAgICAgICAoKHBlbmRpbmdQcm9wcyA9XG4gICAgICAgICAgICAgICAgICBcIlxcblxcbiAgLSBcIiArXG4gICAgICAgICAgICAgICAgICBkZXNjcmliZUxpbmtGb3JSZXNvdXJjZUVycm9yREVWKGN1cnJlbnRQcm9wcykgK1xuICAgICAgICAgICAgICAgICAgXCJcXG4gICsgXCIgK1xuICAgICAgICAgICAgICAgICAgZGVzY3JpYmVMaW5rRm9yUmVzb3VyY2VFcnJvckRFVihwZW5kaW5nUHJvcHMpKSxcbiAgICAgICAgICAgICAgICBFcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiRXhwZWN0ZWQgPGxpbms+IG5vdCB0byB1cGRhdGUgdG8gYmUgdXBkYXRlZCB0byBhIHN0eWxlc2hlZXQgd2l0aCBwcmVjZWRlbmNlLiBDaGVjayB0aGUgYHJlbGAsIGBocmVmYCwgYW5kIGBwcmVjZWRlbmNlYCBwcm9wcyBvZiB0aGlzIGNvbXBvbmVudC4gQWx0ZXJuYXRpdmVseSwgY2hlY2sgd2hldGhlciB0d28gZGlmZmVyZW50IDxsaW5rPiBjb21wb25lbnRzIHJlbmRlciBpbiB0aGUgc2FtZSBzbG90IG9yIHNoYXJlIHRoZSBzYW1lIGtleS5cIiArXG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdQcm9wc1xuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gX3Jlc291cmNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY3VycmVudFByb3BzICYmIG51bGwgIT09IGN1cnJlbnRSZXNvdXJjZSlcbiAgICAgICAgICAgIHRocm93IChcbiAgICAgICAgICAgICAgKChwZW5kaW5nUHJvcHMgPVxuICAgICAgICAgICAgICAgIFwiXFxuXFxuICAtIFwiICtcbiAgICAgICAgICAgICAgICBkZXNjcmliZUxpbmtGb3JSZXNvdXJjZUVycm9yREVWKGN1cnJlbnRQcm9wcykgK1xuICAgICAgICAgICAgICAgIFwiXFxuICArIFwiICtcbiAgICAgICAgICAgICAgICBkZXNjcmliZUxpbmtGb3JSZXNvdXJjZUVycm9yREVWKHBlbmRpbmdQcm9wcykpLFxuICAgICAgICAgICAgICBFcnJvcihcbiAgICAgICAgICAgICAgICBcIkV4cGVjdGVkIHN0eWxlc2hlZXQgd2l0aCBwcmVjZWRlbmNlIHRvIG5vdCBiZSB1cGRhdGVkIHRvIGEgZGlmZmVyZW50IGtpbmQgb2YgPGxpbms+LiBDaGVjayB0aGUgYHJlbGAsIGBocmVmYCwgYW5kIGBwcmVjZWRlbmNlYCBwcm9wcyBvZiB0aGlzIGNvbXBvbmVudC4gQWx0ZXJuYXRpdmVseSwgY2hlY2sgd2hldGhlciB0d28gZGlmZmVyZW50IDxsaW5rPiBjb21wb25lbnRzIHJlbmRlciBpbiB0aGUgc2FtZSBzbG90IG9yIHNoYXJlIHRoZSBzYW1lIGtleS5cIiArXG4gICAgICAgICAgICAgICAgICBwZW5kaW5nUHJvcHNcbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGN1cnJlbnRQcm9wcyA9IHBlbmRpbmdQcm9wcy5hc3luYyksXG4gICAgICAgICAgICAocGVuZGluZ1Byb3BzID0gcGVuZGluZ1Byb3BzLnNyYyksXG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcGVuZGluZ1Byb3BzICYmXG4gICAgICAgICAgICBjdXJyZW50UHJvcHMgJiZcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGN1cnJlbnRQcm9wcyAmJlxuICAgICAgICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIGN1cnJlbnRQcm9wc1xuICAgICAgICAgICAgICA/ICgocGVuZGluZ1Byb3BzID0gZ2V0U2NyaXB0S2V5KHBlbmRpbmdQcm9wcykpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50UHJvcHMgPVxuICAgICAgICAgICAgICAgICAgZ2V0UmVzb3VyY2VzRnJvbVJvb3QocmVzb3VyY2VSb290KS5ob2lzdGFibGVTY3JpcHRzKSxcbiAgICAgICAgICAgICAgICAoY3VycmVudFJlc291cmNlID0gY3VycmVudFByb3BzLmdldChwZW5kaW5nUHJvcHMpKSxcbiAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UgfHxcbiAgICAgICAgICAgICAgICAgICgoY3VycmVudFJlc291cmNlID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY291bnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiBudWxsXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wcy5zZXQocGVuZGluZ1Byb3BzLCBjdXJyZW50UmVzb3VyY2UpKSxcbiAgICAgICAgICAgICAgICBjdXJyZW50UmVzb3VyY2UpXG4gICAgICAgICAgICAgIDogeyB0eXBlOiBcInZvaWRcIiwgaW5zdGFuY2U6IG51bGwsIGNvdW50OiAwLCBzdGF0ZTogbnVsbCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICdnZXRSZXNvdXJjZSBlbmNvdW50ZXJlZCBhIHR5cGUgaXQgZGlkIG5vdCBleHBlY3Q6IFwiJyArXG4gICAgICAgICAgICAgIHR5cGUgK1xuICAgICAgICAgICAgICAnXCIuIHRoaXMgaXMgYSBidWcgaW4gUmVhY3QuJ1xuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlTGlua0ZvclJlc291cmNlRXJyb3JERVYocHJvcHMpIHtcbiAgICAgIHZhciBkZXNjcmliZWRQcm9wcyA9IDAsXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCI8bGlua1wiO1xuICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHByb3BzLnJlbFxuICAgICAgICA/IChkZXNjcmliZWRQcm9wcysrLCAoZGVzY3JpcHRpb24gKz0gJyByZWw9XCInICsgcHJvcHMucmVsICsgJ1wiJykpXG4gICAgICAgIDogaGFzT3duUHJvcGVydHkuY2FsbChwcm9wcywgXCJyZWxcIikgJiZcbiAgICAgICAgICAoZGVzY3JpYmVkUHJvcHMrKyxcbiAgICAgICAgICAoZGVzY3JpcHRpb24gKz1cbiAgICAgICAgICAgICcgcmVsPVwiJyArXG4gICAgICAgICAgICAobnVsbCA9PT0gcHJvcHMucmVsID8gXCJudWxsXCIgOiBcImludmFsaWQgdHlwZSBcIiArIHR5cGVvZiBwcm9wcy5yZWwpICtcbiAgICAgICAgICAgICdcIicpKTtcbiAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBwcm9wcy5ocmVmXG4gICAgICAgID8gKGRlc2NyaWJlZFByb3BzKyssIChkZXNjcmlwdGlvbiArPSAnIGhyZWY9XCInICsgcHJvcHMuaHJlZiArICdcIicpKVxuICAgICAgICA6IGhhc093blByb3BlcnR5LmNhbGwocHJvcHMsIFwiaHJlZlwiKSAmJlxuICAgICAgICAgIChkZXNjcmliZWRQcm9wcysrLFxuICAgICAgICAgIChkZXNjcmlwdGlvbiArPVxuICAgICAgICAgICAgJyBocmVmPVwiJyArXG4gICAgICAgICAgICAobnVsbCA9PT0gcHJvcHMuaHJlZlxuICAgICAgICAgICAgICA/IFwibnVsbFwiXG4gICAgICAgICAgICAgIDogXCJpbnZhbGlkIHR5cGUgXCIgKyB0eXBlb2YgcHJvcHMuaHJlZikgK1xuICAgICAgICAgICAgJ1wiJykpO1xuICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHByb3BzLnByZWNlZGVuY2VcbiAgICAgICAgPyAoZGVzY3JpYmVkUHJvcHMrKyxcbiAgICAgICAgICAoZGVzY3JpcHRpb24gKz0gJyBwcmVjZWRlbmNlPVwiJyArIHByb3BzLnByZWNlZGVuY2UgKyAnXCInKSlcbiAgICAgICAgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCBcInByZWNlZGVuY2VcIikgJiZcbiAgICAgICAgICAoZGVzY3JpYmVkUHJvcHMrKyxcbiAgICAgICAgICAoZGVzY3JpcHRpb24gKz1cbiAgICAgICAgICAgIFwiIHByZWNlZGVuY2U9e1wiICtcbiAgICAgICAgICAgIChudWxsID09PSBwcm9wcy5wcmVjZWRlbmNlXG4gICAgICAgICAgICAgID8gXCJudWxsXCJcbiAgICAgICAgICAgICAgOiBcImludmFsaWQgdHlwZSBcIiArIHR5cGVvZiBwcm9wcy5wcmVjZWRlbmNlKSArXG4gICAgICAgICAgICBcIn1cIikpO1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvcHMpLmxlbmd0aCA+IGRlc2NyaWJlZFByb3BzICYmXG4gICAgICAgIChkZXNjcmlwdGlvbiArPSBcIiAuLi5cIik7XG4gICAgICByZXR1cm4gZGVzY3JpcHRpb24gKyBcIiAvPlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdHlsZUtleShocmVmKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAnaHJlZj1cIicgKyBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKGhyZWYpICsgJ1wiJ1xuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3R5bGVzaGVldFNlbGVjdG9yRnJvbUtleShrZXkpIHtcbiAgICAgIHJldHVybiAnbGlua1tyZWw9XCJzdHlsZXNoZWV0XCJdWycgKyBrZXkgKyBcIl1cIjtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3R5bGVzaGVldFByb3BzRnJvbVJhd1Byb3BzKHJhd1Byb3BzKSB7XG4gICAgICByZXR1cm4gYXNzaWduKHt9LCByYXdQcm9wcywge1xuICAgICAgICBcImRhdGEtcHJlY2VkZW5jZVwiOiByYXdQcm9wcy5wcmVjZWRlbmNlLFxuICAgICAgICBwcmVjZWRlbmNlOiBudWxsXG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlbG9hZFN0eWxlc2hlZXQob3duZXJEb2N1bWVudCwga2V5LCBwcmVsb2FkUHJvcHMsIHN0YXRlKSB7XG4gICAgICBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICdsaW5rW3JlbD1cInByZWxvYWRcIl1bYXM9XCJzdHlsZVwiXVsnICsga2V5ICsgXCJdXCJcbiAgICAgIClcbiAgICAgICAgPyAoc3RhdGUubG9hZGluZyA9IExvYWRlZClcbiAgICAgICAgOiAoKGtleSA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIikpLFxuICAgICAgICAgIChzdGF0ZS5wcmVsb2FkID0ga2V5KSxcbiAgICAgICAgICBrZXkuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIChzdGF0ZS5sb2FkaW5nIHw9IExvYWRlZCk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAga2V5LmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKHN0YXRlLmxvYWRpbmcgfD0gRXJyb3JlZCk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoa2V5LCBcImxpbmtcIiwgcHJlbG9hZFByb3BzKSxcbiAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGtleSksXG4gICAgICAgICAgb3duZXJEb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGtleSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTY3JpcHRLZXkoc3JjKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAnW3NyYz1cIicgKyBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKHNyYykgKyAnXCJdJ1xuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U2NyaXB0U2VsZWN0b3JGcm9tS2V5KGtleSkge1xuICAgICAgcmV0dXJuIFwic2NyaXB0W2FzeW5jXVwiICsga2V5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBhY3F1aXJlUmVzb3VyY2UoaG9pc3RhYmxlUm9vdCwgcmVzb3VyY2UsIHByb3BzKSB7XG4gICAgICByZXNvdXJjZS5jb3VudCsrO1xuICAgICAgaWYgKG51bGwgPT09IHJlc291cmNlLmluc3RhbmNlKVxuICAgICAgICBzd2l0Y2ggKHJlc291cmNlLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwic3R5bGVcIjpcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IGhvaXN0YWJsZVJvb3QucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgJ3N0eWxlW2RhdGEtaHJlZn49XCInICtcbiAgICAgICAgICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKHByb3BzLmhyZWYpICtcbiAgICAgICAgICAgICAgICAnXCJdJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZSlcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAocmVzb3VyY2UuaW5zdGFuY2UgPSBpbnN0YW5jZSksXG4gICAgICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShpbnN0YW5jZSksXG4gICAgICAgICAgICAgICAgaW5zdGFuY2VcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHZhciBzdHlsZVByb3BzID0gYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgICBcImRhdGEtaHJlZlwiOiBwcm9wcy5ocmVmLFxuICAgICAgICAgICAgICBcImRhdGEtcHJlY2VkZW5jZVwiOiBwcm9wcy5wcmVjZWRlbmNlLFxuICAgICAgICAgICAgICBocmVmOiBudWxsLFxuICAgICAgICAgICAgICBwcmVjZWRlbmNlOiBudWxsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGluc3RhbmNlID0gKFxuICAgICAgICAgICAgICBob2lzdGFibGVSb290Lm93bmVyRG9jdW1lbnQgfHwgaG9pc3RhYmxlUm9vdFxuICAgICAgICAgICAgKS5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGluc3RhbmNlKTtcbiAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGluc3RhbmNlLCBcInN0eWxlXCIsIHN0eWxlUHJvcHMpO1xuICAgICAgICAgICAgaW5zZXJ0U3R5bGVzaGVldChpbnN0YW5jZSwgcHJvcHMucHJlY2VkZW5jZSwgaG9pc3RhYmxlUm9vdCk7XG4gICAgICAgICAgICByZXR1cm4gKHJlc291cmNlLmluc3RhbmNlID0gaW5zdGFuY2UpO1xuICAgICAgICAgIGNhc2UgXCJzdHlsZXNoZWV0XCI6XG4gICAgICAgICAgICBzdHlsZVByb3BzID0gZ2V0U3R5bGVLZXkocHJvcHMuaHJlZik7XG4gICAgICAgICAgICB2YXIgX2luc3RhbmNlID0gaG9pc3RhYmxlUm9vdC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICBnZXRTdHlsZXNoZWV0U2VsZWN0b3JGcm9tS2V5KHN0eWxlUHJvcHMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKF9pbnN0YW5jZSlcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAocmVzb3VyY2Uuc3RhdGUubG9hZGluZyB8PSBJbnNlcnRlZCksXG4gICAgICAgICAgICAgICAgKHJlc291cmNlLmluc3RhbmNlID0gX2luc3RhbmNlKSxcbiAgICAgICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKF9pbnN0YW5jZSksXG4gICAgICAgICAgICAgICAgX2luc3RhbmNlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpbnN0YW5jZSA9IHN0eWxlc2hlZXRQcm9wc0Zyb21SYXdQcm9wcyhwcm9wcyk7XG4gICAgICAgICAgICAoc3R5bGVQcm9wcyA9IHByZWxvYWRQcm9wc01hcC5nZXQoc3R5bGVQcm9wcykpICYmXG4gICAgICAgICAgICAgIGFkb3B0UHJlbG9hZFByb3BzRm9yU3R5bGVzaGVldChpbnN0YW5jZSwgc3R5bGVQcm9wcyk7XG4gICAgICAgICAgICBfaW5zdGFuY2UgPSAoXG4gICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3Qub3duZXJEb2N1bWVudCB8fCBob2lzdGFibGVSb290XG4gICAgICAgICAgICApLmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpO1xuICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShfaW5zdGFuY2UpO1xuICAgICAgICAgICAgdmFyIGxpbmtJbnN0YW5jZSA9IF9pbnN0YW5jZTtcbiAgICAgICAgICAgIGxpbmtJbnN0YW5jZS5fcCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgbGlua0luc3RhbmNlLm9ubG9hZCA9IHJlc29sdmU7XG4gICAgICAgICAgICAgIGxpbmtJbnN0YW5jZS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhfaW5zdGFuY2UsIFwibGlua1wiLCBpbnN0YW5jZSk7XG4gICAgICAgICAgICByZXNvdXJjZS5zdGF0ZS5sb2FkaW5nIHw9IEluc2VydGVkO1xuICAgICAgICAgICAgaW5zZXJ0U3R5bGVzaGVldChfaW5zdGFuY2UsIHByb3BzLnByZWNlZGVuY2UsIGhvaXN0YWJsZVJvb3QpO1xuICAgICAgICAgICAgcmV0dXJuIChyZXNvdXJjZS5pbnN0YW5jZSA9IF9pbnN0YW5jZSk7XG4gICAgICAgICAgY2FzZSBcInNjcmlwdFwiOlxuICAgICAgICAgICAgX2luc3RhbmNlID0gZ2V0U2NyaXB0S2V5KHByb3BzLnNyYyk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIChzdHlsZVByb3BzID0gaG9pc3RhYmxlUm9vdC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgIGdldFNjcmlwdFNlbGVjdG9yRnJvbUtleShfaW5zdGFuY2UpXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgKHJlc291cmNlLmluc3RhbmNlID0gc3R5bGVQcm9wcyksXG4gICAgICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShzdHlsZVByb3BzKSxcbiAgICAgICAgICAgICAgICBzdHlsZVByb3BzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpbnN0YW5jZSA9IHByb3BzO1xuICAgICAgICAgICAgaWYgKChzdHlsZVByb3BzID0gcHJlbG9hZFByb3BzTWFwLmdldChfaW5zdGFuY2UpKSlcbiAgICAgICAgICAgICAgKGluc3RhbmNlID0gYXNzaWduKHt9LCBwcm9wcykpLFxuICAgICAgICAgICAgICAgIGFkb3B0UHJlbG9hZFByb3BzRm9yU2NyaXB0KGluc3RhbmNlLCBzdHlsZVByb3BzKTtcbiAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QgPSBob2lzdGFibGVSb290Lm93bmVyRG9jdW1lbnQgfHwgaG9pc3RhYmxlUm9vdDtcbiAgICAgICAgICAgIHN0eWxlUHJvcHMgPSBob2lzdGFibGVSb290LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKHN0eWxlUHJvcHMpO1xuICAgICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoc3R5bGVQcm9wcywgXCJsaW5rXCIsIGluc3RhbmNlKTtcbiAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QuaGVhZC5hcHBlbmRDaGlsZChzdHlsZVByb3BzKTtcbiAgICAgICAgICAgIHJldHVybiAocmVzb3VyY2UuaW5zdGFuY2UgPSBzdHlsZVByb3BzKTtcbiAgICAgICAgICBjYXNlIFwidm9pZFwiOlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAnYWNxdWlyZVJlc291cmNlIGVuY291bnRlcmVkIGEgcmVzb3VyY2UgdHlwZSBpdCBkaWQgbm90IGV4cGVjdDogXCInICtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS50eXBlICtcbiAgICAgICAgICAgICAgICAnXCIuIHRoaXMgaXMgYSBidWcgaW4gUmVhY3QuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgZWxzZVxuICAgICAgICBcInN0eWxlc2hlZXRcIiA9PT0gcmVzb3VyY2UudHlwZSAmJlxuICAgICAgICAgIChyZXNvdXJjZS5zdGF0ZS5sb2FkaW5nICYgSW5zZXJ0ZWQpID09PSBOb3RMb2FkZWQgJiZcbiAgICAgICAgICAoKGluc3RhbmNlID0gcmVzb3VyY2UuaW5zdGFuY2UpLFxuICAgICAgICAgIChyZXNvdXJjZS5zdGF0ZS5sb2FkaW5nIHw9IEluc2VydGVkKSxcbiAgICAgICAgICBpbnNlcnRTdHlsZXNoZWV0KGluc3RhbmNlLCBwcm9wcy5wcmVjZWRlbmNlLCBob2lzdGFibGVSb290KSk7XG4gICAgICByZXR1cm4gcmVzb3VyY2UuaW5zdGFuY2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluc2VydFN0eWxlc2hlZXQoaW5zdGFuY2UsIHByZWNlZGVuY2UsIHJvb3QpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBub2RlcyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICdsaW5rW3JlbD1cInN0eWxlc2hlZXRcIl1bZGF0YS1wcmVjZWRlbmNlXSxzdHlsZVtkYXRhLXByZWNlZGVuY2VdJ1xuICAgICAgICAgICksXG4gICAgICAgICAgbGFzdCA9IG5vZGVzLmxlbmd0aCA/IG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdIDogbnVsbCxcbiAgICAgICAgICBwcmlvciA9IGxhc3QsXG4gICAgICAgICAgaSA9IDA7XG4gICAgICAgIGkgPCBub2Rlcy5sZW5ndGg7XG4gICAgICAgIGkrK1xuICAgICAgKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIGlmIChub2RlLmRhdGFzZXQucHJlY2VkZW5jZSA9PT0gcHJlY2VkZW5jZSkgcHJpb3IgPSBub2RlO1xuICAgICAgICBlbHNlIGlmIChwcmlvciAhPT0gbGFzdCkgYnJlYWs7XG4gICAgICB9XG4gICAgICBwcmlvclxuICAgICAgICA/IHByaW9yLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGluc3RhbmNlLCBwcmlvci5uZXh0U2libGluZylcbiAgICAgICAgOiAoKHByZWNlZGVuY2UgPSA5ID09PSByb290Lm5vZGVUeXBlID8gcm9vdC5oZWFkIDogcm9vdCksXG4gICAgICAgICAgcHJlY2VkZW5jZS5pbnNlcnRCZWZvcmUoaW5zdGFuY2UsIHByZWNlZGVuY2UuZmlyc3RDaGlsZCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZG9wdFByZWxvYWRQcm9wc0ZvclN0eWxlc2hlZXQoc3R5bGVzaGVldFByb3BzLCBwcmVsb2FkUHJvcHMpIHtcbiAgICAgIG51bGwgPT0gc3R5bGVzaGVldFByb3BzLmNyb3NzT3JpZ2luICYmXG4gICAgICAgIChzdHlsZXNoZWV0UHJvcHMuY3Jvc3NPcmlnaW4gPSBwcmVsb2FkUHJvcHMuY3Jvc3NPcmlnaW4pO1xuICAgICAgbnVsbCA9PSBzdHlsZXNoZWV0UHJvcHMucmVmZXJyZXJQb2xpY3kgJiZcbiAgICAgICAgKHN0eWxlc2hlZXRQcm9wcy5yZWZlcnJlclBvbGljeSA9IHByZWxvYWRQcm9wcy5yZWZlcnJlclBvbGljeSk7XG4gICAgICBudWxsID09IHN0eWxlc2hlZXRQcm9wcy50aXRsZSAmJlxuICAgICAgICAoc3R5bGVzaGVldFByb3BzLnRpdGxlID0gcHJlbG9hZFByb3BzLnRpdGxlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRvcHRQcmVsb2FkUHJvcHNGb3JTY3JpcHQoc2NyaXB0UHJvcHMsIHByZWxvYWRQcm9wcykge1xuICAgICAgbnVsbCA9PSBzY3JpcHRQcm9wcy5jcm9zc09yaWdpbiAmJlxuICAgICAgICAoc2NyaXB0UHJvcHMuY3Jvc3NPcmlnaW4gPSBwcmVsb2FkUHJvcHMuY3Jvc3NPcmlnaW4pO1xuICAgICAgbnVsbCA9PSBzY3JpcHRQcm9wcy5yZWZlcnJlclBvbGljeSAmJlxuICAgICAgICAoc2NyaXB0UHJvcHMucmVmZXJyZXJQb2xpY3kgPSBwcmVsb2FkUHJvcHMucmVmZXJyZXJQb2xpY3kpO1xuICAgICAgbnVsbCA9PSBzY3JpcHRQcm9wcy5pbnRlZ3JpdHkgJiZcbiAgICAgICAgKHNjcmlwdFByb3BzLmludGVncml0eSA9IHByZWxvYWRQcm9wcy5pbnRlZ3JpdHkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRIeWRyYXRhYmxlSG9pc3RhYmxlQ2FjaGUodHlwZSwga2V5QXR0cmlidXRlLCBvd25lckRvY3VtZW50KSB7XG4gICAgICBpZiAobnVsbCA9PT0gdGFnQ2FjaGVzKSB7XG4gICAgICAgIHZhciBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgdmFyIGNhY2hlcyA9ICh0YWdDYWNoZXMgPSBuZXcgTWFwKCkpO1xuICAgICAgICBjYWNoZXMuc2V0KG93bmVyRG9jdW1lbnQsIGNhY2hlKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICAoY2FjaGVzID0gdGFnQ2FjaGVzKSxcbiAgICAgICAgICAoY2FjaGUgPSBjYWNoZXMuZ2V0KG93bmVyRG9jdW1lbnQpKSxcbiAgICAgICAgICBjYWNoZSB8fCAoKGNhY2hlID0gbmV3IE1hcCgpKSwgY2FjaGVzLnNldChvd25lckRvY3VtZW50LCBjYWNoZSkpO1xuICAgICAgaWYgKGNhY2hlLmhhcyh0eXBlKSkgcmV0dXJuIGNhY2hlO1xuICAgICAgY2FjaGUuc2V0KHR5cGUsIG51bGwpO1xuICAgICAgb3duZXJEb2N1bWVudCA9IG93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHlwZSk7XG4gICAgICBmb3IgKGNhY2hlcyA9IDA7IGNhY2hlcyA8IG93bmVyRG9jdW1lbnQubGVuZ3RoOyBjYWNoZXMrKykge1xuICAgICAgICB2YXIgbm9kZSA9IG93bmVyRG9jdW1lbnRbY2FjaGVzXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICEoXG4gICAgICAgICAgICBub2RlW2ludGVybmFsSG9pc3RhYmxlTWFya2VyXSB8fFxuICAgICAgICAgICAgbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSB8fFxuICAgICAgICAgICAgKFwibGlua1wiID09PSB0eXBlICYmIFwic3R5bGVzaGVldFwiID09PSBub2RlLmdldEF0dHJpYnV0ZShcInJlbFwiKSlcbiAgICAgICAgICApICYmXG4gICAgICAgICAgbm9kZS5uYW1lc3BhY2VVUkkgIT09IFNWR19OQU1FU1BBQ0VcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIG5vZGVLZXkgPSBub2RlLmdldEF0dHJpYnV0ZShrZXlBdHRyaWJ1dGUpIHx8IFwiXCI7XG4gICAgICAgICAgbm9kZUtleSA9IHR5cGUgKyBub2RlS2V5O1xuICAgICAgICAgIHZhciBleGlzdGluZyA9IGNhY2hlLmdldChub2RlS2V5KTtcbiAgICAgICAgICBleGlzdGluZyA/IGV4aXN0aW5nLnB1c2gobm9kZSkgOiBjYWNoZS5zZXQobm9kZUtleSwgW25vZGVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNhY2hlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtb3VudEhvaXN0YWJsZShob2lzdGFibGVSb290LCB0eXBlLCBpbnN0YW5jZSkge1xuICAgICAgaG9pc3RhYmxlUm9vdCA9IGhvaXN0YWJsZVJvb3Qub3duZXJEb2N1bWVudCB8fCBob2lzdGFibGVSb290O1xuICAgICAgaG9pc3RhYmxlUm9vdC5oZWFkLmluc2VydEJlZm9yZShcbiAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgIFwidGl0bGVcIiA9PT0gdHlwZSA/IGhvaXN0YWJsZVJvb3QucXVlcnlTZWxlY3RvcihcImhlYWQgPiB0aXRsZVwiKSA6IG51bGxcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzSG9zdEhvaXN0YWJsZVR5cGUodHlwZSwgcHJvcHMsIGhvc3RDb250ZXh0KSB7XG4gICAgICB2YXIgb3V0c2lkZUhvc3RDb250YWluZXJDb250ZXh0ID1cbiAgICAgICAgIWhvc3RDb250ZXh0LmFuY2VzdG9ySW5mby5jb250YWluZXJUYWdJblNjb3BlO1xuICAgICAgaWYgKFxuICAgICAgICBob3N0Q29udGV4dC5jb250ZXh0ID09PSBIb3N0Q29udGV4dE5hbWVzcGFjZVN2ZyB8fFxuICAgICAgICBudWxsICE9IHByb3BzLml0ZW1Qcm9wXG4gICAgICApXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgIW91dHNpZGVIb3N0Q29udGFpbmVyQ29udGV4dCB8fFxuICAgICAgICAgICAgbnVsbCA9PSBwcm9wcy5pdGVtUHJvcCB8fFxuICAgICAgICAgICAgKFwibWV0YVwiICE9PSB0eXBlICYmXG4gICAgICAgICAgICAgIFwidGl0bGVcIiAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgICBcInN0eWxlXCIgIT09IHR5cGUgJiZcbiAgICAgICAgICAgICAgXCJsaW5rXCIgIT09IHR5cGUgJiZcbiAgICAgICAgICAgICAgXCJzY3JpcHRcIiAhPT0gdHlwZSkgfHxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiQ2Fubm90IHJlbmRlciBhIDwlcz4gb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudCBpZiBpdCBoYXMgYW4gYGl0ZW1Qcm9wYCBwcm9wLiBgaXRlbVByb3BgIHN1Z2dlc3RzIHRoZSB0YWcgYmVsb25ncyB0byBhbiBgaXRlbVNjb3BlYCB3aGljaCBjYW4gYXBwZWFyIGFueXdoZXJlIGluIHRoZSBET00uIElmIHlvdSB3ZXJlIGludGVuZGluZyBmb3IgUmVhY3QgdG8gaG9pc3QgdGhpcyA8JXM+IHJlbW92ZSB0aGUgYGl0ZW1Qcm9wYCBwcm9wLiBPdGhlcndpc2UsIHRyeSBtb3ZpbmcgdGhpcyB0YWcgaW50byB0aGUgPGhlYWQ+IG9yIDxib2R5PiBvZiB0aGUgRG9jdW1lbnQuXCIsXG4gICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgICksXG4gICAgICAgICAgITFcbiAgICAgICAgKTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwibWV0YVwiOlxuICAgICAgICBjYXNlIFwidGl0bGVcIjpcbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgIGNhc2UgXCJzdHlsZVwiOlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiBwcm9wcy5wcmVjZWRlbmNlIHx8XG4gICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgcHJvcHMuaHJlZiB8fFxuICAgICAgICAgICAgXCJcIiA9PT0gcHJvcHMuaHJlZlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgb3V0c2lkZUhvc3RDb250YWluZXJDb250ZXh0ICYmXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgJ0Nhbm5vdCByZW5kZXIgYSA8c3R5bGU+IG91dHNpZGUgdGhlIG1haW4gZG9jdW1lbnQgd2l0aG91dCBrbm93aW5nIGl0cyBwcmVjZWRlbmNlIGFuZCBhIHVuaXF1ZSBocmVmIGtleS4gUmVhY3QgY2FuIGhvaXN0IGFuZCBkZWR1cGxpY2F0ZSA8c3R5bGU+IHRhZ3MgaWYgeW91IHByb3ZpZGUgYSBgcHJlY2VkZW5jZWAgcHJvcCBhbG9uZyB3aXRoIGFuIGBocmVmYCBwcm9wIHRoYXQgZG9lcyBub3QgY29uZmxpY3Qgd2l0aCB0aGUgYGhyZWZgIHZhbHVlcyB1c2VkIGluIGFueSBvdGhlciBob2lzdGVkIDxzdHlsZT4gb3IgPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIC4uLj4gdGFncy4gIE5vdGUgdGhhdCBob2lzdGluZyA8c3R5bGU+IHRhZ3MgaXMgY29uc2lkZXJlZCBhbiBhZHZhbmNlZCBmZWF0dXJlIHRoYXQgbW9zdCB3aWxsIG5vdCB1c2UgZGlyZWN0bHkuIENvbnNpZGVyIG1vdmluZyB0aGUgPHN0eWxlPiB0YWcgdG8gdGhlIDxoZWFkPiBvciBjb25zaWRlciBhZGRpbmcgYSBgcHJlY2VkZW5jZT1cImRlZmF1bHRcImAgYW5kIGBocmVmPVwic29tZSB1bmlxdWUgcmVzb3VyY2UgaWRlbnRpZmllclwiYC4nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICBjYXNlIFwibGlua1wiOlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiBwcm9wcy5yZWwgfHxcbiAgICAgICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiBwcm9wcy5ocmVmIHx8XG4gICAgICAgICAgICBcIlwiID09PSBwcm9wcy5ocmVmIHx8XG4gICAgICAgICAgICBwcm9wcy5vbkxvYWQgfHxcbiAgICAgICAgICAgIHByb3BzLm9uRXJyb3JcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgXCJzdHlsZXNoZWV0XCIgPT09IHByb3BzLnJlbCAmJlxuICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcHJvcHMucHJlY2VkZW5jZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHR5cGUgPSBwcm9wcy5ocmVmO1xuICAgICAgICAgICAgICB2YXIgb25FcnJvciA9IHByb3BzLm9uRXJyb3IsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQgPSBwcm9wcy5kaXNhYmxlZDtcbiAgICAgICAgICAgICAgaG9zdENvbnRleHQgPSBbXTtcbiAgICAgICAgICAgICAgcHJvcHMub25Mb2FkICYmIGhvc3RDb250ZXh0LnB1c2goXCJgb25Mb2FkYFwiKTtcbiAgICAgICAgICAgICAgb25FcnJvciAmJiBob3N0Q29udGV4dC5wdXNoKFwiYG9uRXJyb3JgXCIpO1xuICAgICAgICAgICAgICBudWxsICE9IGRpc2FibGVkICYmIGhvc3RDb250ZXh0LnB1c2goXCJgZGlzYWJsZWRgXCIpO1xuICAgICAgICAgICAgICBvbkVycm9yID0gcHJvcE5hbWVzTGlzdEpvaW4oaG9zdENvbnRleHQsIFwiYW5kXCIpO1xuICAgICAgICAgICAgICBvbkVycm9yICs9IDEgPT09IGhvc3RDb250ZXh0Lmxlbmd0aCA/IFwiIHByb3BcIiA6IFwiIHByb3BzXCI7XG4gICAgICAgICAgICAgIGRpc2FibGVkID1cbiAgICAgICAgICAgICAgICAxID09PSBob3N0Q29udGV4dC5sZW5ndGggPyBcImFuIFwiICsgb25FcnJvciA6IFwidGhlIFwiICsgb25FcnJvcjtcbiAgICAgICAgICAgICAgaG9zdENvbnRleHQubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICdSZWFjdCBlbmNvdW50ZXJlZCBhIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiJXNcIiAuLi4gLz4gd2l0aCBhIGBwcmVjZWRlbmNlYCBwcm9wIHRoYXQgYWxzbyBpbmNsdWRlZCAlcy4gVGhlIHByZXNlbmNlIG9mIGxvYWRpbmcgYW5kIGVycm9yIGhhbmRsZXJzIGluZGljYXRlcyBhbiBpbnRlbnQgdG8gbWFuYWdlIHRoZSBzdHlsZXNoZWV0IGxvYWRpbmcgc3RhdGUgZnJvbSB5b3VyIGZyb20geW91ciBDb21wb25lbnQgY29kZSBhbmQgUmVhY3Qgd2lsbCBub3QgaG9pc3Qgb3IgZGVkdXBsaWNhdGUgdGhpcyBzdHlsZXNoZWV0LiBJZiB5b3VyIGludGVudCB3YXMgdG8gaGF2ZSBSZWFjdCBob2lzdCBhbmQgZGVkdXBsY2lhdGUgdGhpcyBzdHlsZXNoZWV0IHVzaW5nIHRoZSBgcHJlY2VkZW5jZWAgcHJvcCByZW1vdmUgdGhlICVzLCBvdGhlcndpc2UgcmVtb3ZlIHRoZSBgcHJlY2VkZW5jZWAgcHJvcC4nLFxuICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgb25FcnJvclxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRzaWRlSG9zdENvbnRhaW5lckNvbnRleHQgJiZcbiAgICAgICAgICAgICAgKFwic3RyaW5nXCIgIT09IHR5cGVvZiBwcm9wcy5yZWwgfHxcbiAgICAgICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIHByb3BzLmhyZWYgfHxcbiAgICAgICAgICAgICAgXCJcIiA9PT0gcHJvcHMuaHJlZlxuICAgICAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJDYW5ub3QgcmVuZGVyIGEgPGxpbms+IG91dHNpZGUgdGhlIG1haW4gZG9jdW1lbnQgd2l0aG91dCBhIGByZWxgIGFuZCBgaHJlZmAgcHJvcC4gVHJ5IGFkZGluZyBhIGByZWxgIGFuZC9vciBgaHJlZmAgcHJvcCB0byB0aGlzIDxsaW5rPiBvciBtb3ZpbmcgdGhlIGxpbmsgaW50byB0aGUgPGhlYWQ+IHRhZ1wiXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiAocHJvcHMub25FcnJvciB8fCBwcm9wcy5vbkxvYWQpICYmXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBcIkNhbm5vdCByZW5kZXIgYSA8bGluaz4gd2l0aCBvbkxvYWQgb3Igb25FcnJvciBsaXN0ZW5lcnMgb3V0c2lkZSB0aGUgbWFpbiBkb2N1bWVudC4gVHJ5IHJlbW92aW5nIG9uTG9hZD17Li4ufSBhbmQgb25FcnJvcj17Li4ufSBvciBtb3ZpbmcgaXQgaW50byB0aGUgcm9vdCA8aGVhZD4gdGFnIG9yIHNvbWV3aGVyZSBpbiB0aGUgPGJvZHk+LlwiXG4gICAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzd2l0Y2ggKHByb3BzLnJlbCkge1xuICAgICAgICAgICAgY2FzZSBcInN0eWxlc2hlZXRcIjpcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAodHlwZSA9IHByb3BzLnByZWNlZGVuY2UpLFxuICAgICAgICAgICAgICAgIChwcm9wcyA9IHByb3BzLmRpc2FibGVkKSxcbiAgICAgICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICAgICAgICAgICAgb3V0c2lkZUhvc3RDb250YWluZXJDb250ZXh0ICYmXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAnQ2Fubm90IHJlbmRlciBhIDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiAvPiBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50IHdpdGhvdXQga25vd2luZyBpdHMgcHJlY2VkZW5jZS4gQ29uc2lkZXIgYWRkaW5nIHByZWNlZGVuY2U9XCJkZWZhdWx0XCIgb3IgbW92aW5nIGl0IGludG8gdGhlIHJvb3QgPGhlYWQ+IHRhZy4nXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlICYmIG51bGwgPT0gcHJvcHNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICB0eXBlID1cbiAgICAgICAgICAgIHByb3BzLmFzeW5jICYmXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBwcm9wcy5hc3luYyAmJlxuICAgICAgICAgICAgXCJzeW1ib2xcIiAhPT0gdHlwZW9mIHByb3BzLmFzeW5jO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICF0eXBlIHx8XG4gICAgICAgICAgICBwcm9wcy5vbkxvYWQgfHxcbiAgICAgICAgICAgIHByb3BzLm9uRXJyb3IgfHxcbiAgICAgICAgICAgICFwcm9wcy5zcmMgfHxcbiAgICAgICAgICAgIFwic3RyaW5nXCIgIT09IHR5cGVvZiBwcm9wcy5zcmNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG91dHNpZGVIb3N0Q29udGFpbmVyQ29udGV4dCAmJlxuICAgICAgICAgICAgICAodHlwZVxuICAgICAgICAgICAgICAgID8gcHJvcHMub25Mb2FkIHx8IHByb3BzLm9uRXJyb3JcbiAgICAgICAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIkNhbm5vdCByZW5kZXIgYSA8c2NyaXB0PiB3aXRoIG9uTG9hZCBvciBvbkVycm9yIGxpc3RlbmVycyBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50LiBUcnkgcmVtb3Zpbmcgb25Mb2FkPXsuLi59IGFuZCBvbkVycm9yPXsuLi59IG9yIG1vdmluZyBpdCBpbnRvIHRoZSByb290IDxoZWFkPiB0YWcgb3Igc29tZXdoZXJlIGluIHRoZSA8Ym9keT4uXCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiQ2Fubm90IHJlbmRlciBhIDxzY3JpcHQ+IG91dHNpZGUgdGhlIG1haW4gZG9jdW1lbnQgd2l0aG91dCBgYXN5bmM9e3RydWV9YCBhbmQgYSBub24tZW1wdHkgYHNyY2AgcHJvcC4gRW5zdXJlIHRoZXJlIGlzIGEgdmFsaWQgYHNyY2AgYW5kIGVpdGhlciBtYWtlIHRoZSBzY3JpcHQgYXN5bmMgb3IgbW92ZSBpdCBpbnRvIHRoZSByb290IDxoZWFkPiB0YWcgb3Igc29tZXdoZXJlIGluIHRoZSA8Ym9keT4uXCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCByZW5kZXIgYSBzeW5jIG9yIGRlZmVyIDxzY3JpcHQ+IG91dHNpZGUgdGhlIG1haW4gZG9jdW1lbnQgd2l0aG91dCBrbm93aW5nIGl0cyBvcmRlci4gVHJ5IGFkZGluZyBhc3luYz1cIlwiIG9yIG1vdmluZyBpdCBpbnRvIHRoZSByb290IDxoZWFkPiB0YWcuJ1xuICAgICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICBjYXNlIFwibm9zY3JpcHRcIjpcbiAgICAgICAgY2FzZSBcInRlbXBsYXRlXCI6XG4gICAgICAgICAgb3V0c2lkZUhvc3RDb250YWluZXJDb250ZXh0ICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkNhbm5vdCByZW5kZXIgPCVzPiBvdXRzaWRlIHRoZSBtYWluIGRvY3VtZW50LiBUcnkgbW92aW5nIGl0IGludG8gdGhlIHJvb3QgPGhlYWQ+IHRhZy5cIixcbiAgICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlbG9hZFJlc291cmNlKHJlc291cmNlKSB7XG4gICAgICByZXR1cm4gXCJzdHlsZXNoZWV0XCIgPT09IHJlc291cmNlLnR5cGUgJiZcbiAgICAgICAgKHJlc291cmNlLnN0YXRlLmxvYWRpbmcgJiBTZXR0bGVkKSA9PT0gTm90TG9hZGVkXG4gICAgICAgID8gITFcbiAgICAgICAgOiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3VzcGVuZFJlc291cmNlKGhvaXN0YWJsZVJvb3QsIHJlc291cmNlLCBwcm9wcykge1xuICAgICAgaWYgKG51bGwgPT09IHN1c3BlbmRlZFN0YXRlKVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIkludGVybmFsIFJlYWN0IEVycm9yOiBzdXNwZW5kZWRTdGF0ZSBudWxsIHdoZW4gaXQgd2FzIGV4cGVjdGVkIHRvIGV4aXN0cy4gUGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgUmVhY3QgYnVnLlwiXG4gICAgICAgICk7XG4gICAgICB2YXIgc3RhdGUgPSBzdXNwZW5kZWRTdGF0ZTtcbiAgICAgIGlmIChcbiAgICAgICAgXCJzdHlsZXNoZWV0XCIgPT09IHJlc291cmNlLnR5cGUgJiZcbiAgICAgICAgKFwic3RyaW5nXCIgIT09IHR5cGVvZiBwcm9wcy5tZWRpYSB8fFxuICAgICAgICAgICExICE9PSBtYXRjaE1lZGlhKHByb3BzLm1lZGlhKS5tYXRjaGVzKSAmJlxuICAgICAgICAocmVzb3VyY2Uuc3RhdGUubG9hZGluZyAmIEluc2VydGVkKSA9PT0gTm90TG9hZGVkXG4gICAgICApIHtcbiAgICAgICAgaWYgKG51bGwgPT09IHJlc291cmNlLmluc3RhbmNlKSB7XG4gICAgICAgICAgdmFyIGtleSA9IGdldFN0eWxlS2V5KHByb3BzLmhyZWYpLFxuICAgICAgICAgICAgaW5zdGFuY2UgPSBob2lzdGFibGVSb290LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgIGdldFN0eWxlc2hlZXRTZWxlY3RvckZyb21LZXkoa2V5KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QgPSBpbnN0YW5jZS5fcDtcbiAgICAgICAgICAgIG51bGwgIT09IGhvaXN0YWJsZVJvb3QgJiZcbiAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIGhvaXN0YWJsZVJvb3QgJiZcbiAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaG9pc3RhYmxlUm9vdC50aGVuICYmXG4gICAgICAgICAgICAgIChzdGF0ZS5jb3VudCsrLFxuICAgICAgICAgICAgICAoc3RhdGUgPSBvblVuc3VzcGVuZC5iaW5kKHN0YXRlKSksXG4gICAgICAgICAgICAgIGhvaXN0YWJsZVJvb3QudGhlbihzdGF0ZSwgc3RhdGUpKTtcbiAgICAgICAgICAgIHJlc291cmNlLnN0YXRlLmxvYWRpbmcgfD0gSW5zZXJ0ZWQ7XG4gICAgICAgICAgICByZXNvdXJjZS5pbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShpbnN0YW5jZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGluc3RhbmNlID0gaG9pc3RhYmxlUm9vdC5vd25lckRvY3VtZW50IHx8IGhvaXN0YWJsZVJvb3Q7XG4gICAgICAgICAgcHJvcHMgPSBzdHlsZXNoZWV0UHJvcHNGcm9tUmF3UHJvcHMocHJvcHMpO1xuICAgICAgICAgIChrZXkgPSBwcmVsb2FkUHJvcHNNYXAuZ2V0KGtleSkpICYmXG4gICAgICAgICAgICBhZG9wdFByZWxvYWRQcm9wc0ZvclN0eWxlc2hlZXQocHJvcHMsIGtleSk7XG4gICAgICAgICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcbiAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGluc3RhbmNlKTtcbiAgICAgICAgICB2YXIgbGlua0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgbGlua0luc3RhbmNlLl9wID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgbGlua0luc3RhbmNlLm9ubG9hZCA9IHJlc29sdmU7XG4gICAgICAgICAgICBsaW5rSW5zdGFuY2Uub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzZXRJbml0aWFsUHJvcGVydGllcyhpbnN0YW5jZSwgXCJsaW5rXCIsIHByb3BzKTtcbiAgICAgICAgICByZXNvdXJjZS5pbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICB9XG4gICAgICAgIG51bGwgPT09IHN0YXRlLnN0eWxlc2hlZXRzICYmIChzdGF0ZS5zdHlsZXNoZWV0cyA9IG5ldyBNYXAoKSk7XG4gICAgICAgIHN0YXRlLnN0eWxlc2hlZXRzLnNldChyZXNvdXJjZSwgaG9pc3RhYmxlUm9vdCk7XG4gICAgICAgIChob2lzdGFibGVSb290ID0gcmVzb3VyY2Uuc3RhdGUucHJlbG9hZCkgJiZcbiAgICAgICAgICAocmVzb3VyY2Uuc3RhdGUubG9hZGluZyAmIFNldHRsZWQpID09PSBOb3RMb2FkZWQgJiZcbiAgICAgICAgICAoc3RhdGUuY291bnQrKyxcbiAgICAgICAgICAocmVzb3VyY2UgPSBvblVuc3VzcGVuZC5iaW5kKHN0YXRlKSksXG4gICAgICAgICAgaG9pc3RhYmxlUm9vdC5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCByZXNvdXJjZSksXG4gICAgICAgICAgaG9pc3RhYmxlUm9vdC5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgcmVzb3VyY2UpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gd2FpdEZvckNvbW1pdFRvQmVSZWFkeSgpIHtcbiAgICAgIGlmIChudWxsID09PSBzdXNwZW5kZWRTdGF0ZSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJJbnRlcm5hbCBSZWFjdCBFcnJvcjogc3VzcGVuZGVkU3RhdGUgbnVsbCB3aGVuIGl0IHdhcyBleHBlY3RlZCB0byBleGlzdHMuIFBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIFJlYWN0IGJ1Zy5cIlxuICAgICAgICApO1xuICAgICAgdmFyIHN0YXRlID0gc3VzcGVuZGVkU3RhdGU7XG4gICAgICBzdGF0ZS5zdHlsZXNoZWV0cyAmJlxuICAgICAgICAwID09PSBzdGF0ZS5jb3VudCAmJlxuICAgICAgICBpbnNlcnRTdXNwZW5kZWRTdHlsZXNoZWV0cyhzdGF0ZSwgc3RhdGUuc3R5bGVzaGVldHMpO1xuICAgICAgcmV0dXJuIDAgPCBzdGF0ZS5jb3VudFxuICAgICAgICA/IGZ1bmN0aW9uIChjb21taXQpIHtcbiAgICAgICAgICAgIHZhciBzdHlsZXNoZWV0VGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgc3RhdGUuc3R5bGVzaGVldHMgJiZcbiAgICAgICAgICAgICAgICBpbnNlcnRTdXNwZW5kZWRTdHlsZXNoZWV0cyhzdGF0ZSwgc3RhdGUuc3R5bGVzaGVldHMpO1xuICAgICAgICAgICAgICBpZiAoc3RhdGUudW5zdXNwZW5kKSB7XG4gICAgICAgICAgICAgICAgdmFyIHVuc3VzcGVuZCA9IHN0YXRlLnVuc3VzcGVuZDtcbiAgICAgICAgICAgICAgICBzdGF0ZS51bnN1c3BlbmQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHVuc3VzcGVuZCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCA2ZTQpO1xuICAgICAgICAgICAgc3RhdGUudW5zdXNwZW5kID0gY29tbWl0O1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgc3RhdGUudW5zdXNwZW5kID0gbnVsbDtcbiAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHN0eWxlc2hlZXRUaW1lcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvblVuc3VzcGVuZCgpIHtcbiAgICAgIHRoaXMuY291bnQtLTtcbiAgICAgIGlmICgwID09PSB0aGlzLmNvdW50KVxuICAgICAgICBpZiAodGhpcy5zdHlsZXNoZWV0cylcbiAgICAgICAgICBpbnNlcnRTdXNwZW5kZWRTdHlsZXNoZWV0cyh0aGlzLCB0aGlzLnN0eWxlc2hlZXRzKTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy51bnN1c3BlbmQpIHtcbiAgICAgICAgICB2YXIgdW5zdXNwZW5kID0gdGhpcy51bnN1c3BlbmQ7XG4gICAgICAgICAgdGhpcy51bnN1c3BlbmQgPSBudWxsO1xuICAgICAgICAgIHVuc3VzcGVuZCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluc2VydFN1c3BlbmRlZFN0eWxlc2hlZXRzKHN0YXRlLCByZXNvdXJjZXMpIHtcbiAgICAgIHN0YXRlLnN0eWxlc2hlZXRzID0gbnVsbDtcbiAgICAgIG51bGwgIT09IHN0YXRlLnVuc3VzcGVuZCAmJlxuICAgICAgICAoc3RhdGUuY291bnQrKyxcbiAgICAgICAgKHByZWNlZGVuY2VzQnlSb290ID0gbmV3IE1hcCgpKSxcbiAgICAgICAgcmVzb3VyY2VzLmZvckVhY2goaW5zZXJ0U3R5bGVzaGVldEludG9Sb290LCBzdGF0ZSksXG4gICAgICAgIChwcmVjZWRlbmNlc0J5Um9vdCA9IG51bGwpLFxuICAgICAgICBvblVuc3VzcGVuZC5jYWxsKHN0YXRlKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluc2VydFN0eWxlc2hlZXRJbnRvUm9vdChyb290LCByZXNvdXJjZSkge1xuICAgICAgaWYgKCEocmVzb3VyY2Uuc3RhdGUubG9hZGluZyAmIEluc2VydGVkKSkge1xuICAgICAgICB2YXIgcHJlY2VkZW5jZXMgPSBwcmVjZWRlbmNlc0J5Um9vdC5nZXQocm9vdCk7XG4gICAgICAgIGlmIChwcmVjZWRlbmNlcykgdmFyIGxhc3QgPSBwcmVjZWRlbmNlcy5nZXQoTEFTVF9QUkVDRURFTkNFKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcHJlY2VkZW5jZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgcHJlY2VkZW5jZXNCeVJvb3Quc2V0KHJvb3QsIHByZWNlZGVuY2VzKTtcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgdmFyIG5vZGVzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgICAgIFwibGlua1tkYXRhLXByZWNlZGVuY2VdLHN0eWxlW2RhdGEtcHJlY2VkZW5jZV1cIlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAgIGkgPCBub2Rlcy5sZW5ndGg7XG4gICAgICAgICAgICBpKytcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFwiTElOS1wiID09PSBub2RlLm5vZGVOYW1lIHx8XG4gICAgICAgICAgICAgIFwibm90IGFsbFwiICE9PSBub2RlLmdldEF0dHJpYnV0ZShcIm1lZGlhXCIpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHByZWNlZGVuY2VzLnNldChub2RlLmRhdGFzZXQucHJlY2VkZW5jZSwgbm9kZSksIChsYXN0ID0gbm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxhc3QgJiYgcHJlY2VkZW5jZXMuc2V0KExBU1RfUFJFQ0VERU5DRSwgbGFzdCk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZXMgPSByZXNvdXJjZS5pbnN0YW5jZTtcbiAgICAgICAgbm9kZSA9IG5vZGVzLmdldEF0dHJpYnV0ZShcImRhdGEtcHJlY2VkZW5jZVwiKTtcbiAgICAgICAgaSA9IHByZWNlZGVuY2VzLmdldChub2RlKSB8fCBsYXN0O1xuICAgICAgICBpID09PSBsYXN0ICYmIHByZWNlZGVuY2VzLnNldChMQVNUX1BSRUNFREVOQ0UsIG5vZGVzKTtcbiAgICAgICAgcHJlY2VkZW5jZXMuc2V0KG5vZGUsIG5vZGVzKTtcbiAgICAgICAgdGhpcy5jb3VudCsrO1xuICAgICAgICBsYXN0ID0gb25VbnN1c3BlbmQuYmluZCh0aGlzKTtcbiAgICAgICAgbm9kZXMuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgbGFzdCk7XG4gICAgICAgIG5vZGVzLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBsYXN0KTtcbiAgICAgICAgaVxuICAgICAgICAgID8gaS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlcywgaS5uZXh0U2libGluZylcbiAgICAgICAgICA6ICgocm9vdCA9IDkgPT09IHJvb3Qubm9kZVR5cGUgPyByb290LmhlYWQgOiByb290KSxcbiAgICAgICAgICAgIHJvb3QuaW5zZXJ0QmVmb3JlKG5vZGVzLCByb290LmZpcnN0Q2hpbGQpKTtcbiAgICAgICAgcmVzb3VyY2Uuc3RhdGUubG9hZGluZyB8PSBJbnNlcnRlZDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gRmliZXJSb290Tm9kZShcbiAgICAgIGNvbnRhaW5lckluZm8sXG4gICAgICB0YWcsXG4gICAgICBoeWRyYXRlLFxuICAgICAgaWRlbnRpZmllclByZWZpeCxcbiAgICAgIG9uVW5jYXVnaHRFcnJvcixcbiAgICAgIG9uQ2F1Z2h0RXJyb3IsXG4gICAgICBvblJlY292ZXJhYmxlRXJyb3IsXG4gICAgICBvbkRlZmF1bHRUcmFuc2l0aW9uSW5kaWNhdG9yLFxuICAgICAgZm9ybVN0YXRlXG4gICAgKSB7XG4gICAgICB0aGlzLnRhZyA9IDE7XG4gICAgICB0aGlzLmNvbnRhaW5lckluZm8gPSBjb250YWluZXJJbmZvO1xuICAgICAgdGhpcy5waW5nQ2FjaGUgPSB0aGlzLmN1cnJlbnQgPSB0aGlzLnBlbmRpbmdDaGlsZHJlbiA9IG51bGw7XG4gICAgICB0aGlzLnRpbWVvdXRIYW5kbGUgPSBub1RpbWVvdXQ7XG4gICAgICB0aGlzLmNhbGxiYWNrTm9kZSA9XG4gICAgICAgIHRoaXMubmV4dCA9XG4gICAgICAgIHRoaXMucGVuZGluZ0NvbnRleHQgPVxuICAgICAgICB0aGlzLmNvbnRleHQgPVxuICAgICAgICB0aGlzLmNhbmNlbFBlbmRpbmdDb21taXQgPVxuICAgICAgICAgIG51bGw7XG4gICAgICB0aGlzLmNhbGxiYWNrUHJpb3JpdHkgPSAwO1xuICAgICAgdGhpcy5leHBpcmF0aW9uVGltZXMgPSBjcmVhdGVMYW5lTWFwKC0xKTtcbiAgICAgIHRoaXMuZW50YW5nbGVkTGFuZXMgPVxuICAgICAgICB0aGlzLnNoZWxsU3VzcGVuZENvdW50ZXIgPVxuICAgICAgICB0aGlzLmVycm9yUmVjb3ZlcnlEaXNhYmxlZExhbmVzID1cbiAgICAgICAgdGhpcy5leHBpcmVkTGFuZXMgPVxuICAgICAgICB0aGlzLndhcm1MYW5lcyA9XG4gICAgICAgIHRoaXMucGluZ2VkTGFuZXMgPVxuICAgICAgICB0aGlzLnN1c3BlbmRlZExhbmVzID1cbiAgICAgICAgdGhpcy5wZW5kaW5nTGFuZXMgPVxuICAgICAgICAgIDA7XG4gICAgICB0aGlzLmVudGFuZ2xlbWVudHMgPSBjcmVhdGVMYW5lTWFwKDApO1xuICAgICAgdGhpcy5oaWRkZW5VcGRhdGVzID0gY3JlYXRlTGFuZU1hcChudWxsKTtcbiAgICAgIHRoaXMuaWRlbnRpZmllclByZWZpeCA9IGlkZW50aWZpZXJQcmVmaXg7XG4gICAgICB0aGlzLm9uVW5jYXVnaHRFcnJvciA9IG9uVW5jYXVnaHRFcnJvcjtcbiAgICAgIHRoaXMub25DYXVnaHRFcnJvciA9IG9uQ2F1Z2h0RXJyb3I7XG4gICAgICB0aGlzLm9uUmVjb3ZlcmFibGVFcnJvciA9IG9uUmVjb3ZlcmFibGVFcnJvcjtcbiAgICAgIHRoaXMucG9vbGVkQ2FjaGUgPSBudWxsO1xuICAgICAgdGhpcy5wb29sZWRDYWNoZUxhbmVzID0gMDtcbiAgICAgIHRoaXMuZm9ybVN0YXRlID0gZm9ybVN0YXRlO1xuICAgICAgdGhpcy5pbmNvbXBsZXRlVHJhbnNpdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgICB0aGlzLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IHRoaXMuZWZmZWN0RHVyYXRpb24gPSAtMDtcbiAgICAgIHRoaXMubWVtb2l6ZWRVcGRhdGVycyA9IG5ldyBTZXQoKTtcbiAgICAgIGNvbnRhaW5lckluZm8gPSB0aGlzLnBlbmRpbmdVcGRhdGVyc0xhbmVNYXAgPSBbXTtcbiAgICAgIGZvciAodGFnID0gMDsgMzEgPiB0YWc7IHRhZysrKSBjb250YWluZXJJbmZvLnB1c2gobmV3IFNldCgpKTtcbiAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSBoeWRyYXRlID8gXCJoeWRyYXRlUm9vdCgpXCIgOiBcImNyZWF0ZVJvb3QoKVwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGaWJlclJvb3QoXG4gICAgICBjb250YWluZXJJbmZvLFxuICAgICAgdGFnLFxuICAgICAgaHlkcmF0ZSxcbiAgICAgIGluaXRpYWxDaGlsZHJlbixcbiAgICAgIGh5ZHJhdGlvbkNhbGxiYWNrcyxcbiAgICAgIGlzU3RyaWN0TW9kZSxcbiAgICAgIGlkZW50aWZpZXJQcmVmaXgsXG4gICAgICBmb3JtU3RhdGUsXG4gICAgICBvblVuY2F1Z2h0RXJyb3IsXG4gICAgICBvbkNhdWdodEVycm9yLFxuICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgb25EZWZhdWx0VHJhbnNpdGlvbkluZGljYXRvclxuICAgICkge1xuICAgICAgY29udGFpbmVySW5mbyA9IG5ldyBGaWJlclJvb3ROb2RlKFxuICAgICAgICBjb250YWluZXJJbmZvLFxuICAgICAgICB0YWcsXG4gICAgICAgIGh5ZHJhdGUsXG4gICAgICAgIGlkZW50aWZpZXJQcmVmaXgsXG4gICAgICAgIG9uVW5jYXVnaHRFcnJvcixcbiAgICAgICAgb25DYXVnaHRFcnJvcixcbiAgICAgICAgb25SZWNvdmVyYWJsZUVycm9yLFxuICAgICAgICBvbkRlZmF1bHRUcmFuc2l0aW9uSW5kaWNhdG9yLFxuICAgICAgICBmb3JtU3RhdGVcbiAgICAgICk7XG4gICAgICB0YWcgPSBDb25jdXJyZW50TW9kZTtcbiAgICAgICEwID09PSBpc1N0cmljdE1vZGUgJiYgKHRhZyB8PSBTdHJpY3RMZWdhY3lNb2RlIHwgU3RyaWN0RWZmZWN0c01vZGUpO1xuICAgICAgaXNEZXZUb29sc1ByZXNlbnQgJiYgKHRhZyB8PSBQcm9maWxlTW9kZSk7XG4gICAgICBpc1N0cmljdE1vZGUgPSBjcmVhdGVGaWJlcigzLCBudWxsLCBudWxsLCB0YWcpO1xuICAgICAgY29udGFpbmVySW5mby5jdXJyZW50ID0gaXNTdHJpY3RNb2RlO1xuICAgICAgaXNTdHJpY3RNb2RlLnN0YXRlTm9kZSA9IGNvbnRhaW5lckluZm87XG4gICAgICB0YWcgPSBjcmVhdGVDYWNoZSgpO1xuICAgICAgcmV0YWluQ2FjaGUodGFnKTtcbiAgICAgIGNvbnRhaW5lckluZm8ucG9vbGVkQ2FjaGUgPSB0YWc7XG4gICAgICByZXRhaW5DYWNoZSh0YWcpO1xuICAgICAgaXNTdHJpY3RNb2RlLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgICAgIGVsZW1lbnQ6IGluaXRpYWxDaGlsZHJlbixcbiAgICAgICAgaXNEZWh5ZHJhdGVkOiBoeWRyYXRlLFxuICAgICAgICBjYWNoZTogdGFnXG4gICAgICB9O1xuICAgICAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKGlzU3RyaWN0TW9kZSk7XG4gICAgICByZXR1cm4gY29udGFpbmVySW5mbztcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q29udGV4dEZvclN1YnRyZWUocGFyZW50Q29tcG9uZW50KSB7XG4gICAgICBpZiAoIXBhcmVudENvbXBvbmVudCkgcmV0dXJuIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICAgIHBhcmVudENvbXBvbmVudCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICAgIHJldHVybiBwYXJlbnRDb21wb25lbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZUNvbnRhaW5lckltcGwoXG4gICAgICByb290RmliZXIsXG4gICAgICBsYW5lLFxuICAgICAgZWxlbWVudCxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHBhcmVudENvbXBvbmVudCxcbiAgICAgIGNhbGxiYWNrXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGluamVjdGVkSG9vayAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdFxuICAgICAgKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGluamVjdGVkSG9vay5vblNjaGVkdWxlRmliZXJSb290KHJlbmRlcmVySUQsIGNvbnRhaW5lciwgZWxlbWVudCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yIHx8XG4gICAgICAgICAgICAoKGhhc0xvZ2dlZEVycm9yID0gITApLFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzXCIsXG4gICAgICAgICAgICAgIGVyclxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5qZWN0ZWRQcm9maWxpbmdIb29rcy5tYXJrUmVuZGVyU2NoZWR1bGVkICYmXG4gICAgICAgIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya1JlbmRlclNjaGVkdWxlZChsYW5lKTtcbiAgICAgIHBhcmVudENvbXBvbmVudCA9IGdldENvbnRleHRGb3JTdWJ0cmVlKHBhcmVudENvbXBvbmVudCk7XG4gICAgICBudWxsID09PSBjb250YWluZXIuY29udGV4dFxuICAgICAgICA/IChjb250YWluZXIuY29udGV4dCA9IHBhcmVudENvbXBvbmVudClcbiAgICAgICAgOiAoY29udGFpbmVyLnBlbmRpbmdDb250ZXh0ID0gcGFyZW50Q29tcG9uZW50KTtcbiAgICAgIGlzUmVuZGVyaW5nICYmXG4gICAgICAgIG51bGwgIT09IGN1cnJlbnQgJiZcbiAgICAgICAgIWRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMgJiZcbiAgICAgICAgKChkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzID0gITApLFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGU7IHRyaWdnZXJpbmcgbmVzdGVkIGNvbXBvbmVudCB1cGRhdGVzIGZyb20gcmVuZGVyIGlzIG5vdCBhbGxvd2VkLiBJZiBuZWNlc3NhcnksIHRyaWdnZXIgbmVzdGVkIHVwZGF0ZXMgaW4gY29tcG9uZW50RGlkVXBkYXRlLlxcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mICVzLlwiLFxuICAgICAgICAgIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoY3VycmVudCkgfHwgXCJVbmtub3duXCJcbiAgICAgICAgKSk7XG4gICAgICBjb250YWluZXIgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgICBjb250YWluZXIucGF5bG9hZCA9IHsgZWxlbWVudDogZWxlbWVudCB9O1xuICAgICAgY2FsbGJhY2sgPSB2b2lkIDAgPT09IGNhbGxiYWNrID8gbnVsbCA6IGNhbGxiYWNrO1xuICAgICAgbnVsbCAhPT0gY2FsbGJhY2sgJiZcbiAgICAgICAgKFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGNhbGxiYWNrICYmXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy5cIixcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgKSxcbiAgICAgICAgKGNvbnRhaW5lci5jYWxsYmFjayA9IGNhbGxiYWNrKSk7XG4gICAgICBlbGVtZW50ID0gZW5xdWV1ZVVwZGF0ZShyb290RmliZXIsIGNvbnRhaW5lciwgbGFuZSk7XG4gICAgICBudWxsICE9PSBlbGVtZW50ICYmXG4gICAgICAgIChzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZWxlbWVudCwgcm9vdEZpYmVyLCBsYW5lKSxcbiAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9ucyhlbGVtZW50LCByb290RmliZXIsIGxhbmUpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFya1JldHJ5TGFuZUltcGwoZmliZXIsIHJldHJ5TGFuZSkge1xuICAgICAgZmliZXIgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuICAgICAgaWYgKG51bGwgIT09IGZpYmVyICYmIG51bGwgIT09IGZpYmVyLmRlaHlkcmF0ZWQpIHtcbiAgICAgICAgdmFyIGEgPSBmaWJlci5yZXRyeUxhbmU7XG4gICAgICAgIGZpYmVyLnJldHJ5TGFuZSA9IDAgIT09IGEgJiYgYSA8IHJldHJ5TGFuZSA/IGEgOiByZXRyeUxhbmU7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCByZXRyeUxhbmUpIHtcbiAgICAgIG1hcmtSZXRyeUxhbmVJbXBsKGZpYmVyLCByZXRyeUxhbmUpO1xuICAgICAgKGZpYmVyID0gZmliZXIuYWx0ZXJuYXRlKSAmJiBtYXJrUmV0cnlMYW5lSW1wbChmaWJlciwgcmV0cnlMYW5lKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oZmliZXIpIHtcbiAgICAgIGlmICgxMyA9PT0gZmliZXIudGFnIHx8IDMxID09PSBmaWJlci50YWcpIHtcbiAgICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDY3MTA4ODY0KTtcbiAgICAgICAgbnVsbCAhPT0gcm9vdCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIDY3MTA4ODY0KTtcbiAgICAgICAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIDY3MTA4ODY0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5KGZpYmVyKSB7XG4gICAgICBpZiAoMTMgPT09IGZpYmVyLnRhZyB8fCAzMSA9PT0gZmliZXIudGFnKSB7XG4gICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgICAgICBsYW5lID0gZ2V0QnVtcGVkTGFuZUZvckh5ZHJhdGlvbkJ5TGFuZShsYW5lKTtcbiAgICAgICAgdmFyIHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIGxhbmUpO1xuICAgICAgICBudWxsICE9PSByb290ICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihyb290LCBmaWJlciwgbGFuZSk7XG4gICAgICAgIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCBsYW5lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyRm9yRGV2VG9vbHMoKSB7XG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0TGFuZUxhYmVsTWFwKCkge1xuICAgICAgZm9yICh2YXIgbWFwID0gbmV3IE1hcCgpLCBsYW5lID0gMSwgaW5kZXggPSAwOyAzMSA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBsYWJlbCA9IGdldExhYmVsRm9yTGFuZShsYW5lKTtcbiAgICAgICAgbWFwLnNldChsYW5lLCBsYWJlbCk7XG4gICAgICAgIGxhbmUgKj0gMjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoRGlzY3JldGVFdmVudChcbiAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICBjb250YWluZXIsXG4gICAgICBuYXRpdmVFdmVudFxuICAgICkge1xuICAgICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVDtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBudWxsO1xuICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHkgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5wO1xuICAgICAgdHJ5IHtcbiAgICAgICAgKFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnAgPSBEaXNjcmV0ZUV2ZW50UHJpb3JpdHkpLFxuICAgICAgICAgIGRpc3BhdGNoRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIChSZWFjdERPTVNoYXJlZEludGVybmFscy5wID0gcHJldmlvdXNQcmlvcml0eSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2VHJhbnNpdGlvbik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoQ29udGludW91c0V2ZW50KFxuICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIG5hdGl2ZUV2ZW50XG4gICAgKSB7XG4gICAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdFNoYXJlZEludGVybmFscy5UO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IG51bGw7XG4gICAgICB2YXIgcHJldmlvdXNQcmlvcml0eSA9IFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLnA7XG4gICAgICB0cnkge1xuICAgICAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IENvbnRpbnVvdXNFdmVudFByaW9yaXR5KSxcbiAgICAgICAgICBkaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAoUmVhY3RET01TaGFyZWRJbnRlcm5hbHMucCA9IHByZXZpb3VzUHJpb3JpdHkpLFxuICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5UID0gcHJldlRyYW5zaXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNwYXRjaEV2ZW50KFxuICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgIG5hdGl2ZUV2ZW50XG4gICAgKSB7XG4gICAgICBpZiAoX2VuYWJsZWQpIHtcbiAgICAgICAgdmFyIGJsb2NrZWRPbiA9IGZpbmRJbnN0YW5jZUJsb2NraW5nRXZlbnQobmF0aXZlRXZlbnQpO1xuICAgICAgICBpZiAobnVsbCA9PT0gYmxvY2tlZE9uKVxuICAgICAgICAgIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShcbiAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgIGV2ZW50U3lzdGVtRmxhZ3MsXG4gICAgICAgICAgICBuYXRpdmVFdmVudCxcbiAgICAgICAgICAgIHJldHVybl90YXJnZXRJbnN0LFxuICAgICAgICAgICAgdGFyZ2V0Q29udGFpbmVyXG4gICAgICAgICAgKSxcbiAgICAgICAgICAgIGNsZWFySWZDb250aW51b3VzRXZlbnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIHF1ZXVlSWZDb250aW51b3VzRXZlbnQoXG4gICAgICAgICAgICBibG9ja2VkT24sXG4gICAgICAgICAgICBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgICAgICAgbmF0aXZlRXZlbnRcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICAgICBuYXRpdmVFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgKGNsZWFySWZDb250aW51b3VzRXZlbnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCksXG4gICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyAmIDQgJiZcbiAgICAgICAgICAgIC0xIDwgZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzLmluZGV4T2YoZG9tRXZlbnROYW1lKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgZm9yICg7IG51bGwgIT09IGJsb2NrZWRPbjsgKSB7XG4gICAgICAgICAgICB2YXIgZmliZXIgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKGJsb2NrZWRPbik7XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gZmliZXIpXG4gICAgICAgICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgZmliZXIgPSBmaWJlci5zdGF0ZU5vZGU7XG4gICAgICAgICAgICAgICAgICBpZiAoZmliZXIuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhmaWJlci5wZW5kaW5nTGFuZXMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoMCAhPT0gbGFuZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdCA9IGZpYmVyO1xuICAgICAgICAgICAgICAgICAgICAgIHJvb3QucGVuZGluZ0xhbmVzIHw9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgZm9yIChyb290LmVudGFuZ2xlZExhbmVzIHw9IDI7IGxhbmVzOyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5lID0gMSA8PCAoMzEgLSBjbHozMihsYW5lcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5lbnRhbmdsZW1lbnRzWzFdIHw9IGxhbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYW5lcyAmPSB+bGFuZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKGZpYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgTm9Db250ZXh0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICBub3ckMSgpICsgUkVOREVSX1RJTUVPVVRfTVMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2hTeW5jV29ya0Fjcm9zc1Jvb3RzX2ltcGwoMCwgITEpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgKHJvb3QgPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpKSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gcm9vdCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocm9vdCwgZmliZXIsIDIpLFxuICAgICAgICAgICAgICAgICAgICBmbHVzaFN5bmNXb3JrJDEoKSxcbiAgICAgICAgICAgICAgICAgICAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIDIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWJlciA9IGZpbmRJbnN0YW5jZUJsb2NraW5nRXZlbnQobmF0aXZlRXZlbnQpO1xuICAgICAgICAgICAgbnVsbCA9PT0gZmliZXIgJiZcbiAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKFxuICAgICAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgICAgIHJldHVybl90YXJnZXRJbnN0LFxuICAgICAgICAgICAgICAgIHRhcmdldENvbnRhaW5lclxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGZpYmVyID09PSBibG9ja2VkT24pIGJyZWFrO1xuICAgICAgICAgICAgYmxvY2tlZE9uID0gZmliZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIG51bGwgIT09IGJsb2NrZWRPbiAmJiBuYXRpdmVFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKFxuICAgICAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgIG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHRhcmdldENvbnRhaW5lclxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRJbnN0YW5jZUJsb2NraW5nRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgICAgIG5hdGl2ZUV2ZW50ID0gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpO1xuICAgICAgcmV0dXJuIGZpbmRJbnN0YW5jZUJsb2NraW5nVGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZEluc3RhbmNlQmxvY2tpbmdUYXJnZXQodGFyZ2V0Tm9kZSkge1xuICAgICAgcmV0dXJuX3RhcmdldEluc3QgPSBudWxsO1xuICAgICAgdGFyZ2V0Tm9kZSA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHRhcmdldE5vZGUpO1xuICAgICAgaWYgKG51bGwgIT09IHRhcmdldE5vZGUpIHtcbiAgICAgICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXROb2RlKTtcbiAgICAgICAgaWYgKG51bGwgPT09IG5lYXJlc3RNb3VudGVkKSB0YXJnZXROb2RlID0gbnVsbDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIHRhZyA9IG5lYXJlc3RNb3VudGVkLnRhZztcbiAgICAgICAgICBpZiAoMTMgPT09IHRhZykge1xuICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICAgICAgaWYgKG51bGwgIT09IHRhcmdldE5vZGUpIHJldHVybiB0YXJnZXROb2RlO1xuICAgICAgICAgICAgdGFyZ2V0Tm9kZSA9IG51bGw7XG4gICAgICAgICAgfSBlbHNlIGlmICgzMSA9PT0gdGFnKSB7XG4gICAgICAgICAgICB0YXJnZXROb2RlID0gZ2V0QWN0aXZpdHlJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG4gICAgICAgICAgICBpZiAobnVsbCAhPT0gdGFyZ2V0Tm9kZSkgcmV0dXJuIHRhcmdldE5vZGU7XG4gICAgICAgICAgICB0YXJnZXROb2RlID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2UgaWYgKDMgPT09IHRhZykge1xuICAgICAgICAgICAgaWYgKG5lYXJlc3RNb3VudGVkLnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKVxuICAgICAgICAgICAgICByZXR1cm4gMyA9PT0gbmVhcmVzdE1vdW50ZWQudGFnXG4gICAgICAgICAgICAgICAgPyBuZWFyZXN0TW91bnRlZC5zdGF0ZU5vZGUuY29udGFpbmVySW5mb1xuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIHRhcmdldE5vZGUgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSBuZWFyZXN0TW91bnRlZCAhPT0gdGFyZ2V0Tm9kZSAmJiAodGFyZ2V0Tm9kZSA9IG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm5fdGFyZ2V0SW5zdCA9IHRhcmdldE5vZGU7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RXZlbnRQcmlvcml0eShkb21FdmVudE5hbWUpIHtcbiAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgIGNhc2UgXCJiZWZvcmV0b2dnbGVcIjpcbiAgICAgICAgY2FzZSBcImNhbmNlbFwiOlxuICAgICAgICBjYXNlIFwiY2xpY2tcIjpcbiAgICAgICAgY2FzZSBcImNsb3NlXCI6XG4gICAgICAgIGNhc2UgXCJjb250ZXh0bWVudVwiOlxuICAgICAgICBjYXNlIFwiY29weVwiOlxuICAgICAgICBjYXNlIFwiY3V0XCI6XG4gICAgICAgIGNhc2UgXCJhdXhjbGlja1wiOlxuICAgICAgICBjYXNlIFwiZGJsY2xpY2tcIjpcbiAgICAgICAgY2FzZSBcImRyYWdlbmRcIjpcbiAgICAgICAgY2FzZSBcImRyYWdzdGFydFwiOlxuICAgICAgICBjYXNlIFwiZHJvcFwiOlxuICAgICAgICBjYXNlIFwiZm9jdXNpblwiOlxuICAgICAgICBjYXNlIFwiZm9jdXNvdXRcIjpcbiAgICAgICAgY2FzZSBcImlucHV0XCI6XG4gICAgICAgIGNhc2UgXCJpbnZhbGlkXCI6XG4gICAgICAgIGNhc2UgXCJrZXlkb3duXCI6XG4gICAgICAgIGNhc2UgXCJrZXlwcmVzc1wiOlxuICAgICAgICBjYXNlIFwia2V5dXBcIjpcbiAgICAgICAgY2FzZSBcIm1vdXNlZG93blwiOlxuICAgICAgICBjYXNlIFwibW91c2V1cFwiOlxuICAgICAgICBjYXNlIFwicGFzdGVcIjpcbiAgICAgICAgY2FzZSBcInBhdXNlXCI6XG4gICAgICAgIGNhc2UgXCJwbGF5XCI6XG4gICAgICAgIGNhc2UgXCJwb2ludGVyY2FuY2VsXCI6XG4gICAgICAgIGNhc2UgXCJwb2ludGVyZG93blwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcnVwXCI6XG4gICAgICAgIGNhc2UgXCJyYXRlY2hhbmdlXCI6XG4gICAgICAgIGNhc2UgXCJyZXNldFwiOlxuICAgICAgICBjYXNlIFwicmVzaXplXCI6XG4gICAgICAgIGNhc2UgXCJzZWVrZWRcIjpcbiAgICAgICAgY2FzZSBcInN1Ym1pdFwiOlxuICAgICAgICBjYXNlIFwidG9nZ2xlXCI6XG4gICAgICAgIGNhc2UgXCJ0b3VjaGNhbmNlbFwiOlxuICAgICAgICBjYXNlIFwidG91Y2hlbmRcIjpcbiAgICAgICAgY2FzZSBcInRvdWNoc3RhcnRcIjpcbiAgICAgICAgY2FzZSBcInZvbHVtZWNoYW5nZVwiOlxuICAgICAgICBjYXNlIFwiY2hhbmdlXCI6XG4gICAgICAgIGNhc2UgXCJzZWxlY3Rpb25jaGFuZ2VcIjpcbiAgICAgICAgY2FzZSBcInRleHRJbnB1dFwiOlxuICAgICAgICBjYXNlIFwiY29tcG9zaXRpb25zdGFydFwiOlxuICAgICAgICBjYXNlIFwiY29tcG9zaXRpb25lbmRcIjpcbiAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9udXBkYXRlXCI6XG4gICAgICAgIGNhc2UgXCJiZWZvcmVibHVyXCI6XG4gICAgICAgIGNhc2UgXCJhZnRlcmJsdXJcIjpcbiAgICAgICAgY2FzZSBcImJlZm9yZWlucHV0XCI6XG4gICAgICAgIGNhc2UgXCJibHVyXCI6XG4gICAgICAgIGNhc2UgXCJmdWxsc2NyZWVuY2hhbmdlXCI6XG4gICAgICAgIGNhc2UgXCJmb2N1c1wiOlxuICAgICAgICBjYXNlIFwiaGFzaGNoYW5nZVwiOlxuICAgICAgICBjYXNlIFwicG9wc3RhdGVcIjpcbiAgICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICBjYXNlIFwic2VsZWN0c3RhcnRcIjpcbiAgICAgICAgICByZXR1cm4gRGlzY3JldGVFdmVudFByaW9yaXR5O1xuICAgICAgICBjYXNlIFwiZHJhZ1wiOlxuICAgICAgICBjYXNlIFwiZHJhZ2VudGVyXCI6XG4gICAgICAgIGNhc2UgXCJkcmFnZXhpdFwiOlxuICAgICAgICBjYXNlIFwiZHJhZ2xlYXZlXCI6XG4gICAgICAgIGNhc2UgXCJkcmFnb3ZlclwiOlxuICAgICAgICBjYXNlIFwibW91c2Vtb3ZlXCI6XG4gICAgICAgIGNhc2UgXCJtb3VzZW91dFwiOlxuICAgICAgICBjYXNlIFwibW91c2VvdmVyXCI6XG4gICAgICAgIGNhc2UgXCJwb2ludGVybW92ZVwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcm91dFwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcm92ZXJcIjpcbiAgICAgICAgY2FzZSBcInNjcm9sbFwiOlxuICAgICAgICBjYXNlIFwidG91Y2htb3ZlXCI6XG4gICAgICAgIGNhc2UgXCJ3aGVlbFwiOlxuICAgICAgICBjYXNlIFwibW91c2VlbnRlclwiOlxuICAgICAgICBjYXNlIFwibW91c2VsZWF2ZVwiOlxuICAgICAgICBjYXNlIFwicG9pbnRlcmVudGVyXCI6XG4gICAgICAgIGNhc2UgXCJwb2ludGVybGVhdmVcIjpcbiAgICAgICAgICByZXR1cm4gQ29udGludW91c0V2ZW50UHJpb3JpdHk7XG4gICAgICAgIGNhc2UgXCJtZXNzYWdlXCI6XG4gICAgICAgICAgc3dpdGNoIChnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpKSB7XG4gICAgICAgICAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgICAgICAgICByZXR1cm4gRGlzY3JldGVFdmVudFByaW9yaXR5O1xuICAgICAgICAgICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVvdXNFdmVudFByaW9yaXR5O1xuICAgICAgICAgICAgY2FzZSBOb3JtYWxQcmlvcml0eSQxOlxuICAgICAgICAgICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICAgICAgICAgICAgcmV0dXJuIERlZmF1bHRFdmVudFByaW9yaXR5O1xuICAgICAgICAgICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICAgICAgICAgIHJldHVybiBJZGxlRXZlbnRQcmlvcml0eTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBEZWZhdWx0RXZlbnRQcmlvcml0eTtcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIERlZmF1bHRFdmVudFByaW9yaXR5O1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgIGNhc2UgXCJmb2N1c2luXCI6XG4gICAgICAgIGNhc2UgXCJmb2N1c291dFwiOlxuICAgICAgICAgIHF1ZXVlZEZvY3VzID0gbnVsbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImRyYWdlbnRlclwiOlxuICAgICAgICBjYXNlIFwiZHJhZ2xlYXZlXCI6XG4gICAgICAgICAgcXVldWVkRHJhZyA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJtb3VzZW92ZXJcIjpcbiAgICAgICAgY2FzZSBcIm1vdXNlb3V0XCI6XG4gICAgICAgICAgcXVldWVkTW91c2UgPSBudWxsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicG9pbnRlcm92ZXJcIjpcbiAgICAgICAgY2FzZSBcInBvaW50ZXJvdXRcIjpcbiAgICAgICAgICBxdWV1ZWRQb2ludGVycy5kZWxldGUobmF0aXZlRXZlbnQucG9pbnRlcklkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImdvdHBvaW50ZXJjYXB0dXJlXCI6XG4gICAgICAgIGNhc2UgXCJsb3N0cG9pbnRlcmNhcHR1cmVcIjpcbiAgICAgICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZGVsZXRlKG5hdGl2ZUV2ZW50LnBvaW50ZXJJZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoXG4gICAgICBleGlzdGluZ1F1ZXVlZEV2ZW50LFxuICAgICAgYmxvY2tlZE9uLFxuICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgIG5hdGl2ZUV2ZW50XG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgPT09IGV4aXN0aW5nUXVldWVkRXZlbnQgfHxcbiAgICAgICAgZXhpc3RpbmdRdWV1ZWRFdmVudC5uYXRpdmVFdmVudCAhPT0gbmF0aXZlRXZlbnRcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoZXhpc3RpbmdRdWV1ZWRFdmVudCA9IHtcbiAgICAgICAgICAgIGJsb2NrZWRPbjogYmxvY2tlZE9uLFxuICAgICAgICAgICAgZG9tRXZlbnROYW1lOiBkb21FdmVudE5hbWUsXG4gICAgICAgICAgICBldmVudFN5c3RlbUZsYWdzOiBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICAgICAgbmF0aXZlRXZlbnQ6IG5hdGl2ZUV2ZW50LFxuICAgICAgICAgICAgdGFyZ2V0Q29udGFpbmVyczogW3RhcmdldENvbnRhaW5lcl1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBudWxsICE9PSBibG9ja2VkT24gJiZcbiAgICAgICAgICAgICgoYmxvY2tlZE9uID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShibG9ja2VkT24pKSxcbiAgICAgICAgICAgIG51bGwgIT09IGJsb2NrZWRPbiAmJiBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihibG9ja2VkT24pKSxcbiAgICAgICAgICBleGlzdGluZ1F1ZXVlZEV2ZW50XG4gICAgICAgICk7XG4gICAgICBleGlzdGluZ1F1ZXVlZEV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MgfD0gZXZlbnRTeXN0ZW1GbGFncztcbiAgICAgIGJsb2NrZWRPbiA9IGV4aXN0aW5nUXVldWVkRXZlbnQudGFyZ2V0Q29udGFpbmVycztcbiAgICAgIG51bGwgIT09IHRhcmdldENvbnRhaW5lciAmJlxuICAgICAgICAtMSA9PT0gYmxvY2tlZE9uLmluZGV4T2YodGFyZ2V0Q29udGFpbmVyKSAmJlxuICAgICAgICBibG9ja2VkT24ucHVzaCh0YXJnZXRDb250YWluZXIpO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nUXVldWVkRXZlbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHF1ZXVlSWZDb250aW51b3VzRXZlbnQoXG4gICAgICBibG9ja2VkT24sXG4gICAgICBkb21FdmVudE5hbWUsXG4gICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgbmF0aXZlRXZlbnRcbiAgICApIHtcbiAgICAgIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgICAgIGNhc2UgXCJmb2N1c2luXCI6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChxdWV1ZWRGb2N1cyA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoXG4gICAgICAgICAgICAgIHF1ZXVlZEZvY3VzLFxuICAgICAgICAgICAgICBibG9ja2VkT24sXG4gICAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAhMFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJkcmFnZW50ZXJcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHF1ZXVlZERyYWcgPSBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KFxuICAgICAgICAgICAgICBxdWV1ZWREcmFnLFxuICAgICAgICAgICAgICBibG9ja2VkT24sXG4gICAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAhMFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJtb3VzZW92ZXJcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHF1ZXVlZE1vdXNlID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChcbiAgICAgICAgICAgICAgcXVldWVkTW91c2UsXG4gICAgICAgICAgICAgIGJsb2NrZWRPbixcbiAgICAgICAgICAgICAgZG9tRXZlbnROYW1lLFxuICAgICAgICAgICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICAgICAgICB0YXJnZXRDb250YWluZXIsXG4gICAgICAgICAgICAgIG5hdGl2ZUV2ZW50XG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgICEwXG4gICAgICAgICAgKTtcbiAgICAgICAgY2FzZSBcInBvaW50ZXJvdmVyXCI6XG4gICAgICAgICAgdmFyIHBvaW50ZXJJZCA9IG5hdGl2ZUV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgICBxdWV1ZWRQb2ludGVycy5zZXQoXG4gICAgICAgICAgICBwb2ludGVySWQsXG4gICAgICAgICAgICBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KFxuICAgICAgICAgICAgICBxdWV1ZWRQb2ludGVycy5nZXQocG9pbnRlcklkKSB8fCBudWxsLFxuICAgICAgICAgICAgICBibG9ja2VkT24sXG4gICAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgZXZlbnRTeXN0ZW1GbGFncyxcbiAgICAgICAgICAgICAgdGFyZ2V0Q29udGFpbmVyLFxuICAgICAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICBjYXNlIFwiZ290cG9pbnRlcmNhcHR1cmVcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHBvaW50ZXJJZCA9IG5hdGl2ZUV2ZW50LnBvaW50ZXJJZCksXG4gICAgICAgICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuc2V0KFxuICAgICAgICAgICAgICBwb2ludGVySWQsXG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoXG4gICAgICAgICAgICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmdldChwb2ludGVySWQpIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgYmxvY2tlZE9uLFxuICAgICAgICAgICAgICAgIGRvbUV2ZW50TmFtZSxcbiAgICAgICAgICAgICAgICBldmVudFN5c3RlbUZsYWdzLFxuICAgICAgICAgICAgICAgIHRhcmdldENvbnRhaW5lcixcbiAgICAgICAgICAgICAgICBuYXRpdmVFdmVudFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgITBcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuICExO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhdHRlbXB0RXhwbGljaXRIeWRyYXRpb25UYXJnZXQocXVldWVkVGFyZ2V0KSB7XG4gICAgICB2YXIgdGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHF1ZXVlZFRhcmdldC50YXJnZXQpO1xuICAgICAgaWYgKG51bGwgIT09IHRhcmdldEluc3QpIHtcbiAgICAgICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0YXJnZXRJbnN0KTtcbiAgICAgICAgaWYgKG51bGwgIT09IG5lYXJlc3RNb3VudGVkKVxuICAgICAgICAgIGlmICgoKHRhcmdldEluc3QgPSBuZWFyZXN0TW91bnRlZC50YWcpLCAxMyA9PT0gdGFyZ2V0SW5zdCkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKCh0YXJnZXRJbnN0ID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCkpLFxuICAgICAgICAgICAgICBudWxsICE9PSB0YXJnZXRJbnN0KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSB0YXJnZXRJbnN0O1xuICAgICAgICAgICAgICBydW5XaXRoUHJpb3JpdHkocXVldWVkVGFyZ2V0LnByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5KG5lYXJlc3RNb3VudGVkKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKDMxID09PSB0YXJnZXRJbnN0KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgodGFyZ2V0SW5zdCA9IGdldEFjdGl2aXR5SW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gdGFyZ2V0SW5zdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gdGFyZ2V0SW5zdDtcbiAgICAgICAgICAgICAgcnVuV2l0aFByaW9yaXR5KHF1ZXVlZFRhcmdldC5wcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eShuZWFyZXN0TW91bnRlZCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIDMgPT09IHRhcmdldEluc3QgJiZcbiAgICAgICAgICAgIG5lYXJlc3RNb3VudGVkLnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID1cbiAgICAgICAgICAgICAgMyA9PT0gbmVhcmVzdE1vdW50ZWQudGFnXG4gICAgICAgICAgICAgICAgPyBuZWFyZXN0TW91bnRlZC5zdGF0ZU5vZGUuY29udGFpbmVySW5mb1xuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWRFdmVudCkge1xuICAgICAgaWYgKG51bGwgIT09IHF1ZXVlZEV2ZW50LmJsb2NrZWRPbikgcmV0dXJuICExO1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBxdWV1ZWRFdmVudC50YXJnZXRDb250YWluZXJzO1xuICAgICAgICAwIDwgdGFyZ2V0Q29udGFpbmVycy5sZW5ndGg7XG5cbiAgICAgICkge1xuICAgICAgICB2YXIgbmV4dEJsb2NrZWRPbiA9IGZpbmRJbnN0YW5jZUJsb2NraW5nRXZlbnQocXVldWVkRXZlbnQubmF0aXZlRXZlbnQpO1xuICAgICAgICBpZiAobnVsbCA9PT0gbmV4dEJsb2NrZWRPbikge1xuICAgICAgICAgIG5leHRCbG9ja2VkT24gPSBxdWV1ZWRFdmVudC5uYXRpdmVFdmVudDtcbiAgICAgICAgICB2YXIgbmF0aXZlRXZlbnRDbG9uZSA9IG5ldyBuZXh0QmxvY2tlZE9uLmNvbnN0cnVjdG9yKFxuICAgICAgICAgICAgICBuZXh0QmxvY2tlZE9uLnR5cGUsXG4gICAgICAgICAgICAgIG5leHRCbG9ja2VkT25cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBldmVudCA9IG5hdGl2ZUV2ZW50Q2xvbmU7XG4gICAgICAgICAgbnVsbCAhPT0gY3VycmVudFJlcGxheWluZ0V2ZW50ICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIkV4cGVjdGVkIGN1cnJlbnRseSByZXBsYXlpbmcgZXZlbnQgdG8gYmUgbnVsbC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjdXJyZW50UmVwbGF5aW5nRXZlbnQgPSBldmVudDtcbiAgICAgICAgICBuZXh0QmxvY2tlZE9uLnRhcmdldC5kaXNwYXRjaEV2ZW50KG5hdGl2ZUV2ZW50Q2xvbmUpO1xuICAgICAgICAgIG51bGwgPT09IGN1cnJlbnRSZXBsYXlpbmdFdmVudCAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJFeHBlY3RlZCBjdXJyZW50bHkgcmVwbGF5aW5nIGV2ZW50IHRvIG5vdCBiZSBudWxsLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGN1cnJlbnRSZXBsYXlpbmdFdmVudCA9IG51bGw7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodGFyZ2V0Q29udGFpbmVycyA9IGdldEluc3RhbmNlRnJvbU5vZGUobmV4dEJsb2NrZWRPbikpLFxuICAgICAgICAgICAgbnVsbCAhPT0gdGFyZ2V0Q29udGFpbmVycyAmJlxuICAgICAgICAgICAgICBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbih0YXJnZXRDb250YWluZXJzKSxcbiAgICAgICAgICAgIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBuZXh0QmxvY2tlZE9uKSxcbiAgICAgICAgICAgICExXG4gICAgICAgICAgKTtcbiAgICAgICAgdGFyZ2V0Q29udGFpbmVycy5zaGlmdCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICEwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXAocXVldWVkRXZlbnQsIGtleSwgbWFwKSB7XG4gICAgICBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEV2ZW50KSAmJiBtYXAuZGVsZXRlKGtleSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcGxheVVuYmxvY2tlZEV2ZW50cygpIHtcbiAgICAgIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSAhMTtcbiAgICAgIG51bGwgIT09IHF1ZXVlZEZvY3VzICYmXG4gICAgICAgIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRm9jdXMpICYmXG4gICAgICAgIChxdWV1ZWRGb2N1cyA9IG51bGwpO1xuICAgICAgbnVsbCAhPT0gcXVldWVkRHJhZyAmJlxuICAgICAgICBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZERyYWcpICYmXG4gICAgICAgIChxdWV1ZWREcmFnID0gbnVsbCk7XG4gICAgICBudWxsICE9PSBxdWV1ZWRNb3VzZSAmJlxuICAgICAgICBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZE1vdXNlKSAmJlxuICAgICAgICAocXVldWVkTW91c2UgPSBudWxsKTtcbiAgICAgIHF1ZXVlZFBvaW50ZXJzLmZvckVhY2goYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKTtcbiAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5mb3JFYWNoKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRFdmVudCwgdW5ibG9ja2VkKSB7XG4gICAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCAmJlxuICAgICAgICAoKHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9IG51bGwpLFxuICAgICAgICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0IHx8XG4gICAgICAgICAgKChoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gITApLFxuICAgICAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKFxuICAgICAgICAgICAgU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LFxuICAgICAgICAgICAgcmVwbGF5VW5ibG9ja2VkRXZlbnRzXG4gICAgICAgICAgKSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzY2hlZHVsZVJlcGxheVF1ZXVlSWZOZWVkZWQoZm9ybVJlcGxheWluZ1F1ZXVlKSB7XG4gICAgICBsYXN0U2NoZWR1bGVkUmVwbGF5UXVldWUgIT09IGZvcm1SZXBsYXlpbmdRdWV1ZSAmJlxuICAgICAgICAoKGxhc3RTY2hlZHVsZWRSZXBsYXlRdWV1ZSA9IGZvcm1SZXBsYXlpbmdRdWV1ZSksXG4gICAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKFxuICAgICAgICAgIFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxcbiAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsYXN0U2NoZWR1bGVkUmVwbGF5UXVldWUgPT09IGZvcm1SZXBsYXlpbmdRdWV1ZSAmJlxuICAgICAgICAgICAgICAobGFzdFNjaGVkdWxlZFJlcGxheVF1ZXVlID0gbnVsbCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1SZXBsYXlpbmdRdWV1ZS5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICAgICAgICB2YXIgZm9ybSA9IGZvcm1SZXBsYXlpbmdRdWV1ZVtpXSxcbiAgICAgICAgICAgICAgICBzdWJtaXR0ZXJPckFjdGlvbiA9IGZvcm1SZXBsYXlpbmdRdWV1ZVtpICsgMV0sXG4gICAgICAgICAgICAgICAgZm9ybURhdGEgPSBmb3JtUmVwbGF5aW5nUXVldWVbaSArIDJdO1xuICAgICAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2Ygc3VibWl0dGVyT3JBY3Rpb24pXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgbnVsbCA9PT0gZmluZEluc3RhbmNlQmxvY2tpbmdUYXJnZXQoc3VibWl0dGVyT3JBY3Rpb24gfHwgZm9ybSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBlbHNlIGJyZWFrO1xuICAgICAgICAgICAgICB2YXIgZm9ybUluc3QgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKGZvcm0pO1xuICAgICAgICAgICAgICBudWxsICE9PSBmb3JtSW5zdCAmJlxuICAgICAgICAgICAgICAgIChmb3JtUmVwbGF5aW5nUXVldWUuc3BsaWNlKGksIDMpLFxuICAgICAgICAgICAgICAgIChpIC09IDMpLFxuICAgICAgICAgICAgICAgIChmb3JtID0ge1xuICAgICAgICAgICAgICAgICAgcGVuZGluZzogITAsXG4gICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgIG1ldGhvZDogZm9ybS5tZXRob2QsXG4gICAgICAgICAgICAgICAgICBhY3Rpb246IHN1Ym1pdHRlck9yQWN0aW9uXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgT2JqZWN0LmZyZWV6ZShmb3JtKSxcbiAgICAgICAgICAgICAgICBzdGFydEhvc3RUcmFuc2l0aW9uKFxuICAgICAgICAgICAgICAgICAgZm9ybUluc3QsXG4gICAgICAgICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgICAgICAgc3VibWl0dGVyT3JBY3Rpb24sXG4gICAgICAgICAgICAgICAgICBmb3JtRGF0YVxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJldHJ5SWZCbG9ja2VkT24odW5ibG9ja2VkKSB7XG4gICAgICBmdW5jdGlvbiB1bmJsb2NrKHF1ZXVlZEV2ZW50KSB7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRXZlbnQsIHVuYmxvY2tlZCk7XG4gICAgICB9XG4gICAgICBudWxsICE9PSBxdWV1ZWRGb2N1cyAmJlxuICAgICAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRm9jdXMsIHVuYmxvY2tlZCk7XG4gICAgICBudWxsICE9PSBxdWV1ZWREcmFnICYmIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWREcmFnLCB1bmJsb2NrZWQpO1xuICAgICAgbnVsbCAhPT0gcXVldWVkTW91c2UgJiZcbiAgICAgICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZE1vdXNlLCB1bmJsb2NrZWQpO1xuICAgICAgcXVldWVkUG9pbnRlcnMuZm9yRWFjaCh1bmJsb2NrKTtcbiAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5mb3JFYWNoKHVuYmxvY2spO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHF1ZXVlZFRhcmdldCA9IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0c1tpXTtcbiAgICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkICYmIChxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gbnVsbCk7XG4gICAgICB9XG4gICAgICBmb3IgKFxuICAgICAgICA7XG4gICAgICAgIDAgPCBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMubGVuZ3RoICYmXG4gICAgICAgICgoaSA9IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0c1swXSksIG51bGwgPT09IGkuYmxvY2tlZE9uKTtcblxuICAgICAgKVxuICAgICAgICBhdHRlbXB0RXhwbGljaXRIeWRyYXRpb25UYXJnZXQoaSksXG4gICAgICAgICAgbnVsbCA9PT0gaS5ibG9ja2VkT24gJiYgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLnNoaWZ0KCk7XG4gICAgICBpID0gKHVuYmxvY2tlZC5vd25lckRvY3VtZW50IHx8IHVuYmxvY2tlZCkuJCRyZWFjdEZvcm1SZXBsYXk7XG4gICAgICBpZiAobnVsbCAhPSBpKVxuICAgICAgICBmb3IgKHF1ZXVlZFRhcmdldCA9IDA7IHF1ZXVlZFRhcmdldCA8IGkubGVuZ3RoOyBxdWV1ZWRUYXJnZXQgKz0gMykge1xuICAgICAgICAgIHZhciBmb3JtID0gaVtxdWV1ZWRUYXJnZXRdLFxuICAgICAgICAgICAgc3VibWl0dGVyT3JBY3Rpb24gPSBpW3F1ZXVlZFRhcmdldCArIDFdLFxuICAgICAgICAgICAgZm9ybVByb3BzID0gZm9ybVtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsO1xuICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBzdWJtaXR0ZXJPckFjdGlvbilcbiAgICAgICAgICAgIGZvcm1Qcm9wcyB8fCBzY2hlZHVsZVJlcGxheVF1ZXVlSWZOZWVkZWQoaSk7XG4gICAgICAgICAgZWxzZSBpZiAoZm9ybVByb3BzKSB7XG4gICAgICAgICAgICB2YXIgYWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgc3VibWl0dGVyT3JBY3Rpb24gJiZcbiAgICAgICAgICAgICAgc3VibWl0dGVyT3JBY3Rpb24uaGFzQXR0cmlidXRlKFwiZm9ybUFjdGlvblwiKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKChmb3JtID0gc3VibWl0dGVyT3JBY3Rpb24pLFxuICAgICAgICAgICAgICAgIChmb3JtUHJvcHMgPSBzdWJtaXR0ZXJPckFjdGlvbltpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsKSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGFjdGlvbiA9IGZvcm1Qcm9wcy5mb3JtQWN0aW9uO1xuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gZmluZEluc3RhbmNlQmxvY2tpbmdUYXJnZXQoZm9ybSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGFjdGlvbiA9IGZvcm1Qcm9wcy5hY3Rpb247XG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhY3Rpb25cbiAgICAgICAgICAgICAgPyAoaVtxdWV1ZWRUYXJnZXQgKyAxXSA9IGFjdGlvbilcbiAgICAgICAgICAgICAgOiAoaS5zcGxpY2UocXVldWVkVGFyZ2V0LCAzKSwgKHF1ZXVlZFRhcmdldCAtPSAzKSk7XG4gICAgICAgICAgICBzY2hlZHVsZVJlcGxheVF1ZXVlSWZOZWVkZWQoaSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZmF1bHRPbkRlZmF1bHRUcmFuc2l0aW9uSW5kaWNhdG9yKCkge1xuICAgICAgZnVuY3Rpb24gaGFuZGxlTmF2aWdhdGUoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuY2FuSW50ZXJjZXB0ICYmXG4gICAgICAgICAgXCJyZWFjdC10cmFuc2l0aW9uXCIgPT09IGV2ZW50LmluZm8gJiZcbiAgICAgICAgICBldmVudC5pbnRlcmNlcHQoe1xuICAgICAgICAgICAgaGFuZGxlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHBlbmRpbmdSZXNvbHZlID0gcmVzb2x2ZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZvY3VzUmVzZXQ6IFwibWFudWFsXCIsXG4gICAgICAgICAgICBzY3JvbGw6IFwibWFudWFsXCJcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZU5hdmlnYXRlQ29tcGxldGUoKSB7XG4gICAgICAgIG51bGwgIT09IHBlbmRpbmdSZXNvbHZlICYmIChwZW5kaW5nUmVzb2x2ZSgpLCAocGVuZGluZ1Jlc29sdmUgPSBudWxsKSk7XG4gICAgICAgIGlzQ2FuY2VsbGVkIHx8IHNldFRpbWVvdXQoc3RhcnRGYWtlTmF2aWdhdGlvbiwgMjApO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gc3RhcnRGYWtlTmF2aWdhdGlvbigpIHtcbiAgICAgICAgaWYgKCFpc0NhbmNlbGxlZCAmJiAhbmF2aWdhdGlvbi50cmFuc2l0aW9uKSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnRFbnRyeSA9IG5hdmlnYXRpb24uY3VycmVudEVudHJ5O1xuICAgICAgICAgIGN1cnJlbnRFbnRyeSAmJlxuICAgICAgICAgICAgbnVsbCAhPSBjdXJyZW50RW50cnkudXJsICYmXG4gICAgICAgICAgICBuYXZpZ2F0aW9uLm5hdmlnYXRlKGN1cnJlbnRFbnRyeS51cmwsIHtcbiAgICAgICAgICAgICAgc3RhdGU6IGN1cnJlbnRFbnRyeS5nZXRTdGF0ZSgpLFxuICAgICAgICAgICAgICBpbmZvOiBcInJlYWN0LXRyYW5zaXRpb25cIixcbiAgICAgICAgICAgICAgaGlzdG9yeTogXCJyZXBsYWNlXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5hdmlnYXRpb24pIHtcbiAgICAgICAgdmFyIGlzQ2FuY2VsbGVkID0gITEsXG4gICAgICAgICAgcGVuZGluZ1Jlc29sdmUgPSBudWxsO1xuICAgICAgICBuYXZpZ2F0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJuYXZpZ2F0ZVwiLCBoYW5kbGVOYXZpZ2F0ZSk7XG4gICAgICAgIG5hdmlnYXRpb24uYWRkRXZlbnRMaXN0ZW5lcihcIm5hdmlnYXRlc3VjY2Vzc1wiLCBoYW5kbGVOYXZpZ2F0ZUNvbXBsZXRlKTtcbiAgICAgICAgbmF2aWdhdGlvbi5hZGRFdmVudExpc3RlbmVyKFwibmF2aWdhdGVlcnJvclwiLCBoYW5kbGVOYXZpZ2F0ZUNvbXBsZXRlKTtcbiAgICAgICAgc2V0VGltZW91dChzdGFydEZha2VOYXZpZ2F0aW9uLCAxMDApO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlzQ2FuY2VsbGVkID0gITA7XG4gICAgICAgICAgbmF2aWdhdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwibmF2aWdhdGVcIiwgaGFuZGxlTmF2aWdhdGUpO1xuICAgICAgICAgIG5hdmlnYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgIFwibmF2aWdhdGVzdWNjZXNzXCIsXG4gICAgICAgICAgICBoYW5kbGVOYXZpZ2F0ZUNvbXBsZXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBuYXZpZ2F0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBcIm5hdmlnYXRlZXJyb3JcIixcbiAgICAgICAgICAgIGhhbmRsZU5hdmlnYXRlQ29tcGxldGVcbiAgICAgICAgICApO1xuICAgICAgICAgIG51bGwgIT09IHBlbmRpbmdSZXNvbHZlICYmXG4gICAgICAgICAgICAocGVuZGluZ1Jlc29sdmUoKSwgKHBlbmRpbmdSZXNvbHZlID0gbnVsbCkpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBSZWFjdERPTVJvb3QoaW50ZXJuYWxSb290KSB7XG4gICAgICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBpbnRlcm5hbFJvb3Q7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFJlYWN0RE9NSHlkcmF0aW9uUm9vdChpbnRlcm5hbFJvb3QpIHtcbiAgICAgIHRoaXMuX2ludGVybmFsUm9vdCA9IGludGVybmFsUm9vdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gd2FybklmUmVhY3RET01Db250YWluZXJJbkRFVihjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lcltpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSAmJlxuICAgICAgICAoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXJcbiAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NQ2xpZW50LmNyZWF0ZVJvb3QoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5IHBhc3NlZCB0byBSZWFjdERPTS5yZW5kZXIoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLlwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIllvdSBhcmUgY2FsbGluZyBSZWFjdERPTUNsaWVudC5jcmVhdGVSb290KCkgb24gYSBjb250YWluZXIgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHBhc3NlZCB0byBjcmVhdGVSb290KCkgYmVmb3JlLiBJbnN0ZWFkLCBjYWxsIHJvb3QucmVuZGVyKCkgb24gdGhlIGV4aXN0aW5nIHJvb3QgaW5zdGVhZCBpZiB5b3Ugd2FudCB0byB1cGRhdGUgaXQuXCJcbiAgICAgICAgICAgICkpO1xuICAgIH1cbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0ICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0KEVycm9yKCkpO1xuICAgIHZhciBTY2hlZHVsZXIgPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL3NjaGVkdWxlclwiKSxcbiAgICAgIFJlYWN0ID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9yZWFjdFwiKSxcbiAgICAgIFJlYWN0RE9NID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9yZWFjdC1kb21cIiksXG4gICAgICBhc3NpZ24gPSBPYmplY3QuYXNzaWduLFxuICAgICAgUkVBQ1RfTEVHQUNZX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpLFxuICAgICAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnRyYW5zaXRpb25hbC5lbGVtZW50XCIpLFxuICAgICAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLFxuICAgICAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxcbiAgICAgIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksXG4gICAgICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLFxuICAgICAgUkVBQ1RfQ09OU1VNRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb25zdW1lclwiKSxcbiAgICAgIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLFxuICAgICAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksXG4gICAgICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxcbiAgICAgIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLFxuICAgICAgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmxhenlcIik7XG4gICAgU3ltYm9sLmZvcihcInJlYWN0LnNjb3BlXCIpO1xuICAgIHZhciBSRUFDVF9BQ1RJVklUWV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmFjdGl2aXR5XCIpO1xuICAgIFN5bWJvbC5mb3IoXCJyZWFjdC5sZWdhY3lfaGlkZGVuXCIpO1xuICAgIFN5bWJvbC5mb3IoXCJyZWFjdC50cmFjaW5nX21hcmtlclwiKTtcbiAgICB2YXIgUkVBQ1RfTUVNT19DQUNIRV9TRU5USU5FTCA9IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vX2NhY2hlX3NlbnRpbmVsXCIpO1xuICAgIFN5bWJvbC5mb3IoXCJyZWFjdC52aWV3X3RyYW5zaXRpb25cIik7XG4gICAgdmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IFN5bWJvbC5pdGVyYXRvcixcbiAgICAgIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UgPSBTeW1ib2wuZm9yKFwicmVhY3QuY2xpZW50LnJlZmVyZW5jZVwiKSxcbiAgICAgIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheSxcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzID1cbiAgICAgICAgUmVhY3QuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFLFxuICAgICAgUmVhY3RET01TaGFyZWRJbnRlcm5hbHMgPVxuICAgICAgICBSZWFjdERPTS5fX0RPTV9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREUsXG4gICAgICBOb3RQZW5kaW5nID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIHBlbmRpbmc6ICExLFxuICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICBtZXRob2Q6IG51bGwsXG4gICAgICAgIGFjdGlvbjogbnVsbFxuICAgICAgfSksXG4gICAgICB2YWx1ZVN0YWNrID0gW107XG4gICAgdmFyIGZpYmVyU3RhY2sgPSBbXTtcbiAgICB2YXIgaW5kZXgkanNjb21wJDAgPSAtMSxcbiAgICAgIGNvbnRleHRTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKSxcbiAgICAgIGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICAgICAgcm9vdEluc3RhbmNlU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCksXG4gICAgICBob3N0VHJhbnNpdGlvblByb3ZpZGVyQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICAgICAgZGlzYWJsZWREZXB0aCA9IDAsXG4gICAgICBwcmV2TG9nLFxuICAgICAgcHJldkluZm8sXG4gICAgICBwcmV2V2FybixcbiAgICAgIHByZXZFcnJvcixcbiAgICAgIHByZXZHcm91cCxcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCxcbiAgICAgIHByZXZHcm91cEVuZDtcbiAgICBkaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSAhMDtcbiAgICB2YXIgcHJlZml4LFxuICAgICAgc3VmZml4LFxuICAgICAgcmVlbnRyeSA9ICExO1xuICAgIHZhciBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IChcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFdlYWtNYXAgPyBXZWFrTWFwIDogTWFwXG4gICAgKSgpO1xuICAgIHZhciBjdXJyZW50ID0gbnVsbCxcbiAgICAgIGlzUmVuZGVyaW5nID0gITEsXG4gICAgICBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksXG4gICAgICBzY2hlZHVsZUNhbGxiYWNrJDMgPSBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxcbiAgICAgIGNhbmNlbENhbGxiYWNrJDEgPSBTY2hlZHVsZXIudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2ssXG4gICAgICBzaG91bGRZaWVsZCA9IFNjaGVkdWxlci51bnN0YWJsZV9zaG91bGRZaWVsZCxcbiAgICAgIHJlcXVlc3RQYWludCA9IFNjaGVkdWxlci51bnN0YWJsZV9yZXF1ZXN0UGFpbnQsXG4gICAgICBub3ckMSA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3csXG4gICAgICBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCA9IFNjaGVkdWxlci51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCxcbiAgICAgIEltbWVkaWF0ZVByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5LFxuICAgICAgVXNlckJsb2NraW5nUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksXG4gICAgICBOb3JtYWxQcmlvcml0eSQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LFxuICAgICAgTG93UHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfTG93UHJpb3JpdHksXG4gICAgICBJZGxlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSWRsZVByaW9yaXR5LFxuICAgICAgbG9nJDEgPSBTY2hlZHVsZXIubG9nLFxuICAgICAgdW5zdGFibGVfc2V0RGlzYWJsZVlpZWxkVmFsdWUgPSBTY2hlZHVsZXIudW5zdGFibGVfc2V0RGlzYWJsZVlpZWxkVmFsdWUsXG4gICAgICByZW5kZXJlcklEID0gbnVsbCxcbiAgICAgIGluamVjdGVkSG9vayA9IG51bGwsXG4gICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzID0gbnVsbCxcbiAgICAgIGhhc0xvZ2dlZEVycm9yID0gITEsXG4gICAgICBpc0RldlRvb2xzUHJlc2VudCA9IFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18sXG4gICAgICBjbHozMiA9IE1hdGguY2x6MzIgPyBNYXRoLmNsejMyIDogY2x6MzJGYWxsYmFjayxcbiAgICAgIGxvZyA9IE1hdGgubG9nLFxuICAgICAgTE4yID0gTWF0aC5MTjIsXG4gICAgICBuZXh0VHJhbnNpdGlvbkxhbmUgPSAyNTYsXG4gICAgICBuZXh0UmV0cnlMYW5lID0gNDE5NDMwNCxcbiAgICAgIERpc2NyZXRlRXZlbnRQcmlvcml0eSA9IDIsXG4gICAgICBDb250aW51b3VzRXZlbnRQcmlvcml0eSA9IDgsXG4gICAgICBEZWZhdWx0RXZlbnRQcmlvcml0eSA9IDMyLFxuICAgICAgSWRsZUV2ZW50UHJpb3JpdHkgPSAyNjg0MzU0NTYsXG4gICAgICByYW5kb21LZXkgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKSxcbiAgICAgIGludGVybmFsSW5zdGFuY2VLZXkgPSBcIl9fcmVhY3RGaWJlciRcIiArIHJhbmRvbUtleSxcbiAgICAgIGludGVybmFsUHJvcHNLZXkgPSBcIl9fcmVhY3RQcm9wcyRcIiArIHJhbmRvbUtleSxcbiAgICAgIGludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXkgPSBcIl9fcmVhY3RDb250YWluZXIkXCIgKyByYW5kb21LZXksXG4gICAgICBpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXkgPSBcIl9fcmVhY3RFdmVudHMkXCIgKyByYW5kb21LZXksXG4gICAgICBpbnRlcm5hbEV2ZW50SGFuZGxlckxpc3RlbmVyc0tleSA9IFwiX19yZWFjdExpc3RlbmVycyRcIiArIHJhbmRvbUtleSxcbiAgICAgIGludGVybmFsRXZlbnRIYW5kbGVzU2V0S2V5ID0gXCJfX3JlYWN0SGFuZGxlcyRcIiArIHJhbmRvbUtleSxcbiAgICAgIGludGVybmFsUm9vdE5vZGVSZXNvdXJjZXNLZXkgPSBcIl9fcmVhY3RSZXNvdXJjZXMkXCIgKyByYW5kb21LZXksXG4gICAgICBpbnRlcm5hbEhvaXN0YWJsZU1hcmtlciA9IFwiX19yZWFjdE1hcmtlciRcIiArIHJhbmRvbUtleSxcbiAgICAgIGFsbE5hdGl2ZUV2ZW50cyA9IG5ldyBTZXQoKSxcbiAgICAgIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMgPSB7fSxcbiAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgPSB7fSxcbiAgICAgIGhhc1JlYWRPbmx5VmFsdWUgPSB7XG4gICAgICAgIGJ1dHRvbjogITAsXG4gICAgICAgIGNoZWNrYm94OiAhMCxcbiAgICAgICAgaW1hZ2U6ICEwLFxuICAgICAgICBoaWRkZW46ICEwLFxuICAgICAgICByYWRpbzogITAsXG4gICAgICAgIHJlc2V0OiAhMCxcbiAgICAgICAgc3VibWl0OiAhMFxuICAgICAgfSxcbiAgICAgIFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYID0gUmVnRXhwKFxuICAgICAgICBcIl5bOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRF1bOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFxcXFwtLjAtOVxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwXSokXCJcbiAgICAgICksXG4gICAgICBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlID0ge30sXG4gICAgICB2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUgPSB7fSxcbiAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXNSZWdleCA9IC9bXFxuXCJcXFxcXS9nLFxuICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSAhMSxcbiAgICAgIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSAhMSxcbiAgICAgIGRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uID0gITEsXG4gICAgICBkaWRXYXJuSW52YWxpZENoaWxkID0gITEsXG4gICAgICBkaWRXYXJuSW52YWxpZElubmVySFRNTCA9ICExO1xuICAgIHZhciBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSAhMTtcbiAgICB2YXIgdmFsdWVQcm9wTmFtZXMgPSBbXCJ2YWx1ZVwiLCBcImRlZmF1bHRWYWx1ZVwiXSxcbiAgICAgIGRpZFdhcm5WYWxEZWZhdWx0VmFsID0gITEsXG4gICAgICBuZWVkc0VzY2FwaW5nID0gL1tcIicmPD5cXG5cXHRdfF5cXHN8XFxzJC8sXG4gICAgICBzcGVjaWFsVGFncyA9XG4gICAgICAgIFwiYWRkcmVzcyBhcHBsZXQgYXJlYSBhcnRpY2xlIGFzaWRlIGJhc2UgYmFzZWZvbnQgYmdzb3VuZCBibG9ja3F1b3RlIGJvZHkgYnIgYnV0dG9uIGNhcHRpb24gY2VudGVyIGNvbCBjb2xncm91cCBkZCBkZXRhaWxzIGRpciBkaXYgZGwgZHQgZW1iZWQgZmllbGRzZXQgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGZvcm0gZnJhbWUgZnJhbWVzZXQgaDEgaDIgaDMgaDQgaDUgaDYgaGVhZCBoZWFkZXIgaGdyb3VwIGhyIGh0bWwgaWZyYW1lIGltZyBpbnB1dCBpc2luZGV4IGxpIGxpbmsgbGlzdGluZyBtYWluIG1hcnF1ZWUgbWVudSBtZW51aXRlbSBtZXRhIG5hdiBub2VtYmVkIG5vZnJhbWVzIG5vc2NyaXB0IG9iamVjdCBvbCBwIHBhcmFtIHBsYWludGV4dCBwcmUgc2NyaXB0IHNlY3Rpb24gc2VsZWN0IHNvdXJjZSBzdHlsZSBzdW1tYXJ5IHRhYmxlIHRib2R5IHRkIHRlbXBsYXRlIHRleHRhcmVhIHRmb290IHRoIHRoZWFkIHRpdGxlIHRyIHRyYWNrIHVsIHdiciB4bXBcIi5zcGxpdChcbiAgICAgICAgICBcIiBcIlxuICAgICAgICApLFxuICAgICAgaW5TY29wZVRhZ3MgPVxuICAgICAgICBcImFwcGxldCBjYXB0aW9uIGh0bWwgdGFibGUgdGQgdGggbWFycXVlZSBvYmplY3QgdGVtcGxhdGUgZm9yZWlnbk9iamVjdCBkZXNjIHRpdGxlXCIuc3BsaXQoXG4gICAgICAgICAgXCIgXCJcbiAgICAgICAgKSxcbiAgICAgIGJ1dHRvblNjb3BlVGFncyA9IGluU2NvcGVUYWdzLmNvbmNhdChbXCJidXR0b25cIl0pLFxuICAgICAgaW1wbGllZEVuZFRhZ3MgPSBcImRkIGR0IGxpIG9wdGlvbiBvcHRncm91cCBwIHJwIHJ0XCIuc3BsaXQoXCIgXCIpLFxuICAgICAgZW1wdHlBbmNlc3RvckluZm9EZXYgPSB7XG4gICAgICAgIGN1cnJlbnQ6IG51bGwsXG4gICAgICAgIGZvcm1UYWc6IG51bGwsXG4gICAgICAgIGFUYWdJblNjb3BlOiBudWxsLFxuICAgICAgICBidXR0b25UYWdJblNjb3BlOiBudWxsLFxuICAgICAgICBub2JyVGFnSW5TY29wZTogbnVsbCxcbiAgICAgICAgcFRhZ0luQnV0dG9uU2NvcGU6IG51bGwsXG4gICAgICAgIGxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGwsXG4gICAgICAgIGRsSXRlbVRhZ0F1dG9jbG9zaW5nOiBudWxsLFxuICAgICAgICBjb250YWluZXJUYWdJblNjb3BlOiBudWxsLFxuICAgICAgICBpbXBsaWNpdFJvb3RTY29wZTogITFcbiAgICAgIH0sXG4gICAgICBkaWRXYXJuID0ge30sXG4gICAgICBzaG9ydGhhbmRUb0xvbmdoYW5kID0ge1xuICAgICAgICBhbmltYXRpb246XG4gICAgICAgICAgXCJhbmltYXRpb25EZWxheSBhbmltYXRpb25EaXJlY3Rpb24gYW5pbWF0aW9uRHVyYXRpb24gYW5pbWF0aW9uRmlsbE1vZGUgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgYW5pbWF0aW9uTmFtZSBhbmltYXRpb25QbGF5U3RhdGUgYW5pbWF0aW9uVGltaW5nRnVuY3Rpb25cIi5zcGxpdChcbiAgICAgICAgICAgIFwiIFwiXG4gICAgICAgICAgKSxcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBcImJhY2tncm91bmRBdHRhY2htZW50IGJhY2tncm91bmRDbGlwIGJhY2tncm91bmRDb2xvciBiYWNrZ3JvdW5kSW1hZ2UgYmFja2dyb3VuZE9yaWdpbiBiYWNrZ3JvdW5kUG9zaXRpb25YIGJhY2tncm91bmRQb3NpdGlvblkgYmFja2dyb3VuZFJlcGVhdCBiYWNrZ3JvdW5kU2l6ZVwiLnNwbGl0KFxuICAgICAgICAgICAgXCIgXCJcbiAgICAgICAgICApLFxuICAgICAgICBiYWNrZ3JvdW5kUG9zaXRpb246IFtcImJhY2tncm91bmRQb3NpdGlvblhcIiwgXCJiYWNrZ3JvdW5kUG9zaXRpb25ZXCJdLFxuICAgICAgICBib3JkZXI6XG4gICAgICAgICAgXCJib3JkZXJCb3R0b21Db2xvciBib3JkZXJCb3R0b21TdHlsZSBib3JkZXJCb3R0b21XaWR0aCBib3JkZXJJbWFnZU91dHNldCBib3JkZXJJbWFnZVJlcGVhdCBib3JkZXJJbWFnZVNsaWNlIGJvcmRlckltYWdlU291cmNlIGJvcmRlckltYWdlV2lkdGggYm9yZGVyTGVmdENvbG9yIGJvcmRlckxlZnRTdHlsZSBib3JkZXJMZWZ0V2lkdGggYm9yZGVyUmlnaHRDb2xvciBib3JkZXJSaWdodFN0eWxlIGJvcmRlclJpZ2h0V2lkdGggYm9yZGVyVG9wQ29sb3IgYm9yZGVyVG9wU3R5bGUgYm9yZGVyVG9wV2lkdGhcIi5zcGxpdChcbiAgICAgICAgICAgIFwiIFwiXG4gICAgICAgICAgKSxcbiAgICAgICAgYm9yZGVyQmxvY2tFbmQ6IFtcbiAgICAgICAgICBcImJvcmRlckJsb2NrRW5kQ29sb3JcIixcbiAgICAgICAgICBcImJvcmRlckJsb2NrRW5kU3R5bGVcIixcbiAgICAgICAgICBcImJvcmRlckJsb2NrRW5kV2lkdGhcIlxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJCbG9ja1N0YXJ0OiBbXG4gICAgICAgICAgXCJib3JkZXJCbG9ja1N0YXJ0Q29sb3JcIixcbiAgICAgICAgICBcImJvcmRlckJsb2NrU3RhcnRTdHlsZVwiLFxuICAgICAgICAgIFwiYm9yZGVyQmxvY2tTdGFydFdpZHRoXCJcbiAgICAgICAgXSxcbiAgICAgICAgYm9yZGVyQm90dG9tOiBbXG4gICAgICAgICAgXCJib3JkZXJCb3R0b21Db2xvclwiLFxuICAgICAgICAgIFwiYm9yZGVyQm90dG9tU3R5bGVcIixcbiAgICAgICAgICBcImJvcmRlckJvdHRvbVdpZHRoXCJcbiAgICAgICAgXSxcbiAgICAgICAgYm9yZGVyQ29sb3I6IFtcbiAgICAgICAgICBcImJvcmRlckJvdHRvbUNvbG9yXCIsXG4gICAgICAgICAgXCJib3JkZXJMZWZ0Q29sb3JcIixcbiAgICAgICAgICBcImJvcmRlclJpZ2h0Q29sb3JcIixcbiAgICAgICAgICBcImJvcmRlclRvcENvbG9yXCJcbiAgICAgICAgXSxcbiAgICAgICAgYm9yZGVySW1hZ2U6IFtcbiAgICAgICAgICBcImJvcmRlckltYWdlT3V0c2V0XCIsXG4gICAgICAgICAgXCJib3JkZXJJbWFnZVJlcGVhdFwiLFxuICAgICAgICAgIFwiYm9yZGVySW1hZ2VTbGljZVwiLFxuICAgICAgICAgIFwiYm9yZGVySW1hZ2VTb3VyY2VcIixcbiAgICAgICAgICBcImJvcmRlckltYWdlV2lkdGhcIlxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJJbmxpbmVFbmQ6IFtcbiAgICAgICAgICBcImJvcmRlcklubGluZUVuZENvbG9yXCIsXG4gICAgICAgICAgXCJib3JkZXJJbmxpbmVFbmRTdHlsZVwiLFxuICAgICAgICAgIFwiYm9yZGVySW5saW5lRW5kV2lkdGhcIlxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJJbmxpbmVTdGFydDogW1xuICAgICAgICAgIFwiYm9yZGVySW5saW5lU3RhcnRDb2xvclwiLFxuICAgICAgICAgIFwiYm9yZGVySW5saW5lU3RhcnRTdHlsZVwiLFxuICAgICAgICAgIFwiYm9yZGVySW5saW5lU3RhcnRXaWR0aFwiXG4gICAgICAgIF0sXG4gICAgICAgIGJvcmRlckxlZnQ6IFtcImJvcmRlckxlZnRDb2xvclwiLCBcImJvcmRlckxlZnRTdHlsZVwiLCBcImJvcmRlckxlZnRXaWR0aFwiXSxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiBbXG4gICAgICAgICAgXCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzXCIsXG4gICAgICAgICAgXCJib3JkZXJCb3R0b21SaWdodFJhZGl1c1wiLFxuICAgICAgICAgIFwiYm9yZGVyVG9wTGVmdFJhZGl1c1wiLFxuICAgICAgICAgIFwiYm9yZGVyVG9wUmlnaHRSYWRpdXNcIlxuICAgICAgICBdLFxuICAgICAgICBib3JkZXJSaWdodDogW1xuICAgICAgICAgIFwiYm9yZGVyUmlnaHRDb2xvclwiLFxuICAgICAgICAgIFwiYm9yZGVyUmlnaHRTdHlsZVwiLFxuICAgICAgICAgIFwiYm9yZGVyUmlnaHRXaWR0aFwiXG4gICAgICAgIF0sXG4gICAgICAgIGJvcmRlclN0eWxlOiBbXG4gICAgICAgICAgXCJib3JkZXJCb3R0b21TdHlsZVwiLFxuICAgICAgICAgIFwiYm9yZGVyTGVmdFN0eWxlXCIsXG4gICAgICAgICAgXCJib3JkZXJSaWdodFN0eWxlXCIsXG4gICAgICAgICAgXCJib3JkZXJUb3BTdHlsZVwiXG4gICAgICAgIF0sXG4gICAgICAgIGJvcmRlclRvcDogW1wiYm9yZGVyVG9wQ29sb3JcIiwgXCJib3JkZXJUb3BTdHlsZVwiLCBcImJvcmRlclRvcFdpZHRoXCJdLFxuICAgICAgICBib3JkZXJXaWR0aDogW1xuICAgICAgICAgIFwiYm9yZGVyQm90dG9tV2lkdGhcIixcbiAgICAgICAgICBcImJvcmRlckxlZnRXaWR0aFwiLFxuICAgICAgICAgIFwiYm9yZGVyUmlnaHRXaWR0aFwiLFxuICAgICAgICAgIFwiYm9yZGVyVG9wV2lkdGhcIlxuICAgICAgICBdLFxuICAgICAgICBjb2x1bW5SdWxlOiBbXCJjb2x1bW5SdWxlQ29sb3JcIiwgXCJjb2x1bW5SdWxlU3R5bGVcIiwgXCJjb2x1bW5SdWxlV2lkdGhcIl0sXG4gICAgICAgIGNvbHVtbnM6IFtcImNvbHVtbkNvdW50XCIsIFwiY29sdW1uV2lkdGhcIl0sXG4gICAgICAgIGZsZXg6IFtcImZsZXhCYXNpc1wiLCBcImZsZXhHcm93XCIsIFwiZmxleFNocmlua1wiXSxcbiAgICAgICAgZmxleEZsb3c6IFtcImZsZXhEaXJlY3Rpb25cIiwgXCJmbGV4V3JhcFwiXSxcbiAgICAgICAgZm9udDogXCJmb250RmFtaWx5IGZvbnRGZWF0dXJlU2V0dGluZ3MgZm9udEtlcm5pbmcgZm9udExhbmd1YWdlT3ZlcnJpZGUgZm9udFNpemUgZm9udFNpemVBZGp1c3QgZm9udFN0cmV0Y2ggZm9udFN0eWxlIGZvbnRWYXJpYW50IGZvbnRWYXJpYW50QWx0ZXJuYXRlcyBmb250VmFyaWFudENhcHMgZm9udFZhcmlhbnRFYXN0QXNpYW4gZm9udFZhcmlhbnRMaWdhdHVyZXMgZm9udFZhcmlhbnROdW1lcmljIGZvbnRWYXJpYW50UG9zaXRpb24gZm9udFdlaWdodCBsaW5lSGVpZ2h0XCIuc3BsaXQoXG4gICAgICAgICAgXCIgXCJcbiAgICAgICAgKSxcbiAgICAgICAgZm9udFZhcmlhbnQ6XG4gICAgICAgICAgXCJmb250VmFyaWFudEFsdGVybmF0ZXMgZm9udFZhcmlhbnRDYXBzIGZvbnRWYXJpYW50RWFzdEFzaWFuIGZvbnRWYXJpYW50TGlnYXR1cmVzIGZvbnRWYXJpYW50TnVtZXJpYyBmb250VmFyaWFudFBvc2l0aW9uXCIuc3BsaXQoXG4gICAgICAgICAgICBcIiBcIlxuICAgICAgICAgICksXG4gICAgICAgIGdhcDogW1wiY29sdW1uR2FwXCIsIFwicm93R2FwXCJdLFxuICAgICAgICBncmlkOiBcImdyaWRBdXRvQ29sdW1ucyBncmlkQXV0b0Zsb3cgZ3JpZEF1dG9Sb3dzIGdyaWRUZW1wbGF0ZUFyZWFzIGdyaWRUZW1wbGF0ZUNvbHVtbnMgZ3JpZFRlbXBsYXRlUm93c1wiLnNwbGl0KFxuICAgICAgICAgIFwiIFwiXG4gICAgICAgICksXG4gICAgICAgIGdyaWRBcmVhOiBbXG4gICAgICAgICAgXCJncmlkQ29sdW1uRW5kXCIsXG4gICAgICAgICAgXCJncmlkQ29sdW1uU3RhcnRcIixcbiAgICAgICAgICBcImdyaWRSb3dFbmRcIixcbiAgICAgICAgICBcImdyaWRSb3dTdGFydFwiXG4gICAgICAgIF0sXG4gICAgICAgIGdyaWRDb2x1bW46IFtcImdyaWRDb2x1bW5FbmRcIiwgXCJncmlkQ29sdW1uU3RhcnRcIl0sXG4gICAgICAgIGdyaWRDb2x1bW5HYXA6IFtcImNvbHVtbkdhcFwiXSxcbiAgICAgICAgZ3JpZEdhcDogW1wiY29sdW1uR2FwXCIsIFwicm93R2FwXCJdLFxuICAgICAgICBncmlkUm93OiBbXCJncmlkUm93RW5kXCIsIFwiZ3JpZFJvd1N0YXJ0XCJdLFxuICAgICAgICBncmlkUm93R2FwOiBbXCJyb3dHYXBcIl0sXG4gICAgICAgIGdyaWRUZW1wbGF0ZTogW1xuICAgICAgICAgIFwiZ3JpZFRlbXBsYXRlQXJlYXNcIixcbiAgICAgICAgICBcImdyaWRUZW1wbGF0ZUNvbHVtbnNcIixcbiAgICAgICAgICBcImdyaWRUZW1wbGF0ZVJvd3NcIlxuICAgICAgICBdLFxuICAgICAgICBsaXN0U3R5bGU6IFtcImxpc3RTdHlsZUltYWdlXCIsIFwibGlzdFN0eWxlUG9zaXRpb25cIiwgXCJsaXN0U3R5bGVUeXBlXCJdLFxuICAgICAgICBtYXJnaW46IFtcIm1hcmdpbkJvdHRvbVwiLCBcIm1hcmdpbkxlZnRcIiwgXCJtYXJnaW5SaWdodFwiLCBcIm1hcmdpblRvcFwiXSxcbiAgICAgICAgbWFya2VyOiBbXCJtYXJrZXJFbmRcIiwgXCJtYXJrZXJNaWRcIiwgXCJtYXJrZXJTdGFydFwiXSxcbiAgICAgICAgbWFzazogXCJtYXNrQ2xpcCBtYXNrQ29tcG9zaXRlIG1hc2tJbWFnZSBtYXNrTW9kZSBtYXNrT3JpZ2luIG1hc2tQb3NpdGlvblggbWFza1Bvc2l0aW9uWSBtYXNrUmVwZWF0IG1hc2tTaXplXCIuc3BsaXQoXG4gICAgICAgICAgXCIgXCJcbiAgICAgICAgKSxcbiAgICAgICAgbWFza1Bvc2l0aW9uOiBbXCJtYXNrUG9zaXRpb25YXCIsIFwibWFza1Bvc2l0aW9uWVwiXSxcbiAgICAgICAgb3V0bGluZTogW1wib3V0bGluZUNvbG9yXCIsIFwib3V0bGluZVN0eWxlXCIsIFwib3V0bGluZVdpZHRoXCJdLFxuICAgICAgICBvdmVyZmxvdzogW1wib3ZlcmZsb3dYXCIsIFwib3ZlcmZsb3dZXCJdLFxuICAgICAgICBwYWRkaW5nOiBbXCJwYWRkaW5nQm90dG9tXCIsIFwicGFkZGluZ0xlZnRcIiwgXCJwYWRkaW5nUmlnaHRcIiwgXCJwYWRkaW5nVG9wXCJdLFxuICAgICAgICBwbGFjZUNvbnRlbnQ6IFtcImFsaWduQ29udGVudFwiLCBcImp1c3RpZnlDb250ZW50XCJdLFxuICAgICAgICBwbGFjZUl0ZW1zOiBbXCJhbGlnbkl0ZW1zXCIsIFwianVzdGlmeUl0ZW1zXCJdLFxuICAgICAgICBwbGFjZVNlbGY6IFtcImFsaWduU2VsZlwiLCBcImp1c3RpZnlTZWxmXCJdLFxuICAgICAgICB0ZXh0RGVjb3JhdGlvbjogW1xuICAgICAgICAgIFwidGV4dERlY29yYXRpb25Db2xvclwiLFxuICAgICAgICAgIFwidGV4dERlY29yYXRpb25MaW5lXCIsXG4gICAgICAgICAgXCJ0ZXh0RGVjb3JhdGlvblN0eWxlXCJcbiAgICAgICAgXSxcbiAgICAgICAgdGV4dEVtcGhhc2lzOiBbXCJ0ZXh0RW1waGFzaXNDb2xvclwiLCBcInRleHRFbXBoYXNpc1N0eWxlXCJdLFxuICAgICAgICB0cmFuc2l0aW9uOiBbXG4gICAgICAgICAgXCJ0cmFuc2l0aW9uRGVsYXlcIixcbiAgICAgICAgICBcInRyYW5zaXRpb25EdXJhdGlvblwiLFxuICAgICAgICAgIFwidHJhbnNpdGlvblByb3BlcnR5XCIsXG4gICAgICAgICAgXCJ0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cIlxuICAgICAgICBdLFxuICAgICAgICB3b3JkV3JhcDogW1wib3ZlcmZsb3dXcmFwXCJdXG4gICAgICB9LFxuICAgICAgdXBwZXJjYXNlUGF0dGVybiA9IC8oW0EtWl0pL2csXG4gICAgICBtc1BhdHRlcm4kMSA9IC9ebXMtLyxcbiAgICAgIGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybiA9IC9eKD86d2Via2l0fG1venxvKVtBLVpdLyxcbiAgICAgIG1zUGF0dGVybiA9IC9eLW1zLS8sXG4gICAgICBoeXBoZW5QYXR0ZXJuID0gLy0oLikvZyxcbiAgICAgIGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiA9IC87XFxzKiQvLFxuICAgICAgd2FybmVkU3R5bGVOYW1lcyA9IHt9LFxuICAgICAgd2FybmVkU3R5bGVWYWx1ZXMgPSB7fSxcbiAgICAgIHdhcm5lZEZvck5hTlZhbHVlID0gITEsXG4gICAgICB3YXJuZWRGb3JJbmZpbml0eVZhbHVlID0gITEsXG4gICAgICB1bml0bGVzc051bWJlcnMgPSBuZXcgU2V0KFxuICAgICAgICBcImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IGFzcGVjdFJhdGlvIGJvcmRlckltYWdlT3V0c2V0IGJvcmRlckltYWdlU2xpY2UgYm9yZGVySW1hZ2VXaWR0aCBib3hGbGV4IGJveEZsZXhHcm91cCBib3hPcmRpbmFsR3JvdXAgY29sdW1uQ291bnQgY29sdW1ucyBmbGV4IGZsZXhHcm93IGZsZXhQb3NpdGl2ZSBmbGV4U2hyaW5rIGZsZXhOZWdhdGl2ZSBmbGV4T3JkZXIgZ3JpZEFyZWEgZ3JpZFJvdyBncmlkUm93RW5kIGdyaWRSb3dTcGFuIGdyaWRSb3dTdGFydCBncmlkQ29sdW1uIGdyaWRDb2x1bW5FbmQgZ3JpZENvbHVtblNwYW4gZ3JpZENvbHVtblN0YXJ0IGZvbnRXZWlnaHQgbGluZUNsYW1wIGxpbmVIZWlnaHQgb3BhY2l0eSBvcmRlciBvcnBoYW5zIHNjYWxlIHRhYlNpemUgd2lkb3dzIHpJbmRleCB6b29tIGZpbGxPcGFjaXR5IGZsb29kT3BhY2l0eSBzdG9wT3BhY2l0eSBzdHJva2VEYXNoYXJyYXkgc3Ryb2tlRGFzaG9mZnNldCBzdHJva2VNaXRlcmxpbWl0IHN0cm9rZU9wYWNpdHkgc3Ryb2tlV2lkdGggTW96QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgTW96Qm94RmxleCBNb3pCb3hGbGV4R3JvdXAgTW96TGluZUNsYW1wIG1zQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQgbXNGbGV4IG1zWm9vbSBtc0ZsZXhHcm93IG1zRmxleE5lZ2F0aXZlIG1zRmxleE9yZGVyIG1zRmxleFBvc2l0aXZlIG1zRmxleFNocmluayBtc0dyaWRDb2x1bW4gbXNHcmlkQ29sdW1uU3BhbiBtc0dyaWRSb3cgbXNHcmlkUm93U3BhbiBXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudCBXZWJraXRCb3hGbGV4IFdlYktpdEJveEZsZXhHcm91cCBXZWJraXRCb3hPcmRpbmFsR3JvdXAgV2Via2l0Q29sdW1uQ291bnQgV2Via2l0Q29sdW1ucyBXZWJraXRGbGV4IFdlYmtpdEZsZXhHcm93IFdlYmtpdEZsZXhQb3NpdGl2ZSBXZWJraXRGbGV4U2hyaW5rIFdlYmtpdExpbmVDbGFtcFwiLnNwbGl0KFxuICAgICAgICAgIFwiIFwiXG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBNQVRIX05BTUVTUEFDRSA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiLFxuICAgICAgU1ZHX05BTUVTUEFDRSA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgIGFsaWFzZXMgPSBuZXcgTWFwKFtcbiAgICAgICAgW1wiYWNjZXB0Q2hhcnNldFwiLCBcImFjY2VwdC1jaGFyc2V0XCJdLFxuICAgICAgICBbXCJodG1sRm9yXCIsIFwiZm9yXCJdLFxuICAgICAgICBbXCJodHRwRXF1aXZcIiwgXCJodHRwLWVxdWl2XCJdLFxuICAgICAgICBbXCJjcm9zc09yaWdpblwiLCBcImNyb3Nzb3JpZ2luXCJdLFxuICAgICAgICBbXCJhY2NlbnRIZWlnaHRcIiwgXCJhY2NlbnQtaGVpZ2h0XCJdLFxuICAgICAgICBbXCJhbGlnbm1lbnRCYXNlbGluZVwiLCBcImFsaWdubWVudC1iYXNlbGluZVwiXSxcbiAgICAgICAgW1wiYXJhYmljRm9ybVwiLCBcImFyYWJpYy1mb3JtXCJdLFxuICAgICAgICBbXCJiYXNlbGluZVNoaWZ0XCIsIFwiYmFzZWxpbmUtc2hpZnRcIl0sXG4gICAgICAgIFtcImNhcEhlaWdodFwiLCBcImNhcC1oZWlnaHRcIl0sXG4gICAgICAgIFtcImNsaXBQYXRoXCIsIFwiY2xpcC1wYXRoXCJdLFxuICAgICAgICBbXCJjbGlwUnVsZVwiLCBcImNsaXAtcnVsZVwiXSxcbiAgICAgICAgW1wiY29sb3JJbnRlcnBvbGF0aW9uXCIsIFwiY29sb3ItaW50ZXJwb2xhdGlvblwiXSxcbiAgICAgICAgW1wiY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc1wiLCBcImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVyc1wiXSxcbiAgICAgICAgW1wiY29sb3JQcm9maWxlXCIsIFwiY29sb3ItcHJvZmlsZVwiXSxcbiAgICAgICAgW1wiY29sb3JSZW5kZXJpbmdcIiwgXCJjb2xvci1yZW5kZXJpbmdcIl0sXG4gICAgICAgIFtcImRvbWluYW50QmFzZWxpbmVcIiwgXCJkb21pbmFudC1iYXNlbGluZVwiXSxcbiAgICAgICAgW1wiZW5hYmxlQmFja2dyb3VuZFwiLCBcImVuYWJsZS1iYWNrZ3JvdW5kXCJdLFxuICAgICAgICBbXCJmaWxsT3BhY2l0eVwiLCBcImZpbGwtb3BhY2l0eVwiXSxcbiAgICAgICAgW1wiZmlsbFJ1bGVcIiwgXCJmaWxsLXJ1bGVcIl0sXG4gICAgICAgIFtcImZsb29kQ29sb3JcIiwgXCJmbG9vZC1jb2xvclwiXSxcbiAgICAgICAgW1wiZmxvb2RPcGFjaXR5XCIsIFwiZmxvb2Qtb3BhY2l0eVwiXSxcbiAgICAgICAgW1wiZm9udEZhbWlseVwiLCBcImZvbnQtZmFtaWx5XCJdLFxuICAgICAgICBbXCJmb250U2l6ZVwiLCBcImZvbnQtc2l6ZVwiXSxcbiAgICAgICAgW1wiZm9udFNpemVBZGp1c3RcIiwgXCJmb250LXNpemUtYWRqdXN0XCJdLFxuICAgICAgICBbXCJmb250U3RyZXRjaFwiLCBcImZvbnQtc3RyZXRjaFwiXSxcbiAgICAgICAgW1wiZm9udFN0eWxlXCIsIFwiZm9udC1zdHlsZVwiXSxcbiAgICAgICAgW1wiZm9udFZhcmlhbnRcIiwgXCJmb250LXZhcmlhbnRcIl0sXG4gICAgICAgIFtcImZvbnRXZWlnaHRcIiwgXCJmb250LXdlaWdodFwiXSxcbiAgICAgICAgW1wiZ2x5cGhOYW1lXCIsIFwiZ2x5cGgtbmFtZVwiXSxcbiAgICAgICAgW1wiZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWxcIiwgXCJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsXCJdLFxuICAgICAgICBbXCJnbHlwaE9yaWVudGF0aW9uVmVydGljYWxcIiwgXCJnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbFwiXSxcbiAgICAgICAgW1wiaG9yaXpBZHZYXCIsIFwiaG9yaXotYWR2LXhcIl0sXG4gICAgICAgIFtcImhvcml6T3JpZ2luWFwiLCBcImhvcml6LW9yaWdpbi14XCJdLFxuICAgICAgICBbXCJpbWFnZVJlbmRlcmluZ1wiLCBcImltYWdlLXJlbmRlcmluZ1wiXSxcbiAgICAgICAgW1wibGV0dGVyU3BhY2luZ1wiLCBcImxldHRlci1zcGFjaW5nXCJdLFxuICAgICAgICBbXCJsaWdodGluZ0NvbG9yXCIsIFwibGlnaHRpbmctY29sb3JcIl0sXG4gICAgICAgIFtcIm1hcmtlckVuZFwiLCBcIm1hcmtlci1lbmRcIl0sXG4gICAgICAgIFtcIm1hcmtlck1pZFwiLCBcIm1hcmtlci1taWRcIl0sXG4gICAgICAgIFtcIm1hcmtlclN0YXJ0XCIsIFwibWFya2VyLXN0YXJ0XCJdLFxuICAgICAgICBbXCJvdmVybGluZVBvc2l0aW9uXCIsIFwib3ZlcmxpbmUtcG9zaXRpb25cIl0sXG4gICAgICAgIFtcIm92ZXJsaW5lVGhpY2tuZXNzXCIsIFwib3ZlcmxpbmUtdGhpY2tuZXNzXCJdLFxuICAgICAgICBbXCJwYWludE9yZGVyXCIsIFwicGFpbnQtb3JkZXJcIl0sXG4gICAgICAgIFtcInBhbm9zZS0xXCIsIFwicGFub3NlLTFcIl0sXG4gICAgICAgIFtcInBvaW50ZXJFdmVudHNcIiwgXCJwb2ludGVyLWV2ZW50c1wiXSxcbiAgICAgICAgW1wicmVuZGVyaW5nSW50ZW50XCIsIFwicmVuZGVyaW5nLWludGVudFwiXSxcbiAgICAgICAgW1wic2hhcGVSZW5kZXJpbmdcIiwgXCJzaGFwZS1yZW5kZXJpbmdcIl0sXG4gICAgICAgIFtcInN0b3BDb2xvclwiLCBcInN0b3AtY29sb3JcIl0sXG4gICAgICAgIFtcInN0b3BPcGFjaXR5XCIsIFwic3RvcC1vcGFjaXR5XCJdLFxuICAgICAgICBbXCJzdHJpa2V0aHJvdWdoUG9zaXRpb25cIiwgXCJzdHJpa2V0aHJvdWdoLXBvc2l0aW9uXCJdLFxuICAgICAgICBbXCJzdHJpa2V0aHJvdWdoVGhpY2tuZXNzXCIsIFwic3RyaWtldGhyb3VnaC10aGlja25lc3NcIl0sXG4gICAgICAgIFtcInN0cm9rZURhc2hhcnJheVwiLCBcInN0cm9rZS1kYXNoYXJyYXlcIl0sXG4gICAgICAgIFtcInN0cm9rZURhc2hvZmZzZXRcIiwgXCJzdHJva2UtZGFzaG9mZnNldFwiXSxcbiAgICAgICAgW1wic3Ryb2tlTGluZWNhcFwiLCBcInN0cm9rZS1saW5lY2FwXCJdLFxuICAgICAgICBbXCJzdHJva2VMaW5lam9pblwiLCBcInN0cm9rZS1saW5lam9pblwiXSxcbiAgICAgICAgW1wic3Ryb2tlTWl0ZXJsaW1pdFwiLCBcInN0cm9rZS1taXRlcmxpbWl0XCJdLFxuICAgICAgICBbXCJzdHJva2VPcGFjaXR5XCIsIFwic3Ryb2tlLW9wYWNpdHlcIl0sXG4gICAgICAgIFtcInN0cm9rZVdpZHRoXCIsIFwic3Ryb2tlLXdpZHRoXCJdLFxuICAgICAgICBbXCJ0ZXh0QW5jaG9yXCIsIFwidGV4dC1hbmNob3JcIl0sXG4gICAgICAgIFtcInRleHREZWNvcmF0aW9uXCIsIFwidGV4dC1kZWNvcmF0aW9uXCJdLFxuICAgICAgICBbXCJ0ZXh0UmVuZGVyaW5nXCIsIFwidGV4dC1yZW5kZXJpbmdcIl0sXG4gICAgICAgIFtcInRyYW5zZm9ybU9yaWdpblwiLCBcInRyYW5zZm9ybS1vcmlnaW5cIl0sXG4gICAgICAgIFtcInVuZGVybGluZVBvc2l0aW9uXCIsIFwidW5kZXJsaW5lLXBvc2l0aW9uXCJdLFxuICAgICAgICBbXCJ1bmRlcmxpbmVUaGlja25lc3NcIiwgXCJ1bmRlcmxpbmUtdGhpY2tuZXNzXCJdLFxuICAgICAgICBbXCJ1bmljb2RlQmlkaVwiLCBcInVuaWNvZGUtYmlkaVwiXSxcbiAgICAgICAgW1widW5pY29kZVJhbmdlXCIsIFwidW5pY29kZS1yYW5nZVwiXSxcbiAgICAgICAgW1widW5pdHNQZXJFbVwiLCBcInVuaXRzLXBlci1lbVwiXSxcbiAgICAgICAgW1widkFscGhhYmV0aWNcIiwgXCJ2LWFscGhhYmV0aWNcIl0sXG4gICAgICAgIFtcInZIYW5naW5nXCIsIFwidi1oYW5naW5nXCJdLFxuICAgICAgICBbXCJ2SWRlb2dyYXBoaWNcIiwgXCJ2LWlkZW9ncmFwaGljXCJdLFxuICAgICAgICBbXCJ2TWF0aGVtYXRpY2FsXCIsIFwidi1tYXRoZW1hdGljYWxcIl0sXG4gICAgICAgIFtcInZlY3RvckVmZmVjdFwiLCBcInZlY3Rvci1lZmZlY3RcIl0sXG4gICAgICAgIFtcInZlcnRBZHZZXCIsIFwidmVydC1hZHYteVwiXSxcbiAgICAgICAgW1widmVydE9yaWdpblhcIiwgXCJ2ZXJ0LW9yaWdpbi14XCJdLFxuICAgICAgICBbXCJ2ZXJ0T3JpZ2luWVwiLCBcInZlcnQtb3JpZ2luLXlcIl0sXG4gICAgICAgIFtcIndvcmRTcGFjaW5nXCIsIFwid29yZC1zcGFjaW5nXCJdLFxuICAgICAgICBbXCJ3cml0aW5nTW9kZVwiLCBcIndyaXRpbmctbW9kZVwiXSxcbiAgICAgICAgW1wieG1sbnNYbGlua1wiLCBcInhtbG5zOnhsaW5rXCJdLFxuICAgICAgICBbXCJ4SGVpZ2h0XCIsIFwieC1oZWlnaHRcIl1cbiAgICAgIF0pLFxuICAgICAgcG9zc2libGVTdGFuZGFyZE5hbWVzID0ge1xuICAgICAgICBhY2NlcHQ6IFwiYWNjZXB0XCIsXG4gICAgICAgIGFjY2VwdGNoYXJzZXQ6IFwiYWNjZXB0Q2hhcnNldFwiLFxuICAgICAgICBcImFjY2VwdC1jaGFyc2V0XCI6IFwiYWNjZXB0Q2hhcnNldFwiLFxuICAgICAgICBhY2Nlc3NrZXk6IFwiYWNjZXNzS2V5XCIsXG4gICAgICAgIGFjdGlvbjogXCJhY3Rpb25cIixcbiAgICAgICAgYWxsb3dmdWxsc2NyZWVuOiBcImFsbG93RnVsbFNjcmVlblwiLFxuICAgICAgICBhbHQ6IFwiYWx0XCIsXG4gICAgICAgIGFzOiBcImFzXCIsXG4gICAgICAgIGFzeW5jOiBcImFzeW5jXCIsXG4gICAgICAgIGF1dG9jYXBpdGFsaXplOiBcImF1dG9DYXBpdGFsaXplXCIsXG4gICAgICAgIGF1dG9jb21wbGV0ZTogXCJhdXRvQ29tcGxldGVcIixcbiAgICAgICAgYXV0b2NvcnJlY3Q6IFwiYXV0b0NvcnJlY3RcIixcbiAgICAgICAgYXV0b2ZvY3VzOiBcImF1dG9Gb2N1c1wiLFxuICAgICAgICBhdXRvcGxheTogXCJhdXRvUGxheVwiLFxuICAgICAgICBhdXRvc2F2ZTogXCJhdXRvU2F2ZVwiLFxuICAgICAgICBjYXB0dXJlOiBcImNhcHR1cmVcIixcbiAgICAgICAgY2VsbHBhZGRpbmc6IFwiY2VsbFBhZGRpbmdcIixcbiAgICAgICAgY2VsbHNwYWNpbmc6IFwiY2VsbFNwYWNpbmdcIixcbiAgICAgICAgY2hhbGxlbmdlOiBcImNoYWxsZW5nZVwiLFxuICAgICAgICBjaGFyc2V0OiBcImNoYXJTZXRcIixcbiAgICAgICAgY2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgICAgIGNoaWxkcmVuOiBcImNoaWxkcmVuXCIsXG4gICAgICAgIGNpdGU6IFwiY2l0ZVwiLFxuICAgICAgICBjbGFzczogXCJjbGFzc05hbWVcIixcbiAgICAgICAgY2xhc3NpZDogXCJjbGFzc0lEXCIsXG4gICAgICAgIGNsYXNzbmFtZTogXCJjbGFzc05hbWVcIixcbiAgICAgICAgY29sczogXCJjb2xzXCIsXG4gICAgICAgIGNvbHNwYW46IFwiY29sU3BhblwiLFxuICAgICAgICBjb250ZW50OiBcImNvbnRlbnRcIixcbiAgICAgICAgY29udGVudGVkaXRhYmxlOiBcImNvbnRlbnRFZGl0YWJsZVwiLFxuICAgICAgICBjb250ZXh0bWVudTogXCJjb250ZXh0TWVudVwiLFxuICAgICAgICBjb250cm9sczogXCJjb250cm9sc1wiLFxuICAgICAgICBjb250cm9sc2xpc3Q6IFwiY29udHJvbHNMaXN0XCIsXG4gICAgICAgIGNvb3JkczogXCJjb29yZHNcIixcbiAgICAgICAgY3Jvc3NvcmlnaW46IFwiY3Jvc3NPcmlnaW5cIixcbiAgICAgICAgZGFuZ2Vyb3VzbHlzZXRpbm5lcmh0bWw6IFwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxcIixcbiAgICAgICAgZGF0YTogXCJkYXRhXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcImRhdGVUaW1lXCIsXG4gICAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgICBkZWZhdWx0Y2hlY2tlZDogXCJkZWZhdWx0Q2hlY2tlZFwiLFxuICAgICAgICBkZWZhdWx0dmFsdWU6IFwiZGVmYXVsdFZhbHVlXCIsXG4gICAgICAgIGRlZmVyOiBcImRlZmVyXCIsXG4gICAgICAgIGRpcjogXCJkaXJcIixcbiAgICAgICAgZGlzYWJsZWQ6IFwiZGlzYWJsZWRcIixcbiAgICAgICAgZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmU6IFwiZGlzYWJsZVBpY3R1cmVJblBpY3R1cmVcIixcbiAgICAgICAgZGlzYWJsZXJlbW90ZXBsYXliYWNrOiBcImRpc2FibGVSZW1vdGVQbGF5YmFja1wiLFxuICAgICAgICBkb3dubG9hZDogXCJkb3dubG9hZFwiLFxuICAgICAgICBkcmFnZ2FibGU6IFwiZHJhZ2dhYmxlXCIsXG4gICAgICAgIGVuY3R5cGU6IFwiZW5jVHlwZVwiLFxuICAgICAgICBlbnRlcmtleWhpbnQ6IFwiZW50ZXJLZXlIaW50XCIsXG4gICAgICAgIGZldGNocHJpb3JpdHk6IFwiZmV0Y2hQcmlvcml0eVwiLFxuICAgICAgICBmb3I6IFwiaHRtbEZvclwiLFxuICAgICAgICBmb3JtOiBcImZvcm1cIixcbiAgICAgICAgZm9ybW1ldGhvZDogXCJmb3JtTWV0aG9kXCIsXG4gICAgICAgIGZvcm1hY3Rpb246IFwiZm9ybUFjdGlvblwiLFxuICAgICAgICBmb3JtZW5jdHlwZTogXCJmb3JtRW5jVHlwZVwiLFxuICAgICAgICBmb3Jtbm92YWxpZGF0ZTogXCJmb3JtTm9WYWxpZGF0ZVwiLFxuICAgICAgICBmb3JtdGFyZ2V0OiBcImZvcm1UYXJnZXRcIixcbiAgICAgICAgZnJhbWVib3JkZXI6IFwiZnJhbWVCb3JkZXJcIixcbiAgICAgICAgaGVhZGVyczogXCJoZWFkZXJzXCIsXG4gICAgICAgIGhlaWdodDogXCJoZWlnaHRcIixcbiAgICAgICAgaGlkZGVuOiBcImhpZGRlblwiLFxuICAgICAgICBoaWdoOiBcImhpZ2hcIixcbiAgICAgICAgaHJlZjogXCJocmVmXCIsXG4gICAgICAgIGhyZWZsYW5nOiBcImhyZWZMYW5nXCIsXG4gICAgICAgIGh0bWxmb3I6IFwiaHRtbEZvclwiLFxuICAgICAgICBodHRwZXF1aXY6IFwiaHR0cEVxdWl2XCIsXG4gICAgICAgIFwiaHR0cC1lcXVpdlwiOiBcImh0dHBFcXVpdlwiLFxuICAgICAgICBpY29uOiBcImljb25cIixcbiAgICAgICAgaWQ6IFwiaWRcIixcbiAgICAgICAgaW1hZ2VzaXplczogXCJpbWFnZVNpemVzXCIsXG4gICAgICAgIGltYWdlc3Jjc2V0OiBcImltYWdlU3JjU2V0XCIsXG4gICAgICAgIGluZXJ0OiBcImluZXJ0XCIsXG4gICAgICAgIGlubmVyaHRtbDogXCJpbm5lckhUTUxcIixcbiAgICAgICAgaW5wdXRtb2RlOiBcImlucHV0TW9kZVwiLFxuICAgICAgICBpbnRlZ3JpdHk6IFwiaW50ZWdyaXR5XCIsXG4gICAgICAgIGlzOiBcImlzXCIsXG4gICAgICAgIGl0ZW1pZDogXCJpdGVtSURcIixcbiAgICAgICAgaXRlbXByb3A6IFwiaXRlbVByb3BcIixcbiAgICAgICAgaXRlbXJlZjogXCJpdGVtUmVmXCIsXG4gICAgICAgIGl0ZW1zY29wZTogXCJpdGVtU2NvcGVcIixcbiAgICAgICAgaXRlbXR5cGU6IFwiaXRlbVR5cGVcIixcbiAgICAgICAga2V5cGFyYW1zOiBcImtleVBhcmFtc1wiLFxuICAgICAgICBrZXl0eXBlOiBcImtleVR5cGVcIixcbiAgICAgICAga2luZDogXCJraW5kXCIsXG4gICAgICAgIGxhYmVsOiBcImxhYmVsXCIsXG4gICAgICAgIGxhbmc6IFwibGFuZ1wiLFxuICAgICAgICBsaXN0OiBcImxpc3RcIixcbiAgICAgICAgbG9vcDogXCJsb29wXCIsXG4gICAgICAgIGxvdzogXCJsb3dcIixcbiAgICAgICAgbWFuaWZlc3Q6IFwibWFuaWZlc3RcIixcbiAgICAgICAgbWFyZ2lud2lkdGg6IFwibWFyZ2luV2lkdGhcIixcbiAgICAgICAgbWFyZ2luaGVpZ2h0OiBcIm1hcmdpbkhlaWdodFwiLFxuICAgICAgICBtYXg6IFwibWF4XCIsXG4gICAgICAgIG1heGxlbmd0aDogXCJtYXhMZW5ndGhcIixcbiAgICAgICAgbWVkaWE6IFwibWVkaWFcIixcbiAgICAgICAgbWVkaWFncm91cDogXCJtZWRpYUdyb3VwXCIsXG4gICAgICAgIG1ldGhvZDogXCJtZXRob2RcIixcbiAgICAgICAgbWluOiBcIm1pblwiLFxuICAgICAgICBtaW5sZW5ndGg6IFwibWluTGVuZ3RoXCIsXG4gICAgICAgIG11bHRpcGxlOiBcIm11bHRpcGxlXCIsXG4gICAgICAgIG11dGVkOiBcIm11dGVkXCIsXG4gICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICBub21vZHVsZTogXCJub01vZHVsZVwiLFxuICAgICAgICBub25jZTogXCJub25jZVwiLFxuICAgICAgICBub3ZhbGlkYXRlOiBcIm5vVmFsaWRhdGVcIixcbiAgICAgICAgb3BlbjogXCJvcGVuXCIsXG4gICAgICAgIG9wdGltdW06IFwib3B0aW11bVwiLFxuICAgICAgICBwYXR0ZXJuOiBcInBhdHRlcm5cIixcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwicGxhY2Vob2xkZXJcIixcbiAgICAgICAgcGxheXNpbmxpbmU6IFwicGxheXNJbmxpbmVcIixcbiAgICAgICAgcG9zdGVyOiBcInBvc3RlclwiLFxuICAgICAgICBwcmVsb2FkOiBcInByZWxvYWRcIixcbiAgICAgICAgcHJvZmlsZTogXCJwcm9maWxlXCIsXG4gICAgICAgIHJhZGlvZ3JvdXA6IFwicmFkaW9Hcm91cFwiLFxuICAgICAgICByZWFkb25seTogXCJyZWFkT25seVwiLFxuICAgICAgICByZWZlcnJlcnBvbGljeTogXCJyZWZlcnJlclBvbGljeVwiLFxuICAgICAgICByZWw6IFwicmVsXCIsXG4gICAgICAgIHJlcXVpcmVkOiBcInJlcXVpcmVkXCIsXG4gICAgICAgIHJldmVyc2VkOiBcInJldmVyc2VkXCIsXG4gICAgICAgIHJvbGU6IFwicm9sZVwiLFxuICAgICAgICByb3dzOiBcInJvd3NcIixcbiAgICAgICAgcm93c3BhbjogXCJyb3dTcGFuXCIsXG4gICAgICAgIHNhbmRib3g6IFwic2FuZGJveFwiLFxuICAgICAgICBzY29wZTogXCJzY29wZVwiLFxuICAgICAgICBzY29wZWQ6IFwic2NvcGVkXCIsXG4gICAgICAgIHNjcm9sbGluZzogXCJzY3JvbGxpbmdcIixcbiAgICAgICAgc2VhbWxlc3M6IFwic2VhbWxlc3NcIixcbiAgICAgICAgc2VsZWN0ZWQ6IFwic2VsZWN0ZWRcIixcbiAgICAgICAgc2hhcGU6IFwic2hhcGVcIixcbiAgICAgICAgc2l6ZTogXCJzaXplXCIsXG4gICAgICAgIHNpemVzOiBcInNpemVzXCIsXG4gICAgICAgIHNwYW46IFwic3BhblwiLFxuICAgICAgICBzcGVsbGNoZWNrOiBcInNwZWxsQ2hlY2tcIixcbiAgICAgICAgc3JjOiBcInNyY1wiLFxuICAgICAgICBzcmNkb2M6IFwic3JjRG9jXCIsXG4gICAgICAgIHNyY2xhbmc6IFwic3JjTGFuZ1wiLFxuICAgICAgICBzcmNzZXQ6IFwic3JjU2V0XCIsXG4gICAgICAgIHN0YXJ0OiBcInN0YXJ0XCIsXG4gICAgICAgIHN0ZXA6IFwic3RlcFwiLFxuICAgICAgICBzdHlsZTogXCJzdHlsZVwiLFxuICAgICAgICBzdW1tYXJ5OiBcInN1bW1hcnlcIixcbiAgICAgICAgdGFiaW5kZXg6IFwidGFiSW5kZXhcIixcbiAgICAgICAgdGFyZ2V0OiBcInRhcmdldFwiLFxuICAgICAgICB0aXRsZTogXCJ0aXRsZVwiLFxuICAgICAgICB0eXBlOiBcInR5cGVcIixcbiAgICAgICAgdXNlbWFwOiBcInVzZU1hcFwiLFxuICAgICAgICB2YWx1ZTogXCJ2YWx1ZVwiLFxuICAgICAgICB3aWR0aDogXCJ3aWR0aFwiLFxuICAgICAgICB3bW9kZTogXCJ3bW9kZVwiLFxuICAgICAgICB3cmFwOiBcIndyYXBcIixcbiAgICAgICAgYWJvdXQ6IFwiYWJvdXRcIixcbiAgICAgICAgYWNjZW50aGVpZ2h0OiBcImFjY2VudEhlaWdodFwiLFxuICAgICAgICBcImFjY2VudC1oZWlnaHRcIjogXCJhY2NlbnRIZWlnaHRcIixcbiAgICAgICAgYWNjdW11bGF0ZTogXCJhY2N1bXVsYXRlXCIsXG4gICAgICAgIGFkZGl0aXZlOiBcImFkZGl0aXZlXCIsXG4gICAgICAgIGFsaWdubWVudGJhc2VsaW5lOiBcImFsaWdubWVudEJhc2VsaW5lXCIsXG4gICAgICAgIFwiYWxpZ25tZW50LWJhc2VsaW5lXCI6IFwiYWxpZ25tZW50QmFzZWxpbmVcIixcbiAgICAgICAgYWxsb3dyZW9yZGVyOiBcImFsbG93UmVvcmRlclwiLFxuICAgICAgICBhbHBoYWJldGljOiBcImFscGhhYmV0aWNcIixcbiAgICAgICAgYW1wbGl0dWRlOiBcImFtcGxpdHVkZVwiLFxuICAgICAgICBhcmFiaWNmb3JtOiBcImFyYWJpY0Zvcm1cIixcbiAgICAgICAgXCJhcmFiaWMtZm9ybVwiOiBcImFyYWJpY0Zvcm1cIixcbiAgICAgICAgYXNjZW50OiBcImFzY2VudFwiLFxuICAgICAgICBhdHRyaWJ1dGVuYW1lOiBcImF0dHJpYnV0ZU5hbWVcIixcbiAgICAgICAgYXR0cmlidXRldHlwZTogXCJhdHRyaWJ1dGVUeXBlXCIsXG4gICAgICAgIGF1dG9yZXZlcnNlOiBcImF1dG9SZXZlcnNlXCIsXG4gICAgICAgIGF6aW11dGg6IFwiYXppbXV0aFwiLFxuICAgICAgICBiYXNlZnJlcXVlbmN5OiBcImJhc2VGcmVxdWVuY3lcIixcbiAgICAgICAgYmFzZWxpbmVzaGlmdDogXCJiYXNlbGluZVNoaWZ0XCIsXG4gICAgICAgIFwiYmFzZWxpbmUtc2hpZnRcIjogXCJiYXNlbGluZVNoaWZ0XCIsXG4gICAgICAgIGJhc2Vwcm9maWxlOiBcImJhc2VQcm9maWxlXCIsXG4gICAgICAgIGJib3g6IFwiYmJveFwiLFxuICAgICAgICBiZWdpbjogXCJiZWdpblwiLFxuICAgICAgICBiaWFzOiBcImJpYXNcIixcbiAgICAgICAgYnk6IFwiYnlcIixcbiAgICAgICAgY2FsY21vZGU6IFwiY2FsY01vZGVcIixcbiAgICAgICAgY2FwaGVpZ2h0OiBcImNhcEhlaWdodFwiLFxuICAgICAgICBcImNhcC1oZWlnaHRcIjogXCJjYXBIZWlnaHRcIixcbiAgICAgICAgY2xpcDogXCJjbGlwXCIsXG4gICAgICAgIGNsaXBwYXRoOiBcImNsaXBQYXRoXCIsXG4gICAgICAgIFwiY2xpcC1wYXRoXCI6IFwiY2xpcFBhdGhcIixcbiAgICAgICAgY2xpcHBhdGh1bml0czogXCJjbGlwUGF0aFVuaXRzXCIsXG4gICAgICAgIGNsaXBydWxlOiBcImNsaXBSdWxlXCIsXG4gICAgICAgIFwiY2xpcC1ydWxlXCI6IFwiY2xpcFJ1bGVcIixcbiAgICAgICAgY29sb3I6IFwiY29sb3JcIixcbiAgICAgICAgY29sb3JpbnRlcnBvbGF0aW9uOiBcImNvbG9ySW50ZXJwb2xhdGlvblwiLFxuICAgICAgICBcImNvbG9yLWludGVycG9sYXRpb25cIjogXCJjb2xvckludGVycG9sYXRpb25cIixcbiAgICAgICAgY29sb3JpbnRlcnBvbGF0aW9uZmlsdGVyczogXCJjb2xvckludGVycG9sYXRpb25GaWx0ZXJzXCIsXG4gICAgICAgIFwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzXCI6IFwiY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc1wiLFxuICAgICAgICBjb2xvcnByb2ZpbGU6IFwiY29sb3JQcm9maWxlXCIsXG4gICAgICAgIFwiY29sb3ItcHJvZmlsZVwiOiBcImNvbG9yUHJvZmlsZVwiLFxuICAgICAgICBjb2xvcnJlbmRlcmluZzogXCJjb2xvclJlbmRlcmluZ1wiLFxuICAgICAgICBcImNvbG9yLXJlbmRlcmluZ1wiOiBcImNvbG9yUmVuZGVyaW5nXCIsXG4gICAgICAgIGNvbnRlbnRzY3JpcHR0eXBlOiBcImNvbnRlbnRTY3JpcHRUeXBlXCIsXG4gICAgICAgIGNvbnRlbnRzdHlsZXR5cGU6IFwiY29udGVudFN0eWxlVHlwZVwiLFxuICAgICAgICBjdXJzb3I6IFwiY3Vyc29yXCIsXG4gICAgICAgIGN4OiBcImN4XCIsXG4gICAgICAgIGN5OiBcImN5XCIsXG4gICAgICAgIGQ6IFwiZFwiLFxuICAgICAgICBkYXRhdHlwZTogXCJkYXRhdHlwZVwiLFxuICAgICAgICBkZWNlbGVyYXRlOiBcImRlY2VsZXJhdGVcIixcbiAgICAgICAgZGVzY2VudDogXCJkZXNjZW50XCIsXG4gICAgICAgIGRpZmZ1c2Vjb25zdGFudDogXCJkaWZmdXNlQ29uc3RhbnRcIixcbiAgICAgICAgZGlyZWN0aW9uOiBcImRpcmVjdGlvblwiLFxuICAgICAgICBkaXNwbGF5OiBcImRpc3BsYXlcIixcbiAgICAgICAgZGl2aXNvcjogXCJkaXZpc29yXCIsXG4gICAgICAgIGRvbWluYW50YmFzZWxpbmU6IFwiZG9taW5hbnRCYXNlbGluZVwiLFxuICAgICAgICBcImRvbWluYW50LWJhc2VsaW5lXCI6IFwiZG9taW5hbnRCYXNlbGluZVwiLFxuICAgICAgICBkdXI6IFwiZHVyXCIsXG4gICAgICAgIGR4OiBcImR4XCIsXG4gICAgICAgIGR5OiBcImR5XCIsXG4gICAgICAgIGVkZ2Vtb2RlOiBcImVkZ2VNb2RlXCIsXG4gICAgICAgIGVsZXZhdGlvbjogXCJlbGV2YXRpb25cIixcbiAgICAgICAgZW5hYmxlYmFja2dyb3VuZDogXCJlbmFibGVCYWNrZ3JvdW5kXCIsXG4gICAgICAgIFwiZW5hYmxlLWJhY2tncm91bmRcIjogXCJlbmFibGVCYWNrZ3JvdW5kXCIsXG4gICAgICAgIGVuZDogXCJlbmRcIixcbiAgICAgICAgZXhwb25lbnQ6IFwiZXhwb25lbnRcIixcbiAgICAgICAgZXh0ZXJuYWxyZXNvdXJjZXNyZXF1aXJlZDogXCJleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkXCIsXG4gICAgICAgIGZpbGw6IFwiZmlsbFwiLFxuICAgICAgICBmaWxsb3BhY2l0eTogXCJmaWxsT3BhY2l0eVwiLFxuICAgICAgICBcImZpbGwtb3BhY2l0eVwiOiBcImZpbGxPcGFjaXR5XCIsXG4gICAgICAgIGZpbGxydWxlOiBcImZpbGxSdWxlXCIsXG4gICAgICAgIFwiZmlsbC1ydWxlXCI6IFwiZmlsbFJ1bGVcIixcbiAgICAgICAgZmlsdGVyOiBcImZpbHRlclwiLFxuICAgICAgICBmaWx0ZXJyZXM6IFwiZmlsdGVyUmVzXCIsXG4gICAgICAgIGZpbHRlcnVuaXRzOiBcImZpbHRlclVuaXRzXCIsXG4gICAgICAgIGZsb29kb3BhY2l0eTogXCJmbG9vZE9wYWNpdHlcIixcbiAgICAgICAgXCJmbG9vZC1vcGFjaXR5XCI6IFwiZmxvb2RPcGFjaXR5XCIsXG4gICAgICAgIGZsb29kY29sb3I6IFwiZmxvb2RDb2xvclwiLFxuICAgICAgICBcImZsb29kLWNvbG9yXCI6IFwiZmxvb2RDb2xvclwiLFxuICAgICAgICBmb2N1c2FibGU6IFwiZm9jdXNhYmxlXCIsXG4gICAgICAgIGZvbnRmYW1pbHk6IFwiZm9udEZhbWlseVwiLFxuICAgICAgICBcImZvbnQtZmFtaWx5XCI6IFwiZm9udEZhbWlseVwiLFxuICAgICAgICBmb250c2l6ZTogXCJmb250U2l6ZVwiLFxuICAgICAgICBcImZvbnQtc2l6ZVwiOiBcImZvbnRTaXplXCIsXG4gICAgICAgIGZvbnRzaXplYWRqdXN0OiBcImZvbnRTaXplQWRqdXN0XCIsXG4gICAgICAgIFwiZm9udC1zaXplLWFkanVzdFwiOiBcImZvbnRTaXplQWRqdXN0XCIsXG4gICAgICAgIGZvbnRzdHJldGNoOiBcImZvbnRTdHJldGNoXCIsXG4gICAgICAgIFwiZm9udC1zdHJldGNoXCI6IFwiZm9udFN0cmV0Y2hcIixcbiAgICAgICAgZm9udHN0eWxlOiBcImZvbnRTdHlsZVwiLFxuICAgICAgICBcImZvbnQtc3R5bGVcIjogXCJmb250U3R5bGVcIixcbiAgICAgICAgZm9udHZhcmlhbnQ6IFwiZm9udFZhcmlhbnRcIixcbiAgICAgICAgXCJmb250LXZhcmlhbnRcIjogXCJmb250VmFyaWFudFwiLFxuICAgICAgICBmb250d2VpZ2h0OiBcImZvbnRXZWlnaHRcIixcbiAgICAgICAgXCJmb250LXdlaWdodFwiOiBcImZvbnRXZWlnaHRcIixcbiAgICAgICAgZm9ybWF0OiBcImZvcm1hdFwiLFxuICAgICAgICBmcm9tOiBcImZyb21cIixcbiAgICAgICAgZng6IFwiZnhcIixcbiAgICAgICAgZnk6IFwiZnlcIixcbiAgICAgICAgZzE6IFwiZzFcIixcbiAgICAgICAgZzI6IFwiZzJcIixcbiAgICAgICAgZ2x5cGhuYW1lOiBcImdseXBoTmFtZVwiLFxuICAgICAgICBcImdseXBoLW5hbWVcIjogXCJnbHlwaE5hbWVcIixcbiAgICAgICAgZ2x5cGhvcmllbnRhdGlvbmhvcml6b250YWw6IFwiZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWxcIixcbiAgICAgICAgXCJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsXCI6IFwiZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWxcIixcbiAgICAgICAgZ2x5cGhvcmllbnRhdGlvbnZlcnRpY2FsOiBcImdseXBoT3JpZW50YXRpb25WZXJ0aWNhbFwiLFxuICAgICAgICBcImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsXCI6IFwiZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsXCIsXG4gICAgICAgIGdseXBocmVmOiBcImdseXBoUmVmXCIsXG4gICAgICAgIGdyYWRpZW50dHJhbnNmb3JtOiBcImdyYWRpZW50VHJhbnNmb3JtXCIsXG4gICAgICAgIGdyYWRpZW50dW5pdHM6IFwiZ3JhZGllbnRVbml0c1wiLFxuICAgICAgICBoYW5naW5nOiBcImhhbmdpbmdcIixcbiAgICAgICAgaG9yaXphZHZ4OiBcImhvcml6QWR2WFwiLFxuICAgICAgICBcImhvcml6LWFkdi14XCI6IFwiaG9yaXpBZHZYXCIsXG4gICAgICAgIGhvcml6b3JpZ2lueDogXCJob3Jpek9yaWdpblhcIixcbiAgICAgICAgXCJob3Jpei1vcmlnaW4teFwiOiBcImhvcml6T3JpZ2luWFwiLFxuICAgICAgICBpZGVvZ3JhcGhpYzogXCJpZGVvZ3JhcGhpY1wiLFxuICAgICAgICBpbWFnZXJlbmRlcmluZzogXCJpbWFnZVJlbmRlcmluZ1wiLFxuICAgICAgICBcImltYWdlLXJlbmRlcmluZ1wiOiBcImltYWdlUmVuZGVyaW5nXCIsXG4gICAgICAgIGluMjogXCJpbjJcIixcbiAgICAgICAgaW46IFwiaW5cIixcbiAgICAgICAgaW5saXN0OiBcImlubGlzdFwiLFxuICAgICAgICBpbnRlcmNlcHQ6IFwiaW50ZXJjZXB0XCIsXG4gICAgICAgIGsxOiBcImsxXCIsXG4gICAgICAgIGsyOiBcImsyXCIsXG4gICAgICAgIGszOiBcImszXCIsXG4gICAgICAgIGs0OiBcIms0XCIsXG4gICAgICAgIGs6IFwia1wiLFxuICAgICAgICBrZXJuZWxtYXRyaXg6IFwia2VybmVsTWF0cml4XCIsXG4gICAgICAgIGtlcm5lbHVuaXRsZW5ndGg6IFwia2VybmVsVW5pdExlbmd0aFwiLFxuICAgICAgICBrZXJuaW5nOiBcImtlcm5pbmdcIixcbiAgICAgICAga2V5cG9pbnRzOiBcImtleVBvaW50c1wiLFxuICAgICAgICBrZXlzcGxpbmVzOiBcImtleVNwbGluZXNcIixcbiAgICAgICAga2V5dGltZXM6IFwia2V5VGltZXNcIixcbiAgICAgICAgbGVuZ3RoYWRqdXN0OiBcImxlbmd0aEFkanVzdFwiLFxuICAgICAgICBsZXR0ZXJzcGFjaW5nOiBcImxldHRlclNwYWNpbmdcIixcbiAgICAgICAgXCJsZXR0ZXItc3BhY2luZ1wiOiBcImxldHRlclNwYWNpbmdcIixcbiAgICAgICAgbGlnaHRpbmdjb2xvcjogXCJsaWdodGluZ0NvbG9yXCIsXG4gICAgICAgIFwibGlnaHRpbmctY29sb3JcIjogXCJsaWdodGluZ0NvbG9yXCIsXG4gICAgICAgIGxpbWl0aW5nY29uZWFuZ2xlOiBcImxpbWl0aW5nQ29uZUFuZ2xlXCIsXG4gICAgICAgIGxvY2FsOiBcImxvY2FsXCIsXG4gICAgICAgIG1hcmtlcmVuZDogXCJtYXJrZXJFbmRcIixcbiAgICAgICAgXCJtYXJrZXItZW5kXCI6IFwibWFya2VyRW5kXCIsXG4gICAgICAgIG1hcmtlcmhlaWdodDogXCJtYXJrZXJIZWlnaHRcIixcbiAgICAgICAgbWFya2VybWlkOiBcIm1hcmtlck1pZFwiLFxuICAgICAgICBcIm1hcmtlci1taWRcIjogXCJtYXJrZXJNaWRcIixcbiAgICAgICAgbWFya2Vyc3RhcnQ6IFwibWFya2VyU3RhcnRcIixcbiAgICAgICAgXCJtYXJrZXItc3RhcnRcIjogXCJtYXJrZXJTdGFydFwiLFxuICAgICAgICBtYXJrZXJ1bml0czogXCJtYXJrZXJVbml0c1wiLFxuICAgICAgICBtYXJrZXJ3aWR0aDogXCJtYXJrZXJXaWR0aFwiLFxuICAgICAgICBtYXNrOiBcIm1hc2tcIixcbiAgICAgICAgbWFza2NvbnRlbnR1bml0czogXCJtYXNrQ29udGVudFVuaXRzXCIsXG4gICAgICAgIG1hc2t1bml0czogXCJtYXNrVW5pdHNcIixcbiAgICAgICAgbWF0aGVtYXRpY2FsOiBcIm1hdGhlbWF0aWNhbFwiLFxuICAgICAgICBtb2RlOiBcIm1vZGVcIixcbiAgICAgICAgbnVtb2N0YXZlczogXCJudW1PY3RhdmVzXCIsXG4gICAgICAgIG9mZnNldDogXCJvZmZzZXRcIixcbiAgICAgICAgb3BhY2l0eTogXCJvcGFjaXR5XCIsXG4gICAgICAgIG9wZXJhdG9yOiBcIm9wZXJhdG9yXCIsXG4gICAgICAgIG9yZGVyOiBcIm9yZGVyXCIsXG4gICAgICAgIG9yaWVudDogXCJvcmllbnRcIixcbiAgICAgICAgb3JpZW50YXRpb246IFwib3JpZW50YXRpb25cIixcbiAgICAgICAgb3JpZ2luOiBcIm9yaWdpblwiLFxuICAgICAgICBvdmVyZmxvdzogXCJvdmVyZmxvd1wiLFxuICAgICAgICBvdmVybGluZXBvc2l0aW9uOiBcIm92ZXJsaW5lUG9zaXRpb25cIixcbiAgICAgICAgXCJvdmVybGluZS1wb3NpdGlvblwiOiBcIm92ZXJsaW5lUG9zaXRpb25cIixcbiAgICAgICAgb3ZlcmxpbmV0aGlja25lc3M6IFwib3ZlcmxpbmVUaGlja25lc3NcIixcbiAgICAgICAgXCJvdmVybGluZS10aGlja25lc3NcIjogXCJvdmVybGluZVRoaWNrbmVzc1wiLFxuICAgICAgICBwYWludG9yZGVyOiBcInBhaW50T3JkZXJcIixcbiAgICAgICAgXCJwYWludC1vcmRlclwiOiBcInBhaW50T3JkZXJcIixcbiAgICAgICAgcGFub3NlMTogXCJwYW5vc2UxXCIsXG4gICAgICAgIFwicGFub3NlLTFcIjogXCJwYW5vc2UxXCIsXG4gICAgICAgIHBhdGhsZW5ndGg6IFwicGF0aExlbmd0aFwiLFxuICAgICAgICBwYXR0ZXJuY29udGVudHVuaXRzOiBcInBhdHRlcm5Db250ZW50VW5pdHNcIixcbiAgICAgICAgcGF0dGVybnRyYW5zZm9ybTogXCJwYXR0ZXJuVHJhbnNmb3JtXCIsXG4gICAgICAgIHBhdHRlcm51bml0czogXCJwYXR0ZXJuVW5pdHNcIixcbiAgICAgICAgcG9pbnRlcmV2ZW50czogXCJwb2ludGVyRXZlbnRzXCIsXG4gICAgICAgIFwicG9pbnRlci1ldmVudHNcIjogXCJwb2ludGVyRXZlbnRzXCIsXG4gICAgICAgIHBvaW50czogXCJwb2ludHNcIixcbiAgICAgICAgcG9pbnRzYXR4OiBcInBvaW50c0F0WFwiLFxuICAgICAgICBwb2ludHNhdHk6IFwicG9pbnRzQXRZXCIsXG4gICAgICAgIHBvaW50c2F0ejogXCJwb2ludHNBdFpcIixcbiAgICAgICAgcG9wb3ZlcjogXCJwb3BvdmVyXCIsXG4gICAgICAgIHBvcG92ZXJ0YXJnZXQ6IFwicG9wb3ZlclRhcmdldFwiLFxuICAgICAgICBwb3BvdmVydGFyZ2V0YWN0aW9uOiBcInBvcG92ZXJUYXJnZXRBY3Rpb25cIixcbiAgICAgICAgcHJlZml4OiBcInByZWZpeFwiLFxuICAgICAgICBwcmVzZXJ2ZWFscGhhOiBcInByZXNlcnZlQWxwaGFcIixcbiAgICAgICAgcHJlc2VydmVhc3BlY3RyYXRpbzogXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsXG4gICAgICAgIHByaW1pdGl2ZXVuaXRzOiBcInByaW1pdGl2ZVVuaXRzXCIsXG4gICAgICAgIHByb3BlcnR5OiBcInByb3BlcnR5XCIsXG4gICAgICAgIHI6IFwiclwiLFxuICAgICAgICByYWRpdXM6IFwicmFkaXVzXCIsXG4gICAgICAgIHJlZng6IFwicmVmWFwiLFxuICAgICAgICByZWZ5OiBcInJlZllcIixcbiAgICAgICAgcmVuZGVyaW5naW50ZW50OiBcInJlbmRlcmluZ0ludGVudFwiLFxuICAgICAgICBcInJlbmRlcmluZy1pbnRlbnRcIjogXCJyZW5kZXJpbmdJbnRlbnRcIixcbiAgICAgICAgcmVwZWF0Y291bnQ6IFwicmVwZWF0Q291bnRcIixcbiAgICAgICAgcmVwZWF0ZHVyOiBcInJlcGVhdER1clwiLFxuICAgICAgICByZXF1aXJlZGV4dGVuc2lvbnM6IFwicmVxdWlyZWRFeHRlbnNpb25zXCIsXG4gICAgICAgIHJlcXVpcmVkZmVhdHVyZXM6IFwicmVxdWlyZWRGZWF0dXJlc1wiLFxuICAgICAgICByZXNvdXJjZTogXCJyZXNvdXJjZVwiLFxuICAgICAgICByZXN0YXJ0OiBcInJlc3RhcnRcIixcbiAgICAgICAgcmVzdWx0OiBcInJlc3VsdFwiLFxuICAgICAgICByZXN1bHRzOiBcInJlc3VsdHNcIixcbiAgICAgICAgcm90YXRlOiBcInJvdGF0ZVwiLFxuICAgICAgICByeDogXCJyeFwiLFxuICAgICAgICByeTogXCJyeVwiLFxuICAgICAgICBzY2FsZTogXCJzY2FsZVwiLFxuICAgICAgICBzZWN1cml0eTogXCJzZWN1cml0eVwiLFxuICAgICAgICBzZWVkOiBcInNlZWRcIixcbiAgICAgICAgc2hhcGVyZW5kZXJpbmc6IFwic2hhcGVSZW5kZXJpbmdcIixcbiAgICAgICAgXCJzaGFwZS1yZW5kZXJpbmdcIjogXCJzaGFwZVJlbmRlcmluZ1wiLFxuICAgICAgICBzbG9wZTogXCJzbG9wZVwiLFxuICAgICAgICBzcGFjaW5nOiBcInNwYWNpbmdcIixcbiAgICAgICAgc3BlY3VsYXJjb25zdGFudDogXCJzcGVjdWxhckNvbnN0YW50XCIsXG4gICAgICAgIHNwZWN1bGFyZXhwb25lbnQ6IFwic3BlY3VsYXJFeHBvbmVudFwiLFxuICAgICAgICBzcGVlZDogXCJzcGVlZFwiLFxuICAgICAgICBzcHJlYWRtZXRob2Q6IFwic3ByZWFkTWV0aG9kXCIsXG4gICAgICAgIHN0YXJ0b2Zmc2V0OiBcInN0YXJ0T2Zmc2V0XCIsXG4gICAgICAgIHN0ZGRldmlhdGlvbjogXCJzdGREZXZpYXRpb25cIixcbiAgICAgICAgc3RlbWg6IFwic3RlbWhcIixcbiAgICAgICAgc3RlbXY6IFwic3RlbXZcIixcbiAgICAgICAgc3RpdGNodGlsZXM6IFwic3RpdGNoVGlsZXNcIixcbiAgICAgICAgc3RvcGNvbG9yOiBcInN0b3BDb2xvclwiLFxuICAgICAgICBcInN0b3AtY29sb3JcIjogXCJzdG9wQ29sb3JcIixcbiAgICAgICAgc3RvcG9wYWNpdHk6IFwic3RvcE9wYWNpdHlcIixcbiAgICAgICAgXCJzdG9wLW9wYWNpdHlcIjogXCJzdG9wT3BhY2l0eVwiLFxuICAgICAgICBzdHJpa2V0aHJvdWdocG9zaXRpb246IFwic3RyaWtldGhyb3VnaFBvc2l0aW9uXCIsXG4gICAgICAgIFwic3RyaWtldGhyb3VnaC1wb3NpdGlvblwiOiBcInN0cmlrZXRocm91Z2hQb3NpdGlvblwiLFxuICAgICAgICBzdHJpa2V0aHJvdWdodGhpY2tuZXNzOiBcInN0cmlrZXRocm91Z2hUaGlja25lc3NcIixcbiAgICAgICAgXCJzdHJpa2V0aHJvdWdoLXRoaWNrbmVzc1wiOiBcInN0cmlrZXRocm91Z2hUaGlja25lc3NcIixcbiAgICAgICAgc3RyaW5nOiBcInN0cmluZ1wiLFxuICAgICAgICBzdHJva2U6IFwic3Ryb2tlXCIsXG4gICAgICAgIHN0cm9rZWRhc2hhcnJheTogXCJzdHJva2VEYXNoYXJyYXlcIixcbiAgICAgICAgXCJzdHJva2UtZGFzaGFycmF5XCI6IFwic3Ryb2tlRGFzaGFycmF5XCIsXG4gICAgICAgIHN0cm9rZWRhc2hvZmZzZXQ6IFwic3Ryb2tlRGFzaG9mZnNldFwiLFxuICAgICAgICBcInN0cm9rZS1kYXNob2Zmc2V0XCI6IFwic3Ryb2tlRGFzaG9mZnNldFwiLFxuICAgICAgICBzdHJva2VsaW5lY2FwOiBcInN0cm9rZUxpbmVjYXBcIixcbiAgICAgICAgXCJzdHJva2UtbGluZWNhcFwiOiBcInN0cm9rZUxpbmVjYXBcIixcbiAgICAgICAgc3Ryb2tlbGluZWpvaW46IFwic3Ryb2tlTGluZWpvaW5cIixcbiAgICAgICAgXCJzdHJva2UtbGluZWpvaW5cIjogXCJzdHJva2VMaW5lam9pblwiLFxuICAgICAgICBzdHJva2VtaXRlcmxpbWl0OiBcInN0cm9rZU1pdGVybGltaXRcIixcbiAgICAgICAgXCJzdHJva2UtbWl0ZXJsaW1pdFwiOiBcInN0cm9rZU1pdGVybGltaXRcIixcbiAgICAgICAgc3Ryb2tld2lkdGg6IFwic3Ryb2tlV2lkdGhcIixcbiAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogXCJzdHJva2VXaWR0aFwiLFxuICAgICAgICBzdHJva2VvcGFjaXR5OiBcInN0cm9rZU9wYWNpdHlcIixcbiAgICAgICAgXCJzdHJva2Utb3BhY2l0eVwiOiBcInN0cm9rZU9wYWNpdHlcIixcbiAgICAgICAgc3VwcHJlc3Njb250ZW50ZWRpdGFibGV3YXJuaW5nOiBcInN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ1wiLFxuICAgICAgICBzdXBwcmVzc2h5ZHJhdGlvbndhcm5pbmc6IFwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXCIsXG4gICAgICAgIHN1cmZhY2VzY2FsZTogXCJzdXJmYWNlU2NhbGVcIixcbiAgICAgICAgc3lzdGVtbGFuZ3VhZ2U6IFwic3lzdGVtTGFuZ3VhZ2VcIixcbiAgICAgICAgdGFibGV2YWx1ZXM6IFwidGFibGVWYWx1ZXNcIixcbiAgICAgICAgdGFyZ2V0eDogXCJ0YXJnZXRYXCIsXG4gICAgICAgIHRhcmdldHk6IFwidGFyZ2V0WVwiLFxuICAgICAgICB0ZXh0YW5jaG9yOiBcInRleHRBbmNob3JcIixcbiAgICAgICAgXCJ0ZXh0LWFuY2hvclwiOiBcInRleHRBbmNob3JcIixcbiAgICAgICAgdGV4dGRlY29yYXRpb246IFwidGV4dERlY29yYXRpb25cIixcbiAgICAgICAgXCJ0ZXh0LWRlY29yYXRpb25cIjogXCJ0ZXh0RGVjb3JhdGlvblwiLFxuICAgICAgICB0ZXh0bGVuZ3RoOiBcInRleHRMZW5ndGhcIixcbiAgICAgICAgdGV4dHJlbmRlcmluZzogXCJ0ZXh0UmVuZGVyaW5nXCIsXG4gICAgICAgIFwidGV4dC1yZW5kZXJpbmdcIjogXCJ0ZXh0UmVuZGVyaW5nXCIsXG4gICAgICAgIHRvOiBcInRvXCIsXG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgdHJhbnNmb3Jtb3JpZ2luOiBcInRyYW5zZm9ybU9yaWdpblwiLFxuICAgICAgICBcInRyYW5zZm9ybS1vcmlnaW5cIjogXCJ0cmFuc2Zvcm1PcmlnaW5cIixcbiAgICAgICAgdHlwZW9mOiBcInR5cGVvZlwiLFxuICAgICAgICB1MTogXCJ1MVwiLFxuICAgICAgICB1MjogXCJ1MlwiLFxuICAgICAgICB1bmRlcmxpbmVwb3NpdGlvbjogXCJ1bmRlcmxpbmVQb3NpdGlvblwiLFxuICAgICAgICBcInVuZGVybGluZS1wb3NpdGlvblwiOiBcInVuZGVybGluZVBvc2l0aW9uXCIsXG4gICAgICAgIHVuZGVybGluZXRoaWNrbmVzczogXCJ1bmRlcmxpbmVUaGlja25lc3NcIixcbiAgICAgICAgXCJ1bmRlcmxpbmUtdGhpY2tuZXNzXCI6IFwidW5kZXJsaW5lVGhpY2tuZXNzXCIsXG4gICAgICAgIHVuaWNvZGU6IFwidW5pY29kZVwiLFxuICAgICAgICB1bmljb2RlYmlkaTogXCJ1bmljb2RlQmlkaVwiLFxuICAgICAgICBcInVuaWNvZGUtYmlkaVwiOiBcInVuaWNvZGVCaWRpXCIsXG4gICAgICAgIHVuaWNvZGVyYW5nZTogXCJ1bmljb2RlUmFuZ2VcIixcbiAgICAgICAgXCJ1bmljb2RlLXJhbmdlXCI6IFwidW5pY29kZVJhbmdlXCIsXG4gICAgICAgIHVuaXRzcGVyZW06IFwidW5pdHNQZXJFbVwiLFxuICAgICAgICBcInVuaXRzLXBlci1lbVwiOiBcInVuaXRzUGVyRW1cIixcbiAgICAgICAgdW5zZWxlY3RhYmxlOiBcInVuc2VsZWN0YWJsZVwiLFxuICAgICAgICB2YWxwaGFiZXRpYzogXCJ2QWxwaGFiZXRpY1wiLFxuICAgICAgICBcInYtYWxwaGFiZXRpY1wiOiBcInZBbHBoYWJldGljXCIsXG4gICAgICAgIHZhbHVlczogXCJ2YWx1ZXNcIixcbiAgICAgICAgdmVjdG9yZWZmZWN0OiBcInZlY3RvckVmZmVjdFwiLFxuICAgICAgICBcInZlY3Rvci1lZmZlY3RcIjogXCJ2ZWN0b3JFZmZlY3RcIixcbiAgICAgICAgdmVyc2lvbjogXCJ2ZXJzaW9uXCIsXG4gICAgICAgIHZlcnRhZHZ5OiBcInZlcnRBZHZZXCIsXG4gICAgICAgIFwidmVydC1hZHYteVwiOiBcInZlcnRBZHZZXCIsXG4gICAgICAgIHZlcnRvcmlnaW54OiBcInZlcnRPcmlnaW5YXCIsXG4gICAgICAgIFwidmVydC1vcmlnaW4teFwiOiBcInZlcnRPcmlnaW5YXCIsXG4gICAgICAgIHZlcnRvcmlnaW55OiBcInZlcnRPcmlnaW5ZXCIsXG4gICAgICAgIFwidmVydC1vcmlnaW4teVwiOiBcInZlcnRPcmlnaW5ZXCIsXG4gICAgICAgIHZoYW5naW5nOiBcInZIYW5naW5nXCIsXG4gICAgICAgIFwidi1oYW5naW5nXCI6IFwidkhhbmdpbmdcIixcbiAgICAgICAgdmlkZW9ncmFwaGljOiBcInZJZGVvZ3JhcGhpY1wiLFxuICAgICAgICBcInYtaWRlb2dyYXBoaWNcIjogXCJ2SWRlb2dyYXBoaWNcIixcbiAgICAgICAgdmlld2JveDogXCJ2aWV3Qm94XCIsXG4gICAgICAgIHZpZXd0YXJnZXQ6IFwidmlld1RhcmdldFwiLFxuICAgICAgICB2aXNpYmlsaXR5OiBcInZpc2liaWxpdHlcIixcbiAgICAgICAgdm1hdGhlbWF0aWNhbDogXCJ2TWF0aGVtYXRpY2FsXCIsXG4gICAgICAgIFwidi1tYXRoZW1hdGljYWxcIjogXCJ2TWF0aGVtYXRpY2FsXCIsXG4gICAgICAgIHZvY2FiOiBcInZvY2FiXCIsXG4gICAgICAgIHdpZHRoczogXCJ3aWR0aHNcIixcbiAgICAgICAgd29yZHNwYWNpbmc6IFwid29yZFNwYWNpbmdcIixcbiAgICAgICAgXCJ3b3JkLXNwYWNpbmdcIjogXCJ3b3JkU3BhY2luZ1wiLFxuICAgICAgICB3cml0aW5nbW9kZTogXCJ3cml0aW5nTW9kZVwiLFxuICAgICAgICBcIndyaXRpbmctbW9kZVwiOiBcIndyaXRpbmdNb2RlXCIsXG4gICAgICAgIHgxOiBcIngxXCIsXG4gICAgICAgIHgyOiBcIngyXCIsXG4gICAgICAgIHg6IFwieFwiLFxuICAgICAgICB4Y2hhbm5lbHNlbGVjdG9yOiBcInhDaGFubmVsU2VsZWN0b3JcIixcbiAgICAgICAgeGhlaWdodDogXCJ4SGVpZ2h0XCIsXG4gICAgICAgIFwieC1oZWlnaHRcIjogXCJ4SGVpZ2h0XCIsXG4gICAgICAgIHhsaW5rYWN0dWF0ZTogXCJ4bGlua0FjdHVhdGVcIixcbiAgICAgICAgXCJ4bGluazphY3R1YXRlXCI6IFwieGxpbmtBY3R1YXRlXCIsXG4gICAgICAgIHhsaW5rYXJjcm9sZTogXCJ4bGlua0FyY3JvbGVcIixcbiAgICAgICAgXCJ4bGluazphcmNyb2xlXCI6IFwieGxpbmtBcmNyb2xlXCIsXG4gICAgICAgIHhsaW5raHJlZjogXCJ4bGlua0hyZWZcIixcbiAgICAgICAgXCJ4bGluazpocmVmXCI6IFwieGxpbmtIcmVmXCIsXG4gICAgICAgIHhsaW5rcm9sZTogXCJ4bGlua1JvbGVcIixcbiAgICAgICAgXCJ4bGluazpyb2xlXCI6IFwieGxpbmtSb2xlXCIsXG4gICAgICAgIHhsaW5rc2hvdzogXCJ4bGlua1Nob3dcIixcbiAgICAgICAgXCJ4bGluazpzaG93XCI6IFwieGxpbmtTaG93XCIsXG4gICAgICAgIHhsaW5rdGl0bGU6IFwieGxpbmtUaXRsZVwiLFxuICAgICAgICBcInhsaW5rOnRpdGxlXCI6IFwieGxpbmtUaXRsZVwiLFxuICAgICAgICB4bGlua3R5cGU6IFwieGxpbmtUeXBlXCIsXG4gICAgICAgIFwieGxpbms6dHlwZVwiOiBcInhsaW5rVHlwZVwiLFxuICAgICAgICB4bWxiYXNlOiBcInhtbEJhc2VcIixcbiAgICAgICAgXCJ4bWw6YmFzZVwiOiBcInhtbEJhc2VcIixcbiAgICAgICAgeG1sbGFuZzogXCJ4bWxMYW5nXCIsXG4gICAgICAgIFwieG1sOmxhbmdcIjogXCJ4bWxMYW5nXCIsXG4gICAgICAgIHhtbG5zOiBcInhtbG5zXCIsXG4gICAgICAgIFwieG1sOnNwYWNlXCI6IFwieG1sU3BhY2VcIixcbiAgICAgICAgeG1sbnN4bGluazogXCJ4bWxuc1hsaW5rXCIsXG4gICAgICAgIFwieG1sbnM6eGxpbmtcIjogXCJ4bWxuc1hsaW5rXCIsXG4gICAgICAgIHhtbHNwYWNlOiBcInhtbFNwYWNlXCIsXG4gICAgICAgIHkxOiBcInkxXCIsXG4gICAgICAgIHkyOiBcInkyXCIsXG4gICAgICAgIHk6IFwieVwiLFxuICAgICAgICB5Y2hhbm5lbHNlbGVjdG9yOiBcInlDaGFubmVsU2VsZWN0b3JcIixcbiAgICAgICAgejogXCJ6XCIsXG4gICAgICAgIHpvb21hbmRwYW46IFwiem9vbUFuZFBhblwiXG4gICAgICB9LFxuICAgICAgYXJpYVByb3BlcnRpZXMgPSB7XG4gICAgICAgIFwiYXJpYS1jdXJyZW50XCI6IDAsXG4gICAgICAgIFwiYXJpYS1kZXNjcmlwdGlvblwiOiAwLFxuICAgICAgICBcImFyaWEtZGV0YWlsc1wiOiAwLFxuICAgICAgICBcImFyaWEtZGlzYWJsZWRcIjogMCxcbiAgICAgICAgXCJhcmlhLWhpZGRlblwiOiAwLFxuICAgICAgICBcImFyaWEtaW52YWxpZFwiOiAwLFxuICAgICAgICBcImFyaWEta2V5c2hvcnRjdXRzXCI6IDAsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiAwLFxuICAgICAgICBcImFyaWEtcm9sZWRlc2NyaXB0aW9uXCI6IDAsXG4gICAgICAgIFwiYXJpYS1hdXRvY29tcGxldGVcIjogMCxcbiAgICAgICAgXCJhcmlhLWNoZWNrZWRcIjogMCxcbiAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IDAsXG4gICAgICAgIFwiYXJpYS1oYXNwb3B1cFwiOiAwLFxuICAgICAgICBcImFyaWEtbGV2ZWxcIjogMCxcbiAgICAgICAgXCJhcmlhLW1vZGFsXCI6IDAsXG4gICAgICAgIFwiYXJpYS1tdWx0aWxpbmVcIjogMCxcbiAgICAgICAgXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiOiAwLFxuICAgICAgICBcImFyaWEtb3JpZW50YXRpb25cIjogMCxcbiAgICAgICAgXCJhcmlhLXBsYWNlaG9sZGVyXCI6IDAsXG4gICAgICAgIFwiYXJpYS1wcmVzc2VkXCI6IDAsXG4gICAgICAgIFwiYXJpYS1yZWFkb25seVwiOiAwLFxuICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogMCxcbiAgICAgICAgXCJhcmlhLXNlbGVjdGVkXCI6IDAsXG4gICAgICAgIFwiYXJpYS1zb3J0XCI6IDAsXG4gICAgICAgIFwiYXJpYS12YWx1ZW1heFwiOiAwLFxuICAgICAgICBcImFyaWEtdmFsdWVtaW5cIjogMCxcbiAgICAgICAgXCJhcmlhLXZhbHVlbm93XCI6IDAsXG4gICAgICAgIFwiYXJpYS12YWx1ZXRleHRcIjogMCxcbiAgICAgICAgXCJhcmlhLWF0b21pY1wiOiAwLFxuICAgICAgICBcImFyaWEtYnVzeVwiOiAwLFxuICAgICAgICBcImFyaWEtbGl2ZVwiOiAwLFxuICAgICAgICBcImFyaWEtcmVsZXZhbnRcIjogMCxcbiAgICAgICAgXCJhcmlhLWRyb3BlZmZlY3RcIjogMCxcbiAgICAgICAgXCJhcmlhLWdyYWJiZWRcIjogMCxcbiAgICAgICAgXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjogMCxcbiAgICAgICAgXCJhcmlhLWNvbGNvdW50XCI6IDAsXG4gICAgICAgIFwiYXJpYS1jb2xpbmRleFwiOiAwLFxuICAgICAgICBcImFyaWEtY29sc3BhblwiOiAwLFxuICAgICAgICBcImFyaWEtY29udHJvbHNcIjogMCxcbiAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IDAsXG4gICAgICAgIFwiYXJpYS1lcnJvcm1lc3NhZ2VcIjogMCxcbiAgICAgICAgXCJhcmlhLWZsb3d0b1wiOiAwLFxuICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiAwLFxuICAgICAgICBcImFyaWEtb3duc1wiOiAwLFxuICAgICAgICBcImFyaWEtcG9zaW5zZXRcIjogMCxcbiAgICAgICAgXCJhcmlhLXJvd2NvdW50XCI6IDAsXG4gICAgICAgIFwiYXJpYS1yb3dpbmRleFwiOiAwLFxuICAgICAgICBcImFyaWEtcm93c3BhblwiOiAwLFxuICAgICAgICBcImFyaWEtc2V0c2l6ZVwiOiAwXG4gICAgICB9LFxuICAgICAgd2FybmVkUHJvcGVydGllcyQxID0ge30sXG4gICAgICByQVJJQSQxID0gUmVnRXhwKFxuICAgICAgICBcIl4oYXJpYSktWzpBLVpfYS16XFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkRcXFxcLS4wLTlcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MF0qJFwiXG4gICAgICApLFxuICAgICAgckFSSUFDYW1lbCQxID0gUmVnRXhwKFxuICAgICAgICBcIl4oYXJpYSlbQS1aXVs6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXFxcXC0uMC05XFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBdKiRcIlxuICAgICAgKSxcbiAgICAgIGRpZFdhcm5WYWx1ZU51bGwgPSAhMSxcbiAgICAgIHdhcm5lZFByb3BlcnRpZXMgPSB7fSxcbiAgICAgIEVWRU5UX05BTUVfUkVHRVggPSAvXm9uLi8sXG4gICAgICBJTlZBTElEX0VWRU5UX05BTUVfUkVHRVggPSAvXm9uW15BLVpdLyxcbiAgICAgIHJBUklBID0gUmVnRXhwKFxuICAgICAgICBcIl4oYXJpYSktWzpBLVpfYS16XFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkRcXFxcLS4wLTlcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MF0qJFwiXG4gICAgICApLFxuICAgICAgckFSSUFDYW1lbCA9IFJlZ0V4cChcbiAgICAgICAgXCJeKGFyaWEpW0EtWl1bOkEtWl9hLXpcXFxcdTAwQzAtXFxcXHUwMEQ2XFxcXHUwMEQ4LVxcXFx1MDBGNlxcXFx1MDBGOC1cXFxcdTAyRkZcXFxcdTAzNzAtXFxcXHUwMzdEXFxcXHUwMzdGLVxcXFx1MUZGRlxcXFx1MjAwQy1cXFxcdTIwMERcXFxcdTIwNzAtXFxcXHUyMThGXFxcXHUyQzAwLVxcXFx1MkZFRlxcXFx1MzAwMS1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZGRFxcXFwtLjAtOVxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwXSokXCJcbiAgICAgICksXG4gICAgICBpc0phdmFTY3JpcHRQcm90b2NvbCA9XG4gICAgICAgIC9eW1xcdTAwMDAtXFx1MDAxRiBdKmpbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qdltcXHJcXG5cXHRdKmFbXFxyXFxuXFx0XSpzW1xcclxcblxcdF0qY1tcXHJcXG5cXHRdKnJbXFxyXFxuXFx0XSppW1xcclxcblxcdF0qcFtcXHJcXG5cXHRdKnRbXFxyXFxuXFx0XSo6L2ksXG4gICAgICBjdXJyZW50UmVwbGF5aW5nRXZlbnQgPSBudWxsLFxuICAgICAgcmVzdG9yZVRhcmdldCA9IG51bGwsXG4gICAgICByZXN0b3JlUXVldWUgPSBudWxsLFxuICAgICAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSAhMSxcbiAgICAgIGNhblVzZURPTSA9ICEoXG4gICAgICAgIFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiB3aW5kb3cgfHxcbiAgICAgICAgXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIHdpbmRvdy5kb2N1bWVudCB8fFxuICAgICAgICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnRcbiAgICAgICksXG4gICAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9ICExO1xuICAgIGlmIChjYW5Vc2VET00pXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgb3B0aW9ucyRqc2NvbXAkMCA9IHt9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3B0aW9ucyRqc2NvbXAkMCwgXCJwYXNzaXZlXCIsIHtcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gITA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsIG9wdGlvbnMkanNjb21wJDAsIG9wdGlvbnMkanNjb21wJDApO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRlc3RcIiwgb3B0aW9ucyRqc2NvbXAkMCwgb3B0aW9ucyRqc2NvbXAkMCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gITE7XG4gICAgICB9XG4gICAgdmFyIHJvb3QgPSBudWxsLFxuICAgICAgc3RhcnRUZXh0ID0gbnVsbCxcbiAgICAgIGZhbGxiYWNrVGV4dCA9IG51bGwsXG4gICAgICBFdmVudEludGVyZmFjZSA9IHtcbiAgICAgICAgZXZlbnRQaGFzZTogMCxcbiAgICAgICAgYnViYmxlczogMCxcbiAgICAgICAgY2FuY2VsYWJsZTogMCxcbiAgICAgICAgdGltZVN0YW1wOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gZXZlbnQudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQ6IDAsXG4gICAgICAgIGlzVHJ1c3RlZDogMFxuICAgICAgfSxcbiAgICAgIFN5bnRoZXRpY0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgVUlFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHsgdmlldzogMCwgZGV0YWlsOiAwIH0pLFxuICAgICAgU3ludGhldGljVUlFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFVJRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgbGFzdE1vdmVtZW50WCxcbiAgICAgIGxhc3RNb3ZlbWVudFksXG4gICAgICBsYXN0TW91c2VFdmVudCxcbiAgICAgIE1vdXNlRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgICAgICAgc2NyZWVuWDogMCxcbiAgICAgICAgc2NyZWVuWTogMCxcbiAgICAgICAgY2xpZW50WDogMCxcbiAgICAgICAgY2xpZW50WTogMCxcbiAgICAgICAgcGFnZVg6IDAsXG4gICAgICAgIHBhZ2VZOiAwLFxuICAgICAgICBjdHJsS2V5OiAwLFxuICAgICAgICBzaGlmdEtleTogMCxcbiAgICAgICAgYWx0S2V5OiAwLFxuICAgICAgICBtZXRhS2V5OiAwLFxuICAgICAgICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gICAgICAgIGJ1dHRvbjogMCxcbiAgICAgICAgYnV0dG9uczogMCxcbiAgICAgICAgcmVsYXRlZFRhcmdldDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gZXZlbnQucmVsYXRlZFRhcmdldFxuICAgICAgICAgICAgPyBldmVudC5mcm9tRWxlbWVudCA9PT0gZXZlbnQuc3JjRWxlbWVudFxuICAgICAgICAgICAgICA/IGV2ZW50LnRvRWxlbWVudFxuICAgICAgICAgICAgICA6IGV2ZW50LmZyb21FbGVtZW50XG4gICAgICAgICAgICA6IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1vdmVtZW50WDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgaWYgKFwibW92ZW1lbnRYXCIgaW4gZXZlbnQpIHJldHVybiBldmVudC5tb3ZlbWVudFg7XG4gICAgICAgICAgZXZlbnQgIT09IGxhc3RNb3VzZUV2ZW50ICYmXG4gICAgICAgICAgICAobGFzdE1vdXNlRXZlbnQgJiYgXCJtb3VzZW1vdmVcIiA9PT0gZXZlbnQudHlwZVxuICAgICAgICAgICAgICA/ICgobGFzdE1vdmVtZW50WCA9IGV2ZW50LnNjcmVlblggLSBsYXN0TW91c2VFdmVudC5zY3JlZW5YKSxcbiAgICAgICAgICAgICAgICAobGFzdE1vdmVtZW50WSA9IGV2ZW50LnNjcmVlblkgLSBsYXN0TW91c2VFdmVudC5zY3JlZW5ZKSlcbiAgICAgICAgICAgICAgOiAobGFzdE1vdmVtZW50WSA9IGxhc3RNb3ZlbWVudFggPSAwKSxcbiAgICAgICAgICAgIChsYXN0TW91c2VFdmVudCA9IGV2ZW50KSk7XG4gICAgICAgICAgcmV0dXJuIGxhc3RNb3ZlbWVudFg7XG4gICAgICAgIH0sXG4gICAgICAgIG1vdmVtZW50WTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIFwibW92ZW1lbnRZXCIgaW4gZXZlbnQgPyBldmVudC5tb3ZlbWVudFkgOiBsYXN0TW92ZW1lbnRZO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIFN5bnRoZXRpY01vdXNlRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChNb3VzZUV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIERyYWdFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwgeyBkYXRhVHJhbnNmZXI6IDAgfSksXG4gICAgICBTeW50aGV0aWNEcmFnRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChEcmFnRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgRm9jdXNFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwgeyByZWxhdGVkVGFyZ2V0OiAwIH0pLFxuICAgICAgU3ludGhldGljRm9jdXNFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEZvY3VzRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gICAgICAgIGFuaW1hdGlvbk5hbWU6IDAsXG4gICAgICAgIGVsYXBzZWRUaW1lOiAwLFxuICAgICAgICBwc2V1ZG9FbGVtZW50OiAwXG4gICAgICB9KSxcbiAgICAgIFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gICAgICAgIGNsaXBib2FyZERhdGE6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIHJldHVybiBcImNsaXBib2FyZERhdGFcIiBpbiBldmVudFxuICAgICAgICAgICAgPyBldmVudC5jbGlwYm9hcmREYXRhXG4gICAgICAgICAgICA6IHdpbmRvdy5jbGlwYm9hcmREYXRhO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHsgZGF0YTogMCB9KSxcbiAgICAgIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChcbiAgICAgICAgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZVxuICAgICAgKSxcbiAgICAgIFN5bnRoZXRpY0lucHV0RXZlbnQgPSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LFxuICAgICAgbm9ybWFsaXplS2V5ID0ge1xuICAgICAgICBFc2M6IFwiRXNjYXBlXCIsXG4gICAgICAgIFNwYWNlYmFyOiBcIiBcIixcbiAgICAgICAgTGVmdDogXCJBcnJvd0xlZnRcIixcbiAgICAgICAgVXA6IFwiQXJyb3dVcFwiLFxuICAgICAgICBSaWdodDogXCJBcnJvd1JpZ2h0XCIsXG4gICAgICAgIERvd246IFwiQXJyb3dEb3duXCIsXG4gICAgICAgIERlbDogXCJEZWxldGVcIixcbiAgICAgICAgV2luOiBcIk9TXCIsXG4gICAgICAgIE1lbnU6IFwiQ29udGV4dE1lbnVcIixcbiAgICAgICAgQXBwczogXCJDb250ZXh0TWVudVwiLFxuICAgICAgICBTY3JvbGw6IFwiU2Nyb2xsTG9ja1wiLFxuICAgICAgICBNb3pQcmludGFibGVLZXk6IFwiVW5pZGVudGlmaWVkXCJcbiAgICAgIH0sXG4gICAgICB0cmFuc2xhdGVUb0tleSA9IHtcbiAgICAgICAgODogXCJCYWNrc3BhY2VcIixcbiAgICAgICAgOTogXCJUYWJcIixcbiAgICAgICAgMTI6IFwiQ2xlYXJcIixcbiAgICAgICAgMTM6IFwiRW50ZXJcIixcbiAgICAgICAgMTY6IFwiU2hpZnRcIixcbiAgICAgICAgMTc6IFwiQ29udHJvbFwiLFxuICAgICAgICAxODogXCJBbHRcIixcbiAgICAgICAgMTk6IFwiUGF1c2VcIixcbiAgICAgICAgMjA6IFwiQ2Fwc0xvY2tcIixcbiAgICAgICAgMjc6IFwiRXNjYXBlXCIsXG4gICAgICAgIDMyOiBcIiBcIixcbiAgICAgICAgMzM6IFwiUGFnZVVwXCIsXG4gICAgICAgIDM0OiBcIlBhZ2VEb3duXCIsXG4gICAgICAgIDM1OiBcIkVuZFwiLFxuICAgICAgICAzNjogXCJIb21lXCIsXG4gICAgICAgIDM3OiBcIkFycm93TGVmdFwiLFxuICAgICAgICAzODogXCJBcnJvd1VwXCIsXG4gICAgICAgIDM5OiBcIkFycm93UmlnaHRcIixcbiAgICAgICAgNDA6IFwiQXJyb3dEb3duXCIsXG4gICAgICAgIDQ1OiBcIkluc2VydFwiLFxuICAgICAgICA0NjogXCJEZWxldGVcIixcbiAgICAgICAgMTEyOiBcIkYxXCIsXG4gICAgICAgIDExMzogXCJGMlwiLFxuICAgICAgICAxMTQ6IFwiRjNcIixcbiAgICAgICAgMTE1OiBcIkY0XCIsXG4gICAgICAgIDExNjogXCJGNVwiLFxuICAgICAgICAxMTc6IFwiRjZcIixcbiAgICAgICAgMTE4OiBcIkY3XCIsXG4gICAgICAgIDExOTogXCJGOFwiLFxuICAgICAgICAxMjA6IFwiRjlcIixcbiAgICAgICAgMTIxOiBcIkYxMFwiLFxuICAgICAgICAxMjI6IFwiRjExXCIsXG4gICAgICAgIDEyMzogXCJGMTJcIixcbiAgICAgICAgMTQ0OiBcIk51bUxvY2tcIixcbiAgICAgICAgMTQ1OiBcIlNjcm9sbExvY2tcIixcbiAgICAgICAgMjI0OiBcIk1ldGFcIlxuICAgICAgfSxcbiAgICAgIG1vZGlmaWVyS2V5VG9Qcm9wID0ge1xuICAgICAgICBBbHQ6IFwiYWx0S2V5XCIsXG4gICAgICAgIENvbnRyb2w6IFwiY3RybEtleVwiLFxuICAgICAgICBNZXRhOiBcIm1ldGFLZXlcIixcbiAgICAgICAgU2hpZnQ6IFwic2hpZnRLZXlcIlxuICAgICAgfSxcbiAgICAgIEtleWJvYXJkRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgICAgICAga2V5OiBmdW5jdGlvbiAobmF0aXZlRXZlbnQpIHtcbiAgICAgICAgICBpZiAobmF0aXZlRXZlbnQua2V5KSB7XG4gICAgICAgICAgICB2YXIga2V5ID0gbm9ybWFsaXplS2V5W25hdGl2ZUV2ZW50LmtleV0gfHwgbmF0aXZlRXZlbnQua2V5O1xuICAgICAgICAgICAgaWYgKFwiVW5pZGVudGlmaWVkXCIgIT09IGtleSkgcmV0dXJuIGtleTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwia2V5cHJlc3NcIiA9PT0gbmF0aXZlRXZlbnQudHlwZVxuICAgICAgICAgICAgPyAoKG5hdGl2ZUV2ZW50ID0gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkpLFxuICAgICAgICAgICAgICAxMyA9PT0gbmF0aXZlRXZlbnQgPyBcIkVudGVyXCIgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKG5hdGl2ZUV2ZW50KSlcbiAgICAgICAgICAgIDogXCJrZXlkb3duXCIgPT09IG5hdGl2ZUV2ZW50LnR5cGUgfHwgXCJrZXl1cFwiID09PSBuYXRpdmVFdmVudC50eXBlXG4gICAgICAgICAgICAgID8gdHJhbnNsYXRlVG9LZXlbbmF0aXZlRXZlbnQua2V5Q29kZV0gfHwgXCJVbmlkZW50aWZpZWRcIlxuICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGNvZGU6IDAsXG4gICAgICAgIGxvY2F0aW9uOiAwLFxuICAgICAgICBjdHJsS2V5OiAwLFxuICAgICAgICBzaGlmdEtleTogMCxcbiAgICAgICAgYWx0S2V5OiAwLFxuICAgICAgICBtZXRhS2V5OiAwLFxuICAgICAgICByZXBlYXQ6IDAsXG4gICAgICAgIGxvY2FsZTogMCxcbiAgICAgICAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICAgICAgICBjaGFyQ29kZTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIFwia2V5cHJlc3NcIiA9PT0gZXZlbnQudHlwZSA/IGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpIDogMDtcbiAgICAgICAgfSxcbiAgICAgICAga2V5Q29kZTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIFwia2V5ZG93blwiID09PSBldmVudC50eXBlIHx8IFwia2V5dXBcIiA9PT0gZXZlbnQudHlwZVxuICAgICAgICAgICAgPyBldmVudC5rZXlDb2RlXG4gICAgICAgICAgICA6IDA7XG4gICAgICAgIH0sXG4gICAgICAgIHdoaWNoOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gXCJrZXlwcmVzc1wiID09PSBldmVudC50eXBlXG4gICAgICAgICAgICA/IGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpXG4gICAgICAgICAgICA6IFwia2V5ZG93blwiID09PSBldmVudC50eXBlIHx8IFwia2V5dXBcIiA9PT0gZXZlbnQudHlwZVxuICAgICAgICAgICAgICA/IGV2ZW50LmtleUNvZGVcbiAgICAgICAgICAgICAgOiAwO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIFN5bnRoZXRpY0tleWJvYXJkRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChLZXlib2FyZEV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIFBvaW50ZXJFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICAgICAgICBwb2ludGVySWQ6IDAsXG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIHByZXNzdXJlOiAwLFxuICAgICAgICB0YW5nZW50aWFsUHJlc3N1cmU6IDAsXG4gICAgICAgIHRpbHRYOiAwLFxuICAgICAgICB0aWx0WTogMCxcbiAgICAgICAgdHdpc3Q6IDAsXG4gICAgICAgIHBvaW50ZXJUeXBlOiAwLFxuICAgICAgICBpc1ByaW1hcnk6IDBcbiAgICAgIH0pLFxuICAgICAgU3ludGhldGljUG9pbnRlckV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoUG9pbnRlckV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIFRvdWNoRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgICAgICAgdG91Y2hlczogMCxcbiAgICAgICAgdGFyZ2V0VG91Y2hlczogMCxcbiAgICAgICAgY2hhbmdlZFRvdWNoZXM6IDAsXG4gICAgICAgIGFsdEtleTogMCxcbiAgICAgICAgbWV0YUtleTogMCxcbiAgICAgICAgY3RybEtleTogMCxcbiAgICAgICAgc2hpZnRLZXk6IDAsXG4gICAgICAgIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZVxuICAgICAgfSksXG4gICAgICBTeW50aGV0aWNUb3VjaEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVG91Y2hFdmVudEludGVyZmFjZSksXG4gICAgICBUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gICAgICAgIHByb3BlcnR5TmFtZTogMCxcbiAgICAgICAgZWxhcHNlZFRpbWU6IDAsXG4gICAgICAgIHBzZXVkb0VsZW1lbnQ6IDBcbiAgICAgIH0pLFxuICAgICAgU3ludGhldGljVHJhbnNpdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlKSxcbiAgICAgIFdoZWVsRXZlbnRJbnRlcmZhY2UgPSBhc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgICAgICAgZGVsdGFYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gXCJkZWx0YVhcIiBpbiBldmVudFxuICAgICAgICAgICAgPyBldmVudC5kZWx0YVhcbiAgICAgICAgICAgIDogXCJ3aGVlbERlbHRhWFwiIGluIGV2ZW50XG4gICAgICAgICAgICAgID8gLWV2ZW50LndoZWVsRGVsdGFYXG4gICAgICAgICAgICAgIDogMDtcbiAgICAgICAgfSxcbiAgICAgICAgZGVsdGFZOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gXCJkZWx0YVlcIiBpbiBldmVudFxuICAgICAgICAgICAgPyBldmVudC5kZWx0YVlcbiAgICAgICAgICAgIDogXCJ3aGVlbERlbHRhWVwiIGluIGV2ZW50XG4gICAgICAgICAgICAgID8gLWV2ZW50LndoZWVsRGVsdGFZXG4gICAgICAgICAgICAgIDogXCJ3aGVlbERlbHRhXCIgaW4gZXZlbnRcbiAgICAgICAgICAgICAgICA/IC1ldmVudC53aGVlbERlbHRhXG4gICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICB9LFxuICAgICAgICBkZWx0YVo6IDAsXG4gICAgICAgIGRlbHRhTW9kZTogMFxuICAgICAgfSksXG4gICAgICBTeW50aGV0aWNXaGVlbEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoV2hlZWxFdmVudEludGVyZmFjZSksXG4gICAgICBUb2dnbGVFdmVudEludGVyZmFjZSA9IGFzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgICAgICAgbmV3U3RhdGU6IDAsXG4gICAgICAgIG9sZFN0YXRlOiAwXG4gICAgICB9KSxcbiAgICAgIFN5bnRoZXRpY1RvZ2dsZUV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVG9nZ2xlRXZlbnRJbnRlcmZhY2UpLFxuICAgICAgRU5EX0tFWUNPREVTID0gWzksIDEzLCAyNywgMzJdLFxuICAgICAgU1RBUlRfS0VZQ09ERSA9IDIyOSxcbiAgICAgIGNhblVzZUNvbXBvc2l0aW9uRXZlbnQgPSBjYW5Vc2VET00gJiYgXCJDb21wb3NpdGlvbkV2ZW50XCIgaW4gd2luZG93LFxuICAgICAgZG9jdW1lbnRNb2RlID0gbnVsbDtcbiAgICBjYW5Vc2VET00gJiZcbiAgICAgIFwiZG9jdW1lbnRNb2RlXCIgaW4gZG9jdW1lbnQgJiZcbiAgICAgIChkb2N1bWVudE1vZGUgPSBkb2N1bWVudC5kb2N1bWVudE1vZGUpO1xuICAgIHZhciBjYW5Vc2VUZXh0SW5wdXRFdmVudCA9XG4gICAgICAgIGNhblVzZURPTSAmJiBcIlRleHRFdmVudFwiIGluIHdpbmRvdyAmJiAhZG9jdW1lbnRNb2RlLFxuICAgICAgdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgPVxuICAgICAgICBjYW5Vc2VET00gJiZcbiAgICAgICAgKCFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50IHx8XG4gICAgICAgICAgKGRvY3VtZW50TW9kZSAmJiA4IDwgZG9jdW1lbnRNb2RlICYmIDExID49IGRvY3VtZW50TW9kZSkpLFxuICAgICAgU1BBQ0VCQVJfQ09ERSA9IDMyLFxuICAgICAgU1BBQ0VCQVJfQ0hBUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoU1BBQ0VCQVJfQ09ERSksXG4gICAgICBoYXNTcGFjZUtleXByZXNzID0gITEsXG4gICAgICBpc0NvbXBvc2luZyA9ICExLFxuICAgICAgc3VwcG9ydGVkSW5wdXRUeXBlcyA9IHtcbiAgICAgICAgY29sb3I6ICEwLFxuICAgICAgICBkYXRlOiAhMCxcbiAgICAgICAgZGF0ZXRpbWU6ICEwLFxuICAgICAgICBcImRhdGV0aW1lLWxvY2FsXCI6ICEwLFxuICAgICAgICBlbWFpbDogITAsXG4gICAgICAgIG1vbnRoOiAhMCxcbiAgICAgICAgbnVtYmVyOiAhMCxcbiAgICAgICAgcGFzc3dvcmQ6ICEwLFxuICAgICAgICByYW5nZTogITAsXG4gICAgICAgIHNlYXJjaDogITAsXG4gICAgICAgIHRlbDogITAsXG4gICAgICAgIHRleHQ6ICEwLFxuICAgICAgICB0aW1lOiAhMCxcbiAgICAgICAgdXJsOiAhMCxcbiAgICAgICAgd2VlazogITBcbiAgICAgIH0sXG4gICAgICBhY3RpdmVFbGVtZW50JDEgPSBudWxsLFxuICAgICAgYWN0aXZlRWxlbWVudEluc3QkMSA9IG51bGwsXG4gICAgICBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSAhMTtcbiAgICBjYW5Vc2VET00gJiZcbiAgICAgIChpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPVxuICAgICAgICBpc0V2ZW50U3VwcG9ydGVkKFwiaW5wdXRcIikgJiZcbiAgICAgICAgKCFkb2N1bWVudC5kb2N1bWVudE1vZGUgfHwgOSA8IGRvY3VtZW50LmRvY3VtZW50TW9kZSkpO1xuICAgIHZhciBvYmplY3RJcyA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIE9iamVjdC5pcyA/IE9iamVjdC5pcyA6IGlzLFxuICAgICAgc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50ID1cbiAgICAgICAgY2FuVXNlRE9NICYmIFwiZG9jdW1lbnRNb2RlXCIgaW4gZG9jdW1lbnQgJiYgMTEgPj0gZG9jdW1lbnQuZG9jdW1lbnRNb2RlLFxuICAgICAgYWN0aXZlRWxlbWVudCA9IG51bGwsXG4gICAgICBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGwsXG4gICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbCxcbiAgICAgIG1vdXNlRG93biA9ICExLFxuICAgICAgdmVuZG9yUHJlZml4ZXMgPSB7XG4gICAgICAgIGFuaW1hdGlvbmVuZDogbWFrZVByZWZpeE1hcChcIkFuaW1hdGlvblwiLCBcIkFuaW1hdGlvbkVuZFwiKSxcbiAgICAgICAgYW5pbWF0aW9uaXRlcmF0aW9uOiBtYWtlUHJlZml4TWFwKFwiQW5pbWF0aW9uXCIsIFwiQW5pbWF0aW9uSXRlcmF0aW9uXCIpLFxuICAgICAgICBhbmltYXRpb25zdGFydDogbWFrZVByZWZpeE1hcChcIkFuaW1hdGlvblwiLCBcIkFuaW1hdGlvblN0YXJ0XCIpLFxuICAgICAgICB0cmFuc2l0aW9ucnVuOiBtYWtlUHJlZml4TWFwKFwiVHJhbnNpdGlvblwiLCBcIlRyYW5zaXRpb25SdW5cIiksXG4gICAgICAgIHRyYW5zaXRpb25zdGFydDogbWFrZVByZWZpeE1hcChcIlRyYW5zaXRpb25cIiwgXCJUcmFuc2l0aW9uU3RhcnRcIiksXG4gICAgICAgIHRyYW5zaXRpb25jYW5jZWw6IG1ha2VQcmVmaXhNYXAoXCJUcmFuc2l0aW9uXCIsIFwiVHJhbnNpdGlvbkNhbmNlbFwiKSxcbiAgICAgICAgdHJhbnNpdGlvbmVuZDogbWFrZVByZWZpeE1hcChcIlRyYW5zaXRpb25cIiwgXCJUcmFuc2l0aW9uRW5kXCIpXG4gICAgICB9LFxuICAgICAgcHJlZml4ZWRFdmVudE5hbWVzID0ge30sXG4gICAgICBzdHlsZSA9IHt9O1xuICAgIGNhblVzZURPTSAmJlxuICAgICAgKChzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuc3R5bGUpLFxuICAgICAgXCJBbmltYXRpb25FdmVudFwiIGluIHdpbmRvdyB8fFxuICAgICAgICAoZGVsZXRlIHZlbmRvclByZWZpeGVzLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sXG4gICAgICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uLFxuICAgICAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uKSxcbiAgICAgIFwiVHJhbnNpdGlvbkV2ZW50XCIgaW4gd2luZG93IHx8XG4gICAgICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb24pO1xuICAgIHZhciBBTklNQVRJT05fRU5EID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoXCJhbmltYXRpb25lbmRcIiksXG4gICAgICBBTklNQVRJT05fSVRFUkFUSU9OID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoXCJhbmltYXRpb25pdGVyYXRpb25cIiksXG4gICAgICBBTklNQVRJT05fU1RBUlQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShcImFuaW1hdGlvbnN0YXJ0XCIpLFxuICAgICAgVFJBTlNJVElPTl9SVU4gPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShcInRyYW5zaXRpb25ydW5cIiksXG4gICAgICBUUkFOU0lUSU9OX1NUQVJUID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoXCJ0cmFuc2l0aW9uc3RhcnRcIiksXG4gICAgICBUUkFOU0lUSU9OX0NBTkNFTCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKFwidHJhbnNpdGlvbmNhbmNlbFwiKSxcbiAgICAgIFRSQU5TSVRJT05fRU5EID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoXCJ0cmFuc2l0aW9uZW5kXCIpLFxuICAgICAgdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMgPSBuZXcgTWFwKCksXG4gICAgICBzaW1wbGVFdmVudFBsdWdpbkV2ZW50cyA9XG4gICAgICAgIFwiYWJvcnQgYXV4Q2xpY2sgYmVmb3JlVG9nZ2xlIGNhbmNlbCBjYW5QbGF5IGNhblBsYXlUaHJvdWdoIGNsaWNrIGNsb3NlIGNvbnRleHRNZW51IGNvcHkgY3V0IGRyYWcgZHJhZ0VuZCBkcmFnRW50ZXIgZHJhZ0V4aXQgZHJhZ0xlYXZlIGRyYWdPdmVyIGRyYWdTdGFydCBkcm9wIGR1cmF0aW9uQ2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGdvdFBvaW50ZXJDYXB0dXJlIGlucHV0IGludmFsaWQga2V5RG93biBrZXlQcmVzcyBrZXlVcCBsb2FkIGxvYWRlZERhdGEgbG9hZGVkTWV0YWRhdGEgbG9hZFN0YXJ0IGxvc3RQb2ludGVyQ2FwdHVyZSBtb3VzZURvd24gbW91c2VNb3ZlIG1vdXNlT3V0IG1vdXNlT3ZlciBtb3VzZVVwIHBhc3RlIHBhdXNlIHBsYXkgcGxheWluZyBwb2ludGVyQ2FuY2VsIHBvaW50ZXJEb3duIHBvaW50ZXJNb3ZlIHBvaW50ZXJPdXQgcG9pbnRlck92ZXIgcG9pbnRlclVwIHByb2dyZXNzIHJhdGVDaGFuZ2UgcmVzZXQgcmVzaXplIHNlZWtlZCBzZWVraW5nIHN0YWxsZWQgc3VibWl0IHN1c3BlbmQgdGltZVVwZGF0ZSB0b3VjaENhbmNlbCB0b3VjaEVuZCB0b3VjaFN0YXJ0IHZvbHVtZUNoYW5nZSBzY3JvbGwgdG9nZ2xlIHRvdWNoTW92ZSB3YWl0aW5nIHdoZWVsXCIuc3BsaXQoXG4gICAgICAgICAgXCIgXCJcbiAgICAgICAgKTtcbiAgICBzaW1wbGVFdmVudFBsdWdpbkV2ZW50cy5wdXNoKFwic2Nyb2xsRW5kXCIpO1xuICAgIHZhciBsYXN0UmVzZXRUaW1lID0gMDtcbiAgICBpZiAoXG4gICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgcGVyZm9ybWFuY2UgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHBlcmZvcm1hbmNlLm5vd1xuICAgICkge1xuICAgICAgdmFyIGxvY2FsUGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZTtcbiAgICAgIHZhciBnZXRDdXJyZW50VGltZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsUGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbG9jYWxEYXRlID0gRGF0ZTtcbiAgICAgIGdldEN1cnJlbnRUaW1lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbG9jYWxEYXRlLm5vdygpO1xuICAgICAgfTtcbiAgICB9XG4gICAgdmFyIHJlcG9ydEdsb2JhbEVycm9yID1cbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVwb3J0RXJyb3JcbiAgICAgICAgICA/IHJlcG9ydEVycm9yXG4gICAgICAgICAgOiBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiB3aW5kb3cgJiZcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB3aW5kb3cuRXJyb3JFdmVudFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB2YXIgZXZlbnQgPSBuZXcgd2luZG93LkVycm9yRXZlbnQoXCJlcnJvclwiLCB7XG4gICAgICAgICAgICAgICAgICBidWJibGVzOiAhMCxcbiAgICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6ICEwLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIGVycm9yICYmXG4gICAgICAgICAgICAgICAgICAgIG51bGwgIT09IGVycm9yICYmXG4gICAgICAgICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBlcnJvci5tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgPyBTdHJpbmcoZXJyb3IubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgICA6IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIXdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2ZW50KSkgcmV0dXJuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBwcm9jZXNzICYmXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcHJvY2Vzcy5lbWl0XG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHByb2Nlc3MuZW1pdChcInVuY2F1Z2h0RXhjZXB0aW9uXCIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9LFxuICAgICAgT2Zmc2NyZWVuVmlzaWJsZSA9IDEsXG4gICAgICBPZmZzY3JlZW5QYXNzaXZlRWZmZWN0c0Nvbm5lY3RlZCA9IDIsXG4gICAgICBjb25jdXJyZW50UXVldWVzID0gW10sXG4gICAgICBjb25jdXJyZW50UXVldWVzSW5kZXggPSAwLFxuICAgICAgY29uY3VycmVudGx5VXBkYXRlZExhbmVzID0gMCxcbiAgICAgIGVtcHR5Q29udGV4dE9iamVjdCA9IHt9O1xuICAgIE9iamVjdC5mcmVlemUoZW1wdHlDb250ZXh0T2JqZWN0KTtcbiAgICB2YXIgcmVzb2x2ZUZhbWlseSA9IG51bGwsXG4gICAgICBmYWlsZWRCb3VuZGFyaWVzID0gbnVsbCxcbiAgICAgIE5vTW9kZSA9IDAsXG4gICAgICBDb25jdXJyZW50TW9kZSA9IDEsXG4gICAgICBQcm9maWxlTW9kZSA9IDIsXG4gICAgICBTdHJpY3RMZWdhY3lNb2RlID0gOCxcbiAgICAgIFN0cmljdEVmZmVjdHNNb2RlID0gMTYsXG4gICAgICBTdXNwZW5zZXlJbWFnZXNNb2RlID0gMzI7XG4gICAgdmFyIGhhc0JhZE1hcFBvbHlmaWxsID0gITE7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBub25FeHRlbnNpYmxlT2JqZWN0ID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KTtcbiAgICAgIG5ldyBNYXAoW1tub25FeHRlbnNpYmxlT2JqZWN0LCBudWxsXV0pO1xuICAgICAgbmV3IFNldChbbm9uRXh0ZW5zaWJsZU9iamVjdF0pO1xuICAgIH0gY2F0Y2ggKGUkMykge1xuICAgICAgaGFzQmFkTWFwUG9seWZpbGwgPSAhMDtcbiAgICB9XG4gICAgdmFyIENhcHR1cmVkU3RhY2tzID0gbmV3IFdlYWtNYXAoKSxcbiAgICAgIGZvcmtTdGFjayA9IFtdLFxuICAgICAgZm9ya1N0YWNrSW5kZXggPSAwLFxuICAgICAgdHJlZUZvcmtQcm92aWRlciA9IG51bGwsXG4gICAgICB0cmVlRm9ya0NvdW50ID0gMCxcbiAgICAgIGlkU3RhY2sgPSBbXSxcbiAgICAgIGlkU3RhY2tJbmRleCA9IDAsXG4gICAgICB0cmVlQ29udGV4dFByb3ZpZGVyID0gbnVsbCxcbiAgICAgIHRyZWVDb250ZXh0SWQgPSAxLFxuICAgICAgdHJlZUNvbnRleHRPdmVyZmxvdyA9IFwiXCIsXG4gICAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IG51bGwsXG4gICAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbCxcbiAgICAgIGlzSHlkcmF0aW5nID0gITEsXG4gICAgICBkaWRTdXNwZW5kT3JFcnJvckRFViA9ICExLFxuICAgICAgaHlkcmF0aW9uRGlmZlJvb3RERVYgPSBudWxsLFxuICAgICAgaHlkcmF0aW9uRXJyb3JzID0gbnVsbCxcbiAgICAgIHJvb3RPclNpbmdsZXRvbkNvbnRleHQgPSAhMSxcbiAgICAgIEh5ZHJhdGlvbk1pc21hdGNoRXhjZXB0aW9uID0gRXJyb3IoXG4gICAgICAgIFwiSHlkcmF0aW9uIE1pc21hdGNoIEV4Y2VwdGlvbjogVGhpcyBpcyBub3QgYSByZWFsIGVycm9yLCBhbmQgc2hvdWxkIG5vdCBsZWFrIGludG8gdXNlcnNwYWNlLiBJZiB5b3UncmUgc2VlaW5nIHRoaXMsIGl0J3MgbGlrZWx5IGEgYnVnIGluIFJlYWN0LlwiXG4gICAgICApLFxuICAgICAgdmFsdWVDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCk7XG4gICAgdmFyIHJlbmRlcmVyQ3Vyc29yREVWID0gY3JlYXRlQ3Vyc29yKG51bGwpO1xuICAgIHZhciByZW5kZXJlclNpZ2lsID0ge307XG4gICAgdmFyIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsLFxuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbCxcbiAgICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSAhMSxcbiAgICAgIEFib3J0Q29udHJvbGxlckxvY2FsID1cbiAgICAgICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIEFib3J0Q29udHJvbGxlclxuICAgICAgICAgID8gQWJvcnRDb250cm9sbGVyXG4gICAgICAgICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHZhciBsaXN0ZW5lcnMgPSBbXSxcbiAgICAgICAgICAgICAgICBzaWduYWwgPSAodGhpcy5zaWduYWwgPSB7XG4gICAgICAgICAgICAgICAgICBhYm9ydGVkOiAhMSxcbiAgICAgICAgICAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uICh0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoaXMuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2lnbmFsLmFib3J0ZWQgPSAhMDtcbiAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBsaXN0ZW5lcigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgIHNjaGVkdWxlQ2FsbGJhY2skMiA9IFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLFxuICAgICAgTm9ybWFsUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksXG4gICAgICBDYWNoZUNvbnRleHQgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgICAgIENvbnN1bWVyOiBudWxsLFxuICAgICAgICBQcm92aWRlcjogbnVsbCxcbiAgICAgICAgX2N1cnJlbnRWYWx1ZTogbnVsbCxcbiAgICAgICAgX2N1cnJlbnRWYWx1ZTI6IG51bGwsXG4gICAgICAgIF90aHJlYWRDb3VudDogMCxcbiAgICAgICAgX2N1cnJlbnRSZW5kZXJlcjogbnVsbCxcbiAgICAgICAgX2N1cnJlbnRSZW5kZXJlcjI6IG51bGxcbiAgICAgIH0sXG4gICAgICBub3cgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93LFxuICAgICAgcmVuZGVyU3RhcnRUaW1lID0gLTAsXG4gICAgICBjb21taXRTdGFydFRpbWUgPSAtMCxcbiAgICAgIHByb2ZpbGVyU3RhcnRUaW1lID0gLTEuMSxcbiAgICAgIHByb2ZpbGVyRWZmZWN0RHVyYXRpb24gPSAtMCxcbiAgICAgIGNvbXBvbmVudEVmZmVjdFN0YXJ0VGltZSA9IC0xLjEsXG4gICAgICBjdXJyZW50VXBkYXRlSXNOZXN0ZWQgPSAhMSxcbiAgICAgIG5lc3RlZFVwZGF0ZVNjaGVkdWxlZCA9ICExLFxuICAgICAgY3VycmVudEVudGFuZ2xlZExpc3RlbmVycyA9IG51bGwsXG4gICAgICBjdXJyZW50RW50YW5nbGVkUGVuZGluZ0NvdW50ID0gMCxcbiAgICAgIGN1cnJlbnRFbnRhbmdsZWRMYW5lID0gMCxcbiAgICAgIGN1cnJlbnRFbnRhbmdsZWRBY3Rpb25UaGVuYWJsZSA9IG51bGwsXG4gICAgICBwcmV2T25TdGFydFRyYW5zaXRpb25GaW5pc2ggPSBSZWFjdFNoYXJlZEludGVybmFscy5TO1xuICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlMgPSBmdW5jdGlvbiAodHJhbnNpdGlvbiwgcmV0dXJuVmFsdWUpIHtcbiAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZSAmJlxuICAgICAgICBudWxsICE9PSByZXR1cm5WYWx1ZSAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZS50aGVuICYmXG4gICAgICAgIGVudGFuZ2xlQXN5bmNBY3Rpb24odHJhbnNpdGlvbiwgcmV0dXJuVmFsdWUpO1xuICAgICAgbnVsbCAhPT0gcHJldk9uU3RhcnRUcmFuc2l0aW9uRmluaXNoICYmXG4gICAgICAgIHByZXZPblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCh0cmFuc2l0aW9uLCByZXR1cm5WYWx1ZSk7XG4gICAgfTtcbiAgICB2YXIgcmVzdW1lZENhY2hlID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MgPSB7XG4gICAgICAgIHJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fSxcbiAgICAgICAgZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3M6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgICByZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZzogZnVuY3Rpb24gKCkge30sXG4gICAgICAgIGZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmc6IGZ1bmN0aW9uICgpIHt9LFxuICAgICAgICBkaXNjYXJkUGVuZGluZ1dhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fVxuICAgICAgfSxcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdLFxuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdLFxuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdLFxuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXSxcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXSxcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW10sXG4gICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzID0gbmV3IFNldCgpO1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzID0gZnVuY3Rpb24gKFxuICAgICAgZmliZXIsXG4gICAgICBpbnN0YW5jZVxuICAgICkge1xuICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5oYXMoZmliZXIudHlwZSkgfHxcbiAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCAmJlxuICAgICAgICAgICEwICE9PSBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAmJlxuICAgICAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5wdXNoKGZpYmVyKSxcbiAgICAgICAgZmliZXIubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ICYmXG4gICAgICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5wdXNoKGZpYmVyKSxcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAmJlxuICAgICAgICAgICEwICE9PVxuICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICYmXG4gICAgICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5wdXNoKGZpYmVyKSxcbiAgICAgICAgZmliZXIubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAmJlxuICAgICAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLnB1c2goZmliZXIpLFxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlICYmXG4gICAgICAgICAgITAgIT09IGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAmJlxuICAgICAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MucHVzaChmaWJlciksXG4gICAgICAgIGZpYmVyLm1vZGUgJiBTdHJpY3RMZWdhY3lNb2RlICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgJiZcbiAgICAgICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5wdXNoKGZpYmVyKSk7XG4gICAgfTtcbiAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIDAgPCBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MubGVuZ3RoICYmXG4gICAgICAgIChwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgfSksXG4gICAgICAgIChwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXSkpO1xuICAgICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIDAgPCBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCAmJlxuICAgICAgICAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgfSksXG4gICAgICAgIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW10pKTtcbiAgICAgIHZhciBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICAwIDwgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5sZW5ndGggJiZcbiAgICAgICAgKHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuYWRkKFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICAgIH0pLFxuICAgICAgICAocGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdKSk7XG4gICAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIDAgPCBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5sZW5ndGggJiZcbiAgICAgICAgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmZvckVhY2goXG4gICAgICAgICAgZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLmFkZChcbiAgICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW10pKTtcbiAgICAgIHZhciBjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICAwIDwgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5sZW5ndGggJiZcbiAgICAgICAgKHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgICBjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuYWRkKFxuICAgICAgICAgICAgZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJDb21wb25lbnRcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICAgIH0pLFxuICAgICAgICAocGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdKSk7XG4gICAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgIDAgPCBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5sZW5ndGggJiZcbiAgICAgICAgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5hZGQoXG4gICAgICAgICAgICBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGZpYmVyKSB8fCBcIkNvbXBvbmVudFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgfSksXG4gICAgICAgIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdKSk7XG4gICAgICBpZiAoMCA8IFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5zaXplKSB7XG4gICAgICAgIHZhciBzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFxuICAgICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lc1xuICAgICAgICApO1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbiogTW92ZSBjb2RlIHdpdGggc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZE1vdW50LCBhbmQgc2V0IGluaXRpYWwgc3RhdGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlc1wiLFxuICAgICAgICAgIHNvcnRlZE5hbWVzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAwIDwgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplICYmXG4gICAgICAgICgoc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhcbiAgICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzXG4gICAgICAgICkpLFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkIGFuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuIFNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4qIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuKiBJZiB5b3UncmUgdXBkYXRpbmcgc3RhdGUgd2hlbmV2ZXIgcHJvcHMgY2hhbmdlLCByZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIG1lbW9pemF0aW9uIHRlY2huaXF1ZXMgb3IgbW92ZSBpdCB0byBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBMZWFybiBtb3JlIGF0OiBodHRwczovL3JlYWN0LmRldi9saW5rL2Rlcml2ZWQtc3RhdGVcXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcIixcbiAgICAgICAgICBzb3J0ZWROYW1lc1xuICAgICAgICApKTtcbiAgICAgIDAgPCBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLnNpemUgJiZcbiAgICAgICAgKChzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFxuICAgICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXNcbiAgICAgICAgKSksXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbiogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcIixcbiAgICAgICAgICBzb3J0ZWROYW1lc1xuICAgICAgICApKTtcbiAgICAgIDAgPCBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5zaXplICYmXG4gICAgICAgICgoc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcykpLFxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJjb21wb25lbnRXaWxsTW91bnQgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiBTZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuKiBNb3ZlIGNvZGUgd2l0aCBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkTW91bnQsIGFuZCBzZXQgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgY29uc3RydWN0b3IuXFxuKiBSZW5hbWUgY29tcG9uZW50V2lsbE1vdW50IHRvIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgdG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biBgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcIixcbiAgICAgICAgICBzb3J0ZWROYW1lc1xuICAgICAgICApKTtcbiAgICAgIDAgPCBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuc2l6ZSAmJlxuICAgICAgICAoKHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoXG4gICAgICAgICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzXG4gICAgICAgICkpLFxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbiogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4qIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIHJlZmFjdG9yIHlvdXIgY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIExlYXJuIG1vcmUgYXQ6IGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvZGVyaXZlZC1zdGF0ZVxcbiogUmVuYW1lIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgdG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biBgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcIixcbiAgICAgICAgICBzb3J0ZWROYW1lc1xuICAgICAgICApKTtcbiAgICAgIDAgPCBjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSAmJlxuICAgICAgICAoKHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzKSksXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcImNvbXBvbmVudFdpbGxVcGRhdGUgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiBTZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbiogUmVuYW1lIGNvbXBvbmVudFdpbGxVcGRhdGUgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgdG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biBgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG5cXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXNcIixcbiAgICAgICAgICBzb3J0ZWROYW1lc1xuICAgICAgICApKTtcbiAgICB9O1xuICAgIHZhciBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBuZXcgTWFwKCksXG4gICAgICBkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0ID0gbmV3IFNldCgpO1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nID0gZnVuY3Rpb24gKFxuICAgICAgZmliZXIsXG4gICAgICBpbnN0YW5jZVxuICAgICkge1xuICAgICAgdmFyIHN0cmljdFJvb3QgPSBudWxsO1xuICAgICAgZm9yICh2YXIgbm9kZSA9IGZpYmVyOyBudWxsICE9PSBub2RlOyApXG4gICAgICAgIG5vZGUubW9kZSAmIFN0cmljdExlZ2FjeU1vZGUgJiYgKHN0cmljdFJvb3QgPSBub2RlKSxcbiAgICAgICAgICAobm9kZSA9IG5vZGUucmV0dXJuKTtcbiAgICAgIG51bGwgPT09IHN0cmljdFJvb3RcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJFeHBlY3RlZCB0byBmaW5kIGEgU3RyaWN0TW9kZSBjb21wb25lbnQgaW4gYSBzdHJpY3QgbW9kZSB0cmVlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiXG4gICAgICAgICAgKVxuICAgICAgICA6ICFkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmhhcyhmaWJlci50eXBlKSAmJlxuICAgICAgICAgICgobm9kZSA9IHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5nZXQoc3RyaWN0Um9vdCkpLFxuICAgICAgICAgIG51bGwgIT0gZmliZXIudHlwZS5jb250ZXh0VHlwZXMgfHxcbiAgICAgICAgICAgIG51bGwgIT0gZmliZXIudHlwZS5jaGlsZENvbnRleHRUeXBlcyB8fFxuICAgICAgICAgICAgKG51bGwgIT09IGluc3RhbmNlICYmXG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCkpICYmXG4gICAgICAgICAgKHZvaWQgMCA9PT0gbm9kZSAmJlxuICAgICAgICAgICAgKChub2RlID0gW10pLCBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuc2V0KHN0cmljdFJvb3QsIG5vZGUpKSxcbiAgICAgICAgICBub2RlLnB1c2goZmliZXIpKTtcbiAgICB9O1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuZm9yRWFjaChmdW5jdGlvbiAoZmliZXJBcnJheSkge1xuICAgICAgICBpZiAoMCAhPT0gZmliZXJBcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgZmlyc3RGaWJlciA9IGZpYmVyQXJyYXlbMF0sXG4gICAgICAgICAgICB1bmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICBmaWJlckFycmF5LmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgICAgICB1bmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZUZyb21GaWJlcihmaWJlcikgfHwgXCJDb21wb25lbnRcIik7XG4gICAgICAgICAgICBkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0LmFkZChmaWJlci50eXBlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YXIgc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyh1bmlxdWVOYW1lcyk7XG4gICAgICAgICAgcnVuV2l0aEZpYmVySW5ERVYoZmlyc3RGaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJMZWdhY3kgY29udGV4dCBBUEkgaGFzIGJlZW4gZGV0ZWN0ZWQgd2l0aGluIGEgc3RyaWN0LW1vZGUgdHJlZS5cXG5cXG5UaGUgb2xkIEFQSSB3aWxsIGJlIHN1cHBvcnRlZCBpbiBhbGwgMTYueCByZWxlYXNlcywgYnV0IGFwcGxpY2F0aW9ucyB1c2luZyBpdCBzaG91bGQgbWlncmF0ZSB0byB0aGUgbmV3IHZlcnNpb24uXFxuXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzXFxuXFxuTGVhcm4gbW9yZSBhYm91dCB0aGlzIHdhcm5pbmcgaGVyZTogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9sZWdhY3ktY29udGV4dFwiLFxuICAgICAgICAgICAgICBzb3J0ZWROYW1lc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5kaXNjYXJkUGVuZGluZ1dhcm5pbmdzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKTtcbiAgICB9O1xuICAgIHZhciBTdXNwZW5zZUV4Y2VwdGlvbiA9IEVycm9yKFxuICAgICAgICBcIlN1c3BlbnNlIEV4Y2VwdGlvbjogVGhpcyBpcyBub3QgYSByZWFsIGVycm9yISBJdCdzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBgdXNlYCB0byBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgcmVuZGVyLiBZb3UgbXVzdCBlaXRoZXIgcmV0aHJvdyBpdCBpbW1lZGlhdGVseSwgb3IgbW92ZSB0aGUgYHVzZWAgY2FsbCBvdXRzaWRlIG9mIHRoZSBgdHJ5L2NhdGNoYCBibG9jay4gQ2FwdHVyaW5nIHdpdGhvdXQgcmV0aHJvd2luZyB3aWxsIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci5cXG5cXG5UbyBoYW5kbGUgYXN5bmMgZXJyb3JzLCB3cmFwIHlvdXIgY29tcG9uZW50IGluIGFuIGVycm9yIGJvdW5kYXJ5LCBvciBjYWxsIHRoZSBwcm9taXNlJ3MgYC5jYXRjaGAgbWV0aG9kIGFuZCBwYXNzIHRoZSByZXN1bHQgdG8gYHVzZWAuXCJcbiAgICAgICksXG4gICAgICBTdXNwZW5zZXlDb21taXRFeGNlcHRpb24gPSBFcnJvcihcbiAgICAgICAgXCJTdXNwZW5zZSBFeGNlcHRpb246IFRoaXMgaXMgbm90IGEgcmVhbCBlcnJvciwgYW5kIHNob3VsZCBub3QgbGVhayBpbnRvIHVzZXJzcGFjZS4gSWYgeW91J3JlIHNlZWluZyB0aGlzLCBpdCdzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgKSxcbiAgICAgIFN1c3BlbnNlQWN0aW9uRXhjZXB0aW9uID0gRXJyb3IoXG4gICAgICAgIFwiU3VzcGVuc2UgRXhjZXB0aW9uOiBUaGlzIGlzIG5vdCBhIHJlYWwgZXJyb3IhIEl0J3MgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIGB1c2VBY3Rpb25TdGF0ZWAgdG8gaW50ZXJydXB0IHRoZSBjdXJyZW50IHJlbmRlci4gWW91IG11c3QgZWl0aGVyIHJldGhyb3cgaXQgaW1tZWRpYXRlbHksIG9yIG1vdmUgdGhlIGB1c2VBY3Rpb25TdGF0ZWAgY2FsbCBvdXRzaWRlIG9mIHRoZSBgdHJ5L2NhdGNoYCBibG9jay4gQ2FwdHVyaW5nIHdpdGhvdXQgcmV0aHJvd2luZyB3aWxsIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci5cXG5cXG5UbyBoYW5kbGUgYXN5bmMgZXJyb3JzLCB3cmFwIHlvdXIgY29tcG9uZW50IGluIGFuIGVycm9yIGJvdW5kYXJ5LlwiXG4gICAgICApLFxuICAgICAgbm9vcFN1c3BlbnNleUNvbW1pdFRoZW5hYmxlID0ge1xuICAgICAgICB0aGVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICdJbnRlcm5hbCBSZWFjdCBlcnJvcjogQSBsaXN0ZW5lciB3YXMgdW5leHBlY3RlZGx5IGF0dGFjaGVkIHRvIGEgXCJub29wXCIgdGhlbmFibGUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc3VzcGVuZGVkVGhlbmFibGUgPSBudWxsLFxuICAgICAgbmVlZHNUb1Jlc2V0U3VzcGVuZGVkVGhlbmFibGVERVYgPSAhMSxcbiAgICAgIGNhbGxDb21wb25lbnQgPSB7XG4gICAgICAgIHJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZTogZnVuY3Rpb24gKENvbXBvbmVudCwgcHJvcHMsIHNlY29uZEFyZykge1xuICAgICAgICAgIHZhciB3YXNSZW5kZXJpbmcgPSBpc1JlbmRlcmluZztcbiAgICAgICAgICBpc1JlbmRlcmluZyA9ICEwO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gQ29tcG9uZW50KHByb3BzLCBzZWNvbmRBcmcpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpc1JlbmRlcmluZyA9IHdhc1JlbmRlcmluZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjYWxsQ29tcG9uZW50SW5ERVYgPVxuICAgICAgICBjYWxsQ29tcG9uZW50LnJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZS5iaW5kKGNhbGxDb21wb25lbnQpLFxuICAgICAgY2FsbFJlbmRlciA9IHtcbiAgICAgICAgcmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lOiBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgICB2YXIgd2FzUmVuZGVyaW5nID0gaXNSZW5kZXJpbmc7XG4gICAgICAgICAgaXNSZW5kZXJpbmcgPSAhMDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLnJlbmRlcigpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpc1JlbmRlcmluZyA9IHdhc1JlbmRlcmluZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjYWxsUmVuZGVySW5ERVYgPSBjYWxsUmVuZGVyLnJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZS5iaW5kKGNhbGxSZW5kZXIpLFxuICAgICAgY2FsbENvbXBvbmVudERpZE1vdW50ID0ge1xuICAgICAgICByZWFjdF9zdGFja19ib3R0b21fZnJhbWU6IGZ1bmN0aW9uIChmaW5pc2hlZFdvcmssIGluc3RhbmNlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpbmlzaGVkV29yaywgZmluaXNoZWRXb3JrLnJldHVybiwgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNhbGxDb21wb25lbnREaWRNb3VudEluREVWID1cbiAgICAgICAgY2FsbENvbXBvbmVudERpZE1vdW50LnJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZS5iaW5kKFxuICAgICAgICAgIGNhbGxDb21wb25lbnREaWRNb3VudFxuICAgICAgICApLFxuICAgICAgY2FsbENvbXBvbmVudERpZFVwZGF0ZSA9IHtcbiAgICAgICAgcmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lOiBmdW5jdGlvbiAoXG4gICAgICAgICAgZmluaXNoZWRXb3JrLFxuICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgIHByZXZQcm9wcyxcbiAgICAgICAgICBwcmV2U3RhdGUsXG4gICAgICAgICAgc25hcHNob3RcbiAgICAgICAgKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihmaW5pc2hlZFdvcmssIGZpbmlzaGVkV29yay5yZXR1cm4sIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjYWxsQ29tcG9uZW50RGlkVXBkYXRlSW5ERVYgPVxuICAgICAgICBjYWxsQ29tcG9uZW50RGlkVXBkYXRlLnJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZS5iaW5kKFxuICAgICAgICAgIGNhbGxDb21wb25lbnREaWRVcGRhdGVcbiAgICAgICAgKSxcbiAgICAgIGNhbGxDb21wb25lbnREaWRDYXRjaCA9IHtcbiAgICAgICAgcmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lOiBmdW5jdGlvbiAoaW5zdGFuY2UsIGVycm9ySW5mbykge1xuICAgICAgICAgIHZhciBzdGFjayA9IGVycm9ySW5mby5zdGFjaztcbiAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaChlcnJvckluZm8udmFsdWUsIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFN0YWNrOiBudWxsICE9PSBzdGFjayA/IHN0YWNrIDogXCJcIlxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbENvbXBvbmVudERpZENhdGNoSW5ERVYgPVxuICAgICAgICBjYWxsQ29tcG9uZW50RGlkQ2F0Y2gucmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lLmJpbmQoXG4gICAgICAgICAgY2FsbENvbXBvbmVudERpZENhdGNoXG4gICAgICAgICksXG4gICAgICBjYWxsQ29tcG9uZW50V2lsbFVubW91bnQgPSB7XG4gICAgICAgIHJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZTogZnVuY3Rpb24gKFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICBpbnN0YW5jZVxuICAgICAgICApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgbmVhcmVzdE1vdW50ZWRBbmNlc3RvciwgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudEluREVWID1cbiAgICAgICAgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50LnJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZS5iaW5kKFxuICAgICAgICAgIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudFxuICAgICAgICApLFxuICAgICAgY2FsbENyZWF0ZSA9IHtcbiAgICAgICAgcmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lOiBmdW5jdGlvbiAoZWZmZWN0KSB7XG4gICAgICAgICAgdmFyIGNyZWF0ZSA9IGVmZmVjdC5jcmVhdGU7XG4gICAgICAgICAgZWZmZWN0ID0gZWZmZWN0Lmluc3Q7XG4gICAgICAgICAgY3JlYXRlID0gY3JlYXRlKCk7XG4gICAgICAgICAgcmV0dXJuIChlZmZlY3QuZGVzdHJveSA9IGNyZWF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjYWxsQ3JlYXRlSW5ERVYgPSBjYWxsQ3JlYXRlLnJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZS5iaW5kKGNhbGxDcmVhdGUpLFxuICAgICAgY2FsbERlc3Ryb3kgPSB7XG4gICAgICAgIHJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZTogZnVuY3Rpb24gKFxuICAgICAgICAgIGN1cnJlbnQsXG4gICAgICAgICAgbmVhcmVzdE1vdW50ZWRBbmNlc3RvcixcbiAgICAgICAgICBkZXN0cm95XG4gICAgICAgICkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkZXN0cm95KCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIG5lYXJlc3RNb3VudGVkQW5jZXN0b3IsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjYWxsRGVzdHJveUluREVWID0gY2FsbERlc3Ryb3kucmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lLmJpbmQoY2FsbERlc3Ryb3kpLFxuICAgICAgY2FsbExhenlJbml0ID0ge1xuICAgICAgICByZWFjdF9zdGFja19ib3R0b21fZnJhbWU6IGZ1bmN0aW9uIChsYXp5KSB7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Ll9pbml0O1xuICAgICAgICAgIHJldHVybiBpbml0KGxhenkuX3BheWxvYWQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2FsbExhenlJbml0SW5ERVYgPVxuICAgICAgICBjYWxsTGF6eUluaXQucmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lLmJpbmQoY2FsbExhenlJbml0KSxcbiAgICAgIHRoZW5hYmxlU3RhdGUkMSA9IG51bGwsXG4gICAgICB0aGVuYWJsZUluZGV4Q291bnRlciQxID0gMCxcbiAgICAgIGN1cnJlbnREZWJ1Z0luZm8gPSBudWxsLFxuICAgICAgZGlkV2FybkFib3V0TWFwcztcbiAgICB2YXIgZGlkV2FybkFib3V0R2VuZXJhdG9ycyA9IChkaWRXYXJuQWJvdXRNYXBzID0gITEpO1xuICAgIHZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcbiAgICB2YXIgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nID0ge307XG4gICAgdmFyIG93bmVySGFzU3ltYm9sVHlwZVdhcm5pbmcgPSB7fTtcbiAgICB3YXJuRm9yTWlzc2luZ0tleSA9IGZ1bmN0aW9uIChyZXR1cm5GaWJlciwgd29ya0luUHJvZ3Jlc3MsIGNoaWxkKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG51bGwgIT09IGNoaWxkICYmXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBjaGlsZCAmJlxuICAgICAgICBjaGlsZC5fc3RvcmUgJiZcbiAgICAgICAgKCghY2hpbGQuX3N0b3JlLnZhbGlkYXRlZCAmJiBudWxsID09IGNoaWxkLmtleSkgfHxcbiAgICAgICAgICAyID09PSBjaGlsZC5fc3RvcmUudmFsaWRhdGVkKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChcIm9iamVjdFwiICE9PSB0eXBlb2YgY2hpbGQuX3N0b3JlKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgXCJSZWFjdCBDb21wb25lbnQgaW4gd2FybkZvck1pc3NpbmdLZXkgc2hvdWxkIGhhdmUgYSBfc3RvcmUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICApO1xuICAgICAgICBjaGlsZC5fc3RvcmUudmFsaWRhdGVkID0gMTtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKHJldHVybkZpYmVyKSxcbiAgICAgICAgICBjb21wb25lbnRLZXkgPSBjb21wb25lbnROYW1lIHx8IFwibnVsbFwiO1xuICAgICAgICBpZiAoIW93bmVySGFzS2V5VXNlV2FybmluZ1tjb21wb25lbnRLZXldKSB7XG4gICAgICAgICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2NvbXBvbmVudEtleV0gPSAhMDtcbiAgICAgICAgICBjaGlsZCA9IGNoaWxkLl9vd25lcjtcbiAgICAgICAgICByZXR1cm5GaWJlciA9IHJldHVybkZpYmVyLl9kZWJ1Z093bmVyO1xuICAgICAgICAgIHZhciBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvID0gXCJcIjtcbiAgICAgICAgICByZXR1cm5GaWJlciAmJlxuICAgICAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIHJldHVybkZpYmVyLnRhZyAmJlxuICAgICAgICAgICAgKGNvbXBvbmVudEtleSA9IGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIocmV0dXJuRmliZXIpKSAmJlxuICAgICAgICAgICAgKGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPVxuICAgICAgICAgICAgICBcIlxcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGBcIiArIGNvbXBvbmVudEtleSArIFwiYC5cIik7XG4gICAgICAgICAgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyB8fFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgJiZcbiAgICAgICAgICAgICAgKGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPVxuICAgICAgICAgICAgICAgIFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgK1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudE5hbWUgK1xuICAgICAgICAgICAgICAgIFwiPi5cIikpO1xuICAgICAgICAgIHZhciBjaGlsZE93bmVyQXBwZW5kaXggPSBcIlwiO1xuICAgICAgICAgIG51bGwgIT0gY2hpbGQgJiZcbiAgICAgICAgICAgIHJldHVybkZpYmVyICE9PSBjaGlsZCAmJlxuICAgICAgICAgICAgKChjb21wb25lbnROYW1lID0gbnVsbCksXG4gICAgICAgICAgICBcIm51bWJlclwiID09PSB0eXBlb2YgY2hpbGQudGFnXG4gICAgICAgICAgICAgID8gKGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbUZpYmVyKGNoaWxkKSlcbiAgICAgICAgICAgICAgOiBcInN0cmluZ1wiID09PSB0eXBlb2YgY2hpbGQubmFtZSAmJiAoY29tcG9uZW50TmFtZSA9IGNoaWxkLm5hbWUpLFxuICAgICAgICAgICAgY29tcG9uZW50TmFtZSAmJlxuICAgICAgICAgICAgICAoY2hpbGRPd25lckFwcGVuZGl4ID1cbiAgICAgICAgICAgICAgICBcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGNvbXBvbmVudE5hbWUgKyBcIi5cIikpO1xuICAgICAgICAgIHJ1bldpdGhGaWJlckluREVWKHdvcmtJblByb2dyZXNzLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAnRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLiVzJXMgU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvd2FybmluZy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLicsXG4gICAgICAgICAgICAgIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8sXG4gICAgICAgICAgICAgIGNoaWxkT3duZXJBcHBlbmRpeFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdmFyIHJlY29uY2lsZUNoaWxkRmliZXJzID0gY3JlYXRlQ2hpbGRSZWNvbmNpbGVyKCEwKSxcbiAgICAgIG1vdW50Q2hpbGRGaWJlcnMgPSBjcmVhdGVDaGlsZFJlY29uY2lsZXIoITEpLFxuICAgICAgVXBkYXRlU3RhdGUgPSAwLFxuICAgICAgUmVwbGFjZVN0YXRlID0gMSxcbiAgICAgIEZvcmNlVXBkYXRlID0gMixcbiAgICAgIENhcHR1cmVVcGRhdGUgPSAzLFxuICAgICAgaGFzRm9yY2VVcGRhdGUgPSAhMTtcbiAgICB2YXIgZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZSA9ICExO1xuICAgIHZhciBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBudWxsO1xuICAgIHZhciBkaWRSZWFkRnJvbUVudGFuZ2xlZEFzeW5jQWN0aW9uID0gITEsXG4gICAgICBjdXJyZW50VHJlZUhpZGRlblN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpLFxuICAgICAgcHJldkVudGFuZ2xlZFJlbmRlckxhbmVzQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKDApLFxuICAgICAgc3VzcGVuc2VIYW5kbGVyU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IobnVsbCksXG4gICAgICBzaGVsbEJvdW5kYXJ5ID0gbnVsbCxcbiAgICAgIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrID0gMSxcbiAgICAgIEZvcmNlU3VzcGVuc2VGYWxsYmFjayA9IDIsXG4gICAgICBzdXNwZW5zZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKDApLFxuICAgICAgTm9GbGFncyA9IDAsXG4gICAgICBIYXNFZmZlY3QgPSAxLFxuICAgICAgSW5zZXJ0aW9uID0gMixcbiAgICAgIExheW91dCA9IDQsXG4gICAgICBQYXNzaXZlID0gOCxcbiAgICAgIGRpZFdhcm5VbmNhY2hlZEdldFNuYXBzaG90O1xuICAgIHZhciBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dFVzZVdyYXBwZWRJblRyeUNhdGNoID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRBc3luY0NsaWVudENvbXBvbmVudCA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2FybkFib3V0VXNlRm9ybVN0YXRlID0gbmV3IFNldCgpO1xuICAgIHZhciByZW5kZXJMYW5lcyA9IDAsXG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGwsXG4gICAgICBjdXJyZW50SG9vayA9IG51bGwsXG4gICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsLFxuICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9ICExLFxuICAgICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gITEsXG4gICAgICBzaG91bGREb3VibGVJbnZva2VVc2VyRm5zSW5Ib29rc0RFViA9ICExLFxuICAgICAgbG9jYWxJZENvdW50ZXIgPSAwLFxuICAgICAgdGhlbmFibGVJbmRleENvdW50ZXIgPSAwLFxuICAgICAgdGhlbmFibGVTdGF0ZSA9IG51bGwsXG4gICAgICBnbG9iYWxDbGllbnRJZENvdW50ZXIgPSAwLFxuICAgICAgUkVfUkVOREVSX0xJTUlUID0gMjUsXG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGwsXG4gICAgICBob29rVHlwZXNEZXYgPSBudWxsLFxuICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMSxcbiAgICAgIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID0gITEsXG4gICAgICBDb250ZXh0T25seURpc3BhdGNoZXIgPSB7XG4gICAgICAgIHJlYWRDb250ZXh0OiByZWFkQ29udGV4dCxcbiAgICAgICAgdXNlOiB1c2UsXG4gICAgICAgIHVzZUNhbGxiYWNrOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZUNvbnRleHQ6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlRWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlTGF5b3V0RWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZUluc2VydGlvbkVmZmVjdDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VNZW1vOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZVJlZHVjZXI6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlUmVmOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZVN0YXRlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZURlYnVnVmFsdWU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgICAgICAgdXNlRGVmZXJyZWRWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VUcmFuc2l0aW9uOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZUlkOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZUZvcm1TdGF0ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VBY3Rpb25TdGF0ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VPcHRpbWlzdGljOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gICAgICAgIHVzZU1lbW9DYWNoZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICAgICAgICB1c2VDYWNoZVJlZnJlc2g6IHRocm93SW52YWxpZEhvb2tFcnJvclxuICAgICAgfSxcbiAgICAgIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IG51bGwsXG4gICAgICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWID0gbnVsbCxcbiAgICAgIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSBudWxsLFxuICAgICAgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0gbnVsbCxcbiAgICAgIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSBudWxsLFxuICAgICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSBudWxsLFxuICAgICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IG51bGw7XG4gICAgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0ge1xuICAgICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2U6IHVzZSxcbiAgICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhbGxiYWNrXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNvbnRleHRcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgICBtb3VudEVmZmVjdEltcGwoNCwgSW5zZXJ0aW9uLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VNZW1vXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZHVjZXJcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZlwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3RhdGVcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWJ1Z1ZhbHVlXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB9LFxuICAgICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlZmVycmVkVmFsdWVcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VUcmFuc2l0aW9uXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICAgIH0sXG4gICAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKFxuICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50SWQoKTtcbiAgICAgIH0sXG4gICAgICB1c2VGb3JtU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24sIGluaXRpYWxTdGF0ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRm9ybVN0YXRlXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHdhcm5PblVzZUZvcm1TdGF0ZUluRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudEFjdGlvblN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0sXG4gICAgICB1c2VBY3Rpb25TdGF0ZTogZnVuY3Rpb24gKGFjdGlvbiwgaW5pdGlhbFN0YXRlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VBY3Rpb25TdGF0ZVwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRBY3Rpb25TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSk7XG4gICAgICB9LFxuICAgICAgdXNlT3B0aW1pc3RpYzogZnVuY3Rpb24gKHBhc3N0aHJvdWdoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VPcHRpbWlzdGljXCI7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudE9wdGltaXN0aWMocGFzc3Rocm91Z2gpO1xuICAgICAgfSxcbiAgICAgIHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOiB1c2VIb3N0VHJhbnNpdGlvblN0YXR1cyxcbiAgICAgIHVzZU1lbW9DYWNoZTogdXNlTWVtb0NhY2hlLFxuICAgICAgdXNlQ2FjaGVSZWZyZXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWNoZVJlZnJlc2hcIjtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH07XG4gICAgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IHtcbiAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlOiB1c2UsXG4gICAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWxsYmFja1wiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDb250ZXh0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW1wZXJhdGl2ZUhhbmRsZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbnNlcnRpb25FZmZlY3RcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIG1vdW50RWZmZWN0SW1wbCg0LCBJbnNlcnRpb24sIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VMYXlvdXRFZmZlY3RcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZU1lbW9cIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVkdWNlclwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZlwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN0YXRlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlYnVnVmFsdWVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB9LFxuICAgICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlZmVycmVkVmFsdWVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgICB9LFxuICAgICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlVHJhbnNpdGlvblwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgICAgfSxcbiAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICApIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN5bmNFeHRlcm5hbFN0b3JlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudElkKCk7XG4gICAgICB9LFxuICAgICAgdXNlQWN0aW9uU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24sIGluaXRpYWxTdGF0ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQWN0aW9uU3RhdGVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudEFjdGlvblN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0sXG4gICAgICB1c2VGb3JtU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24sIGluaXRpYWxTdGF0ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRm9ybVN0YXRlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB3YXJuT25Vc2VGb3JtU3RhdGVJbkRldigpO1xuICAgICAgICByZXR1cm4gbW91bnRBY3Rpb25TdGF0ZShhY3Rpb24sIGluaXRpYWxTdGF0ZSk7XG4gICAgICB9LFxuICAgICAgdXNlT3B0aW1pc3RpYzogZnVuY3Rpb24gKHBhc3N0aHJvdWdoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VPcHRpbWlzdGljXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRPcHRpbWlzdGljKHBhc3N0aHJvdWdoKTtcbiAgICAgIH0sXG4gICAgICB1c2VIb3N0VHJhbnNpdGlvblN0YXR1czogdXNlSG9zdFRyYW5zaXRpb25TdGF0dXMsXG4gICAgICB1c2VNZW1vQ2FjaGU6IHVzZU1lbW9DYWNoZSxcbiAgICAgIHVzZUNhY2hlUmVmcmVzaDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FjaGVSZWZyZXNoXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRSZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0ge1xuICAgICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2U6IHVzZSxcbiAgICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhbGxiYWNrXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDb250ZXh0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHVwZGF0ZUVmZmVjdEltcGwoMjA0OCwgUGFzc2l2ZSwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUluc2VydGlvbkVmZmVjdFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgSW5zZXJ0aW9uLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbCg0LCBMYXlvdXQsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZHVjZXJcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWY6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZlwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICB9LFxuICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN0YXRlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlYnVnVmFsdWVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB9LFxuICAgICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlZmVycmVkVmFsdWVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgfSxcbiAgICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVUcmFuc2l0aW9uKCk7XG4gICAgICB9LFxuICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3luY0V4dGVybmFsU3RvcmVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICB1c2VJZDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSWRcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfSxcbiAgICAgIHVzZUZvcm1TdGF0ZTogZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRm9ybVN0YXRlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB3YXJuT25Vc2VGb3JtU3RhdGVJbkRldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlQWN0aW9uU3RhdGUoYWN0aW9uKTtcbiAgICAgIH0sXG4gICAgICB1c2VBY3Rpb25TdGF0ZTogZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQWN0aW9uU3RhdGVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVBY3Rpb25TdGF0ZShhY3Rpb24pO1xuICAgICAgfSxcbiAgICAgIHVzZU9wdGltaXN0aWM6IGZ1bmN0aW9uIChwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlT3B0aW1pc3RpY1wiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU9wdGltaXN0aWMocGFzc3Rocm91Z2gsIHJlZHVjZXIpO1xuICAgICAgfSxcbiAgICAgIHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzOiB1c2VIb3N0VHJhbnNpdGlvblN0YXR1cyxcbiAgICAgIHVzZU1lbW9DYWNoZTogdXNlTWVtb0NhY2hlLFxuICAgICAgdXNlQ2FjaGVSZWZyZXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWNoZVJlZnJlc2hcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfVxuICAgIH07XG4gICAgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0ge1xuICAgICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2U6IHVzZSxcbiAgICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhbGxiYWNrXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDb250ZXh0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VFZmZlY3RcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHVwZGF0ZUVmZmVjdEltcGwoMjA0OCwgUGFzc2l2ZSwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbnNlcnRpb25FZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUluc2VydGlvbkVmZmVjdFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoNCwgSW5zZXJ0aW9uLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbCg0LCBMYXlvdXQsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVkdWNlclwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VSZWY6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZlwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICB9LFxuICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN0YXRlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWJ1Z1ZhbHVlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgfSxcbiAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgfSxcbiAgICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZXJlbmRlclRyYW5zaXRpb24oKTtcbiAgICAgIH0sXG4gICAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKFxuICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN5bmNFeHRlcm5hbFN0b3JlKFxuICAgICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIHVzZUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJZFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICB9LFxuICAgICAgdXNlRm9ybVN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VGb3JtU3RhdGVcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHdhcm5PblVzZUZvcm1TdGF0ZUluRGV2KCk7XG4gICAgICAgIHJldHVybiByZXJlbmRlckFjdGlvblN0YXRlKGFjdGlvbik7XG4gICAgICB9LFxuICAgICAgdXNlQWN0aW9uU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUFjdGlvblN0YXRlXCI7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJBY3Rpb25TdGF0ZShhY3Rpb24pO1xuICAgICAgfSxcbiAgICAgIHVzZU9wdGltaXN0aWM6IGZ1bmN0aW9uIChwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlT3B0aW1pc3RpY1wiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcik7XG4gICAgICB9LFxuICAgICAgdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM6IHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzLFxuICAgICAgdXNlTWVtb0NhY2hlOiB1c2VNZW1vQ2FjaGUsXG4gICAgICB1c2VDYWNoZVJlZnJlc2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhY2hlUmVmcmVzaFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICB9XG4gICAgfTtcbiAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0ge1xuICAgICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCk7XG4gICAgICB9LFxuICAgICAgdXNlOiBmdW5jdGlvbiAodXNhYmxlKSB7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICByZXR1cm4gdXNlKHVzYWJsZSk7XG4gICAgICB9LFxuICAgICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ2FsbGJhY2tcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRWZmZWN0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUluc2VydGlvbkVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlSW5zZXJ0aW9uRWZmZWN0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICBtb3VudEVmZmVjdEltcGwoNCwgSW5zZXJ0aW9uLCBjcmVhdGUsIGRlcHMpO1xuICAgICAgfSxcbiAgICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTGF5b3V0RWZmZWN0XCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VNZW1vXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVJlZHVjZXJcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgICAgfSxcbiAgICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTdGF0ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWJ1Z1ZhbHVlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgfSxcbiAgICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWZlcnJlZFZhbHVlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgfSxcbiAgICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICAgIH0sXG4gICAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZTogZnVuY3Rpb24gKFxuICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50U3luY0V4dGVybmFsU3RvcmUoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUlkXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRJZCgpO1xuICAgICAgfSxcbiAgICAgIHVzZUZvcm1TdGF0ZTogZnVuY3Rpb24gKGFjdGlvbiwgaW5pdGlhbFN0YXRlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VGb3JtU3RhdGVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiBtb3VudEFjdGlvblN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0sXG4gICAgICB1c2VBY3Rpb25TdGF0ZTogZnVuY3Rpb24gKGFjdGlvbiwgaW5pdGlhbFN0YXRlKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VBY3Rpb25TdGF0ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50QWN0aW9uU3RhdGUoYWN0aW9uLCBpbml0aWFsU3RhdGUpO1xuICAgICAgfSxcbiAgICAgIHVzZU9wdGltaXN0aWM6IGZ1bmN0aW9uIChwYXNzdGhyb3VnaCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlT3B0aW1pc3RpY1wiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIG1vdW50T3B0aW1pc3RpYyhwYXNzdGhyb3VnaCk7XG4gICAgICB9LFxuICAgICAgdXNlTWVtb0NhY2hlOiBmdW5jdGlvbiAoc2l6ZSkge1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHVzZU1lbW9DYWNoZShzaXplKTtcbiAgICAgIH0sXG4gICAgICB1c2VIb3N0VHJhbnNpdGlvblN0YXR1czogdXNlSG9zdFRyYW5zaXRpb25TdGF0dXMsXG4gICAgICB1c2VDYWNoZVJlZnJlc2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhY2hlUmVmcmVzaFwiO1xuICAgICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gbW91bnRSZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IHtcbiAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZTogZnVuY3Rpb24gKHVzYWJsZSkge1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHVzZSh1c2FibGUpO1xuICAgICAgfSxcbiAgICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhbGxiYWNrXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUVmZmVjdFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHVwZGF0ZUVmZmVjdEltcGwoMjA0OCwgUGFzc2l2ZSwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbnNlcnRpb25FZmZlY3RcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbCg0LCBJbnNlcnRpb24sIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VMYXlvdXRFZmZlY3RcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbCg0LCBMYXlvdXQsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWR1Y2VyXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZjogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlUmVmXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICB9LFxuICAgICAgdXNlU3RhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN0YXRlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VEZWJ1Z1ZhbHVlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIH0sXG4gICAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVmZXJyZWRWYWx1ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgfSxcbiAgICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlVHJhbnNpdGlvbigpO1xuICAgICAgfSxcbiAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlOiBmdW5jdGlvbiAoXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICApIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVN5bmNFeHRlcm5hbFN0b3JlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN5bmNFeHRlcm5hbFN0b3JlKFxuICAgICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIHVzZUlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJZFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfSxcbiAgICAgIHVzZUZvcm1TdGF0ZTogZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRm9ybVN0YXRlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUFjdGlvblN0YXRlKGFjdGlvbik7XG4gICAgICB9LFxuICAgICAgdXNlQWN0aW9uU3RhdGU6IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUFjdGlvblN0YXRlXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUFjdGlvblN0YXRlKGFjdGlvbik7XG4gICAgICB9LFxuICAgICAgdXNlT3B0aW1pc3RpYzogZnVuY3Rpb24gKHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VPcHRpbWlzdGljXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU9wdGltaXN0aWMocGFzc3Rocm91Z2gsIHJlZHVjZXIpO1xuICAgICAgfSxcbiAgICAgIHVzZU1lbW9DYWNoZTogZnVuY3Rpb24gKHNpemUpIHtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHJldHVybiB1c2VNZW1vQ2FjaGUoc2l6ZSk7XG4gICAgICB9LFxuICAgICAgdXNlSG9zdFRyYW5zaXRpb25TdGF0dXM6IHVzZUhvc3RUcmFuc2l0aW9uU3RhdHVzLFxuICAgICAgdXNlQ2FjaGVSZWZyZXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VDYWNoZVJlZnJlc2hcIjtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKS5tZW1vaXplZFN0YXRlO1xuICAgICAgfVxuICAgIH07XG4gICAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IHtcbiAgICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIHVzZTogZnVuY3Rpb24gKHVzYWJsZSkge1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHVzZSh1c2FibGUpO1xuICAgICAgfSxcbiAgICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhbGxiYWNrXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlQ29udGV4dFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUVmZmVjdFwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHVwZGF0ZUVmZmVjdEltcGwoMjA0OCwgUGFzc2l2ZSwgY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0sXG4gICAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUltcGVyYXRpdmVIYW5kbGVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlSW5zZXJ0aW9uRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VJbnNlcnRpb25FZmZlY3RcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbCg0LCBJbnNlcnRpb24sIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VMYXlvdXRFZmZlY3RcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbCg0LCBMYXlvdXQsIGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9LFxuICAgICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlTWVtb1wiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWR1Y2VyXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlUmVmOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VSZWZcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH0sXG4gICAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3RhdGVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5IID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlRGVidWdWYWx1ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB9LFxuICAgICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZURlZmVycmVkVmFsdWVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlLCBpbml0aWFsVmFsdWUpO1xuICAgICAgfSxcbiAgICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZVRyYW5zaXRpb25cIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJUcmFuc2l0aW9uKCk7XG4gICAgICB9LFxuICAgICAgdXNlU3luY0V4dGVybmFsU3RvcmU6IGZ1bmN0aW9uIChcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICkge1xuICAgICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IFwidXNlU3luY0V4dGVybmFsU3RvcmVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gdXBkYXRlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICAgIGdldFNuYXBzaG90LFxuICAgICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgdXNlSWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUlkXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICB9LFxuICAgICAgdXNlRm9ybVN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VGb3JtU3RhdGVcIjtcbiAgICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJBY3Rpb25TdGF0ZShhY3Rpb24pO1xuICAgICAgfSxcbiAgICAgIHVzZUFjdGlvblN0YXRlOiBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VBY3Rpb25TdGF0ZVwiO1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICAgIHJldHVybiByZXJlbmRlckFjdGlvblN0YXRlKGFjdGlvbik7XG4gICAgICB9LFxuICAgICAgdXNlT3B0aW1pc3RpYzogZnVuY3Rpb24gKHBhc3N0aHJvdWdoLCByZWR1Y2VyKSB7XG4gICAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gXCJ1c2VPcHRpbWlzdGljXCI7XG4gICAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcik7XG4gICAgICB9LFxuICAgICAgdXNlTWVtb0NhY2hlOiBmdW5jdGlvbiAoc2l6ZSkge1xuICAgICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHVzZU1lbW9DYWNoZShzaXplKTtcbiAgICAgIH0sXG4gICAgICB1c2VIb3N0VHJhbnNpdGlvblN0YXR1czogdXNlSG9zdFRyYW5zaXRpb25TdGF0dXMsXG4gICAgICB1c2VDYWNoZVJlZnJlc2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBcInVzZUNhY2hlUmVmcmVzaFwiO1xuICAgICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpLm1lbW9pemVkU3RhdGU7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgZmFrZUludGVybmFsSW5zdGFuY2UgPSB7fTtcbiAgICB2YXIgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50ID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZSA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgICB2YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVzJDEgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5BYm91dENoaWxkQ29udGV4dFR5cGVzID0gbmV3IFNldCgpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjayA9IG5ldyBTZXQoKTtcbiAgICBPYmplY3QuZnJlZXplKGZha2VJbnRlcm5hbEluc3RhbmNlKTtcbiAgICB2YXIgY2xhc3NDb21wb25lbnRVcGRhdGVyID0ge1xuICAgICAgICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgICAgICAgIGluc3QgPSBpbnN0Ll9yZWFjdEludGVybmFscztcbiAgICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGluc3QpLFxuICAgICAgICAgICAgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGxhbmUpO1xuICAgICAgICAgIHVwZGF0ZS5wYXlsb2FkID0gcGF5bG9hZDtcbiAgICAgICAgICB2b2lkIDAgIT09IGNhbGxiYWNrICYmXG4gICAgICAgICAgICBudWxsICE9PSBjYWxsYmFjayAmJlxuICAgICAgICAgICAgKHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjayksICh1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaykpO1xuICAgICAgICAgIHBheWxvYWQgPSBlbnF1ZXVlVXBkYXRlKGluc3QsIHVwZGF0ZSwgbGFuZSk7XG4gICAgICAgICAgbnVsbCAhPT0gcGF5bG9hZCAmJlxuICAgICAgICAgICAgKHNjaGVkdWxlVXBkYXRlT25GaWJlcihwYXlsb2FkLCBpbnN0LCBsYW5lKSxcbiAgICAgICAgICAgIGVudGFuZ2xlVHJhbnNpdGlvbnMocGF5bG9hZCwgaW5zdCwgbGFuZSkpO1xuICAgICAgICAgIG1hcmtTdGF0ZVVwZGF0ZVNjaGVkdWxlZChpbnN0LCBsYW5lKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKGluc3QsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaW5zdCA9IGluc3QuX3JlYWN0SW50ZXJuYWxzO1xuICAgICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoaW5zdCksXG4gICAgICAgICAgICB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgICAgICAgdXBkYXRlLnRhZyA9IFJlcGxhY2VTdGF0ZTtcbiAgICAgICAgICB1cGRhdGUucGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgICAgICAgdm9pZCAwICE9PSBjYWxsYmFjayAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gY2FsbGJhY2sgJiZcbiAgICAgICAgICAgICh3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2spLCAodXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2spKTtcbiAgICAgICAgICBwYXlsb2FkID0gZW5xdWV1ZVVwZGF0ZShpbnN0LCB1cGRhdGUsIGxhbmUpO1xuICAgICAgICAgIG51bGwgIT09IHBheWxvYWQgJiZcbiAgICAgICAgICAgIChzY2hlZHVsZVVwZGF0ZU9uRmliZXIocGF5bG9hZCwgaW5zdCwgbGFuZSksXG4gICAgICAgICAgICBlbnRhbmdsZVRyYW5zaXRpb25zKHBheWxvYWQsIGluc3QsIGxhbmUpKTtcbiAgICAgICAgICBtYXJrU3RhdGVVcGRhdGVTY2hlZHVsZWQoaW5zdCwgbGFuZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKGluc3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgaW5zdCA9IGluc3QuX3JlYWN0SW50ZXJuYWxzO1xuICAgICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoaW5zdCksXG4gICAgICAgICAgICB1cGRhdGUgPSBjcmVhdGVVcGRhdGUobGFuZSk7XG4gICAgICAgICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlO1xuICAgICAgICAgIHZvaWQgMCAhPT0gY2FsbGJhY2sgJiZcbiAgICAgICAgICAgIG51bGwgIT09IGNhbGxiYWNrICYmXG4gICAgICAgICAgICAod2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrKSwgKHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrKSk7XG4gICAgICAgICAgY2FsbGJhY2sgPSBlbnF1ZXVlVXBkYXRlKGluc3QsIHVwZGF0ZSwgbGFuZSk7XG4gICAgICAgICAgbnVsbCAhPT0gY2FsbGJhY2sgJiZcbiAgICAgICAgICAgIChzY2hlZHVsZVVwZGF0ZU9uRmliZXIoY2FsbGJhY2ssIGluc3QsIGxhbmUpLFxuICAgICAgICAgICAgZW50YW5nbGVUcmFuc2l0aW9ucyhjYWxsYmFjaywgaW5zdCwgbGFuZSkpO1xuICAgICAgICAgIG51bGwgIT09IGluamVjdGVkUHJvZmlsaW5nSG9va3MgJiZcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgICAgICAgdHlwZW9mIGluamVjdGVkUHJvZmlsaW5nSG9va3MubWFya0ZvcmNlVXBkYXRlU2NoZWR1bGVkICYmXG4gICAgICAgICAgICBpbmplY3RlZFByb2ZpbGluZ0hvb2tzLm1hcmtGb3JjZVVwZGF0ZVNjaGVkdWxlZChpbnN0LCBsYW5lKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNvbXBvbmVudE5hbWUgPSBudWxsLFxuICAgICAgZXJyb3JCb3VuZGFyeU5hbWUgPSBudWxsLFxuICAgICAgU2VsZWN0aXZlSHlkcmF0aW9uRXhjZXB0aW9uID0gRXJyb3IoXG4gICAgICAgIFwiVGhpcyBpcyBub3QgYSByZWFsIGVycm9yLiBJdCdzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBSZWFjdCdzIHNlbGVjdGl2ZSBoeWRyYXRpb24gZmVhdHVyZS4gSWYgdGhpcyBsZWFrcyBpbnRvIHVzZXJzcGFjZSwgaXQncyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICksXG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gITE7XG4gICAgdmFyIGRpZFdhcm5BYm91dEJhZENsYXNzID0ge307XG4gICAgdmFyIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudCA9IHt9O1xuICAgIHZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZXMgPSB7fTtcbiAgICB2YXIgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudCA9IHt9O1xuICAgIHZhciBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gITE7XG4gICAgdmFyIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyID0ge307XG4gICAgdmFyIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zID0ge307XG4gICAgdmFyIFNVU1BFTkRFRF9NQVJLRVIgPSB7XG4gICAgICAgIGRlaHlkcmF0ZWQ6IG51bGwsXG4gICAgICAgIHRyZWVDb250ZXh0OiBudWxsLFxuICAgICAgICByZXRyeUxhbmU6IDAsXG4gICAgICAgIGh5ZHJhdGlvbkVycm9yczogbnVsbFxuICAgICAgfSxcbiAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyID0gITEsXG4gICAgICBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IG51bGw7XG4gICAgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBuZXcgU2V0KCk7XG4gICAgdmFyIG9mZnNjcmVlblN1YnRyZWVJc0hpZGRlbiA9ICExLFxuICAgICAgb2Zmc2NyZWVuU3VidHJlZVdhc0hpZGRlbiA9ICExLFxuICAgICAgbmVlZHNGb3JtUmVzZXQgPSAhMSxcbiAgICAgIFBvc3NpYmx5V2Vha1NldCA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFdlYWtTZXQgPyBXZWFrU2V0IDogU2V0LFxuICAgICAgbmV4dEVmZmVjdCA9IG51bGwsXG4gICAgICBpblByb2dyZXNzTGFuZXMgPSBudWxsLFxuICAgICAgaW5Qcm9ncmVzc1Jvb3QgPSBudWxsLFxuICAgICAgaG9zdFBhcmVudCA9IG51bGwsXG4gICAgICBob3N0UGFyZW50SXNDb250YWluZXIgPSAhMSxcbiAgICAgIGN1cnJlbnRIb2lzdGFibGVSb290ID0gbnVsbCxcbiAgICAgIHN1c3BlbnNleUNvbW1pdEZsYWcgPSA4MTkyLFxuICAgICAgRGVmYXVsdEFzeW5jRGlzcGF0Y2hlciA9IHtcbiAgICAgICAgZ2V0Q2FjaGVGb3JUeXBlOiBmdW5jdGlvbiAocmVzb3VyY2VUeXBlKSB7XG4gICAgICAgICAgdmFyIGNhY2hlID0gcmVhZENvbnRleHQoQ2FjaGVDb250ZXh0KSxcbiAgICAgICAgICAgIGNhY2hlRm9yVHlwZSA9IGNhY2hlLmRhdGEuZ2V0KHJlc291cmNlVHlwZSk7XG4gICAgICAgICAgdm9pZCAwID09PSBjYWNoZUZvclR5cGUgJiZcbiAgICAgICAgICAgICgoY2FjaGVGb3JUeXBlID0gcmVzb3VyY2VUeXBlKCkpLFxuICAgICAgICAgICAgY2FjaGUuZGF0YS5zZXQocmVzb3VyY2VUeXBlLCBjYWNoZUZvclR5cGUpKTtcbiAgICAgICAgICByZXR1cm4gY2FjaGVGb3JUeXBlO1xuICAgICAgICB9LFxuICAgICAgICBjYWNoZVNpZ25hbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiByZWFkQ29udGV4dChDYWNoZUNvbnRleHQpLmNvbnRyb2xsZXIuc2lnbmFsO1xuICAgICAgICB9LFxuICAgICAgICBnZXRPd25lcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTeW1ib2wgJiYgU3ltYm9sLmZvcikge1xuICAgICAgdmFyIHN5bWJvbEZvciA9IFN5bWJvbC5mb3I7XG4gICAgICBzeW1ib2xGb3IoXCJzZWxlY3Rvci5jb21wb25lbnRcIik7XG4gICAgICBzeW1ib2xGb3IoXCJzZWxlY3Rvci5oYXNfcHNldWRvX2NsYXNzXCIpO1xuICAgICAgc3ltYm9sRm9yKFwic2VsZWN0b3Iucm9sZVwiKTtcbiAgICAgIHN5bWJvbEZvcihcInNlbGVjdG9yLnRlc3RfaWRcIik7XG4gICAgICBzeW1ib2xGb3IoXCJzZWxlY3Rvci50ZXh0XCIpO1xuICAgIH1cbiAgICB2YXIgY29tbWl0SG9va3MgPSBbXSxcbiAgICAgIFBvc3NpYmx5V2Vha01hcCA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFdlYWtNYXAgPyBXZWFrTWFwIDogTWFwLFxuICAgICAgTm9Db250ZXh0ID0gMCxcbiAgICAgIFJlbmRlckNvbnRleHQgPSAyLFxuICAgICAgQ29tbWl0Q29udGV4dCA9IDQsXG4gICAgICBSb290SW5Qcm9ncmVzcyA9IDAsXG4gICAgICBSb290RmF0YWxFcnJvcmVkID0gMSxcbiAgICAgIFJvb3RFcnJvcmVkID0gMixcbiAgICAgIFJvb3RTdXNwZW5kZWQgPSAzLFxuICAgICAgUm9vdFN1c3BlbmRlZFdpdGhEZWxheSA9IDQsXG4gICAgICBSb290U3VzcGVuZGVkQXRUaGVTaGVsbCA9IDYsXG4gICAgICBSb290Q29tcGxldGVkID0gNSxcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBOb0NvbnRleHQsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsLFxuICAgICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSAwLFxuICAgICAgTm90U3VzcGVuZGVkID0gMCxcbiAgICAgIFN1c3BlbmRlZE9uRXJyb3IgPSAxLFxuICAgICAgU3VzcGVuZGVkT25EYXRhID0gMixcbiAgICAgIFN1c3BlbmRlZE9uSW1tZWRpYXRlID0gMyxcbiAgICAgIFN1c3BlbmRlZE9uSW5zdGFuY2UgPSA0LFxuICAgICAgU3VzcGVuZGVkT25JbnN0YW5jZUFuZFJlYWR5VG9Db250aW51ZSA9IDUsXG4gICAgICBTdXNwZW5kZWRPbkRlcHJlY2F0ZWRUaHJvd1Byb21pc2UgPSA2LFxuICAgICAgU3VzcGVuZGVkQW5kUmVhZHlUb0NvbnRpbnVlID0gNyxcbiAgICAgIFN1c3BlbmRlZE9uSHlkcmF0aW9uID0gOCxcbiAgICAgIFN1c3BlbmRlZE9uQWN0aW9uID0gOSxcbiAgICAgIHdvcmtJblByb2dyZXNzU3VzcGVuZGVkUmVhc29uID0gTm90U3VzcGVuZGVkLFxuICAgICAgd29ya0luUHJvZ3Jlc3NUaHJvd25WYWx1ZSA9IG51bGwsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRTa2lwU3VzcGVuZGVkU2libGluZ3MgPSAhMSxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdElzUHJlcmVuZGVyaW5nID0gITEsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRBdHRhY2hQaW5nTGlzdGVuZXIgPSAhMSxcbiAgICAgIGVudGFuZ2xlZFJlbmRlckxhbmVzID0gMCxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290SW5Qcm9ncmVzcyxcbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IDAsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RJbnRlcmxlYXZlZFVwZGF0ZWRMYW5lcyA9IDAsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IDAsXG4gICAgICB3b3JrSW5Qcm9ncmVzc0RlZmVycmVkTGFuZSA9IDAsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1N1c3BlbmRlZFJldHJ5TGFuZXMgPSAwLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290Q29uY3VycmVudEVycm9ycyA9IG51bGwsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZWNvdmVyYWJsZUVycm9ycyA9IG51bGwsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3REaWRJbmNsdWRlUmVjdXJzaXZlUmVuZGVyVXBkYXRlID0gITEsXG4gICAgICBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gMCxcbiAgICAgIEZBTExCQUNLX1RIUk9UVExFX01TID0gMzAwLFxuICAgICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZSA9IEluZmluaXR5LFxuICAgICAgUkVOREVSX1RJTUVPVVRfTVMgPSA1MDAsXG4gICAgICB3b3JrSW5Qcm9ncmVzc1RyYW5zaXRpb25zID0gbnVsbCxcbiAgICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbnVsbCxcbiAgICAgIElNTUVESUFURV9DT01NSVQgPSAwLFxuICAgICAgU1VTUEVOREVEX0NPTU1JVCA9IDEsXG4gICAgICBUSFJPVFRMRURfQ09NTUlUID0gMixcbiAgICAgIE5PX1BFTkRJTkdfRUZGRUNUUyA9IDAsXG4gICAgICBQRU5ESU5HX01VVEFUSU9OX1BIQVNFID0gMSxcbiAgICAgIFBFTkRJTkdfTEFZT1VUX1BIQVNFID0gMixcbiAgICAgIFBFTkRJTkdfQUZURVJfTVVUQVRJT05fUEhBU0UgPSAzLFxuICAgICAgUEVORElOR19TUEFXTkVEX1dPUksgPSA0LFxuICAgICAgUEVORElOR19QQVNTSVZFX1BIQVNFID0gNSxcbiAgICAgIHBlbmRpbmdFZmZlY3RzU3RhdHVzID0gMCxcbiAgICAgIHBlbmRpbmdFZmZlY3RzUm9vdCA9IG51bGwsXG4gICAgICBwZW5kaW5nRmluaXNoZWRXb3JrID0gbnVsbCxcbiAgICAgIHBlbmRpbmdFZmZlY3RzTGFuZXMgPSAwLFxuICAgICAgcGVuZGluZ0VmZmVjdHNSZW1haW5pbmdMYW5lcyA9IDAsXG4gICAgICBwZW5kaW5nUGFzc2l2ZVRyYW5zaXRpb25zID0gbnVsbCxcbiAgICAgIHBlbmRpbmdSZWNvdmVyYWJsZUVycm9ycyA9IG51bGwsXG4gICAgICBORVNURURfVVBEQVRFX0xJTUlUID0gNTAsXG4gICAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDAsXG4gICAgICByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSBudWxsLFxuICAgICAgaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gITEsXG4gICAgICBkaWRTY2hlZHVsZVVwZGF0ZUR1cmluZ1Bhc3NpdmVFZmZlY3RzID0gITEsXG4gICAgICBORVNURURfUEFTU0lWRV9VUERBVEVfTElNSVQgPSA1MCxcbiAgICAgIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IDAsXG4gICAgICByb290V2l0aFBhc3NpdmVOZXN0ZWRVcGRhdGVzID0gbnVsbCxcbiAgICAgIGlzUnVubmluZ0luc2VydGlvbkVmZmVjdCA9ICExLFxuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCA9IG51bGwsXG4gICAgICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlciA9ICExO1xuICAgIHZhciBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGZha2VBY3RDYWxsYmFja05vZGUkMSA9IHt9LFxuICAgICAgZmlyc3RTY2hlZHVsZWRSb290ID0gbnVsbCxcbiAgICAgIGxhc3RTY2hlZHVsZWRSb290ID0gbnVsbCxcbiAgICAgIGRpZFNjaGVkdWxlTWljcm90YXNrID0gITEsXG4gICAgICBkaWRTY2hlZHVsZU1pY3JvdGFza19hY3QgPSAhMSxcbiAgICAgIG1pZ2h0SGF2ZVBlbmRpbmdTeW5jV29yayA9ICExLFxuICAgICAgaXNGbHVzaGluZ1dvcmsgPSAhMSxcbiAgICAgIGN1cnJlbnRFdmVudFRyYW5zaXRpb25MYW5lID0gMCxcbiAgICAgIGZha2VBY3RDYWxsYmFja05vZGUgPSB7fTtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaW1wbGVFdmVudFBsdWdpbkV2ZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXZlbnROYW1lID0gc2ltcGxlRXZlbnRQbHVnaW5FdmVudHNbaV0sXG4gICAgICAgICAgZG9tRXZlbnROYW1lID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGV2ZW50TmFtZSA9IGV2ZW50TmFtZVswXS50b1VwcGVyQ2FzZSgpICsgZXZlbnROYW1lLnNsaWNlKDEpO1xuICAgICAgICByZWdpc3RlclNpbXBsZUV2ZW50KGRvbUV2ZW50TmFtZSwgXCJvblwiICsgZXZlbnROYW1lKTtcbiAgICAgIH1cbiAgICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoQU5JTUFUSU9OX0VORCwgXCJvbkFuaW1hdGlvbkVuZFwiKTtcbiAgICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoQU5JTUFUSU9OX0lURVJBVElPTiwgXCJvbkFuaW1hdGlvbkl0ZXJhdGlvblwiKTtcbiAgICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoQU5JTUFUSU9OX1NUQVJULCBcIm9uQW5pbWF0aW9uU3RhcnRcIik7XG4gICAgICByZWdpc3RlclNpbXBsZUV2ZW50KFwiZGJsY2xpY2tcIiwgXCJvbkRvdWJsZUNsaWNrXCIpO1xuICAgICAgcmVnaXN0ZXJTaW1wbGVFdmVudChcImZvY3VzaW5cIiwgXCJvbkZvY3VzXCIpO1xuICAgICAgcmVnaXN0ZXJTaW1wbGVFdmVudChcImZvY3Vzb3V0XCIsIFwib25CbHVyXCIpO1xuICAgICAgcmVnaXN0ZXJTaW1wbGVFdmVudChUUkFOU0lUSU9OX1JVTiwgXCJvblRyYW5zaXRpb25SdW5cIik7XG4gICAgICByZWdpc3RlclNpbXBsZUV2ZW50KFRSQU5TSVRJT05fU1RBUlQsIFwib25UcmFuc2l0aW9uU3RhcnRcIik7XG4gICAgICByZWdpc3RlclNpbXBsZUV2ZW50KFRSQU5TSVRJT05fQ0FOQ0VMLCBcIm9uVHJhbnNpdGlvbkNhbmNlbFwiKTtcbiAgICAgIHJlZ2lzdGVyU2ltcGxlRXZlbnQoVFJBTlNJVElPTl9FTkQsIFwib25UcmFuc2l0aW9uRW5kXCIpO1xuICAgIH0pKCk7XG4gICAgcmVnaXN0ZXJEaXJlY3RFdmVudChcIm9uTW91c2VFbnRlclwiLCBbXCJtb3VzZW91dFwiLCBcIm1vdXNlb3ZlclwiXSk7XG4gICAgcmVnaXN0ZXJEaXJlY3RFdmVudChcIm9uTW91c2VMZWF2ZVwiLCBbXCJtb3VzZW91dFwiLCBcIm1vdXNlb3ZlclwiXSk7XG4gICAgcmVnaXN0ZXJEaXJlY3RFdmVudChcIm9uUG9pbnRlckVudGVyXCIsIFtcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVyb3ZlclwiXSk7XG4gICAgcmVnaXN0ZXJEaXJlY3RFdmVudChcIm9uUG9pbnRlckxlYXZlXCIsIFtcInBvaW50ZXJvdXRcIiwgXCJwb2ludGVyb3ZlclwiXSk7XG4gICAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KFxuICAgICAgXCJvbkNoYW5nZVwiLFxuICAgICAgXCJjaGFuZ2UgY2xpY2sgZm9jdXNpbiBmb2N1c291dCBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZVwiLnNwbGl0KFxuICAgICAgICBcIiBcIlxuICAgICAgKVxuICAgICk7XG4gICAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KFxuICAgICAgXCJvblNlbGVjdFwiLFxuICAgICAgXCJmb2N1c291dCBjb250ZXh0bWVudSBkcmFnZW5kIGZvY3VzaW4ga2V5ZG93biBrZXl1cCBtb3VzZWRvd24gbW91c2V1cCBzZWxlY3Rpb25jaGFuZ2VcIi5zcGxpdChcbiAgICAgICAgXCIgXCJcbiAgICAgIClcbiAgICApO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChcIm9uQmVmb3JlSW5wdXRcIiwgW1xuICAgICAgXCJjb21wb3NpdGlvbmVuZFwiLFxuICAgICAgXCJrZXlwcmVzc1wiLFxuICAgICAgXCJ0ZXh0SW5wdXRcIixcbiAgICAgIFwicGFzdGVcIlxuICAgIF0pO1xuICAgIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChcbiAgICAgIFwib25Db21wb3NpdGlvbkVuZFwiLFxuICAgICAgXCJjb21wb3NpdGlvbmVuZCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKVxuICAgICk7XG4gICAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KFxuICAgICAgXCJvbkNvbXBvc2l0aW9uU3RhcnRcIixcbiAgICAgIFwiY29tcG9zaXRpb25zdGFydCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93blwiLnNwbGl0KFwiIFwiKVxuICAgICk7XG4gICAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KFxuICAgICAgXCJvbkNvbXBvc2l0aW9uVXBkYXRlXCIsXG4gICAgICBcImNvbXBvc2l0aW9udXBkYXRlIGZvY3Vzb3V0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duXCIuc3BsaXQoXCIgXCIpXG4gICAgKTtcbiAgICB2YXIgbWVkaWFFdmVudFR5cGVzID1cbiAgICAgICAgXCJhYm9ydCBjYW5wbGF5IGNhbnBsYXl0aHJvdWdoIGR1cmF0aW9uY2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGxvYWRlZGRhdGEgbG9hZGVkbWV0YWRhdGEgbG9hZHN0YXJ0IHBhdXNlIHBsYXkgcGxheWluZyBwcm9ncmVzcyByYXRlY2hhbmdlIHJlc2l6ZSBzZWVrZWQgc2Vla2luZyBzdGFsbGVkIHN1c3BlbmQgdGltZXVwZGF0ZSB2b2x1bWVjaGFuZ2Ugd2FpdGluZ1wiLnNwbGl0KFxuICAgICAgICAgIFwiIFwiXG4gICAgICAgICksXG4gICAgICBub25EZWxlZ2F0ZWRFdmVudHMgPSBuZXcgU2V0KFxuICAgICAgICBcImJlZm9yZXRvZ2dsZSBjYW5jZWwgY2xvc2UgaW52YWxpZCBsb2FkIHNjcm9sbCBzY3JvbGxlbmQgdG9nZ2xlXCJcbiAgICAgICAgICAuc3BsaXQoXCIgXCIpXG4gICAgICAgICAgLmNvbmNhdChtZWRpYUV2ZW50VHlwZXMpXG4gICAgICApLFxuICAgICAgbGlzdGVuaW5nTWFya2VyID0gXCJfcmVhY3RMaXN0ZW5pbmdcIiArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLFxuICAgICAgZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCA9ICExLFxuICAgICAgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9ICExLFxuICAgICAgZGlkV2FybkZvcm1BY3Rpb25UeXBlID0gITEsXG4gICAgICBkaWRXYXJuRm9ybUFjdGlvbk5hbWUgPSAhMSxcbiAgICAgIGRpZFdhcm5Gb3JtQWN0aW9uVGFyZ2V0ID0gITEsXG4gICAgICBkaWRXYXJuRm9ybUFjdGlvbk1ldGhvZCA9ICExLFxuICAgICAgZGlkV2FyblBvcG92ZXJUYXJnZXRPYmplY3QgPSAhMTtcbiAgICB2YXIgZGlkV2FybkZvck5ld0Jvb2xlYW5Qcm9wc1dpdGhFbXB0eVZhbHVlID0ge307XG4gICAgdmFyIE5PUk1BTElaRV9ORVdMSU5FU19SRUdFWCA9IC9cXHJcXG4/L2csXG4gICAgICBOT1JNQUxJWkVfTlVMTF9BTkRfUkVQTEFDRU1FTlRfUkVHRVggPSAvXFx1MDAwMHxcXHVGRkZEL2csXG4gICAgICB4bGlua05hbWVzcGFjZSA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgICAgeG1sTmFtZXNwYWNlID0gXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcbiAgICAgIEVYUEVDVEVEX0ZPUk1fQUNUSU9OX1VSTCA9XG4gICAgICAgIFwiamF2YXNjcmlwdDp0aHJvdyBuZXcgRXJyb3IoJ1JlYWN0IGZvcm0gdW5leHBlY3RlZGx5IHN1Ym1pdHRlZC4nKVwiLFxuICAgICAgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcgPSBcInN1cHByZXNzSHlkcmF0aW9uV2FybmluZ1wiLFxuICAgICAgQUNUSVZJVFlfU1RBUlRfREFUQSA9IFwiJlwiLFxuICAgICAgQUNUSVZJVFlfRU5EX0RBVEEgPSBcIi8mXCIsXG4gICAgICBTVVNQRU5TRV9TVEFSVF9EQVRBID0gXCIkXCIsXG4gICAgICBTVVNQRU5TRV9FTkRfREFUQSA9IFwiLyRcIixcbiAgICAgIFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSA9IFwiJD9cIixcbiAgICAgIFNVU1BFTlNFX1FVRVVFRF9TVEFSVF9EQVRBID0gXCIkflwiLFxuICAgICAgU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSA9IFwiJCFcIixcbiAgICAgIFBSRUFNQkxFX0NPTlRSSUJVVElPTl9IVE1MID0gXCJodG1sXCIsXG4gICAgICBQUkVBTUJMRV9DT05UUklCVVRJT05fQk9EWSA9IFwiYm9keVwiLFxuICAgICAgUFJFQU1CTEVfQ09OVFJJQlVUSU9OX0hFQUQgPSBcImhlYWRcIixcbiAgICAgIEZPUk1fU1RBVEVfSVNfTUFUQ0hJTkcgPSBcIkYhXCIsXG4gICAgICBGT1JNX1NUQVRFX0lTX05PVF9NQVRDSElORyA9IFwiRlwiLFxuICAgICAgRE9DVU1FTlRfUkVBRFlfU1RBVEVfTE9BRElORyA9IFwibG9hZGluZ1wiLFxuICAgICAgU1RZTEUgPSBcInN0eWxlXCIsXG4gICAgICBIb3N0Q29udGV4dE5hbWVzcGFjZU5vbmUgPSAwLFxuICAgICAgSG9zdENvbnRleHROYW1lc3BhY2VTdmcgPSAxLFxuICAgICAgSG9zdENvbnRleHROYW1lc3BhY2VNYXRoID0gMixcbiAgICAgIGV2ZW50c0VuYWJsZWQgPSBudWxsLFxuICAgICAgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBudWxsLFxuICAgICAgd2FybmVkVW5rbm93blRhZ3MgPSB7IGRpYWxvZzogITAsIHdlYnZpZXc6ICEwIH0sXG4gICAgICBjdXJyZW50UG9wc3RhdGVUcmFuc2l0aW9uRXZlbnQgPSBudWxsLFxuICAgICAgc2NoZWR1bGVUaW1lb3V0ID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygc2V0VGltZW91dCA/IHNldFRpbWVvdXQgOiB2b2lkIDAsXG4gICAgICBjYW5jZWxUaW1lb3V0ID1cbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY2xlYXJUaW1lb3V0ID8gY2xlYXJUaW1lb3V0IDogdm9pZCAwLFxuICAgICAgbm9UaW1lb3V0ID0gLTEsXG4gICAgICBsb2NhbFByb21pc2UgPSBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBQcm9taXNlID8gUHJvbWlzZSA6IHZvaWQgMCxcbiAgICAgIHNjaGVkdWxlTWljcm90YXNrID1cbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcXVldWVNaWNyb3Rhc2tcbiAgICAgICAgICA/IHF1ZXVlTWljcm90YXNrXG4gICAgICAgICAgOiBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgbG9jYWxQcm9taXNlXG4gICAgICAgICAgICA/IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFByb21pc2VcbiAgICAgICAgICAgICAgICAgIC5yZXNvbHZlKG51bGwpXG4gICAgICAgICAgICAgICAgICAudGhlbihjYWxsYmFjaylcbiAgICAgICAgICAgICAgICAgIC5jYXRjaChoYW5kbGVFcnJvckluTmV4dFRpY2spO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHNjaGVkdWxlVGltZW91dCxcbiAgICAgIHByZXZpb3VzSHlkcmF0YWJsZU9uRW50ZXJpbmdTY29wZWRTaW5nbGV0b24gPSBudWxsLFxuICAgICAgTm90TG9hZGVkID0gMCxcbiAgICAgIExvYWRlZCA9IDEsXG4gICAgICBFcnJvcmVkID0gMixcbiAgICAgIFNldHRsZWQgPSAzLFxuICAgICAgSW5zZXJ0ZWQgPSA0LFxuICAgICAgcHJlbG9hZFByb3BzTWFwID0gbmV3IE1hcCgpLFxuICAgICAgcHJlY29ubmVjdHNTZXQgPSBuZXcgU2V0KCksXG4gICAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdERPTVNoYXJlZEludGVybmFscy5kO1xuICAgIFJlYWN0RE9NU2hhcmVkSW50ZXJuYWxzLmQgPSB7XG4gICAgICBmOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwcmV2aW91c1dhc1JlbmRlcmluZyA9IHByZXZpb3VzRGlzcGF0Y2hlci5mKCksXG4gICAgICAgICAgd2FzUmVuZGVyaW5nID0gZmx1c2hTeW5jV29yayQxKCk7XG4gICAgICAgIHJldHVybiBwcmV2aW91c1dhc1JlbmRlcmluZyB8fCB3YXNSZW5kZXJpbmc7XG4gICAgICB9LFxuICAgICAgcjogZnVuY3Rpb24gKGZvcm0pIHtcbiAgICAgICAgdmFyIGZvcm1JbnN0ID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShmb3JtKTtcbiAgICAgICAgbnVsbCAhPT0gZm9ybUluc3QgJiYgNSA9PT0gZm9ybUluc3QudGFnICYmIFwiZm9ybVwiID09PSBmb3JtSW5zdC50eXBlXG4gICAgICAgICAgPyByZXF1ZXN0Rm9ybVJlc2V0JDEoZm9ybUluc3QpXG4gICAgICAgICAgOiBwcmV2aW91c0Rpc3BhdGNoZXIucihmb3JtKTtcbiAgICAgIH0sXG4gICAgICBEOiBmdW5jdGlvbiAoaHJlZikge1xuICAgICAgICBwcmV2aW91c0Rpc3BhdGNoZXIuRChocmVmKTtcbiAgICAgICAgcHJlY29ubmVjdEFzKFwiZG5zLXByZWZldGNoXCIsIGhyZWYsIG51bGwpO1xuICAgICAgfSxcbiAgICAgIEM6IGZ1bmN0aW9uIChocmVmLCBjcm9zc09yaWdpbikge1xuICAgICAgICBwcmV2aW91c0Rpc3BhdGNoZXIuQyhocmVmLCBjcm9zc09yaWdpbik7XG4gICAgICAgIHByZWNvbm5lY3RBcyhcInByZWNvbm5lY3RcIiwgaHJlZiwgY3Jvc3NPcmlnaW4pO1xuICAgICAgfSxcbiAgICAgIEw6IGZ1bmN0aW9uIChocmVmLCBhcywgb3B0aW9ucykge1xuICAgICAgICBwcmV2aW91c0Rpc3BhdGNoZXIuTChocmVmLCBhcywgb3B0aW9ucyk7XG4gICAgICAgIHZhciBvd25lckRvY3VtZW50ID0gZ2xvYmFsRG9jdW1lbnQ7XG4gICAgICAgIGlmIChvd25lckRvY3VtZW50ICYmIGhyZWYgJiYgYXMpIHtcbiAgICAgICAgICB2YXIgcHJlbG9hZFNlbGVjdG9yID1cbiAgICAgICAgICAgICdsaW5rW3JlbD1cInByZWxvYWRcIl1bYXM9XCInICtcbiAgICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoYXMpICtcbiAgICAgICAgICAgICdcIl0nO1xuICAgICAgICAgIFwiaW1hZ2VcIiA9PT0gYXNcbiAgICAgICAgICAgID8gb3B0aW9ucyAmJiBvcHRpb25zLmltYWdlU3JjU2V0XG4gICAgICAgICAgICAgID8gKChwcmVsb2FkU2VsZWN0b3IgKz1cbiAgICAgICAgICAgICAgICAgICdbaW1hZ2VzcmNzZXQ9XCInICtcbiAgICAgICAgICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaW1hZ2VTcmNTZXRcbiAgICAgICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAgICAgJ1wiXScpLFxuICAgICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmltYWdlU2l6ZXMgJiZcbiAgICAgICAgICAgICAgICAgIChwcmVsb2FkU2VsZWN0b3IgKz1cbiAgICAgICAgICAgICAgICAgICAgJ1tpbWFnZXNpemVzPVwiJyArXG4gICAgICAgICAgICAgICAgICAgIGVzY2FwZVNlbGVjdG9yQXR0cmlidXRlVmFsdWVJbnNpZGVEb3VibGVRdW90ZXMoXG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5pbWFnZVNpemVzXG4gICAgICAgICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAgICAgICAnXCJdJykpXG4gICAgICAgICAgICAgIDogKHByZWxvYWRTZWxlY3RvciArPVxuICAgICAgICAgICAgICAgICAgJ1tocmVmPVwiJyArXG4gICAgICAgICAgICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKGhyZWYpICtcbiAgICAgICAgICAgICAgICAgICdcIl0nKVxuICAgICAgICAgICAgOiAocHJlbG9hZFNlbGVjdG9yICs9XG4gICAgICAgICAgICAgICAgJ1tocmVmPVwiJyArXG4gICAgICAgICAgICAgICAgZXNjYXBlU2VsZWN0b3JBdHRyaWJ1dGVWYWx1ZUluc2lkZURvdWJsZVF1b3RlcyhocmVmKSArXG4gICAgICAgICAgICAgICAgJ1wiXScpO1xuICAgICAgICAgIHZhciBrZXkgPSBwcmVsb2FkU2VsZWN0b3I7XG4gICAgICAgICAgc3dpdGNoIChhcykge1xuICAgICAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgICAgIGtleSA9IGdldFN0eWxlS2V5KGhyZWYpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICAgICAga2V5ID0gZ2V0U2NyaXB0S2V5KGhyZWYpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmVsb2FkUHJvcHNNYXAuaGFzKGtleSkgfHxcbiAgICAgICAgICAgICgoaHJlZiA9IGFzc2lnbihcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbDogXCJwcmVsb2FkXCIsXG4gICAgICAgICAgICAgICAgaHJlZjpcbiAgICAgICAgICAgICAgICAgIFwiaW1hZ2VcIiA9PT0gYXMgJiYgb3B0aW9ucyAmJiBvcHRpb25zLmltYWdlU3JjU2V0XG4gICAgICAgICAgICAgICAgICAgID8gdm9pZCAwXG4gICAgICAgICAgICAgICAgICAgIDogaHJlZixcbiAgICAgICAgICAgICAgICBhczogYXNcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBwcmVsb2FkUHJvcHNNYXAuc2V0KGtleSwgaHJlZiksXG4gICAgICAgICAgICBudWxsICE9PSBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocHJlbG9hZFNlbGVjdG9yKSB8fFxuICAgICAgICAgICAgICAoXCJzdHlsZVwiID09PSBhcyAmJlxuICAgICAgICAgICAgICAgIG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAgIGdldFN0eWxlc2hlZXRTZWxlY3RvckZyb21LZXkoa2V5KVxuICAgICAgICAgICAgICAgICkpIHx8XG4gICAgICAgICAgICAgIChcInNjcmlwdFwiID09PSBhcyAmJlxuICAgICAgICAgICAgICAgIG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihnZXRTY3JpcHRTZWxlY3RvckZyb21LZXkoa2V5KSkpIHx8XG4gICAgICAgICAgICAgICgoYXMgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpKSxcbiAgICAgICAgICAgICAgc2V0SW5pdGlhbFByb3BlcnRpZXMoYXMsIFwibGlua1wiLCBocmVmKSxcbiAgICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShhcyksXG4gICAgICAgICAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChhcykpKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG06IGZ1bmN0aW9uIChocmVmLCBvcHRpb25zKSB7XG4gICAgICAgIHByZXZpb3VzRGlzcGF0Y2hlci5tKGhyZWYsIG9wdGlvbnMpO1xuICAgICAgICB2YXIgb3duZXJEb2N1bWVudCA9IGdsb2JhbERvY3VtZW50O1xuICAgICAgICBpZiAob3duZXJEb2N1bWVudCAmJiBocmVmKSB7XG4gICAgICAgICAgdmFyIGFzID1cbiAgICAgICAgICAgICAgb3B0aW9ucyAmJiBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5hcyA/IG9wdGlvbnMuYXMgOiBcInNjcmlwdFwiLFxuICAgICAgICAgICAgcHJlbG9hZFNlbGVjdG9yID1cbiAgICAgICAgICAgICAgJ2xpbmtbcmVsPVwibW9kdWxlcHJlbG9hZFwiXVthcz1cIicgK1xuICAgICAgICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKGFzKSArXG4gICAgICAgICAgICAgICdcIl1baHJlZj1cIicgK1xuICAgICAgICAgICAgICBlc2NhcGVTZWxlY3RvckF0dHJpYnV0ZVZhbHVlSW5zaWRlRG91YmxlUXVvdGVzKGhyZWYpICtcbiAgICAgICAgICAgICAgJ1wiXScsXG4gICAgICAgICAgICBrZXkgPSBwcmVsb2FkU2VsZWN0b3I7XG4gICAgICAgICAgc3dpdGNoIChhcykge1xuICAgICAgICAgICAgY2FzZSBcImF1ZGlvd29ya2xldFwiOlxuICAgICAgICAgICAgY2FzZSBcInBhaW50d29ya2xldFwiOlxuICAgICAgICAgICAgY2FzZSBcInNlcnZpY2V3b3JrZXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzaGFyZWR3b3JrZXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ3b3JrZXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICAgICAga2V5ID0gZ2V0U2NyaXB0S2V5KGhyZWYpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhcHJlbG9hZFByb3BzTWFwLmhhcyhrZXkpICYmXG4gICAgICAgICAgICAoKGhyZWYgPSBhc3NpZ24oeyByZWw6IFwibW9kdWxlcHJlbG9hZFwiLCBocmVmOiBocmVmIH0sIG9wdGlvbnMpKSxcbiAgICAgICAgICAgIHByZWxvYWRQcm9wc01hcC5zZXQoa2V5LCBocmVmKSxcbiAgICAgICAgICAgIG51bGwgPT09IG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihwcmVsb2FkU2VsZWN0b3IpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgc3dpdGNoIChhcykge1xuICAgICAgICAgICAgICBjYXNlIFwiYXVkaW93b3JrbGV0XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJwYWludHdvcmtsZXRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInNlcnZpY2V3b3JrZXJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcInNoYXJlZHdvcmtlclwiOlxuICAgICAgICAgICAgICBjYXNlIFwid29ya2VyXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICAgICAgICBpZiAob3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yKGdldFNjcmlwdFNlbGVjdG9yRnJvbUtleShrZXkpKSlcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcbiAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGFzLCBcImxpbmtcIiwgaHJlZik7XG4gICAgICAgICAgICBtYXJrTm9kZUFzSG9pc3RhYmxlKGFzKTtcbiAgICAgICAgICAgIG93bmVyRG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChhcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgWDogZnVuY3Rpb24gKHNyYywgb3B0aW9ucykge1xuICAgICAgICBwcmV2aW91c0Rpc3BhdGNoZXIuWChzcmMsIG9wdGlvbnMpO1xuICAgICAgICB2YXIgb3duZXJEb2N1bWVudCA9IGdsb2JhbERvY3VtZW50O1xuICAgICAgICBpZiAob3duZXJEb2N1bWVudCAmJiBzcmMpIHtcbiAgICAgICAgICB2YXIgc2NyaXB0cyA9IGdldFJlc291cmNlc0Zyb21Sb290KG93bmVyRG9jdW1lbnQpLmhvaXN0YWJsZVNjcmlwdHMsXG4gICAgICAgICAgICBrZXkgPSBnZXRTY3JpcHRLZXkoc3JjKSxcbiAgICAgICAgICAgIHJlc291cmNlID0gc2NyaXB0cy5nZXQoa2V5KTtcbiAgICAgICAgICByZXNvdXJjZSB8fFxuICAgICAgICAgICAgKChyZXNvdXJjZSA9IG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgZ2V0U2NyaXB0U2VsZWN0b3JGcm9tS2V5KGtleSlcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgcmVzb3VyY2UgfHxcbiAgICAgICAgICAgICAgKChzcmMgPSBhc3NpZ24oeyBzcmM6IHNyYywgYXN5bmM6ICEwIH0sIG9wdGlvbnMpKSxcbiAgICAgICAgICAgICAgKG9wdGlvbnMgPSBwcmVsb2FkUHJvcHNNYXAuZ2V0KGtleSkpICYmXG4gICAgICAgICAgICAgICAgYWRvcHRQcmVsb2FkUHJvcHNGb3JTY3JpcHQoc3JjLCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgKHJlc291cmNlID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSxcbiAgICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShyZXNvdXJjZSksXG4gICAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKHJlc291cmNlLCBcImxpbmtcIiwgc3JjKSxcbiAgICAgICAgICAgICAgb3duZXJEb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHJlc291cmNlKSksXG4gICAgICAgICAgICAocmVzb3VyY2UgPSB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic2NyaXB0XCIsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiByZXNvdXJjZSxcbiAgICAgICAgICAgICAgY291bnQ6IDEsXG4gICAgICAgICAgICAgIHN0YXRlOiBudWxsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHNjcmlwdHMuc2V0KGtleSwgcmVzb3VyY2UpKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFM6IGZ1bmN0aW9uIChocmVmLCBwcmVjZWRlbmNlLCBvcHRpb25zKSB7XG4gICAgICAgIHByZXZpb3VzRGlzcGF0Y2hlci5TKGhyZWYsIHByZWNlZGVuY2UsIG9wdGlvbnMpO1xuICAgICAgICB2YXIgb3duZXJEb2N1bWVudCA9IGdsb2JhbERvY3VtZW50O1xuICAgICAgICBpZiAob3duZXJEb2N1bWVudCAmJiBocmVmKSB7XG4gICAgICAgICAgdmFyIHN0eWxlcyA9IGdldFJlc291cmNlc0Zyb21Sb290KG93bmVyRG9jdW1lbnQpLmhvaXN0YWJsZVN0eWxlcyxcbiAgICAgICAgICAgIGtleSA9IGdldFN0eWxlS2V5KGhyZWYpO1xuICAgICAgICAgIHByZWNlZGVuY2UgPSBwcmVjZWRlbmNlIHx8IFwiZGVmYXVsdFwiO1xuICAgICAgICAgIHZhciByZXNvdXJjZSA9IHN0eWxlcy5nZXQoa2V5KTtcbiAgICAgICAgICBpZiAoIXJlc291cmNlKSB7XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSB7IGxvYWRpbmc6IE5vdExvYWRlZCwgcHJlbG9hZDogbnVsbCB9O1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAocmVzb3VyY2UgPSBvd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgZ2V0U3R5bGVzaGVldFNlbGVjdG9yRnJvbUtleShrZXkpXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHN0YXRlLmxvYWRpbmcgPSBMb2FkZWQgfCBJbnNlcnRlZDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBocmVmID0gYXNzaWduKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHJlbDogXCJzdHlsZXNoZWV0XCIsXG4gICAgICAgICAgICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICAgICAgICAgICAgXCJkYXRhLXByZWNlZGVuY2VcIjogcHJlY2VkZW5jZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAob3B0aW9ucyA9IHByZWxvYWRQcm9wc01hcC5nZXQoa2V5KSkgJiZcbiAgICAgICAgICAgICAgICBhZG9wdFByZWxvYWRQcm9wc0ZvclN0eWxlc2hlZXQoaHJlZiwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIHZhciBsaW5rID0gKHJlc291cmNlID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSk7XG4gICAgICAgICAgICAgIG1hcmtOb2RlQXNIb2lzdGFibGUobGluayk7XG4gICAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKGxpbmssIFwibGlua1wiLCBocmVmKTtcbiAgICAgICAgICAgICAgbGluay5fcCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBsaW5rLm9ubG9hZCA9IHJlc29sdmU7XG4gICAgICAgICAgICAgICAgbGluay5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUubG9hZGluZyB8PSBMb2FkZWQ7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUubG9hZGluZyB8PSBFcnJvcmVkO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgc3RhdGUubG9hZGluZyB8PSBJbnNlcnRlZDtcbiAgICAgICAgICAgICAgaW5zZXJ0U3R5bGVzaGVldChyZXNvdXJjZSwgcHJlY2VkZW5jZSwgb3duZXJEb2N1bWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvdXJjZSA9IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHlsZXNoZWV0XCIsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiByZXNvdXJjZSxcbiAgICAgICAgICAgICAgY291bnQ6IDEsXG4gICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHN0eWxlcy5zZXQoa2V5LCByZXNvdXJjZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgTTogZnVuY3Rpb24gKHNyYywgb3B0aW9ucykge1xuICAgICAgICBwcmV2aW91c0Rpc3BhdGNoZXIuTShzcmMsIG9wdGlvbnMpO1xuICAgICAgICB2YXIgb3duZXJEb2N1bWVudCA9IGdsb2JhbERvY3VtZW50O1xuICAgICAgICBpZiAob3duZXJEb2N1bWVudCAmJiBzcmMpIHtcbiAgICAgICAgICB2YXIgc2NyaXB0cyA9IGdldFJlc291cmNlc0Zyb21Sb290KG93bmVyRG9jdW1lbnQpLmhvaXN0YWJsZVNjcmlwdHMsXG4gICAgICAgICAgICBrZXkgPSBnZXRTY3JpcHRLZXkoc3JjKSxcbiAgICAgICAgICAgIHJlc291cmNlID0gc2NyaXB0cy5nZXQoa2V5KTtcbiAgICAgICAgICByZXNvdXJjZSB8fFxuICAgICAgICAgICAgKChyZXNvdXJjZSA9IG93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgZ2V0U2NyaXB0U2VsZWN0b3JGcm9tS2V5KGtleSlcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgcmVzb3VyY2UgfHxcbiAgICAgICAgICAgICAgKChzcmMgPSBhc3NpZ24oeyBzcmM6IHNyYywgYXN5bmM6ICEwLCB0eXBlOiBcIm1vZHVsZVwiIH0sIG9wdGlvbnMpKSxcbiAgICAgICAgICAgICAgKG9wdGlvbnMgPSBwcmVsb2FkUHJvcHNNYXAuZ2V0KGtleSkpICYmXG4gICAgICAgICAgICAgICAgYWRvcHRQcmVsb2FkUHJvcHNGb3JTY3JpcHQoc3JjLCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgKHJlc291cmNlID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSxcbiAgICAgICAgICAgICAgbWFya05vZGVBc0hvaXN0YWJsZShyZXNvdXJjZSksXG4gICAgICAgICAgICAgIHNldEluaXRpYWxQcm9wZXJ0aWVzKHJlc291cmNlLCBcImxpbmtcIiwgc3JjKSxcbiAgICAgICAgICAgICAgb3duZXJEb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHJlc291cmNlKSksXG4gICAgICAgICAgICAocmVzb3VyY2UgPSB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic2NyaXB0XCIsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiByZXNvdXJjZSxcbiAgICAgICAgICAgICAgY291bnQ6IDEsXG4gICAgICAgICAgICAgIHN0YXRlOiBudWxsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHNjcmlwdHMuc2V0KGtleSwgcmVzb3VyY2UpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdmFyIGdsb2JhbERvY3VtZW50ID0gXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIGRvY3VtZW50ID8gbnVsbCA6IGRvY3VtZW50LFxuICAgICAgdGFnQ2FjaGVzID0gbnVsbCxcbiAgICAgIHN1c3BlbmRlZFN0YXRlID0gbnVsbCxcbiAgICAgIExBU1RfUFJFQ0VERU5DRSA9IG51bGwsXG4gICAgICBwcmVjZWRlbmNlc0J5Um9vdCA9IG51bGwsXG4gICAgICBOb3RQZW5kaW5nVHJhbnNpdGlvbiA9IE5vdFBlbmRpbmcsXG4gICAgICBIb3N0VHJhbnNpdGlvbkNvbnRleHQgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgICAgIFByb3ZpZGVyOiBudWxsLFxuICAgICAgICBDb25zdW1lcjogbnVsbCxcbiAgICAgICAgX2N1cnJlbnRWYWx1ZTogTm90UGVuZGluZ1RyYW5zaXRpb24sXG4gICAgICAgIF9jdXJyZW50VmFsdWUyOiBOb3RQZW5kaW5nVHJhbnNpdGlvbixcbiAgICAgICAgX3RocmVhZENvdW50OiAwXG4gICAgICB9LFxuICAgICAgYmFkZ2VGb3JtYXQgPSBcIiVjJXMlYyBcIixcbiAgICAgIGJhZGdlU3R5bGUgPVxuICAgICAgICBcImJhY2tncm91bmQ6ICNlNmU2ZTY7YmFja2dyb3VuZDogbGlnaHQtZGFyayhyZ2JhKDAsMCwwLDAuMSksIHJnYmEoMjU1LDI1NSwyNTUsMC4yNSkpO2NvbG9yOiAjMDAwMDAwO2NvbG9yOiBsaWdodC1kYXJrKCMwMDAwMDAsICNmZmZmZmYpO2JvcmRlci1yYWRpdXM6IDJweFwiLFxuICAgICAgcmVzZXRTdHlsZSA9IFwiXCIsXG4gICAgICBwYWQgPSBcIiBcIixcbiAgICAgIGJpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbiAgICB2YXIgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9ICExO1xuICAgIHZhciBvdmVycmlkZUhvb2tTdGF0ZSA9IG51bGwsXG4gICAgICBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBudWxsLFxuICAgICAgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID0gbnVsbCxcbiAgICAgIG92ZXJyaWRlUHJvcHMgPSBudWxsLFxuICAgICAgb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGggPSBudWxsLFxuICAgICAgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGggPSBudWxsLFxuICAgICAgc2NoZWR1bGVVcGRhdGUgPSBudWxsLFxuICAgICAgc2V0RXJyb3JIYW5kbGVyID0gbnVsbCxcbiAgICAgIHNldFN1c3BlbnNlSGFuZGxlciA9IG51bGw7XG4gICAgb3ZlcnJpZGVIb29rU3RhdGUgPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBwYXRoLCB2YWx1ZSkge1xuICAgICAgaWQgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuICAgICAgbnVsbCAhPT0gaWQgJiZcbiAgICAgICAgKChwYXRoID0gY29weVdpdGhTZXRJbXBsKGlkLm1lbW9pemVkU3RhdGUsIHBhdGgsIDAsIHZhbHVlKSksXG4gICAgICAgIChpZC5tZW1vaXplZFN0YXRlID0gcGF0aCksXG4gICAgICAgIChpZC5iYXNlU3RhdGUgPSBwYXRoKSxcbiAgICAgICAgKGZpYmVyLm1lbW9pemVkUHJvcHMgPSBhc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpKSxcbiAgICAgICAgKHBhdGggPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpKSxcbiAgICAgICAgbnVsbCAhPT0gcGF0aCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocGF0aCwgZmliZXIsIDIpKTtcbiAgICB9O1xuICAgIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIHBhdGgpIHtcbiAgICAgIGlkID0gZmluZEhvb2soZmliZXIsIGlkKTtcbiAgICAgIG51bGwgIT09IGlkICYmXG4gICAgICAgICgocGF0aCA9IGNvcHlXaXRoRGVsZXRlSW1wbChpZC5tZW1vaXplZFN0YXRlLCBwYXRoLCAwKSksXG4gICAgICAgIChpZC5tZW1vaXplZFN0YXRlID0gcGF0aCksXG4gICAgICAgIChpZC5iYXNlU3RhdGUgPSBwYXRoKSxcbiAgICAgICAgKGZpYmVyLm1lbW9pemVkUHJvcHMgPSBhc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpKSxcbiAgICAgICAgKHBhdGggPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpKSxcbiAgICAgICAgbnVsbCAhPT0gcGF0aCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocGF0aCwgZmliZXIsIDIpKTtcbiAgICB9O1xuICAgIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICAgIGlkID0gZmluZEhvb2soZmliZXIsIGlkKTtcbiAgICAgIG51bGwgIT09IGlkICYmXG4gICAgICAgICgob2xkUGF0aCA9IGNvcHlXaXRoUmVuYW1lKGlkLm1lbW9pemVkU3RhdGUsIG9sZFBhdGgsIG5ld1BhdGgpKSxcbiAgICAgICAgKGlkLm1lbW9pemVkU3RhdGUgPSBvbGRQYXRoKSxcbiAgICAgICAgKGlkLmJhc2VTdGF0ZSA9IG9sZFBhdGgpLFxuICAgICAgICAoZmliZXIubWVtb2l6ZWRQcm9wcyA9IGFzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcykpLFxuICAgICAgICAob2xkUGF0aCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgMikpLFxuICAgICAgICBudWxsICE9PSBvbGRQYXRoICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihvbGRQYXRoLCBmaWJlciwgMikpO1xuICAgIH07XG4gICAgb3ZlcnJpZGVQcm9wcyA9IGZ1bmN0aW9uIChmaWJlciwgcGF0aCwgdmFsdWUpIHtcbiAgICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoU2V0SW1wbChmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoLCAwLCB2YWx1ZSk7XG4gICAgICBmaWJlci5hbHRlcm5hdGUgJiYgKGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHMpO1xuICAgICAgcGF0aCA9IGVucXVldWVDb25jdXJyZW50UmVuZGVyRm9yTGFuZShmaWJlciwgMik7XG4gICAgICBudWxsICE9PSBwYXRoICYmIHNjaGVkdWxlVXBkYXRlT25GaWJlcihwYXRoLCBmaWJlciwgMik7XG4gICAgfTtcbiAgICBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgcGF0aCkge1xuICAgICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhEZWxldGVJbXBsKGZpYmVyLm1lbW9pemVkUHJvcHMsIHBhdGgsIDApO1xuICAgICAgZmliZXIuYWx0ZXJuYXRlICYmIChmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzKTtcbiAgICAgIHBhdGggPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpO1xuICAgICAgbnVsbCAhPT0gcGF0aCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIocGF0aCwgZmliZXIsIDIpO1xuICAgIH07XG4gICAgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoUmVuYW1lKFxuICAgICAgICBmaWJlci5tZW1vaXplZFByb3BzLFxuICAgICAgICBvbGRQYXRoLFxuICAgICAgICBuZXdQYXRoXG4gICAgICApO1xuICAgICAgZmliZXIuYWx0ZXJuYXRlICYmIChmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzKTtcbiAgICAgIG9sZFBhdGggPSBlbnF1ZXVlQ29uY3VycmVudFJlbmRlckZvckxhbmUoZmliZXIsIDIpO1xuICAgICAgbnVsbCAhPT0gb2xkUGF0aCAmJiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIob2xkUGF0aCwgZmliZXIsIDIpO1xuICAgIH07XG4gICAgc2NoZWR1bGVVcGRhdGUgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgIHZhciByb290ID0gZW5xdWV1ZUNvbmN1cnJlbnRSZW5kZXJGb3JMYW5lKGZpYmVyLCAyKTtcbiAgICAgIG51bGwgIT09IHJvb3QgJiYgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKHJvb3QsIGZpYmVyLCAyKTtcbiAgICB9O1xuICAgIHNldEVycm9ySGFuZGxlciA9IGZ1bmN0aW9uIChuZXdTaG91bGRFcnJvckltcGwpIHtcbiAgICAgIHNob3VsZEVycm9ySW1wbCA9IG5ld1Nob3VsZEVycm9ySW1wbDtcbiAgICB9O1xuICAgIHNldFN1c3BlbnNlSGFuZGxlciA9IGZ1bmN0aW9uIChuZXdTaG91bGRTdXNwZW5kSW1wbCkge1xuICAgICAgc2hvdWxkU3VzcGVuZEltcGwgPSBuZXdTaG91bGRTdXNwZW5kSW1wbDtcbiAgICB9O1xuICAgIHZhciBfZW5hYmxlZCA9ICEwLFxuICAgICAgcmV0dXJuX3RhcmdldEluc3QgPSBudWxsLFxuICAgICAgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9ICExLFxuICAgICAgcXVldWVkRm9jdXMgPSBudWxsLFxuICAgICAgcXVldWVkRHJhZyA9IG51bGwsXG4gICAgICBxdWV1ZWRNb3VzZSA9IG51bGwsXG4gICAgICBxdWV1ZWRQb2ludGVycyA9IG5ldyBNYXAoKSxcbiAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcyA9IG5ldyBNYXAoKSxcbiAgICAgIHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cyA9IFtdLFxuICAgICAgZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzID1cbiAgICAgICAgXCJtb3VzZWRvd24gbW91c2V1cCB0b3VjaGNhbmNlbCB0b3VjaGVuZCB0b3VjaHN0YXJ0IGF1eGNsaWNrIGRibGNsaWNrIHBvaW50ZXJjYW5jZWwgcG9pbnRlcmRvd24gcG9pbnRlcnVwIGRyYWdlbmQgZHJhZ3N0YXJ0IGRyb3AgY29tcG9zaXRpb25lbmQgY29tcG9zaXRpb25zdGFydCBrZXlkb3duIGtleXByZXNzIGtleXVwIGlucHV0IHRleHRJbnB1dCBjb3B5IGN1dCBwYXN0ZSBjbGljayBjaGFuZ2UgY29udGV4dG1lbnUgcmVzZXRcIi5zcGxpdChcbiAgICAgICAgICBcIiBcIlxuICAgICAgICApLFxuICAgICAgbGFzdFNjaGVkdWxlZFJlcGxheVF1ZXVlID0gbnVsbDtcbiAgICBSZWFjdERPTUh5ZHJhdGlvblJvb3QucHJvdG90eXBlLnJlbmRlciA9IFJlYWN0RE9NUm9vdC5wcm90b3R5cGUucmVuZGVyID1cbiAgICAgIGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICAgICAgICB2YXIgcm9vdCA9IHRoaXMuX2ludGVybmFsUm9vdDtcbiAgICAgICAgaWYgKG51bGwgPT09IHJvb3QpIHRocm93IEVycm9yKFwiQ2Fubm90IHVwZGF0ZSBhbiB1bm1vdW50ZWQgcm9vdC5cIik7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBhcmdzWzFdXG4gICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcImRvZXMgbm90IHN1cHBvcnQgdGhlIHNlY29uZCBjYWxsYmFjayBhcmd1bWVudC4gVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyIHJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiBhIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGlzVmFsaWRDb250YWluZXIoYXJnc1sxXSlcbiAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIllvdSBwYXNzZWQgYSBjb250YWluZXIgdG8gdGhlIHNlY29uZCBhcmd1bWVudCBvZiByb290LnJlbmRlciguLi4pLiBZb3UgZG9uJ3QgbmVlZCB0byBwYXNzIGl0IGFnYWluIHNpbmNlIHlvdSBhbHJlYWR5IHBhc3NlZCBpdCB0byBjcmVhdGUgdGhlIHJvb3QuXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgYXJnc1sxXSAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiWW91IHBhc3NlZCBhIHNlY29uZCBhcmd1bWVudCB0byByb290LnJlbmRlciguLi4pIGJ1dCBpdCBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgIGFyZ3MgPSBjaGlsZHJlbjtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSByb290LmN1cnJlbnQsXG4gICAgICAgICAgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGN1cnJlbnQpO1xuICAgICAgICB1cGRhdGVDb250YWluZXJJbXBsKGN1cnJlbnQsIGxhbmUsIGFyZ3MsIHJvb3QsIG51bGwsIG51bGwpO1xuICAgICAgfTtcbiAgICBSZWFjdERPTUh5ZHJhdGlvblJvb3QucHJvdG90eXBlLnVubW91bnQgPSBSZWFjdERPTVJvb3QucHJvdG90eXBlLnVubW91bnQgPVxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgYXJnc1swXSAmJlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcImRvZXMgbm90IHN1cHBvcnQgYSBjYWxsYmFjayBhcmd1bWVudC4gVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyIHJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiBhIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuXCJcbiAgICAgICAgICApO1xuICAgICAgICBhcmdzID0gdGhpcy5faW50ZXJuYWxSb290O1xuICAgICAgICBpZiAobnVsbCAhPT0gYXJncykge1xuICAgICAgICAgIHRoaXMuX2ludGVybmFsUm9vdCA9IG51bGw7XG4gICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGFyZ3MuY29udGFpbmVySW5mbztcbiAgICAgICAgICAoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiQXR0ZW1wdGVkIHRvIHN5bmNocm9ub3VzbHkgdW5tb3VudCBhIHJvb3Qgd2hpbGUgUmVhY3Qgd2FzIGFscmVhZHkgcmVuZGVyaW5nLiBSZWFjdCBjYW5ub3QgZmluaXNoIHVubW91bnRpbmcgdGhlIHJvb3QgdW50aWwgdGhlIGN1cnJlbnQgcmVuZGVyIGhhcyBjb21wbGV0ZWQsIHdoaWNoIG1heSBsZWFkIHRvIGEgcmFjZSBjb25kaXRpb24uXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdXBkYXRlQ29udGFpbmVySW1wbChhcmdzLmN1cnJlbnQsIDIsIG51bGwsIGFyZ3MsIG51bGwsIG51bGwpO1xuICAgICAgICAgIGZsdXNoU3luY1dvcmskMSgpO1xuICAgICAgICAgIGNvbnRhaW5lcltpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgUmVhY3RET01IeWRyYXRpb25Sb290LnByb3RvdHlwZS51bnN0YWJsZV9zY2hlZHVsZUh5ZHJhdGlvbiA9IGZ1bmN0aW9uIChcbiAgICAgIHRhcmdldFxuICAgICkge1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICB2YXIgdXBkYXRlUHJpb3JpdHkgPSByZXNvbHZlVXBkYXRlUHJpb3JpdHkoKTtcbiAgICAgICAgdGFyZ2V0ID0geyBibG9ja2VkT246IG51bGwsIHRhcmdldDogdGFyZ2V0LCBwcmlvcml0eTogdXBkYXRlUHJpb3JpdHkgfTtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgaSA8IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5sZW5ndGggJiZcbiAgICAgICAgICAwICE9PSB1cGRhdGVQcmlvcml0eSAmJlxuICAgICAgICAgIHVwZGF0ZVByaW9yaXR5IDwgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzW2ldLnByaW9yaXR5O1xuICAgICAgICAgIGkrK1xuICAgICAgICApO1xuICAgICAgICBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMuc3BsaWNlKGksIDAsIHRhcmdldCk7XG4gICAgICAgIDAgPT09IGkgJiYgYXR0ZW1wdEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0KHRhcmdldCk7XG4gICAgICB9XG4gICAgfTtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGlzb21vcnBoaWNSZWFjdFBhY2thZ2VWZXJzaW9uID0gUmVhY3QudmVyc2lvbjtcbiAgICAgIGlmIChcIjE5LjIuMC1jYW5hcnktOTdjZGQ1ZDMtMjAyNTA3MTBcIiAhPT0gaXNvbW9ycGhpY1JlYWN0UGFja2FnZVZlcnNpb24pXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICdJbmNvbXBhdGlibGUgUmVhY3QgdmVyc2lvbnM6IFRoZSBcInJlYWN0XCIgYW5kIFwicmVhY3QtZG9tXCIgcGFja2FnZXMgbXVzdCBoYXZlIHRoZSBleGFjdCBzYW1lIHZlcnNpb24uIEluc3RlYWQgZ290OlxcbiAgLSByZWFjdDogICAgICAnICtcbiAgICAgICAgICAgIChpc29tb3JwaGljUmVhY3RQYWNrYWdlVmVyc2lvbiArXG4gICAgICAgICAgICAgIFwiXFxuICAtIHJlYWN0LWRvbTogIDE5LjIuMC1jYW5hcnktOTdjZGQ1ZDMtMjAyNTA3MTBcXG5MZWFybiBtb3JlOiBodHRwczovL3JlYWN0LmRldi93YXJuaW5ncy92ZXJzaW9uLW1pc21hdGNoXCIpXG4gICAgICAgICk7XG4gICAgfSkoKTtcbiAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgTWFwICYmXG4gICAgICBudWxsICE9IE1hcC5wcm90b3R5cGUgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIE1hcC5wcm90b3R5cGUuZm9yRWFjaCAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU2V0ICYmXG4gICAgICBudWxsICE9IFNldC5wcm90b3R5cGUgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFNldC5wcm90b3R5cGUuY2xlYXIgJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFNldC5wcm90b3R5cGUuZm9yRWFjaCkgfHxcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiUmVhY3QgZGVwZW5kcyBvbiBNYXAgYW5kIFNldCBidWlsdC1pbiB0eXBlcy4gTWFrZSBzdXJlIHRoYXQgeW91IGxvYWQgYSBwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9yZWFjdC1wb2x5ZmlsbHNcIlxuICAgICAgKTtcbiAgICBSZWFjdERPTVNoYXJlZEludGVybmFscy5maW5kRE9NTm9kZSA9IGZ1bmN0aW9uIChjb21wb25lbnRPckVsZW1lbnQpIHtcbiAgICAgIHZhciBmaWJlciA9IGNvbXBvbmVudE9yRWxlbWVudC5fcmVhY3RJbnRlcm5hbHM7XG4gICAgICBpZiAodm9pZCAwID09PSBmaWJlcikge1xuICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY29tcG9uZW50T3JFbGVtZW50LnJlbmRlcilcbiAgICAgICAgICB0aHJvdyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIik7XG4gICAgICAgIGNvbXBvbmVudE9yRWxlbWVudCA9IE9iamVjdC5rZXlzKGNvbXBvbmVudE9yRWxlbWVudCkuam9pbihcIixcIik7XG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiQXJndW1lbnQgYXBwZWFycyB0byBub3QgYmUgYSBSZWFjdENvbXBvbmVudC4gS2V5czogXCIgK1xuICAgICAgICAgICAgY29tcG9uZW50T3JFbGVtZW50XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb21wb25lbnRPckVsZW1lbnQgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChmaWJlcik7XG4gICAgICBjb21wb25lbnRPckVsZW1lbnQgPVxuICAgICAgICBudWxsICE9PSBjb21wb25lbnRPckVsZW1lbnRcbiAgICAgICAgICA/IGZpbmRDdXJyZW50SG9zdEZpYmVySW1wbChjb21wb25lbnRPckVsZW1lbnQpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgY29tcG9uZW50T3JFbGVtZW50ID1cbiAgICAgICAgbnVsbCA9PT0gY29tcG9uZW50T3JFbGVtZW50ID8gbnVsbCA6IGNvbXBvbmVudE9yRWxlbWVudC5zdGF0ZU5vZGU7XG4gICAgICByZXR1cm4gY29tcG9uZW50T3JFbGVtZW50O1xuICAgIH07XG4gICAgaWYgKFxuICAgICAgIShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpbnRlcm5hbHMgPSB7XG4gICAgICAgICAgYnVuZGxlVHlwZTogMSxcbiAgICAgICAgICB2ZXJzaW9uOiBcIjE5LjIuMC1jYW5hcnktOTdjZGQ1ZDMtMjAyNTA3MTBcIixcbiAgICAgICAgICByZW5kZXJlclBhY2thZ2VOYW1lOiBcInJlYWN0LWRvbVwiLFxuICAgICAgICAgIGN1cnJlbnREaXNwYXRjaGVyUmVmOiBSZWFjdFNoYXJlZEludGVybmFscyxcbiAgICAgICAgICByZWNvbmNpbGVyVmVyc2lvbjogXCIxOS4yLjAtY2FuYXJ5LTk3Y2RkNWQzLTIwMjUwNzEwXCJcbiAgICAgICAgfTtcbiAgICAgICAgaW50ZXJuYWxzLm92ZXJyaWRlSG9va1N0YXRlID0gb3ZlcnJpZGVIb29rU3RhdGU7XG4gICAgICAgIGludGVybmFscy5vdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGggPSBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGg7XG4gICAgICAgIGludGVybmFscy5vdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGggPSBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGg7XG4gICAgICAgIGludGVybmFscy5vdmVycmlkZVByb3BzID0gb3ZlcnJpZGVQcm9wcztcbiAgICAgICAgaW50ZXJuYWxzLm92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID0gb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGg7XG4gICAgICAgIGludGVybmFscy5vdmVycmlkZVByb3BzUmVuYW1lUGF0aCA9IG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoO1xuICAgICAgICBpbnRlcm5hbHMuc2NoZWR1bGVVcGRhdGUgPSBzY2hlZHVsZVVwZGF0ZTtcbiAgICAgICAgaW50ZXJuYWxzLnNldEVycm9ySGFuZGxlciA9IHNldEVycm9ySGFuZGxlcjtcbiAgICAgICAgaW50ZXJuYWxzLnNldFN1c3BlbnNlSGFuZGxlciA9IHNldFN1c3BlbnNlSGFuZGxlcjtcbiAgICAgICAgaW50ZXJuYWxzLnNjaGVkdWxlUmVmcmVzaCA9IHNjaGVkdWxlUmVmcmVzaDtcbiAgICAgICAgaW50ZXJuYWxzLnNjaGVkdWxlUm9vdCA9IHNjaGVkdWxlUm9vdDtcbiAgICAgICAgaW50ZXJuYWxzLnNldFJlZnJlc2hIYW5kbGVyID0gc2V0UmVmcmVzaEhhbmRsZXI7XG4gICAgICAgIGludGVybmFscy5nZXRDdXJyZW50RmliZXIgPSBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scztcbiAgICAgICAgaW50ZXJuYWxzLmdldExhbmVMYWJlbE1hcCA9IGdldExhbmVMYWJlbE1hcDtcbiAgICAgICAgaW50ZXJuYWxzLmluamVjdFByb2ZpbGluZ0hvb2tzID0gaW5qZWN0UHJvZmlsaW5nSG9va3M7XG4gICAgICAgIHJldHVybiBpbmplY3RJbnRlcm5hbHMoaW50ZXJuYWxzKTtcbiAgICAgIH0pKCkgJiZcbiAgICAgIGNhblVzZURPTSAmJlxuICAgICAgd2luZG93LnRvcCA9PT0gd2luZG93LnNlbGYgJiZcbiAgICAgICgoLTEgPCBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoXCJDaHJvbWVcIikgJiZcbiAgICAgICAgLTEgPT09IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIkVkZ2VcIikpIHx8XG4gICAgICAgIC0xIDwgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiRmlyZWZveFwiKSlcbiAgICApIHtcbiAgICAgIHZhciBwcm90b2NvbCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbDtcbiAgICAgIC9eKGh0dHBzP3xmaWxlKTokLy50ZXN0KHByb3RvY29sKSAmJlxuICAgICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgICAgXCIlY0Rvd25sb2FkIHRoZSBSZWFjdCBEZXZUb29scyBmb3IgYSBiZXR0ZXIgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZTogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9yZWFjdC1kZXZ0b29sc1wiICtcbiAgICAgICAgICAgIChcImZpbGU6XCIgPT09IHByb3RvY29sXG4gICAgICAgICAgICAgID8gXCJcXG5Zb3UgbWlnaHQgbmVlZCB0byB1c2UgYSBsb2NhbCBIVFRQIHNlcnZlciAoaW5zdGVhZCBvZiBmaWxlOi8vKTogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9yZWFjdC1kZXZ0b29scy1mYXFcIlxuICAgICAgICAgICAgICA6IFwiXCIpLFxuICAgICAgICAgIFwiZm9udC13ZWlnaHQ6Ym9sZFwiXG4gICAgICAgICk7XG4gICAgfVxuICAgIGV4cG9ydHMuY3JlYXRlUm9vdCA9IGZ1bmN0aW9uIChjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgICAgIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKVxuICAgICAgICB0aHJvdyBFcnJvcihcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIpO1xuICAgICAgd2FybklmUmVhY3RET01Db250YWluZXJJbkRFVihjb250YWluZXIpO1xuICAgICAgdmFyIGlzU3RyaWN0TW9kZSA9ICExLFxuICAgICAgICBpZGVudGlmaWVyUHJlZml4ID0gXCJcIixcbiAgICAgICAgb25VbmNhdWdodEVycm9yID0gZGVmYXVsdE9uVW5jYXVnaHRFcnJvcixcbiAgICAgICAgb25DYXVnaHRFcnJvciA9IGRlZmF1bHRPbkNhdWdodEVycm9yLFxuICAgICAgICBvblJlY292ZXJhYmxlRXJyb3IgPSBkZWZhdWx0T25SZWNvdmVyYWJsZUVycm9yO1xuICAgICAgbnVsbCAhPT0gb3B0aW9ucyAmJlxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMgJiZcbiAgICAgICAgKG9wdGlvbnMuaHlkcmF0ZVxuICAgICAgICAgID8gY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICBcImh5ZHJhdGUgdGhyb3VnaCBjcmVhdGVSb290IGlzIGRlcHJlY2F0ZWQuIFVzZSBSZWFjdERPTUNsaWVudC5oeWRyYXRlUm9vdChjb250YWluZXIsIDxBcHAgLz4pIGluc3RlYWQuXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IFwib2JqZWN0XCIgPT09IHR5cGVvZiBvcHRpb25zICYmXG4gICAgICAgICAgICBudWxsICE9PSBvcHRpb25zICYmXG4gICAgICAgICAgICBvcHRpb25zLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiWW91IHBhc3NlZCBhIEpTWCBlbGVtZW50IHRvIGNyZWF0ZVJvb3QuIFlvdSBwcm9iYWJseSBtZWFudCB0byBjYWxsIHJvb3QucmVuZGVyIGluc3RlYWQuIEV4YW1wbGUgdXNhZ2U6XFxuXFxuICBsZXQgcm9vdCA9IGNyZWF0ZVJvb3QoZG9tQ29udGFpbmVyKTtcXG4gIHJvb3QucmVuZGVyKDxBcHAgLz4pO1wiXG4gICAgICAgICAgICApLFxuICAgICAgICAhMCA9PT0gb3B0aW9ucy51bnN0YWJsZV9zdHJpY3RNb2RlICYmIChpc1N0cmljdE1vZGUgPSAhMCksXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucy5pZGVudGlmaWVyUHJlZml4ICYmXG4gICAgICAgICAgKGlkZW50aWZpZXJQcmVmaXggPSBvcHRpb25zLmlkZW50aWZpZXJQcmVmaXgpLFxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMub25VbmNhdWdodEVycm9yICYmXG4gICAgICAgICAgKG9uVW5jYXVnaHRFcnJvciA9IG9wdGlvbnMub25VbmNhdWdodEVycm9yKSxcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLm9uQ2F1Z2h0RXJyb3IgJiZcbiAgICAgICAgICAob25DYXVnaHRFcnJvciA9IG9wdGlvbnMub25DYXVnaHRFcnJvciksXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucy5vblJlY292ZXJhYmxlRXJyb3IgJiZcbiAgICAgICAgICAob25SZWNvdmVyYWJsZUVycm9yID0gb3B0aW9ucy5vblJlY292ZXJhYmxlRXJyb3IpKTtcbiAgICAgIG9wdGlvbnMgPSBjcmVhdGVGaWJlclJvb3QoXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgMSxcbiAgICAgICAgITEsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIGlzU3RyaWN0TW9kZSxcbiAgICAgICAgaWRlbnRpZmllclByZWZpeCxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgb25VbmNhdWdodEVycm9yLFxuICAgICAgICBvbkNhdWdodEVycm9yLFxuICAgICAgICBvblJlY292ZXJhYmxlRXJyb3IsXG4gICAgICAgIGRlZmF1bHRPbkRlZmF1bHRUcmFuc2l0aW9uSW5kaWNhdG9yXG4gICAgICApO1xuICAgICAgY29udGFpbmVyW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gb3B0aW9ucy5jdXJyZW50O1xuICAgICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMoY29udGFpbmVyKTtcbiAgICAgIHJldHVybiBuZXcgUmVhY3RET01Sb290KG9wdGlvbnMpO1xuICAgIH07XG4gICAgZXhwb3J0cy5oeWRyYXRlUm9vdCA9IGZ1bmN0aW9uIChjb250YWluZXIsIGluaXRpYWxDaGlsZHJlbiwgb3B0aW9ucykge1xuICAgICAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpXG4gICAgICAgIHRocm93IEVycm9yKFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIik7XG4gICAgICB3YXJuSWZSZWFjdERPTUNvbnRhaW5lckluREVWKGNvbnRhaW5lcik7XG4gICAgICB2b2lkIDAgPT09IGluaXRpYWxDaGlsZHJlbiAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiTXVzdCBwcm92aWRlIGluaXRpYWwgY2hpbGRyZW4gYXMgc2Vjb25kIGFyZ3VtZW50IHRvIGh5ZHJhdGVSb290LiBFeGFtcGxlIHVzYWdlOiBoeWRyYXRlUm9vdChkb21Db250YWluZXIsIDxBcHAgLz4pXCJcbiAgICAgICAgKTtcbiAgICAgIHZhciBpc1N0cmljdE1vZGUgPSAhMSxcbiAgICAgICAgaWRlbnRpZmllclByZWZpeCA9IFwiXCIsXG4gICAgICAgIG9uVW5jYXVnaHRFcnJvciA9IGRlZmF1bHRPblVuY2F1Z2h0RXJyb3IsXG4gICAgICAgIG9uQ2F1Z2h0RXJyb3IgPSBkZWZhdWx0T25DYXVnaHRFcnJvcixcbiAgICAgICAgb25SZWNvdmVyYWJsZUVycm9yID0gZGVmYXVsdE9uUmVjb3ZlcmFibGVFcnJvcixcbiAgICAgICAgZm9ybVN0YXRlID0gbnVsbDtcbiAgICAgIG51bGwgIT09IG9wdGlvbnMgJiZcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zICYmXG4gICAgICAgICghMCA9PT0gb3B0aW9ucy51bnN0YWJsZV9zdHJpY3RNb2RlICYmIChpc1N0cmljdE1vZGUgPSAhMCksXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucy5pZGVudGlmaWVyUHJlZml4ICYmXG4gICAgICAgICAgKGlkZW50aWZpZXJQcmVmaXggPSBvcHRpb25zLmlkZW50aWZpZXJQcmVmaXgpLFxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMub25VbmNhdWdodEVycm9yICYmXG4gICAgICAgICAgKG9uVW5jYXVnaHRFcnJvciA9IG9wdGlvbnMub25VbmNhdWdodEVycm9yKSxcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLm9uQ2F1Z2h0RXJyb3IgJiZcbiAgICAgICAgICAob25DYXVnaHRFcnJvciA9IG9wdGlvbnMub25DYXVnaHRFcnJvciksXG4gICAgICAgIHZvaWQgMCAhPT0gb3B0aW9ucy5vblJlY292ZXJhYmxlRXJyb3IgJiZcbiAgICAgICAgICAob25SZWNvdmVyYWJsZUVycm9yID0gb3B0aW9ucy5vblJlY292ZXJhYmxlRXJyb3IpLFxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMuZm9ybVN0YXRlICYmIChmb3JtU3RhdGUgPSBvcHRpb25zLmZvcm1TdGF0ZSkpO1xuICAgICAgaW5pdGlhbENoaWxkcmVuID0gY3JlYXRlRmliZXJSb290KFxuICAgICAgICBjb250YWluZXIsXG4gICAgICAgIDEsXG4gICAgICAgICEwLFxuICAgICAgICBpbml0aWFsQ2hpbGRyZW4sXG4gICAgICAgIG51bGwgIT0gb3B0aW9ucyA/IG9wdGlvbnMgOiBudWxsLFxuICAgICAgICBpc1N0cmljdE1vZGUsXG4gICAgICAgIGlkZW50aWZpZXJQcmVmaXgsXG4gICAgICAgIGZvcm1TdGF0ZSxcbiAgICAgICAgb25VbmNhdWdodEVycm9yLFxuICAgICAgICBvbkNhdWdodEVycm9yLFxuICAgICAgICBvblJlY292ZXJhYmxlRXJyb3IsXG4gICAgICAgIGRlZmF1bHRPbkRlZmF1bHRUcmFuc2l0aW9uSW5kaWNhdG9yXG4gICAgICApO1xuICAgICAgaW5pdGlhbENoaWxkcmVuLmNvbnRleHQgPSBnZXRDb250ZXh0Rm9yU3VidHJlZShudWxsKTtcbiAgICAgIG9wdGlvbnMgPSBpbml0aWFsQ2hpbGRyZW4uY3VycmVudDtcbiAgICAgIGlzU3RyaWN0TW9kZSA9IHJlcXVlc3RVcGRhdGVMYW5lKG9wdGlvbnMpO1xuICAgICAgaXNTdHJpY3RNb2RlID0gZ2V0QnVtcGVkTGFuZUZvckh5ZHJhdGlvbkJ5TGFuZShpc1N0cmljdE1vZGUpO1xuICAgICAgaWRlbnRpZmllclByZWZpeCA9IGNyZWF0ZVVwZGF0ZShpc1N0cmljdE1vZGUpO1xuICAgICAgaWRlbnRpZmllclByZWZpeC5jYWxsYmFjayA9IG51bGw7XG4gICAgICBlbnF1ZXVlVXBkYXRlKG9wdGlvbnMsIGlkZW50aWZpZXJQcmVmaXgsIGlzU3RyaWN0TW9kZSk7XG4gICAgICBvcHRpb25zID0gaXNTdHJpY3RNb2RlO1xuICAgICAgaW5pdGlhbENoaWxkcmVuLmN1cnJlbnQubGFuZXMgPSBvcHRpb25zO1xuICAgICAgbWFya1Jvb3RVcGRhdGVkJDEoaW5pdGlhbENoaWxkcmVuLCBvcHRpb25zKTtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChpbml0aWFsQ2hpbGRyZW4pO1xuICAgICAgY29udGFpbmVyW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldID0gaW5pdGlhbENoaWxkcmVuLmN1cnJlbnQ7XG4gICAgICBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhjb250YWluZXIpO1xuICAgICAgcmV0dXJuIG5ldyBSZWFjdERPTUh5ZHJhdGlvblJvb3QoaW5pdGlhbENoaWxkcmVuKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudmVyc2lvbiA9IFwiMTkuMi4wLWNhbmFyeS05N2NkZDVkMy0yMDI1MDcxMFwiO1xuICAgIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcCAmJlxuICAgICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wKEVycm9yKCkpO1xuICB9KSgpO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js":
/*!****************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js ***!
  \****************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/**\n * @license React\n * react-dom.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n  (function () {\n    function noop() {}\n    function testStringCoercion(value) {\n      return \"\" + value;\n    }\n    function createPortal$1(children, containerInfo, implementation) {\n      var key =\n        3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n      try {\n        testStringCoercion(key);\n        var JSCompiler_inline_result = !1;\n      } catch (e) {\n        JSCompiler_inline_result = !0;\n      }\n      JSCompiler_inline_result &&\n        (console.error(\n          \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n          (\"function\" === typeof Symbol &&\n            Symbol.toStringTag &&\n            key[Symbol.toStringTag]) ||\n            key.constructor.name ||\n            \"Object\"\n        ),\n        testStringCoercion(key));\n      return {\n        $$typeof: REACT_PORTAL_TYPE,\n        key: null == key ? null : \"\" + key,\n        children: children,\n        containerInfo: containerInfo,\n        implementation: implementation\n      };\n    }\n    function getCrossOriginStringAs(as, input) {\n      if (\"font\" === as) return \"\";\n      if (\"string\" === typeof input)\n        return \"use-credentials\" === input ? input : \"\";\n    }\n    function getValueDescriptorExpectingObjectForWarning(thing) {\n      return null === thing\n        ? \"`null`\"\n        : void 0 === thing\n          ? \"`undefined`\"\n          : \"\" === thing\n            ? \"an empty string\"\n            : 'something with type \"' + typeof thing + '\"';\n    }\n    function getValueDescriptorExpectingEnumForWarning(thing) {\n      return null === thing\n        ? \"`null`\"\n        : void 0 === thing\n          ? \"`undefined`\"\n          : \"\" === thing\n            ? \"an empty string\"\n            : \"string\" === typeof thing\n              ? JSON.stringify(thing)\n              : \"number\" === typeof thing\n                ? \"`\" + thing + \"`\"\n                : 'something with type \"' + typeof thing + '\"';\n    }\n    function resolveDispatcher() {\n      var dispatcher = ReactSharedInternals.H;\n      null === dispatcher &&\n        console.error(\n          \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n        );\n      return dispatcher;\n    }\n    \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n      \"function\" ===\n        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n    var React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"),\n      Internals = {\n        d: {\n          f: noop,\n          r: function () {\n            throw Error(\n              \"Invalid form element. requestFormReset must be passed a form that was rendered by React.\"\n            );\n          },\n          D: noop,\n          C: noop,\n          L: noop,\n          m: noop,\n          X: noop,\n          S: noop,\n          M: noop\n        },\n        p: 0,\n        findDOMNode: null\n      },\n      REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n      ReactSharedInternals =\n        React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\n    (\"function\" === typeof Map &&\n      null != Map.prototype &&\n      \"function\" === typeof Map.prototype.forEach &&\n      \"function\" === typeof Set &&\n      null != Set.prototype &&\n      \"function\" === typeof Set.prototype.clear &&\n      \"function\" === typeof Set.prototype.forEach) ||\n      console.error(\n        \"React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\"\n      );\n    exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n      Internals;\n    exports.createPortal = function (children, container) {\n      var key =\n        2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n      if (\n        !container ||\n        (1 !== container.nodeType &&\n          9 !== container.nodeType &&\n          11 !== container.nodeType)\n      )\n        throw Error(\"Target container is not a DOM element.\");\n      return createPortal$1(children, container, null, key);\n    };\n    exports.flushSync = function (fn) {\n      var previousTransition = ReactSharedInternals.T,\n        previousUpdatePriority = Internals.p;\n      try {\n        if (((ReactSharedInternals.T = null), (Internals.p = 2), fn))\n          return fn();\n      } finally {\n        (ReactSharedInternals.T = previousTransition),\n          (Internals.p = previousUpdatePriority),\n          Internals.d.f() &&\n            console.error(\n              \"flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task.\"\n            );\n      }\n    };\n    exports.preconnect = function (href, options) {\n      \"string\" === typeof href && href\n        ? null != options && \"object\" !== typeof options\n          ? console.error(\n              \"ReactDOM.preconnect(): Expected the `options` argument (second) to be an object but encountered %s instead. The only supported option at this time is `crossOrigin` which accepts a string.\",\n              getValueDescriptorExpectingEnumForWarning(options)\n            )\n          : null != options &&\n            \"string\" !== typeof options.crossOrigin &&\n            console.error(\n              \"ReactDOM.preconnect(): Expected the `crossOrigin` option (second argument) to be a string but encountered %s instead. Try removing this option or passing a string value instead.\",\n              getValueDescriptorExpectingObjectForWarning(options.crossOrigin)\n            )\n        : console.error(\n            \"ReactDOM.preconnect(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.\",\n            getValueDescriptorExpectingObjectForWarning(href)\n          );\n      \"string\" === typeof href &&\n        (options\n          ? ((options = options.crossOrigin),\n            (options =\n              \"string\" === typeof options\n                ? \"use-credentials\" === options\n                  ? options\n                  : \"\"\n                : void 0))\n          : (options = null),\n        Internals.d.C(href, options));\n    };\n    exports.prefetchDNS = function (href) {\n      if (\"string\" !== typeof href || !href)\n        console.error(\n          \"ReactDOM.prefetchDNS(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.\",\n          getValueDescriptorExpectingObjectForWarning(href)\n        );\n      else if (1 < arguments.length) {\n        var options = arguments[1];\n        \"object\" === typeof options && options.hasOwnProperty(\"crossOrigin\")\n          ? console.error(\n              \"ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. It looks like the you are attempting to set a crossOrigin property for this DNS lookup hint. Browsers do not perform DNS queries using CORS and setting this attribute on the resource hint has no effect. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.\",\n              getValueDescriptorExpectingEnumForWarning(options)\n            )\n          : console.error(\n              \"ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.\",\n              getValueDescriptorExpectingEnumForWarning(options)\n            );\n      }\n      \"string\" === typeof href && Internals.d.D(href);\n    };\n    exports.preinit = function (href, options) {\n      \"string\" === typeof href && href\n        ? null == options || \"object\" !== typeof options\n          ? console.error(\n              \"ReactDOM.preinit(): Expected the `options` argument (second) to be an object with an `as` property describing the type of resource to be preinitialized but encountered %s instead.\",\n              getValueDescriptorExpectingEnumForWarning(options)\n            )\n          : \"style\" !== options.as &&\n            \"script\" !== options.as &&\n            console.error(\n              'ReactDOM.preinit(): Expected the `as` property in the `options` argument (second) to contain a valid value describing the type of resource to be preinitialized but encountered %s instead. Valid values for `as` are \"style\" and \"script\".',\n              getValueDescriptorExpectingEnumForWarning(options.as)\n            )\n        : console.error(\n            \"ReactDOM.preinit(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.\",\n            getValueDescriptorExpectingObjectForWarning(href)\n          );\n      if (\n        \"string\" === typeof href &&\n        options &&\n        \"string\" === typeof options.as\n      ) {\n        var as = options.as,\n          crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n          integrity =\n            \"string\" === typeof options.integrity ? options.integrity : void 0,\n          fetchPriority =\n            \"string\" === typeof options.fetchPriority\n              ? options.fetchPriority\n              : void 0;\n        \"style\" === as\n          ? Internals.d.S(\n              href,\n              \"string\" === typeof options.precedence\n                ? options.precedence\n                : void 0,\n              {\n                crossOrigin: crossOrigin,\n                integrity: integrity,\n                fetchPriority: fetchPriority\n              }\n            )\n          : \"script\" === as &&\n            Internals.d.X(href, {\n              crossOrigin: crossOrigin,\n              integrity: integrity,\n              fetchPriority: fetchPriority,\n              nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n            });\n      }\n    };\n    exports.preinitModule = function (href, options) {\n      var encountered = \"\";\n      (\"string\" === typeof href && href) ||\n        (encountered +=\n          \" The `href` argument encountered was \" +\n          getValueDescriptorExpectingObjectForWarning(href) +\n          \".\");\n      void 0 !== options && \"object\" !== typeof options\n        ? (encountered +=\n            \" The `options` argument encountered was \" +\n            getValueDescriptorExpectingObjectForWarning(options) +\n            \".\")\n        : options &&\n          \"as\" in options &&\n          \"script\" !== options.as &&\n          (encountered +=\n            \" The `as` option encountered was \" +\n            getValueDescriptorExpectingEnumForWarning(options.as) +\n            \".\");\n      if (encountered)\n        console.error(\n          \"ReactDOM.preinitModule(): Expected up to two arguments, a non-empty `href` string and, optionally, an `options` object with a valid `as` property.%s\",\n          encountered\n        );\n      else\n        switch (\n          ((encountered =\n            options && \"string\" === typeof options.as ? options.as : \"script\"),\n          encountered)\n        ) {\n          case \"script\":\n            break;\n          default:\n            (encountered =\n              getValueDescriptorExpectingEnumForWarning(encountered)),\n              console.error(\n                'ReactDOM.preinitModule(): Currently the only supported \"as\" type for this function is \"script\" but received \"%s\" instead. This warning was generated for `href` \"%s\". In the future other module types will be supported, aligning with the import-attributes proposal. Learn more here: (https://github.com/tc39/proposal-import-attributes)',\n                encountered,\n                href\n              );\n        }\n      if (\"string\" === typeof href)\n        if (\"object\" === typeof options && null !== options) {\n          if (null == options.as || \"script\" === options.as)\n            (encountered = getCrossOriginStringAs(\n              options.as,\n              options.crossOrigin\n            )),\n              Internals.d.M(href, {\n                crossOrigin: encountered,\n                integrity:\n                  \"string\" === typeof options.integrity\n                    ? options.integrity\n                    : void 0,\n                nonce:\n                  \"string\" === typeof options.nonce ? options.nonce : void 0\n              });\n        } else null == options && Internals.d.M(href);\n    };\n    exports.preload = function (href, options) {\n      var encountered = \"\";\n      (\"string\" === typeof href && href) ||\n        (encountered +=\n          \" The `href` argument encountered was \" +\n          getValueDescriptorExpectingObjectForWarning(href) +\n          \".\");\n      null == options || \"object\" !== typeof options\n        ? (encountered +=\n            \" The `options` argument encountered was \" +\n            getValueDescriptorExpectingObjectForWarning(options) +\n            \".\")\n        : (\"string\" === typeof options.as && options.as) ||\n          (encountered +=\n            \" The `as` option encountered was \" +\n            getValueDescriptorExpectingObjectForWarning(options.as) +\n            \".\");\n      encountered &&\n        console.error(\n          'ReactDOM.preload(): Expected two arguments, a non-empty `href` string and an `options` object with an `as` property valid for a `<link rel=\"preload\" as=\"...\" />` tag.%s',\n          encountered\n        );\n      if (\n        \"string\" === typeof href &&\n        \"object\" === typeof options &&\n        null !== options &&\n        \"string\" === typeof options.as\n      ) {\n        encountered = options.as;\n        var crossOrigin = getCrossOriginStringAs(\n          encountered,\n          options.crossOrigin\n        );\n        Internals.d.L(href, encountered, {\n          crossOrigin: crossOrigin,\n          integrity:\n            \"string\" === typeof options.integrity ? options.integrity : void 0,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n          type: \"string\" === typeof options.type ? options.type : void 0,\n          fetchPriority:\n            \"string\" === typeof options.fetchPriority\n              ? options.fetchPriority\n              : void 0,\n          referrerPolicy:\n            \"string\" === typeof options.referrerPolicy\n              ? options.referrerPolicy\n              : void 0,\n          imageSrcSet:\n            \"string\" === typeof options.imageSrcSet\n              ? options.imageSrcSet\n              : void 0,\n          imageSizes:\n            \"string\" === typeof options.imageSizes\n              ? options.imageSizes\n              : void 0,\n          media: \"string\" === typeof options.media ? options.media : void 0\n        });\n      }\n    };\n    exports.preloadModule = function (href, options) {\n      var encountered = \"\";\n      (\"string\" === typeof href && href) ||\n        (encountered +=\n          \" The `href` argument encountered was \" +\n          getValueDescriptorExpectingObjectForWarning(href) +\n          \".\");\n      void 0 !== options && \"object\" !== typeof options\n        ? (encountered +=\n            \" The `options` argument encountered was \" +\n            getValueDescriptorExpectingObjectForWarning(options) +\n            \".\")\n        : options &&\n          \"as\" in options &&\n          \"string\" !== typeof options.as &&\n          (encountered +=\n            \" The `as` option encountered was \" +\n            getValueDescriptorExpectingObjectForWarning(options.as) +\n            \".\");\n      encountered &&\n        console.error(\n          'ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a `<link rel=\"modulepreload\" as=\"...\" />` tag.%s',\n          encountered\n        );\n      \"string\" === typeof href &&\n        (options\n          ? ((encountered = getCrossOriginStringAs(\n              options.as,\n              options.crossOrigin\n            )),\n            Internals.d.m(href, {\n              as:\n                \"string\" === typeof options.as && \"script\" !== options.as\n                  ? options.as\n                  : void 0,\n              crossOrigin: encountered,\n              integrity:\n                \"string\" === typeof options.integrity\n                  ? options.integrity\n                  : void 0\n            }))\n          : Internals.d.m(href));\n    };\n    exports.requestFormReset = function (form) {\n      Internals.d.r(form);\n    };\n    exports.unstable_batchedUpdates = function (fn, a) {\n      return fn(a);\n    };\n    exports.useFormState = function (action, initialState, permalink) {\n      return resolveDispatcher().useFormState(action, initialState, permalink);\n    };\n    exports.useFormStatus = function () {\n      return resolveDispatcher().useHostTransitionStatus();\n    };\n    exports.version = \"19.2.0-canary-97cdd5d3-20250710\";\n    \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n      \"function\" ===\n        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n  })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYixLQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxrUEFBMEI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksb0VBQW9FO0FBQ3hFO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksaUJBQWlCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksa0JBQWtCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxtQkFBbUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGVBQWU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsSUFBSSxxQkFBcUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2YsVUFBVTtBQUNWO0FBQ0EsSUFBSSxlQUFlO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxJQUFJLHFCQUFxQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLElBQUksd0JBQXdCO0FBQzVCO0FBQ0E7QUFDQSxJQUFJLCtCQUErQjtBQUNuQztBQUNBO0FBQ0EsSUFBSSxvQkFBb0I7QUFDeEI7QUFDQTtBQUNBLElBQUkscUJBQXFCO0FBQ3pCO0FBQ0E7QUFDQSxJQUFJLGVBQWU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNC43X0BiYWJlbCtjb3JlQDcuMjguM19Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHBsYXl3cmlnaHQrdGVzdEAxLjU1LjBfcmVhY3QtZF80N2ZmMzgxM2Q3OTA1NjZkZjI1NGEyMTYzNTUwYzJkNS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LWRvbS9janMvcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWRvbS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgJiZcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBub29wKCkge31cbiAgICBmdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBcIlwiICsgdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVBvcnRhbCQxKGNoaWxkcmVuLCBjb250YWluZXJJbmZvLCBpbXBsZW1lbnRhdGlvbikge1xuICAgICAgdmFyIGtleSA9XG4gICAgICAgIDMgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzNdID8gYXJndW1lbnRzWzNdIDogbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbihrZXkpO1xuICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITE7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICEwO1xuICAgICAgfVxuICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ICYmXG4gICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLiBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS5cIixcbiAgICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU3ltYm9sICYmXG4gICAgICAgICAgICBTeW1ib2wudG9TdHJpbmdUYWcgJiZcbiAgICAgICAgICAgIGtleVtTeW1ib2wudG9TdHJpbmdUYWddKSB8fFxuICAgICAgICAgICAga2V5LmNvbnN0cnVjdG9yLm5hbWUgfHxcbiAgICAgICAgICAgIFwiT2JqZWN0XCJcbiAgICAgICAgKSxcbiAgICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKGtleSkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX1BPUlRBTF9UWVBFLFxuICAgICAgICBrZXk6IG51bGwgPT0ga2V5ID8gbnVsbCA6IFwiXCIgKyBrZXksXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgICAgY29udGFpbmVySW5mbzogY29udGFpbmVySW5mbyxcbiAgICAgICAgaW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uXG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDcm9zc09yaWdpblN0cmluZ0FzKGFzLCBpbnB1dCkge1xuICAgICAgaWYgKFwiZm9udFwiID09PSBhcykgcmV0dXJuIFwiXCI7XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGlucHV0KVxuICAgICAgICByZXR1cm4gXCJ1c2UtY3JlZGVudGlhbHNcIiA9PT0gaW5wdXQgPyBpbnB1dCA6IFwiXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcodGhpbmcpIHtcbiAgICAgIHJldHVybiBudWxsID09PSB0aGluZ1xuICAgICAgICA/IFwiYG51bGxgXCJcbiAgICAgICAgOiB2b2lkIDAgPT09IHRoaW5nXG4gICAgICAgICAgPyBcImB1bmRlZmluZWRgXCJcbiAgICAgICAgICA6IFwiXCIgPT09IHRoaW5nXG4gICAgICAgICAgICA/IFwiYW4gZW1wdHkgc3RyaW5nXCJcbiAgICAgICAgICAgIDogJ3NvbWV0aGluZyB3aXRoIHR5cGUgXCInICsgdHlwZW9mIHRoaW5nICsgJ1wiJztcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nRW51bUZvcldhcm5pbmcodGhpbmcpIHtcbiAgICAgIHJldHVybiBudWxsID09PSB0aGluZ1xuICAgICAgICA/IFwiYG51bGxgXCJcbiAgICAgICAgOiB2b2lkIDAgPT09IHRoaW5nXG4gICAgICAgICAgPyBcImB1bmRlZmluZWRgXCJcbiAgICAgICAgICA6IFwiXCIgPT09IHRoaW5nXG4gICAgICAgICAgICA/IFwiYW4gZW1wdHkgc3RyaW5nXCJcbiAgICAgICAgICAgIDogXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHRoaW5nXG4gICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkodGhpbmcpXG4gICAgICAgICAgICAgIDogXCJudW1iZXJcIiA9PT0gdHlwZW9mIHRoaW5nXG4gICAgICAgICAgICAgICAgPyBcImBcIiArIHRoaW5nICsgXCJgXCJcbiAgICAgICAgICAgICAgICA6ICdzb21ldGhpbmcgd2l0aCB0eXBlIFwiJyArIHR5cGVvZiB0aGluZyArICdcIic7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVEaXNwYXRjaGVyKCkge1xuICAgICAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgbnVsbCA9PT0gZGlzcGF0Y2hlciAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLlwiXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlcjtcbiAgICB9XG4gICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydCAmJlxuICAgICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydChFcnJvcigpKTtcbiAgICB2YXIgUmVhY3QgPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0XCIpLFxuICAgICAgSW50ZXJuYWxzID0ge1xuICAgICAgICBkOiB7XG4gICAgICAgICAgZjogbm9vcCxcbiAgICAgICAgICByOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgXCJJbnZhbGlkIGZvcm0gZWxlbWVudC4gcmVxdWVzdEZvcm1SZXNldCBtdXN0IGJlIHBhc3NlZCBhIGZvcm0gdGhhdCB3YXMgcmVuZGVyZWQgYnkgUmVhY3QuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBEOiBub29wLFxuICAgICAgICAgIEM6IG5vb3AsXG4gICAgICAgICAgTDogbm9vcCxcbiAgICAgICAgICBtOiBub29wLFxuICAgICAgICAgIFg6IG5vb3AsXG4gICAgICAgICAgUzogbm9vcCxcbiAgICAgICAgICBNOiBub29wXG4gICAgICAgIH0sXG4gICAgICAgIHA6IDAsXG4gICAgICAgIGZpbmRET01Ob2RlOiBudWxsXG4gICAgICB9LFxuICAgICAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLFxuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPVxuICAgICAgICBSZWFjdC5fX0NMSUVOVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREU7XG4gICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIE1hcCAmJlxuICAgICAgbnVsbCAhPSBNYXAucHJvdG90eXBlICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBNYXAucHJvdG90eXBlLmZvckVhY2ggJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFNldCAmJlxuICAgICAgbnVsbCAhPSBTZXQucHJvdG90eXBlICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTZXQucHJvdG90eXBlLmNsZWFyICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTZXQucHJvdG90eXBlLmZvckVhY2gpIHx8XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIlJlYWN0IGRlcGVuZHMgb24gTWFwIGFuZCBTZXQgYnVpbHQtaW4gdHlwZXMuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgcG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHNcIlxuICAgICAgKTtcbiAgICBleHBvcnRzLl9fRE9NX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSA9XG4gICAgICBJbnRlcm5hbHM7XG4gICAgZXhwb3J0cy5jcmVhdGVQb3J0YWwgPSBmdW5jdGlvbiAoY2hpbGRyZW4sIGNvbnRhaW5lcikge1xuICAgICAgdmFyIGtleSA9XG4gICAgICAgIDIgPCBhcmd1bWVudHMubGVuZ3RoICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzJdID8gYXJndW1lbnRzWzJdIDogbnVsbDtcbiAgICAgIGlmIChcbiAgICAgICAgIWNvbnRhaW5lciB8fFxuICAgICAgICAoMSAhPT0gY29udGFpbmVyLm5vZGVUeXBlICYmXG4gICAgICAgICAgOSAhPT0gY29udGFpbmVyLm5vZGVUeXBlICYmXG4gICAgICAgICAgMTEgIT09IGNvbnRhaW5lci5ub2RlVHlwZSlcbiAgICAgIClcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiKTtcbiAgICAgIHJldHVybiBjcmVhdGVQb3J0YWwkMShjaGlsZHJlbiwgY29udGFpbmVyLCBudWxsLCBrZXkpO1xuICAgIH07XG4gICAgZXhwb3J0cy5mbHVzaFN5bmMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgIHZhciBwcmV2aW91c1RyYW5zaXRpb24gPSBSZWFjdFNoYXJlZEludGVybmFscy5ULFxuICAgICAgICBwcmV2aW91c1VwZGF0ZVByaW9yaXR5ID0gSW50ZXJuYWxzLnA7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoKChSZWFjdFNoYXJlZEludGVybmFscy5UID0gbnVsbCksIChJbnRlcm5hbHMucCA9IDIpLCBmbikpXG4gICAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IHByZXZpb3VzVHJhbnNpdGlvbiksXG4gICAgICAgICAgKEludGVybmFscy5wID0gcHJldmlvdXNVcGRhdGVQcmlvcml0eSksXG4gICAgICAgICAgSW50ZXJuYWxzLmQuZigpICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcImZsdXNoU3luYyB3YXMgY2FsbGVkIGZyb20gaW5zaWRlIGEgbGlmZWN5Y2xlIG1ldGhvZC4gUmVhY3QgY2Fubm90IGZsdXNoIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuIENvbnNpZGVyIG1vdmluZyB0aGlzIGNhbGwgdG8gYSBzY2hlZHVsZXIgdGFzayBvciBtaWNybyB0YXNrLlwiXG4gICAgICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgZXhwb3J0cy5wcmVjb25uZWN0ID0gZnVuY3Rpb24gKGhyZWYsIG9wdGlvbnMpIHtcbiAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmIGhyZWZcbiAgICAgICAgPyBudWxsICE9IG9wdGlvbnMgJiYgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9wdGlvbnNcbiAgICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVhY3RET00ucHJlY29ubmVjdCgpOiBFeHBlY3RlZCB0aGUgYG9wdGlvbnNgIGFyZ3VtZW50IChzZWNvbmQpIHRvIGJlIGFuIG9iamVjdCBidXQgZW5jb3VudGVyZWQgJXMgaW5zdGVhZC4gVGhlIG9ubHkgc3VwcG9ydGVkIG9wdGlvbiBhdCB0aGlzIHRpbWUgaXMgYGNyb3NzT3JpZ2luYCB3aGljaCBhY2NlcHRzIGEgc3RyaW5nLlwiLFxuICAgICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdFbnVtRm9yV2FybmluZyhvcHRpb25zKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogbnVsbCAhPSBvcHRpb25zICYmXG4gICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2Ygb3B0aW9ucy5jcm9zc09yaWdpbiAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdERPTS5wcmVjb25uZWN0KCk6IEV4cGVjdGVkIHRoZSBgY3Jvc3NPcmlnaW5gIG9wdGlvbiAoc2Vjb25kIGFyZ3VtZW50KSB0byBiZSBhIHN0cmluZyBidXQgZW5jb3VudGVyZWQgJXMgaW5zdGVhZC4gVHJ5IHJlbW92aW5nIHRoaXMgb3B0aW9uIG9yIHBhc3NpbmcgYSBzdHJpbmcgdmFsdWUgaW5zdGVhZC5cIixcbiAgICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhvcHRpb25zLmNyb3NzT3JpZ2luKVxuICAgICAgICAgICAgKVxuICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlJlYWN0RE9NLnByZWNvbm5lY3QoKTogRXhwZWN0ZWQgdGhlIGBocmVmYCBhcmd1bWVudCAoZmlyc3QpIHRvIGJlIGEgbm9uLWVtcHR5IHN0cmluZyBidXQgZW5jb3VudGVyZWQgJXMgaW5zdGVhZC5cIixcbiAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcoaHJlZilcbiAgICAgICAgICApO1xuICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYgJiZcbiAgICAgICAgKG9wdGlvbnNcbiAgICAgICAgICA/ICgob3B0aW9ucyA9IG9wdGlvbnMuY3Jvc3NPcmlnaW4pLFxuICAgICAgICAgICAgKG9wdGlvbnMgPVxuICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9uc1xuICAgICAgICAgICAgICAgID8gXCJ1c2UtY3JlZGVudGlhbHNcIiA9PT0gb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgPyBvcHRpb25zXG4gICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICA6IHZvaWQgMCkpXG4gICAgICAgICAgOiAob3B0aW9ucyA9IG51bGwpLFxuICAgICAgICBJbnRlcm5hbHMuZC5DKGhyZWYsIG9wdGlvbnMpKTtcbiAgICB9O1xuICAgIGV4cG9ydHMucHJlZmV0Y2hETlMgPSBmdW5jdGlvbiAoaHJlZikge1xuICAgICAgaWYgKFwic3RyaW5nXCIgIT09IHR5cGVvZiBocmVmIHx8ICFocmVmKVxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiUmVhY3RET00ucHJlZmV0Y2hETlMoKTogRXhwZWN0ZWQgdGhlIGBocmVmYCBhcmd1bWVudCAoZmlyc3QpIHRvIGJlIGEgbm9uLWVtcHR5IHN0cmluZyBidXQgZW5jb3VudGVyZWQgJXMgaW5zdGVhZC5cIixcbiAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKGhyZWYpXG4gICAgICAgICk7XG4gICAgICBlbHNlIGlmICgxIDwgYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShcImNyb3NzT3JpZ2luXCIpXG4gICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlYWN0RE9NLnByZWZldGNoRE5TKCk6IEV4cGVjdGVkIG9ubHkgb25lIGFyZ3VtZW50LCBgaHJlZmAsIGJ1dCBlbmNvdW50ZXJlZCAlcyBhcyBhIHNlY29uZCBhcmd1bWVudCBpbnN0ZWFkLiBUaGlzIGFyZ3VtZW50IGlzIHJlc2VydmVkIGZvciBmdXR1cmUgb3B0aW9ucyBhbmQgaXMgY3VycmVudGx5IGRpc2FsbG93ZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBzZXQgYSBjcm9zc09yaWdpbiBwcm9wZXJ0eSBmb3IgdGhpcyBETlMgbG9va3VwIGhpbnQuIEJyb3dzZXJzIGRvIG5vdCBwZXJmb3JtIEROUyBxdWVyaWVzIHVzaW5nIENPUlMgYW5kIHNldHRpbmcgdGhpcyBhdHRyaWJ1dGUgb24gdGhlIHJlc291cmNlIGhpbnQgaGFzIG5vIGVmZmVjdC4gVHJ5IGNhbGxpbmcgUmVhY3RET00ucHJlZmV0Y2hETlMoKSB3aXRoIGp1c3QgYSBzaW5nbGUgc3RyaW5nIGFyZ3VtZW50LCBgaHJlZmAuXCIsXG4gICAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ0VudW1Gb3JXYXJuaW5nKG9wdGlvbnMpXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlYWN0RE9NLnByZWZldGNoRE5TKCk6IEV4cGVjdGVkIG9ubHkgb25lIGFyZ3VtZW50LCBgaHJlZmAsIGJ1dCBlbmNvdW50ZXJlZCAlcyBhcyBhIHNlY29uZCBhcmd1bWVudCBpbnN0ZWFkLiBUaGlzIGFyZ3VtZW50IGlzIHJlc2VydmVkIGZvciBmdXR1cmUgb3B0aW9ucyBhbmQgaXMgY3VycmVudGx5IGRpc2FsbG93ZWQuIFRyeSBjYWxsaW5nIFJlYWN0RE9NLnByZWZldGNoRE5TKCkgd2l0aCBqdXN0IGEgc2luZ2xlIHN0cmluZyBhcmd1bWVudCwgYGhyZWZgLlwiLFxuICAgICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdFbnVtRm9yV2FybmluZyhvcHRpb25zKVxuICAgICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmIEludGVybmFscy5kLkQoaHJlZik7XG4gICAgfTtcbiAgICBleHBvcnRzLnByZWluaXQgPSBmdW5jdGlvbiAoaHJlZiwgb3B0aW9ucykge1xuICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYgJiYgaHJlZlxuICAgICAgICA/IG51bGwgPT0gb3B0aW9ucyB8fCBcIm9iamVjdFwiICE9PSB0eXBlb2Ygb3B0aW9uc1xuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdERPTS5wcmVpbml0KCk6IEV4cGVjdGVkIHRoZSBgb3B0aW9uc2AgYXJndW1lbnQgKHNlY29uZCkgdG8gYmUgYW4gb2JqZWN0IHdpdGggYW4gYGFzYCBwcm9wZXJ0eSBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIHJlc291cmNlIHRvIGJlIHByZWluaXRpYWxpemVkIGJ1dCBlbmNvdW50ZXJlZCAlcyBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdFbnVtRm9yV2FybmluZyhvcHRpb25zKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogXCJzdHlsZVwiICE9PSBvcHRpb25zLmFzICYmXG4gICAgICAgICAgICBcInNjcmlwdFwiICE9PSBvcHRpb25zLmFzICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAnUmVhY3RET00ucHJlaW5pdCgpOiBFeHBlY3RlZCB0aGUgYGFzYCBwcm9wZXJ0eSBpbiB0aGUgYG9wdGlvbnNgIGFyZ3VtZW50IChzZWNvbmQpIHRvIGNvbnRhaW4gYSB2YWxpZCB2YWx1ZSBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIHJlc291cmNlIHRvIGJlIHByZWluaXRpYWxpemVkIGJ1dCBlbmNvdW50ZXJlZCAlcyBpbnN0ZWFkLiBWYWxpZCB2YWx1ZXMgZm9yIGBhc2AgYXJlIFwic3R5bGVcIiBhbmQgXCJzY3JpcHRcIi4nLFxuICAgICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdFbnVtRm9yV2FybmluZyhvcHRpb25zLmFzKVxuICAgICAgICAgICAgKVxuICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlJlYWN0RE9NLnByZWluaXQoKTogRXhwZWN0ZWQgdGhlIGBocmVmYCBhcmd1bWVudCAoZmlyc3QpIHRvIGJlIGEgbm9uLWVtcHR5IHN0cmluZyBidXQgZW5jb3VudGVyZWQgJXMgaW5zdGVhZC5cIixcbiAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcoaHJlZilcbiAgICAgICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJlxuICAgICAgICBvcHRpb25zICYmXG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmFzXG4gICAgICApIHtcbiAgICAgICAgdmFyIGFzID0gb3B0aW9ucy5hcyxcbiAgICAgICAgICBjcm9zc09yaWdpbiA9IGdldENyb3NzT3JpZ2luU3RyaW5nQXMoYXMsIG9wdGlvbnMuY3Jvc3NPcmlnaW4pLFxuICAgICAgICAgIGludGVncml0eSA9XG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5pbnRlZ3JpdHkgPyBvcHRpb25zLmludGVncml0eSA6IHZvaWQgMCxcbiAgICAgICAgICBmZXRjaFByaW9yaXR5ID1cbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmZldGNoUHJpb3JpdHlcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmZldGNoUHJpb3JpdHlcbiAgICAgICAgICAgICAgOiB2b2lkIDA7XG4gICAgICAgIFwic3R5bGVcIiA9PT0gYXNcbiAgICAgICAgICA/IEludGVybmFscy5kLlMoXG4gICAgICAgICAgICAgIGhyZWYsXG4gICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLnByZWNlZGVuY2VcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMucHJlY2VkZW5jZVxuICAgICAgICAgICAgICAgIDogdm9pZCAwLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IGNyb3NzT3JpZ2luLFxuICAgICAgICAgICAgICAgIGludGVncml0eTogaW50ZWdyaXR5LFxuICAgICAgICAgICAgICAgIGZldGNoUHJpb3JpdHk6IGZldGNoUHJpb3JpdHlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogXCJzY3JpcHRcIiA9PT0gYXMgJiZcbiAgICAgICAgICAgIEludGVybmFscy5kLlgoaHJlZiwge1xuICAgICAgICAgICAgICBjcm9zc09yaWdpbjogY3Jvc3NPcmlnaW4sXG4gICAgICAgICAgICAgIGludGVncml0eTogaW50ZWdyaXR5LFxuICAgICAgICAgICAgICBmZXRjaFByaW9yaXR5OiBmZXRjaFByaW9yaXR5LFxuICAgICAgICAgICAgICBub25jZTogXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMubm9uY2UgPyBvcHRpb25zLm5vbmNlIDogdm9pZCAwXG4gICAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGV4cG9ydHMucHJlaW5pdE1vZHVsZSA9IGZ1bmN0aW9uIChocmVmLCBvcHRpb25zKSB7XG4gICAgICB2YXIgZW5jb3VudGVyZWQgPSBcIlwiO1xuICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmIGhyZWYpIHx8XG4gICAgICAgIChlbmNvdW50ZXJlZCArPVxuICAgICAgICAgIFwiIFRoZSBgaHJlZmAgYXJndW1lbnQgZW5jb3VudGVyZWQgd2FzIFwiICtcbiAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKGhyZWYpICtcbiAgICAgICAgICBcIi5cIik7XG4gICAgICB2b2lkIDAgIT09IG9wdGlvbnMgJiYgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9wdGlvbnNcbiAgICAgICAgPyAoZW5jb3VudGVyZWQgKz1cbiAgICAgICAgICAgIFwiIFRoZSBgb3B0aW9uc2AgYXJndW1lbnQgZW5jb3VudGVyZWQgd2FzIFwiICtcbiAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcob3B0aW9ucykgK1xuICAgICAgICAgICAgXCIuXCIpXG4gICAgICAgIDogb3B0aW9ucyAmJlxuICAgICAgICAgIFwiYXNcIiBpbiBvcHRpb25zICYmXG4gICAgICAgICAgXCJzY3JpcHRcIiAhPT0gb3B0aW9ucy5hcyAmJlxuICAgICAgICAgIChlbmNvdW50ZXJlZCArPVxuICAgICAgICAgICAgXCIgVGhlIGBhc2Agb3B0aW9uIGVuY291bnRlcmVkIHdhcyBcIiArXG4gICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdFbnVtRm9yV2FybmluZyhvcHRpb25zLmFzKSArXG4gICAgICAgICAgICBcIi5cIik7XG4gICAgICBpZiAoZW5jb3VudGVyZWQpXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJSZWFjdERPTS5wcmVpbml0TW9kdWxlKCk6IEV4cGVjdGVkIHVwIHRvIHR3byBhcmd1bWVudHMsIGEgbm9uLWVtcHR5IGBocmVmYCBzdHJpbmcgYW5kLCBvcHRpb25hbGx5LCBhbiBgb3B0aW9uc2Agb2JqZWN0IHdpdGggYSB2YWxpZCBgYXNgIHByb3BlcnR5LiVzXCIsXG4gICAgICAgICAgZW5jb3VudGVyZWRcbiAgICAgICAgKTtcbiAgICAgIGVsc2VcbiAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAoKGVuY291bnRlcmVkID1cbiAgICAgICAgICAgIG9wdGlvbnMgJiYgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuYXMgPyBvcHRpb25zLmFzIDogXCJzY3JpcHRcIiksXG4gICAgICAgICAgZW5jb3VudGVyZWQpXG4gICAgICAgICkge1xuICAgICAgICAgIGNhc2UgXCJzY3JpcHRcIjpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAoZW5jb3VudGVyZWQgPVxuICAgICAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdFbnVtRm9yV2FybmluZyhlbmNvdW50ZXJlZCkpLFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICdSZWFjdERPTS5wcmVpbml0TW9kdWxlKCk6IEN1cnJlbnRseSB0aGUgb25seSBzdXBwb3J0ZWQgXCJhc1wiIHR5cGUgZm9yIHRoaXMgZnVuY3Rpb24gaXMgXCJzY3JpcHRcIiBidXQgcmVjZWl2ZWQgXCIlc1wiIGluc3RlYWQuIFRoaXMgd2FybmluZyB3YXMgZ2VuZXJhdGVkIGZvciBgaHJlZmAgXCIlc1wiLiBJbiB0aGUgZnV0dXJlIG90aGVyIG1vZHVsZSB0eXBlcyB3aWxsIGJlIHN1cHBvcnRlZCwgYWxpZ25pbmcgd2l0aCB0aGUgaW1wb3J0LWF0dHJpYnV0ZXMgcHJvcG9zYWwuIExlYXJuIG1vcmUgaGVyZTogKGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWltcG9ydC1hdHRyaWJ1dGVzKScsXG4gICAgICAgICAgICAgICAgZW5jb3VudGVyZWQsXG4gICAgICAgICAgICAgICAgaHJlZlxuICAgICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYpXG4gICAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2Ygb3B0aW9ucyAmJiBudWxsICE9PSBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKG51bGwgPT0gb3B0aW9ucy5hcyB8fCBcInNjcmlwdFwiID09PSBvcHRpb25zLmFzKVxuICAgICAgICAgICAgKGVuY291bnRlcmVkID0gZ2V0Q3Jvc3NPcmlnaW5TdHJpbmdBcyhcbiAgICAgICAgICAgICAgb3B0aW9ucy5hcyxcbiAgICAgICAgICAgICAgb3B0aW9ucy5jcm9zc09yaWdpblxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIEludGVybmFscy5kLk0oaHJlZiwge1xuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBlbmNvdW50ZXJlZCxcbiAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6XG4gICAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5pbnRlZ3JpdHlcbiAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25zLmludGVncml0eVxuICAgICAgICAgICAgICAgICAgICA6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICBub25jZTpcbiAgICAgICAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLm5vbmNlID8gb3B0aW9ucy5ub25jZSA6IHZvaWQgMFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIG51bGwgPT0gb3B0aW9ucyAmJiBJbnRlcm5hbHMuZC5NKGhyZWYpO1xuICAgIH07XG4gICAgZXhwb3J0cy5wcmVsb2FkID0gZnVuY3Rpb24gKGhyZWYsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBlbmNvdW50ZXJlZCA9IFwiXCI7XG4gICAgICAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGhyZWYgJiYgaHJlZikgfHxcbiAgICAgICAgKGVuY291bnRlcmVkICs9XG4gICAgICAgICAgXCIgVGhlIGBocmVmYCBhcmd1bWVudCBlbmNvdW50ZXJlZCB3YXMgXCIgK1xuICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcoaHJlZikgK1xuICAgICAgICAgIFwiLlwiKTtcbiAgICAgIG51bGwgPT0gb3B0aW9ucyB8fCBcIm9iamVjdFwiICE9PSB0eXBlb2Ygb3B0aW9uc1xuICAgICAgICA/IChlbmNvdW50ZXJlZCArPVxuICAgICAgICAgICAgXCIgVGhlIGBvcHRpb25zYCBhcmd1bWVudCBlbmNvdW50ZXJlZCB3YXMgXCIgK1xuICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhvcHRpb25zKSArXG4gICAgICAgICAgICBcIi5cIilcbiAgICAgICAgOiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuYXMgJiYgb3B0aW9ucy5hcykgfHxcbiAgICAgICAgICAoZW5jb3VudGVyZWQgKz1cbiAgICAgICAgICAgIFwiIFRoZSBgYXNgIG9wdGlvbiBlbmNvdW50ZXJlZCB3YXMgXCIgK1xuICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhvcHRpb25zLmFzKSArXG4gICAgICAgICAgICBcIi5cIik7XG4gICAgICBlbmNvdW50ZXJlZCAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdSZWFjdERPTS5wcmVsb2FkKCk6IEV4cGVjdGVkIHR3byBhcmd1bWVudHMsIGEgbm9uLWVtcHR5IGBocmVmYCBzdHJpbmcgYW5kIGFuIGBvcHRpb25zYCBvYmplY3Qgd2l0aCBhbiBgYXNgIHByb3BlcnR5IHZhbGlkIGZvciBhIGA8bGluayByZWw9XCJwcmVsb2FkXCIgYXM9XCIuLi5cIiAvPmAgdGFnLiVzJyxcbiAgICAgICAgICBlbmNvdW50ZXJlZFxuICAgICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgaHJlZiAmJlxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygb3B0aW9ucyAmJlxuICAgICAgICBudWxsICE9PSBvcHRpb25zICYmXG4gICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmFzXG4gICAgICApIHtcbiAgICAgICAgZW5jb3VudGVyZWQgPSBvcHRpb25zLmFzO1xuICAgICAgICB2YXIgY3Jvc3NPcmlnaW4gPSBnZXRDcm9zc09yaWdpblN0cmluZ0FzKFxuICAgICAgICAgIGVuY291bnRlcmVkLFxuICAgICAgICAgIG9wdGlvbnMuY3Jvc3NPcmlnaW5cbiAgICAgICAgKTtcbiAgICAgICAgSW50ZXJuYWxzLmQuTChocmVmLCBlbmNvdW50ZXJlZCwge1xuICAgICAgICAgIGNyb3NzT3JpZ2luOiBjcm9zc09yaWdpbixcbiAgICAgICAgICBpbnRlZ3JpdHk6XG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5pbnRlZ3JpdHkgPyBvcHRpb25zLmludGVncml0eSA6IHZvaWQgMCxcbiAgICAgICAgICBub25jZTogXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMubm9uY2UgPyBvcHRpb25zLm5vbmNlIDogdm9pZCAwLFxuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLnR5cGUgPyBvcHRpb25zLnR5cGUgOiB2b2lkIDAsXG4gICAgICAgICAgZmV0Y2hQcmlvcml0eTpcbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmZldGNoUHJpb3JpdHlcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmZldGNoUHJpb3JpdHlcbiAgICAgICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgICAgcmVmZXJyZXJQb2xpY3k6XG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5yZWZlcnJlclBvbGljeVxuICAgICAgICAgICAgICA/IG9wdGlvbnMucmVmZXJyZXJQb2xpY3lcbiAgICAgICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgICAgaW1hZ2VTcmNTZXQ6XG4gICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2Ygb3B0aW9ucy5pbWFnZVNyY1NldFxuICAgICAgICAgICAgICA/IG9wdGlvbnMuaW1hZ2VTcmNTZXRcbiAgICAgICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgICAgaW1hZ2VTaXplczpcbiAgICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLmltYWdlU2l6ZXNcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmltYWdlU2l6ZXNcbiAgICAgICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgICAgbWVkaWE6IFwic3RyaW5nXCIgPT09IHR5cGVvZiBvcHRpb25zLm1lZGlhID8gb3B0aW9ucy5tZWRpYSA6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGV4cG9ydHMucHJlbG9hZE1vZHVsZSA9IGZ1bmN0aW9uIChocmVmLCBvcHRpb25zKSB7XG4gICAgICB2YXIgZW5jb3VudGVyZWQgPSBcIlwiO1xuICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmIGhyZWYpIHx8XG4gICAgICAgIChlbmNvdW50ZXJlZCArPVxuICAgICAgICAgIFwiIFRoZSBgaHJlZmAgYXJndW1lbnQgZW5jb3VudGVyZWQgd2FzIFwiICtcbiAgICAgICAgICBnZXRWYWx1ZURlc2NyaXB0b3JFeHBlY3RpbmdPYmplY3RGb3JXYXJuaW5nKGhyZWYpICtcbiAgICAgICAgICBcIi5cIik7XG4gICAgICB2b2lkIDAgIT09IG9wdGlvbnMgJiYgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG9wdGlvbnNcbiAgICAgICAgPyAoZW5jb3VudGVyZWQgKz1cbiAgICAgICAgICAgIFwiIFRoZSBgb3B0aW9uc2AgYXJndW1lbnQgZW5jb3VudGVyZWQgd2FzIFwiICtcbiAgICAgICAgICAgIGdldFZhbHVlRGVzY3JpcHRvckV4cGVjdGluZ09iamVjdEZvcldhcm5pbmcob3B0aW9ucykgK1xuICAgICAgICAgICAgXCIuXCIpXG4gICAgICAgIDogb3B0aW9ucyAmJlxuICAgICAgICAgIFwiYXNcIiBpbiBvcHRpb25zICYmXG4gICAgICAgICAgXCJzdHJpbmdcIiAhPT0gdHlwZW9mIG9wdGlvbnMuYXMgJiZcbiAgICAgICAgICAoZW5jb3VudGVyZWQgKz1cbiAgICAgICAgICAgIFwiIFRoZSBgYXNgIG9wdGlvbiBlbmNvdW50ZXJlZCB3YXMgXCIgK1xuICAgICAgICAgICAgZ2V0VmFsdWVEZXNjcmlwdG9yRXhwZWN0aW5nT2JqZWN0Rm9yV2FybmluZyhvcHRpb25zLmFzKSArXG4gICAgICAgICAgICBcIi5cIik7XG4gICAgICBlbmNvdW50ZXJlZCAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICdSZWFjdERPTS5wcmVsb2FkTW9kdWxlKCk6IEV4cGVjdGVkIHR3byBhcmd1bWVudHMsIGEgbm9uLWVtcHR5IGBocmVmYCBzdHJpbmcgYW5kLCBvcHRpb25hbGx5LCBhbiBgb3B0aW9uc2Agb2JqZWN0IHdpdGggYW4gYGFzYCBwcm9wZXJ0eSB2YWxpZCBmb3IgYSBgPGxpbmsgcmVsPVwibW9kdWxlcHJlbG9hZFwiIGFzPVwiLi4uXCIgLz5gIHRhZy4lcycsXG4gICAgICAgICAgZW5jb3VudGVyZWRcbiAgICAgICAgKTtcbiAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiBocmVmICYmXG4gICAgICAgIChvcHRpb25zXG4gICAgICAgICAgPyAoKGVuY291bnRlcmVkID0gZ2V0Q3Jvc3NPcmlnaW5TdHJpbmdBcyhcbiAgICAgICAgICAgICAgb3B0aW9ucy5hcyxcbiAgICAgICAgICAgICAgb3B0aW9ucy5jcm9zc09yaWdpblxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBJbnRlcm5hbHMuZC5tKGhyZWYsIHtcbiAgICAgICAgICAgICAgYXM6XG4gICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuYXMgJiYgXCJzY3JpcHRcIiAhPT0gb3B0aW9ucy5hc1xuICAgICAgICAgICAgICAgICAgPyBvcHRpb25zLmFzXG4gICAgICAgICAgICAgICAgICA6IHZvaWQgMCxcbiAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IGVuY291bnRlcmVkLFxuICAgICAgICAgICAgICBpbnRlZ3JpdHk6XG4gICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIG9wdGlvbnMuaW50ZWdyaXR5XG4gICAgICAgICAgICAgICAgICA/IG9wdGlvbnMuaW50ZWdyaXR5XG4gICAgICAgICAgICAgICAgICA6IHZvaWQgMFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgOiBJbnRlcm5hbHMuZC5tKGhyZWYpKTtcbiAgICB9O1xuICAgIGV4cG9ydHMucmVxdWVzdEZvcm1SZXNldCA9IGZ1bmN0aW9uIChmb3JtKSB7XG4gICAgICBJbnRlcm5hbHMuZC5yKGZvcm0pO1xuICAgIH07XG4gICAgZXhwb3J0cy51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyA9IGZ1bmN0aW9uIChmbiwgYSkge1xuICAgICAgcmV0dXJuIGZuKGEpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VGb3JtU3RhdGUgPSBmdW5jdGlvbiAoYWN0aW9uLCBpbml0aWFsU3RhdGUsIHBlcm1hbGluaykge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlRm9ybVN0YXRlKGFjdGlvbiwgaW5pdGlhbFN0YXRlLCBwZXJtYWxpbmspO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VGb3JtU3RhdHVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlSG9zdFRyYW5zaXRpb25TdGF0dXMoKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudmVyc2lvbiA9IFwiMTkuMi4wLWNhbmFyeS05N2NkZDVkMy0yMDI1MDcxMFwiO1xuICAgIFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gJiZcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT1cbiAgICAgICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcCAmJlxuICAgICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdG9wKEVycm9yKCkpO1xuICB9KSgpO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/client.js":
/*!*********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/client.js ***!
  \*********************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (true) {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/react-dom-client.development.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/cjs/react-dom-client.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1kb20vY2xpZW50LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLElBQUksS0FBcUMsRUFBRSxFQUsxQyxDQUFDO0FBQ0YsRUFBRSxvVUFBaUU7QUFDbkUiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS40LjdfQGJhYmVsK2NvcmVANy4yOC4zX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMF9AcGxheXdyaWdodCt0ZXN0QDEuNTUuMF9yZWFjdC1kXzQ3ZmYzODEzZDc5MDU2NmRmMjU0YTIxNjM1NTBjMmQ1L25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtZG9tL2NsaWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGNoZWNrRENFKCkge1xuICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG4gIGlmIChcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID09PSAndW5kZWZpbmVkJyB8fFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVGhpcyBicmFuY2ggaXMgdW5yZWFjaGFibGUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkXG4gICAgLy8gaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBjb25kaXRpb24gaXMgdHJ1ZSBvbmx5IGluIGRldmVsb3BtZW50LlxuICAgIC8vIFRoZXJlZm9yZSBpZiB0aGUgYnJhbmNoIGlzIHN0aWxsIGhlcmUsIGRlYWQgY29kZSBlbGltaW5hdGlvbiB3YXNuJ3RcbiAgICAvLyBwcm9wZXJseSBhcHBsaWVkLlxuICAgIC8vIERvbid0IGNoYW5nZSB0aGUgbWVzc2FnZS4gUmVhY3QgRGV2VG9vbHMgcmVsaWVzIG9uIGl0LiBBbHNvIG1ha2Ugc3VyZVxuICAgIC8vIHRoaXMgbWVzc2FnZSBkb2Vzbid0IG9jY3VyIGVsc2V3aGVyZSBpbiB0aGlzIGZ1bmN0aW9uLCBvciBpdCB3aWxsIGNhdXNlXG4gICAgLy8gYSBmYWxzZSBwb3NpdGl2ZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ15fXicpO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvZGUgYWJvdmUgaGFzIGJlZW4gZGVhZCBjb2RlIGVsaW1pbmF0ZWQgKERDRSdkKS5cbiAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoY2hlY2tEQ0UpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBEZXZUb29scyBzaG91bGRuJ3QgY3Jhc2ggUmVhY3QsIG5vIG1hdHRlciB3aGF0LlxuICAgIC8vIFdlIHNob3VsZCBzdGlsbCByZXBvcnQgaW4gY2FzZSB3ZSBicmVhayB0aGlzIGNvZGUuXG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICB9XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIC8vIERDRSBjaGVjayBzaG91bGQgaGFwcGVuIGJlZm9yZSBSZWFjdERPTSBidW5kbGUgZXhlY3V0ZXMgc28gdGhhdFxuICAvLyBEZXZUb29scyBjYW4gcmVwb3J0IGJhZCBtaW5pZmljYXRpb24gZHVyaW5nIGluamVjdGlvbi5cbiAgY2hlY2tEQ0UoKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20tY2xpZW50LnByb2R1Y3Rpb24uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLWNsaWVudC5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/client.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/index.js":
/*!********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/index.js ***!
  \********************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (true) {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/react-dom.development.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1kb20vaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSSxLQUFxQyxFQUFFLEVBSzFDLENBQUM7QUFDRixFQUFFLHNUQUEwRDtBQUM1RCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1kb20vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBjaGVja0RDRSgpIHtcbiAgLyogZ2xvYmFsIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAqL1xuICBpZiAoXG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFICE9PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIFRoaXMgYnJhbmNoIGlzIHVucmVhY2hhYmxlIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZFxuICAgIC8vIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgY29uZGl0aW9uIGlzIHRydWUgb25seSBpbiBkZXZlbG9wbWVudC5cbiAgICAvLyBUaGVyZWZvcmUgaWYgdGhlIGJyYW5jaCBpcyBzdGlsbCBoZXJlLCBkZWFkIGNvZGUgZWxpbWluYXRpb24gd2Fzbid0XG4gICAgLy8gcHJvcGVybHkgYXBwbGllZC5cbiAgICAvLyBEb24ndCBjaGFuZ2UgdGhlIG1lc3NhZ2UuIFJlYWN0IERldlRvb2xzIHJlbGllcyBvbiBpdC4gQWxzbyBtYWtlIHN1cmVcbiAgICAvLyB0aGlzIG1lc3NhZ2UgZG9lc24ndCBvY2N1ciBlbHNld2hlcmUgaW4gdGhpcyBmdW5jdGlvbiwgb3IgaXQgd2lsbCBjYXVzZVxuICAgIC8vIGEgZmFsc2UgcG9zaXRpdmUuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdeX14nKTtcbiAgfVxuICB0cnkge1xuICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBjb2RlIGFib3ZlIGhhcyBiZWVuIGRlYWQgY29kZSBlbGltaW5hdGVkIChEQ0UnZCkuXG4gICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGNoZWNrRENFKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gRGV2VG9vbHMgc2hvdWxkbid0IGNyYXNoIFJlYWN0LCBubyBtYXR0ZXIgd2hhdC5cbiAgICAvLyBXZSBzaG91bGQgc3RpbGwgcmVwb3J0IGluIGNhc2Ugd2UgYnJlYWsgdGhpcyBjb2RlLlxuICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgfVxufVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICAvLyBEQ0UgY2hlY2sgc2hvdWxkIGhhcHBlbiBiZWZvcmUgUmVhY3RET00gYnVuZGxlIGV4ZWN1dGVzIHNvIHRoYXRcbiAgLy8gRGV2VG9vbHMgY2FuIHJlcG9ydCBiYWQgbWluaWZpY2F0aW9uIGR1cmluZyBpbmplY3Rpb24uXG4gIGNoZWNrRENFKCk7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLnByb2R1Y3Rpb24uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-is/cjs/react-is.development.js":
/*!**************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-is/cjs/react-is.development.js ***!
  \**************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/**\n * @license React\n * react-is.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n  (function () {\n    function typeOf(object) {\n      if (\"object\" === typeof object && null !== object) {\n        var $$typeof = object.$$typeof;\n        switch ($$typeof) {\n          case REACT_ELEMENT_TYPE:\n            switch (((object = object.type), object)) {\n              case REACT_FRAGMENT_TYPE:\n              case REACT_PROFILER_TYPE:\n              case REACT_STRICT_MODE_TYPE:\n              case REACT_SUSPENSE_TYPE:\n              case REACT_SUSPENSE_LIST_TYPE:\n              case REACT_VIEW_TRANSITION_TYPE:\n                return object;\n              default:\n                switch (((object = object && object.$$typeof), object)) {\n                  case REACT_CONTEXT_TYPE:\n                  case REACT_FORWARD_REF_TYPE:\n                  case REACT_LAZY_TYPE:\n                  case REACT_MEMO_TYPE:\n                    return object;\n                  case REACT_CONSUMER_TYPE:\n                    return object;\n                  default:\n                    return $$typeof;\n                }\n            }\n          case REACT_PORTAL_TYPE:\n            return $$typeof;\n        }\n      }\n    }\n    var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n      REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n      REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n      REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n      REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n      REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n      REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n      REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n      REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n      REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n      REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n      REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n      REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n      REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\n    exports.ContextConsumer = REACT_CONSUMER_TYPE;\n    exports.ContextProvider = REACT_CONTEXT_TYPE;\n    exports.Element = REACT_ELEMENT_TYPE;\n    exports.ForwardRef = REACT_FORWARD_REF_TYPE;\n    exports.Fragment = REACT_FRAGMENT_TYPE;\n    exports.Lazy = REACT_LAZY_TYPE;\n    exports.Memo = REACT_MEMO_TYPE;\n    exports.Portal = REACT_PORTAL_TYPE;\n    exports.Profiler = REACT_PROFILER_TYPE;\n    exports.StrictMode = REACT_STRICT_MODE_TYPE;\n    exports.Suspense = REACT_SUSPENSE_TYPE;\n    exports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;\n    exports.isContextConsumer = function (object) {\n      return typeOf(object) === REACT_CONSUMER_TYPE;\n    };\n    exports.isContextProvider = function (object) {\n      return typeOf(object) === REACT_CONTEXT_TYPE;\n    };\n    exports.isElement = function (object) {\n      return (\n        \"object\" === typeof object &&\n        null !== object &&\n        object.$$typeof === REACT_ELEMENT_TYPE\n      );\n    };\n    exports.isForwardRef = function (object) {\n      return typeOf(object) === REACT_FORWARD_REF_TYPE;\n    };\n    exports.isFragment = function (object) {\n      return typeOf(object) === REACT_FRAGMENT_TYPE;\n    };\n    exports.isLazy = function (object) {\n      return typeOf(object) === REACT_LAZY_TYPE;\n    };\n    exports.isMemo = function (object) {\n      return typeOf(object) === REACT_MEMO_TYPE;\n    };\n    exports.isPortal = function (object) {\n      return typeOf(object) === REACT_PORTAL_TYPE;\n    };\n    exports.isProfiler = function (object) {\n      return typeOf(object) === REACT_PROFILER_TYPE;\n    };\n    exports.isStrictMode = function (object) {\n      return typeOf(object) === REACT_STRICT_MODE_TYPE;\n    };\n    exports.isSuspense = function (object) {\n      return typeOf(object) === REACT_SUSPENSE_TYPE;\n    };\n    exports.isSuspenseList = function (object) {\n      return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n    };\n    exports.isValidElementType = function (type) {\n      return \"string\" === typeof type ||\n        \"function\" === typeof type ||\n        type === REACT_FRAGMENT_TYPE ||\n        type === REACT_PROFILER_TYPE ||\n        type === REACT_STRICT_MODE_TYPE ||\n        type === REACT_SUSPENSE_TYPE ||\n        type === REACT_SUSPENSE_LIST_TYPE ||\n        (\"object\" === typeof type &&\n          null !== type &&\n          (type.$$typeof === REACT_LAZY_TYPE ||\n            type.$$typeof === REACT_MEMO_TYPE ||\n            type.$$typeof === REACT_CONTEXT_TYPE ||\n            type.$$typeof === REACT_CONSUMER_TYPE ||\n            type.$$typeof === REACT_FORWARD_REF_TYPE ||\n            type.$$typeof === REACT_CLIENT_REFERENCE ||\n            void 0 !== type.getModuleId))\n        ? !0\n        : !1;\n    };\n    exports.typeOf = typeOf;\n  })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhO0FBQ2IsS0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHVCQUF1QjtBQUMzQixJQUFJLHVCQUF1QjtBQUMzQixJQUFJLGVBQWU7QUFDbkIsSUFBSSxrQkFBa0I7QUFDdEIsSUFBSSxnQkFBZ0I7QUFDcEIsSUFBSSxZQUFZO0FBQ2hCLElBQUksWUFBWTtBQUNoQixJQUFJLGNBQWM7QUFDbEIsSUFBSSxnQkFBZ0I7QUFDcEIsSUFBSSxrQkFBa0I7QUFDdEIsSUFBSSxnQkFBZ0I7QUFDcEIsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx5QkFBeUI7QUFDN0I7QUFDQTtBQUNBLElBQUkseUJBQXlCO0FBQzdCO0FBQ0E7QUFDQSxJQUFJLGlCQUFpQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLG9CQUFvQjtBQUN4QjtBQUNBO0FBQ0EsSUFBSSxrQkFBa0I7QUFDdEI7QUFDQTtBQUNBLElBQUksY0FBYztBQUNsQjtBQUNBO0FBQ0EsSUFBSSxjQUFjO0FBQ2xCO0FBQ0E7QUFDQSxJQUFJLGdCQUFnQjtBQUNwQjtBQUNBO0FBQ0EsSUFBSSxrQkFBa0I7QUFDdEI7QUFDQTtBQUNBLElBQUksb0JBQW9CO0FBQ3hCO0FBQ0E7QUFDQSxJQUFJLGtCQUFrQjtBQUN0QjtBQUNBO0FBQ0EsSUFBSSxzQkFBc0I7QUFDMUI7QUFDQTtBQUNBLElBQUksMEJBQTBCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxjQUFjO0FBQ2xCLEdBQUciLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS40LjdfQGJhYmVsK2NvcmVANy4yOC4zX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMF9AcGxheXdyaWdodCt0ZXN0QDEuNTUuMF9yZWFjdC1kXzQ3ZmYzODEzZDc5MDU2NmRmMjU0YTIxNjM1NTBjMmQ1L25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViAmJlxuICAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2Ygb2JqZWN0ICYmIG51bGwgIT09IG9iamVjdCkge1xuICAgICAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG4gICAgICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICAgIHN3aXRjaCAoKChvYmplY3QgPSBvYmplY3QudHlwZSksIG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9WSUVXX1RSQU5TSVRJT05fVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHN3aXRjaCAoKChvYmplY3QgPSBvYmplY3QgJiYgb2JqZWN0LiQkdHlwZW9mKSwgb2JqZWN0KSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnRcIiksXG4gICAgICBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksXG4gICAgICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLFxuICAgICAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxcbiAgICAgIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIiksXG4gICAgICBSRUFDVF9DT05TVU1FUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnN1bWVyXCIpLFxuICAgICAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksXG4gICAgICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLFxuICAgICAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLFxuICAgICAgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksXG4gICAgICBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSxcbiAgICAgIFJFQUNUX1ZJRVdfVFJBTlNJVElPTl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnZpZXdfdHJhbnNpdGlvblwiKSxcbiAgICAgIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UgPSBTeW1ib2wuZm9yKFwicmVhY3QuY2xpZW50LnJlZmVyZW5jZVwiKTtcbiAgICBleHBvcnRzLkNvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlNVTUVSX1RZUEU7XG4gICAgZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG4gICAgZXhwb3J0cy5FbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xuICAgIGV4cG9ydHMuRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG4gICAgZXhwb3J0cy5GcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG4gICAgZXhwb3J0cy5MYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xuICAgIGV4cG9ydHMuTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbiAgICBleHBvcnRzLlBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xuICAgIGV4cG9ydHMuUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xuICAgIGV4cG9ydHMuU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG4gICAgZXhwb3J0cy5TdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG4gICAgZXhwb3J0cy5TdXNwZW5zZUxpc3QgPSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG4gICAgZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OU1VNRVJfVFlQRTtcbiAgICB9O1xuICAgIGV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbiAgICB9O1xuICAgIGV4cG9ydHMuaXNFbGVtZW50ID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9iamVjdCAmJlxuICAgICAgICBudWxsICE9PSBvYmplY3QgJiZcbiAgICAgICAgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEVcbiAgICAgICk7XG4gICAgfTtcbiAgICBleHBvcnRzLmlzRm9yd2FyZFJlZiA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbiAgICB9O1xuICAgIGV4cG9ydHMuaXNGcmFnbWVudCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbiAgICB9O1xuICAgIGV4cG9ydHMuaXNMYXp5ID0gZnVuY3Rpb24gKG9iamVjdCkge1xuICAgICAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG4gICAgfTtcbiAgICBleHBvcnRzLmlzTWVtbyA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xuICAgIH07XG4gICAgZXhwb3J0cy5pc1BvcnRhbCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG4gICAgfTtcbiAgICBleHBvcnRzLmlzUHJvZmlsZXIgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gICAgfTtcbiAgICBleHBvcnRzLmlzU3RyaWN0TW9kZSA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbiAgICB9O1xuICAgIGV4cG9ydHMuaXNTdXNwZW5zZSA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbiAgICB9O1xuICAgIGV4cG9ydHMuaXNTdXNwZW5zZUxpc3QgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTtcbiAgICB9O1xuICAgIGV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSB8fFxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHxcbiAgICAgICAgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fFxuICAgICAgICB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHxcbiAgICAgICAgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8XG4gICAgICAgIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICAgIG51bGwgIT09IHR5cGUgJiZcbiAgICAgICAgICAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8XG4gICAgICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHxcbiAgICAgICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OU1VNRVJfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSB8fFxuICAgICAgICAgICAgdm9pZCAwICE9PSB0eXBlLmdldE1vZHVsZUlkKSlcbiAgICAgICAgPyAhMFxuICAgICAgICA6ICExO1xuICAgIH07XG4gICAgZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG4gIH0pKCk7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-is/cjs/react-is.development.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-is/index.js":
/*!*******************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-is/index.js ***!
  \*******************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-is/cjs/react-is.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1pcy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFJLEtBQXFDLEVBQUUsRUFFMUMsQ0FBQztBQUNGLEVBQUUsbVRBQXlEO0FBQzNEIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNC43X0BiYWJlbCtjb3JlQDcuMjguM19Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHBsYXl3cmlnaHQrdGVzdEAxLjU1LjBfcmVhY3QtZF80N2ZmMzgxM2Q3OTA1NjZkZjI1NGEyMTYzNTUwYzJkNS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LWlzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-is/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-runtime.development.js":
/*!********************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-runtime.development.js ***!
  \********************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/**\n * @license React\n * react-refresh-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nif (true) {\n  (function() {\n'use strict';\n\n// ATTENTION\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\n\nvar PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; // We never remove these associations.\n// It's OK to reference families, but use WeakMap/Set for types.\n\nvar allFamiliesByID = new Map();\nvar allFamiliesByType = new PossiblyWeakMap();\nvar allSignaturesByType = new PossiblyWeakMap(); // This WeakMap is read by React, so we only put families\n// that have actually been edited here. This keeps checks fast.\n// $FlowIssue\n\nvar updatedFamiliesByType = new PossiblyWeakMap(); // This is cleared on every performReactRefresh() call.\n// It is an array of [Family, NextType] tuples.\n\nvar pendingUpdates = []; // This is injected by the renderer via DevTools global hook.\n\nvar helpersByRendererID = new Map();\nvar helpersByRoot = new Map(); // We keep track of mounted roots so we can schedule updates.\n\nvar mountedRoots = new Set(); // If a root captures an error, we remember it so we can retry on edit.\n\nvar failedRoots = new Set(); // In environments that support WeakMap, we also remember the last element for every root.\n// It needs to be weak because we do this even for roots that failed to mount.\n// If there is no WeakMap, we won't attempt to do retrying.\n// $FlowIssue\n\nvar rootElements = // $FlowIssue\ntypeof WeakMap === 'function' ? new WeakMap() : null;\nvar isPerformingRefresh = false;\n\nfunction computeFullKey(signature) {\n  if (signature.fullKey !== null) {\n    return signature.fullKey;\n  }\n\n  var fullKey = signature.ownKey;\n  var hooks;\n\n  try {\n    hooks = signature.getCustomHooks();\n  } catch (err) {\n    // This can happen in an edge case, e.g. if expression like Foo.useSomething\n    // depends on Foo which is lazily initialized during rendering.\n    // In that case just assume we'll have to remount.\n    signature.forceReset = true;\n    signature.fullKey = fullKey;\n    return fullKey;\n  }\n\n  for (var i = 0; i < hooks.length; i++) {\n    var hook = hooks[i];\n\n    if (typeof hook !== 'function') {\n      // Something's wrong. Assume we need to remount.\n      signature.forceReset = true;\n      signature.fullKey = fullKey;\n      return fullKey;\n    }\n\n    var nestedHookSignature = allSignaturesByType.get(hook);\n\n    if (nestedHookSignature === undefined) {\n      // No signature means Hook wasn't in the source code, e.g. in a library.\n      // We'll skip it because we can assume it won't change during this session.\n      continue;\n    }\n\n    var nestedHookKey = computeFullKey(nestedHookSignature);\n\n    if (nestedHookSignature.forceReset) {\n      signature.forceReset = true;\n    }\n\n    fullKey += '\\n---\\n' + nestedHookKey;\n  }\n\n  signature.fullKey = fullKey;\n  return fullKey;\n}\n\nfunction haveEqualSignatures(prevType, nextType) {\n  var prevSignature = allSignaturesByType.get(prevType);\n  var nextSignature = allSignaturesByType.get(nextType);\n\n  if (prevSignature === undefined && nextSignature === undefined) {\n    return true;\n  }\n\n  if (prevSignature === undefined || nextSignature === undefined) {\n    return false;\n  }\n\n  if (computeFullKey(prevSignature) !== computeFullKey(nextSignature)) {\n    return false;\n  }\n\n  if (nextSignature.forceReset) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction isReactClass(type) {\n  return type.prototype && type.prototype.isReactComponent;\n}\n\nfunction canPreserveStateBetween(prevType, nextType) {\n  if (isReactClass(prevType) || isReactClass(nextType)) {\n    return false;\n  }\n\n  if (haveEqualSignatures(prevType, nextType)) {\n    return true;\n  }\n\n  return false;\n}\n\nfunction resolveFamily(type) {\n  // Only check updated types to keep lookups fast.\n  return updatedFamiliesByType.get(type);\n} // If we didn't care about IE11, we could use new Map/Set(iterable).\n\n\nfunction cloneMap(map) {\n  var clone = new Map();\n  map.forEach(function (value, key) {\n    clone.set(key, value);\n  });\n  return clone;\n}\n\nfunction cloneSet(set) {\n  var clone = new Set();\n  set.forEach(function (value) {\n    clone.add(value);\n  });\n  return clone;\n} // This is a safety mechanism to protect against rogue getters and Proxies.\n\n\nfunction getProperty(object, property) {\n  try {\n    return object[property];\n  } catch (err) {\n    // Intentionally ignore.\n    return undefined;\n  }\n}\n\nfunction performReactRefresh() {\n\n  if (pendingUpdates.length === 0) {\n    return null;\n  }\n\n  if (isPerformingRefresh) {\n    return null;\n  }\n\n  isPerformingRefresh = true;\n\n  try {\n    var staleFamilies = new Set();\n    var updatedFamilies = new Set();\n    var updates = pendingUpdates;\n    pendingUpdates = [];\n    updates.forEach(function (_ref) {\n      var family = _ref[0],\n          nextType = _ref[1];\n      // Now that we got a real edit, we can create associations\n      // that will be read by the React reconciler.\n      var prevType = family.current;\n      updatedFamiliesByType.set(prevType, family);\n      updatedFamiliesByType.set(nextType, family);\n      family.current = nextType; // Determine whether this should be a re-render or a re-mount.\n\n      if (canPreserveStateBetween(prevType, nextType)) {\n        updatedFamilies.add(family);\n      } else {\n        staleFamilies.add(family);\n      }\n    }); // TODO: rename these fields to something more meaningful.\n\n    var update = {\n      updatedFamilies: updatedFamilies,\n      // Families that will re-render preserving state\n      staleFamilies: staleFamilies // Families that will be remounted\n\n    };\n    helpersByRendererID.forEach(function (helpers) {\n      // Even if there are no roots, set the handler on first update.\n      // This ensures that if *new* roots are mounted, they'll use the resolve handler.\n      helpers.setRefreshHandler(resolveFamily);\n    });\n    var didError = false;\n    var firstError = null; // We snapshot maps and sets that are mutated during commits.\n    // If we don't do this, there is a risk they will be mutated while\n    // we iterate over them. For example, trying to recover a failed root\n    // may cause another root to be added to the failed list -- an infinite loop.\n\n    var failedRootsSnapshot = cloneSet(failedRoots);\n    var mountedRootsSnapshot = cloneSet(mountedRoots);\n    var helpersByRootSnapshot = cloneMap(helpersByRoot);\n    failedRootsSnapshot.forEach(function (root) {\n      var helpers = helpersByRootSnapshot.get(root);\n\n      if (helpers === undefined) {\n        throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');\n      }\n\n      if (!failedRoots.has(root)) {// No longer failed.\n      }\n\n      if (rootElements === null) {\n        return;\n      }\n\n      if (!rootElements.has(root)) {\n        return;\n      }\n\n      var element = rootElements.get(root);\n\n      try {\n        helpers.scheduleRoot(root, element);\n      } catch (err) {\n        if (!didError) {\n          didError = true;\n          firstError = err;\n        } // Keep trying other roots.\n\n      }\n    });\n    mountedRootsSnapshot.forEach(function (root) {\n      var helpers = helpersByRootSnapshot.get(root);\n\n      if (helpers === undefined) {\n        throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');\n      }\n\n      if (!mountedRoots.has(root)) {// No longer mounted.\n      }\n\n      try {\n        helpers.scheduleRefresh(root, update);\n      } catch (err) {\n        if (!didError) {\n          didError = true;\n          firstError = err;\n        } // Keep trying other roots.\n\n      }\n    });\n\n    if (didError) {\n      throw firstError;\n    }\n\n    return update;\n  } finally {\n    isPerformingRefresh = false;\n  }\n}\nfunction register(type, id) {\n  {\n    if (type === null) {\n      return;\n    }\n\n    if (typeof type !== 'function' && typeof type !== 'object') {\n      return;\n    } // This can happen in an edge case, e.g. if we register\n    // return value of a HOC but it returns a cached component.\n    // Ignore anything but the first registration for each type.\n\n\n    if (allFamiliesByType.has(type)) {\n      return;\n    } // Create family or remember to update it.\n    // None of this bookkeeping affects reconciliation\n    // until the first performReactRefresh() call above.\n\n\n    var family = allFamiliesByID.get(id);\n\n    if (family === undefined) {\n      family = {\n        current: type\n      };\n      allFamiliesByID.set(id, family);\n    } else {\n      pendingUpdates.push([family, type]);\n    }\n\n    allFamiliesByType.set(type, family); // Visit inner types because we might not have registered them.\n\n    if (typeof type === 'object' && type !== null) {\n      switch (getProperty(type, '$$typeof')) {\n        case REACT_FORWARD_REF_TYPE:\n          register(type.render, id + '$render');\n          break;\n\n        case REACT_MEMO_TYPE:\n          register(type.type, id + '$type');\n          break;\n      }\n    }\n  }\n}\nfunction setSignature(type, key) {\n  var forceReset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  var getCustomHooks = arguments.length > 3 ? arguments[3] : undefined;\n\n  {\n    if (!allSignaturesByType.has(type)) {\n      allSignaturesByType.set(type, {\n        forceReset: forceReset,\n        ownKey: key,\n        fullKey: null,\n        getCustomHooks: getCustomHooks || function () {\n          return [];\n        }\n      });\n    } // Visit inner types because we might not have signed them.\n\n\n    if (typeof type === 'object' && type !== null) {\n      switch (getProperty(type, '$$typeof')) {\n        case REACT_FORWARD_REF_TYPE:\n          setSignature(type.render, key, forceReset, getCustomHooks);\n          break;\n\n        case REACT_MEMO_TYPE:\n          setSignature(type.type, key, forceReset, getCustomHooks);\n          break;\n      }\n    }\n  }\n} // This is lazily called during first render for a type.\n// It captures Hook list at that time so inline requires don't break comparisons.\n\nfunction collectCustomHooksForSignature(type) {\n  {\n    var signature = allSignaturesByType.get(type);\n\n    if (signature !== undefined) {\n      computeFullKey(signature);\n    }\n  }\n}\nfunction getFamilyByID(id) {\n  {\n    return allFamiliesByID.get(id);\n  }\n}\nfunction getFamilyByType(type) {\n  {\n    return allFamiliesByType.get(type);\n  }\n}\nfunction findAffectedHostInstances(families) {\n  {\n    var affectedInstances = new Set();\n    mountedRoots.forEach(function (root) {\n      var helpers = helpersByRoot.get(root);\n\n      if (helpers === undefined) {\n        throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');\n      }\n\n      var instancesForRoot = helpers.findHostInstancesForRefresh(root, families);\n      instancesForRoot.forEach(function (inst) {\n        affectedInstances.add(inst);\n      });\n    });\n    return affectedInstances;\n  }\n}\nfunction injectIntoGlobalHook(globalObject) {\n  {\n    // For React Native, the global hook will be set up by require('react-devtools-core').\n    // That code will run before us. So we need to monkeypatch functions on existing hook.\n    // For React Web, the global hook will be set up by the extension.\n    // This will also run before us.\n    var hook = globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__;\n\n    if (hook === undefined) {\n      // However, if there is no DevTools extension, we'll need to set up the global hook ourselves.\n      // Note that in this case it's important that renderer code runs *after* this method call.\n      // Otherwise, the renderer will think that there is no global hook, and won't do the injection.\n      var nextID = 0;\n      globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__ = hook = {\n        renderers: new Map(),\n        supportsFiber: true,\n        inject: function (injected) {\n          return nextID++;\n        },\n        onScheduleFiberRoot: function (id, root, children) {},\n        onCommitFiberRoot: function (id, root, maybePriorityLevel, didError) {},\n        onCommitFiberUnmount: function () {}\n      };\n    }\n\n    if (hook.isDisabled) {\n      // This isn't a real property on the hook, but it can be set to opt out\n      // of DevTools integration and associated warnings and logs.\n      // Using console['warn'] to evade Babel and ESLint\n      console['warn']('Something has shimmed the React DevTools global hook (__REACT_DEVTOOLS_GLOBAL_HOOK__). ' + 'Fast Refresh is not compatible with this shim and will be disabled.');\n      return;\n    } // Here, we just want to get a reference to scheduleRefresh.\n\n\n    var oldInject = hook.inject;\n\n    hook.inject = function (injected) {\n      var id = oldInject.apply(this, arguments);\n\n      if (typeof injected.scheduleRefresh === 'function' && typeof injected.setRefreshHandler === 'function') {\n        // This version supports React Refresh.\n        helpersByRendererID.set(id, injected);\n      }\n\n      return id;\n    }; // Do the same for any already injected roots.\n    // This is useful if ReactDOM has already been initialized.\n    // https://github.com/facebook/react/issues/17626\n\n\n    hook.renderers.forEach(function (injected, id) {\n      if (typeof injected.scheduleRefresh === 'function' && typeof injected.setRefreshHandler === 'function') {\n        // This version supports React Refresh.\n        helpersByRendererID.set(id, injected);\n      }\n    }); // We also want to track currently mounted roots.\n\n    var oldOnCommitFiberRoot = hook.onCommitFiberRoot;\n\n    var oldOnScheduleFiberRoot = hook.onScheduleFiberRoot || function () {};\n\n    hook.onScheduleFiberRoot = function (id, root, children) {\n      if (!isPerformingRefresh) {\n        // If it was intentionally scheduled, don't attempt to restore.\n        // This includes intentionally scheduled unmounts.\n        failedRoots.delete(root);\n\n        if (rootElements !== null) {\n          rootElements.set(root, children);\n        }\n      }\n\n      return oldOnScheduleFiberRoot.apply(this, arguments);\n    };\n\n    hook.onCommitFiberRoot = function (id, root, maybePriorityLevel, didError) {\n      var helpers = helpersByRendererID.get(id);\n\n      if (helpers !== undefined) {\n        helpersByRoot.set(root, helpers);\n        var current = root.current;\n        var alternate = current.alternate; // We need to determine whether this root has just (un)mounted.\n        // This logic is copy-pasted from similar logic in the DevTools backend.\n        // If this breaks with some refactoring, you'll want to update DevTools too.\n\n        if (alternate !== null) {\n          var wasMounted = alternate.memoizedState != null && alternate.memoizedState.element != null && mountedRoots.has(root);\n          var isMounted = current.memoizedState != null && current.memoizedState.element != null;\n\n          if (!wasMounted && isMounted) {\n            // Mount a new root.\n            mountedRoots.add(root);\n            failedRoots.delete(root);\n          } else if (wasMounted && isMounted) ; else if (wasMounted && !isMounted) {\n            // Unmount an existing root.\n            mountedRoots.delete(root);\n\n            if (didError) {\n              // We'll remount it on future edits.\n              failedRoots.add(root);\n            } else {\n              helpersByRoot.delete(root);\n            }\n          } else if (!wasMounted && !isMounted) {\n            if (didError) {\n              // We'll remount it on future edits.\n              failedRoots.add(root);\n            }\n          }\n        } else {\n          // Mount a new root.\n          mountedRoots.add(root);\n        }\n      } // Always call the decorated DevTools hook.\n\n\n      return oldOnCommitFiberRoot.apply(this, arguments);\n    };\n  }\n}\nfunction hasUnrecoverableErrors() {\n  // TODO: delete this after removing dependency in RN.\n  return false;\n} // Exposed for testing.\n\nfunction _getMountedRootCount() {\n  {\n    return mountedRoots.size;\n  }\n} // This is a wrapper over more primitive functions for setting signature.\n// Signatures let us decide whether the Hook order has changed on refresh.\n//\n// This function is intended to be used as a transform target, e.g.:\n// var _s = createSignatureFunctionForTransform()\n//\n// function Hello() {\n//   const [foo, setFoo] = useState(0);\n//   const value = useCustomHook();\n//   _s(); /* Call without arguments triggers collecting the custom Hook list.\n//          * This doesn't happen during the module evaluation because we\n//          * don't want to change the module order with inline requires.\n//          * Next calls are noops. */\n//   return <h1>Hi</h1>;\n// }\n//\n// /* Call with arguments attaches the signature to the type: */\n// _s(\n//   Hello,\n//   'useState{[foo, setFoo]}(0)',\n//   () => [useCustomHook], /* Lazy to avoid triggering inline requires */\n// );\n\nfunction createSignatureFunctionForTransform() {\n  {\n    var savedType;\n    var hasCustomHooks;\n    var didCollectHooks = false;\n    return function (type, key, forceReset, getCustomHooks) {\n      if (typeof key === 'string') {\n        // We're in the initial phase that associates signatures\n        // with the functions. Note this may be called multiple times\n        // in HOC chains like _s(hoc1(_s(hoc2(_s(actualFunction))))).\n        if (!savedType) {\n          // We're in the innermost call, so this is the actual type.\n          savedType = type;\n          hasCustomHooks = typeof getCustomHooks === 'function';\n        } // Set the signature for all types (even wrappers!) in case\n        // they have no signatures of their own. This is to prevent\n        // problems like https://github.com/facebook/react/issues/20417.\n\n\n        if (type != null && (typeof type === 'function' || typeof type === 'object')) {\n          setSignature(type, key, forceReset, getCustomHooks);\n        }\n\n        return type;\n      } else {\n        // We're in the _s() call without arguments, which means\n        // this is the time to collect custom Hook signatures.\n        // Only do this once. This path is hot and runs *inside* every render!\n        if (!didCollectHooks && hasCustomHooks) {\n          didCollectHooks = true;\n          collectCustomHooksForSignature(savedType);\n        }\n      }\n    };\n  }\n}\nfunction isLikelyComponentType(type) {\n  {\n    switch (typeof type) {\n      case 'function':\n        {\n          // First, deal with classes.\n          if (type.prototype != null) {\n            if (type.prototype.isReactComponent) {\n              // React class.\n              return true;\n            }\n\n            var ownNames = Object.getOwnPropertyNames(type.prototype);\n\n            if (ownNames.length > 1 || ownNames[0] !== 'constructor') {\n              // This looks like a class.\n              return false;\n            } // eslint-disable-next-line no-proto\n\n\n            if (type.prototype.__proto__ !== Object.prototype) {\n              // It has a superclass.\n              return false;\n            } // Pass through.\n            // This looks like a regular function with empty prototype.\n\n          } // For plain functions and arrows, use name as a heuristic.\n\n\n          var name = type.name || type.displayName;\n          return typeof name === 'string' && /^[A-Z]/.test(name);\n        }\n\n      case 'object':\n        {\n          if (type != null) {\n            switch (getProperty(type, '$$typeof')) {\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_MEMO_TYPE:\n                // Definitely React components.\n                return true;\n\n              default:\n                return false;\n            }\n          }\n\n          return false;\n        }\n\n      default:\n        {\n          return false;\n        }\n    }\n  }\n}\n\nexports._getMountedRootCount = _getMountedRootCount;\nexports.collectCustomHooksForSignature = collectCustomHooksForSignature;\nexports.createSignatureFunctionForTransform = createSignatureFunctionForTransform;\nexports.findAffectedHostInstances = findAffectedHostInstances;\nexports.getFamilyByID = getFamilyByID;\nexports.getFamilyByType = getFamilyByType;\nexports.hasUnrecoverableErrors = hasUnrecoverableErrors;\nexports.injectIntoGlobalHook = injectIntoGlobalHook;\nexports.isLikelyComponentType = isLikelyComponentType;\nexports.performReactRefresh = performReactRefresh;\nexports.register = register;\nexports.setSignature = setSignature;\n  })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1yZWZyZXNoL2Nqcy9yZWFjdC1yZWZyZXNoLXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViLElBQUksSUFBcUM7QUFDekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUVBQXFFO0FBQ3JFOztBQUVBO0FBQ0E7QUFDQSxpREFBaUQ7QUFDakQ7QUFDQTs7QUFFQSxtREFBbUQ7QUFDbkQ7O0FBRUEseUJBQXlCOztBQUV6QjtBQUNBLCtCQUErQjs7QUFFL0IsOEJBQThCOztBQUU5Qiw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLGtCQUFrQjtBQUNwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRTs7O0FBR0Y7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUssR0FBRzs7QUFFUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUM7QUFDbkM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFVBQVU7O0FBRVY7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQSx5Q0FBeUM7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07OztBQUdOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULDZEQUE2RDtBQUM3RCwrRUFBK0U7QUFDL0U7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07OztBQUdOOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssR0FBRzs7QUFFUjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG9DQUFvQztBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxjQUFjO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7O0FBR2Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBLFlBQVk7OztBQUdaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCO0FBQzVCLHNDQUFzQztBQUN0QywyQ0FBMkM7QUFDM0MsaUNBQWlDO0FBQ2pDLHFCQUFxQjtBQUNyQix1QkFBdUI7QUFDdkIsOEJBQThCO0FBQzlCLDRCQUE0QjtBQUM1Qiw2QkFBNkI7QUFDN0IsMkJBQTJCO0FBQzNCLGdCQUFnQjtBQUNoQixvQkFBb0I7QUFDcEIsR0FBRztBQUNIIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNC43X0BiYWJlbCtjb3JlQDcuMjguM19Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHBsYXl3cmlnaHQrdGVzdEAxLjU1LjBfcmVhY3QtZF80N2ZmMzgxM2Q3OTA1NjZkZjI1NGEyMTYzNTUwYzJkNS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LXJlZnJlc2gvY2pzL3JlYWN0LXJlZnJlc2gtcnVudGltZS5kZXZlbG9wbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1yZWZyZXNoLXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBBVFRFTlRJT05cbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJyk7XG5cbnZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7IC8vIFdlIG5ldmVyIHJlbW92ZSB0aGVzZSBhc3NvY2lhdGlvbnMuXG4vLyBJdCdzIE9LIHRvIHJlZmVyZW5jZSBmYW1pbGllcywgYnV0IHVzZSBXZWFrTWFwL1NldCBmb3IgdHlwZXMuXG5cbnZhciBhbGxGYW1pbGllc0J5SUQgPSBuZXcgTWFwKCk7XG52YXIgYWxsRmFtaWxpZXNCeVR5cGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG52YXIgYWxsU2lnbmF0dXJlc0J5VHlwZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTsgLy8gVGhpcyBXZWFrTWFwIGlzIHJlYWQgYnkgUmVhY3QsIHNvIHdlIG9ubHkgcHV0IGZhbWlsaWVzXG4vLyB0aGF0IGhhdmUgYWN0dWFsbHkgYmVlbiBlZGl0ZWQgaGVyZS4gVGhpcyBrZWVwcyBjaGVja3MgZmFzdC5cbi8vICRGbG93SXNzdWVcblxudmFyIHVwZGF0ZWRGYW1pbGllc0J5VHlwZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTsgLy8gVGhpcyBpcyBjbGVhcmVkIG9uIGV2ZXJ5IHBlcmZvcm1SZWFjdFJlZnJlc2goKSBjYWxsLlxuLy8gSXQgaXMgYW4gYXJyYXkgb2YgW0ZhbWlseSwgTmV4dFR5cGVdIHR1cGxlcy5cblxudmFyIHBlbmRpbmdVcGRhdGVzID0gW107IC8vIFRoaXMgaXMgaW5qZWN0ZWQgYnkgdGhlIHJlbmRlcmVyIHZpYSBEZXZUb29scyBnbG9iYWwgaG9vay5cblxudmFyIGhlbHBlcnNCeVJlbmRlcmVySUQgPSBuZXcgTWFwKCk7XG52YXIgaGVscGVyc0J5Um9vdCA9IG5ldyBNYXAoKTsgLy8gV2Uga2VlcCB0cmFjayBvZiBtb3VudGVkIHJvb3RzIHNvIHdlIGNhbiBzY2hlZHVsZSB1cGRhdGVzLlxuXG52YXIgbW91bnRlZFJvb3RzID0gbmV3IFNldCgpOyAvLyBJZiBhIHJvb3QgY2FwdHVyZXMgYW4gZXJyb3IsIHdlIHJlbWVtYmVyIGl0IHNvIHdlIGNhbiByZXRyeSBvbiBlZGl0LlxuXG52YXIgZmFpbGVkUm9vdHMgPSBuZXcgU2V0KCk7IC8vIEluIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgV2Vha01hcCwgd2UgYWxzbyByZW1lbWJlciB0aGUgbGFzdCBlbGVtZW50IGZvciBldmVyeSByb290LlxuLy8gSXQgbmVlZHMgdG8gYmUgd2VhayBiZWNhdXNlIHdlIGRvIHRoaXMgZXZlbiBmb3Igcm9vdHMgdGhhdCBmYWlsZWQgdG8gbW91bnQuXG4vLyBJZiB0aGVyZSBpcyBubyBXZWFrTWFwLCB3ZSB3b24ndCBhdHRlbXB0IHRvIGRvIHJldHJ5aW5nLlxuLy8gJEZsb3dJc3N1ZVxuXG52YXIgcm9vdEVsZW1lbnRzID0gLy8gJEZsb3dJc3N1ZVxudHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBuZXcgV2Vha01hcCgpIDogbnVsbDtcbnZhciBpc1BlcmZvcm1pbmdSZWZyZXNoID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGNvbXB1dGVGdWxsS2V5KHNpZ25hdHVyZSkge1xuICBpZiAoc2lnbmF0dXJlLmZ1bGxLZXkgIT09IG51bGwpIHtcbiAgICByZXR1cm4gc2lnbmF0dXJlLmZ1bGxLZXk7XG4gIH1cblxuICB2YXIgZnVsbEtleSA9IHNpZ25hdHVyZS5vd25LZXk7XG4gIHZhciBob29rcztcblxuICB0cnkge1xuICAgIGhvb2tzID0gc2lnbmF0dXJlLmdldEN1c3RvbUhvb2tzKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpbiBhbiBlZGdlIGNhc2UsIGUuZy4gaWYgZXhwcmVzc2lvbiBsaWtlIEZvby51c2VTb21ldGhpbmdcbiAgICAvLyBkZXBlbmRzIG9uIEZvbyB3aGljaCBpcyBsYXppbHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHJlbmRlcmluZy5cbiAgICAvLyBJbiB0aGF0IGNhc2UganVzdCBhc3N1bWUgd2UnbGwgaGF2ZSB0byByZW1vdW50LlxuICAgIHNpZ25hdHVyZS5mb3JjZVJlc2V0ID0gdHJ1ZTtcbiAgICBzaWduYXR1cmUuZnVsbEtleSA9IGZ1bGxLZXk7XG4gICAgcmV0dXJuIGZ1bGxLZXk7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGhvb2sgPSBob29rc1tpXTtcblxuICAgIGlmICh0eXBlb2YgaG9vayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gU29tZXRoaW5nJ3Mgd3JvbmcuIEFzc3VtZSB3ZSBuZWVkIHRvIHJlbW91bnQuXG4gICAgICBzaWduYXR1cmUuZm9yY2VSZXNldCA9IHRydWU7XG4gICAgICBzaWduYXR1cmUuZnVsbEtleSA9IGZ1bGxLZXk7XG4gICAgICByZXR1cm4gZnVsbEtleTtcbiAgICB9XG5cbiAgICB2YXIgbmVzdGVkSG9va1NpZ25hdHVyZSA9IGFsbFNpZ25hdHVyZXNCeVR5cGUuZ2V0KGhvb2spO1xuXG4gICAgaWYgKG5lc3RlZEhvb2tTaWduYXR1cmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gTm8gc2lnbmF0dXJlIG1lYW5zIEhvb2sgd2Fzbid0IGluIHRoZSBzb3VyY2UgY29kZSwgZS5nLiBpbiBhIGxpYnJhcnkuXG4gICAgICAvLyBXZSdsbCBza2lwIGl0IGJlY2F1c2Ugd2UgY2FuIGFzc3VtZSBpdCB3b24ndCBjaGFuZ2UgZHVyaW5nIHRoaXMgc2Vzc2lvbi5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBuZXN0ZWRIb29rS2V5ID0gY29tcHV0ZUZ1bGxLZXkobmVzdGVkSG9va1NpZ25hdHVyZSk7XG5cbiAgICBpZiAobmVzdGVkSG9va1NpZ25hdHVyZS5mb3JjZVJlc2V0KSB7XG4gICAgICBzaWduYXR1cmUuZm9yY2VSZXNldCA9IHRydWU7XG4gICAgfVxuXG4gICAgZnVsbEtleSArPSAnXFxuLS0tXFxuJyArIG5lc3RlZEhvb2tLZXk7XG4gIH1cblxuICBzaWduYXR1cmUuZnVsbEtleSA9IGZ1bGxLZXk7XG4gIHJldHVybiBmdWxsS2V5O1xufVxuXG5mdW5jdGlvbiBoYXZlRXF1YWxTaWduYXR1cmVzKHByZXZUeXBlLCBuZXh0VHlwZSkge1xuICB2YXIgcHJldlNpZ25hdHVyZSA9IGFsbFNpZ25hdHVyZXNCeVR5cGUuZ2V0KHByZXZUeXBlKTtcbiAgdmFyIG5leHRTaWduYXR1cmUgPSBhbGxTaWduYXR1cmVzQnlUeXBlLmdldChuZXh0VHlwZSk7XG5cbiAgaWYgKHByZXZTaWduYXR1cmUgPT09IHVuZGVmaW5lZCAmJiBuZXh0U2lnbmF0dXJlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwcmV2U2lnbmF0dXJlID09PSB1bmRlZmluZWQgfHwgbmV4dFNpZ25hdHVyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGNvbXB1dGVGdWxsS2V5KHByZXZTaWduYXR1cmUpICE9PSBjb21wdXRlRnVsbEtleShuZXh0U2lnbmF0dXJlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChuZXh0U2lnbmF0dXJlLmZvcmNlUmVzZXQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNSZWFjdENsYXNzKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUucHJvdG90eXBlICYmIHR5cGUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ7XG59XG5cbmZ1bmN0aW9uIGNhblByZXNlcnZlU3RhdGVCZXR3ZWVuKHByZXZUeXBlLCBuZXh0VHlwZSkge1xuICBpZiAoaXNSZWFjdENsYXNzKHByZXZUeXBlKSB8fCBpc1JlYWN0Q2xhc3MobmV4dFR5cGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGhhdmVFcXVhbFNpZ25hdHVyZXMocHJldlR5cGUsIG5leHRUeXBlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRmFtaWx5KHR5cGUpIHtcbiAgLy8gT25seSBjaGVjayB1cGRhdGVkIHR5cGVzIHRvIGtlZXAgbG9va3VwcyBmYXN0LlxuICByZXR1cm4gdXBkYXRlZEZhbWlsaWVzQnlUeXBlLmdldCh0eXBlKTtcbn0gLy8gSWYgd2UgZGlkbid0IGNhcmUgYWJvdXQgSUUxMSwgd2UgY291bGQgdXNlIG5ldyBNYXAvU2V0KGl0ZXJhYmxlKS5cblxuXG5mdW5jdGlvbiBjbG9uZU1hcChtYXApIHtcbiAgdmFyIGNsb25lID0gbmV3IE1hcCgpO1xuICBtYXAuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgIGNsb25lLnNldChrZXksIHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiBjbG9uZTtcbn1cblxuZnVuY3Rpb24gY2xvbmVTZXQoc2V0KSB7XG4gIHZhciBjbG9uZSA9IG5ldyBTZXQoKTtcbiAgc2V0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgY2xvbmUuYWRkKHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiBjbG9uZTtcbn0gLy8gVGhpcyBpcyBhIHNhZmV0eSBtZWNoYW5pc20gdG8gcHJvdGVjdCBhZ2FpbnN0IHJvZ3VlIGdldHRlcnMgYW5kIFByb3hpZXMuXG5cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSkge1xuICB0cnkge1xuICAgIHJldHVybiBvYmplY3RbcHJvcGVydHldO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBJbnRlbnRpb25hbGx5IGlnbm9yZS5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBlcmZvcm1SZWFjdFJlZnJlc2goKSB7XG5cbiAgaWYgKHBlbmRpbmdVcGRhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGlzUGVyZm9ybWluZ1JlZnJlc2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlzUGVyZm9ybWluZ1JlZnJlc2ggPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgdmFyIHN0YWxlRmFtaWxpZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIHVwZGF0ZWRGYW1pbGllcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgdXBkYXRlcyA9IHBlbmRpbmdVcGRhdGVzO1xuICAgIHBlbmRpbmdVcGRhdGVzID0gW107XG4gICAgdXBkYXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICB2YXIgZmFtaWx5ID0gX3JlZlswXSxcbiAgICAgICAgICBuZXh0VHlwZSA9IF9yZWZbMV07XG4gICAgICAvLyBOb3cgdGhhdCB3ZSBnb3QgYSByZWFsIGVkaXQsIHdlIGNhbiBjcmVhdGUgYXNzb2NpYXRpb25zXG4gICAgICAvLyB0aGF0IHdpbGwgYmUgcmVhZCBieSB0aGUgUmVhY3QgcmVjb25jaWxlci5cbiAgICAgIHZhciBwcmV2VHlwZSA9IGZhbWlseS5jdXJyZW50O1xuICAgICAgdXBkYXRlZEZhbWlsaWVzQnlUeXBlLnNldChwcmV2VHlwZSwgZmFtaWx5KTtcbiAgICAgIHVwZGF0ZWRGYW1pbGllc0J5VHlwZS5zZXQobmV4dFR5cGUsIGZhbWlseSk7XG4gICAgICBmYW1pbHkuY3VycmVudCA9IG5leHRUeXBlOyAvLyBEZXRlcm1pbmUgd2hldGhlciB0aGlzIHNob3VsZCBiZSBhIHJlLXJlbmRlciBvciBhIHJlLW1vdW50LlxuXG4gICAgICBpZiAoY2FuUHJlc2VydmVTdGF0ZUJldHdlZW4ocHJldlR5cGUsIG5leHRUeXBlKSkge1xuICAgICAgICB1cGRhdGVkRmFtaWxpZXMuYWRkKGZhbWlseSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFsZUZhbWlsaWVzLmFkZChmYW1pbHkpO1xuICAgICAgfVxuICAgIH0pOyAvLyBUT0RPOiByZW5hbWUgdGhlc2UgZmllbGRzIHRvIHNvbWV0aGluZyBtb3JlIG1lYW5pbmdmdWwuXG5cbiAgICB2YXIgdXBkYXRlID0ge1xuICAgICAgdXBkYXRlZEZhbWlsaWVzOiB1cGRhdGVkRmFtaWxpZXMsXG4gICAgICAvLyBGYW1pbGllcyB0aGF0IHdpbGwgcmUtcmVuZGVyIHByZXNlcnZpbmcgc3RhdGVcbiAgICAgIHN0YWxlRmFtaWxpZXM6IHN0YWxlRmFtaWxpZXMgLy8gRmFtaWxpZXMgdGhhdCB3aWxsIGJlIHJlbW91bnRlZFxuXG4gICAgfTtcbiAgICBoZWxwZXJzQnlSZW5kZXJlcklELmZvckVhY2goZnVuY3Rpb24gKGhlbHBlcnMpIHtcbiAgICAgIC8vIEV2ZW4gaWYgdGhlcmUgYXJlIG5vIHJvb3RzLCBzZXQgdGhlIGhhbmRsZXIgb24gZmlyc3QgdXBkYXRlLlxuICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgaWYgKm5ldyogcm9vdHMgYXJlIG1vdW50ZWQsIHRoZXknbGwgdXNlIHRoZSByZXNvbHZlIGhhbmRsZXIuXG4gICAgICBoZWxwZXJzLnNldFJlZnJlc2hIYW5kbGVyKHJlc29sdmVGYW1pbHkpO1xuICAgIH0pO1xuICAgIHZhciBkaWRFcnJvciA9IGZhbHNlO1xuICAgIHZhciBmaXJzdEVycm9yID0gbnVsbDsgLy8gV2Ugc25hcHNob3QgbWFwcyBhbmQgc2V0cyB0aGF0IGFyZSBtdXRhdGVkIGR1cmluZyBjb21taXRzLlxuICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZXJlIGlzIGEgcmlzayB0aGV5IHdpbGwgYmUgbXV0YXRlZCB3aGlsZVxuICAgIC8vIHdlIGl0ZXJhdGUgb3ZlciB0aGVtLiBGb3IgZXhhbXBsZSwgdHJ5aW5nIHRvIHJlY292ZXIgYSBmYWlsZWQgcm9vdFxuICAgIC8vIG1heSBjYXVzZSBhbm90aGVyIHJvb3QgdG8gYmUgYWRkZWQgdG8gdGhlIGZhaWxlZCBsaXN0IC0tIGFuIGluZmluaXRlIGxvb3AuXG5cbiAgICB2YXIgZmFpbGVkUm9vdHNTbmFwc2hvdCA9IGNsb25lU2V0KGZhaWxlZFJvb3RzKTtcbiAgICB2YXIgbW91bnRlZFJvb3RzU25hcHNob3QgPSBjbG9uZVNldChtb3VudGVkUm9vdHMpO1xuICAgIHZhciBoZWxwZXJzQnlSb290U25hcHNob3QgPSBjbG9uZU1hcChoZWxwZXJzQnlSb290KTtcbiAgICBmYWlsZWRSb290c1NuYXBzaG90LmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIHZhciBoZWxwZXJzID0gaGVscGVyc0J5Um9vdFNuYXBzaG90LmdldChyb290KTtcblxuICAgICAgaWYgKGhlbHBlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGhlbHBlcnMgZm9yIGEgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdCBSZWZyZXNoLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZhaWxlZFJvb3RzLmhhcyhyb290KSkgey8vIE5vIGxvbmdlciBmYWlsZWQuXG4gICAgICB9XG5cbiAgICAgIGlmIChyb290RWxlbWVudHMgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJvb3RFbGVtZW50cy5oYXMocm9vdCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZWxlbWVudCA9IHJvb3RFbGVtZW50cy5nZXQocm9vdCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGhlbHBlcnMuc2NoZWR1bGVSb290KHJvb3QsIGVsZW1lbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghZGlkRXJyb3IpIHtcbiAgICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgZmlyc3RFcnJvciA9IGVycjtcbiAgICAgICAgfSAvLyBLZWVwIHRyeWluZyBvdGhlciByb290cy5cblxuICAgICAgfVxuICAgIH0pO1xuICAgIG1vdW50ZWRSb290c1NuYXBzaG90LmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIHZhciBoZWxwZXJzID0gaGVscGVyc0J5Um9vdFNuYXBzaG90LmdldChyb290KTtcblxuICAgICAgaWYgKGhlbHBlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGhlbHBlcnMgZm9yIGEgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdCBSZWZyZXNoLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW1vdW50ZWRSb290cy5oYXMocm9vdCkpIHsvLyBObyBsb25nZXIgbW91bnRlZC5cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgaGVscGVycy5zY2hlZHVsZVJlZnJlc2gocm9vdCwgdXBkYXRlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIWRpZEVycm9yKSB7XG4gICAgICAgICAgZGlkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIGZpcnN0RXJyb3IgPSBlcnI7XG4gICAgICAgIH0gLy8gS2VlcCB0cnlpbmcgb3RoZXIgcm9vdHMuXG5cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChkaWRFcnJvcikge1xuICAgICAgdGhyb3cgZmlyc3RFcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlO1xuICB9IGZpbmFsbHkge1xuICAgIGlzUGVyZm9ybWluZ1JlZnJlc2ggPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gcmVnaXN0ZXIodHlwZSwgaWQpIHtcbiAge1xuICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0eXBlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB0eXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gVGhpcyBjYW4gaGFwcGVuIGluIGFuIGVkZ2UgY2FzZSwgZS5nLiBpZiB3ZSByZWdpc3RlclxuICAgIC8vIHJldHVybiB2YWx1ZSBvZiBhIEhPQyBidXQgaXQgcmV0dXJucyBhIGNhY2hlZCBjb21wb25lbnQuXG4gICAgLy8gSWdub3JlIGFueXRoaW5nIGJ1dCB0aGUgZmlyc3QgcmVnaXN0cmF0aW9uIGZvciBlYWNoIHR5cGUuXG5cblxuICAgIGlmIChhbGxGYW1pbGllc0J5VHlwZS5oYXModHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIENyZWF0ZSBmYW1pbHkgb3IgcmVtZW1iZXIgdG8gdXBkYXRlIGl0LlxuICAgIC8vIE5vbmUgb2YgdGhpcyBib29ra2VlcGluZyBhZmZlY3RzIHJlY29uY2lsaWF0aW9uXG4gICAgLy8gdW50aWwgdGhlIGZpcnN0IHBlcmZvcm1SZWFjdFJlZnJlc2goKSBjYWxsIGFib3ZlLlxuXG5cbiAgICB2YXIgZmFtaWx5ID0gYWxsRmFtaWxpZXNCeUlELmdldChpZCk7XG5cbiAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZhbWlseSA9IHtcbiAgICAgICAgY3VycmVudDogdHlwZVxuICAgICAgfTtcbiAgICAgIGFsbEZhbWlsaWVzQnlJRC5zZXQoaWQsIGZhbWlseSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdVcGRhdGVzLnB1c2goW2ZhbWlseSwgdHlwZV0pO1xuICAgIH1cblxuICAgIGFsbEZhbWlsaWVzQnlUeXBlLnNldCh0eXBlLCBmYW1pbHkpOyAvLyBWaXNpdCBpbm5lciB0eXBlcyBiZWNhdXNlIHdlIG1pZ2h0IG5vdCBoYXZlIHJlZ2lzdGVyZWQgdGhlbS5cblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChnZXRQcm9wZXJ0eSh0eXBlLCAnJCR0eXBlb2YnKSkge1xuICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgcmVnaXN0ZXIodHlwZS5yZW5kZXIsIGlkICsgJyRyZW5kZXInKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICByZWdpc3Rlcih0eXBlLnR5cGUsIGlkICsgJyR0eXBlJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBzZXRTaWduYXR1cmUodHlwZSwga2V5KSB7XG4gIHZhciBmb3JjZVJlc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgdmFyIGdldEN1c3RvbUhvb2tzID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBhcmd1bWVudHNbM10gOiB1bmRlZmluZWQ7XG5cbiAge1xuICAgIGlmICghYWxsU2lnbmF0dXJlc0J5VHlwZS5oYXModHlwZSkpIHtcbiAgICAgIGFsbFNpZ25hdHVyZXNCeVR5cGUuc2V0KHR5cGUsIHtcbiAgICAgICAgZm9yY2VSZXNldDogZm9yY2VSZXNldCxcbiAgICAgICAgb3duS2V5OiBrZXksXG4gICAgICAgIGZ1bGxLZXk6IG51bGwsXG4gICAgICAgIGdldEN1c3RvbUhvb2tzOiBnZXRDdXN0b21Ib29rcyB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IC8vIFZpc2l0IGlubmVyIHR5cGVzIGJlY2F1c2Ugd2UgbWlnaHQgbm90IGhhdmUgc2lnbmVkIHRoZW0uXG5cblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChnZXRQcm9wZXJ0eSh0eXBlLCAnJCR0eXBlb2YnKSkge1xuICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgc2V0U2lnbmF0dXJlKHR5cGUucmVuZGVyLCBrZXksIGZvcmNlUmVzZXQsIGdldEN1c3RvbUhvb2tzKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICBzZXRTaWduYXR1cmUodHlwZS50eXBlLCBrZXksIGZvcmNlUmVzZXQsIGdldEN1c3RvbUhvb2tzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gVGhpcyBpcyBsYXppbHkgY2FsbGVkIGR1cmluZyBmaXJzdCByZW5kZXIgZm9yIGEgdHlwZS5cbi8vIEl0IGNhcHR1cmVzIEhvb2sgbGlzdCBhdCB0aGF0IHRpbWUgc28gaW5saW5lIHJlcXVpcmVzIGRvbid0IGJyZWFrIGNvbXBhcmlzb25zLlxuXG5mdW5jdGlvbiBjb2xsZWN0Q3VzdG9tSG9va3NGb3JTaWduYXR1cmUodHlwZSkge1xuICB7XG4gICAgdmFyIHNpZ25hdHVyZSA9IGFsbFNpZ25hdHVyZXNCeVR5cGUuZ2V0KHR5cGUpO1xuXG4gICAgaWYgKHNpZ25hdHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb21wdXRlRnVsbEtleShzaWduYXR1cmUpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0RmFtaWx5QnlJRChpZCkge1xuICB7XG4gICAgcmV0dXJuIGFsbEZhbWlsaWVzQnlJRC5nZXQoaWQpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRGYW1pbHlCeVR5cGUodHlwZSkge1xuICB7XG4gICAgcmV0dXJuIGFsbEZhbWlsaWVzQnlUeXBlLmdldCh0eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gZmluZEFmZmVjdGVkSG9zdEluc3RhbmNlcyhmYW1pbGllcykge1xuICB7XG4gICAgdmFyIGFmZmVjdGVkSW5zdGFuY2VzID0gbmV3IFNldCgpO1xuICAgIG1vdW50ZWRSb290cy5mb3JFYWNoKGZ1bmN0aW9uIChyb290KSB7XG4gICAgICB2YXIgaGVscGVycyA9IGhlbHBlcnNCeVJvb3QuZ2V0KHJvb3QpO1xuXG4gICAgICBpZiAoaGVscGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgaGVscGVycyBmb3IgYSByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0IFJlZnJlc2guJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBpbnN0YW5jZXNGb3JSb290ID0gaGVscGVycy5maW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2gocm9vdCwgZmFtaWxpZXMpO1xuICAgICAgaW5zdGFuY2VzRm9yUm9vdC5mb3JFYWNoKGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgICAgIGFmZmVjdGVkSW5zdGFuY2VzLmFkZChpbnN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBhZmZlY3RlZEluc3RhbmNlcztcbiAgfVxufVxuZnVuY3Rpb24gaW5qZWN0SW50b0dsb2JhbEhvb2soZ2xvYmFsT2JqZWN0KSB7XG4gIHtcbiAgICAvLyBGb3IgUmVhY3QgTmF0aXZlLCB0aGUgZ2xvYmFsIGhvb2sgd2lsbCBiZSBzZXQgdXAgYnkgcmVxdWlyZSgncmVhY3QtZGV2dG9vbHMtY29yZScpLlxuICAgIC8vIFRoYXQgY29kZSB3aWxsIHJ1biBiZWZvcmUgdXMuIFNvIHdlIG5lZWQgdG8gbW9ua2V5cGF0Y2ggZnVuY3Rpb25zIG9uIGV4aXN0aW5nIGhvb2suXG4gICAgLy8gRm9yIFJlYWN0IFdlYiwgdGhlIGdsb2JhbCBob29rIHdpbGwgYmUgc2V0IHVwIGJ5IHRoZSBleHRlbnNpb24uXG4gICAgLy8gVGhpcyB3aWxsIGFsc28gcnVuIGJlZm9yZSB1cy5cbiAgICB2YXIgaG9vayA9IGdsb2JhbE9iamVjdC5fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG5cbiAgICBpZiAoaG9vayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBIb3dldmVyLCBpZiB0aGVyZSBpcyBubyBEZXZUb29scyBleHRlbnNpb24sIHdlJ2xsIG5lZWQgdG8gc2V0IHVwIHRoZSBnbG9iYWwgaG9vayBvdXJzZWx2ZXMuXG4gICAgICAvLyBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlIGl0J3MgaW1wb3J0YW50IHRoYXQgcmVuZGVyZXIgY29kZSBydW5zICphZnRlciogdGhpcyBtZXRob2QgY2FsbC5cbiAgICAgIC8vIE90aGVyd2lzZSwgdGhlIHJlbmRlcmVyIHdpbGwgdGhpbmsgdGhhdCB0aGVyZSBpcyBubyBnbG9iYWwgaG9vaywgYW5kIHdvbid0IGRvIHRoZSBpbmplY3Rpb24uXG4gICAgICB2YXIgbmV4dElEID0gMDtcbiAgICAgIGdsb2JhbE9iamVjdC5fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPSBob29rID0ge1xuICAgICAgICByZW5kZXJlcnM6IG5ldyBNYXAoKSxcbiAgICAgICAgc3VwcG9ydHNGaWJlcjogdHJ1ZSxcbiAgICAgICAgaW5qZWN0OiBmdW5jdGlvbiAoaW5qZWN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gbmV4dElEKys7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2NoZWR1bGVGaWJlclJvb3Q6IGZ1bmN0aW9uIChpZCwgcm9vdCwgY2hpbGRyZW4pIHt9LFxuICAgICAgICBvbkNvbW1pdEZpYmVyUm9vdDogZnVuY3Rpb24gKGlkLCByb290LCBtYXliZVByaW9yaXR5TGV2ZWwsIGRpZEVycm9yKSB7fSxcbiAgICAgICAgb25Db21taXRGaWJlclVubW91bnQ6IGZ1bmN0aW9uICgpIHt9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChob29rLmlzRGlzYWJsZWQpIHtcbiAgICAgIC8vIFRoaXMgaXNuJ3QgYSByZWFsIHByb3BlcnR5IG9uIHRoZSBob29rLCBidXQgaXQgY2FuIGJlIHNldCB0byBvcHQgb3V0XG4gICAgICAvLyBvZiBEZXZUb29scyBpbnRlZ3JhdGlvbiBhbmQgYXNzb2NpYXRlZCB3YXJuaW5ncyBhbmQgbG9ncy5cbiAgICAgIC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1NvbWV0aGluZyBoYXMgc2hpbW1lZCB0aGUgUmVhY3QgRGV2VG9vbHMgZ2xvYmFsIGhvb2sgKF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXykuICcgKyAnRmFzdCBSZWZyZXNoIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhpcyBzaGltIGFuZCB3aWxsIGJlIGRpc2FibGVkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSGVyZSwgd2UganVzdCB3YW50IHRvIGdldCBhIHJlZmVyZW5jZSB0byBzY2hlZHVsZVJlZnJlc2guXG5cblxuICAgIHZhciBvbGRJbmplY3QgPSBob29rLmluamVjdDtcblxuICAgIGhvb2suaW5qZWN0ID0gZnVuY3Rpb24gKGluamVjdGVkKSB7XG4gICAgICB2YXIgaWQgPSBvbGRJbmplY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgICAgaWYgKHR5cGVvZiBpbmplY3RlZC5zY2hlZHVsZVJlZnJlc2ggPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluamVjdGVkLnNldFJlZnJlc2hIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRoaXMgdmVyc2lvbiBzdXBwb3J0cyBSZWFjdCBSZWZyZXNoLlxuICAgICAgICBoZWxwZXJzQnlSZW5kZXJlcklELnNldChpZCwgaW5qZWN0ZWQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaWQ7XG4gICAgfTsgLy8gRG8gdGhlIHNhbWUgZm9yIGFueSBhbHJlYWR5IGluamVjdGVkIHJvb3RzLlxuICAgIC8vIFRoaXMgaXMgdXNlZnVsIGlmIFJlYWN0RE9NIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNzYyNlxuXG5cbiAgICBob29rLnJlbmRlcmVycy5mb3JFYWNoKGZ1bmN0aW9uIChpbmplY3RlZCwgaWQpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5qZWN0ZWQuc2NoZWR1bGVSZWZyZXNoID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbmplY3RlZC5zZXRSZWZyZXNoSGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUaGlzIHZlcnNpb24gc3VwcG9ydHMgUmVhY3QgUmVmcmVzaC5cbiAgICAgICAgaGVscGVyc0J5UmVuZGVyZXJJRC5zZXQoaWQsIGluamVjdGVkKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gV2UgYWxzbyB3YW50IHRvIHRyYWNrIGN1cnJlbnRseSBtb3VudGVkIHJvb3RzLlxuXG4gICAgdmFyIG9sZE9uQ29tbWl0RmliZXJSb290ID0gaG9vay5vbkNvbW1pdEZpYmVyUm9vdDtcblxuICAgIHZhciBvbGRPblNjaGVkdWxlRmliZXJSb290ID0gaG9vay5vblNjaGVkdWxlRmliZXJSb290IHx8IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgaG9vay5vblNjaGVkdWxlRmliZXJSb290ID0gZnVuY3Rpb24gKGlkLCByb290LCBjaGlsZHJlbikge1xuICAgICAgaWYgKCFpc1BlcmZvcm1pbmdSZWZyZXNoKSB7XG4gICAgICAgIC8vIElmIGl0IHdhcyBpbnRlbnRpb25hbGx5IHNjaGVkdWxlZCwgZG9uJ3QgYXR0ZW1wdCB0byByZXN0b3JlLlxuICAgICAgICAvLyBUaGlzIGluY2x1ZGVzIGludGVudGlvbmFsbHkgc2NoZWR1bGVkIHVubW91bnRzLlxuICAgICAgICBmYWlsZWRSb290cy5kZWxldGUocm9vdCk7XG5cbiAgICAgICAgaWYgKHJvb3RFbGVtZW50cyAhPT0gbnVsbCkge1xuICAgICAgICAgIHJvb3RFbGVtZW50cy5zZXQocm9vdCwgY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvbGRPblNjaGVkdWxlRmliZXJSb290LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcblxuICAgIGhvb2sub25Db21taXRGaWJlclJvb3QgPSBmdW5jdGlvbiAoaWQsIHJvb3QsIG1heWJlUHJpb3JpdHlMZXZlbCwgZGlkRXJyb3IpIHtcbiAgICAgIHZhciBoZWxwZXJzID0gaGVscGVyc0J5UmVuZGVyZXJJRC5nZXQoaWQpO1xuXG4gICAgICBpZiAoaGVscGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhlbHBlcnNCeVJvb3Quc2V0KHJvb3QsIGhlbHBlcnMpO1xuICAgICAgICB2YXIgY3VycmVudCA9IHJvb3QuY3VycmVudDtcbiAgICAgICAgdmFyIGFsdGVybmF0ZSA9IGN1cnJlbnQuYWx0ZXJuYXRlOyAvLyBXZSBuZWVkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgcm9vdCBoYXMganVzdCAodW4pbW91bnRlZC5cbiAgICAgICAgLy8gVGhpcyBsb2dpYyBpcyBjb3B5LXBhc3RlZCBmcm9tIHNpbWlsYXIgbG9naWMgaW4gdGhlIERldlRvb2xzIGJhY2tlbmQuXG4gICAgICAgIC8vIElmIHRoaXMgYnJlYWtzIHdpdGggc29tZSByZWZhY3RvcmluZywgeW91J2xsIHdhbnQgdG8gdXBkYXRlIERldlRvb2xzIHRvby5cblxuICAgICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIHdhc01vdW50ZWQgPSBhbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZSAhPSBudWxsICYmIGFsdGVybmF0ZS5tZW1vaXplZFN0YXRlLmVsZW1lbnQgIT0gbnVsbCAmJiBtb3VudGVkUm9vdHMuaGFzKHJvb3QpO1xuICAgICAgICAgIHZhciBpc01vdW50ZWQgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGUgIT0gbnVsbCAmJiBjdXJyZW50Lm1lbW9pemVkU3RhdGUuZWxlbWVudCAhPSBudWxsO1xuXG4gICAgICAgICAgaWYgKCF3YXNNb3VudGVkICYmIGlzTW91bnRlZCkge1xuICAgICAgICAgICAgLy8gTW91bnQgYSBuZXcgcm9vdC5cbiAgICAgICAgICAgIG1vdW50ZWRSb290cy5hZGQocm9vdCk7XG4gICAgICAgICAgICBmYWlsZWRSb290cy5kZWxldGUocm9vdCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh3YXNNb3VudGVkICYmIGlzTW91bnRlZCkgOyBlbHNlIGlmICh3YXNNb3VudGVkICYmICFpc01vdW50ZWQpIHtcbiAgICAgICAgICAgIC8vIFVubW91bnQgYW4gZXhpc3Rpbmcgcm9vdC5cbiAgICAgICAgICAgIG1vdW50ZWRSb290cy5kZWxldGUocm9vdCk7XG5cbiAgICAgICAgICAgIGlmIChkaWRFcnJvcikge1xuICAgICAgICAgICAgICAvLyBXZSdsbCByZW1vdW50IGl0IG9uIGZ1dHVyZSBlZGl0cy5cbiAgICAgICAgICAgICAgZmFpbGVkUm9vdHMuYWRkKHJvb3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaGVscGVyc0J5Um9vdC5kZWxldGUocm9vdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICghd2FzTW91bnRlZCAmJiAhaXNNb3VudGVkKSB7XG4gICAgICAgICAgICBpZiAoZGlkRXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gV2UnbGwgcmVtb3VudCBpdCBvbiBmdXR1cmUgZWRpdHMuXG4gICAgICAgICAgICAgIGZhaWxlZFJvb3RzLmFkZChyb290KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTW91bnQgYSBuZXcgcm9vdC5cbiAgICAgICAgICBtb3VudGVkUm9vdHMuYWRkKHJvb3QpO1xuICAgICAgICB9XG4gICAgICB9IC8vIEFsd2F5cyBjYWxsIHRoZSBkZWNvcmF0ZWQgRGV2VG9vbHMgaG9vay5cblxuXG4gICAgICByZXR1cm4gb2xkT25Db21taXRGaWJlclJvb3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBoYXNVbnJlY292ZXJhYmxlRXJyb3JzKCkge1xuICAvLyBUT0RPOiBkZWxldGUgdGhpcyBhZnRlciByZW1vdmluZyBkZXBlbmRlbmN5IGluIFJOLlxuICByZXR1cm4gZmFsc2U7XG59IC8vIEV4cG9zZWQgZm9yIHRlc3RpbmcuXG5cbmZ1bmN0aW9uIF9nZXRNb3VudGVkUm9vdENvdW50KCkge1xuICB7XG4gICAgcmV0dXJuIG1vdW50ZWRSb290cy5zaXplO1xuICB9XG59IC8vIFRoaXMgaXMgYSB3cmFwcGVyIG92ZXIgbW9yZSBwcmltaXRpdmUgZnVuY3Rpb25zIGZvciBzZXR0aW5nIHNpZ25hdHVyZS5cbi8vIFNpZ25hdHVyZXMgbGV0IHVzIGRlY2lkZSB3aGV0aGVyIHRoZSBIb29rIG9yZGVyIGhhcyBjaGFuZ2VkIG9uIHJlZnJlc2guXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgdHJhbnNmb3JtIHRhcmdldCwgZS5nLjpcbi8vIHZhciBfcyA9IGNyZWF0ZVNpZ25hdHVyZUZ1bmN0aW9uRm9yVHJhbnNmb3JtKClcbi8vXG4vLyBmdW5jdGlvbiBIZWxsbygpIHtcbi8vICAgY29uc3QgW2Zvbywgc2V0Rm9vXSA9IHVzZVN0YXRlKDApO1xuLy8gICBjb25zdCB2YWx1ZSA9IHVzZUN1c3RvbUhvb2soKTtcbi8vICAgX3MoKTsgLyogQ2FsbCB3aXRob3V0IGFyZ3VtZW50cyB0cmlnZ2VycyBjb2xsZWN0aW5nIHRoZSBjdXN0b20gSG9vayBsaXN0LlxuLy8gICAgICAgICAgKiBUaGlzIGRvZXNuJ3QgaGFwcGVuIGR1cmluZyB0aGUgbW9kdWxlIGV2YWx1YXRpb24gYmVjYXVzZSB3ZVxuLy8gICAgICAgICAgKiBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgbW9kdWxlIG9yZGVyIHdpdGggaW5saW5lIHJlcXVpcmVzLlxuLy8gICAgICAgICAgKiBOZXh0IGNhbGxzIGFyZSBub29wcy4gKi9cbi8vICAgcmV0dXJuIDxoMT5IaTwvaDE+O1xuLy8gfVxuLy9cbi8vIC8qIENhbGwgd2l0aCBhcmd1bWVudHMgYXR0YWNoZXMgdGhlIHNpZ25hdHVyZSB0byB0aGUgdHlwZTogKi9cbi8vIF9zKFxuLy8gICBIZWxsbyxcbi8vICAgJ3VzZVN0YXRle1tmb28sIHNldEZvb119KDApJyxcbi8vICAgKCkgPT4gW3VzZUN1c3RvbUhvb2tdLCAvKiBMYXp5IHRvIGF2b2lkIHRyaWdnZXJpbmcgaW5saW5lIHJlcXVpcmVzICovXG4vLyApO1xuXG5mdW5jdGlvbiBjcmVhdGVTaWduYXR1cmVGdW5jdGlvbkZvclRyYW5zZm9ybSgpIHtcbiAge1xuICAgIHZhciBzYXZlZFR5cGU7XG4gICAgdmFyIGhhc0N1c3RvbUhvb2tzO1xuICAgIHZhciBkaWRDb2xsZWN0SG9va3MgPSBmYWxzZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHR5cGUsIGtleSwgZm9yY2VSZXNldCwgZ2V0Q3VzdG9tSG9va3MpIHtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBXZSdyZSBpbiB0aGUgaW5pdGlhbCBwaGFzZSB0aGF0IGFzc29jaWF0ZXMgc2lnbmF0dXJlc1xuICAgICAgICAvLyB3aXRoIHRoZSBmdW5jdGlvbnMuIE5vdGUgdGhpcyBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIC8vIGluIEhPQyBjaGFpbnMgbGlrZSBfcyhob2MxKF9zKGhvYzIoX3MoYWN0dWFsRnVuY3Rpb24pKSkpKS5cbiAgICAgICAgaWYgKCFzYXZlZFR5cGUpIHtcbiAgICAgICAgICAvLyBXZSdyZSBpbiB0aGUgaW5uZXJtb3N0IGNhbGwsIHNvIHRoaXMgaXMgdGhlIGFjdHVhbCB0eXBlLlxuICAgICAgICAgIHNhdmVkVHlwZSA9IHR5cGU7XG4gICAgICAgICAgaGFzQ3VzdG9tSG9va3MgPSB0eXBlb2YgZ2V0Q3VzdG9tSG9va3MgPT09ICdmdW5jdGlvbic7XG4gICAgICAgIH0gLy8gU2V0IHRoZSBzaWduYXR1cmUgZm9yIGFsbCB0eXBlcyAoZXZlbiB3cmFwcGVycyEpIGluIGNhc2VcbiAgICAgICAgLy8gdGhleSBoYXZlIG5vIHNpZ25hdHVyZXMgb2YgdGhlaXIgb3duLiBUaGlzIGlzIHRvIHByZXZlbnRcbiAgICAgICAgLy8gcHJvYmxlbXMgbGlrZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzIwNDE3LlxuXG5cbiAgICAgICAgaWYgKHR5cGUgIT0gbnVsbCAmJiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSkge1xuICAgICAgICAgIHNldFNpZ25hdHVyZSh0eXBlLCBrZXksIGZvcmNlUmVzZXQsIGdldEN1c3RvbUhvb2tzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2UncmUgaW4gdGhlIF9zKCkgY2FsbCB3aXRob3V0IGFyZ3VtZW50cywgd2hpY2ggbWVhbnNcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgdGltZSB0byBjb2xsZWN0IGN1c3RvbSBIb29rIHNpZ25hdHVyZXMuXG4gICAgICAgIC8vIE9ubHkgZG8gdGhpcyBvbmNlLiBUaGlzIHBhdGggaXMgaG90IGFuZCBydW5zICppbnNpZGUqIGV2ZXJ5IHJlbmRlciFcbiAgICAgICAgaWYgKCFkaWRDb2xsZWN0SG9va3MgJiYgaGFzQ3VzdG9tSG9va3MpIHtcbiAgICAgICAgICBkaWRDb2xsZWN0SG9va3MgPSB0cnVlO1xuICAgICAgICAgIGNvbGxlY3RDdXN0b21Ib29rc0ZvclNpZ25hdHVyZShzYXZlZFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gaXNMaWtlbHlDb21wb25lbnRUeXBlKHR5cGUpIHtcbiAge1xuICAgIHN3aXRjaCAodHlwZW9mIHR5cGUpIHtcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIEZpcnN0LCBkZWFsIHdpdGggY2xhc3Nlcy5cbiAgICAgICAgICBpZiAodHlwZS5wcm90b3R5cGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGUucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgLy8gUmVhY3QgY2xhc3MuXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgb3duTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0eXBlLnByb3RvdHlwZSk7XG5cbiAgICAgICAgICAgIGlmIChvd25OYW1lcy5sZW5ndGggPiAxIHx8IG93bk5hbWVzWzBdICE9PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgbG9va3MgbGlrZSBhIGNsYXNzLlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b1xuXG5cbiAgICAgICAgICAgIGlmICh0eXBlLnByb3RvdHlwZS5fX3Byb3RvX18gIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAgICAgICAgICAgLy8gSXQgaGFzIGEgc3VwZXJjbGFzcy5cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSAvLyBQYXNzIHRocm91Z2guXG4gICAgICAgICAgICAvLyBUaGlzIGxvb2tzIGxpa2UgYSByZWd1bGFyIGZ1bmN0aW9uIHdpdGggZW1wdHkgcHJvdG90eXBlLlxuXG4gICAgICAgICAgfSAvLyBGb3IgcGxhaW4gZnVuY3Rpb25zIGFuZCBhcnJvd3MsIHVzZSBuYW1lIGFzIGEgaGV1cmlzdGljLlxuXG5cbiAgICAgICAgICB2YXIgbmFtZSA9IHR5cGUubmFtZSB8fCB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgJiYgL15bQS1aXS8udGVzdChuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc3dpdGNoIChnZXRQcm9wZXJ0eSh0eXBlLCAnJCR0eXBlb2YnKSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICAgIC8vIERlZmluaXRlbHkgUmVhY3QgY29tcG9uZW50cy5cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnRzLl9nZXRNb3VudGVkUm9vdENvdW50ID0gX2dldE1vdW50ZWRSb290Q291bnQ7XG5leHBvcnRzLmNvbGxlY3RDdXN0b21Ib29rc0ZvclNpZ25hdHVyZSA9IGNvbGxlY3RDdXN0b21Ib29rc0ZvclNpZ25hdHVyZTtcbmV4cG9ydHMuY3JlYXRlU2lnbmF0dXJlRnVuY3Rpb25Gb3JUcmFuc2Zvcm0gPSBjcmVhdGVTaWduYXR1cmVGdW5jdGlvbkZvclRyYW5zZm9ybTtcbmV4cG9ydHMuZmluZEFmZmVjdGVkSG9zdEluc3RhbmNlcyA9IGZpbmRBZmZlY3RlZEhvc3RJbnN0YW5jZXM7XG5leHBvcnRzLmdldEZhbWlseUJ5SUQgPSBnZXRGYW1pbHlCeUlEO1xuZXhwb3J0cy5nZXRGYW1pbHlCeVR5cGUgPSBnZXRGYW1pbHlCeVR5cGU7XG5leHBvcnRzLmhhc1VucmVjb3ZlcmFibGVFcnJvcnMgPSBoYXNVbnJlY292ZXJhYmxlRXJyb3JzO1xuZXhwb3J0cy5pbmplY3RJbnRvR2xvYmFsSG9vayA9IGluamVjdEludG9HbG9iYWxIb29rO1xuZXhwb3J0cy5pc0xpa2VseUNvbXBvbmVudFR5cGUgPSBpc0xpa2VseUNvbXBvbmVudFR5cGU7XG5leHBvcnRzLnBlcmZvcm1SZWFjdFJlZnJlc2ggPSBwZXJmb3JtUmVhY3RSZWZyZXNoO1xuZXhwb3J0cy5yZWdpc3RlciA9IHJlZ2lzdGVyO1xuZXhwb3J0cy5zZXRTaWduYXR1cmUgPSBzZXRTaWduYXR1cmU7XG4gIH0pKCk7XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-runtime.development.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-refresh/runtime.js":
/*!**************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-refresh/runtime.js ***!
  \**************************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/react-refresh-runtime.development.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1yZWZyZXNoL3J1bnRpbWUuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDLENBQUM7QUFDRixFQUFFLGtWQUFzRTtBQUN4RSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1yZWZyZXNoL3J1bnRpbWUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LXJlZnJlc2gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1yZWZyZXNoLXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-refresh/runtime.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js":
/*!*************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js ***!
  \*************************************************************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/**\n * @license React\n * react-server-dom-webpack-client.browser.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n  (function () {\n    function resolveClientReference(bundlerConfig, metadata) {\n      if (bundlerConfig) {\n        var moduleExports = bundlerConfig[metadata[0]];\n        if ((bundlerConfig = moduleExports && moduleExports[metadata[2]]))\n          moduleExports = bundlerConfig.name;\n        else {\n          bundlerConfig = moduleExports && moduleExports[\"*\"];\n          if (!bundlerConfig)\n            throw Error(\n              'Could not find the module \"' +\n                metadata[0] +\n                '\" in the React Server Consumer Manifest. This is probably a bug in the React Server Components bundler.'\n            );\n          moduleExports = metadata[2];\n        }\n        return 4 === metadata.length\n          ? [bundlerConfig.id, bundlerConfig.chunks, moduleExports, 1]\n          : [bundlerConfig.id, bundlerConfig.chunks, moduleExports];\n      }\n      return metadata;\n    }\n    function resolveServerReference(bundlerConfig, id) {\n      var name = \"\",\n        resolvedModuleData = bundlerConfig[id];\n      if (resolvedModuleData) name = resolvedModuleData.name;\n      else {\n        var idx = id.lastIndexOf(\"#\");\n        -1 !== idx &&\n          ((name = id.slice(idx + 1)),\n          (resolvedModuleData = bundlerConfig[id.slice(0, idx)]));\n        if (!resolvedModuleData)\n          throw Error(\n            'Could not find the module \"' +\n              id +\n              '\" in the React Server Manifest. This is probably a bug in the React Server Components bundler.'\n          );\n      }\n      return resolvedModuleData.async\n        ? [resolvedModuleData.id, resolvedModuleData.chunks, name, 1]\n        : [resolvedModuleData.id, resolvedModuleData.chunks, name];\n    }\n    function requireAsyncModule(id) {\n      var promise = __webpack_require__(id);\n      if (\"function\" !== typeof promise.then || \"fulfilled\" === promise.status)\n        return null;\n      promise.then(\n        function (value) {\n          promise.status = \"fulfilled\";\n          promise.value = value;\n        },\n        function (reason) {\n          promise.status = \"rejected\";\n          promise.reason = reason;\n        }\n      );\n      return promise;\n    }\n    function ignoreReject() {}\n    function preloadModule(metadata) {\n      for (\n        var chunks = metadata[1], promises = [], i = 0;\n        i < chunks.length;\n\n      ) {\n        var chunkId = chunks[i++],\n          chunkFilename = chunks[i++],\n          entry = chunkCache.get(chunkId);\n        void 0 === entry\n          ? ((chunkFilename = loadChunk(chunkId, chunkFilename)),\n            promises.push(chunkFilename),\n            (entry = chunkCache.set.bind(chunkCache, chunkId, null)),\n            chunkFilename.then(entry, ignoreReject),\n            chunkCache.set(chunkId, chunkFilename))\n          : null !== entry && promises.push(entry);\n      }\n      return 4 === metadata.length\n        ? 0 === promises.length\n          ? requireAsyncModule(metadata[0])\n          : Promise.all(promises).then(function () {\n              return requireAsyncModule(metadata[0]);\n            })\n        : 0 < promises.length\n          ? Promise.all(promises)\n          : null;\n    }\n    function requireModule(metadata) {\n      var moduleExports = __webpack_require__(metadata[0]);\n      if (4 === metadata.length && \"function\" === typeof moduleExports.then)\n        if (\"fulfilled\" === moduleExports.status)\n          moduleExports = moduleExports.value;\n        else throw moduleExports.reason;\n      return \"*\" === metadata[2]\n        ? moduleExports\n        : \"\" === metadata[2]\n          ? moduleExports.__esModule\n            ? moduleExports.default\n            : moduleExports\n          : moduleExports[metadata[2]];\n    }\n    function loadChunk(chunkId, filename) {\n      chunkMap.set(chunkId, filename);\n      return __webpack_require__.e(chunkId);\n    }\n    function getIteratorFn(maybeIterable) {\n      if (null === maybeIterable || \"object\" !== typeof maybeIterable)\n        return null;\n      maybeIterable =\n        (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n        maybeIterable[\"@@iterator\"];\n      return \"function\" === typeof maybeIterable ? maybeIterable : null;\n    }\n    function isObjectPrototype(object) {\n      if (!object) return !1;\n      var ObjectPrototype = Object.prototype;\n      if (object === ObjectPrototype) return !0;\n      if (getPrototypeOf(object)) return !1;\n      object = Object.getOwnPropertyNames(object);\n      for (var i = 0; i < object.length; i++)\n        if (!(object[i] in ObjectPrototype)) return !1;\n      return !0;\n    }\n    function isSimpleObject(object) {\n      if (!isObjectPrototype(getPrototypeOf(object))) return !1;\n      for (\n        var names = Object.getOwnPropertyNames(object), i = 0;\n        i < names.length;\n        i++\n      ) {\n        var descriptor = Object.getOwnPropertyDescriptor(object, names[i]);\n        if (\n          !descriptor ||\n          (!descriptor.enumerable &&\n            ((\"key\" !== names[i] && \"ref\" !== names[i]) ||\n              \"function\" !== typeof descriptor.get))\n        )\n          return !1;\n      }\n      return !0;\n    }\n    function objectName(object) {\n      object = Object.prototype.toString.call(object);\n      return object.slice(8, object.length - 1);\n    }\n    function describeKeyForErrorMessage(key) {\n      var encodedKey = JSON.stringify(key);\n      return '\"' + key + '\"' === encodedKey ? key : encodedKey;\n    }\n    function describeValueForErrorMessage(value) {\n      switch (typeof value) {\n        case \"string\":\n          return JSON.stringify(\n            10 >= value.length ? value : value.slice(0, 10) + \"...\"\n          );\n        case \"object\":\n          if (isArrayImpl(value)) return \"[...]\";\n          if (null !== value && value.$$typeof === CLIENT_REFERENCE_TAG)\n            return \"client\";\n          value = objectName(value);\n          return \"Object\" === value ? \"{...}\" : value;\n        case \"function\":\n          return value.$$typeof === CLIENT_REFERENCE_TAG\n            ? \"client\"\n            : (value = value.displayName || value.name)\n              ? \"function \" + value\n              : \"function\";\n        default:\n          return String(value);\n      }\n    }\n    function describeElementType(type) {\n      if (\"string\" === typeof type) return type;\n      switch (type) {\n        case REACT_SUSPENSE_TYPE:\n          return \"Suspense\";\n        case REACT_SUSPENSE_LIST_TYPE:\n          return \"SuspenseList\";\n      }\n      if (\"object\" === typeof type)\n        switch (type.$$typeof) {\n          case REACT_FORWARD_REF_TYPE:\n            return describeElementType(type.render);\n          case REACT_MEMO_TYPE:\n            return describeElementType(type.type);\n          case REACT_LAZY_TYPE:\n            var payload = type._payload;\n            type = type._init;\n            try {\n              return describeElementType(type(payload));\n            } catch (x) {}\n        }\n      return \"\";\n    }\n    function describeObjectForErrorMessage(objectOrArray, expandedName) {\n      var objKind = objectName(objectOrArray);\n      if (\"Object\" !== objKind && \"Array\" !== objKind) return objKind;\n      var start = -1,\n        length = 0;\n      if (isArrayImpl(objectOrArray))\n        if (jsxChildrenParents.has(objectOrArray)) {\n          var type = jsxChildrenParents.get(objectOrArray);\n          objKind = \"<\" + describeElementType(type) + \">\";\n          for (var i = 0; i < objectOrArray.length; i++) {\n            var value = objectOrArray[i];\n            value =\n              \"string\" === typeof value\n                ? value\n                : \"object\" === typeof value && null !== value\n                  ? \"{\" + describeObjectForErrorMessage(value) + \"}\"\n                  : \"{\" + describeValueForErrorMessage(value) + \"}\";\n            \"\" + i === expandedName\n              ? ((start = objKind.length),\n                (length = value.length),\n                (objKind += value))\n              : (objKind =\n                  15 > value.length && 40 > objKind.length + value.length\n                    ? objKind + value\n                    : objKind + \"{...}\");\n          }\n          objKind += \"</\" + describeElementType(type) + \">\";\n        } else {\n          objKind = \"[\";\n          for (type = 0; type < objectOrArray.length; type++)\n            0 < type && (objKind += \", \"),\n              (i = objectOrArray[type]),\n              (i =\n                \"object\" === typeof i && null !== i\n                  ? describeObjectForErrorMessage(i)\n                  : describeValueForErrorMessage(i)),\n              \"\" + type === expandedName\n                ? ((start = objKind.length),\n                  (length = i.length),\n                  (objKind += i))\n                : (objKind =\n                    10 > i.length && 40 > objKind.length + i.length\n                      ? objKind + i\n                      : objKind + \"...\");\n          objKind += \"]\";\n        }\n      else if (objectOrArray.$$typeof === REACT_ELEMENT_TYPE)\n        objKind = \"<\" + describeElementType(objectOrArray.type) + \"/>\";\n      else {\n        if (objectOrArray.$$typeof === CLIENT_REFERENCE_TAG) return \"client\";\n        if (jsxPropsParents.has(objectOrArray)) {\n          objKind = jsxPropsParents.get(objectOrArray);\n          objKind = \"<\" + (describeElementType(objKind) || \"...\");\n          type = Object.keys(objectOrArray);\n          for (i = 0; i < type.length; i++) {\n            objKind += \" \";\n            value = type[i];\n            objKind += describeKeyForErrorMessage(value) + \"=\";\n            var _value2 = objectOrArray[value];\n            var _substr2 =\n              value === expandedName &&\n              \"object\" === typeof _value2 &&\n              null !== _value2\n                ? describeObjectForErrorMessage(_value2)\n                : describeValueForErrorMessage(_value2);\n            \"string\" !== typeof _value2 && (_substr2 = \"{\" + _substr2 + \"}\");\n            value === expandedName\n              ? ((start = objKind.length),\n                (length = _substr2.length),\n                (objKind += _substr2))\n              : (objKind =\n                  10 > _substr2.length && 40 > objKind.length + _substr2.length\n                    ? objKind + _substr2\n                    : objKind + \"...\");\n          }\n          objKind += \">\";\n        } else {\n          objKind = \"{\";\n          type = Object.keys(objectOrArray);\n          for (i = 0; i < type.length; i++)\n            0 < i && (objKind += \", \"),\n              (value = type[i]),\n              (objKind += describeKeyForErrorMessage(value) + \": \"),\n              (_value2 = objectOrArray[value]),\n              (_value2 =\n                \"object\" === typeof _value2 && null !== _value2\n                  ? describeObjectForErrorMessage(_value2)\n                  : describeValueForErrorMessage(_value2)),\n              value === expandedName\n                ? ((start = objKind.length),\n                  (length = _value2.length),\n                  (objKind += _value2))\n                : (objKind =\n                    10 > _value2.length && 40 > objKind.length + _value2.length\n                      ? objKind + _value2\n                      : objKind + \"...\");\n          objKind += \"}\";\n        }\n      }\n      return void 0 === expandedName\n        ? objKind\n        : -1 < start && 0 < length\n          ? ((objectOrArray = \" \".repeat(start) + \"^\".repeat(length)),\n            \"\\n  \" + objKind + \"\\n  \" + objectOrArray)\n          : \"\\n  \" + objKind;\n    }\n    function serializeNumber(number) {\n      return Number.isFinite(number)\n        ? 0 === number && -Infinity === 1 / number\n          ? \"$-0\"\n          : number\n        : Infinity === number\n          ? \"$Infinity\"\n          : -Infinity === number\n            ? \"$-Infinity\"\n            : \"$NaN\";\n    }\n    function processReply(\n      root,\n      formFieldPrefix,\n      temporaryReferences,\n      resolve,\n      reject\n    ) {\n      function serializeTypedArray(tag, typedArray) {\n        typedArray = new Blob([\n          new Uint8Array(\n            typedArray.buffer,\n            typedArray.byteOffset,\n            typedArray.byteLength\n          )\n        ]);\n        var blobId = nextPartId++;\n        null === formData && (formData = new FormData());\n        formData.append(formFieldPrefix + blobId, typedArray);\n        return \"$\" + tag + blobId.toString(16);\n      }\n      function serializeBinaryReader(reader) {\n        function progress(entry) {\n          entry.done\n            ? ((entry = nextPartId++),\n              data.append(formFieldPrefix + entry, new Blob(buffer)),\n              data.append(\n                formFieldPrefix + streamId,\n                '\"$o' + entry.toString(16) + '\"'\n              ),\n              data.append(formFieldPrefix + streamId, \"C\"),\n              pendingParts--,\n              0 === pendingParts && resolve(data))\n            : (buffer.push(entry.value),\n              reader.read(new Uint8Array(1024)).then(progress, reject));\n        }\n        null === formData && (formData = new FormData());\n        var data = formData;\n        pendingParts++;\n        var streamId = nextPartId++,\n          buffer = [];\n        reader.read(new Uint8Array(1024)).then(progress, reject);\n        return \"$r\" + streamId.toString(16);\n      }\n      function serializeReader(reader) {\n        function progress(entry) {\n          if (entry.done)\n            data.append(formFieldPrefix + streamId, \"C\"),\n              pendingParts--,\n              0 === pendingParts && resolve(data);\n          else\n            try {\n              var partJSON = JSON.stringify(entry.value, resolveToJSON);\n              data.append(formFieldPrefix + streamId, partJSON);\n              reader.read().then(progress, reject);\n            } catch (x) {\n              reject(x);\n            }\n        }\n        null === formData && (formData = new FormData());\n        var data = formData;\n        pendingParts++;\n        var streamId = nextPartId++;\n        reader.read().then(progress, reject);\n        return \"$R\" + streamId.toString(16);\n      }\n      function serializeReadableStream(stream) {\n        try {\n          var binaryReader = stream.getReader({ mode: \"byob\" });\n        } catch (x) {\n          return serializeReader(stream.getReader());\n        }\n        return serializeBinaryReader(binaryReader);\n      }\n      function serializeAsyncIterable(iterable, iterator) {\n        function progress(entry) {\n          if (entry.done) {\n            if (void 0 === entry.value)\n              data.append(formFieldPrefix + streamId, \"C\");\n            else\n              try {\n                var partJSON = JSON.stringify(entry.value, resolveToJSON);\n                data.append(formFieldPrefix + streamId, \"C\" + partJSON);\n              } catch (x) {\n                reject(x);\n                return;\n              }\n            pendingParts--;\n            0 === pendingParts && resolve(data);\n          } else\n            try {\n              var _partJSON = JSON.stringify(entry.value, resolveToJSON);\n              data.append(formFieldPrefix + streamId, _partJSON);\n              iterator.next().then(progress, reject);\n            } catch (x$0) {\n              reject(x$0);\n            }\n        }\n        null === formData && (formData = new FormData());\n        var data = formData;\n        pendingParts++;\n        var streamId = nextPartId++;\n        iterable = iterable === iterator;\n        iterator.next().then(progress, reject);\n        return \"$\" + (iterable ? \"x\" : \"X\") + streamId.toString(16);\n      }\n      function resolveToJSON(key, value) {\n        var originalValue = this[key];\n        \"object\" !== typeof originalValue ||\n          originalValue === value ||\n          originalValue instanceof Date ||\n          (\"Object\" !== objectName(originalValue)\n            ? console.error(\n                \"Only plain objects can be passed to Server Functions from the Client. %s objects are not supported.%s\",\n                objectName(originalValue),\n                describeObjectForErrorMessage(this, key)\n              )\n            : console.error(\n                \"Only plain objects can be passed to Server Functions from the Client. Objects with toJSON methods are not supported. Convert it manually to a simple value before passing it to props.%s\",\n                describeObjectForErrorMessage(this, key)\n              ));\n        if (null === value) return null;\n        if (\"object\" === typeof value) {\n          switch (value.$$typeof) {\n            case REACT_ELEMENT_TYPE:\n              if (void 0 !== temporaryReferences && -1 === key.indexOf(\":\")) {\n                var parentReference = writtenObjects.get(this);\n                if (void 0 !== parentReference)\n                  return (\n                    temporaryReferences.set(parentReference + \":\" + key, value),\n                    \"$T\"\n                  );\n              }\n              throw Error(\n                \"React Element cannot be passed to Server Functions from the Client without a temporary reference set. Pass a TemporaryReferenceSet to the options.\" +\n                  describeObjectForErrorMessage(this, key)\n              );\n            case REACT_LAZY_TYPE:\n              originalValue = value._payload;\n              var init = value._init;\n              null === formData && (formData = new FormData());\n              pendingParts++;\n              try {\n                parentReference = init(originalValue);\n                var lazyId = nextPartId++,\n                  partJSON = serializeModel(parentReference, lazyId);\n                formData.append(formFieldPrefix + lazyId, partJSON);\n                return \"$\" + lazyId.toString(16);\n              } catch (x) {\n                if (\n                  \"object\" === typeof x &&\n                  null !== x &&\n                  \"function\" === typeof x.then\n                ) {\n                  pendingParts++;\n                  var _lazyId = nextPartId++;\n                  parentReference = function () {\n                    try {\n                      var _partJSON2 = serializeModel(value, _lazyId),\n                        _data = formData;\n                      _data.append(formFieldPrefix + _lazyId, _partJSON2);\n                      pendingParts--;\n                      0 === pendingParts && resolve(_data);\n                    } catch (reason) {\n                      reject(reason);\n                    }\n                  };\n                  x.then(parentReference, parentReference);\n                  return \"$\" + _lazyId.toString(16);\n                }\n                reject(x);\n                return null;\n              } finally {\n                pendingParts--;\n              }\n          }\n          if (\"function\" === typeof value.then) {\n            null === formData && (formData = new FormData());\n            pendingParts++;\n            var promiseId = nextPartId++;\n            value.then(function (partValue) {\n              try {\n                var _partJSON3 = serializeModel(partValue, promiseId);\n                partValue = formData;\n                partValue.append(formFieldPrefix + promiseId, _partJSON3);\n                pendingParts--;\n                0 === pendingParts && resolve(partValue);\n              } catch (reason) {\n                reject(reason);\n              }\n            }, reject);\n            return \"$@\" + promiseId.toString(16);\n          }\n          parentReference = writtenObjects.get(value);\n          if (void 0 !== parentReference)\n            if (modelRoot === value) modelRoot = null;\n            else return parentReference;\n          else\n            -1 === key.indexOf(\":\") &&\n              ((parentReference = writtenObjects.get(this)),\n              void 0 !== parentReference &&\n                ((parentReference = parentReference + \":\" + key),\n                writtenObjects.set(value, parentReference),\n                void 0 !== temporaryReferences &&\n                  temporaryReferences.set(parentReference, value)));\n          if (isArrayImpl(value)) return value;\n          if (value instanceof FormData) {\n            null === formData && (formData = new FormData());\n            var _data3 = formData;\n            key = nextPartId++;\n            var prefix = formFieldPrefix + key + \"_\";\n            value.forEach(function (originalValue, originalKey) {\n              _data3.append(prefix + originalKey, originalValue);\n            });\n            return \"$K\" + key.toString(16);\n          }\n          if (value instanceof Map)\n            return (\n              (key = nextPartId++),\n              (parentReference = serializeModel(Array.from(value), key)),\n              null === formData && (formData = new FormData()),\n              formData.append(formFieldPrefix + key, parentReference),\n              \"$Q\" + key.toString(16)\n            );\n          if (value instanceof Set)\n            return (\n              (key = nextPartId++),\n              (parentReference = serializeModel(Array.from(value), key)),\n              null === formData && (formData = new FormData()),\n              formData.append(formFieldPrefix + key, parentReference),\n              \"$W\" + key.toString(16)\n            );\n          if (value instanceof ArrayBuffer)\n            return (\n              (key = new Blob([value])),\n              (parentReference = nextPartId++),\n              null === formData && (formData = new FormData()),\n              formData.append(formFieldPrefix + parentReference, key),\n              \"$A\" + parentReference.toString(16)\n            );\n          if (value instanceof Int8Array)\n            return serializeTypedArray(\"O\", value);\n          if (value instanceof Uint8Array)\n            return serializeTypedArray(\"o\", value);\n          if (value instanceof Uint8ClampedArray)\n            return serializeTypedArray(\"U\", value);\n          if (value instanceof Int16Array)\n            return serializeTypedArray(\"S\", value);\n          if (value instanceof Uint16Array)\n            return serializeTypedArray(\"s\", value);\n          if (value instanceof Int32Array)\n            return serializeTypedArray(\"L\", value);\n          if (value instanceof Uint32Array)\n            return serializeTypedArray(\"l\", value);\n          if (value instanceof Float32Array)\n            return serializeTypedArray(\"G\", value);\n          if (value instanceof Float64Array)\n            return serializeTypedArray(\"g\", value);\n          if (value instanceof BigInt64Array)\n            return serializeTypedArray(\"M\", value);\n          if (value instanceof BigUint64Array)\n            return serializeTypedArray(\"m\", value);\n          if (value instanceof DataView) return serializeTypedArray(\"V\", value);\n          if (\"function\" === typeof Blob && value instanceof Blob)\n            return (\n              null === formData && (formData = new FormData()),\n              (key = nextPartId++),\n              formData.append(formFieldPrefix + key, value),\n              \"$B\" + key.toString(16)\n            );\n          if ((parentReference = getIteratorFn(value)))\n            return (\n              (parentReference = parentReference.call(value)),\n              parentReference === value\n                ? ((key = nextPartId++),\n                  (parentReference = serializeModel(\n                    Array.from(parentReference),\n                    key\n                  )),\n                  null === formData && (formData = new FormData()),\n                  formData.append(formFieldPrefix + key, parentReference),\n                  \"$i\" + key.toString(16))\n                : Array.from(parentReference)\n            );\n          if (\n            \"function\" === typeof ReadableStream &&\n            value instanceof ReadableStream\n          )\n            return serializeReadableStream(value);\n          parentReference = value[ASYNC_ITERATOR];\n          if (\"function\" === typeof parentReference)\n            return serializeAsyncIterable(value, parentReference.call(value));\n          parentReference = getPrototypeOf(value);\n          if (\n            parentReference !== ObjectPrototype &&\n            (null === parentReference ||\n              null !== getPrototypeOf(parentReference))\n          ) {\n            if (void 0 === temporaryReferences)\n              throw Error(\n                \"Only plain objects, and a few built-ins, can be passed to Server Functions. Classes or null prototypes are not supported.\" +\n                  describeObjectForErrorMessage(this, key)\n              );\n            return \"$T\";\n          }\n          value.$$typeof === REACT_CONTEXT_TYPE\n            ? console.error(\n                \"React Context Providers cannot be passed to Server Functions from the Client.%s\",\n                describeObjectForErrorMessage(this, key)\n              )\n            : \"Object\" !== objectName(value)\n              ? console.error(\n                  \"Only plain objects can be passed to Server Functions from the Client. %s objects are not supported.%s\",\n                  objectName(value),\n                  describeObjectForErrorMessage(this, key)\n                )\n              : isSimpleObject(value)\n                ? Object.getOwnPropertySymbols &&\n                  ((parentReference = Object.getOwnPropertySymbols(value)),\n                  0 < parentReference.length &&\n                    console.error(\n                      \"Only plain objects can be passed to Server Functions from the Client. Objects with symbol properties like %s are not supported.%s\",\n                      parentReference[0].description,\n                      describeObjectForErrorMessage(this, key)\n                    ))\n                : console.error(\n                    \"Only plain objects can be passed to Server Functions from the Client. Classes or other objects with methods are not supported.%s\",\n                    describeObjectForErrorMessage(this, key)\n                  );\n          return value;\n        }\n        if (\"string\" === typeof value) {\n          if (\"Z\" === value[value.length - 1] && this[key] instanceof Date)\n            return \"$D\" + value;\n          key = \"$\" === value[0] ? \"$\" + value : value;\n          return key;\n        }\n        if (\"boolean\" === typeof value) return value;\n        if (\"number\" === typeof value) return serializeNumber(value);\n        if (\"undefined\" === typeof value) return \"$undefined\";\n        if (\"function\" === typeof value) {\n          parentReference = knownServerReferences.get(value);\n          if (void 0 !== parentReference)\n            return (\n              (key = JSON.stringify(\n                { id: parentReference.id, bound: parentReference.bound },\n                resolveToJSON\n              )),\n              null === formData && (formData = new FormData()),\n              (parentReference = nextPartId++),\n              formData.set(formFieldPrefix + parentReference, key),\n              \"$F\" + parentReference.toString(16)\n            );\n          if (\n            void 0 !== temporaryReferences &&\n            -1 === key.indexOf(\":\") &&\n            ((parentReference = writtenObjects.get(this)),\n            void 0 !== parentReference)\n          )\n            return (\n              temporaryReferences.set(parentReference + \":\" + key, value), \"$T\"\n            );\n          throw Error(\n            \"Client Functions cannot be passed directly to Server Functions. Only Functions passed from the Server can be passed back again.\"\n          );\n        }\n        if (\"symbol\" === typeof value) {\n          if (\n            void 0 !== temporaryReferences &&\n            -1 === key.indexOf(\":\") &&\n            ((parentReference = writtenObjects.get(this)),\n            void 0 !== parentReference)\n          )\n            return (\n              temporaryReferences.set(parentReference + \":\" + key, value), \"$T\"\n            );\n          throw Error(\n            \"Symbols cannot be passed to a Server Function without a temporary reference set. Pass a TemporaryReferenceSet to the options.\" +\n              describeObjectForErrorMessage(this, key)\n          );\n        }\n        if (\"bigint\" === typeof value) return \"$n\" + value.toString(10);\n        throw Error(\n          \"Type \" +\n            typeof value +\n            \" is not supported as an argument to a Server Function.\"\n        );\n      }\n      function serializeModel(model, id) {\n        \"object\" === typeof model &&\n          null !== model &&\n          ((id = \"$\" + id.toString(16)),\n          writtenObjects.set(model, id),\n          void 0 !== temporaryReferences && temporaryReferences.set(id, model));\n        modelRoot = model;\n        return JSON.stringify(model, resolveToJSON);\n      }\n      var nextPartId = 1,\n        pendingParts = 0,\n        formData = null,\n        writtenObjects = new WeakMap(),\n        modelRoot = root,\n        json = serializeModel(root, 0);\n      null === formData\n        ? resolve(json)\n        : (formData.set(formFieldPrefix + \"0\", json),\n          0 === pendingParts && resolve(formData));\n      return function () {\n        0 < pendingParts &&\n          ((pendingParts = 0),\n          null === formData ? resolve(json) : resolve(formData));\n      };\n    }\n    function createFakeServerFunction(\n      name,\n      filename,\n      sourceMap,\n      line,\n      col,\n      environmentName,\n      innerFunction\n    ) {\n      name || (name = \"<anonymous>\");\n      var encodedName = JSON.stringify(name);\n      1 >= line\n        ? ((line = encodedName.length + 7),\n          (col =\n            \"s=>({\" +\n            encodedName +\n            \" \".repeat(col < line ? 0 : col - line) +\n            \":(...args) => s(...args)})\\n/* This module is a proxy to a Server Action. Turn on Source Maps to see the server source. */\"))\n        : (col =\n            \"/* This module is a proxy to a Server Action. Turn on Source Maps to see the server source. */\" +\n            \"\\n\".repeat(line - 2) +\n            \"server=>({\" +\n            encodedName +\n            \":\\n\" +\n            \" \".repeat(1 > col ? 0 : col - 1) +\n            \"(...args) => server(...args)})\");\n      filename.startsWith(\"/\") && (filename = \"file://\" + filename);\n      sourceMap\n        ? ((col +=\n            \"\\n//# sourceURL=rsc://React/\" +\n            encodeURIComponent(environmentName) +\n            \"/\" +\n            encodeURI(filename) +\n            \"?s\" +\n            fakeServerFunctionIdx++),\n          (col += \"\\n//# sourceMappingURL=\" + sourceMap))\n        : filename && (col += \"\\n//# sourceURL=\" + filename);\n      try {\n        return (0, eval)(col)(innerFunction)[name];\n      } catch (x) {\n        return innerFunction;\n      }\n    }\n    function registerBoundServerReference(reference, id, bound) {\n      knownServerReferences.has(reference) ||\n        knownServerReferences.set(reference, {\n          id: id,\n          originalBind: reference.bind,\n          bound: bound\n        });\n    }\n    function createBoundServerReference(\n      metaData,\n      callServer,\n      encodeFormAction,\n      findSourceMapURL\n    ) {\n      function action() {\n        var args = Array.prototype.slice.call(arguments);\n        return bound\n          ? \"fulfilled\" === bound.status\n            ? callServer(id, bound.value.concat(args))\n            : Promise.resolve(bound).then(function (boundArgs) {\n                return callServer(id, boundArgs.concat(args));\n              })\n          : callServer(id, args);\n      }\n      var id = metaData.id,\n        bound = metaData.bound,\n        location = metaData.location;\n      if (location) {\n        encodeFormAction = metaData.name || \"\";\n        var filename = location[1],\n          line = location[2];\n        location = location[3];\n        metaData = metaData.env || \"Server\";\n        findSourceMapURL =\n          null == findSourceMapURL\n            ? null\n            : findSourceMapURL(filename, metaData);\n        action = createFakeServerFunction(\n          encodeFormAction,\n          filename,\n          findSourceMapURL,\n          line,\n          location,\n          metaData,\n          action\n        );\n      }\n      registerBoundServerReference(action, id, bound);\n      return action;\n    }\n    function parseStackLocation(error) {\n      error = error.stack;\n      error.startsWith(\"Error: react-stack-top-frame\\n\") &&\n        (error = error.slice(29));\n      var endOfFirst = error.indexOf(\"\\n\");\n      if (-1 !== endOfFirst) {\n        var endOfSecond = error.indexOf(\"\\n\", endOfFirst + 1);\n        endOfFirst =\n          -1 === endOfSecond\n            ? error.slice(endOfFirst + 1)\n            : error.slice(endOfFirst + 1, endOfSecond);\n      } else endOfFirst = error;\n      error = v8FrameRegExp.exec(endOfFirst);\n      if (\n        !error &&\n        ((error = jscSpiderMonkeyFrameRegExp.exec(endOfFirst)), !error)\n      )\n        return null;\n      endOfFirst = error[1] || \"\";\n      \"<anonymous>\" === endOfFirst && (endOfFirst = \"\");\n      endOfSecond = error[2] || error[5] || \"\";\n      \"<anonymous>\" === endOfSecond && (endOfSecond = \"\");\n      return [\n        endOfFirst,\n        endOfSecond,\n        +(error[3] || error[6]),\n        +(error[4] || error[7])\n      ];\n    }\n    function getComponentNameFromType(type) {\n      if (null == type) return null;\n      if (\"function\" === typeof type)\n        return type.$$typeof === REACT_CLIENT_REFERENCE\n          ? null\n          : type.displayName || type.name || null;\n      if (\"string\" === typeof type) return type;\n      switch (type) {\n        case REACT_FRAGMENT_TYPE:\n          return \"Fragment\";\n        case REACT_PROFILER_TYPE:\n          return \"Profiler\";\n        case REACT_STRICT_MODE_TYPE:\n          return \"StrictMode\";\n        case REACT_SUSPENSE_TYPE:\n          return \"Suspense\";\n        case REACT_SUSPENSE_LIST_TYPE:\n          return \"SuspenseList\";\n        case REACT_ACTIVITY_TYPE:\n          return \"Activity\";\n      }\n      if (\"object\" === typeof type)\n        switch (\n          (\"number\" === typeof type.tag &&\n            console.error(\n              \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n            ),\n          type.$$typeof)\n        ) {\n          case REACT_PORTAL_TYPE:\n            return \"Portal\";\n          case REACT_CONTEXT_TYPE:\n            return type.displayName || \"Context\";\n          case REACT_CONSUMER_TYPE:\n            return (type._context.displayName || \"Context\") + \".Consumer\";\n          case REACT_FORWARD_REF_TYPE:\n            var innerType = type.render;\n            type = type.displayName;\n            type ||\n              ((type = innerType.displayName || innerType.name || \"\"),\n              (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n            return type;\n          case REACT_MEMO_TYPE:\n            return (\n              (innerType = type.displayName || null),\n              null !== innerType\n                ? innerType\n                : getComponentNameFromType(type.type) || \"Memo\"\n            );\n          case REACT_LAZY_TYPE:\n            innerType = type._payload;\n            type = type._init;\n            try {\n              return getComponentNameFromType(type(innerType));\n            } catch (x) {}\n        }\n      return null;\n    }\n    function ReactPromise(status, value, reason) {\n      this.status = status;\n      this.value = value;\n      this.reason = reason;\n      this._debugInfo = null;\n    }\n    function unwrapWeakResponse(weakResponse) {\n      weakResponse = weakResponse.weak.deref();\n      if (void 0 === weakResponse)\n        throw Error(\n          \"We did not expect to receive new data after GC:ing the response.\"\n        );\n      return weakResponse;\n    }\n    function cleanupDebugChannel(debugChannel) {\n      debugChannel(\"\");\n    }\n    function readChunk(chunk) {\n      switch (chunk.status) {\n        case \"resolved_model\":\n          initializeModelChunk(chunk);\n          break;\n        case \"resolved_module\":\n          initializeModuleChunk(chunk);\n      }\n      switch (chunk.status) {\n        case \"fulfilled\":\n          return chunk.value;\n        case \"pending\":\n        case \"blocked\":\n        case \"halted\":\n          throw chunk;\n        default:\n          throw chunk.reason;\n      }\n    }\n    function getRoot(weakResponse) {\n      weakResponse = unwrapWeakResponse(weakResponse);\n      return getChunk(weakResponse, 0);\n    }\n    function createPendingChunk(response) {\n      0 === response._pendingChunks++ &&\n        ((response._weakResponse.response = response),\n        null !== response._pendingInitialRender &&\n          (clearTimeout(response._pendingInitialRender),\n          (response._pendingInitialRender = null)));\n      return new ReactPromise(\"pending\", null, null);\n    }\n    function releasePendingChunk(response, chunk) {\n      \"pending\" === chunk.status &&\n        0 === --response._pendingChunks &&\n        ((response._weakResponse.response = null),\n        (response._pendingInitialRender = setTimeout(\n          flushInitialRenderPerformance.bind(null, response),\n          100\n        )));\n    }\n    function wakeChunk(listeners, value) {\n      for (var i = 0; i < listeners.length; i++) {\n        var listener = listeners[i];\n        \"function\" === typeof listener\n          ? listener(value)\n          : fulfillReference(listener, value);\n      }\n    }\n    function rejectChunk(listeners, error) {\n      for (var i = 0; i < listeners.length; i++) {\n        var listener = listeners[i];\n        \"function\" === typeof listener\n          ? listener(error)\n          : rejectReference(listener, error);\n      }\n    }\n    function resolveBlockedCycle(resolvedChunk, reference) {\n      var referencedChunk = reference.handler.chunk;\n      if (null === referencedChunk) return null;\n      if (referencedChunk === resolvedChunk) return reference.handler;\n      reference = referencedChunk.value;\n      if (null !== reference)\n        for (\n          referencedChunk = 0;\n          referencedChunk < reference.length;\n          referencedChunk++\n        ) {\n          var listener = reference[referencedChunk];\n          if (\n            \"function\" !== typeof listener &&\n            ((listener = resolveBlockedCycle(resolvedChunk, listener)),\n            null !== listener)\n          )\n            return listener;\n        }\n      return null;\n    }\n    function wakeChunkIfInitialized(chunk, resolveListeners, rejectListeners) {\n      switch (chunk.status) {\n        case \"fulfilled\":\n          wakeChunk(resolveListeners, chunk.value);\n          break;\n        case \"blocked\":\n          for (var i = 0; i < resolveListeners.length; i++) {\n            var listener = resolveListeners[i];\n            if (\"function\" !== typeof listener) {\n              var cyclicHandler = resolveBlockedCycle(chunk, listener);\n              null !== cyclicHandler &&\n                (fulfillReference(listener, cyclicHandler.value),\n                resolveListeners.splice(i, 1),\n                i--,\n                null !== rejectListeners &&\n                  ((listener = rejectListeners.indexOf(listener)),\n                  -1 !== listener && rejectListeners.splice(listener, 1)));\n            }\n          }\n        case \"pending\":\n          if (chunk.value)\n            for (i = 0; i < resolveListeners.length; i++)\n              chunk.value.push(resolveListeners[i]);\n          else chunk.value = resolveListeners;\n          if (chunk.reason) {\n            if (rejectListeners)\n              for (\n                resolveListeners = 0;\n                resolveListeners < rejectListeners.length;\n                resolveListeners++\n              )\n                chunk.reason.push(rejectListeners[resolveListeners]);\n          } else chunk.reason = rejectListeners;\n          break;\n        case \"rejected\":\n          rejectListeners && rejectChunk(rejectListeners, chunk.reason);\n      }\n    }\n    function triggerErrorOnChunk(response, chunk, error) {\n      \"pending\" !== chunk.status && \"blocked\" !== chunk.status\n        ? chunk.reason.error(error)\n        : (releasePendingChunk(response, chunk),\n          (response = chunk.reason),\n          (chunk.status = \"rejected\"),\n          (chunk.reason = error),\n          null !== response && rejectChunk(response, error));\n    }\n    function createResolvedIteratorResultChunk(response, value, done) {\n      return new ReactPromise(\n        \"resolved_model\",\n        (done ? '{\"done\":true,\"value\":' : '{\"done\":false,\"value\":') +\n          value +\n          \"}\",\n        response\n      );\n    }\n    function resolveIteratorResultChunk(response, chunk, value, done) {\n      resolveModelChunk(\n        response,\n        chunk,\n        (done ? '{\"done\":true,\"value\":' : '{\"done\":false,\"value\":') +\n          value +\n          \"}\"\n      );\n    }\n    function resolveModelChunk(response, chunk, value) {\n      if (\"pending\" !== chunk.status) chunk.reason.enqueueModel(value);\n      else {\n        releasePendingChunk(response, chunk);\n        var resolveListeners = chunk.value,\n          rejectListeners = chunk.reason;\n        chunk.status = \"resolved_model\";\n        chunk.value = value;\n        chunk.reason = response;\n        null !== resolveListeners &&\n          (initializeModelChunk(chunk),\n          wakeChunkIfInitialized(chunk, resolveListeners, rejectListeners));\n      }\n    }\n    function resolveModuleChunk(response, chunk, value) {\n      if (\"pending\" === chunk.status || \"blocked\" === chunk.status) {\n        releasePendingChunk(response, chunk);\n        response = chunk.value;\n        var rejectListeners = chunk.reason;\n        chunk.status = \"resolved_module\";\n        chunk.value = value;\n        null !== response &&\n          (initializeModuleChunk(chunk),\n          wakeChunkIfInitialized(chunk, response, rejectListeners));\n      }\n    }\n    function initializeModelChunk(chunk) {\n      var prevHandler = initializingHandler;\n      initializingHandler = null;\n      var resolvedModel = chunk.value,\n        response = chunk.reason;\n      chunk.status = \"blocked\";\n      chunk.value = null;\n      chunk.reason = null;\n      try {\n        var value = JSON.parse(resolvedModel, response._fromJSON),\n          resolveListeners = chunk.value;\n        null !== resolveListeners &&\n          ((chunk.value = null),\n          (chunk.reason = null),\n          wakeChunk(resolveListeners, value));\n        if (null !== initializingHandler) {\n          if (initializingHandler.errored) throw initializingHandler.value;\n          if (0 < initializingHandler.deps) {\n            initializingHandler.value = value;\n            initializingHandler.chunk = chunk;\n            return;\n          }\n        }\n        chunk.status = \"fulfilled\";\n        chunk.value = value;\n      } catch (error) {\n        (chunk.status = \"rejected\"), (chunk.reason = error);\n      } finally {\n        initializingHandler = prevHandler;\n      }\n    }\n    function initializeModuleChunk(chunk) {\n      try {\n        var value = requireModule(chunk.value);\n        chunk.status = \"fulfilled\";\n        chunk.value = value;\n      } catch (error) {\n        (chunk.status = \"rejected\"), (chunk.reason = error);\n      }\n    }\n    function reportGlobalError(weakResponse, error) {\n      if (void 0 !== weakResponse.weak.deref()) {\n        var response = unwrapWeakResponse(weakResponse);\n        response._closed = !0;\n        response._closedReason = error;\n        response._chunks.forEach(function (chunk) {\n          \"pending\" === chunk.status &&\n            triggerErrorOnChunk(response, chunk, error);\n        });\n        weakResponse = response._debugChannel;\n        void 0 !== weakResponse &&\n          (weakResponse(\"\"), (response._debugChannel = void 0));\n      }\n    }\n    function nullRefGetter() {\n      return null;\n    }\n    function getTaskName(type) {\n      if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n      if (\"function\" === typeof type) return '\"use client\"';\n      if (\n        \"object\" === typeof type &&\n        null !== type &&\n        type.$$typeof === REACT_LAZY_TYPE\n      )\n        return type._init === readChunk ? '\"use client\"' : \"<...>\";\n      try {\n        var name = getComponentNameFromType(type);\n        return name ? \"<\" + name + \">\" : \"<...>\";\n      } catch (x) {\n        return \"<...>\";\n      }\n    }\n    function initializeElement(response, element) {\n      var stack = element._debugStack,\n        owner = element._owner;\n      null === owner && (element._owner = response._debugRootOwner);\n      var env = response._rootEnvironmentName;\n      null !== owner && null != owner.env && (env = owner.env);\n      var normalizedStackTrace = null;\n      null === owner && null != response._debugRootStack\n        ? (normalizedStackTrace = response._debugRootStack)\n        : null !== stack &&\n          (normalizedStackTrace = createFakeJSXCallStackInDEV(\n            response,\n            stack,\n            env\n          ));\n      element._debugStack = normalizedStackTrace;\n      normalizedStackTrace = null;\n      supportsCreateTask &&\n        null !== stack &&\n        ((normalizedStackTrace = console.createTask.bind(\n          console,\n          getTaskName(element.type)\n        )),\n        (stack = buildFakeCallStack(\n          response,\n          stack,\n          env,\n          !1,\n          normalizedStackTrace\n        )),\n        (env = null === owner ? null : initializeFakeTask(response, owner)),\n        null === env\n          ? ((env = response._debugRootTask),\n            (normalizedStackTrace = null != env ? env.run(stack) : stack()))\n          : (normalizedStackTrace = env.run(stack)));\n      element._debugTask = normalizedStackTrace;\n      null !== owner && initializeFakeStack(response, owner);\n      Object.freeze(element.props);\n    }\n    function createLazyChunkWrapper(chunk) {\n      var lazyType = {\n        $$typeof: REACT_LAZY_TYPE,\n        _payload: chunk,\n        _init: readChunk\n      };\n      chunk = chunk._debugInfo || (chunk._debugInfo = []);\n      lazyType._debugInfo = chunk;\n      return lazyType;\n    }\n    function getChunk(response, id) {\n      var chunks = response._chunks,\n        chunk = chunks.get(id);\n      chunk ||\n        ((chunk = response._closed\n          ? new ReactPromise(\"rejected\", null, response._closedReason)\n          : createPendingChunk(response)),\n        chunks.set(id, chunk));\n      return chunk;\n    }\n    function fulfillReference(reference, value) {\n      for (\n        var response = reference.response,\n          handler = reference.handler,\n          parentObject = reference.parentObject,\n          key = reference.key,\n          map = reference.map,\n          path = reference.path,\n          i = 1;\n        i < path.length;\n        i++\n      ) {\n        for (; value.$$typeof === REACT_LAZY_TYPE; )\n          if (((value = value._payload), value === handler.chunk))\n            value = handler.value;\n          else {\n            switch (value.status) {\n              case \"resolved_model\":\n                initializeModelChunk(value);\n                break;\n              case \"resolved_module\":\n                initializeModuleChunk(value);\n            }\n            switch (value.status) {\n              case \"fulfilled\":\n                value = value.value;\n                continue;\n              case \"blocked\":\n                var cyclicHandler = resolveBlockedCycle(value, reference);\n                if (null !== cyclicHandler) {\n                  value = cyclicHandler.value;\n                  continue;\n                }\n              case \"pending\":\n                path.splice(0, i - 1);\n                null === value.value\n                  ? (value.value = [reference])\n                  : value.value.push(reference);\n                null === value.reason\n                  ? (value.reason = [reference])\n                  : value.reason.push(reference);\n                return;\n              case \"halted\":\n                return;\n              default:\n                rejectReference(reference, value.reason);\n                return;\n            }\n          }\n        value = value[path[i]];\n      }\n      reference = map(response, value, parentObject, key);\n      parentObject[key] = reference;\n      \"\" === key && null === handler.value && (handler.value = reference);\n      if (\n        parentObject[0] === REACT_ELEMENT_TYPE &&\n        \"object\" === typeof handler.value &&\n        null !== handler.value &&\n        handler.value.$$typeof === REACT_ELEMENT_TYPE\n      )\n        switch (((parentObject = handler.value), key)) {\n          case \"3\":\n            parentObject.props = reference;\n            break;\n          case \"4\":\n            parentObject._owner = reference;\n            break;\n          case \"5\":\n            parentObject._debugStack = reference;\n        }\n      handler.deps--;\n      0 === handler.deps &&\n        ((key = handler.chunk),\n        null !== key &&\n          \"blocked\" === key.status &&\n          ((parentObject = key.value),\n          (key.status = \"fulfilled\"),\n          (key.value = handler.value),\n          null !== parentObject && wakeChunk(parentObject, handler.value)));\n    }\n    function rejectReference(reference, error) {\n      var handler = reference.handler;\n      reference = reference.response;\n      if (!handler.errored) {\n        var blockedValue = handler.value;\n        handler.errored = !0;\n        handler.value = error;\n        handler = handler.chunk;\n        if (null !== handler && \"blocked\" === handler.status) {\n          if (\n            \"object\" === typeof blockedValue &&\n            null !== blockedValue &&\n            blockedValue.$$typeof === REACT_ELEMENT_TYPE\n          ) {\n            var erroredComponent = {\n              name: getComponentNameFromType(blockedValue.type) || \"\",\n              owner: blockedValue._owner\n            };\n            erroredComponent.debugStack = blockedValue._debugStack;\n            supportsCreateTask &&\n              (erroredComponent.debugTask = blockedValue._debugTask);\n            (handler._debugInfo || (handler._debugInfo = [])).push(\n              erroredComponent\n            );\n          }\n          triggerErrorOnChunk(reference, handler, error);\n        }\n      }\n    }\n    function waitForReference(\n      referencedChunk,\n      parentObject,\n      key,\n      response,\n      map,\n      path\n    ) {\n      if (initializingHandler) {\n        var handler = initializingHandler;\n        handler.deps++;\n      } else\n        handler = initializingHandler = {\n          parent: null,\n          chunk: null,\n          value: null,\n          deps: 1,\n          errored: !1\n        };\n      parentObject = {\n        response: response,\n        handler: handler,\n        parentObject: parentObject,\n        key: key,\n        map: map,\n        path: path\n      };\n      null === referencedChunk.value\n        ? (referencedChunk.value = [parentObject])\n        : referencedChunk.value.push(parentObject);\n      null === referencedChunk.reason\n        ? (referencedChunk.reason = [parentObject])\n        : referencedChunk.reason.push(parentObject);\n      return null;\n    }\n    function loadServerReference(response, metaData, parentObject, key) {\n      if (!response._serverReferenceConfig)\n        return createBoundServerReference(\n          metaData,\n          response._callServer,\n          response._encodeFormAction,\n          response._debugFindSourceMapURL\n        );\n      var serverReference = resolveServerReference(\n          response._serverReferenceConfig,\n          metaData.id\n        ),\n        promise = preloadModule(serverReference);\n      if (promise)\n        metaData.bound && (promise = Promise.all([promise, metaData.bound]));\n      else if (metaData.bound) promise = Promise.resolve(metaData.bound);\n      else\n        return (\n          (promise = requireModule(serverReference)),\n          registerBoundServerReference(promise, metaData.id, metaData.bound),\n          promise\n        );\n      if (initializingHandler) {\n        var handler = initializingHandler;\n        handler.deps++;\n      } else\n        handler = initializingHandler = {\n          parent: null,\n          chunk: null,\n          value: null,\n          deps: 1,\n          errored: !1\n        };\n      promise.then(\n        function () {\n          var resolvedValue = requireModule(serverReference);\n          if (metaData.bound) {\n            var boundArgs = metaData.bound.value.slice(0);\n            boundArgs.unshift(null);\n            resolvedValue = resolvedValue.bind.apply(resolvedValue, boundArgs);\n          }\n          registerBoundServerReference(\n            resolvedValue,\n            metaData.id,\n            metaData.bound\n          );\n          parentObject[key] = resolvedValue;\n          \"\" === key &&\n            null === handler.value &&\n            (handler.value = resolvedValue);\n          if (\n            parentObject[0] === REACT_ELEMENT_TYPE &&\n            \"object\" === typeof handler.value &&\n            null !== handler.value &&\n            handler.value.$$typeof === REACT_ELEMENT_TYPE\n          )\n            switch (((boundArgs = handler.value), key)) {\n              case \"3\":\n                boundArgs.props = resolvedValue;\n                break;\n              case \"4\":\n                boundArgs._owner = resolvedValue;\n            }\n          handler.deps--;\n          0 === handler.deps &&\n            ((resolvedValue = handler.chunk),\n            null !== resolvedValue &&\n              \"blocked\" === resolvedValue.status &&\n              ((boundArgs = resolvedValue.value),\n              (resolvedValue.status = \"fulfilled\"),\n              (resolvedValue.value = handler.value),\n              null !== boundArgs && wakeChunk(boundArgs, handler.value)));\n        },\n        function (error) {\n          if (!handler.errored) {\n            var blockedValue = handler.value;\n            handler.errored = !0;\n            handler.value = error;\n            var chunk = handler.chunk;\n            if (null !== chunk && \"blocked\" === chunk.status) {\n              if (\n                \"object\" === typeof blockedValue &&\n                null !== blockedValue &&\n                blockedValue.$$typeof === REACT_ELEMENT_TYPE\n              ) {\n                var erroredComponent = {\n                  name: getComponentNameFromType(blockedValue.type) || \"\",\n                  owner: blockedValue._owner\n                };\n                erroredComponent.debugStack = blockedValue._debugStack;\n                supportsCreateTask &&\n                  (erroredComponent.debugTask = blockedValue._debugTask);\n                (chunk._debugInfo || (chunk._debugInfo = [])).push(\n                  erroredComponent\n                );\n              }\n              triggerErrorOnChunk(response, chunk, error);\n            }\n          }\n        }\n      );\n      return null;\n    }\n    function getOutlinedModel(response, reference, parentObject, key, map) {\n      reference = reference.split(\":\");\n      var id = parseInt(reference[0], 16);\n      id = getChunk(response, id);\n      switch (id.status) {\n        case \"resolved_model\":\n          initializeModelChunk(id);\n          break;\n        case \"resolved_module\":\n          initializeModuleChunk(id);\n      }\n      switch (id.status) {\n        case \"fulfilled\":\n          for (var value = id.value, i = 1; i < reference.length; i++) {\n            for (; value.$$typeof === REACT_LAZY_TYPE; ) {\n              value = value._payload;\n              switch (value.status) {\n                case \"resolved_model\":\n                  initializeModelChunk(value);\n                  break;\n                case \"resolved_module\":\n                  initializeModuleChunk(value);\n              }\n              switch (value.status) {\n                case \"fulfilled\":\n                  value = value.value;\n                  break;\n                case \"blocked\":\n                case \"pending\":\n                  return waitForReference(\n                    value,\n                    parentObject,\n                    key,\n                    response,\n                    map,\n                    reference.slice(i - 1)\n                  );\n                case \"halted\":\n                  return (\n                    initializingHandler\n                      ? ((response = initializingHandler), response.deps++)\n                      : (initializingHandler = {\n                          parent: null,\n                          chunk: null,\n                          value: null,\n                          deps: 1,\n                          errored: !1\n                        }),\n                    null\n                  );\n                default:\n                  return (\n                    initializingHandler\n                      ? ((initializingHandler.errored = !0),\n                        (initializingHandler.value = value.reason))\n                      : (initializingHandler = {\n                          parent: null,\n                          chunk: null,\n                          value: value.reason,\n                          deps: 0,\n                          errored: !0\n                        }),\n                    null\n                  );\n              }\n            }\n            value = value[reference[i]];\n          }\n          response = map(response, value, parentObject, key);\n          id._debugInfo &&\n            (\"object\" !== typeof response ||\n              null === response ||\n              (!isArrayImpl(response) &&\n                \"function\" !== typeof response[ASYNC_ITERATOR] &&\n                response.$$typeof !== REACT_ELEMENT_TYPE) ||\n              response._debugInfo ||\n              Object.defineProperty(response, \"_debugInfo\", {\n                configurable: !1,\n                enumerable: !1,\n                writable: !0,\n                value: id._debugInfo\n              }));\n          return response;\n        case \"pending\":\n        case \"blocked\":\n          return waitForReference(\n            id,\n            parentObject,\n            key,\n            response,\n            map,\n            reference\n          );\n        case \"halted\":\n          return (\n            initializingHandler\n              ? ((response = initializingHandler), response.deps++)\n              : (initializingHandler = {\n                  parent: null,\n                  chunk: null,\n                  value: null,\n                  deps: 1,\n                  errored: !1\n                }),\n            null\n          );\n        default:\n          return (\n            initializingHandler\n              ? ((initializingHandler.errored = !0),\n                (initializingHandler.value = id.reason))\n              : (initializingHandler = {\n                  parent: null,\n                  chunk: null,\n                  value: id.reason,\n                  deps: 0,\n                  errored: !0\n                }),\n            null\n          );\n      }\n    }\n    function createMap(response, model) {\n      return new Map(model);\n    }\n    function createSet(response, model) {\n      return new Set(model);\n    }\n    function createBlob(response, model) {\n      return new Blob(model.slice(1), { type: model[0] });\n    }\n    function createFormData(response, model) {\n      response = new FormData();\n      for (var i = 0; i < model.length; i++)\n        response.append(model[i][0], model[i][1]);\n      return response;\n    }\n    function applyConstructor(response, model, parentObject) {\n      Object.setPrototypeOf(parentObject, model.prototype);\n    }\n    function defineLazyGetter(response, chunk, parentObject, key) {\n      Object.defineProperty(parentObject, key, {\n        get: function () {\n          \"resolved_model\" === chunk.status && initializeModelChunk(chunk);\n          switch (chunk.status) {\n            case \"fulfilled\":\n              return chunk.value;\n            case \"rejected\":\n              throw chunk.reason;\n          }\n          return \"This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects.\";\n        },\n        enumerable: !0,\n        configurable: !1\n      });\n      return null;\n    }\n    function extractIterator(response, model) {\n      return model[Symbol.iterator]();\n    }\n    function createModel(response, model) {\n      return model;\n    }\n    function parseModelString(response, parentObject, key, value) {\n      if (\"$\" === value[0]) {\n        if (\"$\" === value)\n          return (\n            null !== initializingHandler &&\n              \"0\" === key &&\n              (initializingHandler = {\n                parent: initializingHandler,\n                chunk: null,\n                value: null,\n                deps: 0,\n                errored: !1\n              }),\n            REACT_ELEMENT_TYPE\n          );\n        switch (value[1]) {\n          case \"$\":\n            return value.slice(1);\n          case \"L\":\n            return (\n              (parentObject = parseInt(value.slice(2), 16)),\n              (response = getChunk(response, parentObject)),\n              createLazyChunkWrapper(response)\n            );\n          case \"@\":\n            return (\n              (parentObject = parseInt(value.slice(2), 16)),\n              getChunk(response, parentObject)\n            );\n          case \"S\":\n            return Symbol.for(value.slice(2));\n          case \"F\":\n            var ref = value.slice(2);\n            return getOutlinedModel(\n              response,\n              ref,\n              parentObject,\n              key,\n              loadServerReference\n            );\n          case \"T\":\n            parentObject = \"$\" + value.slice(2);\n            response = response._tempRefs;\n            if (null == response)\n              throw Error(\n                \"Missing a temporary reference set but the RSC response returned a temporary reference. Pass a temporaryReference option with the set that was used with the reply.\"\n              );\n            return response.get(parentObject);\n          case \"Q\":\n            return (\n              (ref = value.slice(2)),\n              getOutlinedModel(response, ref, parentObject, key, createMap)\n            );\n          case \"W\":\n            return (\n              (ref = value.slice(2)),\n              getOutlinedModel(response, ref, parentObject, key, createSet)\n            );\n          case \"B\":\n            return (\n              (ref = value.slice(2)),\n              getOutlinedModel(response, ref, parentObject, key, createBlob)\n            );\n          case \"K\":\n            return (\n              (ref = value.slice(2)),\n              getOutlinedModel(response, ref, parentObject, key, createFormData)\n            );\n          case \"Z\":\n            return (\n              (ref = value.slice(2)),\n              getOutlinedModel(\n                response,\n                ref,\n                parentObject,\n                key,\n                resolveErrorDev\n              )\n            );\n          case \"i\":\n            return (\n              (ref = value.slice(2)),\n              getOutlinedModel(\n                response,\n                ref,\n                parentObject,\n                key,\n                extractIterator\n              )\n            );\n          case \"I\":\n            return Infinity;\n          case \"-\":\n            return \"$-0\" === value ? -0 : -Infinity;\n          case \"N\":\n            return NaN;\n          case \"u\":\n            return;\n          case \"D\":\n            return new Date(Date.parse(value.slice(2)));\n          case \"n\":\n            return BigInt(value.slice(2));\n          case \"P\":\n            return (\n              (ref = value.slice(2)),\n              getOutlinedModel(\n                response,\n                ref,\n                parentObject,\n                key,\n                applyConstructor\n              )\n            );\n          case \"E\":\n            response = value.slice(2);\n            try {\n              return (0, eval)(response);\n            } catch (x) {\n              if (response.startsWith(\"(async function\")) {\n                if (\n                  ((parentObject = response.indexOf(\"(\", 15)),\n                  -1 !== parentObject)\n                )\n                  return (\n                    (response = response.slice(15, parentObject).trim()),\n                    (0, eval)(\n                      \"({\" + JSON.stringify(response) + \":async function(){}})\"\n                    )[response]\n                  );\n              } else if (response.startsWith(\"(function\")) {\n                if (\n                  ((parentObject = response.indexOf(\"(\", 9)),\n                  -1 !== parentObject)\n                )\n                  return (\n                    (response = response.slice(9, parentObject).trim()),\n                    (0, eval)(\n                      \"({\" + JSON.stringify(response) + \":function(){}})\"\n                    )[response]\n                  );\n              } else if (\n                response.startsWith(\"(class\") &&\n                ((parentObject = response.indexOf(\"{\", 6)), -1 !== parentObject)\n              )\n                return (\n                  (response = response.slice(6, parentObject).trim()),\n                  (0, eval)(\"({\" + JSON.stringify(response) + \":class{}})\")[\n                    response\n                  ]\n                );\n              return function () {};\n            }\n          case \"Y\":\n            if (2 < value.length && (ref = response._debugChannel)) {\n              if (\"@\" === value[2])\n                return (\n                  (parentObject = value.slice(3)),\n                  (key = parseInt(parentObject, 16)),\n                  response._chunks.has(key) || ref(\"P:\" + parentObject),\n                  getChunk(response, key)\n                );\n              value = value.slice(2);\n              var _id2 = parseInt(value, 16);\n              response._chunks.has(_id2) || ref(\"Q:\" + value);\n              ref = getChunk(response, _id2);\n              return \"fulfilled\" === ref.status\n                ? ref.value\n                : defineLazyGetter(response, ref, parentObject, key);\n            }\n            Object.defineProperty(parentObject, key, {\n              get: function () {\n                return \"This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects.\";\n              },\n              enumerable: !0,\n              configurable: !1\n            });\n            return null;\n          default:\n            return (\n              (ref = value.slice(1)),\n              getOutlinedModel(response, ref, parentObject, key, createModel)\n            );\n        }\n      }\n      return value;\n    }\n    function missingCall() {\n      throw Error(\n        'Trying to call a function from \"use server\" but the callServer option was not implemented in your router runtime.'\n      );\n    }\n    function ResponseInstance(\n      bundlerConfig,\n      serverReferenceConfig,\n      moduleLoading,\n      callServer,\n      encodeFormAction,\n      nonce,\n      temporaryReferences,\n      findSourceMapURL,\n      replayConsole,\n      environmentName,\n      debugChannel\n    ) {\n      var chunks = new Map();\n      this._bundlerConfig = bundlerConfig;\n      this._serverReferenceConfig = serverReferenceConfig;\n      this._moduleLoading = moduleLoading;\n      this._callServer = void 0 !== callServer ? callServer : missingCall;\n      this._encodeFormAction = encodeFormAction;\n      this._nonce = nonce;\n      this._chunks = chunks;\n      this._stringDecoder = new TextDecoder();\n      this._fromJSON = null;\n      this._closed = !1;\n      this._closedReason = null;\n      this._tempRefs = temporaryReferences;\n      this._pendingChunks = 0;\n      this._weakResponse = { weak: new WeakRef(this), response: this };\n      this._debugRootOwner = bundlerConfig =\n        void 0 === ReactSharedInteralsServer ||\n        null === ReactSharedInteralsServer.A\n          ? null\n          : ReactSharedInteralsServer.A.getOwner();\n      this._debugRootStack =\n        null !== bundlerConfig ? Error(\"react-stack-top-frame\") : null;\n      environmentName = void 0 === environmentName ? \"Server\" : environmentName;\n      supportsCreateTask &&\n        (this._debugRootTask = console.createTask(\n          '\"use ' + environmentName.toLowerCase() + '\"'\n        ));\n      this._debugFindSourceMapURL = findSourceMapURL;\n      this._debugChannel = debugChannel;\n      this._replayConsole = replayConsole;\n      this._rootEnvironmentName = environmentName;\n      debugChannel &&\n        (null === debugChannelRegistry\n          ? (debugChannel(\"\"), (this._debugChannel = void 0))\n          : debugChannelRegistry.register(this, debugChannel));\n      this._fromJSON = createFromJSONCallback(this);\n    }\n    function createStreamState() {\n      return {\n        _rowState: 0,\n        _rowID: 0,\n        _rowTag: 0,\n        _rowLength: 0,\n        _buffer: []\n      };\n    }\n    function resolveDebugHalt(response, id) {\n      var chunks = response._chunks,\n        chunk = chunks.get(id);\n      chunk || chunks.set(id, (chunk = createPendingChunk(response)));\n      if (\"pending\" === chunk.status || \"blocked\" === chunk.status)\n        releasePendingChunk(response, chunk),\n          (response = chunk),\n          (response.status = \"halted\"),\n          (response.value = null),\n          (response.reason = null);\n    }\n    function resolveModel(response, id, model) {\n      var chunks = response._chunks,\n        chunk = chunks.get(id);\n      chunk\n        ? resolveModelChunk(response, chunk, model)\n        : chunks.set(id, new ReactPromise(\"resolved_model\", model, response));\n    }\n    function resolveText(response, id, text) {\n      var chunks = response._chunks,\n        chunk = chunks.get(id);\n      chunk && \"pending\" !== chunk.status\n        ? chunk.reason.enqueueValue(text)\n        : (chunk && releasePendingChunk(response, chunk),\n          chunks.set(id, new ReactPromise(\"fulfilled\", text, null)));\n    }\n    function resolveBuffer(response, id, buffer) {\n      var chunks = response._chunks,\n        chunk = chunks.get(id);\n      chunk && \"pending\" !== chunk.status\n        ? chunk.reason.enqueueValue(buffer)\n        : (chunk && releasePendingChunk(response, chunk),\n          chunks.set(id, new ReactPromise(\"fulfilled\", buffer, null)));\n    }\n    function resolveModule(response, id, model) {\n      var chunks = response._chunks,\n        chunk = chunks.get(id);\n      model = JSON.parse(model, response._fromJSON);\n      var clientReference = resolveClientReference(\n        response._bundlerConfig,\n        model\n      );\n      if ((model = preloadModule(clientReference))) {\n        if (chunk) {\n          releasePendingChunk(response, chunk);\n          var blockedChunk = chunk;\n          blockedChunk.status = \"blocked\";\n        } else\n          (blockedChunk = new ReactPromise(\"blocked\", null, null)),\n            chunks.set(id, blockedChunk);\n        model.then(\n          function () {\n            return resolveModuleChunk(response, blockedChunk, clientReference);\n          },\n          function (error) {\n            return triggerErrorOnChunk(response, blockedChunk, error);\n          }\n        );\n      } else\n        chunk\n          ? resolveModuleChunk(response, chunk, clientReference)\n          : chunks.set(\n              id,\n              new ReactPromise(\"resolved_module\", clientReference, null)\n            );\n    }\n    function resolveStream(response, id, stream, controller) {\n      var chunks = response._chunks,\n        chunk = chunks.get(id);\n      chunk\n        ? \"pending\" === chunk.status &&\n          (releasePendingChunk(response, chunk),\n          (response = chunk.value),\n          (chunk.status = \"fulfilled\"),\n          (chunk.value = stream),\n          (chunk.reason = controller),\n          null !== response && wakeChunk(response, chunk.value))\n        : chunks.set(id, new ReactPromise(\"fulfilled\", stream, controller));\n    }\n    function startReadableStream(response, id, type) {\n      var controller = null;\n      type = new ReadableStream({\n        type: type,\n        start: function (c) {\n          controller = c;\n        }\n      });\n      var previousBlockedChunk = null;\n      resolveStream(response, id, type, {\n        enqueueValue: function (value) {\n          null === previousBlockedChunk\n            ? controller.enqueue(value)\n            : previousBlockedChunk.then(function () {\n                controller.enqueue(value);\n              });\n        },\n        enqueueModel: function (json) {\n          if (null === previousBlockedChunk) {\n            var chunk = new ReactPromise(\"resolved_model\", json, response);\n            initializeModelChunk(chunk);\n            \"fulfilled\" === chunk.status\n              ? controller.enqueue(chunk.value)\n              : (chunk.then(\n                  function (v) {\n                    return controller.enqueue(v);\n                  },\n                  function (e) {\n                    return controller.error(e);\n                  }\n                ),\n                (previousBlockedChunk = chunk));\n          } else {\n            chunk = previousBlockedChunk;\n            var _chunk3 = createPendingChunk(response);\n            _chunk3.then(\n              function (v) {\n                return controller.enqueue(v);\n              },\n              function (e) {\n                return controller.error(e);\n              }\n            );\n            previousBlockedChunk = _chunk3;\n            chunk.then(function () {\n              previousBlockedChunk === _chunk3 && (previousBlockedChunk = null);\n              resolveModelChunk(response, _chunk3, json);\n            });\n          }\n        },\n        close: function () {\n          if (null === previousBlockedChunk) controller.close();\n          else {\n            var blockedChunk = previousBlockedChunk;\n            previousBlockedChunk = null;\n            blockedChunk.then(function () {\n              return controller.close();\n            });\n          }\n        },\n        error: function (error) {\n          if (null === previousBlockedChunk) controller.error(error);\n          else {\n            var blockedChunk = previousBlockedChunk;\n            previousBlockedChunk = null;\n            blockedChunk.then(function () {\n              return controller.error(error);\n            });\n          }\n        }\n      });\n    }\n    function asyncIterator() {\n      return this;\n    }\n    function createIterator(next) {\n      next = { next: next };\n      next[ASYNC_ITERATOR] = asyncIterator;\n      return next;\n    }\n    function startAsyncIterable(response, id, iterator) {\n      var buffer = [],\n        closed = !1,\n        nextWriteIndex = 0,\n        iterable = {};\n      iterable[ASYNC_ITERATOR] = function () {\n        var nextReadIndex = 0;\n        return createIterator(function (arg) {\n          if (void 0 !== arg)\n            throw Error(\n              \"Values cannot be passed to next() of AsyncIterables passed to Client Components.\"\n            );\n          if (nextReadIndex === buffer.length) {\n            if (closed)\n              return new ReactPromise(\n                \"fulfilled\",\n                { done: !0, value: void 0 },\n                null\n              );\n            buffer[nextReadIndex] = createPendingChunk(response);\n          }\n          return buffer[nextReadIndex++];\n        });\n      };\n      resolveStream(\n        response,\n        id,\n        iterator ? iterable[ASYNC_ITERATOR]() : iterable,\n        {\n          enqueueValue: function (value) {\n            if (nextWriteIndex === buffer.length)\n              buffer[nextWriteIndex] = new ReactPromise(\n                \"fulfilled\",\n                { done: !1, value: value },\n                null\n              );\n            else {\n              var chunk = buffer[nextWriteIndex],\n                resolveListeners = chunk.value,\n                rejectListeners = chunk.reason;\n              chunk.status = \"fulfilled\";\n              chunk.value = { done: !1, value: value };\n              null !== resolveListeners &&\n                wakeChunkIfInitialized(\n                  chunk,\n                  resolveListeners,\n                  rejectListeners\n                );\n            }\n            nextWriteIndex++;\n          },\n          enqueueModel: function (value) {\n            nextWriteIndex === buffer.length\n              ? (buffer[nextWriteIndex] = createResolvedIteratorResultChunk(\n                  response,\n                  value,\n                  !1\n                ))\n              : resolveIteratorResultChunk(\n                  response,\n                  buffer[nextWriteIndex],\n                  value,\n                  !1\n                );\n            nextWriteIndex++;\n          },\n          close: function (value) {\n            closed = !0;\n            nextWriteIndex === buffer.length\n              ? (buffer[nextWriteIndex] = createResolvedIteratorResultChunk(\n                  response,\n                  value,\n                  !0\n                ))\n              : resolveIteratorResultChunk(\n                  response,\n                  buffer[nextWriteIndex],\n                  value,\n                  !0\n                );\n            for (nextWriteIndex++; nextWriteIndex < buffer.length; )\n              resolveIteratorResultChunk(\n                response,\n                buffer[nextWriteIndex++],\n                '\"$undefined\"',\n                !0\n              );\n          },\n          error: function (error) {\n            closed = !0;\n            for (\n              nextWriteIndex === buffer.length &&\n              (buffer[nextWriteIndex] = createPendingChunk(response));\n              nextWriteIndex < buffer.length;\n\n            )\n              triggerErrorOnChunk(response, buffer[nextWriteIndex++], error);\n          }\n        }\n      );\n    }\n    function stopStream(response, id, row) {\n      (response = response._chunks.get(id)) &&\n        \"fulfilled\" === response.status &&\n        response.reason.close(\"\" === row ? '\"$undefined\"' : row);\n    }\n    function resolveErrorDev(response, errorInfo) {\n      var name = errorInfo.name,\n        env = errorInfo.env;\n      errorInfo = buildFakeCallStack(\n        response,\n        errorInfo.stack,\n        env,\n        !1,\n        Error.bind(\n          null,\n          errorInfo.message ||\n            \"An error occurred in the Server Components render but no message was provided\"\n        )\n      );\n      response = getRootTask(response, env);\n      response = null != response ? response.run(errorInfo) : errorInfo();\n      response.name = name;\n      response.environmentName = env;\n      return response;\n    }\n    function resolveHint(response, code, model) {\n      response = JSON.parse(model, response._fromJSON);\n      model = ReactDOMSharedInternals.d;\n      switch (code) {\n        case \"D\":\n          model.D(response);\n          break;\n        case \"C\":\n          \"string\" === typeof response\n            ? model.C(response)\n            : model.C(response[0], response[1]);\n          break;\n        case \"L\":\n          code = response[0];\n          var as = response[1];\n          3 === response.length\n            ? model.L(code, as, response[2])\n            : model.L(code, as);\n          break;\n        case \"m\":\n          \"string\" === typeof response\n            ? model.m(response)\n            : model.m(response[0], response[1]);\n          break;\n        case \"X\":\n          \"string\" === typeof response\n            ? model.X(response)\n            : model.X(response[0], response[1]);\n          break;\n        case \"S\":\n          \"string\" === typeof response\n            ? model.S(response)\n            : model.S(\n                response[0],\n                0 === response[1] ? void 0 : response[1],\n                3 === response.length ? response[2] : void 0\n              );\n          break;\n        case \"M\":\n          \"string\" === typeof response\n            ? model.M(response)\n            : model.M(response[0], response[1]);\n      }\n    }\n    function createFakeFunction(\n      name,\n      filename,\n      sourceMap,\n      line,\n      col,\n      enclosingLine,\n      enclosingCol,\n      environmentName\n    ) {\n      name || (name = \"<anonymous>\");\n      var encodedName = JSON.stringify(name);\n      1 > enclosingLine ? (enclosingLine = 0) : enclosingLine--;\n      1 > enclosingCol ? (enclosingCol = 0) : enclosingCol--;\n      1 > line ? (line = 0) : line--;\n      1 > col ? (col = 0) : col--;\n      if (\n        line < enclosingLine ||\n        (line === enclosingLine && col < enclosingCol)\n      )\n        enclosingCol = enclosingLine = 0;\n      1 > line\n        ? ((line = encodedName.length + 3),\n          (enclosingCol -= line),\n          0 > enclosingCol && (enclosingCol = 0),\n          (col = col - enclosingCol - line - 3),\n          0 > col && (col = 0),\n          (encodedName =\n            \"({\" +\n            encodedName +\n            \":\" +\n            \" \".repeat(enclosingCol) +\n            \"_=>\" +\n            \" \".repeat(col) +\n            \"_()})\"))\n        : 1 > enclosingLine\n          ? ((enclosingCol -= encodedName.length + 3),\n            0 > enclosingCol && (enclosingCol = 0),\n            (encodedName =\n              \"({\" +\n              encodedName +\n              \":\" +\n              \" \".repeat(enclosingCol) +\n              \"_=>\" +\n              \"\\n\".repeat(line - enclosingLine) +\n              \" \".repeat(col) +\n              \"_()})\"))\n          : enclosingLine === line\n            ? ((col = col - enclosingCol - 3),\n              0 > col && (col = 0),\n              (encodedName =\n                \"\\n\".repeat(enclosingLine - 1) +\n                \"({\" +\n                encodedName +\n                \":\\n\" +\n                \" \".repeat(enclosingCol) +\n                \"_=>\" +\n                \" \".repeat(col) +\n                \"_()})\"))\n            : (encodedName =\n                \"\\n\".repeat(enclosingLine - 1) +\n                \"({\" +\n                encodedName +\n                \":\\n\" +\n                \" \".repeat(enclosingCol) +\n                \"_=>\" +\n                \"\\n\".repeat(line - enclosingLine) +\n                \" \".repeat(col) +\n                \"_()})\");\n      encodedName =\n        1 > enclosingLine\n          ? encodedName +\n            \"\\n/* This module was rendered by a Server Component. Turn on Source Maps to see the server source. */\"\n          : \"/* This module was rendered by a Server Component. Turn on Source Maps to see the server source. */\" +\n            encodedName;\n      filename.startsWith(\"/\") && (filename = \"file://\" + filename);\n      sourceMap\n        ? ((encodedName +=\n            \"\\n//# sourceURL=rsc://React/\" +\n            encodeURIComponent(environmentName) +\n            \"/\" +\n            encodeURI(filename) +\n            \"?\" +\n            fakeFunctionIdx++),\n          (encodedName += \"\\n//# sourceMappingURL=\" + sourceMap))\n        : (encodedName = filename\n            ? encodedName + (\"\\n//# sourceURL=\" + encodeURI(filename))\n            : encodedName + \"\\n//# sourceURL=<anonymous>\");\n      try {\n        var fn = (0, eval)(encodedName)[name];\n      } catch (x) {\n        fn = function (_) {\n          return _();\n        };\n      }\n      return fn;\n    }\n    function buildFakeCallStack(\n      response,\n      stack,\n      environmentName,\n      useEnclosingLine,\n      innerCall\n    ) {\n      for (var i = 0; i < stack.length; i++) {\n        var frame = stack[i],\n          frameKey =\n            frame.join(\"-\") +\n            \"-\" +\n            environmentName +\n            (useEnclosingLine ? \"-e\" : \"-n\"),\n          fn = fakeFunctionCache.get(frameKey);\n        if (void 0 === fn) {\n          fn = frame[0];\n          var filename = frame[1],\n            line = frame[2],\n            col = frame[3],\n            enclosingLine = frame[4];\n          frame = frame[5];\n          var findSourceMapURL = response._debugFindSourceMapURL;\n          findSourceMapURL = findSourceMapURL\n            ? findSourceMapURL(filename, environmentName)\n            : null;\n          fn = createFakeFunction(\n            fn,\n            filename,\n            findSourceMapURL,\n            line,\n            col,\n            useEnclosingLine ? line : enclosingLine,\n            useEnclosingLine ? col : frame,\n            environmentName\n          );\n          fakeFunctionCache.set(frameKey, fn);\n        }\n        innerCall = fn.bind(null, innerCall);\n      }\n      return innerCall;\n    }\n    function getRootTask(response, childEnvironmentName) {\n      var rootTask = response._debugRootTask;\n      return rootTask\n        ? response._rootEnvironmentName !== childEnvironmentName\n          ? ((response = console.createTask.bind(\n              console,\n              '\"use ' + childEnvironmentName.toLowerCase() + '\"'\n            )),\n            rootTask.run(response))\n          : rootTask\n        : null;\n    }\n    function initializeFakeTask(response, debugInfo) {\n      if (!supportsCreateTask || null == debugInfo.stack) return null;\n      var cachedEntry = debugInfo.debugTask;\n      if (void 0 !== cachedEntry) return cachedEntry;\n      var useEnclosingLine = void 0 === debugInfo.key,\n        stack = debugInfo.stack,\n        env =\n          null == debugInfo.env ? response._rootEnvironmentName : debugInfo.env;\n      cachedEntry =\n        null == debugInfo.owner || null == debugInfo.owner.env\n          ? response._rootEnvironmentName\n          : debugInfo.owner.env;\n      var ownerTask =\n        null == debugInfo.owner\n          ? null\n          : initializeFakeTask(response, debugInfo.owner);\n      env =\n        env !== cachedEntry\n          ? '\"use ' + env.toLowerCase() + '\"'\n          : void 0 !== debugInfo.key\n            ? \"<\" + (debugInfo.name || \"...\") + \">\"\n            : void 0 !== debugInfo.name\n              ? debugInfo.name || \"unknown\"\n              : \"await \" + (debugInfo.awaited.name || \"unknown\");\n      env = console.createTask.bind(console, env);\n      useEnclosingLine = buildFakeCallStack(\n        response,\n        stack,\n        cachedEntry,\n        useEnclosingLine,\n        env\n      );\n      null === ownerTask\n        ? ((response = getRootTask(response, cachedEntry)),\n          (response =\n            null != response\n              ? response.run(useEnclosingLine)\n              : useEnclosingLine()))\n        : (response = ownerTask.run(useEnclosingLine));\n      return (debugInfo.debugTask = response);\n    }\n    function fakeJSXCallSite() {\n      return Error(\"react-stack-top-frame\");\n    }\n    function initializeFakeStack(response, debugInfo) {\n      if (void 0 === debugInfo.debugStack) {\n        null != debugInfo.stack &&\n          (debugInfo.debugStack = createFakeJSXCallStackInDEV(\n            response,\n            debugInfo.stack,\n            null == debugInfo.env ? \"\" : debugInfo.env\n          ));\n        var owner = debugInfo.owner;\n        null != owner &&\n          (initializeFakeStack(response, owner),\n          void 0 === owner.debugLocation &&\n            null != debugInfo.debugStack &&\n            (owner.debugLocation = debugInfo.debugStack));\n      }\n    }\n    function resolveDebugInfo(response, id, debugInfo) {\n      void 0 !== debugInfo.stack && initializeFakeTask(response, debugInfo);\n      null == debugInfo.owner && null != response._debugRootOwner\n        ? ((debugInfo.owner = response._debugRootOwner),\n          (debugInfo.stack = null),\n          (debugInfo.debugStack = response._debugRootStack),\n          (debugInfo.debugTask = response._debugRootTask))\n        : void 0 !== debugInfo.stack &&\n          initializeFakeStack(response, debugInfo);\n      response = getChunk(response, id);\n      (response._debugInfo || (response._debugInfo = [])).push(debugInfo);\n    }\n    function getCurrentStackInDEV() {\n      var owner = currentOwnerInDEV;\n      if (null === owner) return \"\";\n      try {\n        var info = \"\";\n        if (owner.owner || \"string\" !== typeof owner.name) {\n          for (; owner; ) {\n            var ownerStack = owner.debugStack;\n            if (null != ownerStack) {\n              if ((owner = owner.owner)) {\n                var JSCompiler_temp_const = info;\n                var error = ownerStack,\n                  prevPrepareStackTrace = Error.prepareStackTrace;\n                Error.prepareStackTrace = void 0;\n                var stack = error.stack;\n                Error.prepareStackTrace = prevPrepareStackTrace;\n                stack.startsWith(\"Error: react-stack-top-frame\\n\") &&\n                  (stack = stack.slice(29));\n                var idx = stack.indexOf(\"\\n\");\n                -1 !== idx && (stack = stack.slice(idx + 1));\n                idx = stack.indexOf(\"react_stack_bottom_frame\");\n                -1 !== idx && (idx = stack.lastIndexOf(\"\\n\", idx));\n                var JSCompiler_inline_result =\n                  -1 !== idx ? (stack = stack.slice(0, idx)) : \"\";\n                info =\n                  JSCompiler_temp_const + (\"\\n\" + JSCompiler_inline_result);\n              }\n            } else break;\n          }\n          var JSCompiler_inline_result$jscomp$0 = info;\n        } else {\n          JSCompiler_temp_const = owner.name;\n          if (void 0 === prefix)\n            try {\n              throw Error();\n            } catch (x) {\n              (prefix =\n                ((error = x.stack.trim().match(/\\n( *(at )?)/)) && error[1]) ||\n                \"\"),\n                (suffix =\n                  -1 < x.stack.indexOf(\"\\n    at\")\n                    ? \" (<anonymous>)\"\n                    : -1 < x.stack.indexOf(\"@\")\n                      ? \"@unknown:0:0\"\n                      : \"\");\n            }\n          JSCompiler_inline_result$jscomp$0 =\n            \"\\n\" + prefix + JSCompiler_temp_const + suffix;\n        }\n      } catch (x) {\n        JSCompiler_inline_result$jscomp$0 =\n          \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n      }\n      return JSCompiler_inline_result$jscomp$0;\n    }\n    function resolveConsoleEntry(response, value) {\n      if (response._replayConsole) {\n        var payload = JSON.parse(value, response._fromJSON);\n        value = payload[0];\n        var stackTrace = payload[1],\n          owner = payload[2],\n          env = payload[3];\n        payload = payload.slice(4);\n        replayConsoleWithCallStackInDEV(\n          response,\n          value,\n          stackTrace,\n          owner,\n          env,\n          payload\n        );\n      }\n    }\n    function mergeBuffer(buffer, lastChunk) {\n      for (\n        var l = buffer.length, byteLength = lastChunk.length, i = 0;\n        i < l;\n        i++\n      )\n        byteLength += buffer[i].byteLength;\n      byteLength = new Uint8Array(byteLength);\n      for (var _i3 = (i = 0); _i3 < l; _i3++) {\n        var chunk = buffer[_i3];\n        byteLength.set(chunk, i);\n        i += chunk.byteLength;\n      }\n      byteLength.set(lastChunk, i);\n      return byteLength;\n    }\n    function resolveTypedArray(\n      response,\n      id,\n      buffer,\n      lastChunk,\n      constructor,\n      bytesPerElement\n    ) {\n      buffer =\n        0 === buffer.length && 0 === lastChunk.byteOffset % bytesPerElement\n          ? lastChunk\n          : mergeBuffer(buffer, lastChunk);\n      constructor = new constructor(\n        buffer.buffer,\n        buffer.byteOffset,\n        buffer.byteLength / bytesPerElement\n      );\n      resolveBuffer(response, id, constructor);\n    }\n    function flushInitialRenderPerformance() {}\n    function processFullBinaryRow(response, id, tag, buffer, chunk) {\n      switch (tag) {\n        case 65:\n          resolveBuffer(response, id, mergeBuffer(buffer, chunk).buffer);\n          return;\n        case 79:\n          resolveTypedArray(response, id, buffer, chunk, Int8Array, 1);\n          return;\n        case 111:\n          resolveBuffer(\n            response,\n            id,\n            0 === buffer.length ? chunk : mergeBuffer(buffer, chunk)\n          );\n          return;\n        case 85:\n          resolveTypedArray(response, id, buffer, chunk, Uint8ClampedArray, 1);\n          return;\n        case 83:\n          resolveTypedArray(response, id, buffer, chunk, Int16Array, 2);\n          return;\n        case 115:\n          resolveTypedArray(response, id, buffer, chunk, Uint16Array, 2);\n          return;\n        case 76:\n          resolveTypedArray(response, id, buffer, chunk, Int32Array, 4);\n          return;\n        case 108:\n          resolveTypedArray(response, id, buffer, chunk, Uint32Array, 4);\n          return;\n        case 71:\n          resolveTypedArray(response, id, buffer, chunk, Float32Array, 4);\n          return;\n        case 103:\n          resolveTypedArray(response, id, buffer, chunk, Float64Array, 8);\n          return;\n        case 77:\n          resolveTypedArray(response, id, buffer, chunk, BigInt64Array, 8);\n          return;\n        case 109:\n          resolveTypedArray(response, id, buffer, chunk, BigUint64Array, 8);\n          return;\n        case 86:\n          resolveTypedArray(response, id, buffer, chunk, DataView, 1);\n          return;\n      }\n      for (\n        var stringDecoder = response._stringDecoder, row = \"\", i = 0;\n        i < buffer.length;\n        i++\n      )\n        row += stringDecoder.decode(buffer[i], decoderOptions);\n      row += stringDecoder.decode(chunk);\n      processFullStringRow(response, id, tag, row);\n    }\n    function processFullStringRow(response, id, tag, row) {\n      switch (tag) {\n        case 73:\n          resolveModule(response, id, row);\n          break;\n        case 72:\n          resolveHint(response, row[0], row.slice(1));\n          break;\n        case 69:\n          row = JSON.parse(row);\n          tag = resolveErrorDev(response, row);\n          tag.digest = row.digest;\n          row = response._chunks;\n          var chunk = row.get(id);\n          chunk\n            ? triggerErrorOnChunk(response, chunk, tag)\n            : row.set(id, new ReactPromise(\"rejected\", null, tag));\n          break;\n        case 84:\n          resolveText(response, id, row);\n          break;\n        case 78:\n        case 68:\n          tag = new ReactPromise(\"resolved_model\", row, response);\n          initializeModelChunk(tag);\n          \"fulfilled\" === tag.status\n            ? resolveDebugInfo(response, id, tag.value)\n            : tag.then(\n                function (v) {\n                  return resolveDebugInfo(response, id, v);\n                },\n                function () {}\n              );\n          break;\n        case 74:\n        case 87:\n          resolveConsoleEntry(response, row);\n          break;\n        case 82:\n          startReadableStream(response, id, void 0);\n          break;\n        case 114:\n          startReadableStream(response, id, \"bytes\");\n          break;\n        case 88:\n          startAsyncIterable(response, id, !1);\n          break;\n        case 120:\n          startAsyncIterable(response, id, !0);\n          break;\n        case 67:\n          stopStream(response, id, row);\n          break;\n        default:\n          \"\" === row\n            ? resolveDebugHalt(response, id)\n            : resolveModel(response, id, row);\n      }\n    }\n    function processBinaryChunk(weakResponse, streamState, chunk) {\n      if (void 0 !== weakResponse.weak.deref()) {\n        var response = unwrapWeakResponse(weakResponse),\n          i = 0,\n          rowState = streamState._rowState;\n        weakResponse = streamState._rowID;\n        for (\n          var rowTag = streamState._rowTag,\n            rowLength = streamState._rowLength,\n            buffer = streamState._buffer,\n            chunkLength = chunk.length;\n          i < chunkLength;\n\n        ) {\n          var lastIdx = -1;\n          switch (rowState) {\n            case 0:\n              lastIdx = chunk[i++];\n              58 === lastIdx\n                ? (rowState = 1)\n                : (weakResponse =\n                    (weakResponse << 4) |\n                    (96 < lastIdx ? lastIdx - 87 : lastIdx - 48));\n              continue;\n            case 1:\n              rowState = chunk[i];\n              84 === rowState ||\n              65 === rowState ||\n              79 === rowState ||\n              111 === rowState ||\n              85 === rowState ||\n              83 === rowState ||\n              115 === rowState ||\n              76 === rowState ||\n              108 === rowState ||\n              71 === rowState ||\n              103 === rowState ||\n              77 === rowState ||\n              109 === rowState ||\n              86 === rowState\n                ? ((rowTag = rowState), (rowState = 2), i++)\n                : (64 < rowState && 91 > rowState) ||\n                    35 === rowState ||\n                    114 === rowState ||\n                    120 === rowState\n                  ? ((rowTag = rowState), (rowState = 3), i++)\n                  : ((rowTag = 0), (rowState = 3));\n              continue;\n            case 2:\n              lastIdx = chunk[i++];\n              44 === lastIdx\n                ? (rowState = 4)\n                : (rowLength =\n                    (rowLength << 4) |\n                    (96 < lastIdx ? lastIdx - 87 : lastIdx - 48));\n              continue;\n            case 3:\n              lastIdx = chunk.indexOf(10, i);\n              break;\n            case 4:\n              (lastIdx = i + rowLength),\n                lastIdx > chunk.length && (lastIdx = -1);\n          }\n          var offset = chunk.byteOffset + i;\n          if (-1 < lastIdx)\n            (rowLength = new Uint8Array(chunk.buffer, offset, lastIdx - i)),\n              processFullBinaryRow(\n                response,\n                weakResponse,\n                rowTag,\n                buffer,\n                rowLength\n              ),\n              (i = lastIdx),\n              3 === rowState && i++,\n              (rowLength = weakResponse = rowTag = rowState = 0),\n              (buffer.length = 0);\n          else {\n            chunk = new Uint8Array(chunk.buffer, offset, chunk.byteLength - i);\n            buffer.push(chunk);\n            rowLength -= chunk.byteLength;\n            break;\n          }\n        }\n        streamState._rowState = rowState;\n        streamState._rowID = weakResponse;\n        streamState._rowTag = rowTag;\n        streamState._rowLength = rowLength;\n      }\n    }\n    function createFromJSONCallback(response) {\n      return function (key, value) {\n        if (\"string\" === typeof value)\n          return parseModelString(response, this, key, value);\n        if (\"object\" === typeof value && null !== value) {\n          if (value[0] === REACT_ELEMENT_TYPE)\n            b: {\n              var owner = value[4];\n              key = value[5];\n              var validated = value[6];\n              value = {\n                $$typeof: REACT_ELEMENT_TYPE,\n                type: value[1],\n                key: value[2],\n                props: value[3],\n                _owner: void 0 === owner ? null : owner\n              };\n              Object.defineProperty(value, \"ref\", {\n                enumerable: !1,\n                get: nullRefGetter\n              });\n              value._store = {};\n              Object.defineProperty(value._store, \"validated\", {\n                configurable: !1,\n                enumerable: !1,\n                writable: !0,\n                value: validated\n              });\n              Object.defineProperty(value, \"_debugInfo\", {\n                configurable: !1,\n                enumerable: !1,\n                writable: !0,\n                value: null\n              });\n              Object.defineProperty(value, \"_debugStack\", {\n                configurable: !1,\n                enumerable: !1,\n                writable: !0,\n                value: void 0 === key ? null : key\n              });\n              Object.defineProperty(value, \"_debugTask\", {\n                configurable: !1,\n                enumerable: !1,\n                writable: !0,\n                value: null\n              });\n              if (null !== initializingHandler) {\n                validated = initializingHandler;\n                initializingHandler = validated.parent;\n                if (validated.errored) {\n                  key = new ReactPromise(\"rejected\", null, validated.value);\n                  initializeElement(response, value);\n                  validated = {\n                    name: getComponentNameFromType(value.type) || \"\",\n                    owner: value._owner\n                  };\n                  validated.debugStack = value._debugStack;\n                  supportsCreateTask &&\n                    (validated.debugTask = value._debugTask);\n                  key._debugInfo = [validated];\n                  value = createLazyChunkWrapper(key);\n                  break b;\n                }\n                if (0 < validated.deps) {\n                  key = new ReactPromise(\"blocked\", null, null);\n                  validated.value = value;\n                  validated.chunk = key;\n                  value = initializeElement.bind(null, response, value);\n                  key.then(value, value);\n                  value = createLazyChunkWrapper(key);\n                  break b;\n                }\n              }\n              initializeElement(response, value);\n            }\n          return value;\n        }\n        return value;\n      };\n    }\n    function close(weakResponse) {\n      reportGlobalError(weakResponse, Error(\"Connection closed.\"));\n    }\n    function createDebugCallbackFromWritableStream(debugWritable) {\n      var textEncoder = new TextEncoder(),\n        writer = debugWritable.getWriter();\n      return function (message) {\n        \"\" === message\n          ? writer.close()\n          : writer\n              .write(textEncoder.encode(message + \"\\n\"))\n              .catch(console.error);\n      };\n    }\n    function createResponseFromOptions(options) {\n      var debugChannel =\n        options &&\n        void 0 !== options.debugChannel &&\n        void 0 !== options.debugChannel.writable\n          ? createDebugCallbackFromWritableStream(options.debugChannel.writable)\n          : void 0;\n      return new ResponseInstance(\n        null,\n        null,\n        null,\n        options && options.callServer ? options.callServer : void 0,\n        void 0,\n        void 0,\n        options && options.temporaryReferences\n          ? options.temporaryReferences\n          : void 0,\n        options && options.findSourceMapURL ? options.findSourceMapURL : void 0,\n        options ? !1 !== options.replayConsoleLogs : !0,\n        options && options.environmentName ? options.environmentName : void 0,\n        debugChannel\n      )._weakResponse;\n    }\n    function startReadingFromUniversalStream(response$jscomp$0, stream) {\n      function progress(_ref) {\n        var value = _ref.value;\n        if (_ref.done) close(response$jscomp$0);\n        else {\n          if (value instanceof ArrayBuffer)\n            processBinaryChunk(\n              response$jscomp$0,\n              streamState,\n              new Uint8Array(value)\n            );\n          else if (\"string\" === typeof value) {\n            if (\n              ((_ref = streamState), void 0 !== response$jscomp$0.weak.deref())\n            ) {\n              for (\n                var response = unwrapWeakResponse(response$jscomp$0),\n                  i = 0,\n                  rowState = _ref._rowState,\n                  rowID = _ref._rowID,\n                  rowTag = _ref._rowTag,\n                  rowLength = _ref._rowLength,\n                  buffer = _ref._buffer,\n                  chunkLength = value.length;\n                i < chunkLength;\n\n              ) {\n                var lastIdx = -1;\n                switch (rowState) {\n                  case 0:\n                    lastIdx = value.charCodeAt(i++);\n                    58 === lastIdx\n                      ? (rowState = 1)\n                      : (rowID =\n                          (rowID << 4) |\n                          (96 < lastIdx ? lastIdx - 87 : lastIdx - 48));\n                    continue;\n                  case 1:\n                    rowState = value.charCodeAt(i);\n                    84 === rowState ||\n                    65 === rowState ||\n                    79 === rowState ||\n                    111 === rowState ||\n                    85 === rowState ||\n                    83 === rowState ||\n                    115 === rowState ||\n                    76 === rowState ||\n                    108 === rowState ||\n                    71 === rowState ||\n                    103 === rowState ||\n                    77 === rowState ||\n                    109 === rowState ||\n                    86 === rowState\n                      ? ((rowTag = rowState), (rowState = 2), i++)\n                      : (64 < rowState && 91 > rowState) ||\n                          114 === rowState ||\n                          120 === rowState\n                        ? ((rowTag = rowState), (rowState = 3), i++)\n                        : ((rowTag = 0), (rowState = 3));\n                    continue;\n                  case 2:\n                    lastIdx = value.charCodeAt(i++);\n                    44 === lastIdx\n                      ? (rowState = 4)\n                      : (rowLength =\n                          (rowLength << 4) |\n                          (96 < lastIdx ? lastIdx - 87 : lastIdx - 48));\n                    continue;\n                  case 3:\n                    lastIdx = value.indexOf(\"\\n\", i);\n                    break;\n                  case 4:\n                    if (84 !== rowTag)\n                      throw Error(\n                        \"Binary RSC chunks cannot be encoded as strings. This is a bug in the wiring of the React streams.\"\n                      );\n                    if (\n                      rowLength < value.length ||\n                      value.length > 3 * rowLength\n                    )\n                      throw Error(\n                        \"String chunks need to be passed in their original shape. Not split into smaller string chunks. This is a bug in the wiring of the React streams.\"\n                      );\n                    lastIdx = value.length;\n                }\n                if (-1 < lastIdx) {\n                  if (0 < buffer.length)\n                    throw Error(\n                      \"String chunks need to be passed in their original shape. Not split into smaller string chunks. This is a bug in the wiring of the React streams.\"\n                    );\n                  i = value.slice(i, lastIdx);\n                  processFullStringRow(response, rowID, rowTag, i);\n                  i = lastIdx;\n                  3 === rowState && i++;\n                  rowLength = rowID = rowTag = rowState = 0;\n                  buffer.length = 0;\n                } else if (value.length !== i)\n                  throw Error(\n                    \"String chunks need to be passed in their original shape. Not split into smaller string chunks. This is a bug in the wiring of the React streams.\"\n                  );\n              }\n              _ref._rowState = rowState;\n              _ref._rowID = rowID;\n              _ref._rowTag = rowTag;\n              _ref._rowLength = rowLength;\n            }\n          } else processBinaryChunk(response$jscomp$0, streamState, value);\n          return reader.read().then(progress).catch(error);\n        }\n      }\n      function error(e) {\n        reportGlobalError(response$jscomp$0, e);\n      }\n      var streamState = createStreamState(),\n        reader = stream.getReader();\n      reader.read().then(progress).catch(error);\n    }\n    function startReadingFromStream(response, stream, isSecondaryStream) {\n      function progress(_ref2) {\n        var value = _ref2.value;\n        if (_ref2.done) isSecondaryStream || close(response);\n        else\n          return (\n            processBinaryChunk(response, streamState, value),\n            reader.read().then(progress).catch(error)\n          );\n      }\n      function error(e) {\n        reportGlobalError(response, e);\n      }\n      var streamState = createStreamState(),\n        reader = stream.getReader();\n      reader.read().then(progress).catch(error);\n    }\n    var React = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"),\n      ReactDOM = __webpack_require__(/*! react-dom */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-dom/index.js\"),\n      decoderOptions = { stream: !0 },\n      bind = Function.prototype.bind,\n      chunkCache = new Map(),\n      chunkMap = new Map(),\n      webpackGetChunkFilename = __webpack_require__.u;\n    __webpack_require__.u = function (chunkId) {\n      var flightChunk = chunkMap.get(chunkId);\n      return void 0 !== flightChunk\n        ? flightChunk\n        : webpackGetChunkFilename(chunkId);\n    };\n    var ReactDOMSharedInternals =\n        ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n      REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n      REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n      REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n      REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n      REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n      REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n      REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n      REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n      REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n      REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n      REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n      REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n      REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n      MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n      ASYNC_ITERATOR = Symbol.asyncIterator,\n      isArrayImpl = Array.isArray,\n      getPrototypeOf = Object.getPrototypeOf,\n      jsxPropsParents = new WeakMap(),\n      jsxChildrenParents = new WeakMap(),\n      CLIENT_REFERENCE_TAG = Symbol.for(\"react.client.reference\"),\n      ObjectPrototype = Object.prototype,\n      knownServerReferences = new WeakMap(),\n      fakeServerFunctionIdx = 0,\n      v8FrameRegExp =\n        /^ {3} at (?:(.+) \\((.+):(\\d+):(\\d+)\\)|(?:async )?(.+):(\\d+):(\\d+))$/,\n      jscSpiderMonkeyFrameRegExp = /(?:(.*)@)?(.*):(\\d+):(\\d+)/,\n      REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n      prefix,\n      suffix;\n    new (\"function\" === typeof WeakMap ? WeakMap : Map)();\n    var ReactSharedInteralsServer =\n        React.__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n      ReactSharedInternals =\n        React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE ||\n        ReactSharedInteralsServer;\n    ReactPromise.prototype = Object.create(Promise.prototype);\n    ReactPromise.prototype.then = function (resolve, reject) {\n      switch (this.status) {\n        case \"resolved_model\":\n          initializeModelChunk(this);\n          break;\n        case \"resolved_module\":\n          initializeModuleChunk(this);\n      }\n      switch (this.status) {\n        case \"fulfilled\":\n          \"function\" === typeof resolve && resolve(this.value);\n          break;\n        case \"pending\":\n        case \"blocked\":\n          \"function\" === typeof resolve &&\n            (null === this.value && (this.value = []),\n            this.value.push(resolve));\n          \"function\" === typeof reject &&\n            (null === this.reason && (this.reason = []),\n            this.reason.push(reject));\n          break;\n        case \"halted\":\n          break;\n        default:\n          \"function\" === typeof reject && reject(this.reason);\n      }\n    };\n    var debugChannelRegistry =\n        \"function\" === typeof FinalizationRegistry\n          ? new FinalizationRegistry(cleanupDebugChannel)\n          : null,\n      initializingHandler = null,\n      supportsCreateTask = !!console.createTask,\n      fakeFunctionCache = new Map(),\n      fakeFunctionIdx = 0,\n      createFakeJSXCallStack = {\n        react_stack_bottom_frame: function (response, stack, environmentName) {\n          return buildFakeCallStack(\n            response,\n            stack,\n            environmentName,\n            !1,\n            fakeJSXCallSite\n          )();\n        }\n      },\n      createFakeJSXCallStackInDEV =\n        createFakeJSXCallStack.react_stack_bottom_frame.bind(\n          createFakeJSXCallStack\n        ),\n      currentOwnerInDEV = null,\n      replayConsoleWithCallStack = {\n        react_stack_bottom_frame: function (\n          response,\n          methodName,\n          stackTrace,\n          owner,\n          env,\n          args\n        ) {\n          var prevStack = ReactSharedInternals.getCurrentStack;\n          ReactSharedInternals.getCurrentStack = getCurrentStackInDEV;\n          currentOwnerInDEV = null === owner ? response._debugRootOwner : owner;\n          try {\n            a: {\n              var offset = 0;\n              switch (methodName) {\n                case \"dir\":\n                case \"dirxml\":\n                case \"groupEnd\":\n                case \"table\":\n                  var JSCompiler_inline_result = bind.apply(\n                    console[methodName],\n                    [console].concat(args)\n                  );\n                  break a;\n                case \"assert\":\n                  offset = 1;\n              }\n              var newArgs = args.slice(0);\n              \"string\" === typeof newArgs[offset]\n                ? newArgs.splice(\n                    offset,\n                    1,\n                    \"%c%s%c \" + newArgs[offset],\n                    \"background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px\",\n                    \" \" + env + \" \",\n                    \"\"\n                  )\n                : newArgs.splice(\n                    offset,\n                    0,\n                    \"%c%s%c \",\n                    \"background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px\",\n                    \" \" + env + \" \",\n                    \"\"\n                  );\n              newArgs.unshift(console);\n              JSCompiler_inline_result = bind.apply(\n                console[methodName],\n                newArgs\n              );\n            }\n            var callStack = buildFakeCallStack(\n              response,\n              stackTrace,\n              env,\n              !1,\n              JSCompiler_inline_result\n            );\n            if (null != owner) {\n              var task = initializeFakeTask(response, owner);\n              initializeFakeStack(response, owner);\n              if (null !== task) {\n                task.run(callStack);\n                return;\n              }\n            }\n            var rootTask = getRootTask(response, env);\n            null != rootTask ? rootTask.run(callStack) : callStack();\n          } finally {\n            (currentOwnerInDEV = null),\n              (ReactSharedInternals.getCurrentStack = prevStack);\n          }\n        }\n      },\n      replayConsoleWithCallStackInDEV =\n        replayConsoleWithCallStack.react_stack_bottom_frame.bind(\n          replayConsoleWithCallStack\n        );\n    (function (internals) {\n      if (\"undefined\" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) return !1;\n      var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n      if (hook.isDisabled || !hook.supportsFlight) return !0;\n      try {\n        hook.inject(internals);\n      } catch (err) {\n        console.error(\"React instrumentation encountered an error: %s.\", err);\n      }\n      return hook.checkDCE ? !0 : !1;\n    })({\n      bundleType: 1,\n      version: \"19.2.0-canary-97cdd5d3-20250710\",\n      rendererPackageName: \"react-server-dom-webpack\",\n      currentDispatcherRef: ReactSharedInternals,\n      reconcilerVersion: \"19.2.0-canary-97cdd5d3-20250710\",\n      getCurrentComponentInfo: function () {\n        return currentOwnerInDEV;\n      }\n    });\n    exports.createFromFetch = function (promiseForResponse, options) {\n      var response = createResponseFromOptions(options);\n      promiseForResponse.then(\n        function (r) {\n          options && options.debugChannel && options.debugChannel.readable\n            ? (startReadingFromUniversalStream(\n                response,\n                options.debugChannel.readable\n              ),\n              startReadingFromStream(response, r.body, !0))\n            : startReadingFromStream(response, r.body, !1);\n        },\n        function (e) {\n          reportGlobalError(response, e);\n        }\n      );\n      return getRoot(response);\n    };\n    exports.createFromReadableStream = function (stream, options) {\n      var response = createResponseFromOptions(options);\n      options && options.debugChannel && options.debugChannel.readable\n        ? (startReadingFromUniversalStream(\n            response,\n            options.debugChannel.readable\n          ),\n          startReadingFromStream(response, stream, !0))\n        : startReadingFromStream(response, stream, !1);\n      return getRoot(response);\n    };\n    exports.createServerReference = function (\n      id,\n      callServer,\n      encodeFormAction,\n      findSourceMapURL,\n      functionName\n    ) {\n      function action() {\n        var args = Array.prototype.slice.call(arguments);\n        return callServer(id, args);\n      }\n      var location = parseStackLocation(Error(\"react-stack-top-frame\"));\n      if (null !== location) {\n        encodeFormAction = location[1];\n        var line = location[2];\n        location = location[3];\n        findSourceMapURL =\n          null == findSourceMapURL\n            ? null\n            : findSourceMapURL(encodeFormAction, \"Client\");\n        action = createFakeServerFunction(\n          functionName || \"\",\n          encodeFormAction,\n          findSourceMapURL,\n          line,\n          location,\n          \"Client\",\n          action\n        );\n      }\n      registerBoundServerReference(action, id, null);\n      return action;\n    };\n    exports.createTemporaryReferenceSet = function () {\n      return new Map();\n    };\n    exports.encodeReply = function (value, options) {\n      return new Promise(function (resolve, reject) {\n        var abort = processReply(\n          value,\n          \"\",\n          options && options.temporaryReferences\n            ? options.temporaryReferences\n            : void 0,\n          resolve,\n          reject\n        );\n        if (options && options.signal) {\n          var signal = options.signal;\n          if (signal.aborted) abort(signal.reason);\n          else {\n            var listener = function () {\n              abort(signal.reason);\n              signal.removeEventListener(\"abort\", listener);\n            };\n            signal.addEventListener(\"abort\", listener);\n          }\n        }\n      });\n    };\n    exports.registerServerReference = function (reference, id) {\n      registerBoundServerReference(reference, id, null);\n      return reference;\n    };\n  })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2svY2pzL3JlYWN0LXNlcnZlci1kb20td2VicGFjay1jbGllbnQuYnJvd3Nlci5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYixLQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixtQkFBbUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsbUJBQW1CO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHFCQUFzQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsbUJBQW1CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLElBQUk7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsMEJBQTBCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsNkNBQTZDO0FBQ25FLHNCQUFzQiw0Q0FBNEM7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsSUFBSTtBQUN0QztBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EseUJBQXlCLDZCQUE2QjtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsaUJBQWlCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELGlCQUFpQjtBQUMxRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixzQkFBc0I7QUFDdEI7QUFDQSxzQkFBc0IsaUJBQWlCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELGNBQWM7QUFDOUQsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0Isc0RBQXNEO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isc0JBQXNCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHNCQUFzQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsNkJBQTZCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsNkJBQTZCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsMEJBQTBCO0FBQzVDO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLDBCQUEwQjtBQUM1QztBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG9DQUFvQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxzQkFBc0I7QUFDbEUsbUJBQW1CLG9DQUFvQztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLGdCQUFnQjtBQUN4RDtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isa0JBQWtCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixvREFBb0Q7QUFDN0U7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qiw4Q0FBOEM7QUFDdkU7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBLG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IseUNBQXlDO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQix5QkFBeUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQix3QkFBd0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0NBQWdDO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixrQkFBa0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsU0FBUztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQywrTkFBTztBQUMvQixpQkFBaUIsbUJBQU8sQ0FBQyx1T0FBVztBQUNwQyx5QkFBeUIsWUFBWTtBQUNyQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsbUJBQW1CO0FBQ25ELElBQUksbUJBQW1CO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxHQUFHO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsZ0VBQWdFLGVBQWUsb0NBQW9DO0FBQzVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLGdFQUFnRSxlQUFlLG9DQUFvQztBQUM1SjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUksdUJBQXVCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksZ0NBQWdDO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSw2QkFBNkI7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksbUNBQW1DO0FBQ3ZDO0FBQ0E7QUFDQSxJQUFJLG1CQUFtQjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxJQUFJLCtCQUErQjtBQUNuQztBQUNBO0FBQ0E7QUFDQSxHQUFHIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNC43X0BiYWJlbCtjb3JlQDcuMjguM19Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHBsYXl3cmlnaHQrdGVzdEAxLjU1LjBfcmVhY3QtZF80N2ZmMzgxM2Q3OTA1NjZkZjI1NGEyMTYzNTUwYzJkNS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LXNlcnZlci1kb20td2VicGFjay9janMvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrLWNsaWVudC5icm93c2VyLmRldmVsb3BtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LXNlcnZlci1kb20td2VicGFjay1jbGllbnQuYnJvd3Nlci5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgJiZcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiByZXNvbHZlQ2xpZW50UmVmZXJlbmNlKGJ1bmRsZXJDb25maWcsIG1ldGFkYXRhKSB7XG4gICAgICBpZiAoYnVuZGxlckNvbmZpZykge1xuICAgICAgICB2YXIgbW9kdWxlRXhwb3J0cyA9IGJ1bmRsZXJDb25maWdbbWV0YWRhdGFbMF1dO1xuICAgICAgICBpZiAoKGJ1bmRsZXJDb25maWcgPSBtb2R1bGVFeHBvcnRzICYmIG1vZHVsZUV4cG9ydHNbbWV0YWRhdGFbMl1dKSlcbiAgICAgICAgICBtb2R1bGVFeHBvcnRzID0gYnVuZGxlckNvbmZpZy5uYW1lO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBidW5kbGVyQ29uZmlnID0gbW9kdWxlRXhwb3J0cyAmJiBtb2R1bGVFeHBvcnRzW1wiKlwiXTtcbiAgICAgICAgICBpZiAoIWJ1bmRsZXJDb25maWcpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIHRoZSBtb2R1bGUgXCInICtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YVswXSArXG4gICAgICAgICAgICAgICAgJ1wiIGluIHRoZSBSZWFjdCBTZXJ2ZXIgQ29uc3VtZXIgTWFuaWZlc3QuIFRoaXMgaXMgcHJvYmFibHkgYSBidWcgaW4gdGhlIFJlYWN0IFNlcnZlciBDb21wb25lbnRzIGJ1bmRsZXIuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICBtb2R1bGVFeHBvcnRzID0gbWV0YWRhdGFbMl07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDQgPT09IG1ldGFkYXRhLmxlbmd0aFxuICAgICAgICAgID8gW2J1bmRsZXJDb25maWcuaWQsIGJ1bmRsZXJDb25maWcuY2h1bmtzLCBtb2R1bGVFeHBvcnRzLCAxXVxuICAgICAgICAgIDogW2J1bmRsZXJDb25maWcuaWQsIGJ1bmRsZXJDb25maWcuY2h1bmtzLCBtb2R1bGVFeHBvcnRzXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZXRhZGF0YTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVNlcnZlclJlZmVyZW5jZShidW5kbGVyQ29uZmlnLCBpZCkge1xuICAgICAgdmFyIG5hbWUgPSBcIlwiLFxuICAgICAgICByZXNvbHZlZE1vZHVsZURhdGEgPSBidW5kbGVyQ29uZmlnW2lkXTtcbiAgICAgIGlmIChyZXNvbHZlZE1vZHVsZURhdGEpIG5hbWUgPSByZXNvbHZlZE1vZHVsZURhdGEubmFtZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgaWR4ID0gaWQubGFzdEluZGV4T2YoXCIjXCIpO1xuICAgICAgICAtMSAhPT0gaWR4ICYmXG4gICAgICAgICAgKChuYW1lID0gaWQuc2xpY2UoaWR4ICsgMSkpLFxuICAgICAgICAgIChyZXNvbHZlZE1vZHVsZURhdGEgPSBidW5kbGVyQ29uZmlnW2lkLnNsaWNlKDAsIGlkeCldKSk7XG4gICAgICAgIGlmICghcmVzb2x2ZWRNb2R1bGVEYXRhKVxuICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIHRoZSBtb2R1bGUgXCInICtcbiAgICAgICAgICAgICAgaWQgK1xuICAgICAgICAgICAgICAnXCIgaW4gdGhlIFJlYWN0IFNlcnZlciBNYW5pZmVzdC4gVGhpcyBpcyBwcm9iYWJseSBhIGJ1ZyBpbiB0aGUgUmVhY3QgU2VydmVyIENvbXBvbmVudHMgYnVuZGxlci4nXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlZE1vZHVsZURhdGEuYXN5bmNcbiAgICAgICAgPyBbcmVzb2x2ZWRNb2R1bGVEYXRhLmlkLCByZXNvbHZlZE1vZHVsZURhdGEuY2h1bmtzLCBuYW1lLCAxXVxuICAgICAgICA6IFtyZXNvbHZlZE1vZHVsZURhdGEuaWQsIHJlc29sdmVkTW9kdWxlRGF0YS5jaHVua3MsIG5hbWVdO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXF1aXJlQXN5bmNNb2R1bGUoaWQpIHtcbiAgICAgIHZhciBwcm9taXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgcHJvbWlzZS50aGVuIHx8IFwiZnVsZmlsbGVkXCIgPT09IHByb21pc2Uuc3RhdHVzKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIHByb21pc2UudGhlbihcbiAgICAgICAgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcHJvbWlzZS5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiO1xuICAgICAgICAgIHByb21pc2UudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgIHByb21pc2Uuc3RhdHVzID0gXCJyZWplY3RlZFwiO1xuICAgICAgICAgIHByb21pc2UucmVhc29uID0gcmVhc29uO1xuICAgICAgICB9XG4gICAgICApO1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlnbm9yZVJlamVjdCgpIHt9XG4gICAgZnVuY3Rpb24gcHJlbG9hZE1vZHVsZShtZXRhZGF0YSkge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGNodW5rcyA9IG1ldGFkYXRhWzFdLCBwcm9taXNlcyA9IFtdLCBpID0gMDtcbiAgICAgICAgaSA8IGNodW5rcy5sZW5ndGg7XG5cbiAgICAgICkge1xuICAgICAgICB2YXIgY2h1bmtJZCA9IGNodW5rc1tpKytdLFxuICAgICAgICAgIGNodW5rRmlsZW5hbWUgPSBjaHVua3NbaSsrXSxcbiAgICAgICAgICBlbnRyeSA9IGNodW5rQ2FjaGUuZ2V0KGNodW5rSWQpO1xuICAgICAgICB2b2lkIDAgPT09IGVudHJ5XG4gICAgICAgICAgPyAoKGNodW5rRmlsZW5hbWUgPSBsb2FkQ2h1bmsoY2h1bmtJZCwgY2h1bmtGaWxlbmFtZSkpLFxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChjaHVua0ZpbGVuYW1lKSxcbiAgICAgICAgICAgIChlbnRyeSA9IGNodW5rQ2FjaGUuc2V0LmJpbmQoY2h1bmtDYWNoZSwgY2h1bmtJZCwgbnVsbCkpLFxuICAgICAgICAgICAgY2h1bmtGaWxlbmFtZS50aGVuKGVudHJ5LCBpZ25vcmVSZWplY3QpLFxuICAgICAgICAgICAgY2h1bmtDYWNoZS5zZXQoY2h1bmtJZCwgY2h1bmtGaWxlbmFtZSkpXG4gICAgICAgICAgOiBudWxsICE9PSBlbnRyeSAmJiBwcm9taXNlcy5wdXNoKGVudHJ5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiA0ID09PSBtZXRhZGF0YS5sZW5ndGhcbiAgICAgICAgPyAwID09PSBwcm9taXNlcy5sZW5ndGhcbiAgICAgICAgICA/IHJlcXVpcmVBc3luY01vZHVsZShtZXRhZGF0YVswXSlcbiAgICAgICAgICA6IFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmVBc3luY01vZHVsZShtZXRhZGF0YVswXSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICA6IDAgPCBwcm9taXNlcy5sZW5ndGhcbiAgICAgICAgICA/IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVxdWlyZU1vZHVsZShtZXRhZGF0YSkge1xuICAgICAgdmFyIG1vZHVsZUV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKG1ldGFkYXRhWzBdKTtcbiAgICAgIGlmICg0ID09PSBtZXRhZGF0YS5sZW5ndGggJiYgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbW9kdWxlRXhwb3J0cy50aGVuKVxuICAgICAgICBpZiAoXCJmdWxmaWxsZWRcIiA9PT0gbW9kdWxlRXhwb3J0cy5zdGF0dXMpXG4gICAgICAgICAgbW9kdWxlRXhwb3J0cyA9IG1vZHVsZUV4cG9ydHMudmFsdWU7XG4gICAgICAgIGVsc2UgdGhyb3cgbW9kdWxlRXhwb3J0cy5yZWFzb247XG4gICAgICByZXR1cm4gXCIqXCIgPT09IG1ldGFkYXRhWzJdXG4gICAgICAgID8gbW9kdWxlRXhwb3J0c1xuICAgICAgICA6IFwiXCIgPT09IG1ldGFkYXRhWzJdXG4gICAgICAgICAgPyBtb2R1bGVFeHBvcnRzLl9fZXNNb2R1bGVcbiAgICAgICAgICAgID8gbW9kdWxlRXhwb3J0cy5kZWZhdWx0XG4gICAgICAgICAgICA6IG1vZHVsZUV4cG9ydHNcbiAgICAgICAgICA6IG1vZHVsZUV4cG9ydHNbbWV0YWRhdGFbMl1dO1xuICAgIH1cbiAgICBmdW5jdGlvbiBsb2FkQ2h1bmsoY2h1bmtJZCwgZmlsZW5hbWUpIHtcbiAgICAgIGNodW5rTWFwLnNldChjaHVua0lkLCBmaWxlbmFtZSk7XG4gICAgICByZXR1cm4gX193ZWJwYWNrX2NodW5rX2xvYWRfXyhjaHVua0lkKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgICBpZiAobnVsbCA9PT0gbWF5YmVJdGVyYWJsZSB8fCBcIm9iamVjdFwiICE9PSB0eXBlb2YgbWF5YmVJdGVyYWJsZSlcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBtYXliZUl0ZXJhYmxlID1cbiAgICAgICAgKE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0pIHx8XG4gICAgICAgIG1heWJlSXRlcmFibGVbXCJAQGl0ZXJhdG9yXCJdO1xuICAgICAgcmV0dXJuIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG1heWJlSXRlcmFibGUgPyBtYXliZUl0ZXJhYmxlIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNPYmplY3RQcm90b3R5cGUob2JqZWN0KSB7XG4gICAgICBpZiAoIW9iamVjdCkgcmV0dXJuICExO1xuICAgICAgdmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG4gICAgICBpZiAob2JqZWN0ID09PSBPYmplY3RQcm90b3R5cGUpIHJldHVybiAhMDtcbiAgICAgIGlmIChnZXRQcm90b3R5cGVPZihvYmplY3QpKSByZXR1cm4gITE7XG4gICAgICBvYmplY3QgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyBpKyspXG4gICAgICAgIGlmICghKG9iamVjdFtpXSBpbiBPYmplY3RQcm90b3R5cGUpKSByZXR1cm4gITE7XG4gICAgICByZXR1cm4gITA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzU2ltcGxlT2JqZWN0KG9iamVjdCkge1xuICAgICAgaWYgKCFpc09iamVjdFByb3RvdHlwZShnZXRQcm90b3R5cGVPZihvYmplY3QpKSkgcmV0dXJuICExO1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIG5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KSwgaSA9IDA7XG4gICAgICAgIGkgPCBuYW1lcy5sZW5ndGg7XG4gICAgICAgIGkrK1xuICAgICAgKSB7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIG5hbWVzW2ldKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFkZXNjcmlwdG9yIHx8XG4gICAgICAgICAgKCFkZXNjcmlwdG9yLmVudW1lcmFibGUgJiZcbiAgICAgICAgICAgICgoXCJrZXlcIiAhPT0gbmFtZXNbaV0gJiYgXCJyZWZcIiAhPT0gbmFtZXNbaV0pIHx8XG4gICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIGRlc2NyaXB0b3IuZ2V0KSlcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gb2JqZWN0TmFtZShvYmplY3QpIHtcbiAgICAgIG9iamVjdCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpO1xuICAgICAgcmV0dXJuIG9iamVjdC5zbGljZSg4LCBvYmplY3QubGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlS2V5Rm9yRXJyb3JNZXNzYWdlKGtleSkge1xuICAgICAgdmFyIGVuY29kZWRLZXkgPSBKU09OLnN0cmluZ2lmeShrZXkpO1xuICAgICAgcmV0dXJuICdcIicgKyBrZXkgKyAnXCInID09PSBlbmNvZGVkS2V5ID8ga2V5IDogZW5jb2RlZEtleTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVWYWx1ZUZvckVycm9yTWVzc2FnZSh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgIDEwID49IHZhbHVlLmxlbmd0aCA/IHZhbHVlIDogdmFsdWUuc2xpY2UoMCwgMTApICsgXCIuLi5cIlxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICBpZiAoaXNBcnJheUltcGwodmFsdWUpKSByZXR1cm4gXCJbLi4uXVwiO1xuICAgICAgICAgIGlmIChudWxsICE9PSB2YWx1ZSAmJiB2YWx1ZS4kJHR5cGVvZiA9PT0gQ0xJRU5UX1JFRkVSRU5DRV9UQUcpXG4gICAgICAgICAgICByZXR1cm4gXCJjbGllbnRcIjtcbiAgICAgICAgICB2YWx1ZSA9IG9iamVjdE5hbWUodmFsdWUpO1xuICAgICAgICAgIHJldHVybiBcIk9iamVjdFwiID09PSB2YWx1ZSA/IFwiey4uLn1cIiA6IHZhbHVlO1xuICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICByZXR1cm4gdmFsdWUuJCR0eXBlb2YgPT09IENMSUVOVF9SRUZFUkVOQ0VfVEFHXG4gICAgICAgICAgICA/IFwiY2xpZW50XCJcbiAgICAgICAgICAgIDogKHZhbHVlID0gdmFsdWUuZGlzcGxheU5hbWUgfHwgdmFsdWUubmFtZSlcbiAgICAgICAgICAgICAgPyBcImZ1bmN0aW9uIFwiICsgdmFsdWVcbiAgICAgICAgICAgICAgOiBcImZ1bmN0aW9uXCI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlRWxlbWVudFR5cGUodHlwZSkge1xuICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlKSByZXR1cm4gdHlwZTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VMaXN0XCI7XG4gICAgICB9XG4gICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZUVsZW1lbnRUeXBlKHR5cGUucmVuZGVyKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZUVsZW1lbnRUeXBlKHR5cGUudHlwZSk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICB2YXIgcGF5bG9hZCA9IHR5cGUuX3BheWxvYWQ7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5faW5pdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBkZXNjcmliZUVsZW1lbnRUeXBlKHR5cGUocGF5bG9hZCkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKG9iamVjdE9yQXJyYXksIGV4cGFuZGVkTmFtZSkge1xuICAgICAgdmFyIG9iaktpbmQgPSBvYmplY3ROYW1lKG9iamVjdE9yQXJyYXkpO1xuICAgICAgaWYgKFwiT2JqZWN0XCIgIT09IG9iaktpbmQgJiYgXCJBcnJheVwiICE9PSBvYmpLaW5kKSByZXR1cm4gb2JqS2luZDtcbiAgICAgIHZhciBzdGFydCA9IC0xLFxuICAgICAgICBsZW5ndGggPSAwO1xuICAgICAgaWYgKGlzQXJyYXlJbXBsKG9iamVjdE9yQXJyYXkpKVxuICAgICAgICBpZiAoanN4Q2hpbGRyZW5QYXJlbnRzLmhhcyhvYmplY3RPckFycmF5KSkge1xuICAgICAgICAgIHZhciB0eXBlID0ganN4Q2hpbGRyZW5QYXJlbnRzLmdldChvYmplY3RPckFycmF5KTtcbiAgICAgICAgICBvYmpLaW5kID0gXCI8XCIgKyBkZXNjcmliZUVsZW1lbnRUeXBlKHR5cGUpICsgXCI+XCI7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3RPckFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3RPckFycmF5W2ldO1xuICAgICAgICAgICAgdmFsdWUgPVxuICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgdmFsdWVcbiAgICAgICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICAgICAgOiBcIm9iamVjdFwiID09PSB0eXBlb2YgdmFsdWUgJiYgbnVsbCAhPT0gdmFsdWVcbiAgICAgICAgICAgICAgICAgID8gXCJ7XCIgKyBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZSh2YWx1ZSkgKyBcIn1cIlxuICAgICAgICAgICAgICAgICAgOiBcIntcIiArIGRlc2NyaWJlVmFsdWVGb3JFcnJvck1lc3NhZ2UodmFsdWUpICsgXCJ9XCI7XG4gICAgICAgICAgICBcIlwiICsgaSA9PT0gZXhwYW5kZWROYW1lXG4gICAgICAgICAgICAgID8gKChzdGFydCA9IG9iaktpbmQubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAobGVuZ3RoID0gdmFsdWUubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAob2JqS2luZCArPSB2YWx1ZSkpXG4gICAgICAgICAgICAgIDogKG9iaktpbmQgPVxuICAgICAgICAgICAgICAgICAgMTUgPiB2YWx1ZS5sZW5ndGggJiYgNDAgPiBvYmpLaW5kLmxlbmd0aCArIHZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IG9iaktpbmQgKyB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IG9iaktpbmQgKyBcInsuLi59XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvYmpLaW5kICs9IFwiPC9cIiArIGRlc2NyaWJlRWxlbWVudFR5cGUodHlwZSkgKyBcIj5cIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvYmpLaW5kID0gXCJbXCI7XG4gICAgICAgICAgZm9yICh0eXBlID0gMDsgdHlwZSA8IG9iamVjdE9yQXJyYXkubGVuZ3RoOyB0eXBlKyspXG4gICAgICAgICAgICAwIDwgdHlwZSAmJiAob2JqS2luZCArPSBcIiwgXCIpLFxuICAgICAgICAgICAgICAoaSA9IG9iamVjdE9yQXJyYXlbdHlwZV0pLFxuICAgICAgICAgICAgICAoaSA9XG4gICAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIGkgJiYgbnVsbCAhPT0gaVxuICAgICAgICAgICAgICAgICAgPyBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZShpKVxuICAgICAgICAgICAgICAgICAgOiBkZXNjcmliZVZhbHVlRm9yRXJyb3JNZXNzYWdlKGkpKSxcbiAgICAgICAgICAgICAgXCJcIiArIHR5cGUgPT09IGV4cGFuZGVkTmFtZVxuICAgICAgICAgICAgICAgID8gKChzdGFydCA9IG9iaktpbmQubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgIChsZW5ndGggPSBpLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgICAob2JqS2luZCArPSBpKSlcbiAgICAgICAgICAgICAgICA6IChvYmpLaW5kID1cbiAgICAgICAgICAgICAgICAgICAgMTAgPiBpLmxlbmd0aCAmJiA0MCA+IG9iaktpbmQubGVuZ3RoICsgaS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICA/IG9iaktpbmQgKyBpXG4gICAgICAgICAgICAgICAgICAgICAgOiBvYmpLaW5kICsgXCIuLi5cIik7XG4gICAgICAgICAgb2JqS2luZCArPSBcIl1cIjtcbiAgICAgICAgfVxuICAgICAgZWxzZSBpZiAob2JqZWN0T3JBcnJheS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKVxuICAgICAgICBvYmpLaW5kID0gXCI8XCIgKyBkZXNjcmliZUVsZW1lbnRUeXBlKG9iamVjdE9yQXJyYXkudHlwZSkgKyBcIi8+XCI7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKG9iamVjdE9yQXJyYXkuJCR0eXBlb2YgPT09IENMSUVOVF9SRUZFUkVOQ0VfVEFHKSByZXR1cm4gXCJjbGllbnRcIjtcbiAgICAgICAgaWYgKGpzeFByb3BzUGFyZW50cy5oYXMob2JqZWN0T3JBcnJheSkpIHtcbiAgICAgICAgICBvYmpLaW5kID0ganN4UHJvcHNQYXJlbnRzLmdldChvYmplY3RPckFycmF5KTtcbiAgICAgICAgICBvYmpLaW5kID0gXCI8XCIgKyAoZGVzY3JpYmVFbGVtZW50VHlwZShvYmpLaW5kKSB8fCBcIi4uLlwiKTtcbiAgICAgICAgICB0eXBlID0gT2JqZWN0LmtleXMob2JqZWN0T3JBcnJheSk7XG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IHR5cGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG9iaktpbmQgKz0gXCIgXCI7XG4gICAgICAgICAgICB2YWx1ZSA9IHR5cGVbaV07XG4gICAgICAgICAgICBvYmpLaW5kICs9IGRlc2NyaWJlS2V5Rm9yRXJyb3JNZXNzYWdlKHZhbHVlKSArIFwiPVwiO1xuICAgICAgICAgICAgdmFyIF92YWx1ZTIgPSBvYmplY3RPckFycmF5W3ZhbHVlXTtcbiAgICAgICAgICAgIHZhciBfc3Vic3RyMiA9XG4gICAgICAgICAgICAgIHZhbHVlID09PSBleHBhbmRlZE5hbWUgJiZcbiAgICAgICAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIF92YWx1ZTIgJiZcbiAgICAgICAgICAgICAgbnVsbCAhPT0gX3ZhbHVlMlxuICAgICAgICAgICAgICAgID8gZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UoX3ZhbHVlMilcbiAgICAgICAgICAgICAgICA6IGRlc2NyaWJlVmFsdWVGb3JFcnJvck1lc3NhZ2UoX3ZhbHVlMik7XG4gICAgICAgICAgICBcInN0cmluZ1wiICE9PSB0eXBlb2YgX3ZhbHVlMiAmJiAoX3N1YnN0cjIgPSBcIntcIiArIF9zdWJzdHIyICsgXCJ9XCIpO1xuICAgICAgICAgICAgdmFsdWUgPT09IGV4cGFuZGVkTmFtZVxuICAgICAgICAgICAgICA/ICgoc3RhcnQgPSBvYmpLaW5kLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgKGxlbmd0aCA9IF9zdWJzdHIyLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgKG9iaktpbmQgKz0gX3N1YnN0cjIpKVxuICAgICAgICAgICAgICA6IChvYmpLaW5kID1cbiAgICAgICAgICAgICAgICAgIDEwID4gX3N1YnN0cjIubGVuZ3RoICYmIDQwID4gb2JqS2luZC5sZW5ndGggKyBfc3Vic3RyMi5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyBvYmpLaW5kICsgX3N1YnN0cjJcbiAgICAgICAgICAgICAgICAgICAgOiBvYmpLaW5kICsgXCIuLi5cIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9iaktpbmQgKz0gXCI+XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqS2luZCA9IFwie1wiO1xuICAgICAgICAgIHR5cGUgPSBPYmplY3Qua2V5cyhvYmplY3RPckFycmF5KTtcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHlwZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIDAgPCBpICYmIChvYmpLaW5kICs9IFwiLCBcIiksXG4gICAgICAgICAgICAgICh2YWx1ZSA9IHR5cGVbaV0pLFxuICAgICAgICAgICAgICAob2JqS2luZCArPSBkZXNjcmliZUtleUZvckVycm9yTWVzc2FnZSh2YWx1ZSkgKyBcIjogXCIpLFxuICAgICAgICAgICAgICAoX3ZhbHVlMiA9IG9iamVjdE9yQXJyYXlbdmFsdWVdKSxcbiAgICAgICAgICAgICAgKF92YWx1ZTIgPVxuICAgICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBfdmFsdWUyICYmIG51bGwgIT09IF92YWx1ZTJcbiAgICAgICAgICAgICAgICAgID8gZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UoX3ZhbHVlMilcbiAgICAgICAgICAgICAgICAgIDogZGVzY3JpYmVWYWx1ZUZvckVycm9yTWVzc2FnZShfdmFsdWUyKSksXG4gICAgICAgICAgICAgIHZhbHVlID09PSBleHBhbmRlZE5hbWVcbiAgICAgICAgICAgICAgICA/ICgoc3RhcnQgPSBvYmpLaW5kLmxlbmd0aCksXG4gICAgICAgICAgICAgICAgICAobGVuZ3RoID0gX3ZhbHVlMi5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgKG9iaktpbmQgKz0gX3ZhbHVlMikpXG4gICAgICAgICAgICAgICAgOiAob2JqS2luZCA9XG4gICAgICAgICAgICAgICAgICAgIDEwID4gX3ZhbHVlMi5sZW5ndGggJiYgNDAgPiBvYmpLaW5kLmxlbmd0aCArIF92YWx1ZTIubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgPyBvYmpLaW5kICsgX3ZhbHVlMlxuICAgICAgICAgICAgICAgICAgICAgIDogb2JqS2luZCArIFwiLi4uXCIpO1xuICAgICAgICAgIG9iaktpbmQgKz0gXCJ9XCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2b2lkIDAgPT09IGV4cGFuZGVkTmFtZVxuICAgICAgICA/IG9iaktpbmRcbiAgICAgICAgOiAtMSA8IHN0YXJ0ICYmIDAgPCBsZW5ndGhcbiAgICAgICAgICA/ICgob2JqZWN0T3JBcnJheSA9IFwiIFwiLnJlcGVhdChzdGFydCkgKyBcIl5cIi5yZXBlYXQobGVuZ3RoKSksXG4gICAgICAgICAgICBcIlxcbiAgXCIgKyBvYmpLaW5kICsgXCJcXG4gIFwiICsgb2JqZWN0T3JBcnJheSlcbiAgICAgICAgICA6IFwiXFxuICBcIiArIG9iaktpbmQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZU51bWJlcihudW1iZXIpIHtcbiAgICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobnVtYmVyKVxuICAgICAgICA/IDAgPT09IG51bWJlciAmJiAtSW5maW5pdHkgPT09IDEgLyBudW1iZXJcbiAgICAgICAgICA/IFwiJC0wXCJcbiAgICAgICAgICA6IG51bWJlclxuICAgICAgICA6IEluZmluaXR5ID09PSBudW1iZXJcbiAgICAgICAgICA/IFwiJEluZmluaXR5XCJcbiAgICAgICAgICA6IC1JbmZpbml0eSA9PT0gbnVtYmVyXG4gICAgICAgICAgICA/IFwiJC1JbmZpbml0eVwiXG4gICAgICAgICAgICA6IFwiJE5hTlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVwbHkoXG4gICAgICByb290LFxuICAgICAgZm9ybUZpZWxkUHJlZml4LFxuICAgICAgdGVtcG9yYXJ5UmVmZXJlbmNlcyxcbiAgICAgIHJlc29sdmUsXG4gICAgICByZWplY3RcbiAgICApIHtcbiAgICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZVR5cGVkQXJyYXkodGFnLCB0eXBlZEFycmF5KSB7XG4gICAgICAgIHR5cGVkQXJyYXkgPSBuZXcgQmxvYihbXG4gICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoXG4gICAgICAgICAgICB0eXBlZEFycmF5LmJ1ZmZlcixcbiAgICAgICAgICAgIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgIHR5cGVkQXJyYXkuYnl0ZUxlbmd0aFxuICAgICAgICAgIClcbiAgICAgICAgXSk7XG4gICAgICAgIHZhciBibG9iSWQgPSBuZXh0UGFydElkKys7XG4gICAgICAgIG51bGwgPT09IGZvcm1EYXRhICYmIChmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIGJsb2JJZCwgdHlwZWRBcnJheSk7XG4gICAgICAgIHJldHVybiBcIiRcIiArIHRhZyArIGJsb2JJZC50b1N0cmluZygxNik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzZXJpYWxpemVCaW5hcnlSZWFkZXIocmVhZGVyKSB7XG4gICAgICAgIGZ1bmN0aW9uIHByb2dyZXNzKGVudHJ5KSB7XG4gICAgICAgICAgZW50cnkuZG9uZVxuICAgICAgICAgICAgPyAoKGVudHJ5ID0gbmV4dFBhcnRJZCsrKSxcbiAgICAgICAgICAgICAgZGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsgZW50cnksIG5ldyBCbG9iKGJ1ZmZlcikpLFxuICAgICAgICAgICAgICBkYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgICBmb3JtRmllbGRQcmVmaXggKyBzdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAnXCIkbycgKyBlbnRyeS50b1N0cmluZygxNikgKyAnXCInXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGRhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIHN0cmVhbUlkLCBcIkNcIiksXG4gICAgICAgICAgICAgIHBlbmRpbmdQYXJ0cy0tLFxuICAgICAgICAgICAgICAwID09PSBwZW5kaW5nUGFydHMgJiYgcmVzb2x2ZShkYXRhKSlcbiAgICAgICAgICAgIDogKGJ1ZmZlci5wdXNoKGVudHJ5LnZhbHVlKSxcbiAgICAgICAgICAgICAgcmVhZGVyLnJlYWQobmV3IFVpbnQ4QXJyYXkoMTAyNCkpLnRoZW4ocHJvZ3Jlc3MsIHJlamVjdCkpO1xuICAgICAgICB9XG4gICAgICAgIG51bGwgPT09IGZvcm1EYXRhICYmIChmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpKTtcbiAgICAgICAgdmFyIGRhdGEgPSBmb3JtRGF0YTtcbiAgICAgICAgcGVuZGluZ1BhcnRzKys7XG4gICAgICAgIHZhciBzdHJlYW1JZCA9IG5leHRQYXJ0SWQrKyxcbiAgICAgICAgICBidWZmZXIgPSBbXTtcbiAgICAgICAgcmVhZGVyLnJlYWQobmV3IFVpbnQ4QXJyYXkoMTAyNCkpLnRoZW4ocHJvZ3Jlc3MsIHJlamVjdCk7XG4gICAgICAgIHJldHVybiBcIiRyXCIgKyBzdHJlYW1JZC50b1N0cmluZygxNik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBzZXJpYWxpemVSZWFkZXIocmVhZGVyKSB7XG4gICAgICAgIGZ1bmN0aW9uIHByb2dyZXNzKGVudHJ5KSB7XG4gICAgICAgICAgaWYgKGVudHJ5LmRvbmUpXG4gICAgICAgICAgICBkYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBzdHJlYW1JZCwgXCJDXCIpLFxuICAgICAgICAgICAgICBwZW5kaW5nUGFydHMtLSxcbiAgICAgICAgICAgICAgMCA9PT0gcGVuZGluZ1BhcnRzICYmIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdmFyIHBhcnRKU09OID0gSlNPTi5zdHJpbmdpZnkoZW50cnkudmFsdWUsIHJlc29sdmVUb0pTT04pO1xuICAgICAgICAgICAgICBkYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBzdHJlYW1JZCwgcGFydEpTT04pO1xuICAgICAgICAgICAgICByZWFkZXIucmVhZCgpLnRoZW4ocHJvZ3Jlc3MsIHJlamVjdCk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgIHJlamVjdCh4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBudWxsID09PSBmb3JtRGF0YSAmJiAoZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKSk7XG4gICAgICAgIHZhciBkYXRhID0gZm9ybURhdGE7XG4gICAgICAgIHBlbmRpbmdQYXJ0cysrO1xuICAgICAgICB2YXIgc3RyZWFtSWQgPSBuZXh0UGFydElkKys7XG4gICAgICAgIHJlYWRlci5yZWFkKCkudGhlbihwcm9ncmVzcywgcmVqZWN0KTtcbiAgICAgICAgcmV0dXJuIFwiJFJcIiArIHN0cmVhbUlkLnRvU3RyaW5nKDE2KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZVJlYWRhYmxlU3RyZWFtKHN0cmVhbSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciBiaW5hcnlSZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKHsgbW9kZTogXCJieW9iXCIgfSk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICByZXR1cm4gc2VyaWFsaXplUmVhZGVyKHN0cmVhbS5nZXRSZWFkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZUJpbmFyeVJlYWRlcihiaW5hcnlSZWFkZXIpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gc2VyaWFsaXplQXN5bmNJdGVyYWJsZShpdGVyYWJsZSwgaXRlcmF0b3IpIHtcbiAgICAgICAgZnVuY3Rpb24gcHJvZ3Jlc3MoZW50cnkpIHtcbiAgICAgICAgICBpZiAoZW50cnkuZG9uZSkge1xuICAgICAgICAgICAgaWYgKHZvaWQgMCA9PT0gZW50cnkudmFsdWUpXG4gICAgICAgICAgICAgIGRhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIHN0cmVhbUlkLCBcIkNcIik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnRKU09OID0gSlNPTi5zdHJpbmdpZnkoZW50cnkudmFsdWUsIHJlc29sdmVUb0pTT04pO1xuICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIHN0cmVhbUlkLCBcIkNcIiArIHBhcnRKU09OKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgICAgIHJlamVjdCh4KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBlbmRpbmdQYXJ0cy0tO1xuICAgICAgICAgICAgMCA9PT0gcGVuZGluZ1BhcnRzICYmIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2YXIgX3BhcnRKU09OID0gSlNPTi5zdHJpbmdpZnkoZW50cnkudmFsdWUsIHJlc29sdmVUb0pTT04pO1xuICAgICAgICAgICAgICBkYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBzdHJlYW1JZCwgX3BhcnRKU09OKTtcbiAgICAgICAgICAgICAgaXRlcmF0b3IubmV4dCgpLnRoZW4ocHJvZ3Jlc3MsIHJlamVjdCk7XG4gICAgICAgICAgICB9IGNhdGNoICh4JDApIHtcbiAgICAgICAgICAgICAgcmVqZWN0KHgkMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpO1xuICAgICAgICB2YXIgZGF0YSA9IGZvcm1EYXRhO1xuICAgICAgICBwZW5kaW5nUGFydHMrKztcbiAgICAgICAgdmFyIHN0cmVhbUlkID0gbmV4dFBhcnRJZCsrO1xuICAgICAgICBpdGVyYWJsZSA9IGl0ZXJhYmxlID09PSBpdGVyYXRvcjtcbiAgICAgICAgaXRlcmF0b3IubmV4dCgpLnRoZW4ocHJvZ3Jlc3MsIHJlamVjdCk7XG4gICAgICAgIHJldHVybiBcIiRcIiArIChpdGVyYWJsZSA/IFwieFwiIDogXCJYXCIpICsgc3RyZWFtSWQudG9TdHJpbmcoMTYpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVRvSlNPTihrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFZhbHVlID0gdGhpc1trZXldO1xuICAgICAgICBcIm9iamVjdFwiICE9PSB0eXBlb2Ygb3JpZ2luYWxWYWx1ZSB8fFxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPT09IHZhbHVlIHx8XG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZSBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAoXCJPYmplY3RcIiAhPT0gb2JqZWN0TmFtZShvcmlnaW5hbFZhbHVlKVxuICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiT25seSBwbGFpbiBvYmplY3RzIGNhbiBiZSBwYXNzZWQgdG8gU2VydmVyIEZ1bmN0aW9ucyBmcm9tIHRoZSBDbGllbnQuICVzIG9iamVjdHMgYXJlIG5vdCBzdXBwb3J0ZWQuJXNcIixcbiAgICAgICAgICAgICAgICBvYmplY3ROYW1lKG9yaWdpbmFsVmFsdWUpLFxuICAgICAgICAgICAgICAgIGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKHRoaXMsIGtleSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiT25seSBwbGFpbiBvYmplY3RzIGNhbiBiZSBwYXNzZWQgdG8gU2VydmVyIEZ1bmN0aW9ucyBmcm9tIHRoZSBDbGllbnQuIE9iamVjdHMgd2l0aCB0b0pTT04gbWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZC4gQ29udmVydCBpdCBtYW51YWxseSB0byBhIHNpbXBsZSB2YWx1ZSBiZWZvcmUgcGFzc2luZyBpdCB0byBwcm9wcy4lc1wiLFxuICAgICAgICAgICAgICAgIGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKHRoaXMsIGtleSlcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgIGlmIChudWxsID09PSB2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBzd2l0Y2ggKHZhbHVlLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gdGVtcG9yYXJ5UmVmZXJlbmNlcyAmJiAtMSA9PT0ga2V5LmluZGV4T2YoXCI6XCIpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhcmVudFJlZmVyZW5jZSA9IHdyaXR0ZW5PYmplY3RzLmdldCh0aGlzKTtcbiAgICAgICAgICAgICAgICBpZiAodm9pZCAwICE9PSBwYXJlbnRSZWZlcmVuY2UpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICB0ZW1wb3JhcnlSZWZlcmVuY2VzLnNldChwYXJlbnRSZWZlcmVuY2UgKyBcIjpcIiArIGtleSwgdmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICBcIiRUXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJSZWFjdCBFbGVtZW50IGNhbm5vdCBiZSBwYXNzZWQgdG8gU2VydmVyIEZ1bmN0aW9ucyBmcm9tIHRoZSBDbGllbnQgd2l0aG91dCBhIHRlbXBvcmFyeSByZWZlcmVuY2Ugc2V0LiBQYXNzIGEgVGVtcG9yYXJ5UmVmZXJlbmNlU2V0IHRvIHRoZSBvcHRpb25zLlwiICtcbiAgICAgICAgICAgICAgICAgIGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKHRoaXMsIGtleSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICBvcmlnaW5hbFZhbHVlID0gdmFsdWUuX3BheWxvYWQ7XG4gICAgICAgICAgICAgIHZhciBpbml0ID0gdmFsdWUuX2luaXQ7XG4gICAgICAgICAgICAgIG51bGwgPT09IGZvcm1EYXRhICYmIChmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpKTtcbiAgICAgICAgICAgICAgcGVuZGluZ1BhcnRzKys7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFyZW50UmVmZXJlbmNlID0gaW5pdChvcmlnaW5hbFZhbHVlKTtcbiAgICAgICAgICAgICAgICB2YXIgbGF6eUlkID0gbmV4dFBhcnRJZCsrLFxuICAgICAgICAgICAgICAgICAgcGFydEpTT04gPSBzZXJpYWxpemVNb2RlbChwYXJlbnRSZWZlcmVuY2UsIGxhenlJZCk7XG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIGxhenlJZCwgcGFydEpTT04pO1xuICAgICAgICAgICAgICAgIHJldHVybiBcIiRcIiArIGxhenlJZC50b1N0cmluZygxNik7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgeCAmJlxuICAgICAgICAgICAgICAgICAgbnVsbCAhPT0geCAmJlxuICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgeC50aGVuXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBwZW5kaW5nUGFydHMrKztcbiAgICAgICAgICAgICAgICAgIHZhciBfbGF6eUlkID0gbmV4dFBhcnRJZCsrO1xuICAgICAgICAgICAgICAgICAgcGFyZW50UmVmZXJlbmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIHZhciBfcGFydEpTT04yID0gc2VyaWFsaXplTW9kZWwodmFsdWUsIF9sYXp5SWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgX2RhdGEgPSBmb3JtRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICBfZGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsgX2xhenlJZCwgX3BhcnRKU09OMik7XG4gICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1BhcnRzLS07XG4gICAgICAgICAgICAgICAgICAgICAgMCA9PT0gcGVuZGluZ1BhcnRzICYmIHJlc29sdmUoX2RhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIHgudGhlbihwYXJlbnRSZWZlcmVuY2UsIHBhcmVudFJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCIkXCIgKyBfbGF6eUlkLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVqZWN0KHgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHBlbmRpbmdQYXJ0cy0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB2YWx1ZS50aGVuKSB7XG4gICAgICAgICAgICBudWxsID09PSBmb3JtRGF0YSAmJiAoZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKSk7XG4gICAgICAgICAgICBwZW5kaW5nUGFydHMrKztcbiAgICAgICAgICAgIHZhciBwcm9taXNlSWQgPSBuZXh0UGFydElkKys7XG4gICAgICAgICAgICB2YWx1ZS50aGVuKGZ1bmN0aW9uIChwYXJ0VmFsdWUpIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YXIgX3BhcnRKU09OMyA9IHNlcmlhbGl6ZU1vZGVsKHBhcnRWYWx1ZSwgcHJvbWlzZUlkKTtcbiAgICAgICAgICAgICAgICBwYXJ0VmFsdWUgPSBmb3JtRGF0YTtcbiAgICAgICAgICAgICAgICBwYXJ0VmFsdWUuYXBwZW5kKGZvcm1GaWVsZFByZWZpeCArIHByb21pc2VJZCwgX3BhcnRKU09OMyk7XG4gICAgICAgICAgICAgICAgcGVuZGluZ1BhcnRzLS07XG4gICAgICAgICAgICAgICAgMCA9PT0gcGVuZGluZ1BhcnRzICYmIHJlc29sdmUocGFydFZhbHVlKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHJlamVjdCk7XG4gICAgICAgICAgICByZXR1cm4gXCIkQFwiICsgcHJvbWlzZUlkLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyZW50UmVmZXJlbmNlID0gd3JpdHRlbk9iamVjdHMuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpZiAodm9pZCAwICE9PSBwYXJlbnRSZWZlcmVuY2UpXG4gICAgICAgICAgICBpZiAobW9kZWxSb290ID09PSB2YWx1ZSkgbW9kZWxSb290ID0gbnVsbDtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIHBhcmVudFJlZmVyZW5jZTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAtMSA9PT0ga2V5LmluZGV4T2YoXCI6XCIpICYmXG4gICAgICAgICAgICAgICgocGFyZW50UmVmZXJlbmNlID0gd3JpdHRlbk9iamVjdHMuZ2V0KHRoaXMpKSxcbiAgICAgICAgICAgICAgdm9pZCAwICE9PSBwYXJlbnRSZWZlcmVuY2UgJiZcbiAgICAgICAgICAgICAgICAoKHBhcmVudFJlZmVyZW5jZSA9IHBhcmVudFJlZmVyZW5jZSArIFwiOlwiICsga2V5KSxcbiAgICAgICAgICAgICAgICB3cml0dGVuT2JqZWN0cy5zZXQodmFsdWUsIHBhcmVudFJlZmVyZW5jZSksXG4gICAgICAgICAgICAgICAgdm9pZCAwICE9PSB0ZW1wb3JhcnlSZWZlcmVuY2VzICYmXG4gICAgICAgICAgICAgICAgICB0ZW1wb3JhcnlSZWZlcmVuY2VzLnNldChwYXJlbnRSZWZlcmVuY2UsIHZhbHVlKSkpO1xuICAgICAgICAgIGlmIChpc0FycmF5SW1wbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpO1xuICAgICAgICAgICAgdmFyIF9kYXRhMyA9IGZvcm1EYXRhO1xuICAgICAgICAgICAga2V5ID0gbmV4dFBhcnRJZCsrO1xuICAgICAgICAgICAgdmFyIHByZWZpeCA9IGZvcm1GaWVsZFByZWZpeCArIGtleSArIFwiX1wiO1xuICAgICAgICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAob3JpZ2luYWxWYWx1ZSwgb3JpZ2luYWxLZXkpIHtcbiAgICAgICAgICAgICAgX2RhdGEzLmFwcGVuZChwcmVmaXggKyBvcmlnaW5hbEtleSwgb3JpZ2luYWxWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBcIiRLXCIgKyBrZXkudG9TdHJpbmcoMTYpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoa2V5ID0gbmV4dFBhcnRJZCsrKSxcbiAgICAgICAgICAgICAgKHBhcmVudFJlZmVyZW5jZSA9IHNlcmlhbGl6ZU1vZGVsKEFycmF5LmZyb20odmFsdWUpLCBrZXkpKSxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpLFxuICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsga2V5LCBwYXJlbnRSZWZlcmVuY2UpLFxuICAgICAgICAgICAgICBcIiRRXCIgKyBrZXkudG9TdHJpbmcoMTYpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNldClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChrZXkgPSBuZXh0UGFydElkKyspLFxuICAgICAgICAgICAgICAocGFyZW50UmVmZXJlbmNlID0gc2VyaWFsaXplTW9kZWwoQXJyYXkuZnJvbSh2YWx1ZSksIGtleSkpLFxuICAgICAgICAgICAgICBudWxsID09PSBmb3JtRGF0YSAmJiAoZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKSksXG4gICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChmb3JtRmllbGRQcmVmaXggKyBrZXksIHBhcmVudFJlZmVyZW5jZSksXG4gICAgICAgICAgICAgIFwiJFdcIiArIGtleS50b1N0cmluZygxNilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoa2V5ID0gbmV3IEJsb2IoW3ZhbHVlXSkpLFxuICAgICAgICAgICAgICAocGFyZW50UmVmZXJlbmNlID0gbmV4dFBhcnRJZCsrKSxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpLFxuICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsgcGFyZW50UmVmZXJlbmNlLCBrZXkpLFxuICAgICAgICAgICAgICBcIiRBXCIgKyBwYXJlbnRSZWZlcmVuY2UudG9TdHJpbmcoMTYpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEludDhBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVUeXBlZEFycmF5KFwiT1wiLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVUeXBlZEFycmF5KFwib1wiLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpXG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplVHlwZWRBcnJheShcIlVcIiwgdmFsdWUpO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEludDE2QXJyYXkpXG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplVHlwZWRBcnJheShcIlNcIiwgdmFsdWUpO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KVxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVR5cGVkQXJyYXkoXCJzXCIsIHZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBJbnQzMkFycmF5KVxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVR5cGVkQXJyYXkoXCJMXCIsIHZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVUeXBlZEFycmF5KFwibFwiLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KVxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVR5cGVkQXJyYXkoXCJHXCIsIHZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpXG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplVHlwZWRBcnJheShcImdcIiwgdmFsdWUpO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJpZ0ludDY0QXJyYXkpXG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplVHlwZWRBcnJheShcIk1cIiwgdmFsdWUpO1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJpZ1VpbnQ2NEFycmF5KVxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVR5cGVkQXJyYXkoXCJtXCIsIHZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRhVmlldykgcmV0dXJuIHNlcmlhbGl6ZVR5cGVkQXJyYXkoXCJWXCIsIHZhbHVlKTtcbiAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgQmxvYiAmJiB2YWx1ZSBpbnN0YW5jZW9mIEJsb2IpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICBudWxsID09PSBmb3JtRGF0YSAmJiAoZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKSksXG4gICAgICAgICAgICAgIChrZXkgPSBuZXh0UGFydElkKyspLFxuICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsga2V5LCB2YWx1ZSksXG4gICAgICAgICAgICAgIFwiJEJcIiArIGtleS50b1N0cmluZygxNilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKChwYXJlbnRSZWZlcmVuY2UgPSBnZXRJdGVyYXRvckZuKHZhbHVlKSkpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAocGFyZW50UmVmZXJlbmNlID0gcGFyZW50UmVmZXJlbmNlLmNhbGwodmFsdWUpKSxcbiAgICAgICAgICAgICAgcGFyZW50UmVmZXJlbmNlID09PSB2YWx1ZVxuICAgICAgICAgICAgICAgID8gKChrZXkgPSBuZXh0UGFydElkKyspLFxuICAgICAgICAgICAgICAgICAgKHBhcmVudFJlZmVyZW5jZSA9IHNlcmlhbGl6ZU1vZGVsKFxuICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHBhcmVudFJlZmVyZW5jZSksXG4gICAgICAgICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICBudWxsID09PSBmb3JtRGF0YSAmJiAoZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKSksXG4gICAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZm9ybUZpZWxkUHJlZml4ICsga2V5LCBwYXJlbnRSZWZlcmVuY2UpLFxuICAgICAgICAgICAgICAgICAgXCIkaVwiICsga2V5LnRvU3RyaW5nKDE2KSlcbiAgICAgICAgICAgICAgICA6IEFycmF5LmZyb20ocGFyZW50UmVmZXJlbmNlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBSZWFkYWJsZVN0cmVhbSAmJlxuICAgICAgICAgICAgdmFsdWUgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbVxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVSZWFkYWJsZVN0cmVhbSh2YWx1ZSk7XG4gICAgICAgICAgcGFyZW50UmVmZXJlbmNlID0gdmFsdWVbQVNZTkNfSVRFUkFUT1JdO1xuICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBwYXJlbnRSZWZlcmVuY2UpXG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplQXN5bmNJdGVyYWJsZSh2YWx1ZSwgcGFyZW50UmVmZXJlbmNlLmNhbGwodmFsdWUpKTtcbiAgICAgICAgICBwYXJlbnRSZWZlcmVuY2UgPSBnZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGFyZW50UmVmZXJlbmNlICE9PSBPYmplY3RQcm90b3R5cGUgJiZcbiAgICAgICAgICAgIChudWxsID09PSBwYXJlbnRSZWZlcmVuY2UgfHxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gZ2V0UHJvdG90eXBlT2YocGFyZW50UmVmZXJlbmNlKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICh2b2lkIDAgPT09IHRlbXBvcmFyeVJlZmVyZW5jZXMpXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiT25seSBwbGFpbiBvYmplY3RzLCBhbmQgYSBmZXcgYnVpbHQtaW5zLCBjYW4gYmUgcGFzc2VkIHRvIFNlcnZlciBGdW5jdGlvbnMuIENsYXNzZXMgb3IgbnVsbCBwcm90b3R5cGVzIGFyZSBub3Qgc3VwcG9ydGVkLlwiICtcbiAgICAgICAgICAgICAgICAgIGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKHRoaXMsIGtleSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBcIiRUXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEVcbiAgICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlJlYWN0IENvbnRleHQgUHJvdmlkZXJzIGNhbm5vdCBiZSBwYXNzZWQgdG8gU2VydmVyIEZ1bmN0aW9ucyBmcm9tIHRoZSBDbGllbnQuJXNcIixcbiAgICAgICAgICAgICAgICBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZSh0aGlzLCBrZXkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogXCJPYmplY3RcIiAhPT0gb2JqZWN0TmFtZSh2YWx1ZSlcbiAgICAgICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJPbmx5IHBsYWluIG9iamVjdHMgY2FuIGJlIHBhc3NlZCB0byBTZXJ2ZXIgRnVuY3Rpb25zIGZyb20gdGhlIENsaWVudC4gJXMgb2JqZWN0cyBhcmUgbm90IHN1cHBvcnRlZC4lc1wiLFxuICAgICAgICAgICAgICAgICAgb2JqZWN0TmFtZSh2YWx1ZSksXG4gICAgICAgICAgICAgICAgICBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZSh0aGlzLCBrZXkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IGlzU2ltcGxlT2JqZWN0KHZhbHVlKVxuICAgICAgICAgICAgICAgID8gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJlxuICAgICAgICAgICAgICAgICAgKChwYXJlbnRSZWZlcmVuY2UgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHZhbHVlKSksXG4gICAgICAgICAgICAgICAgICAwIDwgcGFyZW50UmVmZXJlbmNlLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgIFwiT25seSBwbGFpbiBvYmplY3RzIGNhbiBiZSBwYXNzZWQgdG8gU2VydmVyIEZ1bmN0aW9ucyBmcm9tIHRoZSBDbGllbnQuIE9iamVjdHMgd2l0aCBzeW1ib2wgcHJvcGVydGllcyBsaWtlICVzIGFyZSBub3Qgc3VwcG9ydGVkLiVzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcGFyZW50UmVmZXJlbmNlWzBdLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlT2JqZWN0Rm9yRXJyb3JNZXNzYWdlKHRoaXMsIGtleSlcbiAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICA6IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIFwiT25seSBwbGFpbiBvYmplY3RzIGNhbiBiZSBwYXNzZWQgdG8gU2VydmVyIEZ1bmN0aW9ucyBmcm9tIHRoZSBDbGllbnQuIENsYXNzZXMgb3Igb3RoZXIgb2JqZWN0cyB3aXRoIG1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQuJXNcIixcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpYmVPYmplY3RGb3JFcnJvck1lc3NhZ2UodGhpcywga2V5KVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgIGlmIChcIlpcIiA9PT0gdmFsdWVbdmFsdWUubGVuZ3RoIC0gMV0gJiYgdGhpc1trZXldIGluc3RhbmNlb2YgRGF0ZSlcbiAgICAgICAgICAgIHJldHVybiBcIiREXCIgKyB2YWx1ZTtcbiAgICAgICAgICBrZXkgPSBcIiRcIiA9PT0gdmFsdWVbMF0gPyBcIiRcIiArIHZhbHVlIDogdmFsdWU7XG4gICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJib29sZWFuXCIgPT09IHR5cGVvZiB2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICBpZiAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHZhbHVlKSByZXR1cm4gc2VyaWFsaXplTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgaWYgKFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiB2YWx1ZSkgcmV0dXJuIFwiJHVuZGVmaW5lZFwiO1xuICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBwYXJlbnRSZWZlcmVuY2UgPSBrbm93blNlcnZlclJlZmVyZW5jZXMuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpZiAodm9pZCAwICE9PSBwYXJlbnRSZWZlcmVuY2UpXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoa2V5ID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgeyBpZDogcGFyZW50UmVmZXJlbmNlLmlkLCBib3VuZDogcGFyZW50UmVmZXJlbmNlLmJvdW5kIH0sXG4gICAgICAgICAgICAgICAgcmVzb2x2ZVRvSlNPTlxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gZm9ybURhdGEgJiYgKGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCkpLFxuICAgICAgICAgICAgICAocGFyZW50UmVmZXJlbmNlID0gbmV4dFBhcnRJZCsrKSxcbiAgICAgICAgICAgICAgZm9ybURhdGEuc2V0KGZvcm1GaWVsZFByZWZpeCArIHBhcmVudFJlZmVyZW5jZSwga2V5KSxcbiAgICAgICAgICAgICAgXCIkRlwiICsgcGFyZW50UmVmZXJlbmNlLnRvU3RyaW5nKDE2KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB2b2lkIDAgIT09IHRlbXBvcmFyeVJlZmVyZW5jZXMgJiZcbiAgICAgICAgICAgIC0xID09PSBrZXkuaW5kZXhPZihcIjpcIikgJiZcbiAgICAgICAgICAgICgocGFyZW50UmVmZXJlbmNlID0gd3JpdHRlbk9iamVjdHMuZ2V0KHRoaXMpKSxcbiAgICAgICAgICAgIHZvaWQgMCAhPT0gcGFyZW50UmVmZXJlbmNlKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIHRlbXBvcmFyeVJlZmVyZW5jZXMuc2V0KHBhcmVudFJlZmVyZW5jZSArIFwiOlwiICsga2V5LCB2YWx1ZSksIFwiJFRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiQ2xpZW50IEZ1bmN0aW9ucyBjYW5ub3QgYmUgcGFzc2VkIGRpcmVjdGx5IHRvIFNlcnZlciBGdW5jdGlvbnMuIE9ubHkgRnVuY3Rpb25zIHBhc3NlZCBmcm9tIHRoZSBTZXJ2ZXIgY2FuIGJlIHBhc3NlZCBiYWNrIGFnYWluLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJzeW1ib2xcIiA9PT0gdHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdm9pZCAwICE9PSB0ZW1wb3JhcnlSZWZlcmVuY2VzICYmXG4gICAgICAgICAgICAtMSA9PT0ga2V5LmluZGV4T2YoXCI6XCIpICYmXG4gICAgICAgICAgICAoKHBhcmVudFJlZmVyZW5jZSA9IHdyaXR0ZW5PYmplY3RzLmdldCh0aGlzKSksXG4gICAgICAgICAgICB2b2lkIDAgIT09IHBhcmVudFJlZmVyZW5jZSlcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICB0ZW1wb3JhcnlSZWZlcmVuY2VzLnNldChwYXJlbnRSZWZlcmVuY2UgKyBcIjpcIiArIGtleSwgdmFsdWUpLCBcIiRUXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIlN5bWJvbHMgY2Fubm90IGJlIHBhc3NlZCB0byBhIFNlcnZlciBGdW5jdGlvbiB3aXRob3V0IGEgdGVtcG9yYXJ5IHJlZmVyZW5jZSBzZXQuIFBhc3MgYSBUZW1wb3JhcnlSZWZlcmVuY2VTZXQgdG8gdGhlIG9wdGlvbnMuXCIgK1xuICAgICAgICAgICAgICBkZXNjcmliZU9iamVjdEZvckVycm9yTWVzc2FnZSh0aGlzLCBrZXkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJiaWdpbnRcIiA9PT0gdHlwZW9mIHZhbHVlKSByZXR1cm4gXCIkblwiICsgdmFsdWUudG9TdHJpbmcoMTApO1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIlR5cGUgXCIgK1xuICAgICAgICAgICAgdHlwZW9mIHZhbHVlICtcbiAgICAgICAgICAgIFwiIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYW4gYXJndW1lbnQgdG8gYSBTZXJ2ZXIgRnVuY3Rpb24uXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZU1vZGVsKG1vZGVsLCBpZCkge1xuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgbW9kZWwgJiZcbiAgICAgICAgICBudWxsICE9PSBtb2RlbCAmJlxuICAgICAgICAgICgoaWQgPSBcIiRcIiArIGlkLnRvU3RyaW5nKDE2KSksXG4gICAgICAgICAgd3JpdHRlbk9iamVjdHMuc2V0KG1vZGVsLCBpZCksXG4gICAgICAgICAgdm9pZCAwICE9PSB0ZW1wb3JhcnlSZWZlcmVuY2VzICYmIHRlbXBvcmFyeVJlZmVyZW5jZXMuc2V0KGlkLCBtb2RlbCkpO1xuICAgICAgICBtb2RlbFJvb3QgPSBtb2RlbDtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG1vZGVsLCByZXNvbHZlVG9KU09OKTtcbiAgICAgIH1cbiAgICAgIHZhciBuZXh0UGFydElkID0gMSxcbiAgICAgICAgcGVuZGluZ1BhcnRzID0gMCxcbiAgICAgICAgZm9ybURhdGEgPSBudWxsLFxuICAgICAgICB3cml0dGVuT2JqZWN0cyA9IG5ldyBXZWFrTWFwKCksXG4gICAgICAgIG1vZGVsUm9vdCA9IHJvb3QsXG4gICAgICAgIGpzb24gPSBzZXJpYWxpemVNb2RlbChyb290LCAwKTtcbiAgICAgIG51bGwgPT09IGZvcm1EYXRhXG4gICAgICAgID8gcmVzb2x2ZShqc29uKVxuICAgICAgICA6IChmb3JtRGF0YS5zZXQoZm9ybUZpZWxkUHJlZml4ICsgXCIwXCIsIGpzb24pLFxuICAgICAgICAgIDAgPT09IHBlbmRpbmdQYXJ0cyAmJiByZXNvbHZlKGZvcm1EYXRhKSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAwIDwgcGVuZGluZ1BhcnRzICYmXG4gICAgICAgICAgKChwZW5kaW5nUGFydHMgPSAwKSxcbiAgICAgICAgICBudWxsID09PSBmb3JtRGF0YSA/IHJlc29sdmUoanNvbikgOiByZXNvbHZlKGZvcm1EYXRhKSk7XG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGYWtlU2VydmVyRnVuY3Rpb24oXG4gICAgICBuYW1lLFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBzb3VyY2VNYXAsXG4gICAgICBsaW5lLFxuICAgICAgY29sLFxuICAgICAgZW52aXJvbm1lbnROYW1lLFxuICAgICAgaW5uZXJGdW5jdGlvblxuICAgICkge1xuICAgICAgbmFtZSB8fCAobmFtZSA9IFwiPGFub255bW91cz5cIik7XG4gICAgICB2YXIgZW5jb2RlZE5hbWUgPSBKU09OLnN0cmluZ2lmeShuYW1lKTtcbiAgICAgIDEgPj0gbGluZVxuICAgICAgICA/ICgobGluZSA9IGVuY29kZWROYW1lLmxlbmd0aCArIDcpLFxuICAgICAgICAgIChjb2wgPVxuICAgICAgICAgICAgXCJzPT4oe1wiICtcbiAgICAgICAgICAgIGVuY29kZWROYW1lICtcbiAgICAgICAgICAgIFwiIFwiLnJlcGVhdChjb2wgPCBsaW5lID8gMCA6IGNvbCAtIGxpbmUpICtcbiAgICAgICAgICAgIFwiOiguLi5hcmdzKSA9PiBzKC4uLmFyZ3MpfSlcXG4vKiBUaGlzIG1vZHVsZSBpcyBhIHByb3h5IHRvIGEgU2VydmVyIEFjdGlvbi4gVHVybiBvbiBTb3VyY2UgTWFwcyB0byBzZWUgdGhlIHNlcnZlciBzb3VyY2UuICovXCIpKVxuICAgICAgICA6IChjb2wgPVxuICAgICAgICAgICAgXCIvKiBUaGlzIG1vZHVsZSBpcyBhIHByb3h5IHRvIGEgU2VydmVyIEFjdGlvbi4gVHVybiBvbiBTb3VyY2UgTWFwcyB0byBzZWUgdGhlIHNlcnZlciBzb3VyY2UuICovXCIgK1xuICAgICAgICAgICAgXCJcXG5cIi5yZXBlYXQobGluZSAtIDIpICtcbiAgICAgICAgICAgIFwic2VydmVyPT4oe1wiICtcbiAgICAgICAgICAgIGVuY29kZWROYW1lICtcbiAgICAgICAgICAgIFwiOlxcblwiICtcbiAgICAgICAgICAgIFwiIFwiLnJlcGVhdCgxID4gY29sID8gMCA6IGNvbCAtIDEpICtcbiAgICAgICAgICAgIFwiKC4uLmFyZ3MpID0+IHNlcnZlciguLi5hcmdzKX0pXCIpO1xuICAgICAgZmlsZW5hbWUuc3RhcnRzV2l0aChcIi9cIikgJiYgKGZpbGVuYW1lID0gXCJmaWxlOi8vXCIgKyBmaWxlbmFtZSk7XG4gICAgICBzb3VyY2VNYXBcbiAgICAgICAgPyAoKGNvbCArPVxuICAgICAgICAgICAgXCJcXG4vLyMgc291cmNlVVJMPXJzYzovL1JlYWN0L1wiICtcbiAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChlbnZpcm9ubWVudE5hbWUpICtcbiAgICAgICAgICAgIFwiL1wiICtcbiAgICAgICAgICAgIGVuY29kZVVSSShmaWxlbmFtZSkgK1xuICAgICAgICAgICAgXCI/c1wiICtcbiAgICAgICAgICAgIGZha2VTZXJ2ZXJGdW5jdGlvbklkeCsrKSxcbiAgICAgICAgICAoY29sICs9IFwiXFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9XCIgKyBzb3VyY2VNYXApKVxuICAgICAgICA6IGZpbGVuYW1lICYmIChjb2wgKz0gXCJcXG4vLyMgc291cmNlVVJMPVwiICsgZmlsZW5hbWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuICgwLCBldmFsKShjb2wpKGlubmVyRnVuY3Rpb24pW25hbWVdO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICByZXR1cm4gaW5uZXJGdW5jdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVnaXN0ZXJCb3VuZFNlcnZlclJlZmVyZW5jZShyZWZlcmVuY2UsIGlkLCBib3VuZCkge1xuICAgICAga25vd25TZXJ2ZXJSZWZlcmVuY2VzLmhhcyhyZWZlcmVuY2UpIHx8XG4gICAgICAgIGtub3duU2VydmVyUmVmZXJlbmNlcy5zZXQocmVmZXJlbmNlLCB7XG4gICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgIG9yaWdpbmFsQmluZDogcmVmZXJlbmNlLmJpbmQsXG4gICAgICAgICAgYm91bmQ6IGJvdW5kXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVCb3VuZFNlcnZlclJlZmVyZW5jZShcbiAgICAgIG1ldGFEYXRhLFxuICAgICAgY2FsbFNlcnZlcixcbiAgICAgIGVuY29kZUZvcm1BY3Rpb24sXG4gICAgICBmaW5kU291cmNlTWFwVVJMXG4gICAgKSB7XG4gICAgICBmdW5jdGlvbiBhY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIGJvdW5kXG4gICAgICAgICAgPyBcImZ1bGZpbGxlZFwiID09PSBib3VuZC5zdGF0dXNcbiAgICAgICAgICAgID8gY2FsbFNlcnZlcihpZCwgYm91bmQudmFsdWUuY29uY2F0KGFyZ3MpKVxuICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoYm91bmQpLnRoZW4oZnVuY3Rpb24gKGJvdW5kQXJncykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsU2VydmVyKGlkLCBib3VuZEFyZ3MuY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IGNhbGxTZXJ2ZXIoaWQsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgdmFyIGlkID0gbWV0YURhdGEuaWQsXG4gICAgICAgIGJvdW5kID0gbWV0YURhdGEuYm91bmQsXG4gICAgICAgIGxvY2F0aW9uID0gbWV0YURhdGEubG9jYXRpb247XG4gICAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgICAgZW5jb2RlRm9ybUFjdGlvbiA9IG1ldGFEYXRhLm5hbWUgfHwgXCJcIjtcbiAgICAgICAgdmFyIGZpbGVuYW1lID0gbG9jYXRpb25bMV0sXG4gICAgICAgICAgbGluZSA9IGxvY2F0aW9uWzJdO1xuICAgICAgICBsb2NhdGlvbiA9IGxvY2F0aW9uWzNdO1xuICAgICAgICBtZXRhRGF0YSA9IG1ldGFEYXRhLmVudiB8fCBcIlNlcnZlclwiO1xuICAgICAgICBmaW5kU291cmNlTWFwVVJMID1cbiAgICAgICAgICBudWxsID09IGZpbmRTb3VyY2VNYXBVUkxcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBmaW5kU291cmNlTWFwVVJMKGZpbGVuYW1lLCBtZXRhRGF0YSk7XG4gICAgICAgIGFjdGlvbiA9IGNyZWF0ZUZha2VTZXJ2ZXJGdW5jdGlvbihcbiAgICAgICAgICBlbmNvZGVGb3JtQWN0aW9uLFxuICAgICAgICAgIGZpbGVuYW1lLFxuICAgICAgICAgIGZpbmRTb3VyY2VNYXBVUkwsXG4gICAgICAgICAgbGluZSxcbiAgICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgICBtZXRhRGF0YSxcbiAgICAgICAgICBhY3Rpb25cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJlZ2lzdGVyQm91bmRTZXJ2ZXJSZWZlcmVuY2UoYWN0aW9uLCBpZCwgYm91bmQpO1xuICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VTdGFja0xvY2F0aW9uKGVycm9yKSB7XG4gICAgICBlcnJvciA9IGVycm9yLnN0YWNrO1xuICAgICAgZXJyb3Iuc3RhcnRzV2l0aChcIkVycm9yOiByZWFjdC1zdGFjay10b3AtZnJhbWVcXG5cIikgJiZcbiAgICAgICAgKGVycm9yID0gZXJyb3Iuc2xpY2UoMjkpKTtcbiAgICAgIHZhciBlbmRPZkZpcnN0ID0gZXJyb3IuaW5kZXhPZihcIlxcblwiKTtcbiAgICAgIGlmICgtMSAhPT0gZW5kT2ZGaXJzdCkge1xuICAgICAgICB2YXIgZW5kT2ZTZWNvbmQgPSBlcnJvci5pbmRleE9mKFwiXFxuXCIsIGVuZE9mRmlyc3QgKyAxKTtcbiAgICAgICAgZW5kT2ZGaXJzdCA9XG4gICAgICAgICAgLTEgPT09IGVuZE9mU2Vjb25kXG4gICAgICAgICAgICA/IGVycm9yLnNsaWNlKGVuZE9mRmlyc3QgKyAxKVxuICAgICAgICAgICAgOiBlcnJvci5zbGljZShlbmRPZkZpcnN0ICsgMSwgZW5kT2ZTZWNvbmQpO1xuICAgICAgfSBlbHNlIGVuZE9mRmlyc3QgPSBlcnJvcjtcbiAgICAgIGVycm9yID0gdjhGcmFtZVJlZ0V4cC5leGVjKGVuZE9mRmlyc3QpO1xuICAgICAgaWYgKFxuICAgICAgICAhZXJyb3IgJiZcbiAgICAgICAgKChlcnJvciA9IGpzY1NwaWRlck1vbmtleUZyYW1lUmVnRXhwLmV4ZWMoZW5kT2ZGaXJzdCkpLCAhZXJyb3IpXG4gICAgICApXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgZW5kT2ZGaXJzdCA9IGVycm9yWzFdIHx8IFwiXCI7XG4gICAgICBcIjxhbm9ueW1vdXM+XCIgPT09IGVuZE9mRmlyc3QgJiYgKGVuZE9mRmlyc3QgPSBcIlwiKTtcbiAgICAgIGVuZE9mU2Vjb25kID0gZXJyb3JbMl0gfHwgZXJyb3JbNV0gfHwgXCJcIjtcbiAgICAgIFwiPGFub255bW91cz5cIiA9PT0gZW5kT2ZTZWNvbmQgJiYgKGVuZE9mU2Vjb25kID0gXCJcIik7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBlbmRPZkZpcnN0LFxuICAgICAgICBlbmRPZlNlY29uZCxcbiAgICAgICAgKyhlcnJvclszXSB8fCBlcnJvcls2XSksXG4gICAgICAgICsoZXJyb3JbNF0gfHwgZXJyb3JbN10pXG4gICAgICBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkge1xuICAgICAgaWYgKG51bGwgPT0gdHlwZSkgcmV0dXJuIG51bGw7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgcmV0dXJuIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0VcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIHJldHVybiB0eXBlO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJGcmFnbWVudFwiO1xuICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN0cmljdE1vZGVcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICAgICAgICBjYXNlIFJFQUNUX0FDVElWSVRZX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiQWN0aXZpdHlcIjtcbiAgICAgIH1cbiAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHR5cGUudGFnICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSgpLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgdHlwZS4kJHR5cGVvZilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBcIlBvcnRhbFwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCI7XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuICh0eXBlLl9jb250ZXh0LmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiKSArIFwiLkNvbnN1bWVyXCI7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgdmFyIGlubmVyVHlwZSA9IHR5cGUucmVuZGVyO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICB0eXBlIHx8XG4gICAgICAgICAgICAgICgodHlwZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCBcIlwiKSxcbiAgICAgICAgICAgICAgKHR5cGUgPSBcIlwiICE9PSB0eXBlID8gXCJGb3J3YXJkUmVmKFwiICsgdHlwZSArIFwiKVwiIDogXCJGb3J3YXJkUmVmXCIpKTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGlubmVyVHlwZSA9IHR5cGUuZGlzcGxheU5hbWUgfHwgbnVsbCksXG4gICAgICAgICAgICAgIG51bGwgIT09IGlubmVyVHlwZVxuICAgICAgICAgICAgICAgID8gaW5uZXJUeXBlXG4gICAgICAgICAgICAgICAgOiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCBcIk1lbW9cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgIGlubmVyVHlwZSA9IHR5cGUuX3BheWxvYWQ7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5faW5pdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZShpbm5lclR5cGUpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBSZWFjdFByb21pc2Uoc3RhdHVzLCB2YWx1ZSwgcmVhc29uKSB7XG4gICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMucmVhc29uID0gcmVhc29uO1xuICAgICAgdGhpcy5fZGVidWdJbmZvID0gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdW53cmFwV2Vha1Jlc3BvbnNlKHdlYWtSZXNwb25zZSkge1xuICAgICAgd2Vha1Jlc3BvbnNlID0gd2Vha1Jlc3BvbnNlLndlYWsuZGVyZWYoKTtcbiAgICAgIGlmICh2b2lkIDAgPT09IHdlYWtSZXNwb25zZSlcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJXZSBkaWQgbm90IGV4cGVjdCB0byByZWNlaXZlIG5ldyBkYXRhIGFmdGVyIEdDOmluZyB0aGUgcmVzcG9uc2UuXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiB3ZWFrUmVzcG9uc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsZWFudXBEZWJ1Z0NoYW5uZWwoZGVidWdDaGFubmVsKSB7XG4gICAgICBkZWJ1Z0NoYW5uZWwoXCJcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRDaHVuayhjaHVuaykge1xuICAgICAgc3dpdGNoIChjaHVuay5zdGF0dXMpIHtcbiAgICAgICAgY2FzZSBcInJlc29sdmVkX21vZGVsXCI6XG4gICAgICAgICAgaW5pdGlhbGl6ZU1vZGVsQ2h1bmsoY2h1bmspO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmVzb2x2ZWRfbW9kdWxlXCI6XG4gICAgICAgICAgaW5pdGlhbGl6ZU1vZHVsZUNodW5rKGNodW5rKTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoY2h1bmsuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgICAgICByZXR1cm4gY2h1bmsudmFsdWU7XG4gICAgICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICAgIGNhc2UgXCJibG9ja2VkXCI6XG4gICAgICAgIGNhc2UgXCJoYWx0ZWRcIjpcbiAgICAgICAgICB0aHJvdyBjaHVuaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBjaHVuay5yZWFzb247XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFJvb3Qod2Vha1Jlc3BvbnNlKSB7XG4gICAgICB3ZWFrUmVzcG9uc2UgPSB1bndyYXBXZWFrUmVzcG9uc2Uod2Vha1Jlc3BvbnNlKTtcbiAgICAgIHJldHVybiBnZXRDaHVuayh3ZWFrUmVzcG9uc2UsIDApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVQZW5kaW5nQ2h1bmsocmVzcG9uc2UpIHtcbiAgICAgIDAgPT09IHJlc3BvbnNlLl9wZW5kaW5nQ2h1bmtzKysgJiZcbiAgICAgICAgKChyZXNwb25zZS5fd2Vha1Jlc3BvbnNlLnJlc3BvbnNlID0gcmVzcG9uc2UpLFxuICAgICAgICBudWxsICE9PSByZXNwb25zZS5fcGVuZGluZ0luaXRpYWxSZW5kZXIgJiZcbiAgICAgICAgICAoY2xlYXJUaW1lb3V0KHJlc3BvbnNlLl9wZW5kaW5nSW5pdGlhbFJlbmRlciksXG4gICAgICAgICAgKHJlc3BvbnNlLl9wZW5kaW5nSW5pdGlhbFJlbmRlciA9IG51bGwpKSk7XG4gICAgICByZXR1cm4gbmV3IFJlYWN0UHJvbWlzZShcInBlbmRpbmdcIiwgbnVsbCwgbnVsbCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGVhc2VQZW5kaW5nQ2h1bmsocmVzcG9uc2UsIGNodW5rKSB7XG4gICAgICBcInBlbmRpbmdcIiA9PT0gY2h1bmsuc3RhdHVzICYmXG4gICAgICAgIDAgPT09IC0tcmVzcG9uc2UuX3BlbmRpbmdDaHVua3MgJiZcbiAgICAgICAgKChyZXNwb25zZS5fd2Vha1Jlc3BvbnNlLnJlc3BvbnNlID0gbnVsbCksXG4gICAgICAgIChyZXNwb25zZS5fcGVuZGluZ0luaXRpYWxSZW5kZXIgPSBzZXRUaW1lb3V0KFxuICAgICAgICAgIGZsdXNoSW5pdGlhbFJlbmRlclBlcmZvcm1hbmNlLmJpbmQobnVsbCwgcmVzcG9uc2UpLFxuICAgICAgICAgIDEwMFxuICAgICAgICApKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdha2VDaHVuayhsaXN0ZW5lcnMsIHZhbHVlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGxpc3RlbmVyXG4gICAgICAgICAgPyBsaXN0ZW5lcih2YWx1ZSlcbiAgICAgICAgICA6IGZ1bGZpbGxSZWZlcmVuY2UobGlzdGVuZXIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVqZWN0Q2h1bmsobGlzdGVuZXJzLCBlcnJvcikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gbGlzdGVuZXJzW2ldO1xuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBsaXN0ZW5lclxuICAgICAgICAgID8gbGlzdGVuZXIoZXJyb3IpXG4gICAgICAgICAgOiByZWplY3RSZWZlcmVuY2UobGlzdGVuZXIsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUJsb2NrZWRDeWNsZShyZXNvbHZlZENodW5rLCByZWZlcmVuY2UpIHtcbiAgICAgIHZhciByZWZlcmVuY2VkQ2h1bmsgPSByZWZlcmVuY2UuaGFuZGxlci5jaHVuaztcbiAgICAgIGlmIChudWxsID09PSByZWZlcmVuY2VkQ2h1bmspIHJldHVybiBudWxsO1xuICAgICAgaWYgKHJlZmVyZW5jZWRDaHVuayA9PT0gcmVzb2x2ZWRDaHVuaykgcmV0dXJuIHJlZmVyZW5jZS5oYW5kbGVyO1xuICAgICAgcmVmZXJlbmNlID0gcmVmZXJlbmNlZENodW5rLnZhbHVlO1xuICAgICAgaWYgKG51bGwgIT09IHJlZmVyZW5jZSlcbiAgICAgICAgZm9yIChcbiAgICAgICAgICByZWZlcmVuY2VkQ2h1bmsgPSAwO1xuICAgICAgICAgIHJlZmVyZW5jZWRDaHVuayA8IHJlZmVyZW5jZS5sZW5ndGg7XG4gICAgICAgICAgcmVmZXJlbmNlZENodW5rKytcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFyIGxpc3RlbmVyID0gcmVmZXJlbmNlW3JlZmVyZW5jZWRDaHVua107XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgbGlzdGVuZXIgJiZcbiAgICAgICAgICAgICgobGlzdGVuZXIgPSByZXNvbHZlQmxvY2tlZEN5Y2xlKHJlc29sdmVkQ2h1bmssIGxpc3RlbmVyKSksXG4gICAgICAgICAgICBudWxsICE9PSBsaXN0ZW5lcilcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gbGlzdGVuZXI7XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YWtlQ2h1bmtJZkluaXRpYWxpemVkKGNodW5rLCByZXNvbHZlTGlzdGVuZXJzLCByZWplY3RMaXN0ZW5lcnMpIHtcbiAgICAgIHN3aXRjaCAoY2h1bmsuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgICAgICB3YWtlQ2h1bmsocmVzb2x2ZUxpc3RlbmVycywgY2h1bmsudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiYmxvY2tlZFwiOlxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzb2x2ZUxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGxpc3RlbmVyID0gcmVzb2x2ZUxpc3RlbmVyc1tpXTtcbiAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBsaXN0ZW5lcikge1xuICAgICAgICAgICAgICB2YXIgY3ljbGljSGFuZGxlciA9IHJlc29sdmVCbG9ja2VkQ3ljbGUoY2h1bmssIGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgbnVsbCAhPT0gY3ljbGljSGFuZGxlciAmJlxuICAgICAgICAgICAgICAgIChmdWxmaWxsUmVmZXJlbmNlKGxpc3RlbmVyLCBjeWNsaWNIYW5kbGVyLnZhbHVlKSxcbiAgICAgICAgICAgICAgICByZXNvbHZlTGlzdGVuZXJzLnNwbGljZShpLCAxKSxcbiAgICAgICAgICAgICAgICBpLS0sXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gcmVqZWN0TGlzdGVuZXJzICYmXG4gICAgICAgICAgICAgICAgICAoKGxpc3RlbmVyID0gcmVqZWN0TGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpKSxcbiAgICAgICAgICAgICAgICAgIC0xICE9PSBsaXN0ZW5lciAmJiByZWplY3RMaXN0ZW5lcnMuc3BsaWNlKGxpc3RlbmVyLCAxKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBcInBlbmRpbmdcIjpcbiAgICAgICAgICBpZiAoY2h1bmsudmFsdWUpXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVzb2x2ZUxpc3RlbmVycy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgY2h1bmsudmFsdWUucHVzaChyZXNvbHZlTGlzdGVuZXJzW2ldKTtcbiAgICAgICAgICBlbHNlIGNodW5rLnZhbHVlID0gcmVzb2x2ZUxpc3RlbmVycztcbiAgICAgICAgICBpZiAoY2h1bmsucmVhc29uKSB7XG4gICAgICAgICAgICBpZiAocmVqZWN0TGlzdGVuZXJzKVxuICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgIHJlc29sdmVMaXN0ZW5lcnMgPSAwO1xuICAgICAgICAgICAgICAgIHJlc29sdmVMaXN0ZW5lcnMgPCByZWplY3RMaXN0ZW5lcnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHJlc29sdmVMaXN0ZW5lcnMrK1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgY2h1bmsucmVhc29uLnB1c2gocmVqZWN0TGlzdGVuZXJzW3Jlc29sdmVMaXN0ZW5lcnNdKTtcbiAgICAgICAgICB9IGVsc2UgY2h1bmsucmVhc29uID0gcmVqZWN0TGlzdGVuZXJzO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICAgICAgICByZWplY3RMaXN0ZW5lcnMgJiYgcmVqZWN0Q2h1bmsocmVqZWN0TGlzdGVuZXJzLCBjaHVuay5yZWFzb24pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB0cmlnZ2VyRXJyb3JPbkNodW5rKHJlc3BvbnNlLCBjaHVuaywgZXJyb3IpIHtcbiAgICAgIFwicGVuZGluZ1wiICE9PSBjaHVuay5zdGF0dXMgJiYgXCJibG9ja2VkXCIgIT09IGNodW5rLnN0YXR1c1xuICAgICAgICA/IGNodW5rLnJlYXNvbi5lcnJvcihlcnJvcilcbiAgICAgICAgOiAocmVsZWFzZVBlbmRpbmdDaHVuayhyZXNwb25zZSwgY2h1bmspLFxuICAgICAgICAgIChyZXNwb25zZSA9IGNodW5rLnJlYXNvbiksXG4gICAgICAgICAgKGNodW5rLnN0YXR1cyA9IFwicmVqZWN0ZWRcIiksXG4gICAgICAgICAgKGNodW5rLnJlYXNvbiA9IGVycm9yKSxcbiAgICAgICAgICBudWxsICE9PSByZXNwb25zZSAmJiByZWplY3RDaHVuayhyZXNwb25zZSwgZXJyb3IpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUmVzb2x2ZWRJdGVyYXRvclJlc3VsdENodW5rKHJlc3BvbnNlLCB2YWx1ZSwgZG9uZSkge1xuICAgICAgcmV0dXJuIG5ldyBSZWFjdFByb21pc2UoXG4gICAgICAgIFwicmVzb2x2ZWRfbW9kZWxcIixcbiAgICAgICAgKGRvbmUgPyAne1wiZG9uZVwiOnRydWUsXCJ2YWx1ZVwiOicgOiAne1wiZG9uZVwiOmZhbHNlLFwidmFsdWVcIjonKSArXG4gICAgICAgICAgdmFsdWUgK1xuICAgICAgICAgIFwifVwiLFxuICAgICAgICByZXNwb25zZVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUl0ZXJhdG9yUmVzdWx0Q2h1bmsocmVzcG9uc2UsIGNodW5rLCB2YWx1ZSwgZG9uZSkge1xuICAgICAgcmVzb2x2ZU1vZGVsQ2h1bmsoXG4gICAgICAgIHJlc3BvbnNlLFxuICAgICAgICBjaHVuayxcbiAgICAgICAgKGRvbmUgPyAne1wiZG9uZVwiOnRydWUsXCJ2YWx1ZVwiOicgOiAne1wiZG9uZVwiOmZhbHNlLFwidmFsdWVcIjonKSArXG4gICAgICAgICAgdmFsdWUgK1xuICAgICAgICAgIFwifVwiXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlTW9kZWxDaHVuayhyZXNwb25zZSwgY2h1bmssIHZhbHVlKSB7XG4gICAgICBpZiAoXCJwZW5kaW5nXCIgIT09IGNodW5rLnN0YXR1cykgY2h1bmsucmVhc29uLmVucXVldWVNb2RlbCh2YWx1ZSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmVsZWFzZVBlbmRpbmdDaHVuayhyZXNwb25zZSwgY2h1bmspO1xuICAgICAgICB2YXIgcmVzb2x2ZUxpc3RlbmVycyA9IGNodW5rLnZhbHVlLFxuICAgICAgICAgIHJlamVjdExpc3RlbmVycyA9IGNodW5rLnJlYXNvbjtcbiAgICAgICAgY2h1bmsuc3RhdHVzID0gXCJyZXNvbHZlZF9tb2RlbFwiO1xuICAgICAgICBjaHVuay52YWx1ZSA9IHZhbHVlO1xuICAgICAgICBjaHVuay5yZWFzb24gPSByZXNwb25zZTtcbiAgICAgICAgbnVsbCAhPT0gcmVzb2x2ZUxpc3RlbmVycyAmJlxuICAgICAgICAgIChpbml0aWFsaXplTW9kZWxDaHVuayhjaHVuayksXG4gICAgICAgICAgd2FrZUNodW5rSWZJbml0aWFsaXplZChjaHVuaywgcmVzb2x2ZUxpc3RlbmVycywgcmVqZWN0TGlzdGVuZXJzKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVNb2R1bGVDaHVuayhyZXNwb25zZSwgY2h1bmssIHZhbHVlKSB7XG4gICAgICBpZiAoXCJwZW5kaW5nXCIgPT09IGNodW5rLnN0YXR1cyB8fCBcImJsb2NrZWRcIiA9PT0gY2h1bmsuc3RhdHVzKSB7XG4gICAgICAgIHJlbGVhc2VQZW5kaW5nQ2h1bmsocmVzcG9uc2UsIGNodW5rKTtcbiAgICAgICAgcmVzcG9uc2UgPSBjaHVuay52YWx1ZTtcbiAgICAgICAgdmFyIHJlamVjdExpc3RlbmVycyA9IGNodW5rLnJlYXNvbjtcbiAgICAgICAgY2h1bmsuc3RhdHVzID0gXCJyZXNvbHZlZF9tb2R1bGVcIjtcbiAgICAgICAgY2h1bmsudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgbnVsbCAhPT0gcmVzcG9uc2UgJiZcbiAgICAgICAgICAoaW5pdGlhbGl6ZU1vZHVsZUNodW5rKGNodW5rKSxcbiAgICAgICAgICB3YWtlQ2h1bmtJZkluaXRpYWxpemVkKGNodW5rLCByZXNwb25zZSwgcmVqZWN0TGlzdGVuZXJzKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVNb2RlbENodW5rKGNodW5rKSB7XG4gICAgICB2YXIgcHJldkhhbmRsZXIgPSBpbml0aWFsaXppbmdIYW5kbGVyO1xuICAgICAgaW5pdGlhbGl6aW5nSGFuZGxlciA9IG51bGw7XG4gICAgICB2YXIgcmVzb2x2ZWRNb2RlbCA9IGNodW5rLnZhbHVlLFxuICAgICAgICByZXNwb25zZSA9IGNodW5rLnJlYXNvbjtcbiAgICAgIGNodW5rLnN0YXR1cyA9IFwiYmxvY2tlZFwiO1xuICAgICAgY2h1bmsudmFsdWUgPSBudWxsO1xuICAgICAgY2h1bmsucmVhc29uID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IEpTT04ucGFyc2UocmVzb2x2ZWRNb2RlbCwgcmVzcG9uc2UuX2Zyb21KU09OKSxcbiAgICAgICAgICByZXNvbHZlTGlzdGVuZXJzID0gY2h1bmsudmFsdWU7XG4gICAgICAgIG51bGwgIT09IHJlc29sdmVMaXN0ZW5lcnMgJiZcbiAgICAgICAgICAoKGNodW5rLnZhbHVlID0gbnVsbCksXG4gICAgICAgICAgKGNodW5rLnJlYXNvbiA9IG51bGwpLFxuICAgICAgICAgIHdha2VDaHVuayhyZXNvbHZlTGlzdGVuZXJzLCB2YWx1ZSkpO1xuICAgICAgICBpZiAobnVsbCAhPT0gaW5pdGlhbGl6aW5nSGFuZGxlcikge1xuICAgICAgICAgIGlmIChpbml0aWFsaXppbmdIYW5kbGVyLmVycm9yZWQpIHRocm93IGluaXRpYWxpemluZ0hhbmRsZXIudmFsdWU7XG4gICAgICAgICAgaWYgKDAgPCBpbml0aWFsaXppbmdIYW5kbGVyLmRlcHMpIHtcbiAgICAgICAgICAgIGluaXRpYWxpemluZ0hhbmRsZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIGluaXRpYWxpemluZ0hhbmRsZXIuY2h1bmsgPSBjaHVuaztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2h1bmsuc3RhdHVzID0gXCJmdWxmaWxsZWRcIjtcbiAgICAgICAgY2h1bmsudmFsdWUgPSB2YWx1ZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIChjaHVuay5zdGF0dXMgPSBcInJlamVjdGVkXCIpLCAoY2h1bmsucmVhc29uID0gZXJyb3IpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaW5pdGlhbGl6aW5nSGFuZGxlciA9IHByZXZIYW5kbGVyO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0aWFsaXplTW9kdWxlQ2h1bmsoY2h1bmspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlcXVpcmVNb2R1bGUoY2h1bmsudmFsdWUpO1xuICAgICAgICBjaHVuay5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiO1xuICAgICAgICBjaHVuay52YWx1ZSA9IHZhbHVlO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgKGNodW5rLnN0YXR1cyA9IFwicmVqZWN0ZWRcIiksIChjaHVuay5yZWFzb24gPSBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlcG9ydEdsb2JhbEVycm9yKHdlYWtSZXNwb25zZSwgZXJyb3IpIHtcbiAgICAgIGlmICh2b2lkIDAgIT09IHdlYWtSZXNwb25zZS53ZWFrLmRlcmVmKCkpIHtcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gdW53cmFwV2Vha1Jlc3BvbnNlKHdlYWtSZXNwb25zZSk7XG4gICAgICAgIHJlc3BvbnNlLl9jbG9zZWQgPSAhMDtcbiAgICAgICAgcmVzcG9uc2UuX2Nsb3NlZFJlYXNvbiA9IGVycm9yO1xuICAgICAgICByZXNwb25zZS5fY2h1bmtzLmZvckVhY2goZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICAgICAgXCJwZW5kaW5nXCIgPT09IGNodW5rLnN0YXR1cyAmJlxuICAgICAgICAgICAgdHJpZ2dlckVycm9yT25DaHVuayhyZXNwb25zZSwgY2h1bmssIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdlYWtSZXNwb25zZSA9IHJlc3BvbnNlLl9kZWJ1Z0NoYW5uZWw7XG4gICAgICAgIHZvaWQgMCAhPT0gd2Vha1Jlc3BvbnNlICYmXG4gICAgICAgICAgKHdlYWtSZXNwb25zZShcIlwiKSwgKHJlc3BvbnNlLl9kZWJ1Z0NoYW5uZWwgPSB2b2lkIDApKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbnVsbFJlZkdldHRlcigpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRUYXNrTmFtZSh0eXBlKSB7XG4gICAgICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkgcmV0dXJuIFwiPD5cIjtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKSByZXR1cm4gJ1widXNlIGNsaWVudFwiJztcbiAgICAgIGlmIChcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgbnVsbCAhPT0gdHlwZSAmJlxuICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEVcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHR5cGUuX2luaXQgPT09IHJlYWRDaHVuayA/ICdcInVzZSBjbGllbnRcIicgOiBcIjwuLi4+XCI7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcbiAgICAgICAgcmV0dXJuIG5hbWUgPyBcIjxcIiArIG5hbWUgKyBcIj5cIiA6IFwiPC4uLj5cIjtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgcmV0dXJuIFwiPC4uLj5cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdGlhbGl6ZUVsZW1lbnQocmVzcG9uc2UsIGVsZW1lbnQpIHtcbiAgICAgIHZhciBzdGFjayA9IGVsZW1lbnQuX2RlYnVnU3RhY2ssXG4gICAgICAgIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICBudWxsID09PSBvd25lciAmJiAoZWxlbWVudC5fb3duZXIgPSByZXNwb25zZS5fZGVidWdSb290T3duZXIpO1xuICAgICAgdmFyIGVudiA9IHJlc3BvbnNlLl9yb290RW52aXJvbm1lbnROYW1lO1xuICAgICAgbnVsbCAhPT0gb3duZXIgJiYgbnVsbCAhPSBvd25lci5lbnYgJiYgKGVudiA9IG93bmVyLmVudik7XG4gICAgICB2YXIgbm9ybWFsaXplZFN0YWNrVHJhY2UgPSBudWxsO1xuICAgICAgbnVsbCA9PT0gb3duZXIgJiYgbnVsbCAhPSByZXNwb25zZS5fZGVidWdSb290U3RhY2tcbiAgICAgICAgPyAobm9ybWFsaXplZFN0YWNrVHJhY2UgPSByZXNwb25zZS5fZGVidWdSb290U3RhY2spXG4gICAgICAgIDogbnVsbCAhPT0gc3RhY2sgJiZcbiAgICAgICAgICAobm9ybWFsaXplZFN0YWNrVHJhY2UgPSBjcmVhdGVGYWtlSlNYQ2FsbFN0YWNrSW5ERVYoXG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgIHN0YWNrLFxuICAgICAgICAgICAgZW52XG4gICAgICAgICAgKSk7XG4gICAgICBlbGVtZW50Ll9kZWJ1Z1N0YWNrID0gbm9ybWFsaXplZFN0YWNrVHJhY2U7XG4gICAgICBub3JtYWxpemVkU3RhY2tUcmFjZSA9IG51bGw7XG4gICAgICBzdXBwb3J0c0NyZWF0ZVRhc2sgJiZcbiAgICAgICAgbnVsbCAhPT0gc3RhY2sgJiZcbiAgICAgICAgKChub3JtYWxpemVkU3RhY2tUcmFjZSA9IGNvbnNvbGUuY3JlYXRlVGFzay5iaW5kKFxuICAgICAgICAgIGNvbnNvbGUsXG4gICAgICAgICAgZ2V0VGFza05hbWUoZWxlbWVudC50eXBlKVxuICAgICAgICApKSxcbiAgICAgICAgKHN0YWNrID0gYnVpbGRGYWtlQ2FsbFN0YWNrKFxuICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgIHN0YWNrLFxuICAgICAgICAgIGVudixcbiAgICAgICAgICAhMSxcbiAgICAgICAgICBub3JtYWxpemVkU3RhY2tUcmFjZVxuICAgICAgICApKSxcbiAgICAgICAgKGVudiA9IG51bGwgPT09IG93bmVyID8gbnVsbCA6IGluaXRpYWxpemVGYWtlVGFzayhyZXNwb25zZSwgb3duZXIpKSxcbiAgICAgICAgbnVsbCA9PT0gZW52XG4gICAgICAgICAgPyAoKGVudiA9IHJlc3BvbnNlLl9kZWJ1Z1Jvb3RUYXNrKSxcbiAgICAgICAgICAgIChub3JtYWxpemVkU3RhY2tUcmFjZSA9IG51bGwgIT0gZW52ID8gZW52LnJ1bihzdGFjaykgOiBzdGFjaygpKSlcbiAgICAgICAgICA6IChub3JtYWxpemVkU3RhY2tUcmFjZSA9IGVudi5ydW4oc3RhY2spKSk7XG4gICAgICBlbGVtZW50Ll9kZWJ1Z1Rhc2sgPSBub3JtYWxpemVkU3RhY2tUcmFjZTtcbiAgICAgIG51bGwgIT09IG93bmVyICYmIGluaXRpYWxpemVGYWtlU3RhY2socmVzcG9uc2UsIG93bmVyKTtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudC5wcm9wcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxhenlDaHVua1dyYXBwZXIoY2h1bmspIHtcbiAgICAgIHZhciBsYXp5VHlwZSA9IHtcbiAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0xBWllfVFlQRSxcbiAgICAgICAgX3BheWxvYWQ6IGNodW5rLFxuICAgICAgICBfaW5pdDogcmVhZENodW5rXG4gICAgICB9O1xuICAgICAgY2h1bmsgPSBjaHVuay5fZGVidWdJbmZvIHx8IChjaHVuay5fZGVidWdJbmZvID0gW10pO1xuICAgICAgbGF6eVR5cGUuX2RlYnVnSW5mbyA9IGNodW5rO1xuICAgICAgcmV0dXJuIGxhenlUeXBlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDaHVuayhyZXNwb25zZSwgaWQpIHtcbiAgICAgIHZhciBjaHVua3MgPSByZXNwb25zZS5fY2h1bmtzLFxuICAgICAgICBjaHVuayA9IGNodW5rcy5nZXQoaWQpO1xuICAgICAgY2h1bmsgfHxcbiAgICAgICAgKChjaHVuayA9IHJlc3BvbnNlLl9jbG9zZWRcbiAgICAgICAgICA/IG5ldyBSZWFjdFByb21pc2UoXCJyZWplY3RlZFwiLCBudWxsLCByZXNwb25zZS5fY2xvc2VkUmVhc29uKVxuICAgICAgICAgIDogY3JlYXRlUGVuZGluZ0NodW5rKHJlc3BvbnNlKSksXG4gICAgICAgIGNodW5rcy5zZXQoaWQsIGNodW5rKSk7XG4gICAgICByZXR1cm4gY2h1bms7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZ1bGZpbGxSZWZlcmVuY2UocmVmZXJlbmNlLCB2YWx1ZSkge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVmZXJlbmNlLnJlc3BvbnNlLFxuICAgICAgICAgIGhhbmRsZXIgPSByZWZlcmVuY2UuaGFuZGxlcixcbiAgICAgICAgICBwYXJlbnRPYmplY3QgPSByZWZlcmVuY2UucGFyZW50T2JqZWN0LFxuICAgICAgICAgIGtleSA9IHJlZmVyZW5jZS5rZXksXG4gICAgICAgICAgbWFwID0gcmVmZXJlbmNlLm1hcCxcbiAgICAgICAgICBwYXRoID0gcmVmZXJlbmNlLnBhdGgsXG4gICAgICAgICAgaSA9IDE7XG4gICAgICAgIGkgPCBwYXRoLmxlbmd0aDtcbiAgICAgICAgaSsrXG4gICAgICApIHtcbiAgICAgICAgZm9yICg7IHZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEU7IClcbiAgICAgICAgICBpZiAoKCh2YWx1ZSA9IHZhbHVlLl9wYXlsb2FkKSwgdmFsdWUgPT09IGhhbmRsZXIuY2h1bmspKVxuICAgICAgICAgICAgdmFsdWUgPSBoYW5kbGVyLnZhbHVlO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgY2FzZSBcInJlc29sdmVkX21vZGVsXCI6XG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZU1vZGVsQ2h1bmsodmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwicmVzb2x2ZWRfbW9kdWxlXCI6XG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZU1vZHVsZUNodW5rKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAodmFsdWUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjYXNlIFwiYmxvY2tlZFwiOlxuICAgICAgICAgICAgICAgIHZhciBjeWNsaWNIYW5kbGVyID0gcmVzb2x2ZUJsb2NrZWRDeWNsZSh2YWx1ZSwgcmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gY3ljbGljSGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjeWNsaWNIYW5kbGVyLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgICAgICAgICAgICAgIHBhdGguc3BsaWNlKDAsIGkgLSAxKTtcbiAgICAgICAgICAgICAgICBudWxsID09PSB2YWx1ZS52YWx1ZVxuICAgICAgICAgICAgICAgICAgPyAodmFsdWUudmFsdWUgPSBbcmVmZXJlbmNlXSlcbiAgICAgICAgICAgICAgICAgIDogdmFsdWUudmFsdWUucHVzaChyZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIG51bGwgPT09IHZhbHVlLnJlYXNvblxuICAgICAgICAgICAgICAgICAgPyAodmFsdWUucmVhc29uID0gW3JlZmVyZW5jZV0pXG4gICAgICAgICAgICAgICAgICA6IHZhbHVlLnJlYXNvbi5wdXNoKHJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICBjYXNlIFwiaGFsdGVkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJlamVjdFJlZmVyZW5jZShyZWZlcmVuY2UsIHZhbHVlLnJlYXNvbik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSB2YWx1ZVtwYXRoW2ldXTtcbiAgICAgIH1cbiAgICAgIHJlZmVyZW5jZSA9IG1hcChyZXNwb25zZSwgdmFsdWUsIHBhcmVudE9iamVjdCwga2V5KTtcbiAgICAgIHBhcmVudE9iamVjdFtrZXldID0gcmVmZXJlbmNlO1xuICAgICAgXCJcIiA9PT0ga2V5ICYmIG51bGwgPT09IGhhbmRsZXIudmFsdWUgJiYgKGhhbmRsZXIudmFsdWUgPSByZWZlcmVuY2UpO1xuICAgICAgaWYgKFxuICAgICAgICBwYXJlbnRPYmplY3RbMF0gPT09IFJFQUNUX0VMRU1FTlRfVFlQRSAmJlxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgaGFuZGxlci52YWx1ZSAmJlxuICAgICAgICBudWxsICE9PSBoYW5kbGVyLnZhbHVlICYmXG4gICAgICAgIGhhbmRsZXIudmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRVxuICAgICAgKVxuICAgICAgICBzd2l0Y2ggKCgocGFyZW50T2JqZWN0ID0gaGFuZGxlci52YWx1ZSksIGtleSkpIHtcbiAgICAgICAgICBjYXNlIFwiM1wiOlxuICAgICAgICAgICAgcGFyZW50T2JqZWN0LnByb3BzID0gcmVmZXJlbmNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcIjRcIjpcbiAgICAgICAgICAgIHBhcmVudE9iamVjdC5fb3duZXIgPSByZWZlcmVuY2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiNVwiOlxuICAgICAgICAgICAgcGFyZW50T2JqZWN0Ll9kZWJ1Z1N0YWNrID0gcmVmZXJlbmNlO1xuICAgICAgICB9XG4gICAgICBoYW5kbGVyLmRlcHMtLTtcbiAgICAgIDAgPT09IGhhbmRsZXIuZGVwcyAmJlxuICAgICAgICAoKGtleSA9IGhhbmRsZXIuY2h1bmspLFxuICAgICAgICBudWxsICE9PSBrZXkgJiZcbiAgICAgICAgICBcImJsb2NrZWRcIiA9PT0ga2V5LnN0YXR1cyAmJlxuICAgICAgICAgICgocGFyZW50T2JqZWN0ID0ga2V5LnZhbHVlKSxcbiAgICAgICAgICAoa2V5LnN0YXR1cyA9IFwiZnVsZmlsbGVkXCIpLFxuICAgICAgICAgIChrZXkudmFsdWUgPSBoYW5kbGVyLnZhbHVlKSxcbiAgICAgICAgICBudWxsICE9PSBwYXJlbnRPYmplY3QgJiYgd2FrZUNodW5rKHBhcmVudE9iamVjdCwgaGFuZGxlci52YWx1ZSkpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVqZWN0UmVmZXJlbmNlKHJlZmVyZW5jZSwgZXJyb3IpIHtcbiAgICAgIHZhciBoYW5kbGVyID0gcmVmZXJlbmNlLmhhbmRsZXI7XG4gICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2UucmVzcG9uc2U7XG4gICAgICBpZiAoIWhhbmRsZXIuZXJyb3JlZCkge1xuICAgICAgICB2YXIgYmxvY2tlZFZhbHVlID0gaGFuZGxlci52YWx1ZTtcbiAgICAgICAgaGFuZGxlci5lcnJvcmVkID0gITA7XG4gICAgICAgIGhhbmRsZXIudmFsdWUgPSBlcnJvcjtcbiAgICAgICAgaGFuZGxlciA9IGhhbmRsZXIuY2h1bms7XG4gICAgICAgIGlmIChudWxsICE9PSBoYW5kbGVyICYmIFwiYmxvY2tlZFwiID09PSBoYW5kbGVyLnN0YXR1cykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBibG9ja2VkVmFsdWUgJiZcbiAgICAgICAgICAgIG51bGwgIT09IGJsb2NrZWRWYWx1ZSAmJlxuICAgICAgICAgICAgYmxvY2tlZFZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciBlcnJvcmVkQ29tcG9uZW50ID0ge1xuICAgICAgICAgICAgICBuYW1lOiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoYmxvY2tlZFZhbHVlLnR5cGUpIHx8IFwiXCIsXG4gICAgICAgICAgICAgIG93bmVyOiBibG9ja2VkVmFsdWUuX293bmVyXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZXJyb3JlZENvbXBvbmVudC5kZWJ1Z1N0YWNrID0gYmxvY2tlZFZhbHVlLl9kZWJ1Z1N0YWNrO1xuICAgICAgICAgICAgc3VwcG9ydHNDcmVhdGVUYXNrICYmXG4gICAgICAgICAgICAgIChlcnJvcmVkQ29tcG9uZW50LmRlYnVnVGFzayA9IGJsb2NrZWRWYWx1ZS5fZGVidWdUYXNrKTtcbiAgICAgICAgICAgIChoYW5kbGVyLl9kZWJ1Z0luZm8gfHwgKGhhbmRsZXIuX2RlYnVnSW5mbyA9IFtdKSkucHVzaChcbiAgICAgICAgICAgICAgZXJyb3JlZENvbXBvbmVudFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJpZ2dlckVycm9yT25DaHVuayhyZWZlcmVuY2UsIGhhbmRsZXIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB3YWl0Rm9yUmVmZXJlbmNlKFxuICAgICAgcmVmZXJlbmNlZENodW5rLFxuICAgICAgcGFyZW50T2JqZWN0LFxuICAgICAga2V5LFxuICAgICAgcmVzcG9uc2UsXG4gICAgICBtYXAsXG4gICAgICBwYXRoXG4gICAgKSB7XG4gICAgICBpZiAoaW5pdGlhbGl6aW5nSGFuZGxlcikge1xuICAgICAgICB2YXIgaGFuZGxlciA9IGluaXRpYWxpemluZ0hhbmRsZXI7XG4gICAgICAgIGhhbmRsZXIuZGVwcysrO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGhhbmRsZXIgPSBpbml0aWFsaXppbmdIYW5kbGVyID0ge1xuICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICBjaHVuazogbnVsbCxcbiAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICBkZXBzOiAxLFxuICAgICAgICAgIGVycm9yZWQ6ICExXG4gICAgICAgIH07XG4gICAgICBwYXJlbnRPYmplY3QgPSB7XG4gICAgICAgIHJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcbiAgICAgICAgcGFyZW50T2JqZWN0OiBwYXJlbnRPYmplY3QsXG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBtYXA6IG1hcCxcbiAgICAgICAgcGF0aDogcGF0aFxuICAgICAgfTtcbiAgICAgIG51bGwgPT09IHJlZmVyZW5jZWRDaHVuay52YWx1ZVxuICAgICAgICA/IChyZWZlcmVuY2VkQ2h1bmsudmFsdWUgPSBbcGFyZW50T2JqZWN0XSlcbiAgICAgICAgOiByZWZlcmVuY2VkQ2h1bmsudmFsdWUucHVzaChwYXJlbnRPYmplY3QpO1xuICAgICAgbnVsbCA9PT0gcmVmZXJlbmNlZENodW5rLnJlYXNvblxuICAgICAgICA/IChyZWZlcmVuY2VkQ2h1bmsucmVhc29uID0gW3BhcmVudE9iamVjdF0pXG4gICAgICAgIDogcmVmZXJlbmNlZENodW5rLnJlYXNvbi5wdXNoKHBhcmVudE9iamVjdCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbG9hZFNlcnZlclJlZmVyZW5jZShyZXNwb25zZSwgbWV0YURhdGEsIHBhcmVudE9iamVjdCwga2V5KSB7XG4gICAgICBpZiAoIXJlc3BvbnNlLl9zZXJ2ZXJSZWZlcmVuY2VDb25maWcpXG4gICAgICAgIHJldHVybiBjcmVhdGVCb3VuZFNlcnZlclJlZmVyZW5jZShcbiAgICAgICAgICBtZXRhRGF0YSxcbiAgICAgICAgICByZXNwb25zZS5fY2FsbFNlcnZlcixcbiAgICAgICAgICByZXNwb25zZS5fZW5jb2RlRm9ybUFjdGlvbixcbiAgICAgICAgICByZXNwb25zZS5fZGVidWdGaW5kU291cmNlTWFwVVJMXG4gICAgICAgICk7XG4gICAgICB2YXIgc2VydmVyUmVmZXJlbmNlID0gcmVzb2x2ZVNlcnZlclJlZmVyZW5jZShcbiAgICAgICAgICByZXNwb25zZS5fc2VydmVyUmVmZXJlbmNlQ29uZmlnLFxuICAgICAgICAgIG1ldGFEYXRhLmlkXG4gICAgICAgICksXG4gICAgICAgIHByb21pc2UgPSBwcmVsb2FkTW9kdWxlKHNlcnZlclJlZmVyZW5jZSk7XG4gICAgICBpZiAocHJvbWlzZSlcbiAgICAgICAgbWV0YURhdGEuYm91bmQgJiYgKHByb21pc2UgPSBQcm9taXNlLmFsbChbcHJvbWlzZSwgbWV0YURhdGEuYm91bmRdKSk7XG4gICAgICBlbHNlIGlmIChtZXRhRGF0YS5ib3VuZCkgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShtZXRhRGF0YS5ib3VuZCk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKHByb21pc2UgPSByZXF1aXJlTW9kdWxlKHNlcnZlclJlZmVyZW5jZSkpLFxuICAgICAgICAgIHJlZ2lzdGVyQm91bmRTZXJ2ZXJSZWZlcmVuY2UocHJvbWlzZSwgbWV0YURhdGEuaWQsIG1ldGFEYXRhLmJvdW5kKSxcbiAgICAgICAgICBwcm9taXNlXG4gICAgICAgICk7XG4gICAgICBpZiAoaW5pdGlhbGl6aW5nSGFuZGxlcikge1xuICAgICAgICB2YXIgaGFuZGxlciA9IGluaXRpYWxpemluZ0hhbmRsZXI7XG4gICAgICAgIGhhbmRsZXIuZGVwcysrO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGhhbmRsZXIgPSBpbml0aWFsaXppbmdIYW5kbGVyID0ge1xuICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICBjaHVuazogbnVsbCxcbiAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICBkZXBzOiAxLFxuICAgICAgICAgIGVycm9yZWQ6ICExXG4gICAgICAgIH07XG4gICAgICBwcm9taXNlLnRoZW4oXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgcmVzb2x2ZWRWYWx1ZSA9IHJlcXVpcmVNb2R1bGUoc2VydmVyUmVmZXJlbmNlKTtcbiAgICAgICAgICBpZiAobWV0YURhdGEuYm91bmQpIHtcbiAgICAgICAgICAgIHZhciBib3VuZEFyZ3MgPSBtZXRhRGF0YS5ib3VuZC52YWx1ZS5zbGljZSgwKTtcbiAgICAgICAgICAgIGJvdW5kQXJncy51bnNoaWZ0KG51bGwpO1xuICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHJlc29sdmVkVmFsdWUuYmluZC5hcHBseShyZXNvbHZlZFZhbHVlLCBib3VuZEFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZWdpc3RlckJvdW5kU2VydmVyUmVmZXJlbmNlKFxuICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSxcbiAgICAgICAgICAgIG1ldGFEYXRhLmlkLFxuICAgICAgICAgICAgbWV0YURhdGEuYm91bmRcbiAgICAgICAgICApO1xuICAgICAgICAgIHBhcmVudE9iamVjdFtrZXldID0gcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICBcIlwiID09PSBrZXkgJiZcbiAgICAgICAgICAgIG51bGwgPT09IGhhbmRsZXIudmFsdWUgJiZcbiAgICAgICAgICAgIChoYW5kbGVyLnZhbHVlID0gcmVzb2x2ZWRWYWx1ZSk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGFyZW50T2JqZWN0WzBdID09PSBSRUFDVF9FTEVNRU5UX1RZUEUgJiZcbiAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBoYW5kbGVyLnZhbHVlICYmXG4gICAgICAgICAgICBudWxsICE9PSBoYW5kbGVyLnZhbHVlICYmXG4gICAgICAgICAgICBoYW5kbGVyLnZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEVcbiAgICAgICAgICApXG4gICAgICAgICAgICBzd2l0Y2ggKCgoYm91bmRBcmdzID0gaGFuZGxlci52YWx1ZSksIGtleSkpIHtcbiAgICAgICAgICAgICAgY2FzZSBcIjNcIjpcbiAgICAgICAgICAgICAgICBib3VuZEFyZ3MucHJvcHMgPSByZXNvbHZlZFZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiNFwiOlxuICAgICAgICAgICAgICAgIGJvdW5kQXJncy5fb3duZXIgPSByZXNvbHZlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGhhbmRsZXIuZGVwcy0tO1xuICAgICAgICAgIDAgPT09IGhhbmRsZXIuZGVwcyAmJlxuICAgICAgICAgICAgKChyZXNvbHZlZFZhbHVlID0gaGFuZGxlci5jaHVuayksXG4gICAgICAgICAgICBudWxsICE9PSByZXNvbHZlZFZhbHVlICYmXG4gICAgICAgICAgICAgIFwiYmxvY2tlZFwiID09PSByZXNvbHZlZFZhbHVlLnN0YXR1cyAmJlxuICAgICAgICAgICAgICAoKGJvdW5kQXJncyA9IHJlc29sdmVkVmFsdWUudmFsdWUpLFxuICAgICAgICAgICAgICAocmVzb2x2ZWRWYWx1ZS5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiKSxcbiAgICAgICAgICAgICAgKHJlc29sdmVkVmFsdWUudmFsdWUgPSBoYW5kbGVyLnZhbHVlKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gYm91bmRBcmdzICYmIHdha2VDaHVuayhib3VuZEFyZ3MsIGhhbmRsZXIudmFsdWUpKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGlmICghaGFuZGxlci5lcnJvcmVkKSB7XG4gICAgICAgICAgICB2YXIgYmxvY2tlZFZhbHVlID0gaGFuZGxlci52YWx1ZTtcbiAgICAgICAgICAgIGhhbmRsZXIuZXJyb3JlZCA9ICEwO1xuICAgICAgICAgICAgaGFuZGxlci52YWx1ZSA9IGVycm9yO1xuICAgICAgICAgICAgdmFyIGNodW5rID0gaGFuZGxlci5jaHVuaztcbiAgICAgICAgICAgIGlmIChudWxsICE9PSBjaHVuayAmJiBcImJsb2NrZWRcIiA9PT0gY2h1bmsuc3RhdHVzKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgYmxvY2tlZFZhbHVlICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gYmxvY2tlZFZhbHVlICYmXG4gICAgICAgICAgICAgICAgYmxvY2tlZFZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEVcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVycm9yZWRDb21wb25lbnQgPSB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoYmxvY2tlZFZhbHVlLnR5cGUpIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgICBvd25lcjogYmxvY2tlZFZhbHVlLl9vd25lclxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXJyb3JlZENvbXBvbmVudC5kZWJ1Z1N0YWNrID0gYmxvY2tlZFZhbHVlLl9kZWJ1Z1N0YWNrO1xuICAgICAgICAgICAgICAgIHN1cHBvcnRzQ3JlYXRlVGFzayAmJlxuICAgICAgICAgICAgICAgICAgKGVycm9yZWRDb21wb25lbnQuZGVidWdUYXNrID0gYmxvY2tlZFZhbHVlLl9kZWJ1Z1Rhc2spO1xuICAgICAgICAgICAgICAgIChjaHVuay5fZGVidWdJbmZvIHx8IChjaHVuay5fZGVidWdJbmZvID0gW10pKS5wdXNoKFxuICAgICAgICAgICAgICAgICAgZXJyb3JlZENvbXBvbmVudFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdHJpZ2dlckVycm9yT25DaHVuayhyZXNwb25zZSwgY2h1bmssIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0T3V0bGluZWRNb2RlbChyZXNwb25zZSwgcmVmZXJlbmNlLCBwYXJlbnRPYmplY3QsIGtleSwgbWFwKSB7XG4gICAgICByZWZlcmVuY2UgPSByZWZlcmVuY2Uuc3BsaXQoXCI6XCIpO1xuICAgICAgdmFyIGlkID0gcGFyc2VJbnQocmVmZXJlbmNlWzBdLCAxNik7XG4gICAgICBpZCA9IGdldENodW5rKHJlc3BvbnNlLCBpZCk7XG4gICAgICBzd2l0Y2ggKGlkLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwicmVzb2x2ZWRfbW9kZWxcIjpcbiAgICAgICAgICBpbml0aWFsaXplTW9kZWxDaHVuayhpZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyZXNvbHZlZF9tb2R1bGVcIjpcbiAgICAgICAgICBpbml0aWFsaXplTW9kdWxlQ2h1bmsoaWQpO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChpZC5zdGF0dXMpIHtcbiAgICAgICAgY2FzZSBcImZ1bGZpbGxlZFwiOlxuICAgICAgICAgIGZvciAodmFyIHZhbHVlID0gaWQudmFsdWUsIGkgPSAxOyBpIDwgcmVmZXJlbmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKDsgdmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRTsgKSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuX3BheWxvYWQ7XG4gICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInJlc29sdmVkX21vZGVsXCI6XG4gICAgICAgICAgICAgICAgICBpbml0aWFsaXplTW9kZWxDaHVuayh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwicmVzb2x2ZWRfbW9kdWxlXCI6XG4gICAgICAgICAgICAgICAgICBpbml0aWFsaXplTW9kdWxlQ2h1bmsodmFsdWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImZ1bGZpbGxlZFwiOlxuICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJibG9ja2VkXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcInBlbmRpbmdcIjpcbiAgICAgICAgICAgICAgICAgIHJldHVybiB3YWl0Rm9yUmVmZXJlbmNlKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50T2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgICBtYXAsXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZS5zbGljZShpIC0gMSlcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY2FzZSBcImhhbHRlZFwiOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6aW5nSGFuZGxlclxuICAgICAgICAgICAgICAgICAgICAgID8gKChyZXNwb25zZSA9IGluaXRpYWxpemluZ0hhbmRsZXIpLCByZXNwb25zZS5kZXBzKyspXG4gICAgICAgICAgICAgICAgICAgICAgOiAoaW5pdGlhbGl6aW5nSGFuZGxlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuazogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHM6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yZWQ6ICExXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6aW5nSGFuZGxlclxuICAgICAgICAgICAgICAgICAgICAgID8gKChpbml0aWFsaXppbmdIYW5kbGVyLmVycm9yZWQgPSAhMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5pdGlhbGl6aW5nSGFuZGxlci52YWx1ZSA9IHZhbHVlLnJlYXNvbikpXG4gICAgICAgICAgICAgICAgICAgICAgOiAoaW5pdGlhbGl6aW5nSGFuZGxlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuazogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwczogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JlZDogITBcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlW3JlZmVyZW5jZVtpXV07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3BvbnNlID0gbWFwKHJlc3BvbnNlLCB2YWx1ZSwgcGFyZW50T2JqZWN0LCBrZXkpO1xuICAgICAgICAgIGlkLl9kZWJ1Z0luZm8gJiZcbiAgICAgICAgICAgIChcIm9iamVjdFwiICE9PSB0eXBlb2YgcmVzcG9uc2UgfHxcbiAgICAgICAgICAgICAgbnVsbCA9PT0gcmVzcG9uc2UgfHxcbiAgICAgICAgICAgICAgKCFpc0FycmF5SW1wbChyZXNwb25zZSkgJiZcbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiByZXNwb25zZVtBU1lOQ19JVEVSQVRPUl0gJiZcbiAgICAgICAgICAgICAgICByZXNwb25zZS4kJHR5cGVvZiAhPT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB8fFxuICAgICAgICAgICAgICByZXNwb25zZS5fZGVidWdJbmZvIHx8XG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXNwb25zZSwgXCJfZGVidWdJbmZvXCIsIHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogaWQuX2RlYnVnSW5mb1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgICAgICBjYXNlIFwiYmxvY2tlZFwiOlxuICAgICAgICAgIHJldHVybiB3YWl0Rm9yUmVmZXJlbmNlKFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBwYXJlbnRPYmplY3QsXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgIG1hcCxcbiAgICAgICAgICAgIHJlZmVyZW5jZVxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJoYWx0ZWRcIjpcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5pdGlhbGl6aW5nSGFuZGxlclxuICAgICAgICAgICAgICA/ICgocmVzcG9uc2UgPSBpbml0aWFsaXppbmdIYW5kbGVyKSwgcmVzcG9uc2UuZGVwcysrKVxuICAgICAgICAgICAgICA6IChpbml0aWFsaXppbmdIYW5kbGVyID0ge1xuICAgICAgICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgICAgICAgY2h1bms6IG51bGwsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgIGRlcHM6IDEsXG4gICAgICAgICAgICAgICAgICBlcnJvcmVkOiAhMVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGluaXRpYWxpemluZ0hhbmRsZXJcbiAgICAgICAgICAgICAgPyAoKGluaXRpYWxpemluZ0hhbmRsZXIuZXJyb3JlZCA9ICEwKSxcbiAgICAgICAgICAgICAgICAoaW5pdGlhbGl6aW5nSGFuZGxlci52YWx1ZSA9IGlkLnJlYXNvbikpXG4gICAgICAgICAgICAgIDogKGluaXRpYWxpemluZ0hhbmRsZXIgPSB7XG4gICAgICAgICAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICBjaHVuazogbnVsbCxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBpZC5yZWFzb24sXG4gICAgICAgICAgICAgICAgICBkZXBzOiAwLFxuICAgICAgICAgICAgICAgICAgZXJyb3JlZDogITBcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVNYXAocmVzcG9uc2UsIG1vZGVsKSB7XG4gICAgICByZXR1cm4gbmV3IE1hcChtb2RlbCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVNldChyZXNwb25zZSwgbW9kZWwpIHtcbiAgICAgIHJldHVybiBuZXcgU2V0KG1vZGVsKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQmxvYihyZXNwb25zZSwgbW9kZWwpIHtcbiAgICAgIHJldHVybiBuZXcgQmxvYihtb2RlbC5zbGljZSgxKSwgeyB0eXBlOiBtb2RlbFswXSB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRm9ybURhdGEocmVzcG9uc2UsIG1vZGVsKSB7XG4gICAgICByZXNwb25zZSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2RlbC5sZW5ndGg7IGkrKylcbiAgICAgICAgcmVzcG9uc2UuYXBwZW5kKG1vZGVsW2ldWzBdLCBtb2RlbFtpXVsxXSk7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFwcGx5Q29uc3RydWN0b3IocmVzcG9uc2UsIG1vZGVsLCBwYXJlbnRPYmplY3QpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwYXJlbnRPYmplY3QsIG1vZGVsLnByb3RvdHlwZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZmluZUxhenlHZXR0ZXIocmVzcG9uc2UsIGNodW5rLCBwYXJlbnRPYmplY3QsIGtleSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHBhcmVudE9iamVjdCwga2V5LCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIFwicmVzb2x2ZWRfbW9kZWxcIiA9PT0gY2h1bmsuc3RhdHVzICYmIGluaXRpYWxpemVNb2RlbENodW5rKGNodW5rKTtcbiAgICAgICAgICBzd2l0Y2ggKGNodW5rLnN0YXR1cykge1xuICAgICAgICAgICAgY2FzZSBcImZ1bGZpbGxlZFwiOlxuICAgICAgICAgICAgICByZXR1cm4gY2h1bmsudmFsdWU7XG4gICAgICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICAgICAgICAgICAgdGhyb3cgY2h1bmsucmVhc29uO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCJUaGlzIG9iamVjdCBoYXMgYmVlbiBvbWl0dGVkIGJ5IFJlYWN0IGluIHRoZSBjb25zb2xlIGxvZyB0byBhdm9pZCBzZW5kaW5nIHRvbyBtdWNoIGRhdGEgZnJvbSB0aGUgc2VydmVyLiBUcnkgbG9nZ2luZyBzbWFsbGVyIG9yIG1vcmUgc3BlY2lmaWMgb2JqZWN0cy5cIjtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITFcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGV4dHJhY3RJdGVyYXRvcihyZXNwb25zZSwgbW9kZWwpIHtcbiAgICAgIHJldHVybiBtb2RlbFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZU1vZGVsKHJlc3BvbnNlLCBtb2RlbCkge1xuICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZU1vZGVsU3RyaW5nKHJlc3BvbnNlLCBwYXJlbnRPYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgICAgIGlmIChcIiRcIiA9PT0gdmFsdWVbMF0pIHtcbiAgICAgICAgaWYgKFwiJFwiID09PSB2YWx1ZSlcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgbnVsbCAhPT0gaW5pdGlhbGl6aW5nSGFuZGxlciAmJlxuICAgICAgICAgICAgICBcIjBcIiA9PT0ga2V5ICYmXG4gICAgICAgICAgICAgIChpbml0aWFsaXppbmdIYW5kbGVyID0ge1xuICAgICAgICAgICAgICAgIHBhcmVudDogaW5pdGlhbGl6aW5nSGFuZGxlcixcbiAgICAgICAgICAgICAgICBjaHVuazogbnVsbCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgICAgICBkZXBzOiAwLFxuICAgICAgICAgICAgICAgIGVycm9yZWQ6ICExXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgUkVBQ1RfRUxFTUVOVF9UWVBFXG4gICAgICAgICAgKTtcbiAgICAgICAgc3dpdGNoICh2YWx1ZVsxXSkge1xuICAgICAgICAgIGNhc2UgXCIkXCI6XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc2xpY2UoMSk7XG4gICAgICAgICAgY2FzZSBcIkxcIjpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChwYXJlbnRPYmplY3QgPSBwYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgMTYpKSxcbiAgICAgICAgICAgICAgKHJlc3BvbnNlID0gZ2V0Q2h1bmsocmVzcG9uc2UsIHBhcmVudE9iamVjdCkpLFxuICAgICAgICAgICAgICBjcmVhdGVMYXp5Q2h1bmtXcmFwcGVyKHJlc3BvbnNlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFwiQFwiOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKHBhcmVudE9iamVjdCA9IHBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCAxNikpLFxuICAgICAgICAgICAgICBnZXRDaHVuayhyZXNwb25zZSwgcGFyZW50T2JqZWN0KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFwiU1wiOlxuICAgICAgICAgICAgcmV0dXJuIFN5bWJvbC5mb3IodmFsdWUuc2xpY2UoMikpO1xuICAgICAgICAgIGNhc2UgXCJGXCI6XG4gICAgICAgICAgICB2YXIgcmVmID0gdmFsdWUuc2xpY2UoMik7XG4gICAgICAgICAgICByZXR1cm4gZ2V0T3V0bGluZWRNb2RlbChcbiAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgIHJlZixcbiAgICAgICAgICAgICAgcGFyZW50T2JqZWN0LFxuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgIGxvYWRTZXJ2ZXJSZWZlcmVuY2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBcIlRcIjpcbiAgICAgICAgICAgIHBhcmVudE9iamVjdCA9IFwiJFwiICsgdmFsdWUuc2xpY2UoMik7XG4gICAgICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlLl90ZW1wUmVmcztcbiAgICAgICAgICAgIGlmIChudWxsID09IHJlc3BvbnNlKVxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIk1pc3NpbmcgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHNldCBidXQgdGhlIFJTQyByZXNwb25zZSByZXR1cm5lZCBhIHRlbXBvcmFyeSByZWZlcmVuY2UuIFBhc3MgYSB0ZW1wb3JhcnlSZWZlcmVuY2Ugb3B0aW9uIHdpdGggdGhlIHNldCB0aGF0IHdhcyB1c2VkIHdpdGggdGhlIHJlcGx5LlwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuZ2V0KHBhcmVudE9iamVjdCk7XG4gICAgICAgICAgY2FzZSBcIlFcIjpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChyZWYgPSB2YWx1ZS5zbGljZSgyKSksXG4gICAgICAgICAgICAgIGdldE91dGxpbmVkTW9kZWwocmVzcG9uc2UsIHJlZiwgcGFyZW50T2JqZWN0LCBrZXksIGNyZWF0ZU1hcClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBcIldcIjpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChyZWYgPSB2YWx1ZS5zbGljZSgyKSksXG4gICAgICAgICAgICAgIGdldE91dGxpbmVkTW9kZWwocmVzcG9uc2UsIHJlZiwgcGFyZW50T2JqZWN0LCBrZXksIGNyZWF0ZVNldClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBcIkJcIjpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChyZWYgPSB2YWx1ZS5zbGljZSgyKSksXG4gICAgICAgICAgICAgIGdldE91dGxpbmVkTW9kZWwocmVzcG9uc2UsIHJlZiwgcGFyZW50T2JqZWN0LCBrZXksIGNyZWF0ZUJsb2IpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgXCJLXCI6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAocmVmID0gdmFsdWUuc2xpY2UoMikpLFxuICAgICAgICAgICAgICBnZXRPdXRsaW5lZE1vZGVsKHJlc3BvbnNlLCByZWYsIHBhcmVudE9iamVjdCwga2V5LCBjcmVhdGVGb3JtRGF0YSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBcIlpcIjpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChyZWYgPSB2YWx1ZS5zbGljZSgyKSksXG4gICAgICAgICAgICAgIGdldE91dGxpbmVkTW9kZWwoXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgcmVmLFxuICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdCxcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgcmVzb2x2ZUVycm9yRGV2XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBcImlcIjpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChyZWYgPSB2YWx1ZS5zbGljZSgyKSksXG4gICAgICAgICAgICAgIGdldE91dGxpbmVkTW9kZWwoXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgcmVmLFxuICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdCxcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgZXh0cmFjdEl0ZXJhdG9yXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBcIklcIjpcbiAgICAgICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICAgICAgICBjYXNlIFwiLVwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiJC0wXCIgPT09IHZhbHVlID8gLTAgOiAtSW5maW5pdHk7XG4gICAgICAgICAgY2FzZSBcIk5cIjpcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBjYXNlIFwiRFwiOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUucGFyc2UodmFsdWUuc2xpY2UoMikpKTtcbiAgICAgICAgICBjYXNlIFwiblwiOlxuICAgICAgICAgICAgcmV0dXJuIEJpZ0ludCh2YWx1ZS5zbGljZSgyKSk7XG4gICAgICAgICAgY2FzZSBcIlBcIjpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChyZWYgPSB2YWx1ZS5zbGljZSgyKSksXG4gICAgICAgICAgICAgIGdldE91dGxpbmVkTW9kZWwoXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgcmVmLFxuICAgICAgICAgICAgICAgIHBhcmVudE9iamVjdCxcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgYXBwbHlDb25zdHJ1Y3RvclxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgXCJFXCI6XG4gICAgICAgICAgICByZXNwb25zZSA9IHZhbHVlLnNsaWNlKDIpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuICgwLCBldmFsKShyZXNwb25zZSk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGFydHNXaXRoKFwiKGFzeW5jIGZ1bmN0aW9uXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKChwYXJlbnRPYmplY3QgPSByZXNwb25zZS5pbmRleE9mKFwiKFwiLCAxNSkpLFxuICAgICAgICAgICAgICAgICAgLTEgIT09IHBhcmVudE9iamVjdClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2UgPSByZXNwb25zZS5zbGljZSgxNSwgcGFyZW50T2JqZWN0KS50cmltKCkpLFxuICAgICAgICAgICAgICAgICAgICAoMCwgZXZhbCkoXG4gICAgICAgICAgICAgICAgICAgICAgXCIoe1wiICsgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UpICsgXCI6YXN5bmMgZnVuY3Rpb24oKXt9fSlcIlxuICAgICAgICAgICAgICAgICAgICApW3Jlc3BvbnNlXVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5zdGFydHNXaXRoKFwiKGZ1bmN0aW9uXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKChwYXJlbnRPYmplY3QgPSByZXNwb25zZS5pbmRleE9mKFwiKFwiLCA5KSksXG4gICAgICAgICAgICAgICAgICAtMSAhPT0gcGFyZW50T2JqZWN0KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSA9IHJlc3BvbnNlLnNsaWNlKDksIHBhcmVudE9iamVjdCkudHJpbSgpKSxcbiAgICAgICAgICAgICAgICAgICAgKDAsIGV2YWwpKFxuICAgICAgICAgICAgICAgICAgICAgIFwiKHtcIiArIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlKSArIFwiOmZ1bmN0aW9uKCl7fX0pXCJcbiAgICAgICAgICAgICAgICAgICAgKVtyZXNwb25zZV1cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhcnRzV2l0aChcIihjbGFzc1wiKSAmJlxuICAgICAgICAgICAgICAgICgocGFyZW50T2JqZWN0ID0gcmVzcG9uc2UuaW5kZXhPZihcIntcIiwgNikpLCAtMSAhPT0gcGFyZW50T2JqZWN0KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIChyZXNwb25zZSA9IHJlc3BvbnNlLnNsaWNlKDYsIHBhcmVudE9iamVjdCkudHJpbSgpKSxcbiAgICAgICAgICAgICAgICAgICgwLCBldmFsKShcIih7XCIgKyBKU09OLnN0cmluZ2lmeShyZXNwb25zZSkgKyBcIjpjbGFzc3t9fSlcIilbXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJZXCI6XG4gICAgICAgICAgICBpZiAoMiA8IHZhbHVlLmxlbmd0aCAmJiAocmVmID0gcmVzcG9uc2UuX2RlYnVnQ2hhbm5lbCkpIHtcbiAgICAgICAgICAgICAgaWYgKFwiQFwiID09PSB2YWx1ZVsyXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgKHBhcmVudE9iamVjdCA9IHZhbHVlLnNsaWNlKDMpKSxcbiAgICAgICAgICAgICAgICAgIChrZXkgPSBwYXJzZUludChwYXJlbnRPYmplY3QsIDE2KSksXG4gICAgICAgICAgICAgICAgICByZXNwb25zZS5fY2h1bmtzLmhhcyhrZXkpIHx8IHJlZihcIlA6XCIgKyBwYXJlbnRPYmplY3QpLFxuICAgICAgICAgICAgICAgICAgZ2V0Q2h1bmsocmVzcG9uc2UsIGtleSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDIpO1xuICAgICAgICAgICAgICB2YXIgX2lkMiA9IHBhcnNlSW50KHZhbHVlLCAxNik7XG4gICAgICAgICAgICAgIHJlc3BvbnNlLl9jaHVua3MuaGFzKF9pZDIpIHx8IHJlZihcIlE6XCIgKyB2YWx1ZSk7XG4gICAgICAgICAgICAgIHJlZiA9IGdldENodW5rKHJlc3BvbnNlLCBfaWQyKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFwiZnVsZmlsbGVkXCIgPT09IHJlZi5zdGF0dXNcbiAgICAgICAgICAgICAgICA/IHJlZi52YWx1ZVxuICAgICAgICAgICAgICAgIDogZGVmaW5lTGF6eUdldHRlcihyZXNwb25zZSwgcmVmLCBwYXJlbnRPYmplY3QsIGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocGFyZW50T2JqZWN0LCBrZXksIHtcbiAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiVGhpcyBvYmplY3QgaGFzIGJlZW4gb21pdHRlZCBieSBSZWFjdCBpbiB0aGUgY29uc29sZSBsb2cgdG8gYXZvaWQgc2VuZGluZyB0b28gbXVjaCBkYXRhIGZyb20gdGhlIHNlcnZlci4gVHJ5IGxvZ2dpbmcgc21hbGxlciBvciBtb3JlIHNwZWNpZmljIG9iamVjdHMuXCI7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgICAgICAgICBjb25maWd1cmFibGU6ICExXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAocmVmID0gdmFsdWUuc2xpY2UoMSkpLFxuICAgICAgICAgICAgICBnZXRPdXRsaW5lZE1vZGVsKHJlc3BvbnNlLCByZWYsIHBhcmVudE9iamVjdCwga2V5LCBjcmVhdGVNb2RlbClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWlzc2luZ0NhbGwoKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ1RyeWluZyB0byBjYWxsIGEgZnVuY3Rpb24gZnJvbSBcInVzZSBzZXJ2ZXJcIiBidXQgdGhlIGNhbGxTZXJ2ZXIgb3B0aW9uIHdhcyBub3QgaW1wbGVtZW50ZWQgaW4geW91ciByb3V0ZXIgcnVudGltZS4nXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBSZXNwb25zZUluc3RhbmNlKFxuICAgICAgYnVuZGxlckNvbmZpZyxcbiAgICAgIHNlcnZlclJlZmVyZW5jZUNvbmZpZyxcbiAgICAgIG1vZHVsZUxvYWRpbmcsXG4gICAgICBjYWxsU2VydmVyLFxuICAgICAgZW5jb2RlRm9ybUFjdGlvbixcbiAgICAgIG5vbmNlLFxuICAgICAgdGVtcG9yYXJ5UmVmZXJlbmNlcyxcbiAgICAgIGZpbmRTb3VyY2VNYXBVUkwsXG4gICAgICByZXBsYXlDb25zb2xlLFxuICAgICAgZW52aXJvbm1lbnROYW1lLFxuICAgICAgZGVidWdDaGFubmVsXG4gICAgKSB7XG4gICAgICB2YXIgY2h1bmtzID0gbmV3IE1hcCgpO1xuICAgICAgdGhpcy5fYnVuZGxlckNvbmZpZyA9IGJ1bmRsZXJDb25maWc7XG4gICAgICB0aGlzLl9zZXJ2ZXJSZWZlcmVuY2VDb25maWcgPSBzZXJ2ZXJSZWZlcmVuY2VDb25maWc7XG4gICAgICB0aGlzLl9tb2R1bGVMb2FkaW5nID0gbW9kdWxlTG9hZGluZztcbiAgICAgIHRoaXMuX2NhbGxTZXJ2ZXIgPSB2b2lkIDAgIT09IGNhbGxTZXJ2ZXIgPyBjYWxsU2VydmVyIDogbWlzc2luZ0NhbGw7XG4gICAgICB0aGlzLl9lbmNvZGVGb3JtQWN0aW9uID0gZW5jb2RlRm9ybUFjdGlvbjtcbiAgICAgIHRoaXMuX25vbmNlID0gbm9uY2U7XG4gICAgICB0aGlzLl9jaHVua3MgPSBjaHVua3M7XG4gICAgICB0aGlzLl9zdHJpbmdEZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gICAgICB0aGlzLl9mcm9tSlNPTiA9IG51bGw7XG4gICAgICB0aGlzLl9jbG9zZWQgPSAhMTtcbiAgICAgIHRoaXMuX2Nsb3NlZFJlYXNvbiA9IG51bGw7XG4gICAgICB0aGlzLl90ZW1wUmVmcyA9IHRlbXBvcmFyeVJlZmVyZW5jZXM7XG4gICAgICB0aGlzLl9wZW5kaW5nQ2h1bmtzID0gMDtcbiAgICAgIHRoaXMuX3dlYWtSZXNwb25zZSA9IHsgd2VhazogbmV3IFdlYWtSZWYodGhpcyksIHJlc3BvbnNlOiB0aGlzIH07XG4gICAgICB0aGlzLl9kZWJ1Z1Jvb3RPd25lciA9IGJ1bmRsZXJDb25maWcgPVxuICAgICAgICB2b2lkIDAgPT09IFJlYWN0U2hhcmVkSW50ZXJhbHNTZXJ2ZXIgfHxcbiAgICAgICAgbnVsbCA9PT0gUmVhY3RTaGFyZWRJbnRlcmFsc1NlcnZlci5BXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiBSZWFjdFNoYXJlZEludGVyYWxzU2VydmVyLkEuZ2V0T3duZXIoKTtcbiAgICAgIHRoaXMuX2RlYnVnUm9vdFN0YWNrID1cbiAgICAgICAgbnVsbCAhPT0gYnVuZGxlckNvbmZpZyA/IEVycm9yKFwicmVhY3Qtc3RhY2stdG9wLWZyYW1lXCIpIDogbnVsbDtcbiAgICAgIGVudmlyb25tZW50TmFtZSA9IHZvaWQgMCA9PT0gZW52aXJvbm1lbnROYW1lID8gXCJTZXJ2ZXJcIiA6IGVudmlyb25tZW50TmFtZTtcbiAgICAgIHN1cHBvcnRzQ3JlYXRlVGFzayAmJlxuICAgICAgICAodGhpcy5fZGVidWdSb290VGFzayA9IGNvbnNvbGUuY3JlYXRlVGFzayhcbiAgICAgICAgICAnXCJ1c2UgJyArIGVudmlyb25tZW50TmFtZS50b0xvd2VyQ2FzZSgpICsgJ1wiJ1xuICAgICAgICApKTtcbiAgICAgIHRoaXMuX2RlYnVnRmluZFNvdXJjZU1hcFVSTCA9IGZpbmRTb3VyY2VNYXBVUkw7XG4gICAgICB0aGlzLl9kZWJ1Z0NoYW5uZWwgPSBkZWJ1Z0NoYW5uZWw7XG4gICAgICB0aGlzLl9yZXBsYXlDb25zb2xlID0gcmVwbGF5Q29uc29sZTtcbiAgICAgIHRoaXMuX3Jvb3RFbnZpcm9ubWVudE5hbWUgPSBlbnZpcm9ubWVudE5hbWU7XG4gICAgICBkZWJ1Z0NoYW5uZWwgJiZcbiAgICAgICAgKG51bGwgPT09IGRlYnVnQ2hhbm5lbFJlZ2lzdHJ5XG4gICAgICAgICAgPyAoZGVidWdDaGFubmVsKFwiXCIpLCAodGhpcy5fZGVidWdDaGFubmVsID0gdm9pZCAwKSlcbiAgICAgICAgICA6IGRlYnVnQ2hhbm5lbFJlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMsIGRlYnVnQ2hhbm5lbCkpO1xuICAgICAgdGhpcy5fZnJvbUpTT04gPSBjcmVhdGVGcm9tSlNPTkNhbGxiYWNrKHRoaXMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVTdHJlYW1TdGF0ZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9yb3dTdGF0ZTogMCxcbiAgICAgICAgX3Jvd0lEOiAwLFxuICAgICAgICBfcm93VGFnOiAwLFxuICAgICAgICBfcm93TGVuZ3RoOiAwLFxuICAgICAgICBfYnVmZmVyOiBbXVxuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZURlYnVnSGFsdChyZXNwb25zZSwgaWQpIHtcbiAgICAgIHZhciBjaHVua3MgPSByZXNwb25zZS5fY2h1bmtzLFxuICAgICAgICBjaHVuayA9IGNodW5rcy5nZXQoaWQpO1xuICAgICAgY2h1bmsgfHwgY2h1bmtzLnNldChpZCwgKGNodW5rID0gY3JlYXRlUGVuZGluZ0NodW5rKHJlc3BvbnNlKSkpO1xuICAgICAgaWYgKFwicGVuZGluZ1wiID09PSBjaHVuay5zdGF0dXMgfHwgXCJibG9ja2VkXCIgPT09IGNodW5rLnN0YXR1cylcbiAgICAgICAgcmVsZWFzZVBlbmRpbmdDaHVuayhyZXNwb25zZSwgY2h1bmspLFxuICAgICAgICAgIChyZXNwb25zZSA9IGNodW5rKSxcbiAgICAgICAgICAocmVzcG9uc2Uuc3RhdHVzID0gXCJoYWx0ZWRcIiksXG4gICAgICAgICAgKHJlc3BvbnNlLnZhbHVlID0gbnVsbCksXG4gICAgICAgICAgKHJlc3BvbnNlLnJlYXNvbiA9IG51bGwpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlTW9kZWwocmVzcG9uc2UsIGlkLCBtb2RlbCkge1xuICAgICAgdmFyIGNodW5rcyA9IHJlc3BvbnNlLl9jaHVua3MsXG4gICAgICAgIGNodW5rID0gY2h1bmtzLmdldChpZCk7XG4gICAgICBjaHVua1xuICAgICAgICA/IHJlc29sdmVNb2RlbENodW5rKHJlc3BvbnNlLCBjaHVuaywgbW9kZWwpXG4gICAgICAgIDogY2h1bmtzLnNldChpZCwgbmV3IFJlYWN0UHJvbWlzZShcInJlc29sdmVkX21vZGVsXCIsIG1vZGVsLCByZXNwb25zZSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlVGV4dChyZXNwb25zZSwgaWQsIHRleHQpIHtcbiAgICAgIHZhciBjaHVua3MgPSByZXNwb25zZS5fY2h1bmtzLFxuICAgICAgICBjaHVuayA9IGNodW5rcy5nZXQoaWQpO1xuICAgICAgY2h1bmsgJiYgXCJwZW5kaW5nXCIgIT09IGNodW5rLnN0YXR1c1xuICAgICAgICA/IGNodW5rLnJlYXNvbi5lbnF1ZXVlVmFsdWUodGV4dClcbiAgICAgICAgOiAoY2h1bmsgJiYgcmVsZWFzZVBlbmRpbmdDaHVuayhyZXNwb25zZSwgY2h1bmspLFxuICAgICAgICAgIGNodW5rcy5zZXQoaWQsIG5ldyBSZWFjdFByb21pc2UoXCJmdWxmaWxsZWRcIiwgdGV4dCwgbnVsbCkpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUJ1ZmZlcihyZXNwb25zZSwgaWQsIGJ1ZmZlcikge1xuICAgICAgdmFyIGNodW5rcyA9IHJlc3BvbnNlLl9jaHVua3MsXG4gICAgICAgIGNodW5rID0gY2h1bmtzLmdldChpZCk7XG4gICAgICBjaHVuayAmJiBcInBlbmRpbmdcIiAhPT0gY2h1bmsuc3RhdHVzXG4gICAgICAgID8gY2h1bmsucmVhc29uLmVucXVldWVWYWx1ZShidWZmZXIpXG4gICAgICAgIDogKGNodW5rICYmIHJlbGVhc2VQZW5kaW5nQ2h1bmsocmVzcG9uc2UsIGNodW5rKSxcbiAgICAgICAgICBjaHVua3Muc2V0KGlkLCBuZXcgUmVhY3RQcm9taXNlKFwiZnVsZmlsbGVkXCIsIGJ1ZmZlciwgbnVsbCkpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZU1vZHVsZShyZXNwb25zZSwgaWQsIG1vZGVsKSB7XG4gICAgICB2YXIgY2h1bmtzID0gcmVzcG9uc2UuX2NodW5rcyxcbiAgICAgICAgY2h1bmsgPSBjaHVua3MuZ2V0KGlkKTtcbiAgICAgIG1vZGVsID0gSlNPTi5wYXJzZShtb2RlbCwgcmVzcG9uc2UuX2Zyb21KU09OKTtcbiAgICAgIHZhciBjbGllbnRSZWZlcmVuY2UgPSByZXNvbHZlQ2xpZW50UmVmZXJlbmNlKFxuICAgICAgICByZXNwb25zZS5fYnVuZGxlckNvbmZpZyxcbiAgICAgICAgbW9kZWxcbiAgICAgICk7XG4gICAgICBpZiAoKG1vZGVsID0gcHJlbG9hZE1vZHVsZShjbGllbnRSZWZlcmVuY2UpKSkge1xuICAgICAgICBpZiAoY2h1bmspIHtcbiAgICAgICAgICByZWxlYXNlUGVuZGluZ0NodW5rKHJlc3BvbnNlLCBjaHVuayk7XG4gICAgICAgICAgdmFyIGJsb2NrZWRDaHVuayA9IGNodW5rO1xuICAgICAgICAgIGJsb2NrZWRDaHVuay5zdGF0dXMgPSBcImJsb2NrZWRcIjtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgKGJsb2NrZWRDaHVuayA9IG5ldyBSZWFjdFByb21pc2UoXCJibG9ja2VkXCIsIG51bGwsIG51bGwpKSxcbiAgICAgICAgICAgIGNodW5rcy5zZXQoaWQsIGJsb2NrZWRDaHVuayk7XG4gICAgICAgIG1vZGVsLnRoZW4oXG4gICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVNb2R1bGVDaHVuayhyZXNwb25zZSwgYmxvY2tlZENodW5rLCBjbGllbnRSZWZlcmVuY2UpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJpZ2dlckVycm9yT25DaHVuayhyZXNwb25zZSwgYmxvY2tlZENodW5rLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGNodW5rXG4gICAgICAgICAgPyByZXNvbHZlTW9kdWxlQ2h1bmsocmVzcG9uc2UsIGNodW5rLCBjbGllbnRSZWZlcmVuY2UpXG4gICAgICAgICAgOiBjaHVua3Muc2V0KFxuICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgbmV3IFJlYWN0UHJvbWlzZShcInJlc29sdmVkX21vZHVsZVwiLCBjbGllbnRSZWZlcmVuY2UsIG51bGwpXG4gICAgICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlU3RyZWFtKHJlc3BvbnNlLCBpZCwgc3RyZWFtLCBjb250cm9sbGVyKSB7XG4gICAgICB2YXIgY2h1bmtzID0gcmVzcG9uc2UuX2NodW5rcyxcbiAgICAgICAgY2h1bmsgPSBjaHVua3MuZ2V0KGlkKTtcbiAgICAgIGNodW5rXG4gICAgICAgID8gXCJwZW5kaW5nXCIgPT09IGNodW5rLnN0YXR1cyAmJlxuICAgICAgICAgIChyZWxlYXNlUGVuZGluZ0NodW5rKHJlc3BvbnNlLCBjaHVuayksXG4gICAgICAgICAgKHJlc3BvbnNlID0gY2h1bmsudmFsdWUpLFxuICAgICAgICAgIChjaHVuay5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiKSxcbiAgICAgICAgICAoY2h1bmsudmFsdWUgPSBzdHJlYW0pLFxuICAgICAgICAgIChjaHVuay5yZWFzb24gPSBjb250cm9sbGVyKSxcbiAgICAgICAgICBudWxsICE9PSByZXNwb25zZSAmJiB3YWtlQ2h1bmsocmVzcG9uc2UsIGNodW5rLnZhbHVlKSlcbiAgICAgICAgOiBjaHVua3Muc2V0KGlkLCBuZXcgUmVhY3RQcm9taXNlKFwiZnVsZmlsbGVkXCIsIHN0cmVhbSwgY29udHJvbGxlcikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdGFydFJlYWRhYmxlU3RyZWFtKHJlc3BvbnNlLCBpZCwgdHlwZSkge1xuICAgICAgdmFyIGNvbnRyb2xsZXIgPSBudWxsO1xuICAgICAgdHlwZSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoYykge1xuICAgICAgICAgIGNvbnRyb2xsZXIgPSBjO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHZhciBwcmV2aW91c0Jsb2NrZWRDaHVuayA9IG51bGw7XG4gICAgICByZXNvbHZlU3RyZWFtKHJlc3BvbnNlLCBpZCwgdHlwZSwge1xuICAgICAgICBlbnF1ZXVlVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIG51bGwgPT09IHByZXZpb3VzQmxvY2tlZENodW5rXG4gICAgICAgICAgICA/IGNvbnRyb2xsZXIuZW5xdWV1ZSh2YWx1ZSlcbiAgICAgICAgICAgIDogcHJldmlvdXNCbG9ja2VkQ2h1bmsudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKHZhbHVlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVucXVldWVNb2RlbDogZnVuY3Rpb24gKGpzb24pIHtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gcHJldmlvdXNCbG9ja2VkQ2h1bmspIHtcbiAgICAgICAgICAgIHZhciBjaHVuayA9IG5ldyBSZWFjdFByb21pc2UoXCJyZXNvbHZlZF9tb2RlbFwiLCBqc29uLCByZXNwb25zZSk7XG4gICAgICAgICAgICBpbml0aWFsaXplTW9kZWxDaHVuayhjaHVuayk7XG4gICAgICAgICAgICBcImZ1bGZpbGxlZFwiID09PSBjaHVuay5zdGF0dXNcbiAgICAgICAgICAgICAgPyBjb250cm9sbGVyLmVucXVldWUoY2h1bmsudmFsdWUpXG4gICAgICAgICAgICAgIDogKGNodW5rLnRoZW4oXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbGxlci5lbnF1ZXVlKHYpO1xuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKHByZXZpb3VzQmxvY2tlZENodW5rID0gY2h1bmspKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2h1bmsgPSBwcmV2aW91c0Jsb2NrZWRDaHVuaztcbiAgICAgICAgICAgIHZhciBfY2h1bmszID0gY3JlYXRlUGVuZGluZ0NodW5rKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIF9jaHVuazMudGhlbihcbiAgICAgICAgICAgICAgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbGxlci5lbnF1ZXVlKHYpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyLmVycm9yKGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcHJldmlvdXNCbG9ja2VkQ2h1bmsgPSBfY2h1bmszO1xuICAgICAgICAgICAgY2h1bmsudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHByZXZpb3VzQmxvY2tlZENodW5rID09PSBfY2h1bmszICYmIChwcmV2aW91c0Jsb2NrZWRDaHVuayA9IG51bGwpO1xuICAgICAgICAgICAgICByZXNvbHZlTW9kZWxDaHVuayhyZXNwb25zZSwgX2NodW5rMywganNvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHByZXZpb3VzQmxvY2tlZENodW5rKSBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgYmxvY2tlZENodW5rID0gcHJldmlvdXNCbG9ja2VkQ2h1bms7XG4gICAgICAgICAgICBwcmV2aW91c0Jsb2NrZWRDaHVuayA9IG51bGw7XG4gICAgICAgICAgICBibG9ja2VkQ2h1bmsudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAobnVsbCA9PT0gcHJldmlvdXNCbG9ja2VkQ2h1bmspIGNvbnRyb2xsZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGJsb2NrZWRDaHVuayA9IHByZXZpb3VzQmxvY2tlZENodW5rO1xuICAgICAgICAgICAgcHJldmlvdXNCbG9ja2VkQ2h1bmsgPSBudWxsO1xuICAgICAgICAgICAgYmxvY2tlZENodW5rLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gY29udHJvbGxlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhc3luY0l0ZXJhdG9yKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUl0ZXJhdG9yKG5leHQpIHtcbiAgICAgIG5leHQgPSB7IG5leHQ6IG5leHQgfTtcbiAgICAgIG5leHRbQVNZTkNfSVRFUkFUT1JdID0gYXN5bmNJdGVyYXRvcjtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdGFydEFzeW5jSXRlcmFibGUocmVzcG9uc2UsIGlkLCBpdGVyYXRvcikge1xuICAgICAgdmFyIGJ1ZmZlciA9IFtdLFxuICAgICAgICBjbG9zZWQgPSAhMSxcbiAgICAgICAgbmV4dFdyaXRlSW5kZXggPSAwLFxuICAgICAgICBpdGVyYWJsZSA9IHt9O1xuICAgICAgaXRlcmFibGVbQVNZTkNfSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmV4dFJlYWRJbmRleCA9IDA7XG4gICAgICAgIHJldHVybiBjcmVhdGVJdGVyYXRvcihmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgaWYgKHZvaWQgMCAhPT0gYXJnKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIFwiVmFsdWVzIGNhbm5vdCBiZSBwYXNzZWQgdG8gbmV4dCgpIG9mIEFzeW5jSXRlcmFibGVzIHBhc3NlZCB0byBDbGllbnQgQ29tcG9uZW50cy5cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobmV4dFJlYWRJbmRleCA9PT0gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGNsb3NlZClcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWFjdFByb21pc2UoXG4gICAgICAgICAgICAgICAgXCJmdWxmaWxsZWRcIixcbiAgICAgICAgICAgICAgICB7IGRvbmU6ICEwLCB2YWx1ZTogdm9pZCAwIH0sXG4gICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnVmZmVyW25leHRSZWFkSW5kZXhdID0gY3JlYXRlUGVuZGluZ0NodW5rKHJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJ1ZmZlcltuZXh0UmVhZEluZGV4KytdO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICByZXNvbHZlU3RyZWFtKFxuICAgICAgICByZXNwb25zZSxcbiAgICAgICAgaWQsXG4gICAgICAgIGl0ZXJhdG9yID8gaXRlcmFibGVbQVNZTkNfSVRFUkFUT1JdKCkgOiBpdGVyYWJsZSxcbiAgICAgICAge1xuICAgICAgICAgIGVucXVldWVWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAobmV4dFdyaXRlSW5kZXggPT09IGJ1ZmZlci5sZW5ndGgpXG4gICAgICAgICAgICAgIGJ1ZmZlcltuZXh0V3JpdGVJbmRleF0gPSBuZXcgUmVhY3RQcm9taXNlKFxuICAgICAgICAgICAgICAgIFwiZnVsZmlsbGVkXCIsXG4gICAgICAgICAgICAgICAgeyBkb25lOiAhMSwgdmFsdWU6IHZhbHVlIH0sXG4gICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBjaHVuayA9IGJ1ZmZlcltuZXh0V3JpdGVJbmRleF0sXG4gICAgICAgICAgICAgICAgcmVzb2x2ZUxpc3RlbmVycyA9IGNodW5rLnZhbHVlLFxuICAgICAgICAgICAgICAgIHJlamVjdExpc3RlbmVycyA9IGNodW5rLnJlYXNvbjtcbiAgICAgICAgICAgICAgY2h1bmsuc3RhdHVzID0gXCJmdWxmaWxsZWRcIjtcbiAgICAgICAgICAgICAgY2h1bmsudmFsdWUgPSB7IGRvbmU6ICExLCB2YWx1ZTogdmFsdWUgfTtcbiAgICAgICAgICAgICAgbnVsbCAhPT0gcmVzb2x2ZUxpc3RlbmVycyAmJlxuICAgICAgICAgICAgICAgIHdha2VDaHVua0lmSW5pdGlhbGl6ZWQoXG4gICAgICAgICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVMaXN0ZW5lcnMsXG4gICAgICAgICAgICAgICAgICByZWplY3RMaXN0ZW5lcnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dFdyaXRlSW5kZXgrKztcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVucXVldWVNb2RlbDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBuZXh0V3JpdGVJbmRleCA9PT0gYnVmZmVyLmxlbmd0aFxuICAgICAgICAgICAgICA/IChidWZmZXJbbmV4dFdyaXRlSW5kZXhdID0gY3JlYXRlUmVzb2x2ZWRJdGVyYXRvclJlc3VsdENodW5rKFxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICExXG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgOiByZXNvbHZlSXRlcmF0b3JSZXN1bHRDaHVuayhcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgYnVmZmVyW25leHRXcml0ZUluZGV4XSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgITFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgbmV4dFdyaXRlSW5kZXgrKztcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGNsb3NlZCA9ICEwO1xuICAgICAgICAgICAgbmV4dFdyaXRlSW5kZXggPT09IGJ1ZmZlci5sZW5ndGhcbiAgICAgICAgICAgICAgPyAoYnVmZmVyW25leHRXcml0ZUluZGV4XSA9IGNyZWF0ZVJlc29sdmVkSXRlcmF0b3JSZXN1bHRDaHVuayhcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAhMFxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgIDogcmVzb2x2ZUl0ZXJhdG9yUmVzdWx0Q2h1bmsoXG4gICAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICAgIGJ1ZmZlcltuZXh0V3JpdGVJbmRleF0sXG4gICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICEwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZvciAobmV4dFdyaXRlSW5kZXgrKzsgbmV4dFdyaXRlSW5kZXggPCBidWZmZXIubGVuZ3RoOyApXG4gICAgICAgICAgICAgIHJlc29sdmVJdGVyYXRvclJlc3VsdENodW5rKFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIGJ1ZmZlcltuZXh0V3JpdGVJbmRleCsrXSxcbiAgICAgICAgICAgICAgICAnXCIkdW5kZWZpbmVkXCInLFxuICAgICAgICAgICAgICAgICEwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjbG9zZWQgPSAhMDtcbiAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgIG5leHRXcml0ZUluZGV4ID09PSBidWZmZXIubGVuZ3RoICYmXG4gICAgICAgICAgICAgIChidWZmZXJbbmV4dFdyaXRlSW5kZXhdID0gY3JlYXRlUGVuZGluZ0NodW5rKHJlc3BvbnNlKSk7XG4gICAgICAgICAgICAgIG5leHRXcml0ZUluZGV4IDwgYnVmZmVyLmxlbmd0aDtcblxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB0cmlnZ2VyRXJyb3JPbkNodW5rKHJlc3BvbnNlLCBidWZmZXJbbmV4dFdyaXRlSW5kZXgrK10sIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0b3BTdHJlYW0ocmVzcG9uc2UsIGlkLCByb3cpIHtcbiAgICAgIChyZXNwb25zZSA9IHJlc3BvbnNlLl9jaHVua3MuZ2V0KGlkKSkgJiZcbiAgICAgICAgXCJmdWxmaWxsZWRcIiA9PT0gcmVzcG9uc2Uuc3RhdHVzICYmXG4gICAgICAgIHJlc3BvbnNlLnJlYXNvbi5jbG9zZShcIlwiID09PSByb3cgPyAnXCIkdW5kZWZpbmVkXCInIDogcm93KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZUVycm9yRGV2KHJlc3BvbnNlLCBlcnJvckluZm8pIHtcbiAgICAgIHZhciBuYW1lID0gZXJyb3JJbmZvLm5hbWUsXG4gICAgICAgIGVudiA9IGVycm9ySW5mby5lbnY7XG4gICAgICBlcnJvckluZm8gPSBidWlsZEZha2VDYWxsU3RhY2soXG4gICAgICAgIHJlc3BvbnNlLFxuICAgICAgICBlcnJvckluZm8uc3RhY2ssXG4gICAgICAgIGVudixcbiAgICAgICAgITEsXG4gICAgICAgIEVycm9yLmJpbmQoXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICBlcnJvckluZm8ubWVzc2FnZSB8fFxuICAgICAgICAgICAgXCJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgU2VydmVyIENvbXBvbmVudHMgcmVuZGVyIGJ1dCBubyBtZXNzYWdlIHdhcyBwcm92aWRlZFwiXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXNwb25zZSA9IGdldFJvb3RUYXNrKHJlc3BvbnNlLCBlbnYpO1xuICAgICAgcmVzcG9uc2UgPSBudWxsICE9IHJlc3BvbnNlID8gcmVzcG9uc2UucnVuKGVycm9ySW5mbykgOiBlcnJvckluZm8oKTtcbiAgICAgIHJlc3BvbnNlLm5hbWUgPSBuYW1lO1xuICAgICAgcmVzcG9uc2UuZW52aXJvbm1lbnROYW1lID0gZW52O1xuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlSGludChyZXNwb25zZSwgY29kZSwgbW9kZWwpIHtcbiAgICAgIHJlc3BvbnNlID0gSlNPTi5wYXJzZShtb2RlbCwgcmVzcG9uc2UuX2Zyb21KU09OKTtcbiAgICAgIG1vZGVsID0gUmVhY3RET01TaGFyZWRJbnRlcm5hbHMuZDtcbiAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICBjYXNlIFwiRFwiOlxuICAgICAgICAgIG1vZGVsLkQocmVzcG9uc2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ1wiOlxuICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiByZXNwb25zZVxuICAgICAgICAgICAgPyBtb2RlbC5DKHJlc3BvbnNlKVxuICAgICAgICAgICAgOiBtb2RlbC5DKHJlc3BvbnNlWzBdLCByZXNwb25zZVsxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMXCI6XG4gICAgICAgICAgY29kZSA9IHJlc3BvbnNlWzBdO1xuICAgICAgICAgIHZhciBhcyA9IHJlc3BvbnNlWzFdO1xuICAgICAgICAgIDMgPT09IHJlc3BvbnNlLmxlbmd0aFxuICAgICAgICAgICAgPyBtb2RlbC5MKGNvZGUsIGFzLCByZXNwb25zZVsyXSlcbiAgICAgICAgICAgIDogbW9kZWwuTChjb2RlLCBhcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHJlc3BvbnNlXG4gICAgICAgICAgICA/IG1vZGVsLm0ocmVzcG9uc2UpXG4gICAgICAgICAgICA6IG1vZGVsLm0ocmVzcG9uc2VbMF0sIHJlc3BvbnNlWzFdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlhcIjpcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcmVzcG9uc2VcbiAgICAgICAgICAgID8gbW9kZWwuWChyZXNwb25zZSlcbiAgICAgICAgICAgIDogbW9kZWwuWChyZXNwb25zZVswXSwgcmVzcG9uc2VbMV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiU1wiOlxuICAgICAgICAgIFwic3RyaW5nXCIgPT09IHR5cGVvZiByZXNwb25zZVxuICAgICAgICAgICAgPyBtb2RlbC5TKHJlc3BvbnNlKVxuICAgICAgICAgICAgOiBtb2RlbC5TKFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlWzBdLFxuICAgICAgICAgICAgICAgIDAgPT09IHJlc3BvbnNlWzFdID8gdm9pZCAwIDogcmVzcG9uc2VbMV0sXG4gICAgICAgICAgICAgICAgMyA9PT0gcmVzcG9uc2UubGVuZ3RoID8gcmVzcG9uc2VbMl0gOiB2b2lkIDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIk1cIjpcbiAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgcmVzcG9uc2VcbiAgICAgICAgICAgID8gbW9kZWwuTShyZXNwb25zZSlcbiAgICAgICAgICAgIDogbW9kZWwuTShyZXNwb25zZVswXSwgcmVzcG9uc2VbMV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGYWtlRnVuY3Rpb24oXG4gICAgICBuYW1lLFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBzb3VyY2VNYXAsXG4gICAgICBsaW5lLFxuICAgICAgY29sLFxuICAgICAgZW5jbG9zaW5nTGluZSxcbiAgICAgIGVuY2xvc2luZ0NvbCxcbiAgICAgIGVudmlyb25tZW50TmFtZVxuICAgICkge1xuICAgICAgbmFtZSB8fCAobmFtZSA9IFwiPGFub255bW91cz5cIik7XG4gICAgICB2YXIgZW5jb2RlZE5hbWUgPSBKU09OLnN0cmluZ2lmeShuYW1lKTtcbiAgICAgIDEgPiBlbmNsb3NpbmdMaW5lID8gKGVuY2xvc2luZ0xpbmUgPSAwKSA6IGVuY2xvc2luZ0xpbmUtLTtcbiAgICAgIDEgPiBlbmNsb3NpbmdDb2wgPyAoZW5jbG9zaW5nQ29sID0gMCkgOiBlbmNsb3NpbmdDb2wtLTtcbiAgICAgIDEgPiBsaW5lID8gKGxpbmUgPSAwKSA6IGxpbmUtLTtcbiAgICAgIDEgPiBjb2wgPyAoY29sID0gMCkgOiBjb2wtLTtcbiAgICAgIGlmIChcbiAgICAgICAgbGluZSA8IGVuY2xvc2luZ0xpbmUgfHxcbiAgICAgICAgKGxpbmUgPT09IGVuY2xvc2luZ0xpbmUgJiYgY29sIDwgZW5jbG9zaW5nQ29sKVxuICAgICAgKVxuICAgICAgICBlbmNsb3NpbmdDb2wgPSBlbmNsb3NpbmdMaW5lID0gMDtcbiAgICAgIDEgPiBsaW5lXG4gICAgICAgID8gKChsaW5lID0gZW5jb2RlZE5hbWUubGVuZ3RoICsgMyksXG4gICAgICAgICAgKGVuY2xvc2luZ0NvbCAtPSBsaW5lKSxcbiAgICAgICAgICAwID4gZW5jbG9zaW5nQ29sICYmIChlbmNsb3NpbmdDb2wgPSAwKSxcbiAgICAgICAgICAoY29sID0gY29sIC0gZW5jbG9zaW5nQ29sIC0gbGluZSAtIDMpLFxuICAgICAgICAgIDAgPiBjb2wgJiYgKGNvbCA9IDApLFxuICAgICAgICAgIChlbmNvZGVkTmFtZSA9XG4gICAgICAgICAgICBcIih7XCIgK1xuICAgICAgICAgICAgZW5jb2RlZE5hbWUgK1xuICAgICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgICAgXCIgXCIucmVwZWF0KGVuY2xvc2luZ0NvbCkgK1xuICAgICAgICAgICAgXCJfPT5cIiArXG4gICAgICAgICAgICBcIiBcIi5yZXBlYXQoY29sKSArXG4gICAgICAgICAgICBcIl8oKX0pXCIpKVxuICAgICAgICA6IDEgPiBlbmNsb3NpbmdMaW5lXG4gICAgICAgICAgPyAoKGVuY2xvc2luZ0NvbCAtPSBlbmNvZGVkTmFtZS5sZW5ndGggKyAzKSxcbiAgICAgICAgICAgIDAgPiBlbmNsb3NpbmdDb2wgJiYgKGVuY2xvc2luZ0NvbCA9IDApLFxuICAgICAgICAgICAgKGVuY29kZWROYW1lID1cbiAgICAgICAgICAgICAgXCIoe1wiICtcbiAgICAgICAgICAgICAgZW5jb2RlZE5hbWUgK1xuICAgICAgICAgICAgICBcIjpcIiArXG4gICAgICAgICAgICAgIFwiIFwiLnJlcGVhdChlbmNsb3NpbmdDb2wpICtcbiAgICAgICAgICAgICAgXCJfPT5cIiArXG4gICAgICAgICAgICAgIFwiXFxuXCIucmVwZWF0KGxpbmUgLSBlbmNsb3NpbmdMaW5lKSArXG4gICAgICAgICAgICAgIFwiIFwiLnJlcGVhdChjb2wpICtcbiAgICAgICAgICAgICAgXCJfKCl9KVwiKSlcbiAgICAgICAgICA6IGVuY2xvc2luZ0xpbmUgPT09IGxpbmVcbiAgICAgICAgICAgID8gKChjb2wgPSBjb2wgLSBlbmNsb3NpbmdDb2wgLSAzKSxcbiAgICAgICAgICAgICAgMCA+IGNvbCAmJiAoY29sID0gMCksXG4gICAgICAgICAgICAgIChlbmNvZGVkTmFtZSA9XG4gICAgICAgICAgICAgICAgXCJcXG5cIi5yZXBlYXQoZW5jbG9zaW5nTGluZSAtIDEpICtcbiAgICAgICAgICAgICAgICBcIih7XCIgK1xuICAgICAgICAgICAgICAgIGVuY29kZWROYW1lICtcbiAgICAgICAgICAgICAgICBcIjpcXG5cIiArXG4gICAgICAgICAgICAgICAgXCIgXCIucmVwZWF0KGVuY2xvc2luZ0NvbCkgK1xuICAgICAgICAgICAgICAgIFwiXz0+XCIgK1xuICAgICAgICAgICAgICAgIFwiIFwiLnJlcGVhdChjb2wpICtcbiAgICAgICAgICAgICAgICBcIl8oKX0pXCIpKVxuICAgICAgICAgICAgOiAoZW5jb2RlZE5hbWUgPVxuICAgICAgICAgICAgICAgIFwiXFxuXCIucmVwZWF0KGVuY2xvc2luZ0xpbmUgLSAxKSArXG4gICAgICAgICAgICAgICAgXCIoe1wiICtcbiAgICAgICAgICAgICAgICBlbmNvZGVkTmFtZSArXG4gICAgICAgICAgICAgICAgXCI6XFxuXCIgK1xuICAgICAgICAgICAgICAgIFwiIFwiLnJlcGVhdChlbmNsb3NpbmdDb2wpICtcbiAgICAgICAgICAgICAgICBcIl89PlwiICtcbiAgICAgICAgICAgICAgICBcIlxcblwiLnJlcGVhdChsaW5lIC0gZW5jbG9zaW5nTGluZSkgK1xuICAgICAgICAgICAgICAgIFwiIFwiLnJlcGVhdChjb2wpICtcbiAgICAgICAgICAgICAgICBcIl8oKX0pXCIpO1xuICAgICAgZW5jb2RlZE5hbWUgPVxuICAgICAgICAxID4gZW5jbG9zaW5nTGluZVxuICAgICAgICAgID8gZW5jb2RlZE5hbWUgK1xuICAgICAgICAgICAgXCJcXG4vKiBUaGlzIG1vZHVsZSB3YXMgcmVuZGVyZWQgYnkgYSBTZXJ2ZXIgQ29tcG9uZW50LiBUdXJuIG9uIFNvdXJjZSBNYXBzIHRvIHNlZSB0aGUgc2VydmVyIHNvdXJjZS4gKi9cIlxuICAgICAgICAgIDogXCIvKiBUaGlzIG1vZHVsZSB3YXMgcmVuZGVyZWQgYnkgYSBTZXJ2ZXIgQ29tcG9uZW50LiBUdXJuIG9uIFNvdXJjZSBNYXBzIHRvIHNlZSB0aGUgc2VydmVyIHNvdXJjZS4gKi9cIiArXG4gICAgICAgICAgICBlbmNvZGVkTmFtZTtcbiAgICAgIGZpbGVuYW1lLnN0YXJ0c1dpdGgoXCIvXCIpICYmIChmaWxlbmFtZSA9IFwiZmlsZTovL1wiICsgZmlsZW5hbWUpO1xuICAgICAgc291cmNlTWFwXG4gICAgICAgID8gKChlbmNvZGVkTmFtZSArPVxuICAgICAgICAgICAgXCJcXG4vLyMgc291cmNlVVJMPXJzYzovL1JlYWN0L1wiICtcbiAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChlbnZpcm9ubWVudE5hbWUpICtcbiAgICAgICAgICAgIFwiL1wiICtcbiAgICAgICAgICAgIGVuY29kZVVSSShmaWxlbmFtZSkgK1xuICAgICAgICAgICAgXCI/XCIgK1xuICAgICAgICAgICAgZmFrZUZ1bmN0aW9uSWR4KyspLFxuICAgICAgICAgIChlbmNvZGVkTmFtZSArPSBcIlxcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVwiICsgc291cmNlTWFwKSlcbiAgICAgICAgOiAoZW5jb2RlZE5hbWUgPSBmaWxlbmFtZVxuICAgICAgICAgICAgPyBlbmNvZGVkTmFtZSArIChcIlxcbi8vIyBzb3VyY2VVUkw9XCIgKyBlbmNvZGVVUkkoZmlsZW5hbWUpKVxuICAgICAgICAgICAgOiBlbmNvZGVkTmFtZSArIFwiXFxuLy8jIHNvdXJjZVVSTD08YW5vbnltb3VzPlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBmbiA9ICgwLCBldmFsKShlbmNvZGVkTmFtZSlbbmFtZV07XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIGZuID0gZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgICByZXR1cm4gXygpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZuO1xuICAgIH1cbiAgICBmdW5jdGlvbiBidWlsZEZha2VDYWxsU3RhY2soXG4gICAgICByZXNwb25zZSxcbiAgICAgIHN0YWNrLFxuICAgICAgZW52aXJvbm1lbnROYW1lLFxuICAgICAgdXNlRW5jbG9zaW5nTGluZSxcbiAgICAgIGlubmVyQ2FsbFxuICAgICkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFjay5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZnJhbWUgPSBzdGFja1tpXSxcbiAgICAgICAgICBmcmFtZUtleSA9XG4gICAgICAgICAgICBmcmFtZS5qb2luKFwiLVwiKSArXG4gICAgICAgICAgICBcIi1cIiArXG4gICAgICAgICAgICBlbnZpcm9ubWVudE5hbWUgK1xuICAgICAgICAgICAgKHVzZUVuY2xvc2luZ0xpbmUgPyBcIi1lXCIgOiBcIi1uXCIpLFxuICAgICAgICAgIGZuID0gZmFrZUZ1bmN0aW9uQ2FjaGUuZ2V0KGZyYW1lS2V5KTtcbiAgICAgICAgaWYgKHZvaWQgMCA9PT0gZm4pIHtcbiAgICAgICAgICBmbiA9IGZyYW1lWzBdO1xuICAgICAgICAgIHZhciBmaWxlbmFtZSA9IGZyYW1lWzFdLFxuICAgICAgICAgICAgbGluZSA9IGZyYW1lWzJdLFxuICAgICAgICAgICAgY29sID0gZnJhbWVbM10sXG4gICAgICAgICAgICBlbmNsb3NpbmdMaW5lID0gZnJhbWVbNF07XG4gICAgICAgICAgZnJhbWUgPSBmcmFtZVs1XTtcbiAgICAgICAgICB2YXIgZmluZFNvdXJjZU1hcFVSTCA9IHJlc3BvbnNlLl9kZWJ1Z0ZpbmRTb3VyY2VNYXBVUkw7XG4gICAgICAgICAgZmluZFNvdXJjZU1hcFVSTCA9IGZpbmRTb3VyY2VNYXBVUkxcbiAgICAgICAgICAgID8gZmluZFNvdXJjZU1hcFVSTChmaWxlbmFtZSwgZW52aXJvbm1lbnROYW1lKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIGZuID0gY3JlYXRlRmFrZUZ1bmN0aW9uKFxuICAgICAgICAgICAgZm4sXG4gICAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICAgIGZpbmRTb3VyY2VNYXBVUkwsXG4gICAgICAgICAgICBsaW5lLFxuICAgICAgICAgICAgY29sLFxuICAgICAgICAgICAgdXNlRW5jbG9zaW5nTGluZSA/IGxpbmUgOiBlbmNsb3NpbmdMaW5lLFxuICAgICAgICAgICAgdXNlRW5jbG9zaW5nTGluZSA/IGNvbCA6IGZyYW1lLFxuICAgICAgICAgICAgZW52aXJvbm1lbnROYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgICBmYWtlRnVuY3Rpb25DYWNoZS5zZXQoZnJhbWVLZXksIGZuKTtcbiAgICAgICAgfVxuICAgICAgICBpbm5lckNhbGwgPSBmbi5iaW5kKG51bGwsIGlubmVyQ2FsbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5uZXJDYWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRSb290VGFzayhyZXNwb25zZSwgY2hpbGRFbnZpcm9ubWVudE5hbWUpIHtcbiAgICAgIHZhciByb290VGFzayA9IHJlc3BvbnNlLl9kZWJ1Z1Jvb3RUYXNrO1xuICAgICAgcmV0dXJuIHJvb3RUYXNrXG4gICAgICAgID8gcmVzcG9uc2UuX3Jvb3RFbnZpcm9ubWVudE5hbWUgIT09IGNoaWxkRW52aXJvbm1lbnROYW1lXG4gICAgICAgICAgPyAoKHJlc3BvbnNlID0gY29uc29sZS5jcmVhdGVUYXNrLmJpbmQoXG4gICAgICAgICAgICAgIGNvbnNvbGUsXG4gICAgICAgICAgICAgICdcInVzZSAnICsgY2hpbGRFbnZpcm9ubWVudE5hbWUudG9Mb3dlckNhc2UoKSArICdcIidcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgcm9vdFRhc2sucnVuKHJlc3BvbnNlKSlcbiAgICAgICAgICA6IHJvb3RUYXNrXG4gICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdGlhbGl6ZUZha2VUYXNrKHJlc3BvbnNlLCBkZWJ1Z0luZm8pIHtcbiAgICAgIGlmICghc3VwcG9ydHNDcmVhdGVUYXNrIHx8IG51bGwgPT0gZGVidWdJbmZvLnN0YWNrKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBjYWNoZWRFbnRyeSA9IGRlYnVnSW5mby5kZWJ1Z1Rhc2s7XG4gICAgICBpZiAodm9pZCAwICE9PSBjYWNoZWRFbnRyeSkgcmV0dXJuIGNhY2hlZEVudHJ5O1xuICAgICAgdmFyIHVzZUVuY2xvc2luZ0xpbmUgPSB2b2lkIDAgPT09IGRlYnVnSW5mby5rZXksXG4gICAgICAgIHN0YWNrID0gZGVidWdJbmZvLnN0YWNrLFxuICAgICAgICBlbnYgPVxuICAgICAgICAgIG51bGwgPT0gZGVidWdJbmZvLmVudiA/IHJlc3BvbnNlLl9yb290RW52aXJvbm1lbnROYW1lIDogZGVidWdJbmZvLmVudjtcbiAgICAgIGNhY2hlZEVudHJ5ID1cbiAgICAgICAgbnVsbCA9PSBkZWJ1Z0luZm8ub3duZXIgfHwgbnVsbCA9PSBkZWJ1Z0luZm8ub3duZXIuZW52XG4gICAgICAgICAgPyByZXNwb25zZS5fcm9vdEVudmlyb25tZW50TmFtZVxuICAgICAgICAgIDogZGVidWdJbmZvLm93bmVyLmVudjtcbiAgICAgIHZhciBvd25lclRhc2sgPVxuICAgICAgICBudWxsID09IGRlYnVnSW5mby5vd25lclxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogaW5pdGlhbGl6ZUZha2VUYXNrKHJlc3BvbnNlLCBkZWJ1Z0luZm8ub3duZXIpO1xuICAgICAgZW52ID1cbiAgICAgICAgZW52ICE9PSBjYWNoZWRFbnRyeVxuICAgICAgICAgID8gJ1widXNlICcgKyBlbnYudG9Mb3dlckNhc2UoKSArICdcIidcbiAgICAgICAgICA6IHZvaWQgMCAhPT0gZGVidWdJbmZvLmtleVxuICAgICAgICAgICAgPyBcIjxcIiArIChkZWJ1Z0luZm8ubmFtZSB8fCBcIi4uLlwiKSArIFwiPlwiXG4gICAgICAgICAgICA6IHZvaWQgMCAhPT0gZGVidWdJbmZvLm5hbWVcbiAgICAgICAgICAgICAgPyBkZWJ1Z0luZm8ubmFtZSB8fCBcInVua25vd25cIlxuICAgICAgICAgICAgICA6IFwiYXdhaXQgXCIgKyAoZGVidWdJbmZvLmF3YWl0ZWQubmFtZSB8fCBcInVua25vd25cIik7XG4gICAgICBlbnYgPSBjb25zb2xlLmNyZWF0ZVRhc2suYmluZChjb25zb2xlLCBlbnYpO1xuICAgICAgdXNlRW5jbG9zaW5nTGluZSA9IGJ1aWxkRmFrZUNhbGxTdGFjayhcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBjYWNoZWRFbnRyeSxcbiAgICAgICAgdXNlRW5jbG9zaW5nTGluZSxcbiAgICAgICAgZW52XG4gICAgICApO1xuICAgICAgbnVsbCA9PT0gb3duZXJUYXNrXG4gICAgICAgID8gKChyZXNwb25zZSA9IGdldFJvb3RUYXNrKHJlc3BvbnNlLCBjYWNoZWRFbnRyeSkpLFxuICAgICAgICAgIChyZXNwb25zZSA9XG4gICAgICAgICAgICBudWxsICE9IHJlc3BvbnNlXG4gICAgICAgICAgICAgID8gcmVzcG9uc2UucnVuKHVzZUVuY2xvc2luZ0xpbmUpXG4gICAgICAgICAgICAgIDogdXNlRW5jbG9zaW5nTGluZSgpKSlcbiAgICAgICAgOiAocmVzcG9uc2UgPSBvd25lclRhc2sucnVuKHVzZUVuY2xvc2luZ0xpbmUpKTtcbiAgICAgIHJldHVybiAoZGVidWdJbmZvLmRlYnVnVGFzayA9IHJlc3BvbnNlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmFrZUpTWENhbGxTaXRlKCkge1xuICAgICAgcmV0dXJuIEVycm9yKFwicmVhY3Qtc3RhY2stdG9wLWZyYW1lXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0aWFsaXplRmFrZVN0YWNrKHJlc3BvbnNlLCBkZWJ1Z0luZm8pIHtcbiAgICAgIGlmICh2b2lkIDAgPT09IGRlYnVnSW5mby5kZWJ1Z1N0YWNrKSB7XG4gICAgICAgIG51bGwgIT0gZGVidWdJbmZvLnN0YWNrICYmXG4gICAgICAgICAgKGRlYnVnSW5mby5kZWJ1Z1N0YWNrID0gY3JlYXRlRmFrZUpTWENhbGxTdGFja0luREVWKFxuICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICBkZWJ1Z0luZm8uc3RhY2ssXG4gICAgICAgICAgICBudWxsID09IGRlYnVnSW5mby5lbnYgPyBcIlwiIDogZGVidWdJbmZvLmVudlxuICAgICAgICAgICkpO1xuICAgICAgICB2YXIgb3duZXIgPSBkZWJ1Z0luZm8ub3duZXI7XG4gICAgICAgIG51bGwgIT0gb3duZXIgJiZcbiAgICAgICAgICAoaW5pdGlhbGl6ZUZha2VTdGFjayhyZXNwb25zZSwgb3duZXIpLFxuICAgICAgICAgIHZvaWQgMCA9PT0gb3duZXIuZGVidWdMb2NhdGlvbiAmJlxuICAgICAgICAgICAgbnVsbCAhPSBkZWJ1Z0luZm8uZGVidWdTdGFjayAmJlxuICAgICAgICAgICAgKG93bmVyLmRlYnVnTG9jYXRpb24gPSBkZWJ1Z0luZm8uZGVidWdTdGFjaykpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlRGVidWdJbmZvKHJlc3BvbnNlLCBpZCwgZGVidWdJbmZvKSB7XG4gICAgICB2b2lkIDAgIT09IGRlYnVnSW5mby5zdGFjayAmJiBpbml0aWFsaXplRmFrZVRhc2socmVzcG9uc2UsIGRlYnVnSW5mbyk7XG4gICAgICBudWxsID09IGRlYnVnSW5mby5vd25lciAmJiBudWxsICE9IHJlc3BvbnNlLl9kZWJ1Z1Jvb3RPd25lclxuICAgICAgICA/ICgoZGVidWdJbmZvLm93bmVyID0gcmVzcG9uc2UuX2RlYnVnUm9vdE93bmVyKSxcbiAgICAgICAgICAoZGVidWdJbmZvLnN0YWNrID0gbnVsbCksXG4gICAgICAgICAgKGRlYnVnSW5mby5kZWJ1Z1N0YWNrID0gcmVzcG9uc2UuX2RlYnVnUm9vdFN0YWNrKSxcbiAgICAgICAgICAoZGVidWdJbmZvLmRlYnVnVGFzayA9IHJlc3BvbnNlLl9kZWJ1Z1Jvb3RUYXNrKSlcbiAgICAgICAgOiB2b2lkIDAgIT09IGRlYnVnSW5mby5zdGFjayAmJlxuICAgICAgICAgIGluaXRpYWxpemVGYWtlU3RhY2socmVzcG9uc2UsIGRlYnVnSW5mbyk7XG4gICAgICByZXNwb25zZSA9IGdldENodW5rKHJlc3BvbnNlLCBpZCk7XG4gICAgICAocmVzcG9uc2UuX2RlYnVnSW5mbyB8fCAocmVzcG9uc2UuX2RlYnVnSW5mbyA9IFtdKSkucHVzaChkZWJ1Z0luZm8pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDdXJyZW50U3RhY2tJbkRFVigpIHtcbiAgICAgIHZhciBvd25lciA9IGN1cnJlbnRPd25lckluREVWO1xuICAgICAgaWYgKG51bGwgPT09IG93bmVyKSByZXR1cm4gXCJcIjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBpbmZvID0gXCJcIjtcbiAgICAgICAgaWYgKG93bmVyLm93bmVyIHx8IFwic3RyaW5nXCIgIT09IHR5cGVvZiBvd25lci5uYW1lKSB7XG4gICAgICAgICAgZm9yICg7IG93bmVyOyApIHtcbiAgICAgICAgICAgIHZhciBvd25lclN0YWNrID0gb3duZXIuZGVidWdTdGFjaztcbiAgICAgICAgICAgIGlmIChudWxsICE9IG93bmVyU3RhY2spIHtcbiAgICAgICAgICAgICAgaWYgKChvd25lciA9IG93bmVyLm93bmVyKSkge1xuICAgICAgICAgICAgICAgIHZhciBKU0NvbXBpbGVyX3RlbXBfY29uc3QgPSBpbmZvO1xuICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IG93bmVyU3RhY2ssXG4gICAgICAgICAgICAgICAgICBwcmV2UHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtcbiAgICAgICAgICAgICAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICB2YXIgc3RhY2sgPSBlcnJvci5zdGFjaztcbiAgICAgICAgICAgICAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXZQcmVwYXJlU3RhY2tUcmFjZTtcbiAgICAgICAgICAgICAgICBzdGFjay5zdGFydHNXaXRoKFwiRXJyb3I6IHJlYWN0LXN0YWNrLXRvcC1mcmFtZVxcblwiKSAmJlxuICAgICAgICAgICAgICAgICAgKHN0YWNrID0gc3RhY2suc2xpY2UoMjkpKTtcbiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gc3RhY2suaW5kZXhPZihcIlxcblwiKTtcbiAgICAgICAgICAgICAgICAtMSAhPT0gaWR4ICYmIChzdGFjayA9IHN0YWNrLnNsaWNlKGlkeCArIDEpKTtcbiAgICAgICAgICAgICAgICBpZHggPSBzdGFjay5pbmRleE9mKFwicmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lXCIpO1xuICAgICAgICAgICAgICAgIC0xICE9PSBpZHggJiYgKGlkeCA9IHN0YWNrLmxhc3RJbmRleE9mKFwiXFxuXCIsIGlkeCkpO1xuICAgICAgICAgICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPVxuICAgICAgICAgICAgICAgICAgLTEgIT09IGlkeCA/IChzdGFjayA9IHN0YWNrLnNsaWNlKDAsIGlkeCkpIDogXCJcIjtcbiAgICAgICAgICAgICAgICBpbmZvID1cbiAgICAgICAgICAgICAgICAgIEpTQ29tcGlsZXJfdGVtcF9jb25zdCArIChcIlxcblwiICsgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQwID0gaW5mbztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBKU0NvbXBpbGVyX3RlbXBfY29uc3QgPSBvd25lci5uYW1lO1xuICAgICAgICAgIGlmICh2b2lkIDAgPT09IHByZWZpeClcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgIChwcmVmaXggPVxuICAgICAgICAgICAgICAgICgoZXJyb3IgPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pKSAmJiBlcnJvclsxXSkgfHxcbiAgICAgICAgICAgICAgICBcIlwiKSxcbiAgICAgICAgICAgICAgICAoc3VmZml4ID1cbiAgICAgICAgICAgICAgICAgIC0xIDwgeC5zdGFjay5pbmRleE9mKFwiXFxuICAgIGF0XCIpXG4gICAgICAgICAgICAgICAgICAgID8gXCIgKDxhbm9ueW1vdXM+KVwiXG4gICAgICAgICAgICAgICAgICAgIDogLTEgPCB4LnN0YWNrLmluZGV4T2YoXCJAXCIpXG4gICAgICAgICAgICAgICAgICAgICAgPyBcIkB1bmtub3duOjA6MFwiXG4gICAgICAgICAgICAgICAgICAgICAgOiBcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDAgPVxuICAgICAgICAgICAgXCJcXG5cIiArIHByZWZpeCArIEpTQ29tcGlsZXJfdGVtcF9jb25zdCArIHN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDAgPVxuICAgICAgICAgIFwiXFxuRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogXCIgKyB4Lm1lc3NhZ2UgKyBcIlxcblwiICsgeC5zdGFjaztcbiAgICAgIH1cbiAgICAgIHJldHVybiBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVDb25zb2xlRW50cnkocmVzcG9uc2UsIHZhbHVlKSB7XG4gICAgICBpZiAocmVzcG9uc2UuX3JlcGxheUNvbnNvbGUpIHtcbiAgICAgICAgdmFyIHBheWxvYWQgPSBKU09OLnBhcnNlKHZhbHVlLCByZXNwb25zZS5fZnJvbUpTT04pO1xuICAgICAgICB2YWx1ZSA9IHBheWxvYWRbMF07XG4gICAgICAgIHZhciBzdGFja1RyYWNlID0gcGF5bG9hZFsxXSxcbiAgICAgICAgICBvd25lciA9IHBheWxvYWRbMl0sXG4gICAgICAgICAgZW52ID0gcGF5bG9hZFszXTtcbiAgICAgICAgcGF5bG9hZCA9IHBheWxvYWQuc2xpY2UoNCk7XG4gICAgICAgIHJlcGxheUNvbnNvbGVXaXRoQ2FsbFN0YWNrSW5ERVYoXG4gICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgc3RhY2tUcmFjZSxcbiAgICAgICAgICBvd25lcixcbiAgICAgICAgICBlbnYsXG4gICAgICAgICAgcGF5bG9hZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBtZXJnZUJ1ZmZlcihidWZmZXIsIGxhc3RDaHVuaykge1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGwgPSBidWZmZXIubGVuZ3RoLCBieXRlTGVuZ3RoID0gbGFzdENodW5rLmxlbmd0aCwgaSA9IDA7XG4gICAgICAgIGkgPCBsO1xuICAgICAgICBpKytcbiAgICAgIClcbiAgICAgICAgYnl0ZUxlbmd0aCArPSBidWZmZXJbaV0uYnl0ZUxlbmd0aDtcbiAgICAgIGJ5dGVMZW5ndGggPSBuZXcgVWludDhBcnJheShieXRlTGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIF9pMyA9IChpID0gMCk7IF9pMyA8IGw7IF9pMysrKSB7XG4gICAgICAgIHZhciBjaHVuayA9IGJ1ZmZlcltfaTNdO1xuICAgICAgICBieXRlTGVuZ3RoLnNldChjaHVuaywgaSk7XG4gICAgICAgIGkgKz0gY2h1bmsuYnl0ZUxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGJ5dGVMZW5ndGguc2V0KGxhc3RDaHVuaywgaSk7XG4gICAgICByZXR1cm4gYnl0ZUxlbmd0aDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVR5cGVkQXJyYXkoXG4gICAgICByZXNwb25zZSxcbiAgICAgIGlkLFxuICAgICAgYnVmZmVyLFxuICAgICAgbGFzdENodW5rLFxuICAgICAgY29uc3RydWN0b3IsXG4gICAgICBieXRlc1BlckVsZW1lbnRcbiAgICApIHtcbiAgICAgIGJ1ZmZlciA9XG4gICAgICAgIDAgPT09IGJ1ZmZlci5sZW5ndGggJiYgMCA9PT0gbGFzdENodW5rLmJ5dGVPZmZzZXQgJSBieXRlc1BlckVsZW1lbnRcbiAgICAgICAgICA/IGxhc3RDaHVua1xuICAgICAgICAgIDogbWVyZ2VCdWZmZXIoYnVmZmVyLCBsYXN0Q2h1bmspO1xuICAgICAgY29uc3RydWN0b3IgPSBuZXcgY29uc3RydWN0b3IoXG4gICAgICAgIGJ1ZmZlci5idWZmZXIsXG4gICAgICAgIGJ1ZmZlci5ieXRlT2Zmc2V0LFxuICAgICAgICBidWZmZXIuYnl0ZUxlbmd0aCAvIGJ5dGVzUGVyRWxlbWVudFxuICAgICAgKTtcbiAgICAgIHJlc29sdmVCdWZmZXIocmVzcG9uc2UsIGlkLCBjb25zdHJ1Y3Rvcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZsdXNoSW5pdGlhbFJlbmRlclBlcmZvcm1hbmNlKCkge31cbiAgICBmdW5jdGlvbiBwcm9jZXNzRnVsbEJpbmFyeVJvdyhyZXNwb25zZSwgaWQsIHRhZywgYnVmZmVyLCBjaHVuaykge1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSA2NTpcbiAgICAgICAgICByZXNvbHZlQnVmZmVyKHJlc3BvbnNlLCBpZCwgbWVyZ2VCdWZmZXIoYnVmZmVyLCBjaHVuaykuYnVmZmVyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgNzk6XG4gICAgICAgICAgcmVzb2x2ZVR5cGVkQXJyYXkocmVzcG9uc2UsIGlkLCBidWZmZXIsIGNodW5rLCBJbnQ4QXJyYXksIDEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAxMTE6XG4gICAgICAgICAgcmVzb2x2ZUJ1ZmZlcihcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAwID09PSBidWZmZXIubGVuZ3RoID8gY2h1bmsgOiBtZXJnZUJ1ZmZlcihidWZmZXIsIGNodW5rKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIDg1OlxuICAgICAgICAgIHJlc29sdmVUeXBlZEFycmF5KHJlc3BvbnNlLCBpZCwgYnVmZmVyLCBjaHVuaywgVWludDhDbGFtcGVkQXJyYXksIDEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSA4MzpcbiAgICAgICAgICByZXNvbHZlVHlwZWRBcnJheShyZXNwb25zZSwgaWQsIGJ1ZmZlciwgY2h1bmssIEludDE2QXJyYXksIDIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgcmVzb2x2ZVR5cGVkQXJyYXkocmVzcG9uc2UsIGlkLCBidWZmZXIsIGNodW5rLCBVaW50MTZBcnJheSwgMik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIDc2OlxuICAgICAgICAgIHJlc29sdmVUeXBlZEFycmF5KHJlc3BvbnNlLCBpZCwgYnVmZmVyLCBjaHVuaywgSW50MzJBcnJheSwgNCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgICByZXNvbHZlVHlwZWRBcnJheShyZXNwb25zZSwgaWQsIGJ1ZmZlciwgY2h1bmssIFVpbnQzMkFycmF5LCA0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgNzE6XG4gICAgICAgICAgcmVzb2x2ZVR5cGVkQXJyYXkocmVzcG9uc2UsIGlkLCBidWZmZXIsIGNodW5rLCBGbG9hdDMyQXJyYXksIDQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAxMDM6XG4gICAgICAgICAgcmVzb2x2ZVR5cGVkQXJyYXkocmVzcG9uc2UsIGlkLCBidWZmZXIsIGNodW5rLCBGbG9hdDY0QXJyYXksIDgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSA3NzpcbiAgICAgICAgICByZXNvbHZlVHlwZWRBcnJheShyZXNwb25zZSwgaWQsIGJ1ZmZlciwgY2h1bmssIEJpZ0ludDY0QXJyYXksIDgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgcmVzb2x2ZVR5cGVkQXJyYXkocmVzcG9uc2UsIGlkLCBidWZmZXIsIGNodW5rLCBCaWdVaW50NjRBcnJheSwgOCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIDg2OlxuICAgICAgICAgIHJlc29sdmVUeXBlZEFycmF5KHJlc3BvbnNlLCBpZCwgYnVmZmVyLCBjaHVuaywgRGF0YVZpZXcsIDEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBzdHJpbmdEZWNvZGVyID0gcmVzcG9uc2UuX3N0cmluZ0RlY29kZXIsIHJvdyA9IFwiXCIsIGkgPSAwO1xuICAgICAgICBpIDwgYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgaSsrXG4gICAgICApXG4gICAgICAgIHJvdyArPSBzdHJpbmdEZWNvZGVyLmRlY29kZShidWZmZXJbaV0sIGRlY29kZXJPcHRpb25zKTtcbiAgICAgIHJvdyArPSBzdHJpbmdEZWNvZGVyLmRlY29kZShjaHVuayk7XG4gICAgICBwcm9jZXNzRnVsbFN0cmluZ1JvdyhyZXNwb25zZSwgaWQsIHRhZywgcm93KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc0Z1bGxTdHJpbmdSb3cocmVzcG9uc2UsIGlkLCB0YWcsIHJvdykge1xuICAgICAgc3dpdGNoICh0YWcpIHtcbiAgICAgICAgY2FzZSA3MzpcbiAgICAgICAgICByZXNvbHZlTW9kdWxlKHJlc3BvbnNlLCBpZCwgcm93KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA3MjpcbiAgICAgICAgICByZXNvbHZlSGludChyZXNwb25zZSwgcm93WzBdLCByb3cuc2xpY2UoMSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY5OlxuICAgICAgICAgIHJvdyA9IEpTT04ucGFyc2Uocm93KTtcbiAgICAgICAgICB0YWcgPSByZXNvbHZlRXJyb3JEZXYocmVzcG9uc2UsIHJvdyk7XG4gICAgICAgICAgdGFnLmRpZ2VzdCA9IHJvdy5kaWdlc3Q7XG4gICAgICAgICAgcm93ID0gcmVzcG9uc2UuX2NodW5rcztcbiAgICAgICAgICB2YXIgY2h1bmsgPSByb3cuZ2V0KGlkKTtcbiAgICAgICAgICBjaHVua1xuICAgICAgICAgICAgPyB0cmlnZ2VyRXJyb3JPbkNodW5rKHJlc3BvbnNlLCBjaHVuaywgdGFnKVxuICAgICAgICAgICAgOiByb3cuc2V0KGlkLCBuZXcgUmVhY3RQcm9taXNlKFwicmVqZWN0ZWRcIiwgbnVsbCwgdGFnKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODQ6XG4gICAgICAgICAgcmVzb2x2ZVRleHQocmVzcG9uc2UsIGlkLCByb3cpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc4OlxuICAgICAgICBjYXNlIDY4OlxuICAgICAgICAgIHRhZyA9IG5ldyBSZWFjdFByb21pc2UoXCJyZXNvbHZlZF9tb2RlbFwiLCByb3csIHJlc3BvbnNlKTtcbiAgICAgICAgICBpbml0aWFsaXplTW9kZWxDaHVuayh0YWcpO1xuICAgICAgICAgIFwiZnVsZmlsbGVkXCIgPT09IHRhZy5zdGF0dXNcbiAgICAgICAgICAgID8gcmVzb2x2ZURlYnVnSW5mbyhyZXNwb25zZSwgaWQsIHRhZy52YWx1ZSlcbiAgICAgICAgICAgIDogdGFnLnRoZW4oXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlRGVidWdJbmZvKHJlc3BvbnNlLCBpZCwgdik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7fVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDc0OlxuICAgICAgICBjYXNlIDg3OlxuICAgICAgICAgIHJlc29sdmVDb25zb2xlRW50cnkocmVzcG9uc2UsIHJvdyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgODI6XG4gICAgICAgICAgc3RhcnRSZWFkYWJsZVN0cmVhbShyZXNwb25zZSwgaWQsIHZvaWQgMCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTE0OlxuICAgICAgICAgIHN0YXJ0UmVhZGFibGVTdHJlYW0ocmVzcG9uc2UsIGlkLCBcImJ5dGVzXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDg4OlxuICAgICAgICAgIHN0YXJ0QXN5bmNJdGVyYWJsZShyZXNwb25zZSwgaWQsICExKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxMjA6XG4gICAgICAgICAgc3RhcnRBc3luY0l0ZXJhYmxlKHJlc3BvbnNlLCBpZCwgITApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDY3OlxuICAgICAgICAgIHN0b3BTdHJlYW0ocmVzcG9uc2UsIGlkLCByb3cpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIFwiXCIgPT09IHJvd1xuICAgICAgICAgICAgPyByZXNvbHZlRGVidWdIYWx0KHJlc3BvbnNlLCBpZClcbiAgICAgICAgICAgIDogcmVzb2x2ZU1vZGVsKHJlc3BvbnNlLCBpZCwgcm93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc0JpbmFyeUNodW5rKHdlYWtSZXNwb25zZSwgc3RyZWFtU3RhdGUsIGNodW5rKSB7XG4gICAgICBpZiAodm9pZCAwICE9PSB3ZWFrUmVzcG9uc2Uud2Vhay5kZXJlZigpKSB7XG4gICAgICAgIHZhciByZXNwb25zZSA9IHVud3JhcFdlYWtSZXNwb25zZSh3ZWFrUmVzcG9uc2UpLFxuICAgICAgICAgIGkgPSAwLFxuICAgICAgICAgIHJvd1N0YXRlID0gc3RyZWFtU3RhdGUuX3Jvd1N0YXRlO1xuICAgICAgICB3ZWFrUmVzcG9uc2UgPSBzdHJlYW1TdGF0ZS5fcm93SUQ7XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdmFyIHJvd1RhZyA9IHN0cmVhbVN0YXRlLl9yb3dUYWcsXG4gICAgICAgICAgICByb3dMZW5ndGggPSBzdHJlYW1TdGF0ZS5fcm93TGVuZ3RoLFxuICAgICAgICAgICAgYnVmZmVyID0gc3RyZWFtU3RhdGUuX2J1ZmZlcixcbiAgICAgICAgICAgIGNodW5rTGVuZ3RoID0gY2h1bmsubGVuZ3RoO1xuICAgICAgICAgIGkgPCBjaHVua0xlbmd0aDtcblxuICAgICAgICApIHtcbiAgICAgICAgICB2YXIgbGFzdElkeCA9IC0xO1xuICAgICAgICAgIHN3aXRjaCAocm93U3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGFzdElkeCA9IGNodW5rW2krK107XG4gICAgICAgICAgICAgIDU4ID09PSBsYXN0SWR4XG4gICAgICAgICAgICAgICAgPyAocm93U3RhdGUgPSAxKVxuICAgICAgICAgICAgICAgIDogKHdlYWtSZXNwb25zZSA9XG4gICAgICAgICAgICAgICAgICAgICh3ZWFrUmVzcG9uc2UgPDwgNCkgfFxuICAgICAgICAgICAgICAgICAgICAoOTYgPCBsYXN0SWR4ID8gbGFzdElkeCAtIDg3IDogbGFzdElkeCAtIDQ4KSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICByb3dTdGF0ZSA9IGNodW5rW2ldO1xuICAgICAgICAgICAgICA4NCA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgNjUgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgIDc5ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAxMTEgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgIDg1ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICA4MyA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgMTE1ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICA3NiA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgMTA4ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICA3MSA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgMTAzID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICA3NyA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgMTA5ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICA4NiA9PT0gcm93U3RhdGVcbiAgICAgICAgICAgICAgICA/ICgocm93VGFnID0gcm93U3RhdGUpLCAocm93U3RhdGUgPSAyKSwgaSsrKVxuICAgICAgICAgICAgICAgIDogKDY0IDwgcm93U3RhdGUgJiYgOTEgPiByb3dTdGF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgMzUgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgICAgIDExNCA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICAgICAgMTIwID09PSByb3dTdGF0ZVxuICAgICAgICAgICAgICAgICAgPyAoKHJvd1RhZyA9IHJvd1N0YXRlKSwgKHJvd1N0YXRlID0gMyksIGkrKylcbiAgICAgICAgICAgICAgICAgIDogKChyb3dUYWcgPSAwKSwgKHJvd1N0YXRlID0gMykpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbGFzdElkeCA9IGNodW5rW2krK107XG4gICAgICAgICAgICAgIDQ0ID09PSBsYXN0SWR4XG4gICAgICAgICAgICAgICAgPyAocm93U3RhdGUgPSA0KVxuICAgICAgICAgICAgICAgIDogKHJvd0xlbmd0aCA9XG4gICAgICAgICAgICAgICAgICAgIChyb3dMZW5ndGggPDwgNCkgfFxuICAgICAgICAgICAgICAgICAgICAoOTYgPCBsYXN0SWR4ID8gbGFzdElkeCAtIDg3IDogbGFzdElkeCAtIDQ4KSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBsYXN0SWR4ID0gY2h1bmsuaW5kZXhPZigxMCwgaSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAobGFzdElkeCA9IGkgKyByb3dMZW5ndGgpLFxuICAgICAgICAgICAgICAgIGxhc3RJZHggPiBjaHVuay5sZW5ndGggJiYgKGxhc3RJZHggPSAtMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBvZmZzZXQgPSBjaHVuay5ieXRlT2Zmc2V0ICsgaTtcbiAgICAgICAgICBpZiAoLTEgPCBsYXN0SWR4KVxuICAgICAgICAgICAgKHJvd0xlbmd0aCA9IG5ldyBVaW50OEFycmF5KGNodW5rLmJ1ZmZlciwgb2Zmc2V0LCBsYXN0SWR4IC0gaSkpLFxuICAgICAgICAgICAgICBwcm9jZXNzRnVsbEJpbmFyeVJvdyhcbiAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICB3ZWFrUmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgcm93VGFnLFxuICAgICAgICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICAgICAgICByb3dMZW5ndGhcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKGkgPSBsYXN0SWR4KSxcbiAgICAgICAgICAgICAgMyA9PT0gcm93U3RhdGUgJiYgaSsrLFxuICAgICAgICAgICAgICAocm93TGVuZ3RoID0gd2Vha1Jlc3BvbnNlID0gcm93VGFnID0gcm93U3RhdGUgPSAwKSxcbiAgICAgICAgICAgICAgKGJ1ZmZlci5sZW5ndGggPSAwKTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoY2h1bmsuYnVmZmVyLCBvZmZzZXQsIGNodW5rLmJ5dGVMZW5ndGggLSBpKTtcbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKGNodW5rKTtcbiAgICAgICAgICAgIHJvd0xlbmd0aCAtPSBjaHVuay5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0cmVhbVN0YXRlLl9yb3dTdGF0ZSA9IHJvd1N0YXRlO1xuICAgICAgICBzdHJlYW1TdGF0ZS5fcm93SUQgPSB3ZWFrUmVzcG9uc2U7XG4gICAgICAgIHN0cmVhbVN0YXRlLl9yb3dUYWcgPSByb3dUYWc7XG4gICAgICAgIHN0cmVhbVN0YXRlLl9yb3dMZW5ndGggPSByb3dMZW5ndGg7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZyb21KU09OQ2FsbGJhY2socmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHZhbHVlKVxuICAgICAgICAgIHJldHVybiBwYXJzZU1vZGVsU3RyaW5nKHJlc3BvbnNlLCB0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB2YWx1ZSAmJiBudWxsICE9PSB2YWx1ZSkge1xuICAgICAgICAgIGlmICh2YWx1ZVswXSA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKVxuICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICB2YXIgb3duZXIgPSB2YWx1ZVs0XTtcbiAgICAgICAgICAgICAga2V5ID0gdmFsdWVbNV07XG4gICAgICAgICAgICAgIHZhciB2YWxpZGF0ZWQgPSB2YWx1ZVs2XTtcbiAgICAgICAgICAgICAgdmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAgICAgICAgICAgICB0eXBlOiB2YWx1ZVsxXSxcbiAgICAgICAgICAgICAgICBrZXk6IHZhbHVlWzJdLFxuICAgICAgICAgICAgICAgIHByb3BzOiB2YWx1ZVszXSxcbiAgICAgICAgICAgICAgICBfb3duZXI6IHZvaWQgMCA9PT0gb3duZXIgPyBudWxsIDogb3duZXJcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbHVlLCBcInJlZlwiLCB7XG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgICAgICAgICAgZ2V0OiBudWxsUmVmR2V0dGVyXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB2YWx1ZS5fc3RvcmUgPSB7fTtcbiAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbHVlLl9zdG9yZSwgXCJ2YWxpZGF0ZWRcIiwge1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITEsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWxpZGF0ZWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgXCJfZGVidWdJbmZvXCIsIHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbHVlLCBcIl9kZWJ1Z1N0YWNrXCIsIHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdm9pZCAwID09PSBrZXkgPyBudWxsIDoga2V5XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsdWUsIFwiX2RlYnVnVGFza1wiLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChudWxsICE9PSBpbml0aWFsaXppbmdIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVkID0gaW5pdGlhbGl6aW5nSGFuZGxlcjtcbiAgICAgICAgICAgICAgICBpbml0aWFsaXppbmdIYW5kbGVyID0gdmFsaWRhdGVkLnBhcmVudDtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVkLmVycm9yZWQpIHtcbiAgICAgICAgICAgICAgICAgIGtleSA9IG5ldyBSZWFjdFByb21pc2UoXCJyZWplY3RlZFwiLCBudWxsLCB2YWxpZGF0ZWQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUVsZW1lbnQocmVzcG9uc2UsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRlZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHZhbHVlLnR5cGUpIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIG93bmVyOiB2YWx1ZS5fb3duZXJcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB2YWxpZGF0ZWQuZGVidWdTdGFjayA9IHZhbHVlLl9kZWJ1Z1N0YWNrO1xuICAgICAgICAgICAgICAgICAgc3VwcG9ydHNDcmVhdGVUYXNrICYmXG4gICAgICAgICAgICAgICAgICAgICh2YWxpZGF0ZWQuZGVidWdUYXNrID0gdmFsdWUuX2RlYnVnVGFzayk7XG4gICAgICAgICAgICAgICAgICBrZXkuX2RlYnVnSW5mbyA9IFt2YWxpZGF0ZWRdO1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjcmVhdGVMYXp5Q2h1bmtXcmFwcGVyKGtleSk7XG4gICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoMCA8IHZhbGlkYXRlZC5kZXBzKSB7XG4gICAgICAgICAgICAgICAgICBrZXkgPSBuZXcgUmVhY3RQcm9taXNlKFwiYmxvY2tlZFwiLCBudWxsLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRlZC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgdmFsaWRhdGVkLmNodW5rID0ga2V5O1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbml0aWFsaXplRWxlbWVudC5iaW5kKG51bGwsIHJlc3BvbnNlLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICBrZXkudGhlbih2YWx1ZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjcmVhdGVMYXp5Q2h1bmtXcmFwcGVyKGtleSk7XG4gICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpbml0aWFsaXplRWxlbWVudChyZXNwb25zZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbG9zZSh3ZWFrUmVzcG9uc2UpIHtcbiAgICAgIHJlcG9ydEdsb2JhbEVycm9yKHdlYWtSZXNwb25zZSwgRXJyb3IoXCJDb25uZWN0aW9uIGNsb3NlZC5cIikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVEZWJ1Z0NhbGxiYWNrRnJvbVdyaXRhYmxlU3RyZWFtKGRlYnVnV3JpdGFibGUpIHtcbiAgICAgIHZhciB0ZXh0RW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpLFxuICAgICAgICB3cml0ZXIgPSBkZWJ1Z1dyaXRhYmxlLmdldFdyaXRlcigpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICAgIFwiXCIgPT09IG1lc3NhZ2VcbiAgICAgICAgICA/IHdyaXRlci5jbG9zZSgpXG4gICAgICAgICAgOiB3cml0ZXJcbiAgICAgICAgICAgICAgLndyaXRlKHRleHRFbmNvZGVyLmVuY29kZShtZXNzYWdlICsgXCJcXG5cIikpXG4gICAgICAgICAgICAgIC5jYXRjaChjb25zb2xlLmVycm9yKTtcbiAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlRnJvbU9wdGlvbnMob3B0aW9ucykge1xuICAgICAgdmFyIGRlYnVnQ2hhbm5lbCA9XG4gICAgICAgIG9wdGlvbnMgJiZcbiAgICAgICAgdm9pZCAwICE9PSBvcHRpb25zLmRlYnVnQ2hhbm5lbCAmJlxuICAgICAgICB2b2lkIDAgIT09IG9wdGlvbnMuZGVidWdDaGFubmVsLndyaXRhYmxlXG4gICAgICAgICAgPyBjcmVhdGVEZWJ1Z0NhbGxiYWNrRnJvbVdyaXRhYmxlU3RyZWFtKG9wdGlvbnMuZGVidWdDaGFubmVsLndyaXRhYmxlKVxuICAgICAgICAgIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZUluc3RhbmNlKFxuICAgICAgICBudWxsLFxuICAgICAgICBudWxsLFxuICAgICAgICBudWxsLFxuICAgICAgICBvcHRpb25zICYmIG9wdGlvbnMuY2FsbFNlcnZlciA/IG9wdGlvbnMuY2FsbFNlcnZlciA6IHZvaWQgMCxcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy50ZW1wb3JhcnlSZWZlcmVuY2VzXG4gICAgICAgICAgPyBvcHRpb25zLnRlbXBvcmFyeVJlZmVyZW5jZXNcbiAgICAgICAgICA6IHZvaWQgMCxcbiAgICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmZpbmRTb3VyY2VNYXBVUkwgPyBvcHRpb25zLmZpbmRTb3VyY2VNYXBVUkwgOiB2b2lkIDAsXG4gICAgICAgIG9wdGlvbnMgPyAhMSAhPT0gb3B0aW9ucy5yZXBsYXlDb25zb2xlTG9ncyA6ICEwLFxuICAgICAgICBvcHRpb25zICYmIG9wdGlvbnMuZW52aXJvbm1lbnROYW1lID8gb3B0aW9ucy5lbnZpcm9ubWVudE5hbWUgOiB2b2lkIDAsXG4gICAgICAgIGRlYnVnQ2hhbm5lbFxuICAgICAgKS5fd2Vha1Jlc3BvbnNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdGFydFJlYWRpbmdGcm9tVW5pdmVyc2FsU3RyZWFtKHJlc3BvbnNlJGpzY29tcCQwLCBzdHJlYW0pIHtcbiAgICAgIGZ1bmN0aW9uIHByb2dyZXNzKF9yZWYpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gX3JlZi52YWx1ZTtcbiAgICAgICAgaWYgKF9yZWYuZG9uZSkgY2xvc2UocmVzcG9uc2UkanNjb21wJDApO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilcbiAgICAgICAgICAgIHByb2Nlc3NCaW5hcnlDaHVuayhcbiAgICAgICAgICAgICAgcmVzcG9uc2UkanNjb21wJDAsXG4gICAgICAgICAgICAgIHN0cmVhbVN0YXRlLFxuICAgICAgICAgICAgICBuZXcgVWludDhBcnJheSh2YWx1ZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgZWxzZSBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICgoX3JlZiA9IHN0cmVhbVN0YXRlKSwgdm9pZCAwICE9PSByZXNwb25zZSRqc2NvbXAkMC53ZWFrLmRlcmVmKCkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSB1bndyYXBXZWFrUmVzcG9uc2UocmVzcG9uc2UkanNjb21wJDApLFxuICAgICAgICAgICAgICAgICAgaSA9IDAsXG4gICAgICAgICAgICAgICAgICByb3dTdGF0ZSA9IF9yZWYuX3Jvd1N0YXRlLFxuICAgICAgICAgICAgICAgICAgcm93SUQgPSBfcmVmLl9yb3dJRCxcbiAgICAgICAgICAgICAgICAgIHJvd1RhZyA9IF9yZWYuX3Jvd1RhZyxcbiAgICAgICAgICAgICAgICAgIHJvd0xlbmd0aCA9IF9yZWYuX3Jvd0xlbmd0aCxcbiAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IF9yZWYuX2J1ZmZlcixcbiAgICAgICAgICAgICAgICAgIGNodW5rTGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGkgPCBjaHVua0xlbmd0aDtcblxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFzdElkeCA9IC0xO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocm93U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgbGFzdElkeCA9IHZhbHVlLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgICAgICAgICAgICAgICAgNTggPT09IGxhc3RJZHhcbiAgICAgICAgICAgICAgICAgICAgICA/IChyb3dTdGF0ZSA9IDEpXG4gICAgICAgICAgICAgICAgICAgICAgOiAocm93SUQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAocm93SUQgPDwgNCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoOTYgPCBsYXN0SWR4ID8gbGFzdElkeCAtIDg3IDogbGFzdElkeCAtIDQ4KSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICByb3dTdGF0ZSA9IHZhbHVlLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICAgICAgICAgIDg0ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICA2NSA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICAgICAgNzkgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgICAgIDExMSA9PT0gcm93U3RhdGUgfHxcbiAgICAgICAgICAgICAgICAgICAgODUgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgICAgIDgzID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICAxMTUgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgICAgIDc2ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICAxMDggPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgICAgIDcxID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICAxMDMgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgICAgIDc3ID09PSByb3dTdGF0ZSB8fFxuICAgICAgICAgICAgICAgICAgICAxMDkgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgICAgIDg2ID09PSByb3dTdGF0ZVxuICAgICAgICAgICAgICAgICAgICAgID8gKChyb3dUYWcgPSByb3dTdGF0ZSksIChyb3dTdGF0ZSA9IDIpLCBpKyspXG4gICAgICAgICAgICAgICAgICAgICAgOiAoNjQgPCByb3dTdGF0ZSAmJiA5MSA+IHJvd1N0YXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAxMTQgPT09IHJvd1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDEyMCA9PT0gcm93U3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKChyb3dUYWcgPSByb3dTdGF0ZSksIChyb3dTdGF0ZSA9IDMpLCBpKyspXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICgocm93VGFnID0gMCksIChyb3dTdGF0ZSA9IDMpKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGxhc3RJZHggPSB2YWx1ZS5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICAgICAgICAgICAgICAgIDQ0ID09PSBsYXN0SWR4XG4gICAgICAgICAgICAgICAgICAgICAgPyAocm93U3RhdGUgPSA0KVxuICAgICAgICAgICAgICAgICAgICAgIDogKHJvd0xlbmd0aCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIChyb3dMZW5ndGggPDwgNCkgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoOTYgPCBsYXN0SWR4ID8gbGFzdElkeCAtIDg3IDogbGFzdElkeCAtIDQ4KSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBsYXN0SWR4ID0gdmFsdWUuaW5kZXhPZihcIlxcblwiLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICg4NCAhPT0gcm93VGFnKVxuICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJCaW5hcnkgUlNDIGNodW5rcyBjYW5ub3QgYmUgZW5jb2RlZCBhcyBzdHJpbmdzLiBUaGlzIGlzIGEgYnVnIGluIHRoZSB3aXJpbmcgb2YgdGhlIFJlYWN0IHN0cmVhbXMuXCJcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgcm93TGVuZ3RoIDwgdmFsdWUubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUubGVuZ3RoID4gMyAqIHJvd0xlbmd0aFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlN0cmluZyBjaHVua3MgbmVlZCB0byBiZSBwYXNzZWQgaW4gdGhlaXIgb3JpZ2luYWwgc2hhcGUuIE5vdCBzcGxpdCBpbnRvIHNtYWxsZXIgc3RyaW5nIGNodW5rcy4gVGhpcyBpcyBhIGJ1ZyBpbiB0aGUgd2lyaW5nIG9mIHRoZSBSZWFjdCBzdHJlYW1zLlwiXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgbGFzdElkeCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKC0xIDwgbGFzdElkeCkge1xuICAgICAgICAgICAgICAgICAgaWYgKDAgPCBidWZmZXIubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICBcIlN0cmluZyBjaHVua3MgbmVlZCB0byBiZSBwYXNzZWQgaW4gdGhlaXIgb3JpZ2luYWwgc2hhcGUuIE5vdCBzcGxpdCBpbnRvIHNtYWxsZXIgc3RyaW5nIGNodW5rcy4gVGhpcyBpcyBhIGJ1ZyBpbiB0aGUgd2lyaW5nIG9mIHRoZSBSZWFjdCBzdHJlYW1zLlwiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBpID0gdmFsdWUuc2xpY2UoaSwgbGFzdElkeCk7XG4gICAgICAgICAgICAgICAgICBwcm9jZXNzRnVsbFN0cmluZ1JvdyhyZXNwb25zZSwgcm93SUQsIHJvd1RhZywgaSk7XG4gICAgICAgICAgICAgICAgICBpID0gbGFzdElkeDtcbiAgICAgICAgICAgICAgICAgIDMgPT09IHJvd1N0YXRlICYmIGkrKztcbiAgICAgICAgICAgICAgICAgIHJvd0xlbmd0aCA9IHJvd0lEID0gcm93VGFnID0gcm93U3RhdGUgPSAwO1xuICAgICAgICAgICAgICAgICAgYnVmZmVyLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggIT09IGkpXG4gICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJTdHJpbmcgY2h1bmtzIG5lZWQgdG8gYmUgcGFzc2VkIGluIHRoZWlyIG9yaWdpbmFsIHNoYXBlLiBOb3Qgc3BsaXQgaW50byBzbWFsbGVyIHN0cmluZyBjaHVua3MuIFRoaXMgaXMgYSBidWcgaW4gdGhlIHdpcmluZyBvZiB0aGUgUmVhY3Qgc3RyZWFtcy5cIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBfcmVmLl9yb3dTdGF0ZSA9IHJvd1N0YXRlO1xuICAgICAgICAgICAgICBfcmVmLl9yb3dJRCA9IHJvd0lEO1xuICAgICAgICAgICAgICBfcmVmLl9yb3dUYWcgPSByb3dUYWc7XG4gICAgICAgICAgICAgIF9yZWYuX3Jvd0xlbmd0aCA9IHJvd0xlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgcHJvY2Vzc0JpbmFyeUNodW5rKHJlc3BvbnNlJGpzY29tcCQwLCBzdHJlYW1TdGF0ZSwgdmFsdWUpO1xuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZCgpLnRoZW4ocHJvZ3Jlc3MpLmNhdGNoKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZXJyb3IoZSkge1xuICAgICAgICByZXBvcnRHbG9iYWxFcnJvcihyZXNwb25zZSRqc2NvbXAkMCwgZSk7XG4gICAgICB9XG4gICAgICB2YXIgc3RyZWFtU3RhdGUgPSBjcmVhdGVTdHJlYW1TdGF0ZSgpLFxuICAgICAgICByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICByZWFkZXIucmVhZCgpLnRoZW4ocHJvZ3Jlc3MpLmNhdGNoKGVycm9yKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RhcnRSZWFkaW5nRnJvbVN0cmVhbShyZXNwb25zZSwgc3RyZWFtLCBpc1NlY29uZGFyeVN0cmVhbSkge1xuICAgICAgZnVuY3Rpb24gcHJvZ3Jlc3MoX3JlZjIpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gX3JlZjIudmFsdWU7XG4gICAgICAgIGlmIChfcmVmMi5kb25lKSBpc1NlY29uZGFyeVN0cmVhbSB8fCBjbG9zZShyZXNwb25zZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgcHJvY2Vzc0JpbmFyeUNodW5rKHJlc3BvbnNlLCBzdHJlYW1TdGF0ZSwgdmFsdWUpLFxuICAgICAgICAgICAgcmVhZGVyLnJlYWQoKS50aGVuKHByb2dyZXNzKS5jYXRjaChlcnJvcilcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZXJyb3IoZSkge1xuICAgICAgICByZXBvcnRHbG9iYWxFcnJvcihyZXNwb25zZSwgZSk7XG4gICAgICB9XG4gICAgICB2YXIgc3RyZWFtU3RhdGUgPSBjcmVhdGVTdHJlYW1TdGF0ZSgpLFxuICAgICAgICByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgICByZWFkZXIucmVhZCgpLnRoZW4ocHJvZ3Jlc3MpLmNhdGNoKGVycm9yKTtcbiAgICB9XG4gICAgdmFyIFJlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpLFxuICAgICAgUmVhY3RET00gPSByZXF1aXJlKFwicmVhY3QtZG9tXCIpLFxuICAgICAgZGVjb2Rlck9wdGlvbnMgPSB7IHN0cmVhbTogITAgfSxcbiAgICAgIGJpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCxcbiAgICAgIGNodW5rQ2FjaGUgPSBuZXcgTWFwKCksXG4gICAgICBjaHVua01hcCA9IG5ldyBNYXAoKSxcbiAgICAgIHdlYnBhY2tHZXRDaHVua0ZpbGVuYW1lID0gX193ZWJwYWNrX3JlcXVpcmVfXy51O1xuICAgIF9fd2VicGFja19yZXF1aXJlX18udSA9IGZ1bmN0aW9uIChjaHVua0lkKSB7XG4gICAgICB2YXIgZmxpZ2h0Q2h1bmsgPSBjaHVua01hcC5nZXQoY2h1bmtJZCk7XG4gICAgICByZXR1cm4gdm9pZCAwICE9PSBmbGlnaHRDaHVua1xuICAgICAgICA/IGZsaWdodENodW5rXG4gICAgICAgIDogd2VicGFja0dldENodW5rRmlsZW5hbWUoY2h1bmtJZCk7XG4gICAgfTtcbiAgICB2YXIgUmVhY3RET01TaGFyZWRJbnRlcm5hbHMgPVxuICAgICAgICBSZWFjdERPTS5fX0RPTV9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREUsXG4gICAgICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnRcIiksXG4gICAgICBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksXG4gICAgICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLFxuICAgICAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxcbiAgICAgIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIiksXG4gICAgICBSRUFDVF9DT05TVU1FUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnN1bWVyXCIpLFxuICAgICAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksXG4gICAgICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLFxuICAgICAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLFxuICAgICAgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksXG4gICAgICBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSxcbiAgICAgIFJFQUNUX0FDVElWSVRZX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuYWN0aXZpdHlcIiksXG4gICAgICBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSBTeW1ib2wuaXRlcmF0b3IsXG4gICAgICBBU1lOQ19JVEVSQVRPUiA9IFN5bWJvbC5hc3luY0l0ZXJhdG9yLFxuICAgICAgaXNBcnJheUltcGwgPSBBcnJheS5pc0FycmF5LFxuICAgICAgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gICAgICBqc3hQcm9wc1BhcmVudHMgPSBuZXcgV2Vha01hcCgpLFxuICAgICAganN4Q2hpbGRyZW5QYXJlbnRzID0gbmV3IFdlYWtNYXAoKSxcbiAgICAgIENMSUVOVF9SRUZFUkVOQ0VfVEFHID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIiksXG4gICAgICBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlLFxuICAgICAga25vd25TZXJ2ZXJSZWZlcmVuY2VzID0gbmV3IFdlYWtNYXAoKSxcbiAgICAgIGZha2VTZXJ2ZXJGdW5jdGlvbklkeCA9IDAsXG4gICAgICB2OEZyYW1lUmVnRXhwID1cbiAgICAgICAgL14gezN9IGF0ICg/OiguKykgXFwoKC4rKTooXFxkKyk6KFxcZCspXFwpfCg/OmFzeW5jICk/KC4rKTooXFxkKyk6KFxcZCspKSQvLFxuICAgICAganNjU3BpZGVyTW9ua2V5RnJhbWVSZWdFeHAgPSAvKD86KC4qKUApPyguKik6KFxcZCspOihcXGQrKS8sXG4gICAgICBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIiksXG4gICAgICBwcmVmaXgsXG4gICAgICBzdWZmaXg7XG4gICAgbmV3IChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBXZWFrTWFwID8gV2Vha01hcCA6IE1hcCkoKTtcbiAgICB2YXIgUmVhY3RTaGFyZWRJbnRlcmFsc1NlcnZlciA9XG4gICAgICAgIFJlYWN0Ll9fU0VSVkVSX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzID1cbiAgICAgICAgUmVhY3QuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFIHx8XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJhbHNTZXJ2ZXI7XG4gICAgUmVhY3RQcm9taXNlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUHJvbWlzZS5wcm90b3R5cGUpO1xuICAgIFJlYWN0UHJvbWlzZS5wcm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHN3aXRjaCAodGhpcy5zdGF0dXMpIHtcbiAgICAgICAgY2FzZSBcInJlc29sdmVkX21vZGVsXCI6XG4gICAgICAgICAgaW5pdGlhbGl6ZU1vZGVsQ2h1bmsodGhpcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyZXNvbHZlZF9tb2R1bGVcIjpcbiAgICAgICAgICBpbml0aWFsaXplTW9kdWxlQ2h1bmsodGhpcyk7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHRoaXMuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXNvbHZlICYmIHJlc29sdmUodGhpcy52YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJwZW5kaW5nXCI6XG4gICAgICAgIGNhc2UgXCJibG9ja2VkXCI6XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVzb2x2ZSAmJlxuICAgICAgICAgICAgKG51bGwgPT09IHRoaXMudmFsdWUgJiYgKHRoaXMudmFsdWUgPSBbXSksXG4gICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2gocmVzb2x2ZSkpO1xuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlamVjdCAmJlxuICAgICAgICAgICAgKG51bGwgPT09IHRoaXMucmVhc29uICYmICh0aGlzLnJlYXNvbiA9IFtdKSxcbiAgICAgICAgICAgIHRoaXMucmVhc29uLnB1c2gocmVqZWN0KSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJoYWx0ZWRcIjpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZWplY3QgJiYgcmVqZWN0KHRoaXMucmVhc29uKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBkZWJ1Z0NoYW5uZWxSZWdpc3RyeSA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5XG4gICAgICAgICAgPyBuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoY2xlYW51cERlYnVnQ2hhbm5lbClcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBpbml0aWFsaXppbmdIYW5kbGVyID0gbnVsbCxcbiAgICAgIHN1cHBvcnRzQ3JlYXRlVGFzayA9ICEhY29uc29sZS5jcmVhdGVUYXNrLFxuICAgICAgZmFrZUZ1bmN0aW9uQ2FjaGUgPSBuZXcgTWFwKCksXG4gICAgICBmYWtlRnVuY3Rpb25JZHggPSAwLFxuICAgICAgY3JlYXRlRmFrZUpTWENhbGxTdGFjayA9IHtcbiAgICAgICAgcmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lOiBmdW5jdGlvbiAocmVzcG9uc2UsIHN0YWNrLCBlbnZpcm9ubWVudE5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gYnVpbGRGYWtlQ2FsbFN0YWNrKFxuICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICAgIGVudmlyb25tZW50TmFtZSxcbiAgICAgICAgICAgICExLFxuICAgICAgICAgICAgZmFrZUpTWENhbGxTaXRlXG4gICAgICAgICAgKSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY3JlYXRlRmFrZUpTWENhbGxTdGFja0luREVWID1cbiAgICAgICAgY3JlYXRlRmFrZUpTWENhbGxTdGFjay5yZWFjdF9zdGFja19ib3R0b21fZnJhbWUuYmluZChcbiAgICAgICAgICBjcmVhdGVGYWtlSlNYQ2FsbFN0YWNrXG4gICAgICAgICksXG4gICAgICBjdXJyZW50T3duZXJJbkRFViA9IG51bGwsXG4gICAgICByZXBsYXlDb25zb2xlV2l0aENhbGxTdGFjayA9IHtcbiAgICAgICAgcmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lOiBmdW5jdGlvbiAoXG4gICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgICBzdGFja1RyYWNlLFxuICAgICAgICAgIG93bmVyLFxuICAgICAgICAgIGVudixcbiAgICAgICAgICBhcmdzXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBwcmV2U3RhY2sgPSBSZWFjdFNoYXJlZEludGVybmFscy5nZXRDdXJyZW50U3RhY2s7XG4gICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrID0gZ2V0Q3VycmVudFN0YWNrSW5ERVY7XG4gICAgICAgICAgY3VycmVudE93bmVySW5ERVYgPSBudWxsID09PSBvd25lciA/IHJlc3BvbnNlLl9kZWJ1Z1Jvb3RPd25lciA6IG93bmVyO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgICBzd2l0Y2ggKG1ldGhvZE5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGlyXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImRpcnhtbFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJncm91cEVuZFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJ0YWJsZVwiOlxuICAgICAgICAgICAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGJpbmQuYXBwbHkoXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGVbbWV0aG9kTmFtZV0sXG4gICAgICAgICAgICAgICAgICAgIFtjb25zb2xlXS5jb25jYXQoYXJncylcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJhc3NlcnRcIjpcbiAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIG5ld0FyZ3MgPSBhcmdzLnNsaWNlKDApO1xuICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgbmV3QXJnc1tvZmZzZXRdXG4gICAgICAgICAgICAgICAgPyBuZXdBcmdzLnNwbGljZShcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICBcIiVjJXMlYyBcIiArIG5ld0FyZ3Nbb2Zmc2V0XSxcbiAgICAgICAgICAgICAgICAgICAgXCJiYWNrZ3JvdW5kOiAjZTZlNmU2O2JhY2tncm91bmQ6IGxpZ2h0LWRhcmsocmdiYSgwLDAsMCwwLjEpLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjUpKTtjb2xvcjogIzAwMDAwMDtjb2xvcjogbGlnaHQtZGFyaygjMDAwMDAwLCAjZmZmZmZmKTtib3JkZXItcmFkaXVzOiAycHhcIixcbiAgICAgICAgICAgICAgICAgICAgXCIgXCIgKyBlbnYgKyBcIiBcIixcbiAgICAgICAgICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogbmV3QXJncy5zcGxpY2UoXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgXCIlYyVzJWMgXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZDogI2U2ZTZlNjtiYWNrZ3JvdW5kOiBsaWdodC1kYXJrKHJnYmEoMCwwLDAsMC4xKSwgcmdiYSgyNTUsMjU1LDI1NSwwLjI1KSk7Y29sb3I6ICMwMDAwMDA7Y29sb3I6IGxpZ2h0LWRhcmsoIzAwMDAwMCwgI2ZmZmZmZik7Ym9yZGVyLXJhZGl1czogMnB4XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiIFwiICsgZW52ICsgXCIgXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIG5ld0FyZ3MudW5zaGlmdChjb25zb2xlKTtcbiAgICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gYmluZC5hcHBseShcbiAgICAgICAgICAgICAgICBjb25zb2xlW21ldGhvZE5hbWVdLFxuICAgICAgICAgICAgICAgIG5ld0FyZ3NcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjYWxsU3RhY2sgPSBidWlsZEZha2VDYWxsU3RhY2soXG4gICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICBzdGFja1RyYWNlLFxuICAgICAgICAgICAgICBlbnYsXG4gICAgICAgICAgICAgICExLFxuICAgICAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobnVsbCAhPSBvd25lcikge1xuICAgICAgICAgICAgICB2YXIgdGFzayA9IGluaXRpYWxpemVGYWtlVGFzayhyZXNwb25zZSwgb3duZXIpO1xuICAgICAgICAgICAgICBpbml0aWFsaXplRmFrZVN0YWNrKHJlc3BvbnNlLCBvd25lcik7XG4gICAgICAgICAgICAgIGlmIChudWxsICE9PSB0YXNrKSB7XG4gICAgICAgICAgICAgICAgdGFzay5ydW4oY2FsbFN0YWNrKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciByb290VGFzayA9IGdldFJvb3RUYXNrKHJlc3BvbnNlLCBlbnYpO1xuICAgICAgICAgICAgbnVsbCAhPSByb290VGFzayA/IHJvb3RUYXNrLnJ1bihjYWxsU3RhY2spIDogY2FsbFN0YWNrKCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIChjdXJyZW50T3duZXJJbkRFViA9IG51bGwpLFxuICAgICAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrID0gcHJldlN0YWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByZXBsYXlDb25zb2xlV2l0aENhbGxTdGFja0luREVWID1cbiAgICAgICAgcmVwbGF5Q29uc29sZVdpdGhDYWxsU3RhY2sucmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lLmJpbmQoXG4gICAgICAgICAgcmVwbGF5Q29uc29sZVdpdGhDYWxsU3RhY2tcbiAgICAgICAgKTtcbiAgICAoZnVuY3Rpb24gKGludGVybmFscykge1xuICAgICAgaWYgKFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18pIHJldHVybiAhMTtcbiAgICAgIHZhciBob29rID0gX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuICAgICAgaWYgKGhvb2suaXNEaXNhYmxlZCB8fCAhaG9vay5zdXBwb3J0c0ZsaWdodCkgcmV0dXJuICEwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaG9vay5pbmplY3QoaW50ZXJuYWxzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcy5cIiwgZXJyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBob29rLmNoZWNrRENFID8gITAgOiAhMTtcbiAgICB9KSh7XG4gICAgICBidW5kbGVUeXBlOiAxLFxuICAgICAgdmVyc2lvbjogXCIxOS4yLjAtY2FuYXJ5LTk3Y2RkNWQzLTIwMjUwNzEwXCIsXG4gICAgICByZW5kZXJlclBhY2thZ2VOYW1lOiBcInJlYWN0LXNlcnZlci1kb20td2VicGFja1wiLFxuICAgICAgY3VycmVudERpc3BhdGNoZXJSZWY6IFJlYWN0U2hhcmVkSW50ZXJuYWxzLFxuICAgICAgcmVjb25jaWxlclZlcnNpb246IFwiMTkuMi4wLWNhbmFyeS05N2NkZDVkMy0yMDI1MDcxMFwiLFxuICAgICAgZ2V0Q3VycmVudENvbXBvbmVudEluZm86IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRPd25lckluREVWO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGV4cG9ydHMuY3JlYXRlRnJvbUZldGNoID0gZnVuY3Rpb24gKHByb21pc2VGb3JSZXNwb25zZSwgb3B0aW9ucykge1xuICAgICAgdmFyIHJlc3BvbnNlID0gY3JlYXRlUmVzcG9uc2VGcm9tT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgIHByb21pc2VGb3JSZXNwb25zZS50aGVuKFxuICAgICAgICBmdW5jdGlvbiAocikge1xuICAgICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5kZWJ1Z0NoYW5uZWwgJiYgb3B0aW9ucy5kZWJ1Z0NoYW5uZWwucmVhZGFibGVcbiAgICAgICAgICAgID8gKHN0YXJ0UmVhZGluZ0Zyb21Vbml2ZXJzYWxTdHJlYW0oXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kZWJ1Z0NoYW5uZWwucmVhZGFibGVcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgc3RhcnRSZWFkaW5nRnJvbVN0cmVhbShyZXNwb25zZSwgci5ib2R5LCAhMCkpXG4gICAgICAgICAgICA6IHN0YXJ0UmVhZGluZ0Zyb21TdHJlYW0ocmVzcG9uc2UsIHIuYm9keSwgITEpO1xuICAgICAgICB9LFxuICAgICAgICBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIHJlcG9ydEdsb2JhbEVycm9yKHJlc3BvbnNlLCBlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiBnZXRSb290KHJlc3BvbnNlKTtcbiAgICB9O1xuICAgIGV4cG9ydHMuY3JlYXRlRnJvbVJlYWRhYmxlU3RyZWFtID0gZnVuY3Rpb24gKHN0cmVhbSwgb3B0aW9ucykge1xuICAgICAgdmFyIHJlc3BvbnNlID0gY3JlYXRlUmVzcG9uc2VGcm9tT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5kZWJ1Z0NoYW5uZWwgJiYgb3B0aW9ucy5kZWJ1Z0NoYW5uZWwucmVhZGFibGVcbiAgICAgICAgPyAoc3RhcnRSZWFkaW5nRnJvbVVuaXZlcnNhbFN0cmVhbShcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgb3B0aW9ucy5kZWJ1Z0NoYW5uZWwucmVhZGFibGVcbiAgICAgICAgICApLFxuICAgICAgICAgIHN0YXJ0UmVhZGluZ0Zyb21TdHJlYW0ocmVzcG9uc2UsIHN0cmVhbSwgITApKVxuICAgICAgICA6IHN0YXJ0UmVhZGluZ0Zyb21TdHJlYW0ocmVzcG9uc2UsIHN0cmVhbSwgITEpO1xuICAgICAgcmV0dXJuIGdldFJvb3QocmVzcG9uc2UpO1xuICAgIH07XG4gICAgZXhwb3J0cy5jcmVhdGVTZXJ2ZXJSZWZlcmVuY2UgPSBmdW5jdGlvbiAoXG4gICAgICBpZCxcbiAgICAgIGNhbGxTZXJ2ZXIsXG4gICAgICBlbmNvZGVGb3JtQWN0aW9uLFxuICAgICAgZmluZFNvdXJjZU1hcFVSTCxcbiAgICAgIGZ1bmN0aW9uTmFtZVxuICAgICkge1xuICAgICAgZnVuY3Rpb24gYWN0aW9uKCkge1xuICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiBjYWxsU2VydmVyKGlkLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIHZhciBsb2NhdGlvbiA9IHBhcnNlU3RhY2tMb2NhdGlvbihFcnJvcihcInJlYWN0LXN0YWNrLXRvcC1mcmFtZVwiKSk7XG4gICAgICBpZiAobnVsbCAhPT0gbG9jYXRpb24pIHtcbiAgICAgICAgZW5jb2RlRm9ybUFjdGlvbiA9IGxvY2F0aW9uWzFdO1xuICAgICAgICB2YXIgbGluZSA9IGxvY2F0aW9uWzJdO1xuICAgICAgICBsb2NhdGlvbiA9IGxvY2F0aW9uWzNdO1xuICAgICAgICBmaW5kU291cmNlTWFwVVJMID1cbiAgICAgICAgICBudWxsID09IGZpbmRTb3VyY2VNYXBVUkxcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBmaW5kU291cmNlTWFwVVJMKGVuY29kZUZvcm1BY3Rpb24sIFwiQ2xpZW50XCIpO1xuICAgICAgICBhY3Rpb24gPSBjcmVhdGVGYWtlU2VydmVyRnVuY3Rpb24oXG4gICAgICAgICAgZnVuY3Rpb25OYW1lIHx8IFwiXCIsXG4gICAgICAgICAgZW5jb2RlRm9ybUFjdGlvbixcbiAgICAgICAgICBmaW5kU291cmNlTWFwVVJMLFxuICAgICAgICAgIGxpbmUsXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgXCJDbGllbnRcIixcbiAgICAgICAgICBhY3Rpb25cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJlZ2lzdGVyQm91bmRTZXJ2ZXJSZWZlcmVuY2UoYWN0aW9uLCBpZCwgbnVsbCk7XG4gICAgICByZXR1cm4gYWN0aW9uO1xuICAgIH07XG4gICAgZXhwb3J0cy5jcmVhdGVUZW1wb3JhcnlSZWZlcmVuY2VTZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gbmV3IE1hcCgpO1xuICAgIH07XG4gICAgZXhwb3J0cy5lbmNvZGVSZXBseSA9IGZ1bmN0aW9uICh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIGFib3J0ID0gcHJvY2Vzc1JlcGx5KFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnRlbXBvcmFyeVJlZmVyZW5jZXNcbiAgICAgICAgICAgID8gb3B0aW9ucy50ZW1wb3JhcnlSZWZlcmVuY2VzXG4gICAgICAgICAgICA6IHZvaWQgMCxcbiAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgIHJlamVjdFxuICAgICAgICApO1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNpZ25hbCkge1xuICAgICAgICAgIHZhciBzaWduYWwgPSBvcHRpb25zLnNpZ25hbDtcbiAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIGFib3J0KHNpZ25hbC5yZWFzb24pO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBhYm9ydChzaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBsaXN0ZW5lcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBsaXN0ZW5lcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIGV4cG9ydHMucmVnaXN0ZXJTZXJ2ZXJSZWZlcmVuY2UgPSBmdW5jdGlvbiAocmVmZXJlbmNlLCBpZCkge1xuICAgICAgcmVnaXN0ZXJCb3VuZFNlcnZlclJlZmVyZW5jZShyZWZlcmVuY2UsIGlkLCBudWxsKTtcbiAgICAgIHJldHVybiByZWZlcmVuY2U7XG4gICAgfTtcbiAgfSkoKTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-server-dom-webpack/client.browser.js":
/*!********************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-server-dom-webpack/client.browser.js ***!
  \********************************************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/react-server-dom-webpack-client.browser.development.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-server-dom-webpack/cjs/react-server-dom-webpack-client.browser.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2svY2xpZW50LmJyb3dzZXIuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDLENBQUM7QUFDRixFQUFFLGlZQUF3RjtBQUMxRiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2svY2xpZW50LmJyb3dzZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LXNlcnZlci1kb20td2VicGFjay1jbGllbnQuYnJvd3Nlci5wcm9kdWN0aW9uLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LXNlcnZlci1kb20td2VicGFjay1jbGllbnQuYnJvd3Nlci5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-server-dom-webpack/client.browser.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/cjs/react-jsx-runtime.development.js":
/*!********************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/cjs/react-jsx-runtime.development.js ***!
  \********************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n  (function () {\n    function getComponentNameFromType(type) {\n      if (null == type) return null;\n      if (\"function\" === typeof type)\n        return type.$$typeof === REACT_CLIENT_REFERENCE\n          ? null\n          : type.displayName || type.name || null;\n      if (\"string\" === typeof type) return type;\n      switch (type) {\n        case REACT_FRAGMENT_TYPE:\n          return \"Fragment\";\n        case REACT_PROFILER_TYPE:\n          return \"Profiler\";\n        case REACT_STRICT_MODE_TYPE:\n          return \"StrictMode\";\n        case REACT_SUSPENSE_TYPE:\n          return \"Suspense\";\n        case REACT_SUSPENSE_LIST_TYPE:\n          return \"SuspenseList\";\n        case REACT_ACTIVITY_TYPE:\n          return \"Activity\";\n      }\n      if (\"object\" === typeof type)\n        switch (\n          (\"number\" === typeof type.tag &&\n            console.error(\n              \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n            ),\n          type.$$typeof)\n        ) {\n          case REACT_PORTAL_TYPE:\n            return \"Portal\";\n          case REACT_CONTEXT_TYPE:\n            return type.displayName || \"Context\";\n          case REACT_CONSUMER_TYPE:\n            return (type._context.displayName || \"Context\") + \".Consumer\";\n          case REACT_FORWARD_REF_TYPE:\n            var innerType = type.render;\n            type = type.displayName;\n            type ||\n              ((type = innerType.displayName || innerType.name || \"\"),\n              (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n            return type;\n          case REACT_MEMO_TYPE:\n            return (\n              (innerType = type.displayName || null),\n              null !== innerType\n                ? innerType\n                : getComponentNameFromType(type.type) || \"Memo\"\n            );\n          case REACT_LAZY_TYPE:\n            innerType = type._payload;\n            type = type._init;\n            try {\n              return getComponentNameFromType(type(innerType));\n            } catch (x) {}\n        }\n      return null;\n    }\n    function testStringCoercion(value) {\n      return \"\" + value;\n    }\n    function checkKeyStringCoercion(value) {\n      try {\n        testStringCoercion(value);\n        var JSCompiler_inline_result = !1;\n      } catch (e) {\n        JSCompiler_inline_result = !0;\n      }\n      if (JSCompiler_inline_result) {\n        JSCompiler_inline_result = console;\n        var JSCompiler_temp_const = JSCompiler_inline_result.error;\n        var JSCompiler_inline_result$jscomp$0 =\n          (\"function\" === typeof Symbol &&\n            Symbol.toStringTag &&\n            value[Symbol.toStringTag]) ||\n          value.constructor.name ||\n          \"Object\";\n        JSCompiler_temp_const.call(\n          JSCompiler_inline_result,\n          \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n          JSCompiler_inline_result$jscomp$0\n        );\n        return testStringCoercion(value);\n      }\n    }\n    function getTaskName(type) {\n      if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n      if (\n        \"object\" === typeof type &&\n        null !== type &&\n        type.$$typeof === REACT_LAZY_TYPE\n      )\n        return \"<...>\";\n      try {\n        var name = getComponentNameFromType(type);\n        return name ? \"<\" + name + \">\" : \"<...>\";\n      } catch (x) {\n        return \"<...>\";\n      }\n    }\n    function getOwner() {\n      var dispatcher = ReactSharedInternals.A;\n      return null === dispatcher ? null : dispatcher.getOwner();\n    }\n    function UnknownOwner() {\n      return Error(\"react-stack-top-frame\");\n    }\n    function hasValidKey(config) {\n      if (hasOwnProperty.call(config, \"key\")) {\n        var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n        if (getter && getter.isReactWarning) return !1;\n      }\n      return void 0 !== config.key;\n    }\n    function defineKeyPropWarningGetter(props, displayName) {\n      function warnAboutAccessingKey() {\n        specialPropKeyWarningShown ||\n          ((specialPropKeyWarningShown = !0),\n          console.error(\n            \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n            displayName\n          ));\n      }\n      warnAboutAccessingKey.isReactWarning = !0;\n      Object.defineProperty(props, \"key\", {\n        get: warnAboutAccessingKey,\n        configurable: !0\n      });\n    }\n    function elementRefGetterWithDeprecationWarning() {\n      var componentName = getComponentNameFromType(this.type);\n      didWarnAboutElementRef[componentName] ||\n        ((didWarnAboutElementRef[componentName] = !0),\n        console.error(\n          \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n        ));\n      componentName = this.props.ref;\n      return void 0 !== componentName ? componentName : null;\n    }\n    function ReactElement(\n      type,\n      key,\n      self,\n      source,\n      owner,\n      props,\n      debugStack,\n      debugTask\n    ) {\n      self = props.ref;\n      type = {\n        $$typeof: REACT_ELEMENT_TYPE,\n        type: type,\n        key: key,\n        props: props,\n        _owner: owner\n      };\n      null !== (void 0 !== self ? self : null)\n        ? Object.defineProperty(type, \"ref\", {\n            enumerable: !1,\n            get: elementRefGetterWithDeprecationWarning\n          })\n        : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n      type._store = {};\n      Object.defineProperty(type._store, \"validated\", {\n        configurable: !1,\n        enumerable: !1,\n        writable: !0,\n        value: 0\n      });\n      Object.defineProperty(type, \"_debugInfo\", {\n        configurable: !1,\n        enumerable: !1,\n        writable: !0,\n        value: null\n      });\n      Object.defineProperty(type, \"_debugStack\", {\n        configurable: !1,\n        enumerable: !1,\n        writable: !0,\n        value: debugStack\n      });\n      Object.defineProperty(type, \"_debugTask\", {\n        configurable: !1,\n        enumerable: !1,\n        writable: !0,\n        value: debugTask\n      });\n      Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n      return type;\n    }\n    function jsxDEVImpl(\n      type,\n      config,\n      maybeKey,\n      isStaticChildren,\n      source,\n      self,\n      debugStack,\n      debugTask\n    ) {\n      var children = config.children;\n      if (void 0 !== children)\n        if (isStaticChildren)\n          if (isArrayImpl(children)) {\n            for (\n              isStaticChildren = 0;\n              isStaticChildren < children.length;\n              isStaticChildren++\n            )\n              validateChildKeys(children[isStaticChildren]);\n            Object.freeze && Object.freeze(children);\n          } else\n            console.error(\n              \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n            );\n        else validateChildKeys(children);\n      if (hasOwnProperty.call(config, \"key\")) {\n        children = getComponentNameFromType(type);\n        var keys = Object.keys(config).filter(function (k) {\n          return \"key\" !== k;\n        });\n        isStaticChildren =\n          0 < keys.length\n            ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n            : \"{key: someKey}\";\n        didWarnAboutKeySpread[children + isStaticChildren] ||\n          ((keys =\n            0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n          console.error(\n            'A props object containing a \"key\" prop is being spread into JSX:\\n  let props = %s;\\n  <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n  let props = %s;\\n  <%s key={someKey} {...props} />',\n            isStaticChildren,\n            children,\n            keys,\n            children\n          ),\n          (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n      }\n      children = null;\n      void 0 !== maybeKey &&\n        (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n      hasValidKey(config) &&\n        (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n      if (\"key\" in config) {\n        maybeKey = {};\n        for (var propName in config)\n          \"key\" !== propName && (maybeKey[propName] = config[propName]);\n      } else maybeKey = config;\n      children &&\n        defineKeyPropWarningGetter(\n          maybeKey,\n          \"function\" === typeof type\n            ? type.displayName || type.name || \"Unknown\"\n            : type\n        );\n      return ReactElement(\n        type,\n        children,\n        self,\n        source,\n        getOwner(),\n        maybeKey,\n        debugStack,\n        debugTask\n      );\n    }\n    function validateChildKeys(node) {\n      \"object\" === typeof node &&\n        null !== node &&\n        node.$$typeof === REACT_ELEMENT_TYPE &&\n        node._store &&\n        (node._store.validated = 1);\n    }\n    var React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"),\n      REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n      REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n      REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n      REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n      REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n      REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n      REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n      REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n      REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n      REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n      REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n      REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n      REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n      REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n      ReactSharedInternals =\n        React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n      hasOwnProperty = Object.prototype.hasOwnProperty,\n      isArrayImpl = Array.isArray,\n      createTask = console.createTask\n        ? console.createTask\n        : function () {\n            return null;\n          };\n    React = {\n      react_stack_bottom_frame: function (callStackForError) {\n        return callStackForError();\n      }\n    };\n    var specialPropKeyWarningShown;\n    var didWarnAboutElementRef = {};\n    var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n      React,\n      UnknownOwner\n    )();\n    var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n    var didWarnAboutKeySpread = {};\n    exports.Fragment = REACT_FRAGMENT_TYPE;\n    exports.jsx = function (type, config, maybeKey, source, self) {\n      var trackActualOwner =\n        1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n      return jsxDEVImpl(\n        type,\n        config,\n        maybeKey,\n        !1,\n        source,\n        self,\n        trackActualOwner\n          ? Error(\"react-stack-top-frame\")\n          : unknownOwnerDebugStack,\n        trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n      );\n    };\n    exports.jsxs = function (type, config, maybeKey, source, self) {\n      var trackActualOwner =\n        1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n      return jsxDEVImpl(\n        type,\n        config,\n        maybeKey,\n        !0,\n        source,\n        self,\n        trackActualOwner\n          ? Error(\"react-stack-top-frame\")\n          : unknownOwnerDebugStack,\n        trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n      );\n    };\n  })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9janMvcmVhY3QtanN4LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhO0FBQ2IsS0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsK0NBQStDLDZCQUE2QjtBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLGdCQUFnQixnREFBZ0Q7QUFDaEUsZ0JBQWdCLGFBQWE7QUFDN0I7QUFDQTtBQUNBLGdDQUFnQyxrQ0FBa0MsT0FBTztBQUN6RTtBQUNBLGdHQUFnRyxTQUFTLFVBQVUsc0ZBQXNGLGFBQWEsVUFBVSxVQUFVO0FBQzFPO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsa1BBQTBCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksZ0JBQWdCO0FBQ3BCLElBQUksV0FBVztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksWUFBWTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNC43X0BiYWJlbCtjb3JlQDcuMjguM19Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHBsYXl3cmlnaHQrdGVzdEAxLjU1LjBfcmVhY3QtZF80N2ZmMzgxM2Q3OTA1NjZkZjI1NGEyMTYzNTUwYzJkNS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0L2Nqcy9yZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1qc3gtcnVudGltZS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuXCJ1c2Ugc3RyaWN0XCI7XG5cInByb2R1Y3Rpb25cIiAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgJiZcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkge1xuICAgICAgaWYgKG51bGwgPT0gdHlwZSkgcmV0dXJuIG51bGw7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgcmV0dXJuIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0VcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIHJldHVybiB0eXBlO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJGcmFnbWVudFwiO1xuICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN0cmljdE1vZGVcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICAgICAgICBjYXNlIFJFQUNUX0FDVElWSVRZX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiQWN0aXZpdHlcIjtcbiAgICAgIH1cbiAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHR5cGUudGFnICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSgpLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgdHlwZS4kJHR5cGVvZilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBcIlBvcnRhbFwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCI7XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuICh0eXBlLl9jb250ZXh0LmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiKSArIFwiLkNvbnN1bWVyXCI7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgdmFyIGlubmVyVHlwZSA9IHR5cGUucmVuZGVyO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICB0eXBlIHx8XG4gICAgICAgICAgICAgICgodHlwZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCBcIlwiKSxcbiAgICAgICAgICAgICAgKHR5cGUgPSBcIlwiICE9PSB0eXBlID8gXCJGb3J3YXJkUmVmKFwiICsgdHlwZSArIFwiKVwiIDogXCJGb3J3YXJkUmVmXCIpKTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGlubmVyVHlwZSA9IHR5cGUuZGlzcGxheU5hbWUgfHwgbnVsbCksXG4gICAgICAgICAgICAgIG51bGwgIT09IGlubmVyVHlwZVxuICAgICAgICAgICAgICAgID8gaW5uZXJUeXBlXG4gICAgICAgICAgICAgICAgOiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCBcIk1lbW9cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgIGlubmVyVHlwZSA9IHR5cGUuX3BheWxvYWQ7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5faW5pdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZShpbm5lclR5cGUpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBcIlwiICsgdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24odmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITA7XG4gICAgICB9XG4gICAgICBpZiAoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0KSB7XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IGNvbnNvbGU7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX3RlbXBfY29uc3QgPSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQuZXJyb3I7XG4gICAgICAgIHZhciBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDAgPVxuICAgICAgICAgIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBTeW1ib2wgJiZcbiAgICAgICAgICAgIFN5bWJvbC50b1N0cmluZ1RhZyAmJlxuICAgICAgICAgICAgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSkgfHxcbiAgICAgICAgICB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8XG4gICAgICAgICAgXCJPYmplY3RcIjtcbiAgICAgICAgSlNDb21waWxlcl90ZW1wX2NvbnN0LmNhbGwoXG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LFxuICAgICAgICAgIFwiVGhlIHByb3ZpZGVkIGtleSBpcyBhbiB1bnN1cHBvcnRlZCB0eXBlICVzLiBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS5cIixcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQkanNjb21wJDBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRhc2tOYW1lKHR5cGUpIHtcbiAgICAgIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSByZXR1cm4gXCI8PlwiO1xuICAgICAgaWYgKFxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICBudWxsICE9PSB0eXBlICYmXG4gICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRVxuICAgICAgKVxuICAgICAgICByZXR1cm4gXCI8Li4uPlwiO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XG4gICAgICAgIHJldHVybiBuYW1lID8gXCI8XCIgKyBuYW1lICsgXCI+XCIgOiBcIjwuLi4+XCI7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIHJldHVybiBcIjwuLi4+XCI7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE93bmVyKCkge1xuICAgICAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5BO1xuICAgICAgcmV0dXJuIG51bGwgPT09IGRpc3BhdGNoZXIgPyBudWxsIDogZGlzcGF0Y2hlci5nZXRPd25lcigpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBVbmtub3duT3duZXIoKSB7XG4gICAgICByZXR1cm4gRXJyb3IoXCJyZWFjdC1zdGFjay10b3AtZnJhbWVcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBcImtleVwiKSkge1xuICAgICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsIFwia2V5XCIpLmdldDtcbiAgICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHJldHVybiAhMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2b2lkIDAgIT09IGNvbmZpZy5rZXk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICAgICAgZnVuY3Rpb24gd2FybkFib3V0QWNjZXNzaW5nS2V5KCkge1xuICAgICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biB8fFxuICAgICAgICAgICgoc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSAhMCksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiJXM6IGBrZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSB2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50IHByb3AuIChodHRwczovL3JlYWN0LmRldi9saW5rL3NwZWNpYWwtcHJvcHMpXCIsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZVxuICAgICAgICAgICkpO1xuICAgICAgfVxuICAgICAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gITA7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsIFwia2V5XCIsIHtcbiAgICAgICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXksXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbGVtZW50UmVmR2V0dGVyV2l0aERlcHJlY2F0aW9uV2FybmluZygpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHRoaXMudHlwZSk7XG4gICAgICBkaWRXYXJuQWJvdXRFbGVtZW50UmVmW2NvbXBvbmVudE5hbWVdIHx8XG4gICAgICAgICgoZGlkV2FybkFib3V0RWxlbWVudFJlZltjb21wb25lbnROYW1lXSA9ICEwKSxcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkFjY2Vzc2luZyBlbGVtZW50LnJlZiB3YXMgcmVtb3ZlZCBpbiBSZWFjdCAxOS4gcmVmIGlzIG5vdyBhIHJlZ3VsYXIgcHJvcC4gSXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIEpTWCBFbGVtZW50IHR5cGUgaW4gYSBmdXR1cmUgcmVsZWFzZS5cIlxuICAgICAgICApKTtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSB0aGlzLnByb3BzLnJlZjtcbiAgICAgIHJldHVybiB2b2lkIDAgIT09IGNvbXBvbmVudE5hbWUgPyBjb21wb25lbnROYW1lIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gUmVhY3RFbGVtZW50KFxuICAgICAgdHlwZSxcbiAgICAgIGtleSxcbiAgICAgIHNlbGYsXG4gICAgICBzb3VyY2UsXG4gICAgICBvd25lcixcbiAgICAgIHByb3BzLFxuICAgICAgZGVidWdTdGFjayxcbiAgICAgIGRlYnVnVGFza1xuICAgICkge1xuICAgICAgc2VsZiA9IHByb3BzLnJlZjtcbiAgICAgIHR5cGUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgIF9vd25lcjogb3duZXJcbiAgICAgIH07XG4gICAgICBudWxsICE9PSAodm9pZCAwICE9PSBzZWxmID8gc2VsZiA6IG51bGwpXG4gICAgICAgID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwicmVmXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgICAgZ2V0OiBlbGVtZW50UmVmR2V0dGVyV2l0aERlcHJlY2F0aW9uV2FybmluZ1xuICAgICAgICAgIH0pXG4gICAgICAgIDogT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwicmVmXCIsIHsgZW51bWVyYWJsZTogITEsIHZhbHVlOiBudWxsIH0pO1xuICAgICAgdHlwZS5fc3RvcmUgPSB7fTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLl9zdG9yZSwgXCJ2YWxpZGF0ZWRcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICB2YWx1ZTogMFxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJfZGVidWdJbmZvXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwiX2RlYnVnU3RhY2tcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICB2YWx1ZTogZGVidWdTdGFja1xuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJfZGVidWdUYXNrXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IGRlYnVnVGFza1xuICAgICAgfSk7XG4gICAgICBPYmplY3QuZnJlZXplICYmIChPYmplY3QuZnJlZXplKHR5cGUucHJvcHMpLCBPYmplY3QuZnJlZXplKHR5cGUpKTtcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBqc3hERVZJbXBsKFxuICAgICAgdHlwZSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIG1heWJlS2V5LFxuICAgICAgaXNTdGF0aWNDaGlsZHJlbixcbiAgICAgIHNvdXJjZSxcbiAgICAgIHNlbGYsXG4gICAgICBkZWJ1Z1N0YWNrLFxuICAgICAgZGVidWdUYXNrXG4gICAgKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBjb25maWcuY2hpbGRyZW47XG4gICAgICBpZiAodm9pZCAwICE9PSBjaGlsZHJlbilcbiAgICAgICAgaWYgKGlzU3RhdGljQ2hpbGRyZW4pXG4gICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgaXNTdGF0aWNDaGlsZHJlbiA9IDA7XG4gICAgICAgICAgICAgIGlzU3RhdGljQ2hpbGRyZW4gPCBjaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgICAgIGlzU3RhdGljQ2hpbGRyZW4rK1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhjaGlsZHJlbltpc1N0YXRpY0NoaWxkcmVuXSk7XG4gICAgICAgICAgICBPYmplY3QuZnJlZXplICYmIE9iamVjdC5mcmVlemUoY2hpbGRyZW4pO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdC5qc3g6IFN0YXRpYyBjaGlsZHJlbiBzaG91bGQgYWx3YXlzIGJlIGFuIGFycmF5LiBZb3UgYXJlIGxpa2VseSBleHBsaWNpdGx5IGNhbGxpbmcgUmVhY3QuanN4cyBvciBSZWFjdC5qc3hERVYuIFVzZSB0aGUgQmFiZWwgdHJhbnNmb3JtIGluc3RlYWQuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIGVsc2UgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW4pO1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBcImtleVwiKSkge1xuICAgICAgICBjaGlsZHJlbiA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhjb25maWcpLmZpbHRlcihmdW5jdGlvbiAoaykge1xuICAgICAgICAgIHJldHVybiBcImtleVwiICE9PSBrO1xuICAgICAgICB9KTtcbiAgICAgICAgaXNTdGF0aWNDaGlsZHJlbiA9XG4gICAgICAgICAgMCA8IGtleXMubGVuZ3RoXG4gICAgICAgICAgICA/IFwie2tleTogc29tZUtleSwgXCIgKyBrZXlzLmpvaW4oXCI6IC4uLiwgXCIpICsgXCI6IC4uLn1cIlxuICAgICAgICAgICAgOiBcIntrZXk6IHNvbWVLZXl9XCI7XG4gICAgICAgIGRpZFdhcm5BYm91dEtleVNwcmVhZFtjaGlsZHJlbiArIGlzU3RhdGljQ2hpbGRyZW5dIHx8XG4gICAgICAgICAgKChrZXlzID1cbiAgICAgICAgICAgIDAgPCBrZXlzLmxlbmd0aCA/IFwie1wiICsga2V5cy5qb2luKFwiOiAuLi4sIFwiKSArIFwiOiAuLi59XCIgOiBcInt9XCIpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAnQSBwcm9wcyBvYmplY3QgY29udGFpbmluZyBhIFwia2V5XCIgcHJvcCBpcyBiZWluZyBzcHJlYWQgaW50byBKU1g6XFxuICBsZXQgcHJvcHMgPSAlcztcXG4gIDwlcyB7Li4ucHJvcHN9IC8+XFxuUmVhY3Qga2V5cyBtdXN0IGJlIHBhc3NlZCBkaXJlY3RseSB0byBKU1ggd2l0aG91dCB1c2luZyBzcHJlYWQ6XFxuICBsZXQgcHJvcHMgPSAlcztcXG4gIDwlcyBrZXk9e3NvbWVLZXl9IHsuLi5wcm9wc30gLz4nLFxuICAgICAgICAgICAgaXNTdGF0aWNDaGlsZHJlbixcbiAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAga2V5cyxcbiAgICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgKSxcbiAgICAgICAgICAoZGlkV2FybkFib3V0S2V5U3ByZWFkW2NoaWxkcmVuICsgaXNTdGF0aWNDaGlsZHJlbl0gPSAhMCkpO1xuICAgICAgfVxuICAgICAgY2hpbGRyZW4gPSBudWxsO1xuICAgICAgdm9pZCAwICE9PSBtYXliZUtleSAmJlxuICAgICAgICAoY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihtYXliZUtleSksIChjaGlsZHJlbiA9IFwiXCIgKyBtYXliZUtleSkpO1xuICAgICAgaGFzVmFsaWRLZXkoY29uZmlnKSAmJlxuICAgICAgICAoY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KSwgKGNoaWxkcmVuID0gXCJcIiArIGNvbmZpZy5rZXkpKTtcbiAgICAgIGlmIChcImtleVwiIGluIGNvbmZpZykge1xuICAgICAgICBtYXliZUtleSA9IHt9O1xuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBjb25maWcpXG4gICAgICAgICAgXCJrZXlcIiAhPT0gcHJvcE5hbWUgJiYgKG1heWJlS2V5W3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV0pO1xuICAgICAgfSBlbHNlIG1heWJlS2V5ID0gY29uZmlnO1xuICAgICAgY2hpbGRyZW4gJiZcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIoXG4gICAgICAgICAgbWF5YmVLZXksXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZVxuICAgICAgICAgICAgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBcIlVua25vd25cIlxuICAgICAgICAgICAgOiB0eXBlXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gUmVhY3RFbGVtZW50KFxuICAgICAgICB0eXBlLFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgc2VsZixcbiAgICAgICAgc291cmNlLFxuICAgICAgICBnZXRPd25lcigpLFxuICAgICAgICBtYXliZUtleSxcbiAgICAgICAgZGVidWdTdGFjayxcbiAgICAgICAgZGVidWdUYXNrXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlKSB7XG4gICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygbm9kZSAmJlxuICAgICAgICBudWxsICE9PSBub2RlICYmXG4gICAgICAgIG5vZGUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSAmJlxuICAgICAgICBub2RlLl9zdG9yZSAmJlxuICAgICAgICAobm9kZS5fc3RvcmUudmFsaWRhdGVkID0gMSk7XG4gICAgfVxuICAgIHZhciBSZWFjdCA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3RcIiksXG4gICAgICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnRcIiksXG4gICAgICBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksXG4gICAgICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLFxuICAgICAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxcbiAgICAgIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIiksXG4gICAgICBSRUFDVF9DT05TVU1FUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnN1bWVyXCIpLFxuICAgICAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksXG4gICAgICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLFxuICAgICAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLFxuICAgICAgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksXG4gICAgICBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSxcbiAgICAgIFJFQUNUX0FDVElWSVRZX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuYWN0aXZpdHlcIiksXG4gICAgICBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIiksXG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscyA9XG4gICAgICAgIFJlYWN0Ll9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxcbiAgICAgIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbiAgICAgIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheSxcbiAgICAgIGNyZWF0ZVRhc2sgPSBjb25zb2xlLmNyZWF0ZVRhc2tcbiAgICAgICAgPyBjb25zb2xlLmNyZWF0ZVRhc2tcbiAgICAgICAgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9O1xuICAgIFJlYWN0ID0ge1xuICAgICAgcmVhY3Rfc3RhY2tfYm90dG9tX2ZyYW1lOiBmdW5jdGlvbiAoY2FsbFN0YWNrRm9yRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxTdGFja0ZvckVycm9yKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB2YXIgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd247XG4gICAgdmFyIGRpZFdhcm5BYm91dEVsZW1lbnRSZWYgPSB7fTtcbiAgICB2YXIgdW5rbm93bk93bmVyRGVidWdTdGFjayA9IFJlYWN0LnJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZS5iaW5kKFxuICAgICAgUmVhY3QsXG4gICAgICBVbmtub3duT3duZXJcbiAgICApKCk7XG4gICAgdmFyIHVua25vd25Pd25lckRlYnVnVGFzayA9IGNyZWF0ZVRhc2soZ2V0VGFza05hbWUoVW5rbm93bk93bmVyKSk7XG4gICAgdmFyIGRpZFdhcm5BYm91dEtleVNwcmVhZCA9IHt9O1xuICAgIGV4cG9ydHMuRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xuICAgIGV4cG9ydHMuanN4ID0gZnVuY3Rpb24gKHR5cGUsIGNvbmZpZywgbWF5YmVLZXksIHNvdXJjZSwgc2VsZikge1xuICAgICAgdmFyIHRyYWNrQWN0dWFsT3duZXIgPVxuICAgICAgICAxZTQgPiBSZWFjdFNoYXJlZEludGVybmFscy5yZWNlbnRseUNyZWF0ZWRPd25lclN0YWNrcysrO1xuICAgICAgcmV0dXJuIGpzeERFVkltcGwoXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgbWF5YmVLZXksXG4gICAgICAgICExLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHNlbGYsXG4gICAgICAgIHRyYWNrQWN0dWFsT3duZXJcbiAgICAgICAgICA/IEVycm9yKFwicmVhY3Qtc3RhY2stdG9wLWZyYW1lXCIpXG4gICAgICAgICAgOiB1bmtub3duT3duZXJEZWJ1Z1N0YWNrLFxuICAgICAgICB0cmFja0FjdHVhbE93bmVyID8gY3JlYXRlVGFzayhnZXRUYXNrTmFtZSh0eXBlKSkgOiB1bmtub3duT3duZXJEZWJ1Z1Rhc2tcbiAgICAgICk7XG4gICAgfTtcbiAgICBleHBvcnRzLmpzeHMgPSBmdW5jdGlvbiAodHlwZSwgY29uZmlnLCBtYXliZUtleSwgc291cmNlLCBzZWxmKSB7XG4gICAgICB2YXIgdHJhY2tBY3R1YWxPd25lciA9XG4gICAgICAgIDFlNCA+IFJlYWN0U2hhcmVkSW50ZXJuYWxzLnJlY2VudGx5Q3JlYXRlZE93bmVyU3RhY2tzKys7XG4gICAgICByZXR1cm4ganN4REVWSW1wbChcbiAgICAgICAgdHlwZSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBtYXliZUtleSxcbiAgICAgICAgITAsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgc2VsZixcbiAgICAgICAgdHJhY2tBY3R1YWxPd25lclxuICAgICAgICAgID8gRXJyb3IoXCJyZWFjdC1zdGFjay10b3AtZnJhbWVcIilcbiAgICAgICAgICA6IHVua25vd25Pd25lckRlYnVnU3RhY2ssXG4gICAgICAgIHRyYWNrQWN0dWFsT3duZXIgPyBjcmVhdGVUYXNrKGdldFRhc2tOYW1lKHR5cGUpKSA6IHVua25vd25Pd25lckRlYnVnVGFza1xuICAgICAgKTtcbiAgICB9O1xuICB9KSgpO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/cjs/react-jsx-runtime.development.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/cjs/react.development.js":
/*!********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/cjs/react.development.js ***!
  \********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/* module decorator */ module = __webpack_require__.nmd(module);\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js\");\n/**\n * @license React\n * react.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n  (function () {\n    function defineDeprecationWarning(methodName, info) {\n      Object.defineProperty(Component.prototype, methodName, {\n        get: function () {\n          console.warn(\n            \"%s(...) is deprecated in plain JavaScript React classes. %s\",\n            info[0],\n            info[1]\n          );\n        }\n      });\n    }\n    function getIteratorFn(maybeIterable) {\n      if (null === maybeIterable || \"object\" !== typeof maybeIterable)\n        return null;\n      maybeIterable =\n        (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n        maybeIterable[\"@@iterator\"];\n      return \"function\" === typeof maybeIterable ? maybeIterable : null;\n    }\n    function warnNoop(publicInstance, callerName) {\n      publicInstance =\n        ((publicInstance = publicInstance.constructor) &&\n          (publicInstance.displayName || publicInstance.name)) ||\n        \"ReactClass\";\n      var warningKey = publicInstance + \".\" + callerName;\n      didWarnStateUpdateForUnmountedComponent[warningKey] ||\n        (console.error(\n          \"Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.\",\n          callerName,\n          publicInstance\n        ),\n        (didWarnStateUpdateForUnmountedComponent[warningKey] = !0));\n    }\n    function Component(props, context, updater) {\n      this.props = props;\n      this.context = context;\n      this.refs = emptyObject;\n      this.updater = updater || ReactNoopUpdateQueue;\n    }\n    function ComponentDummy() {}\n    function PureComponent(props, context, updater) {\n      this.props = props;\n      this.context = context;\n      this.refs = emptyObject;\n      this.updater = updater || ReactNoopUpdateQueue;\n    }\n    function noop() {}\n    function testStringCoercion(value) {\n      return \"\" + value;\n    }\n    function checkKeyStringCoercion(value) {\n      try {\n        testStringCoercion(value);\n        var JSCompiler_inline_result = !1;\n      } catch (e) {\n        JSCompiler_inline_result = !0;\n      }\n      if (JSCompiler_inline_result) {\n        JSCompiler_inline_result = console;\n        var JSCompiler_temp_const = JSCompiler_inline_result.error;\n        var JSCompiler_inline_result$jscomp$0 =\n          (\"function\" === typeof Symbol &&\n            Symbol.toStringTag &&\n            value[Symbol.toStringTag]) ||\n          value.constructor.name ||\n          \"Object\";\n        JSCompiler_temp_const.call(\n          JSCompiler_inline_result,\n          \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n          JSCompiler_inline_result$jscomp$0\n        );\n        return testStringCoercion(value);\n      }\n    }\n    function getComponentNameFromType(type) {\n      if (null == type) return null;\n      if (\"function\" === typeof type)\n        return type.$$typeof === REACT_CLIENT_REFERENCE\n          ? null\n          : type.displayName || type.name || null;\n      if (\"string\" === typeof type) return type;\n      switch (type) {\n        case REACT_FRAGMENT_TYPE:\n          return \"Fragment\";\n        case REACT_PROFILER_TYPE:\n          return \"Profiler\";\n        case REACT_STRICT_MODE_TYPE:\n          return \"StrictMode\";\n        case REACT_SUSPENSE_TYPE:\n          return \"Suspense\";\n        case REACT_SUSPENSE_LIST_TYPE:\n          return \"SuspenseList\";\n        case REACT_ACTIVITY_TYPE:\n          return \"Activity\";\n      }\n      if (\"object\" === typeof type)\n        switch (\n          (\"number\" === typeof type.tag &&\n            console.error(\n              \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n            ),\n          type.$$typeof)\n        ) {\n          case REACT_PORTAL_TYPE:\n            return \"Portal\";\n          case REACT_CONTEXT_TYPE:\n            return type.displayName || \"Context\";\n          case REACT_CONSUMER_TYPE:\n            return (type._context.displayName || \"Context\") + \".Consumer\";\n          case REACT_FORWARD_REF_TYPE:\n            var innerType = type.render;\n            type = type.displayName;\n            type ||\n              ((type = innerType.displayName || innerType.name || \"\"),\n              (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n            return type;\n          case REACT_MEMO_TYPE:\n            return (\n              (innerType = type.displayName || null),\n              null !== innerType\n                ? innerType\n                : getComponentNameFromType(type.type) || \"Memo\"\n            );\n          case REACT_LAZY_TYPE:\n            innerType = type._payload;\n            type = type._init;\n            try {\n              return getComponentNameFromType(type(innerType));\n            } catch (x) {}\n        }\n      return null;\n    }\n    function getTaskName(type) {\n      if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n      if (\n        \"object\" === typeof type &&\n        null !== type &&\n        type.$$typeof === REACT_LAZY_TYPE\n      )\n        return \"<...>\";\n      try {\n        var name = getComponentNameFromType(type);\n        return name ? \"<\" + name + \">\" : \"<...>\";\n      } catch (x) {\n        return \"<...>\";\n      }\n    }\n    function getOwner() {\n      var dispatcher = ReactSharedInternals.A;\n      return null === dispatcher ? null : dispatcher.getOwner();\n    }\n    function UnknownOwner() {\n      return Error(\"react-stack-top-frame\");\n    }\n    function hasValidKey(config) {\n      if (hasOwnProperty.call(config, \"key\")) {\n        var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n        if (getter && getter.isReactWarning) return !1;\n      }\n      return void 0 !== config.key;\n    }\n    function defineKeyPropWarningGetter(props, displayName) {\n      function warnAboutAccessingKey() {\n        specialPropKeyWarningShown ||\n          ((specialPropKeyWarningShown = !0),\n          console.error(\n            \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n            displayName\n          ));\n      }\n      warnAboutAccessingKey.isReactWarning = !0;\n      Object.defineProperty(props, \"key\", {\n        get: warnAboutAccessingKey,\n        configurable: !0\n      });\n    }\n    function elementRefGetterWithDeprecationWarning() {\n      var componentName = getComponentNameFromType(this.type);\n      didWarnAboutElementRef[componentName] ||\n        ((didWarnAboutElementRef[componentName] = !0),\n        console.error(\n          \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n        ));\n      componentName = this.props.ref;\n      return void 0 !== componentName ? componentName : null;\n    }\n    function ReactElement(\n      type,\n      key,\n      self,\n      source,\n      owner,\n      props,\n      debugStack,\n      debugTask\n    ) {\n      self = props.ref;\n      type = {\n        $$typeof: REACT_ELEMENT_TYPE,\n        type: type,\n        key: key,\n        props: props,\n        _owner: owner\n      };\n      null !== (void 0 !== self ? self : null)\n        ? Object.defineProperty(type, \"ref\", {\n            enumerable: !1,\n            get: elementRefGetterWithDeprecationWarning\n          })\n        : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n      type._store = {};\n      Object.defineProperty(type._store, \"validated\", {\n        configurable: !1,\n        enumerable: !1,\n        writable: !0,\n        value: 0\n      });\n      Object.defineProperty(type, \"_debugInfo\", {\n        configurable: !1,\n        enumerable: !1,\n        writable: !0,\n        value: null\n      });\n      Object.defineProperty(type, \"_debugStack\", {\n        configurable: !1,\n        enumerable: !1,\n        writable: !0,\n        value: debugStack\n      });\n      Object.defineProperty(type, \"_debugTask\", {\n        configurable: !1,\n        enumerable: !1,\n        writable: !0,\n        value: debugTask\n      });\n      Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n      return type;\n    }\n    function cloneAndReplaceKey(oldElement, newKey) {\n      newKey = ReactElement(\n        oldElement.type,\n        newKey,\n        void 0,\n        void 0,\n        oldElement._owner,\n        oldElement.props,\n        oldElement._debugStack,\n        oldElement._debugTask\n      );\n      oldElement._store &&\n        (newKey._store.validated = oldElement._store.validated);\n      return newKey;\n    }\n    function isValidElement(object) {\n      return (\n        \"object\" === typeof object &&\n        null !== object &&\n        object.$$typeof === REACT_ELEMENT_TYPE\n      );\n    }\n    function escape(key) {\n      var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n      return (\n        \"$\" +\n        key.replace(/[=:]/g, function (match) {\n          return escaperLookup[match];\n        })\n      );\n    }\n    function getElementKey(element, index) {\n      return \"object\" === typeof element &&\n        null !== element &&\n        null != element.key\n        ? (checkKeyStringCoercion(element.key), escape(\"\" + element.key))\n        : index.toString(36);\n    }\n    function resolveThenable(thenable) {\n      switch (thenable.status) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw thenable.reason;\n        default:\n          switch (\n            (\"string\" === typeof thenable.status\n              ? thenable.then(noop, noop)\n              : ((thenable.status = \"pending\"),\n                thenable.then(\n                  function (fulfilledValue) {\n                    \"pending\" === thenable.status &&\n                      ((thenable.status = \"fulfilled\"),\n                      (thenable.value = fulfilledValue));\n                  },\n                  function (error) {\n                    \"pending\" === thenable.status &&\n                      ((thenable.status = \"rejected\"),\n                      (thenable.reason = error));\n                  }\n                )),\n            thenable.status)\n          ) {\n            case \"fulfilled\":\n              return thenable.value;\n            case \"rejected\":\n              throw thenable.reason;\n          }\n      }\n      throw thenable;\n    }\n    function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n      var type = typeof children;\n      if (\"undefined\" === type || \"boolean\" === type) children = null;\n      var invokeCallback = !1;\n      if (null === children) invokeCallback = !0;\n      else\n        switch (type) {\n          case \"bigint\":\n          case \"string\":\n          case \"number\":\n            invokeCallback = !0;\n            break;\n          case \"object\":\n            switch (children.$$typeof) {\n              case REACT_ELEMENT_TYPE:\n              case REACT_PORTAL_TYPE:\n                invokeCallback = !0;\n                break;\n              case REACT_LAZY_TYPE:\n                return (\n                  (invokeCallback = children._init),\n                  mapIntoArray(\n                    invokeCallback(children._payload),\n                    array,\n                    escapedPrefix,\n                    nameSoFar,\n                    callback\n                  )\n                );\n            }\n        }\n      if (invokeCallback) {\n        invokeCallback = children;\n        callback = callback(invokeCallback);\n        var childKey =\n          \"\" === nameSoFar ? \".\" + getElementKey(invokeCallback, 0) : nameSoFar;\n        isArrayImpl(callback)\n          ? ((escapedPrefix = \"\"),\n            null != childKey &&\n              (escapedPrefix =\n                childKey.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n            mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n              return c;\n            }))\n          : null != callback &&\n            (isValidElement(callback) &&\n              (null != callback.key &&\n                ((invokeCallback && invokeCallback.key === callback.key) ||\n                  checkKeyStringCoercion(callback.key)),\n              (escapedPrefix = cloneAndReplaceKey(\n                callback,\n                escapedPrefix +\n                  (null == callback.key ||\n                  (invokeCallback && invokeCallback.key === callback.key)\n                    ? \"\"\n                    : (\"\" + callback.key).replace(\n                        userProvidedKeyEscapeRegex,\n                        \"$&/\"\n                      ) + \"/\") +\n                  childKey\n              )),\n              \"\" !== nameSoFar &&\n                null != invokeCallback &&\n                isValidElement(invokeCallback) &&\n                null == invokeCallback.key &&\n                invokeCallback._store &&\n                !invokeCallback._store.validated &&\n                (escapedPrefix._store.validated = 2),\n              (callback = escapedPrefix)),\n            array.push(callback));\n        return 1;\n      }\n      invokeCallback = 0;\n      childKey = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n      if (isArrayImpl(children))\n        for (var i = 0; i < children.length; i++)\n          (nameSoFar = children[i]),\n            (type = childKey + getElementKey(nameSoFar, i)),\n            (invokeCallback += mapIntoArray(\n              nameSoFar,\n              array,\n              escapedPrefix,\n              type,\n              callback\n            ));\n      else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n        for (\n          i === children.entries &&\n            (didWarnAboutMaps ||\n              console.warn(\n                \"Using Maps as children is not supported. Use an array of keyed ReactElements instead.\"\n              ),\n            (didWarnAboutMaps = !0)),\n            children = i.call(children),\n            i = 0;\n          !(nameSoFar = children.next()).done;\n\n        )\n          (nameSoFar = nameSoFar.value),\n            (type = childKey + getElementKey(nameSoFar, i++)),\n            (invokeCallback += mapIntoArray(\n              nameSoFar,\n              array,\n              escapedPrefix,\n              type,\n              callback\n            ));\n      else if (\"object\" === type) {\n        if (\"function\" === typeof children.then)\n          return mapIntoArray(\n            resolveThenable(children),\n            array,\n            escapedPrefix,\n            nameSoFar,\n            callback\n          );\n        array = String(children);\n        throw Error(\n          \"Objects are not valid as a React child (found: \" +\n            (\"[object Object]\" === array\n              ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n              : array) +\n            \"). If you meant to render a collection of children, use an array instead.\"\n        );\n      }\n      return invokeCallback;\n    }\n    function mapChildren(children, func, context) {\n      if (null == children) return children;\n      var result = [],\n        count = 0;\n      mapIntoArray(children, result, \"\", \"\", function (child) {\n        return func.call(context, child, count++);\n      });\n      return result;\n    }\n    function lazyInitializer(payload) {\n      if (-1 === payload._status) {\n        var ctor = payload._result;\n        ctor = ctor();\n        ctor.then(\n          function (moduleObject) {\n            if (0 === payload._status || -1 === payload._status)\n              (payload._status = 1), (payload._result = moduleObject);\n          },\n          function (error) {\n            if (0 === payload._status || -1 === payload._status)\n              (payload._status = 2), (payload._result = error);\n          }\n        );\n        -1 === payload._status &&\n          ((payload._status = 0), (payload._result = ctor));\n      }\n      if (1 === payload._status)\n        return (\n          (ctor = payload._result),\n          void 0 === ctor &&\n            console.error(\n              \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n  const MyComponent = lazy(() => import('./MyComponent'))\\n\\nDid you accidentally put curly braces around the import?\",\n              ctor\n            ),\n          \"default\" in ctor ||\n            console.error(\n              \"lazy: Expected the result of a dynamic import() call. Instead received: %s\\n\\nYour code should look like: \\n  const MyComponent = lazy(() => import('./MyComponent'))\",\n              ctor\n            ),\n          ctor.default\n        );\n      throw payload._result;\n    }\n    function resolveDispatcher() {\n      var dispatcher = ReactSharedInternals.H;\n      null === dispatcher &&\n        console.error(\n          \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.\"\n        );\n      return dispatcher;\n    }\n    function releaseAsyncTransition() {\n      ReactSharedInternals.asyncTransitions--;\n    }\n    function enqueueTask(task) {\n      if (null === enqueueTaskImpl)\n        try {\n          var requireString = (\"require\" + Math.random()).slice(0, 7);\n          enqueueTaskImpl = (module && module[requireString]).call(\n            module,\n            \"timers\"\n          ).setImmediate;\n        } catch (_err) {\n          enqueueTaskImpl = function (callback) {\n            !1 === didWarnAboutMessageChannel &&\n              ((didWarnAboutMessageChannel = !0),\n              \"undefined\" === typeof MessageChannel &&\n                console.error(\n                  \"This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning.\"\n                ));\n            var channel = new MessageChannel();\n            channel.port1.onmessage = callback;\n            channel.port2.postMessage(void 0);\n          };\n        }\n      return enqueueTaskImpl(task);\n    }\n    function aggregateErrors(errors) {\n      return 1 < errors.length && \"function\" === typeof AggregateError\n        ? new AggregateError(errors)\n        : errors[0];\n    }\n    function popActScope(prevActQueue, prevActScopeDepth) {\n      prevActScopeDepth !== actScopeDepth - 1 &&\n        console.error(\n          \"You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. \"\n        );\n      actScopeDepth = prevActScopeDepth;\n    }\n    function recursivelyFlushAsyncActWork(returnValue, resolve, reject) {\n      var queue = ReactSharedInternals.actQueue;\n      if (null !== queue)\n        if (0 !== queue.length)\n          try {\n            flushActQueue(queue);\n            enqueueTask(function () {\n              return recursivelyFlushAsyncActWork(returnValue, resolve, reject);\n            });\n            return;\n          } catch (error) {\n            ReactSharedInternals.thrownErrors.push(error);\n          }\n        else ReactSharedInternals.actQueue = null;\n      0 < ReactSharedInternals.thrownErrors.length\n        ? ((queue = aggregateErrors(ReactSharedInternals.thrownErrors)),\n          (ReactSharedInternals.thrownErrors.length = 0),\n          reject(queue))\n        : resolve(returnValue);\n    }\n    function flushActQueue(queue) {\n      if (!isFlushing) {\n        isFlushing = !0;\n        var i = 0;\n        try {\n          for (; i < queue.length; i++) {\n            var callback = queue[i];\n            do {\n              ReactSharedInternals.didUsePromise = !1;\n              var continuation = callback(!1);\n              if (null !== continuation) {\n                if (ReactSharedInternals.didUsePromise) {\n                  queue[i] = callback;\n                  queue.splice(0, i);\n                  return;\n                }\n                callback = continuation;\n              } else break;\n            } while (1);\n          }\n          queue.length = 0;\n        } catch (error) {\n          queue.splice(0, i + 1), ReactSharedInternals.thrownErrors.push(error);\n        } finally {\n          isFlushing = !1;\n        }\n      }\n    }\n    \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n      \"function\" ===\n        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n    var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n      REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n      REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n      REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n      REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n      REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n      REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n      REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n      REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n      REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n      REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n      REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n      REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n      MAYBE_ITERATOR_SYMBOL = Symbol.iterator,\n      didWarnStateUpdateForUnmountedComponent = {},\n      ReactNoopUpdateQueue = {\n        isMounted: function () {\n          return !1;\n        },\n        enqueueForceUpdate: function (publicInstance) {\n          warnNoop(publicInstance, \"forceUpdate\");\n        },\n        enqueueReplaceState: function (publicInstance) {\n          warnNoop(publicInstance, \"replaceState\");\n        },\n        enqueueSetState: function (publicInstance) {\n          warnNoop(publicInstance, \"setState\");\n        }\n      },\n      assign = Object.assign,\n      emptyObject = {};\n    Object.freeze(emptyObject);\n    Component.prototype.isReactComponent = {};\n    Component.prototype.setState = function (partialState, callback) {\n      if (\n        \"object\" !== typeof partialState &&\n        \"function\" !== typeof partialState &&\n        null != partialState\n      )\n        throw Error(\n          \"takes an object of state variables to update or a function which returns an object of state variables.\"\n        );\n      this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n    };\n    Component.prototype.forceUpdate = function (callback) {\n      this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n    };\n    var deprecatedAPIs = {\n        isMounted: [\n          \"isMounted\",\n          \"Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks.\"\n        ],\n        replaceState: [\n          \"replaceState\",\n          \"Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236).\"\n        ]\n      },\n      fnName;\n    for (fnName in deprecatedAPIs)\n      deprecatedAPIs.hasOwnProperty(fnName) &&\n        defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n    ComponentDummy.prototype = Component.prototype;\n    deprecatedAPIs = PureComponent.prototype = new ComponentDummy();\n    deprecatedAPIs.constructor = PureComponent;\n    assign(deprecatedAPIs, Component.prototype);\n    deprecatedAPIs.isPureReactComponent = !0;\n    var isArrayImpl = Array.isArray,\n      REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n      ReactSharedInternals = {\n        H: null,\n        A: null,\n        T: null,\n        S: null,\n        actQueue: null,\n        asyncTransitions: 0,\n        isBatchingLegacy: !1,\n        didScheduleLegacyUpdate: !1,\n        didUsePromise: !1,\n        thrownErrors: [],\n        getCurrentStack: null,\n        recentlyCreatedOwnerStacks: 0\n      },\n      hasOwnProperty = Object.prototype.hasOwnProperty,\n      createTask = console.createTask\n        ? console.createTask\n        : function () {\n            return null;\n          };\n    deprecatedAPIs = {\n      react_stack_bottom_frame: function (callStackForError) {\n        return callStackForError();\n      }\n    };\n    var specialPropKeyWarningShown, didWarnAboutOldJSXRuntime;\n    var didWarnAboutElementRef = {};\n    var unknownOwnerDebugStack = deprecatedAPIs.react_stack_bottom_frame.bind(\n      deprecatedAPIs,\n      UnknownOwner\n    )();\n    var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n    var didWarnAboutMaps = !1,\n      userProvidedKeyEscapeRegex = /\\/+/g,\n      reportGlobalError =\n        \"function\" === typeof reportError\n          ? reportError\n          : function (error) {\n              if (\n                \"object\" === typeof window &&\n                \"function\" === typeof window.ErrorEvent\n              ) {\n                var event = new window.ErrorEvent(\"error\", {\n                  bubbles: !0,\n                  cancelable: !0,\n                  message:\n                    \"object\" === typeof error &&\n                    null !== error &&\n                    \"string\" === typeof error.message\n                      ? String(error.message)\n                      : String(error),\n                  error: error\n                });\n                if (!window.dispatchEvent(event)) return;\n              } else if (\n                \"object\" === typeof process &&\n                \"function\" === typeof process.emit\n              ) {\n                process.emit(\"uncaughtException\", error);\n                return;\n              }\n              console.error(error);\n            },\n      didWarnAboutMessageChannel = !1,\n      enqueueTaskImpl = null,\n      actScopeDepth = 0,\n      didWarnNoAwaitAct = !1,\n      isFlushing = !1,\n      queueSeveralMicrotasks =\n        \"function\" === typeof queueMicrotask\n          ? function (callback) {\n              queueMicrotask(function () {\n                return queueMicrotask(callback);\n              });\n            }\n          : enqueueTask;\n    deprecatedAPIs = Object.freeze({\n      __proto__: null,\n      c: function (size) {\n        return resolveDispatcher().useMemoCache(size);\n      }\n    });\n    exports.Children = {\n      map: mapChildren,\n      forEach: function (children, forEachFunc, forEachContext) {\n        mapChildren(\n          children,\n          function () {\n            forEachFunc.apply(this, arguments);\n          },\n          forEachContext\n        );\n      },\n      count: function (children) {\n        var n = 0;\n        mapChildren(children, function () {\n          n++;\n        });\n        return n;\n      },\n      toArray: function (children) {\n        return (\n          mapChildren(children, function (child) {\n            return child;\n          }) || []\n        );\n      },\n      only: function (children) {\n        if (!isValidElement(children))\n          throw Error(\n            \"React.Children.only expected to receive a single React element child.\"\n          );\n        return children;\n      }\n    };\n    exports.Component = Component;\n    exports.Fragment = REACT_FRAGMENT_TYPE;\n    exports.Profiler = REACT_PROFILER_TYPE;\n    exports.PureComponent = PureComponent;\n    exports.StrictMode = REACT_STRICT_MODE_TYPE;\n    exports.Suspense = REACT_SUSPENSE_TYPE;\n    exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n      ReactSharedInternals;\n    exports.__COMPILER_RUNTIME = deprecatedAPIs;\n    exports.act = function (callback) {\n      var prevActQueue = ReactSharedInternals.actQueue,\n        prevActScopeDepth = actScopeDepth;\n      actScopeDepth++;\n      var queue = (ReactSharedInternals.actQueue =\n          null !== prevActQueue ? prevActQueue : []),\n        didAwaitActCall = !1;\n      try {\n        var result = callback();\n      } catch (error) {\n        ReactSharedInternals.thrownErrors.push(error);\n      }\n      if (0 < ReactSharedInternals.thrownErrors.length)\n        throw (\n          (popActScope(prevActQueue, prevActScopeDepth),\n          (callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n          (ReactSharedInternals.thrownErrors.length = 0),\n          callback)\n        );\n      if (\n        null !== result &&\n        \"object\" === typeof result &&\n        \"function\" === typeof result.then\n      ) {\n        var thenable = result;\n        queueSeveralMicrotasks(function () {\n          didAwaitActCall ||\n            didWarnNoAwaitAct ||\n            ((didWarnNoAwaitAct = !0),\n            console.error(\n              \"You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);\"\n            ));\n        });\n        return {\n          then: function (resolve, reject) {\n            didAwaitActCall = !0;\n            thenable.then(\n              function (returnValue) {\n                popActScope(prevActQueue, prevActScopeDepth);\n                if (0 === prevActScopeDepth) {\n                  try {\n                    flushActQueue(queue),\n                      enqueueTask(function () {\n                        return recursivelyFlushAsyncActWork(\n                          returnValue,\n                          resolve,\n                          reject\n                        );\n                      });\n                  } catch (error$0) {\n                    ReactSharedInternals.thrownErrors.push(error$0);\n                  }\n                  if (0 < ReactSharedInternals.thrownErrors.length) {\n                    var _thrownError = aggregateErrors(\n                      ReactSharedInternals.thrownErrors\n                    );\n                    ReactSharedInternals.thrownErrors.length = 0;\n                    reject(_thrownError);\n                  }\n                } else resolve(returnValue);\n              },\n              function (error) {\n                popActScope(prevActQueue, prevActScopeDepth);\n                0 < ReactSharedInternals.thrownErrors.length\n                  ? ((error = aggregateErrors(\n                      ReactSharedInternals.thrownErrors\n                    )),\n                    (ReactSharedInternals.thrownErrors.length = 0),\n                    reject(error))\n                  : reject(error);\n              }\n            );\n          }\n        };\n      }\n      var returnValue$jscomp$0 = result;\n      popActScope(prevActQueue, prevActScopeDepth);\n      0 === prevActScopeDepth &&\n        (flushActQueue(queue),\n        0 !== queue.length &&\n          queueSeveralMicrotasks(function () {\n            didAwaitActCall ||\n              didWarnNoAwaitAct ||\n              ((didWarnNoAwaitAct = !0),\n              console.error(\n                \"A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\\n\\nawait act(() => ...)\"\n              ));\n          }),\n        (ReactSharedInternals.actQueue = null));\n      if (0 < ReactSharedInternals.thrownErrors.length)\n        throw (\n          ((callback = aggregateErrors(ReactSharedInternals.thrownErrors)),\n          (ReactSharedInternals.thrownErrors.length = 0),\n          callback)\n        );\n      return {\n        then: function (resolve, reject) {\n          didAwaitActCall = !0;\n          0 === prevActScopeDepth\n            ? ((ReactSharedInternals.actQueue = queue),\n              enqueueTask(function () {\n                return recursivelyFlushAsyncActWork(\n                  returnValue$jscomp$0,\n                  resolve,\n                  reject\n                );\n              }))\n            : resolve(returnValue$jscomp$0);\n        }\n      };\n    };\n    exports.cache = function (fn) {\n      return function () {\n        return fn.apply(null, arguments);\n      };\n    };\n    exports.cacheSignal = function () {\n      return null;\n    };\n    exports.captureOwnerStack = function () {\n      var getCurrentStack = ReactSharedInternals.getCurrentStack;\n      return null === getCurrentStack ? null : getCurrentStack();\n    };\n    exports.cloneElement = function (element, config, children) {\n      if (null === element || void 0 === element)\n        throw Error(\n          \"The argument must be a React element, but you passed \" +\n            element +\n            \".\"\n        );\n      var props = assign({}, element.props),\n        key = element.key,\n        owner = element._owner;\n      if (null != config) {\n        var JSCompiler_inline_result;\n        a: {\n          if (\n            hasOwnProperty.call(config, \"ref\") &&\n            (JSCompiler_inline_result = Object.getOwnPropertyDescriptor(\n              config,\n              \"ref\"\n            ).get) &&\n            JSCompiler_inline_result.isReactWarning\n          ) {\n            JSCompiler_inline_result = !1;\n            break a;\n          }\n          JSCompiler_inline_result = void 0 !== config.ref;\n        }\n        JSCompiler_inline_result && (owner = getOwner());\n        hasValidKey(config) &&\n          (checkKeyStringCoercion(config.key), (key = \"\" + config.key));\n        for (propName in config)\n          !hasOwnProperty.call(config, propName) ||\n            \"key\" === propName ||\n            \"__self\" === propName ||\n            \"__source\" === propName ||\n            (\"ref\" === propName && void 0 === config.ref) ||\n            (props[propName] = config[propName]);\n      }\n      var propName = arguments.length - 2;\n      if (1 === propName) props.children = children;\n      else if (1 < propName) {\n        JSCompiler_inline_result = Array(propName);\n        for (var i = 0; i < propName; i++)\n          JSCompiler_inline_result[i] = arguments[i + 2];\n        props.children = JSCompiler_inline_result;\n      }\n      props = ReactElement(\n        element.type,\n        key,\n        void 0,\n        void 0,\n        owner,\n        props,\n        element._debugStack,\n        element._debugTask\n      );\n      for (key = 2; key < arguments.length; key++)\n        (owner = arguments[key]),\n          isValidElement(owner) && owner._store && (owner._store.validated = 1);\n      return props;\n    };\n    exports.createContext = function (defaultValue) {\n      defaultValue = {\n        $$typeof: REACT_CONTEXT_TYPE,\n        _currentValue: defaultValue,\n        _currentValue2: defaultValue,\n        _threadCount: 0,\n        Provider: null,\n        Consumer: null\n      };\n      defaultValue.Provider = defaultValue;\n      defaultValue.Consumer = {\n        $$typeof: REACT_CONSUMER_TYPE,\n        _context: defaultValue\n      };\n      defaultValue._currentRenderer = null;\n      defaultValue._currentRenderer2 = null;\n      return defaultValue;\n    };\n    exports.createElement = function (type, config, children) {\n      for (var i = 2; i < arguments.length; i++) {\n        var node = arguments[i];\n        isValidElement(node) && node._store && (node._store.validated = 1);\n      }\n      i = {};\n      node = null;\n      if (null != config)\n        for (propName in (didWarnAboutOldJSXRuntime ||\n          !(\"__self\" in config) ||\n          \"key\" in config ||\n          ((didWarnAboutOldJSXRuntime = !0),\n          console.warn(\n            \"Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform\"\n          )),\n        hasValidKey(config) &&\n          (checkKeyStringCoercion(config.key), (node = \"\" + config.key)),\n        config))\n          hasOwnProperty.call(config, propName) &&\n            \"key\" !== propName &&\n            \"__self\" !== propName &&\n            \"__source\" !== propName &&\n            (i[propName] = config[propName]);\n      var childrenLength = arguments.length - 2;\n      if (1 === childrenLength) i.children = children;\n      else if (1 < childrenLength) {\n        for (\n          var childArray = Array(childrenLength), _i = 0;\n          _i < childrenLength;\n          _i++\n        )\n          childArray[_i] = arguments[_i + 2];\n        Object.freeze && Object.freeze(childArray);\n        i.children = childArray;\n      }\n      if (type && type.defaultProps)\n        for (propName in ((childrenLength = type.defaultProps), childrenLength))\n          void 0 === i[propName] && (i[propName] = childrenLength[propName]);\n      node &&\n        defineKeyPropWarningGetter(\n          i,\n          \"function\" === typeof type\n            ? type.displayName || type.name || \"Unknown\"\n            : type\n        );\n      var propName = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n      return ReactElement(\n        type,\n        node,\n        void 0,\n        void 0,\n        getOwner(),\n        i,\n        propName ? Error(\"react-stack-top-frame\") : unknownOwnerDebugStack,\n        propName ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n      );\n    };\n    exports.createRef = function () {\n      var refObject = { current: null };\n      Object.seal(refObject);\n      return refObject;\n    };\n    exports.forwardRef = function (render) {\n      null != render && render.$$typeof === REACT_MEMO_TYPE\n        ? console.error(\n            \"forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...)).\"\n          )\n        : \"function\" !== typeof render\n          ? console.error(\n              \"forwardRef requires a render function but was given %s.\",\n              null === render ? \"null\" : typeof render\n            )\n          : 0 !== render.length &&\n            2 !== render.length &&\n            console.error(\n              \"forwardRef render functions accept exactly two parameters: props and ref. %s\",\n              1 === render.length\n                ? \"Did you forget to use the ref parameter?\"\n                : \"Any additional parameter will be undefined.\"\n            );\n      null != render &&\n        null != render.defaultProps &&\n        console.error(\n          \"forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?\"\n        );\n      var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render: render },\n        ownName;\n      Object.defineProperty(elementType, \"displayName\", {\n        enumerable: !1,\n        configurable: !0,\n        get: function () {\n          return ownName;\n        },\n        set: function (name) {\n          ownName = name;\n          render.name ||\n            render.displayName ||\n            (Object.defineProperty(render, \"name\", { value: name }),\n            (render.displayName = name));\n        }\n      });\n      return elementType;\n    };\n    exports.isValidElement = isValidElement;\n    exports.lazy = function (ctor) {\n      return {\n        $$typeof: REACT_LAZY_TYPE,\n        _payload: { _status: -1, _result: ctor },\n        _init: lazyInitializer\n      };\n    };\n    exports.memo = function (type, compare) {\n      null == type &&\n        console.error(\n          \"memo: The first argument must be a component. Instead received: %s\",\n          null === type ? \"null\" : typeof type\n        );\n      compare = {\n        $$typeof: REACT_MEMO_TYPE,\n        type: type,\n        compare: void 0 === compare ? null : compare\n      };\n      var ownName;\n      Object.defineProperty(compare, \"displayName\", {\n        enumerable: !1,\n        configurable: !0,\n        get: function () {\n          return ownName;\n        },\n        set: function (name) {\n          ownName = name;\n          type.name ||\n            type.displayName ||\n            (Object.defineProperty(type, \"name\", { value: name }),\n            (type.displayName = name));\n        }\n      });\n      return compare;\n    };\n    exports.startTransition = function (scope) {\n      var prevTransition = ReactSharedInternals.T,\n        currentTransition = {};\n      currentTransition._updatedFibers = new Set();\n      ReactSharedInternals.T = currentTransition;\n      try {\n        var returnValue = scope(),\n          onStartTransitionFinish = ReactSharedInternals.S;\n        null !== onStartTransitionFinish &&\n          onStartTransitionFinish(currentTransition, returnValue);\n        \"object\" === typeof returnValue &&\n          null !== returnValue &&\n          \"function\" === typeof returnValue.then &&\n          (ReactSharedInternals.asyncTransitions++,\n          returnValue.then(releaseAsyncTransition, releaseAsyncTransition),\n          returnValue.then(noop, reportGlobalError));\n      } catch (error) {\n        reportGlobalError(error);\n      } finally {\n        null === prevTransition &&\n          currentTransition._updatedFibers &&\n          ((scope = currentTransition._updatedFibers.size),\n          currentTransition._updatedFibers.clear(),\n          10 < scope &&\n            console.warn(\n              \"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"\n            )),\n          null !== prevTransition &&\n            null !== currentTransition.types &&\n            (null !== prevTransition.types &&\n              prevTransition.types !== currentTransition.types &&\n              console.error(\n                \"We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React.\"\n              ),\n            (prevTransition.types = currentTransition.types)),\n          (ReactSharedInternals.T = prevTransition);\n      }\n    };\n    exports.unstable_useCacheRefresh = function () {\n      return resolveDispatcher().useCacheRefresh();\n    };\n    exports.use = function (usable) {\n      return resolveDispatcher().use(usable);\n    };\n    exports.useActionState = function (action, initialState, permalink) {\n      return resolveDispatcher().useActionState(\n        action,\n        initialState,\n        permalink\n      );\n    };\n    exports.useCallback = function (callback, deps) {\n      return resolveDispatcher().useCallback(callback, deps);\n    };\n    exports.useContext = function (Context) {\n      var dispatcher = resolveDispatcher();\n      Context.$$typeof === REACT_CONSUMER_TYPE &&\n        console.error(\n          \"Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?\"\n        );\n      return dispatcher.useContext(Context);\n    };\n    exports.useDebugValue = function (value, formatterFn) {\n      return resolveDispatcher().useDebugValue(value, formatterFn);\n    };\n    exports.useDeferredValue = function (value, initialValue) {\n      return resolveDispatcher().useDeferredValue(value, initialValue);\n    };\n    exports.useEffect = function (create, deps) {\n      null == create &&\n        console.warn(\n          \"React Hook useEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n        );\n      return resolveDispatcher().useEffect(create, deps);\n    };\n    exports.useId = function () {\n      return resolveDispatcher().useId();\n    };\n    exports.useImperativeHandle = function (ref, create, deps) {\n      return resolveDispatcher().useImperativeHandle(ref, create, deps);\n    };\n    exports.useInsertionEffect = function (create, deps) {\n      null == create &&\n        console.warn(\n          \"React Hook useInsertionEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n        );\n      return resolveDispatcher().useInsertionEffect(create, deps);\n    };\n    exports.useLayoutEffect = function (create, deps) {\n      null == create &&\n        console.warn(\n          \"React Hook useLayoutEffect requires an effect callback. Did you forget to pass a callback to the hook?\"\n        );\n      return resolveDispatcher().useLayoutEffect(create, deps);\n    };\n    exports.useMemo = function (create, deps) {\n      return resolveDispatcher().useMemo(create, deps);\n    };\n    exports.useOptimistic = function (passthrough, reducer) {\n      return resolveDispatcher().useOptimistic(passthrough, reducer);\n    };\n    exports.useReducer = function (reducer, initialArg, init) {\n      return resolveDispatcher().useReducer(reducer, initialArg, init);\n    };\n    exports.useRef = function (initialValue) {\n      return resolveDispatcher().useRef(initialValue);\n    };\n    exports.useState = function (initialState) {\n      return resolveDispatcher().useState(initialState);\n    };\n    exports.useSyncExternalStore = function (\n      subscribe,\n      getSnapshot,\n      getServerSnapshot\n    ) {\n      return resolveDispatcher().useSyncExternalStore(\n        subscribe,\n        getSnapshot,\n        getServerSnapshot\n      );\n    };\n    exports.useTransition = function () {\n      return resolveDispatcher().useTransition();\n    };\n    exports.version = \"19.2.0-canary-97cdd5d3-20250710\";\n    \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n      \"function\" ===\n        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n  })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYixLQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb01BQW9NO0FBQ3BNO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLCtDQUErQyw2QkFBNkI7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixxQkFBcUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLHlDQUF5QztBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGNBQWM7QUFDZDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQjtBQUNoQixvQ0FBb0MsT0FBTztBQUMzQyxzQ0FBc0MsT0FBTztBQUM3QztBQUNBLGdCQUFnQixPQUFPO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJLGdCQUFnQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxpQkFBaUI7QUFDckIsSUFBSSxnQkFBZ0I7QUFDcEIsSUFBSSxnQkFBZ0I7QUFDcEIsSUFBSSxxQkFBcUI7QUFDekIsSUFBSSxrQkFBa0I7QUFDdEIsSUFBSSxnQkFBZ0I7QUFDcEIsSUFBSSx1RUFBdUU7QUFDM0U7QUFDQSxJQUFJLDBCQUEwQjtBQUM5QixJQUFJLFdBQVc7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnTkFBZ047QUFDaE47QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEIsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxhQUFhO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxtQkFBbUI7QUFDdkI7QUFDQTtBQUNBLElBQUkseUJBQXlCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLElBQUksb0JBQW9CO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsY0FBYztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix3QkFBd0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHFCQUFxQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxxQkFBcUI7QUFDekIsc0JBQXNCLHNCQUFzQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksaUJBQWlCO0FBQ3JCLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxJQUFJLGtCQUFrQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixrREFBa0Q7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELGFBQWE7QUFDbEU7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsSUFBSSxzQkFBc0I7QUFDMUIsSUFBSSxZQUFZO0FBQ2hCO0FBQ0E7QUFDQSxvQkFBb0IsNEJBQTRCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBLElBQUksWUFBWTtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxhQUFhO0FBQ2hFO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLElBQUksdUJBQXVCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksZ0NBQWdDO0FBQ3BDO0FBQ0E7QUFDQSxJQUFJLFdBQVc7QUFDZjtBQUNBO0FBQ0EsSUFBSSxzQkFBc0I7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxtQkFBbUI7QUFDdkI7QUFDQTtBQUNBLElBQUksa0JBQWtCO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxxQkFBcUI7QUFDekI7QUFDQTtBQUNBLElBQUksd0JBQXdCO0FBQzVCO0FBQ0E7QUFDQSxJQUFJLGlCQUFpQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGFBQWE7QUFDakI7QUFDQTtBQUNBLElBQUksMkJBQTJCO0FBQy9CO0FBQ0E7QUFDQSxJQUFJLDBCQUEwQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHVCQUF1QjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGVBQWU7QUFDbkI7QUFDQTtBQUNBLElBQUkscUJBQXFCO0FBQ3pCO0FBQ0E7QUFDQSxJQUFJLGtCQUFrQjtBQUN0QjtBQUNBO0FBQ0EsSUFBSSxjQUFjO0FBQ2xCO0FBQ0E7QUFDQSxJQUFJLGdCQUFnQjtBQUNwQjtBQUNBO0FBQ0EsSUFBSSw0QkFBNEI7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHFCQUFxQjtBQUN6QjtBQUNBO0FBQ0EsSUFBSSxlQUFlO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WICYmXG4gIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nKG1ldGhvZE5hbWUsIGluZm8pIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCBtZXRob2ROYW1lLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiJXMoLi4uKSBpcyBkZXByZWNhdGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3QgY2xhc3Nlcy4gJXNcIixcbiAgICAgICAgICAgIGluZm9bMF0sXG4gICAgICAgICAgICBpbmZvWzFdXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgICAgaWYgKG51bGwgPT09IG1heWJlSXRlcmFibGUgfHwgXCJvYmplY3RcIiAhPT0gdHlwZW9mIG1heWJlSXRlcmFibGUpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgbWF5YmVJdGVyYWJsZSA9XG4gICAgICAgIChNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdKSB8fFxuICAgICAgICBtYXliZUl0ZXJhYmxlW1wiQEBpdGVyYXRvclwiXTtcbiAgICAgIHJldHVybiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBtYXliZUl0ZXJhYmxlID8gbWF5YmVJdGVyYWJsZSA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCBjYWxsZXJOYW1lKSB7XG4gICAgICBwdWJsaWNJbnN0YW5jZSA9XG4gICAgICAgICgocHVibGljSW5zdGFuY2UgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1Y3RvcikgJiZcbiAgICAgICAgICAocHVibGljSW5zdGFuY2UuZGlzcGxheU5hbWUgfHwgcHVibGljSW5zdGFuY2UubmFtZSkpIHx8XG4gICAgICAgIFwiUmVhY3RDbGFzc1wiO1xuICAgICAgdmFyIHdhcm5pbmdLZXkgPSBwdWJsaWNJbnN0YW5jZSArIFwiLlwiICsgY2FsbGVyTmFtZTtcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSB8fFxuICAgICAgICAoY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIkNhbid0IGNhbGwgJXMgb24gYSBjb21wb25lbnQgdGhhdCBpcyBub3QgeWV0IG1vdW50ZWQuIFRoaXMgaXMgYSBuby1vcCwgYnV0IGl0IG1pZ2h0IGluZGljYXRlIGEgYnVnIGluIHlvdXIgYXBwbGljYXRpb24uIEluc3RlYWQsIGFzc2lnbiB0byBgdGhpcy5zdGF0ZWAgZGlyZWN0bHkgb3IgZGVmaW5lIGEgYHN0YXRlID0ge307YCBjbGFzcyBwcm9wZXJ0eSB3aXRoIHRoZSBkZXNpcmVkIHN0YXRlIGluIHRoZSAlcyBjb21wb25lbnQuXCIsXG4gICAgICAgICAgY2FsbGVyTmFtZSxcbiAgICAgICAgICBwdWJsaWNJbnN0YW5jZVxuICAgICAgICApLFxuICAgICAgICAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldID0gITApKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gICAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gICAgICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBDb21wb25lbnREdW1teSgpIHt9XG4gICAgZnVuY3Rpb24gUHVyZUNvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICAgICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0O1xuICAgICAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9vcCgpIHt9XG4gICAgZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gXCJcIiArIHZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja0tleVN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITE7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICEwO1xuICAgICAgfVxuICAgICAgaWYgKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCkge1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSBjb25zb2xlO1xuICAgICAgICB2YXIgSlNDb21waWxlcl90ZW1wX2NvbnN0ID0gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0LmVycm9yO1xuICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQwID1cbiAgICAgICAgICAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgU3ltYm9sICYmXG4gICAgICAgICAgICBTeW1ib2wudG9TdHJpbmdUYWcgJiZcbiAgICAgICAgICAgIHZhbHVlW1N5bWJvbC50b1N0cmluZ1RhZ10pIHx8XG4gICAgICAgICAgdmFsdWUuY29uc3RydWN0b3IubmFtZSB8fFxuICAgICAgICAgIFwiT2JqZWN0XCI7XG4gICAgICAgIEpTQ29tcGlsZXJfdGVtcF9jb25zdC5jYWxsKFxuICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCxcbiAgICAgICAgICBcIlRoZSBwcm92aWRlZCBrZXkgaXMgYW4gdW5zdXBwb3J0ZWQgdHlwZSAlcy4gVGhpcyB2YWx1ZSBtdXN0IGJlIGNvZXJjZWQgdG8gYSBzdHJpbmcgYmVmb3JlIHVzaW5nIGl0IGhlcmUuXCIsXG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0JGpzY29tcCQwXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSkge1xuICAgICAgaWYgKG51bGwgPT0gdHlwZSkgcmV0dXJuIG51bGw7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgcmV0dXJuIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0VcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIHJldHVybiB0eXBlO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJGcmFnbWVudFwiO1xuICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN0cmljdE1vZGVcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICAgICAgICBjYXNlIFJFQUNUX0FDVElWSVRZX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiQWN0aXZpdHlcIjtcbiAgICAgIH1cbiAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHR5cGUudGFnICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSgpLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgdHlwZS4kJHR5cGVvZilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBcIlBvcnRhbFwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCI7XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuICh0eXBlLl9jb250ZXh0LmRpc3BsYXlOYW1lIHx8IFwiQ29udGV4dFwiKSArIFwiLkNvbnN1bWVyXCI7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgdmFyIGlubmVyVHlwZSA9IHR5cGUucmVuZGVyO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgICB0eXBlIHx8XG4gICAgICAgICAgICAgICgodHlwZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCBcIlwiKSxcbiAgICAgICAgICAgICAgKHR5cGUgPSBcIlwiICE9PSB0eXBlID8gXCJGb3J3YXJkUmVmKFwiICsgdHlwZSArIFwiKVwiIDogXCJGb3J3YXJkUmVmXCIpKTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgKGlubmVyVHlwZSA9IHR5cGUuZGlzcGxheU5hbWUgfHwgbnVsbCksXG4gICAgICAgICAgICAgIG51bGwgIT09IGlubmVyVHlwZVxuICAgICAgICAgICAgICAgID8gaW5uZXJUeXBlXG4gICAgICAgICAgICAgICAgOiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCBcIk1lbW9cIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgIGlubmVyVHlwZSA9IHR5cGUuX3BheWxvYWQ7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5faW5pdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZShpbm5lclR5cGUpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRUYXNrTmFtZSh0eXBlKSB7XG4gICAgICBpZiAodHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkgcmV0dXJuIFwiPD5cIjtcbiAgICAgIGlmIChcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgbnVsbCAhPT0gdHlwZSAmJlxuICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEVcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIFwiPC4uLj5cIjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuICAgICAgICByZXR1cm4gbmFtZSA/IFwiPFwiICsgbmFtZSArIFwiPlwiIDogXCI8Li4uPlwiO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICByZXR1cm4gXCI8Li4uPlwiO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRPd25lcigpIHtcbiAgICAgIHZhciBkaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuQTtcbiAgICAgIHJldHVybiBudWxsID09PSBkaXNwYXRjaGVyID8gbnVsbCA6IGRpc3BhdGNoZXIuZ2V0T3duZXIoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gVW5rbm93bk93bmVyKCkge1xuICAgICAgcmV0dXJuIEVycm9yKFwicmVhY3Qtc3RhY2stdG9wLWZyYW1lXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgXCJrZXlcIikpIHtcbiAgICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCBcImtleVwiKS5nZXQ7XG4gICAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSByZXR1cm4gITE7XG4gICAgICB9XG4gICAgICByZXR1cm4gdm9pZCAwICE9PSBjb25maWcua2V5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAgICAgIGZ1bmN0aW9uIHdhcm5BYm91dEFjY2Vzc2luZ0tleSgpIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gfHxcbiAgICAgICAgICAoKHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gITApLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0IGluIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgdmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCBwcm9wLiAoaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9zcGVjaWFsLXByb3BzKVwiLFxuICAgICAgICAgICAgZGlzcGxheU5hbWVcbiAgICAgICAgICApKTtcbiAgICAgIH1cbiAgICAgIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9ICEwO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCBcImtleVwiLCB7XG4gICAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZWxlbWVudFJlZkdldHRlcldpdGhEZXByZWNhdGlvbldhcm5pbmcoKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0aGlzLnR5cGUpO1xuICAgICAgZGlkV2FybkFib3V0RWxlbWVudFJlZltjb21wb25lbnROYW1lXSB8fFxuICAgICAgICAoKGRpZFdhcm5BYm91dEVsZW1lbnRSZWZbY29tcG9uZW50TmFtZV0gPSAhMCksXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJBY2Nlc3NpbmcgZWxlbWVudC5yZWYgd2FzIHJlbW92ZWQgaW4gUmVhY3QgMTkuIHJlZiBpcyBub3cgYSByZWd1bGFyIHByb3AuIEl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBKU1ggRWxlbWVudCB0eXBlIGluIGEgZnV0dXJlIHJlbGVhc2UuXCJcbiAgICAgICAgKSk7XG4gICAgICBjb21wb25lbnROYW1lID0gdGhpcy5wcm9wcy5yZWY7XG4gICAgICByZXR1cm4gdm9pZCAwICE9PSBjb21wb25lbnROYW1lID8gY29tcG9uZW50TmFtZSA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFJlYWN0RWxlbWVudChcbiAgICAgIHR5cGUsXG4gICAgICBrZXksXG4gICAgICBzZWxmLFxuICAgICAgc291cmNlLFxuICAgICAgb3duZXIsXG4gICAgICBwcm9wcyxcbiAgICAgIGRlYnVnU3RhY2ssXG4gICAgICBkZWJ1Z1Rhc2tcbiAgICApIHtcbiAgICAgIHNlbGYgPSBwcm9wcy5yZWY7XG4gICAgICB0eXBlID0ge1xuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgICBfb3duZXI6IG93bmVyXG4gICAgICB9O1xuICAgICAgbnVsbCAhPT0gKHZvaWQgMCAhPT0gc2VsZiA/IHNlbGYgOiBudWxsKVxuICAgICAgICA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcInJlZlwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgICAgIGdldDogZWxlbWVudFJlZkdldHRlcldpdGhEZXByZWNhdGlvbldhcm5pbmdcbiAgICAgICAgICB9KVxuICAgICAgICA6IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcInJlZlwiLCB7IGVudW1lcmFibGU6ICExLCB2YWx1ZTogbnVsbCB9KTtcbiAgICAgIHR5cGUuX3N0b3JlID0ge307XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZS5fc3RvcmUsIFwidmFsaWRhdGVkXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IDBcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwiX2RlYnVnSW5mb1wiLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITEsXG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgIHZhbHVlOiBudWxsXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcIl9kZWJ1Z1N0YWNrXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IGRlYnVnU3RhY2tcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwiX2RlYnVnVGFza1wiLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITEsXG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgIHZhbHVlOiBkZWJ1Z1Rhc2tcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmZyZWV6ZSAmJiAoT2JqZWN0LmZyZWV6ZSh0eXBlLnByb3BzKSwgT2JqZWN0LmZyZWV6ZSh0eXBlKSk7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvbmVBbmRSZXBsYWNlS2V5KG9sZEVsZW1lbnQsIG5ld0tleSkge1xuICAgICAgbmV3S2V5ID0gUmVhY3RFbGVtZW50KFxuICAgICAgICBvbGRFbGVtZW50LnR5cGUsXG4gICAgICAgIG5ld0tleSxcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIG9sZEVsZW1lbnQuX293bmVyLFxuICAgICAgICBvbGRFbGVtZW50LnByb3BzLFxuICAgICAgICBvbGRFbGVtZW50Ll9kZWJ1Z1N0YWNrLFxuICAgICAgICBvbGRFbGVtZW50Ll9kZWJ1Z1Rhc2tcbiAgICAgICk7XG4gICAgICBvbGRFbGVtZW50Ll9zdG9yZSAmJlxuICAgICAgICAobmV3S2V5Ll9zdG9yZS52YWxpZGF0ZWQgPSBvbGRFbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQpO1xuICAgICAgcmV0dXJuIG5ld0tleTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygb2JqZWN0ICYmXG4gICAgICAgIG51bGwgIT09IG9iamVjdCAmJlxuICAgICAgICBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZXNjYXBlKGtleSkge1xuICAgICAgdmFyIGVzY2FwZXJMb29rdXAgPSB7IFwiPVwiOiBcIj0wXCIsIFwiOlwiOiBcIj0yXCIgfTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFwiJFwiICtcbiAgICAgICAga2V5LnJlcGxhY2UoL1s9Ol0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgcmV0dXJuIGVzY2FwZXJMb29rdXBbbWF0Y2hdO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RWxlbWVudEtleShlbGVtZW50LCBpbmRleCkge1xuICAgICAgcmV0dXJuIFwib2JqZWN0XCIgPT09IHR5cGVvZiBlbGVtZW50ICYmXG4gICAgICAgIG51bGwgIT09IGVsZW1lbnQgJiZcbiAgICAgICAgbnVsbCAhPSBlbGVtZW50LmtleVxuICAgICAgICA/IChjaGVja0tleVN0cmluZ0NvZXJjaW9uKGVsZW1lbnQua2V5KSwgZXNjYXBlKFwiXCIgKyBlbGVtZW50LmtleSkpXG4gICAgICAgIDogaW5kZXgudG9TdHJpbmcoMzYpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNvbHZlVGhlbmFibGUodGhlbmFibGUpIHtcbiAgICAgIHN3aXRjaCAodGhlbmFibGUuc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgXCJmdWxmaWxsZWRcIjpcbiAgICAgICAgICByZXR1cm4gdGhlbmFibGUudmFsdWU7XG4gICAgICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgICAgICAgIHRocm93IHRoZW5hYmxlLnJlYXNvbjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgICAgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0aGVuYWJsZS5zdGF0dXNcbiAgICAgICAgICAgICAgPyB0aGVuYWJsZS50aGVuKG5vb3AsIG5vb3ApXG4gICAgICAgICAgICAgIDogKCh0aGVuYWJsZS5zdGF0dXMgPSBcInBlbmRpbmdcIiksXG4gICAgICAgICAgICAgICAgdGhlbmFibGUudGhlbihcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChmdWxmaWxsZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBcInBlbmRpbmdcIiA9PT0gdGhlbmFibGUuc3RhdHVzICYmXG4gICAgICAgICAgICAgICAgICAgICAgKCh0aGVuYWJsZS5zdGF0dXMgPSBcImZ1bGZpbGxlZFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAodGhlbmFibGUudmFsdWUgPSBmdWxmaWxsZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBcInBlbmRpbmdcIiA9PT0gdGhlbmFibGUuc3RhdHVzICYmXG4gICAgICAgICAgICAgICAgICAgICAgKCh0aGVuYWJsZS5zdGF0dXMgPSBcInJlamVjdGVkXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICh0aGVuYWJsZS5yZWFzb24gPSBlcnJvcikpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgdGhlbmFibGUuc3RhdHVzKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY2FzZSBcImZ1bGZpbGxlZFwiOlxuICAgICAgICAgICAgICByZXR1cm4gdGhlbmFibGUudmFsdWU7XG4gICAgICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICAgICAgICAgICAgdGhyb3cgdGhlbmFibGUucmVhc29uO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IHRoZW5hYmxlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuYW1lU29GYXIsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgdHlwZSA9IHR5cGVvZiBjaGlsZHJlbjtcbiAgICAgIGlmIChcInVuZGVmaW5lZFwiID09PSB0eXBlIHx8IFwiYm9vbGVhblwiID09PSB0eXBlKSBjaGlsZHJlbiA9IG51bGw7XG4gICAgICB2YXIgaW52b2tlQ2FsbGJhY2sgPSAhMTtcbiAgICAgIGlmIChudWxsID09PSBjaGlsZHJlbikgaW52b2tlQ2FsbGJhY2sgPSAhMDtcbiAgICAgIGVsc2VcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayA9ICEwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgc3dpdGNoIChjaGlsZHJlbi4kJHR5cGVvZikge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICAgICAgICBpbnZva2VDYWxsYmFjayA9ICEwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgKGludm9rZUNhbGxiYWNrID0gY2hpbGRyZW4uX2luaXQpLFxuICAgICAgICAgICAgICAgICAgbWFwSW50b0FycmF5KFxuICAgICAgICAgICAgICAgICAgICBpbnZva2VDYWxsYmFjayhjaGlsZHJlbi5fcGF5bG9hZCksXG4gICAgICAgICAgICAgICAgICAgIGFycmF5LFxuICAgICAgICAgICAgICAgICAgICBlc2NhcGVkUHJlZml4LFxuICAgICAgICAgICAgICAgICAgICBuYW1lU29GYXIsXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgaWYgKGludm9rZUNhbGxiYWNrKSB7XG4gICAgICAgIGludm9rZUNhbGxiYWNrID0gY2hpbGRyZW47XG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2soaW52b2tlQ2FsbGJhY2spO1xuICAgICAgICB2YXIgY2hpbGRLZXkgPVxuICAgICAgICAgIFwiXCIgPT09IG5hbWVTb0ZhciA/IFwiLlwiICsgZ2V0RWxlbWVudEtleShpbnZva2VDYWxsYmFjaywgMCkgOiBuYW1lU29GYXI7XG4gICAgICAgIGlzQXJyYXlJbXBsKGNhbGxiYWNrKVxuICAgICAgICAgID8gKChlc2NhcGVkUHJlZml4ID0gXCJcIiksXG4gICAgICAgICAgICBudWxsICE9IGNoaWxkS2V5ICYmXG4gICAgICAgICAgICAgIChlc2NhcGVkUHJlZml4ID1cbiAgICAgICAgICAgICAgICBjaGlsZEtleS5yZXBsYWNlKHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4LCBcIiQmL1wiKSArIFwiL1wiKSxcbiAgICAgICAgICAgIG1hcEludG9BcnJheShjYWxsYmFjaywgYXJyYXksIGVzY2FwZWRQcmVmaXgsIFwiXCIsIGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgOiBudWxsICE9IGNhbGxiYWNrICYmXG4gICAgICAgICAgICAoaXNWYWxpZEVsZW1lbnQoY2FsbGJhY2spICYmXG4gICAgICAgICAgICAgIChudWxsICE9IGNhbGxiYWNrLmtleSAmJlxuICAgICAgICAgICAgICAgICgoaW52b2tlQ2FsbGJhY2sgJiYgaW52b2tlQ2FsbGJhY2sua2V5ID09PSBjYWxsYmFjay5rZXkpIHx8XG4gICAgICAgICAgICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKGNhbGxiYWNrLmtleSkpLFxuICAgICAgICAgICAgICAoZXNjYXBlZFByZWZpeCA9IGNsb25lQW5kUmVwbGFjZUtleShcbiAgICAgICAgICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgICAgICAgICBlc2NhcGVkUHJlZml4ICtcbiAgICAgICAgICAgICAgICAgIChudWxsID09IGNhbGxiYWNrLmtleSB8fFxuICAgICAgICAgICAgICAgICAgKGludm9rZUNhbGxiYWNrICYmIGludm9rZUNhbGxiYWNrLmtleSA9PT0gY2FsbGJhY2sua2V5KVxuICAgICAgICAgICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgOiAoXCJcIiArIGNhbGxiYWNrLmtleSkucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4LFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIkJi9cIlxuICAgICAgICAgICAgICAgICAgICAgICkgKyBcIi9cIikgK1xuICAgICAgICAgICAgICAgICAgY2hpbGRLZXlcbiAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgIFwiXCIgIT09IG5hbWVTb0ZhciAmJlxuICAgICAgICAgICAgICAgIG51bGwgIT0gaW52b2tlQ2FsbGJhY2sgJiZcbiAgICAgICAgICAgICAgICBpc1ZhbGlkRWxlbWVudChpbnZva2VDYWxsYmFjaykgJiZcbiAgICAgICAgICAgICAgICBudWxsID09IGludm9rZUNhbGxiYWNrLmtleSAmJlxuICAgICAgICAgICAgICAgIGludm9rZUNhbGxiYWNrLl9zdG9yZSAmJlxuICAgICAgICAgICAgICAgICFpbnZva2VDYWxsYmFjay5fc3RvcmUudmFsaWRhdGVkICYmXG4gICAgICAgICAgICAgICAgKGVzY2FwZWRQcmVmaXguX3N0b3JlLnZhbGlkYXRlZCA9IDIpLFxuICAgICAgICAgICAgICAoY2FsbGJhY2sgPSBlc2NhcGVkUHJlZml4KSksXG4gICAgICAgICAgICBhcnJheS5wdXNoKGNhbGxiYWNrKSk7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgICAgaW52b2tlQ2FsbGJhY2sgPSAwO1xuICAgICAgY2hpbGRLZXkgPSBcIlwiID09PSBuYW1lU29GYXIgPyBcIi5cIiA6IG5hbWVTb0ZhciArIFwiOlwiO1xuICAgICAgaWYgKGlzQXJyYXlJbXBsKGNoaWxkcmVuKSlcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKylcbiAgICAgICAgICAobmFtZVNvRmFyID0gY2hpbGRyZW5baV0pLFxuICAgICAgICAgICAgKHR5cGUgPSBjaGlsZEtleSArIGdldEVsZW1lbnRLZXkobmFtZVNvRmFyLCBpKSksXG4gICAgICAgICAgICAoaW52b2tlQ2FsbGJhY2sgKz0gbWFwSW50b0FycmF5KFxuICAgICAgICAgICAgICBuYW1lU29GYXIsXG4gICAgICAgICAgICAgIGFycmF5LFxuICAgICAgICAgICAgICBlc2NhcGVkUHJlZml4LFxuICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgKSk7XG4gICAgICBlbHNlIGlmICgoKGkgPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKSksIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGkpKVxuICAgICAgICBmb3IgKFxuICAgICAgICAgIGkgPT09IGNoaWxkcmVuLmVudHJpZXMgJiZcbiAgICAgICAgICAgIChkaWRXYXJuQWJvdXRNYXBzIHx8XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICBcIlVzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHN1cHBvcnRlZC4gVXNlIGFuIGFycmF5IG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC5cIlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKGRpZFdhcm5BYm91dE1hcHMgPSAhMCkpLFxuICAgICAgICAgICAgY2hpbGRyZW4gPSBpLmNhbGwoY2hpbGRyZW4pLFxuICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgICAgIShuYW1lU29GYXIgPSBjaGlsZHJlbi5uZXh0KCkpLmRvbmU7XG5cbiAgICAgICAgKVxuICAgICAgICAgIChuYW1lU29GYXIgPSBuYW1lU29GYXIudmFsdWUpLFxuICAgICAgICAgICAgKHR5cGUgPSBjaGlsZEtleSArIGdldEVsZW1lbnRLZXkobmFtZVNvRmFyLCBpKyspKSxcbiAgICAgICAgICAgIChpbnZva2VDYWxsYmFjayArPSBtYXBJbnRvQXJyYXkoXG4gICAgICAgICAgICAgIG5hbWVTb0ZhcixcbiAgICAgICAgICAgICAgYXJyYXksXG4gICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICApKTtcbiAgICAgIGVsc2UgaWYgKFwib2JqZWN0XCIgPT09IHR5cGUpIHtcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNoaWxkcmVuLnRoZW4pXG4gICAgICAgICAgcmV0dXJuIG1hcEludG9BcnJheShcbiAgICAgICAgICAgIHJlc29sdmVUaGVuYWJsZShjaGlsZHJlbiksXG4gICAgICAgICAgICBhcnJheSxcbiAgICAgICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICAgICAgICBuYW1lU29GYXIsXG4gICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICk7XG4gICAgICAgIGFycmF5ID0gU3RyaW5nKGNoaWxkcmVuKTtcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICtcbiAgICAgICAgICAgIChcIltvYmplY3QgT2JqZWN0XVwiID09PSBhcnJheVxuICAgICAgICAgICAgICA/IFwib2JqZWN0IHdpdGgga2V5cyB7XCIgKyBPYmplY3Qua2V5cyhjaGlsZHJlbikuam9pbihcIiwgXCIpICsgXCJ9XCJcbiAgICAgICAgICAgICAgOiBhcnJheSkgK1xuICAgICAgICAgICAgXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnZva2VDYWxsYmFjaztcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmMsIGNvbnRleHQpIHtcbiAgICAgIGlmIChudWxsID09IGNoaWxkcmVuKSByZXR1cm4gY2hpbGRyZW47XG4gICAgICB2YXIgcmVzdWx0ID0gW10sXG4gICAgICAgIGNvdW50ID0gMDtcbiAgICAgIG1hcEludG9BcnJheShjaGlsZHJlbiwgcmVzdWx0LCBcIlwiLCBcIlwiLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBjaGlsZCwgY291bnQrKyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxhenlJbml0aWFsaXplcihwYXlsb2FkKSB7XG4gICAgICBpZiAoLTEgPT09IHBheWxvYWQuX3N0YXR1cykge1xuICAgICAgICB2YXIgY3RvciA9IHBheWxvYWQuX3Jlc3VsdDtcbiAgICAgICAgY3RvciA9IGN0b3IoKTtcbiAgICAgICAgY3Rvci50aGVuKFxuICAgICAgICAgIGZ1bmN0aW9uIChtb2R1bGVPYmplY3QpIHtcbiAgICAgICAgICAgIGlmICgwID09PSBwYXlsb2FkLl9zdGF0dXMgfHwgLTEgPT09IHBheWxvYWQuX3N0YXR1cylcbiAgICAgICAgICAgICAgKHBheWxvYWQuX3N0YXR1cyA9IDEpLCAocGF5bG9hZC5fcmVzdWx0ID0gbW9kdWxlT2JqZWN0KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKDAgPT09IHBheWxvYWQuX3N0YXR1cyB8fCAtMSA9PT0gcGF5bG9hZC5fc3RhdHVzKVxuICAgICAgICAgICAgICAocGF5bG9hZC5fc3RhdHVzID0gMiksIChwYXlsb2FkLl9yZXN1bHQgPSBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICAtMSA9PT0gcGF5bG9hZC5fc3RhdHVzICYmXG4gICAgICAgICAgKChwYXlsb2FkLl9zdGF0dXMgPSAwKSwgKHBheWxvYWQuX3Jlc3VsdCA9IGN0b3IpKTtcbiAgICAgIH1cbiAgICAgIGlmICgxID09PSBwYXlsb2FkLl9zdGF0dXMpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgKGN0b3IgPSBwYXlsb2FkLl9yZXN1bHQpLFxuICAgICAgICAgIHZvaWQgMCA9PT0gY3RvciAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJsYXp5OiBFeHBlY3RlZCB0aGUgcmVzdWx0IG9mIGEgZHluYW1pYyBpbXBvcnQoKSBjYWxsLiBJbnN0ZWFkIHJlY2VpdmVkOiAlc1xcblxcbllvdXIgY29kZSBzaG91bGQgbG9vayBsaWtlOiBcXG4gIGNvbnN0IE15Q29tcG9uZW50ID0gbGF6eSgoKSA9PiBpbXBvcnQoJy4vTXlDb21wb25lbnQnKSlcXG5cXG5EaWQgeW91IGFjY2lkZW50YWxseSBwdXQgY3VybHkgYnJhY2VzIGFyb3VuZCB0aGUgaW1wb3J0P1wiLFxuICAgICAgICAgICAgICBjdG9yXG4gICAgICAgICAgICApLFxuICAgICAgICAgIFwiZGVmYXVsdFwiIGluIGN0b3IgfHxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwibGF6eTogRXhwZWN0ZWQgdGhlIHJlc3VsdCBvZiBhIGR5bmFtaWMgaW1wb3J0KCkgY2FsbC4gSW5zdGVhZCByZWNlaXZlZDogJXNcXG5cXG5Zb3VyIGNvZGUgc2hvdWxkIGxvb2sgbGlrZTogXFxuICBjb25zdCBNeUNvbXBvbmVudCA9IGxhenkoKCkgPT4gaW1wb3J0KCcuL015Q29tcG9uZW50JykpXCIsXG4gICAgICAgICAgICAgIGN0b3JcbiAgICAgICAgICAgICksXG4gICAgICAgICAgY3Rvci5kZWZhdWx0XG4gICAgICAgICk7XG4gICAgICB0aHJvdyBwYXlsb2FkLl9yZXN1bHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlc29sdmVEaXNwYXRjaGVyKCkge1xuICAgICAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgbnVsbCA9PT0gZGlzcGF0Y2hlciAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLlwiXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsZWFzZUFzeW5jVHJhbnNpdGlvbigpIHtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFzeW5jVHJhbnNpdGlvbnMtLTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW5xdWV1ZVRhc2sodGFzaykge1xuICAgICAgaWYgKG51bGwgPT09IGVucXVldWVUYXNrSW1wbClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgcmVxdWlyZVN0cmluZyA9IChcInJlcXVpcmVcIiArIE1hdGgucmFuZG9tKCkpLnNsaWNlKDAsIDcpO1xuICAgICAgICAgIGVucXVldWVUYXNrSW1wbCA9IChtb2R1bGUgJiYgbW9kdWxlW3JlcXVpcmVTdHJpbmddKS5jYWxsKFxuICAgICAgICAgICAgbW9kdWxlLFxuICAgICAgICAgICAgXCJ0aW1lcnNcIlxuICAgICAgICAgICkuc2V0SW1tZWRpYXRlO1xuICAgICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICAgICAgZW5xdWV1ZVRhc2tJbXBsID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAhMSA9PT0gZGlkV2FybkFib3V0TWVzc2FnZUNoYW5uZWwgJiZcbiAgICAgICAgICAgICAgKChkaWRXYXJuQWJvdXRNZXNzYWdlQ2hhbm5lbCA9ICEwKSxcbiAgICAgICAgICAgICAgXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIE1lc3NhZ2VDaGFubmVsICYmXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgIFwiVGhpcyBicm93c2VyIGRvZXMgbm90IGhhdmUgYSBNZXNzYWdlQ2hhbm5lbCBpbXBsZW1lbnRhdGlvbiwgc28gZW5xdWV1aW5nIHRhc2tzIHZpYSBhd2FpdCBhY3QoYXN5bmMgKCkgPT4gLi4uKSB3aWxsIGZhaWwuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMgaWYgeW91IGVuY291bnRlciB0aGlzIHdhcm5pbmcuXCJcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSh2b2lkIDApO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBlbnF1ZXVlVGFza0ltcGwodGFzayk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFnZ3JlZ2F0ZUVycm9ycyhlcnJvcnMpIHtcbiAgICAgIHJldHVybiAxIDwgZXJyb3JzLmxlbmd0aCAmJiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBBZ2dyZWdhdGVFcnJvclxuICAgICAgICA/IG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMpXG4gICAgICAgIDogZXJyb3JzWzBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3BBY3RTY29wZShwcmV2QWN0UXVldWUsIHByZXZBY3RTY29wZURlcHRoKSB7XG4gICAgICBwcmV2QWN0U2NvcGVEZXB0aCAhPT0gYWN0U2NvcGVEZXB0aCAtIDEgJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcIllvdSBzZWVtIHRvIGhhdmUgb3ZlcmxhcHBpbmcgYWN0KCkgY2FsbHMsIHRoaXMgaXMgbm90IHN1cHBvcnRlZC4gQmUgc3VyZSB0byBhd2FpdCBwcmV2aW91cyBhY3QoKSBjYWxscyBiZWZvcmUgbWFraW5nIGEgbmV3IG9uZS4gXCJcbiAgICAgICAgKTtcbiAgICAgIGFjdFNjb3BlRGVwdGggPSBwcmV2QWN0U2NvcGVEZXB0aDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVjdXJzaXZlbHlGbHVzaEFzeW5jQWN0V29yayhyZXR1cm5WYWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcXVldWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZTtcbiAgICAgIGlmIChudWxsICE9PSBxdWV1ZSlcbiAgICAgICAgaWYgKDAgIT09IHF1ZXVlLmxlbmd0aClcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmx1c2hBY3RRdWV1ZShxdWV1ZSk7XG4gICAgICAgICAgICBlbnF1ZXVlVGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZWN1cnNpdmVseUZsdXNoQXN5bmNBY3RXb3JrKHJldHVyblZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIGVsc2UgUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUgPSBudWxsO1xuICAgICAgMCA8IFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGhcbiAgICAgICAgPyAoKHF1ZXVlID0gYWdncmVnYXRlRXJyb3JzKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycykpLFxuICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoID0gMCksXG4gICAgICAgICAgcmVqZWN0KHF1ZXVlKSlcbiAgICAgICAgOiByZXNvbHZlKHJldHVyblZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmx1c2hBY3RRdWV1ZShxdWV1ZSkge1xuICAgICAgaWYgKCFpc0ZsdXNoaW5nKSB7XG4gICAgICAgIGlzRmx1c2hpbmcgPSAhMDtcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAoOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHF1ZXVlW2ldO1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5kaWRVc2VQcm9taXNlID0gITE7XG4gICAgICAgICAgICAgIHZhciBjb250aW51YXRpb24gPSBjYWxsYmFjayghMSk7XG4gICAgICAgICAgICAgIGlmIChudWxsICE9PSBjb250aW51YXRpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuZGlkVXNlUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgcXVldWVbaV0gPSBjYWxsYmFjaztcbiAgICAgICAgICAgICAgICAgIHF1ZXVlLnNwbGljZSgwLCBpKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBjb250aW51YXRpb247XG4gICAgICAgICAgICAgIH0gZWxzZSBicmVhaztcbiAgICAgICAgICAgIH0gd2hpbGUgKDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxdWV1ZS5sZW5ndGggPSAwO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHF1ZXVlLnNwbGljZSgwLCBpICsgMSksIFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpc0ZsdXNoaW5nID0gITE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PVxuICAgICAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydCAmJlxuICAgICAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLnJlZ2lzdGVySW50ZXJuYWxNb2R1bGVTdGFydChFcnJvcigpKTtcbiAgICB2YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnRyYW5zaXRpb25hbC5lbGVtZW50XCIpLFxuICAgICAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLFxuICAgICAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxcbiAgICAgIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksXG4gICAgICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLFxuICAgICAgUkVBQ1RfQ09OU1VNRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb25zdW1lclwiKSxcbiAgICAgIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLFxuICAgICAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksXG4gICAgICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxcbiAgICAgIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLFxuICAgICAgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmxhenlcIiksXG4gICAgICBSRUFDVF9BQ1RJVklUWV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmFjdGl2aXR5XCIpLFxuICAgICAgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gU3ltYm9sLml0ZXJhdG9yLFxuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ID0ge30sXG4gICAgICBSZWFjdE5vb3BVcGRhdGVRdWV1ZSA9IHtcbiAgICAgICAgaXNNb3VudGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICB9LFxuICAgICAgICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgICAgICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCBcImZvcmNlVXBkYXRlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHtcbiAgICAgICAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgXCJyZXBsYWNlU3RhdGVcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgICAgICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsIFwic2V0U3RhdGVcIik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhc3NpZ24gPSBPYmplY3QuYXNzaWduLFxuICAgICAgZW1wdHlPYmplY3QgPSB7fTtcbiAgICBPYmplY3QuZnJlZXplKGVtcHR5T2JqZWN0KTtcbiAgICBDb21wb25lbnQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQgPSB7fTtcbiAgICBDb21wb25lbnQucHJvdG90eXBlLnNldFN0YXRlID0gZnVuY3Rpb24gKHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChcbiAgICAgICAgXCJvYmplY3RcIiAhPT0gdHlwZW9mIHBhcnRpYWxTdGF0ZSAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgIT09IHR5cGVvZiBwYXJ0aWFsU3RhdGUgJiZcbiAgICAgICAgbnVsbCAhPSBwYXJ0aWFsU3RhdGVcbiAgICAgIClcbiAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgXCJ0YWtlcyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzIHRvIHVwZGF0ZSBvciBhIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcy5cIlxuICAgICAgICApO1xuICAgICAgdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLCBwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrLCBcInNldFN0YXRlXCIpO1xuICAgIH07XG4gICAgQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgdGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLCBjYWxsYmFjaywgXCJmb3JjZVVwZGF0ZVwiKTtcbiAgICB9O1xuICAgIHZhciBkZXByZWNhdGVkQVBJcyA9IHtcbiAgICAgICAgaXNNb3VudGVkOiBbXG4gICAgICAgICAgXCJpc01vdW50ZWRcIixcbiAgICAgICAgICBcIkluc3RlYWQsIG1ha2Ugc3VyZSB0byBjbGVhbiB1cCBzdWJzY3JpcHRpb25zIGFuZCBwZW5kaW5nIHJlcXVlc3RzIGluIGNvbXBvbmVudFdpbGxVbm1vdW50IHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzLlwiXG4gICAgICAgIF0sXG4gICAgICAgIHJlcGxhY2VTdGF0ZTogW1xuICAgICAgICAgIFwicmVwbGFjZVN0YXRlXCIsXG4gICAgICAgICAgXCJSZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIHNldFN0YXRlIGluc3RlYWQgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzMyMzYpLlwiXG4gICAgICAgIF1cbiAgICAgIH0sXG4gICAgICBmbk5hbWU7XG4gICAgZm9yIChmbk5hbWUgaW4gZGVwcmVjYXRlZEFQSXMpXG4gICAgICBkZXByZWNhdGVkQVBJcy5oYXNPd25Qcm9wZXJ0eShmbk5hbWUpICYmXG4gICAgICAgIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyhmbk5hbWUsIGRlcHJlY2F0ZWRBUElzW2ZuTmFtZV0pO1xuICAgIENvbXBvbmVudER1bW15LnByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gICAgZGVwcmVjYXRlZEFQSXMgPSBQdXJlQ29tcG9uZW50LnByb3RvdHlwZSA9IG5ldyBDb21wb25lbnREdW1teSgpO1xuICAgIGRlcHJlY2F0ZWRBUElzLmNvbnN0cnVjdG9yID0gUHVyZUNvbXBvbmVudDtcbiAgICBhc3NpZ24oZGVwcmVjYXRlZEFQSXMsIENvbXBvbmVudC5wcm90b3R5cGUpO1xuICAgIGRlcHJlY2F0ZWRBUElzLmlzUHVyZVJlYWN0Q29tcG9uZW50ID0gITA7XG4gICAgdmFyIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheSxcbiAgICAgIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UgPSBTeW1ib2wuZm9yKFwicmVhY3QuY2xpZW50LnJlZmVyZW5jZVwiKSxcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0ge1xuICAgICAgICBIOiBudWxsLFxuICAgICAgICBBOiBudWxsLFxuICAgICAgICBUOiBudWxsLFxuICAgICAgICBTOiBudWxsLFxuICAgICAgICBhY3RRdWV1ZTogbnVsbCxcbiAgICAgICAgYXN5bmNUcmFuc2l0aW9uczogMCxcbiAgICAgICAgaXNCYXRjaGluZ0xlZ2FjeTogITEsXG4gICAgICAgIGRpZFNjaGVkdWxlTGVnYWN5VXBkYXRlOiAhMSxcbiAgICAgICAgZGlkVXNlUHJvbWlzZTogITEsXG4gICAgICAgIHRocm93bkVycm9yczogW10sXG4gICAgICAgIGdldEN1cnJlbnRTdGFjazogbnVsbCxcbiAgICAgICAgcmVjZW50bHlDcmVhdGVkT3duZXJTdGFja3M6IDBcbiAgICAgIH0sXG4gICAgICBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksXG4gICAgICBjcmVhdGVUYXNrID0gY29uc29sZS5jcmVhdGVUYXNrXG4gICAgICAgID8gY29uc29sZS5jcmVhdGVUYXNrXG4gICAgICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfTtcbiAgICBkZXByZWNhdGVkQVBJcyA9IHtcbiAgICAgIHJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZTogZnVuY3Rpb24gKGNhbGxTdGFja0ZvckVycm9yKSB7XG4gICAgICAgIHJldHVybiBjYWxsU3RhY2tGb3JFcnJvcigpO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBkaWRXYXJuQWJvdXRPbGRKU1hSdW50aW1lO1xuICAgIHZhciBkaWRXYXJuQWJvdXRFbGVtZW50UmVmID0ge307XG4gICAgdmFyIHVua25vd25Pd25lckRlYnVnU3RhY2sgPSBkZXByZWNhdGVkQVBJcy5yZWFjdF9zdGFja19ib3R0b21fZnJhbWUuYmluZChcbiAgICAgIGRlcHJlY2F0ZWRBUElzLFxuICAgICAgVW5rbm93bk93bmVyXG4gICAgKSgpO1xuICAgIHZhciB1bmtub3duT3duZXJEZWJ1Z1Rhc2sgPSBjcmVhdGVUYXNrKGdldFRhc2tOYW1lKFVua25vd25Pd25lcikpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRNYXBzID0gITEsXG4gICAgICB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCA9IC9cXC8rL2csXG4gICAgICByZXBvcnRHbG9iYWxFcnJvciA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlcG9ydEVycm9yXG4gICAgICAgICAgPyByZXBvcnRFcnJvclxuICAgICAgICAgIDogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygd2luZG93ICYmXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygd2luZG93LkVycm9yRXZlbnRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV2ZW50ID0gbmV3IHdpbmRvdy5FcnJvckV2ZW50KFwiZXJyb3JcIiwge1xuICAgICAgICAgICAgICAgICAgYnViYmxlczogITAsXG4gICAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiAhMCxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBlcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBlcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgZXJyb3IubWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgID8gU3RyaW5nKGVycm9yLm1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCF3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCkpIHJldHVybjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgcHJvY2VzcyAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByb2Nlc3MuZW1pdFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVtaXQoXCJ1bmNhdWdodEV4Y2VwdGlvblwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfSxcbiAgICAgIGRpZFdhcm5BYm91dE1lc3NhZ2VDaGFubmVsID0gITEsXG4gICAgICBlbnF1ZXVlVGFza0ltcGwgPSBudWxsLFxuICAgICAgYWN0U2NvcGVEZXB0aCA9IDAsXG4gICAgICBkaWRXYXJuTm9Bd2FpdEFjdCA9ICExLFxuICAgICAgaXNGbHVzaGluZyA9ICExLFxuICAgICAgcXVldWVTZXZlcmFsTWljcm90YXNrcyA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHF1ZXVlTWljcm90YXNrXG4gICAgICAgICAgPyBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxdWV1ZU1pY3JvdGFzayhjYWxsYmFjayk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIDogZW5xdWV1ZVRhc2s7XG4gICAgZGVwcmVjYXRlZEFQSXMgPSBPYmplY3QuZnJlZXplKHtcbiAgICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICAgIGM6IGZ1bmN0aW9uIChzaXplKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZU1lbW9DYWNoZShzaXplKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBleHBvcnRzLkNoaWxkcmVuID0ge1xuICAgICAgbWFwOiBtYXBDaGlsZHJlbixcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIChjaGlsZHJlbiwgZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KSB7XG4gICAgICAgIG1hcENoaWxkcmVuKFxuICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGZvckVhY2hGdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmb3JFYWNoQ29udGV4dFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGNvdW50OiBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgICAgICAgdmFyIG4gPSAwO1xuICAgICAgICBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIG4rKztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuO1xuICAgICAgfSxcbiAgICAgIHRvQXJyYXk6IGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgICB9KSB8fCBbXVxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIG9ubHk6IGZ1bmN0aW9uIChjaGlsZHJlbikge1xuICAgICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSlcbiAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgIFwiUmVhY3QuQ2hpbGRyZW4ub25seSBleHBlY3RlZCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuXCJcbiAgICAgICAgICApO1xuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICB9XG4gICAgfTtcbiAgICBleHBvcnRzLkNvbXBvbmVudCA9IENvbXBvbmVudDtcbiAgICBleHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbiAgICBleHBvcnRzLlByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbiAgICBleHBvcnRzLlB1cmVDb21wb25lbnQgPSBQdXJlQ29tcG9uZW50O1xuICAgIGV4cG9ydHMuU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG4gICAgZXhwb3J0cy5TdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG4gICAgZXhwb3J0cy5fX0NMSUVOVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREUgPVxuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHM7XG4gICAgZXhwb3J0cy5fX0NPTVBJTEVSX1JVTlRJTUUgPSBkZXByZWNhdGVkQVBJcztcbiAgICBleHBvcnRzLmFjdCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgdmFyIHByZXZBY3RRdWV1ZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlLFxuICAgICAgICBwcmV2QWN0U2NvcGVEZXB0aCA9IGFjdFNjb3BlRGVwdGg7XG4gICAgICBhY3RTY29wZURlcHRoKys7XG4gICAgICB2YXIgcXVldWUgPSAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUgPVxuICAgICAgICAgIG51bGwgIT09IHByZXZBY3RRdWV1ZSA/IHByZXZBY3RRdWV1ZSA6IFtdKSxcbiAgICAgICAgZGlkQXdhaXRBY3RDYWxsID0gITE7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gY2FsbGJhY2soKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIH1cbiAgICAgIGlmICgwIDwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aClcbiAgICAgICAgdGhyb3cgKFxuICAgICAgICAgIChwb3BBY3RTY29wZShwcmV2QWN0UXVldWUsIHByZXZBY3RTY29wZURlcHRoKSxcbiAgICAgICAgICAoY2FsbGJhY2sgPSBhZ2dyZWdhdGVFcnJvcnMoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzKSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGggPSAwKSxcbiAgICAgICAgICBjYWxsYmFjaylcbiAgICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgbnVsbCAhPT0gcmVzdWx0ICYmXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiByZXN1bHQgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmVzdWx0LnRoZW5cbiAgICAgICkge1xuICAgICAgICB2YXIgdGhlbmFibGUgPSByZXN1bHQ7XG4gICAgICAgIHF1ZXVlU2V2ZXJhbE1pY3JvdGFza3MoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGRpZEF3YWl0QWN0Q2FsbCB8fFxuICAgICAgICAgICAgZGlkV2Fybk5vQXdhaXRBY3QgfHxcbiAgICAgICAgICAgICgoZGlkV2Fybk5vQXdhaXRBY3QgPSAhMCksXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIllvdSBjYWxsZWQgYWN0KGFzeW5jICgpID0+IC4uLikgd2l0aG91dCBhd2FpdC4gVGhpcyBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgdGVzdGluZyBiZWhhdmlvdXIsIGludGVybGVhdmluZyBtdWx0aXBsZSBhY3QgY2FsbHMgYW5kIG1peGluZyB0aGVpciBzY29wZXMuIFlvdSBzaG91bGQgLSBhd2FpdCBhY3QoYXN5bmMgKCkgPT4gLi4uKTtcIlxuICAgICAgICAgICAgKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRoZW46IGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIGRpZEF3YWl0QWN0Q2FsbCA9ICEwO1xuICAgICAgICAgICAgdGhlbmFibGUudGhlbihcbiAgICAgICAgICAgICAgZnVuY3Rpb24gKHJldHVyblZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcG9wQWN0U2NvcGUocHJldkFjdFF1ZXVlLCBwcmV2QWN0U2NvcGVEZXB0aCk7XG4gICAgICAgICAgICAgICAgaWYgKDAgPT09IHByZXZBY3RTY29wZURlcHRoKSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmbHVzaEFjdFF1ZXVlKHF1ZXVlKSxcbiAgICAgICAgICAgICAgICAgICAgICBlbnF1ZXVlVGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVjdXJzaXZlbHlGbHVzaEFzeW5jQWN0V29yayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yJDApIHtcbiAgICAgICAgICAgICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLnB1c2goZXJyb3IkMCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoMCA8IFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aHJvd25FcnJvciA9IGFnZ3JlZ2F0ZUVycm9ycyhcbiAgICAgICAgICAgICAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChfdGhyb3duRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSByZXNvbHZlKHJldHVyblZhbHVlKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcG9wQWN0U2NvcGUocHJldkFjdFF1ZXVlLCBwcmV2QWN0U2NvcGVEZXB0aCk7XG4gICAgICAgICAgICAgICAgMCA8IFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgID8gKChlcnJvciA9IGFnZ3JlZ2F0ZUVycm9ycyhcbiAgICAgICAgICAgICAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoID0gMCksXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcikpXG4gICAgICAgICAgICAgICAgICA6IHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdmFyIHJldHVyblZhbHVlJGpzY29tcCQwID0gcmVzdWx0O1xuICAgICAgcG9wQWN0U2NvcGUocHJldkFjdFF1ZXVlLCBwcmV2QWN0U2NvcGVEZXB0aCk7XG4gICAgICAwID09PSBwcmV2QWN0U2NvcGVEZXB0aCAmJlxuICAgICAgICAoZmx1c2hBY3RRdWV1ZShxdWV1ZSksXG4gICAgICAgIDAgIT09IHF1ZXVlLmxlbmd0aCAmJlxuICAgICAgICAgIHF1ZXVlU2V2ZXJhbE1pY3JvdGFza3MoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZGlkQXdhaXRBY3RDYWxsIHx8XG4gICAgICAgICAgICAgIGRpZFdhcm5Ob0F3YWl0QWN0IHx8XG4gICAgICAgICAgICAgICgoZGlkV2Fybk5vQXdhaXRBY3QgPSAhMCksXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgXCJBIGNvbXBvbmVudCBzdXNwZW5kZWQgaW5zaWRlIGFuIGBhY3RgIHNjb3BlLCBidXQgdGhlIGBhY3RgIGNhbGwgd2FzIG5vdCBhd2FpdGVkLiBXaGVuIHRlc3RpbmcgUmVhY3QgY29tcG9uZW50cyB0aGF0IGRlcGVuZCBvbiBhc3luY2hyb25vdXMgZGF0YSwgeW91IG11c3QgYXdhaXQgdGhlIHJlc3VsdDpcXG5cXG5hd2FpdCBhY3QoKCkgPT4gLi4uKVwiXG4gICAgICAgICAgICAgICkpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUgPSBudWxsKSk7XG4gICAgICBpZiAoMCA8IFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGgpXG4gICAgICAgIHRocm93IChcbiAgICAgICAgICAoKGNhbGxiYWNrID0gYWdncmVnYXRlRXJyb3JzKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycykpLFxuICAgICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoID0gMCksXG4gICAgICAgICAgY2FsbGJhY2spXG4gICAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0aGVuOiBmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgZGlkQXdhaXRBY3RDYWxsID0gITA7XG4gICAgICAgICAgMCA9PT0gcHJldkFjdFNjb3BlRGVwdGhcbiAgICAgICAgICAgID8gKChSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSA9IHF1ZXVlKSxcbiAgICAgICAgICAgICAgZW5xdWV1ZVRhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWN1cnNpdmVseUZsdXNoQXN5bmNBY3RXb3JrKFxuICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUkanNjb21wJDAsXG4gICAgICAgICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICA6IHJlc29sdmUocmV0dXJuVmFsdWUkanNjb21wJDApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhwb3J0cy5jYWNoZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhwb3J0cy5jYWNoZVNpZ25hbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgZXhwb3J0cy5jYXB0dXJlT3duZXJTdGFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBnZXRDdXJyZW50U3RhY2sgPSBSZWFjdFNoYXJlZEludGVybmFscy5nZXRDdXJyZW50U3RhY2s7XG4gICAgICByZXR1cm4gbnVsbCA9PT0gZ2V0Q3VycmVudFN0YWNrID8gbnVsbCA6IGdldEN1cnJlbnRTdGFjaygpO1xuICAgIH07XG4gICAgZXhwb3J0cy5jbG9uZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgY29uZmlnLCBjaGlsZHJlbikge1xuICAgICAgaWYgKG51bGwgPT09IGVsZW1lbnQgfHwgdm9pZCAwID09PSBlbGVtZW50KVxuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIlRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgXCIgK1xuICAgICAgICAgICAgZWxlbWVudCArXG4gICAgICAgICAgICBcIi5cIlxuICAgICAgICApO1xuICAgICAgdmFyIHByb3BzID0gYXNzaWduKHt9LCBlbGVtZW50LnByb3BzKSxcbiAgICAgICAga2V5ID0gZWxlbWVudC5rZXksXG4gICAgICAgIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICBpZiAobnVsbCAhPSBjb25maWcpIHtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdDtcbiAgICAgICAgYToge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBcInJlZlwiKSAmJlxuICAgICAgICAgICAgKEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgXCJyZWZcIlxuICAgICAgICAgICAgKS5nZXQpICYmXG4gICAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQuaXNSZWFjdFdhcm5pbmdcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICExO1xuICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICB9XG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gdm9pZCAwICE9PSBjb25maWcucmVmO1xuICAgICAgICB9XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCAmJiAob3duZXIgPSBnZXRPd25lcigpKTtcbiAgICAgICAgaGFzVmFsaWRLZXkoY29uZmlnKSAmJlxuICAgICAgICAgIChjaGVja0tleVN0cmluZ0NvZXJjaW9uKGNvbmZpZy5rZXkpLCAoa2V5ID0gXCJcIiArIGNvbmZpZy5rZXkpKTtcbiAgICAgICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpXG4gICAgICAgICAgIWhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgfHxcbiAgICAgICAgICAgIFwia2V5XCIgPT09IHByb3BOYW1lIHx8XG4gICAgICAgICAgICBcIl9fc2VsZlwiID09PSBwcm9wTmFtZSB8fFxuICAgICAgICAgICAgXCJfX3NvdXJjZVwiID09PSBwcm9wTmFtZSB8fFxuICAgICAgICAgICAgKFwicmVmXCIgPT09IHByb3BOYW1lICYmIHZvaWQgMCA9PT0gY29uZmlnLnJlZikgfHxcbiAgICAgICAgICAgIChwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wTmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICAgICAgaWYgKDEgPT09IHByb3BOYW1lKSBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgZWxzZSBpZiAoMSA8IHByb3BOYW1lKSB7XG4gICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9IEFycmF5KHByb3BOYW1lKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wTmFtZTsgaSsrKVxuICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdFtpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgICAgIHByb3BzLmNoaWxkcmVuID0gSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0O1xuICAgICAgfVxuICAgICAgcHJvcHMgPSBSZWFjdEVsZW1lbnQoXG4gICAgICAgIGVsZW1lbnQudHlwZSxcbiAgICAgICAga2V5LFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgb3duZXIsXG4gICAgICAgIHByb3BzLFxuICAgICAgICBlbGVtZW50Ll9kZWJ1Z1N0YWNrLFxuICAgICAgICBlbGVtZW50Ll9kZWJ1Z1Rhc2tcbiAgICAgICk7XG4gICAgICBmb3IgKGtleSA9IDI7IGtleSA8IGFyZ3VtZW50cy5sZW5ndGg7IGtleSsrKVxuICAgICAgICAob3duZXIgPSBhcmd1bWVudHNba2V5XSksXG4gICAgICAgICAgaXNWYWxpZEVsZW1lbnQob3duZXIpICYmIG93bmVyLl9zdG9yZSAmJiAob3duZXIuX3N0b3JlLnZhbGlkYXRlZCA9IDEpO1xuICAgICAgcmV0dXJuIHByb3BzO1xuICAgIH07XG4gICAgZXhwb3J0cy5jcmVhdGVDb250ZXh0ID0gZnVuY3Rpb24gKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgZGVmYXVsdFZhbHVlID0ge1xuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfQ09OVEVYVF9UWVBFLFxuICAgICAgICBfY3VycmVudFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgIF9jdXJyZW50VmFsdWUyOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgIF90aHJlYWRDb3VudDogMCxcbiAgICAgICAgUHJvdmlkZXI6IG51bGwsXG4gICAgICAgIENvbnN1bWVyOiBudWxsXG4gICAgICB9O1xuICAgICAgZGVmYXVsdFZhbHVlLlByb3ZpZGVyID0gZGVmYXVsdFZhbHVlO1xuICAgICAgZGVmYXVsdFZhbHVlLkNvbnN1bWVyID0ge1xuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfQ09OU1VNRVJfVFlQRSxcbiAgICAgICAgX2NvbnRleHQ6IGRlZmF1bHRWYWx1ZVxuICAgICAgfTtcbiAgICAgIGRlZmF1bHRWYWx1ZS5fY3VycmVudFJlbmRlcmVyID0gbnVsbDtcbiAgICAgIGRlZmF1bHRWYWx1ZS5fY3VycmVudFJlbmRlcmVyMiA9IG51bGw7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH07XG4gICAgZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKHR5cGUsIGNvbmZpZywgY2hpbGRyZW4pIHtcbiAgICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gYXJndW1lbnRzW2ldO1xuICAgICAgICBpc1ZhbGlkRWxlbWVudChub2RlKSAmJiBub2RlLl9zdG9yZSAmJiAobm9kZS5fc3RvcmUudmFsaWRhdGVkID0gMSk7XG4gICAgICB9XG4gICAgICBpID0ge307XG4gICAgICBub2RlID0gbnVsbDtcbiAgICAgIGlmIChudWxsICE9IGNvbmZpZylcbiAgICAgICAgZm9yIChwcm9wTmFtZSBpbiAoZGlkV2FybkFib3V0T2xkSlNYUnVudGltZSB8fFxuICAgICAgICAgICEoXCJfX3NlbGZcIiBpbiBjb25maWcpIHx8XG4gICAgICAgICAgXCJrZXlcIiBpbiBjb25maWcgfHxcbiAgICAgICAgICAoKGRpZFdhcm5BYm91dE9sZEpTWFJ1bnRpbWUgPSAhMCksXG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgXCJZb3VyIGFwcCAob3Igb25lIG9mIGl0cyBkZXBlbmRlbmNpZXMpIGlzIHVzaW5nIGFuIG91dGRhdGVkIEpTWCB0cmFuc2Zvcm0uIFVwZGF0ZSB0byB0aGUgbW9kZXJuIEpTWCB0cmFuc2Zvcm0gZm9yIGZhc3RlciBwZXJmb3JtYW5jZTogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9uZXctanN4LXRyYW5zZm9ybVwiXG4gICAgICAgICAgKSksXG4gICAgICAgIGhhc1ZhbGlkS2V5KGNvbmZpZykgJiZcbiAgICAgICAgICAoY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KSwgKG5vZGUgPSBcIlwiICsgY29uZmlnLmtleSkpLFxuICAgICAgICBjb25maWcpKVxuICAgICAgICAgIGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiZcbiAgICAgICAgICAgIFwia2V5XCIgIT09IHByb3BOYW1lICYmXG4gICAgICAgICAgICBcIl9fc2VsZlwiICE9PSBwcm9wTmFtZSAmJlxuICAgICAgICAgICAgXCJfX3NvdXJjZVwiICE9PSBwcm9wTmFtZSAmJlxuICAgICAgICAgICAgKGlbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXSk7XG4gICAgICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgICAgIGlmICgxID09PSBjaGlsZHJlbkxlbmd0aCkgaS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgZWxzZSBpZiAoMSA8IGNoaWxkcmVuTGVuZ3RoKSB7XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCksIF9pID0gMDtcbiAgICAgICAgICBfaSA8IGNoaWxkcmVuTGVuZ3RoO1xuICAgICAgICAgIF9pKytcbiAgICAgICAgKVxuICAgICAgICAgIGNoaWxkQXJyYXlbX2ldID0gYXJndW1lbnRzW19pICsgMl07XG4gICAgICAgIE9iamVjdC5mcmVlemUgJiYgT2JqZWN0LmZyZWV6ZShjaGlsZEFycmF5KTtcbiAgICAgICAgaS5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcylcbiAgICAgICAgZm9yIChwcm9wTmFtZSBpbiAoKGNoaWxkcmVuTGVuZ3RoID0gdHlwZS5kZWZhdWx0UHJvcHMpLCBjaGlsZHJlbkxlbmd0aCkpXG4gICAgICAgICAgdm9pZCAwID09PSBpW3Byb3BOYW1lXSAmJiAoaVtwcm9wTmFtZV0gPSBjaGlsZHJlbkxlbmd0aFtwcm9wTmFtZV0pO1xuICAgICAgbm9kZSAmJlxuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihcbiAgICAgICAgICBpLFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGVcbiAgICAgICAgICAgID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgXCJVbmtub3duXCJcbiAgICAgICAgICAgIDogdHlwZVxuICAgICAgICApO1xuICAgICAgdmFyIHByb3BOYW1lID0gMWU0ID4gUmVhY3RTaGFyZWRJbnRlcm5hbHMucmVjZW50bHlDcmVhdGVkT3duZXJTdGFja3MrKztcbiAgICAgIHJldHVybiBSZWFjdEVsZW1lbnQoXG4gICAgICAgIHR5cGUsXG4gICAgICAgIG5vZGUsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICBnZXRPd25lcigpLFxuICAgICAgICBpLFxuICAgICAgICBwcm9wTmFtZSA/IEVycm9yKFwicmVhY3Qtc3RhY2stdG9wLWZyYW1lXCIpIDogdW5rbm93bk93bmVyRGVidWdTdGFjayxcbiAgICAgICAgcHJvcE5hbWUgPyBjcmVhdGVUYXNrKGdldFRhc2tOYW1lKHR5cGUpKSA6IHVua25vd25Pd25lckRlYnVnVGFza1xuICAgICAgKTtcbiAgICB9O1xuICAgIGV4cG9ydHMuY3JlYXRlUmVmID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlZk9iamVjdCA9IHsgY3VycmVudDogbnVsbCB9O1xuICAgICAgT2JqZWN0LnNlYWwocmVmT2JqZWN0KTtcbiAgICAgIHJldHVybiByZWZPYmplY3Q7XG4gICAgfTtcbiAgICBleHBvcnRzLmZvcndhcmRSZWYgPSBmdW5jdGlvbiAocmVuZGVyKSB7XG4gICAgICBudWxsICE9IHJlbmRlciAmJiByZW5kZXIuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRVxuICAgICAgICA/IGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcImZvcndhcmRSZWYgcmVxdWlyZXMgYSByZW5kZXIgZnVuY3Rpb24gYnV0IHJlY2VpdmVkIGEgYG1lbW9gIGNvbXBvbmVudC4gSW5zdGVhZCBvZiBmb3J3YXJkUmVmKG1lbW8oLi4uKSksIHVzZSBtZW1vKGZvcndhcmRSZWYoLi4uKSkuXCJcbiAgICAgICAgICApXG4gICAgICAgIDogXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgcmVuZGVyXG4gICAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcImZvcndhcmRSZWYgcmVxdWlyZXMgYSByZW5kZXIgZnVuY3Rpb24gYnV0IHdhcyBnaXZlbiAlcy5cIixcbiAgICAgICAgICAgICAgbnVsbCA9PT0gcmVuZGVyID8gXCJudWxsXCIgOiB0eXBlb2YgcmVuZGVyXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiAwICE9PSByZW5kZXIubGVuZ3RoICYmXG4gICAgICAgICAgICAyICE9PSByZW5kZXIubGVuZ3RoICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcImZvcndhcmRSZWYgcmVuZGVyIGZ1bmN0aW9ucyBhY2NlcHQgZXhhY3RseSB0d28gcGFyYW1ldGVyczogcHJvcHMgYW5kIHJlZi4gJXNcIixcbiAgICAgICAgICAgICAgMSA9PT0gcmVuZGVyLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gXCJEaWQgeW91IGZvcmdldCB0byB1c2UgdGhlIHJlZiBwYXJhbWV0ZXI/XCJcbiAgICAgICAgICAgICAgICA6IFwiQW55IGFkZGl0aW9uYWwgcGFyYW1ldGVyIHdpbGwgYmUgdW5kZWZpbmVkLlwiXG4gICAgICAgICAgICApO1xuICAgICAgbnVsbCAhPSByZW5kZXIgJiZcbiAgICAgICAgbnVsbCAhPSByZW5kZXIuZGVmYXVsdFByb3BzICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgZG8gbm90IHN1cHBvcnQgZGVmYXVsdFByb3BzLiBEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIGEgUmVhY3QgY29tcG9uZW50P1wiXG4gICAgICAgICk7XG4gICAgICB2YXIgZWxlbWVudFR5cGUgPSB7ICQkdHlwZW9mOiBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFLCByZW5kZXI6IHJlbmRlciB9LFxuICAgICAgICBvd25OYW1lO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnRUeXBlLCBcImRpc3BsYXlOYW1lXCIsIHtcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBvd25OYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgb3duTmFtZSA9IG5hbWU7XG4gICAgICAgICAgcmVuZGVyLm5hbWUgfHxcbiAgICAgICAgICAgIHJlbmRlci5kaXNwbGF5TmFtZSB8fFxuICAgICAgICAgICAgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZW5kZXIsIFwibmFtZVwiLCB7IHZhbHVlOiBuYW1lIH0pLFxuICAgICAgICAgICAgKHJlbmRlci5kaXNwbGF5TmFtZSA9IG5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZWxlbWVudFR5cGU7XG4gICAgfTtcbiAgICBleHBvcnRzLmlzVmFsaWRFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG4gICAgZXhwb3J0cy5sYXp5ID0gZnVuY3Rpb24gKGN0b3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9MQVpZX1RZUEUsXG4gICAgICAgIF9wYXlsb2FkOiB7IF9zdGF0dXM6IC0xLCBfcmVzdWx0OiBjdG9yIH0sXG4gICAgICAgIF9pbml0OiBsYXp5SW5pdGlhbGl6ZXJcbiAgICAgIH07XG4gICAgfTtcbiAgICBleHBvcnRzLm1lbW8gPSBmdW5jdGlvbiAodHlwZSwgY29tcGFyZSkge1xuICAgICAgbnVsbCA9PSB0eXBlICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJtZW1vOiBUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIGNvbXBvbmVudC4gSW5zdGVhZCByZWNlaXZlZDogJXNcIixcbiAgICAgICAgICBudWxsID09PSB0eXBlID8gXCJudWxsXCIgOiB0eXBlb2YgdHlwZVxuICAgICAgICApO1xuICAgICAgY29tcGFyZSA9IHtcbiAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX01FTU9fVFlQRSxcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgY29tcGFyZTogdm9pZCAwID09PSBjb21wYXJlID8gbnVsbCA6IGNvbXBhcmVcbiAgICAgIH07XG4gICAgICB2YXIgb3duTmFtZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb21wYXJlLCBcImRpc3BsYXlOYW1lXCIsIHtcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBvd25OYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgb3duTmFtZSA9IG5hbWU7XG4gICAgICAgICAgdHlwZS5uYW1lIHx8XG4gICAgICAgICAgICB0eXBlLmRpc3BsYXlOYW1lIHx8XG4gICAgICAgICAgICAoT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwibmFtZVwiLCB7IHZhbHVlOiBuYW1lIH0pLFxuICAgICAgICAgICAgKHR5cGUuZGlzcGxheU5hbWUgPSBuYW1lKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvbXBhcmU7XG4gICAgfTtcbiAgICBleHBvcnRzLnN0YXJ0VHJhbnNpdGlvbiA9IGZ1bmN0aW9uIChzY29wZSkge1xuICAgICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCxcbiAgICAgICAgY3VycmVudFRyYW5zaXRpb24gPSB7fTtcbiAgICAgIGN1cnJlbnRUcmFuc2l0aW9uLl91cGRhdGVkRmliZXJzID0gbmV3IFNldCgpO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IGN1cnJlbnRUcmFuc2l0aW9uO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJldHVyblZhbHVlID0gc2NvcGUoKSxcbiAgICAgICAgICBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlM7XG4gICAgICAgIG51bGwgIT09IG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoICYmXG4gICAgICAgICAgb25TdGFydFRyYW5zaXRpb25GaW5pc2goY3VycmVudFRyYW5zaXRpb24sIHJldHVyblZhbHVlKTtcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHJldHVyblZhbHVlICYmXG4gICAgICAgICAgbnVsbCAhPT0gcmV0dXJuVmFsdWUgJiZcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZS50aGVuICYmXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFzeW5jVHJhbnNpdGlvbnMrKyxcbiAgICAgICAgICByZXR1cm5WYWx1ZS50aGVuKHJlbGVhc2VBc3luY1RyYW5zaXRpb24sIHJlbGVhc2VBc3luY1RyYW5zaXRpb24pLFxuICAgICAgICAgIHJldHVyblZhbHVlLnRoZW4obm9vcCwgcmVwb3J0R2xvYmFsRXJyb3IpKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJlcG9ydEdsb2JhbEVycm9yKGVycm9yKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIG51bGwgPT09IHByZXZUcmFuc2l0aW9uICYmXG4gICAgICAgICAgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMgJiZcbiAgICAgICAgICAoKHNjb3BlID0gY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMuc2l6ZSksXG4gICAgICAgICAgY3VycmVudFRyYW5zaXRpb24uX3VwZGF0ZWRGaWJlcnMuY2xlYXIoKSxcbiAgICAgICAgICAxMCA8IHNjb3BlICYmXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgIFwiRGV0ZWN0ZWQgYSBsYXJnZSBudW1iZXIgb2YgdXBkYXRlcyBpbnNpZGUgc3RhcnRUcmFuc2l0aW9uLiBJZiB0aGlzIGlzIGR1ZSB0byBhIHN1YnNjcmlwdGlvbiBwbGVhc2UgcmUtd3JpdGUgaXQgdG8gdXNlIFJlYWN0IHByb3ZpZGVkIGhvb2tzLiBPdGhlcndpc2UgY29uY3VycmVudCBtb2RlIGd1YXJhbnRlZXMgYXJlIG9mZiB0aGUgdGFibGUuXCJcbiAgICAgICAgICAgICkpLFxuICAgICAgICAgIG51bGwgIT09IHByZXZUcmFuc2l0aW9uICYmXG4gICAgICAgICAgICBudWxsICE9PSBjdXJyZW50VHJhbnNpdGlvbi50eXBlcyAmJlxuICAgICAgICAgICAgKG51bGwgIT09IHByZXZUcmFuc2l0aW9uLnR5cGVzICYmXG4gICAgICAgICAgICAgIHByZXZUcmFuc2l0aW9uLnR5cGVzICE9PSBjdXJyZW50VHJhbnNpdGlvbi50eXBlcyAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIFwiV2UgZXhwZWN0ZWQgaW5uZXIgVHJhbnNpdGlvbnMgdG8gaGF2ZSB0cmFuc2ZlcnJlZCB0aGUgb3V0ZXIgdHlwZXMgc2V0IGFuZCB0aGF0IHlvdSBjYW5ub3QgYWRkIHRvIHRoZSBvdXRlciBUcmFuc2l0aW9uIHdoaWxlIGluc2lkZSB0aGUgaW5uZXIuVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKHByZXZUcmFuc2l0aW9uLnR5cGVzID0gY3VycmVudFRyYW5zaXRpb24udHlwZXMpKSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuVCA9IHByZXZUcmFuc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGV4cG9ydHMudW5zdGFibGVfdXNlQ2FjaGVSZWZyZXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlQ2FjaGVSZWZyZXNoKCk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZSA9IGZ1bmN0aW9uICh1c2FibGUpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZSh1c2FibGUpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VBY3Rpb25TdGF0ZSA9IGZ1bmN0aW9uIChhY3Rpb24sIGluaXRpYWxTdGF0ZSwgcGVybWFsaW5rKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VBY3Rpb25TdGF0ZShcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBpbml0aWFsU3RhdGUsXG4gICAgICAgIHBlcm1hbGlua1xuICAgICAgKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlQ29udGV4dCA9IGZ1bmN0aW9uIChDb250ZXh0KSB7XG4gICAgICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gICAgICBDb250ZXh0LiQkdHlwZW9mID09PSBSRUFDVF9DT05TVU1FUl9UWVBFICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJDYWxsaW5nIHVzZUNvbnRleHQoQ29udGV4dC5Db25zdW1lcikgaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBjYXVzZSBidWdzLiBEaWQgeW91IG1lYW4gdG8gY2FsbCB1c2VDb250ZXh0KENvbnRleHQpIGluc3RlYWQ/XCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyLnVzZUNvbnRleHQoQ29udGV4dCk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZURlYnVnVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VEZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbik7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZURlZmVycmVkVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlRGVmZXJyZWRWYWx1ZSh2YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlRWZmZWN0ID0gZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgbnVsbCA9PSBjcmVhdGUgJiZcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiUmVhY3QgSG9vayB1c2VFZmZlY3QgcmVxdWlyZXMgYW4gZWZmZWN0IGNhbGxiYWNrLiBEaWQgeW91IGZvcmdldCB0byBwYXNzIGEgY2FsbGJhY2sgdG8gdGhlIGhvb2s/XCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VJZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUlkKCk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGUgPSBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VJbnNlcnRpb25FZmZlY3QgPSBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBudWxsID09IGNyZWF0ZSAmJlxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJSZWFjdCBIb29rIHVzZUluc2VydGlvbkVmZmVjdCByZXF1aXJlcyBhbiBlZmZlY3QgY2FsbGJhY2suIERpZCB5b3UgZm9yZ2V0IHRvIHBhc3MgYSBjYWxsYmFjayB0byB0aGUgaG9vaz9cIlxuICAgICAgICApO1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlSW5zZXJ0aW9uRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUxheW91dEVmZmVjdCA9IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIG51bGwgPT0gY3JlYXRlICYmXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBcIlJlYWN0IEhvb2sgdXNlTGF5b3V0RWZmZWN0IHJlcXVpcmVzIGFuIGVmZmVjdCBjYWxsYmFjay4gRGlkIHlvdSBmb3JnZXQgdG8gcGFzcyBhIGNhbGxiYWNrIHRvIHRoZSBob29rP1wiXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlTWVtbyA9IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlT3B0aW1pc3RpYyA9IGZ1bmN0aW9uIChwYXNzdGhyb3VnaCwgcmVkdWNlcikge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlT3B0aW1pc3RpYyhwYXNzdGhyb3VnaCwgcmVkdWNlcik7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZVJlZHVjZXIgPSBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlUmVmID0gZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlUmVmKGluaXRpYWxWYWx1ZSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZVN0YXRlID0gZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlU3luY0V4dGVybmFsU3RvcmUgPSBmdW5jdGlvbiAoXG4gICAgICBzdWJzY3JpYmUsXG4gICAgICBnZXRTbmFwc2hvdCxcbiAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VTeW5jRXh0ZXJuYWxTdG9yZShcbiAgICAgICAgc3Vic2NyaWJlLFxuICAgICAgICBnZXRTbmFwc2hvdCxcbiAgICAgICAgZ2V0U2VydmVyU25hcHNob3RcbiAgICAgICk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZVRyYW5zaXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VUcmFuc2l0aW9uKCk7XG4gICAgfTtcbiAgICBleHBvcnRzLnZlcnNpb24gPSBcIjE5LjIuMC1jYW5hcnktOTdjZGQ1ZDMtMjAyNTA3MTBcIjtcbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AgJiZcbiAgICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcChFcnJvcigpKTtcbiAgfSkoKTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/cjs/react.development.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js":
/*!****************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js ***!
  \****************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/react.development.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/cjs/react.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFJLEtBQXFDLEVBQUUsRUFFMUMsQ0FBQztBQUNGLEVBQUUsMFNBQXNEO0FBQ3hEIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNC43X0BiYWJlbCtjb3JlQDcuMjguM19Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHBsYXl3cmlnaHQrdGVzdEAxLjU1LjBfcmVhY3QtZF80N2ZmMzgxM2Q3OTA1NjZkZjI1NGEyMTYzNTUwYzJkNS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0L2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/jsx-runtime.js":
/*!**********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/jsx-runtime.js ***!
  \**********************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/react-jsx-runtime.development.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/cjs/react-jsx-runtime.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9yZWFjdC9qc3gtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFJLEtBQXFDLEVBQUUsRUFFMUMsQ0FBQztBQUNGLEVBQUUsa1VBQWtFO0FBQ3BFIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNC43X0BiYWJlbCtjb3JlQDcuMjguM19Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHBsYXl3cmlnaHQrdGVzdEAxLjU1LjBfcmVhY3QtZF80N2ZmMzgxM2Q3OTA1NjZkZjI1NGEyMTYzNTUwYzJkNS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0L2pzeC1ydW50aW1lLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1ydW50aW1lLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/jsx-runtime.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/safe-stable-stringify/index.js":
/*!********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/safe-stable-stringify/index.js ***!
  \********************************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){\"use strict\";var e={879:function(e,t){const{hasOwnProperty:n}=Object.prototype;const r=configure();r.configure=configure;r.stringify=r;r.default=r;t.stringify=r;t.configure=configure;e.exports=r;const i=/[\\u0000-\\u001f\\u0022\\u005c\\ud800-\\udfff]/;function strEscape(e){if(e.length<5e3&&!i.test(e)){return`\"${e}\"`}return JSON.stringify(e)}function sort(e,t){if(e.length>200||t){return e.sort(t)}for(let t=1;t<e.length;t++){const n=e[t];let r=t;while(r!==0&&e[r-1]>n){e[r]=e[r-1];r--}e[r]=n}return e}const f=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Object.getPrototypeOf(new Int8Array)),Symbol.toStringTag).get;function isTypedArrayWithEntries(e){return f.call(e)!==undefined&&e.length!==0}function stringifyTypedArray(e,t,n){if(e.length<n){n=e.length}const r=t===\",\"?\"\":\" \";let i=`\"0\":${r}${e[0]}`;for(let f=1;f<n;f++){i+=`${t}\"${f}\":${r}${e[f]}`}return i}function getCircularValueOption(e){if(n.call(e,\"circularValue\")){const t=e.circularValue;if(typeof t===\"string\"){return`\"${t}\"`}if(t==null){return t}if(t===Error||t===TypeError){return{toString(){throw new TypeError(\"Converting circular structure to JSON\")}}}throw new TypeError('The \"circularValue\" argument must be of type string or the value null or undefined')}return'\"[Circular]\"'}function getDeterministicOption(e){let t;if(n.call(e,\"deterministic\")){t=e.deterministic;if(typeof t!==\"boolean\"&&typeof t!==\"function\"){throw new TypeError('The \"deterministic\" argument must be of type boolean or comparator function')}}return t===undefined?true:t}function getBooleanOption(e,t){let r;if(n.call(e,t)){r=e[t];if(typeof r!==\"boolean\"){throw new TypeError(`The \"${t}\" argument must be of type boolean`)}}return r===undefined?true:r}function getPositiveIntegerOption(e,t){let r;if(n.call(e,t)){r=e[t];if(typeof r!==\"number\"){throw new TypeError(`The \"${t}\" argument must be of type number`)}if(!Number.isInteger(r)){throw new TypeError(`The \"${t}\" argument must be an integer`)}if(r<1){throw new RangeError(`The \"${t}\" argument must be >= 1`)}}return r===undefined?Infinity:r}function getItemCount(e){if(e===1){return\"1 item\"}return`${e} items`}function getUniqueReplacerSet(e){const t=new Set;for(const n of e){if(typeof n===\"string\"||typeof n===\"number\"){t.add(String(n))}}return t}function getStrictOption(e){if(n.call(e,\"strict\")){const t=e.strict;if(typeof t!==\"boolean\"){throw new TypeError('The \"strict\" argument must be of type boolean')}if(t){return e=>{let t=`Object can not safely be stringified. Received type ${typeof e}`;if(typeof e!==\"function\")t+=` (${e.toString()})`;throw new Error(t)}}}}function configure(e){e={...e};const t=getStrictOption(e);if(t){if(e.bigint===undefined){e.bigint=false}if(!(\"circularValue\"in e)){e.circularValue=Error}}const n=getCircularValueOption(e);const r=getBooleanOption(e,\"bigint\");const i=getDeterministicOption(e);const f=typeof i===\"function\"?i:undefined;const u=getPositiveIntegerOption(e,\"maximumDepth\");const o=getPositiveIntegerOption(e,\"maximumBreadth\");function stringifyFnReplacer(e,s,l,c,a,g){let p=s[e];if(typeof p===\"object\"&&p!==null&&typeof p.toJSON===\"function\"){p=p.toJSON(e)}p=c.call(s,e,p);switch(typeof p){case\"string\":return strEscape(p);case\"object\":{if(p===null){return\"null\"}if(l.indexOf(p)!==-1){return n}let e=\"\";let t=\",\";const r=g;if(Array.isArray(p)){if(p.length===0){return\"[]\"}if(u<l.length+1){return'\"[Array]\"'}l.push(p);if(a!==\"\"){g+=a;e+=`\\n${g}`;t=`,\\n${g}`}const n=Math.min(p.length,o);let i=0;for(;i<n-1;i++){const n=stringifyFnReplacer(String(i),p,l,c,a,g);e+=n!==undefined?n:\"null\";e+=t}const f=stringifyFnReplacer(String(i),p,l,c,a,g);e+=f!==undefined?f:\"null\";if(p.length-1>o){const n=p.length-o-1;e+=`${t}\"... ${getItemCount(n)} not stringified\"`}if(a!==\"\"){e+=`\\n${r}`}l.pop();return`[${e}]`}let s=Object.keys(p);const y=s.length;if(y===0){return\"{}\"}if(u<l.length+1){return'\"[Object]\"'}let d=\"\";let h=\"\";if(a!==\"\"){g+=a;t=`,\\n${g}`;d=\" \"}const $=Math.min(y,o);if(i&&!isTypedArrayWithEntries(p)){s=sort(s,f)}l.push(p);for(let n=0;n<$;n++){const r=s[n];const i=stringifyFnReplacer(r,p,l,c,a,g);if(i!==undefined){e+=`${h}${strEscape(r)}:${d}${i}`;h=t}}if(y>o){const n=y-o;e+=`${h}\"...\":${d}\"${getItemCount(n)} not stringified\"`;h=t}if(a!==\"\"&&h.length>1){e=`\\n${g}${e}\\n${r}`}l.pop();return`{${e}}`}case\"number\":return isFinite(p)?String(p):t?t(p):\"null\";case\"boolean\":return p===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(p)}default:return t?t(p):undefined}}function stringifyArrayReplacer(e,i,f,s,l,c){if(typeof i===\"object\"&&i!==null&&typeof i.toJSON===\"function\"){i=i.toJSON(e)}switch(typeof i){case\"string\":return strEscape(i);case\"object\":{if(i===null){return\"null\"}if(f.indexOf(i)!==-1){return n}const e=c;let t=\"\";let r=\",\";if(Array.isArray(i)){if(i.length===0){return\"[]\"}if(u<f.length+1){return'\"[Array]\"'}f.push(i);if(l!==\"\"){c+=l;t+=`\\n${c}`;r=`,\\n${c}`}const n=Math.min(i.length,o);let a=0;for(;a<n-1;a++){const e=stringifyArrayReplacer(String(a),i[a],f,s,l,c);t+=e!==undefined?e:\"null\";t+=r}const g=stringifyArrayReplacer(String(a),i[a],f,s,l,c);t+=g!==undefined?g:\"null\";if(i.length-1>o){const e=i.length-o-1;t+=`${r}\"... ${getItemCount(e)} not stringified\"`}if(l!==\"\"){t+=`\\n${e}`}f.pop();return`[${t}]`}f.push(i);let a=\"\";if(l!==\"\"){c+=l;r=`,\\n${c}`;a=\" \"}let g=\"\";for(const e of s){const n=stringifyArrayReplacer(e,i[e],f,s,l,c);if(n!==undefined){t+=`${g}${strEscape(e)}:${a}${n}`;g=r}}if(l!==\"\"&&g.length>1){t=`\\n${c}${t}\\n${e}`}f.pop();return`{${t}}`}case\"number\":return isFinite(i)?String(i):t?t(i):\"null\";case\"boolean\":return i===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(i)}default:return t?t(i):undefined}}function stringifyIndent(e,s,l,c,a){switch(typeof s){case\"string\":return strEscape(s);case\"object\":{if(s===null){return\"null\"}if(typeof s.toJSON===\"function\"){s=s.toJSON(e);if(typeof s!==\"object\"){return stringifyIndent(e,s,l,c,a)}if(s===null){return\"null\"}}if(l.indexOf(s)!==-1){return n}const t=a;if(Array.isArray(s)){if(s.length===0){return\"[]\"}if(u<l.length+1){return'\"[Array]\"'}l.push(s);a+=c;let e=`\\n${a}`;const n=`,\\n${a}`;const r=Math.min(s.length,o);let i=0;for(;i<r-1;i++){const t=stringifyIndent(String(i),s[i],l,c,a);e+=t!==undefined?t:\"null\";e+=n}const f=stringifyIndent(String(i),s[i],l,c,a);e+=f!==undefined?f:\"null\";if(s.length-1>o){const t=s.length-o-1;e+=`${n}\"... ${getItemCount(t)} not stringified\"`}e+=`\\n${t}`;l.pop();return`[${e}]`}let r=Object.keys(s);const g=r.length;if(g===0){return\"{}\"}if(u<l.length+1){return'\"[Object]\"'}a+=c;const p=`,\\n${a}`;let y=\"\";let d=\"\";let h=Math.min(g,o);if(isTypedArrayWithEntries(s)){y+=stringifyTypedArray(s,p,o);r=r.slice(s.length);h-=s.length;d=p}if(i){r=sort(r,f)}l.push(s);for(let e=0;e<h;e++){const t=r[e];const n=stringifyIndent(t,s[t],l,c,a);if(n!==undefined){y+=`${d}${strEscape(t)}: ${n}`;d=p}}if(g>o){const e=g-o;y+=`${d}\"...\": \"${getItemCount(e)} not stringified\"`;d=p}if(d!==\"\"){y=`\\n${a}${y}\\n${t}`}l.pop();return`{${y}}`}case\"number\":return isFinite(s)?String(s):t?t(s):\"null\";case\"boolean\":return s===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(s)}default:return t?t(s):undefined}}function stringifySimple(e,s,l){switch(typeof s){case\"string\":return strEscape(s);case\"object\":{if(s===null){return\"null\"}if(typeof s.toJSON===\"function\"){s=s.toJSON(e);if(typeof s!==\"object\"){return stringifySimple(e,s,l)}if(s===null){return\"null\"}}if(l.indexOf(s)!==-1){return n}let t=\"\";const r=s.length!==undefined;if(r&&Array.isArray(s)){if(s.length===0){return\"[]\"}if(u<l.length+1){return'\"[Array]\"'}l.push(s);const e=Math.min(s.length,o);let n=0;for(;n<e-1;n++){const e=stringifySimple(String(n),s[n],l);t+=e!==undefined?e:\"null\";t+=\",\"}const r=stringifySimple(String(n),s[n],l);t+=r!==undefined?r:\"null\";if(s.length-1>o){const e=s.length-o-1;t+=`,\"... ${getItemCount(e)} not stringified\"`}l.pop();return`[${t}]`}let c=Object.keys(s);const a=c.length;if(a===0){return\"{}\"}if(u<l.length+1){return'\"[Object]\"'}let g=\"\";let p=Math.min(a,o);if(r&&isTypedArrayWithEntries(s)){t+=stringifyTypedArray(s,\",\",o);c=c.slice(s.length);p-=s.length;g=\",\"}if(i){c=sort(c,f)}l.push(s);for(let e=0;e<p;e++){const n=c[e];const r=stringifySimple(n,s[n],l);if(r!==undefined){t+=`${g}${strEscape(n)}:${r}`;g=\",\"}}if(a>o){const e=a-o;t+=`${g}\"...\":\"${getItemCount(e)} not stringified\"`}l.pop();return`{${t}}`}case\"number\":return isFinite(s)?String(s):t?t(s):\"null\";case\"boolean\":return s===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(s)}default:return t?t(s):undefined}}function stringify(e,t,n){if(arguments.length>1){let r=\"\";if(typeof n===\"number\"){r=\" \".repeat(Math.min(n,10))}else if(typeof n===\"string\"){r=n.slice(0,10)}if(t!=null){if(typeof t===\"function\"){return stringifyFnReplacer(\"\",{\"\":e},[],t,r,\"\")}if(Array.isArray(t)){return stringifyArrayReplacer(\"\",e,[],getUniqueReplacerSet(t),r,\"\")}}if(r.length!==0){return stringifyIndent(\"\",e,[],r,\"\")}}return stringifySimple(\"\",e,[])}return stringify}}};var t={};function __nccwpck_require__(n){var r=t[n];if(r!==undefined){return r.exports}var i=t[n]={exports:{}};var f=true;try{e[n](i,i.exports,__nccwpck_require__);f=false}finally{if(f)delete t[n]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var n=__nccwpck_require__(879);module.exports=n})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9zYWZlLXN0YWJsZS1zdHJpbmdpZnkvaW5kZXguanMiLCJtYXBwaW5ncyI6IjtBQUFBLFlBQVksYUFBYSxPQUFPLGtCQUFrQixNQUFNLGlCQUFpQixrQkFBa0Isb0JBQW9CLHNCQUFzQixjQUFjLFlBQVksY0FBYyxzQkFBc0IsWUFBWSxtREFBbUQsc0JBQXNCLDZCQUE2QixVQUFVLEVBQUUsR0FBRyx5QkFBeUIsbUJBQW1CLG9CQUFvQixpQkFBaUIsWUFBWSxXQUFXLEtBQUssYUFBYSxRQUFRLHVCQUF1QixZQUFZLElBQUksT0FBTyxTQUFTLDRIQUE0SCxvQ0FBb0MsMkNBQTJDLG9DQUFvQyxlQUFlLFdBQVcsdUJBQXVCLGFBQWEsRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLElBQUksS0FBSyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLG1DQUFtQyw4QkFBOEIsd0JBQXdCLHdCQUF3QixVQUFVLEVBQUUsR0FBRyxZQUFZLFNBQVMsNkJBQTZCLE9BQU8sV0FBVywrREFBK0QsMEdBQTBHLHFCQUFxQixtQ0FBbUMsTUFBTSw4QkFBOEIsa0JBQWtCLGdEQUFnRCxvR0FBb0csNEJBQTRCLCtCQUErQixNQUFNLGdCQUFnQixPQUFPLHlCQUF5Qiw0QkFBNEIsRUFBRSxzQ0FBc0MsNEJBQTRCLHVDQUF1QyxNQUFNLGdCQUFnQixPQUFPLHdCQUF3Qiw0QkFBNEIsRUFBRSxvQ0FBb0MseUJBQXlCLDRCQUE0QixFQUFFLGdDQUFnQyxRQUFRLDZCQUE2QixFQUFFLDJCQUEyQixnQ0FBZ0MseUJBQXlCLFVBQVUsZUFBZSxTQUFTLEdBQUcsT0FBTyxpQ0FBaUMsZ0JBQWdCLGtCQUFrQiw2Q0FBNkMsa0JBQWtCLFNBQVMsNEJBQTRCLHVCQUF1QixpQkFBaUIseUJBQXlCLHFFQUFxRSxNQUFNLFdBQVcsNkRBQTZELFNBQVMsRUFBRSxpQ0FBaUMsYUFBYSxHQUFHLHNCQUFzQixzQkFBc0IsR0FBRyxNQUFNLDJCQUEyQixNQUFNLHlCQUF5QixlQUFlLDJCQUEyQix1QkFBdUIsa0NBQWtDLHFDQUFxQyxrQ0FBa0MsMENBQTBDLG1EQUFtRCxxREFBcUQsMENBQTBDLFdBQVcsZ0VBQWdFLGNBQWMsZ0JBQWdCLGlCQUFpQixpQ0FBaUMsY0FBYyxhQUFhLGFBQWEsc0JBQXNCLFNBQVMsU0FBUyxVQUFVLFVBQVUscUJBQXFCLGlCQUFpQixXQUFXLGlCQUFpQixrQkFBa0IsVUFBVSxXQUFXLEtBQUssUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsNkJBQTZCLFFBQVEsS0FBSyxNQUFNLEtBQUssaURBQWlELDBCQUEwQixLQUFLLGlEQUFpRCwwQkFBMEIsaUJBQWlCLHFCQUFxQixNQUFNLEVBQUUsT0FBTyxpQkFBaUIsa0JBQWtCLFdBQVcsUUFBUSxFQUFFLEVBQUUsUUFBUSxVQUFVLEVBQUUsR0FBRyxxQkFBcUIsaUJBQWlCLFVBQVUsU0FBUyxFQUFFLGlCQUFpQixtQkFBbUIsU0FBUyxTQUFTLFdBQVcsS0FBSyxRQUFRLEVBQUUsRUFBRSxNQUFNLHNCQUFzQixtQ0FBbUMsWUFBWSxVQUFVLFlBQVksSUFBSSxLQUFLLGFBQWEseUNBQXlDLGtCQUFrQixNQUFNLEVBQUUsRUFBRSxhQUFhLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLFFBQVEsWUFBWSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsaUJBQWlCLGtCQUFrQixJQUFJLHVCQUF1QixPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLFFBQVEsUUFBUSxFQUFFLEdBQUcsRUFBRSx3REFBd0QsNkNBQTZDLGlDQUFpQyxtQkFBbUIsaUJBQWlCLGlDQUFpQyw2Q0FBNkMsZ0VBQWdFLGNBQWMsaUJBQWlCLGlDQUFpQyxjQUFjLGFBQWEsYUFBYSxzQkFBc0IsU0FBUyxVQUFVLFNBQVMsVUFBVSxxQkFBcUIsaUJBQWlCLFdBQVcsaUJBQWlCLGtCQUFrQixVQUFVLFdBQVcsS0FBSyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSw2QkFBNkIsUUFBUSxLQUFLLE1BQU0sS0FBSyx1REFBdUQsMEJBQTBCLEtBQUssdURBQXVELDBCQUEwQixpQkFBaUIscUJBQXFCLE1BQU0sRUFBRSxPQUFPLGlCQUFpQixrQkFBa0IsV0FBVyxRQUFRLEVBQUUsRUFBRSxRQUFRLFVBQVUsRUFBRSxHQUFHLFVBQVUsU0FBUyxXQUFXLEtBQUssUUFBUSxFQUFFLEVBQUUsTUFBTSxTQUFTLGtCQUFrQiwrQ0FBK0Msa0JBQWtCLE1BQU0sRUFBRSxFQUFFLGFBQWEsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssdUJBQXVCLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxRQUFRLEVBQUUsR0FBRyxFQUFFLHdEQUF3RCw2Q0FBNkMsaUNBQWlDLG1CQUFtQixpQkFBaUIsaUNBQWlDLG9DQUFvQyxpQkFBaUIsaUNBQWlDLGNBQWMsYUFBYSxhQUFhLGlDQUFpQyxjQUFjLHdCQUF3QixrQ0FBa0MsYUFBYSxjQUFjLHNCQUFzQixTQUFTLFVBQVUscUJBQXFCLGlCQUFpQixXQUFXLGlCQUFpQixrQkFBa0IsVUFBVSxLQUFLLFdBQVcsRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLDZCQUE2QixRQUFRLEtBQUssTUFBTSxLQUFLLDhDQUE4QywwQkFBMEIsS0FBSyw4Q0FBOEMsMEJBQTBCLGlCQUFpQixxQkFBcUIsTUFBTSxFQUFFLE9BQU8saUJBQWlCLGtCQUFrQixRQUFRLEVBQUUsRUFBRSxRQUFRLFVBQVUsRUFBRSxHQUFHLHFCQUFxQixpQkFBaUIsVUFBVSxTQUFTLEVBQUUsaUJBQWlCLG1CQUFtQixLQUFLLGNBQWMsRUFBRSxFQUFFLFNBQVMsU0FBUyxvQkFBb0IsK0JBQStCLDhCQUE4QixvQkFBb0IsWUFBWSxJQUFJLE1BQU0sWUFBWSxVQUFVLFlBQVksSUFBSSxLQUFLLGFBQWEsc0NBQXNDLGtCQUFrQixNQUFNLEVBQUUsRUFBRSxhQUFhLElBQUksRUFBRSxFQUFFLEtBQUssUUFBUSxZQUFZLE1BQU0sRUFBRSxVQUFVLGlCQUFpQixrQkFBa0IsSUFBSSxXQUFXLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxRQUFRLEVBQUUsR0FBRyxFQUFFLHdEQUF3RCw2Q0FBNkMsaUNBQWlDLG1CQUFtQixpQkFBaUIsaUNBQWlDLGdDQUFnQyxpQkFBaUIsaUNBQWlDLGNBQWMsYUFBYSxhQUFhLGlDQUFpQyxjQUFjLHdCQUF3Qiw4QkFBOEIsYUFBYSxjQUFjLHNCQUFzQixTQUFTLFNBQVMsNkJBQTZCLHdCQUF3QixpQkFBaUIsV0FBVyxpQkFBaUIsa0JBQWtCLFVBQVUsNkJBQTZCLFFBQVEsS0FBSyxNQUFNLEtBQUssMENBQTBDLDBCQUEwQixPQUFPLDBDQUEwQywwQkFBMEIsaUJBQWlCLHFCQUFxQixZQUFZLGlCQUFpQixrQkFBa0IsUUFBUSxVQUFVLEVBQUUsR0FBRyxxQkFBcUIsaUJBQWlCLFVBQVUsU0FBUyxFQUFFLGlCQUFpQixtQkFBbUIsU0FBUyxvQkFBb0Isa0NBQWtDLGdDQUFnQyxvQkFBb0IsWUFBWSxNQUFNLE1BQU0sWUFBWSxVQUFVLFlBQVksSUFBSSxLQUFLLGFBQWEsa0NBQWtDLGtCQUFrQixNQUFNLEVBQUUsRUFBRSxhQUFhLEdBQUcsRUFBRSxFQUFFLE9BQU8sUUFBUSxZQUFZLE1BQU0sRUFBRSxTQUFTLGlCQUFpQixrQkFBa0IsUUFBUSxRQUFRLEVBQUUsR0FBRyxFQUFFLHdEQUF3RCw2Q0FBNkMsaUNBQWlDLG1CQUFtQixpQkFBaUIsaUNBQWlDLDBCQUEwQix1QkFBdUIsU0FBUyx3QkFBd0IsNkJBQTZCLDZCQUE2QixnQkFBZ0IsWUFBWSwwQkFBMEIsK0JBQStCLEtBQUssWUFBWSxxQkFBcUIscUVBQXFFLGlCQUFpQixzQ0FBc0MsZ0NBQWdDLG9CQUFvQixTQUFTLGdDQUFnQyxXQUFXLGtCQUFrQixpQkFBaUIsWUFBWSxZQUFZLFdBQVcsSUFBSSxzQ0FBc0MsUUFBUSxRQUFRLGlCQUFpQixpQkFBaUIsbUVBQW1FLFNBQVMsS0FBSywrQkFBK0IsaUJBQWlCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNC43X0BiYWJlbCtjb3JlQDcuMjguM19Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHBsYXl3cmlnaHQrdGVzdEAxLjU1LjBfcmVhY3QtZF80N2ZmMzgxM2Q3OTA1NjZkZjI1NGEyMTYzNTUwYzJkNS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3NhZmUtc3RhYmxlLXN0cmluZ2lmeS9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgZT17ODc5OmZ1bmN0aW9uKGUsdCl7Y29uc3R7aGFzT3duUHJvcGVydHk6bn09T2JqZWN0LnByb3RvdHlwZTtjb25zdCByPWNvbmZpZ3VyZSgpO3IuY29uZmlndXJlPWNvbmZpZ3VyZTtyLnN0cmluZ2lmeT1yO3IuZGVmYXVsdD1yO3Quc3RyaW5naWZ5PXI7dC5jb25maWd1cmU9Y29uZmlndXJlO2UuZXhwb3J0cz1yO2NvbnN0IGk9L1tcXHUwMDAwLVxcdTAwMWZcXHUwMDIyXFx1MDA1Y1xcdWQ4MDAtXFx1ZGZmZl0vO2Z1bmN0aW9uIHN0ckVzY2FwZShlKXtpZihlLmxlbmd0aDw1ZTMmJiFpLnRlc3QoZSkpe3JldHVybmBcIiR7ZX1cImB9cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWZ1bmN0aW9uIHNvcnQoZSx0KXtpZihlLmxlbmd0aD4yMDB8fHQpe3JldHVybiBlLnNvcnQodCl9Zm9yKGxldCB0PTE7dDxlLmxlbmd0aDt0Kyspe2NvbnN0IG49ZVt0XTtsZXQgcj10O3doaWxlKHIhPT0wJiZlW3ItMV0+bil7ZVtyXT1lW3ItMV07ci0tfWVbcl09bn1yZXR1cm4gZX1jb25zdCBmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LmdldFByb3RvdHlwZU9mKE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgSW50OEFycmF5KSksU3ltYm9sLnRvU3RyaW5nVGFnKS5nZXQ7ZnVuY3Rpb24gaXNUeXBlZEFycmF5V2l0aEVudHJpZXMoZSl7cmV0dXJuIGYuY2FsbChlKSE9PXVuZGVmaW5lZCYmZS5sZW5ndGghPT0wfWZ1bmN0aW9uIHN0cmluZ2lmeVR5cGVkQXJyYXkoZSx0LG4pe2lmKGUubGVuZ3RoPG4pe249ZS5sZW5ndGh9Y29uc3Qgcj10PT09XCIsXCI/XCJcIjpcIiBcIjtsZXQgaT1gXCIwXCI6JHtyfSR7ZVswXX1gO2ZvcihsZXQgZj0xO2Y8bjtmKyspe2krPWAke3R9XCIke2Z9XCI6JHtyfSR7ZVtmXX1gfXJldHVybiBpfWZ1bmN0aW9uIGdldENpcmN1bGFyVmFsdWVPcHRpb24oZSl7aWYobi5jYWxsKGUsXCJjaXJjdWxhclZhbHVlXCIpKXtjb25zdCB0PWUuY2lyY3VsYXJWYWx1ZTtpZih0eXBlb2YgdD09PVwic3RyaW5nXCIpe3JldHVybmBcIiR7dH1cImB9aWYodD09bnVsbCl7cmV0dXJuIHR9aWYodD09PUVycm9yfHx0PT09VHlwZUVycm9yKXtyZXR1cm57dG9TdHJpbmcoKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTlwiKX19fXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImNpcmN1bGFyVmFsdWVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIHRoZSB2YWx1ZSBudWxsIG9yIHVuZGVmaW5lZCcpfXJldHVybidcIltDaXJjdWxhcl1cIid9ZnVuY3Rpb24gZ2V0RGV0ZXJtaW5pc3RpY09wdGlvbihlKXtsZXQgdDtpZihuLmNhbGwoZSxcImRldGVybWluaXN0aWNcIikpe3Q9ZS5kZXRlcm1pbmlzdGljO2lmKHR5cGVvZiB0IT09XCJib29sZWFuXCImJnR5cGVvZiB0IT09XCJmdW5jdGlvblwiKXt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJkZXRlcm1pbmlzdGljXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4gb3IgY29tcGFyYXRvciBmdW5jdGlvbicpfX1yZXR1cm4gdD09PXVuZGVmaW5lZD90cnVlOnR9ZnVuY3Rpb24gZ2V0Qm9vbGVhbk9wdGlvbihlLHQpe2xldCByO2lmKG4uY2FsbChlLHQpKXtyPWVbdF07aWYodHlwZW9mIHIhPT1cImJvb2xlYW5cIil7dGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIFwiJHt0fVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBib29sZWFuYCl9fXJldHVybiByPT09dW5kZWZpbmVkP3RydWU6cn1mdW5jdGlvbiBnZXRQb3NpdGl2ZUludGVnZXJPcHRpb24oZSx0KXtsZXQgcjtpZihuLmNhbGwoZSx0KSl7cj1lW3RdO2lmKHR5cGVvZiByIT09XCJudW1iZXJcIil7dGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIFwiJHt0fVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXJgKX1pZighTnVtYmVyLmlzSW50ZWdlcihyKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIFwiJHt0fVwiIGFyZ3VtZW50IG11c3QgYmUgYW4gaW50ZWdlcmApfWlmKHI8MSl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoYFRoZSBcIiR7dH1cIiBhcmd1bWVudCBtdXN0IGJlID49IDFgKX19cmV0dXJuIHI9PT11bmRlZmluZWQ/SW5maW5pdHk6cn1mdW5jdGlvbiBnZXRJdGVtQ291bnQoZSl7aWYoZT09PTEpe3JldHVyblwiMSBpdGVtXCJ9cmV0dXJuYCR7ZX0gaXRlbXNgfWZ1bmN0aW9uIGdldFVuaXF1ZVJlcGxhY2VyU2V0KGUpe2NvbnN0IHQ9bmV3IFNldDtmb3IoY29uc3QgbiBvZiBlKXtpZih0eXBlb2Ygbj09PVwic3RyaW5nXCJ8fHR5cGVvZiBuPT09XCJudW1iZXJcIil7dC5hZGQoU3RyaW5nKG4pKX19cmV0dXJuIHR9ZnVuY3Rpb24gZ2V0U3RyaWN0T3B0aW9uKGUpe2lmKG4uY2FsbChlLFwic3RyaWN0XCIpKXtjb25zdCB0PWUuc3RyaWN0O2lmKHR5cGVvZiB0IT09XCJib29sZWFuXCIpe3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInN0cmljdFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBib29sZWFuJyl9aWYodCl7cmV0dXJuIGU9PntsZXQgdD1gT2JqZWN0IGNhbiBub3Qgc2FmZWx5IGJlIHN0cmluZ2lmaWVkLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGV9YDtpZih0eXBlb2YgZSE9PVwiZnVuY3Rpb25cIil0Kz1gICgke2UudG9TdHJpbmcoKX0pYDt0aHJvdyBuZXcgRXJyb3IodCl9fX19ZnVuY3Rpb24gY29uZmlndXJlKGUpe2U9ey4uLmV9O2NvbnN0IHQ9Z2V0U3RyaWN0T3B0aW9uKGUpO2lmKHQpe2lmKGUuYmlnaW50PT09dW5kZWZpbmVkKXtlLmJpZ2ludD1mYWxzZX1pZighKFwiY2lyY3VsYXJWYWx1ZVwiaW4gZSkpe2UuY2lyY3VsYXJWYWx1ZT1FcnJvcn19Y29uc3Qgbj1nZXRDaXJjdWxhclZhbHVlT3B0aW9uKGUpO2NvbnN0IHI9Z2V0Qm9vbGVhbk9wdGlvbihlLFwiYmlnaW50XCIpO2NvbnN0IGk9Z2V0RGV0ZXJtaW5pc3RpY09wdGlvbihlKTtjb25zdCBmPXR5cGVvZiBpPT09XCJmdW5jdGlvblwiP2k6dW5kZWZpbmVkO2NvbnN0IHU9Z2V0UG9zaXRpdmVJbnRlZ2VyT3B0aW9uKGUsXCJtYXhpbXVtRGVwdGhcIik7Y29uc3Qgbz1nZXRQb3NpdGl2ZUludGVnZXJPcHRpb24oZSxcIm1heGltdW1CcmVhZHRoXCIpO2Z1bmN0aW9uIHN0cmluZ2lmeUZuUmVwbGFjZXIoZSxzLGwsYyxhLGcpe2xldCBwPXNbZV07aWYodHlwZW9mIHA9PT1cIm9iamVjdFwiJiZwIT09bnVsbCYmdHlwZW9mIHAudG9KU09OPT09XCJmdW5jdGlvblwiKXtwPXAudG9KU09OKGUpfXA9Yy5jYWxsKHMsZSxwKTtzd2l0Y2godHlwZW9mIHApe2Nhc2VcInN0cmluZ1wiOnJldHVybiBzdHJFc2NhcGUocCk7Y2FzZVwib2JqZWN0XCI6e2lmKHA9PT1udWxsKXtyZXR1cm5cIm51bGxcIn1pZihsLmluZGV4T2YocCkhPT0tMSl7cmV0dXJuIG59bGV0IGU9XCJcIjtsZXQgdD1cIixcIjtjb25zdCByPWc7aWYoQXJyYXkuaXNBcnJheShwKSl7aWYocC5sZW5ndGg9PT0wKXtyZXR1cm5cIltdXCJ9aWYodTxsLmxlbmd0aCsxKXtyZXR1cm4nXCJbQXJyYXldXCInfWwucHVzaChwKTtpZihhIT09XCJcIil7Zys9YTtlKz1gXFxuJHtnfWA7dD1gLFxcbiR7Z31gfWNvbnN0IG49TWF0aC5taW4ocC5sZW5ndGgsbyk7bGV0IGk9MDtmb3IoO2k8bi0xO2krKyl7Y29uc3Qgbj1zdHJpbmdpZnlGblJlcGxhY2VyKFN0cmluZyhpKSxwLGwsYyxhLGcpO2UrPW4hPT11bmRlZmluZWQ/bjpcIm51bGxcIjtlKz10fWNvbnN0IGY9c3RyaW5naWZ5Rm5SZXBsYWNlcihTdHJpbmcoaSkscCxsLGMsYSxnKTtlKz1mIT09dW5kZWZpbmVkP2Y6XCJudWxsXCI7aWYocC5sZW5ndGgtMT5vKXtjb25zdCBuPXAubGVuZ3RoLW8tMTtlKz1gJHt0fVwiLi4uICR7Z2V0SXRlbUNvdW50KG4pfSBub3Qgc3RyaW5naWZpZWRcImB9aWYoYSE9PVwiXCIpe2UrPWBcXG4ke3J9YH1sLnBvcCgpO3JldHVybmBbJHtlfV1gfWxldCBzPU9iamVjdC5rZXlzKHApO2NvbnN0IHk9cy5sZW5ndGg7aWYoeT09PTApe3JldHVyblwie31cIn1pZih1PGwubGVuZ3RoKzEpe3JldHVybidcIltPYmplY3RdXCInfWxldCBkPVwiXCI7bGV0IGg9XCJcIjtpZihhIT09XCJcIil7Zys9YTt0PWAsXFxuJHtnfWA7ZD1cIiBcIn1jb25zdCAkPU1hdGgubWluKHksbyk7aWYoaSYmIWlzVHlwZWRBcnJheVdpdGhFbnRyaWVzKHApKXtzPXNvcnQocyxmKX1sLnB1c2gocCk7Zm9yKGxldCBuPTA7bjwkO24rKyl7Y29uc3Qgcj1zW25dO2NvbnN0IGk9c3RyaW5naWZ5Rm5SZXBsYWNlcihyLHAsbCxjLGEsZyk7aWYoaSE9PXVuZGVmaW5lZCl7ZSs9YCR7aH0ke3N0ckVzY2FwZShyKX06JHtkfSR7aX1gO2g9dH19aWYoeT5vKXtjb25zdCBuPXktbztlKz1gJHtofVwiLi4uXCI6JHtkfVwiJHtnZXRJdGVtQ291bnQobil9IG5vdCBzdHJpbmdpZmllZFwiYDtoPXR9aWYoYSE9PVwiXCImJmgubGVuZ3RoPjEpe2U9YFxcbiR7Z30ke2V9XFxuJHtyfWB9bC5wb3AoKTtyZXR1cm5geyR7ZX19YH1jYXNlXCJudW1iZXJcIjpyZXR1cm4gaXNGaW5pdGUocCk/U3RyaW5nKHApOnQ/dChwKTpcIm51bGxcIjtjYXNlXCJib29sZWFuXCI6cmV0dXJuIHA9PT10cnVlP1widHJ1ZVwiOlwiZmFsc2VcIjtjYXNlXCJ1bmRlZmluZWRcIjpyZXR1cm4gdW5kZWZpbmVkO2Nhc2VcImJpZ2ludFwiOmlmKHIpe3JldHVybiBTdHJpbmcocCl9ZGVmYXVsdDpyZXR1cm4gdD90KHApOnVuZGVmaW5lZH19ZnVuY3Rpb24gc3RyaW5naWZ5QXJyYXlSZXBsYWNlcihlLGksZixzLGwsYyl7aWYodHlwZW9mIGk9PT1cIm9iamVjdFwiJiZpIT09bnVsbCYmdHlwZW9mIGkudG9KU09OPT09XCJmdW5jdGlvblwiKXtpPWkudG9KU09OKGUpfXN3aXRjaCh0eXBlb2YgaSl7Y2FzZVwic3RyaW5nXCI6cmV0dXJuIHN0ckVzY2FwZShpKTtjYXNlXCJvYmplY3RcIjp7aWYoaT09PW51bGwpe3JldHVyblwibnVsbFwifWlmKGYuaW5kZXhPZihpKSE9PS0xKXtyZXR1cm4gbn1jb25zdCBlPWM7bGV0IHQ9XCJcIjtsZXQgcj1cIixcIjtpZihBcnJheS5pc0FycmF5KGkpKXtpZihpLmxlbmd0aD09PTApe3JldHVyblwiW11cIn1pZih1PGYubGVuZ3RoKzEpe3JldHVybidcIltBcnJheV1cIid9Zi5wdXNoKGkpO2lmKGwhPT1cIlwiKXtjKz1sO3QrPWBcXG4ke2N9YDtyPWAsXFxuJHtjfWB9Y29uc3Qgbj1NYXRoLm1pbihpLmxlbmd0aCxvKTtsZXQgYT0wO2Zvcig7YTxuLTE7YSsrKXtjb25zdCBlPXN0cmluZ2lmeUFycmF5UmVwbGFjZXIoU3RyaW5nKGEpLGlbYV0sZixzLGwsYyk7dCs9ZSE9PXVuZGVmaW5lZD9lOlwibnVsbFwiO3QrPXJ9Y29uc3QgZz1zdHJpbmdpZnlBcnJheVJlcGxhY2VyKFN0cmluZyhhKSxpW2FdLGYscyxsLGMpO3QrPWchPT11bmRlZmluZWQ/ZzpcIm51bGxcIjtpZihpLmxlbmd0aC0xPm8pe2NvbnN0IGU9aS5sZW5ndGgtby0xO3QrPWAke3J9XCIuLi4gJHtnZXRJdGVtQ291bnQoZSl9IG5vdCBzdHJpbmdpZmllZFwiYH1pZihsIT09XCJcIil7dCs9YFxcbiR7ZX1gfWYucG9wKCk7cmV0dXJuYFske3R9XWB9Zi5wdXNoKGkpO2xldCBhPVwiXCI7aWYobCE9PVwiXCIpe2MrPWw7cj1gLFxcbiR7Y31gO2E9XCIgXCJ9bGV0IGc9XCJcIjtmb3IoY29uc3QgZSBvZiBzKXtjb25zdCBuPXN0cmluZ2lmeUFycmF5UmVwbGFjZXIoZSxpW2VdLGYscyxsLGMpO2lmKG4hPT11bmRlZmluZWQpe3QrPWAke2d9JHtzdHJFc2NhcGUoZSl9OiR7YX0ke259YDtnPXJ9fWlmKGwhPT1cIlwiJiZnLmxlbmd0aD4xKXt0PWBcXG4ke2N9JHt0fVxcbiR7ZX1gfWYucG9wKCk7cmV0dXJuYHske3R9fWB9Y2FzZVwibnVtYmVyXCI6cmV0dXJuIGlzRmluaXRlKGkpP1N0cmluZyhpKTp0P3QoaSk6XCJudWxsXCI7Y2FzZVwiYm9vbGVhblwiOnJldHVybiBpPT09dHJ1ZT9cInRydWVcIjpcImZhbHNlXCI7Y2FzZVwidW5kZWZpbmVkXCI6cmV0dXJuIHVuZGVmaW5lZDtjYXNlXCJiaWdpbnRcIjppZihyKXtyZXR1cm4gU3RyaW5nKGkpfWRlZmF1bHQ6cmV0dXJuIHQ/dChpKTp1bmRlZmluZWR9fWZ1bmN0aW9uIHN0cmluZ2lmeUluZGVudChlLHMsbCxjLGEpe3N3aXRjaCh0eXBlb2Ygcyl7Y2FzZVwic3RyaW5nXCI6cmV0dXJuIHN0ckVzY2FwZShzKTtjYXNlXCJvYmplY3RcIjp7aWYocz09PW51bGwpe3JldHVyblwibnVsbFwifWlmKHR5cGVvZiBzLnRvSlNPTj09PVwiZnVuY3Rpb25cIil7cz1zLnRvSlNPTihlKTtpZih0eXBlb2YgcyE9PVwib2JqZWN0XCIpe3JldHVybiBzdHJpbmdpZnlJbmRlbnQoZSxzLGwsYyxhKX1pZihzPT09bnVsbCl7cmV0dXJuXCJudWxsXCJ9fWlmKGwuaW5kZXhPZihzKSE9PS0xKXtyZXR1cm4gbn1jb25zdCB0PWE7aWYoQXJyYXkuaXNBcnJheShzKSl7aWYocy5sZW5ndGg9PT0wKXtyZXR1cm5cIltdXCJ9aWYodTxsLmxlbmd0aCsxKXtyZXR1cm4nXCJbQXJyYXldXCInfWwucHVzaChzKTthKz1jO2xldCBlPWBcXG4ke2F9YDtjb25zdCBuPWAsXFxuJHthfWA7Y29uc3Qgcj1NYXRoLm1pbihzLmxlbmd0aCxvKTtsZXQgaT0wO2Zvcig7aTxyLTE7aSsrKXtjb25zdCB0PXN0cmluZ2lmeUluZGVudChTdHJpbmcoaSksc1tpXSxsLGMsYSk7ZSs9dCE9PXVuZGVmaW5lZD90OlwibnVsbFwiO2UrPW59Y29uc3QgZj1zdHJpbmdpZnlJbmRlbnQoU3RyaW5nKGkpLHNbaV0sbCxjLGEpO2UrPWYhPT11bmRlZmluZWQ/ZjpcIm51bGxcIjtpZihzLmxlbmd0aC0xPm8pe2NvbnN0IHQ9cy5sZW5ndGgtby0xO2UrPWAke259XCIuLi4gJHtnZXRJdGVtQ291bnQodCl9IG5vdCBzdHJpbmdpZmllZFwiYH1lKz1gXFxuJHt0fWA7bC5wb3AoKTtyZXR1cm5gWyR7ZX1dYH1sZXQgcj1PYmplY3Qua2V5cyhzKTtjb25zdCBnPXIubGVuZ3RoO2lmKGc9PT0wKXtyZXR1cm5cInt9XCJ9aWYodTxsLmxlbmd0aCsxKXtyZXR1cm4nXCJbT2JqZWN0XVwiJ31hKz1jO2NvbnN0IHA9YCxcXG4ke2F9YDtsZXQgeT1cIlwiO2xldCBkPVwiXCI7bGV0IGg9TWF0aC5taW4oZyxvKTtpZihpc1R5cGVkQXJyYXlXaXRoRW50cmllcyhzKSl7eSs9c3RyaW5naWZ5VHlwZWRBcnJheShzLHAsbyk7cj1yLnNsaWNlKHMubGVuZ3RoKTtoLT1zLmxlbmd0aDtkPXB9aWYoaSl7cj1zb3J0KHIsZil9bC5wdXNoKHMpO2ZvcihsZXQgZT0wO2U8aDtlKyspe2NvbnN0IHQ9cltlXTtjb25zdCBuPXN0cmluZ2lmeUluZGVudCh0LHNbdF0sbCxjLGEpO2lmKG4hPT11bmRlZmluZWQpe3krPWAke2R9JHtzdHJFc2NhcGUodCl9OiAke259YDtkPXB9fWlmKGc+byl7Y29uc3QgZT1nLW87eSs9YCR7ZH1cIi4uLlwiOiBcIiR7Z2V0SXRlbUNvdW50KGUpfSBub3Qgc3RyaW5naWZpZWRcImA7ZD1wfWlmKGQhPT1cIlwiKXt5PWBcXG4ke2F9JHt5fVxcbiR7dH1gfWwucG9wKCk7cmV0dXJuYHske3l9fWB9Y2FzZVwibnVtYmVyXCI6cmV0dXJuIGlzRmluaXRlKHMpP1N0cmluZyhzKTp0P3Qocyk6XCJudWxsXCI7Y2FzZVwiYm9vbGVhblwiOnJldHVybiBzPT09dHJ1ZT9cInRydWVcIjpcImZhbHNlXCI7Y2FzZVwidW5kZWZpbmVkXCI6cmV0dXJuIHVuZGVmaW5lZDtjYXNlXCJiaWdpbnRcIjppZihyKXtyZXR1cm4gU3RyaW5nKHMpfWRlZmF1bHQ6cmV0dXJuIHQ/dChzKTp1bmRlZmluZWR9fWZ1bmN0aW9uIHN0cmluZ2lmeVNpbXBsZShlLHMsbCl7c3dpdGNoKHR5cGVvZiBzKXtjYXNlXCJzdHJpbmdcIjpyZXR1cm4gc3RyRXNjYXBlKHMpO2Nhc2VcIm9iamVjdFwiOntpZihzPT09bnVsbCl7cmV0dXJuXCJudWxsXCJ9aWYodHlwZW9mIHMudG9KU09OPT09XCJmdW5jdGlvblwiKXtzPXMudG9KU09OKGUpO2lmKHR5cGVvZiBzIT09XCJvYmplY3RcIil7cmV0dXJuIHN0cmluZ2lmeVNpbXBsZShlLHMsbCl9aWYocz09PW51bGwpe3JldHVyblwibnVsbFwifX1pZihsLmluZGV4T2YocykhPT0tMSl7cmV0dXJuIG59bGV0IHQ9XCJcIjtjb25zdCByPXMubGVuZ3RoIT09dW5kZWZpbmVkO2lmKHImJkFycmF5LmlzQXJyYXkocykpe2lmKHMubGVuZ3RoPT09MCl7cmV0dXJuXCJbXVwifWlmKHU8bC5sZW5ndGgrMSl7cmV0dXJuJ1wiW0FycmF5XVwiJ31sLnB1c2gocyk7Y29uc3QgZT1NYXRoLm1pbihzLmxlbmd0aCxvKTtsZXQgbj0wO2Zvcig7bjxlLTE7bisrKXtjb25zdCBlPXN0cmluZ2lmeVNpbXBsZShTdHJpbmcobiksc1tuXSxsKTt0Kz1lIT09dW5kZWZpbmVkP2U6XCJudWxsXCI7dCs9XCIsXCJ9Y29uc3Qgcj1zdHJpbmdpZnlTaW1wbGUoU3RyaW5nKG4pLHNbbl0sbCk7dCs9ciE9PXVuZGVmaW5lZD9yOlwibnVsbFwiO2lmKHMubGVuZ3RoLTE+byl7Y29uc3QgZT1zLmxlbmd0aC1vLTE7dCs9YCxcIi4uLiAke2dldEl0ZW1Db3VudChlKX0gbm90IHN0cmluZ2lmaWVkXCJgfWwucG9wKCk7cmV0dXJuYFske3R9XWB9bGV0IGM9T2JqZWN0LmtleXMocyk7Y29uc3QgYT1jLmxlbmd0aDtpZihhPT09MCl7cmV0dXJuXCJ7fVwifWlmKHU8bC5sZW5ndGgrMSl7cmV0dXJuJ1wiW09iamVjdF1cIid9bGV0IGc9XCJcIjtsZXQgcD1NYXRoLm1pbihhLG8pO2lmKHImJmlzVHlwZWRBcnJheVdpdGhFbnRyaWVzKHMpKXt0Kz1zdHJpbmdpZnlUeXBlZEFycmF5KHMsXCIsXCIsbyk7Yz1jLnNsaWNlKHMubGVuZ3RoKTtwLT1zLmxlbmd0aDtnPVwiLFwifWlmKGkpe2M9c29ydChjLGYpfWwucHVzaChzKTtmb3IobGV0IGU9MDtlPHA7ZSsrKXtjb25zdCBuPWNbZV07Y29uc3Qgcj1zdHJpbmdpZnlTaW1wbGUobixzW25dLGwpO2lmKHIhPT11bmRlZmluZWQpe3QrPWAke2d9JHtzdHJFc2NhcGUobil9OiR7cn1gO2c9XCIsXCJ9fWlmKGE+byl7Y29uc3QgZT1hLW87dCs9YCR7Z31cIi4uLlwiOlwiJHtnZXRJdGVtQ291bnQoZSl9IG5vdCBzdHJpbmdpZmllZFwiYH1sLnBvcCgpO3JldHVybmB7JHt0fX1gfWNhc2VcIm51bWJlclwiOnJldHVybiBpc0Zpbml0ZShzKT9TdHJpbmcocyk6dD90KHMpOlwibnVsbFwiO2Nhc2VcImJvb2xlYW5cIjpyZXR1cm4gcz09PXRydWU/XCJ0cnVlXCI6XCJmYWxzZVwiO2Nhc2VcInVuZGVmaW5lZFwiOnJldHVybiB1bmRlZmluZWQ7Y2FzZVwiYmlnaW50XCI6aWYocil7cmV0dXJuIFN0cmluZyhzKX1kZWZhdWx0OnJldHVybiB0P3Qocyk6dW5kZWZpbmVkfX1mdW5jdGlvbiBzdHJpbmdpZnkoZSx0LG4pe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7bGV0IHI9XCJcIjtpZih0eXBlb2Ygbj09PVwibnVtYmVyXCIpe3I9XCIgXCIucmVwZWF0KE1hdGgubWluKG4sMTApKX1lbHNlIGlmKHR5cGVvZiBuPT09XCJzdHJpbmdcIil7cj1uLnNsaWNlKDAsMTApfWlmKHQhPW51bGwpe2lmKHR5cGVvZiB0PT09XCJmdW5jdGlvblwiKXtyZXR1cm4gc3RyaW5naWZ5Rm5SZXBsYWNlcihcIlwiLHtcIlwiOmV9LFtdLHQscixcIlwiKX1pZihBcnJheS5pc0FycmF5KHQpKXtyZXR1cm4gc3RyaW5naWZ5QXJyYXlSZXBsYWNlcihcIlwiLGUsW10sZ2V0VW5pcXVlUmVwbGFjZXJTZXQodCkscixcIlwiKX19aWYoci5sZW5ndGghPT0wKXtyZXR1cm4gc3RyaW5naWZ5SW5kZW50KFwiXCIsZSxbXSxyLFwiXCIpfX1yZXR1cm4gc3RyaW5naWZ5U2ltcGxlKFwiXCIsZSxbXSl9cmV0dXJuIHN0cmluZ2lmeX19fTt2YXIgdD17fTtmdW5jdGlvbiBfX25jY3dwY2tfcmVxdWlyZV9fKG4pe3ZhciByPXRbbl07aWYociE9PXVuZGVmaW5lZCl7cmV0dXJuIHIuZXhwb3J0c312YXIgaT10W25dPXtleHBvcnRzOnt9fTt2YXIgZj10cnVlO3RyeXtlW25dKGksaS5leHBvcnRzLF9fbmNjd3Bja19yZXF1aXJlX18pO2Y9ZmFsc2V9ZmluYWxseXtpZihmKWRlbGV0ZSB0W25dfXJldHVybiBpLmV4cG9ydHN9aWYodHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18hPT1cInVuZGVmaW5lZFwiKV9fbmNjd3Bja19yZXF1aXJlX18uYWI9X19kaXJuYW1lK1wiL1wiO3ZhciBuPV9fbmNjd3Bja19yZXF1aXJlX18oODc5KTttb2R1bGUuZXhwb3J0cz1ufSkoKTsiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/safe-stable-stringify/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/scheduler/cjs/scheduler.development.js":
/*!****************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/scheduler/cjs/scheduler.development.js ***!
  \****************************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/**\n * @license React\n * scheduler.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n  (function () {\n    function performWorkUntilDeadline() {\n      needsPaint = !1;\n      if (isMessageLoopRunning) {\n        var currentTime = exports.unstable_now();\n        startTime = currentTime;\n        var hasMoreWork = !0;\n        try {\n          a: {\n            isHostCallbackScheduled = !1;\n            isHostTimeoutScheduled &&\n              ((isHostTimeoutScheduled = !1),\n              localClearTimeout(taskTimeoutID),\n              (taskTimeoutID = -1));\n            isPerformingWork = !0;\n            var previousPriorityLevel = currentPriorityLevel;\n            try {\n              b: {\n                advanceTimers(currentTime);\n                for (\n                  currentTask = peek(taskQueue);\n                  null !== currentTask &&\n                  !(\n                    currentTask.expirationTime > currentTime &&\n                    shouldYieldToHost()\n                  );\n\n                ) {\n                  var callback = currentTask.callback;\n                  if (\"function\" === typeof callback) {\n                    currentTask.callback = null;\n                    currentPriorityLevel = currentTask.priorityLevel;\n                    var continuationCallback = callback(\n                      currentTask.expirationTime <= currentTime\n                    );\n                    currentTime = exports.unstable_now();\n                    if (\"function\" === typeof continuationCallback) {\n                      currentTask.callback = continuationCallback;\n                      advanceTimers(currentTime);\n                      hasMoreWork = !0;\n                      break b;\n                    }\n                    currentTask === peek(taskQueue) && pop(taskQueue);\n                    advanceTimers(currentTime);\n                  } else pop(taskQueue);\n                  currentTask = peek(taskQueue);\n                }\n                if (null !== currentTask) hasMoreWork = !0;\n                else {\n                  var firstTimer = peek(timerQueue);\n                  null !== firstTimer &&\n                    requestHostTimeout(\n                      handleTimeout,\n                      firstTimer.startTime - currentTime\n                    );\n                  hasMoreWork = !1;\n                }\n              }\n              break a;\n            } finally {\n              (currentTask = null),\n                (currentPriorityLevel = previousPriorityLevel),\n                (isPerformingWork = !1);\n            }\n            hasMoreWork = void 0;\n          }\n        } finally {\n          hasMoreWork\n            ? schedulePerformWorkUntilDeadline()\n            : (isMessageLoopRunning = !1);\n        }\n      }\n    }\n    function push(heap, node) {\n      var index = heap.length;\n      heap.push(node);\n      a: for (; 0 < index; ) {\n        var parentIndex = (index - 1) >>> 1,\n          parent = heap[parentIndex];\n        if (0 < compare(parent, node))\n          (heap[parentIndex] = node),\n            (heap[index] = parent),\n            (index = parentIndex);\n        else break a;\n      }\n    }\n    function peek(heap) {\n      return 0 === heap.length ? null : heap[0];\n    }\n    function pop(heap) {\n      if (0 === heap.length) return null;\n      var first = heap[0],\n        last = heap.pop();\n      if (last !== first) {\n        heap[0] = last;\n        a: for (\n          var index = 0, length = heap.length, halfLength = length >>> 1;\n          index < halfLength;\n\n        ) {\n          var leftIndex = 2 * (index + 1) - 1,\n            left = heap[leftIndex],\n            rightIndex = leftIndex + 1,\n            right = heap[rightIndex];\n          if (0 > compare(left, last))\n            rightIndex < length && 0 > compare(right, left)\n              ? ((heap[index] = right),\n                (heap[rightIndex] = last),\n                (index = rightIndex))\n              : ((heap[index] = left),\n                (heap[leftIndex] = last),\n                (index = leftIndex));\n          else if (rightIndex < length && 0 > compare(right, last))\n            (heap[index] = right),\n              (heap[rightIndex] = last),\n              (index = rightIndex);\n          else break a;\n        }\n      }\n      return first;\n    }\n    function compare(a, b) {\n      var diff = a.sortIndex - b.sortIndex;\n      return 0 !== diff ? diff : a.id - b.id;\n    }\n    function advanceTimers(currentTime) {\n      for (var timer = peek(timerQueue); null !== timer; ) {\n        if (null === timer.callback) pop(timerQueue);\n        else if (timer.startTime <= currentTime)\n          pop(timerQueue),\n            (timer.sortIndex = timer.expirationTime),\n            push(taskQueue, timer);\n        else break;\n        timer = peek(timerQueue);\n      }\n    }\n    function handleTimeout(currentTime) {\n      isHostTimeoutScheduled = !1;\n      advanceTimers(currentTime);\n      if (!isHostCallbackScheduled)\n        if (null !== peek(taskQueue))\n          (isHostCallbackScheduled = !0),\n            isMessageLoopRunning ||\n              ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n        else {\n          var firstTimer = peek(timerQueue);\n          null !== firstTimer &&\n            requestHostTimeout(\n              handleTimeout,\n              firstTimer.startTime - currentTime\n            );\n        }\n    }\n    function shouldYieldToHost() {\n      return needsPaint\n        ? !0\n        : exports.unstable_now() - startTime < frameInterval\n          ? !1\n          : !0;\n    }\n    function requestHostTimeout(callback, ms) {\n      taskTimeoutID = localSetTimeout(function () {\n        callback(exports.unstable_now());\n      }, ms);\n    }\n    \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n      \"function\" ===\n        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n    exports.unstable_now = void 0;\n    if (\n      \"object\" === typeof performance &&\n      \"function\" === typeof performance.now\n    ) {\n      var localPerformance = performance;\n      exports.unstable_now = function () {\n        return localPerformance.now();\n      };\n    } else {\n      var localDate = Date,\n        initialTime = localDate.now();\n      exports.unstable_now = function () {\n        return localDate.now() - initialTime;\n      };\n    }\n    var taskQueue = [],\n      timerQueue = [],\n      taskIdCounter = 1,\n      currentTask = null,\n      currentPriorityLevel = 3,\n      isPerformingWork = !1,\n      isHostCallbackScheduled = !1,\n      isHostTimeoutScheduled = !1,\n      needsPaint = !1,\n      localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n      localClearTimeout =\n        \"function\" === typeof clearTimeout ? clearTimeout : null,\n      localSetImmediate =\n        \"undefined\" !== typeof setImmediate ? setImmediate : null,\n      isMessageLoopRunning = !1,\n      taskTimeoutID = -1,\n      frameInterval = 5,\n      startTime = -1;\n    if (\"function\" === typeof localSetImmediate)\n      var schedulePerformWorkUntilDeadline = function () {\n        localSetImmediate(performWorkUntilDeadline);\n      };\n    else if (\"undefined\" !== typeof MessageChannel) {\n      var channel = new MessageChannel(),\n        port = channel.port2;\n      channel.port1.onmessage = performWorkUntilDeadline;\n      schedulePerformWorkUntilDeadline = function () {\n        port.postMessage(null);\n      };\n    } else\n      schedulePerformWorkUntilDeadline = function () {\n        localSetTimeout(performWorkUntilDeadline, 0);\n      };\n    exports.unstable_IdlePriority = 5;\n    exports.unstable_ImmediatePriority = 1;\n    exports.unstable_LowPriority = 4;\n    exports.unstable_NormalPriority = 3;\n    exports.unstable_Profiling = null;\n    exports.unstable_UserBlockingPriority = 2;\n    exports.unstable_cancelCallback = function (task) {\n      task.callback = null;\n    };\n    exports.unstable_forceFrameRate = function (fps) {\n      0 > fps || 125 < fps\n        ? console.error(\n            \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n          )\n        : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n    };\n    exports.unstable_getCurrentPriorityLevel = function () {\n      return currentPriorityLevel;\n    };\n    exports.unstable_next = function (eventHandler) {\n      switch (currentPriorityLevel) {\n        case 1:\n        case 2:\n        case 3:\n          var priorityLevel = 3;\n          break;\n        default:\n          priorityLevel = currentPriorityLevel;\n      }\n      var previousPriorityLevel = currentPriorityLevel;\n      currentPriorityLevel = priorityLevel;\n      try {\n        return eventHandler();\n      } finally {\n        currentPriorityLevel = previousPriorityLevel;\n      }\n    };\n    exports.unstable_requestPaint = function () {\n      needsPaint = !0;\n    };\n    exports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n      switch (priorityLevel) {\n        case 1:\n        case 2:\n        case 3:\n        case 4:\n        case 5:\n          break;\n        default:\n          priorityLevel = 3;\n      }\n      var previousPriorityLevel = currentPriorityLevel;\n      currentPriorityLevel = priorityLevel;\n      try {\n        return eventHandler();\n      } finally {\n        currentPriorityLevel = previousPriorityLevel;\n      }\n    };\n    exports.unstable_scheduleCallback = function (\n      priorityLevel,\n      callback,\n      options\n    ) {\n      var currentTime = exports.unstable_now();\n      \"object\" === typeof options && null !== options\n        ? ((options = options.delay),\n          (options =\n            \"number\" === typeof options && 0 < options\n              ? currentTime + options\n              : currentTime))\n        : (options = currentTime);\n      switch (priorityLevel) {\n        case 1:\n          var timeout = -1;\n          break;\n        case 2:\n          timeout = 250;\n          break;\n        case 5:\n          timeout = 1073741823;\n          break;\n        case 4:\n          timeout = 1e4;\n          break;\n        default:\n          timeout = 5e3;\n      }\n      timeout = options + timeout;\n      priorityLevel = {\n        id: taskIdCounter++,\n        callback: callback,\n        priorityLevel: priorityLevel,\n        startTime: options,\n        expirationTime: timeout,\n        sortIndex: -1\n      };\n      options > currentTime\n        ? ((priorityLevel.sortIndex = options),\n          push(timerQueue, priorityLevel),\n          null === peek(taskQueue) &&\n            priorityLevel === peek(timerQueue) &&\n            (isHostTimeoutScheduled\n              ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n              : (isHostTimeoutScheduled = !0),\n            requestHostTimeout(handleTimeout, options - currentTime)))\n        : ((priorityLevel.sortIndex = timeout),\n          push(taskQueue, priorityLevel),\n          isHostCallbackScheduled ||\n            isPerformingWork ||\n            ((isHostCallbackScheduled = !0),\n            isMessageLoopRunning ||\n              ((isMessageLoopRunning = !0),\n              schedulePerformWorkUntilDeadline())));\n      return priorityLevel;\n    };\n    exports.unstable_shouldYield = shouldYieldToHost;\n    exports.unstable_wrapCallback = function (callback) {\n      var parentPriorityLevel = currentPriorityLevel;\n      return function () {\n        var previousPriorityLevel = currentPriorityLevel;\n        currentPriorityLevel = parentPriorityLevel;\n        try {\n          return callback.apply(this, arguments);\n        } finally {\n          currentPriorityLevel = previousPriorityLevel;\n        }\n      };\n    };\n    \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n      \"function\" ===\n        typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n      __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n  })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYixLQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFdBQVc7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxnQkFBZ0I7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLG9CQUFvQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxvQkFBb0I7QUFDMUI7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTSxvQkFBb0I7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJLDZCQUE2QjtBQUNqQyxJQUFJLGtDQUFrQztBQUN0QyxJQUFJLDRCQUE0QjtBQUNoQyxJQUFJLCtCQUErQjtBQUNuQyxJQUFJLDBCQUEwQjtBQUM5QixJQUFJLHFDQUFxQztBQUN6QyxJQUFJLCtCQUErQjtBQUNuQztBQUNBO0FBQ0EsSUFBSSwrQkFBK0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSx3Q0FBd0M7QUFDNUM7QUFDQTtBQUNBLElBQUkscUJBQXFCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLElBQUksNkJBQTZCO0FBQ2pDO0FBQ0E7QUFDQSxJQUFJLGdDQUFnQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLElBQUksaUNBQWlDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLDRCQUE0QjtBQUNoQyxJQUFJLDZCQUE2QjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUciLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS40LjdfQGJhYmVsK2NvcmVANy4yOC4zX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMF9AcGxheXdyaWdodCt0ZXN0QDEuNTUuMF9yZWFjdC1kXzQ3ZmYzODEzZDc5MDU2NmRmMjU0YTIxNjM1NTBjMmQ1L25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvc2NoZWR1bGVyL2Nqcy9zY2hlZHVsZXIuZGV2ZWxvcG1lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViAmJlxuICAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSgpIHtcbiAgICAgIG5lZWRzUGFpbnQgPSAhMTtcbiAgICAgIGlmIChpc01lc3NhZ2VMb29wUnVubmluZykge1xuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgICAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICAgICAgdmFyIGhhc01vcmVXb3JrID0gITA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYToge1xuICAgICAgICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSAhMTtcbiAgICAgICAgICAgIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgJiZcbiAgICAgICAgICAgICAgKChpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gITEpLFxuICAgICAgICAgICAgICBsb2NhbENsZWFyVGltZW91dCh0YXNrVGltZW91dElEKSxcbiAgICAgICAgICAgICAgKHRhc2tUaW1lb3V0SUQgPSAtMSkpO1xuICAgICAgICAgICAgaXNQZXJmb3JtaW5nV29yayA9ICEwO1xuICAgICAgICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICAgICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgICBjdXJyZW50VGFzayA9IHBlZWsodGFza1F1ZXVlKTtcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IGN1cnJlbnRUYXNrICYmXG4gICAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFzay5leHBpcmF0aW9uVGltZSA+IGN1cnJlbnRUaW1lICYmXG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFlpZWxkVG9Ib3N0KClcbiAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGN1cnJlbnRUYXNrLmNhbGxiYWNrO1xuICAgICAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXNrLmNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBjdXJyZW50VGFzay5wcmlvcml0eUxldmVsO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGludWF0aW9uQ2FsbGJhY2sgPSBjYWxsYmFjayhcbiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFzay5leHBpcmF0aW9uVGltZSA8PSBjdXJyZW50VGltZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBjb250aW51YXRpb25DYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXNrLmNhbGxiYWNrID0gY29udGludWF0aW9uQ2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgaGFzTW9yZVdvcmsgPSAhMDtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhayBiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYXNrID09PSBwZWVrKHRhc2tRdWV1ZSkgJiYgcG9wKHRhc2tRdWV1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHBvcCh0YXNrUXVldWUpO1xuICAgICAgICAgICAgICAgICAgY3VycmVudFRhc2sgPSBwZWVrKHRhc2tRdWV1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSBjdXJyZW50VGFzaykgaGFzTW9yZVdvcmsgPSAhMDtcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHZhciBmaXJzdFRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcbiAgICAgICAgICAgICAgICAgIG51bGwgIT09IGZpcnN0VGltZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KFxuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRpbWVvdXQsXG4gICAgICAgICAgICAgICAgICAgICAgZmlyc3RUaW1lci5zdGFydFRpbWUgLSBjdXJyZW50VGltZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaGFzTW9yZVdvcmsgPSAhMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIChjdXJyZW50VGFzayA9IG51bGwpLFxuICAgICAgICAgICAgICAgIChjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbCksXG4gICAgICAgICAgICAgICAgKGlzUGVyZm9ybWluZ1dvcmsgPSAhMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYXNNb3JlV29yayA9IHZvaWQgMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaGFzTW9yZVdvcmtcbiAgICAgICAgICAgID8gc2NoZWR1bGVQZXJmb3JtV29ya1VudGlsRGVhZGxpbmUoKVxuICAgICAgICAgICAgOiAoaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSAhMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcHVzaChoZWFwLCBub2RlKSB7XG4gICAgICB2YXIgaW5kZXggPSBoZWFwLmxlbmd0aDtcbiAgICAgIGhlYXAucHVzaChub2RlKTtcbiAgICAgIGE6IGZvciAoOyAwIDwgaW5kZXg7ICkge1xuICAgICAgICB2YXIgcGFyZW50SW5kZXggPSAoaW5kZXggLSAxKSA+Pj4gMSxcbiAgICAgICAgICBwYXJlbnQgPSBoZWFwW3BhcmVudEluZGV4XTtcbiAgICAgICAgaWYgKDAgPCBjb21wYXJlKHBhcmVudCwgbm9kZSkpXG4gICAgICAgICAgKGhlYXBbcGFyZW50SW5kZXhdID0gbm9kZSksXG4gICAgICAgICAgICAoaGVhcFtpbmRleF0gPSBwYXJlbnQpLFxuICAgICAgICAgICAgKGluZGV4ID0gcGFyZW50SW5kZXgpO1xuICAgICAgICBlbHNlIGJyZWFrIGE7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBlZWsoaGVhcCkge1xuICAgICAgcmV0dXJuIDAgPT09IGhlYXAubGVuZ3RoID8gbnVsbCA6IGhlYXBbMF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcChoZWFwKSB7XG4gICAgICBpZiAoMCA9PT0gaGVhcC5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgICAgdmFyIGZpcnN0ID0gaGVhcFswXSxcbiAgICAgICAgbGFzdCA9IGhlYXAucG9wKCk7XG4gICAgICBpZiAobGFzdCAhPT0gZmlyc3QpIHtcbiAgICAgICAgaGVhcFswXSA9IGxhc3Q7XG4gICAgICAgIGE6IGZvciAoXG4gICAgICAgICAgdmFyIGluZGV4ID0gMCwgbGVuZ3RoID0gaGVhcC5sZW5ndGgsIGhhbGZMZW5ndGggPSBsZW5ndGggPj4+IDE7XG4gICAgICAgICAgaW5kZXggPCBoYWxmTGVuZ3RoO1xuXG4gICAgICAgICkge1xuICAgICAgICAgIHZhciBsZWZ0SW5kZXggPSAyICogKGluZGV4ICsgMSkgLSAxLFxuICAgICAgICAgICAgbGVmdCA9IGhlYXBbbGVmdEluZGV4XSxcbiAgICAgICAgICAgIHJpZ2h0SW5kZXggPSBsZWZ0SW5kZXggKyAxLFxuICAgICAgICAgICAgcmlnaHQgPSBoZWFwW3JpZ2h0SW5kZXhdO1xuICAgICAgICAgIGlmICgwID4gY29tcGFyZShsZWZ0LCBsYXN0KSlcbiAgICAgICAgICAgIHJpZ2h0SW5kZXggPCBsZW5ndGggJiYgMCA+IGNvbXBhcmUocmlnaHQsIGxlZnQpXG4gICAgICAgICAgICAgID8gKChoZWFwW2luZGV4XSA9IHJpZ2h0KSxcbiAgICAgICAgICAgICAgICAoaGVhcFtyaWdodEluZGV4XSA9IGxhc3QpLFxuICAgICAgICAgICAgICAgIChpbmRleCA9IHJpZ2h0SW5kZXgpKVxuICAgICAgICAgICAgICA6ICgoaGVhcFtpbmRleF0gPSBsZWZ0KSxcbiAgICAgICAgICAgICAgICAoaGVhcFtsZWZ0SW5kZXhdID0gbGFzdCksXG4gICAgICAgICAgICAgICAgKGluZGV4ID0gbGVmdEluZGV4KSk7XG4gICAgICAgICAgZWxzZSBpZiAocmlnaHRJbmRleCA8IGxlbmd0aCAmJiAwID4gY29tcGFyZShyaWdodCwgbGFzdCkpXG4gICAgICAgICAgICAoaGVhcFtpbmRleF0gPSByaWdodCksXG4gICAgICAgICAgICAgIChoZWFwW3JpZ2h0SW5kZXhdID0gbGFzdCksXG4gICAgICAgICAgICAgIChpbmRleCA9IHJpZ2h0SW5kZXgpO1xuICAgICAgICAgIGVsc2UgYnJlYWsgYTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZpcnN0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgICAgIHZhciBkaWZmID0gYS5zb3J0SW5kZXggLSBiLnNvcnRJbmRleDtcbiAgICAgIHJldHVybiAwICE9PSBkaWZmID8gZGlmZiA6IGEuaWQgLSBiLmlkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKSB7XG4gICAgICBmb3IgKHZhciB0aW1lciA9IHBlZWsodGltZXJRdWV1ZSk7IG51bGwgIT09IHRpbWVyOyApIHtcbiAgICAgICAgaWYgKG51bGwgPT09IHRpbWVyLmNhbGxiYWNrKSBwb3AodGltZXJRdWV1ZSk7XG4gICAgICAgIGVsc2UgaWYgKHRpbWVyLnN0YXJ0VGltZSA8PSBjdXJyZW50VGltZSlcbiAgICAgICAgICBwb3AodGltZXJRdWV1ZSksXG4gICAgICAgICAgICAodGltZXIuc29ydEluZGV4ID0gdGltZXIuZXhwaXJhdGlvblRpbWUpLFxuICAgICAgICAgICAgcHVzaCh0YXNrUXVldWUsIHRpbWVyKTtcbiAgICAgICAgZWxzZSBicmVhaztcbiAgICAgICAgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KGN1cnJlbnRUaW1lKSB7XG4gICAgICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gITE7XG4gICAgICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgICAgIGlmICghaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQpXG4gICAgICAgIGlmIChudWxsICE9PSBwZWVrKHRhc2tRdWV1ZSkpXG4gICAgICAgICAgKGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gITApLFxuICAgICAgICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgfHxcbiAgICAgICAgICAgICAgKChpc01lc3NhZ2VMb29wUnVubmluZyA9ICEwKSwgc2NoZWR1bGVQZXJmb3JtV29ya1VudGlsRGVhZGxpbmUoKSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBmaXJzdFRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcbiAgICAgICAgICBudWxsICE9PSBmaXJzdFRpbWVyICYmXG4gICAgICAgICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoXG4gICAgICAgICAgICAgIGhhbmRsZVRpbWVvdXQsXG4gICAgICAgICAgICAgIGZpcnN0VGltZXIuc3RhcnRUaW1lIC0gY3VycmVudFRpbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkWWllbGRUb0hvc3QoKSB7XG4gICAgICByZXR1cm4gbmVlZHNQYWludFxuICAgICAgICA/ICEwXG4gICAgICAgIDogZXhwb3J0cy51bnN0YWJsZV9ub3coKSAtIHN0YXJ0VGltZSA8IGZyYW1lSW50ZXJ2YWxcbiAgICAgICAgICA/ICExXG4gICAgICAgICAgOiAhMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVxdWVzdEhvc3RUaW1lb3V0KGNhbGxiYWNrLCBtcykge1xuICAgICAgdGFza1RpbWVvdXRJRCA9IGxvY2FsU2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNhbGxiYWNrKGV4cG9ydHMudW5zdGFibGVfbm93KCkpO1xuICAgICAgfSwgbXMpO1xuICAgIH1cbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0ICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0KEVycm9yKCkpO1xuICAgIGV4cG9ydHMudW5zdGFibGVfbm93ID0gdm9pZCAwO1xuICAgIGlmIChcbiAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBwZXJmb3JtYW5jZSAmJlxuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcGVyZm9ybWFuY2Uubm93XG4gICAgKSB7XG4gICAgICB2YXIgbG9jYWxQZXJmb3JtYW5jZSA9IHBlcmZvcm1hbmNlO1xuICAgICAgZXhwb3J0cy51bnN0YWJsZV9ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBsb2NhbFBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGxvY2FsRGF0ZSA9IERhdGUsXG4gICAgICAgIGluaXRpYWxUaW1lID0gbG9jYWxEYXRlLm5vdygpO1xuICAgICAgZXhwb3J0cy51bnN0YWJsZV9ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBsb2NhbERhdGUubm93KCkgLSBpbml0aWFsVGltZTtcbiAgICAgIH07XG4gICAgfVxuICAgIHZhciB0YXNrUXVldWUgPSBbXSxcbiAgICAgIHRpbWVyUXVldWUgPSBbXSxcbiAgICAgIHRhc2tJZENvdW50ZXIgPSAxLFxuICAgICAgY3VycmVudFRhc2sgPSBudWxsLFxuICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSAzLFxuICAgICAgaXNQZXJmb3JtaW5nV29yayA9ICExLFxuICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSAhMSxcbiAgICAgIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSAhMSxcbiAgICAgIG5lZWRzUGFpbnQgPSAhMSxcbiAgICAgIGxvY2FsU2V0VGltZW91dCA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHNldFRpbWVvdXQgPyBzZXRUaW1lb3V0IDogbnVsbCxcbiAgICAgIGxvY2FsQ2xlYXJUaW1lb3V0ID1cbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY2xlYXJUaW1lb3V0ID8gY2xlYXJUaW1lb3V0IDogbnVsbCxcbiAgICAgIGxvY2FsU2V0SW1tZWRpYXRlID1cbiAgICAgICAgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIHNldEltbWVkaWF0ZSA/IHNldEltbWVkaWF0ZSA6IG51bGwsXG4gICAgICBpc01lc3NhZ2VMb29wUnVubmluZyA9ICExLFxuICAgICAgdGFza1RpbWVvdXRJRCA9IC0xLFxuICAgICAgZnJhbWVJbnRlcnZhbCA9IDUsXG4gICAgICBzdGFydFRpbWUgPSAtMTtcbiAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbG9jYWxTZXRJbW1lZGlhdGUpXG4gICAgICB2YXIgc2NoZWR1bGVQZXJmb3JtV29ya1VudGlsRGVhZGxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxvY2FsU2V0SW1tZWRpYXRlKHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSk7XG4gICAgICB9O1xuICAgIGVsc2UgaWYgKFwidW5kZWZpbmVkXCIgIT09IHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCkge1xuICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKSxcbiAgICAgICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZTtcbiAgICAgIHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKG51bGwpO1xuICAgICAgfTtcbiAgICB9IGVsc2VcbiAgICAgIHNjaGVkdWxlUGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBsb2NhbFNldFRpbWVvdXQocGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lLCAwKTtcbiAgICAgIH07XG4gICAgZXhwb3J0cy51bnN0YWJsZV9JZGxlUHJpb3JpdHkgPSA1O1xuICAgIGV4cG9ydHMudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHkgPSAxO1xuICAgIGV4cG9ydHMudW5zdGFibGVfTG93UHJpb3JpdHkgPSA0O1xuICAgIGV4cG9ydHMudW5zdGFibGVfTm9ybWFsUHJpb3JpdHkgPSAzO1xuICAgIGV4cG9ydHMudW5zdGFibGVfUHJvZmlsaW5nID0gbnVsbDtcbiAgICBleHBvcnRzLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5ID0gMjtcbiAgICBleHBvcnRzLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrID0gZnVuY3Rpb24gKHRhc2spIHtcbiAgICAgIHRhc2suY2FsbGJhY2sgPSBudWxsO1xuICAgIH07XG4gICAgZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZSA9IGZ1bmN0aW9uIChmcHMpIHtcbiAgICAgIDAgPiBmcHMgfHwgMTI1IDwgZnBzXG4gICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsIGZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkXCJcbiAgICAgICAgICApXG4gICAgICAgIDogKGZyYW1lSW50ZXJ2YWwgPSAwIDwgZnBzID8gTWF0aC5mbG9vcigxZTMgLyBmcHMpIDogNSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgIH07XG4gICAgZXhwb3J0cy51bnN0YWJsZV9uZXh0ID0gZnVuY3Rpb24gKGV2ZW50SGFuZGxlcikge1xuICAgICAgc3dpdGNoIChjdXJyZW50UHJpb3JpdHlMZXZlbCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHZhciBwcmlvcml0eUxldmVsID0gMztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBwcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgICB9XG4gICAgICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGV4cG9ydHMudW5zdGFibGVfcmVxdWVzdFBhaW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbmVlZHNQYWludCA9ICEwO1xuICAgIH07XG4gICAgZXhwb3J0cy51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkgPSBmdW5jdGlvbiAocHJpb3JpdHlMZXZlbCwgZXZlbnRIYW5kbGVyKSB7XG4gICAgICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICBjYXNlIDI6XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcHJpb3JpdHlMZXZlbCA9IDM7XG4gICAgICB9XG4gICAgICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgICAgIH1cbiAgICB9O1xuICAgIGV4cG9ydHMudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayA9IGZ1bmN0aW9uIChcbiAgICAgIHByaW9yaXR5TGV2ZWwsXG4gICAgICBjYWxsYmFjayxcbiAgICAgIG9wdGlvbnNcbiAgICApIHtcbiAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygb3B0aW9ucyAmJiBudWxsICE9PSBvcHRpb25zXG4gICAgICAgID8gKChvcHRpb25zID0gb3B0aW9ucy5kZWxheSksXG4gICAgICAgICAgKG9wdGlvbnMgPVxuICAgICAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIG9wdGlvbnMgJiYgMCA8IG9wdGlvbnNcbiAgICAgICAgICAgICAgPyBjdXJyZW50VGltZSArIG9wdGlvbnNcbiAgICAgICAgICAgICAgOiBjdXJyZW50VGltZSkpXG4gICAgICAgIDogKG9wdGlvbnMgPSBjdXJyZW50VGltZSk7XG4gICAgICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHZhciB0aW1lb3V0ID0gLTE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0aW1lb3V0ID0gMjUwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgdGltZW91dCA9IDEwNzM3NDE4MjM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICB0aW1lb3V0ID0gMWU0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRpbWVvdXQgPSA1ZTM7XG4gICAgICB9XG4gICAgICB0aW1lb3V0ID0gb3B0aW9ucyArIHRpbWVvdXQ7XG4gICAgICBwcmlvcml0eUxldmVsID0ge1xuICAgICAgICBpZDogdGFza0lkQ291bnRlcisrLFxuICAgICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgICAgIHByaW9yaXR5TGV2ZWw6IHByaW9yaXR5TGV2ZWwsXG4gICAgICAgIHN0YXJ0VGltZTogb3B0aW9ucyxcbiAgICAgICAgZXhwaXJhdGlvblRpbWU6IHRpbWVvdXQsXG4gICAgICAgIHNvcnRJbmRleDogLTFcbiAgICAgIH07XG4gICAgICBvcHRpb25zID4gY3VycmVudFRpbWVcbiAgICAgICAgPyAoKHByaW9yaXR5TGV2ZWwuc29ydEluZGV4ID0gb3B0aW9ucyksXG4gICAgICAgICAgcHVzaCh0aW1lclF1ZXVlLCBwcmlvcml0eUxldmVsKSxcbiAgICAgICAgICBudWxsID09PSBwZWVrKHRhc2tRdWV1ZSkgJiZcbiAgICAgICAgICAgIHByaW9yaXR5TGV2ZWwgPT09IHBlZWsodGltZXJRdWV1ZSkgJiZcbiAgICAgICAgICAgIChpc0hvc3RUaW1lb3V0U2NoZWR1bGVkXG4gICAgICAgICAgICAgID8gKGxvY2FsQ2xlYXJUaW1lb3V0KHRhc2tUaW1lb3V0SUQpLCAodGFza1RpbWVvdXRJRCA9IC0xKSlcbiAgICAgICAgICAgICAgOiAoaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9ICEwKSxcbiAgICAgICAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBvcHRpb25zIC0gY3VycmVudFRpbWUpKSlcbiAgICAgICAgOiAoKHByaW9yaXR5TGV2ZWwuc29ydEluZGV4ID0gdGltZW91dCksXG4gICAgICAgICAgcHVzaCh0YXNrUXVldWUsIHByaW9yaXR5TGV2ZWwpLFxuICAgICAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkIHx8XG4gICAgICAgICAgICBpc1BlcmZvcm1pbmdXb3JrIHx8XG4gICAgICAgICAgICAoKGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gITApLFxuICAgICAgICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgfHxcbiAgICAgICAgICAgICAgKChpc01lc3NhZ2VMb29wUnVubmluZyA9ICEwKSxcbiAgICAgICAgICAgICAgc2NoZWR1bGVQZXJmb3JtV29ya1VudGlsRGVhZGxpbmUoKSkpKTtcbiAgICAgIHJldHVybiBwcmlvcml0eUxldmVsO1xuICAgIH07XG4gICAgZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZCA9IHNob3VsZFlpZWxkVG9Ib3N0O1xuICAgIGV4cG9ydHMudW5zdGFibGVfd3JhcENhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICB2YXIgcGFyZW50UHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHBhcmVudFByaW9yaXR5TGV2ZWw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AgJiZcbiAgICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcChFcnJvcigpKTtcbiAgfSkoKTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/scheduler/cjs/scheduler.development.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/scheduler/index.js":
/*!********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/scheduler/index.js ***!
  \********************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/scheduler.development.js */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/scheduler/cjs/scheduler.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9zY2hlZHVsZXIvaW5kZXguanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDLENBQUM7QUFDRixFQUFFLHNUQUEwRDtBQUM1RCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9zY2hlZHVsZXIvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5wcm9kdWN0aW9uLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/scheduler/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/strip-ansi/index.js":
/*!*********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/strip-ansi/index.js ***!
  \*********************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("var __dirname = \"/\";\n\n(()=>{\n    \"use strict\";\n    var e = {\n        511: (e)=>{\n            e.exports = function() {\n                let { onlyFirst: e = false } = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n                const r = [\n                    \"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\n                    \"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))\"\n                ].join(\"|\");\n                return new RegExp(r, e ? undefined : \"g\");\n            };\n        },\n        532: (e, r, _)=>{\n            const t = _(511);\n            e.exports = (e)=>typeof e === \"string\" ? e.replace(t(), \"\") : e;\n        }\n    };\n    var r = {};\n    function __nccwpck_require__(_) {\n        var t = r[_];\n        if (t !== undefined) {\n            return t.exports;\n        }\n        var a = r[_] = {\n            exports: {}\n        };\n        var n = true;\n        try {\n            e[_](a, a.exports, __nccwpck_require__);\n            n = false;\n        } finally{\n            if (n) delete r[_];\n        }\n        return a.exports;\n    }\n    if (typeof __nccwpck_require__ !== \"undefined\") __nccwpck_require__.ab = __dirname + \"/\";\n    var _ = __nccwpck_require__(532);\n    module.exports = _;\n})();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9zdHJpcC1hbnNpL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7O0FBQUM7SUFBSztJQUFhLElBQUlBLElBQUU7UUFBQyxLQUFJQSxDQUFBQTtZQUFJQSxFQUFFQyxPQUFPLEdBQUM7b0JBQUMsRUFBQ0MsV0FBVUYsSUFBRSxLQUFLLEVBQUMsb0VBQUMsQ0FBQztnQkFBSyxNQUFNRyxJQUFFO29CQUFDO29CQUErSDtpQkFBMkQsQ0FBQ0MsSUFBSSxDQUFDO2dCQUFLLE9BQU8sSUFBSUMsT0FBT0YsR0FBRUgsSUFBRU0sWUFBVTtZQUFJO1FBQUM7UUFBRSxLQUFJLENBQUNOLEdBQUVHLEdBQUVJO1lBQUssTUFBTUMsSUFBRUQsRUFBRTtZQUFLUCxFQUFFQyxPQUFPLEdBQUNELENBQUFBLElBQUcsT0FBT0EsTUFBSSxXQUFTQSxFQUFFUyxPQUFPLENBQUNELEtBQUksTUFBSVI7UUFBQztJQUFDO0lBQUUsSUFBSUcsSUFBRSxDQUFDO0lBQUUsU0FBU08sb0JBQW9CSCxDQUFDO1FBQUUsSUFBSUMsSUFBRUwsQ0FBQyxDQUFDSSxFQUFFO1FBQUMsSUFBR0MsTUFBSUYsV0FBVTtZQUFDLE9BQU9FLEVBQUVQLE9BQU87UUFBQTtRQUFDLElBQUlVLElBQUVSLENBQUMsQ0FBQ0ksRUFBRSxHQUFDO1lBQUNOLFNBQVEsQ0FBQztRQUFDO1FBQUUsSUFBSVcsSUFBRTtRQUFLLElBQUc7WUFBQ1osQ0FBQyxDQUFDTyxFQUFFLENBQUNJLEdBQUVBLEVBQUVWLE9BQU8sRUFBQ1M7WUFBcUJFLElBQUU7UUFBSyxTQUFRO1lBQUMsSUFBR0EsR0FBRSxPQUFPVCxDQUFDLENBQUNJLEVBQUU7UUFBQTtRQUFDLE9BQU9JLEVBQUVWLE9BQU87SUFBQTtJQUFDLElBQUcsT0FBT1Msd0JBQXNCLGFBQVlBLG9CQUFvQkcsRUFBRSxHQUFDQyxTQUFTQSxHQUFDO0lBQUksSUFBSVAsSUFBRUcsb0JBQW9CO0lBQUtLLE9BQU9kLE9BQU8sR0FBQ007QUFBQyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9jb21waWxlZC9zdHJpcC1hbnNpL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIigoKT0+e1widXNlIHN0cmljdFwiO3ZhciBlPXs1MTE6ZT0+e2UuZXhwb3J0cz0oe29ubHlGaXJzdDplPWZhbHNlfT17fSk9Pntjb25zdCByPVtcIltcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNylcIixcIig/Oig/OlxcXFxkezEsNH0oPzo7XFxcXGR7MCw0fSkqKT9bXFxcXGRBLVBSLVRaY2YtbnRxcnk9Pjx+XSkpXCJdLmpvaW4oXCJ8XCIpO3JldHVybiBuZXcgUmVnRXhwKHIsZT91bmRlZmluZWQ6XCJnXCIpfX0sNTMyOihlLHIsXyk9Pntjb25zdCB0PV8oNTExKTtlLmV4cG9ydHM9ZT0+dHlwZW9mIGU9PT1cInN0cmluZ1wiP2UucmVwbGFjZSh0KCksXCJcIik6ZX19O3ZhciByPXt9O2Z1bmN0aW9uIF9fbmNjd3Bja19yZXF1aXJlX18oXyl7dmFyIHQ9cltfXTtpZih0IT09dW5kZWZpbmVkKXtyZXR1cm4gdC5leHBvcnRzfXZhciBhPXJbX109e2V4cG9ydHM6e319O3ZhciBuPXRydWU7dHJ5e2VbX10oYSxhLmV4cG9ydHMsX19uY2N3cGNrX3JlcXVpcmVfXyk7bj1mYWxzZX1maW5hbGx5e2lmKG4pZGVsZXRlIHJbX119cmV0dXJuIGEuZXhwb3J0c31pZih0eXBlb2YgX19uY2N3cGNrX3JlcXVpcmVfXyE9PVwidW5kZWZpbmVkXCIpX19uY2N3cGNrX3JlcXVpcmVfXy5hYj1fX2Rpcm5hbWUrXCIvXCI7dmFyIF89X19uY2N3cGNrX3JlcXVpcmVfXyg1MzIpO21vZHVsZS5leHBvcnRzPV99KSgpOyJdLCJuYW1lcyI6WyJlIiwiZXhwb3J0cyIsIm9ubHlGaXJzdCIsInIiLCJqb2luIiwiUmVnRXhwIiwidW5kZWZpbmVkIiwiXyIsInQiLCJyZXBsYWNlIiwiX19uY2N3cGNrX3JlcXVpcmVfXyIsImEiLCJuIiwiYWIiLCJfX2Rpcm5hbWUiLCJtb2R1bGUiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/strip-ansi/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/constants.js":
/*!*********************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/constants.js ***!
  \*********************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    ACTION_SUFFIX: function() {\n        return ACTION_SUFFIX;\n    },\n    APP_DIR_ALIAS: function() {\n        return APP_DIR_ALIAS;\n    },\n    CACHE_ONE_YEAR: function() {\n        return CACHE_ONE_YEAR;\n    },\n    DOT_NEXT_ALIAS: function() {\n        return DOT_NEXT_ALIAS;\n    },\n    ESLINT_DEFAULT_DIRS: function() {\n        return ESLINT_DEFAULT_DIRS;\n    },\n    GSP_NO_RETURNED_VALUE: function() {\n        return GSP_NO_RETURNED_VALUE;\n    },\n    GSSP_COMPONENT_MEMBER_ERROR: function() {\n        return GSSP_COMPONENT_MEMBER_ERROR;\n    },\n    GSSP_NO_RETURNED_VALUE: function() {\n        return GSSP_NO_RETURNED_VALUE;\n    },\n    INFINITE_CACHE: function() {\n        return INFINITE_CACHE;\n    },\n    INSTRUMENTATION_HOOK_FILENAME: function() {\n        return INSTRUMENTATION_HOOK_FILENAME;\n    },\n    MATCHED_PATH_HEADER: function() {\n        return MATCHED_PATH_HEADER;\n    },\n    MIDDLEWARE_FILENAME: function() {\n        return MIDDLEWARE_FILENAME;\n    },\n    MIDDLEWARE_LOCATION_REGEXP: function() {\n        return MIDDLEWARE_LOCATION_REGEXP;\n    },\n    NEXT_BODY_SUFFIX: function() {\n        return NEXT_BODY_SUFFIX;\n    },\n    NEXT_CACHE_IMPLICIT_TAG_ID: function() {\n        return NEXT_CACHE_IMPLICIT_TAG_ID;\n    },\n    NEXT_CACHE_REVALIDATED_TAGS_HEADER: function() {\n        return NEXT_CACHE_REVALIDATED_TAGS_HEADER;\n    },\n    NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER: function() {\n        return NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER;\n    },\n    NEXT_CACHE_SOFT_TAG_MAX_LENGTH: function() {\n        return NEXT_CACHE_SOFT_TAG_MAX_LENGTH;\n    },\n    NEXT_CACHE_TAGS_HEADER: function() {\n        return NEXT_CACHE_TAGS_HEADER;\n    },\n    NEXT_CACHE_TAG_MAX_ITEMS: function() {\n        return NEXT_CACHE_TAG_MAX_ITEMS;\n    },\n    NEXT_CACHE_TAG_MAX_LENGTH: function() {\n        return NEXT_CACHE_TAG_MAX_LENGTH;\n    },\n    NEXT_DATA_SUFFIX: function() {\n        return NEXT_DATA_SUFFIX;\n    },\n    NEXT_INTERCEPTION_MARKER_PREFIX: function() {\n        return NEXT_INTERCEPTION_MARKER_PREFIX;\n    },\n    NEXT_META_SUFFIX: function() {\n        return NEXT_META_SUFFIX;\n    },\n    NEXT_QUERY_PARAM_PREFIX: function() {\n        return NEXT_QUERY_PARAM_PREFIX;\n    },\n    NEXT_RESUME_HEADER: function() {\n        return NEXT_RESUME_HEADER;\n    },\n    NON_STANDARD_NODE_ENV: function() {\n        return NON_STANDARD_NODE_ENV;\n    },\n    PAGES_DIR_ALIAS: function() {\n        return PAGES_DIR_ALIAS;\n    },\n    PRERENDER_REVALIDATE_HEADER: function() {\n        return PRERENDER_REVALIDATE_HEADER;\n    },\n    PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER: function() {\n        return PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER;\n    },\n    PUBLIC_DIR_MIDDLEWARE_CONFLICT: function() {\n        return PUBLIC_DIR_MIDDLEWARE_CONFLICT;\n    },\n    ROOT_DIR_ALIAS: function() {\n        return ROOT_DIR_ALIAS;\n    },\n    RSC_ACTION_CLIENT_WRAPPER_ALIAS: function() {\n        return RSC_ACTION_CLIENT_WRAPPER_ALIAS;\n    },\n    RSC_ACTION_ENCRYPTION_ALIAS: function() {\n        return RSC_ACTION_ENCRYPTION_ALIAS;\n    },\n    RSC_ACTION_PROXY_ALIAS: function() {\n        return RSC_ACTION_PROXY_ALIAS;\n    },\n    RSC_ACTION_VALIDATE_ALIAS: function() {\n        return RSC_ACTION_VALIDATE_ALIAS;\n    },\n    RSC_CACHE_WRAPPER_ALIAS: function() {\n        return RSC_CACHE_WRAPPER_ALIAS;\n    },\n    RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS: function() {\n        return RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS;\n    },\n    RSC_MOD_REF_PROXY_ALIAS: function() {\n        return RSC_MOD_REF_PROXY_ALIAS;\n    },\n    RSC_PREFETCH_SUFFIX: function() {\n        return RSC_PREFETCH_SUFFIX;\n    },\n    RSC_SEGMENTS_DIR_SUFFIX: function() {\n        return RSC_SEGMENTS_DIR_SUFFIX;\n    },\n    RSC_SEGMENT_SUFFIX: function() {\n        return RSC_SEGMENT_SUFFIX;\n    },\n    RSC_SUFFIX: function() {\n        return RSC_SUFFIX;\n    },\n    SERVER_PROPS_EXPORT_ERROR: function() {\n        return SERVER_PROPS_EXPORT_ERROR;\n    },\n    SERVER_PROPS_GET_INIT_PROPS_CONFLICT: function() {\n        return SERVER_PROPS_GET_INIT_PROPS_CONFLICT;\n    },\n    SERVER_PROPS_SSG_CONFLICT: function() {\n        return SERVER_PROPS_SSG_CONFLICT;\n    },\n    SERVER_RUNTIME: function() {\n        return SERVER_RUNTIME;\n    },\n    SSG_FALLBACK_EXPORT_ERROR: function() {\n        return SSG_FALLBACK_EXPORT_ERROR;\n    },\n    SSG_GET_INITIAL_PROPS_CONFLICT: function() {\n        return SSG_GET_INITIAL_PROPS_CONFLICT;\n    },\n    STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR: function() {\n        return STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR;\n    },\n    UNSTABLE_REVALIDATE_RENAME_ERROR: function() {\n        return UNSTABLE_REVALIDATE_RENAME_ERROR;\n    },\n    WEBPACK_LAYERS: function() {\n        return WEBPACK_LAYERS;\n    },\n    WEBPACK_RESOURCE_QUERIES: function() {\n        return WEBPACK_RESOURCE_QUERIES;\n    }\n});\nconst NEXT_QUERY_PARAM_PREFIX = 'nxtP';\nconst NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI';\nconst MATCHED_PATH_HEADER = 'x-matched-path';\nconst PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate';\nconst PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = 'x-prerender-revalidate-if-generated';\nconst RSC_PREFETCH_SUFFIX = '.prefetch.rsc';\nconst RSC_SEGMENTS_DIR_SUFFIX = '.segments';\nconst RSC_SEGMENT_SUFFIX = '.segment.rsc';\nconst RSC_SUFFIX = '.rsc';\nconst ACTION_SUFFIX = '.action';\nconst NEXT_DATA_SUFFIX = '.json';\nconst NEXT_META_SUFFIX = '.meta';\nconst NEXT_BODY_SUFFIX = '.body';\nconst NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags';\nconst NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags';\nconst NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER = 'x-next-revalidate-tag-token';\nconst NEXT_RESUME_HEADER = 'next-resume';\nconst NEXT_CACHE_TAG_MAX_ITEMS = 128;\nconst NEXT_CACHE_TAG_MAX_LENGTH = 256;\nconst NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024;\nconst NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_';\nconst CACHE_ONE_YEAR = 31536000;\nconst INFINITE_CACHE = 0xfffffffe;\nconst MIDDLEWARE_FILENAME = 'middleware';\nconst MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`;\nconst INSTRUMENTATION_HOOK_FILENAME = 'instrumentation';\nconst PAGES_DIR_ALIAS = 'private-next-pages';\nconst DOT_NEXT_ALIAS = 'private-dot-next';\nconst ROOT_DIR_ALIAS = 'private-next-root-dir';\nconst APP_DIR_ALIAS = 'private-next-app-dir';\nconst RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy';\nconst RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate';\nconst RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference';\nconst RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper';\nconst RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS = 'private-next-rsc-track-dynamic-import';\nconst RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption';\nconst RSC_ACTION_CLIENT_WRAPPER_ALIAS = 'private-next-rsc-action-client-wrapper';\nconst PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`;\nconst SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`;\nconst SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`;\nconst SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`;\nconst STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`;\nconst SERVER_PROPS_EXPORT_ERROR = `pages with \\`getServerSideProps\\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`;\nconst GSP_NO_RETURNED_VALUE = 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?';\nconst GSSP_NO_RETURNED_VALUE = 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?';\nconst UNSTABLE_REVALIDATE_RENAME_ERROR = 'The `unstable_revalidate` property is available for general use.\\n' + 'Please use `revalidate` instead.';\nconst GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`;\nconst NON_STANDARD_NODE_ENV = `You are using a non-standard \"NODE_ENV\" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`;\nconst SSG_FALLBACK_EXPORT_ERROR = `Pages with \\`fallback\\` enabled in \\`getStaticPaths\\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`;\nconst ESLINT_DEFAULT_DIRS = [\n    'app',\n    'pages',\n    'components',\n    'lib',\n    'src'\n];\nconst SERVER_RUNTIME = {\n    edge: 'edge',\n    experimentalEdge: 'experimental-edge',\n    nodejs: 'nodejs'\n};\n/**\n * The names of the webpack layers. These layers are the primitives for the\n * webpack chunks.\n */ const WEBPACK_LAYERS_NAMES = {\n    /**\n   * The layer for the shared code between the client and server bundles.\n   */ shared: 'shared',\n    /**\n   * The layer for server-only runtime and picking up `react-server` export conditions.\n   * Including app router RSC pages and app router custom routes and metadata routes.\n   */ reactServerComponents: 'rsc',\n    /**\n   * Server Side Rendering layer for app (ssr).\n   */ serverSideRendering: 'ssr',\n    /**\n   * The browser client bundle layer for actions.\n   */ actionBrowser: 'action-browser',\n    /**\n   * The Node.js bundle layer for the API routes.\n   */ apiNode: 'api-node',\n    /**\n   * The Edge Lite bundle layer for the API routes.\n   */ apiEdge: 'api-edge',\n    /**\n   * The layer for the middleware code.\n   */ middleware: 'middleware',\n    /**\n   * The layer for the instrumentation hooks.\n   */ instrument: 'instrument',\n    /**\n   * The layer for assets on the edge.\n   */ edgeAsset: 'edge-asset',\n    /**\n   * The browser client bundle layer for App directory.\n   */ appPagesBrowser: 'app-pages-browser',\n    /**\n   * The browser client bundle layer for Pages directory.\n   */ pagesDirBrowser: 'pages-dir-browser',\n    /**\n   * The Edge Lite bundle layer for Pages directory.\n   */ pagesDirEdge: 'pages-dir-edge',\n    /**\n   * The Node.js bundle layer for Pages directory.\n   */ pagesDirNode: 'pages-dir-node'\n};\nconst WEBPACK_LAYERS = {\n    ...WEBPACK_LAYERS_NAMES,\n    GROUP: {\n        builtinReact: [\n            WEBPACK_LAYERS_NAMES.reactServerComponents,\n            WEBPACK_LAYERS_NAMES.actionBrowser\n        ],\n        serverOnly: [\n            WEBPACK_LAYERS_NAMES.reactServerComponents,\n            WEBPACK_LAYERS_NAMES.actionBrowser,\n            WEBPACK_LAYERS_NAMES.instrument,\n            WEBPACK_LAYERS_NAMES.middleware\n        ],\n        neutralTarget: [\n            // pages api\n            WEBPACK_LAYERS_NAMES.apiNode,\n            WEBPACK_LAYERS_NAMES.apiEdge\n        ],\n        clientOnly: [\n            WEBPACK_LAYERS_NAMES.serverSideRendering,\n            WEBPACK_LAYERS_NAMES.appPagesBrowser\n        ],\n        bundled: [\n            WEBPACK_LAYERS_NAMES.reactServerComponents,\n            WEBPACK_LAYERS_NAMES.actionBrowser,\n            WEBPACK_LAYERS_NAMES.serverSideRendering,\n            WEBPACK_LAYERS_NAMES.appPagesBrowser,\n            WEBPACK_LAYERS_NAMES.shared,\n            WEBPACK_LAYERS_NAMES.instrument,\n            WEBPACK_LAYERS_NAMES.middleware\n        ],\n        appPages: [\n            // app router pages and layouts\n            WEBPACK_LAYERS_NAMES.reactServerComponents,\n            WEBPACK_LAYERS_NAMES.serverSideRendering,\n            WEBPACK_LAYERS_NAMES.appPagesBrowser,\n            WEBPACK_LAYERS_NAMES.actionBrowser\n        ]\n    }\n};\nconst WEBPACK_RESOURCE_QUERIES = {\n    edgeSSREntry: '__next_edge_ssr_entry__',\n    metadata: '__next_metadata__',\n    metadataRoute: '__next_metadata_route__',\n    metadataImageMeta: '__next_metadata_image_meta__'\n};\n\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9saWIvY29uc3RhbnRzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQXNETDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0Msb0JBQW9CO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNC43X0BiYWJlbCtjb3JlQDcuMjguM19Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHBsYXl3cmlnaHQrdGVzdEAxLjU1LjBfcmVhY3QtZF80N2ZmMzgxM2Q3OTA1NjZkZjI1NGEyMTYzNTUwYzJkNS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2xpYi9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBBQ1RJT05fU1VGRklYOiBudWxsLFxuICAgIEFQUF9ESVJfQUxJQVM6IG51bGwsXG4gICAgQ0FDSEVfT05FX1lFQVI6IG51bGwsXG4gICAgRE9UX05FWFRfQUxJQVM6IG51bGwsXG4gICAgRVNMSU5UX0RFRkFVTFRfRElSUzogbnVsbCxcbiAgICBHU1BfTk9fUkVUVVJORURfVkFMVUU6IG51bGwsXG4gICAgR1NTUF9DT01QT05FTlRfTUVNQkVSX0VSUk9SOiBudWxsLFxuICAgIEdTU1BfTk9fUkVUVVJORURfVkFMVUU6IG51bGwsXG4gICAgSU5GSU5JVEVfQ0FDSEU6IG51bGwsXG4gICAgSU5TVFJVTUVOVEFUSU9OX0hPT0tfRklMRU5BTUU6IG51bGwsXG4gICAgTUFUQ0hFRF9QQVRIX0hFQURFUjogbnVsbCxcbiAgICBNSURETEVXQVJFX0ZJTEVOQU1FOiBudWxsLFxuICAgIE1JRERMRVdBUkVfTE9DQVRJT05fUkVHRVhQOiBudWxsLFxuICAgIE5FWFRfQk9EWV9TVUZGSVg6IG51bGwsXG4gICAgTkVYVF9DQUNIRV9JTVBMSUNJVF9UQUdfSUQ6IG51bGwsXG4gICAgTkVYVF9DQUNIRV9SRVZBTElEQVRFRF9UQUdTX0hFQURFUjogbnVsbCxcbiAgICBORVhUX0NBQ0hFX1JFVkFMSURBVEVfVEFHX1RPS0VOX0hFQURFUjogbnVsbCxcbiAgICBORVhUX0NBQ0hFX1NPRlRfVEFHX01BWF9MRU5HVEg6IG51bGwsXG4gICAgTkVYVF9DQUNIRV9UQUdTX0hFQURFUjogbnVsbCxcbiAgICBORVhUX0NBQ0hFX1RBR19NQVhfSVRFTVM6IG51bGwsXG4gICAgTkVYVF9DQUNIRV9UQUdfTUFYX0xFTkdUSDogbnVsbCxcbiAgICBORVhUX0RBVEFfU1VGRklYOiBudWxsLFxuICAgIE5FWFRfSU5URVJDRVBUSU9OX01BUktFUl9QUkVGSVg6IG51bGwsXG4gICAgTkVYVF9NRVRBX1NVRkZJWDogbnVsbCxcbiAgICBORVhUX1FVRVJZX1BBUkFNX1BSRUZJWDogbnVsbCxcbiAgICBORVhUX1JFU1VNRV9IRUFERVI6IG51bGwsXG4gICAgTk9OX1NUQU5EQVJEX05PREVfRU5WOiBudWxsLFxuICAgIFBBR0VTX0RJUl9BTElBUzogbnVsbCxcbiAgICBQUkVSRU5ERVJfUkVWQUxJREFURV9IRUFERVI6IG51bGwsXG4gICAgUFJFUkVOREVSX1JFVkFMSURBVEVfT05MWV9HRU5FUkFURURfSEVBREVSOiBudWxsLFxuICAgIFBVQkxJQ19ESVJfTUlERExFV0FSRV9DT05GTElDVDogbnVsbCxcbiAgICBST09UX0RJUl9BTElBUzogbnVsbCxcbiAgICBSU0NfQUNUSU9OX0NMSUVOVF9XUkFQUEVSX0FMSUFTOiBudWxsLFxuICAgIFJTQ19BQ1RJT05fRU5DUllQVElPTl9BTElBUzogbnVsbCxcbiAgICBSU0NfQUNUSU9OX1BST1hZX0FMSUFTOiBudWxsLFxuICAgIFJTQ19BQ1RJT05fVkFMSURBVEVfQUxJQVM6IG51bGwsXG4gICAgUlNDX0NBQ0hFX1dSQVBQRVJfQUxJQVM6IG51bGwsXG4gICAgUlNDX0RZTkFNSUNfSU1QT1JUX1dSQVBQRVJfQUxJQVM6IG51bGwsXG4gICAgUlNDX01PRF9SRUZfUFJPWFlfQUxJQVM6IG51bGwsXG4gICAgUlNDX1BSRUZFVENIX1NVRkZJWDogbnVsbCxcbiAgICBSU0NfU0VHTUVOVFNfRElSX1NVRkZJWDogbnVsbCxcbiAgICBSU0NfU0VHTUVOVF9TVUZGSVg6IG51bGwsXG4gICAgUlNDX1NVRkZJWDogbnVsbCxcbiAgICBTRVJWRVJfUFJPUFNfRVhQT1JUX0VSUk9SOiBudWxsLFxuICAgIFNFUlZFUl9QUk9QU19HRVRfSU5JVF9QUk9QU19DT05GTElDVDogbnVsbCxcbiAgICBTRVJWRVJfUFJPUFNfU1NHX0NPTkZMSUNUOiBudWxsLFxuICAgIFNFUlZFUl9SVU5USU1FOiBudWxsLFxuICAgIFNTR19GQUxMQkFDS19FWFBPUlRfRVJST1I6IG51bGwsXG4gICAgU1NHX0dFVF9JTklUSUFMX1BST1BTX0NPTkZMSUNUOiBudWxsLFxuICAgIFNUQVRJQ19TVEFUVVNfUEFHRV9HRVRfSU5JVElBTF9QUk9QU19FUlJPUjogbnVsbCxcbiAgICBVTlNUQUJMRV9SRVZBTElEQVRFX1JFTkFNRV9FUlJPUjogbnVsbCxcbiAgICBXRUJQQUNLX0xBWUVSUzogbnVsbCxcbiAgICBXRUJQQUNLX1JFU09VUkNFX1FVRVJJRVM6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgQUNUSU9OX1NVRkZJWDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBBQ1RJT05fU1VGRklYO1xuICAgIH0sXG4gICAgQVBQX0RJUl9BTElBUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBBUFBfRElSX0FMSUFTO1xuICAgIH0sXG4gICAgQ0FDSEVfT05FX1lFQVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQ0FDSEVfT05FX1lFQVI7XG4gICAgfSxcbiAgICBET1RfTkVYVF9BTElBUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBET1RfTkVYVF9BTElBUztcbiAgICB9LFxuICAgIEVTTElOVF9ERUZBVUxUX0RJUlM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRVNMSU5UX0RFRkFVTFRfRElSUztcbiAgICB9LFxuICAgIEdTUF9OT19SRVRVUk5FRF9WQUxVRTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBHU1BfTk9fUkVUVVJORURfVkFMVUU7XG4gICAgfSxcbiAgICBHU1NQX0NPTVBPTkVOVF9NRU1CRVJfRVJST1I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gR1NTUF9DT01QT05FTlRfTUVNQkVSX0VSUk9SO1xuICAgIH0sXG4gICAgR1NTUF9OT19SRVRVUk5FRF9WQUxVRTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBHU1NQX05PX1JFVFVSTkVEX1ZBTFVFO1xuICAgIH0sXG4gICAgSU5GSU5JVEVfQ0FDSEU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSU5GSU5JVEVfQ0FDSEU7XG4gICAgfSxcbiAgICBJTlNUUlVNRU5UQVRJT05fSE9PS19GSUxFTkFNRTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBJTlNUUlVNRU5UQVRJT05fSE9PS19GSUxFTkFNRTtcbiAgICB9LFxuICAgIE1BVENIRURfUEFUSF9IRUFERVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTUFUQ0hFRF9QQVRIX0hFQURFUjtcbiAgICB9LFxuICAgIE1JRERMRVdBUkVfRklMRU5BTUU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTUlERExFV0FSRV9GSUxFTkFNRTtcbiAgICB9LFxuICAgIE1JRERMRVdBUkVfTE9DQVRJT05fUkVHRVhQOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE1JRERMRVdBUkVfTE9DQVRJT05fUkVHRVhQO1xuICAgIH0sXG4gICAgTkVYVF9CT0RZX1NVRkZJWDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX0JPRFlfU1VGRklYO1xuICAgIH0sXG4gICAgTkVYVF9DQUNIRV9JTVBMSUNJVF9UQUdfSUQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9DQUNIRV9JTVBMSUNJVF9UQUdfSUQ7XG4gICAgfSxcbiAgICBORVhUX0NBQ0hFX1JFVkFMSURBVEVEX1RBR1NfSEVBREVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfQ0FDSEVfUkVWQUxJREFURURfVEFHU19IRUFERVI7XG4gICAgfSxcbiAgICBORVhUX0NBQ0hFX1JFVkFMSURBVEVfVEFHX1RPS0VOX0hFQURFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX0NBQ0hFX1JFVkFMSURBVEVfVEFHX1RPS0VOX0hFQURFUjtcbiAgICB9LFxuICAgIE5FWFRfQ0FDSEVfU09GVF9UQUdfTUFYX0xFTkdUSDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX0NBQ0hFX1NPRlRfVEFHX01BWF9MRU5HVEg7XG4gICAgfSxcbiAgICBORVhUX0NBQ0hFX1RBR1NfSEVBREVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5FWFRfQ0FDSEVfVEFHU19IRUFERVI7XG4gICAgfSxcbiAgICBORVhUX0NBQ0hFX1RBR19NQVhfSVRFTVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9DQUNIRV9UQUdfTUFYX0lURU1TO1xuICAgIH0sXG4gICAgTkVYVF9DQUNIRV9UQUdfTUFYX0xFTkdUSDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX0NBQ0hFX1RBR19NQVhfTEVOR1RIO1xuICAgIH0sXG4gICAgTkVYVF9EQVRBX1NVRkZJWDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX0RBVEFfU1VGRklYO1xuICAgIH0sXG4gICAgTkVYVF9JTlRFUkNFUFRJT05fTUFSS0VSX1BSRUZJWDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX0lOVEVSQ0VQVElPTl9NQVJLRVJfUFJFRklYO1xuICAgIH0sXG4gICAgTkVYVF9NRVRBX1NVRkZJWDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBORVhUX01FVEFfU1VGRklYO1xuICAgIH0sXG4gICAgTkVYVF9RVUVSWV9QQVJBTV9QUkVGSVg6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9RVUVSWV9QQVJBTV9QUkVGSVg7XG4gICAgfSxcbiAgICBORVhUX1JFU1VNRV9IRUFERVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTkVYVF9SRVNVTUVfSEVBREVSO1xuICAgIH0sXG4gICAgTk9OX1NUQU5EQVJEX05PREVfRU5WOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE5PTl9TVEFOREFSRF9OT0RFX0VOVjtcbiAgICB9LFxuICAgIFBBR0VTX0RJUl9BTElBUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBQQUdFU19ESVJfQUxJQVM7XG4gICAgfSxcbiAgICBQUkVSRU5ERVJfUkVWQUxJREFURV9IRUFERVI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUFJFUkVOREVSX1JFVkFMSURBVEVfSEVBREVSO1xuICAgIH0sXG4gICAgUFJFUkVOREVSX1JFVkFMSURBVEVfT05MWV9HRU5FUkFURURfSEVBREVSOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFBSRVJFTkRFUl9SRVZBTElEQVRFX09OTFlfR0VORVJBVEVEX0hFQURFUjtcbiAgICB9LFxuICAgIFBVQkxJQ19ESVJfTUlERExFV0FSRV9DT05GTElDVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBQVUJMSUNfRElSX01JRERMRVdBUkVfQ09ORkxJQ1Q7XG4gICAgfSxcbiAgICBST09UX0RJUl9BTElBUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBST09UX0RJUl9BTElBUztcbiAgICB9LFxuICAgIFJTQ19BQ1RJT05fQ0xJRU5UX1dSQVBQRVJfQUxJQVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUlNDX0FDVElPTl9DTElFTlRfV1JBUFBFUl9BTElBUztcbiAgICB9LFxuICAgIFJTQ19BQ1RJT05fRU5DUllQVElPTl9BTElBUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSU0NfQUNUSU9OX0VOQ1JZUFRJT05fQUxJQVM7XG4gICAgfSxcbiAgICBSU0NfQUNUSU9OX1BST1hZX0FMSUFTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19BQ1RJT05fUFJPWFlfQUxJQVM7XG4gICAgfSxcbiAgICBSU0NfQUNUSU9OX1ZBTElEQVRFX0FMSUFTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19BQ1RJT05fVkFMSURBVEVfQUxJQVM7XG4gICAgfSxcbiAgICBSU0NfQ0FDSEVfV1JBUFBFUl9BTElBUzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSU0NfQ0FDSEVfV1JBUFBFUl9BTElBUztcbiAgICB9LFxuICAgIFJTQ19EWU5BTUlDX0lNUE9SVF9XUkFQUEVSX0FMSUFTOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19EWU5BTUlDX0lNUE9SVF9XUkFQUEVSX0FMSUFTO1xuICAgIH0sXG4gICAgUlNDX01PRF9SRUZfUFJPWFlfQUxJQVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUlNDX01PRF9SRUZfUFJPWFlfQUxJQVM7XG4gICAgfSxcbiAgICBSU0NfUFJFRkVUQ0hfU1VGRklYOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19QUkVGRVRDSF9TVUZGSVg7XG4gICAgfSxcbiAgICBSU0NfU0VHTUVOVFNfRElSX1NVRkZJWDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSU0NfU0VHTUVOVFNfRElSX1NVRkZJWDtcbiAgICB9LFxuICAgIFJTQ19TRUdNRU5UX1NVRkZJWDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBSU0NfU0VHTUVOVF9TVUZGSVg7XG4gICAgfSxcbiAgICBSU0NfU1VGRklYOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFJTQ19TVUZGSVg7XG4gICAgfSxcbiAgICBTRVJWRVJfUFJPUFNfRVhQT1JUX0VSUk9SOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNFUlZFUl9QUk9QU19FWFBPUlRfRVJST1I7XG4gICAgfSxcbiAgICBTRVJWRVJfUFJPUFNfR0VUX0lOSVRfUFJPUFNfQ09ORkxJQ1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU0VSVkVSX1BST1BTX0dFVF9JTklUX1BST1BTX0NPTkZMSUNUO1xuICAgIH0sXG4gICAgU0VSVkVSX1BST1BTX1NTR19DT05GTElDVDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBTRVJWRVJfUFJPUFNfU1NHX0NPTkZMSUNUO1xuICAgIH0sXG4gICAgU0VSVkVSX1JVTlRJTUU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU0VSVkVSX1JVTlRJTUU7XG4gICAgfSxcbiAgICBTU0dfRkFMTEJBQ0tfRVhQT1JUX0VSUk9SOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNTR19GQUxMQkFDS19FWFBPUlRfRVJST1I7XG4gICAgfSxcbiAgICBTU0dfR0VUX0lOSVRJQUxfUFJPUFNfQ09ORkxJQ1Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gU1NHX0dFVF9JTklUSUFMX1BST1BTX0NPTkZMSUNUO1xuICAgIH0sXG4gICAgU1RBVElDX1NUQVRVU19QQUdFX0dFVF9JTklUSUFMX1BST1BTX0VSUk9SOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFNUQVRJQ19TVEFUVVNfUEFHRV9HRVRfSU5JVElBTF9QUk9QU19FUlJPUjtcbiAgICB9LFxuICAgIFVOU1RBQkxFX1JFVkFMSURBVEVfUkVOQU1FX0VSUk9SOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFVOU1RBQkxFX1JFVkFMSURBVEVfUkVOQU1FX0VSUk9SO1xuICAgIH0sXG4gICAgV0VCUEFDS19MQVlFUlM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gV0VCUEFDS19MQVlFUlM7XG4gICAgfSxcbiAgICBXRUJQQUNLX1JFU09VUkNFX1FVRVJJRVM6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gV0VCUEFDS19SRVNPVVJDRV9RVUVSSUVTO1xuICAgIH1cbn0pO1xuY29uc3QgTkVYVF9RVUVSWV9QQVJBTV9QUkVGSVggPSAnbnh0UCc7XG5jb25zdCBORVhUX0lOVEVSQ0VQVElPTl9NQVJLRVJfUFJFRklYID0gJ254dEknO1xuY29uc3QgTUFUQ0hFRF9QQVRIX0hFQURFUiA9ICd4LW1hdGNoZWQtcGF0aCc7XG5jb25zdCBQUkVSRU5ERVJfUkVWQUxJREFURV9IRUFERVIgPSAneC1wcmVyZW5kZXItcmV2YWxpZGF0ZSc7XG5jb25zdCBQUkVSRU5ERVJfUkVWQUxJREFURV9PTkxZX0dFTkVSQVRFRF9IRUFERVIgPSAneC1wcmVyZW5kZXItcmV2YWxpZGF0ZS1pZi1nZW5lcmF0ZWQnO1xuY29uc3QgUlNDX1BSRUZFVENIX1NVRkZJWCA9ICcucHJlZmV0Y2gucnNjJztcbmNvbnN0IFJTQ19TRUdNRU5UU19ESVJfU1VGRklYID0gJy5zZWdtZW50cyc7XG5jb25zdCBSU0NfU0VHTUVOVF9TVUZGSVggPSAnLnNlZ21lbnQucnNjJztcbmNvbnN0IFJTQ19TVUZGSVggPSAnLnJzYyc7XG5jb25zdCBBQ1RJT05fU1VGRklYID0gJy5hY3Rpb24nO1xuY29uc3QgTkVYVF9EQVRBX1NVRkZJWCA9ICcuanNvbic7XG5jb25zdCBORVhUX01FVEFfU1VGRklYID0gJy5tZXRhJztcbmNvbnN0IE5FWFRfQk9EWV9TVUZGSVggPSAnLmJvZHknO1xuY29uc3QgTkVYVF9DQUNIRV9UQUdTX0hFQURFUiA9ICd4LW5leHQtY2FjaGUtdGFncyc7XG5jb25zdCBORVhUX0NBQ0hFX1JFVkFMSURBVEVEX1RBR1NfSEVBREVSID0gJ3gtbmV4dC1yZXZhbGlkYXRlZC10YWdzJztcbmNvbnN0IE5FWFRfQ0FDSEVfUkVWQUxJREFURV9UQUdfVE9LRU5fSEVBREVSID0gJ3gtbmV4dC1yZXZhbGlkYXRlLXRhZy10b2tlbic7XG5jb25zdCBORVhUX1JFU1VNRV9IRUFERVIgPSAnbmV4dC1yZXN1bWUnO1xuY29uc3QgTkVYVF9DQUNIRV9UQUdfTUFYX0lURU1TID0gMTI4O1xuY29uc3QgTkVYVF9DQUNIRV9UQUdfTUFYX0xFTkdUSCA9IDI1NjtcbmNvbnN0IE5FWFRfQ0FDSEVfU09GVF9UQUdfTUFYX0xFTkdUSCA9IDEwMjQ7XG5jb25zdCBORVhUX0NBQ0hFX0lNUExJQ0lUX1RBR19JRCA9ICdfTl9UXyc7XG5jb25zdCBDQUNIRV9PTkVfWUVBUiA9IDMxNTM2MDAwO1xuY29uc3QgSU5GSU5JVEVfQ0FDSEUgPSAweGZmZmZmZmZlO1xuY29uc3QgTUlERExFV0FSRV9GSUxFTkFNRSA9ICdtaWRkbGV3YXJlJztcbmNvbnN0IE1JRERMRVdBUkVfTE9DQVRJT05fUkVHRVhQID0gYCg/OnNyYy8pPyR7TUlERExFV0FSRV9GSUxFTkFNRX1gO1xuY29uc3QgSU5TVFJVTUVOVEFUSU9OX0hPT0tfRklMRU5BTUUgPSAnaW5zdHJ1bWVudGF0aW9uJztcbmNvbnN0IFBBR0VTX0RJUl9BTElBUyA9ICdwcml2YXRlLW5leHQtcGFnZXMnO1xuY29uc3QgRE9UX05FWFRfQUxJQVMgPSAncHJpdmF0ZS1kb3QtbmV4dCc7XG5jb25zdCBST09UX0RJUl9BTElBUyA9ICdwcml2YXRlLW5leHQtcm9vdC1kaXInO1xuY29uc3QgQVBQX0RJUl9BTElBUyA9ICdwcml2YXRlLW5leHQtYXBwLWRpcic7XG5jb25zdCBSU0NfTU9EX1JFRl9QUk9YWV9BTElBUyA9ICdwcml2YXRlLW5leHQtcnNjLW1vZC1yZWYtcHJveHknO1xuY29uc3QgUlNDX0FDVElPTl9WQUxJREFURV9BTElBUyA9ICdwcml2YXRlLW5leHQtcnNjLWFjdGlvbi12YWxpZGF0ZSc7XG5jb25zdCBSU0NfQUNUSU9OX1BST1hZX0FMSUFTID0gJ3ByaXZhdGUtbmV4dC1yc2Mtc2VydmVyLXJlZmVyZW5jZSc7XG5jb25zdCBSU0NfQ0FDSEVfV1JBUFBFUl9BTElBUyA9ICdwcml2YXRlLW5leHQtcnNjLWNhY2hlLXdyYXBwZXInO1xuY29uc3QgUlNDX0RZTkFNSUNfSU1QT1JUX1dSQVBQRVJfQUxJQVMgPSAncHJpdmF0ZS1uZXh0LXJzYy10cmFjay1keW5hbWljLWltcG9ydCc7XG5jb25zdCBSU0NfQUNUSU9OX0VOQ1JZUFRJT05fQUxJQVMgPSAncHJpdmF0ZS1uZXh0LXJzYy1hY3Rpb24tZW5jcnlwdGlvbic7XG5jb25zdCBSU0NfQUNUSU9OX0NMSUVOVF9XUkFQUEVSX0FMSUFTID0gJ3ByaXZhdGUtbmV4dC1yc2MtYWN0aW9uLWNsaWVudC13cmFwcGVyJztcbmNvbnN0IFBVQkxJQ19ESVJfTUlERExFV0FSRV9DT05GTElDVCA9IGBZb3UgY2FuIG5vdCBoYXZlIGEgJ19uZXh0JyBmb2xkZXIgaW5zaWRlIG9mIHlvdXIgcHVibGljIGZvbGRlci4gVGhpcyBjb25mbGljdHMgd2l0aCB0aGUgaW50ZXJuYWwgJy9fbmV4dCcgcm91dGUuIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3B1YmxpYy1uZXh0LWZvbGRlci1jb25mbGljdGA7XG5jb25zdCBTU0dfR0VUX0lOSVRJQUxfUFJPUFNfQ09ORkxJQ1QgPSBgWW91IGNhbiBub3QgdXNlIGdldEluaXRpYWxQcm9wcyB3aXRoIGdldFN0YXRpY1Byb3BzLiBUbyB1c2UgU1NHLCBwbGVhc2UgcmVtb3ZlIHlvdXIgZ2V0SW5pdGlhbFByb3BzYDtcbmNvbnN0IFNFUlZFUl9QUk9QU19HRVRfSU5JVF9QUk9QU19DT05GTElDVCA9IGBZb3UgY2FuIG5vdCB1c2UgZ2V0SW5pdGlhbFByb3BzIHdpdGggZ2V0U2VydmVyU2lkZVByb3BzLiBQbGVhc2UgcmVtb3ZlIGdldEluaXRpYWxQcm9wcy5gO1xuY29uc3QgU0VSVkVSX1BST1BTX1NTR19DT05GTElDVCA9IGBZb3UgY2FuIG5vdCB1c2UgZ2V0U3RhdGljUHJvcHMgb3IgZ2V0U3RhdGljUGF0aHMgd2l0aCBnZXRTZXJ2ZXJTaWRlUHJvcHMuIFRvIHVzZSBTU0csIHBsZWFzZSByZW1vdmUgZ2V0U2VydmVyU2lkZVByb3BzYDtcbmNvbnN0IFNUQVRJQ19TVEFUVVNfUEFHRV9HRVRfSU5JVElBTF9QUk9QU19FUlJPUiA9IGBjYW4gbm90IGhhdmUgZ2V0SW5pdGlhbFByb3BzL2dldFNlcnZlclNpZGVQcm9wcywgaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvNDA0LWdldC1pbml0aWFsLXByb3BzYDtcbmNvbnN0IFNFUlZFUl9QUk9QU19FWFBPUlRfRVJST1IgPSBgcGFnZXMgd2l0aCBcXGBnZXRTZXJ2ZXJTaWRlUHJvcHNcXGAgY2FuIG5vdCBiZSBleHBvcnRlZC4gU2VlIG1vcmUgaW5mbyBoZXJlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9nc3NwLWV4cG9ydGA7XG5jb25zdCBHU1BfTk9fUkVUVVJORURfVkFMVUUgPSAnWW91ciBgZ2V0U3RhdGljUHJvcHNgIGZ1bmN0aW9uIGRpZCBub3QgcmV0dXJuIGFuIG9iamVjdC4gRGlkIHlvdSBmb3JnZXQgdG8gYWRkIGEgYHJldHVybmA/JztcbmNvbnN0IEdTU1BfTk9fUkVUVVJORURfVkFMVUUgPSAnWW91ciBgZ2V0U2VydmVyU2lkZVByb3BzYCBmdW5jdGlvbiBkaWQgbm90IHJldHVybiBhbiBvYmplY3QuIERpZCB5b3UgZm9yZ2V0IHRvIGFkZCBhIGByZXR1cm5gPyc7XG5jb25zdCBVTlNUQUJMRV9SRVZBTElEQVRFX1JFTkFNRV9FUlJPUiA9ICdUaGUgYHVuc3RhYmxlX3JldmFsaWRhdGVgIHByb3BlcnR5IGlzIGF2YWlsYWJsZSBmb3IgZ2VuZXJhbCB1c2UuXFxuJyArICdQbGVhc2UgdXNlIGByZXZhbGlkYXRlYCBpbnN0ZWFkLic7XG5jb25zdCBHU1NQX0NPTVBPTkVOVF9NRU1CRVJfRVJST1IgPSBgY2FuIG5vdCBiZSBhdHRhY2hlZCB0byBhIHBhZ2UncyBjb21wb25lbnQgYW5kIG11c3QgYmUgZXhwb3J0ZWQgZnJvbSB0aGUgcGFnZS4gU2VlIG1vcmUgaW5mbyBoZXJlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9nc3NwLWNvbXBvbmVudC1tZW1iZXJgO1xuY29uc3QgTk9OX1NUQU5EQVJEX05PREVfRU5WID0gYFlvdSBhcmUgdXNpbmcgYSBub24tc3RhbmRhcmQgXCJOT0RFX0VOVlwiIHZhbHVlIGluIHlvdXIgZW52aXJvbm1lbnQuIFRoaXMgY3JlYXRlcyBpbmNvbnNpc3RlbmNpZXMgaW4gdGhlIHByb2plY3QgYW5kIGlzIHN0cm9uZ2x5IGFkdmlzZWQgYWdhaW5zdC4gUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9ub24tc3RhbmRhcmQtbm9kZS1lbnZgO1xuY29uc3QgU1NHX0ZBTExCQUNLX0VYUE9SVF9FUlJPUiA9IGBQYWdlcyB3aXRoIFxcYGZhbGxiYWNrXFxgIGVuYWJsZWQgaW4gXFxgZ2V0U3RhdGljUGF0aHNcXGAgY2FuIG5vdCBiZSBleHBvcnRlZC4gU2VlIG1vcmUgaW5mbyBoZXJlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9zc2ctZmFsbGJhY2stdHJ1ZS1leHBvcnRgO1xuY29uc3QgRVNMSU5UX0RFRkFVTFRfRElSUyA9IFtcbiAgICAnYXBwJyxcbiAgICAncGFnZXMnLFxuICAgICdjb21wb25lbnRzJyxcbiAgICAnbGliJyxcbiAgICAnc3JjJ1xuXTtcbmNvbnN0IFNFUlZFUl9SVU5USU1FID0ge1xuICAgIGVkZ2U6ICdlZGdlJyxcbiAgICBleHBlcmltZW50YWxFZGdlOiAnZXhwZXJpbWVudGFsLWVkZ2UnLFxuICAgIG5vZGVqczogJ25vZGVqcydcbn07XG4vKipcbiAqIFRoZSBuYW1lcyBvZiB0aGUgd2VicGFjayBsYXllcnMuIFRoZXNlIGxheWVycyBhcmUgdGhlIHByaW1pdGl2ZXMgZm9yIHRoZVxuICogd2VicGFjayBjaHVua3MuXG4gKi8gY29uc3QgV0VCUEFDS19MQVlFUlNfTkFNRVMgPSB7XG4gICAgLyoqXG4gICAqIFRoZSBsYXllciBmb3IgdGhlIHNoYXJlZCBjb2RlIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgc2VydmVyIGJ1bmRsZXMuXG4gICAqLyBzaGFyZWQ6ICdzaGFyZWQnLFxuICAgIC8qKlxuICAgKiBUaGUgbGF5ZXIgZm9yIHNlcnZlci1vbmx5IHJ1bnRpbWUgYW5kIHBpY2tpbmcgdXAgYHJlYWN0LXNlcnZlcmAgZXhwb3J0IGNvbmRpdGlvbnMuXG4gICAqIEluY2x1ZGluZyBhcHAgcm91dGVyIFJTQyBwYWdlcyBhbmQgYXBwIHJvdXRlciBjdXN0b20gcm91dGVzIGFuZCBtZXRhZGF0YSByb3V0ZXMuXG4gICAqLyByZWFjdFNlcnZlckNvbXBvbmVudHM6ICdyc2MnLFxuICAgIC8qKlxuICAgKiBTZXJ2ZXIgU2lkZSBSZW5kZXJpbmcgbGF5ZXIgZm9yIGFwcCAoc3NyKS5cbiAgICovIHNlcnZlclNpZGVSZW5kZXJpbmc6ICdzc3InLFxuICAgIC8qKlxuICAgKiBUaGUgYnJvd3NlciBjbGllbnQgYnVuZGxlIGxheWVyIGZvciBhY3Rpb25zLlxuICAgKi8gYWN0aW9uQnJvd3NlcjogJ2FjdGlvbi1icm93c2VyJyxcbiAgICAvKipcbiAgICogVGhlIE5vZGUuanMgYnVuZGxlIGxheWVyIGZvciB0aGUgQVBJIHJvdXRlcy5cbiAgICovIGFwaU5vZGU6ICdhcGktbm9kZScsXG4gICAgLyoqXG4gICAqIFRoZSBFZGdlIExpdGUgYnVuZGxlIGxheWVyIGZvciB0aGUgQVBJIHJvdXRlcy5cbiAgICovIGFwaUVkZ2U6ICdhcGktZWRnZScsXG4gICAgLyoqXG4gICAqIFRoZSBsYXllciBmb3IgdGhlIG1pZGRsZXdhcmUgY29kZS5cbiAgICovIG1pZGRsZXdhcmU6ICdtaWRkbGV3YXJlJyxcbiAgICAvKipcbiAgICogVGhlIGxheWVyIGZvciB0aGUgaW5zdHJ1bWVudGF0aW9uIGhvb2tzLlxuICAgKi8gaW5zdHJ1bWVudDogJ2luc3RydW1lbnQnLFxuICAgIC8qKlxuICAgKiBUaGUgbGF5ZXIgZm9yIGFzc2V0cyBvbiB0aGUgZWRnZS5cbiAgICovIGVkZ2VBc3NldDogJ2VkZ2UtYXNzZXQnLFxuICAgIC8qKlxuICAgKiBUaGUgYnJvd3NlciBjbGllbnQgYnVuZGxlIGxheWVyIGZvciBBcHAgZGlyZWN0b3J5LlxuICAgKi8gYXBwUGFnZXNCcm93c2VyOiAnYXBwLXBhZ2VzLWJyb3dzZXInLFxuICAgIC8qKlxuICAgKiBUaGUgYnJvd3NlciBjbGllbnQgYnVuZGxlIGxheWVyIGZvciBQYWdlcyBkaXJlY3RvcnkuXG4gICAqLyBwYWdlc0RpckJyb3dzZXI6ICdwYWdlcy1kaXItYnJvd3NlcicsXG4gICAgLyoqXG4gICAqIFRoZSBFZGdlIExpdGUgYnVuZGxlIGxheWVyIGZvciBQYWdlcyBkaXJlY3RvcnkuXG4gICAqLyBwYWdlc0RpckVkZ2U6ICdwYWdlcy1kaXItZWRnZScsXG4gICAgLyoqXG4gICAqIFRoZSBOb2RlLmpzIGJ1bmRsZSBsYXllciBmb3IgUGFnZXMgZGlyZWN0b3J5LlxuICAgKi8gcGFnZXNEaXJOb2RlOiAncGFnZXMtZGlyLW5vZGUnXG59O1xuY29uc3QgV0VCUEFDS19MQVlFUlMgPSB7XG4gICAgLi4uV0VCUEFDS19MQVlFUlNfTkFNRVMsXG4gICAgR1JPVVA6IHtcbiAgICAgICAgYnVpbHRpblJlYWN0OiBbXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5yZWFjdFNlcnZlckNvbXBvbmVudHMsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5hY3Rpb25Ccm93c2VyXG4gICAgICAgIF0sXG4gICAgICAgIHNlcnZlck9ubHk6IFtcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLnJlYWN0U2VydmVyQ29tcG9uZW50cyxcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLmFjdGlvbkJyb3dzZXIsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5pbnN0cnVtZW50LFxuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMubWlkZGxld2FyZVxuICAgICAgICBdLFxuICAgICAgICBuZXV0cmFsVGFyZ2V0OiBbXG4gICAgICAgICAgICAvLyBwYWdlcyBhcGlcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLmFwaU5vZGUsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5hcGlFZGdlXG4gICAgICAgIF0sXG4gICAgICAgIGNsaWVudE9ubHk6IFtcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLnNlcnZlclNpZGVSZW5kZXJpbmcsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5hcHBQYWdlc0Jyb3dzZXJcbiAgICAgICAgXSxcbiAgICAgICAgYnVuZGxlZDogW1xuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMucmVhY3RTZXJ2ZXJDb21wb25lbnRzLFxuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMuYWN0aW9uQnJvd3NlcixcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLnNlcnZlclNpZGVSZW5kZXJpbmcsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5hcHBQYWdlc0Jyb3dzZXIsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5zaGFyZWQsXG4gICAgICAgICAgICBXRUJQQUNLX0xBWUVSU19OQU1FUy5pbnN0cnVtZW50LFxuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMubWlkZGxld2FyZVxuICAgICAgICBdLFxuICAgICAgICBhcHBQYWdlczogW1xuICAgICAgICAgICAgLy8gYXBwIHJvdXRlciBwYWdlcyBhbmQgbGF5b3V0c1xuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMucmVhY3RTZXJ2ZXJDb21wb25lbnRzLFxuICAgICAgICAgICAgV0VCUEFDS19MQVlFUlNfTkFNRVMuc2VydmVyU2lkZVJlbmRlcmluZyxcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLmFwcFBhZ2VzQnJvd3NlcixcbiAgICAgICAgICAgIFdFQlBBQ0tfTEFZRVJTX05BTUVTLmFjdGlvbkJyb3dzZXJcbiAgICAgICAgXVxuICAgIH1cbn07XG5jb25zdCBXRUJQQUNLX1JFU09VUkNFX1FVRVJJRVMgPSB7XG4gICAgZWRnZVNTUkVudHJ5OiAnX19uZXh0X2VkZ2Vfc3NyX2VudHJ5X18nLFxuICAgIG1ldGFkYXRhOiAnX19uZXh0X21ldGFkYXRhX18nLFxuICAgIG1ldGFkYXRhUm91dGU6ICdfX25leHRfbWV0YWRhdGFfcm91dGVfXycsXG4gICAgbWV0YWRhdGFJbWFnZU1ldGE6ICdfX25leHRfbWV0YWRhdGFfaW1hZ2VfbWV0YV9fJ1xufTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/constants.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/is-api-route.js":
/*!************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/is-api-route.js ***!
  \************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"isAPIRoute\", ({\n    enumerable: true,\n    get: function() {\n        return isAPIRoute;\n    }\n}));\nfunction isAPIRoute(value) {\n    return value === '/api' || Boolean(value == null ? void 0 : value.startsWith('/api/'));\n}\n\n//# sourceMappingURL=is-api-route.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9saWIvaXMtYXBpLXJvdXRlLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsOENBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDO0FBQ0Y7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNC43X0BiYWJlbCtjb3JlQDcuMjguM19Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHBsYXl3cmlnaHQrdGVzdEAxLjU1LjBfcmVhY3QtZF80N2ZmMzgxM2Q3OTA1NjZkZjI1NGEyMTYzNTUwYzJkNS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2xpYi9pcy1hcGktcm91dGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0FQSVJvdXRlXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc0FQSVJvdXRlO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gaXNBUElSb3V0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJy9hcGknIHx8IEJvb2xlYW4odmFsdWUgPT0gbnVsbCA/IHZvaWQgMCA6IHZhbHVlLnN0YXJ0c1dpdGgoJy9hcGkvJykpO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pcy1hcGktcm91dGUuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/is-api-route.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/is-error.js":
/*!********************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/is-error.js ***!
  \********************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    /**\n * Checks whether the given value is a NextError.\n * This can be used to print a more detailed error message with properties like `code` & `digest`.\n */ default: function() {\n        return isError;\n    },\n    getProperError: function() {\n        return getProperError;\n    }\n});\nconst _isplainobject = __webpack_require__(/*! ../shared/lib/is-plain-object */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/is-plain-object.js\");\nfunction isError(err) {\n    return typeof err === 'object' && err !== null && 'name' in err && 'message' in err;\n}\nfunction safeStringify(obj) {\n    const seen = new WeakSet();\n    return JSON.stringify(obj, (_key, value)=>{\n        // If value is an object and already seen, replace with \"[Circular]\"\n        if (typeof value === 'object' && value !== null) {\n            if (seen.has(value)) {\n                return '[Circular]';\n            }\n            seen.add(value);\n        }\n        return value;\n    });\n}\nfunction getProperError(err) {\n    if (isError(err)) {\n        return err;\n    }\n    if (true) {\n        // provide better error for case where `throw undefined`\n        // is called in development\n        if (typeof err === 'undefined') {\n            return Object.defineProperty(new Error('An undefined error was thrown, ' + 'see here for more info: https://nextjs.org/docs/messages/threw-undefined'), \"__NEXT_ERROR_CODE\", {\n                value: \"E98\",\n                enumerable: false,\n                configurable: true\n            });\n        }\n        if (err === null) {\n            return Object.defineProperty(new Error('A null error was thrown, ' + 'see here for more info: https://nextjs.org/docs/messages/threw-undefined'), \"__NEXT_ERROR_CODE\", {\n                value: \"E336\",\n                enumerable: false,\n                configurable: true\n            });\n        }\n    }\n    return Object.defineProperty(new Error((0, _isplainobject.isPlainObject)(err) ? safeStringify(err) : err + ''), \"__NEXT_ERROR_CODE\", {\n        value: \"E394\",\n        enumerable: false,\n        configurable: true\n    });\n}\n\n//# sourceMappingURL=is-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9saWIvaXMtZXJyb3IuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixNQUFNLENBR0w7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsdUJBQXVCLG1CQUFPLENBQUMsNlBBQStCO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBc0M7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9saWIvaXMtZXJyb3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBkZWZhdWx0OiBudWxsLFxuICAgIGdldFByb3BlckVycm9yOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIC8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIHZhbHVlIGlzIGEgTmV4dEVycm9yLlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBwcmludCBhIG1vcmUgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZSB3aXRoIHByb3BlcnRpZXMgbGlrZSBgY29kZWAgJiBgZGlnZXN0YC5cbiAqLyBkZWZhdWx0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzRXJyb3I7XG4gICAgfSxcbiAgICBnZXRQcm9wZXJFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRQcm9wZXJFcnJvcjtcbiAgICB9XG59KTtcbmNvbnN0IF9pc3BsYWlub2JqZWN0ID0gcmVxdWlyZShcIi4uL3NoYXJlZC9saWIvaXMtcGxhaW4tb2JqZWN0XCIpO1xuZnVuY3Rpb24gaXNFcnJvcihlcnIpIHtcbiAgICByZXR1cm4gdHlwZW9mIGVyciA9PT0gJ29iamVjdCcgJiYgZXJyICE9PSBudWxsICYmICduYW1lJyBpbiBlcnIgJiYgJ21lc3NhZ2UnIGluIGVycjtcbn1cbmZ1bmN0aW9uIHNhZmVTdHJpbmdpZnkob2JqKSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KCk7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgKF9rZXksIHZhbHVlKT0+e1xuICAgICAgICAvLyBJZiB2YWx1ZSBpcyBhbiBvYmplY3QgYW5kIGFscmVhZHkgc2VlbiwgcmVwbGFjZSB3aXRoIFwiW0NpcmN1bGFyXVwiXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBnZXRQcm9wZXJFcnJvcihlcnIpIHtcbiAgICBpZiAoaXNFcnJvcihlcnIpKSB7XG4gICAgICAgIHJldHVybiBlcnI7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgICAvLyBwcm92aWRlIGJldHRlciBlcnJvciBmb3IgY2FzZSB3aGVyZSBgdGhyb3cgdW5kZWZpbmVkYFxuICAgICAgICAvLyBpcyBjYWxsZWQgaW4gZGV2ZWxvcG1lbnRcbiAgICAgICAgaWYgKHR5cGVvZiBlcnIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ldyBFcnJvcignQW4gdW5kZWZpbmVkIGVycm9yIHdhcyB0aHJvd24sICcgKyAnc2VlIGhlcmUgZm9yIG1vcmUgaW5mbzogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvdGhyZXctdW5kZWZpbmVkJyksIFwiX19ORVhUX0VSUk9SX0NPREVcIiwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBcIkU5OFwiLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXcgRXJyb3IoJ0EgbnVsbCBlcnJvciB3YXMgdGhyb3duLCAnICsgJ3NlZSBoZXJlIGZvciBtb3JlIGluZm86IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3RocmV3LXVuZGVmaW5lZCcpLCBcIl9fTkVYVF9FUlJPUl9DT0RFXCIsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCJFMzM2XCIsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ldyBFcnJvcigoMCwgX2lzcGxhaW5vYmplY3QuaXNQbGFpbk9iamVjdCkoZXJyKSA/IHNhZmVTdHJpbmdpZnkoZXJyKSA6IGVyciArICcnKSwgXCJfX05FWFRfRVJST1JfQ09ERVwiLCB7XG4gICAgICAgIHZhbHVlOiBcIkUzOTRcIixcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pcy1lcnJvci5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/is-error.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/require-instrumentation-client.js":
/*!******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/require-instrumentation-client.js ***!
  \******************************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/**\n * This module imports the client instrumentation hook from the project root.\n *\n * The `private-next-instrumentation-client` module is automatically aliased to\n * the `instrumentation-client.ts` file in the project root by webpack or turbopack.\n */ ;globalThis[\"_sentryRewritesTunnelPath\"] = \"/monitoring\";globalThis[\"SENTRY_RELEASE\"] = undefined;globalThis[\"_sentryBasePath\"] = undefined;globalThis[\"_sentryRewriteFramesAssetPrefixPath\"] = \"\";globalThis[\"_sentryAssetPrefix\"] = undefined;globalThis[\"_sentryExperimentalThirdPartyOriginStackFrames\"] = undefined;globalThis[\"_sentryRouteManifest\"] = \"{\\\"dynamicRoutes\\\":[{\\\"path\\\":\\\"/assessments/:id\\\",\\\"regex\\\":\\\"^/assessments/([^/]+)$\\\",\\\"paramNames\\\":[\\\"id\\\"]},{\\\"path\\\":\\\"/assessments/:id/results\\\",\\\"regex\\\":\\\"^/assessments/([^/]+)/results$\\\",\\\"paramNames\\\":[\\\"id\\\"]},{\\\"path\\\":\\\"/assessment/results/:token\\\",\\\"regex\\\":\\\"^/assessment/results/([^/]+)$\\\",\\\"paramNames\\\":[\\\"token\\\"]}],\\\"staticRoutes\\\":[{\\\"path\\\":\\\"/\\\"},{\\\"path\\\":\\\"/forgot-password\\\"},{\\\"path\\\":\\\"/login\\\"},{\\\"path\\\":\\\"/onboarding\\\"},{\\\"path\\\":\\\"/register\\\"},{\\\"path\\\":\\\"/reset-password\\\"},{\\\"path\\\":\\\"/signup\\\"},{\\\"path\\\":\\\"/signup-traditional\\\"},{\\\"path\\\":\\\"/analytics\\\"},{\\\"path\\\":\\\"/assessments\\\"},{\\\"path\\\":\\\"/assessments/new\\\"},{\\\"path\\\":\\\"/business-profile\\\"},{\\\"path\\\":\\\"/chat\\\"},{\\\"path\\\":\\\"/chat-test\\\"},{\\\"path\\\":\\\"/checkout\\\"},{\\\"path\\\":\\\"/compliance-wizard\\\"},{\\\"path\\\":\\\"/components\\\"},{\\\"path\\\":\\\"/dashboard\\\"},{\\\"path\\\":\\\"/dashboard-custom\\\"},{\\\"path\\\":\\\"/data-export-demo\\\"},{\\\"path\\\":\\\"/debug\\\"},{\\\"path\\\":\\\"/evidence\\\"},{\\\"path\\\":\\\"/forms\\\"},{\\\"path\\\":\\\"/loading-states\\\"},{\\\"path\\\":\\\"/modals\\\"},{\\\"path\\\":\\\"/policies\\\"},{\\\"path\\\":\\\"/policies/new\\\"},{\\\"path\\\":\\\"/pricing\\\"},{\\\"path\\\":\\\"/reports\\\"},{\\\"path\\\":\\\"/risks\\\"},{\\\"path\\\":\\\"/settings/billing\\\"},{\\\"path\\\":\\\"/settings/integrations\\\"},{\\\"path\\\":\\\"/settings/team\\\"},{\\\"path\\\":\\\"/test-quick-actions\\\"},{\\\"path\\\":\\\"/freemium\\\"},{\\\"path\\\":\\\"/freemium/assessment\\\"},{\\\"path\\\":\\\"/freemium/results\\\"},{\\\"path\\\":\\\"/assessment\\\"},{\\\"path\\\":\\\"/auth/callback\\\"},{\\\"path\\\":\\\"/demo/error-boundary\\\"},{\\\"path\\\":\\\"/demo/file-upload\\\"},{\\\"path\\\":\\\"/demo/loading-states\\\"},{\\\"path\\\":\\\"/design-system\\\"},{\\\"path\\\":\\\"/editor\\\"},{\\\"path\\\":\\\"/marketing\\\"},{\\\"path\\\":\\\"/monitoring/test-error\\\"},{\\\"path\\\":\\\"/showcase/components\\\"},{\\\"path\\\":\\\"/test-theme\\\"}]}\";\nif (true) {\n    const measureName = 'Client Instrumentation Hook';\n    const startTime = performance.now();\n    // eslint-disable-next-line @next/internal/typechecked-require -- Not a module.\n    module.exports = __webpack_require__(/*! private-next-instrumentation-client */ \"(app-pages-browser)/./instrumentation-client.ts\");\n    const endTime = performance.now();\n    const duration = endTime - startTime;\n    // Using 16ms threshold as it represents one frame (1000ms/60fps)\n    // This helps identify if the instrumentation hook initialization\n    // could potentially cause frame drops during development.\n    const THRESHOLD = 16;\n    if (duration > THRESHOLD) {\n        console.log(`[${measureName}] Slow execution detected: ${duration.toFixed(0)}ms (Note: Code download overhead is not included in this measurement)`);\n    }\n} else {}\n\n//# sourceMappingURL=require-instrumentation-client.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9saWIvcmVxdWlyZS1pbnN0cnVtZW50YXRpb24tY2xpZW50LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFpQixDQUFDLHdEQUF3RCx5Q0FBeUMsMENBQTBDLHVEQUF1RCw2Q0FBNkMseUVBQXlFLHVDQUF1QyxvQkFBb0IsMkZBQTJGLEVBQUUsMkdBQTJHLEVBQUUsK0dBQStHLHFCQUFxQixlQUFlLEVBQUUsOEJBQThCLEVBQUUsb0JBQW9CLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsNkJBQTZCLEVBQUUscUJBQXFCLEVBQUUsaUNBQWlDLEVBQUUsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUUsOEJBQThCLEVBQUUsK0JBQStCLEVBQUUsbUJBQW1CLEVBQUUsd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUUsZ0NBQWdDLEVBQUUseUJBQXlCLEVBQUUsd0JBQXdCLEVBQUUsK0JBQStCLEVBQUUsK0JBQStCLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsb0JBQW9CLEVBQUUsNkJBQTZCLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUsMkJBQTJCLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsK0JBQStCLEVBQUUsb0NBQW9DLEVBQUUsNEJBQTRCLEVBQUUsaUNBQWlDLEVBQUUsdUJBQXVCLEVBQUUsa0NBQWtDLEVBQUUsK0JBQStCLEVBQUUseUJBQXlCLEVBQUUsNEJBQTRCLEVBQUUsa0NBQWtDLEVBQUUsK0JBQStCLEVBQUUsa0NBQWtDLEVBQUUsNEJBQTRCLEVBQUUscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUUsb0NBQW9DLEVBQUUsa0NBQWtDLEVBQUUseUJBQXlCLEVBQUU7QUFDbGpFLElBQUksSUFBc0M7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsSUFBSSxrSUFBK0Q7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsWUFBWSw2QkFBNkIsb0JBQW9CO0FBQ3JGO0FBQ0EsRUFBRSxLQUFLLEVBR047O0FBRUQiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS40LjdfQGJhYmVsK2NvcmVANy4yOC4zX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMF9AcGxheXdyaWdodCt0ZXN0QDEuNTUuMF9yZWFjdC1kXzQ3ZmYzODEzZDc5MDU2NmRmMjU0YTIxNjM1NTBjMmQ1L25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbGliL3JlcXVpcmUtaW5zdHJ1bWVudGF0aW9uLWNsaWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgbW9kdWxlIGltcG9ydHMgdGhlIGNsaWVudCBpbnN0cnVtZW50YXRpb24gaG9vayBmcm9tIHRoZSBwcm9qZWN0IHJvb3QuXG4gKlxuICogVGhlIGBwcml2YXRlLW5leHQtaW5zdHJ1bWVudGF0aW9uLWNsaWVudGAgbW9kdWxlIGlzIGF1dG9tYXRpY2FsbHkgYWxpYXNlZCB0b1xuICogdGhlIGBpbnN0cnVtZW50YXRpb24tY2xpZW50LnRzYCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QgYnkgd2VicGFjayBvciB0dXJib3BhY2suXG4gKi8gXCJ1c2Ugc3RyaWN0XCI7O2dsb2JhbFRoaXNbXCJfc2VudHJ5UmV3cml0ZXNUdW5uZWxQYXRoXCJdID0gXCIvbW9uaXRvcmluZ1wiO2dsb2JhbFRoaXNbXCJTRU5UUllfUkVMRUFTRVwiXSA9IHVuZGVmaW5lZDtnbG9iYWxUaGlzW1wiX3NlbnRyeUJhc2VQYXRoXCJdID0gdW5kZWZpbmVkO2dsb2JhbFRoaXNbXCJfc2VudHJ5UmV3cml0ZUZyYW1lc0Fzc2V0UHJlZml4UGF0aFwiXSA9IFwiXCI7Z2xvYmFsVGhpc1tcIl9zZW50cnlBc3NldFByZWZpeFwiXSA9IHVuZGVmaW5lZDtnbG9iYWxUaGlzW1wiX3NlbnRyeUV4cGVyaW1lbnRhbFRoaXJkUGFydHlPcmlnaW5TdGFja0ZyYW1lc1wiXSA9IHVuZGVmaW5lZDtnbG9iYWxUaGlzW1wiX3NlbnRyeVJvdXRlTWFuaWZlc3RcIl0gPSBcIntcXFwiZHluYW1pY1JvdXRlc1xcXCI6W3tcXFwicGF0aFxcXCI6XFxcIi9hc3Nlc3NtZW50cy86aWRcXFwiLFxcXCJyZWdleFxcXCI6XFxcIl4vYXNzZXNzbWVudHMvKFteL10rKSRcXFwiLFxcXCJwYXJhbU5hbWVzXFxcIjpbXFxcImlkXFxcIl19LHtcXFwicGF0aFxcXCI6XFxcIi9hc3Nlc3NtZW50cy86aWQvcmVzdWx0c1xcXCIsXFxcInJlZ2V4XFxcIjpcXFwiXi9hc3Nlc3NtZW50cy8oW14vXSspL3Jlc3VsdHMkXFxcIixcXFwicGFyYW1OYW1lc1xcXCI6W1xcXCJpZFxcXCJdfSx7XFxcInBhdGhcXFwiOlxcXCIvYXNzZXNzbWVudC9yZXN1bHRzLzp0b2tlblxcXCIsXFxcInJlZ2V4XFxcIjpcXFwiXi9hc3Nlc3NtZW50L3Jlc3VsdHMvKFteL10rKSRcXFwiLFxcXCJwYXJhbU5hbWVzXFxcIjpbXFxcInRva2VuXFxcIl19XSxcXFwic3RhdGljUm91dGVzXFxcIjpbe1xcXCJwYXRoXFxcIjpcXFwiL1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9mb3Jnb3QtcGFzc3dvcmRcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvbG9naW5cXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvb25ib2FyZGluZ1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9yZWdpc3RlclxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9yZXNldC1wYXNzd29yZFxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9zaWdudXBcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvc2lnbnVwLXRyYWRpdGlvbmFsXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2FuYWx5dGljc1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9hc3Nlc3NtZW50c1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9hc3Nlc3NtZW50cy9uZXdcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvYnVzaW5lc3MtcHJvZmlsZVxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9jaGF0XFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2NoYXQtdGVzdFxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9jaGVja291dFxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9jb21wbGlhbmNlLXdpemFyZFxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9jb21wb25lbnRzXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2Rhc2hib2FyZFxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9kYXNoYm9hcmQtY3VzdG9tXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2RhdGEtZXhwb3J0LWRlbW9cXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvZGVidWdcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvZXZpZGVuY2VcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvZm9ybXNcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvbG9hZGluZy1zdGF0ZXNcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvbW9kYWxzXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL3BvbGljaWVzXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL3BvbGljaWVzL25ld1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9wcmljaW5nXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL3JlcG9ydHNcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvcmlza3NcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvc2V0dGluZ3MvYmlsbGluZ1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9zZXR0aW5ncy9pbnRlZ3JhdGlvbnNcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvc2V0dGluZ3MvdGVhbVxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi90ZXN0LXF1aWNrLWFjdGlvbnNcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvZnJlZW1pdW1cXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvZnJlZW1pdW0vYXNzZXNzbWVudFxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9mcmVlbWl1bS9yZXN1bHRzXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2Fzc2Vzc21lbnRcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvYXV0aC9jYWxsYmFja1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9kZW1vL2Vycm9yLWJvdW5kYXJ5XFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2RlbW8vZmlsZS11cGxvYWRcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvZGVtby9sb2FkaW5nLXN0YXRlc1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9kZXNpZ24tc3lzdGVtXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2VkaXRvclxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9tYXJrZXRpbmdcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvbW9uaXRvcmluZy90ZXN0LWVycm9yXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL3Nob3djYXNlL2NvbXBvbmVudHNcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvdGVzdC10aGVtZVxcXCJ9XX1cIjtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgIGNvbnN0IG1lYXN1cmVOYW1lID0gJ0NsaWVudCBJbnN0cnVtZW50YXRpb24gSG9vayc7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBuZXh0L2ludGVybmFsL3R5cGVjaGVja2VkLXJlcXVpcmUgLS0gTm90IGEgbW9kdWxlLlxuICAgIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgncHJpdmF0ZS1uZXh0LWluc3RydW1lbnRhdGlvbi1jbGllbnQnKTtcbiAgICBjb25zdCBlbmRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgY29uc3QgZHVyYXRpb24gPSBlbmRUaW1lIC0gc3RhcnRUaW1lO1xuICAgIC8vIFVzaW5nIDE2bXMgdGhyZXNob2xkIGFzIGl0IHJlcHJlc2VudHMgb25lIGZyYW1lICgxMDAwbXMvNjBmcHMpXG4gICAgLy8gVGhpcyBoZWxwcyBpZGVudGlmeSBpZiB0aGUgaW5zdHJ1bWVudGF0aW9uIGhvb2sgaW5pdGlhbGl6YXRpb25cbiAgICAvLyBjb3VsZCBwb3RlbnRpYWxseSBjYXVzZSBmcmFtZSBkcm9wcyBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gICAgY29uc3QgVEhSRVNIT0xEID0gMTY7XG4gICAgaWYgKGR1cmF0aW9uID4gVEhSRVNIT0xEKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbJHttZWFzdXJlTmFtZX1dIFNsb3cgZXhlY3V0aW9uIGRldGVjdGVkOiAke2R1cmF0aW9uLnRvRml4ZWQoMCl9bXMgKE5vdGU6IENvZGUgZG93bmxvYWQgb3ZlcmhlYWQgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMgbWVhc3VyZW1lbnQpYCk7XG4gICAgfVxufSBlbHNlIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQG5leHQvaW50ZXJuYWwvdHlwZWNoZWNrZWQtcmVxdWlyZSAtLSBOb3QgYSBtb2R1bGUuXG4gICAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdwcml2YXRlLW5leHQtaW5zdHJ1bWVudGF0aW9uLWNsaWVudCcpO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXF1aXJlLWluc3RydW1lbnRhdGlvbi1jbGllbnQuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/require-instrumentation-client.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/shared/console-error.js":
/*!******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/shared/console-error.js ***!
  \******************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("// To distinguish from React error.digest, we use a different symbol here to determine if the error is from console.error or unhandled promise rejection.\n\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    createConsoleError: function() {\n        return createConsoleError;\n    },\n    isConsoleError: function() {\n        return isConsoleError;\n    }\n});\nconst digestSym = Symbol.for('next.console.error.digest');\nfunction createConsoleError(message, environmentName) {\n    const error = typeof message === 'string' ? Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n        value: \"E394\",\n        enumerable: false,\n        configurable: true\n    }) : message;\n    error[digestSym] = 'NEXT_CONSOLE_ERROR';\n    if (environmentName && !error.environmentName) {\n        error.environmentName = environmentName;\n    }\n    return error;\n}\nconst isConsoleError = (error)=>{\n    return error && error[digestSym] === 'NEXT_CONSOLE_ERROR';\n};\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n  Object.defineProperty(exports.default, '__esModule', { value: true });\n  Object.assign(exports.default, exports);\n  module.exports = exports.default;\n}\n\n//# sourceMappingURL=console-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3NoYXJlZC9jb25zb2xlLWVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ2E7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixNQUFNLENBR0w7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RCxhQUFhO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3NoYXJlZC9jb25zb2xlLWVycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRvIGRpc3Rpbmd1aXNoIGZyb20gUmVhY3QgZXJyb3IuZGlnZXN0LCB3ZSB1c2UgYSBkaWZmZXJlbnQgc3ltYm9sIGhlcmUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBlcnJvciBpcyBmcm9tIGNvbnNvbGUuZXJyb3Igb3IgdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uLlxuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBjcmVhdGVDb25zb2xlRXJyb3I6IG51bGwsXG4gICAgaXNDb25zb2xlRXJyb3I6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgY3JlYXRlQ29uc29sZUVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbnNvbGVFcnJvcjtcbiAgICB9LFxuICAgIGlzQ29uc29sZUVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGlzQ29uc29sZUVycm9yO1xuICAgIH1cbn0pO1xuY29uc3QgZGlnZXN0U3ltID0gU3ltYm9sLmZvcignbmV4dC5jb25zb2xlLmVycm9yLmRpZ2VzdCcpO1xuZnVuY3Rpb24gY3JlYXRlQ29uc29sZUVycm9yKG1lc3NhZ2UsIGVudmlyb25tZW50TmFtZSkge1xuICAgIGNvbnN0IGVycm9yID0gdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ldyBFcnJvcihtZXNzYWdlKSwgXCJfX05FWFRfRVJST1JfQ09ERVwiLCB7XG4gICAgICAgIHZhbHVlOiBcIkUzOTRcIixcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pIDogbWVzc2FnZTtcbiAgICBlcnJvcltkaWdlc3RTeW1dID0gJ05FWFRfQ09OU09MRV9FUlJPUic7XG4gICAgaWYgKGVudmlyb25tZW50TmFtZSAmJiAhZXJyb3IuZW52aXJvbm1lbnROYW1lKSB7XG4gICAgICAgIGVycm9yLmVudmlyb25tZW50TmFtZSA9IGVudmlyb25tZW50TmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9yO1xufVxuY29uc3QgaXNDb25zb2xlRXJyb3IgPSAoZXJyb3IpPT57XG4gICAgcmV0dXJuIGVycm9yICYmIGVycm9yW2RpZ2VzdFN5bV0gPT09ICdORVhUX0NPTlNPTEVfRVJST1InO1xufTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc29sZS1lcnJvci5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/shared/console-error.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/shared/forward-logs-shared.js":
/*!************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/shared/forward-logs-shared.js ***!
  \************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    UNDEFINED_MARKER: function() {\n        return UNDEFINED_MARKER;\n    },\n    patchConsoleMethod: function() {\n        return patchConsoleMethod;\n    }\n});\nconst UNDEFINED_MARKER = '__next_tagged_undefined';\nfunction patchConsoleMethod(methodName, wrapper) {\n    const descriptor = Object.getOwnPropertyDescriptor(console, methodName);\n    if (descriptor && (descriptor.configurable || descriptor.writable) && typeof descriptor.value === 'function') {\n        const originalMethod = descriptor.value;\n        const originalName = Object.getOwnPropertyDescriptor(originalMethod, 'name');\n        const wrapperMethod = function() {\n            for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n                args[_key] = arguments[_key];\n            }\n            wrapper(methodName, ...args);\n            originalMethod.apply(this, args);\n        };\n        if (originalName) {\n            Object.defineProperty(wrapperMethod, 'name', originalName);\n        }\n        Object.defineProperty(console, methodName, {\n            value: wrapperMethod\n        });\n        return ()=>{\n            Object.defineProperty(console, methodName, {\n                value: originalMethod,\n                writable: descriptor.writable,\n                configurable: descriptor.configurable\n            });\n        };\n    }\n    return ()=>{};\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n  Object.defineProperty(exports.default, '__esModule', { value: true });\n  Object.assign(exports.default, exports);\n  module.exports = exports.default;\n}\n\n//# sourceMappingURL=forward-logs-shared.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3NoYXJlZC9mb3J3YXJkLWxvZ3Mtc2hhcmVkLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUdMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFLGFBQWE7QUFDNUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RCxhQUFhO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3NoYXJlZC9mb3J3YXJkLWxvZ3Mtc2hhcmVkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuMCAmJiAobW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgVU5ERUZJTkVEX01BUktFUjogbnVsbCxcbiAgICBwYXRjaENvbnNvbGVNZXRob2Q6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgVU5ERUZJTkVEX01BUktFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBVTkRFRklORURfTUFSS0VSO1xuICAgIH0sXG4gICAgcGF0Y2hDb25zb2xlTWV0aG9kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHBhdGNoQ29uc29sZU1ldGhvZDtcbiAgICB9XG59KTtcbmNvbnN0IFVOREVGSU5FRF9NQVJLRVIgPSAnX19uZXh0X3RhZ2dlZF91bmRlZmluZWQnO1xuZnVuY3Rpb24gcGF0Y2hDb25zb2xlTWV0aG9kKG1ldGhvZE5hbWUsIHdyYXBwZXIpIHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25zb2xlLCBtZXRob2ROYW1lKTtcbiAgICBpZiAoZGVzY3JpcHRvciAmJiAoZGVzY3JpcHRvci5jb25maWd1cmFibGUgfHwgZGVzY3JpcHRvci53cml0YWJsZSkgJiYgdHlwZW9mIGRlc2NyaXB0b3IudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgICAgICBjb25zdCBvcmlnaW5hbE5hbWUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9yaWdpbmFsTWV0aG9kLCAnbmFtZScpO1xuICAgICAgICBjb25zdCB3cmFwcGVyTWV0aG9kID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKyl7XG4gICAgICAgICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdyYXBwZXIobWV0aG9kTmFtZSwgLi4uYXJncyk7XG4gICAgICAgICAgICBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9yaWdpbmFsTmFtZSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdyYXBwZXJNZXRob2QsICduYW1lJywgb3JpZ2luYWxOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc29sZSwgbWV0aG9kTmFtZSwge1xuICAgICAgICAgICAgdmFsdWU6IHdyYXBwZXJNZXRob2RcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnNvbGUsIG1ldGhvZE5hbWUsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogb3JpZ2luYWxNZXRob2QsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IGRlc2NyaXB0b3Iud3JpdGFibGUsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiAoKT0+e307XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcndhcmQtbG9ncy1zaGFyZWQuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/shared/forward-logs-shared.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-error-boundary.js":
/*!******************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-error-boundary.js ***!
  \******************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"AppDevOverlayErrorBoundary\", ({\n    enumerable: true,\n    get: function() {\n        return AppDevOverlayErrorBoundary;\n    }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\nconst _nextdevtools = __webpack_require__(/*! next/dist/compiled/next-devtools */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/next-devtools/index.js\");\nconst _runtimeerrorhandler = __webpack_require__(/*! ../../../client/dev/runtime-error-handler */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/runtime-error-handler.js\");\nconst _errorboundary = __webpack_require__(/*! ../../../client/components/error-boundary */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/error-boundary.js\");\nconst _globalerror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../../client/components/builtin/global-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/builtin/global-error.js\"));\nconst _segmentexplorernode = __webpack_require__(/*! ./segment-explorer-node */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js\");\nfunction ErroredHtml(param) {\n    let { globalError: [GlobalError, globalErrorStyles], error } = param;\n    if (!error) {\n        return /*#__PURE__*/ (0, _jsxruntime.jsxs)(\"html\", {\n            children: [\n                /*#__PURE__*/ (0, _jsxruntime.jsx)(\"head\", {}),\n                /*#__PURE__*/ (0, _jsxruntime.jsx)(\"body\", {})\n            ]\n        });\n    }\n    return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_errorboundary.ErrorBoundary, {\n        errorComponent: _globalerror.default,\n        children: [\n            globalErrorStyles,\n            /*#__PURE__*/ (0, _jsxruntime.jsx)(GlobalError, {\n                error: error\n            })\n        ]\n    });\n}\nclass AppDevOverlayErrorBoundary extends _react.PureComponent {\n    static getDerivedStateFromError(error) {\n        _runtimeerrorhandler.RuntimeErrorHandler.hadRuntimeError = true;\n        return {\n            reactError: error\n        };\n    }\n    componentDidCatch(err) {\n        if ( true && err.message === _segmentexplorernode.SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE) {\n            return;\n        }\n        _nextdevtools.dispatcher.openErrorOverlay();\n    }\n    render() {\n        const { children, globalError } = this.props;\n        const { reactError } = this.state;\n        const fallback = /*#__PURE__*/ (0, _jsxruntime.jsx)(ErroredHtml, {\n            globalError: globalError,\n            error: reactError\n        });\n        return reactError !== null ? fallback : children;\n    }\n    constructor(...args){\n        super(...args), this.state = {\n            reactError: null\n        };\n    }\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n  Object.defineProperty(exports.default, '__esModule', { value: true });\n  Object.assign(exports.default, exports);\n  module.exports = exports.default;\n}\n\n//# sourceMappingURL=app-dev-overlay-error-boundary.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvYXBwLWRldi1vdmVybGF5LWVycm9yLWJvdW5kYXJ5LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsOERBQTZEO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsaUNBQWlDLG1CQUFPLENBQUMsdUtBQXlDO0FBQ2xGLG9CQUFvQixtQkFBTyxDQUFDLGlQQUFtQjtBQUMvQyxlQUFlLG1CQUFPLENBQUMsK05BQU87QUFDOUIsc0JBQXNCLG1CQUFPLENBQUMsa1FBQWtDO0FBQ2hFLDZCQUE2QixtQkFBTyxDQUFDLCtRQUEyQztBQUNoRix1QkFBdUIsbUJBQU8sQ0FBQywrUUFBMkM7QUFDMUUsOERBQThELG1CQUFPLENBQUMsMlJBQWlEO0FBQ3ZILDZCQUE2QixtQkFBTyxDQUFDLDhRQUF5QjtBQUM5RDtBQUNBLFVBQVUsdURBQXVEO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RDtBQUM3RCw2REFBNkQ7QUFDN0Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxLQUFzQztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QyxnQkFBZ0IsYUFBYTtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RCxhQUFhO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvYXBwLWRldi1vdmVybGF5LWVycm9yLWJvdW5kYXJ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXBwRGV2T3ZlcmxheUVycm9yQm91bmRhcnlcIiwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIEFwcERldk92ZXJsYXlFcnJvckJvdW5kYXJ5O1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9qc3hydW50aW1lID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpO1xuY29uc3QgX3JlYWN0ID0gcmVxdWlyZShcInJlYWN0XCIpO1xuY29uc3QgX25leHRkZXZ0b29scyA9IHJlcXVpcmUoXCJuZXh0L2Rpc3QvY29tcGlsZWQvbmV4dC1kZXZ0b29sc1wiKTtcbmNvbnN0IF9ydW50aW1lZXJyb3JoYW5kbGVyID0gcmVxdWlyZShcIi4uLy4uLy4uL2NsaWVudC9kZXYvcnVudGltZS1lcnJvci1oYW5kbGVyXCIpO1xuY29uc3QgX2Vycm9yYm91bmRhcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vY2xpZW50L2NvbXBvbmVudHMvZXJyb3ItYm91bmRhcnlcIik7XG5jb25zdCBfZ2xvYmFsZXJyb3IgPSAvKiNfX1BVUkVfXyovIF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdC5fKHJlcXVpcmUoXCIuLi8uLi8uLi9jbGllbnQvY29tcG9uZW50cy9idWlsdGluL2dsb2JhbC1lcnJvclwiKSk7XG5jb25zdCBfc2VnbWVudGV4cGxvcmVybm9kZSA9IHJlcXVpcmUoXCIuL3NlZ21lbnQtZXhwbG9yZXItbm9kZVwiKTtcbmZ1bmN0aW9uIEVycm9yZWRIdG1sKHBhcmFtKSB7XG4gICAgbGV0IHsgZ2xvYmFsRXJyb3I6IFtHbG9iYWxFcnJvciwgZ2xvYmFsRXJyb3JTdHlsZXNdLCBlcnJvciB9ID0gcGFyYW07XG4gICAgaWYgKCFlcnJvcikge1xuICAgICAgICByZXR1cm4gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4cykoXCJodG1sXCIsIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShcImhlYWRcIiwge30pLFxuICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoXCJib2R5XCIsIHt9KVxuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeHMpKF9lcnJvcmJvdW5kYXJ5LkVycm9yQm91bmRhcnksIHtcbiAgICAgICAgZXJyb3JDb21wb25lbnQ6IF9nbG9iYWxlcnJvci5kZWZhdWx0LFxuICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAgZ2xvYmFsRXJyb3JTdHlsZXMsXG4gICAgICAgICAgICAvKiNfX1BVUkVfXyovICgwLCBfanN4cnVudGltZS5qc3gpKEdsb2JhbEVycm9yLCB7XG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgfSk7XG59XG5jbGFzcyBBcHBEZXZPdmVybGF5RXJyb3JCb3VuZGFyeSBleHRlbmRzIF9yZWFjdC5QdXJlQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGVycm9yKSB7XG4gICAgICAgIF9ydW50aW1lZXJyb3JoYW5kbGVyLlJ1bnRpbWVFcnJvckhhbmRsZXIuaGFkUnVudGltZUVycm9yID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlYWN0RXJyb3I6IGVycm9yXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbXBvbmVudERpZENhdGNoKGVycikge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcgJiYgZXJyLm1lc3NhZ2UgPT09IF9zZWdtZW50ZXhwbG9yZXJub2RlLlNFR01FTlRfRVhQTE9SRVJfU0lNVUxBVEVEX0VSUk9SX01FU1NBR0UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBfbmV4dGRldnRvb2xzLmRpc3BhdGNoZXIub3BlbkVycm9yT3ZlcmxheSgpO1xuICAgIH1cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIGdsb2JhbEVycm9yIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCB7IHJlYWN0RXJyb3IgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGNvbnN0IGZhbGxiYWNrID0gLyojX19QVVJFX18qLyAoMCwgX2pzeHJ1bnRpbWUuanN4KShFcnJvcmVkSHRtbCwge1xuICAgICAgICAgICAgZ2xvYmFsRXJyb3I6IGdsb2JhbEVycm9yLFxuICAgICAgICAgICAgZXJyb3I6IHJlYWN0RXJyb3JcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZWFjdEVycm9yICE9PSBudWxsID8gZmFsbGJhY2sgOiBjaGlsZHJlbjtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoLi4uYXJncyl7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3MpLCB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgcmVhY3RFcnJvcjogbnVsbFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXBwLWRldi1vdmVybGF5LWVycm9yLWJvdW5kYXJ5LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-error-boundary.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-setup.js":
/*!*********************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-setup.js ***!
  \*********************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nconst _interceptconsoleerror = __webpack_require__(/*! ./errors/intercept-console-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/intercept-console-error.js\");\nconst _useerrorhandler = __webpack_require__(/*! ./errors/use-error-handler */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/use-error-handler.js\");\nconst _forwardlogs = __webpack_require__(/*! ./forward-logs */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/forward-logs.js\");\n(0, _useerrorhandler.handleGlobalErrors)();\n(0, _interceptconsoleerror.patchConsoleError)();\nif (_forwardlogs.isTerminalLoggingEnabled) {\n    (0, _forwardlogs.initializeDebugLogForwarding)('app');\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n  Object.defineProperty(exports.default, '__esModule', { value: true });\n  Object.assign(exports.default, exports);\n  module.exports = exports.default;\n}\n\n//# sourceMappingURL=app-dev-overlay-setup.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvYXBwLWRldi1vdmVybGF5LXNldHVwLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsK0JBQStCLG1CQUFPLENBQUMsZ1NBQWtDO0FBQ3pFLHlCQUF5QixtQkFBTyxDQUFDLG9SQUE0QjtBQUM3RCxxQkFBcUIsbUJBQU8sQ0FBQyw0UEFBZ0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RCxhQUFhO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvYXBwLWRldi1vdmVybGF5LXNldHVwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuY29uc3QgX2ludGVyY2VwdGNvbnNvbGVlcnJvciA9IHJlcXVpcmUoXCIuL2Vycm9ycy9pbnRlcmNlcHQtY29uc29sZS1lcnJvclwiKTtcbmNvbnN0IF91c2VlcnJvcmhhbmRsZXIgPSByZXF1aXJlKFwiLi9lcnJvcnMvdXNlLWVycm9yLWhhbmRsZXJcIik7XG5jb25zdCBfZm9yd2FyZGxvZ3MgPSByZXF1aXJlKFwiLi9mb3J3YXJkLWxvZ3NcIik7XG4oMCwgX3VzZWVycm9yaGFuZGxlci5oYW5kbGVHbG9iYWxFcnJvcnMpKCk7XG4oMCwgX2ludGVyY2VwdGNvbnNvbGVlcnJvci5wYXRjaENvbnNvbGVFcnJvcikoKTtcbmlmIChfZm9yd2FyZGxvZ3MuaXNUZXJtaW5hbExvZ2dpbmdFbmFibGVkKSB7XG4gICAgKDAsIF9mb3J3YXJkbG9ncy5pbml0aWFsaXplRGVidWdMb2dGb3J3YXJkaW5nKSgnYXBwJyk7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFwcC1kZXYtb3ZlcmxheS1zZXR1cC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-setup.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/client-entry.js":
/*!************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/client-entry.js ***!
  \************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"createRootLevelDevOverlayElement\", ({\n    enumerable: true,\n    get: function() {\n        return createRootLevelDevOverlayElement;\n    }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"));\nconst _getsocketurl = __webpack_require__(/*! ../../../client/dev/hot-reloader/get-socket-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/dev/hot-reloader/get-socket-url.js\");\nconst _hotreloadertypes = __webpack_require__(/*! ../../../server/dev/hot-reloader-types */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/server/dev/hot-reloader-types.js\");\nconst _globalerror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../../client/components/builtin/global-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/builtin/global-error.js\"));\nconst _appdevoverlayerrorboundary = __webpack_require__(/*! ./app-dev-overlay-error-boundary */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/app-dev-overlay-error-boundary.js\");\nfunction createRootLevelDevOverlayElement(reactEl) {\n    const socketUrl = (0, _getsocketurl.getSocketUrl)( false || '');\n    const socket = new window.WebSocket(\"\" + socketUrl + \"/_next/webpack-hmr\");\n    // add minimal \"hot reload\" support for RSC errors\n    const handler = (event)=>{\n        let obj;\n        try {\n            obj = JSON.parse(event.data);\n        } catch (e) {}\n        if (!obj || !('action' in obj)) {\n            return;\n        }\n        if (obj.action === _hotreloadertypes.HMR_ACTIONS_SENT_TO_BROWSER.SERVER_COMPONENT_CHANGES) {\n            window.location.reload();\n        }\n    };\n    socket.addEventListener('message', handler);\n    return /*#__PURE__*/ (0, _jsxruntime.jsx)(_appdevoverlayerrorboundary.AppDevOverlayErrorBoundary, {\n        globalError: [\n            _globalerror.default,\n            null\n        ],\n        children: reactEl\n    });\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n  Object.defineProperty(exports.default, '__esModule', { value: true });\n  Object.assign(exports.default, exports);\n  module.exports = exports.default;\n}\n\n//# sourceMappingURL=client-entry.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvY2xpZW50LWVudHJ5LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0Ysb0VBQW1FO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsaUNBQWlDLG1CQUFPLENBQUMsdUtBQXlDO0FBQ2xGLG9CQUFvQixtQkFBTyxDQUFDLGlQQUFtQjtBQUMvQyx3REFBd0QsbUJBQU8sQ0FBQywrTkFBTztBQUN2RSxzQkFBc0IsbUJBQU8sQ0FBQywyUkFBaUQ7QUFDL0UsMEJBQTBCLG1CQUFPLENBQUMseVFBQXdDO0FBQzFFLDhEQUE4RCxtQkFBTyxDQUFDLDJSQUFpRDtBQUN2SCxvQ0FBb0MsbUJBQU8sQ0FBQyxnU0FBa0M7QUFDOUU7QUFDQSxzREFBc0QsTUFBK0I7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSx5REFBeUQsYUFBYTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS40LjdfQGJhYmVsK2NvcmVANy4yOC4zX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMF9AcGxheXdyaWdodCt0ZXN0QDEuNTUuMF9yZWFjdC1kXzQ3ZmYzODEzZDc5MDU2NmRmMjU0YTIxNjM1NTBjMmQ1L25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2NsaWVudC1lbnRyeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJvb3RMZXZlbERldk92ZXJsYXlFbGVtZW50XCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVSb290TGV2ZWxEZXZPdmVybGF5RWxlbWVudDtcbiAgICB9XG59KTtcbmNvbnN0IF9pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdCA9IHJlcXVpcmUoXCJAc3djL2hlbHBlcnMvXy9faW50ZXJvcF9yZXF1aXJlX2RlZmF1bHRcIik7XG5jb25zdCBfanN4cnVudGltZSA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9nZXRzb2NrZXR1cmwgPSByZXF1aXJlKFwiLi4vLi4vLi4vY2xpZW50L2Rldi9ob3QtcmVsb2FkZXIvZ2V0LXNvY2tldC11cmxcIik7XG5jb25zdCBfaG90cmVsb2FkZXJ0eXBlcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9zZXJ2ZXIvZGV2L2hvdC1yZWxvYWRlci10eXBlc1wiKTtcbmNvbnN0IF9nbG9iYWxlcnJvciA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcIi4uLy4uLy4uL2NsaWVudC9jb21wb25lbnRzL2J1aWx0aW4vZ2xvYmFsLWVycm9yXCIpKTtcbmNvbnN0IF9hcHBkZXZvdmVybGF5ZXJyb3Jib3VuZGFyeSA9IHJlcXVpcmUoXCIuL2FwcC1kZXYtb3ZlcmxheS1lcnJvci1ib3VuZGFyeVwiKTtcbmZ1bmN0aW9uIGNyZWF0ZVJvb3RMZXZlbERldk92ZXJsYXlFbGVtZW50KHJlYWN0RWwpIHtcbiAgICBjb25zdCBzb2NrZXRVcmwgPSAoMCwgX2dldHNvY2tldHVybC5nZXRTb2NrZXRVcmwpKHByb2Nlc3MuZW52Ll9fTkVYVF9BU1NFVF9QUkVGSVggfHwgJycpO1xuICAgIGNvbnN0IHNvY2tldCA9IG5ldyB3aW5kb3cuV2ViU29ja2V0KFwiXCIgKyBzb2NrZXRVcmwgKyBcIi9fbmV4dC93ZWJwYWNrLWhtclwiKTtcbiAgICAvLyBhZGQgbWluaW1hbCBcImhvdCByZWxvYWRcIiBzdXBwb3J0IGZvciBSU0MgZXJyb3JzXG4gICAgY29uc3QgaGFuZGxlciA9IChldmVudCk9PntcbiAgICAgICAgbGV0IG9iajtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG9iaiA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIGlmICghb2JqIHx8ICEoJ2FjdGlvbicgaW4gb2JqKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvYmouYWN0aW9uID09PSBfaG90cmVsb2FkZXJ0eXBlcy5ITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVIuU0VSVkVSX0NPTVBPTkVOVF9DSEFOR0VTKSB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcik7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gKDAsIF9qc3hydW50aW1lLmpzeCkoX2FwcGRldm92ZXJsYXllcnJvcmJvdW5kYXJ5LkFwcERldk92ZXJsYXlFcnJvckJvdW5kYXJ5LCB7XG4gICAgICAgIGdsb2JhbEVycm9yOiBbXG4gICAgICAgICAgICBfZ2xvYmFsZXJyb3IuZGVmYXVsdCxcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgXSxcbiAgICAgICAgY2hpbGRyZW46IHJlYWN0RWxcbiAgICB9KTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2xpZW50LWVudHJ5LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/client-entry.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/index.js":
/*!************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/index.js ***!
  \************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    decorateDevError: function() {\n        return _stitchederror.decorateDevError;\n    },\n    handleClientError: function() {\n        return _useerrorhandler.handleClientError;\n    },\n    originConsoleError: function() {\n        return _interceptconsoleerror.originConsoleError;\n    }\n});\nconst _interceptconsoleerror = __webpack_require__(/*! ./intercept-console-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/intercept-console-error.js\");\nconst _useerrorhandler = __webpack_require__(/*! ./use-error-handler */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/use-error-handler.js\");\nconst _stitchederror = __webpack_require__(/*! ./stitched-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\");\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n  Object.defineProperty(exports.default, '__esModule', { value: true });\n  Object.assign(exports.default, exports);\n  module.exports = exports.default;\n}\n\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvZXJyb3JzL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUlMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsK0JBQStCLG1CQUFPLENBQUMseVJBQTJCO0FBQ2xFLHlCQUF5QixtQkFBTyxDQUFDLDZRQUFxQjtBQUN0RCx1QkFBdUIsbUJBQU8sQ0FBQyx1UUFBa0I7O0FBRWpEO0FBQ0EseURBQXlELGFBQWE7QUFDdEU7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNC43X0BiYWJlbCtjb3JlQDcuMjguM19Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHBsYXl3cmlnaHQrdGVzdEAxLjU1LjBfcmVhY3QtZF80N2ZmMzgxM2Q3OTA1NjZkZjI1NGEyMTYzNTUwYzJkNS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9lcnJvcnMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBkZWNvcmF0ZURldkVycm9yOiBudWxsLFxuICAgIGhhbmRsZUNsaWVudEVycm9yOiBudWxsLFxuICAgIG9yaWdpbkNvbnNvbGVFcnJvcjogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBkZWNvcmF0ZURldkVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9zdGl0Y2hlZGVycm9yLmRlY29yYXRlRGV2RXJyb3I7XG4gICAgfSxcbiAgICBoYW5kbGVDbGllbnRFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBfdXNlZXJyb3JoYW5kbGVyLmhhbmRsZUNsaWVudEVycm9yO1xuICAgIH0sXG4gICAgb3JpZ2luQ29uc29sZUVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9pbnRlcmNlcHRjb25zb2xlZXJyb3Iub3JpZ2luQ29uc29sZUVycm9yO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyY2VwdGNvbnNvbGVlcnJvciA9IHJlcXVpcmUoXCIuL2ludGVyY2VwdC1jb25zb2xlLWVycm9yXCIpO1xuY29uc3QgX3VzZWVycm9yaGFuZGxlciA9IHJlcXVpcmUoXCIuL3VzZS1lcnJvci1oYW5kbGVyXCIpO1xuY29uc3QgX3N0aXRjaGVkZXJyb3IgPSByZXF1aXJlKFwiLi9zdGl0Y2hlZC1lcnJvclwiKTtcblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/intercept-console-error.js":
/*!******************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/intercept-console-error.js ***!
  \******************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    originConsoleError: function() {\n        return originConsoleError;\n    },\n    patchConsoleError: function() {\n        return patchConsoleError;\n    }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../../../lib/is-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/is-error.js\"));\nconst _isnextroutererror = __webpack_require__(/*! ../../../../client/components/is-next-router-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/is-next-router-error.js\");\nconst _useerrorhandler = __webpack_require__(/*! ./use-error-handler */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/use-error-handler.js\");\nconst _console = __webpack_require__(/*! ../../../../client/lib/console */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/lib/console.js\");\nconst _forwardlogs = __webpack_require__(/*! ../forward-logs */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/forward-logs.js\");\nconst originConsoleError = globalThis.console.error;\nfunction patchConsoleError() {\n    // Ensure it's only patched once\n    if (typeof window === 'undefined') {\n        return;\n    }\n    window.console.error = function error() {\n        for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n            args[_key] = arguments[_key];\n        }\n        let maybeError;\n        if (true) {\n            const { error: replayedError } = (0, _console.parseConsoleArgs)(args);\n            if (replayedError) {\n                maybeError = replayedError;\n            } else if ((0, _iserror.default)(args[0])) {\n                maybeError = args[0];\n            } else {\n                // See https://github.com/facebook/react/blob/d50323eb845c5fde0d720cae888bf35dedd05506/packages/react-reconciler/src/ReactFiberErrorLogger.js#L78\n                maybeError = args[1];\n            }\n        } else {}\n        if (!(0, _isnextroutererror.isNextRouterError)(maybeError)) {\n            if (true) {\n                (0, _useerrorhandler.handleConsoleError)(// replayed errors have their own complex format string that should be used,\n                // but if we pass the error directly, `handleClientError` will ignore it\n                maybeError, args);\n            }\n            if (_forwardlogs.isTerminalLoggingEnabled) {\n                (0, _forwardlogs.forwardErrorLog)(args);\n            }\n            originConsoleError.apply(window.console, args);\n        }\n    };\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n  Object.defineProperty(exports.default, '__esModule', { value: true });\n  Object.assign(exports.default, exports);\n  module.exports = exports.default;\n}\n\n//# sourceMappingURL=intercept-console-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvZXJyb3JzL2ludGVyY2VwdC1jb25zb2xlLWVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUdMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELGlDQUFpQyxtQkFBTyxDQUFDLHVLQUF5QztBQUNsRiwwREFBMEQsbUJBQU8sQ0FBQywwT0FBMEI7QUFDNUYsMkJBQTJCLG1CQUFPLENBQUMsOFJBQW9EO0FBQ3ZGLHlCQUF5QixtQkFBTyxDQUFDLDZRQUFxQjtBQUN0RCxpQkFBaUIsbUJBQU8sQ0FBQyxzUEFBZ0M7QUFDekQscUJBQXFCLG1CQUFPLENBQUMsNlBBQWlCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkVBQTJFLGFBQWE7QUFDeEY7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFxQztBQUNqRCxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsVUFBVSxLQUFLLEVBRU47QUFDVDtBQUNBLGdCQUFnQixJQUFxQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlELGFBQWE7QUFDdEU7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNC43X0BiYWJlbCtjb3JlQDcuMjguM19Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHBsYXl3cmlnaHQrdGVzdEAxLjU1LjBfcmVhY3QtZF80N2ZmMzgxM2Q3OTA1NjZkZjI1NGEyMTYzNTUwYzJkNS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9lcnJvcnMvaW50ZXJjZXB0LWNvbnNvbGUtZXJyb3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBvcmlnaW5Db25zb2xlRXJyb3I6IG51bGwsXG4gICAgcGF0Y2hDb25zb2xlRXJyb3I6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgb3JpZ2luQ29uc29sZUVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpbkNvbnNvbGVFcnJvcjtcbiAgICB9LFxuICAgIHBhdGNoQ29uc29sZUVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHBhdGNoQ29uc29sZUVycm9yO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9pc2Vycm9yID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi4vLi4vLi4vLi4vbGliL2lzLWVycm9yXCIpKTtcbmNvbnN0IF9pc25leHRyb3V0ZXJlcnJvciA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9jbGllbnQvY29tcG9uZW50cy9pcy1uZXh0LXJvdXRlci1lcnJvclwiKTtcbmNvbnN0IF91c2VlcnJvcmhhbmRsZXIgPSByZXF1aXJlKFwiLi91c2UtZXJyb3ItaGFuZGxlclwiKTtcbmNvbnN0IF9jb25zb2xlID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL2NsaWVudC9saWIvY29uc29sZVwiKTtcbmNvbnN0IF9mb3J3YXJkbG9ncyA9IHJlcXVpcmUoXCIuLi9mb3J3YXJkLWxvZ3NcIik7XG5jb25zdCBvcmlnaW5Db25zb2xlRXJyb3IgPSBnbG9iYWxUaGlzLmNvbnNvbGUuZXJyb3I7XG5mdW5jdGlvbiBwYXRjaENvbnNvbGVFcnJvcigpIHtcbiAgICAvLyBFbnN1cmUgaXQncyBvbmx5IHBhdGNoZWQgb25jZVxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0gZnVuY3Rpb24gZXJyb3IoKSB7XG4gICAgICAgIGZvcih2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKXtcbiAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1heWJlRXJyb3I7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCB7IGVycm9yOiByZXBsYXllZEVycm9yIH0gPSAoMCwgX2NvbnNvbGUucGFyc2VDb25zb2xlQXJncykoYXJncyk7XG4gICAgICAgICAgICBpZiAocmVwbGF5ZWRFcnJvcikge1xuICAgICAgICAgICAgICAgIG1heWJlRXJyb3IgPSByZXBsYXllZEVycm9yO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzZXJyb3IuZGVmYXVsdCkoYXJnc1swXSkpIHtcbiAgICAgICAgICAgICAgICBtYXliZUVycm9yID0gYXJnc1swXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL2Q1MDMyM2ViODQ1YzVmZGUwZDcyMGNhZTg4OGJmMzVkZWRkMDU1MDYvcGFja2FnZXMvcmVhY3QtcmVjb25jaWxlci9zcmMvUmVhY3RGaWJlckVycm9yTG9nZ2VyLmpzI0w3OFxuICAgICAgICAgICAgICAgIG1heWJlRXJyb3IgPSBhcmdzWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWF5YmVFcnJvciA9IGFyZ3NbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoMCwgX2lzbmV4dHJvdXRlcmVycm9yLmlzTmV4dFJvdXRlckVycm9yKShtYXliZUVycm9yKSkge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAoMCwgX3VzZWVycm9yaGFuZGxlci5oYW5kbGVDb25zb2xlRXJyb3IpKC8vIHJlcGxheWVkIGVycm9ycyBoYXZlIHRoZWlyIG93biBjb21wbGV4IGZvcm1hdCBzdHJpbmcgdGhhdCBzaG91bGQgYmUgdXNlZCxcbiAgICAgICAgICAgICAgICAvLyBidXQgaWYgd2UgcGFzcyB0aGUgZXJyb3IgZGlyZWN0bHksIGBoYW5kbGVDbGllbnRFcnJvcmAgd2lsbCBpZ25vcmUgaXRcbiAgICAgICAgICAgICAgICBtYXliZUVycm9yLCBhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfZm9yd2FyZGxvZ3MuaXNUZXJtaW5hbExvZ2dpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgKDAsIF9mb3J3YXJkbG9ncy5mb3J3YXJkRXJyb3JMb2cpKGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3JpZ2luQ29uc29sZUVycm9yLmFwcGx5KHdpbmRvdy5jb25zb2xlLCBhcmdzKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVyY2VwdC1jb25zb2xlLWVycm9yLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/intercept-console-error.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/replay-ssr-only-errors.js":
/*!*****************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/replay-ssr-only-errors.js ***!
  \*****************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"ReplaySsrOnlyErrors\", ({\n    enumerable: true,\n    get: function() {\n        return ReplaySsrOnlyErrors;\n    }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\nconst _useerrorhandler = __webpack_require__(/*! ./use-error-handler */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/use-error-handler.js\");\nconst _isnextroutererror = __webpack_require__(/*! ../../../../client/components/is-next-router-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/is-next-router-error.js\");\nconst _constants = __webpack_require__(/*! ../../../../shared/lib/errors/constants */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/errors/constants.js\");\nfunction readSsrError() {\n    if (typeof document === 'undefined') {\n        return null;\n    }\n    const ssrErrorTemplateTag = document.querySelector('template[data-next-error-message]');\n    if (ssrErrorTemplateTag) {\n        const message = ssrErrorTemplateTag.getAttribute('data-next-error-message');\n        const stack = ssrErrorTemplateTag.getAttribute('data-next-error-stack');\n        const digest = ssrErrorTemplateTag.getAttribute('data-next-error-digest');\n        const error = Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n            value: \"E394\",\n            enumerable: false,\n            configurable: true\n        });\n        if (digest) {\n            ;\n            error.digest = digest;\n        }\n        // Skip Next.js SSR'd internal errors that which will be handled by the error boundaries.\n        if ((0, _isnextroutererror.isNextRouterError)(error)) {\n            return null;\n        }\n        error.stack = stack || '';\n        return error;\n    }\n    return null;\n}\nfunction ReplaySsrOnlyErrors(param) {\n    let { onBlockingError } = param;\n    if (true) {\n        // Need to read during render. The attributes will be gone after commit.\n        const ssrError = readSsrError();\n        // eslint-disable-next-line react-hooks/rules-of-hooks\n        (0, _react.useEffect)(()=>{\n            if (ssrError !== null) {\n                // TODO(veil): Include original Owner Stack (NDX-905)\n                // TODO(veil): Mark as recoverable error\n                // TODO(veil): console.error\n                (0, _useerrorhandler.handleClientError)(ssrError);\n                // If it's missing root tags, we can't recover, make it blocking.\n                if (ssrError.digest === _constants.MISSING_ROOT_TAGS_ERROR) {\n                    onBlockingError();\n                }\n            }\n        }, [\n            ssrError,\n            onBlockingError\n        ]);\n    }\n    return null;\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n  Object.defineProperty(exports.default, '__esModule', { value: true });\n  Object.assign(exports.default, exports);\n  module.exports = exports.default;\n}\n\n//# sourceMappingURL=replay-ssr-only-errors.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvZXJyb3JzL3JlcGxheS1zc3Itb25seS1lcnJvcnMuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRix1REFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUM7QUFDRixlQUFlLG1CQUFPLENBQUMsK05BQU87QUFDOUIseUJBQXlCLG1CQUFPLENBQUMsNlFBQXFCO0FBQ3RELDJCQUEyQixtQkFBTyxDQUFDLDhSQUFvRDtBQUN2RixtQkFBbUIsbUJBQU8sQ0FBQyx3UUFBeUM7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsa0JBQWtCO0FBQzVCLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsYUFBYTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS40LjdfQGJhYmVsK2NvcmVANy4yOC4zX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMF9AcGxheXdyaWdodCt0ZXN0QDEuNTUuMF9yZWFjdC1kXzQ3ZmYzODEzZDc5MDU2NmRmMjU0YTIxNjM1NTBjMmQ1L25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy9yZXBsYXktc3NyLW9ubHktZXJyb3JzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVwbGF5U3NyT25seUVycm9yc1wiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUmVwbGF5U3NyT25seUVycm9ycztcbiAgICB9XG59KTtcbmNvbnN0IF9yZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbmNvbnN0IF91c2VlcnJvcmhhbmRsZXIgPSByZXF1aXJlKFwiLi91c2UtZXJyb3ItaGFuZGxlclwiKTtcbmNvbnN0IF9pc25leHRyb3V0ZXJlcnJvciA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9jbGllbnQvY29tcG9uZW50cy9pcy1uZXh0LXJvdXRlci1lcnJvclwiKTtcbmNvbnN0IF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vc2hhcmVkL2xpYi9lcnJvcnMvY29uc3RhbnRzXCIpO1xuZnVuY3Rpb24gcmVhZFNzckVycm9yKCkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBzc3JFcnJvclRlbXBsYXRlVGFnID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndGVtcGxhdGVbZGF0YS1uZXh0LWVycm9yLW1lc3NhZ2VdJyk7XG4gICAgaWYgKHNzckVycm9yVGVtcGxhdGVUYWcpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHNzckVycm9yVGVtcGxhdGVUYWcuZ2V0QXR0cmlidXRlKCdkYXRhLW5leHQtZXJyb3ItbWVzc2FnZScpO1xuICAgICAgICBjb25zdCBzdGFjayA9IHNzckVycm9yVGVtcGxhdGVUYWcuZ2V0QXR0cmlidXRlKCdkYXRhLW5leHQtZXJyb3Itc3RhY2snKTtcbiAgICAgICAgY29uc3QgZGlnZXN0ID0gc3NyRXJyb3JUZW1wbGF0ZVRhZy5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmV4dC1lcnJvci1kaWdlc3QnKTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3IEVycm9yKG1lc3NhZ2UpLCBcIl9fTkVYVF9FUlJPUl9DT0RFXCIsIHtcbiAgICAgICAgICAgIHZhbHVlOiBcIkUzOTRcIixcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGlnZXN0KSB7XG4gICAgICAgICAgICA7XG4gICAgICAgICAgICBlcnJvci5kaWdlc3QgPSBkaWdlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2tpcCBOZXh0LmpzIFNTUidkIGludGVybmFsIGVycm9ycyB0aGF0IHdoaWNoIHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgZXJyb3IgYm91bmRhcmllcy5cbiAgICAgICAgaWYgKCgwLCBfaXNuZXh0cm91dGVyZXJyb3IuaXNOZXh0Um91dGVyRXJyb3IpKGVycm9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3Iuc3RhY2sgPSBzdGFjayB8fCAnJztcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIFJlcGxheVNzck9ubHlFcnJvcnMocGFyYW0pIHtcbiAgICBsZXQgeyBvbkJsb2NraW5nRXJyb3IgfSA9IHBhcmFtO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIC8vIE5lZWQgdG8gcmVhZCBkdXJpbmcgcmVuZGVyLiBUaGUgYXR0cmlidXRlcyB3aWxsIGJlIGdvbmUgYWZ0ZXIgY29tbWl0LlxuICAgICAgICBjb25zdCBzc3JFcnJvciA9IHJlYWRTc3JFcnJvcigpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICAgICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgICAgICBpZiAoc3NyRXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPKHZlaWwpOiBJbmNsdWRlIG9yaWdpbmFsIE93bmVyIFN0YWNrIChORFgtOTA1KVxuICAgICAgICAgICAgICAgIC8vIFRPRE8odmVpbCk6IE1hcmsgYXMgcmVjb3ZlcmFibGUgZXJyb3JcbiAgICAgICAgICAgICAgICAvLyBUT0RPKHZlaWwpOiBjb25zb2xlLmVycm9yXG4gICAgICAgICAgICAgICAgKDAsIF91c2VlcnJvcmhhbmRsZXIuaGFuZGxlQ2xpZW50RXJyb3IpKHNzckVycm9yKTtcbiAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIG1pc3Npbmcgcm9vdCB0YWdzLCB3ZSBjYW4ndCByZWNvdmVyLCBtYWtlIGl0IGJsb2NraW5nLlxuICAgICAgICAgICAgICAgIGlmIChzc3JFcnJvci5kaWdlc3QgPT09IF9jb25zdGFudHMuTUlTU0lOR19ST09UX1RBR1NfRVJST1IpIHtcbiAgICAgICAgICAgICAgICAgICAgb25CbG9ja2luZ0Vycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbXG4gICAgICAgICAgICBzc3JFcnJvcixcbiAgICAgICAgICAgIG9uQmxvY2tpbmdFcnJvclxuICAgICAgICBdKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcGxheS1zc3Itb25seS1lcnJvcnMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/replay-ssr-only-errors.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js":
/*!*********************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js ***!
  \*********************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    coerceError: function() {\n        return coerceError;\n    },\n    decorateDevError: function() {\n        return decorateDevError;\n    },\n    getComponentStack: function() {\n        return getComponentStack;\n    },\n    getOwnerStack: function() {\n        return getOwnerStack;\n    },\n    setComponentStack: function() {\n        return setComponentStack;\n    },\n    setOwnerStack: function() {\n        return setOwnerStack;\n    },\n    setOwnerStackIfAvailable: function() {\n        return setOwnerStackIfAvailable;\n    }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"));\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../../../lib/is-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/is-error.js\"));\nconst ownerStacks = new WeakMap();\nconst componentStacks = new WeakMap();\nfunction getComponentStack(error) {\n    return componentStacks.get(error);\n}\nfunction setComponentStack(error, stack) {\n    componentStacks.set(error, stack);\n}\nfunction getOwnerStack(error) {\n    return ownerStacks.get(error);\n}\nfunction setOwnerStack(error, stack) {\n    ownerStacks.set(error, stack);\n}\nfunction coerceError(value) {\n    return (0, _iserror.default)(value) ? value : Object.defineProperty(new Error('' + value), \"__NEXT_ERROR_CODE\", {\n        value: \"E394\",\n        enumerable: false,\n        configurable: true\n    });\n}\nfunction setOwnerStackIfAvailable(error) {\n    // React 18 and prod does not have `captureOwnerStack`\n    if ('captureOwnerStack' in _react.default) {\n        setOwnerStack(error, _react.default.captureOwnerStack());\n    }\n}\nfunction decorateDevError(thrownValue, errorInfo) {\n    const error = coerceError(thrownValue);\n    setOwnerStackIfAvailable(error);\n    // TODO: change to passing down errorInfo later\n    // In development mode, pass along the component stack to the error\n    if (errorInfo.componentStack) {\n        setComponentStack(error, errorInfo.componentStack);\n    }\n    return error;\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n  Object.defineProperty(exports.default, '__esModule', { value: true });\n  Object.assign(exports.default, exports);\n  module.exports = exports.default;\n}\n\n//# sourceMappingURL=stitched-error.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvZXJyb3JzL3N0aXRjaGVkLWVycm9yLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQVFMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxpQ0FBaUMsbUJBQU8sQ0FBQyx1S0FBeUM7QUFDbEYsd0RBQXdELG1CQUFPLENBQUMsK05BQU87QUFDdkUsMERBQTBELG1CQUFPLENBQUMsME9BQTBCO0FBQzVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsYUFBYTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS40LjdfQGJhYmVsK2NvcmVANy4yOC4zX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMF9AcGxheXdyaWdodCt0ZXN0QDEuNTUuMF9yZWFjdC1kXzQ3ZmYzODEzZDc5MDU2NmRmMjU0YTIxNjM1NTBjMmQ1L25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy9zdGl0Y2hlZC1lcnJvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGNvZXJjZUVycm9yOiBudWxsLFxuICAgIGRlY29yYXRlRGV2RXJyb3I6IG51bGwsXG4gICAgZ2V0Q29tcG9uZW50U3RhY2s6IG51bGwsXG4gICAgZ2V0T3duZXJTdGFjazogbnVsbCxcbiAgICBzZXRDb21wb25lbnRTdGFjazogbnVsbCxcbiAgICBzZXRPd25lclN0YWNrOiBudWxsLFxuICAgIHNldE93bmVyU3RhY2tJZkF2YWlsYWJsZTogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBjb2VyY2VFcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjb2VyY2VFcnJvcjtcbiAgICB9LFxuICAgIGRlY29yYXRlRGV2RXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZGVjb3JhdGVEZXZFcnJvcjtcbiAgICB9LFxuICAgIGdldENvbXBvbmVudFN0YWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudFN0YWNrO1xuICAgIH0sXG4gICAgZ2V0T3duZXJTdGFjazogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRPd25lclN0YWNrO1xuICAgIH0sXG4gICAgc2V0Q29tcG9uZW50U3RhY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2V0Q29tcG9uZW50U3RhY2s7XG4gICAgfSxcbiAgICBzZXRPd25lclN0YWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHNldE93bmVyU3RhY2s7XG4gICAgfSxcbiAgICBzZXRPd25lclN0YWNrSWZBdmFpbGFibGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2V0T3duZXJTdGFja0lmQXZhaWxhYmxlO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9yZWFjdCA9IC8qI19fUFVSRV9fKi8gX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0Ll8ocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IF9pc2Vycm9yID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi4vLi4vLi4vLi4vbGliL2lzLWVycm9yXCIpKTtcbmNvbnN0IG93bmVyU3RhY2tzID0gbmV3IFdlYWtNYXAoKTtcbmNvbnN0IGNvbXBvbmVudFN0YWNrcyA9IG5ldyBXZWFrTWFwKCk7XG5mdW5jdGlvbiBnZXRDb21wb25lbnRTdGFjayhlcnJvcikge1xuICAgIHJldHVybiBjb21wb25lbnRTdGFja3MuZ2V0KGVycm9yKTtcbn1cbmZ1bmN0aW9uIHNldENvbXBvbmVudFN0YWNrKGVycm9yLCBzdGFjaykge1xuICAgIGNvbXBvbmVudFN0YWNrcy5zZXQoZXJyb3IsIHN0YWNrKTtcbn1cbmZ1bmN0aW9uIGdldE93bmVyU3RhY2soZXJyb3IpIHtcbiAgICByZXR1cm4gb3duZXJTdGFja3MuZ2V0KGVycm9yKTtcbn1cbmZ1bmN0aW9uIHNldE93bmVyU3RhY2soZXJyb3IsIHN0YWNrKSB7XG4gICAgb3duZXJTdGFja3Muc2V0KGVycm9yLCBzdGFjayk7XG59XG5mdW5jdGlvbiBjb2VyY2VFcnJvcih2YWx1ZSkge1xuICAgIHJldHVybiAoMCwgX2lzZXJyb3IuZGVmYXVsdCkodmFsdWUpID8gdmFsdWUgOiBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3IEVycm9yKCcnICsgdmFsdWUpLCBcIl9fTkVYVF9FUlJPUl9DT0RFXCIsIHtcbiAgICAgICAgdmFsdWU6IFwiRTM5NFwiLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG59XG5mdW5jdGlvbiBzZXRPd25lclN0YWNrSWZBdmFpbGFibGUoZXJyb3IpIHtcbiAgICAvLyBSZWFjdCAxOCBhbmQgcHJvZCBkb2VzIG5vdCBoYXZlIGBjYXB0dXJlT3duZXJTdGFja2BcbiAgICBpZiAoJ2NhcHR1cmVPd25lclN0YWNrJyBpbiBfcmVhY3QuZGVmYXVsdCkge1xuICAgICAgICBzZXRPd25lclN0YWNrKGVycm9yLCBfcmVhY3QuZGVmYXVsdC5jYXB0dXJlT3duZXJTdGFjaygpKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWNvcmF0ZURldkVycm9yKHRocm93blZhbHVlLCBlcnJvckluZm8pIHtcbiAgICBjb25zdCBlcnJvciA9IGNvZXJjZUVycm9yKHRocm93blZhbHVlKTtcbiAgICBzZXRPd25lclN0YWNrSWZBdmFpbGFibGUoZXJyb3IpO1xuICAgIC8vIFRPRE86IGNoYW5nZSB0byBwYXNzaW5nIGRvd24gZXJyb3JJbmZvIGxhdGVyXG4gICAgLy8gSW4gZGV2ZWxvcG1lbnQgbW9kZSwgcGFzcyBhbG9uZyB0aGUgY29tcG9uZW50IHN0YWNrIHRvIHRoZSBlcnJvclxuICAgIGlmIChlcnJvckluZm8uY29tcG9uZW50U3RhY2spIHtcbiAgICAgICAgc2V0Q29tcG9uZW50U3RhY2soZXJyb3IsIGVycm9ySW5mby5jb21wb25lbnRTdGFjayk7XG4gICAgfVxuICAgIHJldHVybiBlcnJvcjtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RpdGNoZWQtZXJyb3IuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/use-error-handler.js":
/*!************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/use-error-handler.js ***!
  \************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    handleClientError: function() {\n        return handleClientError;\n    },\n    handleConsoleError: function() {\n        return handleConsoleError;\n    },\n    handleGlobalErrors: function() {\n        return handleGlobalErrors;\n    },\n    useErrorHandler: function() {\n        return useErrorHandler;\n    }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\nconst _isnextroutererror = __webpack_require__(/*! ../../../../client/components/is-next-router-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/is-next-router-error.js\");\nconst _console = __webpack_require__(/*! ../../../../client/lib/console */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/lib/console.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../../../../lib/is-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/is-error.js\"));\nconst _consoleerror = __webpack_require__(/*! ../../../shared/console-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/shared/console-error.js\");\nconst _stitchederror = __webpack_require__(/*! ./stitched-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\");\nconst _forwardlogs = __webpack_require__(/*! ../forward-logs */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/forward-logs.js\");\nconst queueMicroTask = globalThis.queueMicrotask || ((cb)=>Promise.resolve().then(cb));\nconst errorQueue = [];\nconst errorHandlers = [];\nconst rejectionQueue = [];\nconst rejectionHandlers = [];\nfunction handleConsoleError(originError, consoleErrorArgs) {\n    let error;\n    const { environmentName } = (0, _console.parseConsoleArgs)(consoleErrorArgs);\n    if ((0, _iserror.default)(originError)) {\n        error = (0, _consoleerror.createConsoleError)(originError, environmentName);\n    } else {\n        error = (0, _consoleerror.createConsoleError)((0, _console.formatConsoleArgs)(consoleErrorArgs), environmentName);\n    }\n    (0, _stitchederror.setOwnerStackIfAvailable)(error);\n    errorQueue.push(error);\n    for (const handler of errorHandlers){\n        // Delayed the error being passed to React Dev Overlay,\n        // avoid the state being synchronously updated in the component.\n        queueMicroTask(()=>{\n            handler(error);\n        });\n    }\n}\nfunction handleClientError(error) {\n    errorQueue.push(error);\n    for (const handler of errorHandlers){\n        // Delayed the error being passed to React Dev Overlay,\n        // avoid the state being synchronously updated in the component.\n        queueMicroTask(()=>{\n            handler(error);\n        });\n    }\n}\nfunction useErrorHandler(handleOnUnhandledError, handleOnUnhandledRejection) {\n    (0, _react.useEffect)(()=>{\n        // Handle queued errors.\n        errorQueue.forEach(handleOnUnhandledError);\n        rejectionQueue.forEach(handleOnUnhandledRejection);\n        // Listen to new errors.\n        errorHandlers.push(handleOnUnhandledError);\n        rejectionHandlers.push(handleOnUnhandledRejection);\n        return ()=>{\n            // Remove listeners.\n            errorHandlers.splice(errorHandlers.indexOf(handleOnUnhandledError), 1);\n            rejectionHandlers.splice(rejectionHandlers.indexOf(handleOnUnhandledRejection), 1);\n            // Reset error queues.\n            errorQueue.splice(0, errorQueue.length);\n            rejectionQueue.splice(0, rejectionQueue.length);\n        };\n    }, [\n        handleOnUnhandledError,\n        handleOnUnhandledRejection\n    ]);\n}\nfunction onUnhandledError(event) {\n    const thrownValue = event.error;\n    if ((0, _isnextroutererror.isNextRouterError)(thrownValue)) {\n        event.preventDefault();\n        return false;\n    }\n    // When there's an error property present, we log the error to error overlay.\n    // Otherwise we don't do anything as it's not logging in the console either.\n    if (thrownValue) {\n        const error = (0, _stitchederror.coerceError)(thrownValue);\n        (0, _stitchederror.setOwnerStackIfAvailable)(error);\n        handleClientError(error);\n        if (_forwardlogs.isTerminalLoggingEnabled) {\n            (0, _forwardlogs.forwardUnhandledError)(error);\n        }\n    }\n}\nfunction onUnhandledRejection(ev) {\n    const reason = ev == null ? void 0 : ev.reason;\n    if ((0, _isnextroutererror.isNextRouterError)(reason)) {\n        ev.preventDefault();\n        return;\n    }\n    const error = (0, _stitchederror.coerceError)(reason);\n    (0, _stitchederror.setOwnerStackIfAvailable)(error);\n    rejectionQueue.push(error);\n    for (const handler of rejectionHandlers){\n        handler(error);\n    }\n    if (_forwardlogs.isTerminalLoggingEnabled) {\n        (0, _forwardlogs.logUnhandledRejection)(reason);\n    }\n}\nfunction handleGlobalErrors() {\n    if (typeof window !== 'undefined') {\n        try {\n            // Increase the number of stack frames on the client\n            Error.stackTraceLimit = 50;\n        } catch (e) {}\n        window.addEventListener('error', onUnhandledError);\n        window.addEventListener('unhandledrejection', onUnhandledRejection);\n    }\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n  Object.defineProperty(exports.default, '__esModule', { value: true });\n  Object.assign(exports.default, exports);\n  module.exports = exports.default;\n}\n\n//# sourceMappingURL=use-error-handler.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvZXJyb3JzL3VzZS1lcnJvci1oYW5kbGVyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQUtMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxpQ0FBaUMsbUJBQU8sQ0FBQyx1S0FBeUM7QUFDbEYsZUFBZSxtQkFBTyxDQUFDLCtOQUFPO0FBQzlCLDJCQUEyQixtQkFBTyxDQUFDLDhSQUFvRDtBQUN2RixpQkFBaUIsbUJBQU8sQ0FBQyxzUEFBZ0M7QUFDekQsMERBQTBELG1CQUFPLENBQUMsME9BQTBCO0FBQzVGLHNCQUFzQixtQkFBTyxDQUFDLHFRQUErQjtBQUM3RCx1QkFBdUIsbUJBQU8sQ0FBQyx1UUFBa0I7QUFDakQscUJBQXFCLG1CQUFPLENBQUMsNlBBQWlCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxrQkFBa0I7QUFDOUI7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsYUFBYTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS40LjdfQGJhYmVsK2NvcmVANy4yOC4zX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMF9AcGxheXdyaWdodCt0ZXN0QDEuNTUuMF9yZWFjdC1kXzQ3ZmYzODEzZDc5MDU2NmRmMjU0YTIxNjM1NTBjMmQ1L25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy91c2UtZXJyb3ItaGFuZGxlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGhhbmRsZUNsaWVudEVycm9yOiBudWxsLFxuICAgIGhhbmRsZUNvbnNvbGVFcnJvcjogbnVsbCxcbiAgICBoYW5kbGVHbG9iYWxFcnJvcnM6IG51bGwsXG4gICAgdXNlRXJyb3JIYW5kbGVyOiBudWxsXG59KTtcbmZ1bmN0aW9uIF9leHBvcnQodGFyZ2V0LCBhbGwpIHtcbiAgICBmb3IodmFyIG5hbWUgaW4gYWxsKU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiBhbGxbbmFtZV1cbiAgICB9KTtcbn1cbl9leHBvcnQoZXhwb3J0cywge1xuICAgIGhhbmRsZUNsaWVudEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZUNsaWVudEVycm9yO1xuICAgIH0sXG4gICAgaGFuZGxlQ29uc29sZUVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZUNvbnNvbGVFcnJvcjtcbiAgICB9LFxuICAgIGhhbmRsZUdsb2JhbEVycm9yczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVHbG9iYWxFcnJvcnM7XG4gICAgfSxcbiAgICB1c2VFcnJvckhhbmRsZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdXNlRXJyb3JIYW5kbGVyO1xuICAgIH1cbn0pO1xuY29uc3QgX2ludGVyb3BfcmVxdWlyZV9kZWZhdWx0ID0gcmVxdWlyZShcIkBzd2MvaGVscGVycy9fL19pbnRlcm9wX3JlcXVpcmVfZGVmYXVsdFwiKTtcbmNvbnN0IF9yZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbmNvbnN0IF9pc25leHRyb3V0ZXJlcnJvciA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9jbGllbnQvY29tcG9uZW50cy9pcy1uZXh0LXJvdXRlci1lcnJvclwiKTtcbmNvbnN0IF9jb25zb2xlID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL2NsaWVudC9saWIvY29uc29sZVwiKTtcbmNvbnN0IF9pc2Vycm9yID0gLyojX19QVVJFX18qLyBfaW50ZXJvcF9yZXF1aXJlX2RlZmF1bHQuXyhyZXF1aXJlKFwiLi4vLi4vLi4vLi4vbGliL2lzLWVycm9yXCIpKTtcbmNvbnN0IF9jb25zb2xlZXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vc2hhcmVkL2NvbnNvbGUtZXJyb3JcIik7XG5jb25zdCBfc3RpdGNoZWRlcnJvciA9IHJlcXVpcmUoXCIuL3N0aXRjaGVkLWVycm9yXCIpO1xuY29uc3QgX2ZvcndhcmRsb2dzID0gcmVxdWlyZShcIi4uL2ZvcndhcmQtbG9nc1wiKTtcbmNvbnN0IHF1ZXVlTWljcm9UYXNrID0gZ2xvYmFsVGhpcy5xdWV1ZU1pY3JvdGFzayB8fCAoKGNiKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbihjYikpO1xuY29uc3QgZXJyb3JRdWV1ZSA9IFtdO1xuY29uc3QgZXJyb3JIYW5kbGVycyA9IFtdO1xuY29uc3QgcmVqZWN0aW9uUXVldWUgPSBbXTtcbmNvbnN0IHJlamVjdGlvbkhhbmRsZXJzID0gW107XG5mdW5jdGlvbiBoYW5kbGVDb25zb2xlRXJyb3Iob3JpZ2luRXJyb3IsIGNvbnNvbGVFcnJvckFyZ3MpIHtcbiAgICBsZXQgZXJyb3I7XG4gICAgY29uc3QgeyBlbnZpcm9ubWVudE5hbWUgfSA9ICgwLCBfY29uc29sZS5wYXJzZUNvbnNvbGVBcmdzKShjb25zb2xlRXJyb3JBcmdzKTtcbiAgICBpZiAoKDAsIF9pc2Vycm9yLmRlZmF1bHQpKG9yaWdpbkVycm9yKSkge1xuICAgICAgICBlcnJvciA9ICgwLCBfY29uc29sZWVycm9yLmNyZWF0ZUNvbnNvbGVFcnJvcikob3JpZ2luRXJyb3IsIGVudmlyb25tZW50TmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IgPSAoMCwgX2NvbnNvbGVlcnJvci5jcmVhdGVDb25zb2xlRXJyb3IpKCgwLCBfY29uc29sZS5mb3JtYXRDb25zb2xlQXJncykoY29uc29sZUVycm9yQXJncyksIGVudmlyb25tZW50TmFtZSk7XG4gICAgfVxuICAgICgwLCBfc3RpdGNoZWRlcnJvci5zZXRPd25lclN0YWNrSWZBdmFpbGFibGUpKGVycm9yKTtcbiAgICBlcnJvclF1ZXVlLnB1c2goZXJyb3IpO1xuICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBlcnJvckhhbmRsZXJzKXtcbiAgICAgICAgLy8gRGVsYXllZCB0aGUgZXJyb3IgYmVpbmcgcGFzc2VkIHRvIFJlYWN0IERldiBPdmVybGF5LFxuICAgICAgICAvLyBhdm9pZCB0aGUgc3RhdGUgYmVpbmcgc3luY2hyb25vdXNseSB1cGRhdGVkIGluIHRoZSBjb21wb25lbnQuXG4gICAgICAgIHF1ZXVlTWljcm9UYXNrKCgpPT57XG4gICAgICAgICAgICBoYW5kbGVyKGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFuZGxlQ2xpZW50RXJyb3IoZXJyb3IpIHtcbiAgICBlcnJvclF1ZXVlLnB1c2goZXJyb3IpO1xuICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBlcnJvckhhbmRsZXJzKXtcbiAgICAgICAgLy8gRGVsYXllZCB0aGUgZXJyb3IgYmVpbmcgcGFzc2VkIHRvIFJlYWN0IERldiBPdmVybGF5LFxuICAgICAgICAvLyBhdm9pZCB0aGUgc3RhdGUgYmVpbmcgc3luY2hyb25vdXNseSB1cGRhdGVkIGluIHRoZSBjb21wb25lbnQuXG4gICAgICAgIHF1ZXVlTWljcm9UYXNrKCgpPT57XG4gICAgICAgICAgICBoYW5kbGVyKGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gdXNlRXJyb3JIYW5kbGVyKGhhbmRsZU9uVW5oYW5kbGVkRXJyb3IsIGhhbmRsZU9uVW5oYW5kbGVkUmVqZWN0aW9uKSB7XG4gICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgIC8vIEhhbmRsZSBxdWV1ZWQgZXJyb3JzLlxuICAgICAgICBlcnJvclF1ZXVlLmZvckVhY2goaGFuZGxlT25VbmhhbmRsZWRFcnJvcik7XG4gICAgICAgIHJlamVjdGlvblF1ZXVlLmZvckVhY2goaGFuZGxlT25VbmhhbmRsZWRSZWplY3Rpb24pO1xuICAgICAgICAvLyBMaXN0ZW4gdG8gbmV3IGVycm9ycy5cbiAgICAgICAgZXJyb3JIYW5kbGVycy5wdXNoKGhhbmRsZU9uVW5oYW5kbGVkRXJyb3IpO1xuICAgICAgICByZWplY3Rpb25IYW5kbGVycy5wdXNoKGhhbmRsZU9uVW5oYW5kbGVkUmVqZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICAvLyBSZW1vdmUgbGlzdGVuZXJzLlxuICAgICAgICAgICAgZXJyb3JIYW5kbGVycy5zcGxpY2UoZXJyb3JIYW5kbGVycy5pbmRleE9mKGhhbmRsZU9uVW5oYW5kbGVkRXJyb3IpLCAxKTtcbiAgICAgICAgICAgIHJlamVjdGlvbkhhbmRsZXJzLnNwbGljZShyZWplY3Rpb25IYW5kbGVycy5pbmRleE9mKGhhbmRsZU9uVW5oYW5kbGVkUmVqZWN0aW9uKSwgMSk7XG4gICAgICAgICAgICAvLyBSZXNldCBlcnJvciBxdWV1ZXMuXG4gICAgICAgICAgICBlcnJvclF1ZXVlLnNwbGljZSgwLCBlcnJvclF1ZXVlLmxlbmd0aCk7XG4gICAgICAgICAgICByZWplY3Rpb25RdWV1ZS5zcGxpY2UoMCwgcmVqZWN0aW9uUXVldWUubGVuZ3RoKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIGhhbmRsZU9uVW5oYW5kbGVkRXJyb3IsXG4gICAgICAgIGhhbmRsZU9uVW5oYW5kbGVkUmVqZWN0aW9uXG4gICAgXSk7XG59XG5mdW5jdGlvbiBvblVuaGFuZGxlZEVycm9yKGV2ZW50KSB7XG4gICAgY29uc3QgdGhyb3duVmFsdWUgPSBldmVudC5lcnJvcjtcbiAgICBpZiAoKDAsIF9pc25leHRyb3V0ZXJlcnJvci5pc05leHRSb3V0ZXJFcnJvcikodGhyb3duVmFsdWUpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gV2hlbiB0aGVyZSdzIGFuIGVycm9yIHByb3BlcnR5IHByZXNlbnQsIHdlIGxvZyB0aGUgZXJyb3IgdG8gZXJyb3Igb3ZlcmxheS5cbiAgICAvLyBPdGhlcndpc2Ugd2UgZG9uJ3QgZG8gYW55dGhpbmcgYXMgaXQncyBub3QgbG9nZ2luZyBpbiB0aGUgY29uc29sZSBlaXRoZXIuXG4gICAgaWYgKHRocm93blZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gKDAsIF9zdGl0Y2hlZGVycm9yLmNvZXJjZUVycm9yKSh0aHJvd25WYWx1ZSk7XG4gICAgICAgICgwLCBfc3RpdGNoZWRlcnJvci5zZXRPd25lclN0YWNrSWZBdmFpbGFibGUpKGVycm9yKTtcbiAgICAgICAgaGFuZGxlQ2xpZW50RXJyb3IoZXJyb3IpO1xuICAgICAgICBpZiAoX2ZvcndhcmRsb2dzLmlzVGVybWluYWxMb2dnaW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgKDAsIF9mb3J3YXJkbG9ncy5mb3J3YXJkVW5oYW5kbGVkRXJyb3IpKGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIG9uVW5oYW5kbGVkUmVqZWN0aW9uKGV2KSB7XG4gICAgY29uc3QgcmVhc29uID0gZXYgPT0gbnVsbCA/IHZvaWQgMCA6IGV2LnJlYXNvbjtcbiAgICBpZiAoKDAsIF9pc25leHRyb3V0ZXJlcnJvci5pc05leHRSb3V0ZXJFcnJvcikocmVhc29uKSkge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVycm9yID0gKDAsIF9zdGl0Y2hlZGVycm9yLmNvZXJjZUVycm9yKShyZWFzb24pO1xuICAgICgwLCBfc3RpdGNoZWRlcnJvci5zZXRPd25lclN0YWNrSWZBdmFpbGFibGUpKGVycm9yKTtcbiAgICByZWplY3Rpb25RdWV1ZS5wdXNoKGVycm9yKTtcbiAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgcmVqZWN0aW9uSGFuZGxlcnMpe1xuICAgICAgICBoYW5kbGVyKGVycm9yKTtcbiAgICB9XG4gICAgaWYgKF9mb3J3YXJkbG9ncy5pc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQpIHtcbiAgICAgICAgKDAsIF9mb3J3YXJkbG9ncy5sb2dVbmhhbmRsZWRSZWplY3Rpb24pKHJlYXNvbik7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFuZGxlR2xvYmFsRXJyb3JzKCkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gSW5jcmVhc2UgdGhlIG51bWJlciBvZiBzdGFjayBmcmFtZXMgb24gdGhlIGNsaWVudFxuICAgICAgICAgICAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gNTA7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIG9uVW5oYW5kbGVkRXJyb3IpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVqZWN0aW9uJywgb25VbmhhbmRsZWRSZWplY3Rpb24pO1xuICAgIH1cbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlLWVycm9yLWhhbmRsZXIuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/use-error-handler.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/use-forward-console-log.js":
/*!******************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/use-forward-console-log.js ***!
  \******************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"useForwardConsoleLog\", ({\n    enumerable: true,\n    get: function() {\n        return useForwardConsoleLog;\n    }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\nconst _forwardlogs = __webpack_require__(/*! ../forward-logs */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/forward-logs.js\");\nconst useForwardConsoleLog = (socketRef)=>{\n    (0, _react.useEffect)(()=>{\n        if (!_forwardlogs.isTerminalLoggingEnabled) {\n            return;\n        }\n        const socket = socketRef.current;\n        if (!socket) {\n            return;\n        }\n        const onOpen = ()=>{\n            _forwardlogs.logQueue.onSocketReady(socket);\n        };\n        socket.addEventListener('open', onOpen);\n        return ()=>{\n            socket.removeEventListener('open', onOpen);\n        };\n    }, [\n        socketRef\n    ]);\n};\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n  Object.defineProperty(exports.default, '__esModule', { value: true });\n  Object.assign(exports.default, exports);\n  module.exports = exports.default;\n}\n\n//# sourceMappingURL=use-forward-console-log.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvZXJyb3JzL3VzZS1mb3J3YXJkLWNvbnNvbGUtbG9nLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0Ysd0RBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsZUFBZSxtQkFBTyxDQUFDLCtOQUFPO0FBQzlCLHFCQUFxQixtQkFBTyxDQUFDLDZQQUFpQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsYUFBYTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNS40LjdfQGJhYmVsK2NvcmVANy4yOC4zX0BvcGVudGVsZW1ldHJ5K2FwaUAxLjkuMF9AcGxheXdyaWdodCt0ZXN0QDEuNTUuMF9yZWFjdC1kXzQ3ZmYzODEzZDc5MDU2NmRmMjU0YTIxNjM1NTBjMmQ1L25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvYXBwL2Vycm9ycy91c2UtZm9yd2FyZC1jb25zb2xlLWxvZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVzZUZvcndhcmRDb25zb2xlTG9nXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB1c2VGb3J3YXJkQ29uc29sZUxvZztcbiAgICB9XG59KTtcbmNvbnN0IF9yZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcbmNvbnN0IF9mb3J3YXJkbG9ncyA9IHJlcXVpcmUoXCIuLi9mb3J3YXJkLWxvZ3NcIik7XG5jb25zdCB1c2VGb3J3YXJkQ29uc29sZUxvZyA9IChzb2NrZXRSZWYpPT57XG4gICAgKDAsIF9yZWFjdC51c2VFZmZlY3QpKCgpPT57XG4gICAgICAgIGlmICghX2ZvcndhcmRsb2dzLmlzVGVybWluYWxMb2dnaW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvY2tldCA9IHNvY2tldFJlZi5jdXJyZW50O1xuICAgICAgICBpZiAoIXNvY2tldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9uT3BlbiA9ICgpPT57XG4gICAgICAgICAgICBfZm9yd2FyZGxvZ3MubG9nUXVldWUub25Tb2NrZXRSZWFkeShzb2NrZXQpO1xuICAgICAgICB9O1xuICAgICAgICBzb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcignb3BlbicsIG9uT3Blbik7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgc29ja2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29wZW4nLCBvbk9wZW4pO1xuICAgICAgICB9O1xuICAgIH0sIFtcbiAgICAgICAgc29ja2V0UmVmXG4gICAgXSk7XG59O1xuXG5pZiAoKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdmdW5jdGlvbicgfHwgKHR5cGVvZiBleHBvcnRzLmRlZmF1bHQgPT09ICdvYmplY3QnICYmIGV4cG9ydHMuZGVmYXVsdCAhPT0gbnVsbCkpICYmIHR5cGVvZiBleHBvcnRzLmRlZmF1bHQuX19lc01vZHVsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMuZGVmYXVsdCwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICBPYmplY3QuYXNzaWduKGV4cG9ydHMuZGVmYXVsdCwgZXhwb3J0cyk7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0O1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2UtZm9yd2FyZC1jb25zb2xlLWxvZy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/use-forward-console-log.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/forward-logs.js":
/*!************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/forward-logs.js ***!
  \************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    PROMISE_MARKER: function() {\n        return PROMISE_MARKER;\n    },\n    UNAVAILABLE_MARKER: function() {\n        return UNAVAILABLE_MARKER;\n    },\n    forwardErrorLog: function() {\n        return forwardErrorLog;\n    },\n    forwardUnhandledError: function() {\n        return forwardUnhandledError;\n    },\n    initializeDebugLogForwarding: function() {\n        return initializeDebugLogForwarding;\n    },\n    isTerminalLoggingEnabled: function() {\n        return isTerminalLoggingEnabled;\n    },\n    logQueue: function() {\n        return logQueue;\n    },\n    logStringify: function() {\n        return logStringify;\n    },\n    logUnhandledRejection: function() {\n        return logUnhandledRejection;\n    },\n    preLogSerializationClone: function() {\n        return preLogSerializationClone;\n    }\n});\nconst _safestablestringify = __webpack_require__(/*! next/dist/compiled/safe-stable-stringify */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/safe-stable-stringify/index.js\");\nconst _stitchederror = __webpack_require__(/*! ./errors/stitched-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/errors/stitched-error.js\");\nconst _errorsource = __webpack_require__(/*! ../../../shared/lib/error-source */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/error-source.js\");\nconst _terminalloggingconfig = __webpack_require__(/*! ./terminal-logging-config */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/terminal-logging-config.js\");\nconst _forwardlogsshared = __webpack_require__(/*! ../../shared/forward-logs-shared */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/shared/forward-logs-shared.js\");\nconst terminalLoggingConfig = (0, _terminalloggingconfig.getTerminalLoggingConfig)();\nconst PROMISE_MARKER = 'Promise {}';\nconst UNAVAILABLE_MARKER = '[Unable to view]';\nconst maximumDepth = typeof terminalLoggingConfig === 'object' && terminalLoggingConfig.depthLimit ? terminalLoggingConfig.depthLimit : 5;\nconst maximumBreadth = typeof terminalLoggingConfig === 'object' && terminalLoggingConfig.edgeLimit ? terminalLoggingConfig.edgeLimit : 100;\nconst stringify = (0, _safestablestringify.configure)({\n    maximumDepth,\n    maximumBreadth\n});\nconst isTerminalLoggingEnabled = (0, _terminalloggingconfig.getIsTerminalLoggingEnabled)();\nconst methods = [\n    'log',\n    'info',\n    'warn',\n    'debug',\n    'table',\n    'assert',\n    'dir',\n    'dirxml',\n    'group',\n    'groupCollapsed',\n    'groupEnd',\n    'trace'\n];\nfunction preLogSerializationClone(value, seen) {\n    if (seen === void 0) seen = new WeakMap();\n    if (value === undefined) return _forwardlogsshared.UNDEFINED_MARKER;\n    if (value === null || typeof value !== 'object') return value;\n    if (seen.has(value)) return seen.get(value);\n    try {\n        Object.keys(value);\n    } catch (e) {\n        return UNAVAILABLE_MARKER;\n    }\n    try {\n        if (typeof value.then === 'function') return PROMISE_MARKER;\n    } catch (e) {\n        return UNAVAILABLE_MARKER;\n    }\n    if (Array.isArray(value)) {\n        const out = [];\n        seen.set(value, out);\n        for (const item of value){\n            try {\n                out.push(preLogSerializationClone(item, seen));\n            } catch (e) {\n                out.push(UNAVAILABLE_MARKER);\n            }\n        }\n        return out;\n    }\n    const proto = Object.getPrototypeOf(value);\n    if (proto === Object.prototype || proto === null) {\n        const out = {};\n        seen.set(value, out);\n        for (const key of Object.keys(value)){\n            try {\n                out[key] = preLogSerializationClone(value[key], seen);\n            } catch (e) {\n                out[key] = UNAVAILABLE_MARKER;\n            }\n        }\n        return out;\n    }\n    return Object.prototype.toString.call(value);\n}\nconst logStringify = (data)=>{\n    try {\n        const result = stringify(data);\n        return result != null ? result : '\"' + UNAVAILABLE_MARKER + '\"';\n    } catch (e) {\n        return '\"' + UNAVAILABLE_MARKER + '\"';\n    }\n};\nconst afterThisFrame = (cb)=>{\n    let timeout;\n    const rafId = requestAnimationFrame(()=>{\n        timeout = setTimeout(()=>{\n            cb();\n        });\n    });\n    return ()=>{\n        cancelAnimationFrame(rafId);\n        clearTimeout(timeout);\n    };\n};\nlet isPatched = false;\nconst serializeEntries = (entries)=>entries.map((clientEntry)=>{\n        switch(clientEntry.kind){\n            case 'any-logged-error':\n            case 'console':\n                {\n                    return {\n                        ...clientEntry,\n                        args: clientEntry.args.map(stringifyUserArg)\n                    };\n                }\n            case 'formatted-error':\n                {\n                    return clientEntry;\n                }\n            default:\n                {\n                    return null;\n                }\n        }\n    });\nconst logQueue = {\n    entries: [],\n    flushScheduled: false,\n    cancelFlush: null,\n    socket: null,\n    sourceType: undefined,\n    router: null,\n    scheduleLogSend: (entry)=>{\n        logQueue.entries.push(entry);\n        if (logQueue.flushScheduled) {\n            return;\n        }\n        // safe to deref and use in setTimeout closure since we cancel on new socket\n        const socket = logQueue.socket;\n        if (!socket) {\n            return;\n        }\n        // we probably dont need this\n        logQueue.flushScheduled = true;\n        // non blocking log flush, runs at most once per frame\n        logQueue.cancelFlush = afterThisFrame(()=>{\n            logQueue.flushScheduled = false;\n            // just incase\n            try {\n                const payload = JSON.stringify({\n                    event: 'browser-logs',\n                    entries: serializeEntries(logQueue.entries),\n                    router: logQueue.router,\n                    // needed for source mapping, we just assign the sourceType from the last error for the whole batch\n                    sourceType: logQueue.sourceType\n                });\n                socket.send(payload);\n                logQueue.entries = [];\n                logQueue.sourceType = undefined;\n            } catch (e) {\n            // error (make sure u don't infinite loop)\n            /* noop */ }\n        });\n    },\n    onSocketReady: (socket)=>{\n        if (socket.readyState !== WebSocket.OPEN) {\n            // invariant\n            return;\n        }\n        // incase an existing timeout was going to run with a stale socket\n        logQueue.cancelFlush == null ? void 0 : logQueue.cancelFlush.call(logQueue);\n        logQueue.socket = socket;\n        try {\n            const payload = JSON.stringify({\n                event: 'browser-logs',\n                entries: serializeEntries(logQueue.entries),\n                router: logQueue.router,\n                sourceType: logQueue.sourceType\n            });\n            socket.send(payload);\n            logQueue.entries = [];\n            logQueue.sourceType = undefined;\n        } catch (e) {\n        /** noop just incase */ }\n    }\n};\nconst stringifyUserArg = (arg)=>{\n    if (arg.kind !== 'arg') {\n        return arg;\n    }\n    return {\n        ...arg,\n        data: logStringify(arg.data)\n    };\n};\nconst createErrorArg = (error)=>{\n    const stack = stackWithOwners(error);\n    return {\n        kind: 'formatted-error-arg',\n        prefix: error.message ? error.name + \": \" + error.message : \"\" + error.name,\n        stack\n    };\n};\nconst createLogEntry = (level, args)=>{\n    // do not abstract this, it implicitly relies on which functions call it. forcing the inlined implementation makes you think about callers\n    // error capture stack trace maybe\n    const stack = stackWithOwners(new Error());\n    const stackLines = stack == null ? void 0 : stack.split('\\n');\n    const cleanStack = stackLines == null ? void 0 : stackLines.slice(3).join('\\n') // this is probably ignored anyways\n    ;\n    const entry = {\n        kind: 'console',\n        consoleMethodStack: cleanStack != null ? cleanStack : null,\n        method: level,\n        args: args.map((arg)=>{\n            if (arg instanceof Error) {\n                return createErrorArg(arg);\n            }\n            return {\n                kind: 'arg',\n                data: preLogSerializationClone(arg)\n            };\n        })\n    };\n    logQueue.scheduleLogSend(entry);\n};\nconst forwardErrorLog = (args)=>{\n    const errorObjects = args.filter((arg)=>arg instanceof Error);\n    const first = errorObjects.at(0);\n    if (first) {\n        const source = (0, _errorsource.getErrorSource)(first);\n        if (source) {\n            logQueue.sourceType = source;\n        }\n    }\n    /**\n   * browser shows stack regardless of type of data passed to console.error, so we should do the same\n   *\n   * do not abstract this, it implicitly relies on which functions call it. forcing the inlined implementation makes you think about callers\n   */ const stack = stackWithOwners(new Error());\n    const stackLines = stack == null ? void 0 : stack.split('\\n');\n    const cleanStack = stackLines == null ? void 0 : stackLines.slice(3).join('\\n');\n    const entry = {\n        kind: 'any-logged-error',\n        method: 'error',\n        consoleErrorStack: cleanStack != null ? cleanStack : '',\n        args: args.map((arg)=>{\n            if (arg instanceof Error) {\n                return createErrorArg(arg);\n            }\n            return {\n                kind: 'arg',\n                data: preLogSerializationClone(arg)\n            };\n        })\n    };\n    logQueue.scheduleLogSend(entry);\n};\nconst createUncaughtErrorEntry = (errorName, errorMessage, fullStack)=>{\n    const entry = {\n        kind: 'formatted-error',\n        prefix: \"Uncaught \" + errorName + \": \" + errorMessage,\n        stack: fullStack,\n        method: 'error'\n    };\n    logQueue.scheduleLogSend(entry);\n};\nconst stackWithOwners = (error)=>{\n    let ownerStack = '';\n    (0, _stitchederror.setOwnerStackIfAvailable)(error);\n    ownerStack = (0, _stitchederror.getOwnerStack)(error) || '';\n    const stack = (error.stack || '') + ownerStack;\n    return stack;\n};\nfunction logUnhandledRejection(reason) {\n    if (reason instanceof Error) {\n        createUnhandledRejectionErrorEntry(reason, stackWithOwners(reason));\n        return;\n    }\n    createUnhandledRejectionNonErrorEntry(reason);\n}\nconst createUnhandledRejectionErrorEntry = (error, fullStack)=>{\n    const source = (0, _errorsource.getErrorSource)(error);\n    if (source) {\n        logQueue.sourceType = source;\n    }\n    const entry = {\n        kind: 'formatted-error',\n        prefix: \"⨯ unhandledRejection: \" + error.name + \": \" + error.message,\n        stack: fullStack,\n        method: 'error'\n    };\n    logQueue.scheduleLogSend(entry);\n};\nconst createUnhandledRejectionNonErrorEntry = (reason)=>{\n    const entry = {\n        kind: 'any-logged-error',\n        // we can't access the stack since the event is dispatched async and creating an inline error would be meaningless\n        consoleErrorStack: '',\n        method: 'error',\n        args: [\n            {\n                kind: 'arg',\n                data: \"⨯ unhandledRejection:\",\n                isRejectionMessage: true\n            },\n            {\n                kind: 'arg',\n                data: preLogSerializationClone(reason)\n            }\n        ]\n    };\n    logQueue.scheduleLogSend(entry);\n};\nconst isHMR = (args)=>{\n    const firstArg = args[0];\n    if (typeof firstArg !== 'string') {\n        return false;\n    }\n    if (firstArg.startsWith('[Fast Refresh]')) {\n        return true;\n    }\n    if (firstArg.startsWith('[HMR]')) {\n        return true;\n    }\n    return false;\n};\nconst isIgnoredLog = (args)=>{\n    if (args.length < 3) {\n        return false;\n    }\n    const [format, styles, label] = args;\n    if (typeof format !== 'string' || typeof styles !== 'string' || typeof label !== 'string') {\n        return false;\n    }\n    // kinda hacky, we should define a common format for these strings so we can safely ignore\n    return format.startsWith('%c%s%c') && styles.includes('background:');\n};\nfunction forwardUnhandledError(error) {\n    createUncaughtErrorEntry(error.name, error.message, stackWithOwners(error));\n}\nconst initializeDebugLogForwarding = (router)=>{\n    // probably don't need this\n    if (isPatched) {\n        return;\n    }\n    // TODO(rob): why does this break rendering on server, important to know incase the same bug appears in browser\n    if (typeof window === 'undefined') {\n        return;\n    }\n    // better to be safe than sorry\n    try {\n        methods.forEach((method)=>(0, _forwardlogsshared.patchConsoleMethod)(method, function(_) {\n                for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n                    args[_key - 1] = arguments[_key];\n                }\n                if (isHMR(args)) {\n                    return;\n                }\n                if (isIgnoredLog(args)) {\n                    return;\n                }\n                createLogEntry(method, args);\n            }));\n    } catch (e) {}\n    logQueue.router = router;\n    isPatched = true;\n};\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n  Object.defineProperty(exports.default, '__esModule', { value: true });\n  Object.assign(exports.default, exports);\n  module.exports = exports.default;\n}\n\n//# sourceMappingURL=forward-logs.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvZm9yd2FyZC1sb2dzLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsTUFBTSxDQVdMO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCw2QkFBNkIsbUJBQU8sQ0FBQyxrUkFBMEM7QUFDL0UsdUJBQXVCLG1CQUFPLENBQUMsOFFBQXlCO0FBQ3hELHFCQUFxQixtQkFBTyxDQUFDLDZQQUFrQztBQUMvRCwrQkFBK0IsbUJBQU8sQ0FBQyxrUkFBMkI7QUFDbEUsMkJBQTJCLG1CQUFPLENBQUMsOFFBQWtDO0FBQ3JFO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNHQUFzRyxhQUFhO0FBQ25IO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlELGFBQWE7QUFDdEU7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNC43X0BiYWJlbCtjb3JlQDcuMjguM19Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHBsYXl3cmlnaHQrdGVzdEAxLjU1LjBfcmVhY3QtZF80N2ZmMzgxM2Q3OTA1NjZkZjI1NGEyMTYzNTUwYzJkNS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9mb3J3YXJkLWxvZ3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICB2YWx1ZTogdHJ1ZVxufSk7XG4wICYmIChtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBQUk9NSVNFX01BUktFUjogbnVsbCxcbiAgICBVTkFWQUlMQUJMRV9NQVJLRVI6IG51bGwsXG4gICAgZm9yd2FyZEVycm9yTG9nOiBudWxsLFxuICAgIGZvcndhcmRVbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgICBpbml0aWFsaXplRGVidWdMb2dGb3J3YXJkaW5nOiBudWxsLFxuICAgIGlzVGVybWluYWxMb2dnaW5nRW5hYmxlZDogbnVsbCxcbiAgICBsb2dRdWV1ZTogbnVsbCxcbiAgICBsb2dTdHJpbmdpZnk6IG51bGwsXG4gICAgbG9nVW5oYW5kbGVkUmVqZWN0aW9uOiBudWxsLFxuICAgIHByZUxvZ1NlcmlhbGl6YXRpb25DbG9uZTogbnVsbFxufSk7XG5mdW5jdGlvbiBfZXhwb3J0KHRhcmdldCwgYWxsKSB7XG4gICAgZm9yKHZhciBuYW1lIGluIGFsbClPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGdldDogYWxsW25hbWVdXG4gICAgfSk7XG59XG5fZXhwb3J0KGV4cG9ydHMsIHtcbiAgICBQUk9NSVNFX01BUktFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBQUk9NSVNFX01BUktFUjtcbiAgICB9LFxuICAgIFVOQVZBSUxBQkxFX01BUktFUjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBVTkFWQUlMQUJMRV9NQVJLRVI7XG4gICAgfSxcbiAgICBmb3J3YXJkRXJyb3JMb2c6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZm9yd2FyZEVycm9yTG9nO1xuICAgIH0sXG4gICAgZm9yd2FyZFVuaGFuZGxlZEVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZvcndhcmRVbmhhbmRsZWRFcnJvcjtcbiAgICB9LFxuICAgIGluaXRpYWxpemVEZWJ1Z0xvZ0ZvcndhcmRpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZURlYnVnTG9nRm9yd2FyZGluZztcbiAgICB9LFxuICAgIGlzVGVybWluYWxMb2dnaW5nRW5hYmxlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQ7XG4gICAgfSxcbiAgICBsb2dRdWV1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBsb2dRdWV1ZTtcbiAgICB9LFxuICAgIGxvZ1N0cmluZ2lmeTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBsb2dTdHJpbmdpZnk7XG4gICAgfSxcbiAgICBsb2dVbmhhbmRsZWRSZWplY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbG9nVW5oYW5kbGVkUmVqZWN0aW9uO1xuICAgIH0sXG4gICAgcHJlTG9nU2VyaWFsaXphdGlvbkNsb25lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHByZUxvZ1NlcmlhbGl6YXRpb25DbG9uZTtcbiAgICB9XG59KTtcbmNvbnN0IF9zYWZlc3RhYmxlc3RyaW5naWZ5ID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9zYWZlLXN0YWJsZS1zdHJpbmdpZnlcIik7XG5jb25zdCBfc3RpdGNoZWRlcnJvciA9IHJlcXVpcmUoXCIuL2Vycm9ycy9zdGl0Y2hlZC1lcnJvclwiKTtcbmNvbnN0IF9lcnJvcnNvdXJjZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9zaGFyZWQvbGliL2Vycm9yLXNvdXJjZVwiKTtcbmNvbnN0IF90ZXJtaW5hbGxvZ2dpbmdjb25maWcgPSByZXF1aXJlKFwiLi90ZXJtaW5hbC1sb2dnaW5nLWNvbmZpZ1wiKTtcbmNvbnN0IF9mb3J3YXJkbG9nc3NoYXJlZCA9IHJlcXVpcmUoXCIuLi8uLi9zaGFyZWQvZm9yd2FyZC1sb2dzLXNoYXJlZFwiKTtcbmNvbnN0IHRlcm1pbmFsTG9nZ2luZ0NvbmZpZyA9ICgwLCBfdGVybWluYWxsb2dnaW5nY29uZmlnLmdldFRlcm1pbmFsTG9nZ2luZ0NvbmZpZykoKTtcbmNvbnN0IFBST01JU0VfTUFSS0VSID0gJ1Byb21pc2Uge30nO1xuY29uc3QgVU5BVkFJTEFCTEVfTUFSS0VSID0gJ1tVbmFibGUgdG8gdmlld10nO1xuY29uc3QgbWF4aW11bURlcHRoID0gdHlwZW9mIHRlcm1pbmFsTG9nZ2luZ0NvbmZpZyA9PT0gJ29iamVjdCcgJiYgdGVybWluYWxMb2dnaW5nQ29uZmlnLmRlcHRoTGltaXQgPyB0ZXJtaW5hbExvZ2dpbmdDb25maWcuZGVwdGhMaW1pdCA6IDU7XG5jb25zdCBtYXhpbXVtQnJlYWR0aCA9IHR5cGVvZiB0ZXJtaW5hbExvZ2dpbmdDb25maWcgPT09ICdvYmplY3QnICYmIHRlcm1pbmFsTG9nZ2luZ0NvbmZpZy5lZGdlTGltaXQgPyB0ZXJtaW5hbExvZ2dpbmdDb25maWcuZWRnZUxpbWl0IDogMTAwO1xuY29uc3Qgc3RyaW5naWZ5ID0gKDAsIF9zYWZlc3RhYmxlc3RyaW5naWZ5LmNvbmZpZ3VyZSkoe1xuICAgIG1heGltdW1EZXB0aCxcbiAgICBtYXhpbXVtQnJlYWR0aFxufSk7XG5jb25zdCBpc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQgPSAoMCwgX3Rlcm1pbmFsbG9nZ2luZ2NvbmZpZy5nZXRJc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQpKCk7XG5jb25zdCBtZXRob2RzID0gW1xuICAgICdsb2cnLFxuICAgICdpbmZvJyxcbiAgICAnd2FybicsXG4gICAgJ2RlYnVnJyxcbiAgICAndGFibGUnLFxuICAgICdhc3NlcnQnLFxuICAgICdkaXInLFxuICAgICdkaXJ4bWwnLFxuICAgICdncm91cCcsXG4gICAgJ2dyb3VwQ29sbGFwc2VkJyxcbiAgICAnZ3JvdXBFbmQnLFxuICAgICd0cmFjZSdcbl07XG5mdW5jdGlvbiBwcmVMb2dTZXJpYWxpemF0aW9uQ2xvbmUodmFsdWUsIHNlZW4pIHtcbiAgICBpZiAoc2VlbiA9PT0gdm9pZCAwKSBzZWVuID0gbmV3IFdlYWtNYXAoKTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIF9mb3J3YXJkbG9nc3NoYXJlZC5VTkRFRklORURfTUFSS0VSO1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gdmFsdWU7XG4gICAgaWYgKHNlZW4uaGFzKHZhbHVlKSkgcmV0dXJuIHNlZW4uZ2V0KHZhbHVlKTtcbiAgICB0cnkge1xuICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gVU5BVkFJTEFCTEVfTUFSS0VSO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbicpIHJldHVybiBQUk9NSVNFX01BUktFUjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBVTkFWQUlMQUJMRV9NQVJLRVI7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBjb25zdCBvdXQgPSBbXTtcbiAgICAgICAgc2Vlbi5zZXQodmFsdWUsIG91dCk7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSl7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG91dC5wdXNoKHByZUxvZ1NlcmlhbGl6YXRpb25DbG9uZShpdGVtLCBzZWVuKSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgb3V0LnB1c2goVU5BVkFJTEFCTEVfTUFSS0VSKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gICAgaWYgKHByb3RvID09PSBPYmplY3QucHJvdG90eXBlIHx8IHByb3RvID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG91dCA9IHt9O1xuICAgICAgICBzZWVuLnNldCh2YWx1ZSwgb3V0KTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWUpKXtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb3V0W2tleV0gPSBwcmVMb2dTZXJpYWxpemF0aW9uQ2xvbmUodmFsdWVba2V5XSwgc2Vlbik7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgb3V0W2tleV0gPSBVTkFWQUlMQUJMRV9NQVJLRVI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5jb25zdCBsb2dTdHJpbmdpZnkgPSAoZGF0YSk9PntcbiAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBzdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgIHJldHVybiByZXN1bHQgIT0gbnVsbCA/IHJlc3VsdCA6ICdcIicgKyBVTkFWQUlMQUJMRV9NQVJLRVIgKyAnXCInO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuICdcIicgKyBVTkFWQUlMQUJMRV9NQVJLRVIgKyAnXCInO1xuICAgIH1cbn07XG5jb25zdCBhZnRlclRoaXNGcmFtZSA9IChjYik9PntcbiAgICBsZXQgdGltZW91dDtcbiAgICBjb25zdCByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKT0+e1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuICgpPT57XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIH07XG59O1xubGV0IGlzUGF0Y2hlZCA9IGZhbHNlO1xuY29uc3Qgc2VyaWFsaXplRW50cmllcyA9IChlbnRyaWVzKT0+ZW50cmllcy5tYXAoKGNsaWVudEVudHJ5KT0+e1xuICAgICAgICBzd2l0Y2goY2xpZW50RW50cnkua2luZCl7XG4gICAgICAgICAgICBjYXNlICdhbnktbG9nZ2VkLWVycm9yJzpcbiAgICAgICAgICAgIGNhc2UgJ2NvbnNvbGUnOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmNsaWVudEVudHJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogY2xpZW50RW50cnkuYXJncy5tYXAoc3RyaW5naWZ5VXNlckFyZylcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdmb3JtYXR0ZWQtZXJyb3InOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsaWVudEVudHJ5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbmNvbnN0IGxvZ1F1ZXVlID0ge1xuICAgIGVudHJpZXM6IFtdLFxuICAgIGZsdXNoU2NoZWR1bGVkOiBmYWxzZSxcbiAgICBjYW5jZWxGbHVzaDogbnVsbCxcbiAgICBzb2NrZXQ6IG51bGwsXG4gICAgc291cmNlVHlwZTogdW5kZWZpbmVkLFxuICAgIHJvdXRlcjogbnVsbCxcbiAgICBzY2hlZHVsZUxvZ1NlbmQ6IChlbnRyeSk9PntcbiAgICAgICAgbG9nUXVldWUuZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICAgICAgaWYgKGxvZ1F1ZXVlLmZsdXNoU2NoZWR1bGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2FmZSB0byBkZXJlZiBhbmQgdXNlIGluIHNldFRpbWVvdXQgY2xvc3VyZSBzaW5jZSB3ZSBjYW5jZWwgb24gbmV3IHNvY2tldFxuICAgICAgICBjb25zdCBzb2NrZXQgPSBsb2dRdWV1ZS5zb2NrZXQ7XG4gICAgICAgIGlmICghc29ja2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2UgcHJvYmFibHkgZG9udCBuZWVkIHRoaXNcbiAgICAgICAgbG9nUXVldWUuZmx1c2hTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgICAvLyBub24gYmxvY2tpbmcgbG9nIGZsdXNoLCBydW5zIGF0IG1vc3Qgb25jZSBwZXIgZnJhbWVcbiAgICAgICAgbG9nUXVldWUuY2FuY2VsRmx1c2ggPSBhZnRlclRoaXNGcmFtZSgoKT0+e1xuICAgICAgICAgICAgbG9nUXVldWUuZmx1c2hTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIGp1c3QgaW5jYXNlXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiAnYnJvd3Nlci1sb2dzJyxcbiAgICAgICAgICAgICAgICAgICAgZW50cmllczogc2VyaWFsaXplRW50cmllcyhsb2dRdWV1ZS5lbnRyaWVzKSxcbiAgICAgICAgICAgICAgICAgICAgcm91dGVyOiBsb2dRdWV1ZS5yb3V0ZXIsXG4gICAgICAgICAgICAgICAgICAgIC8vIG5lZWRlZCBmb3Igc291cmNlIG1hcHBpbmcsIHdlIGp1c3QgYXNzaWduIHRoZSBzb3VyY2VUeXBlIGZyb20gdGhlIGxhc3QgZXJyb3IgZm9yIHRoZSB3aG9sZSBiYXRjaFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VUeXBlOiBsb2dRdWV1ZS5zb3VyY2VUeXBlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc29ja2V0LnNlbmQocGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgbG9nUXVldWUuZW50cmllcyA9IFtdO1xuICAgICAgICAgICAgICAgIGxvZ1F1ZXVlLnNvdXJjZVR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBlcnJvciAobWFrZSBzdXJlIHUgZG9uJ3QgaW5maW5pdGUgbG9vcClcbiAgICAgICAgICAgIC8qIG5vb3AgKi8gfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIG9uU29ja2V0UmVhZHk6IChzb2NrZXQpPT57XG4gICAgICAgIGlmIChzb2NrZXQucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgICAgICAgIC8vIGludmFyaWFudFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGluY2FzZSBhbiBleGlzdGluZyB0aW1lb3V0IHdhcyBnb2luZyB0byBydW4gd2l0aCBhIHN0YWxlIHNvY2tldFxuICAgICAgICBsb2dRdWV1ZS5jYW5jZWxGbHVzaCA9PSBudWxsID8gdm9pZCAwIDogbG9nUXVldWUuY2FuY2VsRmx1c2guY2FsbChsb2dRdWV1ZSk7XG4gICAgICAgIGxvZ1F1ZXVlLnNvY2tldCA9IHNvY2tldDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6ICdicm93c2VyLWxvZ3MnLFxuICAgICAgICAgICAgICAgIGVudHJpZXM6IHNlcmlhbGl6ZUVudHJpZXMobG9nUXVldWUuZW50cmllcyksXG4gICAgICAgICAgICAgICAgcm91dGVyOiBsb2dRdWV1ZS5yb3V0ZXIsXG4gICAgICAgICAgICAgICAgc291cmNlVHlwZTogbG9nUXVldWUuc291cmNlVHlwZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzb2NrZXQuc2VuZChwYXlsb2FkKTtcbiAgICAgICAgICAgIGxvZ1F1ZXVlLmVudHJpZXMgPSBbXTtcbiAgICAgICAgICAgIGxvZ1F1ZXVlLnNvdXJjZVR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLyoqIG5vb3AganVzdCBpbmNhc2UgKi8gfVxuICAgIH1cbn07XG5jb25zdCBzdHJpbmdpZnlVc2VyQXJnID0gKGFyZyk9PntcbiAgICBpZiAoYXJnLmtpbmQgIT09ICdhcmcnKSB7XG4gICAgICAgIHJldHVybiBhcmc7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmFyZyxcbiAgICAgICAgZGF0YTogbG9nU3RyaW5naWZ5KGFyZy5kYXRhKVxuICAgIH07XG59O1xuY29uc3QgY3JlYXRlRXJyb3JBcmcgPSAoZXJyb3IpPT57XG4gICAgY29uc3Qgc3RhY2sgPSBzdGFja1dpdGhPd25lcnMoZXJyb3IpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICdmb3JtYXR0ZWQtZXJyb3ItYXJnJyxcbiAgICAgICAgcHJlZml4OiBlcnJvci5tZXNzYWdlID8gZXJyb3IubmFtZSArIFwiOiBcIiArIGVycm9yLm1lc3NhZ2UgOiBcIlwiICsgZXJyb3IubmFtZSxcbiAgICAgICAgc3RhY2tcbiAgICB9O1xufTtcbmNvbnN0IGNyZWF0ZUxvZ0VudHJ5ID0gKGxldmVsLCBhcmdzKT0+e1xuICAgIC8vIGRvIG5vdCBhYnN0cmFjdCB0aGlzLCBpdCBpbXBsaWNpdGx5IHJlbGllcyBvbiB3aGljaCBmdW5jdGlvbnMgY2FsbCBpdC4gZm9yY2luZyB0aGUgaW5saW5lZCBpbXBsZW1lbnRhdGlvbiBtYWtlcyB5b3UgdGhpbmsgYWJvdXQgY2FsbGVyc1xuICAgIC8vIGVycm9yIGNhcHR1cmUgc3RhY2sgdHJhY2UgbWF5YmVcbiAgICBjb25zdCBzdGFjayA9IHN0YWNrV2l0aE93bmVycyhuZXcgRXJyb3IoKSk7XG4gICAgY29uc3Qgc3RhY2tMaW5lcyA9IHN0YWNrID09IG51bGwgPyB2b2lkIDAgOiBzdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgY2xlYW5TdGFjayA9IHN0YWNrTGluZXMgPT0gbnVsbCA/IHZvaWQgMCA6IHN0YWNrTGluZXMuc2xpY2UoMykuam9pbignXFxuJykgLy8gdGhpcyBpcyBwcm9iYWJseSBpZ25vcmVkIGFueXdheXNcbiAgICA7XG4gICAgY29uc3QgZW50cnkgPSB7XG4gICAgICAgIGtpbmQ6ICdjb25zb2xlJyxcbiAgICAgICAgY29uc29sZU1ldGhvZFN0YWNrOiBjbGVhblN0YWNrICE9IG51bGwgPyBjbGVhblN0YWNrIDogbnVsbCxcbiAgICAgICAgbWV0aG9kOiBsZXZlbCxcbiAgICAgICAgYXJnczogYXJncy5tYXAoKGFyZyk9PntcbiAgICAgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVFcnJvckFyZyhhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBraW5kOiAnYXJnJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBwcmVMb2dTZXJpYWxpemF0aW9uQ2xvbmUoYXJnKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICB9O1xuICAgIGxvZ1F1ZXVlLnNjaGVkdWxlTG9nU2VuZChlbnRyeSk7XG59O1xuY29uc3QgZm9yd2FyZEVycm9yTG9nID0gKGFyZ3MpPT57XG4gICAgY29uc3QgZXJyb3JPYmplY3RzID0gYXJncy5maWx0ZXIoKGFyZyk9PmFyZyBpbnN0YW5jZW9mIEVycm9yKTtcbiAgICBjb25zdCBmaXJzdCA9IGVycm9yT2JqZWN0cy5hdCgwKTtcbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgICAgY29uc3Qgc291cmNlID0gKDAsIF9lcnJvcnNvdXJjZS5nZXRFcnJvclNvdXJjZSkoZmlyc3QpO1xuICAgICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgICAgICBsb2dRdWV1ZS5zb3VyY2VUeXBlID0gc291cmNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgKiBicm93c2VyIHNob3dzIHN0YWNrIHJlZ2FyZGxlc3Mgb2YgdHlwZSBvZiBkYXRhIHBhc3NlZCB0byBjb25zb2xlLmVycm9yLCBzbyB3ZSBzaG91bGQgZG8gdGhlIHNhbWVcbiAgICpcbiAgICogZG8gbm90IGFic3RyYWN0IHRoaXMsIGl0IGltcGxpY2l0bHkgcmVsaWVzIG9uIHdoaWNoIGZ1bmN0aW9ucyBjYWxsIGl0LiBmb3JjaW5nIHRoZSBpbmxpbmVkIGltcGxlbWVudGF0aW9uIG1ha2VzIHlvdSB0aGluayBhYm91dCBjYWxsZXJzXG4gICAqLyBjb25zdCBzdGFjayA9IHN0YWNrV2l0aE93bmVycyhuZXcgRXJyb3IoKSk7XG4gICAgY29uc3Qgc3RhY2tMaW5lcyA9IHN0YWNrID09IG51bGwgPyB2b2lkIDAgOiBzdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgY2xlYW5TdGFjayA9IHN0YWNrTGluZXMgPT0gbnVsbCA/IHZvaWQgMCA6IHN0YWNrTGluZXMuc2xpY2UoMykuam9pbignXFxuJyk7XG4gICAgY29uc3QgZW50cnkgPSB7XG4gICAgICAgIGtpbmQ6ICdhbnktbG9nZ2VkLWVycm9yJyxcbiAgICAgICAgbWV0aG9kOiAnZXJyb3InLFxuICAgICAgICBjb25zb2xlRXJyb3JTdGFjazogY2xlYW5TdGFjayAhPSBudWxsID8gY2xlYW5TdGFjayA6ICcnLFxuICAgICAgICBhcmdzOiBhcmdzLm1hcCgoYXJnKT0+e1xuICAgICAgICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUVycm9yQXJnKGFyZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGtpbmQ6ICdhcmcnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHByZUxvZ1NlcmlhbGl6YXRpb25DbG9uZShhcmcpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgIH07XG4gICAgbG9nUXVldWUuc2NoZWR1bGVMb2dTZW5kKGVudHJ5KTtcbn07XG5jb25zdCBjcmVhdGVVbmNhdWdodEVycm9yRW50cnkgPSAoZXJyb3JOYW1lLCBlcnJvck1lc3NhZ2UsIGZ1bGxTdGFjayk9PntcbiAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgICAga2luZDogJ2Zvcm1hdHRlZC1lcnJvcicsXG4gICAgICAgIHByZWZpeDogXCJVbmNhdWdodCBcIiArIGVycm9yTmFtZSArIFwiOiBcIiArIGVycm9yTWVzc2FnZSxcbiAgICAgICAgc3RhY2s6IGZ1bGxTdGFjayxcbiAgICAgICAgbWV0aG9kOiAnZXJyb3InXG4gICAgfTtcbiAgICBsb2dRdWV1ZS5zY2hlZHVsZUxvZ1NlbmQoZW50cnkpO1xufTtcbmNvbnN0IHN0YWNrV2l0aE93bmVycyA9IChlcnJvcik9PntcbiAgICBsZXQgb3duZXJTdGFjayA9ICcnO1xuICAgICgwLCBfc3RpdGNoZWRlcnJvci5zZXRPd25lclN0YWNrSWZBdmFpbGFibGUpKGVycm9yKTtcbiAgICBvd25lclN0YWNrID0gKDAsIF9zdGl0Y2hlZGVycm9yLmdldE93bmVyU3RhY2spKGVycm9yKSB8fCAnJztcbiAgICBjb25zdCBzdGFjayA9IChlcnJvci5zdGFjayB8fCAnJykgKyBvd25lclN0YWNrO1xuICAgIHJldHVybiBzdGFjaztcbn07XG5mdW5jdGlvbiBsb2dVbmhhbmRsZWRSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGNyZWF0ZVVuaGFuZGxlZFJlamVjdGlvbkVycm9yRW50cnkocmVhc29uLCBzdGFja1dpdGhPd25lcnMocmVhc29uKSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3JlYXRlVW5oYW5kbGVkUmVqZWN0aW9uTm9uRXJyb3JFbnRyeShyZWFzb24pO1xufVxuY29uc3QgY3JlYXRlVW5oYW5kbGVkUmVqZWN0aW9uRXJyb3JFbnRyeSA9IChlcnJvciwgZnVsbFN0YWNrKT0+e1xuICAgIGNvbnN0IHNvdXJjZSA9ICgwLCBfZXJyb3Jzb3VyY2UuZ2V0RXJyb3JTb3VyY2UpKGVycm9yKTtcbiAgICBpZiAoc291cmNlKSB7XG4gICAgICAgIGxvZ1F1ZXVlLnNvdXJjZVR5cGUgPSBzb3VyY2U7XG4gICAgfVxuICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICBraW5kOiAnZm9ybWF0dGVkLWVycm9yJyxcbiAgICAgICAgcHJlZml4OiBcIuKoryB1bmhhbmRsZWRSZWplY3Rpb246IFwiICsgZXJyb3IubmFtZSArIFwiOiBcIiArIGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIHN0YWNrOiBmdWxsU3RhY2ssXG4gICAgICAgIG1ldGhvZDogJ2Vycm9yJ1xuICAgIH07XG4gICAgbG9nUXVldWUuc2NoZWR1bGVMb2dTZW5kKGVudHJ5KTtcbn07XG5jb25zdCBjcmVhdGVVbmhhbmRsZWRSZWplY3Rpb25Ob25FcnJvckVudHJ5ID0gKHJlYXNvbik9PntcbiAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgICAga2luZDogJ2FueS1sb2dnZWQtZXJyb3InLFxuICAgICAgICAvLyB3ZSBjYW4ndCBhY2Nlc3MgdGhlIHN0YWNrIHNpbmNlIHRoZSBldmVudCBpcyBkaXNwYXRjaGVkIGFzeW5jIGFuZCBjcmVhdGluZyBhbiBpbmxpbmUgZXJyb3Igd291bGQgYmUgbWVhbmluZ2xlc3NcbiAgICAgICAgY29uc29sZUVycm9yU3RhY2s6ICcnLFxuICAgICAgICBtZXRob2Q6ICdlcnJvcicsXG4gICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBraW5kOiAnYXJnJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBcIuKoryB1bmhhbmRsZWRSZWplY3Rpb246XCIsXG4gICAgICAgICAgICAgICAgaXNSZWplY3Rpb25NZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtpbmQ6ICdhcmcnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHByZUxvZ1NlcmlhbGl6YXRpb25DbG9uZShyZWFzb24pXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9O1xuICAgIGxvZ1F1ZXVlLnNjaGVkdWxlTG9nU2VuZChlbnRyeSk7XG59O1xuY29uc3QgaXNITVIgPSAoYXJncyk9PntcbiAgICBjb25zdCBmaXJzdEFyZyA9IGFyZ3NbMF07XG4gICAgaWYgKHR5cGVvZiBmaXJzdEFyZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZmlyc3RBcmcuc3RhcnRzV2l0aCgnW0Zhc3QgUmVmcmVzaF0nKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGZpcnN0QXJnLnN0YXJ0c1dpdGgoJ1tITVJdJykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5jb25zdCBpc0lnbm9yZWRMb2cgPSAoYXJncyk9PntcbiAgICBpZiAoYXJncy5sZW5ndGggPCAzKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgW2Zvcm1hdCwgc3R5bGVzLCBsYWJlbF0gPSBhcmdzO1xuICAgIGlmICh0eXBlb2YgZm9ybWF0ICE9PSAnc3RyaW5nJyB8fCB0eXBlb2Ygc3R5bGVzICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgbGFiZWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8ga2luZGEgaGFja3ksIHdlIHNob3VsZCBkZWZpbmUgYSBjb21tb24gZm9ybWF0IGZvciB0aGVzZSBzdHJpbmdzIHNvIHdlIGNhbiBzYWZlbHkgaWdub3JlXG4gICAgcmV0dXJuIGZvcm1hdC5zdGFydHNXaXRoKCclYyVzJWMnKSAmJiBzdHlsZXMuaW5jbHVkZXMoJ2JhY2tncm91bmQ6Jyk7XG59O1xuZnVuY3Rpb24gZm9yd2FyZFVuaGFuZGxlZEVycm9yKGVycm9yKSB7XG4gICAgY3JlYXRlVW5jYXVnaHRFcnJvckVudHJ5KGVycm9yLm5hbWUsIGVycm9yLm1lc3NhZ2UsIHN0YWNrV2l0aE93bmVycyhlcnJvcikpO1xufVxuY29uc3QgaW5pdGlhbGl6ZURlYnVnTG9nRm9yd2FyZGluZyA9IChyb3V0ZXIpPT57XG4gICAgLy8gcHJvYmFibHkgZG9uJ3QgbmVlZCB0aGlzXG4gICAgaWYgKGlzUGF0Y2hlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFRPRE8ocm9iKTogd2h5IGRvZXMgdGhpcyBicmVhayByZW5kZXJpbmcgb24gc2VydmVyLCBpbXBvcnRhbnQgdG8ga25vdyBpbmNhc2UgdGhlIHNhbWUgYnVnIGFwcGVhcnMgaW4gYnJvd3NlclxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGJldHRlciB0byBiZSBzYWZlIHRoYW4gc29ycnlcbiAgICB0cnkge1xuICAgICAgICBtZXRob2RzLmZvckVhY2goKG1ldGhvZCk9PigwLCBfZm9yd2FyZGxvZ3NzaGFyZWQucGF0Y2hDb25zb2xlTWV0aG9kKShtZXRob2QsIGZ1bmN0aW9uKF8pIHtcbiAgICAgICAgICAgICAgICBmb3IodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5Kyspe1xuICAgICAgICAgICAgICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzSE1SKGFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzSWdub3JlZExvZyhhcmdzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvZ0VudHJ5KG1ldGhvZCwgYXJncyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICBsb2dRdWV1ZS5yb3V0ZXIgPSByb3V0ZXI7XG4gICAgaXNQYXRjaGVkID0gdHJ1ZTtcbn07XG5cbmlmICgodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIGV4cG9ydHMuZGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cy5kZWZhdWx0ICE9PSBudWxsKSkgJiYgdHlwZW9mIGV4cG9ydHMuZGVmYXVsdC5fX2VzTW9kdWxlID09PSAndW5kZWZpbmVkJykge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cy5kZWZhdWx0LCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gIE9iamVjdC5hc3NpZ24oZXhwb3J0cy5kZWZhdWx0LCBleHBvcnRzKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzLmRlZmF1bHQ7XG59XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcndhcmQtbG9ncy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/forward-logs.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js":
/*!*********************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js ***!
  \*********************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__  cjs */ \nvar _s = $RefreshSig$(), _s1 = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE: function() {\n        return SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE;\n    },\n    SegmentBoundaryTriggerNode: function() {\n        return SegmentBoundaryTriggerNode;\n    },\n    SegmentStateProvider: function() {\n        return SegmentStateProvider;\n    },\n    SegmentViewNode: function() {\n        return SegmentViewNode;\n    },\n    SegmentViewStateNode: function() {\n        return SegmentViewStateNode;\n    },\n    useSegmentState: function() {\n        return useSegmentState;\n    }\n});\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\nconst _nextdevtools = __webpack_require__(/*! next/dist/compiled/next-devtools */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/next-devtools/index.js\");\nconst _notfound = __webpack_require__(/*! ../../../client/components/not-found */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/components/not-found.js\");\nconst SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE = 'NEXT_DEVTOOLS_SIMULATED_ERROR';\nfunction SegmentTrieNode(param) {\n    _s();\n    let { type, pagePath } = param;\n    const { boundaryType, setBoundaryType } = useSegmentState();\n    const nodeState = (0, _react.useMemo)(()=>{\n        return {\n            type,\n            pagePath,\n            boundaryType,\n            setBoundaryType\n        };\n    }, [\n        type,\n        pagePath,\n        boundaryType,\n        setBoundaryType\n    ]);\n    // Use `useLayoutEffect` to ensure the state is updated during suspense.\n    // `useEffect` won't work as the state is preserved during suspense.\n    (0, _react.useLayoutEffect)(()=>{\n        _nextdevtools.dispatcher.segmentExplorerNodeAdd(nodeState);\n        return ()=>{\n            _nextdevtools.dispatcher.segmentExplorerNodeRemove(nodeState);\n        };\n    }, [\n        nodeState\n    ]);\n    return null;\n}\n_s(SegmentTrieNode, \"k23Ctjuj2wqf/SlbAMiKHh9fp5k=\", false, function() {\n    return [\n        useSegmentState\n    ];\n});\n_c = SegmentTrieNode;\nfunction NotFoundSegmentNode() {\n    (0, _notfound.notFound)();\n}\n_c1 = NotFoundSegmentNode;\nfunction ErrorSegmentNode() {\n    throw Object.defineProperty(new Error(SEGMENT_EXPLORER_SIMULATED_ERROR_MESSAGE), \"__NEXT_ERROR_CODE\", {\n        value: \"E394\",\n        enumerable: false,\n        configurable: true\n    });\n}\n_c2 = ErrorSegmentNode;\nconst forever = new Promise(()=>{});\nfunction LoadingSegmentNode() {\n    (0, _react.use)(forever);\n    return null;\n}\n_c3 = LoadingSegmentNode;\nfunction SegmentViewStateNode(param) {\n    let { page } = param;\n    (0, _react.useLayoutEffect)(()=>{\n        _nextdevtools.dispatcher.segmentExplorerUpdateRouteState(page);\n        return ()=>{\n            _nextdevtools.dispatcher.segmentExplorerUpdateRouteState('');\n        };\n    }, [\n        page\n    ]);\n    return null;\n}\n_c4 = SegmentViewStateNode;\nfunction SegmentBoundaryTriggerNode() {\n    _s1();\n    const { boundaryType } = useSegmentState();\n    let segmentNode = null;\n    if (boundaryType === 'loading') {\n        segmentNode = /*#__PURE__*/ (0, _jsxruntime.jsx)(LoadingSegmentNode, {});\n    } else if (boundaryType === 'not-found') {\n        segmentNode = /*#__PURE__*/ (0, _jsxruntime.jsx)(NotFoundSegmentNode, {});\n    } else if (boundaryType === 'error') {\n        segmentNode = /*#__PURE__*/ (0, _jsxruntime.jsx)(ErrorSegmentNode, {});\n    }\n    return segmentNode;\n}\n_s1(SegmentBoundaryTriggerNode, \"I9LjiBM7JR6BKs6eS8wwgKqR3h4=\", false, function() {\n    return [\n        useSegmentState\n    ];\n});\n_c5 = SegmentBoundaryTriggerNode;\nfunction SegmentViewNode(param) {\n    let { type, pagePath, children } = param;\n    const segmentNode = /*#__PURE__*/ (0, _jsxruntime.jsx)(SegmentTrieNode, {\n        type: type,\n        pagePath: pagePath\n    }, type);\n    return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n        children: [\n            segmentNode,\n            children\n        ]\n    });\n}\n_c6 = SegmentViewNode;\nconst SegmentStateContext = /*#__PURE__*/ (0, _react.createContext)({\n    boundaryType: null,\n    setBoundaryType: ()=>{}\n});\nfunction SegmentStateProvider(param) {\n    let { children } = param;\n    const [boundaryType, setBoundaryType] = (0, _react.useState)(null);\n    const [errorBoundaryKey, setErrorBoundaryKey] = (0, _react.useState)(0);\n    const reloadBoundary = (0, _react.useCallback)(()=>setErrorBoundaryKey((prev)=>prev + 1), []);\n    const setBoundaryTypeAndReload = (0, _react.useCallback)((type)=>{\n        if (type === null) {\n            reloadBoundary();\n        }\n        setBoundaryType(type);\n    }, [\n        reloadBoundary\n    ]);\n    return /*#__PURE__*/ (0, _jsxruntime.jsx)(SegmentStateContext.Provider, {\n        value: {\n            boundaryType,\n            setBoundaryType: setBoundaryTypeAndReload\n        },\n        children: children\n    }, errorBoundaryKey);\n}\n_c7 = SegmentStateProvider;\nfunction useSegmentState() {\n    return (0, _react.useContext)(SegmentStateContext);\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=segment-explorer-node.js.map\nvar _c, _c1, _c2, _c3, _c4, _c5, _c6, _c7;\n$RefreshReg$(_c, \"SegmentTrieNode\");\n$RefreshReg$(_c1, \"NotFoundSegmentNode\");\n$RefreshReg$(_c2, \"ErrorSegmentNode\");\n$RefreshReg$(_c3, \"LoadingSegmentNode\");\n$RefreshReg$(_c4, \"SegmentViewStateNode\");\n$RefreshReg$(_c5, \"SegmentBoundaryTriggerNode\");\n$RefreshReg$(_c6, \"SegmentViewNode\");\n$RefreshReg$(_c7, \"SegmentStateProvider\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvc2VnbWVudC1leHBsb3Jlci1ub2RlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0lBZWFBLHdDQUF3QztlQUF4Q0E7O0lBK0RHQywwQkFBMEI7ZUFBMUJBOztJQTBDQUMsb0JBQW9CO2VBQXBCQTs7SUE3QkFDLGVBQWU7ZUFBZkE7O0lBdkJBQyxvQkFBb0I7ZUFBcEJBOztJQXNGQUMsZUFBZTtlQUFmQTs7OzttQ0FoSlQ7MENBRW9CO3NDQUNGO0FBRWxCLE1BQU1MLDJDQUNYO0FBU0YseUJBQXlCLEtBTXhCOztJQU53QixNQUN2Qk8sSUFBSSxFQUNKQyxRQUFRLEVBSVQsR0FOd0I7SUFPdkIsTUFBTSxFQUFFQyxZQUFZLEVBQUVDLGVBQWUsRUFBRTtJQUN2QyxNQUFNQyxZQUE4QkMsQ0FBQUEsR0FBQUEsT0FBQUEsT0FBQUEsRUFBUTtRQUMxQyxPQUFPO1lBQ0xMO1lBQ0FDO1lBQ0FDO1lBQ0FDO1FBQ0Y7SUFDRixHQUFHO1FBQUNIO1FBQU1DO1FBQVVDO1FBQWNDO0tBQWdCO0lBRWxELHdFQUF3RTtJQUN4RSxvRUFBb0U7SUFDcEVHLENBQUFBLEdBQUFBLE9BQUFBLGVBQUFBLEVBQWdCO1FBQ2RDLGNBQUFBLFVBQVUsQ0FBQ0Msc0JBQXNCLENBQUNKO1FBQ2xDLE9BQU87WUFDTEcsY0FBQUEsVUFBVSxDQUFDRSx5QkFBeUIsQ0FBQ0w7UUFDdkM7SUFDRixHQUFHO1FBQUNBO0tBQVU7SUFFZCxPQUFPO0FBQ1Q7OztRQXBCNENOOzs7S0FQbkNDO0FBNkJUO0lBQ0VZLENBQUFBLEdBQUFBLFVBQUFBLFFBQUFBO0FBQ0Y7TUFGU0Q7QUFJVCxTQUFTRTtJQUNQLE1BQU0scUJBQW1ELENBQW5ELElBQUlDLE1BQU1wQiwyQ0FBVjtlQUFBO29CQUFBO3NCQUFBO0lBQWtEO0FBQzFEOztBQUVBLE1BQU1xQixVQUFVLElBQUlDLFFBQVEsS0FBTztBQUNuQztJQUNFRSxDQUFBQSxHQUFBQSxPQUFBQSxHQUFBQSxFQUFJSDtJQUNKLE9BQU87QUFDVDtNQUhTRTtBQUtGLDhCQUE4QixLQUEwQjtJQUExQixNQUFFRSxJQUFJLEVBQW9CLEdBQTFCO0lBQ25DWixDQUFBQSxHQUFBQSxPQUFBQSxlQUFBQSxFQUFnQjtRQUNkQyxjQUFBQSxVQUFVLENBQUNZLCtCQUErQixDQUFDRDtRQUMzQyxPQUFPO1lBQ0xYLGNBQUFBLFVBQVUsQ0FBQ1ksK0JBQStCLENBQUM7UUFDN0M7SUFDRixHQUFHO1FBQUNEO0tBQUs7SUFDVCxPQUFPO0FBQ1Q7TUFSZ0JyQjtBQVVUOztJQUNMLE1BQU0sRUFBRUssWUFBWSxFQUFFO0lBQ3RCLElBQUlrQixjQUErQjtJQUNuQyxJQUFJbEIsaUJBQWlCLFdBQVc7UUFDOUJrQixjQUFBQSxXQUFBQSxHQUFjLHFCQUFDSixvQkFBQUEsQ0FBQUE7SUFDakIsT0FBTyxJQUFJZCxpQkFBaUIsYUFBYTtRQUN2Q2tCLGNBQUFBLFdBQUFBLEdBQWMscUJBQUNWLHFCQUFBQSxDQUFBQTtJQUNqQixPQUFPLElBQUlSLGlCQUFpQixTQUFTO1FBQ25Da0IsY0FBYyxXQUFkQSxHQUFjLHFCQUFDUixrQkFBQUEsQ0FBQUE7SUFDakI7SUFDQSxPQUFPUTtBQUNUOzs7UUFWMkJ0Qjs7O01BRFhKO0FBYVQseUJBQXlCLEtBUS9CO0lBUitCLE1BQzlCTSxJQUFJLEVBQ0pDLFFBQVEsRUFDUm9CLFFBQVEsRUFLVCxHQVIrQjtJQVM5QixNQUFNRCxjQUFBQSxXQUFBQSxHQUNKLHFCQUFDckIsaUJBQUFBO1FBQTJCQyxNQUFNQTtRQUFNQyxVQUFVQTtPQUE1QkQ7SUFHeEIscUJBQ0U7O1lBQ0dvQjtZQUNBQzs7O0FBR1A7TUFuQmdCekI7QUFxQmhCLE1BQU0wQixzQkFBQUEsV0FBQUEsR0FBc0JDLENBQUFBLEdBQUFBLE9BQUFBLGFBQUFBLEVBR3pCO0lBQ0RyQixjQUFjO0lBQ2RDLGlCQUFpQixLQUFPO0FBQzFCO0FBRU8sOEJBQThCLEtBQXFDO0lBQXJDLE1BQUVrQixRQUFRLEVBQTJCLEdBQXJDO0lBQ25DLE1BQU0sQ0FBQ25CLGNBQWNDLGdCQUFnQixHQUFHcUIsQ0FBQUEsR0FBQUEsT0FBQUEsUUFBQUEsRUFFdEM7SUFFRixNQUFNLENBQUNDLGtCQUFrQkMsb0JBQW9CLEdBQUdGLENBQUFBLEdBQUFBLE9BQUFBLFFBQUFBLEVBQVM7SUFDekQsTUFBTUcsaUJBQWlCQyxDQUFBQSxHQUFBQSxPQUFBQSxXQUFXLEVBQ2hDLElBQU1GLG9CQUFvQixDQUFDRyxPQUFTQSxPQUFPLElBQzNDLEVBQUU7SUFHSixNQUFNQywyQkFBMkJGLENBQUFBLEdBQUFBLE9BQUFBLFdBQUFBLEVBQy9CLENBQUM1QjtRQUNDLElBQUlBLFNBQVMsTUFBTTtZQUNqQjJCO1FBQ0Y7UUFDQXhCLGdCQUFnQkg7SUFDbEIsR0FDQTtRQUFDMkI7S0FBZTtJQUdsQixxQkFDRSxxQkFBQ0wsb0JBQW9CUyxRQUFRO1FBRTNCQyxPQUFPO1lBQ0w5QjtZQUNBQyxpQkFBaUIyQjtRQUNuQjtrQkFFQ1Q7T0FOSUk7QUFTWDtNQWhDZ0I5QjtBQWtDVCxTQUFTRztJQUNkLE9BQU9tQyxDQUFBQSxHQUFBQSxPQUFBQSxVQUFBQSxFQUFXWDtBQUNwQiIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC9zZWdtZW50LWV4cGxvcmVyLW5vZGUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHtcbiAgdXNlU3RhdGUsXG4gIGNyZWF0ZUNvbnRleHQsXG4gIHVzZUNvbnRleHQsXG4gIHVzZSxcbiAgdXNlTWVtbyxcbiAgdXNlQ2FsbGJhY2ssXG59IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTGF5b3V0RWZmZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBkaXNwYXRjaGVyIH0gZnJvbSAnbmV4dC9kaXN0L2NvbXBpbGVkL25leHQtZGV2dG9vbHMnXG5pbXBvcnQgeyBub3RGb3VuZCB9IGZyb20gJy4uLy4uLy4uL2NsaWVudC9jb21wb25lbnRzL25vdC1mb3VuZCdcblxuZXhwb3J0IGNvbnN0IFNFR01FTlRfRVhQTE9SRVJfU0lNVUxBVEVEX0VSUk9SX01FU1NBR0UgPVxuICAnTkVYVF9ERVZUT09MU19TSU1VTEFURURfRVJST1InXG5cbmV4cG9ydCB0eXBlIFNlZ21lbnROb2RlU3RhdGUgPSB7XG4gIHR5cGU6IHN0cmluZ1xuICBwYWdlUGF0aDogc3RyaW5nXG4gIGJvdW5kYXJ5VHlwZTogc3RyaW5nIHwgbnVsbFxuICBzZXRCb3VuZGFyeVR5cGU6ICh0eXBlOiAnZXJyb3InIHwgJ25vdC1mb3VuZCcgfCAnbG9hZGluZycgfCBudWxsKSA9PiB2b2lkXG59XG5cbmZ1bmN0aW9uIFNlZ21lbnRUcmllTm9kZSh7XG4gIHR5cGUsXG4gIHBhZ2VQYXRoLFxufToge1xuICB0eXBlOiBzdHJpbmdcbiAgcGFnZVBhdGg6IHN0cmluZ1xufSk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHsgYm91bmRhcnlUeXBlLCBzZXRCb3VuZGFyeVR5cGUgfSA9IHVzZVNlZ21lbnRTdGF0ZSgpXG4gIGNvbnN0IG5vZGVTdGF0ZTogU2VnbWVudE5vZGVTdGF0ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlLFxuICAgICAgcGFnZVBhdGgsXG4gICAgICBib3VuZGFyeVR5cGUsXG4gICAgICBzZXRCb3VuZGFyeVR5cGUsXG4gICAgfVxuICB9LCBbdHlwZSwgcGFnZVBhdGgsIGJvdW5kYXJ5VHlwZSwgc2V0Qm91bmRhcnlUeXBlXSlcblxuICAvLyBVc2UgYHVzZUxheW91dEVmZmVjdGAgdG8gZW5zdXJlIHRoZSBzdGF0ZSBpcyB1cGRhdGVkIGR1cmluZyBzdXNwZW5zZS5cbiAgLy8gYHVzZUVmZmVjdGAgd29uJ3Qgd29yayBhcyB0aGUgc3RhdGUgaXMgcHJlc2VydmVkIGR1cmluZyBzdXNwZW5zZS5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBkaXNwYXRjaGVyLnNlZ21lbnRFeHBsb3Jlck5vZGVBZGQobm9kZVN0YXRlKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkaXNwYXRjaGVyLnNlZ21lbnRFeHBsb3Jlck5vZGVSZW1vdmUobm9kZVN0YXRlKVxuICAgIH1cbiAgfSwgW25vZGVTdGF0ZV0pXG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gTm90Rm91bmRTZWdtZW50Tm9kZSgpOiBSZWFjdC5SZWFjdE5vZGUge1xuICBub3RGb3VuZCgpXG59XG5cbmZ1bmN0aW9uIEVycm9yU2VnbWVudE5vZGUoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgdGhyb3cgbmV3IEVycm9yKFNFR01FTlRfRVhQTE9SRVJfU0lNVUxBVEVEX0VSUk9SX01FU1NBR0UpXG59XG5cbmNvbnN0IGZvcmV2ZXIgPSBuZXcgUHJvbWlzZSgoKSA9PiB7fSlcbmZ1bmN0aW9uIExvYWRpbmdTZWdtZW50Tm9kZSgpOiBSZWFjdC5SZWFjdE5vZGUge1xuICB1c2UoZm9yZXZlcilcbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNlZ21lbnRWaWV3U3RhdGVOb2RlKHsgcGFnZSB9OiB7IHBhZ2U6IHN0cmluZyB9KSB7XG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgZGlzcGF0Y2hlci5zZWdtZW50RXhwbG9yZXJVcGRhdGVSb3V0ZVN0YXRlKHBhZ2UpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRpc3BhdGNoZXIuc2VnbWVudEV4cGxvcmVyVXBkYXRlUm91dGVTdGF0ZSgnJylcbiAgICB9XG4gIH0sIFtwYWdlXSlcbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNlZ21lbnRCb3VuZGFyeVRyaWdnZXJOb2RlKCkge1xuICBjb25zdCB7IGJvdW5kYXJ5VHlwZSB9ID0gdXNlU2VnbWVudFN0YXRlKClcbiAgbGV0IHNlZ21lbnROb2RlOiBSZWFjdC5SZWFjdE5vZGUgPSBudWxsXG4gIGlmIChib3VuZGFyeVR5cGUgPT09ICdsb2FkaW5nJykge1xuICAgIHNlZ21lbnROb2RlID0gPExvYWRpbmdTZWdtZW50Tm9kZSAvPlxuICB9IGVsc2UgaWYgKGJvdW5kYXJ5VHlwZSA9PT0gJ25vdC1mb3VuZCcpIHtcbiAgICBzZWdtZW50Tm9kZSA9IDxOb3RGb3VuZFNlZ21lbnROb2RlIC8+XG4gIH0gZWxzZSBpZiAoYm91bmRhcnlUeXBlID09PSAnZXJyb3InKSB7XG4gICAgc2VnbWVudE5vZGUgPSA8RXJyb3JTZWdtZW50Tm9kZSAvPlxuICB9XG4gIHJldHVybiBzZWdtZW50Tm9kZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU2VnbWVudFZpZXdOb2RlKHtcbiAgdHlwZSxcbiAgcGFnZVBhdGgsXG4gIGNoaWxkcmVuLFxufToge1xuICB0eXBlOiBzdHJpbmdcbiAgcGFnZVBhdGg6IHN0cmluZ1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZVxufSk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHNlZ21lbnROb2RlID0gKFxuICAgIDxTZWdtZW50VHJpZU5vZGUga2V5PXt0eXBlfSB0eXBlPXt0eXBlfSBwYWdlUGF0aD17cGFnZVBhdGh9IC8+XG4gIClcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7c2VnbWVudE5vZGV9XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC8+XG4gIClcbn1cblxuY29uc3QgU2VnbWVudFN0YXRlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8e1xuICBib3VuZGFyeVR5cGU6ICdub3QtZm91bmQnIHwgJ2Vycm9yJyB8ICdsb2FkaW5nJyB8IG51bGxcbiAgc2V0Qm91bmRhcnlUeXBlOiAodHlwZTogJ25vdC1mb3VuZCcgfCAnZXJyb3InIHwgJ2xvYWRpbmcnIHwgbnVsbCkgPT4gdm9pZFxufT4oe1xuICBib3VuZGFyeVR5cGU6IG51bGwsXG4gIHNldEJvdW5kYXJ5VHlwZTogKCkgPT4ge30sXG59KVxuXG5leHBvcnQgZnVuY3Rpb24gU2VnbWVudFN0YXRlUHJvdmlkZXIoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdE5vZGUgfSkge1xuICBjb25zdCBbYm91bmRhcnlUeXBlLCBzZXRCb3VuZGFyeVR5cGVdID0gdXNlU3RhdGU8XG4gICAgJ25vdC1mb3VuZCcgfCAnZXJyb3InIHwgJ2xvYWRpbmcnIHwgbnVsbFxuICA+KG51bGwpXG5cbiAgY29uc3QgW2Vycm9yQm91bmRhcnlLZXksIHNldEVycm9yQm91bmRhcnlLZXldID0gdXNlU3RhdGUoMClcbiAgY29uc3QgcmVsb2FkQm91bmRhcnkgPSB1c2VDYWxsYmFjayhcbiAgICAoKSA9PiBzZXRFcnJvckJvdW5kYXJ5S2V5KChwcmV2KSA9PiBwcmV2ICsgMSksXG4gICAgW11cbiAgKVxuXG4gIGNvbnN0IHNldEJvdW5kYXJ5VHlwZUFuZFJlbG9hZCA9IHVzZUNhbGxiYWNrKFxuICAgICh0eXBlOiAnbm90LWZvdW5kJyB8ICdlcnJvcicgfCAnbG9hZGluZycgfCBudWxsKSA9PiB7XG4gICAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgICByZWxvYWRCb3VuZGFyeSgpXG4gICAgICB9XG4gICAgICBzZXRCb3VuZGFyeVR5cGUodHlwZSlcbiAgICB9LFxuICAgIFtyZWxvYWRCb3VuZGFyeV1cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPFNlZ21lbnRTdGF0ZUNvbnRleHQuUHJvdmlkZXJcbiAgICAgIGtleT17ZXJyb3JCb3VuZGFyeUtleX1cbiAgICAgIHZhbHVlPXt7XG4gICAgICAgIGJvdW5kYXJ5VHlwZSxcbiAgICAgICAgc2V0Qm91bmRhcnlUeXBlOiBzZXRCb3VuZGFyeVR5cGVBbmRSZWxvYWQsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1NlZ21lbnRTdGF0ZUNvbnRleHQuUHJvdmlkZXI+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNlZ21lbnRTdGF0ZSgpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoU2VnbWVudFN0YXRlQ29udGV4dClcbn1cbiJdLCJuYW1lcyI6WyJTRUdNRU5UX0VYUExPUkVSX1NJTVVMQVRFRF9FUlJPUl9NRVNTQUdFIiwiU2VnbWVudEJvdW5kYXJ5VHJpZ2dlck5vZGUiLCJTZWdtZW50U3RhdGVQcm92aWRlciIsIlNlZ21lbnRWaWV3Tm9kZSIsIlNlZ21lbnRWaWV3U3RhdGVOb2RlIiwidXNlU2VnbWVudFN0YXRlIiwiU2VnbWVudFRyaWVOb2RlIiwidHlwZSIsInBhZ2VQYXRoIiwiYm91bmRhcnlUeXBlIiwic2V0Qm91bmRhcnlUeXBlIiwibm9kZVN0YXRlIiwidXNlTWVtbyIsInVzZUxheW91dEVmZmVjdCIsImRpc3BhdGNoZXIiLCJzZWdtZW50RXhwbG9yZXJOb2RlQWRkIiwic2VnbWVudEV4cGxvcmVyTm9kZVJlbW92ZSIsIk5vdEZvdW5kU2VnbWVudE5vZGUiLCJub3RGb3VuZCIsIkVycm9yU2VnbWVudE5vZGUiLCJFcnJvciIsImZvcmV2ZXIiLCJQcm9taXNlIiwiTG9hZGluZ1NlZ21lbnROb2RlIiwidXNlIiwicGFnZSIsInNlZ21lbnRFeHBsb3JlclVwZGF0ZVJvdXRlU3RhdGUiLCJzZWdtZW50Tm9kZSIsImNoaWxkcmVuIiwiU2VnbWVudFN0YXRlQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJ1c2VTdGF0ZSIsImVycm9yQm91bmRhcnlLZXkiLCJzZXRFcnJvckJvdW5kYXJ5S2V5IiwicmVsb2FkQm91bmRhcnkiLCJ1c2VDYWxsYmFjayIsInByZXYiLCJzZXRCb3VuZGFyeVR5cGVBbmRSZWxvYWQiLCJQcm92aWRlciIsInZhbHVlIiwidXNlQ29udGV4dCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/terminal-logging-config.js":
/*!***********************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/terminal-logging-config.js ***!
  \***********************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    getIsTerminalLoggingEnabled: function() {\n        return getIsTerminalLoggingEnabled;\n    },\n    getTerminalLoggingConfig: function() {\n        return getTerminalLoggingConfig;\n    }\n});\nfunction getTerminalLoggingConfig() {\n    try {\n        return JSON.parse(\"false\" || 0);\n    } catch (e) {\n        return false;\n    }\n}\nfunction getIsTerminalLoggingEnabled() {\n    const config = getTerminalLoggingConfig();\n    return Boolean(config);\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n  Object.defineProperty(exports.default, '__esModule', { value: true });\n  Object.assign(exports.default, exports);\n  module.exports = exports.default;\n}\n\n//# sourceMappingURL=terminal-logging-config.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS9hcHAvdGVybWluYWwtbG9nZ2luZy1jb25maWcuanMiLCJtYXBwaW5ncyI6IkFBQWE7QUFDYiw4Q0FBNkM7QUFDN0M7QUFDQSxDQUFDLEVBQUM7QUFDRixNQUFNLENBR0w7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLDBCQUEwQixPQUFpRCxJQUFJLENBQU87QUFDdEYsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlELGFBQWE7QUFDdEU7QUFDQTtBQUNBOztBQUVBIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTUuNC43X0BiYWJlbCtjb3JlQDcuMjguM19Ab3BlbnRlbGVtZXRyeSthcGlAMS45LjBfQHBsYXl3cmlnaHQrdGVzdEAxLjU1LjBfcmVhY3QtZF80N2ZmMzgxM2Q3OTA1NjZkZjI1NGEyMTYzNTUwYzJkNS9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L25leHQtZGV2dG9vbHMvdXNlcnNwYWNlL2FwcC90ZXJtaW5hbC1sb2dnaW5nLWNvbmZpZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbjAgJiYgKG1vZHVsZS5leHBvcnRzID0ge1xuICAgIGdldElzVGVybWluYWxMb2dnaW5nRW5hYmxlZDogbnVsbCxcbiAgICBnZXRUZXJtaW5hbExvZ2dpbmdDb25maWc6IG51bGxcbn0pO1xuZnVuY3Rpb24gX2V4cG9ydCh0YXJnZXQsIGFsbCkge1xuICAgIGZvcih2YXIgbmFtZSBpbiBhbGwpT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGFsbFtuYW1lXVxuICAgIH0pO1xufVxuX2V4cG9ydChleHBvcnRzLCB7XG4gICAgZ2V0SXNUZXJtaW5hbExvZ2dpbmdFbmFibGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGdldElzVGVybWluYWxMb2dnaW5nRW5hYmxlZDtcbiAgICB9LFxuICAgIGdldFRlcm1pbmFsTG9nZ2luZ0NvbmZpZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRUZXJtaW5hbExvZ2dpbmdDb25maWc7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBnZXRUZXJtaW5hbExvZ2dpbmdDb25maWcoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocHJvY2Vzcy5lbnYuX19ORVhUX0JST1dTRVJfREVCVUdfSU5GT19JTl9URVJNSU5BTCB8fCAnZmFsc2UnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRJc1Rlcm1pbmFsTG9nZ2luZ0VuYWJsZWQoKSB7XG4gICAgY29uc3QgY29uZmlnID0gZ2V0VGVybWluYWxMb2dnaW5nQ29uZmlnKCk7XG4gICAgcmV0dXJuIEJvb2xlYW4oY29uZmlnKTtcbn1cblxuaWYgKCh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnZnVuY3Rpb24nIHx8ICh0eXBlb2YgZXhwb3J0cy5kZWZhdWx0ID09PSAnb2JqZWN0JyAmJiBleHBvcnRzLmRlZmF1bHQgIT09IG51bGwpKSAmJiB0eXBlb2YgZXhwb3J0cy5kZWZhdWx0Ll9fZXNNb2R1bGUgPT09ICd1bmRlZmluZWQnKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLmRlZmF1bHQsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgT2JqZWN0LmFzc2lnbihleHBvcnRzLmRlZmF1bHQsIGV4cG9ydHMpO1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMuZGVmYXVsdDtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGVybWluYWwtbG9nZ2luZy1jb25maWcuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/app/terminal-logging-config.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/use-app-dev-rendering-indicator.js":
/*!***************************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/use-app-dev-rendering-indicator.js ***!
  \***************************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__  cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"useAppDevRenderingIndicator\", ({\n    enumerable: true,\n    get: function() {\n        return useAppDevRenderingIndicator;\n    }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\nconst _nextdevtools = __webpack_require__(/*! next/dist/compiled/next-devtools */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/next-devtools/index.js\");\nconst useAppDevRenderingIndicator = ()=>{\n    const [isPending, startTransition] = (0, _react.useTransition)();\n    (0, _react.useEffect)(()=>{\n        if (isPending) {\n            _nextdevtools.dispatcher.renderingIndicatorShow();\n        } else {\n            _nextdevtools.dispatcher.renderingIndicatorHide();\n        }\n    }, [\n        isPending\n    ]);\n    return startTransition;\n};\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=use-app-dev-rendering-indicator.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9uZXh0LWRldnRvb2xzL3VzZXJzcGFjZS91c2UtYXBwLWRldi1yZW5kZXJpbmctaW5kaWNhdG9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7K0RBS2FBOzs7ZUFBQUE7OzttQ0FINEI7MENBQ2Q7QUFFcEIsTUFBTUEsOEJBQThCO0lBQ3pDLE1BQU0sQ0FBQ0MsV0FBV0MsZ0JBQWdCLEdBQUdDLENBQUFBLEdBQUFBLE9BQUFBLGFBQUFBO0lBRXJDQyxDQUFBQSxHQUFBQSxPQUFBQSxTQUFBQSxFQUFVO1FBQ1IsSUFBSUgsV0FBVztZQUNiSSxjQUFBQSxVQUFVLENBQUNDLHNCQUFzQjtRQUNuQyxPQUFPO1lBQ0xELGNBQUFBLFVBQVUsQ0FBQ0Usc0JBQXNCO1FBQ25DO0lBQ0YsR0FBRztRQUFDTjtLQUFVO0lBRWQsT0FBT0M7QUFDVCIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9zcmMvbmV4dC1kZXZ0b29scy91c2Vyc3BhY2UvdXNlLWFwcC1kZXYtcmVuZGVyaW5nLWluZGljYXRvci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZGlzcGF0Y2hlciB9IGZyb20gJ25leHQvZGlzdC9jb21waWxlZC9uZXh0LWRldnRvb2xzJ1xuXG5leHBvcnQgY29uc3QgdXNlQXBwRGV2UmVuZGVyaW5nSW5kaWNhdG9yID0gKCkgPT4ge1xuICBjb25zdCBbaXNQZW5kaW5nLCBzdGFydFRyYW5zaXRpb25dID0gdXNlVHJhbnNpdGlvbigpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNQZW5kaW5nKSB7XG4gICAgICBkaXNwYXRjaGVyLnJlbmRlcmluZ0luZGljYXRvclNob3coKVxuICAgIH0gZWxzZSB7XG4gICAgICBkaXNwYXRjaGVyLnJlbmRlcmluZ0luZGljYXRvckhpZGUoKVxuICAgIH1cbiAgfSwgW2lzUGVuZGluZ10pXG5cbiAgcmV0dXJuIHN0YXJ0VHJhbnNpdGlvblxufVxuIl0sIm5hbWVzIjpbInVzZUFwcERldlJlbmRlcmluZ0luZGljYXRvciIsImlzUGVuZGluZyIsInN0YXJ0VHJhbnNpdGlvbiIsInVzZVRyYW5zaXRpb24iLCJ1c2VFZmZlY3QiLCJkaXNwYXRjaGVyIiwicmVuZGVyaW5nSW5kaWNhdG9yU2hvdyIsInJlbmRlcmluZ0luZGljYXRvckhpZGUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/next-devtools/userspace/use-app-dev-rendering-indicator.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/server/api-utils/get-cookie-parser.js":
/*!******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/server/api-utils/get-cookie-parser.js ***!
  \******************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"getCookieParser\", ({\n    enumerable: true,\n    get: function() {\n        return getCookieParser;\n    }\n}));\nfunction getCookieParser(headers) {\n    return function parseCookie() {\n        const { cookie } = headers;\n        if (!cookie) {\n            return {};\n        }\n        const { parse: parseCookieFn } = __webpack_require__(/*! next/dist/compiled/cookie */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/cookie/index.js\");\n        return parseCookieFn(Array.isArray(cookie) ? cookie.join('; ') : cookie);\n    };\n}\n\n//# sourceMappingURL=get-cookie-parser.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zZXJ2ZXIvYXBpLXV0aWxzL2dldC1jb29raWUtcGFyc2VyLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2IsOENBQTZDO0FBQzdDO0FBQ0EsQ0FBQyxFQUFDO0FBQ0YsbURBQWtEO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDO0FBQ0Y7QUFDQTtBQUNBLGdCQUFnQixTQUFTO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQix1QkFBdUIsRUFBRSxtQkFBTyxDQUFDLG9QQUEyQjtBQUM1RSxvRUFBb0U7QUFDcEU7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zZXJ2ZXIvYXBpLXV0aWxzL2dldC1jb29raWUtcGFyc2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0Q29va2llUGFyc2VyXCIsIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRDb29raWVQYXJzZXI7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBnZXRDb29raWVQYXJzZXIoaGVhZGVycykge1xuICAgIHJldHVybiBmdW5jdGlvbiBwYXJzZUNvb2tpZSgpIHtcbiAgICAgICAgY29uc3QgeyBjb29raWUgfSA9IGhlYWRlcnM7XG4gICAgICAgIGlmICghY29va2llKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBwYXJzZTogcGFyc2VDb29raWVGbiB9ID0gcmVxdWlyZSgnbmV4dC9kaXN0L2NvbXBpbGVkL2Nvb2tpZScpO1xuICAgICAgICByZXR1cm4gcGFyc2VDb29raWVGbihBcnJheS5pc0FycmF5KGNvb2tpZSkgPyBjb29raWUuam9pbignOyAnKSA6IGNvb2tpZSk7XG4gICAgfTtcbn1cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0LWNvb2tpZS1wYXJzZXIuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/server/api-utils/get-cookie-parser.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/server/dev/hot-reloader-types.js":
/*!*************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/server/dev/hot-reloader-types.js ***!
  \*************************************************************************************************************************************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"HMR_ACTIONS_SENT_TO_BROWSER\", ({\n    enumerable: true,\n    get: function() {\n        return HMR_ACTIONS_SENT_TO_BROWSER;\n    }\n}));\nvar HMR_ACTIONS_SENT_TO_BROWSER = /*#__PURE__*/ function(HMR_ACTIONS_SENT_TO_BROWSER) {\n    HMR_ACTIONS_SENT_TO_BROWSER[\"ADDED_PAGE\"] = \"addedPage\";\n    HMR_ACTIONS_SENT_TO_BROWSER[\"REMOVED_PAGE\"] = \"removedPage\";\n    HMR_ACTIONS_SENT_TO_BROWSER[\"RELOAD_PAGE\"] = \"reloadPage\";\n    HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_COMPONENT_CHANGES\"] = \"serverComponentChanges\";\n    HMR_ACTIONS_SENT_TO_BROWSER[\"MIDDLEWARE_CHANGES\"] = \"middlewareChanges\";\n    HMR_ACTIONS_SENT_TO_BROWSER[\"CLIENT_CHANGES\"] = \"clientChanges\";\n    HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_ONLY_CHANGES\"] = \"serverOnlyChanges\";\n    HMR_ACTIONS_SENT_TO_BROWSER[\"SYNC\"] = \"sync\";\n    HMR_ACTIONS_SENT_TO_BROWSER[\"BUILT\"] = \"built\";\n    HMR_ACTIONS_SENT_TO_BROWSER[\"BUILDING\"] = \"building\";\n    HMR_ACTIONS_SENT_TO_BROWSER[\"DEV_PAGES_MANIFEST_UPDATE\"] = \"devPagesManifestUpdate\";\n    HMR_ACTIONS_SENT_TO_BROWSER[\"TURBOPACK_MESSAGE\"] = \"turbopack-message\";\n    HMR_ACTIONS_SENT_TO_BROWSER[\"SERVER_ERROR\"] = \"serverError\";\n    HMR_ACTIONS_SENT_TO_BROWSER[\"TURBOPACK_CONNECTED\"] = \"turbopack-connected\";\n    HMR_ACTIONS_SENT_TO_BROWSER[\"ISR_MANIFEST\"] = \"isrManifest\";\n    HMR_ACTIONS_SENT_TO_BROWSER[\"DEV_INDICATOR\"] = \"devIndicator\";\n    return HMR_ACTIONS_SENT_TO_BROWSER;\n}({});\n\n//# sourceMappingURL=hot-reloader-types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zZXJ2ZXIvZGV2L2hvdC1yZWxvYWRlci10eXBlcy5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QztBQUM3QztBQUNBLENBQUMsRUFBQztBQUNGLCtEQUE4RDtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsR0FBRzs7QUFFSiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zZXJ2ZXIvZGV2L2hvdC1yZWxvYWRlci10eXBlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUlwiLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSO1xuICAgIH1cbn0pO1xudmFyIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUiA9IC8qI19fUFVSRV9fKi8gZnVuY3Rpb24oSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSKSB7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiQURERURfUEFHRVwiXSA9IFwiYWRkZWRQYWdlXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiUkVNT1ZFRF9QQUdFXCJdID0gXCJyZW1vdmVkUGFnZVwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlJFTE9BRF9QQUdFXCJdID0gXCJyZWxvYWRQYWdlXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiU0VSVkVSX0NPTVBPTkVOVF9DSEFOR0VTXCJdID0gXCJzZXJ2ZXJDb21wb25lbnRDaGFuZ2VzXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiTUlERExFV0FSRV9DSEFOR0VTXCJdID0gXCJtaWRkbGV3YXJlQ2hhbmdlc1wiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIkNMSUVOVF9DSEFOR0VTXCJdID0gXCJjbGllbnRDaGFuZ2VzXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiU0VSVkVSX09OTFlfQ0hBTkdFU1wiXSA9IFwic2VydmVyT25seUNoYW5nZXNcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJTWU5DXCJdID0gXCJzeW5jXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiQlVJTFRcIl0gPSBcImJ1aWx0XCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiQlVJTERJTkdcIl0gPSBcImJ1aWxkaW5nXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiREVWX1BBR0VTX01BTklGRVNUX1VQREFURVwiXSA9IFwiZGV2UGFnZXNNYW5pZmVzdFVwZGF0ZVwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlRVUkJPUEFDS19NRVNTQUdFXCJdID0gXCJ0dXJib3BhY2stbWVzc2FnZVwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIlNFUlZFUl9FUlJPUlwiXSA9IFwic2VydmVyRXJyb3JcIjtcbiAgICBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVJbXCJUVVJCT1BBQ0tfQ09OTkVDVEVEXCJdID0gXCJ0dXJib3BhY2stY29ubmVjdGVkXCI7XG4gICAgSE1SX0FDVElPTlNfU0VOVF9UT19CUk9XU0VSW1wiSVNSX01BTklGRVNUXCJdID0gXCJpc3JNYW5pZmVzdFwiO1xuICAgIEhNUl9BQ1RJT05TX1NFTlRfVE9fQlJPV1NFUltcIkRFVl9JTkRJQ0FUT1JcIl0gPSBcImRldkluZGljYXRvclwiO1xuICAgIHJldHVybiBITVJfQUNUSU9OU19TRU5UX1RPX0JST1dTRVI7XG59KHt9KTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG90LXJlbG9hZGVyLXR5cGVzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/server/dev/hot-reloader-types.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js":
/*!****************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js ***!
  \****************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__  cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    AppRouterContext: function() {\n        return AppRouterContext;\n    },\n    GlobalLayoutRouterContext: function() {\n        return GlobalLayoutRouterContext;\n    },\n    LayoutRouterContext: function() {\n        return LayoutRouterContext;\n    },\n    MissingSlotContext: function() {\n        return MissingSlotContext;\n    },\n    TemplateContext: function() {\n        return TemplateContext;\n    }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"));\nconst AppRouterContext = _react.default.createContext(null);\nconst LayoutRouterContext = _react.default.createContext(null);\nconst GlobalLayoutRouterContext = _react.default.createContext(null);\nconst TemplateContext = _react.default.createContext(null);\nif (true) {\n    AppRouterContext.displayName = 'AppRouterContext';\n    LayoutRouterContext.displayName = 'LayoutRouterContext';\n    GlobalLayoutRouterContext.displayName = 'GlobalLayoutRouterContext';\n    TemplateContext.displayName = 'TemplateContext';\n}\nconst MissingSlotContext = _react.default.createContext(new Set()); //# sourceMappingURL=app-router-context.shared-runtime.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2FwcC1yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFpS2FBLGdCQUFnQjtlQUFoQkE7O0lBVUFDLHlCQUF5QjtlQUF6QkE7O0lBUEFDLG1CQUFtQjtlQUFuQkE7O0lBc0JBQyxrQkFBa0I7ZUFBbEJBOztJQVRBQyxpQkFBZTtlQUFmQTs7Ozs0RUF0S0s7QUFzSlgsTUFBTUosbUJBQW1CSyxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FDakQ7QUFFSyxNQUFNSixzQkFBc0JHLE9BQUFBLE9BQUssQ0FBQ0MsYUFBYSxDQUs1QztBQUVILE1BQU1MLDRCQUE0QkksT0FBQUEsT0FBSyxDQUFDQyxhQUFhLENBSXpEO0FBRUksTUFBTUYsa0JBQWtCQyxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FBa0I7QUFFcEUsSUFBSUMsSUFBb0IsRUFBbUI7SUFDekNQLGlCQUFpQlUsV0FBVyxHQUFHO0lBQy9CUixvQkFBb0JRLFdBQVcsR0FBRztJQUNsQ1QsMEJBQTBCUyxXQUFXLEdBQUc7SUFDeENOLGdCQUFnQk0sV0FBVyxHQUFHO0FBQ2hDO0FBRU8sTUFBTVAscUJBQXFCRSxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FBYyxJQUFJSyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9zcmMvc2hhcmVkL2xpYi9hcHAtcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHsgRmV0Y2hTZXJ2ZXJSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uLy4uL2NsaWVudC9jb21wb25lbnRzL3JvdXRlci1yZWR1Y2VyL2ZldGNoLXNlcnZlci1yZXNwb25zZSdcbmltcG9ydCB0eXBlIHtcbiAgRm9jdXNBbmRTY3JvbGxSZWYsXG4gIFByZWZldGNoS2luZCxcbn0gZnJvbSAnLi4vLi4vY2xpZW50L2NvbXBvbmVudHMvcm91dGVyLXJlZHVjZXIvcm91dGVyLXJlZHVjZXItdHlwZXMnXG5pbXBvcnQgdHlwZSB7XG4gIEZsaWdodFJvdXRlclN0YXRlLFxuICBGbGlnaHRTZWdtZW50UGF0aCxcbn0gZnJvbSAnLi4vLi4vc2VydmVyL2FwcC1yZW5kZXIvdHlwZXMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmV4cG9ydCB0eXBlIENoaWxkU2VnbWVudE1hcCA9IE1hcDxzdHJpbmcsIENhY2hlTm9kZT5cblxuLyoqXG4gKiBDYWNoZSBub2RlIHVzZWQgaW4gYXBwLXJvdXRlciAvIGxheW91dC1yb3V0ZXIuXG4gKi9cbmV4cG9ydCB0eXBlIENhY2hlTm9kZSA9IFJlYWR5Q2FjaGVOb2RlIHwgTGF6eUNhY2hlTm9kZVxuXG5leHBvcnQgdHlwZSBMb2FkaW5nTW9kdWxlRGF0YSA9XG4gIHwgW1JlYWN0LkpTWC5FbGVtZW50LCBSZWFjdC5SZWFjdE5vZGUsIFJlYWN0LlJlYWN0Tm9kZV1cbiAgfCBudWxsXG5cbi8qKiB2aWV3cG9ydCBtZXRhZGF0YSBub2RlICovXG5leHBvcnQgdHlwZSBIZWFkRGF0YSA9IFJlYWN0LlJlYWN0Tm9kZVxuXG5leHBvcnQgdHlwZSBMYXp5Q2FjaGVOb2RlID0ge1xuICAvKipcbiAgICogV2hlbiByc2MgaXMgbnVsbCwgdGhpcyBpcyBhIGxhemlseS1pbml0aWFsaXplZCBjYWNoZSBub2RlLlxuICAgKlxuICAgKiBJZiB0aGUgYXBwIGF0dGVtcHRzIHRvIHJlbmRlciBpdCwgaXQgdHJpZ2dlcnMgYSBsYXp5IGRhdGEgZmV0Y2gsXG4gICAqIHBvc3Rwb25lcyB0aGUgcmVuZGVyLCBhbmQgc2NoZWR1bGVzIGFuIHVwZGF0ZSB0byBhIG5ldyB0cmVlLlxuICAgKlxuICAgKiBUT0RPOiBUaGlzIG1lY2hhbmlzbSBzaG91bGQgbm90IGJlIHVzZWQgd2hlbiBQUFIgaXMgZW5hYmxlZCwgdGhvdWdoIGl0XG4gICAqIGN1cnJlbnRseSBpcyBpbiBzb21lIGNhc2VzIHVudGlsIHdlJ3ZlIGltcGxlbWVudGVkIHBhcnRpYWxcbiAgICogc2VnbWVudCBmZXRjaGluZy5cbiAgICovXG4gIHJzYzogbnVsbFxuXG4gIC8qKlxuICAgKiBBIHByZWZldGNoZWQgdmVyc2lvbiBvZiB0aGUgc2VnbWVudCBkYXRhLiBTZWUgZXhwbGFuYXRpb24gaW4gY29ycmVzcG9uZGluZ1xuICAgKiBmaWVsZCBvZiBSZWFkeUNhY2hlTm9kZSAoYmVsb3cpLlxuICAgKlxuICAgKiBTaW5jZSBMYXp5Q2FjaGVOb2RlIG1vc3RseSBvbmx5IGV4aXN0cyBpbiB0aGUgbm9uLVBQUiBpbXBsZW1lbnRhdGlvbiwgdGhpc1xuICAgKiB3aWxsIHVzdWFsbHkgYmUgbnVsbCwgYnV0IGl0IGNvdWxkIGhhdmUgYmVlbiBjbG9uZWQgZnJvbSBhIHByZXZpb3VzXG4gICAqIENhY2hlTm9kZSB0aGF0IHdhcyBjcmVhdGVkIGJ5IHRoZSBQUFIgaW1wbGVtZW50YXRpb24uIEV2ZW50dWFsbHkgd2Ugd2FudFxuICAgKiB0byBtaWdyYXRlIGV2ZXJ5dGhpbmcgYXdheSBmcm9tIExhenlDYWNoZU5vZGUgZW50aXJlbHkuXG4gICAqL1xuICBwcmVmZXRjaFJzYzogUmVhY3QuUmVhY3ROb2RlXG5cbiAgLyoqXG4gICAqIEEgcGVuZGluZyByZXNwb25zZSBmb3IgdGhlIGxhenkgZGF0YSBmZXRjaC4gSWYgdGhpcyBpcyBub3QgcHJlc2VudFxuICAgKiBkdXJpbmcgcmVuZGVyLCBpdCBpcyBsYXppbHkgY3JlYXRlZC5cbiAgICovXG4gIGxhenlEYXRhOiBQcm9taXNlPEZldGNoU2VydmVyUmVzcG9uc2VSZXN1bHQ+IHwgbnVsbFxuXG4gIHByZWZldGNoSGVhZDogSGVhZERhdGEgfCBudWxsXG5cbiAgaGVhZDogSGVhZERhdGFcblxuICBsb2FkaW5nOiBMb2FkaW5nTW9kdWxlRGF0YSB8IFByb21pc2U8TG9hZGluZ01vZHVsZURhdGE+XG5cbiAgLyoqXG4gICAqIENoaWxkIHBhcmFsbGVsIHJvdXRlcy5cbiAgICovXG4gIHBhcmFsbGVsUm91dGVzOiBNYXA8c3RyaW5nLCBDaGlsZFNlZ21lbnRNYXA+XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgb2YgdGhlIG5hdmlnYXRpb24gdGhhdCBsYXN0IHVwZGF0ZWQgdGhlIENhY2hlTm9kZSdzIGRhdGEuIElmXG4gICAqIGEgQ2FjaGVOb2RlIGlzIHJldXNlZCBmcm9tIGEgcHJldmlvdXMgbmF2aWdhdGlvbiwgdGhpcyB2YWx1ZSBpcyBub3RcbiAgICogdXBkYXRlZC4gVXNlZCB0byB0cmFjayB0aGUgc3RhbGVuZXNzIG9mIHRoZSBkYXRhLlxuICAgKi9cbiAgbmF2aWdhdGVkQXQ6IG51bWJlclxufVxuXG5leHBvcnQgdHlwZSBSZWFkeUNhY2hlTm9kZSA9IHtcbiAgLyoqXG4gICAqIFdoZW4gcnNjIGlzIG5vdCBudWxsLCBpdCByZXByZXNlbnRzIHRoZSBSU0MgZGF0YSBmb3IgdGhlXG4gICAqIGNvcnJlc3BvbmRpbmcgc2VnbWVudC5cbiAgICpcbiAgICogYG51bGxgIGlzIGEgdmFsaWQgUmVhY3QgTm9kZSBidXQgYmVjYXVzZSBzZWdtZW50IGRhdGEgaXMgYWx3YXlzIGFcbiAgICogPExheW91dFJvdXRlcj4gY29tcG9uZW50LCB3ZSBjYW4gdXNlIGBudWxsYCB0byByZXByZXNlbnQgZW1wdHkuXG4gICAqXG4gICAqIFRPRE86IEZvciBhZGRpdGlvbmFsIHR5cGUgc2FmZXR5LCB1cGRhdGUgdGhpcyB0eXBlIHRvXG4gICAqIEV4Y2x1ZGU8UmVhY3QuUmVhY3ROb2RlLCBudWxsPi4gTmVlZCB0byB1cGRhdGUgY3JlYXRlRW1wdHlDYWNoZU5vZGUgdG9cbiAgICogYWNjZXB0IHJzYyBhcyBhbiBhcmd1bWVudCwgb3IganVzdCBpbmxpbmUgdGhlIGNhbGxlcnMuXG4gICAqL1xuICByc2M6IFJlYWN0LlJlYWN0Tm9kZVxuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIGEgc3RhdGljIHZlcnNpb24gb2YgdGhlIHNlZ21lbnQgdGhhdCBjYW4gYmUgc2hvd24gaW1tZWRpYXRlbHksXG4gICAqIGFuZCBtYXkgb3IgbWF5IG5vdCBjb250YWluIGR5bmFtaWMgaG9sZXMuIEl0J3MgcHJlZmV0Y2hlZCBiZWZvcmUgYVxuICAgKiBuYXZpZ2F0aW9uIG9jY3Vycy5cbiAgICpcbiAgICogRHVyaW5nIHJlbmRlcmluZywgd2Ugd2lsbCBjaG9vc2Ugd2hldGhlciB0byByZW5kZXIgYHJzY2Agb3IgYHByZWZldGNoUnNjYFxuICAgKiB3aXRoIGB1c2VEZWZlcnJlZFZhbHVlYC4gQXMgd2l0aCB0aGUgYHJzY2AgZmllbGQsIGEgdmFsdWUgb2YgYG51bGxgIG1lYW5zXG4gICAqIG5vIHZhbHVlIHdhcyBwcm92aWRlZC4gSW4gdGhpcyBjYXNlLCB0aGUgTGF5b3V0Um91dGVyIHdpbGwgZ28gc3RyYWlnaHQgdG9cbiAgICogcmVuZGVyaW5nIHRoZSBgcnNjYCB2YWx1ZTsgaWYgdGhhdCBvbmUgaXMgYWxzbyBtaXNzaW5nLCBpdCB3aWxsIHN1c3BlbmQgYW5kXG4gICAqIHRyaWdnZXIgYSBsYXp5IGZldGNoLlxuICAgKi9cbiAgcHJlZmV0Y2hSc2M6IFJlYWN0LlJlYWN0Tm9kZVxuXG4gIC8qKlxuICAgKiBUaGVyZSBzaG91bGQgbmV2ZXIgYmUgYSBsYXp5IGRhdGEgcmVxdWVzdCBpbiB0aGlzIGNhc2UuXG4gICAqL1xuICBsYXp5RGF0YTogbnVsbFxuICBwcmVmZXRjaEhlYWQ6IEhlYWREYXRhIHwgbnVsbFxuXG4gIGhlYWQ6IEhlYWREYXRhXG5cbiAgbG9hZGluZzogTG9hZGluZ01vZHVsZURhdGEgfCBQcm9taXNlPExvYWRpbmdNb2R1bGVEYXRhPlxuXG4gIHBhcmFsbGVsUm91dGVzOiBNYXA8c3RyaW5nLCBDaGlsZFNlZ21lbnRNYXA+XG5cbiAgbmF2aWdhdGVkQXQ6IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hdmlnYXRlT3B0aW9ucyB7XG4gIHNjcm9sbD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmVmZXRjaE9wdGlvbnMge1xuICBraW5kOiBQcmVmZXRjaEtpbmRcbiAgb25JbnZhbGlkYXRlPzogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcFJvdXRlckluc3RhbmNlIHtcbiAgLyoqXG4gICAqIE5hdmlnYXRlIHRvIHRoZSBwcmV2aW91cyBoaXN0b3J5IGVudHJ5LlxuICAgKi9cbiAgYmFjaygpOiB2b2lkXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZSB0byB0aGUgbmV4dCBoaXN0b3J5IGVudHJ5LlxuICAgKi9cbiAgZm9yd2FyZCgpOiB2b2lkXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSBjdXJyZW50IHBhZ2UuXG4gICAqL1xuICByZWZyZXNoKCk6IHZvaWRcbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIGN1cnJlbnQgcGFnZS4gVXNlIGluIGRldmVsb3BtZW50IG9ubHkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgaG1yUmVmcmVzaCgpOiB2b2lkXG4gIC8qKlxuICAgKiBOYXZpZ2F0ZSB0byB0aGUgcHJvdmlkZWQgaHJlZi5cbiAgICogUHVzaGVzIGEgbmV3IGhpc3RvcnkgZW50cnkuXG4gICAqL1xuICBwdXNoKGhyZWY6IHN0cmluZywgb3B0aW9ucz86IE5hdmlnYXRlT3B0aW9ucyk6IHZvaWRcbiAgLyoqXG4gICAqIE5hdmlnYXRlIHRvIHRoZSBwcm92aWRlZCBocmVmLlxuICAgKiBSZXBsYWNlcyB0aGUgY3VycmVudCBoaXN0b3J5IGVudHJ5LlxuICAgKi9cbiAgcmVwbGFjZShocmVmOiBzdHJpbmcsIG9wdGlvbnM/OiBOYXZpZ2F0ZU9wdGlvbnMpOiB2b2lkXG4gIC8qKlxuICAgKiBQcmVmZXRjaCB0aGUgcHJvdmlkZWQgaHJlZi5cbiAgICovXG4gIHByZWZldGNoKGhyZWY6IHN0cmluZywgb3B0aW9ucz86IFByZWZldGNoT3B0aW9ucyk6IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IEFwcFJvdXRlckNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PEFwcFJvdXRlckluc3RhbmNlIHwgbnVsbD4oXG4gIG51bGxcbilcbmV4cG9ydCBjb25zdCBMYXlvdXRSb3V0ZXJDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDx7XG4gIHBhcmVudFRyZWU6IEZsaWdodFJvdXRlclN0YXRlXG4gIHBhcmVudENhY2hlTm9kZTogQ2FjaGVOb2RlXG4gIHBhcmVudFNlZ21lbnRQYXRoOiBGbGlnaHRTZWdtZW50UGF0aCB8IG51bGxcbiAgdXJsOiBzdHJpbmdcbn0gfCBudWxsPihudWxsKVxuXG5leHBvcnQgY29uc3QgR2xvYmFsTGF5b3V0Um91dGVyQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8e1xuICB0cmVlOiBGbGlnaHRSb3V0ZXJTdGF0ZVxuICBmb2N1c0FuZFNjcm9sbFJlZjogRm9jdXNBbmRTY3JvbGxSZWZcbiAgbmV4dFVybDogc3RyaW5nIHwgbnVsbFxufT4obnVsbCBhcyBhbnkpXG5cbmV4cG9ydCBjb25zdCBUZW1wbGF0ZUNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFJlYWN0LlJlYWN0Tm9kZT4obnVsbCBhcyBhbnkpXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEFwcFJvdXRlckNvbnRleHQuZGlzcGxheU5hbWUgPSAnQXBwUm91dGVyQ29udGV4dCdcbiAgTGF5b3V0Um91dGVyQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdMYXlvdXRSb3V0ZXJDb250ZXh0J1xuICBHbG9iYWxMYXlvdXRSb3V0ZXJDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0dsb2JhbExheW91dFJvdXRlckNvbnRleHQnXG4gIFRlbXBsYXRlQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdUZW1wbGF0ZUNvbnRleHQnXG59XG5cbmV4cG9ydCBjb25zdCBNaXNzaW5nU2xvdENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFNldDxzdHJpbmc+PihuZXcgU2V0KCkpXG4iXSwibmFtZXMiOlsiQXBwUm91dGVyQ29udGV4dCIsIkdsb2JhbExheW91dFJvdXRlckNvbnRleHQiLCJMYXlvdXRSb3V0ZXJDb250ZXh0IiwiTWlzc2luZ1Nsb3RDb250ZXh0IiwiVGVtcGxhdGVDb250ZXh0IiwiUmVhY3QiLCJjcmVhdGVDb250ZXh0IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiZGlzcGxheU5hbWUiLCJTZXQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/bloom-filter.js":
/*!*******************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/bloom-filter.js ***!
  \*******************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("// minimal implementation MurmurHash2 hash function\n\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"BloomFilter\", ({\n    enumerable: true,\n    get: function() {\n        return BloomFilter;\n    }\n}));\nfunction murmurhash2(str) {\n    let h = 0;\n    for(let i = 0; i < str.length; i++){\n        const c = str.charCodeAt(i);\n        h = Math.imul(h ^ c, 0x5bd1e995);\n        h ^= h >>> 13;\n        h = Math.imul(h, 0x5bd1e995);\n    }\n    return h >>> 0;\n}\n// default to 0.01% error rate as the filter compresses very well\nconst DEFAULT_ERROR_RATE = 0.0001;\nclass BloomFilter {\n    static from(items, errorRate) {\n        if (errorRate === void 0) errorRate = DEFAULT_ERROR_RATE;\n        const filter = new BloomFilter(items.length, errorRate);\n        for (const item of items){\n            filter.add(item);\n        }\n        return filter;\n    }\n    export() {\n        const data = {\n            numItems: this.numItems,\n            errorRate: this.errorRate,\n            numBits: this.numBits,\n            numHashes: this.numHashes,\n            bitArray: this.bitArray\n        };\n        if (false) {}\n        return data;\n    }\n    import(data) {\n        this.numItems = data.numItems;\n        this.errorRate = data.errorRate;\n        this.numBits = data.numBits;\n        this.numHashes = data.numHashes;\n        this.bitArray = data.bitArray;\n    }\n    add(item) {\n        const hashValues = this.getHashValues(item);\n        hashValues.forEach((hash)=>{\n            this.bitArray[hash] = 1;\n        });\n    }\n    contains(item) {\n        const hashValues = this.getHashValues(item);\n        return hashValues.every((hash)=>this.bitArray[hash]);\n    }\n    getHashValues(item) {\n        const hashValues = [];\n        for(let i = 1; i <= this.numHashes; i++){\n            const hash = murmurhash2(\"\" + item + i) % this.numBits;\n            hashValues.push(hash);\n        }\n        return hashValues;\n    }\n    constructor(numItems, errorRate = DEFAULT_ERROR_RATE){\n        this.numItems = numItems;\n        this.errorRate = errorRate;\n        this.numBits = Math.ceil(-(numItems * Math.log(errorRate)) / (Math.log(2) * Math.log(2)));\n        this.numHashes = Math.ceil(this.numBits / numItems * Math.log(2));\n        this.bitArray = new Array(this.numBits).fill(0);\n    }\n} //# sourceMappingURL=bloom-filter.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2Jsb29tLWZpbHRlci5qcyIsIm1hcHBpbmdzIjoiQUFBQSxtREFBbUQ7Ozs7OytDQWV0Q0E7OztlQUFBQTs7O0FBZGIsU0FBU0MsWUFBWUMsR0FBVztJQUM5QixJQUFJQyxJQUFJO0lBQ1IsSUFBSyxJQUFJQyxJQUFJLEdBQUdBLElBQUlGLElBQUlHLE1BQU0sRUFBRUQsSUFBSztRQUNuQyxNQUFNRSxJQUFJSixJQUFJSyxVQUFVLENBQUNIO1FBQ3pCRCxJQUFJSyxLQUFLQyxJQUFJLENBQUNOLElBQUlHLEdBQUc7UUFDckJILEtBQUtBLE1BQU07UUFDWEEsSUFBSUssS0FBS0MsSUFBSSxDQUFDTixHQUFHO0lBQ25CO0lBQ0EsT0FBT0EsTUFBTTtBQUNmO0FBRUEsaUVBQWlFO0FBQ2pFLE1BQU1PLHFCQUFxQjtBQUVwQixNQUFNVjtJQWlCWCxPQUFPVyxLQUFLQyxLQUFlLEVBQUVDLFNBQThCLEVBQUU7UUFBaENBLElBQUFBLGNBQUFBLEtBQUFBLEdBQUFBLFlBQVlIO1FBQ3ZDLE1BQU1JLFNBQVMsSUFBSWQsWUFBWVksTUFBTVAsTUFBTSxFQUFFUTtRQUU3QyxLQUFLLE1BQU1FLFFBQVFILE1BQU87WUFDeEJFLE9BQU9FLEdBQUcsQ0FBQ0Q7UUFDYjtRQUNBLE9BQU9EO0lBQ1Q7SUFFQUcsU0FBUztRQUNQLE1BQU1DLE9BQU87WUFDWEMsVUFBVSxJQUFJLENBQUNBLFFBQVE7WUFDdkJOLFdBQVcsSUFBSSxDQUFDQSxTQUFTO1lBQ3pCTyxTQUFTLElBQUksQ0FBQ0EsT0FBTztZQUNyQkMsV0FBVyxJQUFJLENBQUNBLFNBQVM7WUFDekJDLFVBQVUsSUFBSSxDQUFDQSxRQUFRO1FBQ3pCO1FBRUEsSUFBSUMsS0FBcUMsRUFBRSxFQWExQztRQUVELE9BQU9MO0lBQ1Q7SUFFQWdCLE9BQU9oQixJQUF5QyxFQUFFO1FBQ2hELElBQUksQ0FBQ0MsUUFBUSxHQUFHRCxLQUFLQyxRQUFRO1FBQzdCLElBQUksQ0FBQ04sU0FBUyxHQUFHSyxLQUFLTCxTQUFTO1FBQy9CLElBQUksQ0FBQ08sT0FBTyxHQUFHRixLQUFLRSxPQUFPO1FBQzNCLElBQUksQ0FBQ0MsU0FBUyxHQUFHSCxLQUFLRyxTQUFTO1FBQy9CLElBQUksQ0FBQ0MsUUFBUSxHQUFHSixLQUFLSSxRQUFRO0lBQy9CO0lBRUFOLElBQUlELElBQVksRUFBRTtRQUNoQixNQUFNb0IsYUFBYSxJQUFJLENBQUNDLGFBQWEsQ0FBQ3JCO1FBQ3RDb0IsV0FBV0UsT0FBTyxDQUFDLENBQUNDO1lBQ2xCLElBQUksQ0FBQ2hCLFFBQVEsQ0FBQ2dCLEtBQUssR0FBRztRQUN4QjtJQUNGO0lBRUFDLFNBQVN4QixJQUFZLEVBQUU7UUFDckIsTUFBTW9CLGFBQWEsSUFBSSxDQUFDQyxhQUFhLENBQUNyQjtRQUN0QyxPQUFPb0IsV0FBV0ssS0FBSyxDQUFDLENBQUNGLE9BQVMsSUFBSSxDQUFDaEIsUUFBUSxDQUFDZ0IsS0FBSztJQUN2RDtJQUVBRixjQUFjckIsSUFBWSxFQUFFO1FBQzFCLE1BQU1vQixhQUFhLEVBQUU7UUFDckIsSUFBSyxJQUFJL0IsSUFBSSxHQUFHQSxLQUFLLElBQUksQ0FBQ2lCLFNBQVMsRUFBRWpCLElBQUs7WUFDeEMsTUFBTWtDLE9BQU9yQyxZQUFhLEtBQUVjLE9BQU9YLEtBQU8sSUFBSSxDQUFDZ0IsT0FBTztZQUN0RGUsV0FBV00sSUFBSSxDQUFDSDtRQUNsQjtRQUNBLE9BQU9IO0lBQ1Q7SUF6RUFPLFlBQVl2QixRQUFnQixFQUFFTixZQUFvQkgsa0JBQWtCLENBQUU7UUFDcEUsSUFBSSxDQUFDUyxRQUFRLEdBQUdBO1FBQ2hCLElBQUksQ0FBQ04sU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNPLE9BQU8sR0FBR1osS0FBS21DLElBQUksQ0FDdEIsQ0FBRXhCLENBQUFBLFdBQVdYLEtBQUtvQyxHQUFHLENBQUMvQixVQUFBQSxDQUFTLElBQU1MLEtBQUtvQyxHQUFHLENBQUMsS0FBS3BDLEtBQUtvQyxHQUFHLENBQUMsR0FBQztRQUUvRCxJQUFJLENBQUN2QixTQUFTLEdBQUdiLEtBQUttQyxJQUFJLENBQUUsSUFBSSxDQUFDdkIsT0FBTyxHQUFHRCxXQUFZWCxLQUFLb0MsR0FBRyxDQUFDO1FBQ2hFLElBQUksQ0FBQ3RCLFFBQVEsR0FBRyxJQUFJdUIsTUFBTSxJQUFJLENBQUN6QixPQUFPLEVBQUUwQixJQUFJLENBQUM7SUFDL0M7QUFrRUYiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL3NoYXJlZC9saWIvYmxvb20tZmlsdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIG1pbmltYWwgaW1wbGVtZW50YXRpb24gTXVybXVySGFzaDIgaGFzaCBmdW5jdGlvblxuZnVuY3Rpb24gbXVybXVyaGFzaDIoc3RyOiBzdHJpbmcpIHtcbiAgbGV0IGggPSAwXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaCA9IE1hdGguaW11bChoIF4gYywgMHg1YmQxZTk5NSlcbiAgICBoIF49IGggPj4+IDEzXG4gICAgaCA9IE1hdGguaW11bChoLCAweDViZDFlOTk1KVxuICB9XG4gIHJldHVybiBoID4+PiAwXG59XG5cbi8vIGRlZmF1bHQgdG8gMC4wMSUgZXJyb3IgcmF0ZSBhcyB0aGUgZmlsdGVyIGNvbXByZXNzZXMgdmVyeSB3ZWxsXG5jb25zdCBERUZBVUxUX0VSUk9SX1JBVEUgPSAwLjAwMDFcblxuZXhwb3J0IGNsYXNzIEJsb29tRmlsdGVyIHtcbiAgbnVtSXRlbXM6IG51bWJlclxuICBlcnJvclJhdGU6IG51bWJlclxuICBudW1CaXRzOiBudW1iZXJcbiAgbnVtSGFzaGVzOiBudW1iZXJcbiAgYml0QXJyYXk6IG51bWJlcltdXG5cbiAgY29uc3RydWN0b3IobnVtSXRlbXM6IG51bWJlciwgZXJyb3JSYXRlOiBudW1iZXIgPSBERUZBVUxUX0VSUk9SX1JBVEUpIHtcbiAgICB0aGlzLm51bUl0ZW1zID0gbnVtSXRlbXNcbiAgICB0aGlzLmVycm9yUmF0ZSA9IGVycm9yUmF0ZVxuICAgIHRoaXMubnVtQml0cyA9IE1hdGguY2VpbChcbiAgICAgIC0obnVtSXRlbXMgKiBNYXRoLmxvZyhlcnJvclJhdGUpKSAvIChNYXRoLmxvZygyKSAqIE1hdGgubG9nKDIpKVxuICAgIClcbiAgICB0aGlzLm51bUhhc2hlcyA9IE1hdGguY2VpbCgodGhpcy5udW1CaXRzIC8gbnVtSXRlbXMpICogTWF0aC5sb2coMikpXG4gICAgdGhpcy5iaXRBcnJheSA9IG5ldyBBcnJheSh0aGlzLm51bUJpdHMpLmZpbGwoMClcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKGl0ZW1zOiBzdHJpbmdbXSwgZXJyb3JSYXRlID0gREVGQVVMVF9FUlJPUl9SQVRFKSB7XG4gICAgY29uc3QgZmlsdGVyID0gbmV3IEJsb29tRmlsdGVyKGl0ZW1zLmxlbmd0aCwgZXJyb3JSYXRlKVxuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICBmaWx0ZXIuYWRkKGl0ZW0pXG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJcbiAgfVxuXG4gIGV4cG9ydCgpIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbnVtSXRlbXM6IHRoaXMubnVtSXRlbXMsXG4gICAgICBlcnJvclJhdGU6IHRoaXMuZXJyb3JSYXRlLFxuICAgICAgbnVtQml0czogdGhpcy5udW1CaXRzLFxuICAgICAgbnVtSGFzaGVzOiB0aGlzLm51bUhhc2hlcyxcbiAgICAgIGJpdEFycmF5OiB0aGlzLmJpdEFycmF5LFxuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5ORVhUX1JVTlRJTUUgPT09ICdub2RlanMnKSB7XG4gICAgICBpZiAodGhpcy5lcnJvclJhdGUgPCBERUZBVUxUX0VSUk9SX1JBVEUpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyRGF0YSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpXG4gICAgICAgIGNvbnN0IGd6aXBTaXplID0gKFxuICAgICAgICAgIHJlcXVpcmUoJ25leHQvZGlzdC9jb21waWxlZC9nemlwLXNpemUnKSBhcyB0eXBlb2YgaW1wb3J0KCduZXh0L2Rpc3QvY29tcGlsZWQvZ3ppcC1zaXplJylcbiAgICAgICAgKS5zeW5jKGZpbHRlckRhdGEpXG5cbiAgICAgICAgaWYgKGd6aXBTaXplID4gMTAyNCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBDcmVhdGluZyBmaWx0ZXIgd2l0aCBlcnJvciByYXRlIGxlc3MgdGhhbiAwLjElICgwLjAwMSkgY2FuIGluY3JlYXNlIHRoZSBzaXplIGRyYW1hdGljYWxseSBwcm9jZWVkIHdpdGggY2F1dGlvbi4gUmVjZWl2ZWQgZXJyb3IgcmF0ZSAke3RoaXMuZXJyb3JSYXRlfSByZXN1bHRlZCBpbiBzaXplICR7ZmlsdGVyRGF0YS5sZW5ndGh9IGJ5dGVzLCAke2d6aXBTaXplfSBieXRlcyAoZ3ppcClgXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuXG4gIGltcG9ydChkYXRhOiBSZXR1cm5UeXBlPCh0eXBlb2YgdGhpcylbJ2V4cG9ydCddPikge1xuICAgIHRoaXMubnVtSXRlbXMgPSBkYXRhLm51bUl0ZW1zXG4gICAgdGhpcy5lcnJvclJhdGUgPSBkYXRhLmVycm9yUmF0ZVxuICAgIHRoaXMubnVtQml0cyA9IGRhdGEubnVtQml0c1xuICAgIHRoaXMubnVtSGFzaGVzID0gZGF0YS5udW1IYXNoZXNcbiAgICB0aGlzLmJpdEFycmF5ID0gZGF0YS5iaXRBcnJheVxuICB9XG5cbiAgYWRkKGl0ZW06IHN0cmluZykge1xuICAgIGNvbnN0IGhhc2hWYWx1ZXMgPSB0aGlzLmdldEhhc2hWYWx1ZXMoaXRlbSlcbiAgICBoYXNoVmFsdWVzLmZvckVhY2goKGhhc2gpID0+IHtcbiAgICAgIHRoaXMuYml0QXJyYXlbaGFzaF0gPSAxXG4gICAgfSlcbiAgfVxuXG4gIGNvbnRhaW5zKGl0ZW06IHN0cmluZykge1xuICAgIGNvbnN0IGhhc2hWYWx1ZXMgPSB0aGlzLmdldEhhc2hWYWx1ZXMoaXRlbSlcbiAgICByZXR1cm4gaGFzaFZhbHVlcy5ldmVyeSgoaGFzaCkgPT4gdGhpcy5iaXRBcnJheVtoYXNoXSlcbiAgfVxuXG4gIGdldEhhc2hWYWx1ZXMoaXRlbTogc3RyaW5nKSB7XG4gICAgY29uc3QgaGFzaFZhbHVlcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdGhpcy5udW1IYXNoZXM7IGkrKykge1xuICAgICAgY29uc3QgaGFzaCA9IG11cm11cmhhc2gyKGAke2l0ZW19JHtpfWApICUgdGhpcy5udW1CaXRzXG4gICAgICBoYXNoVmFsdWVzLnB1c2goaGFzaClcbiAgICB9XG4gICAgcmV0dXJuIGhhc2hWYWx1ZXNcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkJsb29tRmlsdGVyIiwibXVybXVyaGFzaDIiLCJzdHIiLCJoIiwiaSIsImxlbmd0aCIsImMiLCJjaGFyQ29kZUF0IiwiTWF0aCIsImltdWwiLCJERUZBVUxUX0VSUk9SX1JBVEUiLCJmcm9tIiwiaXRlbXMiLCJlcnJvclJhdGUiLCJmaWx0ZXIiLCJpdGVtIiwiYWRkIiwiZXhwb3J0IiwiZGF0YSIsIm51bUl0ZW1zIiwibnVtQml0cyIsIm51bUhhc2hlcyIsImJpdEFycmF5IiwicHJvY2VzcyIsImVudiIsIk5FWFRfUlVOVElNRSIsImZpbHRlckRhdGEiLCJKU09OIiwic3RyaW5naWZ5IiwiZ3ppcFNpemUiLCJyZXF1aXJlIiwic3luYyIsImNvbnNvbGUiLCJ3YXJuIiwiaW1wb3J0IiwiaGFzaFZhbHVlcyIsImdldEhhc2hWYWx1ZXMiLCJmb3JFYWNoIiwiaGFzaCIsImNvbnRhaW5zIiwiZXZlcnkiLCJwdXNoIiwiY29uc3RydWN0b3IiLCJjZWlsIiwibG9nIiwiQXJyYXkiLCJmaWxsIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/bloom-filter.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/constants.js":
/*!****************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/constants.js ***!
  \****************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    APP_BUILD_MANIFEST: function() {\n        return APP_BUILD_MANIFEST;\n    },\n    APP_CLIENT_INTERNALS: function() {\n        return APP_CLIENT_INTERNALS;\n    },\n    APP_PATHS_MANIFEST: function() {\n        return APP_PATHS_MANIFEST;\n    },\n    APP_PATH_ROUTES_MANIFEST: function() {\n        return APP_PATH_ROUTES_MANIFEST;\n    },\n    BARREL_OPTIMIZATION_PREFIX: function() {\n        return BARREL_OPTIMIZATION_PREFIX;\n    },\n    BLOCKED_PAGES: function() {\n        return BLOCKED_PAGES;\n    },\n    BUILD_ID_FILE: function() {\n        return BUILD_ID_FILE;\n    },\n    BUILD_MANIFEST: function() {\n        return BUILD_MANIFEST;\n    },\n    CLIENT_PUBLIC_FILES_PATH: function() {\n        return CLIENT_PUBLIC_FILES_PATH;\n    },\n    CLIENT_REFERENCE_MANIFEST: function() {\n        return CLIENT_REFERENCE_MANIFEST;\n    },\n    CLIENT_STATIC_FILES_PATH: function() {\n        return CLIENT_STATIC_FILES_PATH;\n    },\n    CLIENT_STATIC_FILES_RUNTIME_AMP: function() {\n        return CLIENT_STATIC_FILES_RUNTIME_AMP;\n    },\n    CLIENT_STATIC_FILES_RUNTIME_MAIN: function() {\n        return CLIENT_STATIC_FILES_RUNTIME_MAIN;\n    },\n    CLIENT_STATIC_FILES_RUNTIME_MAIN_APP: function() {\n        return CLIENT_STATIC_FILES_RUNTIME_MAIN_APP;\n    },\n    CLIENT_STATIC_FILES_RUNTIME_POLYFILLS: function() {\n        return CLIENT_STATIC_FILES_RUNTIME_POLYFILLS;\n    },\n    CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL: function() {\n        return CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL;\n    },\n    CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH: function() {\n        return CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH;\n    },\n    CLIENT_STATIC_FILES_RUNTIME_WEBPACK: function() {\n        return CLIENT_STATIC_FILES_RUNTIME_WEBPACK;\n    },\n    COMPILER_INDEXES: function() {\n        return COMPILER_INDEXES;\n    },\n    COMPILER_NAMES: function() {\n        return COMPILER_NAMES;\n    },\n    CONFIG_FILES: function() {\n        return CONFIG_FILES;\n    },\n    DEFAULT_RUNTIME_WEBPACK: function() {\n        return DEFAULT_RUNTIME_WEBPACK;\n    },\n    DEFAULT_SANS_SERIF_FONT: function() {\n        return DEFAULT_SANS_SERIF_FONT;\n    },\n    DEFAULT_SERIF_FONT: function() {\n        return DEFAULT_SERIF_FONT;\n    },\n    DEV_CLIENT_MIDDLEWARE_MANIFEST: function() {\n        return DEV_CLIENT_MIDDLEWARE_MANIFEST;\n    },\n    DEV_CLIENT_PAGES_MANIFEST: function() {\n        return DEV_CLIENT_PAGES_MANIFEST;\n    },\n    DYNAMIC_CSS_MANIFEST: function() {\n        return DYNAMIC_CSS_MANIFEST;\n    },\n    EDGE_RUNTIME_WEBPACK: function() {\n        return EDGE_RUNTIME_WEBPACK;\n    },\n    EDGE_UNSUPPORTED_NODE_APIS: function() {\n        return EDGE_UNSUPPORTED_NODE_APIS;\n    },\n    EXPORT_DETAIL: function() {\n        return EXPORT_DETAIL;\n    },\n    EXPORT_MARKER: function() {\n        return EXPORT_MARKER;\n    },\n    FUNCTIONS_CONFIG_MANIFEST: function() {\n        return FUNCTIONS_CONFIG_MANIFEST;\n    },\n    IMAGES_MANIFEST: function() {\n        return IMAGES_MANIFEST;\n    },\n    INTERCEPTION_ROUTE_REWRITE_MANIFEST: function() {\n        return INTERCEPTION_ROUTE_REWRITE_MANIFEST;\n    },\n    MIDDLEWARE_BUILD_MANIFEST: function() {\n        return MIDDLEWARE_BUILD_MANIFEST;\n    },\n    MIDDLEWARE_MANIFEST: function() {\n        return MIDDLEWARE_MANIFEST;\n    },\n    MIDDLEWARE_REACT_LOADABLE_MANIFEST: function() {\n        return MIDDLEWARE_REACT_LOADABLE_MANIFEST;\n    },\n    MODERN_BROWSERSLIST_TARGET: function() {\n        return _modernbrowserslisttarget.default;\n    },\n    NEXT_BUILTIN_DOCUMENT: function() {\n        return NEXT_BUILTIN_DOCUMENT;\n    },\n    NEXT_FONT_MANIFEST: function() {\n        return NEXT_FONT_MANIFEST;\n    },\n    PAGES_MANIFEST: function() {\n        return PAGES_MANIFEST;\n    },\n    PHASE_DEVELOPMENT_SERVER: function() {\n        return PHASE_DEVELOPMENT_SERVER;\n    },\n    PHASE_EXPORT: function() {\n        return PHASE_EXPORT;\n    },\n    PHASE_INFO: function() {\n        return PHASE_INFO;\n    },\n    PHASE_PRODUCTION_BUILD: function() {\n        return PHASE_PRODUCTION_BUILD;\n    },\n    PHASE_PRODUCTION_SERVER: function() {\n        return PHASE_PRODUCTION_SERVER;\n    },\n    PHASE_TEST: function() {\n        return PHASE_TEST;\n    },\n    PRERENDER_MANIFEST: function() {\n        return PRERENDER_MANIFEST;\n    },\n    REACT_LOADABLE_MANIFEST: function() {\n        return REACT_LOADABLE_MANIFEST;\n    },\n    ROUTES_MANIFEST: function() {\n        return ROUTES_MANIFEST;\n    },\n    RSC_MODULE_TYPES: function() {\n        return RSC_MODULE_TYPES;\n    },\n    SERVER_DIRECTORY: function() {\n        return SERVER_DIRECTORY;\n    },\n    SERVER_FILES_MANIFEST: function() {\n        return SERVER_FILES_MANIFEST;\n    },\n    SERVER_PROPS_ID: function() {\n        return SERVER_PROPS_ID;\n    },\n    SERVER_REFERENCE_MANIFEST: function() {\n        return SERVER_REFERENCE_MANIFEST;\n    },\n    STATIC_PROPS_ID: function() {\n        return STATIC_PROPS_ID;\n    },\n    STATIC_STATUS_PAGES: function() {\n        return STATIC_STATUS_PAGES;\n    },\n    STRING_LITERAL_DROP_BUNDLE: function() {\n        return STRING_LITERAL_DROP_BUNDLE;\n    },\n    SUBRESOURCE_INTEGRITY_MANIFEST: function() {\n        return SUBRESOURCE_INTEGRITY_MANIFEST;\n    },\n    SYSTEM_ENTRYPOINTS: function() {\n        return SYSTEM_ENTRYPOINTS;\n    },\n    TRACE_OUTPUT_VERSION: function() {\n        return TRACE_OUTPUT_VERSION;\n    },\n    TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST: function() {\n        return TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST;\n    },\n    TURBO_TRACE_DEFAULT_MEMORY_LIMIT: function() {\n        return TURBO_TRACE_DEFAULT_MEMORY_LIMIT;\n    },\n    UNDERSCORE_NOT_FOUND_ROUTE: function() {\n        return UNDERSCORE_NOT_FOUND_ROUTE;\n    },\n    UNDERSCORE_NOT_FOUND_ROUTE_ENTRY: function() {\n        return UNDERSCORE_NOT_FOUND_ROUTE_ENTRY;\n    },\n    WEBPACK_STATS: function() {\n        return WEBPACK_STATS;\n    }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _modernbrowserslisttarget = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./modern-browserslist-target */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/modern-browserslist-target.js\"));\nconst COMPILER_NAMES = {\n    client: 'client',\n    server: 'server',\n    edgeServer: 'edge-server'\n};\nconst COMPILER_INDEXES = {\n    [COMPILER_NAMES.client]: 0,\n    [COMPILER_NAMES.server]: 1,\n    [COMPILER_NAMES.edgeServer]: 2\n};\nconst UNDERSCORE_NOT_FOUND_ROUTE = '/_not-found';\nconst UNDERSCORE_NOT_FOUND_ROUTE_ENTRY = \"\" + UNDERSCORE_NOT_FOUND_ROUTE + \"/page\";\nconst PHASE_EXPORT = 'phase-export';\nconst PHASE_PRODUCTION_BUILD = 'phase-production-build';\nconst PHASE_PRODUCTION_SERVER = 'phase-production-server';\nconst PHASE_DEVELOPMENT_SERVER = 'phase-development-server';\nconst PHASE_TEST = 'phase-test';\nconst PHASE_INFO = 'phase-info';\nconst PAGES_MANIFEST = 'pages-manifest.json';\nconst WEBPACK_STATS = 'webpack-stats.json';\nconst APP_PATHS_MANIFEST = 'app-paths-manifest.json';\nconst APP_PATH_ROUTES_MANIFEST = 'app-path-routes-manifest.json';\nconst BUILD_MANIFEST = 'build-manifest.json';\nconst APP_BUILD_MANIFEST = 'app-build-manifest.json';\nconst FUNCTIONS_CONFIG_MANIFEST = 'functions-config-manifest.json';\nconst SUBRESOURCE_INTEGRITY_MANIFEST = 'subresource-integrity-manifest';\nconst NEXT_FONT_MANIFEST = 'next-font-manifest';\nconst EXPORT_MARKER = 'export-marker.json';\nconst EXPORT_DETAIL = 'export-detail.json';\nconst PRERENDER_MANIFEST = 'prerender-manifest.json';\nconst ROUTES_MANIFEST = 'routes-manifest.json';\nconst IMAGES_MANIFEST = 'images-manifest.json';\nconst SERVER_FILES_MANIFEST = 'required-server-files.json';\nconst DEV_CLIENT_PAGES_MANIFEST = '_devPagesManifest.json';\nconst MIDDLEWARE_MANIFEST = 'middleware-manifest.json';\nconst TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST = '_clientMiddlewareManifest.json';\nconst DEV_CLIENT_MIDDLEWARE_MANIFEST = '_devMiddlewareManifest.json';\nconst REACT_LOADABLE_MANIFEST = 'react-loadable-manifest.json';\nconst SERVER_DIRECTORY = 'server';\nconst CONFIG_FILES = [\n    'next.config.js',\n    'next.config.mjs',\n    'next.config.ts'\n];\nconst BUILD_ID_FILE = 'BUILD_ID';\nconst BLOCKED_PAGES = [\n    '/_document',\n    '/_app',\n    '/_error'\n];\nconst CLIENT_PUBLIC_FILES_PATH = 'public';\nconst CLIENT_STATIC_FILES_PATH = 'static';\nconst STRING_LITERAL_DROP_BUNDLE = '__NEXT_DROP_CLIENT_FILE__';\nconst NEXT_BUILTIN_DOCUMENT = '__NEXT_BUILTIN_DOCUMENT__';\nconst BARREL_OPTIMIZATION_PREFIX = '__barrel_optimize__';\nconst CLIENT_REFERENCE_MANIFEST = 'client-reference-manifest';\nconst SERVER_REFERENCE_MANIFEST = 'server-reference-manifest';\nconst MIDDLEWARE_BUILD_MANIFEST = 'middleware-build-manifest';\nconst MIDDLEWARE_REACT_LOADABLE_MANIFEST = 'middleware-react-loadable-manifest';\nconst INTERCEPTION_ROUTE_REWRITE_MANIFEST = 'interception-route-rewrite-manifest';\nconst DYNAMIC_CSS_MANIFEST = 'dynamic-css-manifest';\nconst CLIENT_STATIC_FILES_RUNTIME_MAIN = \"main\";\nconst CLIENT_STATIC_FILES_RUNTIME_MAIN_APP = \"\" + CLIENT_STATIC_FILES_RUNTIME_MAIN + \"-app\";\nconst APP_CLIENT_INTERNALS = 'app-pages-internals';\nconst CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH = \"react-refresh\";\nconst CLIENT_STATIC_FILES_RUNTIME_AMP = \"amp\";\nconst CLIENT_STATIC_FILES_RUNTIME_WEBPACK = \"webpack\";\nconst CLIENT_STATIC_FILES_RUNTIME_POLYFILLS = 'polyfills';\nconst CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL = Symbol(CLIENT_STATIC_FILES_RUNTIME_POLYFILLS);\n_c = CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL;\nconst DEFAULT_RUNTIME_WEBPACK = 'webpack-runtime';\nconst EDGE_RUNTIME_WEBPACK = 'edge-runtime-webpack';\nconst STATIC_PROPS_ID = '__N_SSG';\nconst SERVER_PROPS_ID = '__N_SSP';\nconst DEFAULT_SERIF_FONT = {\n    name: 'Times New Roman',\n    xAvgCharWidth: 821,\n    azAvgWidth: 854.3953488372093,\n    unitsPerEm: 2048\n};\nconst DEFAULT_SANS_SERIF_FONT = {\n    name: 'Arial',\n    xAvgCharWidth: 904,\n    azAvgWidth: 934.5116279069767,\n    unitsPerEm: 2048\n};\nconst STATIC_STATUS_PAGES = [\n    '/500'\n];\nconst TRACE_OUTPUT_VERSION = 1;\nconst TURBO_TRACE_DEFAULT_MEMORY_LIMIT = 6000;\nconst RSC_MODULE_TYPES = {\n    client: 'client',\n    server: 'server'\n};\nconst EDGE_UNSUPPORTED_NODE_APIS = [\n    'clearImmediate',\n    'setImmediate',\n    'BroadcastChannel',\n    'ByteLengthQueuingStrategy',\n    'CompressionStream',\n    'CountQueuingStrategy',\n    'DecompressionStream',\n    'DomException',\n    'MessageChannel',\n    'MessageEvent',\n    'MessagePort',\n    'ReadableByteStreamController',\n    'ReadableStreamBYOBRequest',\n    'ReadableStreamDefaultController',\n    'TransformStreamDefaultController',\n    'WritableStreamDefaultController'\n];\nconst SYSTEM_ENTRYPOINTS = new Set([\n    CLIENT_STATIC_FILES_RUNTIME_MAIN,\n    CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH,\n    CLIENT_STATIC_FILES_RUNTIME_AMP,\n    CLIENT_STATIC_FILES_RUNTIME_MAIN_APP\n]);\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=constants.js.map\nvar _c;\n$RefreshReg$(_c, \"CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL\");\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2NvbnN0YW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFtQ2FBLGtCQUFrQjtlQUFsQkE7O0lBaURBQyxvQkFBb0I7ZUFBcEJBOztJQXBEQUMsa0JBQWtCO2VBQWxCQTs7SUFDQUMsd0JBQXdCO2VBQXhCQTs7SUE4QkFDLDBCQUEwQjtlQUExQkE7O0lBTEFDLGFBQWE7ZUFBYkE7O0lBREFDLGFBQWE7ZUFBYkE7O0lBdkJBQyxjQUFjO2VBQWRBOztJQXlCQUMsd0JBQXdCO2VBQXhCQTs7SUFPQUMseUJBQXlCO2VBQXpCQTs7SUFOQUMsd0JBQXdCO2VBQXhCQTs7SUE0QkFDLCtCQUErQjtlQUEvQkE7O0lBUEFDLGdDQUFnQztlQUFoQ0E7O0lBQ0FDLG9DQUFvQztlQUFwQ0E7O0lBVUFDLHFDQUFxQztlQUFyQ0E7O0lBQ0FDLDRDQUE0QztlQUE1Q0E7O0lBUEFDLHlDQUF5QztlQUF6Q0E7O0lBSUFDLG1DQUFtQztlQUFuQ0E7O0lBNUVBQyxnQkFBZ0I7ZUFBaEJBOztJQVJBQyxjQUFjO2VBQWRBOztJQThDQUMsWUFBWTtlQUFaQTs7SUE0Q0FDLHVCQUF1QjtlQUF2QkE7O0lBVUFDLHVCQUF1QjtlQUF2QkE7O0lBTkFDLGtCQUFrQjtlQUFsQkE7O0lBbkRBQyw4QkFBOEI7ZUFBOUJBOztJQUpBQyx5QkFBeUI7ZUFBekJBOztJQWlDQUMsb0JBQW9CO2VBQXBCQTs7SUFtQkFDLG9CQUFvQjtlQUFwQkE7O0lBNkJBQywwQkFBMEI7ZUFBMUJBOztJQXRGQUMsYUFBYTtlQUFiQTs7SUFEQUMsYUFBYTtlQUFiQTs7SUFIQUMseUJBQXlCO2VBQXpCQTs7SUFPQUMsZUFBZTtlQUFmQTs7SUFnQ0FDLG1DQUFtQztlQUFuQ0E7O0lBTEFDLHlCQUF5QjtlQUF6QkE7O0lBeEJBQyxtQkFBbUI7ZUFBbkJBOztJQTBCQUMsa0NBQWtDO2VBQWxDQTs7SUF0RUpDLDBCQUEwQjtlQUExQkEsMEJBQUFBLE9BQTBCOztJQTREdEJDLHFCQUFxQjtlQUFyQkE7O0lBeEJBQyxrQkFBa0I7ZUFBbEJBOztJQVJBQyxjQUFjO2VBQWRBOztJQUhBQyx3QkFBd0I7ZUFBeEJBOztJQUhBQyxZQUFZO2VBQVpBOztJQUtBQyxVQUFVO2VBQVZBOztJQUpBQyxzQkFBc0I7ZUFBdEJBOztJQUNBQyx1QkFBdUI7ZUFBdkJBOztJQUVBQyxVQUFVO2VBQVZBOztJQWFBQyxrQkFBa0I7ZUFBbEJBOztJQVNBQyx1QkFBdUI7ZUFBdkJBOztJQVJBQyxlQUFlO2VBQWZBOztJQTJFQUMsZ0JBQWdCO2VBQWhCQTs7SUFsRUFDLGdCQUFnQjtlQUFoQkE7O0lBUEFDLHFCQUFxQjtlQUFyQkE7O0lBdURBQyxlQUFlO2VBQWZBOztJQS9CQUMseUJBQXlCO2VBQXpCQTs7SUE4QkFDLGVBQWU7ZUFBZkE7O0lBY0FDLG1CQUFtQjtlQUFuQkE7O0lBbkRBQywwQkFBMEI7ZUFBMUJBOztJQXhCQUMsOEJBQThCO2VBQTlCQTs7SUE0R0FDLGtCQUFrQjtlQUFsQkE7O0lBaENBQyxvQkFBb0I7ZUFBcEJBOztJQWxFQUMsb0NBQW9DO2VBQXBDQTs7SUFvRUFDLGdDQUFnQztlQUFoQ0E7O0lBN0ZBQywwQkFBMEI7ZUFBMUJBOztJQUNBQyxnQ0FBZ0M7ZUFBaENBOztJQVFBQyxhQUFhO2VBQWJBOzs7OytGQS9CMEI7QUFNaEMsTUFBTTlDLGlCQUFpQjtJQUM1QitDLFFBQVE7SUFDUkMsUUFBUTtJQUNSQyxZQUFZO0FBQ2Q7QUFJTyxNQUFNbEQsbUJBRVQ7SUFDRixDQUFDQyxlQUFlK0MsTUFBTSxDQUFDLEVBQUU7SUFDekIsQ0FBQy9DLGVBQWVnRCxNQUFNLENBQUMsRUFBRTtJQUN6QixDQUFDaEQsZUFBZWlELFVBQVUsQ0FBQyxFQUFFO0FBQy9CO0FBRU8sTUFBTUwsNkJBQTZCO0FBQ25DLE1BQU1DLG1DQUFvQyxLQUFFRCw2QkFBMkI7QUFDdkUsTUFBTXJCLGVBQWU7QUFDckIsTUFBTUUseUJBQXlCO0FBQy9CLE1BQU1DLDBCQUEwQjtBQUNoQyxNQUFNSiwyQkFBMkI7QUFDakMsTUFBTUssYUFBYTtBQUNuQixNQUFNSCxhQUFhO0FBQ25CLE1BQU1ILGlCQUFpQjtBQUN2QixNQUFNeUIsZ0JBQWdCO0FBQ3RCLE1BQU0vRCxxQkFBcUI7QUFDM0IsTUFBTUMsMkJBQTJCO0FBQ2pDLE1BQU1JLGlCQUFpQjtBQUN2QixNQUFNUCxxQkFBcUI7QUFDM0IsTUFBTStCLDRCQUE0QjtBQUNsQyxNQUFNMkIsaUNBQWlDO0FBQ3ZDLE1BQU1uQixxQkFBcUI7QUFDM0IsTUFBTVQsZ0JBQWdCO0FBQ3RCLE1BQU1ELGdCQUFnQjtBQUN0QixNQUFNa0IscUJBQXFCO0FBQzNCLE1BQU1FLGtCQUFrQjtBQUN4QixNQUFNakIsa0JBQWtCO0FBQ3hCLE1BQU1vQix3QkFBd0I7QUFDOUIsTUFBTTNCLDRCQUE0QjtBQUNsQyxNQUFNVSxzQkFBc0I7QUFDNUIsTUFBTTBCLHVDQUNYO0FBQ0ssTUFBTXJDLGlDQUFpQztBQUN2QyxNQUFNd0IsMEJBQTBCO0FBQ2hDLE1BQU1HLG1CQUFtQjtBQUN6QixNQUFNL0IsZUFBZTtJQUMxQjtJQUNBO0lBQ0E7Q0FDRDtBQUNNLE1BQU1kLGdCQUFnQjtBQUN0QixNQUFNRCxnQkFBZ0I7SUFBQztJQUFjO0lBQVM7Q0FBVTtBQUN4RCxNQUFNRywyQkFBMkI7QUFDakMsTUFBTUUsMkJBQTJCO0FBQ2pDLE1BQU0rQyw2QkFBNkI7QUFDbkMsTUFBTW5CLHdCQUF3QjtBQUM5QixNQUFNbEMsNkJBQTZCO0FBR25DLE1BQU1LLDRCQUE0QjtBQUVsQyxNQUFNNkMsNEJBQTRCO0FBRWxDLE1BQU1wQiw0QkFBNEI7QUFFbEMsTUFBTUUscUNBQ1g7QUFFSyxNQUFNSCxzQ0FDWDtBQUVLLE1BQU1QLHVCQUF1QjtBQUc3QixNQUFNZCxtQ0FBb0M7QUFDMUMsTUFBTUMsdUNBQXdDLEtBQUVELG1DQUFpQztBQUVqRixNQUFNWCx1QkFBdUI7QUFFN0IsTUFBTWUsNENBQTZDO0FBRW5ELE1BQU1MLGtDQUFtQztBQUV6QyxNQUFNTSxzQ0FBdUM7QUFFN0MsTUFBTUgsd0NBQXdDO0FBQzlDLE1BQU1DLCtDQUErQ3NELE9BQzFEdkQ7O0FBRUssTUFBTU8sMEJBQTBCO0FBQ2hDLE1BQU1NLHVCQUF1QjtBQUM3QixNQUFNNEIsa0JBQWtCO0FBQ3hCLE1BQU1GLGtCQUFrQjtBQUN4QixNQUFNOUIscUJBQXFCO0lBQ2hDK0MsTUFBTTtJQUNOQyxlQUFlO0lBQ2ZDLFlBQVk7SUFDWkMsWUFBWTtBQUNkO0FBQ08sTUFBTW5ELDBCQUEwQjtJQUNyQ2dELE1BQU07SUFDTkMsZUFBZTtJQUNmQyxZQUFZO0lBQ1pDLFlBQVk7QUFDZDtBQUNPLE1BQU1qQixzQkFBc0I7SUFBQztDQUFPO0FBQ3BDLE1BQU1JLHVCQUF1QjtBQUU3QixNQUFNRSxtQ0FBbUM7QUFFekMsTUFBTVosbUJBQW1CO0lBQzlCZ0IsUUFBUTtJQUNSQyxRQUFRO0FBQ1Y7QUFNTyxNQUFNdkMsNkJBQTZCO0lBQ3hDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFFTSxNQUFNK0IscUJBQXFCLElBQUllLElBQVk7SUFDaEQ5RDtJQUNBSTtJQUNBTDtJQUNBRTtDQUNEIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL3NyYy9zaGFyZWQvbGliL2NvbnN0YW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTU9ERVJOX0JST1dTRVJTTElTVF9UQVJHRVQgZnJvbSAnLi9tb2Rlcm4tYnJvd3NlcnNsaXN0LXRhcmdldCdcblxuZXhwb3J0IHsgTU9ERVJOX0JST1dTRVJTTElTVF9UQVJHRVQgfVxuXG5leHBvcnQgdHlwZSBWYWx1ZU9mPFQ+ID0gUmVxdWlyZWQ8VD5ba2V5b2YgVF1cblxuZXhwb3J0IGNvbnN0IENPTVBJTEVSX05BTUVTID0ge1xuICBjbGllbnQ6ICdjbGllbnQnLFxuICBzZXJ2ZXI6ICdzZXJ2ZXInLFxuICBlZGdlU2VydmVyOiAnZWRnZS1zZXJ2ZXInLFxufSBhcyBjb25zdFxuXG5leHBvcnQgdHlwZSBDb21waWxlck5hbWVWYWx1ZXMgPSBWYWx1ZU9mPHR5cGVvZiBDT01QSUxFUl9OQU1FUz5cblxuZXhwb3J0IGNvbnN0IENPTVBJTEVSX0lOREVYRVM6IHtcbiAgW2NvbXBpbGVyS2V5IGluIENvbXBpbGVyTmFtZVZhbHVlc106IG51bWJlclxufSA9IHtcbiAgW0NPTVBJTEVSX05BTUVTLmNsaWVudF06IDAsXG4gIFtDT01QSUxFUl9OQU1FUy5zZXJ2ZXJdOiAxLFxuICBbQ09NUElMRVJfTkFNRVMuZWRnZVNlcnZlcl06IDIsXG59IGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBVTkRFUlNDT1JFX05PVF9GT1VORF9ST1VURSA9ICcvX25vdC1mb3VuZCdcbmV4cG9ydCBjb25zdCBVTkRFUlNDT1JFX05PVF9GT1VORF9ST1VURV9FTlRSWSA9IGAke1VOREVSU0NPUkVfTk9UX0ZPVU5EX1JPVVRFfS9wYWdlYFxuZXhwb3J0IGNvbnN0IFBIQVNFX0VYUE9SVCA9ICdwaGFzZS1leHBvcnQnXG5leHBvcnQgY29uc3QgUEhBU0VfUFJPRFVDVElPTl9CVUlMRCA9ICdwaGFzZS1wcm9kdWN0aW9uLWJ1aWxkJ1xuZXhwb3J0IGNvbnN0IFBIQVNFX1BST0RVQ1RJT05fU0VSVkVSID0gJ3BoYXNlLXByb2R1Y3Rpb24tc2VydmVyJ1xuZXhwb3J0IGNvbnN0IFBIQVNFX0RFVkVMT1BNRU5UX1NFUlZFUiA9ICdwaGFzZS1kZXZlbG9wbWVudC1zZXJ2ZXInXG5leHBvcnQgY29uc3QgUEhBU0VfVEVTVCA9ICdwaGFzZS10ZXN0J1xuZXhwb3J0IGNvbnN0IFBIQVNFX0lORk8gPSAncGhhc2UtaW5mbydcbmV4cG9ydCBjb25zdCBQQUdFU19NQU5JRkVTVCA9ICdwYWdlcy1tYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IFdFQlBBQ0tfU1RBVFMgPSAnd2VicGFjay1zdGF0cy5qc29uJ1xuZXhwb3J0IGNvbnN0IEFQUF9QQVRIU19NQU5JRkVTVCA9ICdhcHAtcGF0aHMtbWFuaWZlc3QuanNvbidcbmV4cG9ydCBjb25zdCBBUFBfUEFUSF9ST1VURVNfTUFOSUZFU1QgPSAnYXBwLXBhdGgtcm91dGVzLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgQlVJTERfTUFOSUZFU1QgPSAnYnVpbGQtbWFuaWZlc3QuanNvbidcbmV4cG9ydCBjb25zdCBBUFBfQlVJTERfTUFOSUZFU1QgPSAnYXBwLWJ1aWxkLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgRlVOQ1RJT05TX0NPTkZJR19NQU5JRkVTVCA9ICdmdW5jdGlvbnMtY29uZmlnLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgU1VCUkVTT1VSQ0VfSU5URUdSSVRZX01BTklGRVNUID0gJ3N1YnJlc291cmNlLWludGVncml0eS1tYW5pZmVzdCdcbmV4cG9ydCBjb25zdCBORVhUX0ZPTlRfTUFOSUZFU1QgPSAnbmV4dC1mb250LW1hbmlmZXN0J1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9NQVJLRVIgPSAnZXhwb3J0LW1hcmtlci5qc29uJ1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9ERVRBSUwgPSAnZXhwb3J0LWRldGFpbC5qc29uJ1xuZXhwb3J0IGNvbnN0IFBSRVJFTkRFUl9NQU5JRkVTVCA9ICdwcmVyZW5kZXItbWFuaWZlc3QuanNvbidcbmV4cG9ydCBjb25zdCBST1VURVNfTUFOSUZFU1QgPSAncm91dGVzLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgSU1BR0VTX01BTklGRVNUID0gJ2ltYWdlcy1tYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IFNFUlZFUl9GSUxFU19NQU5JRkVTVCA9ICdyZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvbidcbmV4cG9ydCBjb25zdCBERVZfQ0xJRU5UX1BBR0VTX01BTklGRVNUID0gJ19kZXZQYWdlc01hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgTUlERExFV0FSRV9NQU5JRkVTVCA9ICdtaWRkbGV3YXJlLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgVFVSQk9QQUNLX0NMSUVOVF9NSURETEVXQVJFX01BTklGRVNUID1cbiAgJ19jbGllbnRNaWRkbGV3YXJlTWFuaWZlc3QuanNvbidcbmV4cG9ydCBjb25zdCBERVZfQ0xJRU5UX01JRERMRVdBUkVfTUFOSUZFU1QgPSAnX2Rldk1pZGRsZXdhcmVNYW5pZmVzdC5qc29uJ1xuZXhwb3J0IGNvbnN0IFJFQUNUX0xPQURBQkxFX01BTklGRVNUID0gJ3JlYWN0LWxvYWRhYmxlLW1hbmlmZXN0Lmpzb24nXG5leHBvcnQgY29uc3QgU0VSVkVSX0RJUkVDVE9SWSA9ICdzZXJ2ZXInXG5leHBvcnQgY29uc3QgQ09ORklHX0ZJTEVTID0gW1xuICAnbmV4dC5jb25maWcuanMnLFxuICAnbmV4dC5jb25maWcubWpzJyxcbiAgJ25leHQuY29uZmlnLnRzJyxcbl1cbmV4cG9ydCBjb25zdCBCVUlMRF9JRF9GSUxFID0gJ0JVSUxEX0lEJ1xuZXhwb3J0IGNvbnN0IEJMT0NLRURfUEFHRVMgPSBbJy9fZG9jdW1lbnQnLCAnL19hcHAnLCAnL19lcnJvciddXG5leHBvcnQgY29uc3QgQ0xJRU5UX1BVQkxJQ19GSUxFU19QQVRIID0gJ3B1YmxpYydcbmV4cG9ydCBjb25zdCBDTElFTlRfU1RBVElDX0ZJTEVTX1BBVEggPSAnc3RhdGljJ1xuZXhwb3J0IGNvbnN0IFNUUklOR19MSVRFUkFMX0RST1BfQlVORExFID0gJ19fTkVYVF9EUk9QX0NMSUVOVF9GSUxFX18nXG5leHBvcnQgY29uc3QgTkVYVF9CVUlMVElOX0RPQ1VNRU5UID0gJ19fTkVYVF9CVUlMVElOX0RPQ1VNRU5UX18nXG5leHBvcnQgY29uc3QgQkFSUkVMX09QVElNSVpBVElPTl9QUkVGSVggPSAnX19iYXJyZWxfb3B0aW1pemVfXydcblxuLy8gc2VydmVyL1tlbnRyeV0vcGFnZV9jbGllbnQtcmVmZXJlbmNlLW1hbmlmZXN0LmpzXG5leHBvcnQgY29uc3QgQ0xJRU5UX1JFRkVSRU5DRV9NQU5JRkVTVCA9ICdjbGllbnQtcmVmZXJlbmNlLW1hbmlmZXN0J1xuLy8gc2VydmVyL3NlcnZlci1yZWZlcmVuY2UtbWFuaWZlc3RcbmV4cG9ydCBjb25zdCBTRVJWRVJfUkVGRVJFTkNFX01BTklGRVNUID0gJ3NlcnZlci1yZWZlcmVuY2UtbWFuaWZlc3QnXG4vLyBzZXJ2ZXIvbWlkZGxld2FyZS1idWlsZC1tYW5pZmVzdC5qc1xuZXhwb3J0IGNvbnN0IE1JRERMRVdBUkVfQlVJTERfTUFOSUZFU1QgPSAnbWlkZGxld2FyZS1idWlsZC1tYW5pZmVzdCdcbi8vIHNlcnZlci9taWRkbGV3YXJlLXJlYWN0LWxvYWRhYmxlLW1hbmlmZXN0LmpzXG5leHBvcnQgY29uc3QgTUlERExFV0FSRV9SRUFDVF9MT0FEQUJMRV9NQU5JRkVTVCA9XG4gICdtaWRkbGV3YXJlLXJlYWN0LWxvYWRhYmxlLW1hbmlmZXN0J1xuLy8gc2VydmVyL2ludGVyY2VwdGlvbi1yb3V0ZS1yZXdyaXRlLW1hbmlmZXN0LmpzXG5leHBvcnQgY29uc3QgSU5URVJDRVBUSU9OX1JPVVRFX1JFV1JJVEVfTUFOSUZFU1QgPVxuICAnaW50ZXJjZXB0aW9uLXJvdXRlLXJld3JpdGUtbWFuaWZlc3QnXG4vLyBzZXJ2ZXIvZHluYW1pYy1jc3MtbWFuaWZlc3QuanNcbmV4cG9ydCBjb25zdCBEWU5BTUlDX0NTU19NQU5JRkVTVCA9ICdkeW5hbWljLWNzcy1tYW5pZmVzdCdcblxuLy8gc3RhdGljL3J1bnRpbWUvbWFpbi5qc1xuZXhwb3J0IGNvbnN0IENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9NQUlOID0gYG1haW5gXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU5fQVBQID0gYCR7Q0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU59LWFwcGBcbi8vIG5leHQgaW50ZXJuYWwgY2xpZW50IGNvbXBvbmVudHMgY2h1bmsgZm9yIGxheW91dHNcbmV4cG9ydCBjb25zdCBBUFBfQ0xJRU5UX0lOVEVSTkFMUyA9ICdhcHAtcGFnZXMtaW50ZXJuYWxzJ1xuLy8gc3RhdGljL3J1bnRpbWUvcmVhY3QtcmVmcmVzaC5qc1xuZXhwb3J0IGNvbnN0IENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9SRUFDVF9SRUZSRVNIID0gYHJlYWN0LXJlZnJlc2hgXG4vLyBzdGF0aWMvcnVudGltZS9hbXAuanNcbmV4cG9ydCBjb25zdCBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfQU1QID0gYGFtcGBcbi8vIHN0YXRpYy9ydW50aW1lL3dlYnBhY2suanNcbmV4cG9ydCBjb25zdCBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfV0VCUEFDSyA9IGB3ZWJwYWNrYFxuLy8gc3RhdGljL3J1bnRpbWUvcG9seWZpbGxzLmpzXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1BPTFlGSUxMUyA9ICdwb2x5ZmlsbHMnXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1BPTFlGSUxMU19TWU1CT0wgPSBTeW1ib2woXG4gIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9QT0xZRklMTFNcbilcbmV4cG9ydCBjb25zdCBERUZBVUxUX1JVTlRJTUVfV0VCUEFDSyA9ICd3ZWJwYWNrLXJ1bnRpbWUnXG5leHBvcnQgY29uc3QgRURHRV9SVU5USU1FX1dFQlBBQ0sgPSAnZWRnZS1ydW50aW1lLXdlYnBhY2snXG5leHBvcnQgY29uc3QgU1RBVElDX1BST1BTX0lEID0gJ19fTl9TU0cnXG5leHBvcnQgY29uc3QgU0VSVkVSX1BST1BTX0lEID0gJ19fTl9TU1AnXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVJJRl9GT05UID0ge1xuICBuYW1lOiAnVGltZXMgTmV3IFJvbWFuJyxcbiAgeEF2Z0NoYXJXaWR0aDogODIxLFxuICBhekF2Z1dpZHRoOiA4NTQuMzk1MzQ4ODM3MjA5MyxcbiAgdW5pdHNQZXJFbTogMjA0OCxcbn1cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NBTlNfU0VSSUZfRk9OVCA9IHtcbiAgbmFtZTogJ0FyaWFsJyxcbiAgeEF2Z0NoYXJXaWR0aDogOTA0LFxuICBhekF2Z1dpZHRoOiA5MzQuNTExNjI3OTA2OTc2NyxcbiAgdW5pdHNQZXJFbTogMjA0OCxcbn1cbmV4cG9ydCBjb25zdCBTVEFUSUNfU1RBVFVTX1BBR0VTID0gWycvNTAwJ11cbmV4cG9ydCBjb25zdCBUUkFDRV9PVVRQVVRfVkVSU0lPTiA9IDFcbi8vIGluIGBNQmBcbmV4cG9ydCBjb25zdCBUVVJCT19UUkFDRV9ERUZBVUxUX01FTU9SWV9MSU1JVCA9IDYwMDBcblxuZXhwb3J0IGNvbnN0IFJTQ19NT0RVTEVfVFlQRVMgPSB7XG4gIGNsaWVudDogJ2NsaWVudCcsXG4gIHNlcnZlcjogJ3NlcnZlcicsXG59IGFzIGNvbnN0XG5cbi8vIGNvbXBhcmluZ1xuLy8gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9lZGdlLXJ1bnRpbWVcbi8vIHdpdGhcbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9kb2NzL2xhdGVzdC9hcGkvZ2xvYmFscy5odG1sXG5leHBvcnQgY29uc3QgRURHRV9VTlNVUFBPUlRFRF9OT0RFX0FQSVMgPSBbXG4gICdjbGVhckltbWVkaWF0ZScsXG4gICdzZXRJbW1lZGlhdGUnLFxuICAnQnJvYWRjYXN0Q2hhbm5lbCcsXG4gICdCeXRlTGVuZ3RoUXVldWluZ1N0cmF0ZWd5JyxcbiAgJ0NvbXByZXNzaW9uU3RyZWFtJyxcbiAgJ0NvdW50UXVldWluZ1N0cmF0ZWd5JyxcbiAgJ0RlY29tcHJlc3Npb25TdHJlYW0nLFxuICAnRG9tRXhjZXB0aW9uJyxcbiAgJ01lc3NhZ2VDaGFubmVsJyxcbiAgJ01lc3NhZ2VFdmVudCcsXG4gICdNZXNzYWdlUG9ydCcsXG4gICdSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyJyxcbiAgJ1JlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QnLFxuICAnUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcicsXG4gICdUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcicsXG4gICdXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyJyxcbl1cblxuZXhwb3J0IGNvbnN0IFNZU1RFTV9FTlRSWVBPSU5UUyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gIENMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9NQUlOLFxuICBDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUkVBQ1RfUkVGUkVTSCxcbiAgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX0FNUCxcbiAgQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU5fQVBQLFxuXSlcbiJdLCJuYW1lcyI6WyJBUFBfQlVJTERfTUFOSUZFU1QiLCJBUFBfQ0xJRU5UX0lOVEVSTkFMUyIsIkFQUF9QQVRIU19NQU5JRkVTVCIsIkFQUF9QQVRIX1JPVVRFU19NQU5JRkVTVCIsIkJBUlJFTF9PUFRJTUlaQVRJT05fUFJFRklYIiwiQkxPQ0tFRF9QQUdFUyIsIkJVSUxEX0lEX0ZJTEUiLCJCVUlMRF9NQU5JRkVTVCIsIkNMSUVOVF9QVUJMSUNfRklMRVNfUEFUSCIsIkNMSUVOVF9SRUZFUkVOQ0VfTUFOSUZFU1QiLCJDTElFTlRfU1RBVElDX0ZJTEVTX1BBVEgiLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfQU1QIiwiQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX01BSU4iLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfTUFJTl9BUFAiLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUE9MWUZJTExTIiwiQ0xJRU5UX1NUQVRJQ19GSUxFU19SVU5USU1FX1BPTFlGSUxMU19TWU1CT0wiLCJDTElFTlRfU1RBVElDX0ZJTEVTX1JVTlRJTUVfUkVBQ1RfUkVGUkVTSCIsIkNMSUVOVF9TVEFUSUNfRklMRVNfUlVOVElNRV9XRUJQQUNLIiwiQ09NUElMRVJfSU5ERVhFUyIsIkNPTVBJTEVSX05BTUVTIiwiQ09ORklHX0ZJTEVTIiwiREVGQVVMVF9SVU5USU1FX1dFQlBBQ0siLCJERUZBVUxUX1NBTlNfU0VSSUZfRk9OVCIsIkRFRkFVTFRfU0VSSUZfRk9OVCIsIkRFVl9DTElFTlRfTUlERExFV0FSRV9NQU5JRkVTVCIsIkRFVl9DTElFTlRfUEFHRVNfTUFOSUZFU1QiLCJEWU5BTUlDX0NTU19NQU5JRkVTVCIsIkVER0VfUlVOVElNRV9XRUJQQUNLIiwiRURHRV9VTlNVUFBPUlRFRF9OT0RFX0FQSVMiLCJFWFBPUlRfREVUQUlMIiwiRVhQT1JUX01BUktFUiIsIkZVTkNUSU9OU19DT05GSUdfTUFOSUZFU1QiLCJJTUFHRVNfTUFOSUZFU1QiLCJJTlRFUkNFUFRJT05fUk9VVEVfUkVXUklURV9NQU5JRkVTVCIsIk1JRERMRVdBUkVfQlVJTERfTUFOSUZFU1QiLCJNSURETEVXQVJFX01BTklGRVNUIiwiTUlERExFV0FSRV9SRUFDVF9MT0FEQUJMRV9NQU5JRkVTVCIsIk1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUIiwiTkVYVF9CVUlMVElOX0RPQ1VNRU5UIiwiTkVYVF9GT05UX01BTklGRVNUIiwiUEFHRVNfTUFOSUZFU1QiLCJQSEFTRV9ERVZFTE9QTUVOVF9TRVJWRVIiLCJQSEFTRV9FWFBPUlQiLCJQSEFTRV9JTkZPIiwiUEhBU0VfUFJPRFVDVElPTl9CVUlMRCIsIlBIQVNFX1BST0RVQ1RJT05fU0VSVkVSIiwiUEhBU0VfVEVTVCIsIlBSRVJFTkRFUl9NQU5JRkVTVCIsIlJFQUNUX0xPQURBQkxFX01BTklGRVNUIiwiUk9VVEVTX01BTklGRVNUIiwiUlNDX01PRFVMRV9UWVBFUyIsIlNFUlZFUl9ESVJFQ1RPUlkiLCJTRVJWRVJfRklMRVNfTUFOSUZFU1QiLCJTRVJWRVJfUFJPUFNfSUQiLCJTRVJWRVJfUkVGRVJFTkNFX01BTklGRVNUIiwiU1RBVElDX1BST1BTX0lEIiwiU1RBVElDX1NUQVRVU19QQUdFUyIsIlNUUklOR19MSVRFUkFMX0RST1BfQlVORExFIiwiU1VCUkVTT1VSQ0VfSU5URUdSSVRZX01BTklGRVNUIiwiU1lTVEVNX0VOVFJZUE9JTlRTIiwiVFJBQ0VfT1VUUFVUX1ZFUlNJT04iLCJUVVJCT1BBQ0tfQ0xJRU5UX01JRERMRVdBUkVfTUFOSUZFU1QiLCJUVVJCT19UUkFDRV9ERUZBVUxUX01FTU9SWV9MSU1JVCIsIlVOREVSU0NPUkVfTk9UX0ZPVU5EX1JPVVRFIiwiVU5ERVJTQ09SRV9OT1RfRk9VTkRfUk9VVEVfRU5UUlkiLCJXRUJQQUNLX1NUQVRTIiwiY2xpZW50Iiwic2VydmVyIiwiZWRnZVNlcnZlciIsIlN5bWJvbCIsIm5hbWUiLCJ4QXZnQ2hhcldpZHRoIiwiYXpBdmdXaWR0aCIsInVuaXRzUGVyRW0iLCJTZXQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/constants.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/encode-uri-path.js":
/*!**********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/encode-uri-path.js ***!
  \**********************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"encodeURIPath\", ({\n    enumerable: true,\n    get: function() {\n        return encodeURIPath;\n    }\n}));\nfunction encodeURIPath(file) {\n    return file.split('/').map((p)=>encodeURIComponent(p)).join('/');\n} //# sourceMappingURL=encode-uri-path.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2VuY29kZS11cmktcGF0aC5qcyIsIm1hcHBpbmdzIjoiOzs7O2lEQUFnQkE7OztlQUFBQTs7O0FBQVQsU0FBU0EsY0FBY0MsSUFBWTtJQUN4QyxPQUFPQSxLQUNKQyxLQUFLLENBQUMsS0FDTkMsR0FBRyxDQUFDLENBQUNDLElBQU1DLG1CQUFtQkQsSUFDOUJFLElBQUksQ0FBQztBQUNWIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL3NyYy9zaGFyZWQvbGliL2VuY29kZS11cmktcGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZW5jb2RlVVJJUGF0aChmaWxlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGZpbGVcbiAgICAuc3BsaXQoJy8nKVxuICAgIC5tYXAoKHApID0+IGVuY29kZVVSSUNvbXBvbmVudChwKSlcbiAgICAuam9pbignLycpXG59XG4iXSwibmFtZXMiOlsiZW5jb2RlVVJJUGF0aCIsImZpbGUiLCJzcGxpdCIsIm1hcCIsInAiLCJlbmNvZGVVUklDb21wb25lbnQiLCJqb2luIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/encode-uri-path.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/error-source.js":
/*!*******************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/error-source.js ***!
  \*******************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    decorateServerError: function() {\n        return decorateServerError;\n    },\n    getErrorSource: function() {\n        return getErrorSource;\n    }\n});\nconst symbolError = Symbol.for('NextjsError');\nfunction getErrorSource(error) {\n    return error[symbolError] || null;\n}\nfunction decorateServerError(error, type) {\n    Object.defineProperty(error, symbolError, {\n        writable: false,\n        enumerable: false,\n        configurable: false,\n        value: type\n    });\n} //# sourceMappingURL=error-source.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2Vycm9yLXNvdXJjZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFRZ0JBLG1CQUFtQjtlQUFuQkE7O0lBTkFDLGNBQWM7ZUFBZEE7OztBQUZoQixNQUFNQyxjQUFjQyxPQUFPQyxHQUFHLENBQUM7QUFFeEIsU0FBU0gsZUFBZUksS0FBWTtJQUN6QyxPQUFRQSxLQUFhLENBQUNILFlBQVksSUFBSTtBQUN4QztBQUlPLFNBQVNGLG9CQUFvQkssS0FBWSxFQUFFQyxJQUFxQjtJQUNyRUMsT0FBT0MsY0FBYyxDQUFDSCxPQUFPSCxhQUFhO1FBQ3hDTyxVQUFVO1FBQ1ZDLFlBQVk7UUFDWkMsY0FBYztRQUNkQyxPQUFPTjtJQUNUO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL3NoYXJlZC9saWIvZXJyb3Itc291cmNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHN5bWJvbEVycm9yID0gU3ltYm9sLmZvcignTmV4dGpzRXJyb3InKVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXJyb3JTb3VyY2UoZXJyb3I6IEVycm9yKTogJ3NlcnZlcicgfCAnZWRnZS1zZXJ2ZXInIHwgbnVsbCB7XG4gIHJldHVybiAoZXJyb3IgYXMgYW55KVtzeW1ib2xFcnJvcl0gfHwgbnVsbFxufVxuXG5leHBvcnQgdHlwZSBFcnJvclNvdXJjZVR5cGUgPSAnZWRnZS1zZXJ2ZXInIHwgJ3NlcnZlcidcblxuZXhwb3J0IGZ1bmN0aW9uIGRlY29yYXRlU2VydmVyRXJyb3IoZXJyb3I6IEVycm9yLCB0eXBlOiBFcnJvclNvdXJjZVR5cGUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCBzeW1ib2xFcnJvciwge1xuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiB0eXBlLFxuICB9KVxufVxuIl0sIm5hbWVzIjpbImRlY29yYXRlU2VydmVyRXJyb3IiLCJnZXRFcnJvclNvdXJjZSIsInN5bWJvbEVycm9yIiwiU3ltYm9sIiwiZm9yIiwiZXJyb3IiLCJ0eXBlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ3cml0YWJsZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ2YWx1ZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/error-source.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/errors/constants.js":
/*!***********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/errors/constants.js ***!
  \***********************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"MISSING_ROOT_TAGS_ERROR\", ({\n    enumerable: true,\n    get: function() {\n        return MISSING_ROOT_TAGS_ERROR;\n    }\n}));\nconst MISSING_ROOT_TAGS_ERROR = 'NEXT_MISSING_ROOT_TAGS';\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n    Object.defineProperty(exports.default, '__esModule', {\n        value: true\n    });\n    Object.assign(exports.default, exports);\n    module.exports = exports.default;\n} //# sourceMappingURL=constants.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2Vycm9ycy9jb25zdGFudHMuanMiLCJtYXBwaW5ncyI6Ijs7OzsyREFBYUE7OztlQUFBQTs7O0FBQU4sTUFBTUEsMEJBQTBCIiwic291cmNlcyI6WyIvaG9tZS9zcmMvc2hhcmVkL2xpYi9lcnJvcnMvY29uc3RhbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBNSVNTSU5HX1JPT1RfVEFHU19FUlJPUiA9ICdORVhUX01JU1NJTkdfUk9PVF9UQUdTJ1xuIl0sIm5hbWVzIjpbIk1JU1NJTkdfUk9PVF9UQUdTX0VSUk9SIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/errors/constants.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/escape-regexp.js":
/*!********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/escape-regexp.js ***!
  \********************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("// regexp is based on https://github.com/sindresorhus/escape-string-regexp\n\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"escapeStringRegexp\", ({\n    enumerable: true,\n    get: function() {\n        return escapeStringRegexp;\n    }\n}));\nconst reHasRegExp = /[|\\\\{}()[\\]^$+*?.-]/;\nconst reReplaceRegExp = /[|\\\\{}()[\\]^$+*?.-]/g;\nfunction escapeStringRegexp(str) {\n    // see also: https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/escapeRegExp.js#L23\n    if (reHasRegExp.test(str)) {\n        return str.replace(reReplaceRegExp, '\\\\$&');\n    }\n    return str;\n} //# sourceMappingURL=escape-regexp.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2VzY2FwZS1yZWdleHAuanMiLCJtYXBwaW5ncyI6IkFBQUEsMEVBQTBFOzs7OztzREFJMURBOzs7ZUFBQUE7OztBQUhoQixNQUFNQyxjQUFjO0FBQ3BCLE1BQU1DLGtCQUFrQjtBQUVqQixTQUFTRixtQkFBbUJHLEdBQVc7SUFDNUMsK0dBQStHO0lBQy9HLElBQUlGLFlBQVlHLElBQUksQ0FBQ0QsTUFBTTtRQUN6QixPQUFPQSxJQUFJRSxPQUFPLENBQUNILGlCQUFpQjtJQUN0QztJQUNBLE9BQU9DO0FBQ1QiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL3NoYXJlZC9saWIvZXNjYXBlLXJlZ2V4cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyByZWdleHAgaXMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9lc2NhcGUtc3RyaW5nLXJlZ2V4cFxuY29uc3QgcmVIYXNSZWdFeHAgPSAvW3xcXFxce30oKVtcXF1eJCsqPy4tXS9cbmNvbnN0IHJlUmVwbGFjZVJlZ0V4cCA9IC9bfFxcXFx7fSgpW1xcXV4kKyo/Li1dL2dcblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVN0cmluZ1JlZ2V4cChzdHI6IHN0cmluZykge1xuICAvLyBzZWUgYWxzbzogaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi8yZGEwMjRjM2I0Zjk5NDdhNDg1MTc2MzlkZTc1NjA0NTdjZDRlYzZjL2VzY2FwZVJlZ0V4cC5qcyNMMjNcbiAgaWYgKHJlSGFzUmVnRXhwLnRlc3Qoc3RyKSkge1xuICAgIHJldHVybiBzdHIucmVwbGFjZShyZVJlcGxhY2VSZWdFeHAsICdcXFxcJCYnKVxuICB9XG4gIHJldHVybiBzdHJcbn1cbiJdLCJuYW1lcyI6WyJlc2NhcGVTdHJpbmdSZWdleHAiLCJyZUhhc1JlZ0V4cCIsInJlUmVwbGFjZVJlZ0V4cCIsInN0ciIsInRlc3QiLCJyZXBsYWNlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/escape-regexp.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/format-webpack-messages.js":
/*!******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/format-webpack-messages.js ***!
  \******************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/**\nMIT License\n\nCopyright (c) 2015-present, Facebook, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n    enumerable: true,\n    get: function() {\n        return formatWebpackMessages;\n    }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _stripansi = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/compiled/strip-ansi */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/strip-ansi/index.js\"));\n// This file is based on https://github.com/facebook/create-react-app/blob/7b1a32be6ec9f99a6c9a3c66813f3ac09c4736b9/packages/react-dev-utils/formatWebpackMessages.js\n// It's been edited to remove chalk and CRA-specific logic\nconst friendlySyntaxErrorLabel = 'Syntax error:';\nconst WEBPACK_BREAKING_CHANGE_POLYFILLS = '\\n\\nBREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.';\nfunction isLikelyASyntaxError(message) {\n    return (0, _stripansi.default)(message).includes(friendlySyntaxErrorLabel);\n}\nlet hadMissingSassError = false;\n// Cleans up webpack error messages.\nfunction formatMessage(message, verbose, importTraceNote) {\n    // TODO: Replace this once webpack 5 is stable\n    if (typeof message === 'object' && message.message) {\n        const filteredModuleTrace = message.moduleTrace && message.moduleTrace.filter((trace)=>!/next-(middleware|client-pages|route|edge-function)-loader\\.js/.test(trace.originName));\n        let body = message.message;\n        const breakingChangeIndex = body.indexOf(WEBPACK_BREAKING_CHANGE_POLYFILLS);\n        if (breakingChangeIndex >= 0) {\n            body = body.slice(0, breakingChangeIndex);\n        }\n        message = (message.moduleName ? (0, _stripansi.default)(message.moduleName) + '\\n' : '') + (message.file ? (0, _stripansi.default)(message.file) + '\\n' : '') + body + (message.details && verbose ? '\\n' + message.details : '') + (filteredModuleTrace && filteredModuleTrace.length ? (importTraceNote || '\\n\\nImport trace for requested module:') + filteredModuleTrace.map((trace)=>\"\\n\" + trace.moduleName).join('') : '') + (message.stack && verbose ? '\\n' + message.stack : '');\n    }\n    let lines = message.split('\\n');\n    // Strip Webpack-added headers off errors/warnings\n    // https://github.com/webpack/webpack/blob/master/lib/ModuleError.js\n    lines = lines.filter((line)=>!/Module [A-z ]+\\(from/.test(line));\n    // Transform parsing error into syntax error\n    // TODO: move this to our ESLint formatter?\n    lines = lines.map((line)=>{\n        const parsingError = /Line (\\d+):(?:(\\d+):)?\\s*Parsing error: (.+)$/.exec(line);\n        if (!parsingError) {\n            return line;\n        }\n        const [, errorLine, errorColumn, errorMessage] = parsingError;\n        return friendlySyntaxErrorLabel + \" \" + errorMessage + \" (\" + errorLine + \":\" + errorColumn + \")\";\n    });\n    message = lines.join('\\n');\n    // Smoosh syntax errors (commonly found in CSS)\n    message = message.replace(/SyntaxError\\s+\\((\\d+):(\\d+)\\)\\s*(.+?)\\n/g, \"\" + friendlySyntaxErrorLabel + \" $3 ($1:$2)\\n\");\n    // Clean up export errors\n    message = message.replace(/^.*export '(.+?)' was not found in '(.+?)'.*$/gm, \"Attempted import error: '$1' is not exported from '$2'.\");\n    message = message.replace(/^.*export 'default' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm, \"Attempted import error: '$2' does not contain a default export (imported as '$1').\");\n    message = message.replace(/^.*export '(.+?)' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm, \"Attempted import error: '$1' is not exported from '$3' (imported as '$2').\");\n    lines = message.split('\\n');\n    // Remove leading newline\n    if (lines.length > 2 && lines[1].trim() === '') {\n        lines.splice(1, 1);\n    }\n    // Cleans up verbose \"module not found\" messages for files and packages.\n    if (lines[1] && lines[1].startsWith('Module not found: ')) {\n        lines = [\n            lines[0],\n            lines[1].replace('Error: ', '').replace('Module not found: Cannot find file:', 'Cannot find file:'),\n            ...lines.slice(2)\n        ];\n    }\n    // Add helpful message for users trying to use Sass for the first time\n    if (lines[1] && lines[1].match(/Cannot find module.+sass/)) {\n        // ./file.module.scss (<<loader info>>) => ./file.module.scss\n        const firstLine = lines[0].split('!');\n        lines[0] = firstLine[firstLine.length - 1];\n        lines[1] = \"To use Next.js' built-in Sass support, you first need to install `sass`.\\n\";\n        lines[1] += 'Run `npm i sass` or `yarn add sass` inside your workspace.\\n';\n        lines[1] += '\\nLearn more: https://nextjs.org/docs/messages/install-sass';\n        // dispose of unhelpful stack trace\n        lines = lines.slice(0, 2);\n        hadMissingSassError = true;\n    } else if (hadMissingSassError && message.match(/(sass-loader|resolve-url-loader: CSS error)/)) {\n        // dispose of unhelpful stack trace following missing sass module\n        lines = [];\n    }\n    if (!verbose) {\n        message = lines.join('\\n');\n        // Internal stacks are generally useless so we strip them... with the\n        // exception of stacks containing `webpack:` because they're normally\n        // from user code generated by Webpack. For more information see\n        // https://github.com/facebook/create-react-app/pull/1050\n        message = message.replace(/^\\s*at\\s((?!webpack:).)*:\\d+:\\d+[\\s)]*(\\n|$)/gm, '') // at ... ...:x:y\n        ;\n        message = message.replace(/^\\s*at\\s<anonymous>(\\n|$)/gm, '') // at <anonymous>\n        ;\n        message = message.replace(/File was processed with these loaders:\\n(.+[\\\\/](next[\\\\/]dist[\\\\/].+|@next[\\\\/]react-refresh-utils[\\\\/]loader)\\.js\\n)*You may need an additional loader to handle the result of these loaders.\\n/g, '');\n        lines = message.split('\\n');\n    }\n    // Remove duplicated newlines\n    lines = lines.filter((line, index, arr)=>index === 0 || line.trim() !== '' || line.trim() !== arr[index - 1].trim());\n    // Reassemble the message\n    message = lines.join('\\n');\n    return message.trim();\n}\nfunction formatWebpackMessages(json, verbose) {\n    const formattedErrors = json.errors.map((message)=>{\n        const isUnknownNextFontError = message.message.includes('An error occurred in `next/font`.');\n        return formatMessage(message, isUnknownNextFontError || verbose);\n    });\n    const formattedWarnings = json.warnings.map((message)=>{\n        return formatMessage(message, verbose);\n    });\n    // Reorder errors to put the most relevant ones first.\n    let reactServerComponentsError = -1;\n    for(let i = 0; i < formattedErrors.length; i++){\n        const error = formattedErrors[i];\n        if (error.includes('ReactServerComponentsError')) {\n            reactServerComponentsError = i;\n            break;\n        }\n    }\n    // Move the reactServerComponentsError to the top if it exists\n    if (reactServerComponentsError !== -1) {\n        const error = formattedErrors.splice(reactServerComponentsError, 1);\n        formattedErrors.unshift(error[0]);\n    }\n    const result = {\n        ...json,\n        errors: formattedErrors,\n        warnings: formattedWarnings\n    };\n    if (!verbose && result.errors.some(isLikelyASyntaxError)) {\n        // If there are any syntax errors, show just them.\n        result.errors = result.errors.filter(isLikelyASyntaxError);\n        result.warnings = [];\n    }\n    return result;\n} //# sourceMappingURL=format-webpack-messages.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2Zvcm1hdC13ZWJwYWNrLW1lc3NhZ2VzLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JBOzs7OzJDQWlLQTs7O2VBQXdCQTs7OztnRkFoS0Y7QUFDdEIscUtBQXFLO0FBQ3JLLDBEQUEwRDtBQUUxRCxNQUFNQywyQkFBMkI7QUFFakMsTUFBTUMsb0NBQ0o7QUFFRixTQUFTQyxxQkFBcUJDLE9BQWU7SUFDM0MsT0FBT0MsQ0FBQUEsR0FBQUEsV0FBQUEsT0FBQUEsRUFBVUQsU0FBU0UsUUFBUSxDQUFDTDtBQUNyQztBQUVBLElBQUlNLHNCQUFzQjtBQUUxQixvQ0FBb0M7QUFDcEMsU0FBU0MsY0FDUEosT0FBWSxFQUNaSyxPQUFpQixFQUNqQkMsZUFBeUI7SUFFekIsOENBQThDO0lBQzlDLElBQUksT0FBT04sWUFBWSxZQUFZQSxRQUFRQSxPQUFPLEVBQUU7UUFDbEQsTUFBTU8sc0JBQ0pQLFFBQVFRLFdBQVcsSUFDbkJSLFFBQVFRLFdBQVcsQ0FBQ0MsTUFBTSxDQUN4QixDQUFDQyxRQUNDLENBQUMsZ0VBQWdFQyxJQUFJLENBQ25FRCxNQUFNRSxVQUFVO1FBSXhCLElBQUlDLE9BQU9iLFFBQVFBLE9BQU87UUFDMUIsTUFBTWMsc0JBQXNCRCxLQUFLRSxPQUFPLENBQUNqQjtRQUN6QyxJQUFJZ0IsdUJBQXVCLEdBQUc7WUFDNUJELE9BQU9BLEtBQUtHLEtBQUssQ0FBQyxHQUFHRjtRQUN2QjtRQUVBZCxVQUNHQSxDQUFBQSxRQUFRaUIsVUFBVSxHQUFHaEIsQ0FBQUEsR0FBQUEsV0FBQUEsT0FBQUEsRUFBVUQsUUFBUWlCLFVBQVUsSUFBSSxPQUFPLEdBQUMsR0FDN0RqQixDQUFBQSxRQUFRa0IsSUFBSSxHQUFHakIsQ0FBQUEsR0FBQUEsV0FBQUEsT0FBQUEsRUFBVUQsUUFBUWtCLElBQUksSUFBSSxPQUFPLEdBQUMsR0FDbERMLE9BQ0NiLENBQUFBLFFBQVFtQixPQUFPLElBQUlkLFVBQVUsT0FBT0wsUUFBUW1CLE9BQU8sR0FBRyxHQUFDLElBQ3ZEWix1QkFBdUJBLG9CQUFvQmEsTUFBTSxHQUM3Q2QsQ0FBQUEsbUJBQW1CLHlDQUF1QyxHQUMzREMsb0JBQ0djLEdBQUcsQ0FBQyxDQUFDWCxRQUFnQixPQUFJQSxNQUFNTyxVQUFVLEVBQ3pDSyxJQUFJLENBQUMsTUFDUixHQUFDLElBQ0p0QixRQUFRdUIsS0FBSyxJQUFJbEIsVUFBVSxPQUFPTCxRQUFRdUIsS0FBSyxHQUFHLEdBQUM7SUFDeEQ7SUFDQSxJQUFJQyxRQUFReEIsUUFBUXlCLEtBQUssQ0FBQztJQUUxQixrREFBa0Q7SUFDbEQsb0VBQW9FO0lBQ3BFRCxRQUFRQSxNQUFNZixNQUFNLENBQUMsQ0FBQ2lCLE9BQWlCLENBQUMsdUJBQXVCZixJQUFJLENBQUNlO0lBRXBFLDRDQUE0QztJQUM1QywyQ0FBMkM7SUFDM0NGLFFBQVFBLE1BQU1ILEdBQUcsQ0FBQyxDQUFDSztRQUNqQixNQUFNQyxlQUFlLGdEQUFnREMsSUFBSSxDQUN2RUY7UUFFRixJQUFJLENBQUNDLGNBQWM7WUFDakIsT0FBT0Q7UUFDVDtRQUNBLE1BQU0sR0FBR0csV0FBV0MsYUFBYUMsYUFBYSxHQUFHSjtRQUNqRCxPQUFVOUIsMkJBQXlCLE1BQUdrQyxlQUFhLE9BQUlGLFlBQVUsTUFBR0MsY0FBWTtJQUNsRjtJQUVBOUIsVUFBVXdCLE1BQU1GLElBQUksQ0FBQztJQUNyQiwrQ0FBK0M7SUFDL0N0QixVQUFVQSxRQUFRZ0MsT0FBTyxDQUN2Qiw0Q0FDQyxLQUFFbkMsMkJBQXlCO0lBRTlCLHlCQUF5QjtJQUN6QkcsVUFBVUEsUUFBUWdDLE9BQU8sQ0FDdkIsbURBQ0M7SUFFSGhDLFVBQVVBLFFBQVFnQyxPQUFPLENBQ3ZCLDZFQUNDO0lBRUhoQyxVQUFVQSxRQUFRZ0MsT0FBTyxDQUN2QiwyRUFDQztJQUVIUixRQUFReEIsUUFBUXlCLEtBQUssQ0FBQztJQUV0Qix5QkFBeUI7SUFDekIsSUFBSUQsTUFBTUosTUFBTSxHQUFHLEtBQUtJLEtBQUssQ0FBQyxFQUFFLENBQUNTLElBQUksT0FBTyxJQUFJO1FBQzlDVCxNQUFNVSxNQUFNLENBQUMsR0FBRztJQUNsQjtJQUVBLHdFQUF3RTtJQUN4RSxJQUFJVixLQUFLLENBQUMsRUFBRSxJQUFJQSxLQUFLLENBQUMsRUFBRSxDQUFDVyxVQUFVLENBQUMsdUJBQXVCO1FBQ3pEWCxRQUFRO1lBQ05BLEtBQUssQ0FBQyxFQUFFO1lBQ1JBLEtBQUssQ0FBQyxFQUFFLENBQ0xRLE9BQU8sQ0FBQyxXQUFXLElBQ25CQSxPQUFPLENBQUMsdUNBQXVDO2VBQy9DUixNQUFNUixLQUFLLENBQUM7U0FDaEI7SUFDSDtJQUVBLHNFQUFzRTtJQUN0RSxJQUFJUSxLQUFLLENBQUMsRUFBRSxJQUFJQSxLQUFLLENBQUMsRUFBRSxDQUFDWSxLQUFLLENBQUMsNkJBQTZCO1FBQzFELDZEQUE2RDtRQUM3RCxNQUFNQyxZQUFZYixLQUFLLENBQUMsRUFBRSxDQUFDQyxLQUFLLENBQUM7UUFDakNELEtBQUssQ0FBQyxFQUFFLEdBQUdhLFNBQVMsQ0FBQ0EsVUFBVWpCLE1BQU0sR0FBRyxFQUFFO1FBRTFDSSxLQUFLLENBQUMsRUFBRSxHQUNOO1FBQ0ZBLEtBQUssQ0FBQyxFQUFFLElBQUk7UUFDWkEsS0FBSyxDQUFDLEVBQUUsSUFBSTtRQUVaLG1DQUFtQztRQUNuQ0EsUUFBUUEsTUFBTVIsS0FBSyxDQUFDLEdBQUc7UUFDdkJiLHNCQUFzQjtJQUN4QixPQUFPLElBQ0xBLHVCQUNBSCxRQUFRb0MsS0FBSyxDQUFDLGdEQUNkO1FBQ0EsaUVBQWlFO1FBQ2pFWixRQUFRLEVBQUU7SUFDWjtJQUVBLElBQUksQ0FBQ25CLFNBQVM7UUFDWkwsVUFBVXdCLE1BQU1GLElBQUksQ0FBQztRQUNyQixxRUFBcUU7UUFDckUscUVBQXFFO1FBQ3JFLGdFQUFnRTtRQUNoRSx5REFBeUQ7UUFDekR0QixVQUFVQSxRQUFRZ0MsT0FBTyxDQUN2QixrREFDQSxJQUNBLGlCQUFpQjs7UUFDbkJoQyxVQUFVQSxRQUFRZ0MsT0FBTyxDQUFDLCtCQUErQixJQUFJLGlCQUFpQjs7UUFFOUVoQyxVQUFVQSxRQUFRZ0MsT0FBTyxDQUN2QixzTUFDQTtRQUdGUixRQUFReEIsUUFBUXlCLEtBQUssQ0FBQztJQUN4QjtJQUVBLDZCQUE2QjtJQUM3QkQsUUFBU0EsTUFBbUJmLE1BQU0sQ0FDaEMsQ0FBQ2lCLE1BQU1ZLE9BQU9DLE1BQ1pELFVBQVUsS0FBS1osS0FBS08sSUFBSSxPQUFPLE1BQU1QLEtBQUtPLElBQUksT0FBT00sR0FBRyxDQUFDRCxRQUFRLEVBQUUsQ0FBQ0wsSUFBSTtJQUc1RSx5QkFBeUI7SUFDekJqQyxVQUFVd0IsTUFBTUYsSUFBSSxDQUFDO0lBQ3JCLE9BQU90QixRQUFRaUMsSUFBSTtBQUNyQjtBQUVlLFNBQVNyQyxzQkFBc0I0QyxJQUFTLEVBQUVuQyxPQUFpQjtJQUN4RSxNQUFNb0Msa0JBQWtCRCxLQUFLRSxNQUFNLENBQUNyQixHQUFHLENBQUMsQ0FBQ3JCO1FBQ3ZDLE1BQU0yQyx5QkFBeUIzQyxRQUFRQSxPQUFPLENBQUNFLFFBQVEsQ0FDckQ7UUFFRixPQUFPRSxjQUFjSixTQUFTMkMsMEJBQTBCdEM7SUFDMUQ7SUFDQSxNQUFNdUMsb0JBQW9CSixLQUFLSyxRQUFRLENBQUN4QixHQUFHLENBQUMsQ0FBQ3JCO1FBQzNDLE9BQU9JLGNBQWNKLFNBQVNLO0lBQ2hDO0lBRUEsc0RBQXNEO0lBQ3RELElBQUl5Qyw2QkFBNkIsQ0FBQztJQUVsQyxJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSU4sZ0JBQWdCckIsTUFBTSxFQUFFMkIsSUFBSztRQUMvQyxNQUFNQyxRQUFRUCxlQUFlLENBQUNNLEVBQUU7UUFDaEMsSUFBSUMsTUFBTTlDLFFBQVEsQ0FBQywrQkFBK0I7WUFDaEQ0Qyw2QkFBNkJDO1lBQzdCO1FBQ0Y7SUFDRjtJQUVBLDhEQUE4RDtJQUM5RCxJQUFJRCwrQkFBK0IsQ0FBQyxHQUFHO1FBQ3JDLE1BQU1FLFFBQVFQLGdCQUFnQlAsTUFBTSxDQUFDWSw0QkFBNEI7UUFDakVMLGdCQUFnQlEsT0FBTyxDQUFDRCxLQUFLLENBQUMsRUFBRTtJQUNsQztJQUVBLE1BQU1FLFNBQVM7UUFDYixHQUFHVixJQUFJO1FBQ1BFLFFBQVFEO1FBQ1JJLFVBQVVEO0lBQ1o7SUFDQSxJQUFJLENBQUN2QyxXQUFXNkMsT0FBT1IsTUFBTSxDQUFDUyxJQUFJLENBQUNwRCx1QkFBdUI7UUFDeEQsa0RBQWtEO1FBQ2xEbUQsT0FBT1IsTUFBTSxHQUFHUSxPQUFPUixNQUFNLENBQUNqQyxNQUFNLENBQUNWO1FBQ3JDbUQsT0FBT0wsUUFBUSxHQUFHLEVBQUU7SUFDdEI7SUFDQSxPQUFPSztBQUNUIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL3NyYy9zaGFyZWQvbGliL2Zvcm1hdC13ZWJwYWNrLW1lc3NhZ2VzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuTUlUIExpY2Vuc2VcblxuQ29weXJpZ2h0IChjKSAyMDE1LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG5jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG5JTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5TT0ZUV0FSRS5cbiovXG5pbXBvcnQgc3RyaXBBbnNpIGZyb20gJ25leHQvZGlzdC9jb21waWxlZC9zdHJpcC1hbnNpJ1xuLy8gVGhpcyBmaWxlIGlzIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9jcmVhdGUtcmVhY3QtYXBwL2Jsb2IvN2IxYTMyYmU2ZWM5Zjk5YTZjOWEzYzY2ODEzZjNhYzA5YzQ3MzZiOS9wYWNrYWdlcy9yZWFjdC1kZXYtdXRpbHMvZm9ybWF0V2VicGFja01lc3NhZ2VzLmpzXG4vLyBJdCdzIGJlZW4gZWRpdGVkIHRvIHJlbW92ZSBjaGFsayBhbmQgQ1JBLXNwZWNpZmljIGxvZ2ljXG5cbmNvbnN0IGZyaWVuZGx5U3ludGF4RXJyb3JMYWJlbCA9ICdTeW50YXggZXJyb3I6J1xuXG5jb25zdCBXRUJQQUNLX0JSRUFLSU5HX0NIQU5HRV9QT0xZRklMTFMgPVxuICAnXFxuXFxuQlJFQUtJTkcgQ0hBTkdFOiB3ZWJwYWNrIDwgNSB1c2VkIHRvIGluY2x1ZGUgcG9seWZpbGxzIGZvciBub2RlLmpzIGNvcmUgbW9kdWxlcyBieSBkZWZhdWx0LidcblxuZnVuY3Rpb24gaXNMaWtlbHlBU3ludGF4RXJyb3IobWVzc2FnZTogc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpcEFuc2kobWVzc2FnZSkuaW5jbHVkZXMoZnJpZW5kbHlTeW50YXhFcnJvckxhYmVsKVxufVxuXG5sZXQgaGFkTWlzc2luZ1Nhc3NFcnJvciA9IGZhbHNlXG5cbi8vIENsZWFucyB1cCB3ZWJwYWNrIGVycm9yIG1lc3NhZ2VzLlxuZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShcbiAgbWVzc2FnZTogYW55LFxuICB2ZXJib3NlPzogYm9vbGVhbixcbiAgaW1wb3J0VHJhY2VOb3RlPzogYm9vbGVhblxuKSB7XG4gIC8vIFRPRE86IFJlcGxhY2UgdGhpcyBvbmNlIHdlYnBhY2sgNSBpcyBzdGFibGVcbiAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnb2JqZWN0JyAmJiBtZXNzYWdlLm1lc3NhZ2UpIHtcbiAgICBjb25zdCBmaWx0ZXJlZE1vZHVsZVRyYWNlID1cbiAgICAgIG1lc3NhZ2UubW9kdWxlVHJhY2UgJiZcbiAgICAgIG1lc3NhZ2UubW9kdWxlVHJhY2UuZmlsdGVyKFxuICAgICAgICAodHJhY2U6IGFueSkgPT5cbiAgICAgICAgICAhL25leHQtKG1pZGRsZXdhcmV8Y2xpZW50LXBhZ2VzfHJvdXRlfGVkZ2UtZnVuY3Rpb24pLWxvYWRlclxcLmpzLy50ZXN0KFxuICAgICAgICAgICAgdHJhY2Uub3JpZ2luTmFtZVxuICAgICAgICAgIClcbiAgICAgIClcblxuICAgIGxldCBib2R5ID0gbWVzc2FnZS5tZXNzYWdlXG4gICAgY29uc3QgYnJlYWtpbmdDaGFuZ2VJbmRleCA9IGJvZHkuaW5kZXhPZihXRUJQQUNLX0JSRUFLSU5HX0NIQU5HRV9QT0xZRklMTFMpXG4gICAgaWYgKGJyZWFraW5nQ2hhbmdlSW5kZXggPj0gMCkge1xuICAgICAgYm9keSA9IGJvZHkuc2xpY2UoMCwgYnJlYWtpbmdDaGFuZ2VJbmRleClcbiAgICB9XG5cbiAgICBtZXNzYWdlID1cbiAgICAgIChtZXNzYWdlLm1vZHVsZU5hbWUgPyBzdHJpcEFuc2kobWVzc2FnZS5tb2R1bGVOYW1lKSArICdcXG4nIDogJycpICtcbiAgICAgIChtZXNzYWdlLmZpbGUgPyBzdHJpcEFuc2kobWVzc2FnZS5maWxlKSArICdcXG4nIDogJycpICtcbiAgICAgIGJvZHkgK1xuICAgICAgKG1lc3NhZ2UuZGV0YWlscyAmJiB2ZXJib3NlID8gJ1xcbicgKyBtZXNzYWdlLmRldGFpbHMgOiAnJykgK1xuICAgICAgKGZpbHRlcmVkTW9kdWxlVHJhY2UgJiYgZmlsdGVyZWRNb2R1bGVUcmFjZS5sZW5ndGhcbiAgICAgICAgPyAoaW1wb3J0VHJhY2VOb3RlIHx8ICdcXG5cXG5JbXBvcnQgdHJhY2UgZm9yIHJlcXVlc3RlZCBtb2R1bGU6JykgK1xuICAgICAgICAgIGZpbHRlcmVkTW9kdWxlVHJhY2VcbiAgICAgICAgICAgIC5tYXAoKHRyYWNlOiBhbnkpID0+IGBcXG4ke3RyYWNlLm1vZHVsZU5hbWV9YClcbiAgICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICA6ICcnKSArXG4gICAgICAobWVzc2FnZS5zdGFjayAmJiB2ZXJib3NlID8gJ1xcbicgKyBtZXNzYWdlLnN0YWNrIDogJycpXG4gIH1cbiAgbGV0IGxpbmVzID0gbWVzc2FnZS5zcGxpdCgnXFxuJylcblxuICAvLyBTdHJpcCBXZWJwYWNrLWFkZGVkIGhlYWRlcnMgb2ZmIGVycm9ycy93YXJuaW5nc1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay93ZWJwYWNrL2Jsb2IvbWFzdGVyL2xpYi9Nb2R1bGVFcnJvci5qc1xuICBsaW5lcyA9IGxpbmVzLmZpbHRlcigobGluZTogc3RyaW5nKSA9PiAhL01vZHVsZSBbQS16IF0rXFwoZnJvbS8udGVzdChsaW5lKSlcblxuICAvLyBUcmFuc2Zvcm0gcGFyc2luZyBlcnJvciBpbnRvIHN5bnRheCBlcnJvclxuICAvLyBUT0RPOiBtb3ZlIHRoaXMgdG8gb3VyIEVTTGludCBmb3JtYXR0ZXI/XG4gIGxpbmVzID0gbGluZXMubWFwKChsaW5lOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBwYXJzaW5nRXJyb3IgPSAvTGluZSAoXFxkKyk6KD86KFxcZCspOik/XFxzKlBhcnNpbmcgZXJyb3I6ICguKykkLy5leGVjKFxuICAgICAgbGluZVxuICAgIClcbiAgICBpZiAoIXBhcnNpbmdFcnJvcikge1xuICAgICAgcmV0dXJuIGxpbmVcbiAgICB9XG4gICAgY29uc3QgWywgZXJyb3JMaW5lLCBlcnJvckNvbHVtbiwgZXJyb3JNZXNzYWdlXSA9IHBhcnNpbmdFcnJvclxuICAgIHJldHVybiBgJHtmcmllbmRseVN5bnRheEVycm9yTGFiZWx9ICR7ZXJyb3JNZXNzYWdlfSAoJHtlcnJvckxpbmV9OiR7ZXJyb3JDb2x1bW59KWBcbiAgfSlcblxuICBtZXNzYWdlID0gbGluZXMuam9pbignXFxuJylcbiAgLy8gU21vb3NoIHN5bnRheCBlcnJvcnMgKGNvbW1vbmx5IGZvdW5kIGluIENTUylcbiAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZShcbiAgICAvU3ludGF4RXJyb3JcXHMrXFwoKFxcZCspOihcXGQrKVxcKVxccyooLis/KVxcbi9nLFxuICAgIGAke2ZyaWVuZGx5U3ludGF4RXJyb3JMYWJlbH0gJDMgKCQxOiQyKVxcbmBcbiAgKVxuICAvLyBDbGVhbiB1cCBleHBvcnQgZXJyb3JzXG4gIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoXG4gICAgL14uKmV4cG9ydCAnKC4rPyknIHdhcyBub3QgZm91bmQgaW4gJyguKz8pJy4qJC9nbSxcbiAgICBgQXR0ZW1wdGVkIGltcG9ydCBlcnJvcjogJyQxJyBpcyBub3QgZXhwb3J0ZWQgZnJvbSAnJDInLmBcbiAgKVxuICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKFxuICAgIC9eLipleHBvcnQgJ2RlZmF1bHQnIFxcKGltcG9ydGVkIGFzICcoLis/KSdcXCkgd2FzIG5vdCBmb3VuZCBpbiAnKC4rPyknLiokL2dtLFxuICAgIGBBdHRlbXB0ZWQgaW1wb3J0IGVycm9yOiAnJDInIGRvZXMgbm90IGNvbnRhaW4gYSBkZWZhdWx0IGV4cG9ydCAoaW1wb3J0ZWQgYXMgJyQxJykuYFxuICApXG4gIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoXG4gICAgL14uKmV4cG9ydCAnKC4rPyknIFxcKGltcG9ydGVkIGFzICcoLis/KSdcXCkgd2FzIG5vdCBmb3VuZCBpbiAnKC4rPyknLiokL2dtLFxuICAgIGBBdHRlbXB0ZWQgaW1wb3J0IGVycm9yOiAnJDEnIGlzIG5vdCBleHBvcnRlZCBmcm9tICckMycgKGltcG9ydGVkIGFzICckMicpLmBcbiAgKVxuICBsaW5lcyA9IG1lc3NhZ2Uuc3BsaXQoJ1xcbicpXG5cbiAgLy8gUmVtb3ZlIGxlYWRpbmcgbmV3bGluZVxuICBpZiAobGluZXMubGVuZ3RoID4gMiAmJiBsaW5lc1sxXS50cmltKCkgPT09ICcnKSB7XG4gICAgbGluZXMuc3BsaWNlKDEsIDEpXG4gIH1cblxuICAvLyBDbGVhbnMgdXAgdmVyYm9zZSBcIm1vZHVsZSBub3QgZm91bmRcIiBtZXNzYWdlcyBmb3IgZmlsZXMgYW5kIHBhY2thZ2VzLlxuICBpZiAobGluZXNbMV0gJiYgbGluZXNbMV0uc3RhcnRzV2l0aCgnTW9kdWxlIG5vdCBmb3VuZDogJykpIHtcbiAgICBsaW5lcyA9IFtcbiAgICAgIGxpbmVzWzBdLFxuICAgICAgbGluZXNbMV1cbiAgICAgICAgLnJlcGxhY2UoJ0Vycm9yOiAnLCAnJylcbiAgICAgICAgLnJlcGxhY2UoJ01vZHVsZSBub3QgZm91bmQ6IENhbm5vdCBmaW5kIGZpbGU6JywgJ0Nhbm5vdCBmaW5kIGZpbGU6JyksXG4gICAgICAuLi5saW5lcy5zbGljZSgyKSxcbiAgICBdXG4gIH1cblxuICAvLyBBZGQgaGVscGZ1bCBtZXNzYWdlIGZvciB1c2VycyB0cnlpbmcgdG8gdXNlIFNhc3MgZm9yIHRoZSBmaXJzdCB0aW1lXG4gIGlmIChsaW5lc1sxXSAmJiBsaW5lc1sxXS5tYXRjaCgvQ2Fubm90IGZpbmQgbW9kdWxlLitzYXNzLykpIHtcbiAgICAvLyAuL2ZpbGUubW9kdWxlLnNjc3MgKDw8bG9hZGVyIGluZm8+PikgPT4gLi9maWxlLm1vZHVsZS5zY3NzXG4gICAgY29uc3QgZmlyc3RMaW5lID0gbGluZXNbMF0uc3BsaXQoJyEnKVxuICAgIGxpbmVzWzBdID0gZmlyc3RMaW5lW2ZpcnN0TGluZS5sZW5ndGggLSAxXVxuXG4gICAgbGluZXNbMV0gPVxuICAgICAgXCJUbyB1c2UgTmV4dC5qcycgYnVpbHQtaW4gU2FzcyBzdXBwb3J0LCB5b3UgZmlyc3QgbmVlZCB0byBpbnN0YWxsIGBzYXNzYC5cXG5cIlxuICAgIGxpbmVzWzFdICs9ICdSdW4gYG5wbSBpIHNhc3NgIG9yIGB5YXJuIGFkZCBzYXNzYCBpbnNpZGUgeW91ciB3b3Jrc3BhY2UuXFxuJ1xuICAgIGxpbmVzWzFdICs9ICdcXG5MZWFybiBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9pbnN0YWxsLXNhc3MnXG5cbiAgICAvLyBkaXNwb3NlIG9mIHVuaGVscGZ1bCBzdGFjayB0cmFjZVxuICAgIGxpbmVzID0gbGluZXMuc2xpY2UoMCwgMilcbiAgICBoYWRNaXNzaW5nU2Fzc0Vycm9yID0gdHJ1ZVxuICB9IGVsc2UgaWYgKFxuICAgIGhhZE1pc3NpbmdTYXNzRXJyb3IgJiZcbiAgICBtZXNzYWdlLm1hdGNoKC8oc2Fzcy1sb2FkZXJ8cmVzb2x2ZS11cmwtbG9hZGVyOiBDU1MgZXJyb3IpLylcbiAgKSB7XG4gICAgLy8gZGlzcG9zZSBvZiB1bmhlbHBmdWwgc3RhY2sgdHJhY2UgZm9sbG93aW5nIG1pc3Npbmcgc2FzcyBtb2R1bGVcbiAgICBsaW5lcyA9IFtdXG4gIH1cblxuICBpZiAoIXZlcmJvc2UpIHtcbiAgICBtZXNzYWdlID0gbGluZXMuam9pbignXFxuJylcbiAgICAvLyBJbnRlcm5hbCBzdGFja3MgYXJlIGdlbmVyYWxseSB1c2VsZXNzIHNvIHdlIHN0cmlwIHRoZW0uLi4gd2l0aCB0aGVcbiAgICAvLyBleGNlcHRpb24gb2Ygc3RhY2tzIGNvbnRhaW5pbmcgYHdlYnBhY2s6YCBiZWNhdXNlIHRoZXkncmUgbm9ybWFsbHlcbiAgICAvLyBmcm9tIHVzZXIgY29kZSBnZW5lcmF0ZWQgYnkgV2VicGFjay4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2NyZWF0ZS1yZWFjdC1hcHAvcHVsbC8xMDUwXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZShcbiAgICAgIC9eXFxzKmF0XFxzKCg/IXdlYnBhY2s6KS4pKjpcXGQrOlxcZCtbXFxzKV0qKFxcbnwkKS9nbSxcbiAgICAgICcnXG4gICAgKSAvLyBhdCAuLi4gLi4uOng6eVxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoL15cXHMqYXRcXHM8YW5vbnltb3VzPihcXG58JCkvZ20sICcnKSAvLyBhdCA8YW5vbnltb3VzPlxuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZShcbiAgICAgIC9GaWxlIHdhcyBwcm9jZXNzZWQgd2l0aCB0aGVzZSBsb2FkZXJzOlxcbiguK1tcXFxcL10obmV4dFtcXFxcL11kaXN0W1xcXFwvXS4rfEBuZXh0W1xcXFwvXXJlYWN0LXJlZnJlc2gtdXRpbHNbXFxcXC9dbG9hZGVyKVxcLmpzXFxuKSpZb3UgbWF5IG5lZWQgYW4gYWRkaXRpb25hbCBsb2FkZXIgdG8gaGFuZGxlIHRoZSByZXN1bHQgb2YgdGhlc2UgbG9hZGVycy5cXG4vZyxcbiAgICAgICcnXG4gICAgKVxuXG4gICAgbGluZXMgPSBtZXNzYWdlLnNwbGl0KCdcXG4nKVxuICB9XG5cbiAgLy8gUmVtb3ZlIGR1cGxpY2F0ZWQgbmV3bGluZXNcbiAgbGluZXMgPSAobGluZXMgYXMgc3RyaW5nW10pLmZpbHRlcihcbiAgICAobGluZSwgaW5kZXgsIGFycikgPT5cbiAgICAgIGluZGV4ID09PSAwIHx8IGxpbmUudHJpbSgpICE9PSAnJyB8fCBsaW5lLnRyaW0oKSAhPT0gYXJyW2luZGV4IC0gMV0udHJpbSgpXG4gIClcblxuICAvLyBSZWFzc2VtYmxlIHRoZSBtZXNzYWdlXG4gIG1lc3NhZ2UgPSBsaW5lcy5qb2luKCdcXG4nKVxuICByZXR1cm4gbWVzc2FnZS50cmltKClcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0V2VicGFja01lc3NhZ2VzKGpzb246IGFueSwgdmVyYm9zZT86IGJvb2xlYW4pIHtcbiAgY29uc3QgZm9ybWF0dGVkRXJyb3JzID0ganNvbi5lcnJvcnMubWFwKChtZXNzYWdlOiBhbnkpID0+IHtcbiAgICBjb25zdCBpc1Vua25vd25OZXh0Rm9udEVycm9yID0gbWVzc2FnZS5tZXNzYWdlLmluY2x1ZGVzKFxuICAgICAgJ0FuIGVycm9yIG9jY3VycmVkIGluIGBuZXh0L2ZvbnRgLidcbiAgICApXG4gICAgcmV0dXJuIGZvcm1hdE1lc3NhZ2UobWVzc2FnZSwgaXNVbmtub3duTmV4dEZvbnRFcnJvciB8fCB2ZXJib3NlKVxuICB9KVxuICBjb25zdCBmb3JtYXR0ZWRXYXJuaW5ncyA9IGpzb24ud2FybmluZ3MubWFwKChtZXNzYWdlOiBhbnkpID0+IHtcbiAgICByZXR1cm4gZm9ybWF0TWVzc2FnZShtZXNzYWdlLCB2ZXJib3NlKVxuICB9KVxuXG4gIC8vIFJlb3JkZXIgZXJyb3JzIHRvIHB1dCB0aGUgbW9zdCByZWxldmFudCBvbmVzIGZpcnN0LlxuICBsZXQgcmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3IgPSAtMVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybWF0dGVkRXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZXJyb3IgPSBmb3JtYXR0ZWRFcnJvcnNbaV1cbiAgICBpZiAoZXJyb3IuaW5jbHVkZXMoJ1JlYWN0U2VydmVyQ29tcG9uZW50c0Vycm9yJykpIHtcbiAgICAgIHJlYWN0U2VydmVyQ29tcG9uZW50c0Vycm9yID0gaVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvLyBNb3ZlIHRoZSByZWFjdFNlcnZlckNvbXBvbmVudHNFcnJvciB0byB0aGUgdG9wIGlmIGl0IGV4aXN0c1xuICBpZiAocmVhY3RTZXJ2ZXJDb21wb25lbnRzRXJyb3IgIT09IC0xKSB7XG4gICAgY29uc3QgZXJyb3IgPSBmb3JtYXR0ZWRFcnJvcnMuc3BsaWNlKHJlYWN0U2VydmVyQ29tcG9uZW50c0Vycm9yLCAxKVxuICAgIGZvcm1hdHRlZEVycm9ycy51bnNoaWZ0KGVycm9yWzBdKVxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIC4uLmpzb24sXG4gICAgZXJyb3JzOiBmb3JtYXR0ZWRFcnJvcnMsXG4gICAgd2FybmluZ3M6IGZvcm1hdHRlZFdhcm5pbmdzLFxuICB9XG4gIGlmICghdmVyYm9zZSAmJiByZXN1bHQuZXJyb3JzLnNvbWUoaXNMaWtlbHlBU3ludGF4RXJyb3IpKSB7XG4gICAgLy8gSWYgdGhlcmUgYXJlIGFueSBzeW50YXggZXJyb3JzLCBzaG93IGp1c3QgdGhlbS5cbiAgICByZXN1bHQuZXJyb3JzID0gcmVzdWx0LmVycm9ycy5maWx0ZXIoaXNMaWtlbHlBU3ludGF4RXJyb3IpXG4gICAgcmVzdWx0Lndhcm5pbmdzID0gW11cbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG4iXSwibmFtZXMiOlsiZm9ybWF0V2VicGFja01lc3NhZ2VzIiwiZnJpZW5kbHlTeW50YXhFcnJvckxhYmVsIiwiV0VCUEFDS19CUkVBS0lOR19DSEFOR0VfUE9MWUZJTExTIiwiaXNMaWtlbHlBU3ludGF4RXJyb3IiLCJtZXNzYWdlIiwic3RyaXBBbnNpIiwiaW5jbHVkZXMiLCJoYWRNaXNzaW5nU2Fzc0Vycm9yIiwiZm9ybWF0TWVzc2FnZSIsInZlcmJvc2UiLCJpbXBvcnRUcmFjZU5vdGUiLCJmaWx0ZXJlZE1vZHVsZVRyYWNlIiwibW9kdWxlVHJhY2UiLCJmaWx0ZXIiLCJ0cmFjZSIsInRlc3QiLCJvcmlnaW5OYW1lIiwiYm9keSIsImJyZWFraW5nQ2hhbmdlSW5kZXgiLCJpbmRleE9mIiwic2xpY2UiLCJtb2R1bGVOYW1lIiwiZmlsZSIsImRldGFpbHMiLCJsZW5ndGgiLCJtYXAiLCJqb2luIiwic3RhY2siLCJsaW5lcyIsInNwbGl0IiwibGluZSIsInBhcnNpbmdFcnJvciIsImV4ZWMiLCJlcnJvckxpbmUiLCJlcnJvckNvbHVtbiIsImVycm9yTWVzc2FnZSIsInJlcGxhY2UiLCJ0cmltIiwic3BsaWNlIiwic3RhcnRzV2l0aCIsIm1hdGNoIiwiZmlyc3RMaW5lIiwiaW5kZXgiLCJhcnIiLCJqc29uIiwiZm9ybWF0dGVkRXJyb3JzIiwiZXJyb3JzIiwiaXNVbmtub3duTmV4dEZvbnRFcnJvciIsImZvcm1hdHRlZFdhcm5pbmdzIiwid2FybmluZ3MiLCJyZWFjdFNlcnZlckNvbXBvbmVudHNFcnJvciIsImkiLCJlcnJvciIsInVuc2hpZnQiLCJyZXN1bHQiLCJzb21lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/format-webpack-messages.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/hash.js":
/*!***********************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/hash.js ***!
  \***********************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("// http://www.cse.yorku.ca/~oz/hash.html\n// More specifically, 32-bit hash via djbxor\n// (ref: https://gist.github.com/eplawless/52813b1d8ad9af510d85?permalink_comment_id=3367765#gistcomment-3367765)\n// This is due to number type differences between rust for turbopack to js number types,\n// where rust does not have easy way to repreesnt js's 53-bit float number type for the matching\n// overflow behavior. This is more `correct` in terms of having canonical hash across different runtime / implementation\n// as can gaurantee determinstic output from 32bit hash.\n\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    djb2Hash: function() {\n        return djb2Hash;\n    },\n    hexHash: function() {\n        return hexHash;\n    }\n});\nfunction djb2Hash(str) {\n    let hash = 5381;\n    for(let i = 0; i < str.length; i++){\n        const char = str.charCodeAt(i);\n        hash = (hash << 5) + hash + char & 0xffffffff;\n    }\n    return hash >>> 0;\n}\nfunction hexHash(str) {\n    return djb2Hash(str).toString(36).slice(0, 5);\n} //# sourceMappingURL=hash.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2hhc2guanMiLCJtYXBwaW5ncyI6IkFBQUEsd0NBQXdDO0FBQ3hDLDRDQUE0QztBQUM1QyxpSEFBaUg7QUFDakgsd0ZBQXdGO0FBQ3hGLGdHQUFnRztBQUNoRyx3SEFBd0g7QUFDeEgsd0RBQXdEOzs7Ozs7Ozs7Ozs7O0lBQ3hDQSxRQUFRO2VBQVJBOztJQVNBQyxPQUFPO2VBQVBBOzs7QUFUVCxTQUFTRCxTQUFTRSxHQUFXO0lBQ2xDLElBQUlDLE9BQU87SUFDWCxJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSUYsSUFBSUcsTUFBTSxFQUFFRCxJQUFLO1FBQ25DLE1BQU1FLE9BQU9KLElBQUlLLFVBQVUsQ0FBQ0g7UUFDNUJELE9BQVNBLENBQUFBLFNBQVEsSUFBS0EsT0FBT0csT0FBUTtJQUN2QztJQUNBLE9BQU9ILFNBQVM7QUFDbEI7QUFFTyxTQUFTRixRQUFRQyxHQUFXO0lBQ2pDLE9BQU9GLFNBQVNFLEtBQUtNLFFBQVEsQ0FBQyxJQUFJQyxLQUFLLENBQUMsR0FBRztBQUM3QyIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9zcmMvc2hhcmVkL2xpYi9oYXNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHA6Ly93d3cuY3NlLnlvcmt1LmNhL35vei9oYXNoLmh0bWxcbi8vIE1vcmUgc3BlY2lmaWNhbGx5LCAzMi1iaXQgaGFzaCB2aWEgZGpieG9yXG4vLyAocmVmOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9lcGxhd2xlc3MvNTI4MTNiMWQ4YWQ5YWY1MTBkODU/cGVybWFsaW5rX2NvbW1lbnRfaWQ9MzM2Nzc2NSNnaXN0Y29tbWVudC0zMzY3NzY1KVxuLy8gVGhpcyBpcyBkdWUgdG8gbnVtYmVyIHR5cGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBydXN0IGZvciB0dXJib3BhY2sgdG8ganMgbnVtYmVyIHR5cGVzLFxuLy8gd2hlcmUgcnVzdCBkb2VzIG5vdCBoYXZlIGVhc3kgd2F5IHRvIHJlcHJlZXNudCBqcydzIDUzLWJpdCBmbG9hdCBudW1iZXIgdHlwZSBmb3IgdGhlIG1hdGNoaW5nXG4vLyBvdmVyZmxvdyBiZWhhdmlvci4gVGhpcyBpcyBtb3JlIGBjb3JyZWN0YCBpbiB0ZXJtcyBvZiBoYXZpbmcgY2Fub25pY2FsIGhhc2ggYWNyb3NzIGRpZmZlcmVudCBydW50aW1lIC8gaW1wbGVtZW50YXRpb25cbi8vIGFzIGNhbiBnYXVyYW50ZWUgZGV0ZXJtaW5zdGljIG91dHB1dCBmcm9tIDMyYml0IGhhc2guXG5leHBvcnQgZnVuY3Rpb24gZGpiMkhhc2goc3RyOiBzdHJpbmcpIHtcbiAgbGV0IGhhc2ggPSA1MzgxXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hhciA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2ggKyBjaGFyKSAmIDB4ZmZmZmZmZmZcbiAgfVxuICByZXR1cm4gaGFzaCA+Pj4gMFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGV4SGFzaChzdHI6IHN0cmluZykge1xuICByZXR1cm4gZGpiMkhhc2goc3RyKS50b1N0cmluZygzNikuc2xpY2UoMCwgNSlcbn1cbiJdLCJuYW1lcyI6WyJkamIySGFzaCIsImhleEhhc2giLCJzdHIiLCJoYXNoIiwiaSIsImxlbmd0aCIsImNoYXIiLCJjaGFyQ29kZUF0IiwidG9TdHJpbmciLCJzbGljZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/hash.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js":
/*!******************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js ***!
  \******************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"HeadManagerContext\", ({\n    enumerable: true,\n    get: function() {\n        return HeadManagerContext;\n    }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"));\nconst HeadManagerContext = _react.default.createContext({});\nif (true) {\n    HeadManagerContext.displayName = 'HeadManagerContext';\n} //# sourceMappingURL=head-manager-context.shared-runtime.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2hlYWQtbWFuYWdlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiI7Ozs7c0RBRWFBOzs7ZUFBQUE7Ozs7NEVBRks7QUFFWCxNQUFNQSxxQkFVUkMsT0FBQUEsT0FBSyxDQUFDQyxhQUFhLENBQUMsQ0FBQztBQUUxQixJQUFJQyxJQUFvQixFQUFtQjtJQUN6Q0gsbUJBQW1CTSxXQUFXLEdBQUc7QUFDbkMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL3NoYXJlZC9saWIvaGVhZC1tYW5hZ2VyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgY29uc3QgSGVhZE1hbmFnZXJDb250ZXh0OiBSZWFjdC5Db250ZXh0PHtcbiAgdXBkYXRlSGVhZD86IChzdGF0ZTogYW55KSA9PiB2b2lkXG4gIG1vdW50ZWRJbnN0YW5jZXM/OiBhbnlcbiAgdXBkYXRlU2NyaXB0cz86IChzdGF0ZTogYW55KSA9PiB2b2lkXG4gIHNjcmlwdHM/OiBhbnlcbiAgZ2V0SXNTc3I/OiAoKSA9PiBib29sZWFuXG5cbiAgLy8gVXNlZCBpbiBhcHAgZGlyZWN0b3J5LCB0byByZW5kZXIgc2NyaXB0IHRhZ3MgYXMgc2VydmVyIGNvbXBvbmVudHMuXG4gIGFwcERpcj86IGJvb2xlYW5cbiAgbm9uY2U/OiBzdHJpbmdcbn0+ID0gUmVhY3QuY3JlYXRlQ29udGV4dCh7fSlcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgSGVhZE1hbmFnZXJDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0hlYWRNYW5hZ2VyQ29udGV4dCdcbn1cbiJdLCJuYW1lcyI6WyJIZWFkTWFuYWdlckNvbnRleHQiLCJSZWFjdCIsImNyZWF0ZUNvbnRleHQiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJkaXNwbGF5TmFtZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js":
/*!******************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js ***!
  \******************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__  cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    PathParamsContext: function() {\n        return PathParamsContext;\n    },\n    PathnameContext: function() {\n        return PathnameContext;\n    },\n    SearchParamsContext: function() {\n        return SearchParamsContext;\n    }\n});\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\");\nconst SearchParamsContext = (0, _react.createContext)(null);\nconst PathnameContext = (0, _react.createContext)(null);\nconst PathParamsContext = (0, _react.createContext)(null);\nif (true) {\n    SearchParamsContext.displayName = 'SearchParamsContext';\n    PathnameContext.displayName = 'PathnameContext';\n    PathParamsContext.displayName = 'PathParamsContext';\n} //# sourceMappingURL=hooks-client-context.shared-runtime.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2hvb2tzLWNsaWVudC1jb250ZXh0LnNoYXJlZC1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQU9hQSxpQkFBaUI7ZUFBakJBOztJQURBQyxlQUFlO2VBQWZBOztJQURBQyxtQkFBbUI7ZUFBbkJBOzs7bUNBSGlCO0FBR3ZCLE1BQU1BLHNCQUFzQkMsQ0FBQUEsR0FBQUEsT0FBQUEsYUFBQUEsRUFBc0M7QUFDbEUsTUFBTUYsa0JBQWtCRSxDQUFBQSxHQUFBQSxPQUFBQSxhQUFBQSxFQUE2QjtBQUNyRCxNQUFNSCxvQkFBb0JHLENBQUFBLEdBQUFBLE9BQUFBLGFBQUFBLEVBQTZCO0FBRTlELElBRmFILElBRVcsRUFBbUI7SUFDekNFLG9CQUFvQkssV0FBVyxHQUFHO0lBQ2xDTixnQkFBZ0JNLFdBQVcsR0FBRztJQUM5QlAsa0JBQWtCTyxXQUFXLEdBQUc7QUFDbEMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL3NoYXJlZC9saWIvaG9va3MtY2xpZW50LWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgUGFyYW1zIH0gZnJvbSAnLi4vLi4vc2VydmVyL3JlcXVlc3QvcGFyYW1zJ1xuXG5leHBvcnQgY29uc3QgU2VhcmNoUGFyYW1zQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8VVJMU2VhcmNoUGFyYW1zIHwgbnVsbD4obnVsbClcbmV4cG9ydCBjb25zdCBQYXRobmFtZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PHN0cmluZyB8IG51bGw+KG51bGwpXG5leHBvcnQgY29uc3QgUGF0aFBhcmFtc0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFBhcmFtcyB8IG51bGw+KG51bGwpXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFNlYXJjaFBhcmFtc0NvbnRleHQuZGlzcGxheU5hbWUgPSAnU2VhcmNoUGFyYW1zQ29udGV4dCdcbiAgUGF0aG5hbWVDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1BhdGhuYW1lQ29udGV4dCdcbiAgUGF0aFBhcmFtc0NvbnRleHQuZGlzcGxheU5hbWUgPSAnUGF0aFBhcmFtc0NvbnRleHQnXG59XG4iXSwibmFtZXMiOlsiUGF0aFBhcmFtc0NvbnRleHQiLCJQYXRobmFtZUNvbnRleHQiLCJTZWFyY2hQYXJhbXNDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImRpc3BsYXlOYW1lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js":
/*!*********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js ***!
  \*********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"normalizeLocalePath\", ({\n    enumerable: true,\n    get: function() {\n        return normalizeLocalePath;\n    }\n}));\n/**\n * A cache of lowercased locales for each list of locales. This is stored as a\n * WeakMap so if the locales are garbage collected, the cache entry will be\n * removed as well.\n */ const cache = new WeakMap();\nfunction normalizeLocalePath(pathname, locales) {\n    // If locales is undefined, return the pathname as is.\n    if (!locales) return {\n        pathname\n    };\n    // Get the cached lowercased locales or create a new cache entry.\n    let lowercasedLocales = cache.get(locales);\n    if (!lowercasedLocales) {\n        lowercasedLocales = locales.map((locale)=>locale.toLowerCase());\n        cache.set(locales, lowercasedLocales);\n    }\n    let detectedLocale;\n    // The first segment will be empty, because it has a leading `/`. If\n    // there is no further segment, there is no locale (or it's the default).\n    const segments = pathname.split('/', 2);\n    // If there's no second segment (ie, the pathname is just `/`), there's no\n    // locale.\n    if (!segments[1]) return {\n        pathname\n    };\n    // The second segment will contain the locale part if any.\n    const segment = segments[1].toLowerCase();\n    // See if the segment matches one of the locales. If it doesn't, there is\n    // no locale (or it's the default).\n    const index = lowercasedLocales.indexOf(segment);\n    if (index < 0) return {\n        pathname\n    };\n    // Return the case-sensitive locale.\n    detectedLocale = locales[index];\n    // Remove the `/${locale}` part of the pathname.\n    pathname = pathname.slice(detectedLocale.length + 1) || '/';\n    return {\n        pathname,\n        detectedLocale\n    };\n} //# sourceMappingURL=normalize-locale-path.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2kxOG4vbm9ybWFsaXplLWxvY2FsZS1wYXRoLmpzIiwibWFwcGluZ3MiOiI7Ozs7dURBcUJnQkE7OztlQUFBQTs7O0FBaEJoQjs7OztDQUlDLEdBQ0QsTUFBTUMsUUFBUSxJQUFJQztBQVdYLFNBQVNGLG9CQUNkRyxRQUFnQixFQUNoQkMsT0FBMkI7SUFFM0Isc0RBQXNEO0lBQ3RELElBQUksQ0FBQ0EsU0FBUyxPQUFPO1FBQUVEO0lBQVM7SUFFaEMsaUVBQWlFO0lBQ2pFLElBQUlFLG9CQUFvQkosTUFBTUssR0FBRyxDQUFDRjtJQUNsQyxJQUFJLENBQUNDLG1CQUFtQjtRQUN0QkEsb0JBQW9CRCxRQUFRRyxHQUFHLENBQUMsQ0FBQ0MsU0FBV0EsT0FBT0MsV0FBVztRQUM5RFIsTUFBTVMsR0FBRyxDQUFDTixTQUFTQztJQUNyQjtJQUVBLElBQUlNO0lBRUosb0VBQW9FO0lBQ3BFLHlFQUF5RTtJQUN6RSxNQUFNQyxXQUFXVCxTQUFTVSxLQUFLLENBQUMsS0FBSztJQUVyQywwRUFBMEU7SUFDMUUsVUFBVTtJQUNWLElBQUksQ0FBQ0QsUUFBUSxDQUFDLEVBQUUsRUFBRSxPQUFPO1FBQUVUO0lBQVM7SUFFcEMsMERBQTBEO0lBQzFELE1BQU1XLFVBQVVGLFFBQVEsQ0FBQyxFQUFFLENBQUNILFdBQVc7SUFFdkMseUVBQXlFO0lBQ3pFLG1DQUFtQztJQUNuQyxNQUFNTSxRQUFRVixrQkFBa0JXLE9BQU8sQ0FBQ0Y7SUFDeEMsSUFBSUMsUUFBUSxHQUFHLE9BQU87UUFBRVo7SUFBUztJQUVqQyxvQ0FBb0M7SUFDcENRLGlCQUFpQlAsT0FBTyxDQUFDVyxNQUFNO0lBRS9CLGdEQUFnRDtJQUNoRFosV0FBV0EsU0FBU2MsS0FBSyxDQUFDTixlQUFlTyxNQUFNLEdBQUcsTUFBTTtJQUV4RCxPQUFPO1FBQUVmO1FBQVVRO0lBQWU7QUFDcEMiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9zaGFyZWQvbGliL2kxOG4vbm9ybWFsaXplLWxvY2FsZS1wYXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgUGF0aExvY2FsZSB7XG4gIGRldGVjdGVkTG9jYWxlPzogc3RyaW5nXG4gIHBhdGhuYW1lOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBBIGNhY2hlIG9mIGxvd2VyY2FzZWQgbG9jYWxlcyBmb3IgZWFjaCBsaXN0IG9mIGxvY2FsZXMuIFRoaXMgaXMgc3RvcmVkIGFzIGFcbiAqIFdlYWtNYXAgc28gaWYgdGhlIGxvY2FsZXMgYXJlIGdhcmJhZ2UgY29sbGVjdGVkLCB0aGUgY2FjaGUgZW50cnkgd2lsbCBiZVxuICogcmVtb3ZlZCBhcyB3ZWxsLlxuICovXG5jb25zdCBjYWNoZSA9IG5ldyBXZWFrTWFwPHJlYWRvbmx5IHN0cmluZ1tdLCByZWFkb25seSBzdHJpbmdbXT4oKVxuXG4vKipcbiAqIEZvciBhIHBhdGhuYW1lIHRoYXQgbWF5IGluY2x1ZGUgYSBsb2NhbGUgZnJvbSBhIGxpc3Qgb2YgbG9jYWxlcywgaXRcbiAqIHJlbW92ZXMgdGhlIGxvY2FsZSBmcm9tIHRoZSBwYXRobmFtZSByZXR1cm5pbmcgaXQgYWxvbmdzaWRlIHdpdGggdGhlXG4gKiBkZXRlY3RlZCBsb2NhbGUuXG4gKlxuICogQHBhcmFtIHBhdGhuYW1lIEEgcGF0aG5hbWUgdGhhdCBtYXkgaW5jbHVkZSBhIGxvY2FsZS5cbiAqIEBwYXJhbSBsb2NhbGVzIEEgbGlzdCBvZiBsb2NhbGVzLlxuICogQHJldHVybnMgVGhlIGRldGVjdGVkIGxvY2FsZSBhbmQgcGF0aG5hbWUgd2l0aG91dCBsb2NhbGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZVBhdGgoXG4gIHBhdGhuYW1lOiBzdHJpbmcsXG4gIGxvY2FsZXM/OiByZWFkb25seSBzdHJpbmdbXVxuKTogUGF0aExvY2FsZSB7XG4gIC8vIElmIGxvY2FsZXMgaXMgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHBhdGhuYW1lIGFzIGlzLlxuICBpZiAoIWxvY2FsZXMpIHJldHVybiB7IHBhdGhuYW1lIH1cblxuICAvLyBHZXQgdGhlIGNhY2hlZCBsb3dlcmNhc2VkIGxvY2FsZXMgb3IgY3JlYXRlIGEgbmV3IGNhY2hlIGVudHJ5LlxuICBsZXQgbG93ZXJjYXNlZExvY2FsZXMgPSBjYWNoZS5nZXQobG9jYWxlcylcbiAgaWYgKCFsb3dlcmNhc2VkTG9jYWxlcykge1xuICAgIGxvd2VyY2FzZWRMb2NhbGVzID0gbG9jYWxlcy5tYXAoKGxvY2FsZSkgPT4gbG9jYWxlLnRvTG93ZXJDYXNlKCkpXG4gICAgY2FjaGUuc2V0KGxvY2FsZXMsIGxvd2VyY2FzZWRMb2NhbGVzKVxuICB9XG5cbiAgbGV0IGRldGVjdGVkTG9jYWxlOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuICAvLyBUaGUgZmlyc3Qgc2VnbWVudCB3aWxsIGJlIGVtcHR5LCBiZWNhdXNlIGl0IGhhcyBhIGxlYWRpbmcgYC9gLiBJZlxuICAvLyB0aGVyZSBpcyBubyBmdXJ0aGVyIHNlZ21lbnQsIHRoZXJlIGlzIG5vIGxvY2FsZSAob3IgaXQncyB0aGUgZGVmYXVsdCkuXG4gIGNvbnN0IHNlZ21lbnRzID0gcGF0aG5hbWUuc3BsaXQoJy8nLCAyKVxuXG4gIC8vIElmIHRoZXJlJ3Mgbm8gc2Vjb25kIHNlZ21lbnQgKGllLCB0aGUgcGF0aG5hbWUgaXMganVzdCBgL2ApLCB0aGVyZSdzIG5vXG4gIC8vIGxvY2FsZS5cbiAgaWYgKCFzZWdtZW50c1sxXSkgcmV0dXJuIHsgcGF0aG5hbWUgfVxuXG4gIC8vIFRoZSBzZWNvbmQgc2VnbWVudCB3aWxsIGNvbnRhaW4gdGhlIGxvY2FsZSBwYXJ0IGlmIGFueS5cbiAgY29uc3Qgc2VnbWVudCA9IHNlZ21lbnRzWzFdLnRvTG93ZXJDYXNlKClcblxuICAvLyBTZWUgaWYgdGhlIHNlZ21lbnQgbWF0Y2hlcyBvbmUgb2YgdGhlIGxvY2FsZXMuIElmIGl0IGRvZXNuJ3QsIHRoZXJlIGlzXG4gIC8vIG5vIGxvY2FsZSAob3IgaXQncyB0aGUgZGVmYXVsdCkuXG4gIGNvbnN0IGluZGV4ID0gbG93ZXJjYXNlZExvY2FsZXMuaW5kZXhPZihzZWdtZW50KVxuICBpZiAoaW5kZXggPCAwKSByZXR1cm4geyBwYXRobmFtZSB9XG5cbiAgLy8gUmV0dXJuIHRoZSBjYXNlLXNlbnNpdGl2ZSBsb2NhbGUuXG4gIGRldGVjdGVkTG9jYWxlID0gbG9jYWxlc1tpbmRleF1cblxuICAvLyBSZW1vdmUgdGhlIGAvJHtsb2NhbGV9YCBwYXJ0IG9mIHRoZSBwYXRobmFtZS5cbiAgcGF0aG5hbWUgPSBwYXRobmFtZS5zbGljZShkZXRlY3RlZExvY2FsZS5sZW5ndGggKyAxKSB8fCAnLydcblxuICByZXR1cm4geyBwYXRobmFtZSwgZGV0ZWN0ZWRMb2NhbGUgfVxufVxuIl0sIm5hbWVzIjpbIm5vcm1hbGl6ZUxvY2FsZVBhdGgiLCJjYWNoZSIsIldlYWtNYXAiLCJwYXRobmFtZSIsImxvY2FsZXMiLCJsb3dlcmNhc2VkTG9jYWxlcyIsImdldCIsIm1hcCIsImxvY2FsZSIsInRvTG93ZXJDYXNlIiwic2V0IiwiZGV0ZWN0ZWRMb2NhbGUiLCJzZWdtZW50cyIsInNwbGl0Iiwic2VnbWVudCIsImluZGV4IiwiaW5kZXhPZiIsInNsaWNlIiwibGVuZ3RoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/is-plain-object.js":
/*!**********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/is-plain-object.js ***!
  \**********************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    getObjectClassLabel: function() {\n        return getObjectClassLabel;\n    },\n    isPlainObject: function() {\n        return isPlainObject;\n    }\n});\nfunction getObjectClassLabel(value) {\n    return Object.prototype.toString.call(value);\n}\nfunction isPlainObject(value) {\n    if (getObjectClassLabel(value) !== '[object Object]') {\n        return false;\n    }\n    const prototype = Object.getPrototypeOf(value);\n    /**\n   * this used to be previously:\n   *\n   * `return prototype === null || prototype === Object.prototype`\n   *\n   * but Edge Runtime expose Object from vm, being that kind of type-checking wrongly fail.\n   *\n   * It was changed to the current implementation since it's resilient to serialization.\n   */ return prototype === null || prototype.hasOwnProperty('isPrototypeOf');\n} //# sourceMappingURL=is-plain-object.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2lzLXBsYWluLW9iamVjdC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFBZ0JBLG1CQUFtQjtlQUFuQkE7O0lBSUFDLGFBQWE7ZUFBYkE7OztBQUpULFNBQVNELG9CQUFvQkUsS0FBVTtJQUM1QyxPQUFPQyxPQUFPQyxTQUFTLENBQUNDLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDSjtBQUN4QztBQUVPLFNBQVNELGNBQWNDLEtBQVU7SUFDdEMsSUFBSUYsb0JBQW9CRSxXQUFXLG1CQUFtQjtRQUNwRCxPQUFPO0lBQ1Q7SUFFQSxNQUFNRSxZQUFZRCxPQUFPSSxjQUFjLENBQUNMO0lBRXhDOzs7Ozs7OztHQVFDLEdBQ0QsT0FBT0UsY0FBYyxRQUFRQSxVQUFVSSxjQUFjLENBQUM7QUFDeEQiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL3NoYXJlZC9saWIvaXMtcGxhaW4tb2JqZWN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBnZXRPYmplY3RDbGFzc0xhYmVsKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIGlmIChnZXRPYmplY3RDbGFzc0xhYmVsKHZhbHVlKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSlcblxuICAvKipcbiAgICogdGhpcyB1c2VkIHRvIGJlIHByZXZpb3VzbHk6XG4gICAqXG4gICAqIGByZXR1cm4gcHJvdG90eXBlID09PSBudWxsIHx8IHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZWBcbiAgICpcbiAgICogYnV0IEVkZ2UgUnVudGltZSBleHBvc2UgT2JqZWN0IGZyb20gdm0sIGJlaW5nIHRoYXQga2luZCBvZiB0eXBlLWNoZWNraW5nIHdyb25nbHkgZmFpbC5cbiAgICpcbiAgICogSXQgd2FzIGNoYW5nZWQgdG8gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gc2luY2UgaXQncyByZXNpbGllbnQgdG8gc2VyaWFsaXphdGlvbi5cbiAgICovXG4gIHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlLmhhc093blByb3BlcnR5KCdpc1Byb3RvdHlwZU9mJylcbn1cbiJdLCJuYW1lcyI6WyJnZXRPYmplY3RDbGFzc0xhYmVsIiwiaXNQbGFpbk9iamVjdCIsInZhbHVlIiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwiZ2V0UHJvdG90eXBlT2YiLCJoYXNPd25Qcm9wZXJ0eSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/is-plain-object.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/is-thenable.js":
/*!******************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/is-thenable.js ***!
  \******************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/**\n * Check to see if a value is Thenable.\n *\n * @param promise the maybe-thenable value\n * @returns true if the value is thenable\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"isThenable\", ({\n    enumerable: true,\n    get: function() {\n        return isThenable;\n    }\n}));\nfunction isThenable(promise) {\n    return promise !== null && typeof promise === 'object' && 'then' in promise && typeof promise.then === 'function';\n} //# sourceMappingURL=is-thenable.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2lzLXRoZW5hYmxlLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7OztDQUtDOzs7OzhDQUNlQTs7O2VBQUFBOzs7QUFBVCxTQUFTQSxXQUNkQyxPQUF1QjtJQUV2QixPQUNFQSxZQUFZLFFBQ1osT0FBT0EsWUFBWSxZQUNuQixVQUFVQSxXQUNWLE9BQU9BLFFBQVFDLElBQUksS0FBSztBQUU1QiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9zcmMvc2hhcmVkL2xpYi9pcy10aGVuYWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrIHRvIHNlZSBpZiBhIHZhbHVlIGlzIFRoZW5hYmxlLlxuICpcbiAqIEBwYXJhbSBwcm9taXNlIHRoZSBtYXliZS10aGVuYWJsZSB2YWx1ZVxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdGhlbmFibGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGhlbmFibGU8VCA9IHVua25vd24+KFxuICBwcm9taXNlOiBQcm9taXNlPFQ+IHwgVFxuKTogcHJvbWlzZSBpcyBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIChcbiAgICBwcm9taXNlICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHByb21pc2UgPT09ICdvYmplY3QnICYmXG4gICAgJ3RoZW4nIGluIHByb21pc2UgJiZcbiAgICB0eXBlb2YgcHJvbWlzZS50aGVuID09PSAnZnVuY3Rpb24nXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJpc1RoZW5hYmxlIiwicHJvbWlzZSIsInRoZW4iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/is-thenable.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js":
/*!**********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js ***!
  \**********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("// This has to be a shared module which is shared between client component error boundary and dynamic component\n\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    BailoutToCSRError: function() {\n        return BailoutToCSRError;\n    },\n    isBailoutToCSRError: function() {\n        return isBailoutToCSRError;\n    }\n});\nconst BAILOUT_TO_CSR = 'BAILOUT_TO_CLIENT_SIDE_RENDERING';\nclass BailoutToCSRError extends Error {\n    constructor(reason){\n        super(\"Bail out to client-side rendering: \" + reason), this.reason = reason, this.digest = BAILOUT_TO_CSR;\n    }\n}\nfunction isBailoutToCSRError(err) {\n    if (typeof err !== 'object' || err === null || !('digest' in err)) {\n        return false;\n    }\n    return err.digest === BAILOUT_TO_CSR;\n} //# sourceMappingURL=bailout-to-csr.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL2xhenktZHluYW1pYy9iYWlsb3V0LXRvLWNzci5qcyIsIm1hcHBpbmdzIjoiQUFBQSwrR0FBK0c7Ozs7Ozs7Ozs7Ozs7SUFJbEdBLGlCQUFpQjtlQUFqQkE7O0lBU0dDLG1CQUFtQjtlQUFuQkE7OztBQVpoQixNQUFNQyxpQkFBaUI7QUFHaEIsTUFBTUYsMEJBQTBCRztJQUdyQ0MsWUFBNEJDLE1BQWMsQ0FBRTtRQUMxQyxLQUFLLENBQUUsd0NBQXFDQSxTQUFBQSxJQUFBQSxDQURsQkEsTUFBQUEsR0FBQUEsUUFBQUEsSUFBQUEsQ0FGWkMsTUFBQUEsR0FBU0o7SUFJekI7QUFDRjtBQUdPLFNBQVNELG9CQUFvQk0sR0FBWTtJQUM5QyxJQUFJLE9BQU9BLFFBQVEsWUFBWUEsUUFBUSxRQUFRLENBQUUsYUFBWUEsR0FBQUEsQ0FBRSxFQUFJO1FBQ2pFLE9BQU87SUFDVDtJQUVBLE9BQU9BLElBQUlELE1BQU0sS0FBS0o7QUFDeEIiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9zaGFyZWQvbGliL2xhenktZHluYW1pYy9iYWlsb3V0LXRvLWNzci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGhhcyB0byBiZSBhIHNoYXJlZCBtb2R1bGUgd2hpY2ggaXMgc2hhcmVkIGJldHdlZW4gY2xpZW50IGNvbXBvbmVudCBlcnJvciBib3VuZGFyeSBhbmQgZHluYW1pYyBjb21wb25lbnRcbmNvbnN0IEJBSUxPVVRfVE9fQ1NSID0gJ0JBSUxPVVRfVE9fQ0xJRU5UX1NJREVfUkVOREVSSU5HJ1xuXG4vKiogQW4gZXJyb3IgdGhhdCBzaG91bGQgYmUgdGhyb3duIHdoZW4gd2Ugd2FudCB0byBiYWlsIG91dCB0byBjbGllbnQtc2lkZSByZW5kZXJpbmcuICovXG5leHBvcnQgY2xhc3MgQmFpbG91dFRvQ1NSRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBkaWdlc3QgPSBCQUlMT1VUX1RPX0NTUlxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSByZWFzb246IHN0cmluZykge1xuICAgIHN1cGVyKGBCYWlsIG91dCB0byBjbGllbnQtc2lkZSByZW5kZXJpbmc6ICR7cmVhc29ufWApXG4gIH1cbn1cblxuLyoqIENoZWNrcyBpZiBhIHBhc3NlZCBhcmd1bWVudCBpcyBhbiBlcnJvciB0aGF0IGlzIHRocm93biBpZiB3ZSB3YW50IHRvIGJhaWwgb3V0IHRvIGNsaWVudC1zaWRlIHJlbmRlcmluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JhaWxvdXRUb0NTUkVycm9yKGVycjogdW5rbm93bik6IGVyciBpcyBCYWlsb3V0VG9DU1JFcnJvciB7XG4gIGlmICh0eXBlb2YgZXJyICE9PSAnb2JqZWN0JyB8fCBlcnIgPT09IG51bGwgfHwgISgnZGlnZXN0JyBpbiBlcnIpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXJyLmRpZ2VzdCA9PT0gQkFJTE9VVF9UT19DU1Jcbn1cbiJdLCJuYW1lcyI6WyJCYWlsb3V0VG9DU1JFcnJvciIsImlzQmFpbG91dFRvQ1NSRXJyb3IiLCJCQUlMT1VUX1RPX0NTUiIsIkVycm9yIiwiY29uc3RydWN0b3IiLCJyZWFzb24iLCJkaWdlc3QiLCJlcnIiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/mitt.js":
/*!***********************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/mitt.js ***!
  \***********************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/*\nMIT License\n\nCopyright (c) Jason Miller (https://jasonformat.com/)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/ // This file is based on https://github.com/developit/mitt/blob/v1.1.3/src/index.js\n// It's been edited for the needs of this script\n// See the LICENSE at the top of the file\n\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n    enumerable: true,\n    get: function() {\n        return mitt;\n    }\n}));\nfunction mitt() {\n    const all = Object.create(null);\n    return {\n        on (type, handler) {\n            ;\n            (all[type] || (all[type] = [])).push(handler);\n        },\n        off (type, handler) {\n            if (all[type]) {\n                all[type].splice(all[type].indexOf(handler) >>> 0, 1);\n            }\n        },\n        emit (type) {\n            for(var _len = arguments.length, evts = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n                evts[_key - 1] = arguments[_key];\n            }\n            // eslint-disable-next-line array-callback-return\n            ;\n            (all[type] || []).slice().map((handler)=>{\n                handler(...evts);\n            });\n        }\n    };\n} //# sourceMappingURL=mitt.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL21pdHQuanMiLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7QUFVQSxHQUVBLG1GQUFtRjtBQUNuRixnREFBZ0Q7QUFDaEQseUNBQXlDOzs7OzsyQ0FVekM7OztlQUF3QkE7OztBQUFULFNBQVNBO0lBQ3RCLE1BQU1DLE1BQWtDQyxPQUFPQyxNQUFNLENBQUM7SUFFdEQsT0FBTztRQUNMQyxJQUFHQyxJQUFZLEVBQUVDLE9BQWdCOztZQUM3QkwsSUFBRyxDQUFDSSxLQUFLLElBQUtKLENBQUFBLEdBQUcsQ0FBQ0ksS0FBSyxHQUFHLEdBQUMsQ0FBQyxDQUFHRSxJQUFJLENBQUNEO1FBQ3hDO1FBRUFFLEtBQUlILElBQVksRUFBRUMsT0FBZ0I7WUFDaEMsSUFBSUwsR0FBRyxDQUFDSSxLQUFLLEVBQUU7Z0JBQ2JKLEdBQUcsQ0FBQ0ksS0FBSyxDQUFDSSxNQUFNLENBQUNSLEdBQUcsQ0FBQ0ksS0FBSyxDQUFDSyxPQUFPLENBQUNKLGFBQWEsR0FBRztZQUNyRDtRQUNGO1FBRUFLLE1BQUtOLElBQVk7WUFBRSxpQ0FBR08sT0FBSDtnQkFBR0EsSUFBQUEsQ0FBSCwyQkFBYzs7WUFDL0IsaURBQWlEOzthQUMvQ1gsR0FBRyxDQUFDSSxLQUFLLElBQUksSUFBSVEsS0FBSyxHQUFHQyxHQUFHLENBQUMsQ0FBQ1I7Z0JBQzlCQSxXQUFXTTtZQUNiO1FBQ0Y7SUFDRjtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL3NyYy9zaGFyZWQvbGliL21pdHQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbk1JVCBMaWNlbnNlXG5cbkNvcHlyaWdodCAoYykgSmFzb24gTWlsbGVyIChodHRwczovL2phc29uZm9ybWF0LmNvbS8pXG5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cbiovXG5cbi8vIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L21pdHQvYmxvYi92MS4xLjMvc3JjL2luZGV4LmpzXG4vLyBJdCdzIGJlZW4gZWRpdGVkIGZvciB0aGUgbmVlZHMgb2YgdGhpcyBzY3JpcHRcbi8vIFNlZSB0aGUgTElDRU5TRSBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlXG5cbnR5cGUgSGFuZGxlciA9ICguLi5ldnRzOiBhbnlbXSkgPT4gdm9pZFxuXG5leHBvcnQgdHlwZSBNaXR0RW1pdHRlcjxUPiA9IHtcbiAgb24odHlwZTogVCwgaGFuZGxlcjogSGFuZGxlcik6IHZvaWRcbiAgb2ZmKHR5cGU6IFQsIGhhbmRsZXI6IEhhbmRsZXIpOiB2b2lkXG4gIGVtaXQodHlwZTogVCwgLi4uZXZ0czogYW55W10pOiB2b2lkXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1pdHQoKTogTWl0dEVtaXR0ZXI8c3RyaW5nPiB7XG4gIGNvbnN0IGFsbDogeyBbczogc3RyaW5nXTogSGFuZGxlcltdIH0gPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbiAgcmV0dXJuIHtcbiAgICBvbih0eXBlOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXIpIHtcbiAgICAgIDsoYWxsW3R5cGVdIHx8IChhbGxbdHlwZV0gPSBbXSkpLnB1c2goaGFuZGxlcilcbiAgICB9LFxuXG4gICAgb2ZmKHR5cGU6IHN0cmluZywgaGFuZGxlcjogSGFuZGxlcikge1xuICAgICAgaWYgKGFsbFt0eXBlXSkge1xuICAgICAgICBhbGxbdHlwZV0uc3BsaWNlKGFsbFt0eXBlXS5pbmRleE9mKGhhbmRsZXIpID4+PiAwLCAxKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBlbWl0KHR5cGU6IHN0cmluZywgLi4uZXZ0czogYW55W10pIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBhcnJheS1jYWxsYmFjay1yZXR1cm5cbiAgICAgIDsoYWxsW3R5cGVdIHx8IFtdKS5zbGljZSgpLm1hcCgoaGFuZGxlcjogSGFuZGxlcikgPT4ge1xuICAgICAgICBoYW5kbGVyKC4uLmV2dHMpXG4gICAgICB9KVxuICAgIH0sXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJtaXR0IiwiYWxsIiwiT2JqZWN0IiwiY3JlYXRlIiwib24iLCJ0eXBlIiwiaGFuZGxlciIsInB1c2giLCJvZmYiLCJzcGxpY2UiLCJpbmRleE9mIiwiZW1pdCIsImV2dHMiLCJzbGljZSIsIm1hcCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/mitt.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/modern-browserslist-target.js":
/*!*********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/modern-browserslist-target.js ***!
  \*********************************************************************************************************************************************************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("// Note: This file is JS because it's used by the taskfile-swc.js file, which is JS.\n// Keep file changes in sync with the corresponding `.d.ts` files.\n/**\n * These are the browser versions that support all of the following:\n * static import: https://caniuse.com/es6-module\n * dynamic import: https://caniuse.com/es6-module-dynamic-import\n * import.meta: https://caniuse.com/mdn-javascript_operators_import_meta\n */ \nconst MODERN_BROWSERSLIST_TARGET = [\n    'chrome 64',\n    'edge 79',\n    'firefox 67',\n    'opera 51',\n    'safari 12'\n];\nmodule.exports = MODERN_BROWSERSLIST_TARGET; //# sourceMappingURL=modern-browserslist-target.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL21vZGVybi1icm93c2Vyc2xpc3QtdGFyZ2V0LmpzIiwibWFwcGluZ3MiOiJBQUFBLG9GQUFvRjtBQUNwRixrRUFBa0U7QUFDbEU7Ozs7O0NBS0M7QUFDRCxNQUFNQSw2QkFBNkI7SUFDakM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNEO0FBRURDLE9BQU9DLE9BQU8sR0FBR0YiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL3NoYXJlZC9saWIvbW9kZXJuLWJyb3dzZXJzbGlzdC10YXJnZXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gTm90ZTogVGhpcyBmaWxlIGlzIEpTIGJlY2F1c2UgaXQncyB1c2VkIGJ5IHRoZSB0YXNrZmlsZS1zd2MuanMgZmlsZSwgd2hpY2ggaXMgSlMuXG4vLyBLZWVwIGZpbGUgY2hhbmdlcyBpbiBzeW5jIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYC5kLnRzYCBmaWxlcy5cbi8qKlxuICogVGhlc2UgYXJlIHRoZSBicm93c2VyIHZlcnNpb25zIHRoYXQgc3VwcG9ydCBhbGwgb2YgdGhlIGZvbGxvd2luZzpcbiAqIHN0YXRpYyBpbXBvcnQ6IGh0dHBzOi8vY2FuaXVzZS5jb20vZXM2LW1vZHVsZVxuICogZHluYW1pYyBpbXBvcnQ6IGh0dHBzOi8vY2FuaXVzZS5jb20vZXM2LW1vZHVsZS1keW5hbWljLWltcG9ydFxuICogaW1wb3J0Lm1ldGE6IGh0dHBzOi8vY2FuaXVzZS5jb20vbWRuLWphdmFzY3JpcHRfb3BlcmF0b3JzX2ltcG9ydF9tZXRhXG4gKi9cbmNvbnN0IE1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUID0gW1xuICAnY2hyb21lIDY0JyxcbiAgJ2VkZ2UgNzknLFxuICAnZmlyZWZveCA2NycsXG4gICdvcGVyYSA1MScsXG4gICdzYWZhcmkgMTInLFxuXVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1PREVSTl9CUk9XU0VSU0xJU1RfVEFSR0VUXG4iXSwibmFtZXMiOlsiTU9ERVJOX0JST1dTRVJTTElTVF9UQVJHRVQiLCJtb2R1bGUiLCJleHBvcnRzIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/modern-browserslist-target.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/normalized-asset-prefix.js":
/*!******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/normalized-asset-prefix.js ***!
  \******************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"normalizedAssetPrefix\", ({\n    enumerable: true,\n    get: function() {\n        return normalizedAssetPrefix;\n    }\n}));\nfunction normalizedAssetPrefix(assetPrefix) {\n    // remove all leading slashes and trailing slashes\n    const escapedAssetPrefix = (assetPrefix == null ? void 0 : assetPrefix.replace(/^\\/+|\\/+$/g, '')) || false;\n    // if an assetPrefix was '/', we return empty string\n    // because it could be an unnecessary trailing slash\n    if (!escapedAssetPrefix) {\n        return '';\n    }\n    if (URL.canParse(escapedAssetPrefix)) {\n        const url = new URL(escapedAssetPrefix).toString();\n        return url.endsWith('/') ? url.slice(0, -1) : url;\n    }\n    // assuming assetPrefix here is a pathname-style,\n    // restore the leading slash\n    return \"/\" + escapedAssetPrefix;\n} //# sourceMappingURL=normalized-asset-prefix.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL25vcm1hbGl6ZWQtYXNzZXQtcHJlZml4LmpzIiwibWFwcGluZ3MiOiI7Ozs7eURBQWdCQTs7O2VBQUFBOzs7QUFBVCxTQUFTQSxzQkFBc0JDLFdBQStCO0lBQ25FLGtEQUFrRDtJQUNsRCxNQUFNQyxxQkFBcUJELENBQUFBLGVBQUFBLE9BQUFBLEtBQUFBLElBQUFBLFlBQWFFLE9BQU8sQ0FBQyxjQUFjLFFBQU87SUFFckUsb0RBQW9EO0lBQ3BELG9EQUFvRDtJQUNwRCxJQUFJLENBQUNELG9CQUFvQjtRQUN2QixPQUFPO0lBQ1Q7SUFFQSxJQUFJRSxJQUFJQyxRQUFRLENBQUNILHFCQUFxQjtRQUNwQyxNQUFNSSxNQUFNLElBQUlGLElBQUlGLG9CQUFvQkssUUFBUTtRQUNoRCxPQUFPRCxJQUFJRSxRQUFRLENBQUMsT0FBT0YsSUFBSUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLSDtJQUNoRDtJQUVBLGlEQUFpRDtJQUNqRCw0QkFBNEI7SUFDNUIsT0FBUSxNQUFHSjtBQUNiIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL3NyYy9zaGFyZWQvbGliL25vcm1hbGl6ZWQtYXNzZXQtcHJlZml4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVkQXNzZXRQcmVmaXgoYXNzZXRQcmVmaXg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIC8vIHJlbW92ZSBhbGwgbGVhZGluZyBzbGFzaGVzIGFuZCB0cmFpbGluZyBzbGFzaGVzXG4gIGNvbnN0IGVzY2FwZWRBc3NldFByZWZpeCA9IGFzc2V0UHJlZml4Py5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJykgfHwgZmFsc2VcblxuICAvLyBpZiBhbiBhc3NldFByZWZpeCB3YXMgJy8nLCB3ZSByZXR1cm4gZW1wdHkgc3RyaW5nXG4gIC8vIGJlY2F1c2UgaXQgY291bGQgYmUgYW4gdW5uZWNlc3NhcnkgdHJhaWxpbmcgc2xhc2hcbiAgaWYgKCFlc2NhcGVkQXNzZXRQcmVmaXgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChVUkwuY2FuUGFyc2UoZXNjYXBlZEFzc2V0UHJlZml4KSkge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoZXNjYXBlZEFzc2V0UHJlZml4KS50b1N0cmluZygpXG4gICAgcmV0dXJuIHVybC5lbmRzV2l0aCgnLycpID8gdXJsLnNsaWNlKDAsIC0xKSA6IHVybFxuICB9XG5cbiAgLy8gYXNzdW1pbmcgYXNzZXRQcmVmaXggaGVyZSBpcyBhIHBhdGhuYW1lLXN0eWxlLFxuICAvLyByZXN0b3JlIHRoZSBsZWFkaW5nIHNsYXNoXG4gIHJldHVybiBgLyR7ZXNjYXBlZEFzc2V0UHJlZml4fWBcbn1cbiJdLCJuYW1lcyI6WyJub3JtYWxpemVkQXNzZXRQcmVmaXgiLCJhc3NldFByZWZpeCIsImVzY2FwZWRBc3NldFByZWZpeCIsInJlcGxhY2UiLCJVUkwiLCJjYW5QYXJzZSIsInVybCIsInRvU3RyaW5nIiwiZW5kc1dpdGgiLCJzbGljZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/normalized-asset-prefix.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js":
/*!**************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js ***!
  \**************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"denormalizePagePath\", ({\n    enumerable: true,\n    get: function() {\n        return denormalizePagePath;\n    }\n}));\nconst _utils = __webpack_require__(/*! ../router/utils */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/index.js\");\nconst _normalizepathsep = __webpack_require__(/*! ./normalize-path-sep */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js\");\nfunction denormalizePagePath(page) {\n    let _page = (0, _normalizepathsep.normalizePathSep)(page);\n    return _page.startsWith('/index/') && !(0, _utils.isDynamicRoute)(_page) ? _page.slice(6) : _page !== '/index' ? _page : '/';\n} //# sourceMappingURL=denormalize-page-path.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3BhZ2UtcGF0aC9kZW5vcm1hbGl6ZS1wYWdlLXBhdGguanMiLCJtYXBwaW5ncyI6Ijs7Ozt1REFXZ0JBOzs7ZUFBQUE7OzttQ0FYZTs4Q0FDRTtBQVUxQixTQUFTQSxvQkFBb0JDLElBQVk7SUFDOUMsSUFBSUMsUUFBUUMsQ0FBQUEsR0FBQUEsa0JBQUFBLGdCQUFBQSxFQUFpQkY7SUFDN0IsT0FBT0MsTUFBTUUsVUFBVSxDQUFDLGNBQWMsQ0FBQ0MsQ0FBQUEsR0FBQUEsT0FBQUEsY0FBQUEsRUFBZUgsU0FDbERBLE1BQU1JLEtBQUssQ0FBQyxLQUNaSixVQUFVLFdBQ1JBLFFBQ0E7QUFDUiIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL3NoYXJlZC9saWIvcGFnZS1wYXRoL2Rlbm9ybWFsaXplLXBhZ2UtcGF0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0R5bmFtaWNSb3V0ZSB9IGZyb20gJy4uL3JvdXRlci91dGlscydcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGhTZXAgfSBmcm9tICcuL25vcm1hbGl6ZS1wYXRoLXNlcCdcblxuLyoqXG4gKiBQZXJmb3JtcyB0aGUgb3Bwb3NpdGUgdHJhbnNmb3JtYXRpb24gb2YgYG5vcm1hbGl6ZVBhZ2VQYXRoYC4gTm90ZSB0aGF0XG4gKiB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBpZGVtcG90ZW50IGVpdGhlciBpbiBjYXNlcyB3aGVyZSB0aGVyZSBhcmUgbXVsdGlwbGVcbiAqIGxlYWRpbmcgYC9pbmRleGAgZm9yIHRoZSBwYWdlLiBFeGFtcGxlczpcbiAqICAtIGAvaW5kZXhgIC0+IGAvYFxuICogIC0gYC9pbmRleC9mb29gIC0+IGAvZm9vYFxuICogIC0gYC9pbmRleC9pbmRleGAgLT4gYC9pbmRleGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbm9ybWFsaXplUGFnZVBhdGgocGFnZTogc3RyaW5nKSB7XG4gIGxldCBfcGFnZSA9IG5vcm1hbGl6ZVBhdGhTZXAocGFnZSlcbiAgcmV0dXJuIF9wYWdlLnN0YXJ0c1dpdGgoJy9pbmRleC8nKSAmJiAhaXNEeW5hbWljUm91dGUoX3BhZ2UpXG4gICAgPyBfcGFnZS5zbGljZSg2KVxuICAgIDogX3BhZ2UgIT09ICcvaW5kZXgnXG4gICAgICA/IF9wYWdlXG4gICAgICA6ICcvJ1xufVxuIl0sIm5hbWVzIjpbImRlbm9ybWFsaXplUGFnZVBhdGgiLCJwYWdlIiwiX3BhZ2UiLCJub3JtYWxpemVQYXRoU2VwIiwic3RhcnRzV2l0aCIsImlzRHluYW1pY1JvdXRlIiwic2xpY2UiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js":
/*!*************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js ***!
  \*************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"ensureLeadingSlash\", ({\n    enumerable: true,\n    get: function() {\n        return ensureLeadingSlash;\n    }\n}));\nfunction ensureLeadingSlash(path) {\n    return path.startsWith('/') ? path : \"/\" + path;\n} //# sourceMappingURL=ensure-leading-slash.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3BhZ2UtcGF0aC9lbnN1cmUtbGVhZGluZy1zbGFzaC5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0M7Ozs7c0RBQ2VBOzs7ZUFBQUE7OztBQUFULFNBQVNBLG1CQUFtQkMsSUFBWTtJQUM3QyxPQUFPQSxLQUFLQyxVQUFVLENBQUMsT0FBT0QsT0FBUSxNQUFHQTtBQUMzQyIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL3NoYXJlZC9saWIvcGFnZS1wYXRoL2Vuc3VyZS1sZWFkaW5nLXNsYXNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9yIGEgZ2l2ZW4gcGFnZSBwYXRoLCB0aGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB0aGVyZSBpcyBhIGxlYWRpbmcgc2xhc2guXG4gKiBJZiB0aGVyZSBpcyBub3QgYSBsZWFkaW5nIHNsYXNoLCBvbmUgaXMgYWRkZWQsIG90aGVyd2lzZSBpdCBpcyBub29wLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTGVhZGluZ1NsYXNoKHBhdGg6IHN0cmluZykge1xuICByZXR1cm4gcGF0aC5zdGFydHNXaXRoKCcvJykgPyBwYXRoIDogYC8ke3BhdGh9YFxufVxuIl0sIm5hbWVzIjpbImVuc3VyZUxlYWRpbmdTbGFzaCIsInBhdGgiLCJzdGFydHNXaXRoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js":
/*!***********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js ***!
  \***********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/**\n * For a given page path, this function ensures that there is no backslash\n * escaping slashes in the path. Example:\n *  - `foo\\/bar\\/baz` -> `foo/bar/baz`\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"normalizePathSep\", ({\n    enumerable: true,\n    get: function() {\n        return normalizePathSep;\n    }\n}));\nfunction normalizePathSep(path) {\n    return path.replace(/\\\\/g, '/');\n} //# sourceMappingURL=normalize-path-sep.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3BhZ2UtcGF0aC9ub3JtYWxpemUtcGF0aC1zZXAuanMiLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Q0FJQzs7OztvREFDZUE7OztlQUFBQTs7O0FBQVQsU0FBU0EsaUJBQWlCQyxJQUFZO0lBQzNDLE9BQU9BLEtBQUtDLE9BQU8sQ0FBQyxPQUFPO0FBQzdCIiwic291cmNlcyI6WyIvaG9tZS9zcmMvc2hhcmVkL2xpYi9wYWdlLXBhdGgvbm9ybWFsaXplLXBhdGgtc2VwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9yIGEgZ2l2ZW4gcGFnZSBwYXRoLCB0aGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB0aGVyZSBpcyBubyBiYWNrc2xhc2hcbiAqIGVzY2FwaW5nIHNsYXNoZXMgaW4gdGhlIHBhdGguIEV4YW1wbGU6XG4gKiAgLSBgZm9vXFwvYmFyXFwvYmF6YCAtPiBgZm9vL2Jhci9iYXpgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQYXRoU2VwKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxufVxuIl0sIm5hbWVzIjpbIm5vcm1hbGl6ZVBhdGhTZXAiLCJwYXRoIiwicmVwbGFjZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router-context.shared-runtime.js":
/*!************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router-context.shared-runtime.js ***!
  \************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"RouterContext\", ({\n    enumerable: true,\n    get: function() {\n        return RouterContext;\n    }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"));\nconst RouterContext = _react.default.createContext(null);\nif (true) {\n    RouterContext.displayName = 'RouterContext';\n} //# sourceMappingURL=router-context.shared-runtime.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiI7Ozs7aURBR2FBOzs7ZUFBQUE7Ozs7NEVBSEs7QUFHWCxNQUFNQSxnQkFBZ0JDLE9BQUFBLE9BQUssQ0FBQ0MsYUFBYSxDQUFvQjtBQUVwRSxJQUFJQyxJQUFvQixFQUFtQjtJQUN6Q0gsY0FBY00sV0FBVyxHQUFHO0FBQzlCIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL3NyYy9zaGFyZWQvbGliL3JvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgTmV4dFJvdXRlciB9IGZyb20gJy4vcm91dGVyL3JvdXRlcidcblxuZXhwb3J0IGNvbnN0IFJvdXRlckNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PE5leHRSb3V0ZXIgfCBudWxsPihudWxsKVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBSb3V0ZXJDb250ZXh0LmRpc3BsYXlOYW1lID0gJ1JvdXRlckNvbnRleHQnXG59XG4iXSwibmFtZXMiOlsiUm91dGVyQ29udGV4dCIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImRpc3BsYXlOYW1lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router-context.shared-runtime.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/router.js":
/*!********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/router.js ***!
  \********************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("// tslint:disable:no-console\n\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    createKey: function() {\n        return createKey;\n    },\n    default: function() {\n        return Router;\n    },\n    matchesMiddleware: function() {\n        return matchesMiddleware;\n    }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _removetrailingslash = __webpack_require__(/*! ./utils/remove-trailing-slash */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _routeloader = __webpack_require__(/*! ../../../client/route-loader */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/route-loader.js\");\nconst _script = __webpack_require__(/*! ../../../client/script */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/script.js\");\nconst _iserror = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ../../../lib/is-error */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/is-error.js\"));\nconst _denormalizepagepath = __webpack_require__(/*! ../page-path/denormalize-page-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js\");\nconst _normalizelocalepath = __webpack_require__(/*! ../i18n/normalize-locale-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\");\nconst _mitt = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../mitt */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/mitt.js\"));\nconst _utils = __webpack_require__(/*! ../utils */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/utils.js\");\nconst _isdynamic = __webpack_require__(/*! ./utils/is-dynamic */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\");\nconst _parserelativeurl = __webpack_require__(/*! ./utils/parse-relative-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\");\nconst _routematcher = __webpack_require__(/*! ./utils/route-matcher */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/route-matcher.js\");\nconst _routeregex = __webpack_require__(/*! ./utils/route-regex */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nconst _formaturl = __webpack_require__(/*! ./utils/format-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _detectdomainlocale = __webpack_require__(/*! ../../../client/detect-domain-locale */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/detect-domain-locale.js\");\nconst _parsepath = __webpack_require__(/*! ./utils/parse-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nconst _addlocale = __webpack_require__(/*! ../../../client/add-locale */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/add-locale.js\");\nconst _removelocale = __webpack_require__(/*! ../../../client/remove-locale */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/remove-locale.js\");\nconst _removebasepath = __webpack_require__(/*! ../../../client/remove-base-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/remove-base-path.js\");\nconst _addbasepath = __webpack_require__(/*! ../../../client/add-base-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/add-base-path.js\");\nconst _hasbasepath = __webpack_require__(/*! ../../../client/has-base-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/has-base-path.js\");\nconst _resolvehref = __webpack_require__(/*! ../../../client/resolve-href */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/resolve-href.js\");\nconst _isapiroute = __webpack_require__(/*! ../../../lib/is-api-route */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/is-api-route.js\");\nconst _getnextpathnameinfo = __webpack_require__(/*! ./utils/get-next-pathname-info */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js\");\nconst _formatnextpathnameinfo = __webpack_require__(/*! ./utils/format-next-pathname-info */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js\");\nconst _comparestates = __webpack_require__(/*! ./utils/compare-states */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/compare-states.js\");\nconst _islocalurl = __webpack_require__(/*! ./utils/is-local-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _isbot = __webpack_require__(/*! ./utils/is-bot */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/is-bot.js\");\nconst _omit = __webpack_require__(/*! ./utils/omit */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/omit.js\");\nconst _interpolateas = __webpack_require__(/*! ./utils/interpolate-as */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\");\nconst _disablesmoothscroll = __webpack_require__(/*! ./utils/disable-smooth-scroll */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/disable-smooth-scroll.js\");\nconst _constants = __webpack_require__(/*! ../../../lib/constants */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/constants.js\");\nlet resolveRewrites;\nif (true) {\n    resolveRewrites = (__webpack_require__(/*! ./utils/resolve-rewrites */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/resolve-rewrites.js\")[\"default\"]);\n}\nfunction buildCancellationError() {\n    return Object.assign(Object.defineProperty(new Error('Route Cancelled'), \"__NEXT_ERROR_CODE\", {\n        value: \"E315\",\n        enumerable: false,\n        configurable: true\n    }), {\n        cancelled: true\n    });\n}\nasync function matchesMiddleware(options) {\n    const matchers = await Promise.resolve(options.router.pageLoader.getMiddleware());\n    if (!matchers) return false;\n    const { pathname: asPathname } = (0, _parsepath.parsePath)(options.asPath);\n    // remove basePath first since path prefix has to be in the order of `/${basePath}/${locale}`\n    const cleanedAs = (0, _hasbasepath.hasBasePath)(asPathname) ? (0, _removebasepath.removeBasePath)(asPathname) : asPathname;\n    const asWithBasePathAndLocale = (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(cleanedAs, options.locale));\n    // Check only path match on client. Matching \"has\" should be done on server\n    // where we can access more info such as headers, HttpOnly cookie, etc.\n    return matchers.some((m)=>new RegExp(m.regexp).test(asWithBasePathAndLocale));\n}\nfunction stripOrigin(url) {\n    const origin = (0, _utils.getLocationOrigin)();\n    return url.startsWith(origin) ? url.substring(origin.length) : url;\n}\nfunction prepareUrlAs(router, url, as) {\n    // If url and as provided as an object representation,\n    // we'll format them into the string version here.\n    let [resolvedHref, resolvedAs] = (0, _resolvehref.resolveHref)(router, url, true);\n    const origin = (0, _utils.getLocationOrigin)();\n    const hrefWasAbsolute = resolvedHref.startsWith(origin);\n    const asWasAbsolute = resolvedAs && resolvedAs.startsWith(origin);\n    resolvedHref = stripOrigin(resolvedHref);\n    resolvedAs = resolvedAs ? stripOrigin(resolvedAs) : resolvedAs;\n    const preparedUrl = hrefWasAbsolute ? resolvedHref : (0, _addbasepath.addBasePath)(resolvedHref);\n    const preparedAs = as ? stripOrigin((0, _resolvehref.resolveHref)(router, as)) : resolvedAs || resolvedHref;\n    return {\n        url: preparedUrl,\n        as: asWasAbsolute ? preparedAs : (0, _addbasepath.addBasePath)(preparedAs)\n    };\n}\nfunction resolveDynamicRoute(pathname, pages) {\n    const cleanPathname = (0, _removetrailingslash.removeTrailingSlash)((0, _denormalizepagepath.denormalizePagePath)(pathname));\n    if (cleanPathname === '/404' || cleanPathname === '/_error') {\n        return pathname;\n    }\n    // handle resolving href for dynamic routes\n    if (!pages.includes(cleanPathname)) {\n        // eslint-disable-next-line array-callback-return\n        pages.some((page)=>{\n            if ((0, _isdynamic.isDynamicRoute)(page) && (0, _routeregex.getRouteRegex)(page).re.test(cleanPathname)) {\n                pathname = page;\n                return true;\n            }\n        });\n    }\n    return (0, _removetrailingslash.removeTrailingSlash)(pathname);\n}\nfunction getMiddlewareData(source, response, options) {\n    const nextConfig = {\n        basePath: options.router.basePath,\n        i18n: {\n            locales: options.router.locales\n        },\n        trailingSlash: Boolean(false)\n    };\n    const rewriteHeader = response.headers.get('x-nextjs-rewrite');\n    let rewriteTarget = rewriteHeader || response.headers.get('x-nextjs-matched-path');\n    const matchedPath = response.headers.get(_constants.MATCHED_PATH_HEADER);\n    if (matchedPath && !rewriteTarget && !matchedPath.includes('__next_data_catchall') && !matchedPath.includes('/_error') && !matchedPath.includes('/404')) {\n        // leverage x-matched-path to detect next.config.js rewrites\n        rewriteTarget = matchedPath;\n    }\n    if (rewriteTarget) {\n        if (rewriteTarget.startsWith('/') || false) {\n            const parsedRewriteTarget = (0, _parserelativeurl.parseRelativeUrl)(rewriteTarget);\n            const pathnameInfo = (0, _getnextpathnameinfo.getNextPathnameInfo)(parsedRewriteTarget.pathname, {\n                nextConfig,\n                parseData: true\n            });\n            let fsPathname = (0, _removetrailingslash.removeTrailingSlash)(pathnameInfo.pathname);\n            return Promise.all([\n                options.router.pageLoader.getPageList(),\n                (0, _routeloader.getClientBuildManifest)()\n            ]).then((param)=>{\n                let [pages, { __rewrites: rewrites }] = param;\n                let as = (0, _addlocale.addLocale)(pathnameInfo.pathname, pathnameInfo.locale);\n                if ((0, _isdynamic.isDynamicRoute)(as) || !rewriteHeader && pages.includes((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(as), options.router.locales).pathname)) {\n                    const parsedSource = (0, _getnextpathnameinfo.getNextPathnameInfo)((0, _parserelativeurl.parseRelativeUrl)(source).pathname, {\n                        nextConfig:  true ? undefined : 0,\n                        parseData: true\n                    });\n                    as = (0, _addbasepath.addBasePath)(parsedSource.pathname);\n                    parsedRewriteTarget.pathname = as;\n                }\n                if (true) {\n                    const result = resolveRewrites(as, pages, rewrites, parsedRewriteTarget.query, (path)=>resolveDynamicRoute(path, pages), options.router.locales);\n                    if (result.matchedPage) {\n                        parsedRewriteTarget.pathname = result.parsedAs.pathname;\n                        as = parsedRewriteTarget.pathname;\n                        Object.assign(parsedRewriteTarget.query, result.parsedAs.query);\n                    }\n                } else {}\n                const resolvedHref = !pages.includes(fsPathname) ? resolveDynamicRoute((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(parsedRewriteTarget.pathname), options.router.locales).pathname, pages) : fsPathname;\n                if ((0, _isdynamic.isDynamicRoute)(resolvedHref)) {\n                    const matches = (0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(resolvedHref))(as);\n                    Object.assign(parsedRewriteTarget.query, matches || {});\n                }\n                return {\n                    type: 'rewrite',\n                    parsedAs: parsedRewriteTarget,\n                    resolvedHref\n                };\n            });\n        }\n        const src = (0, _parsepath.parsePath)(source);\n        const pathname = (0, _formatnextpathnameinfo.formatNextPathnameInfo)({\n            ...(0, _getnextpathnameinfo.getNextPathnameInfo)(src.pathname, {\n                nextConfig,\n                parseData: true\n            }),\n            defaultLocale: options.router.defaultLocale,\n            buildId: ''\n        });\n        return Promise.resolve({\n            type: 'redirect-external',\n            destination: \"\" + pathname + src.query + src.hash\n        });\n    }\n    const redirectTarget = response.headers.get('x-nextjs-redirect');\n    if (redirectTarget) {\n        if (redirectTarget.startsWith('/')) {\n            const src = (0, _parsepath.parsePath)(redirectTarget);\n            const pathname = (0, _formatnextpathnameinfo.formatNextPathnameInfo)({\n                ...(0, _getnextpathnameinfo.getNextPathnameInfo)(src.pathname, {\n                    nextConfig,\n                    parseData: true\n                }),\n                defaultLocale: options.router.defaultLocale,\n                buildId: ''\n            });\n            return Promise.resolve({\n                type: 'redirect-internal',\n                newAs: \"\" + pathname + src.query + src.hash,\n                newUrl: \"\" + pathname + src.query + src.hash\n            });\n        }\n        return Promise.resolve({\n            type: 'redirect-external',\n            destination: redirectTarget\n        });\n    }\n    return Promise.resolve({\n        type: 'next'\n    });\n}\nasync function withMiddlewareEffects(options) {\n    const matches = await matchesMiddleware(options);\n    if (!matches || !options.fetchData) {\n        return null;\n    }\n    const data = await options.fetchData();\n    const effect = await getMiddlewareData(data.dataHref, data.response, options);\n    return {\n        dataHref: data.dataHref,\n        json: data.json,\n        response: data.response,\n        text: data.text,\n        cacheKey: data.cacheKey,\n        effect\n    };\n}\nconst manualScrollRestoration =  false && 0;\nconst SSG_DATA_NOT_FOUND = Symbol('SSG_DATA_NOT_FOUND');\nfunction fetchRetry(url, attempts, options) {\n    return fetch(url, {\n        // Cookies are required to be present for Next.js' SSG \"Preview Mode\".\n        // Cookies may also be required for `getServerSideProps`.\n        //\n        // > `fetch` won’t send cookies, unless you set the credentials init\n        // > option.\n        // https://developer.mozilla.org/docs/Web/API/Fetch_API/Using_Fetch\n        //\n        // > For maximum browser compatibility when it comes to sending &\n        // > receiving cookies, always supply the `credentials: 'same-origin'`\n        // > option instead of relying on the default.\n        // https://github.com/github/fetch#caveats\n        credentials: 'same-origin',\n        method: options.method || 'GET',\n        headers: Object.assign({}, options.headers, {\n            'x-nextjs-data': '1'\n        })\n    }).then((response)=>{\n        return !response.ok && attempts > 1 && response.status >= 500 ? fetchRetry(url, attempts - 1, options) : response;\n    });\n}\nfunction tryToParseAsJSON(text) {\n    try {\n        return JSON.parse(text);\n    } catch (error) {\n        return null;\n    }\n}\nfunction fetchNextData(param) {\n    let { dataHref, inflightCache, isPrefetch, hasMiddleware, isServerRender, parseJSON, persistCache, isBackground, unstable_skipClientCache } = param;\n    const { href: cacheKey } = new URL(dataHref, window.location.href);\n    const getData = (params)=>{\n        var _params_method;\n        return fetchRetry(dataHref, isServerRender ? 3 : 1, {\n            headers: Object.assign({}, isPrefetch ? {\n                purpose: 'prefetch'\n            } : {}, isPrefetch && hasMiddleware ? {\n                'x-middleware-prefetch': '1'\n            } : {},  false ? 0 : {}),\n            method: (_params_method = params == null ? void 0 : params.method) != null ? _params_method : 'GET'\n        }).then((response)=>{\n            if (response.ok && (params == null ? void 0 : params.method) === 'HEAD') {\n                return {\n                    dataHref,\n                    response,\n                    text: '',\n                    json: {},\n                    cacheKey\n                };\n            }\n            return response.text().then((text)=>{\n                if (!response.ok) {\n                    /**\n             * When the data response is a redirect because of a middleware\n             * we do not consider it an error. The headers must bring the\n             * mapped location.\n             * TODO: Change the status code in the handler.\n             */ if (hasMiddleware && [\n                        301,\n                        302,\n                        307,\n                        308\n                    ].includes(response.status)) {\n                        return {\n                            dataHref,\n                            response,\n                            text,\n                            json: {},\n                            cacheKey\n                        };\n                    }\n                    if (response.status === 404) {\n                        var _tryToParseAsJSON;\n                        if ((_tryToParseAsJSON = tryToParseAsJSON(text)) == null ? void 0 : _tryToParseAsJSON.notFound) {\n                            return {\n                                dataHref,\n                                json: {\n                                    notFound: SSG_DATA_NOT_FOUND\n                                },\n                                response,\n                                text,\n                                cacheKey\n                            };\n                        }\n                    }\n                    const error = Object.defineProperty(new Error(\"Failed to load static props\"), \"__NEXT_ERROR_CODE\", {\n                        value: \"E124\",\n                        enumerable: false,\n                        configurable: true\n                    });\n                    /**\n             * We should only trigger a server-side transition if this was\n             * caused on a client-side transition. Otherwise, we'd get into\n             * an infinite loop.\n             */ if (!isServerRender) {\n                        (0, _routeloader.markAssetError)(error);\n                    }\n                    throw error;\n                }\n                return {\n                    dataHref,\n                    json: parseJSON ? tryToParseAsJSON(text) : null,\n                    response,\n                    text,\n                    cacheKey\n                };\n            });\n        }).then((data)=>{\n            if (!persistCache || \"development\" !== 'production' || 0) {\n                delete inflightCache[cacheKey];\n            }\n            return data;\n        }).catch((err)=>{\n            if (!unstable_skipClientCache) {\n                delete inflightCache[cacheKey];\n            }\n            if (err.message === 'Failed to fetch' || // firefox\n            err.message === 'NetworkError when attempting to fetch resource.' || // safari\n            err.message === 'Load failed') {\n                (0, _routeloader.markAssetError)(err);\n            }\n            throw err;\n        });\n    };\n    // when skipping client cache we wait to update\n    // inflight cache until successful data response\n    // this allows racing click event with fetching newer data\n    // without blocking navigation when stale data is available\n    if (unstable_skipClientCache && persistCache) {\n        return getData({}).then((data)=>{\n            if (data.response.headers.get('x-middleware-cache') !== 'no-cache') {\n                // only update cache if not marked as no-cache\n                inflightCache[cacheKey] = Promise.resolve(data);\n            }\n            return data;\n        });\n    }\n    if (inflightCache[cacheKey] !== undefined) {\n        return inflightCache[cacheKey];\n    }\n    return inflightCache[cacheKey] = getData(isBackground ? {\n        method: 'HEAD'\n    } : {});\n}\nfunction createKey() {\n    return Math.random().toString(36).slice(2, 10);\n}\nfunction handleHardNavigation(param) {\n    let { url, router } = param;\n    // ensure we don't trigger a hard navigation to the same\n    // URL as this can end up with an infinite refresh\n    if (url === (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(router.asPath, router.locale))) {\n        throw Object.defineProperty(new Error(\"Invariant: attempted to hard navigate to the same URL \" + url + \" \" + location.href), \"__NEXT_ERROR_CODE\", {\n            value: \"E282\",\n            enumerable: false,\n            configurable: true\n        });\n    }\n    window.location.href = url;\n}\nconst getCancelledHandler = (param)=>{\n    let { route, router } = param;\n    let cancelled = false;\n    const cancel = router.clc = ()=>{\n        cancelled = true;\n    };\n    const handleCancelled = ()=>{\n        if (cancelled) {\n            const error = Object.defineProperty(new Error('Abort fetching component for route: \"' + route + '\"'), \"__NEXT_ERROR_CODE\", {\n                value: \"E483\",\n                enumerable: false,\n                configurable: true\n            });\n            error.cancelled = true;\n            throw error;\n        }\n        if (cancel === router.clc) {\n            router.clc = null;\n        }\n    };\n    return handleCancelled;\n};\nclass Router {\n    reload() {\n        window.location.reload();\n    }\n    /**\n   * Go back in history\n   */ back() {\n        window.history.back();\n    }\n    /**\n   * Go forward in history\n   */ forward() {\n        window.history.forward();\n    }\n    /**\n   * Performs a `pushState` with arguments\n   * @param url of the route\n   * @param as masks `url` for the browser\n   * @param options object you can define `shallow` and other options\n   */ push(url, as, options) {\n        if (options === void 0) options = {};\n        if (false) {}\n        ;\n        ({ url, as } = prepareUrlAs(this, url, as));\n        return this.change('pushState', url, as, options);\n    }\n    /**\n   * Performs a `replaceState` with arguments\n   * @param url of the route\n   * @param as masks `url` for the browser\n   * @param options object you can define `shallow` and other options\n   */ replace(url, as, options) {\n        if (options === void 0) options = {};\n        ;\n        ({ url, as } = prepareUrlAs(this, url, as));\n        return this.change('replaceState', url, as, options);\n    }\n    async _bfl(as, resolvedAs, locale, skipNavigate) {\n        if (true) {\n            if (!this._bfl_s && !this._bfl_d) {\n                const { BloomFilter } = __webpack_require__(/*! ../../lib/bloom-filter */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/bloom-filter.js\");\n                let staticFilterData;\n                let dynamicFilterData;\n                try {\n                    ;\n                    ({ __routerFilterStatic: staticFilterData, __routerFilterDynamic: dynamicFilterData } = await (0, _routeloader.getClientBuildManifest)());\n                } catch (err) {\n                    // failed to load build manifest hard navigate\n                    // to be safe\n                    console.error(err);\n                    if (skipNavigate) {\n                        return true;\n                    }\n                    handleHardNavigation({\n                        url: (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(as, locale || this.locale, this.defaultLocale)),\n                        router: this\n                    });\n                    return new Promise(()=>{});\n                }\n                const routerFilterSValue = {\"numItems\":55,\"errorRate\":0.0001,\"numBits\":1055,\"numHashes\":14,\"bitArray\":[0,1,0,1,1,0,1,0,0,1,1,1,0,0,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0,0,1,1,0,1,1,0,1,1,1,1,0,0,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1,0,1,0,0,1,1,1,0,0,0,0,1,1,0,0,1,0,1,0,1,1,0,0,1,0,0,1,0,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,1,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,0,1,0,0,1,0,1,0,0,1,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,1,0,0,1,1,0,1,1,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,1,1,0,0,1,0,1,0,1,1,1,0,0,1,0,0,1,1,1,0,0,0,1,0,0,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,1,0,0,0,0,0,1,1,1,0,0,1,1,1,1,0,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0,1,1,0,0,1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,0,1,0,1,0,0,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,1,0,1,0,1,1,1,1,0,0,1,0,1,0,0,1,0,0,1,0,0,1,1,1,1,1,0,0,1,0,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,1,1,1,0,0,0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,0,0,0,1,0,1,1,0,1,0,1,0,0,0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,0,0,1,0,0,1,1,1,1,1,1,0,1,0,0,1,1,0,1,1,1,0,0,0,0,0,1,0,0,1,0,1,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,0,0,0,0,1,1,0,1,0,0,1,1,1,1,0,0,0,0,1,1,0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,1,0,1,0,0,1,1,0,0,0,0,1,0,1,1,0,1,0,0,1,1,0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1,0,0,0,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,0,1,1,0,0,1,1,1,0,1,0,1,0,1,1,0,1,1,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,1,1,0,0,1,1,1,1,1,1,1,0,1,0,0,1,1,0,0,1,1,1,0,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,1,0,1,1,0,0,1,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,0,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,0,0,1,0,1,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1,0,0,0,1,0,0,1,1,1,1,1,0,0,1,0,0,1,1,1,1,0,0,0,0]};\n                if (!staticFilterData && routerFilterSValue) {\n                    staticFilterData = routerFilterSValue ? routerFilterSValue : undefined;\n                }\n                const routerFilterDValue = {\"numItems\":2,\"errorRate\":0.0001,\"numBits\":39,\"numHashes\":14,\"bitArray\":[0,1,1,1,1,0,0,1,0,0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0]};\n                if (!dynamicFilterData && routerFilterDValue) {\n                    dynamicFilterData = routerFilterDValue ? routerFilterDValue : undefined;\n                }\n                if (staticFilterData == null ? void 0 : staticFilterData.numHashes) {\n                    this._bfl_s = new BloomFilter(staticFilterData.numItems, staticFilterData.errorRate);\n                    this._bfl_s.import(staticFilterData);\n                }\n                if (dynamicFilterData == null ? void 0 : dynamicFilterData.numHashes) {\n                    this._bfl_d = new BloomFilter(dynamicFilterData.numItems, dynamicFilterData.errorRate);\n                    this._bfl_d.import(dynamicFilterData);\n                }\n            }\n            let matchesBflStatic = false;\n            let matchesBflDynamic = false;\n            const pathsToCheck = [\n                {\n                    as\n                },\n                {\n                    as: resolvedAs\n                }\n            ];\n            for (const { as: curAs, allowMatchCurrent } of pathsToCheck){\n                if (curAs) {\n                    const asNoSlash = (0, _removetrailingslash.removeTrailingSlash)(new URL(curAs, 'http://n').pathname);\n                    const asNoSlashLocale = (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(asNoSlash, locale || this.locale));\n                    if (allowMatchCurrent || asNoSlash !== (0, _removetrailingslash.removeTrailingSlash)(new URL(this.asPath, 'http://n').pathname)) {\n                        var _this__bfl_s, _this__bfl_s1;\n                        matchesBflStatic = matchesBflStatic || !!((_this__bfl_s = this._bfl_s) == null ? void 0 : _this__bfl_s.contains(asNoSlash)) || !!((_this__bfl_s1 = this._bfl_s) == null ? void 0 : _this__bfl_s1.contains(asNoSlashLocale));\n                        for (const normalizedAS of [\n                            asNoSlash,\n                            asNoSlashLocale\n                        ]){\n                            // if any sub-path of as matches a dynamic filter path\n                            // it should be hard navigated\n                            const curAsParts = normalizedAS.split('/');\n                            for(let i = 0; !matchesBflDynamic && i < curAsParts.length + 1; i++){\n                                var _this__bfl_d;\n                                const currentPart = curAsParts.slice(0, i).join('/');\n                                if (currentPart && ((_this__bfl_d = this._bfl_d) == null ? void 0 : _this__bfl_d.contains(currentPart))) {\n                                    matchesBflDynamic = true;\n                                    break;\n                                }\n                            }\n                        }\n                        // if the client router filter is matched then we trigger\n                        // a hard navigation\n                        if (matchesBflStatic || matchesBflDynamic) {\n                            if (skipNavigate) {\n                                return true;\n                            }\n                            handleHardNavigation({\n                                url: (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(as, locale || this.locale, this.defaultLocale)),\n                                router: this\n                            });\n                            return new Promise(()=>{});\n                        }\n                    }\n                }\n            }\n        }\n        return false;\n    }\n    async change(method, url, as, options, forcedScroll) {\n        var _this_components_pathname;\n        if (!(0, _islocalurl.isLocalURL)(url)) {\n            handleHardNavigation({\n                url,\n                router: this\n            });\n            return false;\n        }\n        // WARNING: `_h` is an internal option for handing Next.js client-side\n        // hydration. Your app should _never_ use this property. It may change at\n        // any time without notice.\n        const isQueryUpdating = options._h === 1;\n        if (!isQueryUpdating && !options.shallow) {\n            await this._bfl(as, undefined, options.locale);\n        }\n        let shouldResolveHref = isQueryUpdating || options._shouldResolveHref || (0, _parsepath.parsePath)(url).pathname === (0, _parsepath.parsePath)(as).pathname;\n        const nextState = {\n            ...this.state\n        };\n        // for static pages with query params in the URL we delay\n        // marking the router ready until after the query is updated\n        // or a navigation has occurred\n        const readyStateChange = this.isReady !== true;\n        this.isReady = true;\n        const isSsr = this.isSsr;\n        if (!isQueryUpdating) {\n            this.isSsr = false;\n        }\n        // if a route transition is already in progress before\n        // the query updating is triggered ignore query updating\n        if (isQueryUpdating && this.clc) {\n            return false;\n        }\n        const prevLocale = nextState.locale;\n        if (false) { var _this_locales; }\n        // marking route changes as a navigation start entry\n        if (_utils.ST) {\n            performance.mark('routeChange');\n        }\n        const { shallow = false, scroll = true } = options;\n        const routeProps = {\n            shallow\n        };\n        if (this._inFlightRoute && this.clc) {\n            if (!isSsr) {\n                Router.events.emit('routeChangeError', buildCancellationError(), this._inFlightRoute, routeProps);\n            }\n            this.clc();\n            this.clc = null;\n        }\n        as = (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)((0, _hasbasepath.hasBasePath)(as) ? (0, _removebasepath.removeBasePath)(as) : as, options.locale, this.defaultLocale));\n        const cleanedAs = (0, _removelocale.removeLocale)((0, _hasbasepath.hasBasePath)(as) ? (0, _removebasepath.removeBasePath)(as) : as, nextState.locale);\n        this._inFlightRoute = as;\n        const localeChange = prevLocale !== nextState.locale;\n        // If the url change is only related to a hash change\n        // We should not proceed. We should only change the state.\n        if (!isQueryUpdating && this.onlyAHashChange(cleanedAs) && !localeChange) {\n            nextState.asPath = cleanedAs;\n            Router.events.emit('hashChangeStart', as, routeProps);\n            // TODO: do we need the resolved href when only a hash change?\n            this.changeState(method, url, as, {\n                ...options,\n                scroll: false\n            });\n            if (scroll) {\n                this.scrollToHash(cleanedAs);\n            }\n            try {\n                await this.set(nextState, this.components[nextState.route], null);\n            } catch (err) {\n                if ((0, _iserror.default)(err) && err.cancelled) {\n                    Router.events.emit('routeChangeError', err, cleanedAs, routeProps);\n                }\n                throw err;\n            }\n            Router.events.emit('hashChangeComplete', as, routeProps);\n            return true;\n        }\n        let parsed = (0, _parserelativeurl.parseRelativeUrl)(url);\n        let { pathname, query } = parsed;\n        // The build manifest needs to be loaded before auto-static dynamic pages\n        // get their query parameters to allow ensuring they can be parsed properly\n        // when rewritten to\n        let pages, rewrites;\n        try {\n            ;\n            [pages, { __rewrites: rewrites }] = await Promise.all([\n                this.pageLoader.getPageList(),\n                (0, _routeloader.getClientBuildManifest)(),\n                this.pageLoader.getMiddleware()\n            ]);\n        } catch (err) {\n            // If we fail to resolve the page list or client-build manifest, we must\n            // do a server-side transition:\n            handleHardNavigation({\n                url: as,\n                router: this\n            });\n            return false;\n        }\n        // If asked to change the current URL we should reload the current page\n        // (not location.reload() but reload getInitialProps and other Next.js stuffs)\n        // We also need to set the method = replaceState always\n        // as this should not go into the history (That's how browsers work)\n        // We should compare the new asPath to the current asPath, not the url\n        if (!this.urlIsNew(cleanedAs) && !localeChange) {\n            method = 'replaceState';\n        }\n        // we need to resolve the as value using rewrites for dynamic SSG\n        // pages to allow building the data URL correctly\n        let resolvedAs = as;\n        // url and as should always be prefixed with basePath by this\n        // point by either next/link or router.push/replace so strip the\n        // basePath from the pathname to match the pages dir 1-to-1\n        pathname = pathname ? (0, _removetrailingslash.removeTrailingSlash)((0, _removebasepath.removeBasePath)(pathname)) : pathname;\n        let route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n        const parsedAsPathname = as.startsWith('/') && (0, _parserelativeurl.parseRelativeUrl)(as).pathname;\n        // if we detected the path as app route during prefetching\n        // trigger hard navigation\n        if ((_this_components_pathname = this.components[pathname]) == null ? void 0 : _this_components_pathname.__appRouter) {\n            handleHardNavigation({\n                url: as,\n                router: this\n            });\n            return new Promise(()=>{});\n        }\n        const isMiddlewareRewrite = !!(parsedAsPathname && route !== parsedAsPathname && (!(0, _isdynamic.isDynamicRoute)(route) || !(0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(route))(parsedAsPathname)));\n        // we don't attempt resolve asPath when we need to execute\n        // middleware as the resolving will occur server-side\n        const isMiddlewareMatch = !options.shallow && await matchesMiddleware({\n            asPath: as,\n            locale: nextState.locale,\n            router: this\n        });\n        if (isQueryUpdating && isMiddlewareMatch) {\n            shouldResolveHref = false;\n        }\n        if (shouldResolveHref && pathname !== '/_error') {\n            ;\n            options._shouldResolveHref = true;\n            if ( true && as.startsWith('/')) {\n                const rewritesResult = resolveRewrites((0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(cleanedAs, nextState.locale), true), pages, rewrites, query, (p)=>resolveDynamicRoute(p, pages), this.locales);\n                if (rewritesResult.externalDest) {\n                    handleHardNavigation({\n                        url: as,\n                        router: this\n                    });\n                    return true;\n                }\n                if (!isMiddlewareMatch) {\n                    resolvedAs = rewritesResult.asPath;\n                }\n                if (rewritesResult.matchedPage && rewritesResult.resolvedHref) {\n                    // if this directly matches a page we need to update the href to\n                    // allow the correct page chunk to be loaded\n                    pathname = rewritesResult.resolvedHref;\n                    parsed.pathname = (0, _addbasepath.addBasePath)(pathname);\n                    if (!isMiddlewareMatch) {\n                        url = (0, _formaturl.formatWithValidation)(parsed);\n                    }\n                }\n            } else {\n                parsed.pathname = resolveDynamicRoute(pathname, pages);\n                if (parsed.pathname !== pathname) {\n                    pathname = parsed.pathname;\n                    parsed.pathname = (0, _addbasepath.addBasePath)(pathname);\n                    if (!isMiddlewareMatch) {\n                        url = (0, _formaturl.formatWithValidation)(parsed);\n                    }\n                }\n            }\n        }\n        if (!(0, _islocalurl.isLocalURL)(as)) {\n            if (true) {\n                throw Object.defineProperty(new Error('Invalid href: \"' + url + '\" and as: \"' + as + '\", received relative href and external as' + \"\\nSee more info: https://nextjs.org/docs/messages/invalid-relative-url-external-as\"), \"__NEXT_ERROR_CODE\", {\n                    value: \"E380\",\n                    enumerable: false,\n                    configurable: true\n                });\n            }\n            handleHardNavigation({\n                url: as,\n                router: this\n            });\n            return false;\n        }\n        resolvedAs = (0, _removelocale.removeLocale)((0, _removebasepath.removeBasePath)(resolvedAs), nextState.locale);\n        route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n        let routeMatch = false;\n        if ((0, _isdynamic.isDynamicRoute)(route)) {\n            const parsedAs = (0, _parserelativeurl.parseRelativeUrl)(resolvedAs);\n            const asPathname = parsedAs.pathname;\n            const routeRegex = (0, _routeregex.getRouteRegex)(route);\n            routeMatch = (0, _routematcher.getRouteMatcher)(routeRegex)(asPathname);\n            const shouldInterpolate = route === asPathname;\n            const interpolatedAs = shouldInterpolate ? (0, _interpolateas.interpolateAs)(route, asPathname, query) : {};\n            if (!routeMatch || shouldInterpolate && !interpolatedAs.result) {\n                const missingParams = Object.keys(routeRegex.groups).filter((param)=>!query[param] && !routeRegex.groups[param].optional);\n                if (missingParams.length > 0 && !isMiddlewareMatch) {\n                    if (true) {\n                        console.warn(\"\" + (shouldInterpolate ? \"Interpolating href\" : \"Mismatching `as` and `href`\") + \" failed to manually provide \" + (\"the params: \" + missingParams.join(', ') + \" in the `href`'s `query`\"));\n                    }\n                    throw Object.defineProperty(new Error((shouldInterpolate ? \"The provided `href` (\" + url + \") value is missing query values (\" + missingParams.join(', ') + \") to be interpolated properly. \" : \"The provided `as` value (\" + asPathname + \") is incompatible with the `href` value (\" + route + \"). \") + (\"Read more: https://nextjs.org/docs/messages/\" + (shouldInterpolate ? 'href-interpolation-failed' : 'incompatible-href-as'))), \"__NEXT_ERROR_CODE\", {\n                        value: \"E344\",\n                        enumerable: false,\n                        configurable: true\n                    });\n                }\n            } else if (shouldInterpolate) {\n                as = (0, _formaturl.formatWithValidation)(Object.assign({}, parsedAs, {\n                    pathname: interpolatedAs.result,\n                    query: (0, _omit.omit)(query, interpolatedAs.params)\n                }));\n            } else {\n                // Merge params into `query`, overwriting any specified in search\n                Object.assign(query, routeMatch);\n            }\n        }\n        if (!isQueryUpdating) {\n            Router.events.emit('routeChangeStart', as, routeProps);\n        }\n        const isErrorRoute = this.pathname === '/404' || this.pathname === '/_error';\n        try {\n            var _self___NEXT_DATA___props_pageProps, _self___NEXT_DATA___props, _routeInfo_props;\n            let routeInfo = await this.getRouteInfo({\n                route,\n                pathname,\n                query,\n                as,\n                resolvedAs,\n                routeProps,\n                locale: nextState.locale,\n                isPreview: nextState.isPreview,\n                hasMiddleware: isMiddlewareMatch,\n                unstable_skipClientCache: options.unstable_skipClientCache,\n                isQueryUpdating: isQueryUpdating && !this.isFallback,\n                isMiddlewareRewrite\n            });\n            if (!isQueryUpdating && !options.shallow) {\n                await this._bfl(as, 'resolvedAs' in routeInfo ? routeInfo.resolvedAs : undefined, nextState.locale);\n            }\n            if ('route' in routeInfo && isMiddlewareMatch) {\n                pathname = routeInfo.route || route;\n                route = pathname;\n                if (!routeProps.shallow) {\n                    query = Object.assign({}, routeInfo.query || {}, query);\n                }\n                const cleanedParsedPathname = (0, _hasbasepath.hasBasePath)(parsed.pathname) ? (0, _removebasepath.removeBasePath)(parsed.pathname) : parsed.pathname;\n                if (routeMatch && pathname !== cleanedParsedPathname) {\n                    Object.keys(routeMatch).forEach((key)=>{\n                        if (routeMatch && query[key] === routeMatch[key]) {\n                            delete query[key];\n                        }\n                    });\n                }\n                if ((0, _isdynamic.isDynamicRoute)(pathname)) {\n                    const prefixedAs = !routeProps.shallow && routeInfo.resolvedAs ? routeInfo.resolvedAs : (0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(new URL(as, location.href).pathname, nextState.locale), true);\n                    let rewriteAs = prefixedAs;\n                    if ((0, _hasbasepath.hasBasePath)(rewriteAs)) {\n                        rewriteAs = (0, _removebasepath.removeBasePath)(rewriteAs);\n                    }\n                    if (false) {}\n                    const routeRegex = (0, _routeregex.getRouteRegex)(pathname);\n                    const curRouteMatch = (0, _routematcher.getRouteMatcher)(routeRegex)(new URL(rewriteAs, location.href).pathname);\n                    if (curRouteMatch) {\n                        Object.assign(query, curRouteMatch);\n                    }\n                }\n            }\n            // If the routeInfo brings a redirect we simply apply it.\n            if ('type' in routeInfo) {\n                if (routeInfo.type === 'redirect-internal') {\n                    return this.change(method, routeInfo.newUrl, routeInfo.newAs, options);\n                } else {\n                    handleHardNavigation({\n                        url: routeInfo.destination,\n                        router: this\n                    });\n                    return new Promise(()=>{});\n                }\n            }\n            const component = routeInfo.Component;\n            if (component && component.unstable_scriptLoader) {\n                const scripts = [].concat(component.unstable_scriptLoader());\n                scripts.forEach((script)=>{\n                    (0, _script.handleClientScriptLoad)(script.props);\n                });\n            }\n            // handle redirect on client-transition\n            if ((routeInfo.__N_SSG || routeInfo.__N_SSP) && routeInfo.props) {\n                if (routeInfo.props.pageProps && routeInfo.props.pageProps.__N_REDIRECT) {\n                    // Use the destination from redirect without adding locale\n                    options.locale = false;\n                    const destination = routeInfo.props.pageProps.__N_REDIRECT;\n                    // check if destination is internal (resolves to a page) and attempt\n                    // client-navigation if it is falling back to hard navigation if\n                    // it's not\n                    if (destination.startsWith('/') && routeInfo.props.pageProps.__N_REDIRECT_BASE_PATH !== false) {\n                        const parsedHref = (0, _parserelativeurl.parseRelativeUrl)(destination);\n                        parsedHref.pathname = resolveDynamicRoute(parsedHref.pathname, pages);\n                        const { url: newUrl, as: newAs } = prepareUrlAs(this, destination, destination);\n                        return this.change(method, newUrl, newAs, options);\n                    }\n                    handleHardNavigation({\n                        url: destination,\n                        router: this\n                    });\n                    return new Promise(()=>{});\n                }\n                nextState.isPreview = !!routeInfo.props.__N_PREVIEW;\n                // handle SSG data 404\n                if (routeInfo.props.notFound === SSG_DATA_NOT_FOUND) {\n                    let notFoundRoute;\n                    try {\n                        await this.fetchComponent('/404');\n                        notFoundRoute = '/404';\n                    } catch (_) {\n                        notFoundRoute = '/_error';\n                    }\n                    routeInfo = await this.getRouteInfo({\n                        route: notFoundRoute,\n                        pathname: notFoundRoute,\n                        query,\n                        as,\n                        resolvedAs,\n                        routeProps: {\n                            shallow: false\n                        },\n                        locale: nextState.locale,\n                        isPreview: nextState.isPreview,\n                        isNotFound: true\n                    });\n                    if ('type' in routeInfo) {\n                        throw Object.defineProperty(new Error(\"Unexpected middleware effect on /404\"), \"__NEXT_ERROR_CODE\", {\n                            value: \"E158\",\n                            enumerable: false,\n                            configurable: true\n                        });\n                    }\n                }\n            }\n            if (isQueryUpdating && this.pathname === '/_error' && ((_self___NEXT_DATA___props = self.__NEXT_DATA__.props) == null ? void 0 : (_self___NEXT_DATA___props_pageProps = _self___NEXT_DATA___props.pageProps) == null ? void 0 : _self___NEXT_DATA___props_pageProps.statusCode) === 500 && ((_routeInfo_props = routeInfo.props) == null ? void 0 : _routeInfo_props.pageProps)) {\n                // ensure statusCode is still correct for static 500 page\n                // when updating query information\n                routeInfo.props.pageProps.statusCode = 500;\n            }\n            var _routeInfo_route;\n            // shallow routing is only allowed for same page URL changes.\n            const isValidShallowRoute = options.shallow && nextState.route === ((_routeInfo_route = routeInfo.route) != null ? _routeInfo_route : route);\n            var _options_scroll;\n            const shouldScroll = (_options_scroll = options.scroll) != null ? _options_scroll : !isQueryUpdating && !isValidShallowRoute;\n            const resetScroll = shouldScroll ? {\n                x: 0,\n                y: 0\n            } : null;\n            const upcomingScrollState = forcedScroll != null ? forcedScroll : resetScroll;\n            // the new state that the router gonna set\n            const upcomingRouterState = {\n                ...nextState,\n                route,\n                pathname,\n                query,\n                asPath: cleanedAs,\n                isFallback: false\n            };\n            // When the page being rendered is the 404 page, we should only update the\n            // query parameters. Route changes here might add the basePath when it\n            // wasn't originally present. This is also why this block is before the\n            // below `changeState` call which updates the browser's history (changing\n            // the URL).\n            if (isQueryUpdating && isErrorRoute) {\n                var _self___NEXT_DATA___props_pageProps1, _self___NEXT_DATA___props1, _routeInfo_props1;\n                routeInfo = await this.getRouteInfo({\n                    route: this.pathname,\n                    pathname: this.pathname,\n                    query,\n                    as,\n                    resolvedAs,\n                    routeProps: {\n                        shallow: false\n                    },\n                    locale: nextState.locale,\n                    isPreview: nextState.isPreview,\n                    isQueryUpdating: isQueryUpdating && !this.isFallback\n                });\n                if ('type' in routeInfo) {\n                    throw Object.defineProperty(new Error(\"Unexpected middleware effect on \" + this.pathname), \"__NEXT_ERROR_CODE\", {\n                        value: \"E225\",\n                        enumerable: false,\n                        configurable: true\n                    });\n                }\n                if (this.pathname === '/_error' && ((_self___NEXT_DATA___props1 = self.__NEXT_DATA__.props) == null ? void 0 : (_self___NEXT_DATA___props_pageProps1 = _self___NEXT_DATA___props1.pageProps) == null ? void 0 : _self___NEXT_DATA___props_pageProps1.statusCode) === 500 && ((_routeInfo_props1 = routeInfo.props) == null ? void 0 : _routeInfo_props1.pageProps)) {\n                    // ensure statusCode is still correct for static 500 page\n                    // when updating query information\n                    routeInfo.props.pageProps.statusCode = 500;\n                }\n                try {\n                    await this.set(upcomingRouterState, routeInfo, upcomingScrollState);\n                } catch (err) {\n                    if ((0, _iserror.default)(err) && err.cancelled) {\n                        Router.events.emit('routeChangeError', err, cleanedAs, routeProps);\n                    }\n                    throw err;\n                }\n                return true;\n            }\n            Router.events.emit('beforeHistoryChange', as, routeProps);\n            this.changeState(method, url, as, options);\n            // for query updates we can skip it if the state is unchanged and we don't\n            // need to scroll\n            // https://github.com/vercel/next.js/issues/37139\n            const canSkipUpdating = isQueryUpdating && !upcomingScrollState && !readyStateChange && !localeChange && (0, _comparestates.compareRouterStates)(upcomingRouterState, this.state);\n            if (!canSkipUpdating) {\n                try {\n                    await this.set(upcomingRouterState, routeInfo, upcomingScrollState);\n                } catch (e) {\n                    if (e.cancelled) routeInfo.error = routeInfo.error || e;\n                    else throw e;\n                }\n                if (routeInfo.error) {\n                    if (!isQueryUpdating) {\n                        Router.events.emit('routeChangeError', routeInfo.error, cleanedAs, routeProps);\n                    }\n                    throw routeInfo.error;\n                }\n                if (false) {}\n                if (!isQueryUpdating) {\n                    Router.events.emit('routeChangeComplete', as, routeProps);\n                }\n                // A hash mark # is the optional last part of a URL\n                const hashRegex = /#.+$/;\n                if (shouldScroll && hashRegex.test(as)) {\n                    this.scrollToHash(as);\n                }\n            }\n            return true;\n        } catch (err) {\n            if ((0, _iserror.default)(err) && err.cancelled) {\n                return false;\n            }\n            throw err;\n        }\n    }\n    changeState(method, url, as, options) {\n        if (options === void 0) options = {};\n        if (true) {\n            if (typeof window.history === 'undefined') {\n                console.error(\"Warning: window.history is not available.\");\n                return;\n            }\n            if (typeof window.history[method] === 'undefined') {\n                console.error(\"Warning: window.history.\" + method + \" is not available\");\n                return;\n            }\n        }\n        if (method !== 'pushState' || (0, _utils.getURL)() !== as) {\n            this._shallow = options.shallow;\n            window.history[method]({\n                url,\n                as,\n                options,\n                __N: true,\n                key: this._key = method !== 'pushState' ? this._key : createKey()\n            }, // Passing the empty string here should be safe against future changes to the method.\n            // https://developer.mozilla.org/docs/Web/API/History/replaceState\n            '', as);\n        }\n    }\n    async handleRouteInfoError(err, pathname, query, as, routeProps, loadErrorFail) {\n        if (err.cancelled) {\n            // bubble up cancellation errors\n            throw err;\n        }\n        if ((0, _routeloader.isAssetError)(err) || loadErrorFail) {\n            Router.events.emit('routeChangeError', err, as, routeProps);\n            // If we can't load the page it could be one of following reasons\n            //  1. Page doesn't exists\n            //  2. Page does exist in a different zone\n            //  3. Internal error while loading the page\n            // So, doing a hard reload is the proper way to deal with this.\n            handleHardNavigation({\n                url: as,\n                router: this\n            });\n            // Changing the URL doesn't block executing the current code path.\n            // So let's throw a cancellation error stop the routing logic.\n            throw buildCancellationError();\n        }\n        console.error(err);\n        try {\n            let props;\n            const { page: Component, styleSheets } = await this.fetchComponent('/_error');\n            const routeInfo = {\n                props,\n                Component,\n                styleSheets,\n                err,\n                error: err\n            };\n            if (!routeInfo.props) {\n                try {\n                    routeInfo.props = await this.getInitialProps(Component, {\n                        err,\n                        pathname,\n                        query\n                    });\n                } catch (gipErr) {\n                    console.error('Error in error page `getInitialProps`: ', gipErr);\n                    routeInfo.props = {};\n                }\n            }\n            return routeInfo;\n        } catch (routeInfoErr) {\n            return this.handleRouteInfoError((0, _iserror.default)(routeInfoErr) ? routeInfoErr : Object.defineProperty(new Error(routeInfoErr + ''), \"__NEXT_ERROR_CODE\", {\n                value: \"E394\",\n                enumerable: false,\n                configurable: true\n            }), pathname, query, as, routeProps, true);\n        }\n    }\n    async getRouteInfo(param) {\n        let { route: requestedRoute, pathname, query, as, resolvedAs, routeProps, locale, hasMiddleware, isPreview, unstable_skipClientCache, isQueryUpdating, isMiddlewareRewrite, isNotFound } = param;\n        /**\n     * This `route` binding can change if there's a rewrite\n     * so we keep a reference to the original requested route\n     * so we can store the cache for it and avoid re-requesting every time\n     * for shallow routing purposes.\n     */ let route = requestedRoute;\n        try {\n            var _data_effect, _data_effect1, _data_effect2, _data_response;\n            let existingInfo = this.components[route];\n            if (routeProps.shallow && existingInfo && this.route === route) {\n                return existingInfo;\n            }\n            const handleCancelled = getCancelledHandler({\n                route,\n                router: this\n            });\n            if (hasMiddleware) {\n                existingInfo = undefined;\n            }\n            let cachedRouteInfo = existingInfo && !('initial' in existingInfo) && \"development\" !== 'development' ? 0 : undefined;\n            const isBackground = isQueryUpdating;\n            const fetchNextDataParams = {\n                dataHref: this.pageLoader.getDataHref({\n                    href: (0, _formaturl.formatWithValidation)({\n                        pathname,\n                        query\n                    }),\n                    skipInterpolation: true,\n                    asPath: isNotFound ? '/404' : resolvedAs,\n                    locale\n                }),\n                hasMiddleware: true,\n                isServerRender: this.isSsr,\n                parseJSON: true,\n                inflightCache: isBackground ? this.sbc : this.sdc,\n                persistCache: !isPreview,\n                isPrefetch: false,\n                unstable_skipClientCache,\n                isBackground\n            };\n            let data = isQueryUpdating && !isMiddlewareRewrite ? null : await withMiddlewareEffects({\n                fetchData: ()=>fetchNextData(fetchNextDataParams),\n                asPath: isNotFound ? '/404' : resolvedAs,\n                locale: locale,\n                router: this\n            }).catch((err)=>{\n                // we don't hard error during query updating\n                // as it's un-necessary and doesn't need to be fatal\n                // unless it is a fallback route and the props can't\n                // be loaded\n                if (isQueryUpdating) {\n                    return null;\n                }\n                throw err;\n            });\n            // when rendering error routes we don't apply middleware\n            // effects\n            if (data && (pathname === '/_error' || pathname === '/404')) {\n                data.effect = undefined;\n            }\n            if (isQueryUpdating) {\n                if (!data) {\n                    data = {\n                        json: self.__NEXT_DATA__.props\n                    };\n                } else {\n                    data.json = self.__NEXT_DATA__.props;\n                }\n            }\n            handleCancelled();\n            if ((data == null ? void 0 : (_data_effect = data.effect) == null ? void 0 : _data_effect.type) === 'redirect-internal' || (data == null ? void 0 : (_data_effect1 = data.effect) == null ? void 0 : _data_effect1.type) === 'redirect-external') {\n                return data.effect;\n            }\n            if ((data == null ? void 0 : (_data_effect2 = data.effect) == null ? void 0 : _data_effect2.type) === 'rewrite') {\n                const resolvedRoute = (0, _removetrailingslash.removeTrailingSlash)(data.effect.resolvedHref);\n                const pages = await this.pageLoader.getPageList();\n                // during query updating the page must match although during\n                // client-transition a redirect that doesn't match a page\n                // can be returned and this should trigger a hard navigation\n                // which is valid for incremental migration\n                if (!isQueryUpdating || pages.includes(resolvedRoute)) {\n                    route = resolvedRoute;\n                    pathname = data.effect.resolvedHref;\n                    query = {\n                        ...query,\n                        ...data.effect.parsedAs.query\n                    };\n                    resolvedAs = (0, _removebasepath.removeBasePath)((0, _normalizelocalepath.normalizeLocalePath)(data.effect.parsedAs.pathname, this.locales).pathname);\n                    // Check again the cache with the new destination.\n                    existingInfo = this.components[route];\n                    if (routeProps.shallow && existingInfo && this.route === route && !hasMiddleware) {\n                        // If we have a match with the current route due to rewrite,\n                        // we can copy the existing information to the rewritten one.\n                        // Then, we return the information along with the matched route.\n                        return {\n                            ...existingInfo,\n                            route\n                        };\n                    }\n                }\n            }\n            if ((0, _isapiroute.isAPIRoute)(route)) {\n                handleHardNavigation({\n                    url: as,\n                    router: this\n                });\n                return new Promise(()=>{});\n            }\n            const routeInfo = cachedRouteInfo || await this.fetchComponent(route).then((res)=>({\n                    Component: res.page,\n                    styleSheets: res.styleSheets,\n                    __N_SSG: res.mod.__N_SSG,\n                    __N_SSP: res.mod.__N_SSP\n                }));\n            if (true) {\n                const { isValidElementType } = __webpack_require__(/*! next/dist/compiled/react-is */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react-is/index.js\");\n                if (!isValidElementType(routeInfo.Component)) {\n                    throw Object.defineProperty(new Error('The default export is not a React Component in page: \"' + pathname + '\"'), \"__NEXT_ERROR_CODE\", {\n                        value: \"E286\",\n                        enumerable: false,\n                        configurable: true\n                    });\n                }\n            }\n            const wasBailedPrefetch = data == null ? void 0 : (_data_response = data.response) == null ? void 0 : _data_response.headers.get('x-middleware-skip');\n            const shouldFetchData = routeInfo.__N_SSG || routeInfo.__N_SSP;\n            // For non-SSG prefetches that bailed before sending data\n            // we clear the cache to fetch full response\n            if (wasBailedPrefetch && (data == null ? void 0 : data.dataHref)) {\n                delete this.sdc[data.dataHref];\n            }\n            const { props, cacheKey } = await this._getData(async ()=>{\n                if (shouldFetchData) {\n                    if ((data == null ? void 0 : data.json) && !wasBailedPrefetch) {\n                        return {\n                            cacheKey: data.cacheKey,\n                            props: data.json\n                        };\n                    }\n                    const dataHref = (data == null ? void 0 : data.dataHref) ? data.dataHref : this.pageLoader.getDataHref({\n                        href: (0, _formaturl.formatWithValidation)({\n                            pathname,\n                            query\n                        }),\n                        asPath: resolvedAs,\n                        locale\n                    });\n                    const fetched = await fetchNextData({\n                        dataHref,\n                        isServerRender: this.isSsr,\n                        parseJSON: true,\n                        inflightCache: wasBailedPrefetch ? {} : this.sdc,\n                        persistCache: !isPreview,\n                        isPrefetch: false,\n                        unstable_skipClientCache\n                    });\n                    return {\n                        cacheKey: fetched.cacheKey,\n                        props: fetched.json || {}\n                    };\n                }\n                return {\n                    headers: {},\n                    props: await this.getInitialProps(routeInfo.Component, {\n                        pathname,\n                        query,\n                        asPath: as,\n                        locale,\n                        locales: this.locales,\n                        defaultLocale: this.defaultLocale\n                    })\n                };\n            });\n            // Only bust the data cache for SSP routes although\n            // middleware can skip cache per request with\n            // x-middleware-cache: no-cache as well\n            if (routeInfo.__N_SSP && fetchNextDataParams.dataHref && cacheKey) {\n                delete this.sdc[cacheKey];\n            }\n            // we kick off a HEAD request in the background\n            // when a non-prefetch request is made to signal revalidation\n            if (!this.isPreview && routeInfo.__N_SSG && \"development\" !== 'development' && 0) {}\n            props.pageProps = Object.assign({}, props.pageProps);\n            routeInfo.props = props;\n            routeInfo.route = route;\n            routeInfo.query = query;\n            routeInfo.resolvedAs = resolvedAs;\n            this.components[route] = routeInfo;\n            return routeInfo;\n        } catch (err) {\n            return this.handleRouteInfoError((0, _iserror.getProperError)(err), pathname, query, as, routeProps);\n        }\n    }\n    set(state, data, resetScroll) {\n        this.state = state;\n        return this.sub(data, this.components['/_app'].Component, resetScroll);\n    }\n    /**\n   * Callback to execute before replacing router state\n   * @param cb callback to be executed\n   */ beforePopState(cb) {\n        this._bps = cb;\n    }\n    onlyAHashChange(as) {\n        if (!this.asPath) return false;\n        const [oldUrlNoHash, oldHash] = this.asPath.split('#', 2);\n        const [newUrlNoHash, newHash] = as.split('#', 2);\n        // Makes sure we scroll to the provided hash if the url/hash are the same\n        if (newHash && oldUrlNoHash === newUrlNoHash && oldHash === newHash) {\n            return true;\n        }\n        // If the urls are change, there's more than a hash change\n        if (oldUrlNoHash !== newUrlNoHash) {\n            return false;\n        }\n        // If the hash has changed, then it's a hash only change.\n        // This check is necessary to handle both the enter and\n        // leave hash === '' cases. The identity case falls through\n        // and is treated as a next reload.\n        return oldHash !== newHash;\n    }\n    scrollToHash(as) {\n        const [, hash = ''] = as.split('#', 2);\n        (0, _disablesmoothscroll.disableSmoothScrollDuringRouteTransition)(()=>{\n            // Scroll to top if the hash is just `#` with no value or `#top`\n            // To mirror browsers\n            if (hash === '' || hash === 'top') {\n                window.scrollTo(0, 0);\n                return;\n            }\n            // Decode hash to make non-latin anchor works.\n            const rawHash = decodeURIComponent(hash);\n            // First we check if the element by id is found\n            const idEl = document.getElementById(rawHash);\n            if (idEl) {\n                idEl.scrollIntoView();\n                return;\n            }\n            // If there's no element with the id, we check the `name` property\n            // To mirror browsers\n            const nameEl = document.getElementsByName(rawHash)[0];\n            if (nameEl) {\n                nameEl.scrollIntoView();\n            }\n        }, {\n            onlyHashChange: this.onlyAHashChange(as)\n        });\n    }\n    urlIsNew(asPath) {\n        return this.asPath !== asPath;\n    }\n    /**\n   * Prefetch page code, you may wait for the data during page rendering.\n   * This feature only works in production!\n   * @param url the href of prefetched page\n   * @param asPath the as path of the prefetched page\n   */ async prefetch(url, asPath, options) {\n        if (asPath === void 0) asPath = url;\n        if (options === void 0) options = {};\n        // Prefetch is not supported in development mode because it would trigger on-demand-entries\n        if (true) {\n            return;\n        }\n        if ( true && (0, _isbot.isBot)(window.navigator.userAgent)) {\n            // No prefetches for bots that render the link since they are typically navigating\n            // links via the equivalent of a hard navigation and hence never utilize these\n            // prefetches.\n            return;\n        }\n        let parsed = (0, _parserelativeurl.parseRelativeUrl)(url);\n        const urlPathname = parsed.pathname;\n        let { pathname, query } = parsed;\n        const originalPathname = pathname;\n        if (false) {}\n        const pages = await this.pageLoader.getPageList();\n        let resolvedAs = asPath;\n        const locale = typeof options.locale !== 'undefined' ? options.locale || undefined : this.locale;\n        const isMiddlewareMatch = await matchesMiddleware({\n            asPath: asPath,\n            locale: locale,\n            router: this\n        });\n        if ( true && asPath.startsWith('/')) {\n            let rewrites;\n            ({ __rewrites: rewrites } = await (0, _routeloader.getClientBuildManifest)());\n            const rewritesResult = resolveRewrites((0, _addbasepath.addBasePath)((0, _addlocale.addLocale)(asPath, this.locale), true), pages, rewrites, parsed.query, (p)=>resolveDynamicRoute(p, pages), this.locales);\n            if (rewritesResult.externalDest) {\n                return;\n            }\n            if (!isMiddlewareMatch) {\n                resolvedAs = (0, _removelocale.removeLocale)((0, _removebasepath.removeBasePath)(rewritesResult.asPath), this.locale);\n            }\n            if (rewritesResult.matchedPage && rewritesResult.resolvedHref) {\n                // if this directly matches a page we need to update the href to\n                // allow the correct page chunk to be loaded\n                pathname = rewritesResult.resolvedHref;\n                parsed.pathname = pathname;\n                if (!isMiddlewareMatch) {\n                    url = (0, _formaturl.formatWithValidation)(parsed);\n                }\n            }\n        }\n        parsed.pathname = resolveDynamicRoute(parsed.pathname, pages);\n        if ((0, _isdynamic.isDynamicRoute)(parsed.pathname)) {\n            pathname = parsed.pathname;\n            parsed.pathname = pathname;\n            Object.assign(query, (0, _routematcher.getRouteMatcher)((0, _routeregex.getRouteRegex)(parsed.pathname))((0, _parsepath.parsePath)(asPath).pathname) || {});\n            if (!isMiddlewareMatch) {\n                url = (0, _formaturl.formatWithValidation)(parsed);\n            }\n        }\n        const data =  false ? 0 : await withMiddlewareEffects({\n            fetchData: ()=>fetchNextData({\n                    dataHref: this.pageLoader.getDataHref({\n                        href: (0, _formaturl.formatWithValidation)({\n                            pathname: originalPathname,\n                            query\n                        }),\n                        skipInterpolation: true,\n                        asPath: resolvedAs,\n                        locale\n                    }),\n                    hasMiddleware: true,\n                    isServerRender: false,\n                    parseJSON: true,\n                    inflightCache: this.sdc,\n                    persistCache: !this.isPreview,\n                    isPrefetch: true\n                }),\n            asPath: asPath,\n            locale: locale,\n            router: this\n        });\n        /**\n     * If there was a rewrite we apply the effects of the rewrite on the\n     * current parameters for the prefetch.\n     */ if ((data == null ? void 0 : data.effect.type) === 'rewrite') {\n            parsed.pathname = data.effect.resolvedHref;\n            pathname = data.effect.resolvedHref;\n            query = {\n                ...query,\n                ...data.effect.parsedAs.query\n            };\n            resolvedAs = data.effect.parsedAs.pathname;\n            url = (0, _formaturl.formatWithValidation)(parsed);\n        }\n        /**\n     * If there is a redirect to an external destination then we don't have\n     * to prefetch content as it will be unused.\n     */ if ((data == null ? void 0 : data.effect.type) === 'redirect-external') {\n            return;\n        }\n        const route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n        if (await this._bfl(asPath, resolvedAs, options.locale, true)) {\n            this.components[urlPathname] = {\n                __appRouter: true\n            };\n        }\n        await Promise.all([\n            this.pageLoader._isSsg(route).then((isSsg)=>{\n                return isSsg ? fetchNextData({\n                    dataHref: (data == null ? void 0 : data.json) ? data == null ? void 0 : data.dataHref : this.pageLoader.getDataHref({\n                        href: url,\n                        asPath: resolvedAs,\n                        locale: locale\n                    }),\n                    isServerRender: false,\n                    parseJSON: true,\n                    inflightCache: this.sdc,\n                    persistCache: !this.isPreview,\n                    isPrefetch: true,\n                    unstable_skipClientCache: options.unstable_skipClientCache || options.priority && !!true\n                }).then(()=>false).catch(()=>false) : false;\n            }),\n            this.pageLoader[options.priority ? 'loadPage' : 'prefetch'](route)\n        ]);\n    }\n    async fetchComponent(route) {\n        const handleCancelled = getCancelledHandler({\n            route,\n            router: this\n        });\n        try {\n            const componentResult = await this.pageLoader.loadPage(route);\n            handleCancelled();\n            return componentResult;\n        } catch (err) {\n            handleCancelled();\n            throw err;\n        }\n    }\n    _getData(fn) {\n        let cancelled = false;\n        const cancel = ()=>{\n            cancelled = true;\n        };\n        this.clc = cancel;\n        return fn().then((data)=>{\n            if (cancel === this.clc) {\n                this.clc = null;\n            }\n            if (cancelled) {\n                const err = Object.defineProperty(new Error('Loading initial props cancelled'), \"__NEXT_ERROR_CODE\", {\n                    value: \"E405\",\n                    enumerable: false,\n                    configurable: true\n                });\n                err.cancelled = true;\n                throw err;\n            }\n            return data;\n        });\n    }\n    getInitialProps(Component, ctx) {\n        const { Component: App } = this.components['/_app'];\n        const AppTree = this._wrapApp(App);\n        ctx.AppTree = AppTree;\n        return (0, _utils.loadGetInitialProps)(App, {\n            AppTree,\n            Component,\n            router: this,\n            ctx\n        });\n    }\n    get route() {\n        return this.state.route;\n    }\n    get pathname() {\n        return this.state.pathname;\n    }\n    get query() {\n        return this.state.query;\n    }\n    get asPath() {\n        return this.state.asPath;\n    }\n    get locale() {\n        return this.state.locale;\n    }\n    get isFallback() {\n        return this.state.isFallback;\n    }\n    get isPreview() {\n        return this.state.isPreview;\n    }\n    constructor(pathname, query, as, { initialProps, pageLoader, App, wrapApp, Component, err, subscription, isFallback, locale, locales, defaultLocale, domainLocales, isPreview }){\n        // Server Data Cache (full data requests)\n        this.sdc = {};\n        // Server Background Cache (HEAD requests)\n        this.sbc = {};\n        this.isFirstPopStateEvent = true;\n        this._key = createKey();\n        this.onPopState = (e)=>{\n            const { isFirstPopStateEvent } = this;\n            this.isFirstPopStateEvent = false;\n            const state = e.state;\n            if (!state) {\n                // We get state as undefined for two reasons.\n                //  1. With older safari (< 8) and older chrome (< 34)\n                //  2. When the URL changed with #\n                //\n                // In the both cases, we don't need to proceed and change the route.\n                // (as it's already changed)\n                // But we can simply replace the state with the new changes.\n                // Actually, for (1) we don't need to nothing. But it's hard to detect that event.\n                // So, doing the following for (1) does no harm.\n                const { pathname, query } = this;\n                this.changeState('replaceState', (0, _formaturl.formatWithValidation)({\n                    pathname: (0, _addbasepath.addBasePath)(pathname),\n                    query\n                }), (0, _utils.getURL)());\n                return;\n            }\n            // __NA is used to identify if the history entry can be handled by the app-router.\n            if (state.__NA) {\n                window.location.reload();\n                return;\n            }\n            if (!state.__N) {\n                return;\n            }\n            // Safari fires popstateevent when reopening the browser.\n            if (isFirstPopStateEvent && this.locale === state.options.locale && state.as === this.asPath) {\n                return;\n            }\n            let forcedScroll;\n            const { url, as, options, key } = state;\n            if (false) {}\n            this._key = key;\n            const { pathname } = (0, _parserelativeurl.parseRelativeUrl)(url);\n            // Make sure we don't re-render on initial load,\n            // can be caused by navigating back from an external site\n            if (this.isSsr && as === (0, _addbasepath.addBasePath)(this.asPath) && pathname === (0, _addbasepath.addBasePath)(this.pathname)) {\n                return;\n            }\n            // If the downstream application returns falsy, return.\n            // They will then be responsible for handling the event.\n            if (this._bps && !this._bps(state)) {\n                return;\n            }\n            this.change('replaceState', url, as, Object.assign({}, options, {\n                shallow: options.shallow && this._shallow,\n                locale: options.locale || this.defaultLocale,\n                // @ts-ignore internal value not exposed on types\n                _h: 0\n            }), forcedScroll);\n        };\n        // represents the current component key\n        const route = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n        // set up the component cache (by route keys)\n        this.components = {};\n        // We should not keep the cache, if there's an error\n        // Otherwise, this cause issues when when going back and\n        // come again to the errored page.\n        if (pathname !== '/_error') {\n            this.components[route] = {\n                Component,\n                initial: true,\n                props: initialProps,\n                err,\n                __N_SSG: initialProps && initialProps.__N_SSG,\n                __N_SSP: initialProps && initialProps.__N_SSP\n            };\n        }\n        this.components['/_app'] = {\n            Component: App,\n            styleSheets: []\n        };\n        // Backwards compat for Router.router.events\n        // TODO: Should be remove the following major version as it was never documented\n        this.events = Router.events;\n        this.pageLoader = pageLoader;\n        // if auto prerendered and dynamic route wait to update asPath\n        // until after mount to prevent hydration mismatch\n        const autoExportDynamic = (0, _isdynamic.isDynamicRoute)(pathname) && self.__NEXT_DATA__.autoExport;\n        this.basePath =  false || '';\n        this.sub = subscription;\n        this.clc = null;\n        this._wrapApp = wrapApp;\n        // make sure to ignore extra popState in safari on navigating\n        // back from external site\n        this.isSsr = true;\n        this.isLocaleDomain = false;\n        this.isReady = !!(self.__NEXT_DATA__.gssp || self.__NEXT_DATA__.gip || self.__NEXT_DATA__.isExperimentalCompile || self.__NEXT_DATA__.appGip && !self.__NEXT_DATA__.gsp || !autoExportDynamic && !self.location.search && !true);\n        if (false) {}\n        this.state = {\n            route,\n            pathname,\n            query,\n            asPath: autoExportDynamic ? pathname : as,\n            isPreview: !!isPreview,\n            locale:  false ? 0 : undefined,\n            isFallback\n        };\n        this._initialMatchesMiddlewarePromise = Promise.resolve(false);\n        if (true) {\n            // make sure \"as\" doesn't start with double slashes or else it can\n            // throw an error as it's considered invalid\n            if (!as.startsWith('//')) {\n                // in order for `e.state` to work on the `onpopstate` event\n                // we have to register the initial route upon initialization\n                const options = {\n                    locale\n                };\n                const asPath = (0, _utils.getURL)();\n                this._initialMatchesMiddlewarePromise = matchesMiddleware({\n                    router: this,\n                    locale,\n                    asPath\n                }).then((matches)=>{\n                    // if middleware matches we leave resolving to the change function\n                    // as the server needs to resolve for correct priority\n                    ;\n                    options._shouldResolveHref = as !== pathname;\n                    this.changeState('replaceState', matches ? asPath : (0, _formaturl.formatWithValidation)({\n                        pathname: (0, _addbasepath.addBasePath)(pathname),\n                        query\n                    }), asPath, options);\n                    return matches;\n                });\n            }\n            window.addEventListener('popstate', this.onPopState);\n            // enable custom scroll restoration handling when available\n            // otherwise fallback to browser's default handling\n            if (false) {}\n        }\n    }\n}\nRouter.events = (0, _mitt.default)(); //# sourceMappingURL=router.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci9yb3V0ZXIuanMiLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCOzs7Ozs7Ozs7Ozs7O0lBOG1CWkEsU0FBUztlQUFUQTs7O2VBaURLQzs7SUE5akJDQyxpQkFBaUI7ZUFBakJBOzs7Ozs7eUNBbEZmO29DQUNnQzsrRUFDQztpREFDSjtpREFDQTsyRUFDbkI7bUNBQ2tEO3VDQUNwQzs4Q0FDRTswQ0FDRDt3Q0FDRjt1Q0FDTztnREFDRjt1Q0FDVDt1Q0FDQTswQ0FDRzs0Q0FDRTt5Q0FDSDt5Q0FDQTt5Q0FDQTt3Q0FDRDtpREFDUztvREFDRzsyQ0FDSDt3Q0FDVDttQ0FDTDtrQ0FDRDsyQ0FDUztpREFDMkI7dUNBRXJCO0FBRXBDLElBQUlDO0FBQ0osSUFBSUMsSUFBK0IsRUFBRTtJQUNuQ0Qsa0JBQ0VJLHdTQUNPO0FBQ1g7QUFnQ0EsU0FBU0U7SUFDUCxPQUFPQyxPQUFPQyxNQUFNLENBQUMscUJBQTRCLENBQTVCLElBQUlDLE1BQU0sb0JBQVY7ZUFBQTtvQkFBQTtzQkFBQTtJQUEyQixJQUFHO1FBQ2pEQyxXQUFXO0lBQ2I7QUFDRjtBQVNPLGVBQWVYLGtCQUNwQlksT0FBa0M7SUFFbEMsTUFBTUMsV0FBVyxNQUFNQyxRQUFRQyxPQUFPLENBQ3BDSCxRQUFRSSxNQUFNLENBQUNDLFVBQVUsQ0FBQ0MsYUFBYTtJQUV6QyxJQUFJLENBQUNMLFVBQVUsT0FBTztJQUV0QixNQUFNLEVBQUVNLFVBQVVDLFVBQVUsRUFBRSxHQUFHQyxDQUFBQSxHQUFBQSxXQUFBQSxTQUFBQSxFQUFVVCxRQUFRVSxNQUFNO0lBQ3pELDZGQUE2RjtJQUM3RixNQUFNQyxZQUFZQyxDQUFBQSxHQUFBQSxhQUFBQSxXQUFBQSxFQUFZSixjQUMxQkssQ0FBQUEsR0FBQUEsZ0JBQUFBLGNBQWMsRUFBQ0wsY0FDZkE7SUFDSixNQUFNTSwwQkFBMEJDLENBQUFBLEdBQUFBLGFBQUFBLFdBQUFBLEVBQzlCQyxDQUFBQSxHQUFBQSxXQUFBQSxTQUFBQSxFQUFVTCxXQUFXWCxRQUFRaUIsTUFBTTtJQUdyQywyRUFBMkU7SUFDM0UsdUVBQXVFO0lBQ3ZFLE9BQU9oQixTQUFTaUIsSUFBSSxDQUFDLENBQUNDLElBQ3BCLElBQUlDLE9BQU9ELEVBQUVFLE1BQU0sRUFBRUMsSUFBSSxDQUFDUjtBQUU5QjtBQUVBLFNBQVNTLFlBQVlDLEdBQVc7SUFDOUIsTUFBTUMsU0FBU0MsQ0FBQUEsR0FBQUEsT0FBQUEsaUJBQUFBO0lBRWYsT0FBT0YsSUFBSUcsVUFBVSxDQUFDRixVQUFVRCxJQUFJSSxTQUFTLENBQUNILE9BQU9JLE1BQU0sSUFBSUw7QUFDakU7QUFFQSxTQUFTTSxhQUFhMUIsTUFBa0IsRUFBRW9CLEdBQVEsRUFBRU8sRUFBUTtJQUMxRCxzREFBc0Q7SUFDdEQsa0RBQWtEO0lBQ2xELElBQUksQ0FBQ0MsY0FBY0MsV0FBVyxHQUFHQyxDQUFBQSxHQUFBQSxhQUFBQSxXQUFBQSxFQUFZOUIsUUFBUW9CLEtBQUs7SUFDMUQsTUFBTUMsU0FBU0MsQ0FBQUEsR0FBQUEsT0FBQUEsaUJBQUFBO0lBQ2YsTUFBTVMsa0JBQWtCSCxhQUFhTCxVQUFVLENBQUNGO0lBQ2hELE1BQU1XLGdCQUFnQkgsY0FBY0EsV0FBV04sVUFBVSxDQUFDRjtJQUUxRE8sZUFBZVQsWUFBWVM7SUFDM0JDLGFBQWFBLGFBQWFWLFlBQVlVLGNBQWNBO0lBRXBELE1BQU1JLGNBQWNGLGtCQUFrQkgsZUFBZWpCLENBQUFBLEdBQUFBLGFBQUFBLFdBQUFBLEVBQVlpQjtJQUNqRSxNQUFNTSxhQUFhUCxLQUNmUixZQUFZVyxDQUFBQSxHQUFBQSxhQUFBQSxXQUFXLEVBQUM5QixRQUFRMkIsT0FDaENFLGNBQWNEO0lBRWxCLE9BQU87UUFDTFIsS0FBS2E7UUFDTE4sSUFBSUssZ0JBQWdCRSxhQUFhdkIsQ0FBQUEsR0FBQUEsYUFBQUEsV0FBQUEsRUFBWXVCO0lBQy9DO0FBQ0Y7QUFFQSxTQUFTQyxvQkFBb0JoQyxRQUFnQixFQUFFaUMsS0FBZTtJQUM1RCxNQUFNQyxnQkFBZ0JDLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0JDLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBbUIsRUFBQ3BDO0lBQzlELElBQUlrQyxrQkFBa0IsVUFBVUEsa0JBQWtCLFdBQVc7UUFDM0QsT0FBT2xDO0lBQ1Q7SUFFQSwyQ0FBMkM7SUFDM0MsSUFBSSxDQUFDaUMsTUFBTUksUUFBUSxDQUFDSCxnQkFBZ0I7UUFDbEMsaURBQWlEO1FBQ2pERCxNQUFNdEIsSUFBSSxDQUFDLENBQUMyQjtZQUNWLElBQUlDLENBQUFBLEdBQUFBLFdBQUFBLGNBQUFBLEVBQWVELFNBQVNFLENBQUFBLEdBQUFBLFlBQUFBLGFBQUFBLEVBQWNGLE1BQU1HLEVBQUUsQ0FBQzFCLElBQUksQ0FBQ21CLGdCQUFnQjtnQkFDdEVsQyxXQUFXc0M7Z0JBQ1gsT0FBTztZQUNUO1FBQ0Y7SUFDRjtJQUNBLE9BQU9ILENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0JuQztBQUM3QjtBQUVBLFNBQVMwQyxrQkFDUEMsTUFBYyxFQUNkQyxRQUFrQixFQUNsQm5ELE9BQWtDO0lBRWxDLE1BQU1vRCxhQUFhO1FBQ2pCQyxVQUFVckQsUUFBUUksTUFBTSxDQUFDaUQsUUFBUTtRQUNqQ0MsTUFBTTtZQUFFQyxTQUFTdkQsUUFBUUksTUFBTSxDQUFDbUQsT0FBTztRQUFDO1FBQ3hDQyxlQUFlQyxRQUFRbkUsS0FBaUM7SUFDMUQ7SUFDQSxNQUFNcUUsZ0JBQWdCUixTQUFTUyxPQUFPLENBQUNDLEdBQUcsQ0FBQztJQUUzQyxJQUFJQyxnQkFDRkgsaUJBQWlCUixTQUFTUyxPQUFPLENBQUNDLEdBQUcsQ0FBQztJQUV4QyxNQUFNRSxjQUFjWixTQUFTUyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0csV0FBQUEsbUJBQW1CO0lBRTVELElBQ0VELGVBQ0EsQ0FBQ0QsaUJBQ0QsQ0FBQ0MsWUFBWW5CLFFBQVEsQ0FBQywyQkFDdEIsQ0FBQ21CLFlBQVluQixRQUFRLENBQUMsY0FDdEIsQ0FBQ21CLFlBQVluQixRQUFRLENBQUMsU0FDdEI7UUFDQSw0REFBNEQ7UUFDNURrQixnQkFBZ0JDO0lBQ2xCO0lBRUEsSUFBSUQsZUFBZTtRQUNqQixJQUNFQSxjQUFjbkMsVUFBVSxDQUFDLFFBQ3pCckMsS0FBc0QsRUFDdEQ7WUFDQSxNQUFNNEUsc0JBQXNCQyxDQUFBQSxHQUFBQSxrQkFBQUEsZ0JBQWdCLEVBQUNMO1lBQzdDLE1BQU1NLGVBQWVDLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0JILG9CQUFvQjNELFFBQVEsRUFBRTtnQkFDckU2QztnQkFDQWtCLFdBQVc7WUFDYjtZQUVBLElBQUlDLGFBQWE3QixDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQUFBLEVBQW9CMEIsYUFBYTdELFFBQVE7WUFDMUQsT0FBT0wsUUFBUXNFLEdBQUcsQ0FBQztnQkFDakJ4RSxRQUFRSSxNQUFNLENBQUNDLFVBQVUsQ0FBQ29FLFdBQVc7Z0JBQ3JDQyxDQUFBQSxHQUFBQSxhQUFBQSxzQkFBQUE7YUFDRCxFQUFFQyxJQUFJLENBQUM7b0JBQUMsQ0FBQ25DLE9BQU8sRUFBRW9DLFlBQVlDLFFBQVEsRUFBRSxDQUFNO2dCQUM3QyxJQUFJOUMsS0FBS2YsQ0FBQUEsR0FBQUEsV0FBQUEsU0FBQUEsRUFBVW9ELGFBQWE3RCxRQUFRLEVBQUU2RCxhQUFhbkQsTUFBTTtnQkFFN0QsSUFDRTZCLENBQUFBLEdBQUFBLFdBQUFBLGNBQWMsRUFBQ2YsT0FDZCxDQUFDNEIsaUJBQ0FuQixNQUFNSSxRQUFRLENBQ1prQyxDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQW1CLEVBQUNqRSxDQUFBQSxHQUFBQSxnQkFBQUEsY0FBYyxFQUFDa0IsS0FBSy9CLFFBQVFJLE1BQU0sQ0FBQ21ELE9BQU8sRUFDM0RoRCxRQUFRLEdBRWY7b0JBQ0EsTUFBTXdFLGVBQWVWLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFDbkJGLENBQUFBLEdBQUFBLGtCQUFBQSxnQkFBQUEsRUFBaUJqQixRQUFRM0MsUUFBUSxFQUNqQzt3QkFDRTZDLFlBQVk5RCxLQUErQixHQUN2QzBGLFlBQ0E1QixDQUFVQTt3QkFDZGtCLFdBQVc7b0JBQ2I7b0JBR0Z2QyxLQUFLaEIsQ0FBQUEsR0FBQUEsYUFBQUEsV0FBVyxFQUFDZ0UsYUFBYXhFLFFBQVE7b0JBQ3RDMkQsb0JBQW9CM0QsUUFBUSxHQUFHd0I7Z0JBQ2pDO2dCQUVBLElBQUl6QyxJQUErQixFQUFFO29CQUNuQyxNQUFNMkYsU0FBUzVGLGdCQUNiMEMsSUFDQVMsT0FDQXFDLFVBQ0FYLG9CQUFvQmdCLEtBQUssRUFDekIsQ0FBQ0MsT0FBaUI1QyxvQkFBb0I0QyxNQUFNM0MsUUFDNUN4QyxRQUFRSSxNQUFNLENBQUNtRCxPQUFPO29CQUd4QixJQUFJMEIsT0FBT0csV0FBVyxFQUFFO3dCQUN0QmxCLG9CQUFvQjNELFFBQVEsR0FBRzBFLE9BQU9JLFFBQVEsQ0FBQzlFLFFBQVE7d0JBQ3ZEd0IsS0FBS21DLG9CQUFvQjNELFFBQVE7d0JBQ2pDWCxPQUFPQyxNQUFNLENBQUNxRSxvQkFBb0JnQixLQUFLLEVBQUVELE9BQU9JLFFBQVEsQ0FBQ0gsS0FBSztvQkFDaEU7Z0JBQ0YsT0FBTyxFQU1OO2dCQUVELE1BQU1sRCxlQUFlLENBQUNRLE1BQU1JLFFBQVEsQ0FBQzJCLGNBQ2pDaEMsb0JBQ0V1QyxDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQUFBLEVBQ0VqRSxDQUFBQSxHQUFBQSxnQkFBQUEsY0FBQUEsRUFBZXFELG9CQUFvQjNELFFBQVEsR0FDM0NQLFFBQVFJLE1BQU0sQ0FBQ21ELE9BQU8sRUFDdEJoRCxRQUFRLEVBQ1ZpQyxTQUVGK0I7Z0JBRUosSUFBSXpCLENBQUFBLEdBQUFBLFdBQUFBLGNBQUFBLEVBQWVkLGVBQWU7b0JBQ2hDLE1BQU11RCxVQUFVQyxDQUFBQSxHQUFBQSxjQUFBQSxlQUFBQSxFQUFnQnpDLENBQUFBLEdBQUFBLFlBQUFBLGFBQUFBLEVBQWNmLGVBQWVEO29CQUM3RG5DLE9BQU9DLE1BQU0sQ0FBQ3FFLG9CQUFvQmdCLEtBQUssRUFBRUssV0FBVyxDQUFDO2dCQUN2RDtnQkFFQSxPQUFPO29CQUNMRSxNQUFNO29CQUNOSixVQUFVbkI7b0JBQ1ZsQztnQkFDRjtZQUNGO1FBQ0Y7UUFDQSxNQUFNMEQsTUFBTWpGLENBQUFBLEdBQUFBLFdBQUFBLFNBQUFBLEVBQVV5QztRQUN0QixNQUFNM0MsV0FBV29GLENBQUFBLEdBQUFBLHdCQUFBQSxzQkFBQUEsRUFBdUI7WUFDdEMsR0FBR3RCLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBbUIsRUFBQ3FCLElBQUluRixRQUFRLEVBQUU7Z0JBQUU2QztnQkFBWWtCLFdBQVc7WUFBSyxFQUFFO1lBQ3JFc0IsZUFBZTVGLFFBQVFJLE1BQU0sQ0FBQ3dGLGFBQWE7WUFDM0NDLFNBQVM7UUFDWDtRQUVBLE9BQU8zRixRQUFRQyxPQUFPLENBQUM7WUFDckJzRixNQUFNO1lBQ05LLGFBQWMsS0FBRXZGLFdBQVdtRixJQUFJUixLQUFLLEdBQUdRLElBQUlLLElBQUk7UUFDakQ7SUFDRjtJQUVBLE1BQU1DLGlCQUFpQjdDLFNBQVNTLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDO0lBRTVDLElBQUltQyxnQkFBZ0I7UUFDbEIsSUFBSUEsZUFBZXJFLFVBQVUsQ0FBQyxNQUFNO1lBQ2xDLE1BQU0rRCxNQUFNakYsQ0FBQUEsR0FBQUEsV0FBQUEsU0FBQUEsRUFBVXVGO1lBQ3RCLE1BQU16RixXQUFXb0YsQ0FBQUEsR0FBQUEsd0JBQUFBLHNCQUFBQSxFQUF1QjtnQkFDdEMsR0FBR3RCLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0JxQixJQUFJbkYsUUFBUSxFQUFFO29CQUFFNkM7b0JBQVlrQixXQUFXO2dCQUFLLEVBQUU7Z0JBQ3JFc0IsZUFBZTVGLFFBQVFJLE1BQU0sQ0FBQ3dGLGFBQWE7Z0JBQzNDQyxTQUFTO1lBQ1g7WUFFQSxPQUFPM0YsUUFBUUMsT0FBTyxDQUFDO2dCQUNyQnNGLE1BQU07Z0JBQ05RLE9BQVEsS0FBRTFGLFdBQVdtRixJQUFJUixLQUFLLEdBQUdRLElBQUlLLElBQUk7Z0JBQ3pDRyxRQUFTLEtBQUUzRixXQUFXbUYsSUFBSVIsS0FBSyxHQUFHUSxJQUFJSyxJQUFJO1lBQzVDO1FBQ0Y7UUFFQSxPQUFPN0YsUUFBUUMsT0FBTyxDQUFDO1lBQ3JCc0YsTUFBTTtZQUNOSyxhQUFhRTtRQUNmO0lBQ0Y7SUFFQSxPQUFPOUYsUUFBUUMsT0FBTyxDQUFDO1FBQUVzRixNQUFNO0lBQWdCO0FBQ2pEO0FBTUEsZUFBZVUsc0JBQ2JuRyxPQUFrQztJQUVsQyxNQUFNdUYsVUFBVSxNQUFNbkcsa0JBQWtCWTtJQUN4QyxJQUFJLENBQUN1RixXQUFXLENBQUN2RixRQUFRb0csU0FBUyxFQUFFO1FBQ2xDLE9BQU87SUFDVDtJQUVBLE1BQU1DLE9BQU8sTUFBTXJHLFFBQVFvRyxTQUFTO0lBRXBDLE1BQU1FLFNBQVMsTUFBTXJELGtCQUFrQm9ELEtBQUtFLFFBQVEsRUFBRUYsS0FBS2xELFFBQVEsRUFBRW5EO0lBRXJFLE9BQU87UUFDTHVHLFVBQVVGLEtBQUtFLFFBQVE7UUFDdkJDLE1BQU1ILEtBQUtHLElBQUk7UUFDZnJELFVBQVVrRCxLQUFLbEQsUUFBUTtRQUN2QnNELE1BQU1KLEtBQUtJLElBQUk7UUFDZkMsVUFBVUwsS0FBS0ssUUFBUTtRQUN2Qko7SUFDRjtBQUNGO0FBeUVBLE1BQU1LLDBCQUNKckgsTUFFcUMsSUFDckMsQ0FNQTtBQUVGLE1BQU04SCxxQkFBcUJDLE9BQU87QUFFbEMsU0FBU0MsV0FDUDlGLEdBQVcsRUFDWCtGLFFBQWdCLEVBQ2hCdkgsT0FBZ0Q7SUFFaEQsT0FBT3dILE1BQU1oRyxLQUFLO1FBQ2hCLHNFQUFzRTtRQUN0RSx5REFBeUQ7UUFDekQsRUFBRTtRQUNGLG9FQUFvRTtRQUNwRSxZQUFZO1FBQ1osbUVBQW1FO1FBQ25FLEVBQUU7UUFDRixpRUFBaUU7UUFDakUsc0VBQXNFO1FBQ3RFLDhDQUE4QztRQUM5QywwQ0FBMEM7UUFDMUNpRyxhQUFhO1FBQ2JDLFFBQVExSCxRQUFRMEgsTUFBTSxJQUFJO1FBQzFCOUQsU0FBU2hFLE9BQU9DLE1BQU0sQ0FBQyxDQUFDLEdBQUdHLFFBQVE0RCxPQUFPLEVBQUU7WUFDMUMsaUJBQWlCO1FBQ25CO0lBQ0YsR0FBR2UsSUFBSSxDQUFDLENBQUN4QjtRQUNQLE9BQU8sQ0FBQ0EsU0FBU3dFLEVBQUUsSUFBSUosV0FBVyxLQUFLcEUsU0FBU3lFLE1BQU0sSUFBSSxNQUN0RE4sV0FBVzlGLEtBQUsrRixXQUFXLEdBQUd2SCxXQUM5Qm1EO0lBQ047QUFDRjtBQXNCQSxTQUFTMEUsaUJBQWlCcEIsSUFBWTtJQUNwQyxJQUFJO1FBQ0YsT0FBT3FCLEtBQUtDLEtBQUssQ0FBQ3RCO0lBQ3BCLEVBQUUsT0FBT3VCLE9BQU87UUFDZCxPQUFPO0lBQ1Q7QUFDRjtBQUVBLFNBQVNDLGNBQWMsS0FVRDtJQVZDLE1BQ3JCMUIsUUFBUSxFQUNSMkIsYUFBYSxFQUNiQyxVQUFVLEVBQ1ZDLGFBQWEsRUFDYkMsY0FBYyxFQUNkQyxTQUFTLEVBQ1RDLFlBQVksRUFDWkMsWUFBWSxFQUNaQyx3QkFBd0IsRUFDSixHQVZDO0lBV3JCLE1BQU0sRUFBRUMsTUFBTWhDLFFBQVEsRUFBRSxHQUFHLElBQUlpQyxJQUFJcEMsVUFBVU0sT0FBTytCLFFBQVEsQ0FBQ0YsSUFBSTtJQUNqRSxNQUFNRyxVQUFVLENBQUNDO1lBVUxBO2VBVFZ4QixXQUFXZixVQUFVOEIsaUJBQWlCLElBQUksR0FBRztZQUMzQ3pFLFNBQVNoRSxPQUFPQyxNQUFNLENBQ3BCLENBQUMsR0FDRHNJLGFBQWE7Z0JBQUVZLFNBQVM7WUFBVyxJQUFJLENBQUMsR0FDeENaLGNBQWNDLGdCQUFnQjtnQkFBRSx5QkFBeUI7WUFBSSxJQUFJLENBQUMsR0FDbEU5SSxNQUE4QixHQUMxQixDQUFxRCxHQUNyRCxDQUFDO1lBRVBvSSxRQUFRb0Isa0JBQUFBLFVBQUFBLE9BQUFBLEtBQUFBLElBQUFBLE9BQVFwQixNQUFBQSxLQUFNLE9BQWRvQixpQkFBa0I7UUFDNUIsR0FDR25FLElBQUksQ0FBQyxDQUFDeEI7WUFDTCxJQUFJQSxTQUFTd0UsRUFBRSxJQUFJbUIsQ0FBQUEsVUFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsT0FBUXBCLE1BQU0sTUFBSyxRQUFRO2dCQUM1QyxPQUFPO29CQUFFbkI7b0JBQVVwRDtvQkFBVXNELE1BQU07b0JBQUlELE1BQU0sQ0FBQztvQkFBR0U7Z0JBQVM7WUFDNUQ7WUFFQSxPQUFPdkQsU0FBU3NELElBQUksR0FBRzlCLElBQUksQ0FBQyxDQUFDOEI7Z0JBQzNCLElBQUksQ0FBQ3RELFNBQVN3RSxFQUFFLEVBQUU7b0JBQ2hCOzs7OzthQUtDLEdBQ0QsSUFDRVMsaUJBQ0E7d0JBQUM7d0JBQUs7d0JBQUs7d0JBQUs7cUJBQUksQ0FBQ3hGLFFBQVEsQ0FBQ08sU0FBU3lFLE1BQU0sR0FDN0M7d0JBQ0EsT0FBTzs0QkFBRXJCOzRCQUFVcEQ7NEJBQVVzRDs0QkFBTUQsTUFBTSxDQUFDOzRCQUFHRTt3QkFBUztvQkFDeEQ7b0JBRUEsSUFBSXZELFNBQVN5RSxNQUFNLEtBQUssS0FBSzs0QkFDdkJDO3dCQUFKLHlCQUFJQSxpQkFBaUJwQixLQUFBQSxLQUFBQSxPQUFBQSxLQUFBQSxJQUFqQm9CLGtCQUF3Qm9CLFFBQVEsRUFBRTs0QkFDcEMsT0FBTztnQ0FDTDFDO2dDQUNBQyxNQUFNO29DQUFFeUMsVUFBVTdCO2dDQUFtQjtnQ0FDckNqRTtnQ0FDQXNEO2dDQUNBQzs0QkFDRjt3QkFDRjtvQkFDRjtvQkFFQSxNQUFNc0IsUUFBUSxxQkFBd0MsQ0FBeEMsSUFBSWxJLE1BQU8sZ0NBQVg7K0JBQUE7b0NBQUE7c0NBQUE7b0JBQXVDO29CQUVyRDs7OzthQUlDLEdBQ0QsSUFBSSxDQUFDdUksZ0JBQWdCO3dCQUNuQmEsQ0FBQUEsR0FBQUEsYUFBQUEsY0FBQUEsRUFBZWxCO29CQUNqQjtvQkFFQSxNQUFNQTtnQkFDUjtnQkFFQSxPQUFPO29CQUNMekI7b0JBQ0FDLE1BQU04QixZQUFZVCxpQkFBaUJwQixRQUFRO29CQUMzQ3REO29CQUNBc0Q7b0JBQ0FDO2dCQUNGO1lBQ0Y7UUFDRixHQUNDL0IsSUFBSSxDQUFDLENBQUMwQjtZQUNMLElBQ0UsQ0FBQ2tDLGdCQUNEakosUUFBUUMsR0FBRyxDQUFDNEosTUFBYSxFQUFMLGNBQ3BCOUMsQ0FBOEQsRUFDOUQ7Z0JBQ0EsT0FBTzZCLGFBQWEsQ0FBQ3hCLFNBQVM7WUFDaEM7WUFDQSxPQUFPTDtRQUNULEdBQ0MrQyxLQUFLLENBQUMsQ0FBQ0M7WUFDTixJQUFJLENBQUNaLDBCQUEwQjtnQkFDN0IsT0FBT1AsYUFBYSxDQUFDeEIsU0FBUztZQUNoQztZQUNBLElBRUUyQyxJQUFJQyxLQURLLEVBQ0UsS0FBSyxxQkFDaEIsVUFBVTtZQUNWRCxJQUFJQyxPQUFPLEtBQUsscURBQ2hCLFNBQVM7WUFDVEQsSUFBSUMsT0FBTyxLQUFLLGVBQ2hCO2dCQUNBSixDQUFBQSxHQUFBQSxhQUFBQSxjQUFBQSxFQUFlRztZQUNqQjtZQUNBLE1BQU1BO1FBQ1I7O0lBRUosK0NBQStDO0lBQy9DLGdEQUFnRDtJQUNoRCwwREFBMEQ7SUFDMUQsMkRBQTJEO0lBQzNELElBQUlaLDRCQUE0QkYsY0FBYztRQUM1QyxPQUFPTSxRQUFRLENBQUMsR0FBR2xFLElBQUksQ0FBQyxDQUFDMEI7WUFDdkIsSUFBSUEsS0FBS2xELFFBQVEsQ0FBQ1MsT0FBTyxDQUFDQyxHQUFHLENBQUMsMEJBQTBCLFlBQVk7Z0JBQ2xFLDhDQUE4QztnQkFDOUNxRSxhQUFhLENBQUN4QixTQUFTLEdBQUd4RyxRQUFRQyxPQUFPLENBQUNrRztZQUM1QztZQUVBLE9BQU9BO1FBQ1Q7SUFDRjtJQUVBLElBQUk2QixhQUFhLENBQUN4QixTQUFTLEtBQUsxQixXQUFXO1FBQ3pDLE9BQU9rRCxhQUFhLENBQUN4QixTQUFTO0lBQ2hDO0lBQ0EsT0FBUXdCLGFBQWEsQ0FBQ3hCLFNBQVMsR0FBR21DLFFBQ2hDTCxlQUFlO1FBQUVkLFFBQVE7SUFBTyxJQUFJLENBQUM7QUFFekM7QUFNTyxTQUFTeEk7SUFDZCxPQUFPcUssS0FBS0MsTUFBTSxHQUFHQyxRQUFRLENBQUMsSUFBSUMsS0FBSyxDQUFDLEdBQUc7QUFDN0M7QUFFQSxTQUFTQyxxQkFBcUIsS0FNN0I7SUFONkIsTUFDNUJuSSxHQUFHLEVBQ0hwQixNQUFNLEVBSVAsR0FONkI7SUFPNUIsd0RBQXdEO0lBQ3hELGtEQUFrRDtJQUNsRCxJQUFJb0IsUUFBUVQsQ0FBQUEsR0FBQUEsYUFBQUEsV0FBVyxFQUFDQyxDQUFBQSxHQUFBQSxXQUFBQSxTQUFBQSxFQUFVWixPQUFPTSxNQUFNLEVBQUVOLE9BQU9hLE1BQU0sSUFBSTtRQUNoRSxNQUFNLHFCQUVMLENBRkssSUFBSW5CLE1BQ1AsMkRBQXdEMEIsTUFBSSxNQUFHb0gsU0FBU0YsSUFBSSxHQUR6RTttQkFBQTt3QkFBQTswQkFBQTtRQUVOO0lBQ0Y7SUFDQTdCLE9BQU8rQixRQUFRLENBQUNGLElBQUksR0FBR2xIO0FBQ3pCO0FBRUEsTUFBTW9JLHNCQUFzQjtRQUFDLEVBQzNCQyxLQUFLLEVBQ0x6SixNQUFNLEVBSVA7SUFDQyxJQUFJTCxZQUFZO0lBQ2hCLE1BQU0rSixTQUFVMUosT0FBTzJKLEdBQUcsR0FBRztRQUMzQmhLLFlBQVk7SUFDZDtJQUVBLE1BQU1pSyxrQkFBa0I7UUFDdEIsSUFBSWpLLFdBQVc7WUFDYixNQUFNaUksUUFBYSxxQkFFbEIsQ0FGa0IsSUFBSWxJLE1BQ3BCLDBDQUF1QytKLFFBQU0sTUFEN0I7dUJBQUE7NEJBQUE7OEJBQUE7WUFFbkI7WUFDQTdCLE1BQU1qSSxTQUFTLEdBQUc7WUFDbEIsTUFBTWlJO1FBQ1I7UUFFQSxJQUFJOEIsV0FBVzFKLE9BQU8ySixHQUFHLEVBQUU7WUFDekIzSixPQUFPMkosR0FBRyxHQUFHO1FBQ2Y7SUFDRjtJQUNBLE9BQU9DO0FBQ1Q7QUFFZSxNQUFNN0s7SUErU25COEssU0FBZTtRQUNicEQsT0FBTytCLFFBQVEsQ0FBQ3FCLE1BQU07SUFDeEI7SUFFQTs7R0FFQyxHQUNEQyxPQUFPO1FBQ0xyRCxPQUFPQyxPQUFPLENBQUNvRCxJQUFJO0lBQ3JCO0lBRUE7O0dBRUMsR0FDREMsVUFBVTtRQUNSdEQsT0FBT0MsT0FBTyxDQUFDcUQsT0FBTztJQUN4QjtJQUVBOzs7OztHQUtDLEdBQ0RDLEtBQUs1SSxHQUFRLEVBQUVPLEVBQVEsRUFBRS9CLE9BQStCLEVBQUU7UUFBakNBLElBQUFBLFlBQUFBLEtBQUFBLEdBQUFBLFVBQTZCLENBQUM7UUFDckQsSUFBSVYsS0FBcUMsRUFBRSxFQVkxQzs7U0FDQyxFQUFFa0MsR0FBRyxFQUFFTyxFQUFFLEVBQUUsR0FBR0QsYUFBYSxJQUFJLEVBQUVOLEtBQUtPLEdBQUFBLENBQUU7UUFDMUMsT0FBTyxJQUFJLENBQUM2SSxNQUFNLENBQUMsYUFBYXBKLEtBQUtPLElBQUkvQjtJQUMzQztJQUVBOzs7OztHQUtDLEdBQ0Q2SyxRQUFRckosR0FBUSxFQUFFTyxFQUFRLEVBQUUvQixPQUErQixFQUFFO1FBQWpDQSxJQUFBQSxZQUFBQSxLQUFBQSxHQUFBQSxVQUE2QixDQUFDOztTQUN0RCxFQUFFd0IsR0FBRyxFQUFFTyxFQUFFLEVBQUUsR0FBR0QsYUFBYSxJQUFJLEVBQUVOLEtBQUtPLEdBQUFBLENBQUU7UUFDMUMsT0FBTyxJQUFJLENBQUM2SSxNQUFNLENBQUMsZ0JBQWdCcEosS0FBS08sSUFBSS9CO0lBQzlDO0lBRUEsTUFBTThLLEtBQ0ovSSxFQUFVLEVBQ1ZFLFVBQW1CLEVBQ25CaEIsTUFBdUIsRUFDdkI4SixZQUFzQixFQUN0QjtRQUNBLElBQUl6TCxJQUErQyxFQUFFO1lBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMyTCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUNDLE1BQU0sRUFBRTtnQkFDaEMsTUFBTSxFQUFFQyxXQUFXLEVBQUUsR0FDbkIxTCxtQkFBT0EsQ0FBQyxtUEFBd0I7Z0JBS2xDLElBQUkyTDtnQkFDSixJQUFJQztnQkFFSixJQUFJOztxQkFDQSxFQUNBQyxzQkFBc0JGLGdCQUFnQixFQUN0Q0csdUJBQXVCRixpQkFBaUIsRUFDekMsR0FBSSxNQUFNM0csQ0FBQUEsR0FBQUEsYUFBQUEsc0JBQUFBLEdBQXNCLENBR2pDO2dCQUNGLEVBQUUsT0FBTzJFLEtBQUs7b0JBQ1osOENBQThDO29CQUM5QyxhQUFhO29CQUNibUMsUUFBUXhELEtBQUssQ0FBQ3FCO29CQUNkLElBQUkwQixjQUFjO3dCQUNoQixPQUFPO29CQUNUO29CQUNBcEIscUJBQXFCO3dCQUNuQm5JLEtBQUtULENBQUFBLEdBQUFBLGFBQUFBLFdBQUFBLEVBQ0hDLENBQUFBLEdBQUFBLFdBQUFBLFNBQUFBLEVBQVVlLElBQUlkLFVBQVUsSUFBSSxDQUFDQSxNQUFNLEVBQUUsSUFBSSxDQUFDMkUsYUFBYTt3QkFFekR4RixRQUFRLElBQUk7b0JBQ2Q7b0JBQ0EsT0FBTyxJQUFJRixRQUFRLEtBQU87Z0JBQzVCO2dCQUVBLE1BQU11TCxxQkFBcUNuTSwyb0VBQ1g7Z0JBRWhDLElBQUksQ0FBQzhMLG9CQUFvQkssb0JBQW9CO29CQUMzQ0wsbUJBQW1CSyxxQkFBcUJBLHFCQUFxQnpHO2dCQUMvRDtnQkFFQSxNQUFNMkcscUJBQXFDck0sd0pBQ1g7Z0JBRWhDLElBQUksQ0FBQytMLHFCQUFxQk0sb0JBQW9CO29CQUM1Q04sb0JBQW9CTSxxQkFDaEJBLHFCQUNBM0c7Z0JBQ047Z0JBRUEsSUFBSW9HLG9CQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxpQkFBa0JTLFNBQVMsRUFBRTtvQkFDL0IsSUFBSSxDQUFDWixNQUFNLEdBQUcsSUFBSUUsWUFDaEJDLGlCQUFpQlUsUUFBUSxFQUN6QlYsaUJBQWlCVyxTQUFTO29CQUU1QixJQUFJLENBQUNkLE1BQU0sQ0FBQ2UsTUFBTSxDQUFDWjtnQkFDckI7Z0JBRUEsSUFBSUMscUJBQUFBLE9BQUFBLEtBQUFBLElBQUFBLGtCQUFtQlEsU0FBUyxFQUFFO29CQUNoQyxJQUFJLENBQUNYLE1BQU0sR0FBRyxJQUFJQyxZQUNoQkUsa0JBQWtCUyxRQUFRLEVBQzFCVCxrQkFBa0JVLFNBQVM7b0JBRTdCLElBQUksQ0FBQ2IsTUFBTSxDQUFDYyxNQUFNLENBQUNYO2dCQUNyQjtZQUNGO1lBRUEsSUFBSVksbUJBQW1CO1lBQ3ZCLElBQUlDLG9CQUFvQjtZQUN4QixNQUFNQyxlQUNKO2dCQUFDO29CQUFFcEs7Z0JBQUc7Z0JBQUc7b0JBQUVBLElBQUlFO2dCQUFXO2FBQUU7WUFFOUIsS0FBSyxNQUFNLEVBQUVGLElBQUlxSyxLQUFLLEVBQUVDLGlCQUFpQixFQUFFLElBQUlGLGFBQWM7Z0JBQzNELElBQUlDLE9BQU87b0JBQ1QsTUFBTUUsWUFBWTVKLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFDaEIsSUFBSWlHLElBQUl5RCxPQUFPLFlBQVk3TCxRQUFRO29CQUVyQyxNQUFNZ00sa0JBQWtCeEwsQ0FBQUEsR0FBQUEsYUFBQUEsV0FBQUEsRUFDdEJDLENBQUFBLEdBQUFBLFdBQUFBLFNBQUFBLEVBQVVzTCxXQUFXckwsVUFBVSxJQUFJLENBQUNBLE1BQU07b0JBRzVDLElBQ0VvTCxxQkFDQUMsY0FDRTVKLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBbUIsRUFBQyxJQUFJaUcsSUFBSSxJQUFJLENBQUNqSSxNQUFNLEVBQUUsWUFBWUgsUUFBUSxHQUMvRDs0QkFHSSxjQUNBO3dCQUhKMEwsbUJBQ0VBLG9CQUNBLENBQUMsa0JBQUMsSUFBSSxDQUFDaEIsTUFBQUEsS0FBTSxnQkFBWCxhQUFhdUIsUUFBUSxDQUFDRixVQUFBQSxLQUN4QixDQUFDLG1CQUFDLElBQUksQ0FBQ3JCLE1BQU0scUJBQVgsY0FBYXVCLFFBQVEsQ0FBQ0QsZ0JBQUFBO3dCQUUxQixLQUFLLE1BQU1FLGdCQUFnQjs0QkFBQ0g7NEJBQVdDO3lCQUFnQixDQUFFOzRCQUN2RCxzREFBc0Q7NEJBQ3RELDhCQUE4Qjs0QkFDOUIsTUFBTUcsYUFBYUQsYUFBYUUsS0FBSyxDQUFDOzRCQUN0QyxJQUNFLElBQUlDLElBQUksR0FDUixDQUFDVixxQkFBcUJVLElBQUlGLFdBQVc3SyxNQUFNLEdBQUcsR0FDOUMrSyxJQUNBO29DQUVtQjtnQ0FEbkIsTUFBTUMsY0FBY0gsV0FBV2hELEtBQUssQ0FBQyxHQUFHa0QsR0FBR0UsSUFBSSxDQUFDO2dDQUNoRCxJQUFJRCxlQUFBQSxDQUFBQSxDQUFlLG1CQUFJLENBQUMzQixNQUFNLHFCQUFYLGFBQWFzQixRQUFRLENBQUNLLFlBQUFBLEdBQWM7b0NBQ3JEWCxvQkFBb0I7b0NBQ3BCO2dDQUNGOzRCQUNGO3dCQUNGO3dCQUVBLHlEQUF5RDt3QkFDekQsb0JBQW9CO3dCQUNwQixJQUFJRCxvQkFBb0JDLG1CQUFtQjs0QkFDekMsSUFBSW5CLGNBQWM7Z0NBQ2hCLE9BQU87NEJBQ1Q7NEJBQ0FwQixxQkFBcUI7Z0NBQ25CbkksS0FBS1QsQ0FBQUEsR0FBQUEsYUFBQUEsV0FBQUEsRUFDSEMsQ0FBQUEsR0FBQUEsV0FBQUEsU0FBQUEsRUFBVWUsSUFBSWQsVUFBVSxJQUFJLENBQUNBLE1BQU0sRUFBRSxJQUFJLENBQUMyRSxhQUFhO2dDQUV6RHhGLFFBQVEsSUFBSTs0QkFDZDs0QkFDQSxPQUFPLElBQUlGLFFBQVEsS0FBTzt3QkFDNUI7b0JBQ0Y7Z0JBQ0Y7WUFDRjtRQUNGO1FBQ0EsT0FBTztJQUNUO0lBRUEsTUFBYzBLLE9BQ1psRCxNQUFxQixFQUNyQmxHLEdBQVcsRUFDWE8sRUFBVSxFQUNWL0IsT0FBMEIsRUFDMUIrTSxZQUF1QyxFQUNyQjtZQThPYjtRQTdPTCxJQUFJLENBQUNDLENBQUFBLEdBQUFBLFlBQUFBLFVBQUFBLEVBQVd4TCxNQUFNO1lBQ3BCbUkscUJBQXFCO2dCQUFFbkk7Z0JBQUtwQixRQUFRLElBQUk7WUFBQztZQUN6QyxPQUFPO1FBQ1Q7UUFDQSxzRUFBc0U7UUFDdEUseUVBQXlFO1FBQ3pFLDJCQUEyQjtRQUMzQixNQUFNNk0sa0JBQW1Cak4sUUFBZ0JrTixFQUFFLEtBQUs7UUFFaEQsSUFBSSxDQUFDRCxtQkFBbUIsQ0FBQ2pOLFFBQVFtTixPQUFPLEVBQUU7WUFDeEMsTUFBTSxJQUFJLENBQUNyQyxJQUFJLENBQUMvSSxJQUFJaUQsV0FBV2hGLFFBQVFpQixNQUFNO1FBQy9DO1FBRUEsSUFBSW1NLG9CQUNGSCxtQkFDQ2pOLFFBQWdCcU4sa0JBQWtCLElBQ25DNU0sQ0FBQUEsR0FBQUEsV0FBQUEsU0FBQUEsRUFBVWUsS0FBS2pCLFFBQVEsS0FBS0UsQ0FBQUEsR0FBQUEsV0FBQUEsU0FBQUEsRUFBVXNCLElBQUl4QixRQUFRO1FBRXBELE1BQU0rTSxZQUFZO1lBQ2hCLEdBQUcsSUFBSSxDQUFDQyxLQUFLO1FBQ2Y7UUFFQSx5REFBeUQ7UUFDekQsNERBQTREO1FBQzVELCtCQUErQjtRQUMvQixNQUFNQyxtQkFBbUIsSUFBSSxDQUFDQyxPQUFPLEtBQUs7UUFDMUMsSUFBSSxDQUFDQSxPQUFPLEdBQUc7UUFDZixNQUFNQyxRQUFRLElBQUksQ0FBQ0EsS0FBSztRQUV4QixJQUFJLENBQUNULGlCQUFpQjtZQUNwQixJQUFJLENBQUNTLEtBQUssR0FBRztRQUNmO1FBRUEsc0RBQXNEO1FBQ3RELHdEQUF3RDtRQUN4RCxJQUFJVCxtQkFBbUIsSUFBSSxDQUFDbEQsR0FBRyxFQUFFO1lBQy9CLE9BQU87UUFDVDtRQUVBLE1BQU00RCxhQUFhTCxVQUFVck0sTUFBTTtRQUVuQyxJQUFJM0IsS0FBK0IsRUFBRSxzQkFzRnBDO1FBRUQsb0RBQW9EO1FBQ3BELElBQUltUCxPQUFBQSxFQUFFLEVBQUU7WUFDTkMsWUFBWUMsSUFBSSxDQUFDO1FBQ25CO1FBRUEsTUFBTSxFQUFFeEIsVUFBVSxLQUFLLEVBQUV5QixTQUFTLElBQUksRUFBRSxHQUFHNU87UUFDM0MsTUFBTTZPLGFBQWE7WUFBRTFCO1FBQVE7UUFFN0IsSUFBSSxJQUFJLENBQUMyQixjQUFjLElBQUksSUFBSSxDQUFDL0UsR0FBRyxFQUFFO1lBQ25DLElBQUksQ0FBQzJELE9BQU87Z0JBQ1Z2TyxPQUFPNFAsTUFBTSxDQUFDQyxJQUFJLENBQ2hCLG9CQUNBclAsMEJBQ0EsSUFBSSxDQUFDbVAsY0FBYyxFQUNuQkQ7WUFFSjtZQUNBLElBQUksQ0FBQzlFLEdBQUc7WUFDUixJQUFJLENBQUNBLEdBQUcsR0FBRztRQUNiO1FBRUFoSSxLQUFLaEIsQ0FBQUEsR0FBQUEsYUFBQUEsV0FBQUEsRUFDSEMsQ0FBQUEsR0FBQUEsV0FBQUEsU0FBQUEsRUFDRUosQ0FBQUEsR0FBQUEsYUFBQUEsV0FBQUEsRUFBWW1CLE1BQU1sQixDQUFBQSxHQUFBQSxnQkFBQUEsY0FBQUEsRUFBZWtCLE1BQU1BLElBQ3ZDL0IsUUFBUWlCLE1BQU0sRUFDZCxJQUFJLENBQUMyRSxhQUFhO1FBR3RCLE1BQU1qRixZQUFZc08sQ0FBQUEsR0FBQUEsY0FBQUEsWUFBQUEsRUFDaEJyTyxDQUFBQSxHQUFBQSxhQUFBQSxXQUFBQSxFQUFZbUIsTUFBTWxCLENBQUFBLEdBQUFBLGdCQUFBQSxjQUFBQSxFQUFla0IsTUFBTUEsSUFDdkN1TCxVQUFVck0sTUFBTTtRQUVsQixJQUFJLENBQUM2TixjQUFjLEdBQUcvTTtRQUV0QixNQUFNbU4sZUFBZXZCLGVBQWVMLFVBQVVyTSxNQUFNO1FBRXBELHFEQUFxRDtRQUNyRCwwREFBMEQ7UUFFMUQsSUFBSSxDQUFDZ00sbUJBQW1CLElBQUksQ0FBQ2tDLGVBQWUsQ0FBQ3hPLGNBQWMsQ0FBQ3VPLGNBQWM7WUFDeEU1QixVQUFVNU0sTUFBTSxHQUFHQztZQUNuQnhCLE9BQU80UCxNQUFNLENBQUNDLElBQUksQ0FBQyxtQkFBbUJqTixJQUFJOE07WUFDMUMsOERBQThEO1lBQzlELElBQUksQ0FBQ08sV0FBVyxDQUFDMUgsUUFBUWxHLEtBQUtPLElBQUk7Z0JBQ2hDLEdBQUcvQixPQUFPO2dCQUNWNE8sUUFBUTtZQUNWO1lBQ0EsSUFBSUEsUUFBUTtnQkFDVixJQUFJLENBQUNTLFlBQVksQ0FBQzFPO1lBQ3BCO1lBQ0EsSUFBSTtnQkFDRixNQUFNLElBQUksQ0FBQzJPLEdBQUcsQ0FBQ2hDLFdBQVcsSUFBSSxDQUFDaUMsVUFBVSxDQUFDakMsVUFBVXpELEtBQUssQ0FBQyxFQUFFO1lBQzlELEVBQUUsT0FBT1IsS0FBSztnQkFDWixJQUFJbUcsQ0FBQUEsR0FBQUEsU0FBQUEsT0FBQUEsRUFBUW5HLFFBQVFBLElBQUl0SixTQUFTLEVBQUU7b0JBQ2pDWixPQUFPNFAsTUFBTSxDQUFDQyxJQUFJLENBQUMsb0JBQW9CM0YsS0FBSzFJLFdBQVdrTztnQkFDekQ7Z0JBQ0EsTUFBTXhGO1lBQ1I7WUFFQWxLLE9BQU80UCxNQUFNLENBQUNDLElBQUksQ0FBQyxzQkFBc0JqTixJQUFJOE07WUFDN0MsT0FBTztRQUNUO1FBRUEsSUFBSVksU0FBU3RMLENBQUFBLEdBQUFBLGtCQUFBQSxnQkFBQUEsRUFBaUIzQztRQUM5QixJQUFJLEVBQUVqQixRQUFRLEVBQUUyRSxLQUFLLEVBQUUsR0FBR3VLO1FBRTFCLHlFQUF5RTtRQUN6RSwyRUFBMkU7UUFDM0Usb0JBQW9CO1FBQ3BCLElBQUlqTixPQUFpQnFDO1FBQ3JCLElBQUk7O1lBQ0QsQ0FBQ3JDLE9BQU8sRUFBRW9DLFlBQVlDLFFBQVEsRUFBRSxDQUFDLEdBQUcsTUFBTTNFLFFBQVFzRSxHQUFHLENBQUM7Z0JBQ3JELElBQUksQ0FBQ25FLFVBQVUsQ0FBQ29FLFdBQVc7Z0JBQzNCQyxDQUFBQSxHQUFBQSxhQUFBQSxzQkFBQUE7Z0JBQ0EsSUFBSSxDQUFDckUsVUFBVSxDQUFDQyxhQUFhO2FBQzlCO1FBQ0gsRUFBRSxPQUFPK0ksS0FBSztZQUNaLHdFQUF3RTtZQUN4RSwrQkFBK0I7WUFDL0JNLHFCQUFxQjtnQkFBRW5JLEtBQUtPO2dCQUFJM0IsUUFBUSxJQUFJO1lBQUM7WUFDN0MsT0FBTztRQUNUO1FBRUEsdUVBQXVFO1FBQ3ZFLDhFQUE4RTtRQUM5RSx1REFBdUQ7UUFDdkQsb0VBQW9FO1FBQ3BFLHNFQUFzRTtRQUN0RSxJQUFJLENBQUMsSUFBSSxDQUFDc1AsUUFBUSxDQUFDL08sY0FBYyxDQUFDdU8sY0FBYztZQUM5Q3hILFNBQVM7UUFDWDtRQUVBLGlFQUFpRTtRQUNqRSxpREFBaUQ7UUFDakQsSUFBSXpGLGFBQWFGO1FBRWpCLDZEQUE2RDtRQUM3RCxnRUFBZ0U7UUFDaEUsMkRBQTJEO1FBQzNEeEIsV0FBV0EsV0FDUG1DLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0I3QixDQUFBQSxHQUFBQSxnQkFBQUEsY0FBQUEsRUFBZU4sYUFDbkNBO1FBRUosSUFBSXNKLFFBQVFuSCxDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQW1CLEVBQUNuQztRQUNoQyxNQUFNb1AsbUJBQW1CNU4sR0FBR0osVUFBVSxDQUFDLFFBQVF3QyxDQUFBQSxHQUFBQSxrQkFBQUEsZ0JBQUFBLEVBQWlCcEMsSUFBSXhCLFFBQVE7UUFFNUUsMERBQTBEO1FBQzFELDBCQUEwQjtRQUMxQixpQ0FBSyxJQUFJLENBQUNnUCxVQUFVLENBQUNoUCxTQUFBQSxLQUFTLGdCQUF6QiwwQkFBbUNxUCxXQUFXLEVBQUU7WUFDbkRqRyxxQkFBcUI7Z0JBQUVuSSxLQUFLTztnQkFBSTNCLFFBQVEsSUFBSTtZQUFDO1lBQzdDLE9BQU8sSUFBSUYsUUFBUSxLQUFPO1FBQzVCO1FBRUEsTUFBTTJQLHNCQUFzQixDQUFDLENBQzNCRixDQUFBQSxvQkFDQTlGLFVBQVU4RixvQkFDVCxFQUFDN00sQ0FBQUEsR0FBQUEsV0FBQUEsY0FBQUEsRUFBZStHLFVBQ2YsQ0FBQ3JFLENBQUFBLEdBQUFBLGNBQUFBLGVBQUFBLEVBQWdCekMsQ0FBQUEsR0FBQUEsWUFBQUEsYUFBYSxFQUFDOEcsUUFBUThGLGlCQUFBQSxDQUFnQixDQUFDO1FBRzVELDBEQUEwRDtRQUMxRCxxREFBcUQ7UUFDckQsTUFBTUcsb0JBQ0osQ0FBQzlQLFFBQVFtTixPQUFPLElBQ2YsTUFBTS9OLGtCQUFrQjtZQUN2QnNCLFFBQVFxQjtZQUNSZCxRQUFRcU0sVUFBVXJNLE1BQU07WUFDeEJiLFFBQVEsSUFBSTtRQUNkO1FBRUYsSUFBSTZNLG1CQUFtQjZDLG1CQUFtQjtZQUN4QzFDLG9CQUFvQjtRQUN0QjtRQUVBLElBQUlBLHFCQUFxQjdNLGFBQWEsV0FBVzs7WUFDN0NQLFFBQWdCcU4sa0JBQWtCLEdBQUc7WUFFdkMsSUFBSS9OLEtBQStCLElBQUl5QyxHQUFHSixVQUFVLENBQUMsTUFBTTtnQkFDekQsTUFBTW9PLGlCQUFpQjFRLGdCQUNyQjBCLENBQUFBLEdBQUFBLGFBQUFBLFdBQUFBLEVBQVlDLENBQUFBLEdBQUFBLFdBQUFBLFNBQUFBLEVBQVVMLFdBQVcyTSxVQUFVck0sTUFBTSxHQUFHLE9BQ3BEdUIsT0FDQXFDLFVBQ0FLLE9BQ0EsQ0FBQzhLLElBQWN6TixvQkFBb0J5TixHQUFHeE4sUUFDdEMsSUFBSSxDQUFDZSxPQUFPO2dCQUdkLElBQUl3TSxlQUFlRSxZQUFZLEVBQUU7b0JBQy9CdEcscUJBQXFCO3dCQUFFbkksS0FBS087d0JBQUkzQixRQUFRLElBQUk7b0JBQUM7b0JBQzdDLE9BQU87Z0JBQ1Q7Z0JBQ0EsSUFBSSxDQUFDMFAsbUJBQW1CO29CQUN0QjdOLGFBQWE4TixlQUFlclAsTUFBTTtnQkFDcEM7Z0JBRUEsSUFBSXFQLGVBQWUzSyxXQUFXLElBQUkySyxlQUFlL04sWUFBWSxFQUFFO29CQUM3RCxnRUFBZ0U7b0JBQ2hFLDRDQUE0QztvQkFDNUN6QixXQUFXd1AsZUFBZS9OLFlBQVk7b0JBQ3RDeU4sT0FBT2xQLFFBQVEsR0FBR1EsQ0FBQUEsR0FBQUEsYUFBQUEsV0FBQUEsRUFBWVI7b0JBRTlCLElBQUksQ0FBQ3VQLG1CQUFtQjt3QkFDdEJ0TyxNQUFNdU0sQ0FBQUEsR0FBQUEsV0FBQUEsb0JBQUFBLEVBQXFCMEI7b0JBQzdCO2dCQUNGO1lBQ0YsT0FBTztnQkFDTEEsT0FBT2xQLFFBQVEsR0FBR2dDLG9CQUFvQmhDLFVBQVVpQztnQkFFaEQsSUFBSWlOLE9BQU9sUCxRQUFRLEtBQUtBLFVBQVU7b0JBQ2hDQSxXQUFXa1AsT0FBT2xQLFFBQVE7b0JBQzFCa1AsT0FBT2xQLFFBQVEsR0FBR1EsQ0FBQUEsR0FBQUEsYUFBQUEsV0FBQUEsRUFBWVI7b0JBRTlCLElBQUksQ0FBQ3VQLG1CQUFtQjt3QkFDdEJ0TyxNQUFNdU0sQ0FBQUEsR0FBQUEsV0FBQUEsb0JBQUFBLEVBQXFCMEI7b0JBQzdCO2dCQUNGO1lBQ0Y7UUFDRjtRQUVBLElBQUksQ0FBQ3pDLENBQUFBLEdBQUFBLFlBQUFBLFVBQUFBLEVBQVdqTCxLQUFLO1lBQ25CLElBQUl6QyxJQUFvQixFQUFtQjtnQkFDekMsTUFBTSxxQkFHTCxDQUhLLElBQUlRLE1BQ1Asb0JBQWlCMEIsTUFBSSxnQkFBYU8sS0FBRyw4Q0FDbkMsdUZBRkM7MkJBQUE7Z0NBQUE7a0NBQUE7Z0JBR047WUFDRjtZQUNBNEgscUJBQXFCO2dCQUFFbkksS0FBS087Z0JBQUkzQixRQUFRLElBQUk7WUFBQztZQUM3QyxPQUFPO1FBQ1Q7UUFFQTZCLGFBQWFnTixDQUFBQSxHQUFBQSxjQUFBQSxZQUFBQSxFQUFhcE8sQ0FBQUEsR0FBQUEsZ0JBQUFBLGNBQUFBLEVBQWVvQixhQUFhcUwsVUFBVXJNLE1BQU07UUFFdEU0SSxRQUFRbkgsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFtQixFQUFDbkM7UUFDNUIsSUFBSTJQLGFBQTZCO1FBRWpDLElBQUlwTixDQUFBQSxHQUFBQSxXQUFBQSxjQUFBQSxFQUFlK0csUUFBUTtZQUN6QixNQUFNeEUsV0FBV2xCLENBQUFBLEdBQUFBLGtCQUFBQSxnQkFBZ0IsRUFBQ2xDO1lBQ2xDLE1BQU16QixhQUFhNkUsU0FBUzlFLFFBQVE7WUFFcEMsTUFBTTRQLGFBQWFwTixDQUFBQSxHQUFBQSxZQUFBQSxhQUFBQSxFQUFjOEc7WUFDakNxRyxhQUFhMUssQ0FBQUEsR0FBQUEsY0FBQUEsZUFBQUEsRUFBZ0IySyxZQUFZM1A7WUFDekMsTUFBTTRQLG9CQUFvQnZHLFVBQVVySjtZQUNwQyxNQUFNNlAsaUJBQWlCRCxvQkFDbkJFLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWN6RyxPQUFPckosWUFBWTBFLFNBQ2hDLENBQUM7WUFFTixJQUFJLENBQUNnTCxjQUFlRSxxQkFBcUIsQ0FBQ0MsZUFBZXBMLE1BQU0sRUFBRztnQkFDaEUsTUFBTXNMLGdCQUFnQjNRLE9BQU80USxJQUFJLENBQUNMLFdBQVdNLE1BQU0sRUFBRUMsTUFBTSxDQUN6RCxDQUFDQyxRQUFVLENBQUN6TCxLQUFLLENBQUN5TCxNQUFNLElBQUksQ0FBQ1IsV0FBV00sTUFBTSxDQUFDRSxNQUFNLENBQUNDLFFBQVE7Z0JBR2hFLElBQUlMLGNBQWMxTyxNQUFNLEdBQUcsS0FBSyxDQUFDaU8sbUJBQW1CO29CQUNsRCxJQUFJeFEsSUFBb0IsRUFBbUI7d0JBQ3pDa00sUUFBUXFGLElBQUksQ0FDVCxLQUNDVCxDQUFBQSxvQkFDSyx1QkFDQSw4QkFBK0IsR0FDckMsaUNBQ0Msa0JBQWVHLGNBQWN6RCxJQUFJLENBQy9CLFFBQ0EsMkJBQTRCO29CQUVwQztvQkFFQSxNQUFNLHFCQVdMLENBWEssSUFBSWhOLE1BQ1BzUSxDQUFBQSxvQkFDSSwwQkFBeUI1TyxNQUFJLHNDQUFtQytPLGNBQWN6RCxJQUFJLENBQ2pGLFFBQ0Esb0NBQ0QsOEJBQTZCdE0sYUFBVyw4Q0FBNkNxSixRQUFNLE1BQUcsSUFDakcsaURBQ0V1RyxDQUFBQSxvQkFDSSw4QkFDQSx1QkFBcUIsQ0FDMUIsR0FWQzsrQkFBQTtvQ0FBQTtzQ0FBQTtvQkFXTjtnQkFDRjtZQUNGLE9BQU8sSUFBSUEsbUJBQW1CO2dCQUM1QnJPLEtBQUtnTSxDQUFBQSxHQUFBQSxXQUFBQSxvQkFBQUEsRUFDSG5PLE9BQU9DLE1BQU0sQ0FBQyxDQUFDLEdBQUd3RixVQUFVO29CQUMxQjlFLFVBQVU4UCxlQUFlcEwsTUFBTTtvQkFDL0JDLE9BQU80TCxDQUFBQSxHQUFBQSxNQUFBQSxJQUFJLEVBQUM1TCxPQUFPbUwsZUFBZXZILE1BQU07Z0JBQzFDO1lBRUosT0FBTztnQkFDTCxpRUFBaUU7Z0JBQ2pFbEosT0FBT0MsTUFBTSxDQUFDcUYsT0FBT2dMO1lBQ3ZCO1FBQ0Y7UUFFQSxJQUFJLENBQUNqRCxpQkFBaUI7WUFDcEI5TixPQUFPNFAsTUFBTSxDQUFDQyxJQUFJLENBQUMsb0JBQW9Cak4sSUFBSThNO1FBQzdDO1FBRUEsTUFBTWtDLGVBQWUsSUFBSSxDQUFDeFEsUUFBUSxLQUFLLFVBQVUsSUFBSSxDQUFDQSxRQUFRLEtBQUs7UUFFbkUsSUFBSTtnQkFzS0FpSyxxQ0FBQUEsMkJBQ0F3RztZQXRLRixJQUFJQSxZQUFZLE1BQU0sSUFBSSxDQUFDQyxZQUFZLENBQUM7Z0JBQ3RDcEg7Z0JBQ0F0SjtnQkFDQTJFO2dCQUNBbkQ7Z0JBQ0FFO2dCQUNBNE07Z0JBQ0E1TixRQUFRcU0sVUFBVXJNLE1BQU07Z0JBQ3hCaVEsV0FBVzVELFVBQVU0RCxTQUFTO2dCQUM5QjlJLGVBQWUwSDtnQkFDZnJILDBCQUEwQnpJLFFBQVF5SSx3QkFBd0I7Z0JBQzFEd0UsaUJBQWlCQSxtQkFBbUIsQ0FBQyxJQUFJLENBQUNrRSxVQUFVO2dCQUNwRHRCO1lBQ0Y7WUFFQSxJQUFJLENBQUM1QyxtQkFBbUIsQ0FBQ2pOLFFBQVFtTixPQUFPLEVBQUU7Z0JBQ3hDLE1BQU0sSUFBSSxDQUFDckMsSUFBSSxDQUNiL0ksSUFDQSxnQkFBZ0JpUCxZQUFZQSxVQUFVL08sVUFBVSxHQUFHK0MsV0FDbkRzSSxVQUFVck0sTUFBTTtZQUVwQjtZQUVBLElBQUksV0FBVytQLGFBQWFsQixtQkFBbUI7Z0JBQzdDdlAsV0FBV3lRLFVBQVVuSCxLQUFLLElBQUlBO2dCQUM5QkEsUUFBUXRKO2dCQUVSLElBQUksQ0FBQ3NPLFdBQVcxQixPQUFPLEVBQUU7b0JBQ3ZCakksUUFBUXRGLE9BQU9DLE1BQU0sQ0FBQyxDQUFDLEdBQUdtUixVQUFVOUwsS0FBSyxJQUFJLENBQUMsR0FBR0E7Z0JBQ25EO2dCQUVBLE1BQU1rTSx3QkFBd0J4USxDQUFBQSxHQUFBQSxhQUFBQSxXQUFBQSxFQUFZNk8sT0FBT2xQLFFBQVEsSUFDckRNLENBQUFBLEdBQUFBLGdCQUFBQSxjQUFBQSxFQUFlNE8sT0FBT2xQLFFBQVEsSUFDOUJrUCxPQUFPbFAsUUFBUTtnQkFFbkIsSUFBSTJQLGNBQWMzUCxhQUFhNlEsdUJBQXVCO29CQUNwRHhSLE9BQU80USxJQUFJLENBQUNOLFlBQVltQixPQUFPLENBQUMsQ0FBQ0M7d0JBQy9CLElBQUlwQixjQUFjaEwsS0FBSyxDQUFDb00sSUFBSSxLQUFLcEIsVUFBVSxDQUFDb0IsSUFBSSxFQUFFOzRCQUNoRCxPQUFPcE0sS0FBSyxDQUFDb00sSUFBSTt3QkFDbkI7b0JBQ0Y7Z0JBQ0Y7Z0JBRUEsSUFBSXhPLENBQUFBLEdBQUFBLFdBQUFBLGNBQUFBLEVBQWV2QyxXQUFXO29CQUM1QixNQUFNZ1IsYUFDSixDQUFDMUMsV0FBVzFCLE9BQU8sSUFBSTZELFVBQVUvTyxVQUFVLEdBQ3ZDK08sVUFBVS9PLFVBQVUsR0FDcEJsQixDQUFBQSxHQUFBQSxhQUFBQSxXQUFBQSxFQUNFQyxDQUFBQSxHQUFBQSxXQUFBQSxTQUFBQSxFQUNFLElBQUkySCxJQUFJNUcsSUFBSTZHLFNBQVNGLElBQUksRUFBRW5JLFFBQVEsRUFDbkMrTSxVQUFVck0sTUFBTSxHQUVsQjtvQkFHUixJQUFJdVEsWUFBWUQ7b0JBRWhCLElBQUkzUSxDQUFBQSxHQUFBQSxhQUFBQSxXQUFBQSxFQUFZNFEsWUFBWTt3QkFDMUJBLFlBQVkzUSxDQUFBQSxHQUFBQSxnQkFBQUEsY0FBQUEsRUFBZTJRO29CQUM3QjtvQkFFQSxJQUFJbFMsS0FBK0IsRUFBRSxFQUlwQztvQkFDRCxNQUFNNlEsYUFBYXBOLENBQUFBLEdBQUFBLFlBQUFBLGFBQUFBLEVBQWN4QztvQkFDakMsTUFBTW1SLGdCQUFnQmxNLENBQUFBLEdBQUFBLGNBQUFBLGVBQUFBLEVBQWdCMkssWUFDcEMsSUFBSXhILElBQUk2SSxXQUFXNUksU0FBU0YsSUFBSSxFQUFFbkksUUFBUTtvQkFHNUMsSUFBSW1SLGVBQWU7d0JBQ2pCOVIsT0FBT0MsTUFBTSxDQUFDcUYsT0FBT3dNO29CQUN2QjtnQkFDRjtZQUNGO1lBRUEseURBQXlEO1lBQ3pELElBQUksVUFBVVYsV0FBVztnQkFDdkIsSUFBSUEsVUFBVXZMLElBQUksS0FBSyxxQkFBcUI7b0JBQzFDLE9BQU8sSUFBSSxDQUFDbUYsTUFBTSxDQUFDbEQsUUFBUXNKLFVBQVU5SyxNQUFNLEVBQUU4SyxVQUFVL0ssS0FBSyxFQUFFakc7Z0JBQ2hFLE9BQU87b0JBQ0wySixxQkFBcUI7d0JBQUVuSSxLQUFLd1AsVUFBVWxMLFdBQVc7d0JBQUUxRixRQUFRLElBQUk7b0JBQUM7b0JBQ2hFLE9BQU8sSUFBSUYsUUFBUSxLQUFPO2dCQUM1QjtZQUNGO1lBRUEsTUFBTXlSLFlBQWlCWCxVQUFVWSxTQUFTO1lBQzFDLElBQUlELGFBQWFBLFVBQVVFLHFCQUFxQixFQUFFO2dCQUNoRCxNQUFNQyxVQUFVLEVBQUUsQ0FBQ0MsTUFBTSxDQUFDSixVQUFVRSxxQkFBcUI7Z0JBRXpEQyxRQUFRVCxPQUFPLENBQUMsQ0FBQ1c7b0JBQ2ZDLENBQUFBLEdBQUFBLFFBQUFBLHNCQUFBQSxFQUF1QkQsT0FBT0UsS0FBSztnQkFDckM7WUFDRjtZQUVBLHVDQUF1QztZQUN2QyxJQUFLbEIsQ0FBQUEsVUFBVW1CLE9BQU8sSUFBSW5CLFVBQVVvQixPQUFNLEtBQU1wQixVQUFVa0IsS0FBSyxFQUFFO2dCQUMvRCxJQUNFbEIsVUFBVWtCLEtBQUssQ0FBQ0csU0FBUyxJQUN6QnJCLFVBQVVrQixLQUFLLENBQUNHLFNBQVMsQ0FBQ0MsWUFBWSxFQUN0QztvQkFDQSwwREFBMEQ7b0JBQzFEdFMsUUFBUWlCLE1BQU0sR0FBRztvQkFFakIsTUFBTTZFLGNBQWNrTCxVQUFVa0IsS0FBSyxDQUFDRyxTQUFTLENBQUNDLFlBQVk7b0JBRTFELG9FQUFvRTtvQkFDcEUsZ0VBQWdFO29CQUNoRSxXQUFXO29CQUNYLElBQ0V4TSxZQUFZbkUsVUFBVSxDQUFDLFFBQ3ZCcVAsVUFBVWtCLEtBQUssQ0FBQ0csU0FBUyxDQUFDRSxzQkFBc0IsS0FBSyxPQUNyRDt3QkFDQSxNQUFNQyxhQUFhck8sQ0FBQUEsR0FBQUEsa0JBQUFBLGdCQUFBQSxFQUFpQjJCO3dCQUNwQzBNLFdBQVdqUyxRQUFRLEdBQUdnQyxvQkFDcEJpUSxXQUFXalMsUUFBUSxFQUNuQmlDO3dCQUdGLE1BQU0sRUFBRWhCLEtBQUswRSxNQUFNLEVBQUVuRSxJQUFJa0UsS0FBSyxFQUFFLEdBQUduRSxhQUNqQyxJQUFJLEVBQ0pnRSxhQUNBQTt3QkFFRixPQUFPLElBQUksQ0FBQzhFLE1BQU0sQ0FBQ2xELFFBQVF4QixRQUFRRCxPQUFPakc7b0JBQzVDO29CQUNBMkoscUJBQXFCO3dCQUFFbkksS0FBS3NFO3dCQUFhMUYsUUFBUSxJQUFJO29CQUFDO29CQUN0RCxPQUFPLElBQUlGLFFBQVEsS0FBTztnQkFDNUI7Z0JBRUFvTixVQUFVNEQsU0FBUyxHQUFHLENBQUMsQ0FBQ0YsVUFBVWtCLEtBQUssQ0FBQ08sV0FBVztnQkFFbkQsc0JBQXNCO2dCQUN0QixJQUFJekIsVUFBVWtCLEtBQUssQ0FBQ2pKLFFBQVEsS0FBSzdCLG9CQUFvQjtvQkFDbkQsSUFBSXNMO29CQUVKLElBQUk7d0JBQ0YsTUFBTSxJQUFJLENBQUNDLGNBQWMsQ0FBQzt3QkFDMUJELGdCQUFnQjtvQkFDbEIsRUFBRSxPQUFPRSxHQUFHO3dCQUNWRixnQkFBZ0I7b0JBQ2xCO29CQUVBMUIsWUFBWSxNQUFNLElBQUksQ0FBQ0MsWUFBWSxDQUFDO3dCQUNsQ3BILE9BQU82STt3QkFDUG5TLFVBQVVtUzt3QkFDVnhOO3dCQUNBbkQ7d0JBQ0FFO3dCQUNBNE0sWUFBWTs0QkFBRTFCLFNBQVM7d0JBQU07d0JBQzdCbE0sUUFBUXFNLFVBQVVyTSxNQUFNO3dCQUN4QmlRLFdBQVc1RCxVQUFVNEQsU0FBUzt3QkFDOUIyQixZQUFZO29CQUNkO29CQUVBLElBQUksVUFBVTdCLFdBQVc7d0JBQ3ZCLE1BQU0scUJBQWlELENBQWpELElBQUlsUixNQUFPLHlDQUFYO21DQUFBO3dDQUFBOzBDQUFBO3dCQUFnRDtvQkFDeEQ7Z0JBQ0Y7WUFDRjtZQUVBLElBQ0VtTixtQkFDQSxJQUFJLENBQUMxTSxRQUFRLEtBQUssYUFDbEJpSyxDQUFBQSxDQUFBQSw0QkFBQUEsS0FBS3NJLGFBQWEsQ0FBQ1osS0FBQUEsS0FBSyxpQkFBeEIxSCxzQ0FBQUEsMEJBQTBCNkgsU0FBQUEsS0FBUyxnQkFBbkM3SCxvQ0FBcUN1SSxVQUFBQSxNQUFlLFNBQ3BEL0IsbUJBQUFBLFVBQVVrQixLQUFBQSxLQUFLLGdCQUFmbEIsaUJBQWlCcUIsU0FBQUEsR0FDakI7Z0JBQ0EseURBQXlEO2dCQUN6RCxrQ0FBa0M7Z0JBQ2xDckIsVUFBVWtCLEtBQUssQ0FBQ0csU0FBUyxDQUFDVSxVQUFVLEdBQUc7WUFDekM7Z0JBSTBDL0I7WUFGMUMsNkRBQTZEO1lBQzdELE1BQU1nQyxzQkFDSmhULFFBQVFtTixPQUFPLElBQUlHLFVBQVV6RCxLQUFLLEtBQU1tSCxDQUFBQSxDQUFBQSxtQkFBQUEsVUFBVW5ILEtBQUFBLEtBQUssT0FBZm1ILG1CQUFtQm5ILEtBQUFBLENBQUk7Z0JBRy9EN0o7WUFERixNQUFNaVQsZUFDSmpULG1CQUFBQSxRQUFRNE8sTUFBQUEsS0FBTSxPQUFkNU8sa0JBQW1CLENBQUNpTixtQkFBbUIsQ0FBQytGO1lBQzFDLE1BQU1FLGNBQWNELGVBQWU7Z0JBQUUxSSxHQUFHO2dCQUFHRyxHQUFHO1lBQUUsSUFBSTtZQUNwRCxNQUFNeUksc0JBQXNCcEcsZ0JBQUFBLE9BQUFBLGVBQWdCbUc7WUFFNUMsMENBQTBDO1lBQzFDLE1BQU1FLHNCQUFzQjtnQkFDMUIsR0FBRzlGLFNBQVM7Z0JBQ1p6RDtnQkFDQXRKO2dCQUNBMkU7Z0JBQ0F4RSxRQUFRQztnQkFDUndRLFlBQVk7WUFDZDtZQUVBLDBFQUEwRTtZQUMxRSxzRUFBc0U7WUFDdEUsdUVBQXVFO1lBQ3ZFLHlFQUF5RTtZQUN6RSxZQUFZO1lBQ1osSUFBSWxFLG1CQUFtQjhELGNBQWM7b0JBbUJqQ3ZHLHNDQUFBQSw0QkFDQXdHO2dCQW5CRkEsWUFBWSxNQUFNLElBQUksQ0FBQ0MsWUFBWSxDQUFDO29CQUNsQ3BILE9BQU8sSUFBSSxDQUFDdEosUUFBUTtvQkFDcEJBLFVBQVUsSUFBSSxDQUFDQSxRQUFRO29CQUN2QjJFO29CQUNBbkQ7b0JBQ0FFO29CQUNBNE0sWUFBWTt3QkFBRTFCLFNBQVM7b0JBQU07b0JBQzdCbE0sUUFBUXFNLFVBQVVyTSxNQUFNO29CQUN4QmlRLFdBQVc1RCxVQUFVNEQsU0FBUztvQkFDOUJqRSxpQkFBaUJBLG1CQUFtQixDQUFDLElBQUksQ0FBQ2tFLFVBQVU7Z0JBQ3REO2dCQUVBLElBQUksVUFBVUgsV0FBVztvQkFDdkIsTUFBTSxxQkFBNkQsQ0FBN0QsSUFBSWxSLE1BQU8scUNBQWtDLElBQUksQ0FBQ1MsUUFBUSxHQUExRDsrQkFBQTtvQ0FBQTtzQ0FBQTtvQkFBNEQ7Z0JBQ3BFO2dCQUVBLElBQ0UsSUFBSSxDQUFDQSxRQUFRLEtBQUssYUFDbEJpSyxDQUFBQSxDQUFBQSw2QkFBQUEsS0FBS3NJLGFBQWEsQ0FBQ1osS0FBQUEsS0FBSyxpQkFBeEIxSCx1Q0FBQUEsMkJBQTBCNkgsU0FBQUEsS0FBUyxnQkFBbkM3SCxxQ0FBcUN1SSxVQUFBQSxNQUFlLFNBQ3BEL0Isb0JBQUFBLFVBQVVrQixLQUFBQSxLQUFLLGdCQUFmbEIsa0JBQWlCcUIsU0FBQUEsR0FDakI7b0JBQ0EseURBQXlEO29CQUN6RCxrQ0FBa0M7b0JBQ2xDckIsVUFBVWtCLEtBQUssQ0FBQ0csU0FBUyxDQUFDVSxVQUFVLEdBQUc7Z0JBQ3pDO2dCQUVBLElBQUk7b0JBQ0YsTUFBTSxJQUFJLENBQUN6RCxHQUFHLENBQUM4RCxxQkFBcUJwQyxXQUFXbUM7Z0JBQ2pELEVBQUUsT0FBTzlKLEtBQUs7b0JBQ1osSUFBSW1HLENBQUFBLEdBQUFBLFNBQUFBLE9BQUFBLEVBQVFuRyxRQUFRQSxJQUFJdEosU0FBUyxFQUFFO3dCQUNqQ1osT0FBTzRQLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLG9CQUFvQjNGLEtBQUsxSSxXQUFXa087b0JBQ3pEO29CQUNBLE1BQU14RjtnQkFDUjtnQkFFQSxPQUFPO1lBQ1Q7WUFFQWxLLE9BQU80UCxNQUFNLENBQUNDLElBQUksQ0FBQyx1QkFBdUJqTixJQUFJOE07WUFDOUMsSUFBSSxDQUFDTyxXQUFXLENBQUMxSCxRQUFRbEcsS0FBS08sSUFBSS9CO1lBRWxDLDBFQUEwRTtZQUMxRSxpQkFBaUI7WUFDakIsaURBQWlEO1lBQ2pELE1BQU1xVCxrQkFDSnBHLG1CQUNBLENBQUNrRyx1QkFDRCxDQUFDM0Ysb0JBQ0QsQ0FBQzBCLGdCQUNEb0UsQ0FBQUEsR0FBQUEsZUFBQUEsbUJBQUFBLEVBQW9CRixxQkFBcUIsSUFBSSxDQUFDN0YsS0FBSztZQUVyRCxJQUFJLENBQUM4RixpQkFBaUI7Z0JBQ3BCLElBQUk7b0JBQ0YsTUFBTSxJQUFJLENBQUMvRCxHQUFHLENBQUM4RCxxQkFBcUJwQyxXQUFXbUM7Z0JBQ2pELEVBQUUsT0FBT0ksR0FBUTtvQkFDZixJQUFJQSxFQUFFeFQsU0FBUyxFQUFFaVIsVUFBVWhKLEtBQUssR0FBR2dKLFVBQVVoSixLQUFLLElBQUl1TDt5QkFDakQsTUFBTUE7Z0JBQ2I7Z0JBRUEsSUFBSXZDLFVBQVVoSixLQUFLLEVBQUU7b0JBQ25CLElBQUksQ0FBQ2lGLGlCQUFpQjt3QkFDcEI5TixPQUFPNFAsTUFBTSxDQUFDQyxJQUFJLENBQ2hCLG9CQUNBZ0MsVUFBVWhKLEtBQUssRUFDZnJILFdBQ0FrTztvQkFFSjtvQkFFQSxNQUFNbUMsVUFBVWhKLEtBQUs7Z0JBQ3ZCO2dCQUVBLElBQUkxSSxLQUErQixFQUFFLEVBSXBDO2dCQUVELElBQUksQ0FBQzJOLGlCQUFpQjtvQkFDcEI5TixPQUFPNFAsTUFBTSxDQUFDQyxJQUFJLENBQUMsdUJBQXVCak4sSUFBSThNO2dCQUNoRDtnQkFFQSxtREFBbUQ7Z0JBQ25ELE1BQU04RSxZQUFZO2dCQUNsQixJQUFJVixnQkFBZ0JVLFVBQVVyUyxJQUFJLENBQUNTLEtBQUs7b0JBQ3RDLElBQUksQ0FBQ3NOLFlBQVksQ0FBQ3ROO2dCQUNwQjtZQUNGO1lBRUEsT0FBTztRQUNULEVBQUUsT0FBT3NILEtBQUs7WUFDWixJQUFJbUcsQ0FBQUEsR0FBQUEsU0FBQUEsT0FBQUEsRUFBUW5HLFFBQVFBLElBQUl0SixTQUFTLEVBQUU7Z0JBQ2pDLE9BQU87WUFDVDtZQUNBLE1BQU1zSjtRQUNSO0lBQ0Y7SUFFQStGLFlBQ0UxSCxNQUFxQixFQUNyQmxHLEdBQVcsRUFDWE8sRUFBVSxFQUNWL0IsT0FBK0IsRUFDekI7UUFETkEsSUFBQUEsWUFBQUEsS0FBQUEsR0FBQUEsVUFBNkIsQ0FBQztRQUU5QixJQUFJVixJQUFvQixFQUFtQjtZQUN6QyxJQUFJLE9BQU91SCxPQUFPQyxPQUFPLEtBQUssYUFBYTtnQkFDekMwRSxRQUFReEQsS0FBSyxDQUFFO2dCQUNmO1lBQ0Y7WUFFQSxJQUFJLE9BQU9uQixPQUFPQyxPQUFPLENBQUNZLE9BQU8sS0FBSyxhQUFhO2dCQUNqRDhELFFBQVF4RCxLQUFLLENBQUUsNkJBQTBCTixTQUFPO2dCQUNoRDtZQUNGO1FBQ0Y7UUFFQSxJQUFJQSxXQUFXLGVBQWVrTSxDQUFBQSxHQUFBQSxPQUFBQSxNQUFBQSxRQUFhN1IsSUFBSTtZQUM3QyxJQUFJLENBQUM4UixRQUFRLEdBQUc3VCxRQUFRbU4sT0FBTztZQUMvQnRHLE9BQU9DLE9BQU8sQ0FBQ1ksT0FBTyxDQUNwQjtnQkFDRWxHO2dCQUNBTztnQkFDQS9CO2dCQUNBOFQsS0FBSztnQkFDTHhDLEtBQU0sSUFBSSxDQUFDakgsSUFBSSxHQUFHM0MsV0FBVyxjQUFjLElBQUksQ0FBQzJDLElBQUksR0FBR25MO1lBQ3pELEdBQ0EscUZBQ3FGO1lBQ3JGLGtFQUFrRTtZQUNsRSxJQUNBNkM7UUFFSjtJQUNGO0lBRUEsTUFBTWdTLHFCQUNKMUssR0FBZ0QsRUFDaEQ5SSxRQUFnQixFQUNoQjJFLEtBQXFCLEVBQ3JCbkQsRUFBVSxFQUNWOE0sVUFBMkIsRUFDM0JtRixhQUF1QixFQUNZO1FBQ25DLElBQUkzSyxJQUFJdEosU0FBUyxFQUFFO1lBQ2pCLGdDQUFnQztZQUNoQyxNQUFNc0o7UUFDUjtRQUVBLElBQUk0SyxDQUFBQSxHQUFBQSxhQUFBQSxZQUFBQSxFQUFhNUssUUFBUTJLLGVBQWU7WUFDdEM3VSxPQUFPNFAsTUFBTSxDQUFDQyxJQUFJLENBQUMsb0JBQW9CM0YsS0FBS3RILElBQUk4TTtZQUVoRCxpRUFBaUU7WUFDakUsMEJBQTBCO1lBQzFCLDBDQUEwQztZQUMxQyw0Q0FBNEM7WUFFNUMsK0RBQStEO1lBQy9EbEYscUJBQXFCO2dCQUNuQm5JLEtBQUtPO2dCQUNMM0IsUUFBUSxJQUFJO1lBQ2Q7WUFFQSxrRUFBa0U7WUFDbEUsOERBQThEO1lBQzlELE1BQU1UO1FBQ1I7UUFFQTZMLFFBQVF4RCxLQUFLLENBQUNxQjtRQUVkLElBQUk7WUFDRixJQUFJNkk7WUFDSixNQUFNLEVBQUVyUCxNQUFNK08sU0FBUyxFQUFFc0MsV0FBVyxFQUFFLEdBQ3BDLE1BQU0sSUFBSSxDQUFDdkIsY0FBYyxDQUFDO1lBRTVCLE1BQU0zQixZQUFzQztnQkFDMUNrQjtnQkFDQU47Z0JBQ0FzQztnQkFDQTdLO2dCQUNBckIsT0FBT3FCO1lBQ1Q7WUFFQSxJQUFJLENBQUMySCxVQUFVa0IsS0FBSyxFQUFFO2dCQUNwQixJQUFJO29CQUNGbEIsVUFBVWtCLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQ2lDLGVBQWUsQ0FBQ3ZDLFdBQVc7d0JBQ3REdkk7d0JBQ0E5STt3QkFDQTJFO29CQUNGO2dCQUNGLEVBQUUsT0FBT2tQLFFBQVE7b0JBQ2Y1SSxRQUFReEQsS0FBSyxDQUFDLDJDQUEyQ29NO29CQUN6RHBELFVBQVVrQixLQUFLLEdBQUcsQ0FBQztnQkFDckI7WUFDRjtZQUVBLE9BQU9sQjtRQUNULEVBQUUsT0FBT3FELGNBQWM7WUFDckIsT0FBTyxJQUFJLENBQUNOLG9CQUFvQixDQUM5QnZFLENBQUFBLEdBQUFBLFNBQUFBLE9BQUFBLEVBQVE2RSxnQkFBZ0JBLGVBQWUscUJBQTRCLENBQTVCLElBQUl2VSxNQUFNdVUsZUFBZSxLQUF6Qjt1QkFBQTs0QkFBQTs4QkFBQTtZQUEyQixJQUNsRTlULFVBQ0EyRSxPQUNBbkQsSUFDQThNLFlBQ0E7UUFFSjtJQUNGO0lBRUEsTUFBTW9DLGFBQWEsS0E0QmxCLEVBQUU7UUE1QmdCLE1BQ2pCcEgsT0FBT3lLLGNBQWMsRUFDckIvVCxRQUFRLEVBQ1IyRSxLQUFLLEVBQ0xuRCxFQUFFLEVBQ0ZFLFVBQVUsRUFDVjRNLFVBQVUsRUFDVjVOLE1BQU0sRUFDTm1ILGFBQWEsRUFDYjhJLFNBQVMsRUFDVHpJLHdCQUF3QixFQUN4QndFLGVBQWUsRUFDZjRDLG1CQUFtQixFQUNuQmdELFVBQVUsRUFlWCxHQTVCa0I7UUE2QmpCOzs7OztLQUtDLEdBQ0QsSUFBSWhKLFFBQVF5SztRQUVaLElBQUk7Z0JBNkVBak8sY0FDQUEsZUFLRUEsZUEwRHNCQTtZQTVJMUIsSUFBSWtPLGVBQTZDLElBQUksQ0FBQ2hGLFVBQVUsQ0FBQzFGLE1BQU07WUFDdkUsSUFBSWdGLFdBQVcxQixPQUFPLElBQUlvSCxnQkFBZ0IsSUFBSSxDQUFDMUssS0FBSyxLQUFLQSxPQUFPO2dCQUM5RCxPQUFPMEs7WUFDVDtZQUVBLE1BQU12SyxrQkFBa0JKLG9CQUFvQjtnQkFBRUM7Z0JBQU96SixRQUFRLElBQUk7WUFBQztZQUVsRSxJQUFJZ0ksZUFBZTtnQkFDakJtTSxlQUFldlA7WUFDakI7WUFFQSxJQUFJd1Asa0JBQ0ZELGdCQUNBLENBQUUsY0FBYUEsWUFBQUEsQ0FBVyxJQUMxQmpWLFFBQVFDLEdBQUcsQ0FBQzRKLE1BQWEsRUFBTCxjQUNoQm9MLENBQVlBLEdBQ1p2UDtZQUVOLE1BQU13RCxlQUFleUU7WUFDckIsTUFBTXdILHNCQUEyQztnQkFDL0NsTyxVQUFVLElBQUksQ0FBQ2xHLFVBQVUsQ0FBQ3FVLFdBQVcsQ0FBQztvQkFDcENoTSxNQUFNcUYsQ0FBQUEsR0FBQUEsV0FBQUEsb0JBQUFBLEVBQXFCO3dCQUFFeE47d0JBQVUyRTtvQkFBTTtvQkFDN0N5UCxtQkFBbUI7b0JBQ25CalUsUUFBUW1TLGFBQWEsU0FBUzVRO29CQUM5QmhCO2dCQUNGO2dCQUNBbUgsZUFBZTtnQkFDZkMsZ0JBQWdCLElBQUksQ0FBQ3FGLEtBQUs7Z0JBQzFCcEYsV0FBVztnQkFDWEosZUFBZU0sZUFBZSxJQUFJLENBQUNvTSxHQUFHLEdBQUcsSUFBSSxDQUFDQyxHQUFHO2dCQUNqRHRNLGNBQWMsQ0FBQzJJO2dCQUNmL0ksWUFBWTtnQkFDWk07Z0JBQ0FEO1lBQ0Y7WUFFQSxJQUFJbkMsT0FLRjRHLG1CQUFtQixDQUFDNEMsc0JBQ2hCLE9BQ0EsTUFBTTFKLHNCQUFzQjtnQkFDMUJDLFdBQVcsSUFBTTZCLGNBQWN3TTtnQkFDL0IvVCxRQUFRbVMsYUFBYSxTQUFTNVE7Z0JBQzlCaEIsUUFBUUE7Z0JBQ1JiLFFBQVEsSUFBSTtZQUNkLEdBQUdnSixLQUFLLENBQUMsQ0FBQ0M7Z0JBQ1IsNENBQTRDO2dCQUM1QyxvREFBb0Q7Z0JBQ3BELG9EQUFvRDtnQkFDcEQsWUFBWTtnQkFDWixJQUFJNEQsaUJBQWlCO29CQUNuQixPQUFPO2dCQUNUO2dCQUNBLE1BQU01RDtZQUNSO1lBRU4sd0RBQXdEO1lBQ3hELFVBQVU7WUFDVixJQUFJaEQsUUFBUzlGLENBQUFBLGFBQWEsYUFBYUEsYUFBYSxPQUFLLEVBQUk7Z0JBQzNEOEYsS0FBS0MsTUFBTSxHQUFHdEI7WUFDaEI7WUFFQSxJQUFJaUksaUJBQWlCO2dCQUNuQixJQUFJLENBQUM1RyxNQUFNO29CQUNUQSxPQUFPO3dCQUFFRyxNQUFNZ0UsS0FBS3NJLGFBQWEsQ0FBQ1osS0FBSztvQkFBQztnQkFDMUMsT0FBTztvQkFDTDdMLEtBQUtHLElBQUksR0FBR2dFLEtBQUtzSSxhQUFhLENBQUNaLEtBQUs7Z0JBQ3RDO1lBQ0Y7WUFFQWxJO1lBRUEsSUFDRTNELENBQUFBLFFBQUFBLE9BQUFBLEtBQUFBLElBQUFBLENBQUFBLGVBQUFBLEtBQU1DLE1BQUFBLEtBQU0sZ0JBQVpELGFBQWNaLElBQUFBLE1BQVMsdUJBQ3ZCWSxDQUFBQSxRQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxDQUFBQSxnQkFBQUEsS0FBTUMsTUFBQUEsS0FBTSxnQkFBWkQsY0FBY1osSUFBSSxNQUFLLHFCQUN2QjtnQkFDQSxPQUFPWSxLQUFLQyxNQUFNO1lBQ3BCO1lBRUEsSUFBSUQsQ0FBQUEsUUFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsQ0FBQUEsZ0JBQUFBLEtBQU1DLE1BQUFBLEtBQU0sZ0JBQVpELGNBQWNaLElBQUFBLE1BQVMsV0FBVztnQkFDcEMsTUFBTXFQLGdCQUFnQnBTLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0IyRCxLQUFLQyxNQUFNLENBQUN0RSxZQUFZO2dCQUNsRSxNQUFNUSxRQUFRLE1BQU0sSUFBSSxDQUFDbkMsVUFBVSxDQUFDb0UsV0FBVztnQkFFL0MsNERBQTREO2dCQUM1RCx5REFBeUQ7Z0JBQ3pELDREQUE0RDtnQkFDNUQsMkNBQTJDO2dCQUMzQyxJQUFJLENBQUN3SSxtQkFBbUJ6SyxNQUFNSSxRQUFRLENBQUNrUyxnQkFBZ0I7b0JBQ3JEakwsUUFBUWlMO29CQUNSdlUsV0FBVzhGLEtBQUtDLE1BQU0sQ0FBQ3RFLFlBQVk7b0JBQ25Da0QsUUFBUTt3QkFBRSxHQUFHQSxLQUFLO3dCQUFFLEdBQUdtQixLQUFLQyxNQUFNLENBQUNqQixRQUFRLENBQUNILEtBQUs7b0JBQUM7b0JBQ2xEakQsYUFBYXBCLENBQUFBLEdBQUFBLGdCQUFBQSxjQUFBQSxFQUNYaUUsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFBQSxFQUFvQnVCLEtBQUtDLE1BQU0sQ0FBQ2pCLFFBQVEsQ0FBQzlFLFFBQVEsRUFBRSxJQUFJLENBQUNnRCxPQUFPLEVBQzVEaEQsUUFBUTtvQkFHYixrREFBa0Q7b0JBQ2xEZ1UsZUFBZSxJQUFJLENBQUNoRixVQUFVLENBQUMxRixNQUFNO29CQUNyQyxJQUNFZ0YsV0FBVzFCLE9BQU8sSUFDbEJvSCxnQkFDQSxJQUFJLENBQUMxSyxLQUFLLEtBQUtBLFNBQ2YsQ0FBQ3pCLGVBQ0Q7d0JBQ0EsNERBQTREO3dCQUM1RCw2REFBNkQ7d0JBQzdELGdFQUFnRTt3QkFDaEUsT0FBTzs0QkFBRSxHQUFHbU0sWUFBWTs0QkFBRTFLO3dCQUFNO29CQUNsQztnQkFDRjtZQUNGO1lBRUEsSUFBSWtMLENBQUFBLEdBQUFBLFlBQUFBLFVBQUFBLEVBQVdsTCxRQUFRO2dCQUNyQkYscUJBQXFCO29CQUFFbkksS0FBS087b0JBQUkzQixRQUFRLElBQUk7Z0JBQUM7Z0JBQzdDLE9BQU8sSUFBSUYsUUFBZSxLQUFPO1lBQ25DO1lBRUEsTUFBTThRLFlBQ0p3RCxtQkFDQyxNQUFNLElBQUksQ0FBQzdCLGNBQWMsQ0FBQzlJLE9BQU9sRixJQUFJLENBQ3BDLENBQUNxUSxNQUFTO29CQUNScEQsV0FBV29ELElBQUluUyxJQUFJO29CQUNuQnFSLGFBQWFjLElBQUlkLFdBQVc7b0JBQzVCL0IsU0FBUzZDLElBQUlDLEdBQUcsQ0FBQzlDLE9BQU87b0JBQ3hCQyxTQUFTNEMsSUFBSUMsR0FBRyxDQUFDN0MsT0FBTztpQkFDMUI7WUFHSixJQUFJOVMsSUFBb0IsRUFBbUI7Z0JBQ3pDLE1BQU0sRUFBRTRWLGtCQUFrQixFQUFFLEdBQzFCelYsbUJBQU9BLENBQUMsd1BBQTZCO2dCQUN2QyxJQUFJLENBQUN5VixtQkFBbUJsRSxVQUFVWSxTQUFTLEdBQUc7b0JBQzVDLE1BQU0scUJBRUwsQ0FGSyxJQUFJOVIsTUFDUCwyREFBd0RTLFdBQVMsTUFEOUQ7K0JBQUE7b0NBQUE7c0NBQUE7b0JBRU47Z0JBQ0Y7WUFDRjtZQUNBLE1BQU00VSxvQkFBb0I5TyxRQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxDQUFBQSxpQkFBQUEsS0FBTWxELFFBQUFBLEtBQVEsZ0JBQWRrRCxlQUFnQnpDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDO1lBRXRELE1BQU11UixrQkFBa0JwRSxVQUFVbUIsT0FBTyxJQUFJbkIsVUFBVW9CLE9BQU87WUFFOUQseURBQXlEO1lBQ3pELDRDQUE0QztZQUM1QyxJQUFJK0Msc0JBQXFCOU8sUUFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsS0FBTUUsUUFBQUEsR0FBVTtnQkFDdkMsT0FBTyxJQUFJLENBQUNzTyxHQUFHLENBQUN4TyxLQUFLRSxRQUFRLENBQUM7WUFDaEM7WUFFQSxNQUFNLEVBQUUyTCxLQUFLLEVBQUV4TCxRQUFRLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQzJPLFFBQVEsQ0FBQztnQkFDOUMsSUFBSUQsaUJBQWlCO29CQUNuQixJQUFJL08sQ0FBQUEsUUFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsS0FBTUcsSUFBSSxLQUFJLENBQUMyTyxtQkFBbUI7d0JBQ3BDLE9BQU87NEJBQUV6TyxVQUFVTCxLQUFLSyxRQUFROzRCQUFFd0wsT0FBTzdMLEtBQUtHLElBQUk7d0JBQUM7b0JBQ3JEO29CQUVBLE1BQU1ELFdBQVdGLENBQUFBLFFBQUFBLE9BQUFBLEtBQUFBLElBQUFBLEtBQU1FLFFBQUFBLElBQ25CRixLQUFLRSxRQUFRLEdBQ2IsSUFBSSxDQUFDbEcsVUFBVSxDQUFDcVUsV0FBVyxDQUFDO3dCQUMxQmhNLE1BQU1xRixDQUFBQSxHQUFBQSxXQUFBQSxvQkFBQUEsRUFBcUI7NEJBQUV4Tjs0QkFBVTJFO3dCQUFNO3dCQUM3Q3hFLFFBQVF1Qjt3QkFDUmhCO29CQUNGO29CQUVKLE1BQU1xVSxVQUFVLE1BQU1yTixjQUFjO3dCQUNsQzFCO3dCQUNBOEIsZ0JBQWdCLElBQUksQ0FBQ3FGLEtBQUs7d0JBQzFCcEYsV0FBVzt3QkFDWEosZUFBZWlOLG9CQUFvQixDQUFDLElBQUksSUFBSSxDQUFDTixHQUFHO3dCQUNoRHRNLGNBQWMsQ0FBQzJJO3dCQUNmL0ksWUFBWTt3QkFDWk07b0JBQ0Y7b0JBRUEsT0FBTzt3QkFDTC9CLFVBQVU0TyxRQUFRNU8sUUFBUTt3QkFDMUJ3TCxPQUFPb0QsUUFBUTlPLElBQUksSUFBSSxDQUFDO29CQUMxQjtnQkFDRjtnQkFFQSxPQUFPO29CQUNMNUMsU0FBUyxDQUFDO29CQUNWc08sT0FBTyxNQUFNLElBQUksQ0FBQ2lDLGVBQWUsQ0FDL0JuRCxVQUFVWSxTQUFTLEVBQ25CO3dCQUVFclI7d0JBQ0EyRTt3QkFDQXhFLFFBQVFxQjt3QkFDUmQ7d0JBQ0FzQyxTQUFTLElBQUksQ0FBQ0EsT0FBTzt3QkFDckJxQyxlQUFlLElBQUksQ0FBQ0EsYUFBYTtvQkFDbkM7Z0JBRUo7WUFDRjtZQUVBLG1EQUFtRDtZQUNuRCw2Q0FBNkM7WUFDN0MsdUNBQXVDO1lBQ3ZDLElBQUlvTCxVQUFVb0IsT0FBTyxJQUFJcUMsb0JBQW9CbE8sUUFBUSxJQUFJRyxVQUFVO2dCQUNqRSxPQUFPLElBQUksQ0FBQ21PLEdBQUcsQ0FBQ25PLFNBQVM7WUFDM0I7WUFFQSwrQ0FBK0M7WUFDL0MsNkRBQTZEO1lBQzdELElBQ0UsQ0FBQyxJQUFJLENBQUN3SyxTQUFTLElBQ2ZGLFVBQVVtQixPQUFPLElBQ2pCN1MsUUFBUUMsR0FBRyxDQUFDNEosTUFBYSxFQUFMLGVBQ3BCLENBQWdCOEQsRUFDaEIsRUFRRDtZQUVEaUYsTUFBTUcsU0FBUyxHQUFHelMsT0FBT0MsTUFBTSxDQUFDLENBQUMsR0FBR3FTLE1BQU1HLFNBQVM7WUFDbkRyQixVQUFVa0IsS0FBSyxHQUFHQTtZQUNsQmxCLFVBQVVuSCxLQUFLLEdBQUdBO1lBQ2xCbUgsVUFBVTlMLEtBQUssR0FBR0E7WUFDbEI4TCxVQUFVL08sVUFBVSxHQUFHQTtZQUN2QixJQUFJLENBQUNzTixVQUFVLENBQUMxRixNQUFNLEdBQUdtSDtZQUV6QixPQUFPQTtRQUNULEVBQUUsT0FBTzNILEtBQUs7WUFDWixPQUFPLElBQUksQ0FBQzBLLG9CQUFvQixDQUM5QndCLENBQUFBLEdBQUFBLFNBQUFBLGNBQUFBLEVBQWVsTSxNQUNmOUksVUFDQTJFLE9BQ0FuRCxJQUNBOE07UUFFSjtJQUNGO0lBRVFTLElBQ04vQixLQUF3QixFQUN4QmxILElBQXNCLEVBQ3RCNk0sV0FBNEMsRUFDN0I7UUFDZixJQUFJLENBQUMzRixLQUFLLEdBQUdBO1FBRWIsT0FBTyxJQUFJLENBQUNpSSxHQUFHLENBQ2JuUCxNQUNBLElBQUksQ0FBQ2tKLFVBQVUsQ0FBQyxRQUFRLENBQUNxQyxTQUFTLEVBQ2xDc0I7SUFFSjtJQUVBOzs7R0FHQyxHQUNEdUMsZUFBZUMsRUFBMEIsRUFBRTtRQUN6QyxJQUFJLENBQUNDLElBQUksR0FBR0Q7SUFDZDtJQUVBdkcsZ0JBQWdCcE4sRUFBVSxFQUFXO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUNyQixNQUFNLEVBQUUsT0FBTztRQUN6QixNQUFNLENBQUNrVixjQUFjQyxRQUFRLEdBQUcsSUFBSSxDQUFDblYsTUFBTSxDQUFDaU0sS0FBSyxDQUFDLEtBQUs7UUFDdkQsTUFBTSxDQUFDbUosY0FBY0MsUUFBUSxHQUFHaFUsR0FBRzRLLEtBQUssQ0FBQyxLQUFLO1FBRTlDLHlFQUF5RTtRQUN6RSxJQUFJb0osV0FBV0gsaUJBQWlCRSxnQkFBZ0JELFlBQVlFLFNBQVM7WUFDbkUsT0FBTztRQUNUO1FBRUEsMERBQTBEO1FBQzFELElBQUlILGlCQUFpQkUsY0FBYztZQUNqQyxPQUFPO1FBQ1Q7UUFFQSx5REFBeUQ7UUFDekQsdURBQXVEO1FBQ3ZELDJEQUEyRDtRQUMzRCxtQ0FBbUM7UUFDbkMsT0FBT0QsWUFBWUU7SUFDckI7SUFFQTFHLGFBQWF0TixFQUFVLEVBQVE7UUFDN0IsTUFBTSxHQUFHZ0UsT0FBTyxFQUFFLENBQUMsR0FBR2hFLEdBQUc0SyxLQUFLLENBQUMsS0FBSztRQUVwQ3FKLENBQUFBLEdBQUFBLHFCQUFBQSx3Q0FBQUEsRUFDRTtZQUNFLGdFQUFnRTtZQUNoRSxxQkFBcUI7WUFDckIsSUFBSWpRLFNBQVMsTUFBTUEsU0FBUyxPQUFPO2dCQUNqQ2MsT0FBT29QLFFBQVEsQ0FBQyxHQUFHO2dCQUNuQjtZQUNGO1lBRUEsOENBQThDO1lBQzlDLE1BQU1DLFVBQVVDLG1CQUFtQnBRO1lBQ25DLCtDQUErQztZQUMvQyxNQUFNcVEsT0FBTzVDLFNBQVM2QyxjQUFjLENBQUNIO1lBQ3JDLElBQUlFLE1BQU07Z0JBQ1JBLEtBQUtFLGNBQWM7Z0JBQ25CO1lBQ0Y7WUFDQSxrRUFBa0U7WUFDbEUscUJBQXFCO1lBQ3JCLE1BQU1DLFNBQVMvQyxTQUFTZ0QsaUJBQWlCLENBQUNOLFFBQVEsQ0FBQyxFQUFFO1lBQ3JELElBQUlLLFFBQVE7Z0JBQ1ZBLE9BQU9ELGNBQWM7WUFDdkI7UUFDRixHQUNBO1lBQ0VHLGdCQUFnQixJQUFJLENBQUN0SCxlQUFlLENBQUNwTjtRQUN2QztJQUVKO0lBRUEyTixTQUFTaFAsTUFBYyxFQUFXO1FBQ2hDLE9BQU8sSUFBSSxDQUFDQSxNQUFNLEtBQUtBO0lBQ3pCO0lBRUE7Ozs7O0dBS0MsR0FDRCxNQUFNZ1csU0FDSmxWLEdBQVcsRUFDWGQsTUFBb0IsRUFDcEJWLE9BQTZCLEVBQ2Q7UUFGZlUsSUFBQUEsV0FBQUEsS0FBQUEsR0FBQUEsU0FBaUJjO1FBQ2pCeEIsSUFBQUEsWUFBQUEsS0FBQUEsR0FBQUEsVUFBMkIsQ0FBQztRQUU1QiwyRkFBMkY7UUFDM0YsSUFBSVYsSUFBb0IsRUFBbUI7WUFDekM7UUFDRjtRQUVBLElBQUksS0FBNkIsSUFBSXFYLENBQUFBLEdBQUFBLE9BQUFBLEtBQUFBLEVBQU05UCxPQUFPK1AsU0FBUyxDQUFDQyxTQUFTLEdBQUc7WUFDdEUsa0ZBQWtGO1lBQ2xGLDhFQUE4RTtZQUM5RSxjQUFjO1lBQ2Q7UUFDRjtRQUNBLElBQUlwSCxTQUFTdEwsQ0FBQUEsR0FBQUEsa0JBQUFBLGdCQUFnQixFQUFDM0M7UUFDOUIsTUFBTXNWLGNBQWNySCxPQUFPbFAsUUFBUTtRQUVuQyxJQUFJLEVBQUVBLFFBQVEsRUFBRTJFLEtBQUssRUFBRSxHQUFHdUs7UUFDMUIsTUFBTXNILG1CQUFtQnhXO1FBRXpCLElBQUlqQixLQUErQixFQUFFLEVBZXBDO1FBRUQsTUFBTWtELFFBQVEsTUFBTSxJQUFJLENBQUNuQyxVQUFVLENBQUNvRSxXQUFXO1FBQy9DLElBQUl4QyxhQUFhdkI7UUFFakIsTUFBTU8sU0FDSixPQUFPakIsUUFBUWlCLE1BQU0sS0FBSyxjQUN0QmpCLFFBQVFpQixNQUFNLElBQUkrRCxZQUNsQixJQUFJLENBQUMvRCxNQUFNO1FBRWpCLE1BQU02TyxvQkFBb0IsTUFBTTFRLGtCQUFrQjtZQUNoRHNCLFFBQVFBO1lBQ1JPLFFBQVFBO1lBQ1JiLFFBQVEsSUFBSTtRQUNkO1FBRUEsSUFBSWQsS0FBK0IsSUFBSW9CLE9BQU9pQixVQUFVLENBQUMsTUFBTTtZQUM3RCxJQUFJa0Q7YUFDRixFQUFFRCxZQUFZQyxRQUFRLEVBQUUsR0FBRyxNQUFNSCxDQUFBQSxHQUFBQSxhQUFBQSxzQkFBQUEsR0FBc0IsQ0FBQztZQUUxRCxNQUFNcUwsaUJBQWlCMVEsZ0JBQ3JCMEIsQ0FBQUEsR0FBQUEsYUFBQUEsV0FBQUEsRUFBWUMsQ0FBQUEsR0FBQUEsV0FBQUEsU0FBQUEsRUFBVU4sUUFBUSxJQUFJLENBQUNPLE1BQU0sR0FBRyxPQUM1Q3VCLE9BQ0FxQyxVQUNBNEssT0FBT3ZLLEtBQUssRUFDWixDQUFDOEssSUFBY3pOLG9CQUFvQnlOLEdBQUd4TixRQUN0QyxJQUFJLENBQUNlLE9BQU87WUFHZCxJQUFJd00sZUFBZUUsWUFBWSxFQUFFO2dCQUMvQjtZQUNGO1lBRUEsSUFBSSxDQUFDSCxtQkFBbUI7Z0JBQ3RCN04sYUFBYWdOLENBQUFBLEdBQUFBLGNBQUFBLFlBQUFBLEVBQ1hwTyxDQUFBQSxHQUFBQSxnQkFBQUEsY0FBYyxFQUFDa1AsZUFBZXJQLE1BQU0sR0FDcEMsSUFBSSxDQUFDTyxNQUFNO1lBRWY7WUFFQSxJQUFJOE8sZUFBZTNLLFdBQVcsSUFBSTJLLGVBQWUvTixZQUFZLEVBQUU7Z0JBQzdELGdFQUFnRTtnQkFDaEUsNENBQTRDO2dCQUM1Q3pCLFdBQVd3UCxlQUFlL04sWUFBWTtnQkFDdEN5TixPQUFPbFAsUUFBUSxHQUFHQTtnQkFFbEIsSUFBSSxDQUFDdVAsbUJBQW1CO29CQUN0QnRPLE1BQU11TSxDQUFBQSxHQUFBQSxXQUFBQSxvQkFBb0IsRUFBQzBCO2dCQUM3QjtZQUNGO1FBQ0Y7UUFDQUEsT0FBT2xQLFFBQVEsR0FBR2dDLG9CQUFvQmtOLE9BQU9sUCxRQUFRLEVBQUVpQztRQUV2RCxJQUFJTSxDQUFBQSxHQUFBQSxXQUFBQSxjQUFBQSxFQUFlMk0sT0FBT2xQLFFBQVEsR0FBRztZQUNuQ0EsV0FBV2tQLE9BQU9sUCxRQUFRO1lBQzFCa1AsT0FBT2xQLFFBQVEsR0FBR0E7WUFDbEJYLE9BQU9DLE1BQU0sQ0FDWHFGLE9BQ0FNLENBQUFBLEdBQUFBLGNBQUFBLGVBQUFBLEVBQWdCekMsQ0FBQUEsR0FBQUEsWUFBQUEsYUFBQUEsRUFBYzBNLE9BQU9sUCxRQUFRLEdBQzNDRSxDQUFBQSxHQUFBQSxXQUFBQSxTQUFBQSxFQUFVQyxRQUFRSCxRQUFRLEtBQ3ZCLENBQUM7WUFHUixJQUFJLENBQUN1UCxtQkFBbUI7Z0JBQ3RCdE8sTUFBTXVNLENBQUFBLEdBQUFBLFdBQUFBLG9CQUFBQSxFQUFxQjBCO1lBQzdCO1FBQ0Y7UUFFQSxNQUFNcEosT0FDSi9HLE1BQW1ELEdBQy9DLENBQUksR0FDSixNQUFNNkcsc0JBQXNCO1lBQzFCQyxXQUFXLElBQ1Q2QixjQUFjO29CQUNaMUIsVUFBVSxJQUFJLENBQUNsRyxVQUFVLENBQUNxVSxXQUFXLENBQUM7d0JBQ3BDaE0sTUFBTXFGLENBQUFBLEdBQUFBLFdBQUFBLG9CQUFBQSxFQUFxQjs0QkFDekJ4TixVQUFVd1c7NEJBQ1Y3Ujt3QkFDRjt3QkFDQXlQLG1CQUFtQjt3QkFDbkJqVSxRQUFRdUI7d0JBQ1JoQjtvQkFDRjtvQkFDQW1ILGVBQWU7b0JBQ2ZDLGdCQUFnQjtvQkFDaEJDLFdBQVc7b0JBQ1hKLGVBQWUsSUFBSSxDQUFDMk0sR0FBRztvQkFDdkJ0TSxjQUFjLENBQUMsSUFBSSxDQUFDMkksU0FBUztvQkFDN0IvSSxZQUFZO2dCQUNkO1lBQ0Z6SCxRQUFRQTtZQUNSTyxRQUFRQTtZQUNSYixRQUFRLElBQUk7UUFDZDtRQUVOOzs7S0FHQyxHQUNELElBQUlpRyxDQUFBQSxRQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxLQUFNQyxNQUFNLENBQUNiLElBQUFBLE1BQVMsV0FBVztZQUNuQ2dLLE9BQU9sUCxRQUFRLEdBQUc4RixLQUFLQyxNQUFNLENBQUN0RSxZQUFZO1lBQzFDekIsV0FBVzhGLEtBQUtDLE1BQU0sQ0FBQ3RFLFlBQVk7WUFDbkNrRCxRQUFRO2dCQUFFLEdBQUdBLEtBQUs7Z0JBQUUsR0FBR21CLEtBQUtDLE1BQU0sQ0FBQ2pCLFFBQVEsQ0FBQ0gsS0FBSztZQUFDO1lBQ2xEakQsYUFBYW9FLEtBQUtDLE1BQU0sQ0FBQ2pCLFFBQVEsQ0FBQzlFLFFBQVE7WUFDMUNpQixNQUFNdU0sQ0FBQUEsR0FBQUEsV0FBQUEsb0JBQUFBLEVBQXFCMEI7UUFDN0I7UUFFQTs7O0tBR0MsR0FDRCxJQUFJcEosQ0FBQUEsUUFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsS0FBTUMsTUFBTSxDQUFDYixJQUFBQSxNQUFTLHFCQUFxQjtZQUM3QztRQUNGO1FBRUEsTUFBTW9FLFFBQVFuSCxDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQUFBLEVBQW9CbkM7UUFFbEMsSUFBSSxNQUFNLElBQUksQ0FBQ3VLLElBQUksQ0FBQ3BLLFFBQVF1QixZQUFZakMsUUFBUWlCLE1BQU0sRUFBRSxPQUFPO1lBQzdELElBQUksQ0FBQ3NPLFVBQVUsQ0FBQ3VILFlBQVksR0FBRztnQkFBRWxILGFBQWE7WUFBSztRQUNyRDtRQUVBLE1BQU0xUCxRQUFRc0UsR0FBRyxDQUFDO1lBQ2hCLElBQUksQ0FBQ25FLFVBQVUsQ0FBQzRXLE1BQU0sQ0FBQ3BOLE9BQU9sRixJQUFJLENBQUMsQ0FBQ3VTO2dCQUNsQyxPQUFPQSxRQUNIalAsY0FBYztvQkFDWjFCLFVBQVVGLENBQUFBLFFBQUFBLE9BQUFBLEtBQUFBLElBQUFBLEtBQU1HLElBQUFBLElBQ1pILFFBQUFBLE9BQUFBLEtBQUFBLElBQUFBLEtBQU1FLFFBQVEsR0FDZCxJQUFJLENBQUNsRyxVQUFVLENBQUNxVSxXQUFXLENBQUM7d0JBQzFCaE0sTUFBTWxIO3dCQUNOZCxRQUFRdUI7d0JBQ1JoQixRQUFRQTtvQkFDVjtvQkFDSm9ILGdCQUFnQjtvQkFDaEJDLFdBQVc7b0JBQ1hKLGVBQWUsSUFBSSxDQUFDMk0sR0FBRztvQkFDdkJ0TSxjQUFjLENBQUMsSUFBSSxDQUFDMkksU0FBUztvQkFDN0IvSSxZQUFZO29CQUNaTSwwQkFDRXpJLFFBQVF5SSx3QkFBd0IsSUFDL0J6SSxRQUFRbVgsUUFBUSxJQUNmLENBQUMsQ0FBQzdYLElBQTBDO2dCQUNsRCxHQUNHcUYsSUFBSSxDQUFDLElBQU0sT0FDWHlFLEtBQUssQ0FBQyxJQUFNLFNBQ2Y7WUFDTjtZQUNBLElBQUksQ0FBQy9JLFVBQVUsQ0FBQ0wsUUFBUW1YLFFBQVEsR0FBRyxhQUFhLFdBQVcsQ0FBQ3ROO1NBQzdEO0lBQ0g7SUFFQSxNQUFNOEksZUFBZTlJLEtBQWEsRUFBRTtRQUNsQyxNQUFNRyxrQkFBa0JKLG9CQUFvQjtZQUFFQztZQUFPekosUUFBUSxJQUFJO1FBQUM7UUFFbEUsSUFBSTtZQUNGLE1BQU1pWCxrQkFBa0IsTUFBTSxJQUFJLENBQUNoWCxVQUFVLENBQUNpWCxRQUFRLENBQUN6TjtZQUN2REc7WUFFQSxPQUFPcU47UUFDVCxFQUFFLE9BQU9oTyxLQUFLO1lBQ1pXO1lBQ0EsTUFBTVg7UUFDUjtJQUNGO0lBRUFnTSxTQUFZa0MsRUFBb0IsRUFBYztRQUM1QyxJQUFJeFgsWUFBWTtRQUNoQixNQUFNK0osU0FBUztZQUNiL0osWUFBWTtRQUNkO1FBQ0EsSUFBSSxDQUFDZ0ssR0FBRyxHQUFHRDtRQUNYLE9BQU95TixLQUFLNVMsSUFBSSxDQUFDLENBQUMwQjtZQUNoQixJQUFJeUQsV0FBVyxJQUFJLENBQUNDLEdBQUcsRUFBRTtnQkFDdkIsSUFBSSxDQUFDQSxHQUFHLEdBQUc7WUFDYjtZQUVBLElBQUloSyxXQUFXO2dCQUNiLE1BQU1zSixNQUFXLHFCQUE0QyxDQUE1QyxJQUFJdkosTUFBTSxvQ0FBVjsyQkFBQTtnQ0FBQTtrQ0FBQTtnQkFBMkM7Z0JBQzVEdUosSUFBSXRKLFNBQVMsR0FBRztnQkFDaEIsTUFBTXNKO1lBQ1I7WUFFQSxPQUFPaEQ7UUFDVDtJQUNGO0lBRUE4TixnQkFDRXZDLFNBQXdCLEVBQ3hCNEYsR0FBb0IsRUFDVTtRQUM5QixNQUFNLEVBQUU1RixXQUFXNkYsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDbEksVUFBVSxDQUFDLFFBQVE7UUFDbkQsTUFBTW1JLFVBQVUsSUFBSSxDQUFDQyxRQUFRLENBQUNGO1FBQzlCRCxJQUFJRSxPQUFPLEdBQUdBO1FBQ2QsT0FBT0UsQ0FBQUEsR0FBQUEsT0FBQUEsbUJBQUFBLEVBQTRDSCxLQUFLO1lBQ3REQztZQUNBOUY7WUFDQXhSLFFBQVEsSUFBSTtZQUNab1g7UUFDRjtJQUNGO0lBRUEsSUFBSTNOLFFBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDMEQsS0FBSyxDQUFDMUQsS0FBSztJQUN6QjtJQUVBLElBQUl0SixXQUFtQjtRQUNyQixPQUFPLElBQUksQ0FBQ2dOLEtBQUssQ0FBQ2hOLFFBQVE7SUFDNUI7SUFFQSxJQUFJMkUsUUFBd0I7UUFDMUIsT0FBTyxJQUFJLENBQUNxSSxLQUFLLENBQUNySSxLQUFLO0lBQ3pCO0lBRUEsSUFBSXhFLFNBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDNk0sS0FBSyxDQUFDN00sTUFBTTtJQUMxQjtJQUVBLElBQUlPLFNBQTZCO1FBQy9CLE9BQU8sSUFBSSxDQUFDc00sS0FBSyxDQUFDdE0sTUFBTTtJQUMxQjtJQUVBLElBQUlrUSxhQUFzQjtRQUN4QixPQUFPLElBQUksQ0FBQzVELEtBQUssQ0FBQzRELFVBQVU7SUFDOUI7SUFFQSxJQUFJRCxZQUFxQjtRQUN2QixPQUFPLElBQUksQ0FBQzNELEtBQUssQ0FBQzJELFNBQVM7SUFDN0I7SUFqMURBMkcsWUFDRXRYLFFBQWdCLEVBQ2hCMkUsS0FBcUIsRUFDckJuRCxFQUFVLEVBQ1YsRUFDRStWLFlBQVksRUFDWnpYLFVBQVUsRUFDVm9YLEdBQUcsRUFDSE0sT0FBTyxFQUNQbkcsU0FBUyxFQUNUdkksR0FBRyxFQUNIMk8sWUFBWSxFQUNaN0csVUFBVSxFQUNWbFEsTUFBTSxFQUNOc0MsT0FBTyxFQUNQcUMsYUFBYSxFQUNidUksYUFBYSxFQUNiK0MsU0FBUyxFQWVWLENBQ0Q7UUF6RUYseUNBQXlDO2FBQ3pDMkQsR0FBQUEsR0FBcUIsQ0FBQztRQUN0QiwwQ0FBMEM7YUFDMUNELEdBQUFBLEdBQXFCLENBQUM7YUFnQnRCcUQsb0JBQUFBLEdBQXVCO2FBaUJmNU4sSUFBQUEsR0FBZW5MO2FBK0p2QmdaLFVBQUFBLEdBQWEsQ0FBQzNFO1lBQ1osTUFBTSxFQUFFMEUsb0JBQW9CLEVBQUUsR0FBRyxJQUFJO1lBQ3JDLElBQUksQ0FBQ0Esb0JBQW9CLEdBQUc7WUFFNUIsTUFBTTFLLFFBQVFnRyxFQUFFaEcsS0FBSztZQUVyQixJQUFJLENBQUNBLE9BQU87Z0JBQ1YsNkNBQTZDO2dCQUM3QyxzREFBc0Q7Z0JBQ3RELGtDQUFrQztnQkFDbEMsRUFBRTtnQkFDRixvRUFBb0U7Z0JBQ3BFLDRCQUE0QjtnQkFDNUIsNERBQTREO2dCQUM1RCxrRkFBa0Y7Z0JBQ2xGLGdEQUFnRDtnQkFDaEQsTUFBTSxFQUFFaE4sUUFBUSxFQUFFMkUsS0FBSyxFQUFFLEdBQUcsSUFBSTtnQkFDaEMsSUFBSSxDQUFDa0ssV0FBVyxDQUNkLGdCQUNBckIsQ0FBQUEsR0FBQUEsV0FBQUEsb0JBQUFBLEVBQXFCO29CQUFFeE4sVUFBVVEsQ0FBQUEsR0FBQUEsYUFBQUEsV0FBQUEsRUFBWVI7b0JBQVcyRTtnQkFBTSxJQUM5RDBPLENBQUFBLEdBQUFBLE9BQUFBLE1BQU07Z0JBRVI7WUFDRjtZQUVBLGtGQUFrRjtZQUNsRixJQUFJckcsTUFBTTRLLElBQUksRUFBRTtnQkFDZHRSLE9BQU8rQixRQUFRLENBQUNxQixNQUFNO2dCQUN0QjtZQUNGO1lBRUEsSUFBSSxDQUFDc0QsTUFBTXVHLEdBQUcsRUFBRTtnQkFDZDtZQUNGO1lBRUEseURBQXlEO1lBQ3pELElBQ0VtRSx3QkFDQSxJQUFJLENBQUNoWCxNQUFNLEtBQUtzTSxNQUFNdk4sT0FBTyxDQUFDaUIsTUFBTSxJQUNwQ3NNLE1BQU14TCxFQUFFLEtBQUssSUFBSSxDQUFDckIsTUFBTSxFQUN4QjtnQkFDQTtZQUNGO1lBRUEsSUFBSXFNO1lBQ0osTUFBTSxFQUFFdkwsR0FBRyxFQUFFTyxFQUFFLEVBQUUvQixPQUFPLEVBQUVzUixHQUFHLEVBQUUsR0FBRy9EO1lBQ2xDLElBQUlqTyxLQUFxQyxFQUFFLEVBb0IxQztZQUNELElBQUksQ0FBQytLLElBQUksR0FBR2lIO1lBRVosTUFBTSxFQUFFL1EsUUFBUSxFQUFFLEdBQUc0RCxDQUFBQSxHQUFBQSxrQkFBQUEsZ0JBQUFBLEVBQWlCM0M7WUFFdEMsZ0RBQWdEO1lBQ2hELHlEQUF5RDtZQUN6RCxJQUNFLElBQUksQ0FBQ2tNLEtBQUssSUFDVjNMLE9BQU9oQixDQUFBQSxHQUFBQSxhQUFBQSxXQUFBQSxFQUFZLElBQUksQ0FBQ0wsTUFBTSxLQUM5QkgsYUFBYVEsQ0FBQUEsR0FBQUEsYUFBQUEsV0FBQUEsRUFBWSxJQUFJLENBQUNSLFFBQVEsR0FDdEM7Z0JBQ0E7WUFDRjtZQUVBLHVEQUF1RDtZQUN2RCx3REFBd0Q7WUFDeEQsSUFBSSxJQUFJLENBQUNvVixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUNBLElBQUksQ0FBQ3BJLFFBQVE7Z0JBQ2xDO1lBQ0Y7WUFFQSxJQUFJLENBQUMzQyxNQUFNLENBQ1QsZ0JBQ0FwSixLQUNBTyxJQUNBbkMsT0FBT0MsTUFBTSxDQUEyQyxDQUFDLEdBQUdHLFNBQVM7Z0JBQ25FbU4sU0FBU25OLFFBQVFtTixPQUFPLElBQUksSUFBSSxDQUFDMEcsUUFBUTtnQkFDekM1UyxRQUFRakIsUUFBUWlCLE1BQU0sSUFBSSxJQUFJLENBQUMyRSxhQUFhO2dCQUM1QyxpREFBaUQ7Z0JBQ2pEc0gsSUFBSTtZQUNOLElBQ0FIO1FBRUo7UUE1TkUsdUNBQXVDO1FBQ3ZDLE1BQU1sRCxRQUFRbkgsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFBQSxFQUFvQm5DO1FBRWxDLDZDQUE2QztRQUM3QyxJQUFJLENBQUNnUCxVQUFVLEdBQUcsQ0FBQztRQUNuQixvREFBb0Q7UUFDcEQsd0RBQXdEO1FBQ3hELGtDQUFrQztRQUNsQyxJQUFJaFAsYUFBYSxXQUFXO1lBQzFCLElBQUksQ0FBQ2dQLFVBQVUsQ0FBQzFGLE1BQU0sR0FBRztnQkFDdkIrSDtnQkFDQXlHLFNBQVM7Z0JBQ1RuRyxPQUFPNEY7Z0JBQ1B6TztnQkFDQThJLFNBQVMyRixnQkFBZ0JBLGFBQWEzRixPQUFPO2dCQUM3Q0MsU0FBUzBGLGdCQUFnQkEsYUFBYTFGLE9BQU87WUFDL0M7UUFDRjtRQUVBLElBQUksQ0FBQzdDLFVBQVUsQ0FBQyxRQUFRLEdBQUc7WUFDekJxQyxXQUFXNkY7WUFDWHZELGFBQWEsRUFFWjtRQUNIO1FBRUEsNENBQTRDO1FBQzVDLGdGQUFnRjtRQUNoRixJQUFJLENBQUNuRixNQUFNLEdBQUc1UCxPQUFPNFAsTUFBTTtRQUUzQixJQUFJLENBQUMxTyxVQUFVLEdBQUdBO1FBQ2xCLDhEQUE4RDtRQUM5RCxrREFBa0Q7UUFDbEQsTUFBTWlZLG9CQUNKeFYsQ0FBQUEsR0FBQUEsV0FBQUEsY0FBQUEsRUFBZXZDLGFBQWFpSyxLQUFLc0ksYUFBYSxDQUFDeUYsVUFBVTtRQUUzRCxJQUFJLENBQUNsVixRQUFRLEdBQUcvRCxNQUFrQyxJQUFJO1FBQ3RELElBQUksQ0FBQ2tXLEdBQUcsR0FBR3dDO1FBQ1gsSUFBSSxDQUFDak8sR0FBRyxHQUFHO1FBQ1gsSUFBSSxDQUFDNE4sUUFBUSxHQUFHSTtRQUNoQiw2REFBNkQ7UUFDN0QsMEJBQTBCO1FBQzFCLElBQUksQ0FBQ3JLLEtBQUssR0FBRztRQUNiLElBQUksQ0FBQ1UsY0FBYyxHQUFHO1FBQ3RCLElBQUksQ0FBQ1gsT0FBTyxHQUFHLENBQUMsQ0FDZGpELENBQUFBLEtBQUtzSSxhQUFhLENBQUMyRixJQUFJLElBQ3ZCak8sS0FBS3NJLGFBQWEsQ0FBQzRGLEdBQUcsSUFDdEJsTyxLQUFLc0ksYUFBYSxDQUFDNkYscUJBQXFCLElBQ3ZDbk8sS0FBS3NJLGFBQWEsQ0FBQzhGLE1BQU0sSUFBSSxDQUFDcE8sS0FBS3NJLGFBQWEsQ0FBQytGLEdBQUcsSUFDcEQsQ0FBQ1AscUJBQ0EsQ0FBQzlOLEtBQUs1QixRQUFRLENBQUNrUSxNQUFNLElBQ3JCLENBQUN4WixJQUFZRTtRQUdqQixJQUFJRixLQUErQixFQUFFLEVBUXBDO1FBRUQsSUFBSSxDQUFDaU8sS0FBSyxHQUFHO1lBQ1gxRDtZQUNBdEo7WUFDQTJFO1lBQ0F4RSxRQUFRNFgsb0JBQW9CL1gsV0FBV3dCO1lBQ3ZDbVAsV0FBVyxDQUFDLENBQUNBO1lBQ2JqUSxRQUFRM0IsTUFBK0IsR0FBRzJCLENBQU1BLEdBQUcrRDtZQUNuRG1NO1FBQ0Y7UUFFQSxJQUFJLENBQUM0SCxnQ0FBZ0MsR0FBRzdZLFFBQVFDLE9BQU8sQ0FBQztRQUV4RCxJQUFJLElBQTZCLEVBQUU7WUFDakMsa0VBQWtFO1lBQ2xFLDRDQUE0QztZQUM1QyxJQUFJLENBQUM0QixHQUFHSixVQUFVLENBQUMsT0FBTztnQkFDeEIsMkRBQTJEO2dCQUMzRCw0REFBNEQ7Z0JBQzVELE1BQU0zQixVQUE2QjtvQkFBRWlCO2dCQUFPO2dCQUM1QyxNQUFNUCxTQUFTa1QsQ0FBQUEsR0FBQUEsT0FBQUEsTUFBQUE7Z0JBRWYsSUFBSSxDQUFDbUYsZ0NBQWdDLEdBQUczWixrQkFBa0I7b0JBQ3hEZ0IsUUFBUSxJQUFJO29CQUNaYTtvQkFDQVA7Z0JBQ0YsR0FBR2lFLElBQUksQ0FBQyxDQUFDWTtvQkFDUCxrRUFBa0U7b0JBQ2xFLHNEQUFzRDs7b0JBQ3BEdkYsUUFBZ0JxTixrQkFBa0IsR0FBR3RMLE9BQU94QjtvQkFFOUMsSUFBSSxDQUFDNk8sV0FBVyxDQUNkLGdCQUNBN0osVUFDSTdFLFNBQ0FxTixDQUFBQSxHQUFBQSxXQUFBQSxvQkFBb0IsRUFBQzt3QkFDbkJ4TixVQUFVUSxDQUFBQSxHQUFBQSxhQUFBQSxXQUFBQSxFQUFZUjt3QkFDdEIyRTtvQkFDRixJQUNKeEUsUUFDQVY7b0JBRUYsT0FBT3VGO2dCQUNUO1lBQ0Y7WUFFQXNCLE9BQU9tUyxnQkFBZ0IsQ0FBQyxZQUFZLElBQUksQ0FBQ2QsVUFBVTtZQUVuRCwyREFBMkQ7WUFDM0QsbURBQW1EO1lBQ25ELElBQUk1WSxLQUFxQyxFQUFFLEVBSTFDO1FBQ0g7SUFDRjtBQXlyREY7QUFqNERxQkgsT0E2Q1o0UCxNQUFBQSxHQUFtQ21LLENBQUFBLEdBQUFBLE1BQUFBLE9BQUkiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9zaGFyZWQvbGliL3JvdXRlci9yb3V0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdHNsaW50OmRpc2FibGU6bm8tY29uc29sZVxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRUeXBlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IERvbWFpbkxvY2FsZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZlci9jb25maWcnXG5pbXBvcnQgdHlwZSB7IE1pdHRFbWl0dGVyIH0gZnJvbSAnLi4vbWl0dCdcbmltcG9ydCB0eXBlIHsgUGFyc2VkVXJsUXVlcnkgfSBmcm9tICdxdWVyeXN0cmluZydcbmltcG9ydCB0eXBlIHsgUm91dGVyRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9jbGllbnQvcm91dGVyJ1xuaW1wb3J0IHR5cGUgeyBTdHlsZVNoZWV0VHVwbGUgfSBmcm9tICcuLi8uLi8uLi9jbGllbnQvcGFnZS1sb2FkZXInXG5pbXBvcnQgdHlwZSB7IFVybE9iamVjdCB9IGZyb20gJ3VybCdcbmltcG9ydCB0eXBlIFBhZ2VMb2FkZXIgZnJvbSAnLi4vLi4vLi4vY2xpZW50L3BhZ2UtbG9hZGVyJ1xuaW1wb3J0IHR5cGUgeyBBcHBDb250ZXh0VHlwZSwgTmV4dFBhZ2VDb250ZXh0LCBORVhUX0RBVEEgfSBmcm9tICcuLi91dGlscydcbmltcG9ydCB7IHJlbW92ZVRyYWlsaW5nU2xhc2ggfSBmcm9tICcuL3V0aWxzL3JlbW92ZS10cmFpbGluZy1zbGFzaCdcbmltcG9ydCB7XG4gIGdldENsaWVudEJ1aWxkTWFuaWZlc3QsXG4gIGlzQXNzZXRFcnJvcixcbiAgbWFya0Fzc2V0RXJyb3IsXG59IGZyb20gJy4uLy4uLy4uL2NsaWVudC9yb3V0ZS1sb2FkZXInXG5pbXBvcnQgeyBoYW5kbGVDbGllbnRTY3JpcHRMb2FkIH0gZnJvbSAnLi4vLi4vLi4vY2xpZW50L3NjcmlwdCdcbmltcG9ydCBpc0Vycm9yLCB7IGdldFByb3BlckVycm9yIH0gZnJvbSAnLi4vLi4vLi4vbGliL2lzLWVycm9yJ1xuaW1wb3J0IHsgZGVub3JtYWxpemVQYWdlUGF0aCB9IGZyb20gJy4uL3BhZ2UtcGF0aC9kZW5vcm1hbGl6ZS1wYWdlLXBhdGgnXG5pbXBvcnQgeyBub3JtYWxpemVMb2NhbGVQYXRoIH0gZnJvbSAnLi4vaTE4bi9ub3JtYWxpemUtbG9jYWxlLXBhdGgnXG5pbXBvcnQgbWl0dCBmcm9tICcuLi9taXR0J1xuaW1wb3J0IHsgZ2V0TG9jYXRpb25PcmlnaW4sIGdldFVSTCwgbG9hZEdldEluaXRpYWxQcm9wcywgU1QgfSBmcm9tICcuLi91dGlscydcbmltcG9ydCB7IGlzRHluYW1pY1JvdXRlIH0gZnJvbSAnLi91dGlscy9pcy1keW5hbWljJ1xuaW1wb3J0IHsgcGFyc2VSZWxhdGl2ZVVybCB9IGZyb20gJy4vdXRpbHMvcGFyc2UtcmVsYXRpdmUtdXJsJ1xuaW1wb3J0IHsgZ2V0Um91dGVNYXRjaGVyIH0gZnJvbSAnLi91dGlscy9yb3V0ZS1tYXRjaGVyJ1xuaW1wb3J0IHsgZ2V0Um91dGVSZWdleCB9IGZyb20gJy4vdXRpbHMvcm91dGUtcmVnZXgnXG5pbXBvcnQgeyBmb3JtYXRXaXRoVmFsaWRhdGlvbiB9IGZyb20gJy4vdXRpbHMvZm9ybWF0LXVybCdcbmltcG9ydCB7IGRldGVjdERvbWFpbkxvY2FsZSB9IGZyb20gJy4uLy4uLy4uL2NsaWVudC9kZXRlY3QtZG9tYWluLWxvY2FsZSdcbmltcG9ydCB7IHBhcnNlUGF0aCB9IGZyb20gJy4vdXRpbHMvcGFyc2UtcGF0aCdcbmltcG9ydCB7IGFkZExvY2FsZSB9IGZyb20gJy4uLy4uLy4uL2NsaWVudC9hZGQtbG9jYWxlJ1xuaW1wb3J0IHsgcmVtb3ZlTG9jYWxlIH0gZnJvbSAnLi4vLi4vLi4vY2xpZW50L3JlbW92ZS1sb2NhbGUnXG5pbXBvcnQgeyByZW1vdmVCYXNlUGF0aCB9IGZyb20gJy4uLy4uLy4uL2NsaWVudC9yZW1vdmUtYmFzZS1wYXRoJ1xuaW1wb3J0IHsgYWRkQmFzZVBhdGggfSBmcm9tICcuLi8uLi8uLi9jbGllbnQvYWRkLWJhc2UtcGF0aCdcbmltcG9ydCB7IGhhc0Jhc2VQYXRoIH0gZnJvbSAnLi4vLi4vLi4vY2xpZW50L2hhcy1iYXNlLXBhdGgnXG5pbXBvcnQgeyByZXNvbHZlSHJlZiB9IGZyb20gJy4uLy4uLy4uL2NsaWVudC9yZXNvbHZlLWhyZWYnXG5pbXBvcnQgeyBpc0FQSVJvdXRlIH0gZnJvbSAnLi4vLi4vLi4vbGliL2lzLWFwaS1yb3V0ZSdcbmltcG9ydCB7IGdldE5leHRQYXRobmFtZUluZm8gfSBmcm9tICcuL3V0aWxzL2dldC1uZXh0LXBhdGhuYW1lLWluZm8nXG5pbXBvcnQgeyBmb3JtYXROZXh0UGF0aG5hbWVJbmZvIH0gZnJvbSAnLi91dGlscy9mb3JtYXQtbmV4dC1wYXRobmFtZS1pbmZvJ1xuaW1wb3J0IHsgY29tcGFyZVJvdXRlclN0YXRlcyB9IGZyb20gJy4vdXRpbHMvY29tcGFyZS1zdGF0ZXMnXG5pbXBvcnQgeyBpc0xvY2FsVVJMIH0gZnJvbSAnLi91dGlscy9pcy1sb2NhbC11cmwnXG5pbXBvcnQgeyBpc0JvdCB9IGZyb20gJy4vdXRpbHMvaXMtYm90J1xuaW1wb3J0IHsgb21pdCB9IGZyb20gJy4vdXRpbHMvb21pdCdcbmltcG9ydCB7IGludGVycG9sYXRlQXMgfSBmcm9tICcuL3V0aWxzL2ludGVycG9sYXRlLWFzJ1xuaW1wb3J0IHsgZGlzYWJsZVNtb290aFNjcm9sbER1cmluZ1JvdXRlVHJhbnNpdGlvbiB9IGZyb20gJy4vdXRpbHMvZGlzYWJsZS1zbW9vdGgtc2Nyb2xsJ1xuaW1wb3J0IHR5cGUgeyBQYXJhbXMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2ZXIvcmVxdWVzdC9wYXJhbXMnXG5pbXBvcnQgeyBNQVRDSEVEX1BBVEhfSEVBREVSIH0gZnJvbSAnLi4vLi4vLi4vbGliL2NvbnN0YW50cydcblxubGV0IHJlc29sdmVSZXdyaXRlczogdHlwZW9mIGltcG9ydCgnLi91dGlscy9yZXNvbHZlLXJld3JpdGVzJykuZGVmYXVsdFxuaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9IQVNfUkVXUklURVMpIHtcbiAgcmVzb2x2ZVJld3JpdGVzID0gKFxuICAgIHJlcXVpcmUoJy4vdXRpbHMvcmVzb2x2ZS1yZXdyaXRlcycpIGFzIHR5cGVvZiBpbXBvcnQoJy4vdXRpbHMvcmVzb2x2ZS1yZXdyaXRlcycpXG4gICkuZGVmYXVsdFxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIC8qIHByb2QgKi9cbiAgICBfX05FWFRfREFUQV9fOiBORVhUX0RBVEFcbiAgfVxufVxuXG5pbnRlcmZhY2UgUm91dGVQcm9wZXJ0aWVzIHtcbiAgc2hhbGxvdzogYm9vbGVhblxufVxuXG5pbnRlcmZhY2UgVHJhbnNpdGlvbk9wdGlvbnMge1xuICBzaGFsbG93PzogYm9vbGVhblxuICBsb2NhbGU/OiBzdHJpbmcgfCBmYWxzZVxuICBzY3JvbGw/OiBib29sZWFuXG4gIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZT86IGJvb2xlYW5cbn1cblxuaW50ZXJmYWNlIE5leHRIaXN0b3J5U3RhdGUge1xuICB1cmw6IHN0cmluZ1xuICBhczogc3RyaW5nXG4gIG9wdGlvbnM6IFRyYW5zaXRpb25PcHRpb25zXG59XG5cbmV4cG9ydCB0eXBlIEhpc3RvcnlTdGF0ZSA9XG4gIHwgbnVsbFxuICB8IHsgX19OQTogdHJ1ZTsgX19OPzogZmFsc2UgfVxuICB8IHsgX19OOiBmYWxzZTsgX19OQT86IGZhbHNlIH1cbiAgfCAoeyBfX05BPzogZmFsc2U7IF9fTjogdHJ1ZTsga2V5OiBzdHJpbmcgfSAmIE5leHRIaXN0b3J5U3RhdGUpXG5cbmZ1bmN0aW9uIGJ1aWxkQ2FuY2VsbGF0aW9uRXJyb3IoKSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBFcnJvcignUm91dGUgQ2FuY2VsbGVkJyksIHtcbiAgICBjYW5jZWxsZWQ6IHRydWUsXG4gIH0pXG59XG5cbmludGVyZmFjZSBNaWRkbGV3YXJlRWZmZWN0UGFyYW1zPFQgZXh0ZW5kcyBGZXRjaERhdGFPdXRwdXQ+IHtcbiAgZmV0Y2hEYXRhPzogKCkgPT4gUHJvbWlzZTxUPlxuICBsb2NhbGU/OiBzdHJpbmdcbiAgYXNQYXRoOiBzdHJpbmdcbiAgcm91dGVyOiBSb3V0ZXJcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1hdGNoZXNNaWRkbGV3YXJlPFQgZXh0ZW5kcyBGZXRjaERhdGFPdXRwdXQ+KFxuICBvcHRpb25zOiBNaWRkbGV3YXJlRWZmZWN0UGFyYW1zPFQ+XG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgbWF0Y2hlcnMgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoXG4gICAgb3B0aW9ucy5yb3V0ZXIucGFnZUxvYWRlci5nZXRNaWRkbGV3YXJlKClcbiAgKVxuICBpZiAoIW1hdGNoZXJzKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCB7IHBhdGhuYW1lOiBhc1BhdGhuYW1lIH0gPSBwYXJzZVBhdGgob3B0aW9ucy5hc1BhdGgpXG4gIC8vIHJlbW92ZSBiYXNlUGF0aCBmaXJzdCBzaW5jZSBwYXRoIHByZWZpeCBoYXMgdG8gYmUgaW4gdGhlIG9yZGVyIG9mIGAvJHtiYXNlUGF0aH0vJHtsb2NhbGV9YFxuICBjb25zdCBjbGVhbmVkQXMgPSBoYXNCYXNlUGF0aChhc1BhdGhuYW1lKVxuICAgID8gcmVtb3ZlQmFzZVBhdGgoYXNQYXRobmFtZSlcbiAgICA6IGFzUGF0aG5hbWVcbiAgY29uc3QgYXNXaXRoQmFzZVBhdGhBbmRMb2NhbGUgPSBhZGRCYXNlUGF0aChcbiAgICBhZGRMb2NhbGUoY2xlYW5lZEFzLCBvcHRpb25zLmxvY2FsZSlcbiAgKVxuXG4gIC8vIENoZWNrIG9ubHkgcGF0aCBtYXRjaCBvbiBjbGllbnQuIE1hdGNoaW5nIFwiaGFzXCIgc2hvdWxkIGJlIGRvbmUgb24gc2VydmVyXG4gIC8vIHdoZXJlIHdlIGNhbiBhY2Nlc3MgbW9yZSBpbmZvIHN1Y2ggYXMgaGVhZGVycywgSHR0cE9ubHkgY29va2llLCBldGMuXG4gIHJldHVybiBtYXRjaGVycy5zb21lKChtKSA9PlxuICAgIG5ldyBSZWdFeHAobS5yZWdleHApLnRlc3QoYXNXaXRoQmFzZVBhdGhBbmRMb2NhbGUpXG4gIClcbn1cblxuZnVuY3Rpb24gc3RyaXBPcmlnaW4odXJsOiBzdHJpbmcpIHtcbiAgY29uc3Qgb3JpZ2luID0gZ2V0TG9jYXRpb25PcmlnaW4oKVxuXG4gIHJldHVybiB1cmwuc3RhcnRzV2l0aChvcmlnaW4pID8gdXJsLnN1YnN0cmluZyhvcmlnaW4ubGVuZ3RoKSA6IHVybFxufVxuXG5mdW5jdGlvbiBwcmVwYXJlVXJsQXMocm91dGVyOiBOZXh0Um91dGVyLCB1cmw6IFVybCwgYXM/OiBVcmwpIHtcbiAgLy8gSWYgdXJsIGFuZCBhcyBwcm92aWRlZCBhcyBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24sXG4gIC8vIHdlJ2xsIGZvcm1hdCB0aGVtIGludG8gdGhlIHN0cmluZyB2ZXJzaW9uIGhlcmUuXG4gIGxldCBbcmVzb2x2ZWRIcmVmLCByZXNvbHZlZEFzXSA9IHJlc29sdmVIcmVmKHJvdXRlciwgdXJsLCB0cnVlKVxuICBjb25zdCBvcmlnaW4gPSBnZXRMb2NhdGlvbk9yaWdpbigpXG4gIGNvbnN0IGhyZWZXYXNBYnNvbHV0ZSA9IHJlc29sdmVkSHJlZi5zdGFydHNXaXRoKG9yaWdpbilcbiAgY29uc3QgYXNXYXNBYnNvbHV0ZSA9IHJlc29sdmVkQXMgJiYgcmVzb2x2ZWRBcy5zdGFydHNXaXRoKG9yaWdpbilcblxuICByZXNvbHZlZEhyZWYgPSBzdHJpcE9yaWdpbihyZXNvbHZlZEhyZWYpXG4gIHJlc29sdmVkQXMgPSByZXNvbHZlZEFzID8gc3RyaXBPcmlnaW4ocmVzb2x2ZWRBcykgOiByZXNvbHZlZEFzXG5cbiAgY29uc3QgcHJlcGFyZWRVcmwgPSBocmVmV2FzQWJzb2x1dGUgPyByZXNvbHZlZEhyZWYgOiBhZGRCYXNlUGF0aChyZXNvbHZlZEhyZWYpXG4gIGNvbnN0IHByZXBhcmVkQXMgPSBhc1xuICAgID8gc3RyaXBPcmlnaW4ocmVzb2x2ZUhyZWYocm91dGVyLCBhcykpXG4gICAgOiByZXNvbHZlZEFzIHx8IHJlc29sdmVkSHJlZlxuXG4gIHJldHVybiB7XG4gICAgdXJsOiBwcmVwYXJlZFVybCxcbiAgICBhczogYXNXYXNBYnNvbHV0ZSA/IHByZXBhcmVkQXMgOiBhZGRCYXNlUGF0aChwcmVwYXJlZEFzKSxcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlRHluYW1pY1JvdXRlKHBhdGhuYW1lOiBzdHJpbmcsIHBhZ2VzOiBzdHJpbmdbXSkge1xuICBjb25zdCBjbGVhblBhdGhuYW1lID0gcmVtb3ZlVHJhaWxpbmdTbGFzaChkZW5vcm1hbGl6ZVBhZ2VQYXRoKHBhdGhuYW1lKSlcbiAgaWYgKGNsZWFuUGF0aG5hbWUgPT09ICcvNDA0JyB8fCBjbGVhblBhdGhuYW1lID09PSAnL19lcnJvcicpIHtcbiAgICByZXR1cm4gcGF0aG5hbWVcbiAgfVxuXG4gIC8vIGhhbmRsZSByZXNvbHZpbmcgaHJlZiBmb3IgZHluYW1pYyByb3V0ZXNcbiAgaWYgKCFwYWdlcy5pbmNsdWRlcyhjbGVhblBhdGhuYW1lKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBhcnJheS1jYWxsYmFjay1yZXR1cm5cbiAgICBwYWdlcy5zb21lKChwYWdlKSA9PiB7XG4gICAgICBpZiAoaXNEeW5hbWljUm91dGUocGFnZSkgJiYgZ2V0Um91dGVSZWdleChwYWdlKS5yZS50ZXN0KGNsZWFuUGF0aG5hbWUpKSB7XG4gICAgICAgIHBhdGhuYW1lID0gcGFnZVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIHJlbW92ZVRyYWlsaW5nU2xhc2gocGF0aG5hbWUpXG59XG5cbmZ1bmN0aW9uIGdldE1pZGRsZXdhcmVEYXRhPFQgZXh0ZW5kcyBGZXRjaERhdGFPdXRwdXQ+KFxuICBzb3VyY2U6IHN0cmluZyxcbiAgcmVzcG9uc2U6IFJlc3BvbnNlLFxuICBvcHRpb25zOiBNaWRkbGV3YXJlRWZmZWN0UGFyYW1zPFQ+XG4pIHtcbiAgY29uc3QgbmV4dENvbmZpZyA9IHtcbiAgICBiYXNlUGF0aDogb3B0aW9ucy5yb3V0ZXIuYmFzZVBhdGgsXG4gICAgaTE4bjogeyBsb2NhbGVzOiBvcHRpb25zLnJvdXRlci5sb2NhbGVzIH0sXG4gICAgdHJhaWxpbmdTbGFzaDogQm9vbGVhbihwcm9jZXNzLmVudi5fX05FWFRfVFJBSUxJTkdfU0xBU0gpLFxuICB9XG4gIGNvbnN0IHJld3JpdGVIZWFkZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldCgneC1uZXh0anMtcmV3cml0ZScpXG5cbiAgbGV0IHJld3JpdGVUYXJnZXQgPVxuICAgIHJld3JpdGVIZWFkZXIgfHwgcmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtbmV4dGpzLW1hdGNoZWQtcGF0aCcpXG5cbiAgY29uc3QgbWF0Y2hlZFBhdGggPSByZXNwb25zZS5oZWFkZXJzLmdldChNQVRDSEVEX1BBVEhfSEVBREVSKVxuXG4gIGlmIChcbiAgICBtYXRjaGVkUGF0aCAmJlxuICAgICFyZXdyaXRlVGFyZ2V0ICYmXG4gICAgIW1hdGNoZWRQYXRoLmluY2x1ZGVzKCdfX25leHRfZGF0YV9jYXRjaGFsbCcpICYmXG4gICAgIW1hdGNoZWRQYXRoLmluY2x1ZGVzKCcvX2Vycm9yJykgJiZcbiAgICAhbWF0Y2hlZFBhdGguaW5jbHVkZXMoJy80MDQnKVxuICApIHtcbiAgICAvLyBsZXZlcmFnZSB4LW1hdGNoZWQtcGF0aCB0byBkZXRlY3QgbmV4dC5jb25maWcuanMgcmV3cml0ZXNcbiAgICByZXdyaXRlVGFyZ2V0ID0gbWF0Y2hlZFBhdGhcbiAgfVxuXG4gIGlmIChyZXdyaXRlVGFyZ2V0KSB7XG4gICAgaWYgKFxuICAgICAgcmV3cml0ZVRhcmdldC5zdGFydHNXaXRoKCcvJykgfHxcbiAgICAgIHByb2Nlc3MuZW52Ll9fTkVYVF9FWFRFUk5BTF9NSURETEVXQVJFX1JFV1JJVEVfUkVTT0xWRVxuICAgICkge1xuICAgICAgY29uc3QgcGFyc2VkUmV3cml0ZVRhcmdldCA9IHBhcnNlUmVsYXRpdmVVcmwocmV3cml0ZVRhcmdldClcbiAgICAgIGNvbnN0IHBhdGhuYW1lSW5mbyA9IGdldE5leHRQYXRobmFtZUluZm8ocGFyc2VkUmV3cml0ZVRhcmdldC5wYXRobmFtZSwge1xuICAgICAgICBuZXh0Q29uZmlnLFxuICAgICAgICBwYXJzZURhdGE6IHRydWUsXG4gICAgICB9KVxuXG4gICAgICBsZXQgZnNQYXRobmFtZSA9IHJlbW92ZVRyYWlsaW5nU2xhc2gocGF0aG5hbWVJbmZvLnBhdGhuYW1lKVxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgICAgb3B0aW9ucy5yb3V0ZXIucGFnZUxvYWRlci5nZXRQYWdlTGlzdCgpLFxuICAgICAgICBnZXRDbGllbnRCdWlsZE1hbmlmZXN0KCksXG4gICAgICBdKS50aGVuKChbcGFnZXMsIHsgX19yZXdyaXRlczogcmV3cml0ZXMgfV06IGFueSkgPT4ge1xuICAgICAgICBsZXQgYXMgPSBhZGRMb2NhbGUocGF0aG5hbWVJbmZvLnBhdGhuYW1lLCBwYXRobmFtZUluZm8ubG9jYWxlKVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpc0R5bmFtaWNSb3V0ZShhcykgfHxcbiAgICAgICAgICAoIXJld3JpdGVIZWFkZXIgJiZcbiAgICAgICAgICAgIHBhZ2VzLmluY2x1ZGVzKFxuICAgICAgICAgICAgICBub3JtYWxpemVMb2NhbGVQYXRoKHJlbW92ZUJhc2VQYXRoKGFzKSwgb3B0aW9ucy5yb3V0ZXIubG9jYWxlcylcbiAgICAgICAgICAgICAgICAucGF0aG5hbWVcbiAgICAgICAgICAgICkpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZFNvdXJjZSA9IGdldE5leHRQYXRobmFtZUluZm8oXG4gICAgICAgICAgICBwYXJzZVJlbGF0aXZlVXJsKHNvdXJjZSkucGF0aG5hbWUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5leHRDb25maWc6IHByb2Nlc3MuZW52Ll9fTkVYVF9IQVNfUkVXUklURVNcbiAgICAgICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIDogbmV4dENvbmZpZyxcbiAgICAgICAgICAgICAgcGFyc2VEYXRhOiB0cnVlLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcblxuICAgICAgICAgIGFzID0gYWRkQmFzZVBhdGgocGFyc2VkU291cmNlLnBhdGhuYW1lKVxuICAgICAgICAgIHBhcnNlZFJld3JpdGVUYXJnZXQucGF0aG5hbWUgPSBhc1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9IQVNfUkVXUklURVMpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlUmV3cml0ZXMoXG4gICAgICAgICAgICBhcyxcbiAgICAgICAgICAgIHBhZ2VzLFxuICAgICAgICAgICAgcmV3cml0ZXMsXG4gICAgICAgICAgICBwYXJzZWRSZXdyaXRlVGFyZ2V0LnF1ZXJ5LFxuICAgICAgICAgICAgKHBhdGg6IHN0cmluZykgPT4gcmVzb2x2ZUR5bmFtaWNSb3V0ZShwYXRoLCBwYWdlcyksXG4gICAgICAgICAgICBvcHRpb25zLnJvdXRlci5sb2NhbGVzXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgaWYgKHJlc3VsdC5tYXRjaGVkUGFnZSkge1xuICAgICAgICAgICAgcGFyc2VkUmV3cml0ZVRhcmdldC5wYXRobmFtZSA9IHJlc3VsdC5wYXJzZWRBcy5wYXRobmFtZVxuICAgICAgICAgICAgYXMgPSBwYXJzZWRSZXdyaXRlVGFyZ2V0LnBhdGhuYW1lXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHBhcnNlZFJld3JpdGVUYXJnZXQucXVlcnksIHJlc3VsdC5wYXJzZWRBcy5xdWVyeSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIXBhZ2VzLmluY2x1ZGVzKGZzUGF0aG5hbWUpKSB7XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRQYXRobmFtZSA9IHJlc29sdmVEeW5hbWljUm91dGUoZnNQYXRobmFtZSwgcGFnZXMpXG5cbiAgICAgICAgICBpZiAocmVzb2x2ZWRQYXRobmFtZSAhPT0gZnNQYXRobmFtZSkge1xuICAgICAgICAgICAgZnNQYXRobmFtZSA9IHJlc29sdmVkUGF0aG5hbWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNvbHZlZEhyZWYgPSAhcGFnZXMuaW5jbHVkZXMoZnNQYXRobmFtZSlcbiAgICAgICAgICA/IHJlc29sdmVEeW5hbWljUm91dGUoXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZUxvY2FsZVBhdGgoXG4gICAgICAgICAgICAgICAgcmVtb3ZlQmFzZVBhdGgocGFyc2VkUmV3cml0ZVRhcmdldC5wYXRobmFtZSksXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5yb3V0ZXIubG9jYWxlc1xuICAgICAgICAgICAgICApLnBhdGhuYW1lLFxuICAgICAgICAgICAgICBwYWdlc1xuICAgICAgICAgICAgKVxuICAgICAgICAgIDogZnNQYXRobmFtZVxuXG4gICAgICAgIGlmIChpc0R5bmFtaWNSb3V0ZShyZXNvbHZlZEhyZWYpKSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGdldFJvdXRlTWF0Y2hlcihnZXRSb3V0ZVJlZ2V4KHJlc29sdmVkSHJlZikpKGFzKVxuICAgICAgICAgIE9iamVjdC5hc3NpZ24ocGFyc2VkUmV3cml0ZVRhcmdldC5xdWVyeSwgbWF0Y2hlcyB8fCB7fSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogJ3Jld3JpdGUnIGFzIGNvbnN0LFxuICAgICAgICAgIHBhcnNlZEFzOiBwYXJzZWRSZXdyaXRlVGFyZ2V0LFxuICAgICAgICAgIHJlc29sdmVkSHJlZixcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3Qgc3JjID0gcGFyc2VQYXRoKHNvdXJjZSlcbiAgICBjb25zdCBwYXRobmFtZSA9IGZvcm1hdE5leHRQYXRobmFtZUluZm8oe1xuICAgICAgLi4uZ2V0TmV4dFBhdGhuYW1lSW5mbyhzcmMucGF0aG5hbWUsIHsgbmV4dENvbmZpZywgcGFyc2VEYXRhOiB0cnVlIH0pLFxuICAgICAgZGVmYXVsdExvY2FsZTogb3B0aW9ucy5yb3V0ZXIuZGVmYXVsdExvY2FsZSxcbiAgICAgIGJ1aWxkSWQ6ICcnLFxuICAgIH0pXG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIHR5cGU6ICdyZWRpcmVjdC1leHRlcm5hbCcgYXMgY29uc3QsXG4gICAgICBkZXN0aW5hdGlvbjogYCR7cGF0aG5hbWV9JHtzcmMucXVlcnl9JHtzcmMuaGFzaH1gLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCByZWRpcmVjdFRhcmdldCA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LW5leHRqcy1yZWRpcmVjdCcpXG5cbiAgaWYgKHJlZGlyZWN0VGFyZ2V0KSB7XG4gICAgaWYgKHJlZGlyZWN0VGFyZ2V0LnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgY29uc3Qgc3JjID0gcGFyc2VQYXRoKHJlZGlyZWN0VGFyZ2V0KVxuICAgICAgY29uc3QgcGF0aG5hbWUgPSBmb3JtYXROZXh0UGF0aG5hbWVJbmZvKHtcbiAgICAgICAgLi4uZ2V0TmV4dFBhdGhuYW1lSW5mbyhzcmMucGF0aG5hbWUsIHsgbmV4dENvbmZpZywgcGFyc2VEYXRhOiB0cnVlIH0pLFxuICAgICAgICBkZWZhdWx0TG9jYWxlOiBvcHRpb25zLnJvdXRlci5kZWZhdWx0TG9jYWxlLFxuICAgICAgICBidWlsZElkOiAnJyxcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICB0eXBlOiAncmVkaXJlY3QtaW50ZXJuYWwnIGFzIGNvbnN0LFxuICAgICAgICBuZXdBczogYCR7cGF0aG5hbWV9JHtzcmMucXVlcnl9JHtzcmMuaGFzaH1gLFxuICAgICAgICBuZXdVcmw6IGAke3BhdGhuYW1lfSR7c3JjLnF1ZXJ5fSR7c3JjLmhhc2h9YCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICB0eXBlOiAncmVkaXJlY3QtZXh0ZXJuYWwnIGFzIGNvbnN0LFxuICAgICAgZGVzdGluYXRpb246IHJlZGlyZWN0VGFyZ2V0LFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgdHlwZTogJ25leHQnIGFzIGNvbnN0IH0pXG59XG5cbmludGVyZmFjZSBXaXRoTWlkZGxld2FyZUVmZmVjdHNPdXRwdXQgZXh0ZW5kcyBGZXRjaERhdGFPdXRwdXQge1xuICBlZmZlY3Q6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgZ2V0TWlkZGxld2FyZURhdGE+PlxufVxuXG5hc3luYyBmdW5jdGlvbiB3aXRoTWlkZGxld2FyZUVmZmVjdHM8VCBleHRlbmRzIEZldGNoRGF0YU91dHB1dD4oXG4gIG9wdGlvbnM6IE1pZGRsZXdhcmVFZmZlY3RQYXJhbXM8VD5cbik6IFByb21pc2U8V2l0aE1pZGRsZXdhcmVFZmZlY3RzT3V0cHV0IHwgbnVsbD4ge1xuICBjb25zdCBtYXRjaGVzID0gYXdhaXQgbWF0Y2hlc01pZGRsZXdhcmUob3B0aW9ucylcbiAgaWYgKCFtYXRjaGVzIHx8ICFvcHRpb25zLmZldGNoRGF0YSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBkYXRhID0gYXdhaXQgb3B0aW9ucy5mZXRjaERhdGEoKVxuXG4gIGNvbnN0IGVmZmVjdCA9IGF3YWl0IGdldE1pZGRsZXdhcmVEYXRhKGRhdGEuZGF0YUhyZWYsIGRhdGEucmVzcG9uc2UsIG9wdGlvbnMpXG5cbiAgcmV0dXJuIHtcbiAgICBkYXRhSHJlZjogZGF0YS5kYXRhSHJlZixcbiAgICBqc29uOiBkYXRhLmpzb24sXG4gICAgcmVzcG9uc2U6IGRhdGEucmVzcG9uc2UsXG4gICAgdGV4dDogZGF0YS50ZXh0LFxuICAgIGNhY2hlS2V5OiBkYXRhLmNhY2hlS2V5LFxuICAgIGVmZmVjdCxcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBVcmwgPSBVcmxPYmplY3QgfCBzdHJpbmdcblxuZXhwb3J0IHR5cGUgQmFzZVJvdXRlciA9IHtcbiAgcm91dGU6IHN0cmluZ1xuICBwYXRobmFtZTogc3RyaW5nXG4gIHF1ZXJ5OiBQYXJzZWRVcmxRdWVyeVxuICBhc1BhdGg6IHN0cmluZ1xuICBiYXNlUGF0aDogc3RyaW5nXG4gIGxvY2FsZT86IHN0cmluZyB8IHVuZGVmaW5lZFxuICBsb2NhbGVzPzogcmVhZG9ubHkgc3RyaW5nW10gfCB1bmRlZmluZWRcbiAgZGVmYXVsdExvY2FsZT86IHN0cmluZyB8IHVuZGVmaW5lZFxuICBkb21haW5Mb2NhbGVzPzogcmVhZG9ubHkgRG9tYWluTG9jYWxlW10gfCB1bmRlZmluZWRcbiAgaXNMb2NhbGVEb21haW46IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgTmV4dFJvdXRlciA9IEJhc2VSb3V0ZXIgJlxuICBQaWNrPFxuICAgIFJvdXRlcixcbiAgICB8ICdwdXNoJ1xuICAgIHwgJ3JlcGxhY2UnXG4gICAgfCAncmVsb2FkJ1xuICAgIHwgJ2JhY2snXG4gICAgfCAnZm9yd2FyZCdcbiAgICB8ICdwcmVmZXRjaCdcbiAgICB8ICdiZWZvcmVQb3BTdGF0ZSdcbiAgICB8ICdldmVudHMnXG4gICAgfCAnaXNGYWxsYmFjaydcbiAgICB8ICdpc1JlYWR5J1xuICAgIHwgJ2lzUHJldmlldydcbiAgPlxuXG5leHBvcnQgdHlwZSBQcmVmZXRjaE9wdGlvbnMgPSB7XG4gIHByaW9yaXR5PzogYm9vbGVhblxuICBsb2NhbGU/OiBzdHJpbmcgfCBmYWxzZVxuICB1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGU/OiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIFByaXZhdGVSb3V0ZUluZm8gPVxuICB8IChPbWl0PENvbXBsZXRlUHJpdmF0ZVJvdXRlSW5mbywgJ3N0eWxlU2hlZXRzJz4gJiB7IGluaXRpYWw6IHRydWUgfSlcbiAgfCBDb21wbGV0ZVByaXZhdGVSb3V0ZUluZm9cblxuZXhwb3J0IHR5cGUgQ29tcGxldGVQcml2YXRlUm91dGVJbmZvID0ge1xuICBDb21wb25lbnQ6IENvbXBvbmVudFR5cGVcbiAgc3R5bGVTaGVldHM6IFN0eWxlU2hlZXRUdXBsZVtdXG4gIF9fTl9TU0c/OiBib29sZWFuXG4gIF9fTl9TU1A/OiBib29sZWFuXG4gIHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PlxuICBlcnI/OiBFcnJvclxuICBlcnJvcj86IGFueVxuICByb3V0ZT86IHN0cmluZ1xuICByZXNvbHZlZEFzPzogc3RyaW5nXG4gIHF1ZXJ5PzogUGFyc2VkVXJsUXVlcnlcbn1cblxuZXhwb3J0IHR5cGUgQXBwUHJvcHMgPSBQaWNrPENvbXBsZXRlUHJpdmF0ZVJvdXRlSW5mbywgJ0NvbXBvbmVudCcgfCAnZXJyJz4gJiB7XG4gIHJvdXRlcjogUm91dGVyXG59ICYgUmVjb3JkPHN0cmluZywgYW55PlxuZXhwb3J0IHR5cGUgQXBwQ29tcG9uZW50ID0gQ29tcG9uZW50VHlwZTxBcHBQcm9wcz5cblxudHlwZSBTdWJzY3JpcHRpb24gPSAoXG4gIGRhdGE6IFByaXZhdGVSb3V0ZUluZm8sXG4gIEFwcDogQXBwQ29tcG9uZW50LFxuICByZXNldFNjcm9sbDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbFxuKSA9PiBQcm9taXNlPHZvaWQ+XG5cbnR5cGUgQmVmb3JlUG9wU3RhdGVDYWxsYmFjayA9IChzdGF0ZTogTmV4dEhpc3RvcnlTdGF0ZSkgPT4gYm9vbGVhblxuXG50eXBlIENvbXBvbmVudExvYWRDYW5jZWwgPSAoKCkgPT4gdm9pZCkgfCBudWxsXG5cbnR5cGUgSGlzdG9yeU1ldGhvZCA9ICdyZXBsYWNlU3RhdGUnIHwgJ3B1c2hTdGF0ZSdcblxuY29uc3QgbWFudWFsU2Nyb2xsUmVzdG9yYXRpb24gPVxuICBwcm9jZXNzLmVudi5fX05FWFRfU0NST0xMX1JFU1RPUkFUSU9OICYmXG4gIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICdzY3JvbGxSZXN0b3JhdGlvbicgaW4gd2luZG93Lmhpc3RvcnkgJiZcbiAgISEoZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICBsZXQgdiA9ICdfX25leHQnXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VxdWVuY2VzXG4gICAgICByZXR1cm4gc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh2LCB2KSwgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh2KSwgdHJ1ZVxuICAgIH0gY2F0Y2ggKG4pIHt9XG4gIH0pKClcblxuY29uc3QgU1NHX0RBVEFfTk9UX0ZPVU5EID0gU3ltYm9sKCdTU0dfREFUQV9OT1RfRk9VTkQnKVxuXG5mdW5jdGlvbiBmZXRjaFJldHJ5KFxuICB1cmw6IHN0cmluZyxcbiAgYXR0ZW1wdHM6IG51bWJlcixcbiAgb3B0aW9uczogUGljazxSZXF1ZXN0SW5pdCwgJ21ldGhvZCcgfCAnaGVhZGVycyc+XG4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gIHJldHVybiBmZXRjaCh1cmwsIHtcbiAgICAvLyBDb29raWVzIGFyZSByZXF1aXJlZCB0byBiZSBwcmVzZW50IGZvciBOZXh0LmpzJyBTU0cgXCJQcmV2aWV3IE1vZGVcIi5cbiAgICAvLyBDb29raWVzIG1heSBhbHNvIGJlIHJlcXVpcmVkIGZvciBgZ2V0U2VydmVyU2lkZVByb3BzYC5cbiAgICAvL1xuICAgIC8vID4gYGZldGNoYCB3b27igJl0IHNlbmQgY29va2llcywgdW5sZXNzIHlvdSBzZXQgdGhlIGNyZWRlbnRpYWxzIGluaXRcbiAgICAvLyA+IG9wdGlvbi5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJL1VzaW5nX0ZldGNoXG4gICAgLy9cbiAgICAvLyA+IEZvciBtYXhpbXVtIGJyb3dzZXIgY29tcGF0aWJpbGl0eSB3aGVuIGl0IGNvbWVzIHRvIHNlbmRpbmcgJlxuICAgIC8vID4gcmVjZWl2aW5nIGNvb2tpZXMsIGFsd2F5cyBzdXBwbHkgdGhlIGBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJ2BcbiAgICAvLyA+IG9wdGlvbiBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlIGRlZmF1bHQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9mZXRjaCNjYXZlYXRzXG4gICAgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsXG4gICAgbWV0aG9kOiBvcHRpb25zLm1ldGhvZCB8fCAnR0VUJyxcbiAgICBoZWFkZXJzOiBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmhlYWRlcnMsIHtcbiAgICAgICd4LW5leHRqcy1kYXRhJzogJzEnLFxuICAgIH0pLFxuICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgIHJldHVybiAhcmVzcG9uc2Uub2sgJiYgYXR0ZW1wdHMgPiAxICYmIHJlc3BvbnNlLnN0YXR1cyA+PSA1MDBcbiAgICAgID8gZmV0Y2hSZXRyeSh1cmwsIGF0dGVtcHRzIC0gMSwgb3B0aW9ucylcbiAgICAgIDogcmVzcG9uc2VcbiAgfSlcbn1cblxuaW50ZXJmYWNlIEZldGNoRGF0YU91dHB1dCB7XG4gIGRhdGFIcmVmOiBzdHJpbmdcbiAganNvbjogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGxcbiAgcmVzcG9uc2U6IFJlc3BvbnNlXG4gIHRleHQ6IHN0cmluZ1xuICBjYWNoZUtleTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBGZXRjaE5leHREYXRhUGFyYW1zIHtcbiAgZGF0YUhyZWY6IHN0cmluZ1xuICBpc1NlcnZlclJlbmRlcjogYm9vbGVhblxuICBwYXJzZUpTT046IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgaGFzTWlkZGxld2FyZT86IGJvb2xlYW5cbiAgaW5mbGlnaHRDYWNoZTogTmV4dERhdGFDYWNoZVxuICBwZXJzaXN0Q2FjaGU6IGJvb2xlYW5cbiAgaXNQcmVmZXRjaDogYm9vbGVhblxuICBpc0JhY2tncm91bmQ/OiBib29sZWFuXG4gIHVuc3RhYmxlX3NraXBDbGllbnRDYWNoZT86IGJvb2xlYW5cbn1cblxuZnVuY3Rpb24gdHJ5VG9QYXJzZUFzSlNPTih0ZXh0OiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh0ZXh0KVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuZnVuY3Rpb24gZmV0Y2hOZXh0RGF0YSh7XG4gIGRhdGFIcmVmLFxuICBpbmZsaWdodENhY2hlLFxuICBpc1ByZWZldGNoLFxuICBoYXNNaWRkbGV3YXJlLFxuICBpc1NlcnZlclJlbmRlcixcbiAgcGFyc2VKU09OLFxuICBwZXJzaXN0Q2FjaGUsXG4gIGlzQmFja2dyb3VuZCxcbiAgdW5zdGFibGVfc2tpcENsaWVudENhY2hlLFxufTogRmV0Y2hOZXh0RGF0YVBhcmFtcyk6IFByb21pc2U8RmV0Y2hEYXRhT3V0cHV0PiB7XG4gIGNvbnN0IHsgaHJlZjogY2FjaGVLZXkgfSA9IG5ldyBVUkwoZGF0YUhyZWYsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKVxuICBjb25zdCBnZXREYXRhID0gKHBhcmFtcz86IHsgbWV0aG9kPzogJ0hFQUQnIHwgJ0dFVCcgfSkgPT5cbiAgICBmZXRjaFJldHJ5KGRhdGFIcmVmLCBpc1NlcnZlclJlbmRlciA/IDMgOiAxLCB7XG4gICAgICBoZWFkZXJzOiBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSBhcyBIZWFkZXJzSW5pdCxcbiAgICAgICAgaXNQcmVmZXRjaCA/IHsgcHVycG9zZTogJ3ByZWZldGNoJyB9IDoge30sXG4gICAgICAgIGlzUHJlZmV0Y2ggJiYgaGFzTWlkZGxld2FyZSA/IHsgJ3gtbWlkZGxld2FyZS1wcmVmZXRjaCc6ICcxJyB9IDoge30sXG4gICAgICAgIHByb2Nlc3MuZW52Lk5FWFRfREVQTE9ZTUVOVF9JRFxuICAgICAgICAgID8geyAneC1kZXBsb3ltZW50LWlkJzogcHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEIH1cbiAgICAgICAgICA6IHt9XG4gICAgICApLFxuICAgICAgbWV0aG9kOiBwYXJhbXM/Lm1ldGhvZCA/PyAnR0VUJyxcbiAgICB9KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZS5vayAmJiBwYXJhbXM/Lm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZGF0YUhyZWYsIHJlc3BvbnNlLCB0ZXh0OiAnJywganNvbjoge30sIGNhY2hlS2V5IH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCkudGhlbigodGV4dCkgPT4ge1xuICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2hlbiB0aGUgZGF0YSByZXNwb25zZSBpcyBhIHJlZGlyZWN0IGJlY2F1c2Ugb2YgYSBtaWRkbGV3YXJlXG4gICAgICAgICAgICAgKiB3ZSBkbyBub3QgY29uc2lkZXIgaXQgYW4gZXJyb3IuIFRoZSBoZWFkZXJzIG11c3QgYnJpbmcgdGhlXG4gICAgICAgICAgICAgKiBtYXBwZWQgbG9jYXRpb24uXG4gICAgICAgICAgICAgKiBUT0RPOiBDaGFuZ2UgdGhlIHN0YXR1cyBjb2RlIGluIHRoZSBoYW5kbGVyLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGhhc01pZGRsZXdhcmUgJiZcbiAgICAgICAgICAgICAgWzMwMSwgMzAyLCAzMDcsIDMwOF0uaW5jbHVkZXMocmVzcG9uc2Uuc3RhdHVzKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IGRhdGFIcmVmLCByZXNwb25zZSwgdGV4dCwganNvbjoge30sIGNhY2hlS2V5IH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgIGlmICh0cnlUb1BhcnNlQXNKU09OKHRleHQpPy5ub3RGb3VuZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBkYXRhSHJlZixcbiAgICAgICAgICAgICAgICAgIGpzb246IHsgbm90Rm91bmQ6IFNTR19EQVRBX05PVF9GT1VORCB9LFxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgICAgY2FjaGVLZXksXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCBzdGF0aWMgcHJvcHNgKVxuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdlIHNob3VsZCBvbmx5IHRyaWdnZXIgYSBzZXJ2ZXItc2lkZSB0cmFuc2l0aW9uIGlmIHRoaXMgd2FzXG4gICAgICAgICAgICAgKiBjYXVzZWQgb24gYSBjbGllbnQtc2lkZSB0cmFuc2l0aW9uLiBPdGhlcndpc2UsIHdlJ2QgZ2V0IGludG9cbiAgICAgICAgICAgICAqIGFuIGluZmluaXRlIGxvb3AuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICghaXNTZXJ2ZXJSZW5kZXIpIHtcbiAgICAgICAgICAgICAgbWFya0Fzc2V0RXJyb3IoZXJyb3IpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGFIcmVmLFxuICAgICAgICAgICAganNvbjogcGFyc2VKU09OID8gdHJ5VG9QYXJzZUFzSlNPTih0ZXh0KSA6IG51bGwsXG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICBjYWNoZUtleSxcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFwZXJzaXN0Q2FjaGUgfHxcbiAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nIHx8XG4gICAgICAgICAgZGF0YS5yZXNwb25zZS5oZWFkZXJzLmdldCgneC1taWRkbGV3YXJlLWNhY2hlJykgPT09ICduby1jYWNoZSdcbiAgICAgICAgKSB7XG4gICAgICAgICAgZGVsZXRlIGluZmxpZ2h0Q2FjaGVbY2FjaGVLZXldXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBpZiAoIXVuc3RhYmxlX3NraXBDbGllbnRDYWNoZSkge1xuICAgICAgICAgIGRlbGV0ZSBpbmZsaWdodENhY2hlW2NhY2hlS2V5XVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBjaHJvbWVcbiAgICAgICAgICBlcnIubWVzc2FnZSA9PT0gJ0ZhaWxlZCB0byBmZXRjaCcgfHxcbiAgICAgICAgICAvLyBmaXJlZm94XG4gICAgICAgICAgZXJyLm1lc3NhZ2UgPT09ICdOZXR3b3JrRXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIGZldGNoIHJlc291cmNlLicgfHxcbiAgICAgICAgICAvLyBzYWZhcmlcbiAgICAgICAgICBlcnIubWVzc2FnZSA9PT0gJ0xvYWQgZmFpbGVkJ1xuICAgICAgICApIHtcbiAgICAgICAgICBtYXJrQXNzZXRFcnJvcihlcnIpXG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9KVxuXG4gIC8vIHdoZW4gc2tpcHBpbmcgY2xpZW50IGNhY2hlIHdlIHdhaXQgdG8gdXBkYXRlXG4gIC8vIGluZmxpZ2h0IGNhY2hlIHVudGlsIHN1Y2Nlc3NmdWwgZGF0YSByZXNwb25zZVxuICAvLyB0aGlzIGFsbG93cyByYWNpbmcgY2xpY2sgZXZlbnQgd2l0aCBmZXRjaGluZyBuZXdlciBkYXRhXG4gIC8vIHdpdGhvdXQgYmxvY2tpbmcgbmF2aWdhdGlvbiB3aGVuIHN0YWxlIGRhdGEgaXMgYXZhaWxhYmxlXG4gIGlmICh1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGUgJiYgcGVyc2lzdENhY2hlKSB7XG4gICAgcmV0dXJuIGdldERhdGEoe30pLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIGlmIChkYXRhLnJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LW1pZGRsZXdhcmUtY2FjaGUnKSAhPT0gJ25vLWNhY2hlJykge1xuICAgICAgICAvLyBvbmx5IHVwZGF0ZSBjYWNoZSBpZiBub3QgbWFya2VkIGFzIG5vLWNhY2hlXG4gICAgICAgIGluZmxpZ2h0Q2FjaGVbY2FjaGVLZXldID0gUHJvbWlzZS5yZXNvbHZlKGRhdGEpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSlcbiAgfVxuXG4gIGlmIChpbmZsaWdodENhY2hlW2NhY2hlS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGluZmxpZ2h0Q2FjaGVbY2FjaGVLZXldXG4gIH1cbiAgcmV0dXJuIChpbmZsaWdodENhY2hlW2NhY2hlS2V5XSA9IGdldERhdGEoXG4gICAgaXNCYWNrZ3JvdW5kID8geyBtZXRob2Q6ICdIRUFEJyB9IDoge31cbiAgKSlcbn1cblxuaW50ZXJmYWNlIE5leHREYXRhQ2FjaGUge1xuICBbYXNQYXRoOiBzdHJpbmddOiBQcm9taXNlPEZldGNoRGF0YU91dHB1dD5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUtleSgpIHtcbiAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKVxufVxuXG5mdW5jdGlvbiBoYW5kbGVIYXJkTmF2aWdhdGlvbih7XG4gIHVybCxcbiAgcm91dGVyLFxufToge1xuICB1cmw6IHN0cmluZ1xuICByb3V0ZXI6IFJvdXRlclxufSkge1xuICAvLyBlbnN1cmUgd2UgZG9uJ3QgdHJpZ2dlciBhIGhhcmQgbmF2aWdhdGlvbiB0byB0aGUgc2FtZVxuICAvLyBVUkwgYXMgdGhpcyBjYW4gZW5kIHVwIHdpdGggYW4gaW5maW5pdGUgcmVmcmVzaFxuICBpZiAodXJsID09PSBhZGRCYXNlUGF0aChhZGRMb2NhbGUocm91dGVyLmFzUGF0aCwgcm91dGVyLmxvY2FsZSkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFyaWFudDogYXR0ZW1wdGVkIHRvIGhhcmQgbmF2aWdhdGUgdG8gdGhlIHNhbWUgVVJMICR7dXJsfSAke2xvY2F0aW9uLmhyZWZ9YFxuICAgIClcbiAgfVxuICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybFxufVxuXG5jb25zdCBnZXRDYW5jZWxsZWRIYW5kbGVyID0gKHtcbiAgcm91dGUsXG4gIHJvdXRlcixcbn06IHtcbiAgcm91dGU6IHN0cmluZ1xuICByb3V0ZXI6IFJvdXRlclxufSkgPT4ge1xuICBsZXQgY2FuY2VsbGVkID0gZmFsc2VcbiAgY29uc3QgY2FuY2VsID0gKHJvdXRlci5jbGMgPSAoKSA9PiB7XG4gICAgY2FuY2VsbGVkID0gdHJ1ZVxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZUNhbmNlbGxlZCA9ICgpID0+IHtcbiAgICBpZiAoY2FuY2VsbGVkKSB7XG4gICAgICBjb25zdCBlcnJvcjogYW55ID0gbmV3IEVycm9yKFxuICAgICAgICBgQWJvcnQgZmV0Y2hpbmcgY29tcG9uZW50IGZvciByb3V0ZTogXCIke3JvdXRlfVwiYFxuICAgICAgKVxuICAgICAgZXJyb3IuY2FuY2VsbGVkID0gdHJ1ZVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG5cbiAgICBpZiAoY2FuY2VsID09PSByb3V0ZXIuY2xjKSB7XG4gICAgICByb3V0ZXIuY2xjID0gbnVsbFxuICAgIH1cbiAgfVxuICByZXR1cm4gaGFuZGxlQ2FuY2VsbGVkXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlciBpbXBsZW1lbnRzIEJhc2VSb3V0ZXIge1xuICBiYXNlUGF0aDogc3RyaW5nXG5cbiAgLyoqXG4gICAqIE1hcCBvZiBhbGwgY29tcG9uZW50cyBsb2FkZWQgaW4gYFJvdXRlcmBcbiAgICovXG4gIGNvbXBvbmVudHM6IHsgW3BhdGhuYW1lOiBzdHJpbmddOiBQcml2YXRlUm91dGVJbmZvIH1cbiAgLy8gU2VydmVyIERhdGEgQ2FjaGUgKGZ1bGwgZGF0YSByZXF1ZXN0cylcbiAgc2RjOiBOZXh0RGF0YUNhY2hlID0ge31cbiAgLy8gU2VydmVyIEJhY2tncm91bmQgQ2FjaGUgKEhFQUQgcmVxdWVzdHMpXG4gIHNiYzogTmV4dERhdGFDYWNoZSA9IHt9XG5cbiAgc3ViOiBTdWJzY3JpcHRpb25cbiAgY2xjOiBDb21wb25lbnRMb2FkQ2FuY2VsXG4gIHBhZ2VMb2FkZXI6IFBhZ2VMb2FkZXJcbiAgX2JwczogQmVmb3JlUG9wU3RhdGVDYWxsYmFjayB8IHVuZGVmaW5lZFxuICBldmVudHM6IE1pdHRFbWl0dGVyPFJvdXRlckV2ZW50PlxuICBfd3JhcEFwcDogKEFwcDogQXBwQ29tcG9uZW50KSA9PiBhbnlcbiAgaXNTc3I6IGJvb2xlYW5cbiAgX2luRmxpZ2h0Um91dGU/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgX3NoYWxsb3c/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIGxvY2FsZXM/OiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuICBkZWZhdWx0TG9jYWxlPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIGRvbWFpbkxvY2FsZXM/OiByZWFkb25seSBEb21haW5Mb2NhbGVbXSB8IHVuZGVmaW5lZFxuICBpc1JlYWR5OiBib29sZWFuXG4gIGlzTG9jYWxlRG9tYWluOiBib29sZWFuXG4gIGlzRmlyc3RQb3BTdGF0ZUV2ZW50ID0gdHJ1ZVxuICBfaW5pdGlhbE1hdGNoZXNNaWRkbGV3YXJlUHJvbWlzZTogUHJvbWlzZTxib29sZWFuPlxuICAvLyBzdGF0aWMgZW50cmllcyBmaWx0ZXJcbiAgX2JmbF9zPzogaW1wb3J0KCcuLi8uLi9saWIvYmxvb20tZmlsdGVyJykuQmxvb21GaWx0ZXJcbiAgLy8gZHluYW1pYyBlbnRpcmVzIGZpbHRlclxuICBfYmZsX2Q/OiBpbXBvcnQoJy4uLy4uL2xpYi9ibG9vbS1maWx0ZXInKS5CbG9vbUZpbHRlclxuXG4gIHByaXZhdGUgc3RhdGU6IFJlYWRvbmx5PHtcbiAgICByb3V0ZTogc3RyaW5nXG4gICAgcGF0aG5hbWU6IHN0cmluZ1xuICAgIHF1ZXJ5OiBQYXJzZWRVcmxRdWVyeVxuICAgIGFzUGF0aDogc3RyaW5nXG4gICAgbG9jYWxlOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgICBpc0ZhbGxiYWNrOiBib29sZWFuXG4gICAgaXNQcmV2aWV3OiBib29sZWFuXG4gIH0+XG5cbiAgcHJpdmF0ZSBfa2V5OiBzdHJpbmcgPSBjcmVhdGVLZXkoKVxuXG4gIHN0YXRpYyBldmVudHM6IE1pdHRFbWl0dGVyPFJvdXRlckV2ZW50PiA9IG1pdHQoKVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhdGhuYW1lOiBzdHJpbmcsXG4gICAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5LFxuICAgIGFzOiBzdHJpbmcsXG4gICAge1xuICAgICAgaW5pdGlhbFByb3BzLFxuICAgICAgcGFnZUxvYWRlcixcbiAgICAgIEFwcCxcbiAgICAgIHdyYXBBcHAsXG4gICAgICBDb21wb25lbnQsXG4gICAgICBlcnIsXG4gICAgICBzdWJzY3JpcHRpb24sXG4gICAgICBpc0ZhbGxiYWNrLFxuICAgICAgbG9jYWxlLFxuICAgICAgbG9jYWxlcyxcbiAgICAgIGRlZmF1bHRMb2NhbGUsXG4gICAgICBkb21haW5Mb2NhbGVzLFxuICAgICAgaXNQcmV2aWV3LFxuICAgIH06IHtcbiAgICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uXG4gICAgICBpbml0aWFsUHJvcHM6IGFueVxuICAgICAgcGFnZUxvYWRlcjogYW55XG4gICAgICBDb21wb25lbnQ6IENvbXBvbmVudFR5cGVcbiAgICAgIEFwcDogQXBwQ29tcG9uZW50XG4gICAgICB3cmFwQXBwOiAoV3JhcEFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSA9PiBhbnlcbiAgICAgIGVycj86IEVycm9yXG4gICAgICBpc0ZhbGxiYWNrOiBib29sZWFuXG4gICAgICBsb2NhbGU/OiBzdHJpbmdcbiAgICAgIGxvY2FsZXM/OiByZWFkb25seSBzdHJpbmdbXVxuICAgICAgZGVmYXVsdExvY2FsZT86IHN0cmluZ1xuICAgICAgZG9tYWluTG9jYWxlcz86IHJlYWRvbmx5IERvbWFpbkxvY2FsZVtdXG4gICAgICBpc1ByZXZpZXc/OiBib29sZWFuXG4gICAgfVxuICApIHtcbiAgICAvLyByZXByZXNlbnRzIHRoZSBjdXJyZW50IGNvbXBvbmVudCBrZXlcbiAgICBjb25zdCByb3V0ZSA9IHJlbW92ZVRyYWlsaW5nU2xhc2gocGF0aG5hbWUpXG5cbiAgICAvLyBzZXQgdXAgdGhlIGNvbXBvbmVudCBjYWNoZSAoYnkgcm91dGUga2V5cylcbiAgICB0aGlzLmNvbXBvbmVudHMgPSB7fVxuICAgIC8vIFdlIHNob3VsZCBub3Qga2VlcCB0aGUgY2FjaGUsIGlmIHRoZXJlJ3MgYW4gZXJyb3JcbiAgICAvLyBPdGhlcndpc2UsIHRoaXMgY2F1c2UgaXNzdWVzIHdoZW4gd2hlbiBnb2luZyBiYWNrIGFuZFxuICAgIC8vIGNvbWUgYWdhaW4gdG8gdGhlIGVycm9yZWQgcGFnZS5cbiAgICBpZiAocGF0aG5hbWUgIT09ICcvX2Vycm9yJykge1xuICAgICAgdGhpcy5jb21wb25lbnRzW3JvdXRlXSA9IHtcbiAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICBpbml0aWFsOiB0cnVlLFxuICAgICAgICBwcm9wczogaW5pdGlhbFByb3BzLFxuICAgICAgICBlcnIsXG4gICAgICAgIF9fTl9TU0c6IGluaXRpYWxQcm9wcyAmJiBpbml0aWFsUHJvcHMuX19OX1NTRyxcbiAgICAgICAgX19OX1NTUDogaW5pdGlhbFByb3BzICYmIGluaXRpYWxQcm9wcy5fX05fU1NQLFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29tcG9uZW50c1snL19hcHAnXSA9IHtcbiAgICAgIENvbXBvbmVudDogQXBwIGFzIENvbXBvbmVudFR5cGUsXG4gICAgICBzdHlsZVNoZWV0czogW1xuICAgICAgICAvKiAvX2FwcCBkb2VzIG5vdCBuZWVkIGl0cyBzdHlsZXNoZWV0cyBtYW5hZ2VkICovXG4gICAgICBdLFxuICAgIH1cblxuICAgIC8vIEJhY2t3YXJkcyBjb21wYXQgZm9yIFJvdXRlci5yb3V0ZXIuZXZlbnRzXG4gICAgLy8gVE9ETzogU2hvdWxkIGJlIHJlbW92ZSB0aGUgZm9sbG93aW5nIG1ham9yIHZlcnNpb24gYXMgaXQgd2FzIG5ldmVyIGRvY3VtZW50ZWRcbiAgICB0aGlzLmV2ZW50cyA9IFJvdXRlci5ldmVudHNcblxuICAgIHRoaXMucGFnZUxvYWRlciA9IHBhZ2VMb2FkZXJcbiAgICAvLyBpZiBhdXRvIHByZXJlbmRlcmVkIGFuZCBkeW5hbWljIHJvdXRlIHdhaXQgdG8gdXBkYXRlIGFzUGF0aFxuICAgIC8vIHVudGlsIGFmdGVyIG1vdW50IHRvIHByZXZlbnQgaHlkcmF0aW9uIG1pc21hdGNoXG4gICAgY29uc3QgYXV0b0V4cG9ydER5bmFtaWMgPVxuICAgICAgaXNEeW5hbWljUm91dGUocGF0aG5hbWUpICYmIHNlbGYuX19ORVhUX0RBVEFfXy5hdXRvRXhwb3J0XG5cbiAgICB0aGlzLmJhc2VQYXRoID0gcHJvY2Vzcy5lbnYuX19ORVhUX1JPVVRFUl9CQVNFUEFUSCB8fCAnJ1xuICAgIHRoaXMuc3ViID0gc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5jbGMgPSBudWxsXG4gICAgdGhpcy5fd3JhcEFwcCA9IHdyYXBBcHBcbiAgICAvLyBtYWtlIHN1cmUgdG8gaWdub3JlIGV4dHJhIHBvcFN0YXRlIGluIHNhZmFyaSBvbiBuYXZpZ2F0aW5nXG4gICAgLy8gYmFjayBmcm9tIGV4dGVybmFsIHNpdGVcbiAgICB0aGlzLmlzU3NyID0gdHJ1ZVxuICAgIHRoaXMuaXNMb2NhbGVEb21haW4gPSBmYWxzZVxuICAgIHRoaXMuaXNSZWFkeSA9ICEhKFxuICAgICAgc2VsZi5fX05FWFRfREFUQV9fLmdzc3AgfHxcbiAgICAgIHNlbGYuX19ORVhUX0RBVEFfXy5naXAgfHxcbiAgICAgIHNlbGYuX19ORVhUX0RBVEFfXy5pc0V4cGVyaW1lbnRhbENvbXBpbGUgfHxcbiAgICAgIChzZWxmLl9fTkVYVF9EQVRBX18uYXBwR2lwICYmICFzZWxmLl9fTkVYVF9EQVRBX18uZ3NwKSB8fFxuICAgICAgKCFhdXRvRXhwb3J0RHluYW1pYyAmJlxuICAgICAgICAhc2VsZi5sb2NhdGlvbi5zZWFyY2ggJiZcbiAgICAgICAgIXByb2Nlc3MuZW52Ll9fTkVYVF9IQVNfUkVXUklURVMpXG4gICAgKVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcbiAgICAgIHRoaXMubG9jYWxlcyA9IGxvY2FsZXNcbiAgICAgIHRoaXMuZGVmYXVsdExvY2FsZSA9IGRlZmF1bHRMb2NhbGVcbiAgICAgIHRoaXMuZG9tYWluTG9jYWxlcyA9IGRvbWFpbkxvY2FsZXNcbiAgICAgIHRoaXMuaXNMb2NhbGVEb21haW4gPSAhIWRldGVjdERvbWFpbkxvY2FsZShcbiAgICAgICAgZG9tYWluTG9jYWxlcyxcbiAgICAgICAgc2VsZi5sb2NhdGlvbi5ob3N0bmFtZVxuICAgICAgKVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICByb3V0ZSxcbiAgICAgIHBhdGhuYW1lLFxuICAgICAgcXVlcnksXG4gICAgICBhc1BhdGg6IGF1dG9FeHBvcnREeW5hbWljID8gcGF0aG5hbWUgOiBhcyxcbiAgICAgIGlzUHJldmlldzogISFpc1ByZXZpZXcsXG4gICAgICBsb2NhbGU6IHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQgPyBsb2NhbGUgOiB1bmRlZmluZWQsXG4gICAgICBpc0ZhbGxiYWNrLFxuICAgIH1cblxuICAgIHRoaXMuX2luaXRpYWxNYXRjaGVzTWlkZGxld2FyZVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoZmFsc2UpXG5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIG1ha2Ugc3VyZSBcImFzXCIgZG9lc24ndCBzdGFydCB3aXRoIGRvdWJsZSBzbGFzaGVzIG9yIGVsc2UgaXQgY2FuXG4gICAgICAvLyB0aHJvdyBhbiBlcnJvciBhcyBpdCdzIGNvbnNpZGVyZWQgaW52YWxpZFxuICAgICAgaWYgKCFhcy5zdGFydHNXaXRoKCcvLycpKSB7XG4gICAgICAgIC8vIGluIG9yZGVyIGZvciBgZS5zdGF0ZWAgdG8gd29yayBvbiB0aGUgYG9ucG9wc3RhdGVgIGV2ZW50XG4gICAgICAgIC8vIHdlIGhhdmUgdG8gcmVnaXN0ZXIgdGhlIGluaXRpYWwgcm91dGUgdXBvbiBpbml0aWFsaXphdGlvblxuICAgICAgICBjb25zdCBvcHRpb25zOiBUcmFuc2l0aW9uT3B0aW9ucyA9IHsgbG9jYWxlIH1cbiAgICAgICAgY29uc3QgYXNQYXRoID0gZ2V0VVJMKClcblxuICAgICAgICB0aGlzLl9pbml0aWFsTWF0Y2hlc01pZGRsZXdhcmVQcm9taXNlID0gbWF0Y2hlc01pZGRsZXdhcmUoe1xuICAgICAgICAgIHJvdXRlcjogdGhpcyxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgYXNQYXRoLFxuICAgICAgICB9KS50aGVuKChtYXRjaGVzKSA9PiB7XG4gICAgICAgICAgLy8gaWYgbWlkZGxld2FyZSBtYXRjaGVzIHdlIGxlYXZlIHJlc29sdmluZyB0byB0aGUgY2hhbmdlIGZ1bmN0aW9uXG4gICAgICAgICAgLy8gYXMgdGhlIHNlcnZlciBuZWVkcyB0byByZXNvbHZlIGZvciBjb3JyZWN0IHByaW9yaXR5XG4gICAgICAgICAgOyhvcHRpb25zIGFzIGFueSkuX3Nob3VsZFJlc29sdmVIcmVmID0gYXMgIT09IHBhdGhuYW1lXG5cbiAgICAgICAgICB0aGlzLmNoYW5nZVN0YXRlKFxuICAgICAgICAgICAgJ3JlcGxhY2VTdGF0ZScsXG4gICAgICAgICAgICBtYXRjaGVzXG4gICAgICAgICAgICAgID8gYXNQYXRoXG4gICAgICAgICAgICAgIDogZm9ybWF0V2l0aFZhbGlkYXRpb24oe1xuICAgICAgICAgICAgICAgICAgcGF0aG5hbWU6IGFkZEJhc2VQYXRoKHBhdGhuYW1lKSxcbiAgICAgICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgYXNQYXRoLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm4gbWF0Y2hlc1xuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCB0aGlzLm9uUG9wU3RhdGUpXG5cbiAgICAgIC8vIGVuYWJsZSBjdXN0b20gc2Nyb2xsIHJlc3RvcmF0aW9uIGhhbmRsaW5nIHdoZW4gYXZhaWxhYmxlXG4gICAgICAvLyBvdGhlcndpc2UgZmFsbGJhY2sgdG8gYnJvd3NlcidzIGRlZmF1bHQgaGFuZGxpbmdcbiAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfU0NST0xMX1JFU1RPUkFUSU9OKSB7XG4gICAgICAgIGlmIChtYW51YWxTY3JvbGxSZXN0b3JhdGlvbikge1xuICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uID0gJ21hbnVhbCdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUG9wU3RhdGUgPSAoZTogUG9wU3RhdGVFdmVudCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHsgaXNGaXJzdFBvcFN0YXRlRXZlbnQgfSA9IHRoaXNcbiAgICB0aGlzLmlzRmlyc3RQb3BTdGF0ZUV2ZW50ID0gZmFsc2VcblxuICAgIGNvbnN0IHN0YXRlID0gZS5zdGF0ZSBhcyBIaXN0b3J5U3RhdGVcblxuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIC8vIFdlIGdldCBzdGF0ZSBhcyB1bmRlZmluZWQgZm9yIHR3byByZWFzb25zLlxuICAgICAgLy8gIDEuIFdpdGggb2xkZXIgc2FmYXJpICg8IDgpIGFuZCBvbGRlciBjaHJvbWUgKDwgMzQpXG4gICAgICAvLyAgMi4gV2hlbiB0aGUgVVJMIGNoYW5nZWQgd2l0aCAjXG4gICAgICAvL1xuICAgICAgLy8gSW4gdGhlIGJvdGggY2FzZXMsIHdlIGRvbid0IG5lZWQgdG8gcHJvY2VlZCBhbmQgY2hhbmdlIHRoZSByb3V0ZS5cbiAgICAgIC8vIChhcyBpdCdzIGFscmVhZHkgY2hhbmdlZClcbiAgICAgIC8vIEJ1dCB3ZSBjYW4gc2ltcGx5IHJlcGxhY2UgdGhlIHN0YXRlIHdpdGggdGhlIG5ldyBjaGFuZ2VzLlxuICAgICAgLy8gQWN0dWFsbHksIGZvciAoMSkgd2UgZG9uJ3QgbmVlZCB0byBub3RoaW5nLiBCdXQgaXQncyBoYXJkIHRvIGRldGVjdCB0aGF0IGV2ZW50LlxuICAgICAgLy8gU28sIGRvaW5nIHRoZSBmb2xsb3dpbmcgZm9yICgxKSBkb2VzIG5vIGhhcm0uXG4gICAgICBjb25zdCB7IHBhdGhuYW1lLCBxdWVyeSB9ID0gdGhpc1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShcbiAgICAgICAgJ3JlcGxhY2VTdGF0ZScsXG4gICAgICAgIGZvcm1hdFdpdGhWYWxpZGF0aW9uKHsgcGF0aG5hbWU6IGFkZEJhc2VQYXRoKHBhdGhuYW1lKSwgcXVlcnkgfSksXG4gICAgICAgIGdldFVSTCgpXG4gICAgICApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBfX05BIGlzIHVzZWQgdG8gaWRlbnRpZnkgaWYgdGhlIGhpc3RvcnkgZW50cnkgY2FuIGJlIGhhbmRsZWQgYnkgdGhlIGFwcC1yb3V0ZXIuXG4gICAgaWYgKHN0YXRlLl9fTkEpIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFzdGF0ZS5fX04pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIFNhZmFyaSBmaXJlcyBwb3BzdGF0ZWV2ZW50IHdoZW4gcmVvcGVuaW5nIHRoZSBicm93c2VyLlxuICAgIGlmIChcbiAgICAgIGlzRmlyc3RQb3BTdGF0ZUV2ZW50ICYmXG4gICAgICB0aGlzLmxvY2FsZSA9PT0gc3RhdGUub3B0aW9ucy5sb2NhbGUgJiZcbiAgICAgIHN0YXRlLmFzID09PSB0aGlzLmFzUGF0aFxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IGZvcmNlZFNjcm9sbDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgdW5kZWZpbmVkXG4gICAgY29uc3QgeyB1cmwsIGFzLCBvcHRpb25zLCBrZXkgfSA9IHN0YXRlXG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9TQ1JPTExfUkVTVE9SQVRJT04pIHtcbiAgICAgIGlmIChtYW51YWxTY3JvbGxSZXN0b3JhdGlvbikge1xuICAgICAgICBpZiAodGhpcy5fa2V5ICE9PSBrZXkpIHtcbiAgICAgICAgICAvLyBTbmFwc2hvdCBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbjpcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgICAgICAgJ19fbmV4dF9zY3JvbGxfJyArIHRoaXMuX2tleSxcbiAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoeyB4OiBzZWxmLnBhZ2VYT2Zmc2V0LCB5OiBzZWxmLnBhZ2VZT2Zmc2V0IH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSBjYXRjaCB7fVxuXG4gICAgICAgICAgLy8gUmVzdG9yZSBvbGQgc2Nyb2xsIHBvc2l0aW9uOlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnX19uZXh0X3Njcm9sbF8nICsga2V5KVxuICAgICAgICAgICAgZm9yY2VkU2Nyb2xsID0gSlNPTi5wYXJzZSh2ISlcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGZvcmNlZFNjcm9sbCA9IHsgeDogMCwgeTogMCB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2tleSA9IGtleVxuXG4gICAgY29uc3QgeyBwYXRobmFtZSB9ID0gcGFyc2VSZWxhdGl2ZVVybCh1cmwpXG5cbiAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgcmUtcmVuZGVyIG9uIGluaXRpYWwgbG9hZCxcbiAgICAvLyBjYW4gYmUgY2F1c2VkIGJ5IG5hdmlnYXRpbmcgYmFjayBmcm9tIGFuIGV4dGVybmFsIHNpdGVcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzU3NyICYmXG4gICAgICBhcyA9PT0gYWRkQmFzZVBhdGgodGhpcy5hc1BhdGgpICYmXG4gICAgICBwYXRobmFtZSA9PT0gYWRkQmFzZVBhdGgodGhpcy5wYXRobmFtZSlcbiAgICApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIHRoZSBkb3duc3RyZWFtIGFwcGxpY2F0aW9uIHJldHVybnMgZmFsc3ksIHJldHVybi5cbiAgICAvLyBUaGV5IHdpbGwgdGhlbiBiZSByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGV2ZW50LlxuICAgIGlmICh0aGlzLl9icHMgJiYgIXRoaXMuX2JwcyhzdGF0ZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlKFxuICAgICAgJ3JlcGxhY2VTdGF0ZScsXG4gICAgICB1cmwsXG4gICAgICBhcyxcbiAgICAgIE9iamVjdC5hc3NpZ248e30sIFRyYW5zaXRpb25PcHRpb25zLCBUcmFuc2l0aW9uT3B0aW9ucz4oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgc2hhbGxvdzogb3B0aW9ucy5zaGFsbG93ICYmIHRoaXMuX3NoYWxsb3csXG4gICAgICAgIGxvY2FsZTogb3B0aW9ucy5sb2NhbGUgfHwgdGhpcy5kZWZhdWx0TG9jYWxlLFxuICAgICAgICAvLyBAdHMtaWdub3JlIGludGVybmFsIHZhbHVlIG5vdCBleHBvc2VkIG9uIHR5cGVzXG4gICAgICAgIF9oOiAwLFxuICAgICAgfSksXG4gICAgICBmb3JjZWRTY3JvbGxcbiAgICApXG4gIH1cblxuICByZWxvYWQoKTogdm9pZCB7XG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gIH1cblxuICAvKipcbiAgICogR28gYmFjayBpbiBoaXN0b3J5XG4gICAqL1xuICBiYWNrKCkge1xuICAgIHdpbmRvdy5oaXN0b3J5LmJhY2soKVxuICB9XG5cbiAgLyoqXG4gICAqIEdvIGZvcndhcmQgaW4gaGlzdG9yeVxuICAgKi9cbiAgZm9yd2FyZCgpIHtcbiAgICB3aW5kb3cuaGlzdG9yeS5mb3J3YXJkKClcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyBhIGBwdXNoU3RhdGVgIHdpdGggYXJndW1lbnRzXG4gICAqIEBwYXJhbSB1cmwgb2YgdGhlIHJvdXRlXG4gICAqIEBwYXJhbSBhcyBtYXNrcyBgdXJsYCBmb3IgdGhlIGJyb3dzZXJcbiAgICogQHBhcmFtIG9wdGlvbnMgb2JqZWN0IHlvdSBjYW4gZGVmaW5lIGBzaGFsbG93YCBhbmQgb3RoZXIgb3B0aW9uc1xuICAgKi9cbiAgcHVzaCh1cmw6IFVybCwgYXM/OiBVcmwsIG9wdGlvbnM6IFRyYW5zaXRpb25PcHRpb25zID0ge30pIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX1NDUk9MTF9SRVNUT1JBVElPTikge1xuICAgICAgLy8gVE9ETzogcmVtb3ZlIGluIHRoZSBmdXR1cmUgd2hlbiB3ZSB1cGRhdGUgaGlzdG9yeSBiZWZvcmUgcm91dGUgY2hhbmdlXG4gICAgICAvLyBpcyBjb21wbGV0ZSwgYXMgdGhlIHBvcHN0YXRlIGV2ZW50IHNob3VsZCBoYW5kbGUgdGhpcyBjYXB0dXJlLlxuICAgICAgaWYgKG1hbnVhbFNjcm9sbFJlc3RvcmF0aW9uKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gU25hcHNob3Qgc2Nyb2xsIHBvc2l0aW9uIHJpZ2h0IGJlZm9yZSBuYXZpZ2F0aW5nIHRvIGEgbmV3IHBhZ2U6XG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICAgICAgICdfX25leHRfc2Nyb2xsXycgKyB0aGlzLl9rZXksXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7IHg6IHNlbGYucGFnZVhPZmZzZXQsIHk6IHNlbGYucGFnZVlPZmZzZXQgfSlcbiAgICAgICAgICApXG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH1cbiAgICB9XG4gICAgOyh7IHVybCwgYXMgfSA9IHByZXBhcmVVcmxBcyh0aGlzLCB1cmwsIGFzKSlcbiAgICByZXR1cm4gdGhpcy5jaGFuZ2UoJ3B1c2hTdGF0ZScsIHVybCwgYXMsIG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgYSBgcmVwbGFjZVN0YXRlYCB3aXRoIGFyZ3VtZW50c1xuICAgKiBAcGFyYW0gdXJsIG9mIHRoZSByb3V0ZVxuICAgKiBAcGFyYW0gYXMgbWFza3MgYHVybGAgZm9yIHRoZSBicm93c2VyXG4gICAqIEBwYXJhbSBvcHRpb25zIG9iamVjdCB5b3UgY2FuIGRlZmluZSBgc2hhbGxvd2AgYW5kIG90aGVyIG9wdGlvbnNcbiAgICovXG4gIHJlcGxhY2UodXJsOiBVcmwsIGFzPzogVXJsLCBvcHRpb25zOiBUcmFuc2l0aW9uT3B0aW9ucyA9IHt9KSB7XG4gICAgOyh7IHVybCwgYXMgfSA9IHByZXBhcmVVcmxBcyh0aGlzLCB1cmwsIGFzKSlcbiAgICByZXR1cm4gdGhpcy5jaGFuZ2UoJ3JlcGxhY2VTdGF0ZScsIHVybCwgYXMsIG9wdGlvbnMpXG4gIH1cblxuICBhc3luYyBfYmZsKFxuICAgIGFzOiBzdHJpbmcsXG4gICAgcmVzb2x2ZWRBcz86IHN0cmluZyxcbiAgICBsb2NhbGU/OiBzdHJpbmcgfCBmYWxzZSxcbiAgICBza2lwTmF2aWdhdGU/OiBib29sZWFuXG4gICkge1xuICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1JPVVRFUl9GSUxURVJfRU5BQkxFRCkge1xuICAgICAgaWYgKCF0aGlzLl9iZmxfcyAmJiAhdGhpcy5fYmZsX2QpIHtcbiAgICAgICAgY29uc3QgeyBCbG9vbUZpbHRlciB9ID1cbiAgICAgICAgICByZXF1aXJlKCcuLi8uLi9saWIvYmxvb20tZmlsdGVyJykgYXMgdHlwZW9mIGltcG9ydCgnLi4vLi4vbGliL2Jsb29tLWZpbHRlcicpXG5cbiAgICAgICAgdHlwZSBGaWx0ZXIgPSBSZXR1cm5UeXBlPFxuICAgICAgICAgIGltcG9ydCgnLi4vLi4vbGliL2Jsb29tLWZpbHRlcicpLkJsb29tRmlsdGVyWydleHBvcnQnXVxuICAgICAgICA+XG4gICAgICAgIGxldCBzdGF0aWNGaWx0ZXJEYXRhOiBGaWx0ZXIgfCB1bmRlZmluZWRcbiAgICAgICAgbGV0IGR5bmFtaWNGaWx0ZXJEYXRhOiBGaWx0ZXIgfCB1bmRlZmluZWRcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIDsoe1xuICAgICAgICAgICAgX19yb3V0ZXJGaWx0ZXJTdGF0aWM6IHN0YXRpY0ZpbHRlckRhdGEsXG4gICAgICAgICAgICBfX3JvdXRlckZpbHRlckR5bmFtaWM6IGR5bmFtaWNGaWx0ZXJEYXRhLFxuICAgICAgICAgIH0gPSAoYXdhaXQgZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCgpKSBhcyBhbnkgYXMge1xuICAgICAgICAgICAgX19yb3V0ZXJGaWx0ZXJTdGF0aWM/OiBGaWx0ZXJcbiAgICAgICAgICAgIF9fcm91dGVyRmlsdGVyRHluYW1pYz86IEZpbHRlclxuICAgICAgICAgIH0pXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIGZhaWxlZCB0byBsb2FkIGJ1aWxkIG1hbmlmZXN0IGhhcmQgbmF2aWdhdGVcbiAgICAgICAgICAvLyB0byBiZSBzYWZlXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICAgICAgaWYgKHNraXBOYXZpZ2F0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oe1xuICAgICAgICAgICAgdXJsOiBhZGRCYXNlUGF0aChcbiAgICAgICAgICAgICAgYWRkTG9jYWxlKGFzLCBsb2NhbGUgfHwgdGhpcy5sb2NhbGUsIHRoaXMuZGVmYXVsdExvY2FsZSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICByb3V0ZXI6IHRoaXMsXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKCkgPT4ge30pXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByb3V0ZXJGaWx0ZXJTVmFsdWU6IEZpbHRlciB8IGZhbHNlID0gcHJvY2Vzcy5lbnZcbiAgICAgICAgICAuX19ORVhUX0NMSUVOVF9ST1VURVJfU19GSUxURVIgYXMgYW55XG5cbiAgICAgICAgaWYgKCFzdGF0aWNGaWx0ZXJEYXRhICYmIHJvdXRlckZpbHRlclNWYWx1ZSkge1xuICAgICAgICAgIHN0YXRpY0ZpbHRlckRhdGEgPSByb3V0ZXJGaWx0ZXJTVmFsdWUgPyByb3V0ZXJGaWx0ZXJTVmFsdWUgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvdXRlckZpbHRlckRWYWx1ZTogRmlsdGVyIHwgZmFsc2UgPSBwcm9jZXNzLmVudlxuICAgICAgICAgIC5fX05FWFRfQ0xJRU5UX1JPVVRFUl9EX0ZJTFRFUiBhcyBhbnlcblxuICAgICAgICBpZiAoIWR5bmFtaWNGaWx0ZXJEYXRhICYmIHJvdXRlckZpbHRlckRWYWx1ZSkge1xuICAgICAgICAgIGR5bmFtaWNGaWx0ZXJEYXRhID0gcm91dGVyRmlsdGVyRFZhbHVlXG4gICAgICAgICAgICA/IHJvdXRlckZpbHRlckRWYWx1ZVxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0aWNGaWx0ZXJEYXRhPy5udW1IYXNoZXMpIHtcbiAgICAgICAgICB0aGlzLl9iZmxfcyA9IG5ldyBCbG9vbUZpbHRlcihcbiAgICAgICAgICAgIHN0YXRpY0ZpbHRlckRhdGEubnVtSXRlbXMsXG4gICAgICAgICAgICBzdGF0aWNGaWx0ZXJEYXRhLmVycm9yUmF0ZVxuICAgICAgICAgIClcbiAgICAgICAgICB0aGlzLl9iZmxfcy5pbXBvcnQoc3RhdGljRmlsdGVyRGF0YSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkeW5hbWljRmlsdGVyRGF0YT8ubnVtSGFzaGVzKSB7XG4gICAgICAgICAgdGhpcy5fYmZsX2QgPSBuZXcgQmxvb21GaWx0ZXIoXG4gICAgICAgICAgICBkeW5hbWljRmlsdGVyRGF0YS5udW1JdGVtcyxcbiAgICAgICAgICAgIGR5bmFtaWNGaWx0ZXJEYXRhLmVycm9yUmF0ZVxuICAgICAgICAgIClcbiAgICAgICAgICB0aGlzLl9iZmxfZC5pbXBvcnQoZHluYW1pY0ZpbHRlckRhdGEpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IG1hdGNoZXNCZmxTdGF0aWMgPSBmYWxzZVxuICAgICAgbGV0IG1hdGNoZXNCZmxEeW5hbWljID0gZmFsc2VcbiAgICAgIGNvbnN0IHBhdGhzVG9DaGVjazogQXJyYXk8eyBhcz86IHN0cmluZzsgYWxsb3dNYXRjaEN1cnJlbnQ/OiBib29sZWFuIH0+ID1cbiAgICAgICAgW3sgYXMgfSwgeyBhczogcmVzb2x2ZWRBcyB9XVxuXG4gICAgICBmb3IgKGNvbnN0IHsgYXM6IGN1ckFzLCBhbGxvd01hdGNoQ3VycmVudCB9IG9mIHBhdGhzVG9DaGVjaykge1xuICAgICAgICBpZiAoY3VyQXMpIHtcbiAgICAgICAgICBjb25zdCBhc05vU2xhc2ggPSByZW1vdmVUcmFpbGluZ1NsYXNoKFxuICAgICAgICAgICAgbmV3IFVSTChjdXJBcywgJ2h0dHA6Ly9uJykucGF0aG5hbWVcbiAgICAgICAgICApXG4gICAgICAgICAgY29uc3QgYXNOb1NsYXNoTG9jYWxlID0gYWRkQmFzZVBhdGgoXG4gICAgICAgICAgICBhZGRMb2NhbGUoYXNOb1NsYXNoLCBsb2NhbGUgfHwgdGhpcy5sb2NhbGUpXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgYWxsb3dNYXRjaEN1cnJlbnQgfHxcbiAgICAgICAgICAgIGFzTm9TbGFzaCAhPT1cbiAgICAgICAgICAgICAgcmVtb3ZlVHJhaWxpbmdTbGFzaChuZXcgVVJMKHRoaXMuYXNQYXRoLCAnaHR0cDovL24nKS5wYXRobmFtZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIG1hdGNoZXNCZmxTdGF0aWMgPVxuICAgICAgICAgICAgICBtYXRjaGVzQmZsU3RhdGljIHx8XG4gICAgICAgICAgICAgICEhdGhpcy5fYmZsX3M/LmNvbnRhaW5zKGFzTm9TbGFzaCkgfHxcbiAgICAgICAgICAgICAgISF0aGlzLl9iZmxfcz8uY29udGFpbnMoYXNOb1NsYXNoTG9jYWxlKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vcm1hbGl6ZWRBUyBvZiBbYXNOb1NsYXNoLCBhc05vU2xhc2hMb2NhbGVdKSB7XG4gICAgICAgICAgICAgIC8vIGlmIGFueSBzdWItcGF0aCBvZiBhcyBtYXRjaGVzIGEgZHluYW1pYyBmaWx0ZXIgcGF0aFxuICAgICAgICAgICAgICAvLyBpdCBzaG91bGQgYmUgaGFyZCBuYXZpZ2F0ZWRcbiAgICAgICAgICAgICAgY29uc3QgY3VyQXNQYXJ0cyA9IG5vcm1hbGl6ZWRBUy5zcGxpdCgnLycpXG4gICAgICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgICAgICFtYXRjaGVzQmZsRHluYW1pYyAmJiBpIDwgY3VyQXNQYXJ0cy5sZW5ndGggKyAxO1xuICAgICAgICAgICAgICAgIGkrK1xuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UGFydCA9IGN1ckFzUGFydHMuc2xpY2UoMCwgaSkuam9pbignLycpXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYXJ0ICYmIHRoaXMuX2JmbF9kPy5jb250YWlucyhjdXJyZW50UGFydCkpIHtcbiAgICAgICAgICAgICAgICAgIG1hdGNoZXNCZmxEeW5hbWljID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlIGNsaWVudCByb3V0ZXIgZmlsdGVyIGlzIG1hdGNoZWQgdGhlbiB3ZSB0cmlnZ2VyXG4gICAgICAgICAgICAvLyBhIGhhcmQgbmF2aWdhdGlvblxuICAgICAgICAgICAgaWYgKG1hdGNoZXNCZmxTdGF0aWMgfHwgbWF0Y2hlc0JmbER5bmFtaWMpIHtcbiAgICAgICAgICAgICAgaWYgKHNraXBOYXZpZ2F0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oe1xuICAgICAgICAgICAgICAgIHVybDogYWRkQmFzZVBhdGgoXG4gICAgICAgICAgICAgICAgICBhZGRMb2NhbGUoYXMsIGxvY2FsZSB8fCB0aGlzLmxvY2FsZSwgdGhpcy5kZWZhdWx0TG9jYWxlKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgcm91dGVyOiB0aGlzLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKCkgPT4ge30pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGFuZ2UoXG4gICAgbWV0aG9kOiBIaXN0b3J5TWV0aG9kLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGFzOiBzdHJpbmcsXG4gICAgb3B0aW9uczogVHJhbnNpdGlvbk9wdGlvbnMsXG4gICAgZm9yY2VkU2Nyb2xsPzogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9XG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghaXNMb2NhbFVSTCh1cmwpKSB7XG4gICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7IHVybCwgcm91dGVyOiB0aGlzIH0pXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgLy8gV0FSTklORzogYF9oYCBpcyBhbiBpbnRlcm5hbCBvcHRpb24gZm9yIGhhbmRpbmcgTmV4dC5qcyBjbGllbnQtc2lkZVxuICAgIC8vIGh5ZHJhdGlvbi4gWW91ciBhcHAgc2hvdWxkIF9uZXZlcl8gdXNlIHRoaXMgcHJvcGVydHkuIEl0IG1heSBjaGFuZ2UgYXRcbiAgICAvLyBhbnkgdGltZSB3aXRob3V0IG5vdGljZS5cbiAgICBjb25zdCBpc1F1ZXJ5VXBkYXRpbmcgPSAob3B0aW9ucyBhcyBhbnkpLl9oID09PSAxXG5cbiAgICBpZiAoIWlzUXVlcnlVcGRhdGluZyAmJiAhb3B0aW9ucy5zaGFsbG93KSB7XG4gICAgICBhd2FpdCB0aGlzLl9iZmwoYXMsIHVuZGVmaW5lZCwgb3B0aW9ucy5sb2NhbGUpXG4gICAgfVxuXG4gICAgbGV0IHNob3VsZFJlc29sdmVIcmVmID1cbiAgICAgIGlzUXVlcnlVcGRhdGluZyB8fFxuICAgICAgKG9wdGlvbnMgYXMgYW55KS5fc2hvdWxkUmVzb2x2ZUhyZWYgfHxcbiAgICAgIHBhcnNlUGF0aCh1cmwpLnBhdGhuYW1lID09PSBwYXJzZVBhdGgoYXMpLnBhdGhuYW1lXG5cbiAgICBjb25zdCBuZXh0U3RhdGUgPSB7XG4gICAgICAuLi50aGlzLnN0YXRlLFxuICAgIH1cblxuICAgIC8vIGZvciBzdGF0aWMgcGFnZXMgd2l0aCBxdWVyeSBwYXJhbXMgaW4gdGhlIFVSTCB3ZSBkZWxheVxuICAgIC8vIG1hcmtpbmcgdGhlIHJvdXRlciByZWFkeSB1bnRpbCBhZnRlciB0aGUgcXVlcnkgaXMgdXBkYXRlZFxuICAgIC8vIG9yIGEgbmF2aWdhdGlvbiBoYXMgb2NjdXJyZWRcbiAgICBjb25zdCByZWFkeVN0YXRlQ2hhbmdlID0gdGhpcy5pc1JlYWR5ICE9PSB0cnVlXG4gICAgdGhpcy5pc1JlYWR5ID0gdHJ1ZVxuICAgIGNvbnN0IGlzU3NyID0gdGhpcy5pc1NzclxuXG4gICAgaWYgKCFpc1F1ZXJ5VXBkYXRpbmcpIHtcbiAgICAgIHRoaXMuaXNTc3IgPSBmYWxzZVxuICAgIH1cblxuICAgIC8vIGlmIGEgcm91dGUgdHJhbnNpdGlvbiBpcyBhbHJlYWR5IGluIHByb2dyZXNzIGJlZm9yZVxuICAgIC8vIHRoZSBxdWVyeSB1cGRhdGluZyBpcyB0cmlnZ2VyZWQgaWdub3JlIHF1ZXJ5IHVwZGF0aW5nXG4gICAgaWYgKGlzUXVlcnlVcGRhdGluZyAmJiB0aGlzLmNsYykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgcHJldkxvY2FsZSA9IG5leHRTdGF0ZS5sb2NhbGVcblxuICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9TVVBQT1JUKSB7XG4gICAgICBuZXh0U3RhdGUubG9jYWxlID1cbiAgICAgICAgb3B0aW9ucy5sb2NhbGUgPT09IGZhbHNlXG4gICAgICAgICAgPyB0aGlzLmRlZmF1bHRMb2NhbGVcbiAgICAgICAgICA6IG9wdGlvbnMubG9jYWxlIHx8IG5leHRTdGF0ZS5sb2NhbGVcblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmxvY2FsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgb3B0aW9ucy5sb2NhbGUgPSBuZXh0U3RhdGUubG9jYWxlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcnNlZEFzID0gcGFyc2VSZWxhdGl2ZVVybChcbiAgICAgICAgaGFzQmFzZVBhdGgoYXMpID8gcmVtb3ZlQmFzZVBhdGgoYXMpIDogYXNcbiAgICAgIClcbiAgICAgIGNvbnN0IGxvY2FsZVBhdGhSZXN1bHQgPSBub3JtYWxpemVMb2NhbGVQYXRoKFxuICAgICAgICBwYXJzZWRBcy5wYXRobmFtZSxcbiAgICAgICAgdGhpcy5sb2NhbGVzXG4gICAgICApXG5cbiAgICAgIGlmIChsb2NhbGVQYXRoUmVzdWx0LmRldGVjdGVkTG9jYWxlKSB7XG4gICAgICAgIG5leHRTdGF0ZS5sb2NhbGUgPSBsb2NhbGVQYXRoUmVzdWx0LmRldGVjdGVkTG9jYWxlXG4gICAgICAgIHBhcnNlZEFzLnBhdGhuYW1lID0gYWRkQmFzZVBhdGgocGFyc2VkQXMucGF0aG5hbWUpXG4gICAgICAgIGFzID0gZm9ybWF0V2l0aFZhbGlkYXRpb24ocGFyc2VkQXMpXG4gICAgICAgIHVybCA9IGFkZEJhc2VQYXRoKFxuICAgICAgICAgIG5vcm1hbGl6ZUxvY2FsZVBhdGgoXG4gICAgICAgICAgICBoYXNCYXNlUGF0aCh1cmwpID8gcmVtb3ZlQmFzZVBhdGgodXJsKSA6IHVybCxcbiAgICAgICAgICAgIHRoaXMubG9jYWxlc1xuICAgICAgICAgICkucGF0aG5hbWVcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgbGV0IGRpZE5hdmlnYXRlID0gZmFsc2VcblxuICAgICAgLy8gd2UgbmVlZCB0byB3cmFwIHRoaXMgaW4gdGhlIGVudiBjaGVjayBhZ2FpbiBzaW5jZSByZWdlbmVyYXRvciBydW50aW1lXG4gICAgICAvLyBtb3ZlcyB0aGlzIG9uIGl0cyBvd24gZHVlIHRvIHRoZSByZXR1cm5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5fX05FWFRfSTE4Tl9TVVBQT1JUKSB7XG4gICAgICAgIC8vIGlmIHRoZSBsb2NhbGUgaXNuJ3QgY29uZmlndXJlZCBoYXJkIG5hdmlnYXRlIHRvIHNob3cgNDA0IHBhZ2VcbiAgICAgICAgaWYgKCF0aGlzLmxvY2FsZXM/LmluY2x1ZGVzKG5leHRTdGF0ZS5sb2NhbGUhKSkge1xuICAgICAgICAgIHBhcnNlZEFzLnBhdGhuYW1lID0gYWRkTG9jYWxlKHBhcnNlZEFzLnBhdGhuYW1lLCBuZXh0U3RhdGUubG9jYWxlKVxuICAgICAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHtcbiAgICAgICAgICAgIHVybDogZm9ybWF0V2l0aFZhbGlkYXRpb24ocGFyc2VkQXMpLFxuICAgICAgICAgICAgcm91dGVyOiB0aGlzLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gdGhpcyB3YXMgcHJldmlvdXNseSBhIHJldHVybiBidXQgd2FzIHJlbW92ZWQgaW4gZmF2b3JcbiAgICAgICAgICAvLyBvZiBiZXR0ZXIgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdpdGggcmVnZW5lcmF0b3IgcnVudGltZVxuICAgICAgICAgIGRpZE5hdmlnYXRlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRldGVjdGVkRG9tYWluID0gZGV0ZWN0RG9tYWluTG9jYWxlKFxuICAgICAgICB0aGlzLmRvbWFpbkxvY2FsZXMsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgbmV4dFN0YXRlLmxvY2FsZVxuICAgICAgKVxuXG4gICAgICAvLyB3ZSBuZWVkIHRvIHdyYXAgdGhpcyBpbiB0aGUgZW52IGNoZWNrIGFnYWluIHNpbmNlIHJlZ2VuZXJhdG9yIHJ1bnRpbWVcbiAgICAgIC8vIG1vdmVzIHRoaXMgb24gaXRzIG93biBkdWUgdG8gdGhlIHJldHVyblxuICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcbiAgICAgICAgLy8gaWYgd2UgYXJlIG5hdmlnYXRpbmcgdG8gYSBkb21haW4gbG9jYWxlIGVuc3VyZSB3ZSByZWRpcmVjdCB0byB0aGVcbiAgICAgICAgLy8gY29ycmVjdCBkb21haW5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFkaWROYXZpZ2F0ZSAmJlxuICAgICAgICAgIGRldGVjdGVkRG9tYWluICYmXG4gICAgICAgICAgdGhpcy5pc0xvY2FsZURvbWFpbiAmJlxuICAgICAgICAgIHNlbGYubG9jYXRpb24uaG9zdG5hbWUgIT09IGRldGVjdGVkRG9tYWluLmRvbWFpblxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBhc05vQmFzZVBhdGggPSByZW1vdmVCYXNlUGF0aChhcylcbiAgICAgICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7XG4gICAgICAgICAgICB1cmw6IGBodHRwJHtkZXRlY3RlZERvbWFpbi5odHRwID8gJycgOiAncyd9Oi8vJHtcbiAgICAgICAgICAgICAgZGV0ZWN0ZWREb21haW4uZG9tYWluXG4gICAgICAgICAgICB9JHthZGRCYXNlUGF0aChcbiAgICAgICAgICAgICAgYCR7XG4gICAgICAgICAgICAgICAgbmV4dFN0YXRlLmxvY2FsZSA9PT0gZGV0ZWN0ZWREb21haW4uZGVmYXVsdExvY2FsZVxuICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgOiBgLyR7bmV4dFN0YXRlLmxvY2FsZX1gXG4gICAgICAgICAgICAgIH0ke2FzTm9CYXNlUGF0aCA9PT0gJy8nID8gJycgOiBhc05vQmFzZVBhdGh9YCB8fCAnLydcbiAgICAgICAgICAgICl9YCxcbiAgICAgICAgICAgIHJvdXRlcjogdGhpcyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIHRoaXMgd2FzIHByZXZpb3VzbHkgYSByZXR1cm4gYnV0IHdhcyByZW1vdmVkIGluIGZhdm9yXG4gICAgICAgICAgLy8gb2YgYmV0dGVyIGRlYWQgY29kZSBlbGltaW5hdGlvbiB3aXRoIHJlZ2VuZXJhdG9yIHJ1bnRpbWVcbiAgICAgICAgICBkaWROYXZpZ2F0ZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZGlkTmF2aWdhdGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKCgpID0+IHt9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG1hcmtpbmcgcm91dGUgY2hhbmdlcyBhcyBhIG5hdmlnYXRpb24gc3RhcnQgZW50cnlcbiAgICBpZiAoU1QpIHtcbiAgICAgIHBlcmZvcm1hbmNlLm1hcmsoJ3JvdXRlQ2hhbmdlJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNoYWxsb3cgPSBmYWxzZSwgc2Nyb2xsID0gdHJ1ZSB9ID0gb3B0aW9uc1xuICAgIGNvbnN0IHJvdXRlUHJvcHMgPSB7IHNoYWxsb3cgfVxuXG4gICAgaWYgKHRoaXMuX2luRmxpZ2h0Um91dGUgJiYgdGhpcy5jbGMpIHtcbiAgICAgIGlmICghaXNTc3IpIHtcbiAgICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KFxuICAgICAgICAgICdyb3V0ZUNoYW5nZUVycm9yJyxcbiAgICAgICAgICBidWlsZENhbmNlbGxhdGlvbkVycm9yKCksXG4gICAgICAgICAgdGhpcy5faW5GbGlnaHRSb3V0ZSxcbiAgICAgICAgICByb3V0ZVByb3BzXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHRoaXMuY2xjKClcbiAgICAgIHRoaXMuY2xjID0gbnVsbFxuICAgIH1cblxuICAgIGFzID0gYWRkQmFzZVBhdGgoXG4gICAgICBhZGRMb2NhbGUoXG4gICAgICAgIGhhc0Jhc2VQYXRoKGFzKSA/IHJlbW92ZUJhc2VQYXRoKGFzKSA6IGFzLFxuICAgICAgICBvcHRpb25zLmxvY2FsZSxcbiAgICAgICAgdGhpcy5kZWZhdWx0TG9jYWxlXG4gICAgICApXG4gICAgKVxuICAgIGNvbnN0IGNsZWFuZWRBcyA9IHJlbW92ZUxvY2FsZShcbiAgICAgIGhhc0Jhc2VQYXRoKGFzKSA/IHJlbW92ZUJhc2VQYXRoKGFzKSA6IGFzLFxuICAgICAgbmV4dFN0YXRlLmxvY2FsZVxuICAgIClcbiAgICB0aGlzLl9pbkZsaWdodFJvdXRlID0gYXNcblxuICAgIGNvbnN0IGxvY2FsZUNoYW5nZSA9IHByZXZMb2NhbGUgIT09IG5leHRTdGF0ZS5sb2NhbGVcblxuICAgIC8vIElmIHRoZSB1cmwgY2hhbmdlIGlzIG9ubHkgcmVsYXRlZCB0byBhIGhhc2ggY2hhbmdlXG4gICAgLy8gV2Ugc2hvdWxkIG5vdCBwcm9jZWVkLiBXZSBzaG91bGQgb25seSBjaGFuZ2UgdGhlIHN0YXRlLlxuXG4gICAgaWYgKCFpc1F1ZXJ5VXBkYXRpbmcgJiYgdGhpcy5vbmx5QUhhc2hDaGFuZ2UoY2xlYW5lZEFzKSAmJiAhbG9jYWxlQ2hhbmdlKSB7XG4gICAgICBuZXh0U3RhdGUuYXNQYXRoID0gY2xlYW5lZEFzXG4gICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoJ2hhc2hDaGFuZ2VTdGFydCcsIGFzLCByb3V0ZVByb3BzKVxuICAgICAgLy8gVE9ETzogZG8gd2UgbmVlZCB0aGUgcmVzb2x2ZWQgaHJlZiB3aGVuIG9ubHkgYSBoYXNoIGNoYW5nZT9cbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUobWV0aG9kLCB1cmwsIGFzLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHNjcm9sbDogZmFsc2UsXG4gICAgICB9KVxuICAgICAgaWYgKHNjcm9sbCkge1xuICAgICAgICB0aGlzLnNjcm9sbFRvSGFzaChjbGVhbmVkQXMpXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnNldChuZXh0U3RhdGUsIHRoaXMuY29tcG9uZW50c1tuZXh0U3RhdGUucm91dGVdLCBudWxsKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChpc0Vycm9yKGVycikgJiYgZXJyLmNhbmNlbGxlZCkge1xuICAgICAgICAgIFJvdXRlci5ldmVudHMuZW1pdCgncm91dGVDaGFuZ2VFcnJvcicsIGVyciwgY2xlYW5lZEFzLCByb3V0ZVByb3BzKVxuICAgICAgICB9XG4gICAgICAgIHRocm93IGVyclxuICAgICAgfVxuXG4gICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoJ2hhc2hDaGFuZ2VDb21wbGV0ZScsIGFzLCByb3V0ZVByb3BzKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBsZXQgcGFyc2VkID0gcGFyc2VSZWxhdGl2ZVVybCh1cmwpXG4gICAgbGV0IHsgcGF0aG5hbWUsIHF1ZXJ5IH0gPSBwYXJzZWRcblxuICAgIC8vIFRoZSBidWlsZCBtYW5pZmVzdCBuZWVkcyB0byBiZSBsb2FkZWQgYmVmb3JlIGF1dG8tc3RhdGljIGR5bmFtaWMgcGFnZXNcbiAgICAvLyBnZXQgdGhlaXIgcXVlcnkgcGFyYW1ldGVycyB0byBhbGxvdyBlbnN1cmluZyB0aGV5IGNhbiBiZSBwYXJzZWQgcHJvcGVybHlcbiAgICAvLyB3aGVuIHJld3JpdHRlbiB0b1xuICAgIGxldCBwYWdlczogc3RyaW5nW10sIHJld3JpdGVzOiBhbnlcbiAgICB0cnkge1xuICAgICAgO1twYWdlcywgeyBfX3Jld3JpdGVzOiByZXdyaXRlcyB9XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgdGhpcy5wYWdlTG9hZGVyLmdldFBhZ2VMaXN0KCksXG4gICAgICAgIGdldENsaWVudEJ1aWxkTWFuaWZlc3QoKSxcbiAgICAgICAgdGhpcy5wYWdlTG9hZGVyLmdldE1pZGRsZXdhcmUoKSxcbiAgICAgIF0pXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBJZiB3ZSBmYWlsIHRvIHJlc29sdmUgdGhlIHBhZ2UgbGlzdCBvciBjbGllbnQtYnVpbGQgbWFuaWZlc3QsIHdlIG11c3RcbiAgICAgIC8vIGRvIGEgc2VydmVyLXNpZGUgdHJhbnNpdGlvbjpcbiAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHsgdXJsOiBhcywgcm91dGVyOiB0aGlzIH0pXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBJZiBhc2tlZCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgVVJMIHdlIHNob3VsZCByZWxvYWQgdGhlIGN1cnJlbnQgcGFnZVxuICAgIC8vIChub3QgbG9jYXRpb24ucmVsb2FkKCkgYnV0IHJlbG9hZCBnZXRJbml0aWFsUHJvcHMgYW5kIG90aGVyIE5leHQuanMgc3R1ZmZzKVxuICAgIC8vIFdlIGFsc28gbmVlZCB0byBzZXQgdGhlIG1ldGhvZCA9IHJlcGxhY2VTdGF0ZSBhbHdheXNcbiAgICAvLyBhcyB0aGlzIHNob3VsZCBub3QgZ28gaW50byB0aGUgaGlzdG9yeSAoVGhhdCdzIGhvdyBicm93c2VycyB3b3JrKVxuICAgIC8vIFdlIHNob3VsZCBjb21wYXJlIHRoZSBuZXcgYXNQYXRoIHRvIHRoZSBjdXJyZW50IGFzUGF0aCwgbm90IHRoZSB1cmxcbiAgICBpZiAoIXRoaXMudXJsSXNOZXcoY2xlYW5lZEFzKSAmJiAhbG9jYWxlQ2hhbmdlKSB7XG4gICAgICBtZXRob2QgPSAncmVwbGFjZVN0YXRlJ1xuICAgIH1cblxuICAgIC8vIHdlIG5lZWQgdG8gcmVzb2x2ZSB0aGUgYXMgdmFsdWUgdXNpbmcgcmV3cml0ZXMgZm9yIGR5bmFtaWMgU1NHXG4gICAgLy8gcGFnZXMgdG8gYWxsb3cgYnVpbGRpbmcgdGhlIGRhdGEgVVJMIGNvcnJlY3RseVxuICAgIGxldCByZXNvbHZlZEFzID0gYXNcblxuICAgIC8vIHVybCBhbmQgYXMgc2hvdWxkIGFsd2F5cyBiZSBwcmVmaXhlZCB3aXRoIGJhc2VQYXRoIGJ5IHRoaXNcbiAgICAvLyBwb2ludCBieSBlaXRoZXIgbmV4dC9saW5rIG9yIHJvdXRlci5wdXNoL3JlcGxhY2Ugc28gc3RyaXAgdGhlXG4gICAgLy8gYmFzZVBhdGggZnJvbSB0aGUgcGF0aG5hbWUgdG8gbWF0Y2ggdGhlIHBhZ2VzIGRpciAxLXRvLTFcbiAgICBwYXRobmFtZSA9IHBhdGhuYW1lXG4gICAgICA/IHJlbW92ZVRyYWlsaW5nU2xhc2gocmVtb3ZlQmFzZVBhdGgocGF0aG5hbWUpKVxuICAgICAgOiBwYXRobmFtZVxuXG4gICAgbGV0IHJvdXRlID0gcmVtb3ZlVHJhaWxpbmdTbGFzaChwYXRobmFtZSlcbiAgICBjb25zdCBwYXJzZWRBc1BhdGhuYW1lID0gYXMuc3RhcnRzV2l0aCgnLycpICYmIHBhcnNlUmVsYXRpdmVVcmwoYXMpLnBhdGhuYW1lXG5cbiAgICAvLyBpZiB3ZSBkZXRlY3RlZCB0aGUgcGF0aCBhcyBhcHAgcm91dGUgZHVyaW5nIHByZWZldGNoaW5nXG4gICAgLy8gdHJpZ2dlciBoYXJkIG5hdmlnYXRpb25cbiAgICBpZiAoKHRoaXMuY29tcG9uZW50c1twYXRobmFtZV0gYXMgYW55KT8uX19hcHBSb3V0ZXIpIHtcbiAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHsgdXJsOiBhcywgcm91dGVyOiB0aGlzIH0pXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKCkgPT4ge30pXG4gICAgfVxuXG4gICAgY29uc3QgaXNNaWRkbGV3YXJlUmV3cml0ZSA9ICEhKFxuICAgICAgcGFyc2VkQXNQYXRobmFtZSAmJlxuICAgICAgcm91dGUgIT09IHBhcnNlZEFzUGF0aG5hbWUgJiZcbiAgICAgICghaXNEeW5hbWljUm91dGUocm91dGUpIHx8XG4gICAgICAgICFnZXRSb3V0ZU1hdGNoZXIoZ2V0Um91dGVSZWdleChyb3V0ZSkpKHBhcnNlZEFzUGF0aG5hbWUpKVxuICAgIClcblxuICAgIC8vIHdlIGRvbid0IGF0dGVtcHQgcmVzb2x2ZSBhc1BhdGggd2hlbiB3ZSBuZWVkIHRvIGV4ZWN1dGVcbiAgICAvLyBtaWRkbGV3YXJlIGFzIHRoZSByZXNvbHZpbmcgd2lsbCBvY2N1ciBzZXJ2ZXItc2lkZVxuICAgIGNvbnN0IGlzTWlkZGxld2FyZU1hdGNoID1cbiAgICAgICFvcHRpb25zLnNoYWxsb3cgJiZcbiAgICAgIChhd2FpdCBtYXRjaGVzTWlkZGxld2FyZSh7XG4gICAgICAgIGFzUGF0aDogYXMsXG4gICAgICAgIGxvY2FsZTogbmV4dFN0YXRlLmxvY2FsZSxcbiAgICAgICAgcm91dGVyOiB0aGlzLFxuICAgICAgfSkpXG5cbiAgICBpZiAoaXNRdWVyeVVwZGF0aW5nICYmIGlzTWlkZGxld2FyZU1hdGNoKSB7XG4gICAgICBzaG91bGRSZXNvbHZlSHJlZiA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFJlc29sdmVIcmVmICYmIHBhdGhuYW1lICE9PSAnL19lcnJvcicpIHtcbiAgICAgIDsob3B0aW9ucyBhcyBhbnkpLl9zaG91bGRSZXNvbHZlSHJlZiA9IHRydWVcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9IQVNfUkVXUklURVMgJiYgYXMuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIGNvbnN0IHJld3JpdGVzUmVzdWx0ID0gcmVzb2x2ZVJld3JpdGVzKFxuICAgICAgICAgIGFkZEJhc2VQYXRoKGFkZExvY2FsZShjbGVhbmVkQXMsIG5leHRTdGF0ZS5sb2NhbGUpLCB0cnVlKSxcbiAgICAgICAgICBwYWdlcyxcbiAgICAgICAgICByZXdyaXRlcyxcbiAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAocDogc3RyaW5nKSA9PiByZXNvbHZlRHluYW1pY1JvdXRlKHAsIHBhZ2VzKSxcbiAgICAgICAgICB0aGlzLmxvY2FsZXNcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChyZXdyaXRlc1Jlc3VsdC5leHRlcm5hbERlc3QpIHtcbiAgICAgICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7IHVybDogYXMsIHJvdXRlcjogdGhpcyB9KVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc01pZGRsZXdhcmVNYXRjaCkge1xuICAgICAgICAgIHJlc29sdmVkQXMgPSByZXdyaXRlc1Jlc3VsdC5hc1BhdGhcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXdyaXRlc1Jlc3VsdC5tYXRjaGVkUGFnZSAmJiByZXdyaXRlc1Jlc3VsdC5yZXNvbHZlZEhyZWYpIHtcbiAgICAgICAgICAvLyBpZiB0aGlzIGRpcmVjdGx5IG1hdGNoZXMgYSBwYWdlIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBocmVmIHRvXG4gICAgICAgICAgLy8gYWxsb3cgdGhlIGNvcnJlY3QgcGFnZSBjaHVuayB0byBiZSBsb2FkZWRcbiAgICAgICAgICBwYXRobmFtZSA9IHJld3JpdGVzUmVzdWx0LnJlc29sdmVkSHJlZlxuICAgICAgICAgIHBhcnNlZC5wYXRobmFtZSA9IGFkZEJhc2VQYXRoKHBhdGhuYW1lKVxuXG4gICAgICAgICAgaWYgKCFpc01pZGRsZXdhcmVNYXRjaCkge1xuICAgICAgICAgICAgdXJsID0gZm9ybWF0V2l0aFZhbGlkYXRpb24ocGFyc2VkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkLnBhdGhuYW1lID0gcmVzb2x2ZUR5bmFtaWNSb3V0ZShwYXRobmFtZSwgcGFnZXMpXG5cbiAgICAgICAgaWYgKHBhcnNlZC5wYXRobmFtZSAhPT0gcGF0aG5hbWUpIHtcbiAgICAgICAgICBwYXRobmFtZSA9IHBhcnNlZC5wYXRobmFtZVxuICAgICAgICAgIHBhcnNlZC5wYXRobmFtZSA9IGFkZEJhc2VQYXRoKHBhdGhuYW1lKVxuXG4gICAgICAgICAgaWYgKCFpc01pZGRsZXdhcmVNYXRjaCkge1xuICAgICAgICAgICAgdXJsID0gZm9ybWF0V2l0aFZhbGlkYXRpb24ocGFyc2VkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNMb2NhbFVSTChhcykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBocmVmOiBcIiR7dXJsfVwiIGFuZCBhczogXCIke2FzfVwiLCByZWNlaXZlZCByZWxhdGl2ZSBocmVmIGFuZCBleHRlcm5hbCBhc2AgK1xuICAgICAgICAgICAgYFxcblNlZSBtb3JlIGluZm86IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2ludmFsaWQtcmVsYXRpdmUtdXJsLWV4dGVybmFsLWFzYFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7IHVybDogYXMsIHJvdXRlcjogdGhpcyB9KVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcmVzb2x2ZWRBcyA9IHJlbW92ZUxvY2FsZShyZW1vdmVCYXNlUGF0aChyZXNvbHZlZEFzKSwgbmV4dFN0YXRlLmxvY2FsZSlcblxuICAgIHJvdXRlID0gcmVtb3ZlVHJhaWxpbmdTbGFzaChwYXRobmFtZSlcbiAgICBsZXQgcm91dGVNYXRjaDogUGFyYW1zIHwgZmFsc2UgPSBmYWxzZVxuXG4gICAgaWYgKGlzRHluYW1pY1JvdXRlKHJvdXRlKSkge1xuICAgICAgY29uc3QgcGFyc2VkQXMgPSBwYXJzZVJlbGF0aXZlVXJsKHJlc29sdmVkQXMpXG4gICAgICBjb25zdCBhc1BhdGhuYW1lID0gcGFyc2VkQXMucGF0aG5hbWVcblxuICAgICAgY29uc3Qgcm91dGVSZWdleCA9IGdldFJvdXRlUmVnZXgocm91dGUpXG4gICAgICByb3V0ZU1hdGNoID0gZ2V0Um91dGVNYXRjaGVyKHJvdXRlUmVnZXgpKGFzUGF0aG5hbWUpXG4gICAgICBjb25zdCBzaG91bGRJbnRlcnBvbGF0ZSA9IHJvdXRlID09PSBhc1BhdGhuYW1lXG4gICAgICBjb25zdCBpbnRlcnBvbGF0ZWRBcyA9IHNob3VsZEludGVycG9sYXRlXG4gICAgICAgID8gaW50ZXJwb2xhdGVBcyhyb3V0ZSwgYXNQYXRobmFtZSwgcXVlcnkpXG4gICAgICAgIDogKHt9IGFzIHsgcmVzdWx0OiB1bmRlZmluZWQ7IHBhcmFtczogdW5kZWZpbmVkIH0pXG5cbiAgICAgIGlmICghcm91dGVNYXRjaCB8fCAoc2hvdWxkSW50ZXJwb2xhdGUgJiYgIWludGVycG9sYXRlZEFzLnJlc3VsdCkpIHtcbiAgICAgICAgY29uc3QgbWlzc2luZ1BhcmFtcyA9IE9iamVjdC5rZXlzKHJvdXRlUmVnZXguZ3JvdXBzKS5maWx0ZXIoXG4gICAgICAgICAgKHBhcmFtKSA9PiAhcXVlcnlbcGFyYW1dICYmICFyb3V0ZVJlZ2V4Lmdyb3Vwc1twYXJhbV0ub3B0aW9uYWxcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChtaXNzaW5nUGFyYW1zLmxlbmd0aCA+IDAgJiYgIWlzTWlkZGxld2FyZU1hdGNoKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgYCR7XG4gICAgICAgICAgICAgICAgc2hvdWxkSW50ZXJwb2xhdGVcbiAgICAgICAgICAgICAgICAgID8gYEludGVycG9sYXRpbmcgaHJlZmBcbiAgICAgICAgICAgICAgICAgIDogYE1pc21hdGNoaW5nIFxcYGFzXFxgIGFuZCBcXGBocmVmXFxgYFxuICAgICAgICAgICAgICB9IGZhaWxlZCB0byBtYW51YWxseSBwcm92aWRlIGAgK1xuICAgICAgICAgICAgICAgIGB0aGUgcGFyYW1zOiAke21pc3NpbmdQYXJhbXMuam9pbihcbiAgICAgICAgICAgICAgICAgICcsICdcbiAgICAgICAgICAgICAgICApfSBpbiB0aGUgXFxgaHJlZlxcYCdzIFxcYHF1ZXJ5XFxgYFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIChzaG91bGRJbnRlcnBvbGF0ZVxuICAgICAgICAgICAgICA/IGBUaGUgcHJvdmlkZWQgXFxgaHJlZlxcYCAoJHt1cmx9KSB2YWx1ZSBpcyBtaXNzaW5nIHF1ZXJ5IHZhbHVlcyAoJHttaXNzaW5nUGFyYW1zLmpvaW4oXG4gICAgICAgICAgICAgICAgICAnLCAnXG4gICAgICAgICAgICAgICAgKX0pIHRvIGJlIGludGVycG9sYXRlZCBwcm9wZXJseS4gYFxuICAgICAgICAgICAgICA6IGBUaGUgcHJvdmlkZWQgXFxgYXNcXGAgdmFsdWUgKCR7YXNQYXRobmFtZX0pIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBcXGBocmVmXFxgIHZhbHVlICgke3JvdXRlfSkuIGApICtcbiAgICAgICAgICAgICAgYFJlYWQgbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvJHtcbiAgICAgICAgICAgICAgICBzaG91bGRJbnRlcnBvbGF0ZVxuICAgICAgICAgICAgICAgICAgPyAnaHJlZi1pbnRlcnBvbGF0aW9uLWZhaWxlZCdcbiAgICAgICAgICAgICAgICAgIDogJ2luY29tcGF0aWJsZS1ocmVmLWFzJ1xuICAgICAgICAgICAgICB9YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzaG91bGRJbnRlcnBvbGF0ZSkge1xuICAgICAgICBhcyA9IGZvcm1hdFdpdGhWYWxpZGF0aW9uKFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHBhcnNlZEFzLCB7XG4gICAgICAgICAgICBwYXRobmFtZTogaW50ZXJwb2xhdGVkQXMucmVzdWx0LFxuICAgICAgICAgICAgcXVlcnk6IG9taXQocXVlcnksIGludGVycG9sYXRlZEFzLnBhcmFtcyEpLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE1lcmdlIHBhcmFtcyBpbnRvIGBxdWVyeWAsIG92ZXJ3cml0aW5nIGFueSBzcGVjaWZpZWQgaW4gc2VhcmNoXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocXVlcnksIHJvdXRlTWF0Y2gpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpc1F1ZXJ5VXBkYXRpbmcpIHtcbiAgICAgIFJvdXRlci5ldmVudHMuZW1pdCgncm91dGVDaGFuZ2VTdGFydCcsIGFzLCByb3V0ZVByb3BzKVxuICAgIH1cblxuICAgIGNvbnN0IGlzRXJyb3JSb3V0ZSA9IHRoaXMucGF0aG5hbWUgPT09ICcvNDA0JyB8fCB0aGlzLnBhdGhuYW1lID09PSAnL19lcnJvcidcblxuICAgIHRyeSB7XG4gICAgICBsZXQgcm91dGVJbmZvID0gYXdhaXQgdGhpcy5nZXRSb3V0ZUluZm8oe1xuICAgICAgICByb3V0ZSxcbiAgICAgICAgcGF0aG5hbWUsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBhcyxcbiAgICAgICAgcmVzb2x2ZWRBcyxcbiAgICAgICAgcm91dGVQcm9wcyxcbiAgICAgICAgbG9jYWxlOiBuZXh0U3RhdGUubG9jYWxlLFxuICAgICAgICBpc1ByZXZpZXc6IG5leHRTdGF0ZS5pc1ByZXZpZXcsXG4gICAgICAgIGhhc01pZGRsZXdhcmU6IGlzTWlkZGxld2FyZU1hdGNoLFxuICAgICAgICB1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGU6IG9wdGlvbnMudW5zdGFibGVfc2tpcENsaWVudENhY2hlLFxuICAgICAgICBpc1F1ZXJ5VXBkYXRpbmc6IGlzUXVlcnlVcGRhdGluZyAmJiAhdGhpcy5pc0ZhbGxiYWNrLFxuICAgICAgICBpc01pZGRsZXdhcmVSZXdyaXRlLFxuICAgICAgfSlcblxuICAgICAgaWYgKCFpc1F1ZXJ5VXBkYXRpbmcgJiYgIW9wdGlvbnMuc2hhbGxvdykge1xuICAgICAgICBhd2FpdCB0aGlzLl9iZmwoXG4gICAgICAgICAgYXMsXG4gICAgICAgICAgJ3Jlc29sdmVkQXMnIGluIHJvdXRlSW5mbyA/IHJvdXRlSW5mby5yZXNvbHZlZEFzIDogdW5kZWZpbmVkLFxuICAgICAgICAgIG5leHRTdGF0ZS5sb2NhbGVcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoJ3JvdXRlJyBpbiByb3V0ZUluZm8gJiYgaXNNaWRkbGV3YXJlTWF0Y2gpIHtcbiAgICAgICAgcGF0aG5hbWUgPSByb3V0ZUluZm8ucm91dGUgfHwgcm91dGVcbiAgICAgICAgcm91dGUgPSBwYXRobmFtZVxuXG4gICAgICAgIGlmICghcm91dGVQcm9wcy5zaGFsbG93KSB7XG4gICAgICAgICAgcXVlcnkgPSBPYmplY3QuYXNzaWduKHt9LCByb3V0ZUluZm8ucXVlcnkgfHwge30sIHF1ZXJ5KVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xlYW5lZFBhcnNlZFBhdGhuYW1lID0gaGFzQmFzZVBhdGgocGFyc2VkLnBhdGhuYW1lKVxuICAgICAgICAgID8gcmVtb3ZlQmFzZVBhdGgocGFyc2VkLnBhdGhuYW1lKVxuICAgICAgICAgIDogcGFyc2VkLnBhdGhuYW1lXG5cbiAgICAgICAgaWYgKHJvdXRlTWF0Y2ggJiYgcGF0aG5hbWUgIT09IGNsZWFuZWRQYXJzZWRQYXRobmFtZSkge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHJvdXRlTWF0Y2gpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJvdXRlTWF0Y2ggJiYgcXVlcnlba2V5XSA9PT0gcm91dGVNYXRjaFtrZXldKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBxdWVyeVtrZXldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0R5bmFtaWNSb3V0ZShwYXRobmFtZSkpIHtcbiAgICAgICAgICBjb25zdCBwcmVmaXhlZEFzID1cbiAgICAgICAgICAgICFyb3V0ZVByb3BzLnNoYWxsb3cgJiYgcm91dGVJbmZvLnJlc29sdmVkQXNcbiAgICAgICAgICAgICAgPyByb3V0ZUluZm8ucmVzb2x2ZWRBc1xuICAgICAgICAgICAgICA6IGFkZEJhc2VQYXRoKFxuICAgICAgICAgICAgICAgICAgYWRkTG9jYWxlKFxuICAgICAgICAgICAgICAgICAgICBuZXcgVVJMKGFzLCBsb2NhdGlvbi5ocmVmKS5wYXRobmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFN0YXRlLmxvY2FsZVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICBsZXQgcmV3cml0ZUFzID0gcHJlZml4ZWRBc1xuXG4gICAgICAgICAgaWYgKGhhc0Jhc2VQYXRoKHJld3JpdGVBcykpIHtcbiAgICAgICAgICAgIHJld3JpdGVBcyA9IHJlbW92ZUJhc2VQYXRoKHJld3JpdGVBcylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuX19ORVhUX0kxOE5fU1VQUE9SVCkge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxlUmVzdWx0ID0gbm9ybWFsaXplTG9jYWxlUGF0aChyZXdyaXRlQXMsIHRoaXMubG9jYWxlcylcbiAgICAgICAgICAgIG5leHRTdGF0ZS5sb2NhbGUgPSBsb2NhbGVSZXN1bHQuZGV0ZWN0ZWRMb2NhbGUgfHwgbmV4dFN0YXRlLmxvY2FsZVxuICAgICAgICAgICAgcmV3cml0ZUFzID0gbG9jYWxlUmVzdWx0LnBhdGhuYW1lXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJvdXRlUmVnZXggPSBnZXRSb3V0ZVJlZ2V4KHBhdGhuYW1lKVxuICAgICAgICAgIGNvbnN0IGN1clJvdXRlTWF0Y2ggPSBnZXRSb3V0ZU1hdGNoZXIocm91dGVSZWdleCkoXG4gICAgICAgICAgICBuZXcgVVJMKHJld3JpdGVBcywgbG9jYXRpb24uaHJlZikucGF0aG5hbWVcbiAgICAgICAgICApXG5cbiAgICAgICAgICBpZiAoY3VyUm91dGVNYXRjaCkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihxdWVyeSwgY3VyUm91dGVNYXRjaClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIHJvdXRlSW5mbyBicmluZ3MgYSByZWRpcmVjdCB3ZSBzaW1wbHkgYXBwbHkgaXQuXG4gICAgICBpZiAoJ3R5cGUnIGluIHJvdXRlSW5mbykge1xuICAgICAgICBpZiAocm91dGVJbmZvLnR5cGUgPT09ICdyZWRpcmVjdC1pbnRlcm5hbCcpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jaGFuZ2UobWV0aG9kLCByb3V0ZUluZm8ubmV3VXJsLCByb3V0ZUluZm8ubmV3QXMsIG9wdGlvbnMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFuZGxlSGFyZE5hdmlnYXRpb24oeyB1cmw6IHJvdXRlSW5mby5kZXN0aW5hdGlvbiwgcm91dGVyOiB0aGlzIH0pXG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKCgpID0+IHt9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudDogYW55ID0gcm91dGVJbmZvLkNvbXBvbmVudFxuICAgICAgaWYgKGNvbXBvbmVudCAmJiBjb21wb25lbnQudW5zdGFibGVfc2NyaXB0TG9hZGVyKSB7XG4gICAgICAgIGNvbnN0IHNjcmlwdHMgPSBbXS5jb25jYXQoY29tcG9uZW50LnVuc3RhYmxlX3NjcmlwdExvYWRlcigpKVxuXG4gICAgICAgIHNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0OiBhbnkpID0+IHtcbiAgICAgICAgICBoYW5kbGVDbGllbnRTY3JpcHRMb2FkKHNjcmlwdC5wcm9wcylcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgLy8gaGFuZGxlIHJlZGlyZWN0IG9uIGNsaWVudC10cmFuc2l0aW9uXG4gICAgICBpZiAoKHJvdXRlSW5mby5fX05fU1NHIHx8IHJvdXRlSW5mby5fX05fU1NQKSAmJiByb3V0ZUluZm8ucHJvcHMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJvdXRlSW5mby5wcm9wcy5wYWdlUHJvcHMgJiZcbiAgICAgICAgICByb3V0ZUluZm8ucHJvcHMucGFnZVByb3BzLl9fTl9SRURJUkVDVFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBVc2UgdGhlIGRlc3RpbmF0aW9uIGZyb20gcmVkaXJlY3Qgd2l0aG91dCBhZGRpbmcgbG9jYWxlXG4gICAgICAgICAgb3B0aW9ucy5sb2NhbGUgPSBmYWxzZVxuXG4gICAgICAgICAgY29uc3QgZGVzdGluYXRpb24gPSByb3V0ZUluZm8ucHJvcHMucGFnZVByb3BzLl9fTl9SRURJUkVDVFxuXG4gICAgICAgICAgLy8gY2hlY2sgaWYgZGVzdGluYXRpb24gaXMgaW50ZXJuYWwgKHJlc29sdmVzIHRvIGEgcGFnZSkgYW5kIGF0dGVtcHRcbiAgICAgICAgICAvLyBjbGllbnQtbmF2aWdhdGlvbiBpZiBpdCBpcyBmYWxsaW5nIGJhY2sgdG8gaGFyZCBuYXZpZ2F0aW9uIGlmXG4gICAgICAgICAgLy8gaXQncyBub3RcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5zdGFydHNXaXRoKCcvJykgJiZcbiAgICAgICAgICAgIHJvdXRlSW5mby5wcm9wcy5wYWdlUHJvcHMuX19OX1JFRElSRUNUX0JBU0VfUEFUSCAhPT0gZmFsc2VcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEhyZWYgPSBwYXJzZVJlbGF0aXZlVXJsKGRlc3RpbmF0aW9uKVxuICAgICAgICAgICAgcGFyc2VkSHJlZi5wYXRobmFtZSA9IHJlc29sdmVEeW5hbWljUm91dGUoXG4gICAgICAgICAgICAgIHBhcnNlZEhyZWYucGF0aG5hbWUsXG4gICAgICAgICAgICAgIHBhZ2VzXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGNvbnN0IHsgdXJsOiBuZXdVcmwsIGFzOiBuZXdBcyB9ID0gcHJlcGFyZVVybEFzKFxuICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbixcbiAgICAgICAgICAgICAgZGVzdGluYXRpb25cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoYW5nZShtZXRob2QsIG5ld1VybCwgbmV3QXMsIG9wdGlvbnMpXG4gICAgICAgICAgfVxuICAgICAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHsgdXJsOiBkZXN0aW5hdGlvbiwgcm91dGVyOiB0aGlzIH0pXG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKCgpID0+IHt9KVxuICAgICAgICB9XG5cbiAgICAgICAgbmV4dFN0YXRlLmlzUHJldmlldyA9ICEhcm91dGVJbmZvLnByb3BzLl9fTl9QUkVWSUVXXG5cbiAgICAgICAgLy8gaGFuZGxlIFNTRyBkYXRhIDQwNFxuICAgICAgICBpZiAocm91dGVJbmZvLnByb3BzLm5vdEZvdW5kID09PSBTU0dfREFUQV9OT1RfRk9VTkQpIHtcbiAgICAgICAgICBsZXQgbm90Rm91bmRSb3V0ZVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hDb21wb25lbnQoJy80MDQnKVxuICAgICAgICAgICAgbm90Rm91bmRSb3V0ZSA9ICcvNDA0J1xuICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIG5vdEZvdW5kUm91dGUgPSAnL19lcnJvcidcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByb3V0ZUluZm8gPSBhd2FpdCB0aGlzLmdldFJvdXRlSW5mbyh7XG4gICAgICAgICAgICByb3V0ZTogbm90Rm91bmRSb3V0ZSxcbiAgICAgICAgICAgIHBhdGhuYW1lOiBub3RGb3VuZFJvdXRlLFxuICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICBhcyxcbiAgICAgICAgICAgIHJlc29sdmVkQXMsXG4gICAgICAgICAgICByb3V0ZVByb3BzOiB7IHNoYWxsb3c6IGZhbHNlIH0sXG4gICAgICAgICAgICBsb2NhbGU6IG5leHRTdGF0ZS5sb2NhbGUsXG4gICAgICAgICAgICBpc1ByZXZpZXc6IG5leHRTdGF0ZS5pc1ByZXZpZXcsXG4gICAgICAgICAgICBpc05vdEZvdW5kOiB0cnVlLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAoJ3R5cGUnIGluIHJvdXRlSW5mbykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIG1pZGRsZXdhcmUgZWZmZWN0IG9uIC80MDRgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGlzUXVlcnlVcGRhdGluZyAmJlxuICAgICAgICB0aGlzLnBhdGhuYW1lID09PSAnL19lcnJvcicgJiZcbiAgICAgICAgc2VsZi5fX05FWFRfREFUQV9fLnByb3BzPy5wYWdlUHJvcHM/LnN0YXR1c0NvZGUgPT09IDUwMCAmJlxuICAgICAgICByb3V0ZUluZm8ucHJvcHM/LnBhZ2VQcm9wc1xuICAgICAgKSB7XG4gICAgICAgIC8vIGVuc3VyZSBzdGF0dXNDb2RlIGlzIHN0aWxsIGNvcnJlY3QgZm9yIHN0YXRpYyA1MDAgcGFnZVxuICAgICAgICAvLyB3aGVuIHVwZGF0aW5nIHF1ZXJ5IGluZm9ybWF0aW9uXG4gICAgICAgIHJvdXRlSW5mby5wcm9wcy5wYWdlUHJvcHMuc3RhdHVzQ29kZSA9IDUwMFxuICAgICAgfVxuXG4gICAgICAvLyBzaGFsbG93IHJvdXRpbmcgaXMgb25seSBhbGxvd2VkIGZvciBzYW1lIHBhZ2UgVVJMIGNoYW5nZXMuXG4gICAgICBjb25zdCBpc1ZhbGlkU2hhbGxvd1JvdXRlID1cbiAgICAgICAgb3B0aW9ucy5zaGFsbG93ICYmIG5leHRTdGF0ZS5yb3V0ZSA9PT0gKHJvdXRlSW5mby5yb3V0ZSA/PyByb3V0ZSlcblxuICAgICAgY29uc3Qgc2hvdWxkU2Nyb2xsID1cbiAgICAgICAgb3B0aW9ucy5zY3JvbGwgPz8gKCFpc1F1ZXJ5VXBkYXRpbmcgJiYgIWlzVmFsaWRTaGFsbG93Um91dGUpXG4gICAgICBjb25zdCByZXNldFNjcm9sbCA9IHNob3VsZFNjcm9sbCA/IHsgeDogMCwgeTogMCB9IDogbnVsbFxuICAgICAgY29uc3QgdXBjb21pbmdTY3JvbGxTdGF0ZSA9IGZvcmNlZFNjcm9sbCA/PyByZXNldFNjcm9sbFxuXG4gICAgICAvLyB0aGUgbmV3IHN0YXRlIHRoYXQgdGhlIHJvdXRlciBnb25uYSBzZXRcbiAgICAgIGNvbnN0IHVwY29taW5nUm91dGVyU3RhdGUgPSB7XG4gICAgICAgIC4uLm5leHRTdGF0ZSxcbiAgICAgICAgcm91dGUsXG4gICAgICAgIHBhdGhuYW1lLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgYXNQYXRoOiBjbGVhbmVkQXMsXG4gICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgfVxuXG4gICAgICAvLyBXaGVuIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkIGlzIHRoZSA0MDQgcGFnZSwgd2Ugc2hvdWxkIG9ubHkgdXBkYXRlIHRoZVxuICAgICAgLy8gcXVlcnkgcGFyYW1ldGVycy4gUm91dGUgY2hhbmdlcyBoZXJlIG1pZ2h0IGFkZCB0aGUgYmFzZVBhdGggd2hlbiBpdFxuICAgICAgLy8gd2Fzbid0IG9yaWdpbmFsbHkgcHJlc2VudC4gVGhpcyBpcyBhbHNvIHdoeSB0aGlzIGJsb2NrIGlzIGJlZm9yZSB0aGVcbiAgICAgIC8vIGJlbG93IGBjaGFuZ2VTdGF0ZWAgY2FsbCB3aGljaCB1cGRhdGVzIHRoZSBicm93c2VyJ3MgaGlzdG9yeSAoY2hhbmdpbmdcbiAgICAgIC8vIHRoZSBVUkwpLlxuICAgICAgaWYgKGlzUXVlcnlVcGRhdGluZyAmJiBpc0Vycm9yUm91dGUpIHtcbiAgICAgICAgcm91dGVJbmZvID0gYXdhaXQgdGhpcy5nZXRSb3V0ZUluZm8oe1xuICAgICAgICAgIHJvdXRlOiB0aGlzLnBhdGhuYW1lLFxuICAgICAgICAgIHBhdGhuYW1lOiB0aGlzLnBhdGhuYW1lLFxuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIGFzLFxuICAgICAgICAgIHJlc29sdmVkQXMsXG4gICAgICAgICAgcm91dGVQcm9wczogeyBzaGFsbG93OiBmYWxzZSB9LFxuICAgICAgICAgIGxvY2FsZTogbmV4dFN0YXRlLmxvY2FsZSxcbiAgICAgICAgICBpc1ByZXZpZXc6IG5leHRTdGF0ZS5pc1ByZXZpZXcsXG4gICAgICAgICAgaXNRdWVyeVVwZGF0aW5nOiBpc1F1ZXJ5VXBkYXRpbmcgJiYgIXRoaXMuaXNGYWxsYmFjayxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoJ3R5cGUnIGluIHJvdXRlSW5mbykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBtaWRkbGV3YXJlIGVmZmVjdCBvbiAke3RoaXMucGF0aG5hbWV9YClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnBhdGhuYW1lID09PSAnL19lcnJvcicgJiZcbiAgICAgICAgICBzZWxmLl9fTkVYVF9EQVRBX18ucHJvcHM/LnBhZ2VQcm9wcz8uc3RhdHVzQ29kZSA9PT0gNTAwICYmXG4gICAgICAgICAgcm91dGVJbmZvLnByb3BzPy5wYWdlUHJvcHNcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gZW5zdXJlIHN0YXR1c0NvZGUgaXMgc3RpbGwgY29ycmVjdCBmb3Igc3RhdGljIDUwMCBwYWdlXG4gICAgICAgICAgLy8gd2hlbiB1cGRhdGluZyBxdWVyeSBpbmZvcm1hdGlvblxuICAgICAgICAgIHJvdXRlSW5mby5wcm9wcy5wYWdlUHJvcHMuc3RhdHVzQ29kZSA9IDUwMFxuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNldCh1cGNvbWluZ1JvdXRlclN0YXRlLCByb3V0ZUluZm8sIHVwY29taW5nU2Nyb2xsU3RhdGUpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChpc0Vycm9yKGVycikgJiYgZXJyLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KCdyb3V0ZUNoYW5nZUVycm9yJywgZXJyLCBjbGVhbmVkQXMsIHJvdXRlUHJvcHMpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVyclxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cblxuICAgICAgUm91dGVyLmV2ZW50cy5lbWl0KCdiZWZvcmVIaXN0b3J5Q2hhbmdlJywgYXMsIHJvdXRlUHJvcHMpXG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKG1ldGhvZCwgdXJsLCBhcywgb3B0aW9ucylcblxuICAgICAgLy8gZm9yIHF1ZXJ5IHVwZGF0ZXMgd2UgY2FuIHNraXAgaXQgaWYgdGhlIHN0YXRlIGlzIHVuY2hhbmdlZCBhbmQgd2UgZG9uJ3RcbiAgICAgIC8vIG5lZWQgdG8gc2Nyb2xsXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL25leHQuanMvaXNzdWVzLzM3MTM5XG4gICAgICBjb25zdCBjYW5Ta2lwVXBkYXRpbmcgPVxuICAgICAgICBpc1F1ZXJ5VXBkYXRpbmcgJiZcbiAgICAgICAgIXVwY29taW5nU2Nyb2xsU3RhdGUgJiZcbiAgICAgICAgIXJlYWR5U3RhdGVDaGFuZ2UgJiZcbiAgICAgICAgIWxvY2FsZUNoYW5nZSAmJlxuICAgICAgICBjb21wYXJlUm91dGVyU3RhdGVzKHVwY29taW5nUm91dGVyU3RhdGUsIHRoaXMuc3RhdGUpXG5cbiAgICAgIGlmICghY2FuU2tpcFVwZGF0aW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zZXQodXBjb21pbmdSb3V0ZXJTdGF0ZSwgcm91dGVJbmZvLCB1cGNvbWluZ1Njcm9sbFN0YXRlKVxuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICBpZiAoZS5jYW5jZWxsZWQpIHJvdXRlSW5mby5lcnJvciA9IHJvdXRlSW5mby5lcnJvciB8fCBlXG4gICAgICAgICAgZWxzZSB0aHJvdyBlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocm91dGVJbmZvLmVycm9yKSB7XG4gICAgICAgICAgaWYgKCFpc1F1ZXJ5VXBkYXRpbmcpIHtcbiAgICAgICAgICAgIFJvdXRlci5ldmVudHMuZW1pdChcbiAgICAgICAgICAgICAgJ3JvdXRlQ2hhbmdlRXJyb3InLFxuICAgICAgICAgICAgICByb3V0ZUluZm8uZXJyb3IsXG4gICAgICAgICAgICAgIGNsZWFuZWRBcyxcbiAgICAgICAgICAgICAgcm91dGVQcm9wc1xuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRocm93IHJvdXRlSW5mby5lcnJvclxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcbiAgICAgICAgICBpZiAobmV4dFN0YXRlLmxvY2FsZSkge1xuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmxhbmcgPSBuZXh0U3RhdGUubG9jYWxlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1F1ZXJ5VXBkYXRpbmcpIHtcbiAgICAgICAgICBSb3V0ZXIuZXZlbnRzLmVtaXQoJ3JvdXRlQ2hhbmdlQ29tcGxldGUnLCBhcywgcm91dGVQcm9wcylcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEEgaGFzaCBtYXJrICMgaXMgdGhlIG9wdGlvbmFsIGxhc3QgcGFydCBvZiBhIFVSTFxuICAgICAgICBjb25zdCBoYXNoUmVnZXggPSAvIy4rJC9cbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbCAmJiBoYXNoUmVnZXgudGVzdChhcykpIHtcbiAgICAgICAgICB0aGlzLnNjcm9sbFRvSGFzaChhcylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGlzRXJyb3IoZXJyKSAmJiBlcnIuY2FuY2VsbGVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU3RhdGUoXG4gICAgbWV0aG9kOiBIaXN0b3J5TWV0aG9kLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGFzOiBzdHJpbmcsXG4gICAgb3B0aW9uczogVHJhbnNpdGlvbk9wdGlvbnMgPSB7fVxuICApOiB2b2lkIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuaGlzdG9yeSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgV2FybmluZzogd2luZG93Lmhpc3RvcnkgaXMgbm90IGF2YWlsYWJsZS5gKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuaGlzdG9yeVttZXRob2RdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBXYXJuaW5nOiB3aW5kb3cuaGlzdG9yeS4ke21ldGhvZH0gaXMgbm90IGF2YWlsYWJsZWApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtZXRob2QgIT09ICdwdXNoU3RhdGUnIHx8IGdldFVSTCgpICE9PSBhcykge1xuICAgICAgdGhpcy5fc2hhbGxvdyA9IG9wdGlvbnMuc2hhbGxvd1xuICAgICAgd2luZG93Lmhpc3RvcnlbbWV0aG9kXShcbiAgICAgICAge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBhcyxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIF9fTjogdHJ1ZSxcbiAgICAgICAgICBrZXk6ICh0aGlzLl9rZXkgPSBtZXRob2QgIT09ICdwdXNoU3RhdGUnID8gdGhpcy5fa2V5IDogY3JlYXRlS2V5KCkpLFxuICAgICAgICB9IGFzIEhpc3RvcnlTdGF0ZSxcbiAgICAgICAgLy8gTW9zdCBicm93c2VycyBjdXJyZW50bHkgaWdub3JlcyB0aGlzIHBhcmFtZXRlciwgYWx0aG91Z2ggdGhleSBtYXkgdXNlIGl0IGluIHRoZSBmdXR1cmUuXG4gICAgICAgIC8vIFBhc3NpbmcgdGhlIGVtcHR5IHN0cmluZyBoZXJlIHNob3VsZCBiZSBzYWZlIGFnYWluc3QgZnV0dXJlIGNoYW5nZXMgdG8gdGhlIG1ldGhvZC5cbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0hpc3RvcnkvcmVwbGFjZVN0YXRlXG4gICAgICAgICcnLFxuICAgICAgICBhc1xuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGhhbmRsZVJvdXRlSW5mb0Vycm9yKFxuICAgIGVycjogRXJyb3IgJiB7IGNvZGU/OiBhbnk7IGNhbmNlbGxlZD86IGJvb2xlYW4gfSxcbiAgICBwYXRobmFtZTogc3RyaW5nLFxuICAgIHF1ZXJ5OiBQYXJzZWRVcmxRdWVyeSxcbiAgICBhczogc3RyaW5nLFxuICAgIHJvdXRlUHJvcHM6IFJvdXRlUHJvcGVydGllcyxcbiAgICBsb2FkRXJyb3JGYWlsPzogYm9vbGVhblxuICApOiBQcm9taXNlPENvbXBsZXRlUHJpdmF0ZVJvdXRlSW5mbz4ge1xuICAgIGlmIChlcnIuY2FuY2VsbGVkKSB7XG4gICAgICAvLyBidWJibGUgdXAgY2FuY2VsbGF0aW9uIGVycm9yc1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgaWYgKGlzQXNzZXRFcnJvcihlcnIpIHx8IGxvYWRFcnJvckZhaWwpIHtcbiAgICAgIFJvdXRlci5ldmVudHMuZW1pdCgncm91dGVDaGFuZ2VFcnJvcicsIGVyciwgYXMsIHJvdXRlUHJvcHMpXG5cbiAgICAgIC8vIElmIHdlIGNhbid0IGxvYWQgdGhlIHBhZ2UgaXQgY291bGQgYmUgb25lIG9mIGZvbGxvd2luZyByZWFzb25zXG4gICAgICAvLyAgMS4gUGFnZSBkb2Vzbid0IGV4aXN0c1xuICAgICAgLy8gIDIuIFBhZ2UgZG9lcyBleGlzdCBpbiBhIGRpZmZlcmVudCB6b25lXG4gICAgICAvLyAgMy4gSW50ZXJuYWwgZXJyb3Igd2hpbGUgbG9hZGluZyB0aGUgcGFnZVxuXG4gICAgICAvLyBTbywgZG9pbmcgYSBoYXJkIHJlbG9hZCBpcyB0aGUgcHJvcGVyIHdheSB0byBkZWFsIHdpdGggdGhpcy5cbiAgICAgIGhhbmRsZUhhcmROYXZpZ2F0aW9uKHtcbiAgICAgICAgdXJsOiBhcyxcbiAgICAgICAgcm91dGVyOiB0aGlzLFxuICAgICAgfSlcblxuICAgICAgLy8gQ2hhbmdpbmcgdGhlIFVSTCBkb2Vzbid0IGJsb2NrIGV4ZWN1dGluZyB0aGUgY3VycmVudCBjb2RlIHBhdGguXG4gICAgICAvLyBTbyBsZXQncyB0aHJvdyBhIGNhbmNlbGxhdGlvbiBlcnJvciBzdG9wIHRoZSByb3V0aW5nIGxvZ2ljLlxuICAgICAgdGhyb3cgYnVpbGRDYW5jZWxsYXRpb25FcnJvcigpXG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihlcnIpXG5cbiAgICB0cnkge1xuICAgICAgbGV0IHByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkXG4gICAgICBjb25zdCB7IHBhZ2U6IENvbXBvbmVudCwgc3R5bGVTaGVldHMgfSA9XG4gICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hDb21wb25lbnQoJy9fZXJyb3InKVxuXG4gICAgICBjb25zdCByb3V0ZUluZm86IENvbXBsZXRlUHJpdmF0ZVJvdXRlSW5mbyA9IHtcbiAgICAgICAgcHJvcHMsXG4gICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgc3R5bGVTaGVldHMsXG4gICAgICAgIGVycixcbiAgICAgICAgZXJyb3I6IGVycixcbiAgICAgIH1cblxuICAgICAgaWYgKCFyb3V0ZUluZm8ucHJvcHMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByb3V0ZUluZm8ucHJvcHMgPSBhd2FpdCB0aGlzLmdldEluaXRpYWxQcm9wcyhDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGVycixcbiAgICAgICAgICAgIHBhdGhuYW1lLFxuICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgfSBhcyBhbnkpXG4gICAgICAgIH0gY2F0Y2ggKGdpcEVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGVycm9yIHBhZ2UgYGdldEluaXRpYWxQcm9wc2A6ICcsIGdpcEVycilcbiAgICAgICAgICByb3V0ZUluZm8ucHJvcHMgPSB7fVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByb3V0ZUluZm9cbiAgICB9IGNhdGNoIChyb3V0ZUluZm9FcnIpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZVJvdXRlSW5mb0Vycm9yKFxuICAgICAgICBpc0Vycm9yKHJvdXRlSW5mb0VycikgPyByb3V0ZUluZm9FcnIgOiBuZXcgRXJyb3Iocm91dGVJbmZvRXJyICsgJycpLFxuICAgICAgICBwYXRobmFtZSxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGFzLFxuICAgICAgICByb3V0ZVByb3BzLFxuICAgICAgICB0cnVlXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0Um91dGVJbmZvKHtcbiAgICByb3V0ZTogcmVxdWVzdGVkUm91dGUsXG4gICAgcGF0aG5hbWUsXG4gICAgcXVlcnksXG4gICAgYXMsXG4gICAgcmVzb2x2ZWRBcyxcbiAgICByb3V0ZVByb3BzLFxuICAgIGxvY2FsZSxcbiAgICBoYXNNaWRkbGV3YXJlLFxuICAgIGlzUHJldmlldyxcbiAgICB1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGUsXG4gICAgaXNRdWVyeVVwZGF0aW5nLFxuICAgIGlzTWlkZGxld2FyZVJld3JpdGUsXG4gICAgaXNOb3RGb3VuZCxcbiAgfToge1xuICAgIHJvdXRlOiBzdHJpbmdcbiAgICBwYXRobmFtZTogc3RyaW5nXG4gICAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5XG4gICAgYXM6IHN0cmluZ1xuICAgIHJlc29sdmVkQXM6IHN0cmluZ1xuICAgIGhhc01pZGRsZXdhcmU/OiBib29sZWFuXG4gICAgcm91dGVQcm9wczogUm91dGVQcm9wZXJ0aWVzXG4gICAgbG9jYWxlOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgICBpc1ByZXZpZXc6IGJvb2xlYW5cbiAgICB1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGU/OiBib29sZWFuXG4gICAgaXNRdWVyeVVwZGF0aW5nPzogYm9vbGVhblxuICAgIGlzTWlkZGxld2FyZVJld3JpdGU/OiBib29sZWFuXG4gICAgaXNOb3RGb3VuZD86IGJvb2xlYW5cbiAgfSkge1xuICAgIC8qKlxuICAgICAqIFRoaXMgYHJvdXRlYCBiaW5kaW5nIGNhbiBjaGFuZ2UgaWYgdGhlcmUncyBhIHJld3JpdGVcbiAgICAgKiBzbyB3ZSBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCByZXF1ZXN0ZWQgcm91dGVcbiAgICAgKiBzbyB3ZSBjYW4gc3RvcmUgdGhlIGNhY2hlIGZvciBpdCBhbmQgYXZvaWQgcmUtcmVxdWVzdGluZyBldmVyeSB0aW1lXG4gICAgICogZm9yIHNoYWxsb3cgcm91dGluZyBwdXJwb3Nlcy5cbiAgICAgKi9cbiAgICBsZXQgcm91dGUgPSByZXF1ZXN0ZWRSb3V0ZVxuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBleGlzdGluZ0luZm86IFByaXZhdGVSb3V0ZUluZm8gfCB1bmRlZmluZWQgPSB0aGlzLmNvbXBvbmVudHNbcm91dGVdXG4gICAgICBpZiAocm91dGVQcm9wcy5zaGFsbG93ICYmIGV4aXN0aW5nSW5mbyAmJiB0aGlzLnJvdXRlID09PSByb3V0ZSkge1xuICAgICAgICByZXR1cm4gZXhpc3RpbmdJbmZvXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZUNhbmNlbGxlZCA9IGdldENhbmNlbGxlZEhhbmRsZXIoeyByb3V0ZSwgcm91dGVyOiB0aGlzIH0pXG5cbiAgICAgIGlmIChoYXNNaWRkbGV3YXJlKSB7XG4gICAgICAgIGV4aXN0aW5nSW5mbyA9IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICBsZXQgY2FjaGVkUm91dGVJbmZvID1cbiAgICAgICAgZXhpc3RpbmdJbmZvICYmXG4gICAgICAgICEoJ2luaXRpYWwnIGluIGV4aXN0aW5nSW5mbykgJiZcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdkZXZlbG9wbWVudCdcbiAgICAgICAgICA/IGV4aXN0aW5nSW5mb1xuICAgICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIGNvbnN0IGlzQmFja2dyb3VuZCA9IGlzUXVlcnlVcGRhdGluZ1xuICAgICAgY29uc3QgZmV0Y2hOZXh0RGF0YVBhcmFtczogRmV0Y2hOZXh0RGF0YVBhcmFtcyA9IHtcbiAgICAgICAgZGF0YUhyZWY6IHRoaXMucGFnZUxvYWRlci5nZXREYXRhSHJlZih7XG4gICAgICAgICAgaHJlZjogZm9ybWF0V2l0aFZhbGlkYXRpb24oeyBwYXRobmFtZSwgcXVlcnkgfSksXG4gICAgICAgICAgc2tpcEludGVycG9sYXRpb246IHRydWUsXG4gICAgICAgICAgYXNQYXRoOiBpc05vdEZvdW5kID8gJy80MDQnIDogcmVzb2x2ZWRBcyxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgIH0pLFxuICAgICAgICBoYXNNaWRkbGV3YXJlOiB0cnVlLFxuICAgICAgICBpc1NlcnZlclJlbmRlcjogdGhpcy5pc1NzcixcbiAgICAgICAgcGFyc2VKU09OOiB0cnVlLFxuICAgICAgICBpbmZsaWdodENhY2hlOiBpc0JhY2tncm91bmQgPyB0aGlzLnNiYyA6IHRoaXMuc2RjLFxuICAgICAgICBwZXJzaXN0Q2FjaGU6ICFpc1ByZXZpZXcsXG4gICAgICAgIGlzUHJlZmV0Y2g6IGZhbHNlLFxuICAgICAgICB1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGUsXG4gICAgICAgIGlzQmFja2dyb3VuZCxcbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGE6XG4gICAgICAgIHwgV2l0aE1pZGRsZXdhcmVFZmZlY3RzT3V0cHV0XG4gICAgICAgIHwgKFBpY2s8V2l0aE1pZGRsZXdhcmVFZmZlY3RzT3V0cHV0LCAnanNvbic+ICZcbiAgICAgICAgICAgIE9taXQ8UGFydGlhbDxXaXRoTWlkZGxld2FyZUVmZmVjdHNPdXRwdXQ+LCAnanNvbic+KVxuICAgICAgICB8IG51bGwgPVxuICAgICAgICBpc1F1ZXJ5VXBkYXRpbmcgJiYgIWlzTWlkZGxld2FyZVJld3JpdGVcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IGF3YWl0IHdpdGhNaWRkbGV3YXJlRWZmZWN0cyh7XG4gICAgICAgICAgICAgIGZldGNoRGF0YTogKCkgPT4gZmV0Y2hOZXh0RGF0YShmZXRjaE5leHREYXRhUGFyYW1zKSxcbiAgICAgICAgICAgICAgYXNQYXRoOiBpc05vdEZvdW5kID8gJy80MDQnIDogcmVzb2x2ZWRBcyxcbiAgICAgICAgICAgICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgICAgICAgICAgIHJvdXRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGFyZCBlcnJvciBkdXJpbmcgcXVlcnkgdXBkYXRpbmdcbiAgICAgICAgICAgICAgLy8gYXMgaXQncyB1bi1uZWNlc3NhcnkgYW5kIGRvZXNuJ3QgbmVlZCB0byBiZSBmYXRhbFxuICAgICAgICAgICAgICAvLyB1bmxlc3MgaXQgaXMgYSBmYWxsYmFjayByb3V0ZSBhbmQgdGhlIHByb3BzIGNhbid0XG4gICAgICAgICAgICAgIC8vIGJlIGxvYWRlZFxuICAgICAgICAgICAgICBpZiAoaXNRdWVyeVVwZGF0aW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgICAgIH0pXG5cbiAgICAgIC8vIHdoZW4gcmVuZGVyaW5nIGVycm9yIHJvdXRlcyB3ZSBkb24ndCBhcHBseSBtaWRkbGV3YXJlXG4gICAgICAvLyBlZmZlY3RzXG4gICAgICBpZiAoZGF0YSAmJiAocGF0aG5hbWUgPT09ICcvX2Vycm9yJyB8fCBwYXRobmFtZSA9PT0gJy80MDQnKSkge1xuICAgICAgICBkYXRhLmVmZmVjdCA9IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICBpZiAoaXNRdWVyeVVwZGF0aW5nKSB7XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSB7IGpzb246IHNlbGYuX19ORVhUX0RBVEFfXy5wcm9wcyB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGF0YS5qc29uID0gc2VsZi5fX05FWFRfREFUQV9fLnByb3BzXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaGFuZGxlQ2FuY2VsbGVkKClcblxuICAgICAgaWYgKFxuICAgICAgICBkYXRhPy5lZmZlY3Q/LnR5cGUgPT09ICdyZWRpcmVjdC1pbnRlcm5hbCcgfHxcbiAgICAgICAgZGF0YT8uZWZmZWN0Py50eXBlID09PSAncmVkaXJlY3QtZXh0ZXJuYWwnXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGRhdGEuZWZmZWN0XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhPy5lZmZlY3Q/LnR5cGUgPT09ICdyZXdyaXRlJykge1xuICAgICAgICBjb25zdCByZXNvbHZlZFJvdXRlID0gcmVtb3ZlVHJhaWxpbmdTbGFzaChkYXRhLmVmZmVjdC5yZXNvbHZlZEhyZWYpXG4gICAgICAgIGNvbnN0IHBhZ2VzID0gYXdhaXQgdGhpcy5wYWdlTG9hZGVyLmdldFBhZ2VMaXN0KClcblxuICAgICAgICAvLyBkdXJpbmcgcXVlcnkgdXBkYXRpbmcgdGhlIHBhZ2UgbXVzdCBtYXRjaCBhbHRob3VnaCBkdXJpbmdcbiAgICAgICAgLy8gY2xpZW50LXRyYW5zaXRpb24gYSByZWRpcmVjdCB0aGF0IGRvZXNuJ3QgbWF0Y2ggYSBwYWdlXG4gICAgICAgIC8vIGNhbiBiZSByZXR1cm5lZCBhbmQgdGhpcyBzaG91bGQgdHJpZ2dlciBhIGhhcmQgbmF2aWdhdGlvblxuICAgICAgICAvLyB3aGljaCBpcyB2YWxpZCBmb3IgaW5jcmVtZW50YWwgbWlncmF0aW9uXG4gICAgICAgIGlmICghaXNRdWVyeVVwZGF0aW5nIHx8IHBhZ2VzLmluY2x1ZGVzKHJlc29sdmVkUm91dGUpKSB7XG4gICAgICAgICAgcm91dGUgPSByZXNvbHZlZFJvdXRlXG4gICAgICAgICAgcGF0aG5hbWUgPSBkYXRhLmVmZmVjdC5yZXNvbHZlZEhyZWZcbiAgICAgICAgICBxdWVyeSA9IHsgLi4ucXVlcnksIC4uLmRhdGEuZWZmZWN0LnBhcnNlZEFzLnF1ZXJ5IH1cbiAgICAgICAgICByZXNvbHZlZEFzID0gcmVtb3ZlQmFzZVBhdGgoXG4gICAgICAgICAgICBub3JtYWxpemVMb2NhbGVQYXRoKGRhdGEuZWZmZWN0LnBhcnNlZEFzLnBhdGhuYW1lLCB0aGlzLmxvY2FsZXMpXG4gICAgICAgICAgICAgIC5wYXRobmFtZVxuICAgICAgICAgIClcblxuICAgICAgICAgIC8vIENoZWNrIGFnYWluIHRoZSBjYWNoZSB3aXRoIHRoZSBuZXcgZGVzdGluYXRpb24uXG4gICAgICAgICAgZXhpc3RpbmdJbmZvID0gdGhpcy5jb21wb25lbnRzW3JvdXRlXVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHJvdXRlUHJvcHMuc2hhbGxvdyAmJlxuICAgICAgICAgICAgZXhpc3RpbmdJbmZvICYmXG4gICAgICAgICAgICB0aGlzLnJvdXRlID09PSByb3V0ZSAmJlxuICAgICAgICAgICAgIWhhc01pZGRsZXdhcmVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBtYXRjaCB3aXRoIHRoZSBjdXJyZW50IHJvdXRlIGR1ZSB0byByZXdyaXRlLFxuICAgICAgICAgICAgLy8gd2UgY2FuIGNvcHkgdGhlIGV4aXN0aW5nIGluZm9ybWF0aW9uIHRvIHRoZSByZXdyaXR0ZW4gb25lLlxuICAgICAgICAgICAgLy8gVGhlbiwgd2UgcmV0dXJuIHRoZSBpbmZvcm1hdGlvbiBhbG9uZyB3aXRoIHRoZSBtYXRjaGVkIHJvdXRlLlxuICAgICAgICAgICAgcmV0dXJuIHsgLi4uZXhpc3RpbmdJbmZvLCByb3V0ZSB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FQSVJvdXRlKHJvdXRlKSkge1xuICAgICAgICBoYW5kbGVIYXJkTmF2aWdhdGlvbih7IHVybDogYXMsIHJvdXRlcjogdGhpcyB9KVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8bmV2ZXI+KCgpID0+IHt9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCByb3V0ZUluZm8gPVxuICAgICAgICBjYWNoZWRSb3V0ZUluZm8gfHxcbiAgICAgICAgKGF3YWl0IHRoaXMuZmV0Y2hDb21wb25lbnQocm91dGUpLnRoZW48Q29tcGxldGVQcml2YXRlUm91dGVJbmZvPihcbiAgICAgICAgICAocmVzKSA9PiAoe1xuICAgICAgICAgICAgQ29tcG9uZW50OiByZXMucGFnZSxcbiAgICAgICAgICAgIHN0eWxlU2hlZXRzOiByZXMuc3R5bGVTaGVldHMsXG4gICAgICAgICAgICBfX05fU1NHOiByZXMubW9kLl9fTl9TU0csXG4gICAgICAgICAgICBfX05fU1NQOiByZXMubW9kLl9fTl9TU1AsXG4gICAgICAgICAgfSlcbiAgICAgICAgKSlcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgY29uc3QgeyBpc1ZhbGlkRWxlbWVudFR5cGUgfSA9XG4gICAgICAgICAgcmVxdWlyZSgnbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LWlzJykgYXMgdHlwZW9mIGltcG9ydCgnbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0LWlzJylcbiAgICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudFR5cGUocm91dGVJbmZvLkNvbXBvbmVudCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVGhlIGRlZmF1bHQgZXhwb3J0IGlzIG5vdCBhIFJlYWN0IENvbXBvbmVudCBpbiBwYWdlOiBcIiR7cGF0aG5hbWV9XCJgXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB3YXNCYWlsZWRQcmVmZXRjaCA9IGRhdGE/LnJlc3BvbnNlPy5oZWFkZXJzLmdldCgneC1taWRkbGV3YXJlLXNraXAnKVxuXG4gICAgICBjb25zdCBzaG91bGRGZXRjaERhdGEgPSByb3V0ZUluZm8uX19OX1NTRyB8fCByb3V0ZUluZm8uX19OX1NTUFxuXG4gICAgICAvLyBGb3Igbm9uLVNTRyBwcmVmZXRjaGVzIHRoYXQgYmFpbGVkIGJlZm9yZSBzZW5kaW5nIGRhdGFcbiAgICAgIC8vIHdlIGNsZWFyIHRoZSBjYWNoZSB0byBmZXRjaCBmdWxsIHJlc3BvbnNlXG4gICAgICBpZiAod2FzQmFpbGVkUHJlZmV0Y2ggJiYgZGF0YT8uZGF0YUhyZWYpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2RjW2RhdGEuZGF0YUhyZWZdXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgcHJvcHMsIGNhY2hlS2V5IH0gPSBhd2FpdCB0aGlzLl9nZXREYXRhKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKHNob3VsZEZldGNoRGF0YSkge1xuICAgICAgICAgIGlmIChkYXRhPy5qc29uICYmICF3YXNCYWlsZWRQcmVmZXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgY2FjaGVLZXk6IGRhdGEuY2FjaGVLZXksIHByb3BzOiBkYXRhLmpzb24gfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGRhdGFIcmVmID0gZGF0YT8uZGF0YUhyZWZcbiAgICAgICAgICAgID8gZGF0YS5kYXRhSHJlZlxuICAgICAgICAgICAgOiB0aGlzLnBhZ2VMb2FkZXIuZ2V0RGF0YUhyZWYoe1xuICAgICAgICAgICAgICAgIGhyZWY6IGZvcm1hdFdpdGhWYWxpZGF0aW9uKHsgcGF0aG5hbWUsIHF1ZXJ5IH0pLFxuICAgICAgICAgICAgICAgIGFzUGF0aDogcmVzb2x2ZWRBcyxcbiAgICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICBjb25zdCBmZXRjaGVkID0gYXdhaXQgZmV0Y2hOZXh0RGF0YSh7XG4gICAgICAgICAgICBkYXRhSHJlZixcbiAgICAgICAgICAgIGlzU2VydmVyUmVuZGVyOiB0aGlzLmlzU3NyLFxuICAgICAgICAgICAgcGFyc2VKU09OOiB0cnVlLFxuICAgICAgICAgICAgaW5mbGlnaHRDYWNoZTogd2FzQmFpbGVkUHJlZmV0Y2ggPyB7fSA6IHRoaXMuc2RjLFxuICAgICAgICAgICAgcGVyc2lzdENhY2hlOiAhaXNQcmV2aWV3LFxuICAgICAgICAgICAgaXNQcmVmZXRjaDogZmFsc2UsXG4gICAgICAgICAgICB1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGUsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjYWNoZUtleTogZmV0Y2hlZC5jYWNoZUtleSxcbiAgICAgICAgICAgIHByb3BzOiBmZXRjaGVkLmpzb24gfHwge30sXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICBwcm9wczogYXdhaXQgdGhpcy5nZXRJbml0aWFsUHJvcHMoXG4gICAgICAgICAgICByb3V0ZUluZm8uQ29tcG9uZW50LFxuICAgICAgICAgICAgLy8gd2UgcHJvdmlkZSBBcHBUcmVlIGxhdGVyIHNvIHRoaXMgbmVlZHMgdG8gYmUgYGFueWBcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcGF0aG5hbWUsXG4gICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICBhc1BhdGg6IGFzLFxuICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgIGxvY2FsZXM6IHRoaXMubG9jYWxlcyxcbiAgICAgICAgICAgICAgZGVmYXVsdExvY2FsZTogdGhpcy5kZWZhdWx0TG9jYWxlLFxuICAgICAgICAgICAgfSBhcyBhbnlcbiAgICAgICAgICApLFxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAvLyBPbmx5IGJ1c3QgdGhlIGRhdGEgY2FjaGUgZm9yIFNTUCByb3V0ZXMgYWx0aG91Z2hcbiAgICAgIC8vIG1pZGRsZXdhcmUgY2FuIHNraXAgY2FjaGUgcGVyIHJlcXVlc3Qgd2l0aFxuICAgICAgLy8geC1taWRkbGV3YXJlLWNhY2hlOiBuby1jYWNoZSBhcyB3ZWxsXG4gICAgICBpZiAocm91dGVJbmZvLl9fTl9TU1AgJiYgZmV0Y2hOZXh0RGF0YVBhcmFtcy5kYXRhSHJlZiAmJiBjYWNoZUtleSkge1xuICAgICAgICBkZWxldGUgdGhpcy5zZGNbY2FjaGVLZXldXG4gICAgICB9XG5cbiAgICAgIC8vIHdlIGtpY2sgb2ZmIGEgSEVBRCByZXF1ZXN0IGluIHRoZSBiYWNrZ3JvdW5kXG4gICAgICAvLyB3aGVuIGEgbm9uLXByZWZldGNoIHJlcXVlc3QgaXMgbWFkZSB0byBzaWduYWwgcmV2YWxpZGF0aW9uXG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLmlzUHJldmlldyAmJlxuICAgICAgICByb3V0ZUluZm8uX19OX1NTRyAmJlxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ2RldmVsb3BtZW50JyAmJlxuICAgICAgICAhaXNRdWVyeVVwZGF0aW5nXG4gICAgICApIHtcbiAgICAgICAgZmV0Y2hOZXh0RGF0YShcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBmZXRjaE5leHREYXRhUGFyYW1zLCB7XG4gICAgICAgICAgICBpc0JhY2tncm91bmQ6IHRydWUsXG4gICAgICAgICAgICBwZXJzaXN0Q2FjaGU6IGZhbHNlLFxuICAgICAgICAgICAgaW5mbGlnaHRDYWNoZTogdGhpcy5zYmMsXG4gICAgICAgICAgfSlcbiAgICAgICAgKS5jYXRjaCgoKSA9PiB7fSlcbiAgICAgIH1cblxuICAgICAgcHJvcHMucGFnZVByb3BzID0gT2JqZWN0LmFzc2lnbih7fSwgcHJvcHMucGFnZVByb3BzKVxuICAgICAgcm91dGVJbmZvLnByb3BzID0gcHJvcHNcbiAgICAgIHJvdXRlSW5mby5yb3V0ZSA9IHJvdXRlXG4gICAgICByb3V0ZUluZm8ucXVlcnkgPSBxdWVyeVxuICAgICAgcm91dGVJbmZvLnJlc29sdmVkQXMgPSByZXNvbHZlZEFzXG4gICAgICB0aGlzLmNvbXBvbmVudHNbcm91dGVdID0gcm91dGVJbmZvXG5cbiAgICAgIHJldHVybiByb3V0ZUluZm9cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZVJvdXRlSW5mb0Vycm9yKFxuICAgICAgICBnZXRQcm9wZXJFcnJvcihlcnIpLFxuICAgICAgICBwYXRobmFtZSxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGFzLFxuICAgICAgICByb3V0ZVByb3BzXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXQoXG4gICAgc3RhdGU6IHR5cGVvZiB0aGlzLnN0YXRlLFxuICAgIGRhdGE6IFByaXZhdGVSb3V0ZUluZm8sXG4gICAgcmVzZXRTY3JvbGw6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlXG5cbiAgICByZXR1cm4gdGhpcy5zdWIoXG4gICAgICBkYXRhLFxuICAgICAgdGhpcy5jb21wb25lbnRzWycvX2FwcCddLkNvbXBvbmVudCBhcyBBcHBDb21wb25lbnQsXG4gICAgICByZXNldFNjcm9sbFxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBleGVjdXRlIGJlZm9yZSByZXBsYWNpbmcgcm91dGVyIHN0YXRlXG4gICAqIEBwYXJhbSBjYiBjYWxsYmFjayB0byBiZSBleGVjdXRlZFxuICAgKi9cbiAgYmVmb3JlUG9wU3RhdGUoY2I6IEJlZm9yZVBvcFN0YXRlQ2FsbGJhY2spIHtcbiAgICB0aGlzLl9icHMgPSBjYlxuICB9XG5cbiAgb25seUFIYXNoQ2hhbmdlKGFzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuYXNQYXRoKSByZXR1cm4gZmFsc2VcbiAgICBjb25zdCBbb2xkVXJsTm9IYXNoLCBvbGRIYXNoXSA9IHRoaXMuYXNQYXRoLnNwbGl0KCcjJywgMilcbiAgICBjb25zdCBbbmV3VXJsTm9IYXNoLCBuZXdIYXNoXSA9IGFzLnNwbGl0KCcjJywgMilcblxuICAgIC8vIE1ha2VzIHN1cmUgd2Ugc2Nyb2xsIHRvIHRoZSBwcm92aWRlZCBoYXNoIGlmIHRoZSB1cmwvaGFzaCBhcmUgdGhlIHNhbWVcbiAgICBpZiAobmV3SGFzaCAmJiBvbGRVcmxOb0hhc2ggPT09IG5ld1VybE5vSGFzaCAmJiBvbGRIYXNoID09PSBuZXdIYXNoKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIElmIHRoZSB1cmxzIGFyZSBjaGFuZ2UsIHRoZXJlJ3MgbW9yZSB0aGFuIGEgaGFzaCBjaGFuZ2VcbiAgICBpZiAob2xkVXJsTm9IYXNoICE9PSBuZXdVcmxOb0hhc2gpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIElmIHRoZSBoYXNoIGhhcyBjaGFuZ2VkLCB0aGVuIGl0J3MgYSBoYXNoIG9ubHkgY2hhbmdlLlxuICAgIC8vIFRoaXMgY2hlY2sgaXMgbmVjZXNzYXJ5IHRvIGhhbmRsZSBib3RoIHRoZSBlbnRlciBhbmRcbiAgICAvLyBsZWF2ZSBoYXNoID09PSAnJyBjYXNlcy4gVGhlIGlkZW50aXR5IGNhc2UgZmFsbHMgdGhyb3VnaFxuICAgIC8vIGFuZCBpcyB0cmVhdGVkIGFzIGEgbmV4dCByZWxvYWQuXG4gICAgcmV0dXJuIG9sZEhhc2ggIT09IG5ld0hhc2hcbiAgfVxuXG4gIHNjcm9sbFRvSGFzaChhczogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgWywgaGFzaCA9ICcnXSA9IGFzLnNwbGl0KCcjJywgMilcblxuICAgIGRpc2FibGVTbW9vdGhTY3JvbGxEdXJpbmdSb3V0ZVRyYW5zaXRpb24oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIC8vIFNjcm9sbCB0byB0b3AgaWYgdGhlIGhhc2ggaXMganVzdCBgI2Agd2l0aCBubyB2YWx1ZSBvciBgI3RvcGBcbiAgICAgICAgLy8gVG8gbWlycm9yIGJyb3dzZXJzXG4gICAgICAgIGlmIChoYXNoID09PSAnJyB8fCBoYXNoID09PSAndG9wJykge1xuICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVjb2RlIGhhc2ggdG8gbWFrZSBub24tbGF0aW4gYW5jaG9yIHdvcmtzLlxuICAgICAgICBjb25zdCByYXdIYXNoID0gZGVjb2RlVVJJQ29tcG9uZW50KGhhc2gpXG4gICAgICAgIC8vIEZpcnN0IHdlIGNoZWNrIGlmIHRoZSBlbGVtZW50IGJ5IGlkIGlzIGZvdW5kXG4gICAgICAgIGNvbnN0IGlkRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyYXdIYXNoKVxuICAgICAgICBpZiAoaWRFbCkge1xuICAgICAgICAgIGlkRWwuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gZWxlbWVudCB3aXRoIHRoZSBpZCwgd2UgY2hlY2sgdGhlIGBuYW1lYCBwcm9wZXJ0eVxuICAgICAgICAvLyBUbyBtaXJyb3IgYnJvd3NlcnNcbiAgICAgICAgY29uc3QgbmFtZUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUocmF3SGFzaClbMF1cbiAgICAgICAgaWYgKG5hbWVFbCkge1xuICAgICAgICAgIG5hbWVFbC5zY3JvbGxJbnRvVmlldygpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG9ubHlIYXNoQ2hhbmdlOiB0aGlzLm9ubHlBSGFzaENoYW5nZShhcyksXG4gICAgICB9XG4gICAgKVxuICB9XG5cbiAgdXJsSXNOZXcoYXNQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hc1BhdGggIT09IGFzUGF0aFxuICB9XG5cbiAgLyoqXG4gICAqIFByZWZldGNoIHBhZ2UgY29kZSwgeW91IG1heSB3YWl0IGZvciB0aGUgZGF0YSBkdXJpbmcgcGFnZSByZW5kZXJpbmcuXG4gICAqIFRoaXMgZmVhdHVyZSBvbmx5IHdvcmtzIGluIHByb2R1Y3Rpb24hXG4gICAqIEBwYXJhbSB1cmwgdGhlIGhyZWYgb2YgcHJlZmV0Y2hlZCBwYWdlXG4gICAqIEBwYXJhbSBhc1BhdGggdGhlIGFzIHBhdGggb2YgdGhlIHByZWZldGNoZWQgcGFnZVxuICAgKi9cbiAgYXN5bmMgcHJlZmV0Y2goXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYXNQYXRoOiBzdHJpbmcgPSB1cmwsXG4gICAgb3B0aW9uczogUHJlZmV0Y2hPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gUHJlZmV0Y2ggaXMgbm90IHN1cHBvcnRlZCBpbiBkZXZlbG9wbWVudCBtb2RlIGJlY2F1c2UgaXQgd291bGQgdHJpZ2dlciBvbi1kZW1hbmQtZW50cmllc1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNCb3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpKSB7XG4gICAgICAvLyBObyBwcmVmZXRjaGVzIGZvciBib3RzIHRoYXQgcmVuZGVyIHRoZSBsaW5rIHNpbmNlIHRoZXkgYXJlIHR5cGljYWxseSBuYXZpZ2F0aW5nXG4gICAgICAvLyBsaW5rcyB2aWEgdGhlIGVxdWl2YWxlbnQgb2YgYSBoYXJkIG5hdmlnYXRpb24gYW5kIGhlbmNlIG5ldmVyIHV0aWxpemUgdGhlc2VcbiAgICAgIC8vIHByZWZldGNoZXMuXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbGV0IHBhcnNlZCA9IHBhcnNlUmVsYXRpdmVVcmwodXJsKVxuICAgIGNvbnN0IHVybFBhdGhuYW1lID0gcGFyc2VkLnBhdGhuYW1lXG5cbiAgICBsZXQgeyBwYXRobmFtZSwgcXVlcnkgfSA9IHBhcnNlZFxuICAgIGNvbnN0IG9yaWdpbmFsUGF0aG5hbWUgPSBwYXRobmFtZVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9JMThOX1NVUFBPUlQpIHtcbiAgICAgIGlmIChvcHRpb25zLmxvY2FsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcGF0aG5hbWUgPSBub3JtYWxpemVMb2NhbGVQYXRoIShwYXRobmFtZSwgdGhpcy5sb2NhbGVzKS5wYXRobmFtZVxuICAgICAgICBwYXJzZWQucGF0aG5hbWUgPSBwYXRobmFtZVxuICAgICAgICB1cmwgPSBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWQpXG5cbiAgICAgICAgbGV0IHBhcnNlZEFzID0gcGFyc2VSZWxhdGl2ZVVybChhc1BhdGgpXG4gICAgICAgIGNvbnN0IGxvY2FsZVBhdGhSZXN1bHQgPSBub3JtYWxpemVMb2NhbGVQYXRoIShcbiAgICAgICAgICBwYXJzZWRBcy5wYXRobmFtZSxcbiAgICAgICAgICB0aGlzLmxvY2FsZXNcbiAgICAgICAgKVxuICAgICAgICBwYXJzZWRBcy5wYXRobmFtZSA9IGxvY2FsZVBhdGhSZXN1bHQucGF0aG5hbWVcbiAgICAgICAgb3B0aW9ucy5sb2NhbGUgPSBsb2NhbGVQYXRoUmVzdWx0LmRldGVjdGVkTG9jYWxlIHx8IHRoaXMuZGVmYXVsdExvY2FsZVxuICAgICAgICBhc1BhdGggPSBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWRBcylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYWdlcyA9IGF3YWl0IHRoaXMucGFnZUxvYWRlci5nZXRQYWdlTGlzdCgpXG4gICAgbGV0IHJlc29sdmVkQXMgPSBhc1BhdGhcblxuICAgIGNvbnN0IGxvY2FsZSA9XG4gICAgICB0eXBlb2Ygb3B0aW9ucy5sb2NhbGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gb3B0aW9ucy5sb2NhbGUgfHwgdW5kZWZpbmVkXG4gICAgICAgIDogdGhpcy5sb2NhbGVcblxuICAgIGNvbnN0IGlzTWlkZGxld2FyZU1hdGNoID0gYXdhaXQgbWF0Y2hlc01pZGRsZXdhcmUoe1xuICAgICAgYXNQYXRoOiBhc1BhdGgsXG4gICAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICAgIHJvdXRlcjogdGhpcyxcbiAgICB9KVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Ll9fTkVYVF9IQVNfUkVXUklURVMgJiYgYXNQYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgbGV0IHJld3JpdGVzOiBhbnlcbiAgICAgIDsoeyBfX3Jld3JpdGVzOiByZXdyaXRlcyB9ID0gYXdhaXQgZ2V0Q2xpZW50QnVpbGRNYW5pZmVzdCgpKVxuXG4gICAgICBjb25zdCByZXdyaXRlc1Jlc3VsdCA9IHJlc29sdmVSZXdyaXRlcyhcbiAgICAgICAgYWRkQmFzZVBhdGgoYWRkTG9jYWxlKGFzUGF0aCwgdGhpcy5sb2NhbGUpLCB0cnVlKSxcbiAgICAgICAgcGFnZXMsXG4gICAgICAgIHJld3JpdGVzLFxuICAgICAgICBwYXJzZWQucXVlcnksXG4gICAgICAgIChwOiBzdHJpbmcpID0+IHJlc29sdmVEeW5hbWljUm91dGUocCwgcGFnZXMpLFxuICAgICAgICB0aGlzLmxvY2FsZXNcbiAgICAgIClcblxuICAgICAgaWYgKHJld3JpdGVzUmVzdWx0LmV4dGVybmFsRGVzdCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKCFpc01pZGRsZXdhcmVNYXRjaCkge1xuICAgICAgICByZXNvbHZlZEFzID0gcmVtb3ZlTG9jYWxlKFxuICAgICAgICAgIHJlbW92ZUJhc2VQYXRoKHJld3JpdGVzUmVzdWx0LmFzUGF0aCksXG4gICAgICAgICAgdGhpcy5sb2NhbGVcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAocmV3cml0ZXNSZXN1bHQubWF0Y2hlZFBhZ2UgJiYgcmV3cml0ZXNSZXN1bHQucmVzb2x2ZWRIcmVmKSB7XG4gICAgICAgIC8vIGlmIHRoaXMgZGlyZWN0bHkgbWF0Y2hlcyBhIHBhZ2Ugd2UgbmVlZCB0byB1cGRhdGUgdGhlIGhyZWYgdG9cbiAgICAgICAgLy8gYWxsb3cgdGhlIGNvcnJlY3QgcGFnZSBjaHVuayB0byBiZSBsb2FkZWRcbiAgICAgICAgcGF0aG5hbWUgPSByZXdyaXRlc1Jlc3VsdC5yZXNvbHZlZEhyZWZcbiAgICAgICAgcGFyc2VkLnBhdGhuYW1lID0gcGF0aG5hbWVcblxuICAgICAgICBpZiAoIWlzTWlkZGxld2FyZU1hdGNoKSB7XG4gICAgICAgICAgdXJsID0gZm9ybWF0V2l0aFZhbGlkYXRpb24ocGFyc2VkKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlZC5wYXRobmFtZSA9IHJlc29sdmVEeW5hbWljUm91dGUocGFyc2VkLnBhdGhuYW1lLCBwYWdlcylcblxuICAgIGlmIChpc0R5bmFtaWNSb3V0ZShwYXJzZWQucGF0aG5hbWUpKSB7XG4gICAgICBwYXRobmFtZSA9IHBhcnNlZC5wYXRobmFtZVxuICAgICAgcGFyc2VkLnBhdGhuYW1lID0gcGF0aG5hbWVcbiAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBnZXRSb3V0ZU1hdGNoZXIoZ2V0Um91dGVSZWdleChwYXJzZWQucGF0aG5hbWUpKShcbiAgICAgICAgICBwYXJzZVBhdGgoYXNQYXRoKS5wYXRobmFtZVxuICAgICAgICApIHx8IHt9XG4gICAgICApXG5cbiAgICAgIGlmICghaXNNaWRkbGV3YXJlTWF0Y2gpIHtcbiAgICAgICAgdXJsID0gZm9ybWF0V2l0aFZhbGlkYXRpb24ocGFyc2VkKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPVxuICAgICAgcHJvY2Vzcy5lbnYuX19ORVhUX01JRERMRVdBUkVfUFJFRkVUQ0ggPT09ICdzdHJpY3QnXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IGF3YWl0IHdpdGhNaWRkbGV3YXJlRWZmZWN0cyh7XG4gICAgICAgICAgICBmZXRjaERhdGE6ICgpID0+XG4gICAgICAgICAgICAgIGZldGNoTmV4dERhdGEoe1xuICAgICAgICAgICAgICAgIGRhdGFIcmVmOiB0aGlzLnBhZ2VMb2FkZXIuZ2V0RGF0YUhyZWYoe1xuICAgICAgICAgICAgICAgICAgaHJlZjogZm9ybWF0V2l0aFZhbGlkYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBwYXRobmFtZTogb3JpZ2luYWxQYXRobmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIHNraXBJbnRlcnBvbGF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgYXNQYXRoOiByZXNvbHZlZEFzLFxuICAgICAgICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGhhc01pZGRsZXdhcmU6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNTZXJ2ZXJSZW5kZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHBhcnNlSlNPTjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbmZsaWdodENhY2hlOiB0aGlzLnNkYyxcbiAgICAgICAgICAgICAgICBwZXJzaXN0Q2FjaGU6ICF0aGlzLmlzUHJldmlldyxcbiAgICAgICAgICAgICAgICBpc1ByZWZldGNoOiB0cnVlLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGFzUGF0aDogYXNQYXRoLFxuICAgICAgICAgICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgICAgICAgICByb3V0ZXI6IHRoaXMsXG4gICAgICAgICAgfSlcblxuICAgIC8qKlxuICAgICAqIElmIHRoZXJlIHdhcyBhIHJld3JpdGUgd2UgYXBwbHkgdGhlIGVmZmVjdHMgb2YgdGhlIHJld3JpdGUgb24gdGhlXG4gICAgICogY3VycmVudCBwYXJhbWV0ZXJzIGZvciB0aGUgcHJlZmV0Y2guXG4gICAgICovXG4gICAgaWYgKGRhdGE/LmVmZmVjdC50eXBlID09PSAncmV3cml0ZScpIHtcbiAgICAgIHBhcnNlZC5wYXRobmFtZSA9IGRhdGEuZWZmZWN0LnJlc29sdmVkSHJlZlxuICAgICAgcGF0aG5hbWUgPSBkYXRhLmVmZmVjdC5yZXNvbHZlZEhyZWZcbiAgICAgIHF1ZXJ5ID0geyAuLi5xdWVyeSwgLi4uZGF0YS5lZmZlY3QucGFyc2VkQXMucXVlcnkgfVxuICAgICAgcmVzb2x2ZWRBcyA9IGRhdGEuZWZmZWN0LnBhcnNlZEFzLnBhdGhuYW1lXG4gICAgICB1cmwgPSBmb3JtYXRXaXRoVmFsaWRhdGlvbihwYXJzZWQpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgdGhlcmUgaXMgYSByZWRpcmVjdCB0byBhbiBleHRlcm5hbCBkZXN0aW5hdGlvbiB0aGVuIHdlIGRvbid0IGhhdmVcbiAgICAgKiB0byBwcmVmZXRjaCBjb250ZW50IGFzIGl0IHdpbGwgYmUgdW51c2VkLlxuICAgICAqL1xuICAgIGlmIChkYXRhPy5lZmZlY3QudHlwZSA9PT0gJ3JlZGlyZWN0LWV4dGVybmFsJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGUgPSByZW1vdmVUcmFpbGluZ1NsYXNoKHBhdGhuYW1lKVxuXG4gICAgaWYgKGF3YWl0IHRoaXMuX2JmbChhc1BhdGgsIHJlc29sdmVkQXMsIG9wdGlvbnMubG9jYWxlLCB0cnVlKSkge1xuICAgICAgdGhpcy5jb21wb25lbnRzW3VybFBhdGhuYW1lXSA9IHsgX19hcHBSb3V0ZXI6IHRydWUgfSBhcyBhbnlcbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLnBhZ2VMb2FkZXIuX2lzU3NnKHJvdXRlKS50aGVuKChpc1NzZykgPT4ge1xuICAgICAgICByZXR1cm4gaXNTc2dcbiAgICAgICAgICA/IGZldGNoTmV4dERhdGEoe1xuICAgICAgICAgICAgICBkYXRhSHJlZjogZGF0YT8uanNvblxuICAgICAgICAgICAgICAgID8gZGF0YT8uZGF0YUhyZWZcbiAgICAgICAgICAgICAgICA6IHRoaXMucGFnZUxvYWRlci5nZXREYXRhSHJlZih7XG4gICAgICAgICAgICAgICAgICAgIGhyZWY6IHVybCxcbiAgICAgICAgICAgICAgICAgICAgYXNQYXRoOiByZXNvbHZlZEFzLFxuICAgICAgICAgICAgICAgICAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBpc1NlcnZlclJlbmRlcjogZmFsc2UsXG4gICAgICAgICAgICAgIHBhcnNlSlNPTjogdHJ1ZSxcbiAgICAgICAgICAgICAgaW5mbGlnaHRDYWNoZTogdGhpcy5zZGMsXG4gICAgICAgICAgICAgIHBlcnNpc3RDYWNoZTogIXRoaXMuaXNQcmV2aWV3LFxuICAgICAgICAgICAgICBpc1ByZWZldGNoOiB0cnVlLFxuICAgICAgICAgICAgICB1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGU6XG4gICAgICAgICAgICAgICAgb3B0aW9ucy51bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGUgfHxcbiAgICAgICAgICAgICAgICAob3B0aW9ucy5wcmlvcml0eSAmJlxuICAgICAgICAgICAgICAgICAgISFwcm9jZXNzLmVudi5fX05FWFRfT1BUSU1JU1RJQ19DTElFTlRfQ0FDSEUpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gZmFsc2UpXG4gICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiBmYWxzZSlcbiAgICAgICAgICA6IGZhbHNlXG4gICAgICB9KSxcbiAgICAgIHRoaXMucGFnZUxvYWRlcltvcHRpb25zLnByaW9yaXR5ID8gJ2xvYWRQYWdlJyA6ICdwcmVmZXRjaCddKHJvdXRlKSxcbiAgICBdKVxuICB9XG5cbiAgYXN5bmMgZmV0Y2hDb21wb25lbnQocm91dGU6IHN0cmluZykge1xuICAgIGNvbnN0IGhhbmRsZUNhbmNlbGxlZCA9IGdldENhbmNlbGxlZEhhbmRsZXIoeyByb3V0ZSwgcm91dGVyOiB0aGlzIH0pXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY29tcG9uZW50UmVzdWx0ID0gYXdhaXQgdGhpcy5wYWdlTG9hZGVyLmxvYWRQYWdlKHJvdXRlKVxuICAgICAgaGFuZGxlQ2FuY2VsbGVkKClcblxuICAgICAgcmV0dXJuIGNvbXBvbmVudFJlc3VsdFxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaGFuZGxlQ2FuY2VsbGVkKClcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxuXG4gIF9nZXREYXRhPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlXG4gICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xuICAgICAgY2FuY2VsbGVkID0gdHJ1ZVxuICAgIH1cbiAgICB0aGlzLmNsYyA9IGNhbmNlbFxuICAgIHJldHVybiBmbigpLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIGlmIChjYW5jZWwgPT09IHRoaXMuY2xjKSB7XG4gICAgICAgIHRoaXMuY2xjID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBpZiAoY2FuY2VsbGVkKSB7XG4gICAgICAgIGNvbnN0IGVycjogYW55ID0gbmV3IEVycm9yKCdMb2FkaW5nIGluaXRpYWwgcHJvcHMgY2FuY2VsbGVkJylcbiAgICAgICAgZXJyLmNhbmNlbGxlZCA9IHRydWVcbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSlcbiAgfVxuXG4gIGdldEluaXRpYWxQcm9wcyhcbiAgICBDb21wb25lbnQ6IENvbXBvbmVudFR5cGUsXG4gICAgY3R4OiBOZXh0UGFnZUNvbnRleHRcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY29uc3QgeyBDb21wb25lbnQ6IEFwcCB9ID0gdGhpcy5jb21wb25lbnRzWycvX2FwcCddXG4gICAgY29uc3QgQXBwVHJlZSA9IHRoaXMuX3dyYXBBcHAoQXBwIGFzIEFwcENvbXBvbmVudClcbiAgICBjdHguQXBwVHJlZSA9IEFwcFRyZWVcbiAgICByZXR1cm4gbG9hZEdldEluaXRpYWxQcm9wczxBcHBDb250ZXh0VHlwZTxSb3V0ZXI+PihBcHAsIHtcbiAgICAgIEFwcFRyZWUsXG4gICAgICBDb21wb25lbnQsXG4gICAgICByb3V0ZXI6IHRoaXMsXG4gICAgICBjdHgsXG4gICAgfSlcbiAgfVxuXG4gIGdldCByb3V0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLnJvdXRlXG4gIH1cblxuICBnZXQgcGF0aG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5wYXRobmFtZVxuICB9XG5cbiAgZ2V0IHF1ZXJ5KCk6IFBhcnNlZFVybFF1ZXJ5IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5xdWVyeVxuICB9XG5cbiAgZ2V0IGFzUGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmFzUGF0aFxuICB9XG5cbiAgZ2V0IGxvY2FsZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmxvY2FsZVxuICB9XG5cbiAgZ2V0IGlzRmFsbGJhY2soKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuaXNGYWxsYmFja1xuICB9XG5cbiAgZ2V0IGlzUHJldmlldygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5pc1ByZXZpZXdcbiAgfVxufVxuIl0sIm5hbWVzIjpbImNyZWF0ZUtleSIsIlJvdXRlciIsIm1hdGNoZXNNaWRkbGV3YXJlIiwicmVzb2x2ZVJld3JpdGVzIiwicHJvY2VzcyIsImVudiIsIl9fTkVYVF9IQVNfUkVXUklURVMiLCJyZXF1aXJlIiwiZGVmYXVsdCIsImJ1aWxkQ2FuY2VsbGF0aW9uRXJyb3IiLCJPYmplY3QiLCJhc3NpZ24iLCJFcnJvciIsImNhbmNlbGxlZCIsIm9wdGlvbnMiLCJtYXRjaGVycyIsIlByb21pc2UiLCJyZXNvbHZlIiwicm91dGVyIiwicGFnZUxvYWRlciIsImdldE1pZGRsZXdhcmUiLCJwYXRobmFtZSIsImFzUGF0aG5hbWUiLCJwYXJzZVBhdGgiLCJhc1BhdGgiLCJjbGVhbmVkQXMiLCJoYXNCYXNlUGF0aCIsInJlbW92ZUJhc2VQYXRoIiwiYXNXaXRoQmFzZVBhdGhBbmRMb2NhbGUiLCJhZGRCYXNlUGF0aCIsImFkZExvY2FsZSIsImxvY2FsZSIsInNvbWUiLCJtIiwiUmVnRXhwIiwicmVnZXhwIiwidGVzdCIsInN0cmlwT3JpZ2luIiwidXJsIiwib3JpZ2luIiwiZ2V0TG9jYXRpb25PcmlnaW4iLCJzdGFydHNXaXRoIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwicHJlcGFyZVVybEFzIiwiYXMiLCJyZXNvbHZlZEhyZWYiLCJyZXNvbHZlZEFzIiwicmVzb2x2ZUhyZWYiLCJocmVmV2FzQWJzb2x1dGUiLCJhc1dhc0Fic29sdXRlIiwicHJlcGFyZWRVcmwiLCJwcmVwYXJlZEFzIiwicmVzb2x2ZUR5bmFtaWNSb3V0ZSIsInBhZ2VzIiwiY2xlYW5QYXRobmFtZSIsInJlbW92ZVRyYWlsaW5nU2xhc2giLCJkZW5vcm1hbGl6ZVBhZ2VQYXRoIiwiaW5jbHVkZXMiLCJwYWdlIiwiaXNEeW5hbWljUm91dGUiLCJnZXRSb3V0ZVJlZ2V4IiwicmUiLCJnZXRNaWRkbGV3YXJlRGF0YSIsInNvdXJjZSIsInJlc3BvbnNlIiwibmV4dENvbmZpZyIsImJhc2VQYXRoIiwiaTE4biIsImxvY2FsZXMiLCJ0cmFpbGluZ1NsYXNoIiwiQm9vbGVhbiIsIl9fTkVYVF9UUkFJTElOR19TTEFTSCIsInJld3JpdGVIZWFkZXIiLCJoZWFkZXJzIiwiZ2V0IiwicmV3cml0ZVRhcmdldCIsIm1hdGNoZWRQYXRoIiwiTUFUQ0hFRF9QQVRIX0hFQURFUiIsIl9fTkVYVF9FWFRFUk5BTF9NSURETEVXQVJFX1JFV1JJVEVfUkVTT0xWRSIsInBhcnNlZFJld3JpdGVUYXJnZXQiLCJwYXJzZVJlbGF0aXZlVXJsIiwicGF0aG5hbWVJbmZvIiwiZ2V0TmV4dFBhdGhuYW1lSW5mbyIsInBhcnNlRGF0YSIsImZzUGF0aG5hbWUiLCJhbGwiLCJnZXRQYWdlTGlzdCIsImdldENsaWVudEJ1aWxkTWFuaWZlc3QiLCJ0aGVuIiwiX19yZXdyaXRlcyIsInJld3JpdGVzIiwibm9ybWFsaXplTG9jYWxlUGF0aCIsInBhcnNlZFNvdXJjZSIsInVuZGVmaW5lZCIsInJlc3VsdCIsInF1ZXJ5IiwicGF0aCIsIm1hdGNoZWRQYWdlIiwicGFyc2VkQXMiLCJyZXNvbHZlZFBhdGhuYW1lIiwibWF0Y2hlcyIsImdldFJvdXRlTWF0Y2hlciIsInR5cGUiLCJzcmMiLCJmb3JtYXROZXh0UGF0aG5hbWVJbmZvIiwiZGVmYXVsdExvY2FsZSIsImJ1aWxkSWQiLCJkZXN0aW5hdGlvbiIsImhhc2giLCJyZWRpcmVjdFRhcmdldCIsIm5ld0FzIiwibmV3VXJsIiwid2l0aE1pZGRsZXdhcmVFZmZlY3RzIiwiZmV0Y2hEYXRhIiwiZGF0YSIsImVmZmVjdCIsImRhdGFIcmVmIiwianNvbiIsInRleHQiLCJjYWNoZUtleSIsIm1hbnVhbFNjcm9sbFJlc3RvcmF0aW9uIiwiX19ORVhUX1NDUk9MTF9SRVNUT1JBVElPTiIsIndpbmRvdyIsImhpc3RvcnkiLCJ2Iiwic2Vzc2lvblN0b3JhZ2UiLCJzZXRJdGVtIiwicmVtb3ZlSXRlbSIsIm4iLCJTU0dfREFUQV9OT1RfRk9VTkQiLCJTeW1ib2wiLCJmZXRjaFJldHJ5IiwiYXR0ZW1wdHMiLCJmZXRjaCIsImNyZWRlbnRpYWxzIiwibWV0aG9kIiwib2siLCJzdGF0dXMiLCJ0cnlUb1BhcnNlQXNKU09OIiwiSlNPTiIsInBhcnNlIiwiZXJyb3IiLCJmZXRjaE5leHREYXRhIiwiaW5mbGlnaHRDYWNoZSIsImlzUHJlZmV0Y2giLCJoYXNNaWRkbGV3YXJlIiwiaXNTZXJ2ZXJSZW5kZXIiLCJwYXJzZUpTT04iLCJwZXJzaXN0Q2FjaGUiLCJpc0JhY2tncm91bmQiLCJ1bnN0YWJsZV9za2lwQ2xpZW50Q2FjaGUiLCJocmVmIiwiVVJMIiwibG9jYXRpb24iLCJnZXREYXRhIiwicGFyYW1zIiwicHVycG9zZSIsIk5FWFRfREVQTE9ZTUVOVF9JRCIsIm5vdEZvdW5kIiwibWFya0Fzc2V0RXJyb3IiLCJOT0RFX0VOViIsImNhdGNoIiwiZXJyIiwibWVzc2FnZSIsIk1hdGgiLCJyYW5kb20iLCJ0b1N0cmluZyIsInNsaWNlIiwiaGFuZGxlSGFyZE5hdmlnYXRpb24iLCJnZXRDYW5jZWxsZWRIYW5kbGVyIiwicm91dGUiLCJjYW5jZWwiLCJjbGMiLCJoYW5kbGVDYW5jZWxsZWQiLCJyZWxvYWQiLCJiYWNrIiwiZm9yd2FyZCIsInB1c2giLCJfa2V5Iiwic3RyaW5naWZ5IiwieCIsInNlbGYiLCJwYWdlWE9mZnNldCIsInkiLCJwYWdlWU9mZnNldCIsImNoYW5nZSIsInJlcGxhY2UiLCJfYmZsIiwic2tpcE5hdmlnYXRlIiwiX19ORVhUX0NMSUVOVF9ST1VURVJfRklMVEVSX0VOQUJMRUQiLCJfYmZsX3MiLCJfYmZsX2QiLCJCbG9vbUZpbHRlciIsInN0YXRpY0ZpbHRlckRhdGEiLCJkeW5hbWljRmlsdGVyRGF0YSIsIl9fcm91dGVyRmlsdGVyU3RhdGljIiwiX19yb3V0ZXJGaWx0ZXJEeW5hbWljIiwiY29uc29sZSIsInJvdXRlckZpbHRlclNWYWx1ZSIsIl9fTkVYVF9DTElFTlRfUk9VVEVSX1NfRklMVEVSIiwicm91dGVyRmlsdGVyRFZhbHVlIiwiX19ORVhUX0NMSUVOVF9ST1VURVJfRF9GSUxURVIiLCJudW1IYXNoZXMiLCJudW1JdGVtcyIsImVycm9yUmF0ZSIsImltcG9ydCIsIm1hdGNoZXNCZmxTdGF0aWMiLCJtYXRjaGVzQmZsRHluYW1pYyIsInBhdGhzVG9DaGVjayIsImN1ckFzIiwiYWxsb3dNYXRjaEN1cnJlbnQiLCJhc05vU2xhc2giLCJhc05vU2xhc2hMb2NhbGUiLCJjb250YWlucyIsIm5vcm1hbGl6ZWRBUyIsImN1ckFzUGFydHMiLCJzcGxpdCIsImkiLCJjdXJyZW50UGFydCIsImpvaW4iLCJmb3JjZWRTY3JvbGwiLCJpc0xvY2FsVVJMIiwiaXNRdWVyeVVwZGF0aW5nIiwiX2giLCJzaGFsbG93Iiwic2hvdWxkUmVzb2x2ZUhyZWYiLCJfc2hvdWxkUmVzb2x2ZUhyZWYiLCJuZXh0U3RhdGUiLCJzdGF0ZSIsInJlYWR5U3RhdGVDaGFuZ2UiLCJpc1JlYWR5IiwiaXNTc3IiLCJwcmV2TG9jYWxlIiwiX19ORVhUX0kxOE5fU1VQUE9SVCIsImxvY2FsZVBhdGhSZXN1bHQiLCJkZXRlY3RlZExvY2FsZSIsImZvcm1hdFdpdGhWYWxpZGF0aW9uIiwiZGlkTmF2aWdhdGUiLCJkZXRlY3RlZERvbWFpbiIsImRldGVjdERvbWFpbkxvY2FsZSIsImRvbWFpbkxvY2FsZXMiLCJpc0xvY2FsZURvbWFpbiIsImhvc3RuYW1lIiwiZG9tYWluIiwiYXNOb0Jhc2VQYXRoIiwiaHR0cCIsIlNUIiwicGVyZm9ybWFuY2UiLCJtYXJrIiwic2Nyb2xsIiwicm91dGVQcm9wcyIsIl9pbkZsaWdodFJvdXRlIiwiZXZlbnRzIiwiZW1pdCIsInJlbW92ZUxvY2FsZSIsImxvY2FsZUNoYW5nZSIsIm9ubHlBSGFzaENoYW5nZSIsImNoYW5nZVN0YXRlIiwic2Nyb2xsVG9IYXNoIiwic2V0IiwiY29tcG9uZW50cyIsImlzRXJyb3IiLCJwYXJzZWQiLCJ1cmxJc05ldyIsInBhcnNlZEFzUGF0aG5hbWUiLCJfX2FwcFJvdXRlciIsImlzTWlkZGxld2FyZVJld3JpdGUiLCJpc01pZGRsZXdhcmVNYXRjaCIsInJld3JpdGVzUmVzdWx0IiwicCIsImV4dGVybmFsRGVzdCIsInJvdXRlTWF0Y2giLCJyb3V0ZVJlZ2V4Iiwic2hvdWxkSW50ZXJwb2xhdGUiLCJpbnRlcnBvbGF0ZWRBcyIsImludGVycG9sYXRlQXMiLCJtaXNzaW5nUGFyYW1zIiwia2V5cyIsImdyb3VwcyIsImZpbHRlciIsInBhcmFtIiwib3B0aW9uYWwiLCJ3YXJuIiwib21pdCIsImlzRXJyb3JSb3V0ZSIsInJvdXRlSW5mbyIsImdldFJvdXRlSW5mbyIsImlzUHJldmlldyIsImlzRmFsbGJhY2siLCJjbGVhbmVkUGFyc2VkUGF0aG5hbWUiLCJmb3JFYWNoIiwia2V5IiwicHJlZml4ZWRBcyIsInJld3JpdGVBcyIsImxvY2FsZVJlc3VsdCIsImN1clJvdXRlTWF0Y2giLCJjb21wb25lbnQiLCJDb21wb25lbnQiLCJ1bnN0YWJsZV9zY3JpcHRMb2FkZXIiLCJzY3JpcHRzIiwiY29uY2F0Iiwic2NyaXB0IiwiaGFuZGxlQ2xpZW50U2NyaXB0TG9hZCIsInByb3BzIiwiX19OX1NTRyIsIl9fTl9TU1AiLCJwYWdlUHJvcHMiLCJfX05fUkVESVJFQ1QiLCJfX05fUkVESVJFQ1RfQkFTRV9QQVRIIiwicGFyc2VkSHJlZiIsIl9fTl9QUkVWSUVXIiwibm90Rm91bmRSb3V0ZSIsImZldGNoQ29tcG9uZW50IiwiXyIsImlzTm90Rm91bmQiLCJfX05FWFRfREFUQV9fIiwic3RhdHVzQ29kZSIsImlzVmFsaWRTaGFsbG93Um91dGUiLCJzaG91bGRTY3JvbGwiLCJyZXNldFNjcm9sbCIsInVwY29taW5nU2Nyb2xsU3RhdGUiLCJ1cGNvbWluZ1JvdXRlclN0YXRlIiwiY2FuU2tpcFVwZGF0aW5nIiwiY29tcGFyZVJvdXRlclN0YXRlcyIsImUiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImxhbmciLCJoYXNoUmVnZXgiLCJnZXRVUkwiLCJfc2hhbGxvdyIsIl9fTiIsImhhbmRsZVJvdXRlSW5mb0Vycm9yIiwibG9hZEVycm9yRmFpbCIsImlzQXNzZXRFcnJvciIsInN0eWxlU2hlZXRzIiwiZ2V0SW5pdGlhbFByb3BzIiwiZ2lwRXJyIiwicm91dGVJbmZvRXJyIiwicmVxdWVzdGVkUm91dGUiLCJleGlzdGluZ0luZm8iLCJjYWNoZWRSb3V0ZUluZm8iLCJmZXRjaE5leHREYXRhUGFyYW1zIiwiZ2V0RGF0YUhyZWYiLCJza2lwSW50ZXJwb2xhdGlvbiIsInNiYyIsInNkYyIsInJlc29sdmVkUm91dGUiLCJpc0FQSVJvdXRlIiwicmVzIiwibW9kIiwiaXNWYWxpZEVsZW1lbnRUeXBlIiwid2FzQmFpbGVkUHJlZmV0Y2giLCJzaG91bGRGZXRjaERhdGEiLCJfZ2V0RGF0YSIsImZldGNoZWQiLCJnZXRQcm9wZXJFcnJvciIsInN1YiIsImJlZm9yZVBvcFN0YXRlIiwiY2IiLCJfYnBzIiwib2xkVXJsTm9IYXNoIiwib2xkSGFzaCIsIm5ld1VybE5vSGFzaCIsIm5ld0hhc2giLCJkaXNhYmxlU21vb3RoU2Nyb2xsRHVyaW5nUm91dGVUcmFuc2l0aW9uIiwic2Nyb2xsVG8iLCJyYXdIYXNoIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiaWRFbCIsImdldEVsZW1lbnRCeUlkIiwic2Nyb2xsSW50b1ZpZXciLCJuYW1lRWwiLCJnZXRFbGVtZW50c0J5TmFtZSIsIm9ubHlIYXNoQ2hhbmdlIiwicHJlZmV0Y2giLCJpc0JvdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInVybFBhdGhuYW1lIiwib3JpZ2luYWxQYXRobmFtZSIsIl9fTkVYVF9NSURETEVXQVJFX1BSRUZFVENIIiwiX2lzU3NnIiwiaXNTc2ciLCJwcmlvcml0eSIsIl9fTkVYVF9PUFRJTUlTVElDX0NMSUVOVF9DQUNIRSIsImNvbXBvbmVudFJlc3VsdCIsImxvYWRQYWdlIiwiZm4iLCJjdHgiLCJBcHAiLCJBcHBUcmVlIiwiX3dyYXBBcHAiLCJsb2FkR2V0SW5pdGlhbFByb3BzIiwiY29uc3RydWN0b3IiLCJpbml0aWFsUHJvcHMiLCJ3cmFwQXBwIiwic3Vic2NyaXB0aW9uIiwiaXNGaXJzdFBvcFN0YXRlRXZlbnQiLCJvblBvcFN0YXRlIiwiX19OQSIsImdldEl0ZW0iLCJpbml0aWFsIiwiYXV0b0V4cG9ydER5bmFtaWMiLCJhdXRvRXhwb3J0IiwiX19ORVhUX1JPVVRFUl9CQVNFUEFUSCIsImdzc3AiLCJnaXAiLCJpc0V4cGVyaW1lbnRhbENvbXBpbGUiLCJhcHBHaXAiLCJnc3AiLCJzZWFyY2giLCJfaW5pdGlhbE1hdGNoZXNNaWRkbGV3YXJlUHJvbWlzZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJzY3JvbGxSZXN0b3JhdGlvbiIsIm1pdHQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/router.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/add-locale.js":
/*!******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/add-locale.js ***!
  \******************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"addLocale\", ({\n    enumerable: true,\n    get: function() {\n        return addLocale;\n    }\n}));\nconst _addpathprefix = __webpack_require__(/*! ./add-path-prefix */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _pathhasprefix = __webpack_require__(/*! ./path-has-prefix */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nfunction addLocale(path, locale, defaultLocale, ignorePrefix) {\n    // If no locale was given or the locale is the default locale, we don't need\n    // to prefix the path.\n    if (!locale || locale === defaultLocale) return path;\n    const lower = path.toLowerCase();\n    // If the path is an API path or the path already has the locale prefix, we\n    // don't need to prefix the path.\n    if (!ignorePrefix) {\n        if ((0, _pathhasprefix.pathHasPrefix)(lower, '/api')) return path;\n        if ((0, _pathhasprefix.pathHasPrefix)(lower, \"/\" + locale.toLowerCase())) return path;\n    }\n    // Add the locale prefix to the path.\n    return (0, _addpathprefix.addPathPrefix)(path, \"/\" + locale);\n} //# sourceMappingURL=add-locale.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hZGQtbG9jYWxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7NkNBUWdCQTs7O2VBQUFBOzs7MkNBUmM7MkNBQ0E7QUFPdkIsU0FBU0EsVUFDZEMsSUFBWSxFQUNaQyxNQUF1QixFQUN2QkMsYUFBc0IsRUFDdEJDLFlBQXNCO0lBRXRCLDRFQUE0RTtJQUM1RSxzQkFBc0I7SUFDdEIsSUFBSSxDQUFDRixVQUFVQSxXQUFXQyxlQUFlLE9BQU9GO0lBRWhELE1BQU1JLFFBQVFKLEtBQUtLLFdBQVc7SUFFOUIsMkVBQTJFO0lBQzNFLGlDQUFpQztJQUNqQyxJQUFJLENBQUNGLGNBQWM7UUFDakIsSUFBSUcsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBYSxFQUFDRixPQUFPLFNBQVMsT0FBT0o7UUFDekMsSUFBSU0sQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBY0YsT0FBUSxNQUFHSCxPQUFPSSxXQUFXLEtBQU8sT0FBT0w7SUFDL0Q7SUFFQSxxQ0FBcUM7SUFDckMsT0FBT08sQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBY1AsTUFBTyxNQUFHQztBQUNqQyIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hZGQtbG9jYWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZFBhdGhQcmVmaXggfSBmcm9tICcuL2FkZC1wYXRoLXByZWZpeCdcbmltcG9ydCB7IHBhdGhIYXNQcmVmaXggfSBmcm9tICcuL3BhdGgtaGFzLXByZWZpeCdcblxuLyoqXG4gKiBGb3IgYSBnaXZlbiBwYXRoIGFuZCBhIGxvY2FsZSwgaWYgdGhlIGxvY2FsZSBpcyBnaXZlbiwgaXQgd2lsbCBwcmVmaXggdGhlXG4gKiBsb2NhbGUuIFRoZSBwYXRoIHNob3VsZG4ndCBiZSBhbiBBUEkgcGF0aC4gSWYgYSBkZWZhdWx0IGxvY2FsZSBpcyBnaXZlbiB0aGVcbiAqIHByZWZpeCB3aWxsIGJlIG9taXR0ZWQgaWYgdGhlIGxvY2FsZSBpcyBhbHJlYWR5IHRoZSBkZWZhdWx0IGxvY2FsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZExvY2FsZShcbiAgcGF0aDogc3RyaW5nLFxuICBsb2NhbGU/OiBzdHJpbmcgfCBmYWxzZSxcbiAgZGVmYXVsdExvY2FsZT86IHN0cmluZyxcbiAgaWdub3JlUHJlZml4PzogYm9vbGVhblxuKSB7XG4gIC8vIElmIG5vIGxvY2FsZSB3YXMgZ2l2ZW4gb3IgdGhlIGxvY2FsZSBpcyB0aGUgZGVmYXVsdCBsb2NhbGUsIHdlIGRvbid0IG5lZWRcbiAgLy8gdG8gcHJlZml4IHRoZSBwYXRoLlxuICBpZiAoIWxvY2FsZSB8fCBsb2NhbGUgPT09IGRlZmF1bHRMb2NhbGUpIHJldHVybiBwYXRoXG5cbiAgY29uc3QgbG93ZXIgPSBwYXRoLnRvTG93ZXJDYXNlKClcblxuICAvLyBJZiB0aGUgcGF0aCBpcyBhbiBBUEkgcGF0aCBvciB0aGUgcGF0aCBhbHJlYWR5IGhhcyB0aGUgbG9jYWxlIHByZWZpeCwgd2VcbiAgLy8gZG9uJ3QgbmVlZCB0byBwcmVmaXggdGhlIHBhdGguXG4gIGlmICghaWdub3JlUHJlZml4KSB7XG4gICAgaWYgKHBhdGhIYXNQcmVmaXgobG93ZXIsICcvYXBpJykpIHJldHVybiBwYXRoXG4gICAgaWYgKHBhdGhIYXNQcmVmaXgobG93ZXIsIGAvJHtsb2NhbGUudG9Mb3dlckNhc2UoKX1gKSkgcmV0dXJuIHBhdGhcbiAgfVxuXG4gIC8vIEFkZCB0aGUgbG9jYWxlIHByZWZpeCB0byB0aGUgcGF0aC5cbiAgcmV0dXJuIGFkZFBhdGhQcmVmaXgocGF0aCwgYC8ke2xvY2FsZX1gKVxufVxuIl0sIm5hbWVzIjpbImFkZExvY2FsZSIsInBhdGgiLCJsb2NhbGUiLCJkZWZhdWx0TG9jYWxlIiwiaWdub3JlUHJlZml4IiwibG93ZXIiLCJ0b0xvd2VyQ2FzZSIsInBhdGhIYXNQcmVmaXgiLCJhZGRQYXRoUHJlZml4Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/add-locale.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js":
/*!***********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js ***!
  \***********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"addPathPrefix\", ({\n    enumerable: true,\n    get: function() {\n        return addPathPrefix;\n    }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction addPathPrefix(path, prefix) {\n    if (!path.startsWith('/') || !prefix) {\n        return path;\n    }\n    const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n    return \"\" + prefix + pathname + query + hash;\n} //# sourceMappingURL=add-path-prefix.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hZGQtcGF0aC1wcmVmaXguanMiLCJtYXBwaW5ncyI6Ijs7OztpREFNZ0JBOzs7ZUFBQUE7Ozt1Q0FOVTtBQU1uQixTQUFTQSxjQUFjQyxJQUFZLEVBQUVDLE1BQWU7SUFDekQsSUFBSSxDQUFDRCxLQUFLRSxVQUFVLENBQUMsUUFBUSxDQUFDRCxRQUFRO1FBQ3BDLE9BQU9EO0lBQ1Q7SUFFQSxNQUFNLEVBQUVHLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxJQUFJLEVBQUUsR0FBR0MsQ0FBQUEsR0FBQUEsV0FBQUEsU0FBQUEsRUFBVU47SUFDNUMsT0FBUSxLQUFFQyxTQUFTRSxXQUFXQyxRQUFRQztBQUN4QyIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hZGQtcGF0aC1wcmVmaXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGFyc2VQYXRoIH0gZnJvbSAnLi9wYXJzZS1wYXRoJ1xuXG4vKipcbiAqIEFkZHMgdGhlIHByb3ZpZGVkIHByZWZpeCB0byB0aGUgZ2l2ZW4gcGF0aC4gSXQgZmlyc3QgZW5zdXJlcyB0aGF0IHRoZSBwYXRoXG4gKiBpcyBpbmRlZWQgc3RhcnRpbmcgd2l0aCBhIHNsYXNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkUGF0aFByZWZpeChwYXRoOiBzdHJpbmcsIHByZWZpeD86IHN0cmluZykge1xuICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpIHx8ICFwcmVmaXgpIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG5cbiAgY29uc3QgeyBwYXRobmFtZSwgcXVlcnksIGhhc2ggfSA9IHBhcnNlUGF0aChwYXRoKVxuICByZXR1cm4gYCR7cHJlZml4fSR7cGF0aG5hbWV9JHtxdWVyeX0ke2hhc2h9YFxufVxuIl0sIm5hbWVzIjpbImFkZFBhdGhQcmVmaXgiLCJwYXRoIiwicHJlZml4Iiwic3RhcnRzV2l0aCIsInBhdGhuYW1lIiwicXVlcnkiLCJoYXNoIiwicGFyc2VQYXRoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js":
/*!***********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js ***!
  \***********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"addPathSuffix\", ({\n    enumerable: true,\n    get: function() {\n        return addPathSuffix;\n    }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction addPathSuffix(path, suffix) {\n    if (!path.startsWith('/') || !suffix) {\n        return path;\n    }\n    const { pathname, query, hash } = (0, _parsepath.parsePath)(path);\n    return \"\" + pathname + suffix + query + hash;\n} //# sourceMappingURL=add-path-suffix.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hZGQtcGF0aC1zdWZmaXguanMiLCJtYXBwaW5ncyI6Ijs7OztpREFPZ0JBOzs7ZUFBQUE7Ozt1Q0FQVTtBQU9uQixTQUFTQSxjQUFjQyxJQUFZLEVBQUVDLE1BQWU7SUFDekQsSUFBSSxDQUFDRCxLQUFLRSxVQUFVLENBQUMsUUFBUSxDQUFDRCxRQUFRO1FBQ3BDLE9BQU9EO0lBQ1Q7SUFFQSxNQUFNLEVBQUVHLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxJQUFJLEVBQUUsR0FBR0MsQ0FBQUEsR0FBQUEsV0FBQUEsU0FBQUEsRUFBVU47SUFDNUMsT0FBUSxLQUFFRyxXQUFXRixTQUFTRyxRQUFRQztBQUN4QyIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hZGQtcGF0aC1zdWZmaXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGFyc2VQYXRoIH0gZnJvbSAnLi9wYXJzZS1wYXRoJ1xuXG4vKipcbiAqIFNpbWlsYXJseSB0byBgYWRkUGF0aFByZWZpeGAsIHRoaXMgZnVuY3Rpb24gYWRkcyBhIHN1ZmZpeCBhdCB0aGUgZW5kIG9uIHRoZVxuICogcHJvdmlkZWQgcGF0aC4gSXQgYWxzbyB3b3JrcyBvbmx5IGZvciBwYXRocyBlbnN1cmluZyB0aGUgYXJndW1lbnQgc3RhcnRzXG4gKiB3aXRoIGEgc2xhc2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRQYXRoU3VmZml4KHBhdGg6IHN0cmluZywgc3VmZml4Pzogc3RyaW5nKSB7XG4gIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykgfHwgIXN1ZmZpeCkge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCB7IHBhdGhuYW1lLCBxdWVyeSwgaGFzaCB9ID0gcGFyc2VQYXRoKHBhdGgpXG4gIHJldHVybiBgJHtwYXRobmFtZX0ke3N1ZmZpeH0ke3F1ZXJ5fSR7aGFzaH1gXG59XG4iXSwibmFtZXMiOlsiYWRkUGF0aFN1ZmZpeCIsInBhdGgiLCJzdWZmaXgiLCJzdGFydHNXaXRoIiwicGF0aG5hbWUiLCJxdWVyeSIsImhhc2giLCJwYXJzZVBhdGgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/app-paths.js":
/*!*****************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/app-paths.js ***!
  \*****************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    normalizeAppPath: function() {\n        return normalizeAppPath;\n    },\n    normalizeRscURL: function() {\n        return normalizeRscURL;\n    }\n});\nconst _ensureleadingslash = __webpack_require__(/*! ../../page-path/ensure-leading-slash */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js\");\nconst _segment = __webpack_require__(/*! ../../segment */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/segment.js\");\nfunction normalizeAppPath(route) {\n    return (0, _ensureleadingslash.ensureLeadingSlash)(route.split('/').reduce((pathname, segment, index, segments)=>{\n        // Empty segments are ignored.\n        if (!segment) {\n            return pathname;\n        }\n        // Groups are ignored.\n        if ((0, _segment.isGroupSegment)(segment)) {\n            return pathname;\n        }\n        // Parallel segments are ignored.\n        if (segment[0] === '@') {\n            return pathname;\n        }\n        // The last segment (if it's a leaf) should be ignored.\n        if ((segment === 'page' || segment === 'route') && index === segments.length - 1) {\n            return pathname;\n        }\n        return pathname + \"/\" + segment;\n    }, ''));\n}\nfunction normalizeRscURL(url) {\n    return url.replace(/\\.rsc($|\\?)/, '$1');\n} //# sourceMappingURL=app-paths.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9hcHAtcGF0aHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBc0JnQkEsZ0JBQWdCO2VBQWhCQTs7SUFtQ0FDLGVBQWU7ZUFBZkE7OztnREF6RG1CO3FDQUNKO0FBcUJ4QixTQUFTRCxpQkFBaUJFLEtBQWE7SUFDNUMsT0FBT0MsQ0FBQUEsR0FBQUEsb0JBQUFBLGtCQUFBQSxFQUNMRCxNQUFNRSxLQUFLLENBQUMsS0FBS0MsTUFBTSxDQUFDLENBQUNDLFVBQVVDLFNBQVNDLE9BQU9DO1FBQ2pELDhCQUE4QjtRQUM5QixJQUFJLENBQUNGLFNBQVM7WUFDWixPQUFPRDtRQUNUO1FBRUEsc0JBQXNCO1FBQ3RCLElBQUlJLENBQUFBLEdBQUFBLFNBQUFBLGNBQUFBLEVBQWVILFVBQVU7WUFDM0IsT0FBT0Q7UUFDVDtRQUVBLGlDQUFpQztRQUNqQyxJQUFJQyxPQUFPLENBQUMsRUFBRSxLQUFLLEtBQUs7WUFDdEIsT0FBT0Q7UUFDVDtRQUVBLHVEQUF1RDtRQUN2RCxJQUNHQyxDQUFBQSxZQUFZLFVBQVVBLFlBQVksUUFBTSxJQUN6Q0MsVUFBVUMsU0FBU0UsTUFBTSxHQUFHLEdBQzVCO1lBQ0EsT0FBT0w7UUFDVDtRQUVBLE9BQVVBLFdBQVMsTUFBR0M7SUFDeEIsR0FBRztBQUVQO0FBTU8sU0FBU04sZ0JBQWdCVyxHQUFXO0lBQ3pDLE9BQU9BLElBQUlDLE9BQU8sQ0FDaEIsZUFDQTtBQUdKIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2FwcC1wYXRocy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbnN1cmVMZWFkaW5nU2xhc2ggfSBmcm9tICcuLi8uLi9wYWdlLXBhdGgvZW5zdXJlLWxlYWRpbmctc2xhc2gnXG5pbXBvcnQgeyBpc0dyb3VwU2VnbWVudCB9IGZyb20gJy4uLy4uL3NlZ21lbnQnXG5cbi8qKlxuICogTm9ybWFsaXplcyBhbiBhcHAgcm91dGUgc28gaXQgcmVwcmVzZW50cyB0aGUgYWN0dWFsIHJlcXVlc3QgcGF0aC4gRXNzZW50aWFsbHlcbiAqIHBlcmZvcm1pbmcgdGhlIGZvbGxvd2luZyB0cmFuc2Zvcm1hdGlvbnM6XG4gKlxuICogLSBgLyhkYXNoYm9hcmQpL3VzZXIvW2lkXS9wYWdlYCB0byBgL3VzZXIvW2lkXWBcbiAqIC0gYC8oZGFzaGJvYXJkKS9hY2NvdW50L3BhZ2VgIHRvIGAvYWNjb3VudGBcbiAqIC0gYC91c2VyL1tpZF0vcGFnZWAgdG8gYC91c2VyL1tpZF1gXG4gKiAtIGAvYWNjb3VudC9wYWdlYCB0byBgL2FjY291bnRgXG4gKiAtIGAvcGFnZWAgdG8gYC9gXG4gKiAtIGAvKGRhc2hib2FyZCkvdXNlci9baWRdL3JvdXRlYCB0byBgL3VzZXIvW2lkXWBcbiAqIC0gYC8oZGFzaGJvYXJkKS9hY2NvdW50L3JvdXRlYCB0byBgL2FjY291bnRgXG4gKiAtIGAvdXNlci9baWRdL3JvdXRlYCB0byBgL3VzZXIvW2lkXWBcbiAqIC0gYC9hY2NvdW50L3JvdXRlYCB0byBgL2FjY291bnRgXG4gKiAtIGAvcm91dGVgIHRvIGAvYFxuICogLSBgL2AgdG8gYC9gXG4gKlxuICogQHBhcmFtIHJvdXRlIHRoZSBhcHAgcm91dGUgdG8gbm9ybWFsaXplXG4gKiBAcmV0dXJucyB0aGUgbm9ybWFsaXplZCBwYXRobmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQXBwUGF0aChyb3V0ZTogc3RyaW5nKSB7XG4gIHJldHVybiBlbnN1cmVMZWFkaW5nU2xhc2goXG4gICAgcm91dGUuc3BsaXQoJy8nKS5yZWR1Y2UoKHBhdGhuYW1lLCBzZWdtZW50LCBpbmRleCwgc2VnbWVudHMpID0+IHtcbiAgICAgIC8vIEVtcHR5IHNlZ21lbnRzIGFyZSBpZ25vcmVkLlxuICAgICAgaWYgKCFzZWdtZW50KSB7XG4gICAgICAgIHJldHVybiBwYXRobmFtZVxuICAgICAgfVxuXG4gICAgICAvLyBHcm91cHMgYXJlIGlnbm9yZWQuXG4gICAgICBpZiAoaXNHcm91cFNlZ21lbnQoc2VnbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHBhdGhuYW1lXG4gICAgICB9XG5cbiAgICAgIC8vIFBhcmFsbGVsIHNlZ21lbnRzIGFyZSBpZ25vcmVkLlxuICAgICAgaWYgKHNlZ21lbnRbMF0gPT09ICdAJykge1xuICAgICAgICByZXR1cm4gcGF0aG5hbWVcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGxhc3Qgc2VnbWVudCAoaWYgaXQncyBhIGxlYWYpIHNob3VsZCBiZSBpZ25vcmVkLlxuICAgICAgaWYgKFxuICAgICAgICAoc2VnbWVudCA9PT0gJ3BhZ2UnIHx8IHNlZ21lbnQgPT09ICdyb3V0ZScpICYmXG4gICAgICAgIGluZGV4ID09PSBzZWdtZW50cy5sZW5ndGggLSAxXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHBhdGhuYW1lXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgJHtwYXRobmFtZX0vJHtzZWdtZW50fWBcbiAgICB9LCAnJylcbiAgKVxufVxuXG4vKipcbiAqIFN0cmlwcyB0aGUgYC5yc2NgIGV4dGVuc2lvbiBpZiBpdCdzIGluIHRoZSBwYXRobmFtZS5cbiAqIFNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBvbiBmdWxsIHVybHMgaXQgY2hlY2tzIGA/YCBmb3Igc2VhcmNoUGFyYW1zIGhhbmRsaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUnNjVVJMKHVybDogc3RyaW5nKSB7XG4gIHJldHVybiB1cmwucmVwbGFjZShcbiAgICAvXFwucnNjKCR8XFw/KS8sXG4gICAgLy8gJDEgZW5zdXJlcyBgP2AgaXMgcHJlc2VydmVkXG4gICAgJyQxJ1xuICApXG59XG4iXSwibmFtZXMiOlsibm9ybWFsaXplQXBwUGF0aCIsIm5vcm1hbGl6ZVJzY1VSTCIsInJvdXRlIiwiZW5zdXJlTGVhZGluZ1NsYXNoIiwic3BsaXQiLCJyZWR1Y2UiLCJwYXRobmFtZSIsInNlZ21lbnQiLCJpbmRleCIsInNlZ21lbnRzIiwiaXNHcm91cFNlZ21lbnQiLCJsZW5ndGgiLCJ1cmwiLCJyZXBsYWNlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/app-paths.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/cache-busting-search-param.js":
/*!**********************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/cache-busting-search-param.js ***!
  \**********************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"computeCacheBustingSearchParam\", ({\n    enumerable: true,\n    get: function() {\n        return computeCacheBustingSearchParam;\n    }\n}));\nconst _hash = __webpack_require__(/*! ../../hash */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/hash.js\");\nfunction computeCacheBustingSearchParam(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) {\n    if (prefetchHeader === undefined && segmentPrefetchHeader === undefined && stateTreeHeader === undefined && nextUrlHeader === undefined) {\n        return '';\n    }\n    return (0, _hash.hexHash)([\n        prefetchHeader || '0',\n        segmentPrefetchHeader || '0',\n        stateTreeHeader || '0',\n        nextUrlHeader || '0'\n    ].join(','));\n} //# sourceMappingURL=cache-busting-search-param.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9jYWNoZS1idXN0aW5nLXNlYXJjaC1wYXJhbS5qcyIsIm1hcHBpbmdzIjoiOzs7O2tFQUVnQkE7OztlQUFBQTs7O2tDQUZRO0FBRWpCLFNBQVNBLCtCQUNkQyxjQUE2QyxFQUM3Q0MscUJBQW9ELEVBQ3BEQyxlQUE4QyxFQUM5Q0MsYUFBNEM7SUFFNUMsSUFDRUgsbUJBQW1CSSxhQUNuQkgsMEJBQTBCRyxhQUMxQkYsb0JBQW9CRSxhQUNwQkQsa0JBQWtCQyxXQUNsQjtRQUNBLE9BQU87SUFDVDtJQUNBLE9BQU9DLENBQUFBLEdBQUFBLE1BQUFBLE9BQUFBLEVBQ0w7UUFDRUwsa0JBQWtCO1FBQ2xCQyx5QkFBeUI7UUFDekJDLG1CQUFtQjtRQUNuQkMsaUJBQWlCO0tBQ2xCLENBQUNHLElBQUksQ0FBQztBQUVYIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2NhY2hlLWJ1c3Rpbmctc2VhcmNoLXBhcmFtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhleEhhc2ggfSBmcm9tICcuLi8uLi9oYXNoJ1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUNhY2hlQnVzdGluZ1NlYXJjaFBhcmFtKFxuICBwcmVmZXRjaEhlYWRlcjogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gIHNlZ21lbnRQcmVmZXRjaEhlYWRlcjogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gIHN0YXRlVHJlZUhlYWRlcjogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gIG5leHRVcmxIZWFkZXI6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcge1xuICBpZiAoXG4gICAgcHJlZmV0Y2hIZWFkZXIgPT09IHVuZGVmaW5lZCAmJlxuICAgIHNlZ21lbnRQcmVmZXRjaEhlYWRlciA9PT0gdW5kZWZpbmVkICYmXG4gICAgc3RhdGVUcmVlSGVhZGVyID09PSB1bmRlZmluZWQgJiZcbiAgICBuZXh0VXJsSGVhZGVyID09PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cbiAgcmV0dXJuIGhleEhhc2goXG4gICAgW1xuICAgICAgcHJlZmV0Y2hIZWFkZXIgfHwgJzAnLFxuICAgICAgc2VnbWVudFByZWZldGNoSGVhZGVyIHx8ICcwJyxcbiAgICAgIHN0YXRlVHJlZUhlYWRlciB8fCAnMCcsXG4gICAgICBuZXh0VXJsSGVhZGVyIHx8ICcwJyxcbiAgICBdLmpvaW4oJywnKVxuICApXG59XG4iXSwibmFtZXMiOlsiY29tcHV0ZUNhY2hlQnVzdGluZ1NlYXJjaFBhcmFtIiwicHJlZmV0Y2hIZWFkZXIiLCJzZWdtZW50UHJlZmV0Y2hIZWFkZXIiLCJzdGF0ZVRyZWVIZWFkZXIiLCJuZXh0VXJsSGVhZGVyIiwidW5kZWZpbmVkIiwiaGV4SGFzaCIsImpvaW4iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/cache-busting-search-param.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/compare-states.js":
/*!**********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/compare-states.js ***!
  \**********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"compareRouterStates\", ({\n    enumerable: true,\n    get: function() {\n        return compareRouterStates;\n    }\n}));\nfunction compareRouterStates(a, b) {\n    const stateKeys = Object.keys(a);\n    if (stateKeys.length !== Object.keys(b).length) return false;\n    for(let i = stateKeys.length; i--;){\n        const key = stateKeys[i];\n        if (key === 'query') {\n            const queryKeys = Object.keys(a.query);\n            if (queryKeys.length !== Object.keys(b.query).length) {\n                return false;\n            }\n            for(let j = queryKeys.length; j--;){\n                const queryKey = queryKeys[j];\n                if (!b.query.hasOwnProperty(queryKey) || a.query[queryKey] !== b.query[queryKey]) {\n                    return false;\n                }\n            }\n        } else if (!b.hasOwnProperty(key) || a[key] !== b[key]) {\n            return false;\n        }\n    }\n    return true;\n} //# sourceMappingURL=compare-states.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9jb21wYXJlLXN0YXRlcy5qcyIsIm1hcHBpbmdzIjoiOzs7O3VEQUVnQkE7OztlQUFBQTs7O0FBQVQsU0FBU0Esb0JBQW9CQyxDQUFrQixFQUFFQyxDQUFrQjtJQUN4RSxNQUFNQyxZQUFZQyxPQUFPQyxJQUFJLENBQUNKO0lBQzlCLElBQUlFLFVBQVVHLE1BQU0sS0FBS0YsT0FBT0MsSUFBSSxDQUFDSCxHQUFHSSxNQUFNLEVBQUUsT0FBTztJQUV2RCxJQUFLLElBQUlDLElBQUlKLFVBQVVHLE1BQU0sRUFBRUMsS0FBTztRQUNwQyxNQUFNQyxNQUFNTCxTQUFTLENBQUNJLEVBQUU7UUFDeEIsSUFBSUMsUUFBUSxTQUFTO1lBQ25CLE1BQU1DLFlBQVlMLE9BQU9DLElBQUksQ0FBQ0osRUFBRVMsS0FBSztZQUNyQyxJQUFJRCxVQUFVSCxNQUFNLEtBQUtGLE9BQU9DLElBQUksQ0FBQ0gsRUFBRVEsS0FBSyxFQUFFSixNQUFNLEVBQUU7Z0JBQ3BELE9BQU87WUFDVDtZQUNBLElBQUssSUFBSUssSUFBSUYsVUFBVUgsTUFBTSxFQUFFSyxLQUFPO2dCQUNwQyxNQUFNQyxXQUFXSCxTQUFTLENBQUNFLEVBQUU7Z0JBQzdCLElBQ0UsQ0FBQ1QsRUFBRVEsS0FBSyxDQUFDRyxjQUFjLENBQUNELGFBQ3hCWCxFQUFFUyxLQUFLLENBQUNFLFNBQVMsS0FBS1YsRUFBRVEsS0FBSyxDQUFDRSxTQUFTLEVBQ3ZDO29CQUNBLE9BQU87Z0JBQ1Q7WUFDRjtRQUNGLE9BQU8sSUFDTCxDQUFDVixFQUFFVyxjQUFjLENBQUNMLFFBQ2xCUCxDQUFDLENBQUNPLElBQTZCLEtBQUtOLENBQUMsQ0FBQ00sSUFBNkIsRUFDbkU7WUFDQSxPQUFPO1FBQ1Q7SUFDRjtJQUVBLE9BQU87QUFDVCIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9jb21wYXJlLXN0YXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgUm91dGVyIH0gZnJvbSAnLi4vcm91dGVyJ1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZVJvdXRlclN0YXRlcyhhOiBSb3V0ZXJbJ3N0YXRlJ10sIGI6IFJvdXRlclsnc3RhdGUnXSkge1xuICBjb25zdCBzdGF0ZUtleXMgPSBPYmplY3Qua2V5cyhhKVxuICBpZiAoc3RhdGVLZXlzLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYikubGVuZ3RoKSByZXR1cm4gZmFsc2VcblxuICBmb3IgKGxldCBpID0gc3RhdGVLZXlzLmxlbmd0aDsgaS0tOyApIHtcbiAgICBjb25zdCBrZXkgPSBzdGF0ZUtleXNbaV1cbiAgICBpZiAoa2V5ID09PSAncXVlcnknKSB7XG4gICAgICBjb25zdCBxdWVyeUtleXMgPSBPYmplY3Qua2V5cyhhLnF1ZXJ5KVxuICAgICAgaWYgKHF1ZXJ5S2V5cy5sZW5ndGggIT09IE9iamVjdC5rZXlzKGIucXVlcnkpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGogPSBxdWVyeUtleXMubGVuZ3RoOyBqLS07ICkge1xuICAgICAgICBjb25zdCBxdWVyeUtleSA9IHF1ZXJ5S2V5c1tqXVxuICAgICAgICBpZiAoXG4gICAgICAgICAgIWIucXVlcnkuaGFzT3duUHJvcGVydHkocXVlcnlLZXkpIHx8XG4gICAgICAgICAgYS5xdWVyeVtxdWVyeUtleV0gIT09IGIucXVlcnlbcXVlcnlLZXldXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICFiLmhhc093blByb3BlcnR5KGtleSkgfHxcbiAgICAgIGFba2V5IGFzIGtleW9mIFJvdXRlclsnc3RhdGUnXV0gIT09IGJba2V5IGFzIGtleW9mIFJvdXRlclsnc3RhdGUnXV1cbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG4iXSwibmFtZXMiOlsiY29tcGFyZVJvdXRlclN0YXRlcyIsImEiLCJiIiwic3RhdGVLZXlzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImkiLCJrZXkiLCJxdWVyeUtleXMiLCJxdWVyeSIsImoiLCJxdWVyeUtleSIsImhhc093blByb3BlcnR5Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/compare-states.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/disable-smooth-scroll.js":
/*!*****************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/disable-smooth-scroll.js ***!
  \*****************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"disableSmoothScrollDuringRouteTransition\", ({\n    enumerable: true,\n    get: function() {\n        return disableSmoothScrollDuringRouteTransition;\n    }\n}));\nconst _warnonce = __webpack_require__(/*! ../../utils/warn-once */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/utils/warn-once.js\");\nfunction disableSmoothScrollDuringRouteTransition(fn, options) {\n    if (options === void 0) options = {};\n    // if only the hash is changed, we don't need to disable smooth scrolling\n    // we only care to prevent smooth scrolling when navigating to a new page to avoid jarring UX\n    if (options.onlyHashChange) {\n        fn();\n        return;\n    }\n    const htmlElement = document.documentElement;\n    const hasDataAttribute = htmlElement.dataset.scrollBehavior === 'smooth';\n    // Since this is a breaking change, this is temporarily flagged\n    // and will be false by default.\n    // In the next major (v16), this will be automatically enabled\n    if (false) {} else {\n        // Old behavior: always manipulate styles, but warn about upcoming change\n        // Warn if smooth scrolling is detected but no data attribute is present\n        if ( true && !hasDataAttribute && getComputedStyle(htmlElement).scrollBehavior === 'smooth') {\n            (0, _warnonce.warnOnce)('Detected `scroll-behavior: smooth` on the `<html>` element. In a future version, ' + 'Next.js will no longer automatically disable smooth scrolling during route transitions. ' + 'To prepare for this change, add `data-scroll-behavior=\"smooth\"` to your <html> element. ' + 'Learn more: https://nextjs.org/docs/messages/missing-data-scroll-behavior');\n        }\n    }\n    // Proceed with temporarily disabling smooth scrolling\n    const existing = htmlElement.style.scrollBehavior;\n    htmlElement.style.scrollBehavior = 'auto';\n    if (!options.dontForceLayout) {\n        // In Chrome-based browsers we need to force reflow before calling `scrollTo`.\n        // Otherwise it will not pickup the change in scrollBehavior\n        // More info here: https://github.com/vercel/next.js/issues/40719#issuecomment-1336248042\n        htmlElement.getClientRects();\n    }\n    fn();\n    htmlElement.style.scrollBehavior = existing;\n} //# sourceMappingURL=disable-smooth-scroll.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9kaXNhYmxlLXNtb290aC1zY3JvbGwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs0RUFNZ0JBOzs7ZUFBQUE7OztzQ0FOUztBQU1sQixTQUFTQSx5Q0FDZEMsRUFBYyxFQUNkQyxPQUFxRTtJQUFyRUEsSUFBQUEsWUFBQUEsS0FBQUEsR0FBQUEsVUFBbUUsQ0FBQztJQUVwRSx5RUFBeUU7SUFDekUsNkZBQTZGO0lBQzdGLElBQUlBLFFBQVFDLGNBQWMsRUFBRTtRQUMxQkY7UUFDQTtJQUNGO0lBRUEsTUFBTUcsY0FBY0MsU0FBU0MsZUFBZTtJQUM1QyxNQUFNQyxtQkFBbUJILFlBQVlJLE9BQU8sQ0FBQ0MsY0FBYyxLQUFLO0lBRWhFLCtEQUErRDtJQUMvRCxnQ0FBZ0M7SUFDaEMsOERBQThEO0lBQzlELElBQUlDLEtBQXlDLEVBQUUsRUFNOUMsTUFBTTtRQUNMLHlFQUF5RTtRQUV6RSx3RUFBd0U7UUFDeEUsSUFDRUEsS0FBb0IsSUFDcEIsQ0FBQ0gsb0JBQ0RPLGlCQUFpQlYsYUFBYUssY0FBYyxLQUFLLFVBQ2pEO1lBQ0FNLENBQUFBLEdBQUFBLFVBQUFBLFFBQUFBLEVBQ0Usc0ZBQ0UsNkZBQ0EsNkZBQ0E7UUFFTjtJQUNGO0lBRUEsc0RBQXNEO0lBQ3RELE1BQU1DLFdBQVdaLFlBQVlhLEtBQUssQ0FBQ1IsY0FBYztJQUNqREwsWUFBWWEsS0FBSyxDQUFDUixjQUFjLEdBQUc7SUFDbkMsSUFBSSxDQUFDUCxRQUFRZ0IsZUFBZSxFQUFFO1FBQzVCLDhFQUE4RTtRQUM5RSw0REFBNEQ7UUFDNUQseUZBQXlGO1FBQ3pGZCxZQUFZZSxjQUFjO0lBQzVCO0lBQ0FsQjtJQUNBRyxZQUFZYSxLQUFLLENBQUNSLGNBQWMsR0FBR087QUFDckMiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZGlzYWJsZS1zbW9vdGgtc2Nyb2xsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdhcm5PbmNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvd2Fybi1vbmNlJ1xuXG4vKipcbiAqIFJ1biBmdW5jdGlvbiB3aXRoIGBzY3JvbGwtYmVoYXZpb3I6IGF1dG9gIGFwcGxpZWQgdG8gYDxodG1sLz5gLlxuICogVGhpcyBjc3MgY2hhbmdlIHdpbGwgYmUgcmV2ZXJ0ZWQgYWZ0ZXIgdGhlIGZ1bmN0aW9uIGZpbmlzaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZVNtb290aFNjcm9sbER1cmluZ1JvdXRlVHJhbnNpdGlvbihcbiAgZm46ICgpID0+IHZvaWQsXG4gIG9wdGlvbnM6IHsgZG9udEZvcmNlTGF5b3V0PzogYm9vbGVhbjsgb25seUhhc2hDaGFuZ2U/OiBib29sZWFuIH0gPSB7fVxuKSB7XG4gIC8vIGlmIG9ubHkgdGhlIGhhc2ggaXMgY2hhbmdlZCwgd2UgZG9uJ3QgbmVlZCB0byBkaXNhYmxlIHNtb290aCBzY3JvbGxpbmdcbiAgLy8gd2Ugb25seSBjYXJlIHRvIHByZXZlbnQgc21vb3RoIHNjcm9sbGluZyB3aGVuIG5hdmlnYXRpbmcgdG8gYSBuZXcgcGFnZSB0byBhdm9pZCBqYXJyaW5nIFVYXG4gIGlmIChvcHRpb25zLm9ubHlIYXNoQ2hhbmdlKSB7XG4gICAgZm4oKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgaHRtbEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgY29uc3QgaGFzRGF0YUF0dHJpYnV0ZSA9IGh0bWxFbGVtZW50LmRhdGFzZXQuc2Nyb2xsQmVoYXZpb3IgPT09ICdzbW9vdGgnXG5cbiAgLy8gU2luY2UgdGhpcyBpcyBhIGJyZWFraW5nIGNoYW5nZSwgdGhpcyBpcyB0ZW1wb3JhcmlseSBmbGFnZ2VkXG4gIC8vIGFuZCB3aWxsIGJlIGZhbHNlIGJ5IGRlZmF1bHQuXG4gIC8vIEluIHRoZSBuZXh0IG1ham9yICh2MTYpLCB0aGlzIHdpbGwgYmUgYXV0b21hdGljYWxseSBlbmFibGVkXG4gIGlmIChwcm9jZXNzLmVudi5fX05FWFRfT1BUSU1JWkVfUk9VVEVSX1NDUk9MTCkge1xuICAgIGlmICghaGFzRGF0YUF0dHJpYnV0ZSkge1xuICAgICAgLy8gTm8gc21vb3RoIHNjcm9sbGluZyBjb25maWd1cmVkLCBydW4gZGlyZWN0bHkgd2l0aG91dCBzdHlsZSBtYW5pcHVsYXRpb25cbiAgICAgIGZuKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBPbGQgYmVoYXZpb3I6IGFsd2F5cyBtYW5pcHVsYXRlIHN0eWxlcywgYnV0IHdhcm4gYWJvdXQgdXBjb21pbmcgY2hhbmdlXG5cbiAgICAvLyBXYXJuIGlmIHNtb290aCBzY3JvbGxpbmcgaXMgZGV0ZWN0ZWQgYnV0IG5vIGRhdGEgYXR0cmlidXRlIGlzIHByZXNlbnRcbiAgICBpZiAoXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyAmJlxuICAgICAgIWhhc0RhdGFBdHRyaWJ1dGUgJiZcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoaHRtbEVsZW1lbnQpLnNjcm9sbEJlaGF2aW9yID09PSAnc21vb3RoJ1xuICAgICkge1xuICAgICAgd2Fybk9uY2UoXG4gICAgICAgICdEZXRlY3RlZCBgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGhgIG9uIHRoZSBgPGh0bWw+YCBlbGVtZW50LiBJbiBhIGZ1dHVyZSB2ZXJzaW9uLCAnICtcbiAgICAgICAgICAnTmV4dC5qcyB3aWxsIG5vIGxvbmdlciBhdXRvbWF0aWNhbGx5IGRpc2FibGUgc21vb3RoIHNjcm9sbGluZyBkdXJpbmcgcm91dGUgdHJhbnNpdGlvbnMuICcgK1xuICAgICAgICAgICdUbyBwcmVwYXJlIGZvciB0aGlzIGNoYW5nZSwgYWRkIGBkYXRhLXNjcm9sbC1iZWhhdmlvcj1cInNtb290aFwiYCB0byB5b3VyIDxodG1sPiBlbGVtZW50LiAnICtcbiAgICAgICAgICAnTGVhcm4gbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvbWlzc2luZy1kYXRhLXNjcm9sbC1iZWhhdmlvcidcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyBQcm9jZWVkIHdpdGggdGVtcG9yYXJpbHkgZGlzYWJsaW5nIHNtb290aCBzY3JvbGxpbmdcbiAgY29uc3QgZXhpc3RpbmcgPSBodG1sRWxlbWVudC5zdHlsZS5zY3JvbGxCZWhhdmlvclxuICBodG1sRWxlbWVudC5zdHlsZS5zY3JvbGxCZWhhdmlvciA9ICdhdXRvJ1xuICBpZiAoIW9wdGlvbnMuZG9udEZvcmNlTGF5b3V0KSB7XG4gICAgLy8gSW4gQ2hyb21lLWJhc2VkIGJyb3dzZXJzIHdlIG5lZWQgdG8gZm9yY2UgcmVmbG93IGJlZm9yZSBjYWxsaW5nIGBzY3JvbGxUb2AuXG4gICAgLy8gT3RoZXJ3aXNlIGl0IHdpbGwgbm90IHBpY2t1cCB0aGUgY2hhbmdlIGluIHNjcm9sbEJlaGF2aW9yXG4gICAgLy8gTW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvbmV4dC5qcy9pc3N1ZXMvNDA3MTkjaXNzdWVjb21tZW50LTEzMzYyNDgwNDJcbiAgICBodG1sRWxlbWVudC5nZXRDbGllbnRSZWN0cygpXG4gIH1cbiAgZm4oKVxuICBodG1sRWxlbWVudC5zdHlsZS5zY3JvbGxCZWhhdmlvciA9IGV4aXN0aW5nXG59XG4iXSwibmFtZXMiOlsiZGlzYWJsZVNtb290aFNjcm9sbER1cmluZ1JvdXRlVHJhbnNpdGlvbiIsImZuIiwib3B0aW9ucyIsIm9ubHlIYXNoQ2hhbmdlIiwiaHRtbEVsZW1lbnQiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImhhc0RhdGFBdHRyaWJ1dGUiLCJkYXRhc2V0Iiwic2Nyb2xsQmVoYXZpb3IiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX09QVElNSVpFX1JPVVRFUl9TQ1JPTEwiLCJOT0RFX0VOViIsImdldENvbXB1dGVkU3R5bGUiLCJ3YXJuT25jZSIsImV4aXN0aW5nIiwic3R5bGUiLCJkb250Rm9yY2VMYXlvdXQiLCJnZXRDbGllbnRSZWN0cyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/disable-smooth-scroll.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js":
/*!*********************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js ***!
  \*********************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"formatNextPathnameInfo\", ({\n    enumerable: true,\n    get: function() {\n        return formatNextPathnameInfo;\n    }\n}));\nconst _removetrailingslash = __webpack_require__(/*! ./remove-trailing-slash */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _addpathprefix = __webpack_require__(/*! ./add-path-prefix */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js\");\nconst _addpathsuffix = __webpack_require__(/*! ./add-path-suffix */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js\");\nconst _addlocale = __webpack_require__(/*! ./add-locale */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/add-locale.js\");\nfunction formatNextPathnameInfo(info) {\n    let pathname = (0, _addlocale.addLocale)(info.pathname, info.locale, info.buildId ? undefined : info.defaultLocale, info.ignorePrefix);\n    if (info.buildId || !info.trailingSlash) {\n        pathname = (0, _removetrailingslash.removeTrailingSlash)(pathname);\n    }\n    if (info.buildId) {\n        pathname = (0, _addpathsuffix.addPathSuffix)((0, _addpathprefix.addPathPrefix)(pathname, \"/_next/data/\" + info.buildId), info.pathname === '/' ? 'index.json' : '.json');\n    }\n    pathname = (0, _addpathprefix.addPathPrefix)(pathname, info.basePath);\n    return !info.buildId && info.trailingSlash ? !pathname.endsWith('/') ? (0, _addpathsuffix.addPathSuffix)(pathname, '/') : pathname : (0, _removetrailingslash.removeTrailingSlash)(pathname);\n} //# sourceMappingURL=format-next-pathname-info.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9mb3JtYXQtbmV4dC1wYXRobmFtZS1pbmZvLmpzIiwibWFwcGluZ3MiOiI7Ozs7MERBV2dCQTs7O2VBQUFBOzs7aURBVm9COzJDQUNOOzJDQUNBO3VDQUNKO0FBT25CLFNBQVNBLHVCQUF1QkMsSUFBa0I7SUFDdkQsSUFBSUMsV0FBV0MsQ0FBQUEsR0FBQUEsV0FBQUEsU0FBQUEsRUFDYkYsS0FBS0MsUUFBUSxFQUNiRCxLQUFLRyxNQUFNLEVBQ1hILEtBQUtJLE9BQU8sR0FBR0MsWUFBWUwsS0FBS00sYUFBYSxFQUM3Q04sS0FBS08sWUFBWTtJQUduQixJQUFJUCxLQUFLSSxPQUFPLElBQUksQ0FBQ0osS0FBS1EsYUFBYSxFQUFFO1FBQ3ZDUCxXQUFXUSxDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQUFBLEVBQW9CUjtJQUNqQztJQUVBLElBQUlELEtBQUtJLE9BQU8sRUFBRTtRQUNoQkgsV0FBV1MsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFDVEMsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBY1YsVUFBVyxpQkFBY0QsS0FBS0ksT0FBTyxHQUNuREosS0FBS0MsUUFBUSxLQUFLLE1BQU0sZUFBZTtJQUUzQztJQUVBQSxXQUFXVSxDQUFBQSxHQUFBQSxlQUFBQSxhQUFBQSxFQUFjVixVQUFVRCxLQUFLWSxRQUFRO0lBQ2hELE9BQU8sQ0FBQ1osS0FBS0ksT0FBTyxJQUFJSixLQUFLUSxhQUFhLEdBQ3RDLENBQUNQLFNBQVNZLFFBQVEsQ0FBQyxPQUNqQkgsQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBY1QsVUFBVSxPQUN4QkEsV0FDRlEsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFBQSxFQUFvQlI7QUFDMUIiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZm9ybWF0LW5leHQtcGF0aG5hbWUtaW5mby50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE5leHRQYXRobmFtZUluZm8gfSBmcm9tICcuL2dldC1uZXh0LXBhdGhuYW1lLWluZm8nXG5pbXBvcnQgeyByZW1vdmVUcmFpbGluZ1NsYXNoIH0gZnJvbSAnLi9yZW1vdmUtdHJhaWxpbmctc2xhc2gnXG5pbXBvcnQgeyBhZGRQYXRoUHJlZml4IH0gZnJvbSAnLi9hZGQtcGF0aC1wcmVmaXgnXG5pbXBvcnQgeyBhZGRQYXRoU3VmZml4IH0gZnJvbSAnLi9hZGQtcGF0aC1zdWZmaXgnXG5pbXBvcnQgeyBhZGRMb2NhbGUgfSBmcm9tICcuL2FkZC1sb2NhbGUnXG5cbmludGVyZmFjZSBFeHRlbmRlZEluZm8gZXh0ZW5kcyBOZXh0UGF0aG5hbWVJbmZvIHtcbiAgZGVmYXVsdExvY2FsZT86IHN0cmluZ1xuICBpZ25vcmVQcmVmaXg/OiBib29sZWFuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROZXh0UGF0aG5hbWVJbmZvKGluZm86IEV4dGVuZGVkSW5mbykge1xuICBsZXQgcGF0aG5hbWUgPSBhZGRMb2NhbGUoXG4gICAgaW5mby5wYXRobmFtZSxcbiAgICBpbmZvLmxvY2FsZSxcbiAgICBpbmZvLmJ1aWxkSWQgPyB1bmRlZmluZWQgOiBpbmZvLmRlZmF1bHRMb2NhbGUsXG4gICAgaW5mby5pZ25vcmVQcmVmaXhcbiAgKVxuXG4gIGlmIChpbmZvLmJ1aWxkSWQgfHwgIWluZm8udHJhaWxpbmdTbGFzaCkge1xuICAgIHBhdGhuYW1lID0gcmVtb3ZlVHJhaWxpbmdTbGFzaChwYXRobmFtZSlcbiAgfVxuXG4gIGlmIChpbmZvLmJ1aWxkSWQpIHtcbiAgICBwYXRobmFtZSA9IGFkZFBhdGhTdWZmaXgoXG4gICAgICBhZGRQYXRoUHJlZml4KHBhdGhuYW1lLCBgL19uZXh0L2RhdGEvJHtpbmZvLmJ1aWxkSWR9YCksXG4gICAgICBpbmZvLnBhdGhuYW1lID09PSAnLycgPyAnaW5kZXguanNvbicgOiAnLmpzb24nXG4gICAgKVxuICB9XG5cbiAgcGF0aG5hbWUgPSBhZGRQYXRoUHJlZml4KHBhdGhuYW1lLCBpbmZvLmJhc2VQYXRoKVxuICByZXR1cm4gIWluZm8uYnVpbGRJZCAmJiBpbmZvLnRyYWlsaW5nU2xhc2hcbiAgICA/ICFwYXRobmFtZS5lbmRzV2l0aCgnLycpXG4gICAgICA/IGFkZFBhdGhTdWZmaXgocGF0aG5hbWUsICcvJylcbiAgICAgIDogcGF0aG5hbWVcbiAgICA6IHJlbW92ZVRyYWlsaW5nU2xhc2gocGF0aG5hbWUpXG59XG4iXSwibmFtZXMiOlsiZm9ybWF0TmV4dFBhdGhuYW1lSW5mbyIsImluZm8iLCJwYXRobmFtZSIsImFkZExvY2FsZSIsImxvY2FsZSIsImJ1aWxkSWQiLCJ1bmRlZmluZWQiLCJkZWZhdWx0TG9jYWxlIiwiaWdub3JlUHJlZml4IiwidHJhaWxpbmdTbGFzaCIsInJlbW92ZVRyYWlsaW5nU2xhc2giLCJhZGRQYXRoU3VmZml4IiwiYWRkUGF0aFByZWZpeCIsImJhc2VQYXRoIiwiZW5kc1dpdGgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/format-url.js":
/*!******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/format-url.js ***!
  \******************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("// Format function modified from nodejs\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    formatUrl: function() {\n        return formatUrl;\n    },\n    formatWithValidation: function() {\n        return formatWithValidation;\n    },\n    urlObjectKeys: function() {\n        return urlObjectKeys;\n    }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _querystring = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ./querystring */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/querystring.js\"));\nconst slashedProtocols = /https?|ftp|gopher|file/;\nfunction formatUrl(urlObj) {\n    let { auth, hostname } = urlObj;\n    let protocol = urlObj.protocol || '';\n    let pathname = urlObj.pathname || '';\n    let hash = urlObj.hash || '';\n    let query = urlObj.query || '';\n    let host = false;\n    auth = auth ? encodeURIComponent(auth).replace(/%3A/i, ':') + '@' : '';\n    if (urlObj.host) {\n        host = auth + urlObj.host;\n    } else if (hostname) {\n        host = auth + (~hostname.indexOf(':') ? \"[\" + hostname + \"]\" : hostname);\n        if (urlObj.port) {\n            host += ':' + urlObj.port;\n        }\n    }\n    if (query && typeof query === 'object') {\n        query = String(_querystring.urlQueryToSearchParams(query));\n    }\n    let search = urlObj.search || query && \"?\" + query || '';\n    if (protocol && !protocol.endsWith(':')) protocol += ':';\n    if (urlObj.slashes || (!protocol || slashedProtocols.test(protocol)) && host !== false) {\n        host = '//' + (host || '');\n        if (pathname && pathname[0] !== '/') pathname = '/' + pathname;\n    } else if (!host) {\n        host = '';\n    }\n    if (hash && hash[0] !== '#') hash = '#' + hash;\n    if (search && search[0] !== '?') search = '?' + search;\n    pathname = pathname.replace(/[?#]/g, encodeURIComponent);\n    search = search.replace('#', '%23');\n    return \"\" + protocol + host + pathname + search + hash;\n}\nconst urlObjectKeys = [\n    'auth',\n    'hash',\n    'host',\n    'hostname',\n    'href',\n    'path',\n    'pathname',\n    'port',\n    'protocol',\n    'query',\n    'search',\n    'slashes'\n];\nfunction formatWithValidation(url) {\n    if (true) {\n        if (url !== null && typeof url === 'object') {\n            Object.keys(url).forEach((key)=>{\n                if (!urlObjectKeys.includes(key)) {\n                    console.warn(\"Unknown key passed via urlObject into url.format: \" + key);\n                }\n            });\n        }\n    }\n    return formatUrl(url);\n} //# sourceMappingURL=format-url.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9mb3JtYXQtdXJsLmpzIiwibWFwcGluZ3MiOiJBQUFBLHVDQUF1QztBQUN2QyxzREFBc0Q7QUFDdEQsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSxnRUFBZ0U7QUFDaEUsc0VBQXNFO0FBQ3RFLHNFQUFzRTtBQUN0RSw0RUFBNEU7QUFDNUUscUVBQXFFO0FBQ3JFLHdCQUF3QjtBQUN4QixFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLHlEQUF5RDtBQUN6RCxFQUFFO0FBQ0YsMEVBQTBFO0FBQzFFLDZEQUE2RDtBQUM3RCw0RUFBNEU7QUFDNUUsMkVBQTJFO0FBQzNFLHdFQUF3RTtBQUN4RSw0RUFBNEU7QUFDNUUseUNBQXlDOzs7Ozs7Ozs7Ozs7O0lBUXpCQSxTQUFTO2VBQVRBOztJQTZEQUMsb0JBQW9CO2VBQXBCQTs7SUFmSEMsYUFBYTtlQUFiQTs7OzttRkFsRGdCO0FBRTdCLE1BQU1DLG1CQUFtQjtBQUVsQixTQUFTSCxVQUFVSSxNQUFpQjtJQUN6QyxJQUFJLEVBQUVDLElBQUksRUFBRUMsUUFBUSxFQUFFLEdBQUdGO0lBQ3pCLElBQUlHLFdBQVdILE9BQU9HLFFBQVEsSUFBSTtJQUNsQyxJQUFJQyxXQUFXSixPQUFPSSxRQUFRLElBQUk7SUFDbEMsSUFBSUMsT0FBT0wsT0FBT0ssSUFBSSxJQUFJO0lBQzFCLElBQUlDLFFBQVFOLE9BQU9NLEtBQUssSUFBSTtJQUM1QixJQUFJQyxPQUF1QjtJQUUzQk4sT0FBT0EsT0FBT08sbUJBQW1CUCxNQUFNUSxPQUFPLENBQUMsUUFBUSxPQUFPLE1BQU07SUFFcEUsSUFBSVQsT0FBT08sSUFBSSxFQUFFO1FBQ2ZBLE9BQU9OLE9BQU9ELE9BQU9PLElBQUk7SUFDM0IsT0FBTyxJQUFJTCxVQUFVO1FBQ25CSyxPQUFPTixPQUFRLEVBQUNDLFNBQVNRLE9BQU8sQ0FBQyxPQUFRLE1BQUdSLFdBQVMsTUFBS0EsUUFBQUEsQ0FBTztRQUNqRSxJQUFJRixPQUFPVyxJQUFJLEVBQUU7WUFDZkosUUFBUSxNQUFNUCxPQUFPVyxJQUFJO1FBQzNCO0lBQ0Y7SUFFQSxJQUFJTCxTQUFTLE9BQU9BLFVBQVUsVUFBVTtRQUN0Q0EsUUFBUU0sT0FBT0MsYUFBWUMsc0JBQXNCLENBQUNSO0lBQ3BEO0lBRUEsSUFBSVMsU0FBU2YsT0FBT2UsTUFBTSxJQUFLVCxTQUFVLE1BQUdBLFNBQVk7SUFFeEQsSUFBSUgsWUFBWSxDQUFDQSxTQUFTYSxRQUFRLENBQUMsTUFBTWIsWUFBWTtJQUVyRCxJQUNFSCxPQUFPaUIsT0FBTyxJQUNaLEVBQUNkLFlBQVlKLGlCQUFpQm1CLElBQUksQ0FBQ2YsU0FBQUEsQ0FBUSxJQUFNSSxTQUFTLE9BQzVEO1FBQ0FBLE9BQU8sT0FBUUEsQ0FBQUEsUUFBUSxHQUFDO1FBQ3hCLElBQUlILFlBQVlBLFFBQVEsQ0FBQyxFQUFFLEtBQUssS0FBS0EsV0FBVyxNQUFNQTtJQUN4RCxPQUFPLElBQUksQ0FBQ0csTUFBTTtRQUNoQkEsT0FBTztJQUNUO0lBRUEsSUFBSUYsUUFBUUEsSUFBSSxDQUFDLEVBQUUsS0FBSyxLQUFLQSxPQUFPLE1BQU1BO0lBQzFDLElBQUlVLFVBQVVBLE1BQU0sQ0FBQyxFQUFFLEtBQUssS0FBS0EsU0FBUyxNQUFNQTtJQUVoRFgsV0FBV0EsU0FBU0ssT0FBTyxDQUFDLFNBQVNEO0lBQ3JDTyxTQUFTQSxPQUFPTixPQUFPLENBQUMsS0FBSztJQUU3QixPQUFRLEtBQUVOLFdBQVdJLE9BQU9ILFdBQVdXLFNBQVNWO0FBQ2xEO0FBRU8sTUFBTVAsZ0JBQWdCO0lBQzNCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNEO0FBRU0sU0FBU0QscUJBQXFCc0IsR0FBYztJQUNqRCxJQUFJQyxJQUFvQixFQUFvQjtRQUMxQyxJQUFJRCxRQUFRLFFBQVEsT0FBT0EsUUFBUSxVQUFVO1lBQzNDSSxPQUFPQyxJQUFJLENBQUNMLEtBQUtNLE9BQU8sQ0FBQyxDQUFDQztnQkFDeEIsSUFBSSxDQUFDNUIsY0FBYzZCLFFBQVEsQ0FBQ0QsTUFBTTtvQkFDaENFLFFBQVFDLElBQUksQ0FDVCx1REFBb0RIO2dCQUV6RDtZQUNGO1FBQ0Y7SUFDRjtJQUVBLE9BQU85QixVQUFVdUI7QUFDbkIiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZm9ybWF0LXVybC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGb3JtYXQgZnVuY3Rpb24gbW9kaWZpZWQgZnJvbSBub2RlanNcbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQgdHlwZSB7IFVybE9iamVjdCB9IGZyb20gJ3VybCdcbmltcG9ydCB0eXBlIHsgUGFyc2VkVXJsUXVlcnkgfSBmcm9tICdxdWVyeXN0cmluZydcbmltcG9ydCAqIGFzIHF1ZXJ5c3RyaW5nIGZyb20gJy4vcXVlcnlzdHJpbmcnXG5cbmNvbnN0IHNsYXNoZWRQcm90b2NvbHMgPSAvaHR0cHM/fGZ0cHxnb3BoZXJ8ZmlsZS9cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFVybCh1cmxPYmo6IFVybE9iamVjdCkge1xuICBsZXQgeyBhdXRoLCBob3N0bmFtZSB9ID0gdXJsT2JqXG4gIGxldCBwcm90b2NvbCA9IHVybE9iai5wcm90b2NvbCB8fCAnJ1xuICBsZXQgcGF0aG5hbWUgPSB1cmxPYmoucGF0aG5hbWUgfHwgJydcbiAgbGV0IGhhc2ggPSB1cmxPYmouaGFzaCB8fCAnJ1xuICBsZXQgcXVlcnkgPSB1cmxPYmoucXVlcnkgfHwgJydcbiAgbGV0IGhvc3Q6IHN0cmluZyB8IGZhbHNlID0gZmFsc2VcblxuICBhdXRoID0gYXV0aCA/IGVuY29kZVVSSUNvbXBvbmVudChhdXRoKS5yZXBsYWNlKC8lM0EvaSwgJzonKSArICdAJyA6ICcnXG5cbiAgaWYgKHVybE9iai5ob3N0KSB7XG4gICAgaG9zdCA9IGF1dGggKyB1cmxPYmouaG9zdFxuICB9IGVsc2UgaWYgKGhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAofmhvc3RuYW1lLmluZGV4T2YoJzonKSA/IGBbJHtob3N0bmFtZX1dYCA6IGhvc3RuYW1lKVxuICAgIGlmICh1cmxPYmoucG9ydCkge1xuICAgICAgaG9zdCArPSAnOicgKyB1cmxPYmoucG9ydFxuICAgIH1cbiAgfVxuXG4gIGlmIChxdWVyeSAmJiB0eXBlb2YgcXVlcnkgPT09ICdvYmplY3QnKSB7XG4gICAgcXVlcnkgPSBTdHJpbmcocXVlcnlzdHJpbmcudXJsUXVlcnlUb1NlYXJjaFBhcmFtcyhxdWVyeSBhcyBQYXJzZWRVcmxRdWVyeSkpXG4gIH1cblxuICBsZXQgc2VhcmNoID0gdXJsT2JqLnNlYXJjaCB8fCAocXVlcnkgJiYgYD8ke3F1ZXJ5fWApIHx8ICcnXG5cbiAgaWYgKHByb3RvY29sICYmICFwcm90b2NvbC5lbmRzV2l0aCgnOicpKSBwcm90b2NvbCArPSAnOidcblxuICBpZiAoXG4gICAgdXJsT2JqLnNsYXNoZXMgfHxcbiAgICAoKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xzLnRlc3QocHJvdG9jb2wpKSAmJiBob3N0ICE9PSBmYWxzZSlcbiAgKSB7XG4gICAgaG9zdCA9ICcvLycgKyAoaG9zdCB8fCAnJylcbiAgICBpZiAocGF0aG5hbWUgJiYgcGF0aG5hbWVbMF0gIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZVxuICB9IGVsc2UgaWYgKCFob3N0KSB7XG4gICAgaG9zdCA9ICcnXG4gIH1cblxuICBpZiAoaGFzaCAmJiBoYXNoWzBdICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoXG4gIGlmIChzZWFyY2ggJiYgc2VhcmNoWzBdICE9PSAnPycpIHNlYXJjaCA9ICc/JyArIHNlYXJjaFxuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBlbmNvZGVVUklDb21wb25lbnQpXG4gIHNlYXJjaCA9IHNlYXJjaC5yZXBsYWNlKCcjJywgJyUyMycpXG5cbiAgcmV0dXJuIGAke3Byb3RvY29sfSR7aG9zdH0ke3BhdGhuYW1lfSR7c2VhcmNofSR7aGFzaH1gXG59XG5cbmV4cG9ydCBjb25zdCB1cmxPYmplY3RLZXlzID0gW1xuICAnYXV0aCcsXG4gICdoYXNoJyxcbiAgJ2hvc3QnLFxuICAnaG9zdG5hbWUnLFxuICAnaHJlZicsXG4gICdwYXRoJyxcbiAgJ3BhdGhuYW1lJyxcbiAgJ3BvcnQnLFxuICAncHJvdG9jb2wnLFxuICAncXVlcnknLFxuICAnc2VhcmNoJyxcbiAgJ3NsYXNoZXMnLFxuXVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0V2l0aFZhbGlkYXRpb24odXJsOiBVcmxPYmplY3QpOiBzdHJpbmcge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICBpZiAodXJsICE9PSBudWxsICYmIHR5cGVvZiB1cmwgPT09ICdvYmplY3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyh1cmwpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoIXVybE9iamVjdEtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBVbmtub3duIGtleSBwYXNzZWQgdmlhIHVybE9iamVjdCBpbnRvIHVybC5mb3JtYXQ6ICR7a2V5fWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvcm1hdFVybCh1cmwpXG59XG4iXSwibmFtZXMiOlsiZm9ybWF0VXJsIiwiZm9ybWF0V2l0aFZhbGlkYXRpb24iLCJ1cmxPYmplY3RLZXlzIiwic2xhc2hlZFByb3RvY29scyIsInVybE9iaiIsImF1dGgiLCJob3N0bmFtZSIsInByb3RvY29sIiwicGF0aG5hbWUiLCJoYXNoIiwicXVlcnkiLCJob3N0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZSIsImluZGV4T2YiLCJwb3J0IiwiU3RyaW5nIiwicXVlcnlzdHJpbmciLCJ1cmxRdWVyeVRvU2VhcmNoUGFyYW1zIiwic2VhcmNoIiwiZW5kc1dpdGgiLCJzbGFzaGVzIiwidGVzdCIsInVybCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwiaW5jbHVkZXMiLCJjb25zb2xlIiwid2FybiJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/format-url.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js":
/*!*********************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js ***!
  \*********************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("// Translates a logical route into its pages asset path (relative from a common prefix)\n// \"asset path\" being its javascript file, data file, prerendered html,...\n\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n    enumerable: true,\n    get: function() {\n        return getAssetPathFromRoute;\n    }\n}));\nfunction getAssetPathFromRoute(route, ext) {\n    if (ext === void 0) ext = '';\n    const path = route === '/' ? '/index' : /^\\/index(\\/|$)/.test(route) ? \"/index\" + route : route;\n    return path + ext;\n} //# sourceMappingURL=get-asset-path-from-route.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9nZXQtYXNzZXQtcGF0aC1mcm9tLXJvdXRlLmpzIiwibWFwcGluZ3MiOiJBQUFBLHVGQUF1RjtBQUN2RiwwRUFBMEU7Ozs7OzJDQUMxRTs7O2VBQXdCQTs7O0FBQVQsU0FBU0Esc0JBQ3RCQyxLQUFhLEVBQ2JDLEdBQWdCO0lBQWhCQSxJQUFBQSxRQUFBQSxLQUFBQSxHQUFBQSxNQUFjO0lBRWQsTUFBTUMsT0FDSkYsVUFBVSxNQUNOLFdBQ0EsaUJBQWlCRyxJQUFJLENBQUNILFNBQ25CLFdBQVFBLFFBQ1RBO0lBQ1IsT0FBT0UsT0FBT0Q7QUFDaEIiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZ2V0LWFzc2V0LXBhdGgtZnJvbS1yb3V0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUcmFuc2xhdGVzIGEgbG9naWNhbCByb3V0ZSBpbnRvIGl0cyBwYWdlcyBhc3NldCBwYXRoIChyZWxhdGl2ZSBmcm9tIGEgY29tbW9uIHByZWZpeClcbi8vIFwiYXNzZXQgcGF0aFwiIGJlaW5nIGl0cyBqYXZhc2NyaXB0IGZpbGUsIGRhdGEgZmlsZSwgcHJlcmVuZGVyZWQgaHRtbCwuLi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFzc2V0UGF0aEZyb21Sb3V0ZShcbiAgcm91dGU6IHN0cmluZyxcbiAgZXh0OiBzdHJpbmcgPSAnJ1xuKTogc3RyaW5nIHtcbiAgY29uc3QgcGF0aCA9XG4gICAgcm91dGUgPT09ICcvJ1xuICAgICAgPyAnL2luZGV4J1xuICAgICAgOiAvXlxcL2luZGV4KFxcL3wkKS8udGVzdChyb3V0ZSlcbiAgICAgICAgPyBgL2luZGV4JHtyb3V0ZX1gXG4gICAgICAgIDogcm91dGVcbiAgcmV0dXJuIHBhdGggKyBleHRcbn1cbiJdLCJuYW1lcyI6WyJnZXRBc3NldFBhdGhGcm9tUm91dGUiLCJyb3V0ZSIsImV4dCIsInBhdGgiLCJ0ZXN0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js":
/*!******************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js ***!
  \******************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"getNextPathnameInfo\", ({\n    enumerable: true,\n    get: function() {\n        return getNextPathnameInfo;\n    }\n}));\nconst _normalizelocalepath = __webpack_require__(/*! ../../i18n/normalize-locale-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\");\nconst _removepathprefix = __webpack_require__(/*! ./remove-path-prefix */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js\");\nconst _pathhasprefix = __webpack_require__(/*! ./path-has-prefix */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nfunction getNextPathnameInfo(pathname, options) {\n    var _options_nextConfig;\n    const { basePath, i18n, trailingSlash } = (_options_nextConfig = options.nextConfig) != null ? _options_nextConfig : {};\n    const info = {\n        pathname,\n        trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash\n    };\n    if (basePath && (0, _pathhasprefix.pathHasPrefix)(info.pathname, basePath)) {\n        info.pathname = (0, _removepathprefix.removePathPrefix)(info.pathname, basePath);\n        info.basePath = basePath;\n    }\n    let pathnameNoDataPrefix = info.pathname;\n    if (info.pathname.startsWith('/_next/data/') && info.pathname.endsWith('.json')) {\n        const paths = info.pathname.replace(/^\\/_next\\/data\\//, '').replace(/\\.json$/, '').split('/');\n        const buildId = paths[0];\n        info.buildId = buildId;\n        pathnameNoDataPrefix = paths[1] !== 'index' ? \"/\" + paths.slice(1).join('/') : '/';\n        // update pathname with normalized if enabled although\n        // we use normalized to populate locale info still\n        if (options.parseData === true) {\n            info.pathname = pathnameNoDataPrefix;\n        }\n    }\n    // If provided, use the locale route normalizer to detect the locale instead\n    // of the function below.\n    if (i18n) {\n        let result = options.i18nProvider ? options.i18nProvider.analyze(info.pathname) : (0, _normalizelocalepath.normalizeLocalePath)(info.pathname, i18n.locales);\n        info.locale = result.detectedLocale;\n        var _result_pathname;\n        info.pathname = (_result_pathname = result.pathname) != null ? _result_pathname : info.pathname;\n        if (!result.detectedLocale && info.buildId) {\n            result = options.i18nProvider ? options.i18nProvider.analyze(pathnameNoDataPrefix) : (0, _normalizelocalepath.normalizeLocalePath)(pathnameNoDataPrefix, i18n.locales);\n            if (result.detectedLocale) {\n                info.locale = result.detectedLocale;\n            }\n        }\n    }\n    return info;\n} //# sourceMappingURL=get-next-pathname-info.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9nZXQtbmV4dC1wYXRobmFtZS1pbmZvLmpzIiwibWFwcGluZ3MiOiI7Ozs7dURBb0RnQkE7OztlQUFBQTs7O2lEQXBEb0I7OENBQ0g7MkNBQ0g7QUFrRHZCLFNBQVNBLG9CQUNkQyxRQUFnQixFQUNoQkMsT0FBZ0I7UUFFMEJBO0lBQTFDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxJQUFJLEVBQUVDLGFBQWEsRUFBRSxHQUFHSCxDQUFBQSxzQkFBQUEsUUFBUUksVUFBQUEsS0FBVSxPQUFsQkosc0JBQXNCLENBQUM7SUFDakUsTUFBTUssT0FBeUI7UUFDN0JOO1FBQ0FJLGVBQWVKLGFBQWEsTUFBTUEsU0FBU08sUUFBUSxDQUFDLE9BQU9IO0lBQzdEO0lBRUEsSUFBSUYsWUFBWU0sQ0FBQUEsR0FBQUEsZUFBQUEsYUFBQUEsRUFBY0YsS0FBS04sUUFBUSxFQUFFRSxXQUFXO1FBQ3RESSxLQUFLTixRQUFRLEdBQUdTLENBQUFBLEdBQUFBLGtCQUFBQSxnQkFBQUEsRUFBaUJILEtBQUtOLFFBQVEsRUFBRUU7UUFDaERJLEtBQUtKLFFBQVEsR0FBR0E7SUFDbEI7SUFDQSxJQUFJUSx1QkFBdUJKLEtBQUtOLFFBQVE7SUFFeEMsSUFDRU0sS0FBS04sUUFBUSxDQUFDVyxVQUFVLENBQUMsbUJBQ3pCTCxLQUFLTixRQUFRLENBQUNPLFFBQVEsQ0FBQyxVQUN2QjtRQUNBLE1BQU1LLFFBQVFOLEtBQUtOLFFBQVEsQ0FDeEJhLE9BQU8sQ0FBQyxvQkFBb0IsSUFDNUJBLE9BQU8sQ0FBQyxXQUFXLElBQ25CQyxLQUFLLENBQUM7UUFFVCxNQUFNQyxVQUFVSCxLQUFLLENBQUMsRUFBRTtRQUN4Qk4sS0FBS1MsT0FBTyxHQUFHQTtRQUNmTCx1QkFDRUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxVQUFXLE1BQUdBLE1BQU1JLEtBQUssQ0FBQyxHQUFHQyxJQUFJLENBQUMsT0FBUztRQUUxRCxzREFBc0Q7UUFDdEQsa0RBQWtEO1FBQ2xELElBQUloQixRQUFRaUIsU0FBUyxLQUFLLE1BQU07WUFDOUJaLEtBQUtOLFFBQVEsR0FBR1U7UUFDbEI7SUFDRjtJQUVBLDRFQUE0RTtJQUM1RSx5QkFBeUI7SUFDekIsSUFBSVAsTUFBTTtRQUNSLElBQUlnQixTQUFTbEIsUUFBUW1CLFlBQVksR0FDN0JuQixRQUFRbUIsWUFBWSxDQUFDQyxPQUFPLENBQUNmLEtBQUtOLFFBQVEsSUFDMUNzQixDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQUFBLEVBQW9CaEIsS0FBS04sUUFBUSxFQUFFRyxLQUFLb0IsT0FBTztRQUVuRGpCLEtBQUtrQixNQUFNLEdBQUdMLE9BQU9NLGNBQWM7WUFDbkJOO1FBQWhCYixLQUFLTixRQUFRLEdBQUdtQixDQUFBQSxtQkFBQUEsT0FBT25CLFFBQUFBLEtBQVEsT0FBZm1CLG1CQUFtQmIsS0FBS04sUUFBUTtRQUVoRCxJQUFJLENBQUNtQixPQUFPTSxjQUFjLElBQUluQixLQUFLUyxPQUFPLEVBQUU7WUFDMUNJLFNBQVNsQixRQUFRbUIsWUFBWSxHQUN6Qm5CLFFBQVFtQixZQUFZLENBQUNDLE9BQU8sQ0FBQ1gsd0JBQzdCWSxDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQUFBLEVBQW9CWixzQkFBc0JQLEtBQUtvQixPQUFPO1lBRTFELElBQUlKLE9BQU9NLGNBQWMsRUFBRTtnQkFDekJuQixLQUFLa0IsTUFBTSxHQUFHTCxPQUFPTSxjQUFjO1lBQ3JDO1FBQ0Y7SUFDRjtJQUNBLE9BQU9uQjtBQUNUIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2dldC1uZXh0LXBhdGhuYW1lLWluZm8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbm9ybWFsaXplTG9jYWxlUGF0aCB9IGZyb20gJy4uLy4uL2kxOG4vbm9ybWFsaXplLWxvY2FsZS1wYXRoJ1xuaW1wb3J0IHsgcmVtb3ZlUGF0aFByZWZpeCB9IGZyb20gJy4vcmVtb3ZlLXBhdGgtcHJlZml4J1xuaW1wb3J0IHsgcGF0aEhhc1ByZWZpeCB9IGZyb20gJy4vcGF0aC1oYXMtcHJlZml4J1xuaW1wb3J0IHR5cGUgeyBJMThOUHJvdmlkZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2ZXIvbGliL2kxOG4tcHJvdmlkZXInXG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dFBhdGhuYW1lSW5mbyB7XG4gIC8qKlxuICAgKiBUaGUgYmFzZSBwYXRoIGluIGNhc2UgdGhlIHBhdGhuYW1lIGluY2x1ZGVkIGl0LlxuICAgKi9cbiAgYmFzZVBhdGg/OiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBidWlsZElkIGZvciB3aGVuIHRoZSBwYXJzZWQgVVJMIGlzIGEgZGF0YSBVUkwuIFBhcnNpbmcgaXQgY2FuIGJlXG4gICAqIGRpc2FibGVkIHdpdGggdGhlIGBwYXJzZURhdGFgIG9wdGlvbi5cbiAgICovXG4gIGJ1aWxkSWQ/OiBzdHJpbmdcbiAgLyoqXG4gICAqIElmIHRoZXJlIHdhcyBhIGxvY2FsZSBpbiB0aGUgcGF0aG5hbWUsIHRoaXMgd2lsbCBob2xkIGl0cyB2YWx1ZS5cbiAgICovXG4gIGxvY2FsZT86IHN0cmluZ1xuICAvKipcbiAgICogVGhlIHByb2Nlc3NlZCBwYXRobmFtZSB3aXRob3V0IGEgYmFzZSBwYXRoLCBsb2NhbGUsIG9yIGRhdGEgVVJMIGVsZW1lbnRzXG4gICAqIHdoZW4gcGFyc2luZyBpdCBpcyBlbmFibGVkLlxuICAgKi9cbiAgcGF0aG5hbWU6IHN0cmluZ1xuICAvKipcbiAgICogQSBib29sZWFuIHRlbGxpbmcgaWYgdGhlIHBhdGhuYW1lIGhhZCBhIHRyYWlsaW5nU2xhc2guIFRoaXMgY2FuIGJlIG9ubHlcbiAgICogdHJ1ZSBpZiB0cmFpbGluZ1NsYXNoIGlzIGVuYWJsZWQuXG4gICAqL1xuICB0cmFpbGluZ1NsYXNoPzogYm9vbGVhblxufVxuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGVuIHBhc3NlZCB0byB0cnVlLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBwYXJzZSBOZXh0anMgZGF0YSBVUkxzLlxuICAgKi9cbiAgcGFyc2VEYXRhPzogYm9vbGVhblxuICAvKipcbiAgICogQSBwYXJ0aWFsIG9mIHRoZSBOZXh0LmpzIGNvbmZpZ3VyYXRpb24gdG8gcGFyc2UgdGhlIFVSTC5cbiAgICovXG4gIG5leHRDb25maWc/OiB7XG4gICAgYmFzZVBhdGg/OiBzdHJpbmdcbiAgICBpMThuPzogeyBsb2NhbGVzPzogcmVhZG9ubHkgc3RyaW5nW10gfSB8IG51bGxcbiAgICB0cmFpbGluZ1NsYXNoPzogYm9vbGVhblxuICB9XG5cbiAgLyoqXG4gICAqIElmIHByb3ZpZGVkLCB0aGlzIG5vcm1hbGl6ZXIgd2lsbCBiZSB1c2VkIHRvIGRldGVjdCB0aGUgbG9jYWxlIGluc3RlYWQgb2ZcbiAgICogdGhlIGRlZmF1bHQgbG9jYWxlIGRldGVjdGlvbi5cbiAgICovXG4gIGkxOG5Qcm92aWRlcj86IEkxOE5Qcm92aWRlclxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dFBhdGhuYW1lSW5mbyhcbiAgcGF0aG5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogT3B0aW9uc1xuKTogTmV4dFBhdGhuYW1lSW5mbyB7XG4gIGNvbnN0IHsgYmFzZVBhdGgsIGkxOG4sIHRyYWlsaW5nU2xhc2ggfSA9IG9wdGlvbnMubmV4dENvbmZpZyA/PyB7fVxuICBjb25zdCBpbmZvOiBOZXh0UGF0aG5hbWVJbmZvID0ge1xuICAgIHBhdGhuYW1lLFxuICAgIHRyYWlsaW5nU2xhc2g6IHBhdGhuYW1lICE9PSAnLycgPyBwYXRobmFtZS5lbmRzV2l0aCgnLycpIDogdHJhaWxpbmdTbGFzaCxcbiAgfVxuXG4gIGlmIChiYXNlUGF0aCAmJiBwYXRoSGFzUHJlZml4KGluZm8ucGF0aG5hbWUsIGJhc2VQYXRoKSkge1xuICAgIGluZm8ucGF0aG5hbWUgPSByZW1vdmVQYXRoUHJlZml4KGluZm8ucGF0aG5hbWUsIGJhc2VQYXRoKVxuICAgIGluZm8uYmFzZVBhdGggPSBiYXNlUGF0aFxuICB9XG4gIGxldCBwYXRobmFtZU5vRGF0YVByZWZpeCA9IGluZm8ucGF0aG5hbWVcblxuICBpZiAoXG4gICAgaW5mby5wYXRobmFtZS5zdGFydHNXaXRoKCcvX25leHQvZGF0YS8nKSAmJlxuICAgIGluZm8ucGF0aG5hbWUuZW5kc1dpdGgoJy5qc29uJylcbiAgKSB7XG4gICAgY29uc3QgcGF0aHMgPSBpbmZvLnBhdGhuYW1lXG4gICAgICAucmVwbGFjZSgvXlxcL19uZXh0XFwvZGF0YVxcLy8sICcnKVxuICAgICAgLnJlcGxhY2UoL1xcLmpzb24kLywgJycpXG4gICAgICAuc3BsaXQoJy8nKVxuXG4gICAgY29uc3QgYnVpbGRJZCA9IHBhdGhzWzBdXG4gICAgaW5mby5idWlsZElkID0gYnVpbGRJZFxuICAgIHBhdGhuYW1lTm9EYXRhUHJlZml4ID1cbiAgICAgIHBhdGhzWzFdICE9PSAnaW5kZXgnID8gYC8ke3BhdGhzLnNsaWNlKDEpLmpvaW4oJy8nKX1gIDogJy8nXG5cbiAgICAvLyB1cGRhdGUgcGF0aG5hbWUgd2l0aCBub3JtYWxpemVkIGlmIGVuYWJsZWQgYWx0aG91Z2hcbiAgICAvLyB3ZSB1c2Ugbm9ybWFsaXplZCB0byBwb3B1bGF0ZSBsb2NhbGUgaW5mbyBzdGlsbFxuICAgIGlmIChvcHRpb25zLnBhcnNlRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgaW5mby5wYXRobmFtZSA9IHBhdGhuYW1lTm9EYXRhUHJlZml4XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgcHJvdmlkZWQsIHVzZSB0aGUgbG9jYWxlIHJvdXRlIG5vcm1hbGl6ZXIgdG8gZGV0ZWN0IHRoZSBsb2NhbGUgaW5zdGVhZFxuICAvLyBvZiB0aGUgZnVuY3Rpb24gYmVsb3cuXG4gIGlmIChpMThuKSB7XG4gICAgbGV0IHJlc3VsdCA9IG9wdGlvbnMuaTE4blByb3ZpZGVyXG4gICAgICA/IG9wdGlvbnMuaTE4blByb3ZpZGVyLmFuYWx5emUoaW5mby5wYXRobmFtZSlcbiAgICAgIDogbm9ybWFsaXplTG9jYWxlUGF0aChpbmZvLnBhdGhuYW1lLCBpMThuLmxvY2FsZXMpXG5cbiAgICBpbmZvLmxvY2FsZSA9IHJlc3VsdC5kZXRlY3RlZExvY2FsZVxuICAgIGluZm8ucGF0aG5hbWUgPSByZXN1bHQucGF0aG5hbWUgPz8gaW5mby5wYXRobmFtZVxuXG4gICAgaWYgKCFyZXN1bHQuZGV0ZWN0ZWRMb2NhbGUgJiYgaW5mby5idWlsZElkKSB7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLmkxOG5Qcm92aWRlclxuICAgICAgICA/IG9wdGlvbnMuaTE4blByb3ZpZGVyLmFuYWx5emUocGF0aG5hbWVOb0RhdGFQcmVmaXgpXG4gICAgICAgIDogbm9ybWFsaXplTG9jYWxlUGF0aChwYXRobmFtZU5vRGF0YVByZWZpeCwgaTE4bi5sb2NhbGVzKVxuXG4gICAgICBpZiAocmVzdWx0LmRldGVjdGVkTG9jYWxlKSB7XG4gICAgICAgIGluZm8ubG9jYWxlID0gcmVzdWx0LmRldGVjdGVkTG9jYWxlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBpbmZvXG59XG4iXSwibmFtZXMiOlsiZ2V0TmV4dFBhdGhuYW1lSW5mbyIsInBhdGhuYW1lIiwib3B0aW9ucyIsImJhc2VQYXRoIiwiaTE4biIsInRyYWlsaW5nU2xhc2giLCJuZXh0Q29uZmlnIiwiaW5mbyIsImVuZHNXaXRoIiwicGF0aEhhc1ByZWZpeCIsInJlbW92ZVBhdGhQcmVmaXgiLCJwYXRobmFtZU5vRGF0YVByZWZpeCIsInN0YXJ0c1dpdGgiLCJwYXRocyIsInJlcGxhY2UiLCJzcGxpdCIsImJ1aWxkSWQiLCJzbGljZSIsImpvaW4iLCJwYXJzZURhdGEiLCJyZXN1bHQiLCJpMThuUHJvdmlkZXIiLCJhbmFseXplIiwibm9ybWFsaXplTG9jYWxlUGF0aCIsImxvY2FsZXMiLCJsb2NhbGUiLCJkZXRlY3RlZExvY2FsZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/html-bots.js":
/*!*****************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/html-bots.js ***!
  \*****************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("// This regex contains the bots that we need to do a blocking render for and can't safely stream the response\n// due to how they parse the DOM. For example, they might explicitly check for metadata in the `head` tag, so we can't stream metadata tags after the `head` was sent.\n\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"HTML_LIMITED_BOT_UA_RE\", ({\n    enumerable: true,\n    get: function() {\n        return HTML_LIMITED_BOT_UA_RE;\n    }\n}));\nconst HTML_LIMITED_BOT_UA_RE = /Mediapartners-Google|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti/i; //# sourceMappingURL=html-bots.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9odG1sLWJvdHMuanMiLCJtYXBwaW5ncyI6IkFBQUEsNkdBQTZHO0FBQzdHLHNLQUFzSzs7Ozs7MERBQ3pKQTs7O2VBQUFBOzs7QUFBTixNQUFNQSx5QkFDWCIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9odG1sLWJvdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyByZWdleCBjb250YWlucyB0aGUgYm90cyB0aGF0IHdlIG5lZWQgdG8gZG8gYSBibG9ja2luZyByZW5kZXIgZm9yIGFuZCBjYW4ndCBzYWZlbHkgc3RyZWFtIHRoZSByZXNwb25zZVxuLy8gZHVlIHRvIGhvdyB0aGV5IHBhcnNlIHRoZSBET00uIEZvciBleGFtcGxlLCB0aGV5IG1pZ2h0IGV4cGxpY2l0bHkgY2hlY2sgZm9yIG1ldGFkYXRhIGluIHRoZSBgaGVhZGAgdGFnLCBzbyB3ZSBjYW4ndCBzdHJlYW0gbWV0YWRhdGEgdGFncyBhZnRlciB0aGUgYGhlYWRgIHdhcyBzZW50LlxuZXhwb3J0IGNvbnN0IEhUTUxfTElNSVRFRF9CT1RfVUFfUkUgPVxuICAvTWVkaWFwYXJ0bmVycy1Hb29nbGV8Q2hyb21lLUxpZ2h0aG91c2V8U2x1cnB8RHVja0R1Y2tCb3R8YmFpZHVzcGlkZXJ8eWFuZGV4fHNvZ291fGJpdGx5Ym90fHR1bWJscnx2a1NoYXJlfHF1b3JhIGxpbmsgcHJldmlld3xyZWRkaXRib3R8aWFfYXJjaGl2ZXJ8QmluZ2JvdHxCaW5nUHJldmlld3xhcHBsZWJvdHxmYWNlYm9va2V4dGVybmFsaGl0fGZhY2Vib29rY2F0YWxvZ3xUd2l0dGVyYm90fExpbmtlZEluQm90fFNsYWNrYm90fERpc2NvcmRib3R8V2hhdHNBcHB8U2t5cGVVcmlQcmV2aWV3fFlldGkvaVxuIl0sIm5hbWVzIjpbIkhUTUxfTElNSVRFRF9CT1RfVUFfUkUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/html-bots.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/index.js":
/*!*************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/index.js ***!
  \*************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    getSortedRouteObjects: function() {\n        return _sortedroutes.getSortedRouteObjects;\n    },\n    getSortedRoutes: function() {\n        return _sortedroutes.getSortedRoutes;\n    },\n    isDynamicRoute: function() {\n        return _isdynamic.isDynamicRoute;\n    }\n});\nconst _sortedroutes = __webpack_require__(/*! ./sorted-routes */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\");\nconst _isdynamic = __webpack_require__(/*! ./is-dynamic */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\"); //# sourceMappingURL=index.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFBMEJBLHFCQUFxQjtlQUFyQkEsY0FBQUEscUJBQXFCOztJQUF0Q0MsZUFBZTtlQUFmQSxjQUFBQSxlQUFlOztJQUNmQyxjQUFjO2VBQWRBLFdBQUFBLGNBQWM7OzswQ0FEZ0M7dUNBQ3hCIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGdldFNvcnRlZFJvdXRlcywgZ2V0U29ydGVkUm91dGVPYmplY3RzIH0gZnJvbSAnLi9zb3J0ZWQtcm91dGVzJ1xuZXhwb3J0IHsgaXNEeW5hbWljUm91dGUgfSBmcm9tICcuL2lzLWR5bmFtaWMnXG4iXSwibmFtZXMiOlsiZ2V0U29ydGVkUm91dGVPYmplY3RzIiwiZ2V0U29ydGVkUm91dGVzIiwiaXNEeW5hbWljUm91dGUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/interception-routes.js":
/*!***************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/interception-routes.js ***!
  \***************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    INTERCEPTION_ROUTE_MARKERS: function() {\n        return INTERCEPTION_ROUTE_MARKERS;\n    },\n    extractInterceptionRouteInformation: function() {\n        return extractInterceptionRouteInformation;\n    },\n    isInterceptionRouteAppPath: function() {\n        return isInterceptionRouteAppPath;\n    }\n});\nconst _apppaths = __webpack_require__(/*! ./app-paths */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/app-paths.js\");\nconst INTERCEPTION_ROUTE_MARKERS = [\n    '(..)(..)',\n    '(.)',\n    '(..)',\n    '(...)'\n];\nfunction isInterceptionRouteAppPath(path) {\n    // TODO-APP: add more serious validation\n    return path.split('/').find((segment)=>INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m))) !== undefined;\n}\nfunction extractInterceptionRouteInformation(path) {\n    let interceptingRoute, marker, interceptedRoute;\n    for (const segment of path.split('/')){\n        marker = INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n        if (marker) {\n            ;\n            [interceptingRoute, interceptedRoute] = path.split(marker, 2);\n            break;\n        }\n    }\n    if (!interceptingRoute || !marker || !interceptedRoute) {\n        throw Object.defineProperty(new Error(\"Invalid interception route: \" + path + \". Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>\"), \"__NEXT_ERROR_CODE\", {\n            value: \"E269\",\n            enumerable: false,\n            configurable: true\n        });\n    }\n    interceptingRoute = (0, _apppaths.normalizeAppPath)(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n    ;\n    switch(marker){\n        case '(.)':\n            // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n            if (interceptingRoute === '/') {\n                interceptedRoute = \"/\" + interceptedRoute;\n            } else {\n                interceptedRoute = interceptingRoute + '/' + interceptedRoute;\n            }\n            break;\n        case '(..)':\n            // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n            if (interceptingRoute === '/') {\n                throw Object.defineProperty(new Error(\"Invalid interception route: \" + path + \". Cannot use (..) marker at the root level, use (.) instead.\"), \"__NEXT_ERROR_CODE\", {\n                    value: \"E207\",\n                    enumerable: false,\n                    configurable: true\n                });\n            }\n            interceptedRoute = interceptingRoute.split('/').slice(0, -1).concat(interceptedRoute).join('/');\n            break;\n        case '(...)':\n            // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n            interceptedRoute = '/' + interceptedRoute;\n            break;\n        case '(..)(..)':\n            // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n            const splitInterceptingRoute = interceptingRoute.split('/');\n            if (splitInterceptingRoute.length <= 2) {\n                throw Object.defineProperty(new Error(\"Invalid interception route: \" + path + \". Cannot use (..)(..) marker at the root level or one level up.\"), \"__NEXT_ERROR_CODE\", {\n                    value: \"E486\",\n                    enumerable: false,\n                    configurable: true\n                });\n            }\n            interceptedRoute = splitInterceptingRoute.slice(0, -2).concat(interceptedRoute).join('/');\n            break;\n        default:\n            throw Object.defineProperty(new Error('Invariant: unexpected marker'), \"__NEXT_ERROR_CODE\", {\n                value: \"E112\",\n                enumerable: false,\n                configurable: true\n            });\n    }\n    return {\n        interceptingRoute,\n        interceptedRoute\n    };\n} //# sourceMappingURL=interception-routes.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pbnRlcmNlcHRpb24tcm91dGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUdhQSwwQkFBMEI7ZUFBMUJBOztJQWtCR0MsbUNBQW1DO2VBQW5DQTs7SUFYQUMsMEJBQTBCO2VBQTFCQTs7O3NDQVZpQjtBQUcxQixNQUFNRiw2QkFBNkI7SUFDeEM7SUFDQTtJQUNBO0lBQ0E7Q0FDRDtBQUVNLFNBQVNFLDJCQUEyQkMsSUFBWTtJQUNyRCx3Q0FBd0M7SUFDeEMsT0FDRUEsS0FDR0MsS0FBSyxDQUFDLEtBQ05DLElBQUksQ0FBQyxDQUFDQyxVQUNMTiwyQkFBMkJLLElBQUksQ0FBQyxDQUFDRSxJQUFNRCxRQUFRRSxVQUFVLENBQUNELFNBQ3RERTtBQUVaO0FBRU8sU0FBU1Isb0NBQW9DRSxJQUFZO0lBQzlELElBQUlPLG1CQUNGQyxRQUNBQztJQUVGLEtBQUssTUFBTU4sV0FBV0gsS0FBS0MsS0FBSyxDQUFDLEtBQU07UUFDckNPLFNBQVNYLDJCQUEyQkssSUFBSSxDQUFDLENBQUNFLElBQU1ELFFBQVFFLFVBQVUsQ0FBQ0Q7UUFDbkUsSUFBSUksUUFBUTs7WUFDVCxDQUFDRCxtQkFBbUJFLGlCQUFpQixHQUFHVCxLQUFLQyxLQUFLLENBQUNPLFFBQVE7WUFDNUQ7UUFDRjtJQUNGO0lBRUEsSUFBSSxDQUFDRCxxQkFBcUIsQ0FBQ0MsVUFBVSxDQUFDQyxrQkFBa0I7UUFDdEQsTUFBTSxxQkFFTCxDQUZLLElBQUlDLE1BQ1AsaUNBQThCVixPQUFLLHNGQURoQzttQkFBQTt3QkFBQTswQkFBQTtRQUVOO0lBQ0Y7SUFFQU8sb0JBQW9CSSxDQUFBQSxHQUFBQSxVQUFBQSxnQkFBQUEsRUFBaUJKLG1CQUFtQixpREFBaUQ7O0lBRXpHLE9BQVFDO1FBQ04sS0FBSztZQUNILG9JQUFvSTtZQUNwSSxJQUFJRCxzQkFBc0IsS0FBSztnQkFDN0JFLG1CQUFvQixNQUFHQTtZQUN6QixPQUFPO2dCQUNMQSxtQkFBbUJGLG9CQUFvQixNQUFNRTtZQUMvQztZQUNBO1FBQ0YsS0FBSztZQUNILHVIQUF1SDtZQUN2SCxJQUFJRixzQkFBc0IsS0FBSztnQkFDN0IsTUFBTSxxQkFFTCxDQUZLLElBQUlHLE1BQ1AsaUNBQThCVixPQUFLLGlFQURoQzsyQkFBQTtnQ0FBQTtrQ0FBQTtnQkFFTjtZQUNGO1lBQ0FTLG1CQUFtQkYsa0JBQ2hCTixLQUFLLENBQUMsS0FDTlcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUNWQyxNQUFNLENBQUNKLGtCQUNQSyxJQUFJLENBQUM7WUFDUjtRQUNGLEtBQUs7WUFDSCxrSUFBa0k7WUFDbElMLG1CQUFtQixNQUFNQTtZQUN6QjtRQUNGLEtBQUs7WUFDSCxpSUFBaUk7WUFFakksTUFBTU0seUJBQXlCUixrQkFBa0JOLEtBQUssQ0FBQztZQUN2RCxJQUFJYyx1QkFBdUJDLE1BQU0sSUFBSSxHQUFHO2dCQUN0QyxNQUFNLHFCQUVMLENBRkssSUFBSU4sTUFDUCxpQ0FBOEJWLE9BQUssb0VBRGhDOzJCQUFBO2dDQUFBO2tDQUFBO2dCQUVOO1lBQ0Y7WUFFQVMsbUJBQW1CTSx1QkFDaEJILEtBQUssQ0FBQyxHQUFHLENBQUMsR0FDVkMsTUFBTSxDQUFDSixrQkFDUEssSUFBSSxDQUFDO1lBQ1I7UUFDRjtZQUNFLE1BQU0scUJBQXlDLENBQXpDLElBQUlKLE1BQU0saUNBQVY7dUJBQUE7NEJBQUE7OEJBQUE7WUFBd0M7SUFDbEQ7SUFFQSxPQUFPO1FBQUVIO1FBQW1CRTtJQUFpQjtBQUMvQyIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pbnRlcmNlcHRpb24tcm91dGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5vcm1hbGl6ZUFwcFBhdGggfSBmcm9tICcuL2FwcC1wYXRocydcblxuLy8gb3JkZXIgbWF0dGVycyBoZXJlLCB0aGUgZmlyc3QgbWF0Y2ggd2lsbCBiZSB1c2VkXG5leHBvcnQgY29uc3QgSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMgPSBbXG4gICcoLi4pKC4uKScsXG4gICcoLiknLFxuICAnKC4uKScsXG4gICcoLi4uKScsXG5dIGFzIGNvbnN0XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aChwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gVE9ETy1BUFA6IGFkZCBtb3JlIHNlcmlvdXMgdmFsaWRhdGlvblxuICByZXR1cm4gKFxuICAgIHBhdGhcbiAgICAgIC5zcGxpdCgnLycpXG4gICAgICAuZmluZCgoc2VnbWVudCkgPT5cbiAgICAgICAgSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuZmluZCgobSkgPT4gc2VnbWVudC5zdGFydHNXaXRoKG0pKVxuICAgICAgKSAhPT0gdW5kZWZpbmVkXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RJbnRlcmNlcHRpb25Sb3V0ZUluZm9ybWF0aW9uKHBhdGg6IHN0cmluZykge1xuICBsZXQgaW50ZXJjZXB0aW5nUm91dGU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBtYXJrZXI6ICh0eXBlb2YgSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMpW251bWJlcl0gfCB1bmRlZmluZWQsXG4gICAgaW50ZXJjZXB0ZWRSb3V0ZTogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgZm9yIChjb25zdCBzZWdtZW50IG9mIHBhdGguc3BsaXQoJy8nKSkge1xuICAgIG1hcmtlciA9IElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTLmZpbmQoKG0pID0+IHNlZ21lbnQuc3RhcnRzV2l0aChtKSlcbiAgICBpZiAobWFya2VyKSB7XG4gICAgICA7W2ludGVyY2VwdGluZ1JvdXRlLCBpbnRlcmNlcHRlZFJvdXRlXSA9IHBhdGguc3BsaXQobWFya2VyLCAyKVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoIWludGVyY2VwdGluZ1JvdXRlIHx8ICFtYXJrZXIgfHwgIWludGVyY2VwdGVkUm91dGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBpbnRlcmNlcHRpb24gcm91dGU6ICR7cGF0aH0uIE11c3QgYmUgaW4gdGhlIGZvcm1hdCAvPGludGVyY2VwdGluZyByb3V0ZT4vKC4ufC4uLnwuLikoLi4pLzxpbnRlcmNlcHRlZCByb3V0ZT5gXG4gICAgKVxuICB9XG5cbiAgaW50ZXJjZXB0aW5nUm91dGUgPSBub3JtYWxpemVBcHBQYXRoKGludGVyY2VwdGluZ1JvdXRlKSAvLyBub3JtYWxpemUgdGhlIHBhdGgsIGUuZy4gLyhibG9nKS9mZWVkIC0+IC9mZWVkXG5cbiAgc3dpdGNoIChtYXJrZXIpIHtcbiAgICBjYXNlICcoLiknOlxuICAgICAgLy8gKC4pIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZCBtYXRjaCB3aXRoIHNpYmxpbmcgcm91dGVzLCBzbyB3ZSBqdXN0IG5lZWQgdG8gYXBwZW5kIHRoZSBpbnRlcmNlcHRlZCByb3V0ZSB0byB0aGUgaW50ZXJjZXB0aW5nIHJvdXRlXG4gICAgICBpZiAoaW50ZXJjZXB0aW5nUm91dGUgPT09ICcvJykge1xuICAgICAgICBpbnRlcmNlcHRlZFJvdXRlID0gYC8ke2ludGVyY2VwdGVkUm91dGV9YFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9IGludGVyY2VwdGluZ1JvdXRlICsgJy8nICsgaW50ZXJjZXB0ZWRSb3V0ZVxuICAgICAgfVxuICAgICAgYnJlYWtcbiAgICBjYXNlICcoLi4pJzpcbiAgICAgIC8vICguLikgaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkIG1hdGNoIGF0IG9uZSBsZXZlbCB1cCwgc28gd2UgbmVlZCB0byByZW1vdmUgdGhlIGxhc3Qgc2VnbWVudCBvZiB0aGUgaW50ZXJjZXB0aW5nIHJvdXRlXG4gICAgICBpZiAoaW50ZXJjZXB0aW5nUm91dGUgPT09ICcvJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgaW50ZXJjZXB0aW9uIHJvdXRlOiAke3BhdGh9LiBDYW5ub3QgdXNlICguLikgbWFya2VyIGF0IHRoZSByb290IGxldmVsLCB1c2UgKC4pIGluc3RlYWQuYFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBpbnRlcmNlcHRlZFJvdXRlID0gaW50ZXJjZXB0aW5nUm91dGVcbiAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgLnNsaWNlKDAsIC0xKVxuICAgICAgICAuY29uY2F0KGludGVyY2VwdGVkUm91dGUpXG4gICAgICAgIC5qb2luKCcvJylcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnKC4uLiknOlxuICAgICAgLy8gKC4uLikgd2lsbCBtYXRjaCB0aGUgcm91dGUgc2VnbWVudCBpbiB0aGUgcm9vdCBkaXJlY3RvcnksIHNvIHdlIG5lZWQgdG8gdXNlIHRoZSByb290IGRpcmVjdG9yeSB0byBwcmVwZW5kIHRoZSBpbnRlcmNlcHRlZCByb3V0ZVxuICAgICAgaW50ZXJjZXB0ZWRSb3V0ZSA9ICcvJyArIGludGVyY2VwdGVkUm91dGVcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnKC4uKSguLiknOlxuICAgICAgLy8gKC4uKSguLikgaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkIG1hdGNoIGF0IHR3byBsZXZlbHMgdXAsIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBsYXN0IHR3byBzZWdtZW50cyBvZiB0aGUgaW50ZXJjZXB0aW5nIHJvdXRlXG5cbiAgICAgIGNvbnN0IHNwbGl0SW50ZXJjZXB0aW5nUm91dGUgPSBpbnRlcmNlcHRpbmdSb3V0ZS5zcGxpdCgnLycpXG4gICAgICBpZiAoc3BsaXRJbnRlcmNlcHRpbmdSb3V0ZS5sZW5ndGggPD0gMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgaW50ZXJjZXB0aW9uIHJvdXRlOiAke3BhdGh9LiBDYW5ub3QgdXNlICguLikoLi4pIG1hcmtlciBhdCB0aGUgcm9vdCBsZXZlbCBvciBvbmUgbGV2ZWwgdXAuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGludGVyY2VwdGVkUm91dGUgPSBzcGxpdEludGVyY2VwdGluZ1JvdXRlXG4gICAgICAgIC5zbGljZSgwLCAtMilcbiAgICAgICAgLmNvbmNhdChpbnRlcmNlcHRlZFJvdXRlKVxuICAgICAgICAuam9pbignLycpXG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFyaWFudDogdW5leHBlY3RlZCBtYXJrZXInKVxuICB9XG5cbiAgcmV0dXJuIHsgaW50ZXJjZXB0aW5nUm91dGUsIGludGVyY2VwdGVkUm91dGUgfVxufVxuIl0sIm5hbWVzIjpbIklOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTIiwiZXh0cmFjdEludGVyY2VwdGlvblJvdXRlSW5mb3JtYXRpb24iLCJpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aCIsInBhdGgiLCJzcGxpdCIsImZpbmQiLCJzZWdtZW50IiwibSIsInN0YXJ0c1dpdGgiLCJ1bmRlZmluZWQiLCJpbnRlcmNlcHRpbmdSb3V0ZSIsIm1hcmtlciIsImludGVyY2VwdGVkUm91dGUiLCJFcnJvciIsIm5vcm1hbGl6ZUFwcFBhdGgiLCJzbGljZSIsImNvbmNhdCIsImpvaW4iLCJzcGxpdEludGVyY2VwdGluZ1JvdXRlIiwibGVuZ3RoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/interception-routes.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/interpolate-as.js":
/*!**********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/interpolate-as.js ***!
  \**********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"interpolateAs\", ({\n    enumerable: true,\n    get: function() {\n        return interpolateAs;\n    }\n}));\nconst _routematcher = __webpack_require__(/*! ./route-matcher */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/route-matcher.js\");\nconst _routeregex = __webpack_require__(/*! ./route-regex */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/route-regex.js\");\nfunction interpolateAs(route, asPathname, query) {\n    let interpolatedRoute = '';\n    const dynamicRegex = (0, _routeregex.getRouteRegex)(route);\n    const dynamicGroups = dynamicRegex.groups;\n    const dynamicMatches = (asPathname !== route ? (0, _routematcher.getRouteMatcher)(dynamicRegex)(asPathname) : '') || // Fall back to reading the values from the href\n    // TODO: should this take priority; also need to change in the router.\n    query;\n    interpolatedRoute = route;\n    const params = Object.keys(dynamicGroups);\n    if (!params.every((param)=>{\n        let value = dynamicMatches[param] || '';\n        const { repeat, optional } = dynamicGroups[param];\n        // support single-level catch-all\n        // TODO: more robust handling for user-error (passing `/`)\n        let replaced = \"[\" + (repeat ? '...' : '') + param + \"]\";\n        if (optional) {\n            replaced = (!value ? '/' : '') + \"[\" + replaced + \"]\";\n        }\n        if (repeat && !Array.isArray(value)) value = [\n            value\n        ];\n        return (optional || param in dynamicMatches) && // Interpolate group into data URL if present\n        (interpolatedRoute = interpolatedRoute.replace(replaced, repeat ? value.map(// path delimiter escaped since they are being inserted\n        // into the URL and we expect URL encoded segments\n        // when parsing dynamic route params\n        (segment)=>encodeURIComponent(segment)).join('/') : encodeURIComponent(value)) || '/');\n    })) {\n        interpolatedRoute = '' // did not satisfy all requirements\n        ;\n    // n.b. We ignore this error because we handle warning for this case in\n    // development in the `<Link>` component directly.\n    }\n    return {\n        params,\n        result: interpolatedRoute\n    };\n} //# sourceMappingURL=interpolate-as.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pbnRlcnBvbGF0ZS1hcy5qcyIsIm1hcHBpbmdzIjoiOzs7O2lEQUtnQkE7OztlQUFBQTs7OzBDQUhnQjt3Q0FDRjtBQUV2QixTQUFTQSxjQUNkQyxLQUFhLEVBQ2JDLFVBQWtCLEVBQ2xCQyxLQUFxQjtJQUVyQixJQUFJQyxvQkFBb0I7SUFFeEIsTUFBTUMsZUFBZUMsQ0FBQUEsR0FBQUEsWUFBQUEsYUFBQUEsRUFBY0w7SUFDbkMsTUFBTU0sZ0JBQWdCRixhQUFhRyxNQUFNO0lBQ3pDLE1BQU1DLGlCQUVKLENBQUNQLGVBQWVELFFBQVFTLENBQUFBLEdBQUFBLGNBQUFBLFVBRDRCLEtBQzVCQSxFQUFnQkwsY0FBY0gsY0FBYyxHQUFDLElBQ3JFLGdEQUFnRDtJQUNoRCxzRUFBc0U7SUFDdEVDO0lBRUZDLG9CQUFvQkg7SUFDcEIsTUFBTVUsU0FBU0MsT0FBT0MsSUFBSSxDQUFDTjtJQUUzQixJQUNFLENBQUNJLE9BQU9HLEtBQUssQ0FBQyxDQUFDQztRQUNiLElBQUlDLFFBQVFQLGNBQWMsQ0FBQ00sTUFBTSxJQUFJO1FBQ3JDLE1BQU0sRUFBRUUsTUFBTSxFQUFFQyxRQUFRLEVBQUUsR0FBR1gsYUFBYSxDQUFDUSxNQUFNO1FBRWpELGlDQUFpQztRQUNqQywwREFBMEQ7UUFDMUQsSUFBSUksV0FBWSxNQUFHRixDQUFBQSxTQUFTLFFBQVEsR0FBQyxHQUFJRixRQUFNO1FBQy9DLElBQUlHLFVBQVU7WUFDWkMsV0FBYyxFQUFDSCxRQUFRLE1BQU0sR0FBQyxHQUFFLE1BQUdHLFdBQVM7UUFDOUM7UUFDQSxJQUFJRixVQUFVLENBQUNHLE1BQU1DLE9BQU8sQ0FBQ0wsUUFBUUEsUUFBUTtZQUFDQTtTQUFNO1FBRXBELE9BQ0dFLENBQUFBLFlBQVlILFNBQVNOLGNBQUFBLENBQWEsSUFDbkMsNkNBQTZDO1NBQzVDTCxvQkFDQ0Esa0JBQW1Ca0IsT0FBTyxDQUN4QkgsVUFDQUYsU0FDS0QsTUFDRU8sR0FBRyxDQUNGLHVEQUF1RDtRQUV2RCxrREFBa0Q7UUFDbEQsb0NBQW9DO1FBQ3BDLENBQUNDLFVBQVlDLG1CQUFtQkQsVUFFakNFLElBQUksQ0FBQyxPQUNSRCxtQkFBbUJULFdBQ3BCLElBQUU7SUFFYixJQUNBO1FBQ0FaLG9CQUFvQixHQUFHLG1DQUFtQzs7SUFFMUQsdUVBQXVFO0lBQ3ZFLGtEQUFrRDtJQUNwRDtJQUNBLE9BQU87UUFDTE87UUFDQWdCLFFBQVF2QjtJQUNWO0FBQ0YiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaW50ZXJwb2xhdGUtYXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYXJzZWRVcmxRdWVyeSB9IGZyb20gJ3F1ZXJ5c3RyaW5nJ1xuXG5pbXBvcnQgeyBnZXRSb3V0ZU1hdGNoZXIgfSBmcm9tICcuL3JvdXRlLW1hdGNoZXInXG5pbXBvcnQgeyBnZXRSb3V0ZVJlZ2V4IH0gZnJvbSAnLi9yb3V0ZS1yZWdleCdcblxuZXhwb3J0IGZ1bmN0aW9uIGludGVycG9sYXRlQXMoXG4gIHJvdXRlOiBzdHJpbmcsXG4gIGFzUGF0aG5hbWU6IHN0cmluZyxcbiAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5XG4pIHtcbiAgbGV0IGludGVycG9sYXRlZFJvdXRlID0gJydcblxuICBjb25zdCBkeW5hbWljUmVnZXggPSBnZXRSb3V0ZVJlZ2V4KHJvdXRlKVxuICBjb25zdCBkeW5hbWljR3JvdXBzID0gZHluYW1pY1JlZ2V4Lmdyb3Vwc1xuICBjb25zdCBkeW5hbWljTWF0Y2hlcyA9XG4gICAgLy8gVHJ5IHRvIG1hdGNoIHRoZSBkeW5hbWljIHJvdXRlIGFnYWluc3QgdGhlIGFzUGF0aFxuICAgIChhc1BhdGhuYW1lICE9PSByb3V0ZSA/IGdldFJvdXRlTWF0Y2hlcihkeW5hbWljUmVnZXgpKGFzUGF0aG5hbWUpIDogJycpIHx8XG4gICAgLy8gRmFsbCBiYWNrIHRvIHJlYWRpbmcgdGhlIHZhbHVlcyBmcm9tIHRoZSBocmVmXG4gICAgLy8gVE9ETzogc2hvdWxkIHRoaXMgdGFrZSBwcmlvcml0eTsgYWxzbyBuZWVkIHRvIGNoYW5nZSBpbiB0aGUgcm91dGVyLlxuICAgIHF1ZXJ5XG5cbiAgaW50ZXJwb2xhdGVkUm91dGUgPSByb3V0ZVxuICBjb25zdCBwYXJhbXMgPSBPYmplY3Qua2V5cyhkeW5hbWljR3JvdXBzKVxuXG4gIGlmIChcbiAgICAhcGFyYW1zLmV2ZXJ5KChwYXJhbSkgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZHluYW1pY01hdGNoZXNbcGFyYW1dIHx8ICcnXG4gICAgICBjb25zdCB7IHJlcGVhdCwgb3B0aW9uYWwgfSA9IGR5bmFtaWNHcm91cHNbcGFyYW1dXG5cbiAgICAgIC8vIHN1cHBvcnQgc2luZ2xlLWxldmVsIGNhdGNoLWFsbFxuICAgICAgLy8gVE9ETzogbW9yZSByb2J1c3QgaGFuZGxpbmcgZm9yIHVzZXItZXJyb3IgKHBhc3NpbmcgYC9gKVxuICAgICAgbGV0IHJlcGxhY2VkID0gYFske3JlcGVhdCA/ICcuLi4nIDogJyd9JHtwYXJhbX1dYFxuICAgICAgaWYgKG9wdGlvbmFsKSB7XG4gICAgICAgIHJlcGxhY2VkID0gYCR7IXZhbHVlID8gJy8nIDogJyd9WyR7cmVwbGFjZWR9XWBcbiAgICAgIH1cbiAgICAgIGlmIChyZXBlYXQgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB2YWx1ZSA9IFt2YWx1ZV1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgKG9wdGlvbmFsIHx8IHBhcmFtIGluIGR5bmFtaWNNYXRjaGVzKSAmJlxuICAgICAgICAvLyBJbnRlcnBvbGF0ZSBncm91cCBpbnRvIGRhdGEgVVJMIGlmIHByZXNlbnRcbiAgICAgICAgKGludGVycG9sYXRlZFJvdXRlID1cbiAgICAgICAgICBpbnRlcnBvbGF0ZWRSb3V0ZSEucmVwbGFjZShcbiAgICAgICAgICAgIHJlcGxhY2VkLFxuICAgICAgICAgICAgcmVwZWF0XG4gICAgICAgICAgICAgID8gKHZhbHVlIGFzIHN0cmluZ1tdKVxuICAgICAgICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlc2UgdmFsdWVzIHNob3VsZCBiZSBmdWxseSBlbmNvZGVkIGluc3RlYWQgb2YganVzdFxuICAgICAgICAgICAgICAgICAgICAvLyBwYXRoIGRlbGltaXRlciBlc2NhcGVkIHNpbmNlIHRoZXkgYXJlIGJlaW5nIGluc2VydGVkXG4gICAgICAgICAgICAgICAgICAgIC8vIGludG8gdGhlIFVSTCBhbmQgd2UgZXhwZWN0IFVSTCBlbmNvZGVkIHNlZ21lbnRzXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gcGFyc2luZyBkeW5hbWljIHJvdXRlIHBhcmFtc1xuICAgICAgICAgICAgICAgICAgICAoc2VnbWVudCkgPT4gZW5jb2RlVVJJQ29tcG9uZW50KHNlZ21lbnQpXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAuam9pbignLycpXG4gICAgICAgICAgICAgIDogZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlIGFzIHN0cmluZylcbiAgICAgICAgICApIHx8ICcvJylcbiAgICAgIClcbiAgICB9KVxuICApIHtcbiAgICBpbnRlcnBvbGF0ZWRSb3V0ZSA9ICcnIC8vIGRpZCBub3Qgc2F0aXNmeSBhbGwgcmVxdWlyZW1lbnRzXG5cbiAgICAvLyBuLmIuIFdlIGlnbm9yZSB0aGlzIGVycm9yIGJlY2F1c2Ugd2UgaGFuZGxlIHdhcm5pbmcgZm9yIHRoaXMgY2FzZSBpblxuICAgIC8vIGRldmVsb3BtZW50IGluIHRoZSBgPExpbms+YCBjb21wb25lbnQgZGlyZWN0bHkuXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwYXJhbXMsXG4gICAgcmVzdWx0OiBpbnRlcnBvbGF0ZWRSb3V0ZSxcbiAgfVxufVxuIl0sIm5hbWVzIjpbImludGVycG9sYXRlQXMiLCJyb3V0ZSIsImFzUGF0aG5hbWUiLCJxdWVyeSIsImludGVycG9sYXRlZFJvdXRlIiwiZHluYW1pY1JlZ2V4IiwiZ2V0Um91dGVSZWdleCIsImR5bmFtaWNHcm91cHMiLCJncm91cHMiLCJkeW5hbWljTWF0Y2hlcyIsImdldFJvdXRlTWF0Y2hlciIsInBhcmFtcyIsIk9iamVjdCIsImtleXMiLCJldmVyeSIsInBhcmFtIiwidmFsdWUiLCJyZXBlYXQiLCJvcHRpb25hbCIsInJlcGxhY2VkIiwiQXJyYXkiLCJpc0FycmF5IiwicmVwbGFjZSIsIm1hcCIsInNlZ21lbnQiLCJlbmNvZGVVUklDb21wb25lbnQiLCJqb2luIiwicmVzdWx0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/interpolate-as.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/is-bot.js":
/*!**************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/is-bot.js ***!
  \**************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    HTML_LIMITED_BOT_UA_RE: function() {\n        return _htmlbots.HTML_LIMITED_BOT_UA_RE;\n    },\n    HTML_LIMITED_BOT_UA_RE_STRING: function() {\n        return HTML_LIMITED_BOT_UA_RE_STRING;\n    },\n    getBotType: function() {\n        return getBotType;\n    },\n    isBot: function() {\n        return isBot;\n    }\n});\nconst _htmlbots = __webpack_require__(/*! ./html-bots */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/html-bots.js\");\n// Bot crawler that will spin up a headless browser and execute JS.\n// By default, only googlebots are considered as DOM bots. Blow is where the regex is computed from:\n// x-ref: https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers\nconst HEADLESS_BROWSER_BOT_UA_RE = /google/i;\nconst HTML_LIMITED_BOT_UA_RE_STRING = _htmlbots.HTML_LIMITED_BOT_UA_RE.source;\nfunction isDomBotUA(userAgent) {\n    return HEADLESS_BROWSER_BOT_UA_RE.test(userAgent);\n}\nfunction isHtmlLimitedBotUA(userAgent) {\n    return _htmlbots.HTML_LIMITED_BOT_UA_RE.test(userAgent);\n}\nfunction isBot(userAgent) {\n    return isDomBotUA(userAgent) || isHtmlLimitedBotUA(userAgent);\n}\nfunction getBotType(userAgent) {\n    if (isDomBotUA(userAgent)) {\n        return 'dom';\n    }\n    if (isHtmlLimitedBotUA(userAgent)) {\n        return 'html';\n    }\n    return undefined;\n} //# sourceMappingURL=is-bot.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pcy1ib3QuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBU1NBLHNCQUFzQjtlQUF0QkEsVUFBQUEsc0JBQXNCOztJQUZsQkMsNkJBQTZCO2VBQTdCQTs7SUFnQkdDLFVBQVU7ZUFBVkE7O0lBSkFDLEtBQUs7ZUFBTEE7OztzQ0FuQnVCO0FBRXZDLG1FQUFtRTtBQUNuRSxvR0FBb0c7QUFDcEcsNEZBQTRGO0FBQzVGLE1BQU1DLDZCQUE2QjtBQUU1QixNQUFNSCxnQ0FBZ0NELFVBQUFBLHNCQUFzQixDQUFDSyxNQUFNO0FBSTFFLFNBQVNDLFdBQVdDLFNBQWlCO0lBQ25DLE9BQU9ILDJCQUEyQkksSUFBSSxDQUFDRDtBQUN6QztBQUVBLFNBQVNFLG1CQUFtQkYsU0FBaUI7SUFDM0MsT0FBT1AsVUFBQUEsc0JBQXNCLENBQUNRLElBQUksQ0FBQ0Q7QUFDckM7QUFFTyxTQUFTSixNQUFNSSxTQUFpQjtJQUNyQyxPQUFPRCxXQUFXQyxjQUFjRSxtQkFBbUJGO0FBQ3JEO0FBRU8sU0FBU0wsV0FBV0ssU0FBaUI7SUFDMUMsSUFBSUQsV0FBV0MsWUFBWTtRQUN6QixPQUFPO0lBQ1Q7SUFDQSxJQUFJRSxtQkFBbUJGLFlBQVk7UUFDakMsT0FBTztJQUNUO0lBQ0EsT0FBT0c7QUFDVCIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pcy1ib3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSFRNTF9MSU1JVEVEX0JPVF9VQV9SRSB9IGZyb20gJy4vaHRtbC1ib3RzJ1xuXG4vLyBCb3QgY3Jhd2xlciB0aGF0IHdpbGwgc3BpbiB1cCBhIGhlYWRsZXNzIGJyb3dzZXIgYW5kIGV4ZWN1dGUgSlMuXG4vLyBCeSBkZWZhdWx0LCBvbmx5IGdvb2dsZWJvdHMgYXJlIGNvbnNpZGVyZWQgYXMgRE9NIGJvdHMuIEJsb3cgaXMgd2hlcmUgdGhlIHJlZ2V4IGlzIGNvbXB1dGVkIGZyb206XG4vLyB4LXJlZjogaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vc2VhcmNoL2RvY3MvY3Jhd2xpbmctaW5kZXhpbmcvZ29vZ2xlLWNvbW1vbi1jcmF3bGVyc1xuY29uc3QgSEVBRExFU1NfQlJPV1NFUl9CT1RfVUFfUkUgPSAvZ29vZ2xlL2lcblxuZXhwb3J0IGNvbnN0IEhUTUxfTElNSVRFRF9CT1RfVUFfUkVfU1RSSU5HID0gSFRNTF9MSU1JVEVEX0JPVF9VQV9SRS5zb3VyY2VcblxuZXhwb3J0IHsgSFRNTF9MSU1JVEVEX0JPVF9VQV9SRSB9XG5cbmZ1bmN0aW9uIGlzRG9tQm90VUEodXNlckFnZW50OiBzdHJpbmcpIHtcbiAgcmV0dXJuIEhFQURMRVNTX0JST1dTRVJfQk9UX1VBX1JFLnRlc3QodXNlckFnZW50KVxufVxuXG5mdW5jdGlvbiBpc0h0bWxMaW1pdGVkQm90VUEodXNlckFnZW50OiBzdHJpbmcpIHtcbiAgcmV0dXJuIEhUTUxfTElNSVRFRF9CT1RfVUFfUkUudGVzdCh1c2VyQWdlbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0JvdCh1c2VyQWdlbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNEb21Cb3RVQSh1c2VyQWdlbnQpIHx8IGlzSHRtbExpbWl0ZWRCb3RVQSh1c2VyQWdlbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb3RUeXBlKHVzZXJBZ2VudDogc3RyaW5nKTogJ2RvbScgfCAnaHRtbCcgfCB1bmRlZmluZWQge1xuICBpZiAoaXNEb21Cb3RVQSh1c2VyQWdlbnQpKSB7XG4gICAgcmV0dXJuICdkb20nXG4gIH1cbiAgaWYgKGlzSHRtbExpbWl0ZWRCb3RVQSh1c2VyQWdlbnQpKSB7XG4gICAgcmV0dXJuICdodG1sJ1xuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cbiJdLCJuYW1lcyI6WyJIVE1MX0xJTUlURURfQk9UX1VBX1JFIiwiSFRNTF9MSU1JVEVEX0JPVF9VQV9SRV9TVFJJTkciLCJnZXRCb3RUeXBlIiwiaXNCb3QiLCJIRUFETEVTU19CUk9XU0VSX0JPVF9VQV9SRSIsInNvdXJjZSIsImlzRG9tQm90VUEiLCJ1c2VyQWdlbnQiLCJ0ZXN0IiwiaXNIdG1sTGltaXRlZEJvdFVBIiwidW5kZWZpbmVkIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/is-bot.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js":
/*!******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js ***!
  \******************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"isDynamicRoute\", ({\n    enumerable: true,\n    get: function() {\n        return isDynamicRoute;\n    }\n}));\nconst _interceptionroutes = __webpack_require__(/*! ./interception-routes */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/interception-routes.js\");\n// Identify /.*[param].*/ in route string\nconst TEST_ROUTE = /\\/[^/]*\\[[^/]+\\][^/]*(?=\\/|$)/;\n// Identify /[param]/ in route string\nconst TEST_STRICT_ROUTE = /\\/\\[[^/]+\\](?=\\/|$)/;\nfunction isDynamicRoute(route, strict) {\n    if (strict === void 0) strict = true;\n    if ((0, _interceptionroutes.isInterceptionRouteAppPath)(route)) {\n        route = (0, _interceptionroutes.extractInterceptionRouteInformation)(route).interceptedRoute;\n    }\n    if (strict) {\n        return TEST_STRICT_ROUTE.test(route);\n    }\n    return TEST_ROUTE.test(route);\n} //# sourceMappingURL=is-dynamic.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pcy1keW5hbWljLmpzIiwibWFwcGluZ3MiOiI7Ozs7a0RBa0JnQkE7OztlQUFBQTs7O2dEQWZUO0FBRVAseUNBQXlDO0FBQ3pDLE1BQU1DLGFBQWE7QUFFbkIscUNBQXFDO0FBQ3JDLE1BQU1DLG9CQUFvQjtBQVNuQixTQUFTRixlQUFlRyxLQUFhLEVBQUVDLE1BQXNCO0lBQXRCQSxJQUFBQSxXQUFBQSxLQUFBQSxHQUFBQSxTQUFrQjtJQUM5RCxJQUFJQyxDQUFBQSxHQUFBQSxvQkFBQUEsMEJBQUFBLEVBQTJCRixRQUFRO1FBQ3JDQSxRQUFRRyxDQUFBQSxHQUFBQSxvQkFBQUEsbUNBQUFBLEVBQW9DSCxPQUFPSSxnQkFBZ0I7SUFDckU7SUFFQSxJQUFJSCxRQUFRO1FBQ1YsT0FBT0Ysa0JBQWtCTSxJQUFJLENBQUNMO0lBQ2hDO0lBRUEsT0FBT0YsV0FBV08sSUFBSSxDQUFDTDtBQUN6QiIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pcy1keW5hbWljLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGV4dHJhY3RJbnRlcmNlcHRpb25Sb3V0ZUluZm9ybWF0aW9uLFxuICBpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aCxcbn0gZnJvbSAnLi9pbnRlcmNlcHRpb24tcm91dGVzJ1xuXG4vLyBJZGVudGlmeSAvLipbcGFyYW1dLiovIGluIHJvdXRlIHN0cmluZ1xuY29uc3QgVEVTVF9ST1VURSA9IC9cXC9bXi9dKlxcW1teL10rXFxdW14vXSooPz1cXC98JCkvXG5cbi8vIElkZW50aWZ5IC9bcGFyYW1dLyBpbiByb3V0ZSBzdHJpbmdcbmNvbnN0IFRFU1RfU1RSSUNUX1JPVVRFID0gL1xcL1xcW1teL10rXFxdKD89XFwvfCQpL1xuXG4vKipcbiAqIENoZWNrIGlmIGEgcm91dGUgaXMgZHluYW1pYy5cbiAqXG4gKiBAcGFyYW0gcm91dGUgLSBUaGUgcm91dGUgdG8gY2hlY2suXG4gKiBAcGFyYW0gc3RyaWN0IC0gV2hldGhlciB0byB1c2Ugc3RyaWN0IG1vZGUgd2hpY2ggcHJvaGliaXRzIHNlZ21lbnRzIHdpdGggcHJlZml4ZXMvc3VmZml4ZXMgKGRlZmF1bHQ6IHRydWUpLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcm91dGUgaXMgZHluYW1pYy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHluYW1pY1JvdXRlKHJvdXRlOiBzdHJpbmcsIHN0cmljdDogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcbiAgaWYgKGlzSW50ZXJjZXB0aW9uUm91dGVBcHBQYXRoKHJvdXRlKSkge1xuICAgIHJvdXRlID0gZXh0cmFjdEludGVyY2VwdGlvblJvdXRlSW5mb3JtYXRpb24ocm91dGUpLmludGVyY2VwdGVkUm91dGVcbiAgfVxuXG4gIGlmIChzdHJpY3QpIHtcbiAgICByZXR1cm4gVEVTVF9TVFJJQ1RfUk9VVEUudGVzdChyb3V0ZSlcbiAgfVxuXG4gIHJldHVybiBURVNUX1JPVVRFLnRlc3Qocm91dGUpXG59XG4iXSwibmFtZXMiOlsiaXNEeW5hbWljUm91dGUiLCJURVNUX1JPVVRFIiwiVEVTVF9TVFJJQ1RfUk9VVEUiLCJyb3V0ZSIsInN0cmljdCIsImlzSW50ZXJjZXB0aW9uUm91dGVBcHBQYXRoIiwiZXh0cmFjdEludGVyY2VwdGlvblJvdXRlSW5mb3JtYXRpb24iLCJpbnRlcmNlcHRlZFJvdXRlIiwidGVzdCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/is-local-url.js":
/*!********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/is-local-url.js ***!
  \********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"isLocalURL\", ({\n    enumerable: true,\n    get: function() {\n        return isLocalURL;\n    }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/utils.js\");\nconst _hasbasepath = __webpack_require__(/*! ../../../../client/has-base-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/has-base-path.js\");\nfunction isLocalURL(url) {\n    // prevent a hydration mismatch on href for url with anchor refs\n    if (!(0, _utils.isAbsoluteUrl)(url)) return true;\n    try {\n        // absolute urls can be local if they are on the same origin\n        const locationOrigin = (0, _utils.getLocationOrigin)();\n        const resolved = new URL(url, locationOrigin);\n        return resolved.origin === locationOrigin && (0, _hasbasepath.hasBasePath)(resolved.pathname);\n    } catch (_) {\n        return false;\n    }\n} //# sourceMappingURL=is-local-url.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pcy1sb2NhbC11cmwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs4Q0FNZ0JBOzs7ZUFBQUE7OzttQ0FOaUM7eUNBQ3JCO0FBS3JCLFNBQVNBLFdBQVdDLEdBQVc7SUFDcEMsZ0VBQWdFO0lBQ2hFLElBQUksQ0FBQ0MsQ0FBQUEsR0FBQUEsT0FBQUEsYUFBQUEsRUFBY0QsTUFBTSxPQUFPO0lBQ2hDLElBQUk7UUFDRiw0REFBNEQ7UUFDNUQsTUFBTUUsaUJBQWlCQyxDQUFBQSxHQUFBQSxPQUFBQSxpQkFBQUE7UUFDdkIsTUFBTUMsV0FBVyxJQUFJQyxJQUFJTCxLQUFLRTtRQUM5QixPQUFPRSxTQUFTRSxNQUFNLEtBQUtKLGtCQUFrQkssQ0FBQUEsR0FBQUEsYUFBQUEsV0FBQUEsRUFBWUgsU0FBU0ksUUFBUTtJQUM1RSxFQUFFLE9BQU9DLEdBQUc7UUFDVixPQUFPO0lBQ1Q7QUFDRiIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pcy1sb2NhbC11cmwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNBYnNvbHV0ZVVybCwgZ2V0TG9jYXRpb25PcmlnaW4gfSBmcm9tICcuLi8uLi91dGlscydcbmltcG9ydCB7IGhhc0Jhc2VQYXRoIH0gZnJvbSAnLi4vLi4vLi4vLi4vY2xpZW50L2hhcy1iYXNlLXBhdGgnXG5cbi8qKlxuICogRGV0ZWN0cyB3aGV0aGVyIGEgZ2l2ZW4gdXJsIGlzIHJvdXRhYmxlIGJ5IHRoZSBOZXh0LmpzIHJvdXRlciAoYnJvd3NlciBvbmx5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTG9jYWxVUkwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgLy8gcHJldmVudCBhIGh5ZHJhdGlvbiBtaXNtYXRjaCBvbiBocmVmIGZvciB1cmwgd2l0aCBhbmNob3IgcmVmc1xuICBpZiAoIWlzQWJzb2x1dGVVcmwodXJsKSkgcmV0dXJuIHRydWVcbiAgdHJ5IHtcbiAgICAvLyBhYnNvbHV0ZSB1cmxzIGNhbiBiZSBsb2NhbCBpZiB0aGV5IGFyZSBvbiB0aGUgc2FtZSBvcmlnaW5cbiAgICBjb25zdCBsb2NhdGlvbk9yaWdpbiA9IGdldExvY2F0aW9uT3JpZ2luKClcbiAgICBjb25zdCByZXNvbHZlZCA9IG5ldyBVUkwodXJsLCBsb2NhdGlvbk9yaWdpbilcbiAgICByZXR1cm4gcmVzb2x2ZWQub3JpZ2luID09PSBsb2NhdGlvbk9yaWdpbiAmJiBoYXNCYXNlUGF0aChyZXNvbHZlZC5wYXRobmFtZSlcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iXSwibmFtZXMiOlsiaXNMb2NhbFVSTCIsInVybCIsImlzQWJzb2x1dGVVcmwiLCJsb2NhdGlvbk9yaWdpbiIsImdldExvY2F0aW9uT3JpZ2luIiwicmVzb2x2ZWQiLCJVUkwiLCJvcmlnaW4iLCJoYXNCYXNlUGF0aCIsInBhdGhuYW1lIiwiXyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/is-local-url.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/omit.js":
/*!************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/omit.js ***!
  \************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"omit\", ({\n    enumerable: true,\n    get: function() {\n        return omit;\n    }\n}));\nfunction omit(object, keys) {\n    const omitted = {};\n    Object.keys(object).forEach((key)=>{\n        if (!keys.includes(key)) {\n            omitted[key] = object[key];\n        }\n    });\n    return omitted;\n} //# sourceMappingURL=omit.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9vbWl0LmpzIiwibWFwcGluZ3MiOiI7Ozs7d0NBQWdCQTs7O2VBQUFBOzs7QUFBVCxTQUFTQSxLQUNkQyxNQUFTLEVBQ1RDLElBQVM7SUFFVCxNQUFNQyxVQUFzQyxDQUFDO0lBQzdDQyxPQUFPRixJQUFJLENBQUNELFFBQVFJLE9BQU8sQ0FBQyxDQUFDQztRQUMzQixJQUFJLENBQUNKLEtBQUtLLFFBQVEsQ0FBQ0QsTUFBVztZQUM1QkgsT0FBTyxDQUFDRyxJQUFJLEdBQUdMLE1BQU0sQ0FBQ0ssSUFBSTtRQUM1QjtJQUNGO0lBQ0EsT0FBT0g7QUFDVCIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9vbWl0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBvbWl0PFQgZXh0ZW5kcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSwgSyBleHRlbmRzIGtleW9mIFQ+KFxuICBvYmplY3Q6IFQsXG4gIGtleXM6IEtbXVxuKTogT21pdDxULCBLPiB7XG4gIGNvbnN0IG9taXR0ZWQ6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9ID0ge31cbiAgT2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoIWtleXMuaW5jbHVkZXMoa2V5IGFzIEspKSB7XG4gICAgICBvbWl0dGVkW2tleV0gPSBvYmplY3Rba2V5XVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG9taXR0ZWQgYXMgT21pdDxULCBLPlxufVxuIl0sIm5hbWVzIjpbIm9taXQiLCJvYmplY3QiLCJrZXlzIiwib21pdHRlZCIsIk9iamVjdCIsImZvckVhY2giLCJrZXkiLCJpbmNsdWRlcyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/omit.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-path.js":
/*!******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-path.js ***!
  \******************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"parsePath\", ({\n    enumerable: true,\n    get: function() {\n        return parsePath;\n    }\n}));\nfunction parsePath(path) {\n    const hashIndex = path.indexOf('#');\n    const queryIndex = path.indexOf('?');\n    const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex);\n    if (hasQuery || hashIndex > -1) {\n        return {\n            pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n            query: hasQuery ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined) : '',\n            hash: hashIndex > -1 ? path.slice(hashIndex) : ''\n        };\n    }\n    return {\n        pathname: path,\n        query: '',\n        hash: ''\n    };\n} //# sourceMappingURL=parse-path.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXJzZS1wYXRoLmpzIiwibWFwcGluZ3MiOiJBQUFBOzs7O0NBSUM7Ozs7NkNBQ2VBOzs7ZUFBQUE7OztBQUFULFNBQVNBLFVBQVVDLElBQVk7SUFDcEMsTUFBTUMsWUFBWUQsS0FBS0UsT0FBTyxDQUFDO0lBQy9CLE1BQU1DLGFBQWFILEtBQUtFLE9BQU8sQ0FBQztJQUNoQyxNQUFNRSxXQUFXRCxhQUFhLENBQUMsS0FBTUYsQ0FBQUEsWUFBWSxLQUFLRSxhQUFhRixTQUFBQSxDQUFRO0lBRTNFLElBQUlHLFlBQVlILFlBQVksQ0FBQyxHQUFHO1FBQzlCLE9BQU87WUFDTEksVUFBVUwsS0FBS00sU0FBUyxDQUFDLEdBQUdGLFdBQVdELGFBQWFGO1lBQ3BETSxPQUFPSCxXQUNISixLQUFLTSxTQUFTLENBQUNILFlBQVlGLFlBQVksQ0FBQyxJQUFJQSxZQUFZTyxhQUN4RDtZQUNKQyxNQUFNUixZQUFZLENBQUMsSUFBSUQsS0FBS1UsS0FBSyxDQUFDVCxhQUFhO1FBQ2pEO0lBQ0Y7SUFFQSxPQUFPO1FBQUVJLFVBQVVMO1FBQU1PLE9BQU87UUFBSUUsTUFBTTtJQUFHO0FBQy9DIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhcnNlLXBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHaXZlbiBhIHBhdGggdGhpcyBmdW5jdGlvbiB3aWxsIGZpbmQgdGhlIHBhdGhuYW1lLCBxdWVyeSBhbmQgaGFzaCBhbmQgcmV0dXJuXG4gKiB0aGVtLiBUaGlzIGlzIHVzZWZ1bCB0byBwYXJzZSBmdWxsIHBhdGhzIG9uIHRoZSBjbGllbnQgc2lkZS5cbiAqIEBwYXJhbSBwYXRoIEEgcGF0aCB0byBwYXJzZSBlLmcuIC9mb28vYmFyP2lkPTEjaGFzaFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXRoKHBhdGg6IHN0cmluZykge1xuICBjb25zdCBoYXNoSW5kZXggPSBwYXRoLmluZGV4T2YoJyMnKVxuICBjb25zdCBxdWVyeUluZGV4ID0gcGF0aC5pbmRleE9mKCc/JylcbiAgY29uc3QgaGFzUXVlcnkgPSBxdWVyeUluZGV4ID4gLTEgJiYgKGhhc2hJbmRleCA8IDAgfHwgcXVlcnlJbmRleCA8IGhhc2hJbmRleClcblxuICBpZiAoaGFzUXVlcnkgfHwgaGFzaEluZGV4ID4gLTEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aG5hbWU6IHBhdGguc3Vic3RyaW5nKDAsIGhhc1F1ZXJ5ID8gcXVlcnlJbmRleCA6IGhhc2hJbmRleCksXG4gICAgICBxdWVyeTogaGFzUXVlcnlcbiAgICAgICAgPyBwYXRoLnN1YnN0cmluZyhxdWVyeUluZGV4LCBoYXNoSW5kZXggPiAtMSA/IGhhc2hJbmRleCA6IHVuZGVmaW5lZClcbiAgICAgICAgOiAnJyxcbiAgICAgIGhhc2g6IGhhc2hJbmRleCA+IC0xID8gcGF0aC5zbGljZShoYXNoSW5kZXgpIDogJycsXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgcGF0aG5hbWU6IHBhdGgsIHF1ZXJ5OiAnJywgaGFzaDogJycgfVxufVxuIl0sIm5hbWVzIjpbInBhcnNlUGF0aCIsInBhdGgiLCJoYXNoSW5kZXgiLCJpbmRleE9mIiwicXVlcnlJbmRleCIsImhhc1F1ZXJ5IiwicGF0aG5hbWUiLCJzdWJzdHJpbmciLCJxdWVyeSIsInVuZGVmaW5lZCIsImhhc2giLCJzbGljZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-path.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js":
/*!**************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js ***!
  \**************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"parseRelativeUrl\", ({\n    enumerable: true,\n    get: function() {\n        return parseRelativeUrl;\n    }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/utils.js\");\nconst _querystring = __webpack_require__(/*! ./querystring */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nfunction parseRelativeUrl(url, base, parseQuery) {\n    if (parseQuery === void 0) parseQuery = true;\n    const globalBase = new URL( false ? 0 : (0, _utils.getLocationOrigin)());\n    const resolvedBase = base ? new URL(base, globalBase) : url.startsWith('.') ? new URL( false ? 0 : window.location.href) : globalBase;\n    const { pathname, searchParams, search, hash, href, origin } = new URL(url, resolvedBase);\n    if (origin !== globalBase.origin) {\n        throw Object.defineProperty(new Error(\"invariant: invalid relative URL, router received \" + url), \"__NEXT_ERROR_CODE\", {\n            value: \"E159\",\n            enumerable: false,\n            configurable: true\n        });\n    }\n    return {\n        pathname,\n        query: parseQuery ? (0, _querystring.searchParamsToUrlQuery)(searchParams) : undefined,\n        search,\n        hash,\n        href: href.slice(origin.length),\n        // We don't know for relative URLs at this point since we set a custom, internal\n        // base that isn't surfaced to users.\n        slashes: undefined\n    };\n} //# sourceMappingURL=parse-relative-url.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXJzZS1yZWxhdGl2ZS11cmwuanMiLCJtYXBwaW5ncyI6Ijs7OztvREE2QmdCQTs7O2VBQUFBOzs7bUNBNUJrQjt5Q0FDSztBQTJCaEMsU0FBU0EsaUJBQ2RDLEdBQVcsRUFDWEMsSUFBYSxFQUNiQyxVQUFpQjtJQUFqQkEsSUFBQUEsZUFBQUEsS0FBQUEsR0FBQUEsYUFBYTtJQUViLE1BQU1DLGFBQWEsSUFBSUMsSUFDckIsTUFBNkIsR0FBRyxDQUFVLEdBQUdFLENBQUFBLEdBQUFBLE9BQUFBLGlCQUFBQTtJQUcvQyxNQUFNQyxlQUFlTixPQUNqQixJQUFJRyxJQUFJSCxNQUFNRSxjQUNkSCxJQUFJUSxVQUFVLENBQUMsT0FDYixJQUFJSixJQUNGLE1BQTZCLEdBQUcsQ0FBVSxHQUFHQyxPQUFPSSxRQUFRLENBQUNDLElBQUksSUFFbkVQO0lBRU4sTUFBTSxFQUFFUSxRQUFRLEVBQUVDLFlBQVksRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVKLElBQUksRUFBRUssTUFBTSxFQUFFLEdBQUcsSUFBSVgsSUFDakVKLEtBQ0FPO0lBR0YsSUFBSVEsV0FBV1osV0FBV1ksTUFBTSxFQUFFO1FBQ2hDLE1BQU0scUJBQW9FLENBQXBFLElBQUlDLE1BQU8sc0RBQW1EaEIsTUFBOUQ7bUJBQUE7d0JBQUE7MEJBQUE7UUFBbUU7SUFDM0U7SUFFQSxPQUFPO1FBQ0xXO1FBQ0FNLE9BQU9mLGFBQWFnQixDQUFBQSxHQUFBQSxhQUFBQSxzQkFBQUEsRUFBdUJOLGdCQUFnQk87UUFDM0ROO1FBQ0FDO1FBQ0FKLE1BQU1BLEtBQUtVLEtBQUssQ0FBQ0wsT0FBT00sTUFBTTtRQUM5QixnRkFBZ0Y7UUFDaEYscUNBQXFDO1FBQ3JDQyxTQUFTSDtJQUNYO0FBQ0YiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcGFyc2UtcmVsYXRpdmUtdXJsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGFyc2VkVXJsUXVlcnkgfSBmcm9tICdxdWVyeXN0cmluZydcbmltcG9ydCB7IGdldExvY2F0aW9uT3JpZ2luIH0gZnJvbSAnLi4vLi4vdXRpbHMnXG5pbXBvcnQgeyBzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5IH0gZnJvbSAnLi9xdWVyeXN0cmluZydcblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRSZWxhdGl2ZVVybCB7XG4gIGhhc2g6IHN0cmluZ1xuICBocmVmOiBzdHJpbmdcbiAgcGF0aG5hbWU6IHN0cmluZ1xuICBxdWVyeTogUGFyc2VkVXJsUXVlcnlcbiAgc2VhcmNoOiBzdHJpbmdcbiAgc2xhc2hlczogdW5kZWZpbmVkXG59XG5cbi8qKlxuICogUGFyc2VzIHBhdGgtcmVsYXRpdmUgdXJscyAoZS5nLiBgL2hlbGxvL3dvcmxkP2Zvbz1iYXJgKS4gSWYgdXJsIGlzbid0IHBhdGgtcmVsYXRpdmVcbiAqIChlLmcuIGAuL2hlbGxvYCkgdGhlbiBhdCBsZWFzdCBiYXNlIG11c3QgYmUuXG4gKiBBYnNvbHV0ZSB1cmxzIGFyZSByZWplY3RlZCB3aXRoIG9uZSBleGNlcHRpb24sIGluIHRoZSBicm93c2VyLCBhYnNvbHV0ZSB1cmxzIHRoYXQgYXJlIG9uXG4gKiB0aGUgY3VycmVudCBvcmlnaW4gd2lsbCBiZSBwYXJzZWQgYXMgcmVsYXRpdmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVsYXRpdmVVcmwoXG4gIHVybDogc3RyaW5nLFxuICBiYXNlPzogc3RyaW5nLFxuICBwYXJzZVF1ZXJ5PzogdHJ1ZVxuKTogUGFyc2VkUmVsYXRpdmVVcmxcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJlbGF0aXZlVXJsKFxuICB1cmw6IHN0cmluZyxcbiAgYmFzZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBwYXJzZVF1ZXJ5OiBmYWxzZVxuKTogT21pdDxQYXJzZWRSZWxhdGl2ZVVybCwgJ3F1ZXJ5Jz5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJlbGF0aXZlVXJsKFxuICB1cmw6IHN0cmluZyxcbiAgYmFzZT86IHN0cmluZyxcbiAgcGFyc2VRdWVyeSA9IHRydWVcbik6IFBhcnNlZFJlbGF0aXZlVXJsIHwgT21pdDxQYXJzZWRSZWxhdGl2ZVVybCwgJ3F1ZXJ5Jz4ge1xuICBjb25zdCBnbG9iYWxCYXNlID0gbmV3IFVSTChcbiAgICB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/ICdodHRwOi8vbicgOiBnZXRMb2NhdGlvbk9yaWdpbigpXG4gIClcblxuICBjb25zdCByZXNvbHZlZEJhc2UgPSBiYXNlXG4gICAgPyBuZXcgVVJMKGJhc2UsIGdsb2JhbEJhc2UpXG4gICAgOiB1cmwuc3RhcnRzV2l0aCgnLicpXG4gICAgICA/IG5ldyBVUkwoXG4gICAgICAgICAgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyAnaHR0cDovL24nIDogd2luZG93LmxvY2F0aW9uLmhyZWZcbiAgICAgICAgKVxuICAgICAgOiBnbG9iYWxCYXNlXG5cbiAgY29uc3QgeyBwYXRobmFtZSwgc2VhcmNoUGFyYW1zLCBzZWFyY2gsIGhhc2gsIGhyZWYsIG9yaWdpbiB9ID0gbmV3IFVSTChcbiAgICB1cmwsXG4gICAgcmVzb2x2ZWRCYXNlXG4gIClcblxuICBpZiAob3JpZ2luICE9PSBnbG9iYWxCYXNlLm9yaWdpbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YXJpYW50OiBpbnZhbGlkIHJlbGF0aXZlIFVSTCwgcm91dGVyIHJlY2VpdmVkICR7dXJsfWApXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhdGhuYW1lLFxuICAgIHF1ZXJ5OiBwYXJzZVF1ZXJ5ID8gc2VhcmNoUGFyYW1zVG9VcmxRdWVyeShzZWFyY2hQYXJhbXMpIDogdW5kZWZpbmVkLFxuICAgIHNlYXJjaCxcbiAgICBoYXNoLFxuICAgIGhyZWY6IGhyZWYuc2xpY2Uob3JpZ2luLmxlbmd0aCksXG4gICAgLy8gV2UgZG9uJ3Qga25vdyBmb3IgcmVsYXRpdmUgVVJMcyBhdCB0aGlzIHBvaW50IHNpbmNlIHdlIHNldCBhIGN1c3RvbSwgaW50ZXJuYWxcbiAgICAvLyBiYXNlIHRoYXQgaXNuJ3Qgc3VyZmFjZWQgdG8gdXNlcnMuXG4gICAgc2xhc2hlczogdW5kZWZpbmVkLFxuICB9XG59XG4iXSwibmFtZXMiOlsicGFyc2VSZWxhdGl2ZVVybCIsInVybCIsImJhc2UiLCJwYXJzZVF1ZXJ5IiwiZ2xvYmFsQmFzZSIsIlVSTCIsIndpbmRvdyIsImdldExvY2F0aW9uT3JpZ2luIiwicmVzb2x2ZWRCYXNlIiwic3RhcnRzV2l0aCIsImxvY2F0aW9uIiwiaHJlZiIsInBhdGhuYW1lIiwic2VhcmNoUGFyYW1zIiwic2VhcmNoIiwiaGFzaCIsIm9yaWdpbiIsIkVycm9yIiwicXVlcnkiLCJzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5IiwidW5kZWZpbmVkIiwic2xpY2UiLCJsZW5ndGgiLCJzbGFzaGVzIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-url.js":
/*!*****************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-url.js ***!
  \*****************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"parseUrl\", ({\n    enumerable: true,\n    get: function() {\n        return parseUrl;\n    }\n}));\nconst _querystring = __webpack_require__(/*! ./querystring */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/querystring.js\");\nconst _parserelativeurl = __webpack_require__(/*! ./parse-relative-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\");\nfunction parseUrl(url) {\n    if (url.startsWith('/')) {\n        return (0, _parserelativeurl.parseRelativeUrl)(url);\n    }\n    const parsedURL = new URL(url);\n    return {\n        hash: parsedURL.hash,\n        hostname: parsedURL.hostname,\n        href: parsedURL.href,\n        pathname: parsedURL.pathname,\n        port: parsedURL.port,\n        protocol: parsedURL.protocol,\n        query: (0, _querystring.searchParamsToUrlQuery)(parsedURL.searchParams),\n        search: parsedURL.search,\n        slashes: parsedURL.href.slice(parsedURL.protocol.length, parsedURL.protocol.length + 2) === '//'\n    };\n} //# sourceMappingURL=parse-url.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXJzZS11cmwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs0Q0FpQmdCQTs7O2VBQUFBOzs7eUNBZnVCOzhDQUNOO0FBYzFCLFNBQVNBLFNBQVNDLEdBQVc7SUFDbEMsSUFBSUEsSUFBSUMsVUFBVSxDQUFDLE1BQU07UUFDdkIsT0FBT0MsQ0FBQUEsR0FBQUEsa0JBQUFBLGdCQUFBQSxFQUFpQkY7SUFDMUI7SUFFQSxNQUFNRyxZQUFZLElBQUlDLElBQUlKO0lBQzFCLE9BQU87UUFDTEssTUFBTUYsVUFBVUUsSUFBSTtRQUNwQkMsVUFBVUgsVUFBVUcsUUFBUTtRQUM1QkMsTUFBTUosVUFBVUksSUFBSTtRQUNwQkMsVUFBVUwsVUFBVUssUUFBUTtRQUM1QkMsTUFBTU4sVUFBVU0sSUFBSTtRQUNwQkMsVUFBVVAsVUFBVU8sUUFBUTtRQUM1QkMsT0FBT0MsQ0FBQUEsR0FBQUEsYUFBQUEsc0JBQUFBLEVBQXVCVCxVQUFVVSxZQUFZO1FBQ3BEQyxRQUFRWCxVQUFVVyxNQUFNO1FBQ3hCQyxTQUNFWixVQUFVSSxJQUFJLENBQUNTLEtBQUssQ0FDbEJiLFVBQVVPLFFBQVEsQ0FBQ08sTUFBTSxFQUN6QmQsVUFBVU8sUUFBUSxDQUFDTyxNQUFNLEdBQUcsT0FDeEI7SUFDVjtBQUNGIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhcnNlLXVybC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhcnNlZFVybFF1ZXJ5IH0gZnJvbSAncXVlcnlzdHJpbmcnXG5cbmltcG9ydCB7IHNlYXJjaFBhcmFtc1RvVXJsUXVlcnkgfSBmcm9tICcuL3F1ZXJ5c3RyaW5nJ1xuaW1wb3J0IHsgcGFyc2VSZWxhdGl2ZVVybCB9IGZyb20gJy4vcGFyc2UtcmVsYXRpdmUtdXJsJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFVybCB7XG4gIGhhc2g6IHN0cmluZ1xuICBob3N0bmFtZT86IHN0cmluZyB8IG51bGxcbiAgaHJlZjogc3RyaW5nXG4gIHBhdGhuYW1lOiBzdHJpbmdcbiAgcG9ydD86IHN0cmluZyB8IG51bGxcbiAgcHJvdG9jb2w/OiBzdHJpbmcgfCBudWxsXG4gIHF1ZXJ5OiBQYXJzZWRVcmxRdWVyeVxuICBzZWFyY2g6IHN0cmluZ1xuICBzbGFzaGVzOiBib29sZWFuIHwgdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVVybCh1cmw6IHN0cmluZyk6IFBhcnNlZFVybCB7XG4gIGlmICh1cmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgcmV0dXJuIHBhcnNlUmVsYXRpdmVVcmwodXJsKVxuICB9XG5cbiAgY29uc3QgcGFyc2VkVVJMID0gbmV3IFVSTCh1cmwpXG4gIHJldHVybiB7XG4gICAgaGFzaDogcGFyc2VkVVJMLmhhc2gsXG4gICAgaG9zdG5hbWU6IHBhcnNlZFVSTC5ob3N0bmFtZSxcbiAgICBocmVmOiBwYXJzZWRVUkwuaHJlZixcbiAgICBwYXRobmFtZTogcGFyc2VkVVJMLnBhdGhuYW1lLFxuICAgIHBvcnQ6IHBhcnNlZFVSTC5wb3J0LFxuICAgIHByb3RvY29sOiBwYXJzZWRVUkwucHJvdG9jb2wsXG4gICAgcXVlcnk6IHNlYXJjaFBhcmFtc1RvVXJsUXVlcnkocGFyc2VkVVJMLnNlYXJjaFBhcmFtcyksXG4gICAgc2VhcmNoOiBwYXJzZWRVUkwuc2VhcmNoLFxuICAgIHNsYXNoZXM6XG4gICAgICBwYXJzZWRVUkwuaHJlZi5zbGljZShcbiAgICAgICAgcGFyc2VkVVJMLnByb3RvY29sLmxlbmd0aCxcbiAgICAgICAgcGFyc2VkVVJMLnByb3RvY29sLmxlbmd0aCArIDJcbiAgICAgICkgPT09ICcvLycsXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJwYXJzZVVybCIsInVybCIsInN0YXJ0c1dpdGgiLCJwYXJzZVJlbGF0aXZlVXJsIiwicGFyc2VkVVJMIiwiVVJMIiwiaGFzaCIsImhvc3RuYW1lIiwiaHJlZiIsInBhdGhuYW1lIiwicG9ydCIsInByb3RvY29sIiwicXVlcnkiLCJzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5Iiwic2VhcmNoUGFyYW1zIiwic2VhcmNoIiwic2xhc2hlcyIsInNsaWNlIiwibGVuZ3RoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-url.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js":
/*!***********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js ***!
  \***********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"pathHasPrefix\", ({\n    enumerable: true,\n    get: function() {\n        return pathHasPrefix;\n    }\n}));\nconst _parsepath = __webpack_require__(/*! ./parse-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-path.js\");\nfunction pathHasPrefix(path, prefix) {\n    if (typeof path !== 'string') {\n        return false;\n    }\n    const { pathname } = (0, _parsepath.parsePath)(path);\n    return pathname === prefix || pathname.startsWith(prefix + '/');\n} //# sourceMappingURL=path-has-prefix.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXRoLWhhcy1wcmVmaXguanMiLCJtYXBwaW5ncyI6Ijs7OztpREFTZ0JBOzs7ZUFBQUE7Ozt1Q0FUVTtBQVNuQixTQUFTQSxjQUFjQyxJQUFZLEVBQUVDLE1BQWM7SUFDeEQsSUFBSSxPQUFPRCxTQUFTLFVBQVU7UUFDNUIsT0FBTztJQUNUO0lBRUEsTUFBTSxFQUFFRSxRQUFRLEVBQUUsR0FBR0MsQ0FBQUEsR0FBQUEsV0FBQUEsU0FBQUEsRUFBVUg7SUFDL0IsT0FBT0UsYUFBYUQsVUFBVUMsU0FBU0UsVUFBVSxDQUFDSCxTQUFTO0FBQzdEIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhdGgtaGFzLXByZWZpeC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXJzZVBhdGggfSBmcm9tICcuL3BhcnNlLXBhdGgnXG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZ2l2ZW4gcGF0aCBzdGFydHMgd2l0aCBhIGdpdmVuIHByZWZpeC4gSXQgZW5zdXJlcyBpdCBtYXRjaGVzXG4gKiBleGFjdGx5IHdpdGhvdXQgY29udGFpbmluZyBleHRyYSBjaGFycy4gZS5nLiBwcmVmaXggL2RvY3Mgc2hvdWxkIHJlcGxhY2VcbiAqIGZvciAvZG9jcywgL2RvY3MvLCAvZG9jcy9hIGJ1dCBub3QgL2RvY3Nzc1xuICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcGFyYW0gcHJlZml4IFRoZSBwcmVmaXggdG8gY2hlY2sgYWdhaW5zdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhIYXNQcmVmaXgocGF0aDogc3RyaW5nLCBwcmVmaXg6IHN0cmluZykge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCB7IHBhdGhuYW1lIH0gPSBwYXJzZVBhdGgocGF0aClcbiAgcmV0dXJuIHBhdGhuYW1lID09PSBwcmVmaXggfHwgcGF0aG5hbWUuc3RhcnRzV2l0aChwcmVmaXggKyAnLycpXG59XG4iXSwibmFtZXMiOlsicGF0aEhhc1ByZWZpeCIsInBhdGgiLCJwcmVmaXgiLCJwYXRobmFtZSIsInBhcnNlUGF0aCIsInN0YXJ0c1dpdGgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/path-match.js":
/*!******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/path-match.js ***!
  \******************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"getPathMatch\", ({\n    enumerable: true,\n    get: function() {\n        return getPathMatch;\n    }\n}));\nconst _pathtoregexp = __webpack_require__(/*! next/dist/compiled/path-to-regexp */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/path-to-regexp/index.js\");\nfunction getPathMatch(path, options) {\n    const keys = [];\n    const regexp = (0, _pathtoregexp.pathToRegexp)(path, keys, {\n        delimiter: '/',\n        sensitive: typeof (options == null ? void 0 : options.sensitive) === 'boolean' ? options.sensitive : false,\n        strict: options == null ? void 0 : options.strict\n    });\n    const matcher = (0, _pathtoregexp.regexpToFunction)((options == null ? void 0 : options.regexModifier) ? new RegExp(options.regexModifier(regexp.source), regexp.flags) : regexp, keys);\n    /**\n   * A matcher function that will check if a given pathname matches the path\n   * given in the builder function. When the path does not match it will return\n   * `false` but if it does it will return an object with the matched params\n   * merged with the params provided in the second argument.\n   */ return (pathname, params)=>{\n        // If no pathname is provided it's not a match.\n        if (typeof pathname !== 'string') return false;\n        const match = matcher(pathname);\n        // If the path did not match `false` will be returned.\n        if (!match) return false;\n        /**\n     * If unnamed params are not allowed they must be removed from\n     * the matched parameters. path-to-regexp uses \"string\" for named and\n     * \"number\" for unnamed parameters.\n     */ if (options == null ? void 0 : options.removeUnnamedParams) {\n            for (const key of keys){\n                if (typeof key.name === 'number') {\n                    delete match.params[key.name];\n                }\n            }\n        }\n        return {\n            ...params,\n            ...match.params\n        };\n    };\n} //# sourceMappingURL=path-match.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wYXRoLW1hdGNoLmpzIiwibWFwcGluZ3MiOiI7Ozs7Z0RBcUNnQkE7OztlQUFBQTs7OzBDQXBDYTtBQW9DdEIsU0FBU0EsYUFBYUMsSUFBWSxFQUFFQyxPQUFpQjtJQUMxRCxNQUFNQyxPQUFjLEVBQUU7SUFDdEIsTUFBTUMsU0FBU0MsQ0FBQUEsR0FBQUEsY0FBQUEsWUFBQUEsRUFBYUosTUFBTUUsTUFBTTtRQUN0Q0csV0FBVztRQUNYQyxXQUNFLE9BQU9MLFlBQUFBLE9BQUFBLEtBQUFBLElBQUFBLFFBQVNLLFNBQUFBLE1BQWMsWUFBWUwsUUFBUUssU0FBUyxHQUFHO1FBQ2hFQyxNQUFNLEVBQUVOLFdBQUFBLE9BQUFBLEtBQUFBLElBQUFBLFFBQVNNLE1BQU07SUFDekI7SUFFQSxNQUFNQyxVQUFVQyxDQUFBQSxHQUFBQSxjQUFBQSxnQkFBQUEsRUFDZFIsQ0FBQUEsV0FBQUEsT0FBQUEsS0FBQUEsSUFBQUEsUUFBU1MsYUFBQUEsSUFDTCxJQUFJQyxPQUFPVixRQUFRUyxhQUFhLENBQUNQLE9BQU9TLE1BQU0sR0FBR1QsT0FBT1UsS0FBSyxJQUM3RFYsUUFDSkQ7SUFHRjs7Ozs7R0FLQyxHQUNELE9BQU8sQ0FBQ1ksVUFBVUM7UUFDaEIsK0NBQStDO1FBQy9DLElBQUksT0FBT0QsYUFBYSxVQUFVLE9BQU87UUFFekMsTUFBTUUsUUFBUVIsUUFBUU07UUFFdEIsc0RBQXNEO1FBQ3RELElBQUksQ0FBQ0UsT0FBTyxPQUFPO1FBRW5COzs7O0tBSUMsR0FDRCxJQUFJZixXQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxRQUFTZ0IsbUJBQW1CLEVBQUU7WUFDaEMsS0FBSyxNQUFNQyxPQUFPaEIsS0FBTTtnQkFDdEIsSUFBSSxPQUFPZ0IsSUFBSUMsSUFBSSxLQUFLLFVBQVU7b0JBQ2hDLE9BQU9ILE1BQU1ELE1BQU0sQ0FBQ0csSUFBSUMsSUFBSSxDQUFDO2dCQUMvQjtZQUNGO1FBQ0Y7UUFFQSxPQUFPO1lBQUUsR0FBR0osTUFBTTtZQUFFLEdBQUdDLE1BQU1ELE1BQU07UUFBQztJQUN0QztBQUNGIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3BhdGgtbWF0Y2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBLZXkgfSBmcm9tICduZXh0L2Rpc3QvY29tcGlsZWQvcGF0aC10by1yZWdleHAnXG5pbXBvcnQgeyBwYXRoVG9SZWdleHAgfSBmcm9tICduZXh0L2Rpc3QvY29tcGlsZWQvcGF0aC10by1yZWdleHAnXG5pbXBvcnQgeyByZWdleHBUb0Z1bmN0aW9uIH0gZnJvbSAnbmV4dC9kaXN0L2NvbXBpbGVkL3BhdGgtdG8tcmVnZXhwJ1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIHRyYW5zZm9ybWVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSByZWdleHAgZ2VuZXJhdGVkXG4gICAqIGZyb20gdGhlIHByb3ZpZGVkIHBhdGggYW5kIHBhdGgtdG8tcmVnZXhwLlxuICAgKi9cbiAgcmVnZXhNb2RpZmllcj86IChyZWdleDogc3RyaW5nKSA9PiBzdHJpbmdcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSB0aGUgZnVuY3Rpb24gd2lsbCByZW1vdmUgYWxsIHVubmFtZWQgcGFyYW1ldGVyc1xuICAgKiBmcm9tIHRoZSBtYXRjaGVkIHBhcmFtZXRlcnMuXG4gICAqL1xuICByZW1vdmVVbm5hbWVkUGFyYW1zPzogYm9vbGVhblxuICAvKipcbiAgICogV2hlbiB0cnVlIHRoZSByZWdleHAgd29uJ3QgYWxsb3cgYW4gb3B0aW9uYWwgdHJhaWxpbmcgZGVsaW1pdGVyXG4gICAqIHRvIG1hdGNoLlxuICAgKi9cbiAgc3RyaWN0PzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBXaGVuIHRydWUgdGhlIG1hdGNoZXIgd2lsbCBiZSBjYXNlLXNlbnNpdGl2ZSwgZGVmYXVsdHMgdG8gZmFsc2VcbiAgICovXG4gIHNlbnNpdGl2ZT86IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgUGF0Y2hNYXRjaGVyID0gKFxuICBwYXRobmFtZTogc3RyaW5nLFxuICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4pID0+IFJlY29yZDxzdHJpbmcsIGFueT4gfCBmYWxzZVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHBhdGggbWF0Y2hlciBmdW5jdGlvbiBmb3IgYSBnaXZlbiBwYXRoIGFuZCBvcHRpb25zIGJhc2VkIG9uXG4gKiBwYXRoLXRvLXJlZ2V4cC4gQnkgZGVmYXVsdCB0aGUgbWF0Y2ggd2lsbCBiZSBjYXNlIGluc2Vuc2l0aXZlLCBub24gc3RyaWN0XG4gKiBhbmQgZGVsaW1pdGVkIGJ5IGAvYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhdGhNYXRjaChwYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBPcHRpb25zKTogUGF0Y2hNYXRjaGVyIHtcbiAgY29uc3Qga2V5czogS2V5W10gPSBbXVxuICBjb25zdCByZWdleHAgPSBwYXRoVG9SZWdleHAocGF0aCwga2V5cywge1xuICAgIGRlbGltaXRlcjogJy8nLFxuICAgIHNlbnNpdGl2ZTpcbiAgICAgIHR5cGVvZiBvcHRpb25zPy5zZW5zaXRpdmUgPT09ICdib29sZWFuJyA/IG9wdGlvbnMuc2Vuc2l0aXZlIDogZmFsc2UsXG4gICAgc3RyaWN0OiBvcHRpb25zPy5zdHJpY3QsXG4gIH0pXG5cbiAgY29uc3QgbWF0Y2hlciA9IHJlZ2V4cFRvRnVuY3Rpb248UmVjb3JkPHN0cmluZywgYW55Pj4oXG4gICAgb3B0aW9ucz8ucmVnZXhNb2RpZmllclxuICAgICAgPyBuZXcgUmVnRXhwKG9wdGlvbnMucmVnZXhNb2RpZmllcihyZWdleHAuc291cmNlKSwgcmVnZXhwLmZsYWdzKVxuICAgICAgOiByZWdleHAsXG4gICAga2V5c1xuICApXG5cbiAgLyoqXG4gICAqIEEgbWF0Y2hlciBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYSBnaXZlbiBwYXRobmFtZSBtYXRjaGVzIHRoZSBwYXRoXG4gICAqIGdpdmVuIGluIHRoZSBidWlsZGVyIGZ1bmN0aW9uLiBXaGVuIHRoZSBwYXRoIGRvZXMgbm90IG1hdGNoIGl0IHdpbGwgcmV0dXJuXG4gICAqIGBmYWxzZWAgYnV0IGlmIGl0IGRvZXMgaXQgd2lsbCByZXR1cm4gYW4gb2JqZWN0IHdpdGggdGhlIG1hdGNoZWQgcGFyYW1zXG4gICAqIG1lcmdlZCB3aXRoIHRoZSBwYXJhbXMgcHJvdmlkZWQgaW4gdGhlIHNlY29uZCBhcmd1bWVudC5cbiAgICovXG4gIHJldHVybiAocGF0aG5hbWUsIHBhcmFtcykgPT4ge1xuICAgIC8vIElmIG5vIHBhdGhuYW1lIGlzIHByb3ZpZGVkIGl0J3Mgbm90IGEgbWF0Y2guXG4gICAgaWYgKHR5cGVvZiBwYXRobmFtZSAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3QgbWF0Y2ggPSBtYXRjaGVyKHBhdGhuYW1lKVxuXG4gICAgLy8gSWYgdGhlIHBhdGggZGlkIG5vdCBtYXRjaCBgZmFsc2VgIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAgaWYgKCFtYXRjaCkgcmV0dXJuIGZhbHNlXG5cbiAgICAvKipcbiAgICAgKiBJZiB1bm5hbWVkIHBhcmFtcyBhcmUgbm90IGFsbG93ZWQgdGhleSBtdXN0IGJlIHJlbW92ZWQgZnJvbVxuICAgICAqIHRoZSBtYXRjaGVkIHBhcmFtZXRlcnMuIHBhdGgtdG8tcmVnZXhwIHVzZXMgXCJzdHJpbmdcIiBmb3IgbmFtZWQgYW5kXG4gICAgICogXCJudW1iZXJcIiBmb3IgdW5uYW1lZCBwYXJhbWV0ZXJzLlxuICAgICAqL1xuICAgIGlmIChvcHRpb25zPy5yZW1vdmVVbm5hbWVkUGFyYW1zKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5Lm5hbWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgZGVsZXRlIG1hdGNoLnBhcmFtc1trZXkubmFtZV1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IC4uLnBhcmFtcywgLi4ubWF0Y2gucGFyYW1zIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbImdldFBhdGhNYXRjaCIsInBhdGgiLCJvcHRpb25zIiwia2V5cyIsInJlZ2V4cCIsInBhdGhUb1JlZ2V4cCIsImRlbGltaXRlciIsInNlbnNpdGl2ZSIsInN0cmljdCIsIm1hdGNoZXIiLCJyZWdleHBUb0Z1bmN0aW9uIiwicmVnZXhNb2RpZmllciIsIlJlZ0V4cCIsInNvdXJjZSIsImZsYWdzIiwicGF0aG5hbWUiLCJwYXJhbXMiLCJtYXRjaCIsInJlbW92ZVVubmFtZWRQYXJhbXMiLCJrZXkiLCJuYW1lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/path-match.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/prepare-destination.js":
/*!***************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/prepare-destination.js ***!
  \***************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    compileNonPath: function() {\n        return compileNonPath;\n    },\n    matchHas: function() {\n        return matchHas;\n    },\n    parseDestination: function() {\n        return parseDestination;\n    },\n    prepareDestination: function() {\n        return prepareDestination;\n    }\n});\nconst _pathtoregexp = __webpack_require__(/*! next/dist/compiled/path-to-regexp */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/path-to-regexp/index.js\");\nconst _escaperegexp = __webpack_require__(/*! ../../escape-regexp */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/escape-regexp.js\");\nconst _parseurl = __webpack_require__(/*! ./parse-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-url.js\");\nconst _interceptionroutes = __webpack_require__(/*! ./interception-routes */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/interception-routes.js\");\nconst _getcookieparser = __webpack_require__(/*! ../../../../server/api-utils/get-cookie-parser */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/server/api-utils/get-cookie-parser.js\");\n/**\n * Ensure only a-zA-Z are used for param names for proper interpolating\n * with path-to-regexp\n */ function getSafeParamName(paramName) {\n    let newParamName = '';\n    for(let i = 0; i < paramName.length; i++){\n        const charCode = paramName.charCodeAt(i);\n        if (charCode > 64 && charCode < 91 || // A-Z\n        charCode > 96 && charCode < 123 // a-z\n        ) {\n            newParamName += paramName[i];\n        }\n    }\n    return newParamName;\n}\nfunction escapeSegment(str, segmentName) {\n    return str.replace(new RegExp(\":\" + (0, _escaperegexp.escapeStringRegexp)(segmentName), 'g'), \"__ESC_COLON_\" + segmentName);\n}\nfunction unescapeSegments(str) {\n    return str.replace(/__ESC_COLON_/gi, ':');\n}\nfunction matchHas(req, query, has, missing) {\n    if (has === void 0) has = [];\n    if (missing === void 0) missing = [];\n    const params = {};\n    const hasMatch = (hasItem)=>{\n        let value;\n        let key = hasItem.key;\n        switch(hasItem.type){\n            case 'header':\n                {\n                    key = key.toLowerCase();\n                    value = req.headers[key];\n                    break;\n                }\n            case 'cookie':\n                {\n                    if ('cookies' in req) {\n                        value = req.cookies[hasItem.key];\n                    } else {\n                        const cookies = (0, _getcookieparser.getCookieParser)(req.headers)();\n                        value = cookies[hasItem.key];\n                    }\n                    break;\n                }\n            case 'query':\n                {\n                    value = query[key];\n                    break;\n                }\n            case 'host':\n                {\n                    const { host } = (req == null ? void 0 : req.headers) || {};\n                    // remove port from host if present\n                    const hostname = host == null ? void 0 : host.split(':', 1)[0].toLowerCase();\n                    value = hostname;\n                    break;\n                }\n            default:\n                {\n                    break;\n                }\n        }\n        if (!hasItem.value && value) {\n            params[getSafeParamName(key)] = value;\n            return true;\n        } else if (value) {\n            const matcher = new RegExp(\"^\" + hasItem.value + \"$\");\n            const matches = Array.isArray(value) ? value.slice(-1)[0].match(matcher) : value.match(matcher);\n            if (matches) {\n                if (Array.isArray(matches)) {\n                    if (matches.groups) {\n                        Object.keys(matches.groups).forEach((groupKey)=>{\n                            params[groupKey] = matches.groups[groupKey];\n                        });\n                    } else if (hasItem.type === 'host' && matches[0]) {\n                        params.host = matches[0];\n                    }\n                }\n                return true;\n            }\n        }\n        return false;\n    };\n    const allMatch = has.every((item)=>hasMatch(item)) && !missing.some((item)=>hasMatch(item));\n    if (allMatch) {\n        return params;\n    }\n    return false;\n}\nfunction compileNonPath(value, params) {\n    if (!value.includes(':')) {\n        return value;\n    }\n    for (const key of Object.keys(params)){\n        if (value.includes(\":\" + key)) {\n            value = value.replace(new RegExp(\":\" + key + \"\\\\*\", 'g'), \":\" + key + \"--ESCAPED_PARAM_ASTERISKS\").replace(new RegExp(\":\" + key + \"\\\\?\", 'g'), \":\" + key + \"--ESCAPED_PARAM_QUESTION\").replace(new RegExp(\":\" + key + \"\\\\+\", 'g'), \":\" + key + \"--ESCAPED_PARAM_PLUS\").replace(new RegExp(\":\" + key + \"(?!\\\\w)\", 'g'), \"--ESCAPED_PARAM_COLON\" + key);\n        }\n    }\n    value = value.replace(/(:|\\*|\\?|\\+|\\(|\\)|\\{|\\})/g, '\\\\$1').replace(/--ESCAPED_PARAM_PLUS/g, '+').replace(/--ESCAPED_PARAM_COLON/g, ':').replace(/--ESCAPED_PARAM_QUESTION/g, '?').replace(/--ESCAPED_PARAM_ASTERISKS/g, '*');\n    // the value needs to start with a forward-slash to be compiled\n    // correctly\n    return (0, _pathtoregexp.compile)(\"/\" + value, {\n        validate: false\n    })(params).slice(1);\n}\nfunction parseDestination(args) {\n    let escaped = args.destination;\n    for (const param of Object.keys({\n        ...args.params,\n        ...args.query\n    })){\n        if (!param) continue;\n        escaped = escapeSegment(escaped, param);\n    }\n    const parsed = (0, _parseurl.parseUrl)(escaped);\n    let pathname = parsed.pathname;\n    if (pathname) {\n        pathname = unescapeSegments(pathname);\n    }\n    let href = parsed.href;\n    if (href) {\n        href = unescapeSegments(href);\n    }\n    let hostname = parsed.hostname;\n    if (hostname) {\n        hostname = unescapeSegments(hostname);\n    }\n    let hash = parsed.hash;\n    if (hash) {\n        hash = unescapeSegments(hash);\n    }\n    return {\n        ...parsed,\n        pathname,\n        hostname,\n        href,\n        hash\n    };\n}\nfunction prepareDestination(args) {\n    const parsedDestination = parseDestination(args);\n    const { hostname: destHostname, query: destQuery } = parsedDestination;\n    // The following code assumes that the pathname here includes the hash if it's\n    // present.\n    let destPath = parsedDestination.pathname;\n    if (parsedDestination.hash) {\n        destPath = \"\" + destPath + parsedDestination.hash;\n    }\n    const destParams = [];\n    const destPathParamKeys = [];\n    (0, _pathtoregexp.pathToRegexp)(destPath, destPathParamKeys);\n    for (const key of destPathParamKeys){\n        destParams.push(key.name);\n    }\n    if (destHostname) {\n        const destHostnameParamKeys = [];\n        (0, _pathtoregexp.pathToRegexp)(destHostname, destHostnameParamKeys);\n        for (const key of destHostnameParamKeys){\n            destParams.push(key.name);\n        }\n    }\n    const destPathCompiler = (0, _pathtoregexp.compile)(destPath, // have already validated before we got to this point and validating\n    // breaks compiling destinations with named pattern params from the source\n    // e.g. /something:hello(.*) -> /another/:hello is broken with validation\n    // since compile validation is meant for reversing and not for inserting\n    // params from a separate path-regex into another\n    {\n        validate: false\n    });\n    let destHostnameCompiler;\n    if (destHostname) {\n        destHostnameCompiler = (0, _pathtoregexp.compile)(destHostname, {\n            validate: false\n        });\n    }\n    // update any params in query values\n    for (const [key, strOrArray] of Object.entries(destQuery)){\n        // the value needs to start with a forward-slash to be compiled\n        // correctly\n        if (Array.isArray(strOrArray)) {\n            destQuery[key] = strOrArray.map((value)=>compileNonPath(unescapeSegments(value), args.params));\n        } else if (typeof strOrArray === 'string') {\n            destQuery[key] = compileNonPath(unescapeSegments(strOrArray), args.params);\n        }\n    }\n    // add path params to query if it's not a redirect and not\n    // already defined in destination query or path\n    let paramKeys = Object.keys(args.params).filter((name)=>name !== 'nextInternalLocale');\n    if (args.appendParamsToQuery && !paramKeys.some((key)=>destParams.includes(key))) {\n        for (const key of paramKeys){\n            if (!(key in destQuery)) {\n                destQuery[key] = args.params[key];\n            }\n        }\n    }\n    let newUrl;\n    // The compiler also that the interception route marker is an unnamed param, hence '0',\n    // so we need to add it to the params object.\n    if ((0, _interceptionroutes.isInterceptionRouteAppPath)(destPath)) {\n        for (const segment of destPath.split('/')){\n            const marker = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n            if (marker) {\n                if (marker === '(..)(..)') {\n                    args.params['0'] = '(..)';\n                    args.params['1'] = '(..)';\n                } else {\n                    args.params['0'] = marker;\n                }\n                break;\n            }\n        }\n    }\n    try {\n        newUrl = destPathCompiler(args.params);\n        const [pathname, hash] = newUrl.split('#', 2);\n        if (destHostnameCompiler) {\n            parsedDestination.hostname = destHostnameCompiler(args.params);\n        }\n        parsedDestination.pathname = pathname;\n        parsedDestination.hash = \"\" + (hash ? '#' : '') + (hash || '');\n        delete parsedDestination.search;\n    } catch (err) {\n        if (err.message.match(/Expected .*? to not repeat, but got an array/)) {\n            throw Object.defineProperty(new Error(\"To use a multi-match in the destination you must add `*` at the end of the param name to signify it should repeat. https://nextjs.org/docs/messages/invalid-multi-match\"), \"__NEXT_ERROR_CODE\", {\n                value: \"E329\",\n                enumerable: false,\n                configurable: true\n            });\n        }\n        throw err;\n    }\n    // Query merge order lowest priority to highest\n    // 1. initial URL query values\n    // 2. path segment values\n    // 3. destination specified query values\n    parsedDestination.query = {\n        ...args.query,\n        ...parsedDestination.query\n    };\n    return {\n        newUrl,\n        destQuery,\n        parsedDestination\n    };\n} //# sourceMappingURL=prepare-destination.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9wcmVwYXJlLWRlc3RpbmF0aW9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQThIZ0JBLGNBQWM7ZUFBZEE7O0lBL0VBQyxRQUFRO2VBQVJBOztJQWtIQUMsZ0JBQWdCO2VBQWhCQTs7SUEyQ0FDLGtCQUFrQjtlQUFsQkE7OzswQ0F0TXNCOzBDQUNIO3NDQUNWO2dEQUlsQjs2Q0FDeUI7QUFHaEM7OztDQUdDLEdBQ0QsU0FBU0MsaUJBQWlCQyxTQUFpQjtJQUN6QyxJQUFJQyxlQUFlO0lBRW5CLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJRixVQUFVRyxNQUFNLEVBQUVELElBQUs7UUFDekMsTUFBTUUsV0FBV0osVUFBVUssVUFBVSxDQUFDSDtRQUV0QyxJQUNHRSxXQUFXLE1BQU1BLFdBQVcsTUFBTyxNQUFNO1FBQ3pDQSxXQUFXLE1BQU1BLFdBQVcsSUFBSyxNQUFNO1VBQ3hDO1lBQ0FILGdCQUFnQkQsU0FBUyxDQUFDRSxFQUFFO1FBQzlCO0lBQ0Y7SUFDQSxPQUFPRDtBQUNUO0FBRUEsU0FBU0ssY0FBY0MsR0FBVyxFQUFFQyxXQUFtQjtJQUNyRCxPQUFPRCxJQUFJRSxPQUFPLENBQ2hCLElBQUlDLE9BQVEsTUFBR0MsQ0FBQUEsR0FBQUEsY0FBQUEsa0JBQUFBLEVBQW1CSCxjQUFnQixNQUNqRCxpQkFBY0E7QUFFbkI7QUFFQSxTQUFTSSxpQkFBaUJMLEdBQVc7SUFDbkMsT0FBT0EsSUFBSUUsT0FBTyxDQUFDLGtCQUFrQjtBQUN2QztBQUVPLFNBQVNiLFNBQ2RpQixHQUFzQyxFQUN0Q0MsS0FBYSxFQUNiQyxHQUFvQixFQUNwQkMsT0FBd0I7SUFEeEJELElBQUFBLFFBQUFBLEtBQUFBLEdBQUFBLE1BQWtCLEVBQUU7SUFDcEJDLElBQUFBLFlBQUFBLEtBQUFBLEdBQUFBLFVBQXNCLEVBQUU7SUFFeEIsTUFBTUMsU0FBaUIsQ0FBQztJQUV4QixNQUFNQyxXQUFXLENBQUNDO1FBQ2hCLElBQUlDO1FBQ0osSUFBSUMsTUFBTUYsUUFBUUUsR0FBRztRQUVyQixPQUFRRixRQUFRRyxJQUFJO1lBQ2xCLEtBQUs7Z0JBQVU7b0JBQ2JELE1BQU1BLElBQUtFLFdBQVc7b0JBQ3RCSCxRQUFRUCxJQUFJVyxPQUFPLENBQUNILElBQUk7b0JBQ3hCO2dCQUNGO1lBQ0EsS0FBSztnQkFBVTtvQkFDYixJQUFJLGFBQWFSLEtBQUs7d0JBQ3BCTyxRQUFRUCxJQUFJWSxPQUFPLENBQUNOLFFBQVFFLEdBQUcsQ0FBQztvQkFDbEMsT0FBTzt3QkFDTCxNQUFNSSxVQUFVQyxDQUFBQSxHQUFBQSxpQkFBQUEsZUFBQUEsRUFBZ0JiLElBQUlXLE9BQU87d0JBQzNDSixRQUFRSyxPQUFPLENBQUNOLFFBQVFFLEdBQUcsQ0FBQztvQkFDOUI7b0JBRUE7Z0JBQ0Y7WUFDQSxLQUFLO2dCQUFTO29CQUNaRCxRQUFRTixLQUFLLENBQUNPLElBQUs7b0JBQ25CO2dCQUNGO1lBQ0EsS0FBSztnQkFBUTtvQkFDWCxNQUFNLEVBQUVNLElBQUksRUFBRSxHQUFHZCxRQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxJQUFLVyxPQUFBQSxLQUFXLENBQUM7b0JBQ2xDLG1DQUFtQztvQkFDbkMsTUFBTUksV0FBV0QsUUFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsS0FBTUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQ04sV0FBVztvQkFDbkRILFFBQVFRO29CQUNSO2dCQUNGO1lBQ0E7Z0JBQVM7b0JBQ1A7Z0JBQ0Y7UUFDRjtRQUVBLElBQUksQ0FBQ1QsUUFBUUMsS0FBSyxJQUFJQSxPQUFPO1lBQzNCSCxNQUFNLENBQUNsQixpQkFBaUJzQixLQUFNLEdBQUdEO1lBQ2pDLE9BQU87UUFDVCxPQUFPLElBQUlBLE9BQU87WUFDaEIsTUFBTVUsVUFBVSxJQUFJcEIsT0FBUSxNQUFHUyxRQUFRQyxLQUFLLEdBQUM7WUFDN0MsTUFBTVcsVUFBVUMsTUFBTUMsT0FBTyxDQUFDYixTQUMxQkEsTUFBTWMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQ0MsS0FBSyxDQUFDTCxXQUN6QlYsTUFBTWUsS0FBSyxDQUFDTDtZQUVoQixJQUFJQyxTQUFTO2dCQUNYLElBQUlDLE1BQU1DLE9BQU8sQ0FBQ0YsVUFBVTtvQkFDMUIsSUFBSUEsUUFBUUssTUFBTSxFQUFFO3dCQUNsQkMsT0FBT0MsSUFBSSxDQUFDUCxRQUFRSyxNQUFNLEVBQUVHLE9BQU8sQ0FBQyxDQUFDQzs0QkFDbkN2QixNQUFNLENBQUN1QixTQUFTLEdBQUdULFFBQVFLLE1BQU8sQ0FBQ0ksU0FBUzt3QkFDOUM7b0JBQ0YsT0FBTyxJQUFJckIsUUFBUUcsSUFBSSxLQUFLLFVBQVVTLE9BQU8sQ0FBQyxFQUFFLEVBQUU7d0JBQ2hEZCxPQUFPVSxJQUFJLEdBQUdJLE9BQU8sQ0FBQyxFQUFFO29CQUMxQjtnQkFDRjtnQkFDQSxPQUFPO1lBQ1Q7UUFDRjtRQUNBLE9BQU87SUFDVDtJQUVBLE1BQU1VLFdBQ0oxQixJQUFJMkIsS0FBSyxDQUFDLENBQUNDLE9BQVN6QixTQUFTeUIsVUFDN0IsQ0FBQzNCLFFBQVE0QixJQUFJLENBQUMsQ0FBQ0QsT0FBU3pCLFNBQVN5QjtJQUVuQyxJQUFJRixVQUFVO1FBQ1osT0FBT3hCO0lBQ1Q7SUFDQSxPQUFPO0FBQ1Q7QUFFTyxTQUFTdEIsZUFBZXlCLEtBQWEsRUFBRUgsTUFBYztJQUMxRCxJQUFJLENBQUNHLE1BQU15QixRQUFRLENBQUMsTUFBTTtRQUN4QixPQUFPekI7SUFDVDtJQUVBLEtBQUssTUFBTUMsT0FBT2dCLE9BQU9DLElBQUksQ0FBQ3JCLFFBQVM7UUFDckMsSUFBSUcsTUFBTXlCLFFBQVEsQ0FBRSxNQUFHeEIsTUFBUTtZQUM3QkQsUUFBUUEsTUFDTFgsT0FBTyxDQUNOLElBQUlDLE9BQVEsTUFBR1csTUFBSSxPQUFNLE1BQ3hCLE1BQUdBLE1BQUksNkJBRVRaLE9BQU8sQ0FDTixJQUFJQyxPQUFRLE1BQUdXLE1BQUksT0FBTSxNQUN4QixNQUFHQSxNQUFJLDRCQUVUWixPQUFPLENBQUMsSUFBSUMsT0FBUSxNQUFHVyxNQUFJLE9BQU0sTUFBTyxNQUFHQSxNQUFJLHdCQUMvQ1osT0FBTyxDQUNOLElBQUlDLE9BQVEsTUFBR1csTUFBSSxXQUFVLE1BQzVCLDBCQUF1QkE7UUFFOUI7SUFDRjtJQUNBRCxRQUFRQSxNQUNMWCxPQUFPLENBQUMsNkJBQTZCLFFBQ3JDQSxPQUFPLENBQUMseUJBQXlCLEtBQ2pDQSxPQUFPLENBQUMsMEJBQTBCLEtBQ2xDQSxPQUFPLENBQUMsNkJBQTZCLEtBQ3JDQSxPQUFPLENBQUMsOEJBQThCO0lBRXpDLCtEQUErRDtJQUMvRCxZQUFZO0lBQ1osT0FBT3FDLENBQUFBLEdBQUFBLGNBQUFBLE9BQUFBLEVBQVMsTUFBRzFCLE9BQVM7UUFBRTJCLFVBQVU7SUFBTSxHQUFHOUIsUUFBUWlCLEtBQUssQ0FBQztBQUNqRTtBQUVPLFNBQVNyQyxpQkFBaUJtRCxJQUloQztJQUNDLElBQUlDLFVBQVVELEtBQUtFLFdBQVc7SUFDOUIsS0FBSyxNQUFNQyxTQUFTZCxPQUFPQyxJQUFJLENBQUM7UUFBRSxHQUFHVSxLQUFLL0IsTUFBTTtRQUFFLEdBQUcrQixLQUFLbEMsS0FBSztJQUFDLEdBQUk7UUFDbEUsSUFBSSxDQUFDcUMsT0FBTztRQUVaRixVQUFVM0MsY0FBYzJDLFNBQVNFO0lBQ25DO0lBRUEsTUFBTUMsU0FBU0MsQ0FBQUEsR0FBQUEsVUFBQUEsUUFBQUEsRUFBU0o7SUFFeEIsSUFBSUssV0FBV0YsT0FBT0UsUUFBUTtJQUM5QixJQUFJQSxVQUFVO1FBQ1pBLFdBQVcxQyxpQkFBaUIwQztJQUM5QjtJQUVBLElBQUlDLE9BQU9ILE9BQU9HLElBQUk7SUFDdEIsSUFBSUEsTUFBTTtRQUNSQSxPQUFPM0MsaUJBQWlCMkM7SUFDMUI7SUFFQSxJQUFJM0IsV0FBV3dCLE9BQU94QixRQUFRO0lBQzlCLElBQUlBLFVBQVU7UUFDWkEsV0FBV2hCLGlCQUFpQmdCO0lBQzlCO0lBRUEsSUFBSTRCLE9BQU9KLE9BQU9JLElBQUk7SUFDdEIsSUFBSUEsTUFBTTtRQUNSQSxPQUFPNUMsaUJBQWlCNEM7SUFDMUI7SUFFQSxPQUFPO1FBQ0wsR0FBR0osTUFBTTtRQUNURTtRQUNBMUI7UUFDQTJCO1FBQ0FDO0lBQ0Y7QUFDRjtBQUVPLFNBQVMxRCxtQkFBbUJrRCxJQUtsQztJQUNDLE1BQU1TLG9CQUFvQjVELGlCQUFpQm1EO0lBRTNDLE1BQU0sRUFBRXBCLFVBQVU4QixZQUFZLEVBQUU1QyxPQUFPNkMsU0FBUyxFQUFFLEdBQUdGO0lBRXJELDhFQUE4RTtJQUM5RSxXQUFXO0lBQ1gsSUFBSUcsV0FBV0gsa0JBQWtCSCxRQUFRO0lBQ3pDLElBQUlHLGtCQUFrQkQsSUFBSSxFQUFFO1FBQzFCSSxXQUFZLEtBQUVBLFdBQVdILGtCQUFrQkQsSUFBSTtJQUNqRDtJQUVBLE1BQU1LLGFBQWtDLEVBQUU7SUFFMUMsTUFBTUMsb0JBQTJCLEVBQUU7SUFDbkNDLENBQUFBLEdBQUFBLGNBQUFBLFlBQUFBLEVBQWFILFVBQVVFO0lBQ3ZCLEtBQUssTUFBTXpDLE9BQU95QyxrQkFBbUI7UUFDbkNELFdBQVdHLElBQUksQ0FBQzNDLElBQUk0QyxJQUFJO0lBQzFCO0lBRUEsSUFBSVAsY0FBYztRQUNoQixNQUFNUSx3QkFBK0IsRUFBRTtRQUN2Q0gsQ0FBQUEsR0FBQUEsY0FBQUEsWUFBQUEsRUFBYUwsY0FBY1E7UUFDM0IsS0FBSyxNQUFNN0MsT0FBTzZDLHNCQUF1QjtZQUN2Q0wsV0FBV0csSUFBSSxDQUFDM0MsSUFBSTRDLElBQUk7UUFDMUI7SUFDRjtJQUVBLE1BQU1FLG1CQUFtQnJCLENBQUFBLEdBQUFBLGNBQUFBLE9BQUFBLEVBQ3ZCYyxVQUNBLG9FQUFvRTtJQUVwRSwwRUFBMEU7SUFDMUUseUVBQXlFO0lBQ3pFLHdFQUF3RTtJQUN4RSxpREFBaUQ7SUFDakQ7UUFBRWIsVUFBVTtJQUFNO0lBR3BCLElBQUlxQjtJQUNKLElBQUlWLGNBQWM7UUFDaEJVLHVCQUF1QnRCLENBQUFBLEdBQUFBLGNBQUFBLE9BQUFBLEVBQVFZLGNBQWM7WUFBRVgsVUFBVTtRQUFNO0lBQ2pFO0lBRUEsb0NBQW9DO0lBQ3BDLEtBQUssTUFBTSxDQUFDMUIsS0FBS2dELFdBQVcsSUFBSWhDLE9BQU9pQyxPQUFPLENBQUNYLFdBQVk7UUFDekQsK0RBQStEO1FBQy9ELFlBQVk7UUFDWixJQUFJM0IsTUFBTUMsT0FBTyxDQUFDb0MsYUFBYTtZQUM3QlYsU0FBUyxDQUFDdEMsSUFBSSxHQUFHZ0QsV0FBV0UsR0FBRyxDQUFDLENBQUNuRCxRQUMvQnpCLGVBQWVpQixpQkFBaUJRLFFBQVE0QixLQUFLL0IsTUFBTTtRQUV2RCxPQUFPLElBQUksT0FBT29ELGVBQWUsVUFBVTtZQUN6Q1YsU0FBUyxDQUFDdEMsSUFBSSxHQUFHMUIsZUFBZWlCLGlCQUFpQnlELGFBQWFyQixLQUFLL0IsTUFBTTtRQUMzRTtJQUNGO0lBRUEsMERBQTBEO0lBQzFELCtDQUErQztJQUMvQyxJQUFJdUQsWUFBWW5DLE9BQU9DLElBQUksQ0FBQ1UsS0FBSy9CLE1BQU0sRUFBRXdELE1BQU0sQ0FDN0MsQ0FBQ1IsT0FBU0EsU0FBUztJQUdyQixJQUNFakIsS0FBSzBCLG1CQUFtQixJQUN4QixDQUFDRixVQUFVNUIsSUFBSSxDQUFDLENBQUN2QixNQUFRd0MsV0FBV2hCLFFBQVEsQ0FBQ3hCLE9BQzdDO1FBQ0EsS0FBSyxNQUFNQSxPQUFPbUQsVUFBVztZQUMzQixJQUFJLENBQUVuRCxDQUFBQSxPQUFPc0MsU0FBQUEsQ0FBUSxFQUFJO2dCQUN2QkEsU0FBUyxDQUFDdEMsSUFBSSxHQUFHMkIsS0FBSy9CLE1BQU0sQ0FBQ0ksSUFBSTtZQUNuQztRQUNGO0lBQ0Y7SUFFQSxJQUFJc0Q7SUFFSix1RkFBdUY7SUFDdkYsNkNBQTZDO0lBQzdDLElBQUlDLENBQUFBLEdBQUFBLG9CQUFBQSwwQkFBQUEsRUFBMkJoQixXQUFXO1FBQ3hDLEtBQUssTUFBTWlCLFdBQVdqQixTQUFTL0IsS0FBSyxDQUFDLEtBQU07WUFDekMsTUFBTWlELFNBQVNDLG9CQUFBQSwwQkFBMEIsQ0FBQ0MsSUFBSSxDQUFDLENBQUNDLElBQzlDSixRQUFRSyxVQUFVLENBQUNEO1lBRXJCLElBQUlILFFBQVE7Z0JBQ1YsSUFBSUEsV0FBVyxZQUFZO29CQUN6QjlCLEtBQUsvQixNQUFNLENBQUMsSUFBSSxHQUFHO29CQUNuQitCLEtBQUsvQixNQUFNLENBQUMsSUFBSSxHQUFHO2dCQUNyQixPQUFPO29CQUNMK0IsS0FBSy9CLE1BQU0sQ0FBQyxJQUFJLEdBQUc2RDtnQkFDckI7Z0JBQ0E7WUFDRjtRQUNGO0lBQ0Y7SUFFQSxJQUFJO1FBQ0ZILFNBQVNSLGlCQUFpQm5CLEtBQUsvQixNQUFNO1FBRXJDLE1BQU0sQ0FBQ3FDLFVBQVVFLEtBQUssR0FBR21CLE9BQU85QyxLQUFLLENBQUMsS0FBSztRQUMzQyxJQUFJdUMsc0JBQXNCO1lBQ3hCWCxrQkFBa0I3QixRQUFRLEdBQUd3QyxxQkFBcUJwQixLQUFLL0IsTUFBTTtRQUMvRDtRQUNBd0Msa0JBQWtCSCxRQUFRLEdBQUdBO1FBQzdCRyxrQkFBa0JELElBQUksR0FBSSxLQUFFQSxDQUFBQSxPQUFPLE1BQU0sR0FBQyxJQUFJQSxRQUFRLEdBQUM7UUFDdkQsT0FBUUMsa0JBQTBCMEIsTUFBTTtJQUMxQyxFQUFFLE9BQU9DLEtBQVU7UUFDakIsSUFBSUEsSUFBSUMsT0FBTyxDQUFDbEQsS0FBSyxDQUFDLGlEQUFpRDtZQUNyRSxNQUFNLHFCQUVMLENBRkssSUFBSW1ELE1BQ1AsNEtBREc7dUJBQUE7NEJBQUE7OEJBQUE7WUFFTjtRQUNGO1FBQ0EsTUFBTUY7SUFDUjtJQUVBLCtDQUErQztJQUMvQyw4QkFBOEI7SUFDOUIseUJBQXlCO0lBQ3pCLHdDQUF3QztJQUN4QzNCLGtCQUFrQjNDLEtBQUssR0FBRztRQUN4QixHQUFHa0MsS0FBS2xDLEtBQUs7UUFDYixHQUFHMkMsa0JBQWtCM0MsS0FBSztJQUM1QjtJQUVBLE9BQU87UUFDTDZEO1FBQ0FoQjtRQUNBRjtJQUNGO0FBQ0YiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcHJlcGFyZS1kZXN0aW5hdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEluY29taW5nTWVzc2FnZSB9IGZyb20gJ2h0dHAnXG5pbXBvcnQgdHlwZSB7IEtleSB9IGZyb20gJ25leHQvZGlzdC9jb21waWxlZC9wYXRoLXRvLXJlZ2V4cCdcbmltcG9ydCB0eXBlIHsgTmV4dFBhcnNlZFVybFF1ZXJ5IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmVyL3JlcXVlc3QtbWV0YSdcbmltcG9ydCB0eXBlIHsgUm91dGVIYXMgfSBmcm9tICcuLi8uLi8uLi8uLi9saWIvbG9hZC1jdXN0b20tcm91dGVzJ1xuaW1wb3J0IHR5cGUgeyBCYXNlTmV4dFJlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2ZXIvYmFzZS1odHRwJ1xuXG5pbXBvcnQgeyBjb21waWxlLCBwYXRoVG9SZWdleHAgfSBmcm9tICduZXh0L2Rpc3QvY29tcGlsZWQvcGF0aC10by1yZWdleHAnXG5pbXBvcnQgeyBlc2NhcGVTdHJpbmdSZWdleHAgfSBmcm9tICcuLi8uLi9lc2NhcGUtcmVnZXhwJ1xuaW1wb3J0IHsgcGFyc2VVcmwgfSBmcm9tICcuL3BhcnNlLXVybCdcbmltcG9ydCB7XG4gIElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTLFxuICBpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aCxcbn0gZnJvbSAnLi9pbnRlcmNlcHRpb24tcm91dGVzJ1xuaW1wb3J0IHsgZ2V0Q29va2llUGFyc2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmVyL2FwaS11dGlscy9nZXQtY29va2llLXBhcnNlcidcbmltcG9ydCB0eXBlIHsgUGFyYW1zIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmVyL3JlcXVlc3QvcGFyYW1zJ1xuXG4vKipcbiAqIEVuc3VyZSBvbmx5IGEtekEtWiBhcmUgdXNlZCBmb3IgcGFyYW0gbmFtZXMgZm9yIHByb3BlciBpbnRlcnBvbGF0aW5nXG4gKiB3aXRoIHBhdGgtdG8tcmVnZXhwXG4gKi9cbmZ1bmN0aW9uIGdldFNhZmVQYXJhbU5hbWUocGFyYW1OYW1lOiBzdHJpbmcpIHtcbiAgbGV0IG5ld1BhcmFtTmFtZSA9ICcnXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbU5hbWUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyQ29kZSA9IHBhcmFtTmFtZS5jaGFyQ29kZUF0KGkpXG5cbiAgICBpZiAoXG4gICAgICAoY2hhckNvZGUgPiA2NCAmJiBjaGFyQ29kZSA8IDkxKSB8fCAvLyBBLVpcbiAgICAgIChjaGFyQ29kZSA+IDk2ICYmIGNoYXJDb2RlIDwgMTIzKSAvLyBhLXpcbiAgICApIHtcbiAgICAgIG5ld1BhcmFtTmFtZSArPSBwYXJhbU5hbWVbaV1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ld1BhcmFtTmFtZVxufVxuXG5mdW5jdGlvbiBlc2NhcGVTZWdtZW50KHN0cjogc3RyaW5nLCBzZWdtZW50TmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShcbiAgICBuZXcgUmVnRXhwKGA6JHtlc2NhcGVTdHJpbmdSZWdleHAoc2VnbWVudE5hbWUpfWAsICdnJyksXG4gICAgYF9fRVNDX0NPTE9OXyR7c2VnbWVudE5hbWV9YFxuICApXG59XG5cbmZ1bmN0aW9uIHVuZXNjYXBlU2VnbWVudHMoc3RyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9fX0VTQ19DT0xPTl8vZ2ksICc6Jylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoSGFzKFxuICByZXE6IEJhc2VOZXh0UmVxdWVzdCB8IEluY29taW5nTWVzc2FnZSxcbiAgcXVlcnk6IFBhcmFtcyxcbiAgaGFzOiBSb3V0ZUhhc1tdID0gW10sXG4gIG1pc3Npbmc6IFJvdXRlSGFzW10gPSBbXVxuKTogZmFsc2UgfCBQYXJhbXMge1xuICBjb25zdCBwYXJhbXM6IFBhcmFtcyA9IHt9XG5cbiAgY29uc3QgaGFzTWF0Y2ggPSAoaGFzSXRlbTogUm91dGVIYXMpID0+IHtcbiAgICBsZXQgdmFsdWVcbiAgICBsZXQga2V5ID0gaGFzSXRlbS5rZXlcblxuICAgIHN3aXRjaCAoaGFzSXRlbS50eXBlKSB7XG4gICAgICBjYXNlICdoZWFkZXInOiB7XG4gICAgICAgIGtleSA9IGtleSEudG9Mb3dlckNhc2UoKVxuICAgICAgICB2YWx1ZSA9IHJlcS5oZWFkZXJzW2tleV0gYXMgc3RyaW5nXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlICdjb29raWUnOiB7XG4gICAgICAgIGlmICgnY29va2llcycgaW4gcmVxKSB7XG4gICAgICAgICAgdmFsdWUgPSByZXEuY29va2llc1toYXNJdGVtLmtleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb29raWVzID0gZ2V0Q29va2llUGFyc2VyKHJlcS5oZWFkZXJzKSgpXG4gICAgICAgICAgdmFsdWUgPSBjb29raWVzW2hhc0l0ZW0ua2V5XVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3F1ZXJ5Jzoge1xuICAgICAgICB2YWx1ZSA9IHF1ZXJ5W2tleSFdXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlICdob3N0Jzoge1xuICAgICAgICBjb25zdCB7IGhvc3QgfSA9IHJlcT8uaGVhZGVycyB8fCB7fVxuICAgICAgICAvLyByZW1vdmUgcG9ydCBmcm9tIGhvc3QgaWYgcHJlc2VudFxuICAgICAgICBjb25zdCBob3N0bmFtZSA9IGhvc3Q/LnNwbGl0KCc6JywgMSlbMF0udG9Mb3dlckNhc2UoKVxuICAgICAgICB2YWx1ZSA9IGhvc3RuYW1lXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFoYXNJdGVtLnZhbHVlICYmIHZhbHVlKSB7XG4gICAgICBwYXJhbXNbZ2V0U2FmZVBhcmFtTmFtZShrZXkhKV0gPSB2YWx1ZVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBtYXRjaGVyID0gbmV3IFJlZ0V4cChgXiR7aGFzSXRlbS52YWx1ZX0kYClcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHZhbHVlLnNsaWNlKC0xKVswXS5tYXRjaChtYXRjaGVyKVxuICAgICAgICA6IHZhbHVlLm1hdGNoKG1hdGNoZXIpXG5cbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1hdGNoZXMpKSB7XG4gICAgICAgICAgaWYgKG1hdGNoZXMuZ3JvdXBzKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhtYXRjaGVzLmdyb3VwcykuZm9yRWFjaCgoZ3JvdXBLZXkpID0+IHtcbiAgICAgICAgICAgICAgcGFyYW1zW2dyb3VwS2V5XSA9IG1hdGNoZXMuZ3JvdXBzIVtncm91cEtleV1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNJdGVtLnR5cGUgPT09ICdob3N0JyAmJiBtYXRjaGVzWzBdKSB7XG4gICAgICAgICAgICBwYXJhbXMuaG9zdCA9IG1hdGNoZXNbMF1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBhbGxNYXRjaCA9XG4gICAgaGFzLmV2ZXJ5KChpdGVtKSA9PiBoYXNNYXRjaChpdGVtKSkgJiZcbiAgICAhbWlzc2luZy5zb21lKChpdGVtKSA9PiBoYXNNYXRjaChpdGVtKSlcblxuICBpZiAoYWxsTWF0Y2gpIHtcbiAgICByZXR1cm4gcGFyYW1zXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlTm9uUGF0aCh2YWx1ZTogc3RyaW5nLCBwYXJhbXM6IFBhcmFtcyk6IHN0cmluZyB7XG4gIGlmICghdmFsdWUuaW5jbHVkZXMoJzonKSkge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGFyYW1zKSkge1xuICAgIGlmICh2YWx1ZS5pbmNsdWRlcyhgOiR7a2V5fWApKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgIG5ldyBSZWdFeHAoYDoke2tleX1cXFxcKmAsICdnJyksXG4gICAgICAgICAgYDoke2tleX0tLUVTQ0FQRURfUEFSQU1fQVNURVJJU0tTYFxuICAgICAgICApXG4gICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgIG5ldyBSZWdFeHAoYDoke2tleX1cXFxcP2AsICdnJyksXG4gICAgICAgICAgYDoke2tleX0tLUVTQ0FQRURfUEFSQU1fUVVFU1RJT05gXG4gICAgICAgIClcbiAgICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChgOiR7a2V5fVxcXFwrYCwgJ2cnKSwgYDoke2tleX0tLUVTQ0FQRURfUEFSQU1fUExVU2ApXG4gICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgIG5ldyBSZWdFeHAoYDoke2tleX0oPyFcXFxcdylgLCAnZycpLFxuICAgICAgICAgIGAtLUVTQ0FQRURfUEFSQU1fQ09MT04ke2tleX1gXG4gICAgICAgIClcbiAgICB9XG4gIH1cbiAgdmFsdWUgPSB2YWx1ZVxuICAgIC5yZXBsYWNlKC8oOnxcXCp8XFw/fFxcK3xcXCh8XFwpfFxce3xcXH0pL2csICdcXFxcJDEnKVxuICAgIC5yZXBsYWNlKC8tLUVTQ0FQRURfUEFSQU1fUExVUy9nLCAnKycpXG4gICAgLnJlcGxhY2UoLy0tRVNDQVBFRF9QQVJBTV9DT0xPTi9nLCAnOicpXG4gICAgLnJlcGxhY2UoLy0tRVNDQVBFRF9QQVJBTV9RVUVTVElPTi9nLCAnPycpXG4gICAgLnJlcGxhY2UoLy0tRVNDQVBFRF9QQVJBTV9BU1RFUklTS1MvZywgJyonKVxuXG4gIC8vIHRoZSB2YWx1ZSBuZWVkcyB0byBzdGFydCB3aXRoIGEgZm9yd2FyZC1zbGFzaCB0byBiZSBjb21waWxlZFxuICAvLyBjb3JyZWN0bHlcbiAgcmV0dXJuIGNvbXBpbGUoYC8ke3ZhbHVlfWAsIHsgdmFsaWRhdGU6IGZhbHNlIH0pKHBhcmFtcykuc2xpY2UoMSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGVzdGluYXRpb24oYXJnczoge1xuICBkZXN0aW5hdGlvbjogc3RyaW5nXG4gIHBhcmFtczogUmVhZG9ubHk8UGFyYW1zPlxuICBxdWVyeTogUmVhZG9ubHk8TmV4dFBhcnNlZFVybFF1ZXJ5PlxufSkge1xuICBsZXQgZXNjYXBlZCA9IGFyZ3MuZGVzdGluYXRpb25cbiAgZm9yIChjb25zdCBwYXJhbSBvZiBPYmplY3Qua2V5cyh7IC4uLmFyZ3MucGFyYW1zLCAuLi5hcmdzLnF1ZXJ5IH0pKSB7XG4gICAgaWYgKCFwYXJhbSkgY29udGludWVcblxuICAgIGVzY2FwZWQgPSBlc2NhcGVTZWdtZW50KGVzY2FwZWQsIHBhcmFtKVxuICB9XG5cbiAgY29uc3QgcGFyc2VkID0gcGFyc2VVcmwoZXNjYXBlZClcblxuICBsZXQgcGF0aG5hbWUgPSBwYXJzZWQucGF0aG5hbWVcbiAgaWYgKHBhdGhuYW1lKSB7XG4gICAgcGF0aG5hbWUgPSB1bmVzY2FwZVNlZ21lbnRzKHBhdGhuYW1lKVxuICB9XG5cbiAgbGV0IGhyZWYgPSBwYXJzZWQuaHJlZlxuICBpZiAoaHJlZikge1xuICAgIGhyZWYgPSB1bmVzY2FwZVNlZ21lbnRzKGhyZWYpXG4gIH1cblxuICBsZXQgaG9zdG5hbWUgPSBwYXJzZWQuaG9zdG5hbWVcbiAgaWYgKGhvc3RuYW1lKSB7XG4gICAgaG9zdG5hbWUgPSB1bmVzY2FwZVNlZ21lbnRzKGhvc3RuYW1lKVxuICB9XG5cbiAgbGV0IGhhc2ggPSBwYXJzZWQuaGFzaFxuICBpZiAoaGFzaCkge1xuICAgIGhhc2ggPSB1bmVzY2FwZVNlZ21lbnRzKGhhc2gpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnBhcnNlZCxcbiAgICBwYXRobmFtZSxcbiAgICBob3N0bmFtZSxcbiAgICBocmVmLFxuICAgIGhhc2gsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVEZXN0aW5hdGlvbihhcmdzOiB7XG4gIGFwcGVuZFBhcmFtc1RvUXVlcnk6IGJvb2xlYW5cbiAgZGVzdGluYXRpb246IHN0cmluZ1xuICBwYXJhbXM6IFBhcmFtc1xuICBxdWVyeTogTmV4dFBhcnNlZFVybFF1ZXJ5XG59KSB7XG4gIGNvbnN0IHBhcnNlZERlc3RpbmF0aW9uID0gcGFyc2VEZXN0aW5hdGlvbihhcmdzKVxuXG4gIGNvbnN0IHsgaG9zdG5hbWU6IGRlc3RIb3N0bmFtZSwgcXVlcnk6IGRlc3RRdWVyeSB9ID0gcGFyc2VkRGVzdGluYXRpb25cblxuICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB0aGF0IHRoZSBwYXRobmFtZSBoZXJlIGluY2x1ZGVzIHRoZSBoYXNoIGlmIGl0J3NcbiAgLy8gcHJlc2VudC5cbiAgbGV0IGRlc3RQYXRoID0gcGFyc2VkRGVzdGluYXRpb24ucGF0aG5hbWVcbiAgaWYgKHBhcnNlZERlc3RpbmF0aW9uLmhhc2gpIHtcbiAgICBkZXN0UGF0aCA9IGAke2Rlc3RQYXRofSR7cGFyc2VkRGVzdGluYXRpb24uaGFzaH1gXG4gIH1cblxuICBjb25zdCBkZXN0UGFyYW1zOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gW11cblxuICBjb25zdCBkZXN0UGF0aFBhcmFtS2V5czogS2V5W10gPSBbXVxuICBwYXRoVG9SZWdleHAoZGVzdFBhdGgsIGRlc3RQYXRoUGFyYW1LZXlzKVxuICBmb3IgKGNvbnN0IGtleSBvZiBkZXN0UGF0aFBhcmFtS2V5cykge1xuICAgIGRlc3RQYXJhbXMucHVzaChrZXkubmFtZSlcbiAgfVxuXG4gIGlmIChkZXN0SG9zdG5hbWUpIHtcbiAgICBjb25zdCBkZXN0SG9zdG5hbWVQYXJhbUtleXM6IEtleVtdID0gW11cbiAgICBwYXRoVG9SZWdleHAoZGVzdEhvc3RuYW1lLCBkZXN0SG9zdG5hbWVQYXJhbUtleXMpXG4gICAgZm9yIChjb25zdCBrZXkgb2YgZGVzdEhvc3RuYW1lUGFyYW1LZXlzKSB7XG4gICAgICBkZXN0UGFyYW1zLnB1c2goa2V5Lm5hbWUpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZGVzdFBhdGhDb21waWxlciA9IGNvbXBpbGUoXG4gICAgZGVzdFBhdGgsXG4gICAgLy8gd2UgZG9uJ3QgdmFsaWRhdGUgd2hpbGUgY29tcGlsaW5nIHRoZSBkZXN0aW5hdGlvbiBzaW5jZSB3ZSBzaG91bGRcbiAgICAvLyBoYXZlIGFscmVhZHkgdmFsaWRhdGVkIGJlZm9yZSB3ZSBnb3QgdG8gdGhpcyBwb2ludCBhbmQgdmFsaWRhdGluZ1xuICAgIC8vIGJyZWFrcyBjb21waWxpbmcgZGVzdGluYXRpb25zIHdpdGggbmFtZWQgcGF0dGVybiBwYXJhbXMgZnJvbSB0aGUgc291cmNlXG4gICAgLy8gZS5nLiAvc29tZXRoaW5nOmhlbGxvKC4qKSAtPiAvYW5vdGhlci86aGVsbG8gaXMgYnJva2VuIHdpdGggdmFsaWRhdGlvblxuICAgIC8vIHNpbmNlIGNvbXBpbGUgdmFsaWRhdGlvbiBpcyBtZWFudCBmb3IgcmV2ZXJzaW5nIGFuZCBub3QgZm9yIGluc2VydGluZ1xuICAgIC8vIHBhcmFtcyBmcm9tIGEgc2VwYXJhdGUgcGF0aC1yZWdleCBpbnRvIGFub3RoZXJcbiAgICB7IHZhbGlkYXRlOiBmYWxzZSB9XG4gIClcblxuICBsZXQgZGVzdEhvc3RuYW1lQ29tcGlsZXJcbiAgaWYgKGRlc3RIb3N0bmFtZSkge1xuICAgIGRlc3RIb3N0bmFtZUNvbXBpbGVyID0gY29tcGlsZShkZXN0SG9zdG5hbWUsIHsgdmFsaWRhdGU6IGZhbHNlIH0pXG4gIH1cblxuICAvLyB1cGRhdGUgYW55IHBhcmFtcyBpbiBxdWVyeSB2YWx1ZXNcbiAgZm9yIChjb25zdCBba2V5LCBzdHJPckFycmF5XSBvZiBPYmplY3QuZW50cmllcyhkZXN0UXVlcnkpKSB7XG4gICAgLy8gdGhlIHZhbHVlIG5lZWRzIHRvIHN0YXJ0IHdpdGggYSBmb3J3YXJkLXNsYXNoIHRvIGJlIGNvbXBpbGVkXG4gICAgLy8gY29ycmVjdGx5XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3RyT3JBcnJheSkpIHtcbiAgICAgIGRlc3RRdWVyeVtrZXldID0gc3RyT3JBcnJheS5tYXAoKHZhbHVlKSA9PlxuICAgICAgICBjb21waWxlTm9uUGF0aCh1bmVzY2FwZVNlZ21lbnRzKHZhbHVlKSwgYXJncy5wYXJhbXMpXG4gICAgICApXG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RyT3JBcnJheSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRlc3RRdWVyeVtrZXldID0gY29tcGlsZU5vblBhdGgodW5lc2NhcGVTZWdtZW50cyhzdHJPckFycmF5KSwgYXJncy5wYXJhbXMpXG4gICAgfVxuICB9XG5cbiAgLy8gYWRkIHBhdGggcGFyYW1zIHRvIHF1ZXJ5IGlmIGl0J3Mgbm90IGEgcmVkaXJlY3QgYW5kIG5vdFxuICAvLyBhbHJlYWR5IGRlZmluZWQgaW4gZGVzdGluYXRpb24gcXVlcnkgb3IgcGF0aFxuICBsZXQgcGFyYW1LZXlzID0gT2JqZWN0LmtleXMoYXJncy5wYXJhbXMpLmZpbHRlcihcbiAgICAobmFtZSkgPT4gbmFtZSAhPT0gJ25leHRJbnRlcm5hbExvY2FsZSdcbiAgKVxuXG4gIGlmIChcbiAgICBhcmdzLmFwcGVuZFBhcmFtc1RvUXVlcnkgJiZcbiAgICAhcGFyYW1LZXlzLnNvbWUoKGtleSkgPT4gZGVzdFBhcmFtcy5pbmNsdWRlcyhrZXkpKVxuICApIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBwYXJhbUtleXMpIHtcbiAgICAgIGlmICghKGtleSBpbiBkZXN0UXVlcnkpKSB7XG4gICAgICAgIGRlc3RRdWVyeVtrZXldID0gYXJncy5wYXJhbXNba2V5XVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxldCBuZXdVcmxcblxuICAvLyBUaGUgY29tcGlsZXIgYWxzbyB0aGF0IHRoZSBpbnRlcmNlcHRpb24gcm91dGUgbWFya2VyIGlzIGFuIHVubmFtZWQgcGFyYW0sIGhlbmNlICcwJyxcbiAgLy8gc28gd2UgbmVlZCB0byBhZGQgaXQgdG8gdGhlIHBhcmFtcyBvYmplY3QuXG4gIGlmIChpc0ludGVyY2VwdGlvblJvdXRlQXBwUGF0aChkZXN0UGF0aCkpIHtcbiAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2YgZGVzdFBhdGguc3BsaXQoJy8nKSkge1xuICAgICAgY29uc3QgbWFya2VyID0gSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMuZmluZCgobSkgPT5cbiAgICAgICAgc2VnbWVudC5zdGFydHNXaXRoKG0pXG4gICAgICApXG4gICAgICBpZiAobWFya2VyKSB7XG4gICAgICAgIGlmIChtYXJrZXIgPT09ICcoLi4pKC4uKScpIHtcbiAgICAgICAgICBhcmdzLnBhcmFtc1snMCddID0gJyguLiknXG4gICAgICAgICAgYXJncy5wYXJhbXNbJzEnXSA9ICcoLi4pJ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFyZ3MucGFyYW1zWycwJ10gPSBtYXJrZXJcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgbmV3VXJsID0gZGVzdFBhdGhDb21waWxlcihhcmdzLnBhcmFtcylcblxuICAgIGNvbnN0IFtwYXRobmFtZSwgaGFzaF0gPSBuZXdVcmwuc3BsaXQoJyMnLCAyKVxuICAgIGlmIChkZXN0SG9zdG5hbWVDb21waWxlcikge1xuICAgICAgcGFyc2VkRGVzdGluYXRpb24uaG9zdG5hbWUgPSBkZXN0SG9zdG5hbWVDb21waWxlcihhcmdzLnBhcmFtcylcbiAgICB9XG4gICAgcGFyc2VkRGVzdGluYXRpb24ucGF0aG5hbWUgPSBwYXRobmFtZVxuICAgIHBhcnNlZERlc3RpbmF0aW9uLmhhc2ggPSBgJHtoYXNoID8gJyMnIDogJyd9JHtoYXNoIHx8ICcnfWBcbiAgICBkZWxldGUgKHBhcnNlZERlc3RpbmF0aW9uIGFzIGFueSkuc2VhcmNoXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgaWYgKGVyci5tZXNzYWdlLm1hdGNoKC9FeHBlY3RlZCAuKj8gdG8gbm90IHJlcGVhdCwgYnV0IGdvdCBhbiBhcnJheS8pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUbyB1c2UgYSBtdWx0aS1tYXRjaCBpbiB0aGUgZGVzdGluYXRpb24geW91IG11c3QgYWRkIFxcYCpcXGAgYXQgdGhlIGVuZCBvZiB0aGUgcGFyYW0gbmFtZSB0byBzaWduaWZ5IGl0IHNob3VsZCByZXBlYXQuIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2ludmFsaWQtbXVsdGktbWF0Y2hgXG4gICAgICApXG4gICAgfVxuICAgIHRocm93IGVyclxuICB9XG5cbiAgLy8gUXVlcnkgbWVyZ2Ugb3JkZXIgbG93ZXN0IHByaW9yaXR5IHRvIGhpZ2hlc3RcbiAgLy8gMS4gaW5pdGlhbCBVUkwgcXVlcnkgdmFsdWVzXG4gIC8vIDIuIHBhdGggc2VnbWVudCB2YWx1ZXNcbiAgLy8gMy4gZGVzdGluYXRpb24gc3BlY2lmaWVkIHF1ZXJ5IHZhbHVlc1xuICBwYXJzZWREZXN0aW5hdGlvbi5xdWVyeSA9IHtcbiAgICAuLi5hcmdzLnF1ZXJ5LFxuICAgIC4uLnBhcnNlZERlc3RpbmF0aW9uLnF1ZXJ5LFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuZXdVcmwsXG4gICAgZGVzdFF1ZXJ5LFxuICAgIHBhcnNlZERlc3RpbmF0aW9uLFxuICB9XG59XG4iXSwibmFtZXMiOlsiY29tcGlsZU5vblBhdGgiLCJtYXRjaEhhcyIsInBhcnNlRGVzdGluYXRpb24iLCJwcmVwYXJlRGVzdGluYXRpb24iLCJnZXRTYWZlUGFyYW1OYW1lIiwicGFyYW1OYW1lIiwibmV3UGFyYW1OYW1lIiwiaSIsImxlbmd0aCIsImNoYXJDb2RlIiwiY2hhckNvZGVBdCIsImVzY2FwZVNlZ21lbnQiLCJzdHIiLCJzZWdtZW50TmFtZSIsInJlcGxhY2UiLCJSZWdFeHAiLCJlc2NhcGVTdHJpbmdSZWdleHAiLCJ1bmVzY2FwZVNlZ21lbnRzIiwicmVxIiwicXVlcnkiLCJoYXMiLCJtaXNzaW5nIiwicGFyYW1zIiwiaGFzTWF0Y2giLCJoYXNJdGVtIiwidmFsdWUiLCJrZXkiLCJ0eXBlIiwidG9Mb3dlckNhc2UiLCJoZWFkZXJzIiwiY29va2llcyIsImdldENvb2tpZVBhcnNlciIsImhvc3QiLCJob3N0bmFtZSIsInNwbGl0IiwibWF0Y2hlciIsIm1hdGNoZXMiLCJBcnJheSIsImlzQXJyYXkiLCJzbGljZSIsIm1hdGNoIiwiZ3JvdXBzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJncm91cEtleSIsImFsbE1hdGNoIiwiZXZlcnkiLCJpdGVtIiwic29tZSIsImluY2x1ZGVzIiwiY29tcGlsZSIsInZhbGlkYXRlIiwiYXJncyIsImVzY2FwZWQiLCJkZXN0aW5hdGlvbiIsInBhcmFtIiwicGFyc2VkIiwicGFyc2VVcmwiLCJwYXRobmFtZSIsImhyZWYiLCJoYXNoIiwicGFyc2VkRGVzdGluYXRpb24iLCJkZXN0SG9zdG5hbWUiLCJkZXN0UXVlcnkiLCJkZXN0UGF0aCIsImRlc3RQYXJhbXMiLCJkZXN0UGF0aFBhcmFtS2V5cyIsInBhdGhUb1JlZ2V4cCIsInB1c2giLCJuYW1lIiwiZGVzdEhvc3RuYW1lUGFyYW1LZXlzIiwiZGVzdFBhdGhDb21waWxlciIsImRlc3RIb3N0bmFtZUNvbXBpbGVyIiwic3RyT3JBcnJheSIsImVudHJpZXMiLCJtYXAiLCJwYXJhbUtleXMiLCJmaWx0ZXIiLCJhcHBlbmRQYXJhbXNUb1F1ZXJ5IiwibmV3VXJsIiwiaXNJbnRlcmNlcHRpb25Sb3V0ZUFwcFBhdGgiLCJzZWdtZW50IiwibWFya2VyIiwiSU5URVJDRVBUSU9OX1JPVVRFX01BUktFUlMiLCJmaW5kIiwibSIsInN0YXJ0c1dpdGgiLCJzZWFyY2giLCJlcnIiLCJtZXNzYWdlIiwiRXJyb3IiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/prepare-destination.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/querystring.js":
/*!*******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/querystring.js ***!
  \*******************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    assign: function() {\n        return assign;\n    },\n    searchParamsToUrlQuery: function() {\n        return searchParamsToUrlQuery;\n    },\n    urlQueryToSearchParams: function() {\n        return urlQueryToSearchParams;\n    }\n});\nfunction searchParamsToUrlQuery(searchParams) {\n    const query = {};\n    for (const [key, value] of searchParams.entries()){\n        const existing = query[key];\n        if (typeof existing === 'undefined') {\n            query[key] = value;\n        } else if (Array.isArray(existing)) {\n            existing.push(value);\n        } else {\n            query[key] = [\n                existing,\n                value\n            ];\n        }\n    }\n    return query;\n}\nfunction stringifyUrlQueryParam(param) {\n    if (typeof param === 'string') {\n        return param;\n    }\n    if (typeof param === 'number' && !isNaN(param) || typeof param === 'boolean') {\n        return String(param);\n    } else {\n        return '';\n    }\n}\nfunction urlQueryToSearchParams(query) {\n    const searchParams = new URLSearchParams();\n    for (const [key, value] of Object.entries(query)){\n        if (Array.isArray(value)) {\n            for (const item of value){\n                searchParams.append(key, stringifyUrlQueryParam(item));\n            }\n        } else {\n            searchParams.set(key, stringifyUrlQueryParam(value));\n        }\n    }\n    return searchParams;\n}\nfunction assign(target) {\n    for(var _len = arguments.length, searchParamsList = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n        searchParamsList[_key - 1] = arguments[_key];\n    }\n    for (const searchParams of searchParamsList){\n        for (const key of searchParams.keys()){\n            target.delete(key);\n        }\n        for (const [key, value] of searchParams.entries()){\n            target.append(key, value);\n        }\n    }\n    return target;\n} //# sourceMappingURL=querystring.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9xdWVyeXN0cmluZy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFnRGdCQSxNQUFNO2VBQU5BOztJQTlDQUMsc0JBQXNCO2VBQXRCQTs7SUFnQ0FDLHNCQUFzQjtlQUF0QkE7OztBQWhDVCxTQUFTRCx1QkFDZEUsWUFBNkI7SUFFN0IsTUFBTUMsUUFBd0IsQ0FBQztJQUMvQixLQUFLLE1BQU0sQ0FBQ0MsS0FBS0MsTUFBTSxJQUFJSCxhQUFhSSxPQUFPLEdBQUk7UUFDakQsTUFBTUMsV0FBV0osS0FBSyxDQUFDQyxJQUFJO1FBQzNCLElBQUksT0FBT0csYUFBYSxhQUFhO1lBQ25DSixLQUFLLENBQUNDLElBQUksR0FBR0M7UUFDZixPQUFPLElBQUlHLE1BQU1DLE9BQU8sQ0FBQ0YsV0FBVztZQUNsQ0EsU0FBU0csSUFBSSxDQUFDTDtRQUNoQixPQUFPO1lBQ0xGLEtBQUssQ0FBQ0MsSUFBSSxHQUFHO2dCQUFDRztnQkFBVUY7YUFBTTtRQUNoQztJQUNGO0lBQ0EsT0FBT0Y7QUFDVDtBQUVBLFNBQVNRLHVCQUF1QkMsS0FBYztJQUM1QyxJQUFJLE9BQU9BLFVBQVUsVUFBVTtRQUM3QixPQUFPQTtJQUNUO0lBRUEsSUFDRyxPQUFPQSxVQUFVLFlBQVksQ0FBQ0MsTUFBTUQsVUFDckMsT0FBT0EsVUFBVSxXQUNqQjtRQUNBLE9BQU9FLE9BQU9GO0lBQ2hCLE9BQU87UUFDTCxPQUFPO0lBQ1Q7QUFDRjtBQUVPLFNBQVNYLHVCQUF1QkUsS0FBcUI7SUFDMUQsTUFBTUQsZUFBZSxJQUFJYTtJQUN6QixLQUFLLE1BQU0sQ0FBQ1gsS0FBS0MsTUFBTSxJQUFJVyxPQUFPVixPQUFPLENBQUNILE9BQVE7UUFDaEQsSUFBSUssTUFBTUMsT0FBTyxDQUFDSixRQUFRO1lBQ3hCLEtBQUssTUFBTVksUUFBUVosTUFBTztnQkFDeEJILGFBQWFnQixNQUFNLENBQUNkLEtBQUtPLHVCQUF1Qk07WUFDbEQ7UUFDRixPQUFPO1lBQ0xmLGFBQWFpQixHQUFHLENBQUNmLEtBQUtPLHVCQUF1Qk47UUFDL0M7SUFDRjtJQUNBLE9BQU9IO0FBQ1Q7QUFFTyxTQUFTSCxPQUNkcUIsTUFBdUI7SUFDdkIsaUNBQUdDLG1CQUFIO1FBQUdBLGdCQUFBQSxDQUFILDJCQUFzQzs7SUFFdEMsS0FBSyxNQUFNbkIsZ0JBQWdCbUIsaUJBQWtCO1FBQzNDLEtBQUssTUFBTWpCLE9BQU9GLGFBQWFvQixJQUFJLEdBQUk7WUFDckNGLE9BQU9HLE1BQU0sQ0FBQ25CO1FBQ2hCO1FBRUEsS0FBSyxNQUFNLENBQUNBLEtBQUtDLE1BQU0sSUFBSUgsYUFBYUksT0FBTyxHQUFJO1lBQ2pEYyxPQUFPRixNQUFNLENBQUNkLEtBQUtDO1FBQ3JCO0lBQ0Y7SUFFQSxPQUFPZTtBQUNUIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3F1ZXJ5c3RyaW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGFyc2VkVXJsUXVlcnkgfSBmcm9tICdxdWVyeXN0cmluZydcblxuZXhwb3J0IGZ1bmN0aW9uIHNlYXJjaFBhcmFtc1RvVXJsUXVlcnkoXG4gIHNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zXG4pOiBQYXJzZWRVcmxRdWVyeSB7XG4gIGNvbnN0IHF1ZXJ5OiBQYXJzZWRVcmxRdWVyeSA9IHt9XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHNlYXJjaFBhcmFtcy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHF1ZXJ5W2tleV1cbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcXVlcnlba2V5XSA9IHZhbHVlXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGV4aXN0aW5nKSkge1xuICAgICAgZXhpc3RpbmcucHVzaCh2YWx1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlcnlba2V5XSA9IFtleGlzdGluZywgdmFsdWVdXG4gICAgfVxuICB9XG4gIHJldHVybiBxdWVyeVxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlVcmxRdWVyeVBhcmFtKHBhcmFtOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGFyYW1cbiAgfVxuXG4gIGlmIChcbiAgICAodHlwZW9mIHBhcmFtID09PSAnbnVtYmVyJyAmJiAhaXNOYU4ocGFyYW0pKSB8fFxuICAgIHR5cGVvZiBwYXJhbSA9PT0gJ2Jvb2xlYW4nXG4gICkge1xuICAgIHJldHVybiBTdHJpbmcocGFyYW0pXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICcnXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVybFF1ZXJ5VG9TZWFyY2hQYXJhbXMocXVlcnk6IFBhcnNlZFVybFF1ZXJ5KTogVVJMU2VhcmNoUGFyYW1zIHtcbiAgY29uc3Qgc2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHF1ZXJ5KSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCBzdHJpbmdpZnlVcmxRdWVyeVBhcmFtKGl0ZW0pKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzZWFyY2hQYXJhbXMuc2V0KGtleSwgc3RyaW5naWZ5VXJsUXVlcnlQYXJhbSh2YWx1ZSkpXG4gICAgfVxuICB9XG4gIHJldHVybiBzZWFyY2hQYXJhbXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbihcbiAgdGFyZ2V0OiBVUkxTZWFyY2hQYXJhbXMsXG4gIC4uLnNlYXJjaFBhcmFtc0xpc3Q6IFVSTFNlYXJjaFBhcmFtc1tdXG4pOiBVUkxTZWFyY2hQYXJhbXMge1xuICBmb3IgKGNvbnN0IHNlYXJjaFBhcmFtcyBvZiBzZWFyY2hQYXJhbXNMaXN0KSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2Ygc2VhcmNoUGFyYW1zLmtleXMoKSkge1xuICAgICAgdGFyZ2V0LmRlbGV0ZShrZXkpXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygc2VhcmNoUGFyYW1zLmVudHJpZXMoKSkge1xuICAgICAgdGFyZ2V0LmFwcGVuZChrZXksIHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXRcbn1cbiJdLCJuYW1lcyI6WyJhc3NpZ24iLCJzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5IiwidXJsUXVlcnlUb1NlYXJjaFBhcmFtcyIsInNlYXJjaFBhcmFtcyIsInF1ZXJ5Iiwia2V5IiwidmFsdWUiLCJlbnRyaWVzIiwiZXhpc3RpbmciLCJBcnJheSIsImlzQXJyYXkiLCJwdXNoIiwic3RyaW5naWZ5VXJsUXVlcnlQYXJhbSIsInBhcmFtIiwiaXNOYU4iLCJTdHJpbmciLCJVUkxTZWFyY2hQYXJhbXMiLCJPYmplY3QiLCJpdGVtIiwiYXBwZW5kIiwic2V0IiwidGFyZ2V0Iiwic2VhcmNoUGFyYW1zTGlzdCIsImtleXMiLCJkZWxldGUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/querystring.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js":
/*!**************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js ***!
  \**************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"removePathPrefix\", ({\n    enumerable: true,\n    get: function() {\n        return removePathPrefix;\n    }\n}));\nconst _pathhasprefix = __webpack_require__(/*! ./path-has-prefix */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js\");\nfunction removePathPrefix(path, prefix) {\n    // If the path doesn't start with the prefix we can return it as is. This\n    // protects us from situations where the prefix is a substring of the path\n    // prefix such as:\n    //\n    // For prefix: /blog\n    //\n    //   /blog -> true\n    //   /blog/ -> true\n    //   /blog/1 -> true\n    //   /blogging -> false\n    //   /blogging/ -> false\n    //   /blogging/1 -> false\n    if (!(0, _pathhasprefix.pathHasPrefix)(path, prefix)) {\n        return path;\n    }\n    // Remove the prefix from the path via slicing.\n    const withoutPrefix = path.slice(prefix.length);\n    // If the path without the prefix starts with a `/` we can return it as is.\n    if (withoutPrefix.startsWith('/')) {\n        return withoutPrefix;\n    }\n    // If the path without the prefix doesn't start with a `/` we need to add it\n    // back to the path to make sure it's a valid path.\n    return \"/\" + withoutPrefix;\n} //# sourceMappingURL=remove-path-prefix.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yZW1vdmUtcGF0aC1wcmVmaXguanMiLCJtYXBwaW5ncyI6Ijs7OztvREFVZ0JBOzs7ZUFBQUE7OzsyQ0FWYztBQVV2QixTQUFTQSxpQkFBaUJDLElBQVksRUFBRUMsTUFBYztJQUMzRCx5RUFBeUU7SUFDekUsMEVBQTBFO0lBQzFFLGtCQUFrQjtJQUNsQixFQUFFO0lBQ0Ysb0JBQW9CO0lBQ3BCLEVBQUU7SUFDRixrQkFBa0I7SUFDbEIsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQix1QkFBdUI7SUFDdkIsd0JBQXdCO0lBQ3hCLHlCQUF5QjtJQUN6QixJQUFJLENBQUNDLENBQUFBLEdBQUFBLGVBQUFBLGFBQUFBLEVBQWNGLE1BQU1DLFNBQVM7UUFDaEMsT0FBT0Q7SUFDVDtJQUVBLCtDQUErQztJQUMvQyxNQUFNRyxnQkFBZ0JILEtBQUtJLEtBQUssQ0FBQ0gsT0FBT0ksTUFBTTtJQUU5QywyRUFBMkU7SUFDM0UsSUFBSUYsY0FBY0csVUFBVSxDQUFDLE1BQU07UUFDakMsT0FBT0g7SUFDVDtJQUVBLDRFQUE0RTtJQUM1RSxtREFBbUQ7SUFDbkQsT0FBUSxNQUFHQTtBQUNiIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JlbW92ZS1wYXRoLXByZWZpeC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXRoSGFzUHJlZml4IH0gZnJvbSAnLi9wYXRoLWhhcy1wcmVmaXgnXG5cbi8qKlxuICogR2l2ZW4gYSBwYXRoIGFuZCBhIHByZWZpeCBpdCB3aWxsIHJlbW92ZSB0aGUgcHJlZml4IHdoZW4gaXQgZXhpc3RzIGluIHRoZVxuICogZ2l2ZW4gcGF0aC4gSXQgZW5zdXJlcyBpdCBtYXRjaGVzIGV4YWN0bHkgd2l0aG91dCBjb250YWluaW5nIGV4dHJhIGNoYXJzXG4gKiBhbmQgaWYgdGhlIHByZWZpeCBpcyBub3QgdGhlcmUgaXQgd2lsbCBiZSBub29wLlxuICpcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIHJlbW92ZSB0aGUgcHJlZml4IGZyb20uXG4gKiBAcGFyYW0gcHJlZml4IFRoZSBwcmVmaXggdG8gYmUgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVBhdGhQcmVmaXgocGF0aDogc3RyaW5nLCBwcmVmaXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIElmIHRoZSBwYXRoIGRvZXNuJ3Qgc3RhcnQgd2l0aCB0aGUgcHJlZml4IHdlIGNhbiByZXR1cm4gaXQgYXMgaXMuIFRoaXNcbiAgLy8gcHJvdGVjdHMgdXMgZnJvbSBzaXR1YXRpb25zIHdoZXJlIHRoZSBwcmVmaXggaXMgYSBzdWJzdHJpbmcgb2YgdGhlIHBhdGhcbiAgLy8gcHJlZml4IHN1Y2ggYXM6XG4gIC8vXG4gIC8vIEZvciBwcmVmaXg6IC9ibG9nXG4gIC8vXG4gIC8vICAgL2Jsb2cgLT4gdHJ1ZVxuICAvLyAgIC9ibG9nLyAtPiB0cnVlXG4gIC8vICAgL2Jsb2cvMSAtPiB0cnVlXG4gIC8vICAgL2Jsb2dnaW5nIC0+IGZhbHNlXG4gIC8vICAgL2Jsb2dnaW5nLyAtPiBmYWxzZVxuICAvLyAgIC9ibG9nZ2luZy8xIC0+IGZhbHNlXG4gIGlmICghcGF0aEhhc1ByZWZpeChwYXRoLCBwcmVmaXgpKSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgfVxuXG4gIC8vIFJlbW92ZSB0aGUgcHJlZml4IGZyb20gdGhlIHBhdGggdmlhIHNsaWNpbmcuXG4gIGNvbnN0IHdpdGhvdXRQcmVmaXggPSBwYXRoLnNsaWNlKHByZWZpeC5sZW5ndGgpXG5cbiAgLy8gSWYgdGhlIHBhdGggd2l0aG91dCB0aGUgcHJlZml4IHN0YXJ0cyB3aXRoIGEgYC9gIHdlIGNhbiByZXR1cm4gaXQgYXMgaXMuXG4gIGlmICh3aXRob3V0UHJlZml4LnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHJldHVybiB3aXRob3V0UHJlZml4XG4gIH1cblxuICAvLyBJZiB0aGUgcGF0aCB3aXRob3V0IHRoZSBwcmVmaXggZG9lc24ndCBzdGFydCB3aXRoIGEgYC9gIHdlIG5lZWQgdG8gYWRkIGl0XG4gIC8vIGJhY2sgdG8gdGhlIHBhdGggdG8gbWFrZSBzdXJlIGl0J3MgYSB2YWxpZCBwYXRoLlxuICByZXR1cm4gYC8ke3dpdGhvdXRQcmVmaXh9YFxufVxuIl0sIm5hbWVzIjpbInJlbW92ZVBhdGhQcmVmaXgiLCJwYXRoIiwicHJlZml4IiwicGF0aEhhc1ByZWZpeCIsIndpdGhvdXRQcmVmaXgiLCJzbGljZSIsImxlbmd0aCIsInN0YXJ0c1dpdGgiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js":
/*!*****************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js ***!
  \*****************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/**\n * Removes the trailing slash for a given route or page path. Preserves the\n * root page. Examples:\n *   - `/foo/bar/` -> `/foo/bar`\n *   - `/foo/bar` -> `/foo/bar`\n *   - `/` -> `/`\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"removeTrailingSlash\", ({\n    enumerable: true,\n    get: function() {\n        return removeTrailingSlash;\n    }\n}));\nfunction removeTrailingSlash(route) {\n    return route.replace(/\\/$/, '') || '/';\n} //# sourceMappingURL=remove-trailing-slash.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yZW1vdmUtdHJhaWxpbmctc2xhc2guanMiLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztDQU1DOzs7O3VEQUNlQTs7O2VBQUFBOzs7QUFBVCxTQUFTQSxvQkFBb0JDLEtBQWE7SUFDL0MsT0FBT0EsTUFBTUMsT0FBTyxDQUFDLE9BQU8sT0FBTztBQUNyQyIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yZW1vdmUtdHJhaWxpbmctc2xhc2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZW1vdmVzIHRoZSB0cmFpbGluZyBzbGFzaCBmb3IgYSBnaXZlbiByb3V0ZSBvciBwYWdlIHBhdGguIFByZXNlcnZlcyB0aGVcbiAqIHJvb3QgcGFnZS4gRXhhbXBsZXM6XG4gKiAgIC0gYC9mb28vYmFyL2AgLT4gYC9mb28vYmFyYFxuICogICAtIGAvZm9vL2JhcmAgLT4gYC9mb28vYmFyYFxuICogICAtIGAvYCAtPiBgL2BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVRyYWlsaW5nU2xhc2gocm91dGU6IHN0cmluZykge1xuICByZXR1cm4gcm91dGUucmVwbGFjZSgvXFwvJC8sICcnKSB8fCAnLydcbn1cbiJdLCJuYW1lcyI6WyJyZW1vdmVUcmFpbGluZ1NsYXNoIiwicm91dGUiLCJyZXBsYWNlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/resolve-rewrites.js":
/*!************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/resolve-rewrites.js ***!
  \************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n    enumerable: true,\n    get: function() {\n        return resolveRewrites;\n    }\n}));\nconst _pathmatch = __webpack_require__(/*! ./path-match */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/path-match.js\");\nconst _preparedestination = __webpack_require__(/*! ./prepare-destination */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/prepare-destination.js\");\nconst _removetrailingslash = __webpack_require__(/*! ./remove-trailing-slash */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\nconst _normalizelocalepath = __webpack_require__(/*! ../../i18n/normalize-locale-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js\");\nconst _removebasepath = __webpack_require__(/*! ../../../../client/remove-base-path */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/remove-base-path.js\");\nconst _parserelativeurl = __webpack_require__(/*! ./parse-relative-url */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js\");\nfunction resolveRewrites(asPath, pages, rewrites, query, resolveHref, locales) {\n    let matchedPage = false;\n    let externalDest = false;\n    let parsedAs = (0, _parserelativeurl.parseRelativeUrl)(asPath);\n    let fsPathname = (0, _removetrailingslash.removeTrailingSlash)((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(parsedAs.pathname), locales).pathname);\n    let resolvedHref;\n    const handleRewrite = (rewrite)=>{\n        const matcher = (0, _pathmatch.getPathMatch)(rewrite.source + ( false ? 0 : ''), {\n            removeUnnamedParams: true,\n            strict: true\n        });\n        let params = matcher(parsedAs.pathname);\n        if ((rewrite.has || rewrite.missing) && params) {\n            const hasParams = (0, _preparedestination.matchHas)({\n                headers: {\n                    host: document.location.hostname,\n                    'user-agent': navigator.userAgent\n                },\n                cookies: document.cookie.split('; ').reduce((acc, item)=>{\n                    const [key, ...value] = item.split('=');\n                    acc[key] = value.join('=');\n                    return acc;\n                }, {})\n            }, parsedAs.query, rewrite.has, rewrite.missing);\n            if (hasParams) {\n                Object.assign(params, hasParams);\n            } else {\n                params = false;\n            }\n        }\n        if (params) {\n            if (!rewrite.destination) {\n                // this is a proxied rewrite which isn't handled on the client\n                externalDest = true;\n                return true;\n            }\n            const destRes = (0, _preparedestination.prepareDestination)({\n                appendParamsToQuery: true,\n                destination: rewrite.destination,\n                params: params,\n                query: query\n            });\n            parsedAs = destRes.parsedDestination;\n            asPath = destRes.newUrl;\n            Object.assign(query, destRes.parsedDestination.query);\n            fsPathname = (0, _removetrailingslash.removeTrailingSlash)((0, _normalizelocalepath.normalizeLocalePath)((0, _removebasepath.removeBasePath)(asPath), locales).pathname);\n            if (pages.includes(fsPathname)) {\n                // check if we now match a page as this means we are done\n                // resolving the rewrites\n                matchedPage = true;\n                resolvedHref = fsPathname;\n                return true;\n            }\n            // check if we match a dynamic-route, if so we break the rewrites chain\n            resolvedHref = resolveHref(fsPathname);\n            if (resolvedHref !== asPath && pages.includes(resolvedHref)) {\n                matchedPage = true;\n                return true;\n            }\n        }\n    };\n    let finished = false;\n    for(let i = 0; i < rewrites.beforeFiles.length; i++){\n        // we don't end after match in beforeFiles to allow\n        // continuing through all beforeFiles rewrites\n        handleRewrite(rewrites.beforeFiles[i]);\n    }\n    matchedPage = pages.includes(fsPathname);\n    if (!matchedPage) {\n        if (!finished) {\n            for(let i = 0; i < rewrites.afterFiles.length; i++){\n                if (handleRewrite(rewrites.afterFiles[i])) {\n                    finished = true;\n                    break;\n                }\n            }\n        }\n        // check dynamic route before processing fallback rewrites\n        if (!finished) {\n            resolvedHref = resolveHref(fsPathname);\n            matchedPage = pages.includes(resolvedHref);\n            finished = matchedPage;\n        }\n        if (!finished) {\n            for(let i = 0; i < rewrites.fallback.length; i++){\n                if (handleRewrite(rewrites.fallback[i])) {\n                    finished = true;\n                    break;\n                }\n            }\n        }\n    }\n    return {\n        asPath,\n        parsedAs,\n        matchedPage,\n        resolvedHref,\n        externalDest\n    };\n} //# sourceMappingURL=resolve-rewrites.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yZXNvbHZlLXJld3JpdGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7MkNBYUE7OztlQUF3QkE7Ozt1Q0FYSztnREFDZ0I7aURBQ1Q7aURBQ0E7NENBQ0w7OENBQzBCO0FBTTFDLFNBQVNBLGdCQUN0QkMsTUFBYyxFQUNkQyxLQUFlLEVBQ2ZDLFFBSUMsRUFDREMsS0FBcUIsRUFDckJDLFdBQXFDLEVBQ3JDQyxPQUEyQjtJQVEzQixJQUFJQyxjQUFjO0lBQ2xCLElBQUlDLGVBQWU7SUFDbkIsSUFBSUMsV0FBcUJDLENBQUFBLEdBQUFBLGtCQUFBQSxnQkFBQUEsRUFBaUJUO0lBQzFDLElBQUlVLGFBQWFDLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFDZkMsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFBQSxFQUFvQkMsQ0FBQUEsR0FBQUEsZ0JBQUFBLGNBQUFBLEVBQWVMLFNBQVNNLFFBQVEsR0FBR1QsU0FBU1MsUUFBUTtJQUUxRSxJQUFJQztJQUVKLE1BQU1DLGdCQUFnQixDQUFDQztRQUNyQixNQUFNQyxVQUFVQyxDQUFBQSxHQUFBQSxXQUFBQSxZQUFBQSxFQUNkRixRQUFRRyxNQUFNLEdBQUlDLENBQUFBLE1BQWlDLEdBQUcsQ0FBTSxHQUFHLEdBQUMsRUFDaEU7WUFDRUcscUJBQXFCO1lBQ3JCQyxRQUFRO1FBQ1Y7UUFHRixJQUFJQyxTQUFTUixRQUFRVixTQUFTTSxRQUFRO1FBRXRDLElBQUtHLFNBQVFVLEdBQUcsSUFBSVYsUUFBUVcsT0FBQUEsS0FBWUYsUUFBUTtZQUM5QyxNQUFNRyxZQUFZQyxDQUFBQSxHQUFBQSxvQkFBQUEsUUFBQUEsRUFDaEI7Z0JBQ0VDLFNBQVM7b0JBQ1BDLE1BQU1DLFNBQVNDLFFBQVEsQ0FBQ0MsUUFBUTtvQkFDaEMsY0FBY0MsVUFBVUMsU0FBUztnQkFDbkM7Z0JBQ0FDLFNBQVNMLFNBQVNNLE1BQU0sQ0FDckJDLEtBQUssQ0FBQyxNQUNOQyxNQUFNLENBQXlCLENBQUNDLEtBQUtDO29CQUNwQyxNQUFNLENBQUNDLEtBQUssR0FBR0MsTUFBTSxHQUFHRixLQUFLSCxLQUFLLENBQUM7b0JBQ25DRSxHQUFHLENBQUNFLElBQUksR0FBR0MsTUFBTUMsSUFBSSxDQUFDO29CQUN0QixPQUFPSjtnQkFDVCxHQUFHLENBQUM7WUFDUixHQUNBbEMsU0FBU0wsS0FBSyxFQUNkYyxRQUFRVSxHQUFHLEVBQ1hWLFFBQVFXLE9BQU87WUFHakIsSUFBSUMsV0FBVztnQkFDYmtCLE9BQU9DLE1BQU0sQ0FBQ3RCLFFBQVFHO1lBQ3hCLE9BQU87Z0JBQ0xILFNBQVM7WUFDWDtRQUNGO1FBRUEsSUFBSUEsUUFBUTtZQUNWLElBQUksQ0FBQ1QsUUFBUWdDLFdBQVcsRUFBRTtnQkFDeEIsOERBQThEO2dCQUM5RDFDLGVBQWU7Z0JBQ2YsT0FBTztZQUNUO1lBQ0EsTUFBTTJDLFVBQVVDLENBQUFBLEdBQUFBLG9CQUFBQSxrQkFBQUEsRUFBbUI7Z0JBQ2pDQyxxQkFBcUI7Z0JBQ3JCSCxhQUFhaEMsUUFBUWdDLFdBQVc7Z0JBQ2hDdkIsUUFBUUE7Z0JBQ1J2QixPQUFPQTtZQUNUO1lBQ0FLLFdBQVcwQyxRQUFRRyxpQkFBaUI7WUFDcENyRCxTQUFTa0QsUUFBUUksTUFBTTtZQUN2QlAsT0FBT0MsTUFBTSxDQUFDN0MsT0FBTytDLFFBQVFHLGlCQUFpQixDQUFDbEQsS0FBSztZQUVwRE8sYUFBYUMsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFBQSxFQUNYQyxDQUFBQSxHQUFBQSxxQkFBQUEsbUJBQUFBLEVBQW9CQyxDQUFBQSxHQUFBQSxnQkFBQUEsY0FBQUEsRUFBZWIsU0FBU0ssU0FBU1MsUUFBUTtZQUcvRCxJQUFJYixNQUFNc0QsUUFBUSxDQUFDN0MsYUFBYTtnQkFDOUIseURBQXlEO2dCQUN6RCx5QkFBeUI7Z0JBQ3pCSixjQUFjO2dCQUNkUyxlQUFlTDtnQkFDZixPQUFPO1lBQ1Q7WUFFQSx1RUFBdUU7WUFDdkVLLGVBQWVYLFlBQVlNO1lBRTNCLElBQUlLLGlCQUFpQmYsVUFBVUMsTUFBTXNELFFBQVEsQ0FBQ3hDLGVBQWU7Z0JBQzNEVCxjQUFjO2dCQUNkLE9BQU87WUFDVDtRQUNGO0lBQ0Y7SUFDQSxJQUFJa0QsV0FBVztJQUVmLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJdkQsU0FBU3dELFdBQVcsQ0FBQ0MsTUFBTSxFQUFFRixJQUFLO1FBQ3BELG1EQUFtRDtRQUNuRCw4Q0FBOEM7UUFDOUN6QyxjQUFjZCxTQUFTd0QsV0FBVyxDQUFDRCxFQUFFO0lBQ3ZDO0lBQ0FuRCxjQUFjTCxNQUFNc0QsUUFBUSxDQUFDN0M7SUFFN0IsSUFBSSxDQUFDSixhQUFhO1FBQ2hCLElBQUksQ0FBQ2tELFVBQVU7WUFDYixJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSXZELFNBQVMwRCxVQUFVLENBQUNELE1BQU0sRUFBRUYsSUFBSztnQkFDbkQsSUFBSXpDLGNBQWNkLFNBQVMwRCxVQUFVLENBQUNILEVBQUUsR0FBRztvQkFDekNELFdBQVc7b0JBQ1g7Z0JBQ0Y7WUFDRjtRQUNGO1FBRUEsMERBQTBEO1FBQzFELElBQUksQ0FBQ0EsVUFBVTtZQUNiekMsZUFBZVgsWUFBWU07WUFDM0JKLGNBQWNMLE1BQU1zRCxRQUFRLENBQUN4QztZQUM3QnlDLFdBQVdsRDtRQUNiO1FBRUEsSUFBSSxDQUFDa0QsVUFBVTtZQUNiLElBQUssSUFBSUMsSUFBSSxHQUFHQSxJQUFJdkQsU0FBUzJELFFBQVEsQ0FBQ0YsTUFBTSxFQUFFRixJQUFLO2dCQUNqRCxJQUFJekMsY0FBY2QsU0FBUzJELFFBQVEsQ0FBQ0osRUFBRSxHQUFHO29CQUN2Q0QsV0FBVztvQkFDWDtnQkFDRjtZQUNGO1FBQ0Y7SUFDRjtJQUVBLE9BQU87UUFDTHhEO1FBQ0FRO1FBQ0FGO1FBQ0FTO1FBQ0FSO0lBQ0Y7QUFDRiIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yZXNvbHZlLXJld3JpdGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGFyc2VkVXJsUXVlcnkgfSBmcm9tICdxdWVyeXN0cmluZydcbmltcG9ydCB0eXBlIHsgUmV3cml0ZSB9IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9sb2FkLWN1c3RvbS1yb3V0ZXMnXG5pbXBvcnQgeyBnZXRQYXRoTWF0Y2ggfSBmcm9tICcuL3BhdGgtbWF0Y2gnXG5pbXBvcnQgeyBtYXRjaEhhcywgcHJlcGFyZURlc3RpbmF0aW9uIH0gZnJvbSAnLi9wcmVwYXJlLWRlc3RpbmF0aW9uJ1xuaW1wb3J0IHsgcmVtb3ZlVHJhaWxpbmdTbGFzaCB9IGZyb20gJy4vcmVtb3ZlLXRyYWlsaW5nLXNsYXNoJ1xuaW1wb3J0IHsgbm9ybWFsaXplTG9jYWxlUGF0aCB9IGZyb20gJy4uLy4uL2kxOG4vbm9ybWFsaXplLWxvY2FsZS1wYXRoJ1xuaW1wb3J0IHsgcmVtb3ZlQmFzZVBhdGggfSBmcm9tICcuLi8uLi8uLi8uLi9jbGllbnQvcmVtb3ZlLWJhc2UtcGF0aCdcbmltcG9ydCB7IHBhcnNlUmVsYXRpdmVVcmwsIHR5cGUgUGFyc2VkUmVsYXRpdmVVcmwgfSBmcm9tICcuL3BhcnNlLXJlbGF0aXZlLXVybCdcblxuaW50ZXJmYWNlIFBhcnNlZEFzIGV4dGVuZHMgT21pdDxQYXJzZWRSZWxhdGl2ZVVybCwgJ3NsYXNoZXMnPiB7XG4gIHNsYXNoZXM6IGJvb2xlYW4gfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzb2x2ZVJld3JpdGVzKFxuICBhc1BhdGg6IHN0cmluZyxcbiAgcGFnZXM6IHN0cmluZ1tdLFxuICByZXdyaXRlczoge1xuICAgIGJlZm9yZUZpbGVzOiBSZXdyaXRlW11cbiAgICBhZnRlckZpbGVzOiBSZXdyaXRlW11cbiAgICBmYWxsYmFjazogUmV3cml0ZVtdXG4gIH0sXG4gIHF1ZXJ5OiBQYXJzZWRVcmxRdWVyeSxcbiAgcmVzb2x2ZUhyZWY6IChwYXRoOiBzdHJpbmcpID0+IHN0cmluZyxcbiAgbG9jYWxlcz86IHJlYWRvbmx5IHN0cmluZ1tdXG4pOiB7XG4gIG1hdGNoZWRQYWdlOiBib29sZWFuXG4gIHBhcnNlZEFzOiBQYXJzZWRBc1xuICBhc1BhdGg6IHN0cmluZ1xuICByZXNvbHZlZEhyZWY/OiBzdHJpbmdcbiAgZXh0ZXJuYWxEZXN0PzogYm9vbGVhblxufSB7XG4gIGxldCBtYXRjaGVkUGFnZSA9IGZhbHNlXG4gIGxldCBleHRlcm5hbERlc3QgPSBmYWxzZVxuICBsZXQgcGFyc2VkQXM6IFBhcnNlZEFzID0gcGFyc2VSZWxhdGl2ZVVybChhc1BhdGgpXG4gIGxldCBmc1BhdGhuYW1lID0gcmVtb3ZlVHJhaWxpbmdTbGFzaChcbiAgICBub3JtYWxpemVMb2NhbGVQYXRoKHJlbW92ZUJhc2VQYXRoKHBhcnNlZEFzLnBhdGhuYW1lKSwgbG9jYWxlcykucGF0aG5hbWVcbiAgKVxuICBsZXQgcmVzb2x2ZWRIcmVmXG5cbiAgY29uc3QgaGFuZGxlUmV3cml0ZSA9IChyZXdyaXRlOiBSZXdyaXRlKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlciA9IGdldFBhdGhNYXRjaChcbiAgICAgIHJld3JpdGUuc291cmNlICsgKHByb2Nlc3MuZW52Ll9fTkVYVF9UUkFJTElOR19TTEFTSCA/ICcoLyk/JyA6ICcnKSxcbiAgICAgIHtcbiAgICAgICAgcmVtb3ZlVW5uYW1lZFBhcmFtczogdHJ1ZSxcbiAgICAgICAgc3RyaWN0OiB0cnVlLFxuICAgICAgfVxuICAgIClcblxuICAgIGxldCBwYXJhbXMgPSBtYXRjaGVyKHBhcnNlZEFzLnBhdGhuYW1lKVxuXG4gICAgaWYgKChyZXdyaXRlLmhhcyB8fCByZXdyaXRlLm1pc3NpbmcpICYmIHBhcmFtcykge1xuICAgICAgY29uc3QgaGFzUGFyYW1zID0gbWF0Y2hIYXMoXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBob3N0OiBkb2N1bWVudC5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICAgICd1c2VyLWFnZW50JzogbmF2aWdhdG9yLnVzZXJBZ2VudCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvb2tpZXM6IGRvY3VtZW50LmNvb2tpZVxuICAgICAgICAgICAgLnNwbGl0KCc7ICcpXG4gICAgICAgICAgICAucmVkdWNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgW2tleSwgLi4udmFsdWVdID0gaXRlbS5zcGxpdCgnPScpXG4gICAgICAgICAgICAgIGFjY1trZXldID0gdmFsdWUuam9pbignPScpXG4gICAgICAgICAgICAgIHJldHVybiBhY2NcbiAgICAgICAgICAgIH0sIHt9KSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICAgIHBhcnNlZEFzLnF1ZXJ5LFxuICAgICAgICByZXdyaXRlLmhhcyxcbiAgICAgICAgcmV3cml0ZS5taXNzaW5nXG4gICAgICApXG5cbiAgICAgIGlmIChoYXNQYXJhbXMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIGhhc1BhcmFtcylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFtcyA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcykge1xuICAgICAgaWYgKCFyZXdyaXRlLmRlc3RpbmF0aW9uKSB7XG4gICAgICAgIC8vIHRoaXMgaXMgYSBwcm94aWVkIHJld3JpdGUgd2hpY2ggaXNuJ3QgaGFuZGxlZCBvbiB0aGUgY2xpZW50XG4gICAgICAgIGV4dGVybmFsRGVzdCA9IHRydWVcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRlc3RSZXMgPSBwcmVwYXJlRGVzdGluYXRpb24oe1xuICAgICAgICBhcHBlbmRQYXJhbXNUb1F1ZXJ5OiB0cnVlLFxuICAgICAgICBkZXN0aW5hdGlvbjogcmV3cml0ZS5kZXN0aW5hdGlvbixcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICAgIH0pXG4gICAgICBwYXJzZWRBcyA9IGRlc3RSZXMucGFyc2VkRGVzdGluYXRpb25cbiAgICAgIGFzUGF0aCA9IGRlc3RSZXMubmV3VXJsXG4gICAgICBPYmplY3QuYXNzaWduKHF1ZXJ5LCBkZXN0UmVzLnBhcnNlZERlc3RpbmF0aW9uLnF1ZXJ5KVxuXG4gICAgICBmc1BhdGhuYW1lID0gcmVtb3ZlVHJhaWxpbmdTbGFzaChcbiAgICAgICAgbm9ybWFsaXplTG9jYWxlUGF0aChyZW1vdmVCYXNlUGF0aChhc1BhdGgpLCBsb2NhbGVzKS5wYXRobmFtZVxuICAgICAgKVxuXG4gICAgICBpZiAocGFnZXMuaW5jbHVkZXMoZnNQYXRobmFtZSkpIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgd2Ugbm93IG1hdGNoIGEgcGFnZSBhcyB0aGlzIG1lYW5zIHdlIGFyZSBkb25lXG4gICAgICAgIC8vIHJlc29sdmluZyB0aGUgcmV3cml0ZXNcbiAgICAgICAgbWF0Y2hlZFBhZ2UgPSB0cnVlXG4gICAgICAgIHJlc29sdmVkSHJlZiA9IGZzUGF0aG5hbWVcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cblxuICAgICAgLy8gY2hlY2sgaWYgd2UgbWF0Y2ggYSBkeW5hbWljLXJvdXRlLCBpZiBzbyB3ZSBicmVhayB0aGUgcmV3cml0ZXMgY2hhaW5cbiAgICAgIHJlc29sdmVkSHJlZiA9IHJlc29sdmVIcmVmKGZzUGF0aG5hbWUpXG5cbiAgICAgIGlmIChyZXNvbHZlZEhyZWYgIT09IGFzUGF0aCAmJiBwYWdlcy5pbmNsdWRlcyhyZXNvbHZlZEhyZWYpKSB7XG4gICAgICAgIG1hdGNoZWRQYWdlID0gdHJ1ZVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcmV3cml0ZXMuYmVmb3JlRmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAvLyB3ZSBkb24ndCBlbmQgYWZ0ZXIgbWF0Y2ggaW4gYmVmb3JlRmlsZXMgdG8gYWxsb3dcbiAgICAvLyBjb250aW51aW5nIHRocm91Z2ggYWxsIGJlZm9yZUZpbGVzIHJld3JpdGVzXG4gICAgaGFuZGxlUmV3cml0ZShyZXdyaXRlcy5iZWZvcmVGaWxlc1tpXSlcbiAgfVxuICBtYXRjaGVkUGFnZSA9IHBhZ2VzLmluY2x1ZGVzKGZzUGF0aG5hbWUpXG5cbiAgaWYgKCFtYXRjaGVkUGFnZSkge1xuICAgIGlmICghZmluaXNoZWQpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmV3cml0ZXMuYWZ0ZXJGaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaGFuZGxlUmV3cml0ZShyZXdyaXRlcy5hZnRlckZpbGVzW2ldKSkge1xuICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjaGVjayBkeW5hbWljIHJvdXRlIGJlZm9yZSBwcm9jZXNzaW5nIGZhbGxiYWNrIHJld3JpdGVzXG4gICAgaWYgKCFmaW5pc2hlZCkge1xuICAgICAgcmVzb2x2ZWRIcmVmID0gcmVzb2x2ZUhyZWYoZnNQYXRobmFtZSlcbiAgICAgIG1hdGNoZWRQYWdlID0gcGFnZXMuaW5jbHVkZXMocmVzb2x2ZWRIcmVmKVxuICAgICAgZmluaXNoZWQgPSBtYXRjaGVkUGFnZVxuICAgIH1cblxuICAgIGlmICghZmluaXNoZWQpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmV3cml0ZXMuZmFsbGJhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGhhbmRsZVJld3JpdGUocmV3cml0ZXMuZmFsbGJhY2tbaV0pKSB7XG4gICAgICAgICAgZmluaXNoZWQgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXNQYXRoLFxuICAgIHBhcnNlZEFzLFxuICAgIG1hdGNoZWRQYWdlLFxuICAgIHJlc29sdmVkSHJlZixcbiAgICBleHRlcm5hbERlc3QsXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJyZXNvbHZlUmV3cml0ZXMiLCJhc1BhdGgiLCJwYWdlcyIsInJld3JpdGVzIiwicXVlcnkiLCJyZXNvbHZlSHJlZiIsImxvY2FsZXMiLCJtYXRjaGVkUGFnZSIsImV4dGVybmFsRGVzdCIsInBhcnNlZEFzIiwicGFyc2VSZWxhdGl2ZVVybCIsImZzUGF0aG5hbWUiLCJyZW1vdmVUcmFpbGluZ1NsYXNoIiwibm9ybWFsaXplTG9jYWxlUGF0aCIsInJlbW92ZUJhc2VQYXRoIiwicGF0aG5hbWUiLCJyZXNvbHZlZEhyZWYiLCJoYW5kbGVSZXdyaXRlIiwicmV3cml0ZSIsIm1hdGNoZXIiLCJnZXRQYXRoTWF0Y2giLCJzb3VyY2UiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX1RSQUlMSU5HX1NMQVNIIiwicmVtb3ZlVW5uYW1lZFBhcmFtcyIsInN0cmljdCIsInBhcmFtcyIsImhhcyIsIm1pc3NpbmciLCJoYXNQYXJhbXMiLCJtYXRjaEhhcyIsImhlYWRlcnMiLCJob3N0IiwiZG9jdW1lbnQiLCJsb2NhdGlvbiIsImhvc3RuYW1lIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiY29va2llcyIsImNvb2tpZSIsInNwbGl0IiwicmVkdWNlIiwiYWNjIiwiaXRlbSIsImtleSIsInZhbHVlIiwiam9pbiIsIk9iamVjdCIsImFzc2lnbiIsImRlc3RpbmF0aW9uIiwiZGVzdFJlcyIsInByZXBhcmVEZXN0aW5hdGlvbiIsImFwcGVuZFBhcmFtc1RvUXVlcnkiLCJwYXJzZWREZXN0aW5hdGlvbiIsIm5ld1VybCIsImluY2x1ZGVzIiwiZmluaXNoZWQiLCJpIiwiYmVmb3JlRmlsZXMiLCJsZW5ndGgiLCJhZnRlckZpbGVzIiwiZmFsbGJhY2siXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/resolve-rewrites.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/route-matcher.js":
/*!*********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/route-matcher.js ***!
  \*********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"getRouteMatcher\", ({\n    enumerable: true,\n    get: function() {\n        return getRouteMatcher;\n    }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/utils.js\");\nfunction getRouteMatcher(param) {\n    let { re, groups } = param;\n    return (pathname)=>{\n        const routeMatch = re.exec(pathname);\n        if (!routeMatch) return false;\n        const decode = (param)=>{\n            try {\n                return decodeURIComponent(param);\n            } catch (e) {\n                throw Object.defineProperty(new _utils.DecodeError('failed to decode param'), \"__NEXT_ERROR_CODE\", {\n                    value: \"E528\",\n                    enumerable: false,\n                    configurable: true\n                });\n            }\n        };\n        const params = {};\n        for (const [key, group] of Object.entries(groups)){\n            const match = routeMatch[group.pos];\n            if (match !== undefined) {\n                if (group.repeat) {\n                    params[key] = match.split('/').map((entry)=>decode(entry));\n                } else {\n                    params[key] = decode(match);\n                }\n            }\n        }\n        return params;\n    };\n} //# sourceMappingURL=route-matcher.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yb3V0ZS1tYXRjaGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7bURBZWdCQTs7O2VBQUFBOzs7bUNBZFk7QUFjckIsU0FBU0EsZ0JBQWdCLEtBR1Y7SUFIVSxNQUM5QkMsRUFBRSxFQUNGQyxNQUFNLEVBQ2MsR0FIVTtJQUk5QixPQUFPLENBQUNDO1FBQ04sTUFBTUMsYUFBYUgsR0FBR0ksSUFBSSxDQUFDRjtRQUMzQixJQUFJLENBQUNDLFlBQVksT0FBTztRQUV4QixNQUFNRSxTQUFTLENBQUNDO1lBQ2QsSUFBSTtnQkFDRixPQUFPQyxtQkFBbUJEO1lBQzVCLEVBQUUsVUFBTTtnQkFDTixNQUFNLHFCQUF5QyxDQUF6QyxJQUFJRSxPQUFBQSxXQUFXLENBQUMsMkJBQWhCOzJCQUFBO2dDQUFBO2tDQUFBO2dCQUF3QztZQUNoRDtRQUNGO1FBRUEsTUFBTUMsU0FBaUIsQ0FBQztRQUN4QixLQUFLLE1BQU0sQ0FBQ0MsS0FBS0MsTUFBTSxJQUFJQyxPQUFPQyxPQUFPLENBQUNaLFFBQVM7WUFDakQsTUFBTWEsUUFBUVgsVUFBVSxDQUFDUSxNQUFNSSxHQUFHLENBQUM7WUFDbkMsSUFBSUQsVUFBVUUsV0FBVztnQkFDdkIsSUFBSUwsTUFBTU0sTUFBTSxFQUFFO29CQUNoQlIsTUFBTSxDQUFDQyxJQUFJLEdBQUdJLE1BQU1JLEtBQUssQ0FBQyxLQUFLQyxHQUFHLENBQUMsQ0FBQ0MsUUFBVWYsT0FBT2U7Z0JBQ3ZELE9BQU87b0JBQ0xYLE1BQU0sQ0FBQ0MsSUFBSSxHQUFHTCxPQUFPUztnQkFDdkI7WUFDRjtRQUNGO1FBRUEsT0FBT0w7SUFDVDtBQUNGIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JvdXRlLW1hdGNoZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBHcm91cCB9IGZyb20gJy4vcm91dGUtcmVnZXgnXG5pbXBvcnQgeyBEZWNvZGVFcnJvciB9IGZyb20gJy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBQYXJhbXMgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2ZXIvcmVxdWVzdC9wYXJhbXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVNYXRjaEZuIHtcbiAgKHBhdGhuYW1lOiBzdHJpbmcpOiBmYWxzZSB8IFBhcmFtc1xufVxuXG50eXBlIFJvdXRlTWF0Y2hlck9wdGlvbnMgPSB7XG4gIC8vIFdlIG9ubHkgdXNlIHRoZSBleGVjIG1ldGhvZCBvZiB0aGUgUmVnRXhwIG9iamVjdC4gVGhpcyBoZWxwcyB1cyBhdm9pZCB1c2luZ1xuICAvLyB0eXBlIGFzc2VydGlvbnMgdGhhdCB0aGUgcGFzc2VkIGluIHByb3BlcnRpZXMgYXJlIG9mIHRoZSBjb3JyZWN0IHR5cGUuXG4gIHJlOiBQaWNrPFJlZ0V4cCwgJ2V4ZWMnPlxuICBncm91cHM6IFJlY29yZDxzdHJpbmcsIEdyb3VwPlxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um91dGVNYXRjaGVyKHtcbiAgcmUsXG4gIGdyb3Vwcyxcbn06IFJvdXRlTWF0Y2hlck9wdGlvbnMpOiBSb3V0ZU1hdGNoRm4ge1xuICByZXR1cm4gKHBhdGhuYW1lOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByb3V0ZU1hdGNoID0gcmUuZXhlYyhwYXRobmFtZSlcbiAgICBpZiAoIXJvdXRlTWF0Y2gpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3QgZGVjb2RlID0gKHBhcmFtOiBzdHJpbmcpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQocGFyYW0pXG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IERlY29kZUVycm9yKCdmYWlsZWQgdG8gZGVjb2RlIHBhcmFtJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXM6IFBhcmFtcyA9IHt9XG4gICAgZm9yIChjb25zdCBba2V5LCBncm91cF0gb2YgT2JqZWN0LmVudHJpZXMoZ3JvdXBzKSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSByb3V0ZU1hdGNoW2dyb3VwLnBvc11cbiAgICAgIGlmIChtYXRjaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChncm91cC5yZXBlYXQpIHtcbiAgICAgICAgICBwYXJhbXNba2V5XSA9IG1hdGNoLnNwbGl0KCcvJykubWFwKChlbnRyeSkgPT4gZGVjb2RlKGVudHJ5KSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJhbXNba2V5XSA9IGRlY29kZShtYXRjaClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXNcbiAgfVxufVxuIl0sIm5hbWVzIjpbImdldFJvdXRlTWF0Y2hlciIsInJlIiwiZ3JvdXBzIiwicGF0aG5hbWUiLCJyb3V0ZU1hdGNoIiwiZXhlYyIsImRlY29kZSIsInBhcmFtIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiRGVjb2RlRXJyb3IiLCJwYXJhbXMiLCJrZXkiLCJncm91cCIsIk9iamVjdCIsImVudHJpZXMiLCJtYXRjaCIsInBvcyIsInVuZGVmaW5lZCIsInJlcGVhdCIsInNwbGl0IiwibWFwIiwiZW50cnkiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/route-matcher.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/route-regex.js":
/*!*******************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/route-regex.js ***!
  \*******************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    getNamedMiddlewareRegex: function() {\n        return getNamedMiddlewareRegex;\n    },\n    getNamedRouteRegex: function() {\n        return getNamedRouteRegex;\n    },\n    getRouteRegex: function() {\n        return getRouteRegex;\n    },\n    parseParameter: function() {\n        return parseParameter;\n    }\n});\nconst _constants = __webpack_require__(/*! ../../../../lib/constants */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/lib/constants.js\");\nconst _interceptionroutes = __webpack_require__(/*! ./interception-routes */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/interception-routes.js\");\nconst _escaperegexp = __webpack_require__(/*! ../../escape-regexp */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/escape-regexp.js\");\nconst _removetrailingslash = __webpack_require__(/*! ./remove-trailing-slash */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js\");\n/**\n * Regular expression pattern used to match route parameters.\n * Matches both single parameters and parameter groups.\n * Examples:\n *   - `[[...slug]]` matches parameter group with key 'slug', repeat: true, optional: true\n *   - `[...slug]` matches parameter group with key 'slug', repeat: true, optional: false\n *   - `[[foo]]` matches parameter with key 'foo', repeat: false, optional: true\n *   - `[bar]` matches parameter with key 'bar', repeat: false, optional: false\n */ const PARAMETER_PATTERN = /^([^[]*)\\[((?:\\[[^\\]]*\\])|[^\\]]+)\\](.*)$/;\nfunction parseParameter(param) {\n    const match = param.match(PARAMETER_PATTERN);\n    if (!match) {\n        return parseMatchedParameter(param);\n    }\n    return parseMatchedParameter(match[2]);\n}\n/**\n * Parses a matched parameter from the PARAMETER_PATTERN regex to a data structure that can be used\n * to generate the parametrized route.\n * Examples:\n *   - `[...slug]` -> `{ key: 'slug', repeat: true, optional: true }`\n *   - `...slug` -> `{ key: 'slug', repeat: true, optional: false }`\n *   - `[foo]` -> `{ key: 'foo', repeat: false, optional: true }`\n *   - `bar` -> `{ key: 'bar', repeat: false, optional: false }`\n * @param param - The matched parameter to parse.\n * @returns The parsed parameter as a data structure.\n */ function parseMatchedParameter(param) {\n    const optional = param.startsWith('[') && param.endsWith(']');\n    if (optional) {\n        param = param.slice(1, -1);\n    }\n    const repeat = param.startsWith('...');\n    if (repeat) {\n        param = param.slice(3);\n    }\n    return {\n        key: param,\n        repeat,\n        optional\n    };\n}\nfunction getParametrizedRoute(route, includeSuffix, includePrefix) {\n    const groups = {};\n    let groupIndex = 1;\n    const segments = [];\n    for (const segment of (0, _removetrailingslash.removeTrailingSlash)(route).slice(1).split('/')){\n        const markerMatch = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.find((m)=>segment.startsWith(m));\n        const paramMatches = segment.match(PARAMETER_PATTERN) // Check for parameters\n        ;\n        if (markerMatch && paramMatches && paramMatches[2]) {\n            const { key, optional, repeat } = parseMatchedParameter(paramMatches[2]);\n            groups[key] = {\n                pos: groupIndex++,\n                repeat,\n                optional\n            };\n            segments.push(\"/\" + (0, _escaperegexp.escapeStringRegexp)(markerMatch) + \"([^/]+?)\");\n        } else if (paramMatches && paramMatches[2]) {\n            const { key, repeat, optional } = parseMatchedParameter(paramMatches[2]);\n            groups[key] = {\n                pos: groupIndex++,\n                repeat,\n                optional\n            };\n            if (includePrefix && paramMatches[1]) {\n                segments.push(\"/\" + (0, _escaperegexp.escapeStringRegexp)(paramMatches[1]));\n            }\n            let s = repeat ? optional ? '(?:/(.+?))?' : '/(.+?)' : '/([^/]+?)';\n            // Remove the leading slash if includePrefix already added it.\n            if (includePrefix && paramMatches[1]) {\n                s = s.substring(1);\n            }\n            segments.push(s);\n        } else {\n            segments.push(\"/\" + (0, _escaperegexp.escapeStringRegexp)(segment));\n        }\n        // If there's a suffix, add it to the segments if it's enabled.\n        if (includeSuffix && paramMatches && paramMatches[3]) {\n            segments.push((0, _escaperegexp.escapeStringRegexp)(paramMatches[3]));\n        }\n    }\n    return {\n        parameterizedRoute: segments.join(''),\n        groups\n    };\n}\nfunction getRouteRegex(normalizedRoute, param) {\n    let { includeSuffix = false, includePrefix = false, excludeOptionalTrailingSlash = false } = param === void 0 ? {} : param;\n    const { parameterizedRoute, groups } = getParametrizedRoute(normalizedRoute, includeSuffix, includePrefix);\n    let re = parameterizedRoute;\n    if (!excludeOptionalTrailingSlash) {\n        re += '(?:/)?';\n    }\n    return {\n        re: new RegExp(\"^\" + re + \"$\"),\n        groups: groups\n    };\n}\n/**\n * Builds a function to generate a minimal routeKey using only a-z and minimal\n * number of characters.\n */ function buildGetSafeRouteKey() {\n    let i = 0;\n    return ()=>{\n        let routeKey = '';\n        let j = ++i;\n        while(j > 0){\n            routeKey += String.fromCharCode(97 + (j - 1) % 26);\n            j = Math.floor((j - 1) / 26);\n        }\n        return routeKey;\n    };\n}\nfunction getSafeKeyFromSegment(param) {\n    let { interceptionMarker, getSafeRouteKey, segment, routeKeys, keyPrefix, backreferenceDuplicateKeys } = param;\n    const { key, optional, repeat } = parseMatchedParameter(segment);\n    // replace any non-word characters since they can break\n    // the named regex\n    let cleanedKey = key.replace(/\\W/g, '');\n    if (keyPrefix) {\n        cleanedKey = \"\" + keyPrefix + cleanedKey;\n    }\n    let invalidKey = false;\n    // check if the key is still invalid and fallback to using a known\n    // safe key\n    if (cleanedKey.length === 0 || cleanedKey.length > 30) {\n        invalidKey = true;\n    }\n    if (!isNaN(parseInt(cleanedKey.slice(0, 1)))) {\n        invalidKey = true;\n    }\n    if (invalidKey) {\n        cleanedKey = getSafeRouteKey();\n    }\n    const duplicateKey = cleanedKey in routeKeys;\n    if (keyPrefix) {\n        routeKeys[cleanedKey] = \"\" + keyPrefix + key;\n    } else {\n        routeKeys[cleanedKey] = key;\n    }\n    // if the segment has an interception marker, make sure that's part of the regex pattern\n    // this is to ensure that the route with the interception marker doesn't incorrectly match\n    // the non-intercepted route (ie /app/(.)[username] should not match /app/[username])\n    const interceptionPrefix = interceptionMarker ? (0, _escaperegexp.escapeStringRegexp)(interceptionMarker) : '';\n    let pattern;\n    if (duplicateKey && backreferenceDuplicateKeys) {\n        // Use a backreference to the key to ensure that the key is the same value\n        // in each of the placeholders.\n        pattern = \"\\\\k<\" + cleanedKey + \">\";\n    } else if (repeat) {\n        pattern = \"(?<\" + cleanedKey + \">.+?)\";\n    } else {\n        pattern = \"(?<\" + cleanedKey + \">[^/]+?)\";\n    }\n    return optional ? \"(?:/\" + interceptionPrefix + pattern + \")?\" : \"/\" + interceptionPrefix + pattern;\n}\nfunction getNamedParametrizedRoute(route, prefixRouteKeys, includeSuffix, includePrefix, backreferenceDuplicateKeys) {\n    const getSafeRouteKey = buildGetSafeRouteKey();\n    const routeKeys = {};\n    const segments = [];\n    for (const segment of (0, _removetrailingslash.removeTrailingSlash)(route).slice(1).split('/')){\n        const hasInterceptionMarker = _interceptionroutes.INTERCEPTION_ROUTE_MARKERS.some((m)=>segment.startsWith(m));\n        const paramMatches = segment.match(PARAMETER_PATTERN) // Check for parameters\n        ;\n        if (hasInterceptionMarker && paramMatches && paramMatches[2]) {\n            // If there's an interception marker, add it to the segments.\n            segments.push(getSafeKeyFromSegment({\n                getSafeRouteKey,\n                interceptionMarker: paramMatches[1],\n                segment: paramMatches[2],\n                routeKeys,\n                keyPrefix: prefixRouteKeys ? _constants.NEXT_INTERCEPTION_MARKER_PREFIX : undefined,\n                backreferenceDuplicateKeys\n            }));\n        } else if (paramMatches && paramMatches[2]) {\n            // If there's a prefix, add it to the segments if it's enabled.\n            if (includePrefix && paramMatches[1]) {\n                segments.push(\"/\" + (0, _escaperegexp.escapeStringRegexp)(paramMatches[1]));\n            }\n            let s = getSafeKeyFromSegment({\n                getSafeRouteKey,\n                segment: paramMatches[2],\n                routeKeys,\n                keyPrefix: prefixRouteKeys ? _constants.NEXT_QUERY_PARAM_PREFIX : undefined,\n                backreferenceDuplicateKeys\n            });\n            // Remove the leading slash if includePrefix already added it.\n            if (includePrefix && paramMatches[1]) {\n                s = s.substring(1);\n            }\n            segments.push(s);\n        } else {\n            segments.push(\"/\" + (0, _escaperegexp.escapeStringRegexp)(segment));\n        }\n        // If there's a suffix, add it to the segments if it's enabled.\n        if (includeSuffix && paramMatches && paramMatches[3]) {\n            segments.push((0, _escaperegexp.escapeStringRegexp)(paramMatches[3]));\n        }\n    }\n    return {\n        namedParameterizedRoute: segments.join(''),\n        routeKeys\n    };\n}\nfunction getNamedRouteRegex(normalizedRoute, options) {\n    var _options_includeSuffix, _options_includePrefix, _options_backreferenceDuplicateKeys;\n    const result = getNamedParametrizedRoute(normalizedRoute, options.prefixRouteKeys, (_options_includeSuffix = options.includeSuffix) != null ? _options_includeSuffix : false, (_options_includePrefix = options.includePrefix) != null ? _options_includePrefix : false, (_options_backreferenceDuplicateKeys = options.backreferenceDuplicateKeys) != null ? _options_backreferenceDuplicateKeys : false);\n    let namedRegex = result.namedParameterizedRoute;\n    if (!options.excludeOptionalTrailingSlash) {\n        namedRegex += '(?:/)?';\n    }\n    return {\n        ...getRouteRegex(normalizedRoute, options),\n        namedRegex: \"^\" + namedRegex + \"$\",\n        routeKeys: result.routeKeys\n    };\n}\nfunction getNamedMiddlewareRegex(normalizedRoute, options) {\n    const { parameterizedRoute } = getParametrizedRoute(normalizedRoute, false, false);\n    const { catchAll = true } = options;\n    if (parameterizedRoute === '/') {\n        let catchAllRegex = catchAll ? '.*' : '';\n        return {\n            namedRegex: \"^/\" + catchAllRegex + \"$\"\n        };\n    }\n    const { namedParameterizedRoute } = getNamedParametrizedRoute(normalizedRoute, false, false, false, false);\n    let catchAllGroupedRegex = catchAll ? '(?:(/.*)?)' : '';\n    return {\n        namedRegex: \"^\" + namedParameterizedRoute + catchAllGroupedRegex + \"$\"\n    };\n} //# sourceMappingURL=route-regex.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9yb3V0ZS1yZWdleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUF3WmdCQSx1QkFBdUI7ZUFBdkJBOztJQTVCQUMsa0JBQWtCO2VBQWxCQTs7SUE3TEFDLGFBQWE7ZUFBYkE7O0lBekZBQyxjQUFjO2VBQWRBOzs7dUNBbkdUO2dEQUNvQzswQ0FDUjtpREFDQztBQXlFcEM7Ozs7Ozs7O0NBUUMsR0FDRCxNQUFNQyxvQkFBb0I7QUFjbkIsU0FBU0QsZUFBZUUsS0FBYTtJQUMxQyxNQUFNQyxRQUFRRCxNQUFNQyxLQUFLLENBQUNGO0lBRTFCLElBQUksQ0FBQ0UsT0FBTztRQUNWLE9BQU9DLHNCQUFzQkY7SUFDL0I7SUFFQSxPQUFPRSxzQkFBc0JELEtBQUssQ0FBQyxFQUFFO0FBQ3ZDO0FBRUE7Ozs7Ozs7Ozs7Q0FVQyxHQUNELFNBQVNDLHNCQUFzQkYsS0FBYTtJQUMxQyxNQUFNRyxXQUFXSCxNQUFNSSxVQUFVLENBQUMsUUFBUUosTUFBTUssUUFBUSxDQUFDO0lBQ3pELElBQUlGLFVBQVU7UUFDWkgsUUFBUUEsTUFBTU0sS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUMxQjtJQUNBLE1BQU1DLFNBQVNQLE1BQU1JLFVBQVUsQ0FBQztJQUNoQyxJQUFJRyxRQUFRO1FBQ1ZQLFFBQVFBLE1BQU1NLEtBQUssQ0FBQztJQUN0QjtJQUNBLE9BQU87UUFBRUUsS0FBS1I7UUFBT087UUFBUUo7SUFBUztBQUN4QztBQUVBLFNBQVNNLHFCQUNQQyxLQUFhLEVBQ2JDLGFBQXNCLEVBQ3RCQyxhQUFzQjtJQUV0QixNQUFNQyxTQUF5QyxDQUFDO0lBQ2hELElBQUlDLGFBQWE7SUFFakIsTUFBTUMsV0FBcUIsRUFBRTtJQUM3QixLQUFLLE1BQU1DLFdBQVdDLENBQUFBLEdBQUFBLHFCQUFBQSxtQkFBQUEsRUFBb0JQLE9BQU9KLEtBQUssQ0FBQyxHQUFHWSxLQUFLLENBQUMsS0FBTTtRQUNwRSxNQUFNQyxjQUFjQyxvQkFBQUEsMEJBQTBCLENBQUNDLElBQUksQ0FBQyxDQUFDQyxJQUNuRE4sUUFBUVosVUFBVSxDQUFDa0I7UUFFckIsTUFBTUMsZUFBZVAsUUFBUWYsS0FBSyxDQUFDRixtQkFBbUIsdUJBQXVCOztRQUU3RSxJQUFJb0IsZUFBZUksZ0JBQWdCQSxZQUFZLENBQUMsRUFBRSxFQUFFO1lBQ2xELE1BQU0sRUFBRWYsR0FBRyxFQUFFTCxRQUFRLEVBQUVJLE1BQU0sRUFBRSxHQUFHTCxzQkFBc0JxQixZQUFZLENBQUMsRUFBRTtZQUN2RVYsTUFBTSxDQUFDTCxJQUFJLEdBQUc7Z0JBQUVnQixLQUFLVjtnQkFBY1A7Z0JBQVFKO1lBQVM7WUFDcERZLFNBQVNVLElBQUksQ0FBRSxNQUFHQyxDQUFBQSxHQUFBQSxjQUFBQSxrQkFBQUEsRUFBbUJQLGVBQWE7UUFDcEQsT0FBTyxJQUFJSSxnQkFBZ0JBLFlBQVksQ0FBQyxFQUFFLEVBQUU7WUFDMUMsTUFBTSxFQUFFZixHQUFHLEVBQUVELE1BQU0sRUFBRUosUUFBUSxFQUFFLEdBQUdELHNCQUFzQnFCLFlBQVksQ0FBQyxFQUFFO1lBQ3ZFVixNQUFNLENBQUNMLElBQUksR0FBRztnQkFBRWdCLEtBQUtWO2dCQUFjUDtnQkFBUUo7WUFBUztZQUVwRCxJQUFJUyxpQkFBaUJXLFlBQVksQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BDUixTQUFTVSxJQUFJLENBQUUsTUFBR0MsQ0FBQUEsR0FBQUEsY0FBQUEsa0JBQWtCLEVBQUNILFlBQVksQ0FBQyxFQUFFO1lBQ3REO1lBRUEsSUFBSUksSUFBSXBCLFNBQVVKLFdBQVcsZ0JBQWdCLFdBQVk7WUFFekQsOERBQThEO1lBQzlELElBQUlTLGlCQUFpQlcsWUFBWSxDQUFDLEVBQUUsRUFBRTtnQkFDcENJLElBQUlBLEVBQUVDLFNBQVMsQ0FBQztZQUNsQjtZQUVBYixTQUFTVSxJQUFJLENBQUNFO1FBQ2hCLE9BQU87WUFDTFosU0FBU1UsSUFBSSxDQUFFLE1BQUdDLENBQUFBLEdBQUFBLGNBQUFBLGtCQUFBQSxFQUFtQlY7UUFDdkM7UUFFQSwrREFBK0Q7UUFDL0QsSUFBSUwsaUJBQWlCWSxnQkFBZ0JBLFlBQVksQ0FBQyxFQUFFLEVBQUU7WUFDcERSLFNBQVNVLElBQUksQ0FBQ0MsQ0FBQUEsR0FBQUEsY0FBQUEsa0JBQUFBLEVBQW1CSCxZQUFZLENBQUMsRUFBRTtRQUNsRDtJQUNGO0lBRUEsT0FBTztRQUNMTSxvQkFBb0JkLFNBQVNlLElBQUksQ0FBQztRQUNsQ2pCO0lBQ0Y7QUFDRjtBQU9PLFNBQVNoQixjQUNka0MsZUFBdUIsRUFDdkI7SUFBQSxNQUNFcEIsZ0JBQWdCLEtBQUssRUFDckJDLGdCQUFnQixLQUFLLEVBQ3JCb0IsK0JBQStCLEtBQUssRUFDZixHQUp2QixtQkFJMEIsQ0FBQyxJQUozQjtJQU1BLE1BQU0sRUFBRUgsa0JBQWtCLEVBQUVoQixNQUFNLEVBQUUsR0FBR0oscUJBQ3JDc0IsaUJBQ0FwQixlQUNBQztJQUdGLElBQUlxQixLQUFLSjtJQUNULElBQUksQ0FBQ0csOEJBQThCO1FBQ2pDQyxNQUFNO0lBQ1I7SUFFQSxPQUFPO1FBQ0xBLElBQUksSUFBSUMsT0FBUSxNQUFHRCxLQUFHO1FBQ3RCcEIsUUFBUUE7SUFDVjtBQUNGO0FBRUE7OztDQUdDLEdBQ0QsU0FBU3NCO0lBQ1AsSUFBSUMsSUFBSTtJQUVSLE9BQU87UUFDTCxJQUFJQyxXQUFXO1FBQ2YsSUFBSUMsSUFBSSxFQUFFRjtRQUNWLE1BQU9FLElBQUksRUFBRztZQUNaRCxZQUFZRSxPQUFPQyxZQUFZLENBQUMsS0FBT0YsQ0FBQUEsS0FBSSxJQUFLO1lBQ2hEQSxJQUFJRyxLQUFLQyxLQUFLLENBQUVKLENBQUFBLEtBQUksSUFBSztRQUMzQjtRQUNBLE9BQU9EO0lBQ1Q7QUFDRjtBQUVBLFNBQVNNLHNCQUFzQixLQWM5QjtJQWQ4QixNQUM3QkMsa0JBQWtCLEVBQ2xCQyxlQUFlLEVBQ2Y3QixPQUFPLEVBQ1A4QixTQUFTLEVBQ1RDLFNBQVMsRUFDVEMsMEJBQTBCLEVBUTNCLEdBZDhCO0lBZTdCLE1BQU0sRUFBRXhDLEdBQUcsRUFBRUwsUUFBUSxFQUFFSSxNQUFNLEVBQUUsR0FBR0wsc0JBQXNCYztJQUV4RCx1REFBdUQ7SUFDdkQsa0JBQWtCO0lBQ2xCLElBQUlpQyxhQUFhekMsSUFBSTBDLE9BQU8sQ0FBQyxPQUFPO0lBRXBDLElBQUlILFdBQVc7UUFDYkUsYUFBYyxLQUFFRixZQUFZRTtJQUM5QjtJQUNBLElBQUlFLGFBQWE7SUFFakIsa0VBQWtFO0lBQ2xFLFdBQVc7SUFDWCxJQUFJRixXQUFXRyxNQUFNLEtBQUssS0FBS0gsV0FBV0csTUFBTSxHQUFHLElBQUk7UUFDckRELGFBQWE7SUFDZjtJQUNBLElBQUksQ0FBQ0UsTUFBTUMsU0FBU0wsV0FBVzNDLEtBQUssQ0FBQyxHQUFHLE1BQU07UUFDNUM2QyxhQUFhO0lBQ2Y7SUFFQSxJQUFJQSxZQUFZO1FBQ2RGLGFBQWFKO0lBQ2Y7SUFFQSxNQUFNVSxlQUFlTixjQUFjSDtJQUVuQyxJQUFJQyxXQUFXO1FBQ2JELFNBQVMsQ0FBQ0csV0FBVyxHQUFJLEtBQUVGLFlBQVl2QztJQUN6QyxPQUFPO1FBQ0xzQyxTQUFTLENBQUNHLFdBQVcsR0FBR3pDO0lBQzFCO0lBRUEsd0ZBQXdGO0lBQ3hGLDBGQUEwRjtJQUMxRixxRkFBcUY7SUFDckYsTUFBTWdELHFCQUFxQloscUJBQ3ZCbEIsQ0FBQUEsR0FBQUEsY0FBQUEsa0JBQUFBLEVBQW1Ca0Isc0JBQ25CO0lBRUosSUFBSWE7SUFDSixJQUFJRixnQkFBZ0JQLDRCQUE0QjtRQUM5QywwRUFBMEU7UUFDMUUsK0JBQStCO1FBQy9CUyxVQUFXLFNBQU1SLGFBQVc7SUFDOUIsT0FBTyxJQUFJMUMsUUFBUTtRQUNqQmtELFVBQVcsUUFBS1IsYUFBVztJQUM3QixPQUFPO1FBQ0xRLFVBQVcsUUFBS1IsYUFBVztJQUM3QjtJQUVBLE9BQU85QyxXQUNGLFNBQU1xRCxxQkFBcUJDLFVBQVEsT0FDbkMsTUFBR0QscUJBQXFCQztBQUMvQjtBQUVBLFNBQVNDLDBCQUNQaEQsS0FBYSxFQUNiaUQsZUFBd0IsRUFDeEJoRCxhQUFzQixFQUN0QkMsYUFBc0IsRUFDdEJvQywwQkFBbUM7SUFFbkMsTUFBTUgsa0JBQWtCVjtJQUN4QixNQUFNVyxZQUF5QyxDQUFDO0lBRWhELE1BQU0vQixXQUFxQixFQUFFO0lBQzdCLEtBQUssTUFBTUMsV0FBV0MsQ0FBQUEsR0FBQUEscUJBQUFBLG1CQUFBQSxFQUFvQlAsT0FBT0osS0FBSyxDQUFDLEdBQUdZLEtBQUssQ0FBQyxLQUFNO1FBQ3BFLE1BQU0wQyx3QkFBd0J4QyxvQkFBQUEsMEJBQTBCLENBQUN5QyxJQUFJLENBQUMsQ0FBQ3ZDLElBQzdETixRQUFRWixVQUFVLENBQUNrQjtRQUdyQixNQUFNQyxlQUFlUCxRQUFRZixLQUFLLENBQUNGLG1CQUFtQix1QkFBdUI7O1FBRTdFLElBQUk2RCx5QkFBeUJyQyxnQkFBZ0JBLFlBQVksQ0FBQyxFQUFFLEVBQUU7WUFDNUQsNkRBQTZEO1lBQzdEUixTQUFTVSxJQUFJLENBQ1hrQixzQkFBc0I7Z0JBQ3BCRTtnQkFDQUQsb0JBQW9CckIsWUFBWSxDQUFDLEVBQUU7Z0JBQ25DUCxTQUFTTyxZQUFZLENBQUMsRUFBRTtnQkFDeEJ1QjtnQkFDQUMsV0FBV1ksa0JBQ1BHLFdBQUFBLCtCQUErQixHQUMvQkM7Z0JBQ0pmO1lBQ0Y7UUFFSixPQUFPLElBQUl6QixnQkFBZ0JBLFlBQVksQ0FBQyxFQUFFLEVBQUU7WUFDMUMsK0RBQStEO1lBQy9ELElBQUlYLGlCQUFpQlcsWUFBWSxDQUFDLEVBQUUsRUFBRTtnQkFDcENSLFNBQVNVLElBQUksQ0FBRSxNQUFHQyxDQUFBQSxHQUFBQSxjQUFBQSxrQkFBa0IsRUFBQ0gsWUFBWSxDQUFDLEVBQUU7WUFDdEQ7WUFFQSxJQUFJSSxJQUFJZ0Isc0JBQXNCO2dCQUM1QkU7Z0JBQ0E3QixTQUFTTyxZQUFZLENBQUMsRUFBRTtnQkFDeEJ1QjtnQkFDQUMsV0FBV1ksa0JBQWtCSyxXQUFBQSx1QkFBdUIsR0FBR0Q7Z0JBQ3ZEZjtZQUNGO1lBRUEsOERBQThEO1lBQzlELElBQUlwQyxpQkFBaUJXLFlBQVksQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BDSSxJQUFJQSxFQUFFQyxTQUFTLENBQUM7WUFDbEI7WUFFQWIsU0FBU1UsSUFBSSxDQUFDRTtRQUNoQixPQUFPO1lBQ0xaLFNBQVNVLElBQUksQ0FBRSxNQUFHQyxDQUFBQSxHQUFBQSxjQUFBQSxrQkFBQUEsRUFBbUJWO1FBQ3ZDO1FBRUEsK0RBQStEO1FBQy9ELElBQUlMLGlCQUFpQlksZ0JBQWdCQSxZQUFZLENBQUMsRUFBRSxFQUFFO1lBQ3BEUixTQUFTVSxJQUFJLENBQUNDLENBQUFBLEdBQUFBLGNBQUFBLGtCQUFBQSxFQUFtQkgsWUFBWSxDQUFDLEVBQUU7UUFDbEQ7SUFDRjtJQUVBLE9BQU87UUFDTDBDLHlCQUF5QmxELFNBQVNlLElBQUksQ0FBQztRQUN2Q2dCO0lBQ0Y7QUFDRjtBQVVPLFNBQVNsRCxtQkFDZG1DLGVBQXVCLEVBQ3ZCbUMsT0FBa0M7UUFLaENBLHdCQUNBQSx3QkFDQUE7SUFMRixNQUFNQyxTQUFTVCwwQkFDYjNCLGlCQUNBbUMsUUFBUVAsZUFBZSxFQUN2Qk8sQ0FBQUEseUJBQUFBLFFBQVF2RCxhQUFBQSxLQUFhLE9BQXJCdUQseUJBQXlCLE9BQ3pCQSwwQkFBQUEsUUFBUXRELGFBQWEsWUFBckJzRCx5QkFBeUIsT0FDekJBLENBQUFBLHNDQUFBQSxRQUFRbEIsMEJBQUFBLEtBQTBCLE9BQWxDa0Isc0NBQXNDO0lBR3hDLElBQUlFLGFBQWFELE9BQU9GLHVCQUF1QjtJQUMvQyxJQUFJLENBQUNDLFFBQVFsQyw0QkFBNEIsRUFBRTtRQUN6Q29DLGNBQWM7SUFDaEI7SUFFQSxPQUFPO1FBQ0wsR0FBR3ZFLGNBQWNrQyxpQkFBaUJtQyxRQUFRO1FBQzFDRSxZQUFhLE1BQUdBLGFBQVc7UUFDM0J0QixXQUFXcUIsT0FBT3JCLFNBQVM7SUFDN0I7QUFDRjtBQU1PLFNBQVNuRCx3QkFDZG9DLGVBQXVCLEVBQ3ZCbUMsT0FFQztJQUVELE1BQU0sRUFBRXJDLGtCQUFrQixFQUFFLEdBQUdwQixxQkFDN0JzQixpQkFDQSxPQUNBO0lBRUYsTUFBTSxFQUFFc0MsV0FBVyxJQUFJLEVBQUUsR0FBR0g7SUFDNUIsSUFBSXJDLHVCQUF1QixLQUFLO1FBQzlCLElBQUl5QyxnQkFBZ0JELFdBQVcsT0FBTztRQUN0QyxPQUFPO1lBQ0xELFlBQWEsT0FBSUUsZ0JBQWM7UUFDakM7SUFDRjtJQUVBLE1BQU0sRUFBRUwsdUJBQXVCLEVBQUUsR0FBR1AsMEJBQ2xDM0IsaUJBQ0EsT0FDQSxPQUNBLE9BQ0E7SUFFRixJQUFJd0MsdUJBQXVCRixXQUFXLGVBQWU7SUFDckQsT0FBTztRQUNMRCxZQUFhLE1BQUdILDBCQUEwQk0sdUJBQXFCO0lBQ2pFO0FBQ0YiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcm91dGUtcmVnZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTkVYVF9JTlRFUkNFUFRJT05fTUFSS0VSX1BSRUZJWCxcbiAgTkVYVF9RVUVSWV9QQVJBTV9QUkVGSVgsXG59IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUyB9IGZyb20gJy4vaW50ZXJjZXB0aW9uLXJvdXRlcydcbmltcG9ydCB7IGVzY2FwZVN0cmluZ1JlZ2V4cCB9IGZyb20gJy4uLy4uL2VzY2FwZS1yZWdleHAnXG5pbXBvcnQgeyByZW1vdmVUcmFpbGluZ1NsYXNoIH0gZnJvbSAnLi9yZW1vdmUtdHJhaWxpbmctc2xhc2gnXG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXAge1xuICBwb3M6IG51bWJlclxuICByZXBlYXQ6IGJvb2xlYW5cbiAgb3B0aW9uYWw6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVJlZ2V4IHtcbiAgZ3JvdXBzOiB7IFtncm91cE5hbWU6IHN0cmluZ106IEdyb3VwIH1cbiAgcmU6IFJlZ0V4cFxufVxuXG50eXBlIEdldE5hbWVkUm91dGVSZWdleE9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHByZWZpeCB0aGUgcm91dGUga2V5cyB3aXRoIHRoZSBORVhUX0lOVEVSQ0VQVElPTl9NQVJLRVJfUFJFRklYXG4gICAqIG9yIE5FWFRfUVVFUllfUEFSQU1fUFJFRklYLiBUaGlzIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiBjcmVhdGluZyB0aGVcbiAgICogcm91dGVzLW1hbmlmZXN0IGR1cmluZyB0aGUgYnVpbGQuXG4gICAqL1xuICBwcmVmaXhSb3V0ZUtleXM6IGJvb2xlYW5cblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBzdWZmaXggaW4gdGhlIHJvdXRlIHJlZ2V4LiBUaGlzIG1lYW5zIHRoYXQgd2hlbiB5b3VcbiAgICogaGF2ZSBzb21ldGhpbmcgbGlrZSBgL1suLi5zbHVnXS5qc29uYCB0aGUgYC5qc29uYCBwYXJ0IHdpbGwgYmUgaW5jbHVkZWRcbiAgICogaW4gdGhlIHJlZ2V4LCB5aWVsZGluZyBgLyguKikuanNvbmAgYXMgdGhlIHJlZ2V4LlxuICAgKi9cbiAgaW5jbHVkZVN1ZmZpeD86IGJvb2xlYW5cblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBwcmVmaXggaW4gdGhlIHJvdXRlIHJlZ2V4LiBUaGlzIG1lYW5zIHRoYXQgd2hlbiB5b3VcbiAgICogaGF2ZSBzb21ldGhpbmcgbGlrZSBgL1suLi5zbHVnXS5qc29uYCB0aGUgYC9gIHBhcnQgd2lsbCBiZSBpbmNsdWRlZFxuICAgKiBpbiB0aGUgcmVnZXgsIHlpZWxkaW5nIGBeLyguKikuanNvbiRgIGFzIHRoZSByZWdleC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGludGVyY2VwdGlvbiBtYXJrZXJzIHdpbGwgYWxyZWFkeSBiZSBpbmNsdWRlZCB3aXRob3V0IHRoZSBuZWVkXG4gICAqL1xuICBpbmNsdWRlUHJlZml4PzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGV4Y2x1ZGUgdGhlIG9wdGlvbmFsIHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIHJvdXRlIHJlZ2V4LlxuICAgKi9cbiAgZXhjbHVkZU9wdGlvbmFsVHJhaWxpbmdTbGFzaD86IGJvb2xlYW5cblxuICAvKipcbiAgICogV2hldGhlciB0byBiYWNrdHJhY2sgZHVwbGljYXRlIGtleXMuIFRoaXMgaXMgb25seSByZWxldmFudCB3aGVuIGNyZWF0aW5nXG4gICAqIHRoZSByb3V0ZXMtbWFuaWZlc3QgZHVyaW5nIHRoZSBidWlsZC5cbiAgICovXG4gIGJhY2tyZWZlcmVuY2VEdXBsaWNhdGVLZXlzPzogYm9vbGVhblxufVxuXG50eXBlIEdldFJvdXRlUmVnZXhPcHRpb25zID0ge1xuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIGV4dHJhIHBhcnRzIGluIHRoZSByb3V0ZSByZWdleC4gVGhpcyBtZWFucyB0aGF0IHdoZW4geW91XG4gICAqIGhhdmUgc29tZXRoaW5nIGxpa2UgYC9bLi4uc2x1Z10uanNvbmAgdGhlIGAuanNvbmAgcGFydCB3aWxsIGJlIGluY2x1ZGVkXG4gICAqIGluIHRoZSByZWdleCwgeWllbGRpbmcgYC8oLiopLmpzb25gIGFzIHRoZSByZWdleC5cbiAgICovXG4gIGluY2x1ZGVTdWZmaXg/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgcHJlZml4IGluIHRoZSByb3V0ZSByZWdleC4gVGhpcyBtZWFucyB0aGF0IHdoZW4geW91XG4gICAqIGhhdmUgc29tZXRoaW5nIGxpa2UgYC9bLi4uc2x1Z10uanNvbmAgdGhlIGAvYCBwYXJ0IHdpbGwgYmUgaW5jbHVkZWRcbiAgICogaW4gdGhlIHJlZ2V4LCB5aWVsZGluZyBgXi8oLiopLmpzb24kYCBhcyB0aGUgcmVnZXguXG4gICAqXG4gICAqIE5vdGUgdGhhdCBpbnRlcmNlcHRpb24gbWFya2VycyB3aWxsIGFscmVhZHkgYmUgaW5jbHVkZWQgd2l0aG91dCB0aGUgbmVlZFxuICAgKiBvZiBhZGRpbmcgdGhpcyBvcHRpb24uXG4gICAqL1xuICBpbmNsdWRlUHJlZml4PzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGV4Y2x1ZGUgdGhlIG9wdGlvbmFsIHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIHJvdXRlIHJlZ2V4LlxuICAgKi9cbiAgZXhjbHVkZU9wdGlvbmFsVHJhaWxpbmdTbGFzaD86IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBSZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiB1c2VkIHRvIG1hdGNoIHJvdXRlIHBhcmFtZXRlcnMuXG4gKiBNYXRjaGVzIGJvdGggc2luZ2xlIHBhcmFtZXRlcnMgYW5kIHBhcmFtZXRlciBncm91cHMuXG4gKiBFeGFtcGxlczpcbiAqICAgLSBgW1suLi5zbHVnXV1gIG1hdGNoZXMgcGFyYW1ldGVyIGdyb3VwIHdpdGgga2V5ICdzbHVnJywgcmVwZWF0OiB0cnVlLCBvcHRpb25hbDogdHJ1ZVxuICogICAtIGBbLi4uc2x1Z11gIG1hdGNoZXMgcGFyYW1ldGVyIGdyb3VwIHdpdGgga2V5ICdzbHVnJywgcmVwZWF0OiB0cnVlLCBvcHRpb25hbDogZmFsc2VcbiAqICAgLSBgW1tmb29dXWAgbWF0Y2hlcyBwYXJhbWV0ZXIgd2l0aCBrZXkgJ2ZvbycsIHJlcGVhdDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlXG4gKiAgIC0gYFtiYXJdYCBtYXRjaGVzIHBhcmFtZXRlciB3aXRoIGtleSAnYmFyJywgcmVwZWF0OiBmYWxzZSwgb3B0aW9uYWw6IGZhbHNlXG4gKi9cbmNvbnN0IFBBUkFNRVRFUl9QQVRURVJOID0gL14oW15bXSopXFxbKCg/OlxcW1teXFxdXSpcXF0pfFteXFxdXSspXFxdKC4qKSQvXG5cbi8qKlxuICogUGFyc2VzIGEgZ2l2ZW4gcGFyYW1ldGVyIGZyb20gYSByb3V0ZSB0byBhIGRhdGEgc3RydWN0dXJlIHRoYXQgY2FuIGJlIHVzZWRcbiAqIHRvIGdlbmVyYXRlIHRoZSBwYXJhbWV0cml6ZWQgcm91dGUuXG4gKiBFeGFtcGxlczpcbiAqICAgLSBgW1suLi5zbHVnXV1gIC0+IGB7IGtleTogJ3NsdWcnLCByZXBlYXQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH1gXG4gKiAgIC0gYFsuLi5zbHVnXWAgLT4gYHsga2V5OiAnc2x1ZycsIHJlcGVhdDogdHJ1ZSwgb3B0aW9uYWw6IGZhbHNlIH1gXG4gKiAgIC0gYFtbZm9vXV1gIC0+IGB7IGtleTogJ2ZvbycsIHJlcGVhdDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlIH1gXG4gKiAgIC0gYFtiYXJdYCAtPiBgeyBrZXk6ICdiYXInLCByZXBlYXQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UgfWBcbiAqICAgLSBgZml6emAgLT4gYHsga2V5OiAnZml6eicsIHJlcGVhdDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSB9YFxuICogQHBhcmFtIHBhcmFtIC0gVGhlIHBhcmFtZXRlciB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgcGFyYW1ldGVyIGFzIGEgZGF0YSBzdHJ1Y3R1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmFtZXRlcihwYXJhbTogc3RyaW5nKSB7XG4gIGNvbnN0IG1hdGNoID0gcGFyYW0ubWF0Y2goUEFSQU1FVEVSX1BBVFRFUk4pXG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBwYXJzZU1hdGNoZWRQYXJhbWV0ZXIocGFyYW0pXG4gIH1cblxuICByZXR1cm4gcGFyc2VNYXRjaGVkUGFyYW1ldGVyKG1hdGNoWzJdKVxufVxuXG4vKipcbiAqIFBhcnNlcyBhIG1hdGNoZWQgcGFyYW1ldGVyIGZyb20gdGhlIFBBUkFNRVRFUl9QQVRURVJOIHJlZ2V4IHRvIGEgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBjYW4gYmUgdXNlZFxuICogdG8gZ2VuZXJhdGUgdGhlIHBhcmFtZXRyaXplZCByb3V0ZS5cbiAqIEV4YW1wbGVzOlxuICogICAtIGBbLi4uc2x1Z11gIC0+IGB7IGtleTogJ3NsdWcnLCByZXBlYXQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH1gXG4gKiAgIC0gYC4uLnNsdWdgIC0+IGB7IGtleTogJ3NsdWcnLCByZXBlYXQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZSB9YFxuICogICAtIGBbZm9vXWAgLT4gYHsga2V5OiAnZm9vJywgcmVwZWF0OiBmYWxzZSwgb3B0aW9uYWw6IHRydWUgfWBcbiAqICAgLSBgYmFyYCAtPiBgeyBrZXk6ICdiYXInLCByZXBlYXQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UgfWBcbiAqIEBwYXJhbSBwYXJhbSAtIFRoZSBtYXRjaGVkIHBhcmFtZXRlciB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgcGFyYW1ldGVyIGFzIGEgZGF0YSBzdHJ1Y3R1cmUuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTWF0Y2hlZFBhcmFtZXRlcihwYXJhbTogc3RyaW5nKSB7XG4gIGNvbnN0IG9wdGlvbmFsID0gcGFyYW0uc3RhcnRzV2l0aCgnWycpICYmIHBhcmFtLmVuZHNXaXRoKCddJylcbiAgaWYgKG9wdGlvbmFsKSB7XG4gICAgcGFyYW0gPSBwYXJhbS5zbGljZSgxLCAtMSlcbiAgfVxuICBjb25zdCByZXBlYXQgPSBwYXJhbS5zdGFydHNXaXRoKCcuLi4nKVxuICBpZiAocmVwZWF0KSB7XG4gICAgcGFyYW0gPSBwYXJhbS5zbGljZSgzKVxuICB9XG4gIHJldHVybiB7IGtleTogcGFyYW0sIHJlcGVhdCwgb3B0aW9uYWwgfVxufVxuXG5mdW5jdGlvbiBnZXRQYXJhbWV0cml6ZWRSb3V0ZShcbiAgcm91dGU6IHN0cmluZyxcbiAgaW5jbHVkZVN1ZmZpeDogYm9vbGVhbixcbiAgaW5jbHVkZVByZWZpeDogYm9vbGVhblxuKSB7XG4gIGNvbnN0IGdyb3VwczogeyBbZ3JvdXBOYW1lOiBzdHJpbmddOiBHcm91cCB9ID0ge31cbiAgbGV0IGdyb3VwSW5kZXggPSAxXG5cbiAgY29uc3Qgc2VnbWVudHM6IHN0cmluZ1tdID0gW11cbiAgZm9yIChjb25zdCBzZWdtZW50IG9mIHJlbW92ZVRyYWlsaW5nU2xhc2gocm91dGUpLnNsaWNlKDEpLnNwbGl0KCcvJykpIHtcbiAgICBjb25zdCBtYXJrZXJNYXRjaCA9IElOVEVSQ0VQVElPTl9ST1VURV9NQVJLRVJTLmZpbmQoKG0pID0+XG4gICAgICBzZWdtZW50LnN0YXJ0c1dpdGgobSlcbiAgICApXG4gICAgY29uc3QgcGFyYW1NYXRjaGVzID0gc2VnbWVudC5tYXRjaChQQVJBTUVURVJfUEFUVEVSTikgLy8gQ2hlY2sgZm9yIHBhcmFtZXRlcnNcblxuICAgIGlmIChtYXJrZXJNYXRjaCAmJiBwYXJhbU1hdGNoZXMgJiYgcGFyYW1NYXRjaGVzWzJdKSB7XG4gICAgICBjb25zdCB7IGtleSwgb3B0aW9uYWwsIHJlcGVhdCB9ID0gcGFyc2VNYXRjaGVkUGFyYW1ldGVyKHBhcmFtTWF0Y2hlc1syXSlcbiAgICAgIGdyb3Vwc1trZXldID0geyBwb3M6IGdyb3VwSW5kZXgrKywgcmVwZWF0LCBvcHRpb25hbCB9XG4gICAgICBzZWdtZW50cy5wdXNoKGAvJHtlc2NhcGVTdHJpbmdSZWdleHAobWFya2VyTWF0Y2gpfShbXi9dKz8pYClcbiAgICB9IGVsc2UgaWYgKHBhcmFtTWF0Y2hlcyAmJiBwYXJhbU1hdGNoZXNbMl0pIHtcbiAgICAgIGNvbnN0IHsga2V5LCByZXBlYXQsIG9wdGlvbmFsIH0gPSBwYXJzZU1hdGNoZWRQYXJhbWV0ZXIocGFyYW1NYXRjaGVzWzJdKVxuICAgICAgZ3JvdXBzW2tleV0gPSB7IHBvczogZ3JvdXBJbmRleCsrLCByZXBlYXQsIG9wdGlvbmFsIH1cblxuICAgICAgaWYgKGluY2x1ZGVQcmVmaXggJiYgcGFyYW1NYXRjaGVzWzFdKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goYC8ke2VzY2FwZVN0cmluZ1JlZ2V4cChwYXJhbU1hdGNoZXNbMV0pfWApXG4gICAgICB9XG5cbiAgICAgIGxldCBzID0gcmVwZWF0ID8gKG9wdGlvbmFsID8gJyg/Oi8oLis/KSk/JyA6ICcvKC4rPyknKSA6ICcvKFteL10rPyknXG5cbiAgICAgIC8vIFJlbW92ZSB0aGUgbGVhZGluZyBzbGFzaCBpZiBpbmNsdWRlUHJlZml4IGFscmVhZHkgYWRkZWQgaXQuXG4gICAgICBpZiAoaW5jbHVkZVByZWZpeCAmJiBwYXJhbU1hdGNoZXNbMV0pIHtcbiAgICAgICAgcyA9IHMuc3Vic3RyaW5nKDEpXG4gICAgICB9XG5cbiAgICAgIHNlZ21lbnRzLnB1c2gocylcbiAgICB9IGVsc2Uge1xuICAgICAgc2VnbWVudHMucHVzaChgLyR7ZXNjYXBlU3RyaW5nUmVnZXhwKHNlZ21lbnQpfWApXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUncyBhIHN1ZmZpeCwgYWRkIGl0IHRvIHRoZSBzZWdtZW50cyBpZiBpdCdzIGVuYWJsZWQuXG4gICAgaWYgKGluY2x1ZGVTdWZmaXggJiYgcGFyYW1NYXRjaGVzICYmIHBhcmFtTWF0Y2hlc1szXSkge1xuICAgICAgc2VnbWVudHMucHVzaChlc2NhcGVTdHJpbmdSZWdleHAocGFyYW1NYXRjaGVzWzNdKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhcmFtZXRlcml6ZWRSb3V0ZTogc2VnbWVudHMuam9pbignJyksXG4gICAgZ3JvdXBzLFxuICB9XG59XG5cbi8qKlxuICogRnJvbSBhIG5vcm1hbGl6ZWQgcm91dGUgdGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kXG4gKiBhIGNvcnJlc3BvbmRpbmcgZ3JvdXBzIG9iamVjdCBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHN0b3JlIG1hdGNoaW5nIGdyb3Vwc1xuICogZnJvbSB0aGUgcmVndWxhciBleHByZXNzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um91dGVSZWdleChcbiAgbm9ybWFsaXplZFJvdXRlOiBzdHJpbmcsXG4gIHtcbiAgICBpbmNsdWRlU3VmZml4ID0gZmFsc2UsXG4gICAgaW5jbHVkZVByZWZpeCA9IGZhbHNlLFxuICAgIGV4Y2x1ZGVPcHRpb25hbFRyYWlsaW5nU2xhc2ggPSBmYWxzZSxcbiAgfTogR2V0Um91dGVSZWdleE9wdGlvbnMgPSB7fVxuKTogUm91dGVSZWdleCB7XG4gIGNvbnN0IHsgcGFyYW1ldGVyaXplZFJvdXRlLCBncm91cHMgfSA9IGdldFBhcmFtZXRyaXplZFJvdXRlKFxuICAgIG5vcm1hbGl6ZWRSb3V0ZSxcbiAgICBpbmNsdWRlU3VmZml4LFxuICAgIGluY2x1ZGVQcmVmaXhcbiAgKVxuXG4gIGxldCByZSA9IHBhcmFtZXRlcml6ZWRSb3V0ZVxuICBpZiAoIWV4Y2x1ZGVPcHRpb25hbFRyYWlsaW5nU2xhc2gpIHtcbiAgICByZSArPSAnKD86Lyk/J1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZTogbmV3IFJlZ0V4cChgXiR7cmV9JGApLFxuICAgIGdyb3VwczogZ3JvdXBzLFxuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGEgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBtaW5pbWFsIHJvdXRlS2V5IHVzaW5nIG9ubHkgYS16IGFuZCBtaW5pbWFsXG4gKiBudW1iZXIgb2YgY2hhcmFjdGVycy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRHZXRTYWZlUm91dGVLZXkoKSB7XG4gIGxldCBpID0gMFxuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgbGV0IHJvdXRlS2V5ID0gJydcbiAgICBsZXQgaiA9ICsraVxuICAgIHdoaWxlIChqID4gMCkge1xuICAgICAgcm91dGVLZXkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg5NyArICgoaiAtIDEpICUgMjYpKVxuICAgICAgaiA9IE1hdGguZmxvb3IoKGogLSAxKSAvIDI2KVxuICAgIH1cbiAgICByZXR1cm4gcm91dGVLZXlcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTYWZlS2V5RnJvbVNlZ21lbnQoe1xuICBpbnRlcmNlcHRpb25NYXJrZXIsXG4gIGdldFNhZmVSb3V0ZUtleSxcbiAgc2VnbWVudCxcbiAgcm91dGVLZXlzLFxuICBrZXlQcmVmaXgsXG4gIGJhY2tyZWZlcmVuY2VEdXBsaWNhdGVLZXlzLFxufToge1xuICBpbnRlcmNlcHRpb25NYXJrZXI/OiBzdHJpbmdcbiAgZ2V0U2FmZVJvdXRlS2V5OiAoKSA9PiBzdHJpbmdcbiAgc2VnbWVudDogc3RyaW5nXG4gIHJvdXRlS2V5czogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICBrZXlQcmVmaXg/OiBzdHJpbmdcbiAgYmFja3JlZmVyZW5jZUR1cGxpY2F0ZUtleXM6IGJvb2xlYW5cbn0pIHtcbiAgY29uc3QgeyBrZXksIG9wdGlvbmFsLCByZXBlYXQgfSA9IHBhcnNlTWF0Y2hlZFBhcmFtZXRlcihzZWdtZW50KVxuXG4gIC8vIHJlcGxhY2UgYW55IG5vbi13b3JkIGNoYXJhY3RlcnMgc2luY2UgdGhleSBjYW4gYnJlYWtcbiAgLy8gdGhlIG5hbWVkIHJlZ2V4XG4gIGxldCBjbGVhbmVkS2V5ID0ga2V5LnJlcGxhY2UoL1xcVy9nLCAnJylcblxuICBpZiAoa2V5UHJlZml4KSB7XG4gICAgY2xlYW5lZEtleSA9IGAke2tleVByZWZpeH0ke2NsZWFuZWRLZXl9YFxuICB9XG4gIGxldCBpbnZhbGlkS2V5ID0gZmFsc2VcblxuICAvLyBjaGVjayBpZiB0aGUga2V5IGlzIHN0aWxsIGludmFsaWQgYW5kIGZhbGxiYWNrIHRvIHVzaW5nIGEga25vd25cbiAgLy8gc2FmZSBrZXlcbiAgaWYgKGNsZWFuZWRLZXkubGVuZ3RoID09PSAwIHx8IGNsZWFuZWRLZXkubGVuZ3RoID4gMzApIHtcbiAgICBpbnZhbGlkS2V5ID0gdHJ1ZVxuICB9XG4gIGlmICghaXNOYU4ocGFyc2VJbnQoY2xlYW5lZEtleS5zbGljZSgwLCAxKSkpKSB7XG4gICAgaW52YWxpZEtleSA9IHRydWVcbiAgfVxuXG4gIGlmIChpbnZhbGlkS2V5KSB7XG4gICAgY2xlYW5lZEtleSA9IGdldFNhZmVSb3V0ZUtleSgpXG4gIH1cblxuICBjb25zdCBkdXBsaWNhdGVLZXkgPSBjbGVhbmVkS2V5IGluIHJvdXRlS2V5c1xuXG4gIGlmIChrZXlQcmVmaXgpIHtcbiAgICByb3V0ZUtleXNbY2xlYW5lZEtleV0gPSBgJHtrZXlQcmVmaXh9JHtrZXl9YFxuICB9IGVsc2Uge1xuICAgIHJvdXRlS2V5c1tjbGVhbmVkS2V5XSA9IGtleVxuICB9XG5cbiAgLy8gaWYgdGhlIHNlZ21lbnQgaGFzIGFuIGludGVyY2VwdGlvbiBtYXJrZXIsIG1ha2Ugc3VyZSB0aGF0J3MgcGFydCBvZiB0aGUgcmVnZXggcGF0dGVyblxuICAvLyB0aGlzIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSByb3V0ZSB3aXRoIHRoZSBpbnRlcmNlcHRpb24gbWFya2VyIGRvZXNuJ3QgaW5jb3JyZWN0bHkgbWF0Y2hcbiAgLy8gdGhlIG5vbi1pbnRlcmNlcHRlZCByb3V0ZSAoaWUgL2FwcC8oLilbdXNlcm5hbWVdIHNob3VsZCBub3QgbWF0Y2ggL2FwcC9bdXNlcm5hbWVdKVxuICBjb25zdCBpbnRlcmNlcHRpb25QcmVmaXggPSBpbnRlcmNlcHRpb25NYXJrZXJcbiAgICA/IGVzY2FwZVN0cmluZ1JlZ2V4cChpbnRlcmNlcHRpb25NYXJrZXIpXG4gICAgOiAnJ1xuXG4gIGxldCBwYXR0ZXJuOiBzdHJpbmdcbiAgaWYgKGR1cGxpY2F0ZUtleSAmJiBiYWNrcmVmZXJlbmNlRHVwbGljYXRlS2V5cykge1xuICAgIC8vIFVzZSBhIGJhY2tyZWZlcmVuY2UgdG8gdGhlIGtleSB0byBlbnN1cmUgdGhhdCB0aGUga2V5IGlzIHRoZSBzYW1lIHZhbHVlXG4gICAgLy8gaW4gZWFjaCBvZiB0aGUgcGxhY2Vob2xkZXJzLlxuICAgIHBhdHRlcm4gPSBgXFxcXGs8JHtjbGVhbmVkS2V5fT5gXG4gIH0gZWxzZSBpZiAocmVwZWF0KSB7XG4gICAgcGF0dGVybiA9IGAoPzwke2NsZWFuZWRLZXl9Pi4rPylgXG4gIH0gZWxzZSB7XG4gICAgcGF0dGVybiA9IGAoPzwke2NsZWFuZWRLZXl9PlteL10rPylgXG4gIH1cblxuICByZXR1cm4gb3B0aW9uYWxcbiAgICA/IGAoPzovJHtpbnRlcmNlcHRpb25QcmVmaXh9JHtwYXR0ZXJufSk/YFxuICAgIDogYC8ke2ludGVyY2VwdGlvblByZWZpeH0ke3BhdHRlcm59YFxufVxuXG5mdW5jdGlvbiBnZXROYW1lZFBhcmFtZXRyaXplZFJvdXRlKFxuICByb3V0ZTogc3RyaW5nLFxuICBwcmVmaXhSb3V0ZUtleXM6IGJvb2xlYW4sXG4gIGluY2x1ZGVTdWZmaXg6IGJvb2xlYW4sXG4gIGluY2x1ZGVQcmVmaXg6IGJvb2xlYW4sXG4gIGJhY2tyZWZlcmVuY2VEdXBsaWNhdGVLZXlzOiBib29sZWFuXG4pIHtcbiAgY29uc3QgZ2V0U2FmZVJvdXRlS2V5ID0gYnVpbGRHZXRTYWZlUm91dGVLZXkoKVxuICBjb25zdCByb3V0ZUtleXM6IHsgW25hbWVkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9XG5cbiAgY29uc3Qgc2VnbWVudHM6IHN0cmluZ1tdID0gW11cbiAgZm9yIChjb25zdCBzZWdtZW50IG9mIHJlbW92ZVRyYWlsaW5nU2xhc2gocm91dGUpLnNsaWNlKDEpLnNwbGl0KCcvJykpIHtcbiAgICBjb25zdCBoYXNJbnRlcmNlcHRpb25NYXJrZXIgPSBJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUy5zb21lKChtKSA9PlxuICAgICAgc2VnbWVudC5zdGFydHNXaXRoKG0pXG4gICAgKVxuXG4gICAgY29uc3QgcGFyYW1NYXRjaGVzID0gc2VnbWVudC5tYXRjaChQQVJBTUVURVJfUEFUVEVSTikgLy8gQ2hlY2sgZm9yIHBhcmFtZXRlcnNcblxuICAgIGlmIChoYXNJbnRlcmNlcHRpb25NYXJrZXIgJiYgcGFyYW1NYXRjaGVzICYmIHBhcmFtTWF0Y2hlc1syXSkge1xuICAgICAgLy8gSWYgdGhlcmUncyBhbiBpbnRlcmNlcHRpb24gbWFya2VyLCBhZGQgaXQgdG8gdGhlIHNlZ21lbnRzLlxuICAgICAgc2VnbWVudHMucHVzaChcbiAgICAgICAgZ2V0U2FmZUtleUZyb21TZWdtZW50KHtcbiAgICAgICAgICBnZXRTYWZlUm91dGVLZXksXG4gICAgICAgICAgaW50ZXJjZXB0aW9uTWFya2VyOiBwYXJhbU1hdGNoZXNbMV0sXG4gICAgICAgICAgc2VnbWVudDogcGFyYW1NYXRjaGVzWzJdLFxuICAgICAgICAgIHJvdXRlS2V5cyxcbiAgICAgICAgICBrZXlQcmVmaXg6IHByZWZpeFJvdXRlS2V5c1xuICAgICAgICAgICAgPyBORVhUX0lOVEVSQ0VQVElPTl9NQVJLRVJfUFJFRklYXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBiYWNrcmVmZXJlbmNlRHVwbGljYXRlS2V5cyxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKHBhcmFtTWF0Y2hlcyAmJiBwYXJhbU1hdGNoZXNbMl0pIHtcbiAgICAgIC8vIElmIHRoZXJlJ3MgYSBwcmVmaXgsIGFkZCBpdCB0byB0aGUgc2VnbWVudHMgaWYgaXQncyBlbmFibGVkLlxuICAgICAgaWYgKGluY2x1ZGVQcmVmaXggJiYgcGFyYW1NYXRjaGVzWzFdKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goYC8ke2VzY2FwZVN0cmluZ1JlZ2V4cChwYXJhbU1hdGNoZXNbMV0pfWApXG4gICAgICB9XG5cbiAgICAgIGxldCBzID0gZ2V0U2FmZUtleUZyb21TZWdtZW50KHtcbiAgICAgICAgZ2V0U2FmZVJvdXRlS2V5LFxuICAgICAgICBzZWdtZW50OiBwYXJhbU1hdGNoZXNbMl0sXG4gICAgICAgIHJvdXRlS2V5cyxcbiAgICAgICAga2V5UHJlZml4OiBwcmVmaXhSb3V0ZUtleXMgPyBORVhUX1FVRVJZX1BBUkFNX1BSRUZJWCA6IHVuZGVmaW5lZCxcbiAgICAgICAgYmFja3JlZmVyZW5jZUR1cGxpY2F0ZUtleXMsXG4gICAgICB9KVxuXG4gICAgICAvLyBSZW1vdmUgdGhlIGxlYWRpbmcgc2xhc2ggaWYgaW5jbHVkZVByZWZpeCBhbHJlYWR5IGFkZGVkIGl0LlxuICAgICAgaWYgKGluY2x1ZGVQcmVmaXggJiYgcGFyYW1NYXRjaGVzWzFdKSB7XG4gICAgICAgIHMgPSBzLnN1YnN0cmluZygxKVxuICAgICAgfVxuXG4gICAgICBzZWdtZW50cy5wdXNoKHMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZ21lbnRzLnB1c2goYC8ke2VzY2FwZVN0cmluZ1JlZ2V4cChzZWdtZW50KX1gKVxuICAgIH1cblxuICAgIC8vIElmIHRoZXJlJ3MgYSBzdWZmaXgsIGFkZCBpdCB0byB0aGUgc2VnbWVudHMgaWYgaXQncyBlbmFibGVkLlxuICAgIGlmIChpbmNsdWRlU3VmZml4ICYmIHBhcmFtTWF0Y2hlcyAmJiBwYXJhbU1hdGNoZXNbM10pIHtcbiAgICAgIHNlZ21lbnRzLnB1c2goZXNjYXBlU3RyaW5nUmVnZXhwKHBhcmFtTWF0Y2hlc1szXSkpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lZFBhcmFtZXRlcml6ZWRSb3V0ZTogc2VnbWVudHMuam9pbignJyksXG4gICAgcm91dGVLZXlzLFxuICB9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBleHRlbmRzIGBnZXRSb3V0ZVJlZ2V4YCBnZW5lcmF0aW5nIGFsc28gYSBuYW1lZCByZWdleHAgd2hlcmVcbiAqIGVhY2ggZ3JvdXAgaXMgbmFtZWQgYWxvbmcgd2l0aCBhIHJvdXRlS2V5cyBvYmplY3QgdGhhdCBpbmRleGVzIHRoZSBhc3NpZ25lZFxuICogbmFtZWQgZ3JvdXAgd2l0aCBpdHMgY29ycmVzcG9uZGluZyBrZXkuIFdoZW4gdGhlIHJvdXRlS2V5cyBuZWVkIHRvIGJlXG4gKiBwcmVmaXhlZCB0byB1bmlxdWVseSBpZGVudGlmeSBpbnRlcm5hbGx5IHRoZSBcInByZWZpeFJvdXRlS2V5XCIgYXJnIHNob3VsZFxuICogYmUgXCJ0cnVlXCIgY3VycmVudGx5IHRoaXMgaXMgb25seSB0aGUgY2FzZSB3aGVuIGNyZWF0aW5nIHRoZSByb3V0ZXMtbWFuaWZlc3RcbiAqIGR1cmluZyB0aGUgYnVpbGRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVkUm91dGVSZWdleChcbiAgbm9ybWFsaXplZFJvdXRlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IEdldE5hbWVkUm91dGVSZWdleE9wdGlvbnNcbikge1xuICBjb25zdCByZXN1bHQgPSBnZXROYW1lZFBhcmFtZXRyaXplZFJvdXRlKFxuICAgIG5vcm1hbGl6ZWRSb3V0ZSxcbiAgICBvcHRpb25zLnByZWZpeFJvdXRlS2V5cyxcbiAgICBvcHRpb25zLmluY2x1ZGVTdWZmaXggPz8gZmFsc2UsXG4gICAgb3B0aW9ucy5pbmNsdWRlUHJlZml4ID8/IGZhbHNlLFxuICAgIG9wdGlvbnMuYmFja3JlZmVyZW5jZUR1cGxpY2F0ZUtleXMgPz8gZmFsc2VcbiAgKVxuXG4gIGxldCBuYW1lZFJlZ2V4ID0gcmVzdWx0Lm5hbWVkUGFyYW1ldGVyaXplZFJvdXRlXG4gIGlmICghb3B0aW9ucy5leGNsdWRlT3B0aW9uYWxUcmFpbGluZ1NsYXNoKSB7XG4gICAgbmFtZWRSZWdleCArPSAnKD86Lyk/J1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5nZXRSb3V0ZVJlZ2V4KG5vcm1hbGl6ZWRSb3V0ZSwgb3B0aW9ucyksXG4gICAgbmFtZWRSZWdleDogYF4ke25hbWVkUmVnZXh9JGAsXG4gICAgcm91dGVLZXlzOiByZXN1bHQucm91dGVLZXlzLFxuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgbmFtZWQgcmVnZXhwLlxuICogVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2luZyBmb3IgYnVpbGQgdGltZSBvbmx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZWRNaWRkbGV3YXJlUmVnZXgoXG4gIG5vcm1hbGl6ZWRSb3V0ZTogc3RyaW5nLFxuICBvcHRpb25zOiB7XG4gICAgY2F0Y2hBbGw/OiBib29sZWFuXG4gIH1cbikge1xuICBjb25zdCB7IHBhcmFtZXRlcml6ZWRSb3V0ZSB9ID0gZ2V0UGFyYW1ldHJpemVkUm91dGUoXG4gICAgbm9ybWFsaXplZFJvdXRlLFxuICAgIGZhbHNlLFxuICAgIGZhbHNlXG4gIClcbiAgY29uc3QgeyBjYXRjaEFsbCA9IHRydWUgfSA9IG9wdGlvbnNcbiAgaWYgKHBhcmFtZXRlcml6ZWRSb3V0ZSA9PT0gJy8nKSB7XG4gICAgbGV0IGNhdGNoQWxsUmVnZXggPSBjYXRjaEFsbCA/ICcuKicgOiAnJ1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lZFJlZ2V4OiBgXi8ke2NhdGNoQWxsUmVnZXh9JGAsXG4gICAgfVxuICB9XG5cbiAgY29uc3QgeyBuYW1lZFBhcmFtZXRlcml6ZWRSb3V0ZSB9ID0gZ2V0TmFtZWRQYXJhbWV0cml6ZWRSb3V0ZShcbiAgICBub3JtYWxpemVkUm91dGUsXG4gICAgZmFsc2UsXG4gICAgZmFsc2UsXG4gICAgZmFsc2UsXG4gICAgZmFsc2VcbiAgKVxuICBsZXQgY2F0Y2hBbGxHcm91cGVkUmVnZXggPSBjYXRjaEFsbCA/ICcoPzooLy4qKT8pJyA6ICcnXG4gIHJldHVybiB7XG4gICAgbmFtZWRSZWdleDogYF4ke25hbWVkUGFyYW1ldGVyaXplZFJvdXRlfSR7Y2F0Y2hBbGxHcm91cGVkUmVnZXh9JGAsXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJnZXROYW1lZE1pZGRsZXdhcmVSZWdleCIsImdldE5hbWVkUm91dGVSZWdleCIsImdldFJvdXRlUmVnZXgiLCJwYXJzZVBhcmFtZXRlciIsIlBBUkFNRVRFUl9QQVRURVJOIiwicGFyYW0iLCJtYXRjaCIsInBhcnNlTWF0Y2hlZFBhcmFtZXRlciIsIm9wdGlvbmFsIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwic2xpY2UiLCJyZXBlYXQiLCJrZXkiLCJnZXRQYXJhbWV0cml6ZWRSb3V0ZSIsInJvdXRlIiwiaW5jbHVkZVN1ZmZpeCIsImluY2x1ZGVQcmVmaXgiLCJncm91cHMiLCJncm91cEluZGV4Iiwic2VnbWVudHMiLCJzZWdtZW50IiwicmVtb3ZlVHJhaWxpbmdTbGFzaCIsInNwbGl0IiwibWFya2VyTWF0Y2giLCJJTlRFUkNFUFRJT05fUk9VVEVfTUFSS0VSUyIsImZpbmQiLCJtIiwicGFyYW1NYXRjaGVzIiwicG9zIiwicHVzaCIsImVzY2FwZVN0cmluZ1JlZ2V4cCIsInMiLCJzdWJzdHJpbmciLCJwYXJhbWV0ZXJpemVkUm91dGUiLCJqb2luIiwibm9ybWFsaXplZFJvdXRlIiwiZXhjbHVkZU9wdGlvbmFsVHJhaWxpbmdTbGFzaCIsInJlIiwiUmVnRXhwIiwiYnVpbGRHZXRTYWZlUm91dGVLZXkiLCJpIiwicm91dGVLZXkiLCJqIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiTWF0aCIsImZsb29yIiwiZ2V0U2FmZUtleUZyb21TZWdtZW50IiwiaW50ZXJjZXB0aW9uTWFya2VyIiwiZ2V0U2FmZVJvdXRlS2V5Iiwicm91dGVLZXlzIiwia2V5UHJlZml4IiwiYmFja3JlZmVyZW5jZUR1cGxpY2F0ZUtleXMiLCJjbGVhbmVkS2V5IiwicmVwbGFjZSIsImludmFsaWRLZXkiLCJsZW5ndGgiLCJpc05hTiIsInBhcnNlSW50IiwiZHVwbGljYXRlS2V5IiwiaW50ZXJjZXB0aW9uUHJlZml4IiwicGF0dGVybiIsImdldE5hbWVkUGFyYW1ldHJpemVkUm91dGUiLCJwcmVmaXhSb3V0ZUtleXMiLCJoYXNJbnRlcmNlcHRpb25NYXJrZXIiLCJzb21lIiwiTkVYVF9JTlRFUkNFUFRJT05fTUFSS0VSX1BSRUZJWCIsInVuZGVmaW5lZCIsIk5FWFRfUVVFUllfUEFSQU1fUFJFRklYIiwibmFtZWRQYXJhbWV0ZXJpemVkUm91dGUiLCJvcHRpb25zIiwicmVzdWx0IiwibmFtZWRSZWdleCIsImNhdGNoQWxsIiwiY2F0Y2hBbGxSZWdleCIsImNhdGNoQWxsR3JvdXBlZFJlZ2V4Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/route-regex.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/sorted-routes.js":
/*!*********************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/sorted-routes.js ***!
  \*********************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    getSortedRouteObjects: function() {\n        return getSortedRouteObjects;\n    },\n    getSortedRoutes: function() {\n        return getSortedRoutes;\n    }\n});\nclass UrlNode {\n    insert(urlPath) {\n        this._insert(urlPath.split('/').filter(Boolean), [], false);\n    }\n    smoosh() {\n        return this._smoosh();\n    }\n    _smoosh(prefix) {\n        if (prefix === void 0) prefix = '/';\n        const childrenPaths = [\n            ...this.children.keys()\n        ].sort();\n        if (this.slugName !== null) {\n            childrenPaths.splice(childrenPaths.indexOf('[]'), 1);\n        }\n        if (this.restSlugName !== null) {\n            childrenPaths.splice(childrenPaths.indexOf('[...]'), 1);\n        }\n        if (this.optionalRestSlugName !== null) {\n            childrenPaths.splice(childrenPaths.indexOf('[[...]]'), 1);\n        }\n        const routes = childrenPaths.map((c)=>this.children.get(c)._smoosh(\"\" + prefix + c + \"/\")).reduce((prev, curr)=>[\n                ...prev,\n                ...curr\n            ], []);\n        if (this.slugName !== null) {\n            routes.push(...this.children.get('[]')._smoosh(prefix + \"[\" + this.slugName + \"]/\"));\n        }\n        if (!this.placeholder) {\n            const r = prefix === '/' ? '/' : prefix.slice(0, -1);\n            if (this.optionalRestSlugName != null) {\n                throw Object.defineProperty(new Error('You cannot define a route with the same specificity as a optional catch-all route (\"' + r + '\" and \"' + r + \"[[...\" + this.optionalRestSlugName + ']]\").'), \"__NEXT_ERROR_CODE\", {\n                    value: \"E458\",\n                    enumerable: false,\n                    configurable: true\n                });\n            }\n            routes.unshift(r);\n        }\n        if (this.restSlugName !== null) {\n            routes.push(...this.children.get('[...]')._smoosh(prefix + \"[...\" + this.restSlugName + \"]/\"));\n        }\n        if (this.optionalRestSlugName !== null) {\n            routes.push(...this.children.get('[[...]]')._smoosh(prefix + \"[[...\" + this.optionalRestSlugName + \"]]/\"));\n        }\n        return routes;\n    }\n    _insert(urlPaths, slugNames, isCatchAll) {\n        if (urlPaths.length === 0) {\n            this.placeholder = false;\n            return;\n        }\n        if (isCatchAll) {\n            throw Object.defineProperty(new Error(\"Catch-all must be the last part of the URL.\"), \"__NEXT_ERROR_CODE\", {\n                value: \"E392\",\n                enumerable: false,\n                configurable: true\n            });\n        }\n        // The next segment in the urlPaths list\n        let nextSegment = urlPaths[0];\n        // Check if the segment matches `[something]`\n        if (nextSegment.startsWith('[') && nextSegment.endsWith(']')) {\n            // Strip `[` and `]`, leaving only `something`\n            let segmentName = nextSegment.slice(1, -1);\n            let isOptional = false;\n            if (segmentName.startsWith('[') && segmentName.endsWith(']')) {\n                // Strip optional `[` and `]`, leaving only `something`\n                segmentName = segmentName.slice(1, -1);\n                isOptional = true;\n            }\n            if (segmentName.startsWith('…')) {\n                throw Object.defineProperty(new Error(\"Detected a three-dot character ('…') at ('\" + segmentName + \"'). Did you mean ('...')?\"), \"__NEXT_ERROR_CODE\", {\n                    value: \"E147\",\n                    enumerable: false,\n                    configurable: true\n                });\n            }\n            if (segmentName.startsWith('...')) {\n                // Strip `...`, leaving only `something`\n                segmentName = segmentName.substring(3);\n                isCatchAll = true;\n            }\n            if (segmentName.startsWith('[') || segmentName.endsWith(']')) {\n                throw Object.defineProperty(new Error(\"Segment names may not start or end with extra brackets ('\" + segmentName + \"').\"), \"__NEXT_ERROR_CODE\", {\n                    value: \"E421\",\n                    enumerable: false,\n                    configurable: true\n                });\n            }\n            if (segmentName.startsWith('.')) {\n                throw Object.defineProperty(new Error(\"Segment names may not start with erroneous periods ('\" + segmentName + \"').\"), \"__NEXT_ERROR_CODE\", {\n                    value: \"E288\",\n                    enumerable: false,\n                    configurable: true\n                });\n            }\n            function handleSlug(previousSlug, nextSlug) {\n                if (previousSlug !== null) {\n                    // If the specific segment already has a slug but the slug is not `something`\n                    // This prevents collisions like:\n                    // pages/[post]/index.js\n                    // pages/[id]/index.js\n                    // Because currently multiple dynamic params on the same segment level are not supported\n                    if (previousSlug !== nextSlug) {\n                        // TODO: This error seems to be confusing for users, needs an error link, the description can be based on above comment.\n                        throw Object.defineProperty(new Error(\"You cannot use different slug names for the same dynamic path ('\" + previousSlug + \"' !== '\" + nextSlug + \"').\"), \"__NEXT_ERROR_CODE\", {\n                            value: \"E337\",\n                            enumerable: false,\n                            configurable: true\n                        });\n                    }\n                }\n                slugNames.forEach((slug)=>{\n                    if (slug === nextSlug) {\n                        throw Object.defineProperty(new Error('You cannot have the same slug name \"' + nextSlug + '\" repeat within a single dynamic path'), \"__NEXT_ERROR_CODE\", {\n                            value: \"E247\",\n                            enumerable: false,\n                            configurable: true\n                        });\n                    }\n                    if (slug.replace(/\\W/g, '') === nextSegment.replace(/\\W/g, '')) {\n                        throw Object.defineProperty(new Error('You cannot have the slug names \"' + slug + '\" and \"' + nextSlug + '\" differ only by non-word symbols within a single dynamic path'), \"__NEXT_ERROR_CODE\", {\n                            value: \"E499\",\n                            enumerable: false,\n                            configurable: true\n                        });\n                    }\n                });\n                slugNames.push(nextSlug);\n            }\n            if (isCatchAll) {\n                if (isOptional) {\n                    if (this.restSlugName != null) {\n                        throw Object.defineProperty(new Error('You cannot use both an required and optional catch-all route at the same level (\"[...' + this.restSlugName + ']\" and \"' + urlPaths[0] + '\" ).'), \"__NEXT_ERROR_CODE\", {\n                            value: \"E299\",\n                            enumerable: false,\n                            configurable: true\n                        });\n                    }\n                    handleSlug(this.optionalRestSlugName, segmentName);\n                    // slugName is kept as it can only be one particular slugName\n                    this.optionalRestSlugName = segmentName;\n                    // nextSegment is overwritten to [[...]] so that it can later be sorted specifically\n                    nextSegment = '[[...]]';\n                } else {\n                    if (this.optionalRestSlugName != null) {\n                        throw Object.defineProperty(new Error('You cannot use both an optional and required catch-all route at the same level (\"[[...' + this.optionalRestSlugName + ']]\" and \"' + urlPaths[0] + '\").'), \"__NEXT_ERROR_CODE\", {\n                            value: \"E300\",\n                            enumerable: false,\n                            configurable: true\n                        });\n                    }\n                    handleSlug(this.restSlugName, segmentName);\n                    // slugName is kept as it can only be one particular slugName\n                    this.restSlugName = segmentName;\n                    // nextSegment is overwritten to [...] so that it can later be sorted specifically\n                    nextSegment = '[...]';\n                }\n            } else {\n                if (isOptional) {\n                    throw Object.defineProperty(new Error('Optional route parameters are not yet supported (\"' + urlPaths[0] + '\").'), \"__NEXT_ERROR_CODE\", {\n                        value: \"E435\",\n                        enumerable: false,\n                        configurable: true\n                    });\n                }\n                handleSlug(this.slugName, segmentName);\n                // slugName is kept as it can only be one particular slugName\n                this.slugName = segmentName;\n                // nextSegment is overwritten to [] so that it can later be sorted specifically\n                nextSegment = '[]';\n            }\n        }\n        // If this UrlNode doesn't have the nextSegment yet we create a new child UrlNode\n        if (!this.children.has(nextSegment)) {\n            this.children.set(nextSegment, new UrlNode());\n        }\n        this.children.get(nextSegment)._insert(urlPaths.slice(1), slugNames, isCatchAll);\n    }\n    constructor(){\n        this.placeholder = true;\n        this.children = new Map();\n        this.slugName = null;\n        this.restSlugName = null;\n        this.optionalRestSlugName = null;\n    }\n}\nfunction getSortedRoutes(normalizedPages) {\n    // First the UrlNode is created, and every UrlNode can have only 1 dynamic segment\n    // Eg you can't have pages/[post]/abc.js and pages/[hello]/something-else.js\n    // Only 1 dynamic segment per nesting level\n    // So in the case that is test/integration/dynamic-routing it'll be this:\n    // pages/[post]/comments.js\n    // pages/blog/[post]/comment/[id].js\n    // Both are fine because `pages/[post]` and `pages/blog` are on the same level\n    // So in this case `UrlNode` created here has `this.slugName === 'post'`\n    // And since your PR passed through `slugName` as an array basically it'd including it in too many possibilities\n    // Instead what has to be passed through is the upwards path's dynamic names\n    const root = new UrlNode();\n    // Here the `root` gets injected multiple paths, and insert will break them up into sublevels\n    normalizedPages.forEach((pagePath)=>root.insert(pagePath));\n    // Smoosh will then sort those sublevels up to the point where you get the correct route definition priority\n    return root.smoosh();\n}\nfunction getSortedRouteObjects(objects, getter) {\n    // We're assuming here that all the pathnames are unique, that way we can\n    // sort the list and use the index as the key.\n    const indexes = {};\n    const pathnames = [];\n    for(let i = 0; i < objects.length; i++){\n        const pathname = getter(objects[i]);\n        indexes[pathname] = i;\n        pathnames[i] = pathname;\n    }\n    // Sort the pathnames.\n    const sorted = getSortedRoutes(pathnames);\n    // Map the sorted pathnames back to the original objects using the new sorted\n    // index.\n    return sorted.map((pathname)=>objects[indexes[pathname]]);\n} //# sourceMappingURL=sorted-routes.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9zb3J0ZWQtcm91dGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQWlPZ0JBLHFCQUFxQjtlQUFyQkE7O0lBdEJBQyxlQUFlO2VBQWZBOzs7QUEzTWhCLE1BQU1DO0lBT0pDLE9BQU9DLE9BQWUsRUFBUTtRQUM1QixJQUFJLENBQUNDLE9BQU8sQ0FBQ0QsUUFBUUUsS0FBSyxDQUFDLEtBQUtDLE1BQU0sQ0FBQ0MsVUFBVSxFQUFFLEVBQUU7SUFDdkQ7SUFFQUMsU0FBbUI7UUFDakIsT0FBTyxJQUFJLENBQUNDLE9BQU87SUFDckI7SUFFUUEsUUFBUUMsTUFBb0IsRUFBWTtRQUFoQ0EsSUFBQUEsV0FBQUEsS0FBQUEsR0FBQUEsU0FBaUI7UUFDL0IsTUFBTUMsZ0JBQWdCO2VBQUksSUFBSSxDQUFDQyxRQUFRLENBQUNDLElBQUk7U0FBRyxDQUFDQyxJQUFJO1FBQ3BELElBQUksSUFBSSxDQUFDQyxRQUFRLEtBQUssTUFBTTtZQUMxQkosY0FBY0ssTUFBTSxDQUFDTCxjQUFjTSxPQUFPLENBQUMsT0FBTztRQUNwRDtRQUNBLElBQUksSUFBSSxDQUFDQyxZQUFZLEtBQUssTUFBTTtZQUM5QlAsY0FBY0ssTUFBTSxDQUFDTCxjQUFjTSxPQUFPLENBQUMsVUFBVTtRQUN2RDtRQUNBLElBQUksSUFBSSxDQUFDRSxvQkFBb0IsS0FBSyxNQUFNO1lBQ3RDUixjQUFjSyxNQUFNLENBQUNMLGNBQWNNLE9BQU8sQ0FBQyxZQUFZO1FBQ3pEO1FBRUEsTUFBTUcsU0FBU1QsY0FDWlUsR0FBRyxDQUFDLENBQUNDLElBQU0sSUFBSSxDQUFDVixRQUFRLENBQUNXLEdBQUcsQ0FBQ0QsR0FBSWIsT0FBTyxDQUFFLEtBQUVDLFNBQVNZLElBQUUsTUFDdkRFLE1BQU0sQ0FBQyxDQUFDQyxNQUFNQyxPQUFTO21CQUFJRDttQkFBU0M7YUFBSyxFQUFFLEVBQUU7UUFFaEQsSUFBSSxJQUFJLENBQUNYLFFBQVEsS0FBSyxNQUFNO1lBQzFCSyxPQUFPTyxJQUFJLElBQ04sSUFBSSxDQUFDZixRQUFRLENBQUNXLEdBQUcsQ0FBQyxNQUFPZCxPQUFPLENBQUlDLFNBQU8sTUFBRyxJQUFJLENBQUNLLFFBQVEsR0FBQztRQUVuRTtRQUVBLElBQUksQ0FBQyxJQUFJLENBQUNhLFdBQVcsRUFBRTtZQUNyQixNQUFNQyxJQUFJbkIsV0FBVyxNQUFNLE1BQU1BLE9BQU9vQixLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ2xELElBQUksSUFBSSxDQUFDWCxvQkFBb0IsSUFBSSxNQUFNO2dCQUNyQyxNQUFNLHFCQUVMLENBRkssSUFBSVksTUFDUCx5RkFBc0ZGLElBQUUsWUFBU0EsSUFBRSxVQUFPLElBQUksQ0FBQ1Ysb0JBQW9CLEdBQUMsVUFEakk7MkJBQUE7Z0NBQUE7a0NBQUE7Z0JBRU47WUFDRjtZQUVBQyxPQUFPWSxPQUFPLENBQUNIO1FBQ2pCO1FBRUEsSUFBSSxJQUFJLENBQUNYLFlBQVksS0FBSyxNQUFNO1lBQzlCRSxPQUFPTyxJQUFJLElBQ04sSUFBSSxDQUFDZixRQUFRLENBQ2JXLEdBQUcsQ0FBQyxTQUNKZCxPQUFPLENBQUlDLFNBQU8sU0FBTSxJQUFJLENBQUNRLFlBQVksR0FBQztRQUVqRDtRQUVBLElBQUksSUFBSSxDQUFDQyxvQkFBb0IsS0FBSyxNQUFNO1lBQ3RDQyxPQUFPTyxJQUFJLElBQ04sSUFBSSxDQUFDZixRQUFRLENBQ2JXLEdBQUcsQ0FBQyxXQUNKZCxPQUFPLENBQUlDLFNBQU8sVUFBTyxJQUFJLENBQUNTLG9CQUFvQixHQUFDO1FBRTFEO1FBRUEsT0FBT0M7SUFDVDtJQUVRaEIsUUFDTjZCLFFBQWtCLEVBQ2xCQyxTQUFtQixFQUNuQkMsVUFBbUIsRUFDYjtRQUNOLElBQUlGLFNBQVNHLE1BQU0sS0FBSyxHQUFHO1lBQ3pCLElBQUksQ0FBQ1IsV0FBVyxHQUFHO1lBQ25CO1FBQ0Y7UUFFQSxJQUFJTyxZQUFZO1lBQ2QsTUFBTSxxQkFBd0QsQ0FBeEQsSUFBSUosTUFBTyxnREFBWDt1QkFBQTs0QkFBQTs4QkFBQTtZQUF1RDtRQUMvRDtRQUVBLHdDQUF3QztRQUN4QyxJQUFJTSxjQUFjSixRQUFRLENBQUMsRUFBRTtRQUU3Qiw2Q0FBNkM7UUFDN0MsSUFBSUksWUFBWUMsVUFBVSxDQUFDLFFBQVFELFlBQVlFLFFBQVEsQ0FBQyxNQUFNO1lBQzVELDhDQUE4QztZQUM5QyxJQUFJQyxjQUFjSCxZQUFZUCxLQUFLLENBQUMsR0FBRyxDQUFDO1lBRXhDLElBQUlXLGFBQWE7WUFDakIsSUFBSUQsWUFBWUYsVUFBVSxDQUFDLFFBQVFFLFlBQVlELFFBQVEsQ0FBQyxNQUFNO2dCQUM1RCx1REFBdUQ7Z0JBQ3ZEQyxjQUFjQSxZQUFZVixLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUNwQ1csYUFBYTtZQUNmO1lBRUEsSUFBSUQsWUFBWUYsVUFBVSxDQUFDLE1BQU07Z0JBQy9CLE1BQU0scUJBRUwsQ0FGSyxJQUFJUCxNQUNQLCtDQUE0Q1MsY0FBWSw4QkFEckQ7MkJBQUE7Z0NBQUE7a0NBQUE7Z0JBRU47WUFDRjtZQUVBLElBQUlBLFlBQVlGLFVBQVUsQ0FBQyxRQUFRO2dCQUNqQyx3Q0FBd0M7Z0JBQ3hDRSxjQUFjQSxZQUFZRSxTQUFTLENBQUM7Z0JBQ3BDUCxhQUFhO1lBQ2Y7WUFFQSxJQUFJSyxZQUFZRixVQUFVLENBQUMsUUFBUUUsWUFBWUQsUUFBUSxDQUFDLE1BQU07Z0JBQzVELE1BQU0scUJBRUwsQ0FGSyxJQUFJUixNQUNQLDhEQUEyRFMsY0FBWSxRQURwRTsyQkFBQTtnQ0FBQTtrQ0FBQTtnQkFFTjtZQUNGO1lBRUEsSUFBSUEsWUFBWUYsVUFBVSxDQUFDLE1BQU07Z0JBQy9CLE1BQU0scUJBRUwsQ0FGSyxJQUFJUCxNQUNQLDBEQUF1RFMsY0FBWSxRQURoRTsyQkFBQTtnQ0FBQTtrQ0FBQTtnQkFFTjtZQUNGO1lBRUEsU0FBU0csV0FBV0MsWUFBMkIsRUFBRUMsUUFBZ0I7Z0JBQy9ELElBQUlELGlCQUFpQixNQUFNO29CQUN6Qiw2RUFBNkU7b0JBQzdFLGlDQUFpQztvQkFDakMsd0JBQXdCO29CQUN4QixzQkFBc0I7b0JBQ3RCLHdGQUF3RjtvQkFDeEYsSUFBSUEsaUJBQWlCQyxVQUFVO3dCQUM3Qix3SEFBd0g7d0JBQ3hILE1BQU0scUJBRUwsQ0FGSyxJQUFJZCxNQUNQLHFFQUFrRWEsZUFBYSxZQUFTQyxXQUFTLFFBRDlGO21DQUFBO3dDQUFBOzBDQUFBO3dCQUVOO29CQUNGO2dCQUNGO2dCQUVBWCxVQUFVWSxPQUFPLENBQUMsQ0FBQ0M7b0JBQ2pCLElBQUlBLFNBQVNGLFVBQVU7d0JBQ3JCLE1BQU0scUJBRUwsQ0FGSyxJQUFJZCxNQUNQLHlDQUFzQ2MsV0FBUywwQ0FENUM7bUNBQUE7d0NBQUE7MENBQUE7d0JBRU47b0JBQ0Y7b0JBRUEsSUFBSUUsS0FBS0MsT0FBTyxDQUFDLE9BQU8sUUFBUVgsWUFBWVcsT0FBTyxDQUFDLE9BQU8sS0FBSzt3QkFDOUQsTUFBTSxxQkFFTCxDQUZLLElBQUlqQixNQUNQLHFDQUFrQ2dCLE9BQUssWUFBU0YsV0FBUyxtRUFEdEQ7bUNBQUE7d0NBQUE7MENBQUE7d0JBRU47b0JBQ0Y7Z0JBQ0Y7Z0JBRUFYLFVBQVVQLElBQUksQ0FBQ2tCO1lBQ2pCO1lBRUEsSUFBSVYsWUFBWTtnQkFDZCxJQUFJTSxZQUFZO29CQUNkLElBQUksSUFBSSxDQUFDdkIsWUFBWSxJQUFJLE1BQU07d0JBQzdCLE1BQU0scUJBRUwsQ0FGSyxJQUFJYSxNQUNQLDBGQUF1RixJQUFJLENBQUNiLFlBQVksR0FBQyxhQUFVZSxRQUFRLENBQUMsRUFBRSxHQUFDLFNBRDVIO21DQUFBO3dDQUFBOzBDQUFBO3dCQUVOO29CQUNGO29CQUVBVSxXQUFXLElBQUksQ0FBQ3hCLG9CQUFvQixFQUFFcUI7b0JBQ3RDLDZEQUE2RDtvQkFDN0QsSUFBSSxDQUFDckIsb0JBQW9CLEdBQUdxQjtvQkFDNUIsb0ZBQW9GO29CQUNwRkgsY0FBYztnQkFDaEIsT0FBTztvQkFDTCxJQUFJLElBQUksQ0FBQ2xCLG9CQUFvQixJQUFJLE1BQU07d0JBQ3JDLE1BQU0scUJBRUwsQ0FGSyxJQUFJWSxNQUNQLDJGQUF3RixJQUFJLENBQUNaLG9CQUFvQixHQUFDLGNBQVdjLFFBQVEsQ0FBQyxFQUFFLEdBQUMsUUFEdEk7bUNBQUE7d0NBQUE7MENBQUE7d0JBRU47b0JBQ0Y7b0JBRUFVLFdBQVcsSUFBSSxDQUFDekIsWUFBWSxFQUFFc0I7b0JBQzlCLDZEQUE2RDtvQkFDN0QsSUFBSSxDQUFDdEIsWUFBWSxHQUFHc0I7b0JBQ3BCLGtGQUFrRjtvQkFDbEZILGNBQWM7Z0JBQ2hCO1lBQ0YsT0FBTztnQkFDTCxJQUFJSSxZQUFZO29CQUNkLE1BQU0scUJBRUwsQ0FGSyxJQUFJVixNQUNQLHVEQUFvREUsUUFBUSxDQUFDLEVBQUUsR0FBQyxRQUQ3RDsrQkFBQTtvQ0FBQTtzQ0FBQTtvQkFFTjtnQkFDRjtnQkFDQVUsV0FBVyxJQUFJLENBQUM1QixRQUFRLEVBQUV5QjtnQkFDMUIsNkRBQTZEO2dCQUM3RCxJQUFJLENBQUN6QixRQUFRLEdBQUd5QjtnQkFDaEIsK0VBQStFO2dCQUMvRUgsY0FBYztZQUNoQjtRQUNGO1FBRUEsaUZBQWlGO1FBQ2pGLElBQUksQ0FBQyxJQUFJLENBQUN6QixRQUFRLENBQUNxQyxHQUFHLENBQUNaLGNBQWM7WUFDbkMsSUFBSSxDQUFDekIsUUFBUSxDQUFDc0MsR0FBRyxDQUFDYixhQUFhLElBQUlwQztRQUNyQztRQUVBLElBQUksQ0FBQ1csUUFBUSxDQUNWVyxHQUFHLENBQUNjLGFBQ0pqQyxPQUFPLENBQUM2QixTQUFTSCxLQUFLLENBQUMsSUFBSUksV0FBV0M7SUFDM0M7O2FBdk1BUCxXQUFBQSxHQUF1QjthQUN2QmhCLFFBQUFBLEdBQWlDLElBQUl1QzthQUNyQ3BDLFFBQUFBLEdBQTBCO2FBQzFCRyxZQUFBQSxHQUE4QjthQUM5QkMsb0JBQUFBLEdBQXNDOztBQW9NeEM7QUFFTyxTQUFTbkIsZ0JBQ2RvRCxlQUFzQztJQUV0QyxrRkFBa0Y7SUFDbEYsNEVBQTRFO0lBQzVFLDJDQUEyQztJQUUzQyx5RUFBeUU7SUFDekUsMkJBQTJCO0lBQzNCLG9DQUFvQztJQUNwQyw4RUFBOEU7SUFDOUUsd0VBQXdFO0lBQ3hFLGdIQUFnSDtJQUNoSCw0RUFBNEU7SUFDNUUsTUFBTUMsT0FBTyxJQUFJcEQ7SUFFakIsNkZBQTZGO0lBQzdGbUQsZ0JBQWdCTixPQUFPLENBQUMsQ0FBQ1EsV0FBYUQsS0FBS25ELE1BQU0sQ0FBQ29EO0lBQ2xELDRHQUE0RztJQUM1RyxPQUFPRCxLQUFLN0MsTUFBTTtBQUNwQjtBQUVPLFNBQVNULHNCQUNkd0QsT0FBWSxFQUNaQyxNQUEwQjtJQUUxQix5RUFBeUU7SUFDekUsOENBQThDO0lBQzlDLE1BQU1DLFVBQWtDLENBQUM7SUFDekMsTUFBTUMsWUFBc0IsRUFBRTtJQUM5QixJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSUosUUFBUW5CLE1BQU0sRUFBRXVCLElBQUs7UUFDdkMsTUFBTUMsV0FBV0osT0FBT0QsT0FBTyxDQUFDSSxFQUFFO1FBQ2xDRixPQUFPLENBQUNHLFNBQVMsR0FBR0Q7UUFDcEJELFNBQVMsQ0FBQ0MsRUFBRSxHQUFHQztJQUNqQjtJQUVBLHNCQUFzQjtJQUN0QixNQUFNQyxTQUFTN0QsZ0JBQWdCMEQ7SUFFL0IsNkVBQTZFO0lBQzdFLFNBQVM7SUFDVCxPQUFPRyxPQUFPeEMsR0FBRyxDQUFDLENBQUN1QyxXQUFhTCxPQUFPLENBQUNFLE9BQU8sQ0FBQ0csU0FBUyxDQUFDO0FBQzVEIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3NvcnRlZC1yb3V0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgVXJsTm9kZSB7XG4gIHBsYWNlaG9sZGVyOiBib29sZWFuID0gdHJ1ZVxuICBjaGlsZHJlbjogTWFwPHN0cmluZywgVXJsTm9kZT4gPSBuZXcgTWFwKClcbiAgc2x1Z05hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gIHJlc3RTbHVnTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgb3B0aW9uYWxSZXN0U2x1Z05hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsXG5cbiAgaW5zZXJ0KHVybFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2luc2VydCh1cmxQYXRoLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pLCBbXSwgZmFsc2UpXG4gIH1cblxuICBzbW9vc2goKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9zbW9vc2goKVxuICB9XG5cbiAgcHJpdmF0ZSBfc21vb3NoKHByZWZpeDogc3RyaW5nID0gJy8nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNoaWxkcmVuUGF0aHMgPSBbLi4udGhpcy5jaGlsZHJlbi5rZXlzKCldLnNvcnQoKVxuICAgIGlmICh0aGlzLnNsdWdOYW1lICE9PSBudWxsKSB7XG4gICAgICBjaGlsZHJlblBhdGhzLnNwbGljZShjaGlsZHJlblBhdGhzLmluZGV4T2YoJ1tdJyksIDEpXG4gICAgfVxuICAgIGlmICh0aGlzLnJlc3RTbHVnTmFtZSAhPT0gbnVsbCkge1xuICAgICAgY2hpbGRyZW5QYXRocy5zcGxpY2UoY2hpbGRyZW5QYXRocy5pbmRleE9mKCdbLi4uXScpLCAxKVxuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25hbFJlc3RTbHVnTmFtZSAhPT0gbnVsbCkge1xuICAgICAgY2hpbGRyZW5QYXRocy5zcGxpY2UoY2hpbGRyZW5QYXRocy5pbmRleE9mKCdbWy4uLl1dJyksIDEpXG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGVzID0gY2hpbGRyZW5QYXRoc1xuICAgICAgLm1hcCgoYykgPT4gdGhpcy5jaGlsZHJlbi5nZXQoYykhLl9zbW9vc2goYCR7cHJlZml4fSR7Y30vYCkpXG4gICAgICAucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBbLi4ucHJldiwgLi4uY3Vycl0sIFtdKVxuXG4gICAgaWYgKHRoaXMuc2x1Z05hbWUgIT09IG51bGwpIHtcbiAgICAgIHJvdXRlcy5wdXNoKFxuICAgICAgICAuLi50aGlzLmNoaWxkcmVuLmdldCgnW10nKSEuX3Ntb29zaChgJHtwcmVmaXh9WyR7dGhpcy5zbHVnTmFtZX1dL2ApXG4gICAgICApXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnBsYWNlaG9sZGVyKSB7XG4gICAgICBjb25zdCByID0gcHJlZml4ID09PSAnLycgPyAnLycgOiBwcmVmaXguc2xpY2UoMCwgLTEpXG4gICAgICBpZiAodGhpcy5vcHRpb25hbFJlc3RTbHVnTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgWW91IGNhbm5vdCBkZWZpbmUgYSByb3V0ZSB3aXRoIHRoZSBzYW1lIHNwZWNpZmljaXR5IGFzIGEgb3B0aW9uYWwgY2F0Y2gtYWxsIHJvdXRlIChcIiR7cn1cIiBhbmQgXCIke3J9W1suLi4ke3RoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWV9XV1cIikuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIHJvdXRlcy51bnNoaWZ0KHIpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdFNsdWdOYW1lICE9PSBudWxsKSB7XG4gICAgICByb3V0ZXMucHVzaChcbiAgICAgICAgLi4udGhpcy5jaGlsZHJlblxuICAgICAgICAgIC5nZXQoJ1suLi5dJykhXG4gICAgICAgICAgLl9zbW9vc2goYCR7cHJlZml4fVsuLi4ke3RoaXMucmVzdFNsdWdOYW1lfV0vYClcbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25hbFJlc3RTbHVnTmFtZSAhPT0gbnVsbCkge1xuICAgICAgcm91dGVzLnB1c2goXG4gICAgICAgIC4uLnRoaXMuY2hpbGRyZW5cbiAgICAgICAgICAuZ2V0KCdbWy4uLl1dJykhXG4gICAgICAgICAgLl9zbW9vc2goYCR7cHJlZml4fVtbLi4uJHt0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lfV1dL2ApXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHJvdXRlc1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5zZXJ0KFxuICAgIHVybFBhdGhzOiBzdHJpbmdbXSxcbiAgICBzbHVnTmFtZXM6IHN0cmluZ1tdLFxuICAgIGlzQ2F0Y2hBbGw6IGJvb2xlYW5cbiAgKTogdm9pZCB7XG4gICAgaWYgKHVybFBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaXNDYXRjaEFsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYXRjaC1hbGwgbXVzdCBiZSB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBVUkwuYClcbiAgICB9XG5cbiAgICAvLyBUaGUgbmV4dCBzZWdtZW50IGluIHRoZSB1cmxQYXRocyBsaXN0XG4gICAgbGV0IG5leHRTZWdtZW50ID0gdXJsUGF0aHNbMF1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBzZWdtZW50IG1hdGNoZXMgYFtzb21ldGhpbmddYFxuICAgIGlmIChuZXh0U2VnbWVudC5zdGFydHNXaXRoKCdbJykgJiYgbmV4dFNlZ21lbnQuZW5kc1dpdGgoJ10nKSkge1xuICAgICAgLy8gU3RyaXAgYFtgIGFuZCBgXWAsIGxlYXZpbmcgb25seSBgc29tZXRoaW5nYFxuICAgICAgbGV0IHNlZ21lbnROYW1lID0gbmV4dFNlZ21lbnQuc2xpY2UoMSwgLTEpXG5cbiAgICAgIGxldCBpc09wdGlvbmFsID0gZmFsc2VcbiAgICAgIGlmIChzZWdtZW50TmFtZS5zdGFydHNXaXRoKCdbJykgJiYgc2VnbWVudE5hbWUuZW5kc1dpdGgoJ10nKSkge1xuICAgICAgICAvLyBTdHJpcCBvcHRpb25hbCBgW2AgYW5kIGBdYCwgbGVhdmluZyBvbmx5IGBzb21ldGhpbmdgXG4gICAgICAgIHNlZ21lbnROYW1lID0gc2VnbWVudE5hbWUuc2xpY2UoMSwgLTEpXG4gICAgICAgIGlzT3B0aW9uYWwgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50TmFtZS5zdGFydHNXaXRoKCfigKYnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYERldGVjdGVkIGEgdGhyZWUtZG90IGNoYXJhY3RlciAoJ+KApicpIGF0ICgnJHtzZWdtZW50TmFtZX0nKS4gRGlkIHlvdSBtZWFuICgnLi4uJyk/YFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50TmFtZS5zdGFydHNXaXRoKCcuLi4nKSkge1xuICAgICAgICAvLyBTdHJpcCBgLi4uYCwgbGVhdmluZyBvbmx5IGBzb21ldGhpbmdgXG4gICAgICAgIHNlZ21lbnROYW1lID0gc2VnbWVudE5hbWUuc3Vic3RyaW5nKDMpXG4gICAgICAgIGlzQ2F0Y2hBbGwgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50TmFtZS5zdGFydHNXaXRoKCdbJykgfHwgc2VnbWVudE5hbWUuZW5kc1dpdGgoJ10nKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFNlZ21lbnQgbmFtZXMgbWF5IG5vdCBzdGFydCBvciBlbmQgd2l0aCBleHRyYSBicmFja2V0cyAoJyR7c2VnbWVudE5hbWV9JykuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGlmIChzZWdtZW50TmFtZS5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBTZWdtZW50IG5hbWVzIG1heSBub3Qgc3RhcnQgd2l0aCBlcnJvbmVvdXMgcGVyaW9kcyAoJyR7c2VnbWVudE5hbWV9JykuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZVNsdWcocHJldmlvdXNTbHVnOiBzdHJpbmcgfCBudWxsLCBuZXh0U2x1Zzogc3RyaW5nKSB7XG4gICAgICAgIGlmIChwcmV2aW91c1NsdWcgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgc3BlY2lmaWMgc2VnbWVudCBhbHJlYWR5IGhhcyBhIHNsdWcgYnV0IHRoZSBzbHVnIGlzIG5vdCBgc29tZXRoaW5nYFxuICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgY29sbGlzaW9ucyBsaWtlOlxuICAgICAgICAgIC8vIHBhZ2VzL1twb3N0XS9pbmRleC5qc1xuICAgICAgICAgIC8vIHBhZ2VzL1tpZF0vaW5kZXguanNcbiAgICAgICAgICAvLyBCZWNhdXNlIGN1cnJlbnRseSBtdWx0aXBsZSBkeW5hbWljIHBhcmFtcyBvbiB0aGUgc2FtZSBzZWdtZW50IGxldmVsIGFyZSBub3Qgc3VwcG9ydGVkXG4gICAgICAgICAgaWYgKHByZXZpb3VzU2x1ZyAhPT0gbmV4dFNsdWcpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFRoaXMgZXJyb3Igc2VlbXMgdG8gYmUgY29uZnVzaW5nIGZvciB1c2VycywgbmVlZHMgYW4gZXJyb3IgbGluaywgdGhlIGRlc2NyaXB0aW9uIGNhbiBiZSBiYXNlZCBvbiBhYm92ZSBjb21tZW50LlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgWW91IGNhbm5vdCB1c2UgZGlmZmVyZW50IHNsdWcgbmFtZXMgZm9yIHRoZSBzYW1lIGR5bmFtaWMgcGF0aCAoJyR7cHJldmlvdXNTbHVnfScgIT09ICcke25leHRTbHVnfScpLmBcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzbHVnTmFtZXMuZm9yRWFjaCgoc2x1ZykgPT4ge1xuICAgICAgICAgIGlmIChzbHVnID09PSBuZXh0U2x1Zykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgWW91IGNhbm5vdCBoYXZlIHRoZSBzYW1lIHNsdWcgbmFtZSBcIiR7bmV4dFNsdWd9XCIgcmVwZWF0IHdpdGhpbiBhIHNpbmdsZSBkeW5hbWljIHBhdGhgXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNsdWcucmVwbGFjZSgvXFxXL2csICcnKSA9PT0gbmV4dFNlZ21lbnQucmVwbGFjZSgvXFxXL2csICcnKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgWW91IGNhbm5vdCBoYXZlIHRoZSBzbHVnIG5hbWVzIFwiJHtzbHVnfVwiIGFuZCBcIiR7bmV4dFNsdWd9XCIgZGlmZmVyIG9ubHkgYnkgbm9uLXdvcmQgc3ltYm9scyB3aXRoaW4gYSBzaW5nbGUgZHluYW1pYyBwYXRoYFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBzbHVnTmFtZXMucHVzaChuZXh0U2x1ZylcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQ2F0Y2hBbGwpIHtcbiAgICAgICAgaWYgKGlzT3B0aW9uYWwpIHtcbiAgICAgICAgICBpZiAodGhpcy5yZXN0U2x1Z05hbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgWW91IGNhbm5vdCB1c2UgYm90aCBhbiByZXF1aXJlZCBhbmQgb3B0aW9uYWwgY2F0Y2gtYWxsIHJvdXRlIGF0IHRoZSBzYW1lIGxldmVsIChcIlsuLi4ke3RoaXMucmVzdFNsdWdOYW1lfV1cIiBhbmQgXCIke3VybFBhdGhzWzBdfVwiICkuYFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGhhbmRsZVNsdWcodGhpcy5vcHRpb25hbFJlc3RTbHVnTmFtZSwgc2VnbWVudE5hbWUpXG4gICAgICAgICAgLy8gc2x1Z05hbWUgaXMga2VwdCBhcyBpdCBjYW4gb25seSBiZSBvbmUgcGFydGljdWxhciBzbHVnTmFtZVxuICAgICAgICAgIHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUgPSBzZWdtZW50TmFtZVxuICAgICAgICAgIC8vIG5leHRTZWdtZW50IGlzIG92ZXJ3cml0dGVuIHRvIFtbLi4uXV0gc28gdGhhdCBpdCBjYW4gbGF0ZXIgYmUgc29ydGVkIHNwZWNpZmljYWxseVxuICAgICAgICAgIG5leHRTZWdtZW50ID0gJ1tbLi4uXV0nXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9uYWxSZXN0U2x1Z05hbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgWW91IGNhbm5vdCB1c2UgYm90aCBhbiBvcHRpb25hbCBhbmQgcmVxdWlyZWQgY2F0Y2gtYWxsIHJvdXRlIGF0IHRoZSBzYW1lIGxldmVsIChcIltbLi4uJHt0aGlzLm9wdGlvbmFsUmVzdFNsdWdOYW1lfV1dXCIgYW5kIFwiJHt1cmxQYXRoc1swXX1cIikuYFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGhhbmRsZVNsdWcodGhpcy5yZXN0U2x1Z05hbWUsIHNlZ21lbnROYW1lKVxuICAgICAgICAgIC8vIHNsdWdOYW1lIGlzIGtlcHQgYXMgaXQgY2FuIG9ubHkgYmUgb25lIHBhcnRpY3VsYXIgc2x1Z05hbWVcbiAgICAgICAgICB0aGlzLnJlc3RTbHVnTmFtZSA9IHNlZ21lbnROYW1lXG4gICAgICAgICAgLy8gbmV4dFNlZ21lbnQgaXMgb3ZlcndyaXR0ZW4gdG8gWy4uLl0gc28gdGhhdCBpdCBjYW4gbGF0ZXIgYmUgc29ydGVkIHNwZWNpZmljYWxseVxuICAgICAgICAgIG5leHRTZWdtZW50ID0gJ1suLi5dJ1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNPcHRpb25hbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBPcHRpb25hbCByb3V0ZSBwYXJhbWV0ZXJzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCAoXCIke3VybFBhdGhzWzBdfVwiKS5gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGhhbmRsZVNsdWcodGhpcy5zbHVnTmFtZSwgc2VnbWVudE5hbWUpXG4gICAgICAgIC8vIHNsdWdOYW1lIGlzIGtlcHQgYXMgaXQgY2FuIG9ubHkgYmUgb25lIHBhcnRpY3VsYXIgc2x1Z05hbWVcbiAgICAgICAgdGhpcy5zbHVnTmFtZSA9IHNlZ21lbnROYW1lXG4gICAgICAgIC8vIG5leHRTZWdtZW50IGlzIG92ZXJ3cml0dGVuIHRvIFtdIHNvIHRoYXQgaXQgY2FuIGxhdGVyIGJlIHNvcnRlZCBzcGVjaWZpY2FsbHlcbiAgICAgICAgbmV4dFNlZ21lbnQgPSAnW10nXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBVcmxOb2RlIGRvZXNuJ3QgaGF2ZSB0aGUgbmV4dFNlZ21lbnQgeWV0IHdlIGNyZWF0ZSBhIG5ldyBjaGlsZCBVcmxOb2RlXG4gICAgaWYgKCF0aGlzLmNoaWxkcmVuLmhhcyhuZXh0U2VnbWVudCkpIHtcbiAgICAgIHRoaXMuY2hpbGRyZW4uc2V0KG5leHRTZWdtZW50LCBuZXcgVXJsTm9kZSgpKVxuICAgIH1cblxuICAgIHRoaXMuY2hpbGRyZW5cbiAgICAgIC5nZXQobmV4dFNlZ21lbnQpIVxuICAgICAgLl9pbnNlcnQodXJsUGF0aHMuc2xpY2UoMSksIHNsdWdOYW1lcywgaXNDYXRjaEFsbClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U29ydGVkUm91dGVzKFxuICBub3JtYWxpemVkUGFnZXM6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPlxuKTogc3RyaW5nW10ge1xuICAvLyBGaXJzdCB0aGUgVXJsTm9kZSBpcyBjcmVhdGVkLCBhbmQgZXZlcnkgVXJsTm9kZSBjYW4gaGF2ZSBvbmx5IDEgZHluYW1pYyBzZWdtZW50XG4gIC8vIEVnIHlvdSBjYW4ndCBoYXZlIHBhZ2VzL1twb3N0XS9hYmMuanMgYW5kIHBhZ2VzL1toZWxsb10vc29tZXRoaW5nLWVsc2UuanNcbiAgLy8gT25seSAxIGR5bmFtaWMgc2VnbWVudCBwZXIgbmVzdGluZyBsZXZlbFxuXG4gIC8vIFNvIGluIHRoZSBjYXNlIHRoYXQgaXMgdGVzdC9pbnRlZ3JhdGlvbi9keW5hbWljLXJvdXRpbmcgaXQnbGwgYmUgdGhpczpcbiAgLy8gcGFnZXMvW3Bvc3RdL2NvbW1lbnRzLmpzXG4gIC8vIHBhZ2VzL2Jsb2cvW3Bvc3RdL2NvbW1lbnQvW2lkXS5qc1xuICAvLyBCb3RoIGFyZSBmaW5lIGJlY2F1c2UgYHBhZ2VzL1twb3N0XWAgYW5kIGBwYWdlcy9ibG9nYCBhcmUgb24gdGhlIHNhbWUgbGV2ZWxcbiAgLy8gU28gaW4gdGhpcyBjYXNlIGBVcmxOb2RlYCBjcmVhdGVkIGhlcmUgaGFzIGB0aGlzLnNsdWdOYW1lID09PSAncG9zdCdgXG4gIC8vIEFuZCBzaW5jZSB5b3VyIFBSIHBhc3NlZCB0aHJvdWdoIGBzbHVnTmFtZWAgYXMgYW4gYXJyYXkgYmFzaWNhbGx5IGl0J2QgaW5jbHVkaW5nIGl0IGluIHRvbyBtYW55IHBvc3NpYmlsaXRpZXNcbiAgLy8gSW5zdGVhZCB3aGF0IGhhcyB0byBiZSBwYXNzZWQgdGhyb3VnaCBpcyB0aGUgdXB3YXJkcyBwYXRoJ3MgZHluYW1pYyBuYW1lc1xuICBjb25zdCByb290ID0gbmV3IFVybE5vZGUoKVxuXG4gIC8vIEhlcmUgdGhlIGByb290YCBnZXRzIGluamVjdGVkIG11bHRpcGxlIHBhdGhzLCBhbmQgaW5zZXJ0IHdpbGwgYnJlYWsgdGhlbSB1cCBpbnRvIHN1YmxldmVsc1xuICBub3JtYWxpemVkUGFnZXMuZm9yRWFjaCgocGFnZVBhdGgpID0+IHJvb3QuaW5zZXJ0KHBhZ2VQYXRoKSlcbiAgLy8gU21vb3NoIHdpbGwgdGhlbiBzb3J0IHRob3NlIHN1YmxldmVscyB1cCB0byB0aGUgcG9pbnQgd2hlcmUgeW91IGdldCB0aGUgY29ycmVjdCByb3V0ZSBkZWZpbml0aW9uIHByaW9yaXR5XG4gIHJldHVybiByb290LnNtb29zaCgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTb3J0ZWRSb3V0ZU9iamVjdHM8VD4oXG4gIG9iamVjdHM6IFRbXSxcbiAgZ2V0dGVyOiAob2JqOiBUKSA9PiBzdHJpbmdcbik6IFRbXSB7XG4gIC8vIFdlJ3JlIGFzc3VtaW5nIGhlcmUgdGhhdCBhbGwgdGhlIHBhdGhuYW1lcyBhcmUgdW5pcXVlLCB0aGF0IHdheSB3ZSBjYW5cbiAgLy8gc29ydCB0aGUgbGlzdCBhbmQgdXNlIHRoZSBpbmRleCBhcyB0aGUga2V5LlxuICBjb25zdCBpbmRleGVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge31cbiAgY29uc3QgcGF0aG5hbWVzOiBzdHJpbmdbXSA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHBhdGhuYW1lID0gZ2V0dGVyKG9iamVjdHNbaV0pXG4gICAgaW5kZXhlc1twYXRobmFtZV0gPSBpXG4gICAgcGF0aG5hbWVzW2ldID0gcGF0aG5hbWVcbiAgfVxuXG4gIC8vIFNvcnQgdGhlIHBhdGhuYW1lcy5cbiAgY29uc3Qgc29ydGVkID0gZ2V0U29ydGVkUm91dGVzKHBhdGhuYW1lcylcblxuICAvLyBNYXAgdGhlIHNvcnRlZCBwYXRobmFtZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgb2JqZWN0cyB1c2luZyB0aGUgbmV3IHNvcnRlZFxuICAvLyBpbmRleC5cbiAgcmV0dXJuIHNvcnRlZC5tYXAoKHBhdGhuYW1lKSA9PiBvYmplY3RzW2luZGV4ZXNbcGF0aG5hbWVdXSlcbn1cbiJdLCJuYW1lcyI6WyJnZXRTb3J0ZWRSb3V0ZU9iamVjdHMiLCJnZXRTb3J0ZWRSb3V0ZXMiLCJVcmxOb2RlIiwiaW5zZXJ0IiwidXJsUGF0aCIsIl9pbnNlcnQiLCJzcGxpdCIsImZpbHRlciIsIkJvb2xlYW4iLCJzbW9vc2giLCJfc21vb3NoIiwicHJlZml4IiwiY2hpbGRyZW5QYXRocyIsImNoaWxkcmVuIiwia2V5cyIsInNvcnQiLCJzbHVnTmFtZSIsInNwbGljZSIsImluZGV4T2YiLCJyZXN0U2x1Z05hbWUiLCJvcHRpb25hbFJlc3RTbHVnTmFtZSIsInJvdXRlcyIsIm1hcCIsImMiLCJnZXQiLCJyZWR1Y2UiLCJwcmV2IiwiY3VyciIsInB1c2giLCJwbGFjZWhvbGRlciIsInIiLCJzbGljZSIsIkVycm9yIiwidW5zaGlmdCIsInVybFBhdGhzIiwic2x1Z05hbWVzIiwiaXNDYXRjaEFsbCIsImxlbmd0aCIsIm5leHRTZWdtZW50Iiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwic2VnbWVudE5hbWUiLCJpc09wdGlvbmFsIiwic3Vic3RyaW5nIiwiaGFuZGxlU2x1ZyIsInByZXZpb3VzU2x1ZyIsIm5leHRTbHVnIiwiZm9yRWFjaCIsInNsdWciLCJyZXBsYWNlIiwiaGFzIiwic2V0IiwiTWFwIiwibm9ybWFsaXplZFBhZ2VzIiwicm9vdCIsInBhZ2VQYXRoIiwib2JqZWN0cyIsImdldHRlciIsImluZGV4ZXMiLCJwYXRobmFtZXMiLCJpIiwicGF0aG5hbWUiLCJzb3J0ZWQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/router/utils/sorted-routes.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/segment.js":
/*!**************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/segment.js ***!
  \**************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    DEFAULT_SEGMENT_KEY: function() {\n        return DEFAULT_SEGMENT_KEY;\n    },\n    PAGE_SEGMENT_KEY: function() {\n        return PAGE_SEGMENT_KEY;\n    },\n    addSearchParamsIfPageSegment: function() {\n        return addSearchParamsIfPageSegment;\n    },\n    isGroupSegment: function() {\n        return isGroupSegment;\n    },\n    isParallelRouteSegment: function() {\n        return isParallelRouteSegment;\n    }\n});\nfunction isGroupSegment(segment) {\n    // Use array[0] for performant purpose\n    return segment[0] === '(' && segment.endsWith(')');\n}\nfunction isParallelRouteSegment(segment) {\n    return segment.startsWith('@') && segment !== '@children';\n}\nfunction addSearchParamsIfPageSegment(segment, searchParams) {\n    const isPageSegment = segment.includes(PAGE_SEGMENT_KEY);\n    if (isPageSegment) {\n        const stringifiedQuery = JSON.stringify(searchParams);\n        return stringifiedQuery !== '{}' ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery : PAGE_SEGMENT_KEY;\n    }\n    return segment;\n}\nconst PAGE_SEGMENT_KEY = '__PAGE__';\nconst DEFAULT_SEGMENT_KEY = '__DEFAULT__'; //# sourceMappingURL=segment.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3NlZ21lbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBNEJhQSxtQkFBbUI7ZUFBbkJBOztJQURBQyxnQkFBZ0I7ZUFBaEJBOztJQWhCR0MsNEJBQTRCO2VBQTVCQTs7SUFUQUMsY0FBYztlQUFkQTs7SUFLQUMsc0JBQXNCO2VBQXRCQTs7O0FBTFQsU0FBU0QsZUFBZUUsT0FBZTtJQUM1QyxzQ0FBc0M7SUFDdEMsT0FBT0EsT0FBTyxDQUFDLEVBQUUsS0FBSyxPQUFPQSxRQUFRQyxRQUFRLENBQUM7QUFDaEQ7QUFFTyxTQUFTRix1QkFBdUJDLE9BQWU7SUFDcEQsT0FBT0EsUUFBUUUsVUFBVSxDQUFDLFFBQVFGLFlBQVk7QUFDaEQ7QUFFTyxTQUFTSCw2QkFDZEcsT0FBZ0IsRUFDaEJHLFlBQTJEO0lBRTNELE1BQU1DLGdCQUFnQkosUUFBUUssUUFBUSxDQUFDVDtJQUV2QyxJQUFJUSxlQUFlO1FBQ2pCLE1BQU1FLG1CQUFtQkMsS0FBS0MsU0FBUyxDQUFDTDtRQUN4QyxPQUFPRyxxQkFBcUIsT0FDeEJWLG1CQUFtQixNQUFNVSxtQkFDekJWO0lBQ047SUFFQSxPQUFPSTtBQUNUO0FBRU8sTUFBTUosbUJBQW1CO0FBQ3pCLE1BQU1ELHNCQUFzQiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9zcmMvc2hhcmVkL2xpYi9zZWdtZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU2VnbWVudCB9IGZyb20gJy4uLy4uL3NlcnZlci9hcHAtcmVuZGVyL3R5cGVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaXNHcm91cFNlZ21lbnQoc2VnbWVudDogc3RyaW5nKSB7XG4gIC8vIFVzZSBhcnJheVswXSBmb3IgcGVyZm9ybWFudCBwdXJwb3NlXG4gIHJldHVybiBzZWdtZW50WzBdID09PSAnKCcgJiYgc2VnbWVudC5lbmRzV2l0aCgnKScpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1BhcmFsbGVsUm91dGVTZWdtZW50KHNlZ21lbnQ6IHN0cmluZykge1xuICByZXR1cm4gc2VnbWVudC5zdGFydHNXaXRoKCdAJykgJiYgc2VnbWVudCAhPT0gJ0BjaGlsZHJlbidcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFNlYXJjaFBhcmFtc0lmUGFnZVNlZ21lbnQoXG4gIHNlZ21lbnQ6IFNlZ21lbnQsXG4gIHNlYXJjaFBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ+XG4pIHtcbiAgY29uc3QgaXNQYWdlU2VnbWVudCA9IHNlZ21lbnQuaW5jbHVkZXMoUEFHRV9TRUdNRU5UX0tFWSlcblxuICBpZiAoaXNQYWdlU2VnbWVudCkge1xuICAgIGNvbnN0IHN0cmluZ2lmaWVkUXVlcnkgPSBKU09OLnN0cmluZ2lmeShzZWFyY2hQYXJhbXMpXG4gICAgcmV0dXJuIHN0cmluZ2lmaWVkUXVlcnkgIT09ICd7fSdcbiAgICAgID8gUEFHRV9TRUdNRU5UX0tFWSArICc/JyArIHN0cmluZ2lmaWVkUXVlcnlcbiAgICAgIDogUEFHRV9TRUdNRU5UX0tFWVxuICB9XG5cbiAgcmV0dXJuIHNlZ21lbnRcbn1cblxuZXhwb3J0IGNvbnN0IFBBR0VfU0VHTUVOVF9LRVkgPSAnX19QQUdFX18nXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRUdNRU5UX0tFWSA9ICdfX0RFRkFVTFRfXydcbiJdLCJuYW1lcyI6WyJERUZBVUxUX1NFR01FTlRfS0VZIiwiUEFHRV9TRUdNRU5UX0tFWSIsImFkZFNlYXJjaFBhcmFtc0lmUGFnZVNlZ21lbnQiLCJpc0dyb3VwU2VnbWVudCIsImlzUGFyYWxsZWxSb3V0ZVNlZ21lbnQiLCJzZWdtZW50IiwiZW5kc1dpdGgiLCJzdGFydHNXaXRoIiwic2VhcmNoUGFyYW1zIiwiaXNQYWdlU2VnbWVudCIsImluY2x1ZGVzIiwic3RyaW5naWZpZWRRdWVyeSIsIkpTT04iLCJzdHJpbmdpZnkiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/segment.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js":
/*!******************************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js ***!
  \******************************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__  cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    ServerInsertedHTMLContext: function() {\n        return ServerInsertedHTMLContext;\n    },\n    useServerInsertedHTML: function() {\n        return useServerInsertedHTML;\n    }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/.pnpm/@swc+helpers@0.5.15/node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/react/index.js\"));\nconst ServerInsertedHTMLContext = /*#__PURE__*/ _react.default.createContext(null);\nfunction useServerInsertedHTML(callback) {\n    const addInsertedServerHTMLCallback = (0, _react.useContext)(ServerInsertedHTMLContext);\n    // Should have no effects on client where there's no flush effects provider\n    if (addInsertedServerHTMLCallback) {\n        addInsertedServerHTMLCallback(callback);\n    }\n} //# sourceMappingURL=server-inserted-html.shared-runtime.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3NlcnZlci1pbnNlcnRlZC1odG1sLnNoYXJlZC1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQVlhQSx5QkFBeUI7ZUFBekJBOztJQUdHQyxxQkFBcUI7ZUFBckJBOzs7OzZFQWJrQjtBQVUzQixNQUFNRCw0QkFBQUEsV0FBQUEsR0FDWEUsT0FBQUEsT0FBSyxDQUFDQyxhQUFhLENBQWdDO0FBRTlDLFNBQVNGLHNCQUFzQkcsUUFBK0I7SUFDbkUsTUFBTUMsZ0NBQWdDQyxDQUFBQSxHQUFBQSxPQUFBQSxVQUFBQSxFQUFXTjtJQUNqRCwyRUFBMkU7SUFDM0UsSUFBSUssK0JBQStCO1FBQ2pDQSw4QkFBOEJEO0lBQ2hDO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvc3JjL3NoYXJlZC9saWIvc2VydmVyLWluc2VydGVkLWh0bWwuc2hhcmVkLXJ1bnRpbWUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgdHlwZSBTZXJ2ZXJJbnNlcnRlZEhUTUxIb29rID0gKGNhbGxiYWNrczogKCkgPT4gUmVhY3QuUmVhY3ROb2RlKSA9PiB2b2lkXG5cbi8vIFVzZSBgUmVhY3QuY3JlYXRlQ29udGV4dGAgdG8gYXZvaWQgZXJyb3JzIGZyb20gdGhlIFJTQyBjaGVja3MgYmVjYXVzZVxuLy8gaXQgY2FuJ3QgYmUgaW1wb3J0ZWQgZGlyZWN0bHkgaW4gU2VydmVyIENvbXBvbmVudHM6XG4vL1xuLy8gICBpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnXG4vL1xuLy8gTW9yZSBpbmZvOiBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL25leHQuanMvcHVsbC80MDY4NlxuZXhwb3J0IGNvbnN0IFNlcnZlckluc2VydGVkSFRNTENvbnRleHQgPVxuICBSZWFjdC5jcmVhdGVDb250ZXh0PFNlcnZlckluc2VydGVkSFRNTEhvb2sgfCBudWxsPihudWxsIGFzIGFueSlcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNlcnZlckluc2VydGVkSFRNTChjYWxsYmFjazogKCkgPT4gUmVhY3QuUmVhY3ROb2RlKTogdm9pZCB7XG4gIGNvbnN0IGFkZEluc2VydGVkU2VydmVySFRNTENhbGxiYWNrID0gdXNlQ29udGV4dChTZXJ2ZXJJbnNlcnRlZEhUTUxDb250ZXh0KVxuICAvLyBTaG91bGQgaGF2ZSBubyBlZmZlY3RzIG9uIGNsaWVudCB3aGVyZSB0aGVyZSdzIG5vIGZsdXNoIGVmZmVjdHMgcHJvdmlkZXJcbiAgaWYgKGFkZEluc2VydGVkU2VydmVySFRNTENhbGxiYWNrKSB7XG4gICAgYWRkSW5zZXJ0ZWRTZXJ2ZXJIVE1MQ2FsbGJhY2soY2FsbGJhY2spXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJTZXJ2ZXJJbnNlcnRlZEhUTUxDb250ZXh0IiwidXNlU2VydmVySW5zZXJ0ZWRIVE1MIiwiUmVhY3QiLCJjcmVhdGVDb250ZXh0IiwiY2FsbGJhY2siLCJhZGRJbnNlcnRlZFNlcnZlckhUTUxDYWxsYmFjayIsInVzZUNvbnRleHQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/server-reference-info.js":
/*!****************************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/server-reference-info.js ***!
  \****************************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    extractInfoFromServerReferenceId: function() {\n        return extractInfoFromServerReferenceId;\n    },\n    omitUnusedArgs: function() {\n        return omitUnusedArgs;\n    }\n});\nfunction extractInfoFromServerReferenceId(id) {\n    const infoByte = parseInt(id.slice(0, 2), 16);\n    const typeBit = infoByte >> 7 & 0x1;\n    const argMask = infoByte >> 1 & 0x3f;\n    const restArgs = infoByte & 0x1;\n    const usedArgs = Array(6);\n    for(let index = 0; index < 6; index++){\n        const bitPosition = 5 - index;\n        const bit = argMask >> bitPosition & 0x1;\n        usedArgs[index] = bit === 1;\n    }\n    return {\n        type: typeBit === 1 ? 'use-cache' : 'server-action',\n        usedArgs: usedArgs,\n        hasRestArgs: restArgs === 1\n    };\n}\nfunction omitUnusedArgs(args, info) {\n    const filteredArgs = new Array(args.length);\n    for(let index = 0; index < args.length; index++){\n        if (index < 6 && info.usedArgs[index] || // This assumes that the server reference info byte has the restArgs bit\n        // set to 1 if there are more than 6 args.\n        index >= 6 && info.hasRestArgs) {\n            filteredArgs[index] = args[index];\n        }\n    }\n    return filteredArgs;\n} //# sourceMappingURL=server-reference-info.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3NlcnZlci1yZWZlcmVuY2UtaW5mby5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUEwQmdCQSxnQ0FBZ0M7ZUFBaENBOztJQWlDQUMsY0FBYztlQUFkQTs7O0FBakNULFNBQVNELGlDQUNkRSxFQUFVO0lBRVYsTUFBTUMsV0FBV0MsU0FBU0YsR0FBR0csS0FBSyxDQUFDLEdBQUcsSUFBSTtJQUMxQyxNQUFNQyxVQUFXSCxZQUFZLElBQUs7SUFDbEMsTUFBTUksVUFBV0osWUFBWSxJQUFLO0lBQ2xDLE1BQU1LLFdBQVdMLFdBQVc7SUFDNUIsTUFBTU0sV0FBV0MsTUFBTTtJQUV2QixJQUFLLElBQUlDLFFBQVEsR0FBR0EsUUFBUSxHQUFHQSxRQUFTO1FBQ3RDLE1BQU1DLGNBQWMsSUFBSUQ7UUFDeEIsTUFBTUUsTUFBT04sV0FBV0ssY0FBZTtRQUN2Q0gsUUFBUSxDQUFDRSxNQUFNLEdBQUdFLFFBQVE7SUFDNUI7SUFFQSxPQUFPO1FBQ0xDLE1BQU1SLFlBQVksSUFBSSxjQUFjO1FBQ3BDRyxVQUFVQTtRQVFWTSxhQUFhUCxhQUFhO0lBQzVCO0FBQ0Y7QUFNTyxTQUFTUCxlQUNkZSxJQUFlLEVBQ2ZDLElBQXlCO0lBRXpCLE1BQU1DLGVBQWUsSUFBSVIsTUFBTU0sS0FBS0csTUFBTTtJQUUxQyxJQUFLLElBQUlSLFFBQVEsR0FBR0EsUUFBUUssS0FBS0csTUFBTSxFQUFFUixRQUFTO1FBQ2hELElBQ0dBLFFBQVEsS0FBS00sS0FBS1IsUUFBUSxDQUFDRSxNQUFNLElBQ2xDLHdFQUF3RTtRQUN4RSwwQ0FBMEM7UUFDekNBLFNBQVMsS0FBS00sS0FBS0YsV0FBVyxFQUMvQjtZQUNBRyxZQUFZLENBQUNQLE1BQU0sR0FBR0ssSUFBSSxDQUFDTCxNQUFNO1FBQ25DO0lBQ0Y7SUFFQSxPQUFPTztBQUNUIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL3NyYy9zaGFyZWQvbGliL3NlcnZlci1yZWZlcmVuY2UtaW5mby50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFNlcnZlclJlZmVyZW5jZUluZm8ge1xuICB0eXBlOiAnc2VydmVyLWFjdGlvbicgfCAndXNlLWNhY2hlJ1xuICB1c2VkQXJnczogW2Jvb2xlYW4sIGJvb2xlYW4sIGJvb2xlYW4sIGJvb2xlYW4sIGJvb2xlYW4sIGJvb2xlYW5dXG4gIGhhc1Jlc3RBcmdzOiBib29sZWFuXG59XG5cbi8qKlxuICogRXh0cmFjdHMgaW5mbyBhYm91dCB0aGUgc2VydmVyIHJlZmVyZW5jZSBmb3IgdGhlIGdpdmVuIHNlcnZlciByZWZlcmVuY2UgSUQgYnlcbiAqIHBhcnNpbmcgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGhleC1lbmNvZGVkIElELlxuICpcbiAqIGBgYFxuICogQml0IHBvc2l0aW9uczogWzddICAgICAgWzZdIFs1XSBbNF0gWzNdIFsyXSBbMV0gIFswXVxuICogQml0czogICAgICAgICAgdHlwZUJpdCAgYXJnTWFzayAgICAgICAgICAgICAgICAgIHJlc3RBcmdzXG4gKiBgYGBcbiAqXG4gKiBJZiB0aGUgYHR5cGVCaXRgIGlzIGAxYCB0aGUgc2VydmVyIHJlZmVyZW5jZSByZXByZXNlbnRzIGEgYFwidXNlIGNhY2hlXCJgXG4gKiBmdW5jdGlvbiwgb3RoZXJ3aXNlIGEgc2VydmVyIGFjdGlvbi5cbiAqXG4gKiBUaGUgYGFyZ01hc2tgIGVuY29kZXMgd2hldGhlciB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgYXJndW1lbnQgYXQgdGhlXG4gKiByZXNwZWN0aXZlIHBvc2l0aW9uLlxuICpcbiAqIFRoZSBgcmVzdEFyZ3NgIGJpdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZnVuY3Rpb24gdXNlcyBhIHJlc3QgcGFyYW1ldGVyLiBJdCdzXG4gKiBhbHNvIHNldCB0byAxIGlmIHRoZSBmdW5jdGlvbiBoYXMgbW9yZSB0aGFuIDYgYXJncy5cbiAqXG4gKiBAcGFyYW0gaWQgaGV4LWVuY29kZWQgc2VydmVyIHJlZmVyZW5jZSBJRFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEluZm9Gcm9tU2VydmVyUmVmZXJlbmNlSWQoXG4gIGlkOiBzdHJpbmdcbik6IFNlcnZlclJlZmVyZW5jZUluZm8ge1xuICBjb25zdCBpbmZvQnl0ZSA9IHBhcnNlSW50KGlkLnNsaWNlKDAsIDIpLCAxNilcbiAgY29uc3QgdHlwZUJpdCA9IChpbmZvQnl0ZSA+PiA3KSAmIDB4MVxuICBjb25zdCBhcmdNYXNrID0gKGluZm9CeXRlID4+IDEpICYgMHgzZlxuICBjb25zdCByZXN0QXJncyA9IGluZm9CeXRlICYgMHgxXG4gIGNvbnN0IHVzZWRBcmdzID0gQXJyYXkoNilcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgNjsgaW5kZXgrKykge1xuICAgIGNvbnN0IGJpdFBvc2l0aW9uID0gNSAtIGluZGV4XG4gICAgY29uc3QgYml0ID0gKGFyZ01hc2sgPj4gYml0UG9zaXRpb24pICYgMHgxXG4gICAgdXNlZEFyZ3NbaW5kZXhdID0gYml0ID09PSAxXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6IHR5cGVCaXQgPT09IDEgPyAndXNlLWNhY2hlJyA6ICdzZXJ2ZXItYWN0aW9uJyxcbiAgICB1c2VkQXJnczogdXNlZEFyZ3MgYXMgW1xuICAgICAgYm9vbGVhbixcbiAgICAgIGJvb2xlYW4sXG4gICAgICBib29sZWFuLFxuICAgICAgYm9vbGVhbixcbiAgICAgIGJvb2xlYW4sXG4gICAgICBib29sZWFuLFxuICAgIF0sXG4gICAgaGFzUmVzdEFyZ3M6IHJlc3RBcmdzID09PSAxLFxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNwYXJzZSBhcnJheSBjb250YWluaW5nIG9ubHkgdGhlIHVzZWQgYXJndW1lbnRzIGJhc2VkIG9uIHRoZVxuICogcHJvdmlkZWQgYWN0aW9uIGluZm8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbWl0VW51c2VkQXJncyhcbiAgYXJnczogdW5rbm93bltdLFxuICBpbmZvOiBTZXJ2ZXJSZWZlcmVuY2VJbmZvXG4pOiB1bmtub3duW10ge1xuICBjb25zdCBmaWx0ZXJlZEFyZ3MgPSBuZXcgQXJyYXkoYXJncy5sZW5ndGgpXG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaWYgKFxuICAgICAgKGluZGV4IDwgNiAmJiBpbmZvLnVzZWRBcmdzW2luZGV4XSkgfHxcbiAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBzZXJ2ZXIgcmVmZXJlbmNlIGluZm8gYnl0ZSBoYXMgdGhlIHJlc3RBcmdzIGJpdFxuICAgICAgLy8gc2V0IHRvIDEgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiA2IGFyZ3MuXG4gICAgICAoaW5kZXggPj0gNiAmJiBpbmZvLmhhc1Jlc3RBcmdzKVxuICAgICkge1xuICAgICAgZmlsdGVyZWRBcmdzW2luZGV4XSA9IGFyZ3NbaW5kZXhdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpbHRlcmVkQXJnc1xufVxuIl0sIm5hbWVzIjpbImV4dHJhY3RJbmZvRnJvbVNlcnZlclJlZmVyZW5jZUlkIiwib21pdFVudXNlZEFyZ3MiLCJpZCIsImluZm9CeXRlIiwicGFyc2VJbnQiLCJzbGljZSIsInR5cGVCaXQiLCJhcmdNYXNrIiwicmVzdEFyZ3MiLCJ1c2VkQXJncyIsIkFycmF5IiwiaW5kZXgiLCJiaXRQb3NpdGlvbiIsImJpdCIsInR5cGUiLCJoYXNSZXN0QXJncyIsImFyZ3MiLCJpbmZvIiwiZmlsdGVyZWRBcmdzIiwibGVuZ3RoIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/server-reference-info.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/utils.js":
/*!************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/utils.js ***!
  \************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n    for(var name in all)Object.defineProperty(target, name, {\n        enumerable: true,\n        get: all[name]\n    });\n}\n_export(exports, {\n    DecodeError: function() {\n        return DecodeError;\n    },\n    MiddlewareNotFoundError: function() {\n        return MiddlewareNotFoundError;\n    },\n    MissingStaticPage: function() {\n        return MissingStaticPage;\n    },\n    NormalizeError: function() {\n        return NormalizeError;\n    },\n    PageNotFoundError: function() {\n        return PageNotFoundError;\n    },\n    SP: function() {\n        return SP;\n    },\n    ST: function() {\n        return ST;\n    },\n    WEB_VITALS: function() {\n        return WEB_VITALS;\n    },\n    execOnce: function() {\n        return execOnce;\n    },\n    getDisplayName: function() {\n        return getDisplayName;\n    },\n    getLocationOrigin: function() {\n        return getLocationOrigin;\n    },\n    getURL: function() {\n        return getURL;\n    },\n    isAbsoluteUrl: function() {\n        return isAbsoluteUrl;\n    },\n    isResSent: function() {\n        return isResSent;\n    },\n    loadGetInitialProps: function() {\n        return loadGetInitialProps;\n    },\n    normalizeRepeatedSlashes: function() {\n        return normalizeRepeatedSlashes;\n    },\n    stringifyError: function() {\n        return stringifyError;\n    }\n});\nconst WEB_VITALS = [\n    'CLS',\n    'FCP',\n    'FID',\n    'INP',\n    'LCP',\n    'TTFB'\n];\nfunction execOnce(fn) {\n    let used = false;\n    let result;\n    return function() {\n        for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n            args[_key] = arguments[_key];\n        }\n        if (!used) {\n            used = true;\n            result = fn(...args);\n        }\n        return result;\n    };\n}\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/;\nconst isAbsoluteUrl = (url)=>ABSOLUTE_URL_REGEX.test(url);\nfunction getLocationOrigin() {\n    const { protocol, hostname, port } = window.location;\n    return protocol + \"//\" + hostname + (port ? ':' + port : '');\n}\nfunction getURL() {\n    const { href } = window.location;\n    const origin = getLocationOrigin();\n    return href.substring(origin.length);\n}\nfunction getDisplayName(Component) {\n    return typeof Component === 'string' ? Component : Component.displayName || Component.name || 'Unknown';\n}\nfunction isResSent(res) {\n    return res.finished || res.headersSent;\n}\nfunction normalizeRepeatedSlashes(url) {\n    const urlParts = url.split('?');\n    const urlNoQuery = urlParts[0];\n    return urlNoQuery // first we replace any non-encoded backslashes with forward\n    // then normalize repeated forward slashes\n    .replace(/\\\\/g, '/').replace(/\\/\\/+/g, '/') + (urlParts[1] ? \"?\" + urlParts.slice(1).join('?') : '');\n}\nasync function loadGetInitialProps(App, ctx) {\n    if (true) {\n        var _App_prototype;\n        if ((_App_prototype = App.prototype) == null ? void 0 : _App_prototype.getInitialProps) {\n            const message = '\"' + getDisplayName(App) + '.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.';\n            throw Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n                value: \"E394\",\n                enumerable: false,\n                configurable: true\n            });\n        }\n    }\n    // when called from _app `ctx` is nested in `ctx`\n    const res = ctx.res || ctx.ctx && ctx.ctx.res;\n    if (!App.getInitialProps) {\n        if (ctx.ctx && ctx.Component) {\n            // @ts-ignore pageProps default\n            return {\n                pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx)\n            };\n        }\n        return {};\n    }\n    const props = await App.getInitialProps(ctx);\n    if (res && isResSent(res)) {\n        return props;\n    }\n    if (!props) {\n        const message = '\"' + getDisplayName(App) + '.getInitialProps()\" should resolve to an object. But found \"' + props + '\" instead.';\n        throw Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n            value: \"E394\",\n            enumerable: false,\n            configurable: true\n        });\n    }\n    if (true) {\n        if (Object.keys(props).length === 0 && !ctx.ctx) {\n            console.warn(\"\" + getDisplayName(App) + \" returned an empty object from `getInitialProps`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps\");\n        }\n    }\n    return props;\n}\nconst SP = typeof performance !== 'undefined';\nconst ST = SP && [\n    'mark',\n    'measure',\n    'getEntriesByName'\n].every((method)=>typeof performance[method] === 'function');\nclass DecodeError extends Error {\n}\nclass NormalizeError extends Error {\n}\nclass PageNotFoundError extends Error {\n    constructor(page){\n        super();\n        this.code = 'ENOENT';\n        this.name = 'PageNotFoundError';\n        this.message = \"Cannot find module for page: \" + page;\n    }\n}\nclass MissingStaticPage extends Error {\n    constructor(page, message){\n        super();\n        this.message = \"Failed to load static file for page: \" + page + \" \" + message;\n    }\n}\nclass MiddlewareNotFoundError extends Error {\n    constructor(){\n        super();\n        this.code = 'ENOENT';\n        this.message = \"Cannot find the middleware module\";\n    }\n}\nfunction stringifyError(error) {\n    return JSON.stringify({\n        message: error.message,\n        stack: error.stack\n    });\n} //# sourceMappingURL=utils.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3V0aWxzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQW9hYUEsV0FBVztlQUFYQTs7SUFvQkFDLHlCQUF1QjtlQUF2QkE7O0lBUEFDLGlCQUFpQjtlQUFqQkE7O0lBWkFDLGNBQWM7ZUFBZEE7O0lBQ0FDLGlCQUFpQjtlQUFqQkE7O0lBVEFDLEVBQUU7ZUFBRkE7O0lBQ0FDLEVBQUU7ZUFBRkE7O0lBbFhBQyxVQUFVO2VBQVZBOztJQXNRR0MsUUFBUTtlQUFSQTs7SUErQkFDLGNBQWM7ZUFBZEE7O0lBWEFDLGlCQUFpQjtlQUFqQkE7O0lBS0FDLE1BQU07ZUFBTkE7O0lBUEhDLGFBQWE7ZUFBYkE7O0lBbUJHQyxTQUFTO2VBQVRBOztJQWtCTUMsbUJBQW1CO2VBQW5CQTs7SUFkTkMsd0JBQXdCO2VBQXhCQTs7SUErR0FDLGNBQWM7ZUFBZEE7OztBQTlaVCxNQUFNVCxhQUFhO0lBQUM7SUFBTztJQUFPO0lBQU87SUFBTztJQUFPO0NBQU87QUFzUTlELFNBQVNDLFNBQ2RTLEVBQUs7SUFFTCxJQUFJQyxPQUFPO0lBQ1gsSUFBSUM7SUFFSixPQUFRO3lDQUFJQyxPQUFBQSxJQUFBQSxNQUFBQSxPQUFBQSxPQUFBQSxHQUFBQSxPQUFBQSxNQUFBQSxPQUFBQTtZQUFBQSxJQUFBQSxDQUFBQSxLQUFBQSxHQUFBQSxTQUFBQSxDQUFBQSxLQUFBQTs7UUFDVixJQUFJLENBQUNGLE1BQU07WUFDVEEsT0FBTztZQUNQQyxTQUFTRixNQUFNRztRQUNqQjtRQUNBLE9BQU9EO0lBQ1Q7QUFDRjtBQUVBLDBEQUEwRDtBQUMxRCxnRUFBZ0U7QUFDaEUsTUFBTUUscUJBQXFCO0FBQ3BCLE1BQU1ULGdCQUFnQixDQUFDVSxNQUFnQkQsbUJBQW1CRSxJQUFJLENBQUNEO0FBRS9ELFNBQVNaO0lBQ2QsTUFBTSxFQUFFYyxRQUFRLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxFQUFFLEdBQUdDLE9BQU9DLFFBQVE7SUFDcEQsT0FBVUosV0FBUyxPQUFJQyxXQUFXQyxDQUFBQSxPQUFPLE1BQU1BLE9BQU8sR0FBQztBQUN6RDtBQUVPLFNBQVNmO0lBQ2QsTUFBTSxFQUFFa0IsSUFBSSxFQUFFLEdBQUdGLE9BQU9DLFFBQVE7SUFDaEMsTUFBTUUsU0FBU3BCO0lBQ2YsT0FBT21CLEtBQUtFLFNBQVMsQ0FBQ0QsT0FBT0UsTUFBTTtBQUNyQztBQUVPLFNBQVN2QixlQUFrQndCLFNBQTJCO0lBQzNELE9BQU8sT0FBT0EsY0FBYyxXQUN4QkEsWUFDQUEsVUFBVUMsV0FBVyxJQUFJRCxVQUFVRSxJQUFJLElBQUk7QUFDakQ7QUFFTyxTQUFTdEIsVUFBVXVCLEdBQW1CO0lBQzNDLE9BQU9BLElBQUlDLFFBQVEsSUFBSUQsSUFBSUUsV0FBVztBQUN4QztBQUVPLFNBQVN2Qix5QkFBeUJPLEdBQVc7SUFDbEQsTUFBTWlCLFdBQVdqQixJQUFJa0IsS0FBSyxDQUFDO0lBQzNCLE1BQU1DLGFBQWFGLFFBQVEsQ0FBQyxFQUFFO0lBRTlCLE9BQ0VFLFdBQ0UsNERBQTREO0lBQzVELDBDQUEwQztLQUN6Q0MsT0FBTyxDQUFDLE9BQU8sS0FDZkEsT0FBTyxDQUFDLFVBQVUsT0FDcEJILENBQUFBLFFBQVEsQ0FBQyxFQUFFLEdBQUksTUFBR0EsU0FBU0ksS0FBSyxDQUFDLEdBQUdDLElBQUksQ0FBQyxPQUFTLEdBQUM7QUFFeEQ7QUFFTyxlQUFlOUIsb0JBSXBCK0IsR0FBZ0MsRUFBRUMsR0FBTTtJQUN4QyxJQUFJQyxJQUFvQixFQUFtQjtZQUNyQ0Y7UUFBSixLQUFJQSxpQkFBQUEsSUFBSUssU0FBQUEsS0FBUyxnQkFBYkwsZUFBZU0sZUFBZSxFQUFFO1lBQ2xDLE1BQU1DLFVBQVcsTUFBRzNDLGVBQ2xCb0MsT0FDQTtZQUNGLE1BQU0scUJBQWtCLENBQWxCLElBQUlRLE1BQU1ELFVBQVY7dUJBQUE7NEJBQUE7OEJBQUE7WUFBaUI7UUFDekI7SUFDRjtJQUNBLGlEQUFpRDtJQUNqRCxNQUFNaEIsTUFBTVUsSUFBSVYsR0FBRyxJQUFLVSxJQUFJQSxHQUFHLElBQUlBLElBQUlBLEdBQUcsQ0FBQ1YsR0FBRztJQUU5QyxJQUFJLENBQUNTLElBQUlNLGVBQWUsRUFBRTtRQUN4QixJQUFJTCxJQUFJQSxHQUFHLElBQUlBLElBQUliLFNBQVMsRUFBRTtZQUM1QiwrQkFBK0I7WUFDL0IsT0FBTztnQkFDTHFCLFdBQVcsTUFBTXhDLG9CQUFvQmdDLElBQUliLFNBQVMsRUFBRWEsSUFBSUEsR0FBRztZQUM3RDtRQUNGO1FBQ0EsT0FBTyxDQUFDO0lBQ1Y7SUFFQSxNQUFNUyxRQUFRLE1BQU1WLElBQUlNLGVBQWUsQ0FBQ0w7SUFFeEMsSUFBSVYsT0FBT3ZCLFVBQVV1QixNQUFNO1FBQ3pCLE9BQU9tQjtJQUNUO0lBRUEsSUFBSSxDQUFDQSxPQUFPO1FBQ1YsTUFBTUgsVUFBVyxNQUFHM0MsZUFDbEJvQyxPQUNBLGlFQUE4RFUsUUFBTTtRQUN0RSxNQUFNLHFCQUFrQixDQUFsQixJQUFJRixNQUFNRCxVQUFWO21CQUFBO3dCQUFBOzBCQUFBO1FBQWlCO0lBQ3pCO0lBRUEsSUFBSUwsSUFBb0IsRUFBbUI7UUFDekMsSUFBSVMsT0FBT0MsSUFBSSxDQUFDRixPQUFPdkIsTUFBTSxLQUFLLEtBQUssQ0FBQ2MsSUFBSUEsR0FBRyxFQUFFO1lBQy9DWSxRQUFRQyxJQUFJLENBQ1QsS0FBRWxELGVBQ0RvQyxPQUNBO1FBRU47SUFDRjtJQUVBLE9BQU9VO0FBQ1Q7QUFFTyxNQUFNbEQsS0FBSyxPQUFPdUQsZ0JBQWdCO0FBQ2xDLE1BQU10RCxLQUNYRCxNQUNDO0lBQUM7SUFBUTtJQUFXO0NBQW1CLENBQVd3RCxLQUFLLENBQ3RELENBQUNDLFNBQVcsT0FBT0YsV0FBVyxDQUFDRSxPQUFPLEtBQUs7QUFHeEMsTUFBTTlELG9CQUFvQnFEO0FBQU87QUFDakMsTUFBTWxELHVCQUF1QmtEO0FBQU87QUFDcEMsTUFBTWpELDBCQUEwQmlEO0lBR3JDVSxZQUFZQyxJQUFZLENBQUU7UUFDeEIsS0FBSztRQUNMLElBQUksQ0FBQ0MsSUFBSSxHQUFHO1FBQ1osSUFBSSxDQUFDOUIsSUFBSSxHQUFHO1FBQ1osSUFBSSxDQUFDaUIsT0FBTyxHQUFJLGtDQUErQlk7SUFDakQ7QUFDRjtBQUVPLE1BQU05RCwwQkFBMEJtRDtJQUNyQ1UsWUFBWUMsSUFBWSxFQUFFWixPQUFlLENBQUU7UUFDekMsS0FBSztRQUNMLElBQUksQ0FBQ0EsT0FBTyxHQUFJLDBDQUF1Q1ksT0FBSyxNQUFHWjtJQUNqRTtBQUNGO0FBRU8sTUFBTW5ELGdDQUFnQ29EO0lBRTNDVSxhQUFjO1FBQ1osS0FBSztRQUNMLElBQUksQ0FBQ0UsSUFBSSxHQUFHO1FBQ1osSUFBSSxDQUFDYixPQUFPLEdBQUk7SUFDbEI7QUFDRjtBQVdPLFNBQVNwQyxlQUFla0QsS0FBWTtJQUN6QyxPQUFPQyxLQUFLQyxTQUFTLENBQUM7UUFBRWhCLFNBQVNjLE1BQU1kLE9BQU87UUFBRWlCLE9BQU9ILE1BQU1HLEtBQUs7SUFBQztBQUNyRSIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9zcmMvc2hhcmVkL2xpYi91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEh0bWxQcm9wcyB9IGZyb20gJy4vaHRtbC1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRUeXBlLCBKU1ggfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRG9tYWluTG9jYWxlIH0gZnJvbSAnLi4vLi4vc2VydmVyL2NvbmZpZydcbmltcG9ydCB0eXBlIHsgRW52IH0gZnJvbSAnQG5leHQvZW52J1xuaW1wb3J0IHR5cGUgeyBJbmNvbWluZ01lc3NhZ2UsIFNlcnZlclJlc3BvbnNlIH0gZnJvbSAnaHR0cCdcbmltcG9ydCB0eXBlIHsgTmV4dFJvdXRlciB9IGZyb20gJy4vcm91dGVyL3JvdXRlcidcbmltcG9ydCB0eXBlIHsgUGFyc2VkVXJsUXVlcnkgfSBmcm9tICdxdWVyeXN0cmluZydcbmltcG9ydCB0eXBlIHsgUHJldmlld0RhdGEgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB0eXBlIHsgQ09NUElMRVJfTkFNRVMgfSBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIGZzIGZyb20gJ2ZzJ1xuXG5leHBvcnQgdHlwZSBOZXh0Q29tcG9uZW50VHlwZTxcbiAgQ29udGV4dCBleHRlbmRzIEJhc2VDb250ZXh0ID0gTmV4dFBhZ2VDb250ZXh0LFxuICBJbml0aWFsUHJvcHMgPSB7fSxcbiAgUHJvcHMgPSB7fSxcbj4gPSBDb21wb25lbnRUeXBlPFByb3BzPiAmIHtcbiAgLyoqXG4gICAqIFVzZWQgZm9yIGluaXRpYWwgcGFnZSBsb2FkIGRhdGEgcG9wdWxhdGlvbi4gRGF0YSByZXR1cm5lZCBmcm9tIGBnZXRJbml0aWFsUHJvcHNgIGlzIHNlcmlhbGl6ZWQgd2hlbiBzZXJ2ZXIgcmVuZGVyZWQuXG4gICAqIE1ha2Ugc3VyZSB0byByZXR1cm4gcGxhaW4gYE9iamVjdGAgd2l0aG91dCB1c2luZyBgRGF0ZWAsIGBNYXBgLCBgU2V0YC5cbiAgICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCBvZiBgcGFnZWBcbiAgICovXG4gIGdldEluaXRpYWxQcm9wcz8oY29udGV4dDogQ29udGV4dCk6IEluaXRpYWxQcm9wcyB8IFByb21pc2U8SW5pdGlhbFByb3BzPlxufVxuXG5leHBvcnQgdHlwZSBEb2N1bWVudFR5cGUgPSBOZXh0Q29tcG9uZW50VHlwZTxcbiAgRG9jdW1lbnRDb250ZXh0LFxuICBEb2N1bWVudEluaXRpYWxQcm9wcyxcbiAgRG9jdW1lbnRQcm9wc1xuPlxuXG5leHBvcnQgdHlwZSBBcHBUeXBlPFAgPSB7fT4gPSBOZXh0Q29tcG9uZW50VHlwZTxcbiAgQXBwQ29udGV4dFR5cGUsXG4gIFAsXG4gIEFwcFByb3BzVHlwZTxhbnksIFA+XG4+XG5cbmV4cG9ydCB0eXBlIEFwcFRyZWVUeXBlID0gQ29tcG9uZW50VHlwZTxcbiAgQXBwSW5pdGlhbFByb3BzICYgeyBbbmFtZTogc3RyaW5nXTogYW55IH1cbj5cblxuLyoqXG4gKiBXZWIgdml0YWxzIHByb3ZpZGVkIHRvIF9hcHAucmVwb3J0V2ViVml0YWxzIGJ5IENvcmUgV2ViIFZpdGFscyBwbHVnaW4gZGV2ZWxvcGVkIGJ5IEdvb2dsZSBDaHJvbWUgdGVhbS5cbiAqIGh0dHBzOi8vbmV4dGpzLm9yZy9ibG9nL25leHQtOS00I2ludGVncmF0ZWQtd2ViLXZpdGFscy1yZXBvcnRpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IFdFQl9WSVRBTFMgPSBbJ0NMUycsICdGQ1AnLCAnRklEJywgJ0lOUCcsICdMQ1AnLCAnVFRGQiddIGFzIGNvbnN0XG5leHBvcnQgdHlwZSBOZXh0V2ViVml0YWxzTWV0cmljID0ge1xuICBpZDogc3RyaW5nXG4gIHN0YXJ0VGltZTogbnVtYmVyXG4gIHZhbHVlOiBudW1iZXJcbiAgYXR0cmlidXRpb24/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfVxufSAmIChcbiAgfCB7XG4gICAgICBsYWJlbDogJ3dlYi12aXRhbCdcbiAgICAgIG5hbWU6ICh0eXBlb2YgV0VCX1ZJVEFMUylbbnVtYmVyXVxuICAgIH1cbiAgfCB7XG4gICAgICBsYWJlbDogJ2N1c3RvbSdcbiAgICAgIG5hbWU6XG4gICAgICAgIHwgJ05leHQuanMtaHlkcmF0aW9uJ1xuICAgICAgICB8ICdOZXh0LmpzLXJvdXRlLWNoYW5nZS10by1yZW5kZXInXG4gICAgICAgIHwgJ05leHQuanMtcmVuZGVyJ1xuICAgIH1cbilcblxuZXhwb3J0IHR5cGUgRW5oYW5jZXI8Qz4gPSAoQ29tcG9uZW50OiBDKSA9PiBDXG5cbmV4cG9ydCB0eXBlIENvbXBvbmVudHNFbmhhbmNlciA9XG4gIHwge1xuICAgICAgZW5oYW5jZUFwcD86IEVuaGFuY2VyPEFwcFR5cGU+XG4gICAgICBlbmhhbmNlQ29tcG9uZW50PzogRW5oYW5jZXI8TmV4dENvbXBvbmVudFR5cGU+XG4gICAgfVxuICB8IEVuaGFuY2VyPE5leHRDb21wb25lbnRUeXBlPlxuXG5leHBvcnQgdHlwZSBSZW5kZXJQYWdlUmVzdWx0ID0ge1xuICBodG1sOiBzdHJpbmdcbiAgaGVhZD86IEFycmF5PEpTWC5FbGVtZW50IHwgbnVsbD5cbn1cblxuZXhwb3J0IHR5cGUgUmVuZGVyUGFnZSA9IChcbiAgb3B0aW9ucz86IENvbXBvbmVudHNFbmhhbmNlclxuKSA9PiBEb2N1bWVudEluaXRpYWxQcm9wcyB8IFByb21pc2U8RG9jdW1lbnRJbml0aWFsUHJvcHM+XG5cbmV4cG9ydCB0eXBlIEJhc2VDb250ZXh0ID0ge1xuICByZXM/OiBTZXJ2ZXJSZXNwb25zZVxuICBbazogc3RyaW5nXTogYW55XG59XG5cbmV4cG9ydCB0eXBlIE5FWFRfREFUQSA9IHtcbiAgcHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT5cbiAgcGFnZTogc3RyaW5nXG4gIHF1ZXJ5OiBQYXJzZWRVcmxRdWVyeVxuICBidWlsZElkOiBzdHJpbmdcbiAgYXNzZXRQcmVmaXg/OiBzdHJpbmdcbiAgcnVudGltZUNvbmZpZz86IHsgW2tleTogc3RyaW5nXTogYW55IH1cbiAgbmV4dEV4cG9ydD86IGJvb2xlYW5cbiAgYXV0b0V4cG9ydD86IGJvb2xlYW5cbiAgaXNGYWxsYmFjaz86IGJvb2xlYW5cbiAgaXNFeHBlcmltZW50YWxDb21waWxlPzogYm9vbGVhblxuICBkeW5hbWljSWRzPzogKHN0cmluZyB8IG51bWJlcilbXVxuICBlcnI/OiBFcnJvciAmIHtcbiAgICBzdGF0dXNDb2RlPzogbnVtYmVyXG4gICAgc291cmNlPzogdHlwZW9mIENPTVBJTEVSX05BTUVTLnNlcnZlciB8IHR5cGVvZiBDT01QSUxFUl9OQU1FUy5lZGdlU2VydmVyXG4gIH1cbiAgZ3NwPzogYm9vbGVhblxuICBnc3NwPzogYm9vbGVhblxuICBjdXN0b21TZXJ2ZXI/OiBib29sZWFuXG4gIGdpcD86IGJvb2xlYW5cbiAgYXBwR2lwPzogYm9vbGVhblxuICBsb2NhbGU/OiBzdHJpbmdcbiAgbG9jYWxlcz86IHJlYWRvbmx5IHN0cmluZ1tdXG4gIGRlZmF1bHRMb2NhbGU/OiBzdHJpbmdcbiAgZG9tYWluTG9jYWxlcz86IHJlYWRvbmx5IERvbWFpbkxvY2FsZVtdXG4gIHNjcmlwdExvYWRlcj86IGFueVtdXG4gIGlzUHJldmlldz86IGJvb2xlYW5cbiAgbm90Rm91bmRTcmNQYWdlPzogc3RyaW5nXG59XG5cbi8qKlxuICogYE5leHRgIGNvbnRleHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXh0UGFnZUNvbnRleHQge1xuICAvKipcbiAgICogRXJyb3Igb2JqZWN0IGlmIGVuY291bnRlcmVkIGR1cmluZyByZW5kZXJpbmdcbiAgICovXG4gIGVycj86IChFcnJvciAmIHsgc3RhdHVzQ29kZT86IG51bWJlciB9KSB8IG51bGxcbiAgLyoqXG4gICAqIGBIVFRQYCByZXF1ZXN0IG9iamVjdC5cbiAgICovXG4gIHJlcT86IEluY29taW5nTWVzc2FnZVxuICAvKipcbiAgICogYEhUVFBgIHJlc3BvbnNlIG9iamVjdC5cbiAgICovXG4gIHJlcz86IFNlcnZlclJlc3BvbnNlXG4gIC8qKlxuICAgKiBQYXRoIHNlY3Rpb24gb2YgYFVSTGAuXG4gICAqL1xuICBwYXRobmFtZTogc3RyaW5nXG4gIC8qKlxuICAgKiBRdWVyeSBzdHJpbmcgc2VjdGlvbiBvZiBgVVJMYCBwYXJzZWQgYXMgYW4gb2JqZWN0LlxuICAgKi9cbiAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5XG4gIC8qKlxuICAgKiBgU3RyaW5nYCBvZiB0aGUgYWN0dWFsIHBhdGggaW5jbHVkaW5nIHF1ZXJ5LlxuICAgKi9cbiAgYXNQYXRoPzogc3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBsb2NhbGVcbiAgICovXG4gIGxvY2FsZT86IHN0cmluZ1xuICAvKipcbiAgICogQWxsIGNvbmZpZ3VyZWQgbG9jYWxlc1xuICAgKi9cbiAgbG9jYWxlcz86IHJlYWRvbmx5IHN0cmluZ1tdXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJlZCBkZWZhdWx0IGxvY2FsZVxuICAgKi9cbiAgZGVmYXVsdExvY2FsZT86IHN0cmluZ1xuICAvKipcbiAgICogYENvbXBvbmVudGAgdGhlIHRyZWUgb2YgdGhlIEFwcCB0byB1c2UgaWYgbmVlZGluZyB0byByZW5kZXIgc2VwYXJhdGVseVxuICAgKi9cbiAgQXBwVHJlZTogQXBwVHJlZVR5cGVcbn1cblxuZXhwb3J0IHR5cGUgQXBwQ29udGV4dFR5cGU8Um91dGVyIGV4dGVuZHMgTmV4dFJvdXRlciA9IE5leHRSb3V0ZXI+ID0ge1xuICBDb21wb25lbnQ6IE5leHRDb21wb25lbnRUeXBlPE5leHRQYWdlQ29udGV4dD5cbiAgQXBwVHJlZTogQXBwVHJlZVR5cGVcbiAgY3R4OiBOZXh0UGFnZUNvbnRleHRcbiAgcm91dGVyOiBSb3V0ZXJcbn1cblxuZXhwb3J0IHR5cGUgQXBwSW5pdGlhbFByb3BzPFBhZ2VQcm9wcyA9IGFueT4gPSB7XG4gIHBhZ2VQcm9wczogUGFnZVByb3BzXG59XG5cbmV4cG9ydCB0eXBlIEFwcFByb3BzVHlwZTxcbiAgUm91dGVyIGV4dGVuZHMgTmV4dFJvdXRlciA9IE5leHRSb3V0ZXIsXG4gIFBhZ2VQcm9wcyA9IHt9LFxuPiA9IEFwcEluaXRpYWxQcm9wczxQYWdlUHJvcHM+ICYge1xuICBDb21wb25lbnQ6IE5leHRDb21wb25lbnRUeXBlPE5leHRQYWdlQ29udGV4dCwgYW55LCBhbnk+XG4gIHJvdXRlcjogUm91dGVyXG4gIF9fTl9TU0c/OiBib29sZWFuXG4gIF9fTl9TU1A/OiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIERvY3VtZW50Q29udGV4dCA9IE5leHRQYWdlQ29udGV4dCAmIHtcbiAgcmVuZGVyUGFnZTogUmVuZGVyUGFnZVxuICBkZWZhdWx0R2V0SW5pdGlhbFByb3BzKFxuICAgIGN0eDogRG9jdW1lbnRDb250ZXh0LFxuICAgIG9wdGlvbnM/OiB7IG5vbmNlPzogc3RyaW5nIH1cbiAgKTogUHJvbWlzZTxEb2N1bWVudEluaXRpYWxQcm9wcz5cbn1cblxuZXhwb3J0IHR5cGUgRG9jdW1lbnRJbml0aWFsUHJvcHMgPSBSZW5kZXJQYWdlUmVzdWx0ICYge1xuICBzdHlsZXM/OiBSZWFjdC5SZWFjdEVsZW1lbnRbXSB8IEl0ZXJhYmxlPFJlYWN0LlJlYWN0Tm9kZT4gfCBKU1guRWxlbWVudFxufVxuXG5leHBvcnQgdHlwZSBEb2N1bWVudFByb3BzID0gRG9jdW1lbnRJbml0aWFsUHJvcHMgJiBIdG1sUHJvcHNcblxuLyoqXG4gKiBOZXh0IGBBUElgIHJvdXRlIHJlcXVlc3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXh0QXBpUmVxdWVzdCBleHRlbmRzIEluY29taW5nTWVzc2FnZSB7XG4gIC8qKlxuICAgKiBPYmplY3Qgb2YgYHF1ZXJ5YCB2YWx1ZXMgZnJvbSB1cmxcbiAgICovXG4gIHF1ZXJ5OiBQYXJ0aWFsPHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXVxuICB9PlxuICAvKipcbiAgICogT2JqZWN0IG9mIGBjb29raWVzYCBmcm9tIGhlYWRlclxuICAgKi9cbiAgY29va2llczogUGFydGlhbDx7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nXG4gIH0+XG5cbiAgYm9keTogYW55XG5cbiAgZW52OiBFbnZcblxuICBkcmFmdE1vZGU/OiBib29sZWFuXG5cbiAgcHJldmlldz86IGJvb2xlYW5cbiAgLyoqXG4gICAqIFByZXZpZXcgZGF0YSBzZXQgb24gdGhlIHJlcXVlc3QsIGlmIGFueVxuICAgKiAqL1xuICBwcmV2aWV3RGF0YT86IFByZXZpZXdEYXRhXG59XG5cbi8qKlxuICogU2VuZCBib2R5IG9mIHJlc3BvbnNlXG4gKi9cbnR5cGUgU2VuZDxUPiA9IChib2R5OiBUKSA9PiB2b2lkXG5cbi8qKlxuICogTmV4dCBgQVBJYCByb3V0ZSByZXNwb25zZVxuICovXG5leHBvcnQgdHlwZSBOZXh0QXBpUmVzcG9uc2U8RGF0YSA9IGFueT4gPSBTZXJ2ZXJSZXNwb25zZSAmIHtcbiAgLyoqXG4gICAqIFNlbmQgZGF0YSBgYW55YCBkYXRhIGluIHJlc3BvbnNlXG4gICAqL1xuICBzZW5kOiBTZW5kPERhdGE+XG4gIC8qKlxuICAgKiBTZW5kIGRhdGEgYGpzb25gIGRhdGEgaW4gcmVzcG9uc2VcbiAgICovXG4gIGpzb246IFNlbmQ8RGF0YT5cbiAgc3RhdHVzOiAoc3RhdHVzQ29kZTogbnVtYmVyKSA9PiBOZXh0QXBpUmVzcG9uc2U8RGF0YT5cbiAgcmVkaXJlY3QodXJsOiBzdHJpbmcpOiBOZXh0QXBpUmVzcG9uc2U8RGF0YT5cbiAgcmVkaXJlY3Qoc3RhdHVzOiBudW1iZXIsIHVybDogc3RyaW5nKTogTmV4dEFwaVJlc3BvbnNlPERhdGE+XG5cbiAgLyoqXG4gICAqIFNldCBkcmFmdCBtb2RlXG4gICAqL1xuICBzZXREcmFmdE1vZGU6IChvcHRpb25zOiB7IGVuYWJsZTogYm9vbGVhbiB9KSA9PiBOZXh0QXBpUmVzcG9uc2U8RGF0YT5cblxuICAvKipcbiAgICogU2V0IHByZXZpZXcgZGF0YSBmb3IgTmV4dC5qcycgcHJlcmVuZGVyIG1vZGVcbiAgICovXG4gIHNldFByZXZpZXdEYXRhOiAoXG4gICAgZGF0YTogb2JqZWN0IHwgc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICAvKipcbiAgICAgICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIChpbiBzZWNvbmRzKSBmb3IgdGhlIHByZXZpZXcgc2Vzc2lvbiB0byBsYXN0IGZvci5cbiAgICAgICAqIFRoZSBnaXZlbiBudW1iZXIgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlciBieSByb3VuZGluZyBkb3duLlxuICAgICAgICogQnkgZGVmYXVsdCwgbm8gbWF4aW11bSBhZ2UgaXMgc2V0IGFuZCB0aGUgcHJldmlldyBzZXNzaW9uIGZpbmlzaGVzXG4gICAgICAgKiB3aGVuIHRoZSBjbGllbnQgc2h1dHMgZG93biAoYnJvd3NlciBpcyBjbG9zZWQpLlxuICAgICAgICovXG4gICAgICBtYXhBZ2U/OiBudW1iZXJcbiAgICAgIC8qKlxuICAgICAgICogU3BlY2lmaWVzIHRoZSBwYXRoIGZvciB0aGUgcHJldmlldyBzZXNzaW9uIHRvIHdvcmsgdW5kZXIuIEJ5IGRlZmF1bHQsXG4gICAgICAgKiB0aGUgcGF0aCBpcyBjb25zaWRlcmVkIHRoZSBcImRlZmF1bHQgcGF0aFwiLCBpLmUuLCBhbnkgcGFnZXMgdW5kZXIgXCIvXCIuXG4gICAgICAgKi9cbiAgICAgIHBhdGg/OiBzdHJpbmdcbiAgICB9XG4gICkgPT4gTmV4dEFwaVJlc3BvbnNlPERhdGE+XG5cbiAgLyoqXG4gICAqIENsZWFyIHByZXZpZXcgZGF0YSBmb3IgTmV4dC5qcycgcHJlcmVuZGVyIG1vZGVcbiAgICovXG4gIGNsZWFyUHJldmlld0RhdGE6IChvcHRpb25zPzogeyBwYXRoPzogc3RyaW5nIH0pID0+IE5leHRBcGlSZXNwb25zZTxEYXRhPlxuXG4gIC8qKlxuICAgKiBSZXZhbGlkYXRlIGEgc3BlY2lmaWMgcGFnZSBhbmQgcmVnZW5lcmF0ZSBpdCB1c2luZyBPbi1EZW1hbmQgSW5jcmVtZW50YWxcbiAgICogU3RhdGljIFJlZ2VuZXJhdGlvbi5cbiAgICogVGhlIHBhdGggc2hvdWxkIGJlIGFuIGFjdHVhbCBwYXRoLCBub3QgYSByZXdyaXR0ZW4gcGF0aC4gRS5nLiBmb3JcbiAgICogXCIvYmxvZy9bc2x1Z11cIiB0aGlzIHNob3VsZCBiZSBcIi9ibG9nL3Bvc3QtMVwiLlxuICAgKiBAbGluayBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9kYXRhLWZldGNoaW5nL2luY3JlbWVudGFsLXN0YXRpYy1yZWdlbmVyYXRpb24jb24tZGVtYW5kLXJldmFsaWRhdGlvbi13aXRoLXJldmFsaWRhdGVwYXRoXG4gICAqL1xuICByZXZhbGlkYXRlOiAoXG4gICAgdXJsUGF0aDogc3RyaW5nLFxuICAgIG9wdHM/OiB7XG4gICAgICB1bnN0YWJsZV9vbmx5R2VuZXJhdGVkPzogYm9vbGVhblxuICAgIH1cbiAgKSA9PiBQcm9taXNlPHZvaWQ+XG59XG5cbi8qKlxuICogTmV4dCBgQVBJYCByb3V0ZSBoYW5kbGVyXG4gKi9cbmV4cG9ydCB0eXBlIE5leHRBcGlIYW5kbGVyPFQgPSBhbnk+ID0gKFxuICByZXE6IE5leHRBcGlSZXF1ZXN0LFxuICByZXM6IE5leHRBcGlSZXNwb25zZTxUPlxuKSA9PiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPlxuXG4vKipcbiAqIFV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjT25jZTxUIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBSZXR1cm5UeXBlPFQ+PihcbiAgZm46IFRcbik6IFQge1xuICBsZXQgdXNlZCA9IGZhbHNlXG4gIGxldCByZXN1bHQ6IFJldHVyblR5cGU8VD5cblxuICByZXR1cm4gKCguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgIGlmICghdXNlZCkge1xuICAgICAgdXNlZCA9IHRydWVcbiAgICAgIHJlc3VsdCA9IGZuKC4uLmFyZ3MpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfSkgYXMgVFxufVxuXG4vLyBTY2hlbWU6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4xXG4vLyBBYnNvbHV0ZSBVUkw6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4zXG5jb25zdCBBQlNPTFVURV9VUkxfUkVHRVggPSAvXlthLXpBLVpdW2EtekEtWlxcZCtcXC0uXSo/Oi9cbmV4cG9ydCBjb25zdCBpc0Fic29sdXRlVXJsID0gKHVybDogc3RyaW5nKSA9PiBBQlNPTFVURV9VUkxfUkVHRVgudGVzdCh1cmwpXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhdGlvbk9yaWdpbigpIHtcbiAgY29uc3QgeyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQgfSA9IHdpbmRvdy5sb2NhdGlvblxuICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfSR7cG9ydCA/ICc6JyArIHBvcnQgOiAnJ31gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVUkwoKSB7XG4gIGNvbnN0IHsgaHJlZiB9ID0gd2luZG93LmxvY2F0aW9uXG4gIGNvbnN0IG9yaWdpbiA9IGdldExvY2F0aW9uT3JpZ2luKClcbiAgcmV0dXJuIGhyZWYuc3Vic3RyaW5nKG9yaWdpbi5sZW5ndGgpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZTxQPihDb21wb25lbnQ6IENvbXBvbmVudFR5cGU8UD4pIHtcbiAgcmV0dXJuIHR5cGVvZiBDb21wb25lbnQgPT09ICdzdHJpbmcnXG4gICAgPyBDb21wb25lbnRcbiAgICA6IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnVW5rbm93bidcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVzU2VudChyZXM6IFNlcnZlclJlc3BvbnNlKSB7XG4gIHJldHVybiByZXMuZmluaXNoZWQgfHwgcmVzLmhlYWRlcnNTZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVSZXBlYXRlZFNsYXNoZXModXJsOiBzdHJpbmcpIHtcbiAgY29uc3QgdXJsUGFydHMgPSB1cmwuc3BsaXQoJz8nKVxuICBjb25zdCB1cmxOb1F1ZXJ5ID0gdXJsUGFydHNbMF1cblxuICByZXR1cm4gKFxuICAgIHVybE5vUXVlcnlcbiAgICAgIC8vIGZpcnN0IHdlIHJlcGxhY2UgYW55IG5vbi1lbmNvZGVkIGJhY2tzbGFzaGVzIHdpdGggZm9yd2FyZFxuICAgICAgLy8gdGhlbiBub3JtYWxpemUgcmVwZWF0ZWQgZm9yd2FyZCBzbGFzaGVzXG4gICAgICAucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gICAgICAucmVwbGFjZSgvXFwvXFwvKy9nLCAnLycpICtcbiAgICAodXJsUGFydHNbMV0gPyBgPyR7dXJsUGFydHMuc2xpY2UoMSkuam9pbignPycpfWAgOiAnJylcbiAgKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEdldEluaXRpYWxQcm9wczxcbiAgQyBleHRlbmRzIEJhc2VDb250ZXh0LFxuICBJUCA9IHt9LFxuICBQID0ge30sXG4+KEFwcDogTmV4dENvbXBvbmVudFR5cGU8QywgSVAsIFA+LCBjdHg6IEMpOiBQcm9taXNlPElQPiB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKEFwcC5wcm90b3R5cGU/LmdldEluaXRpYWxQcm9wcykge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGBcIiR7Z2V0RGlzcGxheU5hbWUoXG4gICAgICAgIEFwcFxuICAgICAgKX0uZ2V0SW5pdGlhbFByb3BzKClcIiBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCAtIHZpc2l0IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2dldC1pbml0aWFsLXByb3BzLWFzLWFuLWluc3RhbmNlLW1ldGhvZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSlcbiAgICB9XG4gIH1cbiAgLy8gd2hlbiBjYWxsZWQgZnJvbSBfYXBwIGBjdHhgIGlzIG5lc3RlZCBpbiBgY3R4YFxuICBjb25zdCByZXMgPSBjdHgucmVzIHx8IChjdHguY3R4ICYmIGN0eC5jdHgucmVzKVxuXG4gIGlmICghQXBwLmdldEluaXRpYWxQcm9wcykge1xuICAgIGlmIChjdHguY3R4ICYmIGN0eC5Db21wb25lbnQpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgcGFnZVByb3BzIGRlZmF1bHRcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhZ2VQcm9wczogYXdhaXQgbG9hZEdldEluaXRpYWxQcm9wcyhjdHguQ29tcG9uZW50LCBjdHguY3R4KSxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9IGFzIElQXG4gIH1cblxuICBjb25zdCBwcm9wcyA9IGF3YWl0IEFwcC5nZXRJbml0aWFsUHJvcHMoY3R4KVxuXG4gIGlmIChyZXMgJiYgaXNSZXNTZW50KHJlcykpIHtcbiAgICByZXR1cm4gcHJvcHNcbiAgfVxuXG4gIGlmICghcHJvcHMpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYFwiJHtnZXREaXNwbGF5TmFtZShcbiAgICAgIEFwcFxuICAgICl9LmdldEluaXRpYWxQcm9wcygpXCIgc2hvdWxkIHJlc29sdmUgdG8gYW4gb2JqZWN0LiBCdXQgZm91bmQgXCIke3Byb3BzfVwiIGluc3RlYWQuYFxuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKVxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoT2JqZWN0LmtleXMocHJvcHMpLmxlbmd0aCA9PT0gMCAmJiAhY3R4LmN0eCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgJHtnZXREaXNwbGF5TmFtZShcbiAgICAgICAgICBBcHBcbiAgICAgICAgKX0gcmV0dXJuZWQgYW4gZW1wdHkgb2JqZWN0IGZyb20gXFxgZ2V0SW5pdGlhbFByb3BzXFxgLiBUaGlzIGRlLW9wdGltaXplcyBhbmQgcHJldmVudHMgYXV0b21hdGljIHN0YXRpYyBvcHRpbWl6YXRpb24uIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL2VtcHR5LW9iamVjdC1nZXRJbml0aWFsUHJvcHNgXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByb3BzXG59XG5cbmV4cG9ydCBjb25zdCBTUCA9IHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gJ3VuZGVmaW5lZCdcbmV4cG9ydCBjb25zdCBTVCA9XG4gIFNQICYmXG4gIChbJ21hcmsnLCAnbWVhc3VyZScsICdnZXRFbnRyaWVzQnlOYW1lJ10gYXMgY29uc3QpLmV2ZXJ5KFxuICAgIChtZXRob2QpID0+IHR5cGVvZiBwZXJmb3JtYW5jZVttZXRob2RdID09PSAnZnVuY3Rpb24nXG4gIClcblxuZXhwb3J0IGNsYXNzIERlY29kZUVycm9yIGV4dGVuZHMgRXJyb3Ige31cbmV4cG9ydCBjbGFzcyBOb3JtYWxpemVFcnJvciBleHRlbmRzIEVycm9yIHt9XG5leHBvcnQgY2xhc3MgUGFnZU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvZGU6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLmNvZGUgPSAnRU5PRU5UJ1xuICAgIHRoaXMubmFtZSA9ICdQYWdlTm90Rm91bmRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBgQ2Fubm90IGZpbmQgbW9kdWxlIGZvciBwYWdlOiAke3BhZ2V9YFxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNaXNzaW5nU3RhdGljUGFnZSBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocGFnZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5tZXNzYWdlID0gYEZhaWxlZCB0byBsb2FkIHN0YXRpYyBmaWxlIGZvciBwYWdlOiAke3BhZ2V9ICR7bWVzc2FnZX1gXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1pZGRsZXdhcmVOb3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb2RlOiBzdHJpbmdcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuY29kZSA9ICdFTk9FTlQnXG4gICAgdGhpcy5tZXNzYWdlID0gYENhbm5vdCBmaW5kIHRoZSBtaWRkbGV3YXJlIG1vZHVsZWBcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlRnMge1xuICBleGlzdHNTeW5jOiB0eXBlb2YgZnMuZXhpc3RzU3luY1xuICByZWFkRmlsZTogdHlwZW9mIGZzLnByb21pc2VzLnJlYWRGaWxlXG4gIHJlYWRGaWxlU3luYzogdHlwZW9mIGZzLnJlYWRGaWxlU3luY1xuICB3cml0ZUZpbGUoZjogc3RyaW5nLCBkOiBhbnkpOiBQcm9taXNlPHZvaWQ+XG4gIG1rZGlyKGRpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkIHwgc3RyaW5nPlxuICBzdGF0KGY6IHN0cmluZyk6IFByb21pc2U8eyBtdGltZTogRGF0ZSB9PlxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5RXJyb3IoZXJyb3I6IEVycm9yKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFjayB9KVxufVxuIl0sIm5hbWVzIjpbIkRlY29kZUVycm9yIiwiTWlkZGxld2FyZU5vdEZvdW5kRXJyb3IiLCJNaXNzaW5nU3RhdGljUGFnZSIsIk5vcm1hbGl6ZUVycm9yIiwiUGFnZU5vdEZvdW5kRXJyb3IiLCJTUCIsIlNUIiwiV0VCX1ZJVEFMUyIsImV4ZWNPbmNlIiwiZ2V0RGlzcGxheU5hbWUiLCJnZXRMb2NhdGlvbk9yaWdpbiIsImdldFVSTCIsImlzQWJzb2x1dGVVcmwiLCJpc1Jlc1NlbnQiLCJsb2FkR2V0SW5pdGlhbFByb3BzIiwibm9ybWFsaXplUmVwZWF0ZWRTbGFzaGVzIiwic3RyaW5naWZ5RXJyb3IiLCJmbiIsInVzZWQiLCJyZXN1bHQiLCJhcmdzIiwiQUJTT0xVVEVfVVJMX1JFR0VYIiwidXJsIiwidGVzdCIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJwb3J0Iiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwib3JpZ2luIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiQ29tcG9uZW50IiwiZGlzcGxheU5hbWUiLCJuYW1lIiwicmVzIiwiZmluaXNoZWQiLCJoZWFkZXJzU2VudCIsInVybFBhcnRzIiwic3BsaXQiLCJ1cmxOb1F1ZXJ5IiwicmVwbGFjZSIsInNsaWNlIiwiam9pbiIsIkFwcCIsImN0eCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInByb3RvdHlwZSIsImdldEluaXRpYWxQcm9wcyIsIm1lc3NhZ2UiLCJFcnJvciIsInBhZ2VQcm9wcyIsInByb3BzIiwiT2JqZWN0Iiwia2V5cyIsImNvbnNvbGUiLCJ3YXJuIiwicGVyZm9ybWFuY2UiLCJldmVyeSIsIm1ldGhvZCIsImNvbnN0cnVjdG9yIiwicGFnZSIsImNvZGUiLCJlcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdGFjayJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/utils.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/utils/warn-once.js":
/*!**********************************************************************************************************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/utils/warn-once.js ***!
  \**********************************************************************************************************************************************************************************************************/
/***/ ((module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n    value: true\n}));\nObject.defineProperty(exports, \"warnOnce\", ({\n    enumerable: true,\n    get: function() {\n        return warnOnce;\n    }\n}));\nlet warnOnce = (_)=>{};\nif (true) {\n    const warnings = new Set();\n    warnOnce = (msg)=>{\n        if (!warnings.has(msg)) {\n            console.warn(msg);\n        }\n        warnings.add(msg);\n    };\n} //# sourceMappingURL=warn-once.js.map\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE1LjQuN19AYmFiZWwrY29yZUA3LjI4LjNfQG9wZW50ZWxlbWV0cnkrYXBpQDEuOS4wX0BwbGF5d3JpZ2h0K3Rlc3RAMS41NS4wX3JlYWN0LWRfNDdmZjM4MTNkNzkwNTY2ZGYyNTRhMjE2MzU1MGMyZDUvbm9kZV9tb2R1bGVzL25leHQvZGlzdC9zaGFyZWQvbGliL3V0aWxzL3dhcm4tb25jZS5qcyIsIm1hcHBpbmdzIjoiOzs7OzRDQVdTQTs7O2VBQUFBOzs7QUFYVCxJQUFJQSxXQUFXLENBQUNDLEtBQWU7QUFDL0IsSUFBSUMsSUFBb0IsRUFBbUI7SUFDekMsTUFBTUcsV0FBVyxJQUFJQztJQUNyQk4sV0FBVyxDQUFDTztRQUNWLElBQUksQ0FBQ0YsU0FBU0csR0FBRyxDQUFDRCxNQUFNO1lBQ3RCRSxRQUFRQyxJQUFJLENBQUNIO1FBQ2Y7UUFDQUYsU0FBU00sR0FBRyxDQUFDSjtJQUNmO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9zaGFyZWQvbGliL3V0aWxzL3dhcm4tb25jZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJsZXQgd2Fybk9uY2UgPSAoXzogc3RyaW5nKSA9PiB7fVxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgY29uc3Qgd2FybmluZ3MgPSBuZXcgU2V0PHN0cmluZz4oKVxuICB3YXJuT25jZSA9IChtc2c6IHN0cmluZykgPT4ge1xuICAgIGlmICghd2FybmluZ3MuaGFzKG1zZykpIHtcbiAgICAgIGNvbnNvbGUud2Fybihtc2cpXG4gICAgfVxuICAgIHdhcm5pbmdzLmFkZChtc2cpXG4gIH1cbn1cblxuZXhwb3J0IHsgd2Fybk9uY2UgfVxuIl0sIm5hbWVzIjpbIndhcm5PbmNlIiwiXyIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIndhcm5pbmdzIiwiU2V0IiwibXNnIiwiaGFzIiwiY29uc29sZSIsIndhcm4iLCJhZGQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/shared/lib/utils/warn-once.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js":
/*!****************************************************************************!*\
  !*** ./node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js ***!
  \****************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
eval(__webpack_require__.ts("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9wcm9jZXNzQDAuMTEuMTAvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0Qjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDOztBQUV0QztBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9wcm9jZXNzQDAuMTEuMTAvbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/cjs/react-is.development.js":
/*!***********************************************************************************************!*\
  !*** ./node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/cjs/react-is.development.js ***!
  \***********************************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n  (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n  return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n  type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n  if (typeof object === 'object' && object !== null) {\n    var $$typeof = object.$$typeof;\n\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        var type = object.type;\n\n        switch (type) {\n          case REACT_ASYNC_MODE_TYPE:\n          case REACT_CONCURRENT_MODE_TYPE:\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n            return type;\n\n          default:\n            var $$typeofType = type && type.$$typeof;\n\n            switch ($$typeofType) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n              case REACT_PROVIDER_TYPE:\n                return $$typeofType;\n\n              default:\n                return $$typeof;\n            }\n\n        }\n\n      case REACT_PORTAL_TYPE:\n        return $$typeof;\n    }\n  }\n\n  return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n  {\n    if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n      hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n      console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n    }\n  }\n\n  return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n  return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n  return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n  return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n  return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n  return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n  return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n  return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n  return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n  return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n  return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n  return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n  })();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdC1pc0AxNi4xMy4xL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7OztBQUliLElBQUksSUFBcUM7QUFDekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRUFBMkU7QUFDM0U7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlEOztBQUVqRDtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7O0FBRWxEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQjtBQUNqQixzQkFBc0I7QUFDdEIsdUJBQXVCO0FBQ3ZCLHVCQUF1QjtBQUN2QixlQUFlO0FBQ2Ysa0JBQWtCO0FBQ2xCLGdCQUFnQjtBQUNoQixZQUFZO0FBQ1osWUFBWTtBQUNaLGNBQWM7QUFDZCxnQkFBZ0I7QUFDaEIsa0JBQWtCO0FBQ2xCLGdCQUFnQjtBQUNoQixtQkFBbUI7QUFDbkIsd0JBQXdCO0FBQ3hCLHlCQUF5QjtBQUN6Qix5QkFBeUI7QUFDekIsaUJBQWlCO0FBQ2pCLG9CQUFvQjtBQUNwQixrQkFBa0I7QUFDbEIsY0FBYztBQUNkLGNBQWM7QUFDZCxnQkFBZ0I7QUFDaEIsa0JBQWtCO0FBQ2xCLG9CQUFvQjtBQUNwQixrQkFBa0I7QUFDbEIsMEJBQTBCO0FBQzFCLGNBQWM7QUFDZCxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9ub2RlX21vZHVsZXMvLnBucG0vcmVhY3QtaXNAMTYuMTMuMS9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJykgOiAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50JykgOiAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJykgOiAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJykgOiAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJykgOiAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpIDogMHhlYWNlOyAvLyBUT0RPOiBXZSBkb24ndCB1c2UgQXN5bmNNb2RlIG9yIENvbmN1cnJlbnRNb2RlIGFueW1vcmUuIFRoZXkgd2VyZSB0ZW1wb3Jhcnlcbi8vICh1bnN0YWJsZSkgQVBJcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLiBDYW4gd2UgcmVtb3ZlIHRoZSBzeW1ib2xzP1xuXG52YXIgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYXN5bmNfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpIDogMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKSA6IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5JykgOiAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmJsb2NrJykgOiAweGVhZDk7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJykgOiAweGVhZDU7XG52YXIgUkVBQ1RfUkVTUE9OREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5yZXNwb25kZXInKSA6IDB4ZWFkNjtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc2NvcGUnKSA6IDB4ZWFkNztcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCAvLyBOb3RlOiBpdHMgdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgaWYgaXQncyBhIHBvbHlmaWxsLlxuICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUkVTUE9OREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfU0NPUEVfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59IC8vIEFzeW5jTW9kZSBpcyBkZXByZWNhdGVkIGFsb25nIHdpdGggaXNBc3luY01vZGVcblxudmFyIEFzeW5jTW9kZSA9IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbnZhciBDb25jdXJyZW50TW9kZSA9IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7IC8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHx8IHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/cjs/react-is.development.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/index.js":
/*!****************************************************************************!*\
  !*** ./node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/index.js ***!
  \****************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("\n\nif (false) {} else {\n  module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ \"(app-pages-browser)/./node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/cjs/react-is.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdC1pc0AxNi4xMy4xL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixJQUFJLEtBQXFDLEVBQUUsRUFFMUMsQ0FBQztBQUNGLEVBQUUsd0xBQXlEO0FBQzNEIiwic291cmNlcyI6WyIvaG9tZS9vbWFyL0RvY3VtZW50cy9ydWxlSVEvZnJvbnRlbmQvbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0LWlzQDE2LjEzLjEvbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/index.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./node_modules/.pnpm/stacktrace-parser@0.1.11/node_modules/stacktrace-parser/dist/stack-trace-parser.esm.js":
/*!*******************************************************************************************************************!*\
  !*** ./node_modules/.pnpm/stacktrace-parser@0.1.11/node_modules/stacktrace-parser/dist/stack-trace-parser.esm.js ***!
  \*******************************************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   parse: () => (/* binding */ parse)\n/* harmony export */ });\nvar UNKNOWN_FUNCTION = '<unknown>';\n/**\n * This parses the different stack traces and puts them into one format\n * This borrows heavily from TraceKit (https://github.com/csnover/TraceKit)\n */\n\nfunction parse(stackString) {\n  var lines = stackString.split('\\n');\n  return lines.reduce(function (stack, line) {\n    var parseResult = parseChrome(line) || parseWinjs(line) || parseGecko(line) || parseNode(line) || parseJSC(line);\n\n    if (parseResult) {\n      stack.push(parseResult);\n    }\n\n    return stack;\n  }, []);\n}\nvar chromeRe = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|rsc|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nvar chromeEvalRe = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\nfunction parseChrome(line) {\n  var parts = chromeRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n\n  var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n  var submatch = chromeEvalRe.exec(parts[2]);\n\n  if (isEval && submatch != null) {\n    // throw out eval line/column and use top-most line/column number\n    parts[2] = submatch[1]; // url\n\n    parts[3] = submatch[2]; // line\n\n    parts[4] = submatch[3]; // column\n  }\n\n  return {\n    file: !isNative ? parts[2] : null,\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: isNative ? [parts[2]] : [],\n    lineNumber: parts[3] ? +parts[3] : null,\n    column: parts[4] ? +parts[4] : null\n  };\n}\n\nvar winjsRe = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|rsc|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nfunction parseWinjs(line) {\n  var parts = winjsRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  return {\n    file: parts[2],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: [],\n    lineNumber: +parts[3],\n    column: parts[4] ? +parts[4] : null\n  };\n}\n\nvar geckoRe = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|rsc|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nvar geckoEvalRe = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nfunction parseGecko(line) {\n  var parts = geckoRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n  var submatch = geckoEvalRe.exec(parts[3]);\n\n  if (isEval && submatch != null) {\n    // throw out eval line/column and use top-most line number\n    parts[3] = submatch[1];\n    parts[4] = submatch[2];\n    parts[5] = null; // no column when eval\n  }\n\n  return {\n    file: parts[3],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: parts[2] ? parts[2].split(',') : [],\n    lineNumber: parts[4] ? +parts[4] : null,\n    column: parts[5] ? +parts[5] : null\n  };\n}\n\nvar javaScriptCoreRe = /^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;\n\nfunction parseJSC(line) {\n  var parts = javaScriptCoreRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  return {\n    file: parts[3],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: [],\n    lineNumber: +parts[4],\n    column: parts[5] ? +parts[5] : null\n  };\n}\n\nvar nodeRe = /^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nfunction parseNode(line) {\n  var parts = nodeRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  return {\n    file: parts[2],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: [],\n    lineNumber: +parts[3],\n    column: parts[4] ? +parts[4] : null\n  };\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy8ucG5wbS9zdGFja3RyYWNlLXBhcnNlckAwLjEuMTEvbm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtcGFyc2VyL2Rpc3Qvc3RhY2stdHJhY2UtcGFyc2VyLmVzbS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLCtEQUErRDs7QUFFL0QsMkRBQTJEOztBQUUzRDs7QUFFQTtBQUNBO0FBQ0EsNEJBQTRCOztBQUU1Qiw0QkFBNEI7O0FBRTVCLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVpQiIsInNvdXJjZXMiOlsiL2hvbWUvb21hci9Eb2N1bWVudHMvcnVsZUlRL2Zyb250ZW5kL25vZGVfbW9kdWxlcy8ucG5wbS9zdGFja3RyYWNlLXBhcnNlckAwLjEuMTEvbm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtcGFyc2VyL2Rpc3Qvc3RhY2stdHJhY2UtcGFyc2VyLmVzbS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgVU5LTk9XTl9GVU5DVElPTiA9ICc8dW5rbm93bj4nO1xuLyoqXG4gKiBUaGlzIHBhcnNlcyB0aGUgZGlmZmVyZW50IHN0YWNrIHRyYWNlcyBhbmQgcHV0cyB0aGVtIGludG8gb25lIGZvcm1hdFxuICogVGhpcyBib3Jyb3dzIGhlYXZpbHkgZnJvbSBUcmFjZUtpdCAoaHR0cHM6Ly9naXRodWIuY29tL2Nzbm92ZXIvVHJhY2VLaXQpXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RhY2tTdHJpbmcpIHtcbiAgdmFyIGxpbmVzID0gc3RhY2tTdHJpbmcuc3BsaXQoJ1xcbicpO1xuICByZXR1cm4gbGluZXMucmVkdWNlKGZ1bmN0aW9uIChzdGFjaywgbGluZSkge1xuICAgIHZhciBwYXJzZVJlc3VsdCA9IHBhcnNlQ2hyb21lKGxpbmUpIHx8IHBhcnNlV2luanMobGluZSkgfHwgcGFyc2VHZWNrbyhsaW5lKSB8fCBwYXJzZU5vZGUobGluZSkgfHwgcGFyc2VKU0MobGluZSk7XG5cbiAgICBpZiAocGFyc2VSZXN1bHQpIHtcbiAgICAgIHN0YWNrLnB1c2gocGFyc2VSZXN1bHQpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFjaztcbiAgfSwgW10pO1xufVxudmFyIGNocm9tZVJlID0gL15cXHMqYXQgKC4qPykgP1xcKCgoPzpmaWxlfGh0dHBzP3xibG9ifGNocm9tZS1leHRlbnNpb258bmF0aXZlfGV2YWx8d2VicGFja3xyc2N8PGFub255bW91cz58XFwvfFthLXpdOlxcXFx8XFxcXFxcXFwpLio/KSg/OjooXFxkKykpPyg/OjooXFxkKykpP1xcKT9cXHMqJC9pO1xudmFyIGNocm9tZUV2YWxSZSA9IC9cXCgoXFxTKikoPzo6KFxcZCspKSg/OjooXFxkKykpXFwpLztcblxuZnVuY3Rpb24gcGFyc2VDaHJvbWUobGluZSkge1xuICB2YXIgcGFydHMgPSBjaHJvbWVSZS5leGVjKGxpbmUpO1xuXG4gIGlmICghcGFydHMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBpc05hdGl2ZSA9IHBhcnRzWzJdICYmIHBhcnRzWzJdLmluZGV4T2YoJ25hdGl2ZScpID09PSAwOyAvLyBzdGFydCBvZiBsaW5lXG5cbiAgdmFyIGlzRXZhbCA9IHBhcnRzWzJdICYmIHBhcnRzWzJdLmluZGV4T2YoJ2V2YWwnKSA9PT0gMDsgLy8gc3RhcnQgb2YgbGluZVxuXG4gIHZhciBzdWJtYXRjaCA9IGNocm9tZUV2YWxSZS5leGVjKHBhcnRzWzJdKTtcblxuICBpZiAoaXNFdmFsICYmIHN1Ym1hdGNoICE9IG51bGwpIHtcbiAgICAvLyB0aHJvdyBvdXQgZXZhbCBsaW5lL2NvbHVtbiBhbmQgdXNlIHRvcC1tb3N0IGxpbmUvY29sdW1uIG51bWJlclxuICAgIHBhcnRzWzJdID0gc3VibWF0Y2hbMV07IC8vIHVybFxuXG4gICAgcGFydHNbM10gPSBzdWJtYXRjaFsyXTsgLy8gbGluZVxuXG4gICAgcGFydHNbNF0gPSBzdWJtYXRjaFszXTsgLy8gY29sdW1uXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZpbGU6ICFpc05hdGl2ZSA/IHBhcnRzWzJdIDogbnVsbCxcbiAgICBtZXRob2ROYW1lOiBwYXJ0c1sxXSB8fCBVTktOT1dOX0ZVTkNUSU9OLFxuICAgIGFyZ3VtZW50czogaXNOYXRpdmUgPyBbcGFydHNbMl1dIDogW10sXG4gICAgbGluZU51bWJlcjogcGFydHNbM10gPyArcGFydHNbM10gOiBudWxsLFxuICAgIGNvbHVtbjogcGFydHNbNF0gPyArcGFydHNbNF0gOiBudWxsXG4gIH07XG59XG5cbnZhciB3aW5qc1JlID0gL15cXHMqYXQgKD86KCg/OlxcW29iamVjdCBvYmplY3RcXF0pPy4rKSApP1xcKD8oKD86ZmlsZXxtcy1hcHB4fGh0dHBzP3x3ZWJwYWNrfHJzY3xibG9iKTouKj8pOihcXGQrKSg/OjooXFxkKykpP1xcKT9cXHMqJC9pO1xuXG5mdW5jdGlvbiBwYXJzZVdpbmpzKGxpbmUpIHtcbiAgdmFyIHBhcnRzID0gd2luanNSZS5leGVjKGxpbmUpO1xuXG4gIGlmICghcGFydHMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmlsZTogcGFydHNbMl0sXG4gICAgbWV0aG9kTmFtZTogcGFydHNbMV0gfHwgVU5LTk9XTl9GVU5DVElPTixcbiAgICBhcmd1bWVudHM6IFtdLFxuICAgIGxpbmVOdW1iZXI6ICtwYXJ0c1szXSxcbiAgICBjb2x1bW46IHBhcnRzWzRdID8gK3BhcnRzWzRdIDogbnVsbFxuICB9O1xufVxuXG52YXIgZ2Vja29SZSA9IC9eXFxzKiguKj8pKD86XFwoKC4qPylcXCkpPyg/Ol58QCkoKD86ZmlsZXxodHRwcz98YmxvYnxjaHJvbWV8d2VicGFja3xyc2N8cmVzb3VyY2V8XFxbbmF0aXZlKS4qP3xbXkBdKmJ1bmRsZSkoPzo6KFxcZCspKT8oPzo6KFxcZCspKT9cXHMqJC9pO1xudmFyIGdlY2tvRXZhbFJlID0gLyhcXFMrKSBsaW5lIChcXGQrKSg/OiA+IGV2YWwgbGluZSBcXGQrKSogPiBldmFsL2k7XG5cbmZ1bmN0aW9uIHBhcnNlR2Vja28obGluZSkge1xuICB2YXIgcGFydHMgPSBnZWNrb1JlLmV4ZWMobGluZSk7XG5cbiAgaWYgKCFwYXJ0cykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGlzRXZhbCA9IHBhcnRzWzNdICYmIHBhcnRzWzNdLmluZGV4T2YoJyA+IGV2YWwnKSA+IC0xO1xuICB2YXIgc3VibWF0Y2ggPSBnZWNrb0V2YWxSZS5leGVjKHBhcnRzWzNdKTtcblxuICBpZiAoaXNFdmFsICYmIHN1Ym1hdGNoICE9IG51bGwpIHtcbiAgICAvLyB0aHJvdyBvdXQgZXZhbCBsaW5lL2NvbHVtbiBhbmQgdXNlIHRvcC1tb3N0IGxpbmUgbnVtYmVyXG4gICAgcGFydHNbM10gPSBzdWJtYXRjaFsxXTtcbiAgICBwYXJ0c1s0XSA9IHN1Ym1hdGNoWzJdO1xuICAgIHBhcnRzWzVdID0gbnVsbDsgLy8gbm8gY29sdW1uIHdoZW4gZXZhbFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmaWxlOiBwYXJ0c1szXSxcbiAgICBtZXRob2ROYW1lOiBwYXJ0c1sxXSB8fCBVTktOT1dOX0ZVTkNUSU9OLFxuICAgIGFyZ3VtZW50czogcGFydHNbMl0gPyBwYXJ0c1syXS5zcGxpdCgnLCcpIDogW10sXG4gICAgbGluZU51bWJlcjogcGFydHNbNF0gPyArcGFydHNbNF0gOiBudWxsLFxuICAgIGNvbHVtbjogcGFydHNbNV0gPyArcGFydHNbNV0gOiBudWxsXG4gIH07XG59XG5cbnZhciBqYXZhU2NyaXB0Q29yZVJlID0gL15cXHMqKD86KFteQF0qKSg/OlxcKCguKj8pXFwpKT9AKT8oXFxTLio/KTooXFxkKykoPzo6KFxcZCspKT9cXHMqJC9pO1xuXG5mdW5jdGlvbiBwYXJzZUpTQyhsaW5lKSB7XG4gIHZhciBwYXJ0cyA9IGphdmFTY3JpcHRDb3JlUmUuZXhlYyhsaW5lKTtcblxuICBpZiAoIXBhcnRzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZpbGU6IHBhcnRzWzNdLFxuICAgIG1ldGhvZE5hbWU6IHBhcnRzWzFdIHx8IFVOS05PV05fRlVOQ1RJT04sXG4gICAgYXJndW1lbnRzOiBbXSxcbiAgICBsaW5lTnVtYmVyOiArcGFydHNbNF0sXG4gICAgY29sdW1uOiBwYXJ0c1s1XSA/ICtwYXJ0c1s1XSA6IG51bGxcbiAgfTtcbn1cblxudmFyIG5vZGVSZSA9IC9eXFxzKmF0ICg/OigoPzpcXFtvYmplY3Qgb2JqZWN0XFxdKT9bXlxcXFwvXSsoPzogXFxbYXMgXFxTK1xcXSk/KSApP1xcKD8oLio/KTooXFxkKykoPzo6KFxcZCspKT9cXCk/XFxzKiQvaTtcblxuZnVuY3Rpb24gcGFyc2VOb2RlKGxpbmUpIHtcbiAgdmFyIHBhcnRzID0gbm9kZVJlLmV4ZWMobGluZSk7XG5cbiAgaWYgKCFwYXJ0cykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmaWxlOiBwYXJ0c1syXSxcbiAgICBtZXRob2ROYW1lOiBwYXJ0c1sxXSB8fCBVTktOT1dOX0ZVTkNUSU9OLFxuICAgIGFyZ3VtZW50czogW10sXG4gICAgbGluZU51bWJlcjogK3BhcnRzWzNdLFxuICAgIGNvbHVtbjogcGFydHNbNF0gPyArcGFydHNbNF0gOiBudWxsXG4gIH07XG59XG5cbmV4cG9ydCB7IHBhcnNlIH07XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/.pnpm/stacktrace-parser@0.1.11/node_modules/stacktrace-parser/dist/stack-trace-parser.esm.js\n"));
 
/***/ }),
 
/***/ "(app-pages-browser)/./sentry.client.config.ts":
/*!*********************************!*\
  !*** ./sentry.client.config.ts ***!
  \*********************************/
/***/ ((module, __webpack_exports__, __webpack_require__) => {
 
"use strict";
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _sentry_nextjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sentry/nextjs */ \"(app-pages-browser)/./node_modules/.pnpm/@sentry+nextjs@9.46.0_@opentelemetry+context-async-hooks@1.30.1_@opentelemetry+api@1.9._b5bdecf333e747849b4b73c457bdca06/node_modules/@sentry/nextjs/build/esm/index.client.js\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/.pnpm/process@0.11.10/node_modules/process/browser.js\");\nglobalThis[\"_sentryRewritesTunnelPath\"] = \"/monitoring\";\nglobalThis[\"SENTRY_RELEASE\"] = undefined;\nglobalThis[\"_sentryBasePath\"] = undefined;\nglobalThis[\"_sentryRewriteFramesAssetPrefixPath\"] = \"\";\nglobalThis[\"_sentryAssetPrefix\"] = undefined;\nglobalThis[\"_sentryExperimentalThirdPartyOriginStackFrames\"] = undefined;\nglobalThis[\"_sentryRouteManifest\"] = \"{\\\"dynamicRoutes\\\":[{\\\"path\\\":\\\"/assessments/:id\\\",\\\"regex\\\":\\\"^/assessments/([^/]+)$\\\",\\\"paramNames\\\":[\\\"id\\\"]},{\\\"path\\\":\\\"/assessments/:id/results\\\",\\\"regex\\\":\\\"^/assessments/([^/]+)/results$\\\",\\\"paramNames\\\":[\\\"id\\\"]},{\\\"path\\\":\\\"/assessment/results/:token\\\",\\\"regex\\\":\\\"^/assessment/results/([^/]+)$\\\",\\\"paramNames\\\":[\\\"token\\\"]}],\\\"staticRoutes\\\":[{\\\"path\\\":\\\"/\\\"},{\\\"path\\\":\\\"/forgot-password\\\"},{\\\"path\\\":\\\"/login\\\"},{\\\"path\\\":\\\"/onboarding\\\"},{\\\"path\\\":\\\"/register\\\"},{\\\"path\\\":\\\"/reset-password\\\"},{\\\"path\\\":\\\"/signup\\\"},{\\\"path\\\":\\\"/signup-traditional\\\"},{\\\"path\\\":\\\"/analytics\\\"},{\\\"path\\\":\\\"/assessments\\\"},{\\\"path\\\":\\\"/assessments/new\\\"},{\\\"path\\\":\\\"/business-profile\\\"},{\\\"path\\\":\\\"/chat\\\"},{\\\"path\\\":\\\"/chat-test\\\"},{\\\"path\\\":\\\"/checkout\\\"},{\\\"path\\\":\\\"/compliance-wizard\\\"},{\\\"path\\\":\\\"/components\\\"},{\\\"path\\\":\\\"/dashboard\\\"},{\\\"path\\\":\\\"/dashboard-custom\\\"},{\\\"path\\\":\\\"/data-export-demo\\\"},{\\\"path\\\":\\\"/debug\\\"},{\\\"path\\\":\\\"/evidence\\\"},{\\\"path\\\":\\\"/forms\\\"},{\\\"path\\\":\\\"/loading-states\\\"},{\\\"path\\\":\\\"/modals\\\"},{\\\"path\\\":\\\"/policies\\\"},{\\\"path\\\":\\\"/policies/new\\\"},{\\\"path\\\":\\\"/pricing\\\"},{\\\"path\\\":\\\"/reports\\\"},{\\\"path\\\":\\\"/risks\\\"},{\\\"path\\\":\\\"/settings/billing\\\"},{\\\"path\\\":\\\"/settings/integrations\\\"},{\\\"path\\\":\\\"/settings/team\\\"},{\\\"path\\\":\\\"/test-quick-actions\\\"},{\\\"path\\\":\\\"/freemium\\\"},{\\\"path\\\":\\\"/freemium/assessment\\\"},{\\\"path\\\":\\\"/freemium/results\\\"},{\\\"path\\\":\\\"/assessment\\\"},{\\\"path\\\":\\\"/auth/callback\\\"},{\\\"path\\\":\\\"/demo/error-boundary\\\"},{\\\"path\\\":\\\"/demo/file-upload\\\"},{\\\"path\\\":\\\"/demo/loading-states\\\"},{\\\"path\\\":\\\"/design-system\\\"},{\\\"path\\\":\\\"/editor\\\"},{\\\"path\\\":\\\"/marketing\\\"},{\\\"path\\\":\\\"/monitoring/test-error\\\"},{\\\"path\\\":\\\"/showcase/components\\\"},{\\\"path\\\":\\\"/test-theme\\\"}]}\";\n\n// Only initialize Sentry if a valid DSN is provided\nconst sentryDsn = process.env['NEXT_PUBLIC_SENTRY_DSN'];\nconst isValidDsn = sentryDsn && sentryDsn !== 'https://your-dsn@sentry.io/project-id' && sentryDsn.startsWith('https://') && sentryDsn.includes('@sentry.io');\nif (isValidDsn) {\n    _sentry_nextjs__WEBPACK_IMPORTED_MODULE_0__.init({\n        dsn: sentryDsn,\n        // Adjust this value in production, or use tracesSampler for greater control\n        tracesSampleRate:  false ? 0 : 1.0,\n        // Configure browser tracing\n        integrations: [\n            _sentry_nextjs__WEBPACK_IMPORTED_MODULE_0__.browserTracingIntegration({\n                // Set up automatic route change tracking in Next.js App Router\n                instrumentNavigation: true,\n                instrumentPageLoad: true\n            }),\n            _sentry_nextjs__WEBPACK_IMPORTED_MODULE_0__.replayIntegration({\n                // Capture 10% of the sessions in production\n                // Of those, capture 100% of error sessions\n                mask: [],\n                blockAllMedia: false\n            })\n        ],\n        // Environment configuration\n        environment: \"development\",\n        // Release tracking\n        release: process.env['NEXT_PUBLIC_SENTRY_DSN'] || 'ruleiq-frontend@unknown',\n        // Performance Monitoring\n        tracesSampler: (samplingContext)=>{\n            var _location_pathname;\n            // Adjust sample rates based on context\n            const { location } = samplingContext;\n            if ((location === null || location === void 0 ? void 0 : location.pathname) === '/api/health') {\n                return 0.1; // Lower sampling for health checks\n            }\n            if (location === null || location === void 0 ? void 0 : (_location_pathname = location.pathname) === null || _location_pathname === void 0 ? void 0 : _location_pathname.startsWith('/api/')) {\n                return 0.5; // Moderate sampling for API routes\n            }\n            if (false) {}\n            return 1.0; // Full sampling in development\n        },\n        // Error filtering\n        beforeSend (event) {\n            // Filter out development-only errors\n            if (true) {\n                var _event_exception_values__value, _event_exception_values_, _event_exception_values, _event_exception;\n                // Filter out some common development errors\n                if ((_event_exception = event.exception) === null || _event_exception === void 0 ? void 0 : (_event_exception_values = _event_exception.values) === null || _event_exception_values === void 0 ? void 0 : (_event_exception_values_ = _event_exception_values[0]) === null || _event_exception_values_ === void 0 ? void 0 : (_event_exception_values__value = _event_exception_values_.value) === null || _event_exception_values__value === void 0 ? void 0 : _event_exception_values__value.includes('ResizeObserver loop limit exceeded')) {\n                    return null;\n                }\n            }\n            return event;\n        },\n        // User context\n        beforeSendTransaction (event) {\n            // You can modify the transaction before it's sent\n            return event;\n        },\n        // Additional context\n        initialScope: {\n            tags: {\n                component: 'frontend'\n            }\n        }\n    });\n} else {\n// TODO: Replace with proper logging\n}\n\n\n;\n    // Wrapped in an IIFE to avoid polluting the global scope\n    ;\n    (function () {\n        var _a, _b;\n        // Legacy CSS implementations will `eval` browser code in a Node.js context\n        // to extract CSS. For backwards compatibility, we need to check we're in a\n        // browser context before continuing.\n        if (typeof self !== 'undefined' &&\n            // AMP / No-JS mode does not inject these helpers:\n            '$RefreshHelpers$' in self) {\n            // @ts-ignore __webpack_module__ is global\n            var currentExports = module.exports;\n            // @ts-ignore __webpack_module__ is global\n            var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n            // This cannot happen in MainTemplate because the exports mismatch between\n            // templating and execution.\n            self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n            // A module can be accepted automatically based on its exports, e.g. when\n            // it is a Refresh Boundary.\n            if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n                // Save the previous exports signature on update so we can compare the boundary\n                // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n                module.hot.dispose(function (data) {\n                    data.prevSignature =\n                        self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n                });\n                // Unconditionally accept an update to this module, we'll check if it's\n                // still a Refresh Boundary later.\n                // @ts-ignore importMeta is replaced in the loader\n                module.hot.accept();\n                // This field is set when the previous version of this module was a\n                // Refresh Boundary, letting us know we need to check for invalidation or\n                // enqueue an update.\n                if (prevSignature !== null) {\n                    // A boundary can become ineligible if its exports are incompatible\n                    // with the previous exports.\n                    //\n                    // For example, if you add/remove/change exports, we'll want to\n                    // re-execute the importing modules, and force those components to\n                    // re-render. Similarly, if you convert a class component to a\n                    // function, we want to invalidate the boundary.\n                    if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n                        module.hot.invalidate();\n                    }\n                    else {\n                        self.$RefreshHelpers$.scheduleUpdate();\n                    }\n                }\n            }\n            else {\n                // Since we just executed the code for the module, it's possible that the\n                // new exports made it ineligible for being a boundary.\n                // We only care about the case when we were _previously_ a boundary,\n                // because we already accepted this update (accidental side effect).\n                var isNoLongerABoundary = prevSignature !== null;\n                if (isNoLongerABoundary) {\n                    module.hot.invalidate();\n                }\n            }\n        }\n    })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NlbnRyeS5jbGllbnQuY29uZmlnLnRzIiwibWFwcGluZ3MiOiI7OztBQUFDQSxVQUFVLENBQUMsNEJBQTRCLEdBQUc7QUFBY0EsVUFBVSxDQUFDLGlCQUFpQixHQUFHQztBQUFVRCxVQUFVLENBQUMsa0JBQWtCLEdBQUdDO0FBQVVELFVBQVUsQ0FBQyxzQ0FBc0MsR0FBRztBQUFHQSxVQUFVLENBQUMscUJBQXFCLEdBQUdDO0FBQVVELFVBQVUsQ0FBQyxpREFBaUQsR0FBR0M7QUFBVUQsVUFBVSxDQUFDLHVCQUF1QixHQUFHO0FBQTh1RDtBQUU1a0Usb0RBQW9EO0FBQ3BELE1BQU1HLFlBQVlDLE9BQU9BLENBQUNDLEdBQUcsQ0FBQyx5QkFBeUI7QUFDdkQsTUFBTUMsYUFDSkgsYUFDQUEsY0FBYywyQ0FDZEEsVUFBVUksVUFBVSxDQUFDLGVBQ3JCSixVQUFVSyxRQUFRLENBQUM7QUFFckIsSUFBSUYsWUFBWTtJQUNkSixnREFBVyxDQUFDO1FBQ1ZRLEtBQUtQO1FBRUwsNEVBQTRFO1FBQzVFUSxrQkFBa0JQLE1BQXFDLEdBQUcsQ0FBRyxHQUFHO1FBRWhFLDRCQUE0QjtRQUM1QlEsY0FBYztZQUNaVixxRUFBZ0MsQ0FBQztnQkFDL0IsK0RBQStEO2dCQUMvRFksc0JBQXNCO2dCQUN0QkMsb0JBQW9CO1lBQ3RCO1lBQ0FiLDZEQUF3QixDQUFDO2dCQUN2Qiw0Q0FBNEM7Z0JBQzVDLDJDQUEyQztnQkFDM0NlLE1BQU0sRUFBRTtnQkFDUkMsZUFBZTtZQUNqQjtTQUNEO1FBRUQsNEJBQTRCO1FBQzVCQyxhQWpDNndCO1FBbUM3d0IsbUJBQW1CO1FBQ25CQyxTQUFTaEIsT0FBT0EsQ0FBQ0MsR0FBRyxDQUFDLHlCQUF5QixJQUFJO1FBRWxELHlCQUF5QjtRQUN6QmdCLGVBQWUsQ0FBQ0M7Z0JBUVZDO1lBUEosdUNBQXVDO1lBQ3ZDLE1BQU0sRUFBRUEsUUFBUSxFQUFFLEdBQUdEO1lBRXJCLElBQUlDLENBQUFBLHFCQUFBQSwrQkFBQUEsU0FBVUMsUUFBUSxNQUFLLGVBQWU7Z0JBQ3hDLE9BQU8sS0FBSyxtQ0FBbUM7WUFDakQ7WUFFQSxJQUFJRCxxQkFBQUEsZ0NBQUFBLHFCQUFBQSxTQUFVQyxRQUFRLGNBQWxCRCx5Q0FBQUEsbUJBQW9CaEIsVUFBVSxDQUFDLFVBQVU7Z0JBQzNDLE9BQU8sS0FBSyxtQ0FBbUM7WUFDakQ7WUFFQSxJQUFJSCxLQUFxQyxFQUFFLEVBRTFDO1lBRUQsT0FBTyxLQUFLLCtCQUErQjtRQUM3QztRQUVBLGtCQUFrQjtRQUNsQnFCLFlBQVdDLEtBQUs7WUFDZCxxQ0FBcUM7WUFDckMsSUFBSXRCLElBQXNDLEVBQUU7b0JBRXRDc0IsZ0NBQUFBLDBCQUFBQSx5QkFBQUE7Z0JBREosNENBQTRDO2dCQUM1QyxLQUFJQSxtQkFBQUEsTUFBTUMsU0FBUyxjQUFmRCx3Q0FBQUEsMEJBQUFBLGlCQUFpQkUsTUFBTSxjQUF2QkYsK0NBQUFBLDJCQUFBQSx1QkFBeUIsQ0FBQyxFQUFFLGNBQTVCQSxnREFBQUEsaUNBQUFBLHlCQUE4QkcsS0FBSyxjQUFuQ0gscURBQUFBLCtCQUFxQ2xCLFFBQVEsQ0FBQyx1Q0FBdUM7b0JBQ3ZGLE9BQU87Z0JBQ1Q7WUFDRjtZQUVBLE9BQU9rQjtRQUNUO1FBRUEsZUFBZTtRQUNmSSx1QkFBc0JKLEtBQUs7WUFDekIsa0RBQWtEO1lBQ2xELE9BQU9BO1FBQ1Q7UUFFQSxxQkFBcUI7UUFDckJLLGNBQWM7WUFDWkMsTUFBTTtnQkFDSkMsV0FBVztZQUNiO1FBQ0Y7SUFDRjtBQUNGLE9BQU87QUFDTCxvQ0FBb0M7QUFDdEMiLCJzb3VyY2VzIjpbIi9ob21lL29tYXIvRG9jdW1lbnRzL3J1bGVJUS9mcm9udGVuZC9zZW50cnkuY2xpZW50LmNvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyI7Z2xvYmFsVGhpc1tcIl9zZW50cnlSZXdyaXRlc1R1bm5lbFBhdGhcIl0gPSBcIi9tb25pdG9yaW5nXCI7Z2xvYmFsVGhpc1tcIlNFTlRSWV9SRUxFQVNFXCJdID0gdW5kZWZpbmVkO2dsb2JhbFRoaXNbXCJfc2VudHJ5QmFzZVBhdGhcIl0gPSB1bmRlZmluZWQ7Z2xvYmFsVGhpc1tcIl9zZW50cnlSZXdyaXRlRnJhbWVzQXNzZXRQcmVmaXhQYXRoXCJdID0gXCJcIjtnbG9iYWxUaGlzW1wiX3NlbnRyeUFzc2V0UHJlZml4XCJdID0gdW5kZWZpbmVkO2dsb2JhbFRoaXNbXCJfc2VudHJ5RXhwZXJpbWVudGFsVGhpcmRQYXJ0eU9yaWdpblN0YWNrRnJhbWVzXCJdID0gdW5kZWZpbmVkO2dsb2JhbFRoaXNbXCJfc2VudHJ5Um91dGVNYW5pZmVzdFwiXSA9IFwie1xcXCJkeW5hbWljUm91dGVzXFxcIjpbe1xcXCJwYXRoXFxcIjpcXFwiL2Fzc2Vzc21lbnRzLzppZFxcXCIsXFxcInJlZ2V4XFxcIjpcXFwiXi9hc3Nlc3NtZW50cy8oW14vXSspJFxcXCIsXFxcInBhcmFtTmFtZXNcXFwiOltcXFwiaWRcXFwiXX0se1xcXCJwYXRoXFxcIjpcXFwiL2Fzc2Vzc21lbnRzLzppZC9yZXN1bHRzXFxcIixcXFwicmVnZXhcXFwiOlxcXCJeL2Fzc2Vzc21lbnRzLyhbXi9dKykvcmVzdWx0cyRcXFwiLFxcXCJwYXJhbU5hbWVzXFxcIjpbXFxcImlkXFxcIl19LHtcXFwicGF0aFxcXCI6XFxcIi9hc3Nlc3NtZW50L3Jlc3VsdHMvOnRva2VuXFxcIixcXFwicmVnZXhcXFwiOlxcXCJeL2Fzc2Vzc21lbnQvcmVzdWx0cy8oW14vXSspJFxcXCIsXFxcInBhcmFtTmFtZXNcXFwiOltcXFwidG9rZW5cXFwiXX1dLFxcXCJzdGF0aWNSb3V0ZXNcXFwiOlt7XFxcInBhdGhcXFwiOlxcXCIvXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2ZvcmdvdC1wYXNzd29yZFxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9sb2dpblxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9vbmJvYXJkaW5nXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL3JlZ2lzdGVyXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL3Jlc2V0LXBhc3N3b3JkXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL3NpZ251cFxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9zaWdudXAtdHJhZGl0aW9uYWxcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvYW5hbHl0aWNzXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2Fzc2Vzc21lbnRzXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2Fzc2Vzc21lbnRzL25ld1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9idXNpbmVzcy1wcm9maWxlXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2NoYXRcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvY2hhdC10ZXN0XFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2NoZWNrb3V0XFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2NvbXBsaWFuY2Utd2l6YXJkXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2NvbXBvbmVudHNcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvZGFzaGJvYXJkXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2Rhc2hib2FyZC1jdXN0b21cXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvZGF0YS1leHBvcnQtZGVtb1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9kZWJ1Z1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9ldmlkZW5jZVxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9mb3Jtc1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9sb2FkaW5nLXN0YXRlc1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9tb2RhbHNcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvcG9saWNpZXNcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvcG9saWNpZXMvbmV3XFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL3ByaWNpbmdcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvcmVwb3J0c1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9yaXNrc1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9zZXR0aW5ncy9iaWxsaW5nXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL3NldHRpbmdzL2ludGVncmF0aW9uc1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9zZXR0aW5ncy90ZWFtXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL3Rlc3QtcXVpY2stYWN0aW9uc1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9mcmVlbWl1bVxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9mcmVlbWl1bS9hc3Nlc3NtZW50XFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2ZyZWVtaXVtL3Jlc3VsdHNcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvYXNzZXNzbWVudFxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9hdXRoL2NhbGxiYWNrXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2RlbW8vZXJyb3ItYm91bmRhcnlcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvZGVtby9maWxlLXVwbG9hZFxcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9kZW1vL2xvYWRpbmctc3RhdGVzXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL2Rlc2lnbi1zeXN0ZW1cXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvZWRpdG9yXFxcIn0se1xcXCJwYXRoXFxcIjpcXFwiL21hcmtldGluZ1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi9tb25pdG9yaW5nL3Rlc3QtZXJyb3JcXFwifSx7XFxcInBhdGhcXFwiOlxcXCIvc2hvd2Nhc2UvY29tcG9uZW50c1xcXCJ9LHtcXFwicGF0aFxcXCI6XFxcIi90ZXN0LXRoZW1lXFxcIn1dfVwiO2ltcG9ydCAqIGFzIFNlbnRyeSBmcm9tICdAc2VudHJ5L25leHRqcyc7XG5cbi8vIE9ubHkgaW5pdGlhbGl6ZSBTZW50cnkgaWYgYSB2YWxpZCBEU04gaXMgcHJvdmlkZWRcbmNvbnN0IHNlbnRyeURzbiA9IHByb2Nlc3MuZW52WydORVhUX1BVQkxJQ19TRU5UUllfRFNOJ107XG5jb25zdCBpc1ZhbGlkRHNuID1cbiAgc2VudHJ5RHNuICYmXG4gIHNlbnRyeURzbiAhPT0gJ2h0dHBzOi8veW91ci1kc25Ac2VudHJ5LmlvL3Byb2plY3QtaWQnICYmXG4gIHNlbnRyeURzbi5zdGFydHNXaXRoKCdodHRwczovLycpICYmXG4gIHNlbnRyeURzbi5pbmNsdWRlcygnQHNlbnRyeS5pbycpO1xuXG5pZiAoaXNWYWxpZERzbikge1xuICBTZW50cnkuaW5pdCh7XG4gICAgZHNuOiBzZW50cnlEc24sXG5cbiAgICAvLyBBZGp1c3QgdGhpcyB2YWx1ZSBpbiBwcm9kdWN0aW9uLCBvciB1c2UgdHJhY2VzU2FtcGxlciBmb3IgZ3JlYXRlciBjb250cm9sXG4gICAgdHJhY2VzU2FtcGxlUmF0ZTogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyA/IDAuMSA6IDEuMCxcblxuICAgIC8vIENvbmZpZ3VyZSBicm93c2VyIHRyYWNpbmdcbiAgICBpbnRlZ3JhdGlvbnM6IFtcbiAgICAgIFNlbnRyeS5icm93c2VyVHJhY2luZ0ludGVncmF0aW9uKHtcbiAgICAgICAgLy8gU2V0IHVwIGF1dG9tYXRpYyByb3V0ZSBjaGFuZ2UgdHJhY2tpbmcgaW4gTmV4dC5qcyBBcHAgUm91dGVyXG4gICAgICAgIGluc3RydW1lbnROYXZpZ2F0aW9uOiB0cnVlLFxuICAgICAgICBpbnN0cnVtZW50UGFnZUxvYWQ6IHRydWUsXG4gICAgICB9KSxcbiAgICAgIFNlbnRyeS5yZXBsYXlJbnRlZ3JhdGlvbih7XG4gICAgICAgIC8vIENhcHR1cmUgMTAlIG9mIHRoZSBzZXNzaW9ucyBpbiBwcm9kdWN0aW9uXG4gICAgICAgIC8vIE9mIHRob3NlLCBjYXB0dXJlIDEwMCUgb2YgZXJyb3Igc2Vzc2lvbnNcbiAgICAgICAgbWFzazogW10sXG4gICAgICAgIGJsb2NrQWxsTWVkaWE6IGZhbHNlLFxuICAgICAgfSksXG4gICAgXSxcblxuICAgIC8vIEVudmlyb25tZW50IGNvbmZpZ3VyYXRpb25cbiAgICBlbnZpcm9ubWVudDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYsXG5cbiAgICAvLyBSZWxlYXNlIHRyYWNraW5nXG4gICAgcmVsZWFzZTogcHJvY2Vzcy5lbnZbJ05FWFRfUFVCTElDX1NFTlRSWV9EU04nXSB8fCAncnVsZWlxLWZyb250ZW5kQHVua25vd24nLFxuXG4gICAgLy8gUGVyZm9ybWFuY2UgTW9uaXRvcmluZ1xuICAgIHRyYWNlc1NhbXBsZXI6IChzYW1wbGluZ0NvbnRleHQpID0+IHtcbiAgICAgIC8vIEFkanVzdCBzYW1wbGUgcmF0ZXMgYmFzZWQgb24gY29udGV4dFxuICAgICAgY29uc3QgeyBsb2NhdGlvbiB9ID0gc2FtcGxpbmdDb250ZXh0O1xuXG4gICAgICBpZiAobG9jYXRpb24/LnBhdGhuYW1lID09PSAnL2FwaS9oZWFsdGgnKSB7XG4gICAgICAgIHJldHVybiAwLjE7IC8vIExvd2VyIHNhbXBsaW5nIGZvciBoZWFsdGggY2hlY2tzXG4gICAgICB9XG5cbiAgICAgIGlmIChsb2NhdGlvbj8ucGF0aG5hbWU/LnN0YXJ0c1dpdGgoJy9hcGkvJykpIHtcbiAgICAgICAgcmV0dXJuIDAuNTsgLy8gTW9kZXJhdGUgc2FtcGxpbmcgZm9yIEFQSSByb3V0ZXNcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIDAuMTsgLy8gTG93ZXIgc2FtcGxpbmcgaW4gcHJvZHVjdGlvblxuICAgICAgfVxuXG4gICAgICByZXR1cm4gMS4wOyAvLyBGdWxsIHNhbXBsaW5nIGluIGRldmVsb3BtZW50XG4gICAgfSxcblxuICAgIC8vIEVycm9yIGZpbHRlcmluZ1xuICAgIGJlZm9yZVNlbmQoZXZlbnQpIHtcbiAgICAgIC8vIEZpbHRlciBvdXQgZGV2ZWxvcG1lbnQtb25seSBlcnJvcnNcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgICAvLyBGaWx0ZXIgb3V0IHNvbWUgY29tbW9uIGRldmVsb3BtZW50IGVycm9yc1xuICAgICAgICBpZiAoZXZlbnQuZXhjZXB0aW9uPy52YWx1ZXM/LlswXT8udmFsdWU/LmluY2x1ZGVzKCdSZXNpemVPYnNlcnZlciBsb29wIGxpbWl0IGV4Y2VlZGVkJykpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSxcblxuICAgIC8vIFVzZXIgY29udGV4dFxuICAgIGJlZm9yZVNlbmRUcmFuc2FjdGlvbihldmVudCkge1xuICAgICAgLy8gWW91IGNhbiBtb2RpZnkgdGhlIHRyYW5zYWN0aW9uIGJlZm9yZSBpdCdzIHNlbnRcbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9LFxuXG4gICAgLy8gQWRkaXRpb25hbCBjb250ZXh0XG4gICAgaW5pdGlhbFNjb3BlOiB7XG4gICAgICB0YWdzOiB7XG4gICAgICAgIGNvbXBvbmVudDogJ2Zyb250ZW5kJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG59IGVsc2Uge1xuICAvLyBUT0RPOiBSZXBsYWNlIHdpdGggcHJvcGVyIGxvZ2dpbmdcbn1cbiJdLCJuYW1lcyI6WyJnbG9iYWxUaGlzIiwidW5kZWZpbmVkIiwiU2VudHJ5Iiwic2VudHJ5RHNuIiwicHJvY2VzcyIsImVudiIsImlzVmFsaWREc24iLCJzdGFydHNXaXRoIiwiaW5jbHVkZXMiLCJpbml0IiwiZHNuIiwidHJhY2VzU2FtcGxlUmF0ZSIsImludGVncmF0aW9ucyIsImJyb3dzZXJUcmFjaW5nSW50ZWdyYXRpb24iLCJpbnN0cnVtZW50TmF2aWdhdGlvbiIsImluc3RydW1lbnRQYWdlTG9hZCIsInJlcGxheUludGVncmF0aW9uIiwibWFzayIsImJsb2NrQWxsTWVkaWEiLCJlbnZpcm9ubWVudCIsInJlbGVhc2UiLCJ0cmFjZXNTYW1wbGVyIiwic2FtcGxpbmdDb250ZXh0IiwibG9jYXRpb24iLCJwYXRobmFtZSIsImJlZm9yZVNlbmQiLCJldmVudCIsImV4Y2VwdGlvbiIsInZhbHVlcyIsInZhbHVlIiwiYmVmb3JlU2VuZFRyYW5zYWN0aW9uIiwiaW5pdGlhbFNjb3BlIiwidGFncyIsImNvbXBvbmVudCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./sentry.client.config.ts\n"));
 
/***/ })
 
},
/******/ __webpack_require__ => { // webpackRuntimeModules
/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
/******/ var __webpack_exports__ = (__webpack_exec__("(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js"), __webpack_exec__("(app-pages-browser)/./node_modules/.pnpm/next@15.4.7_@babel+core@7.28.3_@opentelemetry+api@1.9.0_@playwright+test@1.55.0_react-d_47ff3813d790566df254a2163550c2d5/node_modules/next/dist/client/app-next-dev.js"), __webpack_exec__("(app-pages-browser)/./sentry.client.config.ts"), __webpack_exec__("(app-pages-browser)/./instrumentation-client.ts"));
/******/ _N_E = __webpack_exports__;
/******/ }
]);